From 2ea4dd51c66a2a500a5cb3257c7242f88e9c4cb9 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 2 May 2019 20:15:41 -0700 Subject: [PATCH 01/38] disarming/grabbing a door with IDSCAN off no longer causes a runtime --- code/game/machinery/doors/door.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index adf22a06850..5df95898aaa 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -167,7 +167,7 @@ return if(!requiresID()) user = null //so allowed(user) always succeeds - if(allowed(user) || user.can_advanced_admin_interact()) + if(allowed(user) || (istype(user) && user.can_advanced_admin_interact())) if(density) open() else From d11b96f596891712f884f7910dc1b1665817d3dc Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 2 May 2019 22:08:43 -0700 Subject: [PATCH 02/38] fixes the root cause --- code/game/machinery/doors/door.dm | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 5df95898aaa..0dd301d5542 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -134,8 +134,6 @@ if(operating) return add_fingerprint(user) - if(!requiresID()) - user = null if(density && !emagged) if(allowed(user)) @@ -157,7 +155,7 @@ return try_to_activate_door(user) /obj/machinery/door/attack_tk(mob/user) - if(requiresID() && !allowed(null)) + if(!allowed(null)) return ..() @@ -165,9 +163,7 @@ add_fingerprint(user) if(operating || emagged) return - if(!requiresID()) - user = null //so allowed(user) always succeeds - if(allowed(user) || (istype(user) && user.can_advanced_admin_interact())) + if(requiresID() && (allowed(user) || user.can_advanced_admin_interact())) if(density) open() else @@ -179,6 +175,8 @@ /obj/machinery/door/allowed(mob/M) if(emergency) return TRUE + if(!requiresID()) + return FALSE // Intentional. machinery/door/requiresID() always == 1. airlocks, however, == 0 if ID scan is disabled. Yes, this var is poorly named. return ..() /obj/machinery/door/proc/try_to_weld(obj/item/weldingtool/W, mob/user) From 5951f708d2a1e039182c43d3ee3d20091b078540 Mon Sep 17 00:00:00 2001 From: Lumi Date: Fri, 24 May 2019 19:48:13 +1000 Subject: [PATCH 03/38] Adds 'warble' emote for Skrell Adds 'warble' emote for Skrell, complete with sound effect. --- code/modules/mob/living/carbon/human/emote.dm | 15 +++++++++++++++ sound/effects/warble.ogg | Bin 0 -> 37667 bytes 2 files changed, 15 insertions(+) create mode 100644 sound/effects/warble.ogg diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 52636efb896..ce66b7dae4f 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -106,6 +106,12 @@ else //Everyone else fails, skip the emote attempt return + if("warble", "warbles") + if(isskrell(src)) //Only Skrell can warble. + on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm' + else //Everyone else fails, skip the emote attempt + return + if("scream", "screams") on_CD = handle_emote_CD(50) //longer cooldown if("fart", "farts", "flip", "flips", "snap", "snaps") @@ -221,6 +227,13 @@ playsound(loc, 'sound/effects/voxrustle.ogg', 50, 0) //Credit to sound-ideas (freesfx.co.uk) for the sound. m_type = 2 + if("warble", "warbles") + var/M = handle_emote_param(param) + + message = "[src] warbles[M ? " at [M]" : ""]." + playsound(loc, 'sound/effects/warble.ogg', 50, 0) //Gredit to alienistcog (freesound.org) for the sound. + m_type = 2 + if("yes") var/M = handle_emote_param(param) @@ -904,6 +917,8 @@ emotelist += "\nVox specific emotes :- quill(s)" if("Diona") emotelist += "\nDiona specific emotes :- creak(s)" + if("Skrell") + emotelist += "\nSkrell specific emotes :- warble(s)" if(ismachine(src)) emotelist += "\nMachine specific emotes :- beep(s)-(none)/mob, buzz(es)-none/mob, no-(none)/mob, ping(s)-(none)/mob, yes-(none)/mob, buzz2-(none)/mob" diff --git a/sound/effects/warble.ogg b/sound/effects/warble.ogg new file mode 100644 index 0000000000000000000000000000000000000000..420ae974c838aa4d6f7ba7afff4506bc3d31c59b GIT binary patch literal 37667 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 literal 0 HcmV?d00001 From b2204ad56f63dbb09c764f1f97e0dc29fde70c4c Mon Sep 17 00:00:00 2001 From: Lumi Date: Sat, 25 May 2019 10:10:10 +1000 Subject: [PATCH 04/38] Update code/modules/mob/living/carbon/human/emote.dm Fixes credit. Thanks Tay! Co-Authored-By: Tayyyyyyy --- code/modules/mob/living/carbon/human/emote.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index ce66b7dae4f..c0e8badf35d 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -231,7 +231,7 @@ var/M = handle_emote_param(param) message = "[src] warbles[M ? " at [M]" : ""]." - playsound(loc, 'sound/effects/warble.ogg', 50, 0) //Gredit to alienistcog (freesound.org) for the sound. + playsound(loc, 'sound/effects/warble.ogg', 50, 0) // Copyright CC BY 3.0 alienistcog (freesound.org) for the sound. m_type = 2 if("yes") From 47caf4ccbf0fa849d13408f79c6a108a42962de6 Mon Sep 17 00:00:00 2001 From: Arkatos1 Date: Tue, 28 May 2019 18:50:44 +0200 Subject: [PATCH 05/38] new boo icon --- code/modules/mob/dead/observer/spells.dm | 1 + icons/mob/actions/actions.dmi | Bin 113118 -> 113913 bytes 2 files changed, 1 insertion(+) diff --git a/code/modules/mob/dead/observer/spells.dm b/code/modules/mob/dead/observer/spells.dm index 916ff9aa9b8..e890098b29b 100644 --- a/code/modules/mob/dead/observer/spells.dm +++ b/code/modules/mob/dead/observer/spells.dm @@ -15,6 +15,7 @@ GLOBAL_LIST_INIT(boo_phrases, list( ghost = TRUE + action_icon_state = "boo" school = "transmutation" charge_max = 600 starts_charged = FALSE diff --git a/icons/mob/actions/actions.dmi b/icons/mob/actions/actions.dmi index e02bb48ac4693cacd6274c60efc90cd594be4d4e..317b57fa71370a4bc3564d09fe6fc52c3df276ce 100644 GIT binary patch delta 11738 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 delta 10937 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 Date: Mon, 3 Jun 2019 06:39:36 +0200 Subject: [PATCH 06/38] Stops swarmers from getting stuck on effects --- code/game/gamemodes/miniantags/bot_swarm/swarmer.dm | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index ecb566af64e..c5b47e1db17 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -184,6 +184,14 @@ /atom/movable/lighting_object/swarmer_act() return FALSE +/obj/effect/swarmer_act() + return FALSE + +/obj/effect/decal/cleanable/robot_debris/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) + S.DisIntegrate(src) + qdel(src) + return TRUE + /obj/item/gun/swarmer_act()//Stops you from eating the entire armory return FALSE From 94eb652f152227f3b3dad2d70ea9a6bae30029c7 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 3 Jun 2019 17:39:23 +0200 Subject: [PATCH 07/38] Fix alarms triggering on non-contact levels, spectral blade ghost fix, assigning outfits runtime fix --- .../lavaland_surface_syndicate_base1.dmm | 28 +++++------ .../map_files/RandomZLevels/moonoutpost19.dmm | 18 ++++---- .../RandomZLevels/undergroundoutpost45.dmm | 46 +++++++++---------- code/datums/datacore.dm | 2 +- code/game/machinery/camera/camera.dm | 6 ++- code/game/machinery/camera/motion.dm | 13 +++--- code/game/machinery/firealarm.dm | 38 +++++++++------ code/game/objects/structures/displaycase.dm | 24 +++++----- .../mining/lavaland/loot/ashdragon_loot.dm | 2 +- code/modules/power/apc.dm | 16 +++---- code/modules/surgery/organs/heart.dm | 10 ++-- 11 files changed, 106 insertions(+), 97 deletions(-) diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm index e61f0d7a5a1..13850af5db7 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm @@ -763,7 +763,7 @@ /obj/effect/turf_decal/tile/brown{ dir = 4 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 8; pixel_x = -26 }, @@ -1683,7 +1683,7 @@ /turf/simulated/floor/plating, /area/ruin/unpowered/syndicate_lava_base/testlab) "dT" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 8; pixel_x = -26 }, @@ -1996,7 +1996,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 8; pixel_x = -26 }, @@ -2201,7 +2201,7 @@ /turf/simulated/floor/plasteel/dark, /area/ruin/unpowered/syndicate_lava_base/testlab) "eM" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 1; pixel_y = -24 }, @@ -2513,7 +2513,7 @@ /obj/item/clothing/glasses/hud/health, /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 4; pixel_x = 26 }, @@ -3613,7 +3613,7 @@ /turf/simulated/wall/mineral/plastitanium/nodiagonal, /area/ruin/unpowered/syndicate_lava_base/main) "hZ" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 8; pixel_x = -26 }, @@ -3921,7 +3921,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 2; pixel_y = 24 }, @@ -3958,7 +3958,7 @@ /turf/simulated/floor/plasteel/dark, /area/ruin/unpowered/syndicate_lava_base/dormitories) "iG" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 8; pixel_x = -26 }, @@ -5194,7 +5194,7 @@ /turf/simulated/floor/plasteel/dark, /area/ruin/unpowered/syndicate_lava_base/bar) "kM" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 4; pixel_x = 26 }, @@ -5281,7 +5281,7 @@ /obj/structure/chair{ dir = 1 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 8; pixel_x = -26 }, @@ -5763,7 +5763,7 @@ /turf/simulated/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/medbay) "mg" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 8; pixel_x = -26 }, @@ -5871,7 +5871,7 @@ /obj/structure/bed/roller, /obj/machinery/iv_drip, /obj/item/reagent_containers/iv_bag/blood/OMinus, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 8; pixel_x = -26 }, @@ -6546,7 +6546,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 2; pixel_y = 24 }, @@ -6649,7 +6649,7 @@ /turf/simulated/floor/plasteel/white/side, /area/ruin/unpowered/syndicate_lava_base/medbay) "oh" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 8; pixel_x = -26 }, diff --git a/_maps/map_files/RandomZLevels/moonoutpost19.dmm b/_maps/map_files/RandomZLevels/moonoutpost19.dmm index 3c62113aa0b..3d8d1868c2c 100644 --- a/_maps/map_files/RandomZLevels/moonoutpost19.dmm +++ b/_maps/map_files/RandomZLevels/moonoutpost19.dmm @@ -3608,7 +3608,7 @@ name = "MO19 Research" }) "fj" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 2; pixel_y = 24 }, @@ -5104,7 +5104,7 @@ pixel_y = 0; tag = "" }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 4; pixel_x = 28 }, @@ -5267,7 +5267,7 @@ pixel_x = -4; pixel_y = 2 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 2; pixel_y = 24 }, @@ -5413,7 +5413,7 @@ pixel_x = 0; pixel_y = 0 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 4; pixel_x = 28 }, @@ -6594,7 +6594,7 @@ name = "MO19 Arrivals" }) "jp" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 4; pixel_x = 24 }, @@ -7560,7 +7560,7 @@ name = "MO19 Arrivals" }) "kK" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 1; pixel_y = -24 }, @@ -8028,7 +8028,7 @@ name = "MO19 Arrivals" }) "lt" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 4; pixel_x = 24 }, @@ -8649,7 +8649,7 @@ name = "MO19 Arrivals" }) "mw" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 4; pixel_x = 24 }, @@ -8898,7 +8898,7 @@ name = "MO19 Arrivals" }) "mS" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 4; pixel_x = 24 }, diff --git a/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm b/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm index 8f9f3746ea8..c5741039f2b 100644 --- a/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm +++ b/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm @@ -812,7 +812,7 @@ name = "UO45 Central Hall" }) "by" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 4; pixel_x = 24 }, @@ -1841,7 +1841,7 @@ name = "UO45 Central Hall" }) "do" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 2; pixel_x = 0; pixel_y = 24 @@ -2133,7 +2133,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 2; pixel_x = 0; pixel_y = 24 @@ -3590,7 +3590,7 @@ name = "UO45 Central Hall" }) "fW" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 1; pixel_x = 0; pixel_y = -24 @@ -4205,7 +4205,7 @@ name = "UO45 Research" }) "gZ" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 2; pixel_x = 0; pixel_y = 24 @@ -4314,7 +4314,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 8; pixel_x = -24 }, @@ -5061,7 +5061,7 @@ name = "UO45 Crew Quarters" }) "iq" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 8; pixel_x = -24 }, @@ -5827,7 +5827,7 @@ name = "UO45 Crew Quarters" }) "jw" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 8; pixel_x = -24 }, @@ -6511,7 +6511,7 @@ initialize_directions = 11; tag = "icon-manifold-r-f (EAST)" }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 4; pixel_x = 24 }, @@ -7046,7 +7046,7 @@ name = "UO45 Crew Quarters" }) "lg" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 1; pixel_x = 0; pixel_y = -24 @@ -7409,7 +7409,7 @@ pixel_x = 0; tag = "" }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 1; pixel_x = 0; pixel_y = -24 @@ -7594,7 +7594,7 @@ icon_state = "pipe-j1"; tag = "icon-pipe-j1 (EAST)" }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 1; pixel_x = 0; pixel_y = -24 @@ -7668,7 +7668,7 @@ name = "UO45 Research" }) "lN" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 1; pixel_x = 0; pixel_y = -24 @@ -8181,7 +8181,7 @@ }) "mz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 8; pixel_x = -24 }, @@ -8241,7 +8241,7 @@ name = "UO45 Gateway" }) "mE" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 1; pixel_x = 0; pixel_y = -24 @@ -9938,7 +9938,7 @@ scrub_N2O = 0; scrub_Toxins = 0 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 1; pixel_x = 0; pixel_y = -24 @@ -10347,7 +10347,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 8; pixel_x = -24 }, @@ -10384,7 +10384,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 4; pixel_x = 24 }, @@ -11386,7 +11386,7 @@ /obj/item/storage/toolbox/mechanical{ pixel_y = 5 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 2; pixel_x = 0; pixel_y = 24 @@ -11735,7 +11735,7 @@ name = "UO45 Engineering" }) "rj" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 2; pixel_x = 0; pixel_y = 24 @@ -12914,7 +12914,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 1; pixel_x = 0; pixel_y = -24 @@ -15179,7 +15179,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 1; pixel_x = 0; pixel_y = -24 @@ -16281,7 +16281,7 @@ }) "xp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 4; pixel_x = 24 }, diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 05f430136f0..b7d687d090b 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -624,7 +624,7 @@ var/record_id_num = 1001 clothes_s = new /icon('icons/mob/uniform.dmi', "syndicate_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) clothes_s.Blend(new /icon('icons/mob/hands.dmi', "swat_gl"), ICON_UNDERLAY) - else if(H.mind.assigned_role in get_all_centcom_jobs()) + else if(H.mind && H.mind.assigned_role in get_all_centcom_jobs()) clothes_s = new /icon('icons/mob/uniform.dmi', "officer_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY) else diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 5028db8f0c6..d59aca72145 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -295,10 +295,12 @@ to_chat(O, "The screen bursts into static.") /obj/machinery/camera/proc/triggerCameraAlarm() - SSalarms.camera_alarm.triggerAlarm(loc, src) + if(is_station_contact(z)) + SSalarms.camera_alarm.triggerAlarm(loc, src) /obj/machinery/camera/proc/cancelCameraAlarm() - SSalarms.camera_alarm.clearAlarm(loc, src) + if(is_station_contact(z)) + SSalarms.camera_alarm.clearAlarm(loc, src) /obj/machinery/camera/proc/can_use() if(!status) diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm index 17f64c07cb8..312e4cf577e 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -43,19 +43,20 @@ /obj/machinery/camera/proc/cancelAlarm() if(!status || (stat & NOPOWER)) - return 0 - if(detectTime == -1) + return FALSE + if(detectTime == -1 && is_station_contact(z)) SSalarms.motion_alarm.clearAlarm(loc, src) detectTime = 0 - return 1 + return TRUE /obj/machinery/camera/proc/triggerAlarm() if(!status || (stat & NOPOWER)) - return 0 - if(!detectTime) return 0 + return FALSE + if(!detectTime || !is_station_contact(z)) + return FALSE SSalarms.motion_alarm.triggerAlarm(loc, src) detectTime = -1 - return 1 + return TRUE /obj/machinery/camera/HasProximity(atom/movable/AM as mob|obj) // Motion cameras outside of an "ai monitored" area will use this to detect stuff. diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 835b0264229..e9504157063 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -21,6 +21,16 @@ FIRE ALARM var/wiresexposed = 0 var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone + var/report_fire_alarms = TRUE // Should triggered fire alarms also trigger an actual alarm? + var/show_alert_level = TRUE // Should fire alarms display the current alert level? + +/obj/machinery/firealarm/no_alarm + report_fire_alarms = FALSE + +/obj/machinery/firealarm/syndicate + report_fire_alarms = FALSE + show_alert_level = FALSE + /obj/machinery/firealarm/update_icon() if(wiresexposed) @@ -215,40 +225,38 @@ FIRE ALARM time = min(max(round(time), 0), 120) /obj/machinery/firealarm/proc/reset() - if(!( working )) + if(!working) return var/area/A = get_area(src) A.fire_reset() + for(var/obj/machinery/firealarm/FA in A) - SSalarms.fire_alarm.clearAlarm(loc, FA) - return + if(is_station_contact(z) && FA.report_fire_alarms) + SSalarms.fire_alarm.clearAlarm(loc, FA) /obj/machinery/firealarm/proc/alarm(var/duration = 0) - if(!( working)) + if(!working) return + var/area/A = get_area(src) for(var/obj/machinery/firealarm/FA in A) - SSalarms.fire_alarm.triggerAlarm(loc, FA, duration) + if(is_station_contact(z) && FA.report_fire_alarms) + SSalarms.fire_alarm.triggerAlarm(loc, FA, duration) + else + A.fire_alert() // Manually trigger alarms if the alarm isn't reported + update_icon() - //playsound(loc, 'sound/ambience/signal.ogg', 75, 0) - return /obj/machinery/firealarm/New(location, direction, building) ..() - if(location) - loc = location - - if(direction) - dir = direction - if(building) buildstage = 0 - wiresexposed = 1 + wiresexposed = TRUE pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0 - if(is_station_contact(z)) + if(is_station_contact(z) && show_alert_level) if(security_level) overlays += image('icons/obj/monitors.dmi', "overlay_[get_security_level()]") else diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 6b54f61537e..c03b9694cfa 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -93,14 +93,14 @@ GLOBAL_LIST_INIT(captain_display_cases, list()) icon = 'icons/obj/stationobjs.dmi' icon_state = "glassbox20" desc = "A display case for prized possessions. It taunts you to kick it." - density = 1 - anchored = 1 - unacidable = 1 //Dissolving the case would also delete the contents. + density = TRUE + anchored = TRUE + unacidable = TRUE //Dissolving the case would also delete the contents. var/health = 30 var/obj/item/occupant = null - var/destroyed = 0 - var/locked = 0 - var/burglar_alarm = 0 + var/destroyed = FALSE + var/locked = FALSE + var/burglar_alarm = FALSE var/ue = null var/image/occupant_overlay = null var/obj/item/airlock_electronics/circuit @@ -116,8 +116,8 @@ GLOBAL_LIST_INIT(captain_display_cases, list()) /obj/structure/displaycase/captains_laser name = "captain's display case" desc = "A display case for the captain's antique laser gun. Hooked up with an anti-theft system." - burglar_alarm = 1 - locked = 1 + burglar_alarm = TRUE + locked = TRUE req_access = list(access_captain) start_showpiece_type = /obj/item/gun/energy/laser/captain @@ -205,7 +205,7 @@ GLOBAL_LIST_INIT(captain_display_cases, list()) return /obj/structure/displaycase/proc/burglar_alarm() - if(burglar_alarm) + if(burglar_alarm && is_station_contact(z)) var/area/alarmed = get_area(src) alarmed.burglaralert(src) visible_message("The burglar alarm goes off!") @@ -215,10 +215,10 @@ GLOBAL_LIST_INIT(captain_display_cases, list()) sleep(74) // 7.4 seconds long /obj/structure/displaycase/update_icon() - if(src.destroyed) - src.icon_state = "glassbox2b" + if(destroyed) + icon_state = "glassbox2b" else - src.icon_state = "glassbox2[locked]" + icon_state = "glassbox2[locked]" overlays = 0 if(occupant) var/icon/occupant_icon=getFlatIcon(occupant) diff --git a/code/modules/mining/lavaland/loot/ashdragon_loot.dm b/code/modules/mining/lavaland/loot/ashdragon_loot.dm index a39b1bbf8c6..a353128357c 100644 --- a/code/modules/mining/lavaland/loot/ashdragon_loot.dm +++ b/code/modules/mining/lavaland/loot/ashdragon_loot.dm @@ -72,7 +72,7 @@ var/mob/dead/observer/current_spirits = list() for(var/mob/dead/observer/O in GLOB.player_list) - if(is_type_in_list(O.following, contents)) + if((O.following in contents)) ghost_counter++ O.invisibility = 0 current_spirits |= O diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index b868945f065..a69ff2a793b 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -99,7 +99,7 @@ var/indestructible = 0 // If set, prevents aliens from destroying it var/keep_preset_name = 0 - var/report_power_alarm = 1 + var/report_power_alarm = TRUE var/shock_proof = 0 //if set to 1, this APC will not arc bolts of electricity if it's overloaded. @@ -117,11 +117,11 @@ operating = 0 /obj/machinery/power/apc/noalarm - report_power_alarm = 0 + report_power_alarm = FALSE /obj/machinery/power/apc/syndicate //general syndicate access req_access = list(access_syndicate) - report_power_alarm = 0 + report_power_alarm = FALSE /obj/item/apc_electronics name = "power control module" @@ -1171,14 +1171,14 @@ lighting = autoset(lighting, 1) environ = autoset(environ, 1) autoflag = 3 - if(report_power_alarm) + if(report_power_alarm && is_station_contact(z)) SSalarms.power_alarm.clearAlarm(loc, src) else if(cell.charge < 1250 && cell.charge > 750 && longtermpower < 0) // <30%, turn off equipment if(autoflag != 2) equipment = autoset(equipment, 2) lighting = autoset(lighting, 1) environ = autoset(environ, 1) - if(report_power_alarm) + if(report_power_alarm && is_station_contact(z)) SSalarms.power_alarm.triggerAlarm(loc, src) autoflag = 2 else if(cell.charge < 750 && cell.charge > 10) // <15%, turn off lighting & equipment @@ -1186,7 +1186,7 @@ equipment = autoset(equipment, 2) lighting = autoset(lighting, 2) environ = autoset(environ, 1) - if(report_power_alarm) + if(report_power_alarm && is_station_contact(z)) SSalarms.power_alarm.triggerAlarm(loc, src) autoflag = 1 else if(cell.charge <= 0) // zero charge, turn all off @@ -1194,7 +1194,7 @@ equipment = autoset(equipment, 0) lighting = autoset(lighting, 0) environ = autoset(environ, 0) - if(report_power_alarm) + if(report_power_alarm && is_station_contact(z)) SSalarms.power_alarm.triggerAlarm(loc, src) autoflag = 0 @@ -1250,7 +1250,7 @@ equipment = autoset(equipment, 0) lighting = autoset(lighting, 0) environ = autoset(environ, 0) - if(report_power_alarm) + if(report_power_alarm && is_station_contact(z)) SSalarms.power_alarm.triggerAlarm(loc, src) autoflag = 0 diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm index 512de9de9e9..987315ac13b 100644 --- a/code/modules/surgery/organs/heart.dm +++ b/code/modules/surgery/organs/heart.dm @@ -82,11 +82,10 @@ var/heal_burn = 0 var/heal_oxy = 0 - /obj/item/organ/internal/heart/cursed/attack(mob/living/carbon/human/H, mob/living/carbon/human/user, obj/target) if(H == user && istype(H)) if(NO_BLOOD in H.dna.species.species_traits) - to_chat(H, "\The [src] is not compatible with your form!") + to_chat(H, "[src] is not compatible with your form!") return playsound(user,'sound/effects/singlebeat.ogg', 40, 1) user.drop_item() @@ -111,17 +110,16 @@ if(owner) to_chat(owner, "Your heart has been replaced with a cursed one, you have to pump this one manually otherwise you'll die!") - /datum/action/item_action/organ_action/cursed_heart name = "pump your blood" //You are now brea- pumping blood manually /datum/action/item_action/organ_action/cursed_heart/Trigger() . = ..() - if(. && istype(target,/obj/item/organ/internal/heart/cursed)) + if(. && istype(target, /obj/item/organ/internal/heart/cursed)) var/obj/item/organ/internal/heart/cursed/cursed_heart = target - if(world.time < (cursed_heart.last_pump + (cursed_heart.pump_delay-10))) //no spam + if(world.time < (cursed_heart.last_pump + (cursed_heart.pump_delay - 10))) //no spam to_chat(owner, "Too soon!") return @@ -132,7 +130,7 @@ var/mob/living/carbon/human/H = owner if(istype(H)) if(!(NO_BLOOD in H.dna.species.species_traits)) - H.blood_volume = min(H.blood_volume + cursed_heart.blood_loss*0.5, BLOOD_VOLUME_NORMAL) + H.blood_volume = min(H.blood_volume + cursed_heart.blood_loss * 0.5, BLOOD_VOLUME_NORMAL) if(owner.client) owner.client.color = "" From bab051a084af05b35641d5b2ff6ce1e71e0d8d78 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 3 Jun 2019 20:15:02 +0200 Subject: [PATCH 08/38] Wormhole jaunter belt fix --- code/modules/mining/equipment_locker.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 82ae53fa5a0..4c4408e6219 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -708,6 +708,7 @@ throw_speed = 3 throw_range = 5 origin_tech = "bluespace=2" + slot_flags = SLOT_BELT /obj/item/wormhole_jaunter/attack_self(mob/user) user.visible_message("[user.name] activates the [src.name]!") From cd362d6badd7e0b2ad34641d13bbde4e58e3936c Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 3 Jun 2019 21:44:01 +0200 Subject: [PATCH 09/38] Wormhole jaunter fix (and replace lighting checks with simulated) and disk compartmentalizer fix --- code/__DEFINES/is_helpers.dm | 2 + code/__HELPERS/unsorted.dm | 4 +- code/game/atoms.dm | 2 +- code/game/atoms_movable.dm | 15 ++- .../gamemodes/miniantags/bot_swarm/swarmer.dm | 6 +- code/game/objects/effects/portals.dm | 102 +++++++++++++----- code/game/turfs/simulated/floor/chasm.dm | 4 +- code/game/turfs/simulated/floor/lava.dm | 8 +- code/game/turfs/turf.dm | 6 +- .../mission_code/stationCollision.dm | 8 +- .../kitchen_machinery/smartfridge.dm | 3 + code/modules/mining/equipment_locker.dm | 49 ++++----- code/modules/mob/inventory.dm | 4 + code/modules/mob/living/carbon/carbon.dm | 11 +- code/modules/mob/mob.dm | 2 +- code/modules/mob/mob_defines.dm | 2 +- .../reagents/chemistry/reagents/water.dm | 2 +- code/modules/shuttle/supply.dm | 4 +- code/modules/tram/tram.dm | 20 ++-- 19 files changed, 154 insertions(+), 100 deletions(-) diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 4ff62ea4c89..c4478f62837 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -17,6 +17,8 @@ #define ismecha(A) (istype(A, /obj/mecha)) +#define iseffect(A) (istype(A, /obj/effect)) + #define is_cleanable(A) (istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/rune)) //if something is cleanable #define is_pen(W) (istype(W, /obj/item/pen)) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 7b9d207e172..f7c5b670dc8 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1718,8 +1718,8 @@ var/mob/dview/dview_mob = new /proc/turf_clear(turf/T) for(var/atom/A in T) if(A.simulated) - return 0 - return 1 + return FALSE + return TRUE /proc/screen_loc2turf(scr_loc, turf/origin) var/tX = splittext(scr_loc, ",") diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 32e6487ca57..c52df8c7912 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -12,7 +12,7 @@ var/last_bumped = 0 var/pass_flags = 0 var/germ_level = GERM_LEVEL_AMBIENT // The higher the germ level, the more germ on the atom. - var/simulated = 1 //filter for actions - used by lighting overlays + var/simulated = TRUE //filter for actions - used by lighting overlays var/atom_say_verb = "says" var/dont_save = 0 // For atoms that are temporary by necessity - like lighting overlays diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 525eb10e52f..bcaf21d5cde 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -380,23 +380,20 @@ //Overlays /atom/movable/overlay var/atom/master = null - anchored = 1 + anchored = TRUE + simulated = FALSE /atom/movable/overlay/New() verbs.Cut() return /atom/movable/overlay/attackby(a, b, c) - if(src.master) - return src.master.attackby(a, b, c) - return - + if(master) + return master.attackby(a, b, c) /atom/movable/overlay/attack_hand(a, b, c) - if(src.master) - return src.master.attack_hand(a, b, c) - return - + if(master) + return master.attack_hand(a, b, c) /atom/movable/proc/water_act(volume, temperature, source, method = TOUCH) //amount of water acting : temperature of water in kelvin : object that called it (for shennagins) return TRUE diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index c5b47e1db17..e73474bad7d 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -181,8 +181,10 @@ S.Integrate(src) return FALSE -/atom/movable/lighting_object/swarmer_act() - return FALSE +/atom/movable/swarmer_act() + if(!simulated) + return FALSE + return ..() /obj/effect/swarmer_act() return FALSE diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index faaf623fa50..8a8606a4a5c 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -3,68 +3,116 @@ desc = "Looks unstable. Best to test it with the clown." icon = 'icons/obj/stationobjs.dmi' icon_state = "portal" - density = 1 - unacidable = 1//Can't destroy energy portals. - var/failchance = 5 + density = TRUE + unacidable = TRUE + anchored = TRUE + var/obj/item/target = null var/creator = null - anchored = 1 - var/precision = 1 // how close to the portal you will teleport. 0 = on the portal, 1 = adjacent - var/can_multitool_to_remove = 0 + + var/failchance = 5 + var/fail_icon = "portal1" + + var/precision = TRUE // how close to the portal you will teleport. FALSE = on the portal, TRUE = adjacent + var/can_multitool_to_remove = FALSE var/ignore_tele_proof_area_setting = FALSE /obj/effect/portal/Bumped(mob/M as mob|obj) teleport(M) -/obj/effect/portal/New(loc, turf/target, creator=null, lifespan=300) +/obj/effect/portal/New(loc, turf/target, creator = null, lifespan = 300) + ..() + GLOB.portals += src - src.loc = loc + src.target = target src.creator = creator + if(lifespan > 0) spawn(lifespan) qdel(src) /obj/effect/portal/Destroy() GLOB.portals -= src - if(istype(creator, /obj)) + + if(isobj(creator)) var/obj/O = creator O.portal_destroyed(src) + creator = null target = null return ..() -/obj/effect/portal/proc/teleport(atom/movable/M as mob|obj) - if(istype(M, /obj/effect)) //sparks don't teleport +/obj/effect/portal/singularity_pull() + return + +/obj/effect/portal/singularity_act() + return + +/obj/effect/portal/Crossed(atom/movable/AM) + if(isobserver(AM)) + return ..() + + if(!teleport(AM)) + return ..() + +/obj/effect/portal/attack_tk(mob/user) + return + +/obj/effect/portal/attack_hand(mob/user) + . = ..() + if(.) return - if(M.anchored&&istype(M, /obj/mecha)) - return - if(!( target )) - qdel(src) - return - if(istype(M, /atom/movable)) - if(prob(failchance)) - src.icon_state = "portal1" - if(!do_teleport(M, locate(rand(5, world.maxx - 5), rand(5, world.maxy -5), 3), 0, bypass_area_flag = ignore_tele_proof_area_setting)) // Try to send them to deep space. - invalid_teleport() - else - if(!do_teleport(M, target, precision, bypass_area_flag = ignore_tele_proof_area_setting)) // Try to send them to a turf adjacent to target. - invalid_teleport() + if(get_turf(user) == get_turf(src)) + teleport(user) + if(Adjacent(user)) + user.forceMove(get_turf(src)) + +/obj/effect/portal/attack_ghost(mob/dead/observer/O) + if(target) + O.forceMove(target) /obj/effect/portal/attackby(obj/item/A, mob/user) - if(istype(A, /obj/item/multitool) && can_multitool_to_remove) + if(ismultitool(A) && can_multitool_to_remove) qdel(src) + else if(user && Adjacent(user)) + user.forceMove(get_turf(src)) + return TRUE + +/obj/effect/portal/proc/teleport(atom/movable/M, force = FALSE) + if(!istype(M)) + return + + if(iseffect(M) || !M.simulated) + return + + if(M.anchored && ismecha(M)) + return + + if(!target) + qdel(src) + return + + if(ismegafauna(M)) + message_admins("[M] has used a portal at [ADMIN_VERBOSEJMP(src)] made by [key_name_admin(usr)].") + + if(prob(failchance)) + icon_state = fail_icon + if(!do_teleport(M, locate(rand(5, world.maxx - 5), rand(5, world.maxy -5), 3), 0, bypass_area_flag = ignore_tele_proof_area_setting)) // Try to send them to deep space. + invalid_teleport() + else + if(!do_teleport(M, target, precision, bypass_area_flag = ignore_tele_proof_area_setting)) // Try to send them to a turf adjacent to target. + invalid_teleport() /obj/effect/portal/proc/invalid_teleport() visible_message("[src] flickers and fails due to bluespace interference!") do_sparks(5, 0, loc) qdel(src) - /obj/effect/portal/redspace name = "redspace portal" desc = "A portal capable of bypassing bluespace interference." icon_state = "portal1" failchance = 0 precision = 0 - ignore_tele_proof_area_setting = TRUE \ No newline at end of file + ignore_tele_proof_area_setting = TRUE diff --git a/code/game/turfs/simulated/floor/chasm.dm b/code/game/turfs/simulated/floor/chasm.dm index f3273c7786a..79b94faede5 100644 --- a/code/game/turfs/simulated/floor/chasm.dm +++ b/code/game/turfs/simulated/floor/chasm.dm @@ -8,7 +8,7 @@ canSmoothWith = list(/turf/simulated/floor/chasm) density = TRUE //This will prevent hostile mobs from pathing into chasms, while the canpass override will still let it function like an open turf var/static/list/falling_atoms = list() //Atoms currently falling into the chasm - var/static/list/forbidden_types = typecacheof(list(/obj/effect/portal, /obj/singularity, /obj/structure/stone_tile, /obj/item/projectile, /obj/effect/temp_visual, /obj/effect/collapse, /obj/effect/collapse, /atom/movable/lighting_object)) + var/static/list/forbidden_types = typecacheof(list(/obj/effect/portal, /obj/singularity, /obj/structure/stone_tile, /obj/item/projectile, /obj/effect/temp_visual, /obj/effect/collapse, /obj/effect/collapse)) var/drop_x = 1 var/drop_y = 1 var/drop_z = 1 @@ -75,7 +75,7 @@ return FALSE if(!isliving(AM) && !isobj(AM)) return FALSE - if(is_type_in_typecache(AM, forbidden_types) || AM.throwing) + if(is_type_in_typecache(AM, forbidden_types) || !AM.simulated || AM.throwing) return FALSE //Flies right over the chasm if(isliving(AM)) diff --git a/code/game/turfs/simulated/floor/lava.dm b/code/game/turfs/simulated/floor/lava.dm index c1a8bfd6fea..d1ee346b302 100644 --- a/code/game/turfs/simulated/floor/lava.dm +++ b/code/game/turfs/simulated/floor/lava.dm @@ -53,13 +53,13 @@ return FALSE var/thing_to_check = src - if (AM) + if(AM) thing_to_check = list(AM) for(var/thing in thing_to_check) - if(istype(thing, /atom/movable/lighting_object) || istype(thing, /atom/movable/overlay)) - continue if(isobj(thing)) var/obj/O = thing + if(!O.simulated) + continue if((O.resistance_flags & (LAVA_PROOF|INDESTRUCTIBLE)) || O.throwing) continue . = 1 @@ -71,7 +71,7 @@ O.resistance_flags &= ~FIRE_PROOF O.fire_act(10000, 1000) - else if (isliving(thing)) + else if(isliving(thing)) . = 1 var/mob/living/L = thing if(L.flying) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 21b9f9b455a..53cf1917404 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -491,16 +491,14 @@ var/turf/T0 = src for(var/X in T0.GetAllContents()) var/atom/A = X + if(!A.simulated) + continue if(istype(A, /mob/dead)) continue if(istype(A, /obj/effect/landmark)) continue if(istype(A, /obj/docking_port)) continue - if(istype(A, /atom/movable/lighting_object)) - continue - if(!A.simulated) - continue qdel(A, force=TRUE) T0.ChangeTurf(turf_type) diff --git a/code/modules/awaymissions/mission_code/stationCollision.dm b/code/modules/awaymissions/mission_code/stationCollision.dm index e84df256f6b..65938f32e8e 100644 --- a/code/modules/awaymissions/mission_code/stationCollision.dm +++ b/code/modules/awaymissions/mission_code/stationCollision.dm @@ -161,7 +161,7 @@ var/sc_safecode5 = "[rand(0,9)]" desc = "Your body becomes weak and your feel your mind slipping away as you try to comprehend what you know can't be possible." move_self = 0 //Contianed narsie does not move! grav_pull = 0 //Contained narsie does not pull stuff in! - var/uneatable = list(/turf/space, /obj/effect/overlay, /atom/movable/lighting_object, /mob/living/simple_animal/hostile/construct) + var/uneatable = list(/turf/space, /obj/effect/overlay, /mob/living/simple_animal/hostile/construct) //Override this to prevent no adminlog runtimes and admin warnings about a singularity without containment /obj/singularity/narsie/sc_Narsie/admin_investigate_setup() @@ -174,13 +174,15 @@ var/sc_safecode5 = "[rand(0,9)]" /obj/singularity/narsie/sc_Narsie/consume(var/atom/A) if(is_type_in_list(A, uneatable)) - return 0 + return FALSE + if(!A.simulated) + return FALSE if(istype(A,/mob/living)) var/mob/living/L = A L.gib() else if(istype(A,/obj/)) var/obj/O = A - O.ex_act(1.0) + O.ex_act(1) if(O) qdel(O) else if(isturf(A)) var/turf/T = A diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index e623cda0de0..48b4453f6d4 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -157,6 +157,9 @@ pass_flags = PASSTABLE visible_contents = FALSE +/obj/machinery/smartfridge/disks/accept_check(obj/item/O) + return istype(O, /obj/item/disk) + // ---------------------------- // Virology Medical Smartfridge // ---------------------------- diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 4c4408e6219..10823051563 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -699,7 +699,7 @@ /obj/item/wormhole_jaunter name = "wormhole jaunter" - desc = "A single use device harnessing outdated wormhole technology, Nanotrasen has since turned its eyes to blue space for more accurate teleportation. The wormholes it creates are unpleasant to travel through, to say the least." + desc = "A single use device harnessing outdated wormhole technology, Nanotrasen has since turned its eyes to bluespace for more accurate teleportation. The wormholes it creates are unpleasant to travel through, to say the least.\nThanks to modifications provided by the Free Golems, this jaunter can be worn on the belt to provide protection from chasms." icon = 'icons/obj/items.dmi' icon_state = "Jaunter" item_state = "electronic" @@ -711,13 +711,13 @@ slot_flags = SLOT_BELT /obj/item/wormhole_jaunter/attack_self(mob/user) - user.visible_message("[user.name] activates the [src.name]!") + user.visible_message("[user.name] activates the [name]!") activate(user, TRUE) /obj/item/wormhole_jaunter/proc/turf_check(mob/user) var/turf/device_turf = get_turf(user) if(!device_turf || !is_teleport_allowed(device_turf.z)) - to_chat(user, "You're having difficulties getting the [src.name] to work.") + to_chat(user, "You're having difficulties getting the [name] to work.") return FALSE return TRUE @@ -737,49 +737,42 @@ var/list/L = get_destinations(user) if(!L.len) - to_chat(user, "The [src.name] found no beacons in the world to anchor a wormhole to.") + to_chat(user, "The [name] found no beacons in the world to anchor a wormhole to.") return var/chosen_beacon = pick(L) - var/obj/effect/portal/wormhole/jaunt_tunnel/J = new (get_turf(src), src, 100, null, FALSE, get_turf(chosen_beacon)) + var/obj/effect/portal/jaunt_tunnel/J = new(get_turf(src), get_turf(chosen_beacon), src, 100) if(adjacent) try_move_adjacent(J) + else + J.teleport(user) playsound(src,'sound/effects/sparks4.ogg',50,1) qdel(src) /obj/item/wormhole_jaunter/proc/chasm_react(mob/user) - if(user.get_item_by_slot(SLOT_BELT) == src) + if(user.get_item_by_slot(slot_belt) == src) to_chat(user, "Your [name] activates, saving you from the chasm!") activate(user, FALSE) else to_chat(user, "[src] is not attached to your belt, preventing it from saving you from the chasm. RIP.") -/obj/effect/portal/wormhole/jaunt_tunnel +/obj/effect/portal/jaunt_tunnel name = "jaunt tunnel" icon = 'icons/effects/effects.dmi' icon_state = "bhole3" desc = "A stable hole in the universe made by a wormhole jaunter. Turbulent doesn't even begin to describe how rough passage through one of these is, but at least it will always get you somewhere near a beacon." + failchance = 0 -/obj/effect/portal/wormhole/jaunt_tunnel/teleport(atom/movable/M) - if(istype(M, /obj/effect)) - return - if(istype(M, /atom/movable)) - if(do_teleport(M, target, 6)) - if(isliving(M)) - var/mob/living/L = M - L.Weaken(3) - if(ishuman(L)) - shake_camera(L, 20, 1) - var/mob/living/carbon/human/H = L - spawn(20) - if(H && H.check_has_mouth()) - H.visible_message("[L.name] vomits from travelling through the [src.name]!", "You throw up from travelling through the [src.name]!") - H.nutrition -= 20 - H.adjustToxLoss(-3) - var/turf/T = get_turf(H) - T.add_vomit_floor() - else - visible_message("[src] flickers and fails, due to bluespace interference!") - qdel(src) +/obj/effect/portal/jaunt_tunnel/teleport(atom/movable/M) + . = ..() + if(.) + // KERPLUNK + playsound(M,'sound/weapons/resonator_blast.ogg', 50, 1) + if(iscarbon(M)) + var/mob/living/carbon/L = M + L.Weaken(6) + if(ishuman(L)) + shake_camera(L, 20, 1) + addtimer(CALLBACK(L, /mob/living/carbon.proc/vomit), 20) /**********************Resonator**********************/ diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index d412d604ec2..bb7bcfc94e1 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -245,6 +245,10 @@ /mob/proc/get_item_by_slot(slot_id) switch(slot_id) + if(slot_wear_mask) + return wear_mask + if(slot_back) + return back if(slot_l_hand) return l_hand if(slot_r_hand) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 31788ecc8cf..2c7a2d67c55 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -712,17 +712,18 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, return back if(slot_wear_mask) return wear_mask - if(slot_handcuffed) - return handcuffed - if(slot_legcuffed) - return legcuffed + if(slot_wear_suit) + return wear_suit if(slot_l_hand) return l_hand if(slot_r_hand) return r_hand + if(slot_handcuffed) + return handcuffed + if(slot_legcuffed) + return legcuffed return null - //generates realistic-ish pulse output based on preset levels /mob/living/carbon/proc/get_pulse(var/method) //method 0 is for hands, 1 is for machines, more accurate var/temp = 0 //see setup.dm:694 diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index d59948a2ed6..c74d7545473 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1010,7 +1010,7 @@ var/list/slot_equipment_priority = list( \ var/atom/A = foo if(A.invisibility > see_invisible) continue - if(is_type_in_list(A, shouldnt_see)) + if(is_type_in_list(A, shouldnt_see) || !A.simulated) continue statpanel_things += A statpanel(listed_turf.name, null, statpanel_things) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 60a3637166a..b378705becb 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -176,7 +176,7 @@ var/player_ghosted = 0 var/turf/listed_turf = null //the current turf being examined in the stat panel - var/list/shouldnt_see = list(/atom/movable/lighting_object) //list of objects that this mob shouldn't see in the stat panel. this silliness is needed because of AI alt+click and cult blood runes + var/list/shouldnt_see = list() //list of objects that this mob shouldn't see in the stat panel. this silliness is needed because of AI alt+click and cult blood runes var/kills = 0 diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm index 20e2ba82b1e..fc79d0b336b 100644 --- a/code/modules/reagents/chemistry/reagents/water.dm +++ b/code/modules/reagents/chemistry/reagents/water.dm @@ -57,7 +57,7 @@ if(!(istype(B) && B.off_floor)) qdel(O) else - if(!istype(O, /atom/movable/lighting_object)) + if(O.simulated) O.color = initial(O.color) O.clean_blood() diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 28cb96b128b..bd8d3e055b7 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -58,12 +58,10 @@ var/contcount for(var/atom/A in T.contents) - if(istype(A,/atom/movable/lighting_object)) + if(!A.simulated) continue if(istype(A,/obj/machinery/light)) continue //hacky but whatever, shuttles need three spots each for this shit - if(!A.simulated) - continue contcount++ if(contcount) diff --git a/code/modules/tram/tram.dm b/code/modules/tram/tram.dm index fed50355dde..1548e7eb5fa 100644 --- a/code/modules/tram/tram.dm +++ b/code/modules/tram/tram.dm @@ -22,7 +22,7 @@ var/delay_timer = null - var/list/blacklist = list(/obj/tram/rail,/atom/movable/lighting_object) + var/list/blacklist = list(/obj/tram/rail) var/list/ancwhitelist = list(/obj/tram, /obj/vehicle, /obj/structure/chair, /obj/structure/grille, /obj/structure/window) /obj/tram/tram_controller/New() @@ -135,14 +135,20 @@ tram += src /obj/tram/tram_controller/proc/check_validity(var/atom/movable/AM) - if(!AM) return 0 - if(is_type_in_list(AM, blacklist)) return 0 - if(!AM.simulated) return 0 + if(!AM) + return FALSE + + if(is_type_in_list(AM, blacklist)) + return FALSE + + if(!AM.simulated) + return FALSE + if(AM.anchored) if(is_type_in_list(AM, ancwhitelist)) - return 1 - return 0 - return 1 + return TRUE + return FALSE + return TRUE /obj/tram/tram_controller/proc/init_controllers() for(var/obj/tram/controlpad/CCP in tram) From 950a4cb5dc947520098bb10ec1e9a3b33f37724c Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 3 Jun 2019 21:57:00 +0200 Subject: [PATCH 10/38] More portal fixes --- code/game/objects/effects/portals.dm | 14 ++++--- code/game/turfs/simulated/floor/chasm.dm | 2 +- code/game/turfs/space/transit.dm | 2 +- .../mission_code/stationCollision.dm | 4 +- code/modules/events/wormholes.dm | 40 ++++++++++--------- code/modules/shuttle/supply.dm | 2 +- code/modules/tram/tram.dm | 4 +- 7 files changed, 37 insertions(+), 31 deletions(-) diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index 8a8606a4a5c..a4020af9d0d 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -81,17 +81,17 @@ /obj/effect/portal/proc/teleport(atom/movable/M, force = FALSE) if(!istype(M)) - return + return FALSE - if(iseffect(M) || !M.simulated) - return + if(!M.simulated || iseffect(M)) + return FALSE if(M.anchored && ismecha(M)) - return + return FALSE if(!target) qdel(src) - return + return FALSE if(ismegafauna(M)) message_admins("[M] has used a portal at [ADMIN_VERBOSEJMP(src)] made by [key_name_admin(usr)].") @@ -100,9 +100,13 @@ icon_state = fail_icon if(!do_teleport(M, locate(rand(5, world.maxx - 5), rand(5, world.maxy -5), 3), 0, bypass_area_flag = ignore_tele_proof_area_setting)) // Try to send them to deep space. invalid_teleport() + return FALSE else if(!do_teleport(M, target, precision, bypass_area_flag = ignore_tele_proof_area_setting)) // Try to send them to a turf adjacent to target. invalid_teleport() + return FALSE + + return TRUE /obj/effect/portal/proc/invalid_teleport() visible_message("[src] flickers and fails due to bluespace interference!") diff --git a/code/game/turfs/simulated/floor/chasm.dm b/code/game/turfs/simulated/floor/chasm.dm index 79b94faede5..6a213400d04 100644 --- a/code/game/turfs/simulated/floor/chasm.dm +++ b/code/game/turfs/simulated/floor/chasm.dm @@ -75,7 +75,7 @@ return FALSE if(!isliving(AM) && !isobj(AM)) return FALSE - if(is_type_in_typecache(AM, forbidden_types) || !AM.simulated || AM.throwing) + if(!AM.simulated || is_type_in_typecache(AM, forbidden_types) || AM.throwing) return FALSE //Flies right over the chasm if(isliving(AM)) diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm index c08189e4d93..79bf171ce1f 100644 --- a/code/game/turfs/space/transit.dm +++ b/code/game/turfs/space/transit.dm @@ -88,7 +88,7 @@ /turf/space/transit/Entered(atom/movable/AM, atom/OldLoc, ignoreRest = 0) if(!AM) return - if(istype(AM, /obj/docking_port) || !AM.simulated) + if(!AM.simulated || istype(AM, /obj/docking_port)) return //this was fucking hilarious, the docking ports were getting thrown to random Z-levels var/max = world.maxx-TRANSITIONEDGE var/min = 1+TRANSITIONEDGE diff --git a/code/modules/awaymissions/mission_code/stationCollision.dm b/code/modules/awaymissions/mission_code/stationCollision.dm index 65938f32e8e..ed888d65465 100644 --- a/code/modules/awaymissions/mission_code/stationCollision.dm +++ b/code/modules/awaymissions/mission_code/stationCollision.dm @@ -173,10 +173,10 @@ var/sc_safecode5 = "[rand(0,9)]" mezzer() /obj/singularity/narsie/sc_Narsie/consume(var/atom/A) - if(is_type_in_list(A, uneatable)) - return FALSE if(!A.simulated) return FALSE + if(is_type_in_list(A, uneatable)) + return FALSE if(istype(A,/mob/living)) var/mob/living/L = A L.gib() diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm index be145752671..c92ec910cdc 100644 --- a/code/modules/events/wormholes.dm +++ b/code/modules/events/wormholes.dm @@ -34,7 +34,6 @@ qdel(O) wormholes.Cut() - /obj/effect/portal/wormhole name = "wormhole" desc = "It looks highly unstable; It could close at any moment." @@ -42,23 +41,26 @@ icon_state = "anom" failchance = 0 -/obj/effect/portal/wormhole/attack_hand(mob/user) - teleport(user) - -/obj/effect/portal/wormhole/attackby(obj/item/I, mob/user, params) - teleport(user) - /obj/effect/portal/wormhole/teleport(atom/movable/M) - if(istype(M, /obj/effect)) //sparks don't teleport - return - if(M.anchored && istype(M, /obj/mecha)) - return + if(!istype(M)) + return FALSE - if(istype(M, /atom/movable)) - var/turf/target - if(GLOB.portals.len) - var/obj/effect/portal/P = pick(GLOB.portals) - if(P && isturf(P.loc)) - target = P.loc - if(!target) return - do_teleport(M, target, 1, 1, 0, 0) ///You will appear adjacent to the beacon + if(!M.simulated || iseffect(M)) + return FALSE + + if(M.anchored && ismecha(M)) + return FALSE + + var/turf/target + if(GLOB.portals.len) + var/obj/effect/portal/P = pick(GLOB.portals) + if(P && isturf(P.loc)) + target = P.loc + + if(!target) + return FALSE + + if(!do_teleport(M, target, 1, TRUE)) ///You will appear adjacent to the beacon + return FALSE + + return TRUE diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index bd8d3e055b7..b6a7e7bb28f 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -60,7 +60,7 @@ for(var/atom/A in T.contents) if(!A.simulated) continue - if(istype(A,/obj/machinery/light)) + if(istype(A, /obj/machinery/light)) continue //hacky but whatever, shuttles need three spots each for this shit contcount++ diff --git a/code/modules/tram/tram.dm b/code/modules/tram/tram.dm index 1548e7eb5fa..0f80c99405e 100644 --- a/code/modules/tram/tram.dm +++ b/code/modules/tram/tram.dm @@ -138,10 +138,10 @@ if(!AM) return FALSE - if(is_type_in_list(AM, blacklist)) + if(!AM.simulated) return FALSE - if(!AM.simulated) + if(is_type_in_list(AM, blacklist)) return FALSE if(AM.anchored) From e7da7fdf1fc586d2b29b9b9e749c62ea7b1a1a61 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 3 Jun 2019 22:59:15 +0200 Subject: [PATCH 11/38] Fix mask path --- code/modules/ruins/lavalandruin_code/syndicate_base.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/ruins/lavalandruin_code/syndicate_base.dm b/code/modules/ruins/lavalandruin_code/syndicate_base.dm index 7e62f0fda39..bbfa4ef688a 100644 --- a/code/modules/ruins/lavalandruin_code/syndicate_base.dm +++ b/code/modules/ruins/lavalandruin_code/syndicate_base.dm @@ -74,7 +74,7 @@ /datum/outfit/lavaland_syndicate/comms name = "Lavaland Syndicate Comms Agent" r_hand = /obj/item/melee/energy/sword/saber - mask = /obj/item/clothing/mask/chameleon + mask = /obj/item/clothing/mask/chameleon/gps suit = /obj/item/clothing/suit/armor/vest /obj/item/clothing/mask/chameleon/gps/New() From 5f33ae47fa30d7661e40671aeb48f0c41b23d6da Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Mon, 3 Jun 2019 23:38:18 +0200 Subject: [PATCH 12/38] Singularity on Lavaland improvements --- _maps/map_files/generic/Lavaland.dmm | 1 + code/game/turfs/simulated/floor/asteroid.dm | 6 ------ code/game/turfs/simulated/walls.dm | 2 +- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/_maps/map_files/generic/Lavaland.dmm b/_maps/map_files/generic/Lavaland.dmm index 66ed729e9d6..3bfdb1d12b2 100644 --- a/_maps/map_files/generic/Lavaland.dmm +++ b/_maps/map_files/generic/Lavaland.dmm @@ -628,6 +628,7 @@ /obj/effect/turf_decal/tile/brown{ dir = 4 }, +/obj/effect/baseturf_helper/lava_land/surface, /turf/simulated/floor/plasteel, /area/mine/eva) "bH" = ( diff --git a/code/game/turfs/simulated/floor/asteroid.dm b/code/game/turfs/simulated/floor/asteroid.dm index 8ed3cd22b4b..bae38df854a 100644 --- a/code/game/turfs/simulated/floor/asteroid.dm +++ b/code/game/turfs/simulated/floor/asteroid.dm @@ -95,12 +95,6 @@ slowdown = 0 return -/turf/simulated/floor/plating/asteroid/singularity_act() - return - -/turf/simulated/floor/plating/asteroid/singularity_pull(S, current_size) - return - /turf/simulated/floor/plating/asteroid/basalt name = "volcanic floor" baseturf = /turf/simulated/floor/plating/asteroid/basalt diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 23038b21be5..8163bc75acc 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -136,7 +136,7 @@ var/obj/structure/sign/poster/P = O P.roll_and_drop(src) else - O.loc = src + O.forceMove(src) ChangeTurf(/turf/simulated/floor/plating) From 6fb65958ed3a4099811ea21fe97558b85a7f59b8 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Tue, 4 Jun 2019 00:11:52 +0200 Subject: [PATCH 13/38] Make Gutlunches and Gubbucks reproduce properly --- code/controllers/subsystem/ticker.dm | 2 + .../mob/living/simple_animal/friendly/cat.dm | 4 +- .../living/simple_animal/friendly/corgi.dm | 4 +- .../simple_animal/hostile/mining/gutlunch.dm | 2 +- .../mob/living/simple_animal/simple_animal.dm | 38 ++++++++++--------- 5 files changed, 28 insertions(+), 22 deletions(-) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index fafc244af14..bbe2db385a0 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -523,3 +523,5 @@ SUBSYSTEM_DEF(ticker) /datum/controller/subsystem/ticker/proc/HasRoundStarted() return current_state >= GAME_STATE_PLAYING +/datum/controller/subsystem/ticker/proc/IsRoundInProgress() + return current_state == GAME_STATE_PLAYING \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 62784a793f9..4dea368ad5e 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -16,8 +16,8 @@ turns_per_move = 5 see_in_dark = 6 mob_size = MOB_SIZE_SMALL - simplespecies = /mob/living/simple_animal/pet/cat - childtype = /mob/living/simple_animal/pet/cat/kitten + animal_species = /mob/living/simple_animal/pet/cat + childtype = list(/mob/living/simple_animal/pet/cat/kitten) butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 3) response_help = "pets" response_disarm = "gently pushes aside" diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index 970ac596482..90ed82ff395 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -22,8 +22,8 @@ response_disarm = "bops" response_harm = "kicks" see_in_dark = 5 - childtype = /mob/living/simple_animal/pet/corgi/puppy - simplespecies = /mob/living/simple_animal/pet/corgi + childtype = list(/mob/living/simple_animal/pet/corgi) + animal_species = /mob/living/simple_animal/pet/corgi gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY var/shaved = 0 var/obj/item/inventory_head diff --git a/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm b/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm index 4e924a5424c..d73fe3ca77c 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm @@ -35,7 +35,7 @@ loot = list(/obj/effect/decal/cleanable/blood/gibs) deathmessage = "is pulped into bugmash." - simplespecies = /mob/living/simple_animal/hostile/asteroid/gutlunch + animal_species = /mob/living/simple_animal/hostile/asteroid/gutlunch childtype = list(/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck = 45, /mob/living/simple_animal/hostile/asteroid/gutlunch/guthen = 55) wanted_objects = list(/obj/effect/decal/cleanable/blood/gibs) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 3799daacb63..6955633efce 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -62,10 +62,9 @@ var/can_collar = 0 // can add collar to mob or not //Hot simple_animal baby making vars - - var/childtype = null - var/scan_ready = 1 - var/simplespecies //Sorry, no spider+corgi buttbabies. + var/list/childtype = null + var/next_scan_time = 0 + var/animal_species //Sorry, no spider+corgi buttbabies. var/gold_core_spawnable = CHEM_MOB_SPAWN_INVALID //if CHEM_MOB_SPAWN_HOSTILE can be spawned by plasma with gold core, CHEM_MOB_SPAWN_FRIENDLY are 'friendlies' spawned with blood @@ -446,27 +445,32 @@ /mob/living/simple_animal/proc/make_babies() // <3 <3 <3 - if(gender != FEMALE || stat || !scan_ready || !childtype || !simplespecies) - return - scan_ready = 0 - spawn(400) - scan_ready = 1 - var/alone = 1 + if(gender != FEMALE || stat || next_scan_time > world.time || !childtype || !animal_species || !SSticker.IsRoundInProgress()) + return FALSE + next_scan_time = world.time + 400 + + var/alone = TRUE var/mob/living/simple_animal/partner var/children = 0 + for(var/mob/M in oview(7, src)) - if(istype(M, childtype)) //Check for children FIRST. + if(M.stat != CONSCIOUS) //Check if it's conscious FIRST. + continue + else if(istype(M, childtype)) //Check for children SECOND. children++ - else if(istype(M, simplespecies)) - if(M.client) + else if(istype(M, animal_species)) + if(M.ckey) continue else if(!istype(M, childtype) && M.gender == MALE) //Better safe than sorry ;_; partner = M - else if(istype(M, /mob/)) - alone = 0 - continue + else if(isliving(M) && !faction_check_mob(M)) //shyness check. we're not shy in front of things that share a faction with us. + return //we never mate when not alone, so just abort early + if(alone && partner && children < 3) - return new childtype(loc) + var/childspawn = pickweight(childtype) + var/turf/target = get_turf(loc) + if(target) + return new childspawn(target) /mob/living/simple_animal/say_quote(var/message) var/verb = "says" From 75fa2251552ecd879534a2fcbbebf6acd73588b0 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Tue, 4 Jun 2019 00:38:41 +0200 Subject: [PATCH 14/38] Remove hood from necropolis chest --- code/modules/mining/lavaland/necropolis_chests.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 573ff630350..d8286bc8698 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -30,7 +30,6 @@ if(6) new /obj/item/pickaxe/diamond(src) if(7) - new /obj/item/clothing/head/culthood(src) new /obj/item/clothing/suit/hooded/cultrobes(src) new /obj/item/bedsheet/cult(src) if(8) From a90b23c27197a5565a3230e2a752db44b3d8a14b Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Tue, 4 Jun 2019 03:46:16 +0200 Subject: [PATCH 15/38] Re-apply Lava staff fix --- code/modules/mining/lavaland/loot/ashdragon_loot.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mining/lavaland/loot/ashdragon_loot.dm b/code/modules/mining/lavaland/loot/ashdragon_loot.dm index a353128357c..4f8f01498d0 100644 --- a/code/modules/mining/lavaland/loot/ashdragon_loot.dm +++ b/code/modules/mining/lavaland/loot/ashdragon_loot.dm @@ -198,7 +198,7 @@ user.visible_message("[user] turns \the [T] into [transform_string]!") message_admins("[key_name_admin(user)] fired the lava staff at [get_area(target)] (JMP).") log_game("[key_name(user)] fired the lava staff at [get_area(target)] ([T.x], [T.y], [T.z]).") - T.TerraformTurf(turf_type) + T.TerraformTurf(turf_type, keep_icon = FALSE) timer = world.time + create_cooldown qdel(L) else @@ -207,7 +207,7 @@ return else user.visible_message("[user] turns \the [T] into [reset_string]!") - T.TerraformTurf(reset_turf_type) + T.TerraformTurf(reset_turf_type, keep_icon = FALSE) timer = world.time + reset_cooldown playsound(T,'sound/magic/fireball.ogg', 200, 1) From efcdb7fb56ac6f3e701b3ff5cc201ca894151bd8 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Tue, 4 Jun 2019 10:11:12 +0200 Subject: [PATCH 16/38] Add reagents to goliath_steak --- code/modules/food_and_drinks/food/foods/meat.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/food_and_drinks/food/foods/meat.dm b/code/modules/food_and_drinks/food/foods/meat.dm index fdcf4d2497a..eb9569ad356 100644 --- a/code/modules/food_and_drinks/food/foods/meat.dm +++ b/code/modules/food_and_drinks/food/foods/meat.dm @@ -129,7 +129,7 @@ name = "goliath meat" desc = "A slab of goliath meat. It's not very edible now, but it cooks great in lava." icon_state = "goliathmeat" - list_reagents = list("nutriment" = 3, "toxin" = 5) + list_reagents = list("protein" = 3, "toxin" = 5) /obj/item/reagent_containers/food/snacks/goliath/burn() visible_message("[src] finishes cooking!") @@ -222,6 +222,7 @@ resistance_flags = LAVA_PROOF | FIRE_PROOF icon_state = "goliathsteak" trash = null + list_reagents = list("protein" = 6, "vitamin" = 2) ////////////////////// // Cubes // From b281d26ac1d582e3b9cef5cb4b64eff971629872 Mon Sep 17 00:00:00 2001 From: Terilia Date: Tue, 4 Jun 2019 13:33:12 +0100 Subject: [PATCH 17/38] Added Donksoft Sniper to the spawn pool --- code/game/objects/effects/spawners/lootdrop.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index b7311519f7a..4dcd2cbdd32 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -242,7 +242,8 @@ /obj/item/gun/projectile/automatic/toy/pistol/enforcer = 50, /obj/item/gun/projectile/shotgun/toy = 50, /obj/item/gun/projectile/shotgun/toy/crossbow = 50, - /obj/item/gun/projectile/shotgun/toy/tommygun = 50 + /obj/item/gun/projectile/shotgun/toy/tommygun = 50, + /obj/item/gun/projectile/automatic/sniper_rifle/toy = 50 ) From ecc46fb55b6d0ecdf793874042e89beb59aa818c Mon Sep 17 00:00:00 2001 From: Terilia Date: Tue, 4 Jun 2019 15:33:57 +0100 Subject: [PATCH 18/38] Added them to the Lavaland vendors --- code/game/machinery/vending.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index a93f3b253f2..a96a1c0d518 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -1031,6 +1031,7 @@ contraband = list(/obj/item/gun/projectile/shotgun/toy/crossbow= 10, //Congrats, you unlocked the +18 setting! /obj/item/gun/projectile/automatic/c20r/toy/riot = 10, /obj/item/gun/projectile/automatic/l6_saw/toy/riot = 10, + /obj/item/gun/projectile/automatic/sniper_rifle/toy = 10, /obj/item/ammo_box/foambox/riot = 20, /obj/item/toy/katana = 10, /obj/item/twohanded/dualsaber/toy = 5, From 0a5806bff6f6ee19bf81ff68e80d8bfa5336e92d Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Wed, 5 Jun 2019 01:21:49 +0200 Subject: [PATCH 19/38] Fix beach light --- .../LavaRuins/lavaland_biodome_beach.dmm | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm index 398b065cfbd..2dc3b44bacd 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm @@ -24,9 +24,6 @@ "af" = ( /obj/structure/table, /obj/item/clothing/mask/gas, -/obj/machinery/light/small{ - dir = 1 - }, /obj/item/clothing/glasses/sunglasses/big, /obj/item/clothing/glasses/sunglasses/big, /obj/item/clothing/glasses/sunglasses/big, @@ -34,6 +31,9 @@ /area/ruin/powered/beach) "ag" = ( /obj/structure/reagent_dispensers/fueltank, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/plating, /area/ruin/powered/beach) "ah" = ( @@ -477,12 +477,6 @@ "bW" = ( /turf/simulated/wall/r_wall, /area/ruin/powered/beach) -"cd" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/wall/mineral/sandstone, -/area/ruin/powered/beach) "cs" = ( /obj/effect/overlay/palmtree_l, /obj/machinery/light{ @@ -567,6 +561,14 @@ }, /turf/simulated/floor/pod, /area/ruin/powered/beach) +"Ei" = ( +/obj/effect/turf_decal/sand, +/obj/machinery/light/small{ + light_power = 3; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ruin/powered/beach) "Gc" = ( /turf/simulated/floor/pod/light, /area/ruin/powered/beach) @@ -1054,7 +1056,7 @@ aa (15,1,1) = {" aa bW -cd +aj aj aj aF @@ -1087,7 +1089,7 @@ aa aa bW ak -ar +Ei aj aE aC From 5aa20721baa11663dc42306504bb9ee8985c8ab9 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Wed, 5 Jun 2019 03:16:55 +0200 Subject: [PATCH 20/38] Prevent ruins from spawning on the Labor Camp and *very* close to the station --- code/controllers/subsystem/mapping.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index b8e6ee4bc14..b45ef833b9f 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -30,7 +30,7 @@ SUBSYSTEM_DEF(mapping) var/mining_type = MINETYPE if (mining_type == "lavaland") // Spawn Lavaland ruins and rivers. - seedRuins(list(level_name_to_num(MINING)), config.lavaland_budget, /area/lavaland/surface/outdoors, lava_ruins_templates) + seedRuins(list(level_name_to_num(MINING)), config.lavaland_budget, /area/lavaland/surface/outdoors/unexplored, lava_ruins_templates) spawn_rivers() else // Populate mining Z-level hidden rooms From cf6fb6a20482f084445d50b13bb39ba50e500486 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Wed, 5 Jun 2019 14:21:31 -0400 Subject: [PATCH 21/38] Automatic changelog generation for PR #11676 [ci skip] --- html/changelogs/AutoChangeLog-pr-11676.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-11676.yml diff --git a/html/changelogs/AutoChangeLog-pr-11676.yml b/html/changelogs/AutoChangeLog-pr-11676.yml new file mode 100644 index 00000000000..cf6f4267e66 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11676.yml @@ -0,0 +1,4 @@ +author: "Terilia" +delete-after: True +changes: + - rscadd: "Added the Donksoft sniper into the Trader spawnpool." From cdaeb5d59c71bfd4d5afd73949f0bf996da7c911 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Wed, 5 Jun 2019 23:14:39 +0200 Subject: [PATCH 22/38] Fix ancient goliath tentacles and processing computer on Lavaland --- code/game/machinery/machinery.dm | 14 ++++----- code/modules/mining/machine_processing.dm | 31 ++++++++++++------- code/modules/mob/living/life.dm | 4 +-- .../living/simple_animal/hostile/hostile.dm | 2 +- .../simple_animal/hostile/mining/goliath.dm | 16 +++++----- 5 files changed, 36 insertions(+), 31 deletions(-) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 7ed82b476f9..2bc9196740e 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -348,28 +348,28 @@ Class Procs: return attack_hand(user) /obj/machinery/attack_hand(mob/user as mob) - if(user.lying || user.stat) - return 1 + if(user.incapacitated()) + return TRUE if(!user.IsAdvancedToolUser()) to_chat(user, "You don't have the dexterity to do this!") - return 1 + return TRUE if(ishuman(user)) var/mob/living/carbon/human/H = user if(H.getBrainLoss() >= 60) visible_message("[H] stares cluelessly at [src] and drools.") - return 1 + return TRUE else if(prob(H.getBrainLoss())) to_chat(user, "You momentarily forget how to use [src].") - return 1 + return TRUE if(panel_open) add_fingerprint(user) - return 0 + return FALSE if(!interact_offline && stat & (NOPOWER|BROKEN|MAINT)) - return 1 + return TRUE add_fingerprint(user) diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 860692673a5..03b8404b1f0 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -20,18 +20,27 @@ anchored = TRUE var/obj/machinery/mineral/processing_unit/machine = null var/machinedir = EAST + speed_process = TRUE -/obj/machinery/mineral/processing_unit_console/New() - ..() +/obj/machinery/mineral/processing_unit_console/Initialize(mapload) + . = ..() machine = locate(/obj/machinery/mineral/processing_unit, get_step(src, machinedir)) if(machine) machine.CONSOLE = src else - qdel(src) + return INITIALIZE_HINT_QDEL + +/obj/machinery/mineral/processing_unit_console/attack_ghost(mob/user) + return ui_interact(user) /obj/machinery/mineral/processing_unit_console/attack_hand(mob/user) if(..()) - return + return TRUE + + return ui_interact(user) + +/obj/machinery/mineral/processing_unit_console/ui_interact(mob/user) + . = ..() if(!machine) return @@ -43,7 +52,8 @@ /obj/machinery/mineral/processing_unit_console/Topic(href, href_list) if(..()) - return + return TRUE + usr.set_machine(src) add_fingerprint(usr) @@ -59,15 +69,14 @@ machine.on = (href_list["set_on"] == "on") updateUsrDialog() + return TRUE /obj/machinery/mineral/processing_unit_console/Destroy() machine = null return ..() - /**********************Mineral processing unit**************************/ - /obj/machinery/mineral/processing_unit name = "furnace" icon = 'icons/obj/machines/mining_machines.dmi' @@ -81,8 +90,8 @@ var/datum/research/files speed_process = TRUE -/obj/machinery/mineral/processing_unit/New() - ..() +/obj/machinery/mineral/processing_unit/Initialize(mapload) + . = ..() AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TRANQUILLITE, MAT_TITANIUM, MAT_BLUESPACE), INFINITY, TRUE, /obj/item/stack) files = new /datum/research/smelter(src) @@ -99,6 +108,7 @@ for(var/obj/item/stack/ore/O in T) process_ore(O) CHECK_TICK + if(on) if(selected_material) smelt_ore() @@ -106,11 +116,9 @@ else if(selected_alloy) smelt_alloy() - if(CONSOLE) CONSOLE.updateUsrDialog() - /obj/machinery/mineral/processing_unit/proc/process_ore(obj/item/stack/ore/O) GET_COMPONENT(materials, /datum/component/material_container) var/material_amount = materials.get_item_material_amount(O) @@ -167,7 +175,6 @@ var/out = get_step(src, output_dir) materials.retrieve_sheets(sheets_to_remove, selected_material, out) - /obj/machinery/mineral/processing_unit/proc/smelt_alloy() var/datum/design/alloy = files.FindDesignByID(selected_alloy) //check if it's a valid design if(!alloy) diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index e0c58c484d8..276ee7b246e 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -3,9 +3,9 @@ set background = BACKGROUND_ENABLED if(notransform) - return 0 + return FALSE if(!loc) - return 0 + return FALSE var/datum/gas_mixture/environment = loc.return_air() if(client || registered_z) // This is a temporary error tracker to make sure we've caught everything diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 0f4fd774dc5..9c787639ba4 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -67,7 +67,7 @@ . = ..() if(!.) walk(src, 0) - return 0 + return FALSE /mob/living/simple_animal/hostile/handle_automated_action() if(AIStatus == AI_OFF) diff --git a/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm index 66f8e4fd873..a1c488b4068 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm @@ -10,7 +10,7 @@ attack_sound = 'sound/weapons/punch4.ogg' mouse_opacity = MOUSE_OPACITY_OPAQUE move_to_delay = 40 - ranged = 1 + ranged = TRUE ranged_cooldown = 2 //By default, start the Goliath with his cooldown off so that people can run away quickly on first sight ranged_cooldown_time = 120 friendly = "wails at" @@ -31,12 +31,12 @@ move_force = MOVE_FORCE_VERY_STRONG move_resist = MOVE_FORCE_VERY_STRONG pull_force = MOVE_FORCE_VERY_STRONG - var/pre_attack = 0 + var/pre_attack = FALSE var/pre_attack_icon = "Goliath_preattack" loot = list(/obj/item/stack/sheet/animalhide/goliath_hide) /mob/living/simple_animal/hostile/asteroid/goliath/Life() - ..() + . = ..() handle_preattack() /mob/living/simple_animal/hostile/asteroid/goliath/proc/handle_preattack() @@ -59,8 +59,7 @@ new /obj/effect/temp_visual/goliath_tentacle/original(tturf, src) ranged_cooldown = world.time + ranged_cooldown_time icon_state = icon_aggro - pre_attack = 0 - return + pre_attack = FALSE /mob/living/simple_animal/hostile/asteroid/goliath/adjustHealth(damage) ranged_cooldown-- @@ -72,7 +71,6 @@ handle_preattack() if(icon_state != icon_aggro) icon_state = icon_aggro - return // Lavaland Goliath /mob/living/simple_animal/hostile/asteroid/goliath/beast @@ -87,8 +85,8 @@ pre_attack_icon = "goliath2" butcher_results = list(/obj/item/reagent_containers/food/snacks/goliath = 2, /obj/item/stack/sheet/animalhide/goliath_hide = 1, /obj/item/stack/sheet/bone = 2) loot = list() - stat_attack = 1 - robust_searching = 1 + stat_attack = TRUE + robust_searching = TRUE /mob/living/simple_animal/hostile/asteroid/goliath/beast/random/Initialize() . = ..() @@ -136,7 +134,7 @@ /mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril fromtendril = TRUE -//tentacles +// Tentacles /obj/effect/temp_visual/goliath_tentacle name = "goliath tentacle" icon = 'icons/mob/lavaland/lavaland_monsters.dmi' From fad735142bc9fdc6636ce4d4d05e7a39c9348cd0 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Thu, 6 Jun 2019 00:09:19 +0200 Subject: [PATCH 23/38] Water tile fixes and other minor fancy turf fixes --- _maps/map_files/MetaStation/z2.dmm | 6 +- .../LavaRuins/lavaland_biodome_beach.dmm | 6 +- _maps/map_files/RandomZLevels/beach.dmm | 6 +- _maps/map_files/RandomZLevels/spacehotel.dmm | 686 +++++++++--------- _maps/map_files/cyberiad/z2.dmm | 6 +- _maps/map_files/templates/spacehotel/s_01.dmm | 6 +- _maps/map_files/templates/spacehotel/s_02.dmm | 6 +- _maps/map_files/templates/spacehotel/s_04.dmm | 6 +- _maps/map_files/templates/spacehotel/s_05.dmm | 6 +- _maps/map_files/templates/spacehotel/s_06.dmm | 6 +- code/game/machinery/poolcontroller.dm | 47 +- code/game/turfs/simulated/floor/asteroid.dm | 3 - code/game/turfs/simulated/floor/mineral.dm | 3 - code/game/turfs/simulated/floor/misc_floor.dm | 4 - code/game/turfs/simulated/floor/plating.dm | 12 +- 15 files changed, 421 insertions(+), 388 deletions(-) diff --git a/_maps/map_files/MetaStation/z2.dmm b/_maps/map_files/MetaStation/z2.dmm index c46e89e9436..bed554f54f2 100644 --- a/_maps/map_files/MetaStation/z2.dmm +++ b/_maps/map_files/MetaStation/z2.dmm @@ -6351,6 +6351,10 @@ /obj/structure/bed/abductor, /turf/unsimulated/floor/abductor, /area/abductor_ship) +"Ur" = ( +/obj/machinery/poolcontroller/invisible, +/turf/unsimulated/beach/water, +/area/centcom/holding) (1,1,1) = {" aa @@ -35864,7 +35868,7 @@ tv tu tu tQ -tU +Ur th ab ab diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm index 2dc3b44bacd..e6fda6f503a 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm @@ -438,6 +438,10 @@ /obj/item/storage/backpack/duffel, /turf/simulated/floor/beach/sand, /area/ruin/powered/beach) +"bL" = ( +/obj/machinery/poolcontroller/invisible, +/turf/simulated/floor/beach/water, +/area/ruin/powered/beach) "bM" = ( /turf/simulated/floor/plasteel/stairs/old, /area/ruin/powered/beach) @@ -1337,7 +1341,7 @@ bU bU bU bU -bU +bL bW aa "} diff --git a/_maps/map_files/RandomZLevels/beach.dmm b/_maps/map_files/RandomZLevels/beach.dmm index 76a7da40fb1..2f83199671c 100644 --- a/_maps/map_files/RandomZLevels/beach.dmm +++ b/_maps/map_files/RandomZLevels/beach.dmm @@ -1494,6 +1494,10 @@ /obj/structure/closet/crate, /turf/unsimulated/beach/sand, /area/awaymission/beach) +"LZ" = ( +/obj/machinery/poolcontroller/invisible, +/turf/unsimulated/beach/water/deep, +/area/awaymission/beach) (1,1,1) = {" aa @@ -15371,7 +15375,7 @@ du du du du -du +LZ "} (55,1,1) = {" aa diff --git a/_maps/map_files/RandomZLevels/spacehotel.dmm b/_maps/map_files/RandomZLevels/spacehotel.dmm index b9232daea52..e24fa45ca52 100644 --- a/_maps/map_files/RandomZLevels/spacehotel.dmm +++ b/_maps/map_files/RandomZLevels/spacehotel.dmm @@ -859,9 +859,6 @@ }, /turf/unsimulated/beach/sand, /area/awaymission/beach) -"bD" = ( -/turf/simulated/floor/plating/lava/smooth, -/area/awaymission) "bE" = ( /obj/effect/decal{ name = "rock"; @@ -2062,12 +2059,6 @@ }, /turf/unsimulated/beach/water/drop/dense, /area/awaymission/beach) -"dH" = ( -/turf/simulated/floor/plating/lava/smooth, -/area/awaymission{ - name = "Snowland"; - requires_power = 0 - }) "dI" = ( /obj/machinery/light, /turf/unsimulated/beach/water/deep/wood_floor{ @@ -4814,6 +4805,15 @@ icon_state = "cult" }, /area/awaymission/spacehotel) +"VG" = ( +/obj/effect/decal{ + name = "rock"; + icon = 'icons/turf/mining.dmi'; + icon_state = "rock_side_w" + }, +/obj/machinery/poolcontroller/invisible, +/turf/unsimulated/beach/water/deep/dense, +/area/awaymission/beach) (1,1,1) = {" aa @@ -4842,15 +4842,15 @@ aa dw dk dk -dH -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -4972,15 +4972,15 @@ aa dw dk dk -dH -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -5102,15 +5102,15 @@ aa dw dk dk -dH -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -5232,15 +5232,15 @@ aa dx dk dk -dH -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -5363,14 +5363,14 @@ aa dw dk dk -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -5493,14 +5493,14 @@ aa dw dk dk -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -5623,14 +5623,14 @@ aa dw dk dk -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -5753,14 +5753,14 @@ dy dk dk dF -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -5883,14 +5883,14 @@ dw dk dk dF -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -6013,14 +6013,14 @@ dk dk dF dF -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -6143,14 +6143,14 @@ dk dF dF dF -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -6273,14 +6273,14 @@ dk dF dF dF -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -6403,14 +6403,14 @@ dk dk dF dF -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -6533,14 +6533,14 @@ dw dk dk dF -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -6663,14 +6663,14 @@ dw dk dk dF -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -6793,14 +6793,14 @@ dw dk dk dF -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -6923,14 +6923,14 @@ dx dk dk dF -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -7053,14 +7053,14 @@ aa dw dk dk -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -7183,14 +7183,14 @@ aa dw dk dk -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -7313,14 +7313,14 @@ aa dw dk dk -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -7443,14 +7443,14 @@ aa dw dk dk -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -7573,14 +7573,14 @@ aa dw dk dk -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -7703,14 +7703,14 @@ aa dw dk dk -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -10564,7 +10564,7 @@ dC dG dB dB -dB +VG ah ah ah @@ -13274,24 +13274,24 @@ ad ad ad ad -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -13404,24 +13404,24 @@ ad ad ad ad -bD -bD -bD +ad +ad +ad bL cq cq cE cO -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -13534,8 +13534,8 @@ ad ad ad ad -bD -bD +ad +ad bL bV bV @@ -13544,14 +13544,14 @@ bV cq cE cO -bD -bD -bD -bD -bD -bD -bD -bD +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -13664,7 +13664,7 @@ ad ad ad ad -bD +ad bL bV bV @@ -13674,14 +13674,14 @@ bV bV cV cO -bD -bD -bD -bD -bD -bD -bD -bD +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -13794,7 +13794,7 @@ ad ad ad ad -bD +ad bM bV cf @@ -13805,15 +13805,15 @@ cf bV cE cO -bD -bD -bD -bD -bD -bD -bD -bD -bD +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -13924,7 +13924,7 @@ ad ad ad ad -bD +ad bM bV bV @@ -13935,15 +13935,15 @@ bV bV cV cO -bD +ad bL dd dd cE cO -bD -bD -bD +ad +ad +ad dJ dL cO @@ -14054,7 +14054,7 @@ ad ad ad ad -bD +ad bN bV bV @@ -14068,7 +14068,7 @@ dd dd cP cO -bD +ad dE cO bL @@ -14184,8 +14184,8 @@ ad ad ad ad -bD -bD +ad +ad bM bV bV @@ -14195,15 +14195,15 @@ bV bV cV cO -bD -bD -bD -bD +ad +ad +ad +ad bN dd cP cO -bD +ad dJ dN cO @@ -14314,8 +14314,8 @@ ad ad ad ad -bD -bD +ad +ad bM cf bV @@ -14325,15 +14325,15 @@ cf bV cP cO -bD -bD -bD -bD -bD -bD -bD -bD -bD +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -14444,8 +14444,8 @@ ad ad ad ad -bD -bD +ad +ad bM bV bV @@ -14454,16 +14454,16 @@ bV bV cV cO -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -14574,8 +14574,8 @@ ad ad ad ad -bD -bD +ad +ad bN cg cg @@ -14584,16 +14584,16 @@ bV bV cP cO -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -14704,26 +14704,26 @@ ad ad ad ad -bD -bD -bD -bD -bD +ad +ad +ad +ad +ad bN cg cP cO -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -14834,26 +14834,26 @@ ad ad ad ad -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index aa33ac4e65f..7a43bfc098b 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -12566,6 +12566,10 @@ /obj/effect/landmark/ai_multicam_room, /turf/unsimulated/ai_visible, /area/ai_multicam_room) +"Qt" = ( +/obj/machinery/poolcontroller/invisible, +/turf/unsimulated/beach/water, +/area/ninja/holding) "QE" = ( /obj/structure/chair/sofa/right, /turf/simulated/shuttle/floor{ @@ -54450,7 +54454,7 @@ fI fH fH he -hv +Qt fg aN aN diff --git a/_maps/map_files/templates/spacehotel/s_01.dmm b/_maps/map_files/templates/spacehotel/s_01.dmm index f7c6ba629c6..f97f6613f07 100644 --- a/_maps/map_files/templates/spacehotel/s_01.dmm +++ b/_maps/map_files/templates/spacehotel/s_01.dmm @@ -141,6 +141,10 @@ icon_state = "freezerfloor" }, /area/template_noop) +"K" = ( +/obj/machinery/poolcontroller/invisible, +/turf/unsimulated/beach/water, +/area/template_noop) (1,1,1) = {" a @@ -153,7 +157,7 @@ a "} (2,1,1) = {" a -b +K b l o diff --git a/_maps/map_files/templates/spacehotel/s_02.dmm b/_maps/map_files/templates/spacehotel/s_02.dmm index 5aa78f57470..c3ee3c4a727 100644 --- a/_maps/map_files/templates/spacehotel/s_02.dmm +++ b/_maps/map_files/templates/spacehotel/s_02.dmm @@ -142,6 +142,10 @@ icon_state = "freezerfloor" }, /area/template_noop) +"O" = ( +/obj/machinery/poolcontroller/invisible, +/turf/unsimulated/beach/water, +/area/template_noop) (1,1,1) = {" a @@ -154,7 +158,7 @@ a "} (2,1,1) = {" a -b +O b l o diff --git a/_maps/map_files/templates/spacehotel/s_04.dmm b/_maps/map_files/templates/spacehotel/s_04.dmm index 564246a2854..81c1306da96 100644 --- a/_maps/map_files/templates/spacehotel/s_04.dmm +++ b/_maps/map_files/templates/spacehotel/s_04.dmm @@ -190,6 +190,10 @@ icon_state = "floor4" }, /area/template_noop) +"X" = ( +/obj/machinery/poolcontroller/invisible, +/turf/unsimulated/beach/water, +/area/template_noop) (1,1,1) = {" a @@ -202,7 +206,7 @@ a "} (2,1,1) = {" a -b +X b l o diff --git a/_maps/map_files/templates/spacehotel/s_05.dmm b/_maps/map_files/templates/spacehotel/s_05.dmm index 62c82037700..1ff9546e265 100644 --- a/_maps/map_files/templates/spacehotel/s_05.dmm +++ b/_maps/map_files/templates/spacehotel/s_05.dmm @@ -129,6 +129,10 @@ icon_state = "freezerfloor" }, /area/template_noop) +"Z" = ( +/obj/machinery/poolcontroller/invisible, +/turf/unsimulated/beach/water, +/area/template_noop) (1,1,1) = {" a @@ -141,7 +145,7 @@ a "} (2,1,1) = {" a -b +Z b k n diff --git a/_maps/map_files/templates/spacehotel/s_06.dmm b/_maps/map_files/templates/spacehotel/s_06.dmm index fa839217019..03a1e7e9e99 100644 --- a/_maps/map_files/templates/spacehotel/s_06.dmm +++ b/_maps/map_files/templates/spacehotel/s_06.dmm @@ -131,6 +131,10 @@ icon_state = "freezerfloor" }, /area/template_noop) +"X" = ( +/obj/machinery/poolcontroller/invisible, +/turf/unsimulated/beach/water, +/area/template_noop) (1,1,1) = {" a @@ -143,7 +147,7 @@ a "} (2,1,1) = {" a -b +X b m p diff --git a/code/game/machinery/poolcontroller.dm b/code/game/machinery/poolcontroller.dm index 17fae9df6f6..0d6f76aad38 100644 --- a/code/game/machinery/poolcontroller.dm +++ b/code/game/machinery/poolcontroller.dm @@ -20,13 +20,36 @@ var/list/linkedmist = list() //Used to keep track of created mist var/deep_water = FALSE //set to 1 to drown even standing people +/obj/machinery/poolcontroller/invisible + invisibility = INVISIBILITY_MAXIMUM + name = "Water Controller" + desc = "An invisible water controller. Players shouldn't see this." -/obj/machinery/poolcontroller/New() //This proc automatically happens on world start +/obj/machinery/poolcontroller/invisible/sea + name = "Sea Controller" + desc = "A controller for the underwater portion of the sea. Players shouldn't see this." + deep_water = TRUE + +/obj/machinery/poolcontroller/Initialize(mapload) + var/contents_loop = linked_area if(!linked_area) - for(var/turf/simulated/floor/beach/water/W in range(srange,src)) //Search for /turf/simulated/floor/beach/water in the range of var/srange - linkedturfs += W //Add found pool turfs to the central list. - W.linkedcontroller = src // And add the linked controller to itself. - ..() //Changed to call parent as per MarkvA's recommendation + contents_loop = range(srange, src) + + for(var/turf/T in contents_loop) + if(istype(T, /turf/simulated/floor/beach/water)) + var/turf/simulated/floor/beach/water/W = T + W.linkedcontroller = src + linkedturfs += T + else if(istype(T, /turf/unsimulated/beach/water)) + var/turf/unsimulated/beach/water/W = T + W.linkedcontroller = src + linkedturfs += T + + . = ..() + +/obj/machinery/poolcontroller/invisible/Initialize(mapload) + linked_area = get_area(src) + . = ..() /obj/machinery/poolcontroller/emag_act(user as mob) //Emag_act, this is called when it is hit with a cryptographic sequencer. if(!emagged) //If it is not already emagged, emag it. @@ -190,20 +213,6 @@ return 1 -/obj/machinery/poolcontroller/seacontroller - invisibility = 101 - unacidable = 1 - name = "Sea Controller" - desc = "A controller for the underwater portion of the sea. Players shouldn't see this." - deep_water = TRUE //deep sea is deep water - -/obj/machinery/poolcontroller/seacontroller/Initialize() - linked_area = get_area(src) - for(var/turf/unsimulated/beach/water/W in linked_area) - linkedturfs += W //Add found pool turfs to the central list. - W.linkedcontroller = src // And add the linked controller to itself. - ..() - #undef FRIGID #undef COOL #undef NORMAL diff --git a/code/game/turfs/simulated/floor/asteroid.dm b/code/game/turfs/simulated/floor/asteroid.dm index bae38df854a..43d77bd39be 100644 --- a/code/game/turfs/simulated/floor/asteroid.dm +++ b/code/game/turfs/simulated/floor/asteroid.dm @@ -18,9 +18,6 @@ if(prob(floor_variance)) icon_state = "[environment_type][rand(0,12)]" -/turf/simulated/floor/plating/asteroid/try_replace_tile(obj/item/stack/tile/T, mob/user, params) - return - /turf/simulated/floor/plating/asteroid/burn_tile() return diff --git a/code/game/turfs/simulated/floor/mineral.dm b/code/game/turfs/simulated/floor/mineral.dm index 92d4c8811ed..a801fd450c5 100644 --- a/code/game/turfs/simulated/floor/mineral.dm +++ b/code/game/turfs/simulated/floor/mineral.dm @@ -254,6 +254,3 @@ /turf/simulated/floor/plating/abductor2/burn_tile() return //unburnable - -/turf/simulated/floor/plating/abductor2/try_replace_tile(obj/item/stack/tile/T, mob/user, params) - return \ No newline at end of file diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm index de1e61039e7..d1d09f27b67 100644 --- a/code/game/turfs/simulated/floor/misc_floor.dm +++ b/code/game/turfs/simulated/floor/misc_floor.dm @@ -67,10 +67,6 @@ mouse_opacity = MOUSE_OPACITY_TRANSPARENT var/obj/machinery/poolcontroller/linkedcontroller = null -/turf/simulated/floor/beach/water/pry_tile(obj/item/C, mob/user, silent = FALSE) - return //cannot pry off tiles of water - - /turf/simulated/floor/beach/water/New() ..() var/image/overlay_image = image('icons/misc/beach.dmi', icon_state = "water5", layer = ABOVE_MOB_LAYER) diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index 438240ad503..ee53cd0ca35 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -2,7 +2,7 @@ name = "plating" icon_state = "plating" icon = 'icons/turf/floors/plating.dmi' - intact = 0 + intact = FALSE floor_tile = null broken_states = list("damaged1", "damaged2", "damaged3", "damaged4", "damaged5") burnt_states = list("floorscorched1", "floorscorched2") @@ -103,7 +103,7 @@ /turf/simulated/floor/engine/attack_hand(mob/user as mob) user.Move_Pulled(src) -/turf/simulated/floor/engine/try_replace_tile(obj/item/stack/tile/T, mob/user, params) +/turf/simulated/floor/engine/pry_tile(obj/item/C, mob/user, silent = FALSE) return /turf/simulated/floor/engine/attackby(obj/item/C as obj, mob/user as mob, params) @@ -224,7 +224,7 @@ /turf/simulated/floor/snow/ex_act(severity) return -/turf/simulated/floor/snow/try_replace_tile(obj/item/stack/tile/T, mob/user, params) +/turf/simulated/floor/snow/pry_tile(obj/item/C, mob/user, silent = FALSE) return /turf/simulated/floor/plating/metalfoam @@ -243,12 +243,10 @@ if(MFOAM_IRON) icon_state = "ironfoam" -/turf/simulated/floor/plating/metalfoam/try_replace_tile(obj/item/stack/tile/T, mob/user, params) - return - /turf/simulated/floor/plating/metalfoam/attackby(var/obj/item/C, mob/user, params) if(..()) - return 1 + return TRUE + if(istype(C) && C.force) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) From f634b760c2cc104598b2f101fb658e5b12ece977 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Thu, 6 Jun 2019 00:12:35 +0200 Subject: [PATCH 24/38] Make sure the beach can't be pried up --- code/game/turfs/simulated/floor/misc_floor.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm index d1d09f27b67..ddf71b96798 100644 --- a/code/game/turfs/simulated/floor/misc_floor.dm +++ b/code/game/turfs/simulated/floor/misc_floor.dm @@ -43,6 +43,9 @@ name = "beach" icon = 'icons/misc/beach.dmi' +/turf/simulated/floor/beach/pry_tile(obj/item/C, mob/user, silent = FALSE) + return + /turf/simulated/floor/beach/sand name = "sand" icon_state = "sand" From 2171f97ed72d2a3c50e3f2e1dde6f73ca8b7bb3b Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Thu, 6 Jun 2019 01:35:58 +0200 Subject: [PATCH 25/38] Path fix --- _maps/map_files/RandomZLevels/spacehotel.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_maps/map_files/RandomZLevels/spacehotel.dmm b/_maps/map_files/RandomZLevels/spacehotel.dmm index e24fa45ca52..541156ddc57 100644 --- a/_maps/map_files/RandomZLevels/spacehotel.dmm +++ b/_maps/map_files/RandomZLevels/spacehotel.dmm @@ -1616,7 +1616,7 @@ requires_power = 0 }) "cR" = ( -/obj/machinery/poolcontroller/seacontroller, +/obj/machinery/poolcontroller/invisible/sea, /turf/unsimulated/wall/metal, /area/awaymission/undersea{ requires_power = 0 From eb9ff995429da4d1479f3bbefe8c79956ea7542b Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Thu, 6 Jun 2019 01:36:29 +0200 Subject: [PATCH 26/38] Another path fix --- _maps/map_files/RandomZLevels/beach.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_maps/map_files/RandomZLevels/beach.dmm b/_maps/map_files/RandomZLevels/beach.dmm index 2f83199671c..4544e3830d8 100644 --- a/_maps/map_files/RandomZLevels/beach.dmm +++ b/_maps/map_files/RandomZLevels/beach.dmm @@ -6,7 +6,7 @@ /turf/unsimulated/beach/water/deep, /area/awaymission/undersea) "ac" = ( -/obj/machinery/poolcontroller/seacontroller, +/obj/machinery/poolcontroller/invisible/sea, /turf/unsimulated/beach/water/deep, /area/awaymission/undersea) "ad" = ( From 3381aaf287cf87ee9ece8b84d0f296cc6c11f0f5 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Thu, 6 Jun 2019 02:16:52 +0200 Subject: [PATCH 27/38] Anchor ash flora --- code/modules/mining/lavaland/ash_flora.dm | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm index 17887b8eae7..ab714c6f1a6 100644 --- a/code/modules/mining/lavaland/ash_flora.dm +++ b/code/modules/mining/lavaland/ash_flora.dm @@ -4,6 +4,7 @@ icon_state = "l_mushroom" name = "large mushrooms" desc = "A number of large mushrooms, covered in a faint layer of ash and what can only be spores." + anchored = TRUE var/harvested_name = "shortened mushrooms" var/harvested_desc = "Some quickly regrowing mushrooms, formerly known to be quite large." var/needs_sharp_harvest = TRUE @@ -26,17 +27,6 @@ if(prob(15)) harvest(null, TRUE) -/obj/structure/flora/ash/ex_act(severity, target) - switch(severity) - if(1) - qdel(src) - if(2) - if(prob(80)) - qdel(src) - if(3) - if(prob(50)) - qdel(src) - /obj/structure/flora/ash/proc/harvest(user, no_drop) if(harvested) return 0 From 10ef2311ab0b5283422da0ba63783ab97430e1e2 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Thu, 6 Jun 2019 00:06:20 -0400 Subject: [PATCH 28/38] Automatic changelog generation for PR #11664 [ci skip] --- html/changelogs/AutoChangeLog-pr-11664.yml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-11664.yml diff --git a/html/changelogs/AutoChangeLog-pr-11664.yml b/html/changelogs/AutoChangeLog-pr-11664.yml new file mode 100644 index 00000000000..8acfb84a4f9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11664.yml @@ -0,0 +1,21 @@ +author: "Markolie" +delete-after: True +changes: + - rscadd: "Portals can now be activated by clicking on them with or without an object. Ghosts can now also click on them to be taken to their destination." + - rscadd: "Portals now warn admins when they are used to teleport megafauna." + - tweak: "The singularity can now eat basalt and chasms on Lavaland. They get turned into lava." + - bugfix: "AI swarmers will no longer get stuck on effects (such as blood)." + - bugfix: "Fixed the spectral blade turning all ghosts visible." + - bugfix: "Fixed a runtime with assigning outfits to mindless mobs." + - bugfix: "Fixed certain alarms triggering despite being outside of station contact and the Syndicate base still triggering fire alarms." + - bugfix: "Fixed being unable to put the wormhole jaunter in the belt slot." + - bugfix: "Fixed the disk compartmentalizer not accepting disks." + - bugfix: "Gutlunches and Gubbucks will now reproduce properly." + - bugfix: "The necropolis chest cult clothing drop no longer spawns with a cult hood as well, as that's part of the suit itself." + - bugfix: "Goliath steaks can now be eaten properly." + - bugfix: "Fixed a stray light on the beach ruin." + - bugfix: "Lavaland ruins should no longer spawn on the Labor Camp." + - bugfix: "Ancient goliaths will now properly randomly spawn tentacles." + - bugfix: "The labor camp will now spawn properly with a processing console." + - bugfix: "Water turfs in the beach ruin (and other water turfs that previously didn't do so) will now properly apply water to you." + - bugfix: "Ash flora is now anchored." From cbce925372e1c2881c73b8b5daef37099985a691 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Thu, 6 Jun 2019 06:49:08 +0200 Subject: [PATCH 29/38] Fix gutlunches not eating --- .../modules/mob/living/simple_animal/hostile/mining/gutlunch.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm b/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm index d73fe3ca77c..6e5c840a401 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm @@ -64,7 +64,7 @@ ..() /mob/living/simple_animal/hostile/asteroid/gutlunch/AttackingTarget() - if(is_type_in_list(target, wanted_objects)) //we eats + if(is_type_in_typecache(target, wanted_objects)) //we eats udder.generateMilk() regenerate_icons() visible_message("[src] slurps up [target].") From 250ca032c42c540cadf7b638edaeb858429e4272 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Thu, 6 Jun 2019 17:14:34 +0200 Subject: [PATCH 30/38] Tesla wormhole fix --- code/game/objects/effects/portals.dm | 12 +++++++++--- code/modules/events/wormholes.dm | 14 +++++++------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index a4020af9d0d..691ed994875 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -79,14 +79,20 @@ user.forceMove(get_turf(src)) return TRUE -/obj/effect/portal/proc/teleport(atom/movable/M, force = FALSE) +/obj/effect/portal/proc/can_teleport(atom/movable/M) + . = TRUE + if(!istype(M)) - return FALSE + . = FALSE if(!M.simulated || iseffect(M)) - return FALSE + . = FALSE if(M.anchored && ismecha(M)) + . = FALSE + +/obj/effect/portal/proc/teleport(atom/movable/M) + if(!can_teleport(M)) return FALSE if(!target) diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm index c92ec910cdc..811eed6b9de 100644 --- a/code/modules/events/wormholes.dm +++ b/code/modules/events/wormholes.dm @@ -41,14 +41,14 @@ icon_state = "anom" failchance = 0 +/obj/effect/portal/wormhole/can_teleport(atom/movable/M) + . = ..() + + if(istype(M, /obj/singularity)) + . = FALSE + /obj/effect/portal/wormhole/teleport(atom/movable/M) - if(!istype(M)) - return FALSE - - if(!M.simulated || iseffect(M)) - return FALSE - - if(M.anchored && ismecha(M)) + if(!can_teleport(M)) return FALSE var/turf/target From 5110112c588b54d8a9a25254ac831c03834de1af Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Thu, 6 Jun 2019 18:57:17 +0200 Subject: [PATCH 31/38] Fix honkbot construction --- code/modules/mob/living/simple_animal/bot/construction.dm | 8 ++++---- code/modules/mob/living/simple_animal/bot/honkbot.dm | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm index 77eb74e5696..3ad7c58df8e 100644 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ b/code/modules/mob/living/simple_animal/bot/construction.dm @@ -594,7 +594,7 @@ var/robot_arm = /obj/item/robot_parts/l_arm qdel(src) /obj/item/honkbot_arm_assembly - name = "incomplete honkbot assembly." + name = "incomplete honkbot assembly" desc = "A clown box with a robot arm permanently grafted to it." icon = 'icons/obj/aibots.dmi' icon_state = "honkbot_arm" @@ -618,15 +618,15 @@ var/robot_arm = /obj/item/robot_parts/l_arm if(!user.unEquip(W)) return build_step++ - to_chat(user, "You add the bikehorn to [src]! Honk!") + to_chat(user, "You add the bikehorn to [src] Honk!") desc = "A clown box with a robot arm and a bikehorn permanently grafted to it. It needs a trombone to be finished" qdel(W) else if(build_step == 2) if(istype(W, /obj/item/instrument/trombone)) if(!user.unEquip(W)) return - to_chat(user, "You add the trombone to [src]! Heeeenk! ") + to_chat(user, "You add the trombone to [src]! Heeeenk!") qdel(W) - var/mob/living/simple_animal/bot/honkbot/A = new /mob/living/simple_animal/bot/honkbot(T) + var/mob/living/simple_animal/bot/honkbot/A = new /mob/living/simple_animal/bot/honkbot(get_turf(src)) A.robot_arm = robot_arm qdel(src) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm index 958f493e309..45b10950669 100644 --- a/code/modules/mob/living/simple_animal/bot/honkbot.dm +++ b/code/modules/mob/living/simple_animal/bot/honkbot.dm @@ -37,7 +37,7 @@ . = ..() update_icon() auto_patrol = TRUE - var/datum/job/clown/J = new/datum/job/clown + var/datum/job/clown/J = new /datum/job/clown() access_card.access += J.get_access() prev_access = access_card.access From f7c96702f20db2d81b54838e378a6a4a737546de Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Fri, 7 Jun 2019 04:13:53 +0200 Subject: [PATCH 32/38] Fix exclamation point --- code/modules/mob/living/simple_animal/bot/construction.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm index 3ad7c58df8e..5feebb53059 100644 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ b/code/modules/mob/living/simple_animal/bot/construction.dm @@ -618,7 +618,7 @@ var/robot_arm = /obj/item/robot_parts/l_arm if(!user.unEquip(W)) return build_step++ - to_chat(user, "You add the bikehorn to [src] Honk!") + to_chat(user, "You add the bikehorn to [src]! Honk!") desc = "A clown box with a robot arm and a bikehorn permanently grafted to it. It needs a trombone to be finished" qdel(W) else if(build_step == 2) From 8026fcbd3ccc7c4321dbaa68f7926c45cb66d622 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Thu, 6 Jun 2019 23:13:21 -0400 Subject: [PATCH 33/38] Automatic changelog generation for PR #11688 [ci skip] --- html/changelogs/AutoChangeLog-pr-11688.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-11688.yml diff --git a/html/changelogs/AutoChangeLog-pr-11688.yml b/html/changelogs/AutoChangeLog-pr-11688.yml new file mode 100644 index 00000000000..638a332682c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11688.yml @@ -0,0 +1,6 @@ +author: "Markolie" +delete-after: True +changes: + - bugfix: "Gutlunches will now eat properly." + - bugfix: "The tesla can no longer travel through wormholes." + - bugfix: "Fixed an issue with honkbot construction." From 23666534dcfa9c8e074b77f11c83261243a4daf7 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Fri, 14 Jun 2019 01:54:07 -0400 Subject: [PATCH 34/38] Fixes an oversight in laz injectors --- code/modules/mining/equipment_locker.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 10823051563..9d6ca608759 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -905,6 +905,7 @@ throw_range = 5 var/loaded = 1 var/malfunctioning = 0 + var/revive_type = SENTIENCE_ORGANIC //So you can't revive boss monsters or robots with it /obj/item/lazarus_injector/afterattack(atom/target, mob/user, proximity_flag) if(!loaded) @@ -912,6 +913,9 @@ if(istype(target, /mob/living) && proximity_flag) if(istype(target, /mob/living/simple_animal)) var/mob/living/simple_animal/M = target + if(M.sentience_type != revive_type) + to_chat(user, "[src] does not work on this sort of creature.") + return if(M.stat == DEAD) M.faction = list("neutral") M.revive() From 570198993f8c7591ab1c3d0956d4145862ddb697 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Fri, 14 Jun 2019 02:17:04 -0400 Subject: [PATCH 35/38] Automatic changelog generation for PR #11723 [ci skip] --- html/changelogs/AutoChangeLog-pr-11723.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-11723.yml diff --git a/html/changelogs/AutoChangeLog-pr-11723.yml b/html/changelogs/AutoChangeLog-pr-11723.yml new file mode 100644 index 00000000000..65b4a72a783 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11723.yml @@ -0,0 +1,4 @@ +author: "Fethas" +delete-after: True +changes: + - bugfix: "Fixes an oversight from the lavaland port invovling Laz injectors and sentience typing that didn't carry over from tg." From 84a6c8cc474f64365fccb7fac06e408d9b5d60ea Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Mon, 24 Jun 2019 06:31:26 -0400 Subject: [PATCH 36/38] Automatic changelog generation for PR #11447 [ci skip] --- html/changelogs/AutoChangeLog-pr-11447.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-11447.yml diff --git a/html/changelogs/AutoChangeLog-pr-11447.yml b/html/changelogs/AutoChangeLog-pr-11447.yml new file mode 100644 index 00000000000..c1376becfc4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11447.yml @@ -0,0 +1,4 @@ +author: "Kyep" +delete-after: True +changes: + - bugfix: "Disarming/grabbing a door with IDSCAN disabled no longer results in a can_admin_interact runtime error." From 314b989fe9e978cfcaf200b29592ce85ef0324b3 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Mon, 24 Jun 2019 06:31:52 -0400 Subject: [PATCH 37/38] Automatic changelog generation for PR #11586 [ci skip] --- html/changelogs/AutoChangeLog-pr-11586.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-11586.yml diff --git a/html/changelogs/AutoChangeLog-pr-11586.yml b/html/changelogs/AutoChangeLog-pr-11586.yml new file mode 100644 index 00000000000..871d5cf3d31 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11586.yml @@ -0,0 +1,4 @@ +author: "iantine" +delete-after: True +changes: + - rscadd: "Skrell *warble emote" From 9fd8bcae68af1acdf5782a7fb52aea1be45a8cff Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Mon, 24 Jun 2019 08:52:47 -0400 Subject: [PATCH 38/38] Automatic changelog generation for PR #11610 [ci skip] --- html/changelogs/AutoChangeLog-pr-11610.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-11610.yml diff --git a/html/changelogs/AutoChangeLog-pr-11610.yml b/html/changelogs/AutoChangeLog-pr-11610.yml new file mode 100644 index 00000000000..a8b120b5cb3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11610.yml @@ -0,0 +1,4 @@ +author: "Arkatos" +delete-after: True +changes: + - imageadd: "Added new Boo! spell icon"