From 751bfc08bb84441c17aaaa0f9792e02456163906 Mon Sep 17 00:00:00 2001 From: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Tue, 26 May 2026 19:27:09 -0400 Subject: [PATCH] Removes the IC tab (#95893) ## About The Pull Request Removes the IC tab in its entirety - Some mobs (Blob Minion & Lightgeist) had manually removed the "pull" verb, this replaces it with taking away their pull force. - Lightgeist had their "Me" verb manually removed, this is replaced by giving them Emotemute trait (the same that mime's bane gives) - Floor Changer: You can now RMB the arrow buttons to look in a direction w/o moving. Added a tip to help with this. - Exit Hivemind: Already an action button and was removed without further edits ### Removed entirely Rest Resist Look Up/Down Move Upwards/Down Activate Held Object Open Language Menu Memories View Skills ### Moved to command bar (secret verb ooh) because I am biased Sleep Navigate ### Martial Arts Martial Arts had a button to see your current skills & the ability to cycle between artstyles. This was replaced with 1 action button that does both of these. image Name auto-updates as you swap artstyle to whatever help verb the current style uses. Mention of RMB in the name is only there if you have more than 1 martial art, but the desc will remain just so players can see it even if they only have one, for future reference. ## Why It's Good For The Game Brings greater visibility to Martial Art stuff, and especially since the stat panel is being made optional we should not be hiding ANYTHING in there. This also helps me with my project listed in https://hackmd.io/443_dE5lRWeEAp9bjGcKYw?view And also fixes some sorta-removed features due to removing verbs not matching people's actual powers due to new features like "Custom Me" and "Ctrl Clicking". ## Changelog :cl: SirNightKnight (sprites), JohnFulpWillard del: Deleted the "IC" tab of the stat panel. fix: Lightgeists can't emote or pull as intended. fix: Blob minions can't pull again. qol: Martial Art users now have an action button for their artstyle-related businesses, rather than it being in the stat panel. qol: You can now right-click the move up/down UI buttons to look in the direction without moving. /:cl: --- code/_onclick/click_ctrl.dm | 2 +- .../hud/screen_objects/screen_objects.dm | 22 ++++- code/datums/components/blob_minion.dm | 2 - code/datums/martial/_action.dm | 39 +++++++++ code/datums/martial/_martial.dm | 32 +++---- code/datums/martial/boxing.dm | 78 +++++++++--------- code/datums/martial/cqc.dm | 24 +++--- code/datums/martial/plasma_fist.dm | 21 +++-- code/datums/martial/sleeping_carp.dm | 35 ++++---- code/datums/martial/spiders_bite.dm | 13 ++- .../antagonists/changeling/powers/absorb.dm | 6 +- .../mining_loot/megafauna/colossus.dm | 1 - .../modules/mob/dead/new_player/new_player.dm | 6 +- .../mob/dead/observer/observer_movement.dm | 6 -- code/modules/mob/eye/eye.dm | 6 -- .../mob/living/basic/blob_minions/blob_mob.dm | 1 + .../living/basic/space_fauna/lightgeist.dm | 8 +- code/modules/mob/living/living.dm | 43 ++++------ code/modules/mob/living/navigation.dm | 2 +- code/modules/mob/living/silicon/ai/ai.dm | 6 -- code/modules/mob/mob.dm | 34 +------- code/modules/mob/mob_movement.dm | 10 +-- code/modules/unit_tests/resist.dm | 2 +- icons/hud/actions.dmi | Bin 9792 -> 10089 bytes icons/mob/actions/backgrounds.dmi | Bin 12450 -> 12751 bytes strings/tips.txt | 1 + tgstation.dme | 1 + 27 files changed, 187 insertions(+), 214 deletions(-) create mode 100644 code/datums/martial/_action.dm diff --git a/code/_onclick/click_ctrl.dm b/code/_onclick/click_ctrl.dm index e80f8fa05cb..19c86970aee 100644 --- a/code/_onclick/click_ctrl.dm +++ b/code/_onclick/click_ctrl.dm @@ -41,7 +41,7 @@ if(grab(target) != GRAB_SKIP) changeNext_move(CLICK_CD_MELEE) return - pulled(target) + start_pulling(target) /** * Ctrl mouse wheel click diff --git a/code/_onclick/hud/screen_objects/screen_objects.dm b/code/_onclick/hud/screen_objects/screen_objects.dm index 7631674c460..84f71ea788a 100644 --- a/code/_onclick/hud/screen_objects/screen_objects.dm +++ b/code/_onclick/hud/screen_objects/screen_objects.dm @@ -396,8 +396,11 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen) // I hate this place var/vertical = FALSE /atom/movable/screen/floor_changer/Click(location,control,params) - var/list/modifiers = params2list(params) + var/mob/living/user = get_mob() + if(usr != user) + return + var/list/modifiers = params2list(params) var/mouse_position if(vertical) @@ -406,10 +409,23 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen) // I hate this place mouse_position = text2num(LAZYACCESS(modifiers, ICON_X)) if(mouse_position > 16) - usr.up() + //non-living can't RMB anyway, but just a precaution. + if(LAZYACCESS(modifiers, RIGHT_CLICK) && isliving(user)) + if(user.looking_vertically == UP) + user.end_look() + else + user.look_up() + return + hud.mymob.up() return - usr.down() + if(LAZYACCESS(modifiers, RIGHT_CLICK) && isliving(user)) + if(user.looking_vertically == DOWN) + user.end_look() + else + user.look_down() + return + hud.mymob.down() return /atom/movable/screen/floor_changer/vertical diff --git a/code/datums/components/blob_minion.dm b/code/datums/components/blob_minion.dm index 8e8f796d3ae..6549410f4a4 100644 --- a/code/datums/components/blob_minion.dm +++ b/code/datums/components/blob_minion.dm @@ -74,7 +74,6 @@ var/mob/living/living_parent = parent living_parent.add_faction(ROLE_BLOB) ADD_TRAIT(parent, TRAIT_BLOB_ALLY, REF(src)) - remove_verb(parent, /mob/living/verb/pulled) // No dragging people into the blob RegisterSignal(parent, COMSIG_MOB_MIND_INITIALIZED, PROC_REF(on_mind_init)) RegisterSignal(parent, COMSIG_ATOM_UPDATE_ICON, PROC_REF(on_update_appearance)) RegisterSignal(parent, COMSIG_MOB_GET_STATUS_TAB_ITEMS, PROC_REF(on_update_status_tab)) @@ -98,7 +97,6 @@ living_parent.pass_flags &= ~PASSBLOB living_parent.remove_faction(ROLE_BLOB) REMOVE_TRAIT(parent, TRAIT_BLOB_ALLY, REF(src)) - add_verb(parent, /mob/living/verb/pulled) UnregisterSignal(parent, list( COMSIG_ATOM_BLOB_ACT, COMSIG_ATOM_FIRE_ACT, diff --git a/code/datums/martial/_action.dm b/code/datums/martial/_action.dm new file mode 100644 index 00000000000..72d3dadc39b --- /dev/null +++ b/code/datums/martial/_action.dm @@ -0,0 +1,39 @@ +/datum/action/swap_arts + name = "Remember the Basics" //this is dynamic, uses `update_button_name` + desc = "LMB: See your movelist. RMB: Swap artstyle, if you have more than one." + background_icon_state = "bg_martial_arts" + button_icon_state = "martial" + + ///The martial arts currently used for the name & help information. + var/datum/martial_art/current_used_art + +/datum/action/swap_arts/Destroy() + current_used_art = null + return ..() + +/datum/action/swap_arts/New(Target, datum/martial_art/starting_style) + current_used_art = starting_style + return ..() + +/datum/action/swap_arts/update_button_name(atom/movable/screen/movable/action_button/button, force, datum/martial_art/new_art) + if(new_art) + current_used_art = new_art + name = "[current_used_art.help_verb]" + var/mob/living/living_owner = owner + if(LAZYLEN(living_owner.martial_arts) >= 2) + name += "/Swap Style" + return ..() + +/datum/action/swap_arts/Trigger(mob/living/clicker, trigger_flags) + . = ..() + var/mob/living/living_owner = owner + if(trigger_flags & TRIGGER_SECONDARY_ACTION && (LAZYLEN(living_owner.martial_arts) >= 2)) + clicker.cycle_style() + return TRUE + var/help_information = current_used_art.get_style_help() + if(isnull(help_information)) + to_chat(clicker, span_notice("[current_used_art.name] doesn't have any combat information!")) + return TRUE + for(var/info in help_information) + to_chat(clicker, info) + return TRUE diff --git a/code/datums/martial/_martial.dm b/code/datums/martial/_martial.dm index 1281d028b22..53dbaae321d 100644 --- a/code/datums/martial/_martial.dm +++ b/code/datums/martial/_martial.dm @@ -19,7 +19,7 @@ VAR_PRIVATE/datum/weakref/current_target /// Path to verb to display help text for this martial art. - var/help_verb + var/help_verb = "Remember the Basics" /// If TRUE, this martial art smashes tables when performing table slams and head smashes var/smashes_tables = FALSE /// If TRUE, a combo meter will be displayed on the HUD for the current streak @@ -327,9 +327,11 @@ LAZYINSERT(new_holder.martial_arts, 2, src) else LAZYADD(new_holder.martial_arts, src) + + if(LAZYLEN(new_holder.martial_arts) == 1 ? get_style_help() : !(locate(/datum/action/swap_arts) in new_holder.actions)) + var/datum/action/swap_arts/new_action = new(new_holder, src) + new_action.Grant(new_holder) if(LAZYLEN(new_holder.martial_arts) >= 2) - // newly learned martials are preferred to be the active one - add_verb(new_holder, /mob/living/proc/verb_switch_style) // if the active one is locked, this will no-op, which is fine new_holder.switch_style(GET_ACTIVE_MARTIAL_ART(new_holder), src) else if(!active) @@ -369,8 +371,9 @@ UnregisterSignal(old_holder, COMSIG_QDELETING) LAZYREMOVE(old_holder.martial_arts, src) holder = null - if(LAZYLEN(old_holder.martial_arts) <= 1) - remove_verb(old_holder, /mob/living/proc/verb_switch_style) + if(LAZYLEN(old_holder.martial_arts) < 1) //no more arts, we check above to switch style already. + var/datum/action/swap_arts/swap_button = locate() in old_holder.actions + qdel(swap_button) return TRUE /** @@ -379,8 +382,6 @@ /datum/martial_art/proc/activate_style(mob/living/new_holder) SHOULD_CALL_PARENT(TRUE) active = TRUE - if(help_verb) - add_verb(new_holder, help_verb) RegisterSignal(new_holder, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(unarmed_strike)) RegisterSignal(new_holder, COMSIG_LIVING_GRAB, PROC_REF(attempt_grab)) RegisterSignals(new_holder, list(COMSIG_LIVING_TABLE_SLAMMING, COMSIG_LIVING_TABLE_LIMB_SLAMMING), PROC_REF(smash_table)) @@ -395,8 +396,6 @@ /datum/martial_art/proc/deactivate_style(mob/living/remove_from) SHOULD_CALL_PARENT(TRUE) active = FALSE - if(help_verb) - remove_verb(remove_from, help_verb) UnregisterSignal(remove_from, list(COMSIG_LIVING_UNARMED_ATTACK, COMSIG_LIVING_GRAB, COMSIG_LIVING_TABLE_SLAMMING, COMSIG_LIVING_TABLE_LIMB_SLAMMING)) remove_from.hud_used?.remove_screen_object(HUD_MOB_COMBO) @@ -405,11 +404,7 @@ SIGNAL_HANDLER source.hud_used.add_screen_object(/atom/movable/screen/combo, HUD_MOB_COMBO, HUD_GROUP_INFO, update_screen = TRUE) -/mob/living/proc/verb_switch_style() - set name = "Swap Style" - set desc = "Switch to a different martial arts style." - set category = "IC" - +/mob/living/proc/cycle_style() var/datum/martial_art/current = GET_ACTIVE_MARTIAL_ART(src) var/datum/martial_art/next = GET_NEXT_MARTIAL_ART(src) @@ -417,7 +412,7 @@ to_chat(src, span_warning("You can't stop practicing [current]! It's too ingrained in your muscle memory.")) return - switch_style(GET_ACTIVE_MARTIAL_ART(src), GET_NEXT_MARTIAL_ART(src)) + switch_style(current, next) to_chat(src, span_notice("You stop practicing [current] and start practicing [next].")) /// Deactivates the current martial art and activates the next one. @@ -428,6 +423,9 @@ if(!current_martial.active || next_martial.active) return + var/datum/action/swap_arts/swap_button = locate() in actions + swap_button.current_used_art = next_martial + current_martial.deactivate_style(src) next_martial.activate_style(src) // front of the list with ye @@ -436,3 +434,7 @@ // back of the list with ye LAZYREMOVE(martial_arts, current_martial) LAZYADD(martial_arts, current_martial) + +///To be overwritten for artstyle help. +/datum/martial_art/proc/get_style_help() + return FALSE diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm index 6318b34c4b7..2dc52641649 100644 --- a/code/datums/martial/boxing.dm +++ b/code/datums/martial/boxing.dm @@ -17,7 +17,7 @@ name = "Boxing" id = MARTIALART_BOXING pacifist_style = TRUE - help_verb = /mob/living/proc/boxing_help + help_verb = "Focus on your Form" /// Boolean on whether we are sportsmanlike in our tussling; TRUE means we have restrictions var/honorable_boxer = TRUE /// Can we perform grabs even if it would be dishonorable? @@ -379,22 +379,20 @@ return FALSE return ..() -/mob/living/proc/boxing_help() - set name = "Focus on your Form" - set desc = "You focus on how to make the most of your boxing form." - set category = "Boxing" - to_chat(usr, "You focus on your form, visualizing how best to throw a punch.") +/datum/martial_art/boxing/get_style_help() + . = list() - to_chat(usr, "What moves you perform depend on what mouse buttons you click, and whether the last button clicked matches which hand you have selected when you throw the last punch.") + . += "You focus on your form, visualizing how best to throw a punch." + . += "What moves you perform depend on what mouse buttons you click, and whether the last button clicked matches which hand you have selected when you throw the last punch." - to_chat(usr, "[span_notice("Straight Punch")]: Left Left/Right Right with the matching hand. Regular damage.") - to_chat(usr, "[span_notice("Jab")]: Left Left/Right Right with the opposite hand. Regular damage. If you're blind, you'll make a blind jab instead.") - to_chat(usr, "[span_notice("Left/Right Hook")]: Left Right/Right Left with the matching hand. Does extra damage, but slows your next hit.") - to_chat(usr, "[span_notice("Uppercut")]: Left Right/Right Left with the opposite hand. Has a higher probability to knock out the target, but slows your next hit.") + . += "[span_notice("Straight Punch")]: Left Left/Right Right with the matching hand. Regular damage." + . += "[span_notice("Jab")]: Left Left/Right Right with the opposite hand. Regular damage. If you're blind, you'll make a blind jab instead." + . += "[span_notice("Left/Right Hook")]: Left Right/Right Left with the matching hand. Does extra damage, but slows your next hit." + . += "[span_notice("Uppercut")]: Left Right/Right Left with the opposite hand. Has a higher probability to knock out the target, but slows your next hit." - to_chat(usr, "While in Throw Mode, you can block incoming punches and return a bit of damage back to an attacker. Blocking attacks this way causes you to lose some stamina damage.") - - to_chat(usr, "Your boxing abilities are only able to be used on other boxers.") + . += "While in Throw Mode, you can block incoming punches and return a bit of damage back to an attacker. Blocking attacks this way causes you to lose some stamina damage." + . += "Your boxing abilities are only able to be used on other boxers." + return . // Boxing Variants! @@ -405,25 +403,24 @@ name = "Evil Boxing" id = MARTIALART_EVIL_BOXING pacifist_style = FALSE - help_verb = /mob/living/proc/evil_boxing_help + help_verb = "Focus on Brawling" honorable_boxer = FALSE boxing_traits = list(TRAIT_BOXING_READY, TRAIT_STRENGTH, TRAIT_STIMMED) -/mob/living/proc/evil_boxing_help() - set name = "Focus on Brawling" - set desc = "You ponder how best to rearrange the faces of your enemies." - set category = "Evil Boxing" - to_chat(usr, "You contemplate on the violence ahead, visualizing how best to throw a punch.") +/datum/martial_art/boxing/evil/get_style_help() + . = list() - to_chat(usr, "What moves you perform depend on what mouse buttons you click, and whether the last button clicked matches which hand you have selected when you throw the last punch.") + . += "You contemplate on the violence ahead, visualizing how best to throw a punch." + . += "What moves you perform depend on what mouse buttons you click, and whether the last button clicked matches which hand you have selected when you throw the last punch." - to_chat(usr, "[span_notice("Straight Punch")]: Left Left/Right Right with the matching hand. Regular damage.") - to_chat(usr, "[span_notice("Jab")]: Left Left/Right Right with the opposite hand. Regular damage. If you're blind, you'll make a blind jab instead.") - to_chat(usr, "[span_notice("Left/Right Hook")]: Left Right/Right Left with the matching hand. Does extra damage, but slows your next hit.") - to_chat(usr, "[span_notice("Uppercut")]: Left Right/Right Left with the opposite hand. Has a higher probability to knock out the target, but slows your next hit.") - to_chat(usr, "[span_notice("Sucker Punch")]: Any combination done to a vulnerable target becomes a sucker punch. This could knock them out in one!.") + . += "[span_notice("Straight Punch")]: Left Left/Right Right with the matching hand. Regular damage." + . += "[span_notice("Jab")]: Left Left/Right Right with the opposite hand. Regular damage. If you're blind, you'll make a blind jab instead." + . += "[span_notice("Left/Right Hook")]: Left Right/Right Left with the matching hand. Does extra damage, but slows your next hit." + . += "[span_notice("Uppercut")]: Left Right/Right Left with the opposite hand. Has a higher probability to knock out the target, but slows your next hit." + . += "[span_notice("Sucker Punch")]: Any combination done to a vulnerable target becomes a sucker punch. This could knock them out in one!." - to_chat(usr, "While in Throw Mode, you can block incoming punches and return a bit of damage back to an attacker. Blocking attacks this way causes you to lose some stamina damage.") + . += "While in Throw Mode, you can block incoming punches and return a bit of damage back to an attacker. Blocking attacks this way causes you to lose some stamina damage." + return . /// Hunter Boxing: for the uncaring, completely deranged one-spacer ecological disaster. /// The honor check accepts boxing ready targets, OR various biotypes as valid targets. Uses a special crit effect rather than the standard one (against monsters). @@ -432,7 +429,7 @@ name = "Hunter Boxing" id = MARTIALART_HUNTER_BOXING pacifist_style = FALSE - help_verb = /mob/living/proc/hunter_boxing_help + help_verb = "Focus on the Hunt" default_damage_type = BRUTE boxing_traits = list(TRAIT_BOXING_READY) ignore_grab_restriction = TRUE @@ -442,23 +439,22 @@ var/list/first_word_strike = list("Extinction", "Brutalization", "Explosion", "Adventure", "Thunder", "Lightning", "Sonic", "Atomizing", "Whirlwind", "Tornado", "Shark", "Falcon") var/list/second_word_strike = list(" Punch", " Pawnch", "-punch", " Jab", " Hook", " Fist", " Uppercut", " Straight", " Strike", " Lunge") -/mob/living/proc/hunter_boxing_help() - set name = "Focus on the Hunt" - set desc = "You focus on how to most effectively punch the hell out of another endangered species." - set category = "Hunter Boxing" - to_chat(usr, "You focus on your Fists. You focus on Adventure. You focus on the Hunt.") +/datum/martial_art/boxing/hunter/get_style_help() + . = list() - to_chat(usr, "What moves you perform depend on what mouse buttons you click, and whether the last button clicked matches which hand you have selected when you throw the last punch.") + . += "You focus on your Fists. You focus on Adventure. You focus on the Hunt." + . += "What moves you perform depend on what mouse buttons you click, and whether the last button clicked matches which hand you have selected when you throw the last punch." - to_chat(usr, "[span_notice("Straight Punch")]: Left Left/Right Right with the matching hand. Regular damage.") - to_chat(usr, "[span_notice("Jab")]: Left Left/Right Right with the opposite hand. Regular damage. If you're blind, you'll make a blind jab instead.") - to_chat(usr, "[span_notice("Left/Right Hook")]: Left Right/Right Left with the matching hand. Does extra damage, but slows your next hit.") - to_chat(usr, "[span_notice("Uppercut")]: Left Right/Right Left with the opposite hand. Has a higher probability to critically hit the target, but slows your next hit.") + . += "[span_notice("Straight Punch")]: Left Left/Right Right with the matching hand. Regular damage." + . += "[span_notice("Jab")]: Left Left/Right Right with the opposite hand. Regular damage. If you're blind, you'll make a blind jab instead." + . += "[span_notice("Left/Right Hook")]: Left Right/Right Left with the matching hand. Does extra damage, but slows your next hit." + . += "[span_notice("Uppercut")]: Left Right/Right Left with the opposite hand. Has a higher probability to critically hit the target, but slows your next hit." - to_chat(usr, "While in Throw Mode, you can block incoming punches and return a bit of damage back to an attacker. Blocking attacks this way causes you to lose some stamina damage.") - to_chat(usr, "Stringing together effective combos restores some of your health and deals even more damage.") + . += "While in Throw Mode, you can block incoming punches and return a bit of damage back to an attacker. Blocking attacks this way causes you to lose some stamina damage." + . += "Stringing together effective combos restores some of your health and deals even more damage." - to_chat(usr, "Your hunter boxing abilities are only able to be used on the various flora, fauna and unnatural creatures that reside in this universe. Against normal humanoids, you are just a boxer.") + . += "Your hunter boxing abilities are only able to be used on the various flora, fauna and unnatural creatures that reside in this universe. Against normal humanoids, you are just a boxer." + return . /datum/martial_art/boxing/hunter/honor_check(mob/living/possible_boxer) if(HAS_TRAIT(possible_boxer, TRAIT_BOXING_READY)) diff --git a/code/datums/martial/cqc.dm b/code/datums/martial/cqc.dm index 0e7ba1a5aae..46993c93e02 100644 --- a/code/datums/martial/cqc.dm +++ b/code/datums/martial/cqc.dm @@ -7,7 +7,7 @@ /datum/martial_art/cqc name = "CQC" id = MARTIALART_CQC - help_verb = /mob/living/proc/CQC_help + help_verb = "Remember The Basics" smashes_tables = TRUE display_combos = TRUE /// Weakref to a mob we're currently restraining (with grab-grab combo) @@ -377,19 +377,19 @@ return MARTIAL_ATTACK_FAIL -/mob/living/proc/CQC_help() - set name = "Remember The Basics" - set desc = "You try to remember some of the basics of CQC." - set category = "CQC" - to_chat(usr, "You try to remember some of the basics of CQC.") +/datum/martial_art/cqc/get_style_help() + . = list() - to_chat(usr, "[span_notice("Slam")]: Grab Punch. Slam opponent into the ground, knocking them down.") - to_chat(usr, "[span_notice("CQC Kick")]: Punch Punch. Knocks opponent away. Knocks out stunned opponents and does stamina damage.") - to_chat(usr, "[span_notice("Restrain")]: Grab Grab. Locks opponents into a restraining position, disarm to knock them out with a chokehold.") - to_chat(usr, "[span_notice("Pressure")]: Shove Grab. Decent stamina damage.") - to_chat(usr, "[span_notice("Consecutive CQC")]: Shove Shove Punch. Mainly offensive move, huge damage and decent stamina damage.") + . += "You try to remember some of the basics of CQC." - to_chat(usr, "In addition, by having your throw mode on when being attacked, you enter an active defense mode where you have a chance to block and sometimes even counter attacks done to you.") + . += "[span_notice("Slam")]: Grab Punch. Slam opponent into the ground, knocking them down." + . += "[span_notice("CQC Kick")]: Punch Punch. Knocks opponent away. Knocks out stunned opponents and does stamina damage." + . += "[span_notice("Restrain")]: Grab Grab. Locks opponents into a restraining position, disarm to knock them out with a chokehold." + . += "[span_notice("Pressure")]: Shove Grab. Decent stamina damage." + . += "[span_notice("Consecutive CQC")]: Shove Shove Punch. Mainly offensive move, huge damage and decent stamina damage." + + . += "In addition, by having your throw mode on when being attacked, you enter an active defense mode where you have a chance to block and sometimes even counter attacks done to you." + return . ///Subtype of CQC. Only used for the chef. /datum/martial_art/cqc/under_siege diff --git a/code/datums/martial/plasma_fist.dm b/code/datums/martial/plasma_fist.dm index 2a959789529..eb8357abdc6 100644 --- a/code/datums/martial/plasma_fist.dm +++ b/code/datums/martial/plasma_fist.dm @@ -5,7 +5,7 @@ /datum/martial_art/plasma_fist name = "Plasma Fist" id = MARTIALART_PLASMAFIST - help_verb = /mob/living/proc/plasma_fist_help + help_verb = "Recall Teachings" var/nobomb = FALSE var/plasma_power = 1 //starts at a 1, 2, 4 explosion. var/plasma_increment = 1 //how much explosion power gets added per kill (1 = 1, 2, 4. 2 = 2, 4, 8 and so on) @@ -162,18 +162,17 @@ add_to_streak("G", defender) return check_streak(attacker, defender) ? MARTIAL_ATTACK_SUCCESS : MARTIAL_ATTACK_INVALID -/mob/living/proc/plasma_fist_help() - set name = "Recall Teachings" - set desc = "Remember the martial techniques of the Plasma Fist." - set category = "Plasma Fist" +/datum/martial_art/plasma_fist/get_style_help() + . = list() - var/datum/martial_art/plasma_fist/martial = GET_ACTIVE_MARTIAL_ART(src) - to_chat(usr, "You clench your fists and have a flashback of knowledge...") - to_chat(usr, "[span_notice("Tornado Sweep")]: Punch Punch Shove. Repulses opponent and everyone back.") - to_chat(usr, "[span_notice("Throwback")]: Shove Punch Shove. Throws the opponent and an item at them.") - to_chat(usr, "[span_notice("The Plasma Fist")]: Punch Shove Shove Shove Punch. Instantly gibs an opponent.[martial.nobomb ? "" : " Each kill with this grows your [span_notice("Apotheosis")] explosion size."]") + var/datum/martial_art/plasma_fist/martial = GET_ACTIVE_MARTIAL_ART(holder) + . += "You clench your fists and have a flashback of knowledge..." + . += "[span_notice("Tornado Sweep")]: Punch Punch Shove. Repulses opponent and everyone back." + . += "[span_notice("Throwback")]: Shove Punch Shove. Throws the opponent and an item at them." + . += "[span_notice("The Plasma Fist")]: Punch Shove Shove Shove Punch. Instantly gibs an opponent.[martial.nobomb ? "" : " Each kill with this grows your [span_notice("Apotheosis")] explosion size."]" if(!martial.nobomb) - to_chat(usr, "[span_notice("Apotheosis")]: Use [span_notice("The Plasma Fist")] on yourself. Sends you away in a glorious explosion.") + . += "[span_notice("Apotheosis")]: Use [span_notice("The Plasma Fist")] on yourself. Sends you away in a glorious explosion." + return . /obj/effect/temp_visual/plasma_soul diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index b1cb83c8846..589a6975f20 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -6,7 +6,7 @@ /datum/martial_art/the_sleeping_carp name = "The Sleeping Carp" id = MARTIALART_SLEEPINGCARP - help_verb = /mob/living/proc/sleeping_carp_help + help_verb = "Recall Teachings" display_combos = TRUE grab_state_modifier = 1 /// List of traits applied to users of this martial art. @@ -374,24 +374,23 @@ return style_factor_points /// Verb added to humans who learn the art of the sleeping carp. -/mob/living/proc/sleeping_carp_help() - set name = "Recall Teachings" - set desc = "Remember the martial techniques of the Sleeping Carp clan." - set category = "Sleeping Carp" +/datum/martial_art/the_sleeping_carp/get_style_help() + . = list() - to_chat(usr, span_info("You retreat inward and recall the teachings of the Sleeping Carp...\n\ - [span_notice("Gnashing Teeth")]: Punch Grab. Violently twists your opponent's arm, dislocating or even shattering bone and forcing them to drop their held items.\n\ - [span_notice("Crashing Wave Kick")]: Punch Shove. Launch your opponent away from you with incredible force!\n\ - [span_notice("Keelhaul")]: Shove Shove. Nonlethally kick an opponent to the floor, knocking them down, discombobulating them and dealing substantial stamina damage. If they're already prone, disarm them as well.\n\ - [span_notice("Kraken Wrack")]: Grab Punch. Deliver a knee jab into the opponent, dealing high stamina damage, as well as briefly stunning them, winding them and making it difficult for them to speak.\n\ - [span_notice("Grabs and Shoves")]: While in combat mode, your typical grab and shove do decent stamina damage, and your grabs harder to break. If you grab someone who has substantial amounts of stamina damage, you knock them out!\n\ - While in combat mode (and not stunned, not a hulk, and not in a mech), you can reflect all projectiles that come your way, sending them back at the people who fired them! \n\ - However, your ability to avoid projectiles is negatively affected when your are burdened by armor, or whenever you are carrying normal-sized or heavier objects in your hands. \n\ - But if you commmit fully to the martial arts lifestyle by wearing martial arts or carp-related regalia, you will feel empowered enough to potentially avoid attacks even from melee weapons or other unarmed combatants. \n\ - Some melee weapons, such as bo starves, spears, short blades, knives, toolboxes, baseball bats and non-blocking small objects are safe to carry without affecting your ability to defend yourself. Exploit this for a tactical advantage. \n\ - Also, you are more resilient against suffering wounds in combat, and your limbs cannot be dismembered. This grants you extra staying power during extended combat, especially against slashing and other bleeding weapons. \n\ - You are not invincible, however- while you may not suffer debilitating wounds often, you must still watch your health and should have appropriate medical supplies for use during downtime. \n\ - In addition, your training has imbued you with a loathing of guns, and you can no longer use them.")) + . += span_info("You retreat inward and recall the teachings of the Sleeping Carp...\n\ + [span_notice("Gnashing Teeth")]: Punch Grab. Violently twists your opponent's arm, dislocating or even shattering bone and forcing them to drop their held items.\n\ + [span_notice("Crashing Wave Kick")]: Punch Shove. Launch your opponent away from you with incredible force!\n\ + [span_notice("Keelhaul")]: Shove Shove. Nonlethally kick an opponent to the floor, knocking them down, discombobulating them and dealing substantial stamina damage. If they're already prone, disarm them as well.\n\ + [span_notice("Kraken Wrack")]: Grab Punch. Deliver a knee jab into the opponent, dealing high stamina damage, as well as briefly stunning them, winding them and making it difficult for them to speak.\n\ + [span_notice("Grabs and Shoves")]: While in combat mode, your typical grab and shove do decent stamina damage, and your grabs harder to break. If you grab someone who has substantial amounts of stamina damage, you knock them out!\n\ + While in combat mode (and not stunned, not a hulk, and not in a mech), you can reflect all projectiles that come your way, sending them back at the people who fired them! \n\ + However, your ability to avoid projectiles is negatively affected when your are burdened by armor, or whenever you are carrying normal-sized or heavier objects in your hands. \n\ + But if you commmit fully to the martial arts lifestyle by wearing martial arts or carp-related regalia, you will feel empowered enough to potentially avoid attacks even from melee weapons or other unarmed combatants. \n\ + Some melee weapons, such as bo starves, spears, short blades, knives, toolboxes, baseball bats and non-blocking small objects are safe to carry without affecting your ability to defend yourself. Exploit this for a tactical advantage. \n\ + Also, you are more resilient against suffering wounds in combat, and your limbs cannot be dismembered. This grants you extra staying power during extended combat, especially against slashing and other bleeding weapons. \n\ + You are not invincible, however- while you may not suffer debilitating wounds often, you must still watch your health and should have appropriate medical supplies for use during downtime. \n\ + In addition, your training has imbued you with a loathing of guns, and you can no longer use them.") + return . /obj/item/staff/bostaff name = "bo staff" diff --git a/code/datums/martial/spiders_bite.dm b/code/datums/martial/spiders_bite.dm index 3ace8bdcb1a..a5d6ddaa369 100644 --- a/code/datums/martial/spiders_bite.dm +++ b/code/datums/martial/spiders_bite.dm @@ -1,7 +1,7 @@ /datum/martial_art/spiders_bite name = "Spider's Bite" id = MARTIALART_SPIDERSBITE - help_verb = /mob/living/proc/spiders_bite_help + help_verb = "Recall Teachings" grab_damage_modifier = 10 grab_escape_chance_modifier = -20 /// REF() to the last mob we kicked @@ -60,13 +60,12 @@ return IS_LEFT_INDEX(martial_artist.active_hand_index) ? BODY_ZONE_L_LEG : BODY_ZONE_R_LEG -/mob/living/proc/spiders_bite_help() - set name = "Recall Teachings" - set desc = "Remember the Spider Bite technique used by the Spider Clan." - set category = "Spider's Bite" +/datum/martial_art/spiders_bite/get_style_help() + . = list() - to_chat(usr, span_info("You retreat inward and recall the Spider Clan's techniques...\n\ + . += span_info("You retreat inward and recall the Spider Clan's techniques...\n\ • Remember, Many Legged Spider: Unarmed attacks against staggered opponents will always be kicks - granting you greater accuracy and damage.\n\ • Remember, Jump and Climb: Right clicking on throw mode will perform a tackle which is far far less likely to fail.\n\ • Remember, Flow of Gravity: Kicking opponents will have a chance to knock their weapons to the floor. The chance increases for each sequential kick.\n\ - • Remember, Wrap in Web: Your grabs will be harder to escape from.")) + • Remember, Wrap in Web: Your grabs will be harder to escape from.") + return . diff --git a/code/modules/antagonists/changeling/powers/absorb.dm b/code/modules/antagonists/changeling/powers/absorb.dm index 3e34de497fe..ec28fc2866f 100644 --- a/code/modules/antagonists/changeling/powers/absorb.dm +++ b/code/modules/antagonists/changeling/powers/absorb.dm @@ -216,11 +216,7 @@ if(href_list["exit_hivemind"] && !QDELETED(src)) exit_hivemind() -/mob/eye/imaginary_friend/hivemind/verb/exit_hivemind() - set category = "IC" - set name = "Exit Hivemind" - set desc = "Leave the hivemind behind and enter the land of the dead." - +/mob/eye/imaginary_friend/hivemind/proc/exit_hivemind() var/response = tgui_alert(src, "Are you sure you want to exit the hivemind? \ You can't re-enter it, though you can still be revived.", "Confirm Exit", list("Exit", "Stay")) if(response != "Exit" || QDELETED(src)) diff --git a/code/modules/mining/lavaland/mining_loot/megafauna/colossus.dm b/code/modules/mining/lavaland/mining_loot/megafauna/colossus.dm index a5c24eabb95..f130cd891e5 100644 --- a/code/modules/mining/lavaland/mining_loot/megafauna/colossus.dm +++ b/code/modules/mining/lavaland/mining_loot/megafauna/colossus.dm @@ -383,7 +383,6 @@ possessor.mind.transfer_to(holder_animal) var/datum/action/exit_possession/escape = new(holder_animal) escape.Grant(holder_animal) - remove_verb(holder_animal, /mob/living/verb/pulled) /obj/structure/closet/stasis/dump_contents(kill = TRUE) for(var/mob/living/possessor in src) diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 4a6c6a3585c..7e038a23688 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -343,13 +343,11 @@ */ /mob/dead/new_player/proc/register_for_interview() // First we detain them by removing all the verbs they have on client - for (var/v in client.verbs) - var/procpath/verb_path = v + for (var/procpath/verb_path as anything in client.verbs) remove_verb(client, verb_path) // Then remove those on their mob as well - for (var/v in verbs) - var/procpath/verb_path = v + for (var/procpath/verb_path as anything in verbs) remove_verb(src, verb_path) // Then we create the interview form and show it to the client diff --git a/code/modules/mob/dead/observer/observer_movement.dm b/code/modules/mob/dead/observer/observer_movement.dm index 6972d3b265f..cfe505fb0f7 100644 --- a/code/modules/mob/dead/observer/observer_movement.dm +++ b/code/modules/mob/dead/observer/observer_movement.dm @@ -1,14 +1,8 @@ /mob/dead/observer/down() - set name = "Move Down" - set category = "IC" - if(zMove(DOWN, z_move_flags = ZMOVE_FEEDBACK)) to_chat(src, span_notice("You move down.")) /mob/dead/observer/up() - set name = "Move Upwards" - set category = "IC" - if(zMove(UP, z_move_flags = ZMOVE_FEEDBACK)) to_chat(src, span_notice("You move upwards.")) diff --git a/code/modules/mob/eye/eye.dm b/code/modules/mob/eye/eye.dm index fb3c2a4fab7..2b79ab2a19c 100644 --- a/code/modules/mob/eye/eye.dm +++ b/code/modules/mob/eye/eye.dm @@ -27,16 +27,10 @@ return FALSE /mob/eye/up() - set name = "Move Upwards" - set category = "IC" - if(zMove(UP, z_move_flags = ZMOVE_FEEDBACK)) to_chat(src, span_notice("You move upwards.")) /mob/eye/down() - set name = "Move Down" - set category = "IC" - if(zMove(DOWN, z_move_flags = ZMOVE_FEEDBACK)) to_chat(src, span_notice("You move down.")) diff --git a/code/modules/mob/living/basic/blob_minions/blob_mob.dm b/code/modules/mob/living/basic/blob_minions/blob_mob.dm index 8d24dccd7df..ef7184d09ac 100644 --- a/code/modules/mob/living/basic/blob_minions/blob_mob.dm +++ b/code/modules/mob/living/basic/blob_minions/blob_mob.dm @@ -21,6 +21,7 @@ initial_language_holder = /datum/language_holder/empty can_buckle_to = FALSE damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1) + pull_force = 0 /// Size of cloud produced from a dying spore var/death_cloud_size = BLOBMOB_CLOUD_NONE var/loot = /obj/item/food/spore_sack diff --git a/code/modules/mob/living/basic/space_fauna/lightgeist.dm b/code/modules/mob/living/basic/space_fauna/lightgeist.dm index 36ae135619c..50d59efbf2a 100644 --- a/code/modules/mob/living/basic/space_fauna/lightgeist.dm +++ b/code/modules/mob/living/basic/space_fauna/lightgeist.dm @@ -41,18 +41,14 @@ minimum_survivable_temperature = 0 maximum_survivable_temperature = 1500 obj_damage = 0 + pull_force = 0 environment_smash = ENVIRONMENT_SMASH_NONE ai_controller = /datum/ai_controller/basic_controller/lightgeist /mob/living/basic/lightgeist/Initialize(mapload) . = ..() - ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) - ADD_TRAIT(src, TRAIT_MEDICAL_HUD, INNATE_TRAIT) - - remove_verb(src, /mob/living/verb/pulled) - remove_verb(src, /mob/verb/me_verb) - + add_traits(list(TRAIT_VENTCRAWLER_ALWAYS, TRAIT_MEDICAL_HUD, TRAIT_EMOTEMUTE), INNATE_TRAIT) AddElement(/datum/element/simple_flying) AddComponent(\ /datum/component/healing_touch,\ diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 286d074cf34..17c77733e22 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -13,6 +13,8 @@ var/datum/atom_hud/data/diagnostic/diag_hud = GLOB.huds[DATA_HUD_DIAGNOSTIC] diag_hud.add_atom_to_hud(src) add_ally(src) + if(!pull_force) + remove_verb(src, /mob/living/verb/pulled) GLOB.mob_living_list += src SSpoints_of_interest.make_point_of_interest(src) update_fov() @@ -512,14 +514,11 @@ //mob verbs are a lot faster than object verbs //for more info on why this is not atom/pull, see examinate() in mob.dm -/mob/living/verb/pulled(atom/movable/AM as mob|obj in oview(1)) +/mob/living/verb/pulled(atom/movable/thing_pulled as mob|obj in oview(1)) set name = "Pull" - set category = "IC" - if(istype(AM) && Adjacent(AM)) - start_pulling(AM) - else if(!combat_mode) //Don;'t cancel pulls if misclicking in combat mode. - stop_pulling() + if(istype(thing_pulled) && Adjacent(thing_pulled)) + start_pulling(thing_pulled) /mob/living/stop_pulling() if(ismob(pulling)) @@ -528,11 +527,6 @@ update_pull_movespeed() update_pull_hud_icon() -/mob/living/verb/stop_pulling1() - set name = "Stop Pulling" - set category = "IC" - stop_pulling() - //same as above /mob/living/pointed(atom/A) if(INCAPACITATED_IGNORING(src, INCAPABLE_RESTRAINTS)) @@ -607,7 +601,7 @@ /mob/living/proc/mob_sleep() set name = "Sleep" - set category = "IC" + set hidden = TRUE if(IsSleeping()) to_chat(src, span_warning("You are already sleeping!")) @@ -662,9 +656,6 @@ return account /mob/living/proc/toggle_resting() - set name = "Rest" - set category = "IC" - set_resting(!resting, FALSE) @@ -1134,10 +1125,7 @@ return FALSE return TRUE -/mob/living/verb/resist() - set name = "Resist" - set category = "IC" - +/mob/living/proc/resist() DEFAULT_QUEUE_OR_CALL_VERB(VERB_CALLBACK(src, PROC_REF(execute_resist))) ///proc extender of [/mob/living/verb/resist] meant to make the process queable if the server is overloaded when the verb is called @@ -2104,6 +2092,13 @@ GLOBAL_LIST_EMPTY(fire_appearances) return FALSE update_transform(var_value/current_size) . = TRUE + if(NAMEOF(src, pull_force)) + if(var_value == 0) //no more pulling + remove_verb(src, /mob/living/verb/pulled) + else + add_verb(src, /mob/living/verb/pulled) + . = TRUE + if(!isnull(.)) datum_flags |= DF_VAR_EDITED @@ -2941,10 +2936,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) log_admin("[key_name(admin)] gave a guardian spirit controlled by [guardian_client] to [src].") BLACKBOX_LOG_ADMIN_VERB("Give Guardian Spirit") -/mob/living/verb/lookup() - set name = "Look Up" - set category = "IC" - +/mob/living/proc/lookup() if(looking_vertically) to_chat(src, "You set your head straight again.") end_look() @@ -2961,10 +2953,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) to_chat(src, "You tilt your head upwards.") look_up() -/mob/living/verb/lookdown() - set name = "Look Down" - set category = "IC" - +/mob/living/proc/lookdown() if(looking_vertically) to_chat(src, "You set your head straight again.") end_look() diff --git a/code/modules/mob/living/navigation.dm b/code/modules/mob/living/navigation.dm index dcaee5b0945..c63b4594b65 100644 --- a/code/modules/mob/living/navigation.dm +++ b/code/modules/mob/living/navigation.dm @@ -10,7 +10,7 @@ /mob/living/verb/navigate() set name = "Navigate" - set category = "IC" + set hidden = TRUE if(incapacitated) return diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 86315686aac..63d59db1a53 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -1083,16 +1083,10 @@ end_multicam() /mob/living/silicon/ai/up() - set name = "Move Upwards" - set category = "IC" - if(eyeobj.zMove(UP, z_move_flags = ZMOVE_FEEDBACK)) to_chat(src, span_notice("You move upwards.")) /mob/living/silicon/ai/down() - set name = "Move Down" - set category = "IC" - if(eyeobj.zMove(DOWN, z_move_flags = ZMOVE_FEEDBACK)) to_chat(src, span_notice("You move down.")) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index d8285681d95..4cbaa4ae6b0 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -782,11 +782,7 @@ * * Calls attack self on the item and updates the inventory hud for hands */ -/mob/verb/mode() - set name = "Activate Held Object" - set category = "IC" - set src = usr - +/mob/proc/mode() DEFAULT_QUEUE_OR_CALL_VERB(VERB_CALLBACK(src, PROC_REF(execute_mode))) ///proc version to finish /mob/verb/mode() execution. used in case the proc needs to be queued for the tick after its first called @@ -1462,13 +1458,6 @@ //Do not do parent's actions, as we *usually* do this differently. fully_replace_character_name(real_name, new_name) -///Show the language menu for this mob -/mob/verb/open_language_menu_verb() - set name = "Open Language Menu" - set category = "IC" - - get_language_holder().open_language_menu(usr) - ///Adjust the nutrition of a mob /mob/proc/adjust_nutrition(change, forced = FALSE) //Honestly FUCK the oldcoders for putting nutrition on /mob someone else can move it up because holy hell I'd have to fix SO many typechecks if(HAS_TRAIT(src, TRAIT_NOHUNGER) && !forced) @@ -1588,21 +1577,6 @@ clear_important_client_contents() canon_client = null -///Shows a tgui window with memories -/mob/verb/memory() - set name = "Memories" - set category = "IC" - set desc = "View your character's memories." - if(!mind) - var/fail_message = "You have no mind!" - if(isobserver(src)) - fail_message += " You have to be in the current round at some point to have one." - to_chat(src, span_warning(fail_message)) - return - if(!mind.memory_panel) - mind.memory_panel = new(usr, mind) - mind.memory_panel.ui_interact(usr) - ///Shows a tgui window with memories /mob/proc/open_memory_panel() if(!mind) @@ -1655,12 +1629,6 @@ data["memories"] = memories return data -/mob/verb/view_skills() - set category = "IC" - set name = "View Skills" - - mind?.print_levels(src) - /mob/key_down(key, client/client, full_key) ..() SEND_SIGNAL(src, COMSIG_MOB_KEYDOWN, key, client, full_key) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 221964621a2..9d5bfd2a5b6 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -546,10 +546,7 @@ SEND_SIGNAL(src, COMSIG_MOVE_INTENT_TOGGLED) ///Moves a mob upwards in z level -/mob/verb/up() - set name = "Move Upwards" - set category = "IC" - +/mob/proc/up() if(remote_control) return remote_control.relaymove(src, UP) @@ -573,10 +570,7 @@ to_chat(src, span_notice("You move upwards.")) ///Moves a mob down a z level -/mob/verb/down() - set name = "Move Down" - set category = "IC" - +/mob/proc/down() if(remote_control) return remote_control.relaymove(src, DOWN) diff --git a/code/modules/unit_tests/resist.dm b/code/modules/unit_tests/resist.dm index 2fc64a02703..4e746e09aae 100644 --- a/code/modules/unit_tests/resist.dm +++ b/code/modules/unit_tests/resist.dm @@ -10,7 +10,7 @@ TEST_ASSERT_EQUAL(human.fire_stacks, 5, "Human does not have 5 fire stacks pre-resist") // Stop, drop, and roll has a sleep call. This would delay the test, and is not necessary. - call_async(human, /mob/living/verb/resist) + human.execute_resist() //since resist() is a verb that possibly queues its actual execution for the next tick, we need to make the subsystem that handles the delayed execution process //the callback. either that or sleep ourselves and see if it ran. diff --git a/icons/hud/actions.dmi b/icons/hud/actions.dmi index 071ba38f7264e4ea3aea84fc44c3bafc2f367bc9..6d51cc55534a12316c3e5a034267a772707c2de3 100644 GIT binary patch literal 10089 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 De1`lY literal 9792 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 diff --git a/icons/mob/actions/backgrounds.dmi b/icons/mob/actions/backgrounds.dmi index ecbda704fe1272a2f67aeadf2fe013356c81bd52..1256caf05b41ae8959c49902c3479d04daef3a82 100644 GIT binary patch literal 12751 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 z zYfdmxif%3t$ZY-3b0Bm5)RH&Ib`TF3pdx^sVRsV!GvOD*gZSBlL_R-FfZ%&0C}MoQ zI5zH+o*oFYC=MmemG^kH@?FVFEJuA&&V_zdx9( zUBLBxcfMvdW$|lVBbN@zFWhN%q93w_QP^b426Q+i$zbGlqI9|4(S33|B;n58AIQrM z>p4wUDzgQwR_=_8K~xJa3gYM8Bs!m$JtJ5tzsg88ad8NyCCKUN?N!0CM^Z|3dwMMv zQjKx5?i6n(gC-%WY(P^UfTk941>L^hIi8erEB}>sHBG|@jOa0BF>I4SujK*K(Xgm% z=KDP^Ev}4(tnKv)JdV>ntn*jfw+`qSqM}GyQRbwVjE`TvcWDq~=pS0@06mVr(BDqq zFuL_a{VgTi9|j5Y9k@)ySynntcJ(I6!c7>-i3JZM zCJ2ogf6@|#@=_L#V0A5vSR*j zi}VFYm1t4oGD1FwZ9HBoN|*tAtOT1etI;RFPruvxvf&gvs-D zGUe*9{Hcqb0SnfCJ@T=S{+`I%k3taEOkv_5&5cmdPSho1b7M8(UgI~SK|%Sbyinz| zrv`CdYcaulhmL1_f2SWLCnxi-P5jh7bS^6zD-1E4@M%5T}$VFWra{eMPT-en37rlHiR_8C5n z(r(IQlsE9cAC_9+1^cn|aAN4uCye>v!f&68YIHqlaotE2i*Z|;ousyKYvOk70tiwRySPd;E z(4+VE)_b|44ztGqavA6>AsQH%w0zRqMndHHHYt$B1s)Q6!zPJf`?zqIib)o_gQ;9- z?z?Xo;QyCTX1_MIBbMb{XCN~`KoMj{pnZBncvdoCiIl$(S;%ij6qrRJ3m)nPNdi2;?^e}AMc=_Zq<69Kj~1(-t~+@9AI61zV3O>!>smM z*)vg2hP6=04Zw;ANLS@+5I%{qYiufI;=cS*A|Y=+T6V*H?_TA_()>Cy@TRnghZW!a zJa;J_QXxP|O5X8dJ~Z111hmpT>RKcL?l@l<)fL}!beyV%%K(eJ&VOi~23`CY*V5$a zuFd^vBxai4WXtmsFuZb-%)1{WE^r9Ot2K9O8LoWvwI9-&9TGcQEpfW}0=mmSZmQgbx4|lj zzYTm;oWGL*FszF+WC!9g%xK32%?hbz=U_AQvCE%?XWt%#@)|tB)hYS3O8`cLAX~ks zp$CywR(kxWTrAUUA^}1{PYL`Ro8nC04lN4WjW``7!<*N7jNkX(1OT66Z2AK& zEE9u_ig$|zIV;83h6DwVA*gZ2S(a5&mco`uc#%zS^p#b88jsWMtQ-i_;T1RRy~*Na++4XzI!r@n#WrGI<^v!KTG(0l?X;IT z6C5G-si895LuLT7EwA)&jvWdE6T~-^Qu4&-|Cpp;2zkxTbWj)|Tl2~ji2M-YEWCkq zC4gq&{6xZNDgwtwFZM+kI7Z&gY`v-aMOieXU@htozlA*skk`iCCueQ*rv!?AcSW{P z0#tlJdt(p{f?m0>B}@T)O#v%|RHmF`gm3(p|7x|s16-B_2YIRRdT+waYp8s{#v>ny z$Hec^PzWmQP`I0;!@Lg&Db@+7E_bbEMAx37G5h?@D|YDb=Z~aK$?krEmzW4-gabhM zb5P@=A}bjdzuU6ST!_#B8&S=_KkmP6Jbim=!kbZOegV1NVj=t1rT3f9{&>v#T+tGq zx%vq=;&j$?TJ+Zw!nkJAzdAzeM9g@|$2a%q4lAejRSJZ=qt3(^aY!P_k26;f)7@e) zhV`^HP2DSi*v!nls~E*uic<|SA2iE0PevMkJmc?tx0PyX%JW_uNc&}2u1cu$x(w&N z2#ZaIYzd@tWs&O>@He~i&;8D+CwwRQ*`L1>)pPzrxDVhrHveS-T897MNUN& zao7o+ZZ5k5`}fTk;$_zWQEM+PtGPg4Kdmi=J>O=s=lny$;d4=2I_0W#g^?i@0$;HB zgRvzZ9>z$`YQVPrCNhXU$4|qj3>{|9@QoF~!%d1RMPPsBz4CF+@-1sfL{Bo*?-zqc0MQ%K+fRpG@CPA{G8+5d#kdPyGy^c7!tgg zyiMJva6G}TR6v(gh?mtcWn+Kx>v*-YJt}w$Iq|#A$FBIV&X!g=-R|+Vd(=1=#HDrZ zu}X$W*P5p7c4P!F+oTe)nWhEFeUin!e#QM-Pll|tL2Cbsh~Y`f$<#bC823jFKwVi= KsYKB%=>Gtkfh)uS literal 12450 zcmd73Wmr^S)Hi%)=dB?P3qgc$*8328|w5hSIhJER08hDN#t zh8W^K_`mND@B4m!uIu^0oOAZxYwfjH{MOq09Kto#pAzBI;{yOdq^zXy8~`BTEd;>D z1}{dgg|EQ}OJ5y*cLggq3s+lbcUvb%0Ps%FPyFH7!B41Yz0DJ5c|W2cW>h6EyEpbS zFdK&rZ-On>3g;Y6tp20QwwKz(a`7O7wXBo9(Q&@UPk+D0yj?u_*r{F!Fl_Gj_M6g?59sc3B%UvpsE<~PVF)hDfk(NvQ zw}*XRS-g+u&2t)rsMO~}y!8k>E@qS|B7Hc62$w>-<9}RXncBBUF0m{AE;w;f4@!T> znK=|1?#91*P?T?~U@cH2cwF9qUPV9XJ&eZw-(I@2LUUeYMgnnac;+L04mj+zFRg1Z#ThfUKh8`~3C*4-XGn9CV^asg^ms zqeCSTNfN~*Rg+s@uK(UYSbk9UkwrrY(H%Mtbx-fB2q2jLenD!769$ z)$te~SH;a@&?ywqnPI-Fe?~cEoZT5P8WXHk%57uM(cTWw6tMo=}E!v(*6y?f|PHDEQ4eV>&ZIY+*}5jU$f7? z;BItTR}cPlCpSHI3Vy9;hrznLaC*W{J$$_(xxfo-4XfVyWZAw_gHGNaMrc9Ep$c<7PK;|W50!^U_&qpBl{JL*I4FiLul?jq2^t)iWkRER02X2AHpqz^8s*p>dAzo%a@52#=3( zD>9Pe-kF)a+jbcp(y$*93k?Helao1rp5xit+S=F=xWueR4|ff<%X~K-5JWA*`FW08 zf~&5y%qEI-wVHlRM$sq6Fkdd>$UEdcn@=dt_4O)KCcqv=y{Oi_(?_~w%jyT0|F$HL z4)^>cgu<&{V6vf^xn7OxozLPoSI8Ve@nOX^$*|mKdu)U5%gKOla8Zt-B_7Gw%OhLT z1@K$BfL!2hlos#=LW{L%5e4PHZDO{dMBFx=(dGjGntEul%x;^cyKl!wK@S9O$Ae8V z|HoMXISc50s?KwZdx&jKv9s4^`vOjw(St?0#ehP~=>m_^6_7y%kY3Hh%U~xMRl2~_ zXoewo9>R~Rnqdh9FSBTIF%LF!V_aj{a|z8){#K;7kvn_<3L5=~?<6qV~!KZ)DOMiOst6gKGESBNw`Sz+-nl9;-Ho z(Zq!w;%Hm`B`W|zBJEw4FrTXTDRL@Viz~sp#d!}JT;o7JFM;!GtiBqz#~&4W8}Pw2 z_(XYMj#Ppmd%|eTr5A$3e5koMs6Kh!ICbNlVs7$JWP~|iYV|((KaV5@paqh3zG(30 z9!Y6`Kz2g|{o}Pk?Y~$TCU7YL$j=|BOzi$5D*M^mDmnp!e`n7U(U zE^?fgac6OMNM0KpiF>tdEwtDy-=$ltI8>_p?)4E-O+*xZmqu;3(dYM<6#tWxPzL1( znd>E$mEXdo_JymKENHIpbzS=r=^0S;JV^>qTD|O~zJqBw2VS-@E7P;4%!3eH3w#6T z;rGcgJBNM<-&MTs9euu2mEn+R&S~%@nu)DzX!^JI^PRgYTJv1@JYNoFxYVctBe=$l z+SCo=1-v#r3GeX$`d7D6_K+W6R@>b})nH>Qr4kIt^?#v87zG`n{NLeV2#Vc?APgfH z5K`0wiA$sJ5rCl_eH*vEU<|8`P6$|iF1F}z=K`|+#q|-1qhMJoTbG*4Qi0H(1xm@J&r z05!d!kzQ7fk>aEH!b{zRlyTkHLO70+nFmuT&53cl|1w4o`LM;qFhFE0XZOZMrF!IP zhu6=t4U1ij1i|s~I-^aZ)zww5o)a>u2M#x#$9BOp%%3`rtqB7cJwMNUT6 zRAFJ^1{`@nV4G;I6LSdaoL*{8{U~5AJ1-VO!tcth1)2lec#XQX%4ziBD0@* zMKM;^b~bZb-=iQQQz5s`P=ybOixu#ydvwsbC95)pd@q?lxvZcS6Av2|lijt&r90w$ z!(86eC>*q+y?i-0H@C63hZ;Y(wMjdEH-J3P*{~G@FA2B z!3AhhCR>`Ra^yhOiaRCwhowK*tjC1ftWV;VKoQYkDF3<>@dD^#r&N6TD zBymXNAm|9=6BZ!D0|bUuw4gK}yO#BU{PSv?n2tE@OzDFjRf8f+6!2Pd0T}{PEk@u9 zz%;G{p-uR#3ye$)SS_hw!BC^{w`tNfWx4M&-8D_k)i3!s~LH0ZODd6ya`<}<=r-ilyi;DarC>5fpH_KH-7qbOuO*s%#J|Andjb=~*@T4RyA7=JV*lQv&qD z91o{F|5Q@+3X7u{Z`@Tdb`dloYPC)QMS+iQw>tRgYDS|_49o@o{JMAGcfKJ0JMnxM z{lqz2GjGXh_tZ>9L4FwNij~G}W}CFVSpB@) zeLOpZQ=-Z5GPSrMwy1ySF#=+)nzw;_!RuIbf2fu%pj zYi59(XTJtmyh9+<`91B40wWGWz@mF;{A;{2b1rhWd`WT7$#OUTW^DJP!(VuVF^blo zac(WWthu|o#eVuRHSon4dQSX@cKY>j{;&o3m%IB^@<`V>D?=167f|tizy1AD-N@>k zcEs1!AUQ-(#Kn$K?n76XomsMD!mw1*ggENX!YHH3m0L7hTxAG5f;f8w0HwrC`?Pbf zZ+Dh=Fq7{4^_nv#g%Cl7>`9$}L|65FH#P97?ZW0K=l5=jA;LV~U%?9RJ(6~cgYjd+ zDEN0MEGMkLIQ&9(p8NUvjUfF-wbwN|n|Zw-mG!34PWKW7Et&F&g86^N~!O0tjm=|NyJquRUA^miu>n97^V>R94OlUj;>heq{Slru)!1?8};TuKD^G~ zdRk8D#{?pvdl+9yr{AvD(sM+*FV}fuhTSEAS^NLh~hm5H*C^iGL)BIeSzrSE%m*VmppmT!w zM&z1l!`}X}pCVWVPaZQKV+6Maq{<-FI1w-}dKMfS0kec6o}3v#09QXb>SZqO#IXOG zXtA|yMHk5l z&R)0$@!9Qv&RTJeoo75M$Mr@ame>7dRPKy)+djT*HDR)pN~~ArH<$vy81UiXI}{l2 zcXs`t%HICilk_7!pfhRBoRpY*^5!w96J05o--BuD5(WJS9xq)g<-%YN0;Gmn#whdj zR|aCVkL>Fx0Cyw8KVDcsVf>QGxBE&@!aLEKm4UI8SlJEI=<;t2m_d&dr!^>V73|2@ zE6<>qMDAip%qxM5M{;XXiggm~)#O%n>Re!4#bsW&kKu^5kBbeLEcgLVv~HGhx2q8= z8t)78Q~pd0*60s5oHKIyF42kt|AvOaWYLZ?rli>M_%u#&adGT z4j{WgT4FGgxiL7c=WU=LFP#->aq@!4n_4@TIOe(fUl%fPZ`F-91Bx-(wyD2UuF@vKLtW5&+M^e zpXnxsa(0vEQLZ2VxRTSM+8pm{mXikeQP?QmL%*pQn19+}OVvMF+O(ejBS3DO7I3LJ!|5S+JwWY|d>v+20<%60n35;_i%v`)0GFtRygAR_Lx7T3>(W3x~jJIQLvh1Jr&Z&J4; zU7kK2lWJwlbm#OIV1OyGLo_nPH!tHd=Y&|dVw9stkvsJ}75Wb3-jJYH0(r;D(e>^( z@i=~N2aZPb0;mT4GI)d+#>bnDVZ_ysUigjxN_^g@@e#$9Nu{r>8;Qc{%(3+gypf)% z?F~1J>P<{wLPYi-qI7l)i@hGw zu4F~}?DfvhdrD8X)X!u2ggyESEpWd17OAo({RM&4?FY$zh~uACjhwMe8KRHMPB|wJ zec>i)04GlN8-^#=pL`}$VRup3lvmeH3hAcDX$T51BZ!Mw7B1=cNt96pYC&4dq+)-j z@y!orFJtFf31*kl=y)*4`Wfhwvc~Lu^vTpv626DauPmFmQm)XWYVx7O`>wbn>J9JE zN1MMx#TDMXAY!aZD@ndvS9~5TL8b3Oa+eMF@Ze}L`L-YS2Zgkn$8judCLvc_^ogU4 zqJ?fe#AcgpVDSx%CZyX5A+~U#dnlz&1z=RH*8U`aVvmDLiF{m-#L7hB9%=TU!z zdl*pr)323i;uJxn@-{w|rB@AF^ifu*GDtJW!n!Q4{8sUe^wEd0EL{|BPXCQk#)Upm zmi0CKEgCgD%Ym!th-Sz25%|iTiiT+~!i2EcO`Bqm^;9mS~`;qy3>Itw_g z^Jto4HBO+8N`>?=X1F*;eO{Z74YwXF6=WhC&u0T#K!`YXYI@ZX2?3M8b=K7t>pn*9 zf<`mnhcGlO$)9Zh$^w~pTQ6b<#RybGh_IP0poq3bi{(;mp|@3E3k%Bu@I2{L8pg+0 zUS|pD6*`jr`3HO6jNCw1$K(m?CQy-9H-W*qvrMm;r< zFw=51$AN~`jpz|Y>?z6o4w`k*D1Z*#lcF2QF2Fz9!OQS3qF63+{L@R|QePedGo@GvSf z@Uv;5Fzcr-Z3894=Y;ePPJ$vyNzp*2hGuE;#fe6GHXKk!C|V@P@Tk@AP_QISJHl}G zIPeB%3!n0G`=7egR(owhoQZDbm& z>lN#j4u5IIDgnf9XQU%O&c_c<>k15PU$`m=l zK_C@k&6p_tL_$<7854ri|MrN;SF^^MXbW>402KZJIg|jRkV%})qHv|W>gYR|aGv4& zWx!hPw4Y98(&I|-BGDMHo?83CFF;a*|9_K5_PV9asY|Mo($Ht{4v^r43F3J-7jc&d zbm14TTi%!vx2i)+rK*^9*|pyz%W^~L$w0%tt~teNmqYAcZEjD^FO&=pK;rsZ6-W~a z8#$MpVAOvx5vMllltXMiZNsMwv!NMCxZ`ftk=i{uvl&#D;dkOaH*i0&1_6>;08*r~ z42Z-E@m?nEmZgw1?jtgL2kN+F)DNTtSidLvZwyZpuv+1k_P!i6v@0yx!d+)fpJ(I zISY{Ty<7Kqu8H$edEO_E)bc+9O_~Vn1T!g^!zD@Z7u@(%#P%x|NaW;Yl8wna@e?`;xyE5BM)_74m%L*nh4D3iU9aZ+hF^{jGd=o%<}96uxRe!%8v; z`hnJ(7W4P)+sZ&HUY(m&vdu3nppV5JCb_y?r%fxKUbHdKV~*^J=W9s$^Tm>fbBn(p$NBF{5Mlixg# zWxvfr99TqeJ~LxHn8v(!1Q<~Pv6mnQQv{0tzgZMw1Z3eUvDq=nGFLOYab#}U$7((g3|4MH@y{Mqv&N=jHjay2 zlbW+*dUO`EH-~dz8Z^FKPP368$tKbGHWluxtN}?flDdB(0Beh6Z|=K`>CyiG8Ans8 zhta?R(KcRAdnT_*^B;L^*MFlt+J0gZ4r9bN(UUqWLw_MbU5K-qhnMLo%aGy8O`Q32 zz~t86$W~If3gaoQd9HUJ`lSp_T&i+&^Ht&0HvXm!u&5uH7tYO zmLCIo|4TwaOuah5UA$gh;J@cN(!=={eTPc#ik~8>dD(LJk5%NXO0ZxIT?0!EK%PD( z-@6{<>){V4^D;Gq`X{4Si?46m-xK#}Z925>O@xE7xG@akhd||3+QPS$85uuR)k@*< zBeT=3&hu%DW9th^6zz1tUj2>EbKKz2tyDy3^KmL-Tveep01CkNeq2p5&1C7^2T*Te zl2o*Ss)KA+Zo@;;uSA78LbS$rViT|}2!hkgittre5-uCYkHW70dfk_7zWf5P@?a$1 zH=@wuj+)mPx^Gz5T`fer`=_x6qL7R&ct&Cj1xx? zm@@SPXprwhna_OzKnK~fTLaf}C273af@4ATmhlKQIpxH;;Sq*3l+UWwrW(XBfoHp? z`)?EtEiT;@W1TdDwcp$$4xds#! z7h~MTZM+(S^w3=&4yj+RFdm|u>RhP99AG<98dB$v@4|Ou=Cn zBqQ?y)PsW`N_!~YRcV2eet-QycF<1(03P?M;Nke)B+zS6inkt!dJVN7vfUSTbAg$| z;jqC~e6L?6kiBcI$8$*X-OJAIvNq zh7xZ(`;Z|C^WDHi#e&SnLykC0?P`C3Y{g@Aq$cFx;U#OTlwVD?oyA$A0^`|Nx1Gf} zH&M?@3fVVJ0lZ7^-m%GS~kkVwYKNW>qETThb2icPkLW0m>Bp;{1e9$-cQ!?yK& zY_G=_YKs#1NI`2tI<&L>XGd~v_92bPoG2CFjdJN+nqxYBMM?klf~P~0UCJw5;}kP~ zmPJTgR$*hIzZitNmoPGfw znuP+|9BVAr3THgVssqk7p~S}u#v07lR2}8l8=2B`TTiv!Xv9Mc{RJ!1{C^9CM|nx8 z@2^XZaiTvQZL3`uRsf$sBfp4{`m0p_{V2$pST^J`=IQPzF@uC{%=?|pIg=MiW~Ijs z!la|$$9nq2gm%s?7YaYyW=bt+P>G=JN#GTNJFOLzfWI^yc3no=R_@~<(V3yC;q$&+ z>Cut+U{+V)SOGSjXZS*a7;(IpXZ=O+oVW3*r!d364EAb2+1^JHtkkjfCenPKd&_Y1CWh@a;=zkaR+#deTD@#1!jT zNXFglZT&T>HA!E$Xd7cYXR{dt)%E;DSsnJ90M@Dw+Z>% zGZWri)7|SfgWS1^`N8eFBO^2xKtAF=HUDVi19CQC^ihn+b1}d#y2ZQW*g_Vip9jT_ zkHB}<29gJ~0l>ztGGl=rcO7HH8lCrLxHrN+$nxr_Cj^-de#jsj=1s^IsV@i-eEOtC zNazI6p1n={tf#&=KbKl7no#wBXu~5Jt?jW!+(q9SiPW@I z++R*@v_}F7NIm6F3t14TDrv(+C=N7LjtL%bW@d`?EU4if=pgp+5u%qPJ2r}DM8V9b zC&z&0UAe3Q>7(`P{9LH0pLpJQ(i?QqtuPXJy?VghtR1-zy=>OgER|ve7OJIohml~!3dkG(Pw|fKhk-hkd;CNOV)V+>tHB%xIUc{K-ZV_ z5o71Ad#zkSqg55T5ok%xyLkx*<*xD|vyD zleI|`MN&qam*ID2c9^B0M?pU>-*Tf-Fc`MlinyFW*ptU{0iP5m0H-~f!PNp_g9+)t z!Ay6G5oZBsjR>KcS|4d^`-U|_g2KwoVX-3-myiid$H{iR#}BBsJnYc|get}XB2&oJ z2)^uOmu#a5B+dhHB=wM$knoqD-hbVZow<>Wi0G>6;>G@0Pai9ZZ5fXMH2oGCfKzMq zA*I|mFR;K4g=YJ~QED=dJXafD(2<@J$am`2#pq)ZCVRv~%A_Mrr? z2pWJtGRrC7hyMBO#$UJ8ZE)5jF?#eEH=e^JC=RP)pe{p-QGPD&)MCatE%IihW1-fZ z3g`U7f1#Yb;-+{#%flgv66g>-35~YG~cgOtd`bWps;jr_e^N{5imPX zYN@eUafIa#zMsDyaO8X|jkelgX)PhZuK-iGpXYR0wX&sZ=CemFGJL%ySV}t!=q%4s z;%Ss&%nX&Er6^aKP|DATOYXM(pTHsrNTE7^Od3BDdQLfC3Mx!>Q$>U=>M>Scw@Btaz0EpZ*sk0to>vAusbdE;Cr>dsDVz@d#k~-wn|%EquTWVEE&T) zV1+Vyzr?iY50k$3>q&FTik;eLJ2CJzyZ&809i2k{T{9d+SH!n64C+}4%EUYC7F)k5 z^y@ESfY~0+Sov-uMD+n-&L8b7o6EF}D-HJ_Uu_=E8~o+i^4tBhz&3XT0m}R@gsXmL zyj!O^UTiH{sdzO?eR=Sn$rJ~1uO;>GY=YgF#i=NZ=es5qr}zxBUZe|#{%jlxMLu%f zhuD4_Uw&Qdy)o4kM?Z2k-V#@S@f9%!F8-^b2EdMzX`kgQSc)q$p}axv(Coo4XAb>9!M%MfLpQ6Ey^oHDxKt+z?qGkjw;*c&l(v%+T1 z{Enr;60yz{R#kflImJ@I?s%F}2*4ggMkJq4MEaC5bZ&cGiBj+$cAn!&bZbPN zr6)=;oZb-9>gq=N#Q!?<&1ifHUfpO)Yd(3!qz-KIM?j&_oWZU9Wuf16|M-X z+jr>*#dD1yJJ*rBQ7DVX!%-UC#Txirj2>Ku=*P`N#&_E&r3zdAjWAcNgK)kn*T(z~ z=-rZDht2YG*K;{RO#U;bRs3xDFMWGREU{0S0@N&h!3=?oZ)T(-h`--V{5fe&CEz%j zOHmA>%J)n#213;Qv>s}+Sw2!(iakb?jKNnGA*_xR!f!RxECV83p(!IDA(!qlYaIar zd>sW^;0mzu7neE+AV7@uj3DZDmMHnjr3q#{L6CP-v}x#w*#SX6c$8>edR_3q;k6Py zVY6&K)Z6y#g`{hM^azpJAJdAj1HG<6a@74)t$XQ_h5Oa3G7X3jox zT|iUvjqa6xkQ_w<58}9iqfxAufy#VPoN%DOeO&`*^n5TQJb{v*R{EFCX8`4B_hh3> zDz<{w=6d>tJw31F-{Wb;lyDh>T2Q|cu2>^7w!BGHnQd8yoikP}`*=dMmr<@*u_lw4 zl>KANhEJlqFTa;~->akg;r0L;F(2;4zkzVYf~64{8;hEZ2gNIPc^(MRz6EKrKW;`2 z9LC(BYqrW>@pE-};Umhw9T3hdRQ!8ZtcP;-<1IQD>doAF7h+}gIlrTQNs|v0klJa) zY$T-+0K&8(jf?Uo1lP2^c5O?l*e}t|P230hONLSgEK?IcOv6$mfrio!EuqePAj+if zCeMCrbDnM|0v_tN4*y2ILh>xN!)^zm;n?3q;rO8K@}oxy5||{S9_L0ne=g=>m*}Xh zJeb9}uZ1GSmZ2a9B5`<7y$EiiM@?KrF(sMMgy8bZUk{RnifYNy8Uob~$|}w1xBPHo z^=4w8CjV?5D4qv^bl%FIgN2t5yQZIlE~S}35q2g+TD9xIg-K6P0s5!?Tho5N-=^OMT2thIu!rbf{IobM6v8^mh>h z^&agTy#QMObUHvw9VojF_@vGB)>n%@B!LLb4E(EYx=1}^rpp_QcrvE cogwheel > preferences > game prefs), update your BYOND, and relog. When placing floor tiles in space, you don't need to place down lattice if there is a piece of plating nearby. Where the space map levels connect is randomized every round, but are otherwise kept consistent within rounds. Remember that they are not necessarily bidirectional! +While the floor changer buttons allow you to move through vertical open space, you can also right-click it to look through open space and even glass floors without having to move! Working out improves your fitness which increases your size and faster times to fireman carry. Remember that a quality diet and sleep are essential! You can alt-click tank transfer valves to remove a tank from them. You can automatically extract and retract arm implants by 'activating' the empty hand they're on. This includes integrated toolsets, cursed katanas, and vorpal scythes. diff --git a/tgstation.dme b/tgstation.dme index 5a6c082f90d..4b491aeb074 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1817,6 +1817,7 @@ #include "code\datums\mapgen\biomes\lavaland.dm" #include "code\datums\mapgen\Cavegens\IcemoonCaves.dm" #include "code\datums\mapgen\Cavegens\LavalandGenerator.dm" +#include "code\datums\martial\_action.dm" #include "code\datums\martial\_martial.dm" #include "code\datums\martial\boxing.dm" #include "code\datums\martial\cqc.dm"