From 3becf31cf4e20ca333ddcdd211988bf8089e43e7 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Thu, 24 Oct 2024 00:37:53 +0200 Subject: [PATCH] manually ports last upstream PRs (#9286) --- code/__defines/span_vr.dm | 2 + code/_onclick/hud/ability_screen_objects.dm | 1 + code/_onclick/hud/action/action.dm | 222 +++++++++++++----- .../hud/action/action_screen_objects.dm | 149 ++++++++++-- code/_onclick/hud/hud.dm | 2 + code/_onclick/hud/movable_screen_objects.dm | 7 + code/controllers/subsystems/statpanel.dm | 2 +- code/game/objects/items.dm | 7 +- code/game/objects/random/mob_vr.dm | 2 +- code/modules/awaymissions/loot_vr.dm | 2 +- code/modules/client/preferences.dm | 4 + code/modules/mob/living/living.dm | 1 + code/modules/mob/living/living_defines.dm | 1 - code/modules/mob/mob_defines.dm | 2 + maps/gateway_archive_vr/labyrinth.dm | 2 +- 15 files changed, 314 insertions(+), 92 deletions(-) diff --git a/code/__defines/span_vr.dm b/code/__defines/span_vr.dm index 1412420fe2..c87d062b0e 100644 --- a/code/__defines/span_vr.dm +++ b/code/__defines/span_vr.dm @@ -241,3 +241,5 @@ // Just used downstream #define span_wingdings(str) ("" + str + "") + +#define span_maptext(str) ("" + str + "") diff --git a/code/_onclick/hud/ability_screen_objects.dm b/code/_onclick/hud/ability_screen_objects.dm index f7ece56f50..4bcd182457 100644 --- a/code/_onclick/hud/ability_screen_objects.dm +++ b/code/_onclick/hud/ability_screen_objects.dm @@ -16,6 +16,7 @@ if(owner) my_mob = owner update_abilities(0, owner) + overlays.Add(closed_state) else message_admins("ERROR: ability_master's New() was not given an owner argument. This is a bug.") diff --git a/code/_onclick/hud/action/action.dm b/code/_onclick/hud/action/action.dm index 7e0c3ece55..d1f4441c7d 100644 --- a/code/_onclick/hud/action/action.dm +++ b/code/_onclick/hud/action/action.dm @@ -1,19 +1,36 @@ /datum/action var/name = "Generic Action" + var/desc = null + var/atom/movable/target = null - var/check_flags = 0 - var/processing = 0 + + var/check_flags = NONE + var/processing = FALSE + var/obj/screen/movable/action_button/button = null + var/button_icon = 'icons/mob/actions.dmi' - var/button_icon_state = "default" var/background_icon_state = "bg_default" - var/mob/living/owner + var/buttontooltipstyle = "" + var/transparent_when_unavailable = TRUE + + var/icon_icon = 'icons/mob/actions.dmi' + var/button_icon_state = "default" + + var/mob/owner /datum/action/New(Target) - target = Target + link_to(Target) button = new button.linked_action = src button.name = name + button.actiontooltipstyle = buttontooltipstyle + if(desc) + button.desc = desc + +/datum/action/proc/link_to(Target) + target = Target + RegisterSignal(Target, COMSIG_ATOM_UPDATED_ICON, .proc/OnUpdatedIcon) /datum/action/Destroy() if(owner) @@ -22,84 +39,128 @@ QDEL_NULL(button) return ..() -/datum/action/proc/Grant(mob/living/L) - if(owner) - if(owner == L) - return - Remove(owner) - owner = L - L.actions += src - if(L.client) - L.client.screen += button - L.update_action_buttons(TRUE) +/datum/action/proc/Grant(mob/M) + if(M) + if(owner) + if(owner == M) + return + Remove(owner) + owner = M -/datum/action/proc/Remove(mob/living/L) - if(L.client) - L.client.screen -= button - button.moved = FALSE - L.actions -= src - L.update_action_buttons(TRUE) + + // button id generation + var/counter = 0 + var/bitfield = 0 + for(var/datum/action/A as anything in M.actions) + if(A.name == name && A.button.id) + counter += 1 + bitfield |= A.button.id + bitfield = !bitfield + var/bitflag = 1 + for(var/i in 1 to (counter + 1)) + if(bitfield & bitflag) + button.id = bitflag + break + bitflag *= 2 + + LAZYADD(M.actions, src) + if(M.client) + M.client.screen += button + button.locked = /* M.client.prefs.buttons_locked || */ button.id ? LAZYACCESS(M.client.prefs.action_button_screen_locs, "[name]_[button.id]") : FALSE //even if its not defaultly locked we should remember we locked it before + button.moved = button.id ? LAZYACCESS(M.client.prefs.action_button_screen_locs, "[name]_[button.id]") : FALSE + M.update_action_buttons(TRUE) + else + Remove(owner) + +/datum/action/proc/Remove(mob/M) + if(M) + if(M.client) + M.client.screen -= button + button.moved = FALSE + LAZYREMOVE(M.actions, src) + M.update_action_buttons(TRUE) owner = null + button.moved = FALSE //so the button appears in its normal position when given to another owner. + button.locked = FALSE + button.id = null /datum/action/proc/Trigger() if(!IsAvailable()) - return 0 - return 1 - -/datum/action/process() - return + return FALSE + if(SEND_SIGNAL(src, COMSIG_ACTION_TRIGGER, src) & COMPONENT_ACTION_BLOCK_TRIGGER) + return FALSE + return TRUE /datum/action/proc/IsAvailable() if(!owner) - return 0 + return FALSE if(check_flags & AB_CHECK_RESTRAINED) if(owner.restrained()) - return 0 + return FALSE if(check_flags & AB_CHECK_STUNNED) if(owner.stunned) - return 0 + return FALSE if(check_flags & AB_CHECK_LYING) if(owner.lying) - return 0 + return FALSE if(check_flags & AB_CHECK_CONSCIOUS) if(owner.stat) - return 0 - return 1 + return FALSE + return TRUE -/datum/action/proc/UpdateButtonIcon() +/datum/action/proc/UpdateButtonIcon(status_only = FALSE, force = FALSE) if(button) - button.icon = button_icon - button.icon_state = background_icon_state + if(!status_only) + button.name = name + button.desc = desc - ApplyIcon(button) + // if(owner && owner.hud_used && background_icon_state == ACTION_BUTTON_DEFAULT_BACKGROUND) + // var/list/settings = owner.hud_used.get_action_buttons_icons() + // if(button.icon != settings["bg_icon"]) + // button.icon = settings["bg_icon"] + // if(button.icon_state != settings["bg_state"]) + // button.icon_state = settings["bg_state"] + // else + + if(button.icon != button_icon) + button.icon = button_icon + if(button.icon_state != background_icon_state) + button.icon_state = background_icon_state + + ApplyIcon(button, force) if(!IsAvailable()) - button.color = rgb(128, 0, 0, 128) + button.color = transparent_when_unavailable ? rgb(128, 0, 0, 128) : rgb(128, 0, 0) else button.color = rgb(255, 255, 255, 255) - return 1 + return TRUE -/datum/action/proc/ApplyIcon(obj/screen/movable/action_button/current_button) - current_button.cut_overlays() - if(button_icon && button_icon_state) - var/image/img - img = image(button_icon, current_button, button_icon_state) - img.pixel_x = 0 - img.pixel_y = 0 - current_button.add_overlay(img) +/datum/action/proc/ApplyIcon(obj/screen/movable/action_button/current_button, force = FALSE) + if(icon_icon && button_icon_state && ((current_button.button_icon_state != button_icon_state) || force)) + current_button.cut_overlays(TRUE) + current_button.add_overlay(mutable_appearance(icon_icon, button_icon_state)) + current_button.button_icon_state = button_icon_state + +// Currently never triggered +/datum/action/proc/OnUpdatedIcon() + SIGNAL_HANDLER + UpdateButtonIcon() //Presets for item actions /datum/action/item_action check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_LYING|AB_CHECK_CONSCIOUS + button_icon_state = null + // If you want to override the normal icon being the item + // then change this to an icon state /datum/action/item_action/New(Target) . = ..() var/obj/item/I = target - I.actions += src + LAZYADD(I.actions, src) /datum/action/item_action/Destroy() var/obj/item/I = target - I.actions -= src + LAZYREMOVE(I.actions, src) return ..() /datum/action/item_action/Trigger() @@ -110,22 +171,28 @@ I.ui_action_click(owner, src.type) return 1 -/datum/action/item_action/ApplyIcon(obj/screen/movable/action_button/current_button) - current_button.cut_overlays() - if(target) +/datum/action/item_action/ApplyIcon(obj/screen/movable/action_button/current_button, force) + if(button_icon && button_icon_state) + // If set, use the custom icon that we set instead + // of the item appearence + return ..() + else if(target && ((current_button.appearance_cache != target.appearance) || force)) var/mutable_appearance/ma = new(target.appearance) ma.plane = FLOAT_PLANE ma.layer = FLOAT_LAYER ma.pixel_x = 0 ma.pixel_y = 0 + + current_button.cut_overlays() current_button.add_overlay(ma) + current_button.appearance_cache = target.appearance /datum/action/item_action/hands_free check_flags = AB_CHECK_CONSCIOUS /datum/action/innate - check_flags = 0 + check_flags = NONE var/active = 0 /datum/action/innate/Trigger() @@ -143,14 +210,45 @@ /datum/action/innate/proc/Deactivate() return -//Preset for action that call specific procs (consider innate). -/datum/action/generic - check_flags = 0 - var/procname +//Preset for an action with a cooldown +/datum/action/cooldown + check_flags = NONE + transparent_when_unavailable = FALSE + var/cooldown_time = 0 + var/next_use_time = 0 -/datum/action/generic/Trigger() - if(!..()) - return 0 - if(target && procname) - call(target, procname)(usr) - return 1 +/datum/action/cooldown/New() + ..() + button.maptext = "" + button.maptext_x = 8 + button.maptext_y = 0 + button.maptext_width = 24 + button.maptext_height = 12 + +/datum/action/cooldown/IsAvailable() + return next_use_time <= world.time + +/datum/action/cooldown/proc/StartCooldown() + next_use_time = world.time + cooldown_time + button.maptext = span_maptext(span_bold("[round(cooldown_time/10, 0.1)]")) + UpdateButtonIcon() + START_PROCESSING(SSfastprocess, src) + +/datum/action/cooldown/process() + if(!owner) + button.maptext = "" + STOP_PROCESSING(SSfastprocess, src) + var/timeleft = max(next_use_time - world.time, 0) + if(timeleft == 0) + button.maptext = "" + UpdateButtonIcon() + STOP_PROCESSING(SSfastprocess, src) + else + button.maptext = span_maptext(span_bold("[round(timeleft/10, 0.1)]")) + +/datum/action/cooldown/Grant(mob/M) + ..() + if(owner) + UpdateButtonIcon() + if(next_use_time > world.time) + START_PROCESSING(SSfastprocess, src) diff --git a/code/_onclick/hud/action/action_screen_objects.dm b/code/_onclick/hud/action/action_screen_objects.dm index f4b10fc001..fd64a38d57 100644 --- a/code/_onclick/hud/action/action_screen_objects.dm +++ b/code/_onclick/hud/action/action_screen_objects.dm @@ -1,26 +1,107 @@ /obj/screen/movable/action_button var/datum/action/linked_action + var/actiontooltipstyle = "" screen_loc = null + var/button_icon_state + var/appearance_cache + + var/id + +/obj/screen/movable/action_button/proc/can_use(mob/user) + if(linked_action) + return linked_action.owner == user + else if(isobserver(user)) + // var/mob/dead/observer/O = user + // return !O.observetarget + return TRUE + else + return TRUE + +/obj/screen/movable/action_button/MouseDrop(over_object) + if(!can_use(usr)) + return + if((istype(over_object, /obj/screen/movable/action_button) && !istype(over_object, /obj/screen/movable/action_button/hide_toggle))) + if(locked) + to_chat(usr, span_warning("Action button \"[name]\" is locked, unlock it first.")) + return + var/obj/screen/movable/action_button/B = over_object + var/list/actions = usr.actions + actions.Swap(actions.Find(src.linked_action), actions.Find(B.linked_action)) + moved = FALSE + B.moved = FALSE + usr.update_action_buttons() + else + return ..() + /obj/screen/movable/action_button/Click(location,control,params) + if(!can_use(usr)) + return + var/list/modifiers = params2list(params) - if(modifiers["shift"]) + if(LAZYACCESS(modifiers, SHIFT_CLICK)) + if(locked) + to_chat(usr, span_warning("Action button \"[name]\" is locked, unlock it first.")) + return TRUE moved = FALSE usr.update_action_buttons() - return 1 + return TRUE + if(LAZYACCESS(modifiers, CTRL_CLICK)) + locked = !locked + to_chat(usr, span_notice("Action button \"[name]\" [locked ? "" : "un"]locked.")) + if(id && usr?.client?.prefs) // try to (un)remember position + LAZYSET(usr.client.prefs.action_button_screen_locs, "[name]_[id]", locked ? moved : null) + return TRUE if(!usr.checkClickCooldown()) return + usr.setClickCooldown(1) linked_action.Trigger() - return 1 + return TRUE + //Hide/Show Action Buttons ... Button /obj/screen/movable/action_button/hide_toggle name = "Hide Buttons" + desc = "Shift-click any button to reset its position, and Control-click it to lock it in place. Alt-click this button reset all buttons to their default positions." icon = 'icons/mob/actions.dmi' icon_state = "bg_default" - var/hidden = 0 + var/hidden = FALSE + +// /obj/screen/movable/action_button/hide_toggle/Initialize() +// . = ..() +// var/static/list/icon_cache = list() + +// var/cache_key = "[hide_icon][hide_state]" +// hide_appearance = icon_cache[cache_key] +// if(!hide_appearance) +// hide_appearance = icon_cache[cache_key] = mutable_appearance(hide_icon, hide_state) +// cache_key = "[hide_icon][show_state]" +// show_appearance = icon_cache[cache_key] +// if(!show_appearance) +// show_appearance = icon_cache[cache_key] = mutable_appearance(hide_icon, show_state) + +/obj/screen/movable/action_button/hide_toggle/Click(location, control, params) + if(!can_use(usr)) + return FALSE + + var/list/modifiers = params2list(params) + if(LAZYACCESS(modifiers, SHIFT_CLICK)) + if(locked) + to_chat(usr, span_warning("Action button \"[name]\" is locked, unlock it first.")) + return TRUE + moved = FALSE + usr.update_action_buttons(TRUE) + return TRUE + if(LAZYACCESS(modifiers, CTRL_CLICK)) + locked = !locked + to_chat(usr, span_notice("Action button \"[name]\" [locked ? "" : "un"]locked.")) + if(id && usr?.client?.prefs) // try to (un)remember position + LAZYSET(usr.client.prefs.action_button_screen_locs, "[name]_[id]", locked ? moved : null) + return TRUE + if(LAZYACCESS(modifiers, ALT_CLICK)) + AltClick(usr) + return TRUE -/obj/screen/movable/action_button/hide_toggle/Click() usr.hud_used.action_buttons_hidden = !usr.hud_used.action_buttons_hidden hidden = usr.hud_used.action_buttons_hidden @@ -28,41 +109,67 @@ name = "Show Buttons" else name = "Hide Buttons" - UpdateIcon() + update_icon() usr.update_action_buttons() -/obj/screen/movable/action_button/hide_toggle/proc/InitialiseIcon(var/mob/living/user) +/obj/screen/movable/action_button/hide_toggle/AltClick(mob/user) + for(var/datum/action/A as anything in user.actions) + var/obj/screen/movable/action_button/B = A.button + B.moved = FALSE + if(B.id && usr?.client?.prefs) + LAZYSET(usr.client.prefs.action_button_screen_locs, "[name]_[B.id]", null) + // B.locked = usr.client.prefs.buttons_locked + // locked = usr.client.prefs.buttons_locked + if(id && usr?.client?.prefs) + LAZYSET(usr.client.prefs.action_button_screen_locs, "[name]_[id]", null) + moved = FALSE + user.update_action_buttons(TRUE) + to_chat(user, span_notice("Action button positions have been reset.")) + +/obj/screen/movable/action_button/hide_toggle/proc/InitialiseIcon(mob/user) + // var/settings = owner_hud.get_action_buttons_icons() + // icon = settings["bg_icon"] + // icon_state = settings["bg_state"] + // hide_icon = settings["toggle_icon"] + // hide_state = settings["toggle_hide"] + // show_state = settings["toggle_show"] if(isalien(user)) icon_state = "bg_alien" else icon_state = "bg_default" - UpdateIcon() + update_icon() -/obj/screen/movable/action_button/hide_toggle/proc/UpdateIcon() +/obj/screen/movable/action_button/hide_toggle/update_icon() cut_overlays() - var/image/img = image(icon, src, hidden ? "show" : "hide") - add_overlay(img) + add_overlay(mutable_appearance(icon, hidden ? "show" : "hide")) + // add_overlay(mutable_appearance(hide_icon, hidden ? show_state : hide_state)) /obj/screen/movable/action_button/MouseEntered(location, control, params) - openToolTip(usr, src, params, title = name, content = desc) + . = ..() + if(!QDELETED(src)) + openToolTip(usr, src, params, title = name, content = desc, theme = actiontooltipstyle) /obj/screen/movable/action_button/MouseExited(location, control, params) closeToolTip(usr) -//used to update the buttons icon. -/mob/proc/update_action_buttons_icon() - return +// /datum/hud/proc/get_action_buttons_icons() +// . = list() +// .["bg_icon"] = ui_style_icon +// .["bg_state"] = "template" -/mob/living/update_action_buttons_icon() +// //TODO : Make these fit theme +// .["toggle_icon"] = 'icons/mob/actions.dmi' +// .["toggle_hide"] = "hide" +// .["toggle_show"] = "show" + +//used to update the buttons icon. +/mob/proc/update_action_buttons_icon(status_only = FALSE) for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtonIcon(status_only) -//This is the proc used to update all the action buttons. Properly defined in /mob/living/ +//This is the proc used to update all the action buttons. /mob/proc/update_action_buttons(reload_screen) - return - -/mob/living/update_action_buttons(reload_screen) if(!hud_used || !client) return diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 7ba7bba1e1..c2b54a001b 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -325,6 +325,8 @@ var/list/global_huds = list( mymob.create_mob_hud(src) hide_actions_toggle = new() hide_actions_toggle.InitialiseIcon(mymob) + // if(mymob.client) + // hide_actions_toggle.locked = mymob.client.prefs.buttons_locked persistant_inventory_update() mymob.reload_fullscreen() // Reload any fullscreen overlays this mob has. diff --git a/code/_onclick/hud/movable_screen_objects.dm b/code/_onclick/hud/movable_screen_objects.dm index 53e64c8b24..daa82352e4 100644 --- a/code/_onclick/hud/movable_screen_objects.dm +++ b/code/_onclick/hud/movable_screen_objects.dm @@ -12,6 +12,7 @@ mouse_drag_pointer = 'icons/effects/mouse_pointers/screen_drag.dmi' var/snap2grid = FALSE var/moved = FALSE + var/locked = FALSE var/x_off = -16 var/y_off = -16 @@ -23,6 +24,8 @@ /obj/screen/movable/MouseDrop(over_object, src_location, over_location, src_control, over_control, params) + if(locked) // no! i am locked! begone! + return var/position = mouse_params_to_position(params) if(!position) return @@ -78,6 +81,8 @@ . = num+1 else if(findtext(X,"CENTER")) . = view_dist+1 + else + . = text2num(X) /obj/screen/movable/proc/encode_screen_Y(Y) var/view_dist = world.view @@ -106,6 +111,8 @@ . = num+1 else if(findtext(Y,"CENTER")) . = view_dist+1 + else + . = text2num(Y) //Debug procs /client/proc/test_movable_UI() diff --git a/code/controllers/subsystems/statpanel.dm b/code/controllers/subsystems/statpanel.dm index baf3ec3d1d..3785596aaa 100644 --- a/code/controllers/subsystems/statpanel.dm +++ b/code/controllers/subsystems/statpanel.dm @@ -33,7 +33,7 @@ SUBSYSTEM_DEF(statpanels) //"Next Map: -- Not Available --", "Round ID: [GLOB.round_id ? GLOB.round_id : "NULL"]", // CHOMPEdit "Server Time: [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss")]", - "Round Time: [ROUND_TIME()]", + "Round Time: [roundduration2text()]", "Station Date: [stationdate2text()], [capitalize(GLOB.world_time_season)]", // CHOMPEdit "Station Time: [stationtime2text()]", "Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)" diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 6a98e24c73..a4629ace92 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -35,8 +35,8 @@ var/max_pressure_protection // Set this variable if the item protects its wearer against high pressures below an upper bound. Keep at null to disable protection. var/min_pressure_protection // Set this variable if the item protects its wearer against low pressures above a lower bound. Keep at null to disable protection. 0 represents protection against hard vacuum. - var/list/actions = list() //list of /datum/action's that this item has. - var/list/actions_types = list() //list of paths of action datums to give to the item on New(). + var/list/actions //list of /datum/action's that this item has. + var/list/actions_types //list of paths of action datums to give to the item on New(). //This flag is used to determine when items in someone's inventory cover others. IE helmets making it so you can't see glasses, etc. //It should be used purely for appearance. For gameplay effects caused by items covering body parts, use body_parts_covered. @@ -338,8 +338,7 @@ if(zoom) zoom() //binoculars, scope, etc appearance_flags &= ~NO_CLIENT_COLOR - for(var/X in actions) - var/datum/action/A = X + for(var/datum/action/A as anything in actions) A.Remove(user) // called just as an item is picked up (loc is not yet changed) diff --git a/code/game/objects/random/mob_vr.dm b/code/game/objects/random/mob_vr.dm index 36e31c5836..436c645412 100644 --- a/code/game/objects/random/mob_vr.dm +++ b/code/game/objects/random/mob_vr.dm @@ -70,7 +70,7 @@ prob(2);/obj/item/gun/projectile/automatic/l6_saw,\ prob(2);/obj/item/gun/energy/gun/burst,\ prob(2);/obj/item/storage/box/frags,\ - prob(2);/obj/item/twohanded/fireaxe,\ + prob(2);/obj/item/material/twohanded/fireaxe,\ prob(2);/obj/item/gun/projectile/luger/brown,\ prob(2);/obj/item/gun/launcher/crossbow,\ prob(2);/obj/item/melee/shock_maul,\ diff --git a/code/modules/awaymissions/loot_vr.dm b/code/modules/awaymissions/loot_vr.dm index 405f1a3664..b54d4cbd1b 100644 --- a/code/modules/awaymissions/loot_vr.dm +++ b/code/modules/awaymissions/loot_vr.dm @@ -135,7 +135,7 @@ prob(9);/obj/item/gun/projectile/automatic/mini_uzi,\ prob(9);/obj/item/gun/projectile/pistol,\ prob(9);/obj/item/gun/projectile/shotgun/pump/combat,\ - prob(9);/obj/item/twohanded/fireaxe,\ + prob(9);/obj/item/material/twohanded/fireaxe,\ prob(9);/obj/item/cane/concealed,\ prob(9);/obj/item/gun/energy/gun,\ prob(8);/obj/item/gun/energy/ionrifle,\ diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 740dee08d0..3e399c4271 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -173,6 +173,10 @@ var/list/preferences_datums = list() var/examine_text_mode = 0 // Just examine text, include usage (description_info), switch to examine panel. var/multilingual_mode = 0 // Default behaviour, delimiter-key-space, delimiter-key-delimiter, off + // THIS IS NOT SAVED + // WE JUST HAVE NOWHERE ELSE TO STORE IT + var/list/action_button_screen_locs + var/list/volume_channels = list() ///If they are currently in the process of swapping slots, don't let them open 999 windows for it and get confused diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 95bd6ae964..48de8b7663 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1041,6 +1041,7 @@ if(lying != lying_prev) lying_prev = lying update_transform() + update_action_buttons_icon(status_only = TRUE) //VOREStation Add if(lying && LAZYLEN(buckled_mobs)) for(var/mob/living/L as anything in buckled_mobs) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 697337a26d..db9a065e46 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -39,7 +39,6 @@ var/mob_always_swap = 0 var/mob/living/cameraFollow = null - var/list/datum/action/actions = list() var/tod = null // Time of death var/update_slimes = 1 diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 14b773ef69..a7e9f2cf34 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -240,4 +240,6 @@ /// dict of custom stat tabs with data var/list/list/misc_tabs = list() + var/list/datum/action/actions + var/custom_footstep = FOOTSTEP_MOB_SHOE // CHOMPEdit diff --git a/maps/gateway_archive_vr/labyrinth.dm b/maps/gateway_archive_vr/labyrinth.dm index fd4bdd65da..0e89d48771 100644 --- a/maps/gateway_archive_vr/labyrinth.dm +++ b/maps/gateway_archive_vr/labyrinth.dm @@ -221,7 +221,7 @@ // speak_chance = 1 a_intent = "harm" var/corpse = /obj/effect/landmark/mobcorpse/tunnelclown - var/weapon1 = /obj/item/twohanded/fireaxe + var/weapon1 = /obj/item/material/twohanded/fireaxe stop_when_pulled = 0 maxHealth = 100 health = 100