mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-13 19:52:40 +00:00
Merge branch 'master' into upstream-merge-8808
This commit is contained in:
6
.github/workflows/autochangelog.yml
vendored
6
.github/workflows/autochangelog.yml
vendored
@@ -1,6 +1,6 @@
|
||||
name: Autochangelog
|
||||
on:
|
||||
pull_request:
|
||||
pull_request_target:
|
||||
types: closed
|
||||
branches:
|
||||
- master
|
||||
@@ -15,6 +15,10 @@ jobs:
|
||||
if: github.event.pull_request.merged == true
|
||||
steps:
|
||||
- uses: /actions/checkout@v2
|
||||
with:
|
||||
ref: master
|
||||
- name: Update repository to master
|
||||
run: git pull "origin" master
|
||||
- name: Ensure +x on CI directory
|
||||
run: |
|
||||
chmod -R +x ./tools/ci
|
||||
|
||||
@@ -62,3 +62,7 @@
|
||||
#define INFECTION_LEVEL_TWO 500
|
||||
#define INFECTION_LEVEL_THREE 1000
|
||||
#define INFECTION_LEVEL_MAX 1500
|
||||
|
||||
#define MODULAR_BODYPART_INVALID 0 // Cannot be detached or reattached.
|
||||
#define MODULAR_BODYPART_PROSTHETIC 1 // Can be detached or reattached freely.
|
||||
#define MODULAR_BODYPART_CYBERNETIC 2 // Can be detached or reattached to compatible parent organs.
|
||||
|
||||
@@ -8,3 +8,4 @@ GLOBAL_LIST_EMPTY(wire_color_directory) // This is an associative list with the
|
||||
GLOBAL_LIST_EMPTY(tagger_locations)
|
||||
|
||||
GLOBAL_LIST_INIT(char_directory_tags, list("Pred", "Prey", "Switch", "Non-Vore", "Unset"))
|
||||
GLOBAL_LIST_INIT(char_directory_erptags, list("Top", "Bottom", "Switch", "No ERP", "Unset"))
|
||||
@@ -93,7 +93,6 @@ var/global/list/string_slot_flags = list(
|
||||
"holster" = SLOT_HOLSTER
|
||||
)
|
||||
|
||||
//CHOMP Edit: This fix is taken from citadel station pr #2779. Fixes a "pretty horrific memory leak" that is called any time someone opens character creator.
|
||||
GLOBAL_LIST_EMPTY(mannequins)
|
||||
/proc/get_mannequin(var/ckey = "NULL")
|
||||
var/mob/living/carbon/human/dummy/mannequin/M = GLOB.mannequins[ckey]
|
||||
|
||||
@@ -539,4 +539,22 @@ var/global/list/remainless_species = list(SPECIES_PROMETHEAN,
|
||||
for(var/species_name in whitelisted_icons)
|
||||
custom_species_bases += species_name
|
||||
|
||||
// Weaver recipe stuff
|
||||
paths = typesof(/datum/weaver_recipe/structure) - /datum/weaver_recipe/structure
|
||||
for(var/path in paths)
|
||||
var/datum/weaver_recipe/instance = new path()
|
||||
if(!instance.title)
|
||||
continue //A prototype or something
|
||||
weavable_structures[instance.title] = instance
|
||||
|
||||
paths = typesof(/datum/weaver_recipe/item) - /datum/weaver_recipe/item
|
||||
for(var/path in paths)
|
||||
var/datum/weaver_recipe/instance = new path()
|
||||
if(!instance.title)
|
||||
continue //A prototype or something
|
||||
weavable_items[instance.title] = instance
|
||||
|
||||
return 1 // Hooks must return 1
|
||||
|
||||
var/global/list/weavable_structures = list()
|
||||
var/global/list/weavable_items = list()
|
||||
@@ -122,14 +122,18 @@ Proc for attack log creation, because really why not
|
||||
|
||||
if(ismob(user)) //CHOMPEdit Begin
|
||||
//user.attack_log += text("\[[time_stamp()]\] <font color='red'>Attacked [target_str]: [what_done]</font>")
|
||||
var/DBQuery/query_insert = SSdbcore.NewQuery("INSERT INTO erro_attacklog (id, time, ckey, mob, message) VALUES (null, NOW(), :t_ckey, :t_mob, :t_content)", list("t_ckey" = user.ckey, "t_mob" = user.real_name, "t_content" = "<font color='red'>Attacked [target_str]: [what_done]</font>"))
|
||||
query_insert.Execute(async=use_async)
|
||||
qdel(query_insert)
|
||||
//var/DBQuery/query_insert = SSdbcore.NewQuery("INSERT INTO erro_attacklog (id, time, ckey, mob, message) VALUES (null, NOW(), :t_ckey, :t_mob, :t_content)", list("t_ckey" = user.ckey, "t_mob" = user.real_name, "t_content" = "<font color='red'>Attacked [target_str]: [what_done]</font>"))
|
||||
//query_insert.Execute(async=use_async)
|
||||
//qdel(query_insert)
|
||||
if(SSdbcore.Connect())
|
||||
rustg_sql_query_async(SSdbcore.connection, "INSERT INTO erro_attacklog (id, time, ckey, mob, message) VALUES (null, NOW(), :t_ckey, :t_mob, :t_content)", json_encode(list("t_ckey" = user.ckey, "t_mob" = user.real_name, "t_content" = "<font color='red'>Attacked [target_str]: [what_done]</font>")))
|
||||
if(ismob(target))
|
||||
//target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Attacked by [user_str]: [what_done]</font>")
|
||||
var/DBQuery/query_insert = SSdbcore.NewQuery("INSERT INTO erro_attacklog (id, time, ckey, mob, message) VALUES (null, NOW(), :t_ckey, :t_mob, :t_content)", list("t_ckey" = target.ckey, "t_mob" = target.real_name, "t_content" = "<font color='orange'>Attacked by [user_str]: [what_done]</font>"))
|
||||
query_insert.Execute(async=use_async)
|
||||
qdel(query_insert)
|
||||
//var/DBQuery/query_insert = SSdbcore.NewQuery("INSERT INTO erro_attacklog (id, time, ckey, mob, message) VALUES (null, NOW(), :t_ckey, :t_mob, :t_content)", list("t_ckey" = target.ckey, "t_mob" = target.real_name, "t_content" = "<font color='orange'>Attacked by [user_str]: [what_done]</font>"))
|
||||
//query_insert.Execute(async=use_async)
|
||||
//qdel(query_insert)
|
||||
if(SSdbcore.Connect())
|
||||
rustg_sql_query_async(SSdbcore.connection, "INSERT INTO erro_attacklog (id, time, ckey, mob, message) VALUES (null, NOW(), :t_ckey, :t_mob, :t_content)", json_encode(list("t_ckey" = target.ckey, "t_mob" = target.real_name, "t_content" = "<font color='orange'>Attacked by [user_str]: [what_done]</font>")))
|
||||
//CHOMPEdit End
|
||||
log_attack(user_str,target_str,what_done)
|
||||
if(admin_notify)
|
||||
|
||||
@@ -60,6 +60,8 @@
|
||||
|
||||
// Cyborgs have no range-checking unless there is item use
|
||||
if(!W)
|
||||
if(bolt && !bolt.malfunction && A.loc != module)
|
||||
return
|
||||
A.add_hiddenprint(src)
|
||||
A.attack_robot(src)
|
||||
return
|
||||
@@ -119,35 +121,56 @@
|
||||
/atom/proc/BorgCtrlShiftClick(var/mob/living/silicon/robot/user) //forward to human click if not overriden
|
||||
CtrlShiftClick(user)
|
||||
|
||||
/obj/machinery/door/airlock/BorgCtrlShiftClick(mob/user)
|
||||
/obj/machinery/door/airlock/BorgCtrlShiftClick(var/mob/living/silicon/robot/user)
|
||||
if(user.bolt && !user.bolt.malfunction)
|
||||
return
|
||||
|
||||
AICtrlShiftClick(user)
|
||||
|
||||
/atom/proc/BorgShiftClick(var/mob/living/silicon/robot/user) //forward to human click if not overriden
|
||||
ShiftClick(user)
|
||||
|
||||
/obj/machinery/door/airlock/BorgShiftClick(mob/user) // Opens and closes doors! Forwards to AI code.
|
||||
/obj/machinery/door/airlock/BorgShiftClick(var/mob/living/silicon/robot/user) // Opens and closes doors! Forwards to AI code.
|
||||
if(user.bolt && !user.bolt.malfunction)
|
||||
return
|
||||
|
||||
AIShiftClick(user)
|
||||
|
||||
/atom/proc/BorgCtrlClick(var/mob/living/silicon/robot/user) //forward to human click if not overriden
|
||||
CtrlClick(user)
|
||||
|
||||
/obj/machinery/door/airlock/BorgCtrlClick(mob/user) // Bolts doors. Forwards to AI code.
|
||||
/obj/machinery/door/airlock/BorgCtrlClick(var/mob/living/silicon/robot/user) // Bolts doors. Forwards to AI code.
|
||||
if(user.bolt && !user.bolt.malfunction)
|
||||
return
|
||||
|
||||
AICtrlClick(user)
|
||||
|
||||
/obj/machinery/power/apc/BorgCtrlClick(mob/user) // turns off/on APCs. Forwards to AI code.
|
||||
/obj/machinery/power/apc/BorgCtrlClick(var/mob/living/silicon/robot/user) // turns off/on APCs. Forwards to AI code.
|
||||
if(user.bolt && !user.bolt.malfunction)
|
||||
return
|
||||
|
||||
AICtrlClick(user)
|
||||
|
||||
/obj/machinery/turretid/BorgCtrlClick(mob/user) //turret control on/off. Forwards to AI code.
|
||||
/obj/machinery/turretid/BorgCtrlClick(var/mob/living/silicon/robot/user) //turret control on/off. Forwards to AI code.
|
||||
if(user.bolt && !user.bolt.malfunction)
|
||||
return
|
||||
|
||||
AICtrlClick(user)
|
||||
|
||||
/atom/proc/BorgAltClick(var/mob/living/silicon/robot/user)
|
||||
AltClick(user)
|
||||
return
|
||||
|
||||
/obj/machinery/door/airlock/BorgAltClick(mob/user) // Eletrifies doors. Forwards to AI code.
|
||||
/obj/machinery/door/airlock/BorgAltClick(var/mob/living/silicon/robot/user) // Eletrifies doors. Forwards to AI code.
|
||||
if(user.bolt && !user.bolt.malfunction)
|
||||
return
|
||||
|
||||
AIAltClick(user)
|
||||
|
||||
/obj/machinery/turretid/BorgAltClick(mob/user) //turret lethal on/off. Forwards to AI code.
|
||||
/obj/machinery/turretid/BorgAltClick(var/mob/living/silicon/robot/user) //turret lethal on/off. Forwards to AI code.
|
||||
if(user.bolt && !user.bolt.malfunction)
|
||||
return
|
||||
|
||||
AIAltClick(user)
|
||||
|
||||
/*
|
||||
|
||||
@@ -5,7 +5,6 @@ SUBSYSTEM_DEF(overlays)
|
||||
priority = FIRE_PRIORITY_OVERLAYS
|
||||
init_order = INIT_ORDER_OVERLAY
|
||||
|
||||
var/initialized = FALSE
|
||||
var/list/queue // Queue of atoms needing overlay compiling (TODO-VERIFY!)
|
||||
var/list/stats
|
||||
var/list/overlay_icon_state_caches // Cache thing
|
||||
@@ -22,7 +21,6 @@ var/global/image/appearance_bro = new() // Temporarily super-global because of B
|
||||
stats = list()
|
||||
|
||||
/datum/controller/subsystem/overlays/Initialize()
|
||||
initialized = TRUE
|
||||
fire(mc_check = FALSE)
|
||||
..()
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ PROCESSING_SUBSYSTEM_DEF(chemistry)
|
||||
/datum/controller/subsystem/processing/chemistry/Initialize()
|
||||
initialize_chemical_reactions()
|
||||
initialize_chemical_reagents()
|
||||
..()
|
||||
|
||||
//Chemical Reactions - Initialises all /datum/chemical_reaction into a list
|
||||
// It is filtered into multiple lists within a list.
|
||||
|
||||
@@ -510,8 +510,9 @@
|
||||
|
||||
//HUMAN
|
||||
/mob/living/carbon/human/mind_initialize()
|
||||
..()
|
||||
if(!mind.assigned_role) mind.assigned_role = USELESS_JOB //defualt //VOREStation Edit - Visitor not Assistant
|
||||
. = ..()
|
||||
if(!mind.assigned_role)
|
||||
mind.assigned_role = USELESS_JOB //defualt //VOREStation Edit - Visitor not Assistant
|
||||
|
||||
//slime
|
||||
/mob/living/simple_mob/slime/mind_initialize()
|
||||
|
||||
101
code/datums/roundstats/departmentgoal.dm
Normal file
101
code/datums/roundstats/departmentgoal.dm
Normal file
@@ -0,0 +1,101 @@
|
||||
|
||||
GLOBAL_LIST(department_goals)
|
||||
GLOBAL_LIST(active_department_goals)
|
||||
|
||||
/hook/startup/proc/initializeDepartmentGoals()
|
||||
GLOB.department_goals = list(GOAL_GENERAL, GOAL_MEDICAL, GOAL_SECURITY, GOAL_ENGINEERING, GOAL_CARGO, GOAL_RESEARCH)
|
||||
GLOB.active_department_goals = list(GOAL_GENERAL, GOAL_MEDICAL, GOAL_SECURITY, GOAL_ENGINEERING, GOAL_CARGO, GOAL_RESEARCH)
|
||||
|
||||
for(var/category in GLOB.department_goals)
|
||||
GLOB.department_goals[category] = list()
|
||||
|
||||
for(var/subtype in subtypesof(/datum/goal))
|
||||
var/datum/goal/SG = new subtype()
|
||||
|
||||
if(SG.name == "goal")
|
||||
continue
|
||||
|
||||
if(SG.category == category)
|
||||
GLOB.department_goals[category] |= SG
|
||||
|
||||
for(var/category in GLOB.active_department_goals)
|
||||
GLOB.active_department_goals[category] = list()
|
||||
var/list/cat_goals = GLOB.department_goals[category]
|
||||
|
||||
var/goal_count = rand(2,4)
|
||||
|
||||
for(var/count = 1 to goal_count)
|
||||
var/datum/goal/G
|
||||
|
||||
if(LAZYLEN(cat_goals))
|
||||
G = pick(cat_goals)
|
||||
|
||||
if(G)
|
||||
G.active_goal = TRUE
|
||||
cat_goals -= G
|
||||
|
||||
GLOB.active_department_goals[category] |= G
|
||||
return 1
|
||||
|
||||
/hook/roundend/proc/checkDepartmentGoals()
|
||||
for(var/category in GLOB.active_department_goals)
|
||||
var/list/cat_goals = GLOB.active_department_goals[category]
|
||||
|
||||
to_world("<span class='filter_system'><b>[category]</b></span>")
|
||||
|
||||
if(!LAZYLEN(cat_goals))
|
||||
to_world("<span class='filter_system'>There were no assigned goals!</span>")
|
||||
|
||||
else
|
||||
for(var/datum/goal/G in cat_goals)
|
||||
var/success = G.check_completion()
|
||||
to_world("<span class='filter_system'>[success ? "<span class='notice'>[G.name]</span>" : "<span class='warning'>[G.name]</span>"]</span>")
|
||||
to_world("<span class='filter_system'>[G.goal_text]</span>")
|
||||
return 1
|
||||
|
||||
/datum/goal
|
||||
var/name = "goal"
|
||||
|
||||
var/goal_text = "Do nothing! Congratulations."
|
||||
|
||||
var/active_goal = FALSE
|
||||
|
||||
var/category = GOAL_GENERAL
|
||||
|
||||
/datum/goal/proc/check_completion()
|
||||
return FALSE
|
||||
|
||||
/datum/goal/common
|
||||
name = "goal"
|
||||
|
||||
goal_text = "Congratulations, you still do nothing."
|
||||
|
||||
/datum/goal/medical
|
||||
name = "goal"
|
||||
|
||||
goal_text = "Congratulations, you still do nothing."
|
||||
category = GOAL_MEDICAL
|
||||
|
||||
/datum/goal/security
|
||||
name = "goal"
|
||||
|
||||
goal_text = "Congratulations, you still do nothing."
|
||||
category = GOAL_SECURITY
|
||||
|
||||
/datum/goal/engineering
|
||||
name = "goal"
|
||||
|
||||
goal_text = "Congratulations, you still do nothing."
|
||||
category = GOAL_ENGINEERING
|
||||
|
||||
/datum/goal/cargo
|
||||
name = "goal"
|
||||
|
||||
goal_text = "Congratulations, you still do nothing."
|
||||
category = GOAL_CARGO
|
||||
|
||||
/datum/goal/research
|
||||
name = "goal"
|
||||
|
||||
goal_text = "Congratulations, you still do nothing."
|
||||
category = GOAL_RESEARCH
|
||||
@@ -189,6 +189,17 @@
|
||||
containername = "Jumper kit crate"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/restrainingbolt
|
||||
name = "Restraining bolt crate"
|
||||
contains = list(
|
||||
/obj/item/weapon/implanter = 1,
|
||||
/obj/item/weapon/implantcase/restrainingbolt = 2
|
||||
)
|
||||
cost = 40
|
||||
containertype = /obj/structure/closet/crate/secure/cybersolutions
|
||||
containername = "Restraining bolt crate"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/bike
|
||||
name = "Spacebike Crate"
|
||||
contains = list()
|
||||
|
||||
@@ -187,3 +187,13 @@
|
||||
/datum/category_item/underwear/undershirt/pinkblack_tshirt
|
||||
name = "Pink and Black T-Shirt"
|
||||
icon_state = "pinkblack_tshirt"
|
||||
|
||||
/datum/category_item/underwear/undershirt/turtle
|
||||
name = "Turtleneck"
|
||||
icon_state = "turtleneck"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/category_item/underwear/undershirt/sleevelessturtle
|
||||
name = "Turtleneck, Sleeveless"
|
||||
icon_state = "sleevelessturtle"
|
||||
has_color = TRUE
|
||||
@@ -50,13 +50,12 @@
|
||||
var/turf/base_turf //The base turf type of the area, which can be used to override the z-level's base turf
|
||||
var/forbid_events = FALSE // If true, random events will not start inside this area.
|
||||
var/no_spoilers = FALSE // If true, makes it much more difficult to see what is inside an area with things like mesons.
|
||||
var/soundproofed = FALSE // If true, blocks sounds from other areas and prevents hearers on other areas from hearing the sounds within.
|
||||
|
||||
/area/Initialize()
|
||||
. = ..()
|
||||
|
||||
luminosity = !(dynamic_lighting)
|
||||
icon_state = ""
|
||||
|
||||
return INITIALIZE_HINT_LATELOAD // Areas tradiationally are initialized AFTER other atoms.
|
||||
|
||||
/area/LateInitialize()
|
||||
@@ -67,7 +66,6 @@
|
||||
power_change() // all machines set to current power level, also updates lighting icon
|
||||
if(no_spoilers)
|
||||
set_spoiler_obfuscation(TRUE)
|
||||
return INITIALIZE_HINT_LATELOAD
|
||||
|
||||
// Changes the area of T to A. Do not do this manually.
|
||||
// Area is expected to be a non-null instance.
|
||||
|
||||
@@ -134,7 +134,7 @@
|
||||
for(var/i in loc)
|
||||
var/atom/movable/thing = i
|
||||
// We don't call parent so we are calling this for byond
|
||||
thing.Crossed(src)
|
||||
thing.Crossed(src, oldloc)
|
||||
|
||||
// We're a multi-tile object (multiple locs)
|
||||
else if(. && newloc)
|
||||
@@ -462,6 +462,8 @@
|
||||
minor_dir = dx
|
||||
minor_dist = dist_x
|
||||
|
||||
range = min(dist_x + dist_y, range)
|
||||
|
||||
while(src && target && src.throwing && istype(src.loc, /turf) \
|
||||
&& ((abs(target.x - src.x)+abs(target.y - src.y) > 0 && dist_travelled < range) \
|
||||
|| (a && a.has_gravity == 0) \
|
||||
|
||||
@@ -118,6 +118,10 @@ var/global/list/datum/dna/gene/dna_genes[0]
|
||||
var/base_species = "Human"
|
||||
var/list/species_traits = list()
|
||||
var/blood_color = "#A10808"
|
||||
var/custom_say
|
||||
var/custom_ask
|
||||
var/custom_whisper
|
||||
var/custom_exclaim
|
||||
// VOREStation
|
||||
|
||||
// New stuff
|
||||
@@ -139,6 +143,10 @@ var/global/list/datum/dna/gene/dna_genes[0]
|
||||
new_dna.custom_species=custom_species //VOREStaton Edit
|
||||
new_dna.species_traits=species_traits.Copy() //VOREStation Edit
|
||||
new_dna.blood_color=blood_color //VOREStation Edit
|
||||
new_dna.custom_say=custom_say //VOREStaton Edit
|
||||
new_dna.custom_ask=custom_ask //VOREStaton Edit
|
||||
new_dna.custom_whisper=custom_whisper //VOREStaton Edit
|
||||
new_dna.custom_exclaim=custom_exclaim //VOREStaton Edit
|
||||
for(var/b=1;b<=DNA_SE_LENGTH;b++)
|
||||
new_dna.SE[b]=SE[b]
|
||||
if(b<=DNA_UI_LENGTH)
|
||||
@@ -200,15 +208,15 @@ var/global/list/datum/dna/gene/dna_genes[0]
|
||||
size_multiplier = player_sizes_list.Find(N)
|
||||
break
|
||||
|
||||
var/taurtype = /datum/sprite_accessory/tail/taur/spider
|
||||
if(istype(character.tail_style, taurtype))
|
||||
character.verbs += /mob/living/proc/weaveWebBindings
|
||||
|
||||
// Technically custom_species is not part of the UI, but this place avoids merge problems.
|
||||
src.custom_species = character.custom_species
|
||||
src.base_species = character.species.base_species
|
||||
src.blood_color = character.species.blood_color
|
||||
src.species_traits = character.species.traits.Copy()
|
||||
src.custom_say = character.custom_say
|
||||
src.custom_ask = character.custom_ask
|
||||
src.custom_whisper = character.custom_whisper
|
||||
src.custom_exclaim = character.custom_exclaim
|
||||
|
||||
// +1 to account for the none-of-the-above possibility
|
||||
SetUIValueRange(DNA_UI_EAR_STYLE, ear_style + 1, ear_styles_list.len + 1, 1)
|
||||
|
||||
@@ -237,6 +237,10 @@
|
||||
|
||||
// Technically custom_species is not part of the UI, but this place avoids merge problems.
|
||||
H.custom_species = dna.custom_species
|
||||
H.custom_say = dna.custom_say
|
||||
H.custom_ask = dna.custom_ask
|
||||
H.custom_whisper = dna.custom_whisper
|
||||
H.custom_exclaim = dna.custom_exclaim
|
||||
H.species.blood_color = dna.blood_color
|
||||
var/datum/species/S = H.species
|
||||
S.produceCopy(dna.base_species,dna.species_traits,src)
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
var/last_activation = 0
|
||||
|
||||
/obj/structure/cult/pylon/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/structure/cult/pylon/attack_hand(mob/M as mob)
|
||||
|
||||
9
code/game/jobs/job/alt_titles_zz_ch.dm
Normal file
9
code/game/jobs/job/alt_titles_zz_ch.dm
Normal file
@@ -0,0 +1,9 @@
|
||||
/datum/job/entertainer
|
||||
alt_titles = list("Performer" = /datum/alt_title/performer, "Musician" = /datum/alt_title/musician, "Stagehand" = /datum/alt_title/stagehand,
|
||||
"Actor" = /datum/alt_title/actor, "Dancer" = /datum/alt_title/dancer, "Singer" = /datum/alt_title/singer,
|
||||
"Magician" = /datum/alt_title/magician, "Comedian" = /datum/alt_title/comedian, "Tragedian" = /datum/alt_title/tragedian,
|
||||
"Fitness Instructor" = /datum/alt_title/fitness)
|
||||
|
||||
/datum/alt_title/fitness
|
||||
title = "Fitness Instructor"
|
||||
title_blurb = "A Fitness Instructor's goal is to keep the station in shape. Get the crew shaving up those built up pounds and get them to eat something other than chocolate bars and burgers for once"
|
||||
@@ -529,5 +529,5 @@
|
||||
stasis_level = 100 //Just one setting
|
||||
|
||||
/obj/machinery/sleeper/survival_pod/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
RefreshParts(1)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/machinery/computer/arcade/
|
||||
/obj/machinery/computer/arcade
|
||||
name = "random arcade"
|
||||
desc = "random arcade machine"
|
||||
icon_state = "arcade"
|
||||
@@ -25,15 +25,15 @@
|
||||
/obj/item/toy/stickhorse = 2
|
||||
)
|
||||
|
||||
/obj/machinery/computer/arcade/New()
|
||||
..()
|
||||
/obj/machinery/computer/arcade/Initialize()
|
||||
. = ..()
|
||||
// If it's a generic arcade machine, pick a random arcade
|
||||
// circuit board for it and make the new machine
|
||||
if(!circuit)
|
||||
var/choice = pick(subtypesof(/obj/item/weapon/circuitboard/arcade) - /obj/item/weapon/circuitboard/arcade/clawmachine)
|
||||
var/obj/item/weapon/circuitboard/CB = new choice()
|
||||
new CB.build_path(loc, CB)
|
||||
qdel(src)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
/obj/machinery/computer/arcade/proc/prizevend()
|
||||
if(!(contents-circuit).len)
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
light_color = "#315ab4"
|
||||
|
||||
/obj/machinery/computer/cloning/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
pods = list()
|
||||
records = list()
|
||||
set_scan_temp("Scanner ready.", "good")
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
|
||||
/obj/machinery/computer/med_data/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
field_edit_questions = list(
|
||||
// General
|
||||
"sex" = "Please select new sex:",
|
||||
|
||||
@@ -335,7 +335,7 @@
|
||||
name = "Monitor Decryption Key"
|
||||
|
||||
/obj/item/weapon/paper/monitorkey/Initialize()
|
||||
..() //Late init
|
||||
..()
|
||||
return INITIALIZE_HINT_LATELOAD
|
||||
|
||||
/obj/item/weapon/paper/monitorkey/LateInitialize()
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
var/title = "Mass Driver Controls"
|
||||
|
||||
/obj/machinery/computer/pod/Initialize()
|
||||
..() //Not returning parent because lateload
|
||||
..()
|
||||
return INITIALIZE_HINT_LATELOAD
|
||||
|
||||
/obj/machinery/computer/pod/LateInitialize()
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
var/static/list/field_edit_choices
|
||||
|
||||
/obj/machinery/computer/secure_data/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
field_edit_questions = list(
|
||||
// General
|
||||
"name" = "Please enter new name:",
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
var/static/list/field_edit_choices
|
||||
|
||||
/obj/machinery/computer/skills/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
field_edit_questions = list(
|
||||
// General
|
||||
"name" = "Please input new name:",
|
||||
|
||||
@@ -40,7 +40,6 @@
|
||||
|
||||
/obj/machinery/door_timer/Initialize()
|
||||
..()
|
||||
//Doors need to go first, and can't rely on init order, so come back to me.
|
||||
return INITIALIZE_HINT_LATELOAD
|
||||
|
||||
/obj/machinery/door_timer/LateInitialize()
|
||||
|
||||
@@ -164,7 +164,7 @@ GLOBAL_LIST_BOILERPLATE(allCasters, /obj/machinery/newscaster)
|
||||
securityCaster = 1
|
||||
|
||||
/obj/machinery/newscaster/Initialize()
|
||||
..() //Not returning . because lateload below
|
||||
..()
|
||||
GLOB.allCasters += src
|
||||
unit_no = ++unit_no_cur
|
||||
paper_remaining = 15
|
||||
|
||||
72
code/game/machinery/telecomms/broadcaster_ch.dm
Normal file
72
code/game/machinery/telecomms/broadcaster_ch.dm
Normal file
@@ -0,0 +1,72 @@
|
||||
//This is meant for essentially linking a separate z-level to the rest with telecomms
|
||||
/obj/machinery/telecomms/allinone/link
|
||||
name = "Telecommunications Mainframe"
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
icon_state = "allinone"
|
||||
desc = "A compact machine used for portable subspace telecommuniations processing."
|
||||
density = 1
|
||||
use_power = USE_POWER_IDLE
|
||||
idle_power_usage = 20
|
||||
anchored = 1
|
||||
machinetype = 6
|
||||
produces_heat = 0
|
||||
|
||||
/obj/machinery/telecomms/allinone/link/receive_signal(datum/signal/signal)
|
||||
|
||||
// Has to be on to receive messages
|
||||
if(!on)
|
||||
return
|
||||
|
||||
// Why did you use this subtype?
|
||||
if(!using_map.use_overmap)
|
||||
return
|
||||
|
||||
// Is there a valid signal
|
||||
if(!signal)
|
||||
return
|
||||
|
||||
// Where are we able to hear from (and talk to, since we're AIO) anyway?
|
||||
//var/map_levels = using_map.get_map_levels(z, TRUE, overmap_range)
|
||||
|
||||
if("[signal.data["level"]]" == "[z]")
|
||||
signal.data["level"] = list(0)
|
||||
else
|
||||
signal.data["level"] = list(z)
|
||||
|
||||
if(is_freq_listening(signal)) // detect subspace signals
|
||||
|
||||
signal.data["done"] = 1 // mark the signal as being broadcasted since we're a broadcaster
|
||||
signal.data["compression"] = 0 // decompress since we're a processor
|
||||
|
||||
if(signal.data["slow"] > 0)
|
||||
sleep(signal.data["slow"]) // simulate the network lag if necessary
|
||||
|
||||
/* ###### Broadcast a message using signal.data ###### */
|
||||
|
||||
var/datum/radio_frequency/connection = signal.data["connection"]
|
||||
|
||||
var/list/forced_radios
|
||||
for(var/weakref/wr in linked_radios_weakrefs)
|
||||
var/obj/item/device/radio/R = wr.resolve()
|
||||
if(istype(R))
|
||||
LAZYDISTINCTADD(forced_radios, R)
|
||||
|
||||
Broadcast_Message(
|
||||
signal.data["connection"],
|
||||
signal.data["mob"],
|
||||
signal.data["vmask"],
|
||||
signal.data["vmessage"],
|
||||
signal.data["radio"],
|
||||
signal.data["message"],
|
||||
signal.data["name"],
|
||||
signal.data["job"],
|
||||
signal.data["realname"],
|
||||
signal.data["vname"],
|
||||
DATA_NORMAL,
|
||||
signal.data["compression"],
|
||||
signal.data["level"],
|
||||
connection.frequency,
|
||||
signal.data["verb"],
|
||||
signal.data["language"],
|
||||
forced_radios
|
||||
)
|
||||
@@ -32,7 +32,7 @@
|
||||
sleep(2)
|
||||
go_out()
|
||||
sleep(2)
|
||||
del(src)
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/transportpod/relaymove(mob/user as mob)
|
||||
if(user.stat)
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
thrusters_possible = 1
|
||||
|
||||
/obj/mecha/combat/gorilla/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) // This thing basically cannot function without an external power supply.
|
||||
ME.attach(src)
|
||||
ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/cannon(src)
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
switch_dmg_type_possible = TRUE
|
||||
|
||||
/obj/mecha/combat/phazon/equipped/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
starting_equipment = list(
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/rcd,
|
||||
/obj/item/mecha_parts/mecha_equipment/gravcatapult
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
. += "<span class='warning'><b>It is completely destroyed.</b></span>"
|
||||
|
||||
/obj/item/mecha_parts/component/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
integrity = max_integrity
|
||||
|
||||
if(start_damaged)
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
var/obj/item/weapon/inflatable_dispenser/my_deployer = null
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/powertool/inflatables/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
my_deployer = my_tool
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/powertool/inflatables/Topic(href, href_list)
|
||||
|
||||
@@ -318,7 +318,7 @@
|
||||
equip_type = EQUIP_HULL
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/crisis_drone/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
drone_overlay = new(src.icon, icon_state = droid_state)
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/crisis_drone/Destroy()
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
var/weapons_only_cycle = FALSE //So combat mechs don't switch to their equipment at times.
|
||||
|
||||
/obj/mecha/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
for(var/path in starting_components)
|
||||
var/obj/item/mecha_parts/component/C = new path(src)
|
||||
|
||||
@@ -127,7 +127,7 @@
|
||||
C.images += holder
|
||||
*/
|
||||
/obj/mecha/medical/odysseus/loaded/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tool/sleeper
|
||||
ME.attach(src)
|
||||
ME = new /obj/item/mecha_parts/mecha_equipment/tool/sleeper
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
max_special_equip = 1
|
||||
|
||||
/obj/mecha/working/ripley/deathripley/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/safety
|
||||
ME.attach(src)
|
||||
return
|
||||
@@ -80,7 +80,7 @@
|
||||
name = "APLU \"Miner\""
|
||||
|
||||
/obj/mecha/working/ripley/mining/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
//Attach drill
|
||||
if(prob(25)) //Possible diamond drill... Feeling lucky?
|
||||
var/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill/D = new /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill
|
||||
|
||||
@@ -40,10 +40,7 @@
|
||||
return TRUE
|
||||
|
||||
/atom/movable/proc/has_buckled_mobs()
|
||||
if(!buckled_mobs)
|
||||
return FALSE
|
||||
if(buckled_mobs.len)
|
||||
return TRUE
|
||||
return LAZYLEN(buckled_mobs)
|
||||
|
||||
/atom/movable/Destroy()
|
||||
unbuckle_all_mobs()
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
create_reagents(100)
|
||||
|
||||
/obj/effect/decal/cleanable/chemcoating/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
var/turf/T = get_turf(src)
|
||||
if(T)
|
||||
for(var/obj/O in get_turf(src))
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/obj/effect/decal/warning_stripes
|
||||
icon = 'icons/effects/warning_stripes.dmi'
|
||||
|
||||
/obj/effect/decal/warning_stripes/New()
|
||||
/obj/effect/decal/warning_stripes/Initialize()
|
||||
. = ..()
|
||||
var/turf/T=get_turf(src)
|
||||
var/image/I=image(icon, icon_state = icon_state, dir = dir)
|
||||
I.color=color
|
||||
T.overlays += I
|
||||
qdel(src)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
@@ -10,32 +10,37 @@
|
||||
var/obj/item/weapon/mine/mineitemtype = /obj/item/weapon/mine
|
||||
var/panel_open = 0
|
||||
var/datum/wires/mines/wires = null
|
||||
register_as_dangerous_object = TRUE
|
||||
|
||||
var/camo_net = FALSE // Will the mine 'cloak' on deployment?
|
||||
|
||||
// The trap item will be triggered in some manner when detonating. Default only checks for grenades.
|
||||
var/obj/item/trap = null
|
||||
|
||||
/obj/effect/mine/New()
|
||||
/obj/effect/mine/Initialize()
|
||||
icon_state = "uglyminearmed"
|
||||
wires = new(src)
|
||||
|
||||
. = ..()
|
||||
if(ispath(trap))
|
||||
trap = new trap(src)
|
||||
|
||||
/obj/effect/mine/Initialize()
|
||||
..()
|
||||
|
||||
register_dangerous_to_step()
|
||||
if(camo_net)
|
||||
alpha = 50
|
||||
|
||||
/obj/effect/mine/Destroy()
|
||||
unregister_dangerous_to_step()
|
||||
if(trap)
|
||||
QDEL_NULL(trap)
|
||||
qdel_null(wires)
|
||||
return ..()
|
||||
|
||||
/obj/effect/mine/Moved(atom/oldloc)
|
||||
. = ..()
|
||||
if(.)
|
||||
var/turf/old_turf = get_turf(oldloc)
|
||||
var/turf/new_turf = get_turf(src)
|
||||
if(old_turf != new_turf)
|
||||
old_turf.unregister_dangerous_object(src)
|
||||
new_turf.register_dangerous_object(src)
|
||||
|
||||
/obj/effect/mine/proc/explode(var/mob/living/M)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
|
||||
triggered = 1
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
..()
|
||||
|
||||
/obj/effect/temporary_effect/eruption/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
flick("[icon_state]_create",src)
|
||||
|
||||
/obj/effect/temporary_effect/eruption/Destroy()
|
||||
|
||||
@@ -159,7 +159,6 @@
|
||||
|
||||
/obj/effect/spawner/newbomb/Initialize(newloc)
|
||||
..(newloc)
|
||||
|
||||
var/obj/item/device/transfer_valve/V = new(src.loc)
|
||||
var/obj/item/weapon/tank/phoron/PT = new(V)
|
||||
var/obj/item/weapon/tank/oxygen/OT = new(V)
|
||||
@@ -183,19 +182,14 @@
|
||||
OT.air_contents.temperature = PHORON_MINIMUM_BURN_TEMPERATURE+1
|
||||
OT.air_contents.update_values()
|
||||
|
||||
|
||||
var/obj/item/device/assembly/S = new assembly_type(V)
|
||||
|
||||
|
||||
V.attached_device = S
|
||||
|
||||
S.holder = V
|
||||
S.toggle_secure()
|
||||
|
||||
V.update_icon()
|
||||
|
||||
qdel(src)
|
||||
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
|
||||
///////////////////////
|
||||
|
||||
@@ -20,10 +20,14 @@
|
||||
/obj/effect/simple_portal/proc/handle_teleport(atom/movable/AM)
|
||||
if(destination)
|
||||
AM.forceMove(destination)
|
||||
if(!AM.is_incorporeal())
|
||||
if(!AM.is_incorporeal() && !istype(AM,/mob/observer))
|
||||
playsound(get_turf(src),teleport_sound,60,1)
|
||||
playsound(get_turf(destination),teleport_sound,60,1)
|
||||
|
||||
/obj/effect/simple_portal/attack_ghost(var/mob/observer/dead/user)
|
||||
. = ..()
|
||||
handle_teleport(user)
|
||||
|
||||
/obj/effect/simple_portal/coords
|
||||
var/tele_x
|
||||
var/tele_y
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
var/cell_type = /obj/item/weapon/cell/device
|
||||
|
||||
/obj/item/device/flash/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
power_supply = new cell_type(src)
|
||||
|
||||
/obj/item/device/flash/attackby(var/obj/item/W, var/mob/user)
|
||||
|
||||
@@ -7,15 +7,12 @@
|
||||
var/obj/item/stack/type_to_spawn = null
|
||||
|
||||
/obj/fiftyspawner/Initialize()
|
||||
..() //We're not returning . because we're going to ask to be deleted.
|
||||
|
||||
..()
|
||||
var/turf/T = get_turf(src)
|
||||
var/obj/item/stack/M = new type_to_spawn(T)
|
||||
var/obj/structure/closet/C = locate() in T
|
||||
var/obj/item/stack/M = new type_to_spawn(C || T)
|
||||
M.amount = M.max_amount //some stuff spawns with 60, we're still calling it fifty
|
||||
M.update_icon() // Some stacks have different sprites depending on how full they are.
|
||||
var/obj/structure/closet/C = locate() in T
|
||||
if(C)
|
||||
C.contents += M
|
||||
return INITIALIZE_HINT_QDEL //Bye!
|
||||
|
||||
/obj/fiftyspawner/rods
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
stacktype = /obj/item/stack/rods
|
||||
no_variants = TRUE
|
||||
|
||||
/obj/item/stack/rods/New()
|
||||
..()
|
||||
/obj/item/stack/rods/Initialize()
|
||||
. = ..()
|
||||
recipes = rods_recipes
|
||||
update_icon()
|
||||
|
||||
|
||||
@@ -32,19 +32,15 @@
|
||||
|
||||
bag_material = MAT_SYNCLOTH
|
||||
|
||||
/obj/item/stack/sandbags/New(var/newloc, var/amt, var/bag_mat)
|
||||
..()
|
||||
/obj/item/stack/sandbags/Initialize(var/ml, var/amt, var/bag_mat)
|
||||
. = ..(ml, amt)
|
||||
recipes = sandbag_recipes
|
||||
update_icon()
|
||||
|
||||
if(bag_mat)
|
||||
bag_material = bag_mat
|
||||
|
||||
var/datum/material/M = get_material_by_name("[bag_material]")
|
||||
if(!M)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
return INITIALIZE_HINT_QDEL
|
||||
color = M.icon_colour
|
||||
|
||||
/obj/item/stack/sandbags/update_icon()
|
||||
@@ -136,17 +132,13 @@ var/global/list/datum/stack_recipe/sandbag_recipes = list( \
|
||||
|
||||
var/bag_material = "cloth"
|
||||
|
||||
/obj/item/stack/emptysandbag/New(var/newloc, var/amt, var/bag_mat)
|
||||
..(newloc, amt)
|
||||
|
||||
/obj/item/stack/emptysandbag/Initialize(var/ml, var/amt, var/bag_mat)
|
||||
. = ..(ml, amt)
|
||||
if(bag_mat)
|
||||
bag_material = bag_mat
|
||||
|
||||
var/datum/material/M = get_material_by_name("[bag_material]")
|
||||
if(!M)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
return INITIALIZE_HINT_QDEL
|
||||
color = M.icon_colour
|
||||
|
||||
/obj/item/stack/emptysandbag/attack_self(var/mob/user)
|
||||
|
||||
@@ -29,14 +29,13 @@
|
||||
var/pass_color = FALSE // Will the item pass its own color var to the created item? Dyed cloth, wood, etc.
|
||||
var/strict_color_stacking = FALSE // Will the stack merge with other stacks that are different colors? (Dyed cloth, wood, etc)
|
||||
|
||||
/obj/item/stack/New(var/loc, var/amount=null)
|
||||
..()
|
||||
if (!stacktype)
|
||||
/obj/item/stack/Initialize(var/ml, var/amount)
|
||||
. = ..()
|
||||
if(!stacktype)
|
||||
stacktype = type
|
||||
if (amount)
|
||||
if(amount)
|
||||
src.amount = amount
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/stack/Destroy()
|
||||
if(uses_charge)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
w_class = ITEMSIZE_TINY
|
||||
max_amount = 30
|
||||
|
||||
/obj/item/stack/arcadeticket/New(loc, amount = null)
|
||||
/obj/item/stack/arcadeticket/Initialize()
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
|
||||
@@ -25,8 +25,8 @@
|
||||
var/perunit = SHEET_MATERIAL_AMOUNT
|
||||
var/apply_colour //CHOMPEDIT: End
|
||||
|
||||
/obj/item/stack/tile/New()
|
||||
..()
|
||||
/obj/item/stack/tile/Initialize()
|
||||
. = ..()
|
||||
randpixel_xy()
|
||||
|
||||
/*
|
||||
|
||||
10
code/game/objects/items/weapons/id cards/cards_vr.dm
Normal file
10
code/game/objects/items/weapons/id cards/cards_vr.dm
Normal file
@@ -0,0 +1,10 @@
|
||||
/obj/item/weapon/card/emag/examine(mob/user)
|
||||
. = ..()
|
||||
. += "[uses] uses remaining."
|
||||
|
||||
/obj/item/weapon/card/emag/used
|
||||
uses = 1
|
||||
|
||||
/obj/item/weapon/card/emag/used/Initialize()
|
||||
. = ..()
|
||||
uses = rand(1, 5)
|
||||
@@ -299,3 +299,13 @@
|
||||
src.imp = new /obj/item/weapon/implant/organ/limbaugment/wrist/blade( src )
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/implantcase/restrainingbolt
|
||||
name = "glass case - 'Restraining Bolt'"
|
||||
desc = "A case containing a restraining bolt."
|
||||
icon_state = "implantcase-b"
|
||||
|
||||
/obj/item/weapon/implantcase/restrainingbolt/New()
|
||||
src.imp = new /obj/item/weapon/implant/restrainingbolt( src )
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -150,3 +150,12 @@
|
||||
S.remove_from_storage(A)
|
||||
A.loc.contents.Remove(A)
|
||||
update()
|
||||
|
||||
/obj/item/weapon/implanter/restrainingbolt
|
||||
name = "implanter (bolt)"
|
||||
|
||||
/obj/item/weapon/implanter/restrainingbolt/New()
|
||||
src.imp = new /obj/item/weapon/implant/restrainingbolt( src )
|
||||
..()
|
||||
update()
|
||||
return
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
|
||||
/obj/item/weapon/implant/restrainingbolt
|
||||
name = "\improper restraining bolt"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "implant"
|
||||
@@ -103,9 +103,9 @@
|
||||
<h2>Meat Pie:</h2>
|
||||
Flat Dough and Meat in an Oven Pan, same way you use the Grill; take the Pan out, put the ingredients in, and place it back to cook. Simple, but very good looking and tasty!
|
||||
<h2>Burritos:</h2>
|
||||
A personal favorite due to flexibility of options: Use a Tortilla as a base for all of these. For a meaty one, add 2 cooked cutlets to the Microwave; very simple and filling! To add some cheese to that meaty burrito use 2 meatballs and 1 cheese wedge <b>((For some reason only the base meaty burrito uses cutlets all the other recipies uses meatballs... please let someone in #wiki or #dev know if this changes.))</b> For a Breakfast Wrap, add a whole Egg, Cooked Bacon (Raw Bacon cooked in the Microwave), and Cheese in with the Tortilla. For Vegan Burritos, just cook a Tortilla and Tofu together in the Microwave.
|
||||
Burritos: A personal favorite due to flexibility of options: Use a Tortilla as a base for all of these. For a Chili one, add 2 Meatballs and 1 Space Spice (found near the Flour) to the Microwave; very simple and filling! Add a Cheese Wedge instead of the spice to make a queso burrito. For a Breakfast Wrap, add a whole Egg, Cooked Bacon (Raw Bacon cooked in the Microwave), and Cheese in with the Tortilla. For Vegan Burritos, just cook a Tortilla and Tofu together in the Microwave.
|
||||
<h2>Tacos:</h2>
|
||||
Either a Tortilla or Dough Slice as the base, then 1 cooked Cutlet, and a Cheese Wedge. Very easy to mass produce, great in a pinch!
|
||||
Use a tortilla then 1 cooked Cutlet, and a Cheese Wedge. Very easy to mass produce, great in a pinch!
|
||||
<h2>Cheesy Nachos:</h2>
|
||||
Tortilla, Cheese and 1 unit of Salt in the microwave, the perfect Finger Food!
|
||||
<h2>Spaghetti:</h2>
|
||||
@@ -126,11 +126,10 @@
|
||||
<h4>((The websites linked above are also on our stations wiki. Which is always in need of helping heads to fix it up. The recipes listed on the web link may not be fully accurate so please don't be afraid to pop into the discord wiki channel and lend a hand!))</h4>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
"}
|
||||
|
||||
//accurate as of 2/17/21
|
||||
/obj/item/weapon/book/manual//bar_guide
|
||||
//accurate as of 2/23/21
|
||||
/obj/item/weapon/book/manual/bar_guide
|
||||
name = "How to Alcohol (And other Drinks)"
|
||||
desc = "A helpful guide to the world of barkeeping."
|
||||
icon_state = "bar-guide"
|
||||
@@ -214,7 +213,7 @@
|
||||
1 part Beer, 2 parts Ale
|
||||
<h3>Whiskey Cola:</h3>
|
||||
2 parts Whiskey, 1 part Space Cola
|
||||
<h3>Binman Bliss:
|
||||
<h3>Binman Bliss:</h3>
|
||||
1 part Sake, 1 part Tequila
|
||||
|
||||
<h1>High Alcohol</h1>
|
||||
|
||||
@@ -77,14 +77,14 @@
|
||||
//visible_message("[user] has smashed the snowball in their hand!", "You smash the snowball in your hand.")
|
||||
to_chat(user, "<span class='notice'>You smash the snowball in your hand.</span>")
|
||||
var/atom/S = new /obj/item/stack/material/snow(user.loc)
|
||||
del(src)
|
||||
qdel(src)
|
||||
user.put_in_hands(S)
|
||||
else
|
||||
//visible_message("[user] starts compacting the snowball.", "You start compacting the snowball.")
|
||||
to_chat(user, "<span class='notice'>You start compacting the snowball.</span>")
|
||||
if(do_after(user, 2 SECONDS))
|
||||
var/atom/S = new /obj/item/weapon/material/snow/snowball/reinforced(user.loc)
|
||||
del(src)
|
||||
qdel(src)
|
||||
user.put_in_hands(S)
|
||||
|
||||
/obj/item/weapon/material/snow/snowball/reinforced
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
gauge_icon = "indicator_emergency"
|
||||
|
||||
/obj/item/weapon/tank/emergency/nitrogen/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
src.air_contents.adjust_gas("nitrogen", (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
|
||||
|
||||
/obj/item/weapon/tank/emergency/nitrogen/double
|
||||
|
||||
@@ -671,7 +671,7 @@
|
||||
always_process = TRUE
|
||||
|
||||
/obj/item/weapon/weldingtool/electric/mounted/exosuit/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
if(istype(loc, /obj/item/mecha_parts/mecha_equipment))
|
||||
equip_mount = loc
|
||||
|
||||
@@ -19,29 +19,11 @@
|
||||
var/can_speak = 0 //For MMIs and admin trickery. If an object has a brainmob in its contents, set this to 1 to allow it to speak.
|
||||
|
||||
var/show_examine = TRUE // Does this pop up on a mob when the mob is examined?
|
||||
var/register_as_dangerous_object = FALSE // Should this tell its turf that it is dangerous automatically?
|
||||
|
||||
/obj/Initialize()
|
||||
if(register_as_dangerous_object)
|
||||
register_dangerous_to_step()
|
||||
return ..()
|
||||
|
||||
/obj/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
if(register_as_dangerous_object)
|
||||
unregister_dangerous_to_step()
|
||||
return ..()
|
||||
|
||||
/obj/Moved(atom/oldloc)
|
||||
. = ..()
|
||||
if(register_as_dangerous_object)
|
||||
var/turf/old_turf = get_turf(oldloc)
|
||||
var/turf/new_turf = get_turf(src)
|
||||
|
||||
if(old_turf != new_turf)
|
||||
old_turf.unregister_dangerous_object(src)
|
||||
new_turf.register_dangerous_object(src)
|
||||
|
||||
/obj/Topic(href, href_list, var/datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
if(usr && ..())
|
||||
return 1
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
// creates a new object and deletes itself
|
||||
/obj/random/Initialize()
|
||||
. = ..()
|
||||
..()
|
||||
if (!prob(spawn_nothing_percentage))
|
||||
spawn_item()
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
@@ -34,7 +34,6 @@ two tiles on initialization, and which way a cliff is facing may change during m
|
||||
climbable = TRUE
|
||||
climb_delay = 10 SECONDS
|
||||
block_turf_edges = TRUE // Don't want turf edges popping up from the cliff edge.
|
||||
register_as_dangerous_object = TRUE
|
||||
|
||||
var/icon_variant = null // Used to make cliffs less repeative by having a selection of sprites to display.
|
||||
var/corner = FALSE // Used for icon things.
|
||||
@@ -44,6 +43,23 @@ two tiles on initialization, and which way a cliff is facing may change during m
|
||||
var/is_double_cliff = FALSE // Set to true when making the two-tile cliffs, used for projectile checks.
|
||||
var/uphill_penalty = 30 // Odds of a projectile not making it up the cliff.
|
||||
|
||||
/obj/structure/cliff/Initialize()
|
||||
. = ..()
|
||||
register_dangerous_to_step()
|
||||
|
||||
/obj/structure/cliff/Destroy()
|
||||
unregister_dangerous_to_step()
|
||||
. = ..()
|
||||
|
||||
/obj/structure/cliff/Moved(atom/oldloc)
|
||||
. = ..()
|
||||
if(.)
|
||||
var/turf/old_turf = get_turf(oldloc)
|
||||
var/turf/new_turf = get_turf(src)
|
||||
if(old_turf != new_turf)
|
||||
old_turf.unregister_dangerous_object(src)
|
||||
new_turf.register_dangerous_object(src)
|
||||
|
||||
// These arrange their sprites at runtime, as opposed to being statically placed in the map file.
|
||||
/obj/structure/cliff/automatic
|
||||
icon_state = "cliffbuilder"
|
||||
|
||||
@@ -37,7 +37,6 @@
|
||||
|
||||
/obj/structure/closet/Initialize()
|
||||
..()
|
||||
// Closets need to come later because of spawners potentially creating objects during init.
|
||||
return INITIALIZE_HINT_LATELOAD
|
||||
|
||||
/obj/structure/closet/LateInitialize()
|
||||
|
||||
25
code/game/objects/structures/dancepole_vr.dm
Normal file
25
code/game/objects/structures/dancepole_vr.dm
Normal file
@@ -0,0 +1,25 @@
|
||||
//Dance pole
|
||||
/obj/structure/dancepole
|
||||
name = "dance pole"
|
||||
desc = "Engineered for your entertainment"
|
||||
icon = 'icons/obj/objects_vr.dmi'
|
||||
icon_state = "dancepole"
|
||||
density = 0
|
||||
anchored = 1
|
||||
|
||||
/obj/structure/dancepole/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if(O.is_screwdriver())
|
||||
anchored = !anchored
|
||||
playsound(src, O.usesound, 50, 1)
|
||||
if(anchored)
|
||||
to_chat(user, "<font color='blue'>You secure \the [src].</font>")
|
||||
else
|
||||
to_chat(user, "<font color='blue'>You unsecure \the [src].</font>")
|
||||
if(O.is_wrench())
|
||||
playsound(src, O.usesound, 50, 1)
|
||||
to_chat(user, "<span class='notice'>Now disassembling \the [src]...</span>")
|
||||
if(do_after(user, 30 * O.toolspeed))
|
||||
if(!src) return
|
||||
to_chat(user, "<span class='notice'>You dissasembled \the [src]!</span>")
|
||||
new /obj/item/stack/material/steel(src.loc, 1)
|
||||
qdel(src)
|
||||
@@ -14,7 +14,7 @@
|
||||
var/smashed = 0
|
||||
|
||||
/obj/structure/fireaxecabinet/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
fireaxe = new /obj/item/weapon/material/twohanded/fireaxe()
|
||||
|
||||
/obj/structure/fireaxecabinet/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
var/list/harvest_loot = null // Should be an associative list for things to spawn, and their weights. An example would be a branch from a tree.
|
||||
|
||||
/obj/structure/flora/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
if(randomize_size)
|
||||
icon_scale_x = rand(min_x_scale * 100, max_x_scale * 100) / 100
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
icon_state = icon_state_opened
|
||||
if(needscharger)
|
||||
new /obj/machinery/recharge_station/ghost_pod_recharger(src.loc)
|
||||
del(src)
|
||||
qdel(src)
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
var/list/clothing_possibilities
|
||||
|
||||
/obj/structure/ghost_pod/ghost_activated/human/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
handle_clothing_setup()
|
||||
|
||||
@@ -153,7 +153,7 @@
|
||||
var/list/clothing_possibilities
|
||||
|
||||
/obj/structure/ghost_pod/manual/human/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
handle_clothing_setup()
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/ghost_pod/ghost_activated/swarm_drone/event/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
say_dead_object("A <span class='notice'>[drone_class] swarm drone</span> shell is now available in \the [T.loc].", src)
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
var/total_creature_max //If set, it can spawn this many creatures, total, ever.
|
||||
|
||||
/obj/structure/prop/nest/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
den_mobs = list()
|
||||
START_PROCESSING(SSobj, src)
|
||||
last_spawn = world.time
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/structure/cult/pylon/swarm/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
active_beams = list()
|
||||
|
||||
/obj/structure/cult/pylon/swarm/Destroy()
|
||||
|
||||
@@ -27,11 +27,10 @@
|
||||
return FALSE
|
||||
|
||||
/obj/effect/wingrille_spawn/Initialize()
|
||||
. = ..()
|
||||
if(!win_path)
|
||||
return
|
||||
if(ticker && ticker.current_state < GAME_STATE_PLAYING)
|
||||
if(win_path && ticker && ticker.current_state < GAME_STATE_PLAYING)
|
||||
activate()
|
||||
..()
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
/obj/effect/wingrille_spawn/proc/activate()
|
||||
if(activated) return
|
||||
@@ -58,7 +57,8 @@
|
||||
activated = 1
|
||||
for(var/obj/effect/wingrille_spawn/other in neighbours)
|
||||
if(!other.activated) other.activate()
|
||||
qdel(src)
|
||||
if(initialized && !QDELETED(src))
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/wingrille_spawn/proc/handle_window_spawn(var/obj/structure/window/W)
|
||||
return
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
return
|
||||
|
||||
var/turf/turf_source = get_turf(source)
|
||||
if(!turf_source)
|
||||
return
|
||||
var/area/area_source = turf_source.loc
|
||||
|
||||
//allocate a channel if necessary now so its the same for everyone
|
||||
channel = channel || open_sound_channel()
|
||||
@@ -19,6 +22,11 @@
|
||||
if(!M || !M.client)
|
||||
continue
|
||||
var/turf/T = get_turf(M)
|
||||
if(!T)
|
||||
continue
|
||||
var/area/A = T.loc
|
||||
if((A.soundproofed || area_source.soundproofed) && (A != area_source))
|
||||
continue
|
||||
var/distance = get_dist(T, turf_source)
|
||||
|
||||
if(distance <= maxdistance)
|
||||
|
||||
@@ -12,9 +12,13 @@ var/list/floor_decals = list()
|
||||
|
||||
/obj/effect/floor_decal/New(var/newloc, var/newdir, var/newcolour)
|
||||
supplied_dir = newdir
|
||||
if(newcolour) color = newcolour
|
||||
if(newcolour)
|
||||
color = newcolour
|
||||
..(newloc)
|
||||
|
||||
// TODO: identify what is causing these atoms to be qdeleted in New()/Initialize()
|
||||
// somewhere in this chain. Alternatively repath to /obj/floor_decal or some other
|
||||
// abstract handler that explicitly doesn't invoke any obj behavior.
|
||||
/obj/effect/floor_decal/Initialize()
|
||||
add_to_turf_decals()
|
||||
initialized = TRUE
|
||||
@@ -42,11 +46,11 @@ var/list/floor_decals = list()
|
||||
name = "reset marker"
|
||||
|
||||
/obj/effect/floor_decal/reset/Initialize()
|
||||
..()
|
||||
var/turf/T = get_turf(src)
|
||||
if(T.decals && T.decals.len)
|
||||
T.decals.Cut()
|
||||
T.update_icon()
|
||||
initialized = TRUE
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
/obj/effect/floor_decal/corner
|
||||
|
||||
@@ -317,7 +317,6 @@
|
||||
name = "tiles"
|
||||
icon_state = "freezer"
|
||||
initial_flooring = /decl/flooring/tiling/freezer
|
||||
temperature = T0C - 5 // VOREStation Edit: Chillier Freezer Tiles on-start
|
||||
|
||||
/turf/simulated/floor/lino
|
||||
name = "lino"
|
||||
|
||||
@@ -24,3 +24,6 @@
|
||||
/decl/flooring/grass/outdoors/forest
|
||||
icon = 'icons/turf/outdoors.dmi'
|
||||
icon_base = "grass-dark"
|
||||
|
||||
/turf/simulated/floor/tiled/freezer/cold
|
||||
temperature = T0C - 5
|
||||
@@ -86,7 +86,7 @@
|
||||
var/static/list/antilight_cache
|
||||
|
||||
/turf/simulated/shuttle/Initialize(mapload)
|
||||
..()
|
||||
. = ..()
|
||||
if(!antilight_cache)
|
||||
antilight_cache = list()
|
||||
for(var/diag in cornerdirs)
|
||||
|
||||
@@ -1014,10 +1014,3 @@
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
|
||||
/*
|
||||
/turf/simulated/floor/hull/New()
|
||||
if(icon_state != "hullcenter0")
|
||||
overrided_icon_state = icon_state
|
||||
..()
|
||||
*/
|
||||
@@ -31,7 +31,8 @@
|
||||
to_chat(user, "<span class='notice'>You begin to remove \the [src] with your [W].</span>")
|
||||
if(do_after(user, 4 SECONDS * W.toolspeed))
|
||||
to_chat(user, "<span class='notice'>\The [src] has been dug up, and now lies in a pile nearby.</span>")
|
||||
new /obj/item/stack/material/snow(src)
|
||||
var/obj/item/stack/material/snow/S = new(src)
|
||||
S.amount = 10
|
||||
demote()
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You decide to not finish removing \the [src].</span>")
|
||||
|
||||
@@ -11,9 +11,3 @@
|
||||
|
||||
/turf/space/cracked_asteroid/is_space() // So people don't start floating when standing on it.
|
||||
return FALSE
|
||||
|
||||
// u wot m8? ~Leshana
|
||||
// /turf/space/cracked_asteroid/New()
|
||||
// ..()
|
||||
// spawn(2 SECONDS)
|
||||
// overlays.Cut()
|
||||
|
||||
@@ -2,7 +2,13 @@
|
||||
name = "command"
|
||||
oxygen = MOLES_O2STANDARD
|
||||
nitrogen = MOLES_N2STANDARD
|
||||
initialized = TRUE // Don't call init on unsimulated turfs (at least not yet)
|
||||
var/skip_init = TRUE // Don't call down the chain, apparently for performance when loading maps at runtime.
|
||||
|
||||
/turf/unsimulated/Initialize(mapload)
|
||||
if(skip_init)
|
||||
initialized = TRUE
|
||||
return INITIALIZE_HINT_NORMAL
|
||||
. = ..()
|
||||
|
||||
//VOREStation Add
|
||||
/turf/unsimulated/fake_space
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
/turf/unsimulated/beach/water
|
||||
name = "Water"
|
||||
icon_state = "water"
|
||||
initialized = FALSE
|
||||
skip_init = FALSE
|
||||
movement_cost = 4 // Water should slow you down, just like simulated turf.
|
||||
|
||||
/turf/unsimulated/beach/water/Initialize()
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
density = 1
|
||||
alpha = 0
|
||||
blocks_air = 0
|
||||
initialized = FALSE
|
||||
|
||||
// Set these to get your desired planetary atmosphere.
|
||||
oxygen = 0
|
||||
@@ -17,6 +16,7 @@
|
||||
carbon_dioxide = 0
|
||||
phoron = 0
|
||||
temperature = T20C
|
||||
skip_init = FALSE
|
||||
|
||||
/turf/unsimulated/wall/planetary/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -86,6 +86,7 @@
|
||||
entry += " - <span class='blue'>In Lobby</span><br>"
|
||||
else
|
||||
entry += " - <span class='green'>Playing</span><br>"
|
||||
|
||||
Lines += entry
|
||||
|
||||
msg += "<table>"
|
||||
|
||||
@@ -31,7 +31,8 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
|
||||
var/list/data = ..()
|
||||
|
||||
data["personalVisibility"] = user?.client?.prefs?.show_in_directory
|
||||
data["personalTag"] = user?.client?.prefs?.directory_tag
|
||||
data["personalTag"] = user?.client?.prefs?.directory_tag || "Unset"
|
||||
data["personalErpTag"] = user?.client?.prefs?.directory_erptag || "Unset"
|
||||
|
||||
return data
|
||||
|
||||
@@ -49,7 +50,8 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
|
||||
var/name = null
|
||||
var/ooc_notes = null
|
||||
var/flavor_text = null
|
||||
var/tag = C.prefs.directory_tag
|
||||
var/tag = C.prefs.directory_tag || "Unset"
|
||||
var/erptag = C.prefs.directory_erptag || "Unset"
|
||||
var/character_ad = C.prefs.directory_ad
|
||||
|
||||
if(ishuman(C.mob))
|
||||
@@ -85,6 +87,7 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
|
||||
"name" = name,
|
||||
"ooc_notes" = ooc_notes,
|
||||
"tag" = tag,
|
||||
"erptag" = erptag,
|
||||
"character_ad" = character_ad,
|
||||
"flavor_text" = flavor_text,
|
||||
)))
|
||||
@@ -109,11 +112,17 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
|
||||
update_tgui_static_data(usr, ui)
|
||||
return TRUE
|
||||
if("setTag")
|
||||
var/list/new_tag = input(usr, "Pick a new tag for the character directory", "Character Tag", usr?.client?.prefs?.directory_tag) as null|anything in GLOB.char_directory_tags
|
||||
var/list/new_tag = input(usr, "Pick a new Vore tag for the character directory", "Character Tag", usr?.client?.prefs?.directory_tag) as null|anything in GLOB.char_directory_tags
|
||||
if(!new_tag)
|
||||
return
|
||||
usr?.client?.prefs?.directory_tag = new_tag
|
||||
return TRUE
|
||||
if("setErpTag")
|
||||
var/list/new_erptag = input(usr, "Pick a new ERP tag for the character directory", "Character ERP Tag", usr?.client?.prefs?.directory_erptag) as null|anything in GLOB.char_directory_erptags
|
||||
if(!new_erptag)
|
||||
return
|
||||
usr?.client?.prefs?.directory_erptag = new_erptag
|
||||
return TRUE
|
||||
if("setVisible")
|
||||
usr?.client?.prefs?.show_in_directory = !usr?.client?.prefs?.show_in_directory
|
||||
to_chat(usr, "<span class='notice'>You are now [usr.client.prefs.show_in_directory ? "shown" : "not shown"] in the directory.</span>")
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
/client/verb/who()
|
||||
set name = "Who"
|
||||
set category = "OOC"
|
||||
@@ -206,3 +205,4 @@
|
||||
msg += "\n<span class='info'>Adminhelps are also sent to Discord. If no admins are available in game try anyway and an admin on Discord may see it and respond.</span>"
|
||||
|
||||
return msg
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Form - Inventory Requisition r10.7.1E"
|
||||
|
||||
/obj/item/weapon/paper/carbon/cursedform/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
info = {"<font face="Comic Sans MS" color=#DA0000><b><center></center><BR><center><I><B>Form - Inventory Requisition r10.7.1E</I></B></center><BR><center><font size="4">General Request Form</font></center><BR><BR><center><B>General</B></center><BR><BR>Name: <span class="paper_field"></span><BR>Department: <span class="paper_field"></span><BR>Departmental Rank: <span class="paper_field"></span><BR>Organization(If not Nanotrasen): <span class="paper_field"></span><BR>Date: <span class="paper_field"></span><BR><BR><BR><BR>Requested Item(s): <span class="paper_field"></span><BR>Quantity: <span class="paper_field"></span><BR>Reason for request: <span class="paper_field"></span><BR>Is this replacement equipment?: <span class="paper_field"></span><BR>If `Yes`; above, specify equiment and reason for replacement: <span class="paper_field"></span><BR><BR><BR><center><B>Authorization</B></center><BR><BR>Authorizing Department: <span class="paper_field"></span><BR>Authorizing Dept. Head: <span class="paper_field"></span><BR><BR><BR><center><B>Contact and Delivery</B></center><BR><BR>EPv2 Address of requesting party(Do not leave blank): <span class="paper_field"></span><BR>Delivery location or department: <span class="paper_field"></span><BR><BR><BR>Nanotrasen Employee Identification Number: <span class="paper_field"></span><BR><U>Signature of Requester and Date</U><BR><BR><span class="paper_field"></span><BR><BR><BR><BR>Authorizor`s Nanotrasen Employee Identification Number: <span class="paper_field"></span><BR><U>Authorizing Signature and Date(Include authorizing department`s stamp below)</U><BR><BR><span class="paper_field"></span><BR><BR><BR><center><B>Shipping Department Only</B></center><BR><center><I>(Do not write below this line)</I></center><BR>Nanotrasen Purchasing Approval Code: <span class="paper_field"></span><BR>Nanotrasen Employee Identification Number: <span class="paper_field"></span><BR>Receiving Shipping Employee: <span class="paper_field"></span><BR><U>Signature and Date</U><BR><BR><span class="paper_field"></span><BR></b></font>"}
|
||||
info_links = {"<font face="Comic Sans MS" color=#FF9300><b><center></center><BR><center><I><B>Form - Inventory Requisition r10.7.1E</I></B></center><BR><center><font size="4">General Request Form</font></center><BR><BR><center><B>General</B></center><BR><BR>Name: <span class="paper_field"><font face="Verdana"><A href='?src=[0x2057e0c];write=1'>write</A></font></span><BR>Department: <span class="paper_field"><font face="Verdana"><A href='?src=[0x2057e0c];write=2'>write</A></font></span><BR>Departmental Rank: <span class="paper_field"><font face="Verdana"><A href='?src=[0x2057e0c];write=3'>write</A></font></span><BR>Organization(If not Nanotrasen): <span class="paper_field"><font face="Verdana"><A href='?src=[0x2057e0c];write=4'>write</A></font></span><BR>Date: <span class="paper_field"><font face="Verdana"><A href='?src=[0x2057e0c];write=5'>write</A></font></span><BR><BR><BR><BR>Requested Item(s): <span class="paper_field"><font face="Verdana"><A href='?src=[0x2057e0c];write=6'>write</A></font></span><BR>Quantity: <span class="paper_field"><font face="Verdana"><A href='?src=[0x2057e0c];write=7'>write</A></font></span><BR>Reason for request: <span class="paper_field"><font face="Verdana"><A href='?src=[0x2057e0c];write=8'>write</A></font></span><BR>Is this replacement equipment?: <span class="paper_field"><font face="Verdana"><A href='?src=[0x2057e0c];write=9'>write</A></font></span><BR>If `Yes` above, specify equiment and reason for replacement: <span class="paper_field"><font face="Verdana"><A href='?src=[0x2057e0c];write=10'>write</A></font></span><BR><BR><BR><center><B>Authorization</B></center><BR><BR>Authorizing Department: <span class="paper_field"><font face="Verdana"><A href='?src=[0x2057e0c];write=11'>write</A></font></span><BR>Authorizing Dept. Head: <span class="paper_field"><font face="Verdana"><A href='?src=[0x2057e0c];write=12'>write</A></font></span><BR><BR><BR><center><B>Contact and Delivery</B></center><BR><BR>EPv2 Address of requesting party(Do not leave blank): <span class="paper_field"><font face="Verdana"><A href='?src=[0x2057e0c];write=13'>write</A></font></span><BR>Delivery location or department: <span class="paper_field"><font face="Verdana"><A href='?src=[0x2057e0c];write=14'>write</A></font></span><BR><BR><BR>Nanotrasen Employee Identification Number: <span class="paper_field"><font face="Verdana"><A href='?src=[0x2057e0c];write=15'>write</A></font></span><BR><U>Signature of Requester and Date</U><BR><BR><span class="paper_field"><font face="Verdana"><A href='?src=[0x2057e0c];write=16'>write</A></font></span><BR><BR><BR><BR>Authorizor`s Nanotrasen Employee Identification Number: <span class="paper_field"><font face="Verdana"><A href='?src=[0x2057e0c];write=17'>write</A></font></span><BR><U>Authorizing Signature and Date(Include authorizing department`s stamp below)</U><BR><BR><span class="paper_field"><font face="Verdana"><A href='?src=[0x2057e0c];write=18'>write</A></font></span><BR><BR><BR><center><B>Shipping Department Only</B></center><BR><center><I>(Do not write below this line)</I></center><BR>Nanotrasen Purchasing Approval Code: <span class="paper_field"><font face="Verdana"><A href='?src=[0x2057e0c];write=19'>write</A></font></span><BR>Nanotrasen Employee Identification Number: <span class="paper_field"><font face="Verdana"><A href='?src=[0x2057e0c];write=20'>write</A></font></span><BR>Receiving Shipping Employee: <span class="paper_field"><font face="Verdana"><A href='?src=[0x2057e0c];write=21'>write</A></font></span><BR><U>Signature and Date</U><BR><BR><span class="paper_field"><font face="Verdana"><A href='?src=[0x2057e0c];write=22'>write</A></font></span><BR></b></font><font face="Verdana"><A href='?src=[0x2057e0c];write=end'>write</A></font>"}
|
||||
|
||||
|
||||
@@ -8,18 +8,14 @@
|
||||
/obj/effect/spawner/lootdrop/Initialize()
|
||||
..()
|
||||
var/list/things = params2list(loot)
|
||||
|
||||
if(things && things.len)
|
||||
for(var/i = lootcount, i > 0, i--)
|
||||
if(!things.len)
|
||||
return
|
||||
|
||||
var/loot_spawn = pick(things)
|
||||
var/loot_path = text2path(loot_spawn)
|
||||
|
||||
if(!loot_path || !lootdoubles)
|
||||
things.Remove(loot_spawn)
|
||||
continue
|
||||
|
||||
new loot_path(get_turf(src))
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
@@ -45,7 +45,6 @@
|
||||
if( findtext(href,"<script",1,0) )
|
||||
to_world_log("Attempted use of scripts within a topic call, by [src]")
|
||||
message_admins("Attempted use of scripts within a topic call, by [src]")
|
||||
//del(usr)
|
||||
return
|
||||
|
||||
// Tgui Topic middleware
|
||||
|
||||
@@ -23,7 +23,8 @@
|
||||
|
||||
// Physical traits are what they sound like, and involve the character's physical body, as opposed to their mental state.
|
||||
/datum/trait/modifier/physical
|
||||
category = "Physical Quirks" //VOREStation Edit
|
||||
name = "Physical"
|
||||
category = "Physical"
|
||||
|
||||
|
||||
/datum/trait/modifier/physical/flimsy
|
||||
@@ -194,6 +195,7 @@
|
||||
// 'Mental' traits are just those that only sapients can have, for now, and generally involves fears.
|
||||
// So far, all of them are just for fluff/don't have mechanical effects.
|
||||
/datum/trait/modifier/mental
|
||||
name = "Mental"
|
||||
category = "Mental"
|
||||
|
||||
/datum/trait/modifier/mental/test_for_invalidity(var/datum/category_item/player_setup_item/traits/setup)
|
||||
|
||||
@@ -45,7 +45,6 @@
|
||||
character.weight_gain = pref.weight_gain
|
||||
character.weight_loss = pref.weight_loss
|
||||
character.fuzzy = pref.fuzzy
|
||||
character.appearance_flags -= pref.fuzzy*PIXEL_SCALE
|
||||
character.resize(pref.size_multiplier, animate = FALSE)
|
||||
|
||||
/datum/category_item/player_setup_item/vore/size/content(var/mob/user)
|
||||
@@ -70,7 +69,7 @@
|
||||
|
||||
else if(href_list["toggle_fuzzy"])
|
||||
pref.fuzzy = pref.fuzzy ? 0 : 1;
|
||||
return TOPIC_REFRESH
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["weight"])
|
||||
var/new_weight = input(user, "Choose your character's relative body weight.\n\
|
||||
|
||||
@@ -2,11 +2,19 @@
|
||||
#define NEUTRAL_MODE 2
|
||||
#define NEGATIVE_MODE 3
|
||||
|
||||
#define ORGANICS 1
|
||||
#define SYNTHETICS 2
|
||||
|
||||
/datum/preferences
|
||||
var/custom_species // Custom species name, can't be changed due to it having been used in savefiles already.
|
||||
var/custom_base // What to base the custom species on
|
||||
var/blood_color = "#A10808"
|
||||
|
||||
var/custom_say = null
|
||||
var/custom_whisper = null
|
||||
var/custom_ask = null
|
||||
var/custom_exclaim = null
|
||||
|
||||
var/list/pos_traits = list() // What traits they've selected for their custom species
|
||||
var/list/neu_traits = list()
|
||||
var/list/neg_traits = list()
|
||||
@@ -15,6 +23,7 @@
|
||||
var/starting_trait_points = STARTING_SPECIES_POINTS
|
||||
var/max_traits = MAX_SPECIES_TRAITS
|
||||
var/dirty_synth = 0 //Are you a synth
|
||||
var/gross_meatbag = 0 //Where'd I leave my Voight-Kampff test kit?
|
||||
|
||||
// Definition of the stuff for Ears
|
||||
/datum/category_item/player_setup_item/vore/traits
|
||||
@@ -29,10 +38,15 @@
|
||||
S["neg_traits"] >> pref.neg_traits
|
||||
S["blood_color"] >> pref.blood_color
|
||||
|
||||
S["traits_cheating"]>> pref.traits_cheating
|
||||
S["traits_cheating"] >> pref.traits_cheating
|
||||
S["max_traits"] >> pref.max_traits
|
||||
S["trait_points"] >> pref.starting_trait_points
|
||||
|
||||
S["custom_say"] >> pref.custom_say
|
||||
S["custom_whisper"] >> pref.custom_whisper
|
||||
S["custom_ask"] >> pref.custom_ask
|
||||
S["custom_exclaim"] >> pref.custom_exclaim
|
||||
|
||||
/datum/category_item/player_setup_item/vore/traits/save_character(var/savefile/S)
|
||||
S["custom_species"] << pref.custom_species
|
||||
S["custom_base"] << pref.custom_base
|
||||
@@ -41,10 +55,15 @@
|
||||
S["neg_traits"] << pref.neg_traits
|
||||
S["blood_color"] << pref.blood_color
|
||||
|
||||
S["traits_cheating"]<< pref.traits_cheating
|
||||
S["traits_cheating"] << pref.traits_cheating
|
||||
S["max_traits"] << pref.max_traits
|
||||
S["trait_points"] << pref.starting_trait_points
|
||||
|
||||
S["custom_say"] << pref.custom_say
|
||||
S["custom_whisper"] << pref.custom_whisper
|
||||
S["custom_ask"] << pref.custom_ask
|
||||
S["custom_exclaim"] << pref.custom_exclaim
|
||||
|
||||
/datum/category_item/player_setup_item/vore/traits/sanitize_character()
|
||||
if(!pref.pos_traits) pref.pos_traits = list()
|
||||
if(!pref.neu_traits) pref.neu_traits = list()
|
||||
@@ -82,11 +101,17 @@
|
||||
|
||||
/datum/category_item/player_setup_item/vore/traits/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
character.custom_species = pref.custom_species
|
||||
character.custom_say = pref.custom_say
|
||||
character.custom_ask = pref.custom_ask
|
||||
character.custom_whisper = pref.custom_whisper
|
||||
character.custom_exclaim = pref.custom_exclaim
|
||||
|
||||
if(character.isSynthetic()) //Checking if we have a synth on our hands, boys.
|
||||
pref.dirty_synth = 1
|
||||
else //CHOMPEdit
|
||||
pref.dirty_synth = 0 //CHOMPEdit
|
||||
pref.gross_meatbag = 0
|
||||
else
|
||||
pref.gross_meatbag = 1
|
||||
pref.dirty_synth = 0
|
||||
|
||||
var/datum/species/S = character.species
|
||||
var/SB
|
||||
@@ -153,6 +178,16 @@
|
||||
. += "<b>Blood Color: </b>" //People that want to use a certain species to have that species traits (xenochimera/promethean/spider) should be able to set their own blood color.
|
||||
. += "<a href='?src=\ref[src];blood_color=1'>Set Color</a>"
|
||||
. += "<a href='?src=\ref[src];blood_reset=1'>R</a><br>"
|
||||
. += "<br>"
|
||||
|
||||
. += "<b>Custom Say: </b>"
|
||||
. += "<a href='?src=\ref[src];custom_say=1'>Set Say Verb</a><br>"
|
||||
. += "<b>Custom Whisper: </b>"
|
||||
. += "<a href='?src=\ref[src];custom_whisper=1'>Set Whisper Verb</a><br>"
|
||||
. += "<b>Custom Ask: </b>"
|
||||
. += "<a href='?src=\ref[src];custom_ask=1'>Set Ask Verb</a><br>"
|
||||
. += "<b>Custom Exclaim: </b>"
|
||||
. += "<a href='?src=\ref[src];custom_exclaim=1'>Set Exclaim Verb</a><br>"
|
||||
|
||||
/datum/category_item/player_setup_item/vore/traits/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||
if(!CanUseTopic(user))
|
||||
@@ -216,6 +251,30 @@
|
||||
pref.neg_traits -= trait
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["custom_say"])
|
||||
var/say_choice = sanitize(input(usr, "This word or phrase will appear instead of 'says': [pref.real_name] says, \"Hi.\"", "Custom Say", pref.custom_say) as null|text, 12)
|
||||
if(say_choice)
|
||||
pref.custom_say = say_choice
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["custom_whisper"])
|
||||
var/whisper_choice = sanitize(input(usr, "This word or phrase will appear instead of 'whispers': [pref.real_name] whispers, \"Hi...\"", "Custom Whisper", pref.custom_whisper) as null|text, 12)
|
||||
if(whisper_choice)
|
||||
pref.custom_whisper = whisper_choice
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["custom_ask"])
|
||||
var/ask_choice = sanitize(input(usr, "This word or phrase will appear instead of 'asks': [pref.real_name] asks, \"Hi?\"", "Custom Ask", pref.custom_ask) as null|text, 12)
|
||||
if(ask_choice)
|
||||
pref.custom_ask = ask_choice
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["custom_exclaim"])
|
||||
var/exclaim_choice = sanitize(input(usr, "This word or phrase will appear instead of 'exclaims', 'shouts' or 'yells': [pref.real_name] exclaims, \"Hi!\"", "Custom Exclaim", pref.custom_exclaim) as null|text, 12)
|
||||
if(exclaim_choice)
|
||||
pref.custom_exclaim = exclaim_choice
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["add_trait"])
|
||||
var/mode = text2num(href_list["add_trait"])
|
||||
var/list/picklist
|
||||
@@ -276,13 +335,19 @@
|
||||
|
||||
var/conflict = FALSE
|
||||
|
||||
user.isSynthetic() //Recheck just to be sure
|
||||
if(pref.dirty_synth && instance.not_for_synths)//if you are a synth you can't take this trait.
|
||||
alert("You cannot take this trait as a SYNTH.\
|
||||
Please remove that trait, or pick another trait to add.","Error")
|
||||
//pref.dirty_synth = 0 //Just to be sure // Commented out because it allow for someone to take a synth-blacklisted trait CHOMP Edit
|
||||
if(pref.dirty_synth && !(instance.can_take & SYNTHETICS))
|
||||
alert("The trait you've selected can only be taken by organic characters!","Error")
|
||||
//pref.dirty_synth = 0 //Just to be sure //CHOMPEdit this shit broke, stop.
|
||||
return TOPIC_REFRESH
|
||||
|
||||
if(pref.gross_meatbag && !(instance.can_take & ORGANICS))
|
||||
alert("The trait you've selected can only be taken by synthetic characters!","Error")
|
||||
pref.gross_meatbag = 0 //Just to be sure
|
||||
return TOPIC_REFRESH
|
||||
|
||||
if(pref.species in instance.banned_species)
|
||||
alert("The trait you've selected cannot be taken by the species you've chosen!","Error")
|
||||
return TOPIC_REFRESH
|
||||
|
||||
if(trait_choice in pref.pos_traits + pref.neu_traits + pref.neg_traits)
|
||||
conflict = instance.name
|
||||
|
||||
@@ -7,12 +7,14 @@
|
||||
/datum/category_item/player_setup_item/vore/misc/load_character(var/savefile/S)
|
||||
S["show_in_directory"] >> pref.show_in_directory
|
||||
S["directory_tag"] >> pref.directory_tag
|
||||
S["directory_erptag"] >> pref.directory_erptag
|
||||
S["directory_ad"] >> pref.directory_ad
|
||||
S["sensorpref"] >> pref.sensorpref //TFF 5/8/19 - add sensor pref setting to load after saved
|
||||
|
||||
/datum/category_item/player_setup_item/vore/misc/save_character(var/savefile/S)
|
||||
S["show_in_directory"] << pref.show_in_directory
|
||||
S["directory_tag"] << pref.directory_tag
|
||||
S["directory_erptag"] << pref.directory_erptag
|
||||
S["directory_ad"] << pref.directory_ad
|
||||
S["sensorpref"] << pref.sensorpref //TFF 5/8/19 - add sensor pref setting to be saveable
|
||||
|
||||
@@ -25,12 +27,14 @@
|
||||
/datum/category_item/player_setup_item/vore/misc/sanitize_character()
|
||||
pref.show_in_directory = sanitize_integer(pref.show_in_directory, 0, 1, initial(pref.show_in_directory))
|
||||
pref.directory_tag = sanitize_inlist(pref.directory_tag, GLOB.char_directory_tags, initial(pref.directory_tag))
|
||||
pref.directory_erptag = sanitize_inlist(pref.directory_erptag, GLOB.char_directory_erptags, initial(pref.directory_erptag))
|
||||
pref.sensorpref = sanitize_integer(pref.sensorpref, 1, sensorpreflist.len, initial(pref.sensorpref)) //TFF - 5/8/19 - add santisation for sensor prefs
|
||||
|
||||
/datum/category_item/player_setup_item/vore/misc/content(var/mob/user)
|
||||
. += "<br>"
|
||||
. += "<b>Appear in Character Directory:</b> <a [pref.show_in_directory ? "class='linkOn'" : ""] href='?src=\ref[src];toggle_show_in_directory=1'><b>[pref.show_in_directory ? "Yes" : "No"]</b></a><br>"
|
||||
. += "<b>Character Directory Tag:</b> <a href='?src=\ref[src];directory_tag=1'><b>[pref.directory_tag]</b></a><br>"
|
||||
. += "<b>Character Directory Vore Tag:</b> <a href='?src=\ref[src];directory_tag=1'><b>[pref.directory_tag]</b></a><br>"
|
||||
. += "<b>Character Directory ERP Tag:</b> <a href='?src=\ref[src];directory_erptag=1'><b>[pref.directory_erptag]</b></a><br>"
|
||||
. += "<b>Character Directory Advertisement:</b> <a href='?src=\ref[src];directory_ad=1'><b>Set Directory Ad</b></a><br>"
|
||||
. += "<b>Suit Sensors Preference:</b> <a [pref.sensorpref ? "" : ""] href='?src=\ref[src];toggle_sensor_setting=1'><b>[sensorpreflist[pref.sensorpref]]</b></a><br>" //TFF 5/8/19 - Allow selection of sensor settings from off, binary, vitals, tracking, or random
|
||||
|
||||
@@ -39,11 +43,17 @@
|
||||
pref.show_in_directory = pref.show_in_directory ? 0 : 1;
|
||||
return TOPIC_REFRESH
|
||||
else if(href_list["directory_tag"])
|
||||
var/new_tag = input(user, "Pick a new tag for the character directory", "Character Tag", pref.directory_tag) as null|anything in GLOB.char_directory_tags
|
||||
var/new_tag = input(user, "Pick a new Vore tag for the character directory", "Character Vore Tag", pref.directory_tag) as null|anything in GLOB.char_directory_tags
|
||||
if(!new_tag)
|
||||
return
|
||||
pref.directory_tag = new_tag
|
||||
return TOPIC_REFRESH
|
||||
else if(href_list["directory_erptag"])
|
||||
var/new_erptag = input(user, "Pick a new ERP tag for the character directory", "Character ERP Tag", pref.directory_erptag) as null|anything in GLOB.char_directory_erptags
|
||||
if(!new_erptag)
|
||||
return
|
||||
pref.directory_erptag = new_erptag
|
||||
return TOPIC_REFRESH
|
||||
else if(href_list["directory_ad"])
|
||||
var/msg = sanitize(input(user,"Write your advertisement here!", "Flavor Text", html_decode(pref.directory_ad)) as message, extra = 0) //VOREStation Edit: separating out OOC notes
|
||||
pref.directory_ad = msg
|
||||
|
||||
12
code/modules/client/verbs/ping.dm
Normal file
12
code/modules/client/verbs/ping.dm
Normal file
@@ -0,0 +1,12 @@
|
||||
/client/proc/pingfromtime(time)
|
||||
return ((world.time+world.tick_lag*world.tick_usage/100)-time)*100
|
||||
|
||||
/client/verb/display_ping(time as num)
|
||||
set instant = TRUE
|
||||
set name = ".display_ping"
|
||||
to_chat(src, "<span class='notice'>Round trip ping took [round(pingfromtime(time),1)]ms</span>")
|
||||
|
||||
/client/verb/ping()
|
||||
set name = "Ping"
|
||||
set category = "OOC"
|
||||
winset(src, null, "command=.display_ping+[world.time+world.tick_lag*world.tick_usage/100]")
|
||||
@@ -104,7 +104,7 @@
|
||||
return battery
|
||||
|
||||
/obj/item/clothing/gloves/ring/buzzer/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
if(!battery)
|
||||
battery = new battery_type(src)
|
||||
|
||||
|
||||
@@ -130,14 +130,40 @@
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 100)
|
||||
siemens_coefficient = 0.5
|
||||
icon = 'icons/obj/clothing/hats_vr.dmi'
|
||||
enables_planes = list(VIS_CH_ID,VIS_CH_HEALTH_VR,VIS_AUGMENTED)
|
||||
var/away_planes = null
|
||||
plane_slots = list(slot_head)
|
||||
var/hud_active = 1
|
||||
var/activation_sound = 'sound/items/nif_click.ogg'
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/responseteam/verb/toggle()
|
||||
set category = "Object"
|
||||
set name = "Toggle Mark 7 Suit HUD"
|
||||
set src in usr
|
||||
|
||||
if(usr.canmove && !usr.stat && !usr.restrained())
|
||||
if(src.hud_active)
|
||||
away_planes = enables_planes
|
||||
enables_planes = null
|
||||
to_chat(usr, "You disable the inbuilt heads-up display.")
|
||||
hud_active = 0
|
||||
else
|
||||
enables_planes = away_planes
|
||||
away_planes = null
|
||||
to_chat(usr, "You enable the inbuilt heads-up display.")
|
||||
hud_active = 1
|
||||
usr << activation_sound
|
||||
usr.recalculate_vis()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/responseteam/command
|
||||
name = "Mark VII-C Emergency Response Team Commander Helmet"
|
||||
enables_planes = list(VIS_CH_ID,VIS_CH_HEALTH_VR,VIS_CH_STATUS_R,VIS_CH_BACKUP,VIS_CH_WANTED,VIS_AUGMENTED)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/responseteam/medical
|
||||
name = "Mark VII-M Emergency Medical Response Helmet"
|
||||
icon_state = "erthelmet_m"
|
||||
item_state = "erthelmet_m"
|
||||
enables_planes = list(VIS_CH_ID,VIS_CH_HEALTH_VR,VIS_CH_STATUS_R,VIS_CH_BACKUP,VIS_AUGMENTED)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/responseteam/engineer
|
||||
name = "Mark VII-E Emergency Engineering Response Helmet"
|
||||
@@ -148,6 +174,7 @@
|
||||
name = "Mark VII-S Emergency Security Response Helmet"
|
||||
icon_state = "erthelmet_s"
|
||||
item_state = "erthelmet_s"
|
||||
enables_planes = list(VIS_CH_ID,VIS_CH_HEALTH_VR,VIS_CH_WANTED,VIS_AUGMENTED)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/responseteam/janitor
|
||||
name = "Mark VII-J Emergency Cleanup Response Helmet"
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
var/hide_on_roll = FALSE
|
||||
|
||||
/obj/item/clothing/accessory/storage/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
hold = new/obj/item/weapon/storage/internal(src)
|
||||
hold.max_storage_space = slots * 2
|
||||
hold.max_w_class = ITEMSIZE_SMALL
|
||||
@@ -95,7 +95,7 @@
|
||||
slots = 2
|
||||
|
||||
/obj/item/clothing/accessory/storage/knifeharness/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
hold.max_storage_space = ITEMSIZE_COST_SMALL * 2
|
||||
hold.can_hold = list(/obj/item/weapon/material/knife/machete/hatchet/unathiknife,\
|
||||
/obj/item/weapon/material/knife,\
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
to_chat(H,"<span class='warning'>You must be WEARING the uniform to change your size.</span>")
|
||||
return
|
||||
|
||||
var/new_size = input("Put the desired size (25-200%)", "Set Size", 200) as num|null
|
||||
var/new_size = input("Put the desired size (25-200%), or (1-600%) in dormitory areas.", "Set Size", 200) as num|null
|
||||
|
||||
//Check AGAIN because we accepted user input which is blocking.
|
||||
if (src != H.w_uniform)
|
||||
@@ -89,7 +89,7 @@
|
||||
H.update_icons() //Just want the matrix transform
|
||||
return
|
||||
|
||||
if (!ISINRANGE(new_size,25,200))
|
||||
if (!H.size_range_check(new_size))
|
||||
to_chat(H,"<span class='notice'>The safety features of the uniform prevent you from choosing this size.</span>")
|
||||
return
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user