From 57ff27c764e0a2835925eab234b93267308cdf9d Mon Sep 17 00:00:00 2001 From: Joshua Kidder <49173900+Metekillot@users.noreply.github.com> Date: Sun, 28 Apr 2024 14:20:06 -0400 Subject: [PATCH 01/22] bug fixes and code refactor for AI, malf or otherwise (#82590) ## About The Pull Request I was trying to fix a bug with ejecting from mechs as malf AI and the more I looked the worse it seemed to get? So I'm putting in this PR with the intent to refactor AI code to not be a Byzantine nightmare of new objects referencing each other incompletely or with buggy behavior. Finished PR for #82579 because I didn't want to clutter the comments with commits of me trying to fix shit with git restore and revert ## Why It's Good For The Game Fixes #81877 Fixes #82524 Mech dominating now just works off (and integrates with) similar code for APC shunting The cores left behind by AIs shunting or controlling mechs now properly reference the AI instead of only the other way around Some of these refactors slightly change how malf works; I think most of it was unintended behavior in the first place, let me know in review if not ## Changelog The code for AIs remoting out of their shell has been refactored. :cl: fix: Mech domination now properly integrates with shunting. fix: Combat upgraded AIs no longer get two buggy malf ability pickers if they also become malfunctioning refactor: Refactored most of the functionality around malf AI shunting, mech control /:cl: --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> --- code/game/objects/structures/ai_core.dm | 26 +++++++++- code/modules/antagonists/malf_ai/malf_ai.dm | 2 + code/modules/mob/living/silicon/ai/ai.dm | 17 +++++-- .../mob/living/silicon/ai/ai_defense.dm | 3 +- code/modules/mob/living/silicon/ai/ai_say.dm | 17 ------- code/modules/mob/living/silicon/ai/death.dm | 4 +- code/modules/power/apc/apc_attack.dm | 14 ++++-- code/modules/power/apc/apc_main.dm | 7 ++- code/modules/power/apc/apc_malf.dm | 33 ++++++------ code/modules/vehicles/mecha/_mecha.dm | 4 +- .../vehicles/mecha/mecha_ai_interaction.dm | 2 + .../vehicles/mecha/mecha_mob_interaction.dm | 50 +++++++++++++------ 12 files changed, 113 insertions(+), 66 deletions(-) diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index 6207a4031c105..5c219aaa4a946 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -12,6 +12,8 @@ var/datum/ai_laws/laws var/obj/item/circuitboard/aicore/circuit var/obj/item/mmi/core_mmi + /// only used in cases of AIs piloting mechs or shunted malf AIs, possible later use cases + var/mob/living/silicon/ai/remote_ai = null /obj/structure/ai_core/Initialize(mapload) . = ..() @@ -58,11 +60,20 @@ update_appearance() /obj/structure/ai_core/Destroy() + if(istype(remote_ai)) + remote_ai.break_core_link() + remote_ai = null QDEL_NULL(circuit) QDEL_NULL(core_mmi) QDEL_NULL(laws) return ..() +/obj/structure/ai_core/take_damage(damage_amount, damage_type, damage_flag, sound_effect, attack_dir, armour_penetration) + . = ..() + if(. > 0 && istype(remote_ai)) + to_chat(remote_ai, span_danger("Your core is under attack!")) + + /obj/structure/ai_core/deactivated icon_state = "ai-empty" anchored = TRUE @@ -157,6 +168,8 @@ return ITEM_INTERACT_SUCCESS /obj/structure/ai_core/attackby(obj/item/tool, mob/living/user, params) + if(remote_ai) + to_chat(remote_ai, span_danger("CORE TAMPERING DETECTED!")) if(!anchored) if(tool.tool_behaviour == TOOL_WELDER) if(state != EMPTY_CORE) @@ -295,8 +308,17 @@ if(tool.tool_behaviour == TOOL_CROWBAR && core_mmi) tool.play_tool_sound(src) balloon_alert(user, "removed [AI_CORE_BRAIN(core_mmi)]") - core_mmi.forceMove(loc) - return + if(remote_ai) + var/mob/living/silicon/ai/remoted_ai = remote_ai + remoted_ai.break_core_link() + if(!IS_MALF_AI(remoted_ai)) + //don't pull back shunted malf AIs + remoted_ai.death(gibbed = TRUE, drop_mmi = FALSE) + ///the drop_mmi param determines whether the MMI is dropped at their current location + ///which in this case would be somewhere else, so we drop their MMI at the core instead + remoted_ai.make_mmi_drop_and_transfer(core_mmi, src) + core_mmi.forceMove(loc) //if they're malf, just drops a blank MMI, or if it's an incomplete shell + return //it drops the mmi that was put in before it was finished if(GLASS_CORE) if(tool.tool_behaviour == TOOL_CROWBAR) diff --git a/code/modules/antagonists/malf_ai/malf_ai.dm b/code/modules/antagonists/malf_ai/malf_ai.dm index d0c39f405d5ad..b76452e6076f3 100644 --- a/code/modules/antagonists/malf_ai/malf_ai.dm +++ b/code/modules/antagonists/malf_ai/malf_ai.dm @@ -159,6 +159,8 @@ to_chat(malf_ai, "Your radio has been upgraded! Use :t to speak on an encrypted channel with Syndicate Agents!") + if(malf_ai.malf_picker) + return malf_ai.add_malf_picker() diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index f759f6a0dc845..dfd9afeec4516 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -41,12 +41,13 @@ var/shunted = FALSE //1 if the AI is currently shunted. Used to differentiate between shunted and ghosted/braindead var/obj/machinery/ai_voicechanger/ai_voicechanger = null // reference to machine that holds the voicechanger var/malfhacking = FALSE // More or less a copy of the above var, so that malf AIs can hack and still get new cyborgs -- NeoFite + /// List of hacked APCs + var/list/hacked_apcs = list() var/malf_cooldown = 0 //Cooldown var for malf modules, stores a worldtime + cooldown var/obj/machinery/power/apc/malfhack var/explosive = FALSE //does the AI explode when it dies? - var/mob/living/silicon/ai/parent var/camera_light_on = FALSE var/list/obj/machinery/camera/lit_cameras = list() @@ -439,6 +440,10 @@ qdel(src) return ai_core +/mob/living/silicon/ai/proc/break_core_link() + to_chat(src, span_danger("Your core has been destroyed!")) + linked_core = null + /mob/living/silicon/ai/proc/make_mmi_drop_and_transfer(obj/item/mmi/the_mmi, the_core) var/mmi_type if(posibrain_inside) @@ -946,6 +951,9 @@ module_picker.ui_interact(owner) /mob/living/silicon/ai/proc/add_malf_picker() + if (malf_picker) + stack_trace("Attempted to give malf AI malf picker to \[[src]\], who already has a malf picker.") + return to_chat(src, "In the top left corner of the screen you will find the Malfunction Modules button, where you can purchase various abilities, from upgraded surveillance to station ending doomsday devices.") to_chat(src, "You are also capable of hacking APCs, which grants you more points to spend on your Malfunction powers. The drawback is that a hacked APC will give you away if spotted by the crew. Hacking an APC takes 60 seconds.") view_core() //A BYOND bug requires you to be viewing your core before your verbs update @@ -1023,13 +1031,16 @@ malf_ai_datum.update_static_data_for_all_viewers() else //combat software AIs use a different UI malf_picker.update_static_data_for_all_viewers() - - apc.malfai = parent || src + if(apc.malfai) // another malf hacked this one; counter-hack! + to_chat(apc.malfai, span_warning("An adversarial subroutine has counter-hacked [apc]!")) + apc.malfai.hacked_apcs -= apc + apc.malfai = src apc.malfhack = TRUE apc.locked = TRUE apc.coverlocked = TRUE apc.flicker_hacked_icon() apc.set_hacked_hud() + hacked_apcs += apc playsound(get_turf(src), 'sound/machines/ding.ogg', 50, TRUE, ignore_walls = FALSE) to_chat(src, "Hack complete. [apc] is now under your exclusive control.") diff --git a/code/modules/mob/living/silicon/ai/ai_defense.dm b/code/modules/mob/living/silicon/ai/ai_defense.dm index 1148b639d0113..a80b84b95aa8a 100644 --- a/code/modules/mob/living/silicon/ai/ai_defense.dm +++ b/code/modules/mob/living/silicon/ai/ai_defense.dm @@ -2,6 +2,7 @@ /mob/living/silicon/ai/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/ai_module)) var/obj/item/ai_module/MOD = W + disconnect_shell() if(!mind) //A player mind is required for law procs to run antag checks. to_chat(user, span_warning("[src] is entirely unresponsive!")) return @@ -137,7 +138,7 @@ return ITEM_INTERACT_SUCCESS balloon_alert(src, "neural network being disconnected...") balloon_alert(user, "disconnecting neural network...") - if(!tool.use_tool(src, user, (stat == DEAD ? 40 SECONDS : 5 SECONDS))) + if(!tool.use_tool(src, user, (stat == DEAD ? 5 SECONDS : 40 SECONDS))) return ITEM_INTERACT_SUCCESS if(IS_MALF_AI(src)) to_chat(user, span_userdanger("The voltage inside the wires rises dramatically!")) diff --git a/code/modules/mob/living/silicon/ai/ai_say.dm b/code/modules/mob/living/silicon/ai/ai_say.dm index 967cbb2b984f8..48b3cdc437350 100644 --- a/code/modules/mob/living/silicon/ai/ai_say.dm +++ b/code/modules/mob/living/silicon/ai/ai_say.dm @@ -1,20 +1,3 @@ -/mob/living/silicon/ai/say( - message, - bubble_type, - list/spans = list(), - sanitize = TRUE, - datum/language/language, - ignore_spam = FALSE, - forced, - filterproof = FALSE, - message_range = 7, - datum/saymode/saymode, - list/message_mods = list(), -) - if(istype(parent) && parent.stat != DEAD) //If there is a defined "parent" AI, it is actually an AI, and it is alive, anything the AI tries to say is said by the parent instead. - return parent.say(arglist(args)) - return ..() - /mob/living/silicon/ai/compose_track_href(atom/movable/speaker, namepart) var/mob/M = speaker.GetSource() if(M) diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm index 03824857c4efc..79e14d649fc38 100644 --- a/code/modules/mob/living/silicon/ai/death.dm +++ b/code/modules/mob/living/silicon/ai/death.dm @@ -1,4 +1,4 @@ -/mob/living/silicon/ai/death(gibbed) +/mob/living/silicon/ai/death(gibbed, drop_mmi = TRUE) if(stat == DEAD) return @@ -33,7 +33,7 @@ ShutOffDoomsdayDevice() - if(gibbed) + if(gibbed && drop_mmi) make_mmi_drop_and_transfer() if(explosive) diff --git a/code/modules/power/apc/apc_attack.dm b/code/modules/power/apc/apc_attack.dm index b57f3465f0d82..acaaac1bd3eec 100644 --- a/code/modules/power/apc/apc_attack.dm +++ b/code/modules/power/apc/apc_attack.dm @@ -110,13 +110,17 @@ return TRUE if(!HAS_SILICON_ACCESS(user)) return TRUE + . = TRUE var/mob/living/silicon/ai/AI = user var/mob/living/silicon/robot/robot = user - if(aidisabled || malfhack && istype(malfai) && ((istype(AI) && (malfai != AI && malfai != AI.parent)) || (istype(robot) && (robot in malfai.connected_robots)))) - if(!loud) - balloon_alert(user, "it's disabled!") - return FALSE - return TRUE + if(istype(AI) || istype(robot)) + if(aidisabled) + . = FALSE + else if(istype(malfai) && (malfai != AI || !(robot in malfai.connected_robots))) + . = FALSE + if (!. && !loud) + balloon_alert(user, "it's disabled!") + return . /obj/machinery/power/apc/proc/set_broken() if(machine_stat & BROKEN) diff --git a/code/modules/power/apc/apc_main.dm b/code/modules/power/apc/apc_main.dm index f9ef22e300240..54c8bec7d1485 100644 --- a/code/modules/power/apc/apc_main.dm +++ b/code/modules/power/apc/apc_main.dm @@ -228,8 +228,11 @@ find_and_hang_on_wall() /obj/machinery/power/apc/Destroy() - if(malfai && operating) - malfai.malf_picker.processing_time = clamp(malfai.malf_picker.processing_time - 10, 0, 1000) + if(malfai) + if(operating) + malfai.malf_picker.processing_time = clamp(malfai.malf_picker.processing_time - 10, 0, 1000) + malfai.hacked_apcs -= src + malfai = null disconnect_from_area() QDEL_NULL(alarm_manager) if(occupier) diff --git a/code/modules/power/apc/apc_malf.dm b/code/modules/power/apc/apc_malf.dm index dee0d95de4daa..55152d8e01d83 100644 --- a/code/modules/power/apc/apc_malf.dm +++ b/code/modules/power/apc/apc_malf.dm @@ -1,7 +1,7 @@ /obj/machinery/power/apc/proc/get_malf_status(mob/living/silicon/ai/malf) if(!istype(malf) || !malf.malf_picker) return APC_AI_NO_MALF - if(malfai != (malf.parent || malf)) + if(malfai != malf) return APC_AI_NO_HACK if(occupier == malf) return APC_AI_HACK_SHUNT_HERE @@ -12,7 +12,7 @@ /obj/machinery/power/apc/proc/malfhack(mob/living/silicon/ai/malf) if(!istype(malf)) return - if(get_malf_status(malf) != 1) + if(get_malf_status(malf) != APC_AI_HACK_NO_SHUNT || get_malf_status(malf) != APC_AI_NO_HACK) return if(malf.malfhacking) to_chat(malf, span_warning("You are already hacking an APC!")) @@ -37,18 +37,16 @@ if(!is_station_level(z)) return malf.ShutOffDoomsdayDevice() - occupier = new /mob/living/silicon/ai(src, malf.laws.copy_lawset(), malf) //DEAR GOD WHY? //IKR???? - occupier.adjustOxyLoss(malf.getOxyLoss()) + occupier = malf + if (isturf(malf.loc)) // create a deactivated AI core if the AI isn't coming from an emergency mech shunt + malf.linked_core = new /obj/structure/ai_core/deactivated + malf.linked_core.remote_ai = malf // note that we do not set the deactivated core's core_mmi.brainmob + malf.forceMove(src) // move INTO the APC, not to its tile if(!findtext(occupier.name, "APC Copy")) occupier.name = "[malf.name] APC Copy" - if(malf.parent) - occupier.parent = malf.parent - else - occupier.parent = malf malf.shunted = TRUE occupier.eyeobj.name = "[occupier.name] (AI Eye)" - if(malf.parent) - qdel(malf) + occupier.eyeobj.forceMove(src.loc) for(var/obj/item/pinpointer/nuke/disk_pinpointers in GLOB.pinpointer_list) disk_pinpointers.switch_mode_to(TRACK_MALF_AI) //Pinpointer will track the shunted AI var/datum/action/innate/core_return/return_action = new @@ -58,12 +56,11 @@ /obj/machinery/power/apc/proc/malfvacate(forced) if(!occupier) return - if(occupier.parent && occupier.parent.stat != DEAD) - occupier.mind.transfer_to(occupier.parent) - occupier.parent.shunted = FALSE - occupier.parent.setOxyLoss(occupier.getOxyLoss()) - occupier.parent.cancel_camera() - qdel(occupier) + if(occupier.linked_core) + occupier.shunted = FALSE + occupier.forceMove(occupier.linked_core.loc) + qdel(occupier.linked_core) + occupier.cancel_camera() return to_chat(occupier, span_danger("Primary core damaged, unable to return core processes.")) if(forced) @@ -89,7 +86,7 @@ if(!occupier.mind || !occupier.client) to_chat(user, span_warning("[occupier] is either inactive or destroyed!")) return FALSE - if(!occupier.parent.stat) + if(occupier.linked_core) //if they have an active linked_core, they can't be transferred from an APC to_chat(user, span_warning("[occupier] is refusing all attempts at transfer!") ) return FALSE if(transfer_in_progress) @@ -127,7 +124,7 @@ to_chat(occupier, span_notice("Transfer complete! You've been stored in [user]'s [card.name].")) occupier.forceMove(card) card.AI = occupier - occupier.parent.shunted = FALSE + occupier.shunted = FALSE occupier.cancel_camera() occupier = null transfer_in_progress = FALSE diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm index 9d059ba7e2270..ca1728f3fc043 100644 --- a/code/modules/vehicles/mecha/_mecha.dm +++ b/code/modules/vehicles/mecha/_mecha.dm @@ -274,7 +274,7 @@ /// and gets deleted with the mech. However, they do remain in .contents var/list/potential_occupants = contents | occupants for(var/mob/buggy_ejectee in potential_occupants) - mob_exit(buggy_ejectee, silent = TRUE) + mob_exit(buggy_ejectee, silent = TRUE, forced = TRUE) if(LAZYLEN(flat_equipment)) for(var/obj/item/mecha_parts/mecha_equipment/equip as anything in flat_equipment) @@ -328,7 +328,7 @@ for(var/mob/living/occupant as anything in occupants) if(isAI(occupant)) var/mob/living/silicon/ai/ai = occupant - if(!ai.linked_core) // we probably shouldnt gib AIs with a core + if(!ai.linked_core && !ai.can_shunt) // we probably shouldnt gib AIs with a core or shunting abilities unlucky_ai = occupant ai.investigate_log("has been gibbed by having their mech destroyed.", INVESTIGATE_DEATHS) ai.gib(DROP_ALL_REMAINS) //No wreck, no AI to recover diff --git a/code/modules/vehicles/mecha/mecha_ai_interaction.dm b/code/modules/vehicles/mecha/mecha_ai_interaction.dm index 9ae35d8ff4ba4..3a681cac97db5 100644 --- a/code/modules/vehicles/mecha/mecha_ai_interaction.dm +++ b/code/modules/vehicles/mecha/mecha_ai_interaction.dm @@ -67,6 +67,7 @@ if(AI_MECH_HACK) //Called by AIs on the mech AI.linked_core = new /obj/structure/ai_core/deactivated(AI.loc) + AI.linked_core.remote_ai = AI if(AI.can_dominate_mechs && LAZYLEN(occupants)) //Oh, I am sorry, were you using that? to_chat(AI, span_warning("Occupants detected! Forced ejection initiated!")) to_chat(occupants, span_danger("You have been forcibly ejected!")) @@ -101,6 +102,7 @@ AI.eyeobj?.RegisterSignal(src, COMSIG_MOVABLE_MOVED, TYPE_PROC_REF(/mob/camera/ai_eye, update_visibility)) AI.controlled_equipment = src AI.remote_control = src + AI.ShutOffDoomsdayDevice() to_chat(AI, AI.can_dominate_mechs ? span_greenannounce("Takeover of [name] complete! You are now loaded onto the onboard computer. Do not attempt to leave the station sector!") :\ span_notice("You have been uploaded to a mech's onboard computer.")) to_chat(AI, "Use Middle-Mouse or the action button in your HUD to toggle equipment safety. Clicks with safety enabled will pass AI commands.") diff --git a/code/modules/vehicles/mecha/mecha_mob_interaction.dm b/code/modules/vehicles/mecha/mecha_mob_interaction.dm index d16e4af154179..e72d5505cb6fc 100644 --- a/code/modules/vehicles/mecha/mecha_mob_interaction.dm +++ b/code/modules/vehicles/mecha/mecha_mob_interaction.dm @@ -119,19 +119,29 @@ //stop listening to this signal, as the static update is now handled by the eyeobj's setLoc AI.eyeobj?.UnregisterSignal(src, COMSIG_MOVABLE_MOVED) AI.eyeobj?.forceMove(newloc) //kick the eye out as well - if(forced)//This should only happen if there are multiple AIs in a round, and at least one is Malf. + if(forced) + AI.controlled_equipment = null + AI.remote_control = null if(!AI.linked_core) //if the victim AI has no core - AI.investigate_log("has been gibbed by being forced out of their mech by another AI.", INVESTIGATE_DEATHS) - AI.gib(DROP_ALL_REMAINS) //If one Malf decides to steal a mech from another AI (even other Malfs!), they are destroyed, as they have nowhere to go when replaced. - AI = null - mecha_flags &= ~SILICON_PILOT - return + if (!AI.can_shunt || !length(AI.hacked_apcs)) + AI.investigate_log("has been gibbed by being forced out of their mech.", INVESTIGATE_DEATHS) + /// If an AI with no core (and no shunting abilities) gets forced out of their mech + /// (in a way that isn't handled by the normal handling of their mech being destroyed) + /// we gib 'em here, too. + AI.gib(DROP_ALL_REMAINS) + AI = null + mecha_flags &= ~SILICON_PILOT + return + else + var/obj/machinery/power/apc/emergency_shunt_apc = pick(AI.hacked_apcs) + emergency_shunt_apc.malfoccupy(AI) //get shunted into a random APC (you don't get to choose which) + AI = null + mecha_flags &= ~SILICON_PILOT + return + newloc = get_turf(AI.linked_core) + qdel(AI.linked_core) + AI.forceMove(newloc) else - if(!AI.linked_core) - if(!silent) - to_chat(AI, span_userdanger("Inactive core destroyed. Unable to return.")) - AI.linked_core = null - return if(!silent) to_chat(AI, span_notice("Returning to core...")) AI.controlled_equipment = null @@ -139,6 +149,7 @@ mob_container = AI newloc = get_turf(AI.linked_core) qdel(AI.linked_core) + AI.forceMove(newloc) else if(isliving(M)) mob_container = M else @@ -186,9 +197,20 @@ /obj/vehicle/sealed/mecha/container_resist_act(mob/living/user) if(isAI(user)) var/mob/living/silicon/ai/AI = user - if(!AI.can_shunt) - to_chat(AI, span_notice("You can't leave a mech after dominating it!.")) - return FALSE + if(!AI.linked_core) + to_chat(AI, span_userdanger("Inactive core destroyed. Unable to return.")) + if(!AI.can_shunt || !AI.hacked_apcs.len) + to_chat(AI, span_warning("[AI.can_shunt ? "No hacked APCs available." : "No shunting capabilities."]")) + return + var/confirm = tgui_alert(AI, "Shunt to a random APC? You won't have anywhere else to go!", "Confirm Emergency Shunt", list("Yes", "No")) + if(confirm == "Yes") + /// Mechs with open cockpits can have the pilot shot by projectiles, or EMPs may destroy the AI inside + /// Alternatively, destroying the mech will shunt the AI if they can shunt, or a deadeye wizard can hit + /// them with a teleportation bolt + if (AI.stat == DEAD || AI.loc != src) + return + mob_exit(AI, forced = TRUE) + return to_chat(user, span_notice("You begin the ejection procedure. Equipment is disabled during this process. Hold still to finish ejecting.")) is_currently_ejecting = TRUE if(do_after(user, has_gravity() ? exit_delay : 0 , target = src)) From 74b4715d6eae2237b47fc372df429cb86c21c2a9 Mon Sep 17 00:00:00 2001 From: 13spacemen <46101244+13spacemen@users.noreply.github.com> Date: Sun, 28 Apr 2024 23:21:15 +0500 Subject: [PATCH 02/22] fix roleless poll ignores not working (#82911) Fixes https://github.com/tgstation/tgstation/issues/82890 In some cases an alert poll had no role, like the monkey helmet, and because of that it skipped the eligibility check ## Changelog :cl: fix: All alert polls ignore option works /:cl: --- code/controllers/subsystem/polling.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/controllers/subsystem/polling.dm b/code/controllers/subsystem/polling.dm index e48dddfe3f0ab..cbbcca59fa6e2 100644 --- a/code/controllers/subsystem/polling.dm +++ b/code/controllers/subsystem/polling.dm @@ -79,13 +79,13 @@ SUBSYSTEM_DEF(polling) for(var/mob/candidate_mob as anything in group) if(!candidate_mob.client) continue - // Universal opt-out for all players if it's for a role. - if(role && (!candidate_mob.client.prefs.read_preference(/datum/preference/toggle/ghost_roles))) + // Universal opt-out for all players. + if(!candidate_mob.client.prefs.read_preference(/datum/preference/toggle/ghost_roles)) continue // Opt-out for admins whom are currently adminned. - if(role && (!candidate_mob.client.prefs.read_preference(/datum/preference/toggle/ghost_roles_as_admin)) && candidate_mob.client.holder) + if((!candidate_mob.client.prefs.read_preference(/datum/preference/toggle/ghost_roles_as_admin)) && candidate_mob.client.holder) continue - if(role && !is_eligible(candidate_mob, role, check_jobban, ignore_category)) + if(!is_eligible(candidate_mob, role, check_jobban, ignore_category)) continue if(start_signed_up) From 4fce3854694e5072814d69ab32e8dfcdfa7bb2fe Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Mon, 29 Apr 2024 06:28:03 +1200 Subject: [PATCH 03/22] Automatic changelog for PR #82590 [ci skip] --- html/changelogs/AutoChangeLog-pr-82590.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-82590.yml diff --git a/html/changelogs/AutoChangeLog-pr-82590.yml b/html/changelogs/AutoChangeLog-pr-82590.yml new file mode 100644 index 0000000000000..4734f03efa00d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-82590.yml @@ -0,0 +1,6 @@ +author: "Metekillot" +delete-after: True +changes: + - bugfix: "Mech domination now properly integrates with shunting." + - bugfix: "Combat upgraded AIs no longer get two buggy malf ability pickers if they also become malfunctioning" + - refactor: "Refactored most of the functionality around malf AI shunting, mech control" \ No newline at end of file From 05dd356df19ec51b3de232f98c056f7e449d250a Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Mon, 29 Apr 2024 06:28:56 +1200 Subject: [PATCH 04/22] Automatic changelog for PR #82911 [ci skip] --- html/changelogs/AutoChangeLog-pr-82911.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-82911.yml diff --git a/html/changelogs/AutoChangeLog-pr-82911.yml b/html/changelogs/AutoChangeLog-pr-82911.yml new file mode 100644 index 0000000000000..2c878ab6f0b2f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-82911.yml @@ -0,0 +1,4 @@ +author: "13spacemen" +delete-after: True +changes: + - bugfix: "All alert polls ignore option works" \ No newline at end of file From 88143d25711b5e2740939e65242af38fb015a0f5 Mon Sep 17 00:00:00 2001 From: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Sun, 28 Apr 2024 18:39:37 +0000 Subject: [PATCH 05/22] Fixes runtime in z level update (#82898) ## About The Pull Request re-adds the check that they are actually being moved to a new z level in the update z level proc so it doesn't check null z level for cliented mobs and ai controllers. ## Why It's Good For The Game Saw this runtime on moth.fans and thought i should fix it. ## Changelog Nothing player-facing. --- code/modules/mob/living/living.dm | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index dc6cc7bd82052..b462581455895 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1777,25 +1777,27 @@ GLOBAL_LIST_EMPTY(fire_appearances) return //Check the amount of clients exists on the Z level we're leaving from, - //this excludes us as we haven't added ourselves to the new z level yet. + //this excludes us because at this point we are not registered to any z level. var/old_level_new_clients = (registered_z ? SSmobs.clients_by_zlevel[registered_z].len : null) //No one is left after we're gone, shut off inactive ones if(registered_z && old_level_new_clients == 0) for(var/datum/ai_controller/controller as anything in SSai_controllers.ai_controllers_by_zlevel[registered_z]) controller.set_ai_status(AI_STATUS_OFF) - //Check the amount of clients exists on the Z level we're moving towards, excluding ourselves. - var/new_level_old_clients = SSmobs.clients_by_zlevel[new_z].len + if(new_z) + //Check the amount of clients exists on the Z level we're moving towards, excluding ourselves. + var/new_level_old_clients = SSmobs.clients_by_zlevel[new_z].len + + //We'll add ourselves to the list now so get_expected_ai_status() will know we're on the z level. + SSmobs.clients_by_zlevel[new_z] += src + + if(new_level_old_clients == 0) //No one was here before, wake up all the AIs. + for (var/datum/ai_controller/controller as anything in SSai_controllers.ai_controllers_by_zlevel[new_z]) + //We don't set them directly on, for instances like AIs acting while dead and other cases that may exist in the future. + //This isn't a problem for AIs with a client since the client will prevent this from being called anyway. + controller.set_ai_status(controller.get_expected_ai_status()) registered_z = new_z - //We'll add ourselves to the list now so get_expected_ai_status() will know we're on the z level. - SSmobs.clients_by_zlevel[registered_z] += src - - if(new_level_old_clients == 0) //No one was here before, wake up all the AIs. - for (var/datum/ai_controller/controller as anything in SSai_controllers.ai_controllers_by_zlevel[new_z]) - //We don't set them directly on, for instances like AIs acting while dead and other cases that may exist in the future. - //This isn't a problem for AIs with a client since the client will prevent this from being called anyway. - controller.set_ai_status(controller.get_expected_ai_status()) /mob/living/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents) ..() From 4a5cb3e92f61ff2656d01ebeb7a3d0dc82469508 Mon Sep 17 00:00:00 2001 From: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Date: Sun, 28 Apr 2024 12:25:15 -0700 Subject: [PATCH 06/22] Makes the cutter lint actually work (#82913) ## About The Pull Request Turns out I fucked up the os walk stuff so this never actually did anything. (also a broken param but at this point does it even matter) More then that, it wasn't build to handle being called by something not in its folder. This fixed that, so the lint like actually works. --- tools/build/build.js | 2 +- tools/icon_cutter/check.py | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/tools/build/build.js b/tools/build/build.js index e83dc12bebf2d..072e835b274ba 100644 --- a/tools/build/build.js +++ b/tools/build/build.js @@ -77,7 +77,7 @@ export const CiParameter = new Juke.Parameter({ type: 'boolean' }); export const ForceRecutParameter = new Juke.Parameter({ type: 'boolean', - name: "force_recut", + name: "force-recut", }); export const WarningParameter = new Juke.Parameter({ diff --git a/tools/icon_cutter/check.py b/tools/icon_cutter/check.py index c6c269635ff0e..568ec272436cd 100644 --- a/tools/icon_cutter/check.py +++ b/tools/icon_cutter/check.py @@ -69,10 +69,16 @@ def hash_file(path): return (md5.hexdigest(), None, None) +path_to_us = os.path.realpath(os.path.dirname(__file__)) pass_count = 0 fail_count = 0 output_hash = {} -for cutter_template in glob.glob("..\\..\\icons\\**\*.toml", recursive = True): +files = [] +if platform.system() == "Windows": + files = glob.glob(f"{path_to_us}\..\\..\\icons\\**\*.toml", recursive = True) +else: + files = glob.glob(f"{path_to_us}/../../icons/**/*.toml", recursive = True) +for cutter_template in files: resource_name = re.sub(chop_extension, r"\1", cutter_template, count = 1) if not os.path.isfile(resource_name): print(f"::error template={cutter_template} exists but lacks a matching resource file ({resource_name})") @@ -89,9 +95,9 @@ def hash_file(path): # Execute cutter if platform.system() == "Windows": - subprocess.run("..\\build\\build.bat --force-recut --ci icon-cutter") + subprocess.run(f"{path_to_us}\..\\build\\build.bat --force-recut --ci icon-cutter") else: - subprocess.run("../build/build --force-recut --ci icon-cutter", shell = True) + subprocess.run(f"{path_to_us}/../build/build --force-recut --ci icon-cutter", shell = True) for output_name in output_hash: old_hash, old_metadata, old_icon_hash = output_hash[output_name] From 922017a36070b335be78a5f28a8196ef86f480c4 Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 28 Apr 2024 21:36:26 +0200 Subject: [PATCH 07/22] Adds tinyfans to the arrival shuttles (#82915) ## About The Pull Request This PR adds tinyfans all arrivals shuttles ## Why It's Good For The Game Sometimes arrivals shuttle gets depressurized due the state of the arrivals wings and air going out of doors this means if a new player joins the game they are immediatly met with the suffocation indictator while a veteran might know his way around it a new player would not this gives them a little more breathing space in to whats supposed to be a non griefable area :cl: qol: Arrivals shuttle is now more player friendly /:cl: --- _maps/shuttles/arrival_birdshot.dmm | 38 ++++++++++++++++------------ _maps/shuttles/arrival_box.dmm | 2 ++ _maps/shuttles/arrival_delta.dmm | 2 ++ _maps/shuttles/arrival_donut.dmm | 2 ++ _maps/shuttles/arrival_kilo.dmm | 21 ++++++++++----- _maps/shuttles/arrival_northstar.dmm | 2 ++ _maps/shuttles/arrival_pubby.dmm | 3 +++ 7 files changed, 47 insertions(+), 23 deletions(-) diff --git a/_maps/shuttles/arrival_birdshot.dmm b/_maps/shuttles/arrival_birdshot.dmm index 2288db6bbe24d..d884c22d8db3d 100644 --- a/_maps/shuttles/arrival_birdshot.dmm +++ b/_maps/shuttles/arrival_birdshot.dmm @@ -62,6 +62,11 @@ /obj/machinery/light/cold/directional/north, /turf/open/floor/mineral/titanium/blue, /area/shuttle/arrival) +"x" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/fans/tiny/invisible, +/turf/open/floor/plating, +/area/shuttle/arrival) "B" = ( /turf/open/floor/mineral/titanium/blue, /area/shuttle/arrival) @@ -69,6 +74,7 @@ /obj/machinery/door/airlock/titanium{ name = "Arrivals Shuttle Airlock" }, +/obj/structure/fans/tiny, /turf/open/floor/mineral/titanium/blue, /area/shuttle/arrival) "J" = ( @@ -128,20 +134,20 @@ (1,1,1) = {" a -Q -Q -Q -Q -Q +x +x +x +x +x a "} (2,1,1) = {" a -Q +x f n R -Q +x a "} (3,1,1) = {" @@ -172,22 +178,22 @@ B F "} (6,1,1) = {" -Q +x U B U B U -Q +x "} (7,1,1) = {" -Q +x U B U B U -Q +x "} (8,1,1) = {" V @@ -204,7 +210,7 @@ Q L q w -Q +x a "} (10,1,1) = {" @@ -217,22 +223,22 @@ q V "} (11,1,1) = {" -Q +x U B U B U -Q +x "} (12,1,1) = {" -Q +x U B U B U -Q +x "} (13,1,1) = {" F diff --git a/_maps/shuttles/arrival_box.dmm b/_maps/shuttles/arrival_box.dmm index 3d4a8769d4cdb..53d704515bb25 100644 --- a/_maps/shuttles/arrival_box.dmm +++ b/_maps/shuttles/arrival_box.dmm @@ -9,10 +9,12 @@ /obj/machinery/door/airlock/titanium{ name = "Arrivals Shuttle Airlock" }, +/obj/structure/fans/tiny, /turf/open/floor/plating, /area/shuttle/arrival) "d" = ( /obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/fans/tiny/invisible, /turf/open/floor/plating, /area/shuttle/arrival) "e" = ( diff --git a/_maps/shuttles/arrival_delta.dmm b/_maps/shuttles/arrival_delta.dmm index 649c16bdcf4db..527b50f66c3dd 100644 --- a/_maps/shuttles/arrival_delta.dmm +++ b/_maps/shuttles/arrival_delta.dmm @@ -39,6 +39,7 @@ /area/shuttle/arrival) "ah" = ( /obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/fans/tiny/invisible, /turf/open/floor/plating, /area/shuttle/arrival) "ai" = ( @@ -156,6 +157,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/structure/fans/tiny, /turf/open/floor/iron/white, /area/shuttle/arrival) "ap" = ( diff --git a/_maps/shuttles/arrival_donut.dmm b/_maps/shuttles/arrival_donut.dmm index e8ff316a69e7d..e8947674b7c39 100644 --- a/_maps/shuttles/arrival_donut.dmm +++ b/_maps/shuttles/arrival_donut.dmm @@ -38,6 +38,7 @@ /area/shuttle/arrival) "k" = ( /obj/machinery/door/airlock/titanium, +/obj/structure/fans/tiny, /turf/open/floor/plating, /area/shuttle/arrival) "l" = ( @@ -55,6 +56,7 @@ /area/shuttle/arrival) "o" = ( /obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/fans/tiny/invisible, /turf/open/floor/plating, /area/shuttle/arrival) "p" = ( diff --git a/_maps/shuttles/arrival_kilo.dmm b/_maps/shuttles/arrival_kilo.dmm index 3fd328965deae..b59cf8d160dc4 100644 --- a/_maps/shuttles/arrival_kilo.dmm +++ b/_maps/shuttles/arrival_kilo.dmm @@ -16,6 +16,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/structure/fans/tiny, /turf/open/floor/mineral/plastitanium, /area/shuttle/arrival) "ae" = ( @@ -99,6 +100,7 @@ dir = 8 }, /obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/fans/tiny/invisible, /turf/open/floor/plating, /area/shuttle/arrival) "ap" = ( @@ -298,6 +300,11 @@ }, /turf/open/floor/mineral/plastitanium, /area/shuttle/arrival) +"lA" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/fans/tiny/invisible, +/turf/open/floor/plating, +/area/shuttle/arrival) "rV" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -349,7 +356,7 @@ aX aW aQ aY -af +lA "} (5,1,1) = {" ae @@ -367,7 +374,7 @@ rV ay aV aN -af +lA "} (7,1,1) = {" af @@ -376,7 +383,7 @@ rV az aV aN -af +lA "} (8,1,1) = {" af @@ -385,7 +392,7 @@ rV ab aV aN -af +lA "} (9,1,1) = {" ac @@ -435,9 +442,9 @@ ag (14,1,1) = {" ag ac -af -af -af +lA +lA +lA ac ag "} diff --git a/_maps/shuttles/arrival_northstar.dmm b/_maps/shuttles/arrival_northstar.dmm index 888a497bc581f..fadde8f9df42b 100644 --- a/_maps/shuttles/arrival_northstar.dmm +++ b/_maps/shuttles/arrival_northstar.dmm @@ -12,6 +12,7 @@ /obj/machinery/door/airlock/survival_pod/glass{ name = "Arrivals Shuttle Airlock" }, +/obj/structure/fans/tiny, /turf/open/floor/plating, /area/shuttle/arrival) "d" = ( @@ -183,6 +184,7 @@ /area/shuttle/arrival) "Z" = ( /obj/effect/spawner/structure/window/survival_pod, +/obj/structure/fans/tiny/invisible, /turf/open/floor/plating, /area/shuttle/arrival) diff --git a/_maps/shuttles/arrival_pubby.dmm b/_maps/shuttles/arrival_pubby.dmm index 8f2ecdab58c85..e534fd01a4015 100644 --- a/_maps/shuttles/arrival_pubby.dmm +++ b/_maps/shuttles/arrival_pubby.dmm @@ -9,10 +9,12 @@ /obj/machinery/door/airlock/titanium{ name = "Arrivals Shuttle Airlock" }, +/obj/structure/fans/tiny, /turf/open/floor/plating, /area/shuttle/arrival) "d" = ( /obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/fans/tiny/invisible, /turf/open/floor/plating, /area/shuttle/arrival) "e" = ( @@ -53,6 +55,7 @@ name = "Ship Shutters" }, /obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/fans/tiny/invisible, /turf/open/floor/plating, /area/shuttle/arrival) "n" = ( From dfc85d71c6b6c251bca3497e7d302d6415e41f9d Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Mon, 29 Apr 2024 07:36:45 +1200 Subject: [PATCH 08/22] Automatic changelog for PR #82915 [ci skip] --- html/changelogs/AutoChangeLog-pr-82915.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-82915.yml diff --git a/html/changelogs/AutoChangeLog-pr-82915.yml b/html/changelogs/AutoChangeLog-pr-82915.yml new file mode 100644 index 0000000000000..5a1acebefd99d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-82915.yml @@ -0,0 +1,4 @@ +author: "improvedname" +delete-after: True +changes: + - qol: "Arrivals shuttle is now more player friendly" \ No newline at end of file From 55a5a05d7b31e299be4df2c80b5a1cf2edaea122 Mon Sep 17 00:00:00 2001 From: VexingRaven Date: Sun, 28 Apr 2024 15:13:42 -0500 Subject: [PATCH 09/22] Fix the materials box dropping its contents on creation (#82892) ## About The Pull Request This fixes the materials box (part of the debug box/admin outfit) dropping its contents everywhere. The issue is that these stacks will merge during `PopulateContents` as part of the parent call to `/obj/item/storage/Initialize` before `/obj/item/storage/box/material/Initialize` has a chance to change the size of the box. ## Why It's Good For The Game Fixes #82705 ## Changelog :cl: VexingRaven fix: The debug box no longer spills its contents everywhere /:cl: --- .../objects/items/storage/boxes/engineering_boxes.dm | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/code/game/objects/items/storage/boxes/engineering_boxes.dm b/code/game/objects/items/storage/boxes/engineering_boxes.dm index de975d9dbfea4..a46703ec8bf9d 100644 --- a/code/game/objects/items/storage/boxes/engineering_boxes.dm +++ b/code/game/objects/items/storage/boxes/engineering_boxes.dm @@ -24,10 +24,7 @@ /obj/item/storage/box/material/Initialize(mapload) . = ..() - atom_storage.allow_big_nesting = TRUE - atom_storage.max_slots = 99 - atom_storage.max_specific_storage = WEIGHT_CLASS_GIGANTIC - atom_storage.max_total_storage = 99 + atom_storage.max_specific_storage = WEIGHT_CLASS_GIGANTIC //This needs to be set here too because the parent type overrides it again /obj/item/storage/box/material/PopulateContents() //less uranium because radioactive var/static/items_inside = list( @@ -51,6 +48,11 @@ /obj/item/stack/sheet/plastic/fifty=1, /obj/item/stack/sheet/runed_metal/fifty=1, ) + //This needs to be done here and not in Initialize() because the stacks get merged and fall out when their weight updates if this is set after PopulateContents() + atom_storage.allow_big_nesting = TRUE + atom_storage.max_slots = 99 + atom_storage.max_specific_storage = WEIGHT_CLASS_GIGANTIC + atom_storage.max_total_storage = 99 generate_items_inside(items_inside,src) /obj/item/storage/box/debugtools From 7d3f376a22a37d95e0da11e299aeab564f7773c7 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Mon, 29 Apr 2024 08:19:41 +1200 Subject: [PATCH 10/22] Automatic changelog for PR #82892 [ci skip] --- html/changelogs/AutoChangeLog-pr-82892.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-82892.yml diff --git a/html/changelogs/AutoChangeLog-pr-82892.yml b/html/changelogs/AutoChangeLog-pr-82892.yml new file mode 100644 index 0000000000000..7480670397a18 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-82892.yml @@ -0,0 +1,4 @@ +author: "VexingRaven" +delete-after: True +changes: + - bugfix: "The debug box no longer spills its contents everywhere" \ No newline at end of file From cdd7665bc66faea1552f7b8624b90da3cf95c059 Mon Sep 17 00:00:00 2001 From: 13spacemen <46101244+13spacemen@users.noreply.github.com> Date: Mon, 29 Apr 2024 03:00:46 +0500 Subject: [PATCH 11/22] Unarmed Attacks Support Multiple Verbs (#82876) ## About The Pull Request Unarmed attacks, aka punching people, now is a list and supports having multiple verbs ## Why It's Good For The Game More flavor, RP, realism Lizard claws used to only "slash", now they can "slash" "scratch" "claw" Ethereals have "singe" in addition to "burn" Podmen can "lash" in addition to "slash" Heads can "chomp" in addition to "bite" ## Changelog :cl: code: Unarmed attacks (punches, etc.) now support multiple attack verbs instead of only one /:cl: --- .../items/stacks/golem_food/golem_status_effects.dm | 4 ++-- code/modules/mob/living/carbon/human/_species.dm | 2 +- code/modules/surgery/bodyparts/_bodyparts.dm | 4 ++-- code/modules/surgery/bodyparts/head.dm | 2 +- code/modules/surgery/bodyparts/parts.dm | 4 ++-- .../surgery/bodyparts/species_parts/ethereal_bodyparts.dm | 4 ++-- .../surgery/bodyparts/species_parts/lizard_bodyparts.dm | 4 ++-- .../surgery/bodyparts/species_parts/misc_bodyparts.dm | 8 ++++---- .../surgery/bodyparts/species_parts/moth_bodyparts.dm | 4 ++-- 9 files changed, 18 insertions(+), 18 deletions(-) diff --git a/code/game/objects/items/stacks/golem_food/golem_status_effects.dm b/code/game/objects/items/stacks/golem_food/golem_status_effects.dm index bf2c628ab972c..48fae041de42c 100644 --- a/code/game/objects/items/stacks/golem_food/golem_status_effects.dm +++ b/code/game/objects/items/stacks/golem_food/golem_status_effects.dm @@ -294,7 +294,7 @@ /// Make our arm do slashing effects /datum/status_effect/golem/diamond/proc/set_arm_fluff(obj/item/bodypart/arm/arm) - arm.unarmed_attack_verb = "slash" + arm.unarmed_attack_verbs = list("slash") arm.grappled_attack_verb = "lacerate" arm.unarmed_attack_effect = ATTACK_EFFECT_CLAW arm.unarmed_attack_sound = 'sound/weapons/slash.ogg' @@ -315,7 +315,7 @@ /datum/status_effect/golem/diamond/proc/reset_arm_fluff(obj/item/bodypart/arm/arm) if (!arm) return - arm.unarmed_attack_verb = initial(arm.unarmed_attack_verb) + arm.unarmed_attack_verbs = initial(arm.unarmed_attack_verbs) arm.unarmed_attack_effect = initial(arm.unarmed_attack_effect) arm.unarmed_attack_sound = initial(arm.unarmed_attack_sound) arm.unarmed_miss_sound = initial(arm.unarmed_miss_sound) diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index 8d968fd895589..26b0b1b8c223f 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -1068,7 +1068,7 @@ GLOBAL_LIST_EMPTY(features_by_species) attacking_bodypart = brain.get_attacking_limb(target) if(!attacking_bodypart) attacking_bodypart = user.get_active_hand() - var/atk_verb = attacking_bodypart.unarmed_attack_verb + var/atk_verb = pick(attacking_bodypart.unarmed_attack_verbs) var/atk_effect = attacking_bodypart.unarmed_attack_effect if(atk_effect == ATTACK_EFFECT_BITE) diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 5ed7cf59c3d52..07cb1fdd752c0 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -165,8 +165,8 @@ /// Type of an attack from this limb does. Arms will do punches, Legs for kicks, and head for bites. (TO ADD: tactical chestbumps) var/attack_type = BRUTE - /// the verb used for an unarmed attack when using this limb, such as arm.unarmed_attack_verb = punch - var/unarmed_attack_verb = "bump" + /// the verbs used for an unarmed attack when using this limb, such as arm.unarmed_attack_verbs = list("punch") + var/list/unarmed_attack_verbs = list("bump") /// if we have a special attack verb for hitting someone who is grappled by us, it goes here. var/grappled_attack_verb /// what visual effect is used when this limb is used to strike someone. diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index 2a1c0cdc9d408..1cc06471f2832 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -17,7 +17,7 @@ scars_covered_by_clothes = FALSE grind_results = null is_dimorphic = TRUE - unarmed_attack_verb = "bite" + unarmed_attack_verbs = list("bite", "chomp") unarmed_attack_effect = ATTACK_EFFECT_BITE unarmed_attack_sound = 'sound/weapons/bite.ogg' unarmed_miss_sound = 'sound/weapons/bite.ogg' diff --git a/code/modules/surgery/bodyparts/parts.dm b/code/modules/surgery/bodyparts/parts.dm index 01b8d93908e29..03f53c962d59f 100644 --- a/code/modules/surgery/bodyparts/parts.dm +++ b/code/modules/surgery/bodyparts/parts.dm @@ -129,7 +129,7 @@ aux_layer = BODYPARTS_HIGH_LAYER body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_DEFAULT can_be_disabled = TRUE - unarmed_attack_verb = "punch" /// The classic punch, wonderfully classic and completely random + unarmed_attack_verbs = list("punch") /// The classic punch, wonderfully classic and completely random grappled_attack_verb = "pummel" unarmed_damage_low = 5 unarmed_damage_high = 10 @@ -390,7 +390,7 @@ can_be_disabled = TRUE unarmed_attack_effect = ATTACK_EFFECT_KICK body_zone = BODY_ZONE_L_LEG - unarmed_attack_verb = "kick" // The lovely kick, typically only accessable by attacking a grouded foe. 1.5 times better than the punch. + unarmed_attack_verbs = list("kick") // The lovely kick, typically only accessable by attacking a grouded foe. 1.5 times better than the punch. unarmed_damage_low = 7 unarmed_damage_high = 15 unarmed_effectiveness = 15 diff --git a/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm index 3eeafa6f4e1a8..6607dbc59333c 100644 --- a/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm @@ -36,7 +36,7 @@ limb_id = SPECIES_ETHEREAL dmg_overlay_type = null attack_type = BURN //burn bish - unarmed_attack_verb = "burn" + unarmed_attack_verbs = list("burn", "singe") grappled_attack_verb = "scorch" unarmed_attack_sound = 'sound/weapons/etherealhit.ogg' unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg' @@ -54,7 +54,7 @@ limb_id = SPECIES_ETHEREAL dmg_overlay_type = null attack_type = BURN // bish buzz - unarmed_attack_verb = "burn" + unarmed_attack_verbs = list("burn") grappled_attack_verb = "scorch" unarmed_attack_sound = 'sound/weapons/etherealhit.ogg' unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg' diff --git a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm index e6fffe1e6f91b..30e91db21373a 100644 --- a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm @@ -16,7 +16,7 @@ /obj/item/bodypart/arm/left/lizard icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi' limb_id = SPECIES_LIZARD - unarmed_attack_verb = "slash" + unarmed_attack_verbs = list("slash", "scratch", "claw") grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW unarmed_attack_sound = 'sound/weapons/slash.ogg' @@ -25,7 +25,7 @@ /obj/item/bodypart/arm/right/lizard icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi' limb_id = SPECIES_LIZARD - unarmed_attack_verb = "slash" + unarmed_attack_verbs = list("slash", "scratch", "claw") grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW unarmed_attack_sound = 'sound/weapons/slash.ogg' diff --git a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm index e34fb2cbeafd1..dc18395e37da9 100644 --- a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm @@ -15,7 +15,7 @@ /obj/item/bodypart/arm/left/snail limb_id = SPECIES_SNAIL - unarmed_attack_verb = "slap" + unarmed_attack_verbs = list("slap") unarmed_attack_effect = ATTACK_EFFECT_DISARM unarmed_damage_low = 1 unarmed_damage_high = 2 //snails are soft and squishy @@ -24,7 +24,7 @@ /obj/item/bodypart/arm/right/snail limb_id = SPECIES_SNAIL - unarmed_attack_verb = "slap" + unarmed_attack_verbs = list("slap") unarmed_attack_effect = ATTACK_EFFECT_DISARM unarmed_damage_low = 1 unarmed_damage_high = 2 //snails are soft and squishy @@ -222,7 +222,7 @@ /obj/item/bodypart/arm/left/pod limb_id = SPECIES_PODPERSON - unarmed_attack_verb = "slash" + unarmed_attack_verbs = list("slash", "lash") grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW unarmed_attack_sound = 'sound/weapons/slice.ogg' @@ -231,7 +231,7 @@ /obj/item/bodypart/arm/right/pod limb_id = SPECIES_PODPERSON - unarmed_attack_verb = "slash" + unarmed_attack_verbs = list("slash", "lash") grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW unarmed_attack_sound = 'sound/weapons/slice.ogg' diff --git a/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm index be8d601b1fb58..011ee83368a63 100644 --- a/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm @@ -25,7 +25,7 @@ icon_static = 'icons/mob/human/species/moth/bodyparts.dmi' limb_id = SPECIES_MOTH should_draw_greyscale = FALSE - unarmed_attack_verb = "slash" + unarmed_attack_verbs = list("slash") grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW unarmed_attack_sound = 'sound/weapons/slash.ogg' @@ -37,7 +37,7 @@ icon_static = 'icons/mob/human/species/moth/bodyparts.dmi' limb_id = SPECIES_MOTH should_draw_greyscale = FALSE - unarmed_attack_verb = "slash" + unarmed_attack_verbs = list("slash") grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW unarmed_attack_sound = 'sound/weapons/slash.ogg' From 84d7b0c863a3b50472a09ec6361765b022e7ff98 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Mon, 29 Apr 2024 10:02:22 +1200 Subject: [PATCH 12/22] Automatic changelog for PR #82876 [ci skip] --- html/changelogs/AutoChangeLog-pr-82876.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-82876.yml diff --git a/html/changelogs/AutoChangeLog-pr-82876.yml b/html/changelogs/AutoChangeLog-pr-82876.yml new file mode 100644 index 0000000000000..a578a3fd9cc94 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-82876.yml @@ -0,0 +1,4 @@ +author: "13spacemen" +delete-after: True +changes: + - code_imp: "Unarmed attacks (punches, etc.) now support multiple attack verbs instead of only one" \ No newline at end of file From 350a27d1ec91a8e95c7d850a1049e593d6100861 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 29 Apr 2024 00:20:59 +0000 Subject: [PATCH 13/22] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-82590.yml | 6 ---- html/changelogs/AutoChangeLog-pr-82876.yml | 4 --- html/changelogs/AutoChangeLog-pr-82892.yml | 4 --- html/changelogs/AutoChangeLog-pr-82895.yml | 4 --- html/changelogs/AutoChangeLog-pr-82896.yml | 5 ---- html/changelogs/AutoChangeLog-pr-82899.yml | 4 --- html/changelogs/AutoChangeLog-pr-82900.yml | 4 --- html/changelogs/AutoChangeLog-pr-82902.yml | 4 --- html/changelogs/AutoChangeLog-pr-82906.yml | 4 --- html/changelogs/AutoChangeLog-pr-82909.yml | 4 --- html/changelogs/AutoChangeLog-pr-82911.yml | 4 --- html/changelogs/AutoChangeLog-pr-82912.yml | 4 --- html/changelogs/AutoChangeLog-pr-82915.yml | 4 --- html/changelogs/archive/2024-04.yml | 32 ++++++++++++++++++++++ 14 files changed, 32 insertions(+), 55 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-82590.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-82876.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-82892.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-82895.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-82896.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-82899.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-82900.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-82902.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-82906.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-82909.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-82911.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-82912.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-82915.yml diff --git a/html/changelogs/AutoChangeLog-pr-82590.yml b/html/changelogs/AutoChangeLog-pr-82590.yml deleted file mode 100644 index 4734f03efa00d..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-82590.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Metekillot" -delete-after: True -changes: - - bugfix: "Mech domination now properly integrates with shunting." - - bugfix: "Combat upgraded AIs no longer get two buggy malf ability pickers if they also become malfunctioning" - - refactor: "Refactored most of the functionality around malf AI shunting, mech control" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-82876.yml b/html/changelogs/AutoChangeLog-pr-82876.yml deleted file mode 100644 index a578a3fd9cc94..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-82876.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "13spacemen" -delete-after: True -changes: - - code_imp: "Unarmed attacks (punches, etc.) now support multiple attack verbs instead of only one" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-82892.yml b/html/changelogs/AutoChangeLog-pr-82892.yml deleted file mode 100644 index 7480670397a18..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-82892.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "VexingRaven" -delete-after: True -changes: - - bugfix: "The debug box no longer spills its contents everywhere" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-82895.yml b/html/changelogs/AutoChangeLog-pr-82895.yml deleted file mode 100644 index 53ec0d21c19c7..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-82895.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Sadboysuss" -delete-after: True -changes: - - admin: "spy can now be rolebanned" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-82896.yml b/html/changelogs/AutoChangeLog-pr-82896.yml deleted file mode 100644 index ae33b42e6c3a0..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-82896.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "FlufflesTheDog" -delete-after: True -changes: - - bugfix: "minebot shields are now actually orderable" - - bugfix: "vinegar may once again be crafted with wine, water, and sugar" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-82899.yml b/html/changelogs/AutoChangeLog-pr-82899.yml deleted file mode 100644 index f02fe7e98e2e7..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-82899.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "JohnFulpWillard" -delete-after: True -changes: - - bugfix: "Examining someone with Med/Sec HUDs will no longer filter the message under Radio." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-82900.yml b/html/changelogs/AutoChangeLog-pr-82900.yml deleted file mode 100644 index af134b4b6d9b0..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-82900.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "JohnFulpWillard" -delete-after: True -changes: - - bugfix: "pAI requests should no longer randomly permanently break in a round." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-82902.yml b/html/changelogs/AutoChangeLog-pr-82902.yml deleted file mode 100644 index 84d0381e51b7a..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-82902.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Rhials" -delete-after: True -changes: - - admin: "Lazy loading map templates now gives you the option to not ghost/teleport to the loaded area upon completion." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-82906.yml b/html/changelogs/AutoChangeLog-pr-82906.yml deleted file mode 100644 index ca820f420e848..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-82906.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Melbert" -delete-after: True -changes: - - bugfix: "Plasma cutters work again" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-82909.yml b/html/changelogs/AutoChangeLog-pr-82909.yml deleted file mode 100644 index bbc60199744cd..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-82909.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "EnterTheJake" -delete-after: True -changes: - - image: "The Infiltrator Suit has received a new model, sleeker than ever!" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-82911.yml b/html/changelogs/AutoChangeLog-pr-82911.yml deleted file mode 100644 index 2c878ab6f0b2f..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-82911.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "13spacemen" -delete-after: True -changes: - - bugfix: "All alert polls ignore option works" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-82912.yml b/html/changelogs/AutoChangeLog-pr-82912.yml deleted file mode 100644 index 802c0efd7c72c..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-82912.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "san7890" -delete-after: True -changes: - - admin: "Possess Object is now back in the right-click context menu." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-82915.yml b/html/changelogs/AutoChangeLog-pr-82915.yml deleted file mode 100644 index 5a1acebefd99d..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-82915.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "improvedname" -delete-after: True -changes: - - qol: "Arrivals shuttle is now more player friendly" \ No newline at end of file diff --git a/html/changelogs/archive/2024-04.yml b/html/changelogs/archive/2024-04.yml index 37b441f1fbdc2..7a884073b6a35 100644 --- a/html/changelogs/archive/2024-04.yml +++ b/html/changelogs/archive/2024-04.yml @@ -865,3 +865,35 @@ to a self-replicating grey goo scenario. jlsnow301: - bugfix: Fixes clipping in the ESC menu between buttons and long station names. +2024-04-29: + 13spacemen: + - bugfix: All alert polls ignore option works + - code_imp: Unarmed attacks (punches, etc.) now support multiple attack verbs instead + of only one + EnterTheJake: + - image: The Infiltrator Suit has received a new model, sleeker than ever! + FlufflesTheDog: + - bugfix: minebot shields are now actually orderable + - bugfix: vinegar may once again be crafted with wine, water, and sugar + JohnFulpWillard: + - bugfix: Examining someone with Med/Sec HUDs will no longer filter the message + under Radio. + - bugfix: pAI requests should no longer randomly permanently break in a round. + Melbert: + - bugfix: Plasma cutters work again + Metekillot: + - bugfix: Mech domination now properly integrates with shunting. + - bugfix: Combat upgraded AIs no longer get two buggy malf ability pickers if they + also become malfunctioning + - refactor: Refactored most of the functionality around malf AI shunting, mech control + Rhials: + - admin: Lazy loading map templates now gives you the option to not ghost/teleport + to the loaded area upon completion. + Sadboysuss: + - admin: spy can now be rolebanned + VexingRaven: + - bugfix: The debug box no longer spills its contents everywhere + improvedname: + - qol: Arrivals shuttle is now more player friendly + san7890: + - admin: Possess Object is now back in the right-click context menu. From 1fb8ac678f5fb2de33a8a0868fcc9221eb89c069 Mon Sep 17 00:00:00 2001 From: Interception&? <137328283+intercepti0n@users.noreply.github.com> Date: Mon, 29 Apr 2024 03:45:15 +0300 Subject: [PATCH 14/22] Adds a funny scene when getting Sisyphus achievement (#82897) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## About The Pull Request https://github.com/tgstation/tgstation/assets/137328283/979231c3-70cd-49dd-8d4d-2a8554adfbb3 ## Why It's Good For The Game This PR makes getting the “Ordeal of Sisyphus” extremely pointless by teleporting carried boulder and spessman back to the Lavaland. In my opinion, this feature is funny and suits the spirit of this achievement. ## Changelog :cl: add: Added a short scene when getting an Ordeal of Sisyphus achievement. /:cl: --- code/datums/components/sisyphus_awarder.dm | 19 +++++++++++++++++++ code/modules/cargo/supplypod.dm | 17 +++++++++++++++++ sound/ambience/music/sisyphus/sisyphus.ogg | Bin 0 -> 134033 bytes 3 files changed, 36 insertions(+) create mode 100644 sound/ambience/music/sisyphus/sisyphus.ogg diff --git a/code/datums/components/sisyphus_awarder.dm b/code/datums/components/sisyphus_awarder.dm index 36fc344c7465e..2a18a2889fc65 100644 --- a/code/datums/components/sisyphus_awarder.dm +++ b/code/datums/components/sisyphus_awarder.dm @@ -5,6 +5,8 @@ /datum/component/sisyphus_awarder /// What poor sap is hauling this rock? var/mob/living/sisyphus + /// Reference to a place where it all started. + var/turf/bottom_of_the_hill /datum/component/sisyphus_awarder/Initialize() if (!istype(parent, /obj/item/boulder)) @@ -30,6 +32,7 @@ RegisterSignal(the_taker, COMSIG_ENTER_AREA, PROC_REF(on_bearer_changed_area)) RegisterSignal(the_taker, COMSIG_QDELETING, PROC_REF(on_dropped)) sisyphus = the_taker + bottom_of_the_hill = get_turf(the_taker) /// If you ever drop this shit you fail the challenge /datum/component/sisyphus_awarder/proc/on_dropped() @@ -45,5 +48,21 @@ return if (entered_area.type != /area/centcom/central_command_areas/evacuation) return // Don't istype because taking pods doesn't count + chosen_one.client?.give_award(/datum/award/achievement/misc/sisyphus, chosen_one) + play_reward_scene() + qdel(src) + +/// Sends the player back to the Lavaland and plays a funny sound +/datum/component/sisyphus_awarder/proc/play_reward_scene() + if(isnull(bottom_of_the_hill)) + return // This probably shouldn't happen, but... + + podspawn(list( + "path" = /obj/structure/closet/supplypod/centcompod/sisyphus, + "target" = get_turf(sisyphus), + "reverse_dropoff_coords" = list(bottom_of_the_hill.x, bottom_of_the_hill.y, bottom_of_the_hill.z), + )) + + SEND_SOUND(sisyphus, 'sound/ambience/music/sisyphus/sisyphus.ogg') diff --git a/code/modules/cargo/supplypod.dm b/code/modules/cargo/supplypod.dm index 511f9af6541e8..82b8d5b63a254 100644 --- a/code/modules/cargo/supplypod.dm +++ b/code/modules/cargo/supplypod.dm @@ -99,6 +99,23 @@ delays = list(POD_TRANSIT = 20, POD_FALLING = 4, POD_OPENING = 30, POD_LEAVING = 30) resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF +/obj/structure/closet/supplypod/centcompod/sisyphus + delays = list(POD_TRANSIT = 0, POD_FALLING = 0, POD_OPENING = 0, POD_LEAVING = 0.2) + reverse_delays = list(POD_TRANSIT = 0, POD_FALLING = 1.5 SECONDS, POD_OPENING = 0.6 SECONDS, POD_LEAVING = 0) + custom_rev_delay = TRUE + effectStealth = TRUE + reversing = TRUE + reverse_option_list = list( + "Mobs" = TRUE, + "Objects" = FALSE, + "Anchored" = FALSE, + "Underfloor" = FALSE, + "Wallmounted" = FALSE, + "Floors" = FALSE, + "Walls" = FALSE, + "Mecha" = TRUE, + ) + /obj/structure/closet/supplypod/back_to_station name = "blood-red supply pod" desc = "An intimidating supply pod, covered in the blood-red markings" diff --git a/sound/ambience/music/sisyphus/sisyphus.ogg b/sound/ambience/music/sisyphus/sisyphus.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c69d0b608ebc5368a91efedc2f59794b8da2dbb4 GIT binary patch literal 134033 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 v+~L*VQzo)CI@$Wte#d;GMd!AzhWuRT**9L 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
    I8JJEltVX+^LMzUj1weS0(#BJ{q7ZlOW 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πcOTo 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 U<6xsp<>Wy8g)z2~I Date: Mon, 29 Apr 2024 12:51:26 +1200 Subject: [PATCH 15/22] Automatic changelog for PR #82897 [ci skip] --- html/changelogs/AutoChangeLog-pr-82897.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-82897.yml diff --git a/html/changelogs/AutoChangeLog-pr-82897.yml b/html/changelogs/AutoChangeLog-pr-82897.yml new file mode 100644 index 0000000000000..0c757e358d67b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-82897.yml @@ -0,0 +1,4 @@ +author: "intercepti0n" +delete-after: True +changes: + - rscadd: "Added a short scene when getting an Ordeal of Sisyphus achievement." \ No newline at end of file From 46861e4831a8e2907a4008860707b3408f0de200 Mon Sep 17 00:00:00 2001 From: Jacquerel Date: Mon, 29 Apr 2024 03:29:57 +0100 Subject: [PATCH 16/22] Netguardian darkvision & visual tweaks (#82919) ## About The Pull Request ![image](https://github.com/tgstation/tgstation/assets/7483112/730a8d16-6489-4c7f-8c82-ae0d07598913) This gives the Netguardian Prime mob a little bit of darkvision. Reasoning: Some of these netrunning maps (like the alien hive) are very dark, and this is a robot. At the same time I added some emissives to its glowing eye and thrusters to make them appear to emit light, and I removed the bobbing animation we automate on flying mobs because its icon state has one already. ## Why It's Good For The Game If we're going to spawn a mob in the dark it should probably be able to see where it is. ## Changelog :cl: balance: Netguardian Prime can see in the dark. image: You can see Netguardian Prime in the dark. /:cl: --- .../bitrunning/antagonists/netguardian.dm | 20 +++++++++++++++--- icons/mob/nonhuman-player/netguardian.dmi | Bin 9764 -> 38217 bytes 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/code/modules/bitrunning/antagonists/netguardian.dm b/code/modules/bitrunning/antagonists/netguardian.dm index 39d646753345e..f0ea7822985f4 100644 --- a/code/modules/bitrunning/antagonists/netguardian.dm +++ b/code/modules/bitrunning/antagonists/netguardian.dm @@ -45,12 +45,17 @@ speech_span = SPAN_ROBOT death_message = "malfunctions!" + lighting_cutoff_red = 30 + lighting_cutoff_green = 5 + lighting_cutoff_blue = 20 + habitable_atmos = null minimum_survivable_temperature = TCMB ai_controller = /datum/ai_controller/basic_controller/netguardian /mob/living/basic/netguardian/Initialize(mapload) . = ..() + ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT) AddComponent(/datum/component/ranged_attacks, \ casing_type = /obj/item/ammo_casing/c46x30mm, \ projectile_sound = 'sound/weapons/gun/smg/shot.ogg', \ @@ -62,12 +67,19 @@ ai_controller.set_blackboard_key(BB_NETGUARDIAN_ROCKET_ABILITY, rockets) AddElement(/datum/element/simple_flying) + update_appearance(UPDATE_OVERLAYS) /mob/living/basic/netguardian/death(gibbed) do_sparks(number = 3, cardinal_only = TRUE, source = src) playsound(src, 'sound/mecha/weapdestr.ogg', 100) return ..() +/mob/living/basic/netguardian/update_overlays() + . = ..() + if (stat == DEAD) + return + . += emissive_appearance(icon, "netguardian_emissive", src) + /datum/action/cooldown/mob_cooldown/projectile_attack/rapid_fire/netguardian name = "2E Rocket Launcher" button_icon = 'icons/obj/weapons/guns/ammo.dmi' @@ -82,9 +94,11 @@ playsound(player, 'sound/mecha/skyfall_power_up.ogg', 120) player.say("target acquired.", "machine") - var/mutable_appearance/scan_effect = mutable_appearance('icons/mob/nonhuman-player/netguardian.dmi', "scan") - var/mutable_appearance/rocket_effect = mutable_appearance('icons/mob/nonhuman-player/netguardian.dmi', "rockets") - var/list/overlays = list(scan_effect, rocket_effect) + var/overlay_icon = 'icons/mob/nonhuman-player/netguardian.dmi' + var/list/overlays = list() + overlays += mutable_appearance(overlay_icon, "scan") + overlays += mutable_appearance(overlay_icon, "rockets") + overlays += emissive_appearance(overlay_icon, "scan", player) player.add_overlay(overlays) StartCooldown() diff --git a/icons/mob/nonhuman-player/netguardian.dmi b/icons/mob/nonhuman-player/netguardian.dmi index 057e7a066c2beabacaa3d845a9fafcd070a9ee45..c788c76772b8122f9a8908677d124ed90430692b 100644 GIT binary patch literal 38217 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 N;OXk;vd$@?2>=uzrUU>0 literal 9764 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 Y&tWCRX_CkvW>M(gGtjJ3e-iQk09IFO!T Date: Mon, 29 Apr 2024 14:30:15 +1200 Subject: [PATCH 17/22] Automatic changelog for PR #82919 [ci skip] --- html/changelogs/AutoChangeLog-pr-82919.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-82919.yml diff --git a/html/changelogs/AutoChangeLog-pr-82919.yml b/html/changelogs/AutoChangeLog-pr-82919.yml new file mode 100644 index 0000000000000..a706a615ccbf1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-82919.yml @@ -0,0 +1,5 @@ +author: "Jacquerel" +delete-after: True +changes: + - balance: "Netguardian Prime can see in the dark." + - image: "You can see Netguardian Prime in the dark." \ No newline at end of file From d86a44aefe0026c6207537da38bcbd2ef404637e Mon Sep 17 00:00:00 2001 From: YesterdaysPromise <122572637+YesterdaysPromise@users.noreply.github.com> Date: Mon, 29 Apr 2024 04:32:10 +0200 Subject: [PATCH 18/22] Updates tips of the round to exclude mentions of virologist, and include coroners and heretic paths instead. (#82923) ## About The Pull Request Recently had the virologist tip show up before the round and people on OOC flared that "there's no such thing anymore!". Quite an easy thing to fix, so I thought I'll get to it, and added tips describing heretic paths and for coroners while I was at it. ## Why It's Good For The Game Virologists are no longer in the game, so tips for them are of no much use. More tips don't hurt, and Coroner and Heretic had none up to this point which seems bit like an overseight. ## Changelog :cl: fix: The start-of-the-round tips will no longer feature virologists, but will, however, start featuring heretics and coroners. /:cl: --------- Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> --- strings/tips.txt | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/strings/tips.txt b/strings/tips.txt index 2f17afc84afb2..34075d12664a9 100644 --- a/strings/tips.txt +++ b/strings/tips.txt @@ -44,6 +44,14 @@ As a Geneticist, T goes to A, and G goes to C. As a Ghost, you can both start and join capture the flag games through the minigames menu, or by clicking on one of the team spawners, which can be found under the "Misc" section of the orbit menu. As a Ghost, you can double click on just about anything to follow it. Or just warp around! As a Ghost, you can see the inside of a container on the ground by clicking on it. +As a Heretic, the Path of Ash focuses on stealth and disorientation, but as you progress, sheds this playstyle in favor of a more aggressive, fiery finale. +As a Heretic, the Path of Moon will literally drive people around you crazy - perhaps crazy enough to become your allies should you succeed. +As a Heretic, the Path of Lock is an Assistant's best friend, and can open many pathways. Including ones beyond the veil... +As a Heretic, the Path of Flesh allows you to raise an army by summoning ghouls and monsters from beyond the veil. Through ascension, you become a one-man army yourself. +As a Heretic, the Path of Void makes people wish they could scream in the vast emptiness of space or have a chance at escaping from you. In the end, the storm takes all. +As a Heretic, the Path of Blade rewards your ability to fight, by making you better and better at it. Though ascension, you can become an ultimate dueling juggernaut. +As a Heretic, the Path of Rust is quite overt, but allows you to shrug of a lot of damage as everything around you slowly decays into nothing but rot and rust. +As a Heretic, the Path of Cosmos allows you to take rightful ownership of the very space the crew treads on. And if they don't respect your status, calling in a friend from beyond should show them. As a Janitor Cyborg, you are the bane of all slaughter demons and even Bubblegum himself. Cleaning up blood stains will severely gimp them. As a Janitor, if someone steals your janicart, you can instead use your space cleaner spray, grenades, water sprayer, exact bloody revenge or order another from Cargo. As a Janitor, mousetraps can be used to create bombs or booby-trap containers. @@ -60,6 +68,9 @@ As a Medical Doctor, you can extract implants by holding an empty implant case i As a Medical Doctor, you can point your penlight at people to create a medical hologram. This lets them know that you're coming to treat them. As a Medical Doctor, you can surgically implant or extract things from people's chests. This can range from putting in a bomb to pulling out an alien larva. As a Medical Doctor, you must target the correct limb and not be in combat mode when trying to perform surgery on someone. Right clicking your patient will intentionally fail the surgery step. +As a Medical Doctor, when messing with viruses, remember that robotic organs can give immunity to disease effects and transmissibility. Make use of the inorganic biology symptom to bypass the protection. +As a Medical Doctor, while there's an pandemic, you only require small amounts of vaccine to heal a sick patient. Work with the Chemist to distribute your cures more efficiently. +As a Medical Doctor, try messing with the virology lab sometime! Viruses can range from healing powers so great that you can heal out of critical status, or diseases so dangerous they can kill the entire crew with airborne spontaneous combustion. Experiment! As a Monkey, you can crawl through air or scrubber vents by alt+left clicking them. You must drop everything you are wearing and holding to do this, however. As a Monkey, you can still wear a few human items, such as backpacks, gas masks and hats, and still have two free hands. As a Morph, you can talk while disguised, but your words have a chance of being slurred, giving you away! @@ -149,6 +160,7 @@ As the AI, you can take pictures with your camera and upload them to newscasters As the AI, you can use CTRL + 1-9 to set a location hotkey for your camera, allowing you to save the location and jump to it at will. Tilde and zero will return you to the last spot you jumped from, and the numpad numbers act as aliases to the regular number keys. As the Bartender, the drinks you start with only give you the basics. If you want more advanced mixtures, look into working with chemistry, hydroponics, or even mining for things to grind up and throw in! As the Bartender, you can use a circular saw on your shotgun to make it easier to store. +As the Bartender, remember to set up the bar sign by walking up to it and clicking it! As the Blob, don't neglect the creation of factories. These create spores that carry your reagent and can chase crew members far further than you. Spores can also be rallied to swarm the crew and cause panic, and can even take over corpses to create much more dangerous blob zombies! As the Blob, keep your core some distance from space, as it is both expensive to expand onto space, easy to be attacked from, and does not count towards your win condition. Emitter platforms built in space are especially dangerous. As the Blob, removing strong blobs, resource nodes, factories, and nodes will give you 4, 15, 25, and 25 resources back, respectively. @@ -175,10 +187,13 @@ As the Clown, eating bananas heals you slightly. Honk! As the Clown, if you lose your banana peel, you can still slip people with your PDA! Honk! As the Clown, if you're a Traitor and get an emag on sale (or convince another traitor), you can emag your Clown Car to unlock a variety of new functions, including the Siege Mode, which will allow you to launch your passengers, preferably directly into the Supermatter! Or into space. As the Clown, spice your gimmicks up! Nobody likes a one-trick pony. +As the Clown, click with one long balloon in hand onto another to create a balloon animal! Each combination of colours has its own unique result. As the Clown, you can use your stamp on a sheet of cardboard as the first step of making a honkbot. Fun for the whole crew! As the Clown, your Grail is the mineral bananium, which can be given to the Roboticist to build you a fun and robust mech beloved by everyone. As the Curator, be sure to keep the shelves stocked and the library clean for crew. As the Curator, you are not completely defenseless. Your whip easily disarms people, your laser pointer can blind humans and cyborgs, and you can hide items in wirecut books. +As the Coroner, you are more comfortable working on cadavers. You can perform autopsies or harvest organs from corpses a lot faster than your Medical Doctor counterparts. Work in tandem with them by helping prepare bodies for revival. +As the Coroner, you can perform autopsies on corpses recovered from strange circumstances with your handheld autopsy scanner to discover how they died. By teaming up with a Detective, you can solve several cases together! As the Detective, people leave fingerprints everywhere and on everything. With the exception of white latex, gloves will hide them. All is not lost, however, as gloves leave fibers specific to their kind such as black or nitrile, pointing to a general department. As the Detective, you can use your forensics scanner from a distance. Use this to scan boxes or other storage containers. As the Detective, your revolver can be loaded with .357 ammunition obtained from a hacked autolathe. Firing it has a decent chance to blow up your revolver. @@ -198,9 +213,6 @@ As the Quartermaster, be sure to check the manifests on crates you receive to ma As the Quartermaster, you can construct an express supply console that instantly delivers crates by drop pod. The impact will cause a small explosion as well. As the Research Director, you can lock down cyborgs instead of blowing them up. Then you can have their laws reset or if that doesn't work, safely dismantled. As the Research Director, you can take AIs out of their cores by loading them into an intelliCard, which lets you see their laws, even ion/syndicate ones. It can then be placed into an AI system integrity restorer computer to revive and/or repair them. -As the Virologist, robotic organs can give immunity to disease effects and transmissibility. Make use of the inorganic biology symptom to bypass the protection. -As the Virologist, you only require small amounts of vaccine to heal a sick patient. Work with the Chemist to distribute your cures more efficiently. -As the Virologist, your viruses can range from healing powers so great that you can heal out of critical status, or diseases so dangerous they can kill the entire crew with airborne spontaneous combustion. Experiment! As the Warden, if a prisoner's crimes are heinous enough you can put them in permabrig or the gulag. Make sure to check on them once in a while! As the Warden, keep a close eye on the armory at all times, as it is a favored strike point of nuclear operatives and cocky traitors. As the Warden, you can implant criminals you suspect might re-offend with devices that will track their location and allow you to remotely inject them with disabling chemicals. From 18cb6a92cbc73899413da14528e73fb7e7ca302a Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Mon, 29 Apr 2024 14:32:27 +1200 Subject: [PATCH 19/22] Automatic changelog for PR #82923 [ci skip] --- html/changelogs/AutoChangeLog-pr-82923.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-82923.yml diff --git a/html/changelogs/AutoChangeLog-pr-82923.yml b/html/changelogs/AutoChangeLog-pr-82923.yml new file mode 100644 index 0000000000000..8e605724396c6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-82923.yml @@ -0,0 +1,4 @@ +author: "YesterdaysPromise" +delete-after: True +changes: + - bugfix: "The start-of-the-round tips will no longer feature virologists, but will, however, start featuring heretics and coroners." \ No newline at end of file From c7617381b06041cc0d5f77a08466a98d629abc1f Mon Sep 17 00:00:00 2001 From: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Date: Mon, 29 Apr 2024 17:15:15 +0530 Subject: [PATCH 20/22] Eigenstasium Fix (#82930) ## About The Pull Request - Fixes #82921. Closets that are not linked by the closet anomaly station trait will be tainted blue, show sparks & do all that jazz once again. In other words they are not subtle - Closes #82353. Duplicate of the above. Sprays work since the above issue is fixed ## Changelog :cl: fix: Eigenstasium exposed & Anomaly station trait affected closets work again. Eigenstasium closets are tainted blue /:cl: --- code/datums/eigenstate.dm | 3 +-- .../reagents/chemistry/reagents/unique/eigenstasium.dm | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/code/datums/eigenstate.dm b/code/datums/eigenstate.dm index 3bba746320997..b25fa657eb6e4 100644 --- a/code/datums/eigenstate.dm +++ b/code/datums/eigenstate.dm @@ -119,8 +119,7 @@ GLOBAL_DATUM_INIT(eigenstate_manager, /datum/eigenstate_manager, new) spark_time = world.time //Calls a special proc for the atom if needed (closets use bust_open()) SEND_SIGNAL(eigen_target, COMSIG_EIGENSTATE_ACTIVATE) - if(!subtle) - return COMPONENT_CLOSET_INSERT_INTERRUPT + return COMPONENT_CLOSET_INSERT_INTERRUPT ///Prevents tool use on the item /datum/eigenstate_manager/proc/tool_interact(atom/source, mob/user, obj/item/item) diff --git a/code/modules/reagents/chemistry/reagents/unique/eigenstasium.dm b/code/modules/reagents/chemistry/reagents/unique/eigenstasium.dm index 7c18c7e201466..8c093888028e9 100644 --- a/code/modules/reagents/chemistry/reagents/unique/eigenstasium.dm +++ b/code/modules/reagents/chemistry/reagents/unique/eigenstasium.dm @@ -116,6 +116,6 @@ var/list/lockers = list() for(var/obj/structure/closet/closet in exposed_turf.contents) lockers += closet - if(!length(lockers)) + if(!lockers.len) return - GLOB.eigenstate_manager.create_new_link(lockers) + GLOB.eigenstate_manager.create_new_link(lockers, subtle = FALSE) From a57d02bf4695f6501e20ab7650f0d4fe36cac489 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Mon, 29 Apr 2024 23:45:34 +1200 Subject: [PATCH 21/22] Automatic changelog for PR #82930 [ci skip] --- html/changelogs/AutoChangeLog-pr-82930.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-82930.yml diff --git a/html/changelogs/AutoChangeLog-pr-82930.yml b/html/changelogs/AutoChangeLog-pr-82930.yml new file mode 100644 index 0000000000000..331d45ea609e6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-82930.yml @@ -0,0 +1,4 @@ +author: "SyncIt21" +delete-after: True +changes: + - bugfix: "Eigenstasium exposed & Anomaly station trait affected closets work again. Eigenstasium closets are tainted blue" \ No newline at end of file From 7e944021b10c4c0cb792cfb5a5f20c689f754022 Mon Sep 17 00:00:00 2001 From: larentoun <31931237+larentoun@users.noreply.github.com> Date: Mon, 29 Apr 2024 20:42:41 +0300 Subject: [PATCH 22/22] Use defines for spellbook categories (#82938) ## About The Pull Request Spellbook entries' categories now use defines ## Why It's Good For The Game Prettier Less of a chance for misspelling a category Renaming a category is easier (for localized downstreams especially less strain) --- .../equipment/spellbook_entries/assistance.dm | 27 +++++----- .../equipment/spellbook_entries/defensive.dm | 41 +++++++++------- .../equipment/spellbook_entries/mobility.dm | 21 ++++---- .../equipment/spellbook_entries/offensive.dm | 49 ++++++++++--------- 4 files changed, 75 insertions(+), 63 deletions(-) diff --git a/code/modules/antagonists/wizard/equipment/spellbook_entries/assistance.dm b/code/modules/antagonists/wizard/equipment/spellbook_entries/assistance.dm index aece8d6741ba3..69c33e751ece7 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook_entries/assistance.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook_entries/assistance.dm @@ -1,44 +1,45 @@ +#define SPELLBOOK_CATEGORY_ASSISTANCE "Assistance" // Wizard spells that assist the caster in some way /datum/spellbook_entry/summonitem name = "Summon Item" desc = "Recalls a previously marked item to your hand from anywhere in the universe." spell_type = /datum/action/cooldown/spell/summonitem - category = "Assistance" + category = SPELLBOOK_CATEGORY_ASSISTANCE cost = 1 /datum/spellbook_entry/charge name = "Charge" desc = "This spell can be used to recharge a variety of things in your hands, from magical artifacts to electrical components. A creative wizard can even use it to grant magical power to a fellow magic user." spell_type = /datum/action/cooldown/spell/charge - category = "Assistance" + category = SPELLBOOK_CATEGORY_ASSISTANCE cost = 1 /datum/spellbook_entry/shapeshift name = "Wild Shapeshift" desc = "Take on the shape of another for a time to use their natural abilities. Once you've made your choice it cannot be changed." spell_type = /datum/action/cooldown/spell/shapeshift/wizard - category = "Assistance" + category = SPELLBOOK_CATEGORY_ASSISTANCE cost = 1 /datum/spellbook_entry/tap name = "Soul Tap" desc = "Fuel your spells using your own soul!" spell_type = /datum/action/cooldown/spell/tap - category = "Assistance" + category = SPELLBOOK_CATEGORY_ASSISTANCE cost = 1 /datum/spellbook_entry/item/staffanimation name = "Staff of Animation" desc = "An arcane staff capable of shooting bolts of eldritch energy which cause inanimate objects to come to life. This magic doesn't affect machines." item_path = /obj/item/gun/magic/staff/animate - category = "Assistance" + category = SPELLBOOK_CATEGORY_ASSISTANCE /datum/spellbook_entry/item/soulstones name = "Soulstone Shard Kit" desc = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying. \ The spell Artificer allows you to create arcane machines for the captured souls to pilot." item_path = /obj/item/storage/belt/soulstone/full - category = "Assistance" + category = SPELLBOOK_CATEGORY_ASSISTANCE /datum/spellbook_entry/item/soulstones/try_equip_item(mob/living/carbon/human/user, obj/item/to_equip) var/was_equipped = user.equip_to_slot_if_possible(to_equip, ITEM_SLOT_BELT, disable_warning = TRUE) @@ -56,13 +57,13 @@ name = "A Necromantic Stone" desc = "A Necromantic stone is able to resurrect three dead individuals as skeletal thralls for you to command." item_path = /obj/item/necromantic_stone - category = "Assistance" + category = SPELLBOOK_CATEGORY_ASSISTANCE /datum/spellbook_entry/item/contract name = "Contract of Apprenticeship" desc = "A magical contract binding an apprentice wizard to your service, using it will summon them to your side." item_path = /obj/item/antag_spawner/contract - category = "Assistance" + category = SPELLBOOK_CATEGORY_ASSISTANCE refundable = TRUE /datum/spellbook_entry/item/guardian @@ -70,7 +71,7 @@ desc = "A deck of guardian tarot cards, capable of binding a personal guardian to your body. There are multiple types of guardian available, but all of them will transfer some amount of damage to you. \ It would be wise to avoid buying these with anything capable of causing you to swap bodies with others." item_path = /obj/item/guardian_creator/wizard - category = "Assistance" + category = SPELLBOOK_CATEGORY_ASSISTANCE /datum/spellbook_entry/item/bloodbottle name = "Bottle of Blood" @@ -80,7 +81,7 @@ in their killing, and you yourself may become a victim." item_path = /obj/item/antag_spawner/slaughter_demon limit = 3 - category = "Assistance" + category = SPELLBOOK_CATEGORY_ASSISTANCE refundable = TRUE /datum/spellbook_entry/item/hugbottle @@ -95,7 +96,7 @@ item_path = /obj/item/antag_spawner/slaughter_demon/laughter cost = 1 //non-destructive; it's just a jape, sibling! limit = 3 - category = "Assistance" + category = SPELLBOOK_CATEGORY_ASSISTANCE refundable = TRUE /datum/spellbook_entry/item/vendormancer @@ -105,4 +106,6 @@ throw around to squash oponents or be directly detonated. When out of \ charges a long channel will restore the charges." item_path = /obj/item/runic_vendor_scepter - category = "Assistance" + category = SPELLBOOK_CATEGORY_ASSISTANCE + +#undef SPELLBOOK_CATEGORY_ASSISTANCE diff --git a/code/modules/antagonists/wizard/equipment/spellbook_entries/defensive.dm b/code/modules/antagonists/wizard/equipment/spellbook_entries/defensive.dm index 1ffac3cf3af4e..a66d99c21c88d 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook_entries/defensive.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook_entries/defensive.dm @@ -1,49 +1,50 @@ +#define SPELLBOOK_CATEGORY_DEFENSIVE "Defensive" // Defensive wizard spells /datum/spellbook_entry/magicm name = "Magic Missile" desc = "Fires several, slow moving, magic projectiles at nearby targets." spell_type = /datum/action/cooldown/spell/aoe/magic_missile - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE /datum/spellbook_entry/disabletech name = "Disable Tech" desc = "Disables all weapons, cameras and most other technology in range." spell_type = /datum/action/cooldown/spell/emp/disable_tech - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE cost = 1 /datum/spellbook_entry/repulse name = "Repulse" desc = "Throws everything around the user away." spell_type = /datum/action/cooldown/spell/aoe/repulse/wizard - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE /datum/spellbook_entry/lightning_packet name = "Thrown Lightning" desc = "Forged from eldrich energies, a packet of pure power, \ known as a spell packet will appear in your hand, that when thrown will stun the target." spell_type = /datum/action/cooldown/spell/conjure_item/spellpacket - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE /datum/spellbook_entry/timestop name = "Time Stop" desc = "Stops time for everyone except for you, allowing you to move freely \ while your enemies and even projectiles are frozen." spell_type = /datum/action/cooldown/spell/timestop - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE /datum/spellbook_entry/smoke name = "Smoke" desc = "Spawns a cloud of choking smoke at your location." spell_type = /datum/action/cooldown/spell/smoke - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE cost = 1 /datum/spellbook_entry/forcewall name = "Force Wall" desc = "Create a magical barrier that only you can pass through." spell_type = /datum/action/cooldown/spell/forcewall - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE cost = 1 /datum/spellbook_entry/lichdom @@ -53,28 +54,28 @@ no matter the circumstances. Be wary - with each revival, your body will become weaker, and \ it will become easier for others to find your item of power." spell_type = /datum/action/cooldown/spell/lichdom - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE no_coexistance_typecache = list(/datum/action/cooldown/spell/splattercasting) /datum/spellbook_entry/chuunibyou name = "Chuuni Invocations" desc = "Makes all your spells shout invocations, and the invocations become... stupid. You heal slightly after casting a spell." spell_type = /datum/action/cooldown/spell/chuuni_invocations - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE /datum/spellbook_entry/spacetime_dist name = "Spacetime Distortion" desc = "Entangle the strings of space-time in an area around you, \ randomizing the layout and making proper movement impossible. The strings vibrate..." spell_type = /datum/action/cooldown/spell/spacetime_dist - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE cost = 1 /datum/spellbook_entry/the_traps name = "The Traps!" desc = "Summon a number of traps around you. They will damage and enrage any enemies that step on them." spell_type = /datum/action/cooldown/spell/conjure/the_traps - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE cost = 1 /datum/spellbook_entry/bees @@ -82,7 +83,7 @@ desc = "This spell magically kicks a transdimensional beehive, \ instantly summoning a swarm of bees to your location. These bees are NOT friendly to anyone." spell_type = /datum/action/cooldown/spell/conjure/bee - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE /datum/spellbook_entry/duffelbag name = "Bestow Cursed Duffel Bag" @@ -91,7 +92,7 @@ if it is not fed regularly, and regardless of whether or not it's been fed, \ it will slow the person wearing it down significantly." spell_type = /datum/action/cooldown/spell/touch/duffelbag - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE cost = 1 /datum/spellbook_entry/item/staffhealing @@ -99,26 +100,26 @@ desc = "An altruistic staff that can heal the lame and raise the dead." item_path = /obj/item/gun/magic/staff/healing cost = 1 - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE /datum/spellbook_entry/item/lockerstaff name = "Staff of the Locker" desc = "A staff that shoots lockers. It eats anyone it hits on its way, leaving a welded locker with your victims behind." item_path = /obj/item/gun/magic/staff/locker - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE /datum/spellbook_entry/item/scryingorb name = "Scrying Orb" desc = "An incandescent orb of crackling energy. Using it will allow you to release your ghost while alive, allowing you to spy upon the station and talk to the deceased. In addition, buying it will permanently grant you X-ray vision." item_path = /obj/item/scrying - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE /datum/spellbook_entry/item/wands name = "Wand Assortment" desc = "A collection of wands that allow for a wide variety of utility. \ Wands have a limited number of charges, so be conservative with their use. Comes in a handy belt." item_path = /obj/item/storage/belt/wands/full - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE /datum/spellbook_entry/item/wands/try_equip_item(mob/living/carbon/human/user, obj/item/to_equip) var/was_equipped = user.equip_to_slot_if_possible(to_equip, ITEM_SLOT_BELT, disable_warning = TRUE) @@ -130,7 +131,7 @@ while providing more protection against attacks and the void of space. \ Also grants a battlemage shield." item_path = /obj/item/mod/control/pre_equipped/enchanted - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE /datum/spellbook_entry/item/armor/try_equip_item(mob/living/carbon/human/user, obj/item/to_equip) var/obj/item/mod/control/mod = to_equip @@ -151,5 +152,7 @@ name = "Battlemage Armour Charges" desc = "A powerful defensive rune, it will grant eight additional charges to a battlemage shield." item_path = /obj/item/wizard_armour_charge - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE cost = 1 + +#undef SPELLBOOK_CATEGORY_DEFENSIVE diff --git a/code/modules/antagonists/wizard/equipment/spellbook_entries/mobility.dm b/code/modules/antagonists/wizard/equipment/spellbook_entries/mobility.dm index 6a8f322a3a5f4..bc09b092f6cd9 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook_entries/mobility.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook_entries/mobility.dm @@ -1,47 +1,48 @@ +#define SPELLBOOK_CATEGORY_MOBILITY "Mobility" // Wizard spells that aid mobiilty(or stealth?) /datum/spellbook_entry/mindswap name = "Mindswap" desc = "Allows you to switch bodies with a target next to you. You will both fall asleep when this happens, and it will be quite obvious that you are the target's body if someone watches you do it." spell_type = /datum/action/cooldown/spell/pointed/mind_transfer - category = "Mobility" + category = SPELLBOOK_CATEGORY_MOBILITY /datum/spellbook_entry/knock name = "Knock" desc = "Opens nearby doors and closets." spell_type = /datum/action/cooldown/spell/aoe/knock - category = "Mobility" + category = SPELLBOOK_CATEGORY_MOBILITY cost = 1 /datum/spellbook_entry/blink name = "Blink" desc = "Randomly teleports you a short distance." spell_type = /datum/action/cooldown/spell/teleport/radius_turf/blink - category = "Mobility" + category = SPELLBOOK_CATEGORY_MOBILITY /datum/spellbook_entry/teleport name = "Teleport" desc = "Teleports you to an area of your selection." spell_type = /datum/action/cooldown/spell/teleport/area_teleport/wizard - category = "Mobility" + category = SPELLBOOK_CATEGORY_MOBILITY /datum/spellbook_entry/jaunt name = "Ethereal Jaunt" desc = "Turns your form ethereal, temporarily making you invisible and able to pass through walls." spell_type = /datum/action/cooldown/spell/jaunt/ethereal_jaunt - category = "Mobility" + category = SPELLBOOK_CATEGORY_MOBILITY /datum/spellbook_entry/swap name = "Swap" desc = "Switch places with any living target within nine tiles. Right click to mark a secondary target. You will always swap to your primary target." spell_type = /datum/action/cooldown/spell/pointed/swap - category = "Mobility" + category = SPELLBOOK_CATEGORY_MOBILITY cost = 1 /datum/spellbook_entry/item/warpwhistle name = "Warp Whistle" desc = "A strange whistle that will transport you to a distant safe place on the station. There is a window of vulnerability at the beginning of every use." item_path = /obj/item/warp_whistle - category = "Mobility" + category = SPELLBOOK_CATEGORY_MOBILITY cost = 1 /datum/spellbook_entry/item/staffdoor @@ -49,11 +50,13 @@ desc = "A particular staff that can mold solid walls into ornate doors. Useful for getting around in the absence of other transportation. Does not work on glass." item_path = /obj/item/gun/magic/staff/door cost = 1 - category = "Mobility" + category = SPELLBOOK_CATEGORY_MOBILITY /datum/spellbook_entry/item/teleport_rod name = /obj/item/teleport_rod::name desc = /obj/item/teleport_rod::desc item_path = /obj/item/teleport_rod cost = 2 // Puts it at 3 cost if you go for safety instant summons, but teleporting anywhere on screen is pretty good. - category = "Mobility" + category = SPELLBOOK_CATEGORY_MOBILITY + +#undef SPELLBOOK_CATEGORY_MOBILITY diff --git a/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm b/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm index b23de0aa6b069..d919c5e768ff6 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm @@ -1,27 +1,28 @@ +#define SPELLBOOK_CATEGORY_OFFENSIVE "Offensive" // Offensive wizard spells /datum/spellbook_entry/fireball name = "Fireball" desc = "Fires an explosive fireball at a target. Considered a classic among all wizards." spell_type = /datum/action/cooldown/spell/pointed/projectile/fireball - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/spell_cards name = "Spell Cards" desc = "Blazing hot rapid-fire homing cards. Send your foes to the shadow realm with their mystical power!" spell_type = /datum/action/cooldown/spell/pointed/projectile/spell_cards - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/rod_form name = "Rod Form" desc = "Take on the form of an immovable rod, destroying all in your path. Purchasing this spell multiple times will also increase the rod's damage and travel range." spell_type = /datum/action/cooldown/spell/rod_form - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/disintegrate name = "Smite" desc = "Charges your hand with an unholy energy that can be used to cause a touched victim to violently explode." spell_type = /datum/action/cooldown/spell/touch/smite - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/summon_simians name = "Summon Simians" @@ -29,45 +30,45 @@ summons primal monkeys and lesser gorillas that will promptly flip out and attack everything in sight. Fun! \ Their lesser, easily manipulable minds will be convinced you are one of their allies, but only for a minute. Unless you also are a monkey." spell_type = /datum/action/cooldown/spell/conjure/simian - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/blind name = "Blind" desc = "Temporarily blinds a single target." spell_type = /datum/action/cooldown/spell/pointed/blind - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE cost = 1 /datum/spellbook_entry/mutate name = "Mutate" desc = "Causes you to turn into a hulk and gain laser vision for a short while." spell_type = /datum/action/cooldown/spell/apply_mutations/mutate - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/fleshtostone name = "Flesh to Stone" desc = "Charges your hand with the power to turn victims into inert statues for a long period of time." spell_type = /datum/action/cooldown/spell/touch/flesh_to_stone - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/teslablast name = "Tesla Blast" desc = "Charge up a tesla arc and release it at a random nearby target! You can move freely while it charges. The arc jumps between targets and can knock them down." spell_type = /datum/action/cooldown/spell/charged/beam/tesla - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/lightningbolt name = "Lightning Bolt" desc = "Fire a lightning bolt at your foes! It will jump between targets, but can't knock them down." spell_type = /datum/action/cooldown/spell/pointed/projectile/lightningbolt - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE cost = 1 /datum/spellbook_entry/infinite_guns name = "Lesser Summon Guns" desc = "Why reload when you have infinite guns? Summons an unending stream of bolt action rifles that deal little damage, but will knock targets down. Requires both hands free to use. Learning this spell makes you unable to learn Arcane Barrage." spell_type = /datum/action/cooldown/spell/conjure_item/infinite_guns/gun - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE cost = 3 no_coexistance_typecache = list(/datum/action/cooldown/spell/conjure_item/infinite_guns/arcane_barrage) @@ -75,7 +76,7 @@ name = "Arcane Barrage" desc = "Fire a torrent of arcane energy at your foes with this (powerful) spell. Deals much more damage than Lesser Summon Guns, but won't knock targets down. Requires both hands free to use. Learning this spell makes you unable to learn Lesser Summon Gun." spell_type = /datum/action/cooldown/spell/conjure_item/infinite_guns/arcane_barrage - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE cost = 3 no_coexistance_typecache = list(/datum/action/cooldown/spell/conjure_item/infinite_guns/gun) @@ -83,68 +84,70 @@ name = "Barnyard Curse" desc = "This spell dooms an unlucky soul to possess the speech and facial attributes of a barnyard animal." spell_type = /datum/action/cooldown/spell/pointed/barnyardcurse - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/splattercasting name = "Splattercasting" desc = "Dramatically lowers the cooldown on all spells, but each one will cost blood, as well as it naturally \ draining from you over time. You can replenish it from your victims, specifically their necks." spell_type = /datum/action/cooldown/spell/splattercasting - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE no_coexistance_typecache = list(/datum/action/cooldown/spell/lichdom) /datum/spellbook_entry/sanguine_strike name = "Exsanguinating Strike" desc = "Sanguine spell that enchants your next weapon strike to deal more damage, heal you for damage dealt, and refill blood." spell_type = /datum/action/cooldown/spell/sanguine_strike - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/scream_for_me name = "Scream For Me" desc = "Sadistic sanguine spell that inflicts numerous severe blood wounds all over the victim's body." spell_type = /datum/action/cooldown/spell/touch/scream_for_me cost = 1 - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/item/staffchaos name = "Staff of Chaos" desc = "A caprious tool that can fire all sorts of magic without any rhyme or reason. Using it on people you care about is not recommended." item_path = /obj/item/gun/magic/staff/chaos - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/item/staffchange name = "Staff of Change" desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself." item_path = /obj/item/gun/magic/staff/change - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/item/mjolnir name = "Mjolnir" desc = "A mighty hammer on loan from Thor, God of Thunder. It crackles with barely contained power." item_path = /obj/item/mjollnir - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/item/singularity_hammer name = "Singularity Hammer" desc = "A hammer that creates an intensely powerful field of gravity where it strikes, pulling everything nearby to the point of impact." item_path = /obj/item/singularityhammer - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/item/spellblade name = "Spellblade" desc = "A sword capable of firing blasts of energy which rip targets limb from limb." item_path = /obj/item/gun/magic/staff/spellblade - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/item/highfrequencyblade name = "High Frequency Blade" desc = "An incredibly swift enchanted blade resonating at a frequency high enough to be able to slice through anything." item_path = /obj/item/highfrequencyblade/wizard - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE cost = 3 /datum/spellbook_entry/item/frog_contract name = "Frog Contract" desc = "Sign a pact with the frogs to have your own destructive pet guardian!" item_path = /obj/item/frog_contract - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE + +#undef SPELLBOOK_CATEGORY_OFFENSIVE