diff --git a/code/__DEFINES/cooldowns.dm b/code/__DEFINES/cooldowns.dm index 9368caf3c6e3..a90dd27b8baf 100644 --- a/code/__DEFINES/cooldowns.dm +++ b/code/__DEFINES/cooldowns.dm @@ -5,6 +5,8 @@ #define COOLDOWN_ITEM_HOOD_SOUND "item_hood_sound" #define COOLDOWN_LIGHT "cooldown_light" +#define COOLDOWN_PRINTER_ERROR "cooldown_printer_error" + //Define for ship alt #define COOLDOWN_ALTITUDE_CHANGE "altitude_change" diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index deee80c7a91d..a6a844254a02 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -25,3 +25,9 @@ #define NOTIFY_JOIN_XENO "join_xeno" #define NOTIFY_XENO_TACMAP "xeno_tacmap" #define NOTIFY_USCM_TACMAP "uscm_tacmap" + +#define INHERENT_HUD_MEDICAL "med" +#define INHERENT_HUD_SECURITY "sec" +#define INHERENT_HUD_NEW_PLAYER "new" + +#define HUD_MENTOR_SIGHT "New Player Markers" diff --git a/code/__DEFINES/human.dm b/code/__DEFINES/human.dm index 1fbeff73192b..1f7203fb310d 100644 --- a/code/__DEFINES/human.dm +++ b/code/__DEFINES/human.dm @@ -191,6 +191,7 @@ #define SYNTH_GEN_ONE "First Generation Synthetic" #define SYNTH_GEN_TWO "Second Generation Synthetic" #define SYNTH_GEN_THREE "Third Generation Synthetic" +#define SYNTH_K9 "Synthetic K9" #define PLAYER_SYNTHS list(SYNTH_GEN_ONE, SYNTH_GEN_TWO, SYNTH_GEN_THREE) #define SYNTH_TYPES list(SYNTH_COLONY, SYNTH_COLONY_GEN_ONE, SYNTH_COLONY_GEN_TWO, SYNTH_COMBAT, SYNTH_INFILTRATOR, SYNTH_WORKING_JOE, SYNTH_GEN_ONE, SYNTH_GEN_TWO, SYNTH_GEN_THREE) diff --git a/code/__DEFINES/job.dm b/code/__DEFINES/job.dm index 0173a55e2d17..2cea4038c03f 100644 --- a/code/__DEFINES/job.dm +++ b/code/__DEFINES/job.dm @@ -67,6 +67,7 @@ GLOBAL_LIST_INIT(job_squad_roles, JOB_SQUAD_ROLES_LIST) #define JOB_COMBAT_REPORTER "Combat Correspondent" #define JOB_MESS_SERGEANT "Mess Technician" #define JOB_SYNTH "Synthetic" +#define JOB_SYNTH_K9 "Synthetic K9" #define JOB_WORKING_JOE "Working Joe" #define JOB_CO "Commanding Officer" diff --git a/code/__DEFINES/mob_hud.dm b/code/__DEFINES/mob_hud.dm index 97cbe0281924..a39160cc2247 100644 --- a/code/__DEFINES/mob_hud.dm +++ b/code/__DEFINES/mob_hud.dm @@ -27,6 +27,7 @@ #define HUNTER_CLAN "25" //Displays a colored icon to represent ingame Hunter Clans #define HUNTER_HUD "26" //Displays various statuses on mobs for Hunters to identify targets #define HOLOCARD_HUD "27" //Displays the holocards set by medical personnel +#define NEW_PLAYER_HUD "29" //Makes it easy to see new players. //data HUD (medhud, sechud) defines #define MOB_HUD_SECURITY_BASIC 1 @@ -47,6 +48,7 @@ #define MOB_HUD_HUNTER 16 #define MOB_HUD_HUNTER_CLAN 17 #define MOB_HUD_EXECUTE 18 +#define MOB_HUD_NEW_PLAYER 19 //for SL/FTL/LZ targeting on locator huds #define TRACKER_SL "track_sl" diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 728610777a8b..a30d90524a6b 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -218,6 +218,7 @@ #define SPECIAL_BONEBREAK (1<<13) //species do not get their bonebreak chance modified by endurance #define NO_SHRAPNEL (1<<14) #define HAS_HARDCRIT (1<<15) +#define NO_OVERLAYS (1<<16) // Stop OnMob overlays from appearing on sprite //================================================= @@ -346,6 +347,7 @@ GLOBAL_LIST_INIT(default_xeno_onmob_icons, list( #define SPECIES_HUMAN "Human" #define SPECIES_YAUTJA "Yautja" #define SPECIES_SYNTHETIC "Synthetic" +#define SPECIES_SYNTHETIC_K9 "Synthetic K9" #define SPECIES_MONKEY "Monkey" #define SPECIES_ZOMBIE "Zombie" diff --git a/code/__DEFINES/mode.dm b/code/__DEFINES/mode.dm index 04c7993bd9f2..1933f3da25d9 100644 --- a/code/__DEFINES/mode.dm +++ b/code/__DEFINES/mode.dm @@ -295,6 +295,7 @@ DEFINE_BITFIELD(whitelist_status, list( #define FACTION_LIST_MARINE_WY list(FACTION_MARINE, FACTION_PMC, FACTION_WY_DEATHSQUAD, FACTION_WY) #define FACTION_LIST_MARINE_UPP list(FACTION_MARINE, FACTION_UPP) #define FACTION_LIST_MARINE_TWE list(FACTION_MARINE, FACTION_TWE) +#define FACTION_LIST_YAUTJA list(FACTION_YAUTJA) // Xenomorphs #define FACTION_PREDALIEN "Predalien" diff --git a/code/__DEFINES/paygrade_defs/marines.dm b/code/__DEFINES/paygrade_defs/marines.dm index 74b659630820..bb9b185f53dc 100644 --- a/code/__DEFINES/paygrade_defs/marines.dm +++ b/code/__DEFINES/paygrade_defs/marines.dm @@ -78,3 +78,6 @@ /// MO10S, Commandant of the Marine Corps #define PAY_SHORT_MO10S "MO10S" + +/// SYN_K9, Synthetic K9 +#define PAY_SHORT_SYN_K9 "K9" diff --git a/code/__DEFINES/pred.dm b/code/__DEFINES/pred.dm index a8bc1007d51e..4e43f376f154 100644 --- a/code/__DEFINES/pred.dm +++ b/code/__DEFINES/pred.dm @@ -9,6 +9,7 @@ #define PRED_YAUTJA_HALF_CAPE "yautja half-cape" #define PRED_YAUTJA_QUARTER_CAPE "yautja quarter-cape" #define PRED_YAUTJA_PONCHO "yautja poncho" +#define PRED_YAUTJA_DAMAGED_CAPE "yautja damaged cape" #define SD_TYPE_BIG 0 #define SD_TYPE_SMALL 1 diff --git a/code/__DEFINES/shuttles.dm b/code/__DEFINES/shuttles.dm index 1c79fe03945f..b332c69d542a 100644 --- a/code/__DEFINES/shuttles.dm +++ b/code/__DEFINES/shuttles.dm @@ -143,3 +143,4 @@ #define ADMIN_LANDING_PAD_3 "base-ert3" #define ADMIN_LANDING_PAD_4 "base-ert4" #define ADMIN_LANDING_PAD_5 "base-ert5" +#define ADMIN_LANDING_PAD_6 "base-ert6" diff --git a/code/__DEFINES/tutorial.dm b/code/__DEFINES/tutorial.dm index 75dc7f6da21f..45520a207800 100644 --- a/code/__DEFINES/tutorial.dm +++ b/code/__DEFINES/tutorial.dm @@ -1,4 +1,5 @@ #define TUTORIAL_ATOM_FROM_TRACKING(path, varname) var##path/##varname = tracking_atoms[##path] +#define IS_TUTORIAL_COMPLETED(user, tutorial_id) (user.client && (tutorial_id in user.client.prefs.completed_tutorials)) #define TUTORIAL_CATEGORY_BASE "Base" // Shouldn't be used outside of base types #define TUTORIAL_CATEGORY_SS13 "Space Station 13" diff --git a/code/__DEFINES/typecheck/humanoids.dm b/code/__DEFINES/typecheck/humanoids.dm index 76f561e5fa1f..9f39d66a5012 100644 --- a/code/__DEFINES/typecheck/humanoids.dm +++ b/code/__DEFINES/typecheck/humanoids.dm @@ -17,6 +17,7 @@ #define isworkingjoe(A) (ishuman(A) && istype(A?:species, /datum/species/synthetic/colonial/working_joe)) #define ishazardjoe(A) (ishuman(A) && istype(A?:species, /datum/species/synthetic/colonial/working_joe/hazard)) #define isinfiltratorsynthetic(A) (ishuman(A) && istype(A?:species, /datum/species/synthetic/infiltrator)) +#define isk9synth(A) (ishuman(A) && istype(A?:species, /datum/species/synthetic/synth_k9)) //Specic group checks, use instead of typechecks (but use traits instead) #define issamespecies(A, B) (A.species?.group == B.species?.group) diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 14ea89c9ace2..644d5df363c1 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -277,7 +277,7 @@ continue if(abomination) - if(!(/datum/tutorial/xenomorph/abomination::tutorial_id in cur_obs.client.prefs.completed_tutorials)) + if(!IS_TUTORIAL_COMPLETED(cur_obs, "xeno_abom_1")) to_chat(cur_obs, SPAN_BOLDNOTICE("You were passed over for playing as an Abomination because you have not completed its tutorial.")) continue diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm index 5d7955d85013..c790c822a61a 100644 --- a/code/_globalvars/misc.dm +++ b/code/_globalvars/misc.dm @@ -135,3 +135,6 @@ GLOBAL_VAR(xeno_queue_candidate_count) GLOBAL_VAR(obfs_x) /// A number between -500 and 500. GLOBAL_VAR(obfs_y) + +/// The current amount of giant lizards that are alive. +GLOBAL_VAR_INIT(giant_lizards_alive, 0) diff --git a/code/datums/emergency_calls/clf.dm b/code/datums/emergency_calls/clf.dm index 5441ba3103a7..8400e72fa605 100644 --- a/code/datums/emergency_calls/clf.dm +++ b/code/datums/emergency_calls/clf.dm @@ -33,6 +33,8 @@ to_chat(H, SPAN_BOLD("The arrival of the USCM Battalion, the Falling Falcons, and their flagship, the [MAIN_SHIP_NAME], have reaffirmed that the United Americas considers the Neroid Sector part of their holdings.")) to_chat(H, SPAN_BOLD("It is up to you and your fellow colonists to make them realize their trespasses. This sector is no longer theirs.")) + to_chat(H, SPAN_WARNING(FONT_SIZE_HUGE("YOU ARE HOSTILE to the USCM"))) + /datum/emergency_call/clf/create_member(datum/mind/M, turf/override_spawn_loc) var/turf/spawn_loc = override_spawn_loc ? override_spawn_loc : get_spawn_point() diff --git a/code/datums/emergency_calls/deathsquad.dm b/code/datums/emergency_calls/deathsquad.dm index 649f40c8cb83..7808f46d3109 100644 --- a/code/datums/emergency_calls/deathsquad.dm +++ b/code/datums/emergency_calls/deathsquad.dm @@ -48,6 +48,8 @@ to_chat(person, SPAN_ROLE_BODY("Whiteout protocol is in effect for the target, all assets onboard are to be liquidated with expediency unless otherwise instructed by Weyland Yutani personnel holding the position of Director or above.")) arm_equipment(person, /datum/equipment_preset/pmc/w_y_whiteout, TRUE, TRUE) + to_chat(person, SPAN_WARNING(FONT_SIZE_HUGE("YOU ARE [hostility? "HOSTILE":"FRIENDLY"] to the USCM"))) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), person, SPAN_BOLD("Objectives: [objectives]")), 1 SECONDS) /datum/emergency_call/death/low_threat @@ -83,6 +85,8 @@ to_chat(person, SPAN_ROLE_BODY("Whiteout protocol is in effect for the target, all assets onboard are to be liquidated with expediency unless otherwise instructed by Weyland Yutani personnel holding the position of Director or above.")) arm_equipment(person, /datum/equipment_preset/pmc/w_y_whiteout/low_threat, TRUE, TRUE) + to_chat(person, SPAN_WARNING(FONT_SIZE_HUGE("YOU ARE [hostility? "HOSTILE":"FRIENDLY"] to the USCM"))) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), person, SPAN_BOLD("Objectives: [objectives]")), 1 SECONDS) //################################################################################################ diff --git a/code/datums/emergency_calls/deus_vult.dm b/code/datums/emergency_calls/deus_vult.dm index a5ba948c767e..f1863496d50d 100644 --- a/code/datums/emergency_calls/deus_vult.dm +++ b/code/datums/emergency_calls/deus_vult.dm @@ -37,4 +37,7 @@ to_chat(H, SPAN_ROLE_BODY("You must clear out any traces of the unholy from this wretched place!")) to_chat(H, SPAN_ROLE_BODY("Follow any orders directly from the Higher Power!")) + + to_chat(M, SPAN_WARNING(FONT_SIZE_HUGE("YOU ARE [hostility? "HOSTILE":"FRIENDLY"] to the USCM"))) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), H, SPAN_BOLD("Objectives: [objectives]")), 1 SECONDS) diff --git a/code/datums/emergency_calls/emergency_call.dm b/code/datums/emergency_calls/emergency_call.dm index e956a9731c7c..241a5b3ba6d6 100644 --- a/code/datums/emergency_calls/emergency_call.dm +++ b/code/datums/emergency_calls/emergency_call.dm @@ -272,7 +272,7 @@ if(announce_incoming) marine_announcement(dispatch_message, "Distress Beacon", 'sound/AI/distressreceived.ogg', logging = ARES_LOG_SECURITY) //Announcement that the Distress Beacon has been answered, does not hint towards the chosen ERT - message_admins("Distress beacon: [src.name] finalized, setting up candidates.") + message_admins("Distress beacon: [src.name] finalized, setting up candidates. [hostility? "[SPAN_WARNING("(THEY ARE HOSTILE)")]":"(they are friendly)"].") //Let the deadchat know what's up since they are usually curious for(var/mob/dead/observer/M in GLOB.observer_list) diff --git a/code/datums/emergency_calls/hefa_knight.dm b/code/datums/emergency_calls/hefa_knight.dm index 2af2f99f443e..d6c974181f3e 100644 --- a/code/datums/emergency_calls/hefa_knight.dm +++ b/code/datums/emergency_calls/hefa_knight.dm @@ -19,3 +19,6 @@ arm_equipment(H, /datum/equipment_preset/fun/hefa/melee, FALSE, TRUE) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), H, SPAN_BOLD("Objectives: [objectives]")), 1 SECONDS) + + + to_chat(H, SPAN_WARNING(FONT_SIZE_HUGE("YOU ARE [hostility? "HOSTILE":"FRIENDLY"] to the USCM"))) diff --git a/code/datums/emergency_calls/mercs.dm b/code/datums/emergency_calls/mercs.dm index 33a261a1da5e..642478421322 100644 --- a/code/datums/emergency_calls/mercs.dm +++ b/code/datums/emergency_calls/mercs.dm @@ -50,6 +50,7 @@ else to_chat(H, SPAN_NOTICE(SPAN_BOLD("To this end, you have been contacted by Weyland-Yutani of the USCSS Royce to assist the [MAIN_SHIP_NAME].."))) to_chat(H, SPAN_NOTICE(SPAN_BOLD("Ensure they are not destroyed."))) + to_chat(H, SPAN_WARNING(FONT_SIZE_HUGE("YOU ARE [hostility? "HOSTILE":"FRIENDLY"] to the USCM"))) /datum/emergency_call/mercs/create_member(datum/mind/M, turf/override_spawn_loc) var/turf/spawn_loc = override_spawn_loc ? override_spawn_loc : get_spawn_point() @@ -131,6 +132,7 @@ else to_chat(H, SPAN_NOTICE(SPAN_BOLD("To this end, you have been contacted by Weyland-Yutani of the USCSS Royce to assist the [MAIN_SHIP_NAME].."))) to_chat(H, SPAN_NOTICE(SPAN_BOLD("Ensure they are not destroyed."))) + to_chat(H, SPAN_WARNING(FONT_SIZE_HUGE("YOU ARE [hostility? "HOSTILE":"FRIENDLY"] to the USCM"))) /datum/emergency_call/heavy_mercs/create_member(datum/mind/M, turf/override_spawn_loc) var/turf/spawn_loc = override_spawn_loc ? override_spawn_loc : get_spawn_point() diff --git a/code/datums/emergency_calls/upp.dm b/code/datums/emergency_calls/upp.dm index cb5db1f0e3b9..6204d9818b8f 100644 --- a/code/datums/emergency_calls/upp.dm +++ b/code/datums/emergency_calls/upp.dm @@ -2,7 +2,7 @@ //UPP Strike Team /datum/emergency_call/upp - name = "UPP Naval Infantry (Squad)" + name = "UPP Naval Infantry (Squad) (RANDOM)" mob_max = 9 probability = 20 shuttle_id = MOBILE_SHUTTLE_ID_ERT3 @@ -49,6 +49,7 @@ to_chat(M, SPAN_WARNING(FONT_SIZE_BIG("Glory to Colonel Ganbaatar."))) to_chat(M, SPAN_WARNING(FONT_SIZE_BIG("Glory to the Smoldering Sons."))) to_chat(M, SPAN_WARNING(FONT_SIZE_BIG("Glory to the UPP."))) + to_chat(M, SPAN_WARNING(FONT_SIZE_HUGE("YOU ARE [hostility? "HOSTILE":"FRIENDLY"] to the USCM"))) ///////////////////UPP/////////////////////////// diff --git a/code/datums/entities/ticket.dm b/code/datums/entities/ticket.dm index e34bf4241b2c..b58ce4f99817 100644 --- a/code/datums/entities/ticket.dm +++ b/code/datums/entities/ticket.dm @@ -33,7 +33,7 @@ BSQL_PROTECT_DATUM(/datum/entity/ticket) ticket_ent.sender = sender ticket_ent.urgent = urgent ticket_ent.time = time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss") - ticket_ent.round_id = SSperf_logging.round?.id + ticket_ent.round_id = GLOB.round_id ticket_ent.save() ticket_ent.detach() diff --git a/code/datums/factions/upp.dm b/code/datums/factions/upp.dm index 1a1f0e9a2390..0506833f80c3 100644 --- a/code/datums/factions/upp.dm +++ b/code/datums/factions/upp.dm @@ -73,14 +73,14 @@ list("Type 71 Magazine (5.45x39mm)", 5, /obj/item/ammo_magazine/rifle/type71, null, VENDOR_ITEM_REGULAR), list("SIDEARMS", 0, null, null, null), - list("Type 73 Pistol", 25, /obj/item/weapon/gun/pistol/t73, null, VENDOR_ITEM_REGULAR), + list("Type 73 Pistol", 15, /obj/item/weapon/gun/pistol/t73, null, VENDOR_ITEM_REGULAR), list("NP92 Pistol", 15, /obj/item/weapon/gun/pistol/np92, null, VENDOR_ITEM_REGULAR), list("ZHNK-72 Revolver", 15, /obj/item/weapon/gun/revolver/upp, null, VENDOR_ITEM_REGULAR), list("SIDEARM AMMUNITION", 0, null, null, null), list("Type 73 Magazine (7.62x25mm Tokarev)", 5, /obj/item/ammo_magazine/pistol/t73, null, VENDOR_ITEM_REGULAR), list("ZHNK-72 Speed Loader (7.62x38mmR)", 5, /obj/item/ammo_magazine/revolver/upp, null, VENDOR_ITEM_REGULAR), - list("NP92 Magazine (9x18mm Makarov)", 40, /obj/item/ammo_magazine/pistol/np92, null, VENDOR_ITEM_REGULAR), + list("NP92 Magazine (9x18mm Makarov)", 5, /obj/item/ammo_magazine/pistol/np92, null, VENDOR_ITEM_REGULAR), list("ATTACHMENTS", 0, null, null, null), list("Angled Grip", 15, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR), diff --git a/code/datums/factions/uscm.dm b/code/datums/factions/uscm.dm index 6a4b61289ea3..af45455424f8 100644 --- a/code/datums/factions/uscm.dm +++ b/code/datums/factions/uscm.dm @@ -17,7 +17,11 @@ if(JOB_SQUAD_ENGI) marine_rk = "engi" if(JOB_SQUAD_SPECIALIST) marine_rk = "spec" if(JOB_SQUAD_TEAM_LEADER) marine_rk = "tl" - if(JOB_SQUAD_MEDIC) marine_rk = "med" + if(JOB_SQUAD_MEDIC) + if(current_human.rank_fallback == "medk9") + marine_rk = "medk9" //We don't need Medics to lose their job when converting to K9 Handlers as it would duplicate JOB_SQUAD_MEDIC + else + marine_rk = "med" if(JOB_SQUAD_SMARTGUN) marine_rk = "gun" if(JOB_XO) marine_rk = "xo" if(JOB_CO) marine_rk = "co" @@ -139,6 +143,8 @@ border_rk = "command" if(JOB_SYNTH) marine_rk = "syn" + if(JOB_SYNTH_K9) + marine_rk = "syn_k9" if(JOB_MESS_SERGEANT) marine_rk = "messtech" // Provost diff --git a/code/datums/keybinding/yautja.dm b/code/datums/keybinding/yautja.dm index c79788df49a3..947d80854a35 100644 --- a/code/datums/keybinding/yautja.dm +++ b/code/datums/keybinding/yautja.dm @@ -411,7 +411,7 @@ if(.) return var/mob/living/carbon/human/human = user.mob - var/obj/item/weapon/yautja/combistick/held_item = human.get_held_item() + var/obj/item/weapon/yautja/chained/combistick/held_item = human.get_held_item() if(istype(held_item)) held_item.fold_combistick() return TRUE diff --git a/code/datums/mob_hud.dm b/code/datums/mob_hud.dm index 011dc8e25dba..64ad6e31280a 100644 --- a/code/datums/mob_hud.dm +++ b/code/datums/mob_hud.dm @@ -20,6 +20,7 @@ GLOBAL_LIST_INIT_TYPED(huds, /datum/mob_hud, list( MOB_HUD_HUNTER = new /datum/mob_hud/hunter_hud(), MOB_HUD_HUNTER_CLAN = new /datum/mob_hud/hunter_clan(), MOB_HUD_EXECUTE = new /datum/mob_hud/execute_hud(), + MOB_HUD_NEW_PLAYER = new /datum/mob_hud/new_player(), )) /datum/mob_hud @@ -161,6 +162,9 @@ GLOBAL_LIST_INIT_TYPED(huds, /datum/mob_hud, list( +/datum/mob_hud/new_player + hud_icons = list(NEW_PLAYER_HUD) + //Xeno status hud, for xenos /datum/mob_hud/xeno hud_icons = list(HEALTH_HUD_XENO, PLASMA_HUD, PHEROMONE_HUD, QUEEN_OVERWATCH_HUD, ARMOR_HUD_XENO, XENO_STATUS_HUD, XENO_BANISHED_HUD, HUNTER_HUD) @@ -230,6 +234,7 @@ GLOBAL_LIST_INIT_TYPED(huds, /datum/mob_hud, list( if(istype(hud, /datum/mob_hud/xeno)) //this one is xeno only continue hud.add_to_hud(src) + hud_set_new_player() /mob/living/carbon/xenomorph/add_to_all_mob_huds() for(var/datum/mob_hud/hud in GLOB.huds) @@ -667,6 +672,7 @@ GLOBAL_LIST_INIT_TYPED(huds, /datum/mob_hud, list( holder.overlays += image('icons/mob/hud/marine_hud.dmi', src, "hudmutineer") return + hud_set_new_player() F.modify_hud_holder(holder, src) /mob/living/carbon/human/yautja/hud_set_squad() @@ -689,11 +695,12 @@ GLOBAL_LIST_INIT_TYPED(huds, /datum/mob_hud, list( /mob/proc/hud_set_hunter() return -GLOBAL_DATUM(hud_icon_hunter_gear, /image) -GLOBAL_DATUM(hud_icon_hunter_hunted, /image) -GLOBAL_DATUM(hud_icon_hunter_dishonored, /image) -GLOBAL_DATUM(hud_icon_hunter_honored, /image) -GLOBAL_DATUM(hud_icon_hunter_thralled, /image) + +GLOBAL_DATUM_INIT(hud_icon_hunter_gear, /image, image('icons/mob/hud/hud_yautja.dmi', src, "hunter_gear")) +GLOBAL_DATUM_INIT(hud_icon_hunter_hunted, /image, image('icons/mob/hud/hud_yautja.dmi', src, "hunter_hunted")) +GLOBAL_DATUM_INIT(hud_icon_hunter_dishonored, /image, image('icons/mob/hud/hud_yautja.dmi', src, "hunter_dishonored")) +GLOBAL_DATUM_INIT(hud_icon_hunter_honored, /image, image('icons/mob/hud/hud_yautja.dmi', src, "hunter_honored")) +GLOBAL_DATUM_INIT(hud_icon_hunter_thralled, /image, image('icons/mob/hud/hud_yautja.dmi', src, "hunter_thralled")) /mob/living/carbon/hud_set_hunter() @@ -701,26 +708,16 @@ GLOBAL_DATUM(hud_icon_hunter_thralled, /image) holder.icon_state = "hudblank" holder.overlays.Cut() if(hunter_data.hunted) - if(!GLOB.hud_icon_hunter_hunted) - GLOB.hud_icon_hunter_hunted = image('icons/mob/hud/hud_yautja.dmi', src, "hunter_hunted") holder.overlays += GLOB.hud_icon_hunter_hunted if(hunter_data.dishonored) - if(!GLOB.hud_icon_hunter_dishonored) - GLOB.hud_icon_hunter_dishonored = image('icons/mob/hud/hud_yautja.dmi', src, "hunter_dishonored") holder.overlays += GLOB.hud_icon_hunter_dishonored else if(hunter_data.honored) - if(!GLOB.hud_icon_hunter_honored) - GLOB.hud_icon_hunter_honored = image('icons/mob/hud/hud_yautja.dmi', src, "hunter_honored") holder.overlays += GLOB.hud_icon_hunter_honored if(hunter_data.thralled) - if(!GLOB.hud_icon_hunter_thralled) - GLOB.hud_icon_hunter_thralled = image('icons/mob/hud/hud_yautja.dmi', src, "hunter_thralled") holder.overlays += GLOB.hud_icon_hunter_thralled else if(hunter_data.gear) - if(!GLOB.hud_icon_hunter_gear) - GLOB.hud_icon_hunter_gear = image('icons/mob/hud/hud_yautja.dmi', src, "hunter_gear") holder.overlays += GLOB.hud_icon_hunter_gear hud_list[HUNTER_HUD] = holder @@ -731,17 +728,11 @@ GLOBAL_DATUM(hud_icon_hunter_thralled, /image) holder.overlays.Cut() holder.pixel_x = -18 if(hunter_data.hunted) - if(!GLOB.hud_icon_hunter_hunted) - GLOB.hud_icon_hunter_hunted = image('icons/mob/hud/hud_yautja.dmi', src, "hunter_hunted") holder.overlays += GLOB.hud_icon_hunter_hunted if(hunter_data.dishonored) - if(!GLOB.hud_icon_hunter_dishonored) - GLOB.hud_icon_hunter_dishonored = image('icons/mob/hud/hud_yautja.dmi', src, "hunter_dishonored") holder.overlays += GLOB.hud_icon_hunter_dishonored else if(hunter_data.honored) - if(!GLOB.hud_icon_hunter_honored) - GLOB.hud_icon_hunter_honored = image('icons/mob/hud/hud_yautja.dmi', src, "hunter_honored") holder.overlays += GLOB.hud_icon_hunter_honored hud_list[HUNTER_HUD] = holder @@ -750,25 +741,19 @@ GLOBAL_DATUM(hud_icon_hunter_thralled, /image) /mob/proc/hud_set_order() return -GLOBAL_DATUM(hud_icon_hudmove, /image) -GLOBAL_DATUM(hud_icon_hudhold, /image) -GLOBAL_DATUM(hud_icon_hudfocus, /image) +GLOBAL_DATUM_INIT(hud_icon_hudmove, /image, image('icons/mob/hud/marine_hud.dmi', src, "hudmove")) +GLOBAL_DATUM_INIT(hud_icon_hudhold, /image, image('icons/mob/hud/marine_hud.dmi', src, "hudhold")) +GLOBAL_DATUM_INIT(hud_icon_hudfocus, /image, image('icons/mob/hud/marine_hud.dmi', src, "hudfocus")) // ORDER HUD /mob/living/carbon/human/hud_set_order() var/image/holder = hud_list[ORDER_HUD] holder.icon_state = "hudblank" holder.overlays.Cut() if(mobility_aura) - if(!GLOB.hud_icon_hudmove) - GLOB.hud_icon_hudmove = image('icons/mob/hud/marine_hud.dmi', src, "hudmove") holder.overlays += GLOB.hud_icon_hudmove if(protection_aura) - if(!GLOB.hud_icon_hudhold) - GLOB.hud_icon_hudhold = image('icons/mob/hud/marine_hud.dmi', src, "hudhold") holder.overlays += GLOB.hud_icon_hudhold if(marksman_aura) - if(!GLOB.hud_icon_hudfocus) - GLOB.hud_icon_hudfocus = image('icons/mob/hud/marine_hud.dmi', src, "hudfocus") holder.overlays += GLOB.hud_icon_hudfocus hud_list[ORDER_HUD] = holder @@ -839,3 +824,39 @@ GLOBAL_DATUM(hud_icon_hudfocus, /image) var/freeze_found = HAS_TRAIT(src, TRAIT_IMMOBILIZED) && body_position == STANDING_UP && !buckled // Eligible targets are unable to move but can stand and aren't buckled (eg nested) - This is to convey that they are temporarily unable to move if (freeze_found) freeze_holder.overlays += image('icons/mob/hud/hud.dmi', src, "xeno_freeze") + + + +/mob/proc/hud_set_new_player() + return + +GLOBAL_DATUM_INIT(hud_icon_new_player_1, /image, image('icons/mob/hud/hud.dmi', src, "new_player_marker_1")) +GLOBAL_DATUM_INIT(hud_icon_new_player_2, /image, image('icons/mob/hud/hud.dmi', src, "new_player_marker_2")) +GLOBAL_DATUM_INIT(hud_icon_new_player_3, /image, image('icons/mob/hud/hud.dmi', src, "new_player_marker_3")) + + +/mob/living/carbon/human/hud_set_new_player() + if(!client || !job) + return FALSE + var/image/holder = hud_list[NEW_PLAYER_HUD] + holder.icon_state = "hudblank" + holder.overlays.Cut() + holder.pixel_y = 8 + var/total_time = client.get_total_human_playtime() + var/playtime = get_job_playtime(client, job) + var/marker = GLOB.hud_icon_new_player_3 + + var/low_time = FALSE + if(total_time < JOB_PLAYTIME_TIER_2) + marker = GLOB.hud_icon_new_player_2 + low_time = TRUE + + if(playtime <= JOB_PLAYTIME_TIER_1) + if(low_time) + marker = GLOB.hud_icon_new_player_1 + else if(!low_time) + return FALSE + + holder.overlays += marker + hud_list[NEW_PLAYER_HUD] = holder + return TRUE diff --git a/code/datums/paygrades/factions/uscm/marine.dm b/code/datums/paygrades/factions/uscm/marine.dm index 6a1446dd6b60..f6f77b717a98 100644 --- a/code/datums/paygrades/factions/uscm/marine.dm +++ b/code/datums/paygrades/factions/uscm/marine.dm @@ -231,3 +231,13 @@ ranking = 25 pay_multiplier = 7 officer_grade = GRADE_FLAG + +//Historical Background: Combat Dogs were given the lowest officer rank possible, they have no notional command but if someone were to abuse the animal, the offender could be charged with assaulting an officer. +/datum/paygrade/marine/k9 + paygrade = PAY_SHORT_SYN_K9 + name = "Second Lieutenant Combat Lifesaver" + prefix = "2ndLt Combat Lifesaver" + rank_pin = /obj/item/clothing/accessory/ranks/marine/o1 + ranking = 12 + pay_multiplier = 0 + officer_grade = GRADE_OFFICER diff --git a/code/datums/skills/synthetic.dm b/code/datums/skills/synthetic.dm index c4d7296dee5d..99d86dda7a3e 100644 --- a/code/datums/skills/synthetic.dm +++ b/code/datums/skills/synthetic.dm @@ -88,3 +88,28 @@ SYNTHETIC SKILL_DOMESTIC = SKILL_DOMESTIC_MASTER, SKILL_ANTAG = SKILL_ANTAG_AGENT, ) + +/datum/skills/synth_k9 + name = "Synthetic K9" + skills = list( + SKILL_CQC = SKILL_CQC_MASTER, + SKILL_ENGINEER = SKILL_ENGINEER_DEFAULT, + SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_DEFAULT, + SKILL_FIREARMS = SKILL_FIREARMS_CIVILIAN, + SKILL_SPEC_WEAPONS = SKILL_SPEC_ALL, + SKILL_LEADERSHIP = SKILL_LEAD_NOVICE, + SKILL_OVERWATCH = SKILL_OVERWATCH_DEFAULT, + SKILL_MEDICAL = SKILL_MEDICAL_MASTER, + SKILL_SURGERY = SKILL_SURGERY_DEFAULT, + SKILL_RESEARCH = SKILL_RESEARCH_DEFAULT, + SKILL_MELEE_WEAPONS = SKILL_MELEE_SUPER, + SKILL_PILOT = SKILL_PILOT_EXPERT, + SKILL_POLICE = SKILL_POLICE_SKILLED, + SKILL_FIREMAN = SKILL_FIREMAN_MAX, + SKILL_POWERLOADER = SKILL_POWERLOADER_DEFAULT, + SKILL_VEHICLE = SKILL_VEHICLE_DEFAULT, + SKILL_JTAC = SKILL_JTAC_NOVICE, + SKILL_INTEL = SKILL_INTEL_NOVICE, + SKILL_DOMESTIC = SKILL_DOMESTIC_MASTER, + SKILL_NAVIGATIONS = SKILL_NAVIGATIONS_DEFAULT, + ) diff --git a/code/datums/tutorial/_tutorial.dm b/code/datums/tutorial/_tutorial.dm index b7403da3c0a9..a9a2d2aead8a 100644 --- a/code/datums/tutorial/_tutorial.dm +++ b/code/datums/tutorial/_tutorial.dm @@ -30,6 +30,8 @@ GLOBAL_LIST_EMPTY_TYPED(ongoing_tutorials, /datum/tutorial) var/list/player_bind_dict = list() /// If the tutorial has been completed. This doesn't need to be modified if you call end_tutorial() with a param of TRUE var/completion_marked = FALSE + /// The tutorial_id of what tutorial has to be completed before being able to do this tutorial + var/required_tutorial /datum/tutorial/Destroy(force, ...) GLOB.ongoing_tutorials -= src @@ -87,7 +89,7 @@ GLOBAL_LIST_EMPTY_TYPED(ongoing_tutorials, /datum/tutorial) remove_action(tutorial_mob, /datum/action/tutorial_end) // Just in case to make sure the client can't try and leave the tutorial while it's mid-cleanup if(tutorial_mob.client?.prefs && (completed || completion_marked)) tutorial_mob.client.prefs.completed_tutorials |= tutorial_id - tutorial_mob.client.prefs.save_character() + tutorial_mob.client.prefs.save_preferences() var/mob/new_player/new_player = new if(!tutorial_mob.mind) tutorial_mob.mind_initialize() diff --git a/code/datums/tutorial/_tutorial_menu.dm b/code/datums/tutorial/_tutorial_menu.dm index 3c7a28e77b92..99b7672309cd 100644 --- a/code/datums/tutorial/_tutorial_menu.dm +++ b/code/datums/tutorial/_tutorial_menu.dm @@ -7,18 +7,18 @@ if(!length(categories)) var/list/categories_2 = list() for(var/datum/tutorial/tutorial as anything in subtypesof(/datum/tutorial)) - if(initial(tutorial.parent_path) == tutorial) + if(tutorial::parent_path == tutorial) continue - if(!(initial(tutorial.category) in categories_2)) - categories_2[initial(tutorial.category)] = list() + if(!(tutorial::category in categories_2)) + categories_2[tutorial::category] = list() - categories_2[initial(tutorial.category)] += list(list( - "name" = initial(tutorial.name), + categories_2[tutorial::category] += list(list( + "name" = tutorial::name, "path" = "[tutorial]", - "id" = initial(tutorial.tutorial_id), - "description" = initial(tutorial.desc), - "image" = initial(tutorial.icon_state), + "id" = tutorial::tutorial_id, + "description" = tutorial::desc, + "image" = tutorial::icon_state, )) for(var/category in categories_2) @@ -27,7 +27,6 @@ "tutorials" = categories_2[category], )) - /datum/tutorial_menu/proc/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) @@ -50,10 +49,18 @@ var/list/data = list() data["tutorial_categories"] = categories + data["completed_tutorials"] = list() + data["locked_tutorials"] = list() + if(user.client?.prefs) data["completed_tutorials"] = user.client.prefs.completed_tutorials - else - data["completed_tutorials"] = list() + + for(var/datum/tutorial/tutorial as anything in subtypesof(/datum/tutorial)) + if(tutorial::parent_path == tutorial) + continue + if(tutorial::required_tutorial) + if(!IS_TUTORIAL_COMPLETED(user, tutorial::required_tutorial)) + data["locked_tutorials"] += tutorial::tutorial_id return data diff --git a/code/datums/tutorial/marine/basic_marine.dm b/code/datums/tutorial/marine/basic_marine.dm index af9d2eaf18dd..64f8f6ae7777 100644 --- a/code/datums/tutorial/marine/basic_marine.dm +++ b/code/datums/tutorial/marine/basic_marine.dm @@ -7,6 +7,7 @@ var/clothing_items_to_vend = 8 /// How many items need to be vended from the gun vendor to continue var/gun_items_to_vend = 2 + required_tutorial = "ss13_intents_1" // START OF SCRIPTING diff --git a/code/datums/tutorial/marine/medical_basic.dm b/code/datums/tutorial/marine/medical_basic.dm index 3a42a6d2ecc2..0795df8c9ef7 100644 --- a/code/datums/tutorial/marine/medical_basic.dm +++ b/code/datums/tutorial/marine/medical_basic.dm @@ -3,6 +3,7 @@ desc = "Learn how to treat common injuries you may face as a marine." tutorial_id = "marine_medical_1" tutorial_template = /datum/map_template/tutorial/s7x7 + required_tutorial = "marine_basic_1" // START OF SCRIPTING diff --git a/code/datums/tutorial/marine/reqs_line.dm b/code/datums/tutorial/marine/reqs_line.dm index 5b63af30720e..dc63706bf0ce 100644 --- a/code/datums/tutorial/marine/reqs_line.dm +++ b/code/datums/tutorial/marine/reqs_line.dm @@ -13,8 +13,9 @@ name = "Marine - Requistions Line" desc = "Learn how to tend to the requisitions line as a Cargo Technician." icon_state = "cargotech" - tutorial_id = "requisitions_line" + tutorial_id = "marine_req_1" tutorial_template = /datum/map_template/tutorial/reqs_line + required_tutorial = "marine_basic_1" /// Current step of the tutorial we're at var/stage = TUTORIAL_REQS_LINE_STAGE_STARTING @@ -54,50 +55,79 @@ */ var/static/shopping_catalogue = list( /* ATTACHIES */ - /obj/item/attachable/extended_barrel = list("EB", "EB", "Extended", "Extended Barrel", "Extendo", "Ext Barrel"), + /obj/item/attachable/extended_barrel = list("EB", "EB", "Extended", "Extended Barrel", "Ext Barrel"), + /obj/item/attachable/bayonet = list("Bayo", "Bayonet"), /obj/item/attachable/magnetic_harness = list("MH", "MH", "Magharn", "Mag Harn", "Mag Harness", "Harness", "Magnetic Harness"), /obj/item/attachable/reddot = list("RDS", "Red Dot", "S5", "Red Dot Sight", "reddot"), - /obj/item/attachable/reflex = list("Reflex", "S6", "Reflex Sight", "S6"), + /obj/item/attachable/reflex = list("Reflex", "S6 sight", "Reflex Sight", "S6"), /obj/item/attachable/scope = list("S8", "S8", "4x", "4x sight", "4x scope", "S8 scope"), /obj/item/attachable/angledgrip = list("AG", "agrip", "Agrip", "Angled", "angled grip"), /obj/item/attachable/gyro = list("Gyro"), /obj/item/attachable/lasersight = list("Laser", "Laser sight", "LS"), - /obj/item/attachable/attached_gun/shotgun = list("U7", "Underbarrel", "Underbarrel Shotgun", "Mini Shotgun"), + /obj/item/attachable/attached_gun/shotgun = list("U7", "Underbarrel", "Underbarrel Shotgun", "Mini Shotgun", "UBS"), /obj/item/attachable/verticalgrip = list("VG", "Vert Grip", "Vertical Grip"), /obj/item/attachable/stock/rifle = list("Solid Stock", "M41 stock", "M41 Solid Stock"), /obj/item/attachable/stock/shotgun = list("M37 Stock", "Wooden stock"), /* GEAR */ - /obj/item/weapon/gun/rifle/m41a = list("M41", "M41", "M41A", "Mk2", "M4 rifle"), /obj/item/weapon/gun/shotgun/pump = list("M37", "shotgun"), + /obj/item/weapon/gun/smg/m39 = list("M39", "SMG"), + /obj/item/weapon/gun/rifle/m4ra = list("M4RA", "M4RA Battle Rifle"), + /obj/item/weapon/gun/rifle/m41a = list("M41", "M41", "M41A", "Mk2", "M4 rifle"), + /obj/item/storage/box/guncase/vp78 = list("VP", "VP78"), + /obj/item/storage/box/guncase/smartpistol = list("S6 pistol", "SU-6", "Smartpistol"), /obj/item/storage/box/guncase/mou53 = list("MOU", "MOU53", "MOU-53", "Mouse"), + /obj/item/storage/box/guncase/xm88 = list("Xm88", "XM88"), /obj/item/storage/box/guncase/lmg = list("HPR", "HPR kit", "heavy pulse rifle"), /obj/item/storage/box/guncase/m41aMK1 = list("MK1", "M41 Mk1", "MK1 Kit", "M41A MK1 Kit"), /obj/item/storage/box/guncase/m56d = list("M56D", "HMG", "M56"), /obj/item/storage/box/guncase/m2c = list("M2C"), /obj/item/storage/box/guncase/flamer = list("Flamer", "Flamer kit", "Incinerator"), /obj/item/storage/box/guncase/m79 = list("GL", "Grenade launcher", "M79", "M79 Grenade launcher"), + /obj/item/storage/box/guncase/xm51 = list("XM51", "Breaching Shotty", "Breaching Shotgun", "Breaching Scattergun"), /obj/item/clothing/accessory/storage/black_vest = list("Black webbing", "Black webbing vest"), /obj/item/clothing/accessory/storage/black_vest/brown_vest = list("Brown webbing", "Brown webbing vest"), - /obj/item/clothing/accessory/storage/webbing = list("Webbing", "normal webbing", "web"), - /obj/item/storage/backpack/marine/engineerpack/flamethrower/kit = list("pyro pack", "pyro backpack", "g4-1 pack", "flamer backpack"), - /obj/item/storage/backpack/marine/satchel/rto = list("phone pack", "phone backpack", "radio pack"), - /obj/item/storage/backpack/general_belt = list("G8", "G8 belt"), + /obj/item/clothing/accessory/storage/webbing = list("Webbing", "Normal webbing", "Web"), + /obj/item/clothing/accessory/storage/droppouch = list("Drop Pouch"), + /obj/item/clothing/suit/storage/webbing = list("External webbing"), + /obj/item/storage/backpack/marine/engineerpack/flamethrower/kit = list("Pyro pack", "Pyro backpack", "G4-1 pack", "Flamer backpack"), + /obj/item/storage/backpack/marine/ammo_rack = list ("IMP Ammo Rack", "Ammo rack", "Ammo IMP Rack"), + /obj/item/storage/backpack/marine/satchel/rto = list("Phone pack", "Phone backpack", "Radio pack", "RTO backpack"), + /obj/item/parachute = list("Chute", "Parachute"), + /obj/item/storage/backpack/general_belt = list("G8", "G8 belt", "G8 Utility belt"), + /obj/item/storage/pouch/autoinjector = list("Autoinjector pouch", "Injector pouch"), + /obj/item/storage/pouch/tools/full = list("Tool pouch"), + /obj/item/storage/pouch/document/small = list("Document pouch", "Small document pouch"), + /obj/item/storage/pouch/machete/full = list("Machete pouch"), + /obj/item/storage/pouch/magazine/pistol/large = list("Large pistol pouch"), + /obj/item/storage/pouch/flamertank = list("Flamer tank pouch", "Flamer pouch", "Tank pouch", "Fuel tank strap"), + /obj/item/storage/pouch/general/large = list("Large general pouch"), /obj/item/storage/pouch/magazine/large = list("Large mag pouch", "Large magazine pouch"), /obj/item/storage/pouch/shotgun/large = list("Shotgun pouch", "Shotgun shells pouch", "Shells pouch", "Large shells pouch"), /obj/item/storage/box/m94/signal = list("Signal flares", "box of signals", "CAS flares"), /obj/item/device/motiondetector = list("MD", "Motion Detector"), /obj/item/device/binoculars = list("Binos", "Binoculars"), + /obj/item/device/binoculars/range = list("Rangefinders"), /obj/item/device/binoculars/range/designator = list("LD", "Designator", "Laser Designator", "Tac Binos"), + /obj/item/stack/fulton = list("Fultons", "Fulton pack"), /obj/item/pamphlet/skill/jtac = list("JTAC Pamphlet"), /* Explosives */ + /obj/item/explosive/grenade/high_explosive/m15 = list("M15", "M15 nade", "M15 Grenade"), + /obj/item/explosive/mine = list("Claymore", "Mine", "M20 Claymore"), /obj/item/explosive/grenade/high_explosive = list("M40 HEDP", "HEDP"), /obj/item/explosive/grenade/incendiary = list("M40 HIDP", "Incendiary nade", "Incendiary grenade", "HIDP", "Fire grenade"), - /obj/item/explosive/plastic = list("C4", "C4", "plastic", "plastic explosives"), + /obj/item/explosive/grenade/phosphorus = list("M40 CCDP", "CCDP", "CCDP White Phosphorus"), + /obj/item/explosive/grenade/sebb = list("Sonic Electric Ballbreaker", "SEBB", "G2 Electroshock"), + /obj/item/explosive/plastic = list("C4", "C4", "plastic explosives"), /obj/item/explosive/plastic/breaching_charge = list("Breaching", "breach charge", "breaching charge"), /* AMMO */ - /obj/item/ammo_magazine/rifle/extended = list("Extended", "MK2 Extended", "Extended MK2 Mags"), + /obj/item/ammo_magazine/rifle/m4ra/ap = list("AP M4RA", "AP M4RA mag", "M4RA AP"), /obj/item/ammo_magazine/smg/m39/ap = list("M39 AP", "M39 AP", "SMG AP"), + /obj/item/ammo_magazine/rifle/ap = list("AP mk2", "MK2 Armor piercing", "Armor piercing MK2 mag"), + /obj/item/ammo_magazine/smg/m39/extended = list("Ext M39", "Extended M39", "Extended M39 mag"), + /obj/item/ammo_magazine/rifle/extended = list("Ext Mk2", "MK2 Extended", "Extended MK2 mag"), /obj/item/ammo_magazine/smartgun = list("Smartgun drum", "SG drum"), + /obj/item/ammo_magazine/rifle/lmg = list("HPR mag", "Heavy pulse rifle mag", "M41AE2 box"), + /obj/item/ammo_magazine/rifle/xm51 = list("XM51 mag"), ) /datum/tutorial/marine/reqs_line/Destroy(force) diff --git a/code/datums/tutorial/ss13/intents.dm b/code/datums/tutorial/ss13/intents.dm index d67b2ac1b4a1..8218ea29fde6 100644 --- a/code/datums/tutorial/ss13/intents.dm +++ b/code/datums/tutorial/ss13/intents.dm @@ -4,6 +4,7 @@ icon_state = "intents" tutorial_id = "ss13_intents_1" tutorial_template = /datum/map_template/tutorial/s7x7 + required_tutorial = "ss13_basic_1" // START OF SCRIPTING diff --git a/code/datums/tutorial/xenomorph/abomination.dm b/code/datums/tutorial/xenomorph/abomination.dm index 83ac86b8f09e..1d16e9be617c 100644 --- a/code/datums/tutorial/xenomorph/abomination.dm +++ b/code/datums/tutorial/xenomorph/abomination.dm @@ -5,6 +5,7 @@ tutorial_id = "xeno_abom_1" tutorial_template = /datum/map_template/tutorial/s7x7 starting_xenomorph_type = /mob/living/carbon/xenomorph/predalien/tutorial + required_tutorial = "xeno_basic_1" /// How many marines in the kill_marines stage have been killed var/ending_marines_killed = 0 diff --git a/code/datums/tutorial/xenomorph/xenomorph_basic.dm b/code/datums/tutorial/xenomorph/xenomorph_basic.dm index ad51756ecb25..ed9a9b810b45 100644 --- a/code/datums/tutorial/xenomorph/xenomorph_basic.dm +++ b/code/datums/tutorial/xenomorph/xenomorph_basic.dm @@ -7,6 +7,7 @@ tutorial_id = "xeno_basic_1" tutorial_template = /datum/map_template/tutorial/s12x12 starting_xenomorph_type = /mob/living/carbon/xenomorph/drone + required_tutorial = "ss13_intents_1" // START OF SCRITPING diff --git a/code/game/gamemodes/cm_initialize.dm b/code/game/gamemodes/cm_initialize.dm index 137ec91ced31..4cfc02eecad9 100644 --- a/code/game/gamemodes/cm_initialize.dm +++ b/code/game/gamemodes/cm_initialize.dm @@ -165,6 +165,7 @@ Additional game mode variables. player.mind_initialize() //Will work on ghosts too, but won't add them to active minds. player.mind.setup_human_stats() player.faction = FACTION_YAUTJA + player.faction_group = FACTION_LIST_YAUTJA players += player.mind return players diff --git a/code/game/gamemodes/colonialmarines/huntergames.dm b/code/game/gamemodes/colonialmarines/huntergames.dm index 23344ee9e8f0..5aa4c033883a 100644 --- a/code/game/gamemodes/colonialmarines/huntergames.dm +++ b/code/game/gamemodes/colonialmarines/huntergames.dm @@ -1,7 +1,7 @@ #define HUNTER_BEST_ITEM pick(\ 75; list(/obj/item/clothing/glasses/night, /obj/item/storage/backpack/holding, /obj/item/storage/belt/grenade/full, /obj/item/weapon/gun/flamer), \ 100; list(/obj/item/weapon/twohanded/yautja/glaive, /obj/item/clothing/mask/gas/yautja/hunter, /obj/item/clothing/suit/armor/yautja/hunter,/obj/item/clothing/shoes/yautja/hunter), \ - 50; list(/obj/item/weapon/yautja/combistick, /obj/item/clothing/mask/gas/yautja/hunter, /obj/item/clothing/suit/armor/yautja/hunter/full,/obj/item/clothing/shoes/yautja/hunter), \ + 50; list(/obj/item/weapon/yautja/chained/combistick, /obj/item/clothing/mask/gas/yautja/hunter, /obj/item/clothing/suit/armor/yautja/hunter/full,/obj/item/clothing/shoes/yautja/hunter), \ 150; list(/obj/item/stack/medical/advanced/ointment, /obj/item/stack/medical/advanced/bruise_pack, /obj/item/storage/belt/medical/lifesaver/full), \ 50; list(/obj/item/clothing/under/marine/veteran/pmc/commando, /obj/item/clothing/suit/storage/marine/veteran/pmc/commando, /obj/item/clothing/gloves/marine/veteran/pmc/commando, /obj/item/clothing/shoes/veteran/pmc/commando, /obj/item/clothing/head/helmet/marine/veteran/pmc/commando), \ 125; list(/obj/item/weapon/yautja/chain, /obj/item/weapon/yautja/knife, /obj/item/weapon/yautja/scythe, /obj/item/hunting_trap, /obj/item/hunting_trap), \ diff --git a/code/game/machinery/fusion_engine.dm b/code/game/machinery/fusion_engine.dm index 06ae3321a2c5..ab84f7b89c94 100644 --- a/code/game/machinery/fusion_engine.dm +++ b/code/game/machinery/fusion_engine.dm @@ -356,8 +356,8 @@ return set_overloading(!overloaded) - to_chat(user, SPAN_WARNING("You finish [overloaded ? "overloading" : "restoring"] the safeties on [src].")) - log_game("[key_name(user)] has [overloaded ? "overloaded" : "restored the safeties of"] a generator.") + to_chat(user, SPAN_WARNING("You finish [overloaded ? "restoring" : "overloading"] the safeties on [src].")) + log_game("[key_name(user)] has [overloaded ? "restored the safeties of" : "overloaded"] a generator.") return . = ..() diff --git a/code/game/machinery/nuclearbomb.dm b/code/game/machinery/nuclearbomb.dm index 42b5d95694cb..35cd8ce1bbb1 100644 --- a/code/game/machinery/nuclearbomb.dm +++ b/code/game/machinery/nuclearbomb.dm @@ -609,7 +609,7 @@ GLOBAL_VAR_INIT(bomb_set, FALSE) hive = GLOB.hive_datum[hivenumber] if(!length(hive.totalXenos)) continue - xeno_announcement(SPAN_XENOANNOUNCE("The tallhosts have started the initial phase of a hive killer at [get_area_name(loc)]! Destroy their communications relays!"), hive.hivenumber, XENO_GENERAL_ANNOUNCE) + xeno_announcement(SPAN_XENOANNOUNCE("The tallhosts have started the initial phase of a hive killer at [get_area_name(loc)]! You have about [time_left] to destroy at least one of their communications relays!"), hive.hivenumber, XENO_GENERAL_ANNOUNCE) return announcement_helper("ALERT.\n\nNUCLEAR EXPLOSIVE DECRYPTION HALTED.", "[MAIN_AI_SYSTEM] Nuclear Tracker", humans_uscm, 'sound/misc/notice1.ogg') diff --git a/code/game/machinery/vending/vending_types.dm b/code/game/machinery/vending/vending_types.dm index 85d08641bfdf..e3d95f192e2d 100644 --- a/code/game/machinery/vending/vending_types.dm +++ b/code/game/machinery/vending/vending_types.dm @@ -277,8 +277,8 @@ ) /obj/structure/machinery/vending/sea - name = "\improper SeaTech" - desc = "An equipment vendor designed to save lives" + name = "\improper SEATech" + desc = "An equipment vendor designed to save lives." product_ads = "Semper Fi!;First to Fight!;Ooh Rah.;Leathernecks!;The Few. The Proud.;Esprit de Corps;Jarhead.;Devil Dogs." icon_state = "sec" icon_deny = "sec-deny" diff --git a/code/game/machinery/vending/vendor_types/crew/combat_correspondent.dm b/code/game/machinery/vending/vendor_types/crew/combat_correspondent.dm index 81bee126dbc8..986510335fbe 100644 --- a/code/game/machinery/vending/vendor_types/crew/combat_correspondent.dm +++ b/code/game/machinery/vending/vendor_types/crew/combat_correspondent.dm @@ -4,10 +4,10 @@ GLOBAL_LIST_INIT(cm_vending_clothing_combat_correspondent, list( list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null), list("Essential Reporter's Set", 0, /obj/effect/essentials_set/cc, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY), list("Leather Satchel", 0, /obj/item/storage/backpack/satchel, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), + list("Press Broadcasting Camera", 0, /obj/item/device/camera/broadcasting, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED), list("CIVILIAN EQUIPMENT (TAKE ALL)", 0, null, null, null), list("Portable Press Fax Machine", 0, /obj/item/device/fax_backpack, CIVILIAN_CAN_BUY_BACKPACK, VENDOR_ITEM_RECOMMENDED), - list("Press Broadcasting Camera", 0, /obj/item/device/camera/broadcasting, CIVILIAN_CAN_BUY_UTILITY, VENDOR_ITEM_RECOMMENDED), list("UNIFORM (CHOOSE 1)", 0, null, null, null), list("Black Uniform", 0, /obj/item/clothing/under/marine/reporter/black, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/crew/k9_synth.dm b/code/game/machinery/vending/vendor_types/crew/k9_synth.dm new file mode 100644 index 000000000000..9dc13058749b --- /dev/null +++ b/code/game/machinery/vending/vendor_types/crew/k9_synth.dm @@ -0,0 +1,28 @@ +/obj/structure/machinery/cm_vending/clothing/k9_synth + name = "\improper Wey-Yu Synthetic K9 Equipment Requisitions" + desc = "An automated equipment vendor for Synthetic K9s." + show_points = FALSE + req_access = list(ACCESS_MARINE_SYNTH) + vendor_role = list(JOB_SYNTH_K9) + +/obj/structure/machinery/cm_vending/clothing/k9_synth/get_listed_products(mob/user) + return GLOB.cm_vending_clothing_k9_synth + +//------------GEAR--------------- + +GLOBAL_LIST_INIT(cm_vending_clothing_k9_synth, list( + list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null), + list("Headset", 0, /obj/item/device/radio/headset/almayer/mcom/synth, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY), + list("K9 Serial ID Tags", 0, /obj/item/clothing/under/rank/synthetic/synth_k9, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY), + list("Name Changer", 0, /obj/item/k9_name_changer/, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_MANDATORY), + + list("HANDLER KIT (CHOOSE 1)", 0, null, null, null), + list("Squad Corpsman -> K9 Handler", 0, /obj/item/storage/box/kit/k9_handler/corpsman, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_RECOMMENDED), + list("Military Police -> K9 Handler", 0, /obj/item/storage/box/kit/k9_handler/mp, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_REGULAR), + + list("CARRYPACK (CHOOSE 1)", 0, null, null, null), + list("Medical Carry Harness", 0, /obj/item/storage/backpack/marine/k9_synth/medicalpack, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_RECOMMENDED), + list("Cargo Carry Harness", 0, /obj/item/storage/backpack/marine/k9_synth/cargopack, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), + list("MP Carry Harness", 0, /obj/item/storage/backpack/marine/k9_synth/mppack, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), + + )) diff --git a/code/game/machinery/vending/vendor_types/medical.dm b/code/game/machinery/vending/vendor_types/medical.dm index 03c17b630c33..476e9f160ec2 100644 --- a/code/game/machinery/vending/vendor_types/medical.dm +++ b/code/game/machinery/vending/vendor_types/medical.dm @@ -242,7 +242,7 @@ var/list/chem_refill = list( /obj/item/reagent_container/hypospray/autoinjector/bicaridine, /obj/item/reagent_container/hypospray/autoinjector/dexalinp, - /obj/item/reagent_container/hypospray/autoinjector/adrenaline,, + /obj/item/reagent_container/hypospray/autoinjector/adrenaline, /obj/item/reagent_container/hypospray/autoinjector/inaprovaline, /obj/item/reagent_container/hypospray/autoinjector/kelotane, /obj/item/reagent_container/hypospray/autoinjector/oxycodone, @@ -257,6 +257,8 @@ /obj/item/reagent_container/hypospray/autoinjector/tramadol/skillless, /obj/item/reagent_container/hypospray/autoinjector/tricord/skillless, + /obj/item/reagent_container/hypospray/tricordrazine, + /obj/item/reagent_container/glass/bottle/bicaridine, /obj/item/reagent_container/glass/bottle/antitoxin, /obj/item/reagent_container/glass/bottle/dexalin, @@ -274,8 +276,12 @@ /obj/structure/machinery/cm_vending/sorted/medical/get_examine_text(mob/living/carbon/human/user) . = ..() + if(inoperable()) + return . if(healthscan) . += SPAN_NOTICE("[src] offers assisted medical scans, for ease of use with minimal training. Present the target in front of the scanner to scan.") + if(allow_supply_link_restock && get_supply_link()) + . += SPAN_NOTICE("A supply link is connected.") /obj/structure/machinery/cm_vending/sorted/medical/ui_data(mob/user) . = ..() @@ -327,8 +333,6 @@ if(missing_reagents <= 0) return TRUE if(!LAZYLEN(chem_refill) || !(container.type in chem_refill)) - if(container.reagents.total_volume == initial(container.reagents.total_volume)) - return TRUE to_chat(user, SPAN_WARNING("[src] cannot refill [container].")) return FALSE if(chem_refill_volume < missing_reagents) @@ -719,7 +723,7 @@ wrenchable = TRUE hackable = TRUE healthscan = FALSE - allow_supply_link_restock = FALSE + allow_supply_link_restock = TRUE chem_refill = null /obj/structure/machinery/cm_vending/sorted/medical/blood/bolted diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm index 6db49ebdd6a2..7274e07265ee 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm @@ -8,8 +8,6 @@ GLOBAL_LIST_INIT(cm_vending_gear_medic, list( list("Burn Kit", 2, /obj/item/stack/medical/advanced/ointment, null, VENDOR_ITEM_RECOMMENDED), list("Trauma Kit", 2, /obj/item/stack/medical/advanced/bruise_pack, null, VENDOR_ITEM_RECOMMENDED), list("Medical Splints", 1, /obj/item/stack/medical/splint, null, VENDOR_ITEM_RECOMMENDED), - list("Gauze", 1, /obj/item/stack/medical/bruise_pack, null, VENDOR_ITEM_REGULAR), - list("Ointment", 1, /obj/item/stack/medical/ointment, null, VENDOR_ITEM_REGULAR), list("Blood Bag (O-)", 4, /obj/item/reagent_container/blood/OMinus, null, VENDOR_ITEM_REGULAR), list("FIRSTAID KITS", 0, null, null, null), @@ -20,6 +18,15 @@ GLOBAL_LIST_INIT(cm_vending_gear_medic, list( list("Oxygen Firstaid Kit", 6, /obj/item/storage/firstaid/o2, null, VENDOR_ITEM_REGULAR), list("Radiation Firstaid Kit", 6, /obj/item/storage/firstaid/rad, null, VENDOR_ITEM_REGULAR), + list("PILL BOTTLES", 0, null, null, null), + list("Pill Bottle (Bicaridine)", 5, /obj/item/storage/pill_bottle/bicaridine, null, VENDOR_ITEM_RECOMMENDED), + list("Pill Bottle (Dexalin)", 5, /obj/item/storage/pill_bottle/dexalin, null, VENDOR_ITEM_REGULAR), + list("Pill Bottle (Dylovene)", 5, /obj/item/storage/pill_bottle/antitox, null, VENDOR_ITEM_REGULAR), + list("Pill Bottle (Inaprovaline)", 5, /obj/item/storage/pill_bottle/inaprovaline, null, VENDOR_ITEM_REGULAR), + list("Pill Bottle (Kelotane)", 5, /obj/item/storage/pill_bottle/kelotane, null, VENDOR_ITEM_RECOMMENDED), + list("Pill Bottle (Peridaxon)", 5, /obj/item/storage/pill_bottle/peridaxon, null, VENDOR_ITEM_REGULAR), + list("Pill Bottle (Tramadol)", 5, /obj/item/storage/pill_bottle/tramadol, null, VENDOR_ITEM_RECOMMENDED), + list("AUTOINJECTORS", 0, null, null, null), list("Autoinjector (Bicaridine)", 1, /obj/item/reagent_container/hypospray/autoinjector/bicaridine, null, VENDOR_ITEM_REGULAR), list("Autoinjector (Dexalin+)", 1, /obj/item/reagent_container/hypospray/autoinjector/dexalinp, null, VENDOR_ITEM_REGULAR), @@ -30,24 +37,12 @@ GLOBAL_LIST_INIT(cm_vending_gear_medic, list( list("Autoinjector (Tramadol)", 1, /obj/item/reagent_container/hypospray/autoinjector/tramadol, null, VENDOR_ITEM_REGULAR), list("Autoinjector (Tricord)", 1, /obj/item/reagent_container/hypospray/autoinjector/tricord, null, VENDOR_ITEM_REGULAR), - list("PILL BOTTLES", 0, null, null, null), - list("Pill Bottle (Bicaridine)", 5, /obj/item/storage/pill_bottle/bicaridine, null, VENDOR_ITEM_RECOMMENDED), - list("Pill Bottle (Dexalin)", 5, /obj/item/storage/pill_bottle/dexalin, null, VENDOR_ITEM_REGULAR), - list("Pill Bottle (Dylovene)", 5, /obj/item/storage/pill_bottle/antitox, null, VENDOR_ITEM_REGULAR), - list("Pill Bottle (Inaprovaline)", 5, /obj/item/storage/pill_bottle/inaprovaline, null, VENDOR_ITEM_REGULAR), - list("Pill Bottle (Kelotane)", 5, /obj/item/storage/pill_bottle/kelotane, null, VENDOR_ITEM_RECOMMENDED), - list("Pill Bottle (Peridaxon)", 5, /obj/item/storage/pill_bottle/peridaxon, null, VENDOR_ITEM_REGULAR), - list("Pill Bottle (Tramadol)", 5, /obj/item/storage/pill_bottle/tramadol, null, VENDOR_ITEM_RECOMMENDED), - list("MEDICAL UTILITIES", 0, null, null, null), - list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR), - list("Roller Bed", 4, /obj/item/roller, null, VENDOR_ITEM_REGULAR), - list("Stasis Bag", 6, /obj/item/bodybag/cryobag, null, VENDOR_ITEM_REGULAR), - list("Pressurized Reagent Canister Pouch (EMPTY)", 3, /obj/item/storage/pouch/pressurized_reagent_canister, null, VENDOR_ITEM_REGULAR), - list("G8-A General Utility Pouch", 15, /obj/item/storage/backpack/general_belt, null, VENDOR_ITEM_REGULAR), list("MS-11 Smart Refill Tank", 6, /obj/item/reagent_container/glass/minitank, null, VENDOR_ITEM_REGULAR), list("FixOVein", 7, /obj/item/tool/surgery/FixOVein, null, VENDOR_ITEM_REGULAR), - + list("Roller Bed", 4, /obj/item/roller, null, VENDOR_ITEM_REGULAR), + list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR), + list("Stasis Bag", 6, /obj/item/bodybag/cryobag, null, VENDOR_ITEM_REGULAR), list("EXPLOSIVES", 0, null, null, null), list("M40 HEDP High Explosive Packet (x3 grenades)", 18, /obj/item/storage/box/packet/high_explosive, null, VENDOR_ITEM_REGULAR), @@ -85,10 +80,8 @@ GLOBAL_LIST_INIT(cm_vending_gear_medic, list( list("SU-6 Smart Pistol", 12, /obj/item/storage/box/guncase/smartpistol, null, VENDOR_ITEM_REGULAR), list("CLOTHING ITEMS", 0, null, null, null), - list("Machete Scabbard (Full)", 6, /obj/item/storage/large_holster/machete/full, null, VENDOR_ITEM_REGULAR), list("Machete Pouch (Full)", 8, /obj/item/storage/pouch/machete/full, null, VENDOR_ITEM_REGULAR), list("USCM Radio Telephone Pack", 15, /obj/item/storage/backpack/marine/satchel/rto, null, VENDOR_ITEM_REGULAR), - list("Fuel Tank Strap Pouch", 4, /obj/item/storage/pouch/flamertank, null, VENDOR_ITEM_REGULAR), list("Welding Goggles", 3, /obj/item/clothing/glasses/welding, null, VENDOR_ITEM_REGULAR), list("UTILITIES", 0, null, null, null), @@ -105,7 +98,6 @@ GLOBAL_LIST_INIT(cm_vending_gear_medic, list( list("Welding Visor", 5, /obj/item/device/helmet_visor/welding_visor, null, VENDOR_ITEM_REGULAR), list("PAMPHLETS", 0, null, null, null), - list("JTAC Pamphlet", 15, /obj/item/pamphlet/skill/jtac, null, VENDOR_ITEM_REGULAR), list("Engineering Pamphlet", 15, /obj/item/pamphlet/skill/engineer, null, VENDOR_ITEM_REGULAR), list("RADIO KEYS", 0, null, null, null), @@ -149,51 +141,43 @@ GLOBAL_LIST_INIT(cm_vending_clothing_medic, list( list("Medical Satchel", 0, /obj/item/storage/backpack/marine/satchel/medic, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_RECOMMENDED), list("BELT (CHOOSE 1)", 0, null, null, null), - list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), - list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), - list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_MANDATORY), + list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_MANDATORY), list("POUCHES (CHOOSE 2)", 0, null, null, null), + list("Pressurized Reagent Canister Pouch (Revival Mix - Tricordrazine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival_tricord, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), + list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), list("Autoinjector Pouch", 0, /obj/item/storage/pouch/autoinjector, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("First Responder Pouch", 0, /obj/item/storage/pouch/first_responder, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Pressurized Reagent Canister Pouch (Bicaridine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/bicaridine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Pressurized Reagent Canister Pouch (Kelotane)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/kelotane, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Pressurized Reagent Canister Pouch (Tricordrazine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/tricordrazine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Pressurized Reagent Canister Pouch (Revival Mix - Peridaxon)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival_peri, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Pressurized Reagent Canister Pouch (EMPTY)", 0, /obj/item/storage/pouch/pressurized_reagent_canister, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Vial Pouch (Full)", 0, /obj/item/storage/pouch/vials/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Medical Pouch", 0, /obj/item/storage/pouch/medical, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("First-Aid Pouch (Refillable Injectors)", 0, /obj/item/storage/pouch/firstaid/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("First-Aid Pouch (Splints, Gauze, Ointment)", 0, /obj/item/storage/pouch/firstaid/full/alternate, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - list("First Responder Pouch", 0, /obj/item/storage/pouch/first_responder, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("Large General Pouch", 0, /obj/item/storage/pouch/general/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("Sling Pouch", 0, /obj/item/storage/pouch/sling, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("Large Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("Magazine Pouch", 0, /obj/item/storage/pouch/magazine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("Shotgun Shell Pouch", 0, /obj/item/storage/pouch/shotgun, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - list("Medical Pouch", 0, /obj/item/storage/pouch/medical, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), - list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), - list("Pressurized Reagent Canister Pouch (Bicaridine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/bicaridine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), - list("Pressurized Reagent Canister Pouch (Kelotane)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/kelotane, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), - list("Pressurized Reagent Canister Pouch (Revival Mix - Tricordrazine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival_tricord, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), - list("Pressurized Reagent Canister Pouch (Revival Mix - Peridaxon)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival_peri, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), - list("Pressurized Reagent Canister Pouch (Tricordrazine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/tricordrazine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), - list("Pressurized Reagent Canister Pouch (EMPTY)", 0, /obj/item/storage/pouch/pressurized_reagent_canister, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), - list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - list("Vial Pouch (Full)", 0, /obj/item/storage/pouch/vials/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("ACCESSORIES (CHOOSE 1)", 0, null, null, null), list("Brown Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest/brown_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_RECOMMENDED), - list("Black Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("Black Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_RECOMMENDED), list("Shoulder Holster", 0, /obj/item/clothing/accessory/storage/holster, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), list("Webbing", 0, /obj/item/clothing/accessory/storage/webbing, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), list("Drop Pouch", 0, /obj/item/clothing/accessory/storage/droppouch, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), list("MASK (CHOOSE 1)", 0, null, null, null), + list("Sterile Mask", 0, /obj/item/clothing/mask/surgical, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), - list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), - list("Sterile Mask", 0, /obj/item/clothing/mask/surgical, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR) + list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR) )) /obj/structure/machinery/cm_vending/clothing/medic 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 9860af9225fb..509e2b03c5b0 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 @@ -27,8 +27,8 @@ list("Box of Buckshot Shells (12g)", floor(scale * 5), /obj/item/ammo_magazine/shotgun/buckshot, VENDOR_ITEM_REGULAR), list("Box of Shotgun Slugs (12g)", floor(scale * 5), /obj/item/ammo_magazine/shotgun/slugs, VENDOR_ITEM_REGULAR), list("M4RA Magazine (10x24mm)", floor(scale * 15), /obj/item/ammo_magazine/rifle/m4ra, VENDOR_ITEM_REGULAR), - list("M39 HV Magazine (10x20mm)", floor(scale * 10), /obj/item/ammo_magazine/smg/m39, VENDOR_ITEM_REGULAR), - list("M41A Magazine (10x24mm)", floor(scale * 10), /obj/item/ammo_magazine/rifle, VENDOR_ITEM_REGULAR), + list("M39 HV Magazine (10x20mm)", floor(scale * 15), /obj/item/ammo_magazine/smg/m39, VENDOR_ITEM_REGULAR), + list("M41A Magazine (10x24mm)", floor(scale * 15), /obj/item/ammo_magazine/rifle, VENDOR_ITEM_REGULAR), list("SIDEARMS", -1, null, null), list("88 Mod 4 Combat Pistol", floor(scale * 10), /obj/item/weapon/gun/pistol/mod88, VENDOR_ITEM_REGULAR), diff --git a/code/game/objects/effects/afterimage.dm b/code/game/objects/effects/afterimage.dm index 544910961246..2ee28ac7710d 100644 --- a/code/game/objects/effects/afterimage.dm +++ b/code/game/objects/effects/afterimage.dm @@ -1,5 +1,6 @@ /obj/effect/afterimage as_image = TRUE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT /** * Params: @@ -8,6 +9,8 @@ * - fading_duration: How long it takes for afterimage to fade * - fading_to_shift_ratio: How quickly afterimage will reach its target atom before fading (relative to the fading time) */ + + /obj/effect/afterimage/Initialize(mapload, atom/to_copy, fading_duration, fading_to_shift_ratio = 0.5) . = ..() if (!to_copy) diff --git a/code/game/objects/effects/bloodsplatter.dm b/code/game/objects/effects/bloodsplatter.dm index 96fa14c2a944..2ce87177c398 100644 --- a/code/game/objects/effects/bloodsplatter.dm +++ b/code/game/objects/effects/bloodsplatter.dm @@ -7,6 +7,7 @@ var/duration = 5 layer = ABOVE_XENO_LAYER var/splatter_type = "splatter" + mouse_opacity = MOUSE_OPACITY_TRANSPARENT /obj/effect/bloodsplatter/Initialize(mapload, set_dir, fx_duration, color_override) . = ..() diff --git a/code/game/objects/effects/landmarks/landmarks.dm b/code/game/objects/effects/landmarks/landmarks.dm index 1ed45a75e9cd..87c820054475 100644 --- a/code/game/objects/effects/landmarks/landmarks.dm +++ b/code/game/objects/effects/landmarks/landmarks.dm @@ -121,6 +121,8 @@ GLOB.monkey_spawns -= src return ..() +#define MAXIMUM_LIZARD_AMOUNT 4 + /obj/effect/landmark/lizard_spawn name = "lizard spawn" icon_state = "lizard_spawn" @@ -129,6 +131,22 @@ . = ..() if(prob(66)) new /mob/living/simple_animal/hostile/retaliate/giant_lizard(loc) + addtimer(CALLBACK(src, PROC_REF(latespawn_lizard)), rand(35 MINUTES, 50 MINUTES)) + +/obj/effect/landmark/lizard_spawn/proc/latespawn_lizard() + //if there's already a ton of lizards alive, try again later + if(GLOB.giant_lizards_alive > MAXIMUM_LIZARD_AMOUNT) + addtimer(CALLBACK(src, PROC_REF(latespawn_lizard)), rand(15 MINUTES, 25 MINUTES)) + return + //if there's a living mob that can witness the spawn then try again later + for(var/mob/living/living_mob in range(7, src)) + if(living_mob.stat != DEAD || living_mob.client) + continue + addtimer(CALLBACK(src, PROC_REF(latespawn_lizard)), 1 MINUTES) + return + new /mob/living/simple_animal/hostile/retaliate/giant_lizard(loc) + +#undef MAXIMUM_LIZARD_AMOUNT /obj/effect/landmark/latewhiskey name = "Whiskey Outpost Late join" diff --git a/code/game/objects/effects/shockwave.dm b/code/game/objects/effects/shockwave.dm index 37191aab388f..49b1e4b683b4 100644 --- a/code/game/objects/effects/shockwave.dm +++ b/code/game/objects/effects/shockwave.dm @@ -2,9 +2,11 @@ //Shockwaves //------------------------------------------ + /obj/effect/shockwave icon = 'icons/effects/light_overlays/shockwave.dmi' icon_state = "shockwave" + mouse_opacity = MOUSE_OPACITY_TRANSPARENT plane = DISPLACEMENT_PLATE_RENDER_LAYER pixel_x = -496 pixel_y = -496 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 881b96c311f1..0d6704207629 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -163,6 +163,8 @@ var/ground_offset_x = 0 /// How much to offset the item randomly either way alongside Y visually var/ground_offset_y = 0 + /// bypass any species specific OnMob overlay blockers + var/force_overlays_on = FALSE /// Special storages this item prioritizes var/list/preferred_storage diff --git a/code/game/objects/items/cosmetics.dm b/code/game/objects/items/cosmetics.dm index e03defc37dfe..2d02cbd82f9e 100644 --- a/code/game/objects/items/cosmetics.dm +++ b/code/game/objects/items/cosmetics.dm @@ -146,3 +146,36 @@ sharp = FALSE edge = FALSE force = 0 + +/obj/item/k9_name_changer + name = "K9 name implanter" + desc = "Syncs the implanted W-Y Serial Chip to the unit's preferred name." + icon = 'icons/obj/items/items.dmi' + icon_state = "efundcard" + w_class = SIZE_TINY + +/obj/item/k9_name_changer/attack_self(mob/user) + . = ..() + var/newname = capitalize(tgui_input_text(user, "What do you wish to be named", "Name:", encode = FALSE)) + if(!newname) + return + + var/verify = tgui_input_list(user, "Are you SURE you wish to be named: [newname]?", "Confirm", list("Yes", "No")) + if(verify != "Yes") + return + + user.change_real_name(user, newname) + if(istype(user, /mob/living/carbon/human)) + var/mob/living/carbon/human/altered_human = user + var/obj/item/card/id/ID = altered_human.get_idcard() + if(ID) + ID.name = "[altered_human.real_name]'s ID Card" + ID.registered_name = "[altered_human.real_name]" + if(ID.assignment) + ID.name += " ([ID.assignment])" + + var/genderswap = tgui_input_list(user, "Which Gender?", "Gender", list("Male", "Female")) + if(!genderswap) + return + user.gender = lowertext(genderswap) + qdel(src) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 0e7680cd2f7d..e2a77e4b8977 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -8,6 +8,7 @@ PLANT ANALYZER MASS SPECTROMETER REAGENT SCANNER FORENSIC SCANNER +K9 SCANNER */ /obj/item/device/t_scanner name = "\improper T-ray scanner" @@ -491,3 +492,59 @@ FORENSIC SCANNER flags_atom = FPRINT flags_equip_slot = SLOT_WAIST inherent_traits = list(TRAIT_TOOL_TRADEBAND) + +/obj/item/device/k9_scanner + name = "\improper K9 tracking device" + desc = "A small handheld tool used to track Synthetic K9 helpers, they tend to run off to strange places at inopportune times..." + icon_state = "tracking0" + item_state = "tracking1" + pickup_sound = 'sound/handling/multitool_pickup.ogg' + drop_sound = 'sound/handling/multitool_drop.ogg' + flags_atom = FPRINT + force = 5 + w_class = SIZE_TINY + throwforce = 5 + throw_range = 15 + throw_speed = SPEED_VERY_FAST + + matter = list("metal" = 50,"glass" = 20) + + var/mob/living/carbon/human/tracked_k9 + +/obj/item/device/k9_scanner/Destroy() + . = ..() + tracked_k9 = null + +/obj/item/device/k9_scanner/attack(mob/attacked_mob as mob, mob/user as mob) + if(!isk9synth(attacked_mob)) + to_chat(user, SPAN_BOLDWARNING("ERROR: Cannot Sync To This.")) + return + //we now know the attacked mob is a k9 + tracked_k9 = attacked_mob + icon_state = "tracking1" + to_chat(user, SPAN_WARNING("[src] is now synced to: [attacked_mob].")) + +/obj/item/device/k9_scanner/attack_self(mob/user) + . = ..() + if (!tracked_k9) + to_chat(user, SPAN_WARNING("ERROR: No K9 unit currently tracked. Use scanner on K9 unit to track them.")) + return + + var/turf/self_turf = get_turf(src) + var/turf/scanner_turf = get_turf(tracked_k9) + var/area/self_area = get_area(self_turf) + var/area/scanner_area = get_area(scanner_turf) + + if(self_turf.z != scanner_turf.z || self_area.fake_zlevel != scanner_area.fake_zlevel) + to_chat(user, SPAN_BOLDWARNING("The [src] lights up: UNABLE TO REACH LINKED K9!")) + playsound(src, 'sound/machines/buzz-sigh.ogg', 15, TRUE) + return + + var/dist = get_dist(self_turf, scanner_turf) + var/direction = dir2text(Get_Compass_Dir(self_turf, scanner_turf)) + if(dist > 1) + to_chat(user, SPAN_BOLDNOTICE("[src] lights up: [tracked_k9] is '[dist] meters to the [direction]'")) + else + to_chat(user, SPAN_BOLDNOTICE("[src] lights up: --><--")) + playsound(src, 'sound/machines/ping.ogg', 15, TRUE) + diff --git a/code/game/objects/items/pamphlets.dm b/code/game/objects/items/pamphlets.dm index d8bbb2a01432..315b8e26b99e 100644 --- a/code/game/objects/items/pamphlets.dm +++ b/code/game/objects/items/pamphlets.dm @@ -99,6 +99,43 @@ ID.set_assignment((user.assigned_squad ? (user.assigned_squad.name + " ") : "") + "Spotter") GLOB.data_core.manifest_modify(user.real_name, WEAKREF(user), "Spotter") +/obj/item/pamphlet/skill/k9_handler + name = "K9 handler instructional pamphlet" + desc = "A pamphlet used to quickly impart vital knowledge. This one has the image of a Synthetic K9 Rescue unit on it." + icon_state = "pamphlet_k9_handler" + trait = /datum/character_trait/skills/k9_handler + bypass_pamphlet_limit = TRUE + +/obj/item/pamphlet/skill/k9_handler/can_use(mob/living/carbon/human/user) + if(isk9synth(user)) + to_chat(user, SPAN_WARNING("You don't need to use this! Give it to another marine to make them your handler.")) + return FALSE + + if(user.job != JOB_SQUAD_MEDIC && user.job != JOB_POLICE) + to_chat(user, SPAN_WARNING("This is not meant for you.")) + return + + var/obj/item/card/id/ID = user.get_idcard() + if(!istype(ID)) //not wearing an ID + to_chat(user, SPAN_WARNING("You should wear your ID before doing this.")) + return FALSE + if(!ID.check_biometrics(user)) + to_chat(user, SPAN_WARNING("You should wear your ID before doing this.")) + return FALSE + + return ..() + +/obj/item/pamphlet/skill/k9_handler/on_use(mob/living/carbon/human/user) + . = ..() + user.rank_fallback = "medk9" + user.hud_set_squad() + user.assigned_equipment_preset.minimap_icon = "medic_k9" + user.update_minimap_icon() + + var/obj/item/card/id/ID = user.get_idcard() + ID.set_assignment((user.assigned_squad ? (user.assigned_squad.name + " ") : "") + "K9 Handler") + GLOB.data_core.manifest_modify(user.real_name, WEAKREF(user), "K9 Handler") + /obj/item/pamphlet/skill/machinegunner name = "heavy machinegunner instructional pamphlet" desc = "A pamphlet used to quickly impart vital knowledge. This one has an engineering and a machinegun insignia." diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 9fcaf43d2af3..805f0ecf4030 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -453,6 +453,26 @@ xeno_icon_state = "medicpack" xeno_types = list(/mob/living/carbon/xenomorph/runner, /mob/living/carbon/xenomorph/praetorian, /mob/living/carbon/xenomorph/drone, /mob/living/carbon/xenomorph/warrior, /mob/living/carbon/xenomorph/defender, /mob/living/carbon/xenomorph/sentinel, /mob/living/carbon/xenomorph/spitter) +/obj/item/storage/backpack/marine/k9_synth/ + icon_override = 'icons/mob/humans/species/synth_k9/onmob/synth_k9_overlays.dmi' + uniform_restricted = list(/obj/item/clothing/under/rank/synthetic/synth_k9) //K9 Synth only + force_overlays_on = TRUE + +/obj/item/storage/backpack/marine/k9_synth/cargopack + name = "\improper M209 portable K9 backpack" + desc = "Form fitted for the K9 Rescue Unit line of synthetics. Designed to lug gear into the battlefield." + icon_state = "marinepack_k9" + +/obj/item/storage/backpack/marine/k9_synth/medicalpack + name = "\improper M210 portable K9 medical backpack" + desc = "Form fitted for the K9 Rescue Unit line of synthetics. For carrying medical supplies." + icon_state = "marinepack_medic_k9" + +/obj/item/storage/backpack/marine/k9_synth/mppack + name = "\improper M553 portable K9 police backpack" + desc = "Form fitted for the K9 Rescue Unit line of synthetics. For carrying MP Equipment." + icon_state = "mppack_k9" + /obj/item/storage/backpack/marine/medic/upp name = "\improper UPP corpsman backpack" desc = "Uncommon issue backpack worn by UPP medics from isolated sectors. You can swear you can see a faded USCM symbol." diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 25b5b7eafff1..98c4d1938725 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -263,7 +263,7 @@ SPAN_NOTICE("You hear metal clanking.")) else buckled_mob.visible_message(\ - SPAN_NOTICE("[buckled_mob.name] unbuckled \himself!"),\ + SPAN_NOTICE("[buckled_mob.name] unbuckled [buckled_mob.p_them()]self!"),\ SPAN_NOTICE("You unbuckle yourself from [src]."),\ SPAN_NOTICE("You hear metal clanking")) unbuckle(buckled_mob) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index de44899a97db..5f5135bd0905 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -74,6 +74,7 @@ GLOBAL_LIST_INIT(admin_verbs_default, list( /client/proc/cmd_admin_tacmaps_panel, /client/proc/other_records, /client/proc/toggle_admin_afk_safety, + /client/proc/toogle_door_control, )) GLOBAL_LIST_INIT(admin_verbs_admin, list( @@ -156,7 +157,6 @@ GLOBAL_LIST_INIT(admin_verbs_major_event, list( /client/proc/set_autoreplacer, /client/proc/deactivate_autoreplacer, /client/proc/rerun_decorators, - /client/proc/toogle_door_control, /client/proc/map_template_load, /client/proc/load_event_level, /client/proc/cmd_fun_fire_ob, @@ -318,6 +318,13 @@ GLOBAL_LIST_INIT(roundstart_mod_verbs, list( /client/proc/toggle_ob_spawn )) +GLOBAL_LIST_INIT(mentor_verbs, list( + /client/proc/cmd_mentor_say, + /datum/admins/proc/imaginary_friend, + /client/proc/toggle_newplayer_ghost_hud, + /client/proc/toggle_newplayer_ic_hud +)) + /client/proc/add_admin_verbs() if(!admin_holder) return @@ -332,8 +339,7 @@ GLOBAL_LIST_INIT(roundstart_mod_verbs, list( add_verb(src, GLOB.admin_verbs_admin) add_verb(src, GLOB.admin_verbs_major_event) if(CLIENT_HAS_RIGHTS(src, R_MENTOR)) - add_verb(src, /client/proc/cmd_mentor_say) - add_verb(src, /datum/admins/proc/imaginary_friend) + add_verb(src, GLOB.mentor_verbs) if(CLIENT_HAS_RIGHTS(src, R_BUILDMODE)) add_verb(src, /client/proc/togglebuildmodeself) if(CLIENT_HAS_RIGHTS(src, R_SERVER)) diff --git a/code/modules/admin/tabs/admin_tab.dm b/code/modules/admin/tabs/admin_tab.dm index 5f3bc220876c..cf8fe41b66d7 100644 --- a/code/modules/admin/tabs/admin_tab.dm +++ b/code/modules/admin/tabs/admin_tab.dm @@ -372,7 +372,7 @@ /client/proc/cmd_mentor_say(msg as text) set name = "MentorSay" - set category = "OOC" + set category = "Admin.Mentor" set hidden = 0 if(!check_rights(R_MENTOR|R_MOD|R_ADMIN)) @@ -608,7 +608,7 @@ return /datum/admins/proc/imaginary_friend() - set category = "OOC.Mentor" + set category = "Admin.Mentor" set name = "Imaginary Friend" var/mob/user = usr diff --git a/code/modules/admin/verbs/mentorhud.dm b/code/modules/admin/verbs/mentorhud.dm new file mode 100644 index 000000000000..f03c4edecedd --- /dev/null +++ b/code/modules/admin/verbs/mentorhud.dm @@ -0,0 +1,57 @@ +/client/proc/toggle_newplayer_ghost_hud() + set name = "Toggle Markers (Ghost)" + set category = "Admin.Mentor" + set desc = "Toggles observer pref for mentor markers." + + if(!admin_holder || !(admin_holder.rights & R_MENTOR)) + to_chat(src, "Only mentors may use this HUD!") + return FALSE + + prefs.observer_huds[HUD_MENTOR_SIGHT] = !prefs.observer_huds[HUD_MENTOR_SIGHT] + prefs.save_preferences() + + to_chat(src, SPAN_BOLDNOTICE("You toggled [HUD_MENTOR_SIGHT] to be [prefs.observer_huds[HUD_MENTOR_SIGHT] ? "ON" : "OFF"] by default when you are observer.")) + + if(!isobserver(usr)) + return + var/mob/dead/observer/observer_user = usr + var/datum/mob_hud/the_hud + the_hud = GLOB.huds[MOB_HUD_NEW_PLAYER] + + observer_user.HUD_toggled[HUD_MENTOR_SIGHT] = prefs.observer_huds[HUD_MENTOR_SIGHT] + if(observer_user.HUD_toggled[HUD_MENTOR_SIGHT]) + the_hud.add_hud_to(observer_user, observer_user) + else + the_hud.remove_hud_from(observer_user, observer_user) + +/client/proc/toggle_newplayer_ic_hud(sea_forced = FALSE) + set category = "Admin.Mentor" + set name = "Toggle Markers (IC)" + set desc = "Toggles new player HUD while IC." + + if(!admin_holder || !(admin_holder.rights & R_MENTOR)) + if(!sea_forced) + to_chat(src, "Only mentors may use this HUD!") + return FALSE + + var/mob/living/carbon/human/mentor = mob + if(!ishuman(mentor)) + to_chat(src, SPAN_WARNING("You cannot use this power as a non-human!")) + return FALSE + + if(!mentor.looc_overhead && !(mentor.inherent_huds_toggled[INHERENT_HUD_NEW_PLAYER])) + to_chat(src, SPAN_WARNING("You are not in a mentor role! (Overhead LOOC is disabled!)")) + return FALSE + + var/datum/mob_hud/the_hud + the_hud = GLOB.huds[MOB_HUD_NEW_PLAYER] + + if(mentor.inherent_huds_toggled[INHERENT_HUD_NEW_PLAYER]) + mentor.inherent_huds_toggled[INHERENT_HUD_NEW_PLAYER] = FALSE + the_hud.remove_hud_from(mentor, mentor) + to_chat(mentor, SPAN_INFO("New Player Markers Disabled")) + else + mentor.inherent_huds_toggled[INHERENT_HUD_NEW_PLAYER] = TRUE + the_hud.add_hud_to(mentor, mentor) + to_chat(mentor, SPAN_INFO("New Player Markers Enabled")) + return TRUE diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index 3ee8ef5b616d..a445652f264d 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -256,6 +256,7 @@ list("ass", "hudsquad_ass"), list("Eng", "hudsquad_engi"), list("Med", "hudsquad_med"), + list("medk9", "hudsquad_medk9"), list("SG", "hudsquad_gun"), list("Spc", "hudsquad_spec"), list("TL", "hudsquad_tl"), diff --git a/code/modules/character_traits/skills.dm b/code/modules/character_traits/skills.dm index 8cd82e1e109a..e02b7ef61f55 100644 --- a/code/modules/character_traits/skills.dm +++ b/code/modules/character_traits/skills.dm @@ -90,6 +90,11 @@ trait_desc = "Boosts the JTAC skill by 1. Crewmember received additional training in using JTAC equipment and Ghillie outfits." skill = SKILL_JTAC +/datum/character_trait/skills/k9_handler + trait_name = "K9 Handler Training" + trait_desc = "Allows the user to interface with Wey-Yu Synthetic K9 Units for rescue purposes" + skill = SKILL_JTAC + /datum/character_trait/skills/powerloader trait_name = "Powerloader Usage Training" trait_desc = "Boosts the powerloader skill to 1. Crewmember received training in operating powerloaders." diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 4cee48df1818..b694e32a80b4 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -76,7 +76,8 @@ GLOBAL_LIST_INIT(bgstate_options, list( "Medical HUD" = FALSE, "Security HUD" = FALSE, "Squad HUD" = FALSE, - "Xeno Status HUD" = FALSE + "Xeno Status HUD" = FALSE, + HUD_MENTOR_SIGHT = FALSE ) var/ghost_vision_pref = GHOST_VISION_LEVEL_MID_NVG var/ghost_orbit = GHOST_ORBIT_CIRCLE @@ -551,7 +552,7 @@ GLOBAL_LIST_INIT(bgstate_options, list( dat += "You do not have the whitelist for this role." if(MENU_MENTOR) if(owner.check_whitelist_status(WHITELIST_MENTOR)) - dat += "Nothing here. For now." + dat += "New Player Ghost HUD: [observer_huds[HUD_MENTOR_SIGHT] ? "Enabled" : "Disabled"]
" else dat += "You do not have the whitelist for this role." if(MENU_SETTINGS) @@ -1945,6 +1946,9 @@ GLOBAL_LIST_INIT(bgstate_options, list( return plane_master.backdrop(user?.client.mob) + if("newplayer_ghost_hud") + observer_huds[HUD_MENTOR_SIGHT] = !observer_huds[HUD_MENTOR_SIGHT] + if("auto_fit_viewport") auto_fit_viewport = !auto_fit_viewport if(auto_fit_viewport && owner) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index daab709ec5fa..eb17609ebe63 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -1,5 +1,5 @@ #define SAVEFILE_VERSION_MIN 8 -#define SAVEFILE_VERSION_MAX 27 +#define SAVEFILE_VERSION_MAX 28 //handles converting savefiles to new formats //MAKE SURE YOU KEEP THIS UP TO DATE! @@ -171,6 +171,15 @@ chat_settings |= CHAT_FFATTACKLOGS S["toggles_chat"] << chat_settings + if(savefile_version < 28) + var/tutorial_string = "" + S["completed_tutorials"] >> tutorial_string + tutorial_savestring_to_list(tutorial_string) + if("requisitions_line" in completed_tutorials) + completed_tutorials -= "requisitions_line" + completed_tutorials += "marine_req_1" + S["completed_tutorials"] << tutorial_list_to_savestring() + savefile_version = SAVEFILE_VERSION_MAX return 1 @@ -289,6 +298,10 @@ S["tooltips"] >> tooltips S["key_bindings"] >> key_bindings + var/tutorial_string = "" + S["completed_tutorials"] >> tutorial_string + tutorial_savestring_to_list(tutorial_string) + var/list/remembered_key_bindings S["remembered_key_bindings"] >> remembered_key_bindings @@ -388,7 +401,7 @@ owner.typing_indicators = TRUE if(!observer_huds) - observer_huds = list("Medical HUD" = FALSE, "Security HUD" = FALSE, "Squad HUD" = FALSE, "Xeno Status HUD" = FALSE) + observer_huds = list("Medical HUD" = FALSE, "Security HUD" = FALSE, "Squad HUD" = FALSE, "Xeno Status HUD" = FALSE, HUD_MENTOR_SIGHT = FALSE) return 1 @@ -488,6 +501,8 @@ S["no_radial_labels_preference"] << no_radial_labels_preference S["custom_cursors"] << custom_cursors + S["completed_tutorials"] << tutorial_list_to_savestring() + return TRUE /datum/preferences/proc/load_character(slot) @@ -576,10 +591,6 @@ S["uplinklocation"] >> uplinklocation S["exploit_record"] >> exploit_record - var/tutorial_string = "" - S["completed_tutorials"] >> tutorial_string - tutorial_savestring_to_list(tutorial_string) - //Sanitize metadata = sanitize_text(metadata, initial(metadata)) real_name = reject_bad_name(real_name) @@ -728,8 +739,6 @@ S["uplinklocation"] << uplinklocation S["exploit_record"] << exploit_record - S["completed_tutorials"] << tutorial_list_to_savestring() - return 1 /// checks through keybindings for outdated unbound keys and updates them diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 589fb3b97221..34d5764db21e 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -116,7 +116,7 @@ //Chef /obj/item/clothing/suit/chef/classic - name = "A classic chef's apron." + name = "A classic chef's apron" desc = "A basic, dull, white chef's apron." icon_state = "apronchef" item_state = "apronchef" diff --git a/code/modules/clothing/suits/marine_armor/ert.dm b/code/modules/clothing/suits/marine_armor/ert.dm index 90fb962ffa93..2070a7d33da2 100644 --- a/code/modules/clothing/suits/marine_armor/ert.dm +++ b/code/modules/clothing/suits/marine_armor/ert.dm @@ -452,7 +452,7 @@ /obj/item/device/walkman, ) flags_cold_protection = BODY_FLAG_CHEST|BODY_FLAG_GROIN|BODY_FLAG_LEGS|BODY_FLAG_FEET|BODY_FLAG_ARMS|BODY_FLAG_HANDS - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROT + min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROT valid_accessory_slots = list(ACCESSORY_SLOT_MEDAL) /obj/item/clothing/suit/storage/militia/Initialize() diff --git a/code/modules/clothing/under/marine_uniform.dm b/code/modules/clothing/under/marine_uniform.dm index 8af2e7deb0f7..d12638c4c529 100644 --- a/code/modules/clothing/under/marine_uniform.dm +++ b/code/modules/clothing/under/marine_uniform.dm @@ -942,6 +942,15 @@ worn_state = "rdalt" flags_jumpsuit = FALSE +/obj/item/clothing/under/rank/synthetic/synth_k9 + name = "\improper W-Y K9 serial identification collar" + desc = "Contains a serialized manufacturing number related to this unit's manufacturing date and time." + icon = 'icons/mob/humans/species/synth_k9/onmob/synth_k9_overlays.dmi' + flags_item = NODROP + icon_state = "k9_dogtags" + worn_state = "k9_dogtags" + flags_jumpsuit = FALSE + /obj/item/clothing/under/rank/synthetic/frontier name = "\improper frontier jumpsuit" desc = "A cargo jumpsuit dressed down for full range of motion and state-of-the-art frontier temperature control. It's the best thing an engineer can wear in the Outer Veil." diff --git a/code/modules/cm_marines/equipment/kit_boxes.dm b/code/modules/cm_marines/equipment/kit_boxes.dm index 7be519896097..59009bc898e4 100644 --- a/code/modules/cm_marines/equipment/kit_boxes.dm +++ b/code/modules/cm_marines/equipment/kit_boxes.dm @@ -545,6 +545,34 @@ new /obj/item/device/binoculars/range/designator/spotter(src) new /obj/item/pamphlet/skill/spotter(src) +/obj/item/storage/box/kit/k9_handler/mp + name = "\improper Police K9 handler Kit" + desc = "Contains the equipment needed for a Police K9 Handler to perform their duties." + pro_case_overlay = "k9_handler" + +/obj/item/storage/box/kit/k9_handler/mp/fill_preset_inventory() + new /obj/item/device/k9_scanner(src) + new /obj/item/storage/firstaid/synth(src) + new /obj/item/device/helmet_visor/welding_visor(src) + new /obj/item/device/binoculars(src) + new /obj/item/pamphlet/skill/k9_handler(src) + new /obj/item/storage/box/evidence(src) + new /obj/item/restraint/handcuffs(src) + new /obj/item/reagent_container/spray/pepper(src) + +/obj/item/storage/box/kit/k9_handler/corpsman + name = "\improper Medical K9 handler Kit" + desc = "Contains the equipment needed for a Medical K9 Handler to perform their duties." + pro_case_overlay = "k9_handler" + +/obj/item/storage/box/kit/k9_handler/corpsman/fill_preset_inventory() + new /obj/item/device/k9_scanner(src) + new /obj/item/storage/firstaid/synth(src) + new /obj/item/device/helmet_visor/welding_visor(src) + new /obj/item/device/binoculars(src) + new /obj/item/pamphlet/skill/k9_handler(src) + new /obj/item/storage/pouch/autoinjector/full(src) + /obj/item/storage/box/kit/engineering_supply_kit name = "\improper Engineering Supply Kit" diff --git a/code/modules/cm_marines/marines_consoles.dm b/code/modules/cm_marines/marines_consoles.dm index 778f3f4f18bf..191e35f078c6 100644 --- a/code/modules/cm_marines/marines_consoles.dm +++ b/code/modules/cm_marines/marines_consoles.dm @@ -969,6 +969,7 @@ GLOBAL_LIST_EMPTY_TYPED(crewmonitor, /datum/crewmonitor) JOB_CARGO_TECH = 61, JOB_MESS_SERGEANT = 62, // 70-139: SQUADS (look below) + JOB_SYNTH_K9 = 71, // 140+: Civilian/other JOB_CORPORATE_LIAISON = 140, JOB_PASSENGER = 141, diff --git a/code/modules/cm_marines/radar.dm b/code/modules/cm_marines/radar.dm index aa332d601395..f12f0e79d81c 100644 --- a/code/modules/cm_marines/radar.dm +++ b/code/modules/cm_marines/radar.dm @@ -235,3 +235,33 @@ if(uniform.has_sensor && uniform.sensor_mode >= SENSOR_MODE_LOCATION) // Suit sensors must be on maximum return TRUE return FALSE + + +//Synthetic K9 Scent Tracking, allows K9s to track CLF, UPP, etc as well as Preds... optic camo can't hide the fact you stink! +/datum/radar/scenttracker/find_atom() + return locate(selected) in GLOB.human_mob_list + +/datum/radar/scenttracker/scan() + . = ..() + objects = list() + for(var/mob/living/carbon/human/humanoid as anything in GLOB.human_mob_list) + var/crewmember_name = "Unknown" + var/crewmember_rank = "Unknown" + if(humanoid.get_idcard()) + var/obj/item/card/id/ID = humanoid.get_idcard() + if(ID?.registered_name) + crewmember_name = ID.registered_name + if(ID?.assignment) + crewmember_rank = ID.assignment + switch(humanoid.stat) + if(CONSCIOUS) + crewmember_name = "[crewmember_name] ([crewmember_rank]) (Conscious)" + if(UNCONSCIOUS) + crewmember_name = "[crewmember_name] ([crewmember_rank]) (Unconscious)" + if(DEAD) + crewmember_name = "[crewmember_name] ([crewmember_rank]) (DEAD)" + var/list/crewinfo = list( + ref = REF(humanoid), + name = crewmember_name, + ) + objects += list(crewinfo) diff --git a/code/modules/cm_marines/vehicle_part_fabricator.dm b/code/modules/cm_marines/vehicle_part_fabricator.dm index 01e40029b79b..f04f0f1b0dd1 100644 --- a/code/modules/cm_marines/vehicle_part_fabricator.dm +++ b/code/modules/cm_marines/vehicle_part_fabricator.dm @@ -68,11 +68,11 @@ if(SSticker.current_state < GAME_STATE_PLAYING) return - process_build_queue() - if(generate_points) add_to_point_store() + process_build_queue() + update_icon() /obj/structure/machinery/part_fabricator/proc/process_build_queue() @@ -86,11 +86,23 @@ busy = TRUE var/datum/build_queue_entry/entry = build_queue[1] - if(ispath(entry.item, /obj/structure/ship_ammo/sentry)) + var/is_omnisentry = ispath(entry.item, /obj/structure/ship_ammo/sentry) + + if((is_omnisentry && get_point_store() < omnisentry_price) || get_point_store() < entry.cost) + if(!TIMER_COOLDOWN_CHECK(src, COOLDOWN_PRINTER_ERROR)) + balloon_alert_to_viewers("out of points - printing paused!") + visible_message(SPAN_WARNING("[src] flashes a warning light.")) + TIMER_COOLDOWN_START(src, COOLDOWN_PRINTER_ERROR, 20 SECONDS) + busy = FALSE + return + + if(is_omnisentry) + spend_point_store(omnisentry_price) omnisentry_price += omnisentry_price_scale + else + spend_point_store(entry.cost) visible_message(SPAN_NOTICE("[src] starts printing something.")) - spend_point_store(entry.cost) addtimer(CALLBACK(src, PROC_REF(produce_part), entry), 3 SECONDS) /obj/structure/machinery/part_fabricator/proc/build_part(part_type, cost, mob/user) @@ -134,7 +146,7 @@ return cost = initial(produce.point_cost) build_part(produce, cost, user) - return + return TRUE else var/obj/structure/ship_ammo/produce = (typesof(/obj/structure/ship_ammo))[index] @@ -143,13 +155,16 @@ return cost = initial(produce.point_cost) build_part(produce, cost, user) - return + return TRUE if(action == "cancel") var/index = params["index"] if(length(build_queue)) - if(index == 1) + if(index == null || index > length(build_queue)) + return + + if(busy && index == 1) to_chat(user, SPAN_WARNING("Cannot cancel currently produced item.")) return @@ -157,7 +172,7 @@ build_queue.Remove(entry) add_to_point_store(entry.cost) - return + return TRUE else log_admin("Bad topic: [user] may be trying to HREF exploit [src]") diff --git a/code/modules/cm_preds/_yaut_defines.dm b/code/modules/cm_preds/_yaut_defines.dm index a2a7730f462c..cfa03469def5 100644 --- a/code/modules/cm_preds/_yaut_defines.dm +++ b/code/modules/cm_preds/_yaut_defines.dm @@ -16,6 +16,7 @@ #define YAUTJA_GEAR_GLAIVE_ALT "The Imposing Glaive" #define YAUTJA_GEAR_SCYTHE_ALT "The Ripping War-Scythe" #define YAUTJA_GEAR_SCIMS_ALT "The Skewering Scimitars" +#define YAUTJA_GEAR_STICK_ALT "The Butchering War Axe" #define YAUTJA_THRALL_GEAR_MACHETE "The Swift Machete" #define YAUTJA_THRALL_GEAR_RAPIER "The Dancing Rapier" diff --git a/code/modules/cm_preds/thrall_procs.dm b/code/modules/cm_preds/thrall_procs.dm index bca08f99b4cc..cf430bd05639 100644 --- a/code/modules/cm_preds/thrall_procs.dm +++ b/code/modules/cm_preds/thrall_procs.dm @@ -59,7 +59,7 @@ if(YAUTJA_GEAR_SCYTHE) spawned_weapon = new /obj/item/weapon/yautja/scythe(wearer.loc) if(YAUTJA_GEAR_STICK) - spawned_weapon = new /obj/item/weapon/yautja/combistick(wearer.loc) + spawned_weapon = new /obj/item/weapon/yautja/chained/combistick(wearer.loc) if(YAUTJA_THRALL_GEAR_MACHETE) spawned_weapon = new /obj/item/weapon/sword/machete(wearer.loc) if(YAUTJA_THRALL_GEAR_RAPIER) diff --git a/code/modules/cm_preds/yaut_actions.dm b/code/modules/cm_preds/yaut_actions.dm index 0d260363ab15..0894ea95adac 100644 --- a/code/modules/cm_preds/yaut_actions.dm +++ b/code/modules/cm_preds/yaut_actions.dm @@ -163,13 +163,13 @@ . = ..() bracers.wristblades() -/datum/action/predator_action/bracer/combistick - name = "Yank Combi-stick" +/datum/action/predator_action/bracer/chained + name = "Yank Weapon" action_icon_state = "combi" listen_signal = COMSIG_KB_YAUTJA_CALL_COMBI active = PREDATOR_ACTION_ON_CLICK -/datum/action/predator_action/bracer/combistick/action_activate() +/datum/action/predator_action/bracer/chained/action_activate() . = ..() yautja.call_combi_internal(yautja, forced = FALSE) diff --git a/code/modules/cm_preds/yaut_bracers.dm b/code/modules/cm_preds/yaut_bracers.dm index f63b5198bbe5..300c91801167 100644 --- a/code/modules/cm_preds/yaut_bracers.dm +++ b/code/modules/cm_preds/yaut_bracers.dm @@ -497,8 +497,8 @@ continue if(is_honorable_carrier(recursive_holder_check(tracked_item))) continue - var/area/location = get_area(tracked_item) - if(location.flags_area & AREA_YAUTJA_GROUNDS) + var/area/location = get_area(loc) + if(location?.flags_area & AREA_YAUTJA_GROUNDS) continue if(is_reserved_level(loc.z)) gear_low_orbit++ @@ -517,7 +517,7 @@ if(dead_yautja.stat != DEAD) continue var/area/location = get_area(dead_yautja) - if(location.flags_area & AREA_YAUTJA_GROUNDS) + if(location?.flags_area & AREA_YAUTJA_GROUNDS) continue if(is_reserved_level(dead_yautja.z)) dead_low_orbit++ diff --git a/code/modules/cm_preds/yaut_hudprocs.dm b/code/modules/cm_preds/yaut_hudprocs.dm index 460cad894c6d..44ceafa95f59 100644 --- a/code/modules/cm_preds/yaut_hudprocs.dm +++ b/code/modules/cm_preds/yaut_hudprocs.dm @@ -454,6 +454,6 @@ /mob/living/carbon/human/proc/call_combi_internal(mob/caller, forced = FALSE) for(var/datum/effects/tethering/tether in caller.effects_list) - if(istype(tether.tethered.affected_atom, /obj/item/weapon/yautja/combistick)) - var/obj/item/weapon/yautja/combistick/stick = tether.tethered.affected_atom + if(istype(tether.tethered.affected_atom, /obj/item/weapon/yautja/chained)) + var/obj/item/weapon/yautja/chained/stick = tether.tethered.affected_atom stick.recall() diff --git a/code/modules/cm_preds/yaut_items.dm b/code/modules/cm_preds/yaut_items.dm index 31d8fc30791e..0aca94ae8202 100644 --- a/code/modules/cm_preds/yaut_items.dm +++ b/code/modules/cm_preds/yaut_items.dm @@ -198,6 +198,11 @@ icon_state = "councilor_poncho" clan_rank_required = CLAN_RANK_BLOODED_INT +/obj/item/clothing/yautja_cape/damaged + name = PRED_YAUTJA_DAMAGED_CAPE + icon_state = "damagedcape" + clan_rank_required = CLAN_RANK_ELITE_INT + /obj/item/clothing/shoes/yautja name = "ancient alien greaves" desc = "Greaves made from scraps of cloth and a strange alloy. They feel cold with an alien weight." diff --git a/code/modules/cm_preds/yaut_procs.dm b/code/modules/cm_preds/yaut_procs.dm index 45365555ba9d..31910fa2adae 100644 --- a/code/modules/cm_preds/yaut_procs.dm +++ b/code/modules/cm_preds/yaut_procs.dm @@ -281,6 +281,10 @@ main_weapon = use_radials ? show_radial_menu(src, src, scim_variants) : tgui_input_list(usr, "Which variant of the scimitars?:", "Melee Weapon", scim_variants) + if(main_weapon == YAUTJA_GEAR_STICK) + var/list/stick_variants = list(YAUTJA_GEAR_STICK = image(icon = 'icons/obj/items/hunter/pred_gear.dmi', icon_state = "combistick"), YAUTJA_GEAR_STICK_ALT = image(icon = 'icons/obj/items/hunter/pred_gear.dmi', icon_state = "war_axe")) + main_weapon = use_radials ? show_radial_menu(src, src, stick_variants) :tgui_input_list(usr, "Which variant of the combistick?:", "Melee Weapon", stick_variants) + if(!main_weapon) return for(var/i = 1 to total_secondaries) @@ -316,7 +320,9 @@ if(YAUTJA_GEAR_SCYTHE_ALT) equip_to_slot_if_possible(new /obj/item/weapon/yautja/scythe/alt(src.loc), WEAR_J_STORE, disable_warning = TRUE) if(YAUTJA_GEAR_STICK) - equip_to_slot_if_possible(new /obj/item/weapon/yautja/combistick(src.loc), WEAR_J_STORE, disable_warning = TRUE) + equip_to_slot_if_possible(new /obj/item/weapon/yautja/chained/combistick(src.loc), WEAR_J_STORE, disable_warning = TRUE) + if(YAUTJA_GEAR_STICK_ALT) + equip_to_slot_if_possible(new /obj/item/weapon/yautja/chained/war_axe(src.loc), WEAR_J_STORE, disable_warning = TRUE) if(YAUTJA_GEAR_SCIMS) if(bracers.wristblades_deployed) bracers.wristblades_internal(usr, TRUE) diff --git a/code/modules/cm_preds/yaut_weapons.dm b/code/modules/cm_preds/yaut_weapons.dm index 55e1d427eca2..e08744dbd0c5 100644 --- a/code/modules/cm_preds/yaut_weapons.dm +++ b/code/modules/cm_preds/yaut_weapons.dm @@ -240,7 +240,7 @@ item_state = "scythe_double" //Combistick -/obj/item/weapon/yautja/combistick +/obj/item/weapon/yautja/chained/combistick name = "combi-stick" desc = "A compact yet deadly personal weapon. Can be concealed when folded. Functions well as a throwing weapon or defensive tool. A common sight in Yautja packs due to its versatility." icon_state = "combistick" @@ -259,37 +259,39 @@ hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("speared", "stabbed", "impaled") - var/on = TRUE - var/charged = FALSE - var/force_wielded = MELEE_FORCE_TIER_6 var/force_unwielded = MELEE_FORCE_TIER_2 var/force_storage = MELEE_FORCE_TIER_1 + +/obj/item/weapon/yautja/chained + var/on = TRUE + var/charged = FALSE + /// Ref to the tether effect when thrown var/datum/effects/tethering/chain ///The mob the chain is linked to var/mob/living/linked_to -/obj/item/weapon/yautja/combistick/Destroy() +/obj/item/weapon/yautja/chained/Destroy() cleanup_chain() return ..() -/obj/item/weapon/yautja/combistick/dropped(mob/user) +/obj/item/weapon/yautja/chained/dropped(mob/user) . = ..() if(on && isturf(loc)) setup_chain(user) -/obj/item/weapon/yautja/combistick/try_to_throw(mob/living/user) +/obj/item/weapon/yautja/chained/try_to_throw(mob/living/user) if(!charged) - to_chat(user, SPAN_WARNING("Your combistick refuses to leave your hand. You must charge it with blood from prey before throwing it.")) + to_chat(user, SPAN_WARNING("Your [src] refuses to leave your hand. You must charge it with blood from prey before throwing it.")) return FALSE charged = FALSE remove_filter("combistick_charge") unwield(user) //Otherwise stays wielded even when thrown return TRUE -/obj/item/weapon/yautja/combistick/proc/setup_chain(mob/living/user) - give_action(user, /datum/action/predator_action/bracer/combistick) +/obj/item/weapon/yautja/chained/proc/setup_chain(mob/living/user) + give_action(user, /datum/action/predator_action/bracer/chained) add_verb(user, /mob/living/carbon/human/proc/call_combi) linked_to = user @@ -300,16 +302,16 @@ RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) /// The chain normally breaks if it's put into a container, so let's yank it back if that's the case -/obj/item/weapon/yautja/combistick/proc/on_move(datum/source, atom/moved, dir, forced) +/obj/item/weapon/yautja/chained/proc/on_move(datum/source, atom/moved, dir, forced) SIGNAL_HANDLER if(!z && !is_type_in_list(loc, list(/obj/structure/surface, /mob))) // I rue for the day I can remove the surface snowflake check recall() /// Clean up the chain, deleting/nulling/unregistering as needed -/obj/item/weapon/yautja/combistick/proc/cleanup_chain() +/obj/item/weapon/yautja/chained/proc/cleanup_chain() SIGNAL_HANDLER if(linked_to) - remove_action(linked_to, /datum/action/predator_action/bracer/combistick) + remove_action(linked_to, /datum/action/predator_action/bracer/chained) remove_verb(linked_to, /mob/living/carbon/human/proc/call_combi) if(!QDELETED(chain)) @@ -321,15 +323,15 @@ UnregisterSignal(src, COMSIG_ITEM_PICKUP) UnregisterSignal(src, COMSIG_MOVABLE_MOVED) -/obj/item/weapon/yautja/combistick/proc/on_pickup(datum/source, mob/user) +/obj/item/weapon/yautja/chained/proc/on_pickup(datum/source, mob/user) SIGNAL_HANDLER if(user != chain.affected_atom) to_chat(chain.affected_atom, SPAN_WARNING("You feel the chain of [src] be torn from your grasp!")) // Recall the fuckin combi my man cleanup_chain() -/// recall the combistick to the pred's hands or to be at their feet -/obj/item/weapon/yautja/combistick/proc/recall() +/// recall the combistick or war axe to the pred's hands or to be at their feet +/obj/item/weapon/yautja/chained/proc/recall() SIGNAL_HANDLER if(!chain) return @@ -353,10 +355,10 @@ user.visible_message(SPAN_WARNING("[user] yanks [src]'s chain back, letting [src] fall at [user.p_their()]!"), SPAN_WARNING("You yank [src]'s chain back, letting it drop at your feet!")) cleanup_chain() -/obj/item/weapon/yautja/combistick/IsShield() +/obj/item/weapon/yautja/chained/combistick/IsShield() return on -/obj/item/weapon/yautja/combistick/verb/fold_combistick() +/obj/item/weapon/yautja/chained/combistick/verb/fold_combistick() set category = "Weapons" set name = "Collapse Combi-stick" set desc = "Collapse or extend the combistick." @@ -364,7 +366,7 @@ unique_action(usr) -/obj/item/weapon/yautja/combistick/attack_self(mob/user) +/obj/item/weapon/yautja/chained/attack_self(mob/user) ..() if(on) if(flags_item & WIELDED) @@ -375,21 +377,21 @@ to_chat(user, SPAN_WARNING("You need to extend the combi-stick before you can wield it.")) -/obj/item/weapon/yautja/combistick/wield(mob/user) +/obj/item/weapon/yautja/chained/combistick/wield(mob/user) . = ..() if(!.) return force = force_wielded update_icon() -/obj/item/weapon/yautja/combistick/unwield(mob/user) +/obj/item/weapon/yautja/chained/combistick/unwield(mob/user) . = ..() if(!.) return force = force_unwielded update_icon() -/obj/item/weapon/yautja/combistick/update_icon() +/obj/item/weapon/yautja/chained/combistick/update_icon() if(flags_item & WIELDED) item_state = "combistick_w" else if(!on) @@ -397,7 +399,7 @@ else item_state = "combistick" -/obj/item/weapon/yautja/combistick/unique_action(mob/living/user) +/obj/item/weapon/yautja/chained/combistick/unique_action(mob/living/user) if(user.get_active_hand() != src) return if(!on) @@ -442,7 +444,7 @@ return -/obj/item/weapon/yautja/combistick/attack(mob/living/target, mob/living/carbon/human/user) +/obj/item/weapon/yautja/chained/attack(mob/living/target, mob/living/carbon/human/user) . = ..() if(!.) return @@ -457,21 +459,21 @@ return if(!charged) - to_chat(user, SPAN_DANGER("Your combistick's reservoir fills up with your opponent's blood! You may now throw it!")) + to_chat(user, SPAN_DANGER("Your [src]'s reservoir fills up with your opponent's blood! You may now throw it!")) charged = TRUE var/color = target.get_blood_color() var/alpha = 70 color += num2text(alpha, 2, 16) add_filter("combistick_charge", 1, list("type" = "outline", "color" = color, "size" = 2)) -/obj/item/weapon/yautja/combistick/attack_hand(mob/user) //Prevents marines from instantly picking it up via pickup macros. +/obj/item/weapon/yautja/chained/attack_hand(mob/user) //Prevents marines from instantly picking it up via pickup macros. if(!human_adapted && !HAS_TRAIT(user, TRAIT_SUPER_STRONG)) user.visible_message(SPAN_DANGER("[user] starts to untangle the chain on \the [src]..."), SPAN_NOTICE("You start to untangle the chain on \the [src]...")) if(do_after(user, 3 SECONDS, INTERRUPT_ALL, BUSY_ICON_HOSTILE, src, INTERRUPT_MOVED, BUSY_ICON_HOSTILE)) ..() else ..() -/obj/item/weapon/yautja/combistick/launch_impact(atom/hit_atom) +/obj/item/weapon/yautja/chained/launch_impact(atom/hit_atom) if(isyautja(hit_atom)) var/mob/living/carbon/human/human = hit_atom if(human.put_in_hands(src)) @@ -480,6 +482,25 @@ return ..() +/obj/item/weapon/yautja/chained/war_axe + name = "war axe" + desc = "A swift weapon designed to gouge and gore the hunter's prey. A chain is attached to the hilt, allowing for a quick retrieval." + icon_state = "war_axe" + flags_atom = FPRINT|QUICK_DRAWABLE|CONDUCT + flags_equip_slot = SLOT_BACK + flags_item = ITEM_PREDATOR + w_class = SIZE_LARGE + embeddable = FALSE //It shouldn't embed so that the Yautja can actually use the yank combi verb, and so that it's not useless upon throwing it at someone. + throw_speed = SPEED_VERY_FAST + throw_range = 4 + unacidable = TRUE + force = MELEE_FORCE_TIER_6 + throwforce = MELEE_FORCE_TIER_6 + sharp = IS_SHARP_ITEM_SIMPLE + edge = TRUE + hitsound = 'sound/weapons/bladeslice.ogg' + attack_verb = list("slashed", "chopped", "diced") + /obj/item/weapon/yautja/knife name = "ceremonial dagger" desc = "A viciously sharp dagger inscribed with ancient Yautja markings. Smells thickly of blood. Carried by some hunters." diff --git a/code/modules/gear_presets/cmb.dm b/code/modules/gear_presets/cmb.dm index eef879e160d2..c5ae3998a0aa 100644 --- a/code/modules/gear_presets/cmb.dm +++ b/code/modules/gear_presets/cmb.dm @@ -408,10 +408,6 @@ name = "USCM Anchorpoint Station Squad Marine" flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE -/datum/equipment_preset/uscm/cmb/New() - . = ..() - access = get_access(ACCESS_LIST_UA) - assignment = "Anchorpoint Station Marine Rifleman" rank = JOB_SQUAD_MARINE paygrades = list(PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_0) @@ -420,6 +416,10 @@ faction = FACTION_MARSHAL faction_group = list(FACTION_MARSHAL, FACTION_MARINE) +/datum/equipment_preset/uscm/cmb/New() + . = ..() + access = get_access(ACCESS_LIST_UA) + /datum/equipment_preset/uscm/cmb/load_status(mob/living/carbon/human/new_human) . = ..() new_human.nutrition = rand(NUTRITION_MAX, NUTRITION_NORMAL) diff --git a/code/modules/gear_presets/synth_k9.dm b/code/modules/gear_presets/synth_k9.dm new file mode 100644 index 000000000000..2059990655db --- /dev/null +++ b/code/modules/gear_presets/synth_k9.dm @@ -0,0 +1,38 @@ +/datum/equipment_preset/synth_k9 + name = "K9 Synthetic" + uses_special_name = TRUE + languages = ALL_SYNTH_LANGUAGES + skills = /datum/skills/synth_k9 + minimap_icon = "synth_k9" + flags = EQUIPMENT_PRESET_START_OF_ROUND|EQUIPMENT_PRESET_MARINE + faction = FACTION_MARINE + idtype = /obj/item/card/id/gold + assignment = JOB_SYNTH_K9 + rank = "Synthetic K9" + paygrades = list(PAY_SHORT_SYN_K9 = JOB_PLAYTIME_TIER_0) + role_comm_title = "K9" + +/datum/equipment_preset/synth_k9/New() + . = ..() + access = get_access(ACCESS_LIST_GLOBAL) + +/datum/equipment_preset/synth_k9/load_race(mob/living/carbon/human/new_human) + . = ..() + new_human.h_style = "Bald" + new_human.f_style = "Shaved" + if(new_human.client?.prefs?.synthetic_type) + new_human.set_species(new_human.client.prefs.synthetic_type) + return + new_human.set_species(SYNTH_K9) + +/datum/equipment_preset/synth_k9/load_name(mob/living/carbon/human/new_human, randomise) + var/final_name = "Rex" + if(new_human.client?.prefs) + final_name = new_human.client.prefs.synthetic_name + if(!final_name || final_name == "Undefined") + final_name = "Rex" + new_human.change_real_name(new_human, final_name) + +/datum/equipment_preset/synth_k9/load_skills(mob/living/carbon/human/new_human) + . = ..() + new_human.allow_gun_usage = FALSE diff --git a/code/modules/gear_presets/uscm_ship.dm b/code/modules/gear_presets/uscm_ship.dm index 71933997f8b1..6832900e752b 100644 --- a/code/modules/gear_presets/uscm_ship.dm +++ b/code/modules/gear_presets/uscm_ship.dm @@ -648,6 +648,7 @@ new_human.equip_to_slot_or_del(new /obj/item/device/whistle(new_human), WEAR_R_HAND) /datum/equipment_preset/uscm_ship/sea/load_rank(mob/living/carbon/human/rankee, client/mob_client) + mob_client.toggle_newplayer_ic_hud(TRUE) if(rankee?.client?.prefs?.pref_special_job_options[rank]) var/paygrade_choice = get_paygrade_id_by_name(rankee.client.prefs.pref_special_job_options[rank]) return paygrade_choice diff --git a/code/modules/gear_presets/yautja.dm b/code/modules/gear_presets/yautja.dm index 8ffd8664a977..9b8e64948c62 100644 --- a/code/modules/gear_presets/yautja.dm +++ b/code/modules/gear_presets/yautja.dm @@ -4,6 +4,7 @@ languages = list(LANGUAGE_YAUTJA) rank = "Predator" faction = FACTION_YAUTJA + faction_group = FACTION_LIST_YAUTJA uses_special_name = TRUE skills = /datum/skills/yautja/warrior @@ -23,6 +24,7 @@ /datum/equipment_preset/yautja/load_id(mob/living/carbon/human/new_human) new_human.job = rank new_human.faction = faction + new_human.faction_group = faction_group /datum/equipment_preset/yautja/load_vanity(mob/living/carbon/human/new_human) return //No vanity items for Yautja! diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 6eb18eb342da..65e3e6fb2e39 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -377,35 +377,38 @@ if(!client || !client.prefs) return - var/datum/mob_hud/H + var/datum/mob_hud/the_hud HUD_toggled = client.prefs.observer_huds for(var/i in HUD_toggled) if(HUD_toggled[i]) switch(i) if("Medical HUD") - H = GLOB.huds[MOB_HUD_MEDICAL_OBSERVER] - H.add_hud_to(src, src) + the_hud = GLOB.huds[MOB_HUD_MEDICAL_OBSERVER] + the_hud.add_hud_to(src, src) if("Security HUD") - H = GLOB.huds[MOB_HUD_SECURITY_ADVANCED] - H.add_hud_to(src, src) + the_hud= GLOB.huds[MOB_HUD_SECURITY_ADVANCED] + the_hud.add_hud_to(src, src) if("Squad HUD") - H = GLOB.huds[MOB_HUD_FACTION_OBSERVER] - H.add_hud_to(src, src) + the_hud= GLOB.huds[MOB_HUD_FACTION_OBSERVER] + the_hud.add_hud_to(src, src) if("Xeno Status HUD") - H = GLOB.huds[MOB_HUD_XENO_STATUS] - H.add_hud_to(src, src) + the_hud= GLOB.huds[MOB_HUD_XENO_STATUS] + the_hud.add_hud_to(src, src) if("Faction UPP HUD") - H = GLOB.huds[MOB_HUD_FACTION_UPP] - H.add_hud_to(src, src) + the_hud= GLOB.huds[MOB_HUD_FACTION_UPP] + the_hud.add_hud_to(src, src) if("Faction Wey-Yu HUD") - H = GLOB.huds[MOB_HUD_FACTION_WY] - H.add_hud_to(src, src) + the_hud= GLOB.huds[MOB_HUD_FACTION_WY] + the_hud.add_hud_to(src, src) if("Faction TWE HUD") - H = GLOB.huds[MOB_HUD_FACTION_TWE] - H.add_hud_to(src, src) + the_hud= GLOB.huds[MOB_HUD_FACTION_TWE] + the_hud.add_hud_to(src, src) if("Faction CLF HUD") - H = GLOB.huds[MOB_HUD_FACTION_CLF] - H.add_hud_to(src, src) + the_hud= GLOB.huds[MOB_HUD_FACTION_CLF] + the_hud.add_hud_to(src, src) + if(HUD_MENTOR_SIGHT) + the_hud= GLOB.huds[MOB_HUD_NEW_PLAYER] + the_hud.add_hud_to(src, src) see_invisible = INVISIBILITY_OBSERVER diff --git a/code/modules/mob/dead/observer/orbit.dm b/code/modules/mob/dead/observer/orbit.dm index 8c8d653331c9..871bae54b8fd 100644 --- a/code/modules/mob/dead/observer/orbit.dm +++ b/code/modules/mob/dead/observer/orbit.dm @@ -71,6 +71,7 @@ var/list/npcs = list() var/list/vehicles = list() var/list/escaped = list() + var/list/in_thunderdome = list() var/is_admin = FALSE if(user && user.client) @@ -84,32 +85,32 @@ serialized["ref"] = REF(poi) - var/mob/M = poi - if(!istype(M)) - if(isVehicleMultitile(M)) + var/mob/poi_mob = poi + if(!istype(poi_mob)) + if(isVehicleMultitile(poi_mob)) vehicles += list(serialized) else misc += list(serialized) continue - var/number_of_orbiters = length(M.get_all_orbiters()) + var/number_of_orbiters = length(poi_mob.get_all_orbiters()) if(number_of_orbiters) serialized["orbiters"] = number_of_orbiters - if(isobserver(M)) + if(isobserver(poi_mob)) ghosts += list(serialized) continue - if(M.stat == DEAD) + if(poi_mob.stat == DEAD) dead += list(serialized) continue - if(M.ckey == null) + if(poi_mob.ckey == null) npcs += list(serialized) continue - if(isliving(M)) - var/mob/living/player = M + if(isliving(poi_mob)) + var/mob/living/player = poi_mob serialized["health"] = floor(player.health / player.maxHealth * 100) if(isxeno(player)) @@ -119,6 +120,7 @@ serialized["caste"] = caste.caste_type serialized["icon"] = caste.minimap_icon serialized["hivenumber"] = xeno.hivenumber + serialized["area_name"] = get_area_name(xeno) xenos += list(serialized) continue @@ -144,7 +146,9 @@ else serialized["background_color"] = human.assigned_equipment_preset?.minimap_background - if(SSticker.mode.is_in_endgame == TRUE && !is_mainship_level(M.z) && !(human.faction in FACTION_LIST_ERT_ALL)) + if(istype(get_area(human), /area/tdome)) + in_thunderdome += list(serialized) + else if(SSticker.mode.is_in_endgame == TRUE && !is_mainship_level(human.z) && !(human.faction in FACTION_LIST_ERT_ALL) && !(isyautja(human))) escaped += list(serialized) else if(human.faction in FACTION_LIST_WY) wy += list(serialized) @@ -203,6 +207,7 @@ data["npcs"] = npcs data["vehicles"] = vehicles data["escaped"] = escaped + data["in_thunderdome"] = in_thunderdome data["icons"] = GLOB.minimap_icons return data diff --git a/code/modules/mob/death.dm b/code/modules/mob/death.dm index 8aea59b96a81..ba74c06fcaf1 100644 --- a/code/modules/mob/death.dm +++ b/code/modules/mob/death.dm @@ -49,7 +49,7 @@ return 0 if(!gibbed) - visible_message("\The [src.name] [deathmessage]") + visible_message("[src.name] [deathmessage]") if(cause_data && !istype(cause_data)) stack_trace("death called with string cause ([cause_data]) instead of datum") diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 7da0376bbef1..c82aa1f6de31 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -5,7 +5,7 @@ /// Species that can use this emote. var/list/species_type_allowed_typecache = list(/datum/species/human, /datum/species/synthetic, /datum/species/yautja) /// Species that can't use this emote. - var/list/species_type_blacklist_typecache = list(/datum/species/monkey) + var/list/species_type_blacklist_typecache = list(/datum/species/monkey, /datum/species/synthetic/synth_k9) /datum/emote/living/carbon/human/New() . = ..() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 0a6a42d09ba5..3739addc44f6 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1489,6 +1489,8 @@ /mob/living/carbon/human/synthetic/second/Initialize(mapload) . = ..(mapload, SYNTH_GEN_TWO) +/mob/living/carbon/human/synthetic/synth_k9/Initialize(mapload) + . = ..(mapload, SYNTH_K9) /mob/living/carbon/human/resist_fire() if(isyautja(src)) diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index e664143be74d..f1e09221d7c3 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -28,12 +28,6 @@ help_shake_act(attacking_mob) return 1 - if(attacking_mob.head && (attacking_mob.head.flags_inventory & COVERMOUTH) || attacking_mob.wear_mask && (attacking_mob.wear_mask.flags_inventory & COVERMOUTH) && !(attacking_mob.wear_mask.flags_inventory & ALLOWCPR)) - to_chat(attacking_mob, SPAN_NOTICE("Remove your mask!")) - return 0 - if(head && (head.flags_inventory & COVERMOUTH) || wear_mask && (wear_mask.flags_inventory & COVERMOUTH) && !(wear_mask.flags_inventory & ALLOWCPR)) - to_chat(attacking_mob, SPAN_NOTICE("Remove [src.gender==MALE?"his":"her"] mask!")) - return 0 if(cpr_attempt_timer >= world.time) to_chat(attacking_mob, SPAN_NOTICE("CPR is already being performed on [src]!")) return 0 diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 09ce5bb9c149..60bd986b8393 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -95,8 +95,8 @@ Contains most of the procs that are called when a mob is attacked by something /mob/living/carbon/human/proc/check_shields(damage = 0, attack_text = "the attack", combistick=0) if(l_hand && istype(l_hand, /obj/item/weapon))//Current base is the prob(50-d/3) - if(combistick && istype(l_hand,/obj/item/weapon/yautja/combistick) && prob(66)) - var/obj/item/weapon/yautja/combistick/C = l_hand + if(combistick && istype(l_hand,/obj/item/weapon/yautja/chained/combistick) && prob(66)) + var/obj/item/weapon/yautja/chained/combistick/C = l_hand if(C.on) return TRUE @@ -120,8 +120,8 @@ Contains most of the procs that are called when a mob is attacked by something return TRUE if(r_hand && istype(r_hand, /obj/item/weapon)) - if(combistick && istype(r_hand,/obj/item/weapon/yautja/combistick) && prob(66)) - var/obj/item/weapon/yautja/combistick/C = r_hand + if(combistick && istype(r_hand,/obj/item/weapon/yautja/chained/combistick) && prob(66)) + var/obj/item/weapon/yautja/chained/combistick/C = r_hand if(C.on) return TRUE diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 0bb446bf5f02..431086faabc5 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -138,7 +138,7 @@ var/last_chew = 0 //taken from human.dm - hud_possible = list(HEALTH_HUD, STATUS_HUD, STATUS_HUD_OOC, STATUS_HUD_XENO_INFECTION, STATUS_HUD_XENO_CULTIST, ID_HUD, WANTED_HUD, ORDER_HUD, XENO_HOSTILE_ACID, XENO_HOSTILE_SLOW, XENO_HOSTILE_TAG, XENO_HOSTILE_FREEZE, XENO_EXECUTE, HUNTER_CLAN, HUNTER_HUD, FACTION_HUD, HOLOCARD_HUD) + hud_possible = list(HEALTH_HUD, STATUS_HUD, STATUS_HUD_OOC, STATUS_HUD_XENO_INFECTION, STATUS_HUD_XENO_CULTIST, ID_HUD, WANTED_HUD, ORDER_HUD, XENO_HOSTILE_ACID, XENO_HOSTILE_SLOW, XENO_HOSTILE_TAG, XENO_HOSTILE_FREEZE, XENO_EXECUTE, HUNTER_CLAN, HUNTER_HUD, FACTION_HUD, HOLOCARD_HUD, NEW_PLAYER_HUD) var/embedded_flag //To check if we've need to roll for damage on movement while an item is imbedded in us. var/allow_gun_usage = TRUE var/melee_allowed = TRUE @@ -148,7 +148,7 @@ /// A list of all the shrapnel currently embedded in the human var/list/atom/movable/embedded_items = list() - var/list/synthetic_HUD_toggled = list(FALSE,FALSE) + var/list/inherent_huds_toggled = list(INHERENT_HUD_MEDICAL = FALSE, INHERENT_HUD_SECURITY = FALSE, INHERENT_HUD_NEW_PLAYER = FALSE) var/default_lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE @@ -172,6 +172,9 @@ /// Stored image references associated with focus-fire. var/image/focused_fire_marker + // Are we currently using inherent zoom vision? + var/is_zoomed = FALSE + /client/var/cached_human_playtime /client/proc/get_total_human_playtime(skip_cache = FALSE) diff --git a/code/modules/mob/living/carbon/human/powers/human_powers.dm b/code/modules/mob/living/carbon/human/powers/human_powers.dm index 9ba7fc7c523b..ad8a5fa1d524 100644 --- a/code/modules/mob/living/carbon/human/powers/human_powers.dm +++ b/code/modules/mob/living/carbon/human/powers/human_powers.dm @@ -314,22 +314,89 @@ if(usr.is_mob_incapacitated()) return - var/datum/mob_hud/H - var/chosen_HUD = 1 + var/datum/mob_hud/the_hud + var/chosen_HUD = INHERENT_HUD_MEDICAL switch(hud_choice) if("Medical HUD") - H = GLOB.huds[MOB_HUD_MEDICAL_ADVANCED] + the_hud = GLOB.huds[MOB_HUD_MEDICAL_ADVANCED] if("Security HUD") - H = GLOB.huds[MOB_HUD_SECURITY_ADVANCED] - chosen_HUD = 2 + the_hud = GLOB.huds[MOB_HUD_SECURITY_ADVANCED] + chosen_HUD = INHERENT_HUD_SECURITY else return - if(synthetic_HUD_toggled[chosen_HUD]) - synthetic_HUD_toggled[chosen_HUD] = FALSE - H.remove_hud_from(src, src) + if(inherent_huds_toggled[chosen_HUD]) + inherent_huds_toggled[chosen_HUD] = FALSE + the_hud.remove_hud_from(src, src) to_chat(src, SPAN_INFO("[hud_choice] Disabled")) else - synthetic_HUD_toggled[chosen_HUD] = TRUE - H.add_hud_to(src, src) + inherent_huds_toggled[chosen_HUD] = TRUE + the_hud.add_hud_to(src, src) to_chat(src, SPAN_INFO("[hud_choice] Enabled")) + +/mob/living/carbon/human/synthetic/synth_k9/proc/toggle_scent_tracking() + set category = "Synthetic" + set name = "Track Scent" + set desc = "Activates the K9's keen sense of smell." + + if(usr.is_mob_incapacitated()) + return + + if(!isk9synth(usr)) + return + + var/datum/species/synthetic/synth_k9/speciesk9 = species + + speciesk9.radar.tgui_interact(src) + +/mob/living/carbon/human/synthetic/synth_k9/proc/toggle_binocular_vision(mob/user) + set category = "Synthetic" + set name = "Binocular Vision" + set desc = "Activates the K9's keen sense of sight." + + if(usr.is_mob_incapacitated()) + return + + if(!is_zoomed) + enable_zoom() + user.visible_message(SPAN_NOTICE("[user] starts looking off into the distance."), \ + SPAN_NOTICE("You start focusing your sight to look off into the distance."), null, 5) + return + + if(is_zoomed) + disable_zoom() + return + +/mob/living/carbon/human/proc/enable_zoom() + var/viewsize = 12 + var/tileoffset = 11 + + if(is_zoomed || !client) + return + is_zoomed = TRUE + RegisterSignal(src, COMSIG_MOB_MOVE_OR_LOOK, PROC_REF(disable_zoom)) + client.change_view(viewsize) + var/viewoffset = 32 * tileoffset + switch(dir) + if(NORTH) + client.pixel_x = 0 + client.pixel_y = viewoffset + if(SOUTH) + client.pixel_x = 0 + client.pixel_y = -viewoffset + if(EAST) + client.pixel_x = viewoffset + client.pixel_y = 0 + if(WEST) + client.pixel_x = -viewoffset + client.pixel_y = 0 + +/mob/living/carbon/human/proc/disable_zoom() + SIGNAL_HANDLER + if(!client) + return + UnregisterSignal(src, COMSIG_MOB_MOVE_OR_LOOK) + client.change_view(GLOB.world_view_size) + client.pixel_x = 0 + client.pixel_y = 0 + is_zoomed = FALSE diff --git a/code/modules/mob/living/carbon/human/species/emote-monkey.dm b/code/modules/mob/living/carbon/human/species/emote-monkey.dm index 52b6d31c4fe0..c05d2fe58b83 100644 --- a/code/modules/mob/living/carbon/human/species/emote-monkey.dm +++ b/code/modules/mob/living/carbon/human/species/emote-monkey.dm @@ -1,7 +1,11 @@ /datum/emote/living/carbon/human/primate species_type_allowed_typecache = list(/datum/species/monkey) + species_type_blacklist_typecache = list() keybind = FALSE +/datum/emote/living/carbon/human/primate/New() //Monkey's are blacklisted from human emotes on emote.dm, we need to not block the new emotes below + . = ..() + /datum/emote/living/carbon/human/primate/jump key = "jump" key_third_person = "jumps" diff --git a/code/modules/mob/living/carbon/human/species/emote-synth_k9.dm b/code/modules/mob/living/carbon/human/species/emote-synth_k9.dm new file mode 100644 index 000000000000..376449f6d688 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/emote-synth_k9.dm @@ -0,0 +1,31 @@ +/datum/emote/living/carbon/human/synthetic/synth_k9/New() //K9's are blacklisted from human emotes on emote.dm, we need to not block the new emotes below + . = ..() + +//Synth K9 Emotes +/datum/emote/living/carbon/human/synthetic/synth_k9 + species_type_allowed_typecache = list(/datum/species/synthetic/synth_k9) + species_type_blacklist_typecache = list() + keybind_category = CATEGORY_SYNTH_EMOTE + volume = 75 + +//Standard Bark +/datum/emote/living/carbon/human/synthetic/synth_k9/bark + key = "bark" + key_third_person = "barks" + message = "barks." + audio_cooldown = 3 SECONDS + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/synth_k9/bark/get_sound(mob/living/user) + return pick('sound/voice/barkstrong1.ogg','sound/voice/barkstrong2.ogg','sound/voice/barkstrong3.ogg') + +//Threatening Growl +/datum/emote/living/carbon/human/synthetic/synth_k9/growl + key = "growl" + key_third_person = "growls" + message = "growls." + audio_cooldown = 3 SECONDS + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/synth_k9/growl/get_sound(mob/living/user) + return pick('sound/voice/growl1.ogg','sound/voice/growl2.ogg','sound/voice/growl3.ogg','sound/voice/growl4.ogg') diff --git a/code/modules/mob/living/carbon/human/species/human.dm b/code/modules/mob/living/carbon/human/species/human.dm index 320aa9504826..208f304bc3b4 100644 --- a/code/modules/mob/living/carbon/human/species/human.dm +++ b/code/modules/mob/living/carbon/human/species/human.dm @@ -90,6 +90,8 @@ mob_flags = KNOWS_TECHNOLOGY uses_skin_color = TRUE special_body_types = TRUE + fire_sprite_prefix = "Standing" + fire_sprite_sheet = 'icons/mob/humans/onmob/OnFire.dmi' /datum/species/human/handle_on_fire(humanoidmob) . = ..() diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm index 2973e4b6a556..152a6a9a1b70 100644 --- a/code/modules/mob/living/carbon/human/species/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/monkey.dm @@ -21,6 +21,8 @@ /mob/living/proc/ventcrawl, /mob/living/proc/hide, ) + fire_sprite_prefix = "monkey" + fire_sprite_sheet = 'icons/mob/humans/onmob/OnFire.dmi' /datum/species/monkey/New() equip_adjust = list( diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index cc2849e57274..6ca7fa0bd68d 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -119,6 +119,9 @@ var/has_species_tab_items = FALSE + var/fire_sprite_prefix = "Standing" + var/fire_sprite_sheet = 'icons/mob/humans/onmob/OnFire.dmi' + /datum/species/New() if(unarmed_type) unarmed = new unarmed_type() diff --git a/code/modules/mob/living/carbon/human/species/synth_k9.dm b/code/modules/mob/living/carbon/human/species/synth_k9.dm new file mode 100644 index 000000000000..fa067d87e5ef --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/synth_k9.dm @@ -0,0 +1,41 @@ +//woof! +/datum/species/synthetic/synth_k9 + name = SPECIES_SYNTHETIC_K9 + uses_skin_color = FALSE + + slowdown = -1.75 //Faster than Human run, slower than rooney run + + icobase = 'icons/mob/humans/species/synth_k9/r_k9.dmi' + deform = 'icons/mob/humans/species/synth_k9/r_k9.dmi' + eyes = "blank_eyes_s" + blood_mask = 'icons/mob/humans/species/synth_k9/r_k9.dmi' + unarmed_type = /datum/unarmed_attack/bite/synthetic + secondary_unarmed_type = /datum/unarmed_attack + death_message = "lets out a faint whimper as it collapses and stops moving..." + flags = IS_WHITELISTED|NO_BREATHE|NO_CLONE_LOSS|NO_BLOOD|NO_POISON|IS_SYNTHETIC|NO_CHEM_METABOLIZATION|NO_NEURO|NO_OVERLAYS + + mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_IRON_TEETH, TRAIT_EMOTE_CD_EXEMPT) + + fire_sprite_prefix = "k9" + fire_sprite_sheet = 'icons/mob/humans/onmob/OnFire.dmi' + + inherent_verbs = list( + /mob/living/carbon/human/synthetic/proc/toggle_HUD, + /mob/living/carbon/human/proc/toggle_inherent_nightvison, + /mob/living/carbon/human/synthetic/synth_k9/proc/toggle_scent_tracking, + /mob/living/carbon/human/synthetic/synth_k9/proc/toggle_binocular_vision, + ) + + //Scent tracking + var/datum/radar/scenttracker/radar + var/faction = FACTION_MARINE + +//Lets have a place for radar data to live +/datum/species/synthetic/synth_k9/handle_post_spawn(mob/living/carbon/human/spawned_k9) + . = ..() + radar = new /datum/radar/scenttracker(spawned_k9, faction) + +/datum/species/synthetic/synth_k9/Destroy() + . = ..() + qdel(radar) + faction = null diff --git a/code/modules/mob/living/carbon/human/unarmed_attacks.dm b/code/modules/mob/living/carbon/human/unarmed_attacks.dm index f933e853207a..8d4ca1df6d8d 100644 --- a/code/modules/mob/living/carbon/human/unarmed_attacks.dm +++ b/code/modules/mob/living/carbon/human/unarmed_attacks.dm @@ -23,6 +23,14 @@ sharp = TRUE edge = TRUE +/datum/unarmed_attack/bite/synthetic + attack_verb = list("gnash", "chew", "munch", "crunch") + attack_sound = 'sound/weapons/alien_bite1.ogg' + shredding = FALSE + damage = 35 + sharp = TRUE + edge = TRUE + /datum/unarmed_attack/bite/is_usable(mob/living/carbon/human/user) if(!user.melee_allowed) return FALSE diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 6b2739780288..1cf4403f12c4 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -328,6 +328,9 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate, client.add_to_screen(w_uniform) w_uniform.screen_loc = hud_used.ui_datum.hud_slot_offset(w_uniform, hud_used.ui_datum.ui_iclothing) + if(species.flags & NO_OVERLAYS && !w_uniform.force_overlays_on) + return + if(!(wear_suit && wear_suit.flags_inv_hide & HIDEJUMPSUIT)) var/image/I = w_uniform.get_mob_overlay(src, WEAR_BODY) I.layer = -UNIFORM_LAYER @@ -348,6 +351,8 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate, var/obj/item/card/id/card = get_idcard() if(!card) return + if(species.flags & NO_OVERLAYS && !wear_id.force_overlays_on) + return if(!card.pinned_on_uniform || (w_uniform && w_uniform.displays_id && !(w_uniform.flags_jumpsuit & UNIFORM_JACKET_REMOVED))) var/image/id_overlay = card.get_mob_overlay(src, WEAR_ID) id_overlay.layer = -ID_LAYER @@ -362,6 +367,9 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate, client.add_to_screen(gloves) gloves.screen_loc = hud_used.ui_datum.hud_slot_offset(gloves, hud_used.ui_datum.ui_gloves) + if(species.flags & NO_OVERLAYS && !gloves.force_overlays_on) + return + if(!(wear_suit && wear_suit.flags_inv_hide & HIDEGLOVES)) I = gloves.get_mob_overlay(src, WEAR_HANDS) @@ -381,6 +389,9 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate, client.add_to_screen(glasses) glasses.screen_loc = hud_used.ui_datum.hud_slot_offset(glasses, hud_used.ui_datum.ui_glasses) + if(species.flags & NO_OVERLAYS && !glasses.force_overlays_on) + return + var/image/I = glasses.get_mob_overlay(src, WEAR_EYES) I.layer = -GLASSES_LAYER overlays_standing[GLASSES_LAYER] = I @@ -399,6 +410,9 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate, wear_l_ear?.screen_loc = hud_used.ui_datum.hud_slot_offset(wear_l_ear, hud_used.ui_datum.ui_wear_l_ear) wear_r_ear?.screen_loc = hud_used.ui_datum.hud_slot_offset(wear_r_ear, hud_used.ui_datum.ui_wear_r_ear) + if(species.flags & NO_OVERLAYS) + return + var/image/standing_image = image('icons/mob/humans/onmob/med_human.dmi', icon_state = "blank", layer = -EARS_LAYER) standing_image.overlays += wear_l_ear?.get_mob_overlay(src, WEAR_L_EAR) @@ -417,6 +431,9 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate, client.add_to_screen(shoes) shoes.screen_loc = hud_used.ui_datum.hud_slot_offset(shoes, hud_used.ui_datum.ui_shoes) + if(species.flags & NO_OVERLAYS && !shoes.force_overlays_on) + return + if(!((wear_suit && wear_suit.flags_inv_hide & HIDESHOES) || (w_uniform && w_uniform.flags_inv_hide & HIDESHOES))) I = shoes.get_mob_overlay(src, WEAR_FEET) @@ -436,6 +453,9 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate, client.add_to_screen(s_store) s_store.screen_loc = hud_used.ui_datum.hud_slot_offset(s_store, hud_used.ui_datum.ui_sstore1) + if(species.flags & NO_OVERLAYS && !s_store.force_overlays_on) + return + var/image/I = s_store.get_mob_overlay(src, WEAR_J_STORE) I.layer = -SUIT_STORE_LAYER overlays_standing[SUIT_STORE_LAYER] = I @@ -456,6 +476,9 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate, client.add_to_screen(head) head.screen_loc = hud_used.ui_datum.hud_slot_offset(head, hud_used.ui_datum.ui_head) + if(species.flags & NO_OVERLAYS && !head.force_overlays_on) + return + var/image/I = head.get_mob_overlay(src, WEAR_HEAD) I.layer = -HEAD_LAYER overlays_standing[HEAD_LAYER] = I @@ -501,6 +524,9 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate, client.add_to_screen(belt) belt.screen_loc = hud_used.ui_datum.hud_slot_offset(belt, hud_used.ui_datum.ui_belt) + if(species.flags & NO_OVERLAYS && !belt.force_overlays_on) + return + var/image/I = belt.get_mob_overlay(src, WEAR_WAIST) I.layer = -BELT_LAYER overlays_standing[BELT_LAYER] = I @@ -518,6 +544,9 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate, client.add_to_screen(wear_suit) wear_suit.screen_loc = hud_used.ui_datum.hud_slot_offset(wear_suit, hud_used.ui_datum.ui_oclothing) + if(species.flags & NO_OVERLAYS && !wear_suit.force_overlays_on) + return + var/image/I = wear_suit.get_mob_overlay(src, WEAR_JACKET) I.layer = -SUIT_LAYER overlays_standing[SUIT_LAYER] = I @@ -566,6 +595,9 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate, if(!(client && hud_used && hud_used.hud_shown && hud_used.ui_datum)) return + if(species.flags & NO_OVERLAYS) + return + if(l_store) client.add_to_screen(l_store) l_store.screen_loc = hud_used.ui_datum.hud_slot_offset(l_store, hud_used.ui_datum.ui_storage1) @@ -582,6 +614,9 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate, client.add_to_screen(wear_mask) wear_mask.screen_loc = hud_used.ui_datum.hud_slot_offset(wear_mask, hud_used.ui_datum.ui_mask) + if(species.flags & NO_OVERLAYS && !wear_mask.force_overlays_on) + return + if(!(head && head.flags_inv_hide & HIDEMASK)) var/image/I = wear_mask.get_mob_overlay(src, WEAR_FACE) I.layer = -FACEMASK_LAYER @@ -596,6 +631,9 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate, client.add_to_screen(back) back.screen_loc = hud_used.ui_datum.hud_slot_offset(back, hud_used.ui_datum.ui_back) + if(species.flags & NO_OVERLAYS && !back.force_overlays_on) + return + var/image/I = back.get_mob_overlay(src, WEAR_BACK) I.layer = -BACK_LAYER @@ -710,13 +748,17 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate, if(!on_fire) set_light_on(FALSE) return + + var/fire_sprite_sheet = species.fire_sprite_sheet + var/fire_sprite_prefix = species.fire_sprite_prefix + var/image/I switch(fire_stacks) if(1 to 14) - I = image("icon"='icons/mob/humans/onmob/OnFire.dmi', "icon_state"="Standing_weak", "layer"= -FIRE_LAYER) + I = image(icon = fire_sprite_sheet, icon_state = "[fire_sprite_prefix]_weak", layer = -FIRE_LAYER) set_light_range(2) if(15 to INFINITY) - I = image("icon"='icons/mob/humans/onmob/OnFire.dmi', "icon_state"="Standing_medium", "layer"= -FIRE_LAYER) + I = image(icon = fire_sprite_sheet, icon_state = "[fire_sprite_prefix]_medium", layer = -FIRE_LAYER) set_light_range(3) else return diff --git a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm index 686c15b5c380..1a10d6c70ddc 100644 --- a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm +++ b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm @@ -45,7 +45,7 @@ see_in_dark = 12 recovery_constant = 1.5 see_invisible = SEE_INVISIBLE_LIVING - hud_possible = list(HEALTH_HUD_XENO, PLASMA_HUD, PHEROMONE_HUD, QUEEN_OVERWATCH_HUD, ARMOR_HUD_XENO, XENO_STATUS_HUD, XENO_BANISHED_HUD, XENO_HOSTILE_ACID, XENO_HOSTILE_SLOW, XENO_HOSTILE_TAG, XENO_HOSTILE_FREEZE, HUNTER_HUD) + hud_possible = list(HEALTH_HUD_XENO, PLASMA_HUD, PHEROMONE_HUD, QUEEN_OVERWATCH_HUD, ARMOR_HUD_XENO, XENO_STATUS_HUD, XENO_BANISHED_HUD, XENO_HOSTILE_ACID, XENO_HOSTILE_SLOW, XENO_HOSTILE_TAG, XENO_HOSTILE_FREEZE, HUNTER_HUD, NEW_PLAYER_HUD) unacidable = TRUE rebounds = TRUE faction = FACTION_XENOMORPH diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/giant_lizard.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/giant_lizard.dm index 91cf46d1491c..0c58ca612514 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/giant_lizard.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/giant_lizard.dm @@ -34,18 +34,27 @@ speak_chance = 2 speak_emote = "hisses" emote_hear = list("hisses.", "growls.", "roars.", "bellows.") - emote_see = list("shakes its head.", "wags its tail.", "flicks its tongue.", "yawns.") + emote_see = list("shakes its head.", "wags its tail.", "yawns.") melee_damage_lower = 20 melee_damage_upper = 25 + break_stuff_probability = 100 attack_same = FALSE langchat_color = LIGHT_COLOR_GREEN ///Reference to the ZZzzz sleep overlay when resting. var/sleep_overlay + ///Reference to the tongue flick overlay. + var/atom/movable/vis_obj/giant_lizard_icon_holder/tongue_icon_holder + ///Reference to the wound icon. + var/atom/movable/vis_obj/giant_lizard_icon_holder/wound_icon_holder + ///How far the mob is willing to chase before losing its target. + var/max_attack_distance = 16 ///If 0, moves the mob out of attacking into idle state. Used to prevent the mob from chasing down targets that did not mean to hurt it. var/aggression_value = 0 + ///Every type of structure that can get attacked in the DestroySurroundings() proc. + var/list/destruction_targets = list(/obj/structure/mineral_door/resin, /obj/structure/window, /obj/structure/closet, /obj/structure/surface/table, /obj/structure/grille, /obj/structure/barricade, /obj/structure/machinery/door, /obj/structure/largecrate) ///Emotes to play when being pet by a friend. var/list/pet_emotes = list("closes its eyes.", "growls happily.", "wags its tail.", "rolls on the ground.") @@ -71,11 +80,12 @@ var/retreat_attempts = 0 ///Tied directly to retreat_attempts. If our retreat fail, then we will completely stop trying to retreat for the length of this cooldown. COOLDOWN_DECLARE(retreat_cooldown) - + ///Can this mob be tamed? + var/tameable = TRUE ///The food object that the mob is trying to eat. var/food_target - ///A list of foods the mob is interested in eating. - var/list/acceptable_foods = list(/obj/item/reagent_container/food/snacks/meat, /obj/item/reagent_container/food/snacks/packaged_meal, /obj/item/reagent_container/food/snacks/resin_fruit) + ///A list of foods the mob is interested in eating. The mob will eat anything that has meat protein in it even if it's not in this list. + var/list/acceptable_foods = list(/obj/item/reagent_container/food/snacks/packaged_meal, /obj/item/reagent_container/food/snacks/resin_fruit) ///Is the mob currently eating the food_target? var/is_eating = FALSE ///Cooldown dictating how long the mob will wait between eating food. @@ -86,13 +96,75 @@ ///Cooldown for when the mob calms down, so the mob doesn't start attacking immediately after calming down. COOLDOWN_DECLARE(calm_cooldown) +//For displaying wound states, and the tongue flicker. +/atom/movable/vis_obj/giant_lizard_icon_holder + icon = 'icons/mob/mob_64.dmi' + +//Due to being constrained to 64x64, we need to change the icon's offsets manually whenever the mob's dir is changed. +//apparantly movement sets both olddir and newdir to the same value, in comparison to manually switching facing which returns the right values. +//i don't know if there's any worthwhile performance gain in having a second signal exclusively for movement so we can check if the olddir and newdir are same. +/mob/living/simple_animal/hostile/retaliate/giant_lizard/proc/change_tongue_offset(datum/source, olddir, newdir) + SIGNAL_HANDLER + + if(!newdir) + newdir = dir + + switch(newdir) + if(WEST) + if(resting) + tongue_icon_holder.pixel_x = 7 + tongue_icon_holder.pixel_y = -4 + return + + tongue_icon_holder.pixel_x = -2 + tongue_icon_holder.pixel_y = 0 + + if(EAST) + if(resting) + tongue_icon_holder.pixel_x = -7 + tongue_icon_holder.pixel_y = -4 + return + + tongue_icon_holder.pixel_x = 2 + tongue_icon_holder.pixel_y = 0 + if(SOUTH) + tongue_icon_holder.pixel_x = 0 + tongue_icon_holder.pixel_y = 0 + //there is no north facing tongue animation + +/mob/living/simple_animal/hostile/retaliate/giant_lizard/face_dir(ndir, specific_dir) + //there is no north or south facing rest sprite, so updating the direction would mess up tongue flicking. + if(resting && (ndir == NORTH || ndir == SOUTH)) + return + return ..() + +//we also have to check for the keybind apparantly... +/mob/living/simple_animal/hostile/retaliate/giant_lizard/keybind_face_direction(direction) + if(resting && (direction == NORTH || direction == SOUTH)) + return + return ..() + /mob/living/simple_animal/hostile/retaliate/giant_lizard/Initialize() . = ..() + wound_icon_holder = new(null, src) + tongue_icon_holder = new(null, src) + tongue_icon_holder.pixel_x = 2 + vis_contents += wound_icon_holder + vis_contents += tongue_icon_holder + + RegisterSignal(src, COMSIG_ATOM_DIR_CHANGE, PROC_REF(change_tongue_offset)) + + GLOB.giant_lizards_alive++ change_real_name(src, "[name] ([rand(1, 999)])") pounce_callbacks[/mob] = DYNAMIC(/mob/living/simple_animal/hostile/retaliate/giant_lizard/proc/pounced_mob_wrapper) pounce_callbacks[/turf] = DYNAMIC(/mob/living/simple_animal/hostile/retaliate/giant_lizard/proc/pounced_turf_wrapper) pounce_callbacks[/obj] = DYNAMIC(/mob/living/simple_animal/hostile/retaliate/giant_lizard/proc/pounced_obj_wrapper) +/mob/living/simple_animal/hostile/retaliate/giant_lizard/initialize_pass_flags(datum/pass_flags_container/pass_flags_container) + ..() + if(pass_flags_container) + pass_flags_container.flags_pass |= PASS_FLAGS_CRAWLER + //regular pain datum will make the mob die when trying to pounce after taking enough damage. /mob/living/simple_animal/hostile/retaliate/giant_lizard/initialize_pain() pain = new /datum/pain/xeno(src) @@ -128,11 +200,16 @@ . = ..() find_target_on_trait_loss() +/mob/living/simple_animal/hostile/retaliate/giant_lizard/on_floored_trait_loss(datum/source) + . = ..() + find_target_on_trait_loss() + ///Proc for handling the AI post-status effect. /mob/living/simple_animal/hostile/retaliate/giant_lizard/proc/find_target_on_trait_loss() + update_transform() is_retreating = FALSE if(stance > HOSTILE_STANCE_ALERT) - FindTarget() + target_mob = FindTarget() MoveToTarget() //procs for handling sleeping icons when resting @@ -154,6 +231,7 @@ walk_to(src, 0) /mob/living/simple_animal/hostile/retaliate/giant_lizard/update_transform(instant_update = FALSE) + tongue_icon_holder.alpha = alpha if(stat == DEAD) icon_state = icon_dead else if(body_position == LYING_DOWN) @@ -161,10 +239,47 @@ icon_state = "Giant Lizard Sleeping" else icon_state = "Giant Lizard Knocked Down" + tongue_icon_holder.alpha = 0 + //we can't stop an animation that's called via flick(). best we can do is hide it. else icon_state = icon_living + update_wounds() + change_tongue_offset() return ..() + +#define NO_WOUNDS 4 +#define SMALL_WOUNDS 3 +#define BIG_WOUNDS 2 + +/mob/living/simple_animal/hostile/retaliate/giant_lizard/proc/update_wounds() + if(!wound_icon_holder) + return + + var/health_threshold = max(ceil((health * 4) / (maxHealth)), 0) //From 0 to 4, in 25% chunks + switch(health_threshold) + if(NO_WOUNDS) + health_threshold = "none" + if(SMALL_WOUNDS) + health_threshold = "Wounds Small" + if(0 to BIG_WOUNDS) + health_threshold = "Wounds Big" + + if(health > 0) + if(health_threshold == "none") + wound_icon_holder.icon_state = "none" + else if(body_position == LYING_DOWN) + if(!HAS_TRAIT(src, TRAIT_INCAPACITATED) && !HAS_TRAIT(src, TRAIT_FLOORED)) + wound_icon_holder.icon_state = "Giant Lizard [health_threshold] Rest" + else + wound_icon_holder.icon_state = "Giant Lizard [health_threshold] Stun" + else + wound_icon_holder.icon_state = "Giant Lizard [health_threshold]" + +#undef NO_WOUNDS +#undef SMALL_WOUNDS +#undef BIG_WOUNDS + /mob/living/simple_animal/hostile/retaliate/giant_lizard/get_examine_text(mob/user) . = ..() if(stat == DEAD || user == src) @@ -183,13 +298,22 @@ /mob/living/simple_animal/hostile/retaliate/giant_lizard/set_resting(new_resting, silent, instant) . = ..() + //north and south rest sprites don't exist, we need to set it to WEST for tongue flicks to work properly + if(resting && dir == NORTH || dir == SOUTH) + setDir(WEST) if(!resting) RemoveSleepingIcon() update_transform() -/mob/living/simple_animal/hostile/retaliate/giant_lizard/death() +/mob/living/simple_animal/hostile/retaliate/giant_lizard/rejuvenate() + //if the mob was dead beforehand, it's now alive and therefore it's an extra lizard to the count + if(stat == DEAD) + GLOB.giant_lizards_alive++ + return ..() + +/mob/living/simple_animal/hostile/retaliate/giant_lizard/death(datum/cause_data/cause_data, gibbed = FALSE, deathmessage = "lets out a waning growl....") playsound(loc, 'sound/effects/giant_lizard_death.ogg', 70) - manual_emote("lets out a waning growl.") + GLOB.giant_lizards_alive-- return ..() /mob/living/simple_animal/hostile/retaliate/giant_lizard/attack_hand(mob/living/carbon/human/attacking_mob) @@ -224,11 +348,13 @@ chance_to_rest = 0 if(COOLDOWN_FINISHED(src, emote_cooldown)) COOLDOWN_START(src, emote_cooldown, rand(5, 8) SECONDS) - manual_emote(pick(pick(pet_emotes), "stares at [attacking_mob].", "nuzzles [attacking_mob].", "licks [attacking_mob]'s hand."), "nibbles [attacking_mob]'s arm.", "flicks its tongue at [attacking_mob].") + manual_emote(pick(pick(pet_emotes), "stares at [attacking_mob].", "nuzzles [attacking_mob].", "licks [attacking_mob]'s hand."), "nibbles [attacking_mob]'s arm.") if(prob(50)) playsound(loc, "giant_lizard_hiss", 25) - if(attacking_mob.a_intent == INTENT_DISARM && prob(75)) - step_to(src, get_step(loc, attacking_mob.dir), 0, LIZARD_SPEED_NORMAL) + flick("Giant Lizard Tongue", tongue_icon_holder) + if(attacking_mob.a_intent == INTENT_DISARM && prob(25)) + playsound(loc, 'sound/weapons/alien_knockdown.ogg', 25, 1) + KnockDown(0.4) //apply blood splatter when attacked by a sufficently damaging sharp weapon /mob/living/simple_animal/hostile/retaliate/giant_lizard/attackby(obj/item/weapon, mob/living/carbon/human/attacker) @@ -249,14 +375,15 @@ addtimer(VARSET_CALLBACK(src, speed, LIZARD_SPEED_NORMAL_CLIENT), 8 SECONDS) addtimer(VARSET_CALLBACK(src, is_retreating, FALSE), 8 SECONDS) else - MoveTo(target_mob, 12, TRUE, 8 SECONDS) + MoveTo(target_mob, 12, TRUE, 4.5 SECONDS) if(damage >= 10 && damagetype == BRUTE) add_splatter_floor(loc, TRUE) bleed_ticks = clamp(bleed_ticks + ceil(damage / 10), 0, 30) + update_wounds() ///Proc that forces the mob to disengage and try to extinguish itself. Will not be called if the mob is already retreating. /mob/living/simple_animal/hostile/retaliate/giant_lizard/proc/try_to_extinguish() - if(is_retreating || !on_fire || client) + if(is_retreating || !on_fire || client || stat == DEAD || body_position == LYING_DOWN) return //forget EVERYTHING. we need to stop the flames!!! @@ -280,17 +407,28 @@ try_to_extinguish() /mob/living/simple_animal/hostile/retaliate/giant_lizard/Life(delta_time) - //simplemobs don't have innate knockdown reduction so we'll manually lower it here. - AdjustKnockDown(-0.5) - AdjustStun(-0.5) + //simplemobs don't have innate knockdown reduction so we'll just remove the status effects manually. works alright due to the 2 second delay on life() + SetKnockOut(0) + SetStun(0) + SetKnockDown(0) if(aggression_value > 0) aggression_value-- + //it is possible for the mob to keep a target_mob saved, yet be stuck in alert stance and never lose said target. + //this will cause it to be paralyzed and do nothing for the rest of its life, so this specific check is here to remedy that (hopefully) + if(!client && stance == HOSTILE_STANCE_ALERT && target_mob && !is_retreating && !on_fire) + target_mob = FindTarget() + MoveToTarget() + if(resting && stat != DEAD) health += maxHealth * 0.05 + update_wounds() if(prob(33) && !HAS_TRAIT(src, TRAIT_INCAPACITATED) && !HAS_TRAIT(src, TRAIT_FLOORED)) AddSleepingIcon() + if(stat != DEAD && !HAS_TRAIT(src, TRAIT_INCAPACITATED) && !HAS_TRAIT(src, TRAIT_FLOORED) && prob(25)) + flick("Giant Lizard Tongue", tongue_icon_holder) + if(bleed_ticks) var/is_small_pool = FALSE if(bleed_ticks < 10) @@ -298,6 +436,20 @@ bleed_ticks-- add_splatter_floor(loc, is_small_pool) + //done before the parent proccall because it would result in it moving before resting + if(stance == HOSTILE_STANCE_IDLE && !client) + stop_automated_movement = FALSE + //if there's a friend on the same tile as us, don't bother getting up (cute!) + var/mob/living/carbon/friend = locate(/mob/living/carbon) in get_turf(src) + if((friend?.faction in faction_group) && resting) + chance_to_rest = 0 + + if(prob(chance_to_rest)) + set_resting(!resting) + chance_to_rest = 0 + + chance_to_rest += rand(1, 2) + . = ..() if(client) @@ -316,19 +468,6 @@ if(stance > HOSTILE_STANCE_ALERT) is_eating = FALSE - if(stance == HOSTILE_STANCE_IDLE) - stop_automated_movement = FALSE - //if there's a friend on the same tile as us, don't bother getting up (cute!) - var/mob/living/carbon/friend = locate(/mob/living/carbon) in get_turf(src) - if((friend?.faction in faction_group) && resting) - chance_to_rest = 0 - - if(prob(chance_to_rest)) - set_resting(!resting) - chance_to_rest = 0 - - chance_to_rest += rand(1, 2) - //if we're resting and something catches our interest, get up if(stance != HOSTILE_STANCE_IDLE && resting) set_resting(FALSE) @@ -336,6 +475,10 @@ if(target_mob && !is_retreating && target_mob.stat == CONSCIOUS && stance == HOSTILE_STANCE_ATTACKING && COOLDOWN_FINISHED(src, pounce_cooldown) && (prob(75) || get_dist(src, target_mob) <= 5) && (target_mob in view(5, src))) pounce(target_mob) + //if we're trying to get away and there's obstacles around us, try to break them + if(target_mob && is_retreating && stance >= HOSTILE_STANCE_ALERT && destroy_surroundings) + INVOKE_ASYNC(src, PROC_REF(DestroySurroundings)) + if(target_mob || on_fire) return @@ -345,15 +488,16 @@ stance = HOSTILE_STANCE_IDLE //if we're hungry and we don't have already have our eyes on a snack, try eating food if possible - if(!food_target && COOLDOWN_FINISHED(src, food_cooldown)) + if(tameable && !food_target && COOLDOWN_FINISHED(src, food_cooldown)) for(var/obj/item/reagent_container/food/snacks/food in view(6, src)) - if(!is_type_in_list(food, acceptable_foods)) - continue - food_target = food - stance = HOSTILE_STANCE_ALERT - stop_automated_movement = TRUE - MoveTo(food_target) - break + var/is_meat = locate(/datum/reagent/nutriment/meat) in food.reagents.reagent_list + + if(is_type_in_list(food, acceptable_foods) || is_meat) + food_target = food + stance = HOSTILE_STANCE_ALERT + stop_automated_movement = TRUE + MoveTo(food_target) + break //handling mobs that are invading our personal space if(stance <= HOSTILE_STANCE_ALERT && !food_target && COOLDOWN_FINISHED(src, calm_cooldown)) @@ -385,7 +529,6 @@ else if(!check_food_loc(food_target) && Adjacent(food_target)) INVOKE_ASYNC(src, PROC_REF(handle_food), food_target) - /mob/living/simple_animal/hostile/retaliate/giant_lizard/bullet_act(obj/projectile/projectile) . = ..() if(projectile.damage) @@ -418,6 +561,11 @@ target.attack_animal(src) animation_attack_on(target) + //xenos take extra damage + if(isxeno(target)) + var/extra_damage = rand(melee_damage_lower, melee_damage_upper) * 0.33 + target.apply_damage(extra_damage, BRUTE) + if(prob(33)) if(client && !is_retreating) is_retreating = TRUE @@ -429,6 +577,33 @@ MoveTo(target_mob, 8, TRUE, 2 SECONDS, TRUE) //skirmish around our target return target + if(isStructure(inherited_target)) + var/obj/structure/structure = inherited_target + if(structure.unslashable) + return + + var/is_xeno_structure = FALSE + if(structure.flags_obj & OBJ_ORGANIC) + is_xeno_structure = TRUE + + animation_attack_on(structure) + playsound(loc, is_xeno_structure ? "alien_resin_break" : 'sound/effects/metalhit.ogg', 25) + visible_message(SPAN_DANGER("[src] slashes [structure]!"), SPAN_DANGER("You slash [structure]!"), null, 5, CHAT_TYPE_COMBAT_ACTION) + var/damage_multiplier = 2 + if(is_xeno_structure) + damage_multiplier = !client ? 15 : 5 //ai mobs need that extra oomph else they won't be able to break anything before they die + structure.update_health(rand(melee_damage_lower, melee_damage_upper) * damage_multiplier) + return + + if(client && !is_eating && istype(inherited_target, /obj/item/reagent_container/food/snacks)) + handle_food_client(inherited_target) + return + + //if it's not an object or a structure, just swipe at it + animation_attack_on(inherited_target) + visible_message(SPAN_DANGER("[src] swipes at [inherited_target]!"), SPAN_DANGER("You swipe at [inherited_target]!"), null, 5, CHAT_TYPE_COMBAT_ACTION) + playsound(loc, 'sound/weapons/alien_claw_swipe.ogg', 10, 1) + //Used to handle attacks when a client is in the mob. Otherwise we'd default to a generic animal attack. /mob/living/simple_animal/hostile/retaliate/giant_lizard/UnarmedAttack(atom/target) var/tile_attack = FALSE @@ -444,9 +619,32 @@ target = targets break - if(isliving(target)) - AttackingTarget(target) - next_move = world.time + 8 + AttackingTarget(target) + //turf attacks are missed attacks so it should just be a minor penalty to attack delay + next_move = isturf(target) ? world.time + 4 : world.time + 8 + +/mob/living/simple_animal/hostile/retaliate/giant_lizard/DestroySurroundings() + if(!prob(break_stuff_probability)) + return + + for(var/obj/structure/obstacle in view(1, src)) + if(is_type_in_list(obstacle, destruction_targets)) + AttackingTarget(obstacle) + return + +//no longer checks for distance with ListTargets(). thershold for losing targets is increased, due to needing range for skirmishing +/mob/living/simple_animal/hostile/retaliate/giant_lizard/AttackTarget() + stop_automated_movement = TRUE + if(!target_mob || SA_attackable(target_mob)) + LoseTarget() + return + if(get_dist(src, target_mob) > max_attack_distance) + LoseTarget() + return + if(in_range(src, target_mob)) //Attacking + AttackingTarget() + return TRUE + ///Proc for when the mob finds food and starts DEVOURING it. /mob/living/simple_animal/hostile/retaliate/giant_lizard/proc/handle_food(obj/item/reagent_container/food/snacks/food) @@ -460,19 +658,38 @@ playsound(loc,'sound/items/eatfood.ogg', 25, 1) for(var/mob/living/carbon/nearest_mob in view(7, src)) - if(nearest_mob != food.last_dropped_by || (nearest_mob in faction_group)) + if(nearest_mob != food.last_dropped_by || (nearest_mob.faction in faction_group)) continue face_atom(nearest_mob) manual_emote("stares curiously at [nearest_mob].") faction_group += nearest_mob.faction_group break + health += maxHealth * 0.15 + update_wounds() qdel(food) food_target = null is_eating = FALSE stance = HOSTILE_STANCE_IDLE COOLDOWN_START(src, food_cooldown, 30 SECONDS) +/mob/living/simple_animal/hostile/retaliate/giant_lizard/proc/handle_food_client(obj/item/reagent_container/food/snacks/food) + manual_emote("starts gnawing [food].") + playsound(loc,'sound/items/eatfood.ogg', 25, 1) + is_eating = TRUE + if(!do_after(src, 4 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_FRIENDLY)) + is_eating = FALSE + return + + is_eating = FALSE + if(!Adjacent(food)) + return + + playsound(loc,'sound/items/eatfood.ogg', 25, 1) + health += maxHealth * 0.10 + update_wounds() + qdel(food) + ///Proc for checking if someone picked our food target. /mob/living/simple_animal/hostile/retaliate/giant_lizard/proc/check_food_loc(obj/food) if(!ismob(food.loc)) @@ -525,7 +742,7 @@ //Immediately retaliate after being attacked. /mob/living/simple_animal/hostile/retaliate/giant_lizard/Retaliate() - if(stat == DEAD || target_mob || on_fire) + if(stat == DEAD || get_dist(src, target_mob) < 6 || on_fire) return aggression_value = clamp(aggression_value + 5, 0, 15) @@ -537,7 +754,7 @@ MoveToTarget() //basic pack behaviour - for(var/mob/living/simple_animal/hostile/retaliate/giant_lizard/pack_member in view(7, src)) + for(var/mob/living/simple_animal/hostile/retaliate/giant_lizard/pack_member in view(12, src)) if(pack_member == src || pack_member.target_mob) continue pack_member.Retaliate() @@ -545,18 +762,19 @@ ///Proc for moving to targets. walk_to() doesn't check for resting and status effects so we will do it ourselves. /mob/living/simple_animal/hostile/retaliate/giant_lizard/proc/MoveTo(target, distance = 1, retreat = FALSE, time = 6 SECONDS, return_to_combat = FALSE) if(stat == DEAD || HAS_TRAIT(src, TRAIT_INCAPACITATED) || HAS_TRAIT(src, TRAIT_FLOORED)) - return + return FALSE if(resting) set_resting(FALSE) if(!retreat) walk_to(src, target ? target : get_turf(src), distance, move_to_delay) - return + return TRUE if(!is_retreating) is_retreating = TRUE stop_automated_movement = TRUE stance = HOSTILE_STANCE_ALERT walk_away(src, target ? target : get_turf(src), distance, LIZARD_SPEED_RETREAT) addtimer(CALLBACK(src, PROC_REF(stop_retreat), return_to_combat), time) + return TRUE //Proc that's called after the retreat has run its course. /mob/living/simple_animal/hostile/retaliate/giant_lizard/proc/stop_retreat(return_to_combat = FALSE) @@ -568,7 +786,7 @@ if(!return_to_combat) //can't retreat? go back to fighting if(retreat_attempts >= 2) - FindTarget() + target_mob = FindTarget() MoveToTarget() retreat_attempts = 0 //seems like it's a life or death situation. we will stop trying to run away. @@ -578,13 +796,13 @@ for(var/mob/living/carbon/hostile_mob in view(7, src)) if(hostile_mob.faction in faction_group) continue - MoveTo(hostile_mob, 10, TRUE, 3 SECONDS, FALSE) + MoveTo(hostile_mob, 10, TRUE, 2 SECONDS, FALSE) retreat_attempts++ return retreat_attempts = 0 LoseTarget() else - FindTarget() + target_mob = FindTarget() MoveToTarget() //Replaced walk_to() with MoveTo(). @@ -592,9 +810,9 @@ stop_automated_movement = TRUE if(!target_mob || SA_attackable(target_mob)) stance = HOSTILE_STANCE_IDLE - if(target_mob in ListTargets(10)) - stance = HOSTILE_STANCE_ATTACKING - MoveTo(target_mob) + if(get_dist(src, target_mob) <= max_attack_distance) + if(MoveTo(target_mob)) + stance = HOSTILE_STANCE_ATTACKING /mob/living/simple_animal/hostile/retaliate/giant_lizard/resist_fire() visible_message(SPAN_NOTICE("[src] rolls frantically on the ground to extinguish itself!")) @@ -611,8 +829,14 @@ var/successful_attacks = 0 for(var/times_to_attack = 3, times_to_attack > 0, times_to_attack--) + if(body_position == LYING_DOWN) + return + if(Adjacent(target)) var/damage = rand(melee_damage_lower, melee_damage_upper) * 0.4 + //xenos take extra damage + if(isxeno(target)) + damage *= 1.33 var/attack_type = pick(ATTACK_SLASH, ATTACK_BITE) attacktext = attack_type ? "claws" : "bites" flick_attack_overlay(target, attack_type ? "slash" : "animalbite") @@ -628,6 +852,7 @@ face_atom(target) sleep(0.5 SECONDS) successful_attacks++ + if(successful_attacks == 3 && !COOLDOWN_FINISHED(src, pounce_cooldown)) to_chat(src, SPAN_BOLDWARNING("The bloodlust invigorates you! You will be ready to pounce much sooner.")) COOLDOWN_START(src, pounce_cooldown, COOLDOWN_TIMELEFT(src, pounce_cooldown) * 0.5) @@ -690,7 +915,7 @@ playsound(loc, "giant_lizard_hiss", 25) pounced_mob.KnockDown(0.5) step_to(src, pounced_mob) - if(!client) + if(!client && !(pounced_mob.faction in faction_group)) ravagingattack(pounced_mob) /mob/living/simple_animal/hostile/retaliate/giant_lizard/proc/pounced_turf(turf/turf_target) @@ -755,6 +980,18 @@ sound = "giant_lizard_hiss" emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE +/datum/emote/living/giant_lizard/flicktongue + key = "flicktongue" + message = null + emote_type = EMOTE_VISIBLE + +/datum/emote/living/giant_lizard/flicktongue/run_emote(mob/living/simple_animal/hostile/retaliate/giant_lizard/user, params, type_override, intentional) + . = ..() + if(!.) + return + + flick("Giant Lizard Tongue", user.tongue_icon_holder) + #undef ATTACK_SLASH #undef ATTACK_BITE #undef LIZARD_SPEED_NORMAL diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 0eaa1d3309e5..954c5d61d784 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -151,7 +151,7 @@ if(SSticker.mode.check_xeno_late_join(src)) var/mob/new_xeno = SSticker.mode.attempt_to_join_as_xeno(src, FALSE) if(!new_xeno) - if(tgui_alert(src, "Do you sure you wish to observe to be a xeno candidate? When you observe, you will not be able to join as marine. It might also take some time to become a xeno or responder!", "Player Setup", list("Yes", "No")) == "Yes") + if(tgui_alert(src, "Are you sure you wish to observe to be a xeno candidate? When you observe, you will not be able to join as marine. It might also take some time to become a xeno or responder!", "Player Setup", list("Yes", "No")) == "Yes") if(!client) return TRUE if(client.prefs && !(client.prefs.be_special & BE_ALIEN_AFTER_DEATH)) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 80fce329e8cf..0e2035f48330 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -1269,7 +1269,7 @@ and you're good to go. attacked_mob.visible_message(SPAN_WARNING("[user] sticks their gun in their mouth, ready to pull the trigger.")) flags_gun_features ^= GUN_CAN_POINTBLANK //If they try to click again, they're going to hit themselves. - if(!do_after(user, 4 SECONDS, INTERRUPT_ALL, BUSY_ICON_HOSTILE) || !able_to_fire(user)) + if(!do_after(user, 2 SECONDS, INTERRUPT_ALL, BUSY_ICON_HOSTILE) || !able_to_fire(user)) attacked_mob.visible_message(SPAN_NOTICE("[user] decided life was worth living.")) flags_gun_features ^= GUN_CAN_POINTBLANK //Reset this. return TRUE diff --git a/code/modules/reagents/chemistry_machinery/chem_master.dm b/code/modules/reagents/chemistry_machinery/chem_master.dm index 9ab8d81066e0..2cb91618946c 100644 --- a/code/modules/reagents/chemistry_machinery/chem_master.dm +++ b/code/modules/reagents/chemistry_machinery/chem_master.dm @@ -27,7 +27,7 @@ /obj/structure/machinery/chem_master/Initialize() . = ..() - create_reagents(300) + create_reagents(500) connect_smartfridge() /obj/structure/machinery/chem_master/Destroy() diff --git a/code/modules/shuttle/shuttles/ert.dm b/code/modules/shuttle/shuttles/ert.dm index 161382d09faf..74ecdbabefb2 100644 --- a/code/modules/shuttle/shuttles/ert.dm +++ b/code/modules/shuttle/shuttles/ert.dm @@ -333,6 +333,12 @@ height = 29 roundstart_template = /datum/map_template/shuttle/twe_ert +/obj/docking_port/stationary/emergency_response/chinook_port + name = "Chinook Station Landing Pad 1" + dir = NORTH + id = ADMIN_LANDING_PAD_6 + roundstart_template = /datum/map_template/shuttle/response_ert + /datum/map_template/shuttle/response_ert name = "Response Shuttle" shuttle_id = MOBILE_SHUTTLE_ID_ERT1 diff --git a/colonialmarines.dme b/colonialmarines.dme index 6a371e7ad63f..f685c59144e3 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -1006,6 +1006,7 @@ #include "code\game\machinery\vending\vendor_types\crew\commanding_officer.dm" #include "code\game\machinery\vending\vendor_types\crew\corporate_liaison.dm" #include "code\game\machinery\vending\vendor_types\crew\engineering.dm" +#include "code\game\machinery\vending\vendor_types\crew\k9_synth.dm" #include "code\game\machinery\vending\vendor_types\crew\medical.dm" #include "code\game\machinery\vending\vendor_types\crew\mp.dm" #include "code\game\machinery\vending\vendor_types\crew\pilot_officer.dm" @@ -1470,6 +1471,7 @@ #include "code\modules\admin\verbs\getlogs.dm" #include "code\modules\admin\verbs\load_event_level.dm" #include "code\modules\admin\verbs\map_template_loadverb.dm" +#include "code\modules\admin\verbs\mentorhud.dm" #include "code\modules\admin\verbs\mob_verbs.dm" #include "code\modules\admin\verbs\mooc.dm" #include "code\modules\admin\verbs\noclip.dm" @@ -1784,6 +1786,7 @@ #include "code\modules\gear_presets\other.dm" #include "code\modules\gear_presets\pmc.dm" #include "code\modules\gear_presets\royal_marines.dm" +#include "code\modules\gear_presets\synth_k9.dm" #include "code\modules\gear_presets\synths.dm" #include "code\modules\gear_presets\upp.dm" #include "code\modules\gear_presets\uscm.dm" @@ -1966,9 +1969,11 @@ #include "code\modules\mob\living\carbon\human\powers\human_powers.dm" #include "code\modules\mob\living\carbon\human\powers\issue_order.dm" #include "code\modules\mob\living\carbon\human\species\emote-monkey.dm" +#include "code\modules\mob\living\carbon\human\species\emote-synth_k9.dm" #include "code\modules\mob\living\carbon\human\species\human.dm" #include "code\modules\mob\living\carbon\human\species\monkey.dm" #include "code\modules\mob\living\carbon\human\species\species.dm" +#include "code\modules\mob\living\carbon\human\species\synth_k9.dm" #include "code\modules\mob\living\carbon\human\species\synthetic.dm" #include "code\modules\mob\living\carbon\human\species\zombie.dm" #include "code\modules\mob\living\carbon\human\species\working_joe\_emote.dm" diff --git a/html/changelogs/AutoChangeLog-pr-7084.yml b/html/changelogs/AutoChangeLog-pr-7084.yml deleted file mode 100644 index 183e458353c8..000000000000 --- a/html/changelogs/AutoChangeLog-pr-7084.yml +++ /dev/null @@ -1,12 +0,0 @@ -author: "PoZe" -delete-after: True -changes: - - rscadd: " Added ability to set Dropship Sentries and MG modules on dropship to auto deploy after each landing. Default set to off, can be enabled/disable in the equipment menu of the sentry via dropship equipment computer." - - rscadd: "Added visual display in Gunship ammo for all ammo types so that you can tell how much is left by looking at it on the ground." - - qol: "Added ability to queue up items to be fabricated in dropship fabricator as well as ability to remove items from the queue too. Crew will no longer need to babysit the fabricator to produce multiple things as soon as possible." - - qol: "Made Sentry and MG dropship equipment UI a bit more consistent" - - rscadd: "Added visual display of how many mini rockets loaded into mini rocket launcher when attached to the wing." - - balance: "Increased dropship spotlight module brightness from 11 tiles to 14 tiles." - - rscadd: "Added external lights to all dropships. The red and green wing lights that all aircraft usually have and two blue lights on the inner part of the tail to illuminate the unloading area" - - code_imp: "Misc code cleanup in dropship equipment and ammo code" - - refactor: "Moved dropship equipment and ammo into their own sprite files" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-7261.yml b/html/changelogs/AutoChangeLog-pr-7261.yml deleted file mode 100644 index 10a7b89d7b87..000000000000 --- a/html/changelogs/AutoChangeLog-pr-7261.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Drathek" -delete-after: True -changes: - - rscadd: "Added xeno queue information when attempting a xeno late join while inelgible (from the lobby and first time after death)" - - qol: "Streamlined the xeno late join process from lobby (offers observation and sets xeno preference)" - - ui: "Changed some alerts on main menu to tgui_alert" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-7297.yml b/html/changelogs/AutoChangeLog-pr-7297.yml new file mode 100644 index 000000000000..e53b4345bf7b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7297.yml @@ -0,0 +1,4 @@ +author: "Detective-Google" +delete-after: True +changes: + - qol: "the HM vendor's recommendations have been tweaked to be easier to understand." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-7300.yml b/html/changelogs/AutoChangeLog-pr-7300.yml new file mode 100644 index 000000000000..8c8243e438e5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7300.yml @@ -0,0 +1,4 @@ +author: "Tyranicranger4" +delete-after: True +changes: + - qol: "Increased the ChemMaster reagent buffer from 300 to 500" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-7319.yml b/html/changelogs/AutoChangeLog-pr-7319.yml new file mode 100644 index 000000000000..d0edc4559af1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7319.yml @@ -0,0 +1,4 @@ +author: "ihatethisengine" +delete-after: True +changes: + - rscadd: "Military CC now can take broadcasting camera from CC vendor." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-7327.yml b/html/changelogs/AutoChangeLog-pr-7327.yml new file mode 100644 index 000000000000..1a0ed13946b8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7327.yml @@ -0,0 +1,4 @@ +author: "Willzadl" +delete-after: True +changes: + - spellcheck: "fixed typos in the names of the SEATech vendor and the chef's apron" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-7332.yml b/html/changelogs/AutoChangeLog-pr-7332.yml new file mode 100644 index 000000000000..0bb84befe00d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7332.yml @@ -0,0 +1,4 @@ +author: "zzzmike" +delete-after: True +changes: + - qol: "xenos get the same bomb decryption timer notification that preds get" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-7337.yml b/html/changelogs/AutoChangeLog-pr-7337.yml new file mode 100644 index 000000000000..4689d47ca1a5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7337.yml @@ -0,0 +1,4 @@ +author: "harryob" +delete-after: True +changes: + - bugfix: "the unbuckled message is now slightly more accurate" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-7338.yml b/html/changelogs/AutoChangeLog-pr-7338.yml new file mode 100644 index 000000000000..2d1c4700e5d4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7338.yml @@ -0,0 +1,4 @@ +author: "realforest2001" +delete-after: True +changes: + - admin: "Moderators now have access to remote control as intended." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-7354.yml b/html/changelogs/AutoChangeLog-pr-7354.yml new file mode 100644 index 000000000000..5848d4470150 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7354.yml @@ -0,0 +1,4 @@ +author: "efzapa" +delete-after: True +changes: + - bugfix: "Chinook Dock now works." \ No newline at end of file diff --git a/html/changelogs/archive/2024-10.yml b/html/changelogs/archive/2024-10.yml index 1351e13cbb32..e68a977a0a91 100644 --- a/html/changelogs/archive/2024-10.yml +++ b/html/changelogs/archive/2024-10.yml @@ -83,3 +83,111 @@ - rscadd: Marines can now (pathetically attempt to) shove xenos. nivrak: - bugfix: fixes pred round chance being borked +2024-10-08: + Drathek: + - rscadd: Added xeno queue information when attempting a xeno late join while inelgible + (from the lobby and first time after death) + - qol: Streamlined the xeno late join process from lobby (offers observation and + sets xeno preference) + - ui: Changed some alerts on main menu to tgui_alert + PoZe: + - rscadd: ' Added ability to set Dropship Sentries and MG modules on dropship to + auto deploy after each landing. Default set to off, can be enabled/disable in + the equipment menu of the sentry via dropship equipment computer.' + - rscadd: Added visual display in Gunship ammo for all ammo types so that you can + tell how much is left by looking at it on the ground. + - qol: Added ability to queue up items to be fabricated in dropship fabricator as + well as ability to remove items from the queue too. Crew will no longer need + to babysit the fabricator to produce multiple things as soon as possible. + - qol: Made Sentry and MG dropship equipment UI a bit more consistent + - rscadd: Added visual display of how many mini rockets loaded into mini rocket + launcher when attached to the wing. + - balance: Increased dropship spotlight module brightness from 11 tiles to 14 tiles. + - rscadd: Added external lights to all dropships. The red and green wing lights + that all aircraft usually have and two blue lights on the inner part of the + tail to illuminate the unloading area + - code_imp: Misc code cleanup in dropship equipment and ammo code + - refactor: Moved dropship equipment and ammo into their own sprite files +2024-10-09: + CapCamIII: + - bugfix: The price for the type 73 and np92 magazine in UPP vendors are fixed. + cuberound: + - maptweak: replaces hangar banshee with launchbay and omnisentry + realforest2001: + - rscadd: Added new player markers for SEAs/Mentors +2024-10-10: + VileBeggar, SubjectD9341: + - rscadd: Giant lizards are now capable of breaking structures and their combat + capabilities are slightly enhanced. Several other tweaks and minor additions + have been made, such as wound overlays and tongue flickering. + - rscadd: After a random amount of time, a 2nd wave of lizards might pop up in the + jungles if their numbers are too low. + - bugfix: Giant lizards no longer become paralyzed after getting disarmed, nor will + they randomly become paralyzed due to weird combat logic. + deathrobotpunch: + - bugfix: fusion reactor overload messages now show correctly + realforest2001: + - bugfix: Fixes runtime from null areas. +2024-10-13: + efzapa: + - qol: Mouth Target Suicide now takes 2 seconds instead of 4. + realforest2001: + - code_imp: Changes a one letter var in follow menu code. + - rscadd: Mobs in Thunder Dome now populate their own category, instead of being + confused with live-round mobs. + - bugfix: Yautja no longer appear in the Escaped category of follow menu after round + end. +2024-10-14: + Drathek: + - bugfix: Fixed autoinjectors not reducing vendor reagents on refill if they were + fully emptied. + - bugfix: Fixed crystals (and any other reagent container not whitelisted) from + being refilled in vendors + - balance: This means emergency injectors do not refill again. + - balance: Added tricord hypospray chem refill support to Wey-Med Plus + zzzmike: + - balance: hands-only CPR now possible +2024-10-15: + Mister-moon1: + - imageadd: new yautja cape, the damaged cape available to elites + + - bugfix: fixed spriting issues with ceremonial cape and armour 5 +2024-10-16: + JayTacos: + - rscadd: Added a varient of combistick that has no block chance. + private-tristan: + - rscadd: Req line tutorial NPCs have a bigger list of items to ask for. +2024-10-17: + BeagleGaming1: + - rscadd: Tutorials can be locked until a prerequisite tutorial is completed + - code_imp: Tutorials are saved in preferences instead of per character slot + BlackCrystalic: + - bugfix: Code writing of CMB New() proc and setting initial values + SpartanBobby: + - maptweak: Reshuffles tables in squad hypersleep bay adds some new decals + private-tristan: + - balance: Increased the starting amount of mk2 and m39 mags in prep vendors + realforest2001: + - rscadd: Added a giant message to end of ERT spawns so they know if they're hostile + or not. + - rscadd: CLF armor now protects from cold weather so hostile survivors are not + penalized. +2024-10-18: + blackdragonTOW: + - rscadd: Added Synthetic K9 Rescue Teams + - bugfix: Monkeys no longer have access to marine emotes AND now have access to + their own emotes but were blocked from. + - code_imp: Added a NO_OVERLAYS flag for species should we ever want a species to + not use onmob overlays. + - refactor: Altered emote whitelisting and blacklisting so that species that were + blacklisted out of the basic emotes will able to be whitelisted for other emotes + - soundadd: added dog sounds for Synthetic K9 Rescue Teams + - imageadd: added icons for Synthetic K9 Rescue Teams +2024-10-19: + harryob: + - bugfix: pilots can no longer take out enormous loans to buy their equipment +2024-10-20: + Drathek: + - qol: Added examine text to vendors that are connected via medlink + - balance: Blood vendors restock blood bags when connected via medlink (requires + 20 mins from round start) + - maptweak: Added more medlinks to the Almayer diff --git a/icons/mob/hud/hud.dmi b/icons/mob/hud/hud.dmi index 999afedb037b..1c943375216a 100644 Binary files a/icons/mob/hud/hud.dmi and b/icons/mob/hud/hud.dmi differ diff --git a/icons/mob/hud/marine_hud.dmi b/icons/mob/hud/marine_hud.dmi index 8be1ae31ba68..8aff95b8b33d 100644 Binary files a/icons/mob/hud/marine_hud.dmi and b/icons/mob/hud/marine_hud.dmi differ diff --git a/icons/mob/humans/onmob/OnFire.dmi b/icons/mob/humans/onmob/OnFire.dmi index 696b12584e43..dd325cea67e2 100644 Binary files a/icons/mob/humans/onmob/OnFire.dmi and b/icons/mob/humans/onmob/OnFire.dmi differ diff --git a/icons/mob/humans/onmob/hunter/items_lefthand.dmi b/icons/mob/humans/onmob/hunter/items_lefthand.dmi index 5ad5f019e2b2..de2931c5666f 100644 Binary files a/icons/mob/humans/onmob/hunter/items_lefthand.dmi and b/icons/mob/humans/onmob/hunter/items_lefthand.dmi differ diff --git a/icons/mob/humans/onmob/hunter/items_righthand.dmi b/icons/mob/humans/onmob/hunter/items_righthand.dmi index a8fbca0b8e08..6098a06810ff 100644 Binary files a/icons/mob/humans/onmob/hunter/items_righthand.dmi and b/icons/mob/humans/onmob/hunter/items_righthand.dmi differ diff --git a/icons/mob/humans/onmob/hunter/pred_gear.dmi b/icons/mob/humans/onmob/hunter/pred_gear.dmi index 9c043c53fbca..f4e01f8335ad 100644 Binary files a/icons/mob/humans/onmob/hunter/pred_gear.dmi and b/icons/mob/humans/onmob/hunter/pred_gear.dmi differ diff --git a/icons/mob/humans/onmob/uniform_0.dmi b/icons/mob/humans/onmob/uniform_0.dmi index 36551630209d..d1fb32f6d05d 100644 Binary files a/icons/mob/humans/onmob/uniform_0.dmi and b/icons/mob/humans/onmob/uniform_0.dmi differ diff --git a/icons/mob/humans/species/synth_k9/onmob/synth_k9_overlays.dmi b/icons/mob/humans/species/synth_k9/onmob/synth_k9_overlays.dmi new file mode 100644 index 000000000000..207abb57de66 Binary files /dev/null and b/icons/mob/humans/species/synth_k9/onmob/synth_k9_overlays.dmi differ diff --git a/icons/mob/humans/species/synth_k9/r_k9.dmi b/icons/mob/humans/species/synth_k9/r_k9.dmi new file mode 100644 index 000000000000..f6ec5cbe7540 Binary files /dev/null and b/icons/mob/humans/species/synth_k9/r_k9.dmi differ diff --git a/icons/mob/mob_64.dmi b/icons/mob/mob_64.dmi index 8ac2194b3eb2..ece08490fa5b 100644 Binary files a/icons/mob/mob_64.dmi and b/icons/mob/mob_64.dmi differ diff --git a/icons/obj/items/clothing/backpacks.dmi b/icons/obj/items/clothing/backpacks.dmi index f4151b592e76..4ac5ae6b39b6 100644 Binary files a/icons/obj/items/clothing/backpacks.dmi and b/icons/obj/items/clothing/backpacks.dmi differ diff --git a/icons/obj/items/hunter/pred_gear.dmi b/icons/obj/items/hunter/pred_gear.dmi index ae1566e725a1..fc9288641764 100644 Binary files a/icons/obj/items/hunter/pred_gear.dmi and b/icons/obj/items/hunter/pred_gear.dmi differ diff --git a/icons/obj/items/pamphlets.dmi b/icons/obj/items/pamphlets.dmi index b178b6389802..d593fb6080f2 100644 Binary files a/icons/obj/items/pamphlets.dmi and b/icons/obj/items/pamphlets.dmi differ diff --git a/icons/obj/items/storage/kits.dmi b/icons/obj/items/storage/kits.dmi index 5c24d40b2474..b88e1e5e38a8 100644 Binary files a/icons/obj/items/storage/kits.dmi and b/icons/obj/items/storage/kits.dmi differ diff --git a/icons/ui_icons/map_blips.dmi b/icons/ui_icons/map_blips.dmi index 28195bb238fe..41449556044c 100644 Binary files a/icons/ui_icons/map_blips.dmi and b/icons/ui_icons/map_blips.dmi differ diff --git a/maps/map_files/LV624/maintemple/1.intact.dmm b/maps/map_files/LV624/maintemple/1.intact.dmm index d61a92500b89..a0fdb0661ceb 100644 --- a/maps/map_files/LV624/maintemple/1.intact.dmm +++ b/maps/map_files/LV624/maintemple/1.intact.dmm @@ -232,12 +232,6 @@ icon_state = "Synthetic_Template"; name = "massive statue" }, -/obj/item/weapon/yautja/combistick{ - anchored = 1; - color = "#FFE55C"; - desc = "This ancient and frayed gilded spear almost gleans with its razor-sharp edge."; - name = "strange spear" - }, /obj/item/clothing/mask/gas/yautja/damaged{ anchored = 1; color = "#FFE55C"; @@ -256,6 +250,12 @@ icon_state = "y-boots2"; name = "gilded clan greaves" }, +/obj/item/weapon/yautja/chained/combistick{ + color = "#FFE55C"; + name = "strange spear"; + anchored = 1; + desc = "This ancient and frayed gilded spear almost gleans with it's razor sharp edge." + }, /turf/open/floor/sandstone/runed, /area/lv624/ground/caves/sand_temple) "fl" = ( diff --git a/maps/map_files/LV624/science/10.yautja.dmm b/maps/map_files/LV624/science/10.yautja.dmm index 84029eff76a0..505b328b9001 100644 --- a/maps/map_files/LV624/science/10.yautja.dmm +++ b/maps/map_files/LV624/science/10.yautja.dmm @@ -46,12 +46,6 @@ }, /turf/open/floor/plating, /area/lv624/lazarus/research) -"aj" = ( -/obj/structure/surface/table, -/obj/effect/landmark/crap_item, -/obj/item/weapon/yautja/combistick, -/turf/open/floor/whitepurple/northeast, -/area/lv624/lazarus/research) "ak" = ( /turf/open/floor/white, /area/lv624/lazarus/research) @@ -340,6 +334,7 @@ /obj/structure/surface/table, /obj/item/explosive/grenade/spawnergrenade/smartdisc, /obj/item/explosive/grenade/spawnergrenade/smartdisc, +/obj/item/weapon/yautja/chained/combistick, /turf/open/floor/whitepurple/northeast, /area/lv624/lazarus/research) "ec" = ( @@ -621,7 +616,7 @@ al ab bb bk -aj +LE ac bg "} diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index e6d138191f4b..8a7f0d5ac2bc 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -6013,7 +6013,11 @@ /area/almayer/hallways/hangar) "aNc" = ( /obj/structure/bed/chair{ - dir = 4 + dir = 8; + pixel_y = 3 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" }, /turf/open/floor/almayer/red/north, /area/almayer/squads/alpha) @@ -6076,21 +6080,15 @@ /obj/structure/pipes/standard/simple/hidden/supply{ dir = 6 }, -/obj/structure/surface/table/almayer, /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/alpha) "aNT" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/bed/chair{ - dir = 4 +/obj/effect/decal/warning_stripes{ + icon_state = "S" }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/squads/alpha) +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer/plate, +/area/almayer/squads/delta) "aNW" = ( /turf/open/floor/almayer/redcorner, /area/almayer/shipboard/brig/starboard_hallway) @@ -6204,8 +6202,6 @@ /obj/structure/pipes/standard/simple/hidden/supply{ dir = 9 }, -/obj/structure/surface/table/almayer, -/obj/item/facepaint/green, /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/alpha) "aOM" = ( @@ -6832,10 +6828,15 @@ /turf/open/floor/almayer/red/southwest, /area/almayer/lifeboat_pumps/north1) "aSE" = ( -/obj/structure/bed/chair{ - dir = 4 +/obj/effect/decal/warning_stripes{ + icon_state = "S" }, -/turf/open/floor/almayer, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer/plate, /area/almayer/squads/bravo) "aSH" = ( /obj/structure/machinery/light, @@ -7802,6 +7803,13 @@ "bbs" = ( /turf/closed/wall/almayer, /area/almayer/living/cryo_cells) +"bbu" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 + }, +/turf/open/floor/almayer/blue/north, +/area/almayer/squads/delta) "bby" = ( /obj/effect/decal/warning_stripes{ icon_state = "SE-out" @@ -7955,6 +7963,17 @@ /obj/structure/machinery/cm_vending/gear/engi, /turf/open/floor/almayer/plate, /area/almayer/squads/alpha) +"bcH" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer/plate, +/area/almayer/squads/bravo) "bcK" = ( /obj/structure/machinery/smartfridge/chemistry, /obj/structure/machinery/door/firedoor/border_only/almayer, @@ -8840,6 +8859,14 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/upper/fore_hallway) "bjA" = ( +/obj/structure/surface/table/almayer, +/obj/item/trash/USCMtray{ + pixel_y = 7 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out"; + pixel_x = 1 + }, /turf/open/floor/almayer/red/northwest, /area/almayer/squads/alpha) "bjD" = ( @@ -9404,8 +9431,8 @@ dir = 2; icon_state = "pipe-c" }, -/obj/structure/bed/chair{ - dir = 4 +/obj/effect/decal/warning_stripes{ + icon_state = "S" }, /turf/open/floor/almayer/plate, /area/almayer/squads/bravo) @@ -9792,9 +9819,6 @@ dir = 1; icon_state = "pipe-c" }, -/obj/structure/bed/chair{ - dir = 4 - }, /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/bravo) "brH" = ( @@ -9804,6 +9828,14 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out"; + pixel_x = 1 + }, /turf/open/floor/almayer/plate, /area/almayer/squads/bravo) "brS" = ( @@ -9942,9 +9974,9 @@ /turf/open/floor/almayer/plate, /area/almayer/squads/bravo) "bsU" = ( -/obj/structure/surface/table/almayer, -/obj/item/trash/USCMtray{ - pixel_y = 7 +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 }, /turf/open/floor/almayer/red/northeast, /area/almayer/squads/alpha) @@ -9960,14 +9992,11 @@ /turf/open/floor/plating, /area/almayer/maint/upper/u_a_s) "btc" = ( -/obj/structure/bed/chair{ - dir = 8; - pixel_y = 3 - }, /obj/effect/decal/warning_stripes{ icon_state = "SE-out"; pixel_x = 1 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/redfull, /area/almayer/squads/alpha) "bti" = ( @@ -10242,9 +10271,9 @@ /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 }, -/obj/structure/surface/table/almayer, -/obj/item/trash/USCMtray{ - pixel_y = 7 +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 }, /turf/open/floor/almayer/red/east, /area/almayer/squads/alpha) @@ -10255,10 +10284,6 @@ /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 }, -/obj/structure/bed/chair{ - dir = 8; - pixel_y = 3 - }, /obj/effect/decal/warning_stripes{ icon_state = "E"; pixel_x = 1 @@ -10574,6 +10599,10 @@ /obj/structure/pipes/standard/simple/hidden/supply{ dir = 6 }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, /turf/open/floor/almayer/redcorner/north, /area/almayer/squads/alpha) "bAe" = ( @@ -10909,8 +10938,11 @@ /turf/open/floor/almayer/cargo, /area/almayer/living/cryo_cells) "bCP" = ( -/obj/structure/bed/chair{ - dir = 1 +/obj/structure/bed/chair, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_x = -1; + pixel_y = 2 }, /turf/open/floor/almayer/red/southeast, /area/almayer/squads/alpha) @@ -10922,6 +10954,11 @@ /obj/structure/pipes/standard/simple/hidden/supply{ dir = 9 }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 1; + pixel_y = 1 + }, /turf/open/floor/almayer/red, /area/almayer/squads/alpha) "bCY" = ( @@ -11190,6 +11227,7 @@ /turf/open/floor/almayer/redcorner, /area/almayer/shipboard/weapon_room) "bEG" = ( +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/red/southeast, /area/almayer/squads/alpha) "bEK" = ( @@ -11595,7 +11633,7 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/hangar) "bHD" = ( -/obj/structure/ship_ammo/rocket/banshee, +/obj/structure/dropship_equipment/weapon/launch_bay, /turf/open/floor/almayer/cargo, /area/almayer/hallways/hangar) "bHG" = ( @@ -11802,6 +11840,11 @@ /obj/structure/bed/chair{ dir = 4 }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 1; + pixel_y = 1 + }, /turf/open/floor/almayer/orangecorner/north, /area/almayer/squads/bravo) "bJH" = ( @@ -11809,6 +11852,14 @@ /obj/item/facepaint/black{ pixel_x = -4 }, +/obj/item/reagent_container/food/condiment/hotsauce/cholula{ + pixel_x = 10; + pixel_y = 22 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, /turf/open/floor/almayer, /area/almayer/squads/bravo) "bJS" = ( @@ -11923,6 +11974,13 @@ "bKC" = ( /obj/structure/surface/table/almayer, /obj/item/facepaint/green, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, /turf/open/floor/almayer, /area/almayer/squads/bravo) "bKD" = ( @@ -12220,6 +12278,10 @@ /turf/open/floor/almayer/emerald/north, /area/almayer/squads/charlie) "bMC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/mirror{ + pixel_x = -32 + }, /turf/open/floor/almayer/emerald/northwest, /area/almayer/squads/charlie) "bMD" = ( @@ -12505,17 +12567,15 @@ /turf/open/floor/almayer/orange, /area/almayer/hallways/hangar) "bOG" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 }, -/obj/structure/surface/table/almayer, -/obj/item/trash/USCMtray{ - pixel_y = 7 +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 }, -/turf/open/floor/plating/plating_catwalk, +/turf/open/floor/almayer/orange/north, /area/almayer/squads/bravo) "bOJ" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/generic{ @@ -12573,7 +12633,13 @@ /obj/structure/surface/table/almayer, /obj/item/reagent_container/food/condiment/hotsauce/sriracha{ pixel_x = 7; - pixel_y = 7 + pixel_y = 17 + }, +/obj/item/facepaint/green{ + pixel_y = 2 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" }, /turf/open/floor/almayer, /area/almayer/squads/charlie) @@ -12875,8 +12941,16 @@ /area/almayer/shipboard/sea_office) "bRf" = ( /obj/structure/surface/table/almayer, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/item/toy/deck{ + pixel_x = 8; + pixel_y = 8 + }, /obj/item/reagent_container/food/condiment/hotsauce/sriracha{ - pixel_x = 4 + pixel_x = 4; + pixel_y = 8 }, /turf/open/floor/almayer/plate, /area/almayer/squads/charlie) @@ -12887,7 +12961,10 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/surface/table/almayer, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, /turf/open/floor/almayer/plate, /area/almayer/squads/bravo) "bRo" = ( @@ -13024,6 +13101,7 @@ density = 0; pixel_y = 16 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/plate, /area/almayer/squads/delta) "bTa" = ( @@ -13031,6 +13109,7 @@ density = 0; pixel_y = 16 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/plate, /area/almayer/squads/delta) "bTb" = ( @@ -13119,6 +13198,10 @@ density = 0; pixel_y = 16 }, +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out"; + pixel_x = 1 + }, /turf/open/floor/almayer/blue/north, /area/almayer/squads/delta) "bTM" = ( @@ -13129,8 +13212,10 @@ /turf/open/floor/almayer/blue/north, /area/almayer/squads/delta) "bTN" = ( -/obj/structure/bed/chair{ - dir = 4 +/obj/structure/surface/table/almayer, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 }, /turf/open/floor/almayer/plate, /area/almayer/squads/delta) @@ -13232,43 +13317,35 @@ /turf/open/floor/almayer/redfull, /area/almayer/squads/req) "bUp" = ( -/obj/structure/surface/table/almayer, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/item/reagent_container/food/condiment/hotsauce/franks{ - pixel_x = 2; - pixel_y = 10 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/squads/delta) +/obj/effect/landmark/start/marine/alpha, +/obj/effect/landmark/late_join/alpha, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer/plate, +/area/almayer/squads/alpha) "bUq" = ( -/obj/structure/bed/chair{ - dir = 8; - pixel_y = 3 - }, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 }, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 + }, /turf/open/floor/almayer, /area/almayer/squads/delta) "bUr" = ( -/obj/structure/bed/chair{ - dir = 8; - pixel_y = 3 - }, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 }, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, /turf/open/floor/almayer/blue/north, /area/almayer/squads/delta) "bUy" = ( @@ -13295,11 +13372,7 @@ /turf/open/floor/almayer/plate, /area/almayer/maint/hull/lower/l_m_p) "bUN" = ( -/obj/structure/surface/table/almayer, -/obj/item/trash/USCMtray{ - pixel_x = 6; - pixel_y = 7 - }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/delta) "bUO" = ( @@ -13323,6 +13396,10 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/delta) "bVb" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, /turf/open/floor/almayer/blue, /area/almayer/squads/delta) "bVd" = ( @@ -14229,6 +14306,14 @@ /obj/structure/bed/chair{ dir = 4 }, +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out"; + pixel_x = 1 + }, /turf/open/floor/almayer, /area/almayer/squads/charlie) "cgA" = ( @@ -14320,10 +14405,19 @@ dir = 8; pixel_y = 3 }, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_x = -1; + pixel_y = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, /turf/open/floor/almayer, /area/almayer/squads/bravo) "chq" = ( -/obj/structure/surface/table/almayer, +/obj/structure/bed/chair, /turf/open/floor/almayer/plate, /area/almayer/squads/charlie) "chv" = ( @@ -14420,6 +14514,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/cargo_arrow/west, /area/almayer/squads/alpha) "cif" = ( @@ -14521,6 +14616,10 @@ /obj/effect/decal/warning_stripes{ icon_state = "S" }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, /turf/open/floor/almayer/emerald, /area/almayer/squads/charlie) "cji" = ( @@ -14556,13 +14655,10 @@ density = 0; pixel_y = 16 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/plate, /area/almayer/squads/charlie) "cjE" = ( -/obj/structure/bed/chair{ - dir = 8; - pixel_y = 3 - }, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 1 }, @@ -14574,6 +14670,10 @@ icon_state = "E"; pixel_x = 1 }, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, /turf/open/floor/almayer/emerald/east, /area/almayer/squads/charlie) "cjW" = ( @@ -15295,10 +15395,12 @@ /turf/open/floor/almayer/plate, /area/almayer/maint/hull/lower/l_f_s) "cqz" = ( -/obj/structure/surface/table/almayer, -/obj/item/facepaint/black, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/squads/delta) +/obj/structure/bed/chair{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer/plate, +/area/almayer/squads/alpha) "cqH" = ( /obj/structure/pipes/vents/scrubber{ dir = 4 @@ -15394,6 +15496,9 @@ pixel_x = -1; pixel_y = 1 }, +/obj/structure/mirror{ + pixel_y = 32 + }, /turf/open/floor/almayer/cargo_arrow/west, /area/almayer/squads/bravo) "cth" = ( @@ -15727,11 +15832,11 @@ /turf/open/floor/almayer/cargo, /area/almayer/engineering/upper_engineering/port) "cBs" = ( -/obj/structure/bed/chair, /obj/effect/decal/warning_stripes{ icon_state = "N"; pixel_y = 1 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/cargo_arrow, /area/almayer/squads/alpha) "cBw" = ( @@ -16194,6 +16299,18 @@ "cKL" = ( /turf/open/floor/almayer/orangecorner/west, /area/almayer/engineering/upper_engineering/port) +"cLc" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer/plate, +/area/almayer/squads/charlie) "cLd" = ( /obj/structure/closet, /obj/item/clothing/glasses/mgoggles/prescription, @@ -17234,6 +17351,14 @@ /obj/structure/surface/table/almayer, /turf/open/floor/almayer/red/west, /area/almayer/shipboard/brig/chief_mp_office) +"dgE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 + }, +/turf/open/floor/almayer/red/north, +/area/almayer/squads/alpha) "dgI" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -17408,6 +17533,12 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/upper/starboard) +"dlu" = ( +/obj/effect/landmark/start/marine/bravo, +/obj/effect/landmark/late_join/bravo, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/squads/bravo) "dlT" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/almayer/mono, @@ -17775,6 +17906,9 @@ icon_state = "W"; pixel_x = -1 }, +/obj/structure/bed/chair{ + dir = 4 + }, /turf/open/floor/almayer/plate, /area/almayer/squads/alpha) "dvg" = ( @@ -18244,6 +18378,15 @@ /obj/structure/largecrate/random/case/small, /turf/open/floor/almayer/plate, /area/almayer/maint/hull/lower/stern) +"dEk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_x = -1; + pixel_y = 2 + }, +/turf/open/floor/almayer/orange, +/area/almayer/squads/bravo) "dEm" = ( /obj/structure/machinery/power/apc/almayer/south, /obj/effect/decal/warning_stripes{ @@ -18597,6 +18740,14 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/maint/hull/lower/s_bow) +"dKX" = ( +/obj/structure/machinery/cryopod/right{ + layer = 3.1; + pixel_y = 13 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer/cargo, +/area/almayer/squads/alpha) "dLc" = ( /obj/structure/surface/table/almayer, /obj/item/paper_bin/uscm, @@ -19466,6 +19617,10 @@ /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, /turf/open/floor/almayer/plate, /area/almayer/squads/alpha) "efP" = ( @@ -20453,6 +20608,14 @@ "exQ" = ( /turf/open/floor/almayer/greencorner, /area/almayer/hallways/lower/starboard_midship_hallway) +"eyl" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/turf/open/floor/almayer/orange/east, +/area/almayer/squads/bravo) "eyD" = ( /turf/closed/wall/almayer/reinforced, /area/almayer/shipboard/brig/starboard_hallway) @@ -20926,6 +21089,12 @@ }, /turf/open/floor/almayer/plate, /area/almayer/maint/upper/u_f_s) +"eIG" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer/blue/north, +/area/almayer/squads/delta) "eIN" = ( /obj/item/tool/kitchen/utensil/pfork, /turf/open/floor/almayer/plate, @@ -21770,6 +21939,13 @@ /obj/structure/machinery/firealarm{ pixel_y = 28 }, +/obj/structure/surface/table/almayer, +/obj/item/trash/USCMtray{ + pixel_y = 7 + }, +/obj/item/reagent_container/food/condiment/hotsauce/tabasco{ + pixel_x = 11 + }, /turf/open/floor/almayer/plate, /area/almayer/squads/alpha) "fbe" = ( @@ -21873,6 +22049,7 @@ /turf/open/floor/almayer/test_floor4, /area/almayer/medical/hydroponics) "fcB" = ( +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/emerald/west, /area/almayer/squads/charlie) "fcE" = ( @@ -24219,6 +24396,7 @@ icon_state = "N"; pixel_y = 1 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/orange/north, /area/almayer/squads/bravo) "giD" = ( @@ -24294,6 +24472,13 @@ }, /turf/open/floor/almayer/aicore/no_build, /area/almayer/command/airoom) +"gjy" = ( +/obj/structure/machinery/cryopod{ + pixel_y = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer/cargo, +/area/almayer/squads/alpha) "gjB" = ( /obj/structure/machinery/light{ dir = 1 @@ -24306,6 +24491,12 @@ }, /turf/open/floor/almayer/sterile_green_corner/west, /area/almayer/medical/lower_medical_medbay) +"gkd" = ( +/obj/effect/landmark/start/marine/charlie, +/obj/effect/landmark/late_join/charlie, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/squads/charlie) "gkr" = ( /turf/open/floor/almayer/plate, /area/almayer/maint/hull/upper/s_bow) @@ -24388,10 +24579,16 @@ /turf/open/floor/almayer/orange/southeast, /area/almayer/engineering/upper_engineering/port) "gnu" = ( -/obj/structure/surface/table/almayer, -/obj/item/facepaint/green, -/turf/open/floor/almayer, -/area/almayer/squads/charlie) +/obj/structure/bed/chair{ + dir = 4 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_x = -1; + pixel_y = 2 + }, +/turf/open/floor/almayer/blue, +/area/almayer/squads/delta) "gnv" = ( /turf/open/floor/almayer/red/northeast, /area/almayer/lifeboat_pumps/south1) @@ -25859,6 +26056,18 @@ /obj/structure/machinery/power/apc/almayer/north, /turf/open/floor/almayer/plate, /area/almayer/hallways/hangar) +"gRS" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/obj/structure/bed/chair{ + dir = 8; + pixel_y = 3 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer/plate, +/area/almayer/squads/alpha) "gSa" = ( /obj/effect/decal/warning_stripes{ icon_state = "NE-out"; @@ -26650,8 +26859,9 @@ /turf/open/floor/almayer/greencorner/east, /area/almayer/hallways/lower/starboard_midship_hallway) "hji" = ( -/obj/structure/bed/chair{ - dir = 4 +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 }, /turf/open/floor/almayer/blue/west, /area/almayer/squads/delta) @@ -26893,6 +27103,7 @@ /obj/structure/machinery/light{ dir = 8 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/plate, /area/almayer/squads/delta) "hmF" = ( @@ -27198,6 +27409,10 @@ icon_state = "N"; pixel_y = 1 }, +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out"; + pixel_x = 1 + }, /turf/open/floor/almayer/orange/northwest, /area/almayer/squads/bravo) "hte" = ( @@ -27674,6 +27889,12 @@ }, /turf/open/floor/almayer, /area/almayer/living/briefing) +"hDx" = ( +/obj/effect/landmark/start/marine/tl/delta, +/obj/effect/landmark/late_join/delta, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/squads/delta) "hDR" = ( /obj/structure/surface/table/reinforced/prison, /obj/item/storage/syringe_case{ @@ -27708,6 +27929,7 @@ "hEb" = ( /obj/effect/landmark/start/marine/medic/bravo, /obj/effect/landmark/late_join/bravo, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/plate, /area/almayer/squads/bravo) "hEg" = ( @@ -28009,6 +28231,13 @@ /obj/structure/machinery/power/apc/almayer/south, /turf/open/floor/almayer/sterile_green_side, /area/almayer/medical/operating_room_three) +"hMX" = ( +/obj/structure/machinery/light{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer/orange/west, +/area/almayer/squads/bravo) "hNh" = ( /obj/structure/machinery/light/small, /turf/open/floor/almayer/plate, @@ -28287,9 +28516,14 @@ }, /turf/open/floor/almayer/test_floor4, /area/almayer/medical/morgue) +"hSV" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer/orange, +/area/almayer/squads/bravo) "hTc" = ( -/obj/structure/machinery/firealarm{ - pixel_y = 28 +/obj/effect/decal/cleanable/dirt, +/obj/structure/mirror{ + pixel_y = 32 }, /turf/open/floor/almayer/plate, /area/almayer/squads/delta) @@ -28716,6 +28950,7 @@ /area/almayer/squads/alpha) "iaq" = ( /obj/structure/machinery/vending/cola, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/plate, /area/almayer/squads/bravo) "iat" = ( @@ -28977,6 +29212,7 @@ /area/almayer/maint/lower/constr) "ihw" = ( /obj/structure/machinery/cm_vending/sorted/medical/blood, +/obj/structure/medical_supply_link/green, /turf/open/floor/almayer/sterile_green_corner/north, /area/almayer/medical/lower_medical_medbay) "ihI" = ( @@ -29316,6 +29552,12 @@ /obj/effect/step_trigger/message/memorial, /turf/open/floor/almayer/plate, /area/almayer/living/starboard_garden) +"ipM" = ( +/obj/effect/landmark/start/marine/tl/alpha, +/obj/effect/landmark/late_join/alpha, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/squads/alpha) "ipQ" = ( /obj/structure/surface/rack, /obj/item/storage/fancy/vials/empty, @@ -29422,6 +29664,16 @@ }, /turf/open/floor/almayer/sterile_green_side, /area/almayer/medical/medical_science) +"isa" = ( +/obj/structure/machinery/cryopod{ + layer = 3.1; + pixel_y = 13 + }, +/obj/structure/machinery/light{ + dir = 8 + }, +/turf/open/floor/almayer/cargo, +/area/almayer/squads/bravo) "ish" = ( /turf/open/floor/almayer/orange/east, /area/almayer/engineering/lower/workshop) @@ -29653,6 +29905,11 @@ /obj/effect/decal/warning_stripes{ icon_state = "SE-out" }, +/obj/structure/surface/table/almayer, +/obj/item/trash/USCMtray{ + pixel_x = 6; + pixel_y = 7 + }, /turf/open/floor/almayer/plate, /area/almayer/squads/delta) "ixN" = ( @@ -29823,6 +30080,12 @@ /obj/structure/largecrate/supply/supplies/tables_racks, /turf/open/floor/almayer/red/southwest, /area/almayer/maint/upper/u_a_p) +"iDf" = ( +/obj/effect/landmark/start/marine/alpha, +/obj/effect/landmark/late_join/alpha, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/squads/alpha) "iDk" = ( /obj/structure/closet/emcloset, /turf/open/floor/almayer/plate, @@ -30011,6 +30274,13 @@ }, /turf/open/floor/prison/kitchen, /area/almayer/living/grunt_rnr) +"iIO" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/turf/open/floor/almayer/red, +/area/almayer/squads/alpha) "iIP" = ( /obj/structure/toilet{ pixel_y = 16 @@ -30026,16 +30296,13 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/living/port_emb) "iIR" = ( -/obj/structure/surface/table/almayer, -/obj/item/trash/USCMtray{ - pixel_y = 7 - }, -/obj/item/reagent_container/food/condiment/hotsauce/cholula{ - pixel_x = 10; - pixel_y = 22 +/obj/structure/machinery/cm_vending/sorted/marine_food{ + density = 0; + pixel_y = 16 }, -/turf/open/floor/almayer, -/area/almayer/squads/bravo) +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer/plate, +/area/almayer/squads/delta) "iIU" = ( /obj/structure/largecrate/random/barrel/red, /obj/structure/machinery/light/small, @@ -30564,14 +30831,9 @@ /turf/open/floor/almayer/test_floor4, /area/almayer/maint/hull/upper/u_a_p) "iSZ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/surface/table/almayer, -/obj/item/facepaint/black, +/obj/effect/landmark/start/marine/engineer/alpha, +/obj/effect/landmark/late_join/alpha, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/alpha) "iTd" = ( @@ -30768,13 +31030,20 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/maint/hull/lower/stern) "iWc" = ( -/obj/structure/surface/table/almayer, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 }, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, /turf/open/floor/almayer, /area/almayer/squads/delta) "iWn" = ( @@ -31123,16 +31392,13 @@ /turf/open/floor/almayer/aicore/no_build/ai_silver/east, /area/almayer/command/airoom) "jdm" = ( -/obj/structure/surface/table/almayer, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 }, -/obj/item/trash/USCMtray, -/turf/open/floor/almayer/blue/north, -/area/almayer/squads/delta) +/turf/open/floor/almayer/orange, +/area/almayer/squads/bravo) "jdn" = ( /obj/structure/surface/rack, /obj/effect/decal/cleanable/dirt, @@ -31974,6 +32240,13 @@ }, /turf/open/floor/almayer/sterile_green_side/east, /area/almayer/medical/medical_science) +"jrR" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer/cargo_arrow/north, +/area/almayer/squads/delta) "jsa" = ( /obj/structure/machinery/light{ dir = 8 @@ -32614,6 +32887,9 @@ icon_state = "W"; pixel_x = -1 }, +/obj/structure/bed/chair{ + dir = 4 + }, /turf/open/floor/almayer/plate, /area/almayer/squads/delta) "jHh" = ( @@ -32721,6 +32997,11 @@ }, /turf/open/floor/almayer/cargo, /area/almayer/engineering/port_atmos) +"jKK" = ( +/obj/structure/surface/table/almayer, +/obj/item/facepaint/green, +/turf/open/floor/almayer/plate, +/area/almayer/squads/alpha) "jLg" = ( /obj/structure/closet/emcloset, /turf/open/floor/almayer/cargo, @@ -32884,6 +33165,17 @@ /obj/effect/spawner/random/balaclavas, /turf/open/floor/plating, /area/almayer/maint/lower/constr) +"jNK" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/obj/structure/bed/chair{ + dir = 8; + pixel_y = 3 + }, +/turf/open/floor/almayer/plate, +/area/almayer/squads/alpha) "jNT" = ( /turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/execution) @@ -32895,10 +33187,6 @@ dir = 4; icon_state = "pipe-j2" }, -/obj/structure/bed/chair{ - dir = 8; - pixel_y = 3 - }, /obj/effect/decal/warning_stripes{ icon_state = "NE-out"; pixel_x = 1; @@ -33048,6 +33336,13 @@ }, /turf/open/floor/almayer/orange/east, /area/almayer/engineering/upper_engineering/port) +"jRH" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/turf/open/floor/almayer, +/area/almayer/squads/bravo) "jRK" = ( /obj/structure/largecrate/random/case/double, /turf/open/floor/almayer/cargo, @@ -33924,9 +34219,8 @@ /turf/open/floor/almayer/orange, /area/almayer/squads/bravo) "kiV" = ( -/obj/structure/surface/table/almayer, -/obj/item/reagent_container/food/condiment/hotsauce/tabasco{ - pixel_x = 11 +/obj/effect/decal/warning_stripes{ + icon_state = "S" }, /turf/open/floor/almayer/red/north, /area/almayer/squads/alpha) @@ -34144,6 +34438,10 @@ }, /turf/open/floor/almayer/plate, /area/almayer/squads/bravo) +"koI" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer/plate, +/area/almayer/squads/delta) "kph" = ( /obj/structure/machinery/door/firedoor/border_only/almayer, /obj/structure/machinery/door/airlock/multi_tile/almayer/engidoor{ @@ -34483,8 +34781,7 @@ "kvL" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/computer/cameras/almayer_network{ - dir = 4; - pixel_y = 0 + dir = 4 }, /turf/open/floor/almayer/red/west, /area/almayer/shipboard/brig/warden_office) @@ -35028,6 +35325,7 @@ density = 0; pixel_y = 16 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/emerald/north, /area/almayer/squads/charlie) "kGQ" = ( @@ -35118,6 +35416,14 @@ /area/almayer/hallways/lower/starboard_fore_hallway) "kJi" = ( /obj/structure/machinery/light, +/obj/structure/surface/table/almayer, +/obj/item/reagent_container/food/condiment/hotsauce/tabasco{ + pixel_x = 14; + pixel_y = 20 + }, +/obj/item/trash/USCMtray{ + pixel_y = 7 + }, /turf/open/floor/almayer/plate, /area/almayer/squads/alpha) "kJm" = ( @@ -35660,6 +35966,10 @@ }, /turf/open/floor/almayer/test_floor4, /area/almayer/living/pilotbunks) +"kUo" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/squads/charlie) "kUA" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating/plating_catwalk, @@ -36014,6 +36324,14 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, /turf/open/floor/almayer/plate, /area/almayer/squads/charlie) "lcg" = ( @@ -36106,6 +36424,7 @@ /obj/structure/pipes/standard/simple/hidden/supply{ dir = 6 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/emerald/north, /area/almayer/squads/charlie) "leg" = ( @@ -36334,6 +36653,7 @@ "ljs" = ( /obj/effect/landmark/start/marine/spec/bravo, /obj/effect/landmark/late_join/bravo, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/bravo) "ljv" = ( @@ -37174,6 +37494,11 @@ /obj/effect/decal/warning_stripes{ icon_state = "S" }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 1; + pixel_y = 2 + }, /turf/open/floor/almayer/emerald/southwest, /area/almayer/squads/charlie) "lCg" = ( @@ -37555,7 +37880,10 @@ /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 }, -/obj/structure/surface/table/almayer, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, /turf/open/floor/almayer/plate, /area/almayer/squads/alpha) "lJY" = ( @@ -37610,7 +37938,7 @@ /turf/open/floor/almayer/test_floor4, /area/almayer/hallways/upper/midship_hallway) "lLC" = ( -/obj/structure/surface/table/almayer, +/obj/structure/bed/chair, /turf/open/floor/almayer, /area/almayer/squads/charlie) "lLO" = ( @@ -37826,6 +38154,7 @@ /area/almayer/maint/hull/lower/l_f_p) "lQz" = ( /obj/structure/machinery/vending/coffee, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/plate, /area/almayer/squads/bravo) "lQB" = ( @@ -38033,6 +38362,15 @@ /obj/effect/landmark/yautja_teleport, /turf/open/floor/almayer/plate, /area/almayer/maint/hull/upper/u_m_s) +"lWG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 1; + pixel_y = 1 + }, +/turf/open/floor/almayer, +/area/almayer/squads/alpha) "lWO" = ( /obj/structure/disposalpipe/segment, /obj/structure/machinery/light/small{ @@ -38451,21 +38789,15 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/command/lifeboat) "mhI" = ( -/obj/structure/machinery/vending/cigarette{ - density = 0; - pixel_x = -5; - pixel_y = 16 - }, -/obj/structure/reagent_dispensers/water_cooler/stacks{ - density = 0; - pixel_x = 13; - pixel_y = 15 - }, /obj/effect/decal/warning_stripes{ icon_state = "NE-out"; pixel_x = 1; pixel_y = 1 }, +/obj/structure/surface/table/almayer, +/obj/structure/mirror{ + pixel_y = 32 + }, /turf/open/floor/almayer/plate, /area/almayer/squads/alpha) "mis" = ( @@ -38835,6 +39167,12 @@ /obj/structure/surface/table/almayer, /turf/open/floor/almayer/redfull, /area/almayer/living/briefing) +"mpJ" = ( +/obj/effect/landmark/start/marine/medic/charlie, +/obj/effect/landmark/late_join/charlie, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/squads/charlie) "mpP" = ( /obj/structure/machinery/door/airlock/almayer/maint, /turf/open/floor/almayer/test_floor4, @@ -39057,6 +39395,7 @@ "muy" = ( /obj/effect/landmark/start/marine/engineer/alpha, /obj/effect/landmark/late_join/alpha, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/plate, /area/almayer/squads/alpha) "muQ" = ( @@ -39101,6 +39440,12 @@ }, /turf/open/floor/almayer/bluecorner, /area/almayer/squads/delta) +"mvy" = ( +/obj/effect/landmark/start/marine/delta, +/obj/effect/landmark/late_join/delta, +/obj/structure/machinery/light, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/squads/delta) "mvI" = ( /obj/structure/machinery/camera/autoname/almayer{ dir = 4; @@ -39608,6 +39953,10 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, /turf/open/floor/almayer/orange/west, /area/almayer/squads/bravo) "mFP" = ( @@ -39960,18 +40309,11 @@ /turf/open/floor/almayer/plate, /area/almayer/living/pilotbunks) "mLF" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/surface/table/almayer, -/obj/item/trash/USCMtray{ - pixel_y = 7 - }, +/obj/effect/landmark/start/marine/medic/bravo, +/obj/effect/landmark/late_join/bravo, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/plating_catwalk, -/area/almayer/squads/alpha) +/area/almayer/squads/bravo) "mLN" = ( /obj/structure/machinery/light/small, /obj/structure/disposalpipe/segment{ @@ -40364,6 +40706,16 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/almayer/plate, /area/almayer/maint/hull/lower/l_f_s) +"mUP" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer/orange/north, +/area/almayer/squads/bravo) "mUY" = ( /obj/structure/surface/rack, /obj/effect/spawner/random/tool, @@ -40809,6 +41161,14 @@ }, /turf/open/floor/almayer/plate, /area/almayer/engineering/upper_engineering/starboard) +"nex" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_x = -1; + pixel_y = 2 + }, +/turf/open/floor/almayer/red, +/area/almayer/squads/alpha) "neC" = ( /obj/structure/bed/chair/bolted, /turf/open/floor/almayer/red/north, @@ -40876,6 +41236,10 @@ }, /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/north1) +"nfF" = ( +/obj/structure/ship_ammo/sentry, +/turf/open/floor/almayer/cargo, +/area/almayer/hallways/hangar) "ngf" = ( /obj/structure/machinery/cm_vending/sorted/medical/wall_med{ pixel_y = 25 @@ -41213,6 +41577,14 @@ }, /turf/open/floor/almayer, /area/almayer/command/lifeboat) +"nks" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_y = 2; + pixel_x = 1 + }, +/turf/open/floor/almayer/orange, +/area/almayer/squads/bravo) "nkx" = ( /obj/structure/machinery/cm_vending/sorted/medical/wall_med{ pixel_y = 25 @@ -41560,6 +41932,10 @@ /obj/structure/bed/chair{ dir = 4 }, +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out"; + pixel_x = 1 + }, /turf/open/floor/almayer/emeraldcorner/west, /area/almayer/squads/charlie) "nrN" = ( @@ -42140,6 +42516,9 @@ pixel_x = 6; pixel_y = 6 }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, /turf/open/floor/almayer, /area/almayer/squads/charlie) "nEF" = ( @@ -42750,6 +43129,11 @@ /turf/open/floor/almayer, /area/almayer/command/computerlab) "nTl" = ( +/obj/structure/surface/table/almayer, +/obj/item/facepaint/black, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, /turf/open/floor/almayer/red/north, /area/almayer/squads/alpha) "nTo" = ( @@ -42862,6 +43246,14 @@ }, /turf/open/floor/almayer/plate, /area/almayer/maint/hull/upper/u_a_s) +"nVa" = ( +/obj/structure/bed/chair, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/turf/open/floor/almayer/red, +/area/almayer/squads/alpha) "nVi" = ( /turf/open/floor/almayer/test_floor4, /area/almayer/living/briefing) @@ -43005,6 +43397,7 @@ icon_state = "N"; pixel_y = 1 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/cargo_arrow/west, /area/almayer/squads/bravo) "nYd" = ( @@ -43784,13 +44177,12 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/maint/hull/lower/l_f_s) "onN" = ( -/obj/structure/surface/table/almayer, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/item/toy/deck{ - pixel_x = 8; - pixel_y = 8 +/obj/structure/bed/chair{ + dir = 8; + pixel_y = 3 }, /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/charlie) @@ -44074,6 +44466,7 @@ icon_state = "N"; pixel_y = 1 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/plate, /area/almayer/squads/bravo) "osI" = ( @@ -44341,6 +44734,20 @@ /obj/effect/landmark/late_join/intel, /turf/open/floor/plating/plating_catwalk, /area/almayer/engineering/port_atmos) +"oyG" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/pipes/standard/simple/hidden/supply, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer/plate, +/area/almayer/squads/bravo) "oyO" = ( /obj/structure/reagent_dispensers/watertank, /obj/structure/sign/safety/water{ @@ -44399,6 +44806,11 @@ icon_state = "SW-out"; pixel_x = -1 }, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_x = -1; + pixel_y = 2 + }, /turf/open/floor/almayer/emerald/southeast, /area/almayer/squads/charlie) "oAa" = ( @@ -45043,6 +45455,14 @@ }, /turf/open/floor/almayer/plate, /area/almayer/living/auxiliary_officer_office) +"oMr" = ( +/obj/structure/machinery/cm_vending/sorted/marine_food{ + density = 0; + pixel_y = 16 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer/plate, +/area/almayer/squads/charlie) "oMs" = ( /obj/structure/machinery/computer/cameras/almayer{ dir = 1 @@ -45238,6 +45658,16 @@ }, /turf/open/floor/almayer/orangecorner/north, /area/almayer/hallways/lower/port_umbilical) +"oQB" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/structure/bed/chair{ + dir = 8; + pixel_y = 3 + }, +/turf/open/floor/almayer/plate, +/area/almayer/squads/delta) "oQH" = ( /turf/open/floor/almayer/cargo_arrow, /area/almayer/living/briefing) @@ -45347,6 +45777,16 @@ /obj/item/tank/emergency_oxygen/double, /turf/open/floor/almayer/plate, /area/almayer/engineering/upper_engineering/port) +"oSy" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/open/floor/almayer/plate, +/area/almayer/squads/alpha) "oSC" = ( /obj/structure/disposalpipe/segment, /obj/structure/pipes/standard/simple/hidden/supply, @@ -46283,6 +46723,7 @@ /area/almayer/shipboard/brig/cells) "pnC" = ( /obj/structure/machinery/cm_vending/sorted/medical/blood/bolted, +/obj/structure/medical_supply_link/green, /turf/open/floor/almayer/sterile_green_side, /area/almayer/medical/lower_medical_medbay) "pnL" = ( @@ -47673,15 +48114,16 @@ /turf/open/floor/almayer/mono, /area/almayer/command/computerlab) "pUf" = ( -/obj/structure/bed/chair{ - dir = 4 - }, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 }, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, /turf/open/floor/almayer/bluecorner/west, /area/almayer/squads/delta) "pUg" = ( @@ -47845,6 +48287,7 @@ icon_state = "E"; pixel_x = 1 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/plate, /area/almayer/squads/alpha) "pXx" = ( @@ -48277,15 +48720,16 @@ /turf/open/floor/almayer/test_floor4, /area/almayer/command/combat_correspondent) "qgN" = ( -/obj/structure/bed/chair{ - dir = 4 - }, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 }, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out"; + pixel_x = 1 + }, /turf/open/floor/almayer, /area/almayer/squads/delta) "qgU" = ( @@ -48544,14 +48988,15 @@ /turf/open/floor/plating, /area/almayer/hallways/lower/repair_bay) "qmk" = ( -/obj/structure/surface/table/almayer, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 }, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/item/facepaint/green, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, /turf/open/floor/almayer/bluecorner/east, /area/almayer/squads/delta) "qmq" = ( @@ -49047,6 +49492,13 @@ }, /turf/open/floor/almayer/aicore/no_build, /area/almayer/command/airoom) +"qwL" = ( +/obj/structure/machinery/cryopod/right{ + pixel_y = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer/cargo, +/area/almayer/squads/charlie) "qwU" = ( /obj/effect/decal/warning_stripes{ icon_state = "SW-out" @@ -49166,6 +49618,10 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 + }, /turf/open/floor/almayer/blue/northeast, /area/almayer/squads/delta) "qyo" = ( @@ -49605,6 +50061,11 @@ /obj/structure/closet/firecloset, /turf/open/floor/almayer/cargo, /area/almayer/lifeboat_pumps/south2) +"qHe" = ( +/obj/structure/machinery/cryopod/right, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer/cargo, +/area/almayer/squads/alpha) "qHg" = ( /turf/open/floor/almayer/cargo_arrow/north, /area/almayer/squads/alpha_bravo_shared) @@ -50321,6 +50782,7 @@ /obj/effect/decal/warning_stripes{ icon_state = "S" }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/plate, /area/almayer/squads/delta) "qWx" = ( @@ -50803,6 +51265,7 @@ "rfa" = ( /obj/effect/landmark/start/marine/medic/alpha, /obj/effect/landmark/late_join/alpha, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/plate, /area/almayer/squads/alpha) "rfb" = ( @@ -51117,7 +51580,6 @@ /turf/open/floor/almayer/plate, /area/almayer/shipboard/starboard_point_defense) "rll" = ( -/obj/structure/machinery/light, /obj/effect/decal/warning_stripes{ icon_state = "SW-out" }, @@ -51125,6 +51587,11 @@ icon_state = "E"; pixel_x = 1 }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/machinery/firealarm{ + dir = 1; + pixel_y = -28 + }, /turf/open/floor/almayer/plate, /area/almayer/squads/delta) "rlD" = ( @@ -51358,6 +51825,7 @@ icon_state = "E"; pixel_x = 1 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/plate, /area/almayer/squads/delta) "rqQ" = ( @@ -52462,6 +52930,12 @@ }, /turf/open/floor/almayer/dark_sterile, /area/almayer/living/port_emb) +"rNd" = ( +/obj/effect/landmark/start/marine/engineer/delta, +/obj/effect/landmark/late_join/delta, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/squads/delta) "rNK" = ( /obj/structure/surface/table/almayer, /turf/open/floor/almayer/orange, @@ -52522,8 +52996,11 @@ /area/almayer/engineering/ce_room) "rPE" = ( /obj/structure/bed/chair{ - dir = 8; - pixel_y = 3 + dir = 4 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 }, /turf/open/floor/almayer/plate, /area/almayer/squads/delta) @@ -52531,6 +53008,20 @@ /turf/open/floor/almayer/red, /area/almayer/shipboard/brig/starboard_hallway) "rPO" = ( +/obj/structure/surface/table/almayer, +/obj/item/reagent_container/food/condiment/hotsauce/franks{ + pixel_x = -6; + pixel_y = 16 + }, +/obj/item/facepaint/black{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 1; + pixel_y = 2 + }, /turf/open/floor/almayer/blue/southwest, /area/almayer/squads/delta) "rPQ" = ( @@ -52580,6 +53071,7 @@ /turf/closed/wall/almayer/white/reinforced, /area/almayer/medical/hydroponics) "rQA" = ( +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/cargo_arrow/west, /area/almayer/squads/delta) "rQV" = ( @@ -52931,6 +53423,7 @@ "rYp" = ( /obj/effect/landmark/start/marine/medic/delta, /obj/effect/landmark/late_join/delta, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/plate, /area/almayer/squads/delta) "rYv" = ( @@ -53190,8 +53683,12 @@ /turf/open/floor/almayer/red/northwest, /area/almayer/hallways/upper/starboard) "sdC" = ( -/obj/structure/bed/chair{ - dir = 4 +/obj/structure/surface/table/almayer, +/obj/item/trash/USCMtray, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 1; + pixel_y = 2 }, /turf/open/floor/almayer/blue, /area/almayer/squads/delta) @@ -53326,6 +53823,11 @@ pixel_x = 8; pixel_y = 8 }, +/obj/item/facepaint/green, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, /turf/open/floor/almayer/blue, /area/almayer/squads/delta) "sgU" = ( @@ -53712,6 +54214,10 @@ /area/almayer/maint/hull/lower/l_a_s) "snR" = ( /obj/structure/surface/table/almayer, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, /turf/open/floor/almayer/blue, /area/almayer/squads/delta) "snX" = ( @@ -53796,6 +54302,10 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, /turf/open/floor/almayer/emerald/west, /area/almayer/squads/charlie) "spT" = ( @@ -54239,6 +54749,10 @@ dir = 8; pixel_y = 3 }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, /turf/open/floor/almayer/blue, /area/almayer/squads/delta) "sAw" = ( @@ -54315,6 +54829,17 @@ pixel_x = -1; pixel_y = 1 }, +/obj/structure/machinery/vending/cigarette{ + density = 0; + pixel_x = -5; + pixel_y = 16 + }, +/obj/structure/reagent_dispensers/water_cooler/stacks{ + density = 0; + pixel_x = 13; + pixel_y = 15 + }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/plate, /area/almayer/squads/alpha) "sCI" = ( @@ -54962,6 +55487,12 @@ /turf/open/floor/almayer/mono, /area/almayer/lifeboat_pumps/south2) "sSC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_x = -1; + pixel_y = 2 + }, /turf/open/floor/almayer/blue/southeast, /area/almayer/squads/delta) "sSG" = ( @@ -55036,6 +55567,7 @@ pixel_x = 1; pixel_y = 1 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/bluefull, /area/almayer/squads/delta) "sUk" = ( @@ -55477,6 +56009,13 @@ }, /turf/open/floor/almayer/plate, /area/almayer/hallways/hangar) +"tdf" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/turf/open/floor/almayer/blue/east, +/area/almayer/squads/delta) "tdi" = ( /obj/structure/disposalpipe/junction{ dir = 4; @@ -55733,10 +56272,13 @@ /turf/open/floor/almayer/red/southeast, /area/almayer/maint/upper/u_a_p) "tig" = ( -/obj/structure/surface/table/almayer, -/obj/item/reagent_container/food/condiment/hotsauce/tabasco{ - pixel_x = 14; - pixel_y = 20 +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 }, /turf/open/floor/almayer, /area/almayer/squads/alpha) @@ -56017,6 +56559,16 @@ "tni" = ( /turf/open/floor/almayer/sterile_green_side/north, /area/almayer/medical/operating_room_three) +"tnz" = ( +/obj/structure/machinery/cryopod{ + pixel_y = 6 + }, +/obj/structure/machinery/light{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer/cargo, +/area/almayer/squads/bravo) "tnY" = ( /obj/structure/machinery/cryopod{ pixel_y = 6 @@ -56024,6 +56576,7 @@ /obj/structure/machinery/light{ dir = 8 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/cargo, /area/almayer/squads/alpha) "tob" = ( @@ -56678,6 +57231,20 @@ }, /turf/open/floor/plating, /area/almayer/shipboard/brig/processing) +"tzr" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/turf/open/floor/almayer/emerald, +/area/almayer/squads/charlie) "tzw" = ( /obj/structure/machinery/light{ dir = 1 @@ -56690,6 +57257,7 @@ unslashable = 1 }, /obj/structure/machinery/cm_vending/sorted/medical/blood/bolted, +/obj/structure/medical_supply_link/green, /turf/open/floor/almayer/sterile_green_side, /area/almayer/medical/lockerroom) "tzF" = ( @@ -56948,6 +57516,13 @@ /obj/structure/largecrate/supply/supplies/flares, /turf/open/floor/almayer/red/north, /area/almayer/maint/upper/u_a_p) +"tFP" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/turf/open/floor/almayer/orange, +/area/almayer/squads/bravo) "tFS" = ( /obj/structure/machinery/computer/supplycomp, /obj/structure/sign/safety/terminal{ @@ -57126,6 +57701,7 @@ icon_state = "N"; pixel_y = 1 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/plate, /area/almayer/squads/alpha) "tIS" = ( @@ -57187,6 +57763,13 @@ }, /turf/open/floor/almayer/cargo, /area/almayer/living/bridgebunks) +"tKY" = ( +/obj/structure/bed/chair{ + dir = 8; + pixel_y = 3 + }, +/turf/open/floor/almayer/plate, +/area/almayer/squads/alpha) "tLa" = ( /obj/structure/machinery/door/firedoor/border_only/almayer{ dir = 2 @@ -57361,6 +57944,10 @@ }, /turf/open/floor/almayer/bluefull, /area/almayer/living/briefing) +"tPD" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer/emerald/north, +/area/almayer/squads/charlie) "tPI" = ( /obj/structure/bed/chair{ dir = 4 @@ -57984,6 +58571,7 @@ icon_state = "N"; pixel_y = 1 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/plate, /area/almayer/squads/alpha) "udK" = ( @@ -58522,6 +59110,7 @@ dir = 8; pixel_x = -24 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/orange/southwest, /area/almayer/squads/bravo) "uqI" = ( @@ -58650,8 +59239,12 @@ pixel_x = 5 }, /obj/item/reagent_container/food/condiment/hotsauce/cholula{ - pixel_x = -8; - pixel_y = 22 + pixel_x = -12; + pixel_y = 14 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 }, /turf/open/floor/almayer, /area/almayer/squads/bravo) @@ -58861,6 +59454,17 @@ icon_state = "SE-out"; pixel_x = 1 }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_x = -1; + pixel_y = 2 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 1; + pixel_y = 2 + }, /turf/open/floor/almayer/emerald, /area/almayer/squads/charlie) "uxC" = ( @@ -59313,9 +59917,7 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/hangar) "uIJ" = ( -/obj/structure/bed/chair{ - dir = 1 - }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/red, /area/almayer/squads/alpha) "uIT" = ( @@ -59400,6 +60002,7 @@ /area/almayer/shipboard/starboard_point_defense) "uLE" = ( /obj/structure/machinery/cm_vending/sorted/medical/blood, +/obj/structure/medical_supply_link, /turf/open/floor/almayer/sterile_green_side/north, /area/almayer/shipboard/brig/medical) "uLG" = ( @@ -59609,9 +60212,10 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/living/port_emb) "uRo" = ( -/obj/structure/surface/table/almayer, -/obj/item/trash/USCMtray{ - pixel_y = 7 +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_x = -1; + pixel_y = 2 }, /turf/open/floor/almayer, /area/almayer/squads/alpha) @@ -59736,10 +60340,10 @@ /turf/open/floor/almayer/test_floor4, /area/almayer/maint/hull/upper/p_bow) "uTv" = ( -/obj/structure/surface/table/almayer, -/obj/item/trash/USCMtray{ - pixel_x = 6; - pixel_y = 4 +/obj/structure/bed/chair, +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 }, /turf/open/floor/almayer, /area/almayer/squads/bravo) @@ -60075,6 +60679,12 @@ }, /turf/open/floor/almayer/orange/north, /area/almayer/engineering/lower) +"uYH" = ( +/obj/effect/landmark/start/marine/medic/delta, +/obj/effect/landmark/late_join/delta, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/squads/delta) "uYM" = ( /obj/structure/machinery/status_display{ pixel_y = -30 @@ -60336,6 +60946,20 @@ }, /turf/open/floor/almayer/red/northwest, /area/almayer/lifeboat_pumps/south2) +"vej" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/pipes/standard/simple/hidden/supply, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer/plate, +/area/almayer/squads/charlie) "ven" = ( /obj/structure/bed/chair, /turf/open/floor/almayer/green, @@ -60546,6 +61170,12 @@ }, /turf/open/floor/almayer/plate, /area/almayer/squads/bravo) +"vio" = ( +/obj/effect/landmark/start/marine/delta, +/obj/effect/landmark/late_join/delta, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/squads/delta) "vit" = ( /turf/open/floor/almayer/dark_sterile, /area/almayer/medical/operating_room_four) @@ -60796,7 +61426,10 @@ /turf/open/floor/almayer/plate, /area/almayer/squads/alpha_bravo_shared) "vme" = ( -/obj/structure/bed/chair, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, /turf/open/floor/almayer/red/north, /area/almayer/squads/alpha) "vml" = ( @@ -61068,6 +61701,10 @@ }, /turf/open/floor/almayer/sterile_green_side, /area/almayer/medical/medical_science) +"vqY" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/squads/bravo) "vqZ" = ( /obj/structure/machinery/shower{ pixel_y = 16 @@ -62189,6 +62826,7 @@ icon_state = "E"; pixel_x = 1 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/cargo_arrow/west, /area/almayer/squads/charlie) "vMb" = ( @@ -62285,6 +62923,9 @@ dir = 8; pixel_y = 3 }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, /turf/open/floor/almayer, /area/almayer/squads/charlie) "vNT" = ( @@ -63030,6 +63671,14 @@ }, /turf/closed/wall/almayer, /area/almayer/engineering/lower) +"vZt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/turf/open/floor/almayer/redcorner, +/area/almayer/squads/alpha) "vZv" = ( /obj/structure/pipes/standard/manifold/hidden/supply, /turf/open/floor/almayer, @@ -63774,6 +64423,7 @@ /obj/structure/machinery/light{ dir = 8 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/plate, /area/almayer/squads/charlie) "woy" = ( @@ -64126,6 +64776,17 @@ }, /turf/open/floor/almayer/orange/southwest, /area/almayer/engineering/upper_engineering/starboard) +"wuU" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer/plate, +/area/almayer/squads/charlie) "wvb" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -64347,6 +65008,16 @@ }, /turf/open/floor/almayer, /area/almayer/hallways/lower/port_umbilical) +"wBr" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out"; + pixel_x = 1 + }, +/turf/open/floor/almayer/red/north, +/area/almayer/squads/alpha) "wBw" = ( /obj/structure/pipes/vents/pump, /obj/structure/machinery/status_display{ @@ -64765,6 +65436,10 @@ icon_state = "E"; pixel_x = 1 }, +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 + }, /turf/open/floor/almayer/emerald/east, /area/almayer/squads/charlie) "wJH" = ( @@ -65869,6 +66544,7 @@ dir = 1 }, /obj/structure/machinery/cm_vending/sorted/medical/blood/bolted, +/obj/structure/medical_supply_link, /turf/open/floor/almayer/sterile_green_side/north, /area/almayer/medical/lockerroom) "xgN" = ( @@ -66080,7 +66756,7 @@ /turf/open/floor/almayer/greencorner/east, /area/almayer/hallways/lower/starboard_fore_hallway) "xlk" = ( -/obj/structure/surface/table/almayer, +/obj/structure/bed/chair, /turf/open/floor/almayer, /area/almayer/squads/bravo) "xlC" = ( @@ -67600,10 +68276,6 @@ /turf/open/floor/almayer/plate, /area/almayer/maint/hull/upper/p_stern) "xRj" = ( -/obj/structure/bed/chair{ - dir = 8; - pixel_y = 3 - }, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 1 }, @@ -67678,6 +68350,10 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/living/cryo_cells) "xSW" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, /turf/open/floor/almayer/red/west, /area/almayer/squads/alpha) "xSY" = ( @@ -88626,7 +89302,7 @@ pcl bpj pcl gHZ -pcl +nfF fgE btO btO @@ -112959,17 +113635,17 @@ ikT aLT vZb tnY -rAN +gjy tIQ cic ceg mdo mJj -tDZ +tnz nYc bnB aVd -aUZ +hMX uqA bES kcl @@ -113172,8 +113848,8 @@ ljs hsW mFO bJE -aSE -aVf +aRT +hSV bES kcl bqc @@ -113204,15 +113880,15 @@ udf iyC pOW hNw -sZq -jZv -cgy +oMr +tPD +bJD nrw spS lBv pXZ hNw -bNC +iIR sDM clr nvT @@ -113372,11 +114048,11 @@ bgY mdo mJj byn -gip +mUP bnt bJH -iIR -aVf +aRT +hSV bES kcl bqc @@ -113408,8 +114084,8 @@ ekM pOW hNw sZq -jZv -gnu +tPD +bJD bOQ chR cjg @@ -113575,11 +114251,11 @@ bCS aLT aLT ksp -gip +bOG brH chp -chp -aVf +jRH +nks aQL aQL lhs @@ -113612,10 +114288,10 @@ pmd bJC bJC bMD -vND +bJD vND chR -cjg +tzr kIP bJC bSJ @@ -113770,11 +114446,11 @@ vPv oTA vPv rAN -tIQ -vme +gRS +aNc aNQ aOL -uIJ +iIO hRd aLT aQL @@ -113782,7 +114458,7 @@ bmh bnX aRo brA -aVf +tFP lQz aQL bqc @@ -113815,18 +114491,18 @@ pOW bJC jht jZv -cgy +bJD cgy lbX uxp bJC bJC bSZ -ckX -bUp +eIG +cll bUN -bVb -ivM +sAc +oQB mAV hzu qNd @@ -113971,21 +114647,21 @@ aLT nuN nuN rfa +ipM ehx -ehx -tVq +cBs vme -mLF +bwf tig -uIJ +nex aPi aLT tDZ gip uTv bKC -bOG -aVf +bnt +jdm iaq aQL bqc @@ -114021,20 +114697,20 @@ jZv lLC nEo nZy -cjg +tzr lbf bJC bTa -ckX +bbu iWc -cqz +bUN bVb wty pWb -pWb +hDx rYp oEo -oEo +uYH bSJ xhO lMO @@ -114172,12 +114848,12 @@ oPF jEM aLT vug -vug +iSZ muy vug vug tVq -vme +dgE lJO uRo uIJ @@ -114188,7 +114864,7 @@ gip xlk uuj bRg -aVf +dEk aQL aQL ylN @@ -114231,13 +114907,13 @@ bSJ bTM bUq rPE -bVb +gnu wty wWX wWX yle -wWX -wWX +rNd +rNd bSJ xhO xHa @@ -114379,16 +115055,16 @@ vAE iKw vAE wMG -tIQ -nTl +oSy +wBr efK -aMz -rGj +lWG +uIJ mdo mJj bHp bIU -tAN +eyl tAN jOi aVf @@ -114422,7 +115098,7 @@ uPE ekM pOW hNw -sZq +oMr lef xRj wJD @@ -114585,7 +115261,7 @@ aLT fbb nTl bwf -aMP +vZt bEG mdo mJj @@ -114625,7 +115301,7 @@ kAj bFX hza hNw -sZq +oMr ltI vfa wdz @@ -114633,7 +115309,7 @@ wdz nCf nCf hNw -bNC +iIR uMS qmk rtV @@ -114785,17 +115461,17 @@ vPv oTA vPv rAN -tIQ +jNK aNc -aNT -rGj -bdC +bwf +iIO +cqz mdo mJj sEd wDK -iMr -wuq +sEd +wDK bRV bSe bES @@ -114836,12 +115512,12 @@ yiW oaW yiW hNw -bNC -clK -jdm +iIR +koI +bUr pQN snR -ivM +aNT qNd hzu mAV @@ -114983,15 +115659,15 @@ emA efP ikT aLT -cjc -cjc +iDf +iDf vUb nuN nuN -cBs +tVq kiV -iSZ -uIJ +bwf +nVa kJi aLT aLT @@ -115044,12 +115720,12 @@ hTc bUr ycd sAc -wty -oEo +jrR +uYH oEo yfm -fXN -fXN +vio +vio bSJ gEh xhO @@ -115187,21 +115863,21 @@ uzv ikT aLT cjc -cjc -vUb +iDf +bUp cjc cjc cBs bsU bwg bCP -bdC +jKK aLT pqK uAW pqK -uAW -tDZ +isa +qZX vil bpC qZX @@ -115245,10 +115921,10 @@ lbf bSJ gGf qyi -hXY +tdf sSC wty -fXN +vio fXN yfm fXN @@ -115398,10 +116074,10 @@ tIQ btc bwh uMl -bdC +tKY dII -fZZ -fZZ +mLF +mLF viS sXw sXw @@ -115443,14 +116119,14 @@ rQV wdz wdz fDJ -bKM -bKM +mpJ +mpJ bZU -clK +koI qFK pmq sUj -ivM +aNT vSW scy gEo @@ -115603,7 +116279,7 @@ bxB uWY wEd jvp -gBc +oyG gBc gBc gBc @@ -115647,7 +116323,7 @@ lNw lNw lNw lNw -lNw +vej erh rqE qWt @@ -115803,13 +116479,13 @@ aLT cjc cjc uJU -cjc +iDf cjc aLT lDV fZZ hEb -qDq +dlu qDq jOx bpC @@ -115843,7 +116519,7 @@ gyw uNQ gyw bJC -oXb +gkd cfo lkM oXb @@ -115856,7 +116532,7 @@ fXN fXN kPJ fXN -fXN +mvy bSJ enY srl @@ -116003,17 +116679,17 @@ jEM ikT jEM aLT -iPS -vAE +qHe +dKX meY -iPS -vAE +qHe +dKX aLT iMr wDK iMr -wDK -rou +wuq +ksp jOx bpC ksp @@ -116046,8 +116722,8 @@ ddL eZR uPE bJC -kIP -cfo +qwL +kUo lkM oaW yiW @@ -116418,9 +117094,9 @@ ikT jEM aQL qZX -qZX tDZ -jOx +qZX +aSE bpC qZX aQL @@ -116454,7 +117130,7 @@ uPE bJC lbf cfo -lkM +wuU lbf lbf lbf @@ -116620,11 +117296,11 @@ jEM jEM jEM aQL +dlu +dlu qDq -qDq -qDq -jOx -bpC +aSE +vqY qDq bTb bqc @@ -116657,8 +117333,8 @@ uPE xSw oXb cfo -lkM -oXb +wuU +gkd oXb oXb bJC @@ -116823,11 +117499,11 @@ emA ikT jEM aQL -qDq +dlu qDq qDq osA -cHl +bcH cHl bTb lhs @@ -116858,10 +117534,10 @@ gyw uNQ gyw xSw -ejo +cLc ejo niY -oXb +gkd oXb oXb bJC @@ -117030,8 +117706,8 @@ ksp ksp rou qDq -qDq -qDq +dlu +dlu bTb bqc ubQ @@ -117061,7 +117737,7 @@ uPE vuV uPE xSw -oXb +gkd oXb oXb kIP diff --git a/maps/predship/huntership.dmm b/maps/predship/huntership.dmm index 3646bc92d9ff..6e14f4f09ecb 100644 --- a/maps/predship/huntership.dmm +++ b/maps/predship/huntership.dmm @@ -2295,15 +2295,11 @@ color = "#6b675e"; name = "Secure Yautja crate" }, -/obj/item/weapon/yautja/combistick, -/obj/item/weapon/yautja/combistick{ - pixel_x = -4; - pixel_y = 4 - }, /obj/item/weapon/twohanded/yautja/glaive/alt, /obj/item/weapon/yautja/chain, /obj/item/weapon/yautja/sword, /obj/item/weapon/yautja/scythe, +/obj/item/weapon/yautja/chained/combistick, /turf/open/floor/strata/grey_multi_tiles, /area/yautja) "Br" = ( diff --git a/maps/templates/Chinook.dmm b/maps/templates/Chinook.dmm index 476f40c10970..8a1ba3276421 100644 --- a/maps/templates/Chinook.dmm +++ b/maps/templates/Chinook.dmm @@ -35,12 +35,6 @@ "ai" = ( /turf/open/floor/almayer_hull/outerhull_dir/southwest, /area/space) -"aj" = ( -/obj/structure/bed/chair/dropship/passenger{ - dir = 4 - }, -/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down, -/area/adminlevel/chinook/shuttle/unpowered) "al" = ( /turf/open/floor/almayer_hull, /area/space) @@ -946,6 +940,10 @@ /obj/structure/closet/crate, /turf/open/floor/almayer/cargo, /area/adminlevel/chinook/cargo) +"do" = ( +/obj/docking_port/stationary/emergency_response/chinook_port, +/turf/open/floor/plating, +/area/adminlevel/chinook/shuttle) "dp" = ( /obj/item/reagent_container/food/drinks/bottle/whiskey{ pixel_x = 5; @@ -1492,12 +1490,6 @@ /obj/structure/machinery/disposal, /turf/open/floor/almayer/sterile_green_side/north, /area/adminlevel/chinook/medical) -"fw" = ( -/obj/structure/machinery/door/airlock/almayer/generic{ - dir = 2 - }, -/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down, -/area/adminlevel/chinook/shuttle/unpowered) "fx" = ( /obj/structure/machinery/light{ dir = 1 @@ -1552,11 +1544,6 @@ }, /turf/open/floor/wood, /area/adminlevel/chinook/offices) -"fD" = ( -/turf/closed/shuttle/ert{ - icon_state = "stan_leftengine" - }, -/area/adminlevel/chinook/shuttle/unpowered) "fE" = ( /obj/structure/machinery/light{ dir = 4 @@ -1621,11 +1608,6 @@ }, /turf/open/floor/wood, /area/adminlevel/chinook/offices) -"fP" = ( -/turf/closed/shuttle/ert{ - icon_state = "rightengine_3" - }, -/area/adminlevel/chinook/shuttle/unpowered) "fQ" = ( /obj/effect/decal/warning_stripes{ icon_state = "N" @@ -1764,11 +1746,6 @@ }, /turf/open/floor/carpet, /area/adminlevel/chinook) -"gy" = ( -/turf/closed/shuttle/ert{ - icon_state = "stan20" - }, -/area/adminlevel/chinook/shuttle/unpowered) "gz" = ( /obj/structure/closet/crate/freezer, /obj/item/reagent_container/food/snacks/creamcheesebreadslice, @@ -1920,9 +1897,6 @@ }, /turf/open/floor/prison/kitchen, /area/adminlevel/chinook/event) -"hc" = ( -/turf/open/shuttle/dropship/light_grey_top_left, -/area/adminlevel/chinook/shuttle/unpowered) "hd" = ( /obj/structure/largecrate/random, /obj/item/circuitboard/airlock, @@ -2500,8 +2474,9 @@ /turf/open/floor/almayer/plating/northeast, /area/adminlevel/chinook/engineering) "jq" = ( -/turf/closed/wall/almayer/outer, -/area/adminlevel/chinook/shuttle/unpowered) +/obj/docking_port/stationary/emergency_response/idle_port1, +/turf/closed/wall/almayer/white, +/area/adminlevel/chinook/medical) "jr" = ( /obj/structure/cargo_container/arious/right, /turf/open/floor/corsat/squares, @@ -2622,11 +2597,6 @@ }, /turf/open/floor/almayer/silver/north, /area/adminlevel/chinook) -"jR" = ( -/turf/closed/shuttle/ert{ - icon_state = "stan3" - }, -/area/adminlevel/chinook/shuttle/unpowered) "jS" = ( /obj/structure/machinery/cm_vending/sorted/medical/wall_med{ pixel_y = 25 @@ -3337,9 +3307,6 @@ }, /turf/open/floor/wood, /area/adminlevel/chinook/offices) -"mX" = ( -/turf/open/shuttle/dropship/light_grey_single_wide_left_to_right, -/area/adminlevel/chinook/shuttle/unpowered) "mY" = ( /obj/structure/surface/table/reinforced/black, /obj/structure/machinery/computer/emails{ @@ -3805,12 +3772,6 @@ }, /turf/open/floor/almayer/red, /area/adminlevel/chinook/sec) -"oD" = ( -/turf/closed/shuttle/ert{ - icon_state = "leftengine_2"; - opacity = 0 - }, -/area/adminlevel/chinook/shuttle/unpowered) "oE" = ( /obj/structure/reagent_dispensers/peppertank{ pixel_x = -30 @@ -3961,11 +3922,6 @@ "ph" = ( /turf/open/floor/almayer/sterile_green_side, /area/adminlevel/chinook/medical) -"pi" = ( -/turf/closed/shuttle/ert{ - icon_state = "stan8" - }, -/area/adminlevel/chinook/shuttle/unpowered) "pj" = ( /obj/item/trash/burger, /turf/open/floor/plating/plating_catwalk, @@ -4093,12 +4049,6 @@ }, /turf/open/floor/almayer/red/north, /area/adminlevel/chinook/sec) -"pG" = ( -/obj/structure/bed/chair/dropship/passenger{ - dir = 8 - }, -/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down, -/area/adminlevel/chinook/shuttle/unpowered) "pH" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/comdoor{ name = "\improper Command Offices" @@ -4504,12 +4454,6 @@ /obj/structure/machinery/cm_vending/sorted/medical/chemistry, /turf/open/floor/almayer/dark_sterile, /area/adminlevel/chinook/medical) -"ri" = ( -/turf/closed/shuttle/ert{ - icon_state = "leftengine_1"; - opacity = 0 - }, -/area/adminlevel/chinook/shuttle/unpowered) "rj" = ( /obj/structure/bed/chair/comfy{ dir = 8 @@ -4986,11 +4930,6 @@ /obj/item/storage/fancy/cigarettes/lucky_strikes, /turf/open/floor/almayer/cargo, /area/adminlevel/chinook/cargo) -"tf" = ( -/turf/closed/shuttle/ert{ - icon_state = "stan22" - }, -/area/adminlevel/chinook/shuttle/unpowered) "tj" = ( /obj/structure/machinery/door/airlock/almayer/engineering{ dir = 1; @@ -5128,11 +5067,6 @@ }, /turf/open/floor/almayer/plate, /area/adminlevel/chinook) -"tN" = ( -/turf/closed/shuttle/ert{ - icon_state = "stan25" - }, -/area/adminlevel/chinook/shuttle/unpowered) "tO" = ( /obj/structure/target/syndicate, /turf/open/floor/almayer/redfull, @@ -5404,7 +5338,7 @@ "uR" = ( /obj/structure/machinery/floodlight/landing, /turf/open/floor/plating, -/area/adminlevel/chinook/shuttle/unpowered) +/area/adminlevel/chinook/shuttle) "uS" = ( /obj/structure/desertdam/decals/road_edge{ pixel_x = 2; @@ -5582,9 +5516,6 @@ }, /turf/open/floor/almayer/emerald, /area/adminlevel/chinook/shuttle) -"vC" = ( -/turf/open/shuttle/dropship/light_grey_top_right, -/area/adminlevel/chinook/shuttle/unpowered) "vE" = ( /obj/structure/sign/safety/ammunition{ pixel_x = 32; @@ -6070,11 +6001,6 @@ }, /turf/open/floor/almayer/red, /area/adminlevel/chinook/sec) -"xK" = ( -/turf/closed/shuttle/ert{ - icon_state = "stan23" - }, -/area/adminlevel/chinook/shuttle/unpowered) "xL" = ( /obj/structure/flora/pottedplant{ icon_state = "pottedplant_18" @@ -6117,9 +6043,6 @@ /obj/structure/machinery/autolathe/full, /turf/open/floor/almayer/sterile_green, /area/adminlevel/chinook/medical) -"xW" = ( -/turf/open/shuttle/dropship/light_grey_bottom_left, -/area/adminlevel/chinook/shuttle/unpowered) "xY" = ( /obj/structure/bed/chair/comfy, /turf/open/floor/strata/faux_wood, @@ -6154,11 +6077,6 @@ }, /turf/open/floor/almayer/plate, /area/adminlevel/chinook/event) -"yh" = ( -/turf/closed/shuttle/ert{ - icon_state = "stan27" - }, -/area/adminlevel/chinook/shuttle/unpowered) "yi" = ( /obj/structure/prop/ice_colony/tiger_rug{ pixel_x = -16 @@ -6553,11 +6471,6 @@ }, /turf/open/floor/almayer/red, /area/adminlevel/chinook/offices) -"Ad" = ( -/turf/closed/shuttle/ert{ - icon_state = "stan1" - }, -/area/adminlevel/chinook/shuttle/unpowered) "Ae" = ( /obj/structure/machinery/computer/crew, /turf/open/floor/almayer/red, @@ -6582,11 +6495,6 @@ /obj/structure/surface/table/reinforced/black, /turf/open/floor/carpet, /area/adminlevel/chinook/sec) -"Ai" = ( -/turf/closed/shuttle/ert{ - icon_state = "stan2" - }, -/area/adminlevel/chinook/shuttle/unpowered) "Aj" = ( /obj/structure/bed/sofa/vert/grey/top, /turf/open/floor/almayer/emeraldfull, @@ -6748,11 +6656,6 @@ /obj/structure/reagent_dispensers/water_cooler/stacks, /turf/open/floor/almayer/plate, /area/adminlevel/chinook/sec) -"AU" = ( -/turf/closed/shuttle/ert{ - icon_state = "stan9" - }, -/area/adminlevel/chinook/shuttle/unpowered) "AV" = ( /obj/structure/platform{ dir = 8 @@ -7021,12 +6924,6 @@ }, /turf/open/floor/wood, /area/adminlevel/chinook) -"Cb" = ( -/turf/closed/shuttle/ert{ - icon_state = "leftengine_3"; - opacity = 0 - }, -/area/adminlevel/chinook/shuttle/unpowered) "Cd" = ( /obj/structure/surface/table/reinforced/black, /obj/item/storage/fancy/cigar{ @@ -7184,9 +7081,6 @@ /obj/structure/machinery/medical_pod/sleeper, /turf/open/floor/almayer/sterile_green_side, /area/adminlevel/chinook/medical) -"CP" = ( -/turf/open/shuttle/dropship/light_grey_bottom_right, -/area/adminlevel/chinook/shuttle/unpowered) "CQ" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/almayer/plating/northeast, @@ -7367,11 +7261,6 @@ }, /turf/open/floor/almayer, /area/adminlevel/chinook) -"Dy" = ( -/turf/closed/shuttle/ert{ - icon_state = "rightengine_2" - }, -/area/adminlevel/chinook/shuttle/unpowered) "Dz" = ( /obj/structure/desertdam/decals/road_edge{ icon_state = "road_edge_decal8"; @@ -7425,9 +7314,6 @@ }, /turf/open/floor/carpet, /area/adminlevel/chinook/offices) -"DJ" = ( -/turf/closed/shuttle/ert, -/area/adminlevel/chinook/shuttle/unpowered) "DL" = ( /obj/structure/surface/table/almayer, /obj/effect/spawner/random/tool, @@ -7540,10 +7426,6 @@ }, /turf/open/floor/wood, /area/adminlevel/chinook/offices) -"El" = ( -/obj/structure/bed/chair/dropship/passenger, -/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down, -/area/adminlevel/chinook/shuttle/unpowered) "Em" = ( /turf/open/floor/kutjevo, /area/adminlevel/chinook/offices) @@ -8044,10 +7926,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/adminlevel/chinook/sec) -"GD" = ( -/obj/structure/machinery/door/airlock/almayer/generic, -/turf/open/shuttle/dropship/light_grey_single_wide_up_to_down, -/area/adminlevel/chinook/shuttle/unpowered) "GE" = ( /obj/structure/largecrate/supply/medicine/blood, /turf/open/floor/almayer/plate, @@ -8559,11 +8437,6 @@ /obj/structure/machinery/disposal, /turf/open/floor/almayer/orange/east, /area/adminlevel/chinook/engineering) -"IK" = ( -/turf/closed/shuttle/ert{ - icon_state = "rightengine_1" - }, -/area/adminlevel/chinook/shuttle/unpowered) "IL" = ( /obj/structure/machinery/disposal, /turf/open/floor/almayer/green/north, @@ -9461,11 +9334,6 @@ /obj/structure/machinery/iv_drip, /turf/open/floor/almayer/sterile_green_side/west, /area/adminlevel/chinook/medical) -"Ms" = ( -/turf/closed/shuttle/ert{ - icon_state = "stan5" - }, -/area/adminlevel/chinook/shuttle/unpowered) "Mt" = ( /obj/structure/surface/table/reinforced/black, /obj/item/book/manual/marine_law{ @@ -10010,13 +9878,6 @@ /obj/structure/machinery/vending/snack, /turf/open/floor/kutjevo/plate, /area/adminlevel/chinook/offices) -"OS" = ( -/obj/structure/prop/pred_flight{ - icon_state = "syndishuttle"; - name = "shuttle control console" - }, -/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down, -/area/adminlevel/chinook/shuttle/unpowered) "OT" = ( /obj/structure/machinery/cm_vending/clothing/synth/snowflake, /obj/structure/machinery/light{ @@ -10277,7 +10138,7 @@ name = "\improper Chinook Shuttle Airlock" }, /turf/open/floor/almayer/plating/northeast, -/area/adminlevel/chinook/shuttle/unpowered) +/area/adminlevel/chinook/shuttle) "PM" = ( /turf/open/floor/almayer/green/west, /area/adminlevel/chinook) @@ -10389,11 +10250,6 @@ /obj/item/tool/soap, /turf/open/floor/almayer/plate, /area/adminlevel/chinook/engineering) -"Qk" = ( -/turf/closed/shuttle/ert{ - icon_state = "stan21" - }, -/area/adminlevel/chinook/shuttle/unpowered) "Qm" = ( /turf/open/floor/almayer/blue/west, /area/adminlevel/chinook/offices) @@ -10711,6 +10567,10 @@ /obj/structure/prop/invuln/fusion_reactor, /turf/open/floor/almayer/plating/northeast, /area/adminlevel/chinook/engineering) +"Ru" = ( +/obj/docking_port/stationary/emergency_response/idle_port3, +/turf/open/floor/almayer/orange, +/area/adminlevel/chinook/engineering) "Rw" = ( /obj/structure/machinery/disposal, /turf/open/floor/almayer/sterile_green_corner/east, @@ -11098,9 +10958,6 @@ }, /turf/open/floor/almayer/plating/northeast, /area/adminlevel/chinook/engineering) -"Ti" = ( -/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down, -/area/adminlevel/chinook/shuttle/unpowered) "Tj" = ( /turf/open/floor/almayer/bluecorner/west, /area/adminlevel/chinook) @@ -11499,11 +11356,6 @@ /obj/item/clothing/glasses/sunglasses/blindfold, /turf/open/floor/almayer/cargo, /area/adminlevel/chinook/sec) -"UV" = ( -/turf/closed/shuttle/ert{ - icon_state = "stan_rightengine" - }, -/area/adminlevel/chinook/shuttle/unpowered) "UW" = ( /obj/structure/surface/table/reinforced/black, /obj/item/reagent_container/food/drinks/coffeecup/uscm{ @@ -11537,10 +11389,6 @@ /obj/structure/closet/secure_closet/brig, /turf/open/floor/almayer/cargo, /area/adminlevel/chinook/sec) -"Va" = ( -/obj/structure/surface/rack, -/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down, -/area/adminlevel/chinook/shuttle/unpowered) "Vb" = ( /turf/open/floor/almayer/blue/west, /area/adminlevel/chinook) @@ -12084,7 +11932,7 @@ /area/adminlevel/chinook) "Xl" = ( /turf/open/floor/plating, -/area/adminlevel/chinook/shuttle/unpowered) +/area/adminlevel/chinook/shuttle) "Xm" = ( /obj/structure/window/framed/almayer/hull, /turf/open/floor/plating, @@ -12646,9 +12494,6 @@ /obj/structure/machinery/constructable_frame, /turf/open/floor/almayer, /area/adminlevel/chinook/engineering) -"Zt" = ( -/turf/open/shuttle/dropship/light_grey_single_wide_up_to_down, -/area/adminlevel/chinook/shuttle/unpowered) "Zu" = ( /turf/open/floor/almayer_hull/outerhull_dir/north, /area/space) @@ -19621,7 +19466,7 @@ UK bz jI pp -RM +Ru XH df df @@ -20890,7 +20735,7 @@ Iv Zc Iv Iv -Iv +jq Iv KI Iv @@ -25725,18 +25570,18 @@ Br Xl Xl Xl -gy -DJ -GD -DJ -DJ -DJ -GD -DJ -fD -Cb -oD -ri +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +do Xl Xl hM @@ -25852,18 +25697,18 @@ Br Xl Xl Xl -Qk -Va -Ti -aj -aj -aj -Ti -Va -pi -DJ -DJ -Ad +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl Xl Xl hM @@ -25978,19 +25823,19 @@ Mh Br Xl Xl -gy -tf -hc -Zt -Zt -Zt -Zt -Zt -xW -Ti -Ti -Ti -fw +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl Xl Xl hM @@ -26105,19 +25950,19 @@ Br Br Xl Xl -yh -OS -mX -El -El -El -El -El -mX -Zt -Zt -Zt -Ai +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl Xl Xl hM @@ -26232,19 +26077,19 @@ mu Br Xl Xl -tN -xK -vC -Zt -Zt -Zt -Zt -Zt -CP -Ti -Ti -Ti -fw +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl Xl Xl hM @@ -26360,18 +26205,18 @@ Br Xl Xl Xl -Qk -Va -Ti -pG -pG -pG -Ti -Va -AU -Ms -Ms -jR +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl Xl Xl hM @@ -26487,18 +26332,18 @@ Br Xl Xl Xl -tN -Ms -GD -Ms -Ms -Ms -GD -Ms -UV -fP -Dy -IK +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl +Xl Xl Xl hM @@ -26738,7 +26583,7 @@ Se yy kk Br -jq +tC PL PL PL @@ -26754,7 +26599,7 @@ PL PL PL PL -jq +tC tC af oi diff --git a/sound/voice/barkstrong1.ogg b/sound/voice/barkstrong1.ogg new file mode 100644 index 000000000000..06a5eb7305b5 Binary files /dev/null and b/sound/voice/barkstrong1.ogg differ diff --git a/sound/voice/barkstrong2.ogg b/sound/voice/barkstrong2.ogg new file mode 100644 index 000000000000..d71b2b6c63e0 Binary files /dev/null and b/sound/voice/barkstrong2.ogg differ diff --git a/sound/voice/barkstrong3.ogg b/sound/voice/barkstrong3.ogg new file mode 100644 index 000000000000..7ed03b754d78 Binary files /dev/null and b/sound/voice/barkstrong3.ogg differ diff --git a/sound/voice/growl1.ogg b/sound/voice/growl1.ogg new file mode 100644 index 000000000000..386050fd97a2 Binary files /dev/null and b/sound/voice/growl1.ogg differ diff --git a/sound/voice/growl2.ogg b/sound/voice/growl2.ogg new file mode 100644 index 000000000000..bcab9251df7d Binary files /dev/null and b/sound/voice/growl2.ogg differ diff --git a/sound/voice/growl3.ogg b/sound/voice/growl3.ogg new file mode 100644 index 000000000000..26e9df05653f Binary files /dev/null and b/sound/voice/growl3.ogg differ diff --git a/sound/voice/growl4.ogg b/sound/voice/growl4.ogg new file mode 100644 index 000000000000..91062e5f869d Binary files /dev/null and b/sound/voice/growl4.ogg differ diff --git a/tgui/packages/tgui/interfaces/Orbit/index.tsx b/tgui/packages/tgui/interfaces/Orbit/index.tsx index 36ceb6359cde..49cbb8d95737 100644 --- a/tgui/packages/tgui/interfaces/Orbit/index.tsx +++ b/tgui/packages/tgui/interfaces/Orbit/index.tsx @@ -127,13 +127,16 @@ const ObservableSearch = () => { }; const xenoSplitter = (members: Array) => { + const tdomeHive: Array = []; const primeHive: Array = []; const corruptedHive: Array = []; const forsakenHive: Array = []; const otherHives: Array = []; members.forEach((x) => { - if (x.hivenumber?.includes('normal')) { + if (x.area_name?.includes('Thunderdome')) { + tdomeHive.push(x); + } else if (x.hivenumber?.includes('normal')) { primeHive.push(x); } else if (x.hivenumber?.includes('corrupted')) { corruptedHive.push(x); @@ -144,6 +147,7 @@ const xenoSplitter = (members: Array) => { } }); const squads = [ + buildSquadObservable('Thunderdome', 'xeno', tdomeHive), buildSquadObservable('Prime', 'xeno', primeHive), buildSquadObservable('Corrupted', 'green', corruptedHive), buildSquadObservable('Forsaken', 'grey', forsakenHive), @@ -305,6 +309,7 @@ const ObservableContent = () => { npcs = [], vehicles = [], escaped = [], + in_thunderdome = [], } = data; return ( @@ -373,6 +378,11 @@ const ObservableContent = () => { /> + diff --git a/tgui/packages/tgui/interfaces/Orbit/types.ts b/tgui/packages/tgui/interfaces/Orbit/types.ts index ca21898287d0..d1a360de0d72 100644 --- a/tgui/packages/tgui/interfaces/Orbit/types.ts +++ b/tgui/packages/tgui/interfaces/Orbit/types.ts @@ -25,6 +25,7 @@ export type OrbitData = { npcs: Observable[]; vehicles: Observable[]; escaped: Observable[]; + in_thunderdome: Observable[]; icons?: string[]; }; @@ -39,6 +40,7 @@ export type Observable = { orbiters?: number; ref: string; hivenumber: string; + area_name: string; }; export type SquadObservable = { diff --git a/tgui/packages/tgui/interfaces/TutorialMenu.tsx b/tgui/packages/tgui/interfaces/TutorialMenu.tsx index c47db9fd746d..80d0f3a52452 100644 --- a/tgui/packages/tgui/interfaces/TutorialMenu.tsx +++ b/tgui/packages/tgui/interfaces/TutorialMenu.tsx @@ -21,11 +21,12 @@ type TutorialCategory = { type BackendContext = { tutorial_categories: TutorialCategory[]; completed_tutorials: string[]; + locked_tutorials: string[]; }; export const TutorialMenu = (props) => { const { data, act } = useBackend(); - const { tutorial_categories, completed_tutorials } = data; + const { tutorial_categories, completed_tutorials, locked_tutorials } = data; const [chosenTutorial, setTutorial] = useState(null); const [categoryIndex, setCategoryIndex] = useState('Space Station 13'); return ( @@ -77,6 +78,9 @@ export const TutorialMenu = (props) => { : 'default' } width="100%" + disabled={ + !(locked_tutorials.indexOf(tutorial.id) === -1) + } key={tutorial.id} onClick={() => setTutorial(tutorial)} >