diff --git a/code/__DEFINES/conflict.dm b/code/__DEFINES/conflict.dm index 0820c709cdae..d69f0891ffa0 100644 --- a/code/__DEFINES/conflict.dm +++ b/code/__DEFINES/conflict.dm @@ -109,6 +109,7 @@ #define SHOES_SLOWDOWN -1 #define SLOWDOWN_ARMOR_NONE 0 +#define SLOWDOWN_ARMOR_SUPER_LIGHT 0.10 #define SLOWDOWN_ARMOR_VERY_LIGHT 0.20 #define SLOWDOWN_ARMOR_LIGHT 0.35 #define SLOWDOWN_ARMOR_MEDIUM 0.55 diff --git a/code/__DEFINES/dcs/signals/atom/signals_atom.dm b/code/__DEFINES/dcs/signals/atom/signals_atom.dm index cac9861d09cb..d9bd1202c159 100644 --- a/code/__DEFINES/dcs/signals/atom/signals_atom.dm +++ b/code/__DEFINES/dcs/signals/atom/signals_atom.dm @@ -51,3 +51,6 @@ /// Called when an atom is mouse dropped on another atom, from /client/MouseDrop: (atom/dropped_onto) #define COMSIG_ATOM_DROP_ON "atom_drop_on" + +/// Called when an atom has emp_act called on it, from /atom/emp_act: (severity) +#define COMSIG_ATOM_EMP_ACT "atom_emp_act" diff --git a/code/__DEFINES/dcs/signals/atom/signals_cell.dm b/code/__DEFINES/dcs/signals/atom/signals_cell.dm new file mode 100644 index 000000000000..75e13d8bfdfc --- /dev/null +++ b/code/__DEFINES/dcs/signals/atom/signals_cell.dm @@ -0,0 +1,26 @@ +/// (charge_amount) +#define COMSIG_CELL_USE_CHARGE "cell_use_charge" + #define COMPONENT_CELL_NO_USE_CHARGE (1<<0) + +/// (charge_amount) +#define COMSIG_CELL_ADD_CHARGE "cell_add_charge" + +#define COMSIG_CELL_START_TICK_DRAIN "cell_start_tick_drain" + +#define COMSIG_CELL_STOP_TICK_DRAIN "cell_stop_tick_drain" + +/// (mob/living/user) +#define COMSIG_CELL_TRY_RECHARGING "cell_try_recharging" + #define COMPONENT_CELL_NO_RECHARGE (1<<0) + +#define COMSIG_CELL_OUT_OF_CHARGE "cell_out_of_charge" + +/// (charge_amount) +#define COMSIG_CELL_CHECK_CHARGE "cell_check_charge" + #define COMPONENT_CELL_CHARGE_INSUFFICIENT (1<<0) + +#define COMSIG_CELL_TRY_INSERT_CELL "cell_try_insert_cell" + #define COMPONENT_CANCEL_CELL_INSERT (1<<0) + +/// (mob/living/user) +#define COMSIG_CELL_REMOVE_CELL "cell_remove_cell" diff --git a/code/__DEFINES/dcs/signals/atom/signals_item.dm b/code/__DEFINES/dcs/signals/atom/signals_item.dm index 64f4c24798e1..6024c0524992 100644 --- a/code/__DEFINES/dcs/signals/atom/signals_item.dm +++ b/code/__DEFINES/dcs/signals/atom/signals_item.dm @@ -66,5 +66,5 @@ /// from /obj/item/weapon/gun/proc/load_into_chamber() : () #define COMSIG_GUN_INTERRUPT_FIRE "gun_interrupt_fire" -//Additional procs on items that will be triggered right after the human finishes spawns in +//from /datum/authority/branch/role/proc/equip_role() #define COMSIG_POST_SPAWN_UPDATE "post_spawn_update" diff --git a/code/__DEFINES/equipment.dm b/code/__DEFINES/equipment.dm index 5f8f27a65711..6628a5c925c2 100644 --- a/code/__DEFINES/equipment.dm +++ b/code/__DEFINES/equipment.dm @@ -80,10 +80,8 @@ #define CAN_DIG_SHRAPNEL (1<<11) /// whether it has an animated icon state of "[icon_state]_on" to be used during surgeries. #define ANIMATED_SURGICAL_TOOL (1<<12) -/// The item goes on top of tables, instead of into them with the overlay system -#define NOTABLEMERGE (1<<13) /// Has heat source but isn't 'on fire' and thus can be stored -#define IGNITING_ITEM (1<<14) +#define IGNITING_ITEM (1<<13) //========================================================================================== diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index ac4c3d833dd5..ece9b81b503b 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -10,6 +10,9 @@ _L = target._status_traits; \ _L[trait] = list(source); \ SEND_SIGNAL(target, SIGNAL_ADDTRAIT(trait), trait); \ + if(trait in GLOB.traits_with_elements){ \ + target.AddElement(GLOB.traits_with_elements[trait]); \ + } \ } else { \ _L = target._status_traits; \ if (_L[trait]) { \ @@ -17,6 +20,9 @@ } else { \ _L[trait] = list(source); \ SEND_SIGNAL(target, SIGNAL_ADDTRAIT(trait), trait); \ + if(trait in GLOB.traits_with_elements){ \ + target.AddElement(GLOB.traits_with_elements[trait]); \ + } \ } \ } \ } while (0) @@ -38,6 +44,9 @@ if (!length(_L[trait])) { \ _L -= trait; \ SEND_SIGNAL(target, SIGNAL_REMOVETRAIT(trait), trait); \ + if(trait in GLOB.traits_with_elements) { \ + target.RemoveElement(GLOB.traits_with_elements[trait]); \ + } \ }; \ if (!length(_L)) { \ target._status_traits = null \ @@ -62,6 +71,9 @@ if (!length(_traits_list[trait])) { \ _traits_list -= trait; \ SEND_SIGNAL(target, SIGNAL_REMOVETRAIT(trait), trait); \ + if(trait in GLOB.traits_with_elements) { \ + target.RemoveElement(GLOB.traits_with_elements[trait]); \ + } \ }; \ if (!length(_traits_list)) { \ target._status_traits = null \ @@ -78,8 +90,11 @@ if (!length(_L[_T])) { \ _L -= _T; \ SEND_SIGNAL(target, SIGNAL_REMOVETRAIT(_T), _T); \ + if(trait in GLOB.traits_with_elements) { \ + target.RemoveElement(GLOB.traits_with_elements[trait]); \ }; \ };\ + };\ if (!length(_L)) { \ target._status_traits = null\ };\ @@ -101,8 +116,11 @@ if (!length(_L[_T])) { \ _L -= _T; \ SEND_SIGNAL(target, SIGNAL_REMOVETRAIT(_T)); \ + if(_T in GLOB.traits_with_elements) { \ + target.RemoveElement(GLOB.traits_with_elements[_T]); \ }; \ };\ + };\ if (!length(_L)) { \ target._status_traits = null\ };\ @@ -124,9 +142,6 @@ /// Example trait // #define TRAIT_X "t_x" -/// cannot be removed without admin intervention -#define ROUNDSTART_TRAIT "roundstart" - //-- mob traits -- /// Apply this to make a mob not dense, and remove it when you want it to no longer make them undense, other sorces of undesity will still apply. Always define a unique source when adding a new instance of this! #define TRAIT_UNDENSE "undense" @@ -368,6 +383,8 @@ GLOBAL_LIST(trait_name_map) /// Example trait source // #define TRAIT_SOURCE_Y "t_s_y" #define TRAIT_SOURCE_INHERENT "t_s_inherent" +/// cannot be removed without admin intervention +#define ROUNDSTART_TRAIT "roundstart" //-- mob traits -- ///Status trait coming from lying down through update_canmove() #define LYING_TRAIT "lying" @@ -377,8 +394,6 @@ GLOBAL_LIST(trait_name_map) #define TRAIT_SOURCE_HIVE "t_s_hive" ///Status trait coming from being buckled. #define TRAIT_SOURCE_BUCKLE "t_s_buckle" -///Status trait coming from roundstart quirks (that don't exist yet). Unremovable by REMOVE_TRAIT -#define TRAIT_SOURCE_QUIRK "t_s_quirk" ///Status trait coming from being assigned as [acting] squad leader. #define TRAIT_SOURCE_SQUAD_LEADER "t_s_squad_leader" ///Status trait coming from their job diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 91687b19d2dd..0d5e2680502d 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -166,7 +166,6 @@ DEFINE_BITFIELD(flags_item, list( "ITEM_OVERRIDE_NORTHFACE" = ITEM_OVERRIDE_NORTHFACE, "CAN_DIG_SHRAPNEL" = CAN_DIG_SHRAPNEL, "ANIMATED_SURGICAL_TOOL" = ANIMATED_SURGICAL_TOOL, - "NOTABLEMERGE" = NOTABLEMERGE, "IGNITING_ITEM" = IGNITING_ITEM, )) diff --git a/code/_onclick/hud/ghost.dm b/code/_onclick/hud/ghost.dm index a6754747a019..a99129d09bcd 100644 --- a/code/_onclick/hud/ghost.dm +++ b/code/_onclick/hud/ghost.dm @@ -48,6 +48,14 @@ var/mob/dead/observer/G = usr G.reenter_corpse() +/atom/movable/screen/ghost/toggle_huds + name = "Toggle HUDs" + icon_state = "ghost_hud_toggle" + +/atom/movable/screen/ghost/toggle_huds/Click() + var/client/client = usr.client + client.toggle_ghost_hud() + /datum/hud/ghost/New(mob/owner, ui_style='icons/mob/hud/human_white.dmi', ui_color, ui_alpha = 230) . = ..() var/atom/movable/screen/using @@ -68,6 +76,9 @@ using.screen_loc = ui_ghost_slot4 static_inventory += using + using = new /atom/movable/screen/ghost/toggle_huds() + using.screen_loc = ui_ghost_slot5 + static_inventory += using /datum/hud/ghost/show_hud(version = 0, mob/viewmob) // don't show this HUD if observing; show the HUD of the observee diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index b49bce4111f0..d114aff6b7cb 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -535,7 +535,7 @@ if(!user.hive.living_xeno_queen) to_chat(user, SPAN_WARNING("Without a queen your psychic link is broken!")) return FALSE - if(user.burrow || user.is_mob_incapacitated() || user.buckled) + if(HAS_TRAIT(user, TRAIT_ABILITY_BURROWED) || user.is_mob_incapacitated() || user.buckled) return FALSE user.hive.mark_ui.update_all_data() user.hive.mark_ui.open_mark_menu(user) @@ -583,7 +583,7 @@ if(!user.hive.living_xeno_queen) to_chat(user, SPAN_WARNING("Your hive doesn't have a living queen!")) return FALSE - if(user.burrow || user.is_mob_incapacitated() || user.buckled) + if(HAS_TRAIT(user, TRAIT_ABILITY_BURROWED) || user.is_mob_incapacitated() || user.buckled) return FALSE user.overwatch(user.hive.living_xeno_queen) diff --git a/code/_onclick/xeno.dm b/code/_onclick/xeno.dm index 0f9c50acb49d..abb76ded498b 100644 --- a/code/_onclick/xeno.dm +++ b/code/_onclick/xeno.dm @@ -3,7 +3,7 @@ */ /mob/living/carbon/xenomorph/UnarmedAttack(atom/target, proximity, click_parameters, tile_attack = FALSE, ignores_resin = FALSE) - if(body_position == LYING_DOWN || burrow) //No attacks while laying down + if(body_position == LYING_DOWN || HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) //No attacks while laying down return FALSE var/mob/alt diff --git a/code/controllers/subsystem/game_decorator.dm b/code/controllers/subsystem/game_decorator.dm index cfee0406f84a..dd53b647d1a8 100644 --- a/code/controllers/subsystem/game_decorator.dm +++ b/code/controllers/subsystem/game_decorator.dm @@ -20,7 +20,7 @@ SUBSYSTEM_DEF(game_decorator) var/defer_decoration = TRUE //! So map decoration is done post-setup after nightmare and spawners /datum/game_decorator/New() - if(defer_decoration) + if(defer_decoration && is_active_decor()) RegisterSignal(SSdcs, COMSIG_GLOB_MODE_POSTSETUP, PROC_REF(defered_decoration)) /datum/game_decorator/proc/is_active_decor() diff --git a/code/datums/components/autofire/autofire.dm b/code/datums/components/autofire/autofire.dm index d052127effc3..455fb70a9fa1 100644 --- a/code/datums/components/autofire/autofire.dm +++ b/code/datums/components/autofire/autofire.dm @@ -82,6 +82,8 @@ /datum/component/automatedfire/autofire/proc/initiate_shot() SIGNAL_HANDLER if(shooting)//if we are already shooting, it means the shooter is still on cooldown + if(bursting && (world.time > (next_fire + (burstfire_shot_delay * burst_shots_to_fire)))) + hard_reset() return shooting = TRUE process_shot() diff --git a/code/datums/components/cell.dm b/code/datums/components/cell.dm new file mode 100644 index 000000000000..81ef3733e2e2 --- /dev/null +++ b/code/datums/components/cell.dm @@ -0,0 +1,202 @@ +#define UNLIMITED_CHARGE -1 +#define UNLIMITED_DISTANCE -1 + +/datum/component/cell + dupe_mode = COMPONENT_DUPE_UNIQUE + /// Maximum charge of the power cell, set to -1 for infinite charge + var/max_charge = 10000 + /// Initial max charge of the power cell + var/initial_max_charge + /// Current charge of power cell + var/charge = 10000 + /// If the component can be recharged by hitting its parent with a cell + var/hit_charge = FALSE + /// The maximum amount that can be recharged per tick when using a cell to recharge this component + var/max_recharge_tick = 400 + /// If draining charge on process(), how much to drain per process call + var/charge_drain = 10 + /// If the parent should show cell charge on examine + var/display_charge = TRUE + /// From how many tiles at the highest someone can examine the parent to see the charge + var/charge_examine_range = 1 + /// If the component requires a cell to be inserted to work instead of having an integrated one + var/cell_insert = FALSE + /// Ref to an inserted cell. Should only be null if cell_insert is false + var/obj/item/cell/inserted_cell + + +/datum/component/cell/Initialize( + max_charge = 10000, + hit_charge = FALSE, + max_recharge_tick = 400, + charge_drain = 10, + display_charge = TRUE, + charge_examine_range = 1, + cell_insert = FALSE, + ) + + . = ..() + if(!isatom(parent)) + return COMPONENT_INCOMPATIBLE + + src.max_charge = max_charge + charge = max_charge + src.hit_charge = hit_charge + src.max_recharge_tick = max_recharge_tick + src.charge_drain = charge_drain + src.display_charge = display_charge + src.charge_examine_range = charge_examine_range + src.cell_insert = cell_insert + +/datum/component/cell/Destroy(force, silent) + QDEL_NULL(inserted_cell) + return ..() + + +/datum/component/cell/RegisterWithParent() + ..() + RegisterSignal(parent, list(COMSIG_PARENT_ATTACKBY, COMSIG_ITEM_ATTACKED), PROC_REF(on_object_hit)) + RegisterSignal(parent, COMSIG_CELL_ADD_CHARGE, PROC_REF(add_charge)) + RegisterSignal(parent, COMSIG_CELL_USE_CHARGE, PROC_REF(use_charge)) + RegisterSignal(parent, COMSIG_CELL_CHECK_CHARGE, PROC_REF(has_charge)) + RegisterSignal(parent, COMSIG_CELL_START_TICK_DRAIN, PROC_REF(start_drain)) + RegisterSignal(parent, COMSIG_CELL_STOP_TICK_DRAIN, PROC_REF(stop_drain)) + RegisterSignal(parent, COMSIG_CELL_REMOVE_CELL, PROC_REF(remove_cell)) + RegisterSignal(parent, COMSIG_PARENT_EXAMINE, PROC_REF(on_examine)) + RegisterSignal(parent, COMSIG_ATOM_EMP_ACT, PROC_REF(on_emp)) + +/datum/component/cell/process() + use_charge(null, charge_drain) + +/datum/component/cell/proc/on_emp(datum/source, severity) + SIGNAL_HANDLER + + use_charge(null, round(max_charge / severity)) + +/datum/component/cell/proc/start_drain(datum/source) + SIGNAL_HANDLER + + START_PROCESSING(SSobj, src) + +/datum/component/cell/proc/stop_drain(datum/source) + SIGNAL_HANDLER + + STOP_PROCESSING(SSobj, src) + +/datum/component/cell/proc/on_examine(datum/source, mob/examiner, list/examine_text) + SIGNAL_HANDLER + + if(!display_charge) + return + + if((charge_examine_range != UNLIMITED_DISTANCE) && get_dist(examiner, parent) > charge_examine_range) + return + + examine_text += "A small gauge in the corner reads \"Power: [round(100 * charge / max_charge)]%\"." + +/datum/component/cell/proc/on_object_hit(datum/source, obj/item/cell/attack_obj, mob/living/attacker, params) + SIGNAL_HANDLER + + if(!hit_charge || !istype(attack_obj)) + return + + if(!cell_insert) + INVOKE_ASYNC(src, PROC_REF(charge_from_cell), attack_obj, attacker) + + else + insert_cell(attack_obj, attacker) + + return COMPONENT_NO_AFTERATTACK|COMPONENT_CANCEL_ITEM_ATTACK + +/datum/component/cell/proc/insert_cell(obj/item/cell/power_cell, mob/living/user) + if(inserted_cell) + to_chat(user, SPAN_WARNING("There's already a power cell in [parent]!")) + return + + if(SEND_SIGNAL(parent, COMSIG_CELL_TRY_INSERT_CELL) & COMPONENT_CANCEL_CELL_INSERT) + return + + power_cell.drop_to_floor(user) + power_cell.forceMove(parent) + inserted_cell = power_cell + charge = power_cell.charge + max_charge = power_cell.maxcharge + +/datum/component/cell/proc/remove_cell(mob/living/user) + SIGNAL_HANDLER + + user.put_in_hands(inserted_cell, TRUE) + to_chat(user, SPAN_NOTICE("You remove [inserted_cell] from [parent].")) + inserted_cell = null + max_charge = initial_max_charge + charge = 0 + +/datum/component/cell/proc/charge_from_cell(obj/item/cell/power_cell, mob/living/user) + if(max_charge == UNLIMITED_CHARGE) + to_chat(user, SPAN_WARNING("[parent] doesn't need more power.")) + return + + while(charge < max_charge) + if(SEND_SIGNAL(parent, COMSIG_CELL_TRY_RECHARGING, user) & COMPONENT_CELL_NO_RECHARGE) + return + + if(power_cell.charge <= 0) + to_chat(user, SPAN_WARNING("[power_cell] is completely dry.")) + return + + if(!do_after(user, 1 SECONDS, (INTERRUPT_ALL & (~INTERRUPT_MOVED)), BUSY_ICON_BUILD, power_cell, INTERRUPT_DIFF_LOC)) + to_chat(user, SPAN_WARNING("You were interrupted.")) + return + + if(power_cell.charge <= 0) + return + + var/to_transfer = min(max_recharge_tick, power_cell.charge, (max_charge - charge)) + if(power_cell.use(to_transfer)) + add_charge(null, to_transfer) + to_chat(user, "You transfer some power between [power_cell] and [parent]. The gauge now reads: [round(100 * charge / max_charge)]%.") + +/datum/component/cell/proc/add_charge(datum/source, charge_add = 0) + SIGNAL_HANDLER + + if(max_charge == UNLIMITED_CHARGE) + return + + if(!charge_add) + return + + charge = clamp(charge + charge_add, 0, max_charge) + +/datum/component/cell/proc/use_charge(datum/source, charge_use = 0) + SIGNAL_HANDLER + + if(max_charge == UNLIMITED_CHARGE) + return + + if(!charge_use) + return + + if(!charge) + return COMPONENT_CELL_NO_USE_CHARGE + + charge = clamp(charge - charge_use, 0, max_charge) + + if(!charge) + on_charge_empty() + return + +/datum/component/cell/proc/has_charge(datum/source, charge_amount = 0) + SIGNAL_HANDLER + + if(!charge) + return COMPONENT_CELL_CHARGE_INSUFFICIENT + + if(charge < charge_amount) + return COMPONENT_CELL_CHARGE_INSUFFICIENT + +/datum/component/cell/proc/on_charge_empty() + stop_drain() + SEND_SIGNAL(parent, COMSIG_CELL_OUT_OF_CHARGE) + +#undef UNLIMITED_CHARGE +#undef UNLIMITED_DISTANCE diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 283efdc50a22..44494bea83a0 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -205,7 +205,9 @@ directive is properly returned. return /atom/proc/emp_act(severity) - return + SHOULD_CALL_PARENT(TRUE) + + SEND_SIGNAL(src, COMSIG_ATOM_EMP_ACT, severity) /atom/proc/in_contents_of(container)//can take class or object instance as argument if(ispath(container)) @@ -245,8 +247,8 @@ directive is properly returned. if(!examine_strings) log_debug("Attempted to create an examine block with no strings! Atom : [src], user : [user]") return - to_chat(user, examine_block(examine_strings.Join("\n"))) SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, examine_strings) + to_chat(user, examine_block(examine_strings.Join("\n"))) /atom/proc/get_examine_text(mob/user) . = list() diff --git a/code/game/jobs/role_authority.dm b/code/game/jobs/role_authority.dm index 51039663a43f..dc9865f8d6e6 100644 --- a/code/game/jobs/role_authority.dm +++ b/code/game/jobs/role_authority.dm @@ -579,9 +579,7 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou new_human.sec_hud_set_ID() new_human.hud_set_squad() - for(var/obj/current_item in new_human.get_contents()) - SEND_SIGNAL(current_item, COMSIG_POST_SPAWN_UPDATE, new_human) - + SEND_SIGNAL(new_human, COMSIG_POST_SPAWN_UPDATE) SSround_recording.recorder.track_player(new_human) //Find which squad has the least population. If all 4 squads are equal it should just use a random one diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm index 0af38cacd75e..1c240fb05dfb 100644 --- a/code/game/machinery/atmoalter/scrubber.dm +++ b/code/game/machinery/atmoalter/scrubber.dm @@ -18,16 +18,14 @@ PF.flags_can_pass_all = PASS_OVER|PASS_AROUND|PASS_UNDER /obj/structure/machinery/portable_atmospherics/powered/scrubber/emp_act(severity) + . = ..() if(inoperable()) - ..(severity) return if(prob(50/severity)) on = !on update_icon() - ..(severity) - /obj/structure/machinery/portable_atmospherics/powered/scrubber/update_icon() src.overlays = 0 diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm index 116753093fe5..912a6070328a 100644 --- a/code/game/machinery/bots/bots.dm +++ b/code/game/machinery/bots/bots.dm @@ -114,6 +114,7 @@ /obj/structure/machinery/bot/emp_act(severity) + . = ..() var/was_on = on stat |= EMPED new /obj/effect/overlay/temp/emp_sparks (loc) diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm index 4ad40a6058bb..16e4335b7147 100644 --- a/code/game/machinery/bots/mulebot.dm +++ b/code/game/machinery/bots/mulebot.dm @@ -915,11 +915,11 @@ post_signal_multiple(control_freq, kv) /obj/structure/machinery/bot/mulebot/emp_act(severity) + . = ..() if (cell) cell.emp_act(severity) if(load) load.emp_act(severity) - ..() /obj/structure/machinery/bot/mulebot/explode() diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index d416c561fcd3..3b2a91eea314 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -35,6 +35,9 @@ var/colony_camera_mapload = TRUE + /// If this camera should have innate EMP-proofing + var/emp_proof = FALSE + /obj/structure/machinery/camera/Initialize(mapload, ...) . = ..() WireColorToFlag = randomCameraWires() @@ -72,6 +75,7 @@ if(WEST) pixel_x = 27 /obj/structure/machinery/camera/emp_act(severity) + . = ..() if(!isEmpProof()) if(prob(100/severity)) icon_state = "[initial(icon_state)]emp" @@ -89,7 +93,6 @@ if(can_use()) cameranet.addCamera(src) kick_viewers() - ..() /obj/structure/machinery/camera/ex_act(severity) diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm index a8735cbc06a8..e5ab520cbee8 100644 --- a/code/game/machinery/camera/presets.dm +++ b/code/game/machinery/camera/presets.dm @@ -30,6 +30,7 @@ network = list(CAMERA_NET_LASER_TARGETS) unslashable = TRUE unacidable = TRUE + emp_proof = TRUE /obj/structure/machinery/camera/laser_cam/Initialize(mapload, laser_name) . = ..() @@ -37,8 +38,6 @@ var/area/A = get_area(src) c_tag = "[laser_name] ([A.name])" -/obj/structure/machinery/camera/laser_cam/emp_act(severity) - return //immune to EMPs, just in case /obj/structure/machinery/camera/laser_cam/ex_act() return @@ -125,9 +124,7 @@ invisibility = 101 //fuck you init() colony_camera_mapload = FALSE - -/obj/structure/machinery/camera/autoname/lz_camera/emp_act(severity) - return //immune to EMPs, just in case + emp_proof = TRUE /obj/structure/machinery/camera/autoname/lz_camera/ex_act() return @@ -137,7 +134,7 @@ /obj/structure/machinery/camera/proc/isEmpProof() var/O = locate(/obj/item/stack/sheet/mineral/osmium) in assembly.upgrades - return O + return O || emp_proof /obj/structure/machinery/camera/proc/isXRay() var/obj/item/stock_parts/scanning_module/O = locate(/obj/item/stock_parts/scanning_module) in assembly.upgrades diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index fcd8c65e93ca..eb7a501fa078 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -80,11 +80,11 @@ return /obj/structure/machinery/cell_charger/emp_act(severity) + . = ..() if(inoperable()) return if(charging) charging.emp_act(severity) - ..(severity) /obj/structure/machinery/cell_charger/process() diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 8d35dd1b6aff..1ac5a06738d5 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -165,8 +165,8 @@ return /obj/structure/machinery/computer/arcade/emp_act(severity) + . = ..() if(inoperable()) - ..(severity) return var/empprize = null var/num_of_prizes = 0 @@ -178,5 +178,3 @@ for(num_of_prizes; num_of_prizes > 0; num_of_prizes--) empprize = pickweight(prizes) new empprize(src.loc) - - ..(severity) diff --git a/code/game/machinery/computer/camera_console.dm b/code/game/machinery/computer/camera_console.dm index 281c548227b0..0fd487e2ef7c 100644 --- a/code/game/machinery/computer/camera_console.dm +++ b/code/game/machinery/computer/camera_console.dm @@ -354,8 +354,8 @@ exproof = TRUE colony_camera_mapload = FALSE -/obj/structure/machinery/computer/cameras/mortar/emp_act(severity) - return FALSE +/obj/structure/machinery/computer/cameras/mortar/set_broken() + return /obj/structure/machinery/computer/cameras/dropship name = "abstract dropship camera computer" diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 304b24a14f04..c33517796271 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -31,8 +31,9 @@ return 1 /obj/structure/machinery/computer/emp_act(severity) - if(prob(20/severity)) set_broken() - ..() + . = ..() + if(prob(20/severity)) + set_broken() /obj/structure/machinery/computer/ex_act(severity) diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index 7ad223093130..6f5c1229c55a 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -483,8 +483,8 @@ return /obj/structure/machinery/computer/med_data/emp_act(severity) + . = ..() if(inoperable()) - ..(severity) return for(var/datum/data/record/R as anything in GLOB.data_core.medical) @@ -509,8 +509,6 @@ qdel(R) continue - ..(severity) - /obj/structure/machinery/computer/med_data/laptop name = "Medical Laptop" diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 857118937910..2d9a4a1dbea4 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -524,8 +524,8 @@ What a mess.*/ return selection.fields["img"] /obj/structure/machinery/computer/secure_data/emp_act(severity) + . = ..() if(inoperable()) - ..(severity) return for(var/datum/data/record/R in GLOB.data_core.security) @@ -550,8 +550,6 @@ What a mess.*/ qdel(R) continue - ..(severity) - /obj/structure/machinery/computer/secure_data/detective_computer icon = 'icons/obj/structures/machinery/computer.dmi' icon_state = "messyfiles" diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm index a20d344b53a9..60b5aa232940 100644 --- a/code/game/machinery/computer/skills.dm +++ b/code/game/machinery/computer/skills.dm @@ -347,8 +347,8 @@ What a mess.*/ return /obj/structure/machinery/computer/skills/emp_act(severity) + . = ..() if(inoperable()) - ..(severity) return for(var/datum/data/record/R in GLOB.data_core.security) @@ -373,4 +373,3 @@ What a mess.*/ qdel(R) continue - ..(severity) diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 99996bea8978..687882d9d7ae 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -65,6 +65,7 @@ return /obj/structure/machinery/deployable/barrier/emp_act(severity) + . = ..() if(inoperable()) return if(prob(50/severity)) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index df032301ee45..e381da0c3303 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -866,3 +866,8 @@ GLOBAL_LIST_INIT(airlock_wire_descriptions, list( var/damage = xeno.melee_damage_upper * TAILSTAB_AIRLOCK_DAMAGE_MULTIPLIER take_damage(damage, xeno) return TAILSTAB_COOLDOWN_NORMAL + +/obj/structure/machinery/door/airlock/autoclose() + if(locked) + return + ..() diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index f4d09796194c..feb699fd245e 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -138,7 +138,6 @@ opacity = 0 assembly_type = /obj/structure/airlock_assembly/airlock_assembly_research glass = 1 - heat_proof = 1 req_one_access = list(ACCESS_CIVILIAN_RESEARCH, ACCESS_CIVILIAN_COMMAND, ACCESS_WY_COLONIAL) /obj/structure/machinery/door/airlock/glass_mining/colony diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 578ef368f5d9..021cb60769f9 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -1,4 +1,3 @@ - /obj/structure/machinery/door name = "\improper Door" desc = "It opens and closes." @@ -7,50 +6,43 @@ anchored = TRUE opacity = TRUE density = TRUE - throwpass = 0 + throwpass = FALSE layer = DOOR_OPEN_LAYER minimap_color = MINIMAP_DOOR var/open_layer = DOOR_OPEN_LAYER var/closed_layer = DOOR_CLOSED_LAYER var/id = "" + var/width = 1 var/secondsElectrified = 0 - var/visible = 1 + var/visible = TRUE var/panel_open = FALSE - var/operating = 0 - var/autoclose = 0 - var/glass = 0 - var/normalspeed = 1 - var/openspeed = 10 //How many seconds does it take to open it? Default 1 second. Use only if you have long door opening animations - var/heat_proof = 0 // For glass airlocks/opacity firedoors - var/air_properties_vary_with_direction = 0 - var/turf/filler //Fixes double door opacity issue + var/operating = FALSE + var/autoclose = FALSE + var/glass = FALSE + /// If FALSE it speeds up the autoclosing timing. + var/normalspeed = TRUE + /// Time to open/close airlock, default is 1 second. + var/openspeed = 1 SECONDS + /// Fixes multi_tile doors opacity issues. + var/list/filler_turfs = list() //Previously this was just var, because no one had forseen someone creating doors more than 2 tiles wide /// Stops it being forced open through normal means (Hunters/Zombies/Aliens). var/heavy = FALSE /// Resistance to masterkey var/masterkey_resist = FALSE var/masterkey_mod = 0.1 - - - //Multi-tile doors - dir = EAST - var/width = 1 + dir = EAST //So multitile doors are directioned properly /obj/structure/machinery/door/Initialize(mapload, ...) . = ..() - if(density) - layer = closed_layer - update_flags_heat_protection(get_turf(src)) - else - layer = open_layer - + layer = density ? closed_layer : open_layer handle_multidoor() /obj/structure/machinery/door/Destroy() . = ..() - if(filler && width > 1) - filler.set_opacity(0)// Ehh... let's hope there are no walls there. Must fix this - filler = null + if(length(filler_turfs) && width > 1) + change_filler_opacity(0) // It still doesn't check for walls, might want to add checking that in the future + filler_turfs = null density = FALSE /obj/structure/machinery/door/initialize_pass_flags(datum/pass_flags_container/PF) @@ -58,21 +50,41 @@ if (PF) PF.flags_can_pass_all = NONE +/// Also refreshes filler_turfs list. +/obj/structure/machinery/door/proc/change_filler_opacity(new_opacity) + // I have no idea why do we null opacity first before... changing it + for(var/turf/filler_turf as anything in filler_turfs) + filler_turf.set_opacity(null) + + filler_turfs = list() + for(var/turf/filler as anything in locate_filler_turfs()) + filler.set_opacity(new_opacity) + filler_turfs += filler + +/// Updates collision box and opacity of multi_tile airlocks. /obj/structure/machinery/door/proc/handle_multidoor() if(width > 1) if(dir in list(EAST, WEST)) bound_width = width * world.icon_size bound_height = world.icon_size - filler = get_step(src,EAST) - filler.set_opacity(opacity) else bound_width = world.icon_size bound_height = width * world.icon_size - filler = get_step(src,NORTH) - filler.set_opacity(opacity) + change_filler_opacity(opacity) + +/// Finds turfs which should be filler ones. +/obj/structure/machinery/door/proc/locate_filler_turfs() + var/turf/filler_temp + var/list/located_turfs = list() -//process() - //return + for(var/i in 1 to width - 1) + if (dir in list(EAST, WEST)) + filler_temp = locate(x + i, y, z) + else + filler_temp = locate(x, y + i, z) + if (filler_temp) + located_turfs += filler_temp + return located_turfs /obj/structure/machinery/door/proc/borders_space() for(var/turf/target in range(1, src)) @@ -81,7 +93,8 @@ return FALSE /obj/structure/machinery/door/Collided(atom/movable/AM) - if(panel_open || operating) return + if(panel_open || operating) + return if(ismob(AM)) var/mob/M = AM if(world.time - M.last_bumped <= openspeed) return //Can bump-open one airlock per second. This is to prevent shock spam. @@ -89,12 +102,10 @@ if(!M.is_mob_restrained() && M.mob_size > MOB_SIZE_SMALL) bumpopen(M) return - if(istype(AM, /obj)) var/obj/O = AM if(O.buckled_mob) Collided(O.buckled_mob) - if(istype(AM, /obj/structure/machinery/bot)) var/obj/structure/machinery/bot/bot = AM if(src.check_access(bot.botcard)) @@ -102,16 +113,17 @@ open() return - /obj/structure/machinery/door/proc/bumpopen(mob/user as mob) - if(operating) return - src.add_fingerprint(user) - if(!src.requiresID()) + if(operating) + return + add_fingerprint(user) + if(!requiresID()) user = null - if(density) - if(allowed(user)) open() - else flick("door_deny", src) + if(allowed(user)) + open() + else + flick("door_deny", src) return /obj/structure/machinery/door/attack_remote(mob/user) @@ -124,9 +136,7 @@ add_fingerprint(user) if(operating) return - if(!Adjacent(user)) - user = null //so allowed(user) always succeeds - if(!requiresID()) + if(!Adjacent(user) || !requiresID()) user = null //so allowed(user) always succeeds if(allowed(user)) if(density) @@ -137,64 +147,56 @@ if(density) flick("door_deny", src) - /obj/structure/machinery/door/attackby(obj/item/I, mob/user) if(!(I.flags_item & NOBLUDGEON)) try_to_activate_door(user) - return 1 + return TRUE /obj/structure/machinery/door/emp_act(severity) - if(prob(20/severity) && (istype(src,/obj/structure/machinery/door/airlock) || istype(src,/obj/structure/machinery/door/window)) ) + . = ..() + if(prob(20/severity) && use_power) open() if(prob(40/severity)) if(secondsElectrified == 0) secondsElectrified = -1 spawn(30 SECONDS) secondsElectrified = 0 - ..() - /obj/structure/machinery/door/ex_act(severity) - if(unacidable) return + if(unacidable) + return if(density) switch(severity) if(0 to EXPLOSION_THRESHOLD_LOW) if(prob(80)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(2, 1, src) - s.start() + var/datum/effect_system/spark_spread/spark = new /datum/effect_system/spark_spread + spark.set_up(2, 1, src) + spark.start() if(EXPLOSION_THRESHOLD_LOW to INFINITY) qdel(src) else switch(severity) if(0 to EXPLOSION_THRESHOLD_MEDIUM) if(prob(80)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(2, 1, src) - s.start() + var/datum/effect_system/spark_spread/spark = new /datum/effect_system/spark_spread + spark.set_up(2, 1, src) + spark.start() else qdel(src) return - /obj/structure/machinery/door/get_explosion_resistance() if(density) if(unacidable) - return 1000000 + return 1000000 //Used for negation of explosions, should probably be made into define in the future else return EXPLOSION_THRESHOLD_LOW //this should exactly match the amount of damage needed to destroy the door else return 0 - /obj/structure/machinery/door/update_icon() - if(density) - icon_state = "door1" - else - icon_state = "door0" - return - + icon_state = density ? "door1" : "door0" /obj/structure/machinery/door/proc/do_animate(animation) switch(animation) @@ -212,7 +214,6 @@ flick("door_deny", src) return - /obj/structure/machinery/door/proc/open(forced=0) if(!density) return TRUE @@ -223,8 +224,8 @@ do_animate("opening") icon_state = "door0" set_opacity(FALSE) - if(filler) - filler.set_opacity(opacity) + if(length(filler_turfs)) + change_filler_opacity(opacity) addtimer(CALLBACK(src, PROC_REF(finish_open)), openspeed) return TRUE @@ -235,11 +236,9 @@ if(operating) operating = FALSE - if(autoclose) addtimer(CALLBACK(src, PROC_REF(autoclose)), normalspeed ? 150 + openspeed : 5) - /obj/structure/machinery/door/proc/close() if(density) return TRUE @@ -256,22 +255,19 @@ update_icon() if(visible && !glass) set_opacity(TRUE) - if(filler) - filler.set_opacity(opacity) + if(length(filler_turfs)) + change_filler_opacity(opacity) operating = FALSE /obj/structure/machinery/door/proc/requiresID() return TRUE - -/obj/structure/machinery/door/proc/update_flags_heat_protection(turf/source) - - +/// Used for overriding in airlocks /obj/structure/machinery/door/proc/autoclose() - var/obj/structure/machinery/door/airlock/A = src - if(!A.density && !A.operating && !A.locked && !A.welded && A.autoclose) + if(!autoclose) + return + if(!density && !operating) close() - return /obj/structure/machinery/door/Move(new_loc, new_dir) . = ..() @@ -279,16 +275,15 @@ if(dir in list(EAST, WEST)) bound_width = width * world.icon_size bound_height = world.icon_size - filler.set_opacity(0) - filler = (get_step(src,EAST)) //Find new turf - filler.set_opacity(opacity) else bound_width = world.icon_size bound_height = width * world.icon_size - filler.set_opacity(0) - filler = (get_step(src,NORTH)) //Find new turf - filler.set_opacity(opacity) + change_filler_opacity(opacity) +/obj/structure/machinery/door/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) + . = ..() + // Yes, for a split second after departure you can see through rear dropship airlocks, but it's the simplest solution I could've think of + handle_multidoor() /obj/structure/machinery/door/morgue icon = 'icons/obj/structures/doors/doormorgue.dmi' diff --git a/code/game/machinery/doors/multi_tile.dm b/code/game/machinery/doors/multi_tile.dm index 65ecd67a438e..ca218128160d 100644 --- a/code/game/machinery/doors/multi_tile.dm +++ b/code/game/machinery/doors/multi_tile.dm @@ -13,7 +13,6 @@ /obj/structure/machinery/door/airlock/multi_tile/Initialize() . = ..() - handle_multidoor() update_icon() /obj/structure/machinery/door/airlock/multi_tile/glass @@ -137,7 +136,6 @@ /obj/structure/window/framed/almayer, /obj/structure/machinery/door/airlock, ) - var/multi_filler = list() /obj/structure/machinery/door/airlock/multi_tile/almayer/Initialize() . = ..() @@ -233,42 +231,6 @@ req_access = null req_one_access = list(ACCESS_CIVILIAN_BRIG, ACCESS_CIVILIAN_COMMAND, ACCESS_WY_COLONIAL) -/obj/structure/machinery/door/airlock/multi_tile/almayer/handle_multidoor() - . = ..() - if(!(width > 1)) return //Bubblewrap - - update_filler_turfs() - -//We have to find these again since these doors are used on shuttles a lot so the turfs changes -/obj/structure/machinery/door/airlock/multi_tile/almayer/proc/update_filler_turfs() - for(var/turf/T in multi_filler) - T.set_opacity(null) - - multi_filler = list() - for(var/turf/T in get_filler_turfs()) - T.set_opacity(opacity) - multi_filler += list(T) - -/obj/structure/machinery/door/airlock/multi_tile/proc/get_filler_turfs() - . = list() - for(var/i = 1, i < width, i++) - if(dir in list(NORTH, SOUTH)) - var/turf/T = locate(x, y + i, z) - if(T) - . += list(T) - else if(dir in list(EAST, WEST)) - var/turf/T = locate(x + i, y, z) - if(T) - . += list(T) - -/obj/structure/machinery/door/airlock/multi_tile/almayer/open() - . = ..() - update_filler_turfs() - -/obj/structure/machinery/door/airlock/multi_tile/almayer/close() - . = ..() - update_filler_turfs() - //------Dropship Cargo Doors -----// /obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear diff --git a/code/game/machinery/doors/runed_sandstone.dm b/code/game/machinery/doors/runed_sandstone.dm index 4bf66dfdc8d8..a6de7348dd7f 100644 --- a/code/game/machinery/doors/runed_sandstone.dm +++ b/code/game/machinery/doors/runed_sandstone.dm @@ -110,8 +110,8 @@ density = FALSE update_icon() set_opacity(0) - if(filler) - filler.set_opacity(opacity) + if(length(filler_turfs)) + change_filler_opacity(opacity) if(operating) operating = FALSE diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 2b57fbd0a44d..bd544c5c3f5a 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -11,7 +11,6 @@ flags_atom = ON_BORDER opacity = FALSE var/obj/item/circuitboard/airlock/electronics = null - air_properties_vary_with_direction = 1 /obj/structure/machinery/door/window/Initialize() . = ..() diff --git a/code/game/machinery/fire_alarm.dm b/code/game/machinery/fire_alarm.dm index fe1f80646c4f..dd7e0ee70150 100644 --- a/code/game/machinery/fire_alarm.dm +++ b/code/game/machinery/fire_alarm.dm @@ -63,8 +63,9 @@ FIRE ALARM return src.alarm() /obj/structure/machinery/firealarm/emp_act(severity) - if(prob(50/severity)) alarm() - ..() + . = ..() + if(prob(50/severity)) + alarm() /obj/structure/machinery/firealarm/attackby(obj/item/held_object as obj, mob/user as mob) src.add_fingerprint(user) diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 75d0de56dec0..cd59862a2e13 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -84,12 +84,11 @@ /obj/structure/machinery/flasher/emp_act(severity) + . = ..() if(inoperable()) - ..(severity) return if(prob(75/severity)) flash() - ..(severity) /obj/structure/machinery/flasher/portable/HasProximity(atom/movable/AM as mob|obj) if ((src.disable) || (src.last_flash && world.time < src.last_flash + 150)) diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 33f75c50e341..d5a0505fca17 100644 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -105,11 +105,10 @@ return 1 /obj/structure/machinery/sparker/emp_act(severity) + . = ..() if(inoperable()) - ..(severity) return ignite() - ..(severity) /obj/structure/machinery/ignition_switch/attack_remote(mob/user as mob) return attack_hand(user) diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 66eb0386713f..de61830c2501 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -62,8 +62,7 @@ updateicon() /obj/structure/machinery/light_switch/emp_act(severity) + . = ..() if(inoperable()) - ..(severity) return power_change() - ..(severity) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 4bb9c55d25d8..1cc66233f9fa 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -175,10 +175,10 @@ Class Procs: . += SPAN_WARNING("[msg]") /obj/structure/machinery/emp_act(severity) + . = ..() if(use_power && stat == 0) use_power(7500/severity) new /obj/effect/overlay/temp/emp_sparks (loc) - ..() /obj/structure/machinery/ex_act(severity) diff --git a/code/game/machinery/medical_pod/sleeper.dm b/code/game/machinery/medical_pod/sleeper.dm index e6216c9ef0f9..5f4aa1c3aac6 100644 --- a/code/game/machinery/medical_pod/sleeper.dm +++ b/code/game/machinery/medical_pod/sleeper.dm @@ -332,14 +332,13 @@ /obj/structure/machinery/medical_pod/sleeper/emp_act(severity) + . = ..() if(filtering) toggle_filter() if(inoperable()) - ..(severity) return if(occupant) go_out() - ..() /obj/structure/machinery/medical_pod/sleeper/proc/toggle_filter() if(!occupant) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index c75360e07568..72e311c6d8ff 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -218,20 +218,14 @@ update_icon() /obj/structure/machinery/recharger/emp_act(severity) + . = ..() if(inoperable() || !anchored) - ..(severity) return -/* - if(istype(charging, /obj/item/weapon/gun/energy)) - var/obj/item/weapon/gun/energy/E = charging - if(E.power_supply) - E.power_supply.emp_act(severity) -*/ + if(istype(charging, /obj/item/weapon/baton)) var/obj/item/weapon/baton/B = charging if(B.bcell) B.bcell.charge = 0 - ..(severity) /obj/structure/machinery/recharger/update_icon() //we have an update_icon() in addition to the stuff in process to make it feel a tiny bit snappier. src.overlays = 0 diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 644402128852..56b782cd77a4 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -109,13 +109,12 @@ return /obj/structure/machinery/recharge_station/emp_act(severity) + . = ..() if(inoperable()) - ..(severity) return if(occupant) occupant.emp_act(severity) go_out() - ..(severity) /obj/structure/machinery/recharge_station/update_icon() ..() diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index aa51201ae18b..dd45ad597800 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -40,12 +40,11 @@ /obj/structure/machinery/space_heater/emp_act(severity) + . = ..() if(inoperable()) - ..(severity) return if(cell) cell.emp_act(severity) - ..(severity) /obj/structure/machinery/space_heater/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/cell)) diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index c56f8da36150..79ead6321502 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -188,11 +188,10 @@ var/emotion = "Neutral" /obj/structure/machinery/ai_status_display/emp_act(severity) + . = ..() if(inoperable()) - ..(severity) return set_picture("ai_bsod") - ..(severity) /obj/structure/machinery/ai_status_display/proc/update() if(mode==0) //Blank diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index 255d70f45870..8b8b12dfd170 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -93,13 +93,13 @@ GLOBAL_LIST_EMPTY_TYPED(telecomms_list, /obj/structure/machinery/telecomms) update_state() /obj/structure/machinery/telecomms/emp_act(severity) + . = ..() if(prob(100/severity)) if(!(stat & EMPED)) stat |= EMPED var/duration = (300 * 10)/severity spawn(rand(duration - 20, duration + 20)) // Takes a long time for the machines to reboot. stat &= ~EMPED - ..() /* The receiver idles and receives messages from subspace-compatible radio equipment; diff --git a/code/game/machinery/vending/vending_types.dm b/code/game/machinery/vending/vending_types.dm index c109db25b3a9..a57bbfe7d29f 100644 --- a/code/game/machinery/vending/vending_types.dm +++ b/code/game/machinery/vending/vending_types.dm @@ -412,6 +412,12 @@ /obj/item/device/camera_film = 10, /obj/item/notepad = 5, /obj/item/device/toner = 5, + /obj/item/paper/colonial_grunts = 15, + /obj/item/toy/dice/d20 = 10, + /obj/item/tool/pen = 10, + /obj/item/tool/pen/blue = 10, + /obj/item/tool/pen/red = 10, + /obj/item/tool/pen/fountain = 3, ) contraband = list(/obj/item/toy/sword = 2) @@ -433,5 +439,11 @@ /obj/item/toy/deck/uno = 15, /obj/item/device/camera = 30, /obj/item/device/toner = 15, + /obj/item/paper/colonial_grunts = 5, + /obj/item/toy/dice/d20 = 1, + /obj/item/tool/pen = 2, + /obj/item/tool/pen/blue = 2, + /obj/item/tool/pen/red = 2, + /obj/item/tool/pen/fountain = 30, ) product_type = VENDOR_PRODUCT_TYPE_RECREATIONAL diff --git a/code/game/machinery/vending/vendor_types/requisitions.dm b/code/game/machinery/vending/vendor_types/requisitions.dm index 1dbd31c63de4..93680fb93d2c 100644 --- a/code/game/machinery/vending/vendor_types/requisitions.dm +++ b/code/game/machinery/vending/vendor_types/requisitions.dm @@ -413,6 +413,9 @@ list("MASKS", -1, null, null, null), list("Gas Mask", 20, /obj/item/clothing/mask/gas, VENDOR_ITEM_REGULAR), list("Heat Absorbent Coif", 10, /obj/item/clothing/mask/rebreather/scarf, VENDOR_ITEM_REGULAR), + + list("MISCELLANEOUS", -1, null, null), + list("Bedroll", 30, /obj/item/roller/bedroll, VENDOR_ITEM_REGULAR), ) /obj/structure/machinery/cm_vending/sorted/uniform_supply/ui_state(mob/user) diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm index 222cd4693cd2..94325b09e9eb 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm @@ -158,6 +158,7 @@ list("USCM Flair", round(scale * 15), /obj/item/prop/helmetgarb/flair_uscm, VENDOR_ITEM_REGULAR), list("Falling Falcons Shoulder Patch", round(scale * 15), /obj/item/clothing/accessory/patch/falcon, VENDOR_ITEM_REGULAR), list("USCM Shoulder Patch", round(scale * 15), /obj/item/clothing/accessory/patch, VENDOR_ITEM_REGULAR), + list("Bedroll", round(scale * 20), /obj/item/roller/bedroll, VENDOR_ITEM_REGULAR), ) //--------------SQUAD SPECIFIC VERSIONS-------------- diff --git a/code/game/objects/items/circuitboards/robot_modules.dm b/code/game/objects/items/circuitboards/robot_modules.dm index 2e5185353852..04fcff10fa2b 100644 --- a/code/game/objects/items/circuitboards/robot_modules.dm +++ b/code/game/objects/items/circuitboards/robot_modules.dm @@ -9,13 +9,12 @@ var/list/stacktypes /obj/item/circuitboard/robot_module/emp_act(severity) + . = ..() if(modules) for(var/obj/O in modules) O.emp_act(severity) if(emag) emag.emp_act(severity) - ..() - return /obj/item/circuitboard/robot_module/Initialize() diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 0a7709aa6101..33a93ed18db5 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -155,6 +155,7 @@ do_flash(user = user, aoe = TRUE) /obj/item/device/flash/emp_act(severity) + . = ..() if(broken) return switch(flashes_stored) if(0 to 5) @@ -168,7 +169,6 @@ if(M.flash_eyes()) M.apply_effect(10, WEAKEN) M.visible_message(SPAN_DISARM("[M] is blinded by \the [src]!")) - ..() /obj/item/device/flash/synthetic name = "synthetic flash" diff --git a/code/game/objects/items/devices/portable_vendor.dm b/code/game/objects/items/devices/portable_vendor.dm index 65e2128a02c0..29e1d06018ae 100644 --- a/code/game/objects/items/devices/portable_vendor.dm +++ b/code/game/objects/items/devices/portable_vendor.dm @@ -210,6 +210,7 @@ s.start() /obj/item/device/portable_vendor/emp_act(severity) + . = ..() if (broken) return if (prob(40*severity)) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 2092ffa108c6..c503edc8f94f 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -425,11 +425,11 @@ else return /obj/item/device/radio/emp_act(severity) + . = ..() broadcasting = FALSE listening = FALSE for (var/ch_name in channels) channels[ch_name] = 0 - ..() /////////////////////////////// //////////Borg Radios////////// diff --git a/code/game/objects/items/explosives/mine.dm b/code/game/objects/items/explosives/mine.dm index 742a5f314c4a..57dd23bf4e96 100644 --- a/code/game/objects/items/explosives/mine.dm +++ b/code/game/objects/items/explosives/mine.dm @@ -42,6 +42,7 @@ prime() //We don't care about how strong the explosion was. /obj/item/explosive/mine/emp_act() + . = ..() prime() //Same here. Don't care about the effect strength. diff --git a/code/game/objects/items/implants/implant.dm b/code/game/objects/items/implants/implant.dm index d39b7e675452..e7ebe0391fae 100644 --- a/code/game/objects/items/implants/implant.dm +++ b/code/game/objects/items/implants/implant.dm @@ -82,6 +82,7 @@ Implant Specifics:
"} return dat /obj/item/implant/tracking/emp_act(severity) + . = ..() if (malfunction) //no, dawg, you can't malfunction while you are malfunctioning return malfunction = MALFUNCTION_TEMPORARY @@ -216,6 +217,7 @@ Implant Specifics:
"} return 1 /obj/item/implant/explosive/emp_act(severity) + . = ..() if (malfunction) return malfunction = MALFUNCTION_TEMPORARY @@ -307,6 +309,7 @@ the implant may become unstable and either pre-maturely inject the subject or si return /obj/item/implant/chem/emp_act(severity) + . = ..() if (malfunction) return malfunction = MALFUNCTION_TEMPORARY @@ -432,6 +435,7 @@ the implant may become unstable and either pre-maturely inject the subject or si STOP_PROCESSING(SSobj, src) /obj/item/implant/death_alarm/emp_act(severity) //for some reason alarms stop going off in case they are emp'd, even without this + . = ..() if (malfunction) //so I'm just going to add a meltdown chance here return malfunction = MALFUNCTION_TEMPORARY diff --git a/code/game/objects/items/implants/implantneurostim.dm b/code/game/objects/items/implants/implantneurostim.dm index 5893ad5fd233..21ee2542649b 100644 --- a/code/game/objects/items/implants/implantneurostim.dm +++ b/code/game/objects/items/implants/implantneurostim.dm @@ -105,6 +105,7 @@ /obj/item/implant/neurostim/emp_act(severity) + . = ..() if (malfunction) return if (prob(80)) diff --git a/code/game/objects/items/props/helmetgarb.dm b/code/game/objects/items/props/helmetgarb.dm index 72c49a0ea15a..b20c5671503e 100644 --- a/code/game/objects/items/props/helmetgarb.dm +++ b/code/game/objects/items/props/helmetgarb.dm @@ -99,10 +99,8 @@ var/nvg_maxhealth = 125 var/nvg_health = 125 - var/nvg_maxcharge = 2500 - var/nvg_charge = 2500 - var/nvg_drain = 8 // has a 5 minute duration but byond may give it a couple of irl time due to lag - var/infinite_charge = FALSE + /// How much charge the cell should have at most. -1 is infinite + var/cell_max_charge = 2500 var/activated = FALSE var/nightvision = FALSE @@ -117,6 +115,13 @@ var/mob/living/attached_mob var/lighting_alpha = 100 +/obj/item/prop/helmetgarb/helmet_nvg/Initialize(mapload, ...) + . = ..() + if(shape != NVG_SHAPE_COSMETIC) + AddComponent(/datum/component/cell, cell_max_charge, TRUE, charge_drain = 8) + RegisterSignal(src, COMSIG_CELL_TRY_RECHARGING, PROC_REF(cell_try_recharge)) + RegisterSignal(src, COMSIG_CELL_OUT_OF_CHARGE, PROC_REF(on_power_out)) + /obj/item/prop/helmetgarb/helmet_nvg/on_enter_storage(obj/item/storage/internal/S) ..() @@ -139,42 +144,30 @@ /obj/item/prop/helmetgarb/helmet_nvg/attackby(obj/item/A as obj, mob/user as mob) - if(istype(A,/obj/item/cell)) - recharge(A, user) - if(HAS_TRAIT(A, TRAIT_TOOL_SCREWDRIVER)) repair(user) else ..() -/obj/item/prop/helmetgarb/helmet_nvg/proc/recharge(obj/item/cell/C, mob/user as mob) +/obj/item/prop/helmetgarb/helmet_nvg/proc/cell_try_recharge(datum/source, mob/living/user) + SIGNAL_HANDLER + if(user.action_busy) - return + return COMPONENT_CELL_NO_RECHARGE + if(src != user.get_inactive_hand()) - to_chat(user, SPAN_WARNING("You need to hold \the [src] in hand in order to recharge them.")) - return + to_chat(user, SPAN_WARNING("You need to hold [src] in hand in order to recharge them.")) + return COMPONENT_CELL_NO_RECHARGE + if(shape == NVG_SHAPE_COSMETIC) - to_chat(user, SPAN_WARNING("There is no connector for the power cell inside \the [src].")) - return + to_chat(user, SPAN_WARNING("There is no connector for the power cell inside [src].")) + return COMPONENT_CELL_NO_RECHARGE + if(shape == NVG_SHAPE_BROKEN) - to_chat(user, SPAN_WARNING("You need to repair \the [src] first.")) - return - if(nvg_charge == nvg_maxcharge) - to_chat(user, SPAN_WARNING("\The [src] are already fully charged.")) - return + to_chat(user, SPAN_WARNING("You need to repair [src] first.")) + return COMPONENT_CELL_NO_RECHARGE - while(nvg_charge < nvg_maxcharge) - if(C.charge <= 0) - to_chat(user, SPAN_WARNING("\The [C] is completely dry.")) - break - if(!do_after(user, 1 SECONDS, (INTERRUPT_ALL & (~INTERRUPT_MOVED)), BUSY_ICON_BUILD, C, INTERRUPT_DIFF_LOC)) - to_chat(user, SPAN_WARNING("You were interrupted.")) - break - var/to_transfer = min(400, C.charge, (nvg_maxcharge - nvg_charge)) - if(C.use(to_transfer)) - nvg_charge += to_transfer - to_chat(user, "You transfer some power between \the [C] and \the [src]. The gauge now reads: [round(100.0*nvg_charge/nvg_maxcharge) ]%.") /obj/item/prop/helmetgarb/helmet_nvg/proc/repair(mob/user as mob) if(user.action_busy) @@ -202,7 +195,6 @@ to_chat(user, "You successfully patch \the [src].") nvg_maxhealth = 65 nvg_health = 65 - nvg_drain = initial(nvg_drain) * 2 return else if(nvg_health == nvg_maxhealth) @@ -244,9 +236,6 @@ else if(nvg_health_procent >= 0) . += "They are falling apart." - if (get_dist(user, src) <= 1 && (shape == NVG_SHAPE_FINE || shape == NVG_SHAPE_PATCHED)) - . += "A small gauge in the corner reads: Power: [round(100.0*nvg_charge/nvg_maxcharge) ]%." - /obj/item/prop/helmetgarb/helmet_nvg/on_exit_storage(obj/item/storage/S) remove_attached_item() return ..() @@ -296,7 +285,7 @@ if(attached_mob != user && slot == WEAR_HEAD) set_attached_mob(user) - if(slot == WEAR_HEAD && !nightvision && activated && nvg_charge > 0 && shape > NVG_SHAPE_BROKEN) + if(slot == WEAR_HEAD && !nightvision && activated && !SEND_SIGNAL(src, COMSIG_CELL_CHECK_CHARGE) && shape > NVG_SHAPE_BROKEN) enable_nvg(user) else remove_nvg() @@ -319,7 +308,7 @@ attached_item.update_icon() activation.update_button_icon() - START_PROCESSING(SSobj, src) + SEND_SIGNAL(src, COMSIG_CELL_START_TICK_DRAIN) /obj/item/prop/helmetgarb/helmet_nvg/proc/update_sight(mob/M) @@ -353,20 +342,15 @@ attached_mob.update_sight() - STOP_PROCESSING(SSobj, src) + SEND_SIGNAL(src, COMSIG_CELL_STOP_TICK_DRAIN) /obj/item/prop/helmetgarb/helmet_nvg/process(delta_time) - if(nvg_charge > 0 && !infinite_charge) - nvg_charge = max(0, nvg_charge - nvg_drain * delta_time) - if(!attached_mob) return PROCESS_KILL - if(!activated || !attached_item || nvg_charge <= 0 || attached_mob.is_dead()) - if(activated && !attached_mob.is_dead()) - to_chat(attached_mob, SPAN_WARNING("\The [src] emit a low power warning and immediately shut down!")) - remove_nvg() + if(!activated || !attached_item || attached_mob.is_dead()) + on_power_out() return if(!attached_item.has_garb_overlay()) @@ -375,6 +359,13 @@ return +/obj/item/prop/helmetgarb/helmet_nvg/proc/on_power_out(datum/source) + SIGNAL_HANDLER + + if(activated && !attached_mob.is_dead()) + to_chat(attached_mob, SPAN_WARNING("[src] emit a low power warning and immediately shut down!")) + remove_nvg() + /obj/item/prop/helmetgarb/helmet_nvg/ui_action_click(mob/owner, obj/item/holder) toggle_nods(owner) @@ -410,7 +401,7 @@ if(activated) to_chat(user, SPAN_NOTICE("You flip the goggles down.")) icon_state = active_icon_state - if(nvg_charge > 0 && user.head == attached_item && shape > NVG_SHAPE_BROKEN) + if(!SEND_SIGNAL(src, COMSIG_CELL_CHECK_CHARGE) && user.head == attached_item && shape > NVG_SHAPE_BROKEN) enable_nvg(user) else icon_state = active_icon_state @@ -462,7 +453,7 @@ /obj/item/prop/helmetgarb/helmet_nvg/marsoc //for Marine Raiders name = "\improper Tactical M3 night vision goggles" desc = "With an integrated self-recharging battery, nothing can stop you. Put them on your helmet and press the button and it's go-time." - infinite_charge = TRUE + cell_max_charge = -1 #undef NVG_SHAPE_COSMETIC #undef NVG_SHAPE_BROKEN @@ -527,29 +518,38 @@ icon = 'icons/obj/items/items.dmi' icon_state = "photo" ///The human who spawns with the photo - var/mob/living/carbon/human/owner + var/datum/weakref/owner + ///The belonging human name + var/owner_name + ///The belonging human faction + var/owner_faction ///Text written on the back var/scribble -/obj/item/prop/helmetgarb/family_photo/Initialize(mapload, ...) +/obj/item/prop/helmetgarb/family_photo/pickup(mob/user, silent) . = ..() - if(!mapload) - RegisterSignal(src, COMSIG_POST_SPAWN_UPDATE, PROC_REF(set_owner)) + if(!owner) + RegisterSignal(user, COMSIG_POST_SPAWN_UPDATE, PROC_REF(set_owner)) + ///Sets the owner of the family photo to the human it spawns with, needs var/source for signals -/obj/item/prop/helmetgarb/family_photo/proc/set_owner(source = src, mob/living/carbon/human/user) - UnregisterSignal(src, COMSIG_POST_SPAWN_UPDATE) - owner = user +/obj/item/prop/helmetgarb/family_photo/proc/set_owner(datum/source) + SIGNAL_HANDLER + UnregisterSignal(source, COMSIG_POST_SPAWN_UPDATE) + var/mob/living/carbon/human/user = source + owner = WEAKREF(user) + owner_name = user.name + owner_faction = user.faction /obj/item/prop/helmetgarb/family_photo/get_examine_text(mob/user) . = ..() if(scribble) . += "\"[scribble]\" is written on the back of the photo." - if(user == owner) + if(user.weak_reference == owner) . += "A photo of you and your family." return - if(user.faction == owner?.faction) - . += "A photo of [owner] and their family." + if(user.faction == owner_faction) + . += "A photo of [owner_name] and their family." return . += "A photo of a family you do not know." diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 2fcff493482f..d42359c53f50 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -72,9 +72,9 @@ return FALSE // Create their vis object if needed - if(!xeno.backpack_icon_carrier) - xeno.backpack_icon_carrier = new(null, xeno) - xeno.vis_contents += xeno.backpack_icon_carrier + if(!xeno.backpack_icon_holder) + xeno.backpack_icon_holder = new(null, xeno) + xeno.vis_contents += xeno.backpack_icon_holder target_mob.put_in_back(src) return FALSE diff --git a/code/game/objects/items/storage/storage.dm b/code/game/objects/items/storage/storage.dm index cfdb2f88b090..6e7e891d6ba8 100644 --- a/code/game/objects/items/storage/storage.dm +++ b/code/game/objects/items/storage/storage.dm @@ -852,6 +852,7 @@ W is always an item. stop_warning prevents messaging. user may be null.**/ return ..() /obj/item/storage/emp_act(severity) + . = ..() if(!istype(src.loc, /mob/living)) for(var/obj/O in contents) O.emp_act(severity) diff --git a/code/game/objects/items/tools/misc_tools.dm b/code/game/objects/items/tools/misc_tools.dm index 98dc89321d34..0b4a7cc98775 100644 --- a/code/game/objects/items/tools/misc_tools.dm +++ b/code/game/objects/items/tools/misc_tools.dm @@ -284,21 +284,24 @@ matter = list("metal" = 20, "gold" = 10) var/static/list/colour_list = list("red", "blue", "green", "yellow", "purple", "pink", "brown", "black", "orange") // Can add more colors as required var/current_colour_index = 1 - var/owner = "hard to read text" + var/owner_name -/obj/item/tool/pen/fountain/Initialize(mapload, ...) +/obj/item/tool/pen/fountain/pickup(mob/user, silent) . = ..() - if(!mapload) - RegisterSignal(src, COMSIG_POST_SPAWN_UPDATE, PROC_REF(set_owner)) + if(!owner_name) + RegisterSignal(user, COMSIG_POST_SPAWN_UPDATE, PROC_REF(set_owner)) ///Sets the owner of the pen to who it spawns with, requires var/source for signals -/obj/item/tool/pen/fountain/proc/set_owner(source = src, mob/living/carbon/human/user) - UnregisterSignal(src, COMSIG_POST_SPAWN_UPDATE) - owner = user +/obj/item/tool/pen/fountain/proc/set_owner(datum/source) + SIGNAL_HANDLER + UnregisterSignal(source, COMSIG_POST_SPAWN_UPDATE) + var/mob/living/carbon/human/user = source + owner_name = user.name /obj/item/tool/pen/fountain/get_examine_text(mob/user) . = ..() - . += "There's a laser engraving of [owner] on it." + if(owner_name) + . += "There's a laser engraving of [owner_name] on it." /obj/item/tool/pen/fountain/attack_self(mob/living/carbon/human/user) if(on) diff --git a/code/game/objects/items/toys/cards.dm b/code/game/objects/items/toys/cards.dm index b6e3bb558ec4..2debd83f9bab 100644 --- a/code/game/objects/items/toys/cards.dm +++ b/code/game/objects/items/toys/cards.dm @@ -21,7 +21,6 @@ icon = 'icons/obj/items/playing_cards.dmi' icon_state = "deck" w_class = SIZE_TINY - flags_item = NOTABLEMERGE var/base_icon = "deck" var/max_cards = 52 @@ -262,7 +261,6 @@ icon = 'icons/obj/items/playing_cards.dmi' icon_state = "empty" w_class = SIZE_TINY - flags_item = NOTABLEMERGE var/concealed = FALSE var/pile_state = FALSE diff --git a/code/game/objects/items/toys/toys.dm b/code/game/objects/items/toys/toys.dm index 7a17904635f0..851f203c52c1 100644 --- a/code/game/objects/items/toys/toys.dm +++ b/code/game/objects/items/toys/toys.dm @@ -553,15 +553,15 @@ ///Hexadecimal 0-F (0-15) var/static/list/hexadecimal = list("0", "1", "2", "3" , "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F") -/obj/item/toy/plush/therapy/random_color/New(loc, ...) +/obj/item/toy/plush/therapy/random_color/Initialize(mapload, ...) . = ..() var/color_code = "#[pick(hexadecimal)][pick(hexadecimal)][pick(hexadecimal)][pick(hexadecimal)][pick(hexadecimal)][pick(hexadecimal)]" //This is dumb and I hope theres a better way I'm missing color = color_code - desc = "A custom therapy plush, in a unique color. This one is labeled with \"#[color_code]\"." + desc = "A custom therapy plush, in a unique color." /obj/item/toy/plush/random_plushie //Not using an effect so it can fit into storage from loadout name = "random plush" - desc = "You should not be seeing this" + desc = "This plush looks awfully standard and bland. Is it actually yours?" /// Standard plushies for the spawner to pick from var/list/plush_list = list( /obj/item/toy/plush/farwa, @@ -587,22 +587,32 @@ . = ..() if(mapload) //Placed in mapping, will be randomized instantly on spawn create_plushie() - return - RegisterSignal(src, COMSIG_POST_SPAWN_UPDATE, PROC_REF(create_plushie)) + return INITIALIZE_HINT_QDEL + +/obj/item/toy/plush/random_plushie/pickup(mob/user, silent) + . = ..() + RegisterSignal(user, COMSIG_POST_SPAWN_UPDATE, PROC_REF(create_plushie)) ///The randomizer picking and spawning a plushie on either the ground or in the humans backpack. Needs var/source due to signals -/obj/item/toy/plush/random_plushie/proc/create_plushie(source = src, mob/living/user) - UnregisterSignal(src, COMSIG_POST_SPAWN_UPDATE) +/obj/item/toy/plush/random_plushie/proc/create_plushie(datum/source) + SIGNAL_HANDLER + if(source) + UnregisterSignal(source, COMSIG_POST_SPAWN_UPDATE) + var/turf/spawn_location = get_turf(src) var/plush_list_variety = pick(60; plush_list, 40; therapy_plush_list) var/random_plushie = pick(plush_list_variety) - var/obj/item/toy/plush/plush = new random_plushie(get_turf(src)) //Starts on floor by default + var/obj/item/toy/plush/plush = new random_plushie(spawn_location) //Starts on floor by default + var/mob/living/carbon/human/user = source if(!user) //If it didn't spawn on a humanoid qdel(src) return + var/obj/item/storage/backpack/storage = locate() in user //If the user has a backpack, put it there if(storage?.can_be_inserted(plush, user, stop_messages = TRUE)) storage.attempt_item_insertion(plush, TRUE, user) + if(plush.loc == spawn_location) // Still on the ground + user.put_in_hands(plush, drop_on_fail = TRUE) qdel(src) //Admin plushies diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 6cb9f58aae37..82fdf30f0fc4 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -197,9 +197,9 @@ return TRUE /obj/item/weapon/baton/emp_act(severity) + . = ..() if(bcell) bcell.emp_act(severity) //let's not duplicate code everywhere if we don't have to please. - ..() //secborg stun baton module /obj/item/weapon/baton/robot/attack_self(mob/user) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index ed0b1ae05c08..ba974a8e722a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -30,6 +30,7 @@ return 0 /obj/structure/closet/secure_closet/emp_act(severity) + . = ..() for(var/obj/O in src) O.emp_act(severity) if(!broken) @@ -42,7 +43,6 @@ else src.req_access = list() src.req_access += pick(get_access(ACCESS_LIST_MARINE_MAIN)) - ..() /obj/structure/closet/secure_closet/proc/togglelock(mob/living/user) if(src.opened) diff --git a/code/game/objects/structures/crates_lockers/secure_crates.dm b/code/game/objects/structures/crates_lockers/secure_crates.dm index f06a15da7115..6b025a57c78b 100644 --- a/code/game/objects/structures/crates_lockers/secure_crates.dm +++ b/code/game/objects/structures/crates_lockers/secure_crates.dm @@ -87,6 +87,7 @@ ..() /obj/structure/closet/crate/secure/emp_act(severity) + . = ..() for(var/obj/O in src) O.emp_act(severity) if(!broken && !opened && prob(50/severity)) @@ -106,7 +107,6 @@ else src.req_access = list() src.req_access += pick(get_access(ACCESS_LIST_MARINE_MAIN)) - ..() //------------------------------------ diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index 24598e7460bb..a33d2889a4d5 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -404,7 +404,17 @@ var/global/list/activated_medevac_stretchers = list() //bedroll /obj/structure/bed/bedroll - name = "bedroll" - desc = "bedroll" + name = "unfolded bedroll" + desc = "Perfect for those long missions, when there's nowhere else to sleep, you remembered to bring at least one thing of comfort." + icon = 'icons/monkey_icos.dmi' icon_state = "bedroll_o" + buckling_y = 0 + foldabletype = /obj/item/roller/bedroll + accepts_bodybag = FALSE + +/obj/item/roller/bedroll + name = "folded bedroll" + desc = "A standard issue USCMC bedroll, They've been in service for as long as you can remember. The tag on it states to unfold it before rest, but who needs rules anyway, right?" icon = 'icons/monkey_icos.dmi' + icon_state = "bedroll" + rollertype = /obj/structure/bed/bedroll diff --git a/code/game/objects/structures/surface.dm b/code/game/objects/structures/surface.dm index efc69002424f..13a81af2dc3d 100644 --- a/code/game/objects/structures/surface.dm +++ b/code/game/objects/structures/surface.dm @@ -1,159 +1,20 @@ //Surface structures are structures that can have items placed on them /obj/structure/surface health = 100 - var/list/update_types = list( - /obj/item/reagent_container/glass, - /obj/item/storage, - /obj/item/reagent_container/food/snacks - ) - //add items there that behave like structures for whatever dumb reason - var/list/blacklisted_item_types = list( - /obj/item/device/radio/intercom, - /obj/item/device/sentry_computer - ) -/obj/structure/surface/Initialize() - . = ..() - return INITIALIZE_HINT_LATELOAD - -/obj/structure/surface/LateInitialize() - attach_all() - update_icon() - -/obj/structure/surface/Destroy() - detach_all() - . = ..() - -/obj/structure/surface/ex_act(severity, direction, datum/cause_data/cause_data) - health -= severity - if(health <= 0) - var/location = get_turf(src) - handle_debris(severity, direction) - detach_all() - for(var/obj/item/O in loc) - O.explosion_throw(severity, direction) - qdel(src) - if(prob(66)) - create_shrapnel(location, rand(1,4), direction, , /datum/ammo/bullet/shrapnel/light, cause_data) - return TRUE - -/obj/structure/surface/proc/attach_all() - for(var/obj/item/O in loc) - if(in_blacklist(O)) - continue - attach_item(O, FALSE) - draw_item_overlays() - -/obj/structure/surface/proc/in_blacklist(obj/item/O) - for(var/allowed_type in blacklisted_item_types) - if(istype(O, allowed_type)) - return TRUE - return FALSE - -/obj/structure/surface/proc/attach_item(obj/item/O, update = TRUE) - if(!O) +/obj/structure/surface/attackby(obj/item/attacking_item, mob/user, click_data) + if(!user.drop_inv_item_to_loc(attacking_item, loc)) return - if(O.luminosity) //it can't make light as an overlay - return - O.forceMove(src) - RegisterSignal(O, COMSIG_ATOM_DECORATED, PROC_REF(decorate_update)) - if(update) - draw_item_overlays() - -/obj/structure/surface/proc/detach_item(obj/item/O) - O.scatter_item() - UnregisterSignal(O, COMSIG_ATOM_DECORATED) - draw_item_overlays() - return - -/obj/structure/surface/proc/decorate_update(obj/item/O) - SIGNAL_HANDLER - draw_item_overlays() -/obj/structure/surface/proc/detach_all() - overlays.Cut() - for(var/obj/item/O in contents) - UnregisterSignal(O, COMSIG_ATOM_DECORATED) - O.forceMove(loc) + auto_align(attacking_item, click_data) + user.next_move = world.time + 2 + return TRUE -/obj/structure/surface/proc/get_item(list/click_data) - var/i = LAZYLEN(contents) - if(!click_data) - return - if(i < 1) - return FALSE - for(i, i >= 1, i--)//starting from the end because that's where the topmost is - var/obj/item/O = contents[i] - var/bounds_x = text2num(click_data["icon-x"])-1 - O.pixel_x - var/bounds_y = text2num(click_data["icon-y"])-1 - O.pixel_y - if(bounds_x < 0 || bounds_y < 0) - continue - var/icon/I = icon(O.icon, O.icon_state) - var/p = I.GetPixel(bounds_x, bounds_y) - if(p) - return O - return FALSE - -/obj/structure/surface/proc/draw_item_overlays() - overlays.Cut() - for(var/obj/item/O in contents) - var/image/I = image(O.icon) - I.appearance = O.appearance - I.appearance_flags |= RESET_COLOR - I.overlays = O.overlays - LAZYADD(overlays, I) - -/obj/structure/surface/clicked(mob/user, list/mods) - if(mods["shift"] && !mods["middle"]) - var/obj/item/O = get_item(mods) - if(!O) - return ..() - if(O.can_examine(user)) - O.examine(user) - return TRUE - ..() - -/obj/structure/surface/proc/try_to_open_container(mob/user, mods) - if(!Adjacent(user)) - return - - if(ishuman(user) || isrobot(user)) - var/obj/item/O = get_item(mods) - if(O && isstorage(O)) - var/obj/item/storage/S = O - S.open(usr) - return TRUE - -/obj/structure/surface/attack_hand(mob/user, click_data) - . = ..() - if(click_data && click_data["alt"]) - return - var/obj/item/O = get_item(click_data) - if(!O) - return - O.attack_hand(user) - if(!LAZYISIN(contents, O))//in case attack_hand did not pick up the item - detach_item(O) - -/obj/structure/surface/attackby(obj/item/W, mob/user, click_data) - var/obj/item/O = get_item(click_data) - if(!O || click_data["ctrl"])//holding the ctrl key will force it to place the object - // Placing stuff on tables - if(user.drop_inv_item_to_loc(W, loc)) - auto_align(W, click_data) - user.next_move = world.time + 2 - return TRUE - else if(!O.attackby(W, user)) - W.afterattack(O, user, TRUE) - for(var/type in update_types) - if(istype(O, type)) - draw_item_overlays() - -/obj/structure/surface/proc/auto_align(obj/item/W, click_data) - if(!W.center_of_mass) // Clothing, material stacks, generally items with large sprites where exact placement would be unhandy. - W.pixel_x = rand(-W.randpixel, W.randpixel) - W.pixel_y = rand(-W.randpixel, W.randpixel) - W.pixel_z = 0 +/obj/structure/surface/proc/auto_align(obj/item/new_item, click_data) + if(!new_item.center_of_mass) // Clothing, material stacks, generally items with large sprites where exact placement would be unhandy. + new_item.pixel_x = rand(-new_item.randpixel, new_item.randpixel) + new_item.pixel_y = rand(-new_item.randpixel, new_item.randpixel) + new_item.pixel_z = 0 return if(!click_data) @@ -169,16 +30,8 @@ var/cell_x = Clamp(round(mouse_x/CELLSIZE), 0, CELLS-1) // Ranging from 0 to CELLS-1 var/cell_y = Clamp(round(mouse_y/CELLSIZE), 0, CELLS-1) - var/list/center = cached_key_number_decode(W.center_of_mass) - - W.pixel_x = (CELLSIZE * (cell_x + 0.5)) - center["x"] - W.pixel_y = (CELLSIZE * (cell_y + 0.5)) - center["y"] - W.pixel_z = 0 - - if(!(W.flags_item & NOTABLEMERGE)) - attach_item(W) + var/list/center = cached_key_number_decode(new_item.center_of_mass) -/obj/structure/surface/MouseDrop(atom/over) - . = ..() - if(over == usr && usr && usr.client && usr.client.lmb_last_mousedown_mods) - return try_to_open_container(usr, usr.client.lmb_last_mousedown_mods) + new_item.pixel_x = (CELLSIZE * (cell_x + 0.5)) - center["x"] + new_item.pixel_y = (CELLSIZE * (cell_y + 0.5)) - center["y"] + new_item.pixel_z = 0 diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index db3ce98339a3..8d6441293f86 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -434,8 +434,6 @@ verbs -= /obj/structure/surface/table/verb/do_flip verbs += /obj/structure/surface/table/proc/do_put - detach_all() - var/list/targets = list(get_step(src, dir), get_step(src, turn(dir, 45)), get_step(src, turn(dir, -45))) for(var/atom/movable/movable_on_table in get_turf(src)) if(!movable_on_table.anchored) @@ -479,7 +477,6 @@ var/obj/structure/surface/table/T = locate() in get_step(src.loc,D) if(T && T.flipped && T.dir == src.dir) T.unflip() - attach_all() update_icon() update_adjacent() diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index d1e7f83dacb1..fbb9e5d06ac1 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -147,6 +147,7 @@ "cmblogo.png" = 'html/images/cmblogo.png', "faxwylogo.png" = 'html/images/faxwylogo.png', "faxbackground.jpg" = 'html/images/faxbackground.jpg', + "colonialspacegruntsEZ.png" = 'html/images/colonialspacegruntsEZ.png', ) /datum/asset/spritesheet/chat diff --git a/code/modules/character_traits/biology_traits.dm b/code/modules/character_traits/biology_traits.dm index a269aabede9f..c90ea7b8751e 100644 --- a/code/modules/character_traits/biology_traits.dm +++ b/code/modules/character_traits/biology_traits.dm @@ -58,13 +58,13 @@ to_chat(target, SPAN_WARNING("Your species is too sophisticated for you be able to recieve the lisping trait.")) return - ADD_TRAIT(target, TRAIT_LISPING, TRAIT_SOURCE_QUIRK) + ADD_TRAIT(target, TRAIT_LISPING, ROUNDSTART_TRAIT) target.speech_problem_flag = TRUE ..() /datum/character_trait/biology/lisp/unapply_trait(mob/living/carbon/human/target) - REMOVE_TRAIT(target, TRAIT_LISPING, TRAIT_SOURCE_QUIRK) + REMOVE_TRAIT(target, TRAIT_LISPING, ROUNDSTART_TRAIT) target.speech_problem_flag = FALSE ..() @@ -127,9 +127,9 @@ to_chat(target, SPAN_WARNING("Only riflemen can have the Hardcore trait.")) return - ADD_TRAIT(target, TRAIT_HARDCORE, TRAIT_SOURCE_QUIRK) + ADD_TRAIT(target, TRAIT_HARDCORE, ROUNDSTART_TRAIT) ..() /datum/character_trait/biology/hardcore/unapply_trait(mob/living/carbon/human/target) - REMOVE_TRAIT(target, TRAIT_HARDCORE, TRAIT_SOURCE_QUIRK) + REMOVE_TRAIT(target, TRAIT_HARDCORE, ROUNDSTART_TRAIT) ..() diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index bffbda9f538a..bd87746545d8 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -217,6 +217,7 @@ M.update_inv_gloves() /obj/item/clothing/gloves/emp_act(severity) + . = ..() if(cell) //why is this not part of the powercell code? cell.charge -= 1000 / severity @@ -224,7 +225,6 @@ cell.charge = 0 if(cell.reliability != 100 && prob(50/severity)) cell.reliability -= 10 / severity - ..() // Called just before an attack_hand(), in mob/UnarmedAttack() /obj/item/clothing/gloves/proc/Touch(atom/A, proximity) diff --git a/code/modules/clothing/clothing_accessories.dm b/code/modules/clothing/clothing_accessories.dm index ba855e42d3ba..e4a19b7bed3e 100644 --- a/code/modules/clothing/clothing_accessories.dm +++ b/code/modules/clothing/clothing_accessories.dm @@ -148,7 +148,7 @@ verbs -= /obj/item/clothing/proc/removetie_verb /obj/item/clothing/emp_act(severity) + . = ..() if(LAZYLEN(accessories)) for(var/obj/item/clothing/accessory/A in accessories) A.emp_act(severity) - ..() diff --git a/code/modules/clothing/glasses/thermal.dm b/code/modules/clothing/glasses/thermal.dm index b2ec7597e270..f4a728c8864d 100644 --- a/code/modules/clothing/glasses/thermal.dm +++ b/code/modules/clothing/glasses/thermal.dm @@ -18,6 +18,7 @@ var/blinds_on_emp = TRUE /obj/item/clothing/glasses/thermal/emp_act(severity) + . = ..() if(blinds_on_emp) if(istype(src.loc, /mob/living/carbon/human)) var/mob/living/carbon/human/M = src.loc @@ -29,7 +30,6 @@ M.disabilities |= NEARSIGHTED spawn(100) M.disabilities &= ~NEARSIGHTED - ..() /obj/item/clothing/glasses/thermal/syndi //These are now a traitor item, concealed as mesons. -Pete diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 2c023fed2ed7..82d461c5ca55 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -335,10 +335,10 @@ add_fingerprint(user) /obj/item/clothing/suit/armor/reactive/emp_act(severity) + . = ..() active = 0 src.icon_state = "reactiveoff" src.item_state = "reactiveoff" - ..() diff --git a/code/modules/clothing/suits/marine_armor.dm b/code/modules/clothing/suits/marine_armor.dm index 00e387de0365..eae4cd6fd8c6 100644 --- a/code/modules/clothing/suits/marine_armor.dm +++ b/code/modules/clothing/suits/marine_armor.dm @@ -1104,8 +1104,8 @@ item_state_slots = list(WEAR_JACKET = "pmc_sniper") /obj/item/clothing/suit/storage/marine/veteran/pmc/light/synth - name = "\improper M4 synthetic PMC armor" - desc = "A modification of the standard Armat Systems M3 armor. This variant was designed for PMC Support Units in the field, offering protection and storage while not restricting movement." + name = "\improper M4 Synthetic PMC armor" + desc = "A serious modification of the standard Armat Systems M3 armor. This variant was designed for PMC Support Units in the field, with every armor insert removed. It's designed with the idea of a high speed lifesaver in mind." time_to_unequip = 0.5 SECONDS time_to_equip = 1 SECONDS armor_melee = CLOTHING_ARMOR_NONE @@ -1117,6 +1117,7 @@ armor_rad = CLOTHING_ARMOR_NONE armor_internaldamage = CLOTHING_ARMOR_NONE storage_slots = 3 + slowdown = SLOWDOWN_ARMOR_SUPER_LIGHT /obj/item/clothing/suit/storage/marine/veteran/pmc/light/synth/Initialize() flags_atom |= NO_NAME_OVERRIDE diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm index a18faa60c0d3..0d5fc31a2560 100644 --- a/code/modules/clothing/suits/storage.dm +++ b/code/modules/clothing/suits/storage.dm @@ -33,8 +33,8 @@ return pockets.attackby(W, user) /obj/item/clothing/suit/storage/emp_act(severity) + . = ..() pockets.emp_act(severity) - ..() /obj/item/clothing/suit/storage/hear_talk(mob/living/M, msg, verb, datum/language/speaking, italics) pockets.hear_talk(M, msg, verb, speaking, italics) diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm index ee19f9ef7d5f..a0c8219ffe69 100644 --- a/code/modules/clothing/under/ties.dm +++ b/code/modules/clothing/under/ties.dm @@ -440,8 +440,8 @@ return hold.attackby(W, user) /obj/item/clothing/accessory/storage/emp_act(severity) + . = ..() hold.emp_act(severity) - ..() /obj/item/clothing/accessory/storage/hear_talk(mob/M, msg) hold.hear_talk(M, msg) diff --git a/code/modules/cm_marines/NonLethalRestraints.dm b/code/modules/cm_marines/NonLethalRestraints.dm index 78884aa59843..a7f0277c8aaa 100644 --- a/code/modules/cm_marines/NonLethalRestraints.dm +++ b/code/modules/cm_marines/NonLethalRestraints.dm @@ -60,6 +60,7 @@ /obj/item/weapon/stunprod/emp_act(severity) + . = ..() switch(severity) if(1) charges = 0 diff --git a/code/modules/cm_preds/falcon.dm b/code/modules/cm_preds/falcon.dm index 4461f9b4f7e7..63c7e72ab670 100644 --- a/code/modules/cm_preds/falcon.dm +++ b/code/modules/cm_preds/falcon.dm @@ -119,6 +119,7 @@ qdel(src) /mob/hologram/falcon/emp_act() + . = ..() new /obj/item/trash/falcon_drone/emp(loc) QDEL_NULL(parent_drone) qdel(src) diff --git a/code/modules/cm_preds/yaut_bracers.dm b/code/modules/cm_preds/yaut_bracers.dm index 32b1aef81e07..9cb8b4bea4e4 100644 --- a/code/modules/cm_preds/yaut_bracers.dm +++ b/code/modules/cm_preds/yaut_bracers.dm @@ -292,6 +292,7 @@ right_wristblades = new(src) /obj/item/clothing/gloves/yautja/hunter/emp_act(severity) + . = ..() charge = max(charge - (severity * 500), 0) if(ishuman(loc)) var/mob/living/carbon/human/wearer = loc diff --git a/code/modules/defenses/defenses.dm b/code/modules/defenses/defenses.dm index d08e4decefe9..633b51801e27 100644 --- a/code/modules/defenses/defenses.dm +++ b/code/modules/defenses/defenses.dm @@ -431,6 +431,7 @@ turned_on = FALSE /obj/structure/machinery/defenses/emp_act(severity) + . = ..() if(turned_on) if(prob(50)) visible_message("[icon2html(src, viewers(src))] [src] beeps and buzzes wildly, flashing odd symbols on its screen before shutting down!") diff --git a/code/modules/defenses/sentry_computer.dm b/code/modules/defenses/sentry_computer.dm index dd5726d6ccbf..e2cbd5d5858e 100644 --- a/code/modules/defenses/sentry_computer.dm +++ b/code/modules/defenses/sentry_computer.dm @@ -121,6 +121,7 @@ playsound(src, 'sound/machines/terminal_off.ogg', 25, FALSE) /obj/item/device/sentry_computer/emp_act(severity) + . = ..() return TRUE /** diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm index 3861a0126be4..bcb709e2f402 100644 --- a/code/modules/mob/living/brain/MMI.dm +++ b/code/modules/mob/living/brain/MMI.dm @@ -134,6 +134,7 @@ to_chat(brainmob, SPAN_NOTICE(" Radio is [radio.listening==1 ? "now" : "no longer"] receiving broadcast. ")) /obj/item/device/mmi/emp_act(severity) + . = ..() if(!brainmob) return else @@ -144,4 +145,3 @@ brainmob.emp_damage += rand(10,20) if(3) brainmob.emp_damage += rand(0,10) - ..() diff --git a/code/modules/mob/living/brain/life.dm b/code/modules/mob/living/brain/life.dm index 2c9c99736867..7f84b6466144 100644 --- a/code/modules/mob/living/brain/life.dm +++ b/code/modules/mob/living/brain/life.dm @@ -182,17 +182,3 @@ reset_view(null) return 1 - - -/*/mob/living/brain/emp_act(severity) - if(!(container && istype(container, /obj/item/device/mmi))) - return - else - switch(severity) - if(1) - emp_damage += rand(20,30) - if(2) - emp_damage += rand(10,20) - if(3) - emp_damage += rand(0,10) - ..()*/ diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 6e99ca1e5a15..26c8fd867f72 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -5,6 +5,10 @@ if(user.sdisabilities & DISABILITY_BLIND || user.blinded || user.stat==UNCONSCIOUS) return list(SPAN_NOTICE("Something is there but you can't see it.")) + var/mob/dead/observer/observer + if(isobserver(user)) + observer = user + if(isxeno(user)) var/msg = "This is " @@ -435,7 +439,7 @@ for(var/implant in get_visible_implants()) msg += SPAN_WARNING("[t_He] has \a [implant] sticking out of [t_his] flesh!\n") - if(hasHUD(user,"security")) + if(hasHUD(user,"security") || (observer && observer.HUD_toggled["Security HUD"])) var/perpref @@ -450,8 +454,15 @@ if(R.fields["id"] == E.fields["id"]) criminal = R.fields["criminal"] - msg += "Criminal status: \[[criminal]\]\n" - msg += "Security records: \[View\] \[Add comment\]\n" + msg += "Criminal status:" + if(!observer) + msg += "\[[criminal]\]\n" + else + msg += "\[[criminal]\]\n" + + msg += "Security records: \[View\]" + if(!observer) + msg += " \[Add comment\]\n" if(hasHUD(user,"medical")) var/cardcolor = holo_card_color diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 2ffcf1c59839..c4b9665a218c 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -612,7 +612,7 @@ to_chat(usr, SPAN_DANGER("Unable to locate a data core entry for this person.")) if(href_list["secrecord"]) - if(hasHUD(usr,"security")) + if(hasHUD(usr,"security") || isobserver(usr)) var/perpref = null var/read = 0 @@ -624,7 +624,7 @@ if(E.fields["ref"] == perpref) for(var/datum/data/record/R in GLOB.data_core.security) if(R.fields["id"] == E.fields["id"]) - if(hasHUD(usr,"security")) + if(hasHUD(usr,"security") || isobserver(usr)) to_chat(usr, "Name: [R.fields["name"]] Criminal Status: [R.fields["criminal"]]") to_chat(usr, "Incidents: [R.fields["incident"]]") to_chat(usr, "\[View Comment Log\]") @@ -633,7 +633,7 @@ if(!read) to_chat(usr, SPAN_DANGER("Unable to locate a data core entry for this person.")) - if(href_list["secrecordComment"] && hasHUD(usr,"security")) + if(href_list["secrecordComment"] && (hasHUD(usr,"security") || isobserver(usr))) var/perpref = null if(wear_id) var/obj/item/card/id/ID = wear_id.GetID() @@ -662,7 +662,8 @@ continue comment_markup += text("Comment deleted by [] at []
", comment["deleted_by"], comment["deleted_at"]) to_chat(usr, comment_markup) - to_chat(usr, "\[Add comment\]
") + if(!isobserver(usr)) + to_chat(usr, "\[Add comment\]
") if(!read) to_chat(usr, SPAN_DANGER("Unable to locate a data core entry for this person.")) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index ede57d64241b..f3f58b859e25 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -155,6 +155,7 @@ Contains most of the procs that are called when a mob is attacked by something return FALSE /mob/living/carbon/human/emp_act(severity) + . = ..() for(var/obj/O in src) if(!O) continue @@ -167,7 +168,6 @@ Contains most of the procs that are called when a mob is attacked by something if(I.robotic == FALSE) continue I.emp_act(severity) - ..() //Returns 1 if the attack hit, 0 if it missed. diff --git a/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm b/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm index c4ba3fd50682..18bb56b6328d 100644 --- a/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm +++ b/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm @@ -14,7 +14,7 @@ flags_inventory = COVEREYES|ALLOWINTERNALS|COVERMOUTH|ALLOWREBREATH|CANTSTRIP flags_armor_protection = BODY_FLAG_FACE|BODY_FLAG_EYES flags_atom = NO_FLAGS - flags_item = NOBLUDGEON|NOTABLEMERGE + flags_item = NOBLUDGEON throw_range = 1 layer = FACEHUGGER_LAYER black_market_value = 20 diff --git a/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm b/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm index 6361ff595b10..317c7999e586 100644 --- a/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm +++ b/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm @@ -90,7 +90,7 @@ //Hot hot Aliens on Aliens action. //Actually just used for eating people. /mob/living/carbon/xenomorph/attack_alien(mob/living/carbon/xenomorph/M) - if (M.fortify || M.burrow) + if (M.fortify || HAS_TRAIT(M, TRAIT_ABILITY_BURROWED)) return XENO_NO_DELAY_ACTION if(HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) diff --git a/code/modules/mob/living/carbon/xenomorph/XenoOverwatch.dm b/code/modules/mob/living/carbon/xenomorph/XenoOverwatch.dm index 46e144a1b1f5..68c422619d32 100644 --- a/code/modules/mob/living/carbon/xenomorph/XenoOverwatch.dm +++ b/code/modules/mob/living/carbon/xenomorph/XenoOverwatch.dm @@ -12,7 +12,7 @@ var/mob/living/carbon/xenomorph/X = owner if(!istype(X)) return FALSE - if(X.is_mob_incapacitated() || X.buckled || X.burrow) + if(X.is_mob_incapacitated() || X.buckled || HAS_TRAIT(X, TRAIT_ABILITY_BURROWED)) return FALSE else return TRUE diff --git a/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm b/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm index 373c57b4a6d4..7de3c78251db 100644 --- a/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm +++ b/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm @@ -660,7 +660,7 @@ /mob/living/carbon/xenomorph/burn_skin(burn_amount) - if(burrow) + if(HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) return FALSE if(caste.fire_immunity & FIRE_IMMUNITY_NO_DAMAGE) diff --git a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm index 76403bf89f52..51cab73e80e6 100644 --- a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm +++ b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm @@ -21,7 +21,8 @@ if(mind in SSticker.mode.xenomorphs) to_chat(src, SPAN_DEBUG("[src] mind is in the xenomorph list. Mind key is [mind.key].")) to_chat(src, SPAN_DEBUG("Current mob is: [mind.current]. Original mob is: [mind.original].")) - else to_chat(src, SPAN_DEBUG("This xenomorph is not in the xenomorph list.")) + else + to_chat(src, SPAN_DEBUG("This xenomorph is not in the xenomorph list.")) #endif #undef DEBUG_XENO @@ -274,13 +275,11 @@ var/tunnel = FALSE /// for check on lurker invisibility var/stealth = FALSE - var/burrow = FALSE var/fortify = FALSE var/crest_defense = FALSE /// 0/FALSE - upright, 1/TRUE - all fours var/agility = FALSE var/ripping_limb = FALSE - var/steelcrest = FALSE /// The world.time at which we will regurgitate our currently-vored victim var/devour_timer = 0 /// For drones/hivelords. Extends the maximum build range they have @@ -338,34 +337,23 @@ //Burrower Vars var/used_tremor = 0 - // Defender vars - var/used_headbutt = 0 - var/used_fortify = 0 // Burrowers var/used_burrow = 0 var/used_tunnel = 0 - //Carrier vars - var/threw_a_hugger = 0 - var/huggers_cur = 0 - var/eggs_cur = 0 - var/huggers_max = 0 - var/eggs_max = 0 - var/laid_egg = 0 - //Taken from update_icon for all xeno's var/list/overlays_standing[X_TOTAL_LAYERS] - var/atom/movable/vis_obj/xeno_wounds/wound_icon_carrier - var/atom/movable/vis_obj/xeno_pack/backpack_icon_carrier + var/atom/movable/vis_obj/xeno_wounds/wound_icon_holder + var/atom/movable/vis_obj/xeno_pack/backpack_icon_holder /mob/living/carbon/xenomorph/Initialize(mapload, mob/living/carbon/xenomorph/oldXeno, h_number) var/area/A = get_area(src) if(A && A.statistic_exempt) statistic_exempt = TRUE - wound_icon_carrier = new(null, src) - vis_contents += wound_icon_carrier + wound_icon_holder = new(null, src) + vis_contents += wound_icon_holder if(oldXeno) set_movement_intent(oldXeno.m_intent) @@ -541,7 +529,7 @@ /mob/living/carbon/xenomorph/proc/fire_immune(mob/living/L) SIGNAL_HANDLER - if(L.fire_reagent?.fire_penetrating && !burrow) + if(L.fire_reagent?.fire_penetrating && !HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) return return COMPONENT_CANCEL_IGNITION @@ -554,7 +542,7 @@ . = COMPONENT_NO_BURN // Burrowed xenos also cannot be ignited - if((caste.fire_immunity & FIRE_IMMUNITY_NO_IGNITE) || burrow) + if((caste.fire_immunity & FIRE_IMMUNITY_NO_IGNITE) || HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) . |= COMPONENT_NO_IGNITE if(caste.fire_immunity & FIRE_IMMUNITY_XENO_FRENZY) . |= COMPONENT_XENO_FRENZY @@ -719,11 +707,11 @@ built_structures = null - vis_contents -= wound_icon_carrier - QDEL_NULL(wound_icon_carrier) - if(backpack_icon_carrier) - vis_contents -= backpack_icon_carrier - QDEL_NULL(backpack_icon_carrier) + vis_contents -= wound_icon_holder + QDEL_NULL(wound_icon_holder) + if(backpack_icon_holder) + vis_contents -= backpack_icon_holder + QDEL_NULL(backpack_icon_holder) QDEL_NULL(iff_tag) @@ -746,7 +734,7 @@ if(SEND_SIGNAL(AM, COMSIG_MOVABLE_XENO_START_PULLING, src) & COMPONENT_ALLOW_PULL) return do_pull(AM, lunge, no_msg) - if(burrow) + if(HAS_TRAIT(src,TRAIT_ABILITY_BURROWED)) return if(!isliving(AM)) return FALSE @@ -946,8 +934,9 @@ if(is_zoomed) zoom_out() if(iscarrier(src)) - huggers_max = caste.huggers_max - eggs_max = caste.eggs_max + var/mob/living/carbon/xenomorph/carrier/carrier = src + carrier.huggers_max = caste.huggers_max + carrier.eggs_max = caste.eggs_max need_weeds = mutators.need_weeds diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/ability_helper_procs.dm b/code/modules/mob/living/carbon/xenomorph/abilities/ability_helper_procs.dm index 180f3f1126ae..641312e050d2 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/ability_helper_procs.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/ability_helper_procs.dm @@ -11,7 +11,7 @@ to_chat(src, SPAN_WARNING("[O] is too far away.")) return - if(!isturf(loc) || burrow) + if(!isturf(loc) || HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) to_chat(src, SPAN_WARNING("You can't melt [O] from here!")) return diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_abilities.dm index 9472008d6449..4430a1619e03 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_abilities.dm @@ -68,7 +68,7 @@ ability_name = "Acid Shroud" action_icon_state = "acid_shroud" action_type = XENO_ACTION_ACTIVATE - ability_primacy = XENO_PRIMARY_ACTION_4 + ability_primacy = XENO_PRIMARY_ACTION_5 plasma_cost = 10 macro_path = /datum/action/xeno_action/verb/verb_acid_shroud /// Allows the sound to play. Flipped to false when sound is triggered and true after a timer. This prevents soundspam @@ -86,30 +86,6 @@ /// Duration for the cooldown of abilities affected by acid shroud var/cooldown_duration = 30 SECONDS -/datum/action/xeno_action/onclick/dump_acid - name = "Dump Acid" - ability_name = "dump acid" - action_icon_state = "dump_acid" - plasma_cost = 10 - macro_path = /datum/action/xeno_action/verb/verb_dump_acid - action_type = XENO_ACTION_ACTIVATE - ability_primacy = XENO_PRIMARY_ACTION_4 - xeno_cooldown = 34 SECONDS - - var/buffs_duration = 6 SECONDS - var/cooldown_duration = 30 SECONDS - - var/speed_buff_amount = 0.5 - var/movespeed_buff_applied = FALSE - - /// List of types of actions to place on 20-second CD,if you ever want to subtype this for a strain or whatever, just change this var on the subtype - var/action_types_to_cd = list( - /datum/action/xeno_action/activable/xeno_spit/bombard, - /datum/action/xeno_action/onclick/dump_acid, - /datum/action/xeno_action/onclick/toggle_long_range/boiler, - /datum/action/xeno_action/activable/spray_acid/boiler, - ) - //////////////////////////// Trapper boiler abilities /datum/action/xeno_action/activable/boiler_trap diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_powers.dm index 6748b662b118..0fcdbf47a695 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_powers.dm @@ -1,13 +1,13 @@ -/datum/action/xeno_action/activable/acid_lance/use_ability(atom/A) - var/mob/living/carbon/xenomorph/X = owner +/datum/action/xeno_action/activable/acid_lance/use_ability(atom/affected_atom) + var/mob/living/carbon/xenomorph/xeno = owner - if (!istype(X) || !X.check_state()) + if (!istype(xeno) || !xeno.check_state()) return if (!activated_once && !action_cooldown_check()) return - if(!A || A.layer >= FLY_LAYER || !isturf(X.loc)) + if(!affected_atom || affected_atom.layer >= FLY_LAYER || !isturf(xeno.loc)) return if (!activated_once) @@ -16,8 +16,8 @@ if (!check_and_use_plasma_owner()) return - X.create_empower() - X.visible_message(SPAN_XENODANGER("[X] starts to gather its acid for a massive blast!"), SPAN_XENODANGER("You start to gather your acid for a massive blast!")) + xeno.create_empower() + xeno.visible_message(SPAN_XENODANGER("[xeno] starts to gather its acid for a massive blast!"), SPAN_XENODANGER("You start to gather your acid for a massive blast!")) activated_once = TRUE stack() addtimer(CALLBACK(src, PROC_REF(timeout)), max_stacks*stack_time + time_after_max_before_end) @@ -29,18 +29,18 @@ var/range = base_range + stacks*range_per_stack var/damage = base_damage + stacks*damage_per_stack var/turfs_visited = 0 - for (var/turf/T in getline2(get_turf(X), A)) - if(T.density || T.opacity) + for (var/turf/turf in getline2(get_turf(xeno), affected_atom)) + if(turf.density || turf.opacity) break var/should_stop = FALSE - for(var/obj/structure/S in T) - if(istype(S, /obj/structure/window/framed)) - var/obj/structure/window/framed/W = S - if(!W.unslashable) - W.deconstruct(disassembled = FALSE) + for(var/obj/structure/structure in turf) + if(istype(structure, /obj/structure/window/framed)) + var/obj/structure/window/framed/window_frame = structure + if(!window_frame.unslashable) + window_frame.deconstruct(disassembled = FALSE) - if(S.opacity) + if(structure.opacity) should_stop = TRUE break @@ -52,15 +52,15 @@ turfs_visited++ - new /obj/effect/xenomorph/acid_damage_delay(T, damage, 7, FALSE, "You are blasted with a stream of high-velocity acid!", X) + new /obj/effect/xenomorph/acid_damage_delay(turf, damage, 7, FALSE, "You are blasted with a stream of high-velocity acid!", xeno) - X.visible_message(SPAN_XENODANGER("[X] fires a massive blast of acid at [A]!"), SPAN_XENODANGER("You fire a massive blast of acid at [A]!")) + xeno.visible_message(SPAN_XENODANGER("[xeno] fires a massive blast of acid at [affected_atom]!"), SPAN_XENODANGER("You fire a massive blast of acid at [affected_atom]!")) remove_stack_effects("You feel your speed return to normal!") return TRUE /datum/action/xeno_action/activable/acid_lance/proc/stack() - var/mob/living/carbon/xenomorph/X = owner - if (!istype(X)) + var/mob/living/carbon/xenomorph/xeno = owner + if (!istype(xeno)) return if (!activated_once) @@ -68,31 +68,31 @@ stacks = min(max_stacks, stacks + 1) if (stacks != max_stacks) - X.speed_modifier += movespeed_per_stack + xeno.speed_modifier += movespeed_per_stack movespeed_nerf_applied += movespeed_per_stack - X.recalculate_speed() + xeno.recalculate_speed() addtimer(CALLBACK(src, PROC_REF(stack)), stack_time) return else - to_chat(X, SPAN_XENOHIGHDANGER("You have charged your acid lance to maximum!")) + to_chat(xeno, SPAN_XENOHIGHDANGER("You have charged your acid lance to maximum!")) return /datum/action/xeno_action/activable/acid_lance/proc/remove_stack_effects(message = null) - var/mob/living/carbon/xenomorph/X = owner + var/mob/living/carbon/xenomorph/xeno = owner - if (!istype(X)) + if (!istype(xeno)) return if (stacks <= 0) return if (message) - to_chat(X, SPAN_XENODANGER(message)) + to_chat(xeno, SPAN_XENODANGER(message)) stacks = 0 - X.speed_modifier -= movespeed_nerf_applied + xeno.speed_modifier -= movespeed_nerf_applied movespeed_nerf_applied = 0 - X.recalculate_speed() + xeno.recalculate_speed() /datum/action/xeno_action/activable/acid_lance/proc/timeout() if (activated_once) @@ -103,7 +103,7 @@ /datum/action/xeno_action/activable/acid_lance/action_cooldown_check() return (activated_once || ..()) -/datum/action/xeno_action/activable/xeno_spit/bombard/use_ability(atom/A) +/datum/action/xeno_action/activable/xeno_spit/bombard/use_ability(atom/affected_atom) . = ..() var/mob/living/carbon/xenomorph/xeno = owner if(!action_cooldown_check()) // activate c/d only if we already spit @@ -114,7 +114,7 @@ xeno_action.apply_cooldown_override(cooldown_duration) -/datum/action/xeno_action/onclick/acid_shroud/use_ability(atom/atom) +/datum/action/xeno_action/onclick/acid_shroud/use_ability(atom/affected_atom) var/datum/effect_system/smoke_spread/xeno_acid/spicy_gas var/mob/living/carbon/xenomorph/xeno = owner if (!isxeno(owner)) @@ -125,14 +125,18 @@ if (!xeno.check_state()) return + if(sound_play) playsound(xeno,"acid_strike", 35, 1) sound_play = FALSE addtimer(VARSET_CALLBACK(src, sound_play, TRUE), 2 SECONDS) + if (!do_after(xeno, xeno.ammo.spit_windup/6.5, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_HOSTILE, numticks = 2)) /// 0.7 seconds to_chat(xeno, SPAN_XENODANGER("You decide to cancel your gas shroud.")) return + playsound(xeno,"acid_sizzle", 50, 1) + if(xeno.ammo == GLOB.ammo_list[/datum/ammo/xeno/boiler_gas/acid]) spicy_gas = new /datum/effect_system/smoke_spread/xeno_acid else if(xeno.ammo == GLOB.ammo_list[/datum/ammo/xeno/boiler_gas]) @@ -143,6 +147,7 @@ spicy_gas.set_up(1, 0, get_turf(xeno), null, 6, new_cause_data = cause_data) spicy_gas.start() to_chat(xeno, SPAN_XENOHIGHDANGER("You dump your acid through your pores, creating a shroud of gas!")) + for (var/action_type in action_types_to_cd) var/datum/action/xeno_action/xeno_action = get_xeno_action_by_type(xeno, action_type) if (!istype(xeno_action)) @@ -153,57 +158,35 @@ apply_cooldown() return ..() -/datum/action/xeno_action/onclick/dump_acid/proc/remove_speed_buff() - if (movespeed_buff_applied && isxeno(owner)) - var/mob/living/carbon/xenomorph/xeno = owner - xeno.speed_modifier += speed_buff_amount - xeno.recalculate_speed() - movespeed_buff_applied = FALSE - UnregisterSignal(owner, COMSIG_MOB_MOVE_OR_LOOK) - -/datum/action/xeno_action/onclick/dump_acid/proc/handle_mob_move_or_look(mob/living/carbon/xenomorph/mover, actually_moving, direction, specific_direction) - SIGNAL_HANDLER - - if(!actually_moving) - return - - var/obj/effect/particle_effect/smoke/xeno_burn/smoke_effect = new(get_turf(mover), 1, create_cause_data("dumped acid gas", mover)) - smoke_effect.time_to_live = 3 - smoke_effect.spread_speed = 1000000 - -/datum/action/xeno_action/onclick/dump_acid/remove_from() - remove_speed_buff() - ..() - -/datum/action/xeno_action/onclick/shift_spits/boiler/use_ability(atom/A) +/datum/action/xeno_action/onclick/shift_spits/boiler/use_ability(atom/affected_atom) . = ..() apply_cooldown() /////////////////////////////// Trapper boiler powers -/datum/action/xeno_action/activable/boiler_trap/use_ability(atom/A) - var/mob/living/carbon/xenomorph/X = owner +/datum/action/xeno_action/activable/boiler_trap/use_ability(atom/affected_atom) + var/mob/living/carbon/xenomorph/xeno = owner - if (!istype(X)) + if (!istype(xeno)) return if (!action_cooldown_check()) return - if (!X.check_state()) + if (!xeno.check_state()) return - if (!can_see(X, A, TRAPPER_VIEWRANGE)) - to_chat(X, SPAN_XENODANGER("You cannot see that location!")) + if (!can_see(xeno, affected_atom, TRAPPER_VIEWRANGE)) + to_chat(xeno, SPAN_XENODANGER("You cannot see that location!")) return if (!check_and_use_plasma_owner()) return // 5-long line of turfs orthogonal to the line between us and our target as precisely as we can figure it - var/dir_between = Get_Compass_Dir(X, A) + var/dir_between = Get_Compass_Dir(xeno, affected_atom) var/list/target_turfs = list() - var/target_turf = get_turf(A) + var/target_turf = get_turf(affected_atom) var/left_turf = get_step(target_turf, turn(dir_between, -90)) var/right_turf = get_step(target_turf, turn(dir_between, 90)) target_turfs += target_turf @@ -212,70 +195,70 @@ target_turfs += get_step(left_turf, turn(dir_between, -90)) target_turfs += get_step(right_turf, turn(dir_between, 90)) - for (var/turf/T in target_turfs) - if (!istype(T) || T.density) + for (var/turf/turf in target_turfs) + if (!istype(turf) || turf.density) continue var/trap_found = FALSE - for (var/obj/effect/alien/resin/boilertrap/BT in T) + for (var/obj/effect/alien/resin/boilertrap/boiler_trap in turf) trap_found = TRUE break if (trap_found) continue - var/obj/effect/alien/resin/boilertrap/BT + var/obj/effect/alien/resin/boilertrap/boiler_trap if(empowered) - BT = new /obj/effect/alien/resin/boilertrap/empowered(T, X) + boiler_trap = new /obj/effect/alien/resin/boilertrap/empowered(turf, xeno) else - BT = new /obj/effect/alien/resin/boilertrap/(T, X) - QDEL_IN(BT, trap_ttl) + boiler_trap = new /obj/effect/alien/resin/boilertrap(turf, xeno) + QDEL_IN(boiler_trap, trap_ttl) if(empowered) empowered = FALSE empowering_charge_counter = 0 button.overlays -= "+empowered" - var/datum/action/xeno_action/activable/acid_mine/mine = get_xeno_action_by_type(X, /datum/action/xeno_action/activable/acid_mine) + var/datum/action/xeno_action/activable/acid_mine/mine = get_xeno_action_by_type(xeno, /datum/action/xeno_action/activable/acid_mine) if(!mine.empowered) mine.empowered = TRUE mine.button.overlays += "+empowered" - to_chat(X, SPAN_XENODANGER("You tap in your reserves to prepare a stronger [mine.name]!")) + to_chat(xeno, SPAN_XENODANGER("You tap in your reserves to prepare a stronger [mine.name]!")) apply_cooldown() return ..() -/datum/action/xeno_action/activable/acid_mine/use_ability(atom/A) - var/mob/living/carbon/xenomorph/X = owner +/datum/action/xeno_action/activable/acid_mine/use_ability(atom/affected_atom) + var/mob/living/carbon/xenomorph/xeno = owner - if (!istype(X)) + if (!istype(xeno)) return - if (!X.check_state()) + if (!xeno.check_state()) return if (!action_cooldown_check()) return - if(!A || A.layer >= FLY_LAYER || !isturf(X.loc)) + if(!affected_atom || affected_atom.layer >= FLY_LAYER || !isturf(xeno.loc)) return - if(!check_clear_path_to_target(X, A, TRUE, TRAPPER_VIEWRANGE)) - to_chat(X, SPAN_XENOWARNING("Something is in the way!")) + if(!check_clear_path_to_target(xeno, affected_atom, TRUE, TRAPPER_VIEWRANGE)) + to_chat(xeno, SPAN_XENOWARNING("Something is in the way!")) return if (!check_and_use_plasma_owner()) return - var/turf/T = get_turf(A) + var/turf/turf = get_turf(affected_atom) var/acid_bolt_message = "a bolt of acid" if(empowered) acid_bolt_message = "a powerful bolt of acid" - X.visible_message(SPAN_XENODANGER("[X] fires " + acid_bolt_message + " at [A]!"), SPAN_XENODANGER("You fire " + acid_bolt_message + " at [A]!")) - new /obj/effect/xenomorph/acid_damage_delay/boiler_landmine(T, damage, delay, empowered, "You are blasted with " + acid_bolt_message + "!", X, ) + xeno.visible_message(SPAN_XENODANGER("[xeno] fires " + acid_bolt_message + " at [affected_atom]!"), SPAN_XENODANGER("You fire " + acid_bolt_message + " at [affected_atom]!")) + new /obj/effect/xenomorph/acid_damage_delay/boiler_landmine(turf, damage, delay, empowered, "You are blasted with " + acid_bolt_message + "!", xeno) - for (var/turf/targetTurf in orange(1, T)) - new /obj/effect/xenomorph/acid_damage_delay/boiler_landmine(targetTurf, damage, delay, empowered, "You are blasted with a " + acid_bolt_message + "!", X) + for (var/turf/target_turf in orange(1, turf)) + new /obj/effect/xenomorph/acid_damage_delay/boiler_landmine(target_turf, damage, delay, empowered, "You are blasted with a " + acid_bolt_message + "!", xeno) if(empowered) empowered = FALSE @@ -284,7 +267,7 @@ apply_cooldown() return ..() -/datum/action/xeno_action/activable/acid_shotgun/use_ability(atom/target) +/datum/action/xeno_action/activable/acid_shotgun/use_ability(atom/affected_atom) var/mob/living/carbon/xenomorph/xeno = owner if (!istype(xeno)) return @@ -292,12 +275,12 @@ if (!action_cooldown_check()) return - if(!target || target.layer >= FLY_LAYER || !isturf(xeno.loc) || !xeno.check_state()) + if(!affected_atom || affected_atom.layer >= FLY_LAYER || !isturf(xeno.loc) || !xeno.check_state()) return - xeno.visible_message(SPAN_XENOWARNING("The [xeno] fires a blast of acid at [target]!"), SPAN_XENOWARNING("You fire a blast of acid at [target]!")) + xeno.visible_message(SPAN_XENOWARNING("The [xeno] fires a blast of acid at [affected_atom]!"), SPAN_XENOWARNING("You fire a blast of acid at [affected_atom]!")) - var/turf/target_turf = locate(target.x, target.y, target.z) + var/turf/target_turf = locate(affected_atom.x, affected_atom.y, affected_atom.z) var/obj/projectile/proj = new(xeno.loc, create_cause_data("acid shotgun", xeno)) var/datum/ammo/ammoDatum = new ammo_type() @@ -335,7 +318,7 @@ bonus_projectiles_amount = 0 max_range = 4 -/datum/action/xeno_action/activable/tail_stab/boiler/use_ability(atom/A) +/datum/action/xeno_action/activable/tail_stab/boiler/use_ability(atom/affected_atom) var/mob/living/carbon/xenomorph/stabbing_xeno = owner var/target = ..() if(iscarbon(target)) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_abilities.dm index 84b6c5ff5fef..747a3f90a691 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_abilities.dm @@ -11,7 +11,7 @@ /datum/action/xeno_action/activable/burrow/use_ability(atom/A) var/mob/living/carbon/xenomorph/X = owner - if(X.burrow) + if(HAS_TRAIT(X, TRAIT_ABILITY_BURROWED)) X.tunnel(get_turf(A)) else X.burrow() diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_powers.dm index 49558ee83607..6a2071fafc3b 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_powers.dm @@ -35,7 +35,6 @@ return // TODO Make immune to all damage here. to_chat(src, SPAN_XENOWARNING("You burrow yourself into the ground.")) - burrow = TRUE invisibility = 101 anchored = TRUE if(caste.fire_immunity == FIRE_IMMUNITY_NONE) @@ -52,20 +51,19 @@ process_burrow() /mob/living/carbon/xenomorph/proc/process_burrow() - if(!burrow) + if(!HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) return if(world.time > burrow_timer && !tunnel) burrow_off() if(observed_xeno) overwatch(observed_xeno, TRUE) - if(burrow) + if(HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) addtimer(CALLBACK(src, PROC_REF(process_burrow)), 1 SECONDS) /mob/living/carbon/xenomorph/proc/burrow_off() if(caste_type && GLOB.xeno_datum_list[caste_type]) caste = GLOB.xeno_datum_list[caste_type] to_chat(src, SPAN_NOTICE("You resurface.")) - burrow = FALSE if(caste.fire_immunity == FIRE_IMMUNITY_NONE) UnregisterSignal(src, list( COMSIG_LIVING_PREIGNITION, @@ -85,7 +83,7 @@ /mob/living/carbon/xenomorph/proc/do_burrow_cooldown() used_burrow = FALSE - if(burrow) + if(HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) to_chat(src, SPAN_NOTICE("You can now surface.")) for(var/X in actions) var/datum/action/act = X @@ -96,7 +94,7 @@ if(!check_state()) return - if(!burrow) + if(!HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) to_chat(src, SPAN_NOTICE("You must be burrowed to do this.")) return @@ -191,7 +189,7 @@ return !xeno.used_tremor /mob/living/carbon/xenomorph/proc/tremor() //More support focused version of crusher earthquakes. - if(burrow || is_ventcrawling) + if(HAS_TRAIT(src, TRAIT_ABILITY_BURROWED) || is_ventcrawling) to_chat(src, SPAN_XENOWARNING("You must be above ground to do this.")) return diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/defender/defender_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/defender/defender_powers.dm index 8a36e4d5cdf7..3cdf1342f50d 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/defender/defender_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/defender/defender_powers.dm @@ -51,7 +51,7 @@ if(!check_and_use_plasma_owner()) return - if(fendy.fortify && !fendy.steelcrest) + if(fendy.fortify && !fendy.mutation_type == DEFENDER_STEELCREST) to_chat(fendy, SPAN_XENOWARNING("You cannot use headbutt while fortified.")) return @@ -78,7 +78,9 @@ SPAN_XENOWARNING("You ram [carbone] with your armored crest!")) if(carbone.stat != DEAD && (!(carbone.status_flags & XENO_HOST) || !HAS_TRAIT(carbone, TRAIT_NESTED)) ) - var/h_damage = 30 - (fendy.crest_defense * 10) + (fendy.steelcrest * 7.5) //30 if crest up, 20 if down, plus 7.5 + var/h_damage = 30 - (fendy.crest_defense * 10) + if(fendy.mutation_type == DEFENDER_STEELCREST) + h_damage += 7.5 carbone.apply_armoured_damage(get_xeno_damage_slash(carbone, h_damage), ARMOR_MELEE, BRUTE, "chest", 5) var/facing = get_dir(fendy, carbone) @@ -159,7 +161,7 @@ if (!istype(xeno)) return - if(xeno.crest_defense && xeno.steelcrest) + if(xeno.crest_defense && xeno.mutation_type == DEFENDER_STEELCREST) to_chat(src, SPAN_XENOWARNING("You cannot fortify while your crest is already down!")) return @@ -207,7 +209,7 @@ if(fortify_state) to_chat(X, SPAN_XENOWARNING("You tuck yourself into a defensive stance.")) - if(X.steelcrest) + if(X.mutation_type == DEFENDER_STEELCREST) X.armor_deflection_buff += 10 X.armor_explosive_buff += 60 X.ability_speed_modifier += 3 @@ -227,7 +229,7 @@ to_chat(X, SPAN_XENOWARNING("You resume your normal stance.")) REMOVE_TRAIT(X, TRAIT_IMMOBILIZED, TRAIT_SOURCE_ABILITY("Fortify")) X.anchored = FALSE - if(X.steelcrest) + if(X.mutation_type == DEFENDER_STEELCREST) X.armor_deflection_buff -= 10 X.armor_explosive_buff -= 60 X.ability_speed_modifier -= 3 diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm index 250d024041a4..78446cd1e762 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm @@ -9,7 +9,7 @@ return if(!xeno.check_state()) return - if(xeno.burrow) + if(HAS_TRAIT(xeno, TRAIT_ABILITY_BURROWED)) return var/turf/turf = xeno.loc @@ -89,7 +89,7 @@ to_chat(src, SPAN_WARNING("You cannot rest while fortified!")) return - if(burrow) + if(HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) to_chat(src, SPAN_WARNING("You cannot rest while burrowed!")) return @@ -526,7 +526,7 @@ if (istype(X, /mob/living/carbon/xenomorph/burrower)) var/mob/living/carbon/xenomorph/burrower/B = X - if (B.burrow) + if (HAS_TRAIT(B, TRAIT_ABILITY_BURROWED)) return var/turf/T = get_turf(X) @@ -905,7 +905,7 @@ /datum/action/xeno_action/activable/tail_stab/use_ability(atom/targetted_atom) var/mob/living/carbon/xenomorph/stabbing_xeno = owner - if(stabbing_xeno.burrow || stabbing_xeno.is_ventcrawling) + if(HAS_TRAIT(stabbing_xeno, TRAIT_ABILITY_BURROWED) || stabbing_xeno.is_ventcrawling) to_chat(stabbing_xeno, SPAN_XENOWARNING("You must be above ground to do this.")) return diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/runner/runner_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/runner/runner_powers.dm index 9a29e2cb6da0..71f994612279 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/runner/runner_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/runner/runner_powers.dm @@ -58,7 +58,7 @@ to_chat(src, SPAN_WARNING("[O] is too far away.")) return - if(!isturf(loc) || burrow) + if(!isturf(loc) || HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) to_chat(src, SPAN_WARNING("You can't melt [O] from here!")) return diff --git a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm index 56ff1d2a4290..6586594eca24 100644 --- a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm +++ b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm @@ -9,7 +9,7 @@ /mob/living/carbon/human/attack_alien(mob/living/carbon/xenomorph/M, dam_bonus) - if(M.fortify || M.burrow) + if(M.fortify || HAS_TRAIT(M, TRAIT_ABILITY_BURROWED)) return XENO_NO_DELAY_ACTION var/intent = M.a_intent @@ -220,7 +220,7 @@ //Every other type of nonhuman mob /mob/living/attack_alien(mob/living/carbon/xenomorph/M) - if(M.fortify || M.burrow) + if(M.fortify || HAS_TRAIT(M, TRAIT_ABILITY_BURROWED)) return XENO_NO_DELAY_ACTION switch(M.a_intent) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Boiler.dm b/code/modules/mob/living/carbon/xenomorph/castes/Boiler.dm index 092dae00d603..37dc3048408a 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Boiler.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Boiler.dm @@ -69,8 +69,8 @@ /datum/action/xeno_action/activable/xeno_spit/bombard, //1st macro /datum/action/xeno_action/onclick/shift_spits/boiler, //2nd macro /datum/action/xeno_action/activable/spray_acid/boiler, //3rd macro - /datum/action/xeno_action/onclick/toggle_long_range/boiler, //4rd macro - /datum/action/xeno_action/onclick/acid_shroud, //4th macro + /datum/action/xeno_action/onclick/toggle_long_range/boiler, //4th macro + /datum/action/xeno_action/onclick/acid_shroud, //5th macro /datum/action/xeno_action/onclick/tacmap, ) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Burrower.dm b/code/modules/mob/living/carbon/xenomorph/castes/Burrower.dm index 32d98d43a5c4..ee882bc14fdf 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Burrower.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Burrower.dm @@ -85,23 +85,23 @@ sight |= SEE_TURFS /mob/living/carbon/xenomorph/burrower/ex_act(severity) - if(burrow) + if(HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) return ..() /mob/living/carbon/xenomorph/burrower/attack_hand() - if(burrow) + if(HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) return ..() /mob/living/carbon/xenomorph/burrower/attackby() - if(burrow) + if(HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) return ..() /mob/living/carbon/xenomorph/burrower/get_projectile_hit_chance() . = ..() - if(burrow) + if(HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) return 0 /datum/behavior_delegate/burrower_base @@ -111,6 +111,6 @@ if(bound_xeno.stat == DEAD) return - if(bound_xeno.burrow) + if(HAS_TRAIT(bound_xeno, TRAIT_ABILITY_BURROWED)) bound_xeno.icon_state = "[bound_xeno.mutation_icon_state] Burrower Burrowed" return TRUE diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Carrier.dm b/code/modules/mob/living/carbon/xenomorph/castes/Carrier.dm index 577f412b9fa2..07f161f4c6f7 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Carrier.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Carrier.dm @@ -84,6 +84,14 @@ var/mutable_appearance/hugger_overlays_icon var/mutable_appearance/eggsac_overlays_icon + //Carrier specific vars + var/threw_a_hugger = 0 + var/huggers_cur = 0 + var/eggs_cur = 0 + var/huggers_max = 0 + var/eggs_max = 0 + var/laid_egg = 0 + /mob/living/carbon/xenomorph/carrier/update_icons() . = ..() if (mutation_type == CARRIER_NORMAL) diff --git a/code/modules/mob/living/carbon/xenomorph/mutators/strains/boiler/trapper.dm b/code/modules/mob/living/carbon/xenomorph/mutators/strains/boiler/trapper.dm index cb43960a8e2c..c14d2c6773cf 100644 --- a/code/modules/mob/living/carbon/xenomorph/mutators/strains/boiler/trapper.dm +++ b/code/modules/mob/living/carbon/xenomorph/mutators/strains/boiler/trapper.dm @@ -10,7 +10,6 @@ /datum/action/xeno_action/activable/xeno_spit/bombard, /datum/action/xeno_action/onclick/shift_spits/boiler, /datum/action/xeno_action/activable/spray_acid/boiler, - /datum/action/xeno_action/onclick/dump_acid, /datum/action/xeno_action/onclick/toggle_long_range/boiler, /datum/action/xeno_action/onclick/acid_shroud, ) diff --git a/code/modules/mob/living/carbon/xenomorph/mutators/strains/carrier/eggsac.dm b/code/modules/mob/living/carbon/xenomorph/mutators/strains/carrier/eggsac.dm index 18d28675557e..524571fc0dfd 100644 --- a/code/modules/mob/living/carbon/xenomorph/mutators/strains/carrier/eggsac.dm +++ b/code/modules/mob/living/carbon/xenomorph/mutators/strains/carrier/eggsac.dm @@ -58,7 +58,7 @@ /datum/action/xeno_action/active_toggle/generate_egg/should_use_plasma() . = FALSE - var/mob/living/carbon/xenomorph/xeno = owner + var/mob/living/carbon/xenomorph/carrier/xeno = owner if(!xeno) return if(xeno.eggs_cur < xeno.eggs_max) @@ -67,7 +67,7 @@ /datum/action/xeno_action/active_toggle/generate_egg/life_tick() . = ..() if(.) - var/mob/living/carbon/xenomorph/xeno = owner + var/mob/living/carbon/xenomorph/carrier/xeno = owner if(!xeno) return if(xeno.eggs_cur < xeno.eggs_max) diff --git a/code/modules/mob/living/carbon/xenomorph/mutators/strains/defender/steel_crest.dm b/code/modules/mob/living/carbon/xenomorph/mutators/strains/defender/steel_crest.dm index 630477bd053e..957e7f1b8926 100644 --- a/code/modules/mob/living/carbon/xenomorph/mutators/strains/defender/steel_crest.dm +++ b/code/modules/mob/living/carbon/xenomorph/mutators/strains/defender/steel_crest.dm @@ -23,7 +23,6 @@ defender.mutation_type = DEFENDER_STEELCREST defender.mutation_icon_state = DEFENDER_STEELCREST defender.damage_modifier -= XENO_DAMAGE_MOD_VERY_SMALL - defender.steelcrest = TRUE if(defender.fortify) defender.ability_speed_modifier += 2.5 mutator_update_actions(defender) diff --git a/code/modules/mob/living/carbon/xenomorph/update_icons.dm b/code/modules/mob/living/carbon/xenomorph/update_icons.dm index 5eb9fb6b0650..9e1eb7a0d06e 100644 --- a/code/modules/mob/living/carbon/xenomorph/update_icons.dm +++ b/code/modules/mob/living/carbon/xenomorph/update_icons.dm @@ -153,12 +153,12 @@ apply_overlay(X_L_HAND_LAYER) /mob/living/carbon/xenomorph/update_inv_back() - if(!backpack_icon_carrier) + if(!backpack_icon_holder) return // Xenos will only have a vis_obj if they've been equipped with a pack before var/obj/item/storage/backpack/backpack = back if(!backpack?.xeno_icon_state) - backpack_icon_carrier.icon_state = "none" + backpack_icon_holder.icon_state = "none" return var/state_modifier = "" @@ -172,11 +172,11 @@ else if(handle_special_state()) state_modifier = handle_special_backpack_states() - backpack_icon_carrier.icon_state = backpack.xeno_icon_state + state_modifier + backpack_icon_holder.icon_state = backpack.xeno_icon_state + state_modifier - backpack_icon_carrier.layer = -X_BACK_LAYER + backpack_icon_holder.layer = -X_BACK_LAYER if(dir == NORTH && (back.flags_item & ITEM_OVERRIDE_NORTHFACE)) - backpack_icon_carrier.layer = -X_BACK_FRONT_LAYER + backpack_icon_holder.layer = -X_BACK_FRONT_LAYER /mob/living/carbon/xenomorph/proc/update_inv_resource() remove_overlay(X_RESOURCE_LAYER) @@ -291,24 +291,24 @@ // Shamelessly inspired from the equivalent proc on TGCM /mob/living/carbon/xenomorph/proc/update_wounds() - if(!wound_icon_carrier) + if(!wound_icon_holder) return var/health_threshold - wound_icon_carrier.layer = layer + 0.01 + wound_icon_holder.layer = layer + 0.01 health_threshold = max(CEILING((health * 4) / (maxHealth), 1), 0) //From 0 to 4, in 25% chunks if(health > HEALTH_THRESHOLD_DEAD) if(health_threshold > 3) wound_icon_carrier.icon_state = "none" else if(body_position == LYING_DOWN) - if((resting || sleeping) && (!HAS_TRAIT(src, TRAIT_KNOCKEDOUT) && health > 0)) + if(!HAS_TRAIT(src, TRAIT_INCAPACITATED) && !HAS_TRAIT(src, TRAIT_FLOORED)) wound_icon_carrier.icon_state = "[caste.caste_type]_rest_[health_threshold]" else - wound_icon_carrier.icon_state = "[caste.caste_type]_downed_[health_threshold]" + wound_icon_holder.icon_state = "[caste.caste_type]_downed_[health_threshold]" else if(!handle_special_state()) - wound_icon_carrier.icon_state = "[caste.caste_type]_walk_[health_threshold]" + wound_icon_holder.icon_state = "[caste.caste_type]_walk_[health_threshold]" else - wound_icon_carrier.icon_state = handle_special_wound_states(health_threshold) + wound_icon_holder.icon_state = handle_special_wound_states(health_threshold) ///Used to display the xeno wounds/backpacks without rapidly switching overlays diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index fa33af97275e..375594574ab8 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -22,10 +22,10 @@ return 0 //only carbon liveforms have this proc /mob/living/emp_act(severity) + . = ..() var/list/L = src.get_contents() for(var/obj/O in L) O.emp_act(severity) - ..() //this proc handles being hit by a thrown atom /mob/living/hitby(atom/movable/AM) diff --git a/code/modules/mob/living/living_health_procs.dm b/code/modules/mob/living/living_health_procs.dm index 47c48ca8efd0..d808e7806a19 100644 --- a/code/modules/mob/living/living_health_procs.dm +++ b/code/modules/mob/living/living_health_procs.dm @@ -500,3 +500,4 @@ if(stat >= UNCONSCIOUS) return face_dir(direction) + return ..() diff --git a/code/modules/mob/living/living_healthscan.dm b/code/modules/mob/living/living_healthscan.dm index 6875aa934fd2..f3355157a40f 100644 --- a/code/modules/mob/living/living_healthscan.dm +++ b/code/modules/mob/living/living_healthscan.dm @@ -441,7 +441,7 @@ GLOBAL_LIST_INIT(known_implants, subtypesof(/obj/item/implant)) data["ssd"] = null //clear the data in case we have an old input from a previous scan if(target_mob.getBrainLoss() >= 100 || !target_mob.has_brain()) - data["ssd"] = "Subject is brain-dead." + data["ssd"] = "Subject has taken extreme amounts of brain damage." else if(target_mob.has_brain() && target_mob.stat != DEAD && ishuman(target_mob)) if(!target_mob.key) data["ssd"] = "No soul detected." // they ghosted @@ -586,7 +586,7 @@ GLOBAL_LIST_INIT(known_implants, subtypesof(/obj/item/implant)) if(!D.hidden[SCANNER]) dat += "\t *Warning: [D.form] Detected\nName: [D.name].\nType: [D.spread].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure]\n" if (src.getBrainLoss() >= 100 || !src.has_brain()) - dat += "\t *Subject is brain dead.\n" + dat += "\t *Subject has taken extreme amounts of brain damage.\n" if(src.has_brain() && src.stat != DEAD && ishuman(src)) if(!src.key) diff --git a/code/modules/mob/living/living_verbs.dm b/code/modules/mob/living/living_verbs.dm index 3b6779752989..45f5a25fce2c 100644 --- a/code/modules/mob/living/living_verbs.dm +++ b/code/modules/mob/living/living_verbs.dm @@ -13,7 +13,7 @@ if(isxeno(src)) var/mob/living/carbon/xenomorph/xeno = src - if(xeno.burrow) + if(HAS_TRAIT(xeno, TRAIT_ABILITY_BURROWED)) to_chat(src, SPAN_WARNING("You can't resist in your current state.")) return diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index b4e5b6d855b4..818377c9c191 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -301,8 +301,8 @@ var/list/ai_verbs_default = list( return 0 /mob/living/silicon/ai/emp_act(severity) + . = ..() if (prob(30)) view_core() - ..() /mob/living/silicon/ai/Topic(href, href_list) if(usr != src) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index bccd74036658..1638b0fb7fbe 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -36,6 +36,7 @@ return /mob/living/silicon/emp_act(severity) + . = ..() switch(severity) if(1) src.take_limb_damage(20) @@ -47,7 +48,6 @@ to_chat(src, SPAN_DANGER("*BZZZT*")) to_chat(src, SPAN_DANGER("Warning: Electromagnetic pulse detected.")) - ..() /mob/living/silicon/stun_effect_act(stun_amount, agony_amount) return //immune diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 5eddf4c0058a..ae5637970599 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -40,7 +40,7 @@ pixel_x = -12 old_x = -12 - var/atom/movable/vis_obj/xeno_wounds/wound_icon_carrier + var/atom/movable/vis_obj/xeno_wounds/wound_icon_holder /mob/living/simple_animal/hostile/alien/Initialize() maxHealth = health @@ -52,8 +52,8 @@ var/datum/hive_status/hive = GLOB.hive_datum[hivenumber] color = hive.color - wound_icon_carrier = new(null, src) - vis_contents += wound_icon_carrier + wound_icon_holder = new(null, src) + vis_contents += wound_icon_holder /mob/living/simple_animal/hostile/alien/proc/generate_name() change_real_name(src, "[caste_name] (BD-[rand(1, 999)])") @@ -105,22 +105,22 @@ update_wounds() /mob/living/simple_animal/hostile/alien/proc/update_wounds() - if(!wound_icon_carrier) + if(!wound_icon_holder) return - wound_icon_carrier.layer = layer + 0.01 - wound_icon_carrier.dir = dir + wound_icon_holder.layer = layer + 0.01 + wound_icon_holder.dir = dir var/health_threshold = max(CEILING((health * 4) / (maxHealth), 1), 0) //From 0 to 4, in 25% chunks if(health > HEALTH_THRESHOLD_DEAD) if(health_threshold > 3) wound_icon_carrier.icon_state = "none" else if(body_position == LYING_DOWN) - if((resting || sleeping) && (!HAS_TRAIT(src, TRAIT_KNOCKEDOUT) && health > 0)) + if(!HAS_TRAIT(src, TRAIT_INCAPACITATED) && !HAS_TRAIT(src, TRAIT_FLOORED)) wound_icon_carrier.icon_state = "[caste_name]_rest_[health_threshold]" else - wound_icon_carrier.icon_state = "[caste_name]_downed_[health_threshold]" + wound_icon_holder.icon_state = "[caste_name]_downed_[health_threshold]" else - wound_icon_carrier.icon_state = "[caste_name]_walk_[health_threshold]" + wound_icon_holder.icon_state = "[caste_name]_walk_[health_threshold]" /mob/living/simple_animal/hostile/alien/bullet_act(obj/projectile/P) . = ..() @@ -148,8 +148,8 @@ animate(src, 5 SECONDS, alpha = 0, easing = CUBIC_EASING) /mob/living/simple_animal/hostile/alien/Destroy() - vis_contents -= wound_icon_carrier - QDEL_NULL(wound_icon_carrier) + vis_contents -= wound_icon_holder + QDEL_NULL(wound_icon_holder) return ..() /mob/living/simple_animal/hostile/alien/ravager diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm index 3d37f8ea57c1..b7c091d564d6 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm @@ -152,6 +152,7 @@ //ion rifle! /mob/living/simple_animal/hostile/retaliate/malf_drone/emp_act(severity) + . = ..() health -= rand(3,15) * (severity + 1) disabled = rand(150, 600) hostile_drone = 0 diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 2c02286247ea..c384303e71e8 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -315,7 +315,6 @@ var/global/list/limb_types_by_name = list( /mob/proc/is_mob_incapacitated(ignore_restrained) // note that stat includes knockout via unconscious return (stat || (!ignore_restrained && is_mob_restrained()) || (status_flags & FAKEDEATH) || HAS_TRAIT(src, TRAIT_INCAPACITATED)) - /mob/proc/get_eye_protection() return EYE_PROTECTION_NONE diff --git a/code/modules/organs/limbs.dm b/code/modules/organs/limbs.dm index 58d0a4780681..fd81c25bec9f 100644 --- a/code/modules/organs/limbs.dm +++ b/code/modules/organs/limbs.dm @@ -171,6 +171,7 @@ */ /obj/limb/emp_act(severity) + . = ..() if(!(status & (LIMB_ROBOT|LIMB_SYNTHSKIN))) //meatbags do not care about EMP return var/probability = 30 diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index e18c1ce3c2e7..751dbe5bf7cd 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -906,3 +906,14 @@ info = parsepencode(template, null, null, FALSE) #undef MAX_FIELDS + +/obj/item/paper/colonial_grunts + icon = 'icons/obj/items/paper.dmi' + icon_state = "paper_stack_words" + name = "Colonial Space Grunts" + desc = "A tabletop game based around the USCM, easy to get into, simple to play, and most inportantly fun for the whole squad." + +/obj/item/paper/colonial_grunts/Initialize(mapload, ...) + . = ..() + info = "
" + update_icon() diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index bce7051abb1c..b210dbac2947 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -1266,6 +1266,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list( //Damage and destruction acts /obj/structure/machinery/power/apc/emp_act(severity) + . = ..() if(cell) cell.emp_act(severity) lighting = 0 @@ -1274,7 +1275,6 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list( spawn(1 MINUTES) equipment = 3 environ = 3 - ..() /obj/structure/machinery/power/apc/ex_act(severity) switch(severity) diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 992e0f3464ff..31a096a3a2ee 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -71,12 +71,12 @@ /obj/item/cell/emp_act(severity) + . = ..() charge -= 1000 / severity if (charge < 0) charge = 0 if(reliability != 100 && prob(50/severity)) reliability -= 10 / severity - ..() /obj/item/cell/ex_act(severity) diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index ac19d1ba0c67..0e469a7fe577 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -390,6 +390,7 @@ /obj/structure/machinery/power/smes/emp_act(severity) + . = ..() outputting = 0 inputting = 0 output_level = 0 @@ -400,7 +401,6 @@ output_level = initial(output_level) inputting = initial(inputting) outputting = initial(outputting) - ..() diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index bd1b546dcf8c..8d7ab1532ade 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -480,6 +480,7 @@ /obj/item/weapon/gun/emp_act(severity) + . = ..() for(var/obj/O in contents) O.emp_act(severity) diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index adca6a7cce6f..ee122d8f8edd 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -66,9 +66,9 @@ overlays += charge_icon + "_0" /obj/item/weapon/gun/energy/emp_act(severity) + . = ..() cell.use(round(cell.maxcharge / severity)) update_icon() - ..() /obj/item/weapon/gun/energy/load_into_chamber() if(!cell || cell.charge < charge_cost) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 9f0d37e00bc6..1cab3e0d8061 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -221,7 +221,7 @@ update() ///Attempt to move while inside -/obj/structure/machinery/disposal/relaymove(mob/user) +/obj/structure/machinery/disposal/relaymove(mob/living/user) if(user.is_mob_incapacitated(TRUE) || flushing) return FALSE if(user.loc == src) diff --git a/code/modules/shuttle/computers/escape_pod_computer.dm b/code/modules/shuttle/computers/escape_pod_computer.dm index eb81a4a98a8a..ec523747e18d 100644 --- a/code/modules/shuttle/computers/escape_pod_computer.dm +++ b/code/modules/shuttle/computers/escape_pod_computer.dm @@ -209,7 +209,6 @@ /obj/structure/machinery/door/airlock/evacuation name = "\improper Evacuation Airlock" icon = 'icons/obj/structures/doors/pod_doors.dmi' - heat_proof = 1 unslashable = TRUE unacidable = TRUE var/obj/docking_port/mobile/crashable/escape_shuttle/linked_shuttle diff --git a/code/modules/shuttle/helpers.dm b/code/modules/shuttle/helpers.dm index 1d841581faa0..6ab5d88da1b7 100644 --- a/code/modules/shuttle/helpers.dm +++ b/code/modules/shuttle/helpers.dm @@ -117,7 +117,7 @@ var/list/door_turfs = list(get_turf(air)) if(istype(air, /obj/structure/machinery/door/airlock/multi_tile)) var/obj/structure/machinery/door/airlock/multi_tile/multi_door = air - door_turfs = multi_door.get_filler_turfs() + door_turfs = multi_door.locate_filler_turfs() for(var/turf/door_turf in door_turfs) bump_at_turf(door_turf) diff --git a/code/modules/shuttle/shuttles/dropship.dm b/code/modules/shuttle/shuttles/dropship.dm index e1c2bb9a1f9a..ee91c9b9e5d4 100644 --- a/code/modules/shuttle/shuttles/dropship.dm +++ b/code/modules/shuttle/shuttles/dropship.dm @@ -234,8 +234,8 @@ /obj/docking_port/stationary/marine_dropship/on_departure(obj/docking_port/mobile/departing_shuttle) . = ..() turn_off_landing_lights() - var/obj/docking_port/mobile/marine_dropship/shuttle = departing_shuttle - for(var/obj/structure/dropship_equipment/eq as anything in shuttle.equipments) + var/obj/docking_port/mobile/marine_dropship/dropship = departing_shuttle + for(var/obj/structure/dropship_equipment/eq as anything in dropship.equipments) eq.on_launch() /obj/docking_port/stationary/marine_dropship/lz1 diff --git a/code/modules/shuttles/marine_ferry.dm b/code/modules/shuttles/marine_ferry.dm index 032294a45b39..79988bbb8da3 100644 --- a/code/modules/shuttles/marine_ferry.dm +++ b/code/modules/shuttles/marine_ferry.dm @@ -58,7 +58,7 @@ for(var/obj/vehicle/multitile/M in D.loc) if(M) return 0 - for(var/turf/T in D.get_filler_turfs()) + for(var/turf/T in D.locate_filler_turfs()) for(var/obj/vehicle/multitile/M in T) if(M) return 0 diff --git a/code/modules/vehicles/interior/interactable/vehicle_locker.dm b/code/modules/vehicles/interior/interactable/vehicle_locker.dm index ab536c7637c6..5571995594f0 100644 --- a/code/modules/vehicles/interior/interactable/vehicle_locker.dm +++ b/code/modules/vehicles/interior/interactable/vehicle_locker.dm @@ -117,8 +117,8 @@ return container.attackby(W, user) /obj/structure/vehicle_locker/emp_act(severity) + . = ..() container.emp_act(severity) - ..() /obj/structure/vehicle_locker/hear_talk(mob/M, msg) container.hear_talk(M, msg) diff --git a/code/modules/vehicles/multitile/multitile_bump.dm b/code/modules/vehicles/multitile/multitile_bump.dm index d9b480866f99..1f9e7897b0d3 100644 --- a/code/modules/vehicles/multitile/multitile_bump.dm +++ b/code/modules/vehicles/multitile/multitile_bump.dm @@ -106,14 +106,12 @@ return TRUE /obj/structure/surface/handle_vehicle_bump(obj/vehicle/multitile/V) - detach_all() playsound(V, 'sound/effects/metal_crash.ogg', 20) visible_message(SPAN_DANGER("\The [V] crushes \the [src]!")) qdel(src) return TRUE /obj/structure/surface/table/handle_vehicle_bump(obj/vehicle/multitile/V) - detach_all() playsound(V, 'sound/effects/metal_crash.ogg', 20) visible_message(SPAN_DANGER("\The [V] crushes \the [src]!")) if(prob(50)) @@ -122,7 +120,6 @@ return TRUE /obj/structure/surface/rack/handle_vehicle_bump(obj/vehicle/multitile/V) - detach_all() playsound(V, 'sound/effects/metal_crash.ogg', 20) visible_message(SPAN_DANGER("\The [V] crushes \the [src]!")) deconstruct() @@ -740,7 +737,7 @@ //BURROWER /mob/living/carbon/xenomorph/burrower/handle_vehicle_bump(obj/vehicle/multitile/V) - if(burrow) + if(HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) return TRUE else return . = ..() diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index 5192a6834050..2239329d3e44 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -112,6 +112,7 @@ return /obj/vehicle/emp_act(severity) + . = ..() var/was_on = on stat |= EMPED new /obj/effect/overlay/temp/emp_sparks (loc) diff --git a/colonialmarines.dme b/colonialmarines.dme index 974e30b7a64c..29d7b5e1969a 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -125,6 +125,7 @@ #include "code\__DEFINES\dcs\signals\signals_global.dm" #include "code\__DEFINES\dcs\signals\signals_subsystem.dm" #include "code\__DEFINES\dcs\signals\atom\signals_atom.dm" +#include "code\__DEFINES\dcs\signals\atom\signals_cell.dm" #include "code\__DEFINES\dcs\signals\atom\signals_item.dm" #include "code\__DEFINES\dcs\signals\atom\signals_movable.dm" #include "code\__DEFINES\dcs\signals\atom\signals_obj.dm" @@ -375,6 +376,7 @@ #include "code\datums\components\armor_link.dm" #include "code\datums\components\bad_leg.dm" #include "code\datums\components\bonus_damage_stack.dm" +#include "code\datums\components\cell.dm" #include "code\datums\components\cluster_stack.dm" #include "code\datums\components\connect_mob_behalf.dm" #include "code\datums\components\crate_tag.dm" diff --git a/html/changelogs/AutoChangeLog-pr-4863.yml b/html/changelogs/AutoChangeLog-pr-4863.yml deleted file mode 100644 index 3fb781dcb8be..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4863.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Drathek" -delete-after: True -changes: - - bugfix: "Fixed imaginary friend merge ability preventing hearing if ghost ears are set to only nearby." - - bugfix: "Fixed imaginary friend hide ability not updating its icons." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4872.yml b/html/changelogs/AutoChangeLog-pr-4872.yml deleted file mode 100644 index 2d08135f4a9f..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4872.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Drathek" -delete-after: True -changes: - - bugfix: "Fixed fax template images in CDN mode" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4874.yml b/html/changelogs/AutoChangeLog-pr-4874.yml new file mode 100644 index 000000000000..27ca1368c5f5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4874.yml @@ -0,0 +1,4 @@ +author: "Releasethesea" +delete-after: True +changes: + - rscadd: "Adds functional bedrolls to the game." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4879.yml b/html/changelogs/AutoChangeLog-pr-4879.yml new file mode 100644 index 000000000000..cede9d3da3ff --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4879.yml @@ -0,0 +1,4 @@ +author: "fira" +delete-after: True +changes: + - bugfix: "Fixed an issue in traits backend update causing among others leadership action buttons to be missing." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4882.yml b/html/changelogs/AutoChangeLog-pr-4882.yml new file mode 100644 index 000000000000..c7fb30820171 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4882.yml @@ -0,0 +1,4 @@ +author: "BraveMole, Zonespace" +delete-after: True +changes: + - bugfix: "Guns should no longer very rarely jam mid-burst." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4884.yml b/html/changelogs/AutoChangeLog-pr-4884.yml new file mode 100644 index 000000000000..78950c4b43e9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4884.yml @@ -0,0 +1,4 @@ +author: "Releasethesea" +delete-after: True +changes: + - rscadd: "Adds Colonial Space Grunts to rec vend aswell as several pens and Dice for playing the game." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4890.yml b/html/changelogs/AutoChangeLog-pr-4890.yml new file mode 100644 index 000000000000..a97e5129371c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4890.yml @@ -0,0 +1,4 @@ +author: "Birdtalon" +delete-after: True +changes: + - rscadd: "Observer with Security HUD enabled can examine and read security records." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4891.yml b/html/changelogs/AutoChangeLog-pr-4891.yml new file mode 100644 index 000000000000..171d7447fa24 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4891.yml @@ -0,0 +1,4 @@ +author: "Birdtalon" +delete-after: True +changes: + - rscadd: "Toggle HUD button to ghost UI" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4893.yml b/html/changelogs/AutoChangeLog-pr-4893.yml new file mode 100644 index 000000000000..b07b3b6f66d3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4893.yml @@ -0,0 +1,4 @@ +author: "Birdtalon" +delete-after: True +changes: + - code_imp: "Replaces burrow var from Xenomorph with burrowed trait" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4894.yml b/html/changelogs/AutoChangeLog-pr-4894.yml new file mode 100644 index 000000000000..c55c2cdc4086 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4894.yml @@ -0,0 +1,4 @@ +author: "BeagleGaming1" +delete-after: True +changes: + - rscdel: "Removes icon baking on surfaces (primarily seen on tables)" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4897.yml b/html/changelogs/AutoChangeLog-pr-4897.yml new file mode 100644 index 000000000000..2afee7c29f7f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4897.yml @@ -0,0 +1,5 @@ +author: "Birdtalon" +delete-after: True +changes: + - bugfix: "Boiler acid shroud now works on hotkey 5" + - code_imp: "Replaces single letter vars and removes unused code for boiler." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4899.yml b/html/changelogs/AutoChangeLog-pr-4899.yml new file mode 100644 index 000000000000..3fbcc6ec0be8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4899.yml @@ -0,0 +1,4 @@ +author: "Birdtalon" +delete-after: True +changes: + - code_imp: "Starts refactoring some vars on xenomorph class" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4906.yml b/html/changelogs/AutoChangeLog-pr-4906.yml new file mode 100644 index 000000000000..4b058bcd6a76 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4906.yml @@ -0,0 +1,4 @@ +author: "SpartanBobby" +delete-after: True +changes: + - maptweak: "fixes broken sidewalk on bigred" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4910.yml b/html/changelogs/AutoChangeLog-pr-4910.yml new file mode 100644 index 000000000000..dbc366c56510 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4910.yml @@ -0,0 +1,4 @@ +author: "Ediblebomb" +delete-after: True +changes: + - qol: "Changed \"Subject is brain-dead.\" to \"Subject has taken extreme amounts of brain damage.\" when scanning somebody with 100 brain damage." \ No newline at end of file diff --git a/html/changelogs/archive/2023-11.yml b/html/changelogs/archive/2023-11.yml index 728ad07e8a98..f72503ae13eb 100644 --- a/html/changelogs/archive/2023-11.yml +++ b/html/changelogs/archive/2023-11.yml @@ -152,3 +152,27 @@ - rscadd: You can now label crate with package wrap, which will also be shown during overwatch supply drop alert. - mapadd: Added more packaging wrap to Requisitions. +2023-11-10: + Drathek: + - bugfix: Fixed fax template images in CDN mode + - bugfix: Fixed imaginary friend merge ability preventing hearing if ghost ears + are set to only nearby. + - bugfix: Fixed imaginary friend hide ability not updating its icons. + MorrowWolf: + - bugfix: Fixed Pumpkins appearing past season. + MrDas: + - bugfix: You can no longer see through solid rear drop ship doors. + - code_imp: Moved filler turf logic from almayer airlocks to its parent door. + SpartanBobby: + - maptweak: fixes conflicting tiles on USS Almayer squad bunks + - maptweak: updates multiple bedrooms and closet area detailing +2023-11-11: + QuickLode: + - rscadd: SUPERLIGHT armor category. + - balance: M4 Synthetic Armor slows by 10% to justify having 1 extra storage slot. + - spellcheck: Clarifies M4 Synthetic Armor description that it does not have any + armor whatsoever. +2023-11-12: + SpartanBobby Tophatpenguin: + - maptweak: redetails a room on the upper deck of the USS Almayer, places a few + L42As in this room diff --git a/html/images/ColonialSpaceGruntsEZ.png b/html/images/ColonialSpaceGruntsEZ.png new file mode 100644 index 000000000000..7db4ca5ba768 Binary files /dev/null and b/html/images/ColonialSpaceGruntsEZ.png differ diff --git a/icons/mob/screen_ghost.dmi b/icons/mob/screen_ghost.dmi index 195cf31e3689..3fedae4c80b1 100644 Binary files a/icons/mob/screen_ghost.dmi and b/icons/mob/screen_ghost.dmi differ diff --git a/icons/obj/items/bedrolls.dmi b/icons/obj/items/bedrolls.dmi new file mode 100644 index 000000000000..c36e07002a3d Binary files /dev/null and b/icons/obj/items/bedrolls.dmi differ diff --git a/maps/map_files/BigRed/standalone/crashlanding-offices.dmm b/maps/map_files/BigRed/standalone/crashlanding-offices.dmm index 652b4df3bdd3..e0c625805375 100644 --- a/maps/map_files/BigRed/standalone/crashlanding-offices.dmm +++ b/maps/map_files/BigRed/standalone/crashlanding-offices.dmm @@ -23,8 +23,9 @@ }, /area/bigredv2/outside/c) "ag" = ( -/turf/open/mars_cave{ - icon_state = "mars_dirt_4" +/turf/open/floor{ + dir = 8; + icon_state = "asteroidwarning" }, /area/bigredv2/outside/e) "ah" = ( @@ -38,13 +39,12 @@ /area/bigredv2/outside/e) "aj" = ( /turf/open/mars{ - icon_state = "mars_dirt_11" + icon_state = "mars_dirt_12" }, /area/bigredv2/outside/e) "ak" = ( -/turf/open/floor{ - dir = 8; - icon_state = "asteroidwarning" +/turf/open/mars{ + icon_state = "mars_dirt_11" }, /area/bigredv2/outside/e) "al" = ( @@ -54,8 +54,8 @@ }, /area/bigredv2/outside/e) "am" = ( -/turf/open/mars{ - icon_state = "mars_dirt_12" +/turf/open/mars_cave{ + icon_state = "mars_dirt_4" }, /area/bigredv2/outside/e) "an" = ( @@ -2147,8 +2147,8 @@ Ha dq "} (20,1,1) = {" -aj -ag +ai +at aA dX dX @@ -2175,7 +2175,7 @@ PR "} (21,1,1) = {" ak -ak +am aA aG dX @@ -2201,9 +2201,9 @@ Ha PR "} (22,1,1) = {" -al -al -aA +ag +ag +aG aG dX ap @@ -2228,9 +2228,9 @@ Ha PR "} (23,1,1) = {" -am -ag -aA +al +al +aG aG aG ap @@ -2255,8 +2255,8 @@ Ha dq "} (24,1,1) = {" -ai -at +aj +am aA aG aG diff --git a/maps/map_files/LV624/hydro/30.destroyed.dmm b/maps/map_files/LV624/hydro/30.destroyed.dmm index 84e9ebb5c814..09eb12287a58 100644 --- a/maps/map_files/LV624/hydro/30.destroyed.dmm +++ b/maps/map_files/LV624/hydro/30.destroyed.dmm @@ -164,8 +164,8 @@ /area/lv624/lazarus/hydroponics) "mK" = ( /obj/item/clothing/suit/storage/marine/veteran/pmc/light/synth{ - desc = "A modification of the standard Armat Systems M3 armor. This variant was designed for PMC Support Units in the field, offering protection and storage while not restricting movement. This set seems damaged..."; - name = "damaged M4 synthetic PMC armor"; + desc = "A serious modification of the standard Armat Systems M3 armor. This variant was designed for PMC Support Units in the field, with every armor insert removed. It's designed with the idea of a high speed lifesaver in mind. This set seems damaged..."; + name = "damaged M4 Synthetic PMC armor"; pixel_x = -5; pixel_y = -5 }, diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index a37cd9d07230..e858c128f1d7 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -790,7 +790,7 @@ "acE" = ( /obj/structure/closet/emcloset, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "cargo" }, /area/almayer/lifeboat_pumps/north2) "acF" = ( @@ -918,7 +918,7 @@ "acT" = ( /obj/structure/closet/firecloset, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "cargo" }, /area/almayer/lifeboat_pumps/north2) "acU" = ( @@ -1177,11 +1177,14 @@ }, /area/almayer/lifeboat_pumps/north1) "adQ" = ( -/obj/structure/closet/emcloset, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_y = 1 + }, /turf/open/floor/almayer{ icon_state = "mono" }, -/area/almayer/lifeboat_pumps/north1) +/area/almayer/lifeboat_pumps/north2) "adR" = ( /obj/structure/machinery/door/airlock/almayer/generic{ access_modified = 1; @@ -1211,11 +1214,12 @@ }, /area/almayer/hallways/aft_hallway) "adZ" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/almayer{ - icon_state = "mono" +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 }, -/area/almayer/lifeboat_pumps/north1) +/turf/open/floor/almayer, +/area/almayer/lifeboat_pumps/north2) "aea" = ( /obj/structure/machinery/light{ dir = 1 @@ -1580,6 +1584,10 @@ density = 0; pixel_y = 17 }, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, /turf/open/floor/almayer, /area/almayer/hull/upper_hull/u_f_s) "afd" = ( @@ -3060,6 +3068,10 @@ /obj/structure/machinery/light{ dir = 1 }, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, /turf/open/floor/almayer{ icon_state = "dark_sterile" }, @@ -3336,21 +3348,22 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/living/starboard_garden) "alb" = ( +/obj/structure/toilet{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/living/commandbunks) +"alc" = ( /obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 + dir = 4; + pixel_x = 11 }, /obj/structure/mirror{ - pixel_x = -28 - }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" + pixel_x = 28 }, -/area/almayer/living/commandbunks) -"alc" = ( -/obj/structure/toilet{ - dir = 8 +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 }, /turf/open/floor/almayer{ icon_state = "dark_sterile" @@ -6144,7 +6157,7 @@ /obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "cargo" }, /area/almayer/command/lifeboat) "atZ" = ( @@ -8939,6 +8952,14 @@ icon_state = "orangecorner" }, /area/almayer/command/telecomms) +"aDc" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + icon_state = "red" + }, +/area/almayer/command/lifeboat) "aDe" = ( /obj/structure/machinery/light{ dir = 8 @@ -11229,7 +11250,7 @@ /obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "cargo" }, /area/almayer/command/lifeboat) "aNi" = ( @@ -12638,11 +12659,9 @@ /area/almayer/living/basketball) "aTV" = ( /obj/structure/toilet{ - dir = 1 - }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" + dir = 4 }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/cells) "aTW" = ( /obj/structure/bed/chair{ @@ -13182,9 +13201,7 @@ pixel_x = -6; pixel_y = -10 }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/living/captain_mess) "aWD" = ( /obj/structure/window/framed/almayer, @@ -14800,6 +14817,16 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_m_p) +"bfe" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "orange" + }, +/area/almayer/engineering/upper_engineering/port) "bfl" = ( /turf/open/floor/almayer{ dir = 5; @@ -19931,6 +19958,16 @@ /obj/docking_port/stationary/marine_dropship/almayer_hangar_1, /turf/open/floor/plating, /area/almayer/hallways/hangar) +"bGa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/toolbox/mechanical{ + pixel_x = 4; + pixel_y = -3 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "bGb" = ( /turf/closed/wall/almayer, /area/almayer/hallways/port_hallway) @@ -20549,8 +20586,11 @@ unacidable = 1; unslashable = 1 }, +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "dark_sterile" }, /area/almayer/living/auxiliary_officer_office) "bII" = ( @@ -22639,9 +22679,7 @@ /obj/structure/machinery/light{ dir = 8 }, -/turf/open/floor/almayer/no_build{ - icon_state = "ai_floors" - }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/command/airoom) "bRr" = ( /obj/structure/machinery/fuelcell_recycler, @@ -23386,6 +23424,10 @@ pixel_x = -7; pixel_y = 12 }, +/obj/item/weapon/gun/rifle/l42a{ + pixel_x = 17; + pixel_y = 6 + }, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -26493,41 +26535,14 @@ }, /area/almayer/hull/upper_hull/u_a_s) "ckE" = ( -/obj/structure/window/reinforced{ - dir = 4; - pixel_x = -2; - pixel_y = 4 - }, -/obj/structure/window/reinforced{ - dir = 8; - layer = 3.3; - pixel_y = 4 - }, -/obj/structure/bed{ - can_buckle = 0 - }, -/obj/structure/bed{ - buckling_y = 13; - layer = 3.5; - pixel_y = 13 - }, -/obj/item/bedsheet/yellow{ - layer = 3.2 - }, -/obj/item/bedsheet/yellow{ - pixel_y = 13 - }, -/obj/structure/sign/safety/bathunisex{ - pixel_x = -16; - pixel_y = 8 +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 }, -/obj/item/toy/plush/barricade, -/obj{ - name = "---Merge conflict marker---" +/turf/open/floor/almayer{ + icon_state = "mono" }, -/obj/structure/pipes/standard/simple/hidden/supply, -/turf/open/floor/almayer, -/area/almayer/living/briefing) +/area/almayer/lifeboat_pumps/north1) "ckI" = ( /obj/structure/disposalpipe/segment, /obj/item/device/radio/intercom{ @@ -27869,8 +27884,8 @@ /area/almayer/shipboard/brig/execution) "czG" = ( /obj/structure/machinery/recharge_station, -/turf/open/floor/almayer/no_build{ - icon_state = "ai_floors" +/turf/open/floor/almayer{ + icon_state = "cargo" }, /area/almayer/command/airoom) "czJ" = ( @@ -29652,6 +29667,14 @@ icon_state = "orange" }, /area/almayer/engineering/engineering_workshop/hangar) +"djN" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/engineering/upper_engineering/port) "djQ" = ( /obj/item/device/radio/intercom{ freerange = 1; @@ -29740,9 +29763,7 @@ dir = 2 }, /obj/item/clothing/mask/cigarette/weed, -/turf/open/floor/prison{ - icon_state = "kitchen" - }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/engineering/upper_engineering/port) "dll" = ( /obj/structure/surface/table/almayer, @@ -29867,6 +29888,10 @@ /obj/structure/machinery/camera/autoname/almayer{ name = "ship-grade camera" }, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 + }, /turf/open/floor/almayer{ dir = 1; icon_state = "red" @@ -30164,6 +30189,12 @@ icon_state = "plate" }, /area/almayer/shipboard/brig/cryo) +"dtv" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out" + }, +/turf/open/floor/almayer, +/area/almayer/command/lifeboat) "dtH" = ( /obj/structure/bed/chair/comfy{ dir = 8 @@ -31327,6 +31358,13 @@ /area/almayer/shipboard/brig/main_office) "dSn" = ( /obj/structure/pipes/standard/simple/hidden/supply, +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, /turf/open/floor/almayer{ icon_state = "dark_sterile" }, @@ -31684,6 +31722,17 @@ icon_state = "orange" }, /area/almayer/engineering/upper_engineering) +"dZN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/guncabinet, +/obj/item/weapon/gun/rifle/l42a, +/obj/item/weapon/gun/rifle/l42a{ + pixel_y = 6 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "eaf" = ( /obj/structure/machinery/cm_vending/clothing/military_police{ density = 0; @@ -31733,7 +31782,7 @@ "eaX" = ( /obj/structure/closet/firecloset, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "cargo" }, /area/almayer/engineering/upper_engineering/starboard) "ebd" = ( @@ -31904,13 +31953,19 @@ pixel_x = 8; pixel_y = -32 }, +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 + }, /turf/open/floor/almayer{ icon_state = "test_floor4" }, /area/almayer/command/lifeboat) "edM" = ( /obj/structure/closet/firecloset, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, /area/almayer/hallways/vehiclehangar) "eed" = ( /turf/open/floor/almayer{ @@ -32202,15 +32257,13 @@ }, /area/almayer/medical/containment/cell) "eiH" = ( -/obj/structure/sink{ - pixel_y = 24 - }, /obj/structure/machinery/light{ dir = 8 }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" +/obj/structure/toilet{ + dir = 4 }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/cells) "eiK" = ( /obj/structure/bed/chair{ @@ -32844,7 +32897,7 @@ "euY" = ( /obj/structure/closet/firecloset, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "cargo" }, /area/almayer/engineering/upper_engineering/port) "eva" = ( @@ -34792,9 +34845,7 @@ /obj/structure/machinery/door/window/tinted{ dir = 1 }, -/turf/open/floor/prison{ - icon_state = "kitchen" - }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/engineering/upper_engineering/port) "fnZ" = ( /obj/structure/machinery/portable_atmospherics/canister/air, @@ -34916,6 +34967,12 @@ }, /turf/open/floor/wood/ship, /area/almayer/command/corporateliason) +"fqg" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer, +/area/almayer/lifeboat_pumps/south2) "fqu" = ( /obj/structure/largecrate/random/barrel/red, /turf/open/floor/almayer, @@ -36351,6 +36408,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/almayer, /area/almayer/hallways/aft_hallway) +"fXM" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer, +/area/almayer/command/lifeboat) "fXN" = ( /obj/effect/landmark/start/marine/delta, /obj/effect/landmark/late_join/delta, @@ -36837,19 +36900,12 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_m_p) "ghX" = ( -/obj/structure/window/reinforced/tinted{ - pixel_y = -8 - }, /obj/structure/machinery/shower{ dir = 8 }, -/obj/structure/machinery/door/window/tinted{ - dir = 8 - }, /obj/item/toy/inflatable_duck, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" - }, +/obj/structure/window/reinforced, +/turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/cells) "gio" = ( /obj/structure/closet/emcloset, @@ -37462,6 +37518,9 @@ /area/almayer/living/basketball) "gwu" = ( /obj/structure/machinery/light, +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out" + }, /turf/open/floor/almayer{ icon_state = "red" }, @@ -37881,6 +37940,10 @@ /obj/structure/pipes/standard/simple/hidden/supply{ dir = 10 }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 2 + }, /turf/open/floor/almayer, /area/almayer/hull/upper_hull/u_f_p) "gDW" = ( @@ -37937,12 +38000,12 @@ }, /obj/structure/surface/table/woodentable/fancy, /obj/structure/machinery/door_control{ + id = "cl_evac"; + name = "Evac Pod Door Control"; + normaldoorcontrol = 1; pixel_x = -5; pixel_y = 2; - req_access_txt = "200"; - name = "Evac Pod Door Control"; - id = "cl_evac"; - normaldoorcontrol = 1 + req_access_txt = "200" }, /turf/open/floor/carpet, /area/almayer/command/corporateliason) @@ -39215,6 +39278,10 @@ dir = 1; name = "ship-grade camera" }, +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 + }, /turf/open/floor/almayer{ icon_state = "red" }, @@ -39377,6 +39444,13 @@ }, /turf/open/floor/almayer, /area/almayer/shipboard/brig/cic_hallway) +"hiN" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer, +/area/almayer/command/lifeboat) "hiQ" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 8 @@ -39599,6 +39673,18 @@ icon_state = "sterile_green" }, /area/almayer/medical/hydroponics) +"hnE" = ( +/obj/structure/closet/secure_closet/guncabinet, +/obj/item/weapon/gun/smg/m39{ + pixel_y = 6 + }, +/obj/item/weapon/gun/smg/m39{ + pixel_y = -6 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "hnV" = ( /obj/structure/machinery/light, /turf/open/floor/almayer, @@ -41117,6 +41203,12 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_s) +"hWX" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/hull/upper_hull/u_f_p) "hXb" = ( /turf/open/floor/almayer{ dir = 1; @@ -41154,6 +41246,15 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/almayer, /area/almayer/shipboard/brig/cic_hallway) +"hXD" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 + }, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/south1) "hXS" = ( /obj/structure/sign/safety/water{ pixel_x = 8; @@ -42206,6 +42307,16 @@ }, /turf/open/floor/plating, /area/almayer/hull/lower_hull/l_f_p) +"iuw" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + dir = 9; + icon_state = "orange" + }, +/area/almayer/engineering/upper_engineering/port) "iuy" = ( /obj/structure/window/framed/almayer, /obj/structure/machinery/door/firedoor/border_only/almayer{ @@ -42240,7 +42351,7 @@ name = "ship-grade camera" }, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "cargo" }, /area/almayer/hull/upper_hull/u_f_s) "ivf" = ( @@ -42624,6 +42735,15 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_a_s) +"iDK" = ( +/obj/structure/bed/chair{ + dir = 8; + pixel_y = 3 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "iDN" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 1 @@ -43792,6 +43912,10 @@ /obj/structure/machinery/light{ dir = 8 }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, /turf/open/floor/almayer{ dir = 9; icon_state = "red" @@ -44033,8 +44157,12 @@ /obj/structure/mirror{ pixel_x = 29 }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, /turf/open/floor/almayer{ - icon_state = "sterile" + icon_state = "dark_sterile" }, /area/almayer/living/captain_mess) "jgw" = ( @@ -44479,8 +44607,8 @@ pixel_y = 5 }, /obj/item/folder/black{ - pixel_y = -3; - pixel_x = 7 + pixel_x = 7; + pixel_y = -3 }, /turf/open/floor/almayer{ icon_state = "plate" @@ -45843,11 +45971,25 @@ icon_state = "plate" }, /area/almayer/living/offices) +"jWC" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "red" + }, +/area/almayer/command/lifeboat) "jWH" = ( /obj/structure/machinery/power/apc/almayer/hardened{ cell_type = /obj/item/cell/hyper; dir = 1 }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_y = 1 + }, /turf/open/floor/almayer{ icon_state = "mono" }, @@ -45883,7 +46025,7 @@ "jXW" = ( /obj/structure/closet/firecloset, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "cargo" }, /area/almayer/command/lifeboat) "jXY" = ( @@ -49827,6 +49969,13 @@ icon_state = "test_floor4" }, /area/almayer/hallways/starboard_hallway) +"lDj" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 2 + }, +/turf/open/floor/almayer, +/area/almayer/hull/upper_hull/u_f_p) "lDJ" = ( /obj/structure/sign/safety/distribution_pipes{ pixel_x = -17 @@ -50457,6 +50606,13 @@ icon_state = "silver" }, /area/almayer/command/securestorage) +"lPW" = ( +/obj/structure/surface/table/almayer, +/obj/item/weapon/gun/rifle/m41a, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "lQj" = ( /obj/structure/machinery/door_control{ id = "InnerShutter"; @@ -50856,6 +51012,16 @@ icon_state = "greencorner" }, /area/almayer/hallways/aft_hallway) +"mcl" = ( +/obj/structure/sign/safety/ladder{ + pixel_x = -16 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/turf/open/floor/almayer, +/area/almayer/hallways/vehiclehangar) "mcL" = ( /obj/structure/machinery/vending/snack, /obj/structure/sign/safety/maint{ @@ -51722,6 +51888,15 @@ icon_state = "bluecorner" }, /area/almayer/squads/delta) +"mvH" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out"; + pixel_x = 1 + }, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/south2) "mvI" = ( /obj/structure/machinery/camera/autoname/almayer{ dir = 4; @@ -51858,6 +52033,20 @@ icon_state = "emerald" }, /area/almayer/squads/charlie) +"mzl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/largecrate/supply/weapons/m39{ + pixel_x = 2 + }, +/obj/structure/largecrate/supply/weapons/m41a{ + layer = 3.1; + pixel_x = 6; + pixel_y = 17 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "mzo" = ( /turf/closed/wall/almayer, /area/almayer/hull/lower_hull/l_f_p) @@ -52008,6 +52197,10 @@ }, /turf/open/floor/almayer, /area/almayer/living/chapel) +"mCe" = ( +/obj/structure/largecrate/supply/weapons/pistols, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_m_s) "mCo" = ( /obj/structure/window/framed/almayer, /obj/structure/machinery/door/firedoor/border_only/almayer{ @@ -52236,7 +52429,7 @@ "mIA" = ( /obj/structure/closet/firecloset, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "cargo" }, /area/almayer/lifeboat_pumps/south2) "mIB" = ( @@ -52742,6 +52935,13 @@ icon_state = "test_floor4" }, /area/almayer/hallways/starboard_hallway) +"mRU" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/turf/open/floor/almayer, +/area/almayer/hull/upper_hull/u_f_p) "mRW" = ( /turf/open/floor/almayer/research/containment/corner1, /area/almayer/medical/containment/cell/cl) @@ -53157,8 +53357,11 @@ /obj/structure/machinery/light/small{ dir = 4 }, -/turf/open/floor/prison{ - icon_state = "kitchen" +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" }, /area/almayer/engineering/upper_engineering/port) "naR" = ( @@ -53723,10 +53926,11 @@ }, /area/almayer/command/securestorage) "nna" = ( +/obj/structure/closet/firecloset, /turf/open/floor/almayer{ - icon_state = "dark_sterile" + icon_state = "cargo" }, -/area/almayer/living/port_emb) +/area/almayer/hull/upper_hull/u_f_s) "nnc" = ( /obj/structure/largecrate/random/case/double, /turf/open/floor/almayer{ @@ -53855,21 +54059,12 @@ }, /area/almayer/medical/containment) "npB" = ( -/obj/structure/sink{ - dir = 1; - pixel_y = -10 - }, -/obj/structure/pipes/vents/scrubber{ - dir = 1 - }, -/obj/structure/surface/rack{ - density = 0; - pixel_x = 26 - }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 }, -/area/almayer/living/port_emb) +/turf/open/floor/almayer, +/area/almayer/hull/upper_hull/u_f_s) "nqx" = ( /obj/structure/pipes/standard/manifold/hidden/supply, /turf/open/floor/plating/plating_catwalk, @@ -54359,6 +54554,9 @@ /obj/structure/machinery/light{ dir = 8 }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, /turf/open/floor/almayer{ dir = 10; icon_state = "red" @@ -54946,51 +55144,15 @@ }, /area/almayer/hull/lower_hull/l_m_s) "nMM" = ( -/obj/item/bedsheet/blue{ - layer = 3.2 - }, -/obj/item/bedsheet/blue{ - pixel_y = 13 - }, -/obj/item/toy/plush/therapy/red{ - desc = "A USCM approved plush doll. It's not soft and hardly comforting!"; - force = 15; - layer = 4.1; - name = "Sergeant Huggs"; - pixel_y = 15; - throwforce = 15 - }, -/obj/item/clothing/head/cmcap{ - layer = 4.1; - pixel_x = -1; - pixel_y = 22 - }, -/obj/structure/window/reinforced{ - dir = 4; - pixel_x = -2; - pixel_y = 4 - }, -/obj/structure/window/reinforced{ - dir = 8; - layer = 3.3; - pixel_y = 4 - }, -/obj/structure/bed{ - can_buckle = 0 - }, -/obj/structure/bed{ - buckling_y = 13; - layer = 3.5; - pixel_y = 13 - }, -/obj{ - name = "---Merge conflict marker---" +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 }, -/obj/structure/bed/chair/comfy/charlie, -/turf/open/floor/almayer{ - icon_state = "emeraldfull" +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_y = 2 }, -/area/almayer/living/briefing) +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_f_s) "nMV" = ( /obj/structure/machinery/cm_vending/sorted/medical/wall_med{ pixel_y = 25 @@ -56072,12 +56234,16 @@ }, /area/almayer/shipboard/brig/execution) "olk" = ( -/obj/structure/machinery/door/airlock/almayer/generic{ - name = "\improper Bathroom" - }, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_y = 2 + }, +/obj/structure/machinery/door/airlock/almayer/generic{ + name = "\improper Bathroom" + }, /turf/open/floor/almayer{ icon_state = "test_floor4" }, @@ -56572,6 +56738,36 @@ icon_state = "ai_floors" }, /area/almayer/command/airoom) +"ouu" = ( +/obj/structure/surface/rack, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0; + pixel_x = -6; + pixel_y = 7 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0; + pixel_x = -6; + pixel_y = -3 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0; + pixel_x = 5; + pixel_y = 9 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0; + pixel_x = 5; + pixel_y = -3 + }, +/obj/structure/noticeboard{ + desc = "The note is haphazardly attached to the cork board by what looks like a bent firing pin. 'The order has come in to perform end of life service checks on all L42A service rifles, any that are defective are to be dis-assembled and packed into a crate and sent to to the cargo hold. L42A service rifles that are in working order after servicing, are to be locked in secure cabinets ready to be off-loaded at Chinook. Scheduled end of life service for the L42A - Complete'"; + pixel_y = 29 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "ouB" = ( /obj/structure/bed/sofa/vert/grey/bot, /turf/open/floor/almayer, @@ -57202,6 +57398,15 @@ "oIB" = ( /turf/closed/wall/almayer, /area/almayer/command/combat_correspondent) +"oIY" = ( +/obj/structure/machinery/cryopod/right{ + layer = 3.1; + pixel_y = 13 + }, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/command/airoom) "oJp" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 1 @@ -58152,8 +58357,11 @@ /obj/structure/machinery/light/small{ dir = 8 }, -/turf/open/floor/prison{ - icon_state = "kitchen" +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" }, /area/almayer/engineering/upper_engineering/port) "pfH" = ( @@ -59359,6 +59567,12 @@ icon_state = "dark_sterile" }, /area/almayer/medical/lower_medical_medbay) +"pLJ" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_m_s) "pLO" = ( /obj/structure/machinery/door/poddoor/shutters/almayer{ dir = 4; @@ -59438,6 +59652,14 @@ /obj/structure/largecrate/random/case/double, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_m_p) +"pNK" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/living/auxiliary_officer_office) "pNM" = ( /obj/structure/platform{ dir = 4 @@ -59546,6 +59768,10 @@ /area/almayer/hull/upper_hull/u_a_s) "pPF" = ( /obj/structure/machinery/power/apc/almayer/hardened, +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 + }, /turf/open/floor/almayer{ icon_state = "mono" }, @@ -59579,6 +59805,9 @@ pixel_x = 23; specialfunctions = 4 }, +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, /turf/open/floor/almayer{ icon_state = "dark_sterile" }, @@ -59766,6 +59995,10 @@ /area/almayer/command/computerlab) "pUe" = ( /obj/structure/machinery/power/apc/almayer/hardened, +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out"; + pixel_x = 1 + }, /turf/open/floor/almayer{ icon_state = "mono" }, @@ -59793,6 +60026,15 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_m_p) +"pUl" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hallways/vehiclehangar) "pUp" = ( /obj/item/device/radio/intercom{ freerange = 1; @@ -60654,6 +60896,15 @@ /obj/effect/landmark/late_join/charlie, /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/charlie) +"qkj" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/lifeboat) "qkn" = ( /obj/structure/sign/safety/maint{ pixel_x = -17 @@ -60949,8 +61200,10 @@ /area/almayer/medical/chemistry) "qpU" = ( /obj/structure/flora/pottedplant{ - icon_state = "pottedplant_22" + icon_state = "pottedplant_22"; + pixel_y = 12 }, +/obj/structure/surface/table/almayer, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -61073,7 +61326,7 @@ "qtR" = ( /obj/structure/closet/emcloset, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "cargo" }, /area/almayer/command/lifeboat) "qtS" = ( @@ -61346,6 +61599,13 @@ icon_state = "plating" }, /area/almayer/hallways/vehiclehangar) +"qyH" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_y = 1 + }, +/turf/open/floor/almayer, +/area/almayer/command/lifeboat) "qyJ" = ( /obj/structure/closet/secure_closet/guncabinet/red/cic_armory_shotgun, /turf/open/floor/almayer{ @@ -61454,16 +61714,13 @@ /turf/open/floor/almayer, /area/almayer/living/briefing) "qCg" = ( -/obj/structure/pipes/vents/pump, /obj/structure/mirror{ pixel_y = 32 }, /obj/structure/sink{ pixel_y = 24 }, -/turf/open/floor/prison{ - icon_state = "kitchen" - }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/engineering/upper_engineering/port) "qCi" = ( /obj/structure/pipes/standard/simple/hidden/supply{ @@ -62126,6 +62383,16 @@ icon_state = "mono" }, /area/almayer/lifeboat_pumps/south1) +"qQL" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "orange" + }, +/area/almayer/engineering/upper_engineering/port) "qQM" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -63483,8 +63750,13 @@ /turf/open/floor/almayer, /area/almayer/command/computerlab) "rsW" = ( -/turf/open/floor/prison{ - icon_state = "kitchen" +/obj/structure/pipes/vents/pump, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" }, /area/almayer/engineering/upper_engineering/port) "rsY" = ( @@ -63685,9 +63957,7 @@ "rzf" = ( /obj/effect/landmark/late_join/working_joe, /obj/effect/landmark/start/working_joe, -/turf/open/floor/almayer/no_build{ - icon_state = "ai_floors" - }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/command/airoom) "rzj" = ( /obj/structure/pipes/standard/simple/hidden/supply, @@ -63731,15 +64001,11 @@ }, /area/almayer/living/briefing) "rAv" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/structure/machinery/door/window/tinted{ +/obj/structure/machinery/shower{ dir = 8 }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" - }, +/obj/structure/window/reinforced, +/turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/cells) "rAx" = ( /obj/structure/disposalpipe/junction{ @@ -64710,11 +64976,21 @@ /area/almayer/command/computerlab) "rUB" = ( /obj/structure/pipes/vents/pump, +/obj/item/tool/soap, +/obj/effect/decal/cleanable/blood, +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/obj/structure/sink{ + pixel_y = 24 + }, /obj/structure/mirror{ pixel_y = 32 }, -/obj/item/tool/soap, -/obj/effect/decal/cleanable/blood, /turf/open/floor/almayer{ icon_state = "dark_sterile" }, @@ -64754,6 +65030,14 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/cic_hallway) +"rWF" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/lifeboat) "rWL" = ( /obj/structure/barricade/metal, /turf/open/floor/almayer{ @@ -64860,6 +65144,14 @@ icon_state = "plate" }, /area/almayer/living/offices/flight) +"rYZ" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_x = -1; + pixel_y = 2 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hallways/vehiclehangar) "rZz" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 5 @@ -65334,6 +65626,9 @@ /obj/structure/machinery/light/small{ dir = 8 }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, /turf/open/floor/almayer{ dir = 10; icon_state = "orange" @@ -65492,6 +65787,15 @@ /area/almayer/squads/delta) "soa" = ( /obj/structure/pipes/standard/simple/hidden/supply, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 1; + pixel_y = 1 + }, /obj/structure/machinery/door/airlock/almayer/generic{ dir = 1; name = "Bathroom" @@ -65823,11 +66127,15 @@ }, /area/almayer/command/lifeboat) "svp" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/almayer{ - icon_state = "mono" +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 }, -/area/almayer/lifeboat_pumps/south1) +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_f_s) "swn" = ( /obj/structure/window/framed/almayer, /obj/structure/machinery/door/firedoor/border_only/almayer{ @@ -66554,6 +66862,15 @@ icon_state = "orange" }, /area/almayer/squads/bravo) +"sNx" = ( +/obj/structure/machinery/door/airlock/almayer/secure/reinforced{ + name = "\improper Armourer's Workshop"; + req_access = null + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/hull/upper_hull/u_m_s) "sNz" = ( /obj/effect/decal/warning_stripes{ icon_state = "S" @@ -67228,6 +67545,19 @@ icon_state = "test_floor4" }, /area/almayer/medical/containment/cell) +"tbC" = ( +/obj/structure/closet/secure_closet/guncabinet, +/obj/item/weapon/gun/rifle/l42a{ + pixel_y = 6 + }, +/obj/item/weapon/gun/rifle/l42a, +/obj/item/weapon/gun/rifle/l42a{ + pixel_y = -6 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "tbD" = ( /obj/structure/ladder{ height = 2; @@ -67379,6 +67709,9 @@ /obj/structure/machinery/light/small{ dir = 1 }, +/obj/structure/largecrate/random/secure{ + pixel_x = -5 + }, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -67591,6 +67924,10 @@ pixel_x = -2; pixel_y = 8 }, +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 + }, /turf/open/floor/almayer{ dir = 6; icon_state = "orange" @@ -67999,6 +68336,10 @@ /obj/structure/machinery/light{ dir = 1 }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_y = 1 + }, /turf/open/floor/almayer{ dir = 1; icon_state = "red" @@ -68017,6 +68358,61 @@ /obj/structure/window/framed/almayer/hull, /turf/open/floor/plating, /area/almayer/lifeboat_pumps/south1) +"trg" = ( +/obj/structure/machinery/light/small{ + dir = 1 + }, +/obj/structure/closet/crate, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_m_s) "trB" = ( /turf/open/floor/almayer{ dir = 10; @@ -68450,7 +68846,7 @@ "tAh" = ( /obj/structure/closet/emcloset, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "cargo" }, /area/almayer/engineering/upper_engineering/port) "tAi" = ( @@ -68584,6 +68980,8 @@ /obj/item/tool/weldpack{ pixel_y = 15 }, +/obj/structure/surface/table/almayer, +/obj/item/clothing/head/welding, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -68858,6 +69256,11 @@ /obj/structure/pipes/standard/simple/hidden/supply{ dir = 1 }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 2; + pixel_y = 2 + }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_p) "tJp" = ( @@ -69124,7 +69527,9 @@ }, /area/almayer/hallways/port_hallway) "tQE" = ( -/obj/item/clothing/head/welding, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 13 + }, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -69233,8 +69638,8 @@ pixel_y = 12 }, /obj/item/paper_bin/uscm{ - pixel_y = 6; - pixel_x = 6 + pixel_x = 6; + pixel_y = 6 }, /obj/item/tool/pen{ pixel_x = 4; @@ -69414,6 +69819,13 @@ icon_state = "plate" }, /area/almayer/shipboard/brig/cryo) +"tXz" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hallways/vehiclehangar) "tXM" = ( /obj/structure/pipes/vents/pump{ dir = 8 @@ -69472,6 +69884,12 @@ icon_state = "dark_sterile" }, /area/almayer/medical/lower_medical_lobby) +"tYv" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/hull/upper_hull/u_f_p) "tYw" = ( /obj/effect/decal/medical_decals{ icon_state = "triagedecalbottomleft"; @@ -69650,7 +70068,10 @@ /area/almayer/command/computerlab) "uaZ" = ( /obj/structure/surface/table/almayer, -/obj/item/weapon/gun/rifle/m41a, +/obj/item/weapon/gun/rifle/l42a{ + pixel_y = 6 + }, +/obj/item/weapon/gun/rifle/l42a, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -70168,6 +70589,10 @@ cell_type = /obj/item/cell/hyper; dir = 1 }, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 + }, /turf/open/floor/almayer{ icon_state = "mono" }, @@ -70190,13 +70615,16 @@ }, /area/almayer/hull/lower_hull/l_f_p) "umY" = ( -/obj/structure/pipes/standard/manifold/hidden/supply{ - dir = 8 +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_x = -1; + pixel_y = 2 }, -/area/almayer/living/port_emb) +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_f_s) "unh" = ( /obj/structure/surface/table/almayer, /obj/item/storage/firstaid/o2, @@ -70637,11 +71065,13 @@ /turf/open/floor/wood/ship, /area/almayer/living/basketball) "uvk" = ( -/obj/structure/closet/firecloset, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "orange" }, -/area/almayer/lifeboat_pumps/south1) +/area/almayer/engineering/upper_engineering/starboard) "uvs" = ( /obj/structure/machinery/conveyor{ id = "lower_garbage" @@ -70721,6 +71151,9 @@ /obj/structure/surface/rack, /obj/item/stack/cable_coil, /obj/item/attachable/flashlight/grip, +/obj/item/ammo_box/magazine/l42a{ + pixel_y = 14 + }, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -71211,7 +71644,7 @@ "uGa" = ( /obj/structure/closet/emcloset, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "cargo" }, /area/almayer/lifeboat_pumps/south2) "uGc" = ( @@ -71264,7 +71697,11 @@ /area/almayer/hull/lower_hull/l_m_s) "uGz" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/largecrate/random/secure, +/obj/structure/closet/secure_closet/guncabinet, +/obj/item/weapon/gun/rifle/l42a{ + pixel_y = 6 + }, +/obj/item/weapon/gun/rifle/l42a, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -71896,9 +72333,7 @@ /obj/structure/machinery/door/window/tinted{ dir = 2 }, -/turf/open/floor/prison{ - icon_state = "kitchen" - }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/engineering/upper_engineering/port) "uVb" = ( /obj/structure/closet/toolcloset, @@ -72116,6 +72551,15 @@ }, /turf/closed/wall/almayer, /area/almayer/hallways/starboard_umbilical) +"vba" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/engineering/upper_engineering/port) "vbf" = ( /obj/structure/machinery/landinglight/ds2/delaytwo{ dir = 8 @@ -73783,6 +74227,16 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/almayer, /area/almayer/living/port_emb) +"vHl" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/command/lifeboat) "vHq" = ( /obj/item/device/assembly/mousetrap/armed, /obj/structure/pipes/standard/manifold/hidden/supply{ @@ -75653,6 +76107,13 @@ icon_state = "rasputin3" }, /area/almayer/powered/agent) +"wpj" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 2 + }, +/turf/open/floor/almayer, +/area/almayer/hull/upper_hull/u_f_p) "wpw" = ( /obj/structure/bed/chair/comfy/ares{ dir = 1 @@ -75816,6 +76277,8 @@ /area/almayer/squads/bravo) "wta" = ( /obj/structure/closet/crate, +/obj/item/ammo_box/magazine/l42a, +/obj/item/ammo_box/magazine/l42a, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -76085,9 +76548,7 @@ }, /obj/effect/landmark/late_join/working_joe, /obj/effect/landmark/start/working_joe, -/turf/open/floor/almayer/no_build{ - icon_state = "ai_floors" - }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/command/airoom) "wyO" = ( /obj/structure/largecrate/random/barrel/red, @@ -76578,6 +77039,15 @@ }, /turf/open/floor/plating, /area/almayer/medical/containment) +"wKS" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + dir = 6; + icon_state = "red" + }, +/area/almayer/command/lifeboat) "wLi" = ( /obj/structure/machinery/door_control/airlock{ id = "s_engi"; @@ -76624,6 +77094,11 @@ dir = 1 }, /area/almayer/medical/containment/cell) +"wLE" = ( +/obj/structure/surface/table/almayer, +/obj/item/tool/weldingtool, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_m_s) "wLG" = ( /obj/item/bedsheet/blue{ layer = 3.2 @@ -77206,6 +77681,14 @@ /obj/structure/machinery/light{ dir = 8 }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "S"; + pixel_y = -1 + }, /turf/open/floor/almayer{ icon_state = "dark_sterile" }, @@ -77780,10 +78263,14 @@ /area/almayer/living/grunt_rnr) "xjw" = ( /obj/structure/pipes/standard/simple/hidden/supply{ - dir = 9 + dir = 4 }, -/turf/open/floor/prison{ - icon_state = "kitchen" +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" }, /area/almayer/engineering/upper_engineering/port) "xjz" = ( @@ -78654,9 +79141,7 @@ /area/almayer/squads/req) "xAC" = ( /obj/structure/surface/rack, -/turf/open/floor/prison{ - icon_state = "kitchen" - }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/engineering/upper_engineering/port) "xAI" = ( /obj/structure/platform{ @@ -79058,7 +79543,7 @@ "xJn" = ( /obj/structure/closet/emcloset, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "cargo" }, /area/almayer/engineering/upper_engineering/starboard) "xJC" = ( @@ -80210,6 +80695,17 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_m_s) +"yfQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/guncabinet, +/obj/item/weapon/gun/rifle/m41a{ + pixel_y = 6 + }, +/obj/item/weapon/gun/rifle/m41a, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "yfS" = ( /obj/structure/window/framed/almayer, /obj/structure/machinery/door/firedoor/border_only/almayer{ @@ -80227,6 +80723,10 @@ }, /area/almayer/command/lifeboat) "ygs" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_y = 1 + }, /obj/structure/machinery/door/airlock/almayer/generic{ name = "\improper Bathroom" }, @@ -80380,6 +80880,16 @@ icon_state = "cargo" }, /area/almayer/hull/lower_hull/l_m_s) +"ykD" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "red" + }, +/area/almayer/command/lifeboat) "ykF" = ( /obj/structure/machinery/cm_vending/sorted/tech/tool_storage, /turf/open/floor/almayer{ @@ -80431,9 +80941,9 @@ }, /area/almayer/squads/delta) "ylg" = ( -/obj/structure/machinery/cryopod, -/turf/open/floor/almayer/no_build{ - icon_state = "ai_floors" +/obj/structure/machinery/cryopod/right, +/turf/open/floor/almayer{ + icon_state = "cargo" }, /area/almayer/command/airoom) "ylJ" = ( @@ -93408,7 +93918,7 @@ poR mGL pNp kcp -bTS +pNK bIA alU uDn @@ -93816,9 +94326,9 @@ bTS lxo qcy kcp -bAg edM -egq +edM +mcl bLt bXX bKh @@ -94019,9 +94529,9 @@ oQM aqI aqI kcp -bzA -bBB -bBB +pUl +tXz +rYZ bLu bBB bBB @@ -98812,7 +99322,7 @@ vCO vCO vCO jxB -gpe +wpj gDq tJo bGr @@ -99015,9 +99525,9 @@ wmT jhW mWD jxB -fGN -dtN -gpe +hWX +tYv +mRU xuB gpe xEF @@ -99178,7 +99688,7 @@ aad aai aai pCi -lFb +nMM avl avl agj @@ -99220,7 +99730,7 @@ aES aES aES aES -gpe +lDj uEv gpe xEF @@ -99380,8 +99890,8 @@ aaa aad ahE iuT -naf -lFb +nna +svp avl agj agj @@ -99583,8 +100093,8 @@ aaa aad ahE afc -avl -lFb +npB +umY avl agj yeo @@ -104448,8 +104958,8 @@ bdH bdH aaC abw -adQ -awW +aee +avd acW awW auK @@ -104507,8 +105017,8 @@ mlz sOy baw sgU -baw -svp +xVF +njD trb aaC bdH @@ -104651,8 +105161,8 @@ bdH aaa aaY abw -adZ -awW +aec +avd acW awW avc @@ -104710,8 +105220,8 @@ fDS iLd baw sgU -baw -uvk +xVF +dLz trb aaC bdH @@ -104855,7 +105365,7 @@ aaa aaY abs adq -add +ckE ajI add fsU @@ -104913,7 +105423,7 @@ qys gBW aJU tiW -aJU +hXD pgD tQV aaY @@ -115309,7 +115819,7 @@ kxd viu nsY iIP -nna +kxd dDt nsY xiz @@ -115512,8 +116022,8 @@ vHq vvY nsY pPV -umY -npB +bxC +jiU nsY glr mhl @@ -115932,7 +116442,7 @@ aLJ eBg dAO cEG -ckE +eBg dYX tBF lBz @@ -116573,7 +117083,7 @@ bJz bdg wLV wLV -nMM +wLV wLV wLV wNT @@ -117655,7 +118165,7 @@ abg caF aar aar -tiM +sNx aar aar ael @@ -117857,7 +118367,7 @@ bWs abg caF aar -nuY +tQE sTB uaZ bUA @@ -118060,9 +118570,9 @@ acO aJs cbN aar -sTB +mzl aap -aao +iDK vFb ael afH @@ -118466,10 +118976,10 @@ acP bUE qFQ aar -aao +ouu aap aao -sTB +yfQ ael afJ agY @@ -118669,10 +119179,10 @@ acG abx caF aar -aap +mCe aap aao -sTB +yfQ ael afK ahc @@ -119075,7 +119585,7 @@ acG abx caF aar -tiM +sNx aar aar aar @@ -119281,7 +119791,7 @@ aar aao aao uGz -uGz +dZN adO afM fpR @@ -119481,10 +119991,10 @@ jSY abx hTy aar -wFm -tQE +trg aao -sTB +aao +bGa adO afN ahh @@ -119684,10 +120194,10 @@ acP bUE qFQ aar -aap -aap +wLE +pLJ aao -fZF +tbC adO afO ahh @@ -119888,9 +120398,9 @@ abg ccf aar tDA -aao +lPW aap -fZF +hnE adO jkj ahh @@ -121500,7 +122010,7 @@ aag aag abh acx -aeC +adQ ajs aeC wXh @@ -121560,7 +122070,7 @@ eyG kpo vcE kUV -vcE +mvH rRq uOi aag @@ -121703,7 +122213,7 @@ aah aah abi acE -aeA +adZ ajk aeA asY @@ -121763,7 +122273,7 @@ deg wLu lJY xVS -lJY +fqg uGa uyC aah @@ -121906,7 +122416,7 @@ bdH bdH abi acT -aeA +adZ ajk aeA atp @@ -121966,7 +122476,7 @@ pfH wlF lJY xVS -lJY +fqg mIA uyC bdH @@ -130882,7 +131392,7 @@ cxo jWh uUV rsW -rsW +djN fnQ jWh lbB @@ -131084,7 +131594,7 @@ xct cxo jWh dkS -rsW +vba naQ fnQ jWh @@ -131267,7 +131777,7 @@ ptK dmQ psm psm -eky +qyH arV wZX eky @@ -131281,7 +131791,7 @@ aDQ eky wZX arV -eky +dtv vuv vuv cxo @@ -131470,7 +131980,7 @@ dmQ aeq psm aNe -eky +hiN arV wZX eky @@ -131484,7 +131994,7 @@ aHe eky wZX arV -eky +fXM aNe vuv ahb @@ -131673,7 +132183,7 @@ dmQ jXY psm atY -aMT +qkj aMT svl pzJ @@ -131687,7 +132197,7 @@ qDt pzJ sQO aMT -aMT +rWF atY vuv woM @@ -131876,7 +132386,7 @@ dmQ atD psm psm -aRp +vHl aRp jBX akS @@ -132306,7 +132816,7 @@ qMu qMu qMu euY -vME +iuw jHL wOK uIv @@ -132475,7 +132985,7 @@ cuC riJ kHY uhM -fcP +uvk xJn cuC aag @@ -132509,7 +133019,7 @@ aag aag bYn tAh -thV +bfe rDb qjV rID @@ -132712,7 +133222,7 @@ mNX qOk bYn bYn -tjj +qQL kHS rID bYn @@ -133909,7 +134419,7 @@ xVk aad jbq qtR -avu +jWC eky eky nJu @@ -133917,7 +134427,7 @@ aNl eky eky eky -aMU +aDc qtR jbq ajZ @@ -136142,7 +136652,7 @@ xVk aad jbq aNe -avu +jWC eky eky esT @@ -136150,7 +136660,7 @@ nYE orH eky eky -aMU +aDc aNe jbq ajZ @@ -136345,7 +136855,7 @@ xVk aad jbq atY -avu +jWC eky eky bAe @@ -136353,7 +136863,7 @@ aBG sGh eky eky -aMU +aDc atY jbq ajZ @@ -136548,7 +137058,7 @@ xVk aad aPw qpU -aqJ +ykD dqj eky xaS @@ -136556,7 +137066,7 @@ ejt mPf eky gUV -aqp +wKS qpU aPw ajZ @@ -139849,7 +140359,7 @@ lmz daz czG ylg -ylg +oIY daz daz daz