From bda2ea1df9e1e03903684cf4e3bf53240ef7e8bc Mon Sep 17 00:00:00 2001 From: Arvenius169 <56715097+Arvenius169@users.noreply.github.com> Date: Fri, 10 Jan 2020 16:43:48 -0500 Subject: [PATCH 01/61] Fixes a part of the gas sample comparison CO2 comparison now uses the CO2 from the sample, instead of oxygen. --- code/datums/gas_mixture.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/gas_mixture.dm b/code/datums/gas_mixture.dm index 35cc970aa67..63b70b512ee 100644 --- a/code/datums/gas_mixture.dm +++ b/code/datums/gas_mixture.dm @@ -645,7 +645,7 @@ What are the archived variables for? ((nitrogen < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.nitrogen) || (nitrogen > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.nitrogen))) return 0 if((abs(carbon_dioxide-sample.carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && \ - ((carbon_dioxide < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.carbon_dioxide) || (oxygen > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.carbon_dioxide))) + ((carbon_dioxide < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.carbon_dioxide) || (carbon_dioxide > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.carbon_dioxide))) return 0 if((abs(toxins-sample.toxins) > MINIMUM_AIR_TO_SUSPEND) && \ ((toxins < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.toxins) || (toxins > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.toxins))) From d2931c860bb249924acc305d8a5d816b6fec4fbb Mon Sep 17 00:00:00 2001 From: NotDhu Date: Wed, 18 Mar 2020 14:21:43 -0400 Subject: [PATCH 02/61] Makes classic secHUD available to Magistrate. --- code/modules/client/preference/loadout/loadout_general.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/client/preference/loadout/loadout_general.dm b/code/modules/client/preference/loadout/loadout_general.dm index 50105813fd6..8c08063ad7e 100644 --- a/code/modules/client/preference/loadout/loadout_general.dm +++ b/code/modules/client/preference/loadout/loadout_general.dm @@ -29,7 +29,7 @@ /datum/gear/sechud display_name = "a classic security HUD" path = /obj/item/clothing/glasses/hud/security - allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot", "Internal Affairs Agent") + allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot", "Internal Affairs Agent","Magistrate") /datum/gear/matches display_name = "a box of matches" @@ -42,7 +42,7 @@ /datum/gear/doublecards display_name = "a double deck of standard cards" path = /obj/item/deck/doublecards - + /datum/gear/tarot display_name = "a deck of tarot cards" path = /obj/item/deck/tarot From 91cf99f20e39e7b9eb60d526907511367d31e90c Mon Sep 17 00:00:00 2001 From: Daylight Date: Tue, 28 Apr 2020 00:21:57 +0300 Subject: [PATCH 03/61] makes wand of door creation not work in den --- code/modules/projectiles/guns/magic/wand.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index f91d7e66734..06fb148bfcc 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -140,6 +140,7 @@ fire_sound = 'sound/magic/staff_door.ogg' icon_state = "doorwand" max_charges = 20 //20, 10, 10, 7 + no_den_usage = 1 /obj/item/gun/magic/wand/door/zap_self(mob/living/user) to_chat(user, "You feel vaguely more open with your feelings.") From 7eac9c92beb442f4528570b6aecd809360cd4827 Mon Sep 17 00:00:00 2001 From: Daylight Date: Tue, 28 Apr 2020 00:30:18 +0300 Subject: [PATCH 04/61] Revert "makes wand of door creation not work in den" This reverts commit 91cf99f20e39e7b9eb60d526907511367d31e90c. --- code/modules/projectiles/guns/magic/wand.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index 06fb148bfcc..f91d7e66734 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -140,7 +140,6 @@ fire_sound = 'sound/magic/staff_door.ogg' icon_state = "doorwand" max_charges = 20 //20, 10, 10, 7 - no_den_usage = 1 /obj/item/gun/magic/wand/door/zap_self(mob/living/user) to_chat(user, "You feel vaguely more open with your feelings.") From 027036ef46c104aedecb8af4a9a7887e0c22f3ab Mon Sep 17 00:00:00 2001 From: Daylight Date: Tue, 28 Apr 2020 02:13:04 +0300 Subject: [PATCH 05/61] Revert "Revert "makes wand of door creation not work in den"" This reverts commit 7eac9c92beb442f4528570b6aecd809360cd4827. --- code/modules/projectiles/guns/magic/wand.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index f91d7e66734..06fb148bfcc 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -140,6 +140,7 @@ fire_sound = 'sound/magic/staff_door.ogg' icon_state = "doorwand" max_charges = 20 //20, 10, 10, 7 + no_den_usage = 1 /obj/item/gun/magic/wand/door/zap_self(mob/living/user) to_chat(user, "You feel vaguely more open with your feelings.") From 8f28b1eef226b890752c62f2f44a5fe67e591346 Mon Sep 17 00:00:00 2001 From: Daylight Date: Tue, 28 Apr 2020 15:26:27 +0300 Subject: [PATCH 06/61] Moves den usage to parent, all wands no longer work on den --- code/modules/projectiles/guns/magic/wand.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index 06fb148bfcc..45e15cad43d 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -8,6 +8,7 @@ can_charge = 0 max_charges = 100 //100, 50, 50, 34 (max charge distribution by 25%ths) var/variable_charges = 1 + no_den_usage = 1 /obj/item/gun/magic/wand/New() if(prob(75) && variable_charges) //25% chance of listed max charges, 50% chance of 1/2 max charges, 25% chance of 1/3 max charges @@ -118,7 +119,6 @@ ammo_type = /obj/item/ammo_casing/magic/teleport icon_state = "telewand" max_charges = 10 //10, 5, 5, 4 - no_den_usage = 1 fire_sound = 'sound/magic/wand_teleport.ogg' /obj/item/gun/magic/wand/teleport/zap_self(mob/living/user) @@ -140,7 +140,6 @@ fire_sound = 'sound/magic/staff_door.ogg' icon_state = "doorwand" max_charges = 20 //20, 10, 10, 7 - no_den_usage = 1 /obj/item/gun/magic/wand/door/zap_self(mob/living/user) to_chat(user, "You feel vaguely more open with your feelings.") From ac0c227b211e39a752df1b62fccdcd64a6c5b6a9 Mon Sep 17 00:00:00 2001 From: Daylight Date: Tue, 28 Apr 2020 15:52:43 +0300 Subject: [PATCH 07/61] Uses TRUE instead of 1 --- code/modules/projectiles/guns/magic/wand.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index 45e15cad43d..cd6fd4261a8 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -8,7 +8,7 @@ can_charge = 0 max_charges = 100 //100, 50, 50, 34 (max charge distribution by 25%ths) var/variable_charges = 1 - no_den_usage = 1 + no_den_usage = TRUE /obj/item/gun/magic/wand/New() if(prob(75) && variable_charges) //25% chance of listed max charges, 50% chance of 1/2 max charges, 25% chance of 1/3 max charges From f02e0e2a2b7605cdd0706be61cf1ee13504136d4 Mon Sep 17 00:00:00 2001 From: SteelSlayer Date: Fri, 1 May 2020 19:31:37 -0500 Subject: [PATCH 08/61] Fixes missionary staff recharge --- code/modules/clothing/suits/miscellaneous.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index cd137f6e12b..b378ed5ddbd 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -958,7 +958,9 @@ if(linked_staff.faith >= 100) //if the linked staff is fully recharged, do nothing return - if(!(linked_staff in range(3, get_turf(src)))) //staff won't charge at range (to prevent it from being handed off / stolen and used) + // Do not allow the staff to recharge if it's more than 3 tiles away from the robe. If get_dist returns 0, the robe and the staff in the same tile. + // Using .loc instead of get_turf() here because if the turf of H is the same as the turf of the staff, get_dist() returns -1. + if(!(get_dist(H.loc, linked_staff.loc) in 0 to 3)) if(prob(10)) //10% chance per process should avoid being too spammy, can tweak if it ends up still being too frequent. to_chat(H, "Your staff is unable to charge at this range. Get closer!") return From d9dc23635994704d339438cc2a9d6c0bf65850ae Mon Sep 17 00:00:00 2001 From: SteelSlayer Date: Mon, 4 Nov 2019 15:53:24 -0600 Subject: [PATCH 09/61] Slimes will ignore slime people when searching for targets again --- code/modules/mob/living/simple_animal/slime/life.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm index d03e7ada419..c52ae73d325 100644 --- a/code/modules/mob/living/simple_animal/slime/life.dm +++ b/code/modules/mob/living/simple_animal/slime/life.dm @@ -314,7 +314,7 @@ for(var/mob/living/L in view(7,src)) - if(isslime(L) || L.stat == DEAD) // Ignore other slimes and dead mobs + if(isslime(L) || isslimeperson(L) || L.stat == DEAD) // Ignore other slimes, slime people, and dead mobs continue if(L in Friends) // No eating friends! From 11c597a68a727d64b8ef604a8c9c3deeb91826d3 Mon Sep 17 00:00:00 2001 From: SteelSlayer Date: Mon, 4 Nov 2019 23:23:38 -0600 Subject: [PATCH 10/61] adds inherent factions --- code/modules/mob/living/carbon/human/species/_species.dm | 9 +++++++++ code/modules/mob/living/carbon/human/species/slime.dm | 1 + code/modules/mob/living/simple_animal/slime/life.dm | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index bb3d2609010..67dd9b55312 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -84,6 +84,7 @@ var/single_gib_type = /obj/effect/decal/cleanable/blood/gibs var/remains_type = /obj/effect/decal/remains/human //What sort of remains is left behind when the species dusts var/base_color //Used when setting species. + var/list/inherent_factions //Used in icon caching. var/race_key = 0 @@ -285,11 +286,19 @@ H.hud_used.update_locked_slots() H.ventcrawler = ventcrawler + if(inherent_factions) + for(var/i in inherent_factions) + H.faction += i //Using +=/-= for this in case you also gain the faction from a different source. + /datum/species/proc/on_species_loss(mob/living/carbon/human/H) if(H.butcher_results) //clear it out so we don't butcher a actual human. H.butcher_results = null H.ventcrawler = initial(H.ventcrawler) + if(inherent_factions) + for(var/i in inherent_factions) + H.faction -= i + /datum/species/proc/updatespeciescolor(mob/living/carbon/human/H) //Handles changing icobase for species that have multiple skin colors. return diff --git a/code/modules/mob/living/carbon/human/species/slime.dm b/code/modules/mob/living/carbon/human/species/slime.dm index 3a3f4c3d3ac..0a708db223f 100644 --- a/code/modules/mob/living/carbon/human/species/slime.dm +++ b/code/modules/mob/living/carbon/human/species/slime.dm @@ -13,6 +13,7 @@ icobase = 'icons/mob/human_races/r_slime.dmi' deform = 'icons/mob/human_races/r_slime.dmi' remains_type = /obj/effect/decal/remains/slime + inherent_factions = list("slime") // More sensitive to the cold cold_level_1 = 280 diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm index c52ae73d325..4e1aee2c822 100644 --- a/code/modules/mob/living/simple_animal/slime/life.dm +++ b/code/modules/mob/living/simple_animal/slime/life.dm @@ -314,7 +314,7 @@ for(var/mob/living/L in view(7,src)) - if(isslime(L) || isslimeperson(L) || L.stat == DEAD) // Ignore other slimes, slime people, and dead mobs + if(L.stat == DEAD) // Ignore dead mobs continue if(L in Friends) // No eating friends! From 6fc94527c9201095f491a3375f7833b9221df2af Mon Sep 17 00:00:00 2001 From: SteelSlayer Date: Sat, 2 May 2020 03:53:15 -0500 Subject: [PATCH 11/61] add pod and shadow inherent factions --- code/modules/mob/living/carbon/human/species/diona.dm | 11 +---------- .../modules/mob/living/carbon/human/species/shadow.dm | 3 +-- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/diona.dm b/code/modules/mob/living/carbon/human/species/diona.dm index 22edf961270..a8639a1a948 100644 --- a/code/modules/mob/living/carbon/human/species/diona.dm +++ b/code/modules/mob/living/carbon/human/species/diona.dm @@ -108,13 +108,4 @@ /datum/species/diona/pod //Same name and everything; we want the same limitations on them; we just want their regeneration to kick in at all times and them to have special factions pod = TRUE - -/datum/species/diona/pod/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - C.faction |= "plants" - C.faction |= "vines" - -/datum/species/diona/pod/on_species_loss(mob/living/carbon/C) - . = ..() - C.faction -= "plants" - C.faction -= "vines" + inherent_factions = list("plants", "vines") diff --git a/code/modules/mob/living/carbon/human/species/shadow.dm b/code/modules/mob/living/carbon/human/species/shadow.dm index 7d1d4c26a61..63f062b8bc8 100644 --- a/code/modules/mob/living/carbon/human/species/shadow.dm +++ b/code/modules/mob/living/carbon/human/species/shadow.dm @@ -5,6 +5,7 @@ icobase = 'icons/mob/human_races/r_shadow.dmi' deform = 'icons/mob/human_races/r_shadow.dmi' dangerous_existence = TRUE + inherent_factions = list("faithless") unarmed_type = /datum/unarmed_attack/claws @@ -49,14 +50,12 @@ if(grant_vision_toggle) vision_toggle = new vision_toggle.Grant(H) - H.faction |= "faithless" /datum/species/shadow/on_species_loss(mob/living/carbon/human/H) ..() if(grant_vision_toggle && vision_toggle) H.vision_type = null vision_toggle.Remove(H) - H.faction -= "faithless" /datum/species/shadow/handle_life(mob/living/carbon/human/H) var/light_amount = 0 From 83ab08bae951ff077e218e94adbbbe702d8c3476 Mon Sep 17 00:00:00 2001 From: Daylight Date: Sat, 2 May 2020 15:46:59 +0300 Subject: [PATCH 12/61] Makes no_den_usage only on door wand again --- code/modules/projectiles/guns/magic/wand.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index cd6fd4261a8..58bb0bfedb7 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -42,7 +42,7 @@ to_chat(user, "You know better than to violate the security of The Den, best wait until you leave to use [src].") return else - no_den_usage = 0 + no_den_usage = FALSE zap_self(user) else ..() @@ -119,6 +119,7 @@ ammo_type = /obj/item/ammo_casing/magic/teleport icon_state = "telewand" max_charges = 10 //10, 5, 5, 4 + no_den_usage = TRUE fire_sound = 'sound/magic/wand_teleport.ogg' /obj/item/gun/magic/wand/teleport/zap_self(mob/living/user) @@ -140,6 +141,7 @@ fire_sound = 'sound/magic/staff_door.ogg' icon_state = "doorwand" max_charges = 20 //20, 10, 10, 7 + no_den_usage = TRUE /obj/item/gun/magic/wand/door/zap_self(mob/living/user) to_chat(user, "You feel vaguely more open with your feelings.") From a44c9b57e7a2a6989f53de5ebcd6d99c82475ff5 Mon Sep 17 00:00:00 2001 From: Daylight Date: Sat, 2 May 2020 15:51:14 +0300 Subject: [PATCH 13/61] Probablly should remove this too. --- code/modules/projectiles/guns/magic/wand.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index 58bb0bfedb7..7a013f3083c 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -8,7 +8,6 @@ can_charge = 0 max_charges = 100 //100, 50, 50, 34 (max charge distribution by 25%ths) var/variable_charges = 1 - no_den_usage = TRUE /obj/item/gun/magic/wand/New() if(prob(75) && variable_charges) //25% chance of listed max charges, 50% chance of 1/2 max charges, 25% chance of 1/3 max charges From 04a9e6a2e7b1221b9ba7ab2af6dd7c0b2100b745 Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Sat, 2 May 2020 14:55:17 -0400 Subject: [PATCH 14/61] Fix up smooth movement issues --- code/game/atoms_movable.dm | 21 ++++++++++++++++----- code/game/machinery/computer/camera.dm | 2 +- code/modules/mob/living/living.dm | 4 ++-- code/modules/mob/mob_movement.dm | 21 +++++++++------------ 4 files changed, 28 insertions(+), 20 deletions(-) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 6b49962bbac..ac77d3d4553 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -1,6 +1,7 @@ /atom/movable layer = 3 appearance_flags = TILE_BOUND + glide_size = 8 // Default, adjusted when mobs move based on their movement delays var/last_move = null var/anchored = 0 var/move_resist = MOVE_RESIST_DEFAULT @@ -131,13 +132,14 @@ /atom/movable/proc/setLoc(var/T, var/teleported=0) loc = T -/atom/movable/Move(atom/newloc, direct = 0) +/atom/movable/Move(atom/newloc, direct = 0, movetime) if(!loc || !newloc) return 0 var/atom/oldloc = loc if(loc != newloc) + glide_for(movetime) if(!(direct & (direct - 1))) //Cardinal move - . = ..() + . = ..(newloc, direct) // don't pass up movetime else //Diagonal move, split it into cardinal moves moving_diagonally = FIRST_DIAG_STEP var/first_step_dir @@ -203,7 +205,7 @@ src.move_speed = world.time - src.l_move_time src.l_move_time = world.time - if(. && has_buckled_mobs() && !handle_buckled_mob_movement(loc, direct)) //movement failed due to buckled mob + if(. && has_buckled_mobs() && !handle_buckled_mob_movement(loc, direct, movetime)) //movement failed due to buckled mob . = 0 // Called after a successful Move(). By this point, we've already moved @@ -216,6 +218,15 @@ update_parallax_contents() return TRUE +// Change glide size for the duration of one movement +/atom/movable/proc/glide_for(movetime) + if(movetime) + glide_size = world.icon_size/max(DS2TICKS(movetime), 1) + spawn(movetime) + glide_size = initial(glide_size) + else + glide_size = initial(glide_size) + // Previously known as HasEntered() // This is automatically called when something enters your square /atom/movable/Crossed(atom/movable/AM, oldloc) @@ -428,10 +439,10 @@ /atom/movable/proc/water_act(volume, temperature, source, method = REAGENT_TOUCH) //amount of water acting : temperature of water in kelvin : object that called it (for shennagins) return TRUE -/atom/movable/proc/handle_buckled_mob_movement(newloc,direct) +/atom/movable/proc/handle_buckled_mob_movement(newloc,direct,movetime) for(var/m in buckled_mobs) var/mob/living/buckled_mob = m - if(!buckled_mob.Move(newloc, direct)) + if(!buckled_mob.Move(newloc, direct, movetime)) forceMove(buckled_mob.loc) last_move = buckled_mob.last_move inertia_dir = last_move diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index c95735507a5..1649397a68f 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -302,7 +302,7 @@ T = get_step(T, direct) console.jump_on_click(src, T) return - return ..(n,direct) + return ..() // Other computer monitors. /obj/machinery/computer/security/telescreen diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 22a48f9d9ee..4b2e39fee35 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -511,7 +511,7 @@ return -/mob/living/Move(atom/newloc, direct) +/mob/living/Move(atom/newloc, direct, movetime) if(buckled && buckled.loc != newloc) //not updating position if(!buckled.anchored) return buckled.Move(newloc, direct) @@ -544,7 +544,7 @@ var/mob/living/M = pulling if(M.lying && !M.buckled && (prob(M.getBruteLoss() * 200 / M.maxHealth))) M.makeTrail(T) - pulling.Move(T, get_dir(pulling, T)) // the pullee tries to reach our previous position + pulling.Move(T, get_dir(pulling, T), movetime) // the pullee tries to reach our previous position if(pulling && get_dist(src, pulling) > 1) // the pullee couldn't keep up stop_pulling() diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 69996ce1729..471ddc42557 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -143,8 +143,10 @@ move_delay = world.time mob.last_movement = world.time + delay = TICKS2DS(-round(-(DS2TICKS(delay)))) //Rounded to the next tick in equivalent ds + if(locate(/obj/item/grab, mob)) - move_delay = max(move_delay, world.time + 7) + delay += 7 var/list/L = mob.ret_grab() if(istype(L, /list)) if(L.len == 2) @@ -153,14 +155,14 @@ if(M) if((get_dist(mob, M) <= 1 || M.loc == mob.loc)) var/turf/prev_loc = mob.loc - . = ..() + . = mob.SelfMove(n, direct, delay) if(M && isturf(M.loc)) // Mob may get deleted during parent call var/diag = get_dir(mob, M) if((diag - 1) & diag) else diag = null if((get_dist(mob, M) > 1 || diag)) - step(M, get_dir(M.loc, prev_loc)) + M.Move(prev_loc, get_dir(M.loc, prev_loc), delay) else for(var/mob/M in L) M.other_mobs = 1 @@ -168,12 +170,10 @@ M.animate_movement = 3 for(var/mob/M in L) spawn(0) - step(M, direct) - return + M.Move(get_step(M,direct), direct, delay) spawn(1) M.other_mobs = null M.animate_movement = 2 - return else if(mob.confused) var/newdir = 0 @@ -186,11 +186,8 @@ if(newdir) direct = newdir n = get_step(mob, direct) - - delay = TICKS2DS(-round(-(DS2TICKS(delay)))) //Rounded to the next tick in equivalent ds - mob.glide_size = world.icon_size/max(DS2TICKS(delay),1) //Down to whatever decimal - . = ..() + . = mob.SelfMove(n, direct, delay) mob.setDir(direct) if((direct & (direct - 1)) && mob.loc == n) //moved diagonally successfully @@ -214,8 +211,8 @@ O.on_mob_move(direct, mob) - - +/mob/proc/SelfMove(turf/n, direct, movetime) + return Move(n, direct, movetime) ///Process_Grab() ///Called by client/Move() From 2e9065986994104264644fd0cbe5728500669b00 Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Sat, 2 May 2020 19:14:29 -0400 Subject: [PATCH 15/61] Add slower glide to flipping places with people --- code/modules/mob/living/carbon/human/emote.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 1bb1a8cf536..c1f6acdefe5 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -400,7 +400,9 @@ var/turf/newloc = G.affecting.loc if(isturf(oldloc) && isturf(newloc)) SpinAnimation(5,1) + glide_for(6) // This and the glide_for below are purely arbitrary. Pick something that looks aesthetically pleasing. forceMove(newloc) + G.glide_for(6) G.affecting.forceMove(oldloc) message = "[src] flips over [G.affecting]!" else From fd6c406830b8efdfb97d3a349076c8ed61d48c3c Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Sat, 2 May 2020 19:14:49 -0400 Subject: [PATCH 16/61] Adjust beepsky to slow his roll slightly --- code/modules/mob/living/simple_animal/bot/bot.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index ede055dac43..07210674303 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -495,7 +495,7 @@ Pass a positive integer as an argument to override a bot's default speed. if(!path) return 0 if(path.len > 1) - step_towards(src, path[1]) + Move(path[1], get_dir(src, path[1]), BOT_STEP_DELAY) if(get_turf(src) == path[1]) //Successful move increment_path() tries = 0 From 7ab32209e5cefc38e33e35f23a5d4ff4a82cffe9 Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Sat, 2 May 2020 19:36:27 -0400 Subject: [PATCH 17/61] Smooth vehicles --- code/modules/vehicle/ambulance.dm | 2 +- code/modules/vehicle/janicart.dm | 2 +- code/modules/vehicle/vehicle.dm | 7 ++++--- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/code/modules/vehicle/ambulance.dm b/code/modules/vehicle/ambulance.dm index 450a6c88372..37c9d97e5c6 100644 --- a/code/modules/vehicle/ambulance.dm +++ b/code/modules/vehicle/ambulance.dm @@ -92,7 +92,7 @@ bed = null . = ..() if(bed && get_dist(oldloc, loc) <= 2) - bed.Move(oldloc) + bed.Move(oldloc, get_dir(bed, oldloc), (last_move_diagonal? 2 : 1) * (vehicle_move_delay + config.human_delay)) bed.dir = Dir if(bed.has_buckled_mobs()) for(var/m in bed.buckled_mobs) diff --git a/code/modules/vehicle/janicart.dm b/code/modules/vehicle/janicart.dm index 12ed9f727eb..d7ba87b818c 100644 --- a/code/modules/vehicle/janicart.dm +++ b/code/modules/vehicle/janicart.dm @@ -44,7 +44,7 @@ origin_tech = "materials=3;engineering=4" /obj/vehicle/janicart/Move(atom/OldLoc, Dir) - ..() + . = ..() if(floorbuffer) var/turf/tile = loc if(isturf(tile)) diff --git a/code/modules/vehicle/vehicle.dm b/code/modules/vehicle/vehicle.dm index 79021affa25..cdbb8580da6 100644 --- a/code/modules/vehicle/vehicle.dm +++ b/code/modules/vehicle/vehicle.dm @@ -153,7 +153,8 @@ unbuckle_mob(user) return - if(world.time < last_vehicle_move + ((last_move_diagonal? 2 : 1) * (vehicle_move_delay + config.human_delay))) + var/delay = (last_move_diagonal? 2 : 1) * (vehicle_move_delay + config.human_delay) + if(world.time < last_vehicle_move + delay) return last_vehicle_move = world.time @@ -161,7 +162,7 @@ var/turf/next = get_step(src, direction) if(!Process_Spacemove(direction) || !isturf(loc)) return - step(src, direction) + Move(get_step(src, direction), direction, delay) if((direction & (direction - 1)) && (loc == next)) //moved diagonally last_move_diagonal = TRUE @@ -185,7 +186,7 @@ to_chat(user, "You'll need the keys in one of your hands to drive [src].") -/obj/vehicle/Move(NewLoc, Dir = 0, step_x = 0, step_y = 0) +/obj/vehicle/Move(NewLoc, Dir = 0, movetime) . = ..() handle_vehicle_layer() handle_vehicle_offsets() From faecf7cbfaa3ddde4245e1a6872e9e660264d870 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Sat, 2 May 2020 20:07:43 -0400 Subject: [PATCH 18/61] Patch rework (#13062) * Patch Rework Part 1 * applicator * fixes * fixes * temperature settings * single application patches * additional * new line fix * fox is a derp sometimes --- code/_globalvars/lists/reagents.dm | 2 + code/game/jobs/job/medical.dm | 5 +- code/game/jobs/job/security.dm | 2 +- code/game/machinery/vending.dm | 2 +- .../objects/items/weapons/storage/belt.dm | 3 +- .../objects/items/weapons/storage/firstaid.dm | 163 +++++++++--------- code/modules/clothing/suits/jobs.dm | 8 +- code/modules/clothing/suits/labcoat.dm | 2 +- code/modules/clothing/suits/miscellaneous.dm | 4 +- code/modules/mob/living/carbon/carbon.dm | 11 +- .../mob/living/carbon/carbon_defines.dm | 1 + code/modules/mob/living/carbon/life.dm | 20 +++ code/modules/mob/living/living.dm | 2 + code/modules/reagents/chemistry/holder.dm | 22 ++- .../chemistry/machinery/chem_master.dm | 4 +- code/modules/reagents/chemistry/reagents.dm | 2 +- .../reagents/chemistry/reagents/medicine.dm | 6 +- code/modules/reagents/reagent_containers.dm | 4 +- .../reagents/reagent_containers/applicator.dm | 106 ++++++++++++ .../reagents/reagent_containers/patch.dm | 34 +++- .../research/designs/autolathe_designs.dm | 9 +- icons/goonstation/objects/objects.dmi | Bin 1002 -> 2059 bytes nano/templates/chem_master.tmpl | 2 +- paradise.dme | 1 + sound/goonstation/items/mender.ogg | Bin 0 -> 15335 bytes sound/goonstation/items/mender2.ogg | Bin 0 -> 15462 bytes 26 files changed, 297 insertions(+), 118 deletions(-) create mode 100644 code/modules/reagents/reagent_containers/applicator.dm create mode 100644 sound/goonstation/items/mender.ogg create mode 100644 sound/goonstation/items/mender2.ogg diff --git a/code/_globalvars/lists/reagents.dm b/code/_globalvars/lists/reagents.dm index 20620d60800..abd878ff936 100644 --- a/code/_globalvars/lists/reagents.dm +++ b/code/_globalvars/lists/reagents.dm @@ -64,3 +64,5 @@ GLOBAL_LIST_INIT(safe_chem_list, list("antihol", "charcoal", "epinephrine", "ins "omnizine", "stimulants", "synaptizine", "potass_iodide", "oculine", "mannitol", "styptic_powder", "spaceacillin", "salglu_solution", "sal_acid", "cryoxadone", "blood", "synthflesh", "hydrocodone", "mitocholide", "rezadone")) + +GLOBAL_LIST_INIT(safe_chem_applicator_list, list("silver_sulfadiazine", "styptic_powder", "synthflesh")) diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 259afa12c9e..2d1b091a10d 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -30,7 +30,7 @@ l_ear = /obj/item/radio/headset/heads/cmo id = /obj/item/card/id/cmo suit_store = /obj/item/flashlight/pen - l_hand = /obj/item/storage/firstaid/adv + l_hand = /obj/item/storage/firstaid/doctor pda = /obj/item/pda/heads/cmo backpack_contents = list( /obj/item/melee/classic_baton/telescopic = 1 @@ -68,7 +68,7 @@ l_ear = /obj/item/radio/headset/headset_med id = /obj/item/card/id/medical suit_store = /obj/item/flashlight/pen - l_hand = /obj/item/storage/firstaid/adv + l_hand = /obj/item/storage/firstaid/doctor pda = /obj/item/pda/medical backpack = /obj/item/storage/backpack/medic @@ -315,4 +315,3 @@ satchel = /obj/item/storage/backpack/satchel_med dufflebag = /obj/item/storage/backpack/duffel/medical box = /obj/item/storage/box/engineer - diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 64e69e89765..a32656598df 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -217,7 +217,7 @@ glasses = /obj/item/clothing/glasses/hud/health/sunglasses id = /obj/item/card/id/security suit_store = /obj/item/flashlight/pen - l_hand = /obj/item/storage/firstaid/adv + l_hand = /obj/item/storage/firstaid/doctor pda = /obj/item/pda/medical implants = list(/obj/item/implant/mindshield) backpack = /obj/item/storage/backpack/medic diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index e3b1322f34b..6813333033c 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -1172,7 +1172,7 @@ icon_deny = "med-deny" product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!" req_access_txt = "5" - products = list(/obj/item/reagent_containers/syringe = 12, /obj/item/reagent_containers/food/pill/patch/styptic = 10, /obj/item/reagent_containers/food/pill/patch/silver_sulf = 10, + products = list(/obj/item/reagent_containers/syringe = 12, /obj/item/reagent_containers/food/pill/patch/styptic = 4, /obj/item/reagent_containers/food/pill/patch/silver_sulf = 4, /obj/item/reagent_containers/applicator/brute = 3, /obj/item/reagent_containers/applicator/burn = 3, /obj/item/reagent_containers/glass/bottle/charcoal = 4, /obj/item/reagent_containers/glass/bottle/epinephrine = 4, /obj/item/reagent_containers/glass/bottle/diphenhydramine = 4, /obj/item/reagent_containers/glass/bottle/salicylic = 4, /obj/item/reagent_containers/glass/bottle/potassium_iodide =3, /obj/item/reagent_containers/glass/bottle/saline = 5, /obj/item/reagent_containers/glass/bottle/morphine = 4, /obj/item/reagent_containers/glass/bottle/ether = 4, /obj/item/reagent_containers/glass/bottle/atropine = 3, diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 755b0076c3c..403088e2b71 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -134,7 +134,8 @@ /obj/item/rad_laser, /obj/item/sensor_device, /obj/item/wrench/medical, - /obj/item/handheld_defibrillator + /obj/item/handheld_defibrillator, + /obj/item/reagent_containers/applicator ) /obj/item/storage/belt/medical/surgery diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index a9da4a69241..4ff769a7d3f 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -14,7 +14,7 @@ icon_state = "firstaid" throw_speed = 2 throw_range = 8 - var/empty = 0 + var/empty = FALSE req_one_access =list(ACCESS_MEDICAL, ACCESS_ROBOTICS) //Access and treatment are utilized for medbots. var/treatment_brute = "salglu_solution" var/treatment_oxy = "salbutamol" @@ -33,39 +33,51 @@ item_state = "firstaid-ointment" med_bot_skin = "ointment" - New() - ..() - if(empty) return - - icon_state = pick("ointment","firefirstaid") - - new /obj/item/reagent_containers/food/pill/patch/silver_sulf( src ) - new /obj/item/reagent_containers/food/pill/patch/silver_sulf( src ) - new /obj/item/reagent_containers/food/pill/patch/silver_sulf( src ) - new /obj/item/reagent_containers/food/pill/patch/silver_sulf( src ) - new /obj/item/healthanalyzer( src ) - new /obj/item/reagent_containers/hypospray/autoinjector( src ) - new /obj/item/reagent_containers/food/pill/salicylic( src ) +/obj/item/storage/firstaid/fire/New() + ..() + if(empty) return + icon_state = pick("ointment", "firefirstaid") + new /obj/item/reagent_containers/applicator/burn(src) + new /obj/item/reagent_containers/food/pill/patch/silver_sulf/small(src) + new /obj/item/healthanalyzer(src) + new /obj/item/reagent_containers/hypospray/autoinjector(src) + new /obj/item/reagent_containers/food/pill/salicylic(src) /obj/item/storage/firstaid/fire/empty - empty = 1 + empty = TRUE /obj/item/storage/firstaid/regular desc = "A general medical kit that contains medical patches for both brute damage and burn damage. Also contains an epinephrine syringe for emergency use and a health analyzer" icon_state = "firstaid" - New() - ..() - if(empty) return - new /obj/item/reagent_containers/food/pill/patch/styptic( src ) - new /obj/item/reagent_containers/food/pill/patch/styptic( src ) - new /obj/item/reagent_containers/food/pill/salicylic( src ) - new /obj/item/reagent_containers/food/pill/patch/silver_sulf( src ) - new /obj/item/reagent_containers/food/pill/patch/silver_sulf( src ) - new /obj/item/healthanalyzer( src ) - new /obj/item/reagent_containers/hypospray/autoinjector( src ) +/obj/item/storage/firstaid/regular/New() + ..() + if(empty) return + new /obj/item/reagent_containers/food/pill/patch/styptic(src) + new /obj/item/reagent_containers/food/pill/patch/styptic(src) + new /obj/item/reagent_containers/food/pill/salicylic(src) + new /obj/item/reagent_containers/food/pill/patch/silver_sulf(src) + new /obj/item/reagent_containers/food/pill/patch/silver_sulf(src) + new /obj/item/healthanalyzer(src) + new /obj/item/reagent_containers/hypospray/autoinjector(src) + +/obj/item/storage/firstaid/doctor + desc = "A general medical kit that contains medical patches for both brute damage and burn damage. Also contains an epinephrine syringe for emergency use and a health analyzer" + icon_state = "firstaid" + +/obj/item/storage/firstaid/doctor/New() + ..() + if(empty) + return + new /obj/item/reagent_containers/applicator/brute(src) + new /obj/item/reagent_containers/applicator/burn(src) + new /obj/item/reagent_containers/food/pill/patch/styptic(src) + new /obj/item/reagent_containers/food/pill/patch/silver_sulf(src) + new /obj/item/reagent_containers/food/pill/salicylic(src) + new /obj/item/healthanalyzer/advanced(src) + new /obj/item/reagent_containers/hypospray/autoinjector(src) /obj/item/storage/firstaid/toxin name = "toxin first aid kit" @@ -74,23 +86,21 @@ item_state = "firstaid-toxin" med_bot_skin = "tox" - New() - ..() - if(empty) return - - icon_state = pick("antitoxin","antitoxfirstaid","antitoxfirstaid2","antitoxfirstaid3") - - new /obj/item/reagent_containers/syringe/charcoal( src ) - new /obj/item/reagent_containers/syringe/charcoal( src ) - new /obj/item/reagent_containers/syringe/charcoal( src ) - new /obj/item/reagent_containers/food/pill/charcoal( src ) - new /obj/item/reagent_containers/food/pill/charcoal( src ) - new /obj/item/reagent_containers/food/pill/charcoal( src ) - new /obj/item/healthanalyzer( src ) +/obj/item/storage/firstaid/toxin/New() + ..() + if(empty) return + icon_state = pick("antitoxin", "antitoxfirstaid", "antitoxfirstaid2", "antitoxfirstaid3") + new /obj/item/reagent_containers/syringe/charcoal(src) + new /obj/item/reagent_containers/syringe/charcoal(src) + new /obj/item/reagent_containers/syringe/charcoal(src) + new /obj/item/reagent_containers/food/pill/charcoal(src) + new /obj/item/reagent_containers/food/pill/charcoal(src) + new /obj/item/reagent_containers/food/pill/charcoal(src) + new /obj/item/healthanalyzer(src) /obj/item/storage/firstaid/toxin/empty - empty = 1 + empty = TRUE /obj/item/storage/firstaid/o2 name = "oxygen deprivation first aid kit" @@ -99,18 +109,18 @@ item_state = "firstaid-o2" med_bot_skin = "o2" - New() - ..() - if(empty) return - new /obj/item/reagent_containers/food/pill/salbutamol( src ) - new /obj/item/reagent_containers/food/pill/salbutamol( src ) - new /obj/item/reagent_containers/food/pill/salbutamol( src ) - new /obj/item/reagent_containers/food/pill/salbutamol( src ) - new /obj/item/healthanalyzer( src ) +/obj/item/storage/firstaid/o2/New() + ..() + if(empty) return + new /obj/item/reagent_containers/food/pill/salbutamol(src) + new /obj/item/reagent_containers/food/pill/salbutamol(src) + new /obj/item/reagent_containers/food/pill/salbutamol(src) + new /obj/item/reagent_containers/food/pill/salbutamol(src) + new /obj/item/healthanalyzer(src) /obj/item/storage/firstaid/o2/empty - empty = 1 + empty = TRUE /obj/item/storage/firstaid/brute name = "brute trauma treatment kit" @@ -119,23 +129,19 @@ item_state = "firstaid-brute" med_bot_skin = "brute" - New() - ..() - if(empty) return - - icon_state = pick("brute","brute2") - - new /obj/item/reagent_containers/food/pill/patch/styptic(src) - new /obj/item/reagent_containers/food/pill/patch/styptic(src) - new /obj/item/reagent_containers/food/pill/patch/styptic(src) - new /obj/item/reagent_containers/food/pill/patch/styptic(src) - new /obj/item/healthanalyzer(src) - new /obj/item/reagent_containers/hypospray/autoinjector(src) - new /obj/item/stack/medical/bruise_pack(src) +/obj/item/storage/firstaid/brute/New() + ..() + if(empty) return + icon_state = pick("brute", "brute2") + new /obj/item/reagent_containers/applicator/brute(src) + new /obj/item/reagent_containers/food/pill/patch/styptic/small(src) + new /obj/item/healthanalyzer(src) + new /obj/item/reagent_containers/hypospray/autoinjector(src) + new /obj/item/stack/medical/bruise_pack(src) /obj/item/storage/firstaid/brute/empty - empty = 1 + empty = TRUE /obj/item/storage/firstaid/adv name = "advanced first-aid kit" @@ -157,7 +163,7 @@ new /obj/item/healthanalyzer(src) /obj/item/storage/firstaid/adv/empty - empty = 1 + empty = TRUE /obj/item/storage/firstaid/machine name = "machine repair kit" @@ -178,7 +184,7 @@ new /obj/item/robotanalyzer(src) /obj/item/storage/firstaid/machine/empty - empty = 1 + empty = TRUE /obj/item/storage/firstaid/tactical @@ -196,18 +202,15 @@ /obj/item/storage/firstaid/tactical/New() ..() - if(empty) return + if(empty) + return new /obj/item/reagent_containers/hypospray/combat(src) - new /obj/item/reagent_containers/food/pill/patch/synthflesh(src) // Because you ain't got no time to look at what damage dey taking yo - new /obj/item/reagent_containers/food/pill/patch/synthflesh(src) - new /obj/item/reagent_containers/food/pill/patch/synthflesh(src) - new /obj/item/reagent_containers/food/pill/patch/synthflesh(src) + new /obj/item/reagent_containers/applicator/dual(src) // Because you ain't got no time to look at what damage dey taking yo new /obj/item/defibrillator/compact/combat/loaded(src) new /obj/item/clothing/glasses/hud/health/night(src) - return /obj/item/storage/firstaid/tactical/empty - empty =1 + empty = TRUE /obj/item/storage/firstaid/surgery name = "field surgery kit" @@ -347,15 +350,15 @@ desc = "Contains pills used to counter toxins." wrapper_color = COLOR_GREEN - New() - ..() - new /obj/item/reagent_containers/food/pill/charcoal( src ) - new /obj/item/reagent_containers/food/pill/charcoal( src ) - new /obj/item/reagent_containers/food/pill/charcoal( src ) - new /obj/item/reagent_containers/food/pill/charcoal( src ) - new /obj/item/reagent_containers/food/pill/charcoal( src ) - new /obj/item/reagent_containers/food/pill/charcoal( src ) - new /obj/item/reagent_containers/food/pill/charcoal( src ) +/obj/item/storage/pill_bottle/charcoal/New() + ..() + new /obj/item/reagent_containers/food/pill/charcoal(src) + new /obj/item/reagent_containers/food/pill/charcoal(src) + new /obj/item/reagent_containers/food/pill/charcoal(src) + new /obj/item/reagent_containers/food/pill/charcoal(src) + new /obj/item/reagent_containers/food/pill/charcoal(src) + new /obj/item/reagent_containers/food/pill/charcoal(src) + new /obj/item/reagent_containers/food/pill/charcoal(src) /obj/item/storage/pill_bottle/painkillers name = "Pill Bottle (Salicylic Acid)" diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index bcb71edf356..d926730942e 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -7,7 +7,7 @@ desc = "A hazard vest used in the recovery of bodies." icon_state = "paramedic-vest" item_state = "paramedic-vest" - allowed = list(/obj/item/stack/medical, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/hypospray, /obj/item/reagent_containers/syringe, \ + allowed = list(/obj/item/stack/medical, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/hypospray, /obj/item/reagent_containers/applicator, /obj/item/reagent_containers/syringe, /obj/item/healthanalyzer, /obj/item/flashlight, /obj/item/radio, /obj/item/tank/emergency_oxygen,/obj/item/rad_laser) armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 10, fire = 50, acid = 50) @@ -21,7 +21,7 @@ desc = "A vest often worn by doctors caring for inmates." icon_state = "brigphysician-vest" item_state = "brigphysician-vest" - allowed = list(/obj/item/stack/medical, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/hypospray, /obj/item/reagent_containers/syringe, \ + allowed = list(/obj/item/stack/medical, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/hypospray, /obj/item/reagent_containers/applicator, /obj/item/reagent_containers/syringe, /obj/item/healthanalyzer, /obj/item/flashlight, \ /obj/item/radio, /obj/item/tank/emergency_oxygen,/obj/item/rad_laser) armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0, fire = 50, acid = 50) @@ -341,7 +341,7 @@ icon_state = "fr_jacket_open" item_state = "fr_jacket_open" blood_overlay_type = "armor" - allowed = list(/obj/item/stack/medical, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/hypospray, /obj/item/reagent_containers/syringe, \ + allowed = list(/obj/item/stack/medical, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/hypospray, /obj/item/reagent_containers/applicator, /obj/item/reagent_containers/syringe, /obj/item/healthanalyzer, /obj/item/flashlight, /obj/item/radio, /obj/item/tank/emergency_oxygen,/obj/item/rad_laser) ignore_suitadjust = 0 suit_adjusted = 1 @@ -381,5 +381,5 @@ desc = "A tweed mantle, worn by the Research Director. Smells like science." icon_state = "rdmantle" item_state = "rdmantle" - 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/reagent_containers/food/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/rad_laser) + 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/reagent_containers/applicator, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/food/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/rad_laser) armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 50, rad = 0, fire = 50, acid = 50) diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 03df1bd74d8..5281a32676e 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -7,7 +7,7 @@ suit_adjusted = 1 blood_overlay_type = "coat" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - 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/reagent_containers/food/pill,/obj/item/storage/pill_bottle,/obj/item/paper,/obj/item/rad_laser) + 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/reagent_containers/applicator,/obj/item/healthanalyzer,/obj/item/flashlight/pen,/obj/item/reagent_containers/glass/bottle,/obj/item/reagent_containers/glass/beaker,/obj/item/reagent_containers/food/pill,/obj/item/storage/pill_bottle,/obj/item/paper,/obj/item/rad_laser) armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 50, "acid" = 50) species_exception = list(/datum/species/golem) sprite_sheets = list( diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index cd137f6e12b..2e2dc76fb97 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -394,7 +394,7 @@ 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) + 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/reagent_containers/applicator,/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, "fire" = 0, "acid" = 45) hoodtype = /obj/item/clothing/head/hooded/winterhood/medical @@ -405,7 +405,7 @@ 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) + 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/reagent_containers/applicator,/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, fire = 0, acid = 0) hoodtype = /obj/item/clothing/head/hooded/winterhood/science diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index c4cd95eeb83..9552477e210 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -9,12 +9,18 @@ qdel(item) QDEL_LIST(internal_organs) QDEL_LIST(stomach_contents) + QDEL_LIST(processing_patches) var/mob/living/simple_animal/borer/B = has_brain_worms() if(B) B.leave_host() qdel(B) return ..() +/mob/living/carbon/handle_atom_del(atom/A) + if(A in processing_patches) + processing_patches -= A + return ..() + /mob/living/carbon/blob_act(obj/structure/blob/B) if(stat == DEAD) return @@ -1073,8 +1079,9 @@ so that different stomachs can handle things in different ways VB*/ if(can_taste_container) taste(toEat.reagents) var/fraction = min(this_bite/toEat.reagents.total_volume, 1) - toEat.reagents.reaction(src, toEat.apply_type, fraction) - toEat.reagents.trans_to(src, this_bite*toEat.transfer_efficiency) + if(fraction) + toEat.reagents.reaction(src, toEat.apply_type, fraction) + toEat.reagents.trans_to(src, this_bite*toEat.transfer_efficiency) /mob/living/carbon/get_access() . = ..() diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index 884ee802518..97ecf4dd08b 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -2,6 +2,7 @@ gender = MALE pressure_resistance = 15 var/list/stomach_contents = list() + var/list/processing_patches = list() var/list/internal_organs = list() var/list/internal_organs_slot = list() //Same as above, but stores "slot ID" - "organ" pairs for easy access. var/antibodies = 0 diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 832260d3090..87832154876 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -13,6 +13,7 @@ for(var/obj/item/organ/internal/O in internal_organs) O.on_life() + handle_patches() handle_changeling() handle_wetness(times_fired) @@ -438,3 +439,22 @@ overlay_fullscreen("brute", /obj/screen/fullscreen/brute, severity) else clear_fullscreen("brute") + +/mob/living/carbon/proc/handle_patches() + if(LAZYLEN(processing_patches)) + var/multiple_patch_multiplier = processing_patches.len > 1 ? (processing_patches.len * 1.5) : 1 + var/applied_amount = 0.35 * multiple_patch_multiplier + + for(var/patch in processing_patches) + var/obj/item/reagent_containers/food/pill/patch/P = patch + + if(P.reagents && P.reagents.total_volume) + var/fractional_applied_amount = applied_amount / P.reagents.total_volume + P.reagents.reaction(src, REAGENT_TOUCH, fractional_applied_amount, P.needs_to_apply_reagents) + P.needs_to_apply_reagents = FALSE + P.reagents.trans_to(src, applied_amount * 0.5) + P.reagents.remove_any(applied_amount * 0.5) + else + if(!P.reagents || P.reagents.total_volume <= 0) + processing_patches -= P + qdel(P) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 4b2e39fee35..8371cacaebe 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -406,6 +406,8 @@ QDEL_LIST(C.reagents.addiction_list) C.reagents.addiction_threshold_accumulated.Cut() + QDEL_LIST(C.processing_patches) + // rejuvenate: Called by `revive` to get the mob into a revivable state // the admin "rejuvenate" command calls `revive`, not this proc. /mob/living/proc/rejuvenate() diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index ddd78b2018f..9afcd5607fa 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -8,13 +8,19 @@ var/maximum_volume = 100 var/atom/my_atom = null var/chem_temp = T20C + var/temperature_min = 0 + var/temperature_max = 10000 var/list/datum/reagent/addiction_list = new/list() var/list/addiction_threshold_accumulated = new/list() var/flags var/list/reagents_generated_per_cycle = new/list() -/datum/reagents/New(maximum = 100) +/datum/reagents/New(maximum = 100, min_temp, max_temp) maximum_volume = maximum + if(min_temp) + temperature_min = min_temp + if(max_temp) + temperature_max = max_temp if(!(flags & REAGENT_NOREACT)) START_PROCESSING(SSobj, src) //I dislike having these here but map-objects are initialised before world/New() is called. >_> @@ -179,7 +185,7 @@ return amount /datum/reagents/proc/set_reagent_temp(new_temp = T0C, react = TRUE) - chem_temp = new_temp + chem_temp = Clamp(new_temp, temperature_max, temperature_min) if(react) temperature_react() handle_reactions() @@ -197,7 +203,7 @@ else if(exposed_temperature < chem_temp) chem_temp -= change - chem_temp = max(min(chem_temp, 10000), 0) //Cap for the moment. + chem_temp = max(min(chem_temp, temperature_max), temperature_min) //Cap for the moment. temperature_react() handle_reactions() @@ -569,7 +575,7 @@ can_process = 1 return can_process -/datum/reagents/proc/reaction(atom/A, method = REAGENT_TOUCH, volume_modifier = 1) +/datum/reagents/proc/reaction(atom/A, method = REAGENT_TOUCH, volume_modifier = 1, show_message = TRUE) var/react_type if(isliving(A)) react_type = "LIVING" @@ -614,7 +620,7 @@ var/check = reaction_check(A, R) if(!check) continue - R.reaction_mob(A, method, R.volume * volume_modifier) + R.reaction_mob(A, method, R.volume * volume_modifier, show_message) if("TURF") R.reaction_turf(A, R.volume * volume_modifier) if("OBJ") @@ -632,7 +638,7 @@ if(total_volume + amount > maximum_volume) amount = (maximum_volume - total_volume) //Doesnt fit in. Make it disappear. Shouldnt happen. Will happen. if(amount <= 0) return 0 - chem_temp = (chem_temp * total_volume + reagtemp * amount) / (total_volume + amount) //equalize with new chems + chem_temp = Clamp((chem_temp * total_volume + reagtemp * amount) / (total_volume + amount), temperature_min, temperature_max) //equalize with new chems for(var/A in reagent_list) @@ -870,8 +876,8 @@ // Convenience proc to create a reagents holder for an atom // Max vol is maximum volume of holder -/atom/proc/create_reagents(max_vol) - reagents = new/datum/reagents(max_vol) +/atom/proc/create_reagents(max_vol, min_temp, max_temp) + reagents = new /datum/reagents(max_vol, min_temp, max_temp) reagents.my_atom = src /proc/get_random_reagent_id() // Returns a random reagent ID minus blacklisted reagents diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 435a253bed5..cf7ff936b6d 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -347,8 +347,8 @@ if(count > 20) count = 20 //Pevent people from creating huge stacks of patches easily. Maybe move the number to defines? var/amount_per_patch = reagents.total_volume/count - if(amount_per_patch > 40) - amount_per_patch = 40 + if(amount_per_patch > 30) + amount_per_patch = 30 var/name = clean_input("Name:", "Name your patch!", "[reagents.get_master_reagent_name()] ([amount_per_patch]u)") if(!name) return diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index 4271b26ba17..8cdb69062ff 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -43,7 +43,7 @@ /datum/reagent/proc/reaction_temperature(exposed_temperature, exposed_volume) //By default we do nothing. return -/datum/reagent/proc/reaction_mob(mob/living/M, method = REAGENT_TOUCH, volume) //Some reagents transfer on touch, others don't; dependent on if they penetrate the skin or not. +/datum/reagent/proc/reaction_mob(mob/living/M, method = REAGENT_TOUCH, volume, show_message = TRUE) //Some reagents transfer on touch, others don't; dependent on if they penetrate the skin or not. if(holder) //for catching rare runtimes if(method == REAGENT_TOUCH && penetrates_skin) var/block = M.get_permeability_protection() diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm index c9e7ac0c1dc..567a1a4d92d 100644 --- a/code/modules/reagents/chemistry/reagents/medicine.dm +++ b/code/modules/reagents/chemistry/reagents/medicine.dm @@ -178,7 +178,7 @@ id = "silver_sulfadiazine" description = "This antibacterial compound is used to treat burn victims." reagent_state = LIQUID - color = "#F0C814" + color = "#F0DC00" metabolization_rate = 3 harmless = FALSE //toxic if ingested, and I am NOT going to account for the difference taste_description = "burn cream" @@ -205,7 +205,7 @@ id = "styptic_powder" description = "Styptic (aluminum sulfate) powder helps control bleeding and heal physical wounds." reagent_state = LIQUID - color = "#C8A5DC" + color = "#FF9696" metabolization_rate = 3 harmless = FALSE taste_description = "wound cream" @@ -221,7 +221,7 @@ M.adjustBruteLoss(-volume) if(show_message) to_chat(M, "The styptic powder stings like hell as it closes some of your wounds!") - M.emote("scream") + M.emote("scream") if(method == REAGENT_INGEST) M.adjustToxLoss(0.5*volume) if(show_message) diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index db65f761e2e..a091f65a34c 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -11,6 +11,8 @@ var/spawned_disease = null var/disease_amount = 20 var/has_lid = FALSE // Used for containers where we want to put lids on and off + var/temperature_min = 0 // To limit the temperature of a reagent container can atain when exposed to heat/cold + var/temperature_max = 10000 /obj/item/reagent_containers/verb/set_APTFT() //set amount_per_transfer_from_this set name = "Set transfer amount" @@ -30,7 +32,7 @@ ..() if(!possible_transfer_amounts) verbs -= /obj/item/reagent_containers/verb/set_APTFT - create_reagents(volume) + create_reagents(volume, temperature_min, temperature_max) if(spawned_disease) var/datum/disease/F = new spawned_disease(0) var/list/data = list("viruses" = list(F), "blood_color" = "#A10808") diff --git a/code/modules/reagents/reagent_containers/applicator.dm b/code/modules/reagents/reagent_containers/applicator.dm new file mode 100644 index 00000000000..dfa59c941ac --- /dev/null +++ b/code/modules/reagents/reagent_containers/applicator.dm @@ -0,0 +1,106 @@ +/obj/item/reagent_containers/applicator + name = "auto-mender" + desc = "A small electronic device designed to topically apply healing chemicals." + icon = 'icons/goonstation/objects/objects.dmi' + icon_state = "mender" + item_state = "mender" + volume = 200 + resistance_flags = ACID_PROOF + container_type = REFILLABLE | AMOUNT_VISIBLE + temperature_min = 270 + temperature_max = 350 + var/ignore_flags = FALSE + var/emagged = FALSE + var/applied_amount = 8 // How much it applies + var/applying = FALSE // So it can't be spammed. + var/measured_health = 0 // Used for measuring health; we don't want this to stop applying once the person's health isn't changing. + +/obj/item/reagent_containers/applicator/emag_act(mob/user) + if(!emagged) + emagged = TRUE + ignore_flags = TRUE + to_chat(user, "You short out the safeties on [src].") + +/obj/item/reagent_containers/applicator/on_reagent_change() + if(!emagged) + var/found_forbidden_reagent = FALSE + for(var/datum/reagent/R in reagents.reagent_list) + if(!GLOB.safe_chem_applicator_list.Find(R.id)) + reagents.del_reagent(R.id) + found_forbidden_reagent = TRUE + if(found_forbidden_reagent) + if(ismob(loc)) + to_chat(loc, "[src] identifies and removes a harmful substance.") + else + visible_message("[src] identifies and removes a harmful substance.") + update_icon() + +/obj/item/reagent_containers/applicator/update_icon() + cut_overlays() + + if(reagents.total_volume) + var/mutable_appearance/filling = mutable_appearance('icons/goonstation/objects/objects.dmi', "mender-fluid") + filling.color = mix_color_from_reagents(reagents.reagent_list) + add_overlay(filling) + +/obj/item/reagent_containers/applicator/attack(mob/living/M, mob/user) + if(!reagents.total_volume) + to_chat(user, "[src] is empty!") + return + if(applying) + to_chat(user, "You're already applying [src].") + return + if(!iscarbon(M)) + return + + if(ignore_flags || M.can_inject(user, TRUE)) + if(M == user) + M.visible_message("[user] begins mending [user.p_them()]self with [src].", "You begin mending yourself with [src].") + else + user.visible_message("[user] begins mending [M] with [src].", "You begin mending [M] with [src].") + if(M.reagents) + applying = TRUE + icon_state = "mender-active" + apply_to(M, user, 0.2) // We apply a very weak application up front, then loop. + while(do_after(user, 10, target = M)) + measured_health = M.health + apply_to(M, user, 1, FALSE) + if((measured_health == M.health) || !reagents.total_volume) + to_chat(user, "[M] is finished healing and [src] powers down automatically.") + break + applying = FALSE + icon_state = "mender" + user.changeNext_move(CLICK_CD_MELEE) + + +/obj/item/reagent_containers/applicator/proc/apply_to(mob/living/carbon/M, mob/user, multiplier = 1, show_message = TRUE) + var/total_applied_amount = applied_amount * multiplier + + if(reagents && reagents.total_volume) + var/list/injected = list() + for(var/datum/reagent/R in reagents.reagent_list) + injected += R.name + + var/contained = english_list(injected) + + add_attack_logs(user, M, "Automends with [src] containing ([contained])", reagents.harmless_helper() ? ATKLOG_ALMOSTALL : null) + + var/fractional_applied_amount = total_applied_amount / reagents.total_volume + + reagents.reaction(M, REAGENT_TOUCH, fractional_applied_amount, show_message) + reagents.trans_to(M, total_applied_amount * 0.5) + reagents.remove_any(total_applied_amount * 0.5) + + playsound(get_turf(src), pick('sound/goonstation/items/mender.ogg', 'sound/goonstation/items/mender2.ogg'), 50, 1) + +/obj/item/reagent_containers/applicator/brute + name = "brute auto-mender" + list_reagents = list("styptic_powder" = 200) + +/obj/item/reagent_containers/applicator/burn + name = "burn auto-mender" + list_reagents = list("silver_sulfadiazine" = 200) + +/obj/item/reagent_containers/applicator/dual + name = "dual auto-mender" + list_reagents = list("synthflesh" = 200) diff --git a/code/modules/reagents/reagent_containers/patch.dm b/code/modules/reagents/reagent_containers/patch.dm index b020015e929..582e157004c 100644 --- a/code/modules/reagents/reagent_containers/patch.dm +++ b/code/modules/reagents/reagent_containers/patch.dm @@ -5,10 +5,24 @@ icon_state = "bandaid" item_state = "bandaid" possible_transfer_amounts = null - volume = 40 + volume = 30 apply_type = REAGENT_TOUCH apply_method = "apply" transfer_efficiency = 0.5 //patches aren't as effective at getting chemicals into the bloodstream. + temperature_min = 270 + temperature_max = 350 + var/needs_to_apply_reagents = TRUE + +/obj/item/reagent_containers/food/pill/patch/attack(mob/living/carbon/M, mob/user, def_zone) + if(!istype(M)) + return FALSE + bitesize = 0 + if(M.eat(src, user)) + user.drop_item() + forceMove(M) + M.processing_patches += src + return TRUE + return FALSE /obj/item/reagent_containers/food/pill/patch/afterattack(obj/target, mob/user , proximity) return // thanks inheritance again @@ -18,29 +32,37 @@ desc = "Helps with brute injuries." icon_state = "bandaid_brute" instant_application = 1 - list_reagents = list("styptic_powder" = 40) + list_reagents = list("styptic_powder" = 30) + +/obj/item/reagent_containers/food/pill/patch/styptic/small + name = "healing mini-patch" + list_reagents = list("styptic_powder" = 15) /obj/item/reagent_containers/food/pill/patch/silver_sulf name = "burn patch" desc = "Helps with burn injuries." icon_state = "bandaid_burn" instant_application = 1 - list_reagents = list("silver_sulfadiazine" = 40) + list_reagents = list("silver_sulfadiazine" = 30) + +/obj/item/reagent_containers/food/pill/patch/silver_sulf/small + name = "burn mini-patch" + list_reagents = list("silver_sulfadiazine" = 15) /obj/item/reagent_containers/food/pill/patch/synthflesh name = "synthflesh patch" desc = "Helps with brute and burn injuries." icon_state = "bandaid_med" instant_application = 1 - list_reagents = list("synthflesh" = 20) + list_reagents = list("synthflesh" = 10) /obj/item/reagent_containers/food/pill/patch/nicotine name = "nicotine patch" desc = "Helps temporarily curb the cravings of nicotine dependency." - list_reagents = list("nicotine" = 20) + list_reagents = list("nicotine" = 10) /obj/item/reagent_containers/food/pill/patch/jestosterone name = "jestosterone patch" desc = "Helps with brute injuries if the affected person is a clown, otherwise inflicts various annoying effects." icon_state = "bandaid_clown" - list_reagents = list("jestosterone" = 30) + list_reagents = list("jestosterone" = 20) diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 2e7c668a83f..d907e46247e 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -607,6 +607,14 @@ build_path = /obj/item/reagent_containers/hypospray/safety category = list("initial", "Medical") +/datum/design/automender + name = "Auto-mender" + id = "automender" + build_type = AUTOLATHE + materials = list(MAT_METAL = 1000, MAT_GLASS = 1000) + build_path = /obj/item/reagent_containers/applicator + category = list("initial", "Medical") + /datum/design/prox_sensor name = "Proximity Sensor" id = "prox_sensor" @@ -914,4 +922,3 @@ materials = list(MAT_METAL = 40000) build_path = /obj/item/golem_shell category = list("Imported") - diff --git a/icons/goonstation/objects/objects.dmi b/icons/goonstation/objects/objects.dmi index 8dadb400668ccb464d85f16b00295be61acccfa8..2707ce8b9b81606e88f29d9c830f7f49a0db0427 100644 GIT binary patch literal 2059 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 literal 1002 zcmVV=-0C=2r%CQQAFce1NIrk}kbT75-nnfa#LEj-XSCgSB++6ha9RxSGbKq;y z52K&qCQlnn&Hn<6&*MpE&ruUB-Y+tV^P2RWszDhR%__{LArrGySaf6-2|qsjQjxWO zLn$nGw8bzxxXIH2@K+|`(GY1M0009iNklTY#B#B8$bY`U{eSVHr`GP`fyzJ2eTH*aQ^TUuJeaYlpF4mgcE0Zu#MH0lI6?SRv$ zc>*L!B9bH#yYF+gwhYShjA^h_Q};Mldrfv72?YIAN1oqZWOl+TWO;_1KQ~0}>+0@? zEYA>D5^QBaAm}IVaTPtD4xM~!ZwJa#S5-(T4L<%h4wuWV^{J|Y(b3xgfN1m;QzkHH zKp^NRywr+J2*_aH(CY#(wIUGolWLG~^~D2BpS*Oa%BmP|ZW%5Qd zO7%0LeY8!f2*~!cV*JrHym`2)lX-hPiw~c_0RTR5jm);oE`w&l13-_bgL=`>^4^mt z!K82=h9?&n(A1OG!gdX4fBZ%FOe=u9U~|R_%z_^p93aVLl6jS>+F{6;5v2vu zE)+$<^2#bF2m-ZL6ouJlRR}N!@7?eq8&fK>MGl9<=seLu1VPZX;c(cNy|Pol?x=a8 zpZk>vKAld%=i{|3_$Sud!sw^dDJHvR3CPCSQ;LR4o(qPDhmlAmsB$}~ss90zBoR?8 z?g3Oqh09&sV8!EcghHX}ABUYpxxYWG!2>l&K&4Uh{{)YUIsr~Q;56z4IPHMbIQ9hm Y1_MQ2+n{ diff --git a/nano/templates/chem_master.tmpl b/nano/templates/chem_master.tmpl index 1d040d52af7..e91a43d357b 100644 --- a/nano/templates/chem_master.tmpl +++ b/nano/templates/chem_master.tmpl @@ -56,7 +56,7 @@ - {{:helper.link('Create patch (40u max)', 'arrow-right', {'createpatch': 1})}} + {{:helper.link('Create patch (30u max)', 'arrow-right', {'createpatch': 1})}} {{:helper.link('Multiple', 'arrow-right', {'createpatch_multiple': 1})}} diff --git a/paradise.dme b/paradise.dme index ade9dec2048..7324ffaf044 100644 --- a/paradise.dme +++ b/paradise.dme @@ -2314,6 +2314,7 @@ #include "code\modules\reagents\chemistry\recipes\pyrotechnics.dm" #include "code\modules\reagents\chemistry\recipes\slime_extracts.dm" #include "code\modules\reagents\chemistry\recipes\toxins.dm" +#include "code\modules\reagents\reagent_containers\applicator.dm" #include "code\modules\reagents\reagent_containers\borghydro.dm" #include "code\modules\reagents\reagent_containers\bottle.dm" #include "code\modules\reagents\reagent_containers\dropper.dm" diff --git a/sound/goonstation/items/mender.ogg b/sound/goonstation/items/mender.ogg new file mode 100644 index 0000000000000000000000000000000000000000..93114a2c74c6a2fc85fa52ab06892076b53dabd9 GIT binary patch literal 15335 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

x#Uc1Cn zqE{9NzCE4om@K|LIPX%=e+wD1>fC)U)xaBW4emWmZ?6ej0boDXKRu-82gD?6MSt%! z3j#Ja>(KFxEMpU`I@pX*d4M{pqlljDNYkv>?%h*1#E4pT|MSnVZelB8@8XOPzo=+!Drxvt844r&8(C#LmrxB=k`n%-%R{R`kiF=y| z8``>P`L#{@qg)<+AMB^R+utND!Wg`ciXKVF?1!N}9vausRo)yeC?*1?IkLworyNi& zX4&Ip{C1X>NeR|r26@hQ^XVk&>5p-Y_eb|b+d^NaJ~`63= zbE$T(ZY`%bE;y~L#on5>II|t}y)WBokydAQ_Z7KQ3adzd5^KaN=~onBik`pu%B4dF zlfkgaFZ18YO(A?--0{eyX9PguI5iXyILeN8c^cKf_})%=Y9^0iUrF$Vov_|jO*?#7 zXnzQ~neC38I5XHtecyFoPR*0g2{S+eXRWc^J$J z{LO^}wv8ONwz?e9IMq9ssRx^&b6jRnhR2f@;&jHwe%cLZX%Rzv+>o=0m9FJ?5{eCa zCUgi|HVa01*aIys(Yeo4fxo`7s021Wt6j|6+c52Pd8T?jdt~&q{bACe?;g%3kL1Ll zpN-k%h6eG|?~ST5)l4F;D?gb$CJiHpUBBqAOmS8flABvo%X_4HST?@ayk(nsx(@W-GiL#BCwS@0q}68QPL!+~lG|N*-9wsG9an_K|{^Q6|!y~4bpVRfn zrGrPvC)>gud_@=hIVQ}nmj~X}yGxEqFJA1;QHnR&P<5!O(0o@!Gd8-bqCL`~Zm`Ra zpm?iK?BURkbW!I;=Glt#|pY&A$<+le0Re2h|l#OrQ7#p&5nzDY| z^FcZS>hN&e0YOxB)}CWMVb3n)#j;45J#~R9&SlDgm{%}`_i|(l>?Q?j$6A)uVAp z8LM4at-5L1#>mIFHhRsP?3rEimI@%ie}^4x7hU%L0}uFW8)vQm=I{C6eEhenKOb2K zbC3jOH_d2%wRj>Pg)JV%8KKKlynyG13EJIX z4atYhvVMH)W>tLJllm)wNiW0Yc4sU=HAJw6lvao4VH{ZFRYd!Vi;(@IwCv|Cewu)u ztF1F;?%ly5!^%0>^TyJBmSo#|nq+%#^HYB@(ka#yZ)P?9C+-UtOe#fVgBACN32@9` zx~qnyKpCw@P|`Z-$TF9Al8#Nr+@qjX_Ve(ugEk zc<3ue(4WrScyT}?`31KXgtXw}8`YgK_V;n%`=Beh6=Y$L-?9i>f7Ou}Lf%m+qcYsl z>U}^q$Bq+0+Y9Y=zD3?WMGfA`Uj>B1{R;asZBZEuXzrCTbfA}+gpo-W9nkX|o^Ur! zTfVKMz`e!B!mI-&3Jcc`!@m&}`2kwS|0@^^3Yy;tZZb0wGl9X6Q!EyjMIWE>D9sP* z={H1LtT8NKs-a9e+BYcv?`>}KlaQc+@2Ao!w$_p*I%58vnV(|I^RfP!EsGA}5 zzZc9`f-5M1pDt>pi0M2R(=e?Z;pHJslO$^FZGtw2S%sBapDEbpJWfe3=l1jWvZcOmaG6e{kN7bJu{z2y- zSZ~nz3u`2CECf&h!s6Pc!WH$yoMhn<@ThMjH-q*sp8s!&WF00JCKfp8s7G|#qhrMR zzcoShn9!Iixv3QXQy~u!4;Cf`Kvs^)^SQCQuYtQFG)$p1A}y>v%=16D1z~4`!*9MZ zK_^oc=!9uI3AokOKWy-T5pY-(fvehOLCL{aNv+RXy5Pi`)IK|)ul&<0a2fem`hNiH CRugRi literal 0 HcmV?d00001 diff --git a/sound/goonstation/items/mender2.ogg b/sound/goonstation/items/mender2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..5b994b105208823b0d2e55310fa8ba832556fd25 GIT binary patch literal 15462 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 NOaHVATt@zt{vXkNLJR-^ literal 0 HcmV?d00001 From e79ca9fcac21f6d75f6ee23de88ca786061ab401 Mon Sep 17 00:00:00 2001 From: SteelSlayer Date: Sat, 2 May 2020 22:18:30 -0500 Subject: [PATCH 19/61] crossbow cell fix --- .../projectiles/guns/throw/crossbow.dm | 42 ++++++++++--------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/code/modules/projectiles/guns/throw/crossbow.dm b/code/modules/projectiles/guns/throw/crossbow.dm index ca626534320..08fc39271da 100644 --- a/code/modules/projectiles/guns/throw/crossbow.dm +++ b/code/modules/projectiles/guns/throw/crossbow.dm @@ -94,25 +94,29 @@ user.visible_message("[usr] draws back the string of [src]!","[src] clunks as you draw the string to its maximum tension!!") update_icon() -/obj/item/gun/throw/crossbow/attackby(obj/item/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/stock_parts/cell)) - if(!cell) - user.drop_item() - W.loc = src - cell = W - to_chat(user, "You jam [cell] into [src] and wire it to the firing coil.") - process_chamber() - else - to_chat(user, "[src] already has a cell installed.") - else if(istype(W, /obj/item/screwdriver)) - if(cell) - cell.loc = get_turf(src) - to_chat(user, "You jimmy [cell] out of [src] with [W].") - cell = null - else - to_chat(user, "[src] doesn't have a cell installed.") - else - ..() +/obj/item/gun/throw/crossbow/attackby(obj/item/I, mob/user, params) + if(!istype(I, /obj/item/stock_parts/cell)) + return ..() + + if(cell) + to_chat(user, "[src] already has a cell installed.") + return + + user.drop_item() + I.loc = src + cell = I + to_chat(user, "You jam [cell] into [src] and wire it to the firing coil.") + process_chamber() + +/obj/item/gun/throw/crossbow/screwdriver_act(mob/user, obj/item/I) + . = ..() + if(!cell) + to_chat(user, "[src] doesn't have a cell installed.") + return + + cell.forceMove(get_turf(src)) + to_chat(user, "You jimmy [cell] out of [src] with [I].") + cell = null /obj/item/gun/throw/crossbow/verb/set_tension() set name = "Adjust Tension" From e9ae6f1bd086d11d23f5c53883eaa99326f5b44b Mon Sep 17 00:00:00 2001 From: Mars Date: Sun, 3 May 2020 11:07:22 +0200 Subject: [PATCH 20/61] Refactor slogan_list --- .../MetaStation/MetaStation.v41A.II.dmm | 2 +- _maps/map_files/cyberiad/z6.dmm | 12 ++--- code/game/machinery/vending.dm | 50 ++++++++----------- .../ruins/lavalandruin_code/syndicate_base.dm | 2 +- 4 files changed, 30 insertions(+), 36 deletions(-) diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm index 864981494ac..5a880549b8a 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm @@ -2017,7 +2017,7 @@ /obj/machinery/vending/sustenance{ desc = "A vending machine normally reserved for work camps."; name = "\improper sustenance vendor"; - product_slogans = "Enjoy your meal.;Enough calories to support any worker." + slogan_list = list("Enjoy your meal.","Enough calories to support any worker.") }, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" diff --git a/_maps/map_files/cyberiad/z6.dmm b/_maps/map_files/cyberiad/z6.dmm index 09453cfe542..e5e00b52b84 100644 --- a/_maps/map_files/cyberiad/z6.dmm +++ b/_maps/map_files/cyberiad/z6.dmm @@ -761,7 +761,7 @@ /area/derelict/bridge) "bK" = ( /obj/machinery/vending/cigarette/free{ - product_slogans = "Just remember! No capitalist.;Best enjoyed with Vodka!.;Smoke!;Nine out of ten USSP scientists agree, smoking reduces stress!;There's no cigarette like a Russian cigarette!;Cigarettes! Now with 100% less capitalism." + slogan_list = list("Just remember! No capitalist.","Best enjoyed with Vodka!.","Smoke!","Nine out of ten USSP scientists agree, smoking reduces stress!","There's no cigarette like a Russian cigarette!","Cigarettes! Now with 100% less capitalism.") }, /turf/simulated/floor/plasteel{ dir = 9; @@ -1441,7 +1441,7 @@ pixel_y = 32 }, /obj/machinery/vending/cigarette/free{ - product_slogans = "Just remember! No capitalist.;Best enjoyed with Vodka!.;Smoke!;Nine out of ten USSP scientists agree, smoking reduces stress!;There's no cigarette like a Russian cigarette!;Cigarettes! Now with 100% less capitalism." + slogan_list = list("Just remember! No capitalist.","Best enjoyed with Vodka!.","Smoke!","Nine out of ten USSP scientists agree, smoking reduces stress!","There's no cigarette like a Russian cigarette!","Cigarettes! Now with 100% less capitalism.") }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -4163,7 +4163,7 @@ name = "suspicious button" }, /obj/machinery/vending/cigarette/free{ - product_slogans = "Just remember! No capitalist.;Best enjoyed with Vodka!.;Smoke!;Nine out of ten USSP scientists agree, smoking reduces stress!;There's no cigarette like a Russian cigarette!;Cigarettes! Now with 100% less capitalism." + slogan_list = list("Just remember! No capitalist.","Best enjoyed with Vodka!.","Smoke!","Nine out of ten USSP scientists agree, smoking reduces stress!","There's no cigarette like a Russian cigarette!","Cigarettes! Now with 100% less capitalism.") }, /turf/simulated/floor/wood{ broken = 1; @@ -5186,7 +5186,7 @@ "kW" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/vending/cigarette/free{ - product_slogans = "Just remember! No capitalist.;Best enjoyed with Vodka!.;Smoke!;Nine out of ten USSP scientists agree, smoking reduces stress!;There's no cigarette like a Russian cigarette!;Cigarettes! Now with 100% less capitalism." + slogan_list = list("Just remember! No capitalist.","Best enjoyed with Vodka!.","Smoke!","Nine out of ten USSP scientists agree, smoking reduces stress!","There's no cigarette like a Russian cigarette!","Cigarettes! Now with 100% less capitalism.") }, /turf/simulated/floor/plasteel{ dir = 5; @@ -9114,7 +9114,7 @@ }) "tY" = ( /obj/machinery/vending/cigarette/free{ - product_slogans = "Just remember! No capitalist.;Best enjoyed with Vodka!.;Smoke!;Nine out of ten USSP scientists agree, smoking reduces stress!;There's no cigarette like a Russian cigarette!;Cigarettes! Now with 100% less capitalism." + slogan_list = list("Just remember! No capitalist.","Best enjoyed with Vodka!.","Smoke!","Nine out of ten USSP scientists agree, smoking reduces stress!","There's no cigarette like a Russian cigarette!","Cigarettes! Now with 100% less capitalism.") }, /turf/simulated/floor/plasteel{ icon_state = "bar" @@ -10678,7 +10678,7 @@ /area/derelict/arrival) "xe" = ( /obj/machinery/vending/cigarette/free{ - product_slogans = "Just remember! No capitalist.;Best enjoyed with Vodka!.;Smoke!;Nine out of ten USSP scientists agree, smoking reduces stress!;There's no cigarette like a Russian cigarette!;Cigarettes! Now with 100% less capitalism." + slogan_list = list("Just remember! No capitalist.","Best enjoyed with Vodka!.","Smoke!","Nine out of ten USSP scientists agree, smoking reduces stress!","There's no cigarette like a Russian cigarette!","Cigarettes! Now with 100% less capitalism.") }, /turf/simulated/floor/plasteel{ dir = 2; diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index e3b1322f34b..9a6b9f59df3 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -53,13 +53,12 @@ var/list/coin_records = list() // // Variables used to initialize advertising - var/product_slogans = "" //String of slogans separated by semicolons, optional var/product_ads = "" //String of small ad messages in the vending screen - random chance var/list/ads_list = list() // Stuff relating vocalizations - var/list/slogan_list = list() + var/list/slogan_list = list() //List of slogans the vendor will say, optional var/vend_reply //Thank you for shopping! var/shut_up = 0 //Stop spouting those godawful pitches! ///can we access the hidden inventory? @@ -95,17 +94,12 @@ build_inventory(products, product_records) build_inventory(contraband, hidden_records) build_inventory(premium, coin_records) - if(product_slogans) - slogan_list += splittext(product_slogans, ";") - + if(slogan_list.len > 0) // So not all machines speak at the exact same time. // The first time this machine says something will be at slogantime + this random value, - // so if slogantime is 10 minutes, it will say it at somewhere between 10 and 20 minutes after the machine is crated. + // so if slogantime is 10 minutes, it will say it at somewhere between 10 and 20 minutes after the machine is created. last_slogan = world.time + rand(0, slogan_delay) - if(product_ads) - ads_list += splittext(product_ads, ";") - power_change() /obj/machinery/vending/Destroy() @@ -875,7 +869,7 @@ /obj/item/reagent_containers/food/drinks/ice = 9) contraband = list(/obj/item/reagent_containers/food/drinks/tea = 10) vend_delay = 15 - product_slogans = "I hope nobody asks me for a bloody cup o' tea...;Alcohol is humanity's friend. Would you abandon a friend?;Quite delighted to serve you!;Is nobody thirsty on this station?" + slogan_list = list("I hope nobody asks me for a bloody cup o' tea...","Alcohol is humanity's friend. Would you abandon a friend?","Quite delighted to serve you!","Is nobody thirsty on this station?") product_ads = "Drink up!;Booze is good for you!;Alcohol is humanity's best friend.;Quite delighted to serve you!;Care for a nice, cold beer?;Nothing cures you like booze!;Have a sip!;Have a drink!;Have a beer!;Beer is good for you!;Only the finest alcohol!;Best quality booze since 2053!;Award-winning wine!;Maximum alcohol!;Man loves beer.;A toast for progress!" refill_canister = /obj/item/vending_refill/boozeomat @@ -962,7 +956,7 @@ /obj/machinery/vending/snack name = "\improper Getmore Chocolate Corp" desc = "A snack machine courtesy of the Getmore Chocolate Corporation, based out of Mars." - product_slogans = "Try our new nougat bar!;Twice the calories for half the price!" + slogan_list = list("Try our new nougat bar!","Twice the calories for half the price!") product_ads = "The healthiest!;Award-winning chocolate bars!;Mmm! So good!;Oh my god it's so juicy!;Have a snack.;Snacks are good for you!;Have some more Getmore!;Best quality snacks straight from mars.;We love chocolate!;Try our new jerky!" icon_state = "snack" products = list(/obj/item/reagent_containers/food/snacks/candy/candybar = 6,/obj/item/reagent_containers/food/drinks/dry_ramen = 6,/obj/item/reagent_containers/food/snacks/chips =6, @@ -989,7 +983,7 @@ /obj/machinery/vending/chinese name = "\improper Mr. Chang" desc = "A self-serving Chinese food machine, for all your Chinese food needs." - product_slogans = "Taste 5000 years of culture!;Mr. Chang, approved for safe consumption in over 10 sectors!;Chinese food is great for a date night, or a lonely night!;You can't go wrong with Mr. Chang's authentic Chinese food!" + slogan_list = list("Taste 5000 years of culture!","Mr. Chang, approved for safe consumption in over 10 sectors!","Chinese food is great for a date night, or a lonely night!","You can't go wrong with Mr. Chang's authentic Chinese food!") icon_state = "chang" products = list(/obj/item/reagent_containers/food/snacks/chinese/chowmein = 6, /obj/item/reagent_containers/food/snacks/chinese/tao = 6, /obj/item/reagent_containers/food/snacks/chinese/sweetsourchickenball = 6, /obj/item/reagent_containers/food/snacks/chinese/newdles = 6, /obj/item/reagent_containers/food/snacks/chinese/rice = 6) @@ -1013,7 +1007,7 @@ name = "\improper Robust Softdrinks" desc = "A soft drink vendor provided by Robust Industries, LLC." icon_state = "Cola_Machine" - product_slogans = "Robust Softdrinks: More robust than a toolbox to the head!" + slogan_list = list("Robust Softdrinks: More robust than a toolbox to the head!") product_ads = "Refreshing!;Hope you're thirsty!;Over 1 million drinks sold!;Thirsty? Why not cola?;Please, have a drink!;Drink up!;The best drinks in space." products = list(/obj/item/reagent_containers/food/drinks/cans/cola = 10,/obj/item/reagent_containers/food/drinks/cans/space_mountain_wind = 10, /obj/item/reagent_containers/food/drinks/cans/dr_gibb = 10,/obj/item/reagent_containers/food/drinks/cans/starkist = 10, @@ -1040,7 +1034,7 @@ /obj/machinery/vending/cart name = "\improper PTech" desc = "Cartridges for PDA's." - product_slogans = "Carts to go!" + slogan_list = list("Carts to go!") icon_state = "cart" icon_deny = "cart-deny" products = list(/obj/item/pda =10,/obj/item/cartridge/mob_hunt_game = 25,/obj/item/cartridge/medical = 10,/obj/item/cartridge/chemistry = 10, @@ -1069,7 +1063,7 @@ desc = "An overwhelming amount of ancient patriotism washes over you just by looking at the machine." icon_state = "liberationstation" req_access_txt = "1" - product_slogans = "Liberation Station: Your one-stop shop for all things second amendment!;Be a patriot today, pick up a gun!;Quality weapons for cheap prices!;Better dead than red!" + slogan_list = list("Liberation Station: Your one-stop shop for all things second amendment!","Be a patriot today, pick up a gun!","Quality weapons for cheap prices!","Better dead than red!") product_ads = "Float like an astronaut, sting like a bullet!;Express your second amendment today!;Guns don't kill people, but you can!;Who needs responsibilities when you have guns?" vend_reply = "Remember the name: Liberation Station!" products = list(/obj/item/gun/projectile/automatic/pistol/deagle/gold = 2,/obj/item/gun/projectile/automatic/pistol/deagle/camo = 2, @@ -1086,7 +1080,7 @@ name = "\improper Syndicate Donksoft Toy Vendor" desc = "An ages 8 and up approved vendor that dispenses toys. If you were to find the right wires, you can unlock the adult mode setting!" icon_state = "syndi" - product_slogans = "Get your cool toys today!;Trigger a valid hunter today!;Quality toy weapons for cheap prices!;Give them to HoPs for all access!;Give them to HoS to get permabrigged!" + slogan_list = list("Get your cool toys today!","Trigger a valid hunter today!","Quality toy weapons for cheap prices!","Give them to HoPs for all access!","Give them to HoS to get permabrigged!") product_ads = "Feel robust with your toys!;Express your inner child today!;Toy weapons don't kill people, but valid hunters do!;Who needs responsibilities when you have toy weapons?;Make your next murder FUN!" vend_reply = "Come back for more!" products = list(/obj/item/gun/projectile/automatic/toy = 10, @@ -1112,7 +1106,7 @@ /obj/machinery/vending/cigarette name = "cigarette machine" desc = "If you want to get cancer, might as well do it in style." - product_slogans = "Space cigs taste good like a cigarette should.;I'd rather toolbox than switch.;Smoke!;Don't believe the reports - smoke today!" + slogan_list = list("Space cigs taste good like a cigarette should.","I'd rather toolbox than switch.","Smoke!","Don't believe the reports - smoke today!") product_ads = "Probably not bad for you!;Don't believe the scientists!;It's good for you!;Don't quit, buy more!;Smoke!;Nicotine heaven.;Best cigarettes since 2150.;Award-winning cigs." vend_delay = 34 icon_state = "cigs" @@ -1142,7 +1136,7 @@ name = "\improper ShadyCigs Ultra" desc = "Now with extra premium products!" product_ads = "Probably not bad for you!;Dope will get you through times of no money better than money will get you through times of no dope!;It's good for you!" - product_slogans = "Turn on, tune in, drop out!;Better living through chemistry!;Toke!;Don't forget to keep a smile on your lips and a song in your heart!" + slogan_list = list("Turn on, tune in, drop out!","Better living through chemistry!","Toke!","Don't forget to keep a smile on your lips and a song in your heart!") products = list(/obj/item/storage/fancy/cigarettes = 5, /obj/item/storage/fancy/cigarettes/cigpack_uplift = 3, /obj/item/storage/fancy/cigarettes/cigpack_robust = 3, @@ -1263,7 +1257,7 @@ /obj/machinery/vending/hydronutrients name = "\improper NutriMax" desc = "A plant nutrients vendor" - product_slogans = "Aren't you glad you don't have to fertilize the natural way?;Now with 50% less stink!;Plants are people too!" + slogan_list = list("Aren't you glad you don't have to fertilize the natural way?","Now with 50% less stink!","Plants are people too!") product_ads = "We like plants!;Don't you want some?;The greenest thumbs ever.;We like big plants.;Soft soil..." icon_state = "nutri" icon_deny = "nutri-deny" @@ -1284,7 +1278,7 @@ /obj/machinery/vending/hydroseeds name = "\improper MegaSeed Servitor" desc = "When you need seeds fast!" - product_slogans = "THIS'S WHERE TH' SEEDS LIVE! GIT YOU SOME!;Hands down the best seed selection on the station!;Also certain mushroom varieties available, more for experts! Get certified today!" + slogan_list = list("THIS'S WHERE TH' SEEDS LIVE! GIT YOU SOME!","Hands down the best seed selection on the station!","Also certain mushroom varieties available, more for experts! Get certified today!") product_ads = "We like plants!;Grow some crops!;Grow, baby, growww!;Aw h'yeah son!" icon_state = "seeds" products = list(/obj/item/seeds/aloe =3, @@ -1354,7 +1348,7 @@ name = "\improper MagiVend" desc = "A magic vending machine." icon_state = "MagiVend" - product_slogans = "Sling spells the proper way with MagiVend!;Be your own Houdini! Use MagiVend!" + slogan_list = list("Sling spells the proper way with MagiVend!","Be your own Houdini! Use MagiVend!") vend_delay = 15 vend_reply = "Have an enchanted evening!" product_ads = "FJKLFJSD;AJKFLBJAKL;1234 LOONIES LOL!;>MFW;Kill them fuckers!;GET DAT FUKKEN DISK;HONK!;EI NATH;Destroy the station!;Admin conspiracies since forever!;Space-time bending hardware!" @@ -1377,7 +1371,7 @@ desc = "A vending machine for costumes." icon_state = "theater" icon_deny = "theater-deny" - product_slogans = "Dress for success!;Suited and booted!;It's show time!;Why leave style up to fate? Use AutoDrobe!" + slogan_list = list("Dress for success!","Suited and booted!","It's show time!","Why leave style up to fate? Use AutoDrobe!") vend_delay = 15 vend_reply = "Thank you for using AutoDrobe!" products = list(/obj/item/clothing/suit/chickensuit = 1, @@ -1646,7 +1640,7 @@ /obj/machinery/vending/sustenance name = "\improper Sustenance Vendor" desc = "A vending machine which vends food, as required by section 47-C of the NT's Prisoner Ethical Treatment Agreement." - product_slogans = "Enjoy your meal.;Enough calories to support strenuous labor." + slogan_list = list("Enjoy your meal.","Enough calories to support strenuous labor.") product_ads = "The healthiest!;Award-winning chocolate bars!;Mmm! So good!;Oh my god it's so juicy!;Have a snack.;Snacks are good for you!;Have some more Getmore!;Best quality snacks straight from mars.;We love chocolate!;Try our new jerky!" icon_state = "sustenance" products = list(/obj/item/reagent_containers/food/snacks/tofu = 24, @@ -1734,7 +1728,7 @@ /obj/machinery/vending/syndicigs name = "\improper Suspicious Cigarette Machine" desc = "Smoke 'em if you've got 'em." - product_slogans = "Space cigs taste good like a cigarette should.;I'd rather toolbox than switch.;Smoke!;Don't believe the reports - smoke today!" + slogan_list = list("Space cigs taste good like a cigarette should.","I'd rather toolbox than switch.","Smoke!","Don't believe the reports - smoke today!") product_ads = "Probably not bad for you!;Don't believe the scientists!;It's good for you!;Don't quit, buy more!;Smoke!;Nicotine heaven.;Best cigarettes since 2150.;Award-winning cigs." vend_delay = 34 icon_state = "cigs" @@ -1743,7 +1737,7 @@ /obj/machinery/vending/syndisnack name = "\improper Getmore Chocolate Corp" desc = "A modified snack machine courtesy of the Getmore Chocolate Corporation, based out of Mars" - product_slogans = "Try our new nougat bar!;Twice the calories for half the price!" + slogan_list = list("Try our new nougat bar!","Twice the calories for half the price!") product_ads = "The healthiest!;Award-winning chocolate bars!;Mmm! So good!;Oh my god it's so juicy!;Have a snack.;Snacks are good for you!;Have some more Getmore!;Best quality snacks straight from mars.;We love chocolate!;Try our new jerky!" icon_state = "snack" products = list(/obj/item/reagent_containers/food/snacks/chips =6,/obj/item/reagent_containers/food/snacks/sosjerky = 6, @@ -1754,7 +1748,7 @@ name = "\improper ClothesMate" //renamed to make the slogan rhyme desc = "A vending machine for clothing." icon_state = "clothes" - product_slogans = "Dress for success!;Prepare to look swagalicious!;Look at all this free swag!;Why leave style up to fate? Use the ClothesMate!" + slogan_list = list("Dress for success!","Prepare to look swagalicious!","Look at all this free swag!","Why leave style up to fate? Use the ClothesMate!") vend_delay = 15 vend_reply = "Thank you for using the ClothesMate!" products = list(/obj/item/clothing/head/that = 2, @@ -1855,7 +1849,7 @@ /obj/machinery/vending/artvend name = "\improper ArtVend" desc = "A vending machine for art supplies." - product_slogans = "Stop by for all your artistic needs!;Color the floors with crayons, not blood!;Don't be a starving artist, use ArtVend. ;Don't fart, do art!" + slogan_list = list("Stop by for all your artistic needs!","Color the floors with crayons, not blood!","Don't be a starving artist, use ArtVend. ","Don't fart, do art!") product_ads = "Just like Kindergarten!;Now with 1000% more vibrant colors!;Screwing with the janitor was never so easy!;Creativity is at the heart of every spessman." vend_delay = 15 icon_state = "artvend" @@ -1870,7 +1864,7 @@ /obj/machinery/vending/crittercare name = "\improper CritterCare" desc = "A vending machine for pet supplies." - product_slogans = "Stop by for all your animal's needs!;Cuddly pets deserve a stylish collar!;Pets in space, what could be more adorable?;Freshest fish eggs in the system!;Rocks are the perfect pet, buy one today!" + slogan_list = list("Stop by for all your animal's needs!","Cuddly pets deserve a stylish collar!","Pets in space, what could be more adorable?","Freshest fish eggs in the system!","Rocks are the perfect pet, buy one today!") product_ads = "House-training costs extra!;Now with 1000% more cat hair!;Allergies are a sign of weakness!;Dogs are man's best friend. Remember that Vulpkanin!; Heat lamps for Unathi!; Vox-y want a cracker?" vend_delay = 15 icon_state = "crittercare" diff --git a/code/modules/ruins/lavalandruin_code/syndicate_base.dm b/code/modules/ruins/lavalandruin_code/syndicate_base.dm index 532e50831e5..d053e139f61 100644 --- a/code/modules/ruins/lavalandruin_code/syndicate_base.dm +++ b/code/modules/ruins/lavalandruin_code/syndicate_base.dm @@ -17,7 +17,7 @@ /obj/item/grenade/chem_grenade/cryo = 5, /obj/item/grenade/chem_grenade/adv_release = 5, /obj/item/reagent_containers/food/drinks/bottle/holywater = 1) - product_slogans = "It's not pyromania if you're getting paid!;You smell that? Plasma, son. Nothing else in the world smells like that.;I love the smell of Plasma in the morning." + slogan_list = list("It's not pyromania if you're getting paid!","You smell that? Plasma, son. Nothing else in the world smells like that.","I love the smell of Plasma in the morning.") resistance_flags = FIRE_PROOF // Spawners From 0a582806b0f05434860b225c907b881be809dac5 Mon Sep 17 00:00:00 2001 From: Mars Date: Sun, 3 May 2020 11:26:18 +0200 Subject: [PATCH 21/61] refactor ads_list --- code/game/machinery/vending.dm | 58 ++++++++++++++++------------------ 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 9a6b9f59df3..d8bec8acd62 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -52,10 +52,8 @@ var/list/hidden_records = list() var/list/coin_records = list() - // // Variables used to initialize advertising - var/product_ads = "" //String of small ad messages in the vending screen - random chance - var/list/ads_list = list() + var/list/ads_list = list() //Small ad messages in the vending screen - random chance, TODO: implementation // Stuff relating vocalizations var/list/slogan_list = list() //List of slogans the vendor will say, optional @@ -827,7 +825,7 @@ products = list( /obj/item/assembly/prox_sensor = 5,/obj/item/assembly/igniter = 3,/obj/item/assembly/signaler = 4, /obj/item/wirecutters = 1, /obj/item/cartridge/signal = 4) contraband = list(/obj/item/flashlight = 5,/obj/item/assembly/timer = 2, /obj/item/assembly/voice = 2, /obj/item/assembly/health = 2) - product_ads = "Only the finest!;Have some tools.;The most robust equipment.;The finest gear in space!" + ads_list = list("Only the finest!","Have some tools.","The most robust equipment.","The finest gear in space!") refill_canister = /obj/item/vending_refill/assist /obj/machinery/vending/assist/Initialize(mapload) @@ -870,7 +868,7 @@ contraband = list(/obj/item/reagent_containers/food/drinks/tea = 10) vend_delay = 15 slogan_list = list("I hope nobody asks me for a bloody cup o' tea...","Alcohol is humanity's friend. Would you abandon a friend?","Quite delighted to serve you!","Is nobody thirsty on this station?") - product_ads = "Drink up!;Booze is good for you!;Alcohol is humanity's best friend.;Quite delighted to serve you!;Care for a nice, cold beer?;Nothing cures you like booze!;Have a sip!;Have a drink!;Have a beer!;Beer is good for you!;Only the finest alcohol!;Best quality booze since 2053!;Award-winning wine!;Maximum alcohol!;Man loves beer.;A toast for progress!" + ads_list = list("Drink up!","Booze is good for you!","Alcohol is humanity's best friend.","Quite delighted to serve you!","Care for a nice, cold beer?","Nothing cures you like booze!","Have a sip!","Have a drink!","Have a beer!","Beer is good for you!","Only the finest alcohol!","Best quality booze since 2053!","Award-winning wine!","Maximum alcohol!","Man loves beer.","A toast for progress!") refill_canister = /obj/item/vending_refill/boozeomat /obj/machinery/vending/boozeomat/syndicate_access @@ -889,7 +887,7 @@ /obj/machinery/vending/coffee name = "\improper Hot Drinks machine" desc = "A vending machine which dispenses hot drinks." - product_ads = "Have a drink!;Drink up!;It's good for you!;Would you like a hot joe?;I'd kill for some coffee!;The best beans in the galaxy.;Only the finest brew for you.;Mmmm. Nothing like a coffee.;I like coffee, don't you?;Coffee helps you work!;Try some tea.;We hope you like the best!;Try our new chocolate!;Admin conspiracies" + ads_list = list("Have a drink!","Drink up!","It's good for you!","Would you like a hot joe?","I'd kill for some coffee!","The best beans in the galaxy.","Only the finest brew for you.","Mmmm. Nothing like a coffee.","I like coffee, don't you?","Coffee helps you work!","Try some tea.","We hope you like the best!","Try our new chocolate!","Admin conspiracies") icon_state = "coffee" icon_vend = "coffee-vend" item_slot = TRUE @@ -957,7 +955,7 @@ name = "\improper Getmore Chocolate Corp" desc = "A snack machine courtesy of the Getmore Chocolate Corporation, based out of Mars." slogan_list = list("Try our new nougat bar!","Twice the calories for half the price!") - product_ads = "The healthiest!;Award-winning chocolate bars!;Mmm! So good!;Oh my god it's so juicy!;Have a snack.;Snacks are good for you!;Have some more Getmore!;Best quality snacks straight from mars.;We love chocolate!;Try our new jerky!" + ads_list = list("The healthiest!","Award-winning chocolate bars!","Mmm! So good!","Oh my god it's so juicy!","Have a snack.","Snacks are good for you!","Have some more Getmore!","Best quality snacks straight from mars.","We love chocolate!","Try our new jerky!") icon_state = "snack" products = list(/obj/item/reagent_containers/food/snacks/candy/candybar = 6,/obj/item/reagent_containers/food/drinks/dry_ramen = 6,/obj/item/reagent_containers/food/snacks/chips =6, /obj/item/reagent_containers/food/snacks/sosjerky = 6,/obj/item/reagent_containers/food/snacks/no_raisin = 6,/obj/item/reagent_containers/food/snacks/pistachios =6, @@ -1008,7 +1006,7 @@ desc = "A soft drink vendor provided by Robust Industries, LLC." icon_state = "Cola_Machine" slogan_list = list("Robust Softdrinks: More robust than a toolbox to the head!") - product_ads = "Refreshing!;Hope you're thirsty!;Over 1 million drinks sold!;Thirsty? Why not cola?;Please, have a drink!;Drink up!;The best drinks in space." + ads_list = list("Refreshing!","Hope you're thirsty!","Over 1 million drinks sold!","Thirsty? Why not cola?","Please, have a drink!","Drink up!","The best drinks in space.") products = list(/obj/item/reagent_containers/food/drinks/cans/cola = 10,/obj/item/reagent_containers/food/drinks/cans/space_mountain_wind = 10, /obj/item/reagent_containers/food/drinks/cans/dr_gibb = 10,/obj/item/reagent_containers/food/drinks/cans/starkist = 10, /obj/item/reagent_containers/food/drinks/cans/space_up = 10,/obj/item/reagent_containers/food/drinks/cans/grape_juice = 10) @@ -1064,7 +1062,7 @@ icon_state = "liberationstation" req_access_txt = "1" slogan_list = list("Liberation Station: Your one-stop shop for all things second amendment!","Be a patriot today, pick up a gun!","Quality weapons for cheap prices!","Better dead than red!") - product_ads = "Float like an astronaut, sting like a bullet!;Express your second amendment today!;Guns don't kill people, but you can!;Who needs responsibilities when you have guns?" + ads_list = list("Float like an astronaut, sting like a bullet!","Express your second amendment today!","Guns don't kill people, but you can!","Who needs responsibilities when you have guns?") vend_reply = "Remember the name: Liberation Station!" products = list(/obj/item/gun/projectile/automatic/pistol/deagle/gold = 2,/obj/item/gun/projectile/automatic/pistol/deagle/camo = 2, /obj/item/gun/projectile/automatic/pistol/m1911 = 2,/obj/item/gun/projectile/automatic/proto = 2, @@ -1081,7 +1079,7 @@ desc = "An ages 8 and up approved vendor that dispenses toys. If you were to find the right wires, you can unlock the adult mode setting!" icon_state = "syndi" slogan_list = list("Get your cool toys today!","Trigger a valid hunter today!","Quality toy weapons for cheap prices!","Give them to HoPs for all access!","Give them to HoS to get permabrigged!") - product_ads = "Feel robust with your toys!;Express your inner child today!;Toy weapons don't kill people, but valid hunters do!;Who needs responsibilities when you have toy weapons?;Make your next murder FUN!" + ads_list = list("Feel robust with your toys!","Express your inner child today!","Toy weapons don't kill people, but valid hunters do!","Who needs responsibilities when you have toy weapons?","Make your next murder FUN!") vend_reply = "Come back for more!" products = list(/obj/item/gun/projectile/automatic/toy = 10, /obj/item/gun/projectile/automatic/toy/pistol= 10, @@ -1107,7 +1105,7 @@ name = "cigarette machine" desc = "If you want to get cancer, might as well do it in style." slogan_list = list("Space cigs taste good like a cigarette should.","I'd rather toolbox than switch.","Smoke!","Don't believe the reports - smoke today!") - product_ads = "Probably not bad for you!;Don't believe the scientists!;It's good for you!;Don't quit, buy more!;Smoke!;Nicotine heaven.;Best cigarettes since 2150.;Award-winning cigs." + ads_list = list("Probably not bad for you!","Don't believe the scientists!","It's good for you!","Don't quit, buy more!","Smoke!","Nicotine heaven.","Best cigarettes since 2150.","Award-winning cigs.") vend_delay = 34 icon_state = "cigs" products = list(/obj/item/storage/fancy/cigarettes/cigpack_robust = 12, /obj/item/storage/fancy/cigarettes/cigpack_uplift = 6, /obj/item/storage/fancy/cigarettes/cigpack_random = 6, /obj/item/reagent_containers/food/pill/patch/nicotine = 10, /obj/item/storage/box/matches = 10,/obj/item/lighter/random = 4,/obj/item/storage/fancy/rollingpapers = 5) @@ -1135,7 +1133,7 @@ /obj/machinery/vending/cigarette/beach //Used in the lavaland_biodome_beach.dmm ruin name = "\improper ShadyCigs Ultra" desc = "Now with extra premium products!" - product_ads = "Probably not bad for you!;Dope will get you through times of no money better than money will get you through times of no dope!;It's good for you!" + ads_list = list("Probably not bad for you!","Dope will get you through times of no money better than money will get you through times of no dope!","It's good for you!") slogan_list = list("Turn on, tune in, drop out!","Better living through chemistry!","Toke!","Don't forget to keep a smile on your lips and a song in your heart!") products = list(/obj/item/storage/fancy/cigarettes = 5, /obj/item/storage/fancy/cigarettes/cigpack_uplift = 3, @@ -1164,7 +1162,7 @@ desc = "Medical drug dispenser." icon_state = "med" icon_deny = "med-deny" - product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!" + ads_list = list("Go save some lives!","The best stuff for your medbay.","Only the finest tools.","Natural chemicals!","This stuff saves lives.","Don't you want some?","Ping!") req_access_txt = "5" products = list(/obj/item/reagent_containers/syringe = 12, /obj/item/reagent_containers/food/pill/patch/styptic = 10, /obj/item/reagent_containers/food/pill/patch/silver_sulf = 10, /obj/item/reagent_containers/glass/bottle/charcoal = 4, /obj/item/reagent_containers/glass/bottle/epinephrine = 4, /obj/item/reagent_containers/glass/bottle/diphenhydramine = 4, @@ -1203,7 +1201,7 @@ /obj/machinery/vending/wallmed name = "\improper NanoMed" desc = "Wall-mounted Medical Equipment dispenser." - product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?" + ads_list = list("Go save some lives!","The best stuff for your medbay.","Only the finest tools.","Natural chemicals!","This stuff saves lives.","Don't you want some?") icon_state = "wallmed" icon_deny = "wallmed-deny" density = FALSE //It is wall-mounted, and thus, not dense. --Superxpdude @@ -1227,7 +1225,7 @@ desc = "EVIL wall-mounted Medical Equipment dispenser." icon_state = "syndimed" icon_deny = "syndimed-deny" - product_ads = "Go end some lives!;The best stuff for your ship.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!" + ads_list = list("Go end some lives!","The best stuff for your ship.","Only the finest tools.","Natural chemicals!","This stuff saves lives.","Don't you want some?","Ping!") req_access_txt = "150" products = list(/obj/item/stack/medical/bruise_pack = 2,/obj/item/stack/medical/ointment = 2,/obj/item/reagent_containers/hypospray/autoinjector = 4,/obj/item/healthanalyzer = 1) contraband = list(/obj/item/reagent_containers/syringe/charcoal = 4,/obj/item/reagent_containers/syringe/antiviral = 4,/obj/item/reagent_containers/food/pill/tox = 1) @@ -1235,7 +1233,7 @@ /obj/machinery/vending/security name = "\improper SecTech" desc = "A security equipment vendor." - product_ads = "Crack capitalist skulls!;Beat some heads in!;Don't forget - harm is good!;Your weapons are right here.;Handcuffs!;Freeze, scumbag!;Don't tase me bro!;Tase them, bro.;Why not have a donut?" + ads_list = list("Crack capitalist skulls!","Beat some heads in!","Don't forget - harm is good!","Your weapons are right here.","Handcuffs!","Freeze, scumbag!","Don't tase me bro!","Tase them, bro.","Why not have a donut?") icon_state = "sec" icon_deny = "sec-deny" req_access_txt = "1" @@ -1258,7 +1256,7 @@ name = "\improper NutriMax" desc = "A plant nutrients vendor" slogan_list = list("Aren't you glad you don't have to fertilize the natural way?","Now with 50% less stink!","Plants are people too!") - product_ads = "We like plants!;Don't you want some?;The greenest thumbs ever.;We like big plants.;Soft soil..." + ads_list = list("We like plants!","Don't you want some?","The greenest thumbs ever.","We like big plants.","Soft soil...") icon_state = "nutri" icon_deny = "nutri-deny" products = list(/obj/item/reagent_containers/glass/bottle/nutrient/ez = 30,/obj/item/reagent_containers/glass/bottle/nutrient/l4z = 20,/obj/item/reagent_containers/glass/bottle/nutrient/rh = 10,/obj/item/reagent_containers/spray/pestspray = 20, @@ -1279,7 +1277,7 @@ name = "\improper MegaSeed Servitor" desc = "When you need seeds fast!" slogan_list = list("THIS'S WHERE TH' SEEDS LIVE! GIT YOU SOME!","Hands down the best seed selection on the station!","Also certain mushroom varieties available, more for experts! Get certified today!") - product_ads = "We like plants!;Grow some crops!;Grow, baby, growww!;Aw h'yeah son!" + ads_list = list("We like plants!","Grow some crops!","Grow, baby, growww!","Aw h'yeah son!") icon_state = "seeds" products = list(/obj/item/seeds/aloe =3, /obj/item/seeds/ambrosia = 3, @@ -1351,7 +1349,7 @@ slogan_list = list("Sling spells the proper way with MagiVend!","Be your own Houdini! Use MagiVend!") vend_delay = 15 vend_reply = "Have an enchanted evening!" - product_ads = "FJKLFJSD;AJKFLBJAKL;1234 LOONIES LOL!;>MFW;Kill them fuckers!;GET DAT FUKKEN DISK;HONK!;EI NATH;Destroy the station!;Admin conspiracies since forever!;Space-time bending hardware!" + ads_list = list("FJKLFJSD","AJKFLBJAKL","1234 LOONIES LOL!",">MFW","Kill them fuckers!","GET DAT FUKKEN DISK","HONK!","EI NATH","Destroy the station!","Admin conspiracies since forever!","Space-time bending hardware!") products = list(/obj/item/clothing/head/wizard = 1, /obj/item/clothing/suit/wizrobe = 1, /obj/item/clothing/head/wizard/red = 1, @@ -1513,7 +1511,7 @@ /obj/machinery/vending/dinnerware name = "\improper Plasteel Chef's Dinnerware Vendor" desc = "A kitchen and restaurant equipment vendor." - product_ads = "Mm, food stuffs!;Food and food accessories.;Get your plates!;You like forks?;I like forks.;Woo, utensils.;You don't really need these..." + ads_list = list("Mm, food stuffs!","Food and food accessories.","Get your plates!","You like forks?","I like forks.","Woo, utensils.","You don't really need these...") icon_state = "dinnerware" products = list(/obj/item/storage/bag/tray = 8,/obj/item/kitchen/utensil/fork = 6, /obj/item/kitchen/knife = 3,/obj/item/kitchen/rollingpin = 2, @@ -1545,7 +1543,7 @@ name = "\improper BODA" desc = "Old sweet water vending machine." icon_state = "sovietsoda" - product_ads = "For Tsar and Country.;Have you fulfilled your nutrition quota today?;Very nice!;We are simple people, for this is all we eat.;If there is a person, there is a problem. If there is no person, then there is no problem." + ads_list = list("For Tsar and Country.","Have you fulfilled your nutrition quota today?","Very nice!","We are simple people, for this is all we eat.","If there is a person, there is a problem. If there is no person, then there is no problem.") products = list(/obj/item/reagent_containers/food/drinks/drinkingglass/soda = 30) contraband = list(/obj/item/reagent_containers/food/drinks/drinkingglass/cola = 20) resistance_flags = FIRE_PROOF @@ -1641,7 +1639,7 @@ name = "\improper Sustenance Vendor" desc = "A vending machine which vends food, as required by section 47-C of the NT's Prisoner Ethical Treatment Agreement." slogan_list = list("Enjoy your meal.","Enough calories to support strenuous labor.") - product_ads = "The healthiest!;Award-winning chocolate bars!;Mmm! So good!;Oh my god it's so juicy!;Have a snack.;Snacks are good for you!;Have some more Getmore!;Best quality snacks straight from mars.;We love chocolate!;Try our new jerky!" + ads_list = list("The healthiest!","Award-winning chocolate bars!","Mmm! So good!","Oh my god it's so juicy!","Have a snack.","Snacks are good for you!","Have some more Getmore!","Best quality snacks straight from mars.","We love chocolate!","Try our new jerky!") icon_state = "sustenance" products = list(/obj/item/reagent_containers/food/snacks/tofu = 24, /obj/item/reagent_containers/food/drinks/ice = 12, @@ -1665,7 +1663,7 @@ name = "\improper Hatlord 9000" desc = "It doesn't seem the slightest bit unusual. This frustrates you immensely." icon_state = "hats" - product_ads = "Warning, not all hats are dog/monkey compatible. Apply forcefully with care.;Apply directly to the forehead.;Who doesn't love spending cash on hats?!;From the people that brought you collectable hat crates, Hatlord!" + ads_list = list("Warning, not all hats are dog/monkey compatible. Apply forcefully with care.","Apply directly to the forehead.","Who doesn't love spending cash on hats?!","From the people that brought you collectable hat crates, Hatlord!") products = list(/obj/item/clothing/head/bowlerhat = 10, /obj/item/clothing/head/beaverhat = 10, /obj/item/clothing/head/boaterhat = 10, @@ -1689,7 +1687,7 @@ name = "\improper Suitlord 9000" desc = "You wonder for a moment why all of your shirts and pants come conjoined. This hurts your head and you stop thinking about it." icon_state = "suits" - product_ads = "Pre-Ironed, Pre-Washed, Pre-Wor-*BZZT*;Blood of your enemies washes right out!;Who are YOU wearing?;Look dapper! Look like an idiot!;Dont carry your size? How about you shave off some pounds you fat lazy- *BZZT*" + ads_list = list("Pre-Ironed, Pre-Washed, Pre-Wor-*BZZT*","Blood of your enemies washes right out!","Who are YOU wearing?","Look dapper! Look like an idiot!","Dont carry your size? How about you shave off some pounds you fat lazy- *BZZT*") products = list(/obj/item/clothing/under/color/black = 10,/obj/item/clothing/under/color/blue = 10,/obj/item/clothing/under/color/green = 10,/obj/item/clothing/under/color/grey = 10,/obj/item/clothing/under/color/pink = 10,/obj/item/clothing/under/color/red = 10, /obj/item/clothing/under/color/white = 10, /obj/item/clothing/under/color/yellow = 10,/obj/item/clothing/under/color/lightblue = 10,/obj/item/clothing/under/color/aqua = 10,/obj/item/clothing/under/color/purple = 10,/obj/item/clothing/under/color/lightgreen = 10, /obj/item/clothing/under/color/lightblue = 10,/obj/item/clothing/under/color/lightbrown = 10,/obj/item/clothing/under/color/brown = 10,/obj/item/clothing/under/color/yellowgreen = 10,/obj/item/clothing/under/color/darkblue = 10,/obj/item/clothing/under/color/lightred = 10, /obj/item/clothing/under/color/darkred = 10) @@ -1710,7 +1708,7 @@ name = "\improper Shoelord 9000" desc = "Wow, hatlord looked fancy, suitlord looked streamlined, and this is just normal. The guy who designed these must be an idiot." icon_state = "shoes" - product_ads = "Put your foot down!;One size fits all!;IM WALKING ON SUNSHINE!;No hobbits allowed.;NO PLEASE WILLY, DONT HURT ME- *BZZT*" + ads_list = list("Put your foot down!","One size fits all!","IM WALKING ON SUNSHINE!","No hobbits allowed.","NO PLEASE WILLY, DONT HURT ME- *BZZT*") products = list(/obj/item/clothing/shoes/black = 10,/obj/item/clothing/shoes/brown = 10,/obj/item/clothing/shoes/blue = 10,/obj/item/clothing/shoes/green = 10,/obj/item/clothing/shoes/yellow = 10,/obj/item/clothing/shoes/purple = 10,/obj/item/clothing/shoes/red = 10,/obj/item/clothing/shoes/white = 10,/obj/item/clothing/shoes/sandal=10) contraband = list(/obj/item/clothing/shoes/orange = 5) premium = list(/obj/item/clothing/shoes/rainbow = 1) @@ -1729,7 +1727,7 @@ name = "\improper Suspicious Cigarette Machine" desc = "Smoke 'em if you've got 'em." slogan_list = list("Space cigs taste good like a cigarette should.","I'd rather toolbox than switch.","Smoke!","Don't believe the reports - smoke today!") - product_ads = "Probably not bad for you!;Don't believe the scientists!;It's good for you!;Don't quit, buy more!;Smoke!;Nicotine heaven.;Best cigarettes since 2150.;Award-winning cigs." + ads_list = list("Probably not bad for you!","Don't believe the scientists!","It's good for you!","Don't quit, buy more!","Smoke!","Nicotine heaven.","Best cigarettes since 2150.","Award-winning cigs.") vend_delay = 34 icon_state = "cigs" products = list(/obj/item/storage/fancy/cigarettes/syndicate = 10,/obj/item/lighter/random = 5) @@ -1738,7 +1736,7 @@ name = "\improper Getmore Chocolate Corp" desc = "A modified snack machine courtesy of the Getmore Chocolate Corporation, based out of Mars" slogan_list = list("Try our new nougat bar!","Twice the calories for half the price!") - product_ads = "The healthiest!;Award-winning chocolate bars!;Mmm! So good!;Oh my god it's so juicy!;Have a snack.;Snacks are good for you!;Have some more Getmore!;Best quality snacks straight from mars.;We love chocolate!;Try our new jerky!" + ads_list = list("The healthiest!","Award-winning chocolate bars!","Mmm! So good!","Oh my god it's so juicy!","Have a snack.","Snacks are good for you!","Have some more Getmore!","Best quality snacks straight from mars.","We love chocolate!","Try our new jerky!") icon_state = "snack" products = list(/obj/item/reagent_containers/food/snacks/chips =6,/obj/item/reagent_containers/food/snacks/sosjerky = 6, /obj/item/reagent_containers/food/snacks/syndicake = 6, /obj/item/reagent_containers/food/snacks/cheesiehonkers = 6) @@ -1850,7 +1848,7 @@ name = "\improper ArtVend" desc = "A vending machine for art supplies." slogan_list = list("Stop by for all your artistic needs!","Color the floors with crayons, not blood!","Don't be a starving artist, use ArtVend. ","Don't fart, do art!") - product_ads = "Just like Kindergarten!;Now with 1000% more vibrant colors!;Screwing with the janitor was never so easy!;Creativity is at the heart of every spessman." + ads_list = list("Just like Kindergarten!","Now with 1000% more vibrant colors!","Screwing with the janitor was never so easy!","Creativity is at the heart of every spessman.") vend_delay = 15 icon_state = "artvend" products = list(/obj/item/stack/cable_coil/random = 10,/obj/item/camera = 4,/obj/item/camera_film = 6, @@ -1865,7 +1863,7 @@ name = "\improper CritterCare" desc = "A vending machine for pet supplies." slogan_list = list("Stop by for all your animal's needs!","Cuddly pets deserve a stylish collar!","Pets in space, what could be more adorable?","Freshest fish eggs in the system!","Rocks are the perfect pet, buy one today!") - product_ads = "House-training costs extra!;Now with 1000% more cat hair!;Allergies are a sign of weakness!;Dogs are man's best friend. Remember that Vulpkanin!; Heat lamps for Unathi!; Vox-y want a cracker?" + ads_list = list("House-training costs extra!","Now with 1000% more cat hair!","Allergies are a sign of weakness!","Dogs are man's best friend. Remember that Vulpkanin!"," Heat lamps for Unathi!"," Vox-y want a cracker?") vend_delay = 15 icon_state = "crittercare" products = list(/obj/item/clothing/accessory/petcollar = 5, /obj/item/storage/firstaid/aquatic_kit/full =5, /obj/item/fish_eggs/goldfish = 5, @@ -1899,7 +1897,7 @@ desc = "All the parts you need to build your own custom pc." icon_state = "modularpc" icon_deny = "modularpc-deny" - product_ads = "Get your gamer gear!;The best GPUs for all of your space-crypto needs!;The most robust cooling!;The finest RGB in space!" + ads_list = list("Get your gamer gear!","The best GPUs for all of your space-crypto needs!","The most robust cooling!","The finest RGB in space!") vend_reply = "Game on!" products = list(/obj/item/modular_computer/laptop = 4, /obj/item/modular_computer/tablet = 4, From faeb575c14841e318b75d392774d81b217e809f2 Mon Sep 17 00:00:00 2001 From: SteelSlayer Date: Sun, 3 May 2020 20:54:59 -0500 Subject: [PATCH 22/61] forcemove --- code/modules/projectiles/guns/throw/crossbow.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/throw/crossbow.dm b/code/modules/projectiles/guns/throw/crossbow.dm index 08fc39271da..dc03a76fb48 100644 --- a/code/modules/projectiles/guns/throw/crossbow.dm +++ b/code/modules/projectiles/guns/throw/crossbow.dm @@ -103,7 +103,7 @@ return user.drop_item() - I.loc = src + I.forceMove(src) cell = I to_chat(user, "You jam [cell] into [src] and wire it to the firing coil.") process_chamber() From b65030fec5976581f618983180a762cb5434ce9a Mon Sep 17 00:00:00 2001 From: AffectedArc07 Date: Tue, 5 May 2020 10:13:01 +0100 Subject: [PATCH 23/61] I need to learn to read my todos --- code/__DEFINES/role_preferences.dm | 8 ++++---- code/__HELPERS/names.dm | 6 +++--- code/game/gamemodes/changeling/powers/hivemind.dm | 8 ++++---- code/game/gamemodes/devil/devil.dm | 8 ++++---- .../gamemodes/miniantags/bot_swarm/swarmer_event.dm | 4 ++-- code/game/objects/items/stacks/sheets/mineral.dm | 12 ++++++------ code/modules/awaymissions/gateway.dm | 10 +++++----- code/modules/client/preference/preferences.dm | 4 ++-- code/modules/client/preference/preferences_mysql.dm | 2 +- tools/travis/check_grep.sh | 12 +++++------- 10 files changed, 36 insertions(+), 38 deletions(-) diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index 2b9e2c56b4d..8021fa4452d 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -48,7 +48,7 @@ //Missing assignment means it's not a gamemode specific role, IT'S NOT A BUG OR ERROR. //The gamemode specific ones are just so the gamemodes can query whether a player is old enough //(in game days played) to play that role -var/global/list/special_roles = list( +GLOBAL_LIST_INIT(special_roles, list( ROLE_ABDUCTOR = /datum/game_mode/abduction, // Abductor ROLE_BLOB = /datum/game_mode/blob, // Blob ROLE_CHANGELING = /datum/game_mode/changeling, // Changeling @@ -72,10 +72,10 @@ var/global/list/special_roles = list( ROLE_VAMPIRE = /datum/game_mode/vampire, // Vampire ROLE_RAIDER = /datum/game_mode/heist, // Vox raider ROLE_ALIEN, // Xenomorph - ROLE_WIZARD = /datum/game_mode/wizard, // Wizard + ROLE_WIZARD = /datum/game_mode/wizard // Wizard // UNUSED/BROKEN ANTAGS // ROLE_HOG_GOD = /datum/game_mode/hand_of_god, // ROLE_HOG_CULTIST = /datum/game_mode/hand_of_god, // ROLE_MONKEY = /datum/game_mode/monkey, Sooner or later these are going to get ported -// ROLE_GANG = /datum/game_mode/gang, -) +// ROLE_GANG = /datum/game_mode/gang +)) diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm index d702c073b86..29e0f9b52b9 100644 --- a/code/__HELPERS/names.dm +++ b/code/__HELPERS/names.dm @@ -19,10 +19,10 @@ GLOBAL_VAR(command_name) /proc/command_name() return GLOB.using_map.dock_name -var/religion_name = null +GLOBAL_VAR(religion_name) /proc/religion_name() - if(religion_name) - return religion_name + if(GLOB.religion_name) + return GLOB.religion_name var/name = "" diff --git a/code/game/gamemodes/changeling/powers/hivemind.dm b/code/game/gamemodes/changeling/powers/hivemind.dm index af375cad368..98336608da4 100644 --- a/code/game/gamemodes/changeling/powers/hivemind.dm +++ b/code/game/gamemodes/changeling/powers/hivemind.dm @@ -23,7 +23,7 @@ return // HIVE MIND UPLOAD/DOWNLOAD DNA -var/list/datum/dna/hivemind_bank = list() +GLOBAL_LIST_EMPTY(hivemind_bank) /datum/action/changeling/hivemind_upload name = "Hive Channel DNA" @@ -36,7 +36,7 @@ var/list/datum/dna/hivemind_bank = list() var/datum/changeling/changeling = user.mind.changeling var/list/names = list() for(var/datum/dna/DNA in (changeling.absorbed_dna+changeling.protected_dna)) - if(!(DNA in hivemind_bank)) + if(!(DNA in GLOB.hivemind_bank)) names += DNA.real_name if(names.len <= 0) @@ -51,7 +51,7 @@ var/list/datum/dna/hivemind_bank = list() if(!chosen_dna) return - hivemind_bank += chosen_dna + GLOB.hivemind_bank += chosen_dna to_chat(user, "We channel the DNA of [chosen_name] to the air.") feedback_add_details("changeling_powers","HU") return 1 @@ -75,7 +75,7 @@ var/list/datum/dna/hivemind_bank = list() /datum/action/changeling/hivemind_download/sting_action(var/mob/user) var/datum/changeling/changeling = user.mind.changeling var/list/names = list() - for(var/datum/dna/DNA in hivemind_bank) + for(var/datum/dna/DNA in GLOB.hivemind_bank) if(!(DNA in changeling.absorbed_dna)) names[DNA.real_name] = DNA diff --git a/code/game/gamemodes/devil/devil.dm b/code/game/gamemodes/devil/devil.dm index ab5f5796d2e..06933891ba6 100644 --- a/code/game/gamemodes/devil/devil.dm +++ b/code/game/gamemodes/devil/devil.dm @@ -1,4 +1,4 @@ -var/global/list/whiteness = list ( +GLOBAL_LIST_INIT(whiteness, list( /obj/item/clothing/under/color/white = 2, /obj/item/clothing/under/rank/bartender = 1, /obj/item/clothing/under/rank/chef = 1, @@ -21,7 +21,7 @@ var/global/list/whiteness = list ( /obj/item/clothing/under/noble_clothes = 1, /obj/item/clothing/under/sl_suit = 1, /obj/item/clothing/under/burial = 1 -) +)) @@ -32,9 +32,9 @@ var/global/list/whiteness = list ( var/mob/living/carbon/human/H = attacker if(H.w_uniform && istype(H.w_uniform, /obj/item/clothing/under)) var/obj/item/clothing/under/U = H.w_uniform - if(whiteness[U.type]) + if(GLOB.whiteness[U.type]) src.visible_message("[src] seems to have been harmed by the purity of [attacker]'s clothes.", "Unsullied white clothing is disrupting your form.") - return whiteness[U.type] + 1 + return GLOB.whiteness[U.type] + 1 if(BANE_TOOLBOX) if(istype(weapon,/obj/item/storage/toolbox)) src.visible_message("The [weapon] seems unusually robust this time.", "The [weapon] is your unmaking!") diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm index d0be68819ae..fbceda6bd94 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm @@ -13,9 +13,9 @@ /datum/event/spawn_swarmer/start() if(find_swarmer()) return 0 - if(!the_gateway) + if(!GLOB.the_gateway) return 0 - new /obj/effect/mob_spawn/swarmer(get_turf(the_gateway)) + new /obj/effect/mob_spawn/swarmer(get_turf(GLOB.the_gateway)) /datum/event/spawn_swarmer/proc/find_swarmer() diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index b8fd23e78cb..54d42176f52 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -298,13 +298,13 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( \ materials = list(MAT_TITANIUM=MINERAL_MATERIAL_AMOUNT) point_value = 20 -var/global/list/datum/stack_recipe/titanium_recipes = list ( +GLOBAL_LIST_INIT(titanium_recipes, list( new/datum/stack_recipe("titanium tile", /obj/item/stack/tile/mineral/titanium, 1, 4, 20), new/datum/stack_recipe("surgical tray", /obj/structure/table/tray, 2, one_per_turf = 1, on_floor = 1), - ) + )) /obj/item/stack/sheet/mineral/titanium/New(loc, amount=null) - recipes = titanium_recipes + recipes = GLOB.titanium_recipes ..() /obj/item/stack/sheet/mineral/titanium/fifty @@ -328,12 +328,12 @@ var/global/list/datum/stack_recipe/titanium_recipes = list ( materials = list(MAT_TITANIUM=2000, MAT_PLASMA=2000) point_value = 45 -var/global/list/datum/stack_recipe/plastitanium_recipes = list ( +GLOBAL_LIST_INIT(plastitanium_recipes, list( new/datum/stack_recipe("plas-titanium tile", /obj/item/stack/tile/mineral/plastitanium, 1, 4, 20), - ) + )) /obj/item/stack/sheet/mineral/plastitanium/New(loc, amount=null) - recipes = plastitanium_recipes + recipes = GLOB.plastitanium_recipes ..() /obj/item/stack/sheet/mineral/enruranium diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index fc268c3ba35..d7e298e8c96 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -1,4 +1,4 @@ -var/obj/machinery/gateway/centerstation/the_gateway = null +GLOBAL_DATUM_INIT(the_gateway, /obj/machinery/gateway/centerstation, null) /obj/machinery/gateway name = "gateway" desc = "A mysterious gateway built by unknown hands, it allows for faster than light travel to far-flung locations." @@ -41,8 +41,8 @@ var/obj/machinery/gateway/centerstation/the_gateway = null /obj/machinery/gateway/centerstation/New() ..() - if(!the_gateway) - the_gateway = src + if(!GLOB.the_gateway) + GLOB.the_gateway = src /obj/machinery/gateway/centerstation/Initialize() ..() @@ -54,8 +54,8 @@ var/obj/machinery/gateway/centerstation/the_gateway = null return /obj/machinery/gateway/centerstation/Destroy() - if(the_gateway == src) - the_gateway = null + if(GLOB.the_gateway == src) + GLOB.the_gateway = null return ..() /obj/machinery/gateway/centerstation/update_icon() diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index b8a022c02af..2576f791e57 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -489,7 +489,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts dat += "You are banned from special roles." be_special = list() else - for(var/i in special_roles) + for(var/i in GLOB.special_roles) if(jobban_isbanned(user, i)) dat += "Be [capitalize(i)]: \[BANNED]
" else if(!player_old_enough_antag(user.client, i)) @@ -2023,7 +2023,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts if("be_special") var/r = href_list["role"] - if(r in special_roles) + if(r in GLOB.special_roles) be_special ^= r if("name") diff --git a/code/modules/client/preference/preferences_mysql.dm b/code/modules/client/preference/preferences_mysql.dm index a994e875372..70eaf6fbea4 100644 --- a/code/modules/client/preference/preferences_mysql.dm +++ b/code/modules/client/preference/preferences_mysql.dm @@ -84,7 +84,7 @@ // Might as well scrub out any malformed be_special list entries while we're here for(var/role in be_special) - if(!(role in special_roles)) + if(!(role in GLOB.special_roles)) log_runtime(EXCEPTION("[C.key] had a malformed role entry: '[role]'. Removing!"), src) be_special -= role diff --git a/tools/travis/check_grep.sh b/tools/travis/check_grep.sh index 22d02647bcf..5b5c232c374 100755 --- a/tools/travis/check_grep.sh +++ b/tools/travis/check_grep.sh @@ -14,12 +14,10 @@ if grep -P 'step_[xy]' _maps/**/*.dmm; then echo "ERROR: step_x/step_y variables detected in maps, please remove them." st=1 fi; -#### TODO: Uncomment after managing all globs #### -#if grep -P '^/*var/' code/**/*.dm; then - #echo "ERROR: Unmanaged global var use detected in code, please use the helpers." - #st=1 -#fi; -#### +if grep -P '^/*var/' code/**/*.dm; then + echo "ERROR: Unmanaged global var use detected in code, please use the helpers." + st=1 +fi; nl=' ' nl=$'\n' @@ -31,4 +29,4 @@ while read f; do fi; done < <(find . -type f -name '*.dm') -exit $st \ No newline at end of file +exit $st From a9d945e4c7c9bce6826b551fff89c79d4d002a84 Mon Sep 17 00:00:00 2001 From: AffectedArc07 Date: Tue, 5 May 2020 10:32:04 +0100 Subject: [PATCH 24/61] Adds MC VIEWING to the VIEWRUNTIMES permission --- code/modules/mob/mob.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index d08ef11db0f..12ce5c88103 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -964,8 +964,8 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \ for(var/obj/effect/proc_holder/spell/S in mind.spell_list) add_spell_to_statpanel(S) - - if(is_admin(src)) + // Allow admins + PR reviewers to VIEW the panel. Doesnt mean they can click things. + if(is_admin(src) || check_rights(R_VIEWRUNTIMES)) if(statpanel("MC")) //looking at that panel var/turf/T = get_turf(client.eye) stat("Location:", COORD(T)) From a60bfc0fccde572b89207a28fd320dd7d4031750 Mon Sep 17 00:00:00 2001 From: SteelSlayer Date: Tue, 5 May 2020 17:20:48 -0500 Subject: [PATCH 25/61] better logic --- code/modules/clothing/suits/miscellaneous.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index b378ed5ddbd..80f4e87d1c7 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -959,8 +959,8 @@ return // Do not allow the staff to recharge if it's more than 3 tiles away from the robe. If get_dist returns 0, the robe and the staff in the same tile. - // Using .loc instead of get_turf() here because if the turf of H is the same as the turf of the staff, get_dist() returns -1. - if(!(get_dist(H.loc, linked_staff.loc) in 0 to 3)) + var/staff_dist = get_dist(H, linked_staff) + if(staff_dist > 3 || staff_dist < 0) if(prob(10)) //10% chance per process should avoid being too spammy, can tweak if it ends up still being too frequent. to_chat(H, "Your staff is unable to charge at this range. Get closer!") return From a3aafa4ce4082c9ae0af36fc7bc036fbaef47910 Mon Sep 17 00:00:00 2001 From: SteelSlayer Date: Wed, 6 May 2020 02:03:15 -0500 Subject: [PATCH 26/61] this works --- code/modules/clothing/suits/miscellaneous.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 80f4e87d1c7..6a95ab7128d 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -959,8 +959,7 @@ return // Do not allow the staff to recharge if it's more than 3 tiles away from the robe. If get_dist returns 0, the robe and the staff in the same tile. - var/staff_dist = get_dist(H, linked_staff) - if(staff_dist > 3 || staff_dist < 0) + if(!(get_dist(H, linked_staff) <= 3)) if(prob(10)) //10% chance per process should avoid being too spammy, can tweak if it ends up still being too frequent. to_chat(H, "Your staff is unable to charge at this range. Get closer!") return From 1495b5b63aeeb957a800089560f6d3c0cae4b950 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Wed, 6 May 2020 09:43:18 -0400 Subject: [PATCH 27/61] Fixes Chem Grenades (#13386) --- code/modules/reagents/chemistry/holder.dm | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 9afcd5607fa..f56f5c1f9a4 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -15,12 +15,12 @@ var/flags var/list/reagents_generated_per_cycle = new/list() -/datum/reagents/New(maximum = 100, min_temp, max_temp) +/datum/reagents/New(maximum = 100, temperature_minimum, temperature_maxixmum) maximum_volume = maximum - if(min_temp) - temperature_min = min_temp - if(max_temp) - temperature_max = max_temp + if(temperature_minimum) + temperature_min = temperature_minimum + if(temperature_maxixmum) + temperature_max = temperature_maxixmum if(!(flags & REAGENT_NOREACT)) START_PROCESSING(SSobj, src) //I dislike having these here but map-objects are initialised before world/New() is called. >_> @@ -185,7 +185,7 @@ return amount /datum/reagents/proc/set_reagent_temp(new_temp = T0C, react = TRUE) - chem_temp = Clamp(new_temp, temperature_max, temperature_min) + chem_temp = Clamp(new_temp, temperature_min, temperature_max) if(react) temperature_react() handle_reactions() @@ -876,8 +876,8 @@ // Convenience proc to create a reagents holder for an atom // Max vol is maximum volume of holder -/atom/proc/create_reagents(max_vol, min_temp, max_temp) - reagents = new /datum/reagents(max_vol, min_temp, max_temp) +/atom/proc/create_reagents(max_vol, temperature_minimum, temperature_maximum) + reagents = new /datum/reagents(max_vol, temperature_minimum, temperature_maximum) reagents.my_atom = src /proc/get_random_reagent_id() // Returns a random reagent ID minus blacklisted reagents From 263394c7a00d2ce47d6d6c8287a31e7adbb20e26 Mon Sep 17 00:00:00 2001 From: Mars Date: Wed, 6 May 2020 18:39:58 +0200 Subject: [PATCH 28/61] Lazylen --- code/game/machinery/vending.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index d8bec8acd62..ea561937ea9 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -92,7 +92,7 @@ build_inventory(products, product_records) build_inventory(contraband, hidden_records) build_inventory(premium, coin_records) - if(slogan_list.len > 0) + if(LAZYLEN(slogan_list)) // So not all machines speak at the exact same time. // The first time this machine says something will be at slogantime + this random value, // so if slogantime is 10 minutes, it will say it at somewhere between 10 and 20 minutes after the machine is created. @@ -712,7 +712,7 @@ src.seconds_electrified-- //Pitch to the people! Really sell it! - if(((last_slogan + src.slogan_delay) <= world.time) && (slogan_list.len > 0) && (!shut_up) && prob(5)) + if(((last_slogan + src.slogan_delay) <= world.time) && (LAZYLEN(slogan_list)) && (!shut_up) && prob(5)) var/slogan = pick(src.slogan_list) speak(slogan) last_slogan = world.time From 85db4bc5a20a09910185762759c4c963622a14a1 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 7 May 2020 11:20:39 -0700 Subject: [PATCH 29/61] Remove fires from depot --- _maps/map_files/cyberiad/z6.dmm | 50 ++++--------------- .../effects/spawners/random_spawners.dm | 6 --- code/game/objects/structures/depot.dm | 5 -- 3 files changed, 10 insertions(+), 51 deletions(-) diff --git a/_maps/map_files/cyberiad/z6.dmm b/_maps/map_files/cyberiad/z6.dmm index 09453cfe542..1a7793a6ef6 100644 --- a/_maps/map_files/cyberiad/z6.dmm +++ b/_maps/map_files/cyberiad/z6.dmm @@ -6363,7 +6363,7 @@ icon_state = "sink"; pixel_x = 12 }, -/turf/simulated/floor/mineral/plasma, +/turf/simulated/floor/mineral/silver, /area/syndicate_depot/core) "of" = ( /obj/structure/closet/secure_closet/syndicate/depot, @@ -6448,26 +6448,9 @@ icon_state = "wood" }, /area/derelict/crew_quarters) -"oo" = ( -/obj/effect/spawner/random_spawners/syndicate/layout/door/secret, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/syndicate_depot/core) "op" = ( /turf/simulated/floor/mineral/silver, /area/syndicate_depot/core) -"oq" = ( -/obj/machinery/door/airlock/plasma{ - welded = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/syndicate_depot/core) -"or" = ( -/turf/simulated/floor/mineral/plasma, -/area/syndicate_depot/core) "os" = ( /obj/structure/table, /obj/effect/spawner/random_spawners/syndicate/loot/stetchkin, @@ -6543,7 +6526,7 @@ /area/syndicate_depot/core) "oB" = ( /obj/effect/spawner/random_spawners/syndicate/mob, -/turf/simulated/floor/mineral/plasma, +/turf/simulated/floor/mineral/silver, /area/syndicate_depot/core) "oC" = ( /obj/effect/landmark{ @@ -6706,27 +6689,14 @@ icon_state = "dark" }, /area/syndicate_depot/core) -"oZ" = ( -/obj/structure/mirror{ - pixel_x = -32 - }, -/turf/simulated/floor/mineral/plasma, -/area/syndicate_depot/core) "pa" = ( /obj/structure/toilet{ dir = 8 }, /turf/simulated/floor/mineral/silver, /area/syndicate_depot/core) -"pb" = ( -/obj/machinery/portable_atmospherics/canister/toxins, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/syndicate_depot/core) "pc" = ( /obj/machinery/light, -/obj/effect/spawner/random_spawners/syndicate/loot/level3, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -11582,10 +11552,10 @@ }, /area/space/nearstation) "zR" = ( -/obj/machinery/portable_atmospherics/canister/toxins, /obj/machinery/light/small{ dir = 1 }, +/obj/effect/decal/cleanable/blood, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -57707,7 +57677,7 @@ of ot mA mA -pb +nX pi mA py @@ -59251,7 +59221,7 @@ oE oR oE oz -pb +mA mA mA mm @@ -61558,7 +61528,7 @@ mm mB mm mm -oo +mm mm lV mA @@ -61816,7 +61786,7 @@ mA zP mm zR -oo +mm oL ns mA @@ -62072,7 +62042,7 @@ mA mA mt mm -oq +mm mm mm mm @@ -62332,7 +62302,7 @@ mm op oB oM -oZ +oM ob mA pu @@ -62586,7 +62556,7 @@ zP mA mA ob -or +op nJ oe pa diff --git a/code/game/objects/effects/spawners/random_spawners.dm b/code/game/objects/effects/spawners/random_spawners.dm index b32688dbb83..9eb8e9de1a2 100644 --- a/code/game/objects/effects/spawners/random_spawners.dm +++ b/code/game/objects/effects/spawners/random_spawners.dm @@ -289,7 +289,6 @@ /obj/item/clothing/glasses/thermal = 1, /obj/item/chameleon = 1, /obj/item/reagent_containers/hypospray/autoinjector/stimulants = 1, - /obj/item/storage/box/syndie_kit/atmosn2ogrenades = 1, /obj/item/grenade/plastic/x4 = 1) @@ -304,11 +303,6 @@ /turf/simulated/wall/mineral/plastitanium/nodiagonal = 2, /obj/structure/falsewall/plastitanium = 2) -/obj/effect/spawner/random_spawners/syndicate/layout/door/secret - name = "50pc falsewall 50pc wall" - result = list(/turf/simulated/wall/mineral/plastitanium/nodiagonal = 1, - /obj/structure/falsewall/plastitanium = 1) - /obj/effect/spawner/random_spawners/syndicate/layout/door/vault name = "80pc vaultdoor 20pc wall" result = list(/obj/machinery/door/airlock/hatch/syndicate/vault = 4, diff --git a/code/game/objects/structures/depot.dm b/code/game/objects/structures/depot.dm index e970ac911dc..11eb03c94c5 100644 --- a/code/game/objects/structures/depot.dm +++ b/code/game/objects/structures/depot.dm @@ -79,7 +79,6 @@ var/beepsound = 'sound/items/timer.ogg' var/deliberate = FALSE var/max_cycles = 10 - var/max_fire_range = 9 var/area/syndicate_depot/core/depotarea /obj/effect/overload/New() @@ -101,10 +100,6 @@ if(!deliberate) playsound(loc, beepsound, 50, 0) cycles++ - var/fire_range = min(cycles, max_fire_range) - - for(var/turf/simulated/turf in range(fire_range, T)) - new /obj/effect/hotspot(turf) return if(!istype(depotarea)) From b5cba4c2db5863a90c6dba136f9e255fa9ceb350 Mon Sep 17 00:00:00 2001 From: trololiver112 <59520813+trololiver112@users.noreply.github.com> Date: Thu, 7 May 2020 21:07:04 +0200 Subject: [PATCH 30/61] Update sensory.dm --- code/datums/diseases/advance/symptoms/sensory.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/diseases/advance/symptoms/sensory.dm b/code/datums/diseases/advance/symptoms/sensory.dm index cf39d91a866..c7f488d5002 100644 --- a/code/datums/diseases/advance/symptoms/sensory.dm +++ b/code/datums/diseases/advance/symptoms/sensory.dm @@ -62,4 +62,4 @@ Bonus M.reagents.add_reagent("oculine", 20) else if(prob(SYMPTOM_ACTIVATION_PROB * 5)) - to_chat(M, "[pick("Your eyes feel great.","You feel like your eyes can focus more clearly.", "You don't feel the need to blink.","Your ears feel great.","Your healing feels more acute.")]") + to_chat(M, "[pick("Your eyes feel great.","You feel like your eyes can focus more clearly.", "You don't feel the need to blink.","Your eyes feel great.","Your hearing feels more acute.")]") From 421a16b49f645e2736cc7221da2f4fb48fdf5f4d Mon Sep 17 00:00:00 2001 From: joep van der velden Date: Thu, 7 May 2020 21:52:43 +0200 Subject: [PATCH 31/61] Makes trail_holders invisible upon examine. Fixing the client hanging/crashing --- code/game/objects/effects/decals/Cleanable/humans.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 7e626584780..1e7ad8397ee 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -112,7 +112,8 @@ GLOBAL_LIST_EMPTY(splatter_cache) /obj/effect/decal/cleanable/trail_holder //not a child of blood on purpose name = "blood" - icon_state = "ltrails_1" + icon = 'icons/effects/effects.dmi' + icon_state = "nothing" desc = "Your instincts say you shouldn't be following these." gender = PLURAL density = FALSE From 3066aeb65f0eeb622f1f54c77893cf2c29849e6b Mon Sep 17 00:00:00 2001 From: Patrick Meade Date: Fri, 8 May 2020 02:30:29 -0500 Subject: [PATCH 32/61] Grammar and typo fixes --- code/game/objects/items/devices/flash.dm | 2 +- code/modules/reagents/chemistry/holder.dm | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 5cbd562a002..b8602e671c3 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -98,7 +98,7 @@ to_chat(M, "[user] blinds you with the flash!") if(M.weakeyes) M.Stun(2) - M.visible_message("[M] gasps and shields [M.p_their()] eyes!", "You gasp and shields your eyes!") + M.visible_message("[M] gasps and shields [M.p_their()] eyes!", "You gasp and shield your eyes!") else visible_message("[user] fails to blind [M] with the flash!") to_chat(user, "You fail to blind [M] with the flash!") diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index f56f5c1f9a4..d18c9c1832b 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -15,12 +15,12 @@ var/flags var/list/reagents_generated_per_cycle = new/list() -/datum/reagents/New(maximum = 100, temperature_minimum, temperature_maxixmum) +/datum/reagents/New(maximum = 100, temperature_minimum, temperature_maximum) maximum_volume = maximum if(temperature_minimum) temperature_min = temperature_minimum - if(temperature_maxixmum) - temperature_max = temperature_maxixmum + if(temperature_maximum) + temperature_max = temperature_maximum if(!(flags & REAGENT_NOREACT)) START_PROCESSING(SSobj, src) //I dislike having these here but map-objects are initialised before world/New() is called. >_> From defc9b0003015288f7f09f605931b7b0c4adb65a Mon Sep 17 00:00:00 2001 From: trololiver112 <59520813+trololiver112@users.noreply.github.com> Date: Fri, 8 May 2020 12:13:47 +0200 Subject: [PATCH 33/61] Update deployable.dm --- code/game/machinery/deployable.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 1d97056912f..5b16ebbf1cb 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -71,6 +71,9 @@ bar_material = WOOD stacktype = /obj/item/stack/sheet/wood +/obj/structure/barricade/wooden/welder_act(mob/user, obj/item/I) + return + /obj/structure/barricade/wooden/attackby(obj/item/I, mob/user) if(istype(I,/obj/item/stack/sheet/wood)) var/obj/item/stack/sheet/wood/W = I From 8f04fdffa5f3570acaa0656df2da072ef7c50bd9 Mon Sep 17 00:00:00 2001 From: trololiver112 <59520813+trololiver112@users.noreply.github.com> Date: Fri, 8 May 2020 15:09:18 +0200 Subject: [PATCH 34/61] makes borg not being able to interact with wall defibs --- code/game/machinery/defib_mount.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/game/machinery/defib_mount.dm b/code/game/machinery/defib_mount.dm index d669b340436..9ee32716e53 100644 --- a/code/game/machinery/defib_mount.dm +++ b/code/game/machinery/defib_mount.dm @@ -15,6 +15,9 @@ var/obj/item/defibrillator/defib //this mount's defibrillator var/clamps_locked = FALSE //if true, and a defib is loaded, it can't be removed without unlocking the clamps +/obj/machinery/defibrillator_mount/attack_ai() + return + /obj/machinery/defibrillator_mount/get_cell() if(defib) return defib.get_cell() From b913a1301a336b0857511395aa03c59e975c351a Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Sun, 10 May 2020 00:07:46 -0400 Subject: [PATCH 35/61] Fixes MC perms spam (#13406) --- code/modules/mob/mob.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 12ce5c88103..8e97a88b4ac 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -965,7 +965,7 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \ add_spell_to_statpanel(S) // Allow admins + PR reviewers to VIEW the panel. Doesnt mean they can click things. - if(is_admin(src) || check_rights(R_VIEWRUNTIMES)) + if(is_admin(src) || check_rights(R_VIEWRUNTIMES, FALSE)) if(statpanel("MC")) //looking at that panel var/turf/T = get_turf(client.eye) stat("Location:", COORD(T)) From b77176e9e86b031bdd3247c5741d12b53d7bb80e Mon Sep 17 00:00:00 2001 From: AffectedArc07 Date: Sun, 10 May 2020 10:11:52 +0100 Subject: [PATCH 36/61] Moves config loading to world/New not Master/New --- code/controllers/master.dm | 6 +----- code/game/world.dm | 4 ++++ 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/controllers/master.dm b/code/controllers/master.dm index f64e566e097..bc48dba53e4 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -62,17 +62,13 @@ GLOBAL_REAL(Master, /datum/controller/master) = new var/static/current_ticklimit = TICK_LIMIT_RUNNING /datum/controller/master/New() - //temporary file used to record errors with loading config, moved to log directory once logging is set up - GLOB.config_error_log = GLOB.world_game_log = GLOB.world_runtime_log = "data/logs/config_error.log" - load_configuration() - // Highlander-style: there can only be one! Kill off the old and replace it with the new. - if(!random_seed) random_seed = rand(1, 1e9) rand_seed(random_seed) var/list/_subsystems = list() subsystems = _subsystems + // Highlander-style: there can only be one! Kill off the old and replace it with the new. if(Master != src) if(istype(Master)) Recover() diff --git a/code/game/world.dm b/code/game/world.dm index 762a0be70a8..b57670bb37d 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -8,6 +8,10 @@ GLOBAL_LIST_INIT(map_transition_config, MAP_TRANSITION_CONFIG) log_world("World loaded at [time_stamp()]") log_world("[GLOB.vars.len - GLOB.gvars_datum_in_built_vars.len] global variables") + //temporary file used to record errors with loading config, moved to log directory once logging is set up + GLOB.config_error_log = GLOB.world_game_log = GLOB.world_runtime_log = "data/logs/config_error.log" + load_configuration() + if(byond_version < RECOMMENDED_VERSION) log_world("Your server's byond version does not meet the recommended requirements for this code. Please update BYOND") From f15dfa08895d2407892692fb930ebc24d941263d Mon Sep 17 00:00:00 2001 From: AffectedArc07 Date: Sun, 10 May 2020 13:52:36 +0100 Subject: [PATCH 37/61] Subsystems now state implications if offlined. --- code/controllers/master.dm | 2 +- code/controllers/subsystem.dm | 2 ++ code/controllers/subsystem/acid.dm | 1 + code/controllers/subsystem/afk.dm | 17 +++++++++-------- code/controllers/subsystem/air.dm | 1 + code/controllers/subsystem/alarm.dm | 1 + code/controllers/subsystem/chat.dm | 1 + code/controllers/subsystem/events.dm | 1 + code/controllers/subsystem/fires.dm | 1 + code/controllers/subsystem/garbage.dm | 1 + code/controllers/subsystem/icon_smooth.dm | 1 + code/controllers/subsystem/idlenpcpool.dm | 3 ++- code/controllers/subsystem/input.dm | 3 ++- code/controllers/subsystem/jobs.dm | 1 + code/controllers/subsystem/lighting.dm | 1 + code/controllers/subsystem/machinery.dm | 1 + code/controllers/subsystem/mobs.dm | 1 + code/controllers/subsystem/nano_mob_hunter.dm | 1 + code/controllers/subsystem/nanoui.dm | 1 + code/controllers/subsystem/nightshift.dm | 1 + code/controllers/subsystem/npcpool.dm | 1 + code/controllers/subsystem/overlays.dm | 1 + code/controllers/subsystem/parallax.dm | 1 + code/controllers/subsystem/shuttles.dm | 1 + code/controllers/subsystem/spacedrift.dm | 1 + code/controllers/subsystem/sun.dm | 1 + code/controllers/subsystem/throwing.dm | 1 + code/controllers/subsystem/ticker.dm | 1 + code/controllers/subsystem/timer.dm | 1 + code/controllers/subsystem/vote.dm | 1 + code/controllers/subsystem/weather.dm | 1 + goon/code/datums/browserOutput.dm | 9 ++++++++- 32 files changed, 50 insertions(+), 12 deletions(-) diff --git a/code/controllers/master.dm b/code/controllers/master.dm index f64e566e097..a6026823ec9 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -146,7 +146,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new msg = "The [BadBoy.name] subsystem was the last to fire for 2 controller restarts. It will be recovered now and disabled if it happens again." FireHim = TRUE if(3) - msg = "The [BadBoy.name] subsystem seems to be destabilizing the MC and will be offlined." + msg = "The [BadBoy.name] subsystem seems to be destabilizing the MC and will be offlined. The following implications are now in effect: [BadBoy.offline_implications]" BadBoy.flags |= SS_NO_FIRE if(msg) to_chat(GLOB.admins, "[msg]") diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index f257f2b4895..4a125003389 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -35,6 +35,8 @@ var/static/list/failure_strikes //How many times we suspect a subsystem type has crashed the MC, 3 strikes and you're out! + var/offline_implications = "None" // What are the implications of this SS being offlined? + //Do not override ///datum/controller/subsystem/New() diff --git a/code/controllers/subsystem/acid.dm b/code/controllers/subsystem/acid.dm index 40063b00a87..119d82113d7 100644 --- a/code/controllers/subsystem/acid.dm +++ b/code/controllers/subsystem/acid.dm @@ -3,6 +3,7 @@ SUBSYSTEM_DEF(acid) priority = FIRE_PRIORITY_ACID flags = SS_NO_INIT|SS_BACKGROUND runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + offline_implications = "Objects will no longer react to acid. No immediate action is needed." var/list/currentrun = list() var/list/processing = list() diff --git a/code/controllers/subsystem/afk.dm b/code/controllers/subsystem/afk.dm index 6ab1d67a816..9122e6a16c6 100644 --- a/code/controllers/subsystem/afk.dm +++ b/code/controllers/subsystem/afk.dm @@ -5,6 +5,7 @@ SUBSYSTEM_DEF(afk) name = "AFK Watcher" wait = 300 flags = SS_BACKGROUND + offline_implications = "Players will no longer be marked as AFK. No immediate action is needed." var/list/afk_players = list() // Associative list. ckey as key and AFK state as value @@ -17,27 +18,27 @@ SUBSYSTEM_DEF(afk) for(var/mob/living/carbon/human/H in GLOB.living_mob_list) if(!H.ckey) // Useless non ckey creatures continue - - var/turf/T + + var/turf/T // Only players and players with the AFK watch enabled // No dead, unconcious, restrained, people without jobs, people on other Z levels than the station or antags if(!H.client || !H.client.prefs.afk_watch || !H.mind || \ H.stat || H.restrained() || !H.job || H.mind.special_role || \ !is_station_level((T = get_turf(H)).z)) // Assign the turf as last. Small optimization - if(afk_players[H.ckey]) + if(afk_players[H.ckey]) toRemove += H.ckey continue - + var/mins_afk = round(H.client.inactivity / 600) if(mins_afk < config.warn_afk_minimum) if(afk_players[H.ckey]) toRemove += H.ckey continue - + if(!afk_players[H.ckey]) afk_players[H.ckey] = AFK_WARNED warn(H, "You are AFK for [mins_afk] minutes. You will be cryod after [config.auto_cryo_afk] total minutes and fully despawned after [config.auto_despawn_afk] total minutes. Please move or click in game if you want to avoid being despawned.") - else + else var/area/A = T.loc // Turfs loc is the area if(afk_players[H.ckey] == AFK_WARNED) if(mins_afk >= config.auto_cryo_afk && A.can_get_auto_cryod) @@ -50,14 +51,14 @@ SUBSYSTEM_DEF(afk) afk_players[H.ckey] = AFK_CRYOD msg_admins(H, mins_afk, T, "put into cryostorage") warn(H, "You are AFK for [mins_afk] minutes and have been moved to cryostorage. After being AFK for [config.auto_despawn_afk] total minutes you will be fully despawned. Please eject yourself (right click, eject) out of the cryostorage if you want to avoid being despawned.") - + else if(mins_afk >= config.auto_despawn_afk) var/obj/machinery/cryopod/P = H.loc msg_admins(H, mins_afk, T, "forcefully despawned") warn(H, "You are have been despawned after being AFK for [mins_afk] minutes.") toRemove += H.ckey P.despawn_occupant() - + removeFromWatchList(toRemove) /datum/controller/subsystem/afk/proc/warn(mob/living/carbon/human/H, text) diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 6f2a451ef76..80ce66d13ec 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -14,6 +14,7 @@ SUBSYSTEM_DEF(air) wait = 5 flags = SS_BACKGROUND runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + offline_implications = "Turfs will no longer process atmos, and all atmospheric machines (including cryotubes) will no longer function. Shuttle call recommended." var/cost_turfs = 0 var/cost_groups = 0 var/cost_highpressure = 0 diff --git a/code/controllers/subsystem/alarm.dm b/code/controllers/subsystem/alarm.dm index bac32a449de..289adf6de40 100644 --- a/code/controllers/subsystem/alarm.dm +++ b/code/controllers/subsystem/alarm.dm @@ -1,6 +1,7 @@ SUBSYSTEM_DEF(alarms) name = "Alarms" init_order = INIT_ORDER_ALARMS // 2 + offline_implications = "Alarms (Power, camera, fire, etc) will no longer be checked. No immediate action is needed." var/datum/alarm_handler/atmosphere/atmosphere_alarm = new() var/datum/alarm_handler/burglar/burglar_alarm = new() var/datum/alarm_handler/camera/camera_alarm = new() diff --git a/code/controllers/subsystem/chat.dm b/code/controllers/subsystem/chat.dm index dbe38634e6a..4eb468a0952 100644 --- a/code/controllers/subsystem/chat.dm +++ b/code/controllers/subsystem/chat.dm @@ -4,6 +4,7 @@ SUBSYSTEM_DEF(chat) wait = 1 priority = FIRE_PRIORITY_CHAT init_order = INIT_ORDER_CHAT + offline_implications = "Chat messages will no longer be cleanly queued. No immediate action is needed." var/list/payload = list() diff --git a/code/controllers/subsystem/events.dm b/code/controllers/subsystem/events.dm index 3612faa4a7e..ad77904bac7 100644 --- a/code/controllers/subsystem/events.dm +++ b/code/controllers/subsystem/events.dm @@ -2,6 +2,7 @@ SUBSYSTEM_DEF(events) name = "Events" init_order = INIT_ORDER_EVENTS runlevels = RUNLEVEL_GAME + offline_implications = "Random events will no longer happen. No immediate action is needed." // Report events at the end of the rouund var/report_at_round_end = 0 diff --git a/code/controllers/subsystem/fires.dm b/code/controllers/subsystem/fires.dm index aafc5ed48d5..dc419fffeb5 100644 --- a/code/controllers/subsystem/fires.dm +++ b/code/controllers/subsystem/fires.dm @@ -3,6 +3,7 @@ SUBSYSTEM_DEF(fires) priority = FIRE_PRIOTITY_BURNING flags = SS_NO_INIT|SS_BACKGROUND runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + offline_implications = "Objects will no longer react to fires. No immediate action is needed." var/list/currentrun = list() var/list/processing = list() diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index 4bc3965e6cf..cbf17d05fbf 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -5,6 +5,7 @@ SUBSYSTEM_DEF(garbage) flags = SS_POST_FIRE_TIMING|SS_BACKGROUND|SS_NO_INIT runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY init_order = INIT_ORDER_GARBAGE + offline_implications = "Garbage collection is no longer functional, and objects will not be qdel'd. Immediate server restart recommended." var/list/collection_timeout = list(0, 2 MINUTES, 10 SECONDS) // deciseconds to wait before moving something up in the queue to the next level diff --git a/code/controllers/subsystem/icon_smooth.dm b/code/controllers/subsystem/icon_smooth.dm index 531b6af2e78..289505a153c 100644 --- a/code/controllers/subsystem/icon_smooth.dm +++ b/code/controllers/subsystem/icon_smooth.dm @@ -4,6 +4,7 @@ SUBSYSTEM_DEF(icon_smooth) wait = 1 priority = FIRE_PRIOTITY_SMOOTHING flags = SS_TICKER + offline_implications = "Objects will no longer smooth together properly. No immediate action is needed." var/list/smooth_queue = list() diff --git a/code/controllers/subsystem/idlenpcpool.dm b/code/controllers/subsystem/idlenpcpool.dm index 42df941e10f..d61b90f1239 100644 --- a/code/controllers/subsystem/idlenpcpool.dm +++ b/code/controllers/subsystem/idlenpcpool.dm @@ -4,6 +4,7 @@ SUBSYSTEM_DEF(idlenpcpool) priority = FIRE_PRIORITY_IDLE_NPC wait = 60 runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + offline_implications = "Idle simple animals will no longer process. Shuttle call recommended." var/list/currentrun = list() var/static/list/idle_mobs_by_zlevel[][] @@ -39,4 +40,4 @@ SUBSYSTEM_DEF(idlenpcpool) if(SA.stat != DEAD) SA.consider_wakeup() if(MC_TICK_CHECK) - return + return diff --git a/code/controllers/subsystem/input.dm b/code/controllers/subsystem/input.dm index f379deec72b..9dd6fce1554 100644 --- a/code/controllers/subsystem/input.dm +++ b/code/controllers/subsystem/input.dm @@ -5,6 +5,7 @@ SUBSYSTEM_DEF(input) flags = SS_TICKER priority = FIRE_PRIORITY_INPUT runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY + offline_implications = "Player input will no longer be recognised. Immediate server restart recommended." var/list/macro_sets var/list/movement_keys @@ -24,7 +25,7 @@ SUBSYSTEM_DEF(input) // This is for when macro sets are eventualy datumized /datum/controller/subsystem/input/proc/setup_default_macro_sets() var/list/static/default_macro_sets - + if(default_macro_sets) macro_sets = default_macro_sets return diff --git a/code/controllers/subsystem/jobs.dm b/code/controllers/subsystem/jobs.dm index 6f7894ca428..1d6fd410f9b 100644 --- a/code/controllers/subsystem/jobs.dm +++ b/code/controllers/subsystem/jobs.dm @@ -3,6 +3,7 @@ SUBSYSTEM_DEF(jobs) init_order = INIT_ORDER_JOBS // 12 wait = 3000 // 5 minutes (Deciseconds) runlevels = RUNLEVEL_GAME + offline_implications = "Job playtime hours will no longer be logged. No immediate action is needed." //List of all jobs var/list/occupations = list() diff --git a/code/controllers/subsystem/lighting.dm b/code/controllers/subsystem/lighting.dm index 7441d855f22..3fc92a3346a 100644 --- a/code/controllers/subsystem/lighting.dm +++ b/code/controllers/subsystem/lighting.dm @@ -7,6 +7,7 @@ SUBSYSTEM_DEF(lighting) wait = 2 init_order = INIT_ORDER_LIGHTING flags = SS_TICKER + offline_implications = "Lighting will no longer update. Shuttle call recommended." /datum/controller/subsystem/lighting/stat_entry() ..("L:[GLOB.lighting_update_lights.len]|C:[GLOB.lighting_update_corners.len]|O:[GLOB.lighting_update_objects.len]") diff --git a/code/controllers/subsystem/machinery.dm b/code/controllers/subsystem/machinery.dm index 9a73c1dbabb..7e78e2b9df1 100644 --- a/code/controllers/subsystem/machinery.dm +++ b/code/controllers/subsystem/machinery.dm @@ -6,6 +6,7 @@ SUBSYSTEM_DEF(machines) name = "Machines" init_order = INIT_ORDER_MACHINES flags = SS_KEEP_TIMING + offline_implications = "Machinery will no longer process. Shuttle call recommended." var/list/processing = list() var/list/currentrun = list() diff --git a/code/controllers/subsystem/mobs.dm b/code/controllers/subsystem/mobs.dm index c21b8f0760a..8345822ca80 100644 --- a/code/controllers/subsystem/mobs.dm +++ b/code/controllers/subsystem/mobs.dm @@ -3,6 +3,7 @@ SUBSYSTEM_DEF(mobs) priority = FIRE_PRIORITY_MOBS flags = SS_KEEP_TIMING runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + offline_implications = "Mobs will no longer process. Immediate server restart recommended." var/list/currentrun = list() var/static/list/clients_by_zlevel[][] diff --git a/code/controllers/subsystem/nano_mob_hunter.dm b/code/controllers/subsystem/nano_mob_hunter.dm index a634f091013..9094bf9fe2b 100644 --- a/code/controllers/subsystem/nano_mob_hunter.dm +++ b/code/controllers/subsystem/nano_mob_hunter.dm @@ -2,6 +2,7 @@ SUBSYSTEM_DEF(mob_hunt) name = "Nano-Mob Hunter GO Server" init_order = INIT_ORDER_NANOMOB priority = FIRE_PRIORITY_NANOMOB // Low priority, no need for MC_TICK_CHECK due to extremely low performance impact. + offline_implications = "Nano-Mob Hunter will no longer spawn mobs. No immediate action is needed." var/max_normal_spawns = 15 //change this to adjust the number of normal spawns that can exist at one time. trapped spawns (from traitors) don't count towards this var/list/normal_spawns = list() var/max_trap_spawns = 15 //change this to adjust the number of trap spawns that can exist at one time. traps spawned beyond this point clear the oldest traps diff --git a/code/controllers/subsystem/nanoui.dm b/code/controllers/subsystem/nanoui.dm index c8cbbc62013..ef1b6ee03fe 100644 --- a/code/controllers/subsystem/nanoui.dm +++ b/code/controllers/subsystem/nanoui.dm @@ -4,6 +4,7 @@ SUBSYSTEM_DEF(nanoui) flags = SS_NO_INIT priority = FIRE_PRIORITY_NANOUI runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT + offline_implications = "All NanoUIs will no longer process. Shuttle call recommended." var/list/currentrun = list() var/list/open_uis = list() // A list of open UIs, grouped by src_object and ui_key. diff --git a/code/controllers/subsystem/nightshift.dm b/code/controllers/subsystem/nightshift.dm index e13f49fd1c2..deffcb6bddf 100644 --- a/code/controllers/subsystem/nightshift.dm +++ b/code/controllers/subsystem/nightshift.dm @@ -4,6 +4,7 @@ SUBSYSTEM_DEF(nightshift) priority = FIRE_PRIORITY_NIGHTSHIFT wait = 600 flags = SS_NO_TICK_CHECK + offline_implications = "The game will no longer shift between day and night lighting. No immediate action is needed." var/nightshift_active = FALSE var/nightshift_start_time = 702000 //7:30 PM, station time diff --git a/code/controllers/subsystem/npcpool.dm b/code/controllers/subsystem/npcpool.dm index 5eaca5d19c4..79541c199a4 100644 --- a/code/controllers/subsystem/npcpool.dm +++ b/code/controllers/subsystem/npcpool.dm @@ -3,6 +3,7 @@ SUBSYSTEM_DEF(npcpool) flags = SS_POST_FIRE_TIMING|SS_NO_INIT|SS_BACKGROUND priority = FIRE_PRIORITY_NPC runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + offline_implications = "Simple animals will no longer process. Shuttle call recommended." var/list/currentrun = list() diff --git a/code/controllers/subsystem/overlays.dm b/code/controllers/subsystem/overlays.dm index c35f1adee65..95b9e925b5d 100644 --- a/code/controllers/subsystem/overlays.dm +++ b/code/controllers/subsystem/overlays.dm @@ -4,6 +4,7 @@ SUBSYSTEM_DEF(overlays) wait = 1 priority = FIRE_PRIORITY_OVERLAYS init_order = INIT_ORDER_OVERLAY + offline_implications = "Overlays may look strange. No immediate action is needed." var/list/queue var/list/stats diff --git a/code/controllers/subsystem/parallax.dm b/code/controllers/subsystem/parallax.dm index 039b6d2b008..9135f62b03f 100644 --- a/code/controllers/subsystem/parallax.dm +++ b/code/controllers/subsystem/parallax.dm @@ -4,6 +4,7 @@ SUBSYSTEM_DEF(parallax) flags = SS_POST_FIRE_TIMING | SS_BACKGROUND priority = FIRE_PRIORITY_PARALLAX runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT + offline_implications = "Space parallax will no longer move around. No immediate action is needed." var/list/currentrun var/planet_x_offset = 128 var/planet_y_offset = 128 diff --git a/code/controllers/subsystem/shuttles.dm b/code/controllers/subsystem/shuttles.dm index 14a9b507977..247d71d05b8 100644 --- a/code/controllers/subsystem/shuttles.dm +++ b/code/controllers/subsystem/shuttles.dm @@ -6,6 +6,7 @@ SUBSYSTEM_DEF(shuttle) init_order = INIT_ORDER_SHUTTLE flags = SS_KEEP_TIMING|SS_NO_TICK_CHECK runlevels = RUNLEVEL_SETUP | RUNLEVEL_GAME + offline_implications = "Shuttles will no longer function and cargo will not generate points. Immediate server restart recommended." var/list/mobile = list() var/list/stationary = list() var/list/transit = list() diff --git a/code/controllers/subsystem/spacedrift.dm b/code/controllers/subsystem/spacedrift.dm index fcc62a2fa50..d9c46f9c9d7 100644 --- a/code/controllers/subsystem/spacedrift.dm +++ b/code/controllers/subsystem/spacedrift.dm @@ -4,6 +4,7 @@ SUBSYSTEM_DEF(spacedrift) wait = 5 flags = SS_NO_INIT|SS_KEEP_TIMING runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + offline_implications = "Mobs will no longer respect a lack of gravity. No immediate action is needed." var/list/currentrun = list() var/list/processing = list() diff --git a/code/controllers/subsystem/sun.dm b/code/controllers/subsystem/sun.dm index b9843c57b68..3f8e15df05a 100644 --- a/code/controllers/subsystem/sun.dm +++ b/code/controllers/subsystem/sun.dm @@ -3,6 +3,7 @@ SUBSYSTEM_DEF(sun) wait = 600 flags = SS_NO_TICK_CHECK init_order = INIT_ORDER_SUN + offline_implications = "Solar panels will no longer rotate. No immediate action is needed." var/angle var/dx var/dy diff --git a/code/controllers/subsystem/throwing.dm b/code/controllers/subsystem/throwing.dm index 74dbf4c4d93..04ddf40f442 100644 --- a/code/controllers/subsystem/throwing.dm +++ b/code/controllers/subsystem/throwing.dm @@ -7,6 +7,7 @@ SUBSYSTEM_DEF(throwing) wait = 1 flags = SS_NO_INIT|SS_KEEP_TIMING|SS_TICKER runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + offline_implications = "Thrown objects may not react properly. Shuttle call recommended." var/list/currentrun var/list/processing = list() diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index b092271fc96..d8b0c0d6d5b 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -5,6 +5,7 @@ SUBSYSTEM_DEF(ticker) priority = FIRE_PRIORITY_TICKER flags = SS_KEEP_TIMING runlevels = RUNLEVEL_LOBBY | RUNLEVEL_SETUP | RUNLEVEL_GAME + offline_implications = "The game is no longer aware of when the round ends. Immediate server restart recommended." var/round_start_time = 0 var/const/restart_timeout = 600 diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm index 1caa3d7819a..7bb6a496274 100644 --- a/code/controllers/subsystem/timer.dm +++ b/code/controllers/subsystem/timer.dm @@ -9,6 +9,7 @@ SUBSYSTEM_DEF(timer) init_order = INIT_ORDER_TIMER flags = SS_TICKER|SS_NO_INIT + offline_implications = "The game will no longer process timers. Immediate server restart recommended." var/list/second_queue = list() //awe, yes, you've had first queue, but what about second queue? var/list/hashes = list() diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index 28456c9b5c5..b0110258da7 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -3,6 +3,7 @@ SUBSYSTEM_DEF(vote) wait = 10 flags = SS_KEEP_TIMING|SS_NO_INIT runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT + offline_implications = "Votes (Endround shuttle) will no longer function. Shuttle call recommended." var/initiator = null var/started_time = null diff --git a/code/controllers/subsystem/weather.dm b/code/controllers/subsystem/weather.dm index ac2f0c59313..7b08bd3ca48 100644 --- a/code/controllers/subsystem/weather.dm +++ b/code/controllers/subsystem/weather.dm @@ -9,6 +9,7 @@ SUBSYSTEM_DEF(weather) flags = SS_BACKGROUND wait = 10 runlevels = RUNLEVEL_GAME + offline_implications = "Ash storms will no longer trigger. No immediate action is needed." var/list/processing = list() var/list/eligible_zlevels = list() var/list/next_hit_by_zlevel = list() //Used by barometers to know when the next storm is coming diff --git a/goon/code/datums/browserOutput.dm b/goon/code/datums/browserOutput.dm index 8caccf84766..74c9d844728 100644 --- a/goon/code/datums/browserOutput.dm +++ b/goon/code/datums/browserOutput.dm @@ -305,7 +305,14 @@ var/to_chat_src target << output(output_message, "browseroutput:output") /proc/to_chat(target, message, flag) - if(Master.current_runlevel == RUNLEVEL_INIT || !SSchat?.initialized) + /* + If any of the following conditions are met, do NOT use SSchat. These conditions include: + - Is the MC still initializing? + - Has SSchat initialized? + - Has SSchat been offlined due to MC crashes? + If any of these are met, use the old chat system, otherwise people wont see messages + */ + if(Master.current_runlevel == RUNLEVEL_INIT || !SSchat?.initialized || SSchat?.flags & SS_NO_FIRE) to_chat_immediate(target, message, flag) return SSchat.queue(target, message, flag) From b9defe5a641aa34dcde8eeaf0aa6a44615f06e25 Mon Sep 17 00:00:00 2001 From: TDSSS <32099540+TDSSS@users.noreply.github.com> Date: Mon, 11 May 2020 03:46:10 +0200 Subject: [PATCH 38/61] reduces log spam --- code/modules/reagents/reagent_containers/applicator.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/modules/reagents/reagent_containers/applicator.dm b/code/modules/reagents/reagent_containers/applicator.dm index dfa59c941ac..cb2dc4e2e80 100644 --- a/code/modules/reagents/reagent_containers/applicator.dm +++ b/code/modules/reagents/reagent_containers/applicator.dm @@ -83,7 +83,11 @@ var/contained = english_list(injected) - add_attack_logs(user, M, "Automends with [src] containing ([contained])", reagents.harmless_helper() ? ATKLOG_ALMOSTALL : null) + var/log_level = ATKLOG_ALMOSTALL + if(emagged && !(reagents.harmless_helper())) + log_level = null + + add_attack_logs(user, M, "Automends with [src] containing ([contained])", log_level) var/fractional_applied_amount = total_applied_amount / reagents.total_volume From 0bbcfde8924fdcad751accaef1ce018eaf0b53f9 Mon Sep 17 00:00:00 2001 From: TDSSS <32099540+TDSSS@users.noreply.github.com> Date: Mon, 11 May 2020 12:20:13 +0200 Subject: [PATCH 39/61] tweak, comment --- code/modules/reagents/reagent_containers/applicator.dm | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/code/modules/reagents/reagent_containers/applicator.dm b/code/modules/reagents/reagent_containers/applicator.dm index cb2dc4e2e80..73c3c3759b1 100644 --- a/code/modules/reagents/reagent_containers/applicator.dm +++ b/code/modules/reagents/reagent_containers/applicator.dm @@ -82,12 +82,8 @@ injected += R.name var/contained = english_list(injected) - - var/log_level = ATKLOG_ALMOSTALL - if(emagged && !(reagents.harmless_helper())) - log_level = null - - add_attack_logs(user, M, "Automends with [src] containing ([contained])", log_level) + // allow normal logging only if reagents are not harmless and automender is emagged + add_attack_logs(user, M, "Automends with [src] containing ([contained])", (emagged && !(reagents.harmless_helper())) ? null : ATKLOG_ALMOSTALL) var/fractional_applied_amount = total_applied_amount / reagents.total_volume From 70be83c4e260f59eac05fec80d3cc78fe81e98fb Mon Sep 17 00:00:00 2001 From: Aquilar <20759278+Aquilar@users.noreply.github.com> Date: Wed, 13 May 2020 00:42:59 +0800 Subject: [PATCH 40/61] forgot medicine had it's own special proc for on_mob_life Signed-off-by: Aquilar <20759278+Aquilar@users.noreply.github.com> --- code/modules/reagents/chemistry/reagents/medicine.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm index 567a1a4d92d..262acae5f82 100644 --- a/code/modules/reagents/chemistry/reagents/medicine.dm +++ b/code/modules/reagents/chemistry/reagents/medicine.dm @@ -9,7 +9,7 @@ var/total_depletion_rate = (metabolization_rate / M.metabolism_efficiency) * M.digestion_ratio // Cache it handle_addiction(M, total_depletion_rate) - + sate_addiction(M) holder.remove_reagent(id, total_depletion_rate) //medicine reagents stay longer if you have a better metabolism return STATUS_UPDATE_NONE From 99ee9b9e55c67ac749dacaacc578105adb4aebce Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Wed, 13 May 2020 00:36:46 -0400 Subject: [PATCH 41/61] Calls an Exorcist (#13421) --- code/game/machinery/machinery.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 8d8cabed341..fdb928566af 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -563,7 +563,8 @@ Class Procs: return FALSE if(!prob(prb)) return FALSE - do_sparks(5, 1, src) + if(!isobserver(user))//if they are a ghost do not shock. Why do need cheesie honkers? You ded. + do_sparks(5, 1, src) if(electrocute_mob(user, get_area(src), src, siemens_strength, TRUE)) return TRUE return FALSE From 75befc7d67f126192e1cce340df827fa412c3567 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Wed, 13 May 2020 01:36:07 -0400 Subject: [PATCH 42/61] Prevents Shocking non-living Mobs (#13422) --- code/game/machinery/doors/airlock.dm | 4 ++-- code/game/machinery/machinery.dm | 7 +++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 191d5e81079..f69094715b0 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -289,8 +289,8 @@ About the new airlock wires panel: // shock user with probability prb (if all connections & power are working) // returns 1 if shocked, 0 otherwise // The preceding comment was borrowed from the grille's shock script -/obj/machinery/door/airlock/shock(mob/user, prb) - if(!arePowerSystemsOn()) +/obj/machinery/door/airlock/shock(mob/living/user, prb) + if(!istype(user) || !arePowerSystemsOn()) return FALSE if(shockCooldown > world.time) return FALSE //Already shocked someone recently? diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index fdb928566af..0a55acfcb81 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -558,13 +558,12 @@ Class Procs: return threatcount -/obj/machinery/proc/shock(mob/user, prb) - if(inoperable()) +/obj/machinery/proc/shock(mob/living/user, prb) + if(!istype(user) || inoperable()) return FALSE if(!prob(prb)) return FALSE - if(!isobserver(user))//if they are a ghost do not shock. Why do need cheesie honkers? You ded. - do_sparks(5, 1, src) + do_sparks(5, 1, src) if(electrocute_mob(user, get_area(src), src, siemens_strength, TRUE)) return TRUE return FALSE From ecf699562f8e32b6c2f02bf54c5f84ce375ed447 Mon Sep 17 00:00:00 2001 From: SteelSlayer Date: Sun, 10 May 2020 14:50:41 -0500 Subject: [PATCH 43/61] Fixes a few runtimes --- code/_onclick/item_attack.dm | 2 +- code/game/gamemodes/miniantags/bot_swarm/swarmer.dm | 2 +- code/game/objects/items/weapons/handcuffs.dm | 3 +++ code/game/turfs/simulated/floor.dm | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index d2a91da4020..e27002cf118 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -58,7 +58,7 @@ else return 1 var/obj/item/organ/external/O = M.get_organ(user.zone_selected) - if((is_sharp(src) || (isscrewdriver(src) && O.is_robotic())) && user.a_intent == INTENT_HELP) + if((is_sharp(src) || (isscrewdriver(src) && O?.is_robotic())) && user.a_intent == INTENT_HELP) if(!attempt_initiate_surgery(src, M, user)) return FALSE else diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index 65424bf9008..f425a34654d 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -421,13 +421,13 @@ return FALSE /obj/structure/lattice/catwalk/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - . = ..() var/turf/here = get_turf(src) for(var/A in here.contents) var/obj/structure/cable/C = A if(istype(C)) to_chat(S, "Disrupting the power grid would bring no benefit to us. Aborting.") return FALSE + return ..() /obj/item/deactivated_swarmer/IntegrateAmount() return 50 diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index e188279eb8c..1f73e5c7062 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -37,6 +37,9 @@ cuff(C, user) /obj/item/restraints/handcuffs/proc/cuff(mob/living/carbon/C, mob/user, remove_src = TRUE) + if(!istype(C)) // Shouldn't be able to cuff anything but carbons. + return + if(ishuman(C)) var/mob/living/carbon/human/H = C if(!(H.has_left_hand() || H.has_right_hand())) diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index e425c3458c3..2d886f44bfd 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -187,7 +187,7 @@ GLOBAL_LIST_INIT(icons_to_ignore_at_floor_init, list("damaged1","damaged2","dama if(T.turf_type == type) return var/obj/item/thing = user.get_inactive_hand() - if(!prying_tool_list.Find(thing.tool_behaviour)) + if(!thing || !prying_tool_list.Find(thing.tool_behaviour)) return var/turf/simulated/floor/plating/P = pry_tile(thing, user, TRUE) if(!istype(P)) From dd7ea13bf62db998a7f931724ac9c54ee95baf4d Mon Sep 17 00:00:00 2001 From: Sgtdevel <64398933+Sgtdevel@users.noreply.github.com> Date: Wed, 13 May 2020 11:07:33 -0400 Subject: [PATCH 44/61] Update soft_caps.dm --- code/modules/clothing/head/soft_caps.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index 0255109620a..f9ad10aaac7 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -113,7 +113,7 @@ /obj/item/clothing/head/soft/sec/corp name = "corporate security cap" - desc = "It's baseball hat in corpotate colours." + desc = "It's baseball hat in corporate colours." icon_state = "corpsoft" item_color = "corp" From ce9f1597f3c1946732c56f282004c61703580580 Mon Sep 17 00:00:00 2001 From: Sgtdevel <64398933+Sgtdevel@users.noreply.github.com> Date: Wed, 13 May 2020 11:50:15 -0400 Subject: [PATCH 45/61] Update soft_caps.dm --- code/modules/clothing/head/soft_caps.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index f9ad10aaac7..456372006c6 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -104,7 +104,7 @@ /obj/item/clothing/head/soft/sec name = "security cap" - desc = "It's baseball hat in tasteful red colour." + desc = "It's a baseball hat in tasteful red colour." icon_state = "secsoft" item_color = "sec" armor = list("melee" = 30, "bullet" = 25, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 50) @@ -113,7 +113,7 @@ /obj/item/clothing/head/soft/sec/corp name = "corporate security cap" - desc = "It's baseball hat in corporate colours." + desc = "It's a baseball hat in corporate colours." icon_state = "corpsoft" item_color = "corp" From c909a10f5c0515d7e2c04b56c5ba1f5e82d19017 Mon Sep 17 00:00:00 2001 From: PidgeyThePirate Date: Thu, 14 May 2020 11:38:43 +0930 Subject: [PATCH 46/61] Headcrabs now check if they're alive before nomming adjacent dead simple mobs as well as zombifying dead humans. --- code/modules/mob/living/simple_animal/hostile/headcrab.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/hostile/headcrab.dm b/code/modules/mob/living/simple_animal/hostile/headcrab.dm index ece990c7743..67a87131fba 100644 --- a/code/modules/mob/living/simple_animal/hostile/headcrab.dm +++ b/code/modules/mob/living/simple_animal/hostile/headcrab.dm @@ -25,7 +25,9 @@ var/list/human_overlays = list() /mob/living/simple_animal/hostile/headcrab/Life(seconds, times_fired) - if(!is_zombie && isturf(src.loc) && stat != DEAD) + if(stat == DEAD) + return + if(!is_zombie && isturf(src.loc)) for(var/mob/living/carbon/human/H in oview(src, 1)) //Only for corpse right next to/on same tile if(H.stat == DEAD || (!H.check_death_method() && H.health <= HEALTH_THRESHOLD_DEAD)) Zombify(H) From b08aeeb1ffe09c3475f3aa90aa647c5881c08db5 Mon Sep 17 00:00:00 2001 From: PidgeyThePirate Date: Thu, 14 May 2020 12:05:47 +0930 Subject: [PATCH 47/61] Whoopsie. --- .../living/simple_animal/hostile/headcrab.dm | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/headcrab.dm b/code/modules/mob/living/simple_animal/hostile/headcrab.dm index 67a87131fba..cef8bc552ba 100644 --- a/code/modules/mob/living/simple_animal/hostile/headcrab.dm +++ b/code/modules/mob/living/simple_animal/hostile/headcrab.dm @@ -25,24 +25,23 @@ var/list/human_overlays = list() /mob/living/simple_animal/hostile/headcrab/Life(seconds, times_fired) - if(stat == DEAD) - return - if(!is_zombie && isturf(src.loc)) - for(var/mob/living/carbon/human/H in oview(src, 1)) //Only for corpse right next to/on same tile - if(H.stat == DEAD || (!H.check_death_method() && H.health <= HEALTH_THRESHOLD_DEAD)) - Zombify(H) - break - var/cycles = 4 - if(cycles >= 4) - for(var/mob/living/simple_animal/K in oview(src, 1)) //Only for corpse right next to/on same tile - if(K.stat == DEAD || (!K.check_death_method() && K.health <= HEALTH_THRESHOLD_DEAD)) - visible_message("[src] consumes [target] whole!") - if(health < maxHealth) - health += 10 - qdel(K) - break - cycles = 0 - cycles++ + if(stat != DEAD) + if(!is_zombie && isturf(src.loc)) + for(var/mob/living/carbon/human/H in oview(src, 1)) //Only for corpse right next to/on same tile + if(H.stat == DEAD || (!H.check_death_method() && H.health <= HEALTH_THRESHOLD_DEAD)) + Zombify(H) + break + var/cycles = 4 + if(cycles >= 4) + for(var/mob/living/simple_animal/K in oview(src, 1)) //Only for corpse right next to/on same tile + if(K.stat == DEAD || (!K.check_death_method() && K.health <= HEALTH_THRESHOLD_DEAD)) + visible_message("[src] consumes [target] whole!") + if(health < maxHealth) + health += 10 + qdel(K) + break + cycles = 0 + cycles++ ..() /mob/living/simple_animal/hostile/headcrab/OpenFire(atom/A) From 736f2132e308fc19e8cf0b3f55fc6542e041304b Mon Sep 17 00:00:00 2001 From: PidgeyThePirate Date: Thu, 14 May 2020 12:59:38 +0930 Subject: [PATCH 48/61] You learn something new every day. --- code/modules/mob/living/simple_animal/hostile/headcrab.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/headcrab.dm b/code/modules/mob/living/simple_animal/hostile/headcrab.dm index cef8bc552ba..8d2ba52709f 100644 --- a/code/modules/mob/living/simple_animal/hostile/headcrab.dm +++ b/code/modules/mob/living/simple_animal/hostile/headcrab.dm @@ -25,7 +25,7 @@ var/list/human_overlays = list() /mob/living/simple_animal/hostile/headcrab/Life(seconds, times_fired) - if(stat != DEAD) + if(..()) if(!is_zombie && isturf(src.loc)) for(var/mob/living/carbon/human/H in oview(src, 1)) //Only for corpse right next to/on same tile if(H.stat == DEAD || (!H.check_death_method() && H.health <= HEALTH_THRESHOLD_DEAD)) @@ -42,7 +42,6 @@ break cycles = 0 cycles++ - ..() /mob/living/simple_animal/hostile/headcrab/OpenFire(atom/A) if(check_friendly_fire) From 82e61960ac61dd5099fd786f18b8a0fc81393dda Mon Sep 17 00:00:00 2001 From: trololiver112 <59520813+trololiver112@users.noreply.github.com> Date: Thu, 14 May 2020 15:37:52 +0200 Subject: [PATCH 49/61] suggested change using the METAL check --- code/game/machinery/deployable.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 5b16ebbf1cb..94a3219c159 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -30,6 +30,8 @@ new stacktype(get_turf(src), drop_amount) /obj/structure/barricade/welder_act(mob/user, obj/item/I) + if(bar_material != METAL) + return if(obj_integrity >= max_integrity) to_chat(user, "[src] does not need repairs.") return @@ -71,8 +73,6 @@ bar_material = WOOD stacktype = /obj/item/stack/sheet/wood -/obj/structure/barricade/wooden/welder_act(mob/user, obj/item/I) - return /obj/structure/barricade/wooden/attackby(obj/item/I, mob/user) if(istype(I,/obj/item/stack/sheet/wood)) From f97bc5876b43d4d631c08251db66cdf848a84358 Mon Sep 17 00:00:00 2001 From: Deckard Cain <34521754+DeckardCainRPC@users.noreply.github.com> Date: Thu, 14 May 2020 16:53:41 -0400 Subject: [PATCH 50/61] fixed apples not distilling in fermenting barrels apples previously distilled into hcider, which was an icon state and not actually a reagent proper. this resulted in apples simply not fermenting into anything when processed in a fermenting barrel. (if the apples contained reagents such as plant_matter or sugar or whatever else botanists put in their genes, then these would of course be transferred to the barrel normally.) --- code/modules/hydroponics/grown/apple.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/hydroponics/grown/apple.dm b/code/modules/hydroponics/grown/apple.dm index 1344a8c39b0..7510c3cdfb6 100644 --- a/code/modules/hydroponics/grown/apple.dm +++ b/code/modules/hydroponics/grown/apple.dm @@ -24,7 +24,7 @@ filling_color = "#FF4500" bitesize = 100 // Always eat the apple in one bite tastes = list("apple" = 1) - distill_reagent = "hcider" + distill_reagent = "cider" // Posioned Apple /obj/item/seeds/apple/poisoned From bd6ed7fa864b8bb9189e7e2d92e35a93b43849bf Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Thu, 14 May 2020 20:37:13 -0400 Subject: [PATCH 51/61] GC Fixes (#13387) * GC Fixes * tweak * fixes-gc-testing --- code/datums/status_effects/status_effect.dm | 10 ++++++++++ code/game/objects/items/devices/enginepicker.dm | 6 +++++- code/game/objects/items/devices/radio/beacon.dm | 11 ++++++++--- code/modules/admin/admin_ranks.dm | 8 ++++---- code/modules/client/client defines.dm | 7 ------- 5 files changed, 27 insertions(+), 15 deletions(-) diff --git a/code/datums/status_effects/status_effect.dm b/code/datums/status_effects/status_effect.dm index 896f4f999a9..74abf104465 100644 --- a/code/datums/status_effects/status_effect.dm +++ b/code/datums/status_effects/status_effect.dm @@ -41,6 +41,9 @@ LAZYREMOVE(owner.status_effects, src) on_remove() owner = null + if(linked_alert) + linked_alert.attached_effect = null + linked_alert = null return ..() /datum/status_effect/process() @@ -85,6 +88,13 @@ desc = "You don't feel any different..." var/datum/status_effect/attached_effect +/obj/screen/alert/status_effect/Destroy() + if(attached_effect) + attached_effect.linked_alert = null + attached_effect = null + return ..() + + ////////////////// // HELPER PROCS // ////////////////// diff --git a/code/game/objects/items/devices/enginepicker.dm b/code/game/objects/items/devices/enginepicker.dm index fe6bb7e8717..a2fa30a243b 100644 --- a/code/game/objects/items/devices/enginepicker.dm +++ b/code/game/objects/items/devices/enginepicker.dm @@ -14,8 +14,12 @@ var/list/list_enginebeacons = list() var/isactive = FALSE +/obj/item/enginepicker/Destroy() + list_enginebeacons.Cut() + return ..() + /obj/item/enginepicker/attack_self(mob/living/carbon/user) - if(usr.stat || !usr.canmove || usr.restrained()) + if(user.incapacitated()) return if(!isactive) diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm index 517f9f595c5..aa123930323 100644 --- a/code/game/objects/items/devices/radio/beacon.dm +++ b/code/game/objects/items/devices/radio/beacon.dm @@ -69,8 +69,8 @@ to_chat(user, "Locked In") new /obj/machinery/power/singularity_beacon/syndicate( user.loc ) playsound(src, 'sound/effects/pop.ogg', 100, 1, 1) + user.drop_item() qdel(src) - return /obj/item/radio/beacon/syndicate/bomb name = "suspicious beacon" @@ -82,16 +82,21 @@ to_chat(user, "Locked In") new /obj/machinery/syndicatebomb( user.loc ) playsound(src, 'sound/effects/pop.ogg', 100, 1, 1) + user.drop_item() qdel(src) - return /obj/item/radio/beacon/engine desc = "A label on it reads: Warning: This device is used for transportation of high-density objects used for high-yield power generation. Stay away!." anchored = 1 //Let's not move these around. Some folk might get the idea to use these for assassinations var/list/enginetype = list() -/obj/item/radio/beacon/engine/Initialize() +/obj/item/radio/beacon/engine/Initialize(mapload) LAZYADD(GLOB.engine_beacon_list, src) + return ..() + +/obj/item/radio/beacon/engine/Destroy() + GLOB.engine_beacon_list -= src + return ..() /obj/item/radio/beacon/engine/tesling name = "Engine Beacon for Tesla and Singularity" diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index 1986bd8f787..fdf3d0dc8d0 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -51,7 +51,7 @@ GLOBAL_PROTECT(admin_ranks) // this shit is being protected for obvious reasons #ifdef TESTING var/msg = "Permission Sets Built:\n" - for(var/rank in admin_ranks) + for(var/rank in GLOB.admin_ranks) msg += "\t[rank] - [GLOB.admin_ranks[rank]]\n" testing(msg) #endif @@ -142,12 +142,12 @@ GLOBAL_PROTECT(admin_ranks) // this shit is being protected for obvious reasons #ifdef TESTING -/client/verb/changerank(newrank in admin_ranks) +/client/verb/changerank(newrank in GLOB.admin_ranks) if(holder) holder.rank = newrank - holder.rights = admin_ranks[newrank] + holder.rights = GLOB.admin_ranks[newrank] else - holder = new /datum/admins(newrank,admin_ranks[newrank],ckey) + holder = new /datum/admins(newrank,GLOB.admin_ranks[newrank],ckey) remove_admin_verbs() holder.associate(src) diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index 85615be1ee5..a063fafd736 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -28,13 +28,6 @@ var/adminhelped = 0 - // var/gc_destroyed //Time when this object was destroyed. [Inherits from datum] - -#ifdef TESTING - var/running_find_references - var/last_find_references = 0 -#endif - /////////////// //SOUND STUFF// /////////////// From e7833fdaf53551a8bda44870f2151a92e1692799 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Thu, 14 May 2020 20:37:26 -0400 Subject: [PATCH 52/61] Fixes Chainsaw hitsound (#13397) --- code/game/objects/items/weapons/twohanded.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 57c9a5301f6..aefedc7b36b 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -542,6 +542,7 @@ w_class = WEIGHT_CLASS_BULKY // can't fit in backpacks force_unwielded = 15 //still pretty robust force_wielded = 40 //you'll gouge their eye out! Or a limb...maybe even their entire body! + hitsound = null // Handled in the snowflaked attack proc wieldsound = 'sound/weapons/chainsawstart.ogg' hitsound = null armour_penetration = 35 From d8134fd3281b950f4a225d059077103d1761bd90 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Thu, 14 May 2020 20:39:44 -0400 Subject: [PATCH 53/61] Refactor and Fixes EMP's (#13420) --- code/game/objects/items/weapons/implants/implant_storage.dm | 4 ++++ code/game/objects/items/weapons/misc.dm | 4 ++++ code/game/objects/items/weapons/storage/storage.dm | 6 +++--- code/modules/clothing/suits/storage.dm | 2 +- code/modules/clothing/under/accessories/storage.dm | 2 +- code/modules/mob/living/carbon/carbon.dm | 5 +++-- code/modules/mob/living/carbon/human/human_defense.dm | 6 ------ code/modules/mob/living/living_defense.dm | 5 ++--- code/modules/mob/living/silicon/ai/ai.dm | 2 +- code/modules/mob/living/silicon/robot/syndicate.dm | 2 +- code/modules/mob/living/silicon/silicon.dm | 6 +++--- code/modules/paperwork/folders.dm | 6 ++++++ code/modules/recycling/sortingmachinery.dm | 6 ++++++ 13 files changed, 35 insertions(+), 21 deletions(-) diff --git a/code/game/objects/items/weapons/implants/implant_storage.dm b/code/game/objects/items/weapons/implants/implant_storage.dm index 18b08bba283..b530fd860fa 100644 --- a/code/game/objects/items/weapons/implants/implant_storage.dm +++ b/code/game/objects/items/weapons/implants/implant_storage.dm @@ -20,6 +20,10 @@ ..() storage = new /obj/item/storage/hidden/implant(src) +/obj/item/implant/storage/emp_act(severity) + ..() + storage.emp_act(severity) + /obj/item/implant/storage/activate() storage.MouseDrop(imp_in) diff --git a/code/game/objects/items/weapons/misc.dm b/code/game/objects/items/weapons/misc.dm index 0732c0fdd1d..40d68cc8fc6 100644 --- a/code/game/objects/items/weapons/misc.dm +++ b/code/game/objects/items/weapons/misc.dm @@ -77,6 +77,10 @@ item_state = "gift" w_class = WEIGHT_CLASS_BULKY +/obj/item/gift/emp_act(severity) + ..() + gift.emp_act(severity) + /obj/item/kidanglobe name = "Kidan homeworld globe" icon = 'icons/obj/decorations.dmi' diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 1ff2b2f2c56..0aa7d976082 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -481,10 +481,10 @@ return ..() /obj/item/storage/emp_act(severity) - if(!istype(loc, /mob/living)) - for(var/obj/O in contents) - O.emp_act(severity) ..() + for(var/i in contents) + var/atom/A = i + A.emp_act(severity) /obj/item/storage/hear_talk(mob/living/M as mob, list/message_pieces) ..() diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm index 0c77183b578..9a675742b5e 100644 --- a/code/modules/clothing/suits/storage.dm +++ b/code/modules/clothing/suits/storage.dm @@ -25,8 +25,8 @@ return pockets.attackby(W, user, params) /obj/item/clothing/suit/storage/emp_act(severity) - pockets.emp_act(severity) ..() + pockets.emp_act(severity) /obj/item/clothing/suit/storage/hear_talk(mob/M, list/message_pieces) pockets.hear_talk(M, message_pieces) diff --git a/code/modules/clothing/under/accessories/storage.dm b/code/modules/clothing/under/accessories/storage.dm index 16eb1cd476a..727aba06b37 100644 --- a/code/modules/clothing/under/accessories/storage.dm +++ b/code/modules/clothing/under/accessories/storage.dm @@ -37,8 +37,8 @@ return hold.attackby(W, user, params) /obj/item/clothing/accessory/storage/emp_act(severity) - hold.emp_act(severity) ..() + hold.emp_act(severity) /obj/item/clothing/accessory/storage/hear_talk(mob/M, list/message_pieces, verb) hold.hear_talk(M, message_pieces, verb) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 9552477e210..3efcc7a9ce9 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -926,9 +926,10 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven return initial(pixel_y) /mob/living/carbon/emp_act(severity) - for(var/obj/item/organ/internal/O in internal_organs) - O.emp_act(severity) ..() + for(var/X in internal_organs) + var/obj/item/organ/internal/O = X + O.emp_act(severity) /mob/living/carbon/Stat() ..() diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index ad1d249439d..d698a68c6d5 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -206,12 +206,6 @@ emp_act if(martial_art && prob(martial_art.block_chance) && martial_art.can_use(src) && in_throw_mode && !incapacitated(FALSE, TRUE)) return TRUE -/mob/living/carbon/human/emp_act(severity) - for(var/obj/O in src) - if(!O) continue - O.emp_act(severity) - ..() - /mob/living/carbon/human/acid_act(acidpwr, acid_volume, bodyzone_hit) //todo: update this to utilize check_obscured_slots() //and make sure it's check_obscured_slots(TRUE) to stop aciding through visors etc var/list/damaged = list() var/list/inventory_items_to_kill = list() diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 6e4f13d735f..604fd47de16 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -73,10 +73,9 @@ return shock_damage /mob/living/emp_act(severity) - var/list/L = src.get_contents() - for(var/obj/O in L) - O.emp_act(severity) ..() + for(var/obj/O in contents) + O.emp_act(severity) /obj/item/proc/get_volume_by_throwforce_and_or_w_class() if(throwforce && w_class) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index ddc96a7948f..85c4ceac427 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -571,13 +571,13 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( return FALSE /mob/living/silicon/ai/emp_act(severity) + ..() if(prob(30)) switch(pick(1,2)) if(1) view_core() if(2) ai_call_shuttle() - ..() /mob/living/silicon/ai/ex_act(severity) ..() diff --git a/code/modules/mob/living/silicon/robot/syndicate.dm b/code/modules/mob/living/silicon/robot/syndicate.dm index 2b5fd9bb702..f5ac3e5532b 100644 --- a/code/modules/mob/living/silicon/robot/syndicate.dm +++ b/code/modules/mob/living/silicon/robot/syndicate.dm @@ -137,9 +137,9 @@ ..() /mob/living/silicon/robot/syndicate/saboteur/emp_act() + ..() if(cham_proj) cham_proj.disrupt(src) - ..() /mob/living/silicon/robot/syndicate/saboteur/bullet_act() if(cham_proj) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 65267911d7f..6457afc87d4 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -76,17 +76,17 @@ return FALSE //So borgs they don't die trying to fix wiring /mob/living/silicon/emp_act(severity) + ..() switch(severity) if(1) - src.take_organ_damage(20) + take_organ_damage(20) Stun(8) if(2) - src.take_organ_damage(10) + take_organ_damage(10) Stun(3) flash_eyes(affect_silicon = 1) to_chat(src, "*BZZZT*") to_chat(src, "Warning: Electromagnetic pulse detected.") - ..() /mob/living/silicon/proc/damage_mob(var/brute = 0, var/fire = 0, var/tox = 0) diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index de894e80106..eefb4d299a4 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -7,6 +7,12 @@ pressure_resistance = 2 resistance_flags = FLAMMABLE +/obj/item/folder/emp_act(severity) + ..() + for(var/i in contents) + var/atom/A = i + A.emp_act(severity) + /obj/item/folder/blue desc = "A blue folder." icon_state = "folder_blue" diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 0fdca68811c..403df48be69 100755 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -95,6 +95,12 @@ CHECK_TICK ..() +/obj/item/smallDelivery/emp_act(severity) + ..() + for(var/i in contents) + var/atom/A = i + A.emp_act(severity) + /obj/item/smallDelivery/attack_self(mob/user as mob) if(wrapped && wrapped.loc) //sometimes items can disappear. For example, bombs. --rastaf0 wrapped.loc = user.loc From f833bfb08493a0c7a20dd17c349c9b48c71a1442 Mon Sep 17 00:00:00 2001 From: Patrick Meade Date: Fri, 15 May 2020 04:10:31 -0500 Subject: [PATCH 54/61] Your ears feel great --- code/datums/diseases/advance/symptoms/sensory.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/diseases/advance/symptoms/sensory.dm b/code/datums/diseases/advance/symptoms/sensory.dm index c7f488d5002..5759ab32de6 100644 --- a/code/datums/diseases/advance/symptoms/sensory.dm +++ b/code/datums/diseases/advance/symptoms/sensory.dm @@ -62,4 +62,4 @@ Bonus M.reagents.add_reagent("oculine", 20) else if(prob(SYMPTOM_ACTIVATION_PROB * 5)) - to_chat(M, "[pick("Your eyes feel great.","You feel like your eyes can focus more clearly.", "You don't feel the need to blink.","Your eyes feel great.","Your hearing feels more acute.")]") + to_chat(M, "[pick("Your eyes feel great.","You feel like your eyes can focus more clearly.", "You don't feel the need to blink.","Your ears feel great.","Your hearing feels more acute.")]") From 8d838a1b2fc5a54e607e3acbcc5908e5855d24b7 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Sat, 16 May 2020 20:14:37 -0400 Subject: [PATCH 55/61] Fixes Admin Logs (#13448) --- code/controllers/master.dm | 6 +++++- code/game/world.dm | 4 ---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 22fe6d30349..a6026823ec9 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -62,13 +62,17 @@ GLOBAL_REAL(Master, /datum/controller/master) = new var/static/current_ticklimit = TICK_LIMIT_RUNNING /datum/controller/master/New() + //temporary file used to record errors with loading config, moved to log directory once logging is set up + GLOB.config_error_log = GLOB.world_game_log = GLOB.world_runtime_log = "data/logs/config_error.log" + load_configuration() + // Highlander-style: there can only be one! Kill off the old and replace it with the new. + if(!random_seed) random_seed = rand(1, 1e9) rand_seed(random_seed) var/list/_subsystems = list() subsystems = _subsystems - // Highlander-style: there can only be one! Kill off the old and replace it with the new. if(Master != src) if(istype(Master)) Recover() diff --git a/code/game/world.dm b/code/game/world.dm index b57670bb37d..762a0be70a8 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -8,10 +8,6 @@ GLOBAL_LIST_INIT(map_transition_config, MAP_TRANSITION_CONFIG) log_world("World loaded at [time_stamp()]") log_world("[GLOB.vars.len - GLOB.gvars_datum_in_built_vars.len] global variables") - //temporary file used to record errors with loading config, moved to log directory once logging is set up - GLOB.config_error_log = GLOB.world_game_log = GLOB.world_runtime_log = "data/logs/config_error.log" - load_configuration() - if(byond_version < RECOMMENDED_VERSION) log_world("Your server's byond version does not meet the recommended requirements for this code. Please update BYOND") From e93d9826baedd50a67ba43dc59bfd42e4e8b063a Mon Sep 17 00:00:00 2001 From: Ionward Date: Sun, 17 May 2020 14:39:16 -0700 Subject: [PATCH 56/61] Fixes missing Syndicate spacesuits in tajaran/suit.dmi --- icons/mob/species/tajaran/suit.dmi | Bin 110144 -> 130008 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/species/tajaran/suit.dmi b/icons/mob/species/tajaran/suit.dmi index 6d43df756c736e43914a11af07e9fb632b399ae3..2f7d8f34907dc2dac574c0234d6445c1ce01c5c9 100644 GIT binary patch literal 130008 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 literal 110144 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 Date: Mon, 18 May 2020 00:40:18 +0000 Subject: [PATCH 57/61] Tweaks messaging for direction locking (#13334) Tweaks the help text for direction locking so that when you do it, it tells you how to cancel it. Ends all the ahelps/mhelps asking how to turn this feature off. Also fixes a bug where it would say you are "now facing ." (missing word) when shift-clicking yourself or your own tile. Co-authored-by: Kyep --- code/_onclick/click.dm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 6bfd72413de..20e50bb3054 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -261,12 +261,12 @@ if(incapacitated()) return var/face_dir = get_cardinal_dir(src, A) - if(forced_look == face_dir) + if(!face_dir || forced_look == face_dir || A == src) forced_look = null - to_chat(src, "You are no longer facing any direction.") + to_chat(src, "Cancelled direction lock.") return forced_look = face_dir - to_chat(src, "You are now facing [dir2text(forced_look)].") + to_chat(src, "You are now facing [dir2text(forced_look)]. To cancel this, shift-middleclick yourself.") /* Middle shift-control-click @@ -274,12 +274,12 @@ */ /mob/proc/MiddleShiftControlClickOn(atom/A) var/face_uid = A.UID() - if(forced_look == face_uid) + if(forced_look == face_uid || A == src) forced_look = null - to_chat(src, "You are no longer facing [A].") + to_chat(src, "Cancelled direction lock.") return forced_look = face_uid - to_chat(src, "You are now facing [A].") + to_chat(src, "You are now facing [A]. To cancel this, shift-middleclick yourself.") // In case of use break glass /* From 2b5b44469e5327643921cc5985d2c8f2de235956 Mon Sep 17 00:00:00 2001 From: TDSSS <32099540+TDSSS@users.noreply.github.com> Date: Mon, 18 May 2020 02:40:50 +0200 Subject: [PATCH 58/61] Initial commit (#13445) --- code/controllers/subsystem/ticker.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index d8b0c0d6d5b..825eab93a31 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -514,6 +514,11 @@ SUBSYSTEM_DEF(ticker) //Ask the event manager to print round end information SSevents.RoundEnd() + //make big obvious note in game logs that round ended + log_game("///////////////////////////////////////////////////////") + log_game("///////////////////// ROUND ENDED /////////////////////") + log_game("///////////////////////////////////////////////////////") + // Add AntagHUD to everyone, see who was really evil the whole time! for(var/datum/atom_hud/antag/H in GLOB.huds) for(var/m in GLOB.player_list) From 052eef544ad6bf8fc563d4b86dae7d3f078c362f Mon Sep 17 00:00:00 2001 From: datlo Date: Mon, 18 May 2020 02:42:51 +0200 Subject: [PATCH 59/61] Remove crowbarring sound on blast doors and update the proc (#13282) * Update pod door crowbarring * remove crowbar volume on all door subtypes --- code/game/machinery/doors/door.dm | 2 +- code/game/machinery/doors/poddoor.dm | 13 +++++++++++-- code/game/objects/items/weapons/twohanded.dm | 1 + 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index fbbe0201d31..2d6fac3bb81 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -204,7 +204,7 @@ . = TRUE if(operating) return - if(!I.use_tool(src, user, 0, volume = I.tool_volume)) + if(!I.use_tool(src, user, 0, volume = 0)) return try_to_crowbar(user, I) diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index 6f4a84a7535..c0dce817189 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -59,9 +59,18 @@ /obj/machinery/door/poddoor/try_to_activate_door(mob/user) return -/obj/machinery/door/poddoor/try_to_crowbar(obj/item/I, mob/user) +/obj/machinery/door/poddoor/try_to_crowbar(mob/user, obj/item/I) + if(!density) + return if(!hasPower()) - open() + to_chat(user, "You start forcing [src] open...") + if(do_after(user, 50 * I.toolspeed, target = src)) + if(!hasPower()) + open() + else + to_chat(user, "[src] resists your efforts to force it!") + else + to_chat(user, "[src] resists your efforts to force it!") // Whoever wrote the old code for multi-tile spesspod doors needs to burn in hell. - Unknown // Wise words. - Bxil diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index aefedc7b36b..ed857c18ded 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -179,6 +179,7 @@ slot_flags = SLOT_BACK force_unwielded = 5 force_wielded = 24 + toolspeed = 0.25 attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") hitsound = 'sound/weapons/bladeslice.ogg' usesound = 'sound/items/crowbar.ogg' From 630251a0ffd2e1c6b179c111809d744157b105a8 Mon Sep 17 00:00:00 2001 From: TDSSS <32099540+TDSSS@users.noreply.github.com> Date: Mon, 18 May 2020 02:45:28 +0200 Subject: [PATCH 60/61] Makes some space ruins easier to find. (#12647) * Added gps console to some space ruins * adjusts gps naming/NEW * Now actually works --- .../RandomRuins/SpaceRuins/abandonedzoo.dmm | 6 +++++- .../RandomRuins/SpaceRuins/listeningpost.dmm | 6 +++++- .../RandomRuins/SpaceRuins/mechtransport.dmm | 9 ++++++++- .../awaymissions/mission_code/ruins/gps.dm | 13 +++++++++++++ code/modules/telesci/gps.dm | 5 +++-- icons/obj/terminals.dmi | Bin 19936 -> 20197 bytes paradise.dme | 1 + 7 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 code/modules/awaymissions/mission_code/ruins/gps.dm diff --git a/_maps/map_files/RandomRuins/SpaceRuins/abandonedzoo.dmm b/_maps/map_files/RandomRuins/SpaceRuins/abandonedzoo.dmm index 62a22425926..43aa3cd98c7 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/abandonedzoo.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/abandonedzoo.dmm @@ -832,6 +832,10 @@ /obj/item/shard, /turf/space, /area/space/nearstation) +"Hv" = ( +/obj/item/gps/ruin, +/turf/simulated/wall/r_wall, +/area/ruin/unpowered) (1,1,1) = {" aa @@ -973,7 +977,7 @@ aa at at aF -at +Hv aU ay ay diff --git a/_maps/map_files/RandomRuins/SpaceRuins/listeningpost.dmm b/_maps/map_files/RandomRuins/SpaceRuins/listeningpost.dmm index 22d4c0798aa..17d49d666bc 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/listeningpost.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/listeningpost.dmm @@ -269,6 +269,10 @@ icon_state = "freezerfloor" }, /area/ruin/powered) +"Y" = ( +/obj/item/gps/ruin, +/turf/simulated/wall/r_wall, +/area/ruin/powered) (1,1,1) = {" a @@ -960,7 +964,7 @@ b f f p -f +Y f f j diff --git a/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm b/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm index 2a5c0eae533..b4e36942d6a 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm @@ -240,6 +240,13 @@ /obj/structure/shuttle/engine/propulsion, /turf/simulated/shuttle/plating, /area/ruin/powered) +"U" = ( +/obj/item/gps/ruin, +/turf/simulated/shuttle/wall{ + tag = "icon-swall12"; + icon_state = "swall12" + }, +/area/ruin/powered) (1,1,1) = {" a @@ -313,7 +320,7 @@ a c g l -q +U r u t diff --git a/code/modules/awaymissions/mission_code/ruins/gps.dm b/code/modules/awaymissions/mission_code/ruins/gps.dm new file mode 100644 index 00000000000..fa26eea5d0d --- /dev/null +++ b/code/modules/awaymissions/mission_code/ruins/gps.dm @@ -0,0 +1,13 @@ +//local gps units to let the ruins be found easier. + +/obj/item/gps/ruin + name = "navigation console" + desc = "A console for navigation in local space, gives off a weak signal that can be picked up if sufficiently close." + icon = 'icons/obj/terminals.dmi' + icon_state = "gps_console" + anchored = TRUE + local = TRUE + gpstag = "Unknown Signal" + +/obj/item/gps/ruin/attack_hand(mob/user) + attack_self(user) diff --git a/code/modules/telesci/gps.dm b/code/modules/telesci/gps.dm index 94920587b54..9b7ba72209b 100644 --- a/code/modules/telesci/gps.dm +++ b/code/modules/telesci/gps.dm @@ -1,6 +1,6 @@ GLOBAL_LIST_EMPTY(GPS_list) /obj/item/gps - name = "global positioning system" + name = "default gps" desc = "Helping lost spacemen find their way through the planets since 2016." icon = 'icons/obj/telescience.dmi' icon_state = "gps-c" @@ -16,7 +16,8 @@ GLOBAL_LIST_EMPTY(GPS_list) /obj/item/gps/New() ..() GLOB.GPS_list.Add(src) - name = "global positioning system ([gpstag])" + if(name == "default gps") //use default naming scheme + name = "global positioning system ([gpstag])" overlays += "working" /obj/item/gps/Destroy() diff --git a/icons/obj/terminals.dmi b/icons/obj/terminals.dmi index 45baaf3f7ba18797d307cfc327b2cc4410db0e81..c47cd86e6d3a8a38b522dc901248aadab65501f8 100644 GIT binary patch literal 20197 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 Ve^O>0fqk8bot5JivV~{-e*pHj*Zu$i literal 19936 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 T?^Fvaw;^12dpH+39y|XRn)!J- diff --git a/paradise.dme b/paradise.dme index 7324ffaf044..4e45fe53e84 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1313,6 +1313,7 @@ #include "code\modules\awaymissions\mission_code\wildwest.dm" #include "code\modules\awaymissions\mission_code\ghost_role_spawners\golems.dm" #include "code\modules\awaymissions\mission_code\ghost_role_spawners\oldstation.dm" +#include "code\modules\awaymissions\mission_code\ruins\gps.dm" #include "code\modules\awaymissions\mission_code\ruins\oldstation.dm" #include "code\modules\awaymissions\mission_code\ruins\wizardcrash.dm" #include "code\modules\buildmode\bm_mode.dm" From 19d5c945bf85dc577fe804c0bc9535950ff24abc Mon Sep 17 00:00:00 2001 From: TDSSS <32099540+TDSSS@users.noreply.github.com> Date: Mon, 18 May 2020 02:47:18 +0200 Subject: [PATCH 61/61] Emagproofs CC, adds admin warning if ert shuttle is moved by non-ert (#12795) * Increased security * Increased security * Fixes little oversight. * Added admin warning * Spelling --- _maps/map_files/cyberiad/z2.dmm | 30 ++++++++++++++++++++++-------- code/modules/shuttle/ert.dm | 8 ++++++++ 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index 684365ada39..999be71a118 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -5006,6 +5006,20 @@ name = "grass" }, /area/centcom/control) +"nc" = ( +/obj/machinery/door/airlock/centcom{ + name = "Gamma Armory"; + opacity = 1; + req_access_txt = "114" + }, +/obj/machinery/door/poddoor/impassable{ + id_tag = "CCGAMMA"; + name = "Gamma Security" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/centcom/gamma) "nd" = ( /obj/structure/flora/ausbushes/lavendergrass, /turf/unsimulated/floor{ @@ -5381,7 +5395,7 @@ }, /area/syndicate_mothership) "nQ" = ( -/obj/machinery/door/poddoor{ +/obj/machinery/door/poddoor/impassable{ id_tag = "GRAVPULTS"; name = "Gravity Catapults" }, @@ -5391,7 +5405,7 @@ }, /area/centcom/specops) "nR" = ( -/obj/machinery/door/poddoor{ +/obj/machinery/door/poddoor/impassable{ id_tag = "GRAVPULTS"; name = "Gravity Catapults" }, @@ -5408,7 +5422,7 @@ }, /area/syndicate_mothership) "nT" = ( -/obj/machinery/door/poddoor{ +/obj/machinery/door/poddoor/impassable{ id_tag = "ASSAULT"; name = "Assault Armor" }, @@ -5854,7 +5868,7 @@ }, /area/centcom/gamma) "oR" = ( -/obj/machinery/door/poddoor{ +/obj/machinery/door/poddoor/impassable{ id_tag = "SPECOPS"; name = "Ready Room" }, @@ -5979,7 +5993,7 @@ opacity = 1; req_access_txt = "114" }, -/obj/machinery/door/poddoor{ +/obj/machinery/door/poddoor/impassable{ id_tag = "specopsoffice"; name = "Super Privacy Shutters" }, @@ -6118,7 +6132,7 @@ /turf/simulated/floor/mech_bay_recharge_floor, /area/shuttle/gamma/space) "pv" = ( -/obj/machinery/door/poddoor{ +/obj/machinery/door/poddoor/impassable{ id_tag = "CCTELE"; name = "Specops Teleporter" }, @@ -6365,7 +6379,7 @@ /area/centcom/specops) "pX" = ( /obj/machinery/door_control{ - desc = "A remote control switch to block view of the singularity."; + desc = "A remote control switch to connect the ready room to the rest of Centcom."; icon_state = "doorctrl0"; id = "SPECOPS"; name = "Ready Room"; @@ -29642,7 +29656,7 @@ fm fm md md -oO +nc fm pv sX diff --git a/code/modules/shuttle/ert.dm b/code/modules/shuttle/ert.dm index 1f664a69c8f..356ca9687dc 100644 --- a/code/modules/shuttle/ert.dm +++ b/code/modules/shuttle/ert.dm @@ -6,6 +6,14 @@ resistance_flags = INDESTRUCTIBLE flags = NODECONSTRUCT +/obj/machinery/computer/shuttle/ert/Topic(href, href_list) + if(href_list["move"]) + var/authorized_roles = list(SPECIAL_ROLE_ERT, SPECIAL_ROLE_DEATHSQUAD) + if(!((usr.mind.assigned_role in authorized_roles) || is_admin(usr))) + message_admins("Potential ERT shuttle hijack, ERT shuttle moved by unauthorized user: [key_name_admin(usr)]") + ..() + + /obj/machinery/computer/camera_advanced/shuttle_docker/ert name = "specops navigation computer" desc = "Used to designate a precise transit location for the specops shuttle."