From ad0cfc2e670f85228dc188b202a056b45b0b6693 Mon Sep 17 00:00:00 2001 From: Dovixx Date: Tue, 26 Mar 2019 19:57:23 +0200 Subject: [PATCH 001/195] Fix the logic --- code/modules/paperwork/photography.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index af28e221eb8..4a57c1b2636 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -325,7 +325,7 @@ var/list/SpookyGhosts = list("ghost","shade","shade2","ghost-narsie","horror","s to_chat(user, "[pictures_left] photos left.") icon_state = icon_off on = 0 - if(user.mind && !(user.mind.assigned_role == "Chaplain")) + if(user.mind && user.mind.assigned_role == "Chaplain") if(prob(24)) handle_haunt(user) spawn(64) From 670868b77bf9d39227ee45656774a9bd20bab4e6 Mon Sep 17 00:00:00 2001 From: Couls Date: Sun, 7 Apr 2019 00:45:53 -0400 Subject: [PATCH 002/195] Allow ghosts to be resummoned as skeletons --- code/game/gamemodes/wizard/artefact.dm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index dbe3146dd7f..f3534375d87 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -618,6 +618,7 @@ var/global/list/multiverse = list() var/list/spooky_scaries = list() var/unlimited = 0 var/heresy = 0 + var/ghost = FALSE /obj/item/necromantic_stone/unlimited unlimited = 1 @@ -633,11 +634,12 @@ var/global/list/multiverse = list() if(M.stat != DEAD) to_chat(user, "This artifact can only affect the dead!") return + if(M.get_ghost() || M.get_ghost().client) // checks if the target is ghosted + ghost = TRUE - if(!M.mind || !M.client) + if((!M.client || !M.mind) && !ghost) // if there is no client connected to the ghost or mob to_chat(user, "There is no soul connected to this body...") return - check_spooky()//clean out/refresh the list if(spooky_scaries.len >= 3 && !unlimited) @@ -648,6 +650,7 @@ var/global/list/multiverse = list() else M.set_species(/datum/species/skeleton) M.visible_message(" A massive amount of flesh sloughs off [M] and a skeleton rises up!") + M.grab_ghost() // yoinks the ghost if its not in the body M.revive() equip_skeleton(M) spooky_scaries |= M From 95ce665b951733c756c2f7f3828b744ee518d72e Mon Sep 17 00:00:00 2001 From: Couls Date: Sun, 7 Apr 2019 01:55:22 -0400 Subject: [PATCH 003/195] Update artefact.dm --- code/game/gamemodes/wizard/artefact.dm | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index f3534375d87..40da8fe11ec 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -618,7 +618,6 @@ var/global/list/multiverse = list() var/list/spooky_scaries = list() var/unlimited = 0 var/heresy = 0 - var/ghost = FALSE /obj/item/necromantic_stone/unlimited unlimited = 1 @@ -634,12 +633,6 @@ var/global/list/multiverse = list() if(M.stat != DEAD) to_chat(user, "This artifact can only affect the dead!") return - if(M.get_ghost() || M.get_ghost().client) // checks if the target is ghosted - ghost = TRUE - - if((!M.client || !M.mind) && !ghost) // if there is no client connected to the ghost or mob - to_chat(user, "There is no soul connected to this body...") - return check_spooky()//clean out/refresh the list if(spooky_scaries.len >= 3 && !unlimited) @@ -731,7 +724,7 @@ var/global/list/multiverse = list() H.update_dna() H.update_body() - + H.grab_ghost() H.revive() H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes) From fbd5fffcb5d3faea9ba990e3e1b00cb7af676754 Mon Sep 17 00:00:00 2001 From: Couls Date: Sun, 7 Apr 2019 17:35:50 -0400 Subject: [PATCH 004/195] Return the check for mind and add in the option to give up body to ghosts(Taken from holopara proc) --- code/game/gamemodes/wizard/artefact.dm | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 40da8fe11ec..a8fc2b14532 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -633,6 +633,11 @@ var/global/list/multiverse = list() if(M.stat != DEAD) to_chat(user, "This artifact can only affect the dead!") return + + if(!M.mind || !M.client) + to_chat(user,"There is no soul connected to this body...") + return + check_spooky()//clean out/refresh the list if(spooky_scaries.len >= 3 && !unlimited) @@ -645,6 +650,7 @@ var/global/list/multiverse = list() M.visible_message(" A massive amount of flesh sloughs off [M] and a skeleton rises up!") M.grab_ghost() // yoinks the ghost if its not in the body M.revive() + M.verbs += /mob/living/proc/skeleton_reset equip_skeleton(M) spooky_scaries |= M to_chat(M, "You have been revived by [user.real_name]!") @@ -726,7 +732,7 @@ var/global/list/multiverse = list() H.update_body() H.grab_ghost() H.revive() - + H.verbs += /mob/living/proc/skeleton_reset H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/head/kitty(H), slot_head) H.equip_to_slot_or_del(new /obj/item/clothing/under/schoolgirl(H), slot_w_uniform) @@ -876,3 +882,20 @@ var/global/list/multiverse = list() heal_brute = 25 heal_burn = 25 heal_oxy = 25 + +/mob/living/proc/skeleton_reset() + set name = "Offer skeleton to ghosts" + set category = "Skeleton" + set desc = "Give up your skeleton to ghosts so you can observe the round." + for(var/mob/living/carbon/human/G in GLOB.mob_list) + if(G == src) + var/list/mob/dead/observer/candidates = pollCandidates("Do you want to play as Skeleton?", ROLE_WIZARD, 0, 100) + var/mob/dead/observer/new_stand = null + if(candidates.len) + new_stand = pick(candidates) + to_chat(src,"Your body has been given up and taken over by someone else.") + message_admins("[key_name_admin(new_stand)] has taken control of ([key_name_admin(G)])") + G.ghostize() + G.key = new_stand.key + else + to_chat(src, "There were no ghosts willing to take control. Looks like you're stuck as a skeleton for now.") From db8cb1403af1ae33491478ff3bdc15b66b9b63fd Mon Sep 17 00:00:00 2001 From: Couls Date: Mon, 8 Apr 2019 20:04:10 -0400 Subject: [PATCH 005/195] Update artefact.dm --- code/game/gamemodes/wizard/artefact.dm | 34 ++++++++++++++------------ 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index a8fc2b14532..a35f990845c 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -634,7 +634,7 @@ var/global/list/multiverse = list() to_chat(user, "This artifact can only affect the dead!") return - if(!M.mind || !M.client) + if((!M.mind || !M.client) && !M.grab_ghost()) to_chat(user,"There is no soul connected to this body...") return @@ -650,7 +650,7 @@ var/global/list/multiverse = list() M.visible_message(" A massive amount of flesh sloughs off [M] and a skeleton rises up!") M.grab_ghost() // yoinks the ghost if its not in the body M.revive() - M.verbs += /mob/living/proc/skeleton_reset + M.verbs += /mob/living/carbon/human/proc/skeleton_reset equip_skeleton(M) spooky_scaries |= M to_chat(M, "You have been revived by [user.real_name]!") @@ -732,7 +732,7 @@ var/global/list/multiverse = list() H.update_body() H.grab_ghost() H.revive() - H.verbs += /mob/living/proc/skeleton_reset + H.verbs += /mob/living/carbon/human/proc/skeleton_reset H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/head/kitty(H), slot_head) H.equip_to_slot_or_del(new /obj/item/clothing/under/schoolgirl(H), slot_w_uniform) @@ -883,19 +883,21 @@ var/global/list/multiverse = list() heal_burn = 25 heal_oxy = 25 -/mob/living/proc/skeleton_reset() +/mob/living/carbon/human/proc/skeleton_reset() set name = "Offer skeleton to ghosts" set category = "Skeleton" set desc = "Give up your skeleton to ghosts so you can observe the round." - for(var/mob/living/carbon/human/G in GLOB.mob_list) - if(G == src) - var/list/mob/dead/observer/candidates = pollCandidates("Do you want to play as Skeleton?", ROLE_WIZARD, 0, 100) - var/mob/dead/observer/new_stand = null - if(candidates.len) - new_stand = pick(candidates) - to_chat(src,"Your body has been given up and taken over by someone else.") - message_admins("[key_name_admin(new_stand)] has taken control of ([key_name_admin(G)])") - G.ghostize() - G.key = new_stand.key - else - to_chat(src, "There were no ghosts willing to take control. Looks like you're stuck as a skeleton for now.") + src.verbs -= /mob/living/carbon/human/proc/skeleton_reset + if (src.stat != DEAD) + var/list/mob/dead/observer/candidates = pollCandidates("Do you want to play as Skeleton?", ROLE_WIZARD, 0, 100) + var/mob/dead/observer/new_stand = null + if(candidates.len && src.stat != DEAD) // make sure they haven't died since + new_stand = pick(candidates) + to_chat(src,"Your body has been given up and taken over by someone else.") + message_admins("[key_name_admin(new_stand)] has taken control of ([key_name_admin(src)])") + src.ghostize() + src.key = new_stand.key + else + to_chat(src, "There were no ghosts willing to take control. Looks like you're stuck as a skeleton for now.") + spawn(600) + src.verbs += /mob/living/carbon/human/proc/skeleton_reset From 0fc58330cd2e302fbaa405a908e5e319db7bd5ad Mon Sep 17 00:00:00 2001 From: joep van der velden Date: Wed, 17 Apr 2019 12:57:32 +0200 Subject: [PATCH 006/195] Fixes species transformations not retaining items correctly --- code/game/gamemodes/changeling/powers/mutations.dm | 9 --------- code/modules/mob/living/carbon/human/human.dm | 7 +++++-- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/code/game/gamemodes/changeling/powers/mutations.dm b/code/game/gamemodes/changeling/powers/mutations.dm index 6288bed2964..3c84e0d6ab5 100644 --- a/code/game/gamemodes/changeling/powers/mutations.dm +++ b/code/game/gamemodes/changeling/powers/mutations.dm @@ -132,15 +132,6 @@ throw_range = 0 throw_speed = 0 -/obj/item/melee/arm_blade/New() - ..() - if(ismob(loc)) - loc.visible_message("A grotesque blade forms around [loc.name]\'s arm!", "Our arm twists and mutates, transforming it into a deadly blade.", "You hear organic matter ripping and tearing!") - -/obj/item/melee/arm_blade/dropped(mob/user) - user.visible_message("With a sickening crunch, [user] reforms [user.p_their()] blade into an arm!", "We assimilate the blade back into our body.", "You hear organic matter ripping and tearing!") - . = ..() - /obj/item/melee/arm_blade/afterattack(atom/target, mob/user, proximity) if(!proximity) return diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index bd5817e8867..2b027cc833e 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1317,11 +1317,13 @@ var/list/thing_to_check = list(slot_wear_mask, slot_head, slot_shoes, slot_gloves, slot_l_ear, slot_r_ear, slot_glasses, slot_l_hand, slot_r_hand) var/list/kept_items[0] - + var/list/item_flags[0] for(var/thing in thing_to_check) var/obj/item/I = get_item_by_slot(thing) if(I) kept_items[I] = thing + item_flags[I] = I.flags + I.flags = 0 // Temporary set the flags to 0 if(retain_damage) //Create a list of body parts which are damaged by burn or brute and save them to apply after new organs are generated. First we just handle external organs. @@ -1387,8 +1389,9 @@ else dna.species.create_organs(src) - for(var/thing in kept_items) + for(var/obj/item/thing in kept_items) equip_to_slot_if_possible(thing, kept_items[thing], redraw_mob = 0) + thing.flags = item_flags[thing] // Reset the flags to the origional ones //Handle default hair/head accessories for created mobs. var/obj/item/organ/external/head/H = get_organ("head") From 211468b24feb7facc65a30a4ed2c9ed5b6348dba Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Sun, 21 Apr 2019 01:45:30 +0200 Subject: [PATCH 007/195] Add fake ambient occlusion --- SQL/paradise_schema.sql | 1 + SQL/paradise_schema_prefixed.sql | 1 + SQL/updates/5-6.sql | 4 ++ code/ATMOSPHERICS/atmospherics.dm | 11 ++++- .../components/binary_devices/circulator.dm | 2 + .../components/binary_devices/dp_vent_pump.dm | 2 + .../components/binary_devices/passive_gate.dm | 1 + .../components/binary_devices/pump.dm | 2 + .../components/binary_devices/valve.dm | 2 + .../components/binary_devices/volume_pump.dm | 2 + .../components/omni_devices/omni_base.dm | 4 +- .../components/trinary_devices/filter.dm | 2 + .../components/trinary_devices/mixer.dm | 2 + .../components/trinary_devices/tvalve.dm | 1 + .../components/unary_devices/cold_sink.dm | 4 +- .../unary_devices/generator_input.dm | 4 +- .../unary_devices/heat_exchanger.dm | 4 +- .../components/unary_devices/heat_source.dm | 4 +- .../unary_devices/outlet_injector.dm | 2 + .../unary_devices/oxygen_generator.dm | 4 +- .../unary_devices/portables_connector.dm | 1 + .../components/unary_devices/thermal_plate.dm | 6 ++- .../components/unary_devices/vent_pump.dm | 4 ++ .../components/unary_devices/vent_scrubber.dm | 4 ++ code/ATMOSPHERICS/pipes/cap.dm | 2 + code/ATMOSPHERICS/pipes/manifold.dm | 2 + code/ATMOSPHERICS/pipes/manifold4w.dm | 2 + code/ATMOSPHERICS/pipes/simple/pipe_simple.dm | 2 + .../pipes/simple/pipe_simple_hidden.dm | 2 + .../pipes/simple/pipe_simple_visible.dm | 2 + code/__DEFINES/layers.dm | 4 +- code/__DEFINES/misc.dm | 5 ++- code/__HELPERS/icon_smoothing.dm | 2 +- code/__HELPERS/unsorted.dm | 14 +++++++ code/_onclick/click.dm | 22 +++++++++- code/_onclick/hud/devil.dm | 2 - code/_onclick/hud/fullscreen.dm | 1 + code/_onclick/hud/hud.dm | 29 +++++++++++-- code/_onclick/hud/plane_master.dm | 34 +++++++++++++++ code/_onclick/hud/robot.dm | 4 +- code/_onclick/hud/screen_objects.dm | 16 +++++--- code/_onclick/telekinesis.dm | 4 +- code/game/area/areas.dm | 1 + code/game/atoms.dm | 3 +- code/game/gamemodes/sandbox/h_sandbox.dm | 16 ++++---- .../special_shadowling_abilities.dm | 2 + code/game/machinery/ai_slipper.dm | 1 + code/game/machinery/hologram.dm | 1 + code/game/machinery/igniter.dm | 1 + code/game/machinery/overview.dm | 4 +- code/game/objects/effects/effects.dm | 1 + .../objects/effects/temporary_visuals/cult.dm | 3 +- .../objects/items/weapons/storage/storage.dm | 41 ++++++++++--------- code/game/objects/structures/aliens.dm | 1 + code/game/objects/structures/lattice.dm | 1 + code/game/turfs/simulated/floor.dm | 2 +- code/modules/client/client procs.dm | 18 ++++++-- code/modules/client/preference/preferences.dm | 29 ++++++------- .../client/preference/preferences_mysql.dm | 8 +++- code/modules/events/anomaly_bluespace.dm | 3 +- code/modules/events/vent_clog.dm | 2 +- code/modules/mob/inventory.dm | 8 ++-- .../mob/living/carbon/human/inventory.dm | 12 +++--- .../mob/living/silicon/robot/inventory.dm | 12 +++--- .../modules/mob/living/silicon/robot/robot.dm | 4 +- .../mob/living/simple_animal/simple_animal.dm | 4 +- code/modules/paperwork/paper.dm | 8 ++-- .../reagents/chemistry/reagents/drugs.dm | 26 ++++++++++++ code/modules/recycling/disposal.dm | 2 +- config/example/dbconfig.txt | 2 +- paradise.dme | 1 + 71 files changed, 320 insertions(+), 120 deletions(-) create mode 100644 SQL/updates/5-6.sql create mode 100644 code/_onclick/hud/plane_master.dm diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql index 0379517190f..e2c2230a74c 100644 --- a/SQL/paradise_schema.sql +++ b/SQL/paradise_schema.sql @@ -266,6 +266,7 @@ CREATE TABLE `player` ( `exp` mediumtext, `clientfps` smallint(4) DEFAULT '0', `atklog` smallint(4) DEFAULT '0', + `ambientocclusion` smallint(4) DEFAULT '1', PRIMARY KEY (`id`), UNIQUE KEY `ckey` (`ckey`) ) ENGINE=InnoDB AUTO_INCREMENT=32446 DEFAULT CHARSET=latin1; diff --git a/SQL/paradise_schema_prefixed.sql b/SQL/paradise_schema_prefixed.sql index e9a622cf037..7ad83febaf4 100644 --- a/SQL/paradise_schema_prefixed.sql +++ b/SQL/paradise_schema_prefixed.sql @@ -265,6 +265,7 @@ CREATE TABLE `SS13_player` ( `exp` mediumtext, `clientfps` smallint(4) DEFAULT '0', `atklog` smallint(4) DEFAULT '0', + `ambientocclusion` smallint(4) DEFAULT '1', PRIMARY KEY (`id`), UNIQUE KEY `ckey` (`ckey`) ) ENGINE=InnoDB AUTO_INCREMENT=32446 DEFAULT CHARSET=latin1; diff --git a/SQL/updates/5-6.sql b/SQL/updates/5-6.sql new file mode 100644 index 00000000000..d2b7ed0d16e --- /dev/null +++ b/SQL/updates/5-6.sql @@ -0,0 +1,4 @@ +#Updating the SQL from version 5 to version 6. -Mark +#Adding new column to contain the atklog value. +ALTER TABLE `player` + ADD `ambientocclusion` smallint(4) DEFAULT '1' AFTER `atklog`; \ No newline at end of file diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index ede0351993b..64ae485a75d 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -11,7 +11,8 @@ Pipelines + Other Objects -> Pipe network GLOBAL_DATUM_INIT(pipe_icon_manager, /datum/pipe_icon_manager, new()) /obj/machinery/atmospherics anchored = 1 - layer = 2.4 //under wires with their 2.44 + layer = GAS_PIPE_HIDDEN_LAYER //under wires + plane = FLOOR_PLANE idle_power_usage = 0 active_power_usage = 0 power_channel = ENVIRON @@ -61,10 +62,16 @@ GLOBAL_DATUM_INIT(pipe_icon_manager, /datum/pipe_icon_manager, new()) // Icons/overlays/underlays /obj/machinery/atmospherics/update_icon() + var/turf/T = loc + if(level == 2 || !T.intact) + plane = GAME_PLANE + else + plane = FLOOR_PLANE + return null /obj/machinery/atmospherics/proc/update_pipe_image() - pipe_image = image(src, loc, layer = 20, dir = dir) //the 20 puts it above Byond's darkness (not its opacity view) + pipe_image = image(src, loc, layer = ABOVE_HUD_LAYER, dir = dir) //the 20 puts it above Byond's darkness (not its opacity view) pipe_image.plane = HUD_PLANE /obj/machinery/atmospherics/proc/check_icon_cache(var/safety = 0) diff --git a/code/ATMOSPHERICS/components/binary_devices/circulator.dm b/code/ATMOSPHERICS/components/binary_devices/circulator.dm index 3e18cfb41fa..c1019236425 100644 --- a/code/ATMOSPHERICS/components/binary_devices/circulator.dm +++ b/code/ATMOSPHERICS/components/binary_devices/circulator.dm @@ -112,6 +112,8 @@ ..() /obj/machinery/atmospherics/binary/circulator/update_icon() + ..() + if(stat & (BROKEN|NOPOWER)) icon_state = "circ[side]-p" else if(last_pressure_delta > 0) diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm index 785d58520a0..b82babd7532 100644 --- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm @@ -71,6 +71,8 @@ add_underlay(T, node2, dir) /obj/machinery/atmospherics/binary/dp_vent_pump/update_icon(var/safety = 0) + ..() + if(!check_icon_cache()) return diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm index 9e845c15a98..84a05e464f5 100644 --- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm +++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm @@ -28,6 +28,7 @@ return ..() /obj/machinery/atmospherics/binary/passive_gate/update_icon() + ..() icon_state = "[on ? "on" : "off"]" /obj/machinery/atmospherics/binary/passive_gate/update_underlays() diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index 9d21fece152..9d7d22b535f 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -39,6 +39,8 @@ Thus, the two variables affect pump operation are set in New(): on = 1 /obj/machinery/atmospherics/binary/pump/update_icon() + ..() + if(!powered()) icon_state = "off" else diff --git a/code/ATMOSPHERICS/components/binary_devices/valve.dm b/code/ATMOSPHERICS/components/binary_devices/valve.dm index f8f282a55af..a0669f5e41d 100644 --- a/code/ATMOSPHERICS/components/binary_devices/valve.dm +++ b/code/ATMOSPHERICS/components/binary_devices/valve.dm @@ -16,6 +16,8 @@ icon_state = "map_valve1" /obj/machinery/atmospherics/binary/valve/update_icon(animation) + ..() + if(animation) flick("valve[src.open][!src.open]",src) else diff --git a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm index a64c94e7fc5..2b0dcbf30a5 100644 --- a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm @@ -43,6 +43,8 @@ Thus, the two variables affect pump operation are set in New(): set_frequency(frequency) /obj/machinery/atmospherics/binary/volume_pump/update_icon() + ..() + if(!powered()) icon_state = "off" else diff --git a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm index a3903f278fb..cde1c9e80b0 100644 --- a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm +++ b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm @@ -72,6 +72,8 @@ update_ports() /obj/machinery/atmospherics/omni/update_icon() + ..() + if(stat & NOPOWER) overlays = overlays_off on = 0 @@ -83,8 +85,6 @@ underlays = underlays_current - return - /obj/machinery/atmospherics/omni/proc/error_check() return diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index 903f917e0c6..f64aba4f495 100755 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -40,6 +40,8 @@ Filter types: radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) /obj/machinery/atmospherics/trinary/filter/update_icon() + ..() + if(flipped) icon_state = "m" else diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm index 0c64804b6da..43de7828891 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm @@ -17,6 +17,8 @@ flipped = 1 /obj/machinery/atmospherics/trinary/mixer/update_icon(safety = 0) + ..() + if(flipped) icon_state = "m" else diff --git a/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm b/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm index 9dddf8b06f4..f31fa84f350 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm @@ -135,6 +135,7 @@ /obj/machinery/atmospherics/trinary/tvalve/digital/update_icon() ..() + if(!powered()) icon_state = "tvalvenopower" diff --git a/code/ATMOSPHERICS/components/unary_devices/cold_sink.dm b/code/ATMOSPHERICS/components/unary_devices/cold_sink.dm index 51415223de2..7cae2968a22 100644 --- a/code/ATMOSPHERICS/components/unary_devices/cold_sink.dm +++ b/code/ATMOSPHERICS/components/unary_devices/cold_sink.dm @@ -13,6 +13,8 @@ var/current_heat_capacity = 50000 //totally random /obj/machinery/atmospherics/unary/cold_sink/update_icon() + ..() + if(node) icon_state = "intact_[on?("on"):("off")]" else @@ -20,8 +22,6 @@ on = 0 - return - /obj/machinery/atmospherics/unary/cold_sink/process_atmos() ..() if(!on) diff --git a/code/ATMOSPHERICS/components/unary_devices/generator_input.dm b/code/ATMOSPHERICS/components/unary_devices/generator_input.dm index 42c3676836c..cb095b1e551 100644 --- a/code/ATMOSPHERICS/components/unary_devices/generator_input.dm +++ b/code/ATMOSPHERICS/components/unary_devices/generator_input.dm @@ -9,12 +9,12 @@ var/update_cycle /obj/machinery/atmospherics/unary/generator_input/update_icon() + ..() + if(node) icon_state = "intact" else icon_state = "exposed" - return - /obj/machinery/atmospherics/unary/generator_input/proc/return_exchange_air() return air_contents diff --git a/code/ATMOSPHERICS/components/unary_devices/heat_exchanger.dm b/code/ATMOSPHERICS/components/unary_devices/heat_exchanger.dm index 58b374578df..e4afcadc7fa 100644 --- a/code/ATMOSPHERICS/components/unary_devices/heat_exchanger.dm +++ b/code/ATMOSPHERICS/components/unary_devices/heat_exchanger.dm @@ -13,13 +13,13 @@ burn_state = LAVA_PROOF /obj/machinery/atmospherics/unary/heat_exchanger/update_icon() + ..() + if(node) icon_state = "intact" else icon_state = "exposed" - return - /obj/machinery/atmospherics/unary/heat_exchanger/atmos_init() if(!partner) var/partner_connect = turn(dir,180) diff --git a/code/ATMOSPHERICS/components/unary_devices/heat_source.dm b/code/ATMOSPHERICS/components/unary_devices/heat_source.dm index 31eb7305ded..b3b1d0c4fdc 100644 --- a/code/ATMOSPHERICS/components/unary_devices/heat_source.dm +++ b/code/ATMOSPHERICS/components/unary_devices/heat_source.dm @@ -13,6 +13,8 @@ var/current_heat_capacity = 50000 //totally random /obj/machinery/atmospherics/unary/heat_reservoir/update_icon() + ..() + if(node) icon_state = "intact_[on?("on"):("off")]" else @@ -20,8 +22,6 @@ on = 0 - return - /obj/machinery/atmospherics/unary/heat_reservoir/process_atmos() ..() if(!on) diff --git a/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm b/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm index d597d0eb4c4..de0886d84b5 100644 --- a/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm +++ b/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm @@ -38,6 +38,8 @@ return ..() /obj/machinery/atmospherics/unary/outlet_injector/update_icon() + ..() + if(!powered()) icon_state = "off" else diff --git a/code/ATMOSPHERICS/components/unary_devices/oxygen_generator.dm b/code/ATMOSPHERICS/components/unary_devices/oxygen_generator.dm index 0f575fb9c3a..a9c3b98ad74 100644 --- a/code/ATMOSPHERICS/components/unary_devices/oxygen_generator.dm +++ b/code/ATMOSPHERICS/components/unary_devices/oxygen_generator.dm @@ -14,6 +14,8 @@ var/oxygen_content = 10 /obj/machinery/atmospherics/unary/oxygen_generator/update_icon() + ..() + if(node) icon_state = "intact_[on?("on"):("off")]" else @@ -21,8 +23,6 @@ on = 0 - return - /obj/machinery/atmospherics/unary/oxygen_generator/New() ..() diff --git a/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm b/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm index 711a1df3861..a9e4e2a282b 100644 --- a/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm +++ b/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm @@ -18,6 +18,7 @@ return ..() /obj/machinery/atmospherics/unary/portables_connector/update_icon() + ..() icon_state = "connector" /obj/machinery/atmospherics/unary/portables_connector/update_underlays() diff --git a/code/ATMOSPHERICS/components/unary_devices/thermal_plate.dm b/code/ATMOSPHERICS/components/unary_devices/thermal_plate.dm index c245bfc120e..5a6e76a182b 100644 --- a/code/ATMOSPHERICS/components/unary_devices/thermal_plate.dm +++ b/code/ATMOSPHERICS/components/unary_devices/thermal_plate.dm @@ -11,10 +11,12 @@ desc = "Transfers heat to and from an area" /obj/machinery/atmospherics/unary/thermal_plate/update_icon() - var/prefix="" + ..() + + var/prefix = "" //var/suffix="_idle" // Also available: _heat, _cool if(level == 1 && istype(loc, /turf/simulated)) - prefix="h" + prefix = "h" icon_state = "[prefix]off" /obj/machinery/atmospherics/unary/thermal_plate/process_atmos() diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm index 613d0f0794e..3b575176db4 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm @@ -77,6 +77,10 @@ air_contents.volume = 1000 /obj/machinery/atmospherics/unary/vent_pump/update_icon(var/safety = 0) + ..() + + plane = FLOOR_PLANE + if(!check_icon_cache()) return diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm index 8416a784019..27aed7967d5 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm @@ -91,6 +91,10 @@ return 1 /obj/machinery/atmospherics/unary/vent_scrubber/update_icon(var/safety = 0) + ..() + + plane = FLOOR_PLANE + if(!check_icon_cache()) return diff --git a/code/ATMOSPHERICS/pipes/cap.dm b/code/ATMOSPHERICS/pipes/cap.dm index 2552f6e0794..71630aef1c2 100644 --- a/code/ATMOSPHERICS/pipes/cap.dm +++ b/code/ATMOSPHERICS/pipes/cap.dm @@ -55,6 +55,8 @@ node.update_underlays() /obj/machinery/atmospherics/pipe/cap/update_icon(var/safety = 0) + ..() + if(!check_icon_cache()) return diff --git a/code/ATMOSPHERICS/pipes/manifold.dm b/code/ATMOSPHERICS/pipes/manifold.dm index 199942e7a40..bddc0281472 100644 --- a/code/ATMOSPHERICS/pipes/manifold.dm +++ b/code/ATMOSPHERICS/pipes/manifold.dm @@ -116,6 +116,8 @@ node3.update_underlays() /obj/machinery/atmospherics/pipe/manifold/update_icon(var/safety = 0) + ..() + if(!check_icon_cache()) return diff --git a/code/ATMOSPHERICS/pipes/manifold4w.dm b/code/ATMOSPHERICS/pipes/manifold4w.dm index 502795e1da9..a948b22fd19 100644 --- a/code/ATMOSPHERICS/pipes/manifold4w.dm +++ b/code/ATMOSPHERICS/pipes/manifold4w.dm @@ -90,6 +90,8 @@ node4.update_underlays() /obj/machinery/atmospherics/pipe/manifold4w/update_icon(var/safety = 0) + ..() + if(!check_icon_cache()) return diff --git a/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm b/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm index b2c2750a452..b966690733b 100644 --- a/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm +++ b/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm @@ -137,6 +137,8 @@ node2.update_underlays() /obj/machinery/atmospherics/pipe/simple/update_icon(var/safety = 0) + ..() + if(!check_icon_cache()) return diff --git a/code/ATMOSPHERICS/pipes/simple/pipe_simple_hidden.dm b/code/ATMOSPHERICS/pipes/simple/pipe_simple_hidden.dm index 3efd22ed446..db982639c2f 100644 --- a/code/ATMOSPHERICS/pipes/simple/pipe_simple_hidden.dm +++ b/code/ATMOSPHERICS/pipes/simple/pipe_simple_hidden.dm @@ -28,6 +28,8 @@ icon_state = "map_universal" /obj/machinery/atmospherics/pipe/simple/hidden/universal/update_icon(var/safety = 0) + ..() + if(!check_icon_cache()) return diff --git a/code/ATMOSPHERICS/pipes/simple/pipe_simple_visible.dm b/code/ATMOSPHERICS/pipes/simple/pipe_simple_visible.dm index 9bf085b534a..1ca4da646ac 100644 --- a/code/ATMOSPHERICS/pipes/simple/pipe_simple_visible.dm +++ b/code/ATMOSPHERICS/pipes/simple/pipe_simple_visible.dm @@ -39,6 +39,8 @@ icon_state = "map_universal" /obj/machinery/atmospherics/pipe/simple/visible/universal/update_icon(var/safety = 0) + ..() + if(!check_icon_cache()) return diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index 9da2c725a43..26894d3e6ea 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -6,7 +6,9 @@ #define PLANE_SPACE -95 #define PLANE_SPACE_PARALLAX -90 -#define GAME_PLANE 0 +#define FLOOR_PLANE -2 +#define GAME_PLANE -1 +#define BLACKNESS_PLANE 0 //To keep from conflicts with SEE_BLACKNESS internals #define SPACE_LAYER 1.8 //#define TURF_LAYER 2 //For easy recordkeeping; this is a byond define diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index dff9426c641..462191e49c3 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -401,4 +401,7 @@ #define GHOST_ORBIT_TRIANGLE "triangle" #define GHOST_ORBIT_HEXAGON "hexagon" #define GHOST_ORBIT_SQUARE "square" -#define GHOST_ORBIT_PENTAGON "pentagon" \ No newline at end of file +#define GHOST_ORBIT_PENTAGON "pentagon" + +// Filters +#define AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-2, size=4, border=4, color="#04080FAA") \ No newline at end of file diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm index 2db8621195d..472f7be75f4 100644 --- a/code/__HELPERS/icon_smoothing.dm +++ b/code/__HELPERS/icon_smoothing.dm @@ -114,7 +114,7 @@ return if(QDELETED(A)) return - if((A.smooth & SMOOTH_TRUE) || (A.smooth & SMOOTH_MORE)) + if(A.smooth & (SMOOTH_TRUE | SMOOTH_MORE)) var/adjacencies = calculate_adjacencies(A) if(A.smooth & SMOOTH_DIAGONAL) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 619d09713d6..00724c94a03 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -2029,3 +2029,17 @@ var/mob/dview/dview_mob = new /proc/pass() return + +/proc/params2turf(scr_loc, turf/origin, client/C) + if(!scr_loc) + return null + var/tX = splittext(scr_loc, ",") + var/tY = splittext(tX[2], ":") + var/tZ = origin.z + tY = tY[1] + tX = splittext(tX[1], ":") + tX = tX[1] + var/list/actual_view = getviewsize(C ? C.view : world.view) + tX = Clamp(origin.x + text2num(tX) - round(actual_view[1] / 2) - 1, 1, world.maxx) + tY = Clamp(origin.y + text2num(tY) - round(actual_view[2] / 2) - 1, 1, world.maxy) + return locate(tX, tY, tZ) \ No newline at end of file diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 24e58b502ad..b44efa5444f 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -399,7 +399,25 @@ icon_state = "passage0" plane = CLICKCATCHER_PLANE mouse_opacity = MOUSE_OPACITY_OPAQUE - screen_loc = "CENTER-7,CENTER-7" + screen_loc = "CENTER" + +#define MAX_SAFE_BYOND_ICON_SCALE_TILES (MAX_SAFE_BYOND_ICON_SCALE_PX / world.icon_size) +#define MAX_SAFE_BYOND_ICON_SCALE_PX (33 * 32) //Not using world.icon_size on purpose. + +/obj/screen/click_catcher/proc/UpdateGreed(view_size_x = 15, view_size_y = 15) + var/icon/newicon = icon('icons/mob/screen_gen.dmi', "catcher") + var/ox = min(MAX_SAFE_BYOND_ICON_SCALE_TILES, view_size_x) + var/oy = min(MAX_SAFE_BYOND_ICON_SCALE_TILES, view_size_y) + var/px = view_size_x * world.icon_size + var/py = view_size_y * world.icon_size + var/sx = min(MAX_SAFE_BYOND_ICON_SCALE_PX, px) + var/sy = min(MAX_SAFE_BYOND_ICON_SCALE_PX, py) + newicon.Scale(sx, sy) + icon = newicon + screen_loc = "CENTER-[(ox-1)*0.5],CENTER-[(oy-1)*0.5]" + var/matrix/M = new + M.Scale(px/sx, py/sy) + transform = M /obj/screen/click_catcher/Click(location, control, params) var/list/modifiers = params2list(params) @@ -407,6 +425,6 @@ var/mob/living/carbon/C = usr C.swap_hand() else - var/turf/T = screen_loc2turf(modifiers["screen-loc"], get_turf(usr)) + var/turf/T = params2turf(modifiers["screen-loc"], get_turf(usr)) T.Click(location, control, params) return 1 diff --git a/code/_onclick/hud/devil.dm b/code/_onclick/hud/devil.dm index 2a7dab21a03..1e17cae1708 100644 --- a/code/_onclick/hud/devil.dm +++ b/code/_onclick/hud/devil.dm @@ -40,7 +40,6 @@ using.icon = ui_style using.icon_state = "swap_1" using.screen_loc = ui_swaphand1 - using.layer = 19 static_inventory += using using = new /obj/screen/swap_hand() @@ -48,7 +47,6 @@ using.icon = ui_style using.icon_state = "swap_2" using.screen_loc = ui_swaphand2 - using.layer = 19 static_inventory += using mymob.zone_sel = new /obj/screen/zone_sel() diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm index 673a49ffd22..4c9ff339052 100644 --- a/code/_onclick/hud/fullscreen.dm +++ b/code/_onclick/hud/fullscreen.dm @@ -54,6 +54,7 @@ icon_state = "default" screen_loc = "CENTER-7,CENTER-7" layer = FULLSCREEN_LAYER + plane = FULLSCREEN_PLANE mouse_opacity = MOUSE_OPACITY_TRANSPARENT var/severity = 0 diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 410d49f973e..56d954313cc 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -38,6 +38,8 @@ var/obj/screen/movable/action_button/hide_toggle/hide_actions_toggle var/action_buttons_hidden = 0 + var/list/obj/screen/plane_master/plane_masters = list() // see "appearance_flags" in the ref, assoc list of "[plane]" = object + /mob/proc/create_mob_hud() if(client && !hud_used) hud_used = new /datum/hud(src) @@ -47,6 +49,11 @@ hide_actions_toggle = new hide_actions_toggle.InitialiseIcon(mymob) + for(var/mytype in subtypesof(/obj/screen/plane_master)) + var/obj/screen/plane_master/instance = new mytype() + plane_masters["[instance.plane]"] = instance + instance.backdrop(mymob) + /datum/hud/Destroy() if(mymob.hud_used == src) mymob.hud_used = null @@ -83,14 +90,16 @@ nightvisionicon = null devilsouldisplay = null + QDEL_LIST_ASSOC_VAL(plane_masters) + mymob = null return ..() /datum/hud/proc/show_hud(version = 0) if(!ismob(mymob)) - return 0 + return FALSE if(!mymob.client) - return 0 + return FALSE mymob.client.screen = list() @@ -162,13 +171,25 @@ mymob.update_action_buttons(1) reorganize_alerts() reload_fullscreen() + plane_masters_update() + +/datum/hud/proc/plane_masters_update() + // Plane masters are always shown to OUR mob, never to observers + for(var/thing in plane_masters) + var/obj/screen/plane_master/PM = plane_masters[thing] + PM.backdrop(mymob) + mymob.client.screen += PM /datum/hud/human/show_hud(version = 0) - ..() + . = ..() + if(!.) + return hidden_inventory_update() /datum/hud/robot/show_hud(version = 0) - ..() + . = ..() + if(!.) + return update_robot_modules_display() /datum/hud/proc/hidden_inventory_update() diff --git a/code/_onclick/hud/plane_master.dm b/code/_onclick/hud/plane_master.dm new file mode 100644 index 00000000000..f56400c7198 --- /dev/null +++ b/code/_onclick/hud/plane_master.dm @@ -0,0 +1,34 @@ +/obj/screen/plane_master + screen_loc = "CENTER" + icon_state = "blank" + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + blend_mode = BLEND_OVERLAY + var/show_alpha = 255 + var/hide_alpha = 0 + +/obj/screen/plane_master/proc/Show(override) + alpha = override || show_alpha + +/obj/screen/plane_master/proc/Hide(override) + alpha = override || hide_alpha + +//Why do plane masters need a backdrop sometimes? Read http://www.byond.com/forum/?post=2141928 +//Trust me, you need one. Period. If you don't think you do, you're doing something extremely wrong. +/obj/screen/plane_master/proc/backdrop(mob/mymob) + +/obj/screen/plane_master/floor + name = "floor plane master" + plane = FLOOR_PLANE + appearance_flags = PLANE_MASTER + blend_mode = BLEND_OVERLAY + +/obj/screen/plane_master/game_world + name = "game world plane master" + plane = GAME_PLANE + appearance_flags = PLANE_MASTER //should use client color + blend_mode = BLEND_OVERLAY + +/obj/screen/plane_master/game_world/backdrop(mob/mymob) + filters -= AMBIENT_OCCLUSION + if(istype(mymob) && mymob.client && mymob.client.prefs && mymob.client.prefs.ambientocclusion) + filters += AMBIENT_OCCLUSION diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index a542c0345fd..ea23a56d8e4 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -226,8 +226,8 @@ A.screen_loc = "CENTER[x]:16,SOUTH+[y]:7" else A.screen_loc = "CENTER+[x]:16,SOUTH+[y]:7" - A.layer = 20 - A.plane = HUD_PLANE + A.layer = ABOVE_HUD_LAYER + A.plane = ABOVE_HUD_PLANE x++ if(x == 4) diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index d9f6653b0ff..aeda1e5baa6 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -10,7 +10,7 @@ name = "" icon = 'icons/mob/screen_gen.dmi' layer = HUD_LAYER_SCREEN - plane = HUD_PLANE + plane = ABOVE_HUD_PLANE unacidable = 1 var/obj/master = null //A reference to the object in the slot. Grabs or items, generally. var/datum/hud/hud = null @@ -47,7 +47,8 @@ /obj/screen/drop name = "drop" icon_state = "act_drop" - layer = 19 + layer = HUD_LAYER + plane = HUD_PLANE /obj/screen/drop/Click() usr.drop_item_v() @@ -143,8 +144,9 @@ name = "resist" icon = 'icons/mob/screen_midnight.dmi' icon_state = "act_resist" - layer = 19 - + layer = HUD_LAYER + plane = HUD_PLANE + /obj/screen/resist/Click() if(isliving(usr)) var/mob/living/L = usr @@ -327,7 +329,8 @@ /obj/screen/inventory var/slot_id //The indentifier for the slot. It has nothing to do with ID cards. var/list/object_overlays = list() - layer = 19 + layer = HUD_LAYER + plane = HUD_PLANE /obj/screen/inventory/MouseEntered() ..() @@ -417,7 +420,8 @@ return 1 /obj/screen/swap_hand - layer = 19 + layer = HUD_LAYER + plane = HUD_PLANE name = "swap hand" /obj/screen/swap_hand/Click() diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index 238ce2d5a94..6ef7a797136 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -65,8 +65,8 @@ var/const/tk_maxrange = 15 flags = NOBLUDGEON | ABSTRACT | DROPDEL //item_state = null w_class = WEIGHT_CLASS_GIGANTIC - layer = 20 - plane = HUD_PLANE + layer = ABOVE_HUD_LAYER + plane = ABOVE_HUD_PLANE var/last_throw = 0 var/atom/movable/focus = null diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index c5683f366ae..6f25d1b23aa 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -16,6 +16,7 @@ // area from any other instances already present (meaning you can have // separate APCs, and so on) var/there_can_be_many = 0 + plane = BLACKNESS_PLANE //Keeping this on the default plane, GAME_PLANE, will make area overlays fail to render on FLOOR_PLANE. /area/New() diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 024b2a924cf..e46c1290637 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -1,5 +1,6 @@ /atom - layer = 2 + layer = TURF_LAYER + plane = GAME_PLANE var/level = 2 var/flags = NONE var/flags_2 = NONE diff --git a/code/game/gamemodes/sandbox/h_sandbox.dm b/code/game/gamemodes/sandbox/h_sandbox.dm index 35284594b46..216c946fc97 100644 --- a/code/game/gamemodes/sandbox/h_sandbox.dm +++ b/code/game/gamemodes/sandbox/h_sandbox.dm @@ -67,32 +67,32 @@ datum/hSB P.wear_suit.plane = initial(P.wear_suit.plane) P.wear_suit = null P.wear_suit = new/obj/item/clothing/suit/space(P) - P.wear_suit.layer = 20 - P.wear_suit.plane = HUD_PLANE + P.wear_suit.layer = ABOVE_HUD_LAYER + P.wear_suit.plane = ABOVE_HUD_PLANE if(P.head) P.head.loc = P.loc P.head.layer = initial(P.head.layer) P.head.plane = initial(P.head.plane) P.head = null P.head = new/obj/item/clothing/head/helmet/space(P) - P.head.layer = 20 - P.head.plane = HUD_PLANE + P.head.layer = ABOVE_HUD_LAYER + P.head.plane = ABOVE_HUD_PLANE if(P.wear_mask) P.wear_mask.loc = P.loc P.wear_mask.layer = initial(P.wear_mask.layer) P.wear_mask.plane = initial(P.wear_mask.plane) P.wear_mask = null P.wear_mask = new/obj/item/clothing/mask/gas(P) - P.wear_mask.layer = 20 - P.wear_mask.plane = HUD_PLANE + P.wear_mask.layer = ABOVE_HUD_LAYER + P.wear_mask.plane = ABOVE_HUD_PLANE if(P.back) P.back.loc = P.loc P.back.layer = initial(P.back.layer) P.back.plane = initial(P.back.plane) P.back = null P.back = new/obj/item/tank/jetpack(P) - P.back.layer = 20 - P.back.plane = HUD_PLANE + P.back.layer = ABOVE_HUD_LAYER + P.back.plane = ABOVE_HUD_PLANE P.internal = P.back if("hsbmetal") var/obj/item/stack/sheet/hsb = new/obj/item/stack/sheet/metal diff --git a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm index 29a2c9aadca..c11105e9f30 100644 --- a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm @@ -107,6 +107,8 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/collective_mind(null)) H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shadowling_regenarmor(null)) H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shadowling_extend_shuttle(null)) + + QDEL_NULL(H.hud_used) H.hud_used = new /datum/hud/human(H, ui_style2icon(H.client.prefs.UI_style), H.client.prefs.UI_style_color, H.client.prefs.UI_style_alpha) H.hud_used.show_hud(H.hud_used.hud_version) diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm index 8a65da977ae..48b64e8c589 100644 --- a/code/game/machinery/ai_slipper.dm +++ b/code/game/machinery/ai_slipper.dm @@ -3,6 +3,7 @@ icon = 'icons/obj/device.dmi' icon_state = "motion3" layer = 3 + plane = FLOOR_PLANE anchored = 1.0 armor = list(melee = 50, bullet = 20, laser = 20, energy = 20, bomb = 0, bio = 0, rad = 0) var/uses = 20 diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 49a05371050..e6d967c8eb4 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -44,6 +44,7 @@ var/list/holopads = list() idle_power_usage = 5 active_power_usage = 100 layer = TURF_LAYER+0.1 //Preventing mice and drones from sneaking under them. + plane = FLOOR_PLANE armor = list(melee = 50, bullet = 20, laser = 20, energy = 20, bomb = 0, bio = 0, rad = 0) var/list/masters = list()//List of living mobs that use the holopad var/list/holorays = list()//Holoray-mob link. diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 3c36edb1685..20d15a29e1f 100755 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -3,6 +3,7 @@ desc = "It's useful for igniting plasma." icon = 'icons/obj/stationobjs.dmi' icon_state = "igniter1" + plane = FLOOR_PLANE armor = list(melee = 50, bullet = 30, laser = 70, energy = 50, bomb = 20, bio = 0, rad = 0) var/id = null var/on = 1.0 diff --git a/code/game/machinery/overview.dm b/code/game/machinery/overview.dm index e98c4e90c30..e77eef869dc 100644 --- a/code/game/machinery/overview.dm +++ b/code/game/machinery/overview.dm @@ -183,8 +183,8 @@ qdel(I) qdel(J) H.icon = HI - H.layer = 25 - H.plane = HUD_PLANE + H.layer = ABOVE_HUD_LAYER + H.plane = ABOVE_HUD_PLANE usr.mapobjs += H #else diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm index 07c7137d719..5feec285408 100644 --- a/code/game/objects/effects/effects.dm +++ b/code/game/objects/effects/effects.dm @@ -16,6 +16,7 @@ return FALSE /obj/effect/decal + plane = FLOOR_PLANE var/no_scoop = FALSE //if it has this, don't let it be scooped up var/no_clear = FALSE //if it has this, don't delete it when its' scooped up var/list/scoop_reagents = null diff --git a/code/game/objects/effects/temporary_visuals/cult.dm b/code/game/objects/effects/temporary_visuals/cult.dm index 8edb88a7e79..7a12caf6b10 100644 --- a/code/game/objects/effects/temporary_visuals/cult.dm +++ b/code/game/objects/effects/temporary_visuals/cult.dm @@ -37,4 +37,5 @@ /obj/effect/temp_visual/cult/turf/open/floor icon_state = "floorglow" - duration = 5 \ No newline at end of file + duration = 5 + plane = FLOOR_PLANE \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 507d6fdb9f3..8815cccd92f 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -151,8 +151,8 @@ src.boxes.screen_loc = "[tx]:,[ty] to [mx],[my]" for(var/obj/O in src.contents) O.screen_loc = "[cx],[cy]" - O.layer = 20 - O.plane = HUD_PLANE + O.layer = ABOVE_HUD_LAYER + O.plane = ABOVE_HUD_PLANE cx++ if(cx > mx) cx = tx @@ -171,8 +171,8 @@ ND.sample_object.mouse_opacity = MOUSE_OPACITY_OPAQUE ND.sample_object.screen_loc = "[cx]:16,[cy]:16" ND.sample_object.maptext = "[(ND.number > 1)? "[ND.number]" : ""]" - ND.sample_object.layer = 20 - ND.sample_object.plane = HUD_PLANE + ND.sample_object.layer = ABOVE_HUD_LAYER + ND.sample_object.plane = ABOVE_HUD_PLANE cx++ if(cx > (4+cols)) cx = 4 @@ -182,8 +182,8 @@ O.mouse_opacity = MOUSE_OPACITY_OPAQUE //This is here so storage items that spawn with contents correctly have the "click around item to equip" O.screen_loc = "[cx]:16,[cy]:16" O.maptext = "" - O.layer = 20 - O.plane = HUD_PLANE + O.layer = ABOVE_HUD_LAYER + O.plane = ABOVE_HUD_PLANE cx++ if(cx > (4+cols)) cx = 4 @@ -332,8 +332,8 @@ if(ismob(loc)) W.dropped(usr) if(ismob(new_location)) - W.layer = 20 - W.plane = HUD_PLANE + W.layer = ABOVE_HUD_LAYER + W.plane = ABOVE_HUD_PLANE else W.layer = initial(W.layer) W.plane = initial(W.plane) @@ -447,17 +447,18 @@ else verbs -= /obj/item/storage/verb/toggle_gathering_mode - src.boxes = new /obj/screen/storage( ) - src.boxes.name = "storage" - src.boxes.master = src - src.boxes.icon_state = "block" - src.boxes.screen_loc = "7,7 to 10,8" - src.boxes.layer = 19 - src.closer = new /obj/screen/close( ) - src.closer.master = src - src.closer.icon_state = "x" - src.closer.layer = 20 - src.closer.plane = HUD_PLANE + boxes = new /obj/screen/storage( ) + boxes.name = "storage" + boxes.master = src + boxes.icon_state = "block" + boxes.screen_loc = "7,7 to 10,8" + boxes.layer = HUD_LAYER + boxes.plane = HUD_PLANE + closer = new /obj/screen/close( ) + closer.master = src + closer.icon_state = "x" + closer.layer = ABOVE_HUD_LAYER + closer.plane = ABOVE_HUD_PLANE orient2hud() /obj/item/storage/Destroy() @@ -469,7 +470,7 @@ return ..() /obj/item/storage/emp_act(severity) - if(!istype(src.loc, /mob/living)) + if(!istype(loc, /mob/living)) for(var/obj/O in contents) O.emp_act(severity) ..() diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm index 90e32882087..d23f4c9d606 100644 --- a/code/game/objects/structures/aliens.dm +++ b/code/game/objects/structures/aliens.dm @@ -113,6 +113,7 @@ anchored = TRUE density = FALSE layer = TURF_LAYER + plane = FLOOR_PLANE icon_state = "weeds" max_integrity = 15 var/obj/structure/alien/weeds/node/linked_node = null diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 936c94f5c4f..d88600fe4e7 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -7,6 +7,7 @@ anchored = 1.0 armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) layer = 2.3 //under pipes + plane = FLOOR_PLANE // flags = CONDUCT /obj/structure/lattice/New() diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 07c2bb8a8d6..78103a4b441 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -17,7 +17,7 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3"," name = "floor" icon = 'icons/turf/floors.dmi' icon_state = "dont_use_this_floor" - + plane = FLOOR_PLANE var/icon_regular_floor = "floor" //used to remember what icon the tile should have by default var/icon_plating = "plating" thermal_conductivity = 0.040 diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index a6216c87b1a..ae6cd9d2fa0 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -333,6 +333,8 @@ if(!prefs) prefs = new /datum/preferences(src) preferences_datums[ckey] = prefs + else + prefs.parent = src prefs.last_ip = address //these are gonna be used for banning prefs.last_id = computer_id //these are gonna be used for banning if(world.byond_version >= 511 && byond_version >= 511 && prefs.clientfps) @@ -393,10 +395,8 @@ if(establish_db_connection()) to_chat(src,"You have enabled karma gains.") - if(!void) - void = new() - - screen += void + generate_clickcatcher() + apply_clickcatcher() if(!winexists(src, "asset_cache_browser")) // The client is using a custom skin, tell them. to_chat(src, "Unable to access asset cache browser, if you are using a custom skin file, please allow DS to download the updated version, if you are not, then make a bug report. This is not a critical issue but can cause issues with resource downloading, as it is impossible to know when extra resources arrived to you.") @@ -772,3 +772,13 @@ winset(src, "rpane.changelog", "background-color=#40628a;text-color=#FFFFFF") else winset(src, "rpane.changelog", "background-color=none;text-color=#000000") + +/client/proc/generate_clickcatcher() + if(!void) + void = new() + screen += void + +/client/proc/apply_clickcatcher() + generate_clickcatcher() + var/list/actualview = getviewsize(view) + void.UpdateGreed(actualview[1],actualview[2]) \ No newline at end of file diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index caf98b866cc..a90ced311a7 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -183,7 +183,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts // 0 = character settings, 1 = game preferences var/current_tab = TAB_CHAR - // OOC Metadata: + // OOC Metadata: var/metadata = "" var/slot_name = "" @@ -200,6 +200,8 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts var/list/gear = list() var/gear_tab = "General" + var/ambientocclusion = TRUE + /datum/preferences/New(client/C) parent = C b_type = pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+") @@ -452,6 +454,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts dat += "Donator Publicity: [(toggles & DONATOR_PUBLIC) ? "Public" : "Hidden"]
" dat += "Fancy NanoUI: [(nanoui_fancy) ? "Yes" : "No"]
" dat += "FPS: [clientfps]
" + dat += "Ambient Occlusion: [ambientocclusion ? "Enabled" : "Disabled"]
" dat += "Ghost Ears: [(toggles & CHAT_GHOSTEARS) ? "All Speech" : "Nearest Creatures"]
" dat += "Ghost Sight: [(toggles & CHAT_GHOSTSIGHT) ? "All Emotes" : "Nearest Creatures"]
" dat += "Ghost Radio: [(toggles & CHAT_GHOSTRADIO) ? "All Chatter" : "Nearest Speakers"]
" @@ -1920,22 +1923,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts if(world.byond_version >= 511 && user.client && user.client.byond_version >= 511) parent.fps = clientfps -/* - if("skin_style") - var/skin_style_name = input(user, "Select a new skin style") as null|anything in list("default1", "default2", "default3") - if(!skin_style_name) return -*/ - -/* if("spawnpoint") - var/list/spawnkeys = list() - for(var/S in spawntypes) - spawnkeys += S - var/choice = input(user, "Where would you like to spawn when latejoining?") as null|anything in spawnkeys - if(!choice || !spawntypes[choice]) - spawnpoint = "Arrivals Shuttle" - return - spawnpoint = choice */ - else switch(href_list["preference"]) if("publicity") @@ -2080,6 +2067,14 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts if(href_list["tab"]) current_tab = text2num(href_list["tab"]) + if("ambientocclusion") + ambientocclusion = !ambientocclusion + if(parent && parent.screen && parent.screen.len) + var/obj/screen/plane_master/game_world/PM = locate(/obj/screen/plane_master/game_world) in parent.screen + PM.filters -= AMBIENT_OCCLUSION + if(ambientocclusion) + PM.filters += AMBIENT_OCCLUSION + ShowChoices(user) return 1 diff --git a/code/modules/client/preference/preferences_mysql.dm b/code/modules/client/preference/preferences_mysql.dm index b355d921016..e004c812315 100644 --- a/code/modules/client/preference/preferences_mysql.dm +++ b/code/modules/client/preference/preferences_mysql.dm @@ -18,7 +18,8 @@ ghost_anonsay, exp, clientfps, - atklog + atklog, + ambientocclusion, FROM [format_table_name("player")] WHERE ckey='[C.ckey]'"} ) @@ -50,6 +51,7 @@ exp = query.item[16] clientfps = text2num(query.item[17]) atklog = text2num(query.item[18]) + ambientocclusion = text2num(query.item[19]) //Sanitize ooccolor = sanitize_hexcolor(ooccolor, initial(ooccolor)) @@ -69,6 +71,7 @@ exp = sanitize_text(exp, initial(exp)) clientfps = sanitize_integer(clientfps, 0, 1000, initial(clientfps)) atklog = sanitize_integer(atklog, 0, 100, initial(atklog)) + ambientocclusion = sanitize_integer(ambientocclusion, 0, 1, initial(ambientocclusion)) return 1 /datum/preferences/proc/save_preferences(client/C) @@ -98,7 +101,8 @@ windowflashing='[windowflashing]', ghost_anonsay='[ghost_anonsay]', clientfps='[clientfps]', - atklog='[atklog]' + atklog='[atklog]', + ambientocclusion='[ambientocclusion]' WHERE ckey='[C.ckey]'"} ) diff --git a/code/modules/events/anomaly_bluespace.dm b/code/modules/events/anomaly_bluespace.dm index 29baf834bb5..a8f11681577 100644 --- a/code/modules/events/anomaly_bluespace.dm +++ b/code/modules/events/anomaly_bluespace.dm @@ -58,7 +58,8 @@ blueeffect.screen_loc = "WEST,SOUTH to EAST,NORTH" blueeffect.icon = 'icons/effects/effects.dmi' blueeffect.icon_state = "shieldsparkles" - blueeffect.layer = 17 + blueeffect.layer = FLASH_LAYER + blueeffect.plane = FULLSCREEN_PLANE blueeffect.mouse_opacity = MOUSE_OPACITY_TRANSPARENT M.client.screen += blueeffect sleep(20) diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index 9b1588e1161..64b27eef7eb 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -23,7 +23,7 @@ "atrazine","banana","charcoal","space_drugs","methamphetamine","holywater","ethanol","hot_coco","facid", "blood","morphine","ether","fluorine","mutadone","mutagen","hydrocodone","fuel", "haloperidol","lsd","syndicate_nanites","lipolicide","frostoil","salglu_solution","beepskysmash", - "omnizine", "amanitin", "neurotoxin", "synaptizine") + "omnizine", "amanitin", "neurotoxin", "synaptizine","rotatium") var/datum/reagents/R = new/datum/reagents(50) R.my_atom = vent R.add_reagent(pick(gunk), 50) diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 471f82c1511..d412d604ec2 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -38,8 +38,8 @@ if(!l_hand && has_left_hand()) W.forceMove(src) //TODO: move to equipped? l_hand = W - W.layer = 20 //TODO: move to equipped? - W.plane = HUD_PLANE //TODO: move to equipped? + W.layer = ABOVE_HUD_LAYER //TODO: move to equipped? + W.plane = ABOVE_HUD_PLANE //TODO: move to equipped? W.equipped(src,slot_l_hand) if(pulling == W) stop_pulling() @@ -54,8 +54,8 @@ if(!r_hand && has_right_hand()) W.forceMove(src) r_hand = W - W.layer = 20 - W.plane = HUD_PLANE + W.layer = ABOVE_HUD_LAYER + W.plane = ABOVE_HUD_PLANE W.equipped(src,slot_r_hand) if(pulling == W) stop_pulling() diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 79b41e47cc3..69f898fb677 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -202,8 +202,8 @@ W.screen_loc = null W.loc = src W.equipped(src, slot) - W.layer = 20 - W.plane = HUD_PLANE + W.layer = ABOVE_HUD_LAYER + W.plane = ABOVE_HUD_PLANE switch(slot) if(slot_back) @@ -248,8 +248,8 @@ var/obj/item/clothing/ears/offear/O = new(W) O.loc = src r_ear = O - O.layer = 20 - O.plane = HUD_PLANE + O.layer = ABOVE_HUD_LAYER + O.plane = ABOVE_HUD_PLANE update_inv_ears(redraw_mob) if(slot_r_ear) r_ear = W @@ -257,8 +257,8 @@ var/obj/item/clothing/ears/offear/O = new(W) O.loc = src l_ear = O - O.layer = 20 - O.plane = HUD_PLANE + O.layer = ABOVE_HUD_LAYER + O.plane = ABOVE_HUD_PLANE update_inv_ears(redraw_mob) if(slot_glasses) glasses = W diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index 8eb8bb80763..7695145300e 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -55,24 +55,24 @@ if(!module_state_1) O.mouse_opacity = initial(O.mouse_opacity) module_state_1 = O - O.layer = 20 - O.plane = HUD_PLANE + O.layer = ABOVE_HUD_LAYER + O.plane = ABOVE_HUD_PLANE O.screen_loc = inv1.screen_loc contents += O set_actions(O) else if(!module_state_2) O.mouse_opacity = initial(O.mouse_opacity) module_state_2 = O - O.layer = 20 - O.plane = HUD_PLANE + O.layer = ABOVE_HUD_LAYER + O.plane = ABOVE_HUD_PLANE O.screen_loc = inv2.screen_loc contents += O set_actions(O) else if(!module_state_3) O.mouse_opacity = initial(O.mouse_opacity) module_state_3 = O - O.layer = 20 - O.plane = HUD_PLANE + O.layer = ABOVE_HUD_LAYER + O.plane = ABOVE_HUD_PLANE O.screen_loc = inv3.screen_loc contents += O set_actions(O) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index ae6a832f6ac..18bfe6998c3 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -114,7 +114,9 @@ var/list/robot_verbs_default = list( robot_modules_background = new() robot_modules_background.icon_state = "block" - robot_modules_background.layer = 19 //Objects that appear on screen are on layer 20, UI should be just below it. + robot_modules_background.layer = HUD_LAYER //Objects that appear on screen are on layer 20, UI should be just below it. + robot_modules_background.plane = HUD_PLANE + ident = rand(1, 999) rename_character(null, get_default_name()) update_icons() diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 02f15a59709..66fb417733b 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -534,8 +534,8 @@ W.forceMove(src) W.equipped(src, slot) - W.layer = 20 - W.plane = HUD_PLANE + W.layer = ABOVE_HUD_LAYER + W.plane = ABOVE_HUD_PLANE switch(slot) if(slot_collar) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index d5ca6b0b0f8..5deebd22ee9 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -334,15 +334,15 @@ else if(h_user.l_store == src) h_user.unEquip(src) B.loc = h_user - B.layer = 20 - B.plane = HUD_PLANE + B.layer = ABOVE_HUD_LAYER + B.plane = ABOVE_HUD_PLANE h_user.l_store = B h_user.update_inv_pockets() else if(h_user.r_store == src) h_user.unEquip(src) B.loc = h_user - B.layer = 20 - B.plane = HUD_PLANE + B.layer = ABOVE_HUD_LAYER + B.plane = ABOVE_HUD_PLANE h_user.r_store = B h_user.update_inv_pockets() else if(h_user.head == src) diff --git a/code/modules/reagents/chemistry/reagents/drugs.dm b/code/modules/reagents/chemistry/reagents/drugs.dm index 9d786dd0713..9e96ed5b56b 100644 --- a/code/modules/reagents/chemistry/reagents/drugs.dm +++ b/code/modules/reagents/chemistry/reagents/drugs.dm @@ -604,6 +604,32 @@ M.emote("laugh") return list(effect, update_flags) +/datum/reagent/rotatium //Rotatium. Fucks up your rotation and is hilarious + name = "Rotatium" + id = "rotatium" + description = "A constantly swirling, oddly colourful fluid. Causes the consumer's sense of direction and hand-eye coordination to become wild." + reagent_state = LIQUID + color = "#AC88CA" //RGB: 172, 136, 202 + metabolization_rate = 0.6 * REAGENTS_METABOLISM + taste_message = "spinning" + +/datum/reagent/rotatium/on_mob_life(mob/living/carbon/M) + if(M.hud_used) + if(current_cycle >= 20 && current_cycle % 20 == 0) + var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"]) + var/rotation = min(round(current_cycle / 20), 89) // By this point the player is probably puking and quitting anyway + for(var/whole_screen in screens) + animate(whole_screen, transform = matrix(rotation, MATRIX_ROTATE), time = 5, easing = QUAD_EASING, loop = -1) + animate(transform = matrix(-rotation, MATRIX_ROTATE), time = 5, easing = QUAD_EASING) + return ..() + +/datum/reagent/rotatium/on_mob_delete(mob/living/M) + if(M && M.hud_used) + var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"]) + for(var/whole_screen in screens) + animate(whole_screen, transform = matrix(), time = 5, easing = QUAD_EASING) + ..() + ////////////////////////////// // Synth-Drugs // ////////////////////////////// diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index ef002caa1ec..6413765c99c 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -680,7 +680,7 @@ dir = 0 // dir will contain dominant direction for junction pipes var/health = 10 // health points 0-10 armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100) - layer = 2.3 // slightly lower than wires and other pipes + layer = DISPOSAL_PIPE_LAYER // slightly lower than wires and other pipes var/base_icon_state // initial icon state on map // new pipe, set the icon_state as on map diff --git a/config/example/dbconfig.txt b/config/example/dbconfig.txt index 6ca1f0201e8..8b411db15e1 100644 --- a/config/example/dbconfig.txt +++ b/config/example/dbconfig.txt @@ -9,7 +9,7 @@ ## This value must be set to the version of the paradise schema in use. ## If this value does not match, the SQL database will not be loaded and an error will be generated. ## Roundstart will be delayed. -DB_VERSION 5 +DB_VERSION 6 ## Server the MySQL database can be found at. # Examples: localhost, 200.135.5.43, www.mysqldb.com, etc. diff --git a/paradise.dme b/paradise.dme index a2d44d00044..70ed496f033 100644 --- a/paradise.dme +++ b/paradise.dme @@ -143,6 +143,7 @@ #include "code\_onclick\hud\movable_screen_objects.dm" #include "code\_onclick\hud\other_mobs.dm" #include "code\_onclick\hud\picture_in_picture.dm" +#include "code\_onclick\hud\plane_master.dm" #include "code\_onclick\hud\radial.dm" #include "code\_onclick\hud\robot.dm" #include "code\_onclick\hud\screen_objects.dm" From f9d067e9e6e0b8d59297f2f13ba870d557d77d1b Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Sun, 21 Apr 2019 01:54:31 +0200 Subject: [PATCH 008/195] Remove rotatium from vent_clog and remove useless return --- code/ATMOSPHERICS/atmospherics.dm | 2 -- code/modules/events/vent_clog.dm | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index 64ae485a75d..aa6d2f2625c 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -68,8 +68,6 @@ GLOBAL_DATUM_INIT(pipe_icon_manager, /datum/pipe_icon_manager, new()) else plane = FLOOR_PLANE - return null - /obj/machinery/atmospherics/proc/update_pipe_image() pipe_image = image(src, loc, layer = ABOVE_HUD_LAYER, dir = dir) //the 20 puts it above Byond's darkness (not its opacity view) pipe_image.plane = HUD_PLANE diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index 64b27eef7eb..9b1588e1161 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -23,7 +23,7 @@ "atrazine","banana","charcoal","space_drugs","methamphetamine","holywater","ethanol","hot_coco","facid", "blood","morphine","ether","fluorine","mutadone","mutagen","hydrocodone","fuel", "haloperidol","lsd","syndicate_nanites","lipolicide","frostoil","salglu_solution","beepskysmash", - "omnizine", "amanitin", "neurotoxin", "synaptizine","rotatium") + "omnizine", "amanitin", "neurotoxin", "synaptizine") var/datum/reagents/R = new/datum/reagents(50) R.my_atom = vent R.add_reagent(pick(gunk), 50) From 64f8300c2d48bdbe7409fadb61f768886dd775d0 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Sun, 21 Apr 2019 18:11:10 +0200 Subject: [PATCH 009/195] Switch to preference toggle for ambient occlusion --- SQL/updates/5-6.sql | 4 ---- code/__DEFINES/misc.dm | 2 +- code/__DEFINES/preferences.dm | 4 ++-- code/_onclick/hud/plane_master.dm | 6 +++--- code/modules/client/preference/preferences.dm | 12 +++++------- code/modules/client/preference/preferences_mysql.dm | 6 +----- .../modules/client/preference/preferences_toggles.dm | 3 +-- code/modules/reagents/chemistry/reagents/drugs.dm | 4 ++-- config/example/dbconfig.txt | 2 +- 9 files changed, 16 insertions(+), 27 deletions(-) delete mode 100644 SQL/updates/5-6.sql diff --git a/SQL/updates/5-6.sql b/SQL/updates/5-6.sql deleted file mode 100644 index d2b7ed0d16e..00000000000 --- a/SQL/updates/5-6.sql +++ /dev/null @@ -1,4 +0,0 @@ -#Updating the SQL from version 5 to version 6. -Mark -#Adding new column to contain the atklog value. -ALTER TABLE `player` - ADD `ambientocclusion` smallint(4) DEFAULT '1' AFTER `atklog`; \ No newline at end of file diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 462191e49c3..106c1900a82 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -404,4 +404,4 @@ #define GHOST_ORBIT_PENTAGON "pentagon" // Filters -#define AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-2, size=4, border=4, color="#04080FAA") \ No newline at end of file +#define FILTER_AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-2, size=4, border=4, color="#04080FAA") \ No newline at end of file diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index aa3652046b5..1f2bc9d8240 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -29,10 +29,10 @@ #define UI_DARKMODE 131072 #define DISABLE_KARMA 262144 #define CHAT_NO_MENTORTICKETLOGS 524288 - #define TYPING_ONCE 1048576 +#define AMBIENT_OCCLUSION 2097152 -#define TOGGLES_DEFAULT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_LOOC|MEMBER_PUBLIC|DONATOR_PUBLIC) +#define TOGGLES_DEFAULT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_LOOC|MEMBER_PUBLIC|DONATOR_PUBLIC|AMBIENT_OCCLUSION) // Admin attack logs filter system, see /proc/add_attack_logs and /proc/msg_admin_attack #define ATKLOG_ALL 0 diff --git a/code/_onclick/hud/plane_master.dm b/code/_onclick/hud/plane_master.dm index f56400c7198..4d9d05856ae 100644 --- a/code/_onclick/hud/plane_master.dm +++ b/code/_onclick/hud/plane_master.dm @@ -29,6 +29,6 @@ blend_mode = BLEND_OVERLAY /obj/screen/plane_master/game_world/backdrop(mob/mymob) - filters -= AMBIENT_OCCLUSION - if(istype(mymob) && mymob.client && mymob.client.prefs && mymob.client.prefs.ambientocclusion) - filters += AMBIENT_OCCLUSION + filters -= FILTER_AMBIENT_OCCLUSION + if(istype(mymob) && mymob.client && mymob.client.prefs && (mymob.client.prefs.toggles & AMBIENT_OCCLUSION)) + filters += FILTER_AMBIENT_OCCLUSION diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index a90ced311a7..a810e7add6b 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -200,8 +200,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts var/list/gear = list() var/gear_tab = "General" - var/ambientocclusion = TRUE - /datum/preferences/New(client/C) parent = C b_type = pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+") @@ -454,7 +452,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts dat += "Donator Publicity: [(toggles & DONATOR_PUBLIC) ? "Public" : "Hidden"]
" dat += "Fancy NanoUI: [(nanoui_fancy) ? "Yes" : "No"]
" dat += "FPS: [clientfps]
" - dat += "Ambient Occlusion: [ambientocclusion ? "Enabled" : "Disabled"]
" + dat += "Ambient Occlusion: [toggles & AMBIENT_OCCLUSION ? "Enabled" : "Disabled"]
" dat += "Ghost Ears: [(toggles & CHAT_GHOSTEARS) ? "All Speech" : "Nearest Creatures"]
" dat += "Ghost Sight: [(toggles & CHAT_GHOSTSIGHT) ? "All Emotes" : "Nearest Creatures"]
" dat += "Ghost Radio: [(toggles & CHAT_GHOSTRADIO) ? "All Chatter" : "Nearest Speakers"]
" @@ -2068,12 +2066,12 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts current_tab = text2num(href_list["tab"]) if("ambientocclusion") - ambientocclusion = !ambientocclusion + toggles ^= AMBIENT_OCCLUSION if(parent && parent.screen && parent.screen.len) var/obj/screen/plane_master/game_world/PM = locate(/obj/screen/plane_master/game_world) in parent.screen - PM.filters -= AMBIENT_OCCLUSION - if(ambientocclusion) - PM.filters += AMBIENT_OCCLUSION + PM.filters -= FILTER_AMBIENT_OCCLUSION + if(toggles & AMBIENT_OCCLUSION) + PM.filters += FILTER_AMBIENT_OCCLUSION ShowChoices(user) return 1 diff --git a/code/modules/client/preference/preferences_mysql.dm b/code/modules/client/preference/preferences_mysql.dm index e004c812315..0628276ccbc 100644 --- a/code/modules/client/preference/preferences_mysql.dm +++ b/code/modules/client/preference/preferences_mysql.dm @@ -19,7 +19,6 @@ exp, clientfps, atklog, - ambientocclusion, FROM [format_table_name("player")] WHERE ckey='[C.ckey]'"} ) @@ -51,7 +50,6 @@ exp = query.item[16] clientfps = text2num(query.item[17]) atklog = text2num(query.item[18]) - ambientocclusion = text2num(query.item[19]) //Sanitize ooccolor = sanitize_hexcolor(ooccolor, initial(ooccolor)) @@ -71,7 +69,6 @@ exp = sanitize_text(exp, initial(exp)) clientfps = sanitize_integer(clientfps, 0, 1000, initial(clientfps)) atklog = sanitize_integer(atklog, 0, 100, initial(atklog)) - ambientocclusion = sanitize_integer(ambientocclusion, 0, 1, initial(ambientocclusion)) return 1 /datum/preferences/proc/save_preferences(client/C) @@ -101,8 +98,7 @@ windowflashing='[windowflashing]', ghost_anonsay='[ghost_anonsay]', clientfps='[clientfps]', - atklog='[atklog]', - ambientocclusion='[ambientocclusion]' + atklog='[atklog]' WHERE ckey='[C.ckey]'"} ) diff --git a/code/modules/client/preference/preferences_toggles.dm b/code/modules/client/preference/preferences_toggles.dm index 703de37468e..c4d7599d2de 100644 --- a/code/modules/client/preference/preferences_toggles.dm +++ b/code/modules/client/preference/preferences_toggles.dm @@ -230,7 +230,6 @@ to_chat(usr, "You have disabled karma gains.") else to_chat(usr, "You have enabled karma gains.") - return /client/verb/toggle_popup_limiter() set name = "Toggle Text Popup Limiter" @@ -242,4 +241,4 @@ to_chat(usr, "You have enabled text popup limiting.") else to_chat(usr, "You have disabled text popup limiting.") - return + diff --git a/code/modules/reagents/chemistry/reagents/drugs.dm b/code/modules/reagents/chemistry/reagents/drugs.dm index 9e96ed5b56b..c5b48c74d81 100644 --- a/code/modules/reagents/chemistry/reagents/drugs.dm +++ b/code/modules/reagents/chemistry/reagents/drugs.dm @@ -616,7 +616,7 @@ /datum/reagent/rotatium/on_mob_life(mob/living/carbon/M) if(M.hud_used) if(current_cycle >= 20 && current_cycle % 20 == 0) - var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"]) + var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"]) var/rotation = min(round(current_cycle / 20), 89) // By this point the player is probably puking and quitting anyway for(var/whole_screen in screens) animate(whole_screen, transform = matrix(rotation, MATRIX_ROTATE), time = 5, easing = QUAD_EASING, loop = -1) @@ -625,7 +625,7 @@ /datum/reagent/rotatium/on_mob_delete(mob/living/M) if(M && M.hud_used) - var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"]) + var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"]) for(var/whole_screen in screens) animate(whole_screen, transform = matrix(), time = 5, easing = QUAD_EASING) ..() diff --git a/config/example/dbconfig.txt b/config/example/dbconfig.txt index 8b411db15e1..6ca1f0201e8 100644 --- a/config/example/dbconfig.txt +++ b/config/example/dbconfig.txt @@ -9,7 +9,7 @@ ## This value must be set to the version of the paradise schema in use. ## If this value does not match, the SQL database will not be loaded and an error will be generated. ## Roundstart will be delayed. -DB_VERSION 6 +DB_VERSION 5 ## Server the MySQL database can be found at. # Examples: localhost, 200.135.5.43, www.mysqldb.com, etc. From e5033a927a839e15851aac833ccf74cefa4fc4c9 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 22 Apr 2019 00:55:54 +0200 Subject: [PATCH 010/195] Fix toggle sanization --- code/__DEFINES/preferences.dm | 2 ++ code/modules/client/preference/preferences_mysql.dm | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index 1f2bc9d8240..32433975e9e 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -32,6 +32,8 @@ #define TYPING_ONCE 1048576 #define AMBIENT_OCCLUSION 2097152 +#define TOGGLES_TOTAL 4194304 // If you add or remove a preference toggle above, make sure you update this define with the total value of the toggles combined. + #define TOGGLES_DEFAULT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_LOOC|MEMBER_PUBLIC|DONATOR_PUBLIC|AMBIENT_OCCLUSION) // Admin attack logs filter system, see /proc/add_attack_logs and /proc/msg_admin_attack diff --git a/code/modules/client/preference/preferences_mysql.dm b/code/modules/client/preference/preferences_mysql.dm index 0628276ccbc..3483a4c77d3 100644 --- a/code/modules/client/preference/preferences_mysql.dm +++ b/code/modules/client/preference/preferences_mysql.dm @@ -55,7 +55,7 @@ ooccolor = sanitize_hexcolor(ooccolor, initial(ooccolor)) UI_style = sanitize_inlist(UI_style, list("White", "Midnight"), initial(UI_style)) default_slot = sanitize_integer(default_slot, 1, max_save_slots, initial(default_slot)) - toggles = sanitize_integer(toggles, 0, 2097151, initial(toggles)) + toggles = sanitize_integer(toggles, 0, TOGGLES_TOTAL, initial(toggles)) sound = sanitize_integer(sound, 0, 65535, initial(sound)) UI_style_color = sanitize_hexcolor(UI_style_color, initial(UI_style_color)) UI_style_alpha = sanitize_integer(UI_style_alpha, 0, 255, initial(UI_style_alpha)) From bdd379754b772af20e1e7bf361f9dfff75397dd4 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 22 Apr 2019 01:12:51 +0200 Subject: [PATCH 011/195] Whelp, remove unused SQL changes --- SQL/paradise_schema.sql | 1 - SQL/paradise_schema_prefixed.sql | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql index e2c2230a74c..0379517190f 100644 --- a/SQL/paradise_schema.sql +++ b/SQL/paradise_schema.sql @@ -266,7 +266,6 @@ CREATE TABLE `player` ( `exp` mediumtext, `clientfps` smallint(4) DEFAULT '0', `atklog` smallint(4) DEFAULT '0', - `ambientocclusion` smallint(4) DEFAULT '1', PRIMARY KEY (`id`), UNIQUE KEY `ckey` (`ckey`) ) ENGINE=InnoDB AUTO_INCREMENT=32446 DEFAULT CHARSET=latin1; diff --git a/SQL/paradise_schema_prefixed.sql b/SQL/paradise_schema_prefixed.sql index 7ad83febaf4..ab4badc4281 100644 --- a/SQL/paradise_schema_prefixed.sql +++ b/SQL/paradise_schema_prefixed.sql @@ -264,8 +264,7 @@ CREATE TABLE `SS13_player` ( `ghost_anonsay` tinyint(1) NOT NULL DEFAULT '0', `exp` mediumtext, `clientfps` smallint(4) DEFAULT '0', - `atklog` smallint(4) DEFAULT '0', - `ambientocclusion` smallint(4) DEFAULT '1', + `atklog` smallint(4) DEFAULT '0' PRIMARY KEY (`id`), UNIQUE KEY `ckey` (`ckey`) ) ENGINE=InnoDB AUTO_INCREMENT=32446 DEFAULT CHARSET=latin1; From a3bd9e1bb4fcb42f5a870b957f27ea9116600c94 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 22 Apr 2019 01:35:34 +0200 Subject: [PATCH 012/195] Need to pay better attention --- SQL/paradise_schema_prefixed.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SQL/paradise_schema_prefixed.sql b/SQL/paradise_schema_prefixed.sql index ab4badc4281..e9a622cf037 100644 --- a/SQL/paradise_schema_prefixed.sql +++ b/SQL/paradise_schema_prefixed.sql @@ -264,7 +264,7 @@ CREATE TABLE `SS13_player` ( `ghost_anonsay` tinyint(1) NOT NULL DEFAULT '0', `exp` mediumtext, `clientfps` smallint(4) DEFAULT '0', - `atklog` smallint(4) DEFAULT '0' + `atklog` smallint(4) DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `ckey` (`ckey`) ) ENGINE=InnoDB AUTO_INCREMENT=32446 DEFAULT CHARSET=latin1; From affae890284605a106c2797ac420923e2e794dd3 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 22 Apr 2019 19:55:41 +0200 Subject: [PATCH 013/195] Attempt update to /tg/ lighting system --- code/__DEFINES/lighting.dm | 102 ++- code/_onclick/hud/fullscreen.dm | 47 +- code/_onclick/hud/plane_master.dm | 10 + code/controllers/Processes/lighting.dm | 98 --- code/controllers/subsystem/lighting.dm | 87 +++ code/game/area/Space Station 13 areas.dm | 3 + code/game/area/areas.dm | 56 +- code/game/objects/effects/misc.dm | 34 +- code/game/turfs/space/space.dm | 36 +- code/game/turfs/turf.dm | 27 +- code/modules/awaymissions/zvis.dm | 634 +++++++++--------- code/modules/lighting/__lighting_docs.dm | 2 +- code/modules/lighting/lighting_area.dm | 31 +- code/modules/lighting/lighting_atom.dm | 139 ++-- code/modules/lighting/lighting_corner.dm | 76 ++- code/modules/lighting/lighting_object.dm | 144 ++++ code/modules/lighting/lighting_overlay.dm | 89 --- code/modules/lighting/lighting_setup.dm | 23 +- code/modules/lighting/lighting_source.dm | 416 ++++++------ code/modules/lighting/lighting_turf.dm | 129 ++-- code/modules/lighting/~lighting_undefs.dm | 7 - .../living/simple_animal/hostile/statue.dm | 2 +- icons/effects/alphacolors.dmi | Bin 464 -> 633 bytes icons/effects/lighting_object.dmi | Bin 0 -> 1882 bytes icons/effects/lighting_overlay.dmi | Bin 5914 -> 0 bytes icons/effects/lighting_overlay.png | Bin 1480 -> 0 bytes paradise.dme | 5 +- 27 files changed, 1248 insertions(+), 949 deletions(-) delete mode 100644 code/controllers/Processes/lighting.dm create mode 100644 code/controllers/subsystem/lighting.dm create mode 100644 code/modules/lighting/lighting_object.dm delete mode 100644 code/modules/lighting/lighting_overlay.dm delete mode 100644 code/modules/lighting/~lighting_undefs.dm create mode 100644 icons/effects/lighting_object.dmi delete mode 100644 icons/effects/lighting_overlay.dmi delete mode 100644 icons/effects/lighting_overlay.png diff --git a/code/__DEFINES/lighting.dm b/code/__DEFINES/lighting.dm index 3db7c467c24..37203792f76 100644 --- a/code/__DEFINES/lighting.dm +++ b/code/__DEFINES/lighting.dm @@ -1,42 +1,82 @@ -#define LIGHTING_FALLOFF 1 // type of falloff to use for lighting; 1 for circular, 2 for square -#define LIGHTING_LAMBERTIAN 0 // use lambertian shading for light sources -#define LIGHTING_HEIGHT 1 // height off the ground of light sources on the pseudo-z-axis, you should probably leave this alone +//Bay lighting engine shit, not in /code/modules/lighting because BYOND is being shit about it +#define LIGHTING_INTERVAL 5 // frequency, in 1/10ths of a second, of the lighting process -#define LIGHTING_ICON 'icons/effects/lighting_overlay.dmi' // icon used for lighting shading effects +#define MINIMUM_USEFUL_LIGHT_RANGE 1.4 -#define LIGHTING_ROUND_VALUE (1 / 128) //Value used to round lumcounts, values smaller than 1/255 don't matter (if they do, thanks sinking points), greater values will make lighting less precise, but in turn increase performance, VERY SLIGHTLY. +#define LIGHTING_FALLOFF 1 // type of falloff to use for lighting; 1 for circular, 2 for square +#define LIGHTING_LAMBERTIAN 0 // use lambertian shading for light sources +#define LIGHTING_HEIGHT 1 // height off the ground of light sources on the pseudo-z-axis, you should probably leave this alone +#define LIGHTING_ROUND_VALUE (1 / 64) //Value used to round lumcounts, values smaller than 1/129 don't matter (if they do, thanks sinking points), greater values will make lighting less precise, but in turn increase performance, VERY SLIGHTLY. -#define LIGHTING_SOFT_THRESHOLD 0.05 // If the max of the lighting lumcounts of each spectrum drops below this, disable luminosity on the lighting overlays. +#define LIGHTING_ICON 'icons/effects/lighting_object.dmi' // icon used for lighting shading effects + +// If the max of the lighting lumcounts of each spectrum drops below this, disable luminosity on the lighting objects. +// Set to zero to disable soft lighting. Luminosity changes then work if it's lit at all. +#define LIGHTING_SOFT_THRESHOLD 0 // If I were you I'd leave this alone. #define LIGHTING_BASE_MATRIX \ list \ ( \ - LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \ - LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \ - LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \ - LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \ + 1, 1, 1, 0, \ + 1, 1, 1, 0, \ + 1, 1, 1, 0, \ + 1, 1, 1, 0, \ 0, 0, 0, 1 \ ) \ -// Helpers so we can (more easily) control the colour matrices. -#define CL_MATRIX_RR 1 -#define CL_MATRIX_RG 2 -#define CL_MATRIX_RB 3 -#define CL_MATRIX_RA 4 -#define CL_MATRIX_GR 5 -#define CL_MATRIX_GG 6 -#define CL_MATRIX_GB 7 -#define CL_MATRIX_GA 8 -#define CL_MATRIX_BR 9 -#define CL_MATRIX_BG 10 -#define CL_MATRIX_BB 11 -#define CL_MATRIX_BA 12 -#define CL_MATRIX_AR 13 -#define CL_MATRIX_AG 14 -#define CL_MATRIX_AB 15 -#define CL_MATRIX_AA 16 -#define CL_MATRIX_CR 17 -#define CL_MATRIX_CG 18 -#define CL_MATRIX_CB 19 -#define CL_MATRIX_CA 20 \ No newline at end of file + +//Some defines to generalise colours used in lighting. +//Important note on colors. Colors can end up significantly different from the basic html picture, especially when saturated +#define LIGHT_COLOR_WHITE "#FFFFFF" +#define LIGHT_COLOR_RED "#FA8282" //Warm but extremely diluted red. rgb(250, 130, 130) +#define LIGHT_COLOR_GREEN "#64C864" //Bright but quickly dissipating neon green. rgb(100, 200, 100) +#define LIGHT_COLOR_BLUE "#6496FA" //Cold, diluted blue. rgb(100, 150, 250) + +#define LIGHT_COLOR_BLUEGREEN "#7DE1AF" //Light blueish green. rgb(125, 225, 175) +#define LIGHT_COLOR_CYAN "#7DE1E1" //Diluted cyan. rgb(125, 225, 225) +#define LIGHT_COLOR_LIGHT_CYAN "#40CEFF" //More-saturated cyan. rgb(64, 206, 255) +#define LIGHT_COLOR_DARK_BLUE "#6496FA" //Saturated blue. rgb(51, 117, 248) +#define LIGHT_COLOR_PINK "#E17DE1" //Diluted, mid-warmth pink. rgb(225, 125, 225) +#define LIGHT_COLOR_YELLOW "#E1E17D" //Dimmed yellow, leaning kaki. rgb(225, 225, 125) +#define LIGHT_COLOR_BROWN "#966432" //Clear brown, mostly dim. rgb(150, 100, 50) +#define LIGHT_COLOR_ORANGE "#FA9632" //Mostly pure orange. rgb(250, 150, 50) +#define LIGHT_COLOR_PURPLE "#952CF4" //Light Purple. rgb(149, 44, 244) +#define LIGHT_COLOR_LAVENDER "#9B51FF" //Less-saturated light purple. rgb(155, 81, 255) + +#define LIGHT_COLOR_HOLY_MAGIC "#FFF743" //slightly desaturated bright yellow. +#define LIGHT_COLOR_BLOOD_MAGIC "#D00000" //deep crimson + +//These ones aren't a direct colour like the ones above, because nothing would fit +#define LIGHT_COLOR_FIRE "#FAA019" //Warm orange color, leaning strongly towards yellow. rgb(250, 160, 25) +#define LIGHT_COLOR_LAVA "#C48A18" //Very warm yellow, leaning slightly towards orange. rgb(196, 138, 24) +#define LIGHT_COLOR_FLARE "#FA644B" //Bright, non-saturated red. Leaning slightly towards pink for visibility. rgb(250, 100, 75) +#define LIGHT_COLOR_SLIME_LAMP "#AFC84B" //Weird color, between yellow and green, very slimy. rgb(175, 200, 75) +#define LIGHT_COLOR_TUNGSTEN "#FAE1AF" //Extremely diluted yellow, close to skin color (for some reason). rgb(250, 225, 175) +#define LIGHT_COLOR_HALOGEN "#F0FAFA" //Barely visible cyan-ish hue, as the doctor prescribed. rgb(240, 250, 250) + +#define LIGHT_RANGE_FIRE 3 //How many tiles standard fires glow. + +#define LIGHTING_PLANE_ALPHA_VISIBLE 255 +#define LIGHTING_PLANE_ALPHA_NV_TRAIT 245 +#define LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE 192 +#define LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE 128 //For lighting alpha, small amounts lead to big changes. even at 128 its hard to figure out what is dark and what is light, at 64 you almost can't even tell. +#define LIGHTING_PLANE_ALPHA_INVISIBLE 0 + +//lighting area defines +#define DYNAMIC_LIGHTING_DISABLED 0 //dynamic lighting disabled (area stays at full brightness) +#define DYNAMIC_LIGHTING_ENABLED 1 //dynamic lighting enabled +#define DYNAMIC_LIGHTING_FORCED 2 //dynamic lighting enabled even if the area doesn't require power +#define DYNAMIC_LIGHTING_IFSTARLIGHT 3 //dynamic lighting enabled only if starlight is. +#define IS_DYNAMIC_LIGHTING(A) A.dynamic_lighting + + +//code assumes higher numbers override lower numbers. +#define LIGHTING_NO_UPDATE 0 +#define LIGHTING_VIS_UPDATE 1 +#define LIGHTING_CHECK_UPDATE 2 +#define LIGHTING_FORCE_UPDATE 3 + +#define FLASH_LIGHT_DURATION 2 +#define FLASH_LIGHT_POWER 3 +#define FLASH_LIGHT_RANGE 3.8 \ No newline at end of file diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm index 4c9ff339052..82b56aaf1b7 100644 --- a/code/_onclick/hud/fullscreen.dm +++ b/code/_onclick/hud/fullscreen.dm @@ -17,7 +17,7 @@ screen.severity = severity screens[category] = screen - if(client) + if(client && screen.should_show_to(src)) client.screen += screen return screen @@ -45,9 +45,15 @@ clear_fullscreen(category) /datum/hud/proc/reload_fullscreen() - var/list/screens = mymob.screens - for(var/category in screens) - mymob.client.screen |= screens[category] + if(mymob.client) + var/obj/screen/fullscreen/screen + var/list/screens = mymob.screens + for(var/category in screens) + screen = screens[category] + if(screen.should_show_to(src)) + mymob.client.screen |= screen + else + mymob.client.screen -= screen /obj/screen/fullscreen icon = 'icons/mob/screen_full.dmi' @@ -57,6 +63,12 @@ plane = FULLSCREEN_PLANE mouse_opacity = MOUSE_OPACITY_TRANSPARENT var/severity = 0 + var/show_when_dead = FALSE + +/obj/screen/fullscreen/proc/should_show_to(mob/mymob) + if(!show_when_dead && mymob.stat == DEAD) + return FALSE + return TRUE /obj/screen/fullscreen/Destroy() severity = 0 @@ -101,6 +113,33 @@ screen_loc = "WEST,SOUTH to EAST,NORTH" icon_state = "druggy" +/obj/screen/fullscreen/lighting_backdrop + icon = 'icons/mob/screen_gen.dmi' + icon_state = "flash" + transform = matrix(200, 0, 0, 0, 200, 0) + plane = LIGHTING_PLANE + blend_mode = BLEND_OVERLAY + show_when_dead = TRUE + +//Provides darkness to the back of the lighting plane +/obj/screen/fullscreen/lighting_backdrop/lit + invisibility = INVISIBILITY_LIGHTING + layer = BACKGROUND_LAYER+21 + color = "#000" + show_when_dead = TRUE + +//Provides whiteness in case you don't see lights so everything is still visible +/obj/screen/fullscreen/lighting_backdrop/unlit + layer = BACKGROUND_LAYER+20 + show_when_dead = TRUE + +/obj/screen/fullscreen/see_through_darkness + icon_state = "nightvision" + plane = LIGHTING_PLANE + layer = LIGHTING_LAYER + blend_mode = BLEND_ADD + show_when_dead = TRUE + #undef FULLSCREEN_LAYER #undef BLIND_LAYER #undef CRIT_LAYER diff --git a/code/_onclick/hud/plane_master.dm b/code/_onclick/hud/plane_master.dm index 4d9d05856ae..aebc194c97e 100644 --- a/code/_onclick/hud/plane_master.dm +++ b/code/_onclick/hud/plane_master.dm @@ -32,3 +32,13 @@ filters -= FILTER_AMBIENT_OCCLUSION if(istype(mymob) && mymob.client && mymob.client.prefs && (mymob.client.prefs.toggles & AMBIENT_OCCLUSION)) filters += FILTER_AMBIENT_OCCLUSION + +/obj/screen/plane_master/lighting + name = "lighting plane master" + plane = LIGHTING_PLANE + blend_mode = BLEND_MULTIPLY + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + +/obj/screen/plane_master/lighting/backdrop(mob/mymob) + mymob.overlay_fullscreen("lighting_backdrop_lit", /obj/screen/fullscreen/lighting_backdrop/lit) + mymob.overlay_fullscreen("lighting_backdrop_unlit", /obj/screen/fullscreen/lighting_backdrop/unlit) \ No newline at end of file diff --git a/code/controllers/Processes/lighting.dm b/code/controllers/Processes/lighting.dm deleted file mode 100644 index d46cab1d19f..00000000000 --- a/code/controllers/Processes/lighting.dm +++ /dev/null @@ -1,98 +0,0 @@ -/var/lighting_overlays_initialised = FALSE - -/var/list/lighting_update_lights = list() // List of lighting sources queued for update. -/var/list/lighting_update_corners = list() // List of lighting corners queued for update. -/var/list/lighting_update_overlays = list() // List of lighting overlays queued for update. - -/var/list/lighting_update_lights_old = list() // List of lighting sources currently being updated. -/var/list/lighting_update_corners_old = list() // List of lighting corners currently being updated. -/var/list/lighting_update_overlays_old = list() // List of lighting overlays currently being updated. - - -/datum/controller/process/lighting - // Queues of update counts, waiting to be rolled into stats lists - var/list/stats_queues = list( - "Source" = list(), "Corner" = list(), "Overlay" = list()) - // Stats lists - var/list/stats_lists = list( - "Source" = list(), "Corner" = list(), "Overlay" = list()) - var/update_stats_every = (1 SECONDS) - var/next_stats_update = 0 - var/stat_updates_to_keep = 5 - -/datum/controller/process/lighting/setup() - name = "lighting" - - schedule_interval = 0 // run as fast as you possibly can - sleep_interval = 10 // Yield every 10% of a tick - defer_usage = 80 // Defer at 80% of a tick - create_all_lighting_overlays() - lighting_overlays_initialised = TRUE - - // Pre-process lighting once before the round starts. Wait 30 seconds so the away mission has time to load. - spawn(300) - doWork(1) - -/datum/controller/process/lighting/doWork(roundstart) - - lighting_update_lights_old = lighting_update_lights //We use a different list so any additions to the update lists during a delay from scheck() don't cause things to be cut from the list without being updated. - lighting_update_lights = list() - for(var/datum/light_source/L in lighting_update_lights_old) - - if(L.check() || L.destroyed || L.force_update) - L.remove_lum() - if(!L.destroyed) - L.apply_lum() - - else if(L.vis_update) //We smartly update only tiles that became (in) visible to use. - L.smart_vis_update() - - L.vis_update = FALSE - L.force_update = FALSE - L.needs_update = FALSE - - SCHECK - - lighting_update_corners_old = lighting_update_corners //Same as above. - lighting_update_corners = list() - for(var/A in lighting_update_corners_old) - var/datum/lighting_corner/C = A - - C.update_overlays() - - C.needs_update = FALSE - - SCHECK - - lighting_update_overlays_old = lighting_update_overlays //Same as above. - lighting_update_overlays = list() - - for(var/A in lighting_update_overlays_old) - var/atom/movable/lighting_overlay/O = A - O.update_overlay() - O.needs_update = 0 - SCHECK - - stats_queues["Source"] += lighting_update_lights_old.len - stats_queues["Corner"] += lighting_update_corners_old.len - stats_queues["Overlay"] += lighting_update_overlays_old.len - - if(next_stats_update <= world.time) - next_stats_update = world.time + update_stats_every - for(var/stat_name in stats_queues) - var/stat_sum = 0 - var/list/stats_queue = stats_queues[stat_name] - for(var/count in stats_queue) - stat_sum += count - stats_queue.Cut() - - var/list/stats_list = stats_lists[stat_name] - stats_list.Insert(1, stat_sum) - if(stats_list.len > stat_updates_to_keep) - stats_list.Cut(stats_list.len) - -/datum/controller/process/lighting/statProcess() - ..() - stat(null, "[total_lighting_sources] sources, [total_lighting_corners] corners, [total_lighting_overlays] overlays") - for(var/stat_type in stats_lists) - stat(null, "[stat_type] updates: [jointext(stats_lists[stat_type], " | ")]") diff --git a/code/controllers/subsystem/lighting.dm b/code/controllers/subsystem/lighting.dm new file mode 100644 index 00000000000..252f2dcb2c8 --- /dev/null +++ b/code/controllers/subsystem/lighting.dm @@ -0,0 +1,87 @@ +GLOBAL_LIST_EMPTY(lighting_update_lights) // List of lighting sources queued for update. +GLOBAL_LIST_EMPTY(lighting_update_corners) // List of lighting corners queued for update. +GLOBAL_LIST_EMPTY(lighting_update_objects) // List of lighting objects queued for update. + +SUBSYSTEM_DEF(lighting) + name = "Lighting" + wait = 2 + init_order = INIT_ORDER_LIGHTING + flags = SS_TICKER + +/datum/controller/subsystem/lighting/stat_entry() + ..("L:[GLOB.lighting_update_lights.len]|C:[GLOB.lighting_update_corners.len]|O:[GLOB.lighting_update_objects.len]") + +/datum/controller/subsystem/lighting/Initialize(timeofday) + if(!initialized) + if(config.starlight) + for(var/I in GLOB.all_areas) + var/area/A = I + if (A.dynamic_lighting == DYNAMIC_LIGHTING_IFSTARLIGHT) + A.luminosity = 0 + + create_all_lighting_objects() + initialized = TRUE + + fire(FALSE, TRUE) + + return ..() + +/datum/controller/subsystem/lighting/fire(resumed, init_tick_checks) + MC_SPLIT_TICK_INIT(3) + if(!init_tick_checks) + MC_SPLIT_TICK + var/i = 0 + for(i in 1 to GLOB.lighting_update_lights.len) + var/datum/light_source/L = GLOB.lighting_update_lights[i] + + L.update_corners() + + L.needs_update = LIGHTING_NO_UPDATE + + if(init_tick_checks) + CHECK_TICK + else if (MC_TICK_CHECK) + break + if(i) + GLOB.lighting_update_lights.Cut(1, i+1) + i = 0 + + if(!init_tick_checks) + MC_SPLIT_TICK + + for (i in 1 to GLOB.lighting_update_corners.len) + var/datum/lighting_corner/C = GLOB.lighting_update_corners[i] + + C.update_objects() + C.needs_update = FALSE + if(init_tick_checks) + CHECK_TICK + else if (MC_TICK_CHECK) + break + if (i) + GLOB.lighting_update_corners.Cut(1, i+1) + i = 0 + + + if(!init_tick_checks) + MC_SPLIT_TICK + + for (i in 1 to GLOB.lighting_update_objects.len) + var/atom/movable/lighting_object/O = GLOB.lighting_update_objects[i] + + if (QDELETED(O)) + continue + + O.update() + O.needs_update = FALSE + if(init_tick_checks) + CHECK_TICK + else if (MC_TICK_CHECK) + break + if (i) + GLOB.lighting_update_objects.Cut(1, i+1) + + +/datum/controller/subsystem/lighting/Recover() + initialized = SSlighting.initialized + ..() \ No newline at end of file diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 067223c0285..ad7824c4854 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -26,6 +26,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station icon = 'icons/turf/areas.dmi' icon_state = "unknown" layer = AREA_LAYER + plane = BLACKNESS_PLANE //Keeping this on the default plane, GAME_PLANE, will make area overlays fail to render on FLOOR_PLANE. luminosity = 0 mouse_opacity = MOUSE_OPACITY_TRANSPARENT invisibility = INVISIBILITY_LIGHTING @@ -128,6 +129,7 @@ var/list/ghostteleportlocs = list() valid_territory = FALSE outdoors = 1 ambientsounds = list('sound/ambience/ambispace.ogg','sound/music/title2.ogg','sound/music/space.ogg','sound/music/traitor.ogg') + dynamic_lighting = DYNAMIC_LIGHTING_IFSTARLIGHT /area/space/atmosalert() return @@ -1424,6 +1426,7 @@ var/list/ghostteleportlocs = list() requires_power = 0 dynamic_lighting = 0 valid_territory = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_IFSTARLIGHT /area/solar/auxport name = "\improper Fore Port Solar Array" diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 6f25d1b23aa..0bd54aa4530 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -16,38 +16,50 @@ // area from any other instances already present (meaning you can have // separate APCs, and so on) var/there_can_be_many = 0 - plane = BLACKNESS_PLANE //Keeping this on the default plane, GAME_PLANE, will make area overlays fail to render on FLOOR_PLANE. - /area/New() - ..() + + GLOB.all_areas += src + +/area/Initialize(mapload) icon_state = "" layer = AREA_LAYER uid = ++global_uid - GLOB.all_areas += src + map_name = name // Save the initial (the name set in the map) name of the area. - if(type == /area) // override defaults for space. TODO: make space areas of type /area/space rather than /area - requires_power = 1 - always_unpowered = 1 - dynamic_lighting = 1 - power_light = 0 - power_equip = 0 - power_environ = 0 -// lighting_state = 4 - //has_gravity = 0 // Space has gravity. Because.. because. + if(requires_power) + luminosity = 0 + else + power_light = TRUE + power_equip = TRUE + power_environ = TRUE - if(requires_power != 0) - power_light = 0 //rastaf0 - power_equip = 0 //rastaf0 - power_environ = 0 //rastaf0 + if(dynamic_lighting == DYNAMIC_LIGHTING_FORCED) + dynamic_lighting = DYNAMIC_LIGHTING_ENABLED + luminosity = 0 + else if(dynamic_lighting != DYNAMIC_LIGHTING_IFSTARLIGHT) + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED + if(dynamic_lighting == DYNAMIC_LIGHTING_IFSTARLIGHT) + dynamic_lighting = config.starlight ? DYNAMIC_LIGHTING_ENABLED : DYNAMIC_LIGHTING_DISABLED + + . = ..() blend_mode = BLEND_MULTIPLY // Putting this in the constructor so that it stops the icons being screwed up in the map editor. -/area/Initialize() - . = ..() + if(!IS_DYNAMIC_LIGHTING(src)) + add_overlay(/obj/effect/fullbright) + reg_in_areas_in_z() + + return INITIALIZE_HINT_LATELOAD + +/area/LateInitialize() + . = ..() + power_change() // all machines set to current power level, also updates lighting icon + +/area/proc/reg_in_areas_in_z() if(contents.len) var/list/areas_in_z = space_manager.areas_in_z var/z @@ -64,12 +76,6 @@ areas_in_z["[z]"] = list() areas_in_z["[z]"] += src - return INITIALIZE_HINT_LATELOAD - -/area/LateInitialize() - . = ..() - power_change() // all machines set to current power level, also updates lighting icon - /area/proc/get_cameras() var/list/cameras = list() for(var/obj/machinery/camera/C in src) diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm index 3ea1fc0c3d6..191f776d01c 100644 --- a/code/game/objects/effects/misc.dm +++ b/code/game/objects/effects/misc.dm @@ -92,4 +92,36 @@ name = "horrific experiment" desc = "Some sort of pod filled with blood and vicerea. You swear you can see it moving..." icon = 'icons/obj/cloning.dmi' - icon_state = "pod_g" \ No newline at end of file + icon_state = "pod_g" + + +//Makes a tile fully lit no matter what +/obj/effect/fullbright + icon = 'icons/effects/alphacolors.dmi' + icon_state = "white" + plane = LIGHTING_PLANE + layer = LIGHTING_LAYER + blend_mode = BLEND_ADD + + +/obj/effect/dummy/lighting_obj + name = "lighting fx obj" + desc = "Tell a coder if you're seeing this." + icon_state = "nothing" + light_color = "#FFFFFF" + light_range = MINIMUM_USEFUL_LIGHT_RANGE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + +/obj/effect/dummy/lighting_obj/Initialize(mapload, _color, _range, _power, _duration) + . = ..() + set_light(_range ? _range : light_range, _power ? _power : light_power, _color ? _color : light_color) + if(_duration) + QDEL_IN(src, _duration) + +/obj/effect/dummy/lighting_obj/moblight + name = "mob lighting fx" + +/obj/effect/dummy/lighting_obj/moblight/Initialize(mapload, _color, _range, _power, _duration) + . = ..() + if(!ismob(loc)) + return INITIALIZE_HINT_QDEL \ No newline at end of file diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index f007aebfff1..1c24c444512 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -2,13 +2,16 @@ icon = 'icons/turf/space.dmi' name = "\proper space" icon_state = "0" - dynamic_lighting = 0 - luminosity = 1 temperature = TCMB thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT heat_capacity = HEAT_CAPACITY_VACUUM + plane = PLANE_SPACE + layer = SPACE_LAYER + light_power = 0.25 + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED + var/destination_z var/destination_x var/destination_y @@ -18,10 +21,16 @@ if(!istype(src, /turf/space/transit)) icon_state = SPACE_ICON_STATE - if(update_starlight() && is_station_level(z)) - // before you ask: Yes, this is fucking stupid, but looping through turf/space in world is how you make the server freeze - // so I don't see a better way of doing this - LAZYADD(GLOB.station_level_space_turfs, src) + +/turf/space/Initialize(mapload) + var/area/A = loc + if(!IS_DYNAMIC_LIGHTING(src) && IS_DYNAMIC_LIGHTING(A)) + add_overlay(/obj/effect/fullbright) + + if (light_power && light_range) + update_light() + + return INITIALIZE_HINT_NORMAL /turf/space/Destroy(force) if(force) @@ -29,7 +38,6 @@ else return QDEL_HINT_LETMELIVE - /turf/space/BeforeChange() ..() var/datum/space_level/S = space_manager.get_zlev(z) @@ -44,14 +52,14 @@ S.apply_transition(src) /turf/space/proc/update_starlight() - if(!config.starlight) - return FALSE - if(locate(/turf/simulated) in orange(src,1)) - set_light(config.starlight) - return TRUE - else + if(config.starlight) + for(var/t in RANGE_TURFS(1,src)) //RANGE_TURFS is in code\__HELPERS\game.dm + if(isspaceturf(t)) + //let's NOT update this that much pls + continue + set_light(config.starlight) + return set_light(0) - return FALSE /turf/space/attackby(obj/item/C as obj, mob/user as mob, params) ..() diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 677357cf170..86f94ee37d2 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -41,6 +41,16 @@ if(smooth && ticker && ticker.current_state == GAME_STATE_PLAYING) queue_smooth(src) +/turf/Initialize(mapload) + . = ..() + + var/area/A = loc + if(!IS_DYNAMIC_LIGHTING(src) && IS_DYNAMIC_LIGHTING(A)) + add_overlay(/obj/effect/fullbright) + + if(light_power && light_range) + update_light() + /hook/startup/proc/smooth_world() var/watch = start_watch() log_startup_progress("Smoothing atoms...") @@ -177,7 +187,7 @@ var/old_opacity = opacity var/old_dynamic_lighting = dynamic_lighting var/old_affecting_lights = affecting_lights - var/old_lighting_overlay = lighting_overlay + var/old_lighting_object = lighting_object var/old_blueprint_data = blueprint_data var/old_obscured = obscured var/old_corners = corners @@ -196,18 +206,23 @@ recalc_atom_opacity() - if(lighting_overlays_initialised) - lighting_overlay = old_lighting_overlay + if(SSlighting.initialized) + recalc_atom_opacity() + lighting_object = old_lighting_object affecting_lights = old_affecting_lights corners = old_corners - if((old_opacity != opacity) || (dynamic_lighting != old_dynamic_lighting)) + if (old_opacity != opacity || dynamic_lighting != old_dynamic_lighting) reconsider_lights() - if(dynamic_lighting != old_dynamic_lighting) - if(dynamic_lighting) + + if (dynamic_lighting != old_dynamic_lighting) + if (IS_DYNAMIC_LIGHTING(src)) lighting_build_overlay() else lighting_clear_overlay() + for(var/turf/space/S in RANGE_TURFS(1, src)) //RANGE_TURFS is in code\__HELPERS\game.dm + S.update_starlight() + obscured = old_obscured return W diff --git a/code/modules/awaymissions/zvis.dm b/code/modules/awaymissions/zvis.dm index 03adaeda629..e6e8e610a4d 100644 --- a/code/modules/awaymissions/zvis.dm +++ b/code/modules/awaymissions/zvis.dm @@ -1,368 +1,368 @@ -/area/awaymission/upperlevel - name = "Open Space" - color = "#888" - dynamic_lighting = 0 - requires_power = 0 +// /area/awaymission/upperlevel +// name = "Open Space" +// color = "#888" +// dynamic_lighting = 0 +// requires_power = 0 -// Used by /turf/unsimulated/floor/upperlevel as a reference for where the other floor is -/obj/effect/levelref - name = "level reference" - icon = 'icons/mob/screen_gen.dmi' - icon_state = "x2" - invisibility = 101 +// // Used by /turf/unsimulated/floor/upperlevel as a reference for where the other floor is +// /obj/effect/levelref +// name = "level reference" +// icon = 'icons/mob/screen_gen.dmi' +// icon_state = "x2" +// invisibility = 101 - var/id = null - var/obj/effect/levelref/other = null - var/offset_x - var/offset_y - var/offset_z - var/global/list/levels[0] +// var/id = null +// var/obj/effect/levelref/other = null +// var/offset_x +// var/offset_y +// var/offset_z +// var/global/list/levels[0] -/obj/effect/levelref/New() - ..() - levels += src +// /obj/effect/levelref/New() +// ..() +// levels += src -/obj/effect/levelref/Initialize() - ..() - for(var/obj/effect/levelref/O in levels) - if(id == O.id && O != src) - other = O - update_offset() - O.other = src - O.update_offset() - for(var/turf/unsimulated/floor/upperlevel/U in get_area(loc)) - U.init(src) - return +// /obj/effect/levelref/Initialize() +// ..() +// for(var/obj/effect/levelref/O in levels) +// if(id == O.id && O != src) +// other = O +// update_offset() +// O.other = src +// O.update_offset() +// for(var/turf/unsimulated/floor/upperlevel/U in get_area(loc)) +// U.init(src) +// return -/obj/effect/levelref/Destroy() - levels -= src - return ..() +// /obj/effect/levelref/Destroy() +// levels -= src +// return ..() -/obj/effect/levelref/proc/update_offset() - offset_x = other.x - x - offset_y = other.y - y - offset_z = other.z - z +// /obj/effect/levelref/proc/update_offset() +// offset_x = other.x - x +// offset_y = other.y - y +// offset_z = other.z - z -// Used by /turf/unsimulated/floor/upperlevel and /obj/effect/view_portal/visual -// to know if the world changed on the remote side -/obj/effect/portal_sensor - invisibility = 101 - var/light_hash = -1 - var/triggered_this_tick = 0 - var/datum/owner // owner that receive signals - var/list/params[0] // what to send to the main object to indicate which sensor - var/trigger_limit = 5 // number of time we're allowed to trigger per ptick +// // Used by /turf/unsimulated/floor/upperlevel and /obj/effect/view_portal/visual +// // to know if the world changed on the remote side +// /obj/effect/portal_sensor +// invisibility = 101 +// var/light_hash = -1 +// var/triggered_this_tick = 0 +// var/datum/owner // owner that receive signals +// var/list/params[0] // what to send to the main object to indicate which sensor +// var/trigger_limit = 5 // number of time we're allowed to trigger per ptick -/obj/effect/portal_sensor/New(loc, o, ...) - ..() - owner = o - if(args.len >= 3) - params = args.Copy(3) - processing_objects += src - trigger() +// /obj/effect/portal_sensor/New(loc, o, ...) +// ..() +// owner = o +// if(args.len >= 3) +// params = args.Copy(3) +// processing_objects += src +// trigger() -/obj/effect/portal_sensor/Destroy() - processing_objects -= src - return ..() +// /obj/effect/portal_sensor/Destroy() +// processing_objects -= src +// return ..() -/obj/effect/portal_sensor/Crossed(A) - trigger() +// /obj/effect/portal_sensor/Crossed(A) +// trigger() -/obj/effect/portal_sensor/Uncrossed(A) - trigger() +// /obj/effect/portal_sensor/Uncrossed(A) +// trigger() -/obj/effect/portal_sensor/process() - check_light() - if(triggered_this_tick >= trigger_limit) - call(owner, "trigger")(arglist(params)) - triggered_this_tick = 0 +// /obj/effect/portal_sensor/process() +// check_light() +// if(triggered_this_tick >= trigger_limit) +// call(owner, "trigger")(arglist(params)) +// triggered_this_tick = 0 -/obj/effect/portal_sensor/proc/trigger() - triggered_this_tick++ - if(triggered_this_tick < trigger_limit) - call(owner, "trigger")(arglist(params)) +// /obj/effect/portal_sensor/proc/trigger() +// triggered_this_tick++ +// if(triggered_this_tick < trigger_limit) +// call(owner, "trigger")(arglist(params)) -/obj/effect/portal_sensor/proc/check_light() - var/turf/T = loc - if(istype(T) && T.lighting_overlay && !T.lighting_overlay.needs_update) - var/atom/movable/lighting_overlay/O = T.lighting_overlay - var/hash = O.lum_r + O.lum_g + O.lum_b - if(hash != light_hash) - light_hash = hash - trigger() - else - if(light_hash != -1) - light_hash = -1 - trigger() +// /obj/effect/portal_sensor/proc/check_light() +// var/turf/T = loc +// if(istype(T) && T.lighting_object && !T.lighting_object.needs_update) +// var/atom/movable/lighting_object/O = T.lighting_object +// var/hash = O.lum_r + O.lum_g + O.lum_b +// if(hash != light_hash) +// light_hash = hash +// trigger() +// else +// if(light_hash != -1) +// light_hash = -1 +// trigger() -// for second floor showing floor below -/turf/unsimulated/floor/upperlevel - icon = 'icons/turf/areas.dmi' - icon_state = "dark128" - layer = AREA_LAYER + 0.5 - appearance_flags = TILE_BOUND | KEEP_TOGETHER - var/turf/lower_turf - var/obj/effect/portal_sensor/sensor +// // for second floor showing floor below +// /turf/unsimulated/floor/upperlevel +// icon = 'icons/turf/areas.dmi' +// icon_state = "dark128" +// layer = AREA_LAYER + 0.5 +// appearance_flags = TILE_BOUND | KEEP_TOGETHER +// var/turf/lower_turf +// var/obj/effect/portal_sensor/sensor -/turf/unsimulated/floor/upperlevel/New() - ..() - var/obj/effect/levelref/R = locate() in get_area(src) - if(R && R.other) - init(R) +// /turf/unsimulated/floor/upperlevel/New() +// ..() +// var/obj/effect/levelref/R = locate() in get_area(src) +// if(R && R.other) +// init(R) -/turf/unsimulated/floor/upperlevel/Destroy() - QDEL_NULL(sensor) - return ..() +// /turf/unsimulated/floor/upperlevel/Destroy() +// QDEL_NULL(sensor) +// return ..() -/turf/unsimulated/floor/upperlevel/proc/init(var/obj/effect/levelref/R) - lower_turf = locate(x + R.offset_x, y + R.offset_y, z + R.offset_z) - if(lower_turf) - sensor = new(lower_turf, src) +// /turf/unsimulated/floor/upperlevel/proc/init(var/obj/effect/levelref/R) +// lower_turf = locate(x + R.offset_x, y + R.offset_y, z + R.offset_z) +// if(lower_turf) +// sensor = new(lower_turf, src) -/turf/unsimulated/floor/upperlevel/Entered(atom/movable/AM, atom/OL, ignoreRest = 0) - if(isliving(AM) || istype(AM, /obj)) - if(isliving(AM)) - var/mob/living/M = AM - M.emote("scream") - M.SpinAnimation(5, 1) - AM.forceMove(lower_turf) +// /turf/unsimulated/floor/upperlevel/Entered(atom/movable/AM, atom/OL, ignoreRest = 0) +// if(isliving(AM) || istype(AM, /obj)) +// if(isliving(AM)) +// var/mob/living/M = AM +// M.emote("scream") +// M.SpinAnimation(5, 1) +// AM.forceMove(lower_turf) -/turf/unsimulated/floor/upperlevel/attack_ghost(mob/user) - user.forceMove(lower_turf) +// /turf/unsimulated/floor/upperlevel/attack_ghost(mob/user) +// user.forceMove(lower_turf) -/turf/unsimulated/floor/upperlevel/proc/trigger() - name = lower_turf.name - desc = lower_turf.desc +// /turf/unsimulated/floor/upperlevel/proc/trigger() +// name = lower_turf.name +// desc = lower_turf.desc - // render each atom - underlays.Cut() - for(var/X in list(lower_turf) + lower_turf.contents) - var/atom/A = X - if(A && A.invisibility <= SEE_INVISIBLE_LIVING) - var/image/I = image(A, layer = AREA_LAYER + A.layer * 0.01, dir = A.dir) - I.pixel_x = A.pixel_x - I.pixel_y = A.pixel_y - underlays += I +// // render each atom +// underlays.Cut() +// for(var/X in list(lower_turf) + lower_turf.contents) +// var/atom/A = X +// if(A && A.invisibility <= SEE_INVISIBLE_LIVING) +// var/image/I = image(A, layer = AREA_LAYER + A.layer * 0.01, dir = A.dir) +// I.pixel_x = A.pixel_x +// I.pixel_y = A.pixel_y +// underlays += I -// remote end of narnia portal -/obj/effect/view_portal - name = "portal target" - icon = 'icons/mob/screen_gen.dmi' - icon_state = "x2" - invisibility = 101 - anchored = 1 +// // remote end of narnia portal +// /obj/effect/view_portal +// name = "portal target" +// icon = 'icons/mob/screen_gen.dmi' +// icon_state = "x2" +// invisibility = 101 +// anchored = 1 - var/id = null // id of other portal turf we connect to +// var/id = null // id of other portal turf we connect to - var/obj/effect/view_portal/other = null - var/global/list/portals[0] +// var/obj/effect/view_portal/other = null +// var/global/list/portals[0] -/obj/effect/view_portal/New() - ..() - GLOB.portals += src +// /obj/effect/view_portal/New() +// ..() +// GLOB.portals += src -/obj/effect/view_portal/Initialize() - ..() - if(id) - for(var/obj/effect/view_portal/O in GLOB.portals) - if(id == O.id && O != src && can_link(O)) - other = O - O.other = src - linkup() - O.linkup() - if(other) - return +// /obj/effect/view_portal/Initialize() +// ..() +// if(id) +// for(var/obj/effect/view_portal/O in GLOB.portals) +// if(id == O.id && O != src && can_link(O)) +// other = O +// O.other = src +// linkup() +// O.linkup() +// if(other) +// return -/obj/effect/view_portal/Destroy() - GLOB.portals -= src - return ..() +// /obj/effect/view_portal/Destroy() +// GLOB.portals -= src +// return ..() -/obj/effect/view_portal/proc/can_link(obj/effect/view_portal/P) - return P.type == /obj/effect/view_portal/visual && !P.other +// /obj/effect/view_portal/proc/can_link(obj/effect/view_portal/P) +// return P.type == /obj/effect/view_portal/visual && !P.other -/obj/effect/view_portal/proc/linkup() - // allow it to link to multiple visual nodes - other = null +// /obj/effect/view_portal/proc/linkup() +// // allow it to link to multiple visual nodes +// other = null -// near end of nania portal -/obj/effect/view_portal/visual - name = "???" - desc = "You'll have to get closer to clearly see what this is." +// // near end of nania portal +// /obj/effect/view_portal/visual +// name = "???" +// desc = "You'll have to get closer to clearly see what this is." - icon = 'icons/turf/floors.dmi' - icon_state = "loadingarea" - opacity = 1 - density = 1 - invisibility = 0 - appearance_flags = TILE_BOUND | KEEP_TOGETHER - var/dist = 6 // dist that we render out - var/radius = 3 // dist we render on other axis, in each direction - var/frustrum = 0 // if 1, get wider and wider at each step outward - var/teleport = 1 // should teleport? +// icon = 'icons/turf/floors.dmi' +// icon_state = "loadingarea" +// opacity = 1 +// density = 1 +// invisibility = 0 +// appearance_flags = TILE_BOUND | KEEP_TOGETHER +// var/dist = 6 // dist that we render out +// var/radius = 3 // dist we render on other axis, in each direction +// var/frustrum = 0 // if 1, get wider and wider at each step outward +// var/teleport = 1 // should teleport? - var/list/render_block - var/list/sensors[0] - var/list/tiles[0] +// var/list/render_block +// var/list/sensors[0] +// var/list/tiles[0] - var/list/near_render_block - var/turf/near_viewpoint +// var/list/near_render_block +// var/turf/near_viewpoint -/obj/effect/view_portal/visual/Destroy() - for(var/T in sensors) - qdel(sensors[T]) - sensors.Cut() - sensors = null - for(var/T in tiles) - qdel(tiles[T]) - tiles.Cut() - tiles = null - render_block = null - near_render_block = null - near_viewpoint = null - return ..() +// /obj/effect/view_portal/visual/Destroy() +// for(var/T in sensors) +// qdel(sensors[T]) +// sensors.Cut() +// sensors = null +// for(var/T in tiles) +// qdel(tiles[T]) +// tiles.Cut() +// tiles = null +// render_block = null +// near_render_block = null +// near_viewpoint = null +// return ..() -/obj/effect/view_portal/visual/can_link(obj/effect/view_portal/P) - return P.type == /obj/effect/view_portal +// /obj/effect/view_portal/visual/can_link(obj/effect/view_portal/P) +// return P.type == /obj/effect/view_portal -/obj/effect/view_portal/visual/linkup() - icon = null - icon_state = null - var/turf/Tloc = get_turf(loc) - if(Tloc) - Tloc.icon = null - Tloc.icon_state = null - Tloc.dynamic_lighting = 0 - layer = AREA_LAYER + 0.5 +// /obj/effect/view_portal/visual/linkup() +// icon = null +// icon_state = null +// var/turf/Tloc = get_turf(loc) +// if(Tloc) +// Tloc.icon = null +// Tloc.icon_state = null +// Tloc.dynamic_lighting = 0 +// layer = AREA_LAYER + 0.5 - // setup references - var/crossdir = angle2dir((dir2angle(dir) + 90) % 360) - near_viewpoint = get_step(get_turf(src), GetOppositeDir(dir)) +// // setup references +// var/crossdir = angle2dir((dir2angle(dir) + 90) % 360) +// near_viewpoint = get_step(get_turf(src), GetOppositeDir(dir)) - // setup far turfs - var/turf/T1 = get_turf(other) - var/turf/T2 = T1 +// // setup far turfs +// var/turf/T1 = get_turf(other) +// var/turf/T2 = T1 - for(var/i in 1 to radius) - T1 = get_step(T1, crossdir) - T2 = get_step(T2, GetOppositeDir(crossdir)) - if(frustrum) - // make a trapazoid, with length dist, short end radius*2 long, - // and 45 degree angles - render_block = block(T1, T2) - for(var/i in 1 to dist) - T1 = get_step(get_step(T1, dir), crossdir) - T2 = get_step(get_step(T2, dir), GetOppositeDir(crossdir)) - render_block += block(T1, T2) - else - // else make a box dist x radius*2 - for(var/i in 1 to dist) - T2 = get_step(T2, dir) - render_block = block(T1, T2) - for(var/turf/T in render_block) - sensors[T] = new /obj/effect/portal_sensor(T, src, 0, T) +// for(var/i in 1 to radius) +// T1 = get_step(T1, crossdir) +// T2 = get_step(T2, GetOppositeDir(crossdir)) +// if(frustrum) +// // make a trapazoid, with length dist, short end radius*2 long, +// // and 45 degree angles +// render_block = block(T1, T2) +// for(var/i in 1 to dist) +// T1 = get_step(get_step(T1, dir), crossdir) +// T2 = get_step(get_step(T2, dir), GetOppositeDir(crossdir)) +// render_block += block(T1, T2) +// else +// // else make a box dist x radius*2 +// for(var/i in 1 to dist) +// T2 = get_step(T2, dir) +// render_block = block(T1, T2) +// for(var/turf/T in render_block) +// sensors[T] = new /obj/effect/portal_sensor(T, src, 0, T) -// setup turfs on this side of the portal to cover the map streaming -// has to be done later for view() to be correct (so it happens when the walls exist) -/obj/effect/view_portal/visual/proc/setup_near() - var/nvs = dir & (EAST|WEST) ? near_viewpoint.x - x : near_viewpoint.y - y - if(nvs) - nvs = SIGN(nvs) - // need a mob for view() to work correctly - var/mob/M = new(near_viewpoint) - M.see_invisible = SEE_INVISIBLE_LIVING - near_render_block = view(M, world.view) - qdel(M) - for(var/A in near_render_block) - var/turf/T = A - if(istype(T)) - var/ts = dir & (EAST|WEST) ? T.x - x : T.y - y - if(ts) - ts = SIGN(ts) - if(nvs == ts) - sensors[T] = new /obj/effect/portal_sensor(T, src, 1, T) - else - near_render_block -= T - else - near_render_block -= T +// // setup turfs on this side of the portal to cover the map streaming +// // has to be done later for view() to be correct (so it happens when the walls exist) +// /obj/effect/view_portal/visual/proc/setup_near() +// var/nvs = dir & (EAST|WEST) ? near_viewpoint.x - x : near_viewpoint.y - y +// if(nvs) +// nvs = SIGN(nvs) +// // need a mob for view() to work correctly +// var/mob/M = new(near_viewpoint) +// M.see_invisible = SEE_INVISIBLE_LIVING +// near_render_block = view(M, world.view) +// qdel(M) +// for(var/A in near_render_block) +// var/turf/T = A +// if(istype(T)) +// var/ts = dir & (EAST|WEST) ? T.x - x : T.y - y +// if(ts) +// ts = SIGN(ts) +// if(nvs == ts) +// sensors[T] = new /obj/effect/portal_sensor(T, src, 1, T) +// else +// near_render_block -= T +// else +// near_render_block -= T -/obj/effect/view_portal/visual/Bumped(atom/movable/thing) - if((istype(thing, /obj) || isliving(thing)) && other && teleport) - if(!near_render_block) - setup_near() +// /obj/effect/view_portal/visual/Bumped(atom/movable/thing) +// if((istype(thing, /obj) || isliving(thing)) && other && teleport) +// if(!near_render_block) +// setup_near() - var/mob/living/M = thing - // make the person glide onto the dest, giving a smooth transition - var/ox = thing.x - x - var/oy = thing.y - y - if(istype(M) && M.client) - M.notransform = 1 - // cover up client-side map loading - M.screen_loc = "CENTER" - M.client.screen += M - for(var/T in tiles) - M.client.screen += tiles[T] +// var/mob/living/M = thing +// // make the person glide onto the dest, giving a smooth transition +// var/ox = thing.x - x +// var/oy = thing.y - y +// if(istype(M) && M.client) +// M.notransform = 1 +// // cover up client-side map loading +// M.screen_loc = "CENTER" +// M.client.screen += M +// for(var/T in tiles) +// M.client.screen += tiles[T] - // wait a tick for the screen to replicate across network - // or this whole exercise of covering the transition is pointless - spawn(1) - thing.forceMove(locate(other.x + ox, other.y + oy, other.z)) - sleep(1) - if(istype(M) && M.client) - for(var/T in tiles) - M.client.screen -= tiles[T] - M.client.screen -= M - M.screen_loc = initial(M.screen_loc) - thing.forceMove(get_turf(other.loc)) - if(istype(M) && M.client) - M.notransform = 0 +// // wait a tick for the screen to replicate across network +// // or this whole exercise of covering the transition is pointless +// spawn(1) +// thing.forceMove(locate(other.x + ox, other.y + oy, other.z)) +// sleep(1) +// if(istype(M) && M.client) +// for(var/T in tiles) +// M.client.screen -= tiles[T] +// M.client.screen -= M +// M.screen_loc = initial(M.screen_loc) +// thing.forceMove(get_turf(other.loc)) +// if(istype(M) && M.client) +// M.notransform = 0 -/obj/effect/view_portal/visual/attack_ghost(mob/user) - user.forceMove(get_turf(other.loc)) +// /obj/effect/view_portal/visual/attack_ghost(mob/user) +// user.forceMove(get_turf(other.loc)) -/obj/effect/view_portal/visual/proc/trigger(near, turf/T) - var/obj/effect/view_portal_dummy/D = tiles[T] - if(D) - D.overlays.Cut() - else - D = new(src, near, T) - tiles[T] = D +// /obj/effect/view_portal/visual/proc/trigger(near, turf/T) +// var/obj/effect/view_portal_dummy/D = tiles[T] +// if(D) +// D.overlays.Cut() +// else +// D = new(src, near, T) +// tiles[T] = D - // render atoms to overlays of a dummy object - if(D.name != T.name) - D.name = T.name - D.desc = T.desc - for(var/AX in list(T) + T.contents) - var/atom/A = AX - if(A && A.invisibility <= SEE_INVISIBLE_LIVING) - var/image/I = image(A, layer = D.layer + A.layer * 0.01, dir = A.dir) - I.pixel_x = A.pixel_x - I.pixel_y = A.pixel_y - D.overlays += I +// // render atoms to overlays of a dummy object +// if(D.name != T.name) +// D.name = T.name +// D.desc = T.desc +// for(var/AX in list(T) + T.contents) +// var/atom/A = AX +// if(A && A.invisibility <= SEE_INVISIBLE_LIVING) +// var/image/I = image(A, layer = D.layer + A.layer * 0.01, dir = A.dir) +// I.pixel_x = A.pixel_x +// I.pixel_y = A.pixel_y +// D.overlays += I -// tile of rendered other side for narnia portal -/obj/effect/view_portal_dummy - var/obj/effect/view_portal/visual/owner +// // tile of rendered other side for narnia portal +// /obj/effect/view_portal_dummy +// var/obj/effect/view_portal/visual/owner -/obj/effect/view_portal_dummy/New(obj/effect/view_portal/visual/V, near, turf/T) - ..() - if(!near) - loc = V.loc - owner = V +// /obj/effect/view_portal_dummy/New(obj/effect/view_portal/visual/V, near, turf/T) +// ..() +// if(!near) +// loc = V.loc +// owner = V - var/ox - var/oy - if(near) - ox = (T.x - V.near_viewpoint.x) - oy = (T.y - V.near_viewpoint.y) - layer = AREA_LAYER + 0.4 - else - ox = T.x - V.other.x + V.x - V.near_viewpoint.x - oy = T.y - V.other.y + V.y - V.near_viewpoint.y - pixel_x = 32 * (T.x - V.other.x) - pixel_y = 32 * (T.y - V.other.y) - layer = AREA_LAYER + 0.5 - if(abs(ox) <= world.view && abs(oy) <= world.view) - screen_loc = "CENTER[ox >= 0 ? "+" : ""][ox],CENTER[oy >= 0 ? "+" : ""][oy]" +// var/ox +// var/oy +// if(near) +// ox = (T.x - V.near_viewpoint.x) +// oy = (T.y - V.near_viewpoint.y) +// layer = AREA_LAYER + 0.4 +// else +// ox = T.x - V.other.x + V.x - V.near_viewpoint.x +// oy = T.y - V.other.y + V.y - V.near_viewpoint.y +// pixel_x = 32 * (T.x - V.other.x) +// pixel_y = 32 * (T.y - V.other.y) +// layer = AREA_LAYER + 0.5 +// if(abs(ox) <= world.view && abs(oy) <= world.view) +// screen_loc = "CENTER[ox >= 0 ? "+" : ""][ox],CENTER[oy >= 0 ? "+" : ""][oy]" -/obj/effect/view_portal_dummy/attack_ghost(mob/user) - owner.attack_ghost(user) +// /obj/effect/view_portal_dummy/attack_ghost(mob/user) +// owner.attack_ghost(user) diff --git a/code/modules/lighting/__lighting_docs.dm b/code/modules/lighting/__lighting_docs.dm index 8ef93935e9c..18041989910 100644 --- a/code/modules/lighting/__lighting_docs.dm +++ b/code/modules/lighting/__lighting_docs.dm @@ -54,7 +54,7 @@ turf: (lighting_turf.dm) - Create lighting overlays for this turf -atom/movable/lighting_overlay: (lighting_overlay.dm) +atom/movable/lighting_object: (lighting_object.dm) - var/lum_r, var/lum_g, var/lum_b; lumcounts of each colour - var/needs_update; set on update_lumcount, checked by lighting process diff --git a/code/modules/lighting/lighting_area.dm b/code/modules/lighting/lighting_area.dm index 92923e6b0d5..58e9a4337a5 100644 --- a/code/modules/lighting/lighting_area.dm +++ b/code/modules/lighting/lighting_area.dm @@ -1,9 +1,30 @@ /area luminosity = TRUE - var/dynamic_lighting = TRUE + var/dynamic_lighting = DYNAMIC_LIGHTING_ENABLED -/area/New() - . = ..() +/area/proc/set_dynamic_lighting(var/new_dynamic_lighting = DYNAMIC_LIGHTING_ENABLED) + if (new_dynamic_lighting == dynamic_lighting) + return FALSE - if(dynamic_lighting) - luminosity = FALSE \ No newline at end of file + dynamic_lighting = new_dynamic_lighting + + if (IS_DYNAMIC_LIGHTING(src)) + cut_overlay(/obj/effect/fullbright) + for (var/turf/T in src) + if (IS_DYNAMIC_LIGHTING(T)) + T.lighting_build_overlay() + + else + add_overlay(/obj/effect/fullbright) + for (var/turf/T in src) + if (T.lighting_object) + T.lighting_clear_overlay() + + return TRUE + +/area/vv_edit_var(var_name, var_value) + switch(var_name) + if("dynamic_lighting") + set_dynamic_lighting(var_value) + return TRUE + return ..() \ No newline at end of file diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm index 646fe0ba15d..85c857ab804 100644 --- a/code/modules/lighting/lighting_atom.dm +++ b/code/modules/lighting/lighting_atom.dm @@ -1,101 +1,134 @@ + /atom - var/light_power = 1 // intensity of the light - var/light_range = 0 // range in tiles of the light - var/light_color // Hexadecimal RGB string representing the colour of the light + var/light_power = 1 // Intensity of the light. + var/light_range = 0 // Range in tiles of the light. + var/light_color // Hexadecimal RGB string representing the colour of the light. - var/datum/light_source/light - var/list/light_sources + var/tmp/datum/light_source/light // Our light source. Don't fuck with this directly unless you have a good reason! + var/tmp/list/light_sources // Any light sources that are "inside" of us, for example, if src here was a mob that's carrying a flashlight, that flashlight's light source would be part of this list. -// Nonsensical value for l_color default, so we can detect if it gets set to null. +// The proc you should always use to set the light of this atom. +// Nonesensical value for l_color default, so we can detect if it gets set to null. #define NONSENSICAL_VALUE -99999 -/atom/proc/set_light(l_range, l_power, l_color = NONSENSICAL_VALUE) - if(l_power != null) +/atom/proc/set_light(var/l_range, var/l_power, var/l_color = NONSENSICAL_VALUE) + if(l_range > 0 && l_range < MINIMUM_USEFUL_LIGHT_RANGE) + l_range = MINIMUM_USEFUL_LIGHT_RANGE //Brings the range up to 1.4, which is just barely brighter than the soft lighting that surrounds players. + if (l_power != null) light_power = l_power - if(l_range != null) + if (l_range != null) light_range = l_range - if(l_color != NONSENSICAL_VALUE) + if (l_color != NONSENSICAL_VALUE) light_color = l_color + SEND_SIGNAL(src, COMSIG_ATOM_SET_LIGHT, l_range, l_power, l_color) + update_light() #undef NONSENSICAL_VALUE +// Will update the light (duh). +// Creates or destroys it if needed, makes it update values, makes sure it's got the correct source turf... /atom/proc/update_light() set waitfor = FALSE + if (QDELETED(src)) + return - if(!light_power || !light_range) - if(light) - light.destroy() - light = null + if (!light_power || !light_range) // We won't emit light anyways, destroy the light source. + QDEL_NULL(light) else - if(!istype(loc, /atom/movable)) + if (!ismovableatom(loc)) // We choose what atom should be the top atom of the light here. . = src else . = loc - if(light) + if (light) // Update the light or create it if it does not exist. light.update(.) else - light = new /datum/light_source(src, .) + light = new/datum/light_source(src, .) /atom/proc/extinguish_light() return -/atom/Destroy() - if(light) - light.destroy() - light = null - return ..() - +// If we have opacity, make sure to tell (potentially) affected light sources. /atom/movable/Destroy() var/turf/T = loc - if(opacity && istype(T)) - T.reconsider_lights() - return ..() - -/atom/movable/Move() - var/turf/old_loc = loc . = ..() + if (opacity && istype(T)) + var/old_has_opaque_atom = T.has_opaque_atom + T.recalc_atom_opacity() + if (old_has_opaque_atom != T.has_opaque_atom) + T.reconsider_lights() - if(loc != old_loc) - for(var/datum/light_source/L in light_sources) - L.source_atom.update_light() - - var/turf/new_loc = loc - if(istype(old_loc) && opacity) - old_loc.reconsider_lights() - - if(istype(new_loc) && opacity) - new_loc.reconsider_lights() - -/atom/proc/set_opacity(new_opacity) - if(new_opacity == opacity) +// Should always be used to change the opacity of an atom. +// It notifies (potentially) affected light sources so they can update (if needed). +/atom/proc/set_opacity(var/new_opacity) + if (new_opacity == opacity) return opacity = new_opacity var/turf/T = loc - if(!isturf(T)) + if (!isturf(T)) return - if(new_opacity == TRUE) + if (new_opacity == TRUE) T.has_opaque_atom = TRUE T.reconsider_lights() else var/old_has_opaque_atom = T.has_opaque_atom T.recalc_atom_opacity() - if(old_has_opaque_atom != T.has_opaque_atom) + if (old_has_opaque_atom != T.has_opaque_atom) T.reconsider_lights() -/obj/item/equipped() - . = ..() - update_light() -/obj/item/pickup() +/atom/movable/Moved(atom/OldLoc, Dir) . = ..() - update_light() + var/datum/light_source/L + var/thing + for (thing in light_sources) // Cycle through the light sources on this atom and tell them to update. + L = thing + L.source_atom.update_light() -/obj/item/dropped() - . = ..() - update_light() +/atom/vv_edit_var(var_name, var_value) + switch (var_name) + if ("light_range") + set_light(l_range=var_value) + return TRUE + + if ("light_power") + set_light(l_power=var_value) + return TRUE + + if ("light_color") + set_light(l_color=var_value) + return TRUE + + return ..() + + +/atom/proc/flash_lighting_fx(_range = FLASH_LIGHT_RANGE, _power = FLASH_LIGHT_POWER, _color = LIGHT_COLOR_WHITE, _duration = FLASH_LIGHT_DURATION, _reset_lighting = TRUE) + return + +/turf/flash_lighting_fx(_range = FLASH_LIGHT_RANGE, _power = FLASH_LIGHT_POWER, _color = LIGHT_COLOR_WHITE, _duration = FLASH_LIGHT_DURATION, _reset_lighting = TRUE) + if(!_duration) + stack_trace("Lighting FX obj created on a turf without a duration") + new /obj/effect/dummy/lighting_obj (src, _color, _range, _power, _duration) + +/obj/flash_lighting_fx(_range = FLASH_LIGHT_RANGE, _power = FLASH_LIGHT_POWER, _color = LIGHT_COLOR_WHITE, _duration = FLASH_LIGHT_DURATION, _reset_lighting = TRUE) + var/temp_color + var/temp_power + var/temp_range + if(!_reset_lighting) //incase the obj already has a lighting color that you don't want cleared out after, ie computer monitors. + temp_color = light_color + temp_power = light_power + temp_range = light_range + set_light(_range, _power, _color) + addtimer(CALLBACK(src, /atom/proc/set_light, _reset_lighting ? initial(light_range) : temp_range, _reset_lighting ? initial(light_power) : temp_power, _reset_lighting ? initial(light_color) : temp_color), _duration, TIMER_OVERRIDE|TIMER_UNIQUE) + +/mob/living/flash_lighting_fx(_range = FLASH_LIGHT_RANGE, _power = FLASH_LIGHT_POWER, _color = LIGHT_COLOR_WHITE, _duration = FLASH_LIGHT_DURATION, _reset_lighting = TRUE) + mob_light(_color, _range, _power, _duration) + +/mob/living/proc/mob_light(_color, _range, _power, _duration) + var/obj/effect/dummy/lighting_obj/moblight/mob_light_obj = new (src, _color, _range, _power, _duration) + return mob_light_obj diff --git a/code/modules/lighting/lighting_corner.dm b/code/modules/lighting/lighting_corner.dm index 907e7aab8b5..0c0f8d1b995 100644 --- a/code/modules/lighting/lighting_corner.dm +++ b/code/modules/lighting/lighting_corner.dm @@ -1,15 +1,13 @@ -/var/total_lighting_corners = 0 -/var/datum/lighting_corner/dummy/dummy_lighting_corner = new -// Because we can control each corner of every lighting overlay. +// Because we can control each corner of every lighting object. // And corners get shared between multiple turfs (unless you're on the corners of the map, then 1 corner doesn't). // For the record: these should never ever ever be deleted, even if the turf doesn't have dynamic lighting. // This list is what the code that assigns corners listens to, the order in this list is the order in which corners are added to the /turf/corners list. -/var/list/LIGHTING_CORNER_DIAGONAL = list(NORTHEAST, SOUTHEAST, SOUTHWEST, NORTHWEST) +GLOBAL_LIST_INIT(LIGHTING_CORNER_DIAGONAL, list(NORTHEAST, SOUTHEAST, SOUTHWEST, NORTHWEST)) /datum/lighting_corner - var/list/turf/masters = list() - var/list/datum/light_source/affecting = list() // Light sources affecting us. + var/list/turf/masters + var/list/datum/light_source/affecting // Light sources affecting us. var/active = FALSE // TRUE if one of our masters has dynamic lighting. var/x = 0 @@ -27,13 +25,9 @@ var/cache_b = LIGHTING_SOFT_THRESHOLD var/cache_mx = 0 - var/update_gen = 0 - /datum/lighting_corner/New(var/turf/new_turf, var/diagonal) . = ..() - - total_lighting_corners++ - + masters = list() masters[new_turf] = turn(diagonal, 180) z = new_turf.z @@ -56,7 +50,7 @@ T.corners = list(null, null, null, null) masters[T] = diagonal - i = LIGHTING_CORNER_DIAGONAL.Find(turn(diagonal, 180)) + i = GLOB.LIGHTING_CORNER_DIAGONAL.Find(turn(diagonal, 180)) T.corners[i] = src // Now the horizontal one. @@ -66,7 +60,7 @@ T.corners = list(null, null, null, null) masters[T] = ((T.x > x) ? EAST : WEST) | ((T.y > y) ? NORTH : SOUTH) // Get the dir based on coordinates. - i = LIGHTING_CORNER_DIAGONAL.Find(turn(masters[T], 180)) + i = GLOB.LIGHTING_CORNER_DIAGONAL.Find(turn(masters[T], 180)) T.corners[i] = src // And finally the vertical one. @@ -76,50 +70,74 @@ T.corners = list(null, null, null, null) masters[T] = ((T.x > x) ? EAST : WEST) | ((T.y > y) ? NORTH : SOUTH) // Get the dir based on coordinates. - i = LIGHTING_CORNER_DIAGONAL.Find(turn(masters[T], 180)) + i = GLOB.LIGHTING_CORNER_DIAGONAL.Find(turn(masters[T], 180)) T.corners[i] = src update_active() /datum/lighting_corner/proc/update_active() active = FALSE - for (var/turf/T in masters) - if (T.lighting_overlay) + var/turf/T + var/thing + for (thing in masters) + T = thing + if (T.lighting_object) active = TRUE // God that was a mess, now to do the rest of the corner code! Hooray! /datum/lighting_corner/proc/update_lumcount(var/delta_r, var/delta_g, var/delta_b) + + if ((abs(delta_r)+abs(delta_g)+abs(delta_b)) == 0) + return + lum_r += delta_r lum_g += delta_g lum_b += delta_b if (!needs_update) needs_update = TRUE - lighting_update_corners += src + GLOB.lighting_update_corners += src -/datum/lighting_corner/proc/update_overlays() - - // Cache these values a head of time so 4 individual lighting overlays don't all calculate them individually. - var/mx = max(lum_r, lum_g, lum_b) // Scale it so 1 is the strongest lum, if it is above 1. +/datum/lighting_corner/proc/update_objects() + // Cache these values a head of time so 4 individual lighting objects don't all calculate them individually. + var/lum_r = src.lum_r + var/lum_g = src.lum_g + var/lum_b = src.lum_b + var/mx = max(lum_r, lum_g, lum_b) // Scale it so one of them is the strongest lum, if it is above 1. . = 1 // factor if (mx > 1) . = 1 / mx + #if LIGHTING_SOFT_THRESHOLD != 0 else if (mx < LIGHTING_SOFT_THRESHOLD) . = 0 // 0 means soft lighting. - cache_r = lum_r * . || LIGHTING_SOFT_THRESHOLD - cache_g = lum_g * . || LIGHTING_SOFT_THRESHOLD - cache_b = lum_b * . || LIGHTING_SOFT_THRESHOLD - cache_mx = mx + cache_r = round(lum_r * ., LIGHTING_ROUND_VALUE) || LIGHTING_SOFT_THRESHOLD + cache_g = round(lum_g * ., LIGHTING_ROUND_VALUE) || LIGHTING_SOFT_THRESHOLD + cache_b = round(lum_b * ., LIGHTING_ROUND_VALUE) || LIGHTING_SOFT_THRESHOLD + #else + cache_r = round(lum_r * ., LIGHTING_ROUND_VALUE) + cache_g = round(lum_g * ., LIGHTING_ROUND_VALUE) + cache_b = round(lum_b * ., LIGHTING_ROUND_VALUE) + #endif + cache_mx = round(mx, LIGHTING_ROUND_VALUE) for (var/TT in masters) var/turf/T = TT - if (T.lighting_overlay) - if (!T.lighting_overlay.needs_update) - T.lighting_overlay.needs_update = TRUE - lighting_update_overlays += T.lighting_overlay + if (T.lighting_object) + if (!T.lighting_object.needs_update) + T.lighting_object.needs_update = TRUE + GLOB.lighting_update_objects += T.lighting_object /datum/lighting_corner/dummy/New() return + + +/datum/lighting_corner/Destroy(var/force) + if (!force) + return QDEL_HINT_LETMELIVE + + stack_trace("Ok, Look, /tg/, I need you to find whatever fucker decided to call qdel on a fucking lighting corner, then tell him very nicely and politely that he is 100% retarded and needs his head checked. Thanks. Send them my regards by the way.") + + return ..() \ No newline at end of file diff --git a/code/modules/lighting/lighting_object.dm b/code/modules/lighting/lighting_object.dm new file mode 100644 index 00000000000..6083c7af7f1 --- /dev/null +++ b/code/modules/lighting/lighting_object.dm @@ -0,0 +1,144 @@ +/atom/movable/lighting_object + name = "" + + anchored = TRUE + + icon = LIGHTING_ICON + icon_state = "transparent" + color = LIGHTING_BASE_MATRIX + plane = LIGHTING_PLANE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + layer = LIGHTING_LAYER + invisibility = INVISIBILITY_LIGHTING + + var/needs_update = FALSE + var/turf/myturf + +/atom/movable/lighting_object/Initialize(mapload) + . = ..() + verbs.Cut() + + myturf = loc + if (myturf.lighting_object) + qdel(myturf.lighting_object, force = TRUE) + myturf.lighting_object = src + myturf.luminosity = 0 + + for(var/turf/space/S in RANGE_TURFS(1, src)) //RANGE_TURFS is in code\__HELPERS\game.dm + S.update_starlight() + + needs_update = TRUE + GLOB.lighting_update_objects += src + +/atom/movable/lighting_object/Destroy(var/force) + if (force) + GLOB.lighting_update_objects -= src + if (loc != myturf) + var/turf/oldturf = get_turf(myturf) + var/turf/newturf = get_turf(loc) + stack_trace("A lighting object was qdeleted with a different loc then it is suppose to have ([COORD(oldturf)] -> [COORD(newturf)])") + if (isturf(myturf)) + myturf.lighting_object = null + myturf.luminosity = 1 + myturf = null + + return ..() + + else + return QDEL_HINT_LETMELIVE + +/atom/movable/lighting_object/proc/update() + if (loc != myturf) + if (loc) + var/turf/oldturf = get_turf(myturf) + var/turf/newturf = get_turf(loc) + warning("A lighting object realised it's loc had changed in update() ([myturf]\[[myturf ? myturf.type : "null"]]([COORD(oldturf)]) -> [loc]\[[ loc ? loc.type : "null"]]([COORD(newturf)]))!") + + qdel(src, TRUE) + return + + // To the future coder who sees this and thinks + // "Why didn't he just use a loop?" + // Well my man, it's because the loop performed like shit. + // And there's no way to improve it because + // without a loop you can make the list all at once which is the fastest you're gonna get. + // Oh it's also shorter line wise. + // Including with these comments. + + // See LIGHTING_CORNER_DIAGONAL in lighting_corner.dm for why these values are what they are. + var/static/datum/lighting_corner/dummy/dummy_lighting_corner = new + + var/list/corners = myturf.corners + var/datum/lighting_corner/cr = dummy_lighting_corner + var/datum/lighting_corner/cg = dummy_lighting_corner + var/datum/lighting_corner/cb = dummy_lighting_corner + var/datum/lighting_corner/ca = dummy_lighting_corner + if (corners) //done this way for speed + cr = corners[3] || dummy_lighting_corner + cg = corners[2] || dummy_lighting_corner + cb = corners[4] || dummy_lighting_corner + ca = corners[1] || dummy_lighting_corner + + var/max = max(cr.cache_mx, cg.cache_mx, cb.cache_mx, ca.cache_mx) + + var/rr = cr.cache_r + var/rg = cr.cache_g + var/rb = cr.cache_b + + var/gr = cg.cache_r + var/gg = cg.cache_g + var/gb = cg.cache_b + + var/br = cb.cache_r + var/bg = cb.cache_g + var/bb = cb.cache_b + + var/ar = ca.cache_r + var/ag = ca.cache_g + var/ab = ca.cache_b + + #if LIGHTING_SOFT_THRESHOLD != 0 + var/set_luminosity = max > LIGHTING_SOFT_THRESHOLD + #else + // Because of floating pointsâ„¢?, it won't even be a flat 0. + // This number is mostly arbitrary. + var/set_luminosity = max > 1e-6 + #endif + + if((rr & gr & br & ar) && (rg + gg + bg + ag + rb + gb + bb + ab == 8)) + //anything that passes the first case is very likely to pass the second, and addition is a little faster in this case + icon_state = "transparent" + color = null + else if(!set_luminosity) + icon_state = "dark" + color = null + else + icon_state = null + color = list( + rr, rg, rb, 00, + gr, gg, gb, 00, + br, bg, bb, 00, + ar, ag, ab, 00, + 00, 00, 00, 01 + ) + + luminosity = set_luminosity + +// Variety of overrides so the overlays don't get affected by weird things. + +/atom/movable/lighting_object/ex_act(severity) + return 0 + +/atom/movable/lighting_object/singularity_act() + return + +/atom/movable/lighting_object/singularity_pull() + return + +/atom/movable/lighting_object/blob_act() + return + +// Override here to prevent things accidentally moving around overlays. +/atom/movable/lighting_object/forceMove(atom/destination, var/no_tp=FALSE, var/harderforce = FALSE) + if(harderforce) + . = ..() \ No newline at end of file diff --git a/code/modules/lighting/lighting_overlay.dm b/code/modules/lighting/lighting_overlay.dm deleted file mode 100644 index a8f87338ae8..00000000000 --- a/code/modules/lighting/lighting_overlay.dm +++ /dev/null @@ -1,89 +0,0 @@ -/var/total_lighting_overlays = 0 -/atom/movable/lighting_overlay - name = "" - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - simulated = 0 - anchored = 1 - icon = LIGHTING_ICON - layer = LIGHTING_LAYER - plane = LIGHTING_PLANE - invisibility = INVISIBILITY_LIGHTING - color = LIGHTING_BASE_MATRIX - icon_state = "light1" - blend_mode = BLEND_MULTIPLY - - var/lum_r = 0 - var/lum_g = 0 - var/lum_b = 0 - - var/needs_update = FALSE - -/atom/movable/lighting_overlay/New(var/atom/loc, var/no_update = FALSE) - . = ..() - verbs.Cut() - total_lighting_overlays++ - - var/turf/T = loc //If this runtimes atleast we'll know what's creating overlays outside of turfs. - T.lighting_overlay = src - T.luminosity = 0 - if(no_update) - return - update_overlay() - -/atom/movable/lighting_overlay/proc/update_overlay() - set waitfor = FALSE - var/turf/T = loc - - if(!istype(T)) - if(loc) - log_debug("A lighting overlay realised its loc was NOT a turf (actual loc: [loc][loc ? ", " + loc.type : "null"]) in update_overlay() and got qdel'ed!") - else - log_debug("A lighting overlay realised it was in nullspace in update_overlay() and got pooled!") - qdel(src) - return - - // To the future coder who sees this and thinks - // "Why didn't he just use a loop?" - // Well my man, it's because the loop performed like shit. - // And there's no way to improve it because - // without a loop you can make the list all at once which is the fastest you're gonna get. - // Oh it's also shorter line wise. - // Including with these comments. - - // See LIGHTING_CORNER_DIAGONAL in lighting_corner.dm for why these values are what they are. - // No I seriously cannot think of a more efficient method, fuck off Comic. - var/datum/lighting_corner/cr = T.corners[3] || dummy_lighting_corner - var/datum/lighting_corner/cg = T.corners[2] || dummy_lighting_corner - var/datum/lighting_corner/cb = T.corners[4] || dummy_lighting_corner - var/datum/lighting_corner/ca = T.corners[1] || dummy_lighting_corner - - var/max = max(cr.cache_mx, cg.cache_mx, cb.cache_mx, ca.cache_mx) - - color = list( - cr.cache_r, cr.cache_g, cr.cache_b, 0, - cg.cache_r, cg.cache_g, cg.cache_b, 0, - cb.cache_r, cb.cache_g, cb.cache_b, 0, - ca.cache_r, ca.cache_g, ca.cache_b, 0, - 0, 0, 0, 1 - ) - luminosity = max > LIGHTING_SOFT_THRESHOLD - - - -/atom/movable/lighting_overlay/singularity_act() - return - -/atom/movable/lighting_overlay/singularity_pull() - return - -/atom/movable/lighting_overlay/Destroy() - total_lighting_overlays-- - global.lighting_update_overlays -= src - global.lighting_update_overlays_old -= src - - var/turf/T = loc - if(istype(T)) - T.lighting_overlay = null - T.luminosity = 1 - - return ..() diff --git a/code/modules/lighting/lighting_setup.dm b/code/modules/lighting/lighting_setup.dm index 981de658649..6c1dab13ec6 100644 --- a/code/modules/lighting/lighting_setup.dm +++ b/code/modules/lighting/lighting_setup.dm @@ -1,16 +1,13 @@ -/proc/create_all_lighting_overlays() - for(var/zlevel = 1 to world.maxz) - create_lighting_overlays_zlevel(zlevel) - -/proc/create_lighting_overlays_zlevel(var/zlevel) - ASSERT(zlevel) - - for(var/turf/T in block(locate(1, 1, zlevel), locate(world.maxx, world.maxy, zlevel))) - if(!T.dynamic_lighting) +/proc/create_all_lighting_objects() + for(var/area/A in world) + if(!IS_DYNAMIC_LIGHTING(A)) continue - var/area/A = T.loc - if(!A.dynamic_lighting) - continue + for(var/turf/T in A) - new /atom/movable/lighting_overlay(T, TRUE) + if(!IS_DYNAMIC_LIGHTING(T)) + continue + + new/atom/movable/lighting_object(T) + CHECK_TICK + CHECK_TICK \ No newline at end of file diff --git a/code/modules/lighting/lighting_source.dm b/code/modules/lighting/lighting_source.dm index d878d8c4b6e..b6dbd778371 100644 --- a/code/modules/lighting/lighting_source.dm +++ b/code/modules/lighting/lighting_source.dm @@ -1,12 +1,12 @@ -/var/total_lighting_sources = 0 // This is where the fun begins. // These are the main datums that emit light. /datum/light_source - var/atom/top_atom // The atom we're emitting light from(for example a mob if we're from a flashlight that's being held). + var/atom/top_atom // The atom we're emitting light from (for example a mob if we're from a flashlight that's being held). var/atom/source_atom // The atom that we belong to. var/turf/source_turf // The turf under the above. + var/turf/pixel_turf // The turf the top_atom appears to over. var/light_power // Intensity of the emitter light. var/light_range // The range of the emitted light. var/light_color // The colour of the light, string, decomposed by parse_light_color() @@ -26,133 +26,80 @@ var/applied = FALSE // Whether we have applied our light yet or not. - var/vis_update // Whether we should smartly recalculate visibility. and then only update tiles that became(in)visible to us. - var/needs_update // Whether we are queued for an update. - var/destroyed // Whether we are destroyed and need to stop emitting light. - var/force_update + var/needs_update = LIGHTING_NO_UPDATE // Whether we are queued for an update. + /datum/light_source/New(var/atom/owner, var/atom/top) - total_lighting_sources++ source_atom = owner // Set our new owner. - if(!source_atom.light_sources) - source_atom.light_sources = list() - - source_atom.light_sources += src // Add us to the lights of our owner. + LAZYADD(source_atom.light_sources, src) top_atom = top - if(top_atom != source_atom) - if(!top.light_sources) - top.light_sources = list() - - top_atom.light_sources += src + if (top_atom != source_atom) + LAZYADD(top_atom.light_sources, src) source_turf = top_atom + pixel_turf = get_turf_pixel(top_atom) || source_turf + light_power = source_atom.light_power light_range = source_atom.light_range light_color = source_atom.light_color parse_light_color() - effect_str = list() - affecting_turfs = list() - update() - return ..() -// Kill ourselves. -/datum/light_source/proc/destroy() - total_lighting_sources-- - destroyed = TRUE - force_update() - if(source_atom) - if(!source_atom.light_sources) - log_runtime(EXCEPTION("Atom [source_atom] was a light source, but lacked a light source list!\n"), source_atom) - else - source_atom.light_sources -= src +/datum/light_source/Destroy(force) + remove_lum() + if (source_atom) + LAZYREMOVE(source_atom.light_sources, src) - if(top_atom) - top_atom.light_sources -= src + if (top_atom) + LAZYREMOVE(top_atom.light_sources, src) + + if (needs_update) + GLOB.lighting_update_lights -= src + + . = ..() + +// Yes this doesn't align correctly on anything other than 4 width tabs. +// If you want it to go switch everybody to elastic tab stops. +// Actually that'd be great if you could! +#define EFFECT_UPDATE(level) \ + if (needs_update == LIGHTING_NO_UPDATE) \ + GLOB.lighting_update_lights += src; \ + if (needs_update < level) \ + needs_update = level; \ -// Call it dirty, I don't care. -// This is here so there's no performance loss on non-instant updates from the fact that the engine can also do instant updates. -// If you're wondering what's with the "BYOND" argument: BYOND won't let me have a() macro that has no arguments :|. -#define effect_update(BYOND) \ - if(!needs_update) \ - { \ - lighting_update_lights += src; \ - needs_update = TRUE; \ - } // This proc will cause the light source to update the top atom, and add itself to the update queue. /datum/light_source/proc/update(var/atom/new_top_atom) // This top atom is different. - if(new_top_atom && new_top_atom != top_atom) - if(top_atom != source_atom) // Remove ourselves from the light sources of that top atom. - top_atom.light_sources -= src + if (new_top_atom && new_top_atom != top_atom) + if(top_atom != source_atom && top_atom.light_sources) // Remove ourselves from the light sources of that top atom. + LAZYREMOVE(top_atom.light_sources, src) top_atom = new_top_atom - if(top_atom != source_atom) - if(!top_atom.light_sources) - top_atom.light_sources = list() + if (top_atom != source_atom) + LAZYADD(top_atom.light_sources, src) // Add ourselves to the light sources of our new top atom. - top_atom.light_sources += src // Add ourselves to the light sources of our new top atom. - - effect_update(null) + EFFECT_UPDATE(LIGHTING_CHECK_UPDATE) // Will force an update without checking if it's actually needed. /datum/light_source/proc/force_update() - force_update = 1 - - effect_update(null) + EFFECT_UPDATE(LIGHTING_FORCE_UPDATE) // Will cause the light source to recalculate turfs that were removed or added to visibility only. /datum/light_source/proc/vis_update() - vis_update = 1 - - effect_update(null) - -// Will check if we actually need to update, and update any variables that may need to be updated. -/datum/light_source/proc/check() - if(!source_atom || !light_range || !light_power) - destroy() - return 1 - - if(!top_atom) - top_atom = source_atom - . = 1 - - if(isturf(top_atom)) - if(source_turf != top_atom) - source_turf = top_atom - . = 1 - else if(top_atom.loc != source_turf) - source_turf = top_atom.loc - . = 1 - - if(source_atom.light_power != light_power) - light_power = source_atom.light_power - . = 1 - - if(source_atom.light_range != light_range) - light_range = source_atom.light_range - . = 1 - - if(light_range && light_power && !applied) - . = 1 - - if(source_atom.light_color != light_color) - light_color = source_atom.light_color - parse_light_color() - . = 1 + EFFECT_UPDATE(LIGHTING_VIS_UPDATE) // Decompile the hexadecimal colour into lumcounts of each perspective. /datum/light_source/proc/parse_light_color() - if(light_color) - lum_r = GetRedPart (light_color) / 255 - lum_g = GetGreenPart(light_color) / 255 - lum_b = GetBluePart (light_color) / 255 + if (light_color) + lum_r = GetRedPart (light_color) / 255 + lum_g = GetGreenPart (light_color) / 255 + lum_b = GetBluePart (light_color) / 255 else lum_r = 1 lum_g = 1 @@ -163,128 +110,189 @@ // If you're wondering what's with the backslashes, the backslashes cause BYOND to not automatically end the line. // As such this all gets counted as a single line. // The braces and semicolons are there to be able to do this on a single line. +#define LUM_FALLOFF(C, T) (1 - CLAMP01(sqrt((C.x - T.x) ** 2 + (C.y - T.y) ** 2 + LIGHTING_HEIGHT) / max(1, light_range))) -#define APPLY_CORNER(C) \ - . = LUM_FALLOFF(C, source_turf); \ - \ - . *= light_power; \ - \ - effect_str[C] = .; \ - \ - C.update_lumcount \ - ( \ - . * applied_lum_r, \ - . * applied_lum_g, \ - . * applied_lum_b \ +#define APPLY_CORNER(C) \ + . = LUM_FALLOFF(C, pixel_turf); \ + . *= light_power; \ + var/OLD = effect_str[C]; \ + effect_str[C] = .; \ + \ + C.update_lumcount \ + ( \ + (. * lum_r) - (OLD * applied_lum_r), \ + (. * lum_g) - (OLD * applied_lum_g), \ + (. * lum_b) - (OLD * applied_lum_b) \ ); -// I don't need to explain what this does, do I? -#define REMOVE_CORNER(C) \ - . = -effect_str[C]; \ - C.update_lumcount \ - ( \ - . * applied_lum_r, \ - . * applied_lum_g, \ - . * applied_lum_b \ +#define REMOVE_CORNER(C) \ + . = -effect_str[C]; \ + C.update_lumcount \ + ( \ + . * applied_lum_r, \ + . * applied_lum_g, \ + . * applied_lum_b \ ); // This is the define used to calculate falloff. -#define LUM_FALLOFF(C, T)(1 - CLAMP01(sqrt((C.x - T.x) ** 2 +(C.y - T.y) ** 2 + LIGHTING_HEIGHT) / max(1, light_range))) -/datum/light_source/proc/apply_lum() - var/static/update_gen = 1 - applied = 1 +/datum/light_source/proc/remove_lum() + applied = FALSE + var/thing + for (thing in affecting_turfs) + var/turf/T = thing + LAZYREMOVE(T.affecting_lights, src) + + affecting_turfs = null + + var/datum/lighting_corner/C + for (thing in effect_str) + C = thing + REMOVE_CORNER(C) + + LAZYREMOVE(C.affecting, src) + + effect_str = null + +/datum/light_source/proc/recalc_corner(var/datum/lighting_corner/C) + LAZYINITLIST(effect_str) + if (effect_str[C]) // Already have one. + REMOVE_CORNER(C) + effect_str[C] = 0 + + APPLY_CORNER(C) + UNSETEMPTY(effect_str) + +/datum/light_source/proc/update_corners() + var/update = FALSE + var/atom/source_atom = src.source_atom + + if (QDELETED(source_atom)) + qdel(src) + return + + if (source_atom.light_power != light_power) + light_power = source_atom.light_power + update = TRUE + + if (source_atom.light_range != light_range) + light_range = source_atom.light_range + update = TRUE + + if (!top_atom) + top_atom = source_atom + update = TRUE + + if (!light_range || !light_power) + qdel(src) + return + + if (isturf(top_atom)) + if (source_turf != top_atom) + source_turf = top_atom + pixel_turf = source_turf + update = TRUE + else if (top_atom.loc != source_turf) + source_turf = top_atom.loc + pixel_turf = get_turf_pixel(top_atom) + update = TRUE + else + var/P = get_turf_pixel(top_atom) + if (P != pixel_turf) + pixel_turf = P + update = TRUE + + if (!isturf(source_turf)) + if (applied) + remove_lum() + return + + if (light_range && light_power && !applied) + update = TRUE + + if (source_atom.light_color != light_color) + light_color = source_atom.light_color + parse_light_color() + update = TRUE + + else if (applied_lum_r != lum_r || applied_lum_g != lum_g || applied_lum_b != lum_b) + update = TRUE + + if (update) + needs_update = LIGHTING_CHECK_UPDATE + applied = TRUE + else if (needs_update == LIGHTING_CHECK_UPDATE) + return //nothing's changed + + var/list/datum/lighting_corner/corners = list() + var/list/turf/turfs = list() + var/thing + var/datum/lighting_corner/C + var/turf/T + if (source_turf) + var/oldlum = source_turf.luminosity + source_turf.luminosity = CEILING(light_range, 1) + for(T in view(CEILING(light_range, 1), source_turf)) + for (thing in T.get_corners(source_turf)) + C = thing + corners[C] = 0 + turfs += T + source_turf.luminosity = oldlum + + LAZYINITLIST(affecting_turfs) + var/list/L = turfs - affecting_turfs // New turfs, add us to the affecting lights of them. + affecting_turfs += L + for (thing in L) + T = thing + LAZYADD(T.affecting_lights, src) + + L = affecting_turfs - turfs // Now-gone turfs, remove us from the affecting lights. + affecting_turfs -= L + for (thing in L) + T = thing + LAZYREMOVE(T.affecting_lights, src) + + LAZYINITLIST(effect_str) + if (needs_update == LIGHTING_VIS_UPDATE) + for (thing in corners - effect_str) // New corners + C = thing + LAZYADD(C.affecting, src) + if (!C.active) + effect_str[C] = 0 + continue + APPLY_CORNER(C) + else + L = corners - effect_str + for (thing in L) // New corners + C = thing + LAZYADD(C.affecting, src) + if (!C.active) + effect_str[C] = 0 + continue + APPLY_CORNER(C) + + for (thing in corners - L) // Existing corners + C = thing + if (!C.active) + effect_str[C] = 0 + continue + APPLY_CORNER(C) + + L = effect_str - corners + for (thing in L) // Old, now gone, corners. + C = thing + REMOVE_CORNER(C) + LAZYREMOVE(C.affecting, src) + effect_str -= L - // Keep track of the last applied lum values so that the lighting can be reversed applied_lum_r = lum_r applied_lum_g = lum_g applied_lum_b = lum_b - FOR_DVIEW(var/turf/T, light_range, source_turf, INVISIBILITY_LIGHTING) - if(!T.lighting_corners_initialised) - T.generate_missing_corners() + UNSETEMPTY(effect_str) + UNSETEMPTY(affecting_turfs) - for(var/datum/lighting_corner/C in T.get_corners()) - if(C.update_gen == update_gen) - continue - - C.update_gen = update_gen - C.affecting += src - - if(!C.active) - effect_str[C] = 0 - continue - - APPLY_CORNER(C) - - if(!T.affecting_lights) - T.affecting_lights = list() - - T.affecting_lights += src - affecting_turfs += T - - update_gen++ - -/datum/light_source/proc/remove_lum() - applied = FALSE - - for(var/turf/T in affecting_turfs) - if(!T.affecting_lights) - T.affecting_lights = list() - else - T.affecting_lights -= src - - affecting_turfs.Cut() - - for(var/datum/lighting_corner/C in effect_str) - REMOVE_CORNER(C) - - C.affecting -= src - - effect_str.Cut() - -/datum/light_source/proc/recalc_corner(var/datum/lighting_corner/C) - if(effect_str.Find(C)) // Already have one. - REMOVE_CORNER(C) - - APPLY_CORNER(C) - -/datum/light_source/proc/smart_vis_update() - var/list/datum/lighting_corner/corners = list() - var/list/turf/turfs = list() - FOR_DVIEW(var/turf/T, light_range, source_turf, 0) - if(!T.lighting_corners_initialised) - T.generate_missing_corners() - corners |= T.get_corners() - turfs += T - - var/list/L = turfs - affecting_turfs // New turfs, add us to the affecting lights of them. - affecting_turfs += L - for(var/turf/T in L) - if(!T.affecting_lights) - T.affecting_lights = list(src) - else - T.affecting_lights += src - - L = affecting_turfs - turfs // Now-gone turfs, remove us from the affecting lights. - affecting_turfs -= L - for(var/turf/T in L) - T.affecting_lights -= src - - for(var/datum/lighting_corner/C in corners - effect_str) // New corners - C.affecting += src - if(!C.active) - effect_str[C] = 0 - continue - - APPLY_CORNER(C) - - for(var/datum/lighting_corner/C in effect_str - corners) // Old, now gone, corners. - REMOVE_CORNER(C) - C.affecting -= src - effect_str -= C - -#undef effect_update +#undef EFFECT_UPDATE #undef LUM_FALLOFF #undef REMOVE_CORNER -#undef APPLY_CORNER +#undef APPLY_CORNER \ No newline at end of file diff --git a/code/modules/lighting/lighting_turf.dm b/code/modules/lighting/lighting_turf.dm index ddb934aed61..0fe3caec840 100644 --- a/code/modules/lighting/lighting_turf.dm +++ b/code/modules/lighting/lighting_turf.dm @@ -5,98 +5,131 @@ var/tmp/lighting_corners_initialised = FALSE var/tmp/list/datum/light_source/affecting_lights // List of light sources affecting this turf. - var/tmp/atom/movable/lighting_overlay/lighting_overlay // Our lighting overlay. + var/tmp/atom/movable/lighting_object/lighting_object // Our lighting object. var/tmp/list/datum/lighting_corner/corners var/tmp/has_opaque_atom = FALSE // Not to be confused with opacity, this will be TRUE if there's any opaque atom on the tile. -/turf/New() - . = ..() - - if(opacity) - has_opaque_atom = TRUE - // Causes any affecting light sources to be queued for a visibility update, for example a door got opened. /turf/proc/reconsider_lights() - for(var/datum/light_source/L in affecting_lights) + var/datum/light_source/L + var/thing + for (thing in affecting_lights) + L = thing L.vis_update() /turf/proc/lighting_clear_overlay() - if(lighting_overlay) - qdel(lighting_overlay) + if (lighting_object) + qdel(lighting_object, TRUE) - for(var/datum/lighting_corner/C in corners) + var/datum/lighting_corner/C + var/thing + for (thing in corners) + if(!thing) + continue + C = thing C.update_active() -// Builds a lighting overlay for us, but only if our area is dynamic. +// Builds a lighting object for us, but only if our area is dynamic. /turf/proc/lighting_build_overlay() - if(lighting_overlay) - return + if (lighting_object) + qdel(lighting_object,force=TRUE) //Shitty fix for lighting objects persisting after death var/area/A = loc - if(A.dynamic_lighting) - if(!lighting_corners_initialised) - generate_missing_corners() + if (!IS_DYNAMIC_LIGHTING(A) && !light_sources) + return - new /atom/movable/lighting_overlay(src) + if (!lighting_corners_initialised) + generate_missing_corners() - for(var/datum/lighting_corner/C in corners) - if(!C.active) // We would activate the corner, calculate the lighting for it. - for(var/L in C.affecting) - var/datum/light_source/S = L - S.recalc_corner(C) + new/atom/movable/lighting_object(src) - C.active = TRUE + var/thing + var/datum/lighting_corner/C + var/datum/light_source/S + for (thing in corners) + if(!thing) + continue + C = thing + if (!C.active) // We would activate the corner, calculate the lighting for it. + for (thing in C.affecting) + S = thing + S.recalc_corner(C) + C.active = TRUE // Used to get a scaled lumcount. /turf/proc/get_lumcount(var/minlum = 0, var/maxlum = 1) - if(!lighting_overlay) + if (!lighting_object) return 1 var/totallums = 0 - for(var/datum/lighting_corner/L in corners) - totallums += max(L.lum_r, L.lum_g, L.lum_b) + var/thing + var/datum/lighting_corner/L + for (thing in corners) + if(!thing) + continue + L = thing + totallums += L.lum_r + L.lum_b + L.lum_g - totallums /= 4 // 4 corners, max channel selected, return the average + totallums /= 12 // 4 corners, each with 3 channels, get the average. - totallums =(totallums - minlum) /(maxlum - minlum) + totallums = (totallums - minlum) / (maxlum - minlum) return CLAMP01(totallums) +// Returns a boolean whether the turf is on soft lighting. +// Soft lighting being the threshold at which point the overlay considers +// itself as too dark to allow sight and see_in_dark becomes useful. +// So basically if this returns true the tile is unlit black. +/turf/proc/is_softly_lit() + if (!lighting_object) + return FALSE + + return !lighting_object.luminosity + // Can't think of a good name, this proc will recalculate the has_opaque_atom variable. /turf/proc/recalc_atom_opacity() - has_opaque_atom = FALSE - for(var/atom/A in src.contents + src) // Loop through every movable atom on our tile PLUS ourselves (we matter too...) - if(A.opacity) - has_opaque_atom = TRUE + has_opaque_atom = opacity + if (!has_opaque_atom) + for (var/atom/A in src.contents) // Loop through every movable atom on our tile PLUS ourselves (we matter too...) + if (A.opacity) + has_opaque_atom = TRUE + break -// If an opaque movable atom moves around we need to potentially update visibility. -/turf/Entered(var/atom/movable/Obj, var/atom/OldLoc) +/turf/Exited(atom/movable/Obj, atom/newloc) . = ..() - if(Obj && Obj.opacity) - has_opaque_atom = TRUE // Make sure to do this before reconsider_lights(), incase we're on instant updates. Guaranteed to be on in this case. - reconsider_lights() - -/turf/Exited(var/atom/movable/Obj, var/atom/newloc) - . = ..() - - if(Obj && Obj.opacity) + if (Obj && Obj.opacity) recalc_atom_opacity() // Make sure to do this before reconsider_lights(), incase we're on instant updates. reconsider_lights() +/turf/proc/change_area(var/area/old_area, var/area/new_area) + if(SSlighting.initialized) + if (new_area.dynamic_lighting != old_area.dynamic_lighting) + if (new_area.dynamic_lighting) + lighting_build_overlay() + else + lighting_clear_overlay() + /turf/proc/get_corners() - if(has_opaque_atom) + if (!IS_DYNAMIC_LIGHTING(src) && !light_sources) + return null + if (!lighting_corners_initialised) + generate_missing_corners() + if (has_opaque_atom) return null // Since this proc gets used in a for loop, null won't be looped though. return corners /turf/proc/generate_missing_corners() + if (!IS_DYNAMIC_LIGHTING(src) && !light_sources) + return lighting_corners_initialised = TRUE - if(!corners) + if (!corners) corners = list(null, null, null, null) - for(var/i = 1 to 4) - if(corners[i]) // Already have a corner on this direction. + for (var/i = 1 to 4) + if (corners[i]) // Already have a corner on this direction. continue - corners[i] = new /datum/lighting_corner(src, LIGHTING_CORNER_DIAGONAL[i]) + corners[i] = new/datum/lighting_corner(src, GLOB.LIGHTING_CORNER_DIAGONAL[i]) + diff --git a/code/modules/lighting/~lighting_undefs.dm b/code/modules/lighting/~lighting_undefs.dm deleted file mode 100644 index 2de3f9dbe26..00000000000 --- a/code/modules/lighting/~lighting_undefs.dm +++ /dev/null @@ -1,7 +0,0 @@ -#undef LIGHTING_FALLOFF -#undef LIGHTING_LAMBERTIAN -#undef LIGHTING_HEIGHT - -#undef LIGHTING_ICON - -#undef LIGHTING_BASE_MATRIX diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index 829377720c1..ad90272a4ce 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -104,7 +104,7 @@ return null // Check for darkness var/turf/T = get_turf(loc) - if(T && destination && T.lighting_overlay) + if(T && destination && T.lighting_object) if(T.get_lumcount() * 10 < 1 && destination.get_lumcount() * 10 < 1) // No one can see us in the darkness, right? return null if(T == destination) diff --git a/icons/effects/alphacolors.dmi b/icons/effects/alphacolors.dmi index f27dfb036deb9daf6c3a8192b4b5d70f629f31f0..c01d261fe31d1b4d969c900acd4ea4bc6450cdad 100644 GIT binary patch literal 633 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRS%c?>mN?cNllZ!G7N;32F7#J$% zOzm^zI%FW?a{cFWiCei7qh1?HXHL|6Bdhe&tWoNzy4K#k-Ay|JR_&Io_&h^qciH`~ z8GN#LBNy#w$+)t5(v`!vpDft8(!=swvv+alNtHIYX%jcaDVbbb;+J&J=DB!*O#UCq zRi2S@XIXl8t>{`+5zTu@rmnEtr+dbRzyBM*p4^yo+O=9p_|a94_Ak9>FMi{lN?=-I@O1TaS?83{1OO+u@R9%k literal 464 zcmeAS@N?(olHy`uVBq!ia0vp^4M3d0!3HF+R#kZdshL$F5hX6E#mPmP1tppJc?=8{ zbArPPib}tK2`>2f^@*0ZuGYCT=Yuzd8eBAf@JQ#pkLF2+qMqIz7REuwmyNv?<~*8o zWKxJiu%_m6lhDp?W7W+oBu~)y|R(_kb{WJLEDppvKQKg%^fc4u{a4iB^i}Wc~FpQc=^D;2X}i@*1fEn{@woR zU+>}?&U#-4CIWI|`H@;ypL)s^; s`yW=Ud%x4{x%;Ot%tYG_GehPFV<``>)WR393mJgG)78&qol`;+0MT-j3;+NC diff --git a/icons/effects/lighting_object.dmi b/icons/effects/lighting_object.dmi new file mode 100644 index 0000000000000000000000000000000000000000..51985c0c981c5bdb3dd57606b733474016ca5c5d GIT binary patch literal 1882 zcmb7_`#;l*AICqt$QWYCWUdbh6Pux}IHo2vw~X8`8A4h^n24EMN1|_$)%JDNBvS5< zaa1GQiR02a5_O7CE)_YuX~!)cjrYniW5&mU2aJ<^Et^}O+N7h4+S##Ry?+#2M++d%H1eVzAXMfH+!z- z5>XUFz47AKcIjE2I_q@Y9=m1s|oogTItkX(FuuZ#2(x|k~~hm7LL6V^m{F! zSpYp9yVoQF*o6ROodF`41O}>0M!``DLuxitXS*b~)Gona!H*M1`Re@9+7*;22&4kx zp#90O-qJv*v~44AqiwvoC-kRW!_Oaq66+5($AY2pT*A=aV|VKStb2akX28Yg!1#W^ z6H@UKC6W)5V&!F@y?}LCW*Mo5eHjs zSt7@|iG54I6RXj4=zS&gXtQD8LFS+a*2ugK>^Cjq90kNQC_RUVgKnZBy`%3R8~0g? z8DiSBrT8k{N^JT_LJ}t;YP}z*fco}oa)p<0sx7?{qMCe}F$9U3Uh1e7Qk$viM@oH) z>(F&*zh+O!oYFBlfzZfW5#eNriy7ut+t5utA=vAretuL& zp%oFykk7Pa9bh#(xofDelAyQ{bR~v?sl@w*Jl8x*IPF}*UEw%ZdC3&o9Ayd7Q5$7d zCeFv>snA=<`4LrVZn(R1h6_UxD9+r@R-f|p{3?`&~;Z->)+q;ut<+`AJ z%-HULw5EM?D8FEh1SL9<96V**0hoQHdD6-5oJJL{73)g{{I~MABHk{erL;HVb9Q<{UtR~Y0O~MgxbW_kC#T&08)TKbfq+8X2Uyq@}1$C zx9@E8g91bU6BXE}(B^S?)?IYn!<~jr8_Do*pq5(>HtX`R%j4fRLCp@9H za6WIeDG(hNz2(Q|Tjnk=&*M&hyD@-=C=e9n1ihw+Gw*zEh6~dF+r9rxmhwI5XvV!Z literal 0 HcmV?d00001 diff --git a/icons/effects/lighting_overlay.dmi b/icons/effects/lighting_overlay.dmi deleted file mode 100644 index daa43134b3ce314d1347fca38a7e2b227fad6249..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5914 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 diff --git a/icons/effects/lighting_overlay.png b/icons/effects/lighting_overlay.png deleted file mode 100644 index b317268b702d50c33c0099a63d0a0ea94a607744..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1480 zcmV;(1vmPMP);Uvh8NW&Hj9u{oJD8zyJ38|NQOa z|M-u;{hjmky?xmq8}>77#ec@IUtGUa@plf}ajk^;9)r~m<`{nLsNF2OdGx_rY3A96 zWwR9@KGZP&dj?k!_@MxP`89$47XoiqfPb^<8{l_T-46&HRgVq^@fTWi|u4@}5K=9BMP`7XFfwUSsJI_mEWW(PCeh02& zNn|@X0Zjqdt-wdi7E1uvIVX_Dg_zyjxLsR=04I?4)&vMoe@{5NZ|_WYuexV8bdMw_ z&@_QA0ZbqPZ4k(UySG5!=(=I=@@j&;6`0+l<|&{l_`4(sME8`S0Kk+83glVQJ(ocO zgw_Q7g1fb#04kw5DB*&Sq{JmqVAgR4YfH&VwI zYSle5C?OFFa1Vs-P4 zXaf5TCA8^OIRy$ZfTMH3Id(`;0M{oRQ6a0nnn6DWZw0pHIYOQO{TB!C=9 zTLKlqmF*74#$&b#?*-3-r*GJ505g{WM~@J`AxAr~0ShX4KLp0_3qGL>e&9&E;C;iX z-D50?+%U|ZnOjNN23#K{z)g7YNAQCZ*;xVZ5IMN!+HC9|Y74&Y60i*?vEU^!2%q4_ zD)=aPh21}FL*Lt+z;XWUgYXr~0IqNl3VK2`+F=;5gy-I3)xhkE$9y^Qd}G-~rq=C~%w;0NlD`C$y3P7zx59flY=S zvDRK|e!?$kRjfClT@`z|psa^u_)hdgOK@lp?6n~^f#y*H9t87rV-1~fTxZ_rA8US0 zXw`fKps}s4QM*4<0_eK48YZA!@W6iM1lakE;JctYTC>19WTNhEopcxcHuhB5wIn*O z0|HxnVpU6`Yy1HFhXA^7E0FL?@=R~*eDBIUV7Sxc-{H^D_=E6gPB5ncI7HBW<*6y0 z0@gHvJOyxc=6bLY>hpLVXZLBJYaTNh@x-Z(3B*$q=oEoKqk!_jbMR@r8QUdbf}1;^ zTodk9*F$BUa5`kV?(vqJI&U3aZzX{1fP}z+ati22*AyUpTmsyL=$zn!U&-}IJ)dfl z5SX_Zg7*M+FOlrp`2aDE-9KZ31z!_rl<=3PP!nMHt_h4w01ps=^XwkaaUHAce80dA zw^|FrYZ47(_bGv(``1_k?ypf3P`w1uJ>L@-9Ot#`Io<%z^+;V$HNo*JnsvXoz`OCr zO4x!wMpeNv%onEcLZ1|Q0d=2%Q-E(ulz>3JFb;J;_+m{c-}G2{u6K5>^W6gz2*8+{ z0Q?sm9V-()!|ov>3D+Jd@cFhnZf~$DfhEyZ0Ua3y_o_-e1g^AOZg6M!EA|C}FMX8o zCDkqouD8JEHvvn2a%}qk@#-F*A*>I48$GxTgVjpFX7`e?w%}hty};lUZUXohQ}<=U z?)l+>7YR!A`nCy4SbeJjr|xgm*~ z0>LZw1qdj!X#?W(6zLP(pGLUAt-yv`&ua6rd%;WKTOX!&&jPP++HrpG-lDE=>5qS= iJ#V4J*JlhL?0*5J6wAQ~73C2C0000 Date: Mon, 22 Apr 2019 19:57:47 +0200 Subject: [PATCH 014/195] Move some stray area defines to the proper location --- code/game/area/Space Station 13 areas.dm | 49 ++++++++++++++++-------- code/game/area/areas.dm | 21 ---------- 2 files changed, 33 insertions(+), 37 deletions(-) diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 067223c0285..f0d8b780f0c 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -18,51 +18,68 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area var/fire = null var/atmosalm = ATMOS_ALARM_NONE - var/poweralm = 1 + var/poweralm = TRUE var/party = null - var/report_alerts = 1 // Should atmos alerts notify the AI/computers + var/report_alerts = TRUE // Should atmos alerts notify the AI/computers level = null name = "Space" icon = 'icons/turf/areas.dmi' icon_state = "unknown" layer = AREA_LAYER + plane = BLACKNESS_PLANE //Keeping this on the default plane, GAME_PLANE, will make area overlays fail to render on FLOOR_PLANE. luminosity = 0 mouse_opacity = MOUSE_OPACITY_TRANSPARENT invisibility = INVISIBILITY_LIGHTING var/valid_territory = TRUE //used for cult summoning areas on station zlevel var/map_name // Set in New(); preserves the name set by the map maker, even if renamed by the Blueprints. - var/lightswitch = 1 + var/lightswitch = TRUE var/eject = null var/debug = 0 - var/requires_power = 1 + var/requires_power = TRUE var/always_unpowered = 0 //this gets overriden to 1 for space in area/New() - var/power_equip = 1 - var/power_light = 1 - var/power_environ = 1 + var/power_equip = TRUE + var/power_light = TRUE + var/power_environ = TRUE var/music = null - var/used_equip = 0 - var/used_light = 0 - var/used_environ = 0 + var/used_equip = FALSE + var/used_light = FALSE + var/used_environ = FALSE var/static_equip - var/static_light = 0 + var/static_light = FALSE var/static_environ - var/has_gravity = 1 + var/has_gravity = TRUE var/list/apc = list() var/no_air = null // var/list/lights // list of all lights on this area - var/air_doors_activated = 0 + var/air_doors_activated = FALSE - var/tele_proof = 0 - var/no_teleportlocs = 0 + var/tele_proof = FALSE + var/no_teleportlocs = FALSE - var/outdoors = 0 //For space, the asteroid, lavaland, etc. Used with blueprints to determine if we are adding a new area (vs editing a station room) + var/outdoors = FALSE //For space, the asteroid, lavaland, etc. Used with blueprints to determine if we are adding a new area (vs editing a station room) var/xenobiology_compatible = FALSE //Can the Xenobio management console transverse this area by default? var/nad_allowed = FALSE //is the station NAD allowed on this area? + // This var is used with the maploader (modules/awaymissions/maploader/reader.dm) + // if this is 1, when used in a map snippet, this will instantiate a unique + // area from any other instances already present (meaning you can have + // separate APCs, and so on) + var/there_can_be_many = 0 + + var/global/global_uid = 0 + var/uid + + var/list/ambientsounds = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg',\ + 'sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg',\ + 'sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg',\ + 'sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg',\ + 'sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg',\ + 'sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg') + /*Adding a wizard area teleport list because motherfucking lag -- Urist*/ /*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/ var/list/teleportlocs = list() diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 6f25d1b23aa..9d1867046a7 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -1,24 +1,3 @@ -// Areas.dm - -// === -/area - var/global/global_uid = 0 - var/uid - var/list/ambientsounds = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg',\ - 'sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg',\ - 'sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg',\ - 'sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg',\ - 'sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg',\ - 'sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg') - - // This var is used with the maploader (modules/awaymissions/maploader/reader.dm) - // if this is 1, when used in a map snippet, this will instantiate a unique - // area from any other instances already present (meaning you can have - // separate APCs, and so on) - var/there_can_be_many = 0 - plane = BLACKNESS_PLANE //Keeping this on the default plane, GAME_PLANE, will make area overlays fail to render on FLOOR_PLANE. - - /area/New() ..() From fb4173177219024b1a5163a64b289235f6760e43 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 22 Apr 2019 20:10:54 +0200 Subject: [PATCH 015/195] 0 --> FALSE --- code/game/area/Space Station 13 areas.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index f0d8b780f0c..ced4bf0eaf6 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -68,7 +68,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station // if this is 1, when used in a map snippet, this will instantiate a unique // area from any other instances already present (meaning you can have // separate APCs, and so on) - var/there_can_be_many = 0 + var/there_can_be_many = FALSE var/global/global_uid = 0 var/uid From 75b06fe82cc15a92a0154321d499cf3bb0ec73d5 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 22 Apr 2019 21:47:08 +0200 Subject: [PATCH 016/195] Lighting fixes --- code/__DEFINES/lighting.dm | 10 ++ code/__DEFINES/misc.dm | 27 ----- code/game/area/Space Station 13 areas.dm | 132 +++++++---------------- code/game/area/areas.dm | 67 +++++++++++- code/game/turfs/turf.dm | 3 - code/modules/events/aurora_caelus.dm | 26 +++-- code/modules/lighting/lighting_object.dm | 2 +- code/modules/lighting/lighting_setup.dm | 1 - 8 files changed, 127 insertions(+), 141 deletions(-) diff --git a/code/__DEFINES/lighting.dm b/code/__DEFINES/lighting.dm index 37203792f76..7357c5f441e 100644 --- a/code/__DEFINES/lighting.dm +++ b/code/__DEFINES/lighting.dm @@ -47,6 +47,16 @@ #define LIGHT_COLOR_HOLY_MAGIC "#FFF743" //slightly desaturated bright yellow. #define LIGHT_COLOR_BLOOD_MAGIC "#D00000" //deep crimson +#define LIGHT_COLOR_PURE_CYAN "#00FFFF" +#define LIGHT_COLOR_DARKRED "#A91515" +#define LIGHT_COLOR_PURE_RED "#FF0000" +#define LIGHT_COLOR_DARKGREEN "#50AB00" +#define LIGHT_COLOR_PURE_GREEN "#00FF00" +#define LIGHT_COLOR_LIGHTBLUE "#0099FF" +#define LIGHT_COLOR_DARKBLUE "#315AB4" +#define LIGHT_COLOR_PURE_BLUE "#0000FF" +#define LIGHT_COLOR_FADEDPURPLE "#A97FAA" + //These ones aren't a direct colour like the ones above, because nothing would fit #define LIGHT_COLOR_FIRE "#FAA019" //Warm orange color, leaning strongly towards yellow. rgb(250, 160, 25) #define LIGHT_COLOR_LAVA "#C48A18" //Very warm yellow, leaning slightly towards orange. rgb(196, 138, 24) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 106c1900a82..eae4478d0a1 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -114,33 +114,6 @@ #define CHRISTMAS "Christmas" #define FRIDAY_13TH "Friday the 13th" -//Light color defs, for light-emitting things -//Some defs may be pure color- this is for neatness, and configurability. Changing #define COLOR_ is a bad idea. -#define LIGHT_COLOR_CYAN "#7BF9FF" -#define LIGHT_COLOR_PURE_CYAN "#00FFFF" - -#define LIGHT_COLOR_RED "#B40000" -#define LIGHT_COLOR_ORANGE "#FF9933" -#define LIGHT_COLOR_DARKRED "#A91515" -#define LIGHT_COLOR_PURE_RED "#FF0000" - -#define LIGHT_COLOR_GREEN "#00CC00" -#define LIGHT_COLOR_DARKGREEN "#50AB00" -#define LIGHT_COLOR_PURE_GREEN "#00FF00" - -#define LIGHT_COLOR_BLUE "#6496FA" //Cold, diluted blue. rgb(100, 150, 250) -#define LIGHT_COLOR_LIGHTBLUE "#0099FF" -#define LIGHT_COLOR_DARKBLUE "#315AB4" -#define LIGHT_COLOR_PURE_BLUE "#0000FF" - -#define LIGHT_COLOR_FADEDPURPLE "#A97FAA" -#define LIGHT_COLOR_PURPLE "#CD00CD" -#define LIGHT_COLOR_PINK "#FF33CC" - -#define LIGHT_COLOR_YELLOW "#E1E17D" //Dimmed yellow, leaning kaki. rgb(225, 225, 125) - -#define LIGHT_COLOR_WHITE "#FFFFFF" - #define RESIZE_DEFAULT_SIZE 1 //transfer_ai() defines. Main proc in ai_core.dm diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 3fa1c169521..ca444b4abdc 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -13,73 +13,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station */ - - -/area - var/fire = null - var/atmosalm = ATMOS_ALARM_NONE - var/poweralm = TRUE - var/party = null - var/report_alerts = TRUE // Should atmos alerts notify the AI/computers - level = null - name = "Space" - icon = 'icons/turf/areas.dmi' - icon_state = "unknown" - layer = AREA_LAYER - plane = BLACKNESS_PLANE //Keeping this on the default plane, GAME_PLANE, will make area overlays fail to render on FLOOR_PLANE. - luminosity = 0 - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - invisibility = INVISIBILITY_LIGHTING - var/valid_territory = TRUE //used for cult summoning areas on station zlevel - var/map_name // Set in New(); preserves the name set by the map maker, even if renamed by the Blueprints. - var/lightswitch = TRUE - - var/eject = null - - var/debug = 0 - var/requires_power = TRUE - var/always_unpowered = 0 //this gets overriden to 1 for space in area/New() - - var/power_equip = TRUE - var/power_light = TRUE - var/power_environ = TRUE - var/music = null - var/used_equip = FALSE - var/used_light = FALSE - var/used_environ = FALSE - var/static_equip - var/static_light = FALSE - var/static_environ - - var/has_gravity = TRUE - var/list/apc = list() - var/no_air = null - - var/air_doors_activated = FALSE - - var/tele_proof = FALSE - var/no_teleportlocs = FALSE - - var/outdoors = FALSE //For space, the asteroid, lavaland, etc. Used with blueprints to determine if we are adding a new area (vs editing a station room) - var/xenobiology_compatible = FALSE //Can the Xenobio management console transverse this area by default? - var/nad_allowed = FALSE //is the station NAD allowed on this area? - - // This var is used with the maploader (modules/awaymissions/maploader/reader.dm) - // if this is 1, when used in a map snippet, this will instantiate a unique - // area from any other instances already present (meaning you can have - // separate APCs, and so on) - var/there_can_be_many = FALSE - - var/global/global_uid = 0 - var/uid - - var/list/ambientsounds = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg',\ - 'sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg',\ - 'sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg',\ - 'sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg',\ - 'sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg',\ - 'sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg') - /*Adding a wizard area teleport list because motherfucking lag -- Urist*/ /*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/ var/list/teleportlocs = list() @@ -137,14 +70,18 @@ var/list/ghostteleportlocs = list() /area/space icon_state = "space" - requires_power = 1 - always_unpowered = 1 - power_light = 0 - power_equip = 0 - power_environ = 0 + requires_power = TRUE + always_unpowered = TRUE + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED + power_light = FALSE + power_equip = FALSE + power_environ = FALSE valid_territory = FALSE outdoors = 1 ambientsounds = list('sound/ambience/ambispace.ogg','sound/music/title2.ogg','sound/music/space.ogg','sound/music/traitor.ogg') + +/area/space/nearstation + icon_state = "space_near" dynamic_lighting = DYNAMIC_LIGHTING_IFSTARLIGHT /area/space/atmosalert() @@ -167,8 +104,9 @@ var/list/ghostteleportlocs = list() //All shuttles show now be under shuttle since we have smooth-wall code. /area/shuttle - no_teleportlocs = 1 - requires_power = 0 + no_teleportlocs = TRUE + requires_power = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED valid_territory = FALSE /area/shuttle/arrival @@ -504,7 +442,7 @@ var/list/ghostteleportlocs = list() icon_state = "start" requires_power = 0 luminosity = 1 - dynamic_lighting = 0 + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED has_gravity = 1 // === end remove @@ -519,8 +457,8 @@ var/list/ghostteleportlocs = list() /area/centcom name = "\improper Centcom" icon_state = "centcom" - requires_power = 0 - dynamic_lighting = 0 + requires_power = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED nad_allowed = TRUE /area/centcom/control @@ -573,6 +511,7 @@ var/list/ghostteleportlocs = list() /area/syndicate_mothership/control name = "\improper Syndicate Control Room" icon_state = "syndie-control" + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/syndicate_mothership/elite_squad name = "\improper Syndicate Elite Squad" @@ -587,14 +526,14 @@ var/list/ghostteleportlocs = list() /area/asteroid // -- TLE name = "\improper Asteroid" icon_state = "asteroid" - requires_power = 0 + requires_power = FALSE valid_territory = FALSE /area/asteroid/cave // -- TLE name = "\improper Asteroid - Underground" icon_state = "cave" - requires_power = 0 - outdoors = 1 + requires_power = FALSE + outdoors = TRUE /area/asteroid/artifactroom name = "\improper Asteroid - Artifact" @@ -603,17 +542,19 @@ var/list/ghostteleportlocs = list() /area/tdome name = "\improper Thunderdome" icon_state = "thunder" - requires_power = 0 - dynamic_lighting = 0 + requires_power = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/tdome/arena_source name = "\improper Thunderdome Arena Template" icon_state = "thunder" + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/tdome/arena name = "\improper Thunderdome Arena" icon_state = "thunder" + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/tdome/tdome1 name = "\improper Thunderdome (Team 1)" @@ -687,20 +628,21 @@ var/list/ghostteleportlocs = list() /area/abductor_ship name = "\improper Abductor Ship" icon_state = "yellow" - requires_power = 0 - has_gravity = 1 - dynamic_lighting = 0 + requires_power = FALSE + has_gravity = TRUE + dynamic_lighting = FALSE /area/wizard_station name = "\improper Wizard's Den" icon_state = "yellow" - requires_power = 0 + requires_power = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/ninja name = "\improper Ninja Area Parent" icon_state = "ninjabase" - requires_power = 0 - no_teleportlocs = 1 + requires_power = FALSE + no_teleportlocs = TRUE /area/ninja/outpost name = "\improper SpiderClan Outpost" @@ -711,9 +653,9 @@ var/list/ghostteleportlocs = list() /area/vox_station name = "\improper Vox Base" icon_state = "yellow" - requires_power = 0 - dynamic_lighting = 0 - no_teleportlocs = 1 + requires_power = FALSE + dynamic_lighting = FALSE + no_teleportlocs = TRUE /area/vox_station/transit name = "\improper Hyperspace" @@ -2554,9 +2496,9 @@ var/list/ghostteleportlocs = list() /area/awaymission/beach name = "Beach" icon_state = "beach" - luminosity = 1 - dynamic_lighting = 0 - requires_power = 0 + luminosity = TRUE + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED + requires_power = FALSE ambientsounds = list('sound/ambience/shore.ogg', 'sound/ambience/seag1.ogg','sound/ambience/seag2.ogg','sound/ambience/seag2.ogg') /area/awaymission/undersea @@ -2668,7 +2610,7 @@ var/list/ghostteleportlocs = list() /area/vr name = "VR" requires_power = 0 - dynamic_lighting = 0 + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED no_teleportlocs = 1 diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index eb1ef3c1458..672c3a0f18c 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -1,9 +1,70 @@ -/area/New() - ..() +/area + var/fire = null + var/atmosalm = ATMOS_ALARM_NONE + var/poweralm = TRUE + var/party = null + var/report_alerts = TRUE // Should atmos alerts notify the AI/computers + level = null + name = "Space" + icon = 'icons/turf/areas.dmi' + icon_state = "unknown" + layer = AREA_LAYER + plane = BLACKNESS_PLANE //Keeping this on the default plane, GAME_PLANE, will make area overlays fail to render on FLOOR_PLANE. + luminosity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + invisibility = INVISIBILITY_LIGHTING + var/valid_territory = TRUE //used for cult summoning areas on station zlevel + var/map_name // Set in New(); preserves the name set by the map maker, even if renamed by the Blueprints. + var/lightswitch = TRUE - GLOB.all_areas += src + var/eject = null + + var/debug = 0 + var/requires_power = TRUE + var/always_unpowered = 0 //this gets overriden to 1 for space in area/New() + + var/power_equip = TRUE + var/power_light = TRUE + var/power_environ = TRUE + var/music = null + var/used_equip = FALSE + var/used_light = FALSE + var/used_environ = FALSE + var/static_equip + var/static_light = FALSE + var/static_environ + + var/has_gravity = TRUE + var/list/apc = list() + var/no_air = null + + var/air_doors_activated = FALSE + + var/tele_proof = FALSE + var/no_teleportlocs = FALSE + + var/outdoors = FALSE //For space, the asteroid, lavaland, etc. Used with blueprints to determine if we are adding a new area (vs editing a station room) + var/xenobiology_compatible = FALSE //Can the Xenobio management console transverse this area by default? + var/nad_allowed = FALSE //is the station NAD allowed on this area? + + // This var is used with the maploader (modules/awaymissions/maploader/reader.dm) + // if this is 1, when used in a map snippet, this will instantiate a unique + // area from any other instances already present (meaning you can have + // separate APCs, and so on) + var/there_can_be_many = FALSE + + var/global/global_uid = 0 + var/uid + + var/list/ambientsounds = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg',\ + 'sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg',\ + 'sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg',\ + 'sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg',\ + 'sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg',\ + 'sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg') /area/Initialize(mapload) + GLOB.all_areas += src icon_state = "" layer = AREA_LAYER uid = ++global_uid diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 86f94ee37d2..f9f19d4d4c4 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -201,9 +201,6 @@ W.blueprint_data = old_blueprint_data - for(var/turf/space/S in range(W,1)) - S.update_starlight() - recalc_atom_opacity() if(SSlighting.initialized) diff --git a/code/modules/events/aurora_caelus.dm b/code/modules/events/aurora_caelus.dm index 58302950b5e..62de79a19cb 100644 --- a/code/modules/events/aurora_caelus.dm +++ b/code/modules/events/aurora_caelus.dm @@ -17,10 +17,11 @@ We hope you enjoy the lights.", "Harmless ions approaching", new_sound = 'sound/ M.playsound_local(null, 'sound/ambience/aurora_caelus.ogg', 20, FALSE, pressure_affected = FALSE) /datum/event/aurora_caelus/start() - for(var/s in GLOB.station_level_space_turfs) - var/turf/space/S = s - S.set_light(S.light_range * 3, S.light_power * 0.5, aurora_colors[1]) - CHECK_TICK + for(var/area in GLOB.all_areas) + var/area/A = area + if(initial(A.dynamic_lighting) == DYNAMIC_LIGHTING_IFSTARLIGHT) + for(var/turf/space/S in A) + S.set_light(S.light_range * 3, S.light_power * 0.5) /datum/event/aurora_caelus/tick() if(aurora_progress >= aurora_colors.len) @@ -28,15 +29,18 @@ We hope you enjoy the lights.", "Harmless ions approaching", new_sound = 'sound/ if(activeFor % 5 == 0) aurora_progress++ var/aurora_color = aurora_colors[aurora_progress] - for(var/s in GLOB.station_level_space_turfs) - var/turf/space/S = s - S.set_light(l_color = aurora_color) - CHECK_TICK + for(var/area in GLOB.all_areas) + var/area/A = area + if(initial(A.dynamic_lighting) == DYNAMIC_LIGHTING_IFSTARLIGHT) + for(var/turf/space/S in A) + S.set_light(l_color = aurora_color) /datum/event/aurora_caelus/end() - for(var/s in GLOB.station_level_space_turfs) - var/turf/space/S = s - fade_to_black(S) + for(var/area in GLOB.all_areas) + var/area/A = area + if(initial(A.dynamic_lighting) == DYNAMIC_LIGHTING_IFSTARLIGHT) + for(var/turf/space/S in A) + fade_to_black(S) event_announcement.Announce("The Aurora Caelus event is now ending. Starlight conditions will slowly return to normal. \ When this has concluded, please return to your workplace and continue work as normal. \ Have a pleasant shift, [station_name()], and thank you for watching with us.", diff --git a/code/modules/lighting/lighting_object.dm b/code/modules/lighting/lighting_object.dm index 6083c7af7f1..586668ec139 100644 --- a/code/modules/lighting/lighting_object.dm +++ b/code/modules/lighting/lighting_object.dm @@ -7,7 +7,7 @@ icon_state = "transparent" color = LIGHTING_BASE_MATRIX plane = LIGHTING_PLANE - mouse_opacity = MOUSE_OPACITY_TRANSPARENT + mouse_opacity = MOUSE_OPACITY_TRANSPARENT layer = LIGHTING_LAYER invisibility = INVISIBILITY_LIGHTING diff --git a/code/modules/lighting/lighting_setup.dm b/code/modules/lighting/lighting_setup.dm index 6c1dab13ec6..68119ba3921 100644 --- a/code/modules/lighting/lighting_setup.dm +++ b/code/modules/lighting/lighting_setup.dm @@ -4,7 +4,6 @@ continue for(var/turf/T in A) - if(!IS_DYNAMIC_LIGHTING(T)) continue From ab7fb176f67e455d594aeedb4c279bfb1370ea77 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 22 Apr 2019 22:04:31 +0200 Subject: [PATCH 017/195] Opacity fix, re-add rotatium --- code/game/turfs/space/space.dm | 3 +++ code/game/turfs/turf.dm | 3 +++ code/modules/events/vent_clog.dm | 2 +- code/modules/reagents/chemistry/reagents/drugs.dm | 4 ++-- code/modules/reagents/chemistry/recipes/toxins.dm | 9 ++++++++- 5 files changed, 17 insertions(+), 4 deletions(-) diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index 66a2db0f970..342c7f23ff1 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -27,6 +27,9 @@ if (light_power && light_range) update_light() + if (opacity) + has_opaque_atom = TRUE + return INITIALIZE_HINT_NORMAL /turf/space/Destroy(force) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index f9f19d4d4c4..dc7de45f695 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -51,6 +51,9 @@ if(light_power && light_range) update_light() + if (opacity) + has_opaque_atom = TRUE + /hook/startup/proc/smooth_world() var/watch = start_watch() log_startup_progress("Smoothing atoms...") diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index 9b1588e1161..29b0b44e721 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -23,7 +23,7 @@ "atrazine","banana","charcoal","space_drugs","methamphetamine","holywater","ethanol","hot_coco","facid", "blood","morphine","ether","fluorine","mutadone","mutagen","hydrocodone","fuel", "haloperidol","lsd","syndicate_nanites","lipolicide","frostoil","salglu_solution","beepskysmash", - "omnizine", "amanitin", "neurotoxin", "synaptizine") + "omnizine", "amanitin", "neurotoxin", "synaptizine", "rotatium") var/datum/reagents/R = new/datum/reagents(50) R.my_atom = vent R.add_reagent(pick(gunk), 50) diff --git a/code/modules/reagents/chemistry/reagents/drugs.dm b/code/modules/reagents/chemistry/reagents/drugs.dm index 8a4d9b338ed..9e96ed5b56b 100644 --- a/code/modules/reagents/chemistry/reagents/drugs.dm +++ b/code/modules/reagents/chemistry/reagents/drugs.dm @@ -616,7 +616,7 @@ /datum/reagent/rotatium/on_mob_life(mob/living/carbon/M) if(M.hud_used) if(current_cycle >= 20 && current_cycle % 20 == 0) - var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"]) + var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"]) var/rotation = min(round(current_cycle / 20), 89) // By this point the player is probably puking and quitting anyway for(var/whole_screen in screens) animate(whole_screen, transform = matrix(rotation, MATRIX_ROTATE), time = 5, easing = QUAD_EASING, loop = -1) @@ -625,7 +625,7 @@ /datum/reagent/rotatium/on_mob_delete(mob/living/M) if(M && M.hud_used) - var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"]) + var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"]) for(var/whole_screen in screens) animate(whole_screen, transform = matrix(), time = 5, easing = QUAD_EASING) ..() diff --git a/code/modules/reagents/chemistry/recipes/toxins.dm b/code/modules/reagents/chemistry/recipes/toxins.dm index cdc10bcbcc5..6d7fa9028a8 100644 --- a/code/modules/reagents/chemistry/recipes/toxins.dm +++ b/code/modules/reagents/chemistry/recipes/toxins.dm @@ -174,4 +174,11 @@ required_reagents = list("formaldehyde" = 1, "sodium" = 1, "chlorine" = 1, "lithium" = 1) result_amount = 4 mix_message = "The mixture thins and loses all color." - mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' \ No newline at end of file + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/chemical_reaction/rotatium + name = "Rotatium" + id = "Rotatium" + results = "rotatium" + required_reagents = list("lsd" = 1, "teslium" = 1, "fentanyl" = 1) + mix_message = "After sparks, fire, and the smell of LSD, the mix is constantly spinning with no stop in sight." \ No newline at end of file From 3285efd36c29da2fec6fe0e2dd08b5d5d40385d0 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 22 Apr 2019 22:43:21 +0200 Subject: [PATCH 018/195] Final lighting updates --- code/game/area/Space Station 13 areas.dm | 54 +- .../mission_code/blackmarketpackers.dm | 11 +- .../awaymissions/mission_code/clownplanet.dm | 13 +- .../awaymissions/mission_code/wildwest.dm | 13 +- code/modules/awaymissions/zvis.dm | 633 +++++++++--------- code/modules/lighting/lighting_setup.dm | 2 +- .../reagents/chemistry/recipes/toxins.dm | 2 +- 7 files changed, 351 insertions(+), 377 deletions(-) diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index ca444b4abdc..c9fc4a64e91 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -55,11 +55,11 @@ var/list/ghostteleportlocs = list() name = "\improper Arrival Area" icon_state = "start" -/area/admin/ +/area/admin name = "\improper Admin Room" icon_state = "start" requires_power = 0 - dynamic_lighting = 0 + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/adminconstruction @@ -106,7 +106,6 @@ var/list/ghostteleportlocs = list() /area/shuttle no_teleportlocs = TRUE requires_power = FALSE - dynamic_lighting = DYNAMIC_LIGHTING_FORCED valid_territory = FALSE /area/shuttle/arrival @@ -423,7 +422,7 @@ var/list/ghostteleportlocs = list() /area/shuttle/trade name = "Trade Shuttle" icon_state = "shuttle" - requires_power = 0 + requires_power = FALSE /area/shuttle/trade/sol name = "Sol Freighter" @@ -440,17 +439,16 @@ var/list/ghostteleportlocs = list() /area/start // will be unused once kurper gets his login interface patch done name = "start area" icon_state = "start" - requires_power = 0 - luminosity = 1 + requires_power = FALSE dynamic_lighting = DYNAMIC_LIGHTING_DISABLED - has_gravity = 1 + has_gravity = TRUE // === end remove /area/alien name = "\improper Alien base" icon_state = "yellow" - requires_power = 0 + requires_power = FALSE // CENTCOM @@ -458,7 +456,7 @@ var/list/ghostteleportlocs = list() name = "\improper Centcom" icon_state = "centcom" requires_power = FALSE - dynamic_lighting = DYNAMIC_LIGHTING_FORCED + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED nad_allowed = TRUE /area/centcom/control @@ -511,7 +509,6 @@ var/list/ghostteleportlocs = list() /area/syndicate_mothership/control name = "\improper Syndicate Control Room" icon_state = "syndie-control" - dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/syndicate_mothership/elite_squad name = "\improper Syndicate Elite Squad" @@ -543,18 +540,16 @@ var/list/ghostteleportlocs = list() name = "\improper Thunderdome" icon_state = "thunder" requires_power = FALSE - dynamic_lighting = DYNAMIC_LIGHTING_FORCED + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/tdome/arena_source name = "\improper Thunderdome Arena Template" icon_state = "thunder" - dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/tdome/arena name = "\improper Thunderdome Arena" icon_state = "thunder" - dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/tdome/tdome1 name = "\improper Thunderdome (Team 1)" @@ -630,13 +625,12 @@ var/list/ghostteleportlocs = list() icon_state = "yellow" requires_power = FALSE has_gravity = TRUE - dynamic_lighting = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/wizard_station name = "\improper Wizard's Den" icon_state = "yellow" requires_power = FALSE - dynamic_lighting = DYNAMIC_LIGHTING_FORCED /area/ninja name = "\improper Ninja Area Parent" @@ -654,7 +648,7 @@ var/list/ghostteleportlocs = list() name = "\improper Vox Base" icon_state = "yellow" requires_power = FALSE - dynamic_lighting = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED no_teleportlocs = TRUE /area/vox_station/transit @@ -1237,7 +1231,7 @@ var/list/ghostteleportlocs = list() /area/holodeck name = "\improper Holodeck" icon_state = "Holodeck" - dynamic_lighting = 0 + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/holodeck/alphadeck name = "\improper Holodeck Alpha" @@ -2306,26 +2300,22 @@ var/list/ghostteleportlocs = list() /area/turret_protected/AIsatextFP name = "\improper AI Sat Ext" icon_state = "storage" - luminosity = 1 - dynamic_lighting = 0 + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/turret_protected/AIsatextFS name = "\improper AI Sat Ext" icon_state = "storage" - luminosity = 1 - dynamic_lighting = 0 + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/turret_protected/AIsatextAS name = "\improper AI Sat Ext" icon_state = "storage" - luminosity = 1 - dynamic_lighting = 0 + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/turret_protected/AIsatextAP name = "\improper AI Sat Ext" icon_state = "storage" - luminosity = 1 - dynamic_lighting = 0 + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED /area/turret_protected/NewAIMain name = "\improper AI Main New" @@ -2419,31 +2409,26 @@ var/list/ghostteleportlocs = list() /area/awaymission/wwmines name = "\improper Wild West Mines" icon_state = "away1" - luminosity = 1 - requires_power = 0 + requires_power = FALSE /area/awaymission/wwgov name = "\improper Wild West Mansion" icon_state = "away2" - luminosity = 1 - requires_power = 0 + requires_power = FALSE /area/awaymission/wwrefine name = "\improper Wild West Refinery" icon_state = "away3" - luminosity = 1 - requires_power = 0 + requires_power = FALSE /area/awaymission/wwvault name = "\improper Wild West Vault" icon_state = "away3" - luminosity = 0 /area/awaymission/wwvaultdoors name = "\improper Wild West Vault Doors" // this is to keep the vault area being entirely lit because of requires_power icon_state = "away2" - requires_power = 0 - luminosity = 0 + requires_power = FALSE /area/awaymission/desert name = "Mars" @@ -2496,7 +2481,6 @@ var/list/ghostteleportlocs = list() /area/awaymission/beach name = "Beach" icon_state = "beach" - luminosity = TRUE dynamic_lighting = DYNAMIC_LIGHTING_DISABLED requires_power = FALSE ambientsounds = list('sound/ambience/shore.ogg', 'sound/ambience/seag1.ogg','sound/ambience/seag2.ogg','sound/ambience/seag2.ogg') diff --git a/code/modules/awaymissions/mission_code/blackmarketpackers.dm b/code/modules/awaymissions/mission_code/blackmarketpackers.dm index c2d10d7c97d..73e288b56ed 100644 --- a/code/modules/awaymissions/mission_code/blackmarketpackers.dm +++ b/code/modules/awaymissions/mission_code/blackmarketpackers.dm @@ -3,25 +3,24 @@ /area/awaymission/BMPship name = "\improper BMP Asteroids" icon_state = "away" - luminosity = 0 - report_alerts = 0 + report_alerts = FALSE /area/awaymission/BMPship/Aft name = "\improper Aft Block" icon_state = "away1" - requires_power = 1 + requires_power = TRUE /area/awaymission/BMPship/Midship name = "\improper Midship Block" icon_state = "away2" - requires_power = 1 + requires_power = TRUE /area/awaymission/BMPship/Fore name = "\improper Fore Block" icon_state = "away3" - requires_power = 1 + requires_power = TRUE /area/awaymission/BMPship/Gate name = "\improper Gateway Block" icon_state = "away4" - requires_power = 1 \ No newline at end of file + requires_power = TRUE \ No newline at end of file diff --git a/code/modules/awaymissions/mission_code/clownplanet.dm b/code/modules/awaymissions/mission_code/clownplanet.dm index 8d64d3074d2..8ac9fd1fb4c 100644 --- a/code/modules/awaymissions/mission_code/clownplanet.dm +++ b/code/modules/awaymissions/mission_code/clownplanet.dm @@ -3,19 +3,16 @@ /area/planet/clown name = "\improper Clown Planet" icon_state = "honk" - luminosity = 1 - dynamic_lighting = 0 - requires_power = 0 - report_alerts = 0 + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED + requires_power = FALSE + report_alerts = FALSE /area/awaymission/clownplanet/miningtown name = "\improper Clown Planet - Bananium-o-Rama" icon_state = "away1" - luminosity = 1 - requires_power = 0 + requires_power = FALSE /area/awaymission/clownplanet/mine name = "\improper Clown Planet - Bananium-o-Rama Mines" icon_state = "away2" - luminosity = 1 - requires_power = 0 \ No newline at end of file + requires_power = FALSE \ No newline at end of file diff --git a/code/modules/awaymissions/mission_code/wildwest.dm b/code/modules/awaymissions/mission_code/wildwest.dm index 91c09d15f30..a24da0d6df7 100644 --- a/code/modules/awaymissions/mission_code/wildwest.dm +++ b/code/modules/awaymissions/mission_code/wildwest.dm @@ -9,31 +9,26 @@ /area/awaymission/wwmines name = "\improper Wild West Mines" icon_state = "away1" - luminosity = 1 - requires_power = 0 + requires_power = FALSE /area/awaymission/wwgov name = "\improper Wild West Mansion" icon_state = "away2" - luminosity = 1 - requires_power = 0 + requires_power = FALSE /area/awaymission/wwrefine name = "\improper Wild West Refinery" icon_state = "away3" - luminosity = 1 - requires_power = 0 + requires_power = FALSE /area/awaymission/wwvault name = "\improper Wild West Vault" icon_state = "away3" - luminosity = 0 /area/awaymission/wwvaultdoors name = "\improper Wild West Vault Doors" // this is to keep the vault area being entirely lit because of requires_power icon_state = "away2" - requires_power = 0 - luminosity = 0 + requires_power = FALSE /* * Wish Granter diff --git a/code/modules/awaymissions/zvis.dm b/code/modules/awaymissions/zvis.dm index e6e8e610a4d..b8f635b6344 100644 --- a/code/modules/awaymissions/zvis.dm +++ b/code/modules/awaymissions/zvis.dm @@ -1,368 +1,367 @@ -// /area/awaymission/upperlevel -// name = "Open Space" -// color = "#888" -// dynamic_lighting = 0 -// requires_power = 0 +/area/awaymission/upperlevel + name = "Open Space" + color = "#888" + dynamic_lighting = 0 + requires_power = 0 -// // Used by /turf/unsimulated/floor/upperlevel as a reference for where the other floor is -// /obj/effect/levelref -// name = "level reference" -// icon = 'icons/mob/screen_gen.dmi' -// icon_state = "x2" -// invisibility = 101 +// Used by /turf/unsimulated/floor/upperlevel as a reference for where the other floor is +/obj/effect/levelref + name = "level reference" + icon = 'icons/mob/screen_gen.dmi' + icon_state = "x2" + invisibility = 101 -// var/id = null -// var/obj/effect/levelref/other = null -// var/offset_x -// var/offset_y -// var/offset_z -// var/global/list/levels[0] + var/id = null + var/obj/effect/levelref/other = null + var/offset_x + var/offset_y + var/offset_z + var/global/list/levels[0] -// /obj/effect/levelref/New() -// ..() -// levels += src +/obj/effect/levelref/New() + ..() + levels += src -// /obj/effect/levelref/Initialize() -// ..() -// for(var/obj/effect/levelref/O in levels) -// if(id == O.id && O != src) -// other = O -// update_offset() -// O.other = src -// O.update_offset() -// for(var/turf/unsimulated/floor/upperlevel/U in get_area(loc)) -// U.init(src) -// return +/obj/effect/levelref/Initialize() + ..() + for(var/obj/effect/levelref/O in levels) + if(id == O.id && O != src) + other = O + update_offset() + O.other = src + O.update_offset() + for(var/turf/unsimulated/floor/upperlevel/U in get_area(loc)) + U.init(src) + return -// /obj/effect/levelref/Destroy() -// levels -= src -// return ..() +/obj/effect/levelref/Destroy() + levels -= src + return ..() -// /obj/effect/levelref/proc/update_offset() -// offset_x = other.x - x -// offset_y = other.y - y -// offset_z = other.z - z +/obj/effect/levelref/proc/update_offset() + offset_x = other.x - x + offset_y = other.y - y + offset_z = other.z - z -// // Used by /turf/unsimulated/floor/upperlevel and /obj/effect/view_portal/visual -// // to know if the world changed on the remote side -// /obj/effect/portal_sensor -// invisibility = 101 -// var/light_hash = -1 -// var/triggered_this_tick = 0 -// var/datum/owner // owner that receive signals -// var/list/params[0] // what to send to the main object to indicate which sensor -// var/trigger_limit = 5 // number of time we're allowed to trigger per ptick +// Used by /turf/unsimulated/floor/upperlevel and /obj/effect/view_portal/visual +// to know if the world changed on the remote side +/obj/effect/portal_sensor + invisibility = 101 + var/required_color = -1 + var/triggered_this_tick = 0 + var/datum/owner // owner that receive signals + var/list/params[0] // what to send to the main object to indicate which sensor + var/trigger_limit = 5 // number of time we're allowed to trigger per ptick -// /obj/effect/portal_sensor/New(loc, o, ...) -// ..() -// owner = o -// if(args.len >= 3) -// params = args.Copy(3) -// processing_objects += src -// trigger() +/obj/effect/portal_sensor/New(loc, o, ...) + ..() + owner = o + if(args.len >= 3) + params = args.Copy(3) + processing_objects += src + trigger() -// /obj/effect/portal_sensor/Destroy() -// processing_objects -= src -// return ..() +/obj/effect/portal_sensor/Destroy() + processing_objects -= src + return ..() -// /obj/effect/portal_sensor/Crossed(A) -// trigger() +/obj/effect/portal_sensor/Crossed(A) + trigger() -// /obj/effect/portal_sensor/Uncrossed(A) -// trigger() +/obj/effect/portal_sensor/Uncrossed(A) + trigger() -// /obj/effect/portal_sensor/process() -// check_light() -// if(triggered_this_tick >= trigger_limit) -// call(owner, "trigger")(arglist(params)) -// triggered_this_tick = 0 +/obj/effect/portal_sensor/process() + check_light() + if(triggered_this_tick >= trigger_limit) + call(owner, "trigger")(arglist(params)) + triggered_this_tick = 0 -// /obj/effect/portal_sensor/proc/trigger() -// triggered_this_tick++ -// if(triggered_this_tick < trigger_limit) -// call(owner, "trigger")(arglist(params)) +/obj/effect/portal_sensor/proc/trigger() + triggered_this_tick++ + if(triggered_this_tick < trigger_limit) + call(owner, "trigger")(arglist(params)) -// /obj/effect/portal_sensor/proc/check_light() -// var/turf/T = loc -// if(istype(T) && T.lighting_object && !T.lighting_object.needs_update) -// var/atom/movable/lighting_object/O = T.lighting_object -// var/hash = O.lum_r + O.lum_g + O.lum_b -// if(hash != light_hash) -// light_hash = hash -// trigger() -// else -// if(light_hash != -1) -// light_hash = -1 -// trigger() +/obj/effect/portal_sensor/proc/check_light() + var/turf/T = loc + if(istype(T) && T.lighting_object && !T.lighting_object.needs_update) + var/atom/movable/lighting_object/O = T.lighting_object + if(O.color != required_color) + required_color = O.color + trigger() + else + if(required_color != -1) + required_color = -1 + trigger() -// // for second floor showing floor below -// /turf/unsimulated/floor/upperlevel -// icon = 'icons/turf/areas.dmi' -// icon_state = "dark128" -// layer = AREA_LAYER + 0.5 -// appearance_flags = TILE_BOUND | KEEP_TOGETHER -// var/turf/lower_turf -// var/obj/effect/portal_sensor/sensor +// for second floor showing floor below +/turf/unsimulated/floor/upperlevel + icon = 'icons/turf/areas.dmi' + icon_state = "dark128" + layer = AREA_LAYER + 0.5 + appearance_flags = TILE_BOUND | KEEP_TOGETHER + var/turf/lower_turf + var/obj/effect/portal_sensor/sensor -// /turf/unsimulated/floor/upperlevel/New() -// ..() -// var/obj/effect/levelref/R = locate() in get_area(src) -// if(R && R.other) -// init(R) +/turf/unsimulated/floor/upperlevel/New() + ..() + var/obj/effect/levelref/R = locate() in get_area(src) + if(R && R.other) + init(R) -// /turf/unsimulated/floor/upperlevel/Destroy() -// QDEL_NULL(sensor) -// return ..() +/turf/unsimulated/floor/upperlevel/Destroy() + QDEL_NULL(sensor) + return ..() -// /turf/unsimulated/floor/upperlevel/proc/init(var/obj/effect/levelref/R) -// lower_turf = locate(x + R.offset_x, y + R.offset_y, z + R.offset_z) -// if(lower_turf) -// sensor = new(lower_turf, src) +/turf/unsimulated/floor/upperlevel/proc/init(var/obj/effect/levelref/R) + lower_turf = locate(x + R.offset_x, y + R.offset_y, z + R.offset_z) + if(lower_turf) + sensor = new(lower_turf, src) -// /turf/unsimulated/floor/upperlevel/Entered(atom/movable/AM, atom/OL, ignoreRest = 0) -// if(isliving(AM) || istype(AM, /obj)) -// if(isliving(AM)) -// var/mob/living/M = AM -// M.emote("scream") -// M.SpinAnimation(5, 1) -// AM.forceMove(lower_turf) +/turf/unsimulated/floor/upperlevel/Entered(atom/movable/AM, atom/OL, ignoreRest = 0) + if(isliving(AM) || istype(AM, /obj)) + if(isliving(AM)) + var/mob/living/M = AM + M.emote("scream") + M.SpinAnimation(5, 1) + AM.forceMove(lower_turf) -// /turf/unsimulated/floor/upperlevel/attack_ghost(mob/user) -// user.forceMove(lower_turf) +/turf/unsimulated/floor/upperlevel/attack_ghost(mob/user) + user.forceMove(lower_turf) -// /turf/unsimulated/floor/upperlevel/proc/trigger() -// name = lower_turf.name -// desc = lower_turf.desc +/turf/unsimulated/floor/upperlevel/proc/trigger() + name = lower_turf.name + desc = lower_turf.desc -// // render each atom -// underlays.Cut() -// for(var/X in list(lower_turf) + lower_turf.contents) -// var/atom/A = X -// if(A && A.invisibility <= SEE_INVISIBLE_LIVING) -// var/image/I = image(A, layer = AREA_LAYER + A.layer * 0.01, dir = A.dir) -// I.pixel_x = A.pixel_x -// I.pixel_y = A.pixel_y -// underlays += I + // render each atom + underlays.Cut() + for(var/X in list(lower_turf) + lower_turf.contents) + var/atom/A = X + if(A && A.invisibility <= SEE_INVISIBLE_LIVING) + var/image/I = image(A, layer = AREA_LAYER + A.layer * 0.01, dir = A.dir) + I.pixel_x = A.pixel_x + I.pixel_y = A.pixel_y + underlays += I -// // remote end of narnia portal -// /obj/effect/view_portal -// name = "portal target" -// icon = 'icons/mob/screen_gen.dmi' -// icon_state = "x2" -// invisibility = 101 -// anchored = 1 +// remote end of narnia portal +/obj/effect/view_portal + name = "portal target" + icon = 'icons/mob/screen_gen.dmi' + icon_state = "x2" + invisibility = 101 + anchored = 1 -// var/id = null // id of other portal turf we connect to + var/id = null // id of other portal turf we connect to -// var/obj/effect/view_portal/other = null -// var/global/list/portals[0] + var/obj/effect/view_portal/other = null + var/global/list/portals[0] -// /obj/effect/view_portal/New() -// ..() -// GLOB.portals += src +/obj/effect/view_portal/New() + ..() + GLOB.portals += src -// /obj/effect/view_portal/Initialize() -// ..() -// if(id) -// for(var/obj/effect/view_portal/O in GLOB.portals) -// if(id == O.id && O != src && can_link(O)) -// other = O -// O.other = src -// linkup() -// O.linkup() -// if(other) -// return +/obj/effect/view_portal/Initialize() + ..() + if(id) + for(var/obj/effect/view_portal/O in GLOB.portals) + if(id == O.id && O != src && can_link(O)) + other = O + O.other = src + linkup() + O.linkup() + if(other) + return -// /obj/effect/view_portal/Destroy() -// GLOB.portals -= src -// return ..() +/obj/effect/view_portal/Destroy() + GLOB.portals -= src + return ..() -// /obj/effect/view_portal/proc/can_link(obj/effect/view_portal/P) -// return P.type == /obj/effect/view_portal/visual && !P.other +/obj/effect/view_portal/proc/can_link(obj/effect/view_portal/P) + return P.type == /obj/effect/view_portal/visual && !P.other -// /obj/effect/view_portal/proc/linkup() -// // allow it to link to multiple visual nodes -// other = null +/obj/effect/view_portal/proc/linkup() + // allow it to link to multiple visual nodes + other = null -// // near end of nania portal -// /obj/effect/view_portal/visual -// name = "???" -// desc = "You'll have to get closer to clearly see what this is." +// near end of nania portal +/obj/effect/view_portal/visual + name = "???" + desc = "You'll have to get closer to clearly see what this is." -// icon = 'icons/turf/floors.dmi' -// icon_state = "loadingarea" -// opacity = 1 -// density = 1 -// invisibility = 0 -// appearance_flags = TILE_BOUND | KEEP_TOGETHER -// var/dist = 6 // dist that we render out -// var/radius = 3 // dist we render on other axis, in each direction -// var/frustrum = 0 // if 1, get wider and wider at each step outward -// var/teleport = 1 // should teleport? + icon = 'icons/turf/floors.dmi' + icon_state = "loadingarea" + opacity = 1 + density = 1 + invisibility = 0 + appearance_flags = TILE_BOUND | KEEP_TOGETHER + var/dist = 6 // dist that we render out + var/radius = 3 // dist we render on other axis, in each direction + var/frustrum = 0 // if 1, get wider and wider at each step outward + var/teleport = 1 // should teleport? -// var/list/render_block -// var/list/sensors[0] -// var/list/tiles[0] + var/list/render_block + var/list/sensors[0] + var/list/tiles[0] -// var/list/near_render_block -// var/turf/near_viewpoint + var/list/near_render_block + var/turf/near_viewpoint -// /obj/effect/view_portal/visual/Destroy() -// for(var/T in sensors) -// qdel(sensors[T]) -// sensors.Cut() -// sensors = null -// for(var/T in tiles) -// qdel(tiles[T]) -// tiles.Cut() -// tiles = null -// render_block = null -// near_render_block = null -// near_viewpoint = null -// return ..() +/obj/effect/view_portal/visual/Destroy() + for(var/T in sensors) + qdel(sensors[T]) + sensors.Cut() + sensors = null + for(var/T in tiles) + qdel(tiles[T]) + tiles.Cut() + tiles = null + render_block = null + near_render_block = null + near_viewpoint = null + return ..() -// /obj/effect/view_portal/visual/can_link(obj/effect/view_portal/P) -// return P.type == /obj/effect/view_portal +/obj/effect/view_portal/visual/can_link(obj/effect/view_portal/P) + return P.type == /obj/effect/view_portal -// /obj/effect/view_portal/visual/linkup() -// icon = null -// icon_state = null -// var/turf/Tloc = get_turf(loc) -// if(Tloc) -// Tloc.icon = null -// Tloc.icon_state = null -// Tloc.dynamic_lighting = 0 -// layer = AREA_LAYER + 0.5 +/obj/effect/view_portal/visual/linkup() + icon = null + icon_state = null + var/turf/Tloc = get_turf(loc) + if(Tloc) + Tloc.icon = null + Tloc.icon_state = null + Tloc.dynamic_lighting = 0 + layer = AREA_LAYER + 0.5 -// // setup references -// var/crossdir = angle2dir((dir2angle(dir) + 90) % 360) -// near_viewpoint = get_step(get_turf(src), GetOppositeDir(dir)) + // setup references + var/crossdir = angle2dir((dir2angle(dir) + 90) % 360) + near_viewpoint = get_step(get_turf(src), GetOppositeDir(dir)) -// // setup far turfs -// var/turf/T1 = get_turf(other) -// var/turf/T2 = T1 + // setup far turfs + var/turf/T1 = get_turf(other) + var/turf/T2 = T1 -// for(var/i in 1 to radius) -// T1 = get_step(T1, crossdir) -// T2 = get_step(T2, GetOppositeDir(crossdir)) -// if(frustrum) -// // make a trapazoid, with length dist, short end radius*2 long, -// // and 45 degree angles -// render_block = block(T1, T2) -// for(var/i in 1 to dist) -// T1 = get_step(get_step(T1, dir), crossdir) -// T2 = get_step(get_step(T2, dir), GetOppositeDir(crossdir)) -// render_block += block(T1, T2) -// else -// // else make a box dist x radius*2 -// for(var/i in 1 to dist) -// T2 = get_step(T2, dir) -// render_block = block(T1, T2) -// for(var/turf/T in render_block) -// sensors[T] = new /obj/effect/portal_sensor(T, src, 0, T) + for(var/i in 1 to radius) + T1 = get_step(T1, crossdir) + T2 = get_step(T2, GetOppositeDir(crossdir)) + if(frustrum) + // make a trapazoid, with length dist, short end radius*2 long, + // and 45 degree angles + render_block = block(T1, T2) + for(var/i in 1 to dist) + T1 = get_step(get_step(T1, dir), crossdir) + T2 = get_step(get_step(T2, dir), GetOppositeDir(crossdir)) + render_block += block(T1, T2) + else + // else make a box dist x radius*2 + for(var/i in 1 to dist) + T2 = get_step(T2, dir) + render_block = block(T1, T2) + for(var/turf/T in render_block) + sensors[T] = new /obj/effect/portal_sensor(T, src, 0, T) -// // setup turfs on this side of the portal to cover the map streaming -// // has to be done later for view() to be correct (so it happens when the walls exist) -// /obj/effect/view_portal/visual/proc/setup_near() -// var/nvs = dir & (EAST|WEST) ? near_viewpoint.x - x : near_viewpoint.y - y -// if(nvs) -// nvs = SIGN(nvs) -// // need a mob for view() to work correctly -// var/mob/M = new(near_viewpoint) -// M.see_invisible = SEE_INVISIBLE_LIVING -// near_render_block = view(M, world.view) -// qdel(M) -// for(var/A in near_render_block) -// var/turf/T = A -// if(istype(T)) -// var/ts = dir & (EAST|WEST) ? T.x - x : T.y - y -// if(ts) -// ts = SIGN(ts) -// if(nvs == ts) -// sensors[T] = new /obj/effect/portal_sensor(T, src, 1, T) -// else -// near_render_block -= T -// else -// near_render_block -= T +// setup turfs on this side of the portal to cover the map streaming +// has to be done later for view() to be correct (so it happens when the walls exist) +/obj/effect/view_portal/visual/proc/setup_near() + var/nvs = dir & (EAST|WEST) ? near_viewpoint.x - x : near_viewpoint.y - y + if(nvs) + nvs = SIGN(nvs) + // need a mob for view() to work correctly + var/mob/M = new(near_viewpoint) + M.see_invisible = SEE_INVISIBLE_LIVING + near_render_block = view(M, world.view) + qdel(M) + for(var/A in near_render_block) + var/turf/T = A + if(istype(T)) + var/ts = dir & (EAST|WEST) ? T.x - x : T.y - y + if(ts) + ts = SIGN(ts) + if(nvs == ts) + sensors[T] = new /obj/effect/portal_sensor(T, src, 1, T) + else + near_render_block -= T + else + near_render_block -= T -// /obj/effect/view_portal/visual/Bumped(atom/movable/thing) -// if((istype(thing, /obj) || isliving(thing)) && other && teleport) -// if(!near_render_block) -// setup_near() +/obj/effect/view_portal/visual/Bumped(atom/movable/thing) + if((istype(thing, /obj) || isliving(thing)) && other && teleport) + if(!near_render_block) + setup_near() -// var/mob/living/M = thing -// // make the person glide onto the dest, giving a smooth transition -// var/ox = thing.x - x -// var/oy = thing.y - y -// if(istype(M) && M.client) -// M.notransform = 1 -// // cover up client-side map loading -// M.screen_loc = "CENTER" -// M.client.screen += M -// for(var/T in tiles) -// M.client.screen += tiles[T] + var/mob/living/M = thing + // make the person glide onto the dest, giving a smooth transition + var/ox = thing.x - x + var/oy = thing.y - y + if(istype(M) && M.client) + M.notransform = 1 + // cover up client-side map loading + M.screen_loc = "CENTER" + M.client.screen += M + for(var/T in tiles) + M.client.screen += tiles[T] -// // wait a tick for the screen to replicate across network -// // or this whole exercise of covering the transition is pointless -// spawn(1) -// thing.forceMove(locate(other.x + ox, other.y + oy, other.z)) -// sleep(1) -// if(istype(M) && M.client) -// for(var/T in tiles) -// M.client.screen -= tiles[T] -// M.client.screen -= M -// M.screen_loc = initial(M.screen_loc) -// thing.forceMove(get_turf(other.loc)) -// if(istype(M) && M.client) -// M.notransform = 0 + // wait a tick for the screen to replicate across network + // or this whole exercise of covering the transition is pointless + spawn(1) + thing.forceMove(locate(other.x + ox, other.y + oy, other.z)) + sleep(1) + if(istype(M) && M.client) + for(var/T in tiles) + M.client.screen -= tiles[T] + M.client.screen -= M + M.screen_loc = initial(M.screen_loc) + thing.forceMove(get_turf(other.loc)) + if(istype(M) && M.client) + M.notransform = 0 -// /obj/effect/view_portal/visual/attack_ghost(mob/user) -// user.forceMove(get_turf(other.loc)) +/obj/effect/view_portal/visual/attack_ghost(mob/user) + user.forceMove(get_turf(other.loc)) -// /obj/effect/view_portal/visual/proc/trigger(near, turf/T) -// var/obj/effect/view_portal_dummy/D = tiles[T] -// if(D) -// D.overlays.Cut() -// else -// D = new(src, near, T) -// tiles[T] = D +/obj/effect/view_portal/visual/proc/trigger(near, turf/T) + var/obj/effect/view_portal_dummy/D = tiles[T] + if(D) + D.overlays.Cut() + else + D = new(src, near, T) + tiles[T] = D -// // render atoms to overlays of a dummy object -// if(D.name != T.name) -// D.name = T.name -// D.desc = T.desc -// for(var/AX in list(T) + T.contents) -// var/atom/A = AX -// if(A && A.invisibility <= SEE_INVISIBLE_LIVING) -// var/image/I = image(A, layer = D.layer + A.layer * 0.01, dir = A.dir) -// I.pixel_x = A.pixel_x -// I.pixel_y = A.pixel_y -// D.overlays += I + // render atoms to overlays of a dummy object + if(D.name != T.name) + D.name = T.name + D.desc = T.desc + for(var/AX in list(T) + T.contents) + var/atom/A = AX + if(A && A.invisibility <= SEE_INVISIBLE_LIVING) + var/image/I = image(A, layer = D.layer + A.layer * 0.01, dir = A.dir) + I.pixel_x = A.pixel_x + I.pixel_y = A.pixel_y + D.overlays += I -// // tile of rendered other side for narnia portal -// /obj/effect/view_portal_dummy -// var/obj/effect/view_portal/visual/owner +// tile of rendered other side for narnia portal +/obj/effect/view_portal_dummy + var/obj/effect/view_portal/visual/owner -// /obj/effect/view_portal_dummy/New(obj/effect/view_portal/visual/V, near, turf/T) -// ..() -// if(!near) -// loc = V.loc -// owner = V +/obj/effect/view_portal_dummy/New(obj/effect/view_portal/visual/V, near, turf/T) + ..() + if(!near) + loc = V.loc + owner = V -// var/ox -// var/oy -// if(near) -// ox = (T.x - V.near_viewpoint.x) -// oy = (T.y - V.near_viewpoint.y) -// layer = AREA_LAYER + 0.4 -// else -// ox = T.x - V.other.x + V.x - V.near_viewpoint.x -// oy = T.y - V.other.y + V.y - V.near_viewpoint.y -// pixel_x = 32 * (T.x - V.other.x) -// pixel_y = 32 * (T.y - V.other.y) -// layer = AREA_LAYER + 0.5 -// if(abs(ox) <= world.view && abs(oy) <= world.view) -// screen_loc = "CENTER[ox >= 0 ? "+" : ""][ox],CENTER[oy >= 0 ? "+" : ""][oy]" + var/ox + var/oy + if(near) + ox = (T.x - V.near_viewpoint.x) + oy = (T.y - V.near_viewpoint.y) + layer = AREA_LAYER + 0.4 + else + ox = T.x - V.other.x + V.x - V.near_viewpoint.x + oy = T.y - V.other.y + V.y - V.near_viewpoint.y + pixel_x = 32 * (T.x - V.other.x) + pixel_y = 32 * (T.y - V.other.y) + layer = AREA_LAYER + 0.5 + if(abs(ox) <= world.view && abs(oy) <= world.view) + screen_loc = "CENTER[ox >= 0 ? "+" : ""][ox],CENTER[oy >= 0 ? "+" : ""][oy]" -// /obj/effect/view_portal_dummy/attack_ghost(mob/user) -// owner.attack_ghost(user) +/obj/effect/view_portal_dummy/attack_ghost(mob/user) + owner.attack_ghost(user) diff --git a/code/modules/lighting/lighting_setup.dm b/code/modules/lighting/lighting_setup.dm index 68119ba3921..ed8b7e71d6c 100644 --- a/code/modules/lighting/lighting_setup.dm +++ b/code/modules/lighting/lighting_setup.dm @@ -1,5 +1,5 @@ /proc/create_all_lighting_objects() - for(var/area/A in world) + for(var/area/A in GLOB.all_areas) if(!IS_DYNAMIC_LIGHTING(A)) continue diff --git a/code/modules/reagents/chemistry/recipes/toxins.dm b/code/modules/reagents/chemistry/recipes/toxins.dm index 6d7fa9028a8..e8134c4ac5c 100644 --- a/code/modules/reagents/chemistry/recipes/toxins.dm +++ b/code/modules/reagents/chemistry/recipes/toxins.dm @@ -179,6 +179,6 @@ /datum/chemical_reaction/rotatium name = "Rotatium" id = "Rotatium" - results = "rotatium" + result = "rotatium" required_reagents = list("lsd" = 1, "teslium" = 1, "fentanyl" = 1) mix_message = "After sparks, fire, and the smell of LSD, the mix is constantly spinning with no stop in sight." \ No newline at end of file From b79d3545e153867621850be731ef0e5323bd8392 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 22 Apr 2019 23:28:48 +0200 Subject: [PATCH 019/195] Enable viewing own mob in darkness --- code/__DEFINES/misc.dm | 6 +++++- code/_onclick/hud/fullscreen.dm | 32 +++++++++++++++++++------------- code/_onclick/hud/human.dm | 1 + icons/mob/screen_full.dmi | Bin 1367919 -> 1371578 bytes 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index eae4478d0a1..9ecf8efb974 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -377,4 +377,8 @@ #define GHOST_ORBIT_PENTAGON "pentagon" // Filters -#define FILTER_AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-2, size=4, border=4, color="#04080FAA") \ No newline at end of file +#define FILTER_AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-2, size=4, border=4, color="#04080FAA") + +//Fullscreen overlay resolution in tiles. +#define FULLSCREEN_OVERLAY_RESOLUTION_X 15 +#define FULLSCREEN_OVERLAY_RESOLUTION_Y 15 \ No newline at end of file diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm index 82b56aaf1b7..0a9d0f6b4f0 100644 --- a/code/_onclick/hud/fullscreen.dm +++ b/code/_onclick/hud/fullscreen.dm @@ -2,23 +2,21 @@ var/list/screens = list() /mob/proc/overlay_fullscreen(category, type, severity) - var/obj/screen/fullscreen/screen - if(screens[category]) - screen = screens[category] - if(screen.type != type) - clear_fullscreen(category, FALSE) - return .() - else if(!severity || severity == screen.severity) - return null - else - screen = new type + var/obj/screen/fullscreen/screen = screens[category] + if (!screen || screen.type != type) + // needs to be recreated + clear_fullscreen(category, FALSE) + screens[category] = screen = new type() + else if ((!severity || severity == screen.severity) && (!client || screen.screen_loc != "CENTER-7,CENTER-7" || screen.view == client.view)) + // doesn't need to be updated + return screen screen.icon_state = "[initial(screen.icon_state)][severity]" screen.severity = severity - - screens[category] = screen - if(client && screen.should_show_to(src)) + if (client && screen.should_show_to(src)) + screen.update_for_view(client.view) client.screen += screen + return screen /mob/proc/clear_fullscreen(category, animated = 10) @@ -51,6 +49,7 @@ for(var/category in screens) screen = screens[category] if(screen.should_show_to(src)) + screen.update_for_view(mymob.client.view) mymob.client.screen |= screen else mymob.client.screen -= screen @@ -62,9 +61,16 @@ layer = FULLSCREEN_LAYER plane = FULLSCREEN_PLANE mouse_opacity = MOUSE_OPACITY_TRANSPARENT + var/view = 7 var/severity = 0 var/show_when_dead = FALSE +/obj/screen/fullscreen/proc/update_for_view(client_view) + if (screen_loc == "CENTER-7,CENTER-7" && view != client_view) + var/list/actualview = getviewsize(client_view) + view = client_view + transform = matrix(actualview[1]/FULLSCREEN_OVERLAY_RESOLUTION_X, 0, 0, 0, actualview[2]/FULLSCREEN_OVERLAY_RESOLUTION_Y, 0) + /obj/screen/fullscreen/proc/should_show_to(mob/mymob) if(!show_when_dead && mymob.stat == DEAD) return FALSE diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 6f5c8ee0548..811a7e89cdb 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -83,6 +83,7 @@ /datum/hud/human/New(mob/living/carbon/human/owner, var/ui_style = 'icons/mob/screen_white.dmi', var/ui_color = "#ffffff", var/ui_alpha = 255) ..() + owner.overlay_fullscreen("see_through_darkness", /obj/screen/fullscreen/see_through_darkness) var/obj/screen/using var/obj/screen/inventory/inv_box diff --git a/icons/mob/screen_full.dmi b/icons/mob/screen_full.dmi index e84b05469506dba025f5e6a0681e663318fb9368..595b870a17280aa7a15603ceb61108bbac5d85ad 100644 GIT binary patch delta 37450 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≠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 RJLuydytm@r^Gi4E`+r1-f(8Hp delta 33762 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 Date: Mon, 22 Apr 2019 23:43:05 +0200 Subject: [PATCH 020/195] fentanyl --> meth --- code/modules/reagents/chemistry/recipes/toxins.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/chemistry/recipes/toxins.dm b/code/modules/reagents/chemistry/recipes/toxins.dm index e8134c4ac5c..01b94d1e519 100644 --- a/code/modules/reagents/chemistry/recipes/toxins.dm +++ b/code/modules/reagents/chemistry/recipes/toxins.dm @@ -180,5 +180,5 @@ name = "Rotatium" id = "Rotatium" result = "rotatium" - required_reagents = list("lsd" = 1, "teslium" = 1, "fentanyl" = 1) + required_reagents = list("lsd" = 1, "teslium" = 1, "meth" = 1) mix_message = "After sparks, fire, and the smell of LSD, the mix is constantly spinning with no stop in sight." \ No newline at end of file From 7687bf85ca55bf251bd68c4cec757a858546f199 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 22 Apr 2019 23:43:47 +0200 Subject: [PATCH 021/195] Proper meth --- code/modules/reagents/chemistry/recipes/toxins.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/chemistry/recipes/toxins.dm b/code/modules/reagents/chemistry/recipes/toxins.dm index 01b94d1e519..99f33d625a6 100644 --- a/code/modules/reagents/chemistry/recipes/toxins.dm +++ b/code/modules/reagents/chemistry/recipes/toxins.dm @@ -180,5 +180,5 @@ name = "Rotatium" id = "Rotatium" result = "rotatium" - required_reagents = list("lsd" = 1, "teslium" = 1, "meth" = 1) + required_reagents = list("lsd" = 1, "teslium" = 1, "methamphetamine" = 1) mix_message = "After sparks, fire, and the smell of LSD, the mix is constantly spinning with no stop in sight." \ No newline at end of file From 1bb35a43efd7b7e39a855e5e42fd602edada8f2c Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Tue, 23 Apr 2019 15:13:33 +0200 Subject: [PATCH 022/195] SQL fix --- code/modules/client/preference/preferences_mysql.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/preference/preferences_mysql.dm b/code/modules/client/preference/preferences_mysql.dm index 3483a4c77d3..731bf06496e 100644 --- a/code/modules/client/preference/preferences_mysql.dm +++ b/code/modules/client/preference/preferences_mysql.dm @@ -18,7 +18,7 @@ ghost_anonsay, exp, clientfps, - atklog, + atklog FROM [format_table_name("player")] WHERE ckey='[C.ckey]'"} ) From 429dd20ded7791a5eab2784773d87d2b34fb8eb4 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Tue, 23 Apr 2019 20:08:04 +0200 Subject: [PATCH 023/195] Button plane fix --- code/datums/action.dm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/code/datums/action.dm b/code/datums/action.dm index d316bd29b41..08c92a37bad 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -107,6 +107,7 @@ /datum/action/item_action check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_LYING|AB_CHECK_CONSCIOUS var/use_itemicon = TRUE + /datum/action/item_action/New(Target, custom_icon, custom_icon_state) ..() var/obj/item/I = target @@ -136,9 +137,10 @@ var/obj/item/I = target var/old_layer = I.layer var/old_plane = I.plane - I.layer = HUD_LAYER_SCREEN + 1 - I.plane = HUD_PLANE - current_button.overlays += I + I.layer = FLOAT_LAYER //AAAH + I.plane = FLOAT_PLANE //^ what that guy said + current_button.cut_overlays() + current_button.add_overlay(I) I.layer = old_layer I.plane = old_plane else From 9213b891797916aaf689ba8e3c55c9a4c52ef3a2 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Tue, 23 Apr 2019 20:27:12 +0200 Subject: [PATCH 024/195] Remove receive_signal from alarm --- code/game/machinery/alarm.dm | 32 -------------------------------- 1 file changed, 32 deletions(-) diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 1faf99daec0..7680eb5f67b 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -375,38 +375,6 @@ if(ATMOS_ALARM_DANGER) icon_state = "alarm1" -/obj/machinery/alarm/receive_signal(datum/signal/signal) - if(stat & (NOPOWER|BROKEN) || !alarm_area) - return - if(alarm_area.master_air_alarm != src) - if(master_is_operating()) - return - elect_master() - if(alarm_area.master_air_alarm != src) - return - if(!signal || signal.encryption) - return - var/id_tag = signal.data["tag"] - if(!id_tag) - return - if(signal.data["area"] != area_uid) - return - if(signal.data["sigtype"] != "status") - return - - var/dev_type = signal.data["device"] - if(!(id_tag in alarm_area.air_scrub_names) && !(id_tag in alarm_area.air_vent_names)) - register_env_machine(id_tag, dev_type) - var/got_update=0 - if(dev_type == "AScr") - alarm_area.air_scrub_info[id_tag] = signal.data - got_update=1 - else if(dev_type == "AVP") - alarm_area.air_vent_info[id_tag] = signal.data - got_update=1 - if(got_update && waiting_on_device==id_tag) - waiting_on_device=null - /obj/machinery/alarm/proc/register_env_machine(var/m_id, var/device_type) var/new_name if(device_type=="AVP") From 0d883a5b886fb01534b58551a30baec4e31f401e Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Tue, 23 Apr 2019 22:59:00 +0200 Subject: [PATCH 025/195] Darkness handling update --- code/ATMOSPHERICS/atmospherics.dm | 1 + code/_onclick/hud/hud.dm | 1 + code/datums/vision_override.dm | 10 ++- code/game/atoms.dm | 1 + code/game/gamemodes/blob/blobs/blob_mobs.dm | 3 +- code/game/gamemodes/blob/overmind.dm | 13 +--- code/game/gamemodes/devil/imp/imp.dm | 2 +- .../gamemodes/devil/true_devil/_true_devil.dm | 16 ---- .../gamemodes/malfunction/Malf_Modules.dm | 2 +- .../miniantags/guardian/types/ranged.dm | 24 ++++-- code/game/gamemodes/miniantags/morph/morph.dm | 2 +- .../gamemodes/miniantags/revenant/revenant.dm | 15 +--- .../miniantags/revenant/revenant_abilities.dm | 2 - .../miniantags/slaughter/slaughter.dm | 2 +- .../shadowling/ascendant_shadowling.dm | 2 +- .../gamemodes/shadowling/shadowling_items.dm | 1 + code/game/gamemodes/wizard/rightandwrong.dm | 3 +- code/game/gamemodes/wizard/spellbook.dm | 2 +- code/game/machinery/camera/camera.dm | 11 ++- code/game/machinery/navbeacon.dm | 2 +- code/game/mecha/mecha.dm | 2 + code/game/objects/items/devices/flashlight.dm | 2 +- code/modules/clothing/clothing.dm | 7 +- code/modules/clothing/glasses/glasses.dm | 34 +++++---- code/modules/clothing/glasses/hud.dm | 9 ++- code/modules/clothing/head/helmet.dm | 3 +- .../clothing/spacesuits/miscellaneous.dm | 2 +- .../mining/lavaland/loot/tendril_loot.dm | 36 +++++---- code/modules/mining/minebot.dm | 34 +++------ code/modules/mob/dead/observer/observer.dm | 27 ++++++- code/modules/mob/living/carbon/alien/alien.dm | 46 ++++++++++-- code/modules/mob/living/carbon/alien/life.dm | 30 -------- code/modules/mob/living/carbon/carbon.dm | 39 +++++++++- code/modules/mob/living/carbon/human/human.dm | 7 +- .../mob/living/carbon/human/inventory.dm | 8 +- .../living/carbon/human/species/_species.dm | 74 ++++++++++--------- code/modules/mob/living/carbon/life.dm | 30 -------- code/modules/mob/living/life.dm | 17 +---- code/modules/mob/living/living.dm | 34 +++++++++ code/modules/mob/living/living_defines.dm | 1 - code/modules/mob/living/silicon/ai/ai.dm | 27 ++++++- code/modules/mob/living/silicon/ai/life.dm | 13 ---- code/modules/mob/living/silicon/robot/life.dm | 34 --------- .../modules/mob/living/silicon/robot/robot.dm | 40 ++++++++++ .../mob/living/simple_animal/hostile/alien.dm | 2 +- .../simple_animal/hostile/giant_spider.dm | 1 + .../simple_animal/hostile/mining_mobs.dm | 2 +- .../living/simple_animal/hostile/statue.dm | 29 ++++---- .../hostile/terror_spiders/terror_spiders.dm | 3 +- .../mob/living/simple_animal/simple_animal.dm | 16 ---- code/modules/mob/mob.dm | 9 +++ code/modules/mob/mob_defines.dm | 4 +- code/modules/shuttle/navigation_computer.dm | 2 + code/modules/surgery/organs/augments_eyes.dm | 10 ++- code/modules/surgery/organs/eyes.dm | 13 ++-- .../surgery/organs/subtypes/abductor.dm | 2 +- code/modules/surgery/organs/subtypes/drask.dm | 2 +- code/modules/surgery/organs/subtypes/grey.dm | 2 +- .../modules/surgery/organs/subtypes/shadow.dm | 2 +- .../surgery/organs/subtypes/tajaran.dm | 4 +- .../modules/surgery/organs/subtypes/unathi.dm | 2 +- .../surgery/organs/subtypes/vulpkanin.dm | 4 +- code/modules/surgery/organs/subtypes/wryn.dm | 2 +- 63 files changed, 412 insertions(+), 370 deletions(-) diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index aa6d2f2625c..a6b346ee1c2 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -332,3 +332,4 @@ GLOBAL_DATUM_INIT(pipe_icon_manager, /datum/pipe_icon_manager, new()) /obj/machinery/atmospherics/update_remote_sight(mob/user) user.sight |= (SEE_TURFS|BLIND) + . = ..() diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 56d954313cc..0063feae9cf 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -43,6 +43,7 @@ /mob/proc/create_mob_hud() if(client && !hud_used) hud_used = new /datum/hud(src) + update_sight() /datum/hud/New(mob/owner) mymob = owner diff --git a/code/datums/vision_override.dm b/code/datums/vision_override.dm index 140ceb8d5fa..86aab6d65ec 100644 --- a/code/datums/vision_override.dm +++ b/code/datums/vision_override.dm @@ -1,13 +1,15 @@ /datum/vision_override var/name = "vision override" - var/see_in_dark = 0 - var/see_invisible = 0 - var/light_sensitive = 0 + var/sight_flags = 0 + var/see_in_dark = 0 + var/lighting_alpha + + var/light_sensitive = 0 /datum/vision_override/nightvision see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE /datum/vision_override/nightvision/thermals sight_flags = SEE_MOBS diff --git a/code/game/atoms.dm b/code/game/atoms.dm index e46c1290637..f30fa412a8f 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -675,6 +675,7 @@ var/list/blood_splatter_icons = list() //the sight changes to give to the mob whose perspective is set to that atom (e.g. A mob with nightvision loses its nightvision while looking through a normal camera) /atom/proc/update_remote_sight(mob/living/user) + sync_lighting_plane_alpha() return /atom/proc/checkpass(passflag) diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index e6e9dfe4196..bf2143b9784 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -178,7 +178,8 @@ environment_smash = ENVIRONMENT_SMASH_RWALLS pressure_resistance = 100 //100 kPa difference required to push throw_pressure_limit = 120 //120 kPa difference required to throw - + see_in_dark = 8 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE /mob/living/simple_animal/hostile/blob/blobbernaut/blob_act() return diff --git a/code/game/gamemodes/blob/overmind.dm b/code/game/gamemodes/blob/overmind.dm index ca1dffbfa74..02af98f74c5 100644 --- a/code/game/gamemodes/blob/overmind.dm +++ b/code/game/gamemodes/blob/overmind.dm @@ -5,8 +5,8 @@ icon_state = "marker" see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM invisibility = INVISIBILITY_OBSERVER + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE pass_flags = PASSBLOB faction = list("blob") @@ -20,7 +20,6 @@ var/is_offspring = FALSE var/datum/reagent/blob/blob_reagent_datum = new/datum/reagent/blob() var/list/blob_mobs = list() - var/ghostimage = null /mob/camera/blob/New() var/new_name = "[initial(name)] ([rand(1, 999)])" @@ -35,9 +34,6 @@ blob_core.adjustcolors(blob_reagent_datum.color) color = blob_reagent_datum.complementary_color - ghostimage = image(src.icon,src,src.icon_state) - ghost_darkness_images |= ghostimage //so ghosts can see the blob cursor when they disable darkness - updateallghostimages() ..() /mob/camera/blob/Life(seconds, times_fired) @@ -45,13 +41,6 @@ qdel(src) ..() -/mob/camera/blob/Destroy() - if(ghostimage) - ghost_darkness_images -= ghostimage - QDEL_NULL(ghostimage) - updateallghostimages() - return ..() - /mob/camera/blob/Login() ..() sync_mind() diff --git a/code/game/gamemodes/devil/imp/imp.dm b/code/game/gamemodes/devil/imp/imp.dm index b012edc1930..e863eaf1f6a 100644 --- a/code/game/gamemodes/devil/imp/imp.dm +++ b/code/game/gamemodes/devil/imp/imp.dm @@ -29,7 +29,7 @@ melee_damage_lower = 10 melee_damage_upper = 15 see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE var/boost var/playstyle_string = "You are an imp, a mischevious creature from hell. You are the lowest rank on the hellish totem pole \ Though you are not obligated to help, perhaps by aiding a higher ranking devil, you might just get a promotion. However, you are incapable \ diff --git a/code/game/gamemodes/devil/true_devil/_true_devil.dm b/code/game/gamemodes/devil/true_devil/_true_devil.dm index 18058b42279..a6c04c5dcc0 100644 --- a/code/game/gamemodes/devil/true_devil/_true_devil.dm +++ b/code/game/gamemodes/devil/true_devil/_true_devil.dm @@ -30,22 +30,6 @@ E.insert() ..() - -/mob/living/carbon/true_devil/update_sight() - if(stat == DEAD) - sight |= SEE_TURFS - sight |= SEE_MOBS - sight |= SEE_OBJS - see_in_dark = 8 - see_invisible = SEE_INVISIBLE_LEVEL_TWO - else - sight = (SEE_TURFS | SEE_OBJS) - see_in_dark = 2 - see_invisible = SEE_INVISIBLE_LIVING - - if(see_override) - see_invisible = see_override - // inventory system could use some love /mob/living/carbon/true_devil/put_in_hands(obj/item/W) if(!W) diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index 830ae26f3c1..c44150a8450 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -496,7 +496,7 @@ return var/upgradedcams = 0 - see_override = SEE_INVISIBLE_MINIMUM //Night-vision, without which X-ray would be very limited in power. + see_override = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //Night-vision, without which X-ray would be very limited in power. update_sight() for(var/obj/machinery/camera/C in cameranet.cameras) diff --git a/code/game/gamemodes/miniantags/guardian/types/ranged.dm b/code/game/gamemodes/miniantags/guardian/types/ranged.dm index 0979ed45a6c..641d44dae2e 100644 --- a/code/game/gamemodes/miniantags/guardian/types/ranged.dm +++ b/code/game/gamemodes/miniantags/guardian/types/ranged.dm @@ -16,7 +16,7 @@ ranged = 1 rapid = 1 range = 13 - see_invisible = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE see_in_dark = 8 playstyle_string = "As a Ranged type, you have only light damage resistance, but are capable of spraying shards of crystal at incredibly high speed. You can also deploy surveillance snares to monitor enemy movement. Finally, you can switch to scout mode, in which you can't attack, but can move without limit." magic_fluff_string = "..And draw the Sentinel, an alien master of ranged combat." @@ -53,12 +53,22 @@ to_chat(src, "You have to be recalled to toggle modes!") /mob/living/simple_animal/hostile/guardian/ranged/ToggleLight() - if(see_invisible == SEE_INVISIBLE_MINIMUM) - to_chat(src, "You deactivate your night vision.") - see_invisible = SEE_INVISIBLE_LIVING - else - to_chat(src, "You activate your night vision.") - see_invisible = SEE_INVISIBLE_MINIMUM + var/msg + switch(lighting_alpha) + if (LIGHTING_PLANE_ALPHA_VISIBLE) + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE + msg = "You activate your night vision." + if (LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE) + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + msg = "You increase your night vision." + if (LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE) + lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE + msg = "You maximize your night vision." + else + lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE + msg = "You deactivate your night vision." + + to_chat(src, "[msg]") /mob/living/simple_animal/hostile/guardian/ranged/verb/Snare() set name = "Set Surveillance Trap" diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/game/gamemodes/miniantags/morph/morph.dm index 3bb36870d31..bcaecfb0eea 100644 --- a/code/game/gamemodes/miniantags/morph/morph.dm +++ b/code/game/gamemodes/miniantags/morph/morph.dm @@ -27,7 +27,7 @@ melee_damage_lower = 20 melee_damage_upper = 20 see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE idle_vision_range = 1 // Only attack when target is close wander = 0 attacktext = "glomps" diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm index bde3f7ee8e9..2096522ba0b 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -18,7 +18,7 @@ health = INFINITY //Revenants don't use health, they use essence instead maxHealth = INFINITY see_in_dark = 8 - see_invisible = SEE_INVISIBLE_OBSERVER_NOLIGHTING + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE universal_understand = 1 response_help = "passes through" response_disarm = "swings at" @@ -51,7 +51,6 @@ var/draining = 0 //If the revenant is draining someone. var/list/drained_mobs = list() //Cannot harvest the same mob twice var/perfectsouls = 0 //How many perfect, regen-cap increasing souls the revenant has. - var/image/ghostimage = null //Visible to ghost with darkness off /mob/living/simple_animal/revenant/Life(seconds, times_fired) @@ -91,13 +90,6 @@ if(essence == 0) to_chat(src, "You feel your essence fraying!") -/mob/living/simple_animal/revenant/update_sight() - if(!client) - return - if(stat == DEAD) - grant_death_vision() - return - /mob/living/simple_animal/revenant/say(message) if(!message) return @@ -120,9 +112,6 @@ /mob/living/simple_animal/revenant/New() ..() - ghostimage = image(src.icon,src,src.icon_state) - ghost_darkness_images |= ghostimage - updateallghostimages() remove_from_all_data_huds() addtimer(CALLBACK(src, .proc/firstSetupAttempt), 15 SECONDS) // Give admin 15 seconds to put in a ghost (Or wait 15 seconds before giving it objectives) @@ -196,8 +185,6 @@ . = ..() if(!.) return FALSE - ghost_darkness_images -= ghostimage - updateallghostimages() to_chat(src, "NO! No... it's too late, you can feel your essence breaking apart...") notransform = 1 diff --git a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm index cdb55aa1b31..34bf06f07f7 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm @@ -110,8 +110,6 @@ message = "You toggle your night vision." action_icon_state = "r_nightvision" action_background_icon_state = "bg_revenant" - non_night_vision = INVISIBILITY_REVENANT - night_vision = SEE_INVISIBLE_OBSERVER_NOLIGHTING //Transmit: the revemant's only direct way to communicate. Sends a single message silently to a single mob /obj/effect/proc_holder/spell/targeted/revenant_transmit diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 7e74de27267..68b886207e3 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -33,7 +33,7 @@ melee_damage_lower = 30 melee_damage_upper = 30 see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE var/boost = 0 bloodcrawl = BLOODCRAWL_EAT diff --git a/code/game/gamemodes/shadowling/ascendant_shadowling.dm b/code/game/gamemodes/shadowling/ascendant_shadowling.dm index 51f4d147bba..9eeadeaba0f 100644 --- a/code/game/gamemodes/shadowling/ascendant_shadowling.dm +++ b/code/game/gamemodes/shadowling/ascendant_shadowling.dm @@ -12,7 +12,7 @@ speed = 0 var/phasing = 0 see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE universal_speak = 1 diff --git a/code/game/gamemodes/shadowling/shadowling_items.dm b/code/game/gamemodes/shadowling/shadowling_items.dm index 500c3ee25c5..69f5688829c 100644 --- a/code/game/gamemodes/shadowling/shadowling_items.dm +++ b/code/game/gamemodes/shadowling/shadowling_items.dm @@ -81,4 +81,5 @@ unacidable = 1 flash_protect = -1 vision_flags = SEE_MOBS + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE flags = ABSTRACT | NODROP \ No newline at end of file diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm index aff40200c6b..deb054f6d3e 100644 --- a/code/game/gamemodes/wizard/rightandwrong.dm +++ b/code/game/gamemodes/wizard/rightandwrong.dm @@ -146,7 +146,8 @@ H.mutations.Add(XRAY) H.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS) H.see_in_dark = 8 - H.see_invisible = SEE_INVISIBLE_LEVEL_TWO + H.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + H.update_sight() to_chat(H, "The walls suddenly disappear.") if("voodoo") new /obj/item/voodoo(get_turf(H)) diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 66cdff69b3f..e33848b61c5 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -333,7 +333,7 @@ user.mutations.Add(XRAY) user.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS) user.see_in_dark = 8 - user.see_invisible = SEE_INVISIBLE_LEVEL_TWO + user.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE to_chat(user, "The walls suddenly disappear.") return 1 diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 7535381197a..a21b399f5db 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -382,14 +382,17 @@ user.overlay_fullscreen("remote_view", /obj/screen/fullscreen/impaired, 2) /obj/machinery/camera/update_remote_sight(mob/living/user) - user.see_invisible = SEE_INVISIBLE_LIVING //can't see ghosts through cameras if(isXRay()) user.sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) user.see_in_dark = max(user.see_in_dark, 8) + user.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE else - user.sight = 0 - user.see_in_dark = 2 - return 1 + user.sight = initial(user.sight) + user.see_in_dark = initial(user.see_in_dark) + user.lighting_alpha = initial(user.lighting_alpha) + + ..() + return TRUE /obj/machinery/camera/portable //Cameras which are placed inside of things, such as helmets. var/turf/prev_turf diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index f278ee2adda..d4175b10ae1 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -72,7 +72,7 @@ // called when turf state changes // hide the object if turf is intact /obj/machinery/navbeacon/hide(intact) - invisibility = intact ? INVISIBILITY_MAXIMUM : SEE_INVISIBLE_MINIMUM + invisibility = intact ? INVISIBILITY_MAXIMUM : 0 updateicon() // update the icon_state diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 6cfd1d63942..45e36d9a30c 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -1518,6 +1518,8 @@ if(user == occupant) user.sight |= occupant_sight_flags + ..() + /obj/mecha/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect, end_pixel_y) if(!no_effect) if(selected) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 24c8cbcd3b7..0a44c439fc0 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -76,7 +76,7 @@ var/obj/item/organ/internal/eyes/eyes = H.get_int_organ(/obj/item/organ/internal/eyes) if(M.stat == DEAD || !eyes || M.disabilities & BLIND) //mob is dead or fully blind to_chat(user, "[M]'s pupils are unresponsive to the light!") - else if((XRAY in M.mutations) || eyes.get_dark_view() >= 8) //The mob's either got the X-RAY vision or has a tapetum lucidum (extreme nightvision, i.e. Vulp/Tajara with COLOURBLIND & their monkey forms). + else if((XRAY in M.mutations) || eyes.see_in_dark >= 8) //The mob's either got the X-RAY vision or has a tapetum lucidum (extreme nightvision, i.e. Vulp/Tajara with COLOURBLIND & their monkey forms). to_chat(user, "[M]'s pupils glow eerily!") else //they're okay! if(M.flash_eyes(visual = 1)) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 484151de797..5e103f14c72 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -154,6 +154,7 @@ var/darkness_view = 0 //Base human is 2 var/invis_view = SEE_INVISIBLE_LIVING var/invis_override = 0 + var/lighting_alpha var/emagged = 0 var/list/color_view = null//overrides client.color while worn @@ -281,9 +282,11 @@ BLIND // can't see anything slot_flags = SLOT_HEAD var/blockTracking // Do we block AI tracking? var/HUDType = null - var/darkness_view = 0 - var/helmet_goggles_invis_view = 0 + var/vision_flags = 0 + var/darkness_view = 0 + var/lighting_alpha + var/can_toggle = null //Mask diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index b527bb2717d..6a7da898b25 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -37,7 +37,7 @@ item_state = "glasses" origin_tech = "magnets=1;engineering=2" vision_flags = SEE_TURFS - invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE prescription_upgradable = 1 species_fit = list("Vox") sprite_sheets = list( @@ -53,6 +53,7 @@ item_state = "glasses" origin_tech = "magnets=4;engineering=5;plasmatech=4" darkness_view = 8 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE prescription_upgradable = 0 /obj/item/clothing/glasses/meson/prescription @@ -104,7 +105,7 @@ icon_state = "nvpurple" item_state = "glasses" darkness_view = 8 - invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //don't render darkness while wearing these /obj/item/clothing/glasses/janitor name = "Janitorial Goggles" @@ -123,7 +124,7 @@ item_state = "glasses" origin_tech = "materials=4;magnets=4;plasmatech=4;engineering=4" darkness_view = 8 - invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //don't render darkness while wearing these species_fit = list("Vox") sprite_sheets = list( "Vox" = 'icons/mob/species/vox/eyes.dmi', @@ -382,6 +383,7 @@ item_state = "glasses" origin_tech = "magnets=3" vision_flags = SEE_MOBS + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE flash_protect = -1 species_fit = list("Vox") sprite_sheets = list( @@ -389,18 +391,18 @@ "Grey" = 'icons/mob/species/grey/eyes.dmi' ) - emp_act(severity) - if(istype(src.loc, /mob/living/carbon/human)) - var/mob/living/carbon/human/M = src.loc - to_chat(M, "The Optical Thermal Scanner overloads and blinds you!") - if(M.glasses == src) - M.EyeBlind(3) - M.EyeBlurry(5) - if(!(M.disabilities & NEARSIGHTED)) - M.BecomeNearsighted() - spawn(100) - M.CureNearsighted() - ..() +/obj/item/clothing/glasses/thermal/emp_act(severity) + if(istype(src.loc, /mob/living/carbon/human)) + var/mob/living/carbon/human/M = src.loc + to_chat(M, "The Optical Thermal Scanner overloads and blinds you!") + if(M.glasses == src) + M.EyeBlind(3) + M.EyeBlurry(5) + if(!(M.disabilities & NEARSIGHTED)) + M.BecomeNearsighted() + spawn(100) + M.CureNearsighted() + ..() /obj/item/clothing/glasses/thermal/syndi //These are now a traitor item, concealed as mesons. -Pete name = "Optical Meson Scanner" @@ -507,7 +509,7 @@ scan_reagents = 1 flags = NODROP flags_cover = null - invis_view = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE /obj/item/clothing/glasses/godeye/attackby(obj/item/W as obj, mob/user as mob, params) if(istype(W, src) && W != src && W.loc == user) diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index d778ea5e63a..ad775b04c14 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -51,7 +51,7 @@ item_state = "glasses" origin_tech = "magnets=4;biotech=4;plasmatech=4;engineering=5" darkness_view = 8 - invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE prescription_upgradable = 0 /obj/item/clothing/glasses/hud/diagnostic @@ -73,7 +73,7 @@ item_state = "glasses" origin_tech = "magnets=4;powerstorage=4;plasmatech=4;engineering=5" darkness_view = 8 - invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE prescription_upgradable = 0 /obj/item/clothing/glasses/hud/security @@ -105,6 +105,7 @@ icon_state = "jensenshades" item_state = "jensenshades" vision_flags = SEE_MOBS + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE /obj/item/clothing/glasses/hud/security/night name = "\improper Night Vision Security HUD" @@ -112,7 +113,7 @@ icon_state = "securityhudnight" origin_tech = "magnets=4;combat=4;plasmatech=4;engineering=5" darkness_view = 8 - invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //don't render darkness while wearing these prescription_upgradable = 0 /obj/item/clothing/glasses/hud/security/sunglasses/read_only @@ -154,7 +155,7 @@ icon_state = "hydroponichudnight" item_state = "glasses" darkness_view = 8 - invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE prescription_upgradable = 0 /obj/item/clothing/glasses/hud/security/tajblind diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 35b4b6a75e0..6e3a0302cbc 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -50,6 +50,7 @@ desc = "A helmet with a built-in thermal scanning visor." icon_state = "helmetthermals" vision_flags = SEE_MOBS + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE /obj/item/clothing/head/helmet/meson name = "meson visor helmet" @@ -67,7 +68,7 @@ name = "night-vision helmet" desc = "A helmet with a built-in pair of night vision goggles." icon_state = "helmetNVG" - helmet_goggles_invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //don't render darkness while wearing these /obj/item/clothing/head/helmet/alt name = "bulletproof helmet" diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index 8a79b192d0c..6b86d8f5d5c 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -47,7 +47,7 @@ max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT unacidable = 1 vision_flags = SEE_MOBS - helmet_goggles_invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //don't render darkness while wearing these HUDType = MEDHUD strip_delay = 130 diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm index 878a3951202..5a39264e668 100644 --- a/code/modules/mining/lavaland/loot/tendril_loot.dm +++ b/code/modules/mining/lavaland/loot/tendril_loot.dm @@ -184,42 +184,46 @@ generic_pixel_x = 1 vehicle_move_delay = 1 -// Wisp Lantern +//Wisp Lantern /obj/item/wisp_lantern name = "spooky lantern" desc = "This lantern gives off no light, but is home to a friendly wisp." icon = 'icons/obj/lighting.dmi' icon_state = "lantern-blue" + item_state = "lantern" var/obj/effect/wisp/wisp /obj/item/wisp_lantern/attack_self(mob/user) if(!wisp) to_chat(user, "The wisp has gone missing!") + icon_state = "lantern" return + if(wisp.loc == src) to_chat(user, "You release the wisp. It begins to bob around your head.") - user.sight |= SEE_MOBS icon_state = "lantern" - wisp.orbit(user, 20, forceMove = TRUE) + wisp.orbit(user, 20) + user.update_sight() feedback_add_details("wisp_lantern","F") // freed else to_chat(user, "You return the wisp to the lantern.") + var/mob/target if(wisp.orbiting) - var/atom/A = wisp.orbiting - if(isliving(A)) - var/mob/living/M = A - M.sight &= ~SEE_MOBS - to_chat(M, "Your vision returns to normal.") - + target = wisp.orbiting wisp.stop_orbit() - wisp.loc = src + wisp.forceMove(src) + + if (istype(target)) + target.update_sight() + to_chat(target, "Your vision returns to normal.") + icon_state = "lantern-blue" feedback_add_details("wisp_lantern","R") // returned -/obj/item/wisp_lantern/New() - ..() +/obj/item/wisp_lantern/Initialize() + . = ..() wisp = new(src) /obj/item/wisp_lantern/Destroy() @@ -228,19 +232,19 @@ qdel(wisp) else wisp.visible_message("[wisp] has a sad feeling for a moment, then it passes.") - return ..() + ..() /obj/effect/wisp name = "friendly wisp" desc = "Happy to light your way." icon = 'icons/obj/lighting.dmi' icon_state = "orb" - layer = ABOVE_ALL_MOB_LAYER - light_power = 1 light_range = 7 + layer = ABOVE_ALL_MOB_LAYER + var/sight_flags = SEE_MOBS + var/lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE //Red/Blue Cubes - /obj/item/warp_cube name = "blue cube" desc = "A mysterious blue cube." diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index cf8b897104c..08e7bf305ca 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -184,28 +184,6 @@ mode = MINEDRONE_COLLECT SetCollectBehavior() - -/mob/living/simple_animal/hostile/mining_drone/update_sight() - if(!client) - return - if(stat == DEAD) - grant_death_vision() - return - - if(mesons_active) - sight |= SEE_TURFS - see_invisible = SEE_INVISIBLE_MINIMUM - else - sight &= ~SEE_TURFS - see_invisible = SEE_INVISIBLE_LIVING - - see_in_dark = initial(see_in_dark) - - if(client.eye != src) - var/atom/A = client.eye - if(A.update_remote_sight(src)) //returns 1 if we override all other sight updates. - return - //Actions for sentient minebots /datum/action/innate/minedrone @@ -232,10 +210,16 @@ /datum/action/innate/minedrone/toggle_meson_vision/Activate() var/mob/living/simple_animal/hostile/mining_drone/user = owner - user.mesons_active = !user.mesons_active - user.update_sight() + if(user.sight & SEE_TURFS) + user.sight &= ~SEE_TURFS + user.lighting_alpha = initial(user.lighting_alpha) + else + user.sight |= SEE_TURFS + user.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE - to_chat(user, "You toggle your meson vision [(user.mesons_active) ? "on" : "off"].") + user.sync_lighting_plane_alpha() + + to_chat(user, "You toggle your meson vision [(user.sight & SEE_TURFS) ? "on" : "off"].") /datum/action/innate/minedrone/toggle_mode name = "Toggle Mode" diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index dfd4e1e3332..aaad280cc0d 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -666,14 +666,32 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp set desc = "Toggles your ability to see things only ghosts can see, like other ghosts" set category = "Ghost" ghostvision = !(ghostvision) - updateghostsight() + update_sight() to_chat(usr, "You [(ghostvision?"now":"no longer")] have ghost vision.") /mob/dead/observer/verb/toggle_darkness() set name = "Toggle Darkness" set category = "Ghost" - seedarkness = !(seedarkness) - updateghostsight() + switch(lighting_alpha) + if (LIGHTING_PLANE_ALPHA_VISIBLE) + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE + if (LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE) + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + if (LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE) + lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE + else + lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE + + update_sight() + +/mob/dead/observer/update_sight() + if (!ghostvision) + see_invisible = SEE_INVISIBLE_LIVING + else + see_invisible = SEE_INVISIBLE_OBSERVER + + updateghostimages() + ..() /mob/dead/observer/proc/updateghostsight() if(!seedarkness) @@ -681,7 +699,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp else see_invisible = SEE_INVISIBLE_OBSERVER if(!ghostvision) - see_invisible = SEE_INVISIBLE_LIVING; + see_invisible = SEE_INVISIBLE_LIVING + updateghostimages() /proc/updateallghostimages() diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 9c87b04b0e5..4d1d91696eb 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -6,7 +6,7 @@ gender = NEUTER dna = null alien_talk_understand = 1 - nightvision = 1 + var/nightvision = 1 var/obj/item/card/id/wear_id = null // Fix for station bounced radios -- Skie var/has_fine_manipulation = 0 var/move_delay_add = 0 // movement delay to add @@ -149,15 +149,17 @@ if(!nightvision) see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM - nightvision = 1 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + nightvision = TRUE usr.hud_used.nightvisionicon.icon_state = "nightvision1" - else if(nightvision == 1) + else if(nightvision) see_in_dark = 4 - see_invisible = 45 - nightvision = 0 + lighting_alpha = initial(lighting_alpha) + nightvision = FALSE usr.hud_used.nightvisionicon.icon_state = "nightvision0" + update_sight() + /mob/living/carbon/alien/assess_threat(var/mob/living/simple_animal/bot/secbot/judgebot, var/lasercolor) if(judgebot.emagged == 2) @@ -264,3 +266,35 @@ Des: Removes all infected images from the alien. return pick("xltrails_1", "xltrails_2") else return pick("xttrails_1", "xttrails_2") + +/mob/living/carbon/alien/update_sight() + if(!client) + return + if(stat == DEAD) + grant_death_vision() + return + + sight = SEE_MOBS + if(nightvision) + see_in_dark = 8 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + else + see_in_dark = initial(see_in_dark) + lighting_alpha = initial(lighting_alpha) + + if(client.eye != src) + var/atom/A = client.eye + if(A.update_remote_sight(src)) //returns 1 if we override all other sight updates. + return + + for(var/obj/item/organ/internal/cyberimp/eyes/E in internal_organs) + sight |= E.vision_flags + if(E.see_in_dark) + see_in_dark = max(see_in_dark, E.see_in_dark) + if(E.see_invisible) + see_invisible = min(see_invisible, E.see_invisible) + if(!isnull(E.lighting_alpha)) + lighting_alpha = min(lighting_alpha, E.lighting_alpha) + + if(see_override) + see_invisible = see_override diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm index d3ecc9e3e1c..a584f66dc97 100644 --- a/code/modules/mob/living/carbon/alien/life.dm +++ b/code/modules/mob/living/carbon/alien/life.dm @@ -28,33 +28,3 @@ //BREATH TEMPERATURE handle_breath_temperature(breath) - -/mob/living/carbon/alien/update_sight() - if(!client) - return - if(stat == DEAD) - grant_death_vision() - return - - sight = SEE_MOBS - if(nightvision) - see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM - else - see_in_dark = 4 - see_invisible = SEE_INVISIBLE_LEVEL_TWO - - if(client.eye != src) - var/atom/A = client.eye - if(A.update_remote_sight(src)) //returns 1 if we override all other sight updates. - return - - for(var/obj/item/organ/internal/cyberimp/eyes/E in internal_organs) - sight |= E.vision_flags - if(E.dark_view) - see_in_dark = max(see_in_dark, E.dark_view) - if(E.see_invisible) - see_invisible = min(see_invisible, E.see_invisible) - - if(see_override) - see_invisible = see_override diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 277bbbd8789..c1941c39a6e 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -323,8 +323,8 @@ return var/extra_darkview = 0 - if(E.dark_view) - extra_darkview = max(E.dark_view - 2, 0) + if(E.see_in_dark) + extra_darkview = max(E.see_in_dark - 2, 0) extra_damage = extra_darkview var/light_amount = 10 // assume full brightness @@ -1129,4 +1129,37 @@ so that different stomachs can handle things in different ways VB*/ /mob/living/carbon/proc/shock_internal_organs(intensity) for(var/obj/item/organ/O in internal_organs) - O.shock_organ(intensity) \ No newline at end of file + O.shock_organ(intensity) + +/mob/living/carbon/update_sight() + if(!client) + return + + if(stat == DEAD) + grant_death_vision() + return + + sight = initial(sight) + lighting_alpha = initial(lighting_alpha) + + for(var/obj/item/organ/internal/cyberimp/eyes/E in internal_organs) + sight |= E.vision_flags + if(E.see_in_dark) + see_in_dark = max(see_in_dark, E.see_in_dark) + if(E.see_invisible) + see_invisible = min(see_invisible, E.see_invisible) + if(!isnull(E.lighting_alpha)) + lighting_alpha = min(lighting_alpha, E.lighting_alpha) + + if(client.eye != src) + var/atom/A = client.eye + if(A.update_remote_sight(src)) //returns 1 if we override all other sight updates. + return + + if(XRAY in mutations) + sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) + see_in_dark = 8 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + + if(see_override) + see_invisible = see_override \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index bd5817e8867..b20776419d2 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -545,6 +545,7 @@ /mob/living/carbon/human/update_sight() if(!client) return + if(stat == DEAD) grant_death_vision() return @@ -1427,11 +1428,7 @@ dna.species.on_species_gain(src) - see_in_dark = dna.species.get_resultant_darksight(src) - if(see_in_dark > 2) - see_invisible = SEE_INVISIBLE_LEVEL_ONE - else - see_invisible = SEE_INVISIBLE_LIVING + update_sight() dna.species.handle_dna(src) //Give them whatever special dna business they got. diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 69f898fb677..ba4f2fbbcf4 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -115,7 +115,7 @@ update_tint() if(G.prescription) update_nearsighted_effects() - if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view) + if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha)) update_sight() update_inv_glasses() update_client_colour() @@ -128,7 +128,7 @@ // Bandanas and paper hats go on the head but are not head clothing if(istype(I,/obj/item/clothing/head)) var/obj/item/clothing/head/hat = I - if(hat.vision_flags || hat.darkness_view || hat.helmet_goggles_invis_view) + if(hat.vision_flags || hat.darkness_view || !isnull(hat.lighting_alpha)) update_sight() head_update(I) update_inv_head() @@ -267,7 +267,7 @@ update_tint() if(G.prescription) update_nearsighted_effects() - if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view) + if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha)) update_sight() update_inv_glasses(redraw_mob) update_client_colour() @@ -283,7 +283,7 @@ // paper + bandanas if(istype(W, /obj/item/clothing/head)) var/obj/item/clothing/head/hat = W - if(hat.vision_flags || hat.darkness_view || hat.helmet_goggles_invis_view) + if(hat.vision_flags || hat.darkness_view || !isnull(hat.lighting_alpha)) update_sight() head_update(W) update_inv_head(redraw_mob) diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index d9a501d2251..0b597c17a6f 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -39,8 +39,6 @@ var/siemens_coeff = 1 //base electrocution coefficient - var/invis_sight = SEE_INVISIBLE_LIVING - var/hazard_high_pressure = HAZARD_HIGH_PRESSURE // Dangerously high pressure. var/warning_high_pressure = WARNING_HIGH_PRESSURE // High pressure warning. var/warning_low_pressure = WARNING_LOW_PRESSURE // Low pressure warning. @@ -630,22 +628,21 @@ It'll return null if the organ doesn't correspond, so include null checks when u return null return has_organ[organ_slot] -/datum/species/proc/get_resultant_darksight(mob/living/carbon/human/H) //Returns default value of 2 if the mob doesn't have eyes, otherwise it grabs the eyes darksight. - var/resultant_darksight = 2 +/datum/species/proc/update_sight(mob/living/carbon/human/H) var/obj/item/organ/internal/eyes/eyes = H.get_int_organ(/obj/item/organ/internal/eyes) if(eyes) - resultant_darksight = eyes.get_dark_view() - return resultant_darksight - -/datum/species/proc/update_sight(mob/living/carbon/human/H) - H.sight = initial(H.sight) - H.see_in_dark = get_resultant_darksight(H) - H.see_invisible = invis_sight + H.sight |= eyes.vision_flags + H.see_in_dark = eyes.see_in_dark + H.see_invisible = eyes.see_invisible + H.lighting_alpha = eyes.lighting_alpha + else + H.sight = initial(H.sight) + H.see_in_dark = initial(H.see_in_dark) + H.see_invisible = initial(H.see_invisible) + H.lighting_alpha = initial(H.lighting_alpha) if(H.see_in_dark > 2) //Preliminary see_invisible handling as per set_species() in code\modules\mob\living\carbon\human\human.dm. - H.see_invisible = SEE_INVISIBLE_LEVEL_ONE - else - H.see_invisible = SEE_INVISIBLE_LIVING + H.lighting_alpha = min(H.lighting_alpha, LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE) if(H.client && H.client.eye != H) var/atom/A = H.client.eye @@ -656,39 +653,43 @@ It'll return null if the organ doesn't correspond, so include null checks when u if(H.mind.vampire.get_ability(/datum/vampire_passive/full)) H.sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS H.see_in_dark = 8 - H.see_invisible = SEE_INVISIBLE_MINIMUM + H.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE else if(H.mind.vampire.get_ability(/datum/vampire_passive/vision)) H.sight |= SEE_MOBS + H.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE for(var/obj/item/organ/internal/cyberimp/eyes/E in H.internal_organs) H.sight |= E.vision_flags - if(E.dark_view) - H.see_in_dark = E.dark_view + if(E.see_in_dark) + H.see_in_dark = max(H.see_in_dark, E.see_in_dark) if(E.see_invisible) H.see_invisible = min(H.see_invisible, E.see_invisible) + if(E.lighting_alpha) + H.lighting_alpha = min(H.lighting_alpha, E.lighting_alpha) - var/lesser_darkview_bonus = INFINITY // my glasses, I can't see without my glasses if(H.glasses) var/obj/item/clothing/glasses/G = H.glasses H.sight |= G.vision_flags - lesser_darkview_bonus = G.darkness_view + H.see_in_dark = max(G.darkness_view, H.see_in_dark) + if(G.invis_override) H.see_invisible = G.invis_override else H.see_invisible = min(G.invis_view, H.see_invisible) + + if(!isnull(G.lighting_alpha)) + H.lighting_alpha = min(G.lighting_alpha, H.lighting_alpha) // better living through hat trading if(H.head) if(istype(H.head, /obj/item/clothing/head)) var/obj/item/clothing/head/hat = H.head H.sight |= hat.vision_flags + H.see_in_dark = max(hat.darkness_view, H.see_in_dark) - if(hat.darkness_view) // Pick the lowest of the two darkness_views between the glasses and helmet. - lesser_darkview_bonus = min(hat.darkness_view,lesser_darkview_bonus) - - if(hat.helmet_goggles_invis_view) - H.see_invisible = min(hat.helmet_goggles_invis_view, H.see_invisible) + if(!isnull(hat.lighting_alpha)) + H.lighting_alpha = min(hat.lighting_alpha, H.lighting_alpha) if(istype(H.back, /obj/item/rig)) ///aghhh so snowflakey var/obj/item/rig/rig = H.back @@ -697,28 +698,33 @@ It'll return null if the organ doesn't correspond, so include null checks when u if(rig.visor && rig.visor.vision && rig.visor.active && rig.visor.vision.glasses) var/obj/item/clothing/glasses/G = rig.visor.vision.glasses if(istype(G)) - H.see_in_dark = (G.darkness_view ? G.darkness_view : get_resultant_darksight(H)) // Otherwise we keep our darkness view with togglable nightvision. - if(G.vision_flags) // MESONS - H.sight |= G.vision_flags - + H.sight |= G.vision_flags + H.see_in_dark = max(G.darkness_view, H.see_in_dark) H.see_invisible = min(G.invis_view, H.see_invisible) - if(lesser_darkview_bonus != INFINITY) - H.see_in_dark = max(lesser_darkview_bonus, H.see_in_dark) + if(!isnull(G.lighting_alpha)) + H.lighting_alpha = min(G.lighting_alpha, H.lighting_alpha) if(H.vision_type) - H.see_in_dark = max(H.see_in_dark, H.vision_type.see_in_dark, get_resultant_darksight(H)) - H.see_invisible = H.vision_type.see_invisible - if(H.vision_type.light_sensitive) - H.weakeyes = 1 H.sight |= H.vision_type.sight_flags + H.see_in_dark = max(H.see_in_dark, H.vision_type.see_in_dark) + + if(!isnull(H.vision_type.lighting_alpha)) + H.lighting_alpha = min(H.vision_type.lighting_alpha, H.lighting_alpha) + + if(H.vision_type.light_sensitive) + H.weakeyes = TRUE if(XRAY in H.mutations) H.sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) + H.see_in_dark = 8 + H.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE if(H.see_override) //Override all H.see_invisible = H.see_override + H.sync_lighting_plane_alpha() + /datum/species/proc/water_act(mob/living/carbon/human/M, volume, temperature, source) if(abs(temperature - M.bodytemperature) > 10) //If our water and mob temperature varies by more than 10K, cool or/ heat them appropriately M.bodytemperature = (temperature + M.bodytemperature) * 0.5 //Approximation for gradual heating or cooling diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 48d8137092a..63f9f10dc71 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -343,36 +343,6 @@ Sleeping(2) return sleeping -/mob/living/carbon/update_sight() - if(!client) - return - if(stat == DEAD) - grant_death_vision() - return - - see_invisible = initial(see_invisible) - see_in_dark = initial(see_in_dark) - sight = initial(sight) - - if(XRAY in mutations) - grant_xray_vision() - - if(client.eye != src) - var/atom/A = client.eye - if(A.update_remote_sight(src)) //returns 1 if we override all other sight updates. - return - - for(var/obj/item/organ/internal/cyberimp/eyes/E in internal_organs) - sight |= E.vision_flags - if(E.dark_view) - see_in_dark = max(see_in_dark,E.dark_view) - if(E.see_invisible) - see_invisible = min(see_invisible, E.see_invisible) - - if(see_override) - see_invisible = see_override - - /mob/living/carbon/handle_hud_icons() return diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index d28e728c82c..35ab0402b0c 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -197,28 +197,15 @@ if(!remote_view && !client.adminobs) reset_perspective(null) -/mob/living/proc/update_sight() - if(stat == DEAD) - grant_death_vision() - return - // Gives a mob the vision of being dead /mob/living/proc/grant_death_vision() sight |= SEE_TURFS sight |= SEE_MOBS sight |= SEE_OBJS + lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE see_in_dark = 8 see_invisible = SEE_INVISIBLE_OBSERVER - -// See through walls, dark, etc. -// basically the same as death vision except you can't -// see ghosts -/mob/living/proc/grant_xray_vision() - sight |= SEE_TURFS - sight |= SEE_MOBS - sight |= SEE_OBJS - see_in_dark = 8 - see_invisible = SEE_INVISIBLE_LEVEL_TWO + sync_lighting_plane_alpha() /mob/living/proc/handle_hud_icons() handle_hud_icons_health() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 52fde3d0d9e..10fc68d7363 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -992,3 +992,37 @@ for(var/atom/A in src) if(A.light_range > 0) A.extinguish_light() + +/mob/living/vv_edit_var(var_name, var_value) + switch(var_name) + if("stat") + if((stat == DEAD) && (var_value < DEAD))//Bringing the dead back to life + GLOB.dead_mob_list -= src + GLOB.living_mob_list += src + if((stat < DEAD) && (var_value == DEAD))//Kill he + GLOB.living_mob_list -= src + GLOB.dead_mob_list += src + . = ..() + switch(var_name) + if("weakened") + SetWeakened(var_value) + if("stunned") + SetStunned(var_value) + if("paralysis") + SetParalysis(var_value) + if("sleeping") + SetSleeping(var_value) + if("maxHealth") + updatehealth() + if("resize") + update_transform() + if("lighting_alpha") + sync_lighting_plane_alpha() + +/mob/living/update_sight() + if(!client) + return + + if(stat == DEAD) + grant_death_vision() + return diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 6e12748911b..ac89553865c 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -33,7 +33,6 @@ var/mob_size = MOB_SIZE_HUMAN var/metabolism_efficiency = 1 //more or less efficiency to metabolize helpful/harmful reagents and regulate body temperature.. var/digestion_ratio = 1 //controls how quickly reagents metabolize; largely governered by species attributes. - var/nightvision = 0 var/bloodcrawl = 0 //0 No blood crawling, 1 blood crawling, 2 blood crawling+mob devour var/holder = null //The holder for blood crawling diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index ccf319b0884..4d4bff42ae7 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -1290,4 +1290,29 @@ var/list/ai_verbs_default = list( return FALSE /mob/living/silicon/ai/ExtinguishMob() - return \ No newline at end of file + return + + +/mob/living/silicon/ai/update_sight() + if(!client) + return + + if(stat == DEAD) + grant_death_vision() + return + + see_invisible = initial(see_invisible) + see_in_dark = initial(see_in_dark) + lighting_alpha = initial(lighting_alpha) + sight = initial(sight) + + if(aiRestorePowerRoutine) + sight = sight &~ SEE_TURFS + sight = sight &~ SEE_MOBS + sight = sight &~ SEE_OBJS + see_in_dark = 0 + + if(see_override) + see_invisible = see_override + + sync_lighting_plane_alpha() diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index eec1ec5b8b8..06043025f7c 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -152,16 +152,3 @@ /mob/living/silicon/ai/rejuvenate() ..() add_ai_verbs(src) - -/mob/living/silicon/ai/update_sight() - see_invisible = initial(see_invisible) - see_in_dark = initial(see_in_dark) - sight = initial(sight) - if(aiRestorePowerRoutine) - sight = sight&~SEE_TURFS - sight = sight&~SEE_MOBS - sight = sight&~SEE_OBJS - see_in_dark = 0 - - if(see_override) - see_invisible = see_override diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 5f37177f674..bf09191ecf2 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -88,40 +88,6 @@ return 1 -/mob/living/silicon/robot/update_sight() - if(!client) - return - if(stat == DEAD) - grant_death_vision() - return - - see_invisible = initial(see_invisible) - see_in_dark = initial(see_in_dark) - sight = initial(sight) - - if(client.eye != src) - var/atom/A = client.eye - if(A.update_remote_sight(src)) //returns 1 if we override all other sight updates. - return - - if(sight_mode & BORGMESON) - sight |= SEE_TURFS - see_invisible = min(see_invisible, SEE_INVISIBLE_MINIMUM) - see_in_dark = 1 - - if(sight_mode & BORGXRAY) - sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) - see_invisible = SEE_INVISIBLE_LIVING - see_in_dark = 8 - - if(sight_mode & BORGTHERM) - sight |= SEE_MOBS - see_invisible = min(see_invisible, SEE_INVISIBLE_LIVING) - see_in_dark = 8 - - if(see_override) - see_invisible = see_override - /mob/living/silicon/robot/handle_hud_icons() update_items() update_cell() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 18bfe6998c3..de66b7b737a 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1385,3 +1385,43 @@ var/list/robot_verbs_default = list( /mob/living/silicon/robot/check_ear_prot() return ear_protection + +/mob/living/silicon/robot/update_sight() + if(!client) + return + + if(stat == DEAD) + grant_death_vision() + return + + see_invisible = initial(see_invisible) + see_in_dark = initial(see_in_dark) + sight = initial(sight) + lighting_alpha = initial(lighting_alpha) + + if(client.eye != src) + var/atom/A = client.eye + if(A.update_remote_sight(src)) //returns 1 if we override all other sight updates. + return + + if(sight_mode & BORGMESON) + sight |= SEE_TURFS + lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE + see_in_dark = 1 + + if(sight_mode & BORGXRAY) + sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) + see_invisible = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + see_invisible = SEE_INVISIBLE_LIVING + see_in_dark = 8 + + if(sight_mode & BORGTHERM) + sight |= SEE_MOBS + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE + see_invisible = min(see_invisible, SEE_INVISIBLE_LIVING) + see_in_dark = 8 + + if(see_override) + see_invisible = see_override + + sync_lighting_plane_alpha() \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 6ba407c8a90..d1982ac359d 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -30,7 +30,7 @@ status_flags = CANPUSH minbodytemp = 0 see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE death_sound = 'sound/voice/hiss6.ogg' deathmessage = "lets out a waning guttural screech, green blood bubbling from its maw..." diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index 18219179d40..e45000ff34f 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -17,6 +17,7 @@ speak_chance = 5 turns_per_move = 5 see_in_dark = 10 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE butcher_results = list(/obj/item/reagent_containers/food/snacks/spidermeat = 2, /obj/item/reagent_containers/food/snacks/spiderleg = 8) response_help = "pets" response_disarm = "gently pushes aside" diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 81b384f56b7..f0160879e22 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -16,7 +16,7 @@ var/throw_message = "bounces off of" var/icon_aggro = null // for swapping to when we get aggressive see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE mob_size = MOB_SIZE_LARGE /mob/living/simple_animal/hostile/asteroid/Aggro() diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index ad90272a4ce..5b9d94341ef 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -40,7 +40,7 @@ search_objects = 1 // So that it can see through walls - see_invisible = SEE_INVISIBLE_OBSERVER_NOLIGHTING + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE sight = SEE_SELF|SEE_MOBS|SEE_OBJS|SEE_TURFS move_force = MOVE_FORCE_EXTREMELY_STRONG move_resist = MOVE_FORCE_EXTREMELY_STRONG @@ -189,13 +189,6 @@ L.EyeBlind(4) return -/mob/living/simple_animal/hostile/statue/update_sight() - if(!client) - return - if(stat == DEAD) - grant_death_vision() - return - //Toggle Night Vision /obj/effect/proc_holder/spell/targeted/night_vision name = "Toggle Nightvision" @@ -207,15 +200,23 @@ message = "You toggle your night vision!" range = -1 include_user = 1 - var/non_night_vision = SEE_INVISIBLE_LIVING - var/night_vision = SEE_INVISIBLE_OBSERVER_NOLIGHTING /obj/effect/proc_holder/spell/targeted/night_vision/cast(list/targets, mob/user = usr) for(var/mob/living/target in targets) - if(target.see_invisible == non_night_vision) - target.see_invisible = night_vision - else - target.see_invisible = non_night_vision + switch(target.lighting_alpha) + if (LIGHTING_PLANE_ALPHA_VISIBLE) + target.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE + name = "Toggle Nightvision \[More]" + if (LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE) + target.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + name = "Toggle Nightvision \[Full]" + if (LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE) + target.lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE + name = "Toggle Nightvision \[OFF]" + else + target.lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE + name = "Toggle Nightvision \[ON]" + target.update_sight() /mob/living/simple_animal/hostile/statue/sentience_act() faction -= "neutral" diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm index 39c03feb928..1503c2bffe6 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm @@ -95,8 +95,7 @@ var/global/list/ts_spiderling_list = list() idle_vision_range = 10 aggro_vision_range = 10 see_in_dark = 10 - nightvision = 1 - see_invisible = 5 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE sight = SEE_MOBS // AI aggression settings diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 66fb417733b..adc498873bb 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -564,21 +564,5 @@ /mob/living/simple_animal/proc/sentience_act() //Called when a simple animal gains sentience via gold slime potion return -/mob/living/simple_animal/update_sight() - if(!client) - return - if(stat == DEAD) - grant_death_vision() - return - - see_invisible = initial(see_invisible) - see_in_dark = initial(see_in_dark) - sight = initial(sight) - - if(client.eye != src) - var/atom/A = client.eye - if(A.update_remote_sight(src)) //returns 1 if we override all other sight updates. - return - /mob/living/simple_animal/can_hear() . = TRUE \ No newline at end of file diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index ee04e624f02..9fe0e54f800 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1341,3 +1341,12 @@ var/list/slot_equipment_priority = list( \ /mob/proc/is_literate() return FALSE + +/mob/proc/update_sight() + sync_lighting_plane_alpha() + +/mob/proc/sync_lighting_plane_alpha() + if(hud_used) + var/obj/screen/plane_master/lighting/L = hud_used.plane_masters["[LIGHTING_PLANE]"] + if (L) + L.alpha = lighting_alpha \ No newline at end of file diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 3e9ff0b7ba6..e36e7e4a004 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -1,6 +1,6 @@ /mob density = 1 - layer = 4.0 + layer = MOB_LAYER animate_movement = 2 pressure_resistance = 8 dont_save = TRUE //to avoid it messing up in buildmode saving @@ -93,7 +93,7 @@ var/list/grabbed_by = list() var/list/requests = list() - + var/lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE var/list/mapobjs = list() var/in_throw_mode = 0 diff --git a/code/modules/shuttle/navigation_computer.dm b/code/modules/shuttle/navigation_computer.dm index feff384ed87..4ef9cfc55b0 100644 --- a/code/modules/shuttle/navigation_computer.dm +++ b/code/modules/shuttle/navigation_computer.dm @@ -291,6 +291,8 @@ /mob/camera/aiEye/remote/shuttle_docker/update_remote_sight(mob/living/user) user.sight = SEE_TURFS + + ..() return TRUE /datum/action/innate/shuttledocker_rotate diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm index da559d38d5f..a8ee1beb2a6 100644 --- a/code/modules/surgery/organs/augments_eyes.dm +++ b/code/modules/surgery/organs/augments_eyes.dm @@ -8,8 +8,10 @@ w_class = WEIGHT_CLASS_TINY var/vision_flags = 0 - var/dark_view = 0 + var/see_in_dark = 0 var/see_invisible = 0 + var/lighting_alpha + var/eye_colour = "#000000" var/old_eye_colour = "#000000" var/flash_protect = 0 @@ -54,7 +56,7 @@ implant_color = "#AEFF00" origin_tech = "materials=4;engineering=4;biotech=4;magnets=4" vision_flags = SEE_TURFS - see_invisible = SEE_INVISIBLE_MINIMUM + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE aug_message = "Suddenly, you realize how much of a mess the station really is..." /obj/item/organ/internal/cyberimp/eyes/xray @@ -63,8 +65,8 @@ implant_color = "#000000" origin_tech = "materials=4;programming=4;biotech=6;magnets=4" vision_flags = SEE_MOBS | SEE_OBJS | SEE_TURFS - dark_view = 8 - see_invisible = SEE_INVISIBLE_MINIMUM + see_in_dark = 8 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE /obj/item/organ/internal/cyberimp/eyes/thermals name = "Thermals implant" diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index 51d73fc9873..fba2df57e8a 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -10,9 +10,13 @@ var/list/colourblind_matrix = MATRIX_GREYSCALE //Special colourblindness parameters. By default, it's black-and-white. var/list/replace_colours = LIST_GREYSCALE_REPLACE var/dependent_disabilities = null //Gets set by eye-dependent disabilities such as colourblindness so the eyes can transfer the disability during transplantation. - var/dark_view = 2 //Default dark_view for Humans. var/weld_proof = null //If set, the eyes will not take damage during welding. eg. IPC optical sensors do not take damage when they weld things while all other eyes will. + var/vision_flags = 0 + var/see_in_dark = 2 + var/see_invisible = SEE_INVISIBLE_LIVING + var/lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE + /obj/item/organ/internal/eyes/proc/update_colour() dna.write_eyes_attributes(src) @@ -31,11 +35,8 @@ else return colourmatrix -/obj/item/organ/internal/eyes/proc/get_dark_view() //Returns dark_view (if the eyes are organic) for see_invisible handling in species.dm to be autoprocessed by life(). - return dark_view - /obj/item/organ/internal/eyes/proc/shine() - if(is_robotic() || (dark_view > EYE_SHINE_THRESHOLD)) + if(is_robotic() || (see_in_dark > EYE_SHINE_THRESHOLD)) return TRUE /obj/item/organ/internal/eyes/insert(mob/living/carbon/human/M, special = 0) @@ -70,7 +71,7 @@ colourmatrix = null ..() //Make sure the organ's got the robotic status indicators before updating the client colour. if(owner) - owner.update_client_colour(0) //Since mechanical eyes give dark_view of 2 and full colour vision atm, just having this here is fine. + owner.update_client_colour(0) //Since mechanical eyes give see_in_dark of 2 and full colour vision atm, just having this here is fine. /obj/item/organ/internal/eyes/cybernetic name = "cybernetic eyes" diff --git a/code/modules/surgery/organs/subtypes/abductor.dm b/code/modules/surgery/organs/subtypes/abductor.dm index fd57464381a..b499135417e 100644 --- a/code/modules/surgery/organs/subtypes/abductor.dm +++ b/code/modules/surgery/organs/subtypes/abductor.dm @@ -4,4 +4,4 @@ /obj/item/organ/internal/eyes/abductor name = "abductor eyeballs" - dark_view = 3 \ No newline at end of file + see_in_dark = 3 \ No newline at end of file diff --git a/code/modules/surgery/organs/subtypes/drask.dm b/code/modules/surgery/organs/subtypes/drask.dm index e457c4cddaa..49b11d096b6 100644 --- a/code/modules/surgery/organs/subtypes/drask.dm +++ b/code/modules/surgery/organs/subtypes/drask.dm @@ -26,4 +26,4 @@ name = "drask eyeballs" icon = 'icons/obj/species_organs/drask.dmi' desc = "Drask eyes. They look even stranger disembodied" - dark_view = 5 \ No newline at end of file + see_in_dark = 5 \ No newline at end of file diff --git a/code/modules/surgery/organs/subtypes/grey.dm b/code/modules/surgery/organs/subtypes/grey.dm index 3e7598fa06f..6e4a0e3eafd 100644 --- a/code/modules/surgery/organs/subtypes/grey.dm +++ b/code/modules/surgery/organs/subtypes/grey.dm @@ -23,7 +23,7 @@ name = "grey eyeballs" desc = "They still look creepy and emotionless" icon = 'icons/obj/species_organs/grey.dmi' - dark_view = 5 + see_in_dark = 5 /obj/item/organ/internal/heart/grey name = "grey heart" diff --git a/code/modules/surgery/organs/subtypes/shadow.dm b/code/modules/surgery/organs/subtypes/shadow.dm index 26a0bc50577..56bec1a4a7e 100644 --- a/code/modules/surgery/organs/subtypes/shadow.dm +++ b/code/modules/surgery/organs/subtypes/shadow.dm @@ -1,3 +1,3 @@ /obj/item/organ/internal/eyes/shadow name = "dark orbs" - dark_view = 8 \ No newline at end of file + see_in_dark = 8 \ No newline at end of file diff --git a/code/modules/surgery/organs/subtypes/tajaran.dm b/code/modules/surgery/organs/subtypes/tajaran.dm index d6202a377e6..99598a80fb1 100644 --- a/code/modules/surgery/organs/subtypes/tajaran.dm +++ b/code/modules/surgery/organs/subtypes/tajaran.dm @@ -8,12 +8,12 @@ name = "tajaran eyeballs" colourblind_matrix = MATRIX_TAJ_CBLIND //The colour matrix and darksight parameters that the mob will recieve when they get the disability. replace_colours = LIST_TAJ_REPLACE - dark_view = 8 + see_in_dark = 8 /obj/item/organ/internal/eyes/tajaran/farwa //Being the lesser form of Tajara, Farwas have an utterly incurable version of their colourblindness. name = "farwa eyeballs" colourmatrix = MATRIX_TAJ_CBLIND - dark_view = 8 + see_in_dark = 8 replace_colours = LIST_TAJ_REPLACE /obj/item/organ/internal/heart/tajaran diff --git a/code/modules/surgery/organs/subtypes/unathi.dm b/code/modules/surgery/organs/subtypes/unathi.dm index 26ad86d4700..a612bc7f253 100644 --- a/code/modules/surgery/organs/subtypes/unathi.dm +++ b/code/modules/surgery/organs/subtypes/unathi.dm @@ -7,7 +7,7 @@ /obj/item/organ/internal/eyes/unathi name = "unathi eyeballs" icon = 'icons/obj/species_organs/unathi.dmi' - dark_view = 3 + see_in_dark = 3 /obj/item/organ/internal/heart/unathi name = "unathi heart" diff --git a/code/modules/surgery/organs/subtypes/vulpkanin.dm b/code/modules/surgery/organs/subtypes/vulpkanin.dm index 2c583c8f84a..820b152c43f 100644 --- a/code/modules/surgery/organs/subtypes/vulpkanin.dm +++ b/code/modules/surgery/organs/subtypes/vulpkanin.dm @@ -8,12 +8,12 @@ icon = 'icons/obj/species_organs/vulpkanin.dmi' colourblind_matrix = MATRIX_VULP_CBLIND //The colour matrix and darksight parameters that the mob will recieve when they get the disability. replace_colours = LIST_VULP_REPLACE - dark_view = 8 + see_in_dark = 8 /obj/item/organ/internal/eyes/vulpkanin/wolpin //Being the lesser form of Vulpkanin, Wolpins have an utterly incurable version of their colourblindness. name = "wolpin eyeballs" colourmatrix = MATRIX_VULP_CBLIND - dark_view = 8 + see_in_dark = 8 replace_colours = LIST_VULP_REPLACE /obj/item/organ/internal/heart/vulpkanin diff --git a/code/modules/surgery/organs/subtypes/wryn.dm b/code/modules/surgery/organs/subtypes/wryn.dm index ab30c16f61f..8900bb8b37d 100644 --- a/code/modules/surgery/organs/subtypes/wryn.dm +++ b/code/modules/surgery/organs/subtypes/wryn.dm @@ -8,4 +8,4 @@ slot = "hivenode" /obj/item/organ/internal/eyes/wryn - dark_view = 3 \ No newline at end of file + see_in_dark = 3 \ No newline at end of file From 5387d0ee6718fff28f90c91489093b83020853bf Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Tue, 23 Apr 2019 22:59:58 +0200 Subject: [PATCH 026/195] TOGGLES_TOTAL fix --- code/__DEFINES/preferences.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index 32433975e9e..22b4334e3be 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -32,7 +32,7 @@ #define TYPING_ONCE 1048576 #define AMBIENT_OCCLUSION 2097152 -#define TOGGLES_TOTAL 4194304 // If you add or remove a preference toggle above, make sure you update this define with the total value of the toggles combined. +#define TOGGLES_TOTAL 4194303 // If you add or remove a preference toggle above, make sure you update this define with the total value of the toggles combined. #define TOGGLES_DEFAULT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_LOOC|MEMBER_PUBLIC|DONATOR_PUBLIC|AMBIENT_OCCLUSION) From 44347029db30d105c6daec4aab5cd3d947b334d5 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Tue, 23 Apr 2019 23:22:03 +0200 Subject: [PATCH 027/195] Compile fix --- code/game/atoms.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index f30fa412a8f..5410d5f66a0 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -675,7 +675,7 @@ var/list/blood_splatter_icons = list() //the sight changes to give to the mob whose perspective is set to that atom (e.g. A mob with nightvision loses its nightvision while looking through a normal camera) /atom/proc/update_remote_sight(mob/living/user) - sync_lighting_plane_alpha() + user.sync_lighting_plane_alpha() return /atom/proc/checkpass(passflag) From 9e9d72d2ae380e195cc00acda4ab769fa258f57f Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Wed, 24 Apr 2019 00:47:55 +0200 Subject: [PATCH 028/195] Darkness fixes --- code/_onclick/hud/fullscreen.dm | 2 +- .../mining/lavaland/loot/tendril_loot.dm | 31 +++++++++++-------- code/modules/mob/dead/observer/observer.dm | 2 +- code/modules/mob/living/carbon/alien/alien.dm | 20 +++++++----- code/modules/mob/living/carbon/carbon.dm | 4 ++- code/modules/mob/living/carbon/human/human.dm | 1 + .../living/carbon/human/species/_species.dm | 3 -- code/modules/mob/living/living.dm | 2 ++ code/modules/mob/living/silicon/ai/ai.dm | 1 + .../modules/mob/living/silicon/robot/robot.dm | 4 ++- code/modules/mob/mob.dm | 1 + 11 files changed, 44 insertions(+), 27 deletions(-) diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm index 0a9d0f6b4f0..9d00f216eac 100644 --- a/code/_onclick/hud/fullscreen.dm +++ b/code/_onclick/hud/fullscreen.dm @@ -48,7 +48,7 @@ var/list/screens = mymob.screens for(var/category in screens) screen = screens[category] - if(screen.should_show_to(src)) + if(screen.should_show_to(mymob)) screen.update_for_view(mymob.client.view) mymob.client.screen |= screen else diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm index 5a39264e668..bf42a4af0b1 100644 --- a/code/modules/mining/lavaland/loot/tendril_loot.dm +++ b/code/modules/mining/lavaland/loot/tendril_loot.dm @@ -192,6 +192,8 @@ icon_state = "lantern-blue" item_state = "lantern" var/obj/effect/wisp/wisp + var/sight_flags = SEE_MOBS + var/lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE /obj/item/wisp_lantern/attack_self(mob/user) if(!wisp) @@ -203,26 +205,25 @@ to_chat(user, "You release the wisp. It begins to bob around your head.") icon_state = "lantern" wisp.orbit(user, 20) - user.update_sight() - feedback_add_details("wisp_lantern","F") // freed + RegisterSignal(user, COMSIG_MOB_UPDATE_SIGHT, .proc/update_user_sight) + user.update_sight() + to_chat(user, "The wisp enhances your vision.") + + feedback_add_details("wisp_lantern","F") // freed else to_chat(user, "You return the wisp to the lantern.") - - var/mob/target - if(wisp.orbiting) - target = wisp.orbiting wisp.stop_orbit() wisp.forceMove(src) - if (istype(target)) - target.update_sight() - to_chat(target, "Your vision returns to normal.") + UnregisterSignal(user, COMSIG_MOB_UPDATE_SIGHT) + user.update_sight() + to_chat(user, "Your vision returns to normal.") icon_state = "lantern-blue" feedback_add_details("wisp_lantern","R") // returned -/obj/item/wisp_lantern/Initialize() +/obj/item/wisp_lantern/Initialize(mapload) . = ..() wisp = new(src) @@ -232,7 +233,13 @@ qdel(wisp) else wisp.visible_message("[wisp] has a sad feeling for a moment, then it passes.") - ..() + return ..() + +/obj/item/wisp_lantern/proc/update_user_sight(mob/user) + user.sight |= sight_flags + if(!isnull(lighting_alpha)) + user.lighting_alpha = min(user.lighting_alpha, lighting_alpha) + user.sync_lighting_plane_alpha() /obj/effect/wisp name = "friendly wisp" @@ -241,8 +248,6 @@ icon_state = "orb" light_range = 7 layer = ABOVE_ALL_MOB_LAYER - var/sight_flags = SEE_MOBS - var/lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE //Red/Blue Cubes /obj/item/warp_cube diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index aaad280cc0d..8d7285ceb4f 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -691,7 +691,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp see_invisible = SEE_INVISIBLE_OBSERVER updateghostimages() - ..() + . = ..() /mob/dead/observer/proc/updateghostsight() if(!seedarkness) diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 4d1d91696eb..84bb5af399d 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -5,18 +5,21 @@ icon = 'icons/mob/alien.dmi' gender = NEUTER dna = null - alien_talk_understand = 1 - var/nightvision = 1 + alien_talk_understand = TRUE + + var/nightvision = FALSE + see_in_dark = 4 + var/obj/item/card/id/wear_id = null // Fix for station bounced radios -- Skie - var/has_fine_manipulation = 0 - var/move_delay_add = 0 // movement delay to add + var/has_fine_manipulation = FALSE + var/move_delay_add = FALSE // movement delay to add status_flags = CANPARALYSE|CANPUSH var/heal_rate = 5 - var/large = 0 + var/large = FALSE var/heat_protection = 0.5 - var/leaping = 0 + var/leaping = FALSE ventcrawler = 2 var/list/alien_organs = list() var/death_message = "lets out a waning guttural screech, green blood bubbling from its maw..." @@ -153,7 +156,7 @@ nightvision = TRUE usr.hud_used.nightvisionicon.icon_state = "nightvision1" else if(nightvision) - see_in_dark = 4 + see_in_dark = initial(see_in_dark) lighting_alpha = initial(lighting_alpha) nightvision = FALSE usr.hud_used.nightvisionicon.icon_state = "nightvision0" @@ -298,3 +301,6 @@ Des: Removes all infected images from the alien. if(see_override) see_invisible = see_override + + sync_lighting_plane_alpha() + SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index c1941c39a6e..7feebe30766 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -1162,4 +1162,6 @@ so that different stomachs can handle things in different ways VB*/ lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE if(see_override) - see_invisible = see_override \ No newline at end of file + see_invisible = see_override + + SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index b20776419d2..f094f5611a6 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -551,6 +551,7 @@ return dna.species.update_sight(src) + SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) //Added a safety check in case you want to shock a human mob directly through electrocute_act. /mob/living/carbon/human/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = FALSE, override = FALSE, tesla_shock = FALSE, illusion = FALSE, stun = TRUE) diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index 0b597c17a6f..c24a066f073 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -641,9 +641,6 @@ It'll return null if the organ doesn't correspond, so include null checks when u H.see_invisible = initial(H.see_invisible) H.lighting_alpha = initial(H.lighting_alpha) - if(H.see_in_dark > 2) //Preliminary see_invisible handling as per set_species() in code\modules\mob\living\carbon\human\human.dm. - H.lighting_alpha = min(H.lighting_alpha, LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE) - if(H.client && H.client.eye != H) var/atom/A = H.client.eye if(A.update_remote_sight(H)) //returns 1 if we override all other sight updates. diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 10fc68d7363..28089468d8c 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1026,3 +1026,5 @@ if(stat == DEAD) grant_death_vision() return + + . = ..() \ No newline at end of file diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 4d4bff42ae7..d339ae12dc6 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -1316,3 +1316,4 @@ var/list/ai_verbs_default = list( see_invisible = see_override sync_lighting_plane_alpha() + SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index de66b7b737a..8084b358d96 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1424,4 +1424,6 @@ var/list/robot_verbs_default = list( if(see_override) see_invisible = see_override - sync_lighting_plane_alpha() \ No newline at end of file + sync_lighting_plane_alpha() + SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) + \ No newline at end of file diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 9fe0e54f800..68cb8703820 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1343,6 +1343,7 @@ var/list/slot_equipment_priority = list( \ return FALSE /mob/proc/update_sight() + SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) sync_lighting_plane_alpha() /mob/proc/sync_lighting_plane_alpha() From 20b9285fc4f746c707491c09867345d792231880 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Wed, 24 Apr 2019 01:36:56 +0200 Subject: [PATCH 029/195] Wisp/meson implant fixes --- code/modules/mining/lavaland/loot/tendril_loot.dm | 9 +++++++-- code/modules/surgery/organs/augments_eyes.dm | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm index bf42a4af0b1..ac3ec9d04c3 100644 --- a/code/modules/mining/lavaland/loot/tendril_loot.dm +++ b/code/modules/mining/lavaland/loot/tendril_loot.dm @@ -191,6 +191,7 @@ icon = 'icons/obj/lighting.dmi' icon_state = "lantern-blue" item_state = "lantern" + light_range = 7 var/obj/effect/wisp/wisp var/sight_flags = SEE_MOBS var/lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE @@ -202,21 +203,25 @@ return if(wisp.loc == src) + RegisterSignal(user, COMSIG_MOB_UPDATE_SIGHT, .proc/update_user_sight) + to_chat(user, "You release the wisp. It begins to bob around your head.") icon_state = "lantern" wisp.orbit(user, 20) + set_light(0) - RegisterSignal(user, COMSIG_MOB_UPDATE_SIGHT, .proc/update_user_sight) user.update_sight() to_chat(user, "The wisp enhances your vision.") feedback_add_details("wisp_lantern","F") // freed else + UnregisterSignal(user, COMSIG_MOB_UPDATE_SIGHT) + to_chat(user, "You return the wisp to the lantern.") wisp.stop_orbit() wisp.forceMove(src) + set_light(initial(light_range)) - UnregisterSignal(user, COMSIG_MOB_UPDATE_SIGHT) user.update_sight() to_chat(user, "Your vision returns to normal.") diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm index a8ee1beb2a6..0dc99e310cb 100644 --- a/code/modules/surgery/organs/augments_eyes.dm +++ b/code/modules/surgery/organs/augments_eyes.dm @@ -56,7 +56,7 @@ implant_color = "#AEFF00" origin_tech = "materials=4;engineering=4;biotech=4;magnets=4" vision_flags = SEE_TURFS - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE aug_message = "Suddenly, you realize how much of a mess the station really is..." /obj/item/organ/internal/cyberimp/eyes/xray From c8277bd282e2072df859615053614eeec2b2aea3 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Wed, 24 Apr 2019 02:35:53 +0200 Subject: [PATCH 030/195] More darkness fixes --- code/_onclick/hud/plane_master.dm | 11 ++++++++++- .../gamemodes/miniantags/guardian/types/ranged.dm | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/code/_onclick/hud/plane_master.dm b/code/_onclick/hud/plane_master.dm index aebc194c97e..b43715ee598 100644 --- a/code/_onclick/hud/plane_master.dm +++ b/code/_onclick/hud/plane_master.dm @@ -12,6 +12,15 @@ /obj/screen/plane_master/proc/Hide(override) alpha = override || hide_alpha +/obj/screen/plane_master/proc/outline(_size, _color) + filters += filter(type = "outline", size = _size, color = _color) + +/obj/screen/plane_master/proc/shadow(_size, _border, _offset = 0, _x = 0, _y = 0, _color = "#04080FAA") + filters += filter(type = "drop_shadow", x = _x, y = _y, color = _color, size = _size, offset = _offset, border = _border) + +/obj/screen/plane_master/proc/clear_filters() + filters = list() + //Why do plane masters need a backdrop sometimes? Read http://www.byond.com/forum/?post=2141928 //Trust me, you need one. Period. If you don't think you do, you're doing something extremely wrong. /obj/screen/plane_master/proc/backdrop(mob/mymob) @@ -29,7 +38,7 @@ blend_mode = BLEND_OVERLAY /obj/screen/plane_master/game_world/backdrop(mob/mymob) - filters -= FILTER_AMBIENT_OCCLUSION + clear_filters() if(istype(mymob) && mymob.client && mymob.client.prefs && (mymob.client.prefs.toggles & AMBIENT_OCCLUSION)) filters += FILTER_AMBIENT_OCCLUSION diff --git a/code/game/gamemodes/miniantags/guardian/types/ranged.dm b/code/game/gamemodes/miniantags/guardian/types/ranged.dm index 641d44dae2e..3e57a059d10 100644 --- a/code/game/gamemodes/miniantags/guardian/types/ranged.dm +++ b/code/game/gamemodes/miniantags/guardian/types/ranged.dm @@ -68,6 +68,8 @@ lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE msg = "You deactivate your night vision." + update_sight() + to_chat(src, "[msg]") /mob/living/simple_animal/hostile/guardian/ranged/verb/Snare() From 1dccef300f333c13f438617751dacc3ba4d3725d Mon Sep 17 00:00:00 2001 From: Kyep Date: Fri, 26 Apr 2019 02:33:20 -0700 Subject: [PATCH 031/195] Adds message if someone tries to join with no available slots. --- code/modules/mob/new_player/new_player.dm | 40 +++++++++++++---------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index a46b9a94fc7..559393ef307 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -464,8 +464,7 @@ dat += " [a.title].
" - dat += "Choose from the following open positions:

" - + var/num_jobs_available = 0 var/list/activePlayers = list() var/list/categorizedJobs = list( "Command" = list(jobs = list(), titles = command_positions, color = "#aac1ee"), @@ -480,6 +479,7 @@ ) for(var/datum/job/job in SSjobs.occupations) if(job && IsJobAvailable(job.title) && !job.barred_by_disability(client)) + num_jobs_available++ activePlayers[job] = 0 var/categorized = 0 // Only players with the job assigned and AFK for less than 10 minutes count as active @@ -502,23 +502,27 @@ if(!categorized) categorizedJobs["Miscellaneous"]["jobs"] += job - dat += "
" - for(var/jobcat in categorizedJobs) - if(categorizedJobs[jobcat]["colBreak"]) - dat += "" - if(length(categorizedJobs[jobcat]["jobs"]) < 1) - continue - var/color = categorizedJobs[jobcat]["color"] - dat += "
" - dat += "[jobcat]" - for(var/datum/job/job in categorizedJobs[jobcat]["jobs"]) - if(job in SSjobs.prioritized_jobs) - dat += "[job.title] ([job.current_positions]) (Active: [activePlayers[job]])
" - else - dat += "[job.title] ([job.current_positions]) (Active: [activePlayers[job]])
" - dat += "

" + if(num_jobs_available) + dat += "Choose from the following open positions:

" + dat += "
" + for(var/jobcat in categorizedJobs) + if(categorizedJobs[jobcat]["colBreak"]) + dat += "" + if(length(categorizedJobs[jobcat]["jobs"]) < 1) + continue + var/color = categorizedJobs[jobcat]["color"] + dat += "
" + dat += "[jobcat]" + for(var/datum/job/job in categorizedJobs[jobcat]["jobs"]) + if(job in SSjobs.prioritized_jobs) + dat += "[job.title] ([job.current_positions]) (Active: [activePlayers[job]])
" + else + dat += "[job.title] ([job.current_positions]) (Active: [activePlayers[job]])
" + dat += "

" - dat += "
" + dat += "
" + else + dat += "

Unfortunately, there are no job slots free currently.
Wait a few minutes, then try again.
Or, try observing the round.
" // Removing the old window method but leaving it here for reference // src << browse(dat, "window=latechoices;size=300x640;can_close=1") // Added the new browser window method From b410ee5a973d378a2406696ba6608be4cb8e0d9d Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Fri, 26 Apr 2019 23:13:13 +0200 Subject: [PATCH 032/195] zvis fix --- code/modules/awaymissions/zvis.dm | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/code/modules/awaymissions/zvis.dm b/code/modules/awaymissions/zvis.dm index 7e7c65485c4..5561e5e90cd 100644 --- a/code/modules/awaymissions/zvis.dm +++ b/code/modules/awaymissions/zvis.dm @@ -47,7 +47,7 @@ // to know if the world changed on the remote side /obj/effect/portal_sensor invisibility = 101 - var/required_color = -1 + var/light_hash = -1 var/triggered_this_tick = 0 var/datum/owner // owner that receive signals var/list/params[0] // what to send to the main object to indicate which sensor @@ -86,12 +86,18 @@ var/turf/T = loc if(istype(T) && T.lighting_object && !T.lighting_object.needs_update) var/atom/movable/lighting_object/O = T.lighting_object - if(O.color != required_color) - required_color = O.color + var/hash = 0 + + for(var/lighting_corner in O) + var/datum/lighting_corner/C = lighting_corner + hash = hash + C.lum_r + C.lum_g + C.lum_b + + if(hash != light_hash) + light_hash = hash trigger() else - if(required_color != -1) - required_color = -1 + if(light_hash != -1) + light_hash = -1 trigger() // for second floor showing floor below @@ -364,4 +370,4 @@ screen_loc = "CENTER[ox >= 0 ? "+" : ""][ox],CENTER[oy >= 0 ? "+" : ""][oy]" /obj/effect/view_portal_dummy/attack_ghost(mob/user) - owner.attack_ghost(user) + owner.attack_ghost(user) \ No newline at end of file From 40c1a25eb5794e11c661801c387a208d8e42f2aa Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Sat, 27 Apr 2019 01:08:17 +0200 Subject: [PATCH 033/195] Lighting fixes --- code/controllers/subsystem/lighting.dm | 14 ++--- code/game/gamemodes/cult/cult_items.dm | 2 +- .../gamemodes/malfunction/Malf_Modules.dm | 10 +-- code/modules/clothing/clothing.dm | 4 +- code/modules/clothing/glasses/glasses.dm | 16 ++--- code/modules/clothing/glasses/hud.dm | 10 +-- .../clothing/spacesuits/miscellaneous.dm | 1 + code/modules/lighting/lighting_area.dm | 8 +-- code/modules/lighting/lighting_atom.dm | 32 +++++----- code/modules/lighting/lighting_corner.dm | 28 ++++----- code/modules/lighting/lighting_object.dm | 14 ++--- code/modules/lighting/lighting_source.dm | 62 +++++++++---------- code/modules/lighting/lighting_turf.dm | 36 +++++------ .../mining/lavaland/loot/tendril_loot.dm | 1 - code/modules/mob/camera/camera.dm | 2 +- code/modules/mob/living/carbon/alien/alien.dm | 9 +-- code/modules/mob/living/carbon/carbon.dm | 6 +- code/modules/mob/living/carbon/human/human.dm | 1 + .../mob/living/carbon/human/inventory.dm | 8 +-- .../living/carbon/human/species/_species.dm | 9 +-- code/modules/mob/living/life.dm | 2 +- code/modules/mob/living/silicon/ai/ai.dm | 5 +- .../mob/living/silicon/ai/freelook/chunk.dm | 8 ++- .../modules/mob/living/silicon/robot/robot.dm | 11 +--- .../mob/living/simple_animal/constructs.dm | 2 +- .../simple_animal/hostile/giant_spider.dm | 2 +- .../living/simple_animal/hostile/statue.dm | 2 +- .../hostile/terror_spiders/terror_spiders.dm | 2 +- code/modules/mob/mob_defines.dm | 1 - code/modules/surgery/organs/augments_eyes.dm | 1 + 30 files changed, 148 insertions(+), 161 deletions(-) diff --git a/code/controllers/subsystem/lighting.dm b/code/controllers/subsystem/lighting.dm index 252f2dcb2c8..82bbd52471a 100644 --- a/code/controllers/subsystem/lighting.dm +++ b/code/controllers/subsystem/lighting.dm @@ -16,7 +16,7 @@ SUBSYSTEM_DEF(lighting) if(config.starlight) for(var/I in GLOB.all_areas) var/area/A = I - if (A.dynamic_lighting == DYNAMIC_LIGHTING_IFSTARLIGHT) + if(A.dynamic_lighting == DYNAMIC_LIGHTING_IFSTARLIGHT) A.luminosity = 0 create_all_lighting_objects() @@ -40,7 +40,7 @@ SUBSYSTEM_DEF(lighting) if(init_tick_checks) CHECK_TICK - else if (MC_TICK_CHECK) + else if(MC_TICK_CHECK) break if(i) GLOB.lighting_update_lights.Cut(1, i+1) @@ -56,9 +56,9 @@ SUBSYSTEM_DEF(lighting) C.needs_update = FALSE if(init_tick_checks) CHECK_TICK - else if (MC_TICK_CHECK) + else if(MC_TICK_CHECK) break - if (i) + if(i) GLOB.lighting_update_corners.Cut(1, i+1) i = 0 @@ -69,16 +69,16 @@ SUBSYSTEM_DEF(lighting) for (i in 1 to GLOB.lighting_update_objects.len) var/atom/movable/lighting_object/O = GLOB.lighting_update_objects[i] - if (QDELETED(O)) + if(QDELETED(O)) continue O.update() O.needs_update = FALSE if(init_tick_checks) CHECK_TICK - else if (MC_TICK_CHECK) + else if(MC_TICK_CHECK) break - if (i) + if(i) GLOB.lighting_update_objects.Cut(1, i+1) diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index f38958e0c2b..e4274d18d49 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -218,7 +218,7 @@ name = "zealot's blindfold" icon_state = "blindfold" item_state = "blindfold" - darkness_view = 8 + see_in_dark = 8 flash_protect = 1 /obj/item/clothing/glasses/night/cultblind/equipped(mob/user, slot) diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index 5cf32951e11..13df41fe531 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -496,22 +496,22 @@ return var/upgradedcams = 0 - see_override = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //Night-vision, without which X-ray would be very limited in power. + RegisterSignal(src, COMSIG_MOB_UPDATE_SIGHT, .proc/update_upgraded_cameras_sight) //Makes sure the AI has night vision, without which X-ray would be very limited in power. update_sight() for(var/obj/machinery/camera/C in cameranet.cameras) if(C.assembly) - var/upgraded = 0 + var/upgraded = FALSE if(!C.isXRay()) C.upgradeXRay() //Update what it can see. cameranet.updateVisibility(C, 0) - upgraded = 1 + upgraded = TRUE if(!C.isEmpProof()) C.upgradeEmpProof() - upgraded = 1 + upgraded = TRUE if(upgraded) upgradedcams++ @@ -519,6 +519,8 @@ to_chat(src, "OTA firmware distribution complete! Cameras upgraded: [upgradedcams]. Light amplification system online.") verbs -= /mob/living/silicon/ai/proc/upgrade_cameras +/mob/living/silicon/ai/proc/update_upgraded_cameras_sight() + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE /datum/AI_Module/large/eavesdrop module_name = "Enhanced Surveillance" diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 5e103f14c72..d339f767865 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -151,7 +151,7 @@ slot_flags = SLOT_EYES materials = list(MAT_GLASS = 250) var/vision_flags = 0 - var/darkness_view = 0 //Base human is 2 + var/see_in_dark = 0 //Base human is 2 var/invis_view = SEE_INVISIBLE_LIVING var/invis_override = 0 var/lighting_alpha @@ -284,7 +284,7 @@ BLIND // can't see anything var/HUDType = null var/vision_flags = 0 - var/darkness_view = 0 + var/see_in_dark = 0 var/lighting_alpha var/can_toggle = null diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 6a7da898b25..3a427d96bec 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -52,7 +52,7 @@ icon_state = "nvgmeson" item_state = "glasses" origin_tech = "magnets=4;engineering=5;plasmatech=4" - darkness_view = 8 + see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE prescription_upgradable = 0 @@ -104,7 +104,7 @@ desc = "Now you can science in darkness." icon_state = "nvpurple" item_state = "glasses" - darkness_view = 8 + see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //don't render darkness while wearing these /obj/item/clothing/glasses/janitor @@ -123,7 +123,7 @@ icon_state = "night" item_state = "glasses" origin_tech = "materials=4;magnets=4;plasmatech=4;engineering=4" - darkness_view = 8 + see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //don't render darkness while wearing these species_fit = list("Vox") sprite_sheets = list( @@ -224,7 +224,7 @@ name = "sunglasses" icon_state = "sun" item_state = "sunglasses" - darkness_view = 1 + see_in_dark = 1 flash_protect = 1 tint = 1 prescription_upgradable = 1 @@ -238,7 +238,7 @@ /obj/item/clothing/glasses/sunglasses/fake desc = "Cheap, plastic sunglasses. They don't even have UV protection." name = "cheap sunglasses" - darkness_view = 0 + see_in_dark = 0 flash_protect = 0 tint = 0 @@ -286,7 +286,7 @@ name = "sunglasses" icon_state = "sun" item_state = "sunglasses" - darkness_view = 1 + see_in_dark = 1 flash_protect = 1 tint = 1 species_fit = list("Vox") @@ -505,11 +505,11 @@ icon_state = "godeye" item_state = "godeye" vision_flags = SEE_TURFS|SEE_MOBS|SEE_OBJS - darkness_view = 8 + see_in_dark = 8 scan_reagents = 1 flags = NODROP flags_cover = null - lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE /obj/item/clothing/glasses/godeye/attackby(obj/item/W as obj, mob/user as mob, params) if(istype(W, src) && W != src && W.loc == user) diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index ad775b04c14..7f5d73acb1d 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -50,7 +50,7 @@ icon_state = "healthhudnight" item_state = "glasses" origin_tech = "magnets=4;biotech=4;plasmatech=4;engineering=5" - darkness_view = 8 + see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE prescription_upgradable = 0 @@ -72,7 +72,7 @@ icon_state = "diagnostichudnight" item_state = "glasses" origin_tech = "magnets=4;powerstorage=4;plasmatech=4;engineering=5" - darkness_view = 8 + see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE prescription_upgradable = 0 @@ -112,7 +112,7 @@ desc = "An advanced heads-up display which provides id data and vision in complete darkness." icon_state = "securityhudnight" origin_tech = "magnets=4;combat=4;plasmatech=4;engineering=5" - darkness_view = 8 + see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //don't render darkness while wearing these prescription_upgradable = 0 @@ -124,7 +124,7 @@ desc = "Sunglasses with a HUD." icon_state = "sunhud" origin_tech = "magnets=3;combat=3;engineering=3" - darkness_view = 1 + see_in_dark = 1 flash_protect = 1 tint = 1 prescription_upgradable = 1 @@ -154,7 +154,7 @@ desc = "A hydroponic HUD fitted with a light amplifier." icon_state = "hydroponichudnight" item_state = "glasses" - darkness_view = 8 + see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE prescription_upgradable = 0 diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index 6b86d8f5d5c..91b28ad3206 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -48,6 +48,7 @@ unacidable = 1 vision_flags = SEE_MOBS lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //don't render darkness while wearing these + see_in_dark = 8 HUDType = MEDHUD strip_delay = 130 diff --git a/code/modules/lighting/lighting_area.dm b/code/modules/lighting/lighting_area.dm index 58e9a4337a5..77e955d10a6 100644 --- a/code/modules/lighting/lighting_area.dm +++ b/code/modules/lighting/lighting_area.dm @@ -3,21 +3,21 @@ var/dynamic_lighting = DYNAMIC_LIGHTING_ENABLED /area/proc/set_dynamic_lighting(var/new_dynamic_lighting = DYNAMIC_LIGHTING_ENABLED) - if (new_dynamic_lighting == dynamic_lighting) + if(new_dynamic_lighting == dynamic_lighting) return FALSE dynamic_lighting = new_dynamic_lighting - if (IS_DYNAMIC_LIGHTING(src)) + if(IS_DYNAMIC_LIGHTING(src)) cut_overlay(/obj/effect/fullbright) for (var/turf/T in src) - if (IS_DYNAMIC_LIGHTING(T)) + if(IS_DYNAMIC_LIGHTING(T)) T.lighting_build_overlay() else add_overlay(/obj/effect/fullbright) for (var/turf/T in src) - if (T.lighting_object) + if(T.lighting_object) T.lighting_clear_overlay() return TRUE diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm index 85c857ab804..ff4bc517979 100644 --- a/code/modules/lighting/lighting_atom.dm +++ b/code/modules/lighting/lighting_atom.dm @@ -13,13 +13,13 @@ /atom/proc/set_light(var/l_range, var/l_power, var/l_color = NONSENSICAL_VALUE) if(l_range > 0 && l_range < MINIMUM_USEFUL_LIGHT_RANGE) l_range = MINIMUM_USEFUL_LIGHT_RANGE //Brings the range up to 1.4, which is just barely brighter than the soft lighting that surrounds players. - if (l_power != null) + if(l_power != null) light_power = l_power - if (l_range != null) + if(l_range != null) light_range = l_range - if (l_color != NONSENSICAL_VALUE) + if(l_color != NONSENSICAL_VALUE) light_color = l_color SEND_SIGNAL(src, COMSIG_ATOM_SET_LIGHT, l_range, l_power, l_color) @@ -32,18 +32,18 @@ // Creates or destroys it if needed, makes it update values, makes sure it's got the correct source turf... /atom/proc/update_light() set waitfor = FALSE - if (QDELETED(src)) + if(QDELETED(src)) return - if (!light_power || !light_range) // We won't emit light anyways, destroy the light source. + if(!light_power || !light_range) // We won't emit light anyways, destroy the light source. QDEL_NULL(light) else - if (!ismovableatom(loc)) // We choose what atom should be the top atom of the light here. + if(!ismovableatom(loc)) // We choose what atom should be the top atom of the light here. . = src else . = loc - if (light) // Update the light or create it if it does not exist. + if(light) // Update the light or create it if it does not exist. light.update(.) else light = new/datum/light_source(src, .) @@ -55,30 +55,30 @@ /atom/movable/Destroy() var/turf/T = loc . = ..() - if (opacity && istype(T)) + if(opacity && istype(T)) var/old_has_opaque_atom = T.has_opaque_atom T.recalc_atom_opacity() - if (old_has_opaque_atom != T.has_opaque_atom) + if(old_has_opaque_atom != T.has_opaque_atom) T.reconsider_lights() // Should always be used to change the opacity of an atom. // It notifies (potentially) affected light sources so they can update (if needed). /atom/proc/set_opacity(var/new_opacity) - if (new_opacity == opacity) + if(new_opacity == opacity) return opacity = new_opacity var/turf/T = loc - if (!isturf(T)) + if(!isturf(T)) return - if (new_opacity == TRUE) + if(new_opacity == TRUE) T.has_opaque_atom = TRUE T.reconsider_lights() else var/old_has_opaque_atom = T.has_opaque_atom T.recalc_atom_opacity() - if (old_has_opaque_atom != T.has_opaque_atom) + if(old_has_opaque_atom != T.has_opaque_atom) T.reconsider_lights() @@ -92,15 +92,15 @@ /atom/vv_edit_var(var_name, var_value) switch (var_name) - if ("light_range") + if("light_range") set_light(l_range=var_value) return TRUE - if ("light_power") + if("light_power") set_light(l_power=var_value) return TRUE - if ("light_color") + if("light_color") set_light(l_color=var_value) return TRUE diff --git a/code/modules/lighting/lighting_corner.dm b/code/modules/lighting/lighting_corner.dm index e12876dbcc2..d8b05d0c17f 100644 --- a/code/modules/lighting/lighting_corner.dm +++ b/code/modules/lighting/lighting_corner.dm @@ -45,8 +45,8 @@ GLOBAL_LIST_INIT(LIGHTING_CORNER_DIAGONAL, list(NORTHEAST, SOUTHEAST, SOUTHWEST, // Diagonal one is easy. T = get_step(new_turf, diagonal) - if (T) // In case we're on the map's border. - if (!T.corners) + if(T) // In case we're on the map's border. + if(!T.corners) T.corners = list(null, null, null, null) masters[T] = diagonal @@ -55,8 +55,8 @@ GLOBAL_LIST_INIT(LIGHTING_CORNER_DIAGONAL, list(NORTHEAST, SOUTHEAST, SOUTHWEST, // Now the horizontal one. T = get_step(new_turf, horizontal) - if (T) // Ditto. - if (!T.corners) + if(T) // Ditto. + if(!T.corners) T.corners = list(null, null, null, null) masters[T] = ((T.x > x) ? EAST : WEST) | ((T.y > y) ? NORTH : SOUTH) // Get the dir based on coordinates. @@ -65,8 +65,8 @@ GLOBAL_LIST_INIT(LIGHTING_CORNER_DIAGONAL, list(NORTHEAST, SOUTHEAST, SOUTHWEST, // And finally the vertical one. T = get_step(new_turf, vertical) - if (T) - if (!T.corners) + if(T) + if(!T.corners) T.corners = list(null, null, null, null) masters[T] = ((T.x > x) ? EAST : WEST) | ((T.y > y) ? NORTH : SOUTH) // Get the dir based on coordinates. @@ -81,20 +81,20 @@ GLOBAL_LIST_INIT(LIGHTING_CORNER_DIAGONAL, list(NORTHEAST, SOUTHEAST, SOUTHWEST, var/thing for (thing in masters) T = thing - if (T.lighting_object) + if(T.lighting_object) active = TRUE // God that was a mess, now to do the rest of the corner code! Hooray! /datum/lighting_corner/proc/update_lumcount(var/delta_r, var/delta_g, var/delta_b) - if ((abs(delta_r)+abs(delta_g)+abs(delta_b)) == 0) + if((abs(delta_r)+abs(delta_g)+abs(delta_b)) == 0) return lum_r += delta_r lum_g += delta_g lum_b += delta_b - if (!needs_update) + if(!needs_update) needs_update = TRUE GLOB.lighting_update_corners += src @@ -105,11 +105,11 @@ GLOBAL_LIST_INIT(LIGHTING_CORNER_DIAGONAL, list(NORTHEAST, SOUTHEAST, SOUTHWEST, var/lum_b = src.lum_b var/mx = max(lum_r, lum_g, lum_b) // Scale it so one of them is the strongest lum, if it is above 1. . = 1 // factor - if (mx > 1) + if(mx > 1) . = 1 / mx #if LIGHTING_SOFT_THRESHOLD != 0 - else if (mx < LIGHTING_SOFT_THRESHOLD) + else if(mx < LIGHTING_SOFT_THRESHOLD) . = 0 // 0 means soft lighting. cache_r = round(lum_r * ., LIGHTING_ROUND_VALUE) || LIGHTING_SOFT_THRESHOLD @@ -124,8 +124,8 @@ GLOBAL_LIST_INIT(LIGHTING_CORNER_DIAGONAL, list(NORTHEAST, SOUTHEAST, SOUTHWEST, for (var/TT in masters) var/turf/T = TT - if (T.lighting_object) - if (!T.lighting_object.needs_update) + if(T.lighting_object) + if(!T.lighting_object.needs_update) T.lighting_object.needs_update = TRUE GLOB.lighting_update_objects += T.lighting_object @@ -135,7 +135,7 @@ GLOBAL_LIST_INIT(LIGHTING_CORNER_DIAGONAL, list(NORTHEAST, SOUTHEAST, SOUTHWEST, /datum/lighting_corner/Destroy(var/force) - if (!force) + if(!force) return QDEL_HINT_LETMELIVE stack_trace("Attempted qdel of a lighting corner.") diff --git a/code/modules/lighting/lighting_object.dm b/code/modules/lighting/lighting_object.dm index 586668ec139..c233c887c9a 100644 --- a/code/modules/lighting/lighting_object.dm +++ b/code/modules/lighting/lighting_object.dm @@ -19,7 +19,7 @@ verbs.Cut() myturf = loc - if (myturf.lighting_object) + if(myturf.lighting_object) qdel(myturf.lighting_object, force = TRUE) myturf.lighting_object = src myturf.luminosity = 0 @@ -31,13 +31,13 @@ GLOB.lighting_update_objects += src /atom/movable/lighting_object/Destroy(var/force) - if (force) + if(force) GLOB.lighting_update_objects -= src - if (loc != myturf) + if(loc != myturf) var/turf/oldturf = get_turf(myturf) var/turf/newturf = get_turf(loc) stack_trace("A lighting object was qdeleted with a different loc then it is suppose to have ([COORD(oldturf)] -> [COORD(newturf)])") - if (isturf(myturf)) + if(isturf(myturf)) myturf.lighting_object = null myturf.luminosity = 1 myturf = null @@ -48,8 +48,8 @@ return QDEL_HINT_LETMELIVE /atom/movable/lighting_object/proc/update() - if (loc != myturf) - if (loc) + if(loc != myturf) + if(loc) var/turf/oldturf = get_turf(myturf) var/turf/newturf = get_turf(loc) warning("A lighting object realised it's loc had changed in update() ([myturf]\[[myturf ? myturf.type : "null"]]([COORD(oldturf)]) -> [loc]\[[ loc ? loc.type : "null"]]([COORD(newturf)]))!") @@ -73,7 +73,7 @@ var/datum/lighting_corner/cg = dummy_lighting_corner var/datum/lighting_corner/cb = dummy_lighting_corner var/datum/lighting_corner/ca = dummy_lighting_corner - if (corners) //done this way for speed + if(corners) //done this way for speed cr = corners[3] || dummy_lighting_corner cg = corners[2] || dummy_lighting_corner cb = corners[4] || dummy_lighting_corner diff --git a/code/modules/lighting/lighting_source.dm b/code/modules/lighting/lighting_source.dm index b6dbd778371..207a91d58b4 100644 --- a/code/modules/lighting/lighting_source.dm +++ b/code/modules/lighting/lighting_source.dm @@ -33,7 +33,7 @@ source_atom = owner // Set our new owner. LAZYADD(source_atom.light_sources, src) top_atom = top - if (top_atom != source_atom) + if(top_atom != source_atom) LAZYADD(top_atom.light_sources, src) source_turf = top_atom @@ -51,13 +51,13 @@ /datum/light_source/Destroy(force) remove_lum() - if (source_atom) + if(source_atom) LAZYREMOVE(source_atom.light_sources, src) - if (top_atom) + if(top_atom) LAZYREMOVE(top_atom.light_sources, src) - if (needs_update) + if(needs_update) GLOB.lighting_update_lights -= src . = ..() @@ -66,22 +66,22 @@ // If you want it to go switch everybody to elastic tab stops. // Actually that'd be great if you could! #define EFFECT_UPDATE(level) \ - if (needs_update == LIGHTING_NO_UPDATE) \ + if(needs_update == LIGHTING_NO_UPDATE) \ GLOB.lighting_update_lights += src; \ - if (needs_update < level) \ + if(needs_update < level) \ needs_update = level; \ // This proc will cause the light source to update the top atom, and add itself to the update queue. /datum/light_source/proc/update(var/atom/new_top_atom) // This top atom is different. - if (new_top_atom && new_top_atom != top_atom) + if(new_top_atom && new_top_atom != top_atom) if(top_atom != source_atom && top_atom.light_sources) // Remove ourselves from the light sources of that top atom. LAZYREMOVE(top_atom.light_sources, src) top_atom = new_top_atom - if (top_atom != source_atom) + if(top_atom != source_atom) LAZYADD(top_atom.light_sources, src) // Add ourselves to the light sources of our new top atom. EFFECT_UPDATE(LIGHTING_CHECK_UPDATE) @@ -96,7 +96,7 @@ // Decompile the hexadecimal colour into lumcounts of each perspective. /datum/light_source/proc/parse_light_color() - if (light_color) + if(light_color) lum_r = GetRedPart (light_color) / 255 lum_g = GetGreenPart (light_color) / 255 lum_b = GetBluePart (light_color) / 255 @@ -156,7 +156,7 @@ /datum/light_source/proc/recalc_corner(var/datum/lighting_corner/C) LAZYINITLIST(effect_str) - if (effect_str[C]) // Already have one. + if(effect_str[C]) // Already have one. REMOVE_CORNER(C) effect_str[C] = 0 @@ -167,61 +167,61 @@ var/update = FALSE var/atom/source_atom = src.source_atom - if (QDELETED(source_atom)) + if(QDELETED(source_atom)) qdel(src) return - if (source_atom.light_power != light_power) + if(source_atom.light_power != light_power) light_power = source_atom.light_power update = TRUE - if (source_atom.light_range != light_range) + if(source_atom.light_range != light_range) light_range = source_atom.light_range update = TRUE - if (!top_atom) + if(!top_atom) top_atom = source_atom update = TRUE - if (!light_range || !light_power) + if(!light_range || !light_power) qdel(src) return - if (isturf(top_atom)) - if (source_turf != top_atom) + if(isturf(top_atom)) + if(source_turf != top_atom) source_turf = top_atom pixel_turf = source_turf update = TRUE - else if (top_atom.loc != source_turf) + else if(top_atom.loc != source_turf) source_turf = top_atom.loc pixel_turf = get_turf_pixel(top_atom) update = TRUE else var/P = get_turf_pixel(top_atom) - if (P != pixel_turf) + if(P != pixel_turf) pixel_turf = P update = TRUE - if (!isturf(source_turf)) - if (applied) + if(!isturf(source_turf)) + if(applied) remove_lum() return - if (light_range && light_power && !applied) + if(light_range && light_power && !applied) update = TRUE - if (source_atom.light_color != light_color) + if(source_atom.light_color != light_color) light_color = source_atom.light_color parse_light_color() update = TRUE - else if (applied_lum_r != lum_r || applied_lum_g != lum_g || applied_lum_b != lum_b) + else if(applied_lum_r != lum_r || applied_lum_g != lum_g || applied_lum_b != lum_b) update = TRUE - if (update) + if(update) needs_update = LIGHTING_CHECK_UPDATE applied = TRUE - else if (needs_update == LIGHTING_CHECK_UPDATE) + else if(needs_update == LIGHTING_CHECK_UPDATE) return //nothing's changed var/list/datum/lighting_corner/corners = list() @@ -229,7 +229,7 @@ var/thing var/datum/lighting_corner/C var/turf/T - if (source_turf) + if(source_turf) var/oldlum = source_turf.luminosity source_turf.luminosity = CEILING(light_range, 1) for(T in view(CEILING(light_range, 1), source_turf)) @@ -253,11 +253,11 @@ LAZYREMOVE(T.affecting_lights, src) LAZYINITLIST(effect_str) - if (needs_update == LIGHTING_VIS_UPDATE) + if(needs_update == LIGHTING_VIS_UPDATE) for (thing in corners - effect_str) // New corners C = thing LAZYADD(C.affecting, src) - if (!C.active) + if(!C.active) effect_str[C] = 0 continue APPLY_CORNER(C) @@ -266,14 +266,14 @@ for (thing in L) // New corners C = thing LAZYADD(C.affecting, src) - if (!C.active) + if(!C.active) effect_str[C] = 0 continue APPLY_CORNER(C) for (thing in corners - L) // Existing corners C = thing - if (!C.active) + if(!C.active) effect_str[C] = 0 continue APPLY_CORNER(C) diff --git a/code/modules/lighting/lighting_turf.dm b/code/modules/lighting/lighting_turf.dm index 0fe3caec840..c2198cea650 100644 --- a/code/modules/lighting/lighting_turf.dm +++ b/code/modules/lighting/lighting_turf.dm @@ -18,7 +18,7 @@ L.vis_update() /turf/proc/lighting_clear_overlay() - if (lighting_object) + if(lighting_object) qdel(lighting_object, TRUE) var/datum/lighting_corner/C @@ -31,14 +31,14 @@ // Builds a lighting object for us, but only if our area is dynamic. /turf/proc/lighting_build_overlay() - if (lighting_object) + if(lighting_object) qdel(lighting_object,force=TRUE) //Shitty fix for lighting objects persisting after death var/area/A = loc - if (!IS_DYNAMIC_LIGHTING(A) && !light_sources) + if(!IS_DYNAMIC_LIGHTING(A) && !light_sources) return - if (!lighting_corners_initialised) + if(!lighting_corners_initialised) generate_missing_corners() new/atom/movable/lighting_object(src) @@ -50,7 +50,7 @@ if(!thing) continue C = thing - if (!C.active) // We would activate the corner, calculate the lighting for it. + if(!C.active) // We would activate the corner, calculate the lighting for it. for (thing in C.affecting) S = thing S.recalc_corner(C) @@ -58,7 +58,7 @@ // Used to get a scaled lumcount. /turf/proc/get_lumcount(var/minlum = 0, var/maxlum = 1) - if (!lighting_object) + if(!lighting_object) return 1 var/totallums = 0 @@ -81,7 +81,7 @@ // itself as too dark to allow sight and see_in_dark becomes useful. // So basically if this returns true the tile is unlit black. /turf/proc/is_softly_lit() - if (!lighting_object) + if(!lighting_object) return FALSE return !lighting_object.luminosity @@ -89,46 +89,46 @@ // Can't think of a good name, this proc will recalculate the has_opaque_atom variable. /turf/proc/recalc_atom_opacity() has_opaque_atom = opacity - if (!has_opaque_atom) + if(!has_opaque_atom) for (var/atom/A in src.contents) // Loop through every movable atom on our tile PLUS ourselves (we matter too...) - if (A.opacity) + if(A.opacity) has_opaque_atom = TRUE break /turf/Exited(atom/movable/Obj, atom/newloc) . = ..() - if (Obj && Obj.opacity) + if(Obj && Obj.opacity) recalc_atom_opacity() // Make sure to do this before reconsider_lights(), incase we're on instant updates. reconsider_lights() /turf/proc/change_area(var/area/old_area, var/area/new_area) if(SSlighting.initialized) - if (new_area.dynamic_lighting != old_area.dynamic_lighting) - if (new_area.dynamic_lighting) + if(new_area.dynamic_lighting != old_area.dynamic_lighting) + if(new_area.dynamic_lighting) lighting_build_overlay() else lighting_clear_overlay() /turf/proc/get_corners() - if (!IS_DYNAMIC_LIGHTING(src) && !light_sources) + if(!IS_DYNAMIC_LIGHTING(src) && !light_sources) return null - if (!lighting_corners_initialised) + if(!lighting_corners_initialised) generate_missing_corners() - if (has_opaque_atom) + if(has_opaque_atom) return null // Since this proc gets used in a for loop, null won't be looped though. return corners /turf/proc/generate_missing_corners() - if (!IS_DYNAMIC_LIGHTING(src) && !light_sources) + if(!IS_DYNAMIC_LIGHTING(src) && !light_sources) return lighting_corners_initialised = TRUE - if (!corners) + if(!corners) corners = list(null, null, null, null) for (var/i = 1 to 4) - if (corners[i]) // Already have a corner on this direction. + if(corners[i]) // Already have a corner on this direction. continue corners[i] = new/datum/lighting_corner(src, GLOB.LIGHTING_CORNER_DIAGONAL[i]) diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm index ac3ec9d04c3..3c154e351c7 100644 --- a/code/modules/mining/lavaland/loot/tendril_loot.dm +++ b/code/modules/mining/lavaland/loot/tendril_loot.dm @@ -244,7 +244,6 @@ user.sight |= sight_flags if(!isnull(lighting_alpha)) user.lighting_alpha = min(user.lighting_alpha, lighting_alpha) - user.sync_lighting_plane_alpha() /obj/effect/wisp name = "friendly wisp" diff --git a/code/modules/mob/camera/camera.dm b/code/modules/mob/camera/camera.dm index bfeecdef055..df6fd57423d 100644 --- a/code/modules/mob/camera/camera.dm +++ b/code/modules/mob/camera/camera.dm @@ -7,7 +7,7 @@ move_resist = INFINITY status_flags = GODMODE // You can't damage it. mouse_opacity = MOUSE_OPACITY_TRANSPARENT - see_in_dark = 7 + see_in_dark = 8 invisibility = 101 // No one can see us sight = SEE_SELF move_on_shuttle = 0 diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 84bb5af399d..e6dcaebf51c 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -297,10 +297,7 @@ Des: Removes all infected images from the alien. if(E.see_invisible) see_invisible = min(see_invisible, E.see_invisible) if(!isnull(E.lighting_alpha)) - lighting_alpha = min(lighting_alpha, E.lighting_alpha) + lighting_alpha = min(lighting_alpha, E.lighting_alpha) - if(see_override) - see_invisible = see_override - - sync_lighting_plane_alpha() - SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) \ No newline at end of file + SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) + sync_lighting_plane_alpha() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index c2a01eee4f7..44a333fbe44 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -1160,8 +1160,6 @@ so that different stomachs can handle things in different ways VB*/ sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - - if(see_override) - see_invisible = see_override - + SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) + sync_lighting_plane_alpha() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index f094f5611a6..01faa9d9422 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -552,6 +552,7 @@ dna.species.update_sight(src) SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) + sync_lighting_plane_alpha() //Added a safety check in case you want to shock a human mob directly through electrocute_act. /mob/living/carbon/human/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = FALSE, override = FALSE, tesla_shock = FALSE, illusion = FALSE, stun = TRUE) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index ba4f2fbbcf4..9e6ab986395 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -115,7 +115,7 @@ update_tint() if(G.prescription) update_nearsighted_effects() - if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha)) + if(G.vision_flags || G.see_in_dark || G.invis_override || G.invis_view || !isnull(G.lighting_alpha)) update_sight() update_inv_glasses() update_client_colour() @@ -128,7 +128,7 @@ // Bandanas and paper hats go on the head but are not head clothing if(istype(I,/obj/item/clothing/head)) var/obj/item/clothing/head/hat = I - if(hat.vision_flags || hat.darkness_view || !isnull(hat.lighting_alpha)) + if(hat.vision_flags || hat.see_in_dark || !isnull(hat.lighting_alpha)) update_sight() head_update(I) update_inv_head() @@ -267,7 +267,7 @@ update_tint() if(G.prescription) update_nearsighted_effects() - if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha)) + if(G.vision_flags || G.see_in_dark || G.invis_override || G.invis_view || !isnull(G.lighting_alpha)) update_sight() update_inv_glasses(redraw_mob) update_client_colour() @@ -283,7 +283,7 @@ // paper + bandanas if(istype(W, /obj/item/clothing/head)) var/obj/item/clothing/head/hat = W - if(hat.vision_flags || hat.darkness_view || !isnull(hat.lighting_alpha)) + if(hat.vision_flags || hat.see_in_dark || !isnull(hat.lighting_alpha)) update_sight() head_update(W) update_inv_head(redraw_mob) diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index c24a066f073..7990dbad915 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -668,7 +668,7 @@ It'll return null if the organ doesn't correspond, so include null checks when u if(H.glasses) var/obj/item/clothing/glasses/G = H.glasses H.sight |= G.vision_flags - H.see_in_dark = max(G.darkness_view, H.see_in_dark) + H.see_in_dark = max(G.see_in_dark, H.see_in_dark) if(G.invis_override) H.see_invisible = G.invis_override @@ -683,7 +683,7 @@ It'll return null if the organ doesn't correspond, so include null checks when u if(istype(H.head, /obj/item/clothing/head)) var/obj/item/clothing/head/hat = H.head H.sight |= hat.vision_flags - H.see_in_dark = max(hat.darkness_view, H.see_in_dark) + H.see_in_dark = max(hat.see_in_dark, H.see_in_dark) if(!isnull(hat.lighting_alpha)) H.lighting_alpha = min(hat.lighting_alpha, H.lighting_alpha) @@ -696,7 +696,7 @@ It'll return null if the organ doesn't correspond, so include null checks when u var/obj/item/clothing/glasses/G = rig.visor.vision.glasses if(istype(G)) H.sight |= G.vision_flags - H.see_in_dark = max(G.darkness_view, H.see_in_dark) + H.see_in_dark = max(G.see_in_dark, H.see_in_dark) H.see_invisible = min(G.invis_view, H.see_invisible) if(!isnull(G.lighting_alpha)) @@ -717,9 +717,6 @@ It'll return null if the organ doesn't correspond, so include null checks when u H.see_in_dark = 8 H.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - if(H.see_override) //Override all - H.see_invisible = H.see_override - H.sync_lighting_plane_alpha() /datum/species/proc/water_act(mob/living/carbon/human/M, volume, temperature, source) diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 35ab0402b0c..4f17801111a 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -202,7 +202,7 @@ sight |= SEE_TURFS sight |= SEE_MOBS sight |= SEE_OBJS - lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE see_in_dark = 8 see_invisible = SEE_INVISIBLE_OBSERVER sync_lighting_plane_alpha() diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index d339ae12dc6..4389198fd10 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -1312,8 +1312,5 @@ var/list/ai_verbs_default = list( sight = sight &~ SEE_OBJS see_in_dark = 0 - if(see_override) - see_invisible = see_override - - sync_lighting_plane_alpha() SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) + sync_lighting_plane_alpha() diff --git a/code/modules/mob/living/silicon/ai/freelook/chunk.dm b/code/modules/mob/living/silicon/ai/freelook/chunk.dm index ec2fd378ed5..4b124c364c2 100644 --- a/code/modules/mob/living/silicon/ai/freelook/chunk.dm +++ b/code/modules/mob/living/silicon/ai/freelook/chunk.dm @@ -116,7 +116,8 @@ var/turf/t = turf if(obscuredTurfs[t]) if(!t.obscured) - t.obscured = image('icons/effects/cameravis.dmi', t, null, 15) + t.obscured = image('icons/effects/cameravis.dmi', t, null, BYOND_LIGHTING_LAYER + 0.1) + t.obscured.plane = BYOND_LIGHTING_PLANE + 1 obscured += t.obscured for(var/eye in seenby) @@ -169,7 +170,8 @@ for(var/turf in obscuredTurfs) var/turf/t = turf if(!t.obscured) - t.obscured = image('icons/effects/cameravis.dmi', t, "black", 15) + t.obscured = image('icons/effects/cameravis.dmi', t, "black", BYOND_LIGHTING_LAYER + 0.1) + t.obscured.plane = BYOND_LIGHTING_PLANE + 1 obscured += t.obscured -#undef UPDATE_BUFFER \ No newline at end of file +#undef UPDATE_BUFFER diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 8084b358d96..e6a65545646 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1406,24 +1406,17 @@ var/list/robot_verbs_default = list( if(sight_mode & BORGMESON) sight |= SEE_TURFS - lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE - see_in_dark = 1 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE if(sight_mode & BORGXRAY) sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) see_invisible = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - see_invisible = SEE_INVISIBLE_LIVING see_in_dark = 8 if(sight_mode & BORGTHERM) sight |= SEE_MOBS lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE - see_invisible = min(see_invisible, SEE_INVISIBLE_LIVING) - see_in_dark = 8 - if(see_override) - see_invisible = see_override - - sync_lighting_plane_alpha() SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) + sync_lighting_plane_alpha() \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 2b3d11357d1..91abb6b2696 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -168,7 +168,7 @@ melee_damage_lower = 25 melee_damage_upper = 25 attacktext = "slashes" - see_in_dark = 7 + see_in_dark = 8 attack_sound = 'sound/weapons/bladeslice.ogg' const_type = "wraith" construct_spells = list(/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift) diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index e45000ff34f..6795f4ccec2 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -16,7 +16,7 @@ emote_hear = list("chitters") speak_chance = 5 turns_per_move = 5 - see_in_dark = 10 + see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE butcher_results = list(/obj/item/reagent_containers/food/snacks/spidermeat = 2, /obj/item/reagent_containers/food/snacks/spiderleg = 8) response_help = "pets" diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index 5b9d94341ef..2416781d78d 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -33,7 +33,7 @@ animate_movement = NO_STEPS // Do not animate movement, you jump around as you're a scary statue. - see_in_dark = 13 + see_in_dark = 8 vision_range = 12 aggro_vision_range = 12 idle_vision_range = 12 diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm index 1503c2bffe6..f73ee07441a 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm @@ -94,7 +94,7 @@ var/global/list/ts_spiderling_list = list() // Vision idle_vision_range = 10 aggro_vision_range = 10 - see_in_dark = 10 + see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE sight = SEE_MOBS diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index e36e7e4a004..7a67ce911b1 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -83,7 +83,6 @@ var/obj/item/clothing/mask/wear_mask = null//Carbon var/seer = 0 //for cult//Carbon, probably Human - var/see_override = 0 var/datum/hud/hud_used = null diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm index 0dc99e310cb..463911861c2 100644 --- a/code/modules/surgery/organs/augments_eyes.dm +++ b/code/modules/surgery/organs/augments_eyes.dm @@ -74,6 +74,7 @@ eye_colour = "#FFCC00" implant_color = "#FFCC00" vision_flags = SEE_MOBS + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE flash_protect = -1 origin_tech = "materials=5;programming=4;biotech=4;magnets=4;syndicate=1" aug_message = "You see prey everywhere you look..." From 97fbfb279aff9604d289253a268619b86c5a0f55 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Sat, 27 Apr 2019 01:15:21 +0200 Subject: [PATCH 034/195] Fix default statue vision --- code/modules/mob/living/simple_animal/hostile/statue.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index 2416781d78d..3f649eae984 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -40,7 +40,7 @@ search_objects = 1 // So that it can see through walls - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE sight = SEE_SELF|SEE_MOBS|SEE_OBJS|SEE_TURFS move_force = MOVE_FORCE_EXTREMELY_STRONG move_resist = MOVE_FORCE_EXTREMELY_STRONG From adf53ecbed4880143f503b338499f5b70cde006e Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Sat, 27 Apr 2019 16:48:32 +0200 Subject: [PATCH 035/195] Fix lights not turning off on delete --- code/game/atoms.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 99a1db51ef2..f49cf05197a 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -145,9 +145,12 @@ alternate_appearances = null QDEL_NULL(reagents) - invisibility = 101 + invisibility = INVISIBILITY_MAXIMUM LAZYCLEARLIST(overlays) LAZYCLEARLIST(priority_overlays) + + QDEL_NULL(light) + return ..() //Hook for running code when a dir change occurs From 78c67b9a1fa2b26a09fba859f324070c068810a3 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sun, 28 Apr 2019 03:40:50 -0700 Subject: [PATCH 036/195] patreon perks, admins, custom events --- code/__DEFINES/misc.dm | 6 ++-- code/game/verbs/ooc.dm | 8 +++--- code/modules/client/client defines.dm | 2 +- code/modules/client/client procs.dm | 21 ++++++++------ .../client/preference/loadout/loadout.dm | 5 +--- .../preference/loadout/loadout_donor.dm | 28 ++++++++++++++++--- code/modules/client/preference/preferences.dm | 22 +++++++-------- 7 files changed, 54 insertions(+), 38 deletions(-) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index dff9426c641..b006666ffda 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -318,10 +318,8 @@ #define SHELTER_DEPLOY_BAD_AREA "bad area" #define SHELTER_DEPLOY_ANCHORED_OBJECTS "anchored objects" -// Client donator levels -#define DONATOR_LEVEL_NONE 0 -#define DONATOR_LEVEL_ONE 1 -#define DONATOR_LEVEL_TWO 2 +// Maximum donation level +#define DONATOR_LEVEL_MAX 4 // The cooldown on OOC messages such as OOC, LOOC, praying and adminhelps #define OOC_COOLDOWN 5 diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index 9325d3a08b5..5a2807e8379 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -11,7 +11,7 @@ var/global/admin_ooc_colour = "#b82e00" /client/verb/ooc(msg = "" as text) set name = "OOC" set category = "OOC" - + if(!mob) return if(IsGuestKey(key)) @@ -28,10 +28,10 @@ var/global/admin_ooc_colour = "#b82e00" if(prefs.muted & MUTE_OOC) to_chat(src, "You cannot use OOC (muted).") return - + if(!msg) msg = typing_input(src.mob, "", "ooc \"text\"") - + msg = trim(sanitize(copytext(msg, 1, MAX_MESSAGE_LEN))) if(!msg) return @@ -76,7 +76,7 @@ var/global/admin_ooc_colour = "#b82e00" var/icon/byond = icon('icons/member_content.dmi', "blag") display_name = "[bicon(byond)][display_name]" - if(donator_level >= DONATOR_LEVEL_ONE) + if(donator_level > 0) if((prefs.toggles & DONATOR_PUBLIC)) var/icon/donator = icon('icons/ooc_tag_16x.dmi', "donator") display_name = "[bicon(donator)][display_name]" diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index 00900fe5fd1..9f21e4b042c 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -81,7 +81,7 @@ var/datum/chatOutput/chatOutput // Donator stuff. - var/donator_level = DONATOR_LEVEL_NONE + var/donator_level = 0 // If set to true, this client can interact with atoms such as buttons and doors on top of regular machinery interaction var/advanced_admin_interaction = FALSE diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index a6216c87b1a..10a799ebac3 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -326,8 +326,6 @@ GLOB.admins += src holder.owner = src - donator_check() - //preferences datum - also holds some persistant data for the client (because we may as well keep these datums to a minimum) prefs = preferences_datums[ckey] if(!prefs) @@ -341,12 +339,6 @@ spawn() // Goonchat does some non-instant checks in start() chatOutput.start() - if(custom_event_msg && custom_event_msg != "") - to_chat(src, "

Custom Event

") - to_chat(src, "

A custom event is taking place. OOC Info:

") - to_chat(src, "[html_encode(custom_event_msg)]") - to_chat(src, "
") - if( (world.address == address || !address) && !host ) host = key world.update_status() @@ -374,6 +366,7 @@ to_chat(src, message) clientmessages.Remove(ckey) + donator_check() send_resources() @@ -398,6 +391,12 @@ screen += void + if(custom_event_msg && custom_event_msg != "") + to_chat(src, "

Custom Event

") + to_chat(src, "

A custom event is taking place. OOC Info:

") + to_chat(src, "[html_encode(custom_event_msg)]") + to_chat(src, "
") + if(!winexists(src, "asset_cache_browser")) // The client is using a custom skin, tell them. to_chat(src, "Unable to access asset cache browser, if you are using a custom skin file, please allow DS to download the updated version, if you are not, then make a bug report. This is not a critical issue but can cause issues with resource downloading, as it is impossible to know when extra resources arrived to you.") @@ -429,13 +428,17 @@ if(!dbcon.IsConnected()) return + if(check_rights(R_ADMIN, 0, mob)) // Yes, the mob is required, regardless of other examples in this file, it won't work otherwise + donator_level = DONATOR_LEVEL_MAX + return + //Donator stuff. var/DBQuery/query_donor_select = dbcon.NewQuery("SELECT ckey, tier, active FROM `[format_table_name("donators")]` WHERE ckey = '[ckey]'") query_donor_select.Execute() while(query_donor_select.NextRow()) if(!text2num(query_donor_select.item[3])) // Inactive donator. - donator_level = DONATOR_LEVEL_NONE + donator_level = 0 return donator_level = text2num(query_donor_select.item[2]) break diff --git a/code/modules/client/preference/loadout/loadout.dm b/code/modules/client/preference/loadout/loadout.dm index b42c5d5abf1..63825cc1237 100644 --- a/code/modules/client/preference/loadout/loadout.dm +++ b/code/modules/client/preference/loadout/loadout.dm @@ -4,7 +4,6 @@ var/list/gear_datums = list() /datum/loadout_category var/category = "" var/list/gear = list() - var/donor_only = FALSE /datum/loadout_category/New(cat) category = cat @@ -34,8 +33,6 @@ var/list/gear_datums = list() if(!loadout_categories[use_category]) loadout_categories[use_category] = new /datum/loadout_category(use_category) var/datum/loadout_category/LC = loadout_categories[use_category] - if(initial(G.donor_only)) - LC.donor_only = TRUE gear_datums[use_name] = new geartype LC.gear[use_name] = gear_datums[use_name] @@ -57,7 +54,7 @@ var/list/gear_datums = list() var/list/gear_tweaks = list() //List of datums which will alter the item after it has been spawned. var/subtype_path = /datum/gear //for skipping organizational subtypes (optional) var/subtype_cost_overlap = TRUE //if subtypes can take points at the same time - var/donor_only = FALSE // if it's only available to donors + var/donator_tier = 0 /datum/gear/New() ..() diff --git a/code/modules/client/preference/loadout/loadout_donor.dm b/code/modules/client/preference/loadout/loadout_donor.dm index 9e13662a7d8..5558a988209 100644 --- a/code/modules/client/preference/loadout/loadout_donor.dm +++ b/code/modules/client/preference/loadout/loadout_donor.dm @@ -1,5 +1,5 @@ /datum/gear/donor - donor_only = TRUE + donator_tier = 2 sort_category = "Donor" subtype_path = /datum/gear/donor @@ -77,6 +77,26 @@ display_name = "Guy Fawkes mask" path = /obj/item/clothing/mask/fawkes -/datum/gear/donor/noble_clothes - display_name = "Noble Clothes" - path = /obj/item/clothing/under/noble_clothes +/datum/gear/donor/id_decal_silver + display_name = "Silver ID Decal" + path = /obj/item/id_decal/silver + donator_tier = 3 + cost = 2 + +/datum/gear/donor/id_decal_prisoner + display_name = "Prisoner ID Decal" + path = /obj/item/id_decal/prisoner + donator_tier = 3 + cost = 2 + +/datum/gear/donor/id_decal_emag + display_name = "Emag ID Decal" + path = /obj/item/id_decal/emag + donator_tier = 3 + cost = 2 + +/datum/gear/donor/id_decal_gold + display_name = "Gold ID Decal" + path = /obj/item/id_decal/gold + donator_tier = 4 + cost = 4 \ No newline at end of file diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index 22894aaa691..237da907a43 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -211,7 +211,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts unlock_content = C.IsByondMember() if(unlock_content) max_save_slots = MAX_SAVE_SLOTS_MEMBER - if(C.donator_level >= DONATOR_LEVEL_ONE) + if(C.donator_level > 0) max_gear_slots += 5 loaded_preferences_successfully = load_preferences(C) // Do not call this with no client/C, it generates a runtime / SQL error @@ -448,7 +448,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts dat += " - Color: [UI_style_color]    
" dat += " - UI Style: [UI_style]
" dat += "Deadchat Anonymity: [ghost_anonsay ? "Anonymous" : "Not Anonymous"]
" - if(user.client.donator_level >= DONATOR_LEVEL_ONE) + if(user.client.donator_level > 0) dat += "Donator Publicity: [(toggles & DONATOR_PUBLIC) ? "Public" : "Hidden"]
" dat += "Fancy NanoUI: [(nanoui_fancy) ? "Yes" : "No"]
" dat += "FPS: [clientfps]
" @@ -508,10 +508,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts var/firstcat = 1 for(var/category in loadout_categories) - var/datum/loadout_category/LC = loadout_categories[category] - if(LC.donor_only) - if(user.client.donator_level < DONATOR_LEVEL_TWO) // level two donators get the donator loadout, so don't show it to anyone with less than that - continue if(firstcat) firstcat = 0 else @@ -529,7 +525,10 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts for(var/gear_name in LC.gear) var/datum/gear/G = LC.gear[gear_name] var/ticked = (G.display_name in gear) - dat += "[G.display_name]" + if(G.donator_tier > user.client.donator_level) + dat += "[G.display_name]" + else + dat += "[G.display_name]" dat += "[G.cost]" if(G.allowed_roles) dat += "Restrictions: " @@ -1147,10 +1146,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts if(TG.display_name in gear) gear -= TG.display_name else - if(TG.donor_only) - if(user.client.donator_level < DONATOR_LEVEL_TWO) // donator items are locked to > tier 2 - //they normally can't even get this far- but just in case of href exploits, we check them here - return + if(TG.donator_tier && user.client.donator_level < TG.donator_tier) + to_chat(user, "That gear is only available at a higher donation tier than you are on.") + return var/total_cost = 0 var/list/type_blacklist = list() for(var/gear_name in gear) @@ -1944,7 +1942,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts toggles ^= MEMBER_PUBLIC if("donor_public") - if(user.client.donator_level >= DONATOR_LEVEL_ONE) + if(user.client.donator_level > 0) toggles ^= DONATOR_PUBLIC if("gender") From 4705c4e2fed93c211bb11bd2b6dfd4f0cbcb31e1 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Sun, 28 Apr 2019 20:15:30 +0200 Subject: [PATCH 037/195] Limit genetics XRay again --- code/modules/mob/living/carbon/human/species/_species.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index 7990dbad915..18451ff31cf 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -714,8 +714,6 @@ It'll return null if the organ doesn't correspond, so include null checks when u if(XRAY in H.mutations) H.sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) - H.see_in_dark = 8 - H.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE H.sync_lighting_plane_alpha() From 6351c3fba1640a18a2e96064ce80fac4e8c3d0db Mon Sep 17 00:00:00 2001 From: Kyep Date: Mon, 29 Apr 2019 01:18:41 -0700 Subject: [PATCH 038/195] Makes active internals visible on inventory examine --- code/modules/mob/living/carbon/human/human.dm | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index bd5817e8867..a5df3916210 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -414,8 +414,22 @@ if(has_breathable_mask && istype(belt, /obj/item/tank)) dat += " [internal ? "Disable Internals" : "Set Internals"]" dat += "" - dat += " ↳Pockets:[(l_store && !(l_store.flags&ABSTRACT)) ? "Left (Full)" : "Left (Empty)"]" - dat += " [(r_store && !(r_store.flags&ABSTRACT)) ? "Right (Full)" : "Right (Empty)"]" + // Pockets + dat += " ↳Pockets:" + if(l_store && internal && l_store == internal) + dat += "[l_store]" + else if(l_store && !(l_store.flags&ABSTRACT)) + dat += "Left (Full)" + else + dat += "Left (Empty)" + dat += " " + if(r_store && internal && r_store == internal) + dat += "[r_store]" + else if(r_store && !(r_store.flags&ABSTRACT)) + dat += "Right (Full)" + else + dat += "Right (Empty)" + dat += "" dat += " ↳ID:[(wear_id && !(wear_id.flags&ABSTRACT)) ? wear_id : "Empty"]" dat += " ↳PDA:[(wear_pda && !(wear_pda.flags&ABSTRACT)) ? wear_pda : "Empty"]" From e0125b5831450a7391840b4daa49a9081a44c32f Mon Sep 17 00:00:00 2001 From: Arkatos1 Date: Mon, 29 Apr 2019 20:19:22 +0200 Subject: [PATCH 039/195] Added inhand sprites for winter coats --- code/modules/clothing/suits/miscellaneous.dm | 11 ++++++++++- icons/mob/inhands/clothing_lefthand.dmi | Bin 84261 -> 89934 bytes icons/mob/inhands/clothing_righthand.dmi | Bin 82900 -> 88599 bytes 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 13ef3e074da..0903710ddc8 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -345,7 +345,7 @@ name = "winter coat" desc = "A heavy jacket made from 'synthetic' animal furs." icon_state = "wintercoat" - item_state = "labcoat" + item_state = "coatwinter" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT @@ -369,6 +369,7 @@ /obj/item/clothing/suit/hooded/wintercoat/captain name = "captain's winter coat" icon_state = "wintercoat_captain" + item_state = "coatcaptain" armor = list(melee = 25, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0) allowed = list(/obj/item/gun/energy, /obj/item/reagent_containers/spray/pepper, /obj/item/gun/projectile, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/flashlight/seclite, /obj/item/melee/classic_baton/telescopic) hoodtype = /obj/item/clothing/head/winterhood/captain @@ -379,6 +380,7 @@ /obj/item/clothing/suit/hooded/wintercoat/security name = "security winter coat" icon_state = "wintercoat_sec" + item_state = "coatsecurity" armor = list(melee = 10, bullet = 10, laser = 10, energy = 5, bomb = 15, bio = 0, rad = 0) allowed = list(/obj/item/gun/energy, /obj/item/reagent_containers/spray/pepper, /obj/item/gun/projectile, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/flashlight/seclite, /obj/item/melee/classic_baton/telescopic) hoodtype = /obj/item/clothing/head/winterhood/security @@ -389,6 +391,7 @@ /obj/item/clothing/suit/hooded/wintercoat/medical name = "medical winter coat" icon_state = "wintercoat_med" + item_state = "coatmedical" allowed = list(/obj/item/analyzer, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer,/obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic) armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 50, rad = 0) hoodtype = /obj/item/clothing/head/winterhood/medical @@ -399,6 +402,7 @@ /obj/item/clothing/suit/hooded/wintercoat/science name = "science winter coat" icon_state = "wintercoat_sci" + item_state = "coatscience" allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer,/obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic) armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 0, rad = 0) hoodtype = /obj/item/clothing/head/winterhood/science @@ -409,6 +413,7 @@ /obj/item/clothing/suit/hooded/wintercoat/engineering name = "engineering winter coat" icon_state = "wintercoat_engi" + item_state = "coatengineer" armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 20) allowed = list(/obj/item/flashlight, /obj/item/tank/emergency_oxygen, /obj/item/t_scanner, /obj/item/rcd) hoodtype = /obj/item/clothing/head/winterhood/engineering @@ -419,6 +424,7 @@ /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos name = "atmospherics winter coat" icon_state = "wintercoat_atmos" + item_state = "coatatmos" hoodtype = /obj/item/clothing/head/winterhood/engineering/atmos /obj/item/clothing/head/winterhood/engineering/atmos @@ -427,6 +433,7 @@ /obj/item/clothing/suit/hooded/wintercoat/hydro name = "hydroponics winter coat" icon_state = "wintercoat_hydro" + item_state = "coathydro" allowed = list(/obj/item/reagent_containers/spray, /obj/item/plant_analyzer, /obj/item/seeds, /obj/item/reagent_containers/glass/bottle, /obj/item/hatchet, /obj/item/storage/bag/plants) hoodtype = /obj/item/clothing/head/winterhood/hydro @@ -436,6 +443,7 @@ /obj/item/clothing/suit/hooded/wintercoat/cargo name = "cargo winter coat" icon_state = "wintercoat_cargo" + item_state = "coatcargo" hoodtype = /obj/item/clothing/head/winterhood/cargo /obj/item/clothing/head/winterhood/cargo @@ -444,6 +452,7 @@ /obj/item/clothing/suit/hooded/wintercoat/miner name = "mining winter coat" icon_state = "wintercoat_miner" + item_state = "coatminer" allowed = list(/obj/item/pickaxe, /obj/item/flashlight, /obj/item/tank/emergency_oxygen, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) hoodtype = /obj/item/clothing/head/winterhood/miner diff --git a/icons/mob/inhands/clothing_lefthand.dmi b/icons/mob/inhands/clothing_lefthand.dmi index 6f2cf056cec0cb78ab6c52dc955761b3ca3f6d82..06b2934ebde96a153a36d86c5f086609349bf5d4 100644 GIT binary patch delta 11673 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 delta 5983 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 ZqVDD60DmQ)-9(vzwC?NQLu%N){5Q%lux$VU diff --git a/icons/mob/inhands/clothing_righthand.dmi b/icons/mob/inhands/clothing_righthand.dmi index 169e9e6cbf3e3cd0db1f95585a0c77c75a07942d..3a558b90140396edd6bf9938a03a01c13661d2f6 100644 GIT binary patch delta 10586 zcmcI~cT`hP*KUxm6cOo7K$=KXs#NKMfOP3aks`fHJ)j6kk)i?$2m(rz&^sYWSDHu( z5Fj8RHS`c#l6&y?e((3)wQgB=-SwS6a%M7f_RQY1XZG{#bH-vxGipgwm}urH$RH3% zwE$x{1VT!l$|s}9Z@jXGwHMG&B0DMC`QF}3r(t+qBZ3`|+e0C?J3AXHS_JBESjL<# z?C0hN%9I^3#-1*0!vkef`MLs6Qr}A&934~J#k4hZ-5w{7951#u)PJM(K>Mz$Tu|nB zA}h*!xhdswuMHU{<5r6``NX3gTkaKq8zoB+@b~eJ4Y{oLKq#Vv(XLT*VJYXzj>F)o zz#BFq7T^w%mLIQBin9DIxcMb<*&d}I&#ZkDN%?v|%XQ24;jNwTh`pX9Bt8m_zs~pO zdgK!2^E?p^A9B&m_$&Sw($n*n5o5|NY{Rc!cjCOUy$0|G*7xaLc_V4i?VAC5Nhwlk zP*SQFqHC59478h{n?JortwZE_j~bu9#yOel?B)abf4I$1@i4tDElPiom~nq5kA8oq zU4yt!WV8#X`>eyW#EFzD^!YG1V-K%$$>8fsh(Ftqct*sLQbCk1d`PxtcU8|&)(E^_}Ce zwA^b->&CCh^bX#PAEbAl(_ehQZum$DHyP3aXu4y%;eja3W5TTmH8by}t{GgfM5eU=QR#t(eequQ3EGa_>^AJ6|6T@3yFVoU_ImZ>&7=>X z`_jj-9cmZFhKEbGAum6ECVUjrh0_Qpn7Sh`wrLMp+rgMFyXFhdZ4&hZ;f@7wBXM7G zz#VHu^lSo)v8TStZKoS6@t;vkP3fyy1fHl8lVs6DML*l+S#?6fv!{z)DuJ~UM!UG0 zYKdDIn=Tb|=>bViPSVet0cgJqF_-8ok8banjUjoKQ!DY?m#BjAml8{&%+~EmFAkC1 zcsEf&FZ@nZ+kBps9ebZFbCg92v2AD;2t3;>*%UV~-7MArNzU{pFxuBG=`BlHk?>?e z?4^SSv9>DC1SYL=u69vcc)4m(eU9W1uFuHXH=A$Yj1$H*sIBV0%2q8(8Xi9WZkqW- zt_nKVLm^qUuH*4F5>-JGIAu$_#aITbII=3HfHPj~nW<=ieokS1JqH6woWG3Tvi*RZ5Ny{%($ z?w;?Q&z8)C$@;1F?&hB4@E4h-jsWSF%P|24LpL2mnMgBzHTjjFND$v~{+5|+Y#B-U z#V1el$qnjNicIpmdYm}^IE`{~xfg}~@o9*nRYn3?<1 zSQTmOuwkw&mOvRcitn47_xErLw8KxH2<+qka6G9-g*ykrpLaX1{XzlX-RgkA2I=*v zCyKYs)oCRc)+31Dj?CQ_(JOZKpNA8wRS{y+IMcE-*f1%}C3~2%YIUob*e~o&BFHTE zp81*EiNbOhrk9%Fl!@MVp4CLZ8LEDG^Y;WYg6!D18?JEH)Ehq5qI{xk6Qfr!QEnbI z8<4TX=@X2uLrel03wVaRk-!G&Ug$QgNC)oPWY9=xi8+M_ZBU+~-0I>>OK&*Un$u(} zw>nYbG26y*Nl9qm`2+HT@r~C+*MJh}S16H-G*ydBKW|xuf zZ95rSsZU>9Rf9dhdHDsHS0rL1jbq(dIf|8bI8)f8)`_?4W;eb9nx*fwy;`;6lWzHL za#SZ7$Z3$ zAjGo&^h_mVZh!SpSIKsW{y&lmiO9VF>BvJZ9!dXyk@^23^6&WnlgycRTL2d@@&?KK zSI+u9D*AR7{B+B9+i77}m%82wpM-?rOb{wOjnU(uiD1;5Y35(OdgXX_wEKJ^Ij%U! zvT27%4R-8S8v?3Q9D4KiAG;A$gbn%5C$(6|!4Fc*cl=%Qbk}Z`YXZedo}2G`yOW`E z*Q%?lyS`e~yand^XRTAYdu;1ww!`ln4lMHQJ&4)!0=tDz6lhr(~8e*z-U)r)^@RqW-{fxr4kbD2;b#?T|EP za>$@T>@w=!YhXv00$VpUcli)Cdy*!5lx!0-HS~fo$u|d9Q5#a0aQ|LA8Q2Z!)=E_@ zvU%Yp!|#eLTa0dw)x=ki23x!Rko;tRy(^a(p_h}Dq^&ZLr>l=@x}U!k?$Ub0e_XC) zhZMyoz^BLF2vav$)(m8drG(Jm%u+)8=YTdV($4`pMh%pcjEnS1o8OAcg&kGytYnc_ z!12uws~^8YO>BF9PveV#Q>&P)a4RcwK`Mi`Z6&3pd4z>^U5zPy2YWwhP#6#_M1KM4 zW%p&IrB7PEd%nLDQ2H}J88n}D-f`oGbAxxzyLWu7Y;0BF!w{8-2qpCZ+XiG7zU$7& zG%)=OjdA&0S4TRU`>@CjWe_TBURz)PjATn7cUI8S%E~@khQImTcF{r#6obw~3;vH@ zY^fb-Rh;Q8Nq*GafA1&$lDvfVbvTS}VYt$ukO?#lLkI!60j;Vs#Mrkw;=Q`xr!yvF zJS}R>vRz%j#UI1bBfSLS_wRYc(5FE0S3zRP{VZucbEGiB*upTTwRU^)-N60vjWPKQHVJ@ zOXg2;;7skE4Wf45nf`qsB!9EJLT77X57moqbW*)0++2&S#tY&?7l`vgi@%Q9@3TEC zy>U8+OQOiTOSz~^7wtUL(PoKW(+kiOiJ{_PU%ds@4$v#-_h2r!gO0^8nZ=czVu&FM zl0kuyWlgQIe};M{>NbcP-E#3+O{E-f0+OhIguqrXk59??hyezt)t~@iZ2T&DGkb2f z$aq|$zKW9u%MEfq-u`3{g_B8l2|-Ws8`M9=+$taIGa|D}#T{nGR5E;BmwQu;L$A`4 zb#*lRJuP}2YLgtvCKX29{)%3pu(eg8bAs#gU~g)Add!a>IuI!2BUtK;rCpq9@`FSc zFhDg#_J@Vx05PPyyE~$!H^*A-T7bV?kfr5^9dj-rIHI0280IU#$HwRC>Z-$KYG%eG zB2sR{6{t~G!i zMVMm|g-J1F2vh_%Vy)z>e1i^X8=jSoS(W1|m5fpDjiGWQsPVf05t+Zzg*kfWV?7cP z4xk(Yy##0W)ks_aA!3b&_oXf{z8)?WS+LN$2e=gC*GhjGJ2mc-M?v%bbPV3PPNy55d=~yf zcmnnR-97MS)ev`_4Pb}v@~N?Rh5f}2gcmE*)ck@L?g+UEd)^O;5y)JYf-JXERTXl zQCxbW%rl{6-`gj9O#&HEQ5R-Vb@t5B>D|-EC#JW-2Cdmu;YO~LiyE9iF8j(?H@Y&& z`Yvg=>tFEYI-cIDt(E*_%GHETYK6CA86e4)>0eKDljVc2(9r>ObT&dZC}MqBZ<;BP z`Y~iYv4EkSe82SP&!3Ue(Im-QSh|Nm%=YVvibJO@bDb?-yV^}&EQYf@ayT6GO(DkX zZVQSn7Tk=CtkKa2gPcyt9A&!PA~l97N%8Pwgl-1zm#G3?k)cgyKdl#72nB8jOo`bz)mB=d z8?T*^Y1N|$H^z|%)(*^(dmHCwy?@-c7%r z1R>){8x%9|*w#spX@#K_%RGSx3TiMpjZ%lG#z7jg_^l(P#1ON=JBkO+z#; zTO`nQkzTGIVWU3F<9}E%ReCZ9O+Ib+64lSBbYAb~h zR+gryExEdN8%ZA#owD@>&ONNV?U&jXm*3M{(x2EgFJ<|{I5-Gy<4CL5K*3ABrnx;| zt(KLs(xAtMPfusnBI*{O|Jv&7+p5pwN-zJMF+%`CpWM4Y@%TcC%(v<_tIJ~2DKKt&rk36 z^r_G0q{M9OPD~8hd1-87qT}%`5R{mM9W)b}qYRXe)h(POBHE6Ig4#wG)sAop6R&!j zS;tHPQ?ll_{iS84>W^%wx9n>5G2y<1`~Xfb)d5TF>m4om5c^uDEMHk~uHB2E8%eFt zroI=7Ib3_eBok45(BJin{vH0A&tfd|bW!rwT;?k11EB8QRdk%ZbM>?c@PRr@k>3l* zQ-@vMTtVD#&J!m10VQV}jO(jeIO&@$V15@cTnN3b(UBLy`~Yse#)SQ;oEIT*g$y$~ z%SM0h8A1p)F0Vc2CNvwn&{%Q9lU$AY-gZpOt+x?Vgdg2M0UVTSzSpB4L-Jx&w22@g zt5^30x_RZGS;rmqmRR@CV~MukK2_nyG!KdhOrLF>!X*q&&iwN7I~d$D#ApG3jg0!R zrm~^|9n&SeD@#`ly%y(zUPFO-2vP%_M@_ttDk-$~X@(OL&b9^~amn#!O8+vVCpx z`kQY0{Rk)q%?Yak1Np2R za^-KsGM$%PSefB=e$dB`%5CzytnXf~z=MrgT+jEH7AYo0)5&2H`=W9+r^o~eRgtiq zJb;>W?xrULb?Zs5B)Iu|qPyA%JF65P_1GOO%3SQ{Ndl%@VGV~Jr$+6C%%b81g?w=PT9Y+Avi%Uq zRb$|u`dt$Qn_M•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[vjB8Yr) zF80|>cp;-*y7b}+w?lLAqkQ?l=-&$;lF;|zOu@)2`0D9XTQW%Nq5Q&bBm9q3;oP2J zHNSH58Kwt+>IF`FJ7j-*5S{Vv%S166{I)-_}Dwi<`wB5!0hI>;UI6D_`W6g zF4zTp+kyIdnj05F3%;ZbJkD7D>jHD%{eEvnn@tv8cE`z!ANQ)nyL8w8zI>mZE53kF z|7tc#ey_#nA*davMsl*u!pzj2?|a`>xO?WF2km9c8c`MULFjv9RZotL9|Dtt!D6Uo zYT(jkIroW)iBH9=*VEEs3hL`=0s=5`iHRyECWW_@Z``=jo1CjMboLSi)c`^`IUhV1 zeUv0^(~$BJXVJejeSLY{IO;Nw$41kzd-$0^Af@w(+LXmuM()ew9&yRHIU4=no*lGQ zu`j%M;h;R379DeTcVny?+N zwr4w+i`=5!a;PcYz4?nAt7SSWXCn1cW3%19i)J<9dG%-<2QyW0Ql^vR1kbN2}G)ZM#$?_5yJQZIk zs!*}@92giPC`wtv=2rZIYcU)AWxrw+aGPu_G0KE~2YQH`KEpLWIU=b#jJ6)@>-FY4 zV`CGYhE~a|pVlCe&uOI{1~Mh0kOW)IhkTyP91KyJecD$UbJYD!NZfl9TCBZ{befC5 zmUiV$-W9B7&@RXEy!A#Gmumq!X)F?khJrWmyh=$AxyKoh3?B7Phi_sg35*GRKlv^j zMv??zn7~6Z-fQ%*oz6?Od+N^GmJ;zx@z}*21;jq70Fi_e`>ztU%6QHHK)`tPPz)F# z$j!<#i6MP9^{hzI#Ga8W2yHBge-}acTW`Zm-5wu2MSB5&JQ)tBllY=!Gg});;hUb& z%b$dy$eJtYH8f0ZZ@6$f_sA5Pkn{}9{ApaXb$^Cv0XbAI2K1PKra2HDnR(0**^~Qb zG-)crv_@x(0GNv$#Qv~T<-Sf>kc^@6(7x1fd{!wGYz{l)E~Ykb_zp=`xfg>U_R23-X@PKZCfc3iuC zJ?`!Tcd^@@qMN)1sH>JY`80|y`MF%~I4Mf_3;R8k&|L?vaLD{L!OFd}vYYI_o~v2< z@vx#HB;R|q*m35x---yrCJnFno$kil2Uv&>DBH$8^t+L-y7)P{9ID&G;f(%qYwsZQ zy_ry-g{Ww)O+IJwJ{-P*3BY4H^@4Jx_l}i?_-qc6B^@3}K6osga^H|H|4Th5WM}uA zSW4PsO}Ag(SASnuWheb*zwb>Kj^qHtw+ac5dwn>MJkLq4=6hV>`~1^SIQte-PG zgb6ZFOQ^9x5AyLC*<^^_&FHLR53yO8q&)WZ8TO_c=#RKuW;U>Ud~c28l>{agaxG}e zjS{j2ok@I~rY7hjzrvVJVx$AmENtl@D9vs4@rt~ucJ6&*JdypegQjdjM`ueGA})qr z_kS2D94bc!a;^SRD&Hj3qi$c3bN|78r7>(WEEvc3mz!9QWu@(eC*$BCkf`)SUD-VS zP09ZCR`C56v2zB|=U_~e3a-X<$Fc^YN#G(_gg~(PJ+u3{z~QCbTm>kp$U5%JL1QmI z_k+=M=N=QmjTuL_7_eaPrb9XNml}oT7>F@RV*>H!Ew!!Df=A$AF1 zLox8Rbkm=$XoDS%$0Nq1AP{$rK!jk672BTg-ZmZGnneb2quIhFZfPTV8PoBX!@#gB zpHZsXSG$a5?{#%WhH2hcXk_fHr_eRG`*bg1;#FzSlv}VNa2EmJ1Q5Ofo)?H^kR!-`kl0eg@ z$E~caihhKzZ`pOy|HD9b3aqwGzJS^78201Uz7Cn9I3Qf3KUL0?Xp=n4p-qBH9xL*# zvCxkEpl$p0QHw3M!r?Y8OBAir^ecJKev>cg&%IP~d$Xy-*_1qiDt2ew$}}uKy;Vg# zEW?Q<4@B2!{KMzYY${F>l`la6p>+!H@=$KJeebD+mOP(l>vqLNe>jR`HwXqppP{D3 zRQrGoEBR^B<@6#o%k_W;@DNAfo=)b+rK_W@elr6y#c;x i`sa%h^^8LTo{C@zw%;Hu6 delta 4841 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 From 4e4e9bfe795460f7a295e6304a88959a127fbbc5 Mon Sep 17 00:00:00 2001 From: joep van der velden Date: Mon, 29 Apr 2019 21:56:01 +0200 Subject: [PATCH 040/195] Various borg fixes --- .../mob/living/silicon/robot/component.dm | 51 +++++++------ .../modules/mob/living/silicon/robot/robot.dm | 23 ++++-- .../mob/living/silicon/robot/robot_damage.dm | 72 +++++++++++-------- .../mob/living/silicon/robot/robot_defense.dm | 4 +- 4 files changed, 85 insertions(+), 65 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm index d81b76e2e76..d584d5a50f5 100644 --- a/code/modules/mob/living/silicon/robot/component.dm +++ b/code/modules/mob/living/silicon/robot/component.dm @@ -22,8 +22,11 @@ /datum/robot_component/proc/install() go_online() + owner.updatehealth("component '[src]' installed") + /datum/robot_component/proc/uninstall() go_offline() + owner.updatehealth("component '[src]' removed") /datum/robot_component/proc/destroy() if(wrapped) @@ -102,12 +105,6 @@ external_type = /obj/item/robot_parts/robot_component/actuator max_damage = 50 -/datum/robot_component/actuator/go_online() - owner.update_stat() - -/datum/robot_component/actuator/go_offline() - owner.update_stat() - /datum/robot_component/cell name = "power cell" max_damage = 50 @@ -115,12 +112,6 @@ /datum/robot_component/cell/is_powered() return ..() && owner.cell -/datum/robot_component/cell/go_online() - owner.update_stat() - -/datum/robot_component/cell/go_offline() - owner.update_stat() - /datum/robot_component/cell/destroy() ..() owner.cell = null @@ -264,19 +255,25 @@ if(M.timeofdeath && M.stat == DEAD) to_chat(user, "Time of Disable: [station_time_timestamp("hh:mm:ss", M.timeofdeath)]") var/mob/living/silicon/robot/H = M - var/list/damaged = H.get_damaged_components(1,1,1) + var/list/damaged = H.get_damaged_components(TRUE, TRUE, TRUE) // Get all except the missing ones + var/list/missing = H.get_missing_components() to_chat(user, "Localized Damage:") - if(length(damaged)>0) - for(var/datum/robot_component/org in damaged) - user.show_message(text("\t []: [][] - [] - [] - []", \ - capitalize(org.name), \ - (org.installed == -1) ? "DESTROYED " :"",\ - (org.electronics_damage > 0) ? "[org.electronics_damage]" :0, \ - (org.brute_damage > 0) ? "[org.brute_damage]" :0, \ - (org.toggled) ? "Toggled ON" : "Toggled OFF",\ - (org.powered) ? "Power ON" : "Power OFF"),1) - else + if(!LAZYLEN(damaged) && !LAZYLEN(missing)) to_chat(user, "\t Components are OK.") + else + if(LAZYLEN(damaged)) + for(var/datum/robot_component/org in damaged) + user.show_message(text("\t []: [][] - [] - [] - []", \ + capitalize(org.name), \ + (org.installed == -1) ? "DESTROYED " :"",\ + (org.electronics_damage > 0) ? "[org.electronics_damage]" :0, \ + (org.brute_damage > 0) ? "[org.brute_damage]" :0, \ + (org.toggled) ? "Toggled ON" : "Toggled OFF",\ + (org.powered) ? "Power ON" : "Power OFF"),1) + if(LAZYLEN(missing)) + for(var/datum/robot_component/org in missing) + user.show_message("\t [capitalize(org.name)]: MISSING") + if(H.emagged && prob(5)) to_chat(user, "\t ERROR: INTERNAL SYSTEMS COMPROMISED") @@ -287,22 +284,22 @@ to_chat(user, "External prosthetics:") var/organ_found - if(H.internal_organs.len) + if(LAZYLEN(H.internal_organs)) for(var/obj/item/organ/external/E in H.bodyparts) if(!E.is_robotic()) continue - organ_found = 1 + organ_found = TRUE to_chat(user, "[E.name]: [E.brute_dam] [E.burn_dam]") if(!organ_found) to_chat(user, "No prosthetics located.") to_chat(user, "
") to_chat(user, "Internal prosthetics:") organ_found = null - if(H.internal_organs.len) + if(LAZYLEN(H.internal_organs)) for(var/obj/item/organ/internal/O in H.internal_organs) if(!O.is_robotic()) continue - organ_found = 1 + organ_found = TRUE to_chat(user, "[capitalize(O.name)]: [O.damage]") if(!organ_found) to_chat(user, "No prosthetics located.") diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index ae6a832f6ac..18de2f413f4 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -157,6 +157,7 @@ var/list/robot_verbs_default = list( var/datum/robot_component/cell_component = components["power cell"] cell_component.wrapped = cell cell_component.installed = 1 + cell_component.install() diag_hud_set_borgcell() scanner = new(src) @@ -438,8 +439,10 @@ var/list/robot_verbs_default = list( var/dat = "[src.name] Self-Diagnosis Report\n" for(var/V in components) var/datum/robot_component/C = components[V] - dat += "[C.name]
Brute Damage:[C.brute_damage]
Electronics Damage:[C.electronics_damage]
Powered:[C.is_powered() ? "Yes" : "No"]
Toggled:[ C.toggled ? "Yes" : "No"]

" - + if(C.installed == 0) + dat += "[C.name]
MISSING
" + else + dat += "[C.name][C.installed == -1 ? "
DESTROYED" : ""]
Brute Damage:[C.brute_damage]
Electronics Damage:[C.electronics_damage]
Powered:[C.is_powered() ? "Yes" : "No"]
Toggled:[ C.toggled ? "Yes" : "No"]

" return dat /mob/living/silicon/robot/verb/self_diagnosis_verb() @@ -591,6 +594,9 @@ var/list/robot_verbs_default = list( if(!getBruteLoss()) to_chat(user, "Nothing to fix!") return + else if(!getBruteLoss(TRUE)) + to_chat(user, "The damaged components are beyond saving!") + return var/obj/item/weldingtool/WT = W user.changeNext_move(CLICK_CD_MELEE) if(WT.remove_fuel(0)) @@ -603,11 +609,14 @@ var/list/robot_verbs_default = list( return - else if(istype(W, /obj/item/stack/cable_coil) && user.a_intent == INTENT_HELP && (wiresexposed || istype(src,/mob/living/silicon/robot/drone))) + else if(istype(W, /obj/item/stack/cable_coil) && user.a_intent == INTENT_HELP && (wiresexposed || istype(src, /mob/living/silicon/robot/drone))) user.changeNext_move(CLICK_CD_MELEE) if(!getFireLoss()) to_chat(user, "Nothing to fix!") return + else if(!getFireLoss(TRUE)) + to_chat(user, "The damaged components are beyond saving!") + return var/obj/item/stack/cable_coil/coil = W adjustFireLoss(-30) updatehealth() @@ -654,10 +663,10 @@ var/list/robot_verbs_default = list( I.burn = C.electronics_damage I.loc = src.loc - - if(C.installed == 1) - C.uninstall() + var/was_installed = C.installed C.installed = 0 + if(was_installed) + C.uninstall() else if(locked) @@ -1362,7 +1371,7 @@ var/list/robot_verbs_default = list( ..() var/brute = 1000 var/burn = 1000 - var/list/datum/robot_component/borked_parts = get_damaged_components(brute,burn,1) + var/list/datum/robot_component/borked_parts = get_damaged_components(TRUE, TRUE, TRUE, TRUE) for(var/datum/robot_component/borked_part in borked_parts) brute = borked_part.brute_damage burn = borked_part.electronics_damage diff --git a/code/modules/mob/living/silicon/robot/robot_damage.dm b/code/modules/mob/living/silicon/robot/robot_damage.dm index e2a93fa0167..81700464ac0 100644 --- a/code/modules/mob/living/silicon/robot/robot_damage.dm +++ b/code/modules/mob/living/silicon/robot/robot_damage.dm @@ -8,18 +8,20 @@ handle_hud_icons_health() diag_hud_set_health() -/mob/living/silicon/robot/getBruteLoss() +/mob/living/silicon/robot/getBruteLoss(repairable_only = FALSE) var/amount = 0 for(var/V in components) var/datum/robot_component/C = components[V] - if(C.installed != 0) amount += C.brute_damage + if(C.installed != 0 && (!repairable_only || C.installed != -1)) // Installed ones only and if repair only remove the borked ones + amount += C.brute_damage return amount -/mob/living/silicon/robot/getFireLoss() +/mob/living/silicon/robot/getFireLoss(repairable_only = FALSE) var/amount = 0 for(var/V in components) var/datum/robot_component/C = components[V] - if(C.installed != 0) amount += C.electronics_damage + if(C.installed != 0 && (!repairable_only || C.installed != -1)) // Installed ones only and if repair only remove the borked ones + amount += C.electronics_damage return amount /mob/living/silicon/robot/adjustBruteLoss(amount, updating_health = TRUE) @@ -36,11 +38,19 @@ heal_overall_damage(0, -amount, updating_health) return STATUS_UPDATE_HEALTH -/mob/living/silicon/robot/proc/get_damaged_components(var/brute, var/burn, var/get_all) +/mob/living/silicon/robot/proc/get_damaged_components(get_brute, get_burn, get_borked = FALSE, get_missing = FALSE) var/list/datum/robot_component/parts = list() for(var/V in components) var/datum/robot_component/C = components[V] - if(C.installed == 1 || get_all) if((brute && C.brute_damage) || (burn && C.electronics_damage)) + if((C.installed == 1 || (get_borked && C.installed == -1) || (get_missing && C.installed == 0)) && ((get_brute && C.brute_damage) || (get_burn && C.electronics_damage))) + parts += C + return parts + +/mob/living/silicon/robot/proc/get_missing_components() + var/list/datum/robot_component/parts = list() + for(var/V in components) + var/datum/robot_component/C = components[V] + if(C.installed == 0) parts += C return parts @@ -48,41 +58,43 @@ var/list/rval = new for(var/V in components) var/datum/robot_component/C = components[V] - if(C.installed == 1) rval += C + if(C.installed == 1) + rval += C return rval /mob/living/silicon/robot/proc/get_armour() - - if(!components.len) return 0 + if(!LAZYLEN(components)) + return 0 var/datum/robot_component/C = components["armour"] if(C && C.installed == 1) return C return 0 /mob/living/silicon/robot/heal_organ_damage(brute, burn, updating_health = TRUE) - var/list/datum/robot_component/parts = get_damaged_components(brute,burn) - if(!parts.len) return + var/list/datum/robot_component/parts = get_damaged_components(brute, burn) + if(!LAZYLEN(parts)) + return var/datum/robot_component/picked = pick(parts) - picked.heal_damage(brute,burn, updating_health) + picked.heal_damage(brute, burn, updating_health) /mob/living/silicon/robot/take_organ_damage(brute = 0, burn = 0, updating_health = TRUE, sharp = 0, edge = 0) var/list/components = get_damageable_components() - if(!components.len) + if(!LAZYLEN(components)) return //Combat shielding absorbs a percentage of damage directly into the cell. var/obj/item/borg/combat/shield/shield - if(module_state_1 && istype(module_state_1,/obj/item/borg/combat/shield)) + if(module_state_1 && istype(module_state_1, /obj/item/borg/combat/shield)) shield = module_state_1 - else if(module_state_2 && istype(module_state_2,/obj/item/borg/combat/shield)) + else if(module_state_2 && istype(module_state_2, /obj/item/borg/combat/shield)) shield = module_state_2 - else if(module_state_3 && istype(module_state_3,/obj/item/borg/combat/shield)) + else if(module_state_3 && istype(module_state_3, /obj/item/borg/combat/shield)) shield = module_state_3 if(shield) //Shields absorb a certain percentage of damage based on their power setting. - var/absorb_brute = brute*shield.shield_level - var/absorb_burn = burn*shield.shield_level - var/cost = (absorb_brute+absorb_burn)*100 + var/absorb_brute = brute * shield.shield_level + var/absorb_burn = burn * shield.shield_level + var/cost = (absorb_brute+absorb_burn) * 100 cell.charge -= cost if(cell.charge <= 0) @@ -102,9 +114,9 @@ C.take_damage(brute, burn, sharp, updating_health) /mob/living/silicon/robot/heal_overall_damage(var/brute, var/burn, updating_health = TRUE) - var/list/datum/robot_component/parts = get_damaged_components(brute,burn) + var/list/datum/robot_component/parts = get_damaged_components(brute, burn) - while(parts.len && (brute>0 || burn>0) ) + while(LAZYLEN(parts) && (brute > 0 || burn > 0) ) var/datum/robot_component/picked = pick(parts) var/brute_was = picked.brute_damage @@ -112,8 +124,8 @@ picked.heal_damage(brute,burn, updating_health) - brute -= (brute_was-picked.brute_damage) - burn -= (burn_was-picked.electronics_damage) + brute -= (brute_was - picked.brute_damage) + burn -= (burn_was - picked.electronics_damage) parts -= picked @@ -126,17 +138,17 @@ //Combat shielding absorbs a percentage of damage directly into the cell. var/obj/item/borg/combat/shield/shield - if(module_state_1 && istype(module_state_1,/obj/item/borg/combat/shield)) + if(module_state_1 && istype(module_state_1, /obj/item/borg/combat/shield)) shield = module_state_1 - else if(module_state_2 && istype(module_state_2,/obj/item/borg/combat/shield)) + else if(module_state_2 && istype(module_state_2, /obj/item/borg/combat/shield)) shield = module_state_2 - else if(module_state_3 && istype(module_state_3,/obj/item/borg/combat/shield)) + else if(module_state_3 && istype(module_state_3, /obj/item/borg/combat/shield)) shield = module_state_3 if(shield) //Shields absorb a certain percentage of damage based on their power setting. - var/absorb_brute = brute*shield.shield_level - var/absorb_burn = burn*shield.shield_level - var/cost = (absorb_brute+absorb_burn)*100 + var/absorb_brute = brute * shield.shield_level + var/absorb_burn = burn * shield.shield_level + var/cost = (absorb_brute+absorb_burn) * 100 cell.charge -= cost if(cell.charge <= 0) @@ -152,7 +164,7 @@ A.take_damage(brute, burn, sharp) return - while(parts.len && (brute>0 || burn>0) ) + while(LAZYLEN(parts) && (brute > 0 || burn > 0) ) var/datum/robot_component/picked = pick(parts) var/brute_was = picked.brute_damage diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index 161b81e3cd2..85cc2ad5786 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -46,7 +46,9 @@ user.put_in_active_hand(cell) to_chat(user, "You remove \the [cell].") cell = null - update_stat() + var/datum/robot_component/C = components["power cell"] + C.installed = 0 + C.uninstall() diag_hud_set_borgcell() if(!opened) From 6c4288f732d6b45297e4623452a10f0541cf1ac9 Mon Sep 17 00:00:00 2001 From: joep van der velden Date: Mon, 29 Apr 2019 22:00:17 +0200 Subject: [PATCH 041/195] correct check now for uninstal --- code/modules/mob/living/silicon/robot/robot.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 18de2f413f4..da793b2f3d3 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -665,7 +665,7 @@ var/list/robot_verbs_default = list( I.loc = src.loc var/was_installed = C.installed C.installed = 0 - if(was_installed) + if(was_installed == 1) C.uninstall() else From cd32b0211b84a7996dc21b98e9e9e2ffd36ebcb7 Mon Sep 17 00:00:00 2001 From: Arkatos1 Date: Mon, 29 Apr 2019 23:47:25 +0200 Subject: [PATCH 042/195] Carp Expansion Pack --- code/game/objects/items/dehy_carp.dm | 2 +- .../mob/living/simple_animal/hostile/carp.dm | 33 +++++++++++++----- .../simple_animal/hostile/retaliate/fish.dm | 29 ++++++++++----- icons/mob/animal.dmi | Bin 309843 -> 302856 bytes icons/mob/carp.dmi | Bin 0 -> 19111 bytes 5 files changed, 45 insertions(+), 19 deletions(-) create mode 100644 icons/mob/carp.dmi diff --git a/code/game/objects/items/dehy_carp.dm b/code/game/objects/items/dehy_carp.dm index 3125c24837a..a975a0b4d06 100644 --- a/code/game/objects/items/dehy_carp.dm +++ b/code/game/objects/items/dehy_carp.dm @@ -37,7 +37,7 @@ visible_message("[src] swells up!") // Animation - icon = 'icons/mob/animal.dmi' + icon = 'icons/mob/carp.dmi' flick("carp_swell", src) // Wait for animation to end sleep(6) diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index 5139f187494..e077705425f 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -1,11 +1,8 @@ - - /mob/living/simple_animal/hostile/carp name = "space carp" desc = "A ferocious, fang-bearing creature that resembles a fish." + icon = 'icons/mob/carp.dmi' icon_state = "carp" - icon_living = "carp" - icon_dead = "carp_dead" icon_gib = "carp_gib" speak_chance = 0 turns_per_move = 5 @@ -16,7 +13,6 @@ speed = 0 maxHealth = 25 health = 25 - harm_intent_damage = 8 obj_damage = 50 melee_damage_lower = 15 @@ -30,12 +26,27 @@ minbodytemp = 0 maxbodytemp = 1500 - - faction = list("carp") flying = 1 gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE + var/carp_color = "carp" //holder for icon set + var/list/icon_sets = list("carp", "blue", "yellow", "grape", "rust", "teal", "purple") + +/mob/living/simple_animal/hostile/carp/Initialize() + . = ..() + carp_randomify() + update_icons() + +/mob/living/simple_animal/hostile/carp/proc/carp_randomify() + if(prob(1)) + carp_color = pick("white", "black") + else + carp_color = pick(icon_sets) + icon_state = "[carp_color]" + icon_living = "[carp_color]" + icon_dead = "[carp_color]_dead" + /mob/living/simple_animal/hostile/carp/Process_Spacemove(var/movement_dir = 0) return 1 //No drifting in space for space carp! //original comments do not steal @@ -50,7 +61,6 @@ var/mob/living/carbon/human/H = target H.adjustStaminaLoss(8) - /mob/living/simple_animal/hostile/carp/holocarp icon_state = "holocarp" icon_living = "holocarp" @@ -58,6 +68,8 @@ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID del_on_death = 1 +/mob/living/simple_animal/hostile/carp/holocarp/Initialize() + return /mob/living/simple_animal/hostile/carp/megacarp icon = 'icons/mob/alienqueen.dmi' @@ -73,4 +85,7 @@ mob_size = MOB_SIZE_LARGE obj_damage = 80 melee_damage_lower = 20 - melee_damage_upper = 20 \ No newline at end of file + melee_damage_upper = 20 + +/mob/living/simple_animal/hostile/carp/megacarp/Initialize() + return diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm index 7b10c0e828a..33bf454ce9f 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm @@ -2,9 +2,8 @@ /mob/living/simple_animal/hostile/retaliate/carp name = "sea carp" desc = "A large fish bearing similarities to a certain space-faring menace." + icon = 'icons/mob/carp.dmi' icon_state = "carp" - icon_living = "carp" - icon_dead = "carp_dead" icon_gib = "carp_gib" speak_chance = 0 turns_per_move = 5 @@ -15,20 +14,33 @@ speed = 0 maxHealth = 25 health = 25 - retreat_distance = 6 vision_range = 5 - harm_intent_damage = 8 melee_damage_lower = 15 melee_damage_upper = 15 attacktext = "bites" attack_sound = 'sound/weapons/bite.ogg' speak_emote = list("gnashes") - faction = list("carp") flying = 1 + var/carp_color = "carp" //holder for icon set + var/list/icon_sets = list("carp", "blue", "yellow", "grape", "rust", "teal", "purple") + +/mob/living/simple_animal/hostile/retaliate/carp/Initialize() + . = ..() + carp_randomify() + update_icons() + +/mob/living/simple_animal/hostile/retaliate/carp/proc/carp_randomify() + if(prob(1)) + carp_color = pick("white", "black") + else + carp_color = pick(icon_sets) + icon_state = "[carp_color]" + icon_living = "[carp_color]" + icon_dead = "[carp_color]_dead" /mob/living/simple_animal/hostile/retaliate/carp/koi name = "space koi" @@ -50,18 +62,17 @@ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE -/mob/living/simple_animal/hostile/retaliate/carp/koi/New() - ..() +/mob/living/simple_animal/hostile/retaliate/carp/koi/Initialize() + . = ..() var/koinum = rand(1, 4) icon_state = "koi[koinum]" icon_living = "koi[koinum]" icon_dead = "koi[koinum]-dead" - /mob/living/simple_animal/hostile/retaliate/carp/koi/Process_Spacemove(var/movement_dir) return TRUE /mob/living/simple_animal/hostile/retaliate/carp/koi/honk icon_state = "koi5" icon_living = "koi5" - icon_dead = "koi5-dead" \ No newline at end of file + icon_dead = "koi5-dead" diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index b09302e0234cc080fabb67554b51e1841a09a31f..1e321d400585bb6f24ae10580068df8f39806a32 100644 GIT binary patch literal 302856 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

|iI40X>(?P~qaO|B?d~dm|JIK! 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 z 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�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 G@c#fTqZvs6 literal 309843 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 K=?o2%hyMZFDQ`~z diff --git a/icons/mob/carp.dmi b/icons/mob/carp.dmi new file mode 100644 index 0000000000000000000000000000000000000000..f5bb7f116b94465d4d768c009d9d5a02f4adbd74 GIT binary patch literal 19111 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 Date: Tue, 30 Apr 2019 00:31:30 +0200 Subject: [PATCH 043/195] Code review fixes --- code/modules/mob/living/simple_animal/hostile/carp.dm | 6 +++--- .../mob/living/simple_animal/hostile/retaliate/fish.dm | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index e077705425f..299677804e2 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -33,7 +33,7 @@ var/carp_color = "carp" //holder for icon set var/list/icon_sets = list("carp", "blue", "yellow", "grape", "rust", "teal", "purple") -/mob/living/simple_animal/hostile/carp/Initialize() +/mob/living/simple_animal/hostile/carp/Initialize(mapload) . = ..() carp_randomify() update_icons() @@ -68,7 +68,7 @@ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID del_on_death = 1 -/mob/living/simple_animal/hostile/carp/holocarp/Initialize() +/mob/living/simple_animal/hostile/carp/holocarp/carp_randomify() return /mob/living/simple_animal/hostile/carp/megacarp @@ -87,5 +87,5 @@ melee_damage_lower = 20 melee_damage_upper = 20 -/mob/living/simple_animal/hostile/carp/megacarp/Initialize() +/mob/living/simple_animal/hostile/carp/megacarp/carp_randomify() return diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm index 33bf454ce9f..184cb9eacb1 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm @@ -28,7 +28,7 @@ var/carp_color = "carp" //holder for icon set var/list/icon_sets = list("carp", "blue", "yellow", "grape", "rust", "teal", "purple") -/mob/living/simple_animal/hostile/retaliate/carp/Initialize() +/mob/living/simple_animal/hostile/retaliate/carp/Initialize(mapload) . = ..() carp_randomify() update_icons() @@ -62,7 +62,7 @@ gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE -/mob/living/simple_animal/hostile/retaliate/carp/koi/Initialize() +/mob/living/simple_animal/hostile/retaliate/carp/koi/Initialize(mapload) . = ..() var/koinum = rand(1, 4) icon_state = "koi[koinum]" From 726e0af91a2e302cbf8f6c71d04a228a6ab86fe5 Mon Sep 17 00:00:00 2001 From: Twinmold93 Date: Mon, 29 Apr 2019 23:43:32 -0500 Subject: [PATCH 044/195] rebase --- code/modules/mob/mob.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 482bf85491d..14004fa4a5b 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1001,6 +1001,8 @@ var/list/slot_equipment_priority = list( \ /mob/proc/show_stat_station_time() stat(null, "Round Time: [worldtime2text()]") stat(null, "Station Time: [station_time_timestamp()]") + if(client.holder && (client.holder.rights & R_ADMIN)) + stat(null, "Server Time: [time_stamp()]") // this function displays the shuttles ETA in the status panel if the shuttle has been called /mob/proc/show_stat_emergency_shuttle_eta() From 66baa9e41b2e5435371e4fde45a3d35f10486b74 Mon Sep 17 00:00:00 2001 From: KasparoVy <12377767+KasparoVy@users.noreply.github.com> Date: Tue, 30 Apr 2019 01:00:24 -0400 Subject: [PATCH 045/195] Adds Eyewear Adjustment: Wearing Over/Under Masks Adds a verb that'll let you adjust eyewear to be worn above or below a mask. Purely cosmetic. --- code/__DEFINES/misc.dm | 57 ++++++++++--------- code/modules/clothing/clothing.dm | 23 ++++++++ .../mob/living/carbon/human/update_icons.dm | 8 ++- 3 files changed, 59 insertions(+), 29 deletions(-) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index dff9426c641..94e4ee780cf 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -208,33 +208,34 @@ #define MFOAM_IRON 2 //Human Overlays Indexes///////// -#define BODY_LAYER 37 -#define MUTANTRACE_LAYER 36 -#define TAIL_UNDERLIMBS_LAYER 35 //Tail split-rendering. -#define LIMBS_LAYER 34 -#define INTORGAN_LAYER 33 -#define MARKINGS_LAYER 32 -#define UNDERWEAR_LAYER 31 -#define MUTATIONS_LAYER 30 -#define H_DAMAGE_LAYER 29 -#define UNIFORM_LAYER 28 -#define ID_LAYER 27 -#define SHOES_LAYER 26 -#define GLOVES_LAYER 25 -#define EARS_LAYER 24 -#define SUIT_LAYER 23 -#define BELT_LAYER 22 //Possible make this an overlay of somethign required to wear a belt? -#define SUIT_STORE_LAYER 21 -#define BACK_LAYER 20 -#define HEAD_ACCESSORY_LAYER 19 -#define FHAIR_LAYER 18 -#define GLASSES_LAYER 17 -#define HAIR_LAYER 16 //TODO: make part of head layer? -#define HEAD_ACC_OVER_LAYER 15 //Select-layer rendering. -#define FHAIR_OVER_LAYER 14 //Select-layer rendering. -#define GLASSES_OVER_LAYER 13 //Select-layer rendering. -#define TAIL_LAYER 12 //bs12 specific. this hack is probably gonna come back to haunt me -#define FACEMASK_LAYER 11 +#define BODY_LAYER 38 +#define MUTANTRACE_LAYER 37 +#define TAIL_UNDERLIMBS_LAYER 36 //Tail split-rendering. +#define LIMBS_LAYER 35 +#define INTORGAN_LAYER 34 +#define MARKINGS_LAYER 33 +#define UNDERWEAR_LAYER 32 +#define MUTATIONS_LAYER 31 +#define H_DAMAGE_LAYER 30 +#define UNIFORM_LAYER 29 +#define ID_LAYER 28 +#define SHOES_LAYER 27 +#define GLOVES_LAYER 26 +#define EARS_LAYER 25 +#define SUIT_LAYER 24 +#define BELT_LAYER 23 //Possible make this an overlay of somethign required to wear a belt? +#define SUIT_STORE_LAYER 22 +#define BACK_LAYER 21 +#define HEAD_ACCESSORY_LAYER 20 +#define FHAIR_LAYER 19 +#define GLASSES_LAYER 18 +#define HAIR_LAYER 17 //TODO: make part of head layer? +#define HEAD_ACC_OVER_LAYER 16 //Select-layer rendering. +#define FHAIR_OVER_LAYER 15 //Select-layer rendering. +#define GLASSES_OVER_LAYER 14 //Select-layer rendering. +#define TAIL_LAYER 13 //bs12 specific. this hack is probably gonna come back to haunt me +#define FACEMASK_LAYER 12 +#define OVER_MASK_LAYER 11 //Select-layer rendering. #define HEAD_LAYER 10 #define COLLAR_LAYER 9 #define HANDCUFF_LAYER 8 @@ -245,7 +246,7 @@ #define FIRE_LAYER 3 //If you're on fire #define MISC_LAYER 2 #define FROZEN_LAYER 1 -#define TOTAL_LAYERS 37 +#define TOTAL_LAYERS 38 ///Access Region Codes/// #define REGION_ALL 0 diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 9613ce173af..b73c22800e7 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -159,6 +159,7 @@ var/list/color_view = null//overrides client.color while worn var/prescription = 0 var/prescription_upgradable = 0 + var/over_mask = FALSE //Whether or not the eyewear is rendered above the mask. Purely cosmetic. strip_delay = 20 // but seperated to allow items to protect but not impair vision, like space helmets put_on_delay = 25 burn_state = FIRE_PROOF @@ -173,6 +174,28 @@ SEE_PIXELS// if an object is located on an unlit area, but some of its pixels ar BLIND // can't see anything */ +/obj/item/clothing/glasses/verb/adjust_eyewear() //Adjust eyewear to be worn above or below the mask. + set name = "Adjust Eyewear" + set category = "Object" + set desc = "Adjust your eyewear to be worn over or under a mask." + set src in usr + + var/mob/living/carbon/human/user = usr + if(!istype(user)) + return + if(user.incapacitated()) //Dead spessmen adjust no glasses. Resting/buckled ones do, though + return + + var/action_fluff = "You adjust \the [src]" + if(user.glasses == src) + if(!user.canUnEquip(src)) + to_chat(usr, "[src] is stuck to you!") + return + if(attack_hand(user)) //Remove the glasses for this action. Prevents logic-defying instances where glasses phase through your mask as it ascends/descends to another plane of existence. + action_fluff = "You remove \the [src] and adjust it" + + over_mask = !over_mask + to_chat(user, "[action_fluff] to be worn [over_mask ? "over" : "under"] a mask.") //Gloves /obj/item/clothing/gloves diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index e55eee62dbc..6e540c4cf5a 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -659,6 +659,7 @@ var/global/list/damage_icon_parts = list() /mob/living/carbon/human/update_inv_glasses(var/update_icons=1) remove_overlay(GLASSES_LAYER) remove_overlay(GLASSES_OVER_LAYER) + remove_overlay(OVER_MASK_LAYER) if(client && hud_used) var/obj/screen/inventory/inv = hud_used.inv_slots[slot_glasses] @@ -681,7 +682,12 @@ var/global/list/damage_icon_parts = list() new_glasses = mutable_appearance('icons/mob/eyes.dmi', "[glasses.icon_state]", layer = -GLASSES_LAYER) var/datum/sprite_accessory/hair/hair_style = GLOB.hair_styles_full_list[head_organ.h_style] - if(hair_style && hair_style.glasses_over) //Select which layer to use based on the properties of the hair style. Hair styles with hair that don't overhang the arms of the glasses should have glasses_over set to a positive value. + var/obj/item/clothing/glasses/G = glasses + if(istype(G) && G.over_mask) //If the user's used the 'wear over mask' verb on the glasses. + new_glasses.layer = -OVER_MASK_LAYER + overlays_standing[OVER_MASK_LAYER] = new_glasses + apply_overlay(OVER_MASK_LAYER) + else if(hair_style && hair_style.glasses_over) //Select which layer to use based on the properties of the hair style. Hair styles with hair that don't overhang the arms of the glasses should have glasses_over set to a positive value. new_glasses.layer = -GLASSES_OVER_LAYER overlays_standing[GLASSES_OVER_LAYER] = new_glasses apply_overlay(GLASSES_OVER_LAYER) From ec790efeaaf7986b989fd1c0d9bda801bb4b0030 Mon Sep 17 00:00:00 2001 From: AffectedArc07 Date: Wed, 24 Apr 2019 14:07:34 +0100 Subject: [PATCH 046/195] SSticker --- code/__DEFINES/gamemode.dm | 12 +- code/__DEFINES/misc.dm | 2 +- code/__HELPERS/_logging.dm | 2 +- code/__HELPERS/time.dm | 4 +- code/controllers/Processes/ticker.dm | 36 -- code/controllers/configuration.dm | 2 +- code/controllers/master.dm | 4 +- code/controllers/subsystem/jobs.dm | 4 +- code/controllers/subsystem/nightshift.dm | 2 +- code/controllers/subsystem/shuttles.dm | 6 +- .../subsystem/ticker.dm} | 147 ++++--- code/controllers/subsystem/vote.dm | 14 +- code/controllers/verbs.dm | 2 +- code/datums/cache/air_alarm.dm | 2 +- code/datums/hud.dm | 4 +- code/datums/mind.dm | 410 +++++++++--------- code/datums/periodic_news.dm | 2 +- code/datums/spells/chaplain.dm | 4 +- code/datums/spells/lichdom.dm | 2 +- code/datums/uplink_item.dm | 4 +- code/game/data_huds.dm | 2 +- code/game/gamemodes/blob/powers.dm | 4 +- code/game/gamemodes/cult/cult.dm | 26 +- code/game/gamemodes/cult/cult_objectives.dm | 20 +- code/game/gamemodes/cult/ritual.dm | 32 +- code/game/gamemodes/cult/runes.dm | 34 +- code/game/gamemodes/cult/talisman.dm | 2 +- code/game/gamemodes/devil/devilinfo.dm | 4 +- code/game/gamemodes/devil/objectives.dm | 2 +- code/game/gamemodes/game_mode.dm | 4 +- code/game/gamemodes/heist/heist.dm | 2 +- code/game/gamemodes/intercept_report.dm | 4 +- .../gamemodes/malfunction/Malf_Modules.dm | 2 +- .../miniantags/abduction/abduction.dm | 4 +- .../abduction/machinery/experiment.dm | 4 +- .../gamemodes/miniantags/morph/morph_event.dm | 2 +- .../gamemodes/miniantags/revenant/revenant.dm | 4 +- .../revenant/revenant_spawn_event.dm | 2 +- .../miniantags/slaughter/slaughter.dm | 4 +- code/game/gamemodes/nuclear/nuclear.dm | 12 +- .../gamemodes/nuclear/nuclear_challenge.dm | 4 +- code/game/gamemodes/nuclear/nuclearbomb.dm | 26 +- code/game/gamemodes/nuclear/pinpointer.dm | 4 +- code/game/gamemodes/objective.dm | 26 +- code/game/gamemodes/revolution/revolution.dm | 10 +- code/game/gamemodes/scoreboard.dm | 16 +- code/game/gamemodes/setupgame.dm | 8 +- code/game/gamemodes/shadowling/shadowling.dm | 6 +- .../shadowling/shadowling_abilities.dm | 22 +- .../special_shadowling_abilities.dm | 4 +- code/game/gamemodes/traitor/traitor.dm | 4 +- code/game/gamemodes/vampire/vampire.dm | 6 +- code/game/gamemodes/vampire/vampire_powers.dm | 20 +- code/game/gamemodes/wizard/artefact.dm | 8 +- code/game/gamemodes/wizard/soulstone.dm | 34 +- code/game/gamemodes/wizard/spellbook.dm | 10 +- code/game/gamemodes/wizard/wizard.dm | 6 +- code/game/jobs/job/support_chaplain.dm | 10 +- code/game/jobs/job_objective.dm | 2 +- code/game/machinery/cloning.dm | 32 +- code/game/machinery/computer/ai_core.dm | 4 +- .../game/machinery/computer/communications.dm | 6 +- code/game/machinery/cryopod.dm | 12 +- code/game/machinery/doors/windowdoor.dm | 2 +- code/game/machinery/syndicatebeacon.dm | 4 +- code/game/magic/Uristrunes.dm | 8 +- .../effects/decals/Cleanable/humans.dm | 4 +- .../effects/effect_system/effect_system.dm | 4 +- code/game/objects/items/devices/flash.dm | 6 +- code/game/objects/items/devices/flashlight.dm | 2 +- code/game/objects/items/devices/uplinks.dm | 4 +- code/game/objects/items/robot/robot_parts.dm | 2 +- .../objects/items/weapons/holy_weapons.dm | 20 +- .../weapons/implants/implant_mindshield.dm | 8 +- .../items/weapons/implants/implant_traitor.dm | 24 +- code/game/objects/items/weapons/staff.dm | 2 +- .../objects/items/weapons/storage/bible.dm | 2 +- code/game/objects/structures.dm | 6 +- code/game/sound.dm | 4 +- code/game/turfs/simulated/floor/plating.dm | 4 +- code/game/turfs/simulated/walls_misc.dm | 4 +- code/game/turfs/turf.dm | 6 +- code/game/verbs/suicide.dm | 4 +- code/game/world.dm | 17 +- code/modules/admin/admin.dm | 42 +- code/modules/admin/player_panel.dm | 98 ++--- code/modules/admin/topic.dm | 66 +-- code/modules/admin/verbs/cinematic.dm | 4 +- code/modules/admin/verbs/debug.dm | 14 +- code/modules/admin/verbs/gimmick_team.dm | 4 +- code/modules/admin/verbs/honksquad.dm | 4 +- .../admin/verbs/infiltratorteam_syndicate.dm | 4 +- code/modules/admin/verbs/one_click_antag.dm | 12 +- code/modules/admin/verbs/onlyone.dm | 8 +- code/modules/admin/verbs/onlyoneteam.dm | 2 +- code/modules/admin/verbs/pray.dm | 6 +- code/modules/admin/verbs/randomverbs.dm | 32 +- code/modules/admin/verbs/striketeam.dm | 10 +- .../admin/verbs/striketeam_syndicate.dm | 4 +- code/modules/admin/verbs/tripAI.dm | 10 +- .../antagonists/_common/antag_spawner.dm | 26 +- code/modules/awaymissions/corpse.dm | 2 +- code/modules/clothing/shoes/magboots.dm | 2 +- code/modules/events/abductor.dm | 12 +- code/modules/events/alien_infestation.dm | 4 +- code/modules/karma/karma.dm | 2 +- code/modules/library/computers/checkout.dm | 10 +- .../mining/lavaland/loot/colossus_loot.dm | 2 +- .../mob/living/carbon/alien/alien_defense.dm | 2 +- .../carbon/alien/special/alien_embryo.dm | 4 +- code/modules/mob/living/carbon/human/death.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 2 +- .../mob/living/carbon/human/human_damage.dm | 2 +- .../mob/living/carbon/human/human_defense.dm | 2 +- .../carbon/human/interactive/interactive.dm | 6 +- .../living/carbon/human/species/_species.dm | 4 +- code/modules/mob/living/carbon/superheroes.dm | 8 +- code/modules/mob/living/death.dm | 4 +- code/modules/mob/living/living.dm | 2 +- code/modules/mob/living/living_defense.dm | 2 +- .../mob/living/silicon/ai/ai_defense.dm | 2 +- .../living/silicon/ai/freelook/cameranet.dm | 2 +- .../modules/mob/living/silicon/ai/latejoin.dm | 4 +- code/modules/mob/living/silicon/login.dm | 20 +- .../modules/mob/living/silicon/pai/recruit.dm | 4 +- .../mob/living/silicon/robot/drone/drone.dm | 2 +- .../silicon/robot/drone/drone_manufacturer.dm | 4 +- .../modules/mob/living/silicon/robot/robot.dm | 6 +- .../mob/living/simple_animal/constructs.dm | 12 +- .../mob/living/simple_animal/friendly/cat.dm | 4 +- .../simple_animal/friendly/cockroach.dm | 2 +- code/modules/mob/logout.dm | 2 +- code/modules/mob/mob.dm | 4 +- code/modules/mob/new_player/new_player.dm | 34 +- code/modules/power/singularity/narsie.dm | 10 +- code/modules/power/smes.dm | 2 +- .../reagents/chemistry/reagents/food.dm | 4 +- .../reagents/chemistry/reagents/water.dm | 4 +- code/modules/response_team/ert.dm | 10 +- .../security_levels/keycard authentication.dm | 2 +- code/modules/station_goals/dna_vault.dm | 6 +- code/modules/station_goals/shield.dm | 2 +- code/modules/station_goals/station_goal.dm | 2 +- code/modules/surgery/other.dm | 2 +- paradise.dme | 3 +- 145 files changed, 896 insertions(+), 925 deletions(-) delete mode 100644 code/controllers/Processes/ticker.dm rename code/{game/gamemodes/gameticker.dm => controllers/subsystem/ticker.dm} (87%) diff --git a/code/__DEFINES/gamemode.dm b/code/__DEFINES/gamemode.dm index a1e469e3c94..a3efbab50d9 100644 --- a/code/__DEFINES/gamemode.dm +++ b/code/__DEFINES/gamemode.dm @@ -8,12 +8,12 @@ #define TARGET_INVALID_EVENT 7 //gamemode istype helpers -#define GAMEMODE_IS_BLOB (ticker && istype(ticker.mode, /datum/game_mode/blob)) -#define GAMEMODE_IS_CULT (ticker && istype(ticker.mode, /datum/game_mode/cult)) -#define GAMEMODE_IS_HEIST (ticker && istype(ticker.mode, /datum/game_mode/heist)) -#define GAMEMODE_IS_NUCLEAR (ticker && istype(ticker.mode, /datum/game_mode/nuclear)) -#define GAMEMODE_IS_REVOLUTION (ticker && istype(ticker.mode, /datum/game_mode/revolution)) -#define GAMEMODE_IS_WIZARD (ticker && istype(ticker.mode, /datum/game_mode/wizard)) +#define GAMEMODE_IS_BLOB (SSticker && istype(SSticker.mode, /datum/game_mode/blob)) +#define GAMEMODE_IS_CULT (SSticker && istype(SSticker.mode, /datum/game_mode/cult)) +#define GAMEMODE_IS_HEIST (SSticker && istype(SSticker.mode, /datum/game_mode/heist)) +#define GAMEMODE_IS_NUCLEAR (SSticker && istype(SSticker.mode, /datum/game_mode/nuclear)) +#define GAMEMODE_IS_REVOLUTION (SSticker && istype(SSticker.mode, /datum/game_mode/revolution)) +#define GAMEMODE_IS_WIZARD (SSticker && istype(SSticker.mode, /datum/game_mode/wizard)) //special roles // Distinct from the ROLE_X defines because some antags have multiple special roles but only one ban type diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index dff9426c641..0bf7e3bcafe 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -303,7 +303,7 @@ #define TRIGGER_GUARD_NORMAL 1 // Macro to get the current elapsed round time, rather than total world runtime -#define ROUND_TIME (round_start_time ? (world.time - round_start_time) : 0) +#define ROUND_TIME (SSticker.round_start_time ? (world.time - SSticker.round_start_time) : 0) // Macro that returns true if it's too early in a round to freely ghost out #define TOO_EARLY_TO_GHOST (config && (ROUND_TIME < (config.round_abandon_penalty_period))) diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index e7f5262db1f..65fc87c3b34 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -150,7 +150,7 @@ // A logging proc that only outputs after setup is done, to // help devs test initialization stuff that happens a lot /proc/log_after_setup(var/message) - if(ticker && ticker.current_state > GAME_STATE_SETTING_UP) + if(SSticker && SSticker.current_state > GAME_STATE_SETTING_UP) to_chat(world, "[message]") log_world(message) diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm index 54fd47a220d..d13bf08c58b 100644 --- a/code/__HELPERS/time.dm +++ b/code/__HELPERS/time.dm @@ -35,7 +35,7 @@ * If you want to display the canonical station "time" (aka the in-character time of the station) use station_time_timestamp */ /proc/classic_worldtime2text(time = world.time) - time = (round_start_time ? (time - round_start_time) : (time - world.time)) + time = (SSticker.round_start_time ? (time - SSticker.round_start_time) : (time - world.time)) return "[round(time / 36000)+12]:[(time / 600 % 60) < 10 ? add_zero(time / 600 % 60, 1) : time / 600 % 60]" //Returns the world time in english @@ -59,7 +59,7 @@ - You can use this, for example, to do "This will expire at [station_time_at(world.time + 500)]" to display a "station time" expiration date which is much more useful for a player)*/ /proc/station_time(time=world.time, display_only=FALSE) - return ((((time - round_start_time)) + GLOB.gametime_offset) % 864000) - (display_only ? GLOB.timezoneOffset : 0) + return ((((time - SSticker.round_start_time)) + GLOB.gametime_offset) % 864000) - (display_only ? GLOB.timezoneOffset : 0) /proc/station_time_timestamp(format = "hh:mm:ss", time=world.time) return time2text(station_time(time, TRUE), format) diff --git a/code/controllers/Processes/ticker.dm b/code/controllers/Processes/ticker.dm deleted file mode 100644 index 578c2725710..00000000000 --- a/code/controllers/Processes/ticker.dm +++ /dev/null @@ -1,36 +0,0 @@ -var/global/datum/controller/process/ticker/tickerProcess - -/datum/controller/process/ticker - var/lastTickerTimeDuration - var/lastTickerTime - -/datum/controller/process/ticker/setup() - name = "ticker" - schedule_interval = 20 // every 2 seconds - - lastTickerTime = world.timeofday - log_startup_progress("Time ticker starting up.") - - if(!ticker) - ticker = new - - spawn(0) - if(ticker) - ticker.pregame() - -DECLARE_GLOBAL_CONTROLLER(ticker, tickerProcess) - -/datum/controller/process/ticker/doWork() - var/currentTime = world.timeofday - - if(currentTime < lastTickerTime) // check for midnight rollover - lastTickerTimeDuration = (currentTime - (lastTickerTime - TICKS_IN_DAY)) / TICKS_IN_SECOND - else - lastTickerTimeDuration = (currentTime - lastTickerTime) / TICKS_IN_SECOND - - lastTickerTime = currentTime - - ticker.process_decrepit() - -/datum/controller/process/ticker/proc/getLastTickerTimeDuration() - return lastTickerTimeDuration diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 12b5b0fd1a5..bd76d0575cb 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -787,7 +787,7 @@ config.sql_enabled = 0 log_config("WARNING: DB_CONFIG DEFINITION MISMATCH!") spawn(60) - if(ticker.current_state == GAME_STATE_PREGAME) + if(SSticker.current_state == GAME_STATE_PREGAME) going = 0 spawn(600) to_chat(world, "DB_CONFIG MISMATCH, ROUND START DELAYED.
Please check database version for recent upstream changes!
") diff --git a/code/controllers/master.dm b/code/controllers/master.dm index a9c7e0dbb7b..fa2465854f3 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -194,8 +194,8 @@ GLOBAL_REAL(Master, /datum/controller/master) = new to_chat(world, "[msg]") log_world(msg) - if(config.developer_express_start & ticker.current_state == GAME_STATE_PREGAME) - ticker.current_state = GAME_STATE_SETTING_UP + if(config.developer_express_start & SSticker.current_state == GAME_STATE_PREGAME) + SSticker.current_state = GAME_STATE_SETTING_UP if(!current_runlevel) SetRunLevel(1) diff --git a/code/controllers/subsystem/jobs.dm b/code/controllers/subsystem/jobs.dm index 02f2681b22d..48fdf269b89 100644 --- a/code/controllers/subsystem/jobs.dm +++ b/code/controllers/subsystem/jobs.dm @@ -270,9 +270,9 @@ SUBSYSTEM_DEF(jobs) SetupOccupations() //Holder for Triumvirate is stored in the ticker, this just processes it - if(ticker) + if(SSticker) for(var/datum/job/ai/A in occupations) - if(ticker.triai) + if(SSticker.triai) A.spawn_positions = 3 //Get the players who are ready diff --git a/code/controllers/subsystem/nightshift.dm b/code/controllers/subsystem/nightshift.dm index 358076c5652..4ebe1dceb0e 100644 --- a/code/controllers/subsystem/nightshift.dm +++ b/code/controllers/subsystem/nightshift.dm @@ -20,7 +20,7 @@ SUBSYSTEM_DEF(nightshift) return ..() /datum/controller/subsystem/nightshift/fire(resumed = FALSE) - if(world.time - round_start_time < nightshift_first_check) + if(world.time - SSticker.round_start_time < nightshift_first_check) return check_nightshift() diff --git a/code/controllers/subsystem/shuttles.dm b/code/controllers/subsystem/shuttles.dm index 30021df4fb1..a1ca9b5fdad 100644 --- a/code/controllers/subsystem/shuttles.dm +++ b/code/controllers/subsystem/shuttles.dm @@ -106,8 +106,8 @@ SUBSYSTEM_DEF(shuttle) return emergency = backup_shuttle - if(world.time - round_start_time < config.shuttle_refuel_delay) - to_chat(user, "The emergency shuttle is refueling. Please wait another [abs(round(((world.time - round_start_time) - config.shuttle_refuel_delay)/600))] minutes before trying again.") + if(world.time - SSticker.round_start_time < config.shuttle_refuel_delay) + to_chat(user, "The emergency shuttle is refueling. Please wait another [abs(round(((world.time - SSticker.round_start_time) - config.shuttle_refuel_delay)/600))] minutes before trying again.") return switch(emergency.mode) @@ -169,7 +169,7 @@ SUBSYSTEM_DEF(shuttle) return if(!emergency.canRecall) return - if(ticker.mode.name == "meteor") + if(SSticker.mode.name == "meteor") return if(seclevel2num(get_security_level()) >= SEC_LEVEL_RED) if(emergency.timeLeft(1) < emergencyCallTime * 0.25) diff --git a/code/game/gamemodes/gameticker.dm b/code/controllers/subsystem/ticker.dm similarity index 87% rename from code/game/gamemodes/gameticker.dm rename to code/controllers/subsystem/ticker.dm index 972075ceece..0e67479b531 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -1,55 +1,64 @@ -var/global/datum/controller/gameticker/ticker -var/round_start_time = 0 +SUBSYSTEM_DEF(ticker) + name = "Ticker" + init_order = INIT_ORDER_TICKER -/datum/controller/gameticker + priority = FIRE_PRIORITY_TICKER + flags = SS_KEEP_TIMING + runlevels = RUNLEVEL_LOBBY | RUNLEVEL_SETUP | RUNLEVEL_GAME + // Time ticker related vars + var/lastTickerTimeDuration + var/lastTickerTime + // Game ticker related vars + var/round_start_time = 0 var/const/restart_timeout = 600 var/current_state = GAME_STATE_PREGAME var/force_ending = 0 - var/hide_mode = 0 // leave here at 0 ! setup() will take care of it when needed for Secret mode -walter0o var/datum/game_mode/mode = null var/event_time = null var/event = 0 - var/login_music // music played in pregame lobby - var/list/datum/mind/minds = list()//The people in the game. Used for objective tracking. - var/Bible_icon_state // icon_state the chaplain has chosen for his bible var/Bible_item_state // item_state the chaplain has chosen for his bible var/Bible_name // name of the bible var/Bible_deity_name - var/datum/cult_info/cultdat = null //here instead of cult for adminbus purposes - var/random_players = 0 // if set to nonzero, ALL players who latejoin or declare-ready join will have random appearances/genders - var/list/syndicate_coalition = list() // list of traitor-compatible factions var/list/factions = list() // list of all factions var/list/availablefactions = list() // list of factions with openings - var/tipped = FALSE //Did we broadcast the tip of the day yet? var/selected_tip // What will be the tip of the day? - - var/pregame_timeleft = 0 + var/pregame_timeleft = "Initializing" var/delay_end = 0 //if set to nonzero, the round will not restart on it's own - var/triai = 0//Global holder for Triumvirate var/initialtpass = 0 //holder for inital autotransfer vote timer - var/obj/screen/cinematic = null //used for station explosion cinematic - var/round_end_announced = 0 // Spam Prevention. Announce round end only once.\ - -/datum/controller/gameticker/proc/pregame() +/datum/controller/subsystem/ticker/Initialize() + lastTickerTime = world.timeofday login_music = pick(\ 'sound/music/thunderdome.ogg',\ 'sound/music/space.ogg',\ 'sound/music/title1.ogg',\ 'sound/music/title2.ogg',\ 'sound/music/title3.ogg',) - do + ..() + + +/datum/controller/subsystem/ticker/fire() + // This code is EXTREMELY important shit for checking midnight time rollover. Dont fuck with it + var/currentTime = world.timeofday + if(currentTime < lastTickerTime) + lastTickerTimeDuration = (currentTime - (lastTickerTime - TICKS_IN_DAY)) / TICKS_IN_SECOND + else + lastTickerTimeDuration = (currentTime - lastTickerTime) / TICKS_IN_SECOND + lastTickerTime = currentTime + + // Startup loop + if(current_state == GAME_STATE_PREGAME) pregame_timeleft = config.pregame_timestart to_chat(world, "Welcome to the pre-game lobby!") to_chat(world, "Please, setup your character and select ready. Game will start in [pregame_timeleft] seconds") @@ -63,11 +72,43 @@ var/round_start_time = 0 tipped = TRUE if(pregame_timeleft <= 0) - current_state = GAME_STATE_SETTING_UP - Master.SetRunLevel(RUNLEVEL_SETUP) - while(!setup()) + if(setup()) // Try to start the round + current_state = GAME_STATE_SETTING_UP + Master.SetRunLevel(RUNLEVEL_SETUP) + else // It didnt work, lets loop again + break + + // This makes sure the game keeps going + if(current_state != GAME_STATE_PLAYING) + return 0 -/datum/controller/gameticker/proc/votetimer() + mode.process() + mode.process_job_tasks() + var/game_finished = SSshuttle.emergency.mode >= SHUTTLE_ENDGAME || mode.station_was_nuked + if(config.continuous_rounds) + mode.check_finished() // some modes contain var-changing code in here, so call even if we don't uses result + else + game_finished |= mode.check_finished() + + if((!mode.explosion_in_progress && game_finished) || force_ending) + current_state = GAME_STATE_FINISHED + Master.SetRunLevel(RUNLEVEL_POSTGAME) + auto_toggle_ooc(1) // Turn it on + spawn + declare_completion() + + spawn(50) + callHook("roundend") + + if(mode.station_was_nuked) + world.Reboot("Station destroyed by Nuclear Device.", "end_proper", "nuke") + else + world.Reboot("Round ended.", "end_proper", "proper completion") + + return 1 + + +/datum/controller/subsystem/ticker/proc/votetimer() var/timerbuffer = 0 if(initialtpass == 0) timerbuffer = config.vote_autotransfer_initial @@ -78,7 +119,8 @@ var/round_start_time = 0 initialtpass = 1 votetimer() -/datum/controller/gameticker/proc/setup() + +/datum/controller/subsystem/ticker/proc/setup() cultdat = setupcult() //Create and announce mode if(master_mode=="secret") @@ -252,9 +294,7 @@ var/round_start_time = 0 return 1 - //Plus it provides an easy way to make cinematics for other events. Just use this as a template :) -//Plus it provides an easy way to make cinematics for other events. Just use this as a template -/datum/controller/gameticker/proc/station_explosion_cinematic(station_missed = 0, override = null) +/datum/controller/subsystem/ticker/proc/station_explosion_cinematic(station_missed = 0, override = null) if(cinematic) return //already a cinematic in progress! @@ -350,7 +390,7 @@ var/round_start_time = 0 -/datum/controller/gameticker/proc/create_characters() +/datum/controller/subsystem/ticker/proc/create_characters() for(var/mob/new_player/player in GLOB.player_list) if(player.ready && player.mind) if(player.mind.assigned_role == "AI") @@ -364,13 +404,13 @@ var/round_start_time = 0 qdel(player) -/datum/controller/gameticker/proc/collect_minds() +/datum/controller/subsystem/ticker/proc/collect_minds() for(var/mob/living/player in GLOB.player_list) if(player.mind) - ticker.minds += player.mind + SSticker.minds += player.mind -/datum/controller/gameticker/proc/equip_characters() +/datum/controller/subsystem/ticker/proc/equip_characters() var/captainless=1 for(var/mob/living/carbon/human/player in GLOB.player_list) if(player && player.mind && player.mind.assigned_role) @@ -385,7 +425,7 @@ var/round_start_time = 0 if(!istype(M,/mob/new_player)) to_chat(M, "Captainship not forced on anyone.") -/datum/controller/gameticker/proc/send_tip_of_the_round() +/datum/controller/subsystem/ticker/proc/send_tip_of_the_round() var/m if(selected_tip) m = selected_tip @@ -400,45 +440,13 @@ var/round_start_time = 0 if(m) to_chat(world, "Tip of the round: [html_encode(m)]") -/datum/controller/gameticker/proc/process_decrepit() - if(current_state != GAME_STATE_PLAYING) - return 0 - - mode.process() - mode.process_job_tasks() - - //emergency_shuttle.process() DONE THROUGH PROCESS SCHEDULER - - var/game_finished = SSshuttle.emergency.mode >= SHUTTLE_ENDGAME || mode.station_was_nuked - if(config.continuous_rounds) - mode.check_finished() // some modes contain var-changing code in here, so call even if we don't uses result - else - game_finished |= mode.check_finished() - - if((!mode.explosion_in_progress && game_finished) || force_ending) - current_state = GAME_STATE_FINISHED - Master.SetRunLevel(RUNLEVEL_POSTGAME) - auto_toggle_ooc(1) // Turn it on - spawn - declare_completion() - - spawn(50) - callHook("roundend") - - if(mode.station_was_nuked) - world.Reboot("Station destroyed by Nuclear Device.", "end_proper", "nuke") - else - world.Reboot("Round ended.", "end_proper", "proper completion") - - return 1 - -/datum/controller/gameticker/proc/getfactionbyname(var/name) +/datum/controller/subsystem/ticker/proc/getfactionbyname(var/name) for(var/datum/faction/F in factions) if(F.name == name) return F -/datum/controller/gameticker/proc/declare_completion() +/datum/controller/subsystem/ticker/proc/declare_completion() nologevent = 1 //end of round murder and shenanigans are legal; there's no need to jam up attack logs past this point. //Round statistics report var/datum/station_state/end_state = new /datum/station_state() @@ -483,9 +491,9 @@ var/round_start_time = 0 if(dronecount) to_chat(world, "There [dronecount>1 ? "were" : "was"] [dronecount] industrious maintenance [dronecount>1 ? "drones" : "drone"] this round.") - if(ticker.mode.eventmiscs.len) + if(mode.eventmiscs.len) var/emobtext = "" - for(var/datum/mind/eventmind in ticker.mode.eventmiscs) + for(var/datum/mind/eventmind in mode.eventmiscs) emobtext += printeventplayer(eventmind) emobtext += "
" emobtext += printobjectives(eventmind) @@ -516,5 +524,6 @@ var/round_start_time = 0 return 1 -/datum/controller/gameticker/proc/HasRoundStarted() +/datum/controller/subsystem/ticker/proc/HasRoundStarted() return current_state >= GAME_STATE_PLAYING + diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index 4b267fe757f..27d499254a1 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -19,7 +19,7 @@ SUBSYSTEM_DEF(vote) /datum/controller/subsystem/vote/fire() if(mode) // No more change mode votes after the game has started. - if(mode == "gamemode" && ticker.current_state >= GAME_STATE_SETTING_UP) + if(mode == "gamemode" && SSticker.current_state >= GAME_STATE_SETTING_UP) to_chat(world, "Voting aborted due to game start.") reset() return @@ -125,7 +125,7 @@ SUBSYSTEM_DEF(vote) var/text if(winners.len > 0) if(winners.len > 1) - if(mode != "gamemode" || ticker.hide_mode == 0) // Here we are making sure we don't announce potential game modes + if(mode != "gamemode" || SSticker.hide_mode == 0) // Here we are making sure we don't announce potential game modes text = "Vote Tied Between:\n" for(var/option in winners) text += "\t[option]\n" @@ -134,7 +134,7 @@ SUBSYSTEM_DEF(vote) for(var/key in current_votes) if(choices[current_votes[key]] == .) round_voters += key // Keep track of who voted for the winning round. - if(mode == "gamemode" && (. == "extended" || ticker.hide_mode == 0)) // Announce Extended gamemode, but not other gamemodes + if(mode == "gamemode" && (. == "extended" || SSticker.hide_mode == 0)) // Announce Extended gamemode, but not other gamemodes text += "Vote Result: [.] ([choices[.]] vote\s)" else if(mode == "custom") @@ -166,7 +166,7 @@ SUBSYSTEM_DEF(vote) if("gamemode") if(master_mode != .) world.save_mode(.) - if(ticker && ticker.mode) + if(SSticker && SSticker.mode) restart = 1 else master_mode = . @@ -208,17 +208,17 @@ SUBSYSTEM_DEF(vote) if("restart") choices.Add("Restart Round","Continue Playing") if("gamemode") - if(ticker.current_state >= 2) + if(SSticker.current_state >= 2) return 0 choices.Add(config.votable_modes) if("crew_transfer") if(check_rights(R_ADMIN|R_MOD)) - if(ticker.current_state <= 2) + if(SSticker.current_state <= 2) return 0 question = "End the shift?" choices.Add("Initiate Crew Transfer", "Continue The Round") else - if(ticker.current_state <= 2) + if(SSticker.current_state <= 2) return 0 question = "End the shift?" choices.Add("Initiate Crew Transfer", "Continue The Round") diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index eeef65bd2e2..5f009f2d6e4 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -36,7 +36,7 @@ debug_variables(Master) feedback_add_details("admin_verb","Dsmc") if("Ticker") - debug_variables(ticker) + debug_variables(SSticker) feedback_add_details("admin_verb","DTicker") if("Air") debug_variables(SSair) diff --git a/code/datums/cache/air_alarm.dm b/code/datums/cache/air_alarm.dm index a4b3ee21c56..a4d012df464 100644 --- a/code/datums/cache/air_alarm.dm +++ b/code/datums/cache/air_alarm.dm @@ -11,7 +11,7 @@ var/global/datum/repository/air_alarm/air_alarm_repository = new() if(!refresh) return cache_entry.data - if(ticker && ticker.current_state < GAME_STATE_PLAYING && istype(passed_alarm)) // Generating the list for the first time as the game hasn't started - no need to run through the machines list everything every time + if(SSticker && SSticker.current_state < GAME_STATE_PLAYING && istype(passed_alarm)) // Generating the list for the first time as the game hasn't started - no need to run through the machines list everything every time alarms = cache_entry.data // Don't deleate the list if(is_station_contact(passed_alarm.z)) // Still need sanity checks alarms[++alarms.len] = passed_alarm.get_nano_data_console() diff --git a/code/datums/hud.dm b/code/datums/hud.dm index 2dd2d72a816..e5948a47e30 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -93,8 +93,8 @@ var/datum/atom_hud/huds = list( \ // gang_huds += G.ganghud var/serv_huds = list()//mindslaves and/or vampire thralls - if(ticker.mode) - for(var/datum/mindslaves/serv in (ticker.mode.vampires | ticker.mode.traitors)) + if(SSticker.mode) + for(var/datum/mindslaves/serv in (SSticker.mode.vampires | SSticker.mode.traitors)) serv_huds += serv.thrallhud diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 65b3940cde2..c20ded784a1 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -84,7 +84,7 @@ soulOwner = src /datum/mind/Destroy() - ticker.minds -= src + SSticker.minds -= src if(islist(antag_datums)) for(var/i in antag_datums) var/datum/antagonist/antag_datum = i @@ -163,7 +163,7 @@ /datum/mind/proc/_memory_edit_header(gamemode, list/alt) . = gamemode - if(ticker.mode.config_tag == gamemode || (LAZYLEN(alt) && (ticker.mode.config_tag in alt))) + if(SSticker.mode.config_tag == gamemode || (LAZYLEN(alt) && (SSticker.mode.config_tag in alt))) . = uppertext(.) . = "[.]: " @@ -183,7 +183,7 @@ . = _memory_edit_header("revolution") if(ismindshielded(H)) . += "NO|headrev|rev" - else if(src in ticker.mode.head_revolutionaries) + else if(src in SSticker.mode.head_revolutionaries) . += "
no|HEADREV|rev" . += "
Flash: give" @@ -200,7 +200,7 @@ . += " Reequip (gives traitor uplink)." if(objectives.len==0) . += "
Objectives are empty! Set to kill all heads." - else if(src in ticker.mode.revolutionaries) + else if(src in SSticker.mode.revolutionaries) . += "no|headrev|REV" else . += "NO|headrev|rev" @@ -211,7 +211,7 @@ . = _memory_edit_header("cult") if(ismindshielded(H)) . += "NO|cultist" - else if(src in ticker.mode.cult) + else if(src in SSticker.mode.cult) . += "no|CULTIST" . += "
Give tome|equip." else @@ -221,7 +221,7 @@ /datum/mind/proc/memory_edit_wizard(mob/living/carbon/human/H) . = _memory_edit_header("wizard") - if(src in ticker.mode.wizards) + if(src in SSticker.mode.wizards) . += "WIZARD|no" . += "
To lair, undress, dress up, let choose name." if(objectives.len==0) @@ -233,7 +233,7 @@ /datum/mind/proc/memory_edit_changeling(mob/living/carbon/human/H) . = _memory_edit_header("changeling", list("traitorchan")) - if(src in ticker.mode.changelings) + if(src in SSticker.mode.changelings) . += "CHANGELING|no" if(objectives.len==0) . += "
Objectives are empty! Randomize!" @@ -246,7 +246,7 @@ /datum/mind/proc/memory_edit_vampire(mob/living/carbon/human/H) . = _memory_edit_header("vampire", list("traitorvamp")) - if(src in ticker.mode.vampires) + if(src in SSticker.mode.vampires) . += "VAMPIRE|no" if(objectives.len==0) . += "
Objectives are empty! Randomize!" @@ -256,14 +256,14 @@ . += _memory_edit_role_enabled(ROLE_VAMPIRE) /** Enthralled ***/ . += "
enthralled: " - if(src in ticker.mode.vampire_enthralled) + if(src in SSticker.mode.vampire_enthralled) . += "THRALL|no" else . += "thrall|NO" /datum/mind/proc/memory_edit_nuclear(mob/living/carbon/human/H) . = _memory_edit_header("nuclear") - if(src in ticker.mode.syndicates) + if(src in SSticker.mode.syndicates) . += "OPERATIVE|no" . += "
To shuttle, undress, dress up." var/code @@ -280,9 +280,9 @@ /datum/mind/proc/memory_edit_shadowling(mob/living/carbon/human/H) . = _memory_edit_header("shadowling") - if(src in ticker.mode.shadows) + if(src in SSticker.mode.shadows) . += "SHADOWLING|thrall|no" - else if(src in ticker.mode.shadowling_thralls) + else if(src in SSticker.mode.shadowling_thralls) . += "Shadowling|THRALL|no" else . += "shadowling|thrall|NO" @@ -291,7 +291,7 @@ /datum/mind/proc/memory_edit_abductor(mob/living/carbon/human/H) . = _memory_edit_header("abductor") - if(src in ticker.mode.abductors) + if(src in SSticker.mode.abductors) . += "ABDUCTOR|no" . += "|undress|equip" else @@ -301,14 +301,14 @@ /datum/mind/proc/memory_edit_devil(mob/living/H) . = _memory_edit_header("devil", list("devilagents")) - if(src in ticker.mode.devils) + if(src in SSticker.mode.devils) if(!devilinfo) . += "No devilinfo found! Yell at a coder!" else if(!devilinfo.ascendable) . += "DEVIL|Ascendable Devil|sintouched|no" else . += "DEVIL|ASCENDABLE DEVIL|sintouched|no" - else if(src in ticker.mode.sintouched) + else if(src in SSticker.mode.sintouched) . += "devil|Ascendable Devil|SINTOUCHED|no" else . += "devil|Ascendable Devil|sintouched|NO" @@ -317,14 +317,14 @@ /datum/mind/proc/memory_edit_eventmisc(mob/living/H) . = _memory_edit_header("event", list()) - if(src in ticker.mode.eventmiscs) + if(src in SSticker.mode.eventmiscs) . += "YES|no" else . += "Event Role|NO" /datum/mind/proc/memory_edit_traitor() . = _memory_edit_header("traitor", list("traitorchan", "traitorvamp")) - if(src in ticker.mode.traitors) + if(src in SSticker.mode.traitors) . += "TRAITOR|no" if(objectives.len==0) . += "
Objectives are empty! Randomize!" @@ -348,9 +348,9 @@ /datum/mind/proc/memory_edit_uplink() . = "" - if(ishuman(current) && ((src in ticker.mode.head_revolutionaries) || \ - (src in ticker.mode.traitors) || \ - (src in ticker.mode.syndicates))) + if(ishuman(current) && ((src in SSticker.mode.head_revolutionaries) || \ + (src in SSticker.mode.traitors) || \ + (src in SSticker.mode.syndicates))) . = "Uplink: give" var/obj/item/uplink/hidden/suplink = find_syndicate_uplink() var/crystals @@ -366,7 +366,7 @@ // ^ whoever left this comment is literally a grammar nazi. stalin better. in russia grammar correct you. /datum/mind/proc/edit_memory() - if(!ticker || !ticker.mode) + if(!SSticker || !SSticker.mode) alert("Not before round-start!", "Alert") return @@ -419,7 +419,7 @@ This prioritizes antags relevant to the current round to make them appear at the top of the panel. Traitorchan and traitorvamp are snowflaked in because they have multiple sections. */ - if(ticker.mode.config_tag == "traitorchan") + if(SSticker.mode.config_tag == "traitorchan") if(sections["traitor"]) out += sections["traitor"] + "
" if(sections["changeling"]) @@ -427,7 +427,7 @@ sections -= "traitor" sections -= "changeling" // Elif technically unnecessary but it makes the following else look better - else if(ticker.mode.config_tag == "traitorvamp") + else if(SSticker.mode.config_tag == "traitorvamp") if(sections["traitor"]) out += sections["traitor"] + "
" if(sections["vampire"]) @@ -435,9 +435,9 @@ sections -= "traitor" sections -= "vampire" else - if(sections[ticker.mode.config_tag]) - out += sections[ticker.mode.config_tag] + "
" - sections -= ticker.mode.config_tag + if(sections[SSticker.mode.config_tag]) + out += sections[SSticker.mode.config_tag] + "
" + sections -= SSticker.mode.config_tag for(var/i in sections) if(sections[i]) @@ -512,7 +512,7 @@ var/objective_type = "[objective_type_capital][objective_type_text]"//Add them together into a text string. var/list/possible_targets = list() - for(var/datum/mind/possible_target in ticker.minds) + for(var/datum/mind/possible_target in SSticker.minds) if((possible_target != src) && istype(possible_target.current, /mob/living/carbon/human)) possible_targets += possible_target.current @@ -612,7 +612,7 @@ if("identity theft") var/list/possible_targets = list() - for(var/datum/mind/possible_target in ticker.minds) + for(var/datum/mind/possible_target in SSticker.minds) if((possible_target != src) && ishuman(possible_target.current)) possible_targets += possible_target possible_targets = sortAtom(possible_targets) @@ -687,19 +687,19 @@ message_admins("[key_name_admin(usr)] has given [key_name_admin(current)] a mindshield implant") to_chat(H, "You somehow have become the recepient of a mindshield transplant, and it just activated!") - if(src in ticker.mode.revolutionaries) + if(src in SSticker.mode.revolutionaries) special_role = null - ticker.mode.revolutionaries -= src + SSticker.mode.revolutionaries -= src to_chat(src, "The nanobots in the mindshield implant remove all thoughts about being a revolutionary. Get back to work!") - if(src in ticker.mode.head_revolutionaries) + if(src in SSticker.mode.head_revolutionaries) special_role = null - ticker.mode.head_revolutionaries -=src + SSticker.mode.head_revolutionaries -=src to_chat(src, "The nanobots in the mindshield implant remove all thoughts about being a revolutionary. Get back to work!") - if(src in ticker.mode.cult) - ticker.mode.cult -= src - ticker.mode.update_cult_icons_removed(src) + if(src in SSticker.mode.cult) + SSticker.mode.cult -= src + SSticker.mode.update_cult_icons_removed(src) special_role = null - var/datum/game_mode/cult/cult = ticker.mode + var/datum/game_mode/cult/cult = SSticker.mode if(istype(cult)) cult.memorize_cult_objectives(src) to_chat(current, "The nanobots in the mindshield implant remove all thoughts about being in a cult. Have a productive day!") @@ -709,46 +709,46 @@ switch(href_list["revolution"]) if("clear") - if(src in ticker.mode.revolutionaries) - ticker.mode.revolutionaries -= src + if(src in SSticker.mode.revolutionaries) + SSticker.mode.revolutionaries -= src to_chat(current, "You have been brainwashed! You are no longer a revolutionary!") - ticker.mode.update_rev_icons_removed(src) + SSticker.mode.update_rev_icons_removed(src) special_role = null - if(src in ticker.mode.head_revolutionaries) - ticker.mode.head_revolutionaries -= src + if(src in SSticker.mode.head_revolutionaries) + SSticker.mode.head_revolutionaries -= src to_chat(current, "You have been brainwashed! You are no longer a head revolutionary!") - ticker.mode.update_rev_icons_removed(src) + SSticker.mode.update_rev_icons_removed(src) special_role = null log_admin("[key_name(usr)] has de-rev'd [key_name(current)]") message_admins("[key_name_admin(usr)] has de-rev'd [key_name_admin(current)]") if("rev") - if(src in ticker.mode.head_revolutionaries) - ticker.mode.head_revolutionaries -= src - ticker.mode.update_rev_icons_removed(src) + if(src in SSticker.mode.head_revolutionaries) + SSticker.mode.head_revolutionaries -= src + SSticker.mode.update_rev_icons_removed(src) to_chat(current, "Revolution has been disappointed of your leadership traits! You are a regular revolutionary now!") - else if(!(src in ticker.mode.revolutionaries)) + else if(!(src in SSticker.mode.revolutionaries)) to_chat(current, " You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!") else return - ticker.mode.revolutionaries += src - ticker.mode.update_rev_icons_added(src) + SSticker.mode.revolutionaries += src + SSticker.mode.update_rev_icons_added(src) special_role = SPECIAL_ROLE_REV log_admin("[key_name(usr)] has rev'd [key_name(current)]") message_admins("[key_name_admin(usr)] has rev'd [key_name_admin(current)]") if("headrev") - if(src in ticker.mode.revolutionaries) - ticker.mode.revolutionaries -= src - ticker.mode.update_rev_icons_removed(src) + if(src in SSticker.mode.revolutionaries) + SSticker.mode.revolutionaries -= src + SSticker.mode.update_rev_icons_removed(src) to_chat(current, "You have proven your devotion to revolution! You are a head revolutionary now!") - else if(!(src in ticker.mode.head_revolutionaries)) + else if(!(src in SSticker.mode.head_revolutionaries)) to_chat(current, "You are a member of the revolutionaries' leadership now!") else return - if(ticker.mode.head_revolutionaries.len>0) + if(SSticker.mode.head_revolutionaries.len>0) // copy targets - var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries + var/datum/mind/valid_head = locate() in SSticker.mode.head_revolutionaries if(valid_head) for(var/datum/objective/mutiny/O in valid_head.objectives) var/datum/objective/mutiny/rev_obj = new @@ -756,21 +756,21 @@ rev_obj.target = O.target rev_obj.explanation_text = "Assassinate [O.target.name], the [O.target.assigned_role]." objectives += rev_obj - ticker.mode.greet_revolutionary(src,0) - ticker.mode.head_revolutionaries += src - ticker.mode.update_rev_icons_added(src) + SSticker.mode.greet_revolutionary(src,0) + SSticker.mode.head_revolutionaries += src + SSticker.mode.update_rev_icons_added(src) special_role = SPECIAL_ROLE_HEAD_REV log_admin("[key_name(usr)] has head-rev'd [key_name(current)]") message_admins("[key_name_admin(usr)] has head-rev'd [key_name_admin(current)]") if("autoobjectives") - ticker.mode.forge_revolutionary_objectives(src) - ticker.mode.greet_revolutionary(src,0) + SSticker.mode.forge_revolutionary_objectives(src) + SSticker.mode.greet_revolutionary(src,0) log_admin("[key_name(usr)] has automatically forged revolutionary objectives for [key_name(current)]") message_admins("[key_name_admin(usr)] has automatically forged revolutionary objectives for [key_name_admin(current)]") if("flash") - if(!ticker.mode.equip_revolutionary(current)) + if(!SSticker.mode.equip_revolutionary(current)) to_chat(usr, "Spawning flash failed!") log_admin("[key_name(usr)] has given [key_name(current)] a flash") message_admins("[key_name_admin(usr)] has given [key_name_admin(current)] a flash") @@ -800,8 +800,8 @@ qdel(flash) take_uplink() var/fail = 0 - fail |= !ticker.mode.equip_traitor(current, 1) - fail |= !ticker.mode.equip_revolutionary(current) + fail |= !SSticker.mode.equip_traitor(current, 1) + fail |= !SSticker.mode.equip_revolutionary(current) if(fail) to_chat(usr, "Reequipping revolutionary goes wrong!") return @@ -811,17 +811,17 @@ else if(href_list["cult"]) switch(href_list["cult"]) if("clear") - if(src in ticker.mode.cult) - ticker.mode.remove_cultist(src) + if(src in SSticker.mode.cult) + SSticker.mode.remove_cultist(src) special_role = null log_admin("[key_name(usr)] has de-culted [key_name(current)]") message_admins("[key_name_admin(usr)] has de-culted [key_name_admin(current)]") if("cultist") - if(!(src in ticker.mode.cult)) - ticker.mode.add_cultist(src) + if(!(src in SSticker.mode.cult)) + SSticker.mode.add_cultist(src) special_role = SPECIAL_ROLE_CULTIST - to_chat(current, "You catch a glimpse of the Realm of [ticker.cultdat.entity_name], [ticker.cultdat.entity_title3]. You now see how flimsy the world is, you see that it should be open to the knowledge of [ticker.cultdat.entity_name].") - to_chat(current, "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve [ticker.cultdat.entity_title2] above all else. Bring It back.") + to_chat(current, "You catch a glimpse of the Realm of [SSticker.cultdat.entity_name], [SSticker.cultdat.entity_title3]. You now see how flimsy the world is, you see that it should be open to the knowledge of [SSticker.cultdat.entity_name].") + to_chat(current, "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve [SSticker.cultdat.entity_title2] above all else. Bring It back.") log_admin("[key_name(usr)] has culted [key_name(current)]") message_admins("[key_name_admin(usr)] has culted [key_name_admin(current)]") if("tome") @@ -846,7 +846,7 @@ message_admins("[key_name_admin(usr)] has spawned a tome for [key_name_admin(current)]") if("equip") - if(!ticker.mode.equip_cultist(current)) + if(!SSticker.mode.equip_cultist(current)) to_chat(usr, "Spawning equipment failed!") log_admin("[key_name(usr)] has equipped [key_name(current)] as a cultist") message_admins("[key_name_admin(usr)] has equipped [key_name_admin(current)] as a cultist") @@ -855,21 +855,21 @@ switch(href_list["wizard"]) if("clear") - if(src in ticker.mode.wizards) - ticker.mode.wizards -= src + if(src in SSticker.mode.wizards) + SSticker.mode.wizards -= src special_role = null current.spellremove(current) current.faction = list("Station") - ticker.mode.update_wiz_icons_removed(src) + SSticker.mode.update_wiz_icons_removed(src) to_chat(current, "You have been brainwashed! You are no longer a wizard!") log_admin("[key_name(usr)] has de-wizarded [key_name(current)]") message_admins("[key_name_admin(usr)] has de-wizarded [key_name_admin(current)]") if("wizard") - if(!(src in ticker.mode.wizards)) - ticker.mode.wizards += src + if(!(src in SSticker.mode.wizards)) + SSticker.mode.wizards += src special_role = SPECIAL_ROLE_WIZARD //ticker.mode.learn_basic_spells(current) - ticker.mode.update_wiz_icons_added(src) + SSticker.mode.update_wiz_icons_added(src) SEND_SOUND(current, 'sound/ambience/antag/ragesmages.ogg') to_chat(current, "You are a Space Wizard!") current.faction = list("wizard") @@ -880,15 +880,15 @@ log_admin("[key_name(usr)] has moved [key_name(current)] to the wizard's lair") message_admins("[key_name_admin(usr)] has moved [key_name_admin(current)] to the wizard's lair") if("dressup") - ticker.mode.equip_wizard(current) + SSticker.mode.equip_wizard(current) log_admin("[key_name(usr)] has equipped [key_name(current)] as a wizard") message_admins("[key_name_admin(usr)] has equipped [key_name_admin(current)] as a wizard") if("name") - ticker.mode.name_wizard(current) + SSticker.mode.name_wizard(current) log_admin("[key_name(usr)] has allowed wizard [key_name(current)] to name themselves") message_admins("[key_name_admin(usr)] has allowed wizard [key_name_admin(current)] to name themselves") if("autoobjectives") - ticker.mode.forge_wizard_objectives(src) + SSticker.mode.forge_wizard_objectives(src) to_chat(usr, "The objectives for wizard [key] have been generated. You can edit them and announce manually.") log_admin("[key_name(usr)] has automatically forged wizard objectives for [key_name(current)]") message_admins("[key_name_admin(usr)] has automatically forged wizard objectives for [key_name_admin(current)]") @@ -897,20 +897,20 @@ else if(href_list["changeling"]) switch(href_list["changeling"]) if("clear") - if(src in ticker.mode.changelings) - ticker.mode.changelings -= src + if(src in SSticker.mode.changelings) + SSticker.mode.changelings -= src special_role = null current.remove_changeling_powers() - ticker.mode.update_change_icons_removed(src) + SSticker.mode.update_change_icons_removed(src) if(changeling) qdel(changeling) to_chat(current, "You grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!") log_admin("[key_name(usr)] has de-changelinged [key_name(current)]") message_admins("[key_name_admin(usr)] has de-changelinged [key_name_admin(current)]") if("changeling") - if(!(src in ticker.mode.changelings)) - ticker.mode.changelings += src - ticker.mode.grant_changeling_powers(current) - ticker.mode.update_change_icons_added(src) + if(!(src in SSticker.mode.changelings)) + SSticker.mode.changelings += src + SSticker.mode.grant_changeling_powers(current) + SSticker.mode.update_change_icons_added(src) special_role = SPECIAL_ROLE_CHANGELING SEND_SOUND(current, 'sound/ambience/antag/ling_aler.ogg') to_chat(current, "Your powers have awoken. A flash of memory returns to us... we are a changeling!") @@ -918,7 +918,7 @@ message_admins("[key_name_admin(usr)] has changelinged [key_name_admin(current)]") if("autoobjectives") - ticker.mode.forge_changeling_objectives(src) + SSticker.mode.forge_changeling_objectives(src) to_chat(usr, "The objectives for changeling [key] have been generated. You can edit them and announce manually.") log_admin("[key_name(usr)] has automatically forged objectives for [key_name(current)]") message_admins("[key_name_admin(usr)] has automatically forged objectives for [key_name_admin(current)]") @@ -937,22 +937,22 @@ else if(href_list["vampire"]) switch(href_list["vampire"]) if("clear") - if(src in ticker.mode.vampires) - ticker.mode.vampires -= src + if(src in SSticker.mode.vampires) + SSticker.mode.vampires -= src special_role = null if(vampire) vampire.remove_vampire_powers() qdel(vampire) vampire = null - ticker.mode.update_vampire_icons_removed(src) + SSticker.mode.update_vampire_icons_removed(src) to_chat(current, "You grow weak and lose your powers! You are no longer a vampire and are stuck in your current form!") log_admin("[key_name(usr)] has de-vampired [key_name(current)]") message_admins("[key_name_admin(usr)] has de-vampired [key_name_admin(current)]") if("vampire") - if(!(src in ticker.mode.vampires)) - ticker.mode.vampires += src - ticker.mode.grant_vampire_powers(current) - ticker.mode.update_vampire_icons_added(src) + if(!(src in SSticker.mode.vampires)) + SSticker.mode.vampires += src + SSticker.mode.grant_vampire_powers(current) + SSticker.mode.update_vampire_icons_added(src) var/datum/mindslaves/slaved = new() slaved.masters += src som = slaved //we MIGT want to mindslave someone @@ -963,7 +963,7 @@ message_admins("[key_name_admin(usr)] has vampired [key_name_admin(current)]") if("autoobjectives") - ticker.mode.forge_vampire_objectives(src) + SSticker.mode.forge_vampire_objectives(src) to_chat(usr, "The objectives for vampire [key] have been generated. You can edit them and announce manually.") log_admin("[key_name(usr)] has automatically forged objectives for [key_name(current)]") message_admins("[key_name_admin(usr)] has automatically forged objectives for [key_name_admin(current)]") @@ -971,8 +971,8 @@ else if(href_list["vampthrall"]) switch(href_list["vampthrall"]) if("clear") - if(src in ticker.mode.vampire_enthralled) - ticker.mode.remove_vampire_mind(src) + if(src in SSticker.mode.vampire_enthralled) + SSticker.mode.remove_vampire_mind(src) log_admin("[key_name(usr)] has de-vampthralled [key_name(current)]") message_admins("[key_name_admin(usr)] has de-vampthralled [key_name_admin(current)]") @@ -981,9 +981,9 @@ switch(href_list["nuclear"]) if("clear") - if(src in ticker.mode.syndicates) - ticker.mode.syndicates -= src - ticker.mode.update_synd_icons_removed(src) + if(src in SSticker.mode.syndicates) + SSticker.mode.syndicates -= src + SSticker.mode.update_synd_icons_removed(src) special_role = null for(var/datum/objective/nuclear/O in objectives) objectives-=O @@ -992,17 +992,17 @@ log_admin("[key_name(usr)] has de-nuke op'd [key_name(current)]") message_admins("[key_name_admin(usr)] has de-nuke op'd [key_name_admin(current)]") if("nuclear") - if(!(src in ticker.mode.syndicates)) - ticker.mode.syndicates += src - ticker.mode.update_synd_icons_added(src) - if(ticker.mode.syndicates.len==1) - ticker.mode.prepare_syndicate_leader(src) + if(!(src in SSticker.mode.syndicates)) + SSticker.mode.syndicates += src + SSticker.mode.update_synd_icons_added(src) + if(SSticker.mode.syndicates.len==1) + SSticker.mode.prepare_syndicate_leader(src) else - current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]" + current.real_name = "[syndicate_name()] Operative #[SSticker.mode.syndicates.len-1]" special_role = SPECIAL_ROLE_NUKEOPS to_chat(current, "You are a [syndicate_name()] agent!") - ticker.mode.forge_syndicate_objectives(src) - ticker.mode.greet_syndicate(src) + SSticker.mode.forge_syndicate_objectives(src) + SSticker.mode.greet_syndicate(src) log_admin("[key_name(usr)] has nuke op'd [key_name(current)]") message_admins("[key_name_admin(usr)] has nuke op'd [key_name_admin(current)]") if("lair") @@ -1022,10 +1022,10 @@ qdel(H.wear_suit) qdel(H.w_uniform) - if(!ticker.mode.equip_syndicate(current)) + if(!SSticker.mode.equip_syndicate(current)) to_chat(usr, "Equipping a syndicate failed!") return - ticker.mode.update_syndicate_id(current.mind, ticker.mode.syndicates.len == 1) + SSticker.mode.update_syndicate_id(current.mind, SSticker.mode.syndicates.len == 1) log_admin("[key_name(usr)] has equipped [key_name(current)] as a nuclear operative") message_admins("[key_name_admin(usr)] has equipped [key_name_admin(current)] as a nuclear operative") @@ -1046,27 +1046,27 @@ else if(href_list["eventmisc"]) switch(href_list["eventmisc"]) if("clear") - if(src in ticker.mode.eventmiscs) - ticker.mode.eventmiscs -= src - ticker.mode.update_eventmisc_icons_removed(src) + if(src in SSticker.mode.eventmiscs) + SSticker.mode.eventmiscs -= src + SSticker.mode.update_eventmisc_icons_removed(src) special_role = null message_admins("[key_name_admin(usr)] has de-eventantag'ed [current].") log_admin("[key_name(usr)] has de-eventantag'ed [current].") if("eventmisc") - ticker.mode.eventmiscs += src + SSticker.mode.eventmiscs += src special_role = SPECIAL_ROLE_EVENTMISC - ticker.mode.update_eventmisc_icons_added(src) + SSticker.mode.update_eventmisc_icons_added(src) message_admins("[key_name_admin(usr)] has eventantag'ed [current].") log_admin("[key_name(usr)] has eventantag'ed [current].") else if(href_list["devil"]) switch(href_list["devil"]) if("clear") - if(src in ticker.mode.devils) + if(src in SSticker.mode.devils) if(istype(current,/mob/living/carbon/true_devil/)) to_chat(usr,"This cannot be used on true or arch-devils.") else - ticker.mode.devils -= src - ticker.mode.update_devil_icons_removed(src) + SSticker.mode.devils -= src + SSticker.mode.update_devil_icons_removed(src) special_role = null to_chat(current,"Your infernal link has been severed! You are no longer a devil!") RemoveSpell(/obj/effect/proc_holder/spell/targeted/infernal_jaunt) @@ -1085,8 +1085,8 @@ S.laws.clear_sixsixsix_laws() devilinfo = null log_admin("[key_name(usr)] has de-devil'ed [current].") - else if(src in ticker.mode.sintouched) - ticker.mode.sintouched -= src + else if(src in SSticker.mode.sintouched) + SSticker.mode.sintouched -= src message_admins("[key_name_admin(usr)] has de-sintouch'ed [current].") log_admin("[key_name(usr)] has de-sintouch'ed [current].") if("devil") @@ -1098,12 +1098,12 @@ if(!ishuman(current) && !isrobot(current)) to_chat(usr, "This only works on humans and cyborgs!") return - ticker.mode.devils += src + SSticker.mode.devils += src special_role = "devil" - ticker.mode.update_devil_icons_added(src) - ticker.mode.finalize_devil(src, FALSE) - ticker.mode.forge_devil_objectives(src, 2) - ticker.mode.greet_devil(src) + SSticker.mode.update_devil_icons_added(src) + SSticker.mode.finalize_devil(src, FALSE) + SSticker.mode.forge_devil_objectives(src, 2) + SSticker.mode.greet_devil(src) message_admins("[key_name_admin(usr)] has devil'ed [current].") log_admin("[key_name(usr)] has devil'ed [current].") if("ascendable_devil") @@ -1115,12 +1115,12 @@ if(!ishuman(current) && !isrobot(current)) to_chat(usr, "This only works on humans and cyborgs!") return - ticker.mode.devils += src + SSticker.mode.devils += src special_role = "devil" - ticker.mode.update_devil_icons_added(src) - ticker.mode.finalize_devil(src, TRUE) - ticker.mode.forge_devil_objectives(src, 2) - ticker.mode.greet_devil(src) + SSticker.mode.update_devil_icons_added(src) + SSticker.mode.finalize_devil(src, TRUE) + SSticker.mode.forge_devil_objectives(src, 2) + SSticker.mode.greet_devil(src) message_admins("[key_name_admin(usr)] has devil'ed [current]. The devil has been marked as ascendable.") log_admin("[key_name(usr)] has devil'ed [current]. The devil has been marked as ascendable.") if("sintouched") @@ -1132,8 +1132,8 @@ else if(href_list["traitor"]) switch(href_list["traitor"]) if("clear") - if(src in ticker.mode.traitors) - ticker.mode.traitors -= src + if(src in SSticker.mode.traitors) + SSticker.mode.traitors -= src special_role = null to_chat(current, "You have been brainwashed! You are no longer a traitor!") log_admin("[key_name(usr)] has de-traitored [key_name(current)]") @@ -1145,12 +1145,12 @@ A.verbs -= /mob/living/silicon/ai/proc/choose_modules A.malf_picker.remove_verbs(A) qdel(A.malf_picker) - ticker.mode.update_traitor_icons_removed(src) + SSticker.mode.update_traitor_icons_removed(src) if("traitor") - if(!(src in ticker.mode.traitors)) - ticker.mode.traitors += src + if(!(src in SSticker.mode.traitors)) + SSticker.mode.traitors += src var/datum/mindslaves/slaved = new() slaved.masters += src som = slaved //we MIGT want to mindslave someone @@ -1160,14 +1160,14 @@ message_admins("[key_name_admin(usr)] has traitored [key_name_admin(current)]") if(isAI(current)) var/mob/living/silicon/ai/A = current - ticker.mode.add_law_zero(A) + SSticker.mode.add_law_zero(A) SEND_SOUND(current, 'sound/ambience/antag/malf.ogg') else SEND_SOUND(current, 'sound/ambience/antag/tatoralert.ogg') - ticker.mode.update_traitor_icons_added(src) + SSticker.mode.update_traitor_icons_added(src) if("autoobjectives") - ticker.mode.forge_traitor_objectives(src) + SSticker.mode.forge_traitor_objectives(src) to_chat(usr, "The objectives for traitor [key] have been generated. You can edit them and announce manually.") log_admin("[key_name(usr)] has automatically forged objectives for [key_name(current)]") message_admins("[key_name_admin(usr)] has automatically forged objectives for [key_name_admin(current)]") @@ -1175,17 +1175,17 @@ else if(href_list["shadowling"]) switch(href_list["shadowling"]) if("clear") - ticker.mode.update_shadow_icons_removed(src) - if(src in ticker.mode.shadows) - ticker.mode.shadows -= src + SSticker.mode.update_shadow_icons_removed(src) + if(src in SSticker.mode.shadows) + SSticker.mode.shadows -= src special_role = null to_chat(current, "Your powers have been quenched! You are no longer a shadowling!") message_admins("[key_name_admin(usr)] has de-shadowlinged [current].") log_admin("[key_name(usr)] has de-shadowlinged [current].") current.spellremove(current) current.remove_language("Shadowling Hivemind") - else if(src in ticker.mode.shadowling_thralls) - ticker.mode.remove_thrall(src,0) + else if(src in SSticker.mode.shadowling_thralls) + SSticker.mode.remove_thrall(src,0) message_admins("[key_name_admin(usr)] has de-thrall'ed [current].") log_admin("[key_name(usr)] has de-thralled [key_name(current)]") message_admins("[key_name_admin(usr)] has de-thralled [key_name_admin(current)]") @@ -1193,20 +1193,20 @@ if(!ishuman(current)) to_chat(usr, "This only works on humans!") return - ticker.mode.shadows += src + SSticker.mode.shadows += src special_role = SPECIAL_ROLE_SHADOWLING to_chat(current, "Something stirs deep in your mind. A red light floods your vision, and slowly you remember. Though your human disguise has served you well, the \ time is nigh to cast it off and enter your true form. You have disguised yourself amongst the humans, but you are not one of them. You are a shadowling, and you are to ascend at all costs.\ ") - ticker.mode.finalize_shadowling(src) - ticker.mode.update_shadow_icons_added(src) + SSticker.mode.finalize_shadowling(src) + SSticker.mode.update_shadow_icons_added(src) log_admin("[key_name(usr)] has shadowlinged [key_name(current)]") message_admins("[key_name_admin(usr)] has shadowlinged [key_name_admin(current)]") if("thrall") if(!ishuman(current)) to_chat(usr, "This only works on humans!") return - ticker.mode.add_thrall(src) + SSticker.mode.add_thrall(src) message_admins("[key_name_admin(usr)] has thralled [current].") log_admin("[key_name(usr)] has thralled [current].") @@ -1221,7 +1221,7 @@ return make_Abductor() log_admin("[key_name(usr)] turned [current] into abductor.") - ticker.mode.update_abductor_icons_added(src) + SSticker.mode.update_abductor_icons_added(src) if("equip") if(!ishuman(current)) to_chat(usr, "This only works on humans!") @@ -1306,7 +1306,7 @@ log_admin("[key_name(usr)] has set [key_name(current)]'s telecrystals to [crystals]") message_admins("[key_name_admin(usr)] has set [key_name_admin(current)]'s telecrystals to [crystals]") if("uplink") - if(!ticker.mode.equip_traitor(current, !(src in ticker.mode.traitors))) + if(!SSticker.mode.equip_traitor(current, !(src in SSticker.mode.traitors))) to_chat(usr, "Equipping a syndicate failed!") return log_admin("[key_name(usr)] has given [key_name(current)] an uplink") @@ -1392,27 +1392,27 @@ qdel(H) /datum/mind/proc/make_Traitor() - if(!(src in ticker.mode.traitors)) - ticker.mode.traitors += src + if(!(src in SSticker.mode.traitors)) + SSticker.mode.traitors += src special_role = SPECIAL_ROLE_TRAITOR - ticker.mode.forge_traitor_objectives(src) - ticker.mode.finalize_traitor(src) - ticker.mode.greet_traitor(src) - ticker.mode.update_traitor_icons_added(src) + SSticker.mode.forge_traitor_objectives(src) + SSticker.mode.finalize_traitor(src) + SSticker.mode.greet_traitor(src) + SSticker.mode.update_traitor_icons_added(src) /datum/mind/proc/make_Nuke() - if(!(src in ticker.mode.syndicates)) - ticker.mode.syndicates += src - ticker.mode.update_synd_icons_added(src) - if(ticker.mode.syndicates.len==1) - ticker.mode.prepare_syndicate_leader(src) + if(!(src in SSticker.mode.syndicates)) + SSticker.mode.syndicates += src + SSticker.mode.update_synd_icons_added(src) + if(SSticker.mode.syndicates.len==1) + SSticker.mode.prepare_syndicate_leader(src) else - current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]" + current.real_name = "[syndicate_name()] Operative #[SSticker.mode.syndicates.len-1]" special_role = SPECIAL_ROLE_NUKEOPS assigned_role = SPECIAL_ROLE_NUKEOPS to_chat(current, "You are a [syndicate_name()] agent!") - ticker.mode.forge_syndicate_objectives(src) - ticker.mode.greet_syndicate(src) + SSticker.mode.forge_syndicate_objectives(src) + SSticker.mode.greet_syndicate(src) current.loc = get_turf(locate("landmark*Syndicate-Spawn")) @@ -1429,34 +1429,34 @@ qdel(H.wear_suit) qdel(H.w_uniform) - ticker.mode.equip_syndicate(current) + SSticker.mode.equip_syndicate(current) /datum/mind/proc/make_Vampire() - if(!(src in ticker.mode.vampires)) - ticker.mode.vampires += src - ticker.mode.grant_vampire_powers(current) + if(!(src in SSticker.mode.vampires)) + SSticker.mode.vampires += src + SSticker.mode.grant_vampire_powers(current) special_role = SPECIAL_ROLE_VAMPIRE - ticker.mode.forge_vampire_objectives(src) - ticker.mode.greet_vampire(src) - ticker.mode.update_vampire_icons_added(src) + SSticker.mode.forge_vampire_objectives(src) + SSticker.mode.greet_vampire(src) + SSticker.mode.update_vampire_icons_added(src) /datum/mind/proc/make_Changeling() - if(!(src in ticker.mode.changelings)) - ticker.mode.changelings += src - ticker.mode.grant_changeling_powers(current) + if(!(src in SSticker.mode.changelings)) + SSticker.mode.changelings += src + SSticker.mode.grant_changeling_powers(current) special_role = SPECIAL_ROLE_CHANGELING - ticker.mode.forge_changeling_objectives(src) - ticker.mode.greet_changeling(src) - ticker.mode.update_change_icons_added(src) + SSticker.mode.forge_changeling_objectives(src) + SSticker.mode.greet_changeling(src) + SSticker.mode.update_change_icons_added(src) /datum/mind/proc/make_Overmind() - if(!(src in ticker.mode.blob_overminds)) - ticker.mode.blob_overminds += src + if(!(src in SSticker.mode.blob_overminds)) + SSticker.mode.blob_overminds += src special_role = SPECIAL_ROLE_BLOB_OVERMIND /datum/mind/proc/make_Wizard() - if(!(src in ticker.mode.wizards)) - ticker.mode.wizards += src + if(!(src in SSticker.mode.wizards)) + SSticker.mode.wizards += src special_role = SPECIAL_ROLE_WIZARD assigned_role = SPECIAL_ROLE_WIZARD //ticker.mode.learn_basic_spells(current) @@ -1466,18 +1466,18 @@ else current.loc = pick(wizardstart) - ticker.mode.equip_wizard(current) + SSticker.mode.equip_wizard(current) for(var/obj/item/spellbook/S in current.contents) S.op = 0 - ticker.mode.name_wizard(current) - ticker.mode.forge_wizard_objectives(src) - ticker.mode.greet_wizard(src) - ticker.mode.update_wiz_icons_added(src) + SSticker.mode.name_wizard(current) + SSticker.mode.forge_wizard_objectives(src) + SSticker.mode.greet_wizard(src) + SSticker.mode.update_wiz_icons_added(src) /datum/mind/proc/make_Rev() - if(ticker.mode.head_revolutionaries.len>0) + if(SSticker.mode.head_revolutionaries.len>0) // copy targets - var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries + var/datum/mind/valid_head = locate() in SSticker.mode.head_revolutionaries if(valid_head) for(var/datum/objective/mutiny/O in valid_head.objectives) var/datum/objective/mutiny/rev_obj = new @@ -1485,13 +1485,13 @@ rev_obj.target = O.target rev_obj.explanation_text = "Assassinate [O.target.current.real_name], the [O.target.assigned_role]." objectives += rev_obj - ticker.mode.greet_revolutionary(src,0) - ticker.mode.head_revolutionaries += src - ticker.mode.update_rev_icons_added(src) + SSticker.mode.greet_revolutionary(src,0) + SSticker.mode.head_revolutionaries += src + SSticker.mode.update_rev_icons_added(src) special_role = SPECIAL_ROLE_HEAD_REV - ticker.mode.forge_revolutionary_objectives(src) - ticker.mode.greet_revolutionary(src,0) + SSticker.mode.forge_revolutionary_objectives(src) + SSticker.mode.greet_revolutionary(src,0) var/list/L = current.get_contents() var/obj/item/flash/flash = locate() in L @@ -1499,7 +1499,7 @@ take_uplink() var/fail = 0 // fail |= !ticker.mode.equip_traitor(current, 1) - fail |= !ticker.mode.equip_revolutionary(current) + fail |= !SSticker.mode.equip_revolutionary(current) /datum/mind/proc/make_Abductor() var/role = alert("Abductor Role ?","Role","Agent","Scientist") @@ -1512,7 +1512,7 @@ if(!ishuman(current)) return - ticker.mode.abductors |= src + SSticker.mode.abductors |= src var/datum/objective/experiment/O = new O.owner = src @@ -1621,15 +1621,15 @@ var/list/implanters var/ref = "\ref[missionary.mind]" - if(!(missionary.mind in ticker.mode.implanter)) - ticker.mode.implanter[ref] = list() - implanters = ticker.mode.implanter[ref] + if(!(missionary.mind in SSticker.mode.implanter)) + SSticker.mode.implanter[ref] = list() + implanters = SSticker.mode.implanter[ref] implanters.Add(src) - ticker.mode.implanted.Add(src) - ticker.mode.implanted[src] = missionary.mind + SSticker.mode.implanted.Add(src) + SSticker.mode.implanted[src] = missionary.mind //ticker.mode.implanter[missionary.mind] += src - ticker.mode.implanter[ref] = implanters - ticker.mode.traitors += src + SSticker.mode.implanter[ref] = implanters + SSticker.mode.traitors += src special_role = "traitor" to_chat(current, "You're now a loyal zealot of [missionary.name]! You now must lay down your life to protect [missionary.p_them()] and assist in [missionary.p_their()] goals at any cost.") var/datum/objective/protect/mindslave/MS = new @@ -1640,8 +1640,8 @@ for(var/datum/objective/objective in objectives) to_chat(current, "Objective #1: [objective.explanation_text]") - ticker.mode.update_traitor_icons_added(missionary.mind) - ticker.mode.update_traitor_icons_added(src)//handles datahuds/observerhuds + SSticker.mode.update_traitor_icons_added(missionary.mind) + SSticker.mode.update_traitor_icons_added(src)//handles datahuds/observerhuds if(missionary.mind.som)//do not add if not a traitor..and you just picked up a robe and staff in the hall... var/datum/mindslaves/slaved = missionary.mind.som @@ -1665,7 +1665,7 @@ /datum/mind/proc/remove_zealot(obj/item/clothing/under/jumpsuit = null) if(!zealot_master) //if they aren't a zealot, we can't remove their zealot status, obviously. don't bother with the rest so we don't confuse them with the messages return - ticker.mode.remove_traitor_mind(src) + SSticker.mode.remove_traitor_mind(src) add_attack_logs(zealot_master, current, "Lost control of zealot") zealot_master = null @@ -1696,8 +1696,8 @@ mind.key = key else mind = new /datum/mind(key) - if(ticker) - ticker.minds += mind + if(SSticker) + SSticker.minds += mind else error("mind_initialize(): No ticker ready yet! Please inform Carn") if(!mind.name) diff --git a/code/datums/periodic_news.dm b/code/datums/periodic_news.dm index cdf2d5b9ad8..9a09ec4a7ec 100644 --- a/code/datums/periodic_news.dm +++ b/code/datums/periodic_news.dm @@ -118,7 +118,7 @@ var/global/list/newscaster_standard_feeds = list(/datum/news_announcement/bluespace_research, /datum/news_announcement/lotus_tree, /datum/news_announcement/random_junk, /datum/news_announcement/food_riots) proc/process_newscaster() - check_for_newscaster_updates(ticker.mode.newscaster_announcements) + check_for_newscaster_updates(SSticker.mode.newscaster_announcements) var/global/tmp/announced_news_types = list() proc/check_for_newscaster_updates(type) diff --git a/code/datums/spells/chaplain.dm b/code/datums/spells/chaplain.dm index f9c2641c50e..bdb7bb3f551 100644 --- a/code/datums/spells/chaplain.dm +++ b/code/datums/spells/chaplain.dm @@ -64,9 +64,9 @@ spawn(0) // allows cast to complete even if recipient ignores the prompt if(alert(target, "[user] wants to bless you, in the name of [user.p_their()] religion. Accept?", "Accept Blessing?", "Yes", "No") == "Yes") // prevents forced conversions - user.visible_message("[user] starts blessing [target] in the name of [ticker.Bible_deity_name].", "You start blessing [target] in the name of [ticker.Bible_deity_name].") + user.visible_message("[user] starts blessing [target] in the name of [SSticker.Bible_deity_name].", "You start blessing [target] in the name of [SSticker.Bible_deity_name].") if(do_after(user, 150, target = target)) - user.visible_message("[user] has blessed [target] in the name of [ticker.Bible_deity_name].", "You have blessed [target] in the name of [ticker.Bible_deity_name].") + user.visible_message("[user] has blessed [target] in the name of [SSticker.Bible_deity_name].", "You have blessed [target] in the name of [SSticker.Bible_deity_name].") if(!target.mind.isblessed) target.mind.isblessed = TRUE user.mind.num_blessed++ diff --git a/code/datums/spells/lichdom.dm b/code/datums/spells/lichdom.dm index f1744e22550..f37d48c0a10 100644 --- a/code/datums/spells/lichdom.dm +++ b/code/datums/spells/lichdom.dm @@ -20,7 +20,7 @@ action_icon_state = "skeleton" /obj/effect/proc_holder/spell/targeted/lichdom/Destroy() - for(var/datum/mind/M in ticker.mode.wizards) //Make sure no other bones are about + for(var/datum/mind/M in SSticker.mode.wizards) //Make sure no other bones are about for(var/obj/effect/proc_holder/spell/S in M.spell_list) if(istype(S,/obj/effect/proc_holder/spell/targeted/lichdom) && S != src) return ..() diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index a714e17d236..044276f9e41 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -12,9 +12,9 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) var/datum/uplink_item/I = new path if(!I.item) continue - if(I.gamemodes.len && ticker && !(ticker.mode.type in I.gamemodes)) + if(I.gamemodes.len && SSticker && !(SSticker.mode.type in I.gamemodes)) continue - if(I.excludefrom.len && ticker && (ticker.mode.type in I.excludefrom)) + if(I.excludefrom.len && SSticker && (SSticker.mode.type in I.excludefrom)) continue if(I.last) last += I diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 461de475b41..1370b64ecc7 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -218,7 +218,7 @@ /mob/living/carbon/human/proc/sec_hud_set_security_status() var/image/holder = hud_list[WANTED_HUD] var/perpname = get_visible_name(TRUE) //gets the name of the perp, works if they have an id or if their face is uncovered - if(!ticker) return //wait till the game starts or the monkeys runtime.... + if(!SSticker) return //wait till the game starts or the monkeys runtime.... if(perpname) var/datum/data/record/R = find_record("name", perpname, data_core.security) if(R) diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm index 61196c9862f..5eb15759d99 100644 --- a/code/game/gamemodes/blob/powers.dm +++ b/code/game/gamemodes/blob/powers.dm @@ -378,8 +378,8 @@ new /obj/structure/blob/core/ (get_turf(N), 200, null, blob_core.point_rate, "offspring") qdel(N) - if(ticker && ticker.mode.name == "blob") - var/datum/game_mode/blob/BL = ticker.mode + if(SSticker && SSticker.mode.name == "blob") + var/datum/game_mode/blob/BL = SSticker.mode BL.blobwincount += initial(BL.blobwincount) diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 9e45cab4292..2b860756b45 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -5,7 +5,7 @@ var/global/list/all_cults = list() var/list/datum/mind/cult = list() /proc/iscultist(mob/living/M as mob) - return istype(M) && M.mind && ticker && ticker.mode && (M.mind in ticker.mode.cult) + return istype(M) && M.mind && SSticker && SSticker.mode && (M.mind in SSticker.mode.cult) /proc/is_convertable_to_cult(datum/mind/mind) @@ -30,8 +30,8 @@ var/global/list/all_cults = list() return 1 /proc/is_sacrifice_target(datum/mind/mind) - if(istype(ticker.mode.name, "cult")) - var/datum/game_mode/cult/cult_mode = ticker.mode + if(istype(SSticker.mode.name, "cult")) + var/datum/game_mode/cult/cult_mode = SSticker.mode if(mind == cult_mode.sacrifice_target) return 1 return 0 @@ -121,7 +121,7 @@ var/global/list/all_cults = list() var/datum/action/innate/cultcomm/C = new() C.Grant(cult_mind.current) update_cult_icons_added(cult_mind) - to_chat(cult_mind.current, "You catch a glimpse of the Realm of [ticker.cultdat.entity_name], [ticker.cultdat.entity_title3]. You now see how flimsy the world is, you see that it should be open to the knowledge of [ticker.cultdat.entity_name].") + to_chat(cult_mind.current, "You catch a glimpse of the Realm of [SSticker.cultdat.entity_name], [SSticker.cultdat.entity_title3]. You now see how flimsy the world is, you see that it should be open to the knowledge of [SSticker.cultdat.entity_name].") first_phase() @@ -135,16 +135,16 @@ var/global/list/all_cults = list() if("survive") explanation = "Our knowledge must live on. Make sure at least [acolytes_needed] acolytes escape on the shuttle to spread their work on an another station." if("convert") - explanation = "We must increase our influence before we can summon [ticker.cultdat.entity_name], Convert [convert_target] crew members. Take it slowly to avoid raising suspicions." + explanation = "We must increase our influence before we can summon [SSticker.cultdat.entity_name], Convert [convert_target] crew members. Take it slowly to avoid raising suspicions." if("bloodspill") - explanation = "We must prepare this place for [ticker.cultdat.entity_title1]'s coming. Spill blood and gibs over [spilltarget] floor tiles." + explanation = "We must prepare this place for [SSticker.cultdat.entity_title1]'s coming. Spill blood and gibs over [spilltarget] floor tiles." if("sacrifice") if(sacrifice_target) explanation = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.assigned_role]. You will need the sacrifice rune and three acolytes to do so." else explanation = "Free objective." if("eldergod") - explanation = "Summon [ticker.cultdat.entity_name] by invoking the 'Tear Reality' rune.The summoning can only be accomplished in [english_list(summon_spots)] - where the veil is weak enough for the ritual to begin." + explanation = "Summon [SSticker.cultdat.entity_name] by invoking the 'Tear Reality' rune.The summoning can only be accomplished in [english_list(summon_spots)] - where the veil is weak enough for the ritual to begin." to_chat(cult_mind.current, "Objective #[obj_count]: [explanation]") cult_mind.memory += "Objective #[obj_count]: [explanation]
" @@ -179,7 +179,7 @@ var/global/list/all_cults = list() /datum/game_mode/proc/add_cultist(datum/mind/cult_mind) //BASE if(!istype(cult_mind)) return 0 - var/datum/game_mode/cult/cult_mode = ticker.mode + var/datum/game_mode/cult/cult_mode = SSticker.mode if(!(cult_mind in cult) && is_convertable_to_cult(cult_mind)) cult += cult_mind cult_mind.current.faction |= "cult" @@ -314,10 +314,10 @@ var/global/list/all_cults = list() feedback_add_details("cult_objective","cult_sacrifice|FAIL|GIBBED") if("eldergod") if(!eldergod) - explanation = "Summon [ticker.cultdat.entity_name]. Success!" + explanation = "Summon [SSticker.cultdat.entity_name]. Success!" feedback_add_details("cult_objective","cult_narsie|SUCCESS") else - explanation = "Summon [ticker.cultdat.entity_name]. Fail." + explanation = "Summon [SSticker.cultdat.entity_name]. Fail." feedback_add_details("cult_objective","cult_narsie|FAIL") if("slaughter") if(demons_summoned) @@ -345,10 +345,10 @@ var/global/list/all_cults = list() if("harvest") if(harvested > harvest_target) - explanation = "Offer [harvest_target] humans for [ticker.cultdat.entity_name]'s first meal of the day. ([harvested] sacrificed) Success!" + explanation = "Offer [harvest_target] humans for [SSticker.cultdat.entity_name]'s first meal of the day. ([harvested] sacrificed) Success!" feedback_add_details("cult_objective","cult_harvest|SUCCESS") else - explanation = "Offer [harvest_target] humans for [ticker.cultdat.entity_name]'s first meal of the day. ([harvested] sacrificed) Fail!" + explanation = "Offer [harvest_target] humans for [SSticker.cultdat.entity_name]'s first meal of the day. ([harvested] sacrificed) Fail!" feedback_add_details("cult_objective","cult_harvest|FAIL") if("hijack") @@ -375,7 +375,7 @@ var/global/list/all_cults = list() /datum/game_mode/proc/auto_declare_completion_cult() - if(cult.len || (ticker && GAMEMODE_IS_CULT)) + if(cult.len || (SSticker && GAMEMODE_IS_CULT)) var/text = "The cultists were:" for(var/datum/mind/cultist in cult) diff --git a/code/game/gamemodes/cult/cult_objectives.dm b/code/game/gamemodes/cult/cult_objectives.dm index beef75e103b..da4e190cb7f 100644 --- a/code/game/gamemodes/cult/cult_objectives.dm +++ b/code/game/gamemodes/cult/cult_objectives.dm @@ -19,10 +19,10 @@ switch(new_objective) if("convert") - explanation = "We must increase our influence before we can summon [ticker.cultdat.entity_name], Convert [convert_target] crew members. Take it slowly to avoid raising suspicions." + explanation = "We must increase our influence before we can summon [SSticker.cultdat.entity_name], Convert [convert_target] crew members. Take it slowly to avoid raising suspicions." if("bloodspill") spilltarget = 100 + rand(0,GLOB.player_list.len * 3) - explanation = "We must prepare this place for [ticker.cultdat.entity_title1]'s coming. Spill blood and gibs over [spilltarget] floor tiles." + explanation = "We must prepare this place for [SSticker.cultdat.entity_title1]'s coming. Spill blood and gibs over [spilltarget] floor tiles." if("sacrifice") explanation = "We need to sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role], for [sacrifice_target.p_their()] blood is the key that will lead our master to this realm. You will need 3 cultists around a Sacrifice rune to perform the ritual." @@ -59,8 +59,8 @@ message_admins("The Cult has already completed [prenarsie_objectives] objectives! Nar-Sie objective unlocked.") log_admin("The Cult has already completed [prenarsie_objectives] objectives! Nar-Sie objective unlocked.") else - message_admins("There are less than 4 cultists! [ticker.cultdat.entity_name] objective unlocked.") - log_admin("There are less than 4 cultists! [ticker.cultdat.entity_name] objective unlocked.") + message_admins("There are less than 4 cultists! [SSticker.cultdat.entity_name] objective unlocked.") + log_admin("There are less than 4 cultists! [SSticker.cultdat.entity_name] objective unlocked.") gtfo_phase() if(!sacrificed.len && (new_objective != "sacrifice")) @@ -76,10 +76,10 @@ switch(new_objective) if("convert") - explanation = "We must increase our influence before we can summon [ticker.cultdat.entity_name]. Convert [convert_target] crew members. Take it slowly to avoid raising suspicions." + explanation = "We must increase our influence before we can summon [SSticker.cultdat.entity_name]. Convert [convert_target] crew members. Take it slowly to avoid raising suspicions." if("bloodspill") spilltarget = 100 + rand(0,GLOB.player_list.len * 3) - explanation = "We must prepare this place for [ticker.cultdat.entity_title1]'s coming. Spread blood and gibs over [spilltarget] of the Station's floor tiles." + explanation = "We must prepare this place for [SSticker.cultdat.entity_title1]'s coming. Spread blood and gibs over [spilltarget] of the Station's floor tiles." if("sacrifice") explanation = "We need to sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role], for [sacrifice_target.p_their()] blood is the key that will lead our master to this realm. You will need 3 cultists around a Sacrifice rune to perform the ritual." @@ -111,7 +111,7 @@ if(prob(40))//split the chance of this objectives += "eldergod" - explanation = "Summon [ticker.cultdat.entity_name] on the Station via the use of the Tear Reality rune. The veil is weak enough in [english_list(summon_spots)] for the ritual to begin." + explanation = "Summon [SSticker.cultdat.entity_name] on the Station via the use of the Tear Reality rune. The veil is weak enough in [english_list(summon_spots)] for the ritual to begin." else objectives += "slaughter" explanation = "Bring the Slaughter via the rune 'Bring forth the slaughter'. The veil is weak enough in [english_list(summon_spots)] for the ritual to begin." @@ -135,11 +135,11 @@ switch(last_objective) if("harvest") - explanation = "[ticker.cultdat.entity_title1] hungers for their first meal of this never-ending day. Offer them [harvest_target] humans in sacrifice." + explanation = "[SSticker.cultdat.entity_title1] hungers for their first meal of this never-ending day. Offer them [harvest_target] humans in sacrifice." if("hijack") - explanation = "[ticker.cultdat.entity_name] wishes for their troops to start the assault on Centcom immediately. Hijack the escape shuttle and don't let a single non-cultist board it." + explanation = "[SSticker.cultdat.entity_name] wishes for their troops to start the assault on Centcom immediately. Hijack the escape shuttle and don't let a single non-cultist board it." if("massacre") - explanation = "[ticker.cultdat.entity_name] wants to watch you as you massacre the remaining humans on the station (until less than [massacre_target] humans are left alive)." + explanation = "[SSticker.cultdat.entity_name] wants to watch you as you massacre the remaining humans on the station (until less than [massacre_target] humans are left alive)." for(var/datum/mind/cult_mind in cult) if(cult_mind) diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index d561291c19f..fb6bb95a4a8 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -11,7 +11,7 @@ return /obj/effect/rune/proc/check_icon() - if(!ticker.mode)//work around for maps with runes and cultdat is not loaded all the way + if(!SSticker.mode)//work around for maps with runes and cultdat is not loaded all the way var/bits = make_bit_triplet() icon = get_rune(bits) else @@ -39,16 +39,16 @@ canbypass = 1 /obj/item/tome/New() - if(!ticker.mode) + if(!SSticker.mode) icon_state = "tome" else - icon_state = ticker.cultdat.tome_icon + icon_state = SSticker.cultdat.tome_icon ..() /obj/item/tome/examine(mob/user) ..() if(iscultist(user) || user.stat == DEAD) - to_chat(user, "The scriptures of [ticker.cultdat.entity_title3]. Allows the scribing of runes and access to the knowledge archives of the cult of [ticker.cultdat.entity_name].") + to_chat(user, "The scriptures of [SSticker.cultdat.entity_title3]. Allows the scribing of runes and access to the knowledge archives of the cult of [SSticker.cultdat.entity_name].") to_chat(user, "Striking another cultist with it will purge holy water from them.") to_chat(user, "Striking a noncultist, however, will sear their flesh.") @@ -91,7 +91,7 @@ /obj/item/tome/proc/read_tome(mob/user) var/text = list() - text += "

Archives of [ticker.cultdat.entity_title1]



" + text += "
Archives of [SSticker.cultdat.entity_title1]



" text += "A rune's name and effects can be revealed by examining the rune.<

" text += "Rite of Binding
This rune is one of the most important runes the cult has, being the only way to create new talismans. A blank sheet of paper must be on top of the rune. After \ @@ -102,7 +102,7 @@ text += "Rite of Enlightenment
This rune is critical to the success of the cult. It will allow you to convert normal crew members into cultists. \ To do this, simply place the crew member upon the rune and invoke it. This rune requires two invokers to use. If the target to be converted is mindshielded or a certain assignment, they will \ - be unable to be converted. People [ticker.cultdat.entity_title3] wishes sacrificed will also be ineligible for conversion, and anyone with a shielding presence like the null rod will not be converted.
\ + be unable to be converted. People [SSticker.cultdat.entity_title3] wishes sacrificed will also be ineligible for conversion, and anyone with a shielding presence like the null rod will not be converted.
\ Successful conversions will produce a tome for the new cultist.

" text += "Rite of Tribute
This rune is necessary to achieve your goals. Simply place any dead creature upon the rune and invoke it (this will not \ @@ -135,12 +135,12 @@ text += "Leeching
When invoked, this rune will transfer lifeforce from the victim to the invoker.

" - text += "Rite of Spectral Manifestation
This rune allows you to summon spirits as humanoid fighters. When invoked, a spirit above the rune will be brought to life as a human, wearing nothing, that seeks only to serve you and [ticker.cultdat.entity_title3]. \ + text += "Rite of Spectral Manifestation
This rune allows you to summon spirits as humanoid fighters. When invoked, a spirit above the rune will be brought to life as a human, wearing nothing, that seeks only to serve you and [SSticker.cultdat.entity_title3]. \ However, the spirit's link to reality is fragile - you must remain on top of the rune, and you will slowly take damage. Upon stepping off the rune, all summoned spirits will dissipate, dropping their items to the ground. You may manifest \ multiple spirits with one rune, but you will rapidly take damage in doing so.

" text += "Ritual of Dimensional Rending
This rune is necessary to achieve your goals. On attempting to scribe it, it will produce shields around you and alert everyone you are attempting to scribe it; it takes a very long time to scribe, \ - and does massive damage to the one attempting to scribe it.
Invoking it requires 9 invokers and the sacrifice of a specific crewmember, and once invoked, will summon [ticker.cultdat.entity_title3], [ticker.cultdat.entity_name]. \ + and does massive damage to the one attempting to scribe it.
Invoking it requires 9 invokers and the sacrifice of a specific crewmember, and once invoked, will summon [SSticker.cultdat.entity_title3], [SSticker.cultdat.entity_name]. \ This will complete your objectives.


" text += "Talisman of Teleportation
The talisman form of the Teleport rune will transport the invoker to a selected Teleport rune once.

" @@ -201,12 +201,12 @@ return 1 /obj/item/tome/proc/finale_runes_ok(mob/living/user, obj/effect/rune/rune_to_scribe) - var/datum/game_mode/cult/cult_mode = ticker.mode + var/datum/game_mode/cult/cult_mode = SSticker.mode var/area/A = get_area(src) if(GAMEMODE_IS_CULT) if(!canbypass)//not an admin-tome, check things if(!cult_mode.narsie_condition_cleared) - to_chat(user, "There is still more to do before unleashing [ticker.cultdat.entity_name] power!") + to_chat(user, "There is still more to do before unleashing [SSticker.cultdat.entity_name] power!") return 0 if(!cult_mode.eldergod) to_chat(user, "\"I am already here. There is no need to try to summon me now.\"") @@ -215,19 +215,19 @@ to_chat(user, "\"We are already here. There is no need to try to summon us now.\"") return 0 if(!((CULT_ELDERGOD in cult_mode.objectives) || (CULT_SLAUGHTER in cult_mode.objectives))) - to_chat(user, "[ticker.cultdat.entity_name]'s power does not wish to be unleashed!") + to_chat(user, "[SSticker.cultdat.entity_name]'s power does not wish to be unleashed!") return 0 if(!(A in summon_spots)) - to_chat(user, "[ticker.cultdat.entity_name] can only be summoned where the veil is weak - in [english_list(summon_spots)]!") + to_chat(user, "[SSticker.cultdat.entity_name] can only be summoned where the veil is weak - in [english_list(summon_spots)]!") return 0 - var/confirm_final = alert(user, "This is the FINAL step to summon your deities power, it is a long, painful ritual and the crew will be alerted to your presence", "Are you prepared for the final battle?", "My life for [ticker.cultdat.entity_name]!", "No") + var/confirm_final = alert(user, "This is the FINAL step to summon your deities power, it is a long, painful ritual and the crew will be alerted to your presence", "Are you prepared for the final battle?", "My life for [SSticker.cultdat.entity_name]!", "No") if(confirm_final == "No" || confirm_final == null) to_chat(user, "You decide to prepare further before scribing the rune.") return 0 else return 1 else//the game mode is not cult..but we ARE a cultist...ALL ON THE ADMINBUS - var/confirm_final = alert(user, "This is the FINAL step to summon your deities power, it is a long, painful ritual and the crew will be alerted to your presence", "Are you prepared for the final battle?", "My life for [ticker.cultdat.entity_name]!", "No") + var/confirm_final = alert(user, "This is the FINAL step to summon your deities power, it is a long, painful ritual and the crew will be alerted to your presence", "Are you prepared for the final battle?", "My life for [SSticker.cultdat.entity_name]!", "No") if(confirm_final == "No" || confirm_final == null) to_chat(user, "You decide to prepare further before scribing the rune.") return 0 @@ -296,7 +296,7 @@ var/mob/living/carbon/human/H = user var/dam_zone = pick("head", "chest", "groin", "l_arm", "l_hand", "r_arm", "r_hand", "l_leg", "l_foot", "r_leg", "r_foot") var/obj/item/organ/external/affecting = H.get_organ(ran_zone(dam_zone)) - user.visible_message("[user] cuts open [user.p_their()] [affecting] and begins writing in [user.p_their()] own blood!", "You slice open your [affecting] and begin drawing a sigil of [ticker.cultdat.entity_title3].") + user.visible_message("[user] cuts open [user.p_their()] [affecting] and begins writing in [user.p_their()] own blood!", "You slice open your [affecting] and begin drawing a sigil of [SSticker.cultdat.entity_title3].") user.apply_damage(initial(rune_to_scribe.scribe_damage), BRUTE , affecting) if(!do_after(user, initial(rune_to_scribe.scribe_delay)-scribereduct, target = get_turf(user))) for(var/V in shields) @@ -308,7 +308,7 @@ to_chat(user, "There is already a rune here.") return user.visible_message("[user] creates a strange circle in [user.p_their()] own blood.", \ - "You finish drawing the arcane markings of [ticker.cultdat.entity_title3].") + "You finish drawing the arcane markings of [SSticker.cultdat.entity_title3].") for(var/V in shields) var/obj/machinery/shield/S = V if(S && !QDELETED(S)) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 1ed5e812989..ef2a970adb3 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -197,7 +197,7 @@ structure_check() searches for nearby cultist structures required for the invoca ..() for(var/M in invokers) var/mob/living/L = M - to_chat(L, "You feel your life force draining. [ticker.cultdat.entity_title3] is displeased.") + to_chat(L, "You feel your life force draining. [SSticker.cultdat.entity_title3] is displeased.") qdel(src) /mob/proc/null_rod_check() //The null rod, if equipped, will protect the holder from the effects of most runes @@ -372,12 +372,12 @@ var/list/teleport_runes = list() new_cultist.visible_message("[new_cultist] writhes in pain as the markings below them glow a bloody red!", \ "AAAAAAAAAAAAAA-") - ticker.mode.add_cultist(new_cultist.mind, 1) + SSticker.mode.add_cultist(new_cultist.mind, 1) new /obj/item/tome(get_turf(src)) new_cultist.mind.special_role = "Cultist" to_chat(new_cultist, "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible, truth. The veil of reality has been ripped away \ and something evil takes root.") - to_chat(new_cultist, "Assist your new compatriots in their dark dealings. Your goal is theirs, and theirs is yours. You serve [ticker.cultdat.entity_title3] above all else. Bring it back.\ + to_chat(new_cultist, "Assist your new compatriots in their dark dealings. Your goal is theirs, and theirs is yours. You serve [SSticker.cultdat.entity_title3] above all else. Bring it back.\ ") //Rite of Tribute: Sacrifices a crew member to Nar-Sie. Places them into a soul shard if they're in their body. @@ -391,7 +391,7 @@ var/list/teleport_runes = list() /obj/effect/rune/sacrifice/New() ..() - cultist_desc = "sacrifices a crew member to [ticker.cultdat.entity_title3]. May place them into a soul shard if their spirit remains in their body." + cultist_desc = "sacrifices a crew member to [SSticker.cultdat.entity_title3]. May place them into a soul shard if their spirit remains in their body." /obj/effect/rune/sacrifice/invoke(var/list/invokers) if(rune_in_use) @@ -432,7 +432,7 @@ var/list/teleport_runes = list() /obj/effect/rune/sacrifice/proc/sac(var/list/invokers, mob/living/T) var/sacrifice_fulfilled - var/datum/game_mode/cult/cult_mode = ticker.mode + var/datum/game_mode/cult/cult_mode = SSticker.mode if(T) if(istype(T, /mob/living/simple_animal/pet/corgi)) for(var/M in invokers) @@ -445,7 +445,7 @@ var/list/teleport_runes = list() if(is_sacrifice_target(T.mind)) sacrifice_fulfilled = 1 new /obj/effect/temp_visual/cult/sac(loc) - if(ticker && ticker.mode && ticker.mode.name == "cult") + if(SSticker && SSticker.mode && SSticker.mode.name == "cult") cult_mode.harvested++ for(var/M in invokers) @@ -494,8 +494,8 @@ var/list/teleport_runes = list() /obj/effect/rune/narsie/New() ..() - cultist_name = "Summon [ticker.cultdat.entity_name]" - cultist_desc = "tears apart dimensional barriers, calling forth [ticker.cultdat.entity_title3]. Requires 9 invokers." + cultist_name = "Summon [SSticker.cultdat.entity_name]" + cultist_desc = "tears apart dimensional barriers, calling forth [SSticker.cultdat.entity_title3]. Requires 9 invokers." /obj/effect/rune/narsie/check_icon() @@ -508,7 +508,7 @@ var/list/teleport_runes = list() if(used) return var/mob/living/user = invokers[1] - var/datum/game_mode/cult/cult_mode = ticker.mode + var/datum/game_mode/cult/cult_mode = SSticker.mode if(!(CULT_ELDERGOD in cult_mode.objectives)) message_admins("[key_name_admin(user)] tried to summonn an eldritch horror when the objective was wrong") burn_invokers(invokers) @@ -521,7 +521,7 @@ var/list/teleport_runes = list() return if(!cult_mode.eldergod) for(var/M in invokers) - to_chat(M, "[ticker.cultdat.entity_name] is already on this plane!") + to_chat(M, "[SSticker.cultdat.entity_name] is already on this plane!") log_game("Summon god rune failed - already summoned") return //BEGIN THE SUMMONING @@ -594,7 +594,7 @@ var/list/teleport_runes = list() if(used) return var/mob/living/user = invokers[1] - var/datum/game_mode/cult/cult_mode = ticker.mode + var/datum/game_mode/cult/cult_mode = SSticker.mode if(!(CULT_SLAUGHTER in cult_mode.objectives)) message_admins("[key_name_admin(user)] tried to summon demons when the objective was wrong") burn_invokers(invokers) @@ -856,10 +856,10 @@ var/list/teleport_runes = list() /obj/effect/rune/summon/invoke(var/list/invokers) var/mob/living/user = invokers[1] var/list/cultists = list() - for(var/datum/mind/M in ticker.mode.cult) + for(var/datum/mind/M in SSticker.mode.cult) if(!(M.current in invokers) && M.current && M.current.stat != DEAD) cultists |= M.current - var/mob/living/cultist_to_summon = input(user, "Who do you wish to call to [src]?", "Followers of [ticker.cultdat.entity_title3]") as null|anything in cultists + var/mob/living/cultist_to_summon = input(user, "Who do you wish to call to [src]?", "Followers of [SSticker.cultdat.entity_title3]") as null|anything in cultists if(!Adjacent(user) || !src || QDELETED(src) || user.incapacitated()) return if(!cultist_to_summon) @@ -868,7 +868,7 @@ var/list/teleport_runes = list() log_game("Summon Cultist rune failed - no target") return if(!iscultist(cultist_to_summon)) - to_chat(user, "[cultist_to_summon] is not a follower of [ticker.cultdat.entity_title3]!") + to_chat(user, "[cultist_to_summon] is not a follower of [SSticker.cultdat.entity_title3]!") fail_invoke() log_game("Summon Cultist rune failed - no target") return @@ -977,7 +977,7 @@ var/list/teleport_runes = list() /obj/effect/rune/manifest/New(loc) ..() - cultist_desc = "manifests a spirit as a servant of [ticker.cultdat.entity_title3]. The invoker must not move from atop the rune, and will take damage for each summoned spirit." + cultist_desc = "manifests a spirit as a servant of [SSticker.cultdat.entity_title3]. The invoker must not move from atop the rune, and will take damage for each summoned spirit." notify_ghosts("Manifest rune created in [get_area(src)].", ghost_sound='sound/effects/ghost2.ogg', source = src) @@ -1033,10 +1033,10 @@ var/list/teleport_runes = list() N.health = 20 N.mouse_opacity = MOUSE_OPACITY_TRANSPARENT new_human.key = ghost_to_spawn.key - ticker.mode.add_cultist(new_human.mind, 0) + SSticker.mode.add_cultist(new_human.mind, 0) summoned_guys |= new_human ghosts++ - to_chat(new_human, "You are a servant of [ticker.cultdat.entity_title3]. You have been made semi-corporeal by the cult of [ticker.cultdat.entity_name], and you are to serve them at all costs.") + to_chat(new_human, "You are a servant of [SSticker.cultdat.entity_title3]. You have been made semi-corporeal by the cult of [SSticker.cultdat.entity_name], and you are to serve them at all costs.") while(user in get_turf(src)) if(user.stat) diff --git a/code/game/gamemodes/cult/talisman.dm b/code/game/gamemodes/cult/talisman.dm index 875e8a3d1e9..92fc09490ec 100644 --- a/code/game/gamemodes/cult/talisman.dm +++ b/code/game/gamemodes/cult/talisman.dm @@ -41,7 +41,7 @@ invocation = "Ra'sha yoka!" /obj/item/paper/talisman/malformed/invoke(mob/living/user, successfuluse = 1) - to_chat(user, "You feel a pain in your head. [ticker.cultdat.entity_title3] is displeased.") + to_chat(user, "You feel a pain in your head. [SSticker.cultdat.entity_title3] is displeased.") if(iscarbon(user)) var/mob/living/carbon/C = user C.apply_damage(10, BRUTE, "head") diff --git a/code/game/gamemodes/devil/devilinfo.dm b/code/game/gamemodes/devil/devilinfo.dm index e11d31f7d98..419034a9e1f 100644 --- a/code/game/gamemodes/devil/devilinfo.dm +++ b/code/game/gamemodes/devil/devilinfo.dm @@ -300,9 +300,9 @@ var/global/list/lawlorify = list ( to_chat(world, "SLOTH, WRATH, GLUTTONY, ACEDIA, ENVY, GREED, PRIDE! FIRES OF HELL AWAKEN!!") world << 'sound/hallucinations/veryfar_noise.ogg' sleep(50) - if(!ticker.mode.devil_ascended) + if(!SSticker.mode.devil_ascended) SSshuttle.emergency.request(null, 0.3) - ticker.mode.devil_ascended++ + SSticker.mode.devil_ascended++ /datum/devilinfo/proc/increase_arch_devil() if(!ascendable) diff --git a/code/game/gamemodes/devil/objectives.dm b/code/game/gamemodes/devil/objectives.dm index 5214ab336ec..04d0217b599 100644 --- a/code/game/gamemodes/devil/objectives.dm +++ b/code/game/gamemodes/devil/objectives.dm @@ -68,7 +68,7 @@ explanation_text = "Ensure at least [target_amount] mortals are sintouched." /datum/objective/devil/sintouch/check_completion() - return target_amount <= ticker.mode.sintouched.len + return target_amount <= SSticker.mode.sintouched.len diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 5f3ed489107..4f583abdfed 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -75,8 +75,8 @@ display_roundstart_logout_report() feedback_set_details("round_start","[time2text(world.realtime)]") - if(ticker && ticker.mode) - feedback_set_details("game_mode","[ticker.mode]") + if(SSticker && SSticker.mode) + feedback_set_details("game_mode","[SSticker.mode]") // if(revdata) // feedback_set_details("revision","[revdata.revision]") feedback_set_details("server_ip","[world.internet_address]:[world.port]") diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index e8a3ff6c981..2b4d095b327 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -312,5 +312,5 @@ datum/game_mode/proc/auto_declare_completion_heist() message_admins("[key_name_admin(user)] has pressed the vox win button.") log_admin("[key_name(user)] pressed the vox win button during a vox round.") - var/datum/game_mode/heist/H = ticker.mode + var/datum/game_mode/heist/H = SSticker.mode H.win_button_triggered = 1 diff --git a/code/game/gamemodes/intercept_report.dm b/code/game/gamemodes/intercept_report.dm index 5e8be8b1229..d1d176f797e 100644 --- a/code/game/gamemodes/intercept_report.dm +++ b/code/game/gamemodes/intercept_report.dm @@ -113,10 +113,10 @@ if(man.client && man.client.prefs.nanotrasen_relation == "Opposed") //don't include suspects who can't possibly be the antag based on their job (no suspecting the captain of being a damned dirty tator) if(man.mind && man.mind.assigned_role) - if((man.mind.assigned_role in ticker.mode.protected_jobs) || (man.mind.assigned_role in ticker.mode.restricted_jobs)) + if((man.mind.assigned_role in SSticker.mode.protected_jobs) || (man.mind.assigned_role in SSticker.mode.restricted_jobs)) return //don't include suspects who can't possibly be the antag based on their species (no suspecting the machines of being sneaky changelings) - if(man.dna.species.name in ticker.mode.protected_species) + if(man.dna.species.name in SSticker.mode.protected_species) return dudes += man for(var/i = 0, i < max(GLOB.player_list.len/10,2), i++) diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index bfde102ca35..1c96c0e4329 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -111,7 +111,7 @@ to_chat(L, "The blast wave from [src] tears you atom from atom!") L.dust() to_chat(world, "The AI cleansed the station of life with the doomsday device!") - ticker.force_ending = 1 + SSticker.force_ending = 1 /datum/AI_Module/large/upgrade_turrets diff --git a/code/game/gamemodes/miniantags/abduction/abduction.dm b/code/game/gamemodes/miniantags/abduction/abduction.dm index 587c2b3d476..aab75687df4 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction.dm @@ -251,14 +251,14 @@ /datum/game_mode/proc/remove_abductor(datum/mind/abductor_mind) if(abductor_mind in abductors) - ticker.mode.abductors -= abductor_mind + SSticker.mode.abductors -= abductor_mind abductor_mind.special_role = null abductor_mind.current.create_attack_log("No longer abductor") if(issilicon(abductor_mind.current)) to_chat(abductor_mind.current, "You have been turned into a robot! You are no longer an abductor.") else to_chat(abductor_mind.current, "You have been brainwashed! You are no longer an abductor.") - ticker.mode.update_abductor_icons_removed(abductor_mind) + SSticker.mode.update_abductor_icons_removed(abductor_mind) /datum/game_mode/proc/update_abductor_icons_added(datum/mind/alien_mind) var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_ABDUCTOR] diff --git a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm index 53969aaf7d1..db6f07c1d24 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm @@ -140,14 +140,14 @@ to_chat(H, "You can't remember how you got here...") var/objtype = pick(subtypesof(/datum/objective/abductee/)) var/datum/objective/abductee/O = new objtype() - ticker.mode.abductees += H.mind + SSticker.mode.abductees += H.mind H.mind.objectives += O var/obj_count = 1 to_chat(H, "Your current objectives:") for(var/datum/objective/objective in H.mind.objectives) to_chat(H, "Objective #[obj_count]: [objective.explanation_text]") obj_count++ - ticker.mode.update_abductor_icons_added(H.mind) + SSticker.mode.update_abductor_icons_added(H.mind) for(var/obj/item/organ/internal/heart/gland/G in H.internal_organs) G.Start() diff --git a/code/game/gamemodes/miniantags/morph/morph_event.dm b/code/game/gamemodes/miniantags/morph/morph_event.dm index 4a1c8ebeb7e..e80374e2dca 100644 --- a/code/game/gamemodes/miniantags/morph/morph_event.dm +++ b/code/game/gamemodes/miniantags/morph/morph_event.dm @@ -21,7 +21,7 @@ player_mind.transfer_to(S) player_mind.assigned_role = SPECIAL_ROLE_MORPH player_mind.special_role = SPECIAL_ROLE_MORPH - ticker.mode.traitors |= player_mind + SSticker.mode.traitors |= player_mind to_chat(S, S.playstyle_string) S << 'sound/magic/mutate.ogg' message_admins("[key_of_morph] has been made into morph by an event.") diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm index 54b01ff38ce..7d18c1796dd 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -182,7 +182,7 @@ objective2.owner = mind mind.objectives += objective2 to_chat(src, "Objective #2: [objective2.explanation_text]") - ticker.mode.traitors |= mind //Necessary for announcing + SSticker.mode.traitors |= mind //Necessary for announcing /mob/living/simple_animal/revenant/proc/giveSpells() mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/night_vision/revenant(null)) @@ -429,7 +429,7 @@ player_mind.transfer_to(R) player_mind.assigned_role = SPECIAL_ROLE_REVENANT player_mind.special_role = SPECIAL_ROLE_REVENANT - ticker.mode.traitors |= player_mind + SSticker.mode.traitors |= player_mind message_admins("[key_of_revenant] has been [client_to_revive ? "re":""]made into a revenant by reforming ectoplasm.") log_game("[key_of_revenant] was [client_to_revive ? "re":""]made as a revenant by reforming ectoplasm.") visible_message("[src] suddenly rises into the air before fading away.") diff --git a/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm b/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm index 757fbe579a2..437e7637a77 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm @@ -45,7 +45,7 @@ player_mind.transfer_to(revvie) player_mind.assigned_role = SPECIAL_ROLE_REVENANT player_mind.special_role = SPECIAL_ROLE_REVENANT - ticker.mode.traitors |= player_mind + SSticker.mode.traitors |= player_mind message_admins("[key_of_revenant] has been made into a revenant by an event.") log_game("[key_of_revenant] was spawned as a revenant by an event.") return 1 diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 7e74de27267..a43d03c153a 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -72,7 +72,7 @@ if(!(vialspawned)) var/datum/objective/slaughter/objective = new var/datum/objective/demonFluff/fluffObjective = new - ticker.mode.traitors |= mind + SSticker.mode.traitors |= mind objective.owner = mind fluffObjective.owner = mind //Paradise Port:I added the objective for one spawned like this @@ -174,7 +174,7 @@ S.mind.assigned_role = "Harbringer of the Slaughter" S.mind.special_role = "Harbringer of the Slaughter" to_chat(S, playstyle_string) - ticker.mode.add_cultist(S.mind) + SSticker.mode.add_cultist(S.mind) var/obj/effect/proc_holder/spell/targeted/sense_victims/SV = new AddSpell(SV) var/datum/objective/new_objective = new /datum/objective diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index d19d2dd7cc5..0c7f46306af 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -4,7 +4,7 @@ var/list/datum/mind/syndicates = list() proc/issyndicate(mob/living/M as mob) - return istype(M) && M.mind && ticker && ticker.mode && (M.mind in ticker.mode.syndicates) + return istype(M) && M.mind && SSticker && SSticker.mode && (M.mind in SSticker.mode.syndicates) /datum/game_mode/nuclear name = "nuclear emergency" @@ -64,7 +64,7 @@ proc/issyndicate(mob/living/M as mob) /datum/game_mode/proc/remove_operative(datum/mind/operative_mind) if(operative_mind in syndicates) - ticker.mode.syndicates -= operative_mind + SSticker.mode.syndicates -= operative_mind operative_mind.special_role = null for(var/datum/objective/nuclear/O in operative_mind.objectives) operative_mind.objectives -= O @@ -73,7 +73,7 @@ proc/issyndicate(mob/living/M as mob) to_chat(operative_mind.current, "You have been turned into a robot! You are no longer a Syndicate operative.") else to_chat(operative_mind.current, "You have been brainwashed! You are no longer a Syndicate operative.") - ticker.mode.update_synd_icons_removed(operative_mind) + SSticker.mode.update_synd_icons_removed(operative_mind) //////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////// @@ -208,7 +208,7 @@ proc/issyndicate(mob/living/M as mob) P.stamp(stamp) qdel(stamp) - if(ticker.mode.config_tag=="nuclear") + if(SSticker.mode.config_tag=="nuclear") P.loc = synd_mind.current.loc else var/mob/living/carbon/human/H = synd_mind.current @@ -437,7 +437,7 @@ proc/issyndicate(mob/living/M as mob) /datum/game_mode/nuclear/set_scoreboard_gvars() var/foecount = 0 - for(var/datum/mind/M in ticker.mode.syndicates) + for(var/datum/mind/M in SSticker.mode.syndicates) foecount++ if(!M || !M.current) score_opkilled++ @@ -490,7 +490,7 @@ proc/issyndicate(mob/living/M as mob) var/diskdat = "" var/bombdat = null - for(var/datum/mind/M in ticker.mode.syndicates) + for(var/datum/mind/M in SSticker.mode.syndicates) foecount++ for(var/mob/living/C in world) diff --git a/code/game/gamemodes/nuclear/nuclear_challenge.dm b/code/game/gamemodes/nuclear/nuclear_challenge.dm index 45711bb52fc..35c26408c5b 100644 --- a/code/game/gamemodes/nuclear/nuclear_challenge.dm +++ b/code/game/gamemodes/nuclear/nuclear_challenge.dm @@ -21,7 +21,7 @@ return declaring_war = TRUE - var/are_you_sure = alert(user, "Consult your team carefully before you declare war on [station_name()]. Are you sure you want to alert the enemy crew? You have [-round((world.time-round_start_time - CHALLENGE_TIME_LIMIT)/10)] seconds to decide.", "Declare war?", "Yes", "No") + var/are_you_sure = alert(user, "Consult your team carefully before you declare war on [station_name()]. Are you sure you want to alert the enemy crew? You have [-round((world.time-SSticker.round_start_time - CHALLENGE_TIME_LIMIT)/10)] seconds to decide.", "Declare war?", "Yes", "No") declaring_war = FALSE if(!check_allowed(user)) @@ -88,7 +88,7 @@ if(!is_admin_level(user.z)) to_chat(user, "You have to be at your base to use this.") return FALSE - if((world.time - round_start_time) > CHALLENGE_TIME_LIMIT) // Only count after the round started + if((world.time - SSticker.round_start_time) > CHALLENGE_TIME_LIMIT) // Only count after the round started to_chat(user, "It's too late to declare hostilities. Your benefactors are already busy with other schemes. You'll have to make do with what you have on hand.") return FALSE for(var/obj/machinery/computer/shuttle/syndicate/S in GLOB.machines) diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 2e36488cc8a..09de3f917bd 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -354,8 +354,8 @@ var/bomb_set if(!lighthack) icon_state = "nuclearbomb3" playsound(src,'sound/machines/alarm.ogg',100,0,5) - if(ticker && ticker.mode) - ticker.mode.explosion_in_progress = 1 + if(SSticker && SSticker.mode) + SSticker.mode.explosion_in_progress = 1 sleep(100) enter_allowed = 0 @@ -368,17 +368,17 @@ var/bomb_set else off_station = 2 - if(ticker) - if(ticker.mode && ticker.mode.name == "nuclear emergency") + if(SSticker) + if(SSticker.mode && SSticker.mode.name == "nuclear emergency") var/obj/docking_port/mobile/syndie_shuttle = SSshuttle.getShuttle("syndicate") if(syndie_shuttle) - ticker.mode:syndies_didnt_escape = is_station_level(syndie_shuttle.z) - ticker.mode:nuke_off_station = off_station - ticker.station_explosion_cinematic(off_station,null) - if(ticker.mode) - ticker.mode.explosion_in_progress = 0 - if(ticker.mode.name == "nuclear emergency") - ticker.mode:nukes_left -- + SSticker.mode:syndies_didnt_escape = is_station_level(syndie_shuttle.z) + SSticker.mode:nuke_off_station = off_station + SSticker.station_explosion_cinematic(off_station,null) + if(SSticker.mode) + SSticker.mode.explosion_in_progress = 0 + if(SSticker.mode.name == "nuclear emergency") + SSticker.mode:nukes_left -- else if(off_station == 1) to_chat(world, "A nuclear device was set off, but the explosion was out of reach of the station!") else if(off_station == 2) @@ -386,10 +386,10 @@ var/bomb_set else to_chat(world, "The station was destoyed by the nuclear blast!") - ticker.mode.station_was_nuked = (off_station<2) //offstation==1 is a draw. the station becomes irradiated and needs to be evacuated. + SSticker.mode.station_was_nuked = (off_station<2) //offstation==1 is a draw. the station becomes irradiated and needs to be evacuated. //kinda shit but I couldn't get permission to do what I wanted to do. - if(!ticker.mode.check_finished())//If the mode does not deal with the nuke going off so just reboot because everyone is stuck as is + if(!SSticker.mode.check_finished())//If the mode does not deal with the nuke going off so just reboot because everyone is stuck as is world.Reboot("Station destroyed by Nuclear Device.", "end_error", "nuke - unhandled ending") return return diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm index 61986b34f94..d221c94d39f 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -273,7 +273,7 @@ var/mob/living/carbon/nearest_op = null /obj/item/pinpointer/operative/attack_self() - if(!usr.mind || !(usr.mind in ticker.mode.syndicates)) + if(!usr.mind || !(usr.mind in SSticker.mode.syndicates)) to_chat(usr, "AUTHENTICATION FAILURE. ACCESS DENIED.") return 0 if(!active) @@ -290,7 +290,7 @@ nearest_op = null //Resets nearest_op every time it scans var/closest_distance = 1000 for(var/mob/living/carbon/M in GLOB.mob_list) - if(M.mind && (M.mind in ticker.mode.syndicates)) + if(M.mind && (M.mind in SSticker.mode.syndicates)) if(get_dist(M, get_turf(src)) < closest_distance) //Actually points toward the nearest op, instead of a random one like it used to nearest_op = M diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 210b1bb786e..7c358ba951d 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -43,7 +43,7 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu /datum/objective/proc/find_target() var/list/possible_targets = list() - for(var/datum/mind/possible_target in ticker.minds) + for(var/datum/mind/possible_target in SSticker.minds) if(is_invalid_target(possible_target)) continue @@ -263,9 +263,9 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu return 0 if(!owner.current || owner.current.stat == DEAD) return 0 - if(ticker.force_ending) //This one isn't their fault, so lets just assume good faith + if(SSticker.force_ending) //This one isn't their fault, so lets just assume good faith return 1 - if(ticker.mode.station_was_nuked) //If they escaped the blast somehow, let them win + if(SSticker.mode.station_was_nuked) //If they escaped the blast somehow, let them win return 1 if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME) return 0 @@ -287,7 +287,7 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu /datum/objective/escape/escape_with_identity/find_target() var/list/possible_targets = list() //Copypasta because NO_DNA races, yay for snowflakes. - for(var/datum/mind/possible_target in ticker.minds) + for(var/datum/mind/possible_target in SSticker.minds) if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != DEAD) && possible_target.current.client) var/mob/living/carbon/human/H = possible_target.current if(!(NO_DNA in H.dna.species.species_traits)) @@ -452,19 +452,19 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu /datum/objective/absorb /datum/objective/absorb/proc/gen_amount_goal(var/lowbound = 4, var/highbound = 6) target_amount = rand (lowbound,highbound) - if(ticker) + if(SSticker) var/n_p = 1 //autowin - if(ticker.current_state == GAME_STATE_SETTING_UP) + if(SSticker.current_state == GAME_STATE_SETTING_UP) for(var/mob/new_player/P in GLOB.player_list) if(P.client && P.ready && P.mind != owner) if(P.client.prefs && (P.client.prefs.species == "Machine")) // Special check for species that can't be absorbed. No better solution. continue n_p++ - else if(ticker.current_state == GAME_STATE_PLAYING) + else if(SSticker.current_state == GAME_STATE_PLAYING) for(var/mob/living/carbon/human/P in GLOB.player_list) if(NO_DNA in P.dna.species.species_traits) continue - if(P.client && !(P.mind in ticker.mode.changelings) && P.mind!=owner) + if(P.client && !(P.mind in SSticker.mode.changelings) && P.mind!=owner) n_p++ target_amount = min(target_amount, n_p) @@ -531,7 +531,7 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu var/list/possible_targets = list() var/list/priority_targets = list() - for(var/datum/mind/possible_target in ticker.minds) + for(var/datum/mind/possible_target in SSticker.minds) if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != DEAD) && (possible_target.assigned_role != possible_target.special_role)) possible_targets += possible_target for(var/role in roles) @@ -627,7 +627,7 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu if(total_amount >= target_amount) return 1 - var/datum/game_mode/heist/H = ticker.mode + var/datum/game_mode/heist/H = SSticker.mode for(var/datum/mind/raider in H.raiders) if(raider.current) for(var/obj/O in raider.current.get_contents()) @@ -697,7 +697,7 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu S = I total_amount += S.get_amount() - var/datum/game_mode/heist/H = ticker.mode + var/datum/game_mode/heist/H = SSticker.mode for(var/datum/mind/raider in H.raiders) if(raider.current) for(var/obj/item/O in raider.current.get_contents()) @@ -714,7 +714,7 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu explanation_text = "Do not leave any Vox behind, alive or dead." /datum/objective/heist/inviolate_crew/check_completion() - var/datum/game_mode/heist/H = ticker.mode + var/datum/game_mode/heist/H = SSticker.mode if(H.is_raider_crew_safe()) return 1 return 0 @@ -726,7 +726,7 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu var/vox_allowed_kills = 3 // The number of people the vox can accidently kill. Mostly a counter to people killing themselves if a raider touches them to force fail. var/vox_total_kills = 0 - var/datum/game_mode/heist/H = ticker.mode + var/datum/game_mode/heist/H = SSticker.mode for(var/datum/mind/raider in H.raiders) vox_total_kills += raider.kills.len // Kills are listed in the mind; uses this to calculate vox kills diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 7cab3de5aa1..9f7e14ccef2 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -87,7 +87,7 @@ if(check_counter >= 5) if(!finished) check_heads() - ticker.mode.check_win() + SSticker.mode.check_win() check_counter = 0 return FALSE @@ -369,7 +369,7 @@ /datum/game_mode/revolution/set_scoreboard_gvars() var/foecount = 0 - for(var/datum/mind/M in ticker.mode.head_revolutionaries) + for(var/datum/mind/M in SSticker.mode.head_revolutionaries) foecount++ if(!M || !M.current) score_opkilled++ @@ -408,10 +408,10 @@ var/comcount = 0 var/revcount = 0 var/loycount = 0 - for(var/datum/mind/M in ticker.mode:head_revolutionaries) + for(var/datum/mind/M in SSticker.mode:head_revolutionaries) if(M.current && M.current.stat != DEAD) foecount++ - for(var/datum/mind/M in ticker.mode:revolutionaries) + for(var/datum/mind/M in SSticker.mode:revolutionaries) if(M.current && M.current.stat != DEAD) revcount++ for(var/mob/living/carbon/human/player in world) @@ -421,7 +421,7 @@ if(player.stat != DEAD) comcount++ else - if(player.mind in ticker.mode.revolutionaries) continue + if(player.mind in SSticker.mode.revolutionaries) continue loycount++ for(var/mob/living/silicon/X in world) diff --git a/code/game/gamemodes/scoreboard.dm b/code/game/gamemodes/scoreboard.dm index bd17175eaa2..379b4fbdcd9 100644 --- a/code/game/gamemodes/scoreboard.dm +++ b/code/game/gamemodes/scoreboard.dm @@ -1,9 +1,9 @@ -/datum/controller/gameticker/proc/scoreboard() +/datum/controller/subsystem/ticker/proc/scoreboard() //Print a list of antagonists to the server log var/list/total_antagonists = list() //Look into all mobs in world, dead or alive - for(var/datum/mind/Mind in minds) + for(var/datum/mind/Mind in SSticker.minds) var/temprole = Mind.special_role if(temprole) //if they are an antagonist of some sort. if(temprole in total_antagonists) //If the role exists already, add the name to it @@ -66,8 +66,8 @@ score_dmgestjob = E.job score_dmgestkey = E.key - if(ticker && ticker.mode) - ticker.mode.set_scoreboard_gvars() + if(SSticker && SSticker.mode) + SSticker.mode.set_scoreboard_gvars() // Check station's power levels @@ -147,7 +147,7 @@ E.scorestats() // A recursive function to properly determine the wealthiest escapee -/datum/controller/gameticker/proc/get_score_container_worth(atom/C, level=0) +/datum/controller/subsystem/ticker/proc/get_score_container_worth(atom/C, level=0) if(level >= 5) // in case the containers recurse or something return 0 @@ -171,8 +171,8 @@ /mob/proc/scorestats() var/dat = "Round Statistics and Score

" - if(ticker && ticker.mode) - dat += ticker.mode.get_scoreboard_stats() + if(SSticker && SSticker.mode) + dat += SSticker.mode.get_scoreboard_stats() dat += {" General Statistics
@@ -208,7 +208,7 @@ else dat += "No-one escaped!
" - dat += ticker.mode.declare_job_completion() + dat += SSticker.mode.declare_job_completion() dat += {"

diff --git a/code/game/gamemodes/setupgame.dm b/code/game/gamemodes/setupgame.dm index 0c16e88279b..78e6cea4987 100644 --- a/code/game/gamemodes/setupgame.dm +++ b/code/game/gamemodes/setupgame.dm @@ -142,12 +142,12 @@ qdel(F) continue else - ticker.factions.Add(F) - ticker.availablefactions.Add(F) + SSticker.factions.Add(F) + SSticker.availablefactions.Add(F) // Populate the syndicate coalition: - for(var/datum/faction/syndicate/S in ticker.factions) - ticker.syndicate_coalition.Add(S) + for(var/datum/faction/syndicate/S in SSticker.factions) + SSticker.syndicate_coalition.Add(S) /proc/setupcult() var/static/datum/cult_info/picked_cult // Only needs to get picked once diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm index 230f797626d..b580f88c0b7 100644 --- a/code/game/gamemodes/shadowling/shadowling.dm +++ b/code/game/gamemodes/shadowling/shadowling.dm @@ -56,15 +56,15 @@ Made by Xhuis var/thrall_ratio = 1 /proc/is_thrall(var/mob/living/M) - return istype(M) && M.mind && ticker && ticker.mode && (M.mind in ticker.mode.shadowling_thralls) + return istype(M) && M.mind && SSticker && SSticker.mode && (M.mind in SSticker.mode.shadowling_thralls) /proc/is_shadow_or_thrall(var/mob/living/M) - return istype(M) && M.mind && ticker && ticker.mode && ((M.mind in ticker.mode.shadowling_thralls) || (M.mind in ticker.mode.shadows)) + return istype(M) && M.mind && SSticker && SSticker.mode && ((M.mind in SSticker.mode.shadowling_thralls) || (M.mind in SSticker.mode.shadows)) /proc/is_shadow(var/mob/living/M) - return istype(M) && M.mind && ticker && ticker.mode && (M.mind in ticker.mode.shadows) + return istype(M) && M.mind && SSticker && SSticker.mode && (M.mind in SSticker.mode.shadows) /datum/game_mode/shadowling diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index ea95f62af57..2515de135fa 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -216,11 +216,11 @@ /obj/effect/proc_holder/spell/targeted/enthrall/cast(list/targets, mob/user = usr) var/mob/living/carbon/human/ling = user - listclearnulls(ticker.mode.shadowling_thralls) - if(!(ling.mind in ticker.mode.shadows)) + listclearnulls(SSticker.mode.shadowling_thralls) + if(!(ling.mind in SSticker.mode.shadows)) return if(!isshadowling(ling)) - if(ticker.mode.shadowling_thralls.len >= 5) + if(SSticker.mode.shadowling_thralls.len >= 5) charge_counter = charge_max return for(var/mob/living/carbon/human/target in targets) @@ -291,7 +291,7 @@ target.visible_message("[target] looks to have experienced a revelation!", \ "False faces all dark not real not real not--") target.setOxyLoss(0) //In case the shadowling was choking them out - ticker.mode.add_thrall(target.mind) + SSticker.mode.add_thrall(target.mind) target.mind.special_role = SPECIAL_ROLE_SHADOWLING_THRALL /obj/effect/proc_holder/spell/targeted/shadowling_regenarmor //Resets a shadowling's species to normal, removes genetic defects, and re-equips their armor @@ -345,7 +345,7 @@ return for(var/mob/living/target in targets) var/thralls = 0 - var/victory_threshold = ticker.mode.required_thralls + var/victory_threshold = SSticker.mode.required_thralls var/mob/M to_chat(target, "You focus your telepathic energies abound, harnessing and drawing together the strength of your thralls.") @@ -359,24 +359,24 @@ to_chat(target, "Your concentration has been broken. The mental hooks you have sent out now retract into your mind.") return - if(thralls >= CEILING(3 * ticker.mode.thrall_ratio, 1) && !screech_acquired) + if(thralls >= CEILING(3 * SSticker.mode.thrall_ratio, 1) && !screech_acquired) screech_acquired = 1 to_chat(target, "The power of your thralls has granted you the Sonic Screech ability. This ability will shatter nearby windows and deafen enemies, plus stunning silicon lifeforms.") target.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/unearthly_screech(null)) - if(thralls >= CEILING(5 * ticker.mode.thrall_ratio, 1) && !blind_smoke_acquired) + if(thralls >= CEILING(5 * SSticker.mode.thrall_ratio, 1) && !blind_smoke_acquired) blind_smoke_acquired = 1 to_chat(target, "The power of your thralls has granted you the Blinding Smoke ability. \ It will create a choking cloud that will blind any non-thralls who enter.") target.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/blindness_smoke(null)) - if(thralls >= CEILING(7 * ticker.mode.thrall_ratio, 1) && !nullChargeAcquired) + if(thralls >= CEILING(7 * SSticker.mode.thrall_ratio, 1) && !nullChargeAcquired) nullChargeAcquired = 1 to_chat(user, "The power of your thralls has granted you the Null Charge ability. This ability will drain an APC's contents to the void, preventing it from recharging \ or sending power until repaired.") target.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/null_charge(null)) - if(thralls >= CEILING(9 * ticker.mode.thrall_ratio, 1) && !reviveThrallAcquired) + if(thralls >= CEILING(9 * SSticker.mode.thrall_ratio, 1) && !reviveThrallAcquired) reviveThrallAcquired = 1 to_chat(target, "The power of your thralls has granted you the Black Recuperation ability. \ This will, after a short time, bring a dead thrall completely back to life with no bodily defects.") @@ -578,7 +578,7 @@ charge_counter = charge_max return var/empowered_thralls = 0 - for(var/datum/mind/M in ticker.mode.shadowling_thralls) + for(var/datum/mind/M in SSticker.mode.shadowling_thralls) if(!ishuman(M.current)) return var/mob/living/carbon/human/H = M.current @@ -767,7 +767,7 @@ to_chat(user, "You instantly rearrange [target]'s memories, hyptonitizing [target.p_them()] into a thrall.") to_chat(target, "An agonizing spike of pain drives into your mind, and--") - ticker.mode.add_thrall(target.mind) + SSticker.mode.add_thrall(target.mind) target.mind.special_role = SPECIAL_ROLE_SHADOWLING_THRALL target.add_language("Shadowling Hivemind") diff --git a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm index 29a2c9aadca..772947f0618 100644 --- a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm @@ -179,9 +179,9 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N H.invisibility = 60 //This is pretty bad, but is also necessary for the shuttle call to function properly H.loc = A sleep(50) - if(!ticker.mode.shadowling_ascended) + if(!SSticker.mode.shadowling_ascended) SSshuttle.emergency.request(null, 0.3) SSshuttle.emergency.canRecall = FALSE - ticker.mode.shadowling_ascended = 1 + SSticker.mode.shadowling_ascended = 1 A.mind.RemoveSpell(src) qdel(H) diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index de7ce59eaa2..d956e6d76b6 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -348,14 +348,14 @@ /datum/game_mode/proc/remove_traitor(datum/mind/traitor_mind) if(traitor_mind in traitors) - ticker.mode.traitors -= traitor_mind + SSticker.mode.traitors -= traitor_mind traitor_mind.special_role = null traitor_mind.current.create_attack_log("De-traitored") if(issilicon(traitor_mind.current)) to_chat(traitor_mind.current, "You have been turned into a robot! You are no longer a traitor.") else to_chat(traitor_mind.current, "You have been brainwashed! You are no longer a traitor.") - ticker.mode.update_traitor_icons_removed(traitor_mind) + SSticker.mode.update_traitor_icons_removed(traitor_mind) /datum/game_mode/proc/update_traitor_icons_added(datum/mind/traitor_mind) var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_TRAITOR] diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm index 18d36ad57f3..9dec5b573e2 100644 --- a/code/game/gamemodes/vampire/vampire.dm +++ b/code/game/gamemodes/vampire/vampire.dm @@ -288,7 +288,7 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha else H.LAssailant = owner while(do_mob(owner, H, 50)) - if(!(owner.mind in ticker.mode.vampires)) + if(!(owner.mind in SSticker.mode.vampires)) to_chat(owner, "Your fangs have disappeared!") return old_bloodtotal = bloodtotal @@ -337,7 +337,7 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha /datum/game_mode/proc/remove_vampire(datum/mind/vampire_mind) if(vampire_mind in vampires) - ticker.mode.vampires -= vampire_mind + SSticker.mode.vampires -= vampire_mind vampire_mind.special_role = null vampire_mind.current.create_attack_log("De-vampired") if(vampire_mind.vampire) @@ -347,7 +347,7 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha to_chat(vampire_mind.current, "You have been turned into a robot! You can feel your powers fading away...") else to_chat(vampire_mind.current, "You have been brainwashed! You are no longer a vampire.") - ticker.mode.update_vampire_icons_removed(vampire_mind) + SSticker.mode.update_vampire_icons_removed(vampire_mind) //prepare for copypaste /datum/game_mode/proc/update_vampire_icons_added(datum/mind/vampire_mind) diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index 5e7b8f9a237..01885b21e14 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -276,7 +276,7 @@ /proc/isvampirethrall(mob/living/M as mob) - return istype(M) && M.mind && ticker && ticker.mode && (M.mind in ticker.mode.vampire_enthralled) + return istype(M) && M.mind && SSticker && SSticker.mode && (M.mind in SSticker.mode.vampire_enthralled) /obj/effect/proc_holder/spell/vampire/targetted/enthrall name = "Enthrall (300)" @@ -315,11 +315,11 @@ if(!C.mind) to_chat(user, "[C.name]'s mind is not there for you to enthrall.") return 0 - if(enthrall_safe || ( C.mind in ticker.mode.vampires )||( C.mind.vampire )||( C.mind in ticker.mode.vampire_enthralled )) + if(enthrall_safe || ( C.mind in SSticker.mode.vampires )||( C.mind.vampire )||( C.mind in SSticker.mode.vampire_enthralled )) C.visible_message("[C] seems to resist the takeover!", "You feel a familiar sensation in your skull that quickly dissipates.") return 0 if(!affects(C)) - C.visible_message("[C] seems to resist the takeover!", "Your faith of [ticker.Bible_deity_name] has kept your mind clear of all evil.") + C.visible_message("[C] seems to resist the takeover!", "Your faith of [SSticker.Bible_deity_name] has kept your mind clear of all evil.") return 0 if(!ishuman(C)) to_chat(user, "You can only enthrall humans!") @@ -330,21 +330,21 @@ if(!istype(H)) return 0 var/ref = "\ref[user.mind]" - if(!(ref in ticker.mode.vampire_thralls)) - ticker.mode.vampire_thralls[ref] = list(H.mind) + if(!(ref in SSticker.mode.vampire_thralls)) + SSticker.mode.vampire_thralls[ref] = list(H.mind) else - ticker.mode.vampire_thralls[ref] += H.mind + SSticker.mode.vampire_thralls[ref] += H.mind - ticker.mode.update_vampire_icons_added(H.mind) - ticker.mode.update_vampire_icons_added(user.mind) + SSticker.mode.update_vampire_icons_added(H.mind) + SSticker.mode.update_vampire_icons_added(user.mind) var/datum/mindslaves/slaved = user.mind.som H.mind.som = slaved slaved.serv += H slaved.add_serv_hud(user.mind, "vampire")//handles master servent icons slaved.add_serv_hud(H.mind, "vampthrall") - ticker.mode.vampire_enthralled.Add(H.mind) - ticker.mode.vampire_enthralled[H.mind] = user.mind + SSticker.mode.vampire_enthralled.Add(H.mind) + SSticker.mode.vampire_enthralled[H.mind] = user.mind H.mind.special_role = SPECIAL_ROLE_VAMPIRE_THRALL to_chat(H, "You have been Enthralled by [user]. Follow [user.p_their()] every command.") to_chat(user, "You have successfully Enthralled [H]. If [H.p_they()] refuse[H.p_s()] to do as you say just adminhelp.") diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 243f4e3a3fa..cb891ea6b11 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -99,9 +99,9 @@ new_objective:target = H:mind new_objective.explanation_text = "Protect [H.real_name], the wizard." M.mind.objectives += new_objective - ticker.mode.traitors += M.mind + SSticker.mode.traitors += M.mind M.mind.special_role = SPECIAL_ROLE_WIZARD_APPRENTICE - ticker.mode.update_wiz_icons_added(M.mind) + SSticker.mode.update_wiz_icons_added(M.mind) M.faction = list("wizard") else used = 0 @@ -283,7 +283,7 @@ var/global/list/multiverse = list() usr.mind.objectives += hijack_objective hijack_objective.explanation_text = "Ensure only [usr.real_name] and [usr.p_their()] copies are on the shuttle!" to_chat(usr, "Objective #[1]: [hijack_objective.explanation_text]") - ticker.mode.traitors += usr.mind + SSticker.mode.traitors += usr.mind usr.mind.special_role = "[usr.real_name] Prime" evil = TRUE else @@ -293,7 +293,7 @@ var/global/list/multiverse = list() new_objective.explanation_text = "Survive, and help defend the innocent from the mobs of multiverse clones." to_chat(usr, "Objective #[1]: [new_objective.explanation_text]") usr.mind.objectives += new_objective - ticker.mode.traitors += usr.mind + SSticker.mode.traitors += usr.mind usr.mind.special_role = "[usr.real_name] Prime" evil = FALSE else diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index 3e22f3f84df..a71b51c58f0 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -273,11 +273,11 @@ Z.key = A.key Z.faction |= "\ref[U]" if(iscultist(U)) - if(ticker.mode.name == "cult") - ticker.mode:add_cultist(Z.mind) + if(SSticker.mode.name == "cult") + SSticker.mode:add_cultist(Z.mind) else - ticker.mode.cult+=Z.mind - ticker.mode.update_cult_icons_added(Z.mind) + SSticker.mode.cult+=Z.mind + SSticker.mode.update_cult_icons_added(Z.mind) qdel(T) to_chat(Z, "You are a Juggernaut. Though slow, your shell can withstand extreme punishment, create shield walls and even deflect energy weapons, and rip apart enemies and walls alike.") to_chat(Z, "You are still bound to serve your creator, follow [U.p_their()] orders and help [U.p_them()] complete [U.p_their()] goals at all costs.") @@ -289,11 +289,11 @@ Z.key = A.key Z.faction |= "\ref[U]" if(iscultist(U)) - if(ticker.mode.name == "cult") - ticker.mode:add_cultist(Z.mind) + if(SSticker.mode.name == "cult") + SSticker.mode:add_cultist(Z.mind) else - ticker.mode.cult+=Z.mind - ticker.mode.update_cult_icons_added(Z.mind) + SSticker.mode.cult+=Z.mind + SSticker.mode.update_cult_icons_added(Z.mind) qdel(T) to_chat(Z, "You are a Wraith. Though relatively fragile, you are fast, deadly, and even able to phase through walls.") to_chat(Z, "You are still bound to serve your creator, follow [U.p_their()] orders and help [U.p_them()] complete [U.p_their()] goals at all costs.") @@ -305,11 +305,11 @@ Z.key = A.key Z.faction |= "\ref[U]" if(iscultist(U)) - if(ticker.mode.name == "cult") - ticker.mode:add_cultist(Z.mind) + if(SSticker.mode.name == "cult") + SSticker.mode:add_cultist(Z.mind) else - ticker.mode.cult+=Z.mind - ticker.mode.update_cult_icons_added(Z.mind) + SSticker.mode.cult+=Z.mind + SSticker.mode.update_cult_icons_added(Z.mind) qdel(T) to_chat(Z, "You are an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, use magic missile, repair allied constructs (by clicking on them), and most important of all create new constructs (Use your Artificer spell to summon a new construct shell and Summon Soulstone to create a new soulstone).") to_chat(Z, "You are still bound to serve your creator, follow [U.p_their()] orders and help [U.p_them()] complete [U.p_their()] goals at all costs.") @@ -326,11 +326,11 @@ newstruct.faction |= "\ref[stoner]" newstruct.key = target.key if(stoner && iscultist(stoner) || cultoverride) - if(ticker.mode.name == "cult") - ticker.mode:add_cultist(newstruct.mind) + if(SSticker.mode.name == "cult") + SSticker.mode:add_cultist(newstruct.mind) else - ticker.mode.cult+=newstruct.mind - ticker.mode.update_cult_icons_added(newstruct.mind) + SSticker.mode.cult+=newstruct.mind + SSticker.mode.update_cult_icons_added(newstruct.mind) if(stoner && iswizard(stoner)) to_chat(newstruct, "You are still bound to serve your creator, follow [stoner.p_their()] orders and help [stoner.p_them()] complete [stoner.p_their()] goals at all costs.") else if(stoner && iscultist(stoner)) @@ -357,7 +357,7 @@ if(U) S.faction |= "\ref[U]" //Add the master as a faction, allowing inter-mob cooperation if(U && iscultist(U)) - ticker.mode.add_cultist(S.mind, 0) + SSticker.mode.add_cultist(S.mind, 0) S.cancel_camera() name = "soulstone: Shade of [T.real_name]" icon_state = "soulstone2" diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 0a1340d885b..29be588fe68 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -475,7 +475,7 @@ cost = 0 /datum/spellbook_entry/summon/ghosts/IsAvailible() - if(!ticker.mode) + if(!SSticker.mode) return FALSE else return TRUE @@ -495,9 +495,9 @@ log_name = "SG" /datum/spellbook_entry/summon/guns/IsAvailible() - if(!ticker.mode) // In case spellbook is placed on map + if(!SSticker.mode) // In case spellbook is placed on map return 0 - if(ticker.mode.name == "ragin' mages") + if(SSticker.mode.name == "ragin' mages") return 0 else return 1 @@ -518,9 +518,9 @@ log_name = "SU" /datum/spellbook_entry/summon/magic/IsAvailible() - if(!ticker.mode) // In case spellbook is placed on map + if(!SSticker.mode) // In case spellbook is placed on map return 0 - if(ticker.mode.name == "ragin' mages") + if(SSticker.mode.name == "ragin' mages") return 0 else return 1 diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index b249ebe8520..4a5bf190e04 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -58,7 +58,7 @@ /datum/game_mode/proc/remove_wizard(datum/mind/wizard_mind) if(wizard_mind in wizards) - ticker.mode.wizards -= wizard_mind + SSticker.mode.wizards -= wizard_mind wizard_mind.special_role = null wizard_mind.current.create_attack_log("De-wizarded") wizard_mind.current.spellremove(wizard_mind.current) @@ -67,7 +67,7 @@ to_chat(wizard_mind.current, "You have been turned into a robot! You can feel your magical powers fading away...") else to_chat(wizard_mind.current, "You have been brainwashed! You are no longer a wizard.") - ticker.mode.update_wiz_icons_removed(wizard_mind) + SSticker.mode.update_wiz_icons_removed(wizard_mind) /datum/game_mode/proc/update_wiz_icons_added(datum/mind/wiz_mind) var/datum/atom_hud/antag/wizhud = huds[ANTAG_HUD_WIZ] @@ -282,4 +282,4 @@ Made a proc so this is not repeated 14 (or more) times.*/ return 1 /proc/iswizard(mob/living/M as mob) - return istype(M) && M.mind && ticker && ticker.mode && (M.mind in ticker.mode.wizards) + return istype(M) && M.mind && SSticker && SSticker.mode && (M.mind in SSticker.mode.wizards) diff --git a/code/game/jobs/job/support_chaplain.dm b/code/game/jobs/job/support_chaplain.dm index 73ec2483af1..ac393e277a8 100644 --- a/code/game/jobs/job/support_chaplain.dm +++ b/code/game/jobs/job/support_chaplain.dm @@ -158,11 +158,11 @@ to_chat(H, "Welp, out of time, buddy. You're stuck. Next time choose faster.") accepted = 1 - if(ticker) - ticker.Bible_icon_state = B.icon_state - ticker.Bible_item_state = B.item_state - ticker.Bible_name = B.name - ticker.Bible_deity_name = B.deity_name + if(SSticker) + SSticker.Bible_icon_state = B.icon_state + SSticker.Bible_item_state = B.item_state + SSticker.Bible_name = B.name + SSticker.Bible_deity_name = B.deity_name feedback_set_details("religion_deity", "[new_deity]") feedback_set_details("religion_book", "[new_book_style]") diff --git a/code/game/jobs/job_objective.dm b/code/game/jobs/job_objective.dm index 90bac6d8383..4456bb571e5 100644 --- a/code/game/jobs/job_objective.dm +++ b/code/game/jobs/job_objective.dm @@ -44,7 +44,7 @@ /datum/game_mode/proc/declare_job_completion() var/text = "
Job Completion" - for(var/datum/mind/employee in ticker.minds) + for(var/datum/mind/employee in SSticker.minds) if(!employee.job_objectives.len)//If the employee had no objectives, don't need to process this. continue diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 7ce515365ae..80fed112c7a 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -417,24 +417,24 @@ /obj/machinery/clonepod/proc/update_clone_antag(var/mob/living/carbon/human/H) // Check to see if the clone's mind is an antagonist of any kind and handle them accordingly to make sure they get their spells, HUD/whatever else back. callHook("clone", list(H)) - if((H.mind in ticker.mode:revolutionaries) || (H.mind in ticker.mode:head_revolutionaries)) - ticker.mode.update_rev_icons_added() //So the icon actually appears - if(H.mind in ticker.mode.syndicates) - ticker.mode.update_synd_icons_added() - if(H.mind in ticker.mode.cult) - ticker.mode.add_cultist(occupant.mind) - ticker.mode.update_cult_icons_added() //So the icon actually appears - ticker.mode.update_cult_comms_added(H.mind) //So the comms actually appears - if((H.mind in ticker.mode.implanter) || (H.mind in ticker.mode.implanted)) - ticker.mode.update_traitor_icons_added(H.mind) //So the icon actually appears + if((H.mind in SSticker.mode:revolutionaries) || (H.mind in SSticker.mode:head_revolutionaries)) + SSticker.mode.update_rev_icons_added() //So the icon actually appears + if(H.mind in SSticker.mode.syndicates) + SSticker.mode.update_synd_icons_added() + if(H.mind in SSticker.mode.cult) + SSticker.mode.add_cultist(occupant.mind) + SSticker.mode.update_cult_icons_added() //So the icon actually appears + SSticker.mode.update_cult_comms_added(H.mind) //So the comms actually appears + if((H.mind in SSticker.mode.implanter) || (H.mind in SSticker.mode.implanted)) + SSticker.mode.update_traitor_icons_added(H.mind) //So the icon actually appears if(H.mind.vampire) H.mind.vampire.update_owner(H) - if((H.mind in ticker.mode.vampire_thralls) || (H.mind in ticker.mode.vampire_enthralled)) - ticker.mode.update_vampire_icons_added(H.mind) - if(H.mind in ticker.mode.changelings) - ticker.mode.update_change_icons_added(H.mind) - if((H.mind in ticker.mode.shadowling_thralls) || (H.mind in ticker.mode.shadows)) - ticker.mode.update_shadow_icons_added(H.mind) + if((H.mind in SSticker.mode.vampire_thralls) || (H.mind in SSticker.mode.vampire_enthralled)) + SSticker.mode.update_vampire_icons_added(H.mind) + if(H.mind in SSticker.mode.changelings) + SSticker.mode.update_change_icons_added(H.mind) + if((H.mind in SSticker.mode.shadowling_thralls) || (H.mind in SSticker.mode.shadows)) + SSticker.mode.update_shadow_icons_added(H.mind) //Put messages in the connected computer's temp var for display. /obj/machinery/clonepod/proc/connected_message(message) diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm index 67f1dba85f0..38cc0b56866 100644 --- a/code/game/machinery/computer/ai_core.dm +++ b/code/game/machinery/computer/ai_core.dm @@ -134,8 +134,8 @@ return if(P:brainmob.mind) - ticker.mode.remove_cultist(P:brainmob.mind, 1) - ticker.mode.remove_revolutionary(P:brainmob.mind, 1) + SSticker.mode.remove_cultist(P:brainmob.mind, 1) + SSticker.mode.remove_revolutionary(P:brainmob.mind, 1) user.drop_item() P.loc = src diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index e369b203759..d064dbda743 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -439,7 +439,7 @@ to_chat(user, "The emergency shuttle may not be called while returning to Central Command.") return - if(ticker.mode.name == "blob") + if(SSticker.mode.name == "blob") to_chat(user, "Under directive 7-10, [station_name()] is quarantined until further notice.") return @@ -464,7 +464,7 @@ to_chat(user, "The shuttle is refueling. Please wait another [round((54000-world.time)/600)] minutes before trying again.") return - if(ticker.mode.name == "epidemic") + if(SSticker.mode.name == "epidemic") to_chat(user, "Under directive 7-10, [station_name()] is quarantined until further notice.") return @@ -481,7 +481,7 @@ /proc/cancel_call_proc(var/mob/user) - if(ticker.mode.name == "meteor") + if(SSticker.mode.name == "meteor") return if(SSshuttle.cancelEvac(user)) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 9674a60c7d4..0ab3d01ddf1 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -53,7 +53,7 @@ var/dat - if(!( ticker )) + if(!( SSticker )) return dat += "

[storage_name]
" @@ -364,13 +364,13 @@ // Skip past any cult sacrifice objective using this person if(GAMEMODE_IS_CULT && is_sacrifice_target(occupant.mind)) - var/datum/game_mode/cult/cult_mode = ticker.mode + var/datum/game_mode/cult/cult_mode = SSticker.mode var/list/p_s_t = cult_mode.get_possible_sac_targets() if(p_s_t.len) cult_mode.sacrifice_target = pick(p_s_t) - for(var/datum/mind/H in ticker.mode.cult) + for(var/datum/mind/H in SSticker.mode.cult) if(H.current) - to_chat(H.current, "[ticker.cultdat.entity_name] murmurs, [occupant] is beyond your reach. Sacrifice [cult_mode.sacrifice_target.current] instead...
") + to_chat(H.current, "[SSticker.cultdat.entity_name] murmurs, [occupant] is beyond your reach. Sacrifice [cult_mode.sacrifice_target.current] instead...") else cult_mode.bypass_phase() @@ -403,8 +403,8 @@ occupant.mind.objectives.Cut() occupant.mind.special_role = null else - if(ticker.mode.name == "AutoTraitor") - var/datum/game_mode/traitor/autotraitor/current_mode = ticker.mode + if(SSticker.mode.name == "AutoTraitor") + var/datum/game_mode/traitor/autotraitor/current_mode = SSticker.mode current_mode.possible_traitors.Remove(occupant) // Delete them from datacore. diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 21ff909796f..f382af5259a 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -77,7 +77,7 @@ else do_animate("deny") return - if(!ticker) + if(!SSticker) return var/mob/living/M = AM if(!M.restrained() && M.mob_size > MOB_SIZE_TINY && (!(isrobot(M) && M.stat))) diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index 6422e94dc74..1a63371915b 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -57,8 +57,8 @@ return if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/N = M - ticker.mode.equip_traitor(N) - ticker.mode.traitors += N.mind + SSticker.mode.equip_traitor(N) + SSticker.mode.traitors += N.mind N.mind.special_role = SPECIAL_ROLE_TRAITOR var/objective = "Free Objective" switch(rand(1,100)) diff --git a/code/game/magic/Uristrunes.dm b/code/game/magic/Uristrunes.dm index 1a242594bfe..e0621db3d9b 100644 --- a/code/game/magic/Uristrunes.dm +++ b/code/game/magic/Uristrunes.dm @@ -1,7 +1,7 @@ /proc/get_rune_cult(word) var/animated - if(word && !(ticker.cultdat.theme == "fire" || ticker.cultdat.theme == "death")) + if(word && !(SSticker.cultdat.theme == "fire" || SSticker.cultdat.theme == "death")) animated = 1 else animated = 0 @@ -18,11 +18,11 @@ var/runetype = "rune" var/lookup = "[symbol_bits]-[animated]" - if(!ticker.mode)//work around for maps with runes and cultdat is not loaded all the way + if(!SSticker.mode)//work around for maps with runes and cultdat is not loaded all the way runetype = "rune" - else if(ticker.cultdat.theme == "fire") + else if(SSticker.cultdat.theme == "fire") runetype = "fire-rune" - else if(ticker.cultdat.theme == "death") + else if(SSticker.cultdat.theme == "death") runetype = "death-rune" diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 7cfd8bbec45..45bfb37f035 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -28,7 +28,7 @@ var/global/list/image/splatter_cache = list() . = ..() update_icon() if(GAMEMODE_IS_CULT) - var/datum/game_mode/cult/mode_ticker = ticker.mode + var/datum/game_mode/cult/mode_ticker = SSticker.mode var/turf/T = get_turf(src) if(T && (is_station_level(T.z)))//F I V E T I L E S if(!(T in mode_ticker.bloody_floors)) @@ -48,7 +48,7 @@ var/global/list/image/splatter_cache = list() /obj/effect/decal/cleanable/blood/Destroy() if(GAMEMODE_IS_CULT) - var/datum/game_mode/cult/mode_ticker = ticker.mode + var/datum/game_mode/cult/mode_ticker = SSticker.mode var/turf/T = get_turf(src) if(T && (is_station_level(T.z))) mode_ticker.bloody_floors -= T diff --git a/code/game/objects/effects/effect_system/effect_system.dm b/code/game/objects/effects/effect_system/effect_system.dm index 1231c8136fa..04ea1dc0841 100644 --- a/code/game/objects/effects/effect_system/effect_system.dm +++ b/code/game/objects/effects/effect_system/effect_system.dm @@ -14,11 +14,11 @@ would spawn and follow the beaker, even if it is carried or thrown. /obj/effect/particle_effect/New() ..() - if(ticker) + if(SSticker) cameranet.updateVisibility(src) /obj/effect/particle_effect/Destroy() - if(ticker) + if(SSticker) cameranet.updateVisibility(src) return ..() diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 2fb1aae8ff0..a618383a819 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -155,14 +155,14 @@ /obj/item/flash/proc/terrible_conversion_proc(mob/M, mob/user) if(ishuman(M) && ishuman(user) && M.stat != DEAD) - if(user.mind && (user.mind in ticker.mode.head_revolutionaries)) + if(user.mind && (user.mind in SSticker.mode.head_revolutionaries)) if(M.client) if(M.stat == CONSCIOUS) M.mind_initialize() //give them a mind datum if they don't have one. var/resisted if(!ismindshielded(M)) - if(user.mind in ticker.mode.head_revolutionaries) - if(ticker.mode.add_revolutionary(M.mind)) + if(user.mind in SSticker.mode.head_revolutionaries) + if(SSticker.mode.add_revolutionary(M.mind)) times_used -- //Flashes less likely to burn out for headrevs when used for conversion else resisted = 1 diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index e65c9a683a7..b051b2f732e 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -51,7 +51,7 @@ if(((CLUMSY in user.mutations) || user.getBrainLoss() >= 60) && prob(50)) //too dumb to use flashlight properly return ..() //just hit them in the head - if(!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") //don't have dexterity + if(!(istype(user, /mob/living/carbon/human) || SSticker) && SSticker.mode.name != "monkey") //don't have dexterity to_chat(user, "You don't have the dexterity to do this!") return diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm index e5bbeef7686..c6cfe03a151 100644 --- a/code/game/objects/items/devices/uplinks.dm +++ b/code/game/objects/items/devices/uplinks.dm @@ -31,8 +31,8 @@ var/list/world_uplinks = list() /obj/item/uplink/New() ..() - welcome = ticker.mode.uplink_welcome - uses = ticker.mode.uplink_uses + welcome = SSticker.mode.uplink_welcome + uses = SSticker.mode.uplink_uses uplink_items = get_uplink_items() world_uplinks += src diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 65f504b4ae0..5892381a993 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -245,7 +245,7 @@ to_chat(user, "Sticking a dead [M] into the frame would sort of defeat the purpose.") return - if(M.brainmob.mind in ticker.mode.head_revolutionaries) + if(M.brainmob.mind in SSticker.mode.head_revolutionaries) to_chat(user, "The frame's firmware lets out a shrill sound, and flashes 'Abnormal Memory Engram'. It refuses to accept the [M].") return diff --git a/code/game/objects/items/weapons/holy_weapons.dm b/code/game/objects/items/weapons/holy_weapons.dm index a20dd86c897..68e731b8c44 100644 --- a/code/game/objects/items/weapons/holy_weapons.dm +++ b/code/game/objects/items/weapons/holy_weapons.dm @@ -443,15 +443,15 @@ return ..() if(!user.mind || !user.mind.isholy) - to_chat(user, "You are not close enough with [ticker.Bible_deity_name] to use [src].") + to_chat(user, "You are not close enough with [SSticker.Bible_deity_name] to use [src].") return if(praying) to_chat(user, "You are already using [src].") return - user.visible_message("[user] kneels[M == user ? null : " next to [M]"] and begins to utter a prayer to [ticker.Bible_deity_name].", \ - "You kneel[M == user ? null : " next to [M]"] and begin a prayer to [ticker.Bible_deity_name].") + user.visible_message("[user] kneels[M == user ? null : " next to [M]"] and begins to utter a prayer to [SSticker.Bible_deity_name].", \ + "You kneel[M == user ? null : " next to [M]"] and begin a prayer to [SSticker.Bible_deity_name].") praying = 1 if(do_after(user, 150, target = M)) @@ -460,18 +460,18 @@ if(target.mind) if(iscultist(target)) - ticker.mode.remove_cultist(target.mind) // This proc will handle message generation. + SSticker.mode.remove_cultist(target.mind) // This proc will handle message generation. praying = 0 return if(target.mind.vampire && !target.mind.vampire.get_ability(/datum/vampire_passive/full)) // Getting a full prayer off on a vampire will interrupt their powers for a large duration. target.mind.vampire.nullified = max(120, target.mind.vampire.nullified + 120) - to_chat(target, "[user]'s prayer to [ticker.Bible_deity_name] has interfered with your power!") + to_chat(target, "[user]'s prayer to [SSticker.Bible_deity_name] has interfered with your power!") praying = 0 return if(prob(25)) - to_chat(target, "[user]'s prayer to [ticker.Bible_deity_name] has eased your pain!") + to_chat(target, "[user]'s prayer to [SSticker.Bible_deity_name] has eased your pain!") target.adjustToxLoss(-5) target.adjustOxyLoss(-5) target.adjustBruteLoss(-5) @@ -480,7 +480,7 @@ praying = 0 else - to_chat(user, "Your prayer to [ticker.Bible_deity_name] was interrupted.") + to_chat(user, "Your prayer to [SSticker.Bible_deity_name] was interrupted.") praying = 0 /obj/item/nullrod/rosary/process() @@ -506,13 +506,13 @@ /obj/item/nullrod/salt/attack_self(mob/user) if(!user.mind || !user.mind.isholy) - to_chat(user, "You are not close enough with [ticker.Bible_deity_name] to use [src].") + to_chat(user, "You are not close enough with [SSticker.Bible_deity_name] to use [src].") return if(!(ghostcall_CD > world.time)) ghostcall_CD = world.time + 3000 //deciseconds..5 minutes - user.visible_message("[user] kneels and begins to utter a prayer to [ticker.Bible_deity_name] while drawing a circle with salt!", \ - "You kneel and begin a prayer to [ticker.Bible_deity_name] while drawing a circle!") + user.visible_message("[user] kneels and begins to utter a prayer to [SSticker.Bible_deity_name] while drawing a circle with salt!", \ + "You kneel and begin a prayer to [SSticker.Bible_deity_name] while drawing a circle!") notify_ghosts("The Chaplain is calling ghosts to [get_area(src)] with [name]!", source = src) else to_chat(user, "You need to wait before using [src] again.") diff --git a/code/game/objects/items/weapons/implants/implant_mindshield.dm b/code/game/objects/items/weapons/implants/implant_mindshield.dm index 739fe2827e4..bc942b73d81 100644 --- a/code/game/objects/items/weapons/implants/implant_mindshield.dm +++ b/code/game/objects/items/weapons/implants/implant_mindshield.dm @@ -19,14 +19,14 @@ /obj/item/implant/mindshield/implant(mob/target) if(..()) - if(target.mind in ticker.mode.head_revolutionaries || is_shadow_or_thrall(target)) + if(target.mind in SSticker.mode.head_revolutionaries || is_shadow_or_thrall(target)) target.visible_message("[target] seems to resist the implant!", "You feel the corporate tendrils of Nanotrasen try to invade your mind!") removed(target, 1) qdel(src) return -1 - if(target.mind in ticker.mode.revolutionaries) - ticker.mode.remove_revolutionary(target.mind) - if(target.mind in ticker.mode.cult) + if(target.mind in SSticker.mode.revolutionaries) + SSticker.mode.remove_revolutionary(target.mind) + if(target.mind in SSticker.mode.cult) to_chat(target, "You feel the corporate tendrils of Nanotrasen try to invade your mind!") else to_chat(target, "Your mind feels hardened - more resistant to brainwashing.") diff --git a/code/game/objects/items/weapons/implants/implant_traitor.dm b/code/game/objects/items/weapons/implants/implant_traitor.dm index 58f78a7be4e..16d8943567d 100644 --- a/code/game/objects/items/weapons/implants/implant_traitor.dm +++ b/code/game/objects/items/weapons/implants/implant_traitor.dm @@ -45,15 +45,15 @@ return -1 H.implanting = 1 to_chat(H, "You feel completely loyal to [user.name].") - if(!(user.mind in ticker.mode.implanter)) - ticker.mode.implanter[ref] = list() - implanters = ticker.mode.implanter[ref] + if(!(user.mind in SSticker.mode.implanter)) + SSticker.mode.implanter[ref] = list() + implanters = SSticker.mode.implanter[ref] implanters.Add(H.mind) - ticker.mode.implanted.Add(H.mind) - ticker.mode.implanted[H.mind] = user.mind - //ticker.mode.implanter[user.mind] += H.mind - ticker.mode.implanter[ref] = implanters - ticker.mode.traitors += H.mind + SSticker.mode.implanted.Add(H.mind) + SSticker.mode.implanted[H.mind] = user.mind + //SSticker.mode.implanter[user.mind] += H.mind + SSticker.mode.implanter[ref] = implanters + SSticker.mode.traitors += H.mind H.mind.special_role = SPECIAL_ROLE_TRAITOR to_chat(H, "You're now completely loyal to [user.name]! You now must lay down your life to protect [user.p_them()] and assist in [user.p_their()] goals at any cost.") var/datum/objective/protect/mindslave/MS = new @@ -64,8 +64,8 @@ for(var/datum/objective/objective in H.mind.objectives) to_chat(H, "Objective #1: [objective.explanation_text]") - ticker.mode.update_traitor_icons_added(user.mind) - ticker.mode.update_traitor_icons_added(H.mind)//handles datahuds/observerhuds + SSticker.mode.update_traitor_icons_added(user.mind) + SSticker.mode.update_traitor_icons_added(H.mind)//handles datahuds/observerhuds if(user.mind.som)//do not add if not a traitor..and you just picked up an implanter in the hall... var/datum/mindslaves/slaved = user.mind.som @@ -77,12 +77,12 @@ log_admin("[key_name(user)] has mind-slaved [key_name(H)].") activated = 1 if(jobban_isbanned(M, ROLE_SYNDICATE)) - ticker.mode.replace_jobbanned_player(M, ROLE_SYNDICATE) + SSticker.mode.replace_jobbanned_player(M, ROLE_SYNDICATE) return 1 return 0 /obj/item/implant/traitor/removed(mob/target) if(..()) - ticker.mode.remove_traitor_mind(target.mind) + SSticker.mode.remove_traitor_mind(target.mind) return 1 return 0 \ No newline at end of file diff --git a/code/game/objects/items/weapons/staff.dm b/code/game/objects/items/weapons/staff.dm index 54ef5f06f85..15b0b914391 100644 --- a/code/game/objects/items/weapons/staff.dm +++ b/code/game/objects/items/weapons/staff.dm @@ -27,7 +27,7 @@ if(user) user.update_inv_l_hand() user.update_inv_r_hand() - if(user.mind in ticker.mode.wizards) + if(user.mind in SSticker.mode.wizards) user.flying = wielded ? 1 : 0 if(wielded) to_chat(user, "You hold \the [src] between your legs.") diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm index dfa1bf97358..eb778b6a280 100644 --- a/code/game/objects/items/weapons/storage/bible.dm +++ b/code/game/objects/items/weapons/storage/bible.dm @@ -45,7 +45,7 @@ else M.LAssailant = user - if(!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") + if(!(istype(user, /mob/living/carbon/human) || SSticker) && SSticker.mode.name != "monkey") to_chat(user, "You don't have the dexterity to do this!") return if(!user.mind || !user.mind.isholy) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index faf86394dba..58a2d0464fc 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -31,17 +31,17 @@ /obj/structure/New() ..() if(smooth) - if(ticker && ticker.current_state == GAME_STATE_PLAYING) + if(SSticker && SSticker.current_state == GAME_STATE_PLAYING) queue_smooth(src) queue_smooth_neighbors(src) icon_state = "" if(climbable) verbs += /obj/structure/proc/climb_on - if(ticker) + if(SSticker) cameranet.updateVisibility(src) /obj/structure/Destroy() - if(ticker) + if(SSticker) cameranet.updateVisibility(src) if(smooth) var/turf/T = get_turf(src) diff --git a/code/game/sound.dm b/code/game/sound.dm index 3846e2edeaa..d27239ae4e7 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -108,10 +108,10 @@ SEND_SOUND(src, sound(null, repeat = 0, wait = 0, channel = chan)) /client/proc/playtitlemusic() - if(!ticker || !ticker.login_music || config.disable_lobby_music) + if(!SSticker || !SSticker.login_music || config.disable_lobby_music) return if(prefs.sound & SOUND_LOBBY) - SEND_SOUND(src, sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = CHANNEL_LOBBYMUSIC)) // MAD JAMS + SEND_SOUND(src, sound(SSticker.login_music, repeat = 0, wait = 0, volume = 85, channel = CHANNEL_LOBBYMUSIC)) // MAD JAMS /proc/get_rand_frequency() return rand(32000, 55000) //Frequency stuff only works with 45kbps oggs. diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index f1172435b1b..069fefe8103 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -144,8 +144,8 @@ /turf/simulated/floor/engine/cult/New() ..() - if(ticker.mode)//only do this if the round is going..otherwise..fucking asteroid.. - icon_state = ticker.cultdat.cult_floor_icon_state + if(SSticker.mode)//only do this if the round is going..otherwise..fucking asteroid.. + icon_state = SSticker.cultdat.cult_floor_icon_state /turf/simulated/floor/engine/cult/narsie_act() return diff --git a/code/game/turfs/simulated/walls_misc.dm b/code/game/turfs/simulated/walls_misc.dm index 18492da2d00..d738b13b07f 100644 --- a/code/game/turfs/simulated/walls_misc.dm +++ b/code/game/turfs/simulated/walls_misc.dm @@ -12,9 +12,9 @@ /turf/simulated/wall/cult/New() ..() - if(ticker.mode)//game hasn't started offically don't do shit.. + if(SSticker.mode)//game hasn't started offically don't do shit.. new /obj/effect/temp_visual/cult/turf(src) - icon_state = ticker.cultdat.cult_wall_icon_state + icon_state = SSticker.cultdat.cult_wall_icon_state /turf/simulated/wall/cult/artificer name = "runed stone wall" diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 677357cf170..26a71991afd 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -38,7 +38,7 @@ ..() for(var/atom/movable/AM in src) Entered(AM) - if(smooth && ticker && ticker.current_state == GAME_STATE_PLAYING) + if(smooth && SSticker && SSticker.current_state == GAME_STATE_PLAYING) queue_smooth(src) /hook/startup/proc/smooth_world() @@ -403,7 +403,7 @@ return(2) /turf/proc/visibilityChanged() - if(ticker) + if(SSticker) cameranet.updateVisibility(src) /turf/attackby(obj/item/I, mob/user, params) @@ -456,7 +456,7 @@ blueprint_data += I /turf/proc/add_blueprints_preround(atom/movable/AM) - if(!ticker || ticker.current_state != GAME_STATE_PLAYING) + if(!SSticker || SSticker.current_state != GAME_STATE_PLAYING) add_blueprints(AM) /turf/proc/empty(turf_type=/turf/space) diff --git a/code/game/verbs/suicide.dm b/code/game/verbs/suicide.dm index 46d5c4e36ba..8febe20e840 100644 --- a/code/game/verbs/suicide.dm +++ b/code/game/verbs/suicide.dm @@ -59,7 +59,7 @@ to_chat(src, "You're already dead!") return - if(!ticker) + if(!SSticker) to_chat(src, "You can't commit suicide before the game starts!") return @@ -116,7 +116,7 @@ to_chat(src, "You're already dead!") return - if(!ticker) + if(!SSticker) to_chat(src, "You can't commit suicide before the game starts!") return diff --git a/code/game/world.dm b/code/game/world.dm index 86ca6d883bd..8106aca31d3 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -32,7 +32,6 @@ var/global/list/map_transition_config = MAP_TRANSITION_CONFIG processScheduler = new spawn(1) - processScheduler.deferSetupFor(/datum/controller/process/ticker) processScheduler.setup() @@ -122,10 +121,10 @@ var/world_topic_spam_protect_time = world.timeofday s["map_name"] = map_name ? map_name : "Unknown" if(key_valid) - if(ticker && ticker.mode) - s["real_mode"] = ticker.mode.name + if(SSticker && SSticker.mode) + s["real_mode"] = SSticker.mode.name s["security_level"] = get_security_level() - s["ticker_state"] = ticker.current_state + s["ticker_state"] = SSticker.current_state if(SSshuttle && SSshuttle.emergency) // Shuttle status, see /__DEFINES/stat.dm @@ -301,8 +300,8 @@ var/world_topic_spam_protect_time = world.timeofday if(!isnull(time)) delay = max(0,time) else - delay = ticker.restart_timeout - if(ticker.delay_end) + delay = SSticker.restart_timeout + if(SSticker.delay_end) to_chat(world, "An admin has delayed the round end.") return to_chat(world, "Rebooting world in [delay/10] [delay > 10 ? "seconds" : "second"]. [reason]") @@ -311,12 +310,12 @@ var/world_topic_spam_protect_time = world.timeofday var/sound_length = GLOB.round_end_sounds[round_end_sound] if(delay > sound_length) // If there's time, play the round-end sound before rebooting spawn(delay - sound_length) - if(!ticker.delay_end) + if(!SSticker.delay_end) world << round_end_sound sleep(delay) if(blackbox) blackbox.save_all_data_to_sql() - if(ticker.delay_end) + if(SSticker.delay_end) to_chat(world, "Reboot was cancelled by an admin.") return feedback_set_details("[feedback_c]","[feedback_r]") @@ -394,7 +393,7 @@ var/world_topic_spam_protect_time = world.timeofday s += "
" var/list/features = list() - if(ticker) + if(SSticker) if(master_mode && master_mode != "secret") features += master_mode else diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 4fcf95dbfd2..74b1aa00efd 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -572,7 +572,7 @@ var/global/nologevent = 0 delay = delay * 10 message_admins("[key_name_admin(usr)] has initiated a server restart with a delay of [delay/10] seconds") log_admin("[key_name(usr)] has initiated a server restart with a delay of [delay/10] seconds") - ticker.delay_end = 0 + SSticker.delay_end = 0 feedback_add_details("admin_verb","R") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! world.Reboot("Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key].", "end_error", "admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]", delay) @@ -672,14 +672,14 @@ var/global/nologevent = 0 if(!check_rights(R_SERVER)) return - if(!ticker) + if(!SSticker) alert("Unable to start the game as it is not set up.") return - if(ticker.current_state == GAME_STATE_PREGAME) + if(SSticker.current_state == GAME_STATE_PREGAME) if(config.start_now_confirmation) if(alert(usr, "This is a live server. Are you sure you want to start now?", "Start game", "Yes", "No") != "Yes") return - ticker.current_state = GAME_STATE_SETTING_UP + SSticker.current_state = GAME_STATE_SETTING_UP log_admin("[key_name(usr)] has started the game.") message_admins("[key_name_admin(usr)] has started the game.") feedback_add_details("admin_verb","SN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -763,10 +763,10 @@ var/global/nologevent = 0 if(!check_rights(R_SERVER)) return - if(!ticker || ticker.current_state != GAME_STATE_PREGAME) - ticker.delay_end = !ticker.delay_end - log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].") - message_admins("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1) + if(!SSticker || SSticker.current_state != GAME_STATE_PREGAME) + SSticker.delay_end = !SSticker.delay_end + log_admin("[key_name(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].") + message_admins("[key_name(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1) return //alert("Round end delayed", null, null, null, null, null) going = !( going ) if(!( going )) @@ -780,32 +780,32 @@ var/global/nologevent = 0 ////////////////////////////////////////////////////////////////////////////////////////////////ADMIN HELPER PROCS /proc/is_special_character(mob/M as mob) // returns 1 for specail characters and 2 for heroes of gamemode - if(!ticker || !ticker.mode) + if(!SSticker || !SSticker.mode) return 0 if(!istype(M)) return 0 - if((M.mind in ticker.mode.head_revolutionaries) || (M.mind in ticker.mode.revolutionaries)) - if(ticker.mode.config_tag == "revolution") + if((M.mind in SSticker.mode.head_revolutionaries) || (M.mind in SSticker.mode.revolutionaries)) + if(SSticker.mode.config_tag == "revolution") return 2 return 1 - if(M.mind in ticker.mode.cult) - if(ticker.mode.config_tag == "cult") + if(M.mind in SSticker.mode.cult) + if(SSticker.mode.config_tag == "cult") return 2 return 1 - if(M.mind in ticker.mode.syndicates) - if(ticker.mode.config_tag == "nuclear") + if(M.mind in SSticker.mode.syndicates) + if(SSticker.mode.config_tag == "nuclear") return 2 return 1 - if(M.mind in ticker.mode.wizards) - if(ticker.mode.config_tag == "wizard") + if(M.mind in SSticker.mode.wizards) + if(SSticker.mode.config_tag == "wizard") return 2 return 1 - if(M.mind in ticker.mode.changelings) - if(ticker.mode.config_tag == "changeling") + if(M.mind in SSticker.mode.changelings) + if(SSticker.mode.config_tag == "changeling") return 2 return 1 - if(M.mind in ticker.mode.abductors) - if(ticker.mode.config_tag == "abduction") + if(M.mind in SSticker.mode.abductors) + if(SSticker.mode.config_tag == "abduction") return 2 return 1 if(isrobot(M)) diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 36c0e5cf90d..c530af2401e 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -403,9 +403,9 @@ /datum/admins/proc/check_antagonists() if(!check_rights(R_ADMIN)) return - if(ticker && ticker.current_state >= GAME_STATE_PLAYING) + if(SSticker && SSticker.current_state >= GAME_STATE_PLAYING) var/dat = "Round Status

Round Status

" - dat += "Current Game Mode: [ticker.mode.name]
" + dat += "Current Game Mode: [SSticker.mode.name]
" dat += "Round Duration: [round(ROUND_TIME / 36000)]:[add_zero(num2text(ROUND_TIME / 600 % 60), 2)]:[add_zero(num2text(ROUND_TIME / 10 % 60), 2)]
" dat += "Emergency shuttle
" if(SSshuttle.emergency.mode < SHUTTLE_CALL) @@ -418,10 +418,10 @@ else dat += "ETA: [(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]
" - dat += "[ticker.delay_end ? "End Round Normally" : "Delay Round End"]
" - if(ticker.mode.syndicates.len) + dat += "[SSticker.delay_end ? "End Round Normally" : "Delay Round End"]
" + if(SSticker.mode.syndicates.len) dat += "
" - for(var/datum/mind/N in ticker.mode.syndicates) + for(var/datum/mind/N in SSticker.mode.syndicates) var/mob/M = N.current if(M) dat += check_antagonists_line(M) @@ -442,20 +442,20 @@ dat += "in [disk_loc.loc] at ([disk_loc.x], [disk_loc.y], [disk_loc.z])" dat += "
Syndicates
" - if(ticker.mode.head_revolutionaries.len || ticker.mode.revolutionaries.len) + if(SSticker.mode.head_revolutionaries.len || SSticker.mode.revolutionaries.len) dat += "
" - for(var/datum/mind/N in ticker.mode.head_revolutionaries) + for(var/datum/mind/N in SSticker.mode.head_revolutionaries) var/mob/M = N.current if(!M) dat += "" else dat += check_antagonists_line(M, "(leader)") - for(var/datum/mind/N in ticker.mode.revolutionaries) + for(var/datum/mind/N in SSticker.mode.revolutionaries) var/mob/M = N.current if(M) dat += check_antagonists_line(M) dat += "
Revolutionaries
Head Revolutionary not found!
" - for(var/datum/mind/N in ticker.mode.get_living_heads()) + for(var/datum/mind/N in SSticker.mode.get_living_heads()) var/mob/M = N.current if(M) dat += check_antagonists_line(M) @@ -466,7 +466,7 @@ dat += "
Target(s)Location
" if(GAMEMODE_IS_BLOB) - var/datum/game_mode/blob/mode = ticker.mode + var/datum/game_mode/blob/mode = SSticker.mode dat += "
" dat += "" @@ -479,67 +479,67 @@ dat += "" dat += "
Blob
Progress: [blobs.len]/[mode.blobwincount]
Blob not found!
" - if(ticker.mode.blob_overminds.len) - dat += check_role_table("Blob Overminds", ticker.mode.blob_overminds) + if(SSticker.mode.blob_overminds.len) + dat += check_role_table("Blob Overminds", SSticker.mode.blob_overminds) - if(ticker.mode.changelings.len) - dat += check_role_table("Changelings", ticker.mode.changelings) + if(SSticker.mode.changelings.len) + dat += check_role_table("Changelings", SSticker.mode.changelings) - if(ticker.mode.wizards.len) - dat += check_role_table("Wizards", ticker.mode.wizards) + if(SSticker.mode.wizards.len) + dat += check_role_table("Wizards", SSticker.mode.wizards) - if(ticker.mode.raiders.len) - dat += check_role_table("Raiders", ticker.mode.raiders) + if(SSticker.mode.raiders.len) + dat += check_role_table("Raiders", SSticker.mode.raiders) /*if(ticker.mode.ninjas.len) dat += check_role_table("Ninjas", ticker.mode.ninjas)*/ - if(ticker.mode.cult.len) - dat += check_role_table("Cultists", ticker.mode.cult, 0) + if(SSticker.mode.cult.len) + dat += check_role_table("Cultists", SSticker.mode.cult, 0) dat += "
use Cult Mindspeak" if(GAMEMODE_IS_CULT) - var/datum/game_mode/cult/cult_round = ticker.mode + var/datum/game_mode/cult/cult_round = SSticker.mode if(!cult_round.narsie_condition_cleared) dat += "
complete objective (debug)" - if(ticker.mode.traitors.len) - dat += check_role_table("Traitors", ticker.mode.traitors) + if(SSticker.mode.traitors.len) + dat += check_role_table("Traitors", SSticker.mode.traitors) - if(ticker.mode.shadows.len) - dat += check_role_table("Shadowlings", ticker.mode.shadows) + if(SSticker.mode.shadows.len) + dat += check_role_table("Shadowlings", SSticker.mode.shadows) - if(ticker.mode.shadowling_thralls.len) - dat += check_role_table("Shadowling Thralls", ticker.mode.shadowling_thralls) + if(SSticker.mode.shadowling_thralls.len) + dat += check_role_table("Shadowling Thralls", SSticker.mode.shadowling_thralls) - if(ticker.mode.abductors.len) - dat += check_role_table("Abductors", ticker.mode.abductors) + if(SSticker.mode.abductors.len) + dat += check_role_table("Abductors", SSticker.mode.abductors) - if(ticker.mode.abductees.len) - dat += check_role_table("Abductees", ticker.mode.abductees) + if(SSticker.mode.abductees.len) + dat += check_role_table("Abductees", SSticker.mode.abductees) - if(ticker.mode.vampires.len) - dat += check_role_table("Vampires", ticker.mode.vampires) + if(SSticker.mode.vampires.len) + dat += check_role_table("Vampires", SSticker.mode.vampires) - if(ticker.mode.vampire_enthralled.len) - dat += check_role_table("Vampire Thralls", ticker.mode.vampire_enthralled) + if(SSticker.mode.vampire_enthralled.len) + dat += check_role_table("Vampire Thralls", SSticker.mode.vampire_enthralled) - if(ticker.mode.devils.len) - dat += check_role_table("Devils", ticker.mode.devils) + if(SSticker.mode.devils.len) + dat += check_role_table("Devils", SSticker.mode.devils) - if(ticker.mode.xenos.len) - dat += check_role_table("Xenos", ticker.mode.xenos) + if(SSticker.mode.xenos.len) + dat += check_role_table("Xenos", SSticker.mode.xenos) - if(ticker.mode.superheroes.len) - dat += check_role_table("Superheroes", ticker.mode.superheroes) + if(SSticker.mode.superheroes.len) + dat += check_role_table("Superheroes", SSticker.mode.superheroes) - if(ticker.mode.supervillains.len) - dat += check_role_table("Supervillains", ticker.mode.supervillains) + if(SSticker.mode.supervillains.len) + dat += check_role_table("Supervillains", SSticker.mode.supervillains) - if(ticker.mode.greyshirts.len) - dat += check_role_table("Greyshirts", ticker.mode.greyshirts) + if(SSticker.mode.greyshirts.len) + dat += check_role_table("Greyshirts", SSticker.mode.greyshirts) - if(ticker.mode.eventmiscs.len) - dat += check_role_table("Event Roles", ticker.mode.eventmiscs) + if(SSticker.mode.eventmiscs.len) + dat += check_role_table("Event Roles", SSticker.mode.eventmiscs) if(ts_spiderlist.len) var/list/spider_minds = list() @@ -559,8 +559,8 @@ count_spiderlings += 1 dat += "
Growing TS on-station: [count_eggs] egg[count_eggs != 1 ? "s" : ""], [count_spiderlings] spiderling[count_spiderlings != 1 ? "s" : ""].
" - if(ticker.mode.ert.len) - dat += check_role_table("ERT", ticker.mode.ert) + if(SSticker.mode.ert.len) + dat += check_role_table("ERT", SSticker.mode.ert) dat += "" usr << browse(dat, "window=roundstatus;size=400x500") diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 88d10abde98..f2be4898209 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -6,7 +6,7 @@ message_admins("[key_name_admin(usr)] has attempted to override the admin panel!") return - if(ticker.mode && ticker.mode.check_antagonists_topic(href, href_list)) + if(SSticker.mode && SSticker.mode.check_antagonists_topic(href, href_list)) check_antagonists() return @@ -315,9 +315,9 @@ else if(href_list["delay_round_end"]) if(!check_rights(R_SERVER)) return - ticker.delay_end = !ticker.delay_end - log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].") - message_admins("[key_name_admin(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1) + SSticker.delay_end = !SSticker.delay_end + log_admin("[key_name(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].") + message_admins("[key_name_admin(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1) href_list["secretsadmin"] = "check_antagonist" else if(href_list["simplemake"]) @@ -1085,7 +1085,7 @@ else if(href_list["c_mode"]) if(!check_rights(R_ADMIN)) return - if(ticker && ticker.mode) + if(SSticker && SSticker.mode) return alert(usr, "The game has already started.", null, null, null, null) var/dat = {"What mode do you wish to play?
"} for(var/mode in config.modes) @@ -1098,7 +1098,7 @@ else if(href_list["f_secret"]) if(!check_rights(R_ADMIN)) return - if(ticker && ticker.mode) + if(SSticker && SSticker.mode) return alert(usr, "The game has already started.", null, null, null, null) if(master_mode != "secret") return alert(usr, "The game mode has to be secret!", null, null, null, null) @@ -1112,7 +1112,7 @@ else if(href_list["c_mode2"]) if(!check_rights(R_ADMIN|R_SERVER)) return - if(ticker && ticker.mode) + if(SSticker && SSticker.mode) return alert(usr, "The game has already started.", null, null, null, null) master_mode = href_list["c_mode2"] log_admin("[key_name(usr)] set the mode as [master_mode].") @@ -1125,7 +1125,7 @@ else if(href_list["f_secret2"]) if(!check_rights(R_ADMIN|R_SERVER)) return - if(ticker && ticker.mode) + if(SSticker && SSticker.mode) return alert(usr, "The game has already started.", null, null, null, null) if(master_mode != "secret") return alert(usr, "The game mode has to be secret!", null, null, null, null) @@ -1559,25 +1559,25 @@ alert("Couldn't locate cult mode datum! This shouldn't ever happen, tell a coder!") return - var/datum/game_mode/cult/cult_round = ticker.mode + var/datum/game_mode/cult/cult_round = SSticker.mode cult_round.bypass_phase() message_admins("Admin [key_name_admin(usr)] has unlocked the Cult's next objective.") log_admin("Admin [key_name_admin(usr)] has unlocked the Cult's next objective.") else if(href_list["cult_mindspeak"]) - var/input = stripped_input(usr, "Communicate to all the cultists with the voice of [ticker.cultdat.entity_name]", "Voice of [ticker.cultdat.entity_name]", "") + var/input = stripped_input(usr, "Communicate to all the cultists with the voice of [SSticker.cultdat.entity_name]", "Voice of [SSticker.cultdat.entity_name]", "") if(!input) return - for(var/datum/mind/H in ticker.mode.cult) + for(var/datum/mind/H in SSticker.mode.cult) if (H.current) - to_chat(H.current, "[ticker.cultdat.entity_name] murmurs, [input]") + to_chat(H.current, "[SSticker.cultdat.entity_name] murmurs, [input]") for(var/mob/dead/observer/O in GLOB.player_list) - to_chat(O, "[ticker.cultdat.entity_name] murmurs, [input]") + to_chat(O, "[SSticker.cultdat.entity_name] murmurs, [input]") - message_admins("Admin [key_name_admin(usr)] has talked with the Voice of [ticker.cultdat.entity_name].") - log_admin("[key_name(usr)] Voice of [ticker.cultdat.entity_name]: [input]") + message_admins("Admin [key_name_admin(usr)] has talked with the Voice of [SSticker.cultdat.entity_name].") + log_admin("[key_name(usr)] Voice of [SSticker.cultdat.entity_name]: [input]") else if(href_list["adminplayerobservecoodjump"]) if(!check_rights(R_ADMIN)) return @@ -1958,8 +1958,8 @@ kill_objective.target = H.mind kill_objective.explanation_text = "Assassinate [H.real_name], the [H.mind.assigned_role]." newtraitormind.objectives += kill_objective - ticker.mode.equip_traitor(newtraitor) - ticker.mode.traitors |= newtraitor.mind + SSticker.mode.equip_traitor(newtraitor) + SSticker.mode.traitors |= newtraitor.mind to_chat(newtraitor, "ATTENTION: It is time to pay your debt to the Syndicate...") to_chat(newtraitor, "You are now a traitor.") to_chat(newtraitor, "Goal: KILL [H.real_name], currently in [get_area(H.loc)]"); @@ -2341,7 +2341,7 @@ else if(href_list["traitor"]) if(!check_rights(R_ADMIN|R_MOD)) return - if(!ticker || !ticker.mode) + if(!SSticker || !SSticker.mode) alert("The game hasn't started yet!") return @@ -2484,7 +2484,7 @@ else if(href_list["kick_all_from_lobby"]) if(!check_rights(R_ADMIN)) return - if(ticker && ticker.current_state == GAME_STATE_PLAYING) + if(SSticker && SSticker.current_state == GAME_STATE_PLAYING) var/afkonly = text2num(href_list["afkonly"]) if(alert("Are you sure you want to kick all [afkonly ? "AFK" : ""] clients from the lobby?","Confirmation","Yes","Cancel") != "Yes") return @@ -2573,7 +2573,7 @@ feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","TriAI") if("gravity") - if(!(ticker && ticker.mode)) + if(!(SSticker && SSticker.mode)) to_chat(usr, "Please wait until the game starts! Not sure how it will work otherwise.") return gravity_is_on = !gravity_is_on @@ -2609,7 +2609,7 @@ message_admins("[key_name_admin(usr)] made all SMESs powered", 1) power_restore_quick() if("prisonwarp") - if(!ticker) + if(!SSticker) alert("The game hasn't started yet!", null, null, null, null, null) return feedback_inc("admin_secrets_fun_used",1) @@ -2651,7 +2651,7 @@ H.loc = pick(prisonsecuritywarp) prisonwarped += H if("traitor_all") - if(!ticker) + if(!SSticker) alert("The game hasn't started yet!") return var/objective = sanitize(copytext(input("Enter an objective"),1,MAX_MESSAGE_LEN)) @@ -2663,24 +2663,24 @@ if(H.stat == 2 || !H.client || !H.mind) continue if(is_special_character(H)) continue //traitorize(H, objective, 0) - ticker.mode.traitors += H.mind + SSticker.mode.traitors += H.mind H.mind.special_role = SPECIAL_ROLE_TRAITOR var/datum/objective/new_objective = new new_objective.owner = H new_objective.explanation_text = objective H.mind.objectives += new_objective - ticker.mode.greet_traitor(H.mind) + SSticker.mode.greet_traitor(H.mind) //ticker.mode.forge_traitor_objectives(H.mind) - ticker.mode.finalize_traitor(H.mind) + SSticker.mode.finalize_traitor(H.mind) for(var/mob/living/silicon/A in GLOB.player_list) - ticker.mode.traitors += A.mind + SSticker.mode.traitors += A.mind A.mind.special_role = SPECIAL_ROLE_TRAITOR var/datum/objective/new_objective = new new_objective.owner = A new_objective.explanation_text = objective A.mind.objectives += new_objective - ticker.mode.greet_traitor(A.mind) - ticker.mode.finalize_traitor(A.mind) + SSticker.mode.greet_traitor(A.mind) + SSticker.mode.finalize_traitor(A.mind) message_admins("[key_name_admin(usr)] used everyone is a traitor secret. Objective is [objective]", 1) log_admin("[key_name(usr)] used everyone is a traitor secret. Objective is [objective]") @@ -2946,10 +2946,10 @@ if("showailaws") output_ai_laws() if("showgm") - if(!ticker) + if(!SSticker) alert("The game hasn't started yet!") - else if(ticker.mode) - alert("The game mode is [ticker.mode.name]") + else if(SSticker.mode) + alert("The game mode is [SSticker.mode.name]") else alert("For some reason there's a ticker, but not a game mode") if("manifest") var/dat = "Showing Crew Manifest.
" @@ -3284,7 +3284,7 @@ return G.report_message = description message_admins("[key_name_admin(usr)] created \"[G.name]\" station goal.") - ticker.mode.station_goals += G + SSticker.mode.station_goals += G modify_goals() else if(href_list["showdetails"]) @@ -3408,7 +3408,7 @@ protect_objective.target = H.mind protect_objective.explanation_text = "Protect [H.real_name], the [H.mind.assigned_role]." hunter_mind.objectives += protect_objective - ticker.mode.traitors |= hunter_mob.mind + SSticker.mode.traitors |= hunter_mob.mind to_chat(hunter_mob, "ATTENTION: You are now on a mission!") to_chat(hunter_mob, "Goal: [killthem ? "MURDER" : "PROTECT"] [H.real_name], currently in [get_area(H.loc)]. "); if(killthem) diff --git a/code/modules/admin/verbs/cinematic.dm b/code/modules/admin/verbs/cinematic.dm index 3449350e11f..63ebd52d09b 100644 --- a/code/modules/admin/verbs/cinematic.dm +++ b/code/modules/admin/verbs/cinematic.dm @@ -3,7 +3,7 @@ set category = "Debug" set desc = "Shows a cinematic." // Intended for testing but I thought it might be nice for events on the rare occasion Feel free to comment it out if it's not wanted. set hidden = 1 - if(!ticker) + if(!SSticker) return switch(cinematic) if("explosion") @@ -14,4 +14,4 @@ override = input(src, "mode = ?","Enter Parameter", null) as anything in list("nuclear emergency", "fake", "no override") if(0) override = input(src, "mode = ?","Enter Parameter", null) as anything in list("blob", "nuclear emergency", "AI malfunction", "no override") - ticker.station_explosion_cinematic(parameter, override) \ No newline at end of file + SSticker.station_explosion_cinematic(parameter, override) \ No newline at end of file diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 3492061f1f6..2aabeba57e9 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -215,7 +215,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that if(!check_rights(R_SPAWN)) return - if(!ticker) + if(!SSticker) alert("Wait until the game starts") return if(istype(M, /mob/living/carbon/human)) @@ -233,7 +233,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that if(!check_rights(R_SPAWN)) return - if(!ticker) + if(!SSticker) alert("Wait until the game starts") return @@ -293,7 +293,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that if(!check_rights(R_SPAWN)) return - if(!ticker) + if(!SSticker) alert("Wait until the game starts") return if(ishuman(M)) @@ -313,7 +313,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that if(!check_rights(R_SPAWN)) return - if(!ticker) + if(!SSticker) alert("Wait until the game starts") return if(ishuman(M)) @@ -333,7 +333,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that if(!check_rights(R_SPAWN)) return - if(!ticker) + if(!SSticker) alert("Wait until the game starts") return if(ishuman(M)) @@ -405,7 +405,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that if(!check_rights(R_EVENT)) return - if(!ticker) + if(!SSticker) alert("Wait until the game starts") return if(istype(M, /mob/living/carbon/human)) @@ -818,7 +818,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that if(!check_rights(R_SPAWN)) return - if(!ticker) + if(!SSticker) alert("Wait until the game starts") return if(istype(M, /mob/living/carbon)) diff --git a/code/modules/admin/verbs/gimmick_team.dm b/code/modules/admin/verbs/gimmick_team.dm index 081c820aaee..cad93e8b880 100644 --- a/code/modules/admin/verbs/gimmick_team.dm +++ b/code/modules/admin/verbs/gimmick_team.dm @@ -7,7 +7,7 @@ set desc = "Spawns a group of players in the specified outfit." if(!check_rights(R_EVENT)) return - if(!ticker) + if(!SSticker) alert("The game hasn't started yet!") return if(alert("Do you want to spawn a Gimmick Team at YOUR CURRENT LOCATION?",,"Yes","No")=="No") @@ -82,7 +82,7 @@ H.mind.store_memory("[themission]

") if(is_syndicate) - ticker.mode.traitors |= H.mind //Adds them to extra antag list + SSticker.mode.traitors |= H.mind //Adds them to extra antag list players_spawned++ if(players_spawned >= teamsize) diff --git a/code/modules/admin/verbs/honksquad.dm b/code/modules/admin/verbs/honksquad.dm index b4c0e6a05eb..f4013edbe1e 100644 --- a/code/modules/admin/verbs/honksquad.dm +++ b/code/modules/admin/verbs/honksquad.dm @@ -4,7 +4,7 @@ var/const/honksquad_possible = 6 //if more Commandos are needed in the future var/global/sent_honksquad = 0 /client/proc/honksquad() - if(!ticker) + if(!SSticker) to_chat(usr, "The game hasn't started yet!") return if(world.time < 6000) @@ -95,7 +95,7 @@ var/global/sent_honksquad = 0 new_honksquad.mind.special_role = SPECIAL_ROLE_HONKSQUAD new_honksquad.mind.offstation_role = TRUE new_honksquad.add_language("Clownish") - ticker.mode.traitors |= new_honksquad.mind//Adds them to current traitor list. Which is really the extra antagonist list. + SSticker.mode.traitors |= new_honksquad.mind//Adds them to current traitor list. Which is really the extra antagonist list. new_honksquad.equip_honksquad(honk_leader_selected) return new_honksquad diff --git a/code/modules/admin/verbs/infiltratorteam_syndicate.dm b/code/modules/admin/verbs/infiltratorteam_syndicate.dm index 551076be62a..dad253eed3d 100644 --- a/code/modules/admin/verbs/infiltratorteam_syndicate.dm +++ b/code/modules/admin/verbs/infiltratorteam_syndicate.dm @@ -10,7 +10,7 @@ var/global/sent_syndicate_infiltration_team = 0 if(!check_rights(R_ADMIN)) to_chat(src, "Only administrators may use this command.") return - if(!ticker) + if(!SSticker) alert("The game hasn't started yet!") return if(alert("Do you want to send in the Syndicate Infiltration Team?",,"Yes","No")=="No") @@ -132,7 +132,7 @@ var/global/sent_syndicate_infiltration_team = 0 new_syndicate_infiltrator.mind.assigned_role = "Syndicate Infiltrator" new_syndicate_infiltrator.mind.special_role = "Syndicate Infiltrator" new_syndicate_infiltrator.mind.offstation_role = TRUE //they can flee to z2 so make them inelligible as antag targets - ticker.mode.traitors |= new_syndicate_infiltrator.mind //Adds them to extra antag list + SSticker.mode.traitors |= new_syndicate_infiltrator.mind //Adds them to extra antag list new_syndicate_infiltrator.equip_syndicate_infiltrator(syndicate_leader_selected, uplink_tc, is_mgmt) return new_syndicate_infiltrator diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 4b3905f37e2..ab7a8ab75e8 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -175,7 +175,7 @@ client/proc/one_click_antag() for(var/i = 0, iYou are a Vox Primalis, fresh out of the Shoal. Your ship has arrived at the Tau Ceti system hosting the NSV Exodus... or was it the Luna? NSS? Utopia? Nobody is really sure, but everyong is raring to start pillaging! Your current goal is: [input]") to_chat(new_vox, "Don't forget to turn on your nitrogen internals!") diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm index c2260a051eb..3db8f102320 100644 --- a/code/modules/admin/verbs/onlyone.dm +++ b/code/modules/admin/verbs/onlyone.dm @@ -1,5 +1,5 @@ /client/proc/only_one() - if(!ticker) + if(!SSticker) alert("The game hasn't started yet!") return @@ -14,7 +14,7 @@ var/datum/preferences/A = new() // Randomize appearance A.copy_to(H) - ticker.mode.traitors += H.mind + SSticker.mode.traitors += H.mind H.mind.special_role = SPECIAL_ROLE_TRAITOR var/datum/objective/hijack/hijack_objective = new @@ -58,7 +58,7 @@ world << sound('sound/music/thunderdome.ogg') /client/proc/only_me() - if(!ticker) + if(!SSticker) alert("The game hasn't started yet!") return @@ -66,7 +66,7 @@ if(H.stat == 2 || !(H.client)) continue if(is_special_character(H)) continue - ticker.mode.traitors += H.mind + SSticker.mode.traitors += H.mind H.mind.special_role = "[H.real_name] Prime" var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone diff --git a/code/modules/admin/verbs/onlyoneteam.dm b/code/modules/admin/verbs/onlyoneteam.dm index d2490cdf9c3..846a77c508a 100644 --- a/code/modules/admin/verbs/onlyoneteam.dm +++ b/code/modules/admin/verbs/onlyoneteam.dm @@ -1,5 +1,5 @@ /client/proc/only_one_team() - if(!ticker) + if(!SSticker) alert("The game hasn't started yet!") return diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index 1c75421f4b7..b6986f4960f 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -18,8 +18,8 @@ var/prayer_type = "PRAYER" var/deity if(usr.job == "Chaplain") - if(ticker && ticker.Bible_deity_name) - deity = ticker.Bible_deity_name + if(SSticker && SSticker.Bible_deity_name) + deity = SSticker.Bible_deity_name cross = image('icons/obj/storage.dmi',"kingyellow") font_color = "blue" prayer_type = "CHAPLAIN PRAYER" @@ -27,7 +27,7 @@ cross = image('icons/obj/storage.dmi',"tome") font_color = "red" prayer_type = "CULTIST PRAYER" - deity = ticker.cultdat.entity_name + deity = SSticker.cultdat.entity_name log_say("(PRAYER) [msg]", usr) msg = "[bicon(cross)][prayer_type][deity ? " (to [deity])" : ""][mind && mind.isholy ? " (blessings: [mind.num_blessed])" : ""]: [key_name(src, 1)] ([ADMIN_QUE(src,"?")]) ([ADMIN_PP(src,"PP")]) ([ADMIN_VV(src,"VV")]) ([ADMIN_SM(src,"SM")]) ([admin_jump_link(src)]) (CA) ([ADMIN_SC(src,"SC")]) (BLESS) (SMITE): [msg]" diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 15ee321656c..65ea0b17dbc 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -437,11 +437,11 @@ Traitors and the like can also be revived with the previous role mostly intact. if("traitor") SSjobs.AssignRank(new_character, new_character.mind.assigned_role, 0) SSjobs.EquipRank(new_character, new_character.mind.assigned_role, 1) - ticker.mode.equip_traitor(new_character) + SSticker.mode.equip_traitor(new_character) if("Wizard") new_character.loc = pick(wizardstart) //ticker.mode.learn_basic_spells(new_character) - ticker.mode.equip_wizard(new_character) + SSticker.mode.equip_wizard(new_character) if("Syndicate") var/obj/effect/landmark/synd_spawn = locate("landmark*Syndicate-Spawn") if(synd_spawn) @@ -858,7 +858,7 @@ Traitors and the like can also be revived with the previous role mostly intact. set category = "Admin" set name = "Toggle Deny Shuttle" - if(!ticker) + if(!SSticker) return if(!check_rights(R_ADMIN)) @@ -891,12 +891,12 @@ Traitors and the like can also be revived with the previous role mostly intact. if(!check_rights(R_SERVER|R_EVENT)) return - if(ticker && ticker.mode) + if(SSticker && SSticker.mode) to_chat(usr, "Nope you can't do this, the game's already started. This only works before rounds!") return - if(ticker.random_players) - ticker.random_players = 0 + if(SSticker.random_players) + SSticker.random_players = 0 message_admins("Admin [key_name_admin(usr)] has disabled \"Everyone is Special\" mode.", 1) to_chat(usr, "Disabled.") return @@ -914,7 +914,7 @@ Traitors and the like can also be revived with the previous role mostly intact. to_chat(usr, "Remember: you can always disable the randomness by using the verb again, assuming the round hasn't started yet.") - ticker.random_players = 1 + SSticker.random_players = 1 feedback_add_details("admin_verb","MER") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/toggle_random_events() @@ -1009,13 +1009,13 @@ Traitors and the like can also be revived with the previous role mostly intact. if(!check_rights(R_EVENT)) return - if(ticker.mode.ert_disabled) - ticker.mode.ert_disabled = 0 + if(SSticker.mode.ert_disabled) + SSticker.mode.ert_disabled = 0 to_chat(usr, "ERT has been Enabled.") log_admin("Admin [key_name(src)] has enabled ERT calling.") message_admins("Admin [key_name_admin(usr)] has enabled ERT calling.", 1) else - ticker.mode.ert_disabled = 1 + SSticker.mode.ert_disabled = 1 to_chat(usr, "ERT has been Disabled.") log_admin("Admin [key_name(src)] has disabled ERT calling.") message_admins("Admin [key_name_admin(usr)] has disabled ERT calling.", 1) @@ -1033,14 +1033,14 @@ Traitors and the like can also be revived with the previous role mostly intact. if(!input) return - if(!ticker) + if(!SSticker) return - ticker.selected_tip = input + SSticker.selected_tip = input // If we've already tipped, then send it straight away. - if(ticker.tipped) - ticker.send_tip_of_the_round() + if(SSticker.tipped) + SSticker.send_tip_of_the_round() message_admins("[key_name_admin(usr)] sent a Tip of the round.") log_admin("[key_name(usr)] sent \"[input]\" as the Tip of the Round.") @@ -1055,12 +1055,12 @@ Traitors and the like can also be revived with the previous role mostly intact. holder.modify_goals() /datum/admins/proc/modify_goals() - if(!ticker || !ticker.mode) + if(!SSticker || !SSticker.mode) to_chat(usr, "This verb can only be used if the round has started.") return var/dat = "" - for(var/datum/station_goal/S in ticker.mode.station_goals) + for(var/datum/station_goal/S in SSticker.mode.station_goals) dat += "[S.name] - Announce | Remove
" dat += "
Add New Goal" usr << browse(dat, "window=goals;size=400x400") diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm index a23e6eea69c..4b555bc724a 100644 --- a/code/modules/admin/verbs/striketeam.dm +++ b/code/modules/admin/verbs/striketeam.dm @@ -4,7 +4,7 @@ var/const/commandos_possible = 6 //if more Commandos are needed in the future var/global/sent_strike_team = 0 /client/proc/strike_team() - if(!ticker) + if(!SSticker) to_chat(usr, "The game hasn't started yet!") return if(sent_strike_team == 1) @@ -86,9 +86,9 @@ var/global/sent_strike_team = 0 R.mind.assigned_role = SPECIAL_ROLE_DEATHSQUAD R.mind.special_role = SPECIAL_ROLE_DEATHSQUAD R.mind.offstation_role = TRUE - if(!(R.mind in ticker.minds)) - ticker.minds += R.mind - ticker.mode.traitors += R.mind + if(!(R.mind in SSticker.minds)) + SSticker.minds += R.mind + SSticker.mode.traitors += R.mind R.key = ghost_mob.key if(nuke_code) R.mind.store_memory("Nuke Code: [nuke_code].") @@ -150,7 +150,7 @@ var/global/sent_strike_team = 0 new_commando.mind_initialize() new_commando.mind.assigned_role = SPECIAL_ROLE_DEATHSQUAD new_commando.mind.special_role = SPECIAL_ROLE_DEATHSQUAD - ticker.mode.traitors |= new_commando.mind//Adds them to current traitor list. Which is really the extra antagonist list. + SSticker.mode.traitors |= new_commando.mind//Adds them to current traitor list. Which is really the extra antagonist list. new_commando.equip_death_commando(is_leader) return new_commando diff --git a/code/modules/admin/verbs/striketeam_syndicate.dm b/code/modules/admin/verbs/striketeam_syndicate.dm index bf20d2b5503..7e77fe17df7 100644 --- a/code/modules/admin/verbs/striketeam_syndicate.dm +++ b/code/modules/admin/verbs/striketeam_syndicate.dm @@ -9,7 +9,7 @@ var/global/sent_syndicate_strike_team = 0 if(!src.holder) to_chat(src, "Only administrators may use this command.") return - if(!ticker) + if(!SSticker) alert("The game hasn't started yet!") return if(sent_syndicate_strike_team == 1) @@ -117,7 +117,7 @@ var/global/sent_syndicate_strike_team = 0 new_syndicate_commando.mind.assigned_role = SPECIAL_ROLE_SYNDICATE_DEATHSQUAD new_syndicate_commando.mind.special_role = SPECIAL_ROLE_SYNDICATE_DEATHSQUAD new_syndicate_commando.mind.offstation_role = TRUE - ticker.mode.traitors |= new_syndicate_commando.mind //Adds them to current traitor list. Which is really the extra antagonist list. + SSticker.mode.traitors |= new_syndicate_commando.mind //Adds them to current traitor list. Which is really the extra antagonist list. new_syndicate_commando.equip_syndicate_commando(is_leader) qdel(spawn_location) return new_syndicate_commando diff --git a/code/modules/admin/verbs/tripAI.dm b/code/modules/admin/verbs/tripAI.dm index 10ad3f07020..98a4bf82e98 100644 --- a/code/modules/admin/verbs/tripAI.dm +++ b/code/modules/admin/verbs/tripAI.dm @@ -2,21 +2,21 @@ set category = "Event" set name = "Create AI Triumvirate" - if(ticker.current_state > GAME_STATE_PREGAME) + if(SSticker.current_state > GAME_STATE_PREGAME) to_chat(usr, "This option is currently only usable during pregame. This may change at a later date.") return - if(SSjobs && ticker) + if(SSjobs && SSticker) var/datum/job/job = SSjobs.GetJob("AI") if(!job) to_chat(usr, "Unable to locate the AI job") return - if(ticker.triai) - ticker.triai = 0 + if(SSticker.triai) + SSticker.triai = 0 to_chat(usr, "Only one AI will be spawned at round start.") message_admins("[key_name_admin(usr)] has toggled off triple AIs at round start.", 1) else - ticker.triai = 1 + SSticker.triai = 1 to_chat(usr, "There will be an AI Triumvirate at round start.") message_admins("[key_name_admin(usr)] has toggled on triple AIs at round start.", 1) return diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index 5e434887ee0..6faef9a4df5 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -26,7 +26,7 @@ if(used) to_chat(user, "[src] is out of power!") return FALSE - if(!(user.mind in ticker.mode.syndicates)) + if(!(user.mind in SSticker.mode.syndicates)) to_chat(user, "AUTHENTICATION FAILURE. ACCESS DENIED.") return FALSE if(checking) @@ -62,27 +62,27 @@ /obj/item/antag_spawner/nuke_ops/spawn_antag(client/C, turf/T, kind, datum/mind/user) var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) - var/agent_number = LAZYLEN(ticker.mode.syndicates) + var/agent_number = LAZYLEN(SSticker.mode.syndicates) M.real_name = "[syndicate_name()] Operative #[agent_number]" set_syndicate_values(C, M) - ticker.mode.create_syndicate(M.mind) - ticker.mode.equip_syndicate(M, 0) - ticker.mode.update_syndicate_id(M.mind, FALSE) + SSticker.mode.create_syndicate(M.mind) + SSticker.mode.equip_syndicate(M, 0) + SSticker.mode.update_syndicate_id(M.mind, FALSE) /obj/item/antag_spawner/nuke_ops/proc/set_syndicate_values(client/C, mob/living/M) M.key = C.key - ticker.mode.syndicates += M.mind - ticker.mode.update_synd_icons_added(M.mind) + SSticker.mode.syndicates += M.mind + SSticker.mode.update_synd_icons_added(M.mind) M.mind.assigned_role = SPECIAL_ROLE_NUKEOPS M.mind.special_role = SPECIAL_ROLE_NUKEOPS M.mind.offstation_role = TRUE M.faction = list("syndicate") - ticker.mode.forge_syndicate_objectives(M.mind) - ticker.mode.greet_syndicate(M.mind) + SSticker.mode.forge_syndicate_objectives(M.mind) + SSticker.mode.greet_syndicate(M.mind) //////SYNDICATE BORG /obj/item/antag_spawner/nuke_ops/borg_tele @@ -115,7 +115,7 @@ return TRUE /obj/item/antag_spawner/nuke_ops/borg_tele/spawn_antag(client/C, turf/T, datum/mind/user) - if(!(user in ticker.mode.syndicates)) + if(!(user in SSticker.mode.syndicates)) used = FALSE return @@ -147,7 +147,7 @@ set_syndicate_values(user.current.client, R) L.key = C.key - ticker.mode.greet_syndicate(L.mind) + SSticker.mode.greet_syndicate(L.mind) ///////////SLAUGHTER DEMON @@ -195,7 +195,7 @@ S.key = C.key S.mind.assigned_role = S.name S.mind.special_role = S.name - ticker.mode.traitors += S.mind + SSticker.mode.traitors += S.mind var/datum/objective/assassinate/KillDaWiz = new /datum/objective/assassinate KillDaWiz.owner = S.mind KillDaWiz.target = user.mind @@ -264,7 +264,7 @@ M.mind.assigned_role = SPECIAL_ROLE_MORPH M.mind.special_role = SPECIAL_ROLE_MORPH to_chat(M, M.playstyle_string) - ticker.mode.traitors += M.mind + SSticker.mode.traitors += M.mind var/datum/objective/assassinate/KillDaWiz = new /datum/objective/assassinate KillDaWiz.owner = M.mind KillDaWiz.target = user.mind diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 33e12abe788..e213843df8c 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -34,7 +34,7 @@ /obj/effect/mob_spawn/attack_ghost(mob/user) var/mob/dead/observer/O = user - if(ticker.current_state != GAME_STATE_PLAYING || !loc || !ghost_usable) + if(SSticker.current_state != GAME_STATE_PLAYING || !loc || !ghost_usable) return if(!uses) to_chat(user, "This spawner is out of charges!") diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index ed4471d7b7c..1805d911caa 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -83,7 +83,7 @@ obj/item/clothing/shoes/magboots/syndie/advance //For the Syndicate Strike Team /obj/item/clothing/shoes/magboots/wizard/attack_self(mob/user) if(user) - if(user.mind in ticker.mode.wizards) + if(user.mind in SSticker.mode.wizards) if(magpulse) //faint blue light when shoes are turned on gives a reason to turn them off when not needed in maint set_light(0) else diff --git a/code/modules/events/abductor.dm b/code/modules/events/abductor.dm index 18d75f3ef30..3c7dcc6496b 100644 --- a/code/modules/events/abductor.dm +++ b/code/modules/events/abductor.dm @@ -13,11 +13,11 @@ if(candidates.len >= 2) //Oh god why we can't have static functions - var/number = ticker.mode.abductor_teams + 1 + var/number = SSticker.mode.abductor_teams + 1 var/datum/game_mode/abduction/temp - if(ticker.mode.config_tag == "abduction") - temp = ticker.mode + if(SSticker.mode.config_tag == "abduction") + temp = SSticker.mode else temp = new @@ -42,10 +42,10 @@ temp.make_abductor_team(number,preset_scientist=scientist_mind,preset_agent=agent_mind) temp.post_setup_team(number) - ticker.mode.abductor_teams++ + SSticker.mode.abductor_teams++ - if(ticker.mode.config_tag != "abduction") - ticker.mode.abductors |= temp.abductors + if(SSticker.mode.config_tag != "abduction") + SSticker.mode.abductors |= temp.abductors processing = 1 //So it will get gc'd return 1 else diff --git a/code/modules/events/alien_infestation.dm b/code/modules/events/alien_infestation.dm index 7e4473cb0d2..590ff374ad6 100644 --- a/code/modules/events/alien_infestation.dm +++ b/code/modules/events/alien_infestation.dm @@ -27,8 +27,8 @@ GLOB.respawnable_list -= C.client var/mob/living/carbon/alien/larva/new_xeno = new(vent.loc) new_xeno.key = C.key - if(ticker && ticker.mode) - ticker.mode.xenos += new_xeno.mind + if(SSticker && SSticker.mode) + SSticker.mode.xenos += new_xeno.mind spawncount-- successSpawn = 1 diff --git a/code/modules/karma/karma.dm b/code/modules/karma/karma.dm index 107ec3c4f3f..57063b0d743 100644 --- a/code/modules/karma/karma.dm +++ b/code/modules/karma/karma.dm @@ -59,7 +59,7 @@ var/list/karma_spenders = list() if(config.disable_karma) to_chat(src, "Karma is disabled.") return FALSE - if(!ticker || !GLOB.player_list.len || (ticker.current_state == GAME_STATE_PREGAME)) + if(!SSticker || !GLOB.player_list.len || (SSticker.current_state == GAME_STATE_PREGAME)) to_chat(src, "You can't award karma until the game has started.") return FALSE if(client.karma_spent || (ckey in karma_spenders)) diff --git a/code/modules/library/computers/checkout.dm b/code/modules/library/computers/checkout.dm index 10e747b4e31..638aaeee7c3 100644 --- a/code/modules/library/computers/checkout.dm +++ b/code/modules/library/computers/checkout.dm @@ -320,11 +320,11 @@ if(!bibledelay) var/obj/item/storage/bible/B = new /obj/item/storage/bible(src.loc) - if(ticker && ( ticker.Bible_icon_state && ticker.Bible_item_state) ) - B.icon_state = ticker.Bible_icon_state - B.item_state = ticker.Bible_item_state - B.name = ticker.Bible_name - B.deity_name = ticker.Bible_deity_name + if(SSticker && ( SSticker.Bible_icon_state && SSticker.Bible_item_state) ) + B.icon_state = SSticker.Bible_icon_state + B.item_state = SSticker.Bible_item_state + B.name = SSticker.Bible_name + B.deity_name = SSticker.Bible_deity_name bibledelay = 1 spawn(60) diff --git a/code/modules/mining/lavaland/loot/colossus_loot.dm b/code/modules/mining/lavaland/loot/colossus_loot.dm index d7c6232121f..5bfd1104fb6 100644 --- a/code/modules/mining/lavaland/loot/colossus_loot.dm +++ b/code/modules/mining/lavaland/loot/colossus_loot.dm @@ -38,7 +38,7 @@ /obj/machinery/smartfridge/black_box/process() ..() - if(!memory_saved && ticker.current_state == GAME_STATE_FINISHED) + if(!memory_saved && SSticker.current_state == GAME_STATE_FINISHED) WriteMemory() /obj/machinery/smartfridge/black_box/proc/WriteMemory() diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm index ec2d96ed880..5eb8f5766e4 100644 --- a/code/modules/mob/living/carbon/alien/alien_defense.dm +++ b/code/modules/mob/living/carbon/alien/alien_defense.dm @@ -6,7 +6,7 @@ As such, they can either help or harm other aliens. Help works like the human he In all, this is a lot like the monkey code. /N */ /mob/living/carbon/alien/attack_alien(mob/living/carbon/alien/M) - if(!ticker) + if(!SSticker) to_chat(M, "You cannot attack people before the game has started.") return diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index 3a752e61619..0addea8d4b6 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -93,8 +93,8 @@ spawn(6) var/mob/living/carbon/alien/larva/new_xeno = new(owner.drop_location()) new_xeno.key = C.key - if(ticker && ticker.mode) - ticker.mode.xenos += new_xeno.mind + if(SSticker && SSticker.mode) + SSticker.mode.xenos += new_xeno.mind new_xeno.mind.name = new_xeno.name new_xeno.mind.assigned_role = SPECIAL_ROLE_XENOMORPH new_xeno.mind.special_role = SPECIAL_ROLE_XENOMORPH diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 6d245674fd1..64d06dac4db 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -112,7 +112,7 @@ if(H.mind) H.mind.kills += "[key_name(src)]" - if(ticker && ticker.mode) + if(SSticker && SSticker.mode) // log_world("k") sql_report_death(src) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index bd5817e8867..079f886d055 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1961,7 +1961,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X if(7) // Pride log_game("[src] was influenced by the sin of pride.") O = new /datum/objective/sintouched/pride - ticker.mode.sintouched += src.mind + SSticker.mode.sintouched += src.mind src.mind.objectives += O var/obj_count = 1 to_chat(src, "They have no blood!") return - if(target.mind && target.mind.vampire && (target.mind in ticker.mode.vampires)) + if(target.mind && target.mind.vampire && (target.mind in SSticker.mode.vampires)) to_chat(user, "Your fangs fail to pierce [target.name]'s cold flesh") return if(SKELETON in target.mutations) diff --git a/code/modules/mob/living/carbon/superheroes.dm b/code/modules/mob/living/carbon/superheroes.dm index 4e04090b649..62935713a80 100644 --- a/code/modules/mob/living/carbon/superheroes.dm +++ b/code/modules/mob/living/carbon/superheroes.dm @@ -50,11 +50,11 @@ if(class == "Superhero") W.assignment = "Superhero" W.rank = "Superhero" - ticker.mode.superheroes += H.mind + SSticker.mode.superheroes += H.mind else if(class == "Supervillain") W.assignment = "Supervillain" W.rank = "Supervillain" - ticker.mode.supervillains += H.mind + SSticker.mode.supervillains += H.mind W.icon_state = "lifetimeid" W.SetOwnerInfo(H) W.UpdateName() @@ -157,7 +157,7 @@ /obj/effect/proc_holder/spell/targeted/recruit/cast(list/targets,mob/living/user = usr) for(var/mob/living/carbon/human/target in targets) var/obj/item/organ/external/head/head_organ = target.get_organ("head") - if(ticker.mode.greyshirts.len >= 3) + if(SSticker.mode.greyshirts.len >= 3) to_chat(user, "You have already recruited the maximum number of henchmen.") if(!in_range(user, target)) to_chat(user, "You need to be closer to enthrall [target].") @@ -218,7 +218,7 @@ to_chat(target, "You have decided to enroll as a henchman for [user]. You are now part of the feared 'Greyshirts'.") to_chat(target, "You must follow the orders of [user], and help [user.p_them()] succeed in [user.p_their()] dastardly schemes.") to_chat(target, "You may not harm other Greyshirt or [user]. However, you do not need to obey other Greyshirts.") - ticker.mode.greyshirts += target.mind + SSticker.mode.greyshirts += target.mind target.set_species(/datum/species/human) head_organ.h_style = "Bald" head_organ.f_style = "Shaved" diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 37077881350..fe762e423fc 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -89,8 +89,8 @@ mind.store_memory("Time of death: [station_time_timestamp("hh:mm:ss", timeofdeath)]", 0) GLOB.respawnable_list += src - if(ticker && ticker.mode) - ticker.mode.check_win() + if(SSticker && SSticker.mode) + SSticker.mode.check_win() if(mind && mind.devilinfo) // Expand this into a general-purpose death-response system when appropriate mind.devilinfo.beginResurrectionCheck(src) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 52fde3d0d9e..77831689662 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -691,7 +691,7 @@ return name /mob/living/update_gravity(has_gravity) - if(!ticker) + if(!SSticker) return if(has_gravity) clear_alert("weightless") diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 88b17124451..e9df2f0edad 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -279,7 +279,7 @@ return G /mob/living/attack_slime(mob/living/carbon/slime/M) - if(!ticker) + if(!SSticker) to_chat(M, "You cannot attack people before the game has started.") return diff --git a/code/modules/mob/living/silicon/ai/ai_defense.dm b/code/modules/mob/living/silicon/ai/ai_defense.dm index 6d32c24bb0a..c8ffebc6647 100644 --- a/code/modules/mob/living/silicon/ai/ai_defense.dm +++ b/code/modules/mob/living/silicon/ai/ai_defense.dm @@ -1,5 +1,5 @@ /mob/living/silicon/ai/attack_alien(mob/living/carbon/alien/humanoid/M) - if(!ticker) + if(!SSticker) to_chat(M, "You cannot attack people before the game has started.") return ..() diff --git a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm index 2771725a96d..6d12559ee9b 100644 --- a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm +++ b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm @@ -101,7 +101,7 @@ var/datum/cameranet/cameranet = new() /datum/cameranet/proc/updateVisibility(atom/A, opacity_check = 1) - if(!ticker || (opacity_check && !A.opacity)) + if(!SSticker || (opacity_check && !A.opacity)) return majorChunkChange(A, 2) diff --git a/code/modules/mob/living/silicon/ai/latejoin.dm b/code/modules/mob/living/silicon/ai/latejoin.dm index 69136e07a99..513b26ee558 100644 --- a/code/modules/mob/living/silicon/ai/latejoin.dm +++ b/code/modules/mob/living/silicon/ai/latejoin.dm @@ -33,8 +33,8 @@ var/global/list/empty_playable_ai_cores = list() mind.objectives.Cut() mind.special_role = null else - if(ticker.mode.name == "AutoTraitor") - var/datum/game_mode/traitor/autotraitor/current_mode = ticker.mode + if(SSticker.mode.name == "AutoTraitor") + var/datum/game_mode/traitor/autotraitor/current_mode = SSticker.mode current_mode.possible_traitors.Remove(src) // Ghost the current player and disallow them to return to the body diff --git a/code/modules/mob/living/silicon/login.dm b/code/modules/mob/living/silicon/login.dm index 01240adf942..4892441b804 100644 --- a/code/modules/mob/living/silicon/login.dm +++ b/code/modules/mob/living/silicon/login.dm @@ -1,12 +1,12 @@ /mob/living/silicon/Login() SetSleeping(0) - if(mind && ticker && ticker.mode) - ticker.mode.remove_revolutionary(mind, 1) - ticker.mode.remove_cultist(mind, 1) - ticker.mode.remove_wizard(mind) - ticker.mode.remove_changeling(mind) - ticker.mode.remove_vampire(mind) - ticker.mode.remove_thrall(mind, 0) - ticker.mode.remove_shadowling(mind) - ticker.mode.remove_abductor(mind) - ..() + if(mind && SSticker && SSticker.mode) + SSticker.mode.remove_revolutionary(mind, 1) + SSticker.mode.remove_cultist(mind, 1) + SSticker.mode.remove_wizard(mind) + SSticker.mode.remove_changeling(mind) + SSticker.mode.remove_vampire(mind) + SSticker.mode.remove_thrall(mind, 0) + SSticker.mode.remove_shadowling(mind) + SSticker.mode.remove_abductor(mind) + ..() diff --git a/code/modules/mob/living/silicon/pai/recruit.dm b/code/modules/mob/living/silicon/pai/recruit.dm index ff859853ea5..b2828070ad3 100644 --- a/code/modules/mob/living/silicon/pai/recruit.dm +++ b/code/modules/mob/living/silicon/pai/recruit.dm @@ -50,8 +50,8 @@ var/datum/paiController/paiController // Global handler for pAI candidates card.setPersonality(pai) card.looking_for_personality = 0 - ticker.mode.update_cult_icons_removed(card.pai.mind) - ticker.mode.update_rev_icons_removed(card.pai.mind) + SSticker.mode.update_cult_icons_removed(card.pai.mind) + SSticker.mode.update_rev_icons_removed(card.pai.mind) pai_candidates -= candidate usr << browse(null, "window=findPai") diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index e94f9e072b4..3985bfce50e 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -182,7 +182,7 @@ to_chat(user, "You swipe the sequencer across [src]'s interface and watch its eyes flicker.") if(jobban_isbanned(src, ROLE_SYNDICATE)) - ticker.mode.replace_jobbanned_player(src, ROLE_SYNDICATE) + SSticker.mode.replace_jobbanned_player(src, ROLE_SYNDICATE) to_chat(src, "You feel a sudden burst of malware loaded into your execute-as-root buffer. Your tiny brain methodically parses, loads and executes the script. You sense you have five minutes before the drone server detects this and automatically shuts you down.") diff --git a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm index 9bf388fe5fe..35bbad68b6a 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm @@ -27,7 +27,7 @@ /obj/machinery/drone_fabricator/process() - if(ticker.current_state < GAME_STATE_PLAYING) + if(SSticker.current_state < GAME_STATE_PLAYING) return if(stat & NOPOWER || !produce_drones) @@ -98,7 +98,7 @@ to_chat(usr, "You are banned from playing drones and cannot spawn as a drone.") return - if(!ticker || ticker.current_state < 3) + if(!SSticker || SSticker.current_state < 3) to_chat(src, "You can't join as a drone before the game starts!") return diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index ae6a832f6ac..9fe06a3fe4a 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1340,9 +1340,9 @@ var/list/robot_verbs_default = list( mind.special_role = SPECIAL_ROLE_ERT if(cyborg_unlock) crisis = 1 - if(!(mind in ticker.minds)) - ticker.minds += mind - ticker.mode.ert += mind + if(!(mind in SSticker.minds)) + SSticker.minds += mind + SSticker.mode.ert += mind /mob/living/silicon/robot/ert/gamma crisis = 1 diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 2b3d11357d1..c63856fcb0a 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -29,21 +29,21 @@ /mob/living/simple_animal/hostile/construct/New() ..() - if(!ticker.mode)//work around for maps with runes and cultdat is not loaded all the way + if(!SSticker.mode)//work around for maps with runes and cultdat is not loaded all the way name = "[const_type] ([rand(1, 1000)])" real_name = const_type icon_living = const_type icon_state = const_type else - name = "[ticker.cultdat.get_name(const_type)] ([rand(1, 1000)])" - real_name = ticker.cultdat.get_name(const_type) - icon_living = ticker.cultdat.get_icon(const_type) - icon_state = ticker.cultdat.get_icon(const_type) + name = "[SSticker.cultdat.get_name(const_type)] ([rand(1, 1000)])" + real_name = SSticker.cultdat.get_name(const_type) + icon_living = SSticker.cultdat.get_icon(const_type) + icon_state = SSticker.cultdat.get_icon(const_type) for(var/spell in construct_spells) AddSpell(new spell(null)) - if(ticker.cultdat.theme == "blood") + if(SSticker.cultdat.theme == "blood") updateglow() /mob/living/simple_animal/hostile/construct/examine(mob/user) diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 38787198a5f..b5ce4622052 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -48,9 +48,9 @@ ..() /mob/living/simple_animal/pet/cat/Runtime/Life(seconds, times_fired) - if(!cats_deployed && ticker.current_state >= GAME_STATE_SETTING_UP) + if(!cats_deployed && SSticker.current_state >= GAME_STATE_SETTING_UP) Deploy_The_Cats() - if(!stat && ticker.current_state == GAME_STATE_FINISHED && !memory_saved) + if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved) Write_Memory() ..() diff --git a/code/modules/mob/living/simple_animal/friendly/cockroach.dm b/code/modules/mob/living/simple_animal/friendly/cockroach.dm index e92174bd6c2..1e7b3a61d0c 100644 --- a/code/modules/mob/living/simple_animal/friendly/cockroach.dm +++ b/code/modules/mob/living/simple_animal/friendly/cockroach.dm @@ -22,7 +22,7 @@ del_on_death = 1 /mob/living/simple_animal/cockroach/can_die() - return ..() && !ticker.cinematic //If the nuke is going off, then cockroaches are invincible. Keeps the nuke from killing them, cause cockroaches are immune to nukes. + return ..() && !SSticker.cinematic //If the nuke is going off, then cockroaches are invincible. Keeps the nuke from killing them, cause cockroaches are immune to nukes. /mob/living/simple_animal/cockroach/Crossed(var/atom/movable/AM) if(isliving(AM)) diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index f409d184340..40eb94a9ef3 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -6,7 +6,7 @@ create_attack_log("Logged out at [atom_loc_line(get_turf(src))]") // `holder` is nil'd out by now, so we check the `admin_datums` array directly //Only report this stuff if we are currently playing. - if(admin_datums[ckey] && ticker && ticker.current_state == GAME_STATE_PLAYING) + if(admin_datums[ckey] && SSticker && SSticker.current_state == GAME_STATE_PLAYING) var/datum/admins/temp_admin = admin_datums[ckey] // Triggers on people with banhammer power only - no mentors tripping the alarm if(temp_admin.rights & R_BAN) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 482bf85491d..e83b60d402f 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -745,7 +745,7 @@ var/list/slot_equipment_priority = list( \ to_chat(usr, "Respawning is disabled.") return - if(stat != DEAD || !ticker) + if(stat != DEAD || !SSticker) to_chat(usr, "You must be dead to use this!") return @@ -1100,7 +1100,7 @@ var/list/slot_equipment_priority = list( \ to_chat(usr, "You are banned from playing as sentient animals.") return - if(!ticker || ticker.current_state < 3) + if(!SSticker || SSticker.current_state < 3) to_chat(src, "You can't respawn as an NPC before the game starts!") return diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index a46b9a94fc7..faaf8631ec1 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -59,7 +59,7 @@ real_name = "Random Character Slot" var/output = "

Setup Character
[real_name]

" - if(!ticker || ticker.current_state <= GAME_STATE_PREGAME) + if(!SSticker || SSticker.current_state <= GAME_STATE_PREGAME) if(!ready) output += "

Declare Ready

" else output += "

You are ready (Cancel)

" else @@ -106,21 +106,21 @@ /mob/new_player/Stat() statpanel("Lobby") - if(client.statpanel=="Lobby" && ticker) - if(ticker.hide_mode) + if(client.statpanel=="Lobby" && SSticker) + if(SSticker.hide_mode) stat("Game Mode:", "Secret") else - if(ticker.hide_mode == 0) + if(SSticker.hide_mode == 0) stat("Game Mode:", "[master_mode]") // Old setting for showing the game mode else stat("Game Mode: ", "Secret") - if((ticker.current_state == GAME_STATE_PREGAME) && going) - stat("Time To Start:", ticker.pregame_timeleft) - if((ticker.current_state == GAME_STATE_PREGAME) && !going) + if((SSticker.current_state == GAME_STATE_PREGAME) && going) + stat("Time To Start:", SSticker.pregame_timeleft) + if((SSticker.current_state == GAME_STATE_PREGAME) && !going) stat("Time To Start:", "DELAYED") - if(ticker.current_state == GAME_STATE_PREGAME) + if(SSticker.current_state == GAME_STATE_PREGAME) stat("Players:", "[totalPlayers]") if(check_rights(R_ADMIN, 0, src)) stat("Players Ready:", "[totalPlayersReady]") @@ -136,7 +136,7 @@ ..() statpanel("Status") - if(client.statpanel == "Status" && ticker) + if(client.statpanel == "Status" && SSticker) show_stat_station_time() @@ -217,7 +217,7 @@ if(!tos_consent) to_chat(usr, "You must consent to the terms of service before you can join!") return 0 - if(!ticker || ticker.current_state != GAME_STATE_PLAYING) + if(!SSticker || SSticker.current_state != GAME_STATE_PLAYING) to_chat(usr, "The round is either not ready, or has already finished...") return @@ -303,7 +303,7 @@ /mob/new_player/proc/AttemptLateSpawn(rank,var/spawning_at) if(src != usr) return 0 - if(!ticker || ticker.current_state != GAME_STATE_PLAYING) + if(!SSticker || SSticker.current_state != GAME_STATE_PLAYING) to_chat(usr, "The round is either not ready, or has already finished...") return 0 if(!enter_allowed) @@ -330,7 +330,7 @@ ai_character.moveToEmptyCore() AnnounceCyborg(ai_character, rank, "has been downloaded to the empty core in \the [get_area(ai_character)]") - ticker.mode.latespawn(ai_character) + SSticker.mode.latespawn(ai_character) qdel(src) return @@ -370,7 +370,7 @@ character = SSjobs.EquipRank(character, rank, 1) //equips the human EquipCustomItems(character) - ticker.mode.latespawn(character) + SSticker.mode.latespawn(character) if(character.mind.assigned_role == "Cyborg") AnnounceCyborg(character, rank, join_message) @@ -379,7 +379,7 @@ callHook("latespawn", list(character)) else data_core.manifest_inject(character) - ticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn + SSticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn AnnounceArrival(character, rank, join_message) callHook("latespawn", list(character)) AddEmploymentContract(character) @@ -390,7 +390,7 @@ /mob/new_player/proc/AnnounceArrival(var/mob/living/carbon/human/character, var/rank, var/join_message) - if(ticker.current_state == GAME_STATE_PLAYING) + if(SSticker.current_state == GAME_STATE_PLAYING) var/ailist[] = list() for(var/mob/living/silicon/ai/A in GLOB.living_mob_list) ailist += A @@ -422,7 +422,7 @@ employmentCabinet.addFile(employee) /mob/new_player/proc/AnnounceCyborg(var/mob/living/character, var/rank, var/join_message) - if(ticker.current_state == GAME_STATE_PLAYING) + if(SSticker.current_state == GAME_STATE_PLAYING) var/ailist[] = list() for(var/mob/living/silicon/ai/A in GLOB.living_mob_list) ailist += A @@ -536,7 +536,7 @@ var/mob/living/carbon/human/new_character = new(loc) new_character.lastarea = get_area(loc) - if(ticker.random_players || appearance_isbanned(new_character)) + if(SSticker.random_players || appearance_isbanned(new_character)) client.prefs.random_character() client.prefs.real_name = random_name(client.prefs.gender) client.prefs.copy_to(new_character) diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index e15c727accb..53ab45c58dc 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -25,8 +25,8 @@ /obj/singularity/narsie/large/New() ..() - icon_state = ticker.cultdat.entity_icon_state - name = ticker.cultdat.entity_name + icon_state = SSticker.cultdat.entity_icon_state + name = SSticker.cultdat.entity_name to_chat(world, " [name] HAS RISEN") world << pick(sound('sound/hallucinations/im_here1.ogg'), sound('sound/hallucinations/im_here2.ogg')) @@ -127,12 +127,12 @@ /obj/singularity/narsie/proc/acquire(var/mob/food) if(food == target) return - to_chat(target, "[uppertext(ticker.cultdat.entity_name)] HAS LOST INTEREST IN YOU") + to_chat(target, "[uppertext(SSticker.cultdat.entity_name)] HAS LOST INTEREST IN YOU") target = food if(ishuman(target)) - to_chat(target, "[uppertext(ticker.cultdat.entity_name)] HUNGERS FOR YOUR SOUL") + to_chat(target, "[uppertext(SSticker.cultdat.entity_name)] HUNGERS FOR YOUR SOUL") else - to_chat(target, "[uppertext(ticker.cultdat.entity_name)] HAS CHOSEN YOU TO LEAD HER TO HER NEXT MEAL") + to_chat(target, "[uppertext(SSticker.cultdat.entity_name)] HAS CHOSEN YOU TO LEAD HER TO HER NEXT MEAL") //Wizard narsie /obj/singularity/narsie/wizard diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 6c9ecb55afc..7ebc4f4471a 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -198,7 +198,7 @@ return 0 /obj/machinery/power/smes/Destroy() - if(ticker && ticker.current_state == GAME_STATE_PLAYING) + if(SSticker && SSticker.current_state == GAME_STATE_PLAYING) var/area/area = get_area(src) if(area) message_admins("SMES deleted at ([area.name])") diff --git a/code/modules/reagents/chemistry/reagents/food.dm b/code/modules/reagents/chemistry/reagents/food.dm index bf2417a192e..a67f681973d 100644 --- a/code/modules/reagents/chemistry/reagents/food.dm +++ b/code/modules/reagents/chemistry/reagents/food.dm @@ -9,7 +9,7 @@ var/diet_flags = DIET_OMNI | DIET_HERB | DIET_CARN /datum/reagent/consumable/on_mob_life(mob/living/M) - if(!(M.mind in ticker.mode.vampires)) + if(!(M.mind in SSticker.mode.vampires)) if(ishuman(M)) var/mob/living/carbon/human/H = M if(H.can_eat(diet_flags)) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients @@ -27,7 +27,7 @@ /datum/reagent/consumable/nutriment/on_mob_life(mob/living/M) var/update_flags = STATUS_UPDATE_NONE - if(!(M.mind in ticker.mode.vampires)) + if(!(M.mind in SSticker.mode.vampires)) if(ishuman(M)) var/mob/living/carbon/human/H = M if(H.can_eat(diet_flags)) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm index dcd21f639d1..4816c1f3e50 100644 --- a/code/modules/reagents/chemistry/reagents/water.dm +++ b/code/modules/reagents/chemistry/reagents/water.dm @@ -326,14 +326,14 @@ if(current_cycle >= 75 && prob(33)) // 30 units, 150 seconds M.AdjustConfused(3) if(isvampirethrall(M)) - ticker.mode.remove_vampire_mind(M.mind) + SSticker.mode.remove_vampire_mind(M.mind) holder.remove_reagent(id, volume) M.SetJitter(0) M.SetStuttering(0) M.SetConfused(0) return if(iscultist(M)) - ticker.mode.remove_cultist(M.mind) + SSticker.mode.remove_cultist(M.mind) holder.remove_reagent(id, volume) // maybe this is a little too perfect and a max() cap on the statuses would be better?? M.SetJitter(0) M.SetStuttering(0) diff --git a/code/modules/response_team/ert.dm b/code/modules/response_team/ert.dm index 0bac5824780..2a86d4a4a54 100644 --- a/code/modules/response_team/ert.dm +++ b/code/modules/response_team/ert.dm @@ -21,11 +21,11 @@ var/ert_request_answered = FALSE if(!check_rights(R_EVENT)) return - if(!ticker) + if(!SSticker) to_chat(usr, "The game hasn't started yet!") return - if(ticker.current_state == GAME_STATE_PREGAME) + if(SSticker.current_state == GAME_STATE_PREGAME) to_chat(usr, "The round hasn't started yet!") return @@ -164,9 +164,9 @@ var/ert_request_answered = FALSE M.mind.original = M M.mind.assigned_role = SPECIAL_ROLE_ERT M.mind.special_role = SPECIAL_ROLE_ERT - if(!(M.mind in ticker.minds)) - ticker.minds += M.mind //Adds them to regular mind list. - ticker.mode.ert += M.mind + if(!(M.mind in SSticker.minds)) + SSticker.minds += M.mind //Adds them to regular mind list. + SSticker.mode.ert += M.mind M.forceMove(spawn_location) SSjobs.CreateMoneyAccount(M, class, null) diff --git a/code/modules/security_levels/keycard authentication.dm b/code/modules/security_levels/keycard authentication.dm index 3f074c1246c..834d3ddc907 100644 --- a/code/modules/security_levels/keycard authentication.dm +++ b/code/modules/security_levels/keycard authentication.dm @@ -183,7 +183,7 @@ trigger_armed_response_team(new /datum/response_team/amber) // No admins? No problem. Automatically send a code amber ERT. /obj/machinery/keycard_auth/proc/is_ert_blocked() - return ticker.mode && ticker.mode.ert_disabled + return SSticker.mode && SSticker.mode.ert_disabled var/global/maint_all_access = 0 var/global/station_all_access = 0 diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm index 0efe2043ab0..4c945921389 100644 --- a/code/modules/station_goals/dna_vault.dm +++ b/code/modules/station_goals/dna_vault.dm @@ -13,7 +13,7 @@ /datum/station_goal/dna_vault/New() ..() animal_count = rand(15, 20) //might be too few given ~15 roundstart stationside ones - human_count = rand(round(0.75 * ticker.mode.num_players_started()), ticker.mode.num_players_started()) // 75%+ roundstart population. + human_count = rand(round(0.75 * SSticker.mode.num_players_started()), SSticker.mode.num_players_started()) // 75%+ roundstart population. var/non_standard_plants = non_standard_plants_count() plant_count = rand(round(0.5 * non_standard_plants),round(0.7 * non_standard_plants)) @@ -166,8 +166,8 @@ var/list/non_simple_animals = typecacheof(list(/mob/living/carbon/human/monkey,/ F.parent = src fillers += F - if(ticker.mode) - for(var/datum/station_goal/dna_vault/G in ticker.mode.station_goals) + if(SSticker.mode) + for(var/datum/station_goal/dna_vault/G in SSticker.mode.station_goals) animals_max = G.animal_count plants_max = G.plant_count dna_max = G.human_count diff --git a/code/modules/station_goals/shield.dm b/code/modules/station_goals/shield.dm index 09ccb3ce36b..68977b5e14d 100644 --- a/code/modules/station_goals/shield.dm +++ b/code/modules/station_goals/shield.dm @@ -83,7 +83,7 @@ )) data["notice"] = notice - var/datum/station_goal/station_shield/G = locate() in ticker.mode.station_goals + var/datum/station_goal/station_shield/G = locate() in SSticker.mode.station_goals if(G) data["meteor_shield"] = 1 data["meteor_shield_coverage"] = G.get_coverage() diff --git a/code/modules/station_goals/station_goal.dm b/code/modules/station_goals/station_goal.dm index 754e09b4185..90d4defa26c 100644 --- a/code/modules/station_goals/station_goal.dm +++ b/code/modules/station_goals/station_goal.dm @@ -33,7 +33,7 @@ to_chat(world, "Station Goal : [name] : Failed!") /datum/station_goal/Destroy() - ticker.mode.station_goals -= src + SSticker.mode.station_goals -= src . = ..() /datum/station_goal/Topic(href, href_list) diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index f959732427a..ebe824f0bbc 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -328,7 +328,7 @@ if(target.vision_type) //Turns off their darksight if it's still active. to_chat(target, "Your eyes are suddenly wrought with immense pain as your darksight is forcibly dismissed!") target.vision_type = null - ticker.mode.remove_thrall(target.mind, 0) + SSticker.mode.remove_thrall(target.mind, 0) target.visible_message("A strange black mass falls from [target]'s [E]!") var/obj/item/organ/thing = new /obj/item/organ/internal/shadowtumor(get_turf(target)) thing.set_dna(target.dna) diff --git a/paradise.dme b/paradise.dme index 1b7a691c820..0d9cc3045fa 100644 --- a/paradise.dme +++ b/paradise.dme @@ -200,7 +200,6 @@ #include "code\controllers\verbs.dm" #include "code\controllers\Processes\lighting.dm" #include "code\controllers\Processes\npcai.dm" -#include "code\controllers\Processes\ticker.dm" #include "code\controllers\ProcessScheduler\core\process.dm" #include "code\controllers\ProcessScheduler\core\processScheduler.dm" #include "code\controllers\subsystem\air.dm" @@ -227,6 +226,7 @@ #include "code\controllers\subsystem\spacedrift.dm" #include "code\controllers\subsystem\sun.dm" #include "code\controllers\subsystem\throwing.dm" +#include "code\controllers\subsystem\ticker.dm" #include "code\controllers\subsystem\timer.dm" #include "code\controllers\subsystem\vote.dm" #include "code\controllers\subsystem\weather.dm" @@ -443,7 +443,6 @@ #include "code\game\dna\genes\vg_powers.dm" #include "code\game\gamemodes\factions.dm" #include "code\game\gamemodes\game_mode.dm" -#include "code\game\gamemodes\gameticker.dm" #include "code\game\gamemodes\intercept_report.dm" #include "code\game\gamemodes\objective.dm" #include "code\game\gamemodes\scoreboard.dm" From e2cf2782af4aad5cfb514ee7f0bd3b0182ff85db Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Tue, 30 Apr 2019 19:16:44 +0200 Subject: [PATCH 047/195] Re-add fast_despawn --- code/game/area/areas.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index f1402b235fe..6fd122261fb 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -63,6 +63,8 @@ 'sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg',\ 'sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg') + var/fast_despawn = TRUE + /area/Initialize(mapload) GLOB.all_areas += src icon_state = "" From 4ad9fd4d1816f3b7af37cec7954d16d15f5ddc9c Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Tue, 30 Apr 2019 19:17:34 +0200 Subject: [PATCH 048/195] Correct value --- code/game/area/areas.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 6fd122261fb..e5a7377b5b6 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -63,7 +63,7 @@ 'sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg',\ 'sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg') - var/fast_despawn = TRUE + var/fast_despawn = FALSE /area/Initialize(mapload) GLOB.all_areas += src From 1e363bfb88b3de2da9a3f6dae4493a3689c39564 Mon Sep 17 00:00:00 2001 From: Arkatos1 Date: Tue, 30 Apr 2019 19:51:01 +0200 Subject: [PATCH 049/195] Craftable patch pack --- code/game/objects/items/stacks/sheets/sheet_types.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index abc328a8bf1..2c1222154b0 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -240,6 +240,7 @@ var/global/list/datum/stack_recipe/cloth_recipes = list ( \ var/global/list/datum/stack_recipe/cardboard_recipes = list ( new /datum/stack_recipe("box", /obj/item/storage/box), new /datum/stack_recipe("large box", /obj/item/storage/box/large, 4), + new /datum/stack_recipe("patch pack", /obj/item/storage/pill_bottle/patch_pack, 2), new /datum/stack_recipe("light tubes", /obj/item/storage/box/lights/tubes), new /datum/stack_recipe("light bulbs", /obj/item/storage/box/lights/bulbs), new /datum/stack_recipe("mouse traps", /obj/item/storage/box/mousetraps), From acf43fac3ae0cc399eb8a15acc67087a553fac1a Mon Sep 17 00:00:00 2001 From: AffectedArc07 Date: Tue, 30 Apr 2019 19:19:18 +0100 Subject: [PATCH 050/195] V2 --- code/__DEFINES/game.dm | 1 + code/controllers/subsystem/ticker.dm | 96 +++++++++++------------ code/modules/admin/admin.dm | 21 +++-- code/modules/mob/new_player/new_player.dm | 2 +- 4 files changed, 63 insertions(+), 57 deletions(-) diff --git a/code/__DEFINES/game.dm b/code/__DEFINES/game.dm index 68518e80d6c..5c262724a14 100644 --- a/code/__DEFINES/game.dm +++ b/code/__DEFINES/game.dm @@ -1,3 +1,4 @@ +#define GAME_STATE_STARTUP 0 #define GAME_STATE_PREGAME 1 #define GAME_STATE_SETTING_UP 2 #define GAME_STATE_PLAYING 3 diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 0e67479b531..42b36c882f4 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -11,7 +11,8 @@ SUBSYSTEM_DEF(ticker) // Game ticker related vars var/round_start_time = 0 var/const/restart_timeout = 600 - var/current_state = GAME_STATE_PREGAME + var/current_state = GAME_STATE_STARTUP + var/force_start = 0 // Do we want to force-start as soon as we can var/force_ending = 0 var/hide_mode = 0 // leave here at 0 ! setup() will take care of it when needed for Secret mode -walter0o var/datum/game_mode/mode = null @@ -30,7 +31,7 @@ SUBSYSTEM_DEF(ticker) var/list/availablefactions = list() // list of factions with openings var/tipped = FALSE //Did we broadcast the tip of the day yet? var/selected_tip // What will be the tip of the day? - var/pregame_timeleft = "Initializing" + var/pregame_timeleft // This is used for calculations var/delay_end = 0 //if set to nonzero, the round will not restart on it's own var/triai = 0//Global holder for Triumvirate var/initialtpass = 0 //holder for inital autotransfer vote timer @@ -56,56 +57,55 @@ SUBSYSTEM_DEF(ticker) else lastTickerTimeDuration = (currentTime - lastTickerTime) / TICKS_IN_SECOND lastTickerTime = currentTime - - // Startup loop - if(current_state == GAME_STATE_PREGAME) - pregame_timeleft = config.pregame_timestart - to_chat(world, "Welcome to the pre-game lobby!") - to_chat(world, "Please, setup your character and select ready. Game will start in [pregame_timeleft] seconds") - while(current_state == GAME_STATE_PREGAME) - sleep(10) - if(going) - pregame_timeleft-- - - if(pregame_timeleft <= 60 && !tipped) + // Main firing sequence + switch(current_state) + if(GAME_STATE_STARTUP) + // This is ran as soon as the MC starts firing, and should only run ONCE, unless startup fails + round_start_time = world.time + (config.pregame_timestart * 10) + to_chat(world, "Welcome to the pre-game lobby!") + to_chat(world, "Please, setup your character and select ready. Game will start in [config.pregame_timestart] seconds") + current_state = GAME_STATE_PREGAME + fire() // TG says this is a good idea + if(GAME_STATE_PREGAME) + // This is so we dont have sleeps in controllers, because that is a bad, bad thing + pregame_timeleft = max(0,round_start_time - world.time) + + if(pregame_timeleft <= 600 && !tipped) // 60 seconds send_tip_of_the_round() tipped = TRUE - - if(pregame_timeleft <= 0) - if(setup()) // Try to start the round - current_state = GAME_STATE_SETTING_UP - Master.SetRunLevel(RUNLEVEL_SETUP) - else // It didnt work, lets loop again - break - - // This makes sure the game keeps going - if(current_state != GAME_STATE_PLAYING) - return 0 - - mode.process() - mode.process_job_tasks() - var/game_finished = SSshuttle.emergency.mode >= SHUTTLE_ENDGAME || mode.station_was_nuked - if(config.continuous_rounds) - mode.check_finished() // some modes contain var-changing code in here, so call even if we don't uses result - else - game_finished |= mode.check_finished() - - if((!mode.explosion_in_progress && game_finished) || force_ending) - current_state = GAME_STATE_FINISHED - Master.SetRunLevel(RUNLEVEL_POSTGAME) - auto_toggle_ooc(1) // Turn it on - spawn - declare_completion() - - spawn(50) - callHook("roundend") - - if(mode.station_was_nuked) - world.Reboot("Station destroyed by Nuclear Device.", "end_proper", "nuke") + + if(pregame_timeleft <= 0 || force_start) + current_state = GAME_STATE_SETTING_UP + Master.SetRunLevel(RUNLEVEL_SETUP) + if(GAME_STATE_SETTING_UP) + if(!setup()) // Setup failed + current_state = GAME_STATE_STARTUP + Master.SetRunLevel(RUNLEVEL_LOBBY) + if(GAME_STATE_PLAYING) + mode.process() + mode.process_job_tasks() + var/game_finished = SSshuttle.emergency.mode >= SHUTTLE_ENDGAME || mode.station_was_nuked + if(config.continuous_rounds) + mode.check_finished() // some modes contain var-changing code in here, so call even if we don't uses result else - world.Reboot("Round ended.", "end_proper", "proper completion") + game_finished |= mode.check_finished() + if(game_finished) + current_state = GAME_STATE_FINISHED + if(GAME_STATE_FINISHED) + current_state = GAME_STATE_FINISHED + Master.SetRunLevel(RUNLEVEL_POSTGAME) // This shouldnt process more than once, but you never know + auto_toggle_ooc(1) // Turn it on - return 1 + spawn(0) + declare_completion() + + spawn(50) + callHook("roundend") + + if(mode.station_was_nuked) + world.Reboot("Station destroyed by Nuclear Device.", "end_proper", "nuke") + else + world.Reboot("Round ended.", "end_proper", "proper completion") /datum/controller/subsystem/ticker/proc/votetimer() diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 74b1aa00efd..2a981e8b9c4 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -675,18 +675,23 @@ var/global/nologevent = 0 if(!SSticker) alert("Unable to start the game as it is not set up.") return - if(SSticker.current_state == GAME_STATE_PREGAME) - if(config.start_now_confirmation) - if(alert(usr, "This is a live server. Are you sure you want to start now?", "Start game", "Yes", "No") != "Yes") - return - SSticker.current_state = GAME_STATE_SETTING_UP - log_admin("[key_name(usr)] has started the game.") - message_admins("[key_name_admin(usr)] has started the game.") + + if(config.start_now_confirmation) + if(alert(usr, "This is a live server. Are you sure you want to start now?", "Start game", "Yes", "No") != "Yes") + return + + if(SSticker.current_state == GAME_STATE_PREGAME || SSticker.current_state == GAME_STATE_STARTUP) + SSticker.force_start = TRUE + log_admin("[usr.key] has started the game.") + var/msg = "" + if(SSticker.current_state == GAME_STATE_STARTUP) + msg = " (The server is still setting up, but the round will be started as soon as possible.)" + message_admins("[usr.key] has started the game.[msg]") feedback_add_details("admin_verb","SN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return 1 else to_chat(usr, "Error: Start Now: Game has already started.") - return 0 + return /datum/admins/proc/toggleenter() set category = "Server" diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index faaf8631ec1..5cb96a7c532 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -116,7 +116,7 @@ stat("Game Mode: ", "Secret") if((SSticker.current_state == GAME_STATE_PREGAME) && going) - stat("Time To Start:", SSticker.pregame_timeleft) + stat("Time To Start:", round(SSticker.pregame_timeleft/10)) if((SSticker.current_state == GAME_STATE_PREGAME) && !going) stat("Time To Start:", "DELAYED") From e0015b69baba8b5aa2bf17e5b13a3068871d8793 Mon Sep 17 00:00:00 2001 From: Dovixx Date: Tue, 30 Apr 2019 22:45:00 +0300 Subject: [PATCH 051/195] Proper fix (And yes i did forget about this PR) --- code/modules/paperwork/photography.dm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 4a57c1b2636..de3f2ad52d6 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -325,9 +325,10 @@ var/list/SpookyGhosts = list("ghost","shade","shade2","ghost-narsie","horror","s to_chat(user, "[pictures_left] photos left.") icon_state = icon_off on = 0 - if(user.mind && user.mind.assigned_role == "Chaplain") - if(prob(24)) - handle_haunt(user) + if(istype(src,/obj/item/camera/spooky)) + if(user.mind && user.mind.assigned_role == "Chaplain" && see_ghosts) + if(prob(24)) + handle_haunt(user) spawn(64) icon_state = icon_on on = 1 From bdc5452609c671690efa1f0d07dd7f95e3d34a8b Mon Sep 17 00:00:00 2001 From: AffectedArc07 Date: Tue, 30 Apr 2019 21:12:09 +0100 Subject: [PATCH 052/195] Globalise this --- code/__HELPERS/names.dm | 4 +-- code/_globalvars/misc.dm | 5 +++- code/_globalvars/station.dm | 5 ++-- code/controllers/subsystem/ticker.dm | 34 +++++++++++++++----------- code/game/gamemodes/traitor/traitor.dm | 8 +++--- code/game/world.dm | 18 +------------- 6 files changed, 33 insertions(+), 41 deletions(-) diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm index 5b90cda376e..246377eba32 100644 --- a/code/__HELPERS/names.dm +++ b/code/__HELPERS/names.dm @@ -112,8 +112,8 @@ var/syndicate_name = null //Traitors and traitor silicons will get these. Revs will not. -var/syndicate_code_phrase//Code phrase for traitors. -var/syndicate_code_response//Code response for traitors. +GLOBAL_VAR(syndicate_code_phrase) //Code phrase for traitors. +GLOBAL_VAR(syndicate_code_response) //Code response for traitors. /* Should be expanded. diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm index 77443fb4ab2..e5674a9b47b 100644 --- a/code/_globalvars/misc.dm +++ b/code/_globalvars/misc.dm @@ -83,4 +83,7 @@ GLOBAL_VAR_INIT(gametime_offset, 432000) // 12:00 in seconds //printers shutdown if too much shit printed var/copier_items_printed = 0 var/copier_max_items = 300 -var/copier_items_printed_logged = FALSE \ No newline at end of file +var/copier_items_printed_logged = FALSE + + +GLOBAL_VAR(map_name) // Self explanatory \ No newline at end of file diff --git a/code/_globalvars/station.dm b/code/_globalvars/station.dm index e997a672e1f..ba8b70991c2 100644 --- a/code/_globalvars/station.dm +++ b/code/_globalvars/station.dm @@ -1,3 +1,2 @@ -var/global/datum/datacore/data_core = null - -var/map_name = "Unknown" //The name of the map that is loaded. Assigned in world/New() \ No newline at end of file +// TODO: Move this to be not in its own fucking file all alone on its own +var/global/datum/datacore/data_core = null \ No newline at end of file diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 42b36c882f4..e70374b2779 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -5,10 +5,7 @@ SUBSYSTEM_DEF(ticker) priority = FIRE_PRIORITY_TICKER flags = SS_KEEP_TIMING runlevels = RUNLEVEL_LOBBY | RUNLEVEL_SETUP | RUNLEVEL_GAME - // Time ticker related vars - var/lastTickerTimeDuration - var/lastTickerTime - // Game ticker related vars + var/round_start_time = 0 var/const/restart_timeout = 600 var/current_state = GAME_STATE_STARTUP @@ -39,25 +36,34 @@ SUBSYSTEM_DEF(ticker) var/round_end_announced = 0 // Spam Prevention. Announce round end only once.\ /datum/controller/subsystem/ticker/Initialize() - lastTickerTime = world.timeofday login_music = pick(\ 'sound/music/thunderdome.ogg',\ 'sound/music/space.ogg',\ 'sound/music/title1.ogg',\ 'sound/music/title2.ogg',\ 'sound/music/title3.ogg',) - ..() + // Setup codephrase + if(!GLOB.syndicate_code_phrase) + GLOB.syndicate_code_phrase = generate_code_phrase() + if(!GLOB.syndicate_code_response) + GLOB.syndicate_code_response = generate_code_phrase() + + // Map name + if(using_map && using_map.name) + GLOB.map_name = "[using_map.name]" + else + GLOB.map_name = "Unknown" + + // World name + if(config && config.server_name) + world.name = "[config.server_name]: [station_name()]" + else + world.name = station_name() + + return ..() /datum/controller/subsystem/ticker/fire() - // This code is EXTREMELY important shit for checking midnight time rollover. Dont fuck with it - var/currentTime = world.timeofday - if(currentTime < lastTickerTime) - lastTickerTimeDuration = (currentTime - (lastTickerTime - TICKS_IN_DAY)) / TICKS_IN_SECOND - else - lastTickerTimeDuration = (currentTime - lastTickerTime) / TICKS_IN_SECOND - lastTickerTime = currentTime - // Main firing sequence switch(current_state) if(GAME_STATE_STARTUP) // This is ran as soon as the MC starts firing, and should only run ONCE, unless startup fails diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index d956e6d76b6..c2855f5c338 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -208,11 +208,11 @@ /datum/game_mode/proc/give_codewords(mob/living/traitor_mob) to_chat(traitor_mob, "The Syndicate provided you with the following information on how to identify their agents:") - to_chat(traitor_mob, "Code Phrase: [syndicate_code_phrase]") - to_chat(traitor_mob, "Code Response: [syndicate_code_response]") + to_chat(traitor_mob, "Code Phrase: [GLOB.syndicate_code_phrase]") + to_chat(traitor_mob, "Code Response: [GLOB.syndicate_code_response]") - traitor_mob.mind.store_memory("Code Phrase: [syndicate_code_phrase]") - traitor_mob.mind.store_memory("Code Response: [syndicate_code_response]") + traitor_mob.mind.store_memory("Code Phrase: [GLOB.syndicate_code_phrase]") + traitor_mob.mind.store_memory("Code Response: [GLOB.syndicate_code_response]") to_chat(traitor_mob, "Use the code words in the order provided, during regular conversation, to identify other agents. Proceed with caution, however, as everyone is a potential foe.") diff --git a/code/game/world.dm b/code/game/world.dm index 8106aca31d3..0341699a254 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -35,22 +35,6 @@ var/global/list/map_transition_config = MAP_TRANSITION_CONFIG processScheduler.setup() - if(!syndicate_code_phrase) - syndicate_code_phrase = generate_code_phrase() - if(!syndicate_code_response) - syndicate_code_response = generate_code_phrase() - if(using_map && using_map.name) - map_name = "[using_map.name]" - else - map_name = "Unknown" - - - if(config && config.server_name) - name = "[config.server_name]: [station_name()]" - else - name = station_name() - - #undef RECOMMENDED_VERSION return @@ -118,7 +102,7 @@ var/world_topic_spam_protect_time = world.timeofday player_count++ s["players"] = player_count s["admins"] = admin_count - s["map_name"] = map_name ? map_name : "Unknown" + s["map_name"] = GLOB.map_name ? GLOB.map_name : "Unknown" if(key_valid) if(SSticker && SSticker.mode) From 0d73736be2a166d7a9f5789b8b32ebe93b542501 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Wed, 1 May 2019 02:30:18 +0200 Subject: [PATCH 053/195] Make the traitor reviver implant EMP-proof --- code/datums/uplink_item.dm | 6 +++--- code/modules/surgery/organs/augments_internal.dm | 11 +++++++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index a714e17d236..d1377fef558 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -1544,10 +1544,10 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) cost = 12 /datum/uplink_item/cyber_implants/reviver - name = "Reviver Implant" - desc = "This implant will attempt to revive you if you lose consciousness. Comes with an automated implanting tool." + name = "Hardened Reviver Implant" + desc = "This implant will attempt to revive you if you lose consciousness. It is invulnerable to EMPs. Comes with an automated implanting tool." reference = "CIR" - item = /obj/item/organ/internal/cyberimp/chest/reviver + item = /obj/item/organ/internal/cyberimp/chest/reviver/hardened cost = 8 // POINTLESS BADASSERY diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index 73d54003fc5..995b1b9811d 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -256,9 +256,16 @@ origin_tech = "materials=5;programming=4;biotech=4" slot = "heartdrive" var/revive_cost = 0 - var/reviving = 0 + var/reviving = FALSE var/cooldown = 0 +/obj/item/organ/internal/cyberimp/chest/reviver/hardened + name = "Hardened reviver implant" + emp_proof = TRUE + +/obj/item/organ/internal/cyberimp/chest/reviver/hardened/Initialize(mapload) + desc += " The implant has been hardened. It is invulnerable to EMPs." + /obj/item/organ/internal/cyberimp/chest/reviver/on_life() if(reviving) if(owner.stat == UNCONSCIOUS && (owner.sleeping == 0)) //!owner.sleeping didn't work for whatever dumb reason @@ -320,7 +327,7 @@ /obj/item/storage/box/cyber_implants/bundle name = "boxed cybernetic implants" var/list/boxed = list(/obj/item/organ/internal/cyberimp/eyes/xray,/obj/item/organ/internal/cyberimp/eyes/thermals, - /obj/item/organ/internal/cyberimp/brain/anti_stun, /obj/item/organ/internal/cyberimp/chest/reviver) + /obj/item/organ/internal/cyberimp/brain/anti_stun, /obj/item/organ/internal/cyberimp/chest/reviver/hardened) var/amount = 5 /obj/item/storage/box/cyber_implants/bundle/New() From a03603775b214a01e6322961630cd0b9da993e6c Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Wed, 1 May 2019 02:35:26 +0200 Subject: [PATCH 054/195] Initialize fix --- code/modules/surgery/organs/augments_internal.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index 995b1b9811d..71a06d8e013 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -264,6 +264,7 @@ emp_proof = TRUE /obj/item/organ/internal/cyberimp/chest/reviver/hardened/Initialize(mapload) + . = ..() desc += " The implant has been hardened. It is invulnerable to EMPs." /obj/item/organ/internal/cyberimp/chest/reviver/on_life() From efcd448f8fea626b1b81393e76e75a30f3f67a65 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Tue, 30 Apr 2019 20:50:54 -0400 Subject: [PATCH 055/195] Automatic changelog generation for PR #11413 [ci skip] --- html/changelogs/AutoChangeLog-pr-11413.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-11413.yml diff --git a/html/changelogs/AutoChangeLog-pr-11413.yml b/html/changelogs/AutoChangeLog-pr-11413.yml new file mode 100644 index 00000000000..b5eff45acfe --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11413.yml @@ -0,0 +1,5 @@ +author: "Arkatos" +delete-after: True +changes: + - rscadd: "Carps now spawn with a random color! There might even be some really rare ones.." + - imageadd: "Added carp color variants sprites" From 9df4f96cf95cb974cd87004e2268221953e8360a Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Tue, 30 Apr 2019 20:51:20 -0400 Subject: [PATCH 056/195] Automatic changelog generation for PR #11407 [ci skip] --- html/changelogs/AutoChangeLog-pr-11407.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-11407.yml diff --git a/html/changelogs/AutoChangeLog-pr-11407.yml b/html/changelogs/AutoChangeLog-pr-11407.yml new file mode 100644 index 00000000000..fe79f15a6be --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11407.yml @@ -0,0 +1,4 @@ +author: "Arkatos" +delete-after: True +changes: + - imageadd: "Added inhand sprites for winter coats" From 075bc6ef7cbea5bc7714953b7ab6cac4890cf05a Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Tue, 30 Apr 2019 20:51:57 -0400 Subject: [PATCH 057/195] Automatic changelog generation for PR #11409 [ci skip] --- html/changelogs/AutoChangeLog-pr-11409.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-11409.yml diff --git a/html/changelogs/AutoChangeLog-pr-11409.yml b/html/changelogs/AutoChangeLog-pr-11409.yml new file mode 100644 index 00000000000..0c037aa5028 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11409.yml @@ -0,0 +1,7 @@ +author: "farie82" +delete-after: True +changes: + - bugfix: "Borgs health status now updates properly when removing and adding parts" + - bugfix: "You won't try to fix destroyed components in borgs anymore. Which resulted to lost materials and no healing" + - bugfix: "Borg analysers will now properly show missing components and won't show their damage if missing" + - tweak: "Self diagnostics for borgs now also shows missing parts and destroyed ones" From 3d2d38ec4d95873fa37aa5b90095931d446e7c32 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Tue, 30 Apr 2019 21:14:09 -0400 Subject: [PATCH 058/195] Automatic changelog generation for PR #11419 [ci skip] --- html/changelogs/AutoChangeLog-pr-11419.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-11419.yml diff --git a/html/changelogs/AutoChangeLog-pr-11419.yml b/html/changelogs/AutoChangeLog-pr-11419.yml new file mode 100644 index 00000000000..654af89e49d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11419.yml @@ -0,0 +1,4 @@ +author: "dovydas12345" +delete-after: True +changes: + - bugfix: "Fixes normal cameras spooking non-chaplains even when they don't capture any ghosts" From 29d20e6c4d630d3a194cdd171e014abf56b3ab7f Mon Sep 17 00:00:00 2001 From: Kyep Date: Tue, 30 Apr 2019 18:28:00 -0700 Subject: [PATCH 059/195] Fixes runtime in job_exp.dm --- code/game/jobs/job_exp.dm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/code/game/jobs/job_exp.dm b/code/game/jobs/job_exp.dm index 7c228ba554f..2a7927d09bf 100644 --- a/code/game/jobs/job_exp.dm +++ b/code/game/jobs/job_exp.dm @@ -257,7 +257,12 @@ var/global/list/role_playtime_requirements = list( play_records[rtype] = text2num(read_records[rtype]) else play_records[rtype] = 0 - var/myrole = mob.mind.playtime_role ? mob.mind.playtime_role : mob.mind.assigned_role + var/myrole + if(mob.mind) + if(mob.mind.playtime_role) + myrole = mob.mind.playtime_role + else if(mob.mind.assigned_role) + myrole = mob.mind.assigned_role if(mob.stat == CONSCIOUS && myrole) play_records[EXP_TYPE_LIVING] += minutes if(announce_changes) From 97d6169de98259bfb49fd2ae88fd24449a474d99 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Tue, 30 Apr 2019 22:19:46 -0400 Subject: [PATCH 060/195] Automatic changelog generation for PR #11423 [ci skip] --- html/changelogs/AutoChangeLog-pr-11423.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-11423.yml diff --git a/html/changelogs/AutoChangeLog-pr-11423.yml b/html/changelogs/AutoChangeLog-pr-11423.yml new file mode 100644 index 00000000000..9a9b2e72118 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11423.yml @@ -0,0 +1,4 @@ +author: "Kyep" +delete-after: True +changes: + - bugfix: "Fixed a runtime in job_exp.dm" From ba22fe0d85da52392926851ff80075f4ab174b6e Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Wed, 1 May 2019 01:28:37 -0400 Subject: [PATCH 061/195] one size fits honk --- code/modules/clothing/under/miscellaneous.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 6ad3bd70d55..1cce81c12c2 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -802,6 +802,7 @@ lefthand_file = 'icons/goonstation/mob/inhands/clothing_lefthand.dmi' righthand_file = 'icons/goonstation/mob/inhands/clothing_righthand.dmi' flags = NODROP + flags_size = ONESIZEFITSALL has_sensor = 0 // HUNKE /obj/item/clothing/under/victdress From 81b7fbc491105426c472b476955596389c34a3e3 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Wed, 1 May 2019 01:40:55 -0400 Subject: [PATCH 062/195] Automatic changelog generation for PR #11424 [ci skip] --- html/changelogs/AutoChangeLog-pr-11424.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-11424.yml diff --git a/html/changelogs/AutoChangeLog-pr-11424.yml b/html/changelogs/AutoChangeLog-pr-11424.yml new file mode 100644 index 00000000000..a7cf15d901b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11424.yml @@ -0,0 +1,4 @@ +author: "Fethas" +delete-after: True +changes: + - bugfix: "Cluwne suits should no longer fall off cluwnes from being fat." From 791bebf51c55a1796f241f3b5fa95c442ec32ded Mon Sep 17 00:00:00 2001 From: Arkatos1 Date: Wed, 1 May 2019 15:50:30 +0200 Subject: [PATCH 063/195] Tweaks to Examine tooltips --- code/game/objects/items.dm | 2 +- code/game/objects/items/weapons/storage/storage.dm | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 9d199a404d0..0873be67772 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -593,7 +593,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d /obj/item/MouseEntered(location, control, params) if(in_inventory) - var/timedelay = 5 + var/timedelay = 7 var/user = usr tip_timer = addtimer(CALLBACK(src, .proc/openTip, location, control, params, user), timedelay, TIMER_STOPPABLE) diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 507d6fdb9f3..9908cc2542f 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -312,7 +312,9 @@ if(usr.s_active) usr.s_active.show_to(usr) W.mouse_opacity = MOUSE_OPACITY_OPAQUE //So you can click on the area around the item to equip it, instead of having to pixel hunt + W.in_inventory = TRUE update_icon() + W.in_inventory = TRUE return 1 //Call this proc to handle the removal of an item from the storage item. The item will be moved to the atom sent as new_target From c6a91eafddbbc7ef08d6abd836393ff12903aebf Mon Sep 17 00:00:00 2001 From: Arkatos1 Date: Wed, 1 May 2019 16:04:07 +0200 Subject: [PATCH 064/195] Tweaks --- code/game/objects/items.dm | 2 +- code/game/objects/items/weapons/storage/storage.dm | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 0873be67772..089317524e9 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -593,7 +593,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d /obj/item/MouseEntered(location, control, params) if(in_inventory) - var/timedelay = 7 + var/timedelay = 8 var/user = usr tip_timer = addtimer(CALLBACK(src, .proc/openTip, location, control, params, user), timedelay, TIMER_STOPPABLE) diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 9908cc2542f..581ace78ef9 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -314,7 +314,6 @@ W.mouse_opacity = MOUSE_OPACITY_OPAQUE //So you can click on the area around the item to equip it, instead of having to pixel hunt W.in_inventory = TRUE update_icon() - W.in_inventory = TRUE return 1 //Call this proc to handle the removal of an item from the storage item. The item will be moved to the atom sent as new_target From 24b0eb0c0cef05932ef63ab0f9b53ecf08cd309c Mon Sep 17 00:00:00 2001 From: Arkatos1 Date: Wed, 1 May 2019 16:57:54 +0200 Subject: [PATCH 065/195] toolbelt update --- code/game/objects/items/weapons/storage/belt.dm | 16 ++++------------ icons/mob/inhands/equipment/belt_lefthand.dmi | Bin 0 -> 4431 bytes icons/mob/inhands/equipment/belt_righthand.dmi | Bin 0 -> 4428 bytes 3 files changed, 4 insertions(+), 12 deletions(-) create mode 100644 icons/mob/inhands/equipment/belt_lefthand.dmi create mode 100644 icons/mob/inhands/equipment/belt_righthand.dmi diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index e406b097bee..9b1e89769cb 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -4,23 +4,22 @@ icon = 'icons/obj/clothing/belts.dmi' icon_state = "utilitybelt" item_state = "utility" + lefthand_file = 'icons/mob/inhands/equipment/belt_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/belt_righthand.dmi' slot_flags = SLOT_BELT attack_verb = list("whipped", "lashed", "disciplined") var/use_item_overlays = 0 // Do we have overlays for items held inside the belt? - /obj/item/storage/belt/update_icon() if(use_item_overlays) overlays.Cut() for(var/obj/item/I in contents) overlays += "[I.name]" - ..() /obj/item/storage/belt/proc/can_use() return is_equipped() - /obj/item/storage/belt/MouseDrop(obj/over_object as obj, src_location, over_location) var/mob/M = usr if(!istype(over_object, /obj/screen)) @@ -68,7 +67,7 @@ new /obj/item/weldingtool(src) new /obj/item/crowbar(src) new /obj/item/wirecutters(src) - new /obj/item/stack/cable_coil(src, 30, pick(COLOR_RED, COLOR_YELLOW, COLOR_ORANGE)) + new /obj/item/stack/cable_coil/random(src, 30) update_icon() /obj/item/storage/belt/utility/full/multitool/New() @@ -99,7 +98,7 @@ new /obj/item/crowbar/power(src) new /obj/item/weldingtool/experimental(src)//This can be changed if this is too much new /obj/item/multitool(src) - new /obj/item/stack/cable_coil(src, 30, pick(COLOR_RED, COLOR_YELLOW, COLOR_ORANGE)) + new /obj/item/stack/cable_coil/random(src, 30) new /obj/item/extinguisher/mini(src) new /obj/item/analyzer(src) update_icon() @@ -184,7 +183,6 @@ new /obj/item/reagent_containers/food/pill/salicylic(src) update_icon() - /obj/item/storage/belt/botany name = "botanist belt" desc = "Can hold various botanical supplies." @@ -207,7 +205,6 @@ /obj/item/wrench, ) - /obj/item/storage/belt/security name = "security belt" desc = "Can hold security gear like handcuffs and flashes." @@ -472,7 +469,6 @@ ..() update_icon() - /obj/item/storage/belt/holster name = "shoulder holster" desc = "A holster to conceal a carried handgun. WARNING: Badasses only." @@ -510,7 +506,6 @@ W.charges = W.max_charges update_icon() - /obj/item/storage/belt/fannypack name = "fannypack" desc = "A dorky fannypack for keeping small items in." @@ -599,7 +594,6 @@ // Bluespace Belt // ------------------------------------- - /obj/item/storage/belt/bluespace name = "Belt of Holding" desc = "The greatest in pants-supporting technology." @@ -632,8 +626,6 @@ var/bolacount = 0 var/cooldown = 0 - - /obj/item/storage/belt/bluespace/owlman/New() ..() new /obj/item/grenade/smokebomb(src) diff --git a/icons/mob/inhands/equipment/belt_lefthand.dmi b/icons/mob/inhands/equipment/belt_lefthand.dmi new file mode 100644 index 0000000000000000000000000000000000000000..366493eebded21555e327fda2d08eac2628f5442 GIT binary patch literal 4431 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 literal 0 HcmV?d00001 diff --git a/icons/mob/inhands/equipment/belt_righthand.dmi b/icons/mob/inhands/equipment/belt_righthand.dmi new file mode 100644 index 0000000000000000000000000000000000000000..81b075f706e521b3bde7eb7cbc5fce5d1066c6a3 GIT binary patch literal 4428 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 NqM@P#$0 Date: Wed, 1 May 2019 18:54:14 +0200 Subject: [PATCH 066/195] Examine species colors --- code/Diona.png | Bin 0 -> 1614 bytes code/Grey.png | Bin 0 -> 1037 bytes code/Unathi.png | Bin 0 -> 915 bytes code/modules/mob/living/carbon/human/examine.dm | 7 ++++--- .../mob/living/carbon/human/species/grey.dm | 1 + .../mob/living/carbon/human/species/kidan.dm | 1 + .../mob/living/carbon/human/species/slime.dm | 1 + .../mob/living/carbon/human/species/tajaran.dm | 2 +- 8 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 code/Diona.png create mode 100644 code/Grey.png create mode 100644 code/Unathi.png diff --git a/code/Diona.png b/code/Diona.png new file mode 100644 index 0000000000000000000000000000000000000000..d311226d5f586660a74b7893e3c54baacf814848 GIT binary patch literal 1614 zcmV-U2C?~xP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1>;FXK~#8N?O8Ey zTQLmvy?ldSC5unc3v_AbKXhr=Y~2cvU7E#&R?8?skud zBTbLz^!M)7@ME(37i{S2?cw*=yN~bReSH7n2Tgx`PJg%Q|3cM^rvsJN8HcAxFY;?y z^HkQ^&);fyUeko)XMd5%{mP$dPb(?k7}x8Co6f34HpXQ-**mOyg9dE$W4Gv9O%W3AdmUlw&1R+c}Xj`cP=Zf-REGQ!4-PJlGJO~ zt+AC}AQi&lDp%Lyjp)U#ka{xeWD`PXgQ0!y_{jPXD7q2ze)1iOc32W^c zQf9QlkH^+?w28ppr9L}NQ!Zq&XIHa#ZfET?;9Vj_Ed4vk4JGUD!sR&MK~gTpt%=R6 z&YPw{{ED1hER9GYAr53gIi-JQ+8#Y z=qfuQLLARnVs>KD-g%z+zeiXvetx^B>1T?M2bJj1S+lDl+My&PQ8aTs!gaq#GVk03 z%{cdB<7EzO?HR6KK=~8GDzXPMrh~~<>00v1ZRdZG>a&H7JXH*&Y2t_PGvg#d3}94Z zF^WmYzCFm@UcOz47aDkrDRLMK16i=QYK&#Ft^jyv6Gi;cE?=^i9^LkO(XSMA$wE-O z3mn3I5**%^BD?YkK?#WU!b(6WA0i45-)V|qw-S^%@!CePp7WC~1 zHMZbz$wN7qYhT=^`*7<(A=#T6rCm&1YZmknN9o$GxRPBv$e~S^jj7j#96Krxy#a4I zeIEttAh{bVc-j|8R@&f#nkaH%B8uOCH;UU{9a>-U;AA^Xh+?ULUa}-OyoE4V^2p@h z4)vox(2M?`HX=3Y^`iSpqJHM2O#SCmu%%uUG-~wQu2^f&kkV?Kz8#^)9eDRVQN&U+ z>Y>wgEUwx?>CtjkXe=9--L~OBtqg9vsu%73d@s5 zg6DpZ3|6q?6-5?)P-CIX9l6vFwW?55=K*5*^rWd)VTNRxpY|_>6-W6+Q!x zu`rMYd#lC>aAmVwt`~7xV>Qut==?y?kSKfk_)3TrMfXE?<&k-t-y=3krx!0^L%m3g z?NlbzE#X>wh7=5KuxwC%7u;LA($Y_O5c{Lr;8Zb?riCBA!%Qx+Yuiq^WmoF?rIq5! z1U1RZZc8DrP>yiD%7BTeiW>(q=r62+u3UjIQ;A~Ur{#@S_|Dza&1ZqYwhK|rLF)&Z zdBK=3T&Eg2Xl1V)bjdUV5$Q!N5aIU=^dtX)QuTsL=2w%j<@XEq8t1rMZ_n`cB7^J7 zBSv`|HNG^&)?3OetZ#wa`ILiY8chy#`7YVI-+7M&P)F&Z9ct~SE zJ*5lyWY)(F!_|unG;Y65V!cR-)&FEoryh*kI1yhj1_lN~uy$0rN#X*k^lCBmVqjn` z?02s8-6!}=eoYv9F)*+I>NiChZ$uyrhF%N|3@pXai-CcGWq5x63(iT?!$6PL6aWAK M07*qoM6N<$f^umB`Tzg` literal 0 HcmV?d00001 diff --git a/code/Grey.png b/code/Grey.png new file mode 100644 index 0000000000000000000000000000000000000000..c79600304e5494aa0dec4955d8f011dc8967b1c6 GIT binary patch literal 1037 zcmV+o1oHcdP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1ENVpK~!i%?U}ny zD=`p;_r3O|Qt}+MX-`8zla7L|kPy;Af+iATyGU?ALZYJ0@ny!I8GF6!#3-A@zozl} z_x;=P2AXYE)r?gEt(vtepjES01+;3`8V0oQ+va)MLup>>)=l$Q#iD};RQ>YV)UIQd zvyt9jvV`P{&RLD!7a5C93Q)b9Iqc^8QQZRP)Ap?OAppg03%#`G1E^W)&g;SqsyB$A z=;1TyW?{}O7mK3=^pvH}araFd1=Lg0F2A6PnZK4T7?_7D*KdVMCE|oCvTSZPL6*a7 z9TOg9#D&%hjQ~0@gc3Hyu(yE#G+Ysxl8V$uG10f$+=PRAz5BDe=5e<+HS2p*ynTEJ z4?N#~KCZm^diC@{A3{+Hd+uIM@fQJAi^PZ8fWr{8zJ>iRY!>1!w#xMz!TsL$OStGm z;OKmOQDjit4;(PZ!lPrRAsPxL08I?xRsoGv?F2w!EZ8VuZW^O>OLfD6R>08B!>2C2 zKi!xj2h@jt4xalLV|nRJm4Wi(;nvuo3Z05?TmD5rX}@~4WH+r@r^E4$%k?Ya`Drs8 z9*(ZWjuTTda?dz}e%wNsSrW;*l^O&zHH4g-R|-%d(ydogK3RIs;n0Ifg&EWojetl< zio(MZEp+Y^>LCGj$Cli_T)(&3R&Zc`uVcsQxMyv_8AL%qlS2SoK5(oApjahiBA}vq ztQF0FTH}E7%iRZf2)^KiuCxvcsMQE|xqg>;WJF1t0%&}LiUJyMr4(m$0-!E~PM4je zYp9E50d*Nv2%4yrY_lomW~~_j3M%y+Pso1^XeW6BMLWGISA6`i%K$o^C)&Sg#fFxz z+;pjzfwmd~boVRXU)(}?%Xg;j5Xbr26HxWgw;I}xTtB89Iv+SQ@U!EToQY!Cn>$6} z6x|A;IZ``3gqpVZLl1TdDL^A*=_mXRjJ^+gCT>gZ5YZD6L{0$IdEj>yJn@+lp${6G zX^g+U1KKx(;@Q~XJvin0kwy2#X~fPfAc=QtgLDplA9f+wCpv>}snE>B9e;cXT#F00 zs3f3TXmEk4(cBn(bBM^-QQLQF&QU;>5I7nsK(&G|QJPR)ha$_C0krC9#IkZ30b3!F zISNy32~|LkO)A$8rq3NU_I)`?&$-~U*^>_00000NkvXX Hu0mjfz?P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D11L#EK~!i%?Up}M z>o5?;eFP3emzra62RAtY=LiKipry#9NDB>3W?2Lth)EjK)!{)u~-n#Cvqk*(`2XtQJEd}~~ zdbzoMzPa6RX+UZFV5X9@q!G$v4|f`i{+NRjicwRENCU^^Qo7uug80Y?BPHI)lkNe2s$O0bQ%6~r;HW#SJa?9uWBd*0bTwLmqRJtRN9p? z^X+>cSG9gnq^P@|N2t1-lZ!ouF1i0TkXbmOjN6?=piDUVxl^Fj+cO`iGU<;=vUhyE z-T^4jYa->a#-DdjU+`Di6wxlOg*llzMye%Hd>Q zW>@x5xI@~lry?j#V0#lrVN!|n_*_OhWxy!T&IzS^-B1s@2rGVD$$u3} zTSAW&ty({*49c*OE+{-}gV+tmDKN8wGV4^&@^uzUHn`snoGp84`8GJBC{KivM&3~IH0&>T=21yn)F!&Q!=P)42pvy?JWj{Yf7qEj+ErO}!IB|{da>Ysp;G}kz& z49cL83MnNQf?WA^hMW`kZ)T%VMs~}Y$?qHTFMun*q8EVD$8K&YW10&}GbpRz(iJhR zT0f`|${a&574)I;2p%6af@YmC=gdPHKo+z{Z3s?>8;;%&F0>Sm3++!OqLAsS=#&~G z&cjrNkX1qnSLff`Y@L#>l0s*&s`N7l5+h_$C_w}Vg)L8zN8bW7VM9=cpU&PAPJV6z zN)WvXHUf0CL0+LTc{;Om|MM%n+A3?jsS?NjB<;@~BqY+9J4A770clna;n p)@K^<|EUIL)8f>iY+9I3r#~T&E}+y~oR Date: Wed, 1 May 2019 18:55:30 +0200 Subject: [PATCH 067/195] Code cleanup --- code/Diona.png | Bin 1614 -> 0 bytes code/Grey.png | Bin 1037 -> 0 bytes code/Unathi.png | Bin 915 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 code/Diona.png delete mode 100644 code/Grey.png delete mode 100644 code/Unathi.png diff --git a/code/Diona.png b/code/Diona.png deleted file mode 100644 index d311226d5f586660a74b7893e3c54baacf814848..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1614 zcmV-U2C?~xP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1>;FXK~#8N?O8Ey zTQLmvy?ldSC5unc3v_AbKXhr=Y~2cvU7E#&R?8?skud zBTbLz^!M)7@ME(37i{S2?cw*=yN~bReSH7n2Tgx`PJg%Q|3cM^rvsJN8HcAxFY;?y z^HkQ^&);fyUeko)XMd5%{mP$dPb(?k7}x8Co6f34HpXQ-**mOyg9dE$W4Gv9O%W3AdmUlw&1R+c}Xj`cP=Zf-REGQ!4-PJlGJO~ zt+AC}AQi&lDp%Lyjp)U#ka{xeWD`PXgQ0!y_{jPXD7q2ze)1iOc32W^c zQf9QlkH^+?w28ppr9L}NQ!Zq&XIHa#ZfET?;9Vj_Ed4vk4JGUD!sR&MK~gTpt%=R6 z&YPw{{ED1hER9GYAr53gIi-JQ+8#Y z=qfuQLLARnVs>KD-g%z+zeiXvetx^B>1T?M2bJj1S+lDl+My&PQ8aTs!gaq#GVk03 z%{cdB<7EzO?HR6KK=~8GDzXPMrh~~<>00v1ZRdZG>a&H7JXH*&Y2t_PGvg#d3}94Z zF^WmYzCFm@UcOz47aDkrDRLMK16i=QYK&#Ft^jyv6Gi;cE?=^i9^LkO(XSMA$wE-O z3mn3I5**%^BD?YkK?#WU!b(6WA0i45-)V|qw-S^%@!CePp7WC~1 zHMZbz$wN7qYhT=^`*7<(A=#T6rCm&1YZmknN9o$GxRPBv$e~S^jj7j#96Krxy#a4I zeIEttAh{bVc-j|8R@&f#nkaH%B8uOCH;UU{9a>-U;AA^Xh+?ULUa}-OyoE4V^2p@h z4)vox(2M?`HX=3Y^`iSpqJHM2O#SCmu%%uUG-~wQu2^f&kkV?Kz8#^)9eDRVQN&U+ z>Y>wgEUwx?>CtjkXe=9--L~OBtqg9vsu%73d@s5 zg6DpZ3|6q?6-5?)P-CIX9l6vFwW?55=K*5*^rWd)VTNRxpY|_>6-W6+Q!x zu`rMYd#lC>aAmVwt`~7xV>Qut==?y?kSKfk_)3TrMfXE?<&k-t-y=3krx!0^L%m3g z?NlbzE#X>wh7=5KuxwC%7u;LA($Y_O5c{Lr;8Zb?riCBA!%Qx+Yuiq^WmoF?rIq5! z1U1RZZc8DrP>yiD%7BTeiW>(q=r62+u3UjIQ;A~Ur{#@S_|Dza&1ZqYwhK|rLF)&Z zdBK=3T&Eg2Xl1V)bjdUV5$Q!N5aIU=^dtX)QuTsL=2w%j<@XEq8t1rMZ_n`cB7^J7 zBSv`|HNG^&)?3OetZ#wa`ILiY8chy#`7YVI-+7M&P)F&Z9ct~SE zJ*5lyWY)(F!_|unG;Y65V!cR-)&FEoryh*kI1yhj1_lN~uy$0rN#X*k^lCBmVqjn` z?02s8-6!}=eoYv9F)*+I>NiChZ$uyrhF%N|3@pXai-CcGWq5x63(iT?!$6PL6aWAK M07*qoM6N<$f^umB`Tzg` diff --git a/code/Grey.png b/code/Grey.png deleted file mode 100644 index c79600304e5494aa0dec4955d8f011dc8967b1c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1037 zcmV+o1oHcdP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1ENVpK~!i%?U}ny zD=`p;_r3O|Qt}+MX-`8zla7L|kPy;Af+iATyGU?ALZYJ0@ny!I8GF6!#3-A@zozl} z_x;=P2AXYE)r?gEt(vtepjES01+;3`8V0oQ+va)MLup>>)=l$Q#iD};RQ>YV)UIQd zvyt9jvV`P{&RLD!7a5C93Q)b9Iqc^8QQZRP)Ap?OAppg03%#`G1E^W)&g;SqsyB$A z=;1TyW?{}O7mK3=^pvH}araFd1=Lg0F2A6PnZK4T7?_7D*KdVMCE|oCvTSZPL6*a7 z9TOg9#D&%hjQ~0@gc3Hyu(yE#G+Ysxl8V$uG10f$+=PRAz5BDe=5e<+HS2p*ynTEJ z4?N#~KCZm^diC@{A3{+Hd+uIM@fQJAi^PZ8fWr{8zJ>iRY!>1!w#xMz!TsL$OStGm z;OKmOQDjit4;(PZ!lPrRAsPxL08I?xRsoGv?F2w!EZ8VuZW^O>OLfD6R>08B!>2C2 zKi!xj2h@jt4xalLV|nRJm4Wi(;nvuo3Z05?TmD5rX}@~4WH+r@r^E4$%k?Ya`Drs8 z9*(ZWjuTTda?dz}e%wNsSrW;*l^O&zHH4g-R|-%d(ydogK3RIs;n0Ifg&EWojetl< zio(MZEp+Y^>LCGj$Cli_T)(&3R&Zc`uVcsQxMyv_8AL%qlS2SoK5(oApjahiBA}vq ztQF0FTH}E7%iRZf2)^KiuCxvcsMQE|xqg>;WJF1t0%&}LiUJyMr4(m$0-!E~PM4je zYp9E50d*Nv2%4yrY_lomW~~_j3M%y+Pso1^XeW6BMLWGISA6`i%K$o^C)&Sg#fFxz z+;pjzfwmd~boVRXU)(}?%Xg;j5Xbr26HxWgw;I}xTtB89Iv+SQ@U!EToQY!Cn>$6} z6x|A;IZ``3gqpVZLl1TdDL^A*=_mXRjJ^+gCT>gZ5YZD6L{0$IdEj>yJn@+lp${6G zX^g+U1KKx(;@Q~XJvin0kwy2#X~fPfAc=QtgLDplA9f+wCpv>}snE>B9e;cXT#F00 zs3f3TXmEk4(cBn(bBM^-QQLQF&QU;>5I7nsK(&G|QJPR)ha$_C0krC9#IkZ30b3!F zISNy32~|LkO)A$8rq3NU_I)`?&$-~U*^>_00000NkvXX Hu0mjfz?P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D11L#EK~!i%?Up}M z>o5?;eFP3emzra62RAtY=LiKipry#9NDB>3W?2Lth)EjK)!{)u~-n#Cvqk*(`2XtQJEd}~~ zdbzoMzPa6RX+UZFV5X9@q!G$v4|f`i{+NRjicwRENCU^^Qo7uug80Y?BPHI)lkNe2s$O0bQ%6~r;HW#SJa?9uWBd*0bTwLmqRJtRN9p? z^X+>cSG9gnq^P@|N2t1-lZ!ouF1i0TkXbmOjN6?=piDUVxl^Fj+cO`iGU<;=vUhyE z-T^4jYa->a#-DdjU+`Di6wxlOg*llzMye%Hd>Q zW>@x5xI@~lry?j#V0#lrVN!|n_*_OhWxy!T&IzS^-B1s@2rGVD$$u3} zTSAW&ty({*49c*OE+{-}gV+tmDKN8wGV4^&@^uzUHn`snoGp84`8GJBC{KivM&3~IH0&>T=21yn)F!&Q!=P)42pvy?JWj{Yf7qEj+ErO}!IB|{da>Ysp;G}kz& z49cL83MnNQf?WA^hMW`kZ)T%VMs~}Y$?qHTFMun*q8EVD$8K&YW10&}GbpRz(iJhR zT0f`|${a&574)I;2p%6af@YmC=gdPHKo+z{Z3s?>8;;%&F0>Sm3++!OqLAsS=#&~G z&cjrNkX1qnSLff`Y@L#>l0s*&s`N7l5+h_$C_w}Vg)L8zN8bW7VM9=cpU&PAPJV6z zN)WvXHUf0CL0+LTc{;Om|MM%n+A3?jsS?NjB<;@~BqY+9J4A770clna;n p)@K^<|EUIL)8f>iY+9I3r#~T&E}+y~oR Date: Wed, 1 May 2019 20:59:41 +0200 Subject: [PATCH 068/195] Chameleon overhaul --- .../RandomZLevels/stationCollision.dmm | 2 +- .../map_files/RandomZLevels/terrorspiders.dmm | 2 +- _maps/map_files/cyberiad/z2.dmm | 8 +- code/__DEFINES/misc.dm | 9 +- code/__HELPERS/lists.dm | 15 +- code/datums/action.dm | 14 + code/datums/outfits/outfit.dm | 9 +- code/datums/outfits/outfit_admin.dm | 8 +- code/datums/uplink_item.dm | 28 +- .../game/objects/effects/spawners/lootdrop.dm | 4 +- .../effects/spawners/random_spawners.dm | 2 +- code/game/objects/items.dm | 6 + code/game/objects/items/devices/megaphone.dm | 2 +- .../game/objects/items/devices/radio/radio.dm | 1 - code/game/objects/items/devices/voice.dm | 44 ++ .../objects/items/weapons/dna_injector.dm | 23 + .../objects/items/weapons/storage/backpack.dm | 3 +- .../admin/verbs/infiltratorteam_syndicate.dm | 2 +- code/modules/clothing/clothing.dm | 8 +- code/modules/clothing/masks/gasmask.dm | 5 - code/modules/clothing/masks/voice.dm | 38 -- code/modules/clothing/shoes/miscellaneous.dm | 18 - .../spacesuits/rig/modules/utility.dm | 13 +- code/modules/clothing/under/chameleon.dm | 522 +++++++++++++++--- code/modules/flufftext/Hallucination.dm | 4 +- code/modules/mob/living/carbon/human/say.dm | 22 +- code/modules/mob/mob_defines.dm | 1 + code/modules/ninja/suit/mask.dm | 12 +- code/modules/ninja/suit/suit.dm | 4 +- code/modules/paperwork/stamps.dm | 24 - icons/mob/actions/actions.dmi | Bin 93208 -> 96413 bytes icons/obj/device.dmi | Bin 41315 -> 41577 bytes paradise.dme | 2 +- 33 files changed, 646 insertions(+), 209 deletions(-) create mode 100644 code/game/objects/items/devices/voice.dm delete mode 100644 code/modules/clothing/masks/voice.dm diff --git a/_maps/map_files/RandomZLevels/stationCollision.dmm b/_maps/map_files/RandomZLevels/stationCollision.dmm index a8e3a533033..cc1767248cf 100644 --- a/_maps/map_files/RandomZLevels/stationCollision.dmm +++ b/_maps/map_files/RandomZLevels/stationCollision.dmm @@ -4123,7 +4123,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/arrivalblock) "kG" = ( -/obj/item/clothing/shoes/syndigaloshes, +/obj/item/clothing/shoes/chameleon/noslip, /obj/item/clothing/under/syndicate, /obj/effect/decal/remains/human{ desc = "This guy seemed to have died in terrible way! Half his remains are dust."; diff --git a/_maps/map_files/RandomZLevels/terrorspiders.dmm b/_maps/map_files/RandomZLevels/terrorspiders.dmm index 1a64a0d7f0a..ed0bb019b83 100644 --- a/_maps/map_files/RandomZLevels/terrorspiders.dmm +++ b/_maps/map_files/RandomZLevels/terrorspiders.dmm @@ -13398,7 +13398,7 @@ /area/awaymission/UO71/loot) "zt" = ( /obj/structure/chair/wood/normal, -/obj/item/clothing/shoes/syndigaloshes, +/obj/item/clothing/shoes/chameleon/noslip, /turf/simulated/floor/carpet, /area/awaymission/UO71/loot) "zu" = ( diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index ee6ca15f83d..c1764ddf1c6 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -8543,7 +8543,7 @@ pixel_y = 3 }, /obj/item/clothing/mask/gas/cyborg, -/obj/item/clothing/mask/gas/voice, +/obj/item/clothing/mask/chameleon, /obj/item/clothing/mask/balaclava{ pixel_x = 3; pixel_y = -3 @@ -8729,7 +8729,7 @@ /area/admin) "uY" = ( /obj/structure/rack, -/obj/item/clothing/under/chameleon/all{ +/obj/item/clothing/mask/chameleon{ pixel_x = -3; pixel_y = 3 }, @@ -9036,7 +9036,7 @@ pixel_y = 3 }, /obj/item/clothing/shoes/centcom, -/obj/item/clothing/shoes/syndigaloshes{ +/obj/item/clothing/shoes/chameleon/noslip{ pixel_x = 3; pixel_y = -3 }, @@ -12275,7 +12275,7 @@ "Hv" = ( /obj/structure/rack, /obj/item/katana/energy, -/obj/item/clothing/mask/gas/voice/space_ninja, +/obj/item/clothing/mask/gas/space_ninja, /turf/unsimulated/floor{ icon_state = "engine" }, diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index dff9426c641..479a936489e 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -401,4 +401,11 @@ #define GHOST_ORBIT_TRIANGLE "triangle" #define GHOST_ORBIT_HEXAGON "hexagon" #define GHOST_ORBIT_SQUARE "square" -#define GHOST_ORBIT_PENTAGON "pentagon" \ No newline at end of file +#define GHOST_ORBIT_PENTAGON "pentagon" + +//suit sensors: sensor_mode defines + +#define SENSOR_OFF 0 +#define SENSOR_LIVING 1 +#define SENSOR_VITALS 2 +#define SENSOR_COORDS 3 \ No newline at end of file diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm index f1e6f38a2d4..6b5807deaef 100644 --- a/code/__HELPERS/lists.dm +++ b/code/__HELPERS/lists.dm @@ -124,9 +124,13 @@ . += A //Like typesof() or subtypesof(), but returns a typecache instead of a list -/proc/typecacheof(path, ignore_root_path) +/proc/typecacheof(path, ignore_root_path, only_root_path = FALSE) if(ispath(path)) - var/list/types = ignore_root_path ? subtypesof(path) : typesof(path) + var/list/types = list() + if(only_root_path) + types = list(path) + else + types = ignore_root_path ? subtypesof(path) : typesof(path) var/list/L = list() for(var/T in types) L[T] = TRUE @@ -140,8 +144,11 @@ L[T] = TRUE else for(var/P in pathlist) - for(var/T in typesof(P)) - L[T] = TRUE + if(only_root_path) + L[P] = TRUE + else + for(var/T in typesof(P)) + L[T] = TRUE return L //Removes any null entries from the list diff --git a/code/datums/action.dm b/code/datums/action.dm index d316bd29b41..5972579834b 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -107,6 +107,7 @@ /datum/action/item_action check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_LYING|AB_CHECK_CONSCIOUS var/use_itemicon = TRUE + /datum/action/item_action/New(Target, custom_icon, custom_icon_state) ..() var/obj/item/I = target @@ -406,6 +407,19 @@ name = "Use [target.name]" button.name = name +/datum/action/item_action/voice_changer/toggle + name = "Toggle Voice Changer" + +/datum/action/item_action/voice_changer/voice + name = "Set Voice" + +/datum/action/item_action/voice_changer/voice/Trigger() + if(!IsAvailable()) + return FALSE + + var/obj/item/voice_changer/V = target + V.set_voice(usr) + // for clothing accessories like holsters /datum/action/item_action/accessory check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_LYING|AB_CHECK_CONSCIOUS diff --git a/code/datums/outfits/outfit.dm b/code/datums/outfits/outfit.dm index 8c172f3592f..184f1155da2 100644 --- a/code/datums/outfits/outfit.dm +++ b/code/datums/outfits/outfit.dm @@ -25,6 +25,7 @@ var/list/implants = null var/list/cybernetic_implants = null + var/list/chameleon_extras //extra types for chameleon outfit changes, mostly guns /datum/outfit/proc/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) //to be overriden for customization depending on client prefs,species etc @@ -151,4 +152,10 @@ H.r_store.add_fingerprint(H, 1) if(H.wear_pda) H.wear_pda.add_fingerprint(H, 1) - return 1 \ No newline at end of file + return 1 + +/datum/outfit/proc/get_chameleon_disguise_info() + var/list/types = list(uniform, suit, back, belt, gloves, shoes, head, mask, l_ear, r_ear, glasses, id, l_pocket, r_pocket, suit_store, r_hand, l_hand, pda) + types += chameleon_extras + listclearnulls(types) + return types diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm index 3ac473edfeb..09282ec77b1 100644 --- a/code/datums/outfits/outfit_admin.dm +++ b/code/datums/outfits/outfit_admin.dm @@ -123,7 +123,7 @@ /datum/outfit/admin/syndicate/spy name = "Syndicate Spy" uniform = /obj/item/clothing/under/suit_jacket/really_black - shoes = /obj/item/clothing/shoes/syndigaloshes/black + shoes = /obj/item/clothing/shoes/chameleon/noslip uplink_uses = 40 id_access = "Syndicate Agent" @@ -228,7 +228,7 @@ back = /obj/item/storage/backpack belt = /obj/item/storage/belt/utility/full/multitool gloves = /obj/item/clothing/gloves/combat - shoes = /obj/item/clothing/shoes/syndigaloshes/black + shoes = /obj/item/clothing/shoes/chameleon/noslip l_ear = /obj/item/radio/headset/centcom id = /obj/item/card/id pda = /obj/item/pda @@ -990,7 +990,7 @@ suit = /obj/item/clothing/suit/hooded/chaplain_hoodie back = /obj/item/storage/backpack gloves = /obj/item/clothing/gloves/combat - shoes = /obj/item/clothing/shoes/syndigaloshes/black + shoes = /obj/item/clothing/shoes/chameleon/noslip l_ear = /obj/item/radio/headset/syndicate id = /obj/item/card/id/syndicate l_hand = /obj/item/twohanded/dualsaber/red @@ -1021,7 +1021,7 @@ suit = /obj/item/clothing/suit/draculacoat back = /obj/item/storage/backpack gloves = /obj/item/clothing/gloves/combat - shoes = /obj/item/clothing/shoes/syndigaloshes/black + shoes = /obj/item/clothing/shoes/chameleon/noslip l_ear = /obj/item/radio/headset/syndicate id = /obj/item/card/id backpack_contents = list( diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index a714e17d236..aaeffa08b02 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -1092,20 +1092,19 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) surplus = 35 /datum/uplink_item/stealthy_tools/syndigaloshes - name = "No-Slip Syndicate Shoes" - desc = "These allow you to run on wet floors. They do not work on lubricated surfaces." + name = "No-Slip Chameleon Shoes" + desc = "These shoes will allow the wearer to run on wet floors and slippery objects without falling down. \ + They do not work on heavily lubricated surfaces." reference = "NSSS" - item = /obj/item/clothing/shoes/syndigaloshes + item = /obj/item/clothing/shoes/chameleon/noslip cost = 2 excludefrom = list(/datum/game_mode/nuclear) /datum/uplink_item/stealthy_tools/syndigaloshes/nuke - name = "Tactical No-Slip Brown Shoes" - desc = "These allow you to run on wet floors. They do not work on lubricated surfaces, and the maker swears they're better than normal ones, somehow." - reference = "NNSSS" + reference = "TNSSS" cost = 4 //but they aren't - gamemodes = list(/datum/game_mode/nuclear) excludefrom = list() + gamemodes = list(/datum/game_mode/nuclear) /datum/uplink_item/stealthy_tools/chamsechud name = "Chameleon Security HUD" @@ -1146,12 +1145,13 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/card/id/syndicate cost = 2 -/datum/uplink_item/stealthy_tools/voice_changer - name = "Voice Changer" - desc = "A conspicuous gas mask that mimics the voice named on your identification card. When no identification is worn, the mask will render your voice unrecognisable." - reference = "VC" - item = /obj/item/clothing/mask/gas/voice - cost = 3 +/datum/uplink_item/stealthy_tools/chameleon + name = "Chameleon Kit" + desc = "A set of items that contain chameleon technology allowing you to disguise as pretty much anything on the station, and more! \ + Due to budget cuts, the shoes don't provide protection against slipping." + reference = "CHAM" + item = /obj/item/storage/box/syndie_kit/chameleon + cost = 2 /datum/uplink_item/stealthy_tools/chameleon_proj name = "Chameleon-Projector" @@ -1210,7 +1210,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) /datum/uplink_item/stealthy_tools/clownkit name = "Honk Brand Infiltration Kit" - desc = "All the tools you need to play the best prank Nanotrasen has ever seen. Includes a voice changer clown mask, magnetic clown shoes, and standard clown outfit, tools, and backpack." + desc = "All the tools you need to play the best prank Nanotrasen has ever seen. Includes a voice changer mask, magnetic clown shoes, and standard clown outfit, tools, and backpack." reference = "HBIK" item = /obj/item/storage/backpack/clown/syndie cost = 6 diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 057c52a2a4c..b7311519f7a 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -140,8 +140,8 @@ /obj/item/suppressor = 4, /obj/item/clothing/under/chameleon = 2, /obj/item/stamp/chameleon = 2, - /obj/item/clothing/shoes/syndigaloshes = 5, - /obj/item/clothing/mask/gas/voice = 2, + /obj/item/clothing/shoes/chameleon/noslip = 5, + /obj/item/clothing/mask/chameleon = 2, /obj/item/dnascrambler = 1, /obj/item/storage/backpack/satchel_flat = 2, /obj/item/storage/toolbox/syndicate = 2, diff --git a/code/game/objects/effects/spawners/random_spawners.dm b/code/game/objects/effects/spawners/random_spawners.dm index 510e5b90380..03e49c56a50 100644 --- a/code/game/objects/effects/spawners/random_spawners.dm +++ b/code/game/objects/effects/spawners/random_spawners.dm @@ -214,7 +214,7 @@ /obj/item/storage/pill_bottle/zoom = 1, /obj/item/storage/pill_bottle/random_drug_bottle = 2, /obj/item/storage/backpack/duffel/syndie/surgery = 1, - /obj/item/clothing/shoes/syndigaloshes = 1, + /obj/item/clothing/shoes/chameleon/noslip = 1, /obj/item/storage/belt/military = 1, /obj/item/clothing/under/chameleon = 1, /obj/item/storage/backpack/satchel_flat = 1, diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 9d199a404d0..6d91b4c8778 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -600,3 +600,9 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d /obj/item/MouseExited() deltimer(tip_timer) //delete any in-progress timer if the mouse is moved off the item before it finishes closeToolTip(usr) + +/obj/item/proc/update_slot_icon() + if(!ismob(loc)) + return + var/mob/owner = loc + owner.regenerate_icons() diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm index 59a7a650383..941e90a31ef 100644 --- a/code/game/objects/items/devices/megaphone.dm +++ b/code/game/objects/items/devices/megaphone.dm @@ -35,7 +35,7 @@ return if(H.mind) span = H.mind.speech_span - if((COMIC in H.mutations) || H.get_int_organ(/obj/item/organ/internal/cyberimp/brain/clown_voice) || istype(H.get_item_by_slot(slot_wear_mask), /obj/item/clothing/mask/gas/voice/clown)) + if((COMIC in H.mutations) || H.get_int_organ(/obj/item/organ/internal/cyberimp/brain/clown_voice)) span = "sans" if(spamcheck) to_chat(user, "\The [src] needs to recharge!") diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 83a8c9304a1..00efc83668b 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -397,7 +397,6 @@ var/global/list/default_medbay_channels = list( var/mob/living/carbon/human/H = M displayname = H.voice if(H.voice != real_name) - jobname = "Unknown" voicemask = TRUE if(syndiekey && syndiekey.change_voice && connection.frequency == SYND_FREQ) diff --git a/code/game/objects/items/devices/voice.dm b/code/game/objects/items/devices/voice.dm new file mode 100644 index 00000000000..339271cdcca --- /dev/null +++ b/code/game/objects/items/devices/voice.dm @@ -0,0 +1,44 @@ +/obj/item/voice_changer + name = "voice changer" + desc = "A voice scrambling module." + icon = 'icons/obj/device.dmi' + icon_state = "voice_changer_off" + + actions_types = list(/datum/action/item_action/voice_changer/toggle, /datum/action/item_action/voice_changer/voice) + + var/obj/item/parent + + var/voice + var/active + +/obj/item/voice_changer/New() + . = ..() + + if(isitem(loc)) + parent = loc + parent.actions |= actions + +/obj/item/voice_changer/Destroy() + if(isitem(parent)) + parent.actions -= actions + + return ..() + +/obj/item/voice_changer/attack_self(mob/user) + active = !active + icon_state = "voice_changer_[active ? "on" : "off"]" + to_chat(user, "You toggle [src] [active ? "on" : "off"].") + + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() + +/obj/item/voice_changer/proc/set_voice(mob/user) + var/chosen_voice = input(user, "What voice would you like to mimic? Leave this empty to use the voice on your ID card.", "Set Voice Changer", voice) as text + if(!chosen_voice) + voice = null + to_chat(user, "You are now mimicking the voice on your ID card.") + return + + voice = sanitize(copytext(chosen_voice, 1, MAX_MESSAGE_LEN)) + to_chat(user, "You are now mimicking [voice].") \ No newline at end of file diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index d2f2ed2c54d..04206e1f5b2 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -668,4 +668,27 @@ /obj/item/dnainjector/m2h/Initialize() block = MONKEYBLOCK + ..() + + +/obj/item/dnainjector/comic + name = "DNA-Injector (Comic)" + desc = "Honk!" + datatype = DNA2_BUF_SE + value = 0xFFF + forcedmutation = TRUE + +/obj/item/dnainjector/comic/Initialize() + block = COMIC + ..() + +/obj/item/dnainjector/anticomic + name = "DNA-Injector (Ant-Comic)" + desc = "Honk...?" + datatype = DNA2_BUF_SE + value = 0x001 + forcedmutation = TRUE + +/obj/item/dnainjector/anticomic/Initialize() + block = COMIC ..() \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index e5ee3562228..56ae2864071 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -112,7 +112,7 @@ ..() new /obj/item/clothing/under/rank/clown(src) new /obj/item/clothing/shoes/magboots/clown(src) - new /obj/item/clothing/mask/gas/voice/clown(src) + new /obj/item/clothing/mask/chameleon(src) new /obj/item/radio/headset/headset_service(src) new /obj/item/pda/clown(src) new /obj/item/storage/box/survival(src) @@ -124,6 +124,7 @@ new /obj/item/reagent_containers/food/drinks/bottle/bottleofbanana(src) new /obj/item/instrument/bikehorn(src) new /obj/item/bikehorn(src) + new /obj/item/dnainjector/comic(src) /obj/item/storage/backpack/mime name = "Parcel Parceaux" diff --git a/code/modules/admin/verbs/infiltratorteam_syndicate.dm b/code/modules/admin/verbs/infiltratorteam_syndicate.dm index 551076be62a..4597a838733 100644 --- a/code/modules/admin/verbs/infiltratorteam_syndicate.dm +++ b/code/modules/admin/verbs/infiltratorteam_syndicate.dm @@ -170,7 +170,7 @@ var/global/sent_syndicate_infiltration_team = 0 equip_or_collect(new /obj/item/pda(src), slot_in_backpack) // Other gear - equip_to_slot_or_del(new /obj/item/clothing/shoes/syndigaloshes(src), slot_shoes) + equip_to_slot_or_del(new /obj/item/clothing/shoes/chameleon/noslip(src), slot_shoes) var/obj/item/card/id/syndicate/W = new(src) if (flag_mgmt) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 9613ce173af..a0e3b169c7e 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -574,8 +574,9 @@ BLIND // can't see anything "Drask" = 'icons/mob/species/drask/uniform.dmi', "Grey" = 'icons/mob/species/grey/uniform.dmi' ) - var/has_sensor = 1//For the crew computer 2 = unable to change mode - var/sensor_mode = 0 + var/has_sensor = TRUE//For the crew computer 2 = unable to change mode + var/sensor_mode = SENSOR_OFF + var/random_sensor = TRUE /* 1 = Report living/dead 2 = Report detailed damages @@ -587,7 +588,8 @@ BLIND // can't see anything var/basecolor /obj/item/clothing/under/rank/New() - sensor_mode = pick(0,1,2,3) + if(random_sensor) + sensor_mode = pick(SENSOR_OFF, SENSOR_LIVING, SENSOR_VITALS, SENSOR_COORDS) ..() /obj/item/clothing/under/Destroy() diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 0c4dba9ae49..1bd53217770 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -162,11 +162,6 @@ item_state = "sexymime" burn_state = FLAMMABLE -/obj/item/clothing/mask/gas/death_commando - name = "Death Commando Mask" - icon_state = "death_commando_mask" - item_state = "death_commando_mask" - /obj/item/clothing/mask/gas/cyborg name = "cyborg visor" desc = "Beep boop" diff --git a/code/modules/clothing/masks/voice.dm b/code/modules/clothing/masks/voice.dm deleted file mode 100644 index b5b6298dcb2..00000000000 --- a/code/modules/clothing/masks/voice.dm +++ /dev/null @@ -1,38 +0,0 @@ -/obj/item/voice_changer - name = "voice changer" - desc = "A voice scrambling module. If you can see this, report it as a bug on the tracker." - var/voice //If set and item is present in mask/suit, this name will be used for the wearer's speech. - var/active - -/obj/item/clothing/mask/gas/voice - name = "gas mask" -// desc = "A face-covering mask that can be connected to an air supply. It seems to house some odd electronics." - var/obj/item/voice_changer/changer - burn_state = FIRE_PROOF - -/obj/item/clothing/mask/gas/voice/verb/Toggle_Voice_Changer() - set category = "Object" - set src in usr - - changer.active = !changer.active - to_chat(usr, "You [changer.active ? "enable" : "disable"] the voice-changing module in \the [src].") - -/obj/item/clothing/mask/gas/voice/verb/Set_Voice(name as text) - set category = "Object" - set src in usr - - var/voice = sanitize(copytext(name,1,MAX_MESSAGE_LEN)) - if(!voice || !length(voice)) return - changer.voice = voice - to_chat(usr, "You are now mimicking [changer.voice].") - -/obj/item/clothing/mask/gas/voice/New() - ..() - changer = new(src) - -/obj/item/clothing/mask/gas/voice/clown - name = "clown wig and mask" - desc = "A true prankster's facial attire. A clown is incomplete without his wig and mask." - icon_state = "clown" - item_state = "clown_hat" - flags = BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT | BLOCKHAIR \ No newline at end of file diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index f3a2efed260..d4411fbdbe6 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -1,21 +1,3 @@ -/obj/item/clothing/shoes/syndigaloshes - desc = "A pair of brown shoes. They seem to have extra grip." - name = "brown shoes" - icon_state = "brown" - item_state = "brown" - permeability_coefficient = 0.05 - flags = NOSLIP - origin_tech = "syndicate=2" - burn_state = FIRE_PROOF - var/list/clothing_choices = list() - silence_steps = 1 - -/obj/item/clothing/shoes/syndigaloshes/black - name = "black shoes" - icon_state = "black" - item_color = "black" - desc = "A pair of black shoes. They seem to have extra grip." - /obj/item/clothing/shoes/mime name = "mime shoes" icon_state = "mime" diff --git a/code/modules/clothing/spacesuits/rig/modules/utility.dm b/code/modules/clothing/spacesuits/rig/modules/utility.dm index aa62763a6d3..bfb326eae1d 100644 --- a/code/modules/clothing/spacesuits/rig/modules/utility.dm +++ b/code/modules/clothing/spacesuits/rig/modules/utility.dm @@ -269,14 +269,13 @@ /obj/item/rig_module/voice/New() ..() voice_holder = new(src) - voice_holder.active = 0 + voice_holder.active = FALSE /obj/item/rig_module/voice/installed() ..() holder.speech = src /obj/item/rig_module/voice/engage() - if(!..()) return 0 @@ -287,17 +286,17 @@ switch(choice) if("Enable") - active = 1 - voice_holder.active = 1 + active = TRUE + voice_holder.active = TRUE to_chat(usr, "You enable the speech synthesiser.") if("Disable") - active = 0 - voice_holder.active = 0 + active = FALSE + voice_holder.active = FALSE to_chat(usr, "You disable the speech synthesiser.") if("Set Name") var/raw_choice = sanitize(input(usr, "Please enter a new name.") as text|null, MAX_NAME_LEN) if(!raw_choice) - return 0 + return FALSE voice_holder.voice = raw_choice to_chat(usr, "You are now mimicking [voice_holder.voice].") return 1 diff --git a/code/modules/clothing/under/chameleon.dm b/code/modules/clothing/under/chameleon.dm index b320237996e..b08a1ce72c9 100644 --- a/code/modules/clothing/under/chameleon.dm +++ b/code/modules/clothing/under/chameleon.dm @@ -1,86 +1,478 @@ +#define EMP_RANDOMISE_TIME 300 + +/datum/action/chameleon_outfit + name = "Select Chameleon Outfit" + button_icon_state = "chameleon_outfit" + var/list/outfit_options //By default, this list is shared between all instances. It is not static because if it were, subtypes would not be able to have their own. If you ever want to edit it, copy it first. + +/datum/action/chameleon_outfit/New() + ..() + initialize_outfits() + +/datum/action/chameleon_outfit/proc/initialize_outfits() + var/static/list/standard_outfit_options + if(!standard_outfit_options) + standard_outfit_options = list() + for(var/path in subtypesof(/datum/outfit/job)) + var/datum/outfit/O = path + standard_outfit_options[initial(O.name)] = path + sortTim(standard_outfit_options, /proc/cmp_text_asc) + outfit_options = standard_outfit_options + +/datum/action/chameleon_outfit/Trigger() + return select_outfit(owner) + +/datum/action/chameleon_outfit/proc/select_outfit(mob/user) + if(!user || !IsAvailable()) + return FALSE + var/selected = input("Select outfit to change into", "Chameleon Outfit") as null|anything in outfit_options + if(!IsAvailable() || QDELETED(src) || QDELETED(user)) + return FALSE + var/outfit_type = outfit_options[selected] + if(!outfit_type) + return FALSE + var/datum/outfit/O = new outfit_type() + var/list/outfit_types = O.get_chameleon_disguise_info() + + for(var/V in user.chameleon_item_actions) + var/datum/action/item_action/chameleon/change/A = V + var/done = FALSE + for(var/T in outfit_types) + for(var/name in A.chameleon_list) + if(A.chameleon_list[name] == T) + A.update_look(user, T) + outfit_types -= T + done = TRUE + break + if(done) + break + //hardsuit helmets/suit hoods + if(ispath(O.suit, /obj/item/clothing/suit/hooded) && ishuman(user)) + var/mob/living/carbon/human/H = user + //make sure they are actually wearing the suit, not just holding it, and that they have a chameleon hat + if(istype(H.wear_suit, /obj/item/clothing/suit/chameleon) && istype(H.head, /obj/item/clothing/head/chameleon)) + var/helmet_type + var/obj/item/clothing/suit/hooded/hooded = O.suit + helmet_type = initial(hooded.hoodtype) + + if(helmet_type) + var/obj/item/clothing/head/chameleon/hat = H.head + hat.chameleon_action.update_look(user, helmet_type) + qdel(O) + return TRUE + + +/datum/action/item_action/chameleon/change + name = "Chameleon Change" + var/list/chameleon_blacklist = list() //This is a typecache + var/list/chameleon_list = list() + var/chameleon_type = null + var/chameleon_name = "Item" + + var/emp_timer + +/datum/action/item_action/chameleon/change/Grant(mob/M) + if(M && (owner != M)) + if(!M.chameleon_item_actions) + M.chameleon_item_actions = list(src) + var/datum/action/chameleon_outfit/O = new /datum/action/chameleon_outfit() + O.Grant(M) + else + M.chameleon_item_actions |= src + ..() + +/datum/action/item_action/chameleon/change/Remove(mob/M) + if(M && (M == owner)) + LAZYREMOVE(M.chameleon_item_actions, src) + if(!LAZYLEN(M.chameleon_item_actions)) + var/datum/action/chameleon_outfit/O = locate(/datum/action/chameleon_outfit) in M.actions + qdel(O) + ..() + +/datum/action/item_action/chameleon/change/proc/initialize_disguises() + if(button) + button.name = "Change [chameleon_name] Appearance" + + chameleon_blacklist |= typecacheof(target.type) + for(var/V in typesof(chameleon_type)) + if(ispath(V) && ispath(V, /obj/item)) + var/obj/item/I = V + if(chameleon_blacklist[V] || (initial(I.flags) & ABSTRACT) || !initial(I.icon_state)) + continue + var/chameleon_item_name = "[initial(I.name)] ([initial(I.icon_state)])" + chameleon_list[chameleon_item_name] = I + +/datum/action/item_action/chameleon/change/proc/select_look(mob/user) + var/obj/item/picked_item + var/picked_name + picked_name = input("Select [chameleon_name] to change into", "Chameleon [chameleon_name]", picked_name) as null|anything in chameleon_list + if(!picked_name) + return + picked_item = chameleon_list[picked_name] + if(!picked_item) + return + update_look(user, picked_item) + +/datum/action/item_action/chameleon/change/proc/random_look(mob/user) + var/picked_name = pick(chameleon_list) + // If a user is provided, then this item is in use, and we + // need to update our icons and stuff + + if(user) + update_look(user, chameleon_list[picked_name]) + + // Otherwise, it's likely a random initialisation, so we + // don't have to worry + + else + update_item(chameleon_list[picked_name]) + +/datum/action/item_action/chameleon/change/proc/update_look(mob/user, obj/item/picked_item) + if(isliving(user)) + var/mob/living/C = user + if(C.stat != CONSCIOUS) + return + + update_item(picked_item) + var/obj/item/thing = target + thing.update_slot_icon() + UpdateButtonIcon() + +/datum/action/item_action/chameleon/change/proc/update_item(obj/item/picked_item) + target.name = initial(picked_item.name) + target.desc = initial(picked_item.desc) + target.icon_state = initial(picked_item.icon_state) + if(isitem(target)) + var/obj/item/I = target + I.item_state = initial(picked_item.item_state) + I.item_color = initial(picked_item.item_color) + if(istype(I, /obj/item/clothing) && istype(initial(picked_item), /obj/item/clothing)) + var/obj/item/clothing/CL = I + var/obj/item/clothing/PCL = picked_item + CL.flags_cover = initial(PCL.flags_cover) + target.icon = initial(picked_item.icon) + +/datum/action/item_action/chameleon/change/Trigger() + if(!IsAvailable()) + return + + select_look(owner) + return 1 + +/datum/action/item_action/chameleon/change/proc/emp_randomise(var/amount = EMP_RANDOMISE_TIME) + START_PROCESSING(SSprocessing, src) + random_look(owner) + + var/new_value = world.time + amount + if(new_value > emp_timer) + emp_timer = new_value + +/datum/action/item_action/chameleon/change/process() + if(world.time > emp_timer) + STOP_PROCESSING(SSprocessing, src) + return + random_look(owner) + /obj/item/clothing/under/chameleon //starts off as black name = "black jumpsuit" icon_state = "black" item_state = "bl_suit" item_color = "black" - desc = "It's a plain jumpsuit. It seems to have a small dial on the wrist." - origin_tech = "syndicate=2" - var/list/clothing_choices = list() - burn_state = FIRE_PROOF - armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0) + desc = "It's a plain jumpsuit. It has a small dial on the wrist." + sensor_mode = SENSOR_OFF //Hey who's this guy on the Syndicate Shuttle?? + random_sensor = FALSE + resistance_flags = NONE + armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - New() - ..() - var/blocked = list(/obj/item/clothing/under/color/random, /obj/item/clothing/under/rank/centcom) // Stops random coloured jumpsuit and undefined centcomm suit appearing in the list. - for(var/U in subtypesof(/obj/item/clothing/under/color) - blocked) - var/obj/item/clothing/under/V = new U - src.clothing_choices += V + var/datum/action/item_action/chameleon/change/chameleon_action - for(var/U in subtypesof(/obj/item/clothing/under/rank) - blocked) - var/obj/item/clothing/under/V = new U - src.clothing_choices += V - return +/obj/item/clothing/under/chameleon/Initialize() + . = ..() + chameleon_action = new(src) + chameleon_action.chameleon_type = /obj/item/clothing/under + chameleon_action.chameleon_name = "Jumpsuit" + chameleon_action.chameleon_blacklist = typecacheof(list(/obj/item/clothing/under, /obj/item/clothing/under/color, /obj/item/clothing/under/rank), only_root_path = TRUE) + chameleon_action.initialize_disguises() +/obj/item/clothing/under/chameleon/emp_act(severity) + . = ..() + chameleon_action.emp_randomise() - attackby(obj/item/clothing/under/U as obj, mob/user as mob, params) - ..() - if(istype(U, /obj/item/clothing/under/chameleon)) - to_chat(user, "Nothing happens.") - return - if(istype(U, /obj/item/clothing/under)) - if(src.clothing_choices.Find(U)) - to_chat(user, "Pattern is already recognised by the suit.") - return - src.clothing_choices += U - to_chat(user, "Pattern absorbed by the suit.") +/obj/item/clothing/under/chameleon/broken/Initialize() + . = ..() + chameleon_action.emp_randomise(INFINITY) +/obj/item/clothing/suit/chameleon + name = "armor" + desc = "A slim armored vest that protects against most types of damage." + icon_state = "armor" + item_state = "armor" + blood_overlay_type = "armor" + resistance_flags = NONE + armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - emp_act(severity) - name = "psychedelic" - desc = "Groovy!" - icon_state = "psyche" - item_color = "psyche" - usr.update_inv_w_uniform() - spawn(200) - name = initial(name) - icon_state = initial(icon_state) - item_color = initial(item_color) - desc = initial(desc) - usr.update_inv_w_uniform() - ..() + var/datum/action/item_action/chameleon/change/chameleon_action +/obj/item/clothing/suit/chameleon/Initialize() + . = ..() + chameleon_action = new(src) + chameleon_action.chameleon_type = /obj/item/clothing/suit + chameleon_action.chameleon_name = "Suit" + chameleon_action.chameleon_blacklist = typecacheof(list(/obj/item/clothing/suit/armor/abductor), only_root_path = TRUE) + chameleon_action.initialize_disguises() - verb/change() - set name = "Change Color" - set category = "Object" - set src in usr +/obj/item/clothing/suit/chameleon/emp_act(severity) + . = ..() + chameleon_action.emp_randomise() - if(icon_state == "psyche") - to_chat(usr, "Your suit is malfunctioning") - return +/obj/item/clothing/suit/chameleon/broken/Initialize() + . = ..() + chameleon_action.emp_randomise(INFINITY) - var/obj/item/clothing/under/A - A = input("Select Colour to change it to", "BOOYEA", A) in clothing_choices - if(!A) - return +/obj/item/clothing/glasses/chameleon + name = "Optical Meson Scanner" + desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition." + icon_state = "meson" + item_state = "meson" + resistance_flags = NONE + armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - desc = null - permeability_coefficient = 0.90 + var/datum/action/item_action/chameleon/change/chameleon_action - desc = A.desc - name = A.name - icon_state = A.icon_state - item_state = A.item_state - item_color = A.item_color - usr.update_inv_w_uniform() //so our overlays update. +/obj/item/clothing/glasses/chameleon/Initialize() + . = ..() + chameleon_action = new(src) + chameleon_action.chameleon_type = /obj/item/clothing/glasses + chameleon_action.chameleon_name = "Glasses" + chameleon_action.chameleon_blacklist = list() + chameleon_action.initialize_disguises() +/obj/item/clothing/glasses/chameleon/emp_act(severity) + . = ..() + chameleon_action.emp_randomise() +/obj/item/clothing/glasses/chameleon/broken/Initialize() + . = ..() + chameleon_action.emp_randomise(INFINITY) -/obj/item/clothing/under/chameleon/all/New() - ..() - var/blocked = list(/obj/item/clothing/under/chameleon, /obj/item/clothing/under/chameleon/all) - //to prevent an infinite loop - for(var/U in typesof(/obj/item/clothing/under)-blocked) - var/obj/item/clothing/under/V = new U - src.clothing_choices += V +/obj/item/clothing/gloves/chameleon + desc = "These gloves will protect the wearer from electric shock." + name = "insulated gloves" + icon_state = "yellow" + item_state = "ygloves" + + resistance_flags = NONE + armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + + var/datum/action/item_action/chameleon/change/chameleon_action + +/obj/item/clothing/gloves/chameleon/Initialize() + . = ..() + chameleon_action = new(src) + chameleon_action.chameleon_type = /obj/item/clothing/gloves + chameleon_action.chameleon_name = "Gloves" + chameleon_action.chameleon_blacklist = typecacheof(list(/obj/item/clothing/gloves, /obj/item/clothing/gloves/color), only_root_path = TRUE) + chameleon_action.initialize_disguises() + +/obj/item/clothing/gloves/chameleon/emp_act(severity) + . = ..() + chameleon_action.emp_randomise() + +/obj/item/clothing/gloves/chameleon/broken/Initialize() + . = ..() + chameleon_action.emp_randomise(INFINITY) + +/obj/item/clothing/head/chameleon + name = "grey cap" + desc = "It's a baseball hat in a tasteful grey colour." + icon_state = "greysoft" + item_color = "grey" + + resistance_flags = NONE + armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + + var/datum/action/item_action/chameleon/change/chameleon_action + +/obj/item/clothing/head/chameleon/Initialize() + . = ..() + chameleon_action = new(src) + chameleon_action.chameleon_type = /obj/item/clothing/head + chameleon_action.chameleon_name = "Hat" + chameleon_action.chameleon_blacklist = list() + chameleon_action.initialize_disguises() + +/obj/item/clothing/head/chameleon/emp_act(severity) + . = ..() + chameleon_action.emp_randomise() + +/obj/item/clothing/head/chameleon/broken/Initialize() + . = ..() + chameleon_action.emp_randomise(INFINITY) + +/obj/item/clothing/mask/chameleon + name = "gas mask" + desc = "A face-covering mask that can be connected to an air supply. While good for concealing your identity, it isn't good for blocking gas flow." //More accurate + icon_state = "gas_alt" + item_state = "gas_alt" + resistance_flags = NONE + armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + flags = AIRTIGHT | BLOCK_GAS_SMOKE_EFFECT + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE + gas_transfer_coefficient = 0.01 + permeability_coefficient = 0.01 + flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH + + var/obj/item/voice_changer/voice_changer + + var/datum/action/item_action/chameleon/change/chameleon_action + +/obj/item/clothing/mask/chameleon/Initialize() + . = ..() + + chameleon_action = new(src) + chameleon_action.chameleon_type = /obj/item/clothing/mask + chameleon_action.chameleon_name = "Mask" + chameleon_action.chameleon_blacklist = list() + chameleon_action.initialize_disguises() + + voice_changer = new(src) + +/obj/item/clothing/mask/chameleon/Destroy() + QDEL_NULL(voice_changer) + return ..() + +/obj/item/clothing/mask/chameleon/emp_act(severity) + . = ..() + chameleon_action.emp_randomise() + +/obj/item/clothing/mask/chameleon/broken/Initialize() + . = ..() + chameleon_action.emp_randomise(INFINITY) + +/obj/item/clothing/shoes/chameleon + name = "black shoes" + icon_state = "black" + item_color = "black" + desc = "A pair of black shoes." + permeability_coefficient = 0.05 + resistance_flags = NONE + armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + + var/datum/action/item_action/chameleon/change/chameleon_action + +/obj/item/clothing/shoes/chameleon/Initialize() + . = ..() + chameleon_action = new(src) + chameleon_action.chameleon_type = /obj/item/clothing/shoes + chameleon_action.chameleon_name = "Shoes" + chameleon_action.chameleon_blacklist = list() + chameleon_action.initialize_disguises() + +/obj/item/clothing/shoes/chameleon/emp_act(severity) + . = ..() + chameleon_action.emp_randomise() + +/obj/item/clothing/shoes/chameleon/noslip + name = "black shoes" + icon_state = "black" + item_color = "black" + desc = "A pair of black shoes." + flags = NOSLIP + +/obj/item/clothing/shoes/chameleon/noslip/broken/Initialize() + . = ..() + chameleon_action.emp_randomise(INFINITY) + +/obj/item/storage/backpack/chameleon + name = "backpack" + var/datum/action/item_action/chameleon/change/chameleon_action + +/obj/item/storage/backpack/chameleon/Initialize() + . = ..() + chameleon_action = new(src) + chameleon_action.chameleon_type = /obj/item/storage/backpack + chameleon_action.chameleon_name = "Backpack" + chameleon_action.initialize_disguises() + +/obj/item/storage/backpack/chameleon/emp_act(severity) + . = ..() + chameleon_action.emp_randomise() + +/obj/item/storage/backpack/chameleon/broken/Initialize() + . = ..() + chameleon_action.emp_randomise(INFINITY) + +/obj/item/storage/belt/chameleon + name = "toolbelt" + desc = "Holds tools." + var/datum/action/item_action/chameleon/change/chameleon_action + +/obj/item/storage/belt/chameleon/Initialize() + . = ..() + + chameleon_action = new(src) + chameleon_action.chameleon_type = /obj/item/storage/belt + chameleon_action.chameleon_name = "Belt" + chameleon_action.initialize_disguises() + +/obj/item/storage/belt/chameleon/emp_act(severity) + . = ..() + chameleon_action.emp_randomise() + +/obj/item/storage/belt/chameleon/broken/Initialize() + . = ..() + chameleon_action.emp_randomise(INFINITY) + +/obj/item/radio/headset/chameleon + name = "radio headset" + var/datum/action/item_action/chameleon/change/chameleon_action + +/obj/item/radio/headset/chameleon/Initialize() + . = ..() + chameleon_action = new(src) + chameleon_action.chameleon_type = /obj/item/radio/headset + chameleon_action.chameleon_name = "Headset" + chameleon_action.initialize_disguises() + +/obj/item/radio/headset/chameleon/emp_act(severity) + . = ..() + chameleon_action.emp_randomise() + +/obj/item/radio/headset/chameleon/broken/Initialize() + . = ..() + chameleon_action.emp_randomise(INFINITY) + +/obj/item/pda/chameleon + name = "PDA" + var/datum/action/item_action/chameleon/change/chameleon_action + +/obj/item/pda/chameleon/Initialize() + . = ..() + chameleon_action = new(src) + chameleon_action.chameleon_type = /obj/item/pda + chameleon_action.chameleon_name = "PDA" + chameleon_action.chameleon_blacklist = typecacheof(list(/obj/item/pda/heads), only_root_path = TRUE) + chameleon_action.initialize_disguises() + +/obj/item/pda/chameleon/emp_act(severity) + . = ..() + chameleon_action.emp_randomise() + +/obj/item/pda/chameleon/broken/Initialize() + . = ..() + chameleon_action.emp_randomise(INFINITY) + +/obj/item/stamp/chameleon + var/datum/action/item_action/chameleon/change/chameleon_action + +/obj/item/stamp/chameleon/Initialize() + . = ..() + chameleon_action = new(src) + chameleon_action.chameleon_type = /obj/item/stamp + chameleon_action.chameleon_name = "Stamp" + chameleon_action.initialize_disguises() + +/obj/item/stamp/chameleon/broken/Initialize() + . = ..() + chameleon_action.emp_randomise(INFINITY) \ No newline at end of file diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index e937ec25ef9..6be1d3bcf70 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -671,8 +671,8 @@ var/list/non_fakeattack_weapons = list(/obj/item/gun/projectile, /obj/item/ammo_ /obj/item/gun/energy/kinetic_accelerator/crossbow,\ /obj/item/storage/box/syndicate, /obj/item/storage/box/emps,\ /obj/item/cartridge/syndicate, /obj/item/clothing/under/chameleon,\ - /obj/item/clothing/shoes/syndigaloshes, /obj/item/card/id/syndicate,\ - /obj/item/clothing/mask/gas/voice, /obj/item/clothing/glasses/thermal,\ + /obj/item/clothing/shoes/chameleon/noslip, /obj/item/card/id/syndicate,\ + /obj/item/clothing/mask/chameleon, /obj/item/clothing/glasses/thermal,\ /obj/item/chameleon, /obj/item/card/emag,\ /obj/item/storage/toolbox/syndicate, /obj/item/aiModule,\ /obj/item/radio/headset/syndicate, /obj/item/grenade/plastic/c4,\ diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 1be6fc60a25..2f181d77077 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -62,27 +62,38 @@ return ..() /mob/living/carbon/human/proc/HasVoiceChanger() - if(istype(back,/obj/item/rig)) + if(istype(back, /obj/item/rig)) var/obj/item/rig/rig = back if(rig.speech && rig.speech.voice_holder && rig.speech.voice_holder.active && rig.speech.voice_holder.voice) return rig.speech.voice_holder.voice - for(var/obj/item/gear in list(wear_mask,wear_suit,head)) + for(var/obj/item/gear in list(wear_mask, wear_suit, head)) if(!gear) continue + var/obj/item/voice_changer/changer = locate() in gear - if(changer && changer.active && changer.voice) - return changer.voice - return 0 + if(changer && changer.active) + if(changer.voice) + return changer.voice + else if(wear_id) + var/obj/item/card/id/idcard = wear_id.GetID() + if(istype(idcard)) + return idcard.registered_name + + return FALSE /mob/living/carbon/human/GetVoice() var/has_changer = HasVoiceChanger() + if(has_changer) return has_changer + if(mind && mind.changeling && mind.changeling.mimicing) return mind.changeling.mimicing + if(GetSpecialVoice()) return GetSpecialVoice() + return real_name /mob/living/carbon/human/IsVocal() @@ -124,7 +135,6 @@ span = mind.speech_span if((COMIC in mutations) \ || (locate(/obj/item/organ/internal/cyberimp/brain/clown_voice) in internal_organs) \ - || istype(get_item_by_slot(slot_wear_mask), /obj/item/clothing/mask/gas/voice/clown) \ || GetComponent(/datum/component/jestosterone)) span = "sans" diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 3e9ff0b7ba6..e3b9b516909 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -196,6 +196,7 @@ var/list/permanent_huds = list() var/list/actions = list() + var/list/datum/action/chameleon_item_actions var/list/progressbars = null //for stacking do_after bars diff --git a/code/modules/ninja/suit/mask.dm b/code/modules/ninja/suit/mask.dm index 910ccbc953c..bfc87e0104c 100644 --- a/code/modules/ninja/suit/mask.dm +++ b/code/modules/ninja/suit/mask.dm @@ -6,7 +6,7 @@ Contents: */ -/obj/item/clothing/mask/gas/voice/space_ninja +/obj/item/clothing/mask/gas/space_ninja name = "ninja mask" desc = "A close-fitting mask that acts both as an air filter and a post-modern fashion statement." icon_state = "s-ninja(norm)" @@ -19,3 +19,13 @@ Contents: "Tajaran" = 'icons/mob/species/tajaran/mask.dmi', "Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi' ) + + var/obj/item/voice_changer/voice_changer + +/obj/item/clothing/mask/gas/space_ninja/Initialize(mapload) + . = ..() + voice_changer = new(src) + +/obj/item/clothing/mask/gas/space_ninja/Destroy() + QDEL_NULL(voice_changer) + return ..() \ No newline at end of file diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm index f03a08d237a..dfd430a5754 100644 --- a/code/modules/ninja/suit/suit.dm +++ b/code/modules/ninja/suit/suit.dm @@ -24,7 +24,7 @@ Contents: var/obj/item/clothing/head/helmet/space/space_ninja/suitHood var/obj/item/clothing/gloves/space_ninja/suitGloves var/obj/item/clothing/shoes/space_ninja/suitShoes - var/obj/item/clothing/mask/gas/voice/space_ninja/suitMask + var/obj/item/clothing/mask/gas/space_ninja/suitMask var/mob/living/carbon/human/suitOccupant /obj/item/clothing/suit/space/space_ninja/proc/toggle_suit_lock(mob/living/carbon/human/user) @@ -41,7 +41,7 @@ Contents: if(!istype(user.shoes, /obj/item/clothing/shoes/space_ninja)) to_chat(user, "ERROR: Unable to locate foot gear.\nABORTING...") return 0 - if(!istype(user.wear_mask, /obj/item/clothing/mask/gas/voice/space_ninja)) + if(!istype(user.wear_mask, /obj/item/clothing/mask/gas/space_ninja)) to_chat(user, "ERROR: Unable to locate mask.\nABORTING...") return 0 diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm index 8e78f0ce230..8c24cc55c9d 100644 --- a/code/modules/paperwork/stamps.dm +++ b/code/modules/paperwork/stamps.dm @@ -92,27 +92,3 @@ icon_state = "stamp-syndicate" item_color = "syndicate" -// Syndicate stamp to forge documents. - -/obj/item/stamp/chameleon/attack_self(mob/user as mob) - - var/list/stamp_types = typesof(/obj/item/stamp) - src.type // Get all stamp types except our own - var/list/stamps = list() - - // Generate them into a list - for(var/stamp_type in stamp_types) - var/obj/item/stamp/S = new stamp_type - stamps[capitalize(S.name)] = S - - var/list/show_stamps = list("EXIT" = null) + sortList(stamps) // the list that will be shown to the user to pick from - - var/input_stamp = input(user, "Choose a stamp to disguise as.", "Choose a stamp.") in show_stamps - - if(user && src in user.contents) - - var/obj/item/stamp/chosen_stamp = stamps[capitalize(input_stamp)] - - if(chosen_stamp) - name = chosen_stamp.name - icon_state = chosen_stamp.icon_state - item_color = chosen_stamp.item_color diff --git a/icons/mob/actions/actions.dmi b/icons/mob/actions/actions.dmi index b4d8a34a6e0b807b6381a3c8b92e6418718498df..7bc556c628c06f6152ba38303a766e421d6cc105 100644 GIT binary patch delta 16795 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 Z{J88D&`D(`1ONa9P>@lUE|WA0_&+_~S_uFE delta 13563 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 diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 02de48a6f41b9a525915b8893d89b6bc6b3802cc..469934ca9329fa755799091b1a95bb3396e463f4 100644 GIT binary patch delta 20405 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 diff --git a/paradise.dme b/paradise.dme index 1b7a691c820..f96d9d6da59 100644 --- a/paradise.dme +++ b/paradise.dme @@ -853,6 +853,7 @@ #include "code\game\objects\items\devices\traitordevices.dm" #include "code\game\objects\items\devices\transfer_valve.dm" #include "code\game\objects\items\devices\uplinks.dm" +#include "code\game\objects\items\devices\voice.dm" #include "code\game\objects\items\devices\whistle.dm" #include "code\game\objects\items\devices\radio\beacon.dm" #include "code\game\objects\items\devices\radio\electropack.dm" @@ -1319,7 +1320,6 @@ #include "code\modules\clothing\masks\breath.dm" #include "code\modules\clothing\masks\gasmask.dm" #include "code\modules\clothing\masks\miscellaneous.dm" -#include "code\modules\clothing\masks\voice.dm" #include "code\modules\clothing\patreon\glasses.dm" #include "code\modules\clothing\patreon\hats.dm" #include "code\modules\clothing\shoes\colour.dm" From 86b90bab2cae948cb0de0ad7fe0f12af75e67ab6 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Wed, 1 May 2019 21:01:16 +0200 Subject: [PATCH 069/195] And fix the uplink kits --- .../items/weapons/storage/uplink_kits.dm | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index ecf1acd701e..56db11ad058 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -5,7 +5,7 @@ if("bloodyspai") // 28TC new /obj/item/twohanded/garrote(src) new /obj/item/pinpointer/advpinpointer(src) - new /obj/item/clothing/mask/gas/voice(src) + new /obj/item/clothing/mask/chameleon(src) new /obj/item/clothing/under/chameleon(src) new /obj/item/card/id/syndicate(src) new /obj/item/flashlight/emp(src) @@ -19,7 +19,7 @@ new /obj/item/chameleon(src) new /obj/item/clothing/gloves/color/black/thief(src) new /obj/item/card/id/syndicate(src) - new /obj/item/clothing/shoes/syndigaloshes(src) + new /obj/item/clothing/shoes/chameleon/noslip(src) new /obj/item/storage/box/syndie_kit/safecracking(src) return @@ -83,14 +83,14 @@ new /obj/item/dnainjector/telemut/darkbundle(src) new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) new /obj/item/card/id/syndicate(src) - new /obj/item/clothing/shoes/syndigaloshes(src) - new /obj/item/clothing/mask/gas/voice(src) + new /obj/item/clothing/shoes/chameleon/noslip(src) + new /obj/item/clothing/mask/chameleon(src) return if("gadgets") // 30TC new /obj/item/clothing/gloves/color/yellow/power(src) new /obj/item/pen/sleepy(src) - new /obj/item/clothing/shoes/syndigaloshes(src) + new /obj/item/clothing/shoes/chameleon/noslip(src) new /obj/item/clothing/glasses/thermal/syndi(src) new /obj/item/flashlight/emp(src) new /obj/item/stamp/chameleon(src) @@ -340,4 +340,21 @@ To apply, hold the injector a short distance away from the outer thigh before ap new /obj/item/clothing/gloves/color/latex/nitrile(src) new /obj/item/clothing/mask/balaclava(src) new /obj/item/clothing/accessory/stethoscope(src) - new /obj/item/book/manual/engineering_hacking(src) \ No newline at end of file + new /obj/item/book/manual/engineering_hacking(src) + +/obj/item/storage/box/syndie_kit/chameleon + name = "chameleon kit" + +/obj/item/storage/box/syndie_kit/chameleon/New() + ..() + new /obj/item/clothing/under/chameleon(src) + new /obj/item/clothing/suit/chameleon(src) + new /obj/item/clothing/gloves/chameleon(src) + new /obj/item/clothing/shoes/chameleon(src) + new /obj/item/clothing/glasses/chameleon(src) + new /obj/item/clothing/head/chameleon(src) + new /obj/item/clothing/mask/chameleon(src) + new /obj/item/storage/backpack/chameleon(src) + new /obj/item/radio/headset/chameleon(src) + new /obj/item/stamp/chameleon(src) + new /obj/item/pda/chameleon(src) \ No newline at end of file From f7a52dcec0b301a9cabf7b0c780beda0f1809919 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Wed, 1 May 2019 21:07:43 +0200 Subject: [PATCH 070/195] COMIC injector fix --- code/game/objects/items/weapons/dna_injector.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index 04206e1f5b2..c7627688b5e 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -679,7 +679,7 @@ forcedmutation = TRUE /obj/item/dnainjector/comic/Initialize() - block = COMIC + block = COMICBLOCK ..() /obj/item/dnainjector/anticomic @@ -690,5 +690,5 @@ forcedmutation = TRUE /obj/item/dnainjector/anticomic/Initialize() - block = COMIC + block = COMICBLOCK ..() \ No newline at end of file From 0d81c2da7c12a9578bb675dbb2d5e45f9503bc25 Mon Sep 17 00:00:00 2001 From: Unknown Date: Wed, 1 May 2019 14:19:43 -0500 Subject: [PATCH 071/195] Adds Pig Crate --- code/datums/supplypacks.dm | 6 ++++++ code/game/objects/structures/crates_lockers/crittercrate.dm | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index ec43330a8eb..8fdaf8c25df 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -1073,6 +1073,12 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine containertype = /obj/structure/closet/critter/cow containername = "cow crate" +/datum/supply_packs/organic/pig + name = "Pig Crate" + cost = 25 + containertype = /obj/structure/closet/critter/pig + containername = "pig crate" + /datum/supply_packs/organic/goat name = "Goat Crate" cost = 25 diff --git a/code/game/objects/structures/crates_lockers/crittercrate.dm b/code/game/objects/structures/crates_lockers/crittercrate.dm index ffaff75288d..50d9b056e96 100644 --- a/code/game/objects/structures/crates_lockers/crittercrate.dm +++ b/code/game/objects/structures/crates_lockers/crittercrate.dm @@ -44,6 +44,10 @@ name = "cow crate" content_mob = /mob/living/simple_animal/cow +/obj/structure/closet/critter/pig + name = "pig crate" + content_mob = /mob/living/simple_animal/pig + /obj/structure/closet/critter/goat name = "goat crate" content_mob = /mob/living/simple_animal/hostile/retaliate/goat From 1f2c3819bd58ab9d8ea75d190e3f4cf6fcade6ab Mon Sep 17 00:00:00 2001 From: Arkatos1 Date: Wed, 1 May 2019 21:43:32 +0200 Subject: [PATCH 072/195] Adds 4 new plushies --- code/game/objects/items/toys.dm | 26 ++++++++++++++++++++++++++ code/modules/arcade/arcade_prize.dm | 4 ++-- code/modules/arcade/prize_datums.dm | 4 ++-- icons/obj/toy.dmi | Bin 73506 -> 75141 bytes 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 19864e0ba18..393ca1f3c0b 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -1066,6 +1066,32 @@ obj/item/toy/cards/deck/syndicate/black name = "tuxedo cat plushie" icon_state = "tuxedocat" +//New generation TG plushies + +/obj/item/toy/plushie/lizardplushie + name = "lizard plushie" + desc = "An adorable stuffed toy that resembles a lizardperson." + icon_state = "plushie_lizard" + item_state = "plushie_lizard" + +/obj/item/toy/plushie/snakeplushie + name = "snake plushie" + desc = "An adorable stuffed toy that resembles a snake. Not to be mistaken for the real thing." + icon_state = "plushie_snake" + item_state = "plushie_snake" + +/obj/item/toy/plushie/nukeplushie + name = "operative plushie" + desc = "An stuffed toy that resembles a syndicate nuclear operative. The tag claims operatives to be purely fictitious." + icon_state = "plushie_nuke" + item_state = "plushie_nuke" + +/obj/item/toy/plushie/slimeplushie + name = "slime plushie" + desc = "An adorable stuffed toy that resembles a slime. It is practically just a hacky sack." + icon_state = "plushie_slime" + item_state = "plushie_slime" + /* * Foam Armblade */ diff --git a/code/modules/arcade/arcade_prize.dm b/code/modules/arcade/arcade_prize.dm index 94c265848b7..a91e392e125 100644 --- a/code/modules/arcade/arcade_prize.dm +++ b/code/modules/arcade/arcade_prize.dm @@ -42,8 +42,8 @@ possible_contents = list(/obj/random/carp_plushie) /obj/item/toy/prizeball/plushie - name = "animal plushie capsule" - desc = "Contains one cuddly animal plushie!" + name = "plushie capsule" + desc = "Contains one cuddly plushie!" possible_contents = list(/obj/random/plushie) /obj/item/toy/prizeball/figure diff --git a/code/modules/arcade/prize_datums.dm b/code/modules/arcade/prize_datums.dm index a68071f8f44..4d2e062677a 100644 --- a/code/modules/arcade/prize_datums.dm +++ b/code/modules/arcade/prize_datums.dm @@ -157,8 +157,8 @@ var/global/datum/prizes/global_prizes = new cost = 65 /datum/prize_item/plushie - name = "Random Animal Plushie" - desc = "A colorful animal-shaped plush toy." + name = "Random Plushie" + desc = "A colorful plush toy." typepath = /obj/item/toy/prizeball/plushie cost = 75 diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi index 524418ba0e90152a11ee6bbcddb955770e0be0d9..ccfa57790d9779f44f283f21c4cfae994d527306 100644 GIT binary patch delta 15954 zcmYki1yo#3uq}*xfIIw%RdwRWV=I&4h7`hX0V(c}P9NP_ zK(c!~H~tSVX~JZE7U)J~j(JOuE6Zm>S#J-=50+Kq|I8nk-CTTU>ua;>-^Y<* z?OCnwq3&Xzbf@~Y^>StFAKEsnldyYsg_vxFe(`p#CIM=77LdOwx2A|#5FC8?e!DYGja+q{1 z-ZXTy-n?|Q&fnf9Q*~9gk`oQT-9!O~f;Yj2f`vW^O08$zU;;q$^SO?q<9<0aT1v1p zNy}JQFDqOSqqMy&co1<<{ix$-l+EdiSO3as<%}k`{C#by)hHa-q=UIQVGSWjtCU7b zeAJNJLp}u4wq?GB1w|Ig-hDjCK;P$KMb2X+fui?YEZTLCi+O}&I+eKJVl(jT2dmf@ z-c^Ln^ki53UNX8ruj1f8UZlO6zz8ge+2MtcO6v3+71~p zUFO0gh8fme3R%>Sf!V~TFWY{p&oZ)9OztikIQadWC+W8@eH9pOm3MUnG`VdfM@C}K*Ku@$P}OcMkip-H+SQ1bo4$T0{y zLX&p;LCzO~nNtuki6LRdR>*-fO)SDGjrmtp!WC`$6-C08c$!$0GaM86t0LhFH%%-B zd6)wmF{vVPNL~nO0>X`$be1?oDs=rc%^P(@Eb8`=iccET04jn-SpuKD5EX6uH*N%r zlLS6eA?l}T_^2ZoQ8#F+P7zE4m+$NE2s?G^9fLPt!C}M_8h6$W)yY zm*hUu+h0Lv{1k&d{?p`j2T=U&wfBpX>QkSW8apYd zz8~q&`^O2qEw4R!RDmyML9;3Ww(w?VY-HyZoN+P6Hlc?_ytqdVm=oEtoW3W7I;e`9 zM=UHet=!ckX{R&xHEsw}waGWq3!y8_?m5`WbGR40wS3>VlABv|PIq(c51+lvRy%|? z7Cma?+FHVX2mzSn+;Igs0E zCs=cMn^=epJ1xLB-$;C1p=qvgWTiQY%|c*sA=zos`tKxS$qbKA?zqp&%k)t>}ul8tAr~j0-&IdodXzGcwRGoW90kwBZH`n@D zk&M|+4Zc9hGD1RPO4a8YxcdiwJ(QJ{yk^fo^NHb(qiMl4+KifeG~q(OxFd?~wBhSg zWc2yfqCy7*Z5dTlb8YC7JXRbe#3WnSB9l|22jXR(_nNCc_Wf#h)hc?HM~gRbSw@Qg z2(se_hiGxkwa6TGRKt~>55}*^gffE$>+MEFi&p_M1sb{i$|%V(MLiX+7qi-3NK-5{H{jVe6AdN; z#&iat71K@=aWmY{75tL;Dt+y9;ZS|%JPjWe8_!8eqU@Df0*HAD+i}-6yj6ycg5Lx; z-5u$_Q?Fy;a$;v&6BcgEa=#GvV!XxM;)g?qRi>b(G ziWlL;WMqnpt<<<70i;iumScGxN2W0=|Kjjo%qrK)viEi(DF-xhs3&#TdFxPHx@LTt zOVVt=nV@M;`PKPVroz_!YD*LifJRs#eM+Gr^QWIaRaE#xY?#iYB++awWxU==tuIeY zb6lD8w%+xKWTq&Dw-xSw>UG6M4;Q>tS0+pK4zMvHE(a|Dozb zOk{(03+a$Fsl_24ujZ&7H#VVj**{&BhP~2Tko+YFxDQ+XMYt|~G_b4}z}X1;K!1a( zJgVfJH}?*Dqx3575j$Bo!|0GDl3R}Z`(?+Z)rIqOE}7?<`uXNEtvZg6jVzCz*L%%W z#?_nGJb2=p@a_H)bYV~*4>YOdXAr|h(u44f5ogbMZ{kBfn%VQM4r>c(mE0ro4N zcSwc(i!6nRVNlAguO>1Xpu`9UgO7;ZsYVZ;``XTkz>cpN3C_&1Voe#FEatcCN;e&> z;2p%{_2sx|=^ytEO|vhtcz#+^`X<%apGh^DrFV-!&W8($*Ws;LVY-aRc-WUfZy@rn zJeb=G+#Sn`C_qc-g@~cNSCW{wBlI13XDIxB1^cl3=rI06-`4^l+WNtsN?CVDN`z};gi7qlSfA@V_Go+=^3fXwFa2=;iZ|1(A zt+j-cSgEy_X^?*h1t*{R#SWQo70ipM>{od*7MGa(`cZQ7PJe2_Al}i@;W6IZ+xr>0 z@+VeteCjm1uzn>tuF){{3l0g1ecM{424f1G22c#Akq(dGqTJN@%GS6uODqH13-1y? zU%)cbAgp;Ni_ssg&hqhSt;5xHESUky3rwpe#In?yq2;l6^U!oIQYAV|4`VxKp#Ter zB~stq-s*g9z(yL#!u}qm z0~`U2Z!)gcqY1_hH-q7a8SjCth9P@998sTJ{6IHyIlmHV1Z^OY8A zI@+85d{HkiuYaZAh<0{%K5<%O7#bR8^Sb_E)v6t`X_=|9QmX#lqBCL1p(J>(9@dJR zXeRGu7m|Dk+~XI_!8iT|H~z(NRY=e>1%i?l*d#5!%-ySLQ0Nt=xZH4H&g>&2?|mW} zc2!T#o!etn$N)2yJ=T`q|MR5rzxZx)b54Eissssn%T~jgAk(G#gzSwj!mZRVLpTDD zXPXiU3(-5{BVnlc4Z6`wt>0+L;$lc?U847dn>vG_^}BpNP|pRxQ%R#?d%D>T03z== zy5U^g3Q>`xu%}l8H?wC#dA|{f#=!;?Ik%0U1f41M`rbb_jSeOh^_e!{RWxvzkrA*m zX@b6Zd&v}+l@-q0EO**htzVOpyrd)9&!x}(kGxwk;H zxa57xD%a|Re%$azL@Ef#4mD$P6?1 zhcCSFY7}u$K6H6Hm|afVTesxy?H_zOD!}yXxN+62W8$axxDh@;jSGYlP>{5))-;_Y z8!&CDzb(6@4x}ie9bp(2Ge$z8q~ZOzjXzoIc<$%{3%17*?UCymxs9`<0(eH%9W0k# z36dlO|AbJIp;r@rkX9TvZqR;msPcQG`$V3a-rR3m>TwBwx)*Kk1rwRz@WqQ%2U3|}Glfcn|;{{p5ocJVU zYlh~1oG9<91Zu!an-^ciMi-FC>-4+#;j}sO~QF9RM$S`@&7BKSig3EuT z7b|LT5ja4yj1K$DzYhY;N8p0s2;tm6hz^wvZBq^Ew2cRVH$NEzIG%_px$oGZRhbE{ zlq>>n;Km$ttDsBP-ccx5F}lt zDm2?3jf3{|6@Oa+MT_4%Oqi}+-CViHosz|X}DkX$uiwAD^E9XNk!3*S1W31KX z$*ea?6Y6zemShnyAPNZyz4|}939!@+XC{oVzMn;un&?#n42>^)pqz7Wd-A=*!`n&5 zy8Q1#nVzJ~CWQ-oCl*251sYY#eQ&1xx$l3{JPp0W4iBfK>lSZcCm*``g~$YY{&Ct& zuD;LR4EkFABVHF%xt;d=SLdU_>HBatdW1-}H&`NHTw2C)R}gN!-pS?c>*LkH`0 zFhLOe`pjqm@Ow}f+G@GKqvEp|b8o&0Xtb%sHVu~Z@Fvur6pBqal0%u4^yPO6RyLeFg3*{s~*0lNl95TBIL4I zq=}`;pW&{qj+_g{9HCSPxF|j_qxpCA>ayt2@gm* zW&B10JVv-_9VRM_%O;gkhT@{5EBX2Pd;5Z`O3uQ=!lT=tsyM4pl{9^5g@k&a7O&~X zXOjXu-AQ=b#CO8XWHdY0vj3fE>=fnG3uBky7}%)N^0zsBwgCG3Vg~=MZH(6q!Fm5^ z2`j!aGl?}&7^+MmbMm2ha>#lMVV+el#v2?5CX_5@TW3UT{tP1`eM1c~$il*&YptcD zOByG8k0OhslqC-pDVn}|vwX=vu99Nxpykkw2@M|&spCnWtbLivz8*AZ$j{H0=+iO{ z)(!pP)PsgALjsthY0Bcn85LoXxxY%5CSI2rn$1qymkbMU=@hUpl@&3vi`omGx+cy5 zpW}mFBZuRuy}>jET9I+VYlVp*o>I$33#(%gU>2y-{AFpX4>G5rCgwD;=A0ujo3=ID!$}^b*}`mQ^m+0<39Z6?EFZg)7O*svyVCY^KtRD z=OVGY?+&t_US6tf;<@&}+zNF`JYA*DpVKL3NA&dx>*(lwLPKZ-nwmg6(X5rY;jR~J zyzC}}a3^yWMWlQ z5eQ|!Ty!aEgg^rE*LFuTOcMD@0;NpO$O7^3#(*~;sW{TVKRysWomAC1RDzdG9}+Re zRD$ea)9g>d`buL!zI(WG%F)tiNe;Y^xc5YhEvNy#xyeCod2|JT36nFP4KeSyC5APx z8~$#n;*h(Z>6#GDHktkPyY6q-$_9ISSA7!lOIKct&)j*pj>lCEWO-KT6?P4|xha5l9r@o2lt& zuE)2{nlI;qO32>A5193CmeLzuZMVe+v%actTigK~2{P|{z>GLPR|I;^H#a2QoF98lOMevlTUkJP}K^Q(fMLV>Q7fv)6)4o-9o z>Ii=Ny7M1``}31vZ-0M#ch^i>#4a*SEZt58SSR1pk!(iJNz-Ki)!+DWUWy0L_ zyZsQ3PF89)m20=rosq(*1+$bu6vno^qd7WtMne@^I6}|PhXSoSM;6xY*KW~SPb0mL zNnS$OT!`0lfnn2Dv*W?2gxsj%pFiYpaeCrHE#6xG0R{(eL7SL2Ah`m&Y=)_uAvf0$ z_zZ&XNAae`=Bo*1r%Ss_CbC=7fBxH1`ANVl0z-^kmM}A{rQehbdnTVE3?ANEu({Zv zPpXT>fEToCQjMgl=8)`?p@C>mNeL(7<3TG5?cR~;M-q+k^z?M~OoaN?_4QL&SeRe; z9!IMGvr%JHQ#y}l?d(~2=p4T5Auu!wj9B}Hh}GkD359CLHB=EtmYYXr>=upideqP0 z7BPyw#baDg2X{#13CKnaq&ej%c-|8Z&;uZf67xt&i*#Nu-m?E`xBG))XKX)uBJUQ* zfWNiWq^C1<&M|m8eE^gcJ~B2|sO(iZZ{3k;Ldm>3NLN+$2tw1FLr2CW1OEDF93>qh zU)RXDYXo4q{ZKju+rlaPB1<2wF@rfKf1{RYxiuf7Yig1YHY{k& zyGR?XgY@7ol2&d}6LK6?E=i+04M%Gjh7~IT#m7s*Z`Mr+6B~?G60r_U!&4?p3y3hh ziZT_9ZX7peFXwd&;+rYDtLoo9sD+=`W_L{YRCLqSMwjG_`s2iPCtL0-3&G!#~KqBX-0;2EE{63Nh zkJn!-eX&*7+E@u76rW*W`orl1e^~Fk$`W9B?bdQ`8*NL8OtB|-CKjKP^DRJ=&nk|1 zXB6|-5uY<&nXqrP8X@d=T2$V1p9b4uhuqrInBn9(kf%omEB4C?$7S~gbAqQOa06k!ewLsy_Cs*=O2+`S zT{Bxuq^M#oOI57(k>BIe^nR)~6QBZpKZcANK}SX`wW!nd^=-j78~Ac0+a#h`Cv>** z#-a3%JfZ|)(lv>B5dVoXivFsIL(XG^9#vQ*q7rV$C<5yNk2OAiSNVBt?5a}ct%89Q z4HeTJR%}n54bG6yaS#2I_2}QfH2jRw@QxFQX9S=m8rr1DC&p{Ljh*cFJW*K0=&dcE zbOmp1CcN(MJx9!AK%l4HaYT7Ck5Bf|_hP%ueRDcrlnQHScVuF${ElZ}ETnib^3Mmk zVB)u^Su_7T7mdC2^l|e89A(yGmOSQnGXKl-@m2$VFSjA5vZX$^<3#J_&KP|f(sC_U zI0})n*#_%f@6xr+;IMatZ+j^U6Jql9(k!>{LZmgCr<^bLfNpEDypc7v*vULB#lK^> zY@?P4JgTz#=U-vwhLIAs>`A9Y6HmaTXQqFRCe{ZcPHM0V4z%b!lKqMp3vOWwo26CZ z>~V+lF5x{9=U{SP`21(D@+p$n$Eq3VUm8II;DwtfnzP})BSu{XfAq#di zJWE;Ew}*W9z;m08j=+1Oz&p;=`wz*(4nPhyl}Z0^%ZLJ-?KHyS&77ar6i_v@`#9qq zu>I1U{v~W4^t}IQ zKu%{lO(N6?;`OL;atm8mEGOGxj&hknj&4VVfPFYX*_Z_ma=dX%572{!}wHlj>q6?IgsHP2g31r0!9KYW_a0 zN+ZWso+Xq1q52KRu`Dcl?ozrK}$u|4cB;3xV z7Wpp+le1zNgwbVBMUCrU`BPG)Mc4MVKVEK1j(be@fssTnH~f*x^<3UCVblzTauZYS z$NLKZ<M8-(9S)4hZe-XI#Y#fC2yzH|Gzrlkg5Fu0xLTjY3|CslTN1m(LdQbba69J$-0o;7c(nlt z#-ZrT>3SY;W#H4@a)NOY;S1bzd7(ppW12V+!>Sun)zd)bHsHY^c1&TH}Ca)+-Nbb{xVzo&2`n2y;jds{=Ox8$bHs0dz2iGC7Hj6XgN}` z#5zR}R*wuIyya&J|CrUfm}^G3qqoOR{Dep8L7I*p`tFGRb^Y6t`$px}+e@kQeDLk; zx%$ZIB~#5@_M!(`ydGp7VuUe#+-yr&fZj8I=s9}Klj)-H&evb)!bm{A6j>8&n+TY>lLO4*4AB2r6S?T}E z{A(VD>jzmFy|Emuk-+Z#AhPJc6f@fPEO1OQWy<8X{|vcwi>?V+dtYnawoQo%vuv7S zFHR#0Vhw4;YX6fpfnpA;$^7Z$HPz?))9|`F*3~x0I?R{o0NK>OarK`S=k7lpOe@)6 zTDZWcsmn8c2ilPl5h8??*By95jFFV)I*@c-cm5NyT-zNT6clNOtc0k#oV+~jR+eKg1uJV@cejAg-BA#=EY}T& z`dQzbD~zP1Bn~bvrg8bNt^Pa0mOM`njhLVBXU~#5XFeJK^xGy>%Tn|%NNmlo4@ommw|>6L}FxzCe+ugq1( zs?etezMe{O_VH2uJtb^eEw7#VutFcEc=1$H^0fBHaBbY#S&o;7dCUrMlQ7`%0Crpx z=duAH%%`x>UCV5(-MO&vUYO5i%UPvHBXdM+6#6pFD=)(g?DECsDU_!PVo7 z$jt0_?Nf*CI*u)TCg7D*_|7f{{IT!B_gnIP9qm*>>y>p~UC_)PqPa`6kh$P{&l9zB zA}^5oArp#8hRceiCp}gBP@oZW2e^(?nT~q)>q<~xzF0g#Q-$?qohXm07RyvxrXnCzL8`b!q!k@n##`6n5f~*A~=5Hn?Q9zu$i+BGvXf zO0!#60g7w6z7q&U-qHr{}A}$bE@wBoRiK%gpBB@qlFS)9i3&x z24U9&1%MrLo37Gg?Rs$R1^s{|kSb222$i+9Wfp4}>x4p3~{tRAQDdgyMd$_G)=eE4k>-}DEf8?T;T&RXE;>HS(LU~_%cD9n_E z{sQuTNF(ZYhZeH6*eBCE{p$b9#rG~`aR{7iPt;P0j`{CryuC48H7?yVpZ7`|;EBy4 zA?x-E7%&;-vUr>$VU&GDh`QfA`JHPJ^SdG>h^3*Xz3+2$0bbtf!hK2pAXB~1{mJ&_ zW!)dVIUE$MLfNU6ap7m4fph}dXnwr}msja(Ny|l|wEXvV5{y(BzuQKnE1Xd74-x>9 zXqM);rH04m)2V__Z-{8d5Ou}x^?DfM$L7-w;A056294R`Q&Kc`TS*Eq$ogZSz7`tw z1(;6d3Mx{N`MN&H1uS7_IjnEh5_md4U77embm#3~;k=#AcaCc*DE~M(XpsXOiZ1JI zm1HC7sHuOJZW}PJ2}3Z{yWw4CIbc(hpTS{;5;zcoxZ0A(?-~1WzRKaW)sOP%xKK?n zp301^QG;8wl;^Ew+x0NcPQdA?l2&$cRp<16Z1ARY0{4>hqS$J?>CG7fy&ghuEr3>s z^5D7fL{j$-n~J#P{2fuvr!Oci4c{?GXQU+cA9o-6FTRhvH5{lQ0homyLg1w~_kA|= z+aOs;&a*2QN8}Ia7)ICh&jn03yGW~0ep<$$8#id3c`+lIYp+6QK-LNp2mC(o&9=3(6Tia|zBj*@{P zG6)t?RarSOElmN|ZXQY!J|a50s?lG1r^r|@6_J?dW{w2Bx3^ag;J4bu7s80{8=Z_% z389eMc|j%S=U)SCUDvCXqLZHh$;CdB^ZXj(7p}@(;*O%Ho4Av&h!Ev5ZN+o{^#va! z7U>#Xl_3kYx3>@RS>eC!Xoc^puN05Anm5;crr>uV_LJk@{#jh3z>*k-oNL%-@jdUi zXTe=rS()>RasJU7IgwWZxFWV>3l>&BIn@1 z7D-p2EoUJ8a@FX` zg6}~=KoBH{$>Ff}wZZalCZXAV)U%m zFVO|X=SiAjk%VDTILy8W2C+{dF8@bBTCncg7*H$OX@ zIF*>^OPP{57<{h+CG=^NBzj(#<^}zyckKiik%$y(tE|csmM#D33l0v>R!TEwrtnVk zHUHuBRFH0q5$L+gDdG+K$lPCs&!AnF{u~sxWdNc|LtgdDyP3pflVkV_a|Ec{mNFevG=`b(l;ci{6lu;fz(2%S#H+g~P zR(Njb*E!*n9V$PJ`In4hA|8hbJZ4>|il-0LhuAfpcASI^OiV+#dx*x9mFJ271@tSr zQmhv@>^qa3dX@!eX7+@&qrcg&clMJ2u~OM-xN!RrxIIlMaiRMf!Z43nGVOW8*ctPb z{^%E6MbmzQIsIpKCK9mj2cs2F7Wg|FU!KEq0)w^Z4(nSc=fLV}Rs{235V*_$B3)gb zFxDmJH2ZI9x_ejP9|#Ib11PrCbFF4}?eqnE(d1$1OE|3J9Do1KwvGr)(FhO%|%N z@U7I(goW=MIweD)Fo?1$fIlzEv_fBSw3ZTgrN9d%cbmhudMp}az2{G!c_ZpCB$072 zzi|&zniIMa#IK#dI#>)FtuFSpo^5{S(;-VVy?sEIb}^4`lFX7sj4M#=bHw%1saK28 z$0;#6HFQ-6##Ru_+tQoz&4J}X?w3=D`Mujc49qokcUiWxeJ!8h0$;U3NhUVQuH8l{ChPWs1lV5s$g)^Lg7Q-``%bU_vgNp}o;0od#3* zBB>ZkK|zwFQMhEq$U0^*b+ua7VeR}z84Qts{a^ceq5u77rFM`ET7Et)wLULAWLZ({ z3`_zm!2*1iNOX#6WWpBF4Q9hAtB85Qt@f*pwrQ__^nhIXxdmL9rJgrP?7K)kU&SJW z-`_9f@X%KgK8KR4UVK05bKRfc&91 z0Qam+#SBRH(8Et>&fZ7q0#B;Sg3cs$!gM=;6l1(bE1ou8iO0VU0{LMr*9IQq@+E*w89`$5!(?uR-_j)}rbZ0KqWm z3GbaOOT5BTIrHU9$LigMtFW;B#^~xLOU2b|a(Ld2PRQKcoa*Y*XK3YC!mCxszGZt3=N*YuR-;J> z3G`NbnL_W$f_@xn5F$7(QCp=dI^T2{R}Jayv<5a%N$q|`3+MLHyzmh9)nLI{REZ*6 z1vIage%Y-%KQ+pF7!Njk243bTsQF>sbem*rKd7&fC2nY(^XoP1JUxT39Zn3scby92 zN1(rB!4?z#l$ zc#R>`>=?QO`wAJwnY{+?^4yN6jzREnaLG2PA3o5~(n=XTK0cNi0zEzuPFR#2SI<{` zBxe3uT&r6Av|x8^GUZGM3{CXjmfjK9N=-MNmz3B0ZEv3l?PwA063^euen*5ozZU(` zBMxfM_~fK>Y{lKyu+sjiSg6{|v#4{UQ5^e%WThqfbFzx@K?QuC`f~5QDGe_}#=m-H zQ&Sd50m2=@pBS=XAeH%s$iJ06Yd{opgU^@VIo}0W-f6S`+vGNbxuKzO zV&dY^I_J~JZXPHY`9f~?kI|8l6)yE|PyM7`h;ze0cHXZY0GL=xCFMN(7n&^rxQU8d zn^Jx!I};t*vKo!-9oljt!Tbx0e7qVyPL%q^%N)B^h+kDb1@4@eMBGpgYu4}yRgXK@ z7_#+&)emqBJWC8BP>&x|);~yEa;$3EQF2z3&JKUXm0xtIO?>n9*&JVLFav>KE|(w2 zg$4n!U+pg&UCWIYsOPI~bUbuveBhgKvZ-vLUxCoDbNd70drUFxW`811+J}QfEQB34 zd;K*S1ipO1>M?XIg9^(2QYUiks#$+GQzBpTAKR|4XWQA`)tHwS{Z=lFLM)3hvR9_p zmS|yR@^__1fmkc?y2a)%bP60iJQoEs^E43q)QpC1`BKZliF!}RG9YtliscL*bdM$F zcU6N>fLqWa(osWw@%9LD3S5i*YHE2oeHY?pJ3ou_i68Nizf5<+aE|9#C=EAvs-W+K z`tx?1%K-N?CxbUK$obmwGjfzQu7sUkDarMBFGDAR^Uu&=usLCjzyjZ=p72z&1c0GB zTCt+}?XkDv-`R#GCj+>mPG3zd_~MkX{{lP1V`vz#HhKVh5Gv%McFbuDNW!&jUm=OS zmhpDoHisNJv9V5YK|#UUMvtC`O_lGP?WzzCBfrnDzdUe*-+D?Q%m$`^YIrJ^ZTYj9 z#=r(VDs`akd0X`4N@Cpx5p#z=Kn4GVZ zkW@ADK115kxul^X@rKYws1MJ!t||pGs1b$aWIdFeOou>jD4G^@<9PEZ5-f*FPSaZ^ z8I4y$d7pCMm|U=P#^%mTP96xsXX=@74D)&6e+d*l2H^#|-;PZFL5BfnYuM5%rHCY# zND{D|Otcgbm-C5i`&UXjv6$Fo!%24J@aZ1=c2d|-fM&2F-hI+YxZZr@cE=Nk10QF2B$B}z=r3Wx&Sqa$c zddwyvPl4#BNW>cn;lREiAfK*mQvA^4ueNJ9%^Wl)>%8KBR6b1T2IuZp7V z>a~anAVcMpJ_#FgfR|fk_-!!&`RRo8PqSk_1dCj3f-aC$OPQ@e5sAD49+b7DP52yah9M(=91!WC=Gefvm( zn7xe)%ur$Wl;j$+#{2LgJ(qAn4wF#pnxr`YFTbLGn@S>yssSG;e3*6ckX7gcs|7gV z;ltJd=}+!xV13!Yzsx`9#}-R6$_^dwxq|(O*Tn^CYGBWZ}w;S~kowBlaU=5Mo zNIV6U-E!l8>Y9lh!YAXygGS~EYa+Coa-sjNLL4WcwtjZwMXD9jQD4_e zQbf+fugiv}8`e*aO*aovrg+V@1S3|Ut6&pdeaK3#rw zHeB^#E8y#b==nzBqj}~NpS3#Y*IO0)js}rKbbXlo^>ya?2Q^J{w_wC$0B&L7y zf4+06>%-Ds>-F~qy8Hv`9&qVf98<}3^RdVS?-R&&&&Us>>Ni}2*q$xf%dbUyOgxjDE?BV z62+v2xzic^YR$y9zW!XAER7uwzYQwwCXVID-$J4BN<92k^*E!v*Jm>9Ugk-9v?5Th zd4B5FoK9T4F&FoO)8r;CD3lz`INzJKnKV1+=E*}-TnSt-vf>w5kG z33*C}4@2V(fqSzBYirgdjG_llVnYgnboxxtp{M}T6T~G%39ay_B{2$7$f1hQ%p5zJ zuY&f1%nAA>P}@r23Fqa%olhi#CpaeP?xZ0MTnry^R&9lzo~ICseL(E#l%x?x86)ho z7jbish%0*YzCEbeE24aO3y93xY4P02S&eVQX_AX}usgTnuU_zWIy|PTaSfB{4 zqB1)uXoXJ1qI4ic!O%{Fe6=?{{Zko&z-r+!QJ(zw{%Oc&;=S=<;!G!musG=-V_o`%(v7T|(0Of>|SzKLLTy;IAUc;QM19tp0J1cgo2UbLHW!@CAAK(^jy+ zOX;Mh&;oh5v zDr6>u&bwA}ehX3OI1+w@=89)$&Dss}Z$5sZ+Eo-Y>TfaYUW=R8)m zL6;^Wzen}c-E89B0=m#s{@S@#jc&=sp~4IQW_ER};O)Mng+tZjznit^9+rCHz0~2p z-BnKm|2N@LS-QoFSd=!??{4)6aYe91UVOF)9f?t z>>}+`SifAUZM>S9nazJ<*Ajff!7`T*z}Y|4Hb=R%6WVflX%PeqH~CA#S2_?Yxfhg+ z#I^(w_kFyK(iLe5>+chyg;KOES(}4Tr7OWaIhKBY@2#ABvekqBe9z@&B}yUO>d=@O zDi**!kuzK;P371d0wl2?7k~?;Bk0(@3Fp6QC4J(s{0T8G?c4iI!nO|(YxoR_`Dbh9 z4(g7(DkKp$994v|q3c{MX^MwR%@~~G(4XVRhyUOlKoWo{W;Vrgfe4`ly zgD+6wd~XFwR~7n3AZA!b+Dei#fqm3sR^G2d&?ORT@tq_O%VPxes6X{sVTgadJNx%~W!MKyzYlmO%hw-AYoc2aAAz7$DLy_2#QBgZ> zn*pxNt9?apIgW~!hv4Y$CXh(YQr-FWJHh$m`J&QU&$pcyu)@E%40^v4oaL6B2|1P7 zbzDfz9A;Z3+l~PMIvg zezlcZ<8CtL0dcPJZH4qbZ@M?@b?&3WW^JMqxv0rzipu1^XX(?|K?|1p6&HVKFW{ux zddY|F;3}18b7}OSHFf=9#~mf4_JU_~VD#$hP6BBFQoVaLJ==2QCRu*M1FX@LMa>im z`1KkzRZGp0!H;G2ngS5jovTo&{k-eEOXZf$ze{dx{DGWxwMbu*4sxIKvDgi?!Dev{ zVi<41d?m&#$0e+x^IojQsHy>sb|2pPZ1SP5?(VjdK5GWoemv*{cOpTQXb5VKOro7{ zf18_AcL#@rgaACkKQ>WuXv%3v@v*99{s27l$>&`WXC5yXjvm9zh+Ps1yIM zY{99BX^tD(CFB41&8|mS7F5Uot#tT71n}X#3UgIe1W-S4>q0?ZvXY7twPMD>{|5nL B=i2}P delta 14306 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 f^*@rbMf6VWQkn0Umw%231rZquMe!O@ Date: Thu, 2 May 2019 05:32:05 +0200 Subject: [PATCH 073/195] fixed typo --- code/modules/shuttle/syndicate.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/shuttle/syndicate.dm b/code/modules/shuttle/syndicate.dm index 0a40901059f..0ec9e614110 100644 --- a/code/modules/shuttle/syndicate.dm +++ b/code/modules/shuttle/syndicate.dm @@ -42,7 +42,7 @@ ..() /obj/machinery/computer/shuttle/sst - name = "Syndicate Strike Time Shuttle Console" + name = "Syndicate Strike Team Shuttle Console" desc = "Used to call and send the SST shuttle." icon_keyboard = "syndie_key" icon_screen = "syndishuttle" From b931c6669b75f1c8a24d7d867e8bc835245682a3 Mon Sep 17 00:00:00 2001 From: Arkatos1 Date: Thu, 2 May 2019 18:50:28 +0200 Subject: [PATCH 074/195] Plasmamen addition --- code/modules/mob/living/carbon/human/species/plasmaman.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/mob/living/carbon/human/species/plasmaman.dm b/code/modules/mob/living/carbon/human/species/plasmaman.dm index 35d02f82509..bb900cdb5b6 100644 --- a/code/modules/mob/living/carbon/human/species/plasmaman.dm +++ b/code/modules/mob/living/carbon/human/species/plasmaman.dm @@ -41,6 +41,7 @@ ) speciesbox = /obj/item/storage/box/survival_plasmaman + flesh_color = "#8b3fba" /datum/species/plasmaman/say_filter(mob/M, message, datum/language/speaking) if(copytext(message, 1, 2) != "*") From fe0c04534f8d4287d10f11b660b611613dfc3327 Mon Sep 17 00:00:00 2001 From: Twinmold93 Date: Thu, 2 May 2019 12:59:05 -0500 Subject: [PATCH 075/195] Moved to MC Tab Moves the time stamp to the MC Tab per Fox's request. --- code/modules/mob/mob.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 14004fa4a5b..779ed6bf900 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -981,6 +981,7 @@ var/list/slot_equipment_priority = list( \ stat("CPU:", "[world.cpu]") stat("Instances:", "[num2text(world.contents.len, 10)]") GLOB.stat_entry() + stat("Server Time:", time_stamp()) stat(null) if(Master) Master.stat_entry() @@ -1001,8 +1002,6 @@ var/list/slot_equipment_priority = list( \ /mob/proc/show_stat_station_time() stat(null, "Round Time: [worldtime2text()]") stat(null, "Station Time: [station_time_timestamp()]") - if(client.holder && (client.holder.rights & R_ADMIN)) - stat(null, "Server Time: [time_stamp()]") // this function displays the shuttles ETA in the status panel if the shuttle has been called /mob/proc/show_stat_emergency_shuttle_eta() From 86cdeb3fa1a160979753cf812976d4347f293645 Mon Sep 17 00:00:00 2001 From: joep van der velden Date: Thu, 2 May 2019 20:12:24 +0200 Subject: [PATCH 076/195] Force move for regurgitate and devour now --- code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm | 2 +- code/modules/mob/mob_grab.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm index a6454111397..982c606b629 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -159,7 +159,7 @@ Doesn't work on other aliens/AI.*/ for(var/mob/M in src) if(M in stomach_contents) stomach_contents.Remove(M) - M.loc = loc + M.forceMove(loc) //Paralyse(10) src.visible_message("[src] hurls out the contents of [p_their()] stomach!") return diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index 93941d6e7d2..cac5581b3ef 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -395,7 +395,7 @@ if(affecting.mind) add_attack_logs(attacker, affecting, "Devoured") - affecting.loc = user + affecting.forceMove(user) attacker.stomach_contents.Add(affecting) qdel(src) From 05cad803bbcee8c595e1b3df7115bdccc3b30b32 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Thu, 2 May 2019 22:29:46 +0200 Subject: [PATCH 077/195] Allow admin access to airlock buttons --- code/game/machinery/doors/airlock_control.dm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm index 5a53381ef07..3b12c6f554a 100644 --- a/code/game/machinery/doors/airlock_control.dm +++ b/code/game/machinery/doors/airlock_control.dm @@ -255,10 +255,15 @@ return ..() +/obj/machinery/access_button/attack_ghost(mob/user) + if(user.can_advanced_admin_interact()) + return attack_hand(user) + /obj/machinery/access_button/attack_hand(mob/user) add_fingerprint(usr) - if(!allowed(user)) - to_chat(user, "Access Denied") + + if(!allowed(user) && !user.can_advanced_admin_interact()) + to_chat(user, "Access denied.") else if(radio_connection) var/datum/signal/signal = new From 5c2608330c736218b17fd33ee9ae7251edbc24d0 Mon Sep 17 00:00:00 2001 From: EvadableMoxie Date: Thu, 2 May 2019 20:17:50 -0400 Subject: [PATCH 078/195] Adds Nanotrasen Hospital ship, admin shuttle templates system. --- _maps/map_files/cyberiad/cyberiad.dmm | 648 ++++---- _maps/map_files/cyberiad/z2.dmm | 289 ++-- _maps/map_files/shuttles/admin_admin.dmm | 1094 +++++++++++++ _maps/map_files/shuttles/admin_hospital.dmm | 1589 +++++++++++++++++++ code/datums/shuttles.dm | 15 + code/game/area/Space Station 13 areas.dm | 2 +- code/modules/shuttle/shuttle.dm | 23 +- 7 files changed, 3196 insertions(+), 464 deletions(-) create mode 100644 _maps/map_files/shuttles/admin_admin.dmm create mode 100644 _maps/map_files/shuttles/admin_hospital.dmm diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 15154bd85d3..7d2cc96b6fe 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -50861,7 +50861,7 @@ icon_state = "diagonalWall3" }, /area/shuttle/administration) -"bPM" = ( +"bPN" = ( /obj/machinery/door/airlock/external{ id_tag = "s_docking_airlock"; name = "Shuttle Hatch"; @@ -50874,25 +50874,17 @@ id = "admin"; name = "administration shuttle"; roundstart_move = "admin_away"; + timid = 1; width = 18 }, /obj/docking_port/stationary{ dir = 2; - dwidth = 8; - height = 15; + dwidth = 9; + height = 18; id = "admin_home"; name = "port bay 1"; - width = 18 - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor4" - }, -/area/shuttle/administration) -"bPN" = ( -/obj/machinery/door/airlock/external{ - id_tag = "s_docking_airlock"; - name = "Shuttle Hatch"; - req_access_txt = "106" + timid = 1; + width = 19 }, /turf/simulated/shuttle/floor{ icon_state = "floor4" @@ -52067,21 +52059,6 @@ icon_state = "wall3" }, /area/shuttle/administration) -"bRH" = ( -/obj/machinery/door_control{ - id = "adminshuttleblast"; - name = "blast door control"; - pixel_x = -30; - req_access_txt = "106" - }, -/obj/machinery/light{ - icon_state = "tube1"; - dir = 8 - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor4" - }, -/area/shuttle/administration) "bRI" = ( /obj/structure/plasticflaps/mining, /obj/machinery/conveyor/east{ @@ -54159,28 +54136,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/engine/gravitygenerator) -"bVk" = ( -/obj/machinery/door_control{ - id = "adminshuttleblast"; - name = "blast door control"; - pixel_x = -30; - req_access_txt = "106" - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor4" - }, -/area/shuttle/administration) -"bVl" = ( -/obj/machinery/door/airlock/centcom{ - id_tag = "adminshuttle"; - name = "Workshop"; - opacity = 1; - req_access_txt = "105" - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor4" - }, -/area/shuttle/administration) "bVm" = ( /obj/machinery/light/spot{ tag = "icon-tube1 (WEST)"; @@ -55150,14 +55105,6 @@ icon_state = "floor4" }, /area/shuttle/administration) -"bWO" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 8; - icon_state = "propulsion_l"; - tag = "icon-propulsion_l (EAST)" - }, -/turf/simulated/shuttle/plating, -/area/shuttle/administration) "bWP" = ( /obj/machinery/door/airlock/external{ id_tag = "s_docking_airlock"; @@ -56132,14 +56079,6 @@ icon_state = "floor4" }, /area/shuttle/administration) -"bYu" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 8; - icon_state = "propulsion_r"; - tag = "icon-propulsion_r (EAST)" - }, -/turf/simulated/shuttle/plating, -/area/shuttle/administration) "bYv" = ( /turf/space, /turf/simulated/shuttle/wall{ @@ -57422,17 +57361,6 @@ "cam" = ( /turf/simulated/wall, /area/quartermaster/miningdock) -"can" = ( -/obj/structure/table/reinforced, -/obj/machinery/light/spot{ - tag = "icon-tube1 (NORTH)"; - icon_state = "tube1"; - dir = 1 - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor4" - }, -/area/shuttle/administration) "cao" = ( /obj/structure/filingcabinet, /turf/simulated/floor/plasteel, @@ -58236,23 +58164,6 @@ icon_state = "floor4" }, /area/shuttle/administration) -"cby" = ( -/obj/machinery/computer/shuttle/admin, -/turf/simulated/shuttle/floor{ - icon_state = "floor4" - }, -/area/shuttle/administration) -"cbz" = ( -/obj/machinery/door/airlock/centcom{ - id_tag = "adminshuttle"; - name = "Bridge"; - opacity = 1; - req_access_txt = "106" - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor4" - }, -/area/shuttle/administration) "cbA" = ( /obj/machinery/door/poddoor/shutters{ density = 0; @@ -59505,18 +59416,9 @@ icon_state = "floor3" }, /area/shuttle/administration) -"cdq" = ( -/obj/machinery/computer/card/centcom, -/turf/simulated/shuttle/floor{ - icon_state = "floor4" - }, -/area/shuttle/administration) "cdr" = ( -/obj/structure/table/reinforced, -/obj/machinery/door_control{ - id = "adminshuttleshutters"; - name = "remote shutter control"; - req_access_txt = "106" +/obj/machinery/computer/camera_advanced/shuttle_docker/admin{ + name = "NTV Argos shuttle navigation computer" }, /turf/simulated/shuttle/floor{ icon_state = "floor4" @@ -60290,17 +60192,6 @@ tag = "icon-cafeteria (NORTHEAST)" }, /area/crew_quarters/hor) -"ceT" = ( -/obj/machinery/door/airlock/centcom{ - id_tag = "adminshuttle"; - name = "Medbay"; - opacity = 1; - req_access_txt = "103" - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor4" - }, -/area/shuttle/administration) "ceU" = ( /obj/structure/shuttle/engine/propulsion, /turf/simulated/shuttle/plating, @@ -96572,6 +96463,12 @@ }, /turf/simulated/floor/plating, /area/toxins/mixing) +"gQL" = ( +/obj/machinery/computer/card, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) "hsy" = ( /obj/machinery/atmospherics/pipe/simple/insulated{ dir = 4 @@ -96626,6 +96523,35 @@ /area/toxins/launch{ name = "Toxins Launch Room" }) +"jnJ" = ( +/obj/machinery/light/spot{ + tag = "icon-tube1 (NORTH)"; + icon_state = "tube1"; + dir = 1 + }, +/obj/machinery/door_control{ + id = "adminshuttleblast"; + name = "Blast door control"; + pixel_x = -5; + pixel_y = 35; + req_access = list(101); + req_access_txt = "0" + }, +/obj/machinery/door_control{ + id = "adminshuttleshutters"; + name = "Shutter control"; + pixel_x = 5; + pixel_y = 35; + req_access = list(101); + req_access_txt = "0" + }, +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) "kOE" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ dir = 4 @@ -96639,22 +96565,90 @@ }, /turf/space, /area/space) +"oZV" = ( +/obj/machinery/door/airlock/centcom{ + id_tag = "adminshuttle"; + name = "Medbay"; + opacity = 1; + req_access_txt = "101" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"pwN" = ( +/obj/machinery/door_control{ + id = "adminshuttleblast"; + name = "blast door control"; + pixel_x = -30; + req_access_txt = "101" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) "pZO" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 10 }, /turf/space, /area/space) +"qgG" = ( +/obj/machinery/door/airlock/external{ + id_tag = "s_docking_airlock"; + name = "Shuttle Hatch"; + req_access_txt = "101" + }, +/obj/structure/fans/tiny, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) "qUv" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging, /turf/space, /area/space) +"rEw" = ( +/obj/machinery/computer/shuttle/admin{ + name = "NTV Argos shuttle console" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"rSv" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 8; + icon_state = "propulsion_l"; + tag = "icon-propulsion_l (EAST)" + }, +/turf/space, +/area/shuttle/administration) +"rYq" = ( +/obj/machinery/door/airlock/centcom{ + id_tag = "adminshuttle"; + name = "Bridge"; + opacity = 1; + req_access_txt = "101" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) "uxy" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 4 }, /turf/space, /area/space) +"uBM" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 8; + icon_state = "propulsion_r"; + tag = "icon-propulsion_r (EAST)" + }, +/turf/space, +/area/shuttle/administration) "uDK" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ tag = "icon-intact (NORTHEAST)"; @@ -96685,6 +96679,32 @@ }, /turf/space, /area/space) +"yeP" = ( +/obj/machinery/door_control{ + id = "adminshuttleblast"; + name = "blast door control"; + pixel_x = -30; + req_access_txt = "101" + }, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"ylx" = ( +/obj/machinery/door/airlock/centcom{ + id_tag = "adminshuttle"; + name = "Workshop"; + opacity = 1; + req_access_txt = "101" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) (1,1,1) = {" aaa @@ -105049,15 +105069,15 @@ aaa aaa aaa aaa +bPL +rSv +uBM +cae aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bPL +rSv +uBM +cae aaa aaa aaa @@ -105305,18 +105325,18 @@ aaa aaa aaa aaa -aaa bPL -bWO -bYu +bPI +bWG +bWG +bPI +bPI +bPI +bWG +bWG +bPI cae aaa -bPL -bWO -bYu -cae -aaa -aaa aaa aaa aaa @@ -105561,16 +105581,17 @@ aaa aaa aaa aaa -aaa bPL bPI -bWG -bWG +bVe +bRA +bRA +caf bPI -bPI -bPI -bWG -bWG +cdl +ceR +ceR +cig bPI cae aaa @@ -105679,7 +105700,6 @@ aaa aaa aaa aaa -aaa "} (36,1,1) = {" aaa @@ -105813,22 +105833,23 @@ bCd bCd bCd bAR -aaa -aaa +bjQ aaa aaa aaa bPL -bPI -bVe +bRu +bRA +bVf bRA bRA -caf +cag bPI -cdl +cdm ceR ceR -cig +ceR +ckd bPI cae aaa @@ -105936,7 +105957,6 @@ aaa aaa aaa aaa -aaa "} (37,1,1) = {" aaa @@ -106070,25 +106090,25 @@ bCc bDG bEK bAR -bjQ +aLd aaa aaa aaa -bPL -bRu -bRA -bVf -bRA -bRA -cag bPI -cdm -ceR -ceR -ceR -ckd +bRv +bRA +bVg +cuH +bRA +cah +bPI +cdp +ceR +ceR +ceR +ceR +clC bPI -cae aaa aaa aaa @@ -106327,24 +106347,24 @@ aAi bCb bCl bAR -aLd +aSd aaa aaa aaa bPI -bRv +bRw bRA -bVg +bVh cuH bRA -cah +cai bPI -cdp +cdl ceR +cgw +cih ceR -ceR -ceR -clC +clD bPI aaa aaa @@ -106589,19 +106609,19 @@ aaa aaa aaa bPI -bRw -bRA -bVh +bRx +bTl +bVi cuH bRA -cai +bRA bPI -cdl +cdo ceR -cgw -cih -ceR -clD +cgx +cii +ckf +clE bPI aaa aaa @@ -106842,23 +106862,23 @@ bCb bEL bAR aSd -aaa -aaa -aaa +aSd +aSd +aSd bPI -bRx -bTl -bVi -cuH -bRA -bRA -bPI -cdo -ceR -cgx -cii -ckf -clE +bRG +bRG +bRG +bRG +bYt +bRG +bRG +bRG +oZV +bRG +bRG +bRG +bRG bPI aaa aaa @@ -107099,23 +107119,23 @@ bCb bEL bAR aSd -aSd -aSd -aSd -bPI -bRG -bRG -bRG -bRG -bYt -bRG -bRG -bRG -ceT -bRG -bRG -bRG -bRG +bGm +bLY +bKp +qgG +yeP +bTn +pwN +bRA +bRA +bRA +bTo +bRA +bRA +bRA +bRA +bRA +bRA bPI aaa aaa @@ -107356,23 +107376,23 @@ bCb bEL bAR aSd -bGm -bLY +bGl +bLX bKp bPN -bRH +bRA bTn -bVk -bRA -bRA -bRA -bTo bRA bRA bRA bRA bRA bRA +bRA +bRA +bRA +bRA +clF bPI aaa aaa @@ -107613,23 +107633,23 @@ bCb bEL bAR aSd -bGl -bLX bKp -bPM -bRA -bTn -bRA -bRA -bRA -bRA -bRA -bRA -bRA -bRA -bRA -bRA -clF +bKp +bOb +bPI +bRG +bRG +ylx +bRG +bRG +bRG +rYq +bRG +bRG +bRG +cik +bRG +bRG bPI aaa aaa @@ -107870,23 +107890,23 @@ bCb bAR bER aSd -bKp -bKp -bOb +aMd +bLZ +aSd bPI -bRG -bRG -bVl -bRG -bRG -bRG -cbz -bRG -bRG -bRG -cik -bRG -bRG +bRB +bTo +bRA +bWI +bPI +gQL +bRA +bRA +bPI +bRA +bRA +ckg +clG bPI aaa aaa @@ -108131,19 +108151,19 @@ aMd bLZ aSd bPI -bRB -bTo +bRC bRA -bWI +bRA +bWJ +bPI +jnJ +cbx +cbx bPI bRA bRA bRA -bPI -bRA -bRA -ckg -clG +clI bPI aaa aaa @@ -108388,19 +108408,19 @@ aMd bLZ aSd bPI -bRC +bRD bRA bRA -bWJ +bWK bPI -can -cbx +cak +rEw cdr bPI bRA bRA bRA -clI +bRA bPI aaa aaa @@ -108644,21 +108664,21 @@ aSd aMd bMa bjQ +bPR bPI -bRD -bRA -bRA -bWK -bPI -cak -cby -cdq -bPI -bRA -bRA +bTp bRA bRA bPI +car +cbA +cds +bPI +cgz +cio +ckj +bPI +bYv aaa aaa aaa @@ -108901,21 +108921,21 @@ bLs bmS bMb aLd -bPR +aaa +bPI +bWL +bRA +bWM +bPI +aaa +aaa +aaa bPI -bTp bRA bRA +ckh bPI -car -cbA -cds -bPI -cgz -cio -ckj -bPI -bYv +aaa aaa aaa aaa @@ -109159,19 +109179,19 @@ aSf bLZ aSd aaa +bPR bPI -bWL -bRA -bWM +bTl +bWN bPI aaa aaa aaa bPI -bRA -bRA -ckh +cgA +cil bPI +bYv aaa aaa aaa @@ -109416,22 +109436,22 @@ aSf bMc aSd aaa +aaa bPR -bPI -bTl -bWN -bPI -aaa -aaa -aaa -bPI -cgA -cil -bPI +bRG +bRG bYv aaa aaa aaa +bPR +bRG +bRG +bYv +aaa +aaa +aaa +aaa aaa aaa aaa @@ -109674,17 +109694,17 @@ bCf bCf aaa aaa -bPR -bRG -bRG -bYv aaa aaa aaa -bPR -bRG -bRG -bYv +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index ee6ca15f83d..190f9ef72ee 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -8030,11 +8030,12 @@ "tH" = ( /obj/docking_port/stationary{ dir = 2; - dwidth = 8; - height = 15; + dwidth = 9; + height = 18; id = "admin_away"; name = "centcom bay 1"; - width = 18 + timid = 1; + width = 19 }, /turf/space, /area/space) @@ -35340,9 +35341,9 @@ wK wK wK wK -aN -aN -aN +wK +wK +wK aN aN aN @@ -35581,21 +35582,24 @@ aN aN cp cj -yt -yt -yt -cr aN aN -cr -yt -cr aN aN -cr -yt -yt -yt +aN +aN +aN +aN +aN +aN +aN +aN +aN +aN +aN +aN +aN +aN wK aN aN @@ -35638,9 +35642,6 @@ aN aN aN aN -aN -aN -aN jZ kz kM @@ -35838,9 +35839,6 @@ aN aN cp cj -yt -yt -cr aN aN aN @@ -35850,9 +35848,15 @@ aN aN aN aN -cr -yt -yt +aN +aN +aN +aN +aN +aN +aN +aN +aN wK aN aN @@ -35918,9 +35922,6 @@ aN aN aN aN -aN -aN -aN "} (91,1,1) = {" aN @@ -36095,8 +36096,6 @@ aN aN cp cj -yt -cr aN aN aN @@ -36108,8 +36107,13 @@ aN aN aN aN -cr -yt +aN +aN +aN +aN +aN +aN +aN wK aN aN @@ -36152,9 +36156,6 @@ aN aN aN aN -aN -aN -aN jU kw kE @@ -36352,7 +36353,6 @@ aN aN cp cj -cr aN aN aN @@ -36366,7 +36366,11 @@ aN aN aN aN -cr +aN +aN +aN +aN +aN wK aN aN @@ -36408,9 +36412,6 @@ aN aN aN aN -aN -aN -aN jQ jW kD @@ -36624,6 +36625,9 @@ aN aN aN aN +aN +aN +aN wK aN aN @@ -36665,9 +36669,6 @@ aN aN aN aN -aN -aN -aN jP kt kx @@ -36881,6 +36882,9 @@ aN aN aN aN +aN +aN +aN wK aN aN @@ -36922,9 +36926,6 @@ aN aN aN aN -aN -aN -aN jS kv kx @@ -37138,6 +37139,9 @@ aN aN aN aN +aN +aN +aN wK aN aN @@ -37179,9 +37183,6 @@ aN aN aN aN -aN -aN -aN jR ku kx @@ -37395,6 +37396,9 @@ aN aN aN aN +aN +aN +aN wK aN aN @@ -37436,9 +37440,6 @@ aN aN aN aN -aN -aN -aN jT ka kA @@ -37652,6 +37653,9 @@ aN aN aN aN +aN +aN +aN wK aN aN @@ -37694,9 +37698,6 @@ aN aN aN aN -aN -aN -aN jZ kz kM @@ -37909,6 +37910,9 @@ aN aN aN aN +aN +aN +aN wK aN aN @@ -37974,9 +37978,6 @@ aN aN aN aN -aN -aN -aN "} (99,1,1) = {" aN @@ -38166,6 +38167,9 @@ aN aN aN aN +aN +aN +aN wK aN aN @@ -38231,9 +38235,6 @@ aN aN aN aN -aN -aN -aN "} (100,1,1) = {" aN @@ -38423,6 +38424,9 @@ aN aN aN aN +aN +aN +aN wK aN aN @@ -38488,9 +38492,6 @@ aN aN aN aN -aN -aN -aN "} (101,1,1) = {" aN @@ -38680,6 +38681,9 @@ aN aN aN aN +aN +aN +aN wK aN aN @@ -38713,9 +38717,6 @@ aN aN aN aN -aN -aN -aN mr mr mr @@ -38937,6 +38938,9 @@ aN aN aN aN +aN +aN +aN wK aN aN @@ -38970,9 +38974,6 @@ aN aN aN aN -aN -aN -aN mr aN aN @@ -39179,7 +39180,6 @@ qo qs tx wK -cr aN aN aN @@ -39193,7 +39193,11 @@ aN aN aN aN -cr +aN +aN +aN +aN +aN wK aN aN @@ -39227,9 +39231,6 @@ aN aN aN aN -aN -aN -aN mr aN aN @@ -39436,21 +39437,24 @@ qo qs tA wK -yt aN aN aN aN aN -yt -yt -yt aN aN aN aN aN -yt +aN +aN +aN +aN +aN +aN +aN +aN wK aN aN @@ -39484,9 +39488,6 @@ aN aN aN aN -aN -aN -aN mr aN aN @@ -39693,21 +39694,24 @@ tq tv tz wK -yt -cr aN aN aN aN -yt -yt -yt aN aN aN aN -cr -yt +aN +aN +aN +aN +aN +aN +aN +aN +aN +aN wK aN aN @@ -39741,9 +39745,6 @@ aN aN aN aN -aN -aN -aN mr aN aN @@ -39950,21 +39951,24 @@ wK wK wK wK -yt -yt -cr aN aN -cr -yt -yt -yt -cr aN aN -cr -yt -yt +aN +aN +aN +aN +aN +aN +aN +aN +aN +aN +aN +aN +aN +aN wK aN aN @@ -39998,9 +40002,6 @@ aN aN aN aN -aN -aN -aN mr aN aN @@ -40207,22 +40208,6 @@ aN aN aN wK -wK -wK -wK -wK -wK -wK -wK -wK -wK -wK -wK -wK -wK -wK -wK -wK aN aN aN @@ -40241,6 +40226,22 @@ aN aN aN aN +wK +aN +aN +aN +aN +aN +aN +aN +aN +aN +aN +aN +aN +aN +aN +aN aN aN aN @@ -40463,26 +40464,26 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +wK +wK +wK +wK +wK +wK +wK +wK +wK +wK +wK +wK +wK +wK +wK +wK +wK +wK +wK +wK aN aN aN diff --git a/_maps/map_files/shuttles/admin_admin.dmm b/_maps/map_files/shuttles/admin_admin.dmm new file mode 100644 index 00000000000..36badb71d1b --- /dev/null +++ b/_maps/map_files/shuttles/admin_admin.dmm @@ -0,0 +1,1094 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/space, +/area/space) +"ab" = ( +/turf/space, +/turf/simulated/shuttle/wall{ + dir = 8; + icon_state = "diagonalWall3" + }, +/area/shuttle/administration) +"ac" = ( +/turf/simulated/shuttle/wall{ + icon_state = "wall3" + }, +/area/shuttle/administration) +"ad" = ( +/obj/machinery/door/airlock/external{ + id_tag = "s_docking_airlock"; + name = "Shuttle Hatch"; + req_access_txt = "101" + }, +/obj/structure/fans/tiny, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"ae" = ( +/obj/machinery/door/airlock/external{ + id_tag = "s_docking_airlock"; + name = "Shuttle Hatch"; + req_access_txt = "101" + }, +/obj/docking_port/mobile{ + dir = 2; + dwidth = 8; + height = 15; + id = "admin"; + name = "admin"; + roundstart_move = null; + timid = 1; + width = 18 + }, +/obj/structure/fans/tiny, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"af" = ( +/turf/space, +/turf/simulated/shuttle/wall{ + dir = 1; + icon_state = "diagonalWall3" + }, +/area/shuttle/administration) +"ag" = ( +/obj/machinery/vending/boozeomat, +/turf/simulated/shuttle/wall{ + icon_state = "wall3" + }, +/area/shuttle/administration) +"ah" = ( +/obj/structure/table/reinforced, +/obj/machinery/chem_dispenser/beer, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"ai" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/drinkingglasses, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"aj" = ( +/obj/structure/table/reinforced, +/obj/machinery/chem_dispenser/soda, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"ak" = ( +/turf/simulated/shuttle/wall{ + dir = 4; + icon_state = "wall3" + }, +/area/shuttle/administration) +"al" = ( +/obj/machinery/door_control{ + id = "adminshuttleblast"; + name = "blast door control"; + pixel_x = -30; + req_access_txt = "101" + }, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"am" = ( +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"an" = ( +/obj/machinery/cell_charger, +/obj/structure/table, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"ao" = ( +/obj/item/storage/toolbox/mechanical, +/obj/item/multitool, +/obj/structure/table, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"ap" = ( +/obj/structure/table, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"aq" = ( +/obj/machinery/light/spot{ + tag = "icon-tube1 (EAST)"; + icon_state = "tube1"; + dir = 4 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"ar" = ( +/obj/machinery/door/poddoor/preopen{ + id_tag = "adminshuttleblast"; + name = "Blast Doors"; + req_access_txt = "101" + }, +/obj/machinery/door/airlock/centcom{ + id_tag = "adminshuttle"; + name = "General Access"; + opacity = 1; + req_access_txt = "101" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"as" = ( +/obj/machinery/light/spot{ + tag = "icon-tube1 (WEST)"; + icon_state = "tube1"; + dir = 8 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"at" = ( +/obj/item/stack/sheet/metal, +/obj/structure/table, +/obj/item/stack/sheet/glass{ + pixel_x = 4; + pixel_y = 4 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"au" = ( +/obj/machinery/mecha_part_fabricator/upgraded, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"av" = ( +/obj/machinery/kitchen_machine/microwave/upgraded, +/obj/structure/table, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"aw" = ( +/obj/machinery/door/window/northright{ + name = "bar" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"ax" = ( +/obj/structure/table, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"ay" = ( +/obj/item/ashtray/glass, +/obj/structure/table, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"az" = ( +/obj/item/storage/fancy/cigarettes/dromedaryco, +/obj/item/lighter/zippo{ + pixel_x = 5 + }, +/obj/structure/table, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"aA" = ( +/obj/machinery/door_control{ + id = "adminshuttleblast"; + name = "blast door control"; + pixel_x = -30; + req_access_txt = "101" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"aB" = ( +/obj/machinery/door/airlock/centcom{ + id_tag = "adminshuttle"; + name = "Workshop"; + opacity = 1; + req_access_txt = "101" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"aC" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 8; + icon_state = "propulsion_l"; + tag = "icon-propulsion_l (EAST)" + }, +/turf/space, +/area/shuttle/administration) +"aD" = ( +/obj/structure/shuttle/engine/heater{ + tag = "icon-heater (WEST)"; + icon_state = "heater"; + dir = 8 + }, +/obj/structure/window/plasmareinforced{ + color = "#FF0000"; + dir = 4 + }, +/turf/simulated/shuttle/wall{ + icon_state = "wall3" + }, +/area/shuttle/administration) +"aE" = ( +/obj/structure/chair/stool/bar, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"aF" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"aG" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"aH" = ( +/obj/machinery/recharge_station/upgraded, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"aI" = ( +/obj/machinery/autolathe/upgraded{ + hacked = 1 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"aJ" = ( +/obj/structure/dispenser, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"aK" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 8; + icon_state = "propulsion_r"; + tag = "icon-propulsion_r (EAST)" + }, +/turf/space, +/area/shuttle/administration) +"aL" = ( +/obj/machinery/door/airlock/public/glass, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"aM" = ( +/turf/space, +/turf/simulated/shuttle/wall{ + dir = 4; + icon_state = "diagonalWall3" + }, +/area/shuttle/administration) +"aN" = ( +/turf/space, +/turf/simulated/shuttle/wall{ + icon_state = "diagonalWall3" + }, +/area/shuttle/administration) +"aO" = ( +/obj/machinery/vending/snack, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"aP" = ( +/obj/machinery/vending/cola, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"aQ" = ( +/obj/machinery/vending/coffee, +/obj/machinery/light/spot, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"aR" = ( +/obj/machinery/vending/cigarette, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"aS" = ( +/obj/machinery/computer/card, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"aT" = ( +/obj/machinery/computer/communications, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"aU" = ( +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 4; + icon_state = "open"; + id_tag = "adminshuttleshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/shuttle/window{ + tag = "icon-window5_end (WEST)"; + icon = 'icons/turf/shuttle.dmi'; + icon_state = "window5_end"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/shuttle/administration) +"aV" = ( +/obj/machinery/light/spot{ + tag = "icon-tube1 (NORTH)"; + icon_state = "tube1"; + dir = 1 + }, +/obj/machinery/door_control{ + id = "adminshuttleblast"; + name = "Blast door control"; + pixel_x = -5; + pixel_y = 35; + req_access = list(101); + req_access_txt = "0" + }, +/obj/machinery/door_control{ + id = "adminshuttleshutters"; + name = "Shutter control"; + pixel_x = 5; + pixel_y = 35; + req_access = list(101); + req_access_txt = "0" + }, +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"aW" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"aX" = ( +/obj/machinery/computer/shuttle/admin{ + name = "NTV Argos shuttle console" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"aY" = ( +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 4; + icon_state = "open"; + id_tag = "adminshuttleshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/shuttle/window{ + dir = 4; + icon = 'icons/turf/shuttle.dmi'; + icon_state = "window5_mid"; + tag = "icon-window5 (EAST)" + }, +/turf/simulated/floor/plating, +/area/shuttle/administration) +"aZ" = ( +/obj/machinery/dna_scannernew/upgraded, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"ba" = ( +/obj/machinery/computer/cloning, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bb" = ( +/obj/machinery/clonepod/upgraded, +/obj/machinery/light/spot{ + tag = "icon-tube1 (NORTH)"; + icon_state = "tube1"; + dir = 1 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bc" = ( +/obj/machinery/computer/scan_consolenew, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bd" = ( +/obj/machinery/door/airlock/centcom{ + id_tag = "adminshuttle"; + name = "Bridge"; + opacity = 1; + req_access_txt = "101" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"be" = ( +/obj/machinery/computer/camera_advanced/shuttle_docker/admin{ + name = "NTV Argos shuttle navigation computer" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"bf" = ( +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 4; + icon_state = "open"; + id_tag = "adminshuttleshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/shuttle/window{ + tag = "icon-window5_end (EAST)"; + icon = 'icons/turf/shuttle.dmi'; + icon_state = "window5_end"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/shuttle/administration) +"bg" = ( +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bh" = ( +/obj/machinery/door/airlock/centcom{ + id_tag = "adminshuttle"; + name = "Medbay"; + opacity = 1; + req_access_txt = "101" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"bi" = ( +/obj/machinery/bodyscanner, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bj" = ( +/obj/machinery/body_scanconsole, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bk" = ( +/obj/structure/window/plasmareinforced{ + color = "#FF0000"; + dir = 8 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"bl" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/light/spot{ + tag = "icon-tube1 (EAST)"; + icon_state = "tube1"; + dir = 4 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"bm" = ( +/obj/machinery/sleeper/upgraded{ + dir = 4 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bn" = ( +/obj/machinery/chem_master, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bo" = ( +/obj/machinery/chem_dispenser, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bp" = ( +/obj/machinery/door/airlock/centcom{ + id_tag = "adminshuttle"; + name = "Holding Cell"; + opacity = 1; + req_access_txt = "104" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"bq" = ( +/obj/machinery/door/window/brigdoor/westleft{ + color = "#d70000"; + req_access_txt = "104" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"br" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"bs" = ( +/obj/machinery/iv_drip, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bt" = ( +/obj/machinery/light/spot{ + tag = "icon-tube1 (EAST)"; + icon_state = "tube1"; + dir = 4 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bu" = ( +/obj/structure/table, +/obj/item/storage/box/handcuffs, +/obj/machinery/light/spot{ + tag = "icon-tube1 (WEST)"; + icon_state = "tube1"; + dir = 8 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"bv" = ( +/obj/structure/window/plasmareinforced{ + color = "#FF0000"; + dir = 8 + }, +/obj/structure/chair{ + dir = 1 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"bw" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"bx" = ( +/obj/structure/table, +/obj/item/bonegel, +/obj/item/bonesetter, +/obj/item/hemostat, +/obj/item/cautery, +/obj/item/surgicaldrill, +/obj/item/circular_saw, +/obj/item/scalpel, +/obj/item/retractor, +/obj/item/FixOVein, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"by" = ( +/obj/machinery/optable, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bz" = ( +/obj/machinery/vending/medical, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bA" = ( +/obj/machinery/light, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"bB" = ( +/obj/structure/table, +/obj/item/storage/lockbox/mindshield, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) +"bC" = ( +/obj/structure/table, +/obj/item/storage/box/chemimp{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/item/storage/box/trackimp, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/administration) + +(1,1,1) = {" +aa +aa +aa +ab +aC +aK +aN +aa +ab +aC +aK +aN +aa +aa +aa +aa +aa +aa +"} +(2,1,1) = {" +aa +aa +ab +ac +aD +aD +ac +ac +ac +aD +aD +ac +aN +aa +aa +aa +aa +aa +"} +(3,1,1) = {" +aa +ab +ac +av +am +am +aO +ac +aZ +bg +bg +bm +ac +aN +aa +aa +aa +aa +"} +(4,1,1) = {" +ab +ag +am +aw +am +am +aP +ac +ba +bg +bg +bg +bs +ac +aN +aa +aa +aa +"} +(5,1,1) = {" +ac +ah +am +ax +aE +am +aQ +ac +bb +bg +bg +bg +bg +bx +ac +aa +aa +aa +"} +(6,1,1) = {" +ac +ai +am +ay +aE +am +aR +ac +aZ +bg +bi +bn +bg +by +ac +aa +aa +aa +"} +(7,1,1) = {" +ac +aj +aq +az +aE +am +am +ac +bc +bg +bj +bo +bt +bz +ac +aa +aa +aa +"} +(8,1,1) = {" +ac +ak +ak +ak +ak +aL +ak +ak +ak +bh +ak +ak +ak +ak +ac +aa +aa +aa +"} +(9,1,1) = {" +ad +al +ar +aA +am +am +am +as +am +am +am +am +am +am +ac +aa +aa +aa +"} +(10,1,1) = {" +ae +am +ar +am +am +am +am +am +am +am +am +am +am +bA +ac +aa +aa +aa +"} +(11,1,1) = {" +ac +ak +ak +aB +ak +ak +ak +bd +ak +ak +ak +bp +ak +ak +ac +aa +aa +aa +"} +(12,1,1) = {" +ac +an +as +am +aF +ac +aS +am +am +ac +am +am +bu +bB +ac +aa +aa +aa +"} +(13,1,1) = {" +ac +ao +am +am +aG +ac +aV +aW +aW +ac +am +am +am +bC +ac +aa +aa +aa +"} +(14,1,1) = {" +ac +ap +am +am +aH +ac +aT +aX +be +ac +am +am +am +am +ac +aa +aa +aa +"} +(15,1,1) = {" +af +ac +at +am +am +ac +aU +aY +bf +ac +bk +bq +bv +ac +aM +aa +aa +aa +"} +(16,1,1) = {" +aa +ac +au +am +aI +ac +aa +aa +aa +ac +am +am +bw +ac +aa +aa +aa +aa +"} +(17,1,1) = {" +aa +af +ac +aq +aJ +ac +aa +aa +aa +ac +bl +br +ac +aM +aa +aa +aa +aa +"} +(18,1,1) = {" +aa +aa +af +ak +ak +aM +aa +aa +aa +af +ak +ak +aM +aa +aa +aa +aa +aa +"} +(19,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} diff --git a/_maps/map_files/shuttles/admin_hospital.dmm b/_maps/map_files/shuttles/admin_hospital.dmm new file mode 100644 index 00000000000..2c2d31a0bb4 --- /dev/null +++ b/_maps/map_files/shuttles/admin_hospital.dmm @@ -0,0 +1,1589 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/space, +/area/space) +"ab" = ( +/turf/simulated/shuttle/wall{ + icon_state = "swall_s6"; + dir = 2 + }, +/area/shuttle/administration) +"ac" = ( +/turf/simulated/shuttle/wall{ + icon_state = "swall12"; + dir = 2 + }, +/area/shuttle/administration) +"ad" = ( +/obj/structure/shuttle/window{ + tag = "icon-window5_end"; + icon = 'icons/turf/shuttle.dmi'; + icon_state = "window5_end"; + dir = 2 + }, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 1; + icon_state = "open"; + id_tag = "Asclshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/turf/space, +/area/shuttle/administration) +"ae" = ( +/obj/structure/shuttle/window{ + tag = "icon-window5_mid"; + icon = 'icons/turf/shuttle.dmi'; + icon_state = "window5_mid"; + dir = 2 + }, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 1; + icon_state = "open"; + id_tag = "Asclshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/turf/space, +/area/shuttle/administration) +"af" = ( +/obj/structure/shuttle/window{ + tag = "icon-window5_end (NORTH)"; + icon = 'icons/turf/shuttle.dmi'; + icon_state = "window5_end"; + dir = 1 + }, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 1; + icon_state = "open"; + id_tag = "Asclshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/turf/space, +/area/shuttle/administration) +"ag" = ( +/turf/simulated/shuttle/wall{ + icon_state = "swall14"; + dir = 2 + }, +/area/shuttle/administration) +"ah" = ( +/obj/structure/sign/redcross{ + desc = "The Star of Life, a symbol of Medical Aid."; + icon_state = "lifestar"; + name = "NHV Asclepius" + }, +/turf/simulated/shuttle/wall{ + dir = 2; + icon_state = "swall8"; + tag = "icon-swall12" + }, +/area/shuttle/administration) +"ai" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/external, +/obj/machinery/door/poddoor{ + density = 0; + icon_state = "open"; + id_tag = "asclblast"; + name = "Blast Door"; + opacity = 0 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"aj" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/external, +/obj/docking_port/mobile{ + dir = 2; + dwidth = 9; + height = 18; + id = "admin"; + name = "hospital"; + roundstart_move = "cc_bay_1"; + timid = 1; + width = 19 + }, +/obj/machinery/door/poddoor{ + density = 0; + icon_state = "open"; + id_tag = "asclblast"; + name = "Blast Door"; + opacity = 0 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"ak" = ( +/obj/structure/sign/redcross{ + desc = "The Star of Life, a symbol of Medical Aid."; + icon_state = "lifestar"; + name = "NHV Asclepius" + }, +/turf/simulated/shuttle/wall{ + tag = "icon-swall14"; + icon_state = "swall4"; + dir = 2 + }, +/area/shuttle/administration) +"al" = ( +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 1; + icon_state = "open"; + id_tag = "Asclshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/shuttle/window{ + tag = "icon-window5_mid"; + icon = 'icons/turf/shuttle.dmi'; + icon_state = "window5_mid"; + dir = 2 + }, +/turf/space, +/area/shuttle/administration) +"am" = ( +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 1; + icon_state = "open"; + id_tag = "Asclshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/obj/structure/shuttle/window{ + tag = "icon-window5_end (NORTH)"; + icon = 'icons/turf/shuttle.dmi'; + icon_state = "window5_end"; + dir = 1 + }, +/turf/space, +/area/shuttle/administration) +"an" = ( +/turf/simulated/shuttle/wall{ + icon_state = "swall_s10"; + dir = 2 + }, +/area/shuttle/administration) +"ao" = ( +/turf/simulated/shuttle/wall{ + tag = "icon-swall3"; + icon_state = "swall3"; + dir = 2 + }, +/area/shuttle/administration) +"ap" = ( +/obj/machinery/chem_master, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"aq" = ( +/obj/machinery/chem_dispenser, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"ar" = ( +/obj/machinery/chem_heater, +/obj/machinery/light{ + tag = "icon-tube1 (NORTH)"; + icon_state = "tube1"; + dir = 1 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"as" = ( +/obj/structure/closet/secure_closet/reagents, +/obj/item/storage/bag/chemistry, +/obj/item/storage/bag/chemistry, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"at" = ( +/obj/structure/closet/secure_closet/chemical, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"au" = ( +/obj/structure/sign/chemistry{ + pixel_y = 1 + }, +/turf/simulated/shuttle/wall{ + icon_state = "swall3"; + dir = 2 + }, +/area/shuttle/administration) +"av" = ( +/obj/structure/chair{ + tag = "icon-chair (EAST)"; + icon_state = "chair"; + dir = 4 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"aw" = ( +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"ax" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/camera{ + dir = 8; + icon_state = "camera"; + name = "NHV Asclepius Lobby"; + network = list("NHV Asclepius") + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"ay" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/glass/beaker/cryoxadone, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"az" = ( +/obj/machinery/clonepod{ + biomass = 300 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"aA" = ( +/obj/machinery/computer/cloning, +/obj/machinery/light{ + tag = "icon-tube1 (NORTH)"; + icon_state = "tube1"; + dir = 1 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"aB" = ( +/obj/machinery/dna_scannernew, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"aC" = ( +/obj/machinery/atmospherics/unary/cryo_cell, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"aD" = ( +/turf/simulated/shuttle/wall{ + icon_state = "swall7"; + dir = 2 + }, +/area/shuttle/administration) +"aE" = ( +/turf/simulated/shuttle/wall{ + icon_state = "swall3"; + dir = 2 + }, +/area/shuttle/administration) +"aF" = ( +/obj/structure/reagent_dispensers/fueltank/chem{ + pixel_x = -32 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"aG" = ( +/obj/structure/chair/office/light{ + dir = 1 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"aH" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/westleft{ + req_access_txt = "33" + }, +/obj/structure/window/reinforced{ + dir = 1; + layer = 2.9 + }, +/obj/structure/window/reinforced, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"aI" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"aJ" = ( +/obj/structure/sign/nosmoking_2, +/turf/simulated/shuttle/wall{ + tag = "icon-swall1"; + icon_state = "swall1"; + dir = 2 + }, +/area/shuttle/administration) +"aK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"aL" = ( +/obj/structure/shuttle/engine/heater{ + icon_state = "heater"; + dir = 4 + }, +/obj/structure/window/plasmareinforced{ + dir = 8 + }, +/turf/unsimulated/floor, +/area/shuttle/administration) +"aM" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 4; + icon_state = "propulsion" + }, +/turf/space, +/area/shuttle/administration) +"aN" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; + name = "Chemistry Cleaner" + }, +/obj/item/reagent_containers/glass/bucket, +/obj/item/reagent_containers/glass/bucket, +/obj/item/reagent_containers/glass/bucket, +/obj/item/reagent_containers/glass/bucket, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"aO" = ( +/obj/structure/closet/crate/can, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"aP" = ( +/obj/structure/shuttle/window, +/obj/structure/grille, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"aQ" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"aR" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"aS" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/syringes, +/obj/item/storage/box/beakers, +/obj/machinery/reagentgrinder, +/obj/machinery/camera{ + dir = 4; + icon_state = "camera"; + name = "NHV Asclepius Chemistry"; + network = list("NHV Asclepius") + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"aT" = ( +/obj/machinery/door/airlock/shuttle/glass{ + name = "Chemistry"; + req_access_txt = "33" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"aU" = ( +/obj/machinery/door/airlock/shuttle/glass, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"aV" = ( +/obj/machinery/camera{ + dir = 8; + icon_state = "camera"; + name = "NHV Asclepius Cloning"; + network = list("NHV Asclepius") + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"aW" = ( +/turf/simulated/shuttle/wall{ + icon_state = "swall_s9"; + dir = 2 + }, +/area/shuttle/administration) +"aX" = ( +/obj/machinery/iv_drip, +/obj/item/reagent_containers/iv_bag, +/obj/structure/reagent_dispensers/fueltank/chem{ + pixel_x = -32 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"aY" = ( +/obj/structure/chair/office/light, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"aZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"ba" = ( +/obj/machinery/chem_heater, +/obj/machinery/light, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bb" = ( +/obj/machinery/status_display, +/turf/simulated/shuttle/wall{ + icon_state = "swall3"; + dir = 2 + }, +/area/shuttle/administration) +"bc" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bd" = ( +/obj/machinery/vending/coffee, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"be" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/storage/box/gloves, +/obj/item/storage/box/masks, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bf" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bg" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid, +/obj/item/storage/firstaid, +/obj/item/storage/firstaid/adv, +/obj/item/storage/firstaid/adv, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bh" = ( +/obj/structure/table/reinforced, +/obj/item/storage/belt/medical, +/obj/item/storage/belt/medical, +/obj/item/storage/belt/medical, +/obj/item/clothing/glasses/hud/health, +/obj/item/clothing/glasses/hud/health, +/obj/item/clothing/glasses/hud/health, +/obj/machinery/light, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bi" = ( +/obj/machinery/atmospherics/unary/cold_sink/freezer{ + dir = 1 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bj" = ( +/obj/machinery/smartfridge/medbay, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bk" = ( +/turf/simulated/shuttle/wall{ + tag = "icon-swall13"; + icon_state = "swall13"; + dir = 2 + }, +/area/shuttle/administration) +"bl" = ( +/obj/structure/shuttle/window, +/obj/structure/grille, +/turf/simulated/shuttle/wall{ + dir = 2; + icon_state = "swall8"; + tag = "icon-swall12" + }, +/area/shuttle/administration) +"bm" = ( +/obj/structure/shuttle/window, +/obj/structure/grille, +/turf/simulated/shuttle/wall{ + tag = "icon-swall14"; + icon_state = "swall4"; + dir = 2 + }, +/area/shuttle/administration) +"bn" = ( +/turf/simulated/shuttle/wall{ + tag = "icon-swall15"; + icon_state = "swall15"; + dir = 2 + }, +/area/shuttle/administration) +"bo" = ( +/obj/structure/shuttle/window{ + tag = "icon-window5_end (WEST)"; + icon = 'icons/turf/shuttle.dmi'; + icon_state = "window5_end"; + dir = 8 + }, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 8; + icon_state = "open"; + id_tag = "Asclshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/turf/space, +/area/shuttle/administration) +"bp" = ( +/obj/machinery/computer/pandemic, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bq" = ( +/obj/machinery/camera{ + c_tag = "Tech Storage"; + dir = 2; + name = "NHV Asclepius Command Center"; + network = list("NHV Asclepius") + }, +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/door_control{ + dir = 4; + id = "Asclshutters"; + name = "remote shutter control"; + pixel_x = -5; + pixel_y = 35; + req_access = list(101); + req_access_txt = "0" + }, +/obj/machinery/keycard_auth{ + pixel_y = 24 + }, +/obj/machinery/door_control{ + dir = 2; + id = "asclblast"; + name = "blast door control"; + pixel_x = 5; + pixel_y = 35; + pixel_z = 0; + req_access = list(101); + req_access_txt = "0" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"br" = ( +/obj/machinery/recharger/wallcharger{ + pixel_y = 25 + }, +/obj/machinery/recharger/wallcharger{ + pixel_y = 35 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bs" = ( +/turf/simulated/shuttle/wall{ + tag = "icon-swall1"; + icon_state = "swall1"; + dir = 2 + }, +/area/shuttle/administration) +"bt" = ( +/obj/structure/sink{ + icon_state = "sink"; + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bu" = ( +/obj/machinery/light{ + tag = "icon-tube1 (NORTH)"; + icon_state = "tube1"; + dir = 1 + }, +/obj/structure/closet/walllocker/emerglocker{ + pixel_y = 32 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bv" = ( +/obj/machinery/vending/medical, +/obj/machinery/light{ + tag = "icon-tube1 (NORTH)"; + icon_state = "tube1"; + dir = 1 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bw" = ( +/obj/structure/table/tray, +/obj/item/stack/medical/bruise_pack/advanced, +/obj/item/scalpel, +/obj/item/hemostat, +/obj/item/retractor, +/obj/item/circular_saw, +/obj/item/bonegel, +/obj/item/bonesetter, +/obj/item/cautery, +/obj/item/FixOVein, +/obj/item/surgicaldrill, +/obj/item/storage/backpack/duffel/medical, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bx" = ( +/obj/machinery/optable, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"by" = ( +/obj/machinery/computer/operating, +/obj/machinery/light{ + tag = "icon-tube1 (NORTH)"; + icon_state = "tube1"; + dir = 1 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bz" = ( +/obj/structure/closet/secure_closet/medical3, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bA" = ( +/obj/structure/closet/secure_closet/medical2, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bB" = ( +/obj/structure/shuttle/window{ + dir = 4; + icon = 'icons/turf/shuttle.dmi'; + icon_state = "window5_mid"; + tag = "icon-window5 (EAST)" + }, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 8; + icon_state = "open"; + id_tag = "Asclshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/turf/space, +/area/shuttle/administration) +"bC" = ( +/obj/machinery/computer/shuttle/admin{ + name = "NHV Asclepius shuttle console" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bD" = ( +/obj/machinery/door/airlock/command{ + name = "Command Center"; + req_access = null; + req_access_txt = "19" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bE" = ( +/obj/structure/closet/crate/freezer, +/obj/item/reagent_containers/iv_bag/blood/OMinus, +/obj/item/reagent_containers/iv_bag/blood/OMinus, +/obj/item/reagent_containers/iv_bag/blood/OMinus, +/obj/item/reagent_containers/iv_bag/blood/OMinus, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bF" = ( +/turf/simulated/shuttle/wall{ + icon_state = "swall1"; + dir = 2 + }, +/area/shuttle/administration) +"bG" = ( +/obj/machinery/camera{ + dir = 4; + icon_state = "camera"; + name = "NHV Asclepius OR 1"; + network = list("NHV Asclepius") + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bH" = ( +/obj/machinery/computer/camera_advanced/shuttle_docker/admin{ + name = "NHV Asclepius navigation computer" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bI" = ( +/obj/machinery/door/airlock/shuttle/glass{ + name = "Operating Room"; + req_access = null; + req_access_txt = "45" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bJ" = ( +/obj/structure/sink{ + dir = 4; + icon_state = "sink"; + pixel_x = 11; + pixel_y = 0 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bK" = ( +/obj/structure/shuttle/window{ + tag = "icon-window5_end (EAST)"; + icon = 'icons/turf/shuttle.dmi'; + icon_state = "window5_end"; + dir = 4 + }, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 8; + icon_state = "open"; + id_tag = "Asclshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/grille, +/turf/space, +/area/shuttle/administration) +"bL" = ( +/obj/machinery/computer/communications{ + name = "NHV Asclepius Communications Console" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bM" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/light, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bN" = ( +/turf/simulated/shuttle/wall{ + tag = "icon-swall2"; + icon_state = "swall2"; + dir = 2 + }, +/area/shuttle/administration) +"bO" = ( +/obj/machinery/sleeper, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bP" = ( +/obj/machinery/sleeper{ + dir = 4 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bQ" = ( +/obj/structure/bed{ + name = "Triage: High Priority" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bR" = ( +/obj/machinery/bodyscanner, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bS" = ( +/obj/machinery/body_scanconsole, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bT" = ( +/obj/machinery/light, +/obj/structure/closet/crate/can, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bU" = ( +/obj/item/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; + name = "Surgery Cleaner" + }, +/obj/structure/table/glass, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bV" = ( +/obj/structure/closet/crate/freezer, +/obj/item/reagent_containers/iv_bag/blood/OMinus, +/obj/item/reagent_containers/iv_bag/blood/OMinus, +/obj/machinery/iv_drip, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"bW" = ( +/obj/machinery/status_display, +/turf/simulated/shuttle/wall{ + icon_state = "swall12"; + dir = 2 + }, +/area/shuttle/administration) +"bX" = ( +/turf/simulated/shuttle/wall{ + icon_state = "swall13"; + dir = 2 + }, +/area/shuttle/administration) +"bY" = ( +/obj/structure/sign/examroom, +/turf/simulated/shuttle/wall{ + icon_state = "swall12"; + dir = 2 + }, +/area/shuttle/administration) +"bZ" = ( +/obj/machinery/defibrillator_mount/loaded, +/turf/simulated/shuttle/wall{ + dir = 2; + icon_state = "swall8"; + tag = "icon-swall12" + }, +/area/shuttle/administration) +"ca" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/camera{ + dir = 5; + icon_state = "camera"; + name = "NHV Asclepius Central"; + network = list("NHV Asclepius") + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"cb" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/structure/bed{ + name = "Triage: High Priority" + }, +/obj/machinery/iv_drip, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"cc" = ( +/obj/structure/sign/nosmoking_2, +/turf/simulated/shuttle/wall{ + icon_state = "swall7"; + dir = 2 + }, +/area/shuttle/administration) +"cd" = ( +/turf/simulated/shuttle/wall{ + icon_state = "swall11"; + dir = 2 + }, +/area/shuttle/administration) +"ce" = ( +/obj/machinery/portable_atmospherics/canister/oxygen{ + name = "Canister: \[O2] (CRYO)" + }, +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 1 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"cf" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/glass/beaker/cryoxadone, +/obj/item/reagent_containers/glass/beaker/cryoxadone, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"cg" = ( +/obj/machinery/portable_atmospherics/canister/oxygen{ + name = "Canister: \[O2] (CRYO)" + }, +/obj/machinery/light{ + tag = "icon-tube1 (NORTH)"; + icon_state = "tube1"; + dir = 1 + }, +/obj/machinery/camera{ + dir = 4; + icon_state = "camera"; + name = "NHV Asclepius Cryo"; + network = list("NHV Asclepius") + }, +/obj/machinery/atmospherics/unary/portables_connector, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"ch" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; + name = "Surgery Cleaner" + }, +/obj/machinery/cell_charger, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"ci" = ( +/obj/structure/bed{ + name = "Triage: High Priority" + }, +/obj/machinery/iv_drip, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"cj" = ( +/obj/machinery/atmospherics/unary/cold_sink/freezer, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"ck" = ( +/obj/machinery/camera{ + dir = 4; + icon_state = "camera"; + name = "NHV Asclepius OR 2"; + network = list("NHV Asclepius") + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"cl" = ( +/obj/structure/closet/radiation, +/obj/item/clothing/head/radiation, +/obj/item/clothing/head/radiation, +/obj/item/clothing/head/radiation, +/obj/item/clothing/suit/radiation, +/obj/item/clothing/suit/radiation, +/obj/item/clothing/suit/radiation, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"cm" = ( +/obj/structure/closet/l3closet, +/obj/item/clothing/head/bio_hood, +/obj/item/clothing/head/bio_hood, +/obj/item/clothing/head/bio_hood, +/obj/item/clothing/suit/bio_suit, +/obj/item/clothing/suit/bio_suit, +/obj/item/clothing/suit/bio_suit, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"cn" = ( +/obj/structure/closet/secure_closet/medical1, +/obj/item/clothing/head/beret/med, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"co" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"cp" = ( +/obj/machinery/suit_storage_unit/cmo/secure/sec_storage, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"cq" = ( +/obj/machinery/light, +/obj/machinery/suit_storage_unit/cmo/secure/sec_storage, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"cr" = ( +/obj/structure/dispenser/oxygen, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"cs" = ( +/obj/machinery/vending/medical, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"ct" = ( +/turf/simulated/shuttle/wall{ + icon_state = "swall_s5"; + dir = 2 + }, +/area/shuttle/administration) +"cu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5; + icon_state = "intact" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"cv" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"cw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4; + level = 1 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) +"cx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9; + icon_state = "intact" + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor3" + }, +/area/shuttle/administration) + +(1,1,1) = {" +ab +ao +aE +aE +aE +aE +aE +aD +bo +bB +bB +bK +aD +aE +aE +aE +aE +ct +"} +(2,1,1) = {" +ac +ap +aF +aN +aS +aX +ap +ac +bp +bC +bH +bL +ac +cg +cu +aw +cl +ac +"} +(3,1,1) = {" +ad +aq +aG +aw +aw +aY +aq +ac +bq +aR +aR +bM +ac +aC +cv +aw +cm +ad +"} +(4,1,1) = {" +ae +ar +aw +aw +aw +aw +ba +ac +br +aw +aw +aw +bW +cf +cw +aw +cn +ae +"} +(5,1,1) = {" +af +as +aw +aw +aw +aw +aw +ag +bs +bD +aP +bN +bX +aC +cv +aw +co +af +"} +(6,1,1) = {" +ac +at +aw +aO +aw +aw +aw +bj +bt +aw +aw +bO +bY +cj +cx +aw +cp +ac +"} +(7,1,1) = {" +ag +au +aH +aP +aT +aP +bb +bk +bu +aw +aw +bP +bZ +ch +aw +aw +cq +ac +"} +(8,1,1) = {" +ah +av +aw +aQ +aw +aQ +bc +bl +aw +aw +aw +aw +ca +aw +aw +aw +cr +ac +"} +(9,1,1) = {" +ai +aw +aw +aw +aw +aw +aw +aU +aw +aw +aw +aw +aw +aw +aw +aw +bR +ac +"} +(10,1,1) = {" +aj +aw +aw +aw +aw +aw +aw +aU +aw +aw +aw +aw +aw +aw +aw +aw +bS +ac +"} +(11,1,1) = {" +ak +ax +aI +aR +aw +aR +bd +bm +bv +bE +aw +bQ +cb +ci +bQ +aw +cs +ac +"} +(12,1,1) = {" +ag +ao +aJ +aP +aU +aP +bb +bn +aP +bF +bI +bN +cc +aP +bF +bI +bN +bX +"} +(13,1,1) = {" +ac +ay +aw +aw +aw +aw +be +ac +bw +bG +aw +bR +ac +bw +ck +aw +bR +ac +"} +(14,1,1) = {" +ad +az +aw +aw +aw +aw +bg +ac +bx +aw +aw +bS +ac +bx +aw +aw +bS +ad +"} +(15,1,1) = {" +al +aA +aw +aw +aw +aw +bh +ac +by +aw +aw +bT +ac +by +aw +aw +bT +ae +"} +(16,1,1) = {" +am +aB +aw +aw +aw +aZ +bi +ac +bz +aw +aw +bU +ac +bz +aw +aw +bU +af +"} +(17,1,1) = {" +ac +aC +aK +aK +aV +bf +ce +ac +bA +aw +bJ +bV +ac +bA +aw +bJ +bV +ac +"} +(18,1,1) = {" +an +aD +aL +aL +aD +aE +aE +bn +aL +aL +aD +aE +cd +aD +aL +aL +aD +aW +"} +(19,1,1) = {" +aa +an +aM +aM +aW +aa +aa +an +aM +aM +aW +aa +aa +an +aM +aM +aW +aa +"} diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index d20255bc57c..53517d5dbc9 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -25,6 +25,11 @@ port_id = "ferry" name = "Base Shuttle Template (Ferry)" +/datum/map_template/shuttle/admin + port_id = "admin" + name = "Base Shuttle Template (Admin)" + + // Shuttles start here: @@ -117,3 +122,13 @@ definitely no zombifyin' reagents!" admin_notes = "Meat currently contains no zombifying reagents, people on \ meatspike must be spawned in." + +/datum/map_template/shuttle/admin/hospital + suffix = "hospital" + name = "NHV Asclepius" + description = "Nanostrasen Hospital ship, for medical assistance during disasters." + +/datum/map_template/shuttle/admin/admin + suffix = "admin" + name = "NTV Argos" + description = "Default Admin ship. An older ship used for special operations." diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index dcf5223e29c..5d508685e5b 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -335,7 +335,7 @@ var/list/ghostteleportlocs = list() icon_state = "shuttle" /area/shuttle/administration - name = "\improper Administration Shuttle" + name = "\improper Nanotrasen Vessel" icon_state = "shuttlered" /area/shuttle/administration/centcom diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 06e0c2336f0..f3c0249941b 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -714,8 +714,6 @@ possible_destinations = C.possible_destinations shuttleId = C.shuttleId -/obj/machinery/computer/shuttle/Initialize(mapload) - . = ..() connect() /obj/machinery/computer/shuttle/proc/connect() @@ -868,12 +866,27 @@ possible_destinations = "science_home;science_away" /obj/machinery/computer/shuttle/admin - name = "Administration Shuttle Console" - desc = "Used to call and send the administration shuttle." + name = "admin shuttle console" + req_access = list(access_cent_general) shuttleId = "admin" - possible_destinations = "admin_home;admin_away" + possible_destinations = "admin_home;admin_away;admin_custom" resistance_flags = INDESTRUCTIBLE +/obj/machinery/computer/camera_advanced/shuttle_docker/admin + name = "Admin shuttle navigation computer" + desc = "Used to designate a precise transit location for the admin shuttle." + icon_screen = "navigation" + icon_keyboard = "med_key" + shuttleId = "admin" + shuttlePortId = "admin_custom" + view_range = 14 + x_offset = 0 + y_offset = 0 + resistance_flags = INDESTRUCTIBLE + access_tcomms = TRUE + access_construction = TRUE + access_mining = TRUE + /obj/machinery/computer/shuttle/trade name = "Freighter Console" resistance_flags = INDESTRUCTIBLE From bf1eeb211f892600762f8207ad40f1d774670169 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 2 May 2019 19:03:29 -0700 Subject: [PATCH 079/195] Fixes item_attack runtime when punching windoor --- code/_onclick/item_attack.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index bed8c64b054..5e6acad93a1 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -24,7 +24,7 @@ return FALSE /obj/attackby(obj/item/I, mob/living/user, params) - return ..() || (can_be_hit && I.attack_obj(src, user)) + return ..() || (can_be_hit && istype(I) && I.attack_obj(src, user)) /mob/living/attackby(obj/item/I, mob/living/user, params) user.changeNext_move(CLICK_CD_MELEE) From 32e36f06dd00fae40115db26a861f576ac5528b5 Mon Sep 17 00:00:00 2001 From: Couls Date: Thu, 2 May 2019 22:07:36 -0400 Subject: [PATCH 080/195] remove rerolling for ghosts --- code/game/gamemodes/wizard/artefact.dm | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index a35f990845c..58d4d814c62 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -650,7 +650,6 @@ var/global/list/multiverse = list() M.visible_message(" A massive amount of flesh sloughs off [M] and a skeleton rises up!") M.grab_ghost() // yoinks the ghost if its not in the body M.revive() - M.verbs += /mob/living/carbon/human/proc/skeleton_reset equip_skeleton(M) spooky_scaries |= M to_chat(M, "You have been revived by [user.real_name]!") @@ -732,7 +731,6 @@ var/global/list/multiverse = list() H.update_body() H.grab_ghost() H.revive() - H.verbs += /mob/living/carbon/human/proc/skeleton_reset H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/head/kitty(H), slot_head) H.equip_to_slot_or_del(new /obj/item/clothing/under/schoolgirl(H), slot_w_uniform) @@ -882,22 +880,3 @@ var/global/list/multiverse = list() heal_brute = 25 heal_burn = 25 heal_oxy = 25 - -/mob/living/carbon/human/proc/skeleton_reset() - set name = "Offer skeleton to ghosts" - set category = "Skeleton" - set desc = "Give up your skeleton to ghosts so you can observe the round." - src.verbs -= /mob/living/carbon/human/proc/skeleton_reset - if (src.stat != DEAD) - var/list/mob/dead/observer/candidates = pollCandidates("Do you want to play as Skeleton?", ROLE_WIZARD, 0, 100) - var/mob/dead/observer/new_stand = null - if(candidates.len && src.stat != DEAD) // make sure they haven't died since - new_stand = pick(candidates) - to_chat(src,"Your body has been given up and taken over by someone else.") - message_admins("[key_name_admin(new_stand)] has taken control of ([key_name_admin(src)])") - src.ghostize() - src.key = new_stand.key - else - to_chat(src, "There were no ghosts willing to take control. Looks like you're stuck as a skeleton for now.") - spawn(600) - src.verbs += /mob/living/carbon/human/proc/skeleton_reset From 2cf6f1aa7970e410fe13db8c0991579c94d6c861 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 2 May 2019 19:54:11 -0700 Subject: [PATCH 081/195] fixes add_reagent runtimes for blobs --- code/modules/reagents/chemistry/reagents/blob.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/chemistry/reagents/blob.dm b/code/modules/reagents/chemistry/reagents/blob.dm index 1dcd414b702..bca2cbd9067 100644 --- a/code/modules/reagents/chemistry/reagents/blob.dm +++ b/code/modules/reagents/chemistry/reagents/blob.dm @@ -56,7 +56,8 @@ volume = ..() M.apply_damage(0.6*volume, TOX) M.hallucination += 0.6*volume - M.reagents.add_reagent("spore", 0.4*volume) + if(M.reagents) + M.reagents.add_reagent("spore", 0.4*volume) /datum/reagent/blob/lexorin_jelly //does tons of oxygen damage and a little brute name = "Lexorin Jelly" @@ -102,7 +103,8 @@ volume = ..() M.apply_damage(0.4*volume, BURN) M.adjustStaminaLoss(0.4*volume) - M.reagents.add_reagent("frostoil", 0.4*volume) + if(M.reagents) + M.reagents.add_reagent("frostoil", 0.4*volume) /datum/reagent/blob/b_sorium name = "Sorium" From 5c4303c2f6e37c2cf7bd7f56353c7232705734ea Mon Sep 17 00:00:00 2001 From: Ionward Date: Thu, 2 May 2019 20:00:48 -0700 Subject: [PATCH 082/195] updates cautery sprite --- icons/obj/surgery.dmi | Bin 37846 -> 38854 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index bc36cdaaa8f92619109fb449da5c79f47d1d5a76..01a625e6988427e0d5e1115389267d28c1754962 100644 GIT binary patch literal 38854 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

4NUvbF8sAeL@iEAfM`e*y%$l;L& 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'sMgP*hIvX5u)DXwqMn<@ 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 Date: Thu, 2 May 2019 20:39:42 -0700 Subject: [PATCH 083/195] removed a few pixels off the back, reducing size --- icons/obj/surgery.dmi | Bin 38854 -> 38800 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 01a625e6988427e0d5e1115389267d28c1754962..6a6cf1694a9e9cc7e8e3f849d77497cc0d16dd3a 100644 GIT binary patch literal 38800 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

4NUvbF8sAeL@iEAfM`e*y%$l;L& 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 Date: Thu, 2 May 2019 20:56:00 -0700 Subject: [PATCH 084/195] Updates changelogs Apr08->May02 --- html/changelog.html | 231 +++++++++++++++++++ html/changelogs/.all_changelog.yml | 253 +++++++++++++++++++++ html/changelogs/AutoChangeLog-pr-10327.yml | 9 - html/changelogs/AutoChangeLog-pr-11102.yml | 5 - html/changelogs/AutoChangeLog-pr-11129.yml | 4 - html/changelogs/AutoChangeLog-pr-11214.yml | 4 - html/changelogs/AutoChangeLog-pr-11217.yml | 4 - html/changelogs/AutoChangeLog-pr-11224.yml | 4 - html/changelogs/AutoChangeLog-pr-11227.yml | 7 - html/changelogs/AutoChangeLog-pr-11230.yml | 5 - html/changelogs/AutoChangeLog-pr-11231.yml | 6 - html/changelogs/AutoChangeLog-pr-11243.yml | 4 - html/changelogs/AutoChangeLog-pr-11253.yml | 5 - html/changelogs/AutoChangeLog-pr-11255.yml | 6 - html/changelogs/AutoChangeLog-pr-11257.yml | 4 - html/changelogs/AutoChangeLog-pr-11259.yml | 13 -- html/changelogs/AutoChangeLog-pr-11270.yml | 4 - html/changelogs/AutoChangeLog-pr-11277.yml | 4 - html/changelogs/AutoChangeLog-pr-11278.yml | 4 - html/changelogs/AutoChangeLog-pr-11279.yml | 4 - html/changelogs/AutoChangeLog-pr-11280.yml | 4 - html/changelogs/AutoChangeLog-pr-11282.yml | 5 - html/changelogs/AutoChangeLog-pr-11283.yml | 4 - html/changelogs/AutoChangeLog-pr-11284.yml | 6 - html/changelogs/AutoChangeLog-pr-11285.yml | 8 - html/changelogs/AutoChangeLog-pr-11287.yml | 6 - html/changelogs/AutoChangeLog-pr-11288.yml | 4 - html/changelogs/AutoChangeLog-pr-11292.yml | 5 - html/changelogs/AutoChangeLog-pr-11294.yml | 4 - html/changelogs/AutoChangeLog-pr-11296.yml | 4 - html/changelogs/AutoChangeLog-pr-11297.yml | 9 - html/changelogs/AutoChangeLog-pr-11298.yml | 5 - html/changelogs/AutoChangeLog-pr-11299.yml | 5 - html/changelogs/AutoChangeLog-pr-11300.yml | 5 - html/changelogs/AutoChangeLog-pr-11301.yml | 7 - html/changelogs/AutoChangeLog-pr-11305.yml | 4 - html/changelogs/AutoChangeLog-pr-11310.yml | 4 - html/changelogs/AutoChangeLog-pr-11312.yml | 4 - html/changelogs/AutoChangeLog-pr-11313.yml | 4 - html/changelogs/AutoChangeLog-pr-11314.yml | 4 - html/changelogs/AutoChangeLog-pr-11317.yml | 4 - html/changelogs/AutoChangeLog-pr-11318.yml | 4 - html/changelogs/AutoChangeLog-pr-11319.yml | 6 - html/changelogs/AutoChangeLog-pr-11320.yml | 4 - html/changelogs/AutoChangeLog-pr-11323.yml | 4 - html/changelogs/AutoChangeLog-pr-11328.yml | 5 - html/changelogs/AutoChangeLog-pr-11329.yml | 4 - html/changelogs/AutoChangeLog-pr-11331.yml | 4 - html/changelogs/AutoChangeLog-pr-11332.yml | 4 - html/changelogs/AutoChangeLog-pr-11333.yml | 4 - html/changelogs/AutoChangeLog-pr-11334.yml | 4 - html/changelogs/AutoChangeLog-pr-11335.yml | 4 - html/changelogs/AutoChangeLog-pr-11336.yml | 4 - html/changelogs/AutoChangeLog-pr-11338.yml | 4 - html/changelogs/AutoChangeLog-pr-11339.yml | 4 - html/changelogs/AutoChangeLog-pr-11340.yml | 4 - html/changelogs/AutoChangeLog-pr-11347.yml | 5 - html/changelogs/AutoChangeLog-pr-11348.yml | 5 - html/changelogs/AutoChangeLog-pr-11349.yml | 5 - html/changelogs/AutoChangeLog-pr-11350.yml | 5 - html/changelogs/AutoChangeLog-pr-11351.yml | 5 - html/changelogs/AutoChangeLog-pr-11353.yml | 4 - html/changelogs/AutoChangeLog-pr-11355.yml | 4 - html/changelogs/AutoChangeLog-pr-11356.yml | 4 - html/changelogs/AutoChangeLog-pr-11360.yml | 6 - html/changelogs/AutoChangeLog-pr-11361.yml | 4 - html/changelogs/AutoChangeLog-pr-11362.yml | 4 - html/changelogs/AutoChangeLog-pr-11364.yml | 4 - html/changelogs/AutoChangeLog-pr-11365.yml | 7 - html/changelogs/AutoChangeLog-pr-11367.yml | 4 - html/changelogs/AutoChangeLog-pr-11369.yml | 4 - html/changelogs/AutoChangeLog-pr-11370.yml | 4 - html/changelogs/AutoChangeLog-pr-11371.yml | 4 - html/changelogs/AutoChangeLog-pr-11372.yml | 4 - html/changelogs/AutoChangeLog-pr-11373.yml | 4 - html/changelogs/AutoChangeLog-pr-11375.yml | 4 - html/changelogs/AutoChangeLog-pr-11376.yml | 4 - html/changelogs/AutoChangeLog-pr-11377.yml | 5 - html/changelogs/AutoChangeLog-pr-11378.yml | 4 - html/changelogs/AutoChangeLog-pr-11381.yml | 4 - html/changelogs/AutoChangeLog-pr-11389.yml | 4 - html/changelogs/AutoChangeLog-pr-11390.yml | 4 - html/changelogs/AutoChangeLog-pr-11391.yml | 4 - html/changelogs/AutoChangeLog-pr-11393.yml | 6 - html/changelogs/AutoChangeLog-pr-11395.yml | 4 - html/changelogs/AutoChangeLog-pr-11396.yml | 4 - html/changelogs/AutoChangeLog-pr-11397.yml | 7 - html/changelogs/AutoChangeLog-pr-11400.yml | 6 - html/changelogs/AutoChangeLog-pr-11404.yml | 4 - html/changelogs/AutoChangeLog-pr-11405.yml | 4 - html/changelogs/AutoChangeLog-pr-11406.yml | 7 - html/changelogs/AutoChangeLog-pr-11407.yml | 4 - html/changelogs/AutoChangeLog-pr-11409.yml | 7 - html/changelogs/AutoChangeLog-pr-11413.yml | 5 - html/changelogs/AutoChangeLog-pr-11414.yml | 4 - html/changelogs/AutoChangeLog-pr-11419.yml | 4 - html/changelogs/AutoChangeLog-pr-11423.yml | 4 - html/changelogs/AutoChangeLog-pr-11424.yml | 4 - html/changelogs/__CHANGELOG_README.txt | 2 - tools/ss13_genchangelog.py | 9 +- 100 files changed, 492 insertions(+), 460 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-10327.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11102.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11129.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11214.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11217.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11224.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11227.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11230.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11231.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11243.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11253.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11255.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11257.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11259.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11270.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11277.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11278.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11279.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11280.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11282.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11283.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11284.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11285.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11287.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11288.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11292.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11294.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11296.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11297.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11298.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11299.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11300.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11301.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11305.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11310.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11312.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11313.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11314.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11317.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11318.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11319.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11320.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11323.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11328.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11329.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11331.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11332.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11333.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11334.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11335.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11336.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11338.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11339.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11340.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11347.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11348.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11349.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11350.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11351.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11353.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11355.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11356.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11360.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11361.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11362.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11364.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11365.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11367.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11369.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11370.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11371.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11372.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11373.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11375.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11376.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11377.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11378.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11381.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11389.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11390.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11391.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11393.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11395.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11396.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11397.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11400.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11404.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11405.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11406.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11407.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11409.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11413.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11414.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11419.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11423.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-11424.yml diff --git a/html/changelog.html b/html/changelog.html index 7c4262f54ce..6ce02bc19c8 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,237 @@ -->
+

02 May 2019

+

AffectedArc07 updated:

+
    +
  • ssMapping
  • +
  • Gateway and space ruins are now loaded with ssMapping
  • +
  • Master Controller
  • +
  • Darkmode chat department colors match NTTC theming now
  • +
  • SSvotes
  • +
  • SSradio
  • +
  • SSevents
  • +
  • SSholiday
  • +
  • We no longer check if its Christmas every tick. Dont ask.
  • +
  • SSalarms
  • +
+

Arkatos updated:

+
    +
  • Shadowlings now have a slightly bigger colored text when speaking in the Shadowling Hivemind
  • +
  • Replaced title2.ogg music with a higher quality version
  • +
  • Shield Blobs automatically spawned around Blob Cores now give no refund upon removing. No freebies.
  • +
  • Added new Wizard Spell - Summon Ghosts! This nefarious spell will make all ghosts visible to the living. Be careful though, as while they cannot harm you in any way, they might prove a bit.. annoying. Costs 0 points in the Wizard's spellbook.
  • +
  • Ghosts now orbit around their followed targets
  • +
  • Added new Shadowling Ability - Null Charge! This new ability allows Shadowling to completely drain an APC of it's power after a moderate delay. Shadowling must not be interrupted, or the whole process will fail.
  • +
  • Added custom icon for the Null Charge ability
  • +
  • Shadowling Drain Life ability removed
  • +
  • Added Observer HUD buttons for Jump to Mob, Orbit, Re-enter corpse, and Teleport
  • +
  • Added custom icons for Observer HUD buttons
  • +
  • Added Floorbot color variants. Different toolboxes will result in a differently colored Floorbots. One even might be a little stronger than others..
  • +
  • Added sprites of Floorbot color variants
  • +
  • Fixed incorrect amount of required floortiles for the Floorbot in the crafting tab
  • +
  • Added cancel button to Wizard teleportation scrolls
  • +
  • Added an option to grant Martial Arts via administrative Var menu
  • +
  • Toggling hardhat light on/off now correctly updates wearer's sprite
  • +
  • Added deathsound for Silicons
  • +
  • Dice will now roll when thrown
  • +
  • Added sound when adding or removing IDs from ID modification computers
  • +
  • Added cancel button to transfer amount from stack menu
  • +
  • Alt-click is a new shortcut to take a custom amount from stack
  • +
  • Added shortcuts for handling pumps, volume pumps, filters, and mixers. Ctrl-click these devices to turn them on/off and Alt-click them to set their output to maximum.
  • +
  • Added ability to rename pumps, volume pumps, filters and mixers with a pen.
  • +
  • Added sound for throwing bolas
  • +
  • Added hitsound for all types of bolas
  • +
  • Added AntagHUD to everyone at the round end
  • +
  • Circuit Boards now show their required components on examine
  • +
  • Revenants now have randomly generated flavor names
  • +
  • You can shift-click any action button to reset it's position. Alt-click on Hide Buttons will reset all action buttons to their default positions.
  • +
  • Pill Bottles are now printable in the Autolathe. You can find them in the Medical section, and each costs 80 metal and 20 glass to print.
  • +
  • Puts beakers in your hand upon eject from chemistry machines
  • +
  • Cardboard can now be made in the Biogenerator
  • +
  • You can now hotswap tanks in a canister or gas pump by clicking it with a new tank!
  • +
  • You can now also close a canister's valve and remove the tank inside it by alt-clicking it.
  • +
  • Added examine toolptips. Hover over any equipped or hold item for a little while and it will display the item description as a tooltip.
  • +
  • Ghost teleport verb will no locker flicker when used
  • +
  • Alt-click now opens and closes fire extinguisher cabinet
  • +
  • Fire extinguisher cabinet now properly updates it's sprite correctly when putting fire extinquisher inside the cabinet
  • +
  • Fire extinguisher no longer sprays when put into fire extinguisher cabinet with a safety off
  • +
  • Added sound for opening and closing fire extinguisher cabinet
  • +
  • Added new torch sprites
  • +
  • Torch light color is now orange instead of red
  • +
  • Torch sprite now correctly shows all inhand sprites
  • +
  • Blob Rally Spores power is now free to use
  • +
  • Blob mobs can no longer speak while being dead via Blob Broadcast
  • +
  • Blob structures now properly show working animation
  • +
  • Added new sprites for variants of Blob resource, factory and storage structures
  • +
  • Added inhand sprites for winter coats
  • +
  • Carps now spawn with a random color! There might even be some really rare ones..
  • +
  • Added carp color variants sprites
  • +
+

Arkatos and Paradise community: updated:

+
    +
  • Added Tip of the round to a pre-game lobby
  • +
  • Added Show Custom Tip admin verb
  • +
  • Added Give Random Tip OOC verb
  • +
+

Citinited updated:

+
    +
  • You can no longer turn transit turfs into foamed metal flooring.
  • +
  • Foamed metal floors have a sprite now.
  • +
  • Pipe dispensers (the big ones) now work again.
  • +
  • Cooldown on pipe dispensers reduced to 0.4 seconds, down from 1.5 seconds
  • +
+

CornMyCob updated:

+
    +
  • The plasma cutter now cuts through multiple rock tiles.
  • +
+

CthulhuOnIce updated:

+
    +
  • you can smell dead bodies, even if someone else shouldn't
  • +
+

Fethas updated:

+
    +
  • Cluwne suits should no longer fall off cluwnes from being fat.
  • +
+

Fox McCloud updated:

+
    +
  • CQC has been updated; a few combos are more powerful
  • +
  • cost increased to 13 TC
  • +
  • CQC is now nuke ops only
  • +
  • gloves of the north star restriction on CQC removed
  • +
  • CQC disarms will now take the item from your opponent
  • +
  • CQC blocks melee weapons and a couple of stun weapons and not everything now
  • +
  • Reagents will now adjust to the body temperature over time as opposed to all at once
  • +
  • Strange Reagent will work 25% of the time with TOUCH based reactions
  • +
  • Strange reagent will revive whether there's a ghost or not (can use SR on clientless mobs now, like monkies)
  • +
  • SR puts the occupant back in their body automatically
  • +
  • Cloners that eject their messes will now eject the unattached organs
  • +
  • the message for brain death will now properly and only occur when they have truly died from brain damage
  • +
  • Fixes being able to attain brain damage over 120
  • +
  • Updates nations. Updates nations so hard right into the void
  • +
  • Plasma fires should burn a bit faster now
  • +
  • Bleeding will now stop at the temperature at which cryoxadone heals
  • +
  • Fixes a few potential exploits with forcing chem, dust, and explosive implants activating with the deathgasp emote, prior to death
  • +
  • Tesla can't zap cameras and other disposal structures anymore
  • +
  • Simple mobs can now be shocked
  • +
  • Electrocution damage scales a bit more linearly up to its maximum potential instead of being heavily random
  • +
  • Fixes being able to shock yourself with TK, at range, on electrical equipment
  • +
  • simple mobs can now be shocked by the tesla and other sources
  • +
  • Fixes goats not attacking people
  • +
  • Goats will eat glowshrooms
  • +
  • Goats will eat full grown diona
  • +
  • Remapped toxins to be more compatible with the modern age
  • +
  • updates plasma and N2O sprites
  • +
  • Fixes not being able to look at a turf if it had plasma/N2O on it
  • +
  • cold turfs no longer become icy
  • +
  • Cryostylane makes turfs icy
  • +
  • Icy turfs are slippery; wear magboots to counteract the effect. Watch your head!
  • +
  • Fixes grammar of slipping on turfs; no more "you slipped on floor" or "you slipped on wet floor"
  • +
  • removes ponies
  • +
  • object and fast processing are now proper subsystems
  • +
  • Fixes multi-spawn blobs
  • +
  • Powersinks drain rate increased, but they also explode a bit sooner
  • +
  • Multitools display total power, load, and free power
  • +
  • Fix emitter sparks sparking at the location of emitters where biult as opposed to emitter current location
  • +
+

Ionward updated:

+
    +
  • Added new mantles! Check the ClothesMate, or in department head's lockers.
  • +
+

KasparoVy updated:

+
    +
  • Adds striped normal-height socks.
  • +
  • Vox can now wear whatever undergarment they want.
  • +
  • Removes flesh from shredded Vox uniform sprites.
  • +
  • Armalis can no longer wear undergarments. They didn't fit, anyhow.
  • +
  • Underwear no can no longer lock up the character creator.
  • +
+

Kyep updated:

+
    +
  • bans issued by admins via the Player Panel no longer incorrectly omit IP/etc information
  • +
  • admins issuing permanent bans are no longer presented with an "ip ban?" prompt, as all bans include IP/CID information now. This prompt was a legacy thing from back when the filesystem was used to store bans, and hasn't ever affected how DB-based bans were stored.
  • +
  • Added a config file option which allows SSD crew members to be moved to cryo after a defined amount of minutes.
  • +
  • Added a config file option which causes most people trying to attack/loot/interact with a SSD character to need to confirm they've read the rules before being able to do so.
  • +
  • Fixed an error message being inappropriately generated for admins when someone signs up as a pAI.
  • +
  • The ID computer now color-codes potential job transfer options, highlighting good choices for a job transfer in green, and bad ones in gray.
  • +
  • Taking a job transfer now gives you playtime based on your new job, instead of incorrectly still giving you playtime based on your old job.
  • +
  • Job transfers to karma jobs are now possible - if you have the job unlocked.
  • +
  • Attempting to bypass a job ban via a job transfer now generates a warning to all online admins.
  • +
  • Refactored and improved our entry on the server hub.
  • +
  • Fixed a runtime in job_exp.dm
  • +
+

Markolie updated:

+
    +
  • Safes can now consist of more than two tumblers.
  • +
  • All safes now have three tumblers by default, instead of two.
  • +
  • The safe opening mechanism has changed slightly. This is described on the safe cracking UI.
  • +
  • The hardsuit equipment lockers on the Syndicate Nuclear Operative shuttle have been replaced with suit storage units. Suit storage units now have a separate slot for magboots.
  • +
  • Nuclear Operatives can now purchase reinforcements. These reinforcements cost 25 telecrystals each.
  • +
  • A number of new ammunition and weapon bundles have been added for Nuclear Operatives.
  • +
  • For every ten players on the server, the Nuclear Operatives now receive 2 extra telecrystals.
  • +
  • The Syndicate borg spawners have been separated into three separate spawners, one for each type of Syndicate cyborg. Their prices have been modified.
  • +
  • Saboteur borgs now spawn with thermals.
  • +
  • The Syndicate borg and exosuits have been moved to a new category, "Support and Mechanized Exosuits".
  • +
  • Existing bundles and telecrystal purchases have been moved to a new category, "Bundles and Telecrystals".
  • +
  • There are now more spawn points for nuclear operatives on their base. The number of operatives spawning has not been changed.
  • +
  • Spawning nuclear operatives through the traitor panel now causes their ID to be properly updated.
  • +
  • Shuttles no longer leave behind their propulsion.
  • +
  • AZERTY hotkey mode users can now switch between regular mode and hotkey mode properly using TAB again.
  • +
  • Jumpsuits are now removed by clicking instead of clicking and dragging.
  • +
  • Removed a useless message that would be sent to admins whenever a drone joins the round.
  • +
  • Fixed an issue where admins would receive a message whenever someone joined up as a pAI.
  • +
+

McDonald072 updated:

+
    +
  • You can no longer examine or teleport things using clipboards
  • +
+

Quantum-M updated:

+
    +
  • Two multicolor pens to the Internal Affairs Office
  • +
+

TDSSS updated:

+
    +
  • nukies can buy plasma grenades again
  • +
+

Ty-Omaha updated:

+
    +
  • Moves AI admin log to the all preference
  • +
+

dovydas12345 updated:

+
    +
  • Fixes normal cameras spooking non-chaplains even when they don't capture any ghosts
  • +
+

farie82 updated:

+
    +
  • Makes puke less lag inducing
  • +
  • Puke can now appear on all kinds of turfs except spess
  • +
  • Ticket messages now have their corresponding span classes. Making them easier to notice
  • +
  • PM's now shouldn't go to the wrong client anymore when the target left.
  • +
  • Cure text for Shock and Cardiac failure are more clear now
  • +
  • Ducttape gags can now be removed properly without spawning an invisible one in your hands
  • +
  • Windoors now give the airlock assembly electronics once deconstructed
  • +
  • Can't place runes in space anymore
  • +
  • Admins can now use all mhelp related things again
  • +
  • Fixed the toggle mentor ticket messages text
  • +
  • Vampiric glaring is logged now
  • +
  • Doctor delight and orange juice now heal again
  • +
  • Fixes admin PM's. Bwoinks are back on the menu!
  • +
  • Organs will now prompt a update_stat. Meaning that IRCs and the like now get revived when possible when you put their battery and brain in
  • +
  • The typing limiter option should now work for all edge cases. Such as dying while talking and such
  • +
  • Borgs health status now updates properly when removing and adding parts
  • +
  • You won't try to fix destroyed components in borgs anymore. Which resulted to lost materials and no healing
  • +
  • Borg analysers will now properly show missing components and won't show their damage if missing
  • +
  • Self diagnostics for borgs now also shows missing parts and destroyed ones
  • +
+

iantine updated:

+
    +
  • Adds Lumi's vox suit fluff
  • +
+

uc_guy updated:

+
    +
  • Players in the lobby no longer see cult speak.
  • +
+

08 April 2019

TDSSS updated: