From b2a984fd8abbcfc21b537621836e74f1c77a72dd Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Sat, 21 Oct 2017 19:23:26 -0400 Subject: [PATCH 01/95] Inlines compile_overlays --- .../subsystem/processing/overlays.dm | 32 +++++++++++-------- .../mob/dead/new_player/preferences_setup.dm | 2 +- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/code/controllers/subsystem/processing/overlays.dm b/code/controllers/subsystem/processing/overlays.dm index fba4ebcaf05..d1aa3cd1f09 100644 --- a/code/controllers/subsystem/processing/overlays.dm +++ b/code/controllers/subsystem/processing/overlays.dm @@ -26,13 +26,30 @@ PROCESSING_SUBSYSTEM_DEF(overlays) overlay_icon_cache = SSoverlays.overlay_icon_cache processing = SSoverlays.processing +#define COMPILE_OVERLAYS(A)\ + var/list/oo = A.our_overlays;\ + var/list/po = A.priority_overlays;\ + if(LAZYLEN(po) && LAZYLEN(oo)){ + A.overlays = oo + po;\ + }\ + else if(LAZYLEN(oo)){\ + A.overlays = oo;\ + }\ + else if(LAZYLEN(po)){\ + A.overlays = po;\ + }\ + else{\ + A.overlays.Cut();\ + }\ + A.flags_1 &= ~OVERLAY_QUEUED_1 + /datum/controller/subsystem/processing/overlays/fire(resumed = FALSE, mc_check = TRUE) var/list/processing = src.processing while(processing.len) var/atom/thing = processing[processing.len] processing.len-- if(thing) - thing.compile_overlays() + COMPILE_OVERLAYS(thing) if(mc_check) if(MC_TICK_CHECK) break @@ -44,19 +61,6 @@ PROCESSING_SUBSYSTEM_DEF(overlays) testing("Flushing [processing.len] overlays") fire(mc_check = FALSE) //pair this thread up with the MC to get extra compile time -/atom/proc/compile_overlays() - var/list/oo = our_overlays - var/list/po = priority_overlays - if(LAZYLEN(po) && LAZYLEN(oo)) - overlays = oo + po - else if(LAZYLEN(oo)) - overlays = oo - else if(LAZYLEN(po)) - overlays = po - else - overlays.Cut() - flags_1 &= ~OVERLAY_QUEUED_1 - /proc/iconstate2appearance(icon, iconstate) var/static/image/stringbro = new() var/list/icon_states_cache = SSoverlays.overlay_icon_state_caches diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index 633418f5717..22d9fa3d9c0 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -60,7 +60,7 @@ if(previewJob) mannequin.job = previewJob.title previewJob.equip(mannequin, TRUE) - mannequin.compile_overlays() + COMPILE_OVERLAYS(mannequin) CHECK_TICK preview_icon = icon('icons/effects/effects.dmi', "nothing") preview_icon.Scale(48+32, 16+32) From 3f73a99cf11cfa5ed0555d1d352b5a0ad9e1ef1b Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Sat, 21 Oct 2017 19:26:48 -0400 Subject: [PATCH 02/95] Optimizes COMPILE_OVERLAYS --- code/controllers/subsystem/processing/overlays.dm | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/code/controllers/subsystem/processing/overlays.dm b/code/controllers/subsystem/processing/overlays.dm index d1aa3cd1f09..88d76da8c4b 100644 --- a/code/controllers/subsystem/processing/overlays.dm +++ b/code/controllers/subsystem/processing/overlays.dm @@ -29,15 +29,17 @@ PROCESSING_SUBSYSTEM_DEF(overlays) #define COMPILE_OVERLAYS(A)\ var/list/oo = A.our_overlays;\ var/list/po = A.priority_overlays;\ - if(LAZYLEN(po) && LAZYLEN(oo)){ - A.overlays = oo + po;\ + if(LAZYLEN(po)){\ + if(LAZYLEN(oo)){ + A.overlays = oo + po;\ + }\ + else{\ + A.overlays = po;\ + }\ }\ else if(LAZYLEN(oo)){\ A.overlays = oo;\ }\ - else if(LAZYLEN(po)){\ - A.overlays = po;\ - }\ else{\ A.overlays.Cut();\ }\ From c6a8e30f47def216ca8b612f00836710acb57ae9 Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Sat, 21 Oct 2017 19:43:27 -0400 Subject: [PATCH 03/95] Add missing '\' --- code/controllers/subsystem/processing/overlays.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/controllers/subsystem/processing/overlays.dm b/code/controllers/subsystem/processing/overlays.dm index 88d76da8c4b..c03b1eafb7f 100644 --- a/code/controllers/subsystem/processing/overlays.dm +++ b/code/controllers/subsystem/processing/overlays.dm @@ -30,7 +30,7 @@ PROCESSING_SUBSYSTEM_DEF(overlays) var/list/oo = A.our_overlays;\ var/list/po = A.priority_overlays;\ if(LAZYLEN(po)){\ - if(LAZYLEN(oo)){ + if(LAZYLEN(oo)){\ A.overlays = oo + po;\ }\ else{\ From ac60b1021ecd73336ded80fcc2ab4586b8595a18 Mon Sep 17 00:00:00 2001 From: ShizCalev Date: Sat, 21 Oct 2017 23:47:25 -0400 Subject: [PATCH 04/95] fixes reflectors dropping extra mats --- code/game/objects/structures/reflector.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/structures/reflector.dm b/code/game/objects/structures/reflector.dm index 1f25c0dbbbf..45f9c3614d8 100644 --- a/code/game/objects/structures/reflector.dm +++ b/code/game/objects/structures/reflector.dm @@ -58,7 +58,8 @@ playsound(src.loc, W.usesound, 50, 1) to_chat(user, "You dismantle [src].") new framebuildstacktype(loc, framebuildstackamount) - new buildstacktype(loc, buildstackamount) + if(buildstackamount) + new buildstacktype(loc, buildstackamount) qdel(src) else if(istype(W, /obj/item/weldingtool)) var/obj/item/weldingtool/WT = W From d869ff7bba5ff209a92f2c83b3650bf778790186 Mon Sep 17 00:00:00 2001 From: LeoZ Date: Sun, 22 Oct 2017 15:57:14 -0200 Subject: [PATCH 05/95] Selecting multiple choice polls with 1 choice now become a single option poll --- code/modules/admin/create_poll.dm | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/code/modules/admin/create_poll.dm b/code/modules/admin/create_poll.dm index d93b21d7f89..b1cda46ecee 100644 --- a/code/modules/admin/create_poll.dm +++ b/code/modules/admin/create_poll.dm @@ -6,7 +6,7 @@ if(!SSdbcore.Connect()) to_chat(src, "Failed to establish database connection.") return - var/polltype = input("Choose poll type.","Poll Type") in list("Single Option","Text Reply","Rating","Multiple Choice", "Instant Runoff Voting")|null + var/polltype = input("Choose poll type.","Poll Type") as null|anything in list("Single Option","Text Reply","Rating","Multiple Choice", "Instant Runoff Voting") var/choice_amount = 0 switch(polltype) if("Single Option") @@ -18,10 +18,14 @@ if("Multiple Choice") polltype = POLLTYPE_MULTI choice_amount = input("How many choices should be allowed?","Select choice amount") as num|null - if(choice_amount == 0) - to_chat(src, "Multiple choice poll must have at least one choice allowed.") - else if (choice_amount == null) - return + switch(choice_amount) + if(0) + to_chat(src, "Multiple choice poll must have at least one choice allowed.") + return + if(1) + polltype = POLLTYPE_OPTION + if(null) + return if ("Instant Runoff Voting") polltype = POLLTYPE_IRV else From d85fbec9b2c14acb1d29fd6b2879127307302053 Mon Sep 17 00:00:00 2001 From: kevinz000 Date: Mon, 23 Oct 2017 06:19:40 -0700 Subject: [PATCH 06/95] Update mecha_defense.dm (#31834) --- code/game/mecha/mecha_defense.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/game/mecha/mecha_defense.dm b/code/game/mecha/mecha_defense.dm index a75294c28f3..590c19b5042 100644 --- a/code/game/mecha/mecha_defense.dm +++ b/code/game/mecha/mecha_defense.dm @@ -25,6 +25,8 @@ /obj/mecha/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) . = ..() + if(!damage_amount) + return 0 var/booster_deflection_modifier = 1 var/booster_damage_modifier = 1 if(damage_flag == "bullet" || damage_flag == "laser" || damage_flag == "energy") From 6ced8a1ae7c566c73f649d28dcd010d635f9cf56 Mon Sep 17 00:00:00 2001 From: vuonojenmustaturska Date: Mon, 23 Oct 2017 16:21:57 +0300 Subject: [PATCH 07/95] Fixes grinders (#31885) * But you're still hungry * Update reagentgrinder.dm --- code/modules/reagents/chemistry/machinery/reagentgrinder.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 8c84954ad6c..a7bdab2d4b8 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -285,7 +285,9 @@ updateUsrDialog() /obj/machinery/reagentgrinder/proc/get_allowed_by_obj(obj/item/O) - return blend_items[O.type] + for (var/i in blend_items) + if (istype(O, i)) + return blend_items[i] /obj/machinery/reagentgrinder/proc/get_allowed_juice_by_obj(obj/item/reagent_containers/food/snacks/O) for(var/i in juice_items) @@ -433,7 +435,7 @@ if (O.Uses > 0) beaker.reagents.add_reagent("slimejelly",min(20, space)) remove_object(O) - else if(istype(I, /obj/item/reagent_containers)) + if(istype(I, /obj/item/reagent_containers)) var/obj/item/reagent_containers/O = I var/amount = O.reagents.total_volume O.reagents.trans_to(beaker, amount) From ce36672c3eab13065025526993068deff4e16c00 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 23 Oct 2017 06:22:00 -0700 Subject: [PATCH 08/95] Automatic changelog generation for PR #31885 [ci skip] --- html/changelogs/AutoChangeLog-pr-31885.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-31885.yml diff --git a/html/changelogs/AutoChangeLog-pr-31885.yml b/html/changelogs/AutoChangeLog-pr-31885.yml new file mode 100644 index 00000000000..53998059083 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-31885.yml @@ -0,0 +1,4 @@ +author: "Naksu" +delete-after: True +changes: + - bugfix: "Grinders will now grind grown items like cocoa pods again" From 8e434b7d9689cf60c7468fe97cb4040c70dfdf9a Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Mon, 23 Oct 2017 09:24:41 -0400 Subject: [PATCH 09/95] Removes duplicate typecaches (#31883) * Audits all typecache calls for performance gains * Fix invalid var --- code/__HELPERS/AStar.dm | 2 +- code/_globalvars/lists/typecache.dm | 6 +++--- code/game/machinery/iv_drip.dm | 5 ++--- code/game/turfs/simulated/dirtystation.dm | 2 +- code/modules/hydroponics/grown/towercap.dm | 16 ++++++++-------- .../mining/lavaland/necropolis_chests.dm | 6 +----- .../mob/living/carbon/human/human_defines.dm | 4 ++-- code/modules/mob/living/silicon/robot/robot.dm | 2 +- .../simple_animal/hostile/mecha_pilot.dm | 4 ++-- .../hostile/megafauna/colossus.dm | 7 +------ .../simple_animal/hostile/megafauna/swarmer.dm | 12 +----------- code/modules/mob/mob.dm | 1 - code/modules/mob/mob_defines.dm | 1 - .../mapGeneratorModules/helpers.dm | 4 ++-- code/modules/surgery/organs/tongue.dm | 18 ++++++++++-------- 15 files changed, 35 insertions(+), 55 deletions(-) diff --git a/code/__HELPERS/AStar.dm b/code/__HELPERS/AStar.dm index 1d165d21021..6be5fc2b160 100644 --- a/code/__HELPERS/AStar.dm +++ b/code/__HELPERS/AStar.dm @@ -154,7 +154,7 @@ Actual Adjacent procs : /turf/proc/reachableAdjacentTurfs(caller, ID, simulated_only) var/list/L = new() var/turf/T - var/static/space_type_cache = typecacheof(list(/turf/open/space)) + var/static/space_type_cache = typecacheof(/turf/open/space) for(var/dir in GLOB.cardinals) T = get_step(src,dir) diff --git a/code/_globalvars/lists/typecache.dm b/code/_globalvars/lists/typecache.dm index dfa99b67067..ad4564cf3b4 100644 --- a/code/_globalvars/lists/typecache.dm +++ b/code/_globalvars/lists/typecache.dm @@ -3,9 +3,9 @@ //Note: typecache can only replace istype if you know for sure the thing is at least a datum. -GLOBAL_LIST_INIT(typecache_mob, typecacheof(list(/mob))) +GLOBAL_LIST_INIT(typecache_mob, typecacheof(/mob)) -GLOBAL_LIST_INIT(typecache_living, typecacheof(list(/mob/living))) +GLOBAL_LIST_INIT(typecache_living, typecacheof(/mob/living)) -GLOBAL_LIST_INIT(typecache_machine_or_structure, typecacheof(list(/obj/machinery))|typecacheof(list(/obj/structure))) +GLOBAL_LIST_INIT(typecache_machine_or_structure, typecacheof(list(/obj/machinery, /obj/structure))) diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 98bef7480b3..3a4f41843f0 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -10,14 +10,13 @@ var/mob/living/carbon/attached = null var/mode = IV_INJECTING var/obj/item/reagent_containers/beaker = null - var/list/drip_containers = list(/obj/item/reagent_containers/blood, + var/static/list/drip_containers = typecacheof(list(/obj/item/reagent_containers/blood, /obj/item/reagent_containers/food, - /obj/item/reagent_containers/glass) + /obj/item/reagent_containers/glass)) /obj/machinery/iv_drip/Initialize() . = ..() update_icon() - drip_containers = typecacheof(drip_containers) /obj/machinery/iv_drip/Destroy() attached = null diff --git a/code/game/turfs/simulated/dirtystation.dm b/code/game/turfs/simulated/dirtystation.dm index cc3688d0643..c411d4b6b13 100644 --- a/code/game/turfs/simulated/dirtystation.dm +++ b/code/game/turfs/simulated/dirtystation.dm @@ -72,7 +72,7 @@ return //Hangars and pods covered in oil. - var/static/list/oily_areas = typecacheof(list(/area/quartermaster)) + var/static/list/oily_areas = typecacheof(/area/quartermaster) if(is_type_in_typecache(A, oily_areas)) if(prob(25)) new /obj/effect/decal/cleanable/oil(src) diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index f11d6e07725..0d35c7cb6ed 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -44,15 +44,11 @@ attack_verb = list("bashed", "battered", "bludgeoned", "whacked") var/plank_type = /obj/item/stack/sheet/mineral/wood var/plank_name = "wooden planks" - var/list/accepted = list(/obj/item/reagent_containers/food/snacks/grown/tobacco, + var/static/list/accepted = typecacheof(list(/obj/item/reagent_containers/food/snacks/grown/tobacco, /obj/item/reagent_containers/food/snacks/grown/tea, /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, /obj/item/reagent_containers/food/snacks/grown/ambrosia/deus, - /obj/item/reagent_containers/food/snacks/grown/wheat) - -/obj/item/grown/log/Initialize() - . = ..() - accepted = typecacheof(accepted) + /obj/item/reagent_containers/food/snacks/grown/wheat)) /obj/item/grown/log/attackby(obj/item/W, mob/user, params) if(W.sharpness) @@ -69,7 +65,7 @@ to_chat(user, "You add the newly-formed [plank_name] to the stack. It now contains [plank.amount] [plank_name].") qdel(src) - if(is_type_in_typecache(W,accepted)) + if(CheckAccepted(W)) var/obj/item/reagent_containers/food/snacks/grown/leaf = W if(leaf.dry) user.show_message("You wrap \the [W] around the log, turning it into a torch!") @@ -84,6 +80,9 @@ else return ..() +/obj/item/grown/log/proc/CheckAccepted(obj/item/I) + return is_type_in_typecache(I, accepted) + /obj/item/grown/log/tree seed = null name = "wood log" @@ -94,10 +93,11 @@ name = "steel-cap log" desc = "It's made of metal." icon_state = "steellogs" - accepted = list() plank_type = /obj/item/stack/rods plank_name = "rods" +/obj/item/grown/log/steel/CheckAccepted(obj/item/I) + return FALSE /////////BONFIRES////////// diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index cd4a9d18dda..4d3dc5db378 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -880,11 +880,7 @@ var/create_delay = 30 var/reset_cooldown = 50 var/timer = 0 - var/banned_turfs - -/obj/item/lava_staff/Initialize() - . = ..() - banned_turfs = typecacheof(list(/turf/open/space/transit, /turf/closed)) + var/static/list/banned_turfs = typecacheof(list(/turf/open/space/transit, /turf/closed)) /obj/item/lava_staff/afterattack(atom/target, mob/user, proximity_flag, click_parameters) ..() diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index bc6890ef3be..8e72b264199 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -45,6 +45,6 @@ var/datum/personal_crafting/handcrafting can_buckle = TRUE buckle_lying = FALSE - can_ride_typecache = list(/mob/living/carbon/human, /mob/living/simple_animal/slime, /mob/living/simple_animal/parrot) - var/creamed = FALSE //to use with creampie overlays \ No newline at end of file + var/creamed = FALSE //to use with creampie overlays + var/static/list/can_ride_typecache = typecacheof(list(/mob/living/carbon/human, /mob/living/simple_animal/slime, /mob/living/simple_animal/parrot)) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 21e51d51ff0..cf6e3f53cc7 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -95,7 +95,7 @@ can_buckle = TRUE buckle_lying = FALSE - can_ride_typecache = list(/mob/living/carbon/human) + var/static/list/can_ride_typecache = typecacheof(/mob/living/carbon/human) /mob/living/silicon/robot/get_cell() return cell diff --git a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm index 378b5d9b8ea..f9868771ac0 100644 --- a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm +++ b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm @@ -41,7 +41,7 @@ /mob/living/simple_animal/hostile/syndicate/mecha_pilot/no_mech/Initialize() . = ..() - wanted_objects = typecacheof(/obj/mecha/combat, ignore_root_path=TRUE) + wanted_objects = typecacheof(/obj/mecha/combat, TRUE) /mob/living/simple_animal/hostile/syndicate/mecha_pilot/nanotrasen //nanotrasen are syndies! no it's just a weird path. name = "Nanotrasen Mecha Pilot" @@ -101,7 +101,7 @@ targets_from = src //Find a new mecha - wanted_objects = typecacheof(/obj/mecha/combat, ignore_root_path=TRUE) + wanted_objects = typecacheof(/obj/mecha/combat, TRUE) var/search_aggressiveness = 2 for(var/obj/mecha/combat/C in range(vision_range,src)) if(is_valid_mecha(C)) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 6fb3574f642..2216c8d092c 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -663,12 +663,7 @@ Difficulty: Very Hard activation_method = ACTIVATE_TOUCH cooldown_add = 50 activation_sound = 'sound/magic/timeparadox2.ogg' - var/list/banned_items_typecache = list(/obj/item/storage, /obj/item/implant, /obj/item/implanter, /obj/item/disk/nuclear, /obj/item/projectile, /obj/item/spellbook) - -/obj/machinery/anomalous_crystal/refresher/Initialize() - . = ..() - banned_items_typecache = typecacheof(banned_items_typecache) - + var/static/list/banned_items_typecache = typecacheof(list(/obj/item/storage, /obj/item/implant, /obj/item/implanter, /obj/item/disk/nuclear, /obj/item/projectile, /obj/item/spellbook)) /obj/machinery/anomalous_crystal/refresher/ActivationReaction(mob/user, method) if(..()) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm index 10906114dd6..4c803d6c006 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm @@ -172,16 +172,9 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa search_objects = 1 attack_all_objects = TRUE //attempt to nibble everything lose_patience_timeout = 150 - var/static/list/sharedWanted = list(/turf/closed/mineral, /turf/closed/wall) //eat rocks and walls + var/static/list/sharedWanted = typecacheof(list(/turf/closed/mineral, /turf/closed/wall)) //eat rocks and walls var/static/list/sharedIgnore = list() - -/mob/living/simple_animal/hostile/swarmer/ai/resource/Initialize() - . = ..() - sharedWanted = typecacheof(sharedWanted) - sharedIgnore = typecacheof(sharedIgnore) - - //This handles viable things to eat/attack //Place specific cases of AI derpiness here //Most can be left to the automatic Gain/LosePatience() system @@ -239,18 +232,15 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa //So swarmers can learn what is and isn't food /mob/living/simple_animal/hostile/swarmer/ai/resource/proc/add_type_to_wanted(typepath) - LAZYINITLIST(sharedWanted) if(!sharedWanted[typepath])// this and += is faster than |= sharedWanted += typecacheof(typepath) /mob/living/simple_animal/hostile/swarmer/ai/resource/proc/add_type_to_ignore(typepath) - LAZYINITLIST(sharedIgnore) if(!sharedIgnore[typepath]) sharedIgnore += typecacheof(typepath) - //RANGED SWARMER /mob/living/simple_animal/hostile/swarmer/ai/ranged_combat icon_state = "swarmer_ranged" diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index b11808b67fe..498530c076f 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -26,7 +26,6 @@ else GLOB.living_mob_list += src prepare_huds() - can_ride_typecache = typecacheof(can_ride_typecache) for(var/v in GLOB.active_alternate_appearances) if(!v) continue diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index e03436acada..cc562ee5415 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -140,7 +140,6 @@ var/list/observers = null //The list of people observing this mob. var/list/progressbars = null //for stacking do_after bars - var/list/can_ride_typecache = list() var/list/mousemove_intercept_objects diff --git a/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm b/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm index 6fdcccd43fa..4f761412f7c 100644 --- a/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm +++ b/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm @@ -32,7 +32,7 @@ /datum/mapGeneratorModule/bottomLayer/massdelete/no_delete_mobs/New() ..() - ignore_typecache = typecacheof(list(/mob)) + ignore_typecache = GLOB.typecache_mob /datum/mapGeneratorModule/bottomLayer/massdelete/leave_turfs deleteturfs = FALSE @@ -42,7 +42,7 @@ /datum/mapGeneratorModule/bottomLayer/massdelete/regeneration_delete/New() ..() - ignore_typecache = typecacheof(list(/mob)) + ignore_typecache = GLOB.typecache_mob //Only places atoms/turfs on area borders /datum/mapGeneratorModule/border diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm index 5d9c96336a1..6420d8610e1 100644 --- a/code/modules/surgery/organs/tongue.dm +++ b/code/modules/surgery/organs/tongue.dm @@ -8,10 +8,7 @@ var/list/languages_possible var/say_mod = null var/taste_sensitivity = 15 // lower is more sensitive. - -/obj/item/organ/tongue/Initialize(mapload) - . = ..() - languages_possible = typecacheof(list( + var/static/list/languages_possible_base = typecacheof(list( /datum/language/common, /datum/language/draconic, /datum/language/codespeak, @@ -21,6 +18,10 @@ /datum/language/ratvar )) +/obj/item/organ/tongue/Initialize(mapload) + . = ..() + languages_possible = languages_possible_base + /obj/item/organ/tongue/get_spans() return list() @@ -124,16 +125,17 @@ icon_state = "tonguexeno" say_mod = "hisses" taste_sensitivity = 10 // LIZARDS ARE ALIENS CONFIRMED - -/obj/item/organ/tongue/alien/Initialize(mapload) - . = ..() - languages_possible = typecacheof(list( + var/static/list/languages_possible_alien = typecacheof(list( /datum/language/xenocommon, /datum/language/common, /datum/language/draconic, /datum/language/ratvar, /datum/language/monkey)) +/obj/item/organ/tongue/alien/Initialize(mapload) + . = ..() + languages_possible = languages_possible_alien + /obj/item/organ/tongue/alien/TongueSpeech(var/message) playsound(owner, "hiss", 25, 1, 1) return message From dd5da304fe46fb44df8b2855b6a280bc3495475e Mon Sep 17 00:00:00 2001 From: ShizCalev Date: Mon, 23 Oct 2017 09:38:00 -0400 Subject: [PATCH 10/95] Makes cleanbots clean up remains (#31876) * Makes cleanbots clean up remains * Gooooooooo * Acid_act --- code/modules/mob/living/simple_animal/bot/cleanbot.dm | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index af4d8736b65..18c4dcd40c5 100644 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm @@ -124,6 +124,9 @@ if(!target) //Search for decals then. target = scan(/obj/effect/decal/cleanable) + + if(!target) //Checks for remains + target = scan(/obj/effect/decal/remains) if(!target && trash) //Then for trash. target = scan(/obj/item/trash) @@ -178,7 +181,8 @@ /obj/effect/decal/cleanable/ash, /obj/effect/decal/cleanable/greenglow, /obj/effect/decal/cleanable/dirt, - /obj/effect/decal/cleanable/deadcockroach + /obj/effect/decal/cleanable/deadcockroach, + /obj/effect/decal/remains ) if(blood) @@ -213,9 +217,9 @@ target = null mode = BOT_IDLE icon_state = "cleanbot[on]" - else if(istype(A, /obj/item)) + else if(istype(A, /obj/item) || istype(A, /obj/effect/decal/remains)) visible_message("[src] sprays hydrofluoric acid at [A]!") - playsound(src.loc, 'sound/effects/spray2.ogg', 50, 1, -6) + playsound(src, 'sound/effects/spray2.ogg', 50, 1, -6) A.acid_act(75, 10) else if(istype(A, /mob/living/simple_animal/cockroach) || istype(A, /mob/living/simple_animal/mouse)) var/mob/living/simple_animal/M = target From 22a0e4d12ae8b31bdcc9a392e04b4b65d0af94a9 Mon Sep 17 00:00:00 2001 From: kevinz000 Date: Mon, 23 Oct 2017 06:58:31 -0700 Subject: [PATCH 11/95] fixes AIs being able to teleport the id card console inserted cards to their core (#32003) * Update card.dm * Update card.dm --- code/game/machinery/computer/card.dm | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index fdc4428ae38..032b902fae3 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -537,10 +537,13 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) /obj/machinery/computer/card/proc/eject_id_scan(mob/user) if(scan) scan.forceMove(drop_location()) - user.put_in_hands(scan) + if(!issilicon(user) && Adjacent(user)) + user.put_in_hands(scan) playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0) scan = null else //switching the ID with the one you're holding + if(issilicon(user) || !Adjacent(user)) + return var/obj/item/I = user.get_active_held_item() if(istype(I, /obj/item/card/id)) if(!user.transferItemToLoc(I,src)) @@ -555,12 +558,15 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) GLOB.data_core.manifest_modify(modify.registered_name, modify.assignment) modify.update_label() modify.forceMove(drop_location()) - user.put_in_hands(modify) + if(!issilicon(user) && Adjacent(user)) + user.put_in_hands(modify) playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0) modify = null region_access = null head_subordinates = null else //switching the ID with the one you're holding + if(issilicon(user) || !Adjacent(user)) + return var/obj/item/I = user.get_active_held_item() if(istype(I, /obj/item/card/id)) if (!user.transferItemToLoc(I,src)) From 3bcfd582dcb594000895d787c5cff762f930e39a Mon Sep 17 00:00:00 2001 From: YPOQ <30683121+YPOQ@users.noreply.github.com> Date: Mon, 23 Oct 2017 08:00:11 -0600 Subject: [PATCH 12/95] Fixes get_turf_pixel returning null when called on turfs (#32000) --- code/__HELPERS/unsorted.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index e24fd551df9..d94bfb4c5b5 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -511,14 +511,14 @@ Do not set recursive depth higher than MAX_PROC_DEPTH as byond breaks when that */ /atom/proc/GetAllContents(list/output=list(), recursive_depth=MAX_PROC_DEPTH, _current_depth=0) . = output - output += src + output += src if(_current_depth == recursive_depth) if(_current_depth == MAX_PROC_DEPTH) WARNING("Get all contents reached the max recursive depth of [MAX_PROC_DEPTH]. More and we would break shit. Offending atom: [src]") return - for(var/i in 1 to contents.len) - var/atom/thing = contents[i] - thing.GetAllContents(output, recursive_depth, ++_current_depth) + for(var/i in 1 to contents.len) + var/atom/thing = contents[i] + thing.GetAllContents(output, recursive_depth, ++_current_depth) //Step-towards method of determining whether one atom can see another. Similar to viewers() /proc/can_see(atom/source, atom/target, length=5) // I couldnt be arsed to do actual raycasting :I This is horribly inaccurate. @@ -739,7 +739,7 @@ Do not set recursive depth higher than MAX_PROC_DEPTH as byond breaks when that */ -/proc/get_turf_pixel(atom/movable/AM) +/proc/get_turf_pixel(atom/AM) if(!istype(AM)) return From 1dc0519273f97659c64958639ec7ae8e4416e531 Mon Sep 17 00:00:00 2001 From: vuonojenmustaturska Date: Mon, 23 Oct 2017 21:31:17 +0300 Subject: [PATCH 13/95] Removes mob references from camera motion tracking (#32002) * Delicious Ron's Country Club Cameras * requested changes * requested changes 2: electric boogaloo * Requested changes 3: back to perfection --- code/game/machinery/camera/motion.dm | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm index 97e7e101b14..9921b0f8771 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -15,8 +15,9 @@ if (elapsed > alarm_delay) triggerAlarm() else if (detectTime == -1) - for (var/mob/target in getTargetList()) - if (target.stat == DEAD || (!area_motion && !in_range(src, target))) + for (var/targetref in getTargetList()) + var/mob/target = locate(targetref) in GLOB.mob_list + if (target.stat == DEAD || QDELETED(target) || (!area_motion && !in_range(src, target))) //If not part of a monitored area and the camera is not in range or the target is dead lostTarget(target) @@ -31,8 +32,7 @@ if (detectTime == 0) detectTime = world.time // start the clock var/list/targets = getTargetList() - if (!(target in targets)) - targets += target + targets |= "\ref[target]" return 1 /obj/machinery/camera/Destroy() @@ -43,8 +43,7 @@ /obj/machinery/camera/proc/lostTarget(mob/target) var/list/targets = getTargetList() - if (target in targets) - targets -= target + targets -= "\ref[target]" if (targets.len == 0) cancelAlarm() From 2da3ebdb76b166803a1b060640f4207289f4d1be Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 23 Oct 2017 11:31:20 -0700 Subject: [PATCH 14/95] Automatic changelog generation for PR #32002 [ci skip] --- html/changelogs/AutoChangeLog-pr-32002.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-32002.yml diff --git a/html/changelogs/AutoChangeLog-pr-32002.yml b/html/changelogs/AutoChangeLog-pr-32002.yml new file mode 100644 index 00000000000..46084b13db3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-32002.yml @@ -0,0 +1,4 @@ +author: "Naksu" +delete-after: True +changes: + - code_imp: "Cameras no longer keep hard references to mobs in their motion tracking list." From b2eacb6358ef84aa65c4d30fe7ad9e7bca9811e0 Mon Sep 17 00:00:00 2001 From: ShizCalev Date: Mon, 23 Oct 2017 15:32:38 -0400 Subject: [PATCH 15/95] Fixes missing mag controllers on delta (#32006) --- _maps/map_files/Deltastation/DeltaStation2.dmm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 32a8a896056..6982fe29275 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -54633,6 +54633,9 @@ /area/security/range) "ckl" = ( /obj/structure/table/reinforced, +/obj/machinery/magnetic_controller{ + autolink = 1 + }, /obj/machinery/airalarm{ dir = 1; pixel_y = -22 @@ -77509,6 +77512,9 @@ /area/science/research) "dhv" = ( /obj/structure/table/reinforced, +/obj/machinery/magnetic_controller{ + autolink = 1 + }, /obj/item/gun/energy/laser/practice{ pixel_x = 3; pixel_y = -3 From 1c762857d48a7f328c6108ad429a698e56fb1cd7 Mon Sep 17 00:00:00 2001 From: Xhuis Date: Mon, 23 Oct 2017 15:44:58 -0400 Subject: [PATCH 16/95] Rebalances clockwork marauders --- code/game/gamemodes/clock_cult/clock_mobs.dm | 6 ++ .../clock_mobs/clockwork_marauder.dm | 60 +++++++++++++------ 2 files changed, 47 insertions(+), 19 deletions(-) diff --git a/code/game/gamemodes/clock_cult/clock_mobs.dm b/code/game/gamemodes/clock_cult/clock_mobs.dm index 37933514f81..bd9c52b19fc 100644 --- a/code/game/gamemodes/clock_cult/clock_mobs.dm +++ b/code/game/gamemodes/clock_cult/clock_mobs.dm @@ -54,8 +54,14 @@ else msg += "[t_He] look[t_s] severely dented!\n" msg += "" + var/addendum = examine_info() + if(addendum) + msg += "[addendum]\n" msg += "*---------*" to_chat(user, msg) +/mob/living/simple_animal/hostile/clockwork/proc/examine_info() //Override this on a by-mob basis to have unique examine info + return + /mob/living/simple_animal/hostile/clockwork/proc/update_values() //This is called by certain things to check GLOB.ratvar_awakens and GLOB.ratvar_approaches diff --git a/code/game/gamemodes/clock_cult/clock_mobs/clockwork_marauder.dm b/code/game/gamemodes/clock_cult/clock_mobs/clockwork_marauder.dm index a0396fdec2d..1fabeeba3fc 100644 --- a/code/game/gamemodes/clock_cult/clock_mobs/clockwork_marauder.dm +++ b/code/game/gamemodes/clock_cult/clock_mobs/clockwork_marauder.dm @@ -1,3 +1,6 @@ +#define MARAUDER_SLOWDOWN_PERCENTAGE 0.40 //Below this percentage of health, marauders will become slower +#define MARAUDER_SHIELD_REGEN_TIME 100 //In deciseconds, how long it takes for shields to regenerate after breaking + //Clockwork marauder: A well-rounded frontline construct. Only one can exist for every two human servants. /mob/living/simple_animal/hostile/clockwork/marauder name = "clockwork marauder" @@ -20,9 +23,26 @@ playstyle_string = "You are a clockwork marauder, a well-rounded frontline construct of Ratvar. Although you have no \ unique abilities, you're a fearsome fighter in one-on-one combat, and your shield protects from projectiles!

Obey the Servants and do as they \ tell you. Your primary goal is to defend the Ark from destruction; they are your allies in this, and should be protected from harm.
" - empower_string = "The Anima Bulwark's power flows through you! Your weapon will strike harder, your armor is sturdier, and your shield is considerably more \ - likely to deflect shots." + empower_string = "The Anima Bulwark's power flows through you! Your weapon will strike harder, your armor is sturdier, and your shield is more durable." var/deflect_chance = 40 //Chance to deflect any given projectile (non-damaging energy projectiles are always deflected) + var/max_shield_health = 3 + var/shield_health = 3 //Amount of projectiles that can be deflected within + var/shield_health_regen = 0 //When world.time equals this, shield health will regenerate + +/mob/living/simple_animal/hostile/clockwork/marauder/examine_info() + if(!shield_health) + return "Its shield has been destroyed!" + +/mob/living/simple_animal/hostile/clockwork/marauder/Life() + ..() + if(!GLOB.ratvar_awakens && health / maxHealth <= MARAUDER_SLOWDOWN_PERCENTAGE) + speed = initial(speed) + 1 //Yes, this slows them down + else + speed = initial(speed) + if(shield_health != max_shield_health && world.time >= shield_health_regen) + to_chat(src, "Your shield has recovered. [max_shield_health] blocks remaining!") + playsound_local(src, "shatter", 75, TRUE, frequency = -1) + shield_health = max_shield_health /mob/living/simple_animal/hostile/clockwork/marauder/update_values() if(GLOB.ratvar_awakens) //Massive attack damage bonuses and health increase, because Ratvar @@ -33,6 +53,7 @@ attacktext = "devastates" speed = -1 obj_damage = 100 + max_shield_health = INFINITY else if(GLOB.ratvar_approaches) //Hefty health bonus and slight attack damage increase health = 200 maxHealth = 200 @@ -40,6 +61,7 @@ melee_damage_lower = 15 attacktext = "carves" obj_damage = 50 + max_shield_health = 4 /mob/living/simple_animal/hostile/clockwork/marauder/death(gibbed) visible_message("[src]'s equipment clatters lifelessly to the ground as the red flames within dissipate.", \ @@ -64,21 +86,21 @@ return ..() /mob/living/simple_animal/hostile/clockwork/marauder/proc/deflect_projectile(obj/item/projectile/P) - var/final_deflection_chance = deflect_chance + if(!shield_health) + return var/energy_projectile = istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam) - if(P.nodamage || P.damage_type == STAMINA) - final_deflection_chance = 100 - else if(!energy_projectile) //Flat 40% chance against energy projectiles; ballistic projectiles are 40% - (damage of projectile)%, min. 10% - final_deflection_chance = max(10, deflect_chance - P.damage) - if(GLOB.ratvar_awakens) - final_deflection_chance = 100 - else if(GLOB.ratvar_approaches) - final_deflection_chance = min(100, final_deflection_chance + 20) //20% bonus to deflection if the servants heralded Ratvar - if(prob(final_deflection_chance)) - visible_message("[src] deflects [P] with their shield!", \ - "You block [P] with your shield!") - if(energy_projectile) - playsound(src, 'sound/weapons/effects/searwall.ogg', 50, TRUE) - else - playsound(src, "ricochet", 50, TRUE) - . = TRUE + visible_message("[src] deflects [P] with their shield!", \ + "You block [P] with your shield! Blocks left: [shield_health - 1]") + if(energy_projectile) + playsound(src, 'sound/weapons/effects/searwall.ogg', 50, TRUE) + else + playsound(src, "ricochet", 50, TRUE) + shield_health-- + if(!shield_health) + visible_message("[src]'s shield breaks from deflecting the attack!", "Your shield breaks! Give it some time to recover...") + playsound(src, "shatter", 100, TRUE) + shield_health_regen = world.time + MARAUDER_SHIELD_REGEN_TIME + return TRUE + +#undef MARAUDER_SLOWDOWN_PERCENTAGE +#undef MARAUDER_SHIELD_REGEN_TIME From 1a022ad55dbf7c66271460b0a7e1c1b664e0e623 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Mon, 23 Oct 2017 16:33:31 -0400 Subject: [PATCH 17/95] Fixes teleporters not actually denying teleports from Centcom --- code/game/machinery/teleporter.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 1c7268e6c6b..be13cfdcff8 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -44,10 +44,10 @@ /obj/machinery/teleport/hub/CollidedWith(atom/movable/AM) if(z == ZLEVEL_CENTCOM) to_chat(AM, "You can't use this here.") + return if(is_ready()) teleport(AM) use_power(5000) - return /obj/machinery/teleport/hub/attackby(obj/item/W, mob/user, params) if(default_deconstruction_screwdriver(user, "tele-o", "tele0", W)) From e8c2109ea055c9f8e21dda11d43fb2e65e2505ef Mon Sep 17 00:00:00 2001 From: duncathan salt Date: Mon, 23 Oct 2017 15:29:36 -0600 Subject: [PATCH 18/95] Atmos construction rework again (#31944) * initial atmos construction commit ft todo list * cleans up pipe/construction.dm * compile * rpd tgui * revert rpd tgui because no icon support zzzzzz * fixes RPD also fixes the one RPD bug i caused the last time i touched pipe construction where you'd get null pipes if you switched from disposals to atmos pipes * cleanup --- code/__DEFINES/pipe_construction.dm | 37 +-- code/game/machinery/pipe/construction.dm | 242 ++++++------------ code/game/machinery/pipe/pipe_dispenser.dm | 42 +-- code/game/objects/items/RPD.dm | 95 ++++--- .../atmospherics/machinery/atmosmachinery.dm | 7 +- .../components/binary_devices/passive_gate.dm | 4 +- .../components/binary_devices/pump.dm | 4 +- .../components/binary_devices/valve.dm | 4 + .../components/binary_devices/volume_pump.dm | 4 +- .../components/trinary_devices/filter.dm | 3 + .../components/trinary_devices/mixer.dm | 4 +- .../unary_devices/heat_exchanger.dm | 2 + .../unary_devices/outlet_injector.dm | 3 +- .../unary_devices/portables_connector.dm | 1 + .../components/unary_devices/unary_devices.dm | 1 + .../components/unary_devices/vent_pump.dm | 2 + .../components/unary_devices/vent_scrubber.dm | 2 + .../machinery/pipes/heat_exchange/junction.dm | 5 +- .../machinery/pipes/heat_exchange/manifold.dm | 8 +- .../machinery/pipes/heat_exchange/simple.dm | 5 +- .../machinery/pipes/layermanifold.dm | 14 +- .../atmospherics/machinery/pipes/manifold.dm | 5 +- .../machinery/pipes/manifold4w.dm | 5 +- .../atmospherics/machinery/pipes/simple.dm | 5 +- 24 files changed, 217 insertions(+), 287 deletions(-) diff --git a/code/__DEFINES/pipe_construction.dm b/code/__DEFINES/pipe_construction.dm index f5b513312d2..a671b548bad 100644 --- a/code/__DEFINES/pipe_construction.dm +++ b/code/__DEFINES/pipe_construction.dm @@ -1,33 +1,10 @@ -/* -PIPE CONSTRUCTION DEFINES -Update these any time a path is changed -Construction breaks otherwise -*/ - -//Pipes -#define PIPE_SIMPLE /obj/machinery/atmospherics/pipe/simple -#define PIPE_MANIFOLD /obj/machinery/atmospherics/pipe/manifold -#define PIPE_4WAYMANIFOLD /obj/machinery/atmospherics/pipe/manifold4w -#define PIPE_HE /obj/machinery/atmospherics/pipe/heat_exchanging/simple -#define PIPE_HE_MANIFOLD /obj/machinery/atmospherics/pipe/heat_exchanging/manifold -#define PIPE_HE_4WAYMANIFOLD /obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w -#define PIPE_JUNCTION /obj/machinery/atmospherics/pipe/heat_exchanging/junction -#define PIPE_LAYER_MANIFOLD /obj/machinery/atmospherics/pipe/layer_manifold -//Unary -#define PIPE_CONNECTOR /obj/machinery/atmospherics/components/unary/portables_connector -#define PIPE_UVENT /obj/machinery/atmospherics/components/unary/vent_pump -#define PIPE_SCRUBBER /obj/machinery/atmospherics/components/unary/vent_scrubber -#define PIPE_INJECTOR /obj/machinery/atmospherics/components/unary/outlet_injector -#define PIPE_HEAT_EXCHANGE /obj/machinery/atmospherics/components/unary/heat_exchanger -//Binary -#define PIPE_PUMP /obj/machinery/atmospherics/components/binary/pump -#define PIPE_PASSIVE_GATE /obj/machinery/atmospherics/components/binary/passive_gate -#define PIPE_VOLUME_PUMP /obj/machinery/atmospherics/components/binary/volume_pump -#define PIPE_MVALVE /obj/machinery/atmospherics/components/binary/valve -#define PIPE_DVALVE /obj/machinery/atmospherics/components/binary/valve/digital -//Trinary -#define PIPE_GAS_FILTER /obj/machinery/atmospherics/components/trinary/filter -#define PIPE_GAS_MIXER /obj/machinery/atmospherics/components/trinary/mixer +//Construction Categories +#define PIPE_BINARY 0 //2 directions: N/S, E/W +#define PIPE_BENDABLE 1 //6 directions: N/S, E/W, N/E, N/W, S/E, S/W +#define PIPE_TRINARY 2 //4 directions: N/E/S, E/S/W, S/W/N, W/N/E +#define PIPE_TRIN_M 3 //8 directions: N->S+E, S->N+E, N->S+W, S->N+W, E->W+S, W->E+S, E->W+N, W->E+N +#define PIPE_UNARY 4 //4 directions: N, S, E, W +#define PIPE_QUAD 5 //1 directions: N/S/E/W //Disposal piping numbers - do NOT hardcode these, use the defines #define DISP_PIPE_STRAIGHT 0 diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 9207d39f1b6..5d529defeaf 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -10,7 +10,7 @@ Buildable meters /obj/item/pipe name = "pipe" desc = "A pipe." - var/pipe_type = 0 + var/pipe_type var/pipename force = 7 throwforce = 7 @@ -19,35 +19,22 @@ Buildable meters item_state = "buildpipe" w_class = WEIGHT_CLASS_NORMAL level = 2 - var/flipped = FALSE - var/is_bent = FALSE var/piping_layer = PIPING_LAYER_DEFAULT + var/RPD_type //TEMP: kill this once RPDs get a rewrite pls - var/static/list/pipe_types = list( - PIPE_SIMPLE, \ - PIPE_LAYER_MANIFOLD, \ - PIPE_MANIFOLD, \ - PIPE_4WAYMANIFOLD, \ - PIPE_HE, \ - PIPE_HE_MANIFOLD, \ - PIPE_HE_4WAYMANIFOLD, \ - PIPE_JUNCTION, \ - \ - PIPE_CONNECTOR, \ - PIPE_UVENT, \ - PIPE_SCRUBBER, \ - PIPE_INJECTOR, \ - PIPE_HEAT_EXCHANGE, \ - \ - PIPE_PUMP, \ - PIPE_PASSIVE_GATE, \ - PIPE_VOLUME_PUMP, \ - PIPE_MVALVE, \ - PIPE_DVALVE, \ - \ - PIPE_GAS_FILTER, \ - PIPE_GAS_MIXER, \ - ) +/obj/item/pipe/directional + RPD_type = PIPE_UNARY +/obj/item/pipe/binary + RPD_type = PIPE_BINARY +/obj/item/pipe/binary/bendable + RPD_type = PIPE_BENDABLE +/obj/item/pipe/trinary + RPD_type = PIPE_TRINARY +/obj/item/pipe/trinary/flippable + RPD_type = PIPE_TRIN_M + var/flipped = FALSE +/obj/item/pipe/quaternary + RPD_type = PIPE_QUAD /obj/item/pipe/examine(mob/user) ..() @@ -55,35 +42,27 @@ Buildable meters /obj/item/pipe/Initialize(mapload, _pipe_type, _dir, obj/machinery/atmospherics/make_from) if(make_from) - setDir(make_from.dir) - pipename = make_from.name - add_atom_colour(make_from.color, FIXED_COLOUR_PRIORITY) - - if(make_from.type in pipe_types) - pipe_type = make_from.type - setPipingLayer(make_from.piping_layer) - else //make pipe_type a value we can work with - for(var/P in pipe_types) - if(istype(make_from, P)) - pipe_type = P - break - - var/obj/machinery/atmospherics/components/trinary/triP = make_from - if(istype(triP) && triP.flipped) - flipped = TRUE - setDir(turn(dir, -45)) + make_from_existing(make_from) else pipe_type = _pipe_type setDir(_dir) - if(_dir in GLOB.diagonals) - is_bent = TRUE - update() - pixel_x = rand(-5, 5) - pixel_y = rand(-5, 5) + pixel_x += rand(-5, 5) + pixel_y += rand(-5, 5) return ..() +/obj/item/pipe/proc/make_from_existing(obj/machinery/atmospherics/make_from) + setDir(make_from.dir) + pipename = make_from.name + add_atom_colour(make_from.color, FIXED_COLOUR_PRIORITY) + pipe_type = make_from.type + +/obj/item/pipe/trinary/flippable/make_from_existing(obj/machinery/atmospherics/components/trinary/make_from) + ..() + if(make_from.flipped) + do_a_flip() + /obj/item/pipe/dropped() if(loc) setPipingLayer(piping_layer) @@ -91,73 +70,19 @@ Buildable meters /obj/item/pipe/proc/setPipingLayer(new_layer = PIPING_LAYER_DEFAULT) var/obj/machinery/atmospherics/fakeA = get_pipe_cache(pipe_type) - var/nolayer = (fakeA.pipe_flags & PIPING_ALL_LAYER) - if(nolayer) + + if(fakeA.pipe_flags & PIPING_ALL_LAYER) new_layer = PIPING_LAYER_DEFAULT piping_layer = new_layer - if(pipe_type != PIPE_LAYER_MANIFOLD) - pixel_x = (piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_X - pixel_y = (piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_Y - layer = initial(layer) + ((piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_LCHANGE) -//update the name and icon of the pipe item depending on the type -GLOBAL_LIST_INIT(pipeID2State, list( - "[PIPE_SIMPLE]" = "simple", \ - "[PIPE_MANIFOLD]" = "manifold", \ - "[PIPE_LAYER_MANIFOLD]" = "layer_manifold", \ - "[PIPE_4WAYMANIFOLD]" = "manifold4w", \ - "[PIPE_HE]" = "he", \ - "[PIPE_HE_MANIFOLD]" = "he_manifold", \ - "[PIPE_HE_4WAYMANIFOLD]" = "he_manifold4w", \ - "[PIPE_JUNCTION]" = "junction", \ - \ - "[PIPE_CONNECTOR]" = "connector", \ - "[PIPE_UVENT]" = "uvent", \ - "[PIPE_SCRUBBER]" = "scrubber", \ - "[PIPE_INJECTOR]" = "injector", \ - "[PIPE_HEAT_EXCHANGE]" = "heunary", \ - \ - "[PIPE_PUMP]" = "pump", \ - "[PIPE_PASSIVE_GATE]" = "passivegate", \ - "[PIPE_VOLUME_PUMP]" = "volumepump", \ - "[PIPE_MVALVE]" = "mvalve", \ - "[PIPE_DVALVE]" = "dvalve", \ - \ - "[PIPE_GAS_FILTER]" = "filter", \ - "[PIPE_GAS_MIXER]" = "mixer", \ -)) + pixel_x += (piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_X + pixel_y += (piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_Y + layer = initial(layer) + ((piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_LCHANGE) /obj/item/pipe/proc/update() - var/list/nlist = list(\ - "[PIPE_SIMPLE]" = "pipe", \ - "[PIPE_SIMPLE]_b" = "bent pipe", \ - "[PIPE_MANIFOLD]" = "manifold", \ - "[PIPE_LAYER_MANIFOLD]" = "layer manifold", \ - "[PIPE_4WAYMANIFOLD]" = "4-way manifold", \ - "[PIPE_HE]" = "h/e pipe", \ - "[PIPE_HE]_b" = "bent h/e pipe", \ - "[PIPE_HE_MANIFOLD]" = "h/e manifold", \ - "[PIPE_HE_4WAYMANIFOLD]"= "h/e 4-way manifold", \ - "[PIPE_JUNCTION]" = "junction", \ - \ - "[PIPE_CONNECTOR]" = "connector", \ - "[PIPE_UVENT]" = "vent", \ - "[PIPE_SCRUBBER]" = "scrubber", \ - "[PIPE_INJECTOR]" = "injector", \ - "[PIPE_HEAT_EXCHANGE]" = "heat exchanger", \ - \ - "[PIPE_PUMP]" = "pump", \ - "[PIPE_PASSIVE_GATE]" = "passive gate", \ - "[PIPE_VOLUME_PUMP]" = "volume pump", \ - "[PIPE_MVALVE]" = "manual valve", \ - "[PIPE_DVALVE]" = "digital valve", \ - \ - "[PIPE_GAS_FILTER]" = "gas filter", \ - "[PIPE_GAS_MIXER]" = "gas mixer", \ - ) - //fix_pipe_type() - name = nlist["[pipe_type][is_bent ? "_b" : ""]"] + " fitting" - icon_state = GLOB.pipeID2State["[pipe_type]"] + var/obj/machinery/atmospherics/A = get_pipe_cache(pipe_type) + name = "[A.name] fitting" + icon_state = A.pipe_state // rotate the pipe item clockwise @@ -170,11 +95,8 @@ GLOBAL_LIST_INIT(pipeID2State, list( return setDir(turn(dir, -90)) - fixdir() - return - /obj/item/pipe/verb/flip() set category = "Object" set name = "Flip Pipe" @@ -183,16 +105,15 @@ GLOBAL_LIST_INIT(pipeID2State, list( if ( usr.stat || usr.restrained() || !usr.canmove ) return - if (pipe_type in list(PIPE_GAS_FILTER, PIPE_GAS_MIXER)) - setDir(turn(dir, flipped )? 45 : -45) - flipped = !flipped - return + do_a_flip() +/obj/item/pipe/proc/do_a_flip() setDir(turn(dir, -180)) - fixdir() - return +/obj/item/pipe/trinary/flippable/do_a_flip() + setDir(turn(dir, flipped ? 45 : -45)) + flipped = !flipped /obj/item/pipe/AltClick(mob/user) ..() @@ -207,21 +128,21 @@ GLOBAL_LIST_INIT(pipeID2State, list( /obj/item/pipe/Move() var/old_dir = dir ..() - setDir(old_dir )//pipes changing direction when moved is just annoying and buggy - -/obj/item/pipe/proc/unflip(direction) - if(direction in GLOB.diagonals) - return turn(direction, 45) - - return direction + setDir(old_dir) //pipes changing direction when moved is just annoying and buggy //Helper to clean up dir /obj/item/pipe/proc/fixdir() - if((pipe_type in list (PIPE_SIMPLE, PIPE_HE, PIPE_MVALVE, PIPE_DVALVE, PIPE_LAYER_MANIFOLD)) && !is_bent) - if(dir==SOUTH) - setDir(NORTH) - else if(dir==WEST) - setDir(EAST) + return + +/obj/item/pipe/binary/fixdir() + if(dir == SOUTH) + setDir(NORTH) + else if(dir == WEST) + setDir(EAST) + +/obj/item/pipe/trinary/flippable/fixdir() + if(dir in GLOB.diagonals) + setDir(turn(dir, 45)) /obj/item/pipe/attack_self(mob/user) return rotate() @@ -245,16 +166,14 @@ GLOBAL_LIST_INIT(pipeID2State, list( add_fingerprint(user) fixdir() - if(pipe_type in list(PIPE_GAS_MIXER, PIPE_GAS_FILTER)) - setDir(unflip(dir)) var/obj/machinery/atmospherics/fakeA = get_pipe_cache(pipe_type, dir) for(var/obj/machinery/atmospherics/M in loc) - if((M.pipe_flags & PIPING_ONE_PER_TURF) && (fakeA.pipe_flags & PIPING_ONE_PER_TURF)) //Only one dense/requires density object per tile, eg connectors/cryo/heater/coolers. + if((M.pipe_flags & fakeA.pipe_flags & PIPING_ONE_PER_TURF)) //Only one dense/requires density object per tile, eg connectors/cryo/heater/coolers. to_chat(user, "Something is hogging the tile!") return TRUE - if((M.piping_layer != piping_layer) && !((M.pipe_flags & PIPING_ALL_LAYER) || (pipe_type == PIPE_LAYER_MANIFOLD))) + if((M.piping_layer != piping_layer) && !((M.pipe_flags | fakeA.pipe_flags) & PIPING_ALL_LAYER)) //don't continue if either pipe goes across all layers continue if(M.GetInitDirections() & fakeA.GetInitDirections()) // matches at least one direction on either type of pipe to_chat(user, "There is already a pipe at that location!") @@ -262,16 +181,8 @@ GLOBAL_LIST_INIT(pipeID2State, list( // no conflicts found var/obj/machinery/atmospherics/A = new pipe_type(loc) - A.setDir(dir) - A.SetInitDirections() - - if(pipename) - A.name = pipename - - var/obj/machinery/atmospherics/components/trinary/T = A - if(istype(T)) - T.flipped = flipped - A.on_construction(pipe_type, color, piping_layer) + build_pipe(A) + A.on_construction(color, piping_layer) playsound(src, W.usesound, 50, 1) user.visible_message( \ @@ -281,20 +192,28 @@ GLOBAL_LIST_INIT(pipeID2State, list( qdel(src) -/obj/item/pipe/suicide_act(mob/user) - if(pipe_type in list(PIPE_PUMP, PIPE_PASSIVE_GATE, PIPE_VOLUME_PUMP)) - user.visible_message("[user] shoves [src] in [user.p_their()] mouth and turns it on! It looks like [user.p_theyre()] trying to commit suicide!") - if(iscarbon(user)) - var/mob/living/carbon/C = user - for(var/i=1 to 20) - C.vomit(0, TRUE, FALSE, 4, FALSE) - if(prob(20)) - C.spew_organ() - sleep(5) - C.blood_volume = 0 - return(OXYLOSS|BRUTELOSS) - else - return ..() +/obj/item/pipe/proc/build_pipe(obj/machinery/atmospherics/A) + A.setDir(dir) + A.SetInitDirections() + + if(pipename) + A.name = pipename + +/obj/item/pipe/trinary/flippable/build_pipe(obj/machinery/atmospherics/components/trinary/T) + ..() + T.flipped = flipped + +/obj/item/pipe/directional/suicide_act(mob/user) + user.visible_message("[user] shoves [src] in [user.p_their()] mouth and turns it on! It looks like [user.p_theyre()] trying to commit suicide!") + if(iscarbon(user)) + var/mob/living/carbon/C = user + for(var/i=1 to 20) + C.vomit(0, TRUE, FALSE, 4, FALSE) + if(prob(20)) + C.spew_organ() + sleep(5) + C.blood_volume = 0 + return(OXYLOSS|BRUTELOSS) /obj/item/pipe_meter name = "meter" @@ -332,4 +251,3 @@ GLOBAL_LIST_INIT(pipeID2State, list( piping_layer = new_layer pixel_x = (new_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_X pixel_y = (new_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_Y - diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index c224097b366..fda66624b7b 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -17,30 +17,30 @@ var/dat = {" PIPING LAYER: --[piping_layer]++
Pipes:
-Pipe
-Bent Pipe
-Manifold
-Layer Manifold
-4-Way Manifold
-Manual Valve
-Digital Valve
+Pipe
+Bent Pipe
+Manifold
+Layer Manifold
+4-Way Manifold
+Manual Valve
+Digital Valve
Devices:
-Connector
-Vent
-Gas Pump
-Passive Gate
-Volume Pump
-Scrubber
+Connector
+Vent
+Gas Pump
+Passive Gate
+Volume Pump
+Scrubber
Meter
-Gas Filter
-Gas Mixer
+Gas Filter
+Gas Mixer
Heat exchange:
-Pipe
-Bent Pipe
-Manifold
-4-Way Manifold
-Junction
-Heat Exchanger
+Pipe
+Bent Pipe
+Manifold
+4-Way Manifold
+Junction
+Heat Exchanger
"} diff --git a/code/game/objects/items/RPD.dm b/code/game/objects/items/RPD.dm index e0890ee0940..585f632f800 100644 --- a/code/game/objects/items/RPD.dm +++ b/code/game/objects/items/RPD.dm @@ -4,12 +4,6 @@ CONTAINS: RPD */ -#define PIPE_BINARY 0 -#define PIPE_BENDABLE 1 -#define PIPE_TRINARY 2 -#define PIPE_TRIN_M 3 -#define PIPE_UNARY 4 -#define PIPE_QUAD 5 #define PAINT_MODE -2 #define EATING_MODE -1 @@ -22,23 +16,29 @@ RPD /datum/pipe_info var/id=-1 - var/categoryId = CATEGORY_ATMOS + var/categoryId var/dir=SOUTH var/dirtype = PIPE_BENDABLE - var/icon = 'icons/obj/atmospherics/pipes/pipe_item.dmi' - var/icon_state="" + var/icon + var/icon_state var/selected=0 -/datum/pipe_info/New(pid,direction,dt) - id=pid - icon_state=GLOB.pipeID2State["[pid]"] - dir = direction - dirtype=dt +/datum/pipe_info/pipe + categoryId = CATEGORY_ATMOS + icon = 'icons/obj/atmospherics/pipes/pipe_item.dmi' + +/datum/pipe_info/pipe/New(obj/machinery/atmospherics/path) + id = path + icon_state = initial(path.pipe_state) + dirtype = initial(path.construction_type) /datum/pipe_info/proc/Render(dispenser,label) + +/datum/pipe_info/pipe/Render(dispenser,label,dir=NORTH) return "
  • [label]
  • " /datum/pipe_info/meter + categoryId = CATEGORY_ATMOS icon = 'icons/obj/atmospherics/pipes/simple.dmi' icon_state = "meterX" @@ -64,7 +64,6 @@ GLOBAL_LIST_INIT(disposalpipeID2State, list( /datum/pipe_info/disposal categoryId = CATEGORY_DISPOSALS icon = 'icons/obj/atmospherics/pipes/disposal.dmi' - icon_state = "meterX" /datum/pipe_info/disposal/New(var/pid,var/dt) id=pid @@ -80,33 +79,31 @@ GLOBAL_LIST_INIT(disposalpipeID2State, list( //find these defines in code\game\machinery\pipe\consruction.dm GLOBAL_LIST_INIT(RPD_recipes, list( "Pipes" = list( - "Pipe" = new /datum/pipe_info(PIPE_SIMPLE, 1, PIPE_BENDABLE), - //"Bent Pipe" = new /datum/pipe_info(PIPE_SIMPLE, 5, PIPE_BENT), - "Manifold" = new /datum/pipe_info(PIPE_MANIFOLD, 1, PIPE_TRINARY), - "Manual Valve" = new /datum/pipe_info(PIPE_MVALVE, 1, PIPE_BINARY), - "Digital Valve" = new /datum/pipe_info(PIPE_DVALVE, 1, PIPE_BINARY), - "4-Way Manifold" = new /datum/pipe_info(PIPE_4WAYMANIFOLD, 1, PIPE_QUAD), - "Layer Manifold" = new /datum/pipe_info(PIPE_LAYER_MANIFOLD, 1, PIPE_BINARY), + "Pipe" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/pipe/simple), + "Manifold" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/pipe/manifold), + "Manual Valve" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/components/binary/valve), + "Digital Valve" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/components/binary/valve/digital), + "4-Way Manifold" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/pipe/manifold4w), + "Layer Manifold" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/pipe/layer_manifold), ), - "Devices"=list( - "Connector" = new /datum/pipe_info(PIPE_CONNECTOR, 1, PIPE_UNARY), - "Unary Vent" = new /datum/pipe_info(PIPE_UVENT, 1, PIPE_UNARY), - "Gas Pump" = new /datum/pipe_info(PIPE_PUMP, 1, PIPE_UNARY), - "Passive Gate" = new /datum/pipe_info(PIPE_PASSIVE_GATE, 1, PIPE_UNARY), - "Volume Pump" = new /datum/pipe_info(PIPE_VOLUME_PUMP, 1, PIPE_UNARY), - "Scrubber" = new /datum/pipe_info(PIPE_SCRUBBER, 1, PIPE_UNARY), - "Injector" = new /datum/pipe_info(PIPE_INJECTOR, 1, PIPE_UNARY), + "Devices" = list( + "Connector" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/components/unary/portables_connector), + "Unary Vent" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/components/unary/vent_pump), + "Gas Pump" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/components/binary/pump), + "Passive Gate" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/components/binary/passive_gate), + "Volume Pump" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/components/binary/volume_pump), + "Scrubber" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/components/unary/vent_scrubber), + "Injector" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/components/unary/outlet_injector), "Meter" = new /datum/pipe_info/meter(), - "Gas Filter" = new /datum/pipe_info(PIPE_GAS_FILTER, 1, PIPE_TRIN_M), - "Gas Mixer" = new /datum/pipe_info(PIPE_GAS_MIXER, 1, PIPE_TRIN_M), + "Gas Filter" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/components/trinary/filter), + "Gas Mixer" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/components/trinary/mixer), ), "Heat Exchange" = list( - "Pipe" = new /datum/pipe_info(PIPE_HE, 1, PIPE_BENDABLE), - //"Bent Pipe" = new /datum/pipe_info(PIPE_HE, 5, PIPE_BENT), - "Manifold" = new /datum/pipe_info(PIPE_HE_MANIFOLD, 1, PIPE_TRINARY), - "4-Way Manifold" = new /datum/pipe_info(PIPE_HE_4WAYMANIFOLD, 1, PIPE_QUAD), - "Junction" = new /datum/pipe_info(PIPE_JUNCTION, 1, PIPE_UNARY), - "Heat Exchanger" = new /datum/pipe_info(PIPE_HEAT_EXCHANGE, 1, PIPE_UNARY), + "Pipe" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/pipe/heat_exchanging/simple), + "Manifold" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/pipe/heat_exchanging/manifold), + "4-Way Manifold" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w), + "Junction" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/pipe/heat_exchanging/junction), + "Heat Exchanger" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/components/unary/heat_exchanger), ), "Disposal Pipes" = list( "Pipe" = new /datum/pipe_info/disposal(DISP_PIPE_STRAIGHT, PIPE_BINARY), @@ -120,6 +117,7 @@ GLOBAL_LIST_INIT(RPD_recipes, list( "Sort Junction" = new /datum/pipe_info/disposal(DISP_SORTJUNCTION, PIPE_TRINARY), ) )) + /obj/item/pipe_dispenser name = "Rapid Piping Device (RPD)" desc = "A device used to rapidly pipe things." @@ -137,7 +135,7 @@ GLOBAL_LIST_INIT(RPD_recipes, list( resistance_flags = FIRE_PROOF var/datum/effect_system/spark_spread/spark_system var/working = 0 - var/p_type = PIPE_SIMPLE + var/p_type = /obj/machinery/atmospherics/pipe/simple var/p_conntype = PIPE_BENDABLE var/p_dir = 1 var/p_flipped = 0 @@ -201,7 +199,7 @@ GLOBAL_LIST_INIT(RPD_recipes, list( if(screen == CATEGORY_ATMOS) dat += "Atmospherics Disposals
    " else if(screen == CATEGORY_DISPOSALS) - dat += "Atmospherics Disposals
    " + dat += "Atmospherics Disposals
    " var/generated_layer_list = "" var/layers_total = PIPING_LAYER_MAX - PIPING_LAYER_MIN + 1 for(var/iter = PIPING_LAYER_MIN, iter <= layers_total, iter++) @@ -220,9 +218,9 @@ GLOBAL_LIST_INIT(RPD_recipes, list( var/datum/pipe_info/I = cat[label] var/found=0 if(I.id == p_type) - if((p_class == ATMOS_MODE || p_class == METER_MODE) && (I.type == /datum/pipe_info || I.type == /datum/pipe_info/meter)) + if((p_class == ATMOS_MODE || p_class == METER_MODE) && (istype(I, /datum/pipe_info/pipe) || istype(I, /datum/pipe_info/meter))) found=1 - else if(p_class == DISPOSALS_MODE && I.type==/datum/pipe_info/disposal) + else if(p_class == DISPOSALS_MODE && istype(I, /datum/pipe_info/disposal)) found=1 if(found) preview=new /icon(I.icon,I.icon_state) @@ -510,7 +508,8 @@ GLOBAL_LIST_INIT(RPD_recipes, list( if(href_list["makepipe"]) p_type = text2path(href_list["makepipe"]) p_dir = text2num(href_list["dir"]) - p_conntype = text2num(href_list["type"]) + var/obj/item/pipe/path = text2path(href_list["type"]) + p_conntype = initial(path.RPD_type) p_class = ATMOS_MODE spark_system.start() playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0) @@ -581,7 +580,9 @@ GLOBAL_LIST_INIT(RPD_recipes, list( if(do_after(user, 2, target = A)) activate() var/obj/item/pipe/P = new(A, queued_p_type, queued_p_dir) - P.flipped = queued_p_flipped + if(queued_p_flipped) + var/obj/item/pipe/trinary/flippable/F = P + F.flipped = queued_p_flipped P.update() P.add_fingerprint(usr) if(!isnull(temp_piping_layer)) @@ -627,12 +628,6 @@ GLOBAL_LIST_INIT(RPD_recipes, list( /obj/item/pipe_dispenser/proc/activate() playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, 1) -#undef PIPE_BINARY -#undef PIPE_BENT -#undef PIPE_TRINARY -#undef PIPE_TRIN_M -#undef PIPE_UNARY -#undef PIPE_QUAD #undef PAINT_MODE #undef EATING_MODE #undef ATMOS_MODE diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index aa4099caee9..0dca88ade01 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -36,6 +36,9 @@ Pipelines + Other Objects -> Pipe network var/device_type = 0 var/list/obj/machinery/atmospherics/nodes + var/construction_type + var/pipe_state //icon_state as a pipe item + /obj/machinery/atmospherics/examine(mob/user) ..() if(is_type_in_list(src, GLOB.ventcrawl_machinery) && isliving(user)) @@ -239,7 +242,7 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics/deconstruct(disassembled = TRUE) if(!(flags_1 & NODECONSTRUCT_1)) if(can_unwrench) - var/obj/item/pipe/stored = new(loc, piping_layer, dir, src) + var/obj/item/pipe/stored = new construction_type(loc, null, dir, src) stored.setPipingLayer(piping_layer) if(!disassembled) stored.obj_integrity = stored.max_integrity * 0.5 @@ -271,7 +274,7 @@ Pipelines + Other Objects -> Pipe network if(unconnected & direction) underlays += getpipeimage('icons/obj/atmospherics/components/binary_devices.dmi', "pipe_exposed", direction) -/obj/machinery/atmospherics/on_construction(pipe_type, obj_color, set_layer) +/obj/machinery/atmospherics/on_construction(obj_color, set_layer) if(can_unwrench) add_atom_colour(obj_color, FIXED_COLOUR_PRIORITY) pipe_color = obj_color diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm index 158c2725437..86c5375d071 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -21,6 +21,9 @@ Passive gate is similar to the regular pump except: var/id = null var/datum/radio_frequency/radio_connection + construction_type = /obj/item/pipe/directional + pipe_state = "passivegate" + /obj/machinery/atmospherics/components/binary/passive_gate/Destroy() SSradio.remove_object(src,frequency) return ..() @@ -167,4 +170,3 @@ Passive gate is similar to the regular pump except: if(. && on) to_chat(user, "You cannot unwrench [src], turn it off first!") return FALSE - diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index f975ee3904e..54eb6124693 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -26,6 +26,9 @@ Thus, the two variables affect pump operation are set in New(): var/id = null var/datum/radio_frequency/radio_connection + construction_type = /obj/item/pipe/directional + pipe_state = "pump" + /obj/machinery/atmospherics/components/binary/pump/on on = TRUE @@ -170,4 +173,3 @@ Thus, the two variables affect pump operation are set in New(): if(. && on && is_operational()) to_chat(user, "You cannot unwrench [src], turn it off first!") return FALSE - diff --git a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm index 767712b8b26..97ad9c6f5d1 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm @@ -15,6 +15,9 @@ It's like a regular ol' straight pipe, but you can turn it on and off. var/open = FALSE var/valve_type = "m" //lets us have a nice, clean, OOP update_icon_nopipes() + construction_type = /obj/item/pipe/binary + pipe_state = "mvalve" + /obj/machinery/atmospherics/components/binary/valve/open open = TRUE @@ -60,6 +63,7 @@ It's like a regular ol' straight pipe, but you can turn it on and off. desc = "A digitally controlled valve." icon_state = "dvalve_map" valve_type = "d" + pipe_state = "dvalve" /obj/machinery/atmospherics/components/binary/valve/digital/attack_ai(mob/user) return src.attack_hand(user) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm index a9384a870c9..667a0cb42a3 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm @@ -26,6 +26,9 @@ Thus, the two variables affect pump operation are set in New(): var/id = null var/datum/radio_frequency/radio_connection + construction_type = /obj/item/pipe/directional + pipe_state = "volumepump" + /obj/machinery/atmospherics/components/binary/volume_pump/Destroy() SSradio.remove_object(src,frequency) return ..() @@ -166,4 +169,3 @@ Thus, the two variables affect pump operation are set in New(): if(. && on && is_operational()) to_chat(user, "You cannot unwrench [src], turn it off first!") return FALSE - diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index 68814e38b9f..d0cba4d5819 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -10,6 +10,9 @@ var/frequency = 0 var/datum/radio_frequency/radio_connection + construction_type = /obj/item/pipe/trinary/flippable + pipe_state = "filter" + /obj/machinery/atmospherics/components/trinary/filter/flipped icon_state = "filter_off_f" flipped = TRUE diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm index 1fb8b072c6b..b706cd3cd9b 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm @@ -12,6 +12,9 @@ var/node1_concentration = 0.5 var/node2_concentration = 0.5 + construction_type = /obj/item/pipe/trinary/flippable + pipe_state = "mixer" + //node 3 is the outlet, nodes 1 & 2 are intakes /obj/machinery/atmospherics/components/trinary/mixer/flipped @@ -171,4 +174,3 @@ if(. && on && is_operational()) to_chat(user, "You cannot unwrench [src], turn it off first!") return FALSE - diff --git a/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm b/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm index 1b1a470315e..c8daf29ad38 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm @@ -12,6 +12,8 @@ var/obj/machinery/atmospherics/components/unary/heat_exchanger/partner = null var/update_cycle + pipe_state = "heunary" + /obj/machinery/atmospherics/components/unary/heat_exchanger/update_icon() if(NODE1) icon_state = "he_intact" diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm index b7db6e3eb5b..37bfb5d9525 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm @@ -18,6 +18,8 @@ level = 1 layer = GAS_SCRUBBER_LAYER + pipe_state = "injector" + /obj/machinery/atmospherics/components/unary/outlet_injector/Destroy() SSradio.remove_object(src,frequency) return ..() @@ -188,4 +190,3 @@ if(. && on && is_operational()) to_chat(user, "You cannot unwrench [src], turn it off first!") return FALSE - diff --git a/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm b/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm index ee488890416..051f3136ee6 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm @@ -9,6 +9,7 @@ level = 0 layer = GAS_FILTER_LAYER pipe_flags = PIPING_ONE_PER_TURF + pipe_state = "connector" /obj/machinery/atmospherics/components/unary/portables_connector/New() ..() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/unary_devices.dm b/code/modules/atmospherics/machinery/components/unary_devices/unary_devices.dm index f629020d747..a335fd2f595 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/unary_devices.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/unary_devices.dm @@ -4,6 +4,7 @@ initialize_directions = SOUTH device_type = UNARY pipe_flags = PIPING_ONE_PER_TURF + construction_type = /obj/item/pipe/directional /obj/machinery/atmospherics/components/unary/SetInitDirections() initialize_directions = dir diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index 28a76f0a2df..82482b562f3 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -31,6 +31,8 @@ var/radio_filter_out var/radio_filter_in + pipe_state = "uvent" + /obj/machinery/atmospherics/components/unary/vent_pump/on on = TRUE icon_state = "vent_map_on" diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index 8b94d9d7b1c..2c468c206d4 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -34,6 +34,8 @@ var/radio_filter_out var/radio_filter_in + pipe_state = "scrubber" + /obj/machinery/atmospherics/components/unary/vent_scrubber/New() ..() if(!id_tag) diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm index 2645e0f9fac..67186f09f57 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm @@ -13,6 +13,9 @@ initialize_directions_he = SOUTH device_type = BINARY + + construction_type = /obj/item/pipe/directional + pipe_state = "junction" /obj/machinery/atmospherics/pipe/heat_exchanging/junction/SetInitDirections() switch(dir) @@ -43,4 +46,4 @@ return 0 init_dir = H.initialize_directions_he if(init_dir & get_dir(target,src)) - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm index d305bf1064a..e4df82073b2 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm @@ -10,6 +10,9 @@ device_type = TRINARY + construction_type = /obj/item/pipe/trinary + pipe_state = "he_manifold" + /obj/machinery/atmospherics/pipe/heat_exchanging/manifold/SetInitDirections() switch(dir) if(NORTH) @@ -44,6 +47,9 @@ device_type = QUATERNARY + construction_type = /obj/item/pipe/quaternary + pipe_state = "he_manifold4w" + /obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w/SetInitDirections() initialize_directions_he = initial(initialize_directions_he) @@ -57,4 +63,4 @@ //Add non-broken pieces for(DEVICE_TYPE_LOOP) if(NODE_I) - add_overlay(getpipeimage('icons/obj/atmospherics/pipes/heat.dmi', "manifold_intact[invis]", get_dir(src, NODE_I))) \ No newline at end of file + add_overlay(getpipeimage('icons/obj/atmospherics/pipes/heat.dmi', "manifold_intact[invis]", get_dir(src, NODE_I))) diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm index e69e30f3279..637d55306fa 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm @@ -9,6 +9,9 @@ device_type = BINARY + construction_type = /obj/item/pipe/binary/bendable + pipe_state = "he" + /obj/machinery/atmospherics/pipe/heat_exchanging/simple/SetInitDirections() if(dir in GLOB.diagonals) initialize_directions_he = dir @@ -30,4 +33,4 @@ /obj/machinery/atmospherics/pipe/heat_exchanging/simple/update_icon() normalize_dir() - ..() \ No newline at end of file + ..() diff --git a/code/modules/atmospherics/machinery/pipes/layermanifold.dm b/code/modules/atmospherics/machinery/pipes/layermanifold.dm index cc9ef366787..fee00baf50b 100644 --- a/code/modules/atmospherics/machinery/pipes/layermanifold.dm +++ b/code/modules/atmospherics/machinery/pipes/layermanifold.dm @@ -11,6 +11,8 @@ volume = 260 var/list/front_nodes var/list/back_nodes + construction_type = /obj/item/pipe/binary + pipe_state = "layer_manifold" /obj/machinery/atmospherics/pipe/layer_manifold/Initialize() front_nodes = list() @@ -31,17 +33,7 @@ A.build_network() /obj/machinery/atmospherics/pipe/layer_manifold/proc/get_all_connected_nodes() - var/list/obj/machinery/atmospherics/all_connected = list() - for(var/obj/machinery/atmospherics/I in front_nodes) - all_connected[I] = I - for(var/obj/machinery/atmospherics/I in back_nodes) - all_connected[I] = I - for(var/obj/machinery/atmospherics/I in nodes) - all_connected[I] = I - var/list/obj/machinery/atmospherics/returnlist = list() - for(var/obj/machinery/atmospherics/A in all_connected) - returnlist += all_connected[A] - return returnlist + return front_nodes + back_nodes + nodes /obj/machinery/atmospherics/pipe/layer_manifold/update_icon() //HEAVILY WIP FOR UPDATE ICONS!! layer = (initial(layer) + (PIPING_LAYER_MAX * PIPING_LAYER_LCHANGE)) //This is above everything else. diff --git a/code/modules/atmospherics/machinery/pipes/manifold.dm b/code/modules/atmospherics/machinery/pipes/manifold.dm index 5be4b63d885..8560addc3a6 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold.dm @@ -13,6 +13,9 @@ device_type = TRINARY + construction_type = /obj/item/pipe/trinary + pipe_state = "manifold" + /obj/machinery/atmospherics/pipe/manifold/SetInitDirections() switch(dir) if(NORTH) @@ -168,4 +171,4 @@ layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/manifold/brown/hidden - level = PIPE_HIDDEN_LEVEL \ No newline at end of file + level = PIPE_HIDDEN_LEVEL diff --git a/code/modules/atmospherics/machinery/pipes/manifold4w.dm b/code/modules/atmospherics/machinery/pipes/manifold4w.dm index fa21275ca33..f368c6bb0fa 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold4w.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold4w.dm @@ -12,6 +12,9 @@ device_type = QUATERNARY + construction_type = /obj/item/pipe/quaternary + pipe_state = "manifold4w" + /obj/machinery/atmospherics/pipe/manifold4w/SetInitDirections() initialize_directions = initial(initialize_directions) @@ -160,4 +163,4 @@ layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/manifold4w/brown/hidden - level = PIPE_HIDDEN_LEVEL \ No newline at end of file + level = PIPE_HIDDEN_LEVEL diff --git a/code/modules/atmospherics/machinery/pipes/simple.dm b/code/modules/atmospherics/machinery/pipes/simple.dm index e8d82c611c0..0d6537b3d1d 100644 --- a/code/modules/atmospherics/machinery/pipes/simple.dm +++ b/code/modules/atmospherics/machinery/pipes/simple.dm @@ -16,6 +16,9 @@ The regular pipe you see everywhere, including bent ones. device_type = BINARY + construction_type = /obj/item/pipe/binary/bendable + pipe_state = "simple" + /obj/machinery/atmospherics/pipe/simple/SetInitDirections() normalize_cardinal_directions() if(dir in GLOB.diagonals) @@ -158,4 +161,4 @@ The regular pipe you see everywhere, including bent ones. layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/simple/brown/hidden - level = PIPE_HIDDEN_LEVEL \ No newline at end of file + level = PIPE_HIDDEN_LEVEL From f3e392fb5f6e615c3f2cb03660f7b43f9d8c5673 Mon Sep 17 00:00:00 2001 From: oranges Date: Mon, 23 Oct 2017 23:11:31 +0000 Subject: [PATCH 19/95] Use phpenv for the php build, instead of a PPA --- .travis.yml | 3 --- tools/travis/build_tools.sh | 5 +++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index b353761b2d6..30952622909 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,15 +21,12 @@ cache: addons: apt: - sources: - - sourceline: 'ppa:ondrej/php' packages: - libc6-i386 - libgcc1:i386 - libstdc++6:i386 - python - python-pip - - php5.6 install: - tools/travis/install_build_tools.sh diff --git a/tools/travis/build_tools.sh b/tools/travis/build_tools.sh index 0a0319082df..193ad261a68 100755 --- a/tools/travis/build_tools.sh +++ b/tools/travis/build_tools.sh @@ -7,7 +7,8 @@ if [ "$BUILD_TOOLS" = true ]; then md5sum -c - <<< "49bc6b1b9ed56c83cceb6674bd97cb34 *html/changelogs/example.yml"; cd tgui && source ~/.nvm/nvm.sh && gulp && cd ..; - php5.6 -l tools/WebhookProcessor/github_webhook_processor.php; - php5.6 -l tools/TGUICompiler.php; + phpenv global 5.6 + php -l tools/WebhookProcessor/github_webhook_processor.php; + php -l tools/TGUICompiler.php; python tools/ss13_genchangelog.py html/changelog.html html/changelogs; fi; From 5a4f56bf2118ea48fa7680564fd09ea92b5b587a Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Mon, 23 Oct 2017 21:07:41 -0400 Subject: [PATCH 20/95] Late join antagonists will try to target late join players (#31560) --- code/datums/mind.dm | 1 + code/game/gamemodes/objective.dm | 13 +++++++++++++ code/modules/mob/dead/new_player/new_player.dm | 1 + 3 files changed, 15 insertions(+) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index f60da6e696c..fe008c0e357 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -64,6 +64,7 @@ var/mob/living/enslaved_to //If this mind's master is another mob (i.e. adamantine golems) var/datum/language_holder/language_holder var/unconvertable = FALSE + var/late_joiner = FALSE /datum/mind/New(var/key) src.key = key diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index dbc4837c01e..f366e31f631 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -54,9 +54,22 @@ /datum/objective/proc/find_target() var/list/datum/mind/owners = get_owners() var/list/possible_targets = list() + var/try_target_late_joiners = FALSE + for(var/I in owners) + var/datum/mind/O = I + if(O.late_joiner) + try_target_late_joiners = TRUE for(var/datum/mind/possible_target in get_crewmember_minds()) if(!(possible_target in owners) && ishuman(possible_target.current) && (possible_target.current.stat != DEAD) && is_unique_objective(possible_target)) possible_targets += possible_target + if(try_target_late_joiners) + var/list/all_possible_targets = possible_targets.Copy() + for(var/I in all_possible_targets) + var/datum/mind/PT = I + if(!PT.late_joiner) + possible_targets -= PT + if(!possible_targets.len) + possible_targets = all_possible_targets if(possible_targets.len > 0) target = pick(possible_targets) update_explanation_text() diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index e7ac3cdbbbf..694db0b8983 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -482,6 +482,7 @@ . = H new_character = . if(transfer_after) + mind.late_joiner = TRUE transfer_character() /mob/dead/new_player/proc/transfer_character() From c1d14bc96f5deda9c2ea5926cd21d195228d709a Mon Sep 17 00:00:00 2001 From: ShizCalev Date: Mon, 23 Oct 2017 22:02:28 -0400 Subject: [PATCH 21/95] Fixes shades hearing heartbeats --- code/game/gamemodes/wizard/soulstone.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index efea428ab0d..e284ba41d15 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -232,6 +232,7 @@ /obj/item/device/soulstone/proc/init_shade(mob/living/carbon/human/T, mob/U, vic = 0) new /obj/effect/decal/remains/human(T.loc) //Spawns a skeleton + T.stop_sound_channel(CHANNEL_HEARTBEAT) T.invisibility = INVISIBILITY_ABSTRACT T.dust_animation() var/mob/living/simple_animal/shade/S = new /mob/living/simple_animal/shade(src) From 00eff0bcaaa39a3b6664f43ae1ebc776a9333426 Mon Sep 17 00:00:00 2001 From: ShizCalev Date: Mon, 23 Oct 2017 23:08:48 -0400 Subject: [PATCH 22/95] Fixes changling golem exploit --- .../mob/living/carbon/human/species_types/golems.dm | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index 2d1f8256040..5ab22f32c13 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -419,6 +419,7 @@ if(ishuman(C)) unstable_teleport = new unstable_teleport.Grant(C) + last_teleport = world.time /datum/species/golem/bluespace/on_species_loss(mob/living/carbon/C) if(unstable_teleport) @@ -479,6 +480,11 @@ var/banana_cooldown = 100 var/active = null +/datum/species/golem/bananium/on_species_gain(mob/living/carbon/C, datum/species/old_species) + ..() + last_banana = world.time + last_honk = world.time + /datum/species/golem/bananium/random_name(gender,unique,lastname) var/clown_name = pick(GLOB.clown_names) var/golem_name = "[uppertext(clown_name)]" @@ -553,10 +559,13 @@ . = ..() C.faction |= "cult" phase_shift = new + phase_shift.charge_counter = 0 C.AddSpell(phase_shift) abyssal_gaze = new + abyssal_gaze.charge_counter = 0 C.AddSpell(abyssal_gaze) dominate = new + dominate.charge_counter = 0 C.AddSpell(dominate) /datum/species/golem/runic/on_species_loss(mob/living/carbon/C) From 1d42493a2086f5086fc160ff85cc136ed32b3cec Mon Sep 17 00:00:00 2001 From: jughu Date: Tue, 24 Oct 2017 05:53:38 +0200 Subject: [PATCH 23/95] Blacklists holo injectors from surplus crates (#32001) * Update uplink_item.dm * Update uplink_item.dm --- code/modules/uplink/uplink_item.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/uplink/uplink_item.dm b/code/modules/uplink/uplink_item.dm index 375dfac8fe4..4161bb0665d 100644 --- a/code/modules/uplink/uplink_item.dm +++ b/code/modules/uplink/uplink_item.dm @@ -375,6 +375,7 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. organic host as a home base and source of fuel." item = /obj/item/storage/box/syndie_kit/guardian cost = 18 + surplus = 0 exclude_modes = list(/datum/game_mode/nuclear) player_minimum = 25 From efed3f9c20befcbf23b53bbca8e3146d015f459c Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 23 Oct 2017 20:53:40 -0700 Subject: [PATCH 24/95] Automatic changelog generation for PR #32001 [ci skip] --- html/changelogs/AutoChangeLog-pr-32001.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-32001.yml diff --git a/html/changelogs/AutoChangeLog-pr-32001.yml b/html/changelogs/AutoChangeLog-pr-32001.yml new file mode 100644 index 00000000000..be4fb833f30 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-32001.yml @@ -0,0 +1,4 @@ +author: "Improvedname" +delete-after: True +changes: + - tweak: "Blacklists holoparasite's from surplus crates" From 707860c6350bb6106d7ee94432a2ce8d8d417567 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Tue, 24 Oct 2017 04:41:42 +0000 Subject: [PATCH 25/95] Automatic changelog compile, [ci skip] --- html/changelog.html | 25 ++++++++++++++++++++++ html/changelogs/.all_changelog.yml | 16 ++++++++++++++ html/changelogs/AutoChangeLog-pr-31885.yml | 4 ---- html/changelogs/AutoChangeLog-pr-31896.yml | 4 ---- html/changelogs/AutoChangeLog-pr-31948.yml | 4 ---- html/changelogs/AutoChangeLog-pr-31993.yml | 6 ------ html/changelogs/AutoChangeLog-pr-32001.yml | 4 ---- html/changelogs/AutoChangeLog-pr-32002.yml | 4 ---- 8 files changed, 41 insertions(+), 26 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-31885.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-31896.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-31948.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-31993.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-32001.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-32002.yml diff --git a/html/changelog.html b/html/changelog.html index c462c0504ac..6fd4c0d9f4e 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,31 @@ -->
    +

    24 October 2017

    +

    Armhulen updated:

    +
      +
    • Wizards may now shapeshift into viper spiders.
    • +
    +

    Improvedname updated:

    +
      +
    • Blacklists holoparasite's from surplus crates
    • +
    +

    More Robust Than You updated:

    +
      +
    • Fixes champrojector camera bugs
    • +
    +

    Naksu updated:

    +
      +
    • Grinders will now grind grown items like cocoa pods again
    • +
    • Cameras no longer keep hard references to mobs in their motion tracking list.
    • +
    +

    deathride58 updated:

    +
      +
    • Deltastation's armory now contains reinforced windows surrounding the lethal weaponry. This makes Delta's armory consistent with Box.
    • +
    • There are now decals in places where extra Security lockers can spawn.
    • +
    • Cleaned up semicolons in Meta and Boxstation's .dmms
    • +
    +

    22 October 2017

    More Robust Than You updated:

      diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 71170d95788..66f44b4f31c 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -13354,3 +13354,19 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. ninjanomnom: - bugfix: Contents of silicon mobs are no longer considered for targets of radiation. This blocks them from being contaminated. +2017-10-24: + Armhulen: + - rscadd: Wizards may now shapeshift into viper spiders. + Improvedname: + - tweak: Blacklists holoparasite's from surplus crates + More Robust Than You: + - bugfix: Fixes champrojector camera bugs + Naksu: + - bugfix: Grinders will now grind grown items like cocoa pods again + - code_imp: Cameras no longer keep hard references to mobs in their motion tracking + list. + deathride58: + - tweak: Deltastation's armory now contains reinforced windows surrounding the lethal + weaponry. This makes Delta's armory consistent with Box. + - tweak: There are now decals in places where extra Security lockers can spawn. + - tweak: Cleaned up semicolons in Meta and Boxstation's .dmms diff --git a/html/changelogs/AutoChangeLog-pr-31885.yml b/html/changelogs/AutoChangeLog-pr-31885.yml deleted file mode 100644 index 53998059083..00000000000 --- a/html/changelogs/AutoChangeLog-pr-31885.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Naksu" -delete-after: True -changes: - - bugfix: "Grinders will now grind grown items like cocoa pods again" diff --git a/html/changelogs/AutoChangeLog-pr-31896.yml b/html/changelogs/AutoChangeLog-pr-31896.yml deleted file mode 100644 index 349a0f36a45..00000000000 --- a/html/changelogs/AutoChangeLog-pr-31896.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Armhulen" -delete-after: True -changes: - - rscadd: "Wizards may now shapeshift into viper spiders." diff --git a/html/changelogs/AutoChangeLog-pr-31948.yml b/html/changelogs/AutoChangeLog-pr-31948.yml deleted file mode 100644 index 252225cc5fd..00000000000 --- a/html/changelogs/AutoChangeLog-pr-31948.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "More Robust Than You" -delete-after: True -changes: - - bugfix: "Fixes champrojector camera bugs" diff --git a/html/changelogs/AutoChangeLog-pr-31993.yml b/html/changelogs/AutoChangeLog-pr-31993.yml deleted file mode 100644 index 63f37d45d9c..00000000000 --- a/html/changelogs/AutoChangeLog-pr-31993.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "deathride58" -delete-after: True -changes: - - tweak: "Deltastation's armory now contains reinforced windows surrounding the lethal weaponry. This makes Delta's armory consistent with Box." - - tweak: "There are now decals in places where extra Security lockers can spawn." - - tweak: "Cleaned up semicolons in Meta and Boxstation's .dmms" diff --git a/html/changelogs/AutoChangeLog-pr-32001.yml b/html/changelogs/AutoChangeLog-pr-32001.yml deleted file mode 100644 index be4fb833f30..00000000000 --- a/html/changelogs/AutoChangeLog-pr-32001.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Improvedname" -delete-after: True -changes: - - tweak: "Blacklists holoparasite's from surplus crates" diff --git a/html/changelogs/AutoChangeLog-pr-32002.yml b/html/changelogs/AutoChangeLog-pr-32002.yml deleted file mode 100644 index 46084b13db3..00000000000 --- a/html/changelogs/AutoChangeLog-pr-32002.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Naksu" -delete-after: True -changes: - - code_imp: "Cameras no longer keep hard references to mobs in their motion tracking list." From 5dafb8dda2bb4343f53162a0051e0ae48b17bb59 Mon Sep 17 00:00:00 2001 From: ShizCalev Date: Tue, 24 Oct 2017 01:04:01 -0400 Subject: [PATCH 26/95] Fixes xenobio sentience giving the wrong name (#32016) --- code/modules/research/xenobiology/xenobiology.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 7222b83cab8..971e6fcfe62 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -194,7 +194,7 @@ SM.mind.enslave_mind_to_creator(user) SM.sentience_act() to_chat(SM, "All at once it makes sense: you know what you are and who you are! Self awareness is yours!") - to_chat(SM, "You are grateful to be self aware and owe [user] a great debt. Serve [user], and assist [user.p_them()] in completing [user.p_their()] goals at any cost.") + to_chat(SM, "You are grateful to be self aware and owe [user.real_name] a great debt. Serve [user.real_name], and assist [user.p_them()] in completing [user.p_their()] goals at any cost.") to_chat(user, "[SM] accepts [src] and suddenly becomes attentive and aware. It worked!") qdel(src) else From 3a3752c3e388d1f55120b0626fdfc9375dfdc0a1 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 23 Oct 2017 22:04:04 -0700 Subject: [PATCH 27/95] Automatic changelog generation for PR #32016 [ci skip] --- html/changelogs/AutoChangeLog-pr-32016.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-32016.yml diff --git a/html/changelogs/AutoChangeLog-pr-32016.yml b/html/changelogs/AutoChangeLog-pr-32016.yml new file mode 100644 index 00000000000..f9ebb4cecc2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-32016.yml @@ -0,0 +1,4 @@ +author: "ShizCalev" +delete-after: True +changes: + - bugfix: "Creatures made via gold slime cores will now be given the proper name of their master." From ca7adb48ded446d0fc94bad57137520ae1cd6521 Mon Sep 17 00:00:00 2001 From: ShizCalev Date: Tue, 24 Oct 2017 01:04:58 -0400 Subject: [PATCH 28/95] Moves opened firedoors underneath opened airlocks (#32018) * Moves opened firedoors underneath opened airlocks * Shutters --- code/__DEFINES/layers.dm | 1 + code/game/machinery/doors/firedoor.dm | 1 + code/game/machinery/doors/shutters.dm | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index ee9e97cbd95..c92cb5f5a76 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -33,6 +33,7 @@ #define HIGH_SIGIL_LAYER 2.56 #define BELOW_OPEN_DOOR_LAYER 2.6 +#define SHUTTER_LAYER 2.65 //Prevents shutters from being placed above doors. It's overridden by /obj/machinery/door/New() & poddoor/shutters/New() #define OPEN_DOOR_LAYER 2.7 #define PROJECTILE_HIT_THRESHHOLD_LAYER 2.75 //projectiles won't hit objects at or below this layer if possible #define TABLE_LAYER 2.8 diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 37500b25898..63da575fc17 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -19,6 +19,7 @@ sub_door = TRUE explosion_block = 1 safe = FALSE + layer = BELOW_OPEN_DOOR_LAYER closingLayer = CLOSED_FIREDOOR_LAYER assemblytype = /obj/structure/firelock_frame armor = list(melee = 30, bullet = 30, laser = 20, energy = 20, bomb = 10, bio = 100, rad = 100, fire = 95, acid = 70) diff --git a/code/game/machinery/doors/shutters.dm b/code/game/machinery/doors/shutters.dm index 44912c53c6f..77267a49a4b 100644 --- a/code/game/machinery/doors/shutters.dm +++ b/code/game/machinery/doors/shutters.dm @@ -3,7 +3,7 @@ name = "shutters" desc = "Heavy duty metal shutters that opens mechanically." icon = 'icons/obj/doors/shutters.dmi' - layer = CLOSED_DOOR_LAYER + layer = SHUTTER_LAYER damage_deflection = 20 /obj/machinery/door/poddoor/shutters/preopen From 6d5ccc88bcaec3a49404e2c529f92ee871936dcd Mon Sep 17 00:00:00 2001 From: ShizCalev Date: Tue, 24 Oct 2017 08:02:22 -0400 Subject: [PATCH 29/95] Corrects disabled vent in delta toxins lab. --- _maps/map_files/Deltastation/DeltaStation2.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 6982fe29275..6d4a167545c 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -81886,7 +81886,7 @@ }, /area/science/mixing) "dqG" = ( -/obj/machinery/atmospherics/components/unary/vent_pump, +/obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/plasteel/neutral, /area/science/mixing) "dqH" = ( From 121765440f681cde8016000c84fccfc469db51d8 Mon Sep 17 00:00:00 2001 From: ShizCalev Date: Tue, 24 Oct 2017 08:21:20 -0400 Subject: [PATCH 30/95] Fixes heartbeat message spam --- code/modules/surgery/organs/heart.dm | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm index 9ff8b1b48b6..30825f46bb1 100644 --- a/code/modules/surgery/organs/heart.dm +++ b/code/modules/surgery/organs/heart.dm @@ -63,10 +63,9 @@ H.stop_sound_channel(CHANNEL_HEARTBEAT) beat = BEAT_NONE - if(H.jitteriness) - if(!beat || beat == BEAT_SLOW) - H.playsound_local(get_turf(H),fastbeat,40,0, channel = CHANNEL_HEARTBEAT) - beat = BEAT_FAST + if(H.jitteriness && H.health > HEALTH_THRESHOLD_FULLCRIT && (!beat || beat == BEAT_SLOW)) + H.playsound_local(get_turf(H),fastbeat,40,0, channel = CHANNEL_HEARTBEAT) + beat = BEAT_FAST /obj/item/organ/heart/cursed name = "cursed heart" From 629662bbec9329c23c6ea58091180b6b81dcb439 Mon Sep 17 00:00:00 2001 From: kevinz000 Date: Tue, 24 Oct 2017 06:07:03 -0700 Subject: [PATCH 31/95] Update crayons.dm (#32024) --- code/game/objects/items/crayons.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index d818a64d14e..cb448460f98 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -317,13 +317,15 @@ if(actually_paints) switch(paint_mode) if(PAINT_NORMAL) - new /obj/effect/decal/cleanable/crayon(target, paint_color, drawing, temp, graf_rot) + var/obj/effect/decal/cleanable/crayon/C = new(target, paint_color, drawing, temp, graf_rot) + C.add_hiddenprint(user) affected_turfs += target if(PAINT_LARGE_HORIZONTAL) var/turf/left = locate(target.x-1,target.y,target.z) var/turf/right = locate(target.x+1,target.y,target.z) if(is_type_in_list(left, validSurfaces) && is_type_in_list(right, validSurfaces)) - new /obj/effect/decal/cleanable/crayon(left, paint_color, drawing, temp, graf_rot, PAINT_LARGE_HORIZONTAL_ICON) + var/obj/effect/decal/cleanable/crayon/C = new(left, paint_color, drawing, temp, graf_rot, PAINT_LARGE_HORIZONTAL_ICON) + C.add_hiddenprint(user) affected_turfs += left affected_turfs += right affected_turfs += target From 30afe783d5802420619fccb0d32281920448b599 Mon Sep 17 00:00:00 2001 From: kevinz000 Date: Tue, 24 Oct 2017 08:54:06 -0700 Subject: [PATCH 32/95] fixes pentetic acid dealing radiation damage instead of healing it (#32027) * Update medicine_reagents.dm * sorry i alughed so hard i hit a key --- code/modules/reagents/chemistry/reagents/medicine_reagents.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index e48a63264ed..24b424e1563 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -466,7 +466,7 @@ metabolization_rate = 0.5 * REAGENTS_METABOLISM /datum/reagent/medicine/pen_acid/on_mob_life(mob/living/M) - M.radiation -= min(M.radiation-RAD_MOB_SAFE, 0)/100 + M.radiation -= max(M.radiation-RAD_MOB_SAFE, 0)/100 M.adjustToxLoss(-2*REM, 0) for(var/datum/reagent/R in M.reagents.reagent_list) if(R != src) From d80745ccbdc7e5edfef881462d340230e28f0d57 Mon Sep 17 00:00:00 2001 From: Armhulen Date: Tue, 24 Oct 2017 09:24:05 -0700 Subject: [PATCH 33/95] adds logging to ripley gibs (#32032) * maybe this works, and maybe it doesn't * cyberfriend * oh right --- code/game/mecha/equipment/tools/mining_tools.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/mecha/equipment/tools/mining_tools.dm b/code/game/mecha/equipment/tools/mining_tools.dm index d0a1310e8ed..c99814148da 100644 --- a/code/game/mecha/equipment/tools/mining_tools.dm +++ b/code/game/mecha/equipment/tools/mining_tools.dm @@ -81,6 +81,7 @@ "[chassis] drills [target] with [src].") add_logs(user, target, "attacked", "[name]", "(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(damtype)])") if(target.stat == DEAD) + add_logs(user, target, "gibbed", name) if(target.butcher_results) target.harvest(chassis)//Butcher the mob with our drill. else From 1ff060ec62acda697b97303dd81071960795e788 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Tue, 24 Oct 2017 18:29:42 +0000 Subject: [PATCH 34/95] Automatic changelog compile, [ci skip] --- html/changelog.html | 4 ++++ html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/AutoChangeLog-pr-32016.yml | 4 ---- 3 files changed, 7 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-32016.yml diff --git a/html/changelog.html b/html/changelog.html index 6fd4c0d9f4e..18bff9c626b 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -73,6 +73,10 @@
    • Grinders will now grind grown items like cocoa pods again
    • Cameras no longer keep hard references to mobs in their motion tracking list.
    +

    ShizCalev updated:

    +
      +
    • Creatures made via gold slime cores will now be given the proper name of their master.
    • +

    deathride58 updated: