diff --git a/code/__HELPERS/chat.dm b/code/__HELPERS/chat.dm index f7382e151854..20d1a45b31cc 100644 --- a/code/__HELPERS/chat.dm +++ b/code/__HELPERS/chat.dm @@ -1,11 +1,12 @@ /** - * Sends a message to TGS chat channels. + * Asynchronously sends a message to TGS chat channels. * - * message - The message to send. + * message - The [/datum/tgs_message_content] to send. * channel_tag - Required. If "", the message with be sent to all connected (Game-type for TGS3) channels. Otherwise, it will be sent to TGS4 channels with that tag (Delimited by ','s). * admin_only - Determines if this communication can only be sent to admin only channels. */ -/proc/send2chat(message, channel_tag, admin_only = FALSE) +/proc/send2chat(datum/tgs_message_content/message, channel_tag, admin_only = FALSE) + set waitfor = FALSE if(channel_tag == null || !world.TgsAvailable()) return diff --git a/code/controllers/subsystem/interior.dm b/code/controllers/subsystem/interior.dm index 8fb7ffbfeee7..8abc3179f191 100644 --- a/code/controllers/subsystem/interior.dm +++ b/code/controllers/subsystem/interior.dm @@ -51,10 +51,16 @@ SUBSYSTEM_DEF(interior) if(!isturf(loc)) loc = get_turf(loc) - var/datum/weakref/reservation = SSmapping.used_turfs[loc] + var/datum/weakref/reservation_weakref = SSmapping.used_turfs[loc] + + if(!reservation_weakref) + return + + var/datum/turf_reservation/interior/reservation = reservation_weakref.resolve() if(!istype(reservation)) return FALSE + return TRUE #undef INTERIOR_BORDER_SIZE diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 913e5dcd50d3..0f4a63ff65e8 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -61,6 +61,11 @@ SUBSYSTEM_DEF(mapping) if(MC.perf_mode) GLOB.perf_flags |= MC.perf_mode + if(configs[GROUND_MAP]) + send2chat(new /datum/tgs_message_content("<@&[CONFIG_GET(string/new_round_alert_role_id)]> Round restarted! Map is [configs[GROUND_MAP].map_name]"), CONFIG_GET(string/new_round_alert_channel)) + else + send2chat(new /datum/tgs_message_content("<@&[CONFIG_GET(string/new_round_alert_role_id)]> Round started!"), CONFIG_GET(string/new_round_alert_channel)) + return SS_INIT_SUCCESS /datum/controller/subsystem/mapping/proc/wipe_reservations(wipe_safety_delay = 100) diff --git a/code/game/machinery/fusion_engine.dm b/code/game/machinery/fusion_engine.dm index d7c7cc4c7d18..0e5f8142c2be 100644 --- a/code/game/machinery/fusion_engine.dm +++ b/code/game/machinery/fusion_engine.dm @@ -356,6 +356,11 @@ else . += SPAN_INFO("There is no fuel cell in the receptacle.") +/obj/structure/machinery/power/fusion_engine/ex_act(severity) + if(overloaded && severity >= EXPLOSION_THRESHOLD_MLOW) + set_overloading(FALSE) + return + /obj/structure/machinery/power/fusion_engine/update_icon() switch(buildstate) if(0) diff --git a/code/game/turfs/walls/walls.dm b/code/game/turfs/walls/walls.dm index 6ef0ffbdfec8..77143384e7e7 100644 --- a/code/game/turfs/walls/walls.dm +++ b/code/game/turfs/walls/walls.dm @@ -170,6 +170,9 @@ if (acided_hole) . += SPAN_WARNING("There's a large hole in the wall that could've been caused by some sort of acid.") + if(flags_turf & TURF_ORGANIC) + return // Skip the part below. 'Organic' walls aren't deconstructable with tools. + switch(d_state) if(WALL_STATE_WELD) . += SPAN_INFO("The outer plating is intact. A blowtorch should slice it open.") diff --git a/code/game/world.dm b/code/game/world.dm index d8156547ef76..f68263412715 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -247,16 +247,13 @@ GLOBAL_LIST_INIT(reboot_sfx, file2list("config/reboot_sfx.txt")) shutdown() /world/proc/send_tgs_restart() - if(CONFIG_GET(string/new_round_alert_channel) && CONFIG_GET(string/new_round_alert_role_id)) - if(GLOB.round_statistics) - send2chat("[GLOB.round_statistics.round_name][GLOB.round_id ? " (Round [GLOB.round_id])" : ""] completed!", CONFIG_GET(string/new_round_alert_channel)) - if(SSmapping.next_map_configs) - var/datum/map_config/next_map = SSmapping.next_map_configs[GROUND_MAP] - if(next_map) - send2chat("<@&[CONFIG_GET(string/new_round_alert_role_id)]> Restarting! Next map is [next_map.map_name]", CONFIG_GET(string/new_round_alert_channel)) - else - send2chat("<@&[CONFIG_GET(string/new_round_alert_role_id)]> Restarting!", CONFIG_GET(string/new_round_alert_channel)) - return + if(!CONFIG_GET(string/new_round_alert_channel)) + return + + if(!GLOB.round_statistics) + return + + send2chat(new /datum/tgs_message_content("[GLOB.round_statistics.round_name][GLOB.round_id ? " (Round [GLOB.round_id])" : ""] completed!"), CONFIG_GET(string/new_round_alert_channel)) /world/proc/send_reboot_sound() var/reboot_sound = SAFEPICK(GLOB.reboot_sfx) diff --git a/code/modules/admin/chat_commands.dm b/code/modules/admin/chat_commands.dm index 37ffcd114e91..c5036e7ca1f7 100644 --- a/code/modules/admin/chat_commands.dm +++ b/code/modules/admin/chat_commands.dm @@ -8,7 +8,7 @@ /datum/tgs_chat_command/sdql/Run(datum/tgs_chat_user/sender, params) var/list/results = HandleUserlessSDQL(sender.friendly_name, params) if(!results) - return "Query produced no output" + return new /datum/tgs_message_content("Query produced no output") var/list/text_res = results.Copy(1, 3) var/list/refs = length(results) > 3 ? results.Copy(4) : null - return "[text_res.Join("\n")][refs ? "\nRefs: [refs.Join(" ")]" : ""]" + return new /datum/tgs_message_content("[text_res.Join("\n")][refs ? "\nRefs: [refs.Join(" ")]" : ""]") diff --git a/code/modules/cm_aliens/structures/egg.dm b/code/modules/cm_aliens/structures/egg.dm index eda9803c8784..edb86c204558 100644 --- a/code/modules/cm_aliens/structures/egg.dm +++ b/code/modules/cm_aliens/structures/egg.dm @@ -8,7 +8,7 @@ icon_state = "Egg Growing" density = FALSE anchored = TRUE - layer = LYING_BETWEEN_MOB_LAYER //to stop hiding eggs under corpses + layer = LYING_BETWEEN_MOB_LAYER health = 80 plane = GAME_PLANE var/list/egg_triggers = list() diff --git a/code/modules/mob/living/carbon/xenomorph/Evolution.dm b/code/modules/mob/living/carbon/xenomorph/Evolution.dm index af6be8265cc0..49d73e71a241 100644 --- a/code/modules/mob/living/carbon/xenomorph/Evolution.dm +++ b/code/modules/mob/living/carbon/xenomorph/Evolution.dm @@ -105,8 +105,8 @@ evolving = TRUE var/level_to_switch_to = get_vision_level() - if(!do_after(src, 2.5 SECONDS, INTERRUPT_INCAPACITATED, BUSY_ICON_HOSTILE)) // Can evolve while moving - to_chat(src, SPAN_WARNING("You quiver, but nothing happens. Hold still while evolving.")) + if(!do_after(src, 2.5 SECONDS, INTERRUPT_INCAPACITATED|INTERRUPT_CHANGED_LYING, BUSY_ICON_HOSTILE)) // Can evolve while moving, resist or rest to cancel it. + to_chat(src, SPAN_WARNING("You quiver, but nothing happens. Your evolution has ceased for now...")) evolving = FALSE return diff --git a/code/modules/mob/living/carbon/xenomorph/egg_item.dm b/code/modules/mob/living/carbon/xenomorph/egg_item.dm index b9304b33b15a..e4cc7bd39fe0 100644 --- a/code/modules/mob/living/carbon/xenomorph/egg_item.dm +++ b/code/modules/mob/living/carbon/xenomorph/egg_item.dm @@ -102,6 +102,16 @@ to_chat(user, SPAN_XENOWARNING("[src] can only be planted on [lowertext(hive.prefix)]hive weeds.")) return + if(istype(get_area(T), /area/vehicle)) + to_chat(user, SPAN_XENOWARNING("[src] cannot be planted inside a vehicle.")) + return + + for(var/obj/object in T.contents) + var/obj/effect/alien/egg/xeno_egg = /obj/effect/alien/egg + if(object.layer > initial(xeno_egg.layer)) + to_chat(user, SPAN_XENOWARNING("[src] cannot be planted below objects that would obscure it.")) + return + user.visible_message(SPAN_XENONOTICE("[user] starts planting [src]."), SPAN_XENONOTICE("You start planting [src]."), null, 5) var/plant_time = 35 diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index cad5458e80e1..79377d9c0849 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -343,14 +343,23 @@ if(lifeboat.status == LIFEBOAT_LOCKED) to_chat(xeno, SPAN_WARNING("We already wrested away control of this metal bird.")) return XENO_NO_DELAY_ACTION + if(lifeboat.mode == SHUTTLE_CALL) + to_chat(xeno, SPAN_WARNING("Too late, you cannot stop the metal bird mid-flight.")) + return XENO_NO_DELAY_ACTION xeno_attack_delay(xeno) if(do_after(usr, 5 SECONDS, INTERRUPT_ALL, BUSY_ICON_HOSTILE)) - if(lifeboat.status != LIFEBOAT_LOCKED) - lifeboat.status = LIFEBOAT_LOCKED - lifeboat.available = FALSE - lifeboat.set_mode(SHUTTLE_IDLE) - xeno_message(SPAN_XENOANNOUNCE("We have wrested away control of one of the metal birds! They shall not escape!"), 3, xeno.hivenumber) + if(lifeboat.status == LIFEBOAT_LOCKED) + return XENO_NO_DELAY_ACTION + if(lifeboat.mode == SHUTTLE_CALL) + to_chat(xeno, SPAN_WARNING("Too late, you cannot stop the metal bird mid-flight.")) + return XENO_NO_DELAY_ACTION + lifeboat.status = LIFEBOAT_LOCKED + lifeboat.available = FALSE + lifeboat.set_mode(SHUTTLE_IDLE) + var/obj/docking_port/stationary/lifeboat_dock/lifeboat_dock = lifeboat.get_docked() + lifeboat_dock.open_dock() + xeno_message(SPAN_XENOANNOUNCE("We have wrested away control of one of the metal birds! They shall not escape!"), 3, xeno.hivenumber) return XENO_NO_DELAY_ACTION else return ..() diff --git a/code/modules/shuttle/shuttles/crashable/lifeboats.dm b/code/modules/shuttle/shuttles/crashable/lifeboats.dm index 25d1aeb6efb7..415a628be6e5 100644 --- a/code/modules/shuttle/shuttles/crashable/lifeboats.dm +++ b/code/modules/shuttle/shuttles/crashable/lifeboats.dm @@ -102,6 +102,8 @@ /obj/docking_port/stationary/lifeboat_dock/proc/close_dock() var/obj/docking_port/mobile/crashable/lifeboat/docked_shuttle = get_docked() + if(docked_shuttle.status == LIFEBOAT_LOCKED) + return if(docked_shuttle) for(var/obj/structure/machinery/door/airlock/multi_tile/door in docked_shuttle.doors) INVOKE_ASYNC(door, TYPE_PROC_REF(/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/lifeboat, close_and_lock)) diff --git a/html/changelogs/AutoChangeLog-pr-5088.yml b/html/changelogs/AutoChangeLog-pr-5088.yml deleted file mode 100644 index 8634312a2441..000000000000 --- a/html/changelogs/AutoChangeLog-pr-5088.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: "zzzmike" -delete-after: True -changes: - - spellcheck: "tablestun text is more clear that it stuns" - - soundadd: "unequip noise added to uniform, backpack, shoes." - - soundadd: "sound added to tablestun" - - sounddel: "for disarms, whoosh only triggers on stun. otherwise, the miss sound plays" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5154.yml b/html/changelogs/AutoChangeLog-pr-5154.yml deleted file mode 100644 index 4e8d9ab03703..000000000000 --- a/html/changelogs/AutoChangeLog-pr-5154.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "InsaneRed" -delete-after: True -changes: - - balance: "Oppressor tail abduct changed to 15 seconds and lowers the windup to 7 deciseconds" - - balance: " Changes around the punch effect so that instead of having to meet demonic standards, you only need to punch to lower your tail/hook on oppressor." - - bugfix: "You will now automatically punch chest if the target you are aiming at is delimbed instead of doing nothing" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5159.yml b/html/changelogs/AutoChangeLog-pr-5159.yml deleted file mode 100644 index b7fe3f219b02..000000000000 --- a/html/changelogs/AutoChangeLog-pr-5159.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "harryob" -delete-after: True -changes: - - rscdel: "removes a nanoui debug verb that no one has ever used, ever" \ No newline at end of file diff --git a/html/changelogs/archive/2023-12.yml b/html/changelogs/archive/2023-12.yml index bbc0878d8e43..058edaa8a731 100644 --- a/html/changelogs/archive/2023-12.yml +++ b/html/changelogs/archive/2023-12.yml @@ -177,3 +177,35 @@ - balance: PO can remove queens dropship override again. private-tristan: - qol: Gun safety messages now use balloon alerts. +2023-12-09: + InsaneRed: + - balance: Oppressor tail abduct changed to 15 seconds and lowers the windup to + 7 deciseconds + - balance: ' Changes around the punch effect so that instead of having to meet demonic + standards, you only need to punch to lower your tail/hook on oppressor.' + - bugfix: You will now automatically punch chest if the target you are aiming at + is delimbed instead of doing nothing + harryob: + - rscdel: removes a nanoui debug verb that no one has ever used, ever + zzzmike: + - spellcheck: tablestun text is more clear that it stuns + - soundadd: unequip noise added to uniform, backpack, shoes. + - soundadd: sound added to tablestun + - sounddel: for disarms, whoosh only triggers on stun. otherwise, the miss sound + plays +2023-12-10: + Birdtalon: + - bugfix: Resting once again cancels xenomorph evolve. + SabreML: + - bugfix: Fixed resin walls/membranes showing a welder deconstruction hint. + Zonespace27: + - balance: You cannot plant eggs inside vehicles. + - balance: Eggs can no longer be planted on tiles with objects that would obscure + them. + harryob: + - bugfix: xenos can construct in dropships during transport again + ihatethisengine: + - rscadd: locking lifeboats open the docks +2023-12-11: + ihatethisengine: + - bugfix: fusion reactors cannot be destroyed with explosions