diff --git a/code/__DEFINES/__game.dm b/code/__DEFINES/__game.dm index f1424f5560ec..765603df629c 100644 --- a/code/__DEFINES/__game.dm +++ b/code/__DEFINES/__game.dm @@ -103,7 +103,7 @@ block( \ #define SOUND_MIDI (1<<1) #define SOUND_AMBIENCE (1<<2) #define SOUND_LOBBY (1<<3) -#define SOUND_INTERNET (1<<4) +#define SOUND_INTERNET (1<<4) // Unused currently. Kept for default prefs compat only #define SOUND_REBOOT (1<<5) #define SOUND_ADMIN_MEME (1<<6) #define SOUND_ADMIN_ATMOSPHERIC (1<<7) diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index 6844721cd7f0..31103fee93ee 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -22,7 +22,7 @@ #define NOTE_SYNTHETIC 4 #define NOTE_YAUTJA 5 ///Note categories in text form, in order of their numerical #defines. -var/global/list/note_categories = list("Admin", "Merit", "Commanding Officer", "Synthetic", "Yautja") +GLOBAL_LIST_INIT(note_categories, list("Admin", "Merit", "Commanding Officer", "Synthetic", "Yautja")) #define ADMIN_FLW(user) "(FLW)" #define ADMIN_PP(user) "(PP)" diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index de7eb672e87b..999a840b7fdd 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -37,9 +37,6 @@ #define GAS_TYPE_PHORON "phoron" #define GAS_TYPE_CO2 "carbon dioxyde" -/// This was a define, but I changed it to a variable so it can be changed in-game.(kept the all-caps definition because... code...) -Errorage -var/MAX_EXPLOSION_RANGE = 14 - /// Used in /obj/structure/pipes/vents/proc/create_gas #define VENT_GAS_SMOKE "Smoke" #define VENT_GAS_CN20 "CN20 Nerve Gas" diff --git a/code/__DEFINES/clans.dm b/code/__DEFINES/clans.dm index 1b95d11c030c..576bbf6b76d5 100644 --- a/code/__DEFINES/clans.dm +++ b/code/__DEFINES/clans.dm @@ -49,26 +49,6 @@ /// Scales with clan size #define CLAN_LIMIT_SIZE 2 -var/global/list/datum/yautja_rank/clan_ranks = list( - CLAN_RANK_UNBLOODED = new /datum/yautja_rank/unblooded(), - CLAN_RANK_YOUNG = new /datum/yautja_rank/young(), - CLAN_RANK_BLOODED = new /datum/yautja_rank/blooded(), - CLAN_RANK_ELITE = new /datum/yautja_rank/elite(), - CLAN_RANK_ELDER = new /datum/yautja_rank/elder(), - CLAN_RANK_LEADER = new /datum/yautja_rank/leader(), - CLAN_RANK_ADMIN = new /datum/yautja_rank/ancient() -) - -var/global/list/clan_ranks_ordered = list( - CLAN_RANK_UNBLOODED = CLAN_RANK_UNBLOODED_INT, - CLAN_RANK_YOUNG = CLAN_RANK_YOUNG_INT, - CLAN_RANK_BLOODED = CLAN_RANK_BLOODED_INT, - CLAN_RANK_ELITE = CLAN_RANK_ELITE_INT, - CLAN_RANK_ELDER = CLAN_RANK_ELDER_INT, - CLAN_RANK_LEADER = CLAN_RANK_LEADER_INT, - CLAN_RANK_ADMIN = CLAN_RANK_ADMIN_INT -) - #define CLAN_HREF "clan_href" #define CLAN_TARGET_HREF "clan_target_href" diff --git a/code/__DEFINES/conflict.dm b/code/__DEFINES/conflict.dm index 0820c709cdae..d69f0891ffa0 100644 --- a/code/__DEFINES/conflict.dm +++ b/code/__DEFINES/conflict.dm @@ -109,6 +109,7 @@ #define SHOES_SLOWDOWN -1 #define SLOWDOWN_ARMOR_NONE 0 +#define SLOWDOWN_ARMOR_SUPER_LIGHT 0.10 #define SLOWDOWN_ARMOR_VERY_LIGHT 0.20 #define SLOWDOWN_ARMOR_LIGHT 0.35 #define SLOWDOWN_ARMOR_MEDIUM 0.55 diff --git a/code/__DEFINES/dcs/signals/atom/mob/living/signals_living.dm b/code/__DEFINES/dcs/signals/atom/mob/living/signals_living.dm index 56cd4dd8cd8e..89f3951e7c99 100644 --- a/code/__DEFINES/dcs/signals/atom/mob/living/signals_living.dm +++ b/code/__DEFINES/dcs/signals/atom/mob/living/signals_living.dm @@ -23,11 +23,6 @@ #define COMSIG_LIVING_SPEAK "living_speak" #define COMPONENT_OVERRIDE_SPEAK (1<<0) -#define COMSIG_LIVING_APPLY_EFFECT "living_apply_effect" -#define COMSIG_LIVING_ADJUST_EFFECT "living_adjust_effect" -#define COMSIG_LIVING_SET_EFFECT "living_set_effect" - #define COMPONENT_CANCEL_EFFECT (1<<0) - /// From /obj/structure/proc/do_climb(var/mob/living/user, mods) #define COMSIG_LIVING_CLIMB_STRUCTURE "climb_over_structure" /// From /mob/living/Collide(): (atom/A) diff --git a/code/__DEFINES/dcs/signals/atom/signals_atom.dm b/code/__DEFINES/dcs/signals/atom/signals_atom.dm index cac9861d09cb..d9bd1202c159 100644 --- a/code/__DEFINES/dcs/signals/atom/signals_atom.dm +++ b/code/__DEFINES/dcs/signals/atom/signals_atom.dm @@ -51,3 +51,6 @@ /// Called when an atom is mouse dropped on another atom, from /client/MouseDrop: (atom/dropped_onto) #define COMSIG_ATOM_DROP_ON "atom_drop_on" + +/// Called when an atom has emp_act called on it, from /atom/emp_act: (severity) +#define COMSIG_ATOM_EMP_ACT "atom_emp_act" diff --git a/code/__DEFINES/dcs/signals/atom/signals_cell.dm b/code/__DEFINES/dcs/signals/atom/signals_cell.dm new file mode 100644 index 000000000000..75e13d8bfdfc --- /dev/null +++ b/code/__DEFINES/dcs/signals/atom/signals_cell.dm @@ -0,0 +1,26 @@ +/// (charge_amount) +#define COMSIG_CELL_USE_CHARGE "cell_use_charge" + #define COMPONENT_CELL_NO_USE_CHARGE (1<<0) + +/// (charge_amount) +#define COMSIG_CELL_ADD_CHARGE "cell_add_charge" + +#define COMSIG_CELL_START_TICK_DRAIN "cell_start_tick_drain" + +#define COMSIG_CELL_STOP_TICK_DRAIN "cell_stop_tick_drain" + +/// (mob/living/user) +#define COMSIG_CELL_TRY_RECHARGING "cell_try_recharging" + #define COMPONENT_CELL_NO_RECHARGE (1<<0) + +#define COMSIG_CELL_OUT_OF_CHARGE "cell_out_of_charge" + +/// (charge_amount) +#define COMSIG_CELL_CHECK_CHARGE "cell_check_charge" + #define COMPONENT_CELL_CHARGE_INSUFFICIENT (1<<0) + +#define COMSIG_CELL_TRY_INSERT_CELL "cell_try_insert_cell" + #define COMPONENT_CANCEL_CELL_INSERT (1<<0) + +/// (mob/living/user) +#define COMSIG_CELL_REMOVE_CELL "cell_remove_cell" diff --git a/code/__DEFINES/dcs/signals/atom/signals_item.dm b/code/__DEFINES/dcs/signals/atom/signals_item.dm index 64f4c24798e1..6024c0524992 100644 --- a/code/__DEFINES/dcs/signals/atom/signals_item.dm +++ b/code/__DEFINES/dcs/signals/atom/signals_item.dm @@ -66,5 +66,5 @@ /// from /obj/item/weapon/gun/proc/load_into_chamber() : () #define COMSIG_GUN_INTERRUPT_FIRE "gun_interrupt_fire" -//Additional procs on items that will be triggered right after the human finishes spawns in +//from /datum/authority/branch/role/proc/equip_role() #define COMSIG_POST_SPAWN_UPDATE "post_spawn_update" diff --git a/code/__DEFINES/equipment.dm b/code/__DEFINES/equipment.dm index 5f8f27a65711..f0688282572d 100644 --- a/code/__DEFINES/equipment.dm +++ b/code/__DEFINES/equipment.dm @@ -80,10 +80,8 @@ #define CAN_DIG_SHRAPNEL (1<<11) /// whether it has an animated icon state of "[icon_state]_on" to be used during surgeries. #define ANIMATED_SURGICAL_TOOL (1<<12) -/// The item goes on top of tables, instead of into them with the overlay system -#define NOTABLEMERGE (1<<13) /// Has heat source but isn't 'on fire' and thus can be stored -#define IGNITING_ITEM (1<<14) +#define IGNITING_ITEM (1<<13) //========================================================================================== @@ -495,7 +493,7 @@ GLOBAL_LIST_INIT(slot_to_contained_sprite_shorthand, list( #define UNIFORM_VEND_DRESS_EXTRA "dress extra" -var/global/list/uniform_categories = list( +GLOBAL_LIST_INIT(uniform_categories, list( "UTILITY" = list(UNIFORM_VEND_UTILITY_UNIFORM, UNIFORM_VEND_UTILITY_JACKET, UNIFORM_VEND_UTILITY_HEAD, UNIFORM_VEND_UTILITY_GLOVES, UNIFORM_VEND_UTILITY_SHOES), "UTILITY EXTRAS" = list(UNIFORM_VEND_UTILITY_EXTRA), "SERVICE" = list(UNIFORM_VEND_SERVICE_UNIFORM, UNIFORM_VEND_SERVICE_JACKET, UNIFORM_VEND_SERVICE_GLOVES, UNIFORM_VEND_SERVICE_SHOES), @@ -504,7 +502,7 @@ var/global/list/uniform_categories = list( "DRESS" = list(UNIFORM_VEND_DRESS_UNIFORM, UNIFORM_VEND_DRESS_JACKET, UNIFORM_VEND_DRESS_GLOVES, UNIFORM_VEND_DRESS_SHOES), "DRESS HEADWEAR" = list(UNIFORM_VEND_DRESS_HEAD), "DRESS EXTRAS" = list(UNIFORM_VEND_DRESS_EXTRA) -) +)) //================================================= diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index 38e5693dcbe5..deee80c7a91d 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -23,3 +23,5 @@ #define NOTIFY_ATTACK "attack" #define NOTIFY_ORBIT "orbit" #define NOTIFY_JOIN_XENO "join_xeno" +#define NOTIFY_XENO_TACMAP "xeno_tacmap" +#define NOTIFY_USCM_TACMAP "uscm_tacmap" diff --git a/code/__DEFINES/job.dm b/code/__DEFINES/job.dm index 56062cb0213b..ad3b9fe3af32 100644 --- a/code/__DEFINES/job.dm +++ b/code/__DEFINES/job.dm @@ -1,6 +1,6 @@ #define get_job_playtime(client, job) (client.player_data? LAZYACCESS(client.player_data.playtimes, job)? client.player_data.playtimes[job].total_minutes MINUTES_TO_DECISECOND : 0 : 0) -#define GET_MAPPED_ROLE(title) (RoleAuthority?.role_mappings[title] ? RoleAuthority.role_mappings[title] : RoleAuthority.roles_by_name[title]) -#define GET_DEFAULT_ROLE(title) (RoleAuthority?.default_roles[title] ? RoleAuthority.default_roles[title] : title) +#define GET_MAPPED_ROLE(title) (GLOB.RoleAuthority?.role_mappings[title] ? GLOB.RoleAuthority.role_mappings[title] : GLOB.RoleAuthority.roles_by_name[title]) +#define GET_DEFAULT_ROLE(title) (GLOB.RoleAuthority?.default_roles[title] ? GLOB.RoleAuthority.default_roles[title] : title) // Squad name defines #define SQUAD_MARINE_1 "Alpha" @@ -24,7 +24,7 @@ #define JOB_SQUAD_ROLES /datum/timelock/squad #define JOB_SQUAD_ROLES_LIST list(JOB_SQUAD_MARINE, JOB_SQUAD_LEADER, JOB_SQUAD_ENGI, JOB_SQUAD_MEDIC, JOB_SQUAD_SPECIALIST, JOB_SQUAD_SMARTGUN, JOB_SQUAD_TEAM_LEADER) -var/global/list/job_squad_roles = JOB_SQUAD_ROLES_LIST +GLOBAL_LIST_INIT(job_squad_roles, JOB_SQUAD_ROLES_LIST) #define JOB_COLONIST "Colonist" #define JOB_PASSENGER "Passenger" @@ -72,7 +72,7 @@ var/global/list/job_squad_roles = JOB_SQUAD_ROLES_LIST #define JOB_SO "Staff Officer" #define JOB_COMMAND_ROLES /datum/timelock/command #define JOB_COMMAND_ROLES_LIST list(JOB_CO, JOB_XO, JOB_SO) -var/global/list/job_command_roles = JOB_COMMAND_ROLES_LIST +GLOBAL_LIST_INIT(job_command_roles, JOB_COMMAND_ROLES_LIST) #define JOB_AUXILIARY_OFFICER "Auxiliary Support Officer" #define JOB_PILOT "Pilot Officer" diff --git a/code/__DEFINES/minimap.dm b/code/__DEFINES/minimap.dm index 71d0ed8e7445..003d723600c4 100644 --- a/code/__DEFINES/minimap.dm +++ b/code/__DEFINES/minimap.dm @@ -5,7 +5,17 @@ #define MINIMAP_FLAG_UPP (1<<3) #define MINIMAP_FLAG_CLF (1<<4) #define MINIMAP_FLAG_YAUTJA (1<<5) -#define MINIMAP_FLAG_ALL (1<<6) - 1 +#define MINIMAP_FLAG_XENO_CORRUPTED (1<<6) +#define MINIMAP_FLAG_XENO_ALPHA (1<<7) +#define MINIMAP_FLAG_XENO_BRAVO (1<<8) +#define MINIMAP_FLAG_XENO_CHARLIE (1<<9) +#define MINIMAP_FLAG_XENO_DELTA (1<<10) +#define MINIMAP_FLAG_XENO_FERAL (1<<11) +#define MINIMAP_FLAG_XENO_TAMED (1<<12) +#define MINIMAP_FLAG_XENO_MUTATED (1<<13) +#define MINIMAP_FLAG_XENO_FORSAKEN (1<<14) +#define MINIMAP_FLAG_XENO_RENEGADE (1<<15) +#define MINIMAP_FLAG_ALL (1<<16) - 1 ///Converts the overworld x and y to minimap x and y values #define MINIMAP_SCALE 2 @@ -77,9 +87,3 @@ GLOBAL_LIST_INIT(all_minimap_flags, bitfield2list(MINIMAP_FLAG_ALL)) #define TACMAP_BASE_OCCLUDED "Occluded" #define TACMAP_BASE_OPEN "Open" - -#define TACMAP_DEFAULT "Default" -#define TACMAP_XENO "Xeno" -#define TACMAP_YAUTJA "Yautja" -#define TACMAP_FACTION "Faction" - diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index b0ddecc0580f..1f6c700158ad 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -1,5 +1,5 @@ -/// Multiplier for Stun/KD/KO/etc durations in new backend, due to old being based on life ticks -#define GLOBAL_STATUS_MULTIPLIER 20 // 2 Seconds life tick to ds +/// Multiplier for Stun/KD/KO/etc durations in new backend, due to old system being based on life ticks +#define GLOBAL_STATUS_MULTIPLIER 20 // each in-code unit is worth 20ds of duration #define HEALTH_THRESHOLD_DEAD -100 #define HEALTH_THRESHOLD_CRIT -50 @@ -375,7 +375,7 @@ // Hellhound strain flags #define HELLHOUND_NORMAL "Normal" -var/list/default_onmob_icons = list( +GLOBAL_LIST_INIT(default_onmob_icons, list( WEAR_L_HAND = 'icons/mob/humans/onmob/items_lefthand_0.dmi', WEAR_R_HAND = 'icons/mob/humans/onmob/items_righthand_0.dmi', WEAR_WAIST = 'icons/mob/humans/onmob/belt.dmi', @@ -394,9 +394,9 @@ var/list/default_onmob_icons = list( WEAR_HANDS = 'icons/mob/humans/onmob/hands.dmi', WEAR_J_STORE = 'icons/mob/humans/onmob/suit_slot.dmi', WEAR_ACCESSORIES = 'icons/mob/humans/onmob/ties.dmi' - ) + )) -var/list/default_xeno_onmob_icons = list( +GLOBAL_LIST_INIT(default_xeno_onmob_icons, list( /mob/living/carbon/xenomorph/runner = 'icons/mob/xenos/onmob/runner.dmi', /mob/living/carbon/xenomorph/praetorian = 'icons/mob/xenos/onmob/praetorian.dmi', /mob/living/carbon/xenomorph/drone = 'icons/mob/xenos/onmob/drone.dmi', @@ -404,7 +404,7 @@ var/list/default_xeno_onmob_icons = list( /mob/living/carbon/xenomorph/defender = 'icons/mob/xenos/onmob/defender.dmi', /mob/living/carbon/xenomorph/sentinel = 'icons/mob/xenos/onmob/sentinel.dmi', /mob/living/carbon/xenomorph/spitter = 'icons/mob/xenos/onmob/spitter.dmi' - ) + )) // species names #define SPECIES_HUMAN "Human" @@ -419,6 +419,8 @@ var/list/default_xeno_onmob_icons = list( #define EXTREMITY_LIMBS list("l_leg","l_foot","r_leg","r_foot","l_arm","l_hand","r_arm","r_hand") #define CORE_LIMBS list("chest","head","groin") +#define SYMPTOM_ACTIVATION_PROB 3 + // Body position defines. /// Mob is standing up, usually associated with lying_angle value of 0. #define STANDING_UP 0 @@ -445,3 +447,4 @@ var/list/default_xeno_onmob_icons = list( #define MOBILITY_FLAGS_DEFAULT (MOBILITY_MOVE | MOBILITY_STAND) #define MOBILITY_FLAGS_CARBON_DEFAULT (MOBILITY_MOVE | MOBILITY_STAND | MOBILITY_REST | MOBILITY_LIEDOWN) #define MOBILITY_FLAGS_REST_CAPABLE_DEFAULT (MOBILITY_MOVE | MOBILITY_STAND | MOBILITY_REST | MOBILITY_LIEDOWN) + diff --git a/code/__DEFINES/mode.dm b/code/__DEFINES/mode.dm index 854da7a52b4c..218bfef5eb40 100644 --- a/code/__DEFINES/mode.dm +++ b/code/__DEFINES/mode.dm @@ -109,34 +109,34 @@ //================================================= //Role defines, specifically lists of roles for job bans, crew manifests and the like. -var/global/list/ROLES_COMMAND = list(JOB_CO, JOB_XO, JOB_SO, JOB_AUXILIARY_OFFICER, JOB_INTEL, JOB_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_CREWMAN, JOB_POLICE, JOB_CORPORATE_LIAISON, JOB_COMBAT_REPORTER, JOB_CHIEF_REQUISITION, JOB_CHIEF_ENGINEER, JOB_CMO, JOB_CHIEF_POLICE, JOB_SEA, JOB_SYNTH, JOB_WARDEN) +GLOBAL_LIST_INIT(ROLES_COMMAND, list(JOB_CO, JOB_XO, JOB_SO, JOB_AUXILIARY_OFFICER, JOB_INTEL, JOB_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_CREWMAN, JOB_POLICE, JOB_CORPORATE_LIAISON, JOB_COMBAT_REPORTER, JOB_CHIEF_REQUISITION, JOB_CHIEF_ENGINEER, JOB_CMO, JOB_CHIEF_POLICE, JOB_SEA, JOB_SYNTH, JOB_WARDEN)) //Marine roles #define ROLES_OFFICERS list(JOB_CO, JOB_XO, JOB_SO, JOB_AUXILIARY_OFFICER, JOB_INTEL, JOB_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_SEA, JOB_CORPORATE_LIAISON, JOB_COMBAT_REPORTER, JOB_SYNTH, JOB_CHIEF_POLICE, JOB_WARDEN, JOB_POLICE) -var/global/list/ROLES_CIC = list(JOB_CO, JOB_XO, JOB_SO, JOB_WO_CO, JOB_WO_XO) -var/global/list/ROLES_AUXIL_SUPPORT = list(JOB_AUXILIARY_OFFICER, JOB_INTEL, JOB_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_WO_CHIEF_POLICE, JOB_WO_SO, JOB_WO_CREWMAN, JOB_WO_POLICE, JOB_WO_PILOT) -var/global/list/ROLES_MISC = list(JOB_SYNTH, JOB_WORKING_JOE, JOB_SEA, JOB_CORPORATE_LIAISON, JOB_COMBAT_REPORTER, JOB_MESS_SERGEANT, JOB_WO_CORPORATE_LIAISON, JOB_WO_SYNTH) -var/global/list/ROLES_POLICE = list(JOB_CHIEF_POLICE, JOB_WARDEN, JOB_POLICE) -var/global/list/ROLES_ENGINEERING = list(JOB_CHIEF_ENGINEER, JOB_ORDNANCE_TECH, JOB_MAINT_TECH, JOB_WO_CHIEF_ENGINEER, JOB_WO_ORDNANCE_TECH) -var/global/list/ROLES_REQUISITION = list(JOB_CHIEF_REQUISITION, JOB_CARGO_TECH, JOB_WO_CHIEF_REQUISITION, JOB_WO_REQUISITION) -var/global/list/ROLES_MEDICAL = list(JOB_CMO, JOB_RESEARCHER, JOB_DOCTOR, JOB_NURSE, JOB_WO_CMO, JOB_WO_RESEARCHER, JOB_WO_DOCTOR) -var/global/list/ROLES_MARINES = list(JOB_SQUAD_LEADER, JOB_SQUAD_TEAM_LEADER, JOB_SQUAD_SPECIALIST, JOB_SQUAD_SMARTGUN, JOB_SQUAD_MEDIC, JOB_SQUAD_ENGI, JOB_SQUAD_MARINE) -var/global/list/ROLES_SQUAD_ALL = list(SQUAD_MARINE_1, SQUAD_MARINE_2, SQUAD_MARINE_3, SQUAD_MARINE_4, SQUAD_MARINE_5, SQUAD_MARINE_CRYO, SQUAD_MARINE_INTEL) +GLOBAL_LIST_INIT(ROLES_CIC, list(JOB_CO, JOB_XO, JOB_SO, JOB_WO_CO, JOB_WO_XO)) +GLOBAL_LIST_INIT(ROLES_AUXIL_SUPPORT, list(JOB_AUXILIARY_OFFICER, JOB_INTEL, JOB_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_WO_CHIEF_POLICE, JOB_WO_SO, JOB_WO_CREWMAN, JOB_WO_POLICE, JOB_WO_PILOT)) +GLOBAL_LIST_INIT(ROLES_MISC, list(JOB_SYNTH, JOB_WORKING_JOE, JOB_SEA, JOB_CORPORATE_LIAISON, JOB_COMBAT_REPORTER, JOB_MESS_SERGEANT, JOB_WO_CORPORATE_LIAISON, JOB_WO_SYNTH)) +GLOBAL_LIST_INIT(ROLES_POLICE, list(JOB_CHIEF_POLICE, JOB_WARDEN, JOB_POLICE)) +GLOBAL_LIST_INIT(ROLES_ENGINEERING, list(JOB_CHIEF_ENGINEER, JOB_ORDNANCE_TECH, JOB_MAINT_TECH, JOB_WO_CHIEF_ENGINEER, JOB_WO_ORDNANCE_TECH)) +GLOBAL_LIST_INIT(ROLES_REQUISITION, list(JOB_CHIEF_REQUISITION, JOB_CARGO_TECH, JOB_WO_CHIEF_REQUISITION, JOB_WO_REQUISITION)) +GLOBAL_LIST_INIT(ROLES_MEDICAL, list(JOB_CMO, JOB_RESEARCHER, JOB_DOCTOR, JOB_NURSE, JOB_WO_CMO, JOB_WO_RESEARCHER, JOB_WO_DOCTOR)) +GLOBAL_LIST_INIT(ROLES_MARINES, list(JOB_SQUAD_LEADER, JOB_SQUAD_TEAM_LEADER, JOB_SQUAD_SPECIALIST, JOB_SQUAD_SMARTGUN, JOB_SQUAD_MEDIC, JOB_SQUAD_ENGI, JOB_SQUAD_MARINE)) +GLOBAL_LIST_INIT(ROLES_SQUAD_ALL, list(SQUAD_MARINE_1, SQUAD_MARINE_2, SQUAD_MARINE_3, SQUAD_MARINE_4, SQUAD_MARINE_5, SQUAD_MARINE_CRYO, SQUAD_MARINE_INTEL)) +GLOBAL_LIST_INIT(ROLES_WO, list(JOB_WO_CO, JOB_WO_XO, JOB_WO_CORPORATE_LIAISON, JOB_WO_SYNTH, JOB_WO_CHIEF_POLICE, JOB_WO_SO, JOB_WO_CREWMAN, JOB_WO_POLICE, JOB_WO_PILOT, JOB_WO_CHIEF_ENGINEER, JOB_WO_ORDNANCE_TECH, JOB_WO_CHIEF_REQUISITION, JOB_WO_REQUISITION, JOB_WO_CMO, JOB_WO_DOCTOR, JOB_WO_RESEARCHER, JOB_WO_SQUAD_MARINE, JOB_WO_SQUAD_MEDIC, JOB_WO_SQUAD_ENGINEER, JOB_WO_SQUAD_SMARTGUNNER, JOB_WO_SQUAD_SPECIALIST, JOB_WO_SQUAD_LEADER)) //Groundside roles -var/global/list/ROLES_XENO = list(JOB_XENOMORPH_QUEEN, JOB_XENOMORPH) -var/global/list/ROLES_WHITELISTED = list(JOB_SYNTH_SURVIVOR, JOB_CO_SURVIVOR, JOB_PREDATOR) -var/global/list/ROLES_SPECIAL = list(JOB_SURVIVOR) +GLOBAL_LIST_INIT(ROLES_XENO, list(JOB_XENOMORPH_QUEEN, JOB_XENOMORPH)) +GLOBAL_LIST_INIT(ROLES_WHITELISTED, list(JOB_SYNTH_SURVIVOR, JOB_CO_SURVIVOR, JOB_PREDATOR)) +GLOBAL_LIST_INIT(ROLES_SPECIAL, list(JOB_SURVIVOR)) -var/global/list/ROLES_USCM = ROLES_CIC + ROLES_POLICE + ROLES_AUXIL_SUPPORT + ROLES_MISC + ROLES_ENGINEERING + ROLES_REQUISITION + ROLES_MEDICAL + ROLES_MARINES - ROLES_WO -var/global/list/ROLES_GROUND = ROLES_XENO + ROLES_SPECIAL + ROLES_WHITELISTED +GLOBAL_LIST_INIT(ROLES_USCM, ROLES_CIC + GLOB.ROLES_POLICE + GLOB.ROLES_AUXIL_SUPPORT + GLOB.ROLES_MISC + GLOB.ROLES_ENGINEERING + GLOB.ROLES_REQUISITION + GLOB.ROLES_MEDICAL + GLOB.ROLES_MARINES - ROLES_WO) +GLOBAL_LIST_INIT(ROLES_GROUND, GLOB.ROLES_XENO + ROLES_SPECIAL + ROLES_WHITELISTED) -var/global/list/ROLES_DISTRESS_SIGNAL = ROLES_USCM + ROLES_GROUND -var/global/list/ROLES_FACTION_CLASH = ROLES_USCM + JOB_PREDATOR +GLOBAL_LIST_INIT(ROLES_DISTRESS_SIGNAL, GLOB.ROLES_USCM + GLOB.ROLES_GROUND) +GLOBAL_LIST_INIT(ROLES_FACTION_CLASH, ROLES_USCM + JOB_PREDATOR) -var/global/list/ROLES_UNASSIGNED = list(JOB_SQUAD_MARINE) -var/global/list/ROLES_WO = list(JOB_WO_CO, JOB_WO_XO, JOB_WO_CORPORATE_LIAISON, JOB_WO_SYNTH, JOB_WO_CHIEF_POLICE, JOB_WO_SO, JOB_WO_CREWMAN, JOB_WO_POLICE, JOB_WO_PILOT, JOB_WO_CHIEF_ENGINEER, JOB_WO_ORDNANCE_TECH, JOB_WO_CHIEF_REQUISITION, JOB_WO_REQUISITION, JOB_WO_CMO, JOB_WO_DOCTOR, JOB_WO_RESEARCHER, JOB_WO_SQUAD_MARINE, JOB_WO_SQUAD_MEDIC, JOB_WO_SQUAD_ENGINEER, JOB_WO_SQUAD_SMARTGUNNER, JOB_WO_SQUAD_SPECIALIST, JOB_WO_SQUAD_LEADER) +GLOBAL_LIST_INIT(ROLES_UNASSIGNED, list(JOB_SQUAD_MARINE)) //Role lists used for switch() checks in show_blurb_uscm(). Cosmetic, determines ex. "Engineering, USS Almayer", "2nd Bat. 'Falling Falcons'" etc. #define BLURB_USCM_COMBAT JOB_CO, JOB_XO, JOB_SO, JOB_WO_CO, JOB_WO_XO, JOB_WO_CHIEF_POLICE, JOB_WO_SO, JOB_WO_CREWMAN, JOB_WO_POLICE, JOB_SEA,\ JOB_SQUAD_LEADER, JOB_SQUAD_TEAM_LEADER, JOB_SQUAD_SPECIALIST, JOB_SQUAD_SMARTGUN, JOB_SQUAD_MEDIC, JOB_SQUAD_ENGI, JOB_SQUAD_MARINE @@ -153,7 +153,7 @@ var/global/list/ROLES_WO = list(JOB_WO_CO, JOB_WO_XO, JOB_WO_CORPORATE_LIAISON, #define WHITELIST_COUNCIL "Council" #define WHITELIST_LEADER "Leader" -var/global/list/whitelist_hierarchy = list(WHITELIST_NORMAL, WHITELIST_COUNCIL, WHITELIST_LEADER) +GLOBAL_LIST_INIT(whitelist_hierarchy, list(WHITELIST_NORMAL, WHITELIST_COUNCIL, WHITELIST_LEADER)) //================================================= #define WHITELIST_YAUTJA (1<<0) @@ -186,7 +186,7 @@ var/global/list/whitelist_hierarchy = list(WHITELIST_NORMAL, WHITELIST_COUNCIL, #define WHITELIST_EVERYTHING (WHITELISTS_GENERAL|WHITELISTS_COUNCIL|WHITELISTS_LEADER) -#define isCouncil(A) (RoleAuthority.roles_whitelist[A.ckey] & WHITELIST_YAUTJA_COUNCIL) || (RoleAuthority.roles_whitelist[A.ckey] & WHITELIST_SYNTHETIC_COUNCIL) || (RoleAuthority.roles_whitelist[A.ckey] & WHITELIST_COMMANDER_COUNCIL) +#define isCouncil(A) (GLOB.RoleAuthority.roles_whitelist[A.ckey] & WHITELIST_YAUTJA_COUNCIL) || (GLOB.RoleAuthority.roles_whitelist[A.ckey] & WHITELIST_SYNTHETIC_COUNCIL) || (GLOB.RoleAuthority.roles_whitelist[A.ckey] & WHITELIST_COMMANDER_COUNCIL) //================================================= @@ -265,6 +265,6 @@ var/global/list/whitelist_hierarchy = list(WHITELIST_NORMAL, WHITELIST_COUNCIL, // global vars to prevent spam of the "one xyz alive" messages -var/global/last_ares_callout +GLOBAL_VAR(last_ares_callout) -var/global/last_qm_callout +GLOBAL_VAR(last_qm_callout) diff --git a/code/__DEFINES/objects.dm b/code/__DEFINES/objects.dm index a6b95c879ae4..292b315360c5 100644 --- a/code/__DEFINES/objects.dm +++ b/code/__DEFINES/objects.dm @@ -54,6 +54,8 @@ #define SHOCK 8 #define SAFE 16 +#define CLOSED 2 + //metal, glass, rod stacks #define MAX_STACK_AMOUNT_METAL 50 #define MAX_STACK_AMOUNT_GLASS 50 @@ -77,14 +79,14 @@ #define GETPULSE_HAND 0 //less accurate (hand) #define GETPULSE_TOOL 1 //more accurate (med scanner, sleeper, etc) -var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accessed by preexisting terminals. AIs and new terminals can't use them. +GLOBAL_LIST_INIT(RESTRICTED_CAMERA_NETWORKS, list( //Those networks can only be accessed by preexisting terminals. AIs and new terminals can't use them.) "thunder", "ERT", "NUKE", CAMERA_NET_LADDER, CAMERA_NET_COLONY, CAMERA_NET_OVERWATCH, - ) + )) #define STASIS_IN_BAG 1 #define STASIS_IN_CRYO_CELL 2 diff --git a/code/__DEFINES/paygrade_defs/civilian.dm b/code/__DEFINES/paygrade_defs/civilian.dm new file mode 100644 index 000000000000..ed99a363dedd --- /dev/null +++ b/code/__DEFINES/paygrade_defs/civilian.dm @@ -0,0 +1,35 @@ +// Paygrade shorthand defines, to allow clearer designation. + +// Civilians +/// CIV, Civilian +#define PAY_SHORT_CIV "CIV" + +/// CNUR, Nurse +#define PAY_SHORT_CNUR "CNUR" + +/// CDOC, Doctor +#define PAY_SHORT_CDOC "CDOC" + +/// CCMO, Professor +#define PAY_SHORT_CCMO "CCMO" + +/// CREP, Representative +#define PAY_SHORT_CREP "CREP" + +/// SYN, Synthetic +#define PAY_SHORT_SYN "SYN" + +/// OPR, Operative +#define PAY_SHORT_OPR "OPR" + +/// CPO, Officer +#define PAY_SHORT_CPO "CPO" + +/// CSPO, Senior Officer +#define PAY_SHORT_CSPO "CSPO" + +/// REB, Rebel +#define PAY_SHORT_REB "REB" + +/// REBC, Rebel Commander "REBC" +#define PAY_SHORT_REBC "REBC" diff --git a/code/__DEFINES/paygrade_defs/cmb.dm b/code/__DEFINES/paygrade_defs/cmb.dm new file mode 100644 index 000000000000..8ebd7902dbf8 --- /dev/null +++ b/code/__DEFINES/paygrade_defs/cmb.dm @@ -0,0 +1,20 @@ +// Paygrade shorthand defines, to allow clearer designation. + +// Colonial Marshal Bureau +/// IHRO, Interstellar Human Rights Observer +#define PAY_SHORT_IHRO "IHRO" + +/// ICCL, Interstellar Commerce Commission Corporate Liaison +#define PAY_SHORT_ICCL "ICCL" + +/// ICCA, Interstellar Commerce Commission Agent +#define PAY_SHORT_ICCA "ICCA" + +/// CMBM, CMB Marshal +#define PAY_SHORT_CMBM "CMBM" + +/// CMBD, CMB Deputy +#define PAY_SHORT_CMBD "CMBD" + +/// CMBS, CMB Synthetic +#define PAY_SHORT_CMBS "CMBS" diff --git a/code/__DEFINES/paygrade_defs/dutch.dm b/code/__DEFINES/paygrade_defs/dutch.dm new file mode 100644 index 000000000000..299096060f3f --- /dev/null +++ b/code/__DEFINES/paygrade_defs/dutch.dm @@ -0,0 +1,17 @@ +// Paygrade shorthand defines, to allow clearer designation. + +// Dutches Dozen +/// DTC, Dutch's Dozen Standard Mercenary +#define PAY_SHORT_DTC "DTC" + +/// DTCM, Dutch's Dozen Medic +#define PAY_SHORT_DTCM "DTCM" + +/// DTCF, Dutch's Dozen Flamethrower Specialist +#define PAY_SHORT_DTCF "DTCF" + +/// DTCMG, Dutch's Dozen Machinegunner +#define PAY_SHORT_DTCMG "DTCMG" + +/// DTCA, Arnold +#define PAY_SHORT_DTCA "DTCA" diff --git a/code/__DEFINES/paygrade_defs/marines.dm b/code/__DEFINES/paygrade_defs/marines.dm new file mode 100644 index 000000000000..74b659630820 --- /dev/null +++ b/code/__DEFINES/paygrade_defs/marines.dm @@ -0,0 +1,80 @@ +// Paygrade shorthand defines, to allow clearer designation. + +// USCM MARINES +/// ME1, Private +#define PAY_SHORT_ME1 "ME1" + +/// ME2, Private First Class +#define PAY_SHORT_ME2 "ME2" + +/// ME3, Lance Corporal +#define PAY_SHORT_ME3 "ME3" + +/// ME4, Corporal +#define PAY_SHORT_ME4 "ME4" + +/// ME5, Sergeant +#define PAY_SHORT_ME5 "ME5" + +/// ME6, Staff Sergeant +#define PAY_SHORT_ME6 "ME6" + +/// ME7, Gunnery Sergeant +#define PAY_SHORT_ME7 "ME7" + +/// ME8, Master Sergeant +#define PAY_SHORT_ME8 "ME8" + +/// ME8E, First Sergeant +#define PAY_SHORT_ME8E "ME8E" + +/// ME9, Master Gunnery Sergeant +#define PAY_SHORT_ME9 "ME9" + +/// ME9E, Sergeant Major +#define PAY_SHORT_ME9E "ME9E" + +/// ME9C, Sergeant Major of the Colonial Marine Corps +#define PAY_SHORT_ME9C "ME9C" + +/// MO1, Second Lieutenant +#define PAY_SHORT_MO1 "MO1" + +/// MO2, First Lieutenant +#define PAY_SHORT_MO2 "MO2" +/// MO3, Captain + +#define PAY_SHORT_MO3 "MO3" +/// MO4, Major + +#define PAY_SHORT_MO4 "MO4" +/// MO5, Lieutenant Colonel + +#define PAY_SHORT_MO5 "MO5" +/// MO6, Colonel + +#define PAY_SHORT_MO6 "MO6" +/// MO6E, Senior Colonel + +#define PAY_SHORT_MO6E "MO6E" +/// MO6C, Division Colonel + +#define PAY_SHORT_MO6C "MO6C" +/// MO7, Brigadier General + +#define PAY_SHORT_MO7 "MO7" +/// MO8, Major General + +#define PAY_SHORT_MO8 "MO8" +/// MO9, Lieutenant General + +#define PAY_SHORT_MO9 "MO9" +/// MO10, General + +#define PAY_SHORT_MO10 "MO10" + +/// MO10C, Assistant Commandant of the Marine Corps +#define PAY_SHORT_MO10C "MO10C" + +/// MO10S, Commandant of the Marine Corps +#define PAY_SHORT_MO10S "MO10S" diff --git a/code/__DEFINES/paygrade_defs/navy.dm b/code/__DEFINES/paygrade_defs/navy.dm new file mode 100644 index 000000000000..d51cccb8fe97 --- /dev/null +++ b/code/__DEFINES/paygrade_defs/navy.dm @@ -0,0 +1,74 @@ +// Paygrade shorthand defines, to allow clearer designation. + +// USCM NAVY +/// NE1, Seaman Recruit +#define PAY_SHORT_NE1 "NE1" + +/// NE2M, Seaman Apprentice +#define PAY_SHORT_NE2 "NE2" + +/// NE3, Seaman +#define PAY_SHORT_NE3 "NE3" + +/// NE4, Petty Officer 3rd Class +#define PAY_SHORT_NE4 "NE4" + +/// NE5, Petty Officer 2nd Class +#define PAY_SHORT_NE5 "NE5" + +/// NE6, Petty Officer 1st Class +#define PAY_SHORT_NE6 "N36" + +/// NE7, Chief Petty Officer +#define PAY_SHORT_NE7 "NE7" + +/// NE8, Senior Chief Petty Officer +#define PAY_SHORT_NE8 "NE8" + +/// NE8C, Command Senior Chief Petty Officer +#define PAY_SHORT_NE8C "NE8C" + +/// NE9, Master Chief Petty Officer +#define PAY_SHORT_NE9 "NE9" + +/// NE9C, Command Master Chief Petty Officer +#define PAY_SHORT_NE9C "NE9C" + +/// NO1, Ensign +#define PAY_SHORT_NO1 "NO1" + +/// NO2, Lieutenant Junior Grade +#define PAY_SHORT_NO2 "NO2" + +/// NO3, Lieutenant +#define PAY_SHORT_NO3 "NO3" + +/// NO4, Lieutenant Commander +#define PAY_SHORT_NO4 "NO4" + +/// NO5, Commander +#define PAY_SHORT_NO5 "NO5" + +/// NO6, Captain +#define PAY_SHORT_NO6 "NO6" + +/// NO6E, Commodore +#define PAY_SHORT_NO6E "NO6E" + +/// NO6C, Senior Commodore +#define PAY_SHORT_NO6C "NO6C" + +/// NO7, Rear Admiral (Lower Half) +#define PAY_SHORT_NO7 "NO7" + +/// NO8, Rear Admiral (Upper Half) +#define PAY_SHORT_NO8 "NO8" + +/// NO9, Vice Admiral +#define PAY_SHORT_NO9 "NO9" + +/// NO10, Admiral +#define PAY_SHORT_NO10 "NO10" + +/// NO10C, Chief of Naval Operations +#define PAY_SHORT_NO10C "NO10C" diff --git a/code/__DEFINES/paygrade_defs/provost.dm b/code/__DEFINES/paygrade_defs/provost.dm new file mode 100644 index 000000000000..5b2121642d52 --- /dev/null +++ b/code/__DEFINES/paygrade_defs/provost.dm @@ -0,0 +1,14 @@ +// Paygrade shorthand defines, to allow clearer designation. + +// PROVOST OFFICE +/// PvI, Provost Inspector +#define PAY_SHORT_PVI "PvI" + +/// PvM, Provost Marshal +#define PAY_SHORT_PVM "PvM" + +/// PvSM, Provost Sector Marshal +#define PAY_SHORT_PVSM "PvSM" + +/// PvCM, Provost Chief Marshal +#define PAY_SHORT_PVCM "PvCM" diff --git a/code/__DEFINES/paygrade_defs/upp.dm b/code/__DEFINES/paygrade_defs/upp.dm new file mode 100644 index 000000000000..40c0d8441b2e --- /dev/null +++ b/code/__DEFINES/paygrade_defs/upp.dm @@ -0,0 +1,59 @@ +// Paygrade shorthand defines, to allow clearer designation. + +// Union of Progressive Peoples +/// UE, +#define PAY_SHORT_UEC "UEC" + +/// UE1, Private +#define PAY_SHORT_UE1 "UE1" + +/// UE2, Private First Class +#define PAY_SHORT_UE2 "UE2" + +/// UE3, Korporal +#define PAY_SHORT_UE3 "UE3" + +/// UE4, unior Serzhant +#define PAY_SHORT_UE4 "UE4" + +/// UE5, Serzhant +#define PAY_SHORT_UE5 "UE5" + +/// UE6, Master Serzhant +#define PAY_SHORT_UE6 "UE6" + +/// UC1, Junior Kommando +#define PAY_SHORT_UC1 "UC1" + +/// UC2, 2nd Kommando +#define PAY_SHORT_UC2 "UC2" + +/// UC3, 1st Kommando +#define PAY_SHORT_UC3 "UC3" + +/// UO1, Leytenant +#define PAY_SHORT_UO1 "UO1" + +/// UO2, Senior Leytenant +#define PAY_SHORT_UO2 "UO2" + +/// UO3, Kapitan +#define PAY_SHORT_UO3 "UO3" + +/// UO4, Mayjor +#define PAY_SHORT_UO4 "UO4" + +/// UO5, Leytenant Kolonel +#define PAY_SHORT_UO5 "UO5" + +/// UO6, Kolonel +#define PAY_SHORT_UO6 "UO6" + +/// UO7, Mayjor General +#define PAY_SHORT_UO7 "UO7" + +/// UO8, Leytenant General +#define PAY_SHORT_UO8 "UO8" + +/// UO9, Army General +#define PAY_SHORT_UO9 "UO9" diff --git a/code/__DEFINES/paygrade_defs/weyland.dm b/code/__DEFINES/paygrade_defs/weyland.dm new file mode 100644 index 000000000000..1b6c168e9b6e --- /dev/null +++ b/code/__DEFINES/paygrade_defs/weyland.dm @@ -0,0 +1,32 @@ +// Paygrade shorthand defines, to allow clearer designation. + +// Weyland Yutani +/// WYC1, Trainee +#define PAY_SHORT_WYC1 "WYC1" + +/// WYC2, Junior Executive +#define PAY_SHORT_WYC2 "WYC2" + +/// WYC3, Executive +#define PAY_SHORT_WYC3 "WYC3" + +/// WYC4, Senior Executive +#define PAY_SHORT_WYC4 "WYC4" + +/// WYC5, Executive Specialist +#define PAY_SHORT_WYC5 "WYC5" + +/// WYC6, Executive Supervisor +#define PAY_SHORT_WYC6 "WYC6" + +/// WYC7, Assistant Manager +#define PAY_SHORT_WYC7 "WYC7" + +/// WYC8, Division Manager +#define PAY_SHORT_WYC8 "WYC8" + +/// WYC9, Chief Executive +#define PAY_SHORT_WYC9 "WYC9" + +/// WYC10, Director +#define PAY_SHORT_WYC10 "WYC10" diff --git a/code/__DEFINES/radio.dm b/code/__DEFINES/radio.dm index e2bd155fcb0d..cc1831501bad 100644 --- a/code/__DEFINES/radio.dm +++ b/code/__DEFINES/radio.dm @@ -61,6 +61,10 @@ #define RADIO_CHANNEL_PMC_CCT "PMC CCT" #define RADIO_CHANNEL_WY_WO "SpecOps" +//Listening Devices +#define RADIO_CHANNEL_BUG_A "Listening Device A" +#define RADIO_CHANNEL_BUG_B "Listening Device B" + //1-Channel ERTs #define RADIO_CHANNEL_DUTCH_DOZEN "DD" #define RADIO_CHANNEL_VAI "VAI" diff --git a/code/__DEFINES/regex.dm b/code/__DEFINES/regex.dm index f56871ec83f2..a0d9c9a7323b 100644 --- a/code/__DEFINES/regex.dm +++ b/code/__DEFINES/regex.dm @@ -6,38 +6,38 @@ // The lazy URL finder. Lazy in that it matches the bare minimum // Replicates BYOND's own URL parser in functionality. -var/global/regex/url_find_lazy +GLOBAL_DATUM(url_find_lazy, /regex) // REGEX datums used for process_chat_markup. -var/global/regex/markup_bold -var/global/regex/markup_italics -var/global/regex/markup_strike -var/global/regex/markup_underline +GLOBAL_DATUM(markup_bold, /regex) +GLOBAL_DATUM(markup_italics, /regex) +GLOBAL_DATUM(markup_strike, /regex) +GLOBAL_DATUM(markup_underline, /regex) // Global list for mark-up REGEX datums. // Initialized in the hook, to avoid passing by null value. -var/global/list/markup_regex = list() +GLOBAL_LIST_EMPTY(markup_regex) // Global list for mark-up REGEX tag collection. -var/global/list/markup_tags = list("/" = list("", ""), +GLOBAL_LIST_INIT(markup_tags, list("/" = list("", ""), "*" = list("", ""), "~" = list("", ""), - "_" = list("", "")) + "_" = list("", ""))) /proc/initialize_global_regex() - url_find_lazy = new(@"((https?|byond):\/\/[^\s]*)", "g") + GLOB.url_find_lazy = new(@"((https?|byond):\/\/[^\s]*)", "g") - markup_bold = new("((\\W|^)\\*)(\[^\\*\]*)(\\*(\\W|$))", "g") - markup_italics = new("((\\W|^)\\/)(\[^\\/\]*)(\\/(\\W|$))", "g") - markup_strike = new("((\\W|^)\\~)(\[^\\~\]*)(\\~(\\W|$))", "g") - markup_underline = new("((\\W|^)\\_)(\[^\\_\]*)(\\_(\\W|$))", "g") + GLOB.markup_bold = new("((\\W|^)\\*)(\[^\\*\]*)(\\*(\\W|$))", "g") + GLOB.markup_italics = new("((\\W|^)\\/)(\[^\\/\]*)(\\/(\\W|$))", "g") + GLOB.markup_strike = new("((\\W|^)\\~)(\[^\\~\]*)(\\~(\\W|$))", "g") + GLOB.markup_underline = new("((\\W|^)\\_)(\[^\\_\]*)(\\_(\\W|$))", "g") // List needs to be initialized here, due to DM mixing and matching pass-by-value and -reference as it chooses. - markup_regex = list( - "/" = markup_italics, - "*" = markup_bold, - "~" = markup_strike, - "_" = markup_underline, + GLOB.markup_regex = list( + "/" = GLOB.markup_italics, + "*" = GLOB.markup_bold, + "~" = GLOB.markup_strike, + "_" = GLOB.markup_underline, ) return 1 diff --git a/code/__DEFINES/skills.dm b/code/__DEFINES/skills.dm index 5dabb4545a32..d33e26c1c3f6 100644 --- a/code/__DEFINES/skills.dm +++ b/code/__DEFINES/skills.dm @@ -42,6 +42,8 @@ #define SKILL_SPEC_DEFAULT 0 /// Is trained to use specialist gear, but hasn't picked a kit. #define SKILL_SPEC_TRAINED 1 +/// Is trained to use specialist gear & HAS picked a kit. (Functionally same as SPEC_ROCKET) +#define SKILL_SPEC_KITTED 2 /// Can use RPG #define SKILL_SPEC_ROCKET 2 /// Can use thermal cloaks and custom M4RA rifle diff --git a/code/__DEFINES/sounds.dm b/code/__DEFINES/sounds.dm index a6bb381100e7..541d95d28189 100644 --- a/code/__DEFINES/sounds.dm +++ b/code/__DEFINES/sounds.dm @@ -27,7 +27,7 @@ #define SOUND_CHANNEL_AMBIENCE 1019 #define SOUND_CHANNEL_WALKMAN 1020 #define SOUND_CHANNEL_SOUNDSCAPE 1021 -#define SOUND_CHANNEL_ADMIN_MIDI 1022 +//#define SOUND_CHANNEL_ADMIN_MIDI 1022 #define SOUND_CHANNEL_LOBBY 1023 #define SOUND_CHANNEL_Z 1024 diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 843d4fd31b4a..9cb67e1e0de1 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -109,6 +109,7 @@ // Subsystems shutdown in the reverse of the order they initialize in // The numbers just define the ordering, they are meaningless otherwise. +#define SS_INIT_PROFILER 86 #define SS_INIT_INPUT 85 #define SS_INIT_TOPIC 83 #define SS_INIT_LOBBYART 82 diff --git a/code/__DEFINES/text.dm b/code/__DEFINES/text.dm index e3724e65f620..0ce7e508daac 100644 --- a/code/__DEFINES/text.dm +++ b/code/__DEFINES/text.dm @@ -17,3 +17,10 @@ #define SHOW_MESSAGE_VISIBLE 1 #define SHOW_MESSAGE_AUDIBLE 2 + +//Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam +#define MAX_MESSAGE_LEN 1024 +#define MAX_EMOTE_LEN 256 +#define MAX_PAPER_MESSAGE_LEN 3072 +#define MAX_BOOK_MESSAGE_LEN 9216 +#define MAX_NAME_LEN 26 diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm index 0cc106ec9cf2..b0e97e05e9b2 100644 --- a/code/__DEFINES/tgs.dm +++ b/code/__DEFINES/tgs.dm @@ -1,6 +1,6 @@ // tgstation-server DMAPI -#define TGS_DMAPI_VERSION "6.6.2" +#define TGS_DMAPI_VERSION "6.7.0" // All functions and datums outside this document are subject to change with any version and should not be relied on. diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 93fd25726f15..4b1c2c8a78cf 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -10,6 +10,9 @@ _L = target._status_traits; \ _L[trait] = list(source); \ SEND_SIGNAL(target, SIGNAL_ADDTRAIT(trait), trait); \ + if(trait in GLOB.traits_with_elements){ \ + target.AddElement(GLOB.traits_with_elements[trait]); \ + } \ } else { \ _L = target._status_traits; \ if (_L[trait]) { \ @@ -17,6 +20,9 @@ } else { \ _L[trait] = list(source); \ SEND_SIGNAL(target, SIGNAL_ADDTRAIT(trait), trait); \ + if(trait in GLOB.traits_with_elements){ \ + target.AddElement(GLOB.traits_with_elements[trait]); \ + } \ } \ } \ } while (0) @@ -38,6 +44,9 @@ if (!length(_L[trait])) { \ _L -= trait; \ SEND_SIGNAL(target, SIGNAL_REMOVETRAIT(trait), trait); \ + if(trait in GLOB.traits_with_elements) { \ + target.RemoveElement(GLOB.traits_with_elements[trait]); \ + } \ }; \ if (!length(_L)) { \ target._status_traits = null \ @@ -62,6 +71,9 @@ if (!length(_traits_list[trait])) { \ _traits_list -= trait; \ SEND_SIGNAL(target, SIGNAL_REMOVETRAIT(trait), trait); \ + if(trait in GLOB.traits_with_elements) { \ + target.RemoveElement(GLOB.traits_with_elements[trait]); \ + } \ }; \ if (!length(_traits_list)) { \ target._status_traits = null \ @@ -78,8 +90,11 @@ if (!length(_L[_T])) { \ _L -= _T; \ SEND_SIGNAL(target, SIGNAL_REMOVETRAIT(_T), _T); \ + if(trait in GLOB.traits_with_elements) { \ + target.RemoveElement(GLOB.traits_with_elements[trait]); \ }; \ };\ + };\ if (!length(_L)) { \ target._status_traits = null\ };\ @@ -101,8 +116,11 @@ if (!length(_L[_T])) { \ _L -= _T; \ SEND_SIGNAL(target, SIGNAL_REMOVETRAIT(_T)); \ + if(_T in GLOB.traits_with_elements) { \ + target.RemoveElement(GLOB.traits_with_elements[_T]); \ }; \ };\ + };\ if (!length(_L)) { \ target._status_traits = null\ };\ @@ -124,9 +142,6 @@ /// Example trait // #define TRAIT_X "t_x" -/// cannot be removed without admin intervention -#define ROUNDSTART_TRAIT "roundstart" - //-- mob traits -- /// Apply this to make a mob not dense, and remove it when you want it to no longer make them undense, other sorces of undesity will still apply. Always define a unique source when adding a new instance of this! #define TRAIT_UNDENSE "undense" @@ -140,8 +155,10 @@ #define TRAIT_FORCED_STANDING "forcedstanding" /// Stuns preventing movement and using objects but without further impairement #define TRAIT_INCAPACITATED "incapacitated" -/// Disoriented. Unable to talk, and unable to use skills as Xeno +/// Disoriented. Unable to talk properly, and unable to use some skills as Xeno #define TRAIT_DAZED "dazed" +/// Apply this to identify a mob as merged with weeds +#define TRAIT_MERGED_WITH_WEEDS "merged_with_weeds" // SPECIES TRAITS /// Knowledge of Yautja technology @@ -293,6 +310,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( /mob = list( "TRAIT_KNOCKEDOUT" = TRAIT_KNOCKEDOUT, "TRAIT_IMMOBILIZED" = TRAIT_IMMOBILIZED, + "TRAIT_INCAPACITATED" = TRAIT_INCAPACITATED, "TRAIT_FLOORED" = TRAIT_FLOORED, "TRAIT_DAZED" = TRAIT_DAZED, "TRAIT_UNDENSE" = TRAIT_UNDENSE, @@ -373,6 +391,8 @@ GLOBAL_LIST(trait_name_map) /// Example trait source // #define TRAIT_SOURCE_Y "t_s_y" #define TRAIT_SOURCE_INHERENT "t_s_inherent" +/// cannot be removed without admin intervention +#define ROUNDSTART_TRAIT "roundstart" //-- mob traits -- ///Status trait coming from lying down through update_canmove() #define LYING_TRAIT "lying" @@ -382,8 +402,6 @@ GLOBAL_LIST(trait_name_map) #define TRAIT_SOURCE_HIVE "t_s_hive" ///Status trait coming from being buckled. #define TRAIT_SOURCE_BUCKLE "t_s_buckle" -///Status trait coming from roundstart quirks (that don't exist yet). Unremovable by REMOVE_TRAIT -#define TRAIT_SOURCE_QUIRK "t_s_quirk" ///Status trait coming from being assigned as [acting] squad leader. #define TRAIT_SOURCE_SQUAD_LEADER "t_s_squad_leader" ///Status trait coming from their job diff --git a/code/__DEFINES/typecheck/items.dm b/code/__DEFINES/typecheck/items.dm index 09153cde25c2..5c4d099b8112 100644 --- a/code/__DEFINES/typecheck/items.dm +++ b/code/__DEFINES/typecheck/items.dm @@ -1,10 +1,10 @@ #define iswelder(O) (istype(O, /obj/item/tool/weldingtool)) #define iscoil(O) (istype(O, /obj/item/stack/cable_coil)) #define iswire(O) (istype(O, /obj/item/stack/cable_coil)) -#define isweapon(O) (O && is_type_in_list(O, weapons)) +#define isweapon(O) (O && is_type_in_list(O, GLOB.weapons)) #define isgun(O) (istype(O, /obj/item/weapon/gun)) #define isbanana(O) (istype(O, /obj/item/reagent_container/food/snacks/grown/banana)) -#define istool(O) (O && is_type_in_list(O, common_tools)) +#define istool(O) (O && is_type_in_list(O, GLOB.common_tools)) #define ispowerclamp(O) (istype(O, /obj/item/powerloader_clamp)) #define isstorage(O) (istype(O, /obj/item/storage)) #define isclothing(O) (istype(O, /obj/item/clothing)) @@ -12,13 +12,13 @@ #define isdefenses(O) (istype(O, /obj/structure/machinery/defenses)) //Quick type checks for weapons -var/global/list/weapons = list( +GLOBAL_LIST_INIT(weapons, list( /obj/item/weapon, /obj/item/attachable/bayonet -) +)) //Quick type checks for some tools -var/global/list/common_tools = list( +GLOBAL_LIST_INIT(common_tools, list( /obj/item/stack/cable_coil, /obj/item/tool/wrench, /obj/item/tool/weldingtool, @@ -26,7 +26,7 @@ var/global/list/common_tools = list( /obj/item/tool/wirecutters, /obj/item/device/multitool, /obj/item/tool/crowbar -) +)) /obj/item/proc/can_pry() if(pry_capable > IS_PRY_CAPABLE_SIMPLE || HAS_TRAIT(src, TRAIT_TOOL_CROWBAR)) diff --git a/code/__DEFINES/vehicle.dm b/code/__DEFINES/vehicle.dm index 9c6685085788..8a1617229926 100644 --- a/code/__DEFINES/vehicle.dm +++ b/code/__DEFINES/vehicle.dm @@ -53,5 +53,6 @@ #define VEHICLE_CLASS_LIGHT (1<<2) //light class armor (APC, tank) #define VEHICLE_CLASS_MEDIUM (1<<3) //medium class armor (tank) #define VEHICLE_CLASS_HEAVY (1<<4) //heavy class armor (tank) - -#define TANK_POPLOCK 90 +// Other vehicle flags +/// Vehicle can bypass vehicle blockers, typically going further into maps than intended +#define VEHICLE_BYPASS_BLOCKERS (1<<5) diff --git a/code/__DEFINES/vendors.dm b/code/__DEFINES/vendors.dm index 04ee5ffef2b6..eeec210a56c3 100644 --- a/code/__DEFINES/vendors.dm +++ b/code/__DEFINES/vendors.dm @@ -67,3 +67,10 @@ //Whether or not to load ammo boxes depending on ammo loaded into the vendor //Only relevant in big vendors, like Requisitions or Squad Prep #define VEND_LOAD_AMMO_BOXES (1<<9) + +// Redemption Tokens +#define VEND_TOKEN_ENGINEER "Engineer" +#define VEND_TOKEN_SPEC "Specialist" +#define VEND_TOKEN_SYNTH "Synthetic" +/// Token invalid/unrecognised. +#define VEND_TOKEN_VOID "Void" diff --git a/code/__DEFINES/weapon_stats.dm b/code/__DEFINES/weapon_stats.dm index beac54d98892..3a69002a3b93 100644 --- a/code/__DEFINES/weapon_stats.dm +++ b/code/__DEFINES/weapon_stats.dm @@ -18,17 +18,17 @@ Accuracy determines if your bullets will hit whatever you're shooting at. Think It DOES NOT control where your bullets go, that's scatter and projectile variance. .../update_projectiles/guns/code.dm -var/accuracy_mult //Base firearm accuracy when firing from a 2-hand, "secure", wielded, etc, whatever grip. -var/accuracy_mult_unwielded //Base firearm accuracy when firing from hip. Both of these default to 1, with additions or subtractions from the mult vars. + var/accuracy_mult //Base firearm accuracy when firing from a 2-hand, "secure", wielded, etc, whatever grip. + var/accuracy_mult_unwielded //Base firearm accuracy when firing from hip. Both of these default to 1, with additions or subtractions from the mult vars. .../updated_projectiles/ammo_datums.dm -var/accuracy //This is added to the firearm's base accuracy when the specific ammo is shot. -var/accuracy_var_low //These two vars are used for the upper and lower bounds of accuracy variance when a bullet is fired. Bullet 'wobble' if you will. -var/accuracy_var_high + var/accuracy //This is added to the firearm's base accuracy when the specific ammo is shot. + var/accuracy_var_low //These two vars are used for the upper and lower bounds of accuracy variance when a bullet is fired. Bullet 'wobble' if you will. + var/accuracy_var_high .../updated_projectiles/gun_attachables.dm -var/accuracy_mult //Attachments ADD an additional multiplier to the base config value. Only ever use accuracy_mult config references. -var/accuracy_mult_unwielded + var/accuracy_mult //Attachments ADD an additional multiplier to the base config value. Only ever use accuracy_mult config references. + var/accuracy_mult_unwielded */ #define HIT_ACCURACY_TIER_1 5 diff --git a/code/__HELPERS/#maths.dm b/code/__HELPERS/#maths.dm index 5419b9cd9624..ccd077003e62 100644 --- a/code/__HELPERS/#maths.dm +++ b/code/__HELPERS/#maths.dm @@ -1,13 +1,10 @@ // Credits to Nickr5 for the useful procs I've taken from his library resource. -var/const/E = 2.71828183 -var/const/Sqrt2 = 1.41421356 - // List of square roots for the numbers 1-100. -var/list/sqrtTable = list(1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, +GLOBAL_LIST_INIT(sqrtTable, list(1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10) + 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10)) // MATH DEFINES diff --git a/code/__HELPERS/_time.dm b/code/__HELPERS/_time.dm index b929ae8636b3..8386feff41c2 100644 --- a/code/__HELPERS/_time.dm +++ b/code/__HELPERS/_time.dm @@ -15,19 +15,19 @@ #define DECISECONDS_TO_HOURS /36000 -var/midnight_rollovers = 0 -var/rollovercheck_last_timeofday = 0 +GLOBAL_VAR_INIT(midnight_rollovers, 0) +GLOBAL_VAR_INIT(rollovercheck_last_timeofday, 0) // Real time that is still reliable even when the round crosses over midnight time reset. #define REALTIMEOFDAY (world.timeofday + (864000 * MIDNIGHT_ROLLOVER_CHECK)) -#define MIDNIGHT_ROLLOVER_CHECK ( rollovercheck_last_timeofday != world.timeofday ? update_midnight_rollover() : midnight_rollovers ) +#define MIDNIGHT_ROLLOVER_CHECK ( GLOB.rollovercheck_last_timeofday != world.timeofday ? update_midnight_rollover() : GLOB.midnight_rollovers ) /proc/update_midnight_rollover() - if(world.timeofday < rollovercheck_last_timeofday) - midnight_rollovers++ + if(world.timeofday < GLOB.rollovercheck_last_timeofday) + GLOB.midnight_rollovers++ - rollovercheck_last_timeofday = world.timeofday - return midnight_rollovers + GLOB.rollovercheck_last_timeofday = world.timeofday + return GLOB.midnight_rollovers ///Returns the world time in english. Do not use to get date information - starts at 0 + a random time offset from 10 minutes to 24 hours. /proc/worldtime2text(format = "hh:mm", time = world.time) diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm index ff8e31ad3e8a..31308ac5812f 100644 --- a/code/__HELPERS/cmp.dm +++ b/code/__HELPERS/cmp.dm @@ -16,12 +16,12 @@ /proc/cmp_name_dsc(atom/a, atom/b) return sorttext(a.name, b.name) -var/cmp_field = "name" +GLOBAL_LIST_INIT(cmp_field, "name") /proc/cmp_records_asc(datum/data/record/a, datum/data/record/b) - return sorttext((b ? b.fields[cmp_field] : ""), (a ? a.fields[cmp_field] : a)) + return sorttext((b ? b.fields[GLOB.cmp_field] : ""), (a ? a.fields[GLOB.cmp_field] : a)) /proc/cmp_records_dsc(datum/data/record/a, datum/data/record/b) - return sorttext(a.fields[cmp_field], b.fields[cmp_field]) + return sorttext(a.fields[GLOB.cmp_field], b.fields[GLOB.cmp_field]) /proc/cmp_ckey_asc(client/a, client/b) return sorttext(b.ckey, a.ckey) @@ -53,7 +53,6 @@ var/cmp_field = "name" if (!.) . = B.qdels - A.qdels -var/atom/cmp_dist_origin=null /proc/cmp_typepaths_asc(A, B) return sorttext("[B]","[A]") diff --git a/code/__HELPERS/files.dm b/code/__HELPERS/files.dm index f88fe7168f8d..54bb438cd167 100644 --- a/code/__HELPERS/files.dm +++ b/code/__HELPERS/files.dm @@ -46,11 +46,11 @@ PLEASE USE RESPONSIBLY, Some log files canr each sizes of 4MB! */ /client/proc/file_spam_check() - var/time_to_wait = fileaccess_timer - world.time + var/time_to_wait = GLOB.fileaccess_timer - world.time if(time_to_wait > 0) to_chat(src, "Error: file_spam_check(): Spam. Please wait [round(time_to_wait/10)] seconds.") return 1 - fileaccess_timer = world.time + FTPDELAY + GLOB.fileaccess_timer = world.time + FTPDELAY return 0 #undef FTPDELAY diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 37c623bc3215..5ef9ff7e35c3 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -52,9 +52,6 @@ turfs += T return turfs - -//var/debug_mob = 0 - // Will recursively loop through an atom's contents and check for mobs, then it will loop through every atom in that atom's contents. // It will keep doing this until it checks every content possible. This will fix any problems with mobs, that are inside objects, // being unable to hear people due to being in a box within a bag. diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 1116f1acb2a8..97243002740d 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -14,8 +14,7 @@ CHANGING ICONS Several new procs have been added to the /icon datum to simplify working with icons. To use them, remember you first need to setup an /icon var like so: - -var/icon/my_icon = new('iconfile.dmi') + var/icon/my_icon = new('iconfile.dmi') icon/ChangeOpacity(amount = 1) A very common operation in DM is to try to make an icon more or less transparent. Making an icon more @@ -682,8 +681,9 @@ world * * moving - whether or not to use a moving state for the given icon * * sourceonly - if TRUE, only generate the asset and send back the asset url, instead of tags that display the icon to players * * extra_clases - string of extra css classes to use when returning the icon string + * * keyonly - if TRUE, only returns the asset key to use get_asset_url manually. Overrides sourceonly. */ -/proc/icon2html(atom/thing, client/target, icon_state, dir = SOUTH, frame = 1, moving = FALSE, sourceonly = FALSE, extra_classes = null) +/proc/icon2html(atom/thing, client/target, icon_state, dir = SOUTH, frame = 1, moving = FALSE, sourceonly = FALSE, extra_classes = null, keyonly = FALSE) if (!thing) return @@ -714,6 +714,8 @@ world SSassets.transport.register_asset(name, thing) for (var/thing2 in targets) SSassets.transport.send_assets(thing2, name) + if(keyonly) + return name if(sourceonly) return SSassets.transport.get_asset_url(name) return "" @@ -756,6 +758,8 @@ world SSassets.transport.register_asset(key, rsc_ref, file_hash, icon_path) for (var/client_target in targets) SSassets.transport.send_assets(client_target, key) + if(keyonly) + return key if(sourceonly) return SSassets.transport.get_asset_url(key) return "" diff --git a/code/__HELPERS/job.dm b/code/__HELPERS/job.dm index 89fe6877647e..220236c6f7e3 100644 --- a/code/__HELPERS/job.dm +++ b/code/__HELPERS/job.dm @@ -14,32 +14,10 @@ all_jobs += new jobtype return all_jobs - /proc/get_all_centcom_jobs() return list() -//gets the actual job rank (ignoring alt titles) -//this is used solely for sechuds -/obj/proc/GetJobRealName() - if (!istype(src,/obj/item/card/id)) return - var/obj/item/card/id/I = src - if(I.rank in GLOB.joblist) return I.rank - if(I.assignment in GLOB.joblist) return I.assignment - return "Unknown" - /proc/get_all_job_icons() return GLOB.joblist + list("Prisoner")//For all existing HUD icons -/obj/proc/GetJobName() //Used in secHUD icon generation - var/obj/item/card/id/I = src - if(istype(I)) - var/job_icons = get_all_job_icons() - var/centcom = get_all_centcom_jobs() - - if(I.assignment in job_icons) return I.assignment//Check if the job has a hud icon - if(I.rank in job_icons) return I.rank - if(I.assignment in centcom) return "Centcom"//Return with the NT logo if it is a Centcom job - if(I.rank in centcom) return "Centcom" - return "Unknown" //Return unknown if none of the above apply - /proc/get_actual_job_name(mob/M) if(!M) return null diff --git a/code/__HELPERS/logging.dm b/code/__HELPERS/logging.dm index 5ecbff108725..c20db3da303f 100644 --- a/code/__HELPERS/logging.dm +++ b/code/__HELPERS/logging.dm @@ -35,27 +35,27 @@ // will get logs that are one big line if the system is Linux and they are using notepad. This solves it by adding CR to every line ending // in the logs. ascii character 13 = CR -/var/global/log_end= world.system_type == UNIX ? ascii2text(13) : "" +GLOBAL_VAR_INIT(log_end, world.system_type == UNIX ? ascii2text(13) : "") /proc/error(msg) - world.log << "## ERROR: [msg][log_end]" + world.log << "## ERROR: [msg][GLOB.log_end]" GLOB.STUI.debug.Add("\[[time_stamp()]]DEBUG: [msg]") GLOB.STUI.processing |= STUI_LOG_DEBUG #define WARNING(MSG) warning("[MSG] in [__FILE__] at line [__LINE__] src: [src] usr: [usr].") //print a warning message to world.log /proc/warning(msg) - world.log << "## WARNING: [msg][log_end]" + world.log << "## WARNING: [msg][GLOB.log_end]" GLOB.STUI.debug.Add("\[[time_stamp()]]WARNING: [msg]") GLOB.STUI.processing |= STUI_LOG_DEBUG //print a testing-mode debug message to world.log /proc/testing(msg) - world.log << "## TESTING: [msg][log_end]" + world.log << "## TESTING: [msg][GLOB.log_end]" GLOB.STUI.debug.Add("\[[time_stamp()]]TESTING: [msg]") GLOB.STUI.processing |= STUI_LOG_DEBUG /proc/log_admin(text) var/time = time_stamp() - admin_log.Add(text) + GLOB.admin_log.Add(text) if (CONFIG_GET(flag/log_admin)) WRITE_LOG(GLOB.world_game_log, "ADMIN: [text]") LOG_REDIS("admin", "\[[time]\] [text]") @@ -63,14 +63,14 @@ GLOB.STUI.processing |= STUI_LOG_ADMIN /proc/log_asset(text) - asset_log.Add(text) + GLOB.asset_log.Add(text) if (CONFIG_GET(flag/log_asset)) var/time = time_stamp() WRITE_LOG(GLOB.world_game_log, "ASSET: [text]") LOG_REDIS("asset", "\[[time]\] [text]") /proc/log_adminpm(text) - admin_log.Add(text) + GLOB.admin_log.Add(text) if (CONFIG_GET(flag/log_admin)) WRITE_LOG(GLOB.world_game_log, "ADMIN: [text]") GLOB.STUI.staff.Add("\[[time_stamp()]]ADMIN: [text]") diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 9aa1bdc3ea2f..55b234b1e419 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -51,8 +51,10 @@ return f_style /proc/random_name(gender, species = "Human") - if(gender==FEMALE) return capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names)) - else return capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) + if(gender==FEMALE) + return capitalize(pick(GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) + else + return capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) /proc/has_species(mob/M, species) if(!M || !istype(M,/mob/living/carbon/human)) diff --git a/code/__HELPERS/sorts/TimSort.dm b/code/__HELPERS/sorts/TimSort.dm index cfa55f0dfa3c..ae83bd9b0682 100644 --- a/code/__HELPERS/sorts/TimSort.dm +++ b/code/__HELPERS/sorts/TimSort.dm @@ -8,10 +8,14 @@ if(toIndex <= 0) toIndex += L.len + 1 - sortInstance.L = L - sortInstance.cmp = cmp - sortInstance.associative = associative + var/datum/sortInstance/sort_instance = GLOB.sortInstance + if(!sort_instance) + sort_instance = new() - sortInstance.timSort(fromIndex, toIndex) + sort_instance.L = L + sort_instance.cmp = cmp + sort_instance.associative = associative + + sort_instance.timSort(fromIndex, toIndex) return L diff --git a/code/__HELPERS/sorts/_Main.dm b/code/__HELPERS/sorts/_Main.dm index 7bc906be7e63..5d6f5210be47 100644 --- a/code/__HELPERS/sorts/_Main.dm +++ b/code/__HELPERS/sorts/_Main.dm @@ -8,8 +8,8 @@ //When we get into galloping mode, we stay there until both runs win less often than MIN_GALLOP consecutive times. #define MIN_GALLOP 7 - //This is a global instance to allow much of this code to be reused. The interfaces are kept separately -var/datum/sortInstance/sortInstance = new() +//This is a global instance to allow much of this code to be reused. The interfaces are kept separately +GLOBAL_DATUM_INIT(sortInstance, /datum/sortInstance, new()) /datum/sortInstance //The array being sorted. var/list/L diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index d4d9eb320633..967967790b28 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -30,6 +30,11 @@ text = replacetext(text, char, repl_chars[char]) return text +///Helper for only alphanumeric characters plus common punctuation, spaces, underscore and hyphen _ -. +/proc/replace_non_alphanumeric_plus(text) + var/regex/alphanumeric = regex(@{"[^a-z0-9 ,.?!\-_&]"}, "gi") + return alphanumeric.Replace(text, "") + /proc/readd_quotes(text) var/list/repl_chars = list(""" = "\"", "'" = "'") for(var/char in repl_chars) @@ -341,8 +346,8 @@ // ---Begin URL caching. var/list/urls = list() var/i = 1 - while (url_find_lazy.Find_char(message)) - urls["\ref[urls]-[i]"] = url_find_lazy.match + while (GLOB.url_find_lazy.Find_char(message)) + urls["\ref[urls]-[i]"] = GLOB.url_find_lazy.match i++ for (var/ref in urls) @@ -350,9 +355,9 @@ // ---End URL caching var/regex/tag_markup - for (var/tag in (markup_tags - ignore_tags)) - tag_markup = markup_regex[tag] - message = tag_markup.Replace_char(message, "$2[markup_tags[tag][1]]$3[markup_tags[tag][2]]$5") + for (var/tag in (GLOB.markup_tags - ignore_tags)) + tag_markup = GLOB.markup_regex[tag] + message = tag_markup.Replace_char(message, "$2[GLOB.markup_tags[tag][1]]$3[GLOB.markup_tags[tag][2]]$5") // ---Unload URL cache for (var/ref in urls) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index ec4a9cc87db3..5494a76f4bf4 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -281,9 +281,10 @@ //update the datacore records! This is goig to be a bit costly. var/mob_ref = WEAKREF(src) for(var/list/L in list(GLOB.data_core.general, GLOB.data_core.medical, GLOB.data_core.security, GLOB.data_core.locked)) - for(var/datum/data/record/R in L) - if(R.fields["ref"] == mob_ref) - R.fields["name"] = newname + for(var/datum/data/record/record_entry in L) + if(record_entry.fields["ref"] == mob_ref) + record_entry.fields["name"] = newname + record_entry.name = newname break //update our pda and id if we have them on our person @@ -916,110 +917,110 @@ return FALSE -var/global/image/busy_indicator_clock -var/global/image/busy_indicator_medical -var/global/image/busy_indicator_build -var/global/image/busy_indicator_friendly -var/global/image/busy_indicator_hostile -var/global/image/emote_indicator_highfive -var/global/image/emote_indicator_fistbump -var/global/image/emote_indicator_headbutt -var/global/image/emote_indicator_tailswipe -var/global/image/emote_indicator_rock_paper_scissors -var/global/image/emote_indicator_rock -var/global/image/emote_indicator_paper -var/global/image/emote_indicator_scissors -var/global/image/action_red_power_up -var/global/image/action_green_power_up -var/global/image/action_blue_power_up -var/global/image/action_purple_power_up +GLOBAL_DATUM(busy_indicator_clock, /image) +GLOBAL_DATUM(busy_indicator_medical, /image) +GLOBAL_DATUM(busy_indicator_build, /image) +GLOBAL_DATUM(busy_indicator_friendly, /image) +GLOBAL_DATUM(busy_indicator_hostile, /image) +GLOBAL_DATUM(emote_indicator_highfive, /image) +GLOBAL_DATUM(emote_indicator_fistbump, /image) +GLOBAL_DATUM(emote_indicator_headbutt, /image) +GLOBAL_DATUM(emote_indicator_tailswipe, /image) +GLOBAL_DATUM(emote_indicator_rock_paper_scissors, /image) +GLOBAL_DATUM(emote_indicator_rock, /image) +GLOBAL_DATUM(emote_indicator_paper, /image) +GLOBAL_DATUM(emote_indicator_scissors, /image) +GLOBAL_DATUM(action_red_power_up, /image) +GLOBAL_DATUM(action_green_power_up, /image) +GLOBAL_DATUM(action_blue_power_up, /image) +GLOBAL_DATUM(action_purple_power_up, /image) /proc/get_busy_icon(busy_type) if(busy_type == BUSY_ICON_GENERIC) - if(!busy_indicator_clock) - busy_indicator_clock = image('icons/mob/mob.dmi', null, "busy_generic", "pixel_y" = 22) - busy_indicator_clock.layer = FLY_LAYER - return busy_indicator_clock + if(!GLOB.busy_indicator_clock) + GLOB.busy_indicator_clock = image('icons/mob/mob.dmi', null, "busy_generic", "pixel_y" = 22) + GLOB.busy_indicator_clock.layer = FLY_LAYER + return GLOB.busy_indicator_clock else if(busy_type == BUSY_ICON_MEDICAL) - if(!busy_indicator_medical) - busy_indicator_medical = image('icons/mob/mob.dmi', null, "busy_medical", "pixel_y" = 0) //This shows directly on top of the mob, no offset! - busy_indicator_medical.layer = FLY_LAYER - return busy_indicator_medical + if(!GLOB.busy_indicator_medical) + GLOB.busy_indicator_medical = image('icons/mob/mob.dmi', null, "busy_medical", "pixel_y" = 0) //This shows directly on top of the mob, no offset! + GLOB.busy_indicator_medical.layer = FLY_LAYER + return GLOB.busy_indicator_medical else if(busy_type == BUSY_ICON_BUILD) - if(!busy_indicator_build) - busy_indicator_build = image('icons/mob/mob.dmi', null, "busy_build", "pixel_y" = 22) - busy_indicator_build.layer = FLY_LAYER - return busy_indicator_build + if(!GLOB.busy_indicator_build) + GLOB.busy_indicator_build = image('icons/mob/mob.dmi', null, "busy_build", "pixel_y" = 22) + GLOB.busy_indicator_build.layer = FLY_LAYER + return GLOB.busy_indicator_build else if(busy_type == BUSY_ICON_FRIENDLY) - if(!busy_indicator_friendly) - busy_indicator_friendly = image('icons/mob/mob.dmi', null, "busy_friendly", "pixel_y" = 22) - busy_indicator_friendly.layer = FLY_LAYER - return busy_indicator_friendly + if(!GLOB.busy_indicator_friendly) + GLOB.busy_indicator_friendly = image('icons/mob/mob.dmi', null, "busy_friendly", "pixel_y" = 22) + GLOB.busy_indicator_friendly.layer = FLY_LAYER + return GLOB.busy_indicator_friendly else if(busy_type == BUSY_ICON_HOSTILE) - if(!busy_indicator_hostile) - busy_indicator_hostile = image('icons/mob/mob.dmi', null, "busy_hostile", "pixel_y" = 22) - busy_indicator_hostile.layer = FLY_LAYER - return busy_indicator_hostile + if(!GLOB.busy_indicator_hostile) + GLOB.busy_indicator_hostile = image('icons/mob/mob.dmi', null, "busy_hostile", "pixel_y" = 22) + GLOB.busy_indicator_hostile.layer = FLY_LAYER + return GLOB.busy_indicator_hostile else if(busy_type == EMOTE_ICON_HIGHFIVE) - if(!emote_indicator_highfive) - emote_indicator_highfive = image('icons/mob/mob.dmi', null, "emote_highfive", "pixel_y" = 22) - emote_indicator_highfive.layer = FLY_LAYER - return emote_indicator_highfive + if(!GLOB.emote_indicator_highfive) + GLOB.emote_indicator_highfive = image('icons/mob/mob.dmi', null, "emote_highfive", "pixel_y" = 22) + GLOB.emote_indicator_highfive.layer = FLY_LAYER + return GLOB.emote_indicator_highfive else if(busy_type == EMOTE_ICON_FISTBUMP) - if(!emote_indicator_fistbump) - emote_indicator_fistbump = image('icons/mob/mob.dmi', null, "emote_fistbump", "pixel_y" = 22) - emote_indicator_fistbump.layer = FLY_LAYER - return emote_indicator_fistbump + if(!GLOB.emote_indicator_fistbump) + GLOB.emote_indicator_fistbump = image('icons/mob/mob.dmi', null, "emote_fistbump", "pixel_y" = 22) + GLOB.emote_indicator_fistbump.layer = FLY_LAYER + return GLOB.emote_indicator_fistbump else if(busy_type == EMOTE_ICON_ROCK_PAPER_SCISSORS) - if(!emote_indicator_rock_paper_scissors) - emote_indicator_rock_paper_scissors = image('icons/mob/mob.dmi', null, "emote_rps", "pixel_y" = 22) - emote_indicator_rock_paper_scissors.layer = FLY_LAYER - return emote_indicator_rock_paper_scissors + if(!GLOB.emote_indicator_rock_paper_scissors) + GLOB.emote_indicator_rock_paper_scissors = image('icons/mob/mob.dmi', null, "emote_rps", "pixel_y" = 22) + GLOB.emote_indicator_rock_paper_scissors.layer = FLY_LAYER + return GLOB.emote_indicator_rock_paper_scissors else if(busy_type == EMOTE_ICON_ROCK) - if(!emote_indicator_rock) - emote_indicator_rock = image('icons/mob/mob.dmi', null, "emote_rock", "pixel_y" = 22) - emote_indicator_rock.layer = FLY_LAYER - return emote_indicator_rock + if(!GLOB.emote_indicator_rock) + GLOB.emote_indicator_rock = image('icons/mob/mob.dmi', null, "emote_rock", "pixel_y" = 22) + GLOB.emote_indicator_rock.layer = FLY_LAYER + return GLOB.emote_indicator_rock else if(busy_type == EMOTE_ICON_PAPER) - if(!emote_indicator_paper) - emote_indicator_paper = image('icons/mob/mob.dmi', null, "emote_paper", "pixel_y" = 22) - emote_indicator_paper.layer = FLY_LAYER - return emote_indicator_paper + if(!GLOB.emote_indicator_paper) + GLOB.emote_indicator_paper = image('icons/mob/mob.dmi', null, "emote_paper", "pixel_y" = 22) + GLOB.emote_indicator_paper.layer = FLY_LAYER + return GLOB.emote_indicator_paper else if(busy_type == EMOTE_ICON_SCISSORS) - if(!emote_indicator_scissors) - emote_indicator_scissors = image('icons/mob/mob.dmi', null, "emote_scissors", "pixel_y" = 22) - emote_indicator_scissors.layer = FLY_LAYER - return emote_indicator_scissors + if(!GLOB.emote_indicator_scissors) + GLOB.emote_indicator_scissors = image('icons/mob/mob.dmi', null, "emote_scissors", "pixel_y" = 22) + GLOB.emote_indicator_scissors.layer = FLY_LAYER + return GLOB.emote_indicator_scissors else if(busy_type == EMOTE_ICON_HEADBUTT) - if(!emote_indicator_headbutt) - emote_indicator_headbutt = image('icons/mob/mob.dmi', null, "emote_headbutt", "pixel_y" = 22) - emote_indicator_headbutt.layer = FLY_LAYER - return emote_indicator_headbutt + if(!GLOB.emote_indicator_headbutt) + GLOB.emote_indicator_headbutt = image('icons/mob/mob.dmi', null, "emote_headbutt", "pixel_y" = 22) + GLOB.emote_indicator_headbutt.layer = FLY_LAYER + return GLOB.emote_indicator_headbutt else if(busy_type == EMOTE_ICON_TAILSWIPE) - if(!emote_indicator_tailswipe) - emote_indicator_tailswipe = image('icons/mob/mob.dmi', null, "emote_tailswipe", "pixel_y" = 22) - emote_indicator_tailswipe.layer = FLY_LAYER - return emote_indicator_tailswipe + if(!GLOB.emote_indicator_tailswipe) + GLOB.emote_indicator_tailswipe = image('icons/mob/mob.dmi', null, "emote_tailswipe", "pixel_y" = 22) + GLOB.emote_indicator_tailswipe.layer = FLY_LAYER + return GLOB.emote_indicator_tailswipe else if(busy_type == ACTION_RED_POWER_UP) - if(!action_red_power_up) - action_red_power_up = image('icons/effects/effects.dmi', null, "anger", "pixel_x" = 16) - action_red_power_up.layer = FLY_LAYER - return action_red_power_up + if(!GLOB.action_red_power_up) + GLOB.action_red_power_up = image('icons/effects/effects.dmi', null, "anger", "pixel_x" = 16) + GLOB.action_red_power_up.layer = FLY_LAYER + return GLOB.action_red_power_up else if(busy_type == ACTION_GREEN_POWER_UP) - if(!action_green_power_up) - action_green_power_up = image('icons/effects/effects.dmi', null, "vitality", "pixel_x" = 16) - action_green_power_up.layer = FLY_LAYER - return action_green_power_up + if(!GLOB.action_green_power_up) + GLOB.action_green_power_up = image('icons/effects/effects.dmi', null, "vitality", "pixel_x" = 16) + GLOB.action_green_power_up.layer = FLY_LAYER + return GLOB.action_green_power_up else if(busy_type == ACTION_BLUE_POWER_UP) - if(!action_blue_power_up) - action_blue_power_up = image('icons/effects/effects.dmi', null, "shock", "pixel_x" = 16) - action_blue_power_up.layer = FLY_LAYER - return action_blue_power_up + if(!GLOB.action_blue_power_up) + GLOB.action_blue_power_up = image('icons/effects/effects.dmi', null, "shock", "pixel_x" = 16) + GLOB.action_blue_power_up.layer = FLY_LAYER + return GLOB.action_blue_power_up else if(busy_type == ACTION_PURPLE_POWER_UP) - if(!action_purple_power_up) - action_purple_power_up = image('icons/effects/effects.dmi', null, "pain", "pixel_x" = 16) - action_purple_power_up.layer = FLY_LAYER - return action_purple_power_up + if(!GLOB.action_purple_power_up) + GLOB.action_purple_power_up = image('icons/effects/effects.dmi', null, "pain", "pixel_x" = 16) + GLOB.action_purple_power_up.layer = FLY_LAYER + return GLOB.action_purple_power_up /* @@ -1465,7 +1466,7 @@ var/global/image/action_purple_power_up /* Checks if that loc and dir has a item on the wall */ -var/list/WALLITEMS = list( +GLOBAL_LIST_INIT(WALLITEMS, list( /obj/structure/machinery/power/apc, /obj/structure/machinery/alarm, /obj/item/device/radio/intercom, @@ -1486,10 +1487,11 @@ var/list/WALLITEMS = list( /obj/structure/mirror, /obj/structure/closet/fireaxecabinet, /obj/structure/machinery/computer/cameras/telescreen/entertainment, - ) + )) + /proc/gotwallitem(loc, dir) for(var/obj/O in loc) - for(var/item in WALLITEMS) + for(var/item in GLOB.WALLITEMS) if(istype(O, item)) //Direction works sometimes if(O.dir == dir) @@ -1513,7 +1515,7 @@ var/list/WALLITEMS = list( //Some stuff is placed directly on the wallturf (signs) for(var/obj/O in get_step(loc, dir)) - for(var/item in WALLITEMS) + for(var/item in GLOB.WALLITEMS) if(istype(O, item)) if(O.pixel_x == 0 && O.pixel_y == 0) return 1 @@ -1650,7 +1652,7 @@ var/list/WALLITEMS = list( var/turf/Turf = get_turf(explosive) if(!(Turf.loc.type in GLOB.explosive_antigrief_exempt_areas)) var/crash_occured = (SSticker?.mode?.is_in_endgame) - if((Turf.z in SSmapping.levels_by_any_trait(list(ZTRAIT_MARINE_MAIN_SHIP, ZTRAIT_RESERVED))) && (security_level < SEC_LEVEL_RED) && !crash_occured) + if((Turf.z in SSmapping.levels_by_any_trait(list(ZTRAIT_MARINE_MAIN_SHIP, ZTRAIT_RESERVED))) && (GLOB.security_level < SEC_LEVEL_RED) && !crash_occured) switch(CONFIG_GET(number/explosive_antigrief)) if(ANTIGRIEF_DISABLED) return FALSE diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index c0e9569ea02b..d148acb8b09d 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -166,7 +166,6 @@ DEFINE_BITFIELD(flags_item, list( "ITEM_OVERRIDE_NORTHFACE" = ITEM_OVERRIDE_NORTHFACE, "CAN_DIG_SHRAPNEL" = CAN_DIG_SHRAPNEL, "ANIMATED_SURGICAL_TOOL" = ANIMATED_SURGICAL_TOOL, - "NOTABLEMERGE" = NOTABLEMERGE, "IGNITING_ITEM" = IGNITING_ITEM, )) @@ -466,3 +465,11 @@ DEFINE_BITFIELD(vend_flags, list( "VEND_FACTION_THEMES" = VEND_FACTION_THEMES, "VEND_USE_VENDOR_FLAGS" = VEND_USE_VENDOR_FLAGS, )) + +DEFINE_BITFIELD(vehicle_flags, list( + "VEHICLE_CLASS_WEAK" = VEHICLE_CLASS_WEAK, + "VEHICLE_CLASS_LIGHT" = VEHICLE_CLASS_LIGHT, + "VEHICLE_CLASS_MEDIUM" = VEHICLE_CLASS_MEDIUM, + "VEHICLE_CLASS_HEAVY" = VEHICLE_CLASS_HEAVY, + "VEHICLE_BYPASS_BLOCKERS" = VEHICLE_BYPASS_BLOCKERS, +)) diff --git a/code/_globalvars/global_lists.dm b/code/_globalvars/global_lists.dm index 1e1e9cefd5db..6e1b229e562f 100644 --- a/code/_globalvars/global_lists.dm +++ b/code/_globalvars/global_lists.dm @@ -6,20 +6,25 @@ GLOBAL_LIST_EMPTY(CMBFaxes) GLOBAL_LIST_EMPTY(GeneralFaxes) //Inter-machine faxes GLOBAL_LIST_EMPTY(fax_contents) //List of fax contents to maintain it even if source paper is deleted +//datum containing a reference to the flattend map png url, the actual png is stored in the user's cache. +GLOBAL_LIST_EMPTY(uscm_flat_tacmap_data) +GLOBAL_LIST_EMPTY(xeno_flat_tacmap_data) + +//datum containing the svg overlay coords in array format. +GLOBAL_LIST_EMPTY(uscm_svg_tacmap_data) +GLOBAL_LIST_EMPTY(xeno_svg_tacmap_data) + GLOBAL_LIST_EMPTY(failed_fultons) //A list of fultoned items which weren't collected and fell back down GLOBAL_LIST_EMPTY(larva_burst_by_hive) GLOBAL_LIST_INIT_TYPED(custom_huds_list, /datum/custom_hud, setup_all_huds()) GLOBAL_LIST_INIT_TYPED(custom_human_huds, /datum/custom_hud, setup_human_huds()) -//Since it didn't really belong in any other category, I'm putting this here -//This is for procs to replace all the goddamn 'in world's that are chilling around the code - -var/readied_players = 0 //How many players are readied up in the lobby +GLOBAL_VAR_INIT(readied_players, 0) //How many players are readied up in the lobby GLOBAL_LIST_EMPTY_TYPED(other_factions_human_list, /mob/living/carbon/human) -var/global/list/ai_mob_list = list() //List of all AIs +GLOBAL_LIST_EMPTY(ai_mob_list) //List of all AIs GLOBAL_LIST_EMPTY(freed_mob_list) // List of mobs freed for ghosts @@ -101,12 +106,12 @@ GLOBAL_LIST_INIT_TYPED(resin_mark_meanings, /datum/xeno_mark_define, setup_resin GLOBAL_REFERENCE_LIST_INDEXED(xeno_datum_list, /datum/caste_datum, caste_type) //Chem Stuff -var/global/list/chemical_reactions_filtered_list //List of all /datum/chemical_reaction datums filtered by reaction components. Used during chemical reactions -var/global/list/chemical_reactions_list //List of all /datum/chemical_reaction datums indexed by reaction id. Used to search for the result instead of the components. -var/global/list/chemical_reagents_list //List of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff -var/global/list/chemical_properties_list //List of all /datum/chem_property datums indexed by property name +GLOBAL_LIST(chemical_reactions_filtered_list) //List of all /datum/chemical_reaction datums filtered by reaction components. Used during chemical reactions +GLOBAL_LIST(chemical_reactions_list) //List of all /datum/chemical_reaction datums indexed by reaction id. Used to search for the result instead of the components. +GLOBAL_LIST(chemical_reagents_list) //List of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff +GLOBAL_LIST(chemical_properties_list) //List of all /datum/chem_property datums indexed by property name //List of all id's from classed /datum/reagent datums indexed by class or tier. Used by chemistry generator and chem spawners. -var/global/list/list/chemical_gen_classes_list = list("C" = list(),"C1" = list(),"C2" = list(),"C3" = list(),"C4" = list(),"C5" = list(),"C6" = list(),"T1" = list(),"T2" = list(),"T3" = list(),"T4" = list(),"tau" = list()) +GLOBAL_LIST_INIT_TYPED(chemical_gen_classes_list, /list, list("C" = list(),"C1" = list(),"C2" = list(),"C3" = list(),"C4" = list(),"C5" = list(),"C6" = list(),"T1" = list(),"T2" = list(),"T3" = list(),"T4" = list(),"tau", list())) //properties generated in chemicals, helps to make sure the same property doesn't show up 10 times GLOBAL_LIST_INIT_TYPED(generated_properties, /list, list("positive" = list(), "negative" = list(), "neutral" = list())) @@ -132,13 +137,12 @@ GLOBAL_LIST_INIT(surgical_patient_types, setup_surgical_patient_types()) GLOBAL_LIST_INIT_TYPED(gear_path_presets_list, /datum/equipment_preset, setup_gear_path_presets()) GLOBAL_LIST_INIT_TYPED(gear_name_presets_list, /datum/equipment_preset, setup_gear_name_presets()) -var/global/list/active_areas = list() -var/global/list/all_areas = list() +GLOBAL_LIST_EMPTY(active_areas) +GLOBAL_LIST_EMPTY(all_areas) -var/global/list/turfs = list() -var/global/list/z1turfs = list() +GLOBAL_LIST_EMPTY(turfs) -/var/global/list/objects_of_interest // This is used to track the stealing objective for Agents. +GLOBAL_LIST(objects_of_interest) // This is used to track the stealing objective for Agents. // Areas exempt from explosive antigrief (not Z-levels) GLOBAL_LIST_INIT(explosive_antigrief_exempt_areas, list( @@ -201,23 +205,23 @@ GLOBAL_REFERENCE_LIST_INDEXED(hair_gradient_list, /datum/sprite_accessory/hair_g GLOBAL_REFERENCE_LIST_INDEXED(yautja_hair_styles_list, /datum/sprite_accessory/yautja_hair, name) //Backpacks -var/global/list/backbaglist = list("Backpack", "Satchel") +GLOBAL_LIST_INIT(backbaglist, list("Backpack", "Satchel")) //Armor styles GLOBAL_LIST_INIT(armor_style_list, list("Padded" = 1, "Padless" = 2, "Ridged" = 3, "Carrier" = 4, "Skull" = 5, "Smooth" = 6, "Random")) // var/global/list/exclude_jobs = list(/datum/job/ai,/datum/job/cyborg) -var/global/round_should_check_for_win = TRUE +GLOBAL_VAR_INIT(round_should_check_for_win, TRUE) -var/global/list/key_mods = list("CTRL", "ALT", "SHIFT") +GLOBAL_LIST_INIT(key_mods, list("CTRL", "ALT", "SHIFT")) // A list storing the pass flags for specific types of atoms -var/global/list/pass_flags_cache = list() +GLOBAL_LIST_EMPTY(pass_flags_cache) //Parameterss cache -var/global/list/paramslist_cache = list() +GLOBAL_LIST_EMPTY(paramslist_cache) //Turf Edge info uberlist -- a list whos states contain GLOB.edgeinfo_X keyed as different icon_states -var/global/list/turf_edgeinfo_cache = list() +GLOBAL_LIST_EMPTY(turf_edgeinfo_cache) #define FULL_EDGE 1 #define HALF_EDGE_RIGHT 2 @@ -269,10 +273,10 @@ GLOBAL_LIST_INIT(typecache_living, typecacheof(/mob/living)) GLOBAL_LIST_INIT(emote_list, init_emote_list()) /proc/cached_params_decode(params_data, decode_proc) - . = paramslist_cache[params_data] + . = GLOB.paramslist_cache[params_data] if(!.) . = call(decode_proc)(params_data) - paramslist_cache[params_data] = . + GLOB.paramslist_cache[params_data] = . /proc/key_number_decode(key_number_data) var/list/L = params2list(key_number_data) @@ -453,10 +457,10 @@ GLOBAL_LIST_INIT(emote_list, init_emote_list()) /* // Uncomment to debug chemical reaction list. /client/verb/debug_chemical_list() - for (var/reaction in chemical_reactions_filtered_list) - . += "chemical_reactions_filtered_list\[\"[reaction]\"\] = \"[chemical_reactions_filtered_list[reaction]]\"\n" - if(islist(chemical_reactions_filtered_list[reaction])) - var/list/L = chemical_reactions_filtered_list[reaction] + for (var/reaction in GLOB.chemical_reactions_filtered_list) + . += "GLOB.chemical_reactions_filtered_list\[\"[reaction]\"\] = \"[GLOB.chemical_reactions_filtered_list[reaction]]\"\n" + if(islist(GLOB.chemical_reactions_filtered_list[reaction])) + var/list/L = GLOB.chemical_reactions_filtered_list[reaction] for(var/t in L) . += " has: [t]\n" world << . @@ -470,22 +474,22 @@ GLOBAL_LIST_EMPTY(timelocks) //the global list of specialist kits that haven't been claimed yet. -var/global/list/available_specialist_sets = list( +GLOBAL_LIST_INIT(available_specialist_sets, list( "Scout Set", "Sniper Set", "Demolitionist Set", "Heavy Grenadier Set", "Pyro Set" - ) + )) //Similar thing, but used in /obj/item/spec_kit -var/global/list/available_specialist_kit_boxes = list( +GLOBAL_LIST_INIT(available_specialist_kit_boxes, list( "Pyro" = 2, "Grenadier" = 2, "Sniper" = 2, "Scout" = 2, "Demo" = 2, - ) + )) /proc/init_global_referenced_datums() init_keybindings() diff --git a/code/_globalvars/lists/clans.dm b/code/_globalvars/lists/clans.dm new file mode 100644 index 000000000000..f04915a37435 --- /dev/null +++ b/code/_globalvars/lists/clans.dm @@ -0,0 +1,19 @@ +GLOBAL_LIST_INIT_TYPED(clan_ranks, /datum/yautja_rank, list( + CLAN_RANK_UNBLOODED = new /datum/yautja_rank/unblooded(), + CLAN_RANK_YOUNG = new /datum/yautja_rank/young(), + CLAN_RANK_BLOODED = new /datum/yautja_rank/blooded(), + CLAN_RANK_ELITE = new /datum/yautja_rank/elite(), + CLAN_RANK_ELDER = new /datum/yautja_rank/elder(), + CLAN_RANK_LEADER = new /datum/yautja_rank/leader(), + CLAN_RANK_ADMIN = new /datum/yautja_rank/ancient() +)) + +GLOBAL_LIST_INIT(clan_ranks_ordered, list( + CLAN_RANK_UNBLOODED = CLAN_RANK_UNBLOODED_INT, + CLAN_RANK_YOUNG = CLAN_RANK_YOUNG_INT, + CLAN_RANK_BLOODED = CLAN_RANK_BLOODED_INT, + CLAN_RANK_ELITE = CLAN_RANK_ELITE_INT, + CLAN_RANK_ELDER = CLAN_RANK_ELDER_INT, + CLAN_RANK_LEADER = CLAN_RANK_LEADER_INT, + CLAN_RANK_ADMIN = CLAN_RANK_ADMIN_INT +)) diff --git a/code/_globalvars/lists/names.dm b/code/_globalvars/lists/names.dm new file mode 100644 index 000000000000..09ad2b422d3c --- /dev/null +++ b/code/_globalvars/lists/names.dm @@ -0,0 +1,39 @@ +GLOBAL_LIST_INIT(ai_names, file2list("strings/ai.txt")) +GLOBAL_LIST_INIT(first_names_male, file2list("strings/first_male.txt")) +GLOBAL_LIST_INIT(first_names_female, file2list("strings/first_female.txt")) +GLOBAL_LIST_INIT(last_names, file2list("strings/last.txt")) +GLOBAL_LIST_INIT(clown_names, file2list("strings/clown.txt")) +GLOBAL_LIST_INIT(operation_titles, file2list("strings/operation_title.txt")) +GLOBAL_LIST_INIT(operation_prefixes, file2list("strings/operation_prefix.txt")) +GLOBAL_LIST_INIT(operation_postfixes, file2list("strings/operation_postfix.txt")) + +GLOBAL_LIST_INIT(verbs, file2list("strings/verbs.txt")) +//loaded on startup because of " +//would include in rsc if ' was used + + +GLOBAL_LIST_INIT(first_names_male_clf, list("Alan","Jack","Bil","Jonathan","John","Shiro","Gareth","Clark","Sam", "Lionel", "Aaron", "Charlie", "Scott", "Winston", "Aidan", "Ellis", "Mason", "Wesley", "Nicholas", "Calvin", "Nishikawa", "Hiroto", "Chiba", "Ouchi", "Furuse", "Takagi", "Oba", "Kishimoto")) +GLOBAL_LIST_INIT(first_names_female_clf, list("Emma", "Adelynn", "Mary", "Halie", "Chelsea", "Lexie", "Arya", "Alicia", "Selah", "Amber", "Heather", "Myra", "Heidi", "Charlotte", "Oliva", "Lydia", "Tia", "Riko", "Ari", "Machida", "Ueki", "Mihara", "Noda")) +GLOBAL_LIST_INIT(last_names_clf, list("Hawkins","Rickshaw","Elliot","Billard","Cooper","Fox", "Barlow", "Barrows", "Stewart", "Morgan", "Green", "Stone", "Burr", "Hunt", "Yuko", "Gesshin", "Takanibu", "Tetsuzan", "Tomomi", "Bokkai", "Takesi")) + +GLOBAL_LIST_INIT(first_names_male_colonist, list("Alan","Jack","Bil","Jonathan","John","Shiro","Gareth","Clark","Sam", "Lionel", "Aaron", "Charlie", "Scott", "Winston", "Aidan", "Ellis", "Mason", "Wesley", "Nicholas", "Calvin", "Nishikawa", "Hiroto", "Chiba", "Ouchi", "Furuse", "Takagi", "Oba", "Kishimoto")) +GLOBAL_LIST_INIT(first_names_female_colonist, list("Emma", "Adelynn", "Mary", "Halie", "Chelsea", "Lexie", "Arya", "Alicia", "Selah", "Amber", "Heather", "Myra", "Heidi", "Charlotte", "Ashley", "Raven", "Tori", "Anne", "Madison", "Oliva", "Lydia", "Tia", "Riko", "Ari", "Machida", "Ueki", "Mihara", "Noda")) +GLOBAL_LIST_INIT(last_names_colonist, list("Hawkins","Rickshaw","Elliot","Billard","Cooper","Fox", "Barlow", "Barrows", "Stewart", "Morgan", "Green", "Stone", "Titan", "Crowe", "Krantz", "Pathillo", "Driggers", "Burr", "Hunt", "Yuko", "Gesshin", "Takanibu", "Tetsuzan", "Tomomi", "Bokkai", "Takesi")) + +GLOBAL_LIST_INIT(first_names_male_upp, list("Badai","Mongkeemur","Alexei","Andrei","Artyom","Viktor","Xiangai","Ivan","Choban","Oleg", "Dayan", "Taghi", "Batu", "Arik", "Orda", "Ghazan", "Bala", "Gao", "Zhan", "Ren", "Hou", "Xue", "Serafim", "Luca", "Su", "György", "István", "Mihály", "Vladimir", "Aleksandr", "Fyodor", "Bhodar", "Qazem", "Łukasz", "Miłogost", "Radogost", "Uniegost", "Hostirad", "Hostimil", "Hostisvit", "Lubgost", "Gościsław", "Vseslav", "Bohuměr", "Bronisław", "Česćiměr", "Dobysław", "Horisław", "Jaroměr", "Mirosław", "Mječisław", "Radoměr", "Stanij", "Stanisław", "Wjeleměr", "Wójsław")) +GLOBAL_LIST_INIT(first_names_female_upp, list("Altani","Cirina","Anastasiya","Saran","Wei","Oksana","Ren","Svena","Tatyana","Yaroslava", "Izabella", "Kata", "Krisztina", "Miruna", "Flori", "Lucia", "Anica", "Li", "Yimu", "Alona", "Hsiau-Li", "Xiaoling", "Erhong", "Baśka", "Angela", "Angelina", "Angja", "Ankica", "Biljana", "Bisera", "Bistra", "Blaga", "Blagica", "Blagorodna", "Verka", "Vladica", "Denica", "Živka", "Zlata", "Jagoda", "Letka", "Ljupka", "Mila", "Mirjana", "Mirka", "Rada", "Radmila", "Slavica", "Slavka", "Snežana", "Stojna", "Ubavka", "Jaromir", "Mscëwòj", "Subisłôw", "Swiãtopôłk", "Ji-Sun", "Chaeyong", "Chaewon", "Saerom", "Seoyeong", "Jiheon", "Hayoung")) +GLOBAL_LIST_INIT(last_names_upp, list("Azarov","Bogdanov","Barsukov","Golovin","Davydov","Khan","Noica","Barbu","Zhukov","Ivanov","Mihai","Kasputin","Belov", "Belova","Melnikov", "Vasilevsky", "Aleksander", "Halkovich", "Stanislaw", "Proca", "Zaituc", "Arcos", "Kubat", "Kral", "Volf", "Xun", "Jia", "Bachoń", "Wang", "Ji", "Xiang", "Zhang", "Mei", "Ma", "Kim", "Yi", "Ri", "Pak", "Chong", "Baek", "Kwon", "Hwang", "Roh", "Lee", "Song")) + +GLOBAL_LIST_INIT(first_names_male_pmc, list("Owen","Luka","Nelson","Branson", "Tyson", "Leo", "Bryant", "Kobe", "Rohan", "Riley", "Aidan", "Watase","Egawa", "Hisakawa", "Koide", "Remy", "Martial", "Magnus", "Heiko", "Lennard")) +GLOBAL_LIST_INIT(first_names_female_pmc, list("Madison","Jessica","Anna","Juliet", "Olivia", "Lea", "Diane", "Kaori", "Beatrice", "Riley", "Amy", "Natsue","Yumi", "Aiko", "Fujiko", "Jennifer", "Ashley", "Mary", "Hitomi", "Lisa")) +GLOBAL_LIST_INIT(last_names_pmc, list("Bates","Shaw","Hansen","Black", "Chambers", "Hall", "Gibson", "Weiss", "Waller", "Burton", "Bakin", "Rohan", "Naomichi", "Yakumo", "Yosai", "Gallagher", "Hiles", "Bourdon", "Strassman", "Palau")) + +GLOBAL_LIST_INIT(first_names_male_gladiator, list("Augustus", "Maximus", "Octavius", "Septimus", "Titus", "Brutus", "Caesar", "Justinian")) +GLOBAL_LIST_INIT(first_names_female_gladiator, list("Aelia", "Aquila", "Caecilia", "Camilla", "Claudia", "Flavia", "Martina", "Theodora")) + +GLOBAL_LIST_INIT(first_names_male_dutch, list("Raymond", "Jesse", "Jack", "John", "Sam", "Aaron", "Charlie", "Ellis", "Nick", "Francis", "Louis")) +GLOBAL_LIST_INIT(first_names_female_dutch, list("Chelsea", "Mira", "Jessica", "Catherine", "Eliza", "Emma", "Ashley", "Annie", "Alicia", "Miranda", "Ellen")) + +GLOBAL_LIST_INIT(monkey_names, list("Abu", "Aldo", "Bear", "Bingo", "Clyde", "Crystal", "Gordo", "George", "Koko", "Marcel", "Nim", "Rafiki", "Spike", "Banana", "Boots", "Bubbles", "Smiley", "Winston")) + +GLOBAL_LIST_INIT(weapon_surnames, list("Adze", "Axe", "Bagh Nakha", "Bo", "Bola", "Bow", "Bowman", "Cannon", "Carbine", "Cestus", "Club", "Culverin", "Dagger", "Dao", "Derringer", "Dha", "Dussack", "Emeici", "Falchion", "Fan", "Flyssa", "Gauntlet", "Hammer", "Halberd", "Harquebus", "Hatchet", "Hwando", "Katar", "Kampilan", "Knuckles", "Lance", "Lancer", "Larim", "Maduvu", "Mace", "Maru", "Mauser", "Messer", "Mine", "Mubucae", "Nyepel", "Onager", "Pata", "Pike", "Ram", "Saber", "Seax", "Shamsir", "Sickle", "Sling", "Spear", "Spears", "Staff", "Sword", "Tekko")) diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm index 44f4b2c4010f..0b7a4af0f05f 100644 --- a/code/_globalvars/misc.dm +++ b/code/_globalvars/misc.dm @@ -1,3 +1,89 @@ +GLOBAL_VAR_INIT(game_year, 2182) + +GLOBAL_VAR_INIT(ooc_allowed, TRUE) +GLOBAL_VAR_INIT(looc_allowed, TRUE) +GLOBAL_VAR_INIT(dsay_allowed, TRUE) +GLOBAL_VAR_INIT(dooc_allowed, TRUE) +GLOBAL_VAR_INIT(dlooc_allowed, FALSE) + +GLOBAL_VAR_INIT(enter_allowed, TRUE) + +GLOBAL_LIST_EMPTY(admin_log) +GLOBAL_LIST_EMPTY(asset_log) + +// multiplier for watts per tick <> cell storage (eg: 0.02 means if there is a load of 1000 watts, 20 units will be taken from a cell per second) +//It's a conversion constant. power_used*CELLRATE = charge_provided, or charge_used/CELLRATE = power_provided +#define CELLRATE 0.006 + +// Cap for how fast cells charge, as a percentage-per-tick (0.01 means cellcharge is capped to 1% per second) +#define CHARGELEVEL 0.001 + +GLOBAL_VAR(VehicleElevatorConsole) +GLOBAL_VAR(VehicleGearConsole) + +//Spawnpoints. +GLOBAL_LIST_EMPTY(fallen_list) +/// This is for dogtags placed on crosses- they will show up at the end-round memorial. +GLOBAL_LIST_EMPTY(fallen_list_cross) + +GLOBAL_LIST_INIT(diagonals, list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)) +GLOBAL_LIST_INIT(alldirs, list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)) +GLOBAL_LIST_INIT(reverse_dir, list(2, 1, 3, 8, 10, 9, 11, 4, 6, 5, 7, 12, 14, 13, 15, 32, 34, 33, 35, 40, 42, 41, 43, 36, 38, 37, 39, 44, 46, 45, 47, 16, 18, 17, 19, 24, 26, 25, 27, 20, 22, 21, 23, 28, 30, 29, 31, 48, 50, 49, 51, 56, 58, 57, 59, 52, 54, 53, 55, 60, 62, 61, 63)) + + + +GLOBAL_VAR(join_motd) +GLOBAL_VAR(current_tms) + +GLOBAL_LIST_INIT(BorgWireColorToFlag, RandomBorgWires()) +GLOBAL_LIST(BorgIndexToFlag) +GLOBAL_LIST(BorgIndexToWireColor) +GLOBAL_LIST(BorgWireColorToIndex) +GLOBAL_LIST_INIT(AAlarmWireColorToFlag, RandomAAlarmWires()) +GLOBAL_LIST(AAlarmIndexToFlag) +GLOBAL_LIST(AAlarmIndexToWireColor) +GLOBAL_LIST(AAlarmWireColorToIndex) + +/// 3 minutes in the station. +#define shuttle_time_in_station 3 MINUTES +/// 10 minutes to arrive. +#define shuttle_time_to_arrive 10 MINUTES + + // For FTP requests. (i.e. downloading runtime logs.) + // However it'd be ok to use for accessing attack logs and such too, which are even laggier. +GLOBAL_VAR_INIT(fileaccess_timer, 0) + +// Reference list for disposal sort junctions. Filled up by sorting junction's New() +GLOBAL_LIST_EMPTY(tagger_locations) + +//added for Xenoarchaeology, might be useful for other stuff +GLOBAL_LIST_INIT(alphabet_uppercase, list("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z")) +GLOBAL_LIST_INIT(alphabet_lowercase, list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")) + +GLOBAL_LIST_INIT(greek_letters, list("Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta", "Eta", "Theta", "Iota", "Kappa", "Lambda", "Mu", "Nu", "Xi", "Omnicron", "Pi", "Rho", "Sigma", "Tau", "Upsilon", "Phi", "Chi", "Psi", "Omega")) +GLOBAL_LIST_INIT(nato_phonetic_alphabet, list("Alpha", "Bravo", "Charlie", "Delta", "Echo", "Foxtrot", "Golf", "Hotel", "India", "Juliett", "Kilo", "Lima", "Mike", "November", "Oscar", "Papa", "Quebec", "Romeo", "Sierra", "Tango", "Uniform", "Victor", "Whiskey", "X-Ray", "Yankee", "Zulu")) + +//Used for autocall procs on ERT +GLOBAL_VAR_INIT(distress_cancel, FALSE) +GLOBAL_VAR_INIT(destroy_cancel, FALSE) + +// Which lobby art is on display +// This is updated by the lobby art turf when it initializes +GLOBAL_VAR_INIT(displayed_lobby_art, -1) + +// Last global ID that was assigned to a mob (for round recording purposes) +GLOBAL_VAR_INIT(last_mob_gid, 0) + +GLOBAL_LIST_INIT(almayer_ship_sections, list( + "Upper deck Foreship", + "Upper deck Midship", + "Upper deck Aftship", + "Lower deck Foreship", + "Lower deck Midship", + "Lower deck Aftship" +)) + + GLOBAL_VAR_INIT(internal_tick_usage, 0.2 * world.tick_lag) /// Global performance feature toggle flags @@ -14,8 +100,24 @@ GLOBAL_LIST_INIT(pill_icon_mappings, map_pill_icons()) /// In-round override to default OOC color GLOBAL_VAR(ooc_color_override) +// tacmap cooldown for xenos and marines +GLOBAL_VAR_INIT(uscm_canvas_cooldown, 0) +GLOBAL_VAR_INIT(xeno_canvas_cooldown, 0) + +// getFlatIcon cooldown for xenos and marines +GLOBAL_VAR_INIT(uscm_flatten_map_icon_cooldown, 0) +GLOBAL_VAR_INIT(xeno_flatten_map_icon_cooldown, 0) + +// latest unannounced flat tacmap for xenos and marines +GLOBAL_VAR(uscm_unannounced_map) +GLOBAL_VAR(xeno_unannounced_map) + +//global tacmaps for action button access +GLOBAL_DATUM_INIT(uscm_tacmap_status, /datum/tacmap/drawing/status_tab_view, new) +GLOBAL_DATUM_INIT(xeno_tacmap_status, /datum/tacmap/drawing/status_tab_view/xeno, new) + /// List of roles that can be setup for each gamemode -GLOBAL_LIST_INIT(gamemode_roles, list()) +GLOBAL_LIST_EMPTY(gamemode_roles) GLOBAL_VAR_INIT(minimum_exterior_lighting_alpha, 255) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 3b8ba26c07e9..b99d52086e36 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -375,7 +375,7 @@ tX = tX[1] var/shiftX = C.pixel_x / world.icon_size var/shiftY = C.pixel_y / world.icon_size - var/list/actual_view = getviewsize(C ? C.view : world_view_size) + var/list/actual_view = getviewsize(C ? C.view : GLOB.world_view_size) tX = Clamp(origin.x + text2num(tX) + shiftX - round(actual_view[1] / 2) - 1, 1, world.maxx) tY = Clamp(origin.y + text2num(tY) + shiftY - round(actual_view[2] / 2) - 1, 1, world.maxy) return locate(tX, tY, tZ) diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index c6b642974881..22a24e022a3f 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -9,7 +9,7 @@ "1:2,3:4" is the square (1,3) with pixel offsets (+2, +4); slightly right and slightly above the turf grid. Pixel offsets are used so you don't perfectly hide the turf under them, that would be crappy. - The size of the user's screen is defined by client.view (indirectly by world_view_size), in our case "15x15". + The size of the user's screen is defined by client.view (indirectly by GLOB.world_view_size), in our case "15x15". Therefore, the top right corner (except during admin shenanigans) is at "15,15" */ diff --git a/code/_onclick/hud/ghost.dm b/code/_onclick/hud/ghost.dm index a6754747a019..a99129d09bcd 100644 --- a/code/_onclick/hud/ghost.dm +++ b/code/_onclick/hud/ghost.dm @@ -48,6 +48,14 @@ var/mob/dead/observer/G = usr G.reenter_corpse() +/atom/movable/screen/ghost/toggle_huds + name = "Toggle HUDs" + icon_state = "ghost_hud_toggle" + +/atom/movable/screen/ghost/toggle_huds/Click() + var/client/client = usr.client + client.toggle_ghost_hud() + /datum/hud/ghost/New(mob/owner, ui_style='icons/mob/hud/human_white.dmi', ui_color, ui_alpha = 230) . = ..() var/atom/movable/screen/using @@ -68,6 +76,9 @@ using.screen_loc = ui_ghost_slot4 static_inventory += using + using = new /atom/movable/screen/ghost/toggle_huds() + using.screen_loc = ui_ghost_slot5 + static_inventory += using /datum/hud/ghost/show_hud(version = 0, mob/viewmob) // don't show this HUD if observing; show the HUD of the observee diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 215e228fdd9d..f5f61424daac 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -230,6 +230,7 @@ hud_version = display_hud_version persistent_inventory_update(screenmob) mymob.update_action_buttons(TRUE) + reorganize_alerts(screenmob) mymob.reload_fullscreens() // ensure observers get an accurate and up-to-date view diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm index cfc6c4d034fb..4a23ebd882d3 100644 --- a/code/_onclick/hud/radial.dm +++ b/code/_onclick/hud/radial.dm @@ -34,6 +34,12 @@ GLOBAL_LIST_EMPTY(radial_menus) /atom/movable/screen/radial/slice/clicked(mob/user) + if(QDELETED(src)) + return + + if(!parent) + CRASH("clicked() called on a radial slice with a null parent while not deleted/deleting") + if(user.client == parent.current_user) if(next_page) parent.next_page() diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index b49bce4111f0..d114aff6b7cb 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -535,7 +535,7 @@ if(!user.hive.living_xeno_queen) to_chat(user, SPAN_WARNING("Without a queen your psychic link is broken!")) return FALSE - if(user.burrow || user.is_mob_incapacitated() || user.buckled) + if(HAS_TRAIT(user, TRAIT_ABILITY_BURROWED) || user.is_mob_incapacitated() || user.buckled) return FALSE user.hive.mark_ui.update_all_data() user.hive.mark_ui.open_mark_menu(user) @@ -583,7 +583,7 @@ if(!user.hive.living_xeno_queen) to_chat(user, SPAN_WARNING("Your hive doesn't have a living queen!")) return FALSE - if(user.burrow || user.is_mob_incapacitated() || user.buckled) + if(HAS_TRAIT(user, TRAIT_ABILITY_BURROWED) || user.is_mob_incapacitated() || user.buckled) return FALSE user.overwatch(user.hive.living_xeno_queen) diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 9c9784286d09..0bfa0a759287 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -13,7 +13,7 @@ var/obj/structure/S = A S.do_climb(src, mods) return TRUE - else if(!(isitem(A) && get_dist(src, A) <= 1) && client.prefs.toggle_prefs & TOGGLE_MIDDLE_MOUSE_SWAP_HANDS) + else if(!(isitem(A) && get_dist(src, A) <= 1) && (client && (client.prefs.toggle_prefs & TOGGLE_MIDDLE_MOUSE_SWAP_HANDS))) swap_hand() return TRUE diff --git a/code/_onclick/xeno.dm b/code/_onclick/xeno.dm index 0f9c50acb49d..abb76ded498b 100644 --- a/code/_onclick/xeno.dm +++ b/code/_onclick/xeno.dm @@ -3,7 +3,7 @@ */ /mob/living/carbon/xenomorph/UnarmedAttack(atom/target, proximity, click_parameters, tile_attack = FALSE, ignores_resin = FALSE) - if(body_position == LYING_DOWN || burrow) //No attacks while laying down + if(body_position == LYING_DOWN || HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) //No attacks while laying down return FALSE var/mob/alt diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index 743f9be9fec0..741862b5d65d 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -127,3 +127,8 @@ min_val = 1 config_entry_value = 450 integer = TRUE + +/datum/config_entry/number/whiskey_required_players + min_val = 0 + config_entry_value = 140 + integer = TRUE diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index cc3d00fd951b..385cbcb8d446 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -627,3 +627,5 @@ This maintains a list of ip addresses that are able to bypass topic filtering. protection = CONFIG_ENTRY_HIDDEN|CONFIG_ENTRY_LOCKED /datum/config_entry/flag/guest_ban + +/datum/config_entry/flag/auto_profile diff --git a/code/controllers/mc/admin.dm b/code/controllers/mc/admin.dm index 78eb5c5b5a5a..8c5060864747 100644 --- a/code/controllers/mc/admin.dm +++ b/code/controllers/mc/admin.dm @@ -96,8 +96,8 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick) set category = "Debug.Controllers" set name = "Debug Role Authority" - if(!RoleAuthority) + if(!GLOB.RoleAuthority) to_chat(usr, "RoleAuthority not found!") return - debug_variables(RoleAuthority) + debug_variables(GLOB.RoleAuthority) message_admins("Admin [key_name_admin(usr)] is debugging the Role Authority.") diff --git a/code/controllers/shuttle_controller.dm b/code/controllers/shuttle_controller.dm index e54d045baff4..35031cf7334f 100644 --- a/code/controllers/shuttle_controller.dm +++ b/code/controllers/shuttle_controller.dm @@ -28,12 +28,12 @@ shuttle.location = 1 shuttle.warmup_time = 1 shuttle.move_time = ELEVATOR_TRANSIT_DURATION - for(var/area/A in all_areas) + for(var/area/A in GLOB.all_areas) if(A.type == /area/supply/dock) shuttle.area_offsite = A break - for(var/area/A in all_areas) + for(var/area/A in GLOB.all_areas) if(A.type == /area/supply/station) shuttle.area_station = A break @@ -41,7 +41,7 @@ shuttles["Supply"] = shuttle process_shuttles += shuttle - supply_controller.shuttle = shuttle + GLOB.supply_controller.shuttle = shuttle //---ELEVATOR---// // Elevator I @@ -50,17 +50,17 @@ shuttle.warmup_time = 10 SECONDS shuttle.recharge_time = ELEVATOR_RECHARGE - for(var/area/A in all_areas) + for(var/area/A in GLOB.all_areas) if(A.type == /area/shuttle/elevator1/underground) shuttle.area_offsite = A break - for(var/area/A in all_areas) + for(var/area/A in GLOB.all_areas) if(A.type == /area/shuttle/elevator1/ground) shuttle.area_station = A break - for(var/area/A in all_areas) + for(var/area/A in GLOB.all_areas) if(A.type == /area/shuttle/elevator1/transit) shuttle.area_transition = A break @@ -76,17 +76,17 @@ shuttle.warmup_time = 10 SECONDS shuttle.recharge_time = ELEVATOR_RECHARGE - for(var/area/A in all_areas) + for(var/area/A in GLOB.all_areas) if(A.type == /area/shuttle/elevator2/underground) shuttle.area_offsite = A break - for(var/area/A in all_areas) + for(var/area/A in GLOB.all_areas) if(A.type == /area/shuttle/elevator2/ground) shuttle.area_station = A break - for(var/area/A in all_areas) + for(var/area/A in GLOB.all_areas) if(A.type == /area/shuttle/elevator2/transit) shuttle.area_transition = A break @@ -102,17 +102,17 @@ shuttle.location = 0 shuttle.warmup_time = 10 SECONDS shuttle.recharge_time = ELEVATOR_RECHARGE - for(var/area/A in all_areas) + for(var/area/A in GLOB.all_areas) if(A.type == /area/shuttle/elevator3/underground) shuttle.area_offsite = A break - for(var/area/A in all_areas) + for(var/area/A in GLOB.all_areas) if(A.type == /area/shuttle/elevator3/ground) shuttle.area_station = A break - for(var/area/A in all_areas) + for(var/area/A in GLOB.all_areas) if(A.type == /area/shuttle/elevator3/transit) shuttle.area_transition = A break @@ -127,17 +127,17 @@ shuttle.location = 0 shuttle.warmup_time = 10 SECONDS shuttle.recharge_time = ELEVATOR_RECHARGE - for(var/area/A in all_areas) + for(var/area/A in GLOB.all_areas) if(A.type == /area/shuttle/elevator4/underground) shuttle.area_offsite = A break - for(var/area/A in all_areas) + for(var/area/A in GLOB.all_areas) if(A.type == /area/shuttle/elevator4/ground) shuttle.area_station = A break - for(var/area/A in all_areas) + for(var/area/A in GLOB.all_areas) if(A.type == /area/shuttle/elevator4/transit) shuttle.area_transition = A break @@ -152,17 +152,17 @@ shuttle.location = 0 shuttle.warmup_time = 10 SECONDS shuttle.recharge_time = ELEVATOR_RECHARGE - for(var/area/A in all_areas) + for(var/area/A in GLOB.all_areas) if(A.type == /area/shuttle/tri_trans1/omega) shuttle.area_offsite = A break - for(var/area/A in all_areas) + for(var/area/A in GLOB.all_areas) if(A.type == /area/shuttle/tri_trans1/alpha) shuttle.area_station = A break - for(var/area/A in all_areas) + for(var/area/A in GLOB.all_areas) if(A.type == /area/shuttle/tri_trans1/away) shuttle.area_transition = A break @@ -178,17 +178,17 @@ shuttle.location = 0 shuttle.warmup_time = 10 SECONDS shuttle.recharge_time = ELEVATOR_RECHARGE - for(var/area/A in all_areas) + for(var/area/A in GLOB.all_areas) if(A.type == /area/shuttle/tri_trans2/omega) shuttle.area_offsite = A break - for(var/area/A in all_areas) + for(var/area/A in GLOB.all_areas) if(A.type == /area/shuttle/tri_trans2/alpha) shuttle.area_station = A break - for(var/area/A in all_areas) + for(var/area/A in GLOB.all_areas) if(A.type == /area/shuttle/tri_trans2/away) shuttle.area_transition = A break @@ -216,7 +216,7 @@ //search for the controllers, if we have one. if(dock_controller_map.len) - for(var/obj/structure/machinery/embedded_controller/radio/C in machines) //only radio controllers are supported at the moment + for(var/obj/structure/machinery/embedded_controller/radio/C in GLOB.machines) //only radio controllers are supported at the moment if (istype(C.program, /datum/computer/file/embedded_program/docking)) if(dock_controller_map[C.id_tag]) shuttle = dock_controller_map[C.id_tag] diff --git a/code/controllers/subsystem/cellauto.dm b/code/controllers/subsystem/cellauto.dm index bcdd9d241ccf..b543ddd43c26 100644 --- a/code/controllers/subsystem/cellauto.dm +++ b/code/controllers/subsystem/cellauto.dm @@ -1,4 +1,4 @@ -var/list/cellauto_cells = list() +GLOBAL_LIST_EMPTY(cellauto_cells) SUBSYSTEM_DEF(cellauto) name = "Cellular Automata" @@ -9,12 +9,12 @@ SUBSYSTEM_DEF(cellauto) var/list/currentrun = list() /datum/controller/subsystem/cellauto/stat_entry(msg) - msg = "C: [cellauto_cells.len]" + msg = "C: [GLOB.cellauto_cells.len]" return ..() /datum/controller/subsystem/cellauto/fire(resumed = FALSE) if (!resumed) - currentrun = cellauto_cells.Copy() + currentrun = GLOB.cellauto_cells.Copy() while(currentrun.len) var/datum/automata_cell/C = currentrun[currentrun.len] diff --git a/code/controllers/subsystem/communications.dm b/code/controllers/subsystem/communications.dm index 8458436a53e5..b8b037c33381 100644 --- a/code/controllers/subsystem/communications.dm +++ b/code/controllers/subsystem/communications.dm @@ -66,78 +66,83 @@ Frequency range: 1200 to 1600 Radiochat range: 1441 to 1489 (most devices refuse to be tune to other frequency, even during mapmaking) */ -var/const/MIN_FREE_FREQ = 1201 // ------------------------------------------------- +#define MIN_FREE_FREQ 1201 // ------------------------------------------------- //Misc channels -var/const/YAUT_FREQ = 1205 -var/const/DUT_FREQ = 1210 -var/const/CMB_FREQ = 1220 -var/const/VAI_FREQ = 1215 -var/const/RMC_FREQ = 1216 +#define YAUT_FREQ 1205 +#define DUT_FREQ 1210 +#define VAI_FREQ 1215 +#define RMC_FREQ 1216 +#define CMB_FREQ 1220 //WY Channels (1230-1249) -var/const/WY_FREQ = 1231 -var/const/PMC_CMD_FREQ = 1232 -var/const/PMC_FREQ = 1233 -var/const/PMC_ENGI_FREQ = 1234 -var/const/PMC_MED_FREQ = 1235 -var/const/PMC_CCT_FREQ = 1236 -var/const/WY_WO_FREQ = 1239 +#define WY_FREQ 1231 +#define PMC_CMD_FREQ 1232 +#define PMC_FREQ 1233 +#define PMC_ENGI_FREQ 1234 +#define PMC_MED_FREQ 1235 +#define PMC_CCT_FREQ 1236 +#define WY_WO_FREQ 1239 //UPP Channels (1250-1269) -var/const/UPP_FREQ = 1251 -var/const/UPP_CMD_FREQ = 1252 -var/const/UPP_ENGI_FREQ = 1253 -var/const/UPP_MED_FREQ = 1254 -var/const/UPP_CCT_FREQ = 1255 -var/const/UPP_KDO_FREQ = 1259 +#define UPP_FREQ 1251 +#define UPP_CMD_FREQ 1252 +#define UPP_ENGI_FREQ 1253 +#define UPP_MED_FREQ 1254 +#define UPP_CCT_FREQ 1255 +#define UPP_KDO_FREQ 1259 //CLF Channels (1270-1289) -var/const/CLF_FREQ = 1271 -var/const/CLF_CMD_FREQ = 1272 -var/const/CLF_ENGI_FREQ = 1273 -var/const/CLF_MED_FREQ = 1274 -var/const/CLF_CCT_FREQ = 1275 +#define CLF_FREQ 1271 +#define CLF_CMD_FREQ 1272 +#define CLF_ENGI_FREQ 1273 +#define CLF_MED_FREQ 1274 +#define CLF_CCT_FREQ 1275 -var/const/MIN_FREQ = 1460 // ------------------------------------------------------ -var/const/PUB_FREQ = 1461 -var/const/MAX_FREQ = 1468 // ------------------------------------------------------ +//Listening Bugs (1290-1291) +#define BUG_A_FREQ 1290 +#define BUG_B_FREQ 1291 + +//General Radio +#define MIN_FREQ 1460 // ------------------------------------------------------ +#define PUB_FREQ 1461 +#define MAX_FREQ 1468 // ------------------------------------------------------ //USCM High Command (USCM 1470-1499) -var/const/HC_FREQ = 1471 -var/const/SOF_FREQ = 1472 -var/const/PVST_FREQ = 1473 -var/const/CBRN_FREQ = 1474 +#define HC_FREQ 1471 +#define SOF_FREQ 1472 +#define PVST_FREQ 1473 +#define CBRN_FREQ 1474 //Ship department channels -var/const/SENTRY_FREQ = 1480 -var/const/COMM_FREQ = 1481 -var/const/MED_FREQ = 1482 -var/const/ENG_FREQ = 1483 -var/const/SEC_FREQ = 1484 -var/const/REQ_FREQ = 1485 -var/const/JTAC_FREQ = 1486 -var/const/INTEL_FREQ = 1487 - -var/const/DS1_FREQ = 1488 -var/const/DS2_FREQ = 1489 +#define SENTRY_FREQ 1480 +#define COMM_FREQ 1481 +#define MED_FREQ 1482 +#define ENG_FREQ 1483 +#define SEC_FREQ 1484 +#define REQ_FREQ 1485 +#define JTAC_FREQ 1486 +#define INTEL_FREQ 1487 + +#define DS1_FREQ 1488 +#define DS2_FREQ 1489 //Marine Squad channels -var/const/ALPHA_FREQ = 1491 -var/const/BRAVO_FREQ = 1492 -var/const/CHARLIE_FREQ = 1493 -var/const/DELTA_FREQ = 1494 -var/const/ECHO_FREQ = 1495 -var/const/CRYO_FREQ = 1496 +#define ALPHA_FREQ 1491 +#define BRAVO_FREQ 1492 +#define CHARLIE_FREQ 1493 +#define DELTA_FREQ 1494 +#define ECHO_FREQ 1495 +#define CRYO_FREQ 1496 //Civilian channels -var/const/COLONY_FREQ = 1469 +#define COLONY_FREQ 1469 -var/const/AI_FREQ = 1500 +#define AI_FREQ 1500 -var/const/MAX_FREE_FREQ = 1599 // ------------------------------------------------- +#define MAX_FREE_FREQ 1599 // ------------------------------------------------- -var/list/radiochannels = list( +GLOBAL_LIST_INIT(radiochannels, list( RADIO_CHANNEL_YAUTJA = YAUT_FREQ, RADIO_CHANNEL_VAI = VAI_FREQ, RADIO_CHANNEL_CMB = CMB_FREQ, @@ -191,7 +196,10 @@ var/list/radiochannels = list( RADIO_CHANNEL_CLF_ENGI = CLF_ENGI_FREQ, RADIO_CHANNEL_CLF_MED = CLF_MED_FREQ, RADIO_CHANNEL_CLF_CCT = CLF_CCT_FREQ, -) + + RADIO_CHANNEL_BUG_A = BUG_A_FREQ, + RADIO_CHANNEL_BUG_B = BUG_B_FREQ, +)) // Response Teams #define ERT_FREQS list(VAI_FREQ, DUT_FREQ, YAUT_FREQ, CMB_FREQ, RMC_FREQ) @@ -205,6 +213,9 @@ var/list/radiochannels = list( // PMC Frequencies #define PMC_FREQS list(PMC_FREQ, PMC_CMD_FREQ, PMC_ENGI_FREQ, PMC_MED_FREQ, PMC_CCT_FREQ, WY_WO_FREQ, WY_FREQ) +//Listening Device Frequencies +#define BUG_FREQS list(BUG_A_FREQ, BUG_B_FREQ) + //Depts - used for colors in headset.dm, as well as deciding what the marine comms tower can listen into #define DEPT_FREQS list(COMM_FREQ, MED_FREQ, ENG_FREQ, SEC_FREQ, SENTRY_FREQ, ALPHA_FREQ, BRAVO_FREQ, CHARLIE_FREQ, DELTA_FREQ, ECHO_FREQ, CRYO_FREQ, REQ_FREQ, JTAC_FREQ, INTEL_FREQ, WY_FREQ) @@ -217,17 +228,17 @@ var/list/radiochannels = list( //This is done for performance, so we don't send signals to lots of machines unnecessarily. //This filter is special because devices belonging to default also receive signals sent to any other filter. -var/const/RADIO_DEFAULT = "radio_default" - -var/const/RADIO_TO_AIRALARM = "radio_airalarm" //air alarms -var/const/RADIO_FROM_AIRALARM = "radio_airalarm_rcvr" //devices interested in receiving signals from air alarms -var/const/RADIO_CHAT = "radio_telecoms" -var/const/RADIO_SIGNALS = "radio_signals" -var/const/RADIO_ATMOSIA = "radio_atmos" -var/const/RADIO_NAVBEACONS = "radio_navbeacon" -var/const/RADIO_AIRLOCK = "radio_airlock" -var/const/RADIO_MULEBOT = "radio_mulebot" -var/const/RADIO_MAGNETS = "radio_magnet" +#define RADIO_DEFAULT "radio_default" + +#define RADIO_TO_AIRALARM "radio_airalarm" //air alarms +#define RADIO_FROM_AIRALARM "radio_airalarm_rcvr" //devices interested in receiving signals from air alarms +#define RADIO_CHAT "radio_telecoms" +#define RADIO_SIGNALS "radio_signals" +#define RADIO_ATMOSIA "radio_atmos" +#define RADIO_NAVBEACONS "radio_navbeacon" +#define RADIO_AIRLOCK "radio_airlock" +#define RADIO_MULEBOT "radio_mulebot" +#define RADIO_MAGNETS "radio_magnet" //callback used by objects to react to incoming radio signals /obj/proc/receive_signal(datum/signal/signal, receive_method, receive_param) @@ -269,6 +280,8 @@ SUBSYSTEM_DEF(radio) "[HC_FREQ]" = "hcradio", "[PVST_FREQ]" = "pvstradio", "[COLONY_FREQ]" = "deptradio", + "[BUG_A_FREQ]" = "airadio", + "[BUG_B_FREQ]" = "aiprivradio", ) /datum/controller/subsystem/radio/proc/add_object(obj/device as obj, new_frequency as num, filter = null as text|null) diff --git a/code/controllers/subsystem/fz_transitions.dm b/code/controllers/subsystem/fz_transitions.dm index fd41ce1ccb55..d12ab1358535 100644 --- a/code/controllers/subsystem/fz_transitions.dm +++ b/code/controllers/subsystem/fz_transitions.dm @@ -1,6 +1,6 @@ -var/list/projectors = list() -var/list/clones = list() -var/list/clones_t = list() +GLOBAL_LIST_EMPTY(projectors) +GLOBAL_LIST_EMPTY(clones) +GLOBAL_LIST_EMPTY(clones_t) SUBSYSTEM_DEF(fz_transitions) name = "Z-Transitions" @@ -10,18 +10,18 @@ SUBSYSTEM_DEF(fz_transitions) flags = SS_KEEP_TIMING /datum/controller/subsystem/fz_transitions/stat_entry(msg) - msg = "P:[projectors.len]|C:[clones.len]|T:[clones_t.len]" + msg = "P:[GLOB.projectors.len]|C:[GLOB.clones.len]|T:[GLOB.clones_t.len]" return ..() /datum/controller/subsystem/fz_transitions/Initialize() for(var/obj/effect/projector/P in world) - projectors.Add(P) + GLOB.projectors.Add(P) return SS_INIT_SUCCESS /datum/controller/subsystem/fz_transitions/fire(resumed = FALSE) - for(var/obj/effect/projector/P in projectors) + for(var/obj/effect/projector/P in GLOB.projectors) if(!P || !P.loc) - projectors -= P + GLOB.projectors -= P continue if(!P.loc.clone) P.loc.create_clone(P.vector_x, P.vector_y) @@ -36,13 +36,13 @@ SUBSYSTEM_DEF(fz_transitions) O.clone.proj_y = P.vector_y - for(var/atom/movable/clone/C in clones) + for(var/atom/movable/clone/C in GLOB.clones) if(C.mstr == null || !istype(C.mstr.loc, /turf)) C.mstr.destroy_clone() //Kill clone if master has been destroyed or picked up else if(C != C.mstr) C.mstr.update_clone() //NOTE: Clone updates are also forced by player movement to reduce latency - for(var/atom/T in clones_t) + for(var/atom/T in GLOB.clones_t) if(T.clone && T.icon_state) //Just keep the icon updated for explosions etc. T.clone.icon_state = T.icon_state diff --git a/code/controllers/subsystem/game_decorator.dm b/code/controllers/subsystem/game_decorator.dm index cfee0406f84a..dd53b647d1a8 100644 --- a/code/controllers/subsystem/game_decorator.dm +++ b/code/controllers/subsystem/game_decorator.dm @@ -20,7 +20,7 @@ SUBSYSTEM_DEF(game_decorator) var/defer_decoration = TRUE //! So map decoration is done post-setup after nightmare and spawners /datum/game_decorator/New() - if(defer_decoration) + if(defer_decoration && is_active_decor()) RegisterSignal(SSdcs, COMSIG_GLOB_MODE_POSTSETUP, PROC_REF(defered_decoration)) /datum/game_decorator/proc/is_active_decor() diff --git a/code/controllers/subsystem/hijack.dm b/code/controllers/subsystem/hijack.dm index 55b5aa75caf8..ee3e86e6095e 100644 --- a/code/controllers/subsystem/hijack.dm +++ b/code/controllers/subsystem/hijack.dm @@ -216,13 +216,13 @@ SUBSYSTEM_DEF(hijack) switch(announce) if(1) - marine_announcement("Emergency fuel replenishment at 25 percent. Lifeboat emergency early launch now available.[marine_warning_areas ? "\nTo increase speed restore power to the following areas: [marine_warning_areas]" : " All fueling areas operational."]", HIJACK_ANNOUNCE) + marine_announcement("Emergency fuel replenishment is at 25 percent. Lifeboat emergency early launch is now available.[marine_warning_areas ? "\nTo increase speed, restore power to the following areas: [marine_warning_areas]" : " All fueling areas operational."]", HIJACK_ANNOUNCE) if(2) - marine_announcement("Emergency fuel replenishment at 50 percent.[marine_warning_areas ? "\nTo increase speed restore power to the following areas: [marine_warning_areas]" : " All fueling areas operational."]", HIJACK_ANNOUNCE) + marine_announcement("Emergency fuel replenishment is at 50 percent.[marine_warning_areas ? "\nTo increase speed, restore power to the following areas: [marine_warning_areas]" : " All fueling areas operational."]", HIJACK_ANNOUNCE) if(3) - marine_announcement("Emergency fuel replenishment at 75 percent.[marine_warning_areas ? "\nTo increase speed restore power to the following areas: [marine_warning_areas]" : " All fueling areas operational."]", HIJACK_ANNOUNCE) + marine_announcement("Emergency fuel replenishment is at 75 percent.[marine_warning_areas ? "\nTo increase speed, restore power to the following areas: [marine_warning_areas]" : " All fueling areas operational."]", HIJACK_ANNOUNCE) if(4) - marine_announcement("Emergency fuel replenishment at 100 percent. Safe utilization of lifeboats now possible.", HIJACK_ANNOUNCE) + marine_announcement("Emergency fuel replenishment is at 100 percent. Safe utilization of lifeboats and pods is now possible.", HIJACK_ANNOUNCE) if(!admin_sd_blocked) addtimer(CALLBACK(src, PROC_REF(unlock_self_destruct)), 8 SECONDS) @@ -238,7 +238,7 @@ SUBSYSTEM_DEF(hijack) return "Complete" /datum/controller/subsystem/hijack/proc/get_sd_eta() - if(!sd_time_remaining) + if(sd_detonated) return "Complete" if(overloaded_generators <= 0) @@ -254,7 +254,7 @@ SUBSYSTEM_DEF(hijack) evac_status = EVACUATION_STATUS_INITIATED ai_announcement("Attention. Emergency. All personnel must evacuate immediately.", 'sound/AI/evacuate.ogg') - for(var/obj/structure/machinery/status_display/cycled_status_display in machines) + for(var/obj/structure/machinery/status_display/cycled_status_display in GLOB.machines) if(is_mainship_level(cycled_status_display.z)) cycled_status_display.set_picture("evac") for(var/obj/docking_port/mobile/crashable/escape_shuttle/shuttle in SSshuttle.mobile) @@ -269,7 +269,7 @@ SUBSYSTEM_DEF(hijack) deactivate_lifeboats() ai_announcement("Evacuation has been cancelled.", 'sound/AI/evacuate_cancelled.ogg') - for(var/obj/structure/machinery/status_display/cycled_status_display in machines) + for(var/obj/structure/machinery/status_display/cycled_status_display in GLOB.machines) if(is_mainship_level(cycled_status_display.z)) cycled_status_display.set_sec_level_picture() diff --git a/code/controllers/subsystem/inactivity.dm b/code/controllers/subsystem/inactivity.dm index 5edd4e8c5294..6b8542444040 100644 --- a/code/controllers/subsystem/inactivity.dm +++ b/code/controllers/subsystem/inactivity.dm @@ -17,7 +17,7 @@ SUBSYSTEM_DEF(inactivity) return for(var/client/current as anything in GLOB.clients) - if(current.admin_holder && current.admin_holder.rights & R_ADMIN) //Skip admins. + if(current.admin_holder && current.admin_holder.rights & R_MOD) //Skip admins. continue if(current.is_afk(INACTIVITY_KICK)) if(!istype(current.mob, /mob/dead)) diff --git a/code/controllers/subsystem/influxstats.dm b/code/controllers/subsystem/influxstats.dm index 01015b83191d..066c94cc2593 100644 --- a/code/controllers/subsystem/influxstats.dm +++ b/code/controllers/subsystem/influxstats.dm @@ -104,7 +104,7 @@ SUBSYSTEM_DEF(influxstats) /datum/controller/subsystem/influxstats/proc/run_job_statistics() var/list/team_job_stats = list() - var/list/squad_job_stats = ROLES_SQUAD_ALL.Copy() + var/list/squad_job_stats = GLOB.ROLES_SQUAD_ALL.Copy() for(var/squad in squad_job_stats) squad_job_stats[squad] = list() diff --git a/code/controllers/subsystem/init/landmarks.dm b/code/controllers/subsystem/init/landmarks.dm index 59bba7c7922b..31b71c074a5d 100644 --- a/code/controllers/subsystem/init/landmarks.dm +++ b/code/controllers/subsystem/init/landmarks.dm @@ -1,4 +1,4 @@ -var/list/item_pool_landmarks = list() +GLOBAL_LIST_EMPTY(item_pool_landmarks) SUBSYSTEM_DEF(landmark_init) name = "Landmark Init" @@ -9,7 +9,7 @@ SUBSYSTEM_DEF(landmark_init) // List of all the datums we need to loop through var/list/datum/item_pool_holder/pools = list() - for (var/obj/effect/landmark/item_pool_spawner/L in item_pool_landmarks) + for (var/obj/effect/landmark/item_pool_spawner/L in GLOB.item_pool_landmarks) var/curr_pool_name = L.pool_name @@ -48,8 +48,8 @@ SUBSYSTEM_DEF(landmark_init) continue if (pool.quota > pool.turfs.len) - log_debug("Item pool [pool.pool_name] wants to spawn more items than it has landmarks for. Spawning [turfs.len] instances of [pool.type_to_spawn] instead. Code: ITEM_POOL_4") - message_admins("Item pool [pool.pool_name] wants to spawn more items than it has landmarks for. Spawning [turfs.len] instances of [pool.type_to_spawn] instead. Tell the devs. Code: ITEM_POOL_4") + log_debug("Item pool [pool.pool_name] wants to spawn more items than it has landmarks for. Spawning [pool.turfs.len] instances of [pool.type_to_spawn] instead. Code: ITEM_POOL_4") + message_admins("Item pool [pool.pool_name] wants to spawn more items than it has landmarks for. Spawning [pool.turfs.len] instances of [pool.type_to_spawn] instead. Tell the devs. Code: ITEM_POOL_4") pool.quota = pool.turfs.len // Quota times, pick a random turf, spawn an item there, then remove that turf from the list. diff --git a/code/controllers/subsystem/item_cleanup.dm b/code/controllers/subsystem/item_cleanup.dm index 35d1fc2859e9..26958eb8742b 100644 --- a/code/controllers/subsystem/item_cleanup.dm +++ b/code/controllers/subsystem/item_cleanup.dm @@ -1,4 +1,4 @@ -var/global/list/item_cleanup_list = list() +GLOBAL_LIST_EMPTY(item_cleanup_list) SUBSYSTEM_DEF(item_cleanup) name = "Item Cleanup" @@ -34,9 +34,9 @@ SUBSYSTEM_DEF(item_cleanup) break //We transfer items from the global garbage list onto the next iteration list - while(!isnull(item_cleanup_list) && item_cleanup_list.len > 0) - addToListNoDupe(items_to_clean_up, item_cleanup_list[item_cleanup_list.len]) - item_cleanup_list -= item_cleanup_list[item_cleanup_list.len] + while(!isnull(GLOB.item_cleanup_list) && GLOB.item_cleanup_list.len > 0) + addToListNoDupe(items_to_clean_up, GLOB.item_cleanup_list[GLOB.item_cleanup_list.len]) + GLOB.item_cleanup_list -= GLOB.item_cleanup_list[GLOB.item_cleanup_list.len] log_debug("item_cleanup deleted [deleted] garbage out of total [total_items]") @@ -57,9 +57,9 @@ SUBSYSTEM_DEF(item_cleanup) qdel(o) /proc/add_to_garbage(atom/a) - addToListNoDupe(item_cleanup_list, a) + addToListNoDupe(GLOB.item_cleanup_list, a) /proc/remove_from_garbage(atom/a) - item_cleanup_list -= a + GLOB.item_cleanup_list -= a if(SSitem_cleanup) SSitem_cleanup.items_to_clean_up -= a diff --git a/code/controllers/subsystem/machinery.dm b/code/controllers/subsystem/machinery.dm index 7f86689874ff..6a0f938475a1 100644 --- a/code/controllers/subsystem/machinery.dm +++ b/code/controllers/subsystem/machinery.dm @@ -1,8 +1,8 @@ -var/list/machines = list() -var/list/processing_machines = list() +GLOBAL_LIST_EMPTY(machines) +GLOBAL_LIST_EMPTY(processing_machines) -var/list/datum/powernet/powernets = list() //Holds all powernet datums in use or pooled -var/list/datum/powernet/powernets_by_name = list() //Holds all powernet datums in use or pooled +GLOBAL_LIST_EMPTY(powernets) //Holds all powernet datums in use or pooled +GLOBAL_LIST_EMPTY(powernets_by_name) //Holds all powernet datums in use or pooled SUBSYSTEM_DEF(machinery) @@ -19,12 +19,12 @@ SUBSYSTEM_DEF(machinery) return SS_INIT_SUCCESS /datum/controller/subsystem/machinery/stat_entry(msg) - msg = "M:[global.processing_machines.len]" + msg = "M:[GLOB.processing_machines.len]" return ..() /datum/controller/subsystem/machinery/fire(resumed = FALSE) if (!resumed) - currentrunmachines = processing_machines.Copy() + currentrunmachines = GLOB.processing_machines.Copy() while (currentrunmachines.len) var/obj/structure/machinery/M = currentrunmachines[currentrunmachines.len] diff --git a/code/controllers/subsystem/minimap.dm b/code/controllers/subsystem/minimap.dm index 6f5b9303a91f..64f4b92a1edd 100644 --- a/code/controllers/subsystem/minimap.dm +++ b/code/controllers/subsystem/minimap.dm @@ -256,8 +256,6 @@ SUBSYSTEM_DEF(minimaps) removal_cbs[target] = CALLBACK(src, PROC_REF(removeimage), blip, target) RegisterSignal(target, COMSIG_PARENT_QDELETING, PROC_REF(remove_marker)) - - /** * removes an image from raw tracked lists, invoked by callback */ @@ -322,7 +320,7 @@ SUBSYSTEM_DEF(minimaps) minimaps_by_z["[z_level]"].images_assoc["[flag]"] -= source /** - * Fetches a /atom/movable/screen/minimap instance or creates on if none exists + * Fetches a /atom/movable/screen/minimap instance or creates one if none exists * Note this does not destroy them when the map is unused, might be a potential thing to do? * Arguments: * * zlevel: zlevel to fetch map for @@ -338,6 +336,170 @@ SUBSYSTEM_DEF(minimaps) hashed_minimaps[hash] = map return map +/** + * Fetches the datum containing an announced flattend map png reference. + * + * Arguments: + * * faction: FACTION_MARINE or XENO_HIVE_NORMAL + */ +/proc/get_tacmap_data_png(faction) + var/list/map_list + + if(faction == FACTION_MARINE) + map_list = GLOB.uscm_flat_tacmap_data + else if(faction == XENO_HIVE_NORMAL) + map_list = GLOB.xeno_flat_tacmap_data + else + return null + + var/map_length = length(map_list) + + if(map_length == 0) + return null + + return map_list[map_length] + +/** + * Fetches the datum containing the latest unannounced flattend map png reference. + * + * Arguments: + * * faction: FACTION_MARINE or XENO_HIVE_NORMAL + */ +/proc/get_unannounced_tacmap_data_png(faction) + if(faction == FACTION_MARINE) + return GLOB.uscm_unannounced_map + else if(faction == XENO_HIVE_NORMAL) + return GLOB.xeno_unannounced_map + + return null + +/** + * Fetches the last set of svg coordinates for the tacmap drawing. + * + * Arguments: + * * faction: which faction get the map for: FACTION_MARINE or XENO_HIVE_NORMAL + */ +/proc/get_tacmap_data_svg(faction) + var/list/map_list + + if(faction == FACTION_MARINE) + map_list = GLOB.uscm_svg_tacmap_data + else if(faction == XENO_HIVE_NORMAL) + map_list = GLOB.xeno_svg_tacmap_data + else + return null + + var/map_length = length(map_list) + + if(map_length == 0) + return null + + return map_list[map_length] + +/** + * Re-sends relevant flattened tacmaps to a single client. + * + * Arguments: + * * user: The mob that is either an observer, marine, or xeno + */ +/proc/resend_current_map_png(mob/user) + if(!user.client) + return + + var/is_observer = user.faction == FACTION_NEUTRAL && isobserver(user) + if(is_observer || user.faction == FACTION_MARINE) + // Send marine maps + var/datum/flattened_tacmap/latest = get_tacmap_data_png(FACTION_MARINE) + if(latest) + SSassets.transport.send_assets(user.client, latest.asset_key) + var/datum/flattened_tacmap/unannounced = get_unannounced_tacmap_data_png(FACTION_MARINE) + if(unannounced && (!latest || latest.asset_key != unannounced.asset_key)) + SSassets.transport.send_assets(user.client, unannounced.asset_key) + + var/mob/living/carbon/xenomorph/xeno = user + if(is_observer || istype(xeno) && xeno.hivenumber == XENO_HIVE_NORMAL) + // Send xeno maps + var/datum/flattened_tacmap/latest = get_tacmap_data_png(XENO_HIVE_NORMAL) + if(latest) + SSassets.transport.send_assets(user.client, latest.asset_key) + var/datum/flattened_tacmap/unannounced = get_unannounced_tacmap_data_png(XENO_HIVE_NORMAL) + if(unannounced && (!latest || latest.asset_key != unannounced.asset_key)) + SSassets.transport.send_assets(user.client, unannounced.asset_key) + +/** + * Flattens the current map and then distributes it for the specified faction as an unannounced map. + * + * Arguments: + * * faction: Which faction to distribute the map to: FACTION_MARINE or XENO_HIVE_NORMAL + * Return: + * * Returns a boolean value, TRUE if the operation was successful, FALSE if it was not (on cooldown generally). + */ +/datum/tacmap/drawing/proc/distribute_current_map_png(faction) + if(faction == FACTION_MARINE) + if(!COOLDOWN_FINISHED(GLOB, uscm_flatten_map_icon_cooldown)) + return FALSE + COOLDOWN_START(GLOB, uscm_flatten_map_icon_cooldown, flatten_map_cooldown_time) + else if(faction == XENO_HIVE_NORMAL) + if(!COOLDOWN_FINISHED(GLOB, xeno_flatten_map_icon_cooldown)) + return FALSE + COOLDOWN_START(GLOB, xeno_flatten_map_icon_cooldown, flatten_map_cooldown_time) + else + return FALSE + + var/icon/flat_map = getFlatIcon(map_holder.map, appearance_flags = TRUE) + if(!flat_map) + to_chat(usr, SPAN_WARNING("A critical error has occurred! Contact a coder.")) // tf2heavy: "Oh, this is bad!" + return FALSE + + // Send to only relevant clients + var/list/faction_clients = list() + for(var/client/client as anything in GLOB.clients) + if(!client || !client.mob) + continue + var/mob/client_mob = client.mob + if(client_mob.faction == faction) + faction_clients += client + else if(client_mob.faction == FACTION_NEUTRAL && isobserver(client_mob)) + faction_clients += client + else if(isxeno(client_mob)) + var/mob/living/carbon/xenomorph/xeno = client_mob + if(xeno.hivenumber == faction) + faction_clients += client + + // This may be unnecessary to do this way if the asset url is always the same as the lookup key + var/flat_tacmap_key = icon2html(flat_map, faction_clients, keyonly = TRUE) + if(!flat_tacmap_key) + to_chat(usr, SPAN_WARNING("A critical error has occurred! Contact a coder.")) + return FALSE + var/flat_tacmap_png = SSassets.transport.get_asset_url(flat_tacmap_key) + var/datum/flattened_tacmap/new_flat = new(flat_tacmap_png, flat_tacmap_key) + + if(faction == FACTION_MARINE) + GLOB.uscm_unannounced_map = new_flat + else //if(faction == XENO_HIVE_NORMAL) + GLOB.xeno_unannounced_map = new_flat + + return TRUE + +/** + * Globally stores svg coords for a given faction. + * + * Arguments: + * * faction: which faction to save the data for: FACTION_MARINE or XENO_HIVE_NORMAL + * * svg_coords: an array of coordinates corresponding to an svg. + * * ckey: the ckey of the user who submitted this + */ +/datum/tacmap/drawing/proc/store_current_svg_coords(faction, svg_coords, ckey) + var/datum/svg_overlay/svg_store_overlay = new(svg_coords, ckey) + + if(faction == FACTION_MARINE) + GLOB.uscm_svg_tacmap_data += svg_store_overlay + else if(faction == XENO_HIVE_NORMAL) + GLOB.xeno_svg_tacmap_data += svg_store_overlay + else + qdel(svg_store_overlay) + debug_log("SVG coordinates for [faction] are not implemented!") + /datum/controller/subsystem/minimaps/proc/fetch_tacmap_datum(zlevel, flags) var/hash = "[zlevel]-[flags]" if(hashed_tacmaps[hash]) @@ -442,7 +604,7 @@ SUBSYSTEM_DEF(minimaps) marker_flags = MINIMAP_FLAG_USCM /datum/action/minimap/observer - minimap_flags = MINIMAP_FLAG_XENO|MINIMAP_FLAG_USCM|MINIMAP_FLAG_UPP|MINIMAP_FLAG_CLF|MINIMAP_FLAG_UPP + minimap_flags = MINIMAP_FLAG_ALL marker_flags = NONE hidden = TRUE @@ -452,17 +614,61 @@ SUBSYSTEM_DEF(minimaps) var/targeted_ztrait = ZTRAIT_GROUND var/atom/owner + /// tacmap holder for holding the minimap var/datum/tacmap_holder/map_holder +/datum/tacmap/drawing + /// A url that will point to the wiki map for the current map as a fall back image + var/static/wiki_map_fallback + + /// color selection for the tactical map canvas, defaults to black. + var/toolbar_color_selection = "black" + var/toolbar_updated_selection = "black" + + var/canvas_cooldown_time = 4 MINUTES + var/flatten_map_cooldown_time = 3 MINUTES + + /// boolean value to keep track if the canvas has been updated or not, the value is used in tgui state. + var/updated_canvas = FALSE + /// current flattend map + var/datum/flattened_tacmap/new_current_map + /// previous flattened map + var/datum/flattened_tacmap/old_map + /// current svg + var/datum/svg_overlay/current_svg + + var/action_queue_change = 0 + + /// The last time the map has been flattened - used as a key to trick react into updating the canvas + var/last_update_time = 0 + /// A temporary lock out time before we can open the new canvas tab to allow the tacmap time to fire + var/tacmap_ready_time = 0 + /datum/tacmap/New(atom/source, minimap_type) allowed_flags = minimap_type owner = source +/datum/tacmap/drawing/status_tab_view/New() + var/datum/tacmap/drawing/status_tab_view/uscm_tacmap + allowed_flags = MINIMAP_FLAG_USCM + owner = uscm_tacmap + +/datum/tacmap/drawing/status_tab_view/xeno/New() + var/datum/tacmap/drawing/status_tab_view/xeno/xeno_tacmap + allowed_flags = MINIMAP_FLAG_XENO + owner = xeno_tacmap + /datum/tacmap/Destroy() map_holder = null owner = null return ..() +/datum/tacmap/drawing/Destroy() + new_current_map = null + old_map = null + current_svg = null + return ..() + /datum/tacmap/tgui_interact(mob/user, datum/tgui/ui) if(!map_holder) var/level = SSmapping.levels_by_trait(targeted_ztrait) @@ -476,11 +682,216 @@ SUBSYSTEM_DEF(minimaps) ui = new(user, src, "TacticalMap") ui.open() +/datum/tacmap/drawing/tgui_interact(mob/user, datum/tgui/ui) + var/mob/living/carbon/xenomorph/xeno = user + var/is_xeno = istype(xeno) + var/faction = is_xeno ? xeno.hivenumber : user.faction + if(faction == FACTION_NEUTRAL && isobserver(user)) + faction = allowed_flags == MINIMAP_FLAG_XENO ? XENO_HIVE_NORMAL : FACTION_MARINE + + new_current_map = get_unannounced_tacmap_data_png(faction) + old_map = get_tacmap_data_png(faction) + current_svg = get_tacmap_data_svg(faction) + + var/use_live_map = faction == FACTION_MARINE && skillcheck(user, SKILL_LEADERSHIP, SKILL_LEAD_EXPERT) || is_xeno + + if(use_live_map && !map_holder) + var/level = SSmapping.levels_by_trait(targeted_ztrait) + if(!level[1]) + return + map_holder = SSminimaps.fetch_tacmap_datum(level[1], allowed_flags) + + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + if(!wiki_map_fallback) + var/wiki_url = CONFIG_GET(string/wikiurl) + var/obj/item/map/current_map/new_map = new + if(wiki_url && new_map.html_link) + wiki_map_fallback ="[wiki_url]/[new_map.html_link]" + else + debug_log("Failed to determine fallback wiki map! Attempted '[wiki_url]/[new_map.html_link]'") + qdel(new_map) + + // Ensure we actually have the map image sent + resend_current_map_png(user) + + if(use_live_map) + tacmap_ready_time = SSminimaps.next_fire + 2 SECONDS + addtimer(CALLBACK(src, PROC_REF(on_tacmap_fire), faction), SSminimaps.next_fire - world.time + 1 SECONDS) + user.client.register_map_obj(map_holder.map) + + ui = new(user, src, "TacticalMap") + ui.open() + +/datum/tacmap/drawing/ui_data(mob/user) + var/list/data = list() + + data["newCanvasFlatImage"] = new_current_map?.flat_tacmap + data["oldCanvasFlatImage"] = old_map?.flat_tacmap + data["svgData"] = current_svg?.svg_data + + data["actionQueueChange"] = action_queue_change + + data["toolbarColorSelection"] = toolbar_color_selection + data["toolbarUpdatedSelection"] = toolbar_updated_selection + + if(isxeno(user)) + data["canvasCooldown"] = max(GLOB.xeno_canvas_cooldown - world.time, 0) + else + data["canvasCooldown"] = max(GLOB.uscm_canvas_cooldown - world.time, 0) + + data["nextCanvasTime"] = canvas_cooldown_time + data["updatedCanvas"] = updated_canvas + + data["lastUpdateTime"] = last_update_time + data["tacmapReady"] = world.time > tacmap_ready_time + + return data + /datum/tacmap/ui_static_data(mob/user) var/list/data = list() - data["mapRef"] = map_holder.map_ref + data["mapRef"] = map_holder?.map_ref + data["canDraw"] = FALSE + data["canViewTacmap"] = TRUE + data["canViewCanvas"] = FALSE + data["isXeno"] = FALSE + return data +/datum/tacmap/drawing/ui_static_data(mob/user) + var/list/data = list() + + data["mapRef"] = map_holder?.map_ref + data["canDraw"] = FALSE + data["mapFallback"] = wiki_map_fallback + + var/mob/living/carbon/xenomorph/xeno = user + var/is_xeno = istype(xeno) + var/faction = is_xeno ? xeno.hivenumber : user.faction + + data["isXeno"] = is_xeno + data["canViewTacmap"] = is_xeno + data["canViewCanvas"] = faction == FACTION_MARINE || faction == XENO_HIVE_NORMAL + + if(faction == FACTION_MARINE && skillcheck(user, SKILL_LEADERSHIP, SKILL_LEAD_EXPERT) || faction == XENO_HIVE_NORMAL && isqueen(user)) + data["canDraw"] = TRUE + data["canViewTacmap"] = TRUE + + return data + +/datum/tacmap/drawing/status_tab_view/ui_static_data(mob/user) + var/list/data = list() + data["mapFallback"] = wiki_map_fallback + data["canDraw"] = FALSE + data["canViewTacmap"] = FALSE + data["canViewCanvas"] = TRUE + data["isXeno"] = FALSE + + return data + +/datum/tacmap/drawing/status_tab_view/xeno/ui_static_data(mob/user) + var/list/data = list() + data["mapFallback"] = wiki_map_fallback + data["canDraw"] = FALSE + data["canViewTacmap"] = FALSE + data["canViewCanvas"] = TRUE + data["isXeno"] = TRUE + + return data + +/datum/tacmap/drawing/ui_close(mob/user) + . = ..() + action_queue_change = 0 + updated_canvas = FALSE + toolbar_color_selection = "black" + toolbar_updated_selection = "black" + +/datum/tacmap/drawing/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + + var/mob/user = ui.user + var/mob/living/carbon/xenomorph/xeno = user + var/faction = istype(xeno) ? xeno.hivenumber : user.faction + if(faction == FACTION_NEUTRAL && isobserver(user)) + faction = allowed_flags == MINIMAP_FLAG_XENO ? XENO_HIVE_NORMAL : FACTION_MARINE + + switch (action) + if ("menuSelect") + if(params["selection"] != "new canvas") + if(updated_canvas) + updated_canvas = FALSE + toolbar_updated_selection = toolbar_color_selection // doing this if it == canvas can cause a latency issue with the stroke. + else + distribute_current_map_png(faction) + last_update_time = world.time + // An attempt to get the image to load on first try in the interface, but doesn't seem always reliable + + new_current_map = get_unannounced_tacmap_data_png(faction) + old_map = get_tacmap_data_png(faction) + current_svg = get_tacmap_data_svg(faction) + + if ("updateCanvas") + // forces state change, this will export the svg. + toolbar_updated_selection = "export" + updated_canvas = TRUE + action_queue_change += 1 + + if ("clearCanvas") + toolbar_updated_selection = "clear" + updated_canvas = FALSE + action_queue_change += 1 + + if ("undoChange") + toolbar_updated_selection = "undo" + updated_canvas = FALSE + action_queue_change += 1 + + if ("selectColor") + var/newColor = params["color"] + if(newColor) + toolbar_color_selection = newColor + toolbar_updated_selection = newColor + action_queue_change += 1 + + if ("onDraw") + updated_canvas = FALSE + + if ("selectAnnouncement") + if(!istype(params["image"], /list)) // potentially very serious? + return FALSE + + if(faction == FACTION_MARINE) + GLOB.uscm_flat_tacmap_data += new_current_map + else if(faction == XENO_HIVE_NORMAL) + GLOB.xeno_flat_tacmap_data += new_current_map + + store_current_svg_coords(faction, params["image"], user) + current_svg = get_tacmap_data_svg(faction) + old_map = get_tacmap_data_png(faction) + + if(faction == FACTION_MARINE) + COOLDOWN_START(GLOB, uscm_canvas_cooldown, canvas_cooldown_time) + var/mob/living/carbon/human/human_leader = user + for(var/datum/squad/current_squad in GLOB.RoleAuthority.squads) + current_squad.send_maptext("Tactical map update in progress...", "Tactical Map:") + human_leader.visible_message(SPAN_BOLDNOTICE("Tactical map update in progress...")) + playsound_client(human_leader.client, "sound/effects/sos-morse-code.ogg") + notify_ghosts(header = "Tactical Map", message = "The USCM tactical map has been updated.", ghost_sound = "sound/effects/sos-morse-code.ogg", notify_volume = 80, action = NOTIFY_USCM_TACMAP, enter_link = "uscm_tacmap=1", enter_text = "View", source = owner) + + else if(faction == XENO_HIVE_NORMAL) + var/mutable_appearance/appearance = mutable_appearance(icon('icons/mob/hud/actions_xeno.dmi'), "toggle_queen_zoom") + COOLDOWN_START(GLOB, xeno_canvas_cooldown, canvas_cooldown_time) + xeno_maptext("The Queen has updated your hive mind map", "You sense something unusual...", faction) + notify_ghosts(header = "Tactical Map", message = "The Xenomorph tactical map has been updated.", ghost_sound = "sound/voice/alien_distantroar_3.ogg", notify_volume = 50, action = NOTIFY_XENO_TACMAP, enter_link = "xeno_tacmap=1", enter_text = "View", source = user, alert_overlay = appearance) + + toolbar_updated_selection = toolbar_color_selection + message_admins("[key_name(user)] has updated the tactical map for [faction].") + updated_canvas = FALSE + + return TRUE + /datum/tacmap/ui_status(mob/user) if(!(isatom(owner))) return UI_INTERACTIVE @@ -493,7 +904,7 @@ SUBSYSTEM_DEF(minimaps) else return UI_CLOSE -/datum/tacmap/xeno/ui_status(mob/user) +/datum/tacmap/drawing/xeno/ui_status(mob/user) if(!isxeno(user)) return UI_CLOSE @@ -516,3 +927,71 @@ SUBSYSTEM_DEF(minimaps) /datum/tacmap_holder/Destroy() map = null return ..() + +/datum/flattened_tacmap + var/flat_tacmap + var/asset_key + var/time + +/datum/flattened_tacmap/New(flat_tacmap, asset_key) + src.flat_tacmap = flat_tacmap + src.asset_key = asset_key + src.time = time_stamp() + +/datum/svg_overlay + var/svg_data + var/ckey + var/name + var/time + +/datum/svg_overlay/New(svg_data, mob/user) + src.svg_data = svg_data + src.ckey = user?.persistent_ckey + src.name = user?.real_name + src.time = time_stamp() + +/// Callback when timer indicates the tacmap is flattenable now +/datum/tacmap/drawing/proc/on_tacmap_fire(faction) + distribute_current_map_png(faction) + last_update_time = world.time + +/// Gets the MINIMAP_FLAG for the provided faction or hivenumber if one exists +/proc/get_minimap_flag_for_faction(faction) + switch(faction) + if(XENO_HIVE_NORMAL) + return MINIMAP_FLAG_XENO + if(FACTION_MARINE) + return MINIMAP_FLAG_USCM + if(FACTION_UPP) + return MINIMAP_FLAG_UPP + if(FACTION_WY) + return MINIMAP_FLAG_USCM + if(FACTION_CLF) + return MINIMAP_FLAG_CLF + if(FACTION_PMC) + return MINIMAP_FLAG_PMC + if(FACTION_YAUTJA) + return MINIMAP_FLAG_YAUTJA + if(XENO_HIVE_CORRUPTED) + return MINIMAP_FLAG_XENO_CORRUPTED + if(XENO_HIVE_ALPHA) + return MINIMAP_FLAG_XENO_ALPHA + if(XENO_HIVE_BRAVO) + return MINIMAP_FLAG_XENO_BRAVO + if(XENO_HIVE_CHARLIE) + return MINIMAP_FLAG_XENO_CHARLIE + if(XENO_HIVE_DELTA) + return MINIMAP_FLAG_XENO_DELTA + if(XENO_HIVE_FERAL) + return MINIMAP_FLAG_XENO_FERAL + if(XENO_HIVE_TAMED) + return MINIMAP_FLAG_XENO_TAMED + if(XENO_HIVE_MUTATED) + return MINIMAP_FLAG_XENO_MUTATED + if(XENO_HIVE_FORSAKEN) + return MINIMAP_FLAG_XENO_FORSAKEN + if(XENO_HIVE_YAUTJA) + return MINIMAP_FLAG_YAUTJA + if(XENO_HIVE_RENEGADE) + return MINIMAP_FLAG_XENO_RENEGADE + return 0 diff --git a/code/controllers/subsystem/nanoui.dm b/code/controllers/subsystem/nanoui.dm index 1f33227a7fee..85ad0d32aaf4 100644 --- a/code/controllers/subsystem/nanoui.dm +++ b/code/controllers/subsystem/nanoui.dm @@ -5,6 +5,12 @@ SUBSYSTEM_DEF(nano) priority = SS_PRIORITY_NANOUI runlevels = RUNLEVELS_DEFAULT|RUNLEVEL_LOBBY var/list/currentrun = list() + var/datum/nanomanager/nanomanager + +/datum/controller/subsystem/nano/New() + . = ..() + + nanomanager = new() /datum/controller/subsystem/nano/stat_entry(msg) msg = "P:[nanomanager.processing_uis.len]" diff --git a/code/controllers/subsystem/power.dm b/code/controllers/subsystem/power.dm index 16f4f2ab6127..9908a60420b2 100644 --- a/code/controllers/subsystem/power.dm +++ b/code/controllers/subsystem/power.dm @@ -1,4 +1,4 @@ -var/list/power_machines = list() +GLOBAL_LIST_EMPTY(power_machines) SUBSYSTEM_DEF(power) name = "Power" @@ -12,7 +12,7 @@ SUBSYSTEM_DEF(power) var/list/currentrun_areas = list() /datum/controller/subsystem/power/stat_entry(msg) - msg = "PN:[powernets.len]|PM:[power_machines.len]|A:[active_areas.len]" + msg = "PN:[GLOB.powernets.len]|PM:[GLOB.power_machines.len]|A:[GLOB.active_areas.len]" return ..() @@ -23,9 +23,9 @@ SUBSYSTEM_DEF(power) /datum/controller/subsystem/power/fire(resumed = FALSE) if (!resumed) - currentrun_powerents = global.powernets.Copy() - currentrun_areas = active_areas.Copy() - currentrun_power_machines = global.power_machines.Copy() + currentrun_powerents = GLOB.powernets.Copy() + currentrun_areas = GLOB.active_areas.Copy() + currentrun_power_machines = GLOB.power_machines.Copy() // First we reset the powernets. // This is done first because we want the power machinery to have acted last on the powernet between intervals. @@ -49,7 +49,7 @@ SUBSYSTEM_DEF(power) var/obj/structure/machinery/M = X if (M.process() == PROCESS_KILL) //M.inMachineList = FALSE - power_machines.Remove(M) + GLOB.power_machines.Remove(M) continue if (MC_TICK_CHECK) diff --git a/code/controllers/subsystem/profiler.dm b/code/controllers/subsystem/profiler.dm new file mode 100644 index 000000000000..f9ba79046c2c --- /dev/null +++ b/code/controllers/subsystem/profiler.dm @@ -0,0 +1,74 @@ +#define PROFILER_FILENAME "profiler.json" +#define SENDMAPS_FILENAME "sendmaps.json" + +SUBSYSTEM_DEF(profiler) + name = "Profiler" + init_order = SS_INIT_PROFILER + runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY + wait = 300 SECONDS + var/fetch_cost = 0 + var/write_cost = 0 + +/datum/controller/subsystem/profiler/stat_entry(msg) + msg += "F:[round(fetch_cost,1)]ms" + msg += "|W:[round(write_cost,1)]ms" + return msg + +/datum/controller/subsystem/profiler/Initialize() + if(CONFIG_GET(flag/auto_profile)) + StartProfiling() + else + StopProfiling() //Stop the early start profiler + return SS_INIT_SUCCESS + +/datum/controller/subsystem/profiler/OnConfigLoad() + if(CONFIG_GET(flag/auto_profile)) + StartProfiling() + can_fire = TRUE + else + StopProfiling() + can_fire = FALSE + +/datum/controller/subsystem/profiler/fire() + DumpFile() + +/datum/controller/subsystem/profiler/Shutdown() + if(CONFIG_GET(flag/auto_profile)) + DumpFile(allow_yield = FALSE) + world.Profile(PROFILE_CLEAR, type = "sendmaps") + return ..() + +/datum/controller/subsystem/profiler/proc/StartProfiling() + world.Profile(PROFILE_START) + world.Profile(PROFILE_START, type = "sendmaps") + +/datum/controller/subsystem/profiler/proc/StopProfiling() + world.Profile(PROFILE_STOP) + world.Profile(PROFILE_STOP, type = "sendmaps") + +/datum/controller/subsystem/profiler/proc/DumpFile(allow_yield = TRUE) + var/timer = TICK_USAGE_REAL + var/current_profile_data = world.Profile(PROFILE_REFRESH, format = "json") + var/current_sendmaps_data = world.Profile(PROFILE_REFRESH, type = "sendmaps", format="json") + fetch_cost = MC_AVERAGE(fetch_cost, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) + if(allow_yield) + CHECK_TICK + + if(!length(current_profile_data)) //Would be nice to have explicit proc to check this + stack_trace("Warning, profiling stopped manually before dump.") + var/prof_file = file("[GLOB.log_directory]/[PROFILER_FILENAME]") + if(fexists(prof_file)) + fdel(prof_file) + if(!length(current_sendmaps_data)) //Would be nice to have explicit proc to check this + stack_trace("Warning, sendmaps profiling stopped manually before dump.") + var/sendmaps_file = file("[GLOB.log_directory]/[SENDMAPS_FILENAME]") + if(fexists(sendmaps_file)) + fdel(sendmaps_file) + + timer = TICK_USAGE_REAL + WRITE_FILE(prof_file, current_profile_data) + WRITE_FILE(sendmaps_file, current_sendmaps_data) + write_cost = MC_AVERAGE(write_cost, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) + +#undef PROFILER_FILENAME +#undef SENDMAPS_FILENAME diff --git a/code/controllers/subsystem/reagents.dm b/code/controllers/subsystem/reagents.dm index 5a310801b191..187479509385 100644 --- a/code/controllers/subsystem/reagents.dm +++ b/code/controllers/subsystem/reagents.dm @@ -17,33 +17,33 @@ SUBSYSTEM_DEF(reagents) /datum/controller/subsystem/reagents/proc/prepare_properties() //Chemical Properties - Initialises all /datum/chem_property into a list indexed by property name var/paths = typesof(/datum/chem_property) - chemical_properties_list = list() + GLOB.chemical_properties_list = list() //Some filters - chemical_properties_list["negative"] = list() - chemical_properties_list["neutral"] = list() - chemical_properties_list["positive"] = list() - chemical_properties_list["rare"] = list() + GLOB.chemical_properties_list["negative"] = list() + GLOB.chemical_properties_list["neutral"] = list() + GLOB.chemical_properties_list["positive"] = list() + GLOB.chemical_properties_list["rare"] = list() //Save for(var/path in paths) var/datum/chem_property/prop = new path() if(!prop.name) continue - chemical_properties_list[prop.name] = prop + GLOB.chemical_properties_list[prop.name] = prop if(prop.starter) //Add a separate instance to the chemical property database var/datum/chem_property/chem = new path() chem.level = 0 - chemical_data.research_property_data += chem + GLOB.chemical_data.research_property_data += chem if(prop.rarity > PROPERTY_DISABLED) //Filters for the generator picking properties if(prop.rarity == PROPERTY_RARE || prop.rarity == PROPERTY_LEGENDARY) - chemical_properties_list["rare"][prop.name] = prop + GLOB.chemical_properties_list["rare"][prop.name] = prop else if(isNegativeProperty(prop)) - chemical_properties_list["negative"][prop.name] = prop + GLOB.chemical_properties_list["negative"][prop.name] = prop else if(isNeutralProperty(prop)) - chemical_properties_list["neutral"][prop.name] = prop + GLOB.chemical_properties_list["neutral"][prop.name] = prop else if(isPositiveProperty(prop)) - chemical_properties_list["positive"][prop.name] = prop + GLOB.chemical_properties_list["positive"][prop.name] = prop /datum/controller/subsystem/reagents/proc/prepare_reagents() //I dislike having these here but map-objects are initialised before world/New() is called. >_> @@ -51,11 +51,11 @@ SUBSYSTEM_DEF(reagents) //Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id //Generated chemicals should be initialized last, hence the substract then readd. var/list/paths = subtypesof(/datum/reagent) - typesof(/datum/reagent/generated) - subtypesof(/datum/reagent/generated) + subtypesof(/datum/reagent/generated) - chemical_reagents_list = list() + GLOB.chemical_reagents_list = list() for(var/path in paths) var/datum/reagent/chem = new path() chem.save_chemclass() - chemical_reagents_list[chem.id] = chem + GLOB.chemical_reagents_list[chem.id] = chem //Chemical Reactions - Initialises all /datum/chemical_reaction into a list // It is filtered into multiple lists within a list. @@ -63,11 +63,11 @@ SUBSYSTEM_DEF(reagents) // chemical_reaction_list["phoron"] is a list of all reactions relating to phoron var/list/regular_paths = subtypesof(/datum/chemical_reaction) - typesof(/datum/chemical_reaction/generated) var/list/generated_paths = subtypesof(/datum/chemical_reaction/generated) //Generated chemicals should be initialized last - chemical_reactions_filtered_list = list() - chemical_reactions_list = list() + GLOB.chemical_reactions_filtered_list = list() + GLOB.chemical_reactions_list = list() for(paths in list(regular_paths, generated_paths)) for(var/path in paths) var/datum/chemical_reaction/react = new path() - chemical_reactions_list[react.id] = react + GLOB.chemical_reactions_list[react.id] = react react.add_to_filtered_list() diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index 972f61aa530f..2da87df90995 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -1,11 +1,11 @@ -var/global/datum/controller/shuttle_controller/shuttle_controller - SUBSYSTEM_DEF(oldshuttle) name = "Old Shuttle" wait = 5.5 SECONDS init_order = SS_INIT_SHUTTLE priority = SS_PRIORITY_SHUTTLE + var/datum/controller/shuttle_controller/shuttle_controller + /datum/controller/subsystem/oldshuttle/Initialize() if(GLOB.perf_flags & PERF_TOGGLE_SHUTTLES) can_fire = FALSE diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 88627669aa3b..0153f03565f6 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -97,7 +97,7 @@ SUBSYSTEM_DEF(ticker) if(!roundend_check_paused && mode.check_finished(force_ending) || force_ending) current_state = GAME_STATE_FINISHED - ooc_allowed = TRUE + GLOB.ooc_allowed = TRUE mode.declare_completion(force_ending) REDIS_PUBLISH("byond.round", "type" = "round-complete") flash_clients() @@ -135,8 +135,8 @@ SUBSYSTEM_DEF(ticker) REDIS_PUBLISH("byond.round", "type" = "round-start") for(var/client/C in GLOB.admins) - remove_verb(C, roundstart_mod_verbs) - admin_verbs_minor_event -= roundstart_mod_verbs + remove_verb(C, GLOB.roundstart_mod_verbs) + GLOB.admin_verbs_minor_event -= GLOB.roundstart_mod_verbs return TRUE @@ -173,14 +173,14 @@ SUBSYSTEM_DEF(ticker) if(!mode.can_start(bypass_checks)) to_chat(world, "Reverting to pre-game lobby.") QDEL_NULL(mode) - RoleAuthority.reset_roles() + GLOB.RoleAuthority.reset_roles() return FALSE CHECK_TICK if(!mode.pre_setup() && !bypass_checks) QDEL_NULL(mode) to_chat(world, "Error in pre-setup for [GLOB.master_mode]. Reverting to pre-game lobby.") - RoleAuthority.reset_roles() + GLOB.RoleAuthority.reset_roles() return FALSE CHECK_TICK @@ -194,7 +194,7 @@ SUBSYSTEM_DEF(ticker) if(CONFIG_GET(flag/autooocmute)) - ooc_allowed = FALSE + GLOB.ooc_allowed = FALSE round_start_time = world.time @@ -213,7 +213,7 @@ SUBSYSTEM_DEF(ticker) var/roles_to_roll = null if(length(mode.roles_to_roll)) roles_to_roll = mode.roles_to_roll - RoleAuthority.setup_candidates_and_roles(roles_to_roll) //Distribute jobs + GLOB.RoleAuthority.setup_candidates_and_roles(roles_to_roll) //Distribute jobs if(mode.flags_round_type & MODE_NEW_SPAWN) create_characters() // Create and equip characters else @@ -235,7 +235,7 @@ SUBSYSTEM_DEF(ticker) setup_economy() - shuttle_controller?.setup_shuttle_docks() + SSoldshuttle.shuttle_controller?.setup_shuttle_docks() PostSetup() return TRUE @@ -251,15 +251,15 @@ SUBSYSTEM_DEF(ticker) // Switch back to default automatically save_mode(CONFIG_GET(string/gamemode_default)) - if(round_statistics) - to_chat_spaced(world, html = FONT_SIZE_BIG(SPAN_ROLE_BODY("Welcome to [round_statistics.round_name]"))) + if(GLOB.round_statistics) + to_chat_spaced(world, html = FONT_SIZE_BIG(SPAN_ROLE_BODY("Welcome to [GLOB.round_statistics.round_name]"))) - supply_controller.process() //Start the supply shuttle regenerating points -- TLE + GLOB.supply_controller.process() //Start the supply shuttle regenerating points -- TLE for(var/i in GLOB.closet_list) //Set up special equipment for lockers and vendors, depending on gamemode var/obj/structure/closet/C = i INVOKE_ASYNC(C, TYPE_PROC_REF(/obj/structure/closet, select_gamemode_equipment), mode.type) - for(var/obj/structure/machinery/vending/V in machines) + for(var/obj/structure/machinery/vending/V in GLOB.machines) INVOKE_ASYNC(V, TYPE_PROC_REF(/obj/structure/machinery/vending, select_gamemode_equipment), mode.type) SEND_GLOBAL_SIGNAL(COMSIG_GLOB_POST_SETUP) @@ -376,7 +376,7 @@ SUBSYSTEM_DEF(ticker) world.Reboot(TRUE) /datum/controller/subsystem/ticker/proc/create_characters() - if(!RoleAuthority) + if(!GLOB.RoleAuthority) return for(var/mob/new_player/player in GLOB.player_list) @@ -386,7 +386,7 @@ SUBSYSTEM_DEF(ticker) INVOKE_ASYNC(src, PROC_REF(spawn_and_equip_char), player) /datum/controller/subsystem/ticker/proc/spawn_and_equip_char(mob/new_player/player) - var/datum/job/J = RoleAuthority.roles_for_mode[player.job] + var/datum/job/J = GLOB.RoleAuthority.roles_for_mode[player.job] if(J.job_options && player?.client?.prefs?.pref_special_job_options[J.title]) J.handle_job_options(player.client.prefs.pref_special_job_options[J.title]) if(J.handle_spawn_and_equip) @@ -424,7 +424,7 @@ SUBSYSTEM_DEF(ticker) if(player.job == JOB_CO) captainless = FALSE if(player.job) - RoleAuthority.equip_role(player, RoleAuthority.roles_by_name[player.job], late_join = FALSE) + GLOB.RoleAuthority.equip_role(player, GLOB.RoleAuthority.roles_by_name[player.job], late_join = FALSE) EquipCustomItems(player) if(player.client) var/client/C = player.client diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index a56e10636a1e..79bd10c65736 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -276,7 +276,8 @@ SUBSYSTEM_DEF(vote) var/datum/game_mode/M = mode_type if(initial(M.config_tag)) var/vote_cycle_met = !initial(M.vote_cycle) || (text2num(SSperf_logging?.round?.id) % initial(M.vote_cycle) == 0) - if(initial(M.votable) && vote_cycle_met) + var/min_players_met = length(GLOB.clients) >= M.required_players + if(initial(M.votable) && vote_cycle_met && min_players_met) choices += initial(M.config_tag) if("groundmap") question = "Ground map vote" diff --git a/code/controllers/subsystem/weather.dm b/code/controllers/subsystem/weather.dm index 325c45fe2300..a3fdfe509a96 100644 --- a/code/controllers/subsystem/weather.dm +++ b/code/controllers/subsystem/weather.dm @@ -1,4 +1,4 @@ -var/list/weather_notify_objects = list() +GLOBAL_LIST_EMPTY(weather_notify_objects) SUBSYSTEM_DEF(weather) name = "Weather" @@ -46,7 +46,7 @@ SUBSYSTEM_DEF(weather) /datum/controller/subsystem/weather/proc/setup_weather_areas() weather_areas = list() - for(var/area/A in all_areas) + for(var/area/A in GLOB.all_areas) if(A.weather_enabled && map_holder.should_affect_area(A)) weather_areas += A diff --git a/code/datums/ASRS.dm b/code/datums/ASRS.dm index 86a7363f07ea..73b0f4e1c6a9 100644 --- a/code/datums/ASRS.dm +++ b/code/datums/ASRS.dm @@ -132,3 +132,8 @@ buyable = 0 group = "ASRS" cost = ASRS_VERY_LOW_WEIGHT + +/datum/supply_packs/ingredient/asrs + buyable = 0 + group = "ASRS" + cost = ASRS_LOW_WEIGHT diff --git a/code/datums/_atmos_setup.dm b/code/datums/_atmos_setup.dm index be4dc62faeff..3075e98ac464 100644 --- a/code/datums/_atmos_setup.dm +++ b/code/datums/_atmos_setup.dm @@ -14,18 +14,18 @@ #define PIPE_COLOR_YELLOW "#ffcc00" #define PIPE_COLOR_PURPLE "#5c1ec0" -var/global/list/pipe_colors = list("grey" = PIPE_COLOR_GREY, "red" = PIPE_COLOR_RED, "blue" = PIPE_COLOR_BLUE, "cyan" = PIPE_COLOR_CYAN, "green" = PIPE_COLOR_GREEN, "yellow" = PIPE_COLOR_YELLOW, "purple" = PIPE_COLOR_PURPLE) +GLOBAL_LIST_INIT(pipe_colors, list("grey" = PIPE_COLOR_GREY, "red" = PIPE_COLOR_RED, "blue" = PIPE_COLOR_BLUE, "cyan" = PIPE_COLOR_CYAN, "green" = PIPE_COLOR_GREEN, "yellow" = PIPE_COLOR_YELLOW, "purple" = PIPE_COLOR_PURPLE)) /proc/pipe_color_lookup(color) - for(var/C in pipe_colors) - if(color == pipe_colors[C]) + for(var/C in GLOB.pipe_colors) + if(color == GLOB.pipe_colors[C]) return "[C]" /proc/pipe_color_check(color) if(!color) return 1 - for(var/C in pipe_colors) - if(color == pipe_colors[C]) + for(var/C in GLOB.pipe_colors) + if(color == GLOB.pipe_colors[C]) return 1 return 0 @@ -89,10 +89,10 @@ var/global/list/pipe_colors = list("grey" = PIPE_COLOR_GREY, "red" = PIPE_COLOR_ var/image/I = image('icons/obj/pipes/pipes.dmi', icon_state = state) pipe_icons[cache_name] = I - for(var/pipe_color in pipe_colors) + for(var/pipe_color in GLOB.pipe_colors) I = image('icons/obj/pipes/pipes.dmi', icon_state = state) - I.color = pipe_colors[pipe_color] - pipe_icons[state + "[pipe_colors[pipe_color]]"] = I + I.color = GLOB.pipe_colors[pipe_color] + pipe_icons[state + "[GLOB.pipe_colors[pipe_color]]"] = I pipe = new ('icons/obj/pipes/heat.dmi') for(var/state in pipe.IconStates()) @@ -122,10 +122,10 @@ var/global/list/pipe_colors = list("grey" = PIPE_COLOR_GREY, "red" = PIPE_COLOR_ if(findtext(state, "core") || findtext(state, "4way")) var/image/I = image('icons/obj/pipes/manifold.dmi', icon_state = state) manifold_icons[state] = I - for(var/pipe_color in pipe_colors) + for(var/pipe_color in GLOB.pipe_colors) I = image('icons/obj/pipes/manifold.dmi', icon_state = state) - I.color = pipe_colors[pipe_color] - manifold_icons[state + pipe_colors[pipe_color]] = I + I.color = GLOB.pipe_colors[pipe_color] + manifold_icons[state + GLOB.pipe_colors[pipe_color]] = I /datum/pipe_icon_manager/proc/gen_device_icons() if(!device_icons) @@ -170,13 +170,13 @@ var/global/list/pipe_colors = list("grey" = PIPE_COLOR_GREY, "red" = PIPE_COLOR_ var/cache_name = state - for(var/D in cardinal) + for(var/D in GLOB.cardinals) var/image/I = image('icons/obj/pipes/pipe_underlays.dmi', icon_state = state, dir = D) underlays[cache_name + "[D]"] = I - for(var/pipe_color in pipe_colors) + for(var/pipe_color in GLOB.pipe_colors) I = image('icons/obj/pipes/pipe_underlays.dmi', icon_state = state, dir = D) - I.color = pipe_colors[pipe_color] - underlays[state + "[D]" + "[pipe_colors[pipe_color]]"] = I + I.color = GLOB.pipe_colors[pipe_color] + underlays[state + "[D]" + "[GLOB.pipe_colors[pipe_color]]"] = I /* Leaving the old icon manager code commented out for now, as we may want to rewrite the new code to cleanly @@ -202,7 +202,7 @@ var/global/list/pipe_colors = list("grey" = PIPE_COLOR_GREY, "red" = PIPE_COLOR_ if(state == "") continue - for(var/D in cardinal) + for(var/D in GLOB.cardinals) var/image/I = image('icons/atmos/pipe_underlays.dmi', icon_state = state, dir = D) switch(state) if("intact") diff --git a/code/datums/_ndatabase/code/interfaces/connection_settings.dm b/code/datums/_ndatabase/code/interfaces/connection_settings.dm index 4092ee712ba9..0c990b2b9cbc 100644 --- a/code/datums/_ndatabase/code/interfaces/connection_settings.dm +++ b/code/datums/_ndatabase/code/interfaces/connection_settings.dm @@ -33,5 +33,3 @@ if(!typestr) typestr = /datum/db/connection_settings/native return new typestr(config) - -var/global/datum/db/connection_settings/connection_settings diff --git a/code/datums/_ndatabase/subsystems/database_query_manager.dm b/code/datums/_ndatabase/subsystems/database_query_manager.dm index 7eef5842e2dd..596d55121920 100644 --- a/code/datums/_ndatabase/subsystems/database_query_manager.dm +++ b/code/datums/_ndatabase/subsystems/database_query_manager.dm @@ -19,8 +19,7 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. -var/datum/controller/subsystem/database_query_manager/SSdatabase - +GLOBAL_REAL(SSdatabase, /datum/controller/subsystem/database_query_manager) /datum/controller/subsystem/database_query_manager name = "Database QM" wait = 1 diff --git a/code/datums/_ndatabase/subsystems/entity_manager.dm b/code/datums/_ndatabase/subsystems/entity_manager.dm index 667f2a855563..833bc6926e09 100644 --- a/code/datums/_ndatabase/subsystems/entity_manager.dm +++ b/code/datums/_ndatabase/subsystems/entity_manager.dm @@ -19,7 +19,7 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. -var/datum/controller/subsystem/entity_manager/SSentity_manager +GLOBAL_REAL(SSentity_manager, /datum/controller/subsystem/entity_manager) /datum/controller/subsystem/entity_manager name = "Entity Manager" diff --git a/code/datums/agents/tools/tracker.dm b/code/datums/agents/tools/tracker.dm index 1d6d6d4801b4..2f3063afb78c 100644 --- a/code/datums/agents/tools/tracker.dm +++ b/code/datums/agents/tools/tracker.dm @@ -12,7 +12,7 @@ overlays.Cut() if(active && tracked_object) - overlays += icon(icon, "+tracker_arrow", get_dir(src, tracked_object)) + overlays += icon(icon, "+tracker_arrow", Get_Compass_Dir(src, tracked_object)) /obj/item/device/tracker/attack_self(mob/user) if(!skillcheckexplicit(user, SKILL_ANTAG, SKILL_ANTAG_AGENT)) @@ -48,12 +48,12 @@ return ..() /obj/item/device/tracker/proc/select_object(mob/user) - if(!LAZYLEN(objects_of_interest)) + if(!LAZYLEN(GLOB.objects_of_interest)) to_chat(user, SPAN_WARNING("There are nothing of interest to track.")) return var/list/object_choices = list() - for(var/obj/O in objects_of_interest) + for(var/obj/O in GLOB.objects_of_interest) var/z_level_to_compare_from = O.z if(istype(O.loc, /obj/structure/surface)) z_level_to_compare_from = O.loc.z diff --git a/code/datums/ammo/ammo.dm b/code/datums/ammo/ammo.dm index 9faaf299669d..06c116d3758e 100644 --- a/code/datums/ammo/ammo.dm +++ b/code/datums/ammo/ammo.dm @@ -164,7 +164,8 @@ /datum/ammo/proc/knockback_effects(mob/living/living_mob, obj/projectile/fired_projectile) if(iscarbonsizexeno(living_mob)) var/mob/living/carbon/xenomorph/target = living_mob - target.apply_effect(0.7, WEAKEN) // 0.9 seconds of stun, per agreement from Balance Team when switched from MC stuns to exact stuns + target.Stun(0.7) // Previous comment said they believed 0.7 was 0.9s and that the balance team approved this. Geez... + target.KnockDown(0.7) target.apply_effect(1, SUPERSLOW) target.apply_effect(2, SLOW) to_chat(target, SPAN_XENODANGER("You are shaken by the sudden impact!")) diff --git a/code/datums/ammo/bullet/rifle.dm b/code/datums/ammo/bullet/rifle.dm index b6085572e3b9..0be6f1db8ff4 100644 --- a/code/datums/ammo/bullet/rifle.dm +++ b/code/datums/ammo/bullet/rifle.dm @@ -175,7 +175,8 @@ if(iscarbonsizexeno(living_mob)) var/mob/living/carbon/xenomorph/target = living_mob to_chat(target, SPAN_XENODANGER("You are shaken and slowed by the sudden impact!")) - target.apply_effect(0.5, WEAKEN) + target.KnockDown(0.5) // purely for visual effect, noone actually cares + target.Stun(0.5) target.apply_effect(2, SUPERSLOW) target.apply_effect(5, SLOW) else diff --git a/code/datums/ammo/bullet/shotgun.dm b/code/datums/ammo/bullet/shotgun.dm index 77e1e6401472..96ac4cb6ba04 100644 --- a/code/datums/ammo/bullet/shotgun.dm +++ b/code/datums/ammo/bullet/shotgun.dm @@ -25,7 +25,8 @@ if(iscarbonsizexeno(living_mob)) var/mob/living/carbon/xenomorph/target = living_mob to_chat(target, SPAN_XENODANGER("You are shaken and slowed by the sudden impact!")) - target.apply_effect(0.5, WEAKEN) + target.KnockDown(0.5) // If you ask me the KD should be left out, but players like their visual cues + target.Stun(0.5) target.apply_effect(1, SUPERSLOW) target.apply_effect(3, SLOW) else @@ -249,7 +250,8 @@ if(iscarbonsizexeno(living_mob)) var/mob/living/carbon/xenomorph/target = living_mob to_chat(target, SPAN_XENODANGER("You are shaken and slowed by the sudden impact!")) - target.apply_effect(0.5, WEAKEN) + target.KnockDown(0.5) // If you ask me the KD should be left out, but players like their visual cues + target.Stun(0.5) target.apply_effect(2, SUPERSLOW) target.apply_effect(5, SLOW) else @@ -338,7 +340,8 @@ return shake_camera(M, 3, 4) - M.apply_effect(2, WEAKEN) + M.KnockDown(2) // If you ask me the KD should be left out, but players like their visual cues + M.Stun(2) M.apply_effect(4, SLOW) if(iscarbonsizexeno(M)) to_chat(M, SPAN_XENODANGER("The impact knocks you off your feet!")) @@ -351,7 +354,8 @@ if(iscarbonsizexeno(living_mob)) var/mob/living/carbon/xenomorph/target = living_mob to_chat(target, SPAN_XENODANGER("You are shaken and slowed by the sudden impact!")) - target.apply_effect(0.5, WEAKEN) + target.KnockDown(0.5) // If you ask me the KD should be left out, but players like their visual cues + target.Stun(0.5) target.apply_effect(2, SUPERSLOW) target.apply_effect(5, SLOW) else diff --git a/code/datums/ammo/energy.dm b/code/datums/ammo/energy.dm index 01c69ffa0015..27d2b7d4e0c5 100644 --- a/code/datums/ammo/energy.dm +++ b/code/datums/ammo/energy.dm @@ -103,8 +103,8 @@ icon_state = "shrapnel_plasma" damage_type = BURN -/datum/ammo/bullet/shrapnel/plasma/on_hit_mob(mob/hit_mob, obj/projectile/hit_projectile) - hit_mob.apply_effect(2, WEAKEN) +/datum/ammo/bullet/shrapnel/plasma/on_hit_mob(mob/living/hit_mob, obj/projectile/hit_projectile) + hit_mob.Stun(2) /datum/ammo/energy/yautja/caster name = "root caster bolt" @@ -141,12 +141,8 @@ log_attack("[key_name(C)] was stunned by a high power stun bolt from [key_name(P.firer)] at [get_area(P)]") if(ishuman(C)) - var/mob/living/carbon/human/H = C stun_time++ - H.apply_effect(stun_time, WEAKEN) - else - M.apply_effect(stun_time, WEAKEN) - + C.apply_effect(stun_time, WEAKEN) C.apply_effect(stun_time, STUN) ..() @@ -217,12 +213,7 @@ continue to_chat(M, SPAN_DANGER("A powerful electric shock ripples through your body, freezing you in place!")) M.apply_effect(stun_time, STUN) - - if (ishuman(M)) - var/mob/living/carbon/human/H = M - H.apply_effect(stun_time, WEAKEN) - else - M.apply_effect(stun_time, WEAKEN) + M.apply_effect(stun_time, WEAKEN) /datum/ammo/energy/yautja/rifle/bolt name = "plasma rifle bolt" diff --git a/code/datums/ammo/misc.dm b/code/datums/ammo/misc.dm index bdb284753dc4..607a6e517a7c 100644 --- a/code/datums/ammo/misc.dm +++ b/code/datums/ammo/misc.dm @@ -190,8 +190,8 @@ if(P.contents.len == 1) for(var/obj/item/reagent_container/food/drinks/cans/souto/S in P.contents) M.put_in_active_hand(S) - for(var/mob/O in viewers(world_view_size, P)) //find all people in view. - O.show_message(SPAN_DANGER("[M] catches the [S]!"), SHOW_MESSAGE_VISIBLE) //Tell them the can was caught. + for(var/mob/O in viewers(GLOB.world_view_size, P)) //find all people in view. + O.show_message(SPAN_DANGER("[M] catches [S]!"), SHOW_MESSAGE_VISIBLE) //Tell them the can was caught. return //Can was caught. if(ishuman(M)) var/mob/living/carbon/human/H = M diff --git a/code/datums/ammo/rocket.dm b/code/datums/ammo/rocket.dm index 52914f745110..66a9f65bdcdd 100644 --- a/code/datums/ammo/rocket.dm +++ b/code/datums/ammo/rocket.dm @@ -65,7 +65,6 @@ /datum/ammo/rocket/ap/on_hit_mob(mob/M, obj/projectile/P) var/turf/T = get_turf(M) M.ex_act(150, P.dir, P.weapon_cause_data, 100) - M.apply_effect(2, WEAKEN) M.apply_effect(2, PARALYZE) if(ishuman_strict(M)) // No yautya or synths. Makes humans gib on direct hit. M.ex_act(300, P.dir, P.weapon_cause_data, 100) @@ -84,7 +83,6 @@ var/hit_something = 0 for(var/mob/M in T) M.ex_act(150, P.dir, P.weapon_cause_data, 100) - M.apply_effect(4, WEAKEN) M.apply_effect(4, PARALYZE) hit_something = 1 continue diff --git a/code/datums/ammo/xeno.dm b/code/datums/ammo/xeno.dm index 8e20a1ccb38c..654ab88c7abc 100644 --- a/code/datums/ammo/xeno.dm +++ b/code/datums/ammo/xeno.dm @@ -49,8 +49,10 @@ if(!isxeno(M)) if(insta_neuro) - M.adjust_effect(1 * power, WEAKEN) - return + if(M.GetKnockDownDuration() < 3) // Why are you not using KnockDown(3) ? Do you even know 3 is SIX seconds ? So many questions left unanswered. + M.KnockDown(power) + M.Stun(power) + return if(ishuman(M)) M.apply_effect(2.5, SUPERSLOW) @@ -64,8 +66,10 @@ no_clothes_neuro = TRUE if(no_clothes_neuro) - M.adjust_effect(1 * power, WEAKEN) // KD them a bit more - M.visible_message(SPAN_DANGER("[M] falls prone.")) + if(M.GetKnockDownDuration() < 5) // Nobody actually knows what this means. Supposedly it means less than 10 seconds. Frankly if you get locked into 10s of knockdown to begin with there are bigger issues. + M.KnockDown(power) + M.Stun(power) + M.visible_message(SPAN_DANGER("[M] falls prone.")) /proc/apply_scatter_neuro(mob/living/M) if(ishuman(M)) @@ -77,7 +81,8 @@ H.visible_message(SPAN_DANGER("[M] shrugs off the neurotoxin!")) return - M.apply_effect(0.5, WEAKEN) + M.KnockDown(0.7) // Completely arbitrary values from another time where stun timers incorrectly stacked. Kill as needed. + M.Stun(0.7) M.visible_message(SPAN_DANGER("[M] falls prone.")) /datum/ammo/xeno/toxin/on_hit_mob(mob/M,obj/projectile/P) diff --git a/code/datums/autocells/auto_cell.dm b/code/datums/autocells/auto_cell.dm index accc5f180119..fb679c56676e 100644 --- a/code/datums/autocells/auto_cell.dm +++ b/code/datums/autocells/auto_cell.dm @@ -37,7 +37,7 @@ in_turf = T LAZYADD(in_turf.autocells, src) - cellauto_cells += src + GLOB.cellauto_cells += src birth() @@ -48,7 +48,7 @@ LAZYREMOVE(in_turf.autocells, src) in_turf = null - cellauto_cells -= src + GLOB.cellauto_cells -= src death() @@ -88,7 +88,7 @@ // Get cardinal neighbors if(neighbor_type & NEIGHBORS_CARDINAL) - for(var/dir in cardinal) + for(var/dir in GLOB.cardinals) var/turf/T = get_step(in_turf, dir) if(QDELETED(T)) continue @@ -100,7 +100,7 @@ // Get ordinal/diagonal neighbors if(neighbor_type & NEIGHBORS_ORDINAL) - for(var/dir in diagonals) + for(var/dir in GLOB.diagonals) var/turf/T = get_step(in_turf, dir) if(QDELETED(T)) continue diff --git a/code/datums/autocells/explosion.dm b/code/datums/autocells/explosion.dm index 42e1409d595f..970e5618bae3 100644 --- a/code/datums/autocells/explosion.dm +++ b/code/datums/autocells/explosion.dm @@ -109,7 +109,7 @@ survivor.power += dying.power // Two waves travling towards each other weakens the explosion - if(survivor.direction == reverse_dir[dying.direction]) + if(survivor.direction == GLOB.reverse_dir[dying.direction]) survivor.power -= dying.power return is_stronger @@ -120,11 +120,11 @@ // If the cell is the epicenter, propagate in all directions if(isnull(direction)) - return alldirs + return GLOB.alldirs - var/dir = reflected ? reverse_dir[direction] : direction + var/dir = reflected ? GLOB.reverse_dir[direction] : direction - if(dir in cardinal) + if(dir in GLOB.cardinals) propagation_dirs += list(dir, turn(dir, 45), turn(dir, -45)) else propagation_dirs += dir @@ -180,7 +180,7 @@ for(var/dir in to_spread) // Diagonals are longer, that should be reflected in the power falloff var/dir_falloff = 1 - if(dir in diagonals) + if(dir in GLOB.diagonals) dir_falloff = 1.414 if(isnull(direction)) @@ -210,7 +210,7 @@ // Set the direction the explosion is traveling in E.direction = dir //Diagonal cells have a small delay when branching off the center. This helps the explosion look circular - if(!direction && (dir in diagonals)) + if(!direction && (dir in GLOB.diagonals)) E.delay = 1 setup_new_cell(E) diff --git a/code/datums/autocells/vomit_wave.dm b/code/datums/autocells/vomit_wave.dm index 62ea1d4c6e7e..396bf6d3e528 100644 --- a/code/datums/autocells/vomit_wave.dm +++ b/code/datums/autocells/vomit_wave.dm @@ -37,7 +37,7 @@ return // Propagate to cardinal directions - var/list/to_spread = cardinal.Copy() + var/list/to_spread = GLOB.cardinals.Copy() for(var/datum/automata_cell/vomit_wave/C in neighbors) to_spread -= get_dir(in_turf, C.in_turf) diff --git a/code/datums/components/autofire/autofire.dm b/code/datums/components/autofire/autofire.dm index d052127effc3..455fb70a9fa1 100644 --- a/code/datums/components/autofire/autofire.dm +++ b/code/datums/components/autofire/autofire.dm @@ -82,6 +82,8 @@ /datum/component/automatedfire/autofire/proc/initiate_shot() SIGNAL_HANDLER if(shooting)//if we are already shooting, it means the shooter is still on cooldown + if(bursting && (world.time > (next_fire + (burstfire_shot_delay * burst_shots_to_fire)))) + hard_reset() return shooting = TRUE process_shot() diff --git a/code/datums/components/cell.dm b/code/datums/components/cell.dm new file mode 100644 index 000000000000..81ef3733e2e2 --- /dev/null +++ b/code/datums/components/cell.dm @@ -0,0 +1,202 @@ +#define UNLIMITED_CHARGE -1 +#define UNLIMITED_DISTANCE -1 + +/datum/component/cell + dupe_mode = COMPONENT_DUPE_UNIQUE + /// Maximum charge of the power cell, set to -1 for infinite charge + var/max_charge = 10000 + /// Initial max charge of the power cell + var/initial_max_charge + /// Current charge of power cell + var/charge = 10000 + /// If the component can be recharged by hitting its parent with a cell + var/hit_charge = FALSE + /// The maximum amount that can be recharged per tick when using a cell to recharge this component + var/max_recharge_tick = 400 + /// If draining charge on process(), how much to drain per process call + var/charge_drain = 10 + /// If the parent should show cell charge on examine + var/display_charge = TRUE + /// From how many tiles at the highest someone can examine the parent to see the charge + var/charge_examine_range = 1 + /// If the component requires a cell to be inserted to work instead of having an integrated one + var/cell_insert = FALSE + /// Ref to an inserted cell. Should only be null if cell_insert is false + var/obj/item/cell/inserted_cell + + +/datum/component/cell/Initialize( + max_charge = 10000, + hit_charge = FALSE, + max_recharge_tick = 400, + charge_drain = 10, + display_charge = TRUE, + charge_examine_range = 1, + cell_insert = FALSE, + ) + + . = ..() + if(!isatom(parent)) + return COMPONENT_INCOMPATIBLE + + src.max_charge = max_charge + charge = max_charge + src.hit_charge = hit_charge + src.max_recharge_tick = max_recharge_tick + src.charge_drain = charge_drain + src.display_charge = display_charge + src.charge_examine_range = charge_examine_range + src.cell_insert = cell_insert + +/datum/component/cell/Destroy(force, silent) + QDEL_NULL(inserted_cell) + return ..() + + +/datum/component/cell/RegisterWithParent() + ..() + RegisterSignal(parent, list(COMSIG_PARENT_ATTACKBY, COMSIG_ITEM_ATTACKED), PROC_REF(on_object_hit)) + RegisterSignal(parent, COMSIG_CELL_ADD_CHARGE, PROC_REF(add_charge)) + RegisterSignal(parent, COMSIG_CELL_USE_CHARGE, PROC_REF(use_charge)) + RegisterSignal(parent, COMSIG_CELL_CHECK_CHARGE, PROC_REF(has_charge)) + RegisterSignal(parent, COMSIG_CELL_START_TICK_DRAIN, PROC_REF(start_drain)) + RegisterSignal(parent, COMSIG_CELL_STOP_TICK_DRAIN, PROC_REF(stop_drain)) + RegisterSignal(parent, COMSIG_CELL_REMOVE_CELL, PROC_REF(remove_cell)) + RegisterSignal(parent, COMSIG_PARENT_EXAMINE, PROC_REF(on_examine)) + RegisterSignal(parent, COMSIG_ATOM_EMP_ACT, PROC_REF(on_emp)) + +/datum/component/cell/process() + use_charge(null, charge_drain) + +/datum/component/cell/proc/on_emp(datum/source, severity) + SIGNAL_HANDLER + + use_charge(null, round(max_charge / severity)) + +/datum/component/cell/proc/start_drain(datum/source) + SIGNAL_HANDLER + + START_PROCESSING(SSobj, src) + +/datum/component/cell/proc/stop_drain(datum/source) + SIGNAL_HANDLER + + STOP_PROCESSING(SSobj, src) + +/datum/component/cell/proc/on_examine(datum/source, mob/examiner, list/examine_text) + SIGNAL_HANDLER + + if(!display_charge) + return + + if((charge_examine_range != UNLIMITED_DISTANCE) && get_dist(examiner, parent) > charge_examine_range) + return + + examine_text += "A small gauge in the corner reads \"Power: [round(100 * charge / max_charge)]%\"." + +/datum/component/cell/proc/on_object_hit(datum/source, obj/item/cell/attack_obj, mob/living/attacker, params) + SIGNAL_HANDLER + + if(!hit_charge || !istype(attack_obj)) + return + + if(!cell_insert) + INVOKE_ASYNC(src, PROC_REF(charge_from_cell), attack_obj, attacker) + + else + insert_cell(attack_obj, attacker) + + return COMPONENT_NO_AFTERATTACK|COMPONENT_CANCEL_ITEM_ATTACK + +/datum/component/cell/proc/insert_cell(obj/item/cell/power_cell, mob/living/user) + if(inserted_cell) + to_chat(user, SPAN_WARNING("There's already a power cell in [parent]!")) + return + + if(SEND_SIGNAL(parent, COMSIG_CELL_TRY_INSERT_CELL) & COMPONENT_CANCEL_CELL_INSERT) + return + + power_cell.drop_to_floor(user) + power_cell.forceMove(parent) + inserted_cell = power_cell + charge = power_cell.charge + max_charge = power_cell.maxcharge + +/datum/component/cell/proc/remove_cell(mob/living/user) + SIGNAL_HANDLER + + user.put_in_hands(inserted_cell, TRUE) + to_chat(user, SPAN_NOTICE("You remove [inserted_cell] from [parent].")) + inserted_cell = null + max_charge = initial_max_charge + charge = 0 + +/datum/component/cell/proc/charge_from_cell(obj/item/cell/power_cell, mob/living/user) + if(max_charge == UNLIMITED_CHARGE) + to_chat(user, SPAN_WARNING("[parent] doesn't need more power.")) + return + + while(charge < max_charge) + if(SEND_SIGNAL(parent, COMSIG_CELL_TRY_RECHARGING, user) & COMPONENT_CELL_NO_RECHARGE) + return + + if(power_cell.charge <= 0) + to_chat(user, SPAN_WARNING("[power_cell] is completely dry.")) + return + + if(!do_after(user, 1 SECONDS, (INTERRUPT_ALL & (~INTERRUPT_MOVED)), BUSY_ICON_BUILD, power_cell, INTERRUPT_DIFF_LOC)) + to_chat(user, SPAN_WARNING("You were interrupted.")) + return + + if(power_cell.charge <= 0) + return + + var/to_transfer = min(max_recharge_tick, power_cell.charge, (max_charge - charge)) + if(power_cell.use(to_transfer)) + add_charge(null, to_transfer) + to_chat(user, "You transfer some power between [power_cell] and [parent]. The gauge now reads: [round(100 * charge / max_charge)]%.") + +/datum/component/cell/proc/add_charge(datum/source, charge_add = 0) + SIGNAL_HANDLER + + if(max_charge == UNLIMITED_CHARGE) + return + + if(!charge_add) + return + + charge = clamp(charge + charge_add, 0, max_charge) + +/datum/component/cell/proc/use_charge(datum/source, charge_use = 0) + SIGNAL_HANDLER + + if(max_charge == UNLIMITED_CHARGE) + return + + if(!charge_use) + return + + if(!charge) + return COMPONENT_CELL_NO_USE_CHARGE + + charge = clamp(charge - charge_use, 0, max_charge) + + if(!charge) + on_charge_empty() + return + +/datum/component/cell/proc/has_charge(datum/source, charge_amount = 0) + SIGNAL_HANDLER + + if(!charge) + return COMPONENT_CELL_CHARGE_INSUFFICIENT + + if(charge < charge_amount) + return COMPONENT_CELL_CHARGE_INSUFFICIENT + +/datum/component/cell/proc/on_charge_empty() + stop_drain() + SEND_SIGNAL(parent, COMSIG_CELL_OUT_OF_CHARGE) + +#undef UNLIMITED_CHARGE +#undef UNLIMITED_DISTANCE diff --git a/code/datums/components/healing_reduction.dm b/code/datums/components/healing_reduction.dm index b98d52cab251..54ea02dc6b73 100644 --- a/code/datums/components/healing_reduction.dm +++ b/code/datums/components/healing_reduction.dm @@ -21,33 +21,36 @@ Humans will take continuous damage instead. src.healing_reduction_dissipation = healing_reduction_dissipation src.max_buildup = max_buildup -/datum/component/healing_reduction/InheritComponent(datum/component/healing_reduction/C, i_am_original, healing_reduction) +/datum/component/healing_reduction/InheritComponent(datum/component/healing_reduction/inherit_component, i_am_original, healing_reduction) . = ..() - if(!C) + if(!inherit_component) src.healing_reduction += healing_reduction else - src.healing_reduction += C.healing_reduction + src.healing_reduction += inherit_component.healing_reduction src.healing_reduction = min(src.healing_reduction, max_buildup) /datum/component/healing_reduction/process(delta_time) if(!parent) qdel(src) - healing_reduction = max(healing_reduction - healing_reduction_dissipation * delta_time, 0) + return - if(ishuman(parent)) //deals brute to humans - var/mob/living/carbon/human/H = parent - H.apply_damage(healing_reduction_dissipation * delta_time, BRUTE) + healing_reduction = max(healing_reduction - healing_reduction_dissipation * delta_time, 0) if(healing_reduction <= 0) qdel(src) + return + + if(ishuman(parent)) //deals brute to humans + var/mob/living/carbon/human/human_parent = parent + human_parent.apply_damage(healing_reduction_dissipation * delta_time, BRUTE) var/color = GLOW_COLOR var/intensity = healing_reduction/max_buildup color += num2text(MAX_ALPHA*intensity, 2, 16) - var/atom/A = parent - A.add_filter("healing_reduction", 2, list("type" = "outline", "color" = color, "size" = 1)) + var/atom/parent_atom = parent + parent_atom.add_filter("healing_reduction", 2, list("type" = "outline", "color" = color, "size" = 1)) /datum/component/healing_reduction/RegisterWithParent() START_PROCESSING(SSdcs, src) @@ -64,14 +67,14 @@ Humans will take continuous damage instead. COMSIG_XENO_ON_HEAL_WOUNDS, COMSIG_XENO_APPEND_TO_STAT )) - var/atom/A = parent - A.remove_filter("healing_reduction") + var/atom/parent_atom = parent + parent_atom.remove_filter("healing_reduction") -/datum/component/healing_reduction/proc/stat_append(mob/M, list/L) +/datum/component/healing_reduction/proc/stat_append(mob/target_mob, list/stat_list) SIGNAL_HANDLER - L += "Healing Reduction: [healing_reduction]/[max_buildup]" + stat_list += "Healing Reduction: [healing_reduction]/[max_buildup]" -/datum/component/healing_reduction/proc/apply_healing_reduction(mob/living/carbon/xenomorph/X, list/healing) +/datum/component/healing_reduction/proc/apply_healing_reduction(mob/living/carbon/xenomorph/xeno, list/healing) SIGNAL_HANDLER healing["healing"] -= healing_reduction diff --git a/code/datums/components/weed_food.dm b/code/datums/components/weed_food.dm index 16be8665f55b..648478aa6140 100644 --- a/code/datums/components/weed_food.dm +++ b/code/datums/components/weed_food.dm @@ -260,6 +260,7 @@ merged = TRUE ADD_TRAIT(parent_mob, TRAIT_UNDENSE, XENO_WEED_TRAIT) + ADD_TRAIT(parent_mob, TRAIT_MERGED_WITH_WEEDS, XENO_WEED_TRAIT) parent_mob.anchored = TRUE parent_mob.mouse_opacity = MOUSE_OPACITY_TRANSPARENT parent_mob.plane = FLOOR_PLANE @@ -288,6 +289,7 @@ UnregisterSignal(absorbing_weeds, COMSIG_PARENT_QDELETING) absorbing_weeds = null + REMOVE_TRAIT(parent_mob, TRAIT_MERGED_WITH_WEEDS, XENO_WEED_TRAIT) parent_mob.anchored = FALSE parent_mob.mouse_opacity = MOUSE_OPACITY_ICON parent_mob.plane = GAME_PLANE diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 213a959296fb..933b547aa1f2 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -8,16 +8,16 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new) var/locked[] = list() /datum/datacore/proc/get_manifest(monochrome, OOC, nonHTML) - var/list/cic = ROLES_CIC.Copy() - var/list/auxil = ROLES_AUXIL_SUPPORT.Copy() - var/list/misc = ROLES_MISC.Copy() - var/list/mp = ROLES_POLICE.Copy() - var/list/eng = ROLES_ENGINEERING.Copy() - var/list/req = ROLES_REQUISITION.Copy() - var/list/med = ROLES_MEDICAL.Copy() - var/list/marines_by_squad = ROLES_SQUAD_ALL.Copy() + var/list/cic = GLOB.ROLES_CIC.Copy() + var/list/auxil = GLOB.ROLES_AUXIL_SUPPORT.Copy() + var/list/misc = GLOB.ROLES_MISC.Copy() + var/list/mp = GLOB.ROLES_POLICE.Copy() + var/list/eng = GLOB.ROLES_ENGINEERING.Copy() + var/list/req = GLOB.ROLES_REQUISITION.Copy() + var/list/med = GLOB.ROLES_MEDICAL.Copy() + var/list/marines_by_squad = GLOB.ROLES_SQUAD_ALL.Copy() for(var/squad_name in marines_by_squad) - marines_by_squad[squad_name] = ROLES_MARINES.Copy() + marines_by_squad[squad_name] = GLOB.ROLES_MARINES.Copy() var/list/isactive = new() // If we need not the HTML table, but list @@ -32,18 +32,18 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new) ) departments += marines_by_squad var/list/manifest_out = list() - for(var/datum/data/record/t in GLOB.data_core.general) - if(t.fields["mob_faction"] != FACTION_MARINE) //we process only USCM humans + for(var/datum/data/record/record_entry in GLOB.data_core.general) + if(record_entry.fields["mob_faction"] != FACTION_MARINE) //we process only USCM humans continue - var/name = t.fields["name"] - var/rank = t.fields["rank"] - var/squad = t.fields["squad"] + var/name = record_entry.fields["name"] + var/rank = record_entry.fields["rank"] + var/squad = record_entry.fields["squad"] if(isnull(name) || isnull(rank)) continue var/has_department = FALSE for(var/department in departments) // STOP SIGNING ALL MARINES IN ALPHA! - if(department in ROLES_SQUAD_ALL) + if(department in GLOB.ROLES_SQUAD_ALL) if(squad != department) continue var/list/jobs = departments[department] @@ -83,16 +83,16 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new) // sort mobs var/dept_flags = NO_FLAGS //Is there anybody in the department?. - var/list/squad_sublists = ROLES_SQUAD_ALL.Copy() //Are there any marines in the squad? + var/list/squad_sublists = GLOB.ROLES_SQUAD_ALL.Copy() //Are there any marines in the squad? - for(var/datum/data/record/t in GLOB.data_core.general) - if(t.fields["mob_faction"] != FACTION_MARINE) //we process only USCM humans + for(var/datum/data/record/record_entry in GLOB.data_core.general) + if(record_entry.fields["mob_faction"] != FACTION_MARINE) //we process only USCM humans continue - var/name = t.fields["name"] - var/rank = t.fields["rank"] - var/real_rank = t.fields["real_rank"] - var/squad_name = t.fields["squad"] + var/name = record_entry.fields["name"] + var/rank = record_entry.fields["rank"] + var/real_rank = record_entry.fields["real_rank"] + var/squad_name = record_entry.fields["squad"] if(isnull(name) || isnull(rank) || isnull(real_rank)) continue @@ -104,37 +104,37 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new) break isactive[name] = active ? "Active" : "Inactive" else - isactive[name] = t.fields["p_stat"] + isactive[name] = record_entry.fields["p_stat"] //cael - to prevent multiple appearances of a player/job combination, add a continue after each line - if(real_rank in ROLES_CIC) + if(real_rank in GLOB.ROLES_CIC) dept_flags |= FLAG_SHOW_CIC LAZYSET(cic[real_rank], name, rank) - else if(real_rank in ROLES_AUXIL_SUPPORT) + else if(real_rank in GLOB.ROLES_AUXIL_SUPPORT) dept_flags |= FLAG_SHOW_AUXIL_SUPPORT LAZYSET(auxil[real_rank], name, rank) - else if(real_rank in ROLES_MISC) + else if(real_rank in GLOB.ROLES_MISC) dept_flags |= FLAG_SHOW_MISC LAZYSET(misc[real_rank], name, rank) - else if(real_rank in ROLES_POLICE) + else if(real_rank in GLOB.ROLES_POLICE) dept_flags |= FLAG_SHOW_POLICE LAZYSET(mp[real_rank], name, rank) - else if(real_rank in ROLES_ENGINEERING) + else if(real_rank in GLOB.ROLES_ENGINEERING) dept_flags |= FLAG_SHOW_ENGINEERING LAZYSET(eng[real_rank], name, rank) - else if(real_rank in ROLES_REQUISITION) + else if(real_rank in GLOB.ROLES_REQUISITION) dept_flags |= FLAG_SHOW_REQUISITION LAZYSET(req[real_rank], name, rank) - else if(real_rank in ROLES_MEDICAL) + else if(real_rank in GLOB.ROLES_MEDICAL) dept_flags |= FLAG_SHOW_MEDICAL LAZYSET(med[real_rank], name, rank) - else if(real_rank in ROLES_MARINES) + else if(real_rank in GLOB.ROLES_MARINES) if(isnull(squad_name)) continue dept_flags |= FLAG_SHOW_MARINES squad_sublists[squad_name] = TRUE ///If it is a real squad in the USCM squad list to prevent the crew manifest from breaking - if(!(squad_name in ROLES_SQUAD_ALL)) + if(!(squad_name in GLOB.ROLES_SQUAD_ALL)) continue LAZYSET(marines_by_squad[squad_name][real_rank], name, rank) @@ -155,7 +155,7 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new) even = !even if(dept_flags & FLAG_SHOW_MARINES) dat += "Marines" - for(var/squad_name in ROLES_SQUAD_ALL) + for(var/squad_name in GLOB.ROLES_SQUAD_ALL) if(!squad_sublists[squad_name]) continue dat += "[squad_name]" @@ -205,7 +205,7 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new) if(!nosleep) sleep(40) - var/list/jobs_to_check = ROLES_CIC + ROLES_AUXIL_SUPPORT + ROLES_MISC + ROLES_POLICE + ROLES_ENGINEERING + ROLES_REQUISITION + ROLES_MEDICAL + ROLES_MARINES + var/list/jobs_to_check = GLOB.ROLES_CIC + GLOB.ROLES_AUXIL_SUPPORT + GLOB.ROLES_MISC + GLOB.ROLES_POLICE + GLOB.ROLES_ENGINEERING + GLOB.ROLES_REQUISITION + GLOB.ROLES_MEDICAL + GLOB.ROLES_MARINES for(var/mob/living/carbon/human/H in GLOB.human_mob_list) if(is_admin_level(H.z)) continue @@ -216,14 +216,14 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new) var/datum/data/record/foundrecord var/use_name = isnull(ref) - for(var/datum/data/record/t in GLOB.data_core.general) + for(var/datum/data/record/record_entry in GLOB.data_core.general) if(use_name) - if(t.fields["name"] == name) - foundrecord = t + if(record_entry.fields["name"] == name) + foundrecord = record_entry break else - if(t.fields["ref"] == ref) - foundrecord = t + if(record_entry.fields["ref"] == ref) + foundrecord = record_entry break if(foundrecord) @@ -239,102 +239,106 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new) return TRUE return FALSE -/datum/datacore/proc/manifest_inject(mob/living/carbon/human/H) +/datum/datacore/proc/manifest_inject(mob/living/carbon/human/target) var/assignment - if(H.job) - assignment = H.job + if(target.job) + assignment = target.job else assignment = "Unassigned" - var/id = add_zero(num2hex(H.gid), 6) //this was the best they could come up with? A large random number? *sigh* + var/id = add_zero(num2hex(target.gid), 6) //this was the best they could come up with? A large random number? *sigh* //var/icon/front = new(get_id_photo(H), dir = SOUTH) //var/icon/side = new(get_id_photo(H), dir = WEST) //General Record - var/datum/data/record/G = new() - G.fields["id"] = id - G.fields["name"] = H.real_name - G.fields["real_rank"] = H.job - G.fields["rank"] = assignment - G.fields["squad"] = H.assigned_squad ? H.assigned_squad.name : null - G.fields["age"] = H.age - G.fields["p_stat"] = "Active" - G.fields["m_stat"] = "Stable" - G.fields["sex"] = H.gender - G.fields["species"] = H.get_species() - G.fields["origin"] = H.origin - G.fields["faction"] = H.personal_faction - G.fields["mob_faction"] = H.faction - G.fields["religion"] = H.religion - G.fields["ref"] = WEAKREF(H) - //G.fields["photo_front"] = front - //G.fields["photo_side"] = side - - if(H.gen_record && !jobban_isbanned(H, "Records")) - G.fields["notes"] = H.gen_record + var/datum/data/record/record_general = new() + record_general.fields["id"] = id + record_general.fields["name"] = target.real_name + record_general.name = target.real_name + record_general.fields["real_rank"] = target.job + record_general.fields["rank"] = assignment + record_general.fields["squad"] = target.assigned_squad ? target.assigned_squad.name : null + record_general.fields["age"] = target.age + record_general.fields["p_stat"] = "Active" + record_general.fields["m_stat"] = "Stable" + record_general.fields["sex"] = target.gender + record_general.fields["species"] = target.get_species() + record_general.fields["origin"] = target.origin + record_general.fields["faction"] = target.personal_faction + record_general.fields["mob_faction"] = target.faction + record_general.fields["religion"] = target.religion + record_general.fields["ref"] = WEAKREF(target) + //record_general.fields["photo_front"] = front + //record_general.fields["photo_side"] = side + + if(target.gen_record && !jobban_isbanned(target, "Records")) + record_general.fields["notes"] = target.gen_record else - G.fields["notes"] = "No notes found." - general += G + record_general.fields["notes"] = "No notes found." + general += record_general //Medical Record - var/datum/data/record/M = new() - M.fields["id"] = id - M.fields["name"] = H.real_name - M.fields["b_type"] = H.blood_type - M.fields["mi_dis"] = "None" - M.fields["mi_dis_d"] = "No minor disabilities have been declared." - M.fields["ma_dis"] = "None" - M.fields["ma_dis_d"] = "No major disabilities have been diagnosed." - M.fields["alg"] = "None" - M.fields["alg_d"] = "No allergies have been detected in this patient." - M.fields["cdi"] = "None" - M.fields["cdi_d"] = "No diseases have been diagnosed at the moment." - M.fields["last_scan_time"] = null - M.fields["last_scan_result"] = "No scan data on record" // body scanner results - M.fields["autodoc_data"] = list() - M.fields["autodoc_manual"] = list() - M.fields["ref"] = WEAKREF(H) - - if(H.med_record && !jobban_isbanned(H, "Records")) - M.fields["notes"] = H.med_record + var/datum/data/record/record_medical = new() + record_medical.fields["id"] = id + record_medical.fields["name"] = target.real_name + record_medical.name = target.name + record_medical.fields["b_type"] = target.blood_type + record_medical.fields["mi_dis"] = "None" + record_medical.fields["mi_dis_d"] = "No minor disabilities have been declared." + record_medical.fields["ma_dis"] = "None" + record_medical.fields["ma_dis_d"] = "No major disabilities have been diagnosed." + record_medical.fields["alg"] = "None" + record_medical.fields["alg_d"] = "No allergies have been detected in this patient." + record_medical.fields["cdi"] = "None" + record_medical.fields["cdi_d"] = "No diseases have been diagnosed at the moment." + record_medical.fields["last_scan_time"] = null + record_medical.fields["last_scan_result"] = "No scan data on record" // body scanner results + record_medical.fields["autodoc_data"] = list() + record_medical.fields["autodoc_manual"] = list() + record_medical.fields["ref"] = WEAKREF(target) + + if(target.med_record && !jobban_isbanned(target, "Records")) + record_medical.fields["notes"] = target.med_record else - M.fields["notes"] = "No notes found." - medical += M + record_medical.fields["notes"] = "No notes found." + medical += record_medical //Security Record - var/datum/data/record/S = new() - S.fields["id"] = id - S.fields["name"] = H.real_name - S.fields["criminal"] = "None" - S.fields["incident"] = "" - S.fields["ref"] = WEAKREF(H) + var/datum/data/record/record_security = new() + record_security.fields["id"] = id + record_security.fields["name"] = target.real_name + record_security.name = target.real_name + record_security.fields["criminal"] = "None" + record_security.fields["incident"] = "" + record_security.fields["ref"] = WEAKREF(target) - if(H.sec_record && !jobban_isbanned(H, "Records")) - var/new_comment = list("entry" = H.sec_record, "created_by" = list("name" = "\[REDACTED\]", "rank" = "Military Police"), "deleted_by" = null, "deleted_at" = null, "created_at" = "Pre-Deployment") - S.fields["comments"] = list("1" = new_comment) - S.fields["notes"] = H.sec_record - security += S + if(target.sec_record && !jobban_isbanned(target, "Records")) + var/new_comment = list("entry" = target.sec_record, "created_by" = list("name" = "\[REDACTED\]", "rank" = "Military Police"), "deleted_by" = null, "deleted_at" = null, "created_at" = "Pre-Deployment") + record_security.fields["comments"] = list("1" = new_comment) + record_security.fields["notes"] = target.sec_record + security += record_security //Locked Record - var/datum/data/record/L = new() - L.fields["id"] = md5("[H.real_name][H.job]") - L.fields["name"] = H.real_name - L.fields["rank"] = H.job - L.fields["age"] = H.age - L.fields["sex"] = H.gender - L.fields["b_type"] = H.b_type - L.fields["species"] = H.get_species() - L.fields["origin"] = H.origin - L.fields["faction"] = H.personal_faction - L.fields["religion"] = H.religion - L.fields["ref"] = WEAKREF(H) - - if(H.exploit_record && !jobban_isbanned(H, "Records")) - L.fields["exploit_record"] = H.exploit_record + var/datum/data/record/record_locked = new() + record_locked.fields["id"] = md5("[target.real_name][target.job]") + record_locked.fields["name"] = target.real_name + record_locked.name = target.real_name + record_locked.fields["rank"] = target.job + record_locked.fields["age"] = target.age + record_locked.fields["sex"] = target.gender + record_locked.fields["b_type"] = target.b_type + record_locked.fields["species"] = target.get_species() + record_locked.fields["origin"] = target.origin + record_locked.fields["faction"] = target.personal_faction + record_locked.fields["religion"] = target.religion + record_locked.fields["ref"] = WEAKREF(target) + + if(target.exploit_record && !jobban_isbanned(target, "Records")) + record_locked.fields["exploit_record"] = target.exploit_record else - L.fields["exploit_record"] = "No additional information acquired." - locked += L + record_locked.fields["exploit_record"] = "No additional information acquired." + locked += record_locked /proc/get_id_photo(mob/living/carbon/human/H) diff --git a/code/datums/disease.dm b/code/datums/disease.dm index d2f466ebeb39..024337c8e065 100644 --- a/code/datums/disease.dm +++ b/code/datums/disease.dm @@ -7,7 +7,7 @@ to null does not delete the object itself. Thank you. */ -var/list/diseases = typesof(/datum/disease) - /datum/disease +GLOBAL_LIST_INIT(diseases, typesof(/datum/disease) - /datum/disease) /datum/disease diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index ad4703ba65fe..d933b81eb620 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -9,15 +9,15 @@ #define RANDOM_STARTING_LEVEL 2 -var/list/archive_diseases = list() +GLOBAL_LIST_EMPTY(archive_diseases) // The order goes from easy to cure to hard to cure. -var/list/advance_cures = list( +GLOBAL_LIST_INIT(advance_cures, list( "nutriment", "sugar", "orangejuice", "spaceacillin", "kelotane", "ethanol", "leporazine", "lipozine", "silver", "gold", "phoron" - ) + )) /* @@ -50,10 +50,10 @@ var/list/advance_cures = list( /datum/disease/advance/New(process = 1, datum/disease/advance/D) // Setup our dictionary if it hasn't already. - if(!dictionary_symptoms.len) - for(var/symp in list_symptoms) + if(!GLOB.dictionary_symptoms.len) + for(var/symp in GLOB.list_symptoms) var/datum/symptom/S = new symp - dictionary_symptoms[S.id] = symp + GLOB.dictionary_symptoms[S.id] = symp if(!istype(D)) D = null @@ -142,7 +142,7 @@ var/list/advance_cures = list( // Generate symptoms. By default, we only choose non-deadly symptoms. var/list/possible_symptoms = list() - for(var/symp in list_symptoms) + for(var/symp in GLOB.list_symptoms) var/datum/symptom/S = new symp if(S.level <= type_level_limit) if(!HasSymptom(S)) @@ -170,13 +170,13 @@ var/list/advance_cures = list( var/list/properties = GenerateProperties() AssignProperties(properties) - if(!archive_diseases[GetDiseaseID()]) + if(!GLOB.archive_diseases[GetDiseaseID()]) if(new_name) AssignName() - archive_diseases[GetDiseaseID()] = src // So we don't infinite loop - archive_diseases[GetDiseaseID()] = new /datum/disease/advance(0, src, 1) + GLOB.archive_diseases[GetDiseaseID()] = src // So we don't infinite loop + GLOB.archive_diseases[GetDiseaseID()] = new /datum/disease/advance(0, src, 1) - var/datum/disease/advance/A = archive_diseases[GetDiseaseID()] + var/datum/disease/advance/A = GLOB.archive_diseases[GetDiseaseID()] AssignName(A.name) //Generate disease properties based on the effects. Returns an associated list. @@ -254,11 +254,11 @@ var/list/advance_cures = list( // Will generate a random cure, the less resistance the symptoms have, the harder the cure. /datum/disease/advance/proc/GenerateCure(list/properties = list()) if(properties && properties.len) - var/res = Clamp(properties["resistance"] - (symptoms.len / 2), 1, advance_cures.len) - cure_id = advance_cures[res] + var/res = Clamp(properties["resistance"] - (symptoms.len / 2), 1, GLOB.advance_cures.len) + cure_id = GLOB.advance_cures[res] // Get the cure name from the cure_id - var/datum/reagent/D = chemical_reagents_list[cure_id] + var/datum/reagent/D = GLOB.chemical_reagents_list[cure_id] cure = D.name @@ -373,7 +373,7 @@ var/list/advance_cures = list( var/list/symptoms = list() symptoms += "Done" - symptoms += list_symptoms.Copy() + symptoms += GLOB.list_symptoms.Copy() do var/symptom = tgui_input_list(user, "Choose a symptom to add ([i] remaining)", "Choose a Symptom", symptoms) if(istext(symptom)) diff --git a/code/datums/diseases/advance/symptoms/symptoms.dm b/code/datums/diseases/advance/symptoms/symptoms.dm index 72a132cf517e..7746a03b4f89 100644 --- a/code/datums/diseases/advance/symptoms/symptoms.dm +++ b/code/datums/diseases/advance/symptoms/symptoms.dm @@ -1,9 +1,7 @@ // Symptoms are the effects that engineered advanced diseases do. -var/list/list_symptoms = typesof(/datum/symptom) - /datum/symptom -var/list/dictionary_symptoms = list() - -var/global/const/SYMPTOM_ACTIVATION_PROB = 3 +GLOBAL_LIST_INIT(list_symptoms, typesof(/datum/symptom) - /datum/symptom) +GLOBAL_LIST_EMPTY(dictionary_symptoms) /datum/symptom // Buffs/Debuffs the symptom has to the overall engineered disease. @@ -18,7 +16,7 @@ var/global/const/SYMPTOM_ACTIVATION_PROB = 3 var/id = "" /datum/symptom/New() - var/list/S = list_symptoms + var/list/S = GLOB.list_symptoms for(var/i = 1; i <= S.len; i++) if(src.type == S[i]) id = "[i]" diff --git a/code/datums/diseases/advance/symptoms/voice_change.dm b/code/datums/diseases/advance/symptoms/voice_change.dm index 7547242473db..e5af4a8eaab4 100644 --- a/code/datums/diseases/advance/symptoms/voice_change.dm +++ b/code/datums/diseases/advance/symptoms/voice_change.dm @@ -38,10 +38,10 @@ Bonus var/random_name = "" switch(H.gender) if(MALE) - random_name = pick(first_names_male) + random_name = pick(GLOB.first_names_male) else - random_name = pick(first_names_female) - random_name += " [pick(last_names)]" + random_name = pick(GLOB.first_names_female) + random_name += " [pick(GLOB.last_names)]" H.SetSpecialVoice(random_name) return diff --git a/code/datums/diseases/flu.dm b/code/datums/diseases/flu.dm index 15a2fe90afaf..fad0b15228b1 100644 --- a/code/datums/diseases/flu.dm +++ b/code/datums/diseases/flu.dm @@ -46,7 +46,7 @@ stage-- return */ - if(affected_mob.resting && prob(15)) //added until sleeping is fixed + if(affected_mob.body_position == LYING_DOWN && prob(15)) //added until sleeping is fixed to_chat(affected_mob, SPAN_NOTICE(" You feel better.")) stage-- return diff --git a/code/datums/effects/tether.dm b/code/datums/effects/tether.dm index ddaafff46489..1667d901a08a 100644 --- a/code/datums/effects/tether.dm +++ b/code/datums/effects/tether.dm @@ -52,7 +52,7 @@ var/turf/T var/dir_away = get_dir(affected_atom, A) - for (var/dir in alldirs) + for (var/dir in GLOB.alldirs) if (dir & dir_away) continue T = get_step(A, dir) diff --git a/code/datums/elements/bullet_trait/incendiary.dm b/code/datums/elements/bullet_trait/incendiary.dm index 2d5d0a15f368..861e67651a53 100644 --- a/code/datums/elements/bullet_trait/incendiary.dm +++ b/code/datums/elements/bullet_trait/incendiary.dm @@ -13,7 +13,7 @@ if(ispath(reagent)) var/datum/reagent/R = reagent - burn_reagent = chemical_reagents_list[initial(R.id)] + burn_reagent = GLOB.chemical_reagents_list[initial(R.id)] else burn_reagent = reagent burn_stacks = stacks diff --git a/code/datums/emergency_calls/cbrn.dm b/code/datums/emergency_calls/cbrn.dm index 3a6b1c640632..cee96e10137e 100644 --- a/code/datums/emergency_calls/cbrn.dm +++ b/code/datums/emergency_calls/cbrn.dm @@ -55,7 +55,7 @@ max_medics = 0 /datum/emergency_call/cbrn/specialists/New() - var/cbrn_ship_name = "Unit [pick(nato_phonetic_alphabet)]-[rand(1, 99)]" + var/cbrn_ship_name = "Unit [pick(GLOB.nato_phonetic_alphabet)]-[rand(1, 99)]" arrival_message = "[MAIN_SHIP_NAME], CBRN [cbrn_ship_name] has been dispatched. Follow all orders provided by [cbrn_ship_name]." objectives = "You are a specialist team in [cbrn_ship_name] dispatched to quell a threat to [MAIN_SHIP_NAME]. Further orders may be provided." diff --git a/code/datums/emergency_calls/clf.dm b/code/datums/emergency_calls/clf.dm index 0a5f09e2a2f2..837ecb340dda 100644 --- a/code/datums/emergency_calls/clf.dm +++ b/code/datums/emergency_calls/clf.dm @@ -28,7 +28,7 @@ to_chat(H, SPAN_BOLD("The Dust Raiders responded with deadly force, scattering many of the colonists who attempted to fight their occupation.")) to_chat(H, SPAN_BOLD("The Dust Raiders and their flagship, the USS Alistoun eventually withdrew from the sector by the end of the year.")) to_chat(H, SPAN_BOLD("With the Neroid Sector existing in relative isolation from United America oversight for the last five years, many colonists have considered themselves free from governmental rule.")) - to_chat(H, SPAN_BOLD("The year is now [game_year].")) + to_chat(H, SPAN_BOLD("The year is now [GLOB.game_year].")) 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.")) @@ -45,7 +45,7 @@ leader = H to_chat(H, SPAN_ROLE_HEADER("You are a Cell Leader of the local resistance group, the Colonial Liberation Front!")) arm_equipment(H, /datum/equipment_preset/clf/leader, TRUE, TRUE) - else if(synths < max_synths && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_SYNTH) && RoleAuthority.roles_whitelist[H.ckey] & WHITELIST_SYNTHETIC) + else if(synths < max_synths && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_SYNTH) && GLOB.RoleAuthority.roles_whitelist[H.ckey] & WHITELIST_SYNTHETIC) synths++ to_chat(H, SPAN_ROLE_HEADER("You are a Multi-Purpose Synthetic for the local resistance group, the Colonial Liberation Front!")) arm_equipment(H, /datum/equipment_preset/clf/synth, TRUE, TRUE) diff --git a/code/datums/emergency_calls/cmb.dm b/code/datums/emergency_calls/cmb.dm index a49c0a4ce273..5dba3ee8fc7d 100644 --- a/code/datums/emergency_calls/cmb.dm +++ b/code/datums/emergency_calls/cmb.dm @@ -35,7 +35,7 @@ leader = mob to_chat(mob, SPAN_ROLE_HEADER("You are the Colonial Marshal!")) arm_equipment(mob, /datum/equipment_preset/cmb/leader, TRUE, TRUE) - else if(synths < max_synths && HAS_FLAG(mob?.client.prefs.toggles_ert, PLAY_SYNTH) && RoleAuthority.roles_whitelist[mob.ckey] & WHITELIST_SYNTHETIC) + else if(synths < max_synths && HAS_FLAG(mob?.client.prefs.toggles_ert, PLAY_SYNTH) && GLOB.RoleAuthority.roles_whitelist[mob.ckey] & WHITELIST_SYNTHETIC) synths++ to_chat(mob, SPAN_ROLE_HEADER("You are a CMB Investigative Synthetic!")) arm_equipment(mob, /datum/equipment_preset/cmb/synth, TRUE, TRUE) diff --git a/code/datums/emergency_calls/contractor.dm b/code/datums/emergency_calls/contractor.dm index a5d6c2d7e80f..0e0c975f0d13 100644 --- a/code/datums/emergency_calls/contractor.dm +++ b/code/datums/emergency_calls/contractor.dm @@ -29,7 +29,7 @@ leader = mob to_chat(mob, SPAN_ROLE_HEADER("You are a Contractor Team Leader of Vanguard's Arrow Incorporated!")) arm_equipment(mob, /datum/equipment_preset/contractor/duty/leader, TRUE, TRUE) - else if(synths < max_synths && HAS_FLAG(mob.client.prefs.toggles_ert, PLAY_SYNTH) && RoleAuthority.roles_whitelist[mob.ckey] & WHITELIST_SYNTHETIC) + else if(synths < max_synths && HAS_FLAG(mob.client.prefs.toggles_ert, PLAY_SYNTH) && GLOB.RoleAuthority.roles_whitelist[mob.ckey] & WHITELIST_SYNTHETIC) synths++ to_chat(mob, SPAN_ROLE_HEADER("You are a Contractor Support Synthetic of Vanguard's Arrow Incorporated!")) arm_equipment(mob, /datum/equipment_preset/contractor/duty/synth, TRUE, TRUE) @@ -117,13 +117,13 @@ var/mob/living/carbon/human/H = new(spawn_loc) H.key = M.key if(H.client) - H.client.change_view(world_view_size) + H.client.change_view(GLOB.world_view_size) if(!leader && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_LEADER) && check_timelock(H.client, JOB_SQUAD_LEADER, time_required_for_job)) //First one spawned is always the leader. leader = H to_chat(H, SPAN_ROLE_HEADER("You are a Covert Contractor Team Leader of Vanguard's Arrow Incorporated!")) arm_equipment(H, /datum/equipment_preset/contractor/covert/leader, TRUE, TRUE) - else if(synths < max_synths && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_SYNTH) && RoleAuthority.roles_whitelist[H.ckey] & WHITELIST_SYNTHETIC) + else if(synths < max_synths && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_SYNTH) && GLOB.RoleAuthority.roles_whitelist[H.ckey] & WHITELIST_SYNTHETIC) synths++ to_chat(H, SPAN_ROLE_HEADER("You are a Contractor Support Synthetic of Vanguard's Arrow Incorporated!")) arm_equipment(H, /datum/equipment_preset/contractor/covert/synth, TRUE, TRUE) diff --git a/code/datums/emergency_calls/cryo_marines.dm b/code/datums/emergency_calls/cryo_marines.dm index 19f73a9843ce..fb8d4b8a5a69 100644 --- a/code/datums/emergency_calls/cryo_marines.dm +++ b/code/datums/emergency_calls/cryo_marines.dm @@ -14,7 +14,7 @@ spawn_max_amount = TRUE /datum/emergency_call/cryo_squad/spawn_candidates(quiet_launch, announce_incoming, override_spawn_loc) - var/datum/squad/marine/cryo/cryo_squad = RoleAuthority.squads_by_type[/datum/squad/marine/cryo] + var/datum/squad/marine/cryo/cryo_squad = GLOB.RoleAuthority.squads_by_type[/datum/squad/marine/cryo] leaders = cryo_squad.num_leaders . = ..() shipwide_ai_announcement("Successfully deployed [mob_max] Foxtrot marines, of which [length(members)] are ready for duty.") @@ -43,41 +43,41 @@ break sleep(5) - var/datum/squad/marine/cryo/cryo_squad = RoleAuthority.squads_by_type[/datum/squad/marine/cryo] + var/datum/squad/marine/cryo/cryo_squad = GLOB.RoleAuthority.squads_by_type[/datum/squad/marine/cryo] if(leaders < cryo_squad.max_leaders && (!mind || (HAS_FLAG(human.client.prefs.toggles_ert, PLAY_LEADER) && check_timelock(human.client, JOB_SQUAD_LEADER, time_required_for_job)))) leader = human leaders++ human.client?.prefs.copy_all_to(human, JOB_SQUAD_LEADER, TRUE, TRUE) arm_equipment(human, /datum/equipment_preset/uscm/leader/cryo, mind == null, TRUE) to_chat(human, SPAN_ROLE_HEADER("You are a Squad Leader in the USCM")) - to_chat(human, SPAN_ROLE_BODY("You are here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command.")) + to_chat(human, SPAN_ROLE_BODY("You are here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command.")) to_chat(human, SPAN_BOLDWARNING("If you wish to cryo or ghost upon spawning in, you must ahelp and inform staff so you can be replaced.")) else if (heavies < max_heavies && (!mind || (HAS_FLAG(human.client.prefs.toggles_ert, PLAY_HEAVY) && check_timelock(human.client, JOB_SQUAD_SPECIALIST, time_required_for_job)))) heavies++ human.client?.prefs.copy_all_to(human, JOB_SQUAD_SPECIALIST, TRUE, TRUE) arm_equipment(human, /datum/equipment_preset/uscm/spec/cryo, mind == null, TRUE) to_chat(human, SPAN_ROLE_HEADER("You are a Weapons Specialist in the USCM")) - to_chat(human, SPAN_ROLE_BODY("Your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command.")) + to_chat(human, SPAN_ROLE_BODY("Your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command.")) to_chat(human, SPAN_BOLDWARNING("If you wish to cryo or ghost upon spawning in, you must ahelp and inform staff so you can be replaced.")) else if (medics < max_medics && (!mind || (HAS_FLAG(human.client.prefs.toggles_ert, PLAY_MEDIC) && check_timelock(human.client, JOB_SQUAD_MEDIC, time_required_for_job)))) medics++ human.client?.prefs.copy_all_to(human, JOB_SQUAD_MEDIC, TRUE, TRUE) arm_equipment(human, /datum/equipment_preset/uscm/medic/cryo, mind == null, TRUE) to_chat(human, SPAN_ROLE_HEADER("You are a Hospital Corpsman in the USCM")) - to_chat(human, SPAN_ROLE_BODY("You are here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command.")) + to_chat(human, SPAN_ROLE_BODY("You are here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command.")) to_chat(human, SPAN_BOLDWARNING("If you wish to cryo or ghost upon spawning in, you must ahelp and inform staff so you can be replaced.")) else if (engineers < max_engineers && (!mind || (HAS_FLAG(human.client.prefs.toggles_ert, PLAY_ENGINEER) && check_timelock(human.client, JOB_SQUAD_ENGI, time_required_for_job)))) engineers++ human.client?.prefs.copy_all_to(human, JOB_SQUAD_ENGI, TRUE, TRUE) arm_equipment(human, /datum/equipment_preset/uscm/engineer/cryo, mind == null, TRUE) to_chat(human, SPAN_ROLE_HEADER("You are an Engineer in the USCM")) - to_chat(human, SPAN_ROLE_BODY("You are here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command.")) + to_chat(human, SPAN_ROLE_BODY("You are here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command.")) to_chat(human, SPAN_BOLDWARNING("If you wish to cryo or ghost upon spawning in, you must ahelp and inform staff so you can be replaced.")) else human.client?.prefs.copy_all_to(human, JOB_SQUAD_MARINE, TRUE, TRUE) arm_equipment(human, /datum/equipment_preset/uscm/pfc/cryo, mind == null, TRUE) to_chat(human, SPAN_ROLE_HEADER("You are a Rifleman in the USCM")) - to_chat(human, SPAN_ROLE_BODY("You are here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command.")) + to_chat(human, SPAN_ROLE_BODY("You are here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command.")) to_chat(human, SPAN_BOLDWARNING("If you wish to cryo or ghost upon spawning in, you must ahelp and inform staff so you can be replaced.")) sleep(10) diff --git a/code/datums/emergency_calls/cryo_marines_heavy.dm b/code/datums/emergency_calls/cryo_marines_heavy.dm index f4fe3c9f2a57..42f25a461254 100644 --- a/code/datums/emergency_calls/cryo_marines_heavy.dm +++ b/code/datums/emergency_calls/cryo_marines_heavy.dm @@ -17,7 +17,7 @@ var/leaders = 0 /datum/emergency_call/cryo_squad_equipped/spawn_candidates(quiet_launch, announce_incoming, override_spawn_loc) - var/datum/squad/marine/cryo/cryo_squad = RoleAuthority.squads_by_type[/datum/squad/marine/cryo] + var/datum/squad/marine/cryo/cryo_squad = GLOB.RoleAuthority.squads_by_type[/datum/squad/marine/cryo] leaders = cryo_squad.num_leaders . = ..() if(length(members)) @@ -35,37 +35,37 @@ M.transfer_to(H, TRUE) sleep(5) - var/datum/squad/marine/cryo/cryo_squad = RoleAuthority.squads_by_type[/datum/squad/marine/cryo] + var/datum/squad/marine/cryo/cryo_squad = GLOB.RoleAuthority.squads_by_type[/datum/squad/marine/cryo] if(leaders < cryo_squad.max_leaders && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_LEADER) && check_timelock(H.client, JOB_SQUAD_LEADER, time_required_for_job)) leader = H leaders++ arm_equipment(H, /datum/equipment_preset/uscm/leader_equipped/cryo, TRUE, TRUE) to_chat(H, SPAN_ROLE_HEADER("You are a Squad Leader in the USCM")) - to_chat(H, SPAN_ROLE_BODY("Your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name].")) + to_chat(H, SPAN_ROLE_BODY("Your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name].")) else if (heavies < max_heavies && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_HEAVY) && check_timelock(H.client, JOB_SQUAD_SPECIALIST, time_required_for_job)) heavies++ arm_equipment(H, /datum/equipment_preset/uscm/specialist_equipped/cryo, TRUE, TRUE) to_chat(H, SPAN_ROLE_HEADER("You are a Weapons Specialist in the USCM")) - to_chat(H, SPAN_ROLE_BODY("Your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name].")) + to_chat(H, SPAN_ROLE_BODY("Your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name].")) else if(smartgunners < max_smartgunners && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_SMARTGUNNER) && check_timelock(H.client, JOB_SQUAD_SMARTGUN, time_required_for_job)) smartgunners++ arm_equipment(H, /datum/equipment_preset/uscm/smartgunner_equipped/cryo, TRUE, TRUE) to_chat(H, SPAN_ROLE_HEADER("You are a Smartgunner in the USCM")) - to_chat(H, SPAN_ROLE_BODY("Your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name].")) + to_chat(H, SPAN_ROLE_BODY("Your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name].")) else if(engineers < max_engineers && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_ENGINEER) && check_timelock(H.client, JOB_SQUAD_ENGI, time_required_for_job)) engineers++ arm_equipment(H, /datum/equipment_preset/uscm/engineer_equipped/cryo, TRUE, TRUE) to_chat(H, SPAN_ROLE_HEADER("You are an Engineer in the USCM")) - to_chat(H, SPAN_ROLE_BODY("Your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name].")) + to_chat(H, SPAN_ROLE_BODY("Your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name].")) else if (medics < max_medics && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_MEDIC) && check_timelock(H.client, JOB_SQUAD_MEDIC, time_required_for_job)) medics++ arm_equipment(H, /datum/equipment_preset/uscm/medic_equipped/cryo, TRUE, TRUE) to_chat(H, SPAN_ROLE_HEADER("You are a Hospital Corpsman in the USCM")) - to_chat(H, SPAN_ROLE_BODY("Your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name].")) + to_chat(H, SPAN_ROLE_BODY("Your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name].")) else arm_equipment(H, /datum/equipment_preset/uscm/private_equipped/cryo, TRUE, TRUE) to_chat(H, SPAN_ROLE_HEADER("You are a Rifleman in the USCM")) - to_chat(H, SPAN_ROLE_BODY("Your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name].")) + to_chat(H, SPAN_ROLE_BODY("Your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name].")) sleep(10) to_chat(H, SPAN_BOLD("Objectives: [objectives]")) diff --git a/code/datums/emergency_calls/cryo_spec.dm b/code/datums/emergency_calls/cryo_spec.dm index 6cc7c905efbc..8d563b0693f8 100644 --- a/code/datums/emergency_calls/cryo_spec.dm +++ b/code/datums/emergency_calls/cryo_spec.dm @@ -34,7 +34,7 @@ human.client?.prefs.copy_all_to(human, JOB_SQUAD_SPECIALIST, TRUE, TRUE) arm_equipment(human, /datum/equipment_preset/uscm/spec/cryo, mind == null, TRUE) to_chat(human, SPAN_ROLE_HEADER("You are a Weapons Specialist in the USCM")) - to_chat(human, SPAN_ROLE_BODY("Your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command.")) + to_chat(human, SPAN_ROLE_BODY("Your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command.")) to_chat(human, SPAN_BOLDWARNING("If you wish to cryo or ghost upon spawning in, you must ahelp and inform staff so you can be replaced.")) sleep(10) diff --git a/code/datums/emergency_calls/deathsquad.dm b/code/datums/emergency_calls/deathsquad.dm index 0bfab8fbf2b7..1cd5bdef6713 100644 --- a/code/datums/emergency_calls/deathsquad.dm +++ b/code/datums/emergency_calls/deathsquad.dm @@ -3,7 +3,7 @@ //Weyland-Yutani Deathsquad - W-Y Deathsquad. Event only /datum/emergency_call/death - name = "Weyland Whiteout Operators" + name = "Weyland Whiteout Operators (!DEATHSQUAD!)" mob_max = 8 mob_min = 5 arrival_message = "'!`2*%slau#*jer t*h$em a!l%. le&*ve n(o^ w&*nes%6es.*v$e %#d ou^'" @@ -18,41 +18,76 @@ // DEATH SQUAD-------------------------------------------------------------------------------- -/datum/emergency_call/death/create_member(datum/mind/M, turf/override_spawn_loc) +/datum/emergency_call/death/create_member(datum/mind/player, turf/override_spawn_loc) var/turf/spawn_loc = override_spawn_loc ? override_spawn_loc : get_spawn_point() if(!istype(spawn_loc)) return //Didn't find a useable spawn point. - var/mob/living/carbon/human/H = new(spawn_loc) - M.transfer_to(H, TRUE) + var/mob/living/carbon/human/person = new(spawn_loc) + player.transfer_to(person, TRUE) - if(!leader && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_LEADER) && check_timelock(H.client, JOB_SQUAD_LEADER, time_required_for_job)) - leader = H - to_chat(H, SPAN_ROLE_HEADER("You are the Whiteout Team Leader!")) - to_chat(H, 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(H, /datum/equipment_preset/pmc/w_y_whiteout/leader, TRUE, TRUE) - else if(medics < max_medics && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_MEDIC) && check_timelock(H.client, JOB_SQUAD_MEDIC, time_required_for_job)) + if(!leader && HAS_FLAG(person.client.prefs.toggles_ert, PLAY_LEADER) && check_timelock(person.client, JOB_SQUAD_LEADER, time_required_for_job)) + leader = person + to_chat(person, SPAN_ROLE_HEADER("You are the Whiteout Team Leader!")) + 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/leader, TRUE, TRUE) + else if(medics < max_medics && HAS_FLAG(person.client.prefs.toggles_ert, PLAY_MEDIC) && check_timelock(person.client, JOB_SQUAD_MEDIC, time_required_for_job)) medics++ - to_chat(H, SPAN_ROLE_HEADER("You are a Whiteout Team Medic!")) - to_chat(H, 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(H, /datum/equipment_preset/pmc/w_y_whiteout/medic, TRUE, TRUE) - else if(heavies < max_heavies && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_SMARTGUNNER) && check_timelock(H.client, list(JOB_SQUAD_SPECIALIST, JOB_SQUAD_SMARTGUN), time_required_for_job)) + to_chat(person, SPAN_ROLE_HEADER("You are a Whiteout Team Medic!")) + 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/medic, TRUE, TRUE) + else if(heavies < max_heavies && HAS_FLAG(person.client.prefs.toggles_ert, PLAY_SMARTGUNNER) && check_timelock(person.client, list(JOB_SQUAD_SPECIALIST, JOB_SQUAD_SMARTGUN), time_required_for_job)) heavies++ - to_chat(H, SPAN_ROLE_HEADER("You are a Whiteout Team Terminator!")) - to_chat(H, 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(H, /datum/equipment_preset/pmc/w_y_whiteout/terminator, TRUE, TRUE) + to_chat(person, SPAN_ROLE_HEADER("You are a Whiteout Team Terminator!")) + 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/terminator, TRUE, TRUE) else - to_chat(H, SPAN_ROLE_HEADER("You are a Whiteout Team Operative!")) - to_chat(H, 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(H, /datum/equipment_preset/pmc/w_y_whiteout, TRUE, TRUE) + to_chat(person, SPAN_ROLE_HEADER("You are a Whiteout Team Operative!")) + 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) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), H, SPAN_BOLD("Objectives: [objectives]")), 1 SECONDS) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), person, SPAN_BOLD("Objectives: [objectives]")), 1 SECONDS) + +/datum/emergency_call/death/low_threat + name = "Weyland Whiteout Operators" + +// DEATH SQUAD-------------------------------------------------------------------------------- +/datum/emergency_call/death/low_threat/create_member(datum/mind/player, turf/override_spawn_loc) + var/turf/spawn_loc = override_spawn_loc ? override_spawn_loc : get_spawn_point() + + if(!istype(spawn_loc)) + return //Didn't find a useable spawn point. + + var/mob/living/carbon/human/person = new(spawn_loc) + player.transfer_to(person, TRUE) + + if(!leader && HAS_FLAG(person.client.prefs.toggles_ert, PLAY_LEADER) && check_timelock(person.client, JOB_SQUAD_LEADER, time_required_for_job)) + leader = person + to_chat(person, SPAN_ROLE_HEADER("You are the Whiteout Team Leader!")) + 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/leader, TRUE, TRUE) + else if(medics < max_medics && HAS_FLAG(person.client.prefs.toggles_ert, PLAY_MEDIC) && check_timelock(person.client, JOB_SQUAD_MEDIC, time_required_for_job)) + medics++ + to_chat(person, SPAN_ROLE_HEADER("You are a Whiteout Team Medic!")) + 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/medic, TRUE, TRUE) + else if(heavies < max_heavies && HAS_FLAG(person.client.prefs.toggles_ert, PLAY_SMARTGUNNER) && check_timelock(person.client, list(JOB_SQUAD_SPECIALIST, JOB_SQUAD_SMARTGUN), time_required_for_job)) + heavies++ + to_chat(person, SPAN_ROLE_HEADER("You are a Whiteout Team Terminator!")) + 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/terminator, TRUE, TRUE) + else + to_chat(person, SPAN_ROLE_HEADER("You are a Whiteout Team Operative!")) + 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) + + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), person, SPAN_BOLD("Objectives: [objectives]")), 1 SECONDS) //################################################################################################ // Marine commandos - USCM Deathsquad. Event only /datum/emergency_call/marsoc - name = "Marine Raider Strike Team" + name = "Marine Raider Strike Team (!DEATHSQUAD!)" mob_max = 8 mob_min = 5 probability = 0 @@ -81,7 +116,7 @@ return /datum/emergency_call/marsoc_covert - name = "Marine Raider Operatives (Covert)" + name = "Marine Raider Operatives (!DEATHSQUAD! Covert)" mob_max = 8 mob_min = 5 probability = 0 @@ -107,3 +142,27 @@ to_chat(H, SPAN_BOLDNOTICE("You are absolutely loyal to High Command and must follow their directives.")) to_chat(H, SPAN_BOLDNOTICE("Execute the mission assigned to you with extreme prejudice!")) return + + +/datum/emergency_call/marsoc/low_threat + name = "Marine Raider Operatives" + +/datum/emergency_call/marsoc/low_threat/create_member(datum/mind/MIND) + + var/turf/spawn_loc = get_spawn_point() + + if(!istype(spawn_loc)) + return //Didn't find a useable spawn point. + + var/mob/living/carbon/human/player = new(spawn_loc) + MIND.transfer_to(player, TRUE) + if(!leader && HAS_FLAG(player.client.prefs.toggles_ert, PLAY_LEADER) && check_timelock(player.client, JOB_SQUAD_LEADER, time_required_for_job)) //First one spawned is always the leader. + leader = player + to_chat(player, SPAN_WARNING(FONT_SIZE_BIG("You are a Marine Raider Team Leader, better than all the rest."))) + arm_equipment(player, /datum/equipment_preset/uscm/marsoc/low_threat/sl, TRUE, TRUE) + else + to_chat(player, SPAN_WARNING(FONT_SIZE_BIG("You are an elite Marine Raider, the best of the best."))) + arm_equipment(player, /datum/equipment_preset/uscm/marsoc/low_threat, TRUE, TRUE) + to_chat(player, SPAN_BOLDNOTICE("You are absolutely loyal to High Command and must follow their directives.")) + to_chat(player, SPAN_BOLDNOTICE("Execute the mission assigned to you with extreme prejudice!")) + return diff --git a/code/datums/emergency_calls/emergency_call.dm b/code/datums/emergency_calls/emergency_call.dm index 9db46955a5ea..c6f71382b877 100644 --- a/code/datums/emergency_calls/emergency_call.dm +++ b/code/datums/emergency_calls/emergency_call.dm @@ -200,7 +200,7 @@ SSticker.mode.picked_calls += src show_join_message() //Show our potential candidates the message to let them join. - message_admins("Distress beacon: '[name]' activated [src.hostility? "[SPAN_WARNING("(THEY ARE HOSTILE)")]":"(they are friendly)"]. Looking for candidates.") + message_admins("Distress beacon: '[name]' activated [hostility? "[SPAN_WARNING("(THEY ARE HOSTILE)")]":"(they are friendly)"]. Looking for candidates.") if(!quiet_launch) marine_announcement("A distress beacon has been launched from the [MAIN_SHIP_NAME].", "Priority Alert", 'sound/AI/distressbeacon.ogg', logging = ARES_LOG_SECURITY) diff --git a/code/datums/emergency_calls/inspection.dm b/code/datums/emergency_calls/inspection.dm index ad0200339952..2cd121093ea4 100644 --- a/code/datums/emergency_calls/inspection.dm +++ b/code/datums/emergency_calls/inspection.dm @@ -202,7 +202,7 @@ leader = mob to_chat(mob, SPAN_ROLE_HEADER("You are the Colonial Marshal!")) arm_equipment(mob, /datum/equipment_preset/cmb/leader, TRUE, TRUE) - else if(synths < max_synths && HAS_FLAG(mob?.client.prefs.toggles_ert, PLAY_SYNTH) && RoleAuthority.roles_whitelist[mob.ckey] & WHITELIST_SYNTHETIC) + else if(synths < max_synths && HAS_FLAG(mob?.client.prefs.toggles_ert, PLAY_SYNTH) && GLOB.RoleAuthority.roles_whitelist[mob.ckey] & WHITELIST_SYNTHETIC) synths++ to_chat(mob, SPAN_ROLE_HEADER("You are a CMB Investigative Synthetic!")) arm_equipment(mob, /datum/equipment_preset/cmb/synth, TRUE, TRUE) diff --git a/code/datums/emergency_calls/mercs.dm b/code/datums/emergency_calls/mercs.dm index 40210c845c6f..67e09e8992f0 100644 --- a/code/datums/emergency_calls/mercs.dm +++ b/code/datums/emergency_calls/mercs.dm @@ -11,7 +11,7 @@ /datum/emergency_call/mercs/New() . = ..() hostility = pick(75;FALSE,25;TRUE) - arrival_message = "[MAIN_SHIP_NAME], this is Freelancer shuttle [pick(alphabet_lowercase)][pick(alphabet_lowercase)]-[rand(1, 99)] responding to your distress call. Prepare for boarding." + arrival_message = "[MAIN_SHIP_NAME], this is Freelancer shuttle [pick(GLOB.alphabet_lowercase)][pick(GLOB.alphabet_lowercase)]-[rand(1, 99)] responding to your distress call. Prepare for boarding." if(hostility) objectives = "Ransack the [MAIN_SHIP_NAME] and kill anyone who gets in your way. Do what your Captain says. Ensure your survival at all costs." else @@ -25,7 +25,7 @@ /datum/emergency_call/mercs/friendly/New() . = ..() hostility = FALSE - arrival_message = "[MAIN_SHIP_NAME], this is Freelancer shuttle [pick(alphabet_lowercase)][pick(alphabet_lowercase)]-[rand(1, 99)] responding to your distress call. Prepare for boarding." + arrival_message = "[MAIN_SHIP_NAME], this is Freelancer shuttle [pick(GLOB.alphabet_lowercase)][pick(GLOB.alphabet_lowercase)]-[rand(1, 99)] responding to your distress call. Prepare for boarding." objectives = "Help the crew of the [MAIN_SHIP_NAME] in exchange for payment, and choose your payment well. Do what your Captain says. Ensure your survival at all costs." /datum/emergency_call/mercs/hostile //ditto @@ -36,7 +36,7 @@ /datum/emergency_call/mercs/hostile/New() . = ..() hostility = TRUE - arrival_message = "[MAIN_SHIP_NAME], this is Freelancer shuttle [pick(alphabet_lowercase)][pick(alphabet_lowercase)]-[rand(1, 99)] responding to your distress call. Prepare for boarding." + arrival_message = "[MAIN_SHIP_NAME], this is Freelancer shuttle [pick(GLOB.alphabet_lowercase)][pick(GLOB.alphabet_lowercase)]-[rand(1, 99)] responding to your distress call. Prepare for boarding." objectives = "Ransack the [MAIN_SHIP_NAME] and kill anyone who gets in your way. Do what your Captain says. Ensure your survival at all costs." /datum/emergency_call/mercs/print_backstory(mob/living/carbon/human/H) @@ -96,7 +96,7 @@ /datum/emergency_call/heavy_mercs/New() . = ..() hostility = pick(75;FALSE,25;TRUE) - arrival_message = "[MAIN_SHIP_NAME], this is Elite Freelancer shuttle [pick(alphabet_lowercase)][pick(alphabet_lowercase)]-[rand(1, 99)] responding to your distress call. Prepare for boarding." + arrival_message = "[MAIN_SHIP_NAME], this is Elite Freelancer shuttle [pick(GLOB.alphabet_lowercase)][pick(GLOB.alphabet_lowercase)]-[rand(1, 99)] responding to your distress call. Prepare for boarding." if(hostility) objectives = "Ransack the [MAIN_SHIP_NAME] and kill anyone who gets in your way. Do what your Captain says. Ensure your survival at all costs." else @@ -108,7 +108,7 @@ /datum/emergency_call/heavy_mercs/hostile/New() . = ..() hostility = TRUE - arrival_message = "[MAIN_SHIP_NAME], this is Elite Freelancer shuttle [pick(alphabet_lowercase)][pick(alphabet_lowercase)]-[rand(1, 99)] responding to your distress call. Prepare for boarding." + arrival_message = "[MAIN_SHIP_NAME], this is Elite Freelancer shuttle [pick(GLOB.alphabet_lowercase)][pick(GLOB.alphabet_lowercase)]-[rand(1, 99)] responding to your distress call. Prepare for boarding." objectives = "Ransack the [MAIN_SHIP_NAME] and kill anyone who gets in your way. Do what your Captain says. Ensure your survival at all costs." /datum/emergency_call/heavy_mercs/friendly @@ -117,7 +117,7 @@ /datum/emergency_call/heavy_mercs/friendly/New() . = ..() hostility = FALSE - arrival_message = "[MAIN_SHIP_NAME], this is Elite Freelancer shuttle [pick(alphabet_lowercase)][pick(alphabet_lowercase)]-[rand(1, 99)] responding to your distress call. Prepare for boarding." + arrival_message = "[MAIN_SHIP_NAME], this is Elite Freelancer shuttle [pick(GLOB.alphabet_lowercase)][pick(GLOB.alphabet_lowercase)]-[rand(1, 99)] responding to your distress call. Prepare for boarding." objectives = "Help the crew of the [MAIN_SHIP_NAME] in exchange for payment, and choose your payment well. Do what your Captain says. Ensure your survival at all costs." /datum/emergency_call/heavy_mercs/print_backstory(mob/living/carbon/human/H) diff --git a/code/datums/emergency_calls/pmc.dm b/code/datums/emergency_calls/pmc.dm index a06b0cc0c02e..2d21dc768f4a 100644 --- a/code/datums/emergency_calls/pmc.dm +++ b/code/datums/emergency_calls/pmc.dm @@ -34,7 +34,7 @@ leader = mob to_chat(mob, SPAN_ROLE_HEADER("You are a Weyland-Yutani PMC Squad Leader!")) arm_equipment(mob, /datum/equipment_preset/pmc/pmc_leader, TRUE, TRUE) - else if(synths < max_synths && HAS_FLAG(mob.client.prefs.toggles_ert, PLAY_SYNTH) && RoleAuthority.roles_whitelist[mob.ckey] & WHITELIST_SYNTHETIC) + else if(synths < max_synths && HAS_FLAG(mob.client.prefs.toggles_ert, PLAY_SYNTH) && GLOB.RoleAuthority.roles_whitelist[mob.ckey] & WHITELIST_SYNTHETIC) synths++ to_chat(mob, SPAN_ROLE_HEADER("You are a Weyland-Yutani PMC Support Synthetic!")) arm_equipment(mob, /datum/equipment_preset/pmc/synth, TRUE, TRUE) @@ -120,7 +120,7 @@ var/mob/living/carbon/human/H = new(spawn_loc) H.key = M.key if(H.client) - H.client.change_view(world_view_size) + H.client.change_view(GLOB.world_view_size) if(!leader && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_LEADER) && check_timelock(H.client, JOB_SQUAD_LEADER, time_required_for_job)) //First one spawned is always the leader. leader = H diff --git a/code/datums/emergency_calls/tank_crew.dm b/code/datums/emergency_calls/tank_crew.dm index fb437c179e48..f8d20051c244 100644 --- a/code/datums/emergency_calls/tank_crew.dm +++ b/code/datums/emergency_calls/tank_crew.dm @@ -24,11 +24,10 @@ sleep(5) arm_equipment(H, /datum/equipment_preset/uscm/tank/full, TRUE, TRUE) to_chat(H, SPAN_ROLE_HEADER("You are a Vehicle Crewman in the USCM")) - to_chat(H, SPAN_ROLE_BODY("You are here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command.")) + to_chat(H, SPAN_ROLE_BODY("You are here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command.")) to_chat(H, SPAN_BOLDWARNING("If you wish to cryo or ghost upon spawning in, you must ahelp and inform staff so you can be replaced.")) sleep(10) to_chat(H, SPAN_BOLD("Objectives: [objectives]")) GLOB.data_core.manifest_inject(H) //Put people in crew manifest - diff --git a/code/datums/emergency_calls/upp.dm b/code/datums/emergency_calls/upp.dm index 562dac3fe154..80ef111be3e4 100644 --- a/code/datums/emergency_calls/upp.dm +++ b/code/datums/emergency_calls/upp.dm @@ -61,7 +61,7 @@ leader = H arm_equipment(H, /datum/equipment_preset/upp/leader, TRUE, TRUE) to_chat(H, SPAN_ROLE_HEADER("You are an Officer of the Union of Progressive People, a powerful socialist state that rivals the United Americas!")) - else if(synths < max_synths && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_SYNTH) && RoleAuthority.roles_whitelist[H.ckey] & WHITELIST_SYNTHETIC) + else if(synths < max_synths && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_SYNTH) && GLOB.RoleAuthority.roles_whitelist[H.ckey] & WHITELIST_SYNTHETIC) synths++ to_chat(H, SPAN_ROLE_HEADER("You are a Combat Synthetic of the Union of Progressive People, a powerful socialist state that rivals the United Americas!")) arm_equipment(H, /datum/equipment_preset/upp/synth, TRUE, TRUE) diff --git a/code/datums/emergency_calls/upp_commando.dm b/code/datums/emergency_calls/upp_commando.dm index 14c4af46c27b..1bc2b59ba08c 100644 --- a/code/datums/emergency_calls/upp_commando.dm +++ b/code/datums/emergency_calls/upp_commando.dm @@ -1,7 +1,7 @@ //UPP COMMANDOS /datum/emergency_call/upp_commando - name = "UPP Commandos" + name = "UPP Commandos (!DEATHSQUAD!)" mob_max = 6 probability = 0 objectives = "Stealthily assault the ship. Use your silenced weapons, tranquilizers, and night vision to get the advantage on the enemy. Take out the power systems, comms and engine. Stick together and keep a low profile." @@ -51,3 +51,29 @@ addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), H, SPAN_BOLD("Objectives: [objectives]")), 1 SECONDS) +/datum/emergency_call/upp_commando/low_threat + name = "UPP Commandos" + +/datum/emergency_call/upp_commando/create_member(datum/mind/mind, turf/override_spawn_loc) + var/turf/spawn_loc = override_spawn_loc ? override_spawn_loc : get_spawn_point() + + if(!istype(spawn_loc)) + return //Didn't find a useable spawn point. + + var/mob/living/carbon/human/person = new(spawn_loc) + mind.transfer_to(person, TRUE) + + if(!leader && HAS_FLAG(person.client.prefs.toggles_ert, PLAY_LEADER) && check_timelock(person.client, JOB_SQUAD_LEADER, time_required_for_job)) //First one spawned is always the leader. + leader = person + arm_equipment(person, /datum/equipment_preset/upp/commando/leader/low_threat, TRUE, TRUE) + to_chat(person, SPAN_ROLE_HEADER("You are a Commando Team Leader of the Union of Progressive People, a powerful socialist state that rivals the United Americas!")) + else if(medics < max_medics && HAS_FLAG(person.client.prefs.toggles_ert, PLAY_MEDIC) && check_timelock(person.client, JOB_SQUAD_MEDIC, time_required_for_job)) + medics++ + to_chat(person, SPAN_ROLE_HEADER("You are a Commando Medic of the Union of Progressive People, a powerful socialist state that rivals the United Americas!")) + arm_equipment(person, /datum/equipment_preset/upp/commando/medic/low_threat, TRUE, TRUE) + else + to_chat(person, SPAN_ROLE_HEADER("You are a Commando of the Union of Progressive People, a powerful socialist state that rivals the United Americas!")) + arm_equipment(person, /datum/equipment_preset/upp/commando/low_threat, TRUE, TRUE) + print_backstory(person) + + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), person, SPAN_BOLD("Objectives: [objectives]")), 1 SECONDS) diff --git a/code/datums/emergency_calls/whiskey_outpost.dm b/code/datums/emergency_calls/whiskey_outpost.dm index 436e02007c6c..c6a7e4947756 100644 --- a/code/datums/emergency_calls/whiskey_outpost.dm +++ b/code/datums/emergency_calls/whiskey_outpost.dm @@ -28,30 +28,30 @@ if(!leader && HAS_FLAG(mob.client.prefs.toggles_ert, PLAY_LEADER) && check_timelock(mob.client, JOB_SQUAD_LEADER, time_required_for_job)) leader = mob arm_equipment(mob, /datum/equipment_preset/dust_raider/leader, TRUE, TRUE) - to_chat(mob, SPAN_BOLDNOTICE("You are a Squad Leader in the USCM, your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name].")) + to_chat(mob, SPAN_BOLDNOTICE("You are a Squad Leader in the USCM, your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name].")) else if (heavies < max_heavies && HAS_FLAG(mob.client.prefs.toggles_ert, PLAY_HEAVY) && check_timelock(mob.client, JOB_SQUAD_SPECIALIST, time_required_for_job)) heavies++ arm_equipment(mob, /datum/equipment_preset/dust_raider/specialist, TRUE, TRUE) - to_chat(mob, SPAN_BOLDNOTICE("You are a Specialist in the USCM, your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name].")) + to_chat(mob, SPAN_BOLDNOTICE("You are a Specialist in the USCM, your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name].")) else if(smartgunners < max_smartgunners && HAS_FLAG(mob.client.prefs.toggles_ert, PLAY_SMARTGUNNER) && check_timelock(mob.client, JOB_SQUAD_SMARTGUN, time_required_for_job)) smartgunners++ arm_equipment(mob, /datum/equipment_preset/dust_raider/smartgunner, TRUE, TRUE) - to_chat(mob, SPAN_BOLDNOTICE("You are a Smartgunner in the USCM, your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name].")) + to_chat(mob, SPAN_BOLDNOTICE("You are a Smartgunner in the USCM, your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name].")) else if(engineers < max_engineers && HAS_FLAG(mob.client.prefs.toggles_ert, PLAY_ENGINEER) && check_timelock(mob.client, JOB_SQUAD_ENGI, time_required_for_job)) engineers++ arm_equipment(mob, /datum/equipment_preset/dust_raider/engineer, TRUE, TRUE) - to_chat(mob, SPAN_BOLDNOTICE("You are an Engineer in the USCM, your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name].")) + to_chat(mob, SPAN_BOLDNOTICE("You are an Engineer in the USCM, your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name].")) else if (medics < max_medics && HAS_FLAG(mob.client.prefs.toggles_ert, PLAY_MEDIC) && check_timelock(mob.client, JOB_SQUAD_MEDIC, time_required_for_job)) medics++ arm_equipment(mob, /datum/equipment_preset/dust_raider/medic, TRUE, TRUE) - to_chat(mob, SPAN_BOLDNOTICE("You are a Hospital Corpsman in the USCM, your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name].")) + to_chat(mob, SPAN_BOLDNOTICE("You are a Hospital Corpsman in the USCM, your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name].")) else arm_equipment(mob, /datum/equipment_preset/dust_raider/private, TRUE, TRUE) to_chat(mob, SPAN_BOLDNOTICE("You are a Rifleman in the USCM, your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name].")) sleep(10) to_chat(mob, "Objectives: [objectives]") - RoleAuthority.randomize_squad(mob) + GLOB.RoleAuthority.randomize_squad(mob) mob.sec_hud_set_ID() mob.hud_set_squad() diff --git a/code/datums/emergency_calls/xeno_cultists.dm b/code/datums/emergency_calls/xeno_cultists.dm index e5ebf089a9c2..5da5c9c17e59 100644 --- a/code/datums/emergency_calls/xeno_cultists.dm +++ b/code/datums/emergency_calls/xeno_cultists.dm @@ -25,7 +25,7 @@ leader = H to_chat(H, SPAN_ROLE_HEADER("You are the leader of this xeno cult! Bring glory to Queen Mother!")) arm_equipment(H, /datum/equipment_preset/other/xeno_cultist/leader, TRUE, TRUE) - else if(synths < max_synths && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_SYNTH) && RoleAuthority.roles_whitelist[H.ckey] & WHITELIST_SYNTHETIC) + else if(synths < max_synths && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_SYNTH) && GLOB.RoleAuthority.roles_whitelist[H.ckey] & WHITELIST_SYNTHETIC) synths++ to_chat(H, SPAN_ROLE_HEADER("You are the xeno cult's synthetic! Tend to the Hive and the captured hosts, make sure the Hive grows!")) arm_equipment(H, /datum/equipment_preset/synth/survivor/cultist_synth, TRUE, TRUE) diff --git a/code/datums/entities/clans.dm b/code/datums/entities/clans.dm index 8caa538e0e31..916afd18c178 100644 --- a/code/datums/entities/clans.dm +++ b/code/datums/entities/clans.dm @@ -45,8 +45,8 @@ BSQL_PROTECT_DATUM(/datum/entity/clan) /datum/entity_meta/clan_player/on_insert(datum/entity/clan_player/player) player.honor = 0 - player.clan_rank = clan_ranks_ordered[CLAN_RANK_UNBLOODED] - player.permissions = clan_ranks[CLAN_RANK_UNBLOODED].permissions + player.clan_rank = GLOB.clan_ranks_ordered[CLAN_RANK_UNBLOODED] + player.permissions = GLOB.clan_ranks[CLAN_RANK_UNBLOODED].permissions player.save() diff --git a/code/datums/entities/player.dm b/code/datums/entities/player.dm index febeb1fc73a9..e5fa811002a2 100644 --- a/code/datums/entities/player.dm +++ b/code/datums/entities/player.dm @@ -93,7 +93,7 @@ BSQL_PROTECT_DATUM(/datum/entity/player) notes_add(ckey, note_text, admin.mob) else // notes_add already sends a message - message_admins("[key_name_admin(admin.mob)] has edited [ckey]'s [note_categories[note_category]] notes: [sanitize(note_text)]") + message_admins("[key_name_admin(admin.mob)] has edited [ckey]'s [GLOB.note_categories[note_category]] notes: [sanitize(note_text)]") if(!is_confidential && note_category == NOTE_ADMIN && owning_client) to_chat_immediate(owning_client, SPAN_WARNING(FONT_SIZE_LARGE("You have been noted by [key_name_admin(admin.mob, FALSE)]."))) to_chat_immediate(owning_client, SPAN_WARNING(FONT_SIZE_BIG("The note is : [sanitize(note_text)]"))) @@ -235,7 +235,7 @@ BSQL_PROTECT_DATUM(/datum/entity/player) if(job_bans[safe_rank]) continue var/old_rank = check_jobban_path(safe_rank) - jobban_keylist[old_rank][ckey] = ban_text + GLOB.jobban_keylist[old_rank][ckey] = ban_text jobban_savebanfile() add_note("Banned from [total_rank] - [ban_text]", FALSE, NOTE_ADMIN, TRUE, duration) // it is ban related note @@ -570,33 +570,33 @@ BSQL_PROTECT_DATUM(/datum/entity/player) save() /datum/entity/player/proc/migrate_bans() - if(!Banlist) // if Banlist cannot be located for some reason + if(!GLOB.Banlist) // if GLOB.Banlist cannot be located for some reason LoadBans() // try to load the bans - if(!Banlist) // uh oh, can't find bans! + if(!GLOB.Banlist) // uh oh, can't find bans! return var/reason var/expiration var/banned_by - Banlist.cd = "/base" + GLOB.Banlist.cd = "/base" - for (var/A in Banlist.dir) - Banlist.cd = "/base/[A]" + for (var/A in GLOB.Banlist.dir) + GLOB.Banlist.cd = "/base/[A]" - if(ckey != Banlist["key"]) + if(ckey != GLOB.Banlist["key"]) continue - if(Banlist["temp"]) - if (!GetExp(Banlist["minutes"])) + if(GLOB.Banlist["temp"]) + if (!GetExp(GLOB.Banlist["minutes"])) return - if(expiration > Banlist["minutes"]) + if(expiration > GLOB.Banlist["minutes"]) return // found longer ban - reason = Banlist["reason"] - banned_by = Banlist["bannedby"] - expiration = Banlist["minutes"] + reason = GLOB.Banlist["reason"] + banned_by = GLOB.Banlist["bannedby"] + expiration = GLOB.Banlist["minutes"] migrated_bans = TRUE save() @@ -619,13 +619,13 @@ BSQL_PROTECT_DATUM(/datum/entity/player) /datum/entity/player/proc/migrate_jobbans() if(!job_bans) job_bans = list() - for(var/name in RoleAuthority.roles_for_mode) + for(var/name in GLOB.RoleAuthority.roles_for_mode) var/safe_job_name = ckey(name) - if(!jobban_keylist[safe_job_name]) + if(!GLOB.jobban_keylist[safe_job_name]) continue if(!safe_job_name) continue - var/reason = jobban_keylist[safe_job_name][ckey] + var/reason = GLOB.jobban_keylist[safe_job_name][ckey] if(!reason) continue diff --git a/code/datums/entities/player_times.dm b/code/datums/entities/player_times.dm index a6304bd5d874..2bbd4a3bc39e 100644 --- a/code/datums/entities/player_times.dm +++ b/code/datums/entities/player_times.dm @@ -84,7 +84,7 @@ BSQL_PROTECT_DATUM(/datum/entity/player_time) return GLOB.always_state /datum/entity/player/proc/load_timestat_data() - if(!playtime_loaded || !RoleAuthority || LAZYACCESS(playtime_data, "loading")) // Need roleauthority to be up to see which job is xeno-related + if(!playtime_loaded || !GLOB.RoleAuthority || LAZYACCESS(playtime_data, "loading")) // Need roleauthority to be up to see which job is xeno-related return LAZYSET(playtime_data, "loading", TRUE) @@ -118,13 +118,13 @@ BSQL_PROTECT_DATUM(/datum/entity/player_time) LAZYADD(marine_playtimes, list(marine_playtime)) for(var/datum/view_record/playtime/PT in PTs) - var/isxeno = (PT.role_id in RoleAuthority.castes_by_name) + var/isxeno = (PT.role_id in GLOB.RoleAuthority.castes_by_name) var/isOther = (PT.role_id == JOB_OBSERVER) // more maybe eventually if(PT.role_id == JOB_XENOMORPH) continue // Snowflake check, will need to be removed in the future - if(!(PT.role_id in RoleAuthority.roles_by_name) && !isxeno && !isOther) + if(!(PT.role_id in GLOB.RoleAuthority.roles_by_name) && !isxeno && !isOther) continue if(isxeno) diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index 16825ab8a7ba..207310ac34c5 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -166,15 +166,15 @@ /datum/teleport/instant/science/teleportChecks() if(istype(teleatom, /obj/item/disk/nuclear)) // Don't let nuke disks get teleported --NeoFite - teleatom.visible_message(SPAN_DANGER("The [teleatom] bounces off of the portal!")) + teleatom.visible_message(SPAN_DANGER("[teleatom] bounces off of the portal!")) return 0 if(length(teleatom.search_contents_for(/obj/item/disk/nuclear))) if(istype(teleatom, /mob/living)) var/mob/living/MM = teleatom - MM.visible_message(SPAN_DANGER("The [MM] bounces off of the portal!"),SPAN_DANGER("Something you are carrying seems to be unable to pass through the portal. Better drop it if you want to go through.")) + MM.visible_message(SPAN_DANGER("[MM] bounces off of the portal!"),SPAN_DANGER("Something you are carrying seems to be unable to pass through the portal. Better drop it if you want to go through.")) else - teleatom.visible_message(SPAN_DANGER("The [teleatom] bounces off of the portal!")) + teleatom.visible_message(SPAN_DANGER("[teleatom] bounces off of the portal!")) return 0 if(is_admin_level(destination.z)) diff --git a/code/datums/looping_sounds/_looping_sound.dm b/code/datums/looping_sounds/_looping_sound.dm index c6fc23c68eba..11ba15146430 100644 --- a/code/datums/looping_sounds/_looping_sound.dm +++ b/code/datums/looping_sounds/_looping_sound.dm @@ -37,6 +37,15 @@ /// Has the looping started yet? var/loop_started = FALSE + /** + * Let's you make a "loud" sound that "projects." IE you can hear this sound from a further distance away. + * Think of like an air raid siren. They're loud if you're close yeah... but you can hear them from mad far away, bruv + * with a longer "falloff distance." Fixes the extra_range stuff + */ + var/is_sound_projecting = FALSE + ///only applicable to is_sound_projecting: max range till sound volume starts dropping as distance increases + var/falloff_distance = 50 + /* // as of yet unused varen \\ /// How much the sound will be affected by falloff per tile. @@ -130,19 +139,18 @@ sound_to_play.channel = get_free_channel() sound_to_play.volume = volume_override || volume //Use volume as fallback if theres no override SEND_SOUND(parent, sound_to_play) - else - playsound( - parent, - sound_to_play, - volume, - vary, - extra_range//, - // falloff_exponent = falloff_exponent, - // pressure_affected = pressure_affected, - // ignore_walls = ignore_walls, - // falloff_distance = falloff_distance, - // use_reverb = use_reverb - ) + return + if (is_sound_projecting) + playsound(parent, sound_to_play, volume, vary, extra_range, VOLUME_SFX, 0, 0, falloff_distance) + return + + playsound( + parent, + sound_to_play, + volume, + vary, + extra_range + ) /// Returns the sound we should now be playing. /datum/looping_sound/proc/get_sound(_mid_sounds) diff --git a/code/datums/looping_sounds/misc_sounds.dm b/code/datums/looping_sounds/misc_sounds.dm new file mode 100644 index 000000000000..6411b3f51f4a --- /dev/null +++ b/code/datums/looping_sounds/misc_sounds.dm @@ -0,0 +1,3 @@ +/datum/looping_sound/looping_launch_announcement_alarm + mid_sounds = list('sound/vehicles/Dropships/single_alarm_brr_dropship_1.ogg' = 1) + start_sound = list('sound/vehicles/Dropships/single_alarm_brr_dropship_1.ogg' = 1) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 9e8279a843a4..205032f46a97 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -48,7 +48,7 @@ if(current) current.mind = null //remove ourself from our old body's mind variable - nanomanager.user_transferred(current, new_character) // transfer active NanoUI instances to new user + SSnano.nanomanager.user_transferred(current, new_character) // transfer active NanoUI instances to new user if(key) if(new_character.key != key) @@ -68,7 +68,7 @@ SSround_recording.recorder.update_key(new_character) if(new_character.client) new_character.client.init_verbs() - new_character.client.change_view(world_view_size) //reset view range to default. + new_character.client.change_view(GLOB.world_view_size) //reset view range to default. new_character.client.pixel_x = 0 new_character.client.pixel_y = 0 if(usr && usr.open_uis) diff --git a/code/datums/mob_hud.dm b/code/datums/mob_hud.dm index d401a4e7f91d..e4ec3acc1410 100644 --- a/code/datums/mob_hud.dm +++ b/code/datums/mob_hud.dm @@ -1,7 +1,7 @@ /* HUD DATUMS */ //GLOBAL HUD LIST -var/list/datum/mob_hud/huds = list( +GLOBAL_LIST_INIT_TYPED(huds, /datum/mob_hud, list( MOB_HUD_SECURITY_BASIC = new /datum/mob_hud/security/basic(), MOB_HUD_SECURITY_ADVANCED = new /datum/mob_hud/security/advanced(), MOB_HUD_MEDICAL_BASIC = new /datum/mob_hud/medical/basic(), @@ -19,7 +19,7 @@ var/list/datum/mob_hud/huds = list( MOB_HUD_FACTION_PMC = new /datum/mob_hud/faction/pmc(), MOB_HUD_HUNTER = new /datum/mob_hud/hunter_hud(), MOB_HUD_HUNTER_CLAN = new /datum/mob_hud/hunter_clan() - ) + )) /datum/mob_hud var/list/mob/hudmobs = list() //list of all mobs which display this hud @@ -220,17 +220,17 @@ var/list/datum/mob_hud/huds = list( return /mob/hologram/queen/add_to_all_mob_huds() - var/datum/mob_hud/hud = huds[MOB_HUD_XENO_STATUS] + var/datum/mob_hud/hud = GLOB.huds[MOB_HUD_XENO_STATUS] hud.add_to_hud(src) /mob/living/carbon/human/add_to_all_mob_huds() - for(var/datum/mob_hud/hud in huds) + for(var/datum/mob_hud/hud in GLOB.huds) if(istype(hud, /datum/mob_hud/xeno)) //this one is xeno only continue hud.add_to_hud(src) /mob/living/carbon/xenomorph/add_to_all_mob_huds() - for(var/datum/mob_hud/hud in huds) + for(var/datum/mob_hud/hud in GLOB.huds) if(!istype(hud, /datum/mob_hud/xeno)) continue hud.add_to_hud(src) @@ -240,17 +240,17 @@ var/list/datum/mob_hud/huds = list( return /mob/hologram/queen/remove_from_all_mob_huds() - var/datum/mob_hud/hud = huds[MOB_HUD_XENO_STATUS] + var/datum/mob_hud/hud = GLOB.huds[MOB_HUD_XENO_STATUS] hud.remove_from_hud(src) /mob/living/carbon/human/remove_from_all_mob_huds() - for(var/datum/mob_hud/hud in huds) + for(var/datum/mob_hud/hud in GLOB.huds) if(istype(hud, /datum/mob_hud/xeno)) continue hud.remove_from_hud(src) /mob/living/carbon/xenomorph/remove_from_all_mob_huds() - for(var/datum/mob_hud/hud in huds) + for(var/datum/mob_hud/hud in GLOB.huds) if(istype(hud, /datum/mob_hud/xeno)) hud.remove_from_hud(src) hud.remove_hud_from(src, src) @@ -258,14 +258,14 @@ var/list/datum/mob_hud/huds = list( hud.remove_hud_from(src, src) if (xeno_hostile_hud) xeno_hostile_hud = FALSE - var/datum/mob_hud/hostile_hud = huds[MOB_HUD_XENO_HOSTILE] + var/datum/mob_hud/hostile_hud = GLOB.huds[MOB_HUD_XENO_HOSTILE] hostile_hud.remove_hud_from(src, src) /mob/proc/refresh_huds(mob/source_mob) var/mob/M = source_mob ? source_mob : src - for(var/datum/mob_hud/hud in huds) + for(var/datum/mob_hud/hud in GLOB.huds) if(M in hud.hudusers) hud.refresh_hud(src, hud.hudusers[M]) @@ -273,7 +273,7 @@ var/list/datum/mob_hud/huds = list( //called when a human changes suit sensors /mob/living/carbon/human/proc/update_suit_sensors() - var/datum/mob_hud/medical/basic/B = huds[MOB_HUD_MEDICAL_BASIC] + var/datum/mob_hud/medical/basic/B = GLOB.huds[MOB_HUD_MEDICAL_BASIC] B.update_suit_sensors(src) //called when a human changes health @@ -283,6 +283,12 @@ var/list/datum/mob_hud/huds = list( return /mob/living/carbon/xenomorph/med_hud_set_health() + if(QDELETED(src)) + return + + if(!(HEALTH_HUD_XENO in hud_list)) + CRASH("hud_list lacks HEALTH_HUD_XENO despite not being deleted in med_hud_set_health()") + var/image/holder = hud_list[HEALTH_HUD_XENO] var/health_hud_type = "xenohealth" @@ -666,11 +672,11 @@ var/list/datum/mob_hud/huds = list( /mob/proc/hud_set_hunter() return -var/global/image/hud_icon_hunter_gear -var/global/image/hud_icon_hunter_hunted -var/global/image/hud_icon_hunter_dishonored -var/global/image/hud_icon_hunter_honored -var/global/image/hud_icon_hunter_thralled +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) /mob/living/carbon/hud_set_hunter() @@ -678,27 +684,27 @@ var/global/image/hud_icon_hunter_thralled holder.icon_state = "hudblank" holder.overlays.Cut() if(hunter_data.hunted) - if(!hud_icon_hunter_hunted) - hud_icon_hunter_hunted = image('icons/mob/hud/hud_yautja.dmi', src, "hunter_hunted") - holder.overlays += hud_icon_hunter_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(!hud_icon_hunter_dishonored) - hud_icon_hunter_dishonored = image('icons/mob/hud/hud_yautja.dmi', src, "hunter_dishonored") - holder.overlays += hud_icon_hunter_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(!hud_icon_hunter_honored) - hud_icon_hunter_honored = image('icons/mob/hud/hud_yautja.dmi', src, "hunter_honored") - holder.overlays += hud_icon_hunter_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(!hud_icon_hunter_thralled) - hud_icon_hunter_thralled = image('icons/mob/hud/hud_yautja.dmi', src, "hunter_thralled") - holder.overlays += hud_icon_hunter_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(!hud_icon_hunter_gear) - hud_icon_hunter_gear = image('icons/mob/hud/hud_yautja.dmi', src, "hunter_gear") - holder.overlays += hud_icon_hunter_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 @@ -708,18 +714,18 @@ var/global/image/hud_icon_hunter_thralled holder.overlays.Cut() holder.pixel_x = -18 if(hunter_data.hunted) - if(!hud_icon_hunter_hunted) - hud_icon_hunter_hunted = image('icons/mob/hud/hud_yautja.dmi', src, "hunter_hunted") - holder.overlays += hud_icon_hunter_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(!hud_icon_hunter_dishonored) - hud_icon_hunter_dishonored = image('icons/mob/hud/hud_yautja.dmi', src, "hunter_dishonored") - holder.overlays += hud_icon_hunter_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(!hud_icon_hunter_honored) - hud_icon_hunter_honored = image('icons/mob/hud/hud_yautja.dmi', src, "hunter_honored") - holder.overlays += hud_icon_hunter_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 @@ -727,26 +733,26 @@ var/global/image/hud_icon_hunter_thralled /mob/proc/hud_set_order() return -var/global/image/hud_icon_hudmove -var/global/image/hud_icon_hudhold -var/global/image/hud_icon_hudfocus +GLOBAL_DATUM(hud_icon_hudmove, /image) +GLOBAL_DATUM(hud_icon_hudhold, /image) +GLOBAL_DATUM(hud_icon_hudfocus, /image) // 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(!hud_icon_hudmove) - hud_icon_hudmove = image('icons/mob/hud/marine_hud.dmi', src, "hudmove") - holder.overlays += hud_icon_hudmove + 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(!hud_icon_hudhold) - hud_icon_hudhold = image('icons/mob/hud/marine_hud.dmi', src, "hudhold") - holder.overlays += hud_icon_hudhold + 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(!hud_icon_hudfocus) - hud_icon_hudfocus = image('icons/mob/hud/marine_hud.dmi', src, "hudfocus") - holder.overlays += hud_icon_hudfocus + 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 @@ -797,6 +803,6 @@ var/global/image/hud_icon_hudfocus if (tag_found) tag_holder.overlays += image('icons/mob/hud/hud.dmi', src, "prae_tag") - var/freeze_found = HAS_TRAIT(src, TRAIT_IMMOBILIZED) && body_position == STANDING_UP // Don't display roots on targets down due to eg. Knockdowns, Knockouts, SSD, resting, and so on + 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") diff --git a/code/datums/modules.dm b/code/datums/modules.dm deleted file mode 100644 index 4dd47497ffcc..000000000000 --- a/code/datums/modules.dm +++ /dev/null @@ -1,62 +0,0 @@ -// module datum. -// this is per-object instance, and shows the condition of the modules in the object -// actual modules needed is referenced through modulestypes and the object type - -/datum/module - var/status // bits set if working, 0 if broken - var/installed // bits set if installed, 0 if missing - -// moduletypes datum -// this is per-object type, and shows the modules needed for a type of object - -/datum/moduletypes - var/list/modcount = list() // assoc list of the count of modules for a type - - -var/list/modules = list( // global associative list - /obj/structure/machinery/power/apc = "card_reader,power_control,id_auth,cell_power,cell_charge") - - -/datum/module/New(obj/O) - - var/type = O.type // the type of the creating object - - var/mneed = mods.inmodlist(type) // find if this type has modules defined - - if(!mneed) // not found in module list? - qdel(src) // delete self, thus ending proc - - var/needed = mods.getbitmask(type) // get a bitmask for the number of modules in this object - status = needed - installed = needed - -/datum/moduletypes/proc/addmod(type, modtextlist) - modules += type // index by type text - modules[type] = modtextlist - -/datum/moduletypes/proc/inmodlist(type) - return type in modules - -/datum/moduletypes/proc/getbitmask(type) - var/count = modcount[type] - if(count) - return 2**count-1 - - var/modtext = modules[type] - var/num = 1 - var/pos = 1 - - while(1) - pos = findtext(modtext, ",", pos, 0) - if(!pos) - break - else - pos++ - num++ - - modcount += type - modcount[type] = num - - return 2**num-1 - - diff --git a/code/datums/origin/origin.dm b/code/datums/origin/origin.dm index 4bbd8b6505b5..46027a49941a 100644 --- a/code/datums/origin/origin.dm +++ b/code/datums/origin/origin.dm @@ -3,7 +3,7 @@ var/desc = "You were born somewhere, someplace. The area is known for doing things, you think." /datum/origin/proc/generate_human_name(gender = MALE) - return pick(gender == MALE ? first_names_male : first_names_female) + " " + pick(last_names) + return pick(gender == MALE ? GLOB.first_names_male : GLOB.first_names_female) + " " + pick(GLOB.last_names) /// Return null if the name is correct, otherwise return a string containing the error message /datum/origin/proc/validate_name(name_to_check) diff --git a/code/datums/origin/upp.dm b/code/datums/origin/upp.dm index f684410d59bf..8346657c5020 100644 --- a/code/datums/origin/upp.dm +++ b/code/datums/origin/upp.dm @@ -10,16 +10,16 @@ if(prob(40)) first_name = "[capitalize(randomly_generate_chinese_word(1))]" else - first_name = "[pick(first_names_male_upp)]" + first_name = "[pick(GLOB.first_names_male_upp)]" else if(prob(40)) first_name = "[capitalize(randomly_generate_chinese_word(1))]" else - first_name = "[pick(first_names_female_upp)]" + first_name = "[pick(GLOB.first_names_female_upp)]" if(prob(35)) last_name = "[capitalize(randomly_generate_chinese_word(pick(20;1, 80;2)))]" else - last_name = "[pick(last_names_upp)]" + last_name = "[pick(GLOB.last_names_upp)]" return first_name + " " + last_name diff --git a/code/datums/origin/uscm.dm b/code/datums/origin/uscm.dm index 8021ed3fd3a8..9608537bdf3f 100644 --- a/code/datums/origin/uscm.dm +++ b/code/datums/origin/uscm.dm @@ -28,7 +28,7 @@ desc = "You were a product of an experimental military programme that sought to breed the perfect supersoldier. In some aspects, they've succeeded." /datum/origin/uscm/aw/generate_human_name(gender = MALE) - return pick(gender == MALE ? first_names_male : first_names_female) + " A.W. " + pick(weapon_surnames) + return pick(gender == MALE ? GLOB.first_names_male : GLOB.first_names_female) + " A.W. " + pick(GLOB.weapon_surnames) /datum/origin/uscm/aw/validate_name(name_to_check) if(!findtext(name_to_check, "A.W. ")) diff --git a/code/datums/paygrades/factions/civillian/civilian.dm b/code/datums/paygrades/factions/civillian/civilian.dm deleted file mode 100644 index 2c2aa5feac1c..000000000000 --- a/code/datums/paygrades/factions/civillian/civilian.dm +++ /dev/null @@ -1,30 +0,0 @@ -/datum/paygrade/civilian - name = "Civilian Paygrade" - pay_multiplier = 0.5 // civvies are poor - -/datum/paygrade/civilian/civilian - paygrade = "C" - name = "Civilian" - -/datum/paygrade/civilian/nurse - paygrade = "CN" - name = "Nurse" - prefix = "Nrs." - -/datum/paygrade/civilian/doctor - paygrade = "CD" - name = "Doctor" - prefix = "Dr." - pay_multiplier = 0.75 - -/datum/paygrade/civilian/professor - paygrade = "CCMO" - name = "Professor" - prefix = "Prof." - pay_multiplier = 1 - -/datum/paygrade/civillian/representative - paygrade = "CR" - name = "Representative" - prefix = "Rep." - pay_multiplier = 1 diff --git a/code/datums/paygrades/factions/other/civilian.dm b/code/datums/paygrades/factions/other/civilian.dm new file mode 100644 index 000000000000..6587a82a54d6 --- /dev/null +++ b/code/datums/paygrades/factions/other/civilian.dm @@ -0,0 +1,52 @@ +/datum/paygrade/civilian + name = "Civilian Paygrade" + pay_multiplier = 0.5 // civvies are poor + +/datum/paygrade/civilian/civilian + paygrade = PAY_SHORT_CIV + name = "Civilian" + prefix = "C" + +/datum/paygrade/civilian/nurse + paygrade = PAY_SHORT_CNUR + name = "Nurse" + prefix = "Nrs." + +/datum/paygrade/civilian/doctor + paygrade = PAY_SHORT_CDOC + name = "Doctor" + prefix = "Dr." + pay_multiplier = 0.75 + +/datum/paygrade/civilian/professor + paygrade = PAY_SHORT_CCMO + name = "Professor" + prefix = "Prof." + pay_multiplier = 1 + +/datum/paygrade/civillian/representative + paygrade = PAY_SHORT_CREP + name = "Representative" + prefix = "Rep." + pay_multiplier = 1 + +/datum/paygrade/civillian/officer + paygrade = PAY_SHORT_CPO + name = "Officer" + prefix = "Off." + pay_multiplier = 0.66 + +/datum/paygrade/civillian/officer/senior + paygrade = PAY_SHORT_CSPO + name = "Senior Officer" + prefix = "Sr. Off." + pay_multiplier = 0.8 + +/datum/paygrade/civilian/rebel + paygrade = PAY_SHORT_REB + name = "Rebel" + +/datum/paygrade/civilian/rebel/leader + paygrade = PAY_SHORT_REBC + name = "Rebel Commander" + prefix = "CMDR." diff --git a/code/datums/paygrades/factions/other/cmb.dm b/code/datums/paygrades/factions/other/cmb.dm index a4b656d8692d..eeeb061ea335 100644 --- a/code/datums/paygrades/factions/other/cmb.dm +++ b/code/datums/paygrades/factions/other/cmb.dm @@ -3,78 +3,29 @@ pay_multiplier = 1.4 // Government work. Nice benefits. /datum/paygrade/cmb/standard - paygrade = "GS-9" + paygrade = PAY_SHORT_CMBD name = "CMB Deputy" prefix = "Dep." /datum/paygrade/cmb/leader - paygrade = "GS-13" + paygrade = PAY_SHORT_CMBM name = "CMB Marshal" prefix = "Marshal" /datum/paygrade/cmb/syn - paygrade = "GS-C.9" + paygrade = PAY_SHORT_CMBS name = "CMB Investigative Synthetic" -/datum/paygrade/cmb/liaison - paygrade = "GS-6" +/datum/paygrade/cmb/icc + paygrade = PAY_SHORT_ICCA + name = "Interstellar Commerce Commission Agent" + prefix = "Agent" + +/datum/paygrade/cmb/icc/liaison + paygrade = PAY_SHORT_ICCL name = "Interstellar Commerce Commission Corporate Liaison" prefix = "Exec." /datum/paygrade/cmb/observer - paygrade = "GS-3" + paygrade = PAY_SHORT_IHRO name = "Interstellar Human Rights Observer" -/datum/paygrade/marine - name = "Marine Paygrade" - rank_pin = /obj/item/clothing/accessory/ranks/marine - pay_multiplier = 1 - -// ENLISTED PAYGRADES - -/datum/paygrade/marine/e1 - paygrade = "ME1" - name = "Private" - prefix = "PVT" - rank_pin = /obj/item/clothing/accessory/ranks/marine/e1 - ranking = 0 - pay_multiplier = 0.8 - -/datum/paygrade/marine/e2 - paygrade = "ME2" - name = "Private First Class" - prefix = "PFC" - rank_pin = /obj/item/clothing/accessory/ranks/marine/e2 - ranking = 1 - pay_multiplier = 1 // the default. - -/datum/paygrade/marine/e3 - paygrade = "ME3" - name = "Lance Corporal" - prefix = "LCpl" - rank_pin = /obj/item/clothing/accessory/ranks/marine/e3 - ranking = 2 - pay_multiplier = 1.4 - -/datum/paygrade/marine/e4 - paygrade = "ME4" - name = "Corporal" - prefix = "Cpl" - rank_pin = /obj/item/clothing/accessory/ranks/marine/e4 - ranking = 3 - pay_multiplier = 1.6 - -/datum/paygrade/marine/e5 - paygrade = "ME5" - name = "Sergeant" - prefix = "Sgt" - rank_pin = /obj/item/clothing/accessory/ranks/marine/e5 - ranking = 4 - pay_multiplier = 1.8 - -/datum/paygrade/marine/e6 - paygrade = "ME6" - name = "Staff Sergeant" - prefix = "SSgt" - rank_pin = /obj/item/clothing/accessory/ranks/marine/e6 - ranking = 5 - pay_multiplier = 2 diff --git a/code/datums/paygrades/factions/other/dutch_dozen.dm b/code/datums/paygrades/factions/other/dutch_dozen.dm index 9b8bd7e4f8c4..8877bd11afbb 100644 --- a/code/datums/paygrades/factions/other/dutch_dozen.dm +++ b/code/datums/paygrades/factions/other/dutch_dozen.dm @@ -1,33 +1,33 @@ /datum/paygrade/dutch name = "Dutch Paygrade" pay_multiplier = 5 + fprefix = "DTC." /datum/paygrade/dutch/standard - paygrade = "DTC" + paygrade = PAY_SHORT_DTC name = "Dutch's Dozen Standard Mercenary" - prefix = "DTC." /datum/paygrade/dutch/medic - paygrade = "DTCM" + paygrade = PAY_SHORT_DTCM name = "Dutch's Dozen Medic" - prefix = "DTC MED." + prefix = "MED." pay_multiplier = 6 /datum/paygrade/dutch/specialist_flamer - paygrade = "DTCF" + paygrade = PAY_SHORT_DTCF name = "Dutch's Dozen Flamethrower Specialist" - prefix = "DTC SPC." + prefix = "SPC." pay_multiplier = 6 /datum/paygrade/dutch/specialist_minigunner - paygrade = "DTCMG" - name = "Dutch's Dozen Medic" - prefix = "DTC SPC." + paygrade = PAY_SHORT_DTCMG + name = "Dutch's Dozen Machinegunner" + prefix = "SPC." pay_multiplier = 6 /datum/paygrade/dutch/arnold - paygrade = "ARN" - name = "Arnold" - prefix = "DTC LDR." + paygrade = PAY_SHORT_DTCA + name = "Major" + prefix = "LDR." pay_multiplier = 9 diff --git a/code/datums/paygrades/factions/other/misc.dm b/code/datums/paygrades/factions/other/misc.dm index 30865228d3af..04e522580b50 100644 --- a/code/datums/paygrades/factions/other/misc.dm +++ b/code/datums/paygrades/factions/other/misc.dm @@ -1,9 +1,9 @@ -/datum/paygrade/misc/operator +/datum/paygrade/misc/operative name = "Operative" - paygrade = "O" + paygrade = PAY_SHORT_OPR pay_multiplier = 1 //???? /datum/paygrade/misc/synth name = "Synthetic" - paygrade = "SYN" + paygrade = PAY_SHORT_SYN pay_multiplier = 1 diff --git a/code/datums/paygrades/factions/upp/upp.dm b/code/datums/paygrades/factions/upp/upp.dm index a1363383ad55..8670f99269dc 100644 --- a/code/datums/paygrades/factions/upp/upp.dm +++ b/code/datums/paygrades/factions/upp/upp.dm @@ -5,115 +5,115 @@ //UPP Enlisted /datum/paygrade/upp/ue0 - paygrade = "UE0" + paygrade = PAY_SHORT_UEC name = "Conscript" pay_multiplier = 0.05 /datum/paygrade/upp/ue1 - paygrade = "UE1" + paygrade = PAY_SHORT_UE1 name = "Private" prefix = "PVT." /datum/paygrade/upp/ue2 - paygrade = "UE2" + paygrade = PAY_SHORT_UE2 name = "Private First Class" prefix = "PFC." pay_multiplier = 0.2 /datum/paygrade/upp/ue3 - paygrade = "UE3" + paygrade = PAY_SHORT_UE3 name = "Korporal" prefix = "Kpl." pay_multiplier = 0.3 /datum/paygrade/upp/ue4 - paygrade = "UE4" + paygrade = PAY_SHORT_UE4 name = "Junior Serzhant" prefix = "JrSzh." pay_multiplier = 0.5 /datum/paygrade/upp/ue5 - paygrade = "UE5" + paygrade = PAY_SHORT_UE5 name = "Serzhant" prefix = "Szh." pay_multiplier = 0.7 /datum/paygrade/upp/ue6 - paygrade = "UE6" + paygrade = PAY_SHORT_UE6 name = "Master Serzhant" prefix = "MSzh." pay_multiplier = 0.9 //UPP Commandos /datum/paygrade/upp/uc1 - paygrade = "UC1" + paygrade = PAY_SHORT_UC1 name = "Junior Kommando" prefix = "JKdo." pay_multiplier = 1.5 /datum/paygrade/upp/uc2 - paygrade = "UC2" + paygrade = PAY_SHORT_UC2 name = "2nd Kommando" prefix = "2ndKdo." pay_multiplier = 2 /datum/paygrade/upp/uc3 - paygrade = "UC3" + paygrade = PAY_SHORT_UC3 name = "1st Kommando" prefix = "1stKdo." pay_multiplier = 2.5 //UPP Officers /datum/paygrade/upp/uo1 - paygrade = "UO1" + paygrade = PAY_SHORT_UO1 name = "Leytenant" prefix = "Lt." pay_multiplier = 1.25 /datum/paygrade/upp/uo2 - paygrade = "UO2" + paygrade = PAY_SHORT_UO2 name = "Senior Leytenant" prefix = "Sr. LT." pay_multiplier = 1.5 /datum/paygrade/upp/uo3 - paygrade = "UO3" + paygrade = PAY_SHORT_UO3 name = "Kapitan" prefix = "Kpt." pay_multiplier = 2 /datum/paygrade/upp/uo4 - paygrade = "UO4" - name = "Mayjor." + paygrade = PAY_SHORT_UO4 + name = "Mayjor" prefix = "May." pay_multiplier = 2.5 /datum/paygrade/upp/uo5 - paygrade = "UO5" + paygrade = PAY_SHORT_UO5 name = "Leytenant Kolonel" prefix = "Lt. Kol." pay_multiplier = 3 /datum/paygrade/upp/uo6 - paygrade = "UO6" + paygrade = PAY_SHORT_UO6 name = "Kolonel" prefix = "Kol." pay_multiplier = 4 /datum/paygrade/upp/uo7 - paygrade = "UO7" + paygrade = PAY_SHORT_UO7 name = "Mayjor General" prefix = "May. Gen." pay_multiplier = 5 /datum/paygrade/upp/uo8 - paygrade = "UO8" + paygrade = PAY_SHORT_UO8 name = "Leytenant General" prefix = "Lt. Gen." pay_multiplier = 6 /datum/paygrade/upp/uo9 - paygrade = "UO9" + paygrade = PAY_SHORT_UO9 name = "Army General" prefix = "Gen." pay_multiplier = 7 diff --git a/code/datums/paygrades/factions/uscm/marine.dm b/code/datums/paygrades/factions/uscm/marine.dm index e351311e65ee..7d315f364025 100644 --- a/code/datums/paygrades/factions/uscm/marine.dm +++ b/code/datums/paygrades/factions/uscm/marine.dm @@ -6,7 +6,7 @@ // ENLISTED PAYGRADES /datum/paygrade/marine/e1 - paygrade = "ME1" + paygrade = PAY_SHORT_ME1 name = "Private" prefix = "PVT" rank_pin = /obj/item/clothing/accessory/ranks/marine/e1 @@ -14,7 +14,7 @@ pay_multiplier = 1.6 /datum/paygrade/marine/e2 - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 name = "Private First Class" prefix = "PFC" rank_pin = /obj/item/clothing/accessory/ranks/marine/e2 @@ -22,7 +22,7 @@ pay_multiplier = 1.7 /datum/paygrade/marine/e3 - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 name = "Lance Corporal" prefix = "LCpl" rank_pin = /obj/item/clothing/accessory/ranks/marine/e3 @@ -30,7 +30,7 @@ pay_multiplier = 1.9 /datum/paygrade/marine/e4 - paygrade = "ME4" + paygrade = PAY_SHORT_ME4 name = "Corporal" prefix = "Cpl" rank_pin = /obj/item/clothing/accessory/ranks/marine/e4 @@ -38,7 +38,7 @@ pay_multiplier = 2.1 /datum/paygrade/marine/e5 - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 name = "Sergeant" prefix = "Sgt" rank_pin = /obj/item/clothing/accessory/ranks/marine/e5 @@ -46,7 +46,7 @@ pay_multiplier = 2.2 /datum/paygrade/marine/e6 - paygrade = "ME6" + paygrade = PAY_SHORT_ME6 name = "Staff Sergeant" prefix = "SSgt" rank_pin = /obj/item/clothing/accessory/ranks/marine/e6 @@ -54,7 +54,7 @@ pay_multiplier = 2.4 /datum/paygrade/marine/e7 - paygrade = "ME7" + paygrade = PAY_SHORT_ME7 name = "Gunnery Sergeant" prefix = "GySgt" rank_pin = /obj/item/clothing/accessory/ranks/marine/e7 @@ -62,7 +62,7 @@ pay_multiplier = 2.75 /datum/paygrade/marine/e8 - paygrade = "ME8" + paygrade = PAY_SHORT_ME8 name = "Master Sergeant" prefix = "MSgt" rank_pin = /obj/item/clothing/accessory/ranks/marine/e8 @@ -70,7 +70,7 @@ pay_multiplier = 2.75 /datum/paygrade/marine/e8e - paygrade = "ME8E" + paygrade = PAY_SHORT_ME8E name = "First Sergeant" prefix = "1Sgt" rank_pin = /obj/item/clothing/accessory/ranks/marine/e8e @@ -78,7 +78,7 @@ pay_multiplier = 2.75 /datum/paygrade/marine/e9 - paygrade = "ME9" + paygrade = PAY_SHORT_ME9 name = "Master Gunnery Sergeant" prefix = "MGySgt" rank_pin = /obj/item/clothing/accessory/ranks/marine/e9 @@ -86,7 +86,7 @@ pay_multiplier = 3 /datum/paygrade/marine/e9e - paygrade = "ME9E" + paygrade = PAY_SHORT_ME9E name = "Sergeant Major" prefix = "SgtMaj" rank_pin = /obj/item/clothing/accessory/ranks/marine/e9e @@ -94,7 +94,7 @@ pay_multiplier = 3 /datum/paygrade/marine/e9c - paygrade = "ME9C" + paygrade = PAY_SHORT_ME9C name = "Sergeant Major of the Colonial Marine Corps" prefix = "SMCMC" rank_pin = /obj/item/clothing/accessory/ranks/marine/e9c @@ -104,7 +104,7 @@ // COMMISSIONED PAYGRADES /datum/paygrade/marine/o1 - paygrade = "MO1" + paygrade = PAY_SHORT_MO1 name = "Second Lieutenant" prefix = "2ndLt" rank_pin = /obj/item/clothing/accessory/ranks/marine/o1 @@ -112,7 +112,7 @@ pay_multiplier = 3 /datum/paygrade/marine/o2 - paygrade = "MO2" + paygrade = PAY_SHORT_MO2 name = "First Lieutenant" prefix = "1stLt" rank_pin = /obj/item/clothing/accessory/ranks/marine/o2 @@ -120,7 +120,7 @@ pay_multiplier = 3.2 /datum/paygrade/marine/o3 - paygrade = "MO3" + paygrade = PAY_SHORT_MO3 name = "Captain" prefix = "Capt" rank_pin = /obj/item/clothing/accessory/ranks/marine/o3 @@ -128,7 +128,7 @@ pay_multiplier = 4 /datum/paygrade/marine/o4 - paygrade = "MO4" + paygrade = PAY_SHORT_MO4 name = "Major" prefix = "Maj" rank_pin = /obj/item/clothing/accessory/ranks/marine/o4 @@ -136,7 +136,7 @@ pay_multiplier = 4 /datum/paygrade/marine/o5 - paygrade = "MO5" + paygrade = PAY_SHORT_MO5 name = "Lieutenant Colonel" prefix = "LtCol" rank_pin = /obj/item/clothing/accessory/ranks/marine/o5 @@ -145,7 +145,7 @@ //Platoon Commander /datum/paygrade/marine/o6 - paygrade = "MO6" + paygrade = PAY_SHORT_MO6 name = "Colonel" prefix = "Col" rank_pin = /obj/item/clothing/accessory/ranks/marine/o6 @@ -153,7 +153,7 @@ pay_multiplier = 4.4 /datum/paygrade/marine/o6e - paygrade = "MO6E" + paygrade = PAY_SHORT_MO6E name = "Senior Colonel" prefix = "Snr Col." rank_pin = /obj/item/clothing/accessory/ranks/marine/o6e @@ -161,7 +161,7 @@ pay_multiplier = 4.6 /datum/paygrade/marine/o6c - paygrade = "MO6C" + paygrade = PAY_SHORT_MO6C name = "Division Colonel" prefix = "Div Col." rank_pin = /obj/item/clothing/accessory/ranks/marine/o6c @@ -170,7 +170,7 @@ //High Command /datum/paygrade/marine/o7 - paygrade = "MO7" + paygrade = PAY_SHORT_MO7 name = "Brigadier General" prefix = "BGen" rank_pin = /obj/item/clothing/accessory/ranks/marine/o7 @@ -178,7 +178,7 @@ pay_multiplier = 6 /datum/paygrade/marine/o8 - paygrade = "MO8" + paygrade = PAY_SHORT_MO8 name = "Major General" prefix = "MajGen" rank_pin = /obj/item/clothing/accessory/ranks/marine/o8 @@ -186,7 +186,7 @@ pay_multiplier = 6.2 /datum/paygrade/marine/o9 - paygrade = "MO9" + paygrade = PAY_SHORT_MO9 name = "Lieutenant General" prefix = "LtGen" rank_pin = /obj/item/clothing/accessory/ranks/marine/o9 @@ -194,7 +194,7 @@ pay_multiplier = 6.4 /datum/paygrade/marine/o10 - paygrade = "MO10" + paygrade = PAY_SHORT_MO10 name = "General" prefix = "Gen" rank_pin = /obj/item/clothing/accessory/ranks/marine/o10 @@ -202,7 +202,7 @@ pay_multiplier = 6.6 /datum/paygrade/marine/o10c - paygrade = "MO10C" + paygrade = PAY_SHORT_MO10C name = "Assistant Commandant of the Marine Corps" prefix = "ACMC" rank_pin = /obj/item/clothing/accessory/ranks/marine/o10c @@ -210,7 +210,7 @@ pay_multiplier = 6.8 /datum/paygrade/marine/o10s - paygrade = "MO10S" + paygrade = PAY_SHORT_MO10S name = "Commandant of the Marine Corps" prefix = "CMC" rank_pin = /obj/item/clothing/accessory/ranks/marine/o10c diff --git a/code/datums/paygrades/factions/uscm/navy.dm b/code/datums/paygrades/factions/uscm/navy.dm index 7e648a75bac2..9e22c72fe566 100644 --- a/code/datums/paygrades/factions/uscm/navy.dm +++ b/code/datums/paygrades/factions/uscm/navy.dm @@ -6,77 +6,77 @@ // ENLISTED PAYGRADES /datum/paygrade/navy/e1 - paygrade = "NE1" + paygrade = PAY_SHORT_NE1 name = "Seaman Recruit" prefix = "SR." rank_pin = /obj/item/clothing/accessory/ranks/navy/e1 ranking = 0 /datum/paygrade/navy/e2 - paygrade = "NE2" + paygrade = PAY_SHORT_NE2 name = "Seaman Apprentice" prefix = "SA." rank_pin = /obj/item/clothing/accessory/ranks/navy/e2 ranking = 1 /datum/paygrade/navy/e3 - paygrade = "NE3" + paygrade = PAY_SHORT_NE3 name = "Seaman" prefix = "SN." rank_pin = /obj/item/clothing/accessory/ranks/navy/e3 ranking = 2 /datum/paygrade/navy/e4 - paygrade = "NE4" + paygrade = PAY_SHORT_NE4 name = "Petty Officer 3rd Class" prefix = "PO1." rank_pin = /obj/item/clothing/accessory/ranks/navy/e4 ranking = 3 /datum/paygrade/navy/e5 - paygrade = "NE5" + paygrade = PAY_SHORT_NE5 name = "Petty Officer 2nd Class" prefix = "PO2." rank_pin = /obj/item/clothing/accessory/ranks/navy/e5 ranking = 4 /datum/paygrade/navy/e6 - paygrade = "NE6" + paygrade = PAY_SHORT_NE6 name = "Petty Officer 1st Class" prefix = "PO1." rank_pin = /obj/item/clothing/accessory/ranks/navy/e6 ranking = 5 /datum/paygrade/navy/e7 - paygrade = "NE7" + paygrade = PAY_SHORT_NE7 name = "Chief Petty Officer" prefix = "CPO." rank_pin = /obj/item/clothing/accessory/ranks/navy/e7 ranking = 6 /datum/paygrade/navy/e8 - paygrade = "NE8" + paygrade = PAY_SHORT_NE8 name = "Senior Chief Petty Officer" prefix = "SCPO." rank_pin = /obj/item/clothing/accessory/ranks/navy/e8 ranking = 7 /datum/paygrade/navy/e8c - paygrade = "NE8C" + paygrade = PAY_SHORT_NE8C name = "Command Senior Chief Petty Officer" prefix = "CSCPO." rank_pin = /obj/item/clothing/accessory/ranks/navy/e8c ranking = 8 /datum/paygrade/navy/e9 - paygrade = "NE9" + paygrade = PAY_SHORT_NE9 name = "Master Chief Petty Officer" prefix = "MCPO." rank_pin = /obj/item/clothing/accessory/ranks/navy/e9 ranking = 9 /datum/paygrade/navy/e9c - paygrade = "NE9C" + paygrade = PAY_SHORT_NE9C name = "Command Master Chief Petty Officer" prefix = "CMCPO." rank_pin = /obj/item/clothing/accessory/ranks/navy/e9c @@ -85,91 +85,91 @@ // COMMISSIONED PAYGRADES /datum/paygrade/navy/o1 - paygrade = "NO1" + paygrade = PAY_SHORT_NO1 name = "Ensign" prefix = "ENS." rank_pin = /obj/item/clothing/accessory/ranks/navy/o1 ranking = 11 /datum/paygrade/navy/o2 - paygrade = "NO2" + paygrade = PAY_SHORT_NO2 name = "Lieutenant Junior Grade" prefix = "LTJG." rank_pin = /obj/item/clothing/accessory/ranks/navy/o2 ranking = 12 /datum/paygrade/navy/o3 - paygrade = "NO3" + paygrade = PAY_SHORT_NO3 name = "Lieutenant" prefix = "LT." rank_pin = /obj/item/clothing/accessory/ranks/navy/o3 ranking = 13 /datum/paygrade/navy/o4 - paygrade = "NO4" + paygrade = PAY_SHORT_NO4 name = "Lieutenant Commander" prefix = "LCDR." rank_pin = /obj/item/clothing/accessory/ranks/navy/o4 ranking = 14 /datum/paygrade/navy/o5 - paygrade = "NO5" + paygrade = PAY_SHORT_NO5 name = "Commander" prefix = "CDR." rank_pin = /obj/item/clothing/accessory/ranks/navy/o5 ranking = 15 /datum/paygrade/navy/o6 - paygrade = "NO6" + paygrade = PAY_SHORT_NO6 name = "Captain" prefix = "CAPT." rank_pin = /obj/item/clothing/accessory/ranks/navy/o6 ranking = 16 /datum/paygrade/navy/o6e - paygrade = "NO6E" + paygrade = PAY_SHORT_NO6E name = "Commodore" prefix = "CDRE." rank_pin = /obj/item/clothing/accessory/ranks/navy/o6e ranking = 17 /datum/paygrade/navy/o6c - paygrade = "NO6C" + paygrade = PAY_SHORT_NO6C name = "Senior Commodore" prefix = "Snr CDRE." rank_pin = /obj/item/clothing/accessory/ranks/navy/o6e ranking = 18 /datum/paygrade/navy/o7 - paygrade = "NO7" + paygrade = PAY_SHORT_NO7 name = "Rear Admiral (Lower Half)" prefix = "RDML." rank_pin = /obj/item/clothing/accessory/ranks/navy/o7 ranking = 19 /datum/paygrade/navy/o8 - paygrade = "NO8" + paygrade = PAY_SHORT_NO8 name = "Rear Admiral (Upper Half)" prefix = "RADM." rank_pin = /obj/item/clothing/accessory/ranks/navy/o8 ranking = 20 /datum/paygrade/navy/o9 - paygrade = "NO9" + paygrade = PAY_SHORT_NO9 name = "Vice Admiral" prefix = "VADM." rank_pin = /obj/item/clothing/accessory/ranks/navy/o9 ranking = 21 /datum/paygrade/navy/o10 - paygrade = "NO10" + paygrade = PAY_SHORT_NO10 name = "Admiral" prefix = "ADM." rank_pin = /obj/item/clothing/accessory/ranks/navy/o10 ranking = 22 /datum/paygrade/navy/o10c - paygrade = "NO10C" + paygrade = PAY_SHORT_NO10C name = "Chief of Naval Operations" prefix = "CNO." rank_pin = /obj/item/clothing/accessory/ranks/navy/o10c diff --git a/code/datums/paygrades/factions/uscm/provost.dm b/code/datums/paygrades/factions/uscm/provost.dm index b27c8f7f721f..e378bd7beb61 100644 --- a/code/datums/paygrades/factions/uscm/provost.dm +++ b/code/datums/paygrades/factions/uscm/provost.dm @@ -2,44 +2,23 @@ name = "Provost Paygrade" pay_multiplier = 2 -/datum/paygrade/provost/officer - paygrade = "PvE7" - name = "Chief Petty Officer" - prefix = "CPO." - rank_pin = /obj/item/clothing/accessory/ranks/navy/e7/pvst - -/datum/paygrade/provost/enforcer - paygrade = "PvE8" - name = "Senior Chief Petty Officer" - prefix = "SCPO." - rank_pin = /obj/item/clothing/accessory/ranks/navy/e8/pvst - -/datum/paygrade/provost/tml - paygrade = "PvE9" - name = "Master Chief Petty Officer" - prefix = "MCPO." - rank_pin = /obj/item/clothing/accessory/ranks/navy/e9/pvst - /datum/paygrade/provost/inspector - paygrade = "PvI" - name = "Inspector" + paygrade = PAY_SHORT_PVI + name = "Provost Inspector" prefix = "Insp." rank_pin = /obj/item/clothing/accessory/ranks/special/insp /datum/paygrade/provost/marshal - paygrade = "PvO8" - name = "Rear Admiral" - prefix = "RADM." - rank_pin = /obj/item/clothing/accessory/ranks/navy/o8/pvst + paygrade = PAY_SHORT_PVM + name = "Provost Marshal" + prefix = "Marshal" /datum/paygrade/provost/sectormarshal - paygrade = "PvO9" - name = "Vice Admiral" - prefix = "VADM." - rank_pin = /obj/item/clothing/accessory/ranks/navy/o9/pvst + paygrade = PAY_SHORT_PVSM + name = "Provost Sector Marshal" + prefix = "S. Marshal" /datum/paygrade/provost/chiefmarshal - paygrade = "PvCM" + paygrade = PAY_SHORT_PVCM name = "Provost Chief Marshal" - prefix = "PCM." - rank_pin = /obj/item/clothing/accessory/ranks/navy/o10c/pvst + prefix = "Chief Marshal" diff --git a/code/datums/paygrades/factions/wy/goons.dm b/code/datums/paygrades/factions/wy/goons.dm deleted file mode 100644 index 679bb42e7f76..000000000000 --- a/code/datums/paygrades/factions/wy/goons.dm +++ /dev/null @@ -1,15 +0,0 @@ -/datum/paygrade/goon - name = "WY Goon Paygrade" - pay_multiplier = 0.66 // better than colonists. barely. - -//Standard PMCs -/datum/paygrade/goon/standard - paygrade = "WEY-GOON" - name = "Officer" - prefix = "Off." - -/datum/paygrade/goon/lead - paygrade = "WEY-GOON-L" - name = "Senior Officer" - prefix = "Sr. Off." - pay_multiplier = 0.8 diff --git a/code/datums/paygrades/factions/wy/wy.dm b/code/datums/paygrades/factions/wy/wy.dm index 03d54cbd3cda..58ec9eb3f197 100644 --- a/code/datums/paygrades/factions/wy/wy.dm +++ b/code/datums/paygrades/factions/wy/wy.dm @@ -3,69 +3,69 @@ pay_multiplier = 1 /datum/paygrade/wy_ranks/wyc1 - paygrade = "WYC1" + paygrade = PAY_SHORT_WYC1 name = "Trainee" prefix = "Trn." ranking = 0 /datum/paygrade/wy_ranks/wyc2 - paygrade = "WYC2" + paygrade = PAY_SHORT_WYC2 name = "Junior Executive" prefix = "Jr. Exec." ranking = 1 pay_multiplier = 2 /datum/paygrade/wy_ranks/wyc3 - paygrade = "WYC3" + paygrade = PAY_SHORT_WYC3 name = "Executive" prefix = "Exec." ranking = 2 pay_multiplier = 3 /datum/paygrade/wy_ranks/wyc4 - paygrade = "WYC4" + paygrade = PAY_SHORT_WYC4 name = "Senior Executive" prefix = "Sr. Exec." ranking = 3 pay_multiplier = 4 /datum/paygrade/wy_ranks/wyc5 - paygrade = "WYC5" + paygrade = PAY_SHORT_WYC5 name = "Executive Specialist" prefix = "Exec. Spc." ranking = 4 pay_multiplier = 5 /datum/paygrade/wy_ranks/wyc6 - paygrade = "WYC6" + paygrade = PAY_SHORT_WYC6 name = "Executive Supervisor" prefix = "Exec. Suvp." ranking = 5 pay_multiplier = 6 /datum/paygrade/wy_ranks/wyc7 - paygrade = "WYC7" + paygrade = PAY_SHORT_WYC7 name = "Assistant Manager" prefix = "Assis. Mng." ranking = 6 pay_multiplier = 7 /datum/paygrade/wy_ranks/wyc8 - paygrade = "WYC8" + paygrade = PAY_SHORT_WYC8 name = "Division Manager" prefix = "Div. Mng." ranking = 7 pay_multiplier = 8 /datum/paygrade/wy_ranks/wyc9 - paygrade = "WYC9" + paygrade = PAY_SHORT_WYC9 name = "Chief Executive" prefix = "Chief. Exec." ranking = 8 pay_multiplier = 9 /datum/paygrade/wy_ranks/wyc10 - paygrade = "WYC10" + paygrade = PAY_SHORT_WYC10 name = "Director" prefix = "Director" ranking = 9 diff --git a/code/datums/paygrades/paygrade.dm b/code/datums/paygrades/paygrade.dm index bb0a3aa84bfa..cc336319278a 100644 --- a/code/datums/paygrades/paygrade.dm +++ b/code/datums/paygrades/paygrade.dm @@ -26,36 +26,36 @@ GLOBAL_LIST_INIT_TYPED(paygrades, /datum/paygrade, setup_paygrades()) GLOBAL_LIST_INIT(highcom_paygrades, list( "PvI", - "NO7", - "MO7", - "NO8", - "MO8", - "NO9", - "MO9", - "NO10", - "MO10", - "NO10C", - "MO10C", + PAY_SHORT_NO7, + PAY_SHORT_MO7, + PAY_SHORT_NO8, + PAY_SHORT_MO8, + PAY_SHORT_NO9, + PAY_SHORT_MO9, + PAY_SHORT_NO10, + PAY_SHORT_MO10, + PAY_SHORT_NO10C, + PAY_SHORT_MO10C, "PvO8", "PvO9", "PvCM" )) GLOBAL_LIST_INIT(co_paygrades, list( - "NO6", - "NO6E", - "NO6C", - "NO5", - "NO4", - "MO6", - "MO6E", - "MO6C", - "MO5", - "MO4" + PAY_SHORT_NO6, + PAY_SHORT_NO6E, + PAY_SHORT_NO6C, + PAY_SHORT_NO5, + PAY_SHORT_NO4, + PAY_SHORT_MO6, + PAY_SHORT_MO6E, + PAY_SHORT_MO6C, + PAY_SHORT_MO5, + PAY_SHORT_MO4 )) GLOBAL_LIST_INIT(wy_paygrades, list( - "WYC8", - "WYC9", - "WYC10" + PAY_SHORT_WYC8, + PAY_SHORT_WYC9, + PAY_SHORT_WYC10 )) diff --git a/code/datums/soundOutput.dm b/code/datums/soundOutput.dm index bc5ffd8efcfb..1f4512b28d59 100644 --- a/code/datums/soundOutput.dm +++ b/code/datums/soundOutput.dm @@ -152,11 +152,6 @@ adjust_volume_prefs(VOLUME_AMB, "Set the volume for ambience and soundscapes", 0) soundOutput.update_ambience(null, null, TRUE) -/client/verb/adjust_volume_admin_music() - set name = "Adjust Volume Admin MIDIs" - set category = "Preferences.Sound" - adjust_volume_prefs(VOLUME_ADM, "Set the volume for admin MIDIs", SOUND_CHANNEL_ADMIN_MIDI) - /client/verb/adjust_volume_lobby_music() set name = "Adjust Volume LobbyMusic" set category = "Preferences.Sound" diff --git a/code/datums/statistics/entities/death_stats.dm b/code/datums/statistics/entities/death_stats.dm index 35ff1769b925..76e3605c157f 100644 --- a/code/datums/statistics/entities/death_stats.dm +++ b/code/datums/statistics/entities/death_stats.dm @@ -133,8 +133,8 @@ new_death.total_damage_taken = life_damage_taken_total new_death.total_revives_done = life_revives_total - if(round_statistics) - round_statistics.track_death(new_death) + if(GLOB.round_statistics) + GLOB.round_statistics.track_death(new_death) new_death.save() new_death.detach() diff --git a/code/datums/statistics/entities/human_stats.dm b/code/datums/statistics/entities/human_stats.dm index 1e15aa1d161b..20d5a284becd 100644 --- a/code/datums/statistics/entities/human_stats.dm +++ b/code/datums/statistics/entities/human_stats.dm @@ -22,7 +22,7 @@ return ..() if(type == "Squad Roles") var/total_squad_time = 0 - for(var/squad_type in job_squad_roles) + for(var/squad_type in GLOB.job_squad_roles) var/datum/entity/player_stats/job/squad_stat = job_stats_list["[squad_type]"] if(!squad_stat) // Have not played the squad role yet continue @@ -30,7 +30,7 @@ return total_squad_time else if(type == "CIC Roles") var/total_command_time = 0 - for(var/command_type in job_command_roles) + for(var/command_type in GLOB.job_command_roles) var/datum/entity/player_stats/job/command_stat = job_stats_list["[command_type]"] if(!command_stat) // Have not played the command role yet continue @@ -122,15 +122,15 @@ S.total_rounds_played++ S.round_played = TRUE S.total_playtime += time - if(round_statistics) - var/datum/entity/player_stats/job/R = round_statistics.setup_job_stats(job) + if(GLOB.round_statistics) + var/datum/entity/player_stats/job/R = GLOB.round_statistics.setup_job_stats(job) R.total_playtime += time /datum/entity/player_stats/human/count_personal_death(job) var/datum/entity/player_stats/job/S = setup_job_stats(job) S.total_deaths++ - if(round_statistics) - var/datum/entity/player_stats/job/R = round_statistics.setup_job_stats(job) + if(GLOB.round_statistics) + var/datum/entity/player_stats/job/R = GLOB.round_statistics.setup_job_stats(job) R.total_deaths++ //****************** @@ -140,27 +140,27 @@ /datum/entity/player_stats/human/count_personal_human_kill(job_name, cause, job) var/datum/entity/player_stats/job/S = setup_job_stats(job) S.count_human_kill(job_name, cause) - if(round_statistics) - var/datum/entity/player_stats/job/R = round_statistics.setup_job_stats(job) + if(GLOB.round_statistics) + var/datum/entity/player_stats/job/R = GLOB.round_statistics.setup_job_stats(job) R.count_human_kill(job_name, cause) if(cause) var/datum/entity/weapon_stats/W = setup_weapon_stats(cause) W.count_human_kill(job_name) - if(round_statistics) - var/datum/entity/weapon_stats/R = round_statistics.setup_weapon_stats(cause) + if(GLOB.round_statistics) + var/datum/entity/weapon_stats/R = GLOB.round_statistics.setup_weapon_stats(cause) R.count_human_kill(job_name) /datum/entity/player_stats/human/count_personal_xeno_kill(caste_type, cause, job) var/datum/entity/player_stats/job/S = setup_job_stats(job) S.count_xeno_kill(caste_type, cause) - if(round_statistics) - var/datum/entity/player_stats/job/R = round_statistics.setup_job_stats(job) + if(GLOB.round_statistics) + var/datum/entity/player_stats/job/R = GLOB.round_statistics.setup_job_stats(job) R.count_xeno_kill(caste_type, cause) if(cause) var/datum/entity/weapon_stats/W = setup_weapon_stats(cause) W.count_xeno_kill(caste_type) - if(round_statistics) - var/datum/entity/weapon_stats/R = round_statistics.setup_weapon_stats(cause) + if(GLOB.round_statistics) + var/datum/entity/weapon_stats/R = GLOB.round_statistics.setup_weapon_stats(cause) R.count_xeno_kill(caste_type) /datum/entity/player_stats/human/count_human_kill(job_name, cause, job) @@ -169,8 +169,8 @@ if(cause) var/datum/entity/weapon_stats/W = setup_weapon_stats(cause) W.total_kills++ - if(round_statistics) - var/datum/entity/weapon_stats/R = round_statistics.setup_weapon_stats(cause) + if(GLOB.round_statistics) + var/datum/entity/weapon_stats/R = GLOB.round_statistics.setup_weapon_stats(cause) R.total_kills++ recalculate_top_weapon() ..() @@ -181,8 +181,8 @@ if(cause) var/datum/entity/weapon_stats/W = setup_weapon_stats(cause) W.total_kills++ - if(round_statistics) - var/datum/entity/weapon_stats/R = round_statistics.setup_weapon_stats(cause) + if(GLOB.round_statistics) + var/datum/entity/weapon_stats/R = GLOB.round_statistics.setup_weapon_stats(cause) R.total_kills++ recalculate_top_weapon() ..() @@ -194,8 +194,8 @@ /datum/entity/player_stats/human/count_personal_niche_stat(niche_name, amount = 1, job) var/datum/entity/player_stats/job/S = setup_job_stats(job) S.count_niche_stat(niche_name, amount) - if(round_statistics) - var/datum/entity/player_stats/job/R = round_statistics.setup_job_stats(job) + if(GLOB.round_statistics) + var/datum/entity/player_stats/job/R = GLOB.round_statistics.setup_job_stats(job) R.count_niche_stat(niche_name, amount) /datum/entity/player_stats/human/count_niche_stat(niche_name, amount = 1, job, weapon) @@ -204,8 +204,8 @@ if(weapon) var/datum/entity/weapon_stats/W = setup_weapon_stats(weapon) W.count_niche_stat(niche_name, amount) - if(round_statistics) - var/datum/entity/weapon_stats/R = round_statistics.setup_weapon_stats(weapon) + if(GLOB.round_statistics) + var/datum/entity/weapon_stats/R = GLOB.round_statistics.setup_weapon_stats(weapon) R.count_niche_stat(niche_name, amount) recalculate_top_weapon() ..() @@ -215,8 +215,8 @@ return var/datum/entity/player_stats/job/S = setup_job_stats(job, FALSE) S.steps_walked += amount - if(round_statistics) - var/datum/entity/player_stats/job/R = round_statistics.setup_job_stats(job, FALSE) + if(GLOB.round_statistics) + var/datum/entity/player_stats/job/R = GLOB.round_statistics.setup_job_stats(job, FALSE) R.steps_walked += amount /mob/living/carbon/human/track_steps_walked(amount = 1) @@ -237,8 +237,8 @@ if(isnull(S.total_hits)) S.total_hits = 0 S.total_hits += amount - if(round_statistics) - var/datum/entity/weapon_stats/R = round_statistics.setup_weapon_stats(weapon) + if(GLOB.round_statistics) + var/datum/entity/weapon_stats/R = GLOB.round_statistics.setup_weapon_stats(weapon) R.total_hits +=amount /mob/proc/track_hit(weapon, amount = 1) @@ -256,8 +256,8 @@ if(isnull(S.total_shots)) S.total_shots = 0 S.total_shots += amount - if(round_statistics) - var/datum/entity/weapon_stats/R = round_statistics.setup_weapon_stats(weapon) + if(GLOB.round_statistics) + var/datum/entity/weapon_stats/R = GLOB.round_statistics.setup_weapon_stats(weapon) R.total_shots +=amount /datum/entity/player_stats/human/proc/count_personal_shot(job, amount = 1) @@ -267,8 +267,8 @@ if(isnull(S.total_shots)) S.total_shots = 0 S.total_shots += amount - if(round_statistics) - var/datum/entity/player_stats/job/R = round_statistics.setup_job_stats(job) + if(GLOB.round_statistics) + var/datum/entity/player_stats/job/R = GLOB.round_statistics.setup_job_stats(job) R.total_shots += amount /mob/proc/track_shot(weapon, amount = 1) @@ -288,8 +288,8 @@ if(isnull(S.total_shots_hit)) S.total_shots_hit = 0 S.total_shots_hit += amount - if(round_statistics) - var/datum/entity/weapon_stats/R = round_statistics.setup_weapon_stats(weapon) + if(GLOB.round_statistics) + var/datum/entity/weapon_stats/R = GLOB.round_statistics.setup_weapon_stats(weapon) R.total_shots_hit += amount /datum/entity/player_stats/human/proc/count_personal_shot_hit(job, amount = 1) @@ -299,8 +299,8 @@ if(isnull(S.total_shots_hit)) S.total_shots_hit = 0 S.total_shots_hit += amount - if(round_statistics) - var/datum/entity/player_stats/job/R = round_statistics.setup_job_stats(job) + if(GLOB.round_statistics) + var/datum/entity/player_stats/job/R = GLOB.round_statistics.setup_job_stats(job) R.total_shots_hit += amount /mob/proc/track_shot_hit(weapon, shot_mob, amount = 1) @@ -312,13 +312,13 @@ human_stats.total_shots_hit += amount human_stats.count_weapon_shot_hit(weapon, amount) human_stats.count_personal_shot_hit(job, amount) - if(round_statistics) - round_statistics.total_projectiles_hit += amount + if(GLOB.round_statistics) + GLOB.round_statistics.total_projectiles_hit += amount if(shot_mob) if(ishuman(shot_mob)) - round_statistics.total_projectiles_hit_human += amount + GLOB.round_statistics.total_projectiles_hit_human += amount else if(isxeno(shot_mob)) - round_statistics.total_projectiles_hit_xeno += amount + GLOB.round_statistics.total_projectiles_hit_xeno += amount /datum/entity/player_stats/human/proc/count_weapon_friendly_fire(weapon, amount = 1) if(!weapon) @@ -327,8 +327,8 @@ if(isnull(S.total_friendly_fire)) S.total_friendly_fire = 0 S.total_friendly_fire += amount - if(round_statistics) - var/datum/entity/weapon_stats/R = round_statistics.setup_weapon_stats(weapon) + if(GLOB.round_statistics) + var/datum/entity/weapon_stats/R = GLOB.round_statistics.setup_weapon_stats(weapon) R.total_friendly_fire += amount /datum/entity/player_stats/human/proc/count_personal_friendly_fire(job, amount = 1) @@ -338,8 +338,8 @@ if(isnull(S.total_friendly_fire)) S.total_friendly_fire = 0 S.total_friendly_fire += amount - if(round_statistics) - var/datum/entity/player_stats/job/R = round_statistics.setup_job_stats(job) + if(GLOB.round_statistics) + var/datum/entity/player_stats/job/R = GLOB.round_statistics.setup_job_stats(job) R.total_friendly_fire += amount /mob/proc/track_friendly_fire(weapon, amount = 1) @@ -359,8 +359,8 @@ if(isnull(S.total_revives)) S.total_revives = 0 S.total_revives += amount - if(round_statistics) - var/datum/entity/player_stats/job/R = round_statistics.setup_job_stats(job) + if(GLOB.round_statistics) + var/datum/entity/player_stats/job/R = GLOB.round_statistics.setup_job_stats(job) R.total_revives += amount /mob/proc/track_revive(job, amount = 1) @@ -379,8 +379,8 @@ if(isnull(S.total_lives_saved)) S.total_lives_saved = 0 S.total_lives_saved += amount - if(round_statistics) - var/datum/entity/player_stats/job/R = round_statistics.setup_job_stats(job) + if(GLOB.round_statistics) + var/datum/entity/player_stats/job/R = GLOB.round_statistics.setup_job_stats(job) R.total_lives_saved += amount /mob/proc/track_life_saved(job, amount = 1) @@ -399,8 +399,8 @@ if(isnull(S.total_screams)) S.total_screams = 0 S.total_screams += amount - if(round_statistics) - var/datum/entity/player_stats/job/R = round_statistics.setup_job_stats(job) + if(GLOB.round_statistics) + var/datum/entity/player_stats/job/R = GLOB.round_statistics.setup_job_stats(job) R.total_screams += amount /mob/proc/track_scream(job, amount = 1) diff --git a/code/datums/statistics/entities/panel_stats.dm b/code/datums/statistics/entities/panel_stats.dm index e507d5d81a8b..5cfb888b8ea1 100644 --- a/code/datums/statistics/entities/panel_stats.dm +++ b/code/datums/statistics/entities/panel_stats.dm @@ -3,9 +3,9 @@ //******************************************************* -/datum/entity/player_entity/proc/show_statistics(mob/user, datum/entity/statistic/round/viewing_round = round_statistics, update_data = FALSE) +/datum/entity/player_entity/proc/show_statistics(mob/user, datum/entity/statistic/round/viewing_round = GLOB.round_statistics, update_data = FALSE) if(update_data) - update_panel_data(round_statistics) + update_panel_data(GLOB.round_statistics) ui_interact(user) /datum/entity/player_entity/proc/ui_interact(mob/user, ui_key = "statistics", datum/nanoui/ui, force_open = 1) @@ -13,7 +13,7 @@ data["subMenu"] = subMenu data["dataMenu"] = dataMenu - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = SSnano.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "cm_stat_panel.tmpl", "Statistics", 450, 700, null, -1) @@ -31,7 +31,7 @@ if(href_list["dataMenu"]) dataMenu = href_list["dataMenu"] - nanomanager.update_uis(src) + SSnano.nanomanager.update_uis(src) /datum/entity/player_entity/proc/check_eye() return @@ -68,7 +68,7 @@ //*******************PLAYER DATA************************* //******************************************************* -/datum/entity/player_entity/proc/update_panel_data(datum/entity/statistic/round/viewing_round = round_statistics) +/datum/entity/player_entity/proc/update_panel_data(datum/entity/statistic/round/viewing_round = GLOB.round_statistics) data["current_time"] = worldtime2text() if(viewing_round) diff --git a/code/datums/statistics/entities/player_stats.dm b/code/datums/statistics/entities/player_stats.dm index d9fbd3b11e03..a8444c1a5894 100644 --- a/code/datums/statistics/entities/player_stats.dm +++ b/code/datums/statistics/entities/player_stats.dm @@ -81,10 +81,10 @@ /mob/proc/track_death_calculations() if(statistic_exempt || statistic_tracked) return - if(round_statistics) - round_statistics.recalculate_nemesis() + if(GLOB.round_statistics) + GLOB.round_statistics.recalculate_nemesis() if(mind && mind.player_entity) - mind.player_entity.update_panel_data(round_statistics) + mind.player_entity.update_panel_data(GLOB.round_statistics) statistic_tracked = TRUE //***************** diff --git a/code/datums/statistics/entities/round_stats.dm b/code/datums/statistics/entities/round_stats.dm index baed6befa912..25543dff22b1 100644 --- a/code/datums/statistics/entities/round_stats.dm +++ b/code/datums/statistics/entities/round_stats.dm @@ -84,9 +84,9 @@ if(!round_stats) var/datum/entity/mc_round/mc_round = SSentity_manager.select(/datum/entity/mc_round) var/operation_name - operation_name = "[pick(operation_titles)]" - operation_name += " [pick(operation_prefixes)]" - operation_name += "-[pick(operation_postfixes)]" + operation_name = "[pick(GLOB.operation_titles)]" + operation_name += " [pick(GLOB.operation_prefixes)]" + operation_name += "-[pick(GLOB.operation_postfixes)]" // Round stats round_stats = DB_ENTITY(/datum/entity/statistic/round) @@ -98,7 +98,7 @@ round_stats.save() // Setup the global reference - round_statistics = round_stats + GLOB.round_statistics = round_stats // Map stats var/datum/entity/statistic/map/new_map = DB_EKEY(/datum/entity/statistic/map, SSmapping.configs[GROUND_MAP].map_name) @@ -376,7 +376,7 @@ stats += "Xenos remaining: [end_of_round_xenos]\n" stats += "Hijack time: [duration2text(round_hijack_time)]\n" - stats += "[log_end]" + stats += "[GLOB.log_end]" WRITE_LOG(GLOB.round_stats, stats) @@ -396,4 +396,4 @@ if(!can_use_action()) return - owner.client.player_entity.show_statistics(owner, round_statistics, TRUE) + owner.client.player_entity.show_statistics(owner, GLOB.round_statistics, TRUE) diff --git a/code/datums/statistics/entities/xeno_stats.dm b/code/datums/statistics/entities/xeno_stats.dm index 8fff4a2e5dd3..9703c8c5e397 100644 --- a/code/datums/statistics/entities/xeno_stats.dm +++ b/code/datums/statistics/entities/xeno_stats.dm @@ -78,15 +78,15 @@ S.total_rounds_played++ S.round_played = TRUE S.total_playtime += time - if(round_statistics) - var/datum/entity/player_stats/caste/R = round_statistics.setup_caste_stats(caste) + if(GLOB.round_statistics) + var/datum/entity/player_stats/caste/R = GLOB.round_statistics.setup_caste_stats(caste) R.total_playtime += time /datum/entity/player_stats/xeno/count_personal_death(caste) var/datum/entity/player_stats/caste/S = setup_caste_stats(caste) S.total_deaths++ - if(round_statistics) - var/datum/entity/player_stats/caste/R = round_statistics.setup_caste_stats(caste) + if(GLOB.round_statistics) + var/datum/entity/player_stats/caste/R = GLOB.round_statistics.setup_caste_stats(caste) R.total_deaths++ //****************** @@ -96,16 +96,16 @@ /datum/entity/player_stats/xeno/count_personal_human_kill(job_name, cause, caste) var/datum/entity/player_stats/caste/S = setup_caste_stats(caste) S.count_human_kill(job_name, cause) - if(round_statistics) - var/datum/entity/player_stats/caste/R = round_statistics.setup_caste_stats(caste) + if(GLOB.round_statistics) + var/datum/entity/player_stats/caste/R = GLOB.round_statistics.setup_caste_stats(caste) R.count_human_kill(job_name, cause) recalculate_top_caste() /datum/entity/player_stats/xeno/count_personal_xeno_kill(caste_type, cause, caste) var/datum/entity/player_stats/caste/S = setup_caste_stats(caste) S.count_xeno_kill(caste_type, cause) - if(round_statistics) - var/datum/entity/player_stats/caste/R = round_statistics.setup_caste_stats(caste) + if(GLOB.round_statistics) + var/datum/entity/player_stats/caste/R = GLOB.round_statistics.setup_caste_stats(caste) R.count_xeno_kill(caste_type, cause) recalculate_top_caste() @@ -116,15 +116,15 @@ /datum/entity/player_stats/xeno/count_personal_niche_stat(niche_name, amount = 1, caste) var/datum/entity/player_stats/caste/S = setup_caste_stats(caste) S.count_niche_stat(niche_name, amount) - if(round_statistics) - var/datum/entity/player_stats/caste/R = round_statistics.setup_caste_stats(caste) + if(GLOB.round_statistics) + var/datum/entity/player_stats/caste/R = GLOB.round_statistics.setup_caste_stats(caste) R.count_niche_stat(niche_name, amount) /datum/entity/player_stats/xeno/proc/track_personal_abilities_used(caste, ability, amount = 1) var/datum/entity/player_stats/caste/S = setup_caste_stats(caste) S.track_personal_abilities_used(ability, amount) - if(round_statistics) - var/datum/entity/player_stats/caste/R = round_statistics.setup_caste_stats(caste) + if(GLOB.round_statistics) + var/datum/entity/player_stats/caste/R = GLOB.round_statistics.setup_caste_stats(caste) R.track_personal_abilities_used(ability, amount) /mob/living/carbon/xenomorph/proc/track_ability_usage(ability, caste, amount = 1) @@ -137,8 +137,8 @@ /datum/entity/player_stats/xeno/count_personal_steps_walked(caste, amount = 1) var/datum/entity/player_stats/caste/S = setup_caste_stats(caste) S.steps_walked += amount - if(round_statistics) - var/datum/entity/player_stats/caste/R = round_statistics.setup_caste_stats(caste) + if(GLOB.round_statistics) + var/datum/entity/player_stats/caste/R = GLOB.round_statistics.setup_caste_stats(caste) R.steps_walked += amount /mob/living/carbon/xenomorph/track_steps_walked(amount = 1) @@ -154,8 +154,8 @@ /datum/entity/player_stats/xeno/proc/count_personal_slashes(caste, amount = 1) var/datum/entity/player_stats/caste/S = setup_caste_stats(caste) S.total_hits += amount - if(round_statistics) - var/datum/entity/player_stats/caste/R = round_statistics.setup_caste_stats(caste) + if(GLOB.round_statistics) + var/datum/entity/player_stats/caste/R = GLOB.round_statistics.setup_caste_stats(caste) R.total_hits += amount /mob/living/carbon/xenomorph/proc/track_slashes(caste, amount = 1) @@ -167,5 +167,5 @@ xeno_stats.total_hits += amount if(caste_type) xeno_stats.count_personal_slashes(caste_type, amount) - if(round_statistics) - round_statistics.total_slashes += amount + if(GLOB.round_statistics) + GLOB.round_statistics.total_slashes += amount diff --git a/code/datums/statistics/random_facts/random_fact.dm b/code/datums/statistics/random_facts/random_fact.dm index 76c6e82f776d..d327bd36f4f6 100644 --- a/code/datums/statistics/random_facts/random_fact.dm +++ b/code/datums/statistics/random_facts/random_fact.dm @@ -24,8 +24,8 @@ var/datum/entity/statistic/death/death_to_report = null var/mob/mob_to_report = null - if(round_statistics && length(round_statistics.death_stats_list)) - for(var/datum/entity/statistic/death/death in round_statistics.death_stats_list) + if(GLOB.round_statistics && length(GLOB.round_statistics.death_stats_list)) + for(var/datum/entity/statistic/death/death in GLOB.round_statistics.death_stats_list) if(!check_human && !death.is_xeno) continue if(!check_xeno && death.is_xeno) diff --git a/code/datums/status_effects/_status_effect.dm b/code/datums/status_effects/_status_effect.dm index 51f23052ac4a..2a895e4e18ef 100644 --- a/code/datums/status_effects/_status_effect.dm +++ b/code/datums/status_effects/_status_effect.dm @@ -128,7 +128,7 @@ return else if(duration - world.time <= STATUS_EFFECT_TIME_THRESHOLD) if(!timerid || force_refresh) - timerid = addtimer(CALLBACK(src, PROC_REF(timer_callback)), duration - world.time, TIMER_OVERRIDE|TIMER_UNIQUE|TIMER_STOPPABLE) + timerid = addtimer(CALLBACK(src, PROC_REF(timer_callback)), duration - world.time, TIMER_OVERRIDE|TIMER_UNIQUE|TIMER_STOPPABLE|TIMER_NO_HASH_WAIT) else if(timerid) deltimer(timerid) timerid = null @@ -139,7 +139,7 @@ timerid = null qdel(src) // shrimple as that -/// Called whenever the effect is applied in on_created +/// Called when the effect is applied in on_created /// Returning FALSE will cause it to delete itself during creation instead. /datum/status_effect/proc/on_apply() return TRUE diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm index be371e2c1694..5630f89ce9be 100644 --- a/code/datums/status_effects/debuffs/debuffs.dm +++ b/code/datums/status_effects/debuffs/debuffs.dm @@ -51,10 +51,10 @@ . = ..() if(!.) return - ADD_TRAIT(owner, TRAIT_FLOORED, TRAIT_STATUS_EFFECT(id)) + owner.add_traits(list(TRAIT_FLOORED, TRAIT_IMMOBILIZED), TRAIT_STATUS_EFFECT(id)) /datum/status_effect/incapacitating/knockdown/on_remove() - REMOVE_TRAIT(owner, TRAIT_FLOORED, TRAIT_STATUS_EFFECT(id)) + owner.remove_traits(list(TRAIT_FLOORED, TRAIT_IMMOBILIZED), TRAIT_STATUS_EFFECT(id)) return ..() /atom/movable/screen/alert/status_effect/knockdown diff --git a/code/datums/supply_packs/black_market.dm b/code/datums/supply_packs/black_market.dm index 1af965898548..36d890e2b3d5 100644 --- a/code/datums/supply_packs/black_market.dm +++ b/code/datums/supply_packs/black_market.dm @@ -749,8 +749,8 @@ This is where the RO can reclaim their lost honor and purchase the M44 custom, t dollar_cost = 10 containertype = /obj/structure/largecrate/black_market -/datum/supply_packs/contraband/deep_storage/xm42b_pipe - name = "10x99mm XM42B casing" +/datum/supply_packs/contraband/deep_storage/xm43e1_pipe + name = "10x99mm XM43E1 casing" contains = list(/obj/item/prop/helmetgarb/bullet_pipe) dollar_cost = 10 containertype = /obj/structure/largecrate/black_market diff --git a/code/datums/supply_packs/food.dm b/code/datums/supply_packs/food.dm index 9e0527aed6cf..f74567c78a89 100644 --- a/code/datums/supply_packs/food.dm +++ b/code/datums/supply_packs/food.dm @@ -1,144 +1,47 @@ //Food.Regrouping all the ASRS crate related to food here. - -//All the ingredients that you can grown. - -/datum/supply_packs/potato - name = "Potatoes(x20)" - contains = list( - /obj/item/reagent_container/food/snacks/grown/potato, - /obj/item/reagent_container/food/snacks/grown/potato, - /obj/item/reagent_container/food/snacks/grown/potato, - /obj/item/reagent_container/food/snacks/grown/potato, - /obj/item/reagent_container/food/snacks/grown/potato, - /obj/item/reagent_container/food/snacks/grown/potato, - /obj/item/reagent_container/food/snacks/grown/potato, - /obj/item/reagent_container/food/snacks/grown/potato, - /obj/item/reagent_container/food/snacks/grown/potato, - /obj/item/reagent_container/food/snacks/grown/potato, - /obj/item/reagent_container/food/snacks/grown/potato, - /obj/item/reagent_container/food/snacks/grown/potato, - /obj/item/reagent_container/food/snacks/grown/potato, - /obj/item/reagent_container/food/snacks/grown/potato, - /obj/item/reagent_container/food/snacks/grown/potato, - /obj/item/reagent_container/food/snacks/grown/potato, - /obj/item/reagent_container/food/snacks/grown/potato, - /obj/item/reagent_container/food/snacks/grown/potato, - /obj/item/reagent_container/food/snacks/grown/potato, - /obj/item/reagent_container/food/snacks/grown/potato, - ) - cost = 10 - containertype = /obj/structure/closet/crate/freezer - containername = "\improper Potato crate" - group = "Food" - -/datum/supply_packs/tomato - name = "tomato (x20)" - contains = list( - /obj/item/reagent_container/food/snacks/grown/tomato, - /obj/item/reagent_container/food/snacks/grown/tomato, - /obj/item/reagent_container/food/snacks/grown/tomato, - /obj/item/reagent_container/food/snacks/grown/tomato, - /obj/item/reagent_container/food/snacks/grown/tomato, - /obj/item/reagent_container/food/snacks/grown/tomato, - /obj/item/reagent_container/food/snacks/grown/tomato, - /obj/item/reagent_container/food/snacks/grown/tomato, - /obj/item/reagent_container/food/snacks/grown/tomato, - /obj/item/reagent_container/food/snacks/grown/tomato, - /obj/item/reagent_container/food/snacks/grown/tomato, - /obj/item/reagent_container/food/snacks/grown/tomato, - /obj/item/reagent_container/food/snacks/grown/tomato, - /obj/item/reagent_container/food/snacks/grown/tomato, - /obj/item/reagent_container/food/snacks/grown/tomato, - /obj/item/reagent_container/food/snacks/grown/tomato, - /obj/item/reagent_container/food/snacks/grown/tomato, - /obj/item/reagent_container/food/snacks/grown/tomato, - /obj/item/reagent_container/food/snacks/grown/tomato, - /obj/item/reagent_container/food/snacks/grown/tomato, - ) - cost = 10 - containertype = /obj/structure/closet/crate/freezer - containername = "\improper Tomato crate" - group = "Food" - -/datum/supply_packs/wheat - name = "wheat (x20)" - contains = list( - /obj/item/reagent_container/food/snacks/grown/wheat, - /obj/item/reagent_container/food/snacks/grown/wheat, - /obj/item/reagent_container/food/snacks/grown/wheat, - /obj/item/reagent_container/food/snacks/grown/wheat, - /obj/item/reagent_container/food/snacks/grown/wheat, - /obj/item/reagent_container/food/snacks/grown/wheat, - /obj/item/reagent_container/food/snacks/grown/wheat, - /obj/item/reagent_container/food/snacks/grown/wheat, - /obj/item/reagent_container/food/snacks/grown/wheat, - /obj/item/reagent_container/food/snacks/grown/wheat, - /obj/item/reagent_container/food/snacks/grown/wheat, - /obj/item/reagent_container/food/snacks/grown/wheat, - /obj/item/reagent_container/food/snacks/grown/wheat, - /obj/item/reagent_container/food/snacks/grown/wheat, - /obj/item/reagent_container/food/snacks/grown/wheat, - /obj/item/reagent_container/food/snacks/grown/wheat, - /obj/item/reagent_container/food/snacks/grown/wheat, - /obj/item/reagent_container/food/snacks/grown/wheat, - /obj/item/reagent_container/food/snacks/grown/wheat, - /obj/item/reagent_container/food/snacks/grown/wheat, - ) - cost = 10 - containertype = /obj/structure/closet/crate/freezer - containername = "\improper Wheat crate" - group = "Food" - -//All the meats - -/datum/supply_packs/meat - name = "meat(x5)" - contains = list( - /obj/item/reagent_container/food/snacks/meat, - /obj/item/reagent_container/food/snacks/meat, - /obj/item/reagent_container/food/snacks/meat, - /obj/item/reagent_container/food/snacks/meat, - /obj/item/reagent_container/food/snacks/meat, - ) - cost = 10 - containertype = /obj/structure/closet/crate/freezer - containername = "\improper meat crate" - group = "Food" - -/datum/supply_packs/carp_fillet - name = "carp fillet (x5)" - contains = list( - /obj/item/reagent_container/food/snacks/carpmeat, - /obj/item/reagent_container/food/snacks/carpmeat, - /obj/item/reagent_container/food/snacks/carpmeat, - /obj/item/reagent_container/food/snacks/carpmeat, - /obj/item/reagent_container/food/snacks/carpmeat, - ) - cost = 10 - containertype = /obj/structure/closet/crate/freezer - containername = "\improper carp filet crate" - group = "Food" - -//all the condiment type items - -/datum/supply_packs/condiment - name = "crate of condiments" +// crate of random ingredient that you can buy in vendor in kitchen +/datum/supply_packs/ingredient + name = "surplus boxes of ingredients(x6 boxes)" + randomised_num_contained = 6 contains = list( - /obj/item/reagent_container/food/condiment/enzyme, - /obj/item/reagent_container/food/condiment/sugar, - /obj/item/reagent_container/food/condiment/saltshaker, - /obj/item/reagent_container/food/condiment/peppermill, + /obj/item/storage/fancy/egg_box, + /obj/item/storage/box/fish, + /obj/item/storage/box/meat, + /obj/item/storage/box/milk, + /obj/item/storage/box/soymilk, + /obj/item/storage/box/enzyme, + /obj/item/storage/box/flour, + /obj/item/storage/box/sugar, + /obj/item/storage/box/apple, + /obj/item/storage/box/banana, + /obj/item/storage/box/chanterelle, + /obj/item/storage/box/cherries, + /obj/item/storage/box/chili, + /obj/item/storage/box/cabbage, + /obj/item/storage/box/carrot, + /obj/item/storage/box/corn, + /obj/item/storage/box/eggplant, + /obj/item/storage/box/lemon, + /obj/item/storage/box/lime, + /obj/item/storage/box/orange, + /obj/item/storage/box/potato, + /obj/item/storage/box/tomato, + /obj/item/storage/box/whitebeet, /obj/item/reagent_container/food/condiment/hotsauce/cholula, /obj/item/reagent_container/food/condiment/hotsauce/franks, /obj/item/reagent_container/food/condiment/hotsauce/sriracha, /obj/item/reagent_container/food/condiment/hotsauce/tabasco, + /obj/item/reagent_container/food/drinks/bottle/whiskey, + /obj/item/reagent_container/food/drinks/bottle/tequila, + /obj/item/reagent_container/food/drinks/bottle/rum, + /obj/item/reagent_container/food/drinks/bottle/wine, ) cost = 10 containertype = /obj/structure/closet/crate/freezer - containername = "\improper crate of condiment" + containername = "\improper surplus of ingredients crate" group = "Food" - //all the finish snacks. +//all the finish snacks. /datum/supply_packs/donuts name = "box of donuts (x5)" @@ -165,47 +68,6 @@ containername = "\improper USCM MRE crate(x2)" group = "Food" -/datum/supply_packs/funfood - name = "special ingredients crate (x6)" - randomised_num_contained = 6 - contains = list( - /obj/item/reagent_container/food/condiment/enzyme, - /obj/item/reagent_container/food/condiment/saltshaker, - /obj/item/reagent_container/food/condiment/saltshaker, - /obj/item/reagent_container/food/condiment/saltshaker, - /obj/item/reagent_container/food/condiment/peppermill, - /obj/item/reagent_container/food/condiment/peppermill, - /obj/item/reagent_container/food/condiment/peppermill, - /obj/item/reagent_container/food/condiment/sugar, - /obj/item/reagent_container/food/condiment/sugar, - /obj/item/reagent_container/food/snacks/grown/potato, - /obj/item/reagent_container/food/snacks/grown/potato, - /obj/item/reagent_container/food/snacks/grown/potato, - /obj/item/reagent_container/food/snacks/grown/potato, - /obj/item/reagent_container/food/snacks/grown/potato, - /obj/item/reagent_container/food/snacks/mint, - /obj/item/reagent_container/food/snacks/grown/tomato, - /obj/item/reagent_container/food/snacks/grown/tomato, - /obj/item/reagent_container/food/snacks/grown/carrot, - /obj/item/reagent_container/food/snacks/grown/carrot, - /obj/item/reagent_container/food/snacks/grown/lemon, - /obj/item/reagent_container/food/snacks/grown/lemon, - /obj/item/reagent_container/food/snacks/grown/orange, - /obj/item/reagent_container/food/snacks/grown/orange, - /obj/item/reagent_container/food/snacks/grown/lime, - /obj/item/reagent_container/food/snacks/grown/lime, - /obj/item/reagent_container/food/drinks/bottle/whiskey, - /obj/item/reagent_container/food/drinks/bottle/tequila, - /obj/item/reagent_container/food/drinks/bottle/rum, - /obj/item/reagent_container/food/drinks/bottle/wine, - /obj/item/reagent_container/food/drinks/bottle/wine, - /obj/item/reagent_container/food/drinks/bottle/wine, - ) - cost = 10 - containertype = /obj/structure/closet/crate/freezer - containername = "\improper Special ingredients crate" - group = "Food" - /datum/supply_packs/pizzas name = "pizza ready-to-eat (x3)" contains = list( diff --git a/code/datums/supply_packs/operations.dm b/code/datums/supply_packs/operations.dm index 6d5e5d14756c..dcc270cb00a1 100644 --- a/code/datums/supply_packs/operations.dm +++ b/code/datums/supply_packs/operations.dm @@ -112,10 +112,10 @@ /datum/supply_packs/spec_kits name = "Weapons Specialist Kits" contains = list( - /obj/item/spec_kit/asrs, - /obj/item/spec_kit/asrs, - /obj/item/spec_kit/asrs, - /obj/item/spec_kit/asrs, + /obj/item/spec_kit/rifleman, + /obj/item/spec_kit/rifleman, + /obj/item/spec_kit/rifleman, + /obj/item/spec_kit/rifleman, ) cost = 0 containertype = /obj/structure/closet/crate/supply diff --git a/code/datums/supply_packs/spec_ammo.dm b/code/datums/supply_packs/spec_ammo.dm index 7931a4d40204..e20a5de865a3 100644 --- a/code/datums/supply_packs/spec_ammo.dm +++ b/code/datums/supply_packs/spec_ammo.dm @@ -109,10 +109,10 @@ containername = "M42A Incendiary Magazine Crate" group = "Weapons Specialist Ammo" -//XM42B - Disabled during testing per request. +//XM43E1 - Disabled during testing per request. /* /datum/supply_packs/ammo_amr_marksman - name = "XM42B anti-materiel rifle marksman magazines crate (x5)" + name = "XM43E1 anti-materiel rifle marksman magazines crate (x5)" contains = list( /obj/item/ammo_magazine/sniper/anti_materiel, /obj/item/ammo_magazine/sniper/anti_materiel, @@ -122,7 +122,7 @@ ) cost = 30 containertype = /obj/structure/closet/crate/ammo - containername = "XM42B Anti-Materiel Magazine Crate" + containername = "XM43E1 Anti-Materiel Magazine Crate" group = "Specialist Ammo" */ //M4RA diff --git a/code/datums/weather/weather_map_holders/new_varadero.dm b/code/datums/weather/weather_map_holders/new_varadero.dm index 8222001f4739..6dae09711e47 100644 --- a/code/datums/weather/weather_map_holders/new_varadero.dm +++ b/code/datums/weather/weather_map_holders/new_varadero.dm @@ -16,5 +16,5 @@ return prob(PROB_WEATHER_NEW_VARADERO) /datum/weather_ss_map_holder/new_varadero/weather_warning() - for (var/obj/structure/machinery/storm_siren/WS in weather_notify_objects) + for (var/obj/structure/machinery/storm_siren/WS in GLOB.weather_notify_objects) WS.weather_warning() diff --git a/code/datums/weather/weather_map_holders/sorokyne.dm b/code/datums/weather/weather_map_holders/sorokyne.dm index db55d12cdfbe..3c27a43ce1b3 100644 --- a/code/datums/weather/weather_map_holders/sorokyne.dm +++ b/code/datums/weather/weather_map_holders/sorokyne.dm @@ -21,5 +21,5 @@ return FALSE /datum/weather_ss_map_holder/sorokyne/weather_warning() - for (var/obj/structure/machinery/weather_siren/WS in weather_notify_objects) + for (var/obj/structure/machinery/weather_siren/WS in GLOB.weather_notify_objects) WS.weather_warning() diff --git a/code/defines/procs/announcement.dm b/code/defines/procs/announcement.dm index 8e42fd1e76a8..3dd918abbc6b 100644 --- a/code/defines/procs/announcement.dm +++ b/code/defines/procs/announcement.dm @@ -93,7 +93,7 @@ if(isobserver(M) || ishuman(M) && is_mainship_level(M.z)) playsound_client(M.client, sound_to_play, M, vol = 45) - for(var/mob/living/silicon/decoy/ship_ai/AI in ai_mob_list) + for(var/mob/living/silicon/decoy/ship_ai/AI in GLOB.ai_mob_list) INVOKE_ASYNC(AI, TYPE_PROC_REF(/mob/living/silicon/decoy/ship_ai, say), message) switch(logging) @@ -106,7 +106,7 @@ if(!message) return - for(var/mob/living/silicon/decoy/ship_ai/AI in ai_mob_list) + for(var/mob/living/silicon/decoy/ship_ai/AI in GLOB.ai_mob_list) if(channel_prefix) message = "[channel_prefix][message]" INVOKE_ASYNC(AI, TYPE_PROC_REF(/mob/living/silicon/decoy/ship_ai, say), message) diff --git a/code/defines/procs/radio.dm b/code/defines/procs/radio.dm index b4914d049fc9..d99d99b24726 100644 --- a/code/defines/procs/radio.dm +++ b/code/defines/procs/radio.dm @@ -2,8 +2,8 @@ var/freq_text // the name of the channel - for(var/channel in radiochannels) - if(radiochannels[channel] == display_freq) + for(var/channel in GLOB.radiochannels) + if(GLOB.radiochannels[channel] == display_freq) freq_text = channel break diff --git a/code/defines/procs/records.dm b/code/defines/procs/records.dm index a1e2ade2b709..a9d40f993629 100644 --- a/code/defines/procs/records.dm +++ b/code/defines/procs/records.dm @@ -1,48 +1,50 @@ /proc/CreateGeneralRecord() - var/datum/data/record/G = new /datum/data/record() - G.fields["name"] = "New Record" - G.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6)) - G.fields["rank"] = "Unassigned" - G.fields["real_rank"] = "Unassigned" - G.fields["sex"] = "Male" - G.fields["age"] = "Unknown" - G.fields["ethnicity"] = "Unknown" - G.fields["p_stat"] = "Active" - G.fields["m_stat"] = "Stable" - G.fields["species"] = "Human" - G.fields["origin"] = "Unknown" - G.fields["faction"] = "Unknown" - G.fields["mob_faction"] = "Unknown" - G.fields["religion"] = "Unknown" - GLOB.data_core.general += G - return G + var/datum/data/record/general_record = new /datum/data/record() + general_record.fields["name"] = "New Record" + general_record.name = "New Record" + general_record.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6)) + general_record.fields["rank"] = "Unassigned" + general_record.fields["real_rank"] = "Unassigned" + general_record.fields["sex"] = "Male" + general_record.fields["age"] = "Unknown" + general_record.fields["ethnicity"] = "Unknown" + general_record.fields["p_stat"] = "Active" + general_record.fields["m_stat"] = "Stable" + general_record.fields["species"] = "Human" + general_record.fields["origin"] = "Unknown" + general_record.fields["faction"] = "Unknown" + general_record.fields["mob_faction"] = "Unknown" + general_record.fields["religion"] = "Unknown" + GLOB.data_core.general += general_record + return general_record /proc/CreateSecurityRecord(name as text, id as text) - var/datum/data/record/R = new /datum/data/record() - R.fields["name"] = name - R.fields["id"] = id - R.name = text("Security Record #[id]") - R.fields["incidents"] = "None" - GLOB.data_core.security += R - return R + var/datum/data/record/security_record = new /datum/data/record() + security_record.fields["name"] = name + security_record.fields["id"] = id + security_record.name = text("Security Record #[id]") + security_record.fields["incidents"] = "None" + GLOB.data_core.security += security_record + return security_record -/proc/create_medical_record(mob/living/carbon/human/H) - var/datum/data/record/M = new /datum/data/record() - M.fields["id"] = null - M.fields["name"] = H.real_name - M.fields["b_type"] = H.b_type - M.fields["mi_dis"] = "None" - M.fields["mi_dis_d"] = "No minor disabilities have been declared." - M.fields["ma_dis"] = "None" - M.fields["ma_dis_d"] = "No major disabilities have been diagnosed." - M.fields["alg"] = "None" - M.fields["alg_d"] = "No allergies have been detected in this patient." - M.fields["cdi"] = "None" - M.fields["cdi_d"] = "No diseases have been diagnosed at the moment." - M.fields["last_scan_time"] = null - M.fields["last_scan_result"] = "No scan data on record" - M.fields["autodoc_data"] = list() - M.fields["autodoc_manual"] = list() - M.fields["ref"] = WEAKREF(H) - GLOB.data_core.medical += M - return M +/proc/create_medical_record(mob/living/carbon/human/person) + var/datum/data/record/medical_record = new /datum/data/record() + medical_record.fields["id"] = null + medical_record.fields["name"] = person.real_name + medical_record.name = person.real_name + medical_record.fields["b_type"] = person.b_type + medical_record.fields["mi_dis"] = "None" + medical_record.fields["mi_dis_d"] = "No minor disabilities have been declared." + medical_record.fields["ma_dis"] = "None" + medical_record.fields["ma_dis_d"] = "No major disabilities have been diagnosed." + medical_record.fields["alg"] = "None" + medical_record.fields["alg_d"] = "No allergies have been detected in this patient." + medical_record.fields["cdi"] = "None" + medical_record.fields["cdi_d"] = "No diseases have been diagnosed at the moment." + medical_record.fields["last_scan_time"] = null + medical_record.fields["last_scan_result"] = "No scan data on record" + medical_record.fields["autodoc_data"] = list() + medical_record.fields["autodoc_manual"] = list() + medical_record.fields["ref"] = WEAKREF(person) + GLOB.data_core.medical += medical_record + return medical_record diff --git a/code/game/area/almayer.dm b/code/game/area/almayer.dm index 742ae7a1addb..d9ff42f4f55c 100644 --- a/code/game/area/almayer.dm +++ b/code/game/area/almayer.dm @@ -29,12 +29,12 @@ SShijack.progress_areas[src] = power_equip /area/shuttle/almayer/elevator_maintenance/upperdeck - name = "\improper Maintenance Elevator" + name = "\improper Upper Deck Maintenance Elevator" icon_state = "shuttle" fake_zlevel = 1 /area/shuttle/almayer/elevator_maintenance/lowerdeck - name = "\improper Maintenance Elevator" + name = "\improper Lower Deck Maintenance Elevator" icon_state = "shuttle" fake_zlevel = 2 @@ -98,23 +98,23 @@ resin_construction_allowed = FALSE /area/almayer/command/securestorage - name = "\improper Secure Storage" + name = "\improper Upper Deck Secure Storage" icon_state = "corporatespace" - fake_zlevel = 2 // lowerdeck + fake_zlevel = 1 // upperdeck /area/almayer/command/computerlab - name = "\improper Computer Lab" + name = "\improper Upper Deck Computer Lab" icon_state = "ceroom" - fake_zlevel = 2 // lowerdeck + fake_zlevel = 1 // upperdeck /area/almayer/command/telecomms - name = "\improper Telecommunications" + name = "\improper Upper Deck Telecommunications" icon_state = "tcomms" fake_zlevel = 1 // upperdeck flags_area = AREA_NOTUNNEL /area/almayer/command/self_destruct - name = "\improper Self-Destruct Core Room" + name = "\improper Upper Deck Self-Destruct Core Room" icon_state = "selfdestruct" fake_zlevel = 1 // upperdeck flags_area = AREA_NOTUNNEL @@ -125,7 +125,7 @@ fake_zlevel = 1 // upperdeck /area/almayer/command/combat_correspondent - name = "\improper Combat Correspondent Office" + name = "\improper Upper Deck Combat Correspondent Office" icon_state = "selfdestruct" fake_zlevel = 1 // upperdeck @@ -133,36 +133,36 @@ minimap_color = MINIMAP_AREA_ENGI /area/almayer/engineering/upper_engineering - name = "\improper Upper Engineering" + name = "\improper Upper Deck Engineering" icon_state = "upperengineering" fake_zlevel = 1 // upperdeck /area/almayer/engineering/upper_engineering/starboard - name = "\improper Starboard Upper Engineering" + name = "\improper Upper Deck Starboard Engineering" /area/almayer/engineering/upper_engineering/port - name = "\improper Port Upper Engineering" + name = "\improper Upper Deck Port Engineering" /area/almayer/engineering/upper_engineering/notunnel flags_area = AREA_NOTUNNEL /area/almayer/engineering/ce_room - name = "\improper Chief Engineer Office" + name = "\improper Upper Deck Chief Engineer Office" icon_state = "ceroom" fake_zlevel = 1 // upperdeck /area/almayer/engineering/lower_engine_monitoring - name = "\improper Engine Reactor Monitoring" + name = "\improper Lower Deck Engine Reactor Monitoring" icon_state = "lowermonitoring" fake_zlevel = 2 // lowerdeck /area/almayer/engineering/lower_engineering - name = "\improper Engineering Lower" + name = "\improper Lower Deck Engineering" icon_state = "lowerengineering" fake_zlevel = 2 // lowerdeck /area/almayer/engineering/engineering_workshop - name = "\improper Engineering Workshop" + name = "\improper Lower Deck Engineering Workshop" icon_state = "workshop" fake_zlevel = 2 // lowerdeck @@ -180,17 +180,17 @@ hijack_evacuation_type = EVACUATION_TYPE_ADDITIVE /area/almayer/engineering/starboard_atmos - name = "\improper Atmospherics Starboard" + name = "\improper Upper Deck Starboard Atmospherics" icon_state = "starboardatmos" fake_zlevel = 1 // upperdeck /area/almayer/engineering/port_atmos - name = "\improper Atmospherics Port" + name = "\improper Upper Deck Port Atmospherics" icon_state = "portatmos" fake_zlevel = 1 // upperdeck /area/almayer/engineering/laundry - name = "\improper Laundry Room" + name = "\improper Upper Deck Laundry Room" icon_state = "laundry" fake_zlevel = 1 // upperdeck @@ -211,17 +211,17 @@ fake_zlevel = 2 // lowerdeck /area/almayer/shipboard/starboard_missiles - name = "\improper Missile Tubes Starboard" + name = "\improper Upper Deck Starboard Missile Tubes" icon_state = "starboardmissile" fake_zlevel = 1 // upperdeck /area/almayer/shipboard/port_missiles - name = "\improper Missile Tubes Port" + name = "\improper Upper Deck Port Missile Tubes" icon_state = "portmissile" fake_zlevel = 1 // upperdeck /area/almayer/shipboard/weapon_room - name = "\improper Weapon Control Room" + name = "\improper Lower Deck Weapon Control" icon_state = "weaponroom" fake_zlevel = 2 // lowerdeck @@ -229,12 +229,12 @@ flags_area = AREA_NOTUNNEL /area/almayer/shipboard/starboard_point_defense - name = "\improper Point Defense Starboard" + name = "\improper Lower Deck Starboard Point Defense" icon_state = "starboardpd" fake_zlevel = 2 // lowerdeck /area/almayer/shipboard/port_point_defense - name = "\improper Point Defense Port" + name = "\improper Lower Deck Port Point Defense" icon_state = "portpd" fake_zlevel = 2 // lowerdeck @@ -300,7 +300,7 @@ icon_state = "chiefmpoffice" /area/almayer/shipboard/sea_office - name = "\improper Senior Enlisted Advisor Office" + name = "\improper Lower Deck Senior Enlisted Advisor Office" icon_state = "chiefmpoffice" fake_zlevel = 2 // lowerdeck @@ -326,7 +326,7 @@ soundscape_interval = 50 /area/almayer/hallways/vehiclehangar - name = "\improper Vehicle Storage" + name = "\improper Lower Deck Vehicle Storage" icon_state = "exoarmor" fake_zlevel = 2 @@ -334,135 +334,136 @@ minimap_color = MINIMAP_AREA_COLONY /area/almayer/living/tankerbunks - name = "\improper Vehicle Crew Bunks" + name = "\improper Lower Deck Vehicle Crew Bunks" icon_state = "livingspace" fake_zlevel = 2 /area/almayer/living/auxiliary_officer_office - name = "\improper Auxiliary Support Officer office" + name = "\improper Lower Deck Auxiliary Support Officer office" icon_state = "livingspace" fake_zlevel = 2 /area/almayer/squads/tankdeliveries - name = "\improper Vehicle ASRS" + name = "\improper Lower Deck Vehicle ASRS" icon_state = "req" fake_zlevel = 2 /area/almayer/hallways/exoarmor - name = "\improper Vehicle Armor Storage" + name = "\improper Lower Deck Vehicle Armor Storage" icon_state = "exoarmor" fake_zlevel = 2 // lowerdeck /area/almayer/hallways/repair_bay - name = "\improper Deployment Workshop" + name = "\improper Lower Deck Deployment Workshop" icon_state = "dropshiprepair" fake_zlevel = 2 // lowerdeck /area/almayer/hallways/mission_planner - name = "\improper Dropship Central Computer Room" + name = "\improper Lower Deck Dropship Central Computer Room" icon_state = "missionplanner" fake_zlevel = 2 // lowerdeck /area/almayer/hallways/starboard_umbilical - name = "\improper Umbilical Starboard" + name = "\improper Lower Deck Starboard Umbilical Hallway" icon_state = "starboardumbilical" fake_zlevel = 2 // lowerdeck /area/almayer/hallways/port_umbilical - name = "\improper Umbilical Port" + name = "\improper Lower Deck Port Umbilical Hallway" icon_state = "portumbilical" fake_zlevel = 2 // lowerdeck /area/almayer/hallways/aft_hallway - name = "\improper Hallway Aft" + name = "\improper Upper Deck Aft Hallway" icon_state = "aft" fake_zlevel = 1 // upperdeck /area/almayer/hallways/stern_hallway - name = "\improper Hallway Stern" + name = "\improper Upper Deck Stern Hallway" icon_state = "stern" fake_zlevel = 1 // upperdeck /area/almayer/hallways/port_hallway - name = "\improper Hallway Port" + name = "\improper Lower Deck Port Hallway" icon_state = "port" fake_zlevel = 2 // lowerdeck /area/almayer/hallways/starboard_hallway - name = "\improper Hallway Starboard" + name = "\improper Lower Deck Starboard Hallway" icon_state = "starboard" fake_zlevel = 2 // lowerdeck /area/almayer/stair_clone - name = "\improper Stairs" + name = "\improper Lower Deck Stairs" icon_state = "stairs_lowerdeck" fake_zlevel = 2 // lowerdeck resin_construction_allowed = FALSE /area/almayer/stair_clone/upper + name = "\improper Upper Deck Stairs" icon_state = "stairs_upperdeck" fake_zlevel = 1 // upperdeck /area/almayer/hull/lower_hull - name = "\improper Hull Lower" + name = "\improper Lower Deck Hull" icon_state = "lowerhull" fake_zlevel = 2 // lowerdeck /area/almayer/hull/upper_hull - name = "\improper Hull Upper" + name = "\improper Upper Deck Hull" icon_state = "upperhull" fake_zlevel = 1 // upperdeck /area/almayer/hull/upper_hull/u_f_s - name = "\improper Upper Fore-Starboard Hull" + name = "\improper Upper Deck Fore-Starboard Hull" icon_state = "upperhull" /area/almayer/hull/upper_hull/u_m_s - name = "\improper Upper Midship-Starboard Hull" + name = "\improper Upper Deck Starboard-Midship Hull" icon_state = "upperhull" /area/almayer/hull/upper_hull/u_a_s - name = "\improper Upper Aft-Starboard Hull" + name = "\improper Upper Deck Starboard-Aft Hull" icon_state = "upperhull" /area/almayer/hull/upper_hull/u_f_p - name = "\improper Upper Fore-Port Hull" + name = "\improper Upper Deck Port-Fore Hull" icon_state = "upperhull" /area/almayer/hull/upper_hull/u_m_p - name = "\improper Upper Midship-Port Hull" + name = "\improper Upper Deck Port-Midship Hull" icon_state = "upperhull" /area/almayer/hull/upper_hull/u_a_p - name = "\improper Upper Aft-Port Hull" + name = "\improper Upper Deck Port-Aft Hull" icon_state = "upperhull" /area/almayer/hull/lower_hull/l_f_s - name = "\improper Lower Fore-Starboard Hull" + name = "\improper Lower Deck Starboard-Fore Hull" icon_state = "upperhull" /area/almayer/hull/lower_hull/l_m_s - name = "\improper Lower Midship-Starboard Hull" + name = "\improper Lower Deck Starboard-Midship Hull" icon_state = "upperhull" /area/almayer/hull/lower_hull/l_a_s - name = "\improper Lower Aft-Starboard Hull" + name = "\improper Lower Deck Starboard Hull" icon_state = "upperhull" /area/almayer/hull/lower_hull/l_f_p - name = "\improper Lower Fore-Port Hull" + name = "\improper Lower Deck Port-Fore Hull" icon_state = "upperhull" /area/almayer/hull/lower_hull/l_m_p - name = "\improper Lower Midship-Port Hull" + name = "\improper Lower Deck Port-Midship Hull" icon_state = "upperhull" /area/almayer/hull/lower_hull/l_a_p - name = "\improper Lower Aft-Port Hull" + name = "\improper Lower Deck Port-Aft Hull" icon_state = "upperhull" /area/almayer/living/cryo_cells - name = "\improper Cryo Cells" + name = "\improper Lower Deck Cryo Cells" icon_state = "cryo" fake_zlevel = 2 // lowerdeck @@ -472,22 +473,22 @@ fake_zlevel = 2 // lowerdeck /area/almayer/living/port_emb - name = "\improper Extended Mission Bunks" + name = "\improper Lower Deck Port Extended Mission Bunks" icon_state = "portemb" fake_zlevel = 2 // lowerdeck /area/almayer/living/starboard_emb - name = "\improper Extended Mission Bunks" + name = "\improper Lower Deck Starboard Extended Mission Bunks" icon_state = "starboardemb" fake_zlevel = 2 // lowerdeck /area/almayer/living/port_garden - name = "\improper Garden" + name = "\improper Port Garden" icon_state = "portemb" fake_zlevel = 1 // upperdeck /area/almayer/living/starboard_garden - name = "\improper Garden" + name = "\improper Starboard Garden" icon_state = "starboardemb" fake_zlevel = 1 // upperdeck @@ -502,12 +503,12 @@ fake_zlevel = 2 // lowerdeck /area/almayer/living/officer_rnr - name = "\improper Officer's Lounge" + name = "\improper Upper Deck Officer's Lounge" icon_state = "officerrnr" fake_zlevel = 1 // upperdeck /area/almayer/living/officer_study - name = "\improper Officer's Study" + name = "\improper Upper Deck Officer's Study" icon_state = "officerstudy" fake_zlevel = 1 // upperdeck @@ -522,17 +523,17 @@ fake_zlevel = 2 // lowerdeck /area/almayer/living/gym - name = "\improper Gym" + name = "\improper Lower Deck Gym" icon_state = "officerrnr" fake_zlevel = 2 // lowerdeck /area/almayer/living/cafeteria_officer - name = "\improper Officer Cafeteria" + name = "\improper Upper Deck Officer Cafeteria" icon_state = "food" fake_zlevel = 1 // upperdeck /area/almayer/living/offices - name = "\improper Conference Office" + name = "\improper Lower Deck Conference Office" icon_state = "briefing" fake_zlevel = 2 // lowerdeck @@ -560,7 +561,7 @@ fake_zlevel = 1 // upperdeck /area/almayer/living/synthcloset - name = "\improper Synthetic Storage Closet" + name = "\improper Upper Deck Synthetic Storage Closet" icon_state = "livingspace" fake_zlevel = 1 // upperdeck @@ -738,16 +739,16 @@ hijack_evacuation_type = EVACUATION_TYPE_ADDITIVE /area/almayer/lifeboat_pumps/north1 - name = "North West Lifeboat Fuel Pump" + name = "Starboard Fore Lifeboat Fuel Pump" /area/almayer/lifeboat_pumps/north2 - name = "North East Lifeboat Fuel Pump" + name = "Starboard Aft Lifeboat Fuel Pump" /area/almayer/lifeboat_pumps/south1 - name = "South West Lifeboat Fuel Pump" + name = "Port Fore Lifeboat Fuel Pump" /area/almayer/lifeboat_pumps/south2 - name = "South East Lifeboat Fuel Pump" + name = "Port Aft Lifeboat Fuel Pump" /area/almayer/command/lifeboat name = "\improper Lifeboat Docking Port" @@ -760,7 +761,7 @@ flags_area = AREA_NOTUNNEL /area/space/almayer/lifeboat_dock - name = "\improper Lifeboat Docking Port" + name = "\improper Port Lifeboat Docking" icon_state = "lifeboat" fake_zlevel = 1 // upperdeck flags_area = AREA_NOTUNNEL diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index c81da5556e24..536e29599597 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -94,8 +94,8 @@ layer = AREAS_LAYER uid = ++global_uid . = ..() - active_areas += src - all_areas += src + GLOB.active_areas += src + GLOB.all_areas += src reg_in_areas_in_z() if(is_mainship_level(z)) GLOB.ship_areas += src @@ -138,13 +138,13 @@ C.network.Remove(CAMERA_NET_POWER_ALARMS) else C.network.Add(CAMERA_NET_POWER_ALARMS) - for (var/mob/living/silicon/aiPlayer in ai_mob_list) + for (var/mob/living/silicon/aiPlayer in GLOB.ai_mob_list) if(aiPlayer.z == source.z) if (state == 1) aiPlayer.cancelAlarm("Power", src, source) else aiPlayer.triggerAlarm("Power", src, cameras, source) - for(var/obj/structure/machinery/computer/station_alert/a in machines) + for(var/obj/structure/machinery/computer/station_alert/a in GLOB.machines) if(a.z == source.z) if(state == 1) a.cancelAlarm("Power", src, source) @@ -169,9 +169,9 @@ if (danger_level < 2 && atmosalm >= 2) for(var/obj/structure/machinery/camera/C in src) C.network.Remove(CAMERA_NET_ATMOSPHERE_ALARMS) - for(var/mob/living/silicon/aiPlayer in ai_mob_list) + for(var/mob/living/silicon/aiPlayer in GLOB.ai_mob_list) aiPlayer.cancelAlarm("Atmosphere", src, src) - for(var/obj/structure/machinery/computer/station_alert/a in machines) + for(var/obj/structure/machinery/computer/station_alert/a in GLOB.machines) a.cancelAlarm("Atmosphere", src, src) if (danger_level >= 2 && atmosalm < 2) @@ -180,9 +180,9 @@ for(var/obj/structure/machinery/camera/C in src) cameras += C C.network.Add(CAMERA_NET_ATMOSPHERE_ALARMS) - for(var/mob/living/silicon/aiPlayer in ai_mob_list) + for(var/mob/living/silicon/aiPlayer in GLOB.ai_mob_list) aiPlayer.triggerAlarm("Atmosphere", src, cameras, src) - for(var/obj/structure/machinery/computer/station_alert/a in machines) + for(var/obj/structure/machinery/computer/station_alert/a in GLOB.machines) a.triggerAlarm("Atmosphere", src, cameras, src) air_doors_close() @@ -231,9 +231,9 @@ for (var/obj/structure/machinery/camera/C in src) cameras.Add(C) C.network.Add(CAMERA_NET_FIRE_ALARMS) - for (var/mob/living/silicon/ai/aiPlayer in ai_mob_list) + for (var/mob/living/silicon/ai/aiPlayer in GLOB.ai_mob_list) aiPlayer.triggerAlarm("Fire", src, cameras, src) - for (var/obj/structure/machinery/computer/station_alert/a in machines) + for (var/obj/structure/machinery/computer/station_alert/a in GLOB.machines) a.triggerAlarm("Fire", src, cameras, src) /area/proc/firereset() @@ -249,9 +249,9 @@ INVOKE_ASYNC(D, TYPE_PROC_REF(/obj/structure/machinery/door, open)) for (var/obj/structure/machinery/camera/C in src) C.network.Remove(CAMERA_NET_FIRE_ALARMS) - for (var/mob/living/silicon/ai/aiPlayer in ai_mob_list) + for (var/mob/living/silicon/ai/aiPlayer in GLOB.ai_mob_list) aiPlayer.cancelAlarm("Fire", src, src) - for (var/obj/structure/machinery/computer/station_alert/a in machines) + for (var/obj/structure/machinery/computer/station_alert/a in GLOB.machines) a.cancelAlarm("Fire", src, src) /area/proc/readyalert() diff --git a/code/game/area/kutjevo.dm b/code/game/area/kutjevo.dm index 422017c0a46b..a5a12cd5b999 100644 --- a/code/game/area/kutjevo.dm +++ b/code/game/area/kutjevo.dm @@ -67,6 +67,10 @@ name = "Kutjevo - Power Station River" icon_state = "lz_river" +/area/kutjevo/exterior/spring + name = "Kutjevo - Southern Spring" + icon_state = "lz_river" + /area/kutjevo/exterior/scrubland name = "Kutjevo - Scrubland" icon_state = "scrubland" diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 283efdc50a22..5f36b3b8b390 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -166,7 +166,7 @@ directive is properly returned. if(!time) transform = complete return - animate(src, transform = complete, time = time, easing = easing) + animate(src, transform = complete, time = time, easing = easing, flags = ANIMATION_PARALLEL) /// Upates the base_transform which will be compounded with other transforms /atom/proc/update_base_transform(matrix/new_transform, time = 0) @@ -205,7 +205,9 @@ directive is properly returned. return /atom/proc/emp_act(severity) - return + SHOULD_CALL_PARENT(TRUE) + + SEND_SIGNAL(src, COMSIG_ATOM_EMP_ACT, severity) /atom/proc/in_contents_of(container)//can take class or object instance as argument if(ispath(container)) @@ -245,8 +247,8 @@ directive is properly returned. if(!examine_strings) log_debug("Attempted to create an examine block with no strings! Atom : [src], user : [user]") return - to_chat(user, examine_block(examine_strings.Join("\n"))) SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, examine_strings) + to_chat(user, examine_block(examine_strings.Join("\n"))) /atom/proc/get_examine_text(mob/user) . = list() @@ -385,11 +387,11 @@ Parameters are passed from New. var/turf/opaque_turf = loc opaque_turf.directional_opacity = ALL_CARDINALS // No need to recalculate it in this case, it's guaranteed to be on afterwards anyways. - pass_flags = pass_flags_cache[type] + pass_flags = GLOB.pass_flags_cache[type] if (isnull(pass_flags)) pass_flags = new() initialize_pass_flags(pass_flags) - pass_flags_cache[type] = pass_flags + GLOB.pass_flags_cache[type] = pass_flags else initialize_pass_flags() Decorate(mapload) @@ -416,7 +418,7 @@ Parameters are passed from New. T.appearance = src.appearance T.setDir(src.dir) - clones_t.Add(src) + GLOB.clones_t.Add(src) src.clone = T // EFFECTS @@ -721,7 +723,7 @@ Parameters are passed from New. usr.client.cmd_admin_emp(src) if(href_list[VV_HK_MODIFY_TRANSFORM] && check_rights(R_VAREDIT)) - var/result = tgui_input_list(usr, "Choose the transformation to apply","Transform Mod", list("Scale","Translate","Rotate")) + var/result = tgui_input_list(usr, "Choose the transformation to apply","Transform Mod", list("Scale","Translate","Rotate", "Reflect X Axis", "Reflect Y Axis")) if(!result) return if(!result) @@ -747,7 +749,22 @@ Parameters are passed from New. return var/matrix/base_matrix = matrix(base_transform) update_base_transform(base_matrix.Turn(angle)) - + if("Reflect X Axis") + var/matrix/current = matrix(base_transform) + var/matrix/reflector = matrix() + reflector.a = -1 + reflector.d = 0 + reflector.b = 0 + reflector.e = 1 + update_base_transform(current * reflector) + if("Reflect Y Axis") + var/matrix/current = matrix(base_transform) + var/matrix/reflector = matrix() + reflector.a = 1 + reflector.d = 0 + reflector.b = 0 + reflector.e = -1 + update_base_transform(current * reflector) SEND_SIGNAL(src, COMSIG_ATOM_VV_MODIFY_TRANSFORM) if(href_list[VV_HK_AUTO_RENAME] && check_rights(R_VAREDIT)) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index b8a901ccf321..21f7b6b0a9be 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -281,7 +281,7 @@ C.proj_x = shift_x C.proj_y = shift_y - clones.Add(C) + GLOB.clones.Add(C) C.mstr = src //Link clone and master src.clone = C @@ -313,7 +313,7 @@ clone.set_light(0) //Kill clone light /atom/movable/proc/destroy_clone() - clones.Remove(src.clone) + GLOB.clones.Remove(src.clone) qdel(src.clone) src.clone = null diff --git a/code/game/cas_manager/datums/cas_fire_mission.dm b/code/game/cas_manager/datums/cas_fire_mission.dm index 0a04876414e7..cb43caec30bb 100644 --- a/code/game/cas_manager/datums/cas_fire_mission.dm +++ b/code/game/cas_manager/datums/cas_fire_mission.dm @@ -114,7 +114,7 @@ if(get_turf(M) == initial_turf) relative_dir = 0 else - relative_dir = get_dir(M, initial_turf) + relative_dir = Get_Compass_Dir(M, initial_turf) var/ds_identifier = "LARGE BIRD" if (M.mob_flags & KNOWS_TECHNOLOGY) @@ -132,7 +132,7 @@ if(get_turf(M) == initial_turf) relative_dir = 0 else - relative_dir = get_dir(M, initial_turf) + relative_dir = Get_Compass_Dir(M, initial_turf) var/ds_identifier = "LARGE BIRD" if (M.mob_flags & KNOWS_TECHNOLOGY) diff --git a/code/game/cas_manager/datums/cas_iff_group.dm b/code/game/cas_manager/datums/cas_iff_group.dm index f384115d7756..dc39b462c9f1 100644 --- a/code/game/cas_manager/datums/cas_iff_group.dm +++ b/code/game/cas_manager/datums/cas_iff_group.dm @@ -8,8 +8,7 @@ /datum/cas_iff_group/proc/remove_signal(datum/cas_signal/signal) cas_signals -= signal -var/global/datum/cas_iff_group/uscm_cas_group = new /datum/cas_iff_group() +GLOBAL_DATUM_INIT(uscm_cas_group, /datum/cas_iff_group, new()) +GLOBAL_DATUM_INIT(upp_cas_group, /datum/cas_iff_group, new()) -var/global/datum/cas_iff_group/upp_cas_group = new /datum/cas_iff_group() - -var/global/list/datum/cas_iff_group/cas_groups = list(FACTION_MARINE = uscm_cas_group, FACTION_UPP = upp_cas_group, FACTION_NEUTRAL = uscm_cas_group) +GLOBAL_LIST_INIT_TYPED(cas_groups, /datum/cas_iff_group, list(FACTION_MARINE = GLOB.uscm_cas_group, FACTION_UPP = GLOB.upp_cas_group, FACTION_NEUTRAL = GLOB.uscm_cas_group)) diff --git a/code/game/gamemodes/cm_initialize.dm b/code/game/gamemodes/cm_initialize.dm index effd3325f887..ffcfd37489af 100644 --- a/code/game/gamemodes/cm_initialize.dm +++ b/code/game/gamemodes/cm_initialize.dm @@ -100,7 +100,7 @@ Additional game mode variables. /datum/game_mode/proc/get_roles_list() - return ROLES_USCM + return GLOB.ROLES_USCM //===================================================\\ @@ -109,16 +109,16 @@ Additional game mode variables. //===================================================\\ /datum/game_mode/proc/initialize_special_clamps() - xeno_starting_num = clamp((readied_players/CONFIG_GET(number/xeno_number_divider)), xeno_required_num, INFINITY) //(n, minimum, maximum) - surv_starting_num = clamp((readied_players/CONFIG_GET(number/surv_number_divider)), 2, 8) //this doesnt run + xeno_starting_num = clamp((GLOB.readied_players/CONFIG_GET(number/xeno_number_divider)), xeno_required_num, INFINITY) //(n, minimum, maximum) + surv_starting_num = clamp((GLOB.readied_players/CONFIG_GET(number/surv_number_divider)), 2, 8) //this doesnt run marine_starting_num = GLOB.player_list.len - xeno_starting_num - surv_starting_num - for(var/datum/squad/sq in RoleAuthority.squads) + for(var/datum/squad/sq in GLOB.RoleAuthority.squads) if(sq) sq.max_engineers = engi_slot_formula(marine_starting_num) sq.max_medics = medic_slot_formula(marine_starting_num) - for(var/i in RoleAuthority.roles_by_name) - var/datum/job/J = RoleAuthority.roles_by_name[i] + for(var/i in GLOB.RoleAuthority.roles_by_name) + var/datum/job/J = GLOB.RoleAuthority.roles_by_name[i] if(J.scaled) J.set_spawn_positions(marine_starting_num) @@ -149,7 +149,7 @@ Additional game mode variables. else if(!istype(player,/mob/dead)) continue //Otherwise we just want to grab the ghosts. - if(RoleAuthority.roles_whitelist[player.ckey] & WHITELIST_PREDATOR) //Are they whitelisted? + if(GLOB.RoleAuthority.roles_whitelist[player.ckey] & WHITELIST_PREDATOR) //Are they whitelisted? if(!player.client.prefs) player.client.prefs = new /datum/preferences(player.client) //Somehow they don't have one. @@ -176,13 +176,13 @@ Additional game mode variables. if(!pred_candidate.client) return - var/datum/job/J = RoleAuthority.roles_by_name[JOB_PREDATOR] + var/datum/job/J = GLOB.RoleAuthority.roles_by_name[JOB_PREDATOR] if(!J) if(show_warning) to_chat(pred_candidate, SPAN_WARNING("Something went wrong!")) return - if(!(RoleAuthority.roles_whitelist[pred_candidate.ckey] & WHITELIST_PREDATOR)) + if(!(GLOB.RoleAuthority.roles_whitelist[pred_candidate.ckey] & WHITELIST_PREDATOR)) if(show_warning) to_chat(pred_candidate, SPAN_WARNING("You are not whitelisted! You may apply on the forums to be whitelisted as a predator.")) return @@ -195,9 +195,9 @@ Additional game mode variables. to_chat(pred_candidate, SPAN_WARNING("You already were a Yautja! Give someone else a chance.")) return - if(show_warning && tgui_alert(pred_candidate, "Confirm joining the hunt. You will join as \a [lowertext(J.get_whitelist_status(RoleAuthority.roles_whitelist, pred_candidate.client))] predator", "Confirmation", list("Yes", "No"), 10 SECONDS) != "Yes") + if(show_warning && tgui_alert(pred_candidate, "Confirm joining the hunt. You will join as \a [lowertext(J.get_whitelist_status(GLOB.RoleAuthority.roles_whitelist, pred_candidate.client))] predator", "Confirmation", list("Yes", "No"), 10 SECONDS) != "Yes") return - if(J.get_whitelist_status(RoleAuthority.roles_whitelist, pred_candidate.client) == WHITELIST_NORMAL) + if(J.get_whitelist_status(GLOB.RoleAuthority.roles_whitelist, pred_candidate.client) == WHITELIST_NORMAL) var/pred_max = calculate_pred_max if(pred_current_num >= pred_max) if(show_warning) to_chat(pred_candidate, SPAN_WARNING("Only [pred_max] predators may spawn this round, but Councillors and Ancients do not count.")) @@ -234,13 +234,13 @@ Additional game mode variables. pred_candidate.mind.transfer_to(new_predator, TRUE) new_predator.client = pred_candidate.client - var/datum/job/J = RoleAuthority.roles_by_name[JOB_PREDATOR] + var/datum/job/J = GLOB.RoleAuthority.roles_by_name[JOB_PREDATOR] if(!J) qdel(new_predator) return - RoleAuthority.equip_role(new_predator, J, new_predator.loc) + GLOB.RoleAuthority.equip_role(new_predator, J, new_predator.loc) return new_predator @@ -356,21 +356,27 @@ Additional game mode variables. else available_xenos_non_ssd += cur_xeno - // Only offer buried larva if there is no queue: - // This basically means this block of code will almost never execute, because we are instead relying on the hive cores/larva pops to handle their larva - // Technically this should be after a get_alien_candidates() call to be accurate, but we are intentionally trying to not call that proc as much as possible - if(GLOB.xeno_queue_candidate_count < 1) - var/datum/hive_status/hive - for(var/hivenumber in GLOB.hive_datum) - hive = GLOB.hive_datum[hivenumber] - if(!hive.hardcore && hive.stored_larva && (hive.hive_location || (world.time < XENO_BURIED_LARVA_TIME_LIMIT + SSticker.round_start_time))) - if(SSticker.mode && (SSticker.mode.flags_round_type & MODE_RANDOM_HIVE)) - available_xenos |= "any buried larva" - LAZYADD(available_xenos["any buried larva"], hive) - else - var/larva_option = "buried larva ([hive])" - available_xenos += larva_option - available_xenos[larva_option] = list(hive) + var/datum/hive_status/hive + for(var/hivenumber in GLOB.hive_datum) + hive = GLOB.hive_datum[hivenumber] + if(hive.hardcore) + continue + if(!hive.stored_larva) + continue + // Only offer buried larva if there is no queue because we are instead relying on the hive cores/larva pops to handle their larva: + // Technically this should be after a get_alien_candidates() call to be accurate, but we are intentionally trying to not call that proc as much as possible + if(hive.hive_location && GLOB.xeno_queue_candidate_count > 0) + continue + if(!hive.hive_location && (world.time > XENO_BURIED_LARVA_TIME_LIMIT + SSticker.round_start_time)) + continue + + if(SSticker.mode && (SSticker.mode.flags_round_type & MODE_RANDOM_HIVE)) + available_xenos |= "any buried larva" + LAZYADD(available_xenos["any buried larva"], hive) + else + var/larva_option = "buried larva ([hive])" + available_xenos += larva_option + available_xenos[larva_option] = list(hive) if(!available_xenos.len || (instant_join && !available_xenos_non_ssd.len)) if(!xeno_candidate.client || !xeno_candidate.client.prefs || !(xeno_candidate.client.prefs.be_special & BE_ALIEN_AFTER_DEATH)) @@ -423,7 +429,7 @@ Additional game mode variables. for(var/mob_name in picked_hive.banished_ckeys) if(picked_hive.banished_ckeys[mob_name] == xeno_candidate.ckey) to_chat(xeno_candidate, SPAN_WARNING("You are banished from the [picked_hive], you may not rejoin unless the Queen re-admits you or dies.")) - return + return FALSE if(isnewplayer(xeno_candidate)) var/mob/new_player/noob = xeno_candidate noob.close_spawn_windows() @@ -443,9 +449,6 @@ Additional game mode variables. return FALSE new_xeno = userInput - if(!xeno_candidate) - return FALSE - if(!(new_xeno in GLOB.living_xeno_list) || new_xeno.stat == DEAD) to_chat(xeno_candidate, SPAN_WARNING("You cannot join if the xenomorph is dead.")) return FALSE @@ -479,14 +482,14 @@ Additional game mode variables. else new_xeno = pick(available_xenos_non_ssd) //Just picks something at random. if(istype(new_xeno) && xeno_candidate && xeno_candidate.client) if(isnewplayer(xeno_candidate)) - var/mob/new_player/N = xeno_candidate - N.close_spawn_windows() + var/mob/new_player/noob = xeno_candidate + noob.close_spawn_windows() for(var/mob_name in new_xeno.hive.banished_ckeys) if(new_xeno.hive.banished_ckeys[mob_name] == xeno_candidate.ckey) to_chat(xeno_candidate, SPAN_WARNING("You are banished from this hive, You may not rejoin unless the Queen re-admits you or dies.")) - return + return FALSE if(transfer_xeno(xeno_candidate, new_xeno)) - return 1 + return TRUE to_chat(xeno_candidate, "JAS01: Something went wrong, tell a coder.") /datum/game_mode/proc/attempt_to_join_as_facehugger(mob/xeno_candidate) @@ -594,7 +597,14 @@ Additional game mode variables. for(var/obj/effect/alien/resin/special/pylon/cycled_pylon as anything in hive.hive_structures[XENO_STRUCTURE_PYLON]) if(cycled_pylon.lesser_drone_spawns >= 1) - selection_list += "[cycled_pylon.name] at [get_area(cycled_pylon)]" + var/pylon_number = 1 + var/pylon_name = "[cycled_pylon.name] at [get_area(cycled_pylon)]" + //For renaming the pylon if we have duplicates + var/pylon_selection_name = pylon_name + while(pylon_selection_name in selection_list) + pylon_selection_name = "[pylon_name] ([pylon_number])" + pylon_number ++ + selection_list += pylon_selection_name selection_list_structure += cycled_pylon if(!length(selection_list)) @@ -614,20 +624,21 @@ Additional game mode variables. /datum/game_mode/proc/transfer_xeno(xeno_candidate, mob/living/new_xeno) if(!xeno_candidate || !isxeno(new_xeno) || QDELETED(new_xeno)) return FALSE + var/datum/mind/xeno_candidate_mind if(ismind(xeno_candidate)) xeno_candidate_mind = xeno_candidate else if(ismob(xeno_candidate)) - var/mob/M = xeno_candidate - if(M.mind) - xeno_candidate_mind = M.mind + var/mob/xeno_candidate_mob = xeno_candidate + if(xeno_candidate_mob.mind) + xeno_candidate_mind = xeno_candidate_mob.mind else - xeno_candidate_mind = new /datum/mind(M.key, M.ckey) + xeno_candidate_mind = new /datum/mind(xeno_candidate_mob.key, xeno_candidate_mob.ckey) xeno_candidate_mind.active = TRUE xeno_candidate_mind.current = new_xeno else if(isclient(xeno_candidate)) - var/client/C = xeno_candidate - xeno_candidate_mind = new /datum/mind(C.key, C.ckey) + var/client/xeno_candidate_client = xeno_candidate + xeno_candidate_mind = new /datum/mind(xeno_candidate_client.key, xeno_candidate_client.ckey) xeno_candidate_mind.active = TRUE xeno_candidate_mind.current = new_xeno else @@ -644,7 +655,7 @@ Additional game mode variables. // Let the round recorder know that the key has changed SSround_recording.recorder.update_key(new_xeno) if(new_xeno.client) - new_xeno.client.change_view(world_view_size) + new_xeno.client.change_view(GLOB.world_view_size) msg_admin_niche("[new_xeno.key] has joined as [new_xeno].") if(isxeno(new_xeno)) //Dear lord @@ -911,7 +922,7 @@ Additional game mode variables. CVS.populate_product_list_and_boxes(scale) //Scale the amount of cargo points through a direct multiplier - supply_controller.points = round(supply_controller.points * scale) + GLOB.supply_controller.points = round(GLOB.supply_controller.points * scale) /datum/game_mode/proc/get_scaling_value() //We take the number of marine players, deduced from other lists, and then get a scale multiplier from it, to be used in arbitrary manners to distribute equipment @@ -953,14 +964,14 @@ Additional game mode variables. if(!joe_candidate.client) return - var/datum/job/joe_job = RoleAuthority.roles_by_name[JOB_WORKING_JOE] + var/datum/job/joe_job = GLOB.RoleAuthority.roles_by_name[JOB_WORKING_JOE] if(!joe_job) if(show_warning) to_chat(joe_candidate, SPAN_WARNING("Something went wrong!")) return - if(!(RoleAuthority.roles_whitelist[joe_candidate.ckey] & WHITELIST_JOE)) + if(!(GLOB.RoleAuthority.roles_whitelist[joe_candidate.ckey] & WHITELIST_JOE)) if(show_warning) to_chat(joe_candidate, SPAN_WARNING("You are not whitelisted! You may apply on the forums to be whitelisted as a synth.")) return @@ -971,14 +982,14 @@ Additional game mode variables. return // council doesn't count towards this conditional. - if(joe_job.get_whitelist_status(RoleAuthority.roles_whitelist, joe_candidate.client) == WHITELIST_NORMAL) + if(joe_job.get_whitelist_status(GLOB.RoleAuthority.roles_whitelist, joe_candidate.client) == WHITELIST_NORMAL) var/joe_max = joe_job.total_positions if((joe_job.current_positions >= joe_max) && !MODE_HAS_TOGGLEABLE_FLAG(MODE_BYPASS_JOE)) if(show_warning) to_chat(joe_candidate, SPAN_WARNING("Only [joe_max] Working Joes may spawn per round.")) return - if(!enter_allowed && !MODE_HAS_TOGGLEABLE_FLAG(MODE_BYPASS_JOE)) + if(!GLOB.enter_allowed && !MODE_HAS_TOGGLEABLE_FLAG(MODE_BYPASS_JOE)) if(show_warning) to_chat(joe_candidate, SPAN_WARNING("There is an administrative lock from entering the game.")) return @@ -998,14 +1009,14 @@ Additional game mode variables. var/turf/spawn_point = get_turf(pick(GLOB.latejoin_by_job[JOB_WORKING_JOE])) var/mob/living/carbon/human/synthetic/new_joe = new(spawn_point) joe_candidate.mind.transfer_to(new_joe, TRUE) - var/datum/job/joe_job = RoleAuthority.roles_by_name[JOB_WORKING_JOE] + var/datum/job/joe_job = GLOB.RoleAuthority.roles_by_name[JOB_WORKING_JOE] if(!joe_job) qdel(new_joe) return // This is usually done in assign_role, a proc which is not executed in this case, since check_joe_late_join is running its own checks. joe_job.current_positions++ - RoleAuthority.equip_role(new_joe, joe_job, new_joe.loc) + GLOB.RoleAuthority.equip_role(new_joe, joe_job, new_joe.loc) GLOB.data_core.manifest_inject(new_joe) SSticker.minds += new_joe.mind return new_joe diff --git a/code/game/gamemodes/cm_process.dm b/code/game/gamemodes/cm_process.dm index 33377f7dc6fd..462f82e99cec 100644 --- a/code/game/gamemodes/cm_process.dm +++ b/code/game/gamemodes/cm_process.dm @@ -39,16 +39,16 @@ of predators), but can be added to include variant game modes (like humans vs. h /datum/game_mode/proc/declare_completion_announce_fallen_soldiers() set waitfor = 0 sleep(2 SECONDS) - fallen_list += fallen_list_cross - if(fallen_list.len) + GLOB.fallen_list += GLOB.fallen_list_cross + if(GLOB.fallen_list.len) var/dat = "
" dat += SPAN_ROUNDBODY("In Flanders fields...
") dat += SPAN_CENTERBOLD("In memoriam of our fallen soldiers:
") - for(var/i = 1 to fallen_list.len) - if(i != fallen_list.len) - dat += "[fallen_list[i]], " + for(var/i = 1 to GLOB.fallen_list.len) + if(i != GLOB.fallen_list.len) + dat += "[GLOB.fallen_list[i]], " else - dat += "[fallen_list[i]].
" + dat += "[GLOB.fallen_list[i]].
" to_world("[dat]") @@ -134,7 +134,7 @@ of predators), but can be added to include variant game modes (like humans vs. h // Open podlocks with the given ID if they aren't already opened. // DO NOT USE THIS WITH ID's CORRESPONDING TO SHUTTLES OR THEY WILL BREAK! /datum/game_mode/proc/open_podlocks(podlock_id) - for(var/obj/structure/machinery/door/poddoor/M in machines) + for(var/obj/structure/machinery/door/poddoor/M in GLOB.machines) if(M.id == podlock_id && M.density) M.open() diff --git a/code/game/gamemodes/colonialmarines/colonialmarines.dm b/code/game/gamemodes/colonialmarines/colonialmarines.dm index 7b1c695ade2b..bc5d6b69228c 100644 --- a/code/game/gamemodes/colonialmarines/colonialmarines.dm +++ b/code/game/gamemodes/colonialmarines/colonialmarines.dm @@ -29,7 +29,7 @@ to_chat_spaced(world, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDHEADER("The current map is - [SSmapping.configs[GROUND_MAP].map_name]!")) /datum/game_mode/colonialmarines/get_roles_list() - return ROLES_DISTRESS_SIGNAL + return GLOB.ROLES_DISTRESS_SIGNAL //////////////////////////////////////////////////////////////////////////////////////// //Temporary, until we sort this out properly. @@ -126,7 +126,7 @@ #define MONKEYS_TO_TOTAL_RATIO 1/32 /datum/game_mode/colonialmarines/proc/spawn_smallhosts() - if(!players_preassigned) + if(!GLOB.players_preassigned) return monkey_types = SSmapping.configs[GROUND_MAP].monkey_types @@ -134,7 +134,7 @@ if(!length(monkey_types)) return - var/amount_to_spawn = round(players_preassigned * MONKEYS_TO_TOTAL_RATIO) + var/amount_to_spawn = round(GLOB.players_preassigned * MONKEYS_TO_TOTAL_RATIO) for(var/i in 0 to min(amount_to_spawn, length(GLOB.monkey_spawns))) var/turf/T = get_turf(pick_n_take(GLOB.monkey_spawns)) @@ -167,7 +167,7 @@ check_ground_humans() if(next_research_allocation < world.time) - chemical_data.update_credits(chemical_data.research_allocation_amount) + GLOB.chemical_data.update_credits(GLOB.chemical_data.research_allocation_amount) next_research_allocation = world.time + research_allocation_interval if(!round_finished) @@ -205,7 +205,7 @@ to_chat(M, SPAN_XENOANNOUNCE("To my children and their Queen. I sense the large doors that trap us will open in 30 seconds.")) addtimer(CALLBACK(src, PROC_REF(open_podlocks), "map_lockdown"), 300) - if(round_should_check_for_win) + if(GLOB.round_should_check_for_win) check_win() round_checkwin = 0 @@ -353,15 +353,15 @@ if(MODE_INFESTATION_X_MAJOR) musical_track = pick('sound/theme/sad_loss1.ogg','sound/theme/sad_loss2.ogg') end_icon = "xeno_major" - if(round_statistics && round_statistics.current_map) - round_statistics.current_map.total_xeno_victories++ - round_statistics.current_map.total_xeno_majors++ + if(GLOB.round_statistics && GLOB.round_statistics.current_map) + GLOB.round_statistics.current_map.total_xeno_victories++ + GLOB.round_statistics.current_map.total_xeno_majors++ if(MODE_INFESTATION_M_MAJOR) musical_track = pick('sound/theme/winning_triumph1.ogg','sound/theme/winning_triumph2.ogg') end_icon = "marine_major" - if(round_statistics && round_statistics.current_map) - round_statistics.current_map.total_marine_victories++ - round_statistics.current_map.total_marine_majors++ + if(GLOB.round_statistics && GLOB.round_statistics.current_map) + GLOB.round_statistics.current_map.total_marine_victories++ + GLOB.round_statistics.current_map.total_marine_majors++ if(MODE_INFESTATION_X_MINOR) var/list/living_player_list = count_humans_and_xenos(get_affected_zlevels()) if(living_player_list[1] && !living_player_list[2]) // If Xeno Minor but Xenos are dead and Humans are alive, see which faction is the last standing @@ -378,28 +378,28 @@ else musical_track = pick('sound/theme/neutral_melancholy1.ogg') end_icon = "xeno_minor" - if(round_statistics && round_statistics.current_map) - round_statistics.current_map.total_xeno_victories++ + if(GLOB.round_statistics && GLOB.round_statistics.current_map) + GLOB.round_statistics.current_map.total_xeno_victories++ if(MODE_INFESTATION_M_MINOR) musical_track = pick('sound/theme/neutral_hopeful1.ogg','sound/theme/neutral_hopeful2.ogg') end_icon = "marine_minor" - if(round_statistics && round_statistics.current_map) - round_statistics.current_map.total_marine_victories++ + if(GLOB.round_statistics && GLOB.round_statistics.current_map) + GLOB.round_statistics.current_map.total_marine_victories++ if(MODE_INFESTATION_DRAW_DEATH) end_icon = "draw" musical_track = 'sound/theme/neutral_hopeful2.ogg' - if(round_statistics && round_statistics.current_map) - round_statistics.current_map.total_draws++ + if(GLOB.round_statistics && GLOB.round_statistics.current_map) + GLOB.round_statistics.current_map.total_draws++ var/sound/S = sound(musical_track, channel = SOUND_CHANNEL_LOBBY) S.status = SOUND_STREAM sound_to(world, S) - if(round_statistics) - round_statistics.game_mode = name - round_statistics.round_length = world.time - round_statistics.round_result = round_finished - round_statistics.end_round_player_population = GLOB.clients.len + if(GLOB.round_statistics) + GLOB.round_statistics.game_mode = name + GLOB.round_statistics.round_length = world.time + GLOB.round_statistics.round_result = round_finished + GLOB.round_statistics.end_round_player_population = GLOB.clients.len - round_statistics.log_round_statistics() + GLOB.round_statistics.log_round_statistics() calculate_end_statistics() show_end_statistics(end_icon) @@ -440,11 +440,11 @@ ) //organize our jobs in a readable and standard way - for(var/job in ROLES_MARINES) + for(var/job in GLOB.ROLES_MARINES) counted_humans["Squad Marines"][job] = 0 - for(var/job in ROLES_USCM - ROLES_MARINES) + for(var/job in GLOB.ROLES_USCM - GLOB.ROLES_MARINES) counted_humans["Auxiliary Marines"][job] = 0 - for(var/job in ROLES_SPECIAL) + for(var/job in GLOB.ROLES_SPECIAL) counted_humans["Non-Standard Humans"][job] = 0 var/list/counted_xenos = list() @@ -463,7 +463,7 @@ if(player_client.mob && player_client.mob.stat != DEAD) if(ishuman(player_client.mob)) if(player_client.mob.faction == FACTION_MARINE) - if(player_client.mob.job in (ROLES_MARINES)) + if(player_client.mob.job in (GLOB.ROLES_MARINES)) counted_humans["Squad Marines"][player_client.mob.job]++ else counted_humans["Auxiliary Marines"][player_client.mob.job]++ diff --git a/code/game/gamemodes/colonialmarines/huntergames.dm b/code/game/gamemodes/colonialmarines/huntergames.dm index bd5302bf7ec0..310785070458 100644 --- a/code/game/gamemodes/colonialmarines/huntergames.dm +++ b/code/game/gamemodes/colonialmarines/huntergames.dm @@ -83,8 +83,6 @@ 100; /obj/item/clothing/suit/storage/CMB \ ) -var/waiting_for_drop_votes = 0 - //Digging through this is a pain. I'm leaving it mostly alone until a full rework takes place. /datum/game_mode/huntergames @@ -105,6 +103,8 @@ var/waiting_for_drop_votes = 0 var/ticks_passed = 0 var/drops_disabled = 0 + var/waiting_for_drop_votes = FALSE + votable = FALSE // borkeds taskbar_icon = 'icons/taskbar/gml_hgames.png' @@ -234,7 +234,7 @@ var/waiting_for_drop_votes = 0 H = new(picked) H.key = M.key - if(H.client) H.client.change_view(world_view_size) + if(H.client) H.client.change_view(GLOB.world_view_size) if(!H.mind) H.mind = new(H.key) @@ -244,7 +244,8 @@ var/waiting_for_drop_votes = 0 H.skills = null //no restriction on what the contestants can do - H.apply_effect(15, WEAKEN) + H.KnockDown(15) + H.Stun(15) H.nutrition = NUTRITION_NORMAL var/randjob = rand(0,10) @@ -393,8 +394,8 @@ var/waiting_for_drop_votes = 0 //Announces the end of the game with all relevant information stated// ////////////////////////////////////////////////////////////////////// /datum/game_mode/huntergames/declare_completion() - if(round_statistics) - round_statistics.track_round_end() + if(GLOB.round_statistics) + GLOB.round_statistics.track_round_end() var/mob/living/carbon/winner = null for(var/mob/living/carbon/human/Q in GLOB.alive_mob_list) @@ -415,12 +416,12 @@ var/waiting_for_drop_votes = 0 to_world("There was a winner, but they died before they could receive the prize!! Bummer.") world << 'sound/misc/sadtrombone.ogg' - if(round_statistics) - round_statistics.game_mode = name - round_statistics.round_length = world.time - round_statistics.end_round_player_population = count_humans() + if(GLOB.round_statistics) + GLOB.round_statistics.game_mode = name + GLOB.round_statistics.round_length = world.time + GLOB.round_statistics.end_round_player_population = count_humans() - round_statistics.log_round_statistics() + GLOB.round_statistics.log_round_statistics() return 1 diff --git a/code/game/gamemodes/colonialmarines/whiskey_outpost.dm b/code/game/gamemodes/colonialmarines/whiskey_outpost.dm index f45b83c4d796..6ebda633a19b 100644 --- a/code/game/gamemodes/colonialmarines/whiskey_outpost.dm +++ b/code/game/gamemodes/colonialmarines/whiskey_outpost.dm @@ -2,14 +2,14 @@ //Global proc for checking if the game is whiskey outpost so I dont need to type if(gamemode == whiskey outpost) 50000 times /proc/Check_WO() - if(SSticker.mode == GAMEMODE_WHISKEY_OUTPOST || master_mode == GAMEMODE_WHISKEY_OUTPOST) + if(SSticker.mode == GAMEMODE_WHISKEY_OUTPOST || GLOB.master_mode == GAMEMODE_WHISKEY_OUTPOST) return 1 return 0 /datum/game_mode/whiskey_outpost name = GAMEMODE_WHISKEY_OUTPOST config_tag = GAMEMODE_WHISKEY_OUTPOST - required_players = 0 + required_players = 140 xeno_bypass_timer = 1 flags_round_type = MODE_NEW_SPAWN role_mappings = list( @@ -76,12 +76,16 @@ hardcore = TRUE votable = TRUE - vote_cycle = 25 // approx. once every 5 days, if it wins the vote + vote_cycle = 75 // approx. once every 5 days, if it wins the vote taskbar_icon = 'icons/taskbar/gml_wo.png' +/datum/game_mode/whiskey_outpost/New() + . = ..() + required_players = CONFIG_GET(number/whiskey_required_players) + /datum/game_mode/whiskey_outpost/get_roles_list() - return ROLES_WO + return GLOB.ROLES_WO /datum/game_mode/whiskey_outpost/announce() return 1 @@ -178,7 +182,7 @@ if(checkwin_counter >= 10) //Only check win conditions every 10 ticks. if(xeno_wave == WO_MAX_WAVE && last_wave_time == 0) last_wave_time = world.time - if(!finished && round_should_check_for_win && last_wave_time != 0) + if(!finished && GLOB.round_should_check_for_win && last_wave_time != 0) check_win() checkwin_counter = 0 return 0 @@ -212,8 +216,8 @@ finished = 2 //Marine win /datum/game_mode/whiskey_outpost/proc/disablejoining() - for(var/i in RoleAuthority.roles_by_name) - var/datum/job/J = RoleAuthority.roles_by_name[i] + for(var/i in GLOB.RoleAuthority.roles_by_name) + var/datum/job/J = GLOB.RoleAuthority.roles_by_name[i] // If the job has unlimited job slots, We set the amount of slots to the amount it has at the moment this is called if (J.spawn_positions < 0) @@ -254,8 +258,8 @@ //Announces the end of the game with all relevant information stated// ////////////////////////////////////////////////////////////////////// /datum/game_mode/whiskey_outpost/declare_completion() - if(round_statistics) - round_statistics.track_round_end() + if(GLOB.round_statistics) + GLOB.round_statistics.track_round_end() if(finished == 1) log_game("Round end result - xenos won") to_world(SPAN_ROUND_HEADER("The Xenos have succesfully defended their hive from colonization.")) @@ -263,11 +267,11 @@ to_world(SPAN_ROUNDBODY("It will be another five years before the USCM returns to the Neroid Sector, with the arrival of the 2nd 'Falling Falcons' Battalion and the USS Almayer.")) to_world(SPAN_ROUNDBODY("The xenomorph hive on LV-624 remains unthreatened until then...")) world << sound('sound/misc/Game_Over_Man.ogg') - if(round_statistics) - round_statistics.round_result = MODE_INFESTATION_X_MAJOR - if(round_statistics.current_map) - round_statistics.current_map.total_xeno_victories++ - round_statistics.current_map.total_xeno_majors++ + if(GLOB.round_statistics) + GLOB.round_statistics.round_result = MODE_INFESTATION_X_MAJOR + if(GLOB.round_statistics.current_map) + GLOB.round_statistics.current_map.total_xeno_victories++ + GLOB.round_statistics.current_map.total_xeno_majors++ else if(finished == 2) log_game("Round end result - marines won") @@ -276,26 +280,26 @@ to_world(SPAN_ROUNDBODY("Eventually, the Dust Raiders secure LV-624 and the entire Neroid Sector in 2182, pacifiying it and establishing peace in the sector for decades to come.")) to_world(SPAN_ROUNDBODY("The USS Almayer and the 2nd 'Falling Falcons' Battalion are never sent to the sector and are spared their fate in 2186.")) world << sound('sound/misc/hell_march.ogg') - if(round_statistics) - round_statistics.round_result = MODE_INFESTATION_M_MAJOR - if(round_statistics.current_map) - round_statistics.current_map.total_marine_victories++ - round_statistics.current_map.total_marine_majors++ + if(GLOB.round_statistics) + GLOB.round_statistics.round_result = MODE_INFESTATION_M_MAJOR + if(GLOB.round_statistics.current_map) + GLOB.round_statistics.current_map.total_marine_victories++ + GLOB.round_statistics.current_map.total_marine_majors++ else log_game("Round end result - no winners") to_world(SPAN_ROUND_HEADER("NOBODY WON!")) to_world(SPAN_ROUNDBODY("How? Don't ask me...")) world << 'sound/misc/sadtrombone.ogg' - if(round_statistics) - round_statistics.round_result = MODE_INFESTATION_DRAW_DEATH + if(GLOB.round_statistics) + GLOB.round_statistics.round_result = MODE_INFESTATION_DRAW_DEATH - if(round_statistics) - round_statistics.game_mode = name - round_statistics.round_length = world.time - round_statistics.end_round_player_population = GLOB.clients.len + if(GLOB.round_statistics) + GLOB.round_statistics.game_mode = name + GLOB.round_statistics.round_length = world.time + GLOB.round_statistics.end_round_player_population = GLOB.clients.len - round_statistics.log_round_statistics() + GLOB.round_statistics.log_round_statistics() round_finished = 1 diff --git a/code/game/gamemodes/colonialmarines/whiskey_outpost/whiskey_output_waves.dm b/code/game/gamemodes/colonialmarines/whiskey_outpost/whiskey_output_waves.dm index ae272da88690..6e2738a83788 100644 --- a/code/game/gamemodes/colonialmarines/whiskey_outpost/whiskey_output_waves.dm +++ b/code/game/gamemodes/colonialmarines/whiskey_outpost/whiskey_output_waves.dm @@ -52,12 +52,12 @@ if(!xeno_candidate) return FALSE - if(RoleAuthority.castes_by_name[userInput]) + if(GLOB.RoleAuthority.castes_by_name[userInput]) if(!(userInput in xeno_pool)) to_chat(xeno_candidate, SPAN_WARNING("The caste type you chose was occupied by someone else.")) return FALSE var/spawn_loc = pick(xeno_spawns) - var/xeno_type = RoleAuthority.get_caste_by_text(userInput) + var/xeno_type = GLOB.RoleAuthority.get_caste_by_text(userInput) var/mob/living/carbon/xenomorph/new_xeno = new xeno_type(spawn_loc) if(new_xeno.hive.construction_allowed == NORMAL_XENO) new_xeno.hive.construction_allowed = XENO_QUEEN diff --git a/code/game/gamemodes/colonialmarines/xenovsxeno.dm b/code/game/gamemodes/colonialmarines/xenovsxeno.dm index 0e3107858b3b..a9ad48196257 100644 --- a/code/game/gamemodes/colonialmarines/xenovsxeno.dm +++ b/code/game/gamemodes/colonialmarines/xenovsxeno.dm @@ -26,9 +26,9 @@ /* Pre-pre-startup */ /datum/game_mode/xenovs/can_start() for(var/hivename in SSmapping.configs[GROUND_MAP].xvx_hives) - if(readied_players > SSmapping.configs[GROUND_MAP].xvx_hives[hivename]) + if(GLOB.readied_players > SSmapping.configs[GROUND_MAP].xvx_hives[hivename]) hives += hivename - xeno_starting_num = readied_players + xeno_starting_num = GLOB.readied_players if(!initialize_starting_xenomorph_list(hives, TRUE)) hives.Cut() return @@ -38,7 +38,7 @@ to_chat_spaced(world, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDHEADER("The current map is - [SSmapping.configs[GROUND_MAP].map_name]!")) /datum/game_mode/xenovs/get_roles_list() - return ROLES_XENO + return GLOB.ROLES_XENO /* Pre-setup */ /datum/game_mode/xenovs/pre_setup() @@ -91,7 +91,7 @@ initialize_post_xenomorph_list(GLOB.xeno_hive_spawns) round_time_lobby = world.time - for(var/area/A in all_areas) + for(var/area/A in GLOB.all_areas) if(!(A.is_resin_allowed)) A.is_resin_allowed = TRUE @@ -192,7 +192,7 @@ qdel(C) hive_cores = list() - if(round_should_check_for_win) + if(GLOB.round_should_check_for_win) check_win() round_checkwin = 0 @@ -262,12 +262,12 @@ var/sound/S = sound(musical_track, channel = SOUND_CHANNEL_LOBBY) S.status = SOUND_STREAM sound_to(world, S) - if(round_statistics) - round_statistics.game_mode = name - round_statistics.round_length = world.time - round_statistics.end_round_player_population = GLOB.clients.len + if(GLOB.round_statistics) + GLOB.round_statistics.game_mode = name + GLOB.round_statistics.round_length = world.time + GLOB.round_statistics.end_round_player_population = GLOB.clients.len - round_statistics.log_round_statistics() + GLOB.round_statistics.log_round_statistics() declare_completion_announce_xenomorphs() calculate_end_statistics() @@ -277,11 +277,11 @@ return TRUE /datum/game_mode/xenovs/announce_ending() - if(round_statistics) - round_statistics.track_round_end() + if(GLOB.round_statistics) + GLOB.round_statistics.track_round_end() log_game("Round end result: [round_finished]") to_chat_spaced(world, margin_top = 2, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDHEADER("|Round Complete|")) - to_chat_spaced(world, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDBODY("Thus ends the story of the battling hives on [SSmapping.configs[GROUND_MAP].map_name]. [round_finished]\nThe game-mode was: [master_mode]!\n[CONFIG_GET(string/endofroundblurb)]")) + to_chat_spaced(world, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDBODY("Thus ends the story of the battling hives on [SSmapping.configs[GROUND_MAP].map_name]. [round_finished]\nThe game-mode was: [GLOB.master_mode]!\n[CONFIG_GET(string/endofroundblurb)]")) // for the toolbox /datum/game_mode/xenovs/end_round_message() diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index db8f84d53f24..1039d495396b 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -3,7 +3,7 @@ /proc/carp_migration() // -- Darem //sleep(100) spawn(rand(300, 600)) //Delayed announcements to keep the crew on their toes. - marine_announcement("Unknown biological entities have been detected near [station_name], please stand-by.", "Lifesign Alert", 'sound/AI/commandreport.ogg') + marine_announcement("Unknown biological entities have been detected near [MAIN_SHIP_NAME], please stand-by.", "Lifesign Alert", 'sound/AI/commandreport.ogg') /proc/lightsout(isEvent = 0, lightsoutAmount = 1,lightsoutRange = 25) //leave lightsoutAmount as 0 to break ALL lights if(isEvent) @@ -13,7 +13,7 @@ return else - for(var/obj/structure/machinery/power/apc/apc in machines) + for(var/obj/structure/machinery/power/apc/apc in GLOB.machines) apc.overload_lighting() return diff --git a/code/game/gamemodes/events/power_failure.dm b/code/game/gamemodes/events/power_failure.dm index 7905c19fac41..5ebedd8fd26d 100644 --- a/code/game/gamemodes/events/power_failure.dm +++ b/code/game/gamemodes/events/power_failure.dm @@ -2,7 +2,7 @@ /proc/power_failure(announce = 1) var/ship_zlevels = SSmapping.levels_by_trait(ZTRAIT_MARINE_MAIN_SHIP) - for(var/obj/structure/machinery/power/smes/S in machines) + for(var/obj/structure/machinery/power/smes/S in GLOB.machines) if(!is_mainship_level(S.z)) continue S.last_charge = S.charge @@ -14,7 +14,7 @@ S.updateicon() S.power_change() - for(var/obj/structure/machinery/power/apc/C in machines) + for(var/obj/structure/machinery/power/apc/C in GLOB.machines) if(!is_mainship_level(C.z) && C.cell) C.cell.charge = 0 @@ -25,7 +25,7 @@ marine_announcement("Abnormal activity detected in the ship power system. As a precaution, power must be shut down for an indefinite duration.", "Critical Power Failure", 'sound/AI/poweroff.ogg') /proc/power_restore(announce = 1) - for(var/obj/structure/machinery/power/smes/S in machines) + for(var/obj/structure/machinery/power/smes/S in GLOB.machines) if(!is_mainship_level(S.z)) continue S.charge = S.capacity @@ -34,7 +34,7 @@ S.updateicon() S.power_change() - for(var/obj/structure/machinery/power/apc/C in machines) + for(var/obj/structure/machinery/power/apc/C in GLOB.machines) if(C.cell && is_mainship_level(C.z)) C.cell.charge = C.cell.maxcharge @@ -44,7 +44,7 @@ /proc/power_restore_quick(announce = 1) - for(var/obj/structure/machinery/power/smes/S in machines) + for(var/obj/structure/machinery/power/smes/S in GLOB.machines) if(!is_mainship_level(S.z)) // Ship only continue S.charge = S.capacity @@ -59,14 +59,14 @@ /proc/power_restore_everything(announce = 1) - for(var/obj/structure/machinery/power/smes/S in machines) + for(var/obj/structure/machinery/power/smes/S in GLOB.machines) S.charge = S.capacity S.output_level = S.output_level_max S.outputting = 1 S.updateicon() S.power_change() - for(var/obj/structure/machinery/power/apc/C in machines) + for(var/obj/structure/machinery/power/apc/C in GLOB.machines) if(C.cell) C.cell.charge = C.cell.maxcharge @@ -75,7 +75,7 @@ marine_announcement("Power has been restored. Reason: Unknown.", "Power Systems Nominal", 'sound/AI/poweron.ogg') /proc/power_restore_ship_reactors(announce = 1) - for(var/obj/structure/machinery/power/fusion_engine/FE in machines) + for(var/obj/structure/machinery/power/fusion_engine/FE in GLOB.machines) FE.buildstate = 0 FE.is_on = 1 FE.fusion_cell = new diff --git a/code/game/gamemodes/extended/extended.dm b/code/game/gamemodes/extended/extended.dm index f00125cc8f0f..72512a7e77ff 100644 --- a/code/game/gamemodes/extended/extended.dm +++ b/code/game/gamemodes/extended/extended.dm @@ -12,7 +12,7 @@ to_world("The current game mode is - Extended!") /datum/game_mode/extended/get_roles_list() - return ROLES_USCM + return GLOB.ROLES_USCM /datum/game_mode/extended/post_setup() initialize_post_marine_gear_list() @@ -24,7 +24,7 @@ /datum/game_mode/extended/process() . = ..() if(next_research_allocation < world.time) - chemical_data.update_credits(chemical_data.research_allocation_amount) + GLOB.chemical_data.update_credits(GLOB.chemical_data.research_allocation_amount) next_research_allocation = world.time + research_allocation_interval /datum/game_mode/extended/check_finished() @@ -39,11 +39,11 @@ var/musical_track = pick('sound/theme/neutral_hopeful1.ogg','sound/theme/neutral_hopeful2.ogg') world << musical_track - if(round_statistics) - round_statistics.game_mode = name - round_statistics.round_length = world.time - round_statistics.end_round_player_population = GLOB.clients.len - round_statistics.log_round_statistics() + if(GLOB.round_statistics) + GLOB.round_statistics.game_mode = name + GLOB.round_statistics.round_length = world.time + GLOB.round_statistics.end_round_player_population = GLOB.clients.len + GLOB.round_statistics.log_round_statistics() calculate_end_statistics() declare_completion_announce_predators() diff --git a/code/game/gamemodes/extended/extended_clash.dm b/code/game/gamemodes/extended/extended_clash.dm index 04077de2775c..e0e526d91afa 100644 --- a/code/game/gamemodes/extended/extended_clash.dm +++ b/code/game/gamemodes/extended/extended_clash.dm @@ -6,7 +6,7 @@ taskbar_icon = 'icons/taskbar/gml_hvh.png' /datum/game_mode/extended/faction_clash/get_roles_list() - return ROLES_FACTION_CLASH + return GLOB.ROLES_FACTION_CLASH /datum/game_mode/extended/faction_clash/post_setup() . = ..() diff --git a/code/game/gamemodes/extended/infection.dm b/code/game/gamemodes/extended/infection.dm index a6b909022aef..1e0032a8e6fa 100644 --- a/code/game/gamemodes/extended/infection.dm +++ b/code/game/gamemodes/extended/infection.dm @@ -15,7 +15,7 @@ to_world("Don't ahelp asking for specific details, you won't get them.") /datum/game_mode/infection/get_roles_list() - return ROLES_USCM + return GLOB.ROLES_USCM /datum/game_mode/infection/pre_setup() return ..() @@ -61,7 +61,7 @@ possible_synth_survivors -= A continue - if(RoleAuthority.roles_whitelist[ckey(A.key)] & WHITELIST_SYNTHETIC) + if(GLOB.RoleAuthority.roles_whitelist[ckey(A.key)] & WHITELIST_SYNTHETIC) if(A in possible_survivors) continue //they are already applying to be a survivor else @@ -120,11 +120,11 @@ var/musical_track = pick('sound/theme/sad_loss1.ogg','sound/theme/sad_loss2.ogg') world << musical_track - if(round_statistics) - round_statistics.game_mode = name - round_statistics.round_length = world.time - round_statistics.end_round_player_population = GLOB.clients.len - round_statistics.log_round_statistics() + if(GLOB.round_statistics) + GLOB.round_statistics.game_mode = name + GLOB.round_statistics.round_length = world.time + GLOB.round_statistics.end_round_player_population = GLOB.clients.len + GLOB.round_statistics.log_round_statistics() declare_completion_announce_xenomorphs() declare_completion_announce_predators() diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index e467631c915e..3bb8c2d80123 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -11,9 +11,9 @@ * */ -var/global/datum/entity/statistic/round/round_statistics -var/global/list/datum/entity/player_entity/player_entities = list() -var/global/cas_tracking_id_increment = 0 //this var used to assign unique tracking_ids to tacbinos and signal flares +GLOBAL_DATUM(round_statistics, /datum/entity/statistic/round) +GLOBAL_LIST_INIT_TYPED(player_entities, /datum/entity/player_entity, list()) +GLOBAL_VAR_INIT(cas_tracking_id_increment, 0) //this var used to assign unique tracking_ids to tacbinos and signal flares /datum/game_mode var/name = "invalid" var/config_tag = null @@ -56,7 +56,7 @@ var/global/cas_tracking_id_increment = 0 //this var used to assign unique tracki if((player.client)&&(player.ready)) playerC++ - if(master_mode=="secret") + if(GLOB.master_mode=="secret") if(playerC >= required_players_secret) return 1 else @@ -129,15 +129,15 @@ var/global/cas_tracking_id_increment = 0 //this var used to assign unique tracki return /datum/game_mode/proc/announce_ending() - if(round_statistics) - round_statistics.track_round_end() + if(GLOB.round_statistics) + GLOB.round_statistics.track_round_end() log_game("Round end result: [round_finished]") to_chat_spaced(world, margin_top = 2, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDHEADER("|Round Complete|")) - to_chat_spaced(world, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDBODY("Thus ends the story of the brave men and women of the [MAIN_SHIP_NAME] and their struggle on [SSmapping.configs[GROUND_MAP].map_name].\nThe game-mode was: [master_mode]!\n[CONFIG_GET(string/endofroundblurb)]")) + to_chat_spaced(world, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDBODY("Thus ends the story of the brave men and women of the [MAIN_SHIP_NAME] and their struggle on [SSmapping.configs[GROUND_MAP].map_name].\nThe game-mode was: [GLOB.master_mode]!\n[CONFIG_GET(string/endofroundblurb)]")) /datum/game_mode/proc/declare_completion() - if(round_statistics) - round_statistics.track_round_end() + if(GLOB.round_statistics) + GLOB.round_statistics.track_round_end() var/clients = 0 var/surviving_humans = 0 var/surviving_total = 0 @@ -181,7 +181,7 @@ var/global/cas_tracking_id_increment = 0 //this var used to assign unique tracki record_playtime(M.client.player_data, M.job, type) /datum/game_mode/proc/show_end_statistics(icon_state) - round_statistics.update_panel_data() + GLOB.round_statistics.update_panel_data() for(var/mob/M in GLOB.player_list) if(M.client) give_action(M, /datum/action/show_round_statistics, null, icon_state) @@ -226,7 +226,7 @@ var/global/cas_tracking_id_increment = 0 //this var used to assign unique tracki var/list/heads = list() for(var/i in GLOB.alive_human_list) var/mob/living/carbon/human/player = i - if(player.stat!=2 && player.mind && (player.job in ROLES_COMMAND )) + if(player.stat!=2 && player.mind && (player.job in GLOB.ROLES_COMMAND )) heads += player.mind return heads @@ -237,7 +237,7 @@ var/global/cas_tracking_id_increment = 0 //this var used to assign unique tracki /datum/game_mode/proc/get_all_heads() var/list/heads = list() for(var/mob/player in GLOB.mob_list) - if(player.mind && (player.job in ROLES_COMMAND )) + if(player.mind && (player.job in GLOB.ROLES_COMMAND )) heads += player.mind return heads diff --git a/code/game/jobs/job/antag/other/pred.dm b/code/game/jobs/job/antag/other/pred.dm index a8bcec788c44..77439276d04a 100644 --- a/code/game/jobs/job/antag/other/pred.dm +++ b/code/game/jobs/job/antag/other/pred.dm @@ -41,7 +41,7 @@ player.clan_info.sync() // pause here might be problematic, we'll see. If DB dies, then we're fucked - var/rank = clan_ranks[player.clan_info.clan_rank] + var/rank = GLOB.clan_ranks[player.clan_info.clan_rank] if(!rank) return CLAN_RANK_BLOODED diff --git a/code/game/jobs/job/antag/xeno/xenomorph.dm b/code/game/jobs/job/antag/xeno/xenomorph.dm index d807cd3be38b..78b6ab7e3ab2 100644 --- a/code/game/jobs/job/antag/xeno/xenomorph.dm +++ b/code/game/jobs/job/antag/xeno/xenomorph.dm @@ -88,7 +88,7 @@ break human_to_transform.statistic_exempt = TRUE - human_to_transform.buckled = start_nest + human_to_transform.set_buckled(start_nest) human_to_transform.setDir(start_nest.dir) start_nest.buckled_mob = human_to_transform start_nest.afterbuckle(human_to_transform) diff --git a/code/game/jobs/job/civilians/other/mess_seargent.dm b/code/game/jobs/job/civilians/other/mess_seargent.dm index 97578eb1159d..fb4f5ee14d7c 100644 --- a/code/game/jobs/job/civilians/other/mess_seargent.dm +++ b/code/game/jobs/job/civilians/other/mess_seargent.dm @@ -1,13 +1,31 @@ /datum/job/civilian/chef title = JOB_MESS_SERGEANT - total_positions = 1 + total_positions = 2 spawn_positions = 1 + allow_additional = TRUE + scaled = TRUE selection_class = "job_ot" flags_startup_parameters = ROLE_ADD_TO_DEFAULT supervisors = "the auxiliary support officer" gear_preset = /datum/equipment_preset/uscm_ship/chef entry_message_body = "Your job is to service the marines with excellent food, drinks and entertaining the shipside crew when needed. You have a lot of freedom and it is up to you, to decide what to do with it. Good luck!" +/datum/job/civilian/chef/set_spawn_positions(count) + spawn_positions = mess_sergeant_slot_formula(count) + +/datum/job/civilian/chef/get_total_positions(latejoin = FALSE) + var/positions = spawn_positions + if(latejoin) + positions = mess_sergeant_slot_formula(get_total_marines()) + if(positions <= total_positions_so_far) + positions = total_positions_so_far + else + total_positions_so_far = positions + else + total_positions_so_far = positions + + return positions + /obj/effect/landmark/start/chef name = JOB_MESS_SERGEANT icon_state = "chef_spawn" diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 48ad372e1f33..56decd8f0c02 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -274,7 +274,7 @@ var/mob/living/carbon/human/human = M var/job_whitelist = title - var/whitelist_status = get_whitelist_status(RoleAuthority.roles_whitelist, human.client) + var/whitelist_status = get_whitelist_status(GLOB.RoleAuthority.roles_whitelist, human.client) if(whitelist_status) job_whitelist = "[title][whitelist_status]" @@ -293,9 +293,9 @@ generate_entry_conditions(human) //Do any other thing that relates to their spawn. if(flags_startup_parameters & ROLE_ADD_TO_SQUAD) //Are we a muhreen? Randomize our squad. This should go AFTER IDs. //TODO Robust this later. - RoleAuthority.randomize_squad(human) + GLOB.RoleAuthority.randomize_squad(human) - if(Check_WO() && job_squad_roles.Find(GET_DEFAULT_ROLE(human.job))) //activates self setting proc for marine headsets for WO + if(Check_WO() && GLOB.job_squad_roles.Find(GET_DEFAULT_ROLE(human.job))) //activates self setting proc for marine headsets for WO var/datum/game_mode/whiskey_outpost/WO = SSticker.mode WO.self_set_headset(human) diff --git a/code/game/jobs/job/marine/squad/engineer.dm b/code/game/jobs/job/marine/squad/engineer.dm index 1910248a61a2..a4422572f218 100644 --- a/code/game/jobs/job/marine/squad/engineer.dm +++ b/code/game/jobs/job/marine/squad/engineer.dm @@ -8,7 +8,7 @@ entry_message_body = "You have the equipment and skill to build fortifications, reroute power lines, and bunker down. Your squaddies will look to you when it comes to construction in the field of battle." /datum/job/marine/engineer/set_spawn_positions(count) - for(var/datum/squad/sq in RoleAuthority.squads) + for(var/datum/squad/sq in GLOB.RoleAuthority.squads) if(sq) sq.max_engineers = engi_slot_formula(count) @@ -21,7 +21,7 @@ total_positions_so_far = slots if(latejoin) - for(var/datum/squad/sq in RoleAuthority.squads) + for(var/datum/squad/sq in GLOB.RoleAuthority.squads) if(sq) sq.max_engineers = slots diff --git a/code/game/jobs/job/marine/squad/medic.dm b/code/game/jobs/job/marine/squad/medic.dm index 3df0a3793ca5..450d1176658f 100644 --- a/code/game/jobs/job/marine/squad/medic.dm +++ b/code/game/jobs/job/marine/squad/medic.dm @@ -8,7 +8,7 @@ entry_message_body = "You tend the wounds of your squad mates and make sure they are healthy and active. You may not be a fully-fledged doctor, but you stand between life and death when it matters." /datum/job/marine/medic/set_spawn_positions(count) - for(var/datum/squad/sq in RoleAuthority.squads) + for(var/datum/squad/sq in GLOB.RoleAuthority.squads) if(sq) sq.max_medics = medic_slot_formula(count) @@ -21,7 +21,7 @@ total_positions_so_far = slots if(latejoin) - for(var/datum/squad/sq in RoleAuthority.squads) + for(var/datum/squad/sq in GLOB.RoleAuthority.squads) if(sq) sq.max_medics = slots diff --git a/code/game/jobs/job/marine/squads.dm b/code/game/jobs/job/marine/squads.dm index d1c2640a81aa..5eac0586eb34 100644 --- a/code/game/jobs/job/marine/squads.dm +++ b/code/game/jobs/job/marine/squads.dm @@ -649,10 +649,10 @@ //Not a safe proc. Returns null if squads or jobs aren't set up. //Mostly used in the marine squad console in marine_consoles.dm. /proc/get_squad_by_name(text) - if(!RoleAuthority || RoleAuthority.squads.len == 0) + if(!GLOB.RoleAuthority || GLOB.RoleAuthority.squads.len == 0) return null var/datum/squad/S - for(S in RoleAuthority.squads) + for(S in GLOB.RoleAuthority.squads) if(S.name == text) return S return null @@ -760,7 +760,7 @@ //moved the main proc for ft management from human.dm here to make it support both examine and squad info way to edit fts /datum/squad/proc/manage_fireteams(mob/living/carbon/human/target) var/obj/item/card/id/ID = target.get_idcard() - if(!ID || !(ID.rank in ROLES_MARINES)) + if(!ID || !(ID.rank in GLOB.ROLES_MARINES)) return if(ID.rank == JOB_SQUAD_LEADER || squad_leader == target) //if SL/aSL are chosen var/choice = tgui_input_list(squad_leader, "Manage Fireteams and Team leaders.", "Fireteams Management", list("Cancel", "Unassign Fireteam 1 Leader", "Unassign Fireteam 2 Leader", "Unassign Fireteam 3 Leader", "Unassign all Team Leaders")) diff --git a/code/game/jobs/role_authority.dm b/code/game/jobs/role_authority.dm index 51039663a43f..8deadbeba32e 100644 --- a/code/game/jobs/role_authority.dm +++ b/code/game/jobs/role_authority.dm @@ -11,7 +11,7 @@ When a round starts, the roles are assigned based on the round, from another lis by name can be kept for things like job bans, while the round may add or remove roles as needed.If you need to equip a mob for a job, always use roles_by_path as it is an accurate account of every specific role path (with specific equipment). */ -var/global/datum/authority/branch/role/RoleAuthority +GLOBAL_DATUM(RoleAuthority, /datum/authority/branch/role) #define GET_RANDOM_JOB 0 #define BE_MARINE 1 @@ -25,11 +25,10 @@ var/global/datum/authority/branch/role/RoleAuthority #define SHIPSIDE_ROLE_WEIGHT 0.25 -var/global/players_preassigned = 0 - +GLOBAL_VAR_INIT(players_preassigned, 0) /proc/guest_jobbans(job) - return (job in ROLES_COMMAND) + return (job in GLOB.ROLES_COMMAND) /datum/authority/branch/role var/name = "Role Authority" @@ -236,7 +235,7 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou // Get balancing weight for the readied players. // Squad marine roles have a weight of 1, and shipside roles have a lower weight of SHIPSIDE_ROLE_WEIGHT. - players_preassigned = assign_roles(temp_roles_for_mode.Copy(), unassigned_players.Copy(), TRUE) + GLOB.players_preassigned = assign_roles(temp_roles_for_mode.Copy(), unassigned_players.Copy(), TRUE) // Even though we pass a copy of temp_roles_for_mode, job counters still change, so we reset them here. for(var/title in temp_roles_for_mode) @@ -247,28 +246,28 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou // Set the xeno starting amount based on marines assigned var/datum/job/antag/xenos/XJ = temp_roles_for_mode[JOB_XENOMORPH] if(istype(XJ)) - XJ.set_spawn_positions(players_preassigned) + XJ.set_spawn_positions(GLOB.players_preassigned) // Limit the number of SQUAD MARINE roles players can roll initially var/datum/job/SMJ = GET_MAPPED_ROLE(JOB_SQUAD_MARINE) if(istype(SMJ)) - SMJ.set_spawn_positions(players_preassigned) + SMJ.set_spawn_positions(GLOB.players_preassigned) // Set survivor starting amount based on marines assigned var/datum/job/SJ = temp_roles_for_mode[JOB_SURVIVOR] if(istype(SJ)) - SJ.set_spawn_positions(players_preassigned) + SJ.set_spawn_positions(GLOB.players_preassigned) var/datum/job/CO_surv_job = temp_roles_for_mode[JOB_CO_SURVIVOR] if(istype(CO_surv_job)) - CO_surv_job.set_spawn_positions(players_preassigned) + CO_surv_job.set_spawn_positions(GLOB.players_preassigned) - if(SSnightmare.get_scenario_value("predator_round")) + if(SSnightmare.get_scenario_value("predator_round") && !Check_WO()) SSticker.mode.flags_round_type |= MODE_PREDATOR // Set predators starting amount based on marines assigned var/datum/job/PJ = temp_roles_for_mode[JOB_PREDATOR] if(istype(PJ)) - PJ.set_spawn_positions(players_preassigned) + PJ.set_spawn_positions(GLOB.players_preassigned) // Assign the roles, this time for real, respecting limits we have established. var/list/roles_left = assign_roles(temp_roles_for_mode, unassigned_players) @@ -312,13 +311,13 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou var/assigned = 0 for(var/priority in HIGH_PRIORITY to LOW_PRIORITY) // Assigning xenos first. - assigned += assign_initial_roles(priority, roles_for_mode & ROLES_XENO, unassigned_players) + assigned += assign_initial_roles(priority, roles_for_mode & GLOB.ROLES_XENO, unassigned_players) // Assigning special roles second. (survivor, predator) - assigned += assign_initial_roles(priority, roles_for_mode & (ROLES_WHITELISTED|ROLES_SPECIAL), unassigned_players) + assigned += assign_initial_roles(priority, roles_for_mode & (GLOB.ROLES_WHITELISTED|GLOB.ROLES_SPECIAL), unassigned_players) // Assigning command third. - assigned += assign_initial_roles(priority, roles_for_mode & ROLES_COMMAND, unassigned_players) + assigned += assign_initial_roles(priority, roles_for_mode & GLOB.ROLES_COMMAND, unassigned_players) // Assigning the rest - var/rest_roles_for_mode = roles_for_mode - (roles_for_mode & ROLES_XENO) - (roles_for_mode & ROLES_COMMAND) - (roles_for_mode & (ROLES_WHITELISTED|ROLES_SPECIAL)) + var/rest_roles_for_mode = roles_for_mode - (roles_for_mode & GLOB.ROLES_XENO) - (roles_for_mode & GLOB.ROLES_COMMAND) - (roles_for_mode & (GLOB.ROLES_WHITELISTED|GLOB.ROLES_SPECIAL)) if(count) assigned += assign_initial_roles(priority, rest_roles_for_mode, unassigned_players) else @@ -367,9 +366,9 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou * survivors and the number of roundstart Squad Rifleman slots. */ /datum/authority/branch/role/proc/calculate_role_weight(datum/job/J) - if(ROLES_MARINES.Find(J.title)) + if(GLOB.ROLES_MARINES.Find(J.title)) return 1 - if(ROLES_XENO.Find(J.title)) + if(GLOB.ROLES_XENO.Find(J.title)) return 1 if(J.title == JOB_SURVIVOR) return 1 @@ -436,9 +435,9 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou //here is the main reason this proc exists - to remove freed squad jobs from squad, //so latejoining person ends in the squad which's job was freed and not random one var/datum/squad/sq = null - if(job_squad_roles.Find(J.title)) + if(GLOB.job_squad_roles.Find(J.title)) var/list/squad_list = list() - for(sq in RoleAuthority.squads) + for(sq in GLOB.RoleAuthority.squads) if(sq.usable) squad_list += sq sq = null @@ -537,7 +536,7 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou if(new_job.flags_startup_parameters & ROLE_ADD_TO_SQUAD) //Are we a muhreen? Randomize our squad. This should go AFTER IDs. //TODO Robust this later. randomize_squad(new_human) - if(Check_WO() && job_squad_roles.Find(GET_DEFAULT_ROLE(new_human.job))) //activates self setting proc for marine headsets for WO + if(Check_WO() && GLOB.job_squad_roles.Find(GET_DEFAULT_ROLE(new_human.job))) //activates self setting proc for marine headsets for WO var/datum/game_mode/whiskey_outpost/WO = SSticker.mode WO.self_set_headset(new_human) @@ -579,9 +578,7 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou new_human.sec_hud_set_ID() new_human.hud_set_squad() - for(var/obj/current_item in new_human.get_contents()) - SEND_SIGNAL(current_item, COMSIG_POST_SPAWN_UPDATE, new_human) - + SEND_SIGNAL(new_human, COMSIG_POST_SPAWN_UPDATE) SSround_recording.recorder.track_player(new_human) //Find which squad has the least population. If all 4 squads are equal it should just use a random one @@ -819,7 +816,7 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou var/found_desired = FALSE var/found_limit = FALSE - for(var/status in whitelist_hierarchy) + for(var/status in GLOB.whitelist_hierarchy) if(status == desired_status) found_desired = TRUE break diff --git a/code/game/jobs/slot_scaling.dm b/code/game/jobs/slot_scaling.dm index 7230f57eb745..2d444d06e5ab 100644 --- a/code/game/jobs/slot_scaling.dm +++ b/code/game/jobs/slot_scaling.dm @@ -50,3 +50,6 @@ /proc/working_joe_slot_formula(playercount) return job_slot_formula(playercount,30,1,3,6) + +/proc/mess_sergeant_slot_formula(playercount) + return job_slot_formula(playercount, 70, 1, 1, 2) diff --git a/code/game/jobs/whitelist.dm b/code/game/jobs/whitelist.dm index 05f530348029..3a4b94145ca1 100644 --- a/code/game/jobs/whitelist.dm +++ b/code/game/jobs/whitelist.dm @@ -11,10 +11,10 @@ GLOBAL_LIST_FILE_LOAD(whitelist, WHITELISTFILE) if(client.admin_holder && (client.admin_holder.rights & R_ADMIN)) return TRUE if(job == XENO_CASTE_QUEEN) - var/datum/caste_datum/C = RoleAuthority.castes_by_name[XENO_CASTE_QUEEN] + var/datum/caste_datum/C = GLOB.RoleAuthority.castes_by_name[XENO_CASTE_QUEEN] return C.can_play_caste(client) if(job == JOB_SURVIVOR) - var/datum/job/J = RoleAuthority.roles_by_path[/datum/job/civilian/survivor] + var/datum/job/J = GLOB.RoleAuthority.roles_by_path[/datum/job/civilian/survivor] return J.can_play_role(client) return TRUE @@ -42,11 +42,11 @@ GLOBAL_LIST_FILE_LOAD(alien_whitelist, "config/alienwhitelist.txt") /// returns a list of strings containing the whitelists held by a specific ckey /proc/get_whitelisted_roles(ckey) - if(RoleAuthority.roles_whitelist[ckey] & WHITELIST_PREDATOR) + if(GLOB.RoleAuthority.roles_whitelist[ckey] & WHITELIST_PREDATOR) LAZYADD(., "predator") - if(RoleAuthority.roles_whitelist[ckey] & WHITELIST_COMMANDER) + if(GLOB.RoleAuthority.roles_whitelist[ckey] & WHITELIST_COMMANDER) LAZYADD(., "commander") - if(RoleAuthority.roles_whitelist[ckey] & WHITELIST_SYNTHETIC) + if(GLOB.RoleAuthority.roles_whitelist[ckey] & WHITELIST_SYNTHETIC) LAZYADD(., "synthetic") #undef WHITELISTFILE diff --git a/code/game/machinery/ARES/ARES_interface.dm b/code/game/machinery/ARES/ARES_interface.dm index 0e45d5ee171b..aa1cd92547ec 100644 --- a/code/game/machinery/ARES/ARES_interface.dm +++ b/code/game/machinery/ARES/ARES_interface.dm @@ -78,7 +78,7 @@ data["access_text"] = "[sudo_holder ? "(SUDO)," : ""] access level [authentication], [ares_auth_to_text(authentication)]." data["access_level"] = authentication - data["alert_level"] = security_level + data["alert_level"] = GLOB.security_level data["evac_status"] = SShijack.evac_status data["worldtime"] = world.time @@ -382,7 +382,7 @@ to_chat(usr, SPAN_WARNING("It has not been long enough since the last General Quarters call!")) playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) return FALSE - if(security_level < SEC_LEVEL_RED) + if(GLOB.security_level < SEC_LEVEL_RED) set_security_level(SEC_LEVEL_RED, no_sound = TRUE, announce = FALSE) shipwide_ai_announcement("ATTENTION! GENERAL QUARTERS. ALL HANDS, MAN YOUR BATTLESTATIONS.", MAIN_AI_SYSTEM, 'sound/effects/GQfullcall.ogg') log_game("[key_name(usr)] has called for general quarters via ARES.") @@ -392,7 +392,7 @@ . = TRUE if("evacuation_start") - if(security_level < SEC_LEVEL_RED) + if(GLOB.security_level < SEC_LEVEL_RED) to_chat(usr, SPAN_WARNING("The ship must be under red alert in order to enact evacuation procedures.")) playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) return FALSE @@ -423,11 +423,11 @@ to_chat(usr, SPAN_WARNING("The distress launcher is cooling down!")) playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) return FALSE - if(security_level == SEC_LEVEL_DELTA) + if(GLOB.security_level == SEC_LEVEL_DELTA) to_chat(usr, SPAN_WARNING("The ship is already undergoing self destruct procedures!")) playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) return FALSE - else if(security_level < SEC_LEVEL_RED) + if(GLOB.security_level < SEC_LEVEL_RED) to_chat(usr, SPAN_WARNING("The ship must be under red alert to launch a distress beacon!")) playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) return FALSE @@ -451,7 +451,7 @@ to_chat(usr, SPAN_WARNING("The ordnance request frequency is garbled, wait for reset!")) playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) return FALSE - if(security_level == SEC_LEVEL_DELTA || SSticker.mode.is_in_endgame) + if(GLOB.security_level == SEC_LEVEL_DELTA || SSticker.mode.is_in_endgame) to_chat(usr, SPAN_WARNING("The mission has failed catastrophically, what do you want a nuke for?!")) playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) return FALSE diff --git a/code/game/machinery/ARES/ARES_interface_apollo.dm b/code/game/machinery/ARES/ARES_interface_apollo.dm index 3bbc6065a88a..56283417ae05 100644 --- a/code/game/machinery/ARES/ARES_interface_apollo.dm +++ b/code/game/machinery/ARES/ARES_interface_apollo.dm @@ -70,7 +70,7 @@ data["access_text"] = "access level [authentication], [ares_auth_to_text(authentication)]." data["access_level"] = authentication - data["alert_level"] = security_level + data["alert_level"] = GLOB.security_level data["worldtime"] = world.time data["access_log"] = list() diff --git a/code/game/machinery/ARES/ARES_procs.dm b/code/game/machinery/ARES/ARES_procs.dm index 831f76e48930..06b082e3c5e2 100644 --- a/code/game/machinery/ARES/ARES_procs.dm +++ b/code/game/machinery/ARES/ARES_procs.dm @@ -79,7 +79,7 @@ GLOBAL_LIST_INIT(maintenance_categories, list( // ------ ARES Logging Procs ------ // /proc/ares_apollo_talk(broadcast_message) var/datum/language/apollo/apollo = GLOB.all_languages[LANGUAGE_APOLLO] - for(var/mob/living/silicon/decoy/ship_ai/ai in ai_mob_list) + for(var/mob/living/silicon/decoy/ship_ai/ai in GLOB.ai_mob_list) if(ai.stat == DEAD) return FALSE apollo.broadcast(ai, broadcast_message) diff --git a/code/game/machinery/ARES/apollo_pda.dm b/code/game/machinery/ARES/apollo_pda.dm index 26ec9d5120bd..8df3faf79260 100644 --- a/code/game/machinery/ARES/apollo_pda.dm +++ b/code/game/machinery/ARES/apollo_pda.dm @@ -94,7 +94,7 @@ data["access_text"] = "access level [authentication], [ares_auth_to_text(authentication)]." data["access_level"] = authentication - data["alert_level"] = security_level + data["alert_level"] = GLOB.security_level data["worldtime"] = world.time data["access_log"] = list() diff --git a/code/game/machinery/air_alarm.dm b/code/game/machinery/air_alarm.dm index e6fc0c8de76e..88b4ab899112 100644 --- a/code/game/machinery/air_alarm.dm +++ b/code/game/machinery/air_alarm.dm @@ -5,9 +5,9 @@ /proc/RandomAAlarmWires() //to make this not randomize the wires, just set index to 1 and increment it in the flag for loop (after doing everything else). var/list/AAlarmwires = list(0, 0, 0, 0, 0) - AAlarmIndexToFlag = list(0, 0, 0, 0, 0) - AAlarmIndexToWireColor = list(0, 0, 0, 0, 0) - AAlarmWireColorToIndex = list(0, 0, 0, 0, 0) + GLOB.AAlarmIndexToFlag = list(0, 0, 0, 0, 0) + GLOB.AAlarmIndexToWireColor = list(0, 0, 0, 0, 0) + GLOB.AAlarmWireColorToIndex = list(0, 0, 0, 0, 0) var/flagIndex = 1 for (var/flag=1, flag<32, flag+=flag) var/valid = 0 @@ -16,9 +16,9 @@ if (AAlarmwires[colorIndex]==0) valid = 1 AAlarmwires[colorIndex] = flag - AAlarmIndexToFlag[flagIndex] = flag - AAlarmIndexToWireColor[flagIndex] = colorIndex - AAlarmWireColorToIndex[colorIndex] = flagIndex + GLOB.AAlarmIndexToFlag[flagIndex] = flag + GLOB.AAlarmIndexToWireColor[flagIndex] = colorIndex + GLOB.AAlarmWireColorToIndex[colorIndex] = flagIndex flagIndex+=1 return AAlarmwires @@ -379,24 +379,24 @@ //HACKING// /////////// /obj/structure/machinery/alarm/proc/isWireColorCut(wireColor) - var/wireFlag = AAlarmWireColorToFlag[wireColor] + var/wireFlag = GLOB.AAlarmWireColorToFlag[wireColor] return ((AAlarmwires & wireFlag) == 0) /obj/structure/machinery/alarm/proc/isWireCut(wireIndex) - var/wireFlag = AAlarmIndexToFlag[wireIndex] + var/wireFlag = GLOB.AAlarmIndexToFlag[wireIndex] return ((AAlarmwires & wireFlag) == 0) /obj/structure/machinery/alarm/proc/allWiresCut() var/i = 1 while(i<=5) - if(AAlarmwires & AAlarmIndexToFlag[i]) + if(AAlarmwires & GLOB.AAlarmIndexToFlag[i]) return 0 i++ return 1 /obj/structure/machinery/alarm/proc/cut(wireColor) - var/wireFlag = AAlarmWireColorToFlag[wireColor] - var/wireIndex = AAlarmWireColorToIndex[wireColor] + var/wireFlag = GLOB.AAlarmWireColorToFlag[wireColor] + var/wireIndex = GLOB.AAlarmWireColorToIndex[wireColor] AAlarmwires &= ~wireFlag switch(wireIndex) if(AALARM_WIRE_IDSCAN) @@ -427,8 +427,8 @@ return /obj/structure/machinery/alarm/proc/mend(wireColor) - var/wireFlag = AAlarmWireColorToFlag[wireColor] - var/wireIndex = AAlarmWireColorToIndex[wireColor] //not used in this function + var/wireFlag = GLOB.AAlarmWireColorToFlag[wireColor] + var/wireIndex = GLOB.AAlarmWireColorToIndex[wireColor] //not used in this function AAlarmwires |= wireFlag switch(wireIndex) if(AALARM_WIRE_POWER) @@ -445,7 +445,7 @@ /obj/structure/machinery/alarm/proc/pulse(wireColor) //var/wireFlag = AAlarmWireColorToFlag[wireColor] //not used in this function - var/wireIndex = AAlarmWireColorToIndex[wireColor] + var/wireIndex = GLOB.AAlarmWireColorToIndex[wireColor] switch(wireIndex) if(AALARM_WIRE_IDSCAN) //unlocks for 30 seconds, if you have a better way to hack I'm all ears locked = 0 @@ -527,7 +527,7 @@ "Black" = 5, ) for(var/wiredesc in wirecolors) - var/is_uncut = AAlarmwires & AAlarmWireColorToFlag[wirecolors[wiredesc]] + var/is_uncut = AAlarmwires & GLOB.AAlarmWireColorToFlag[wirecolors[wiredesc]] t1 += "[wiredesc] wire: " if(!is_uncut) t1 += "Mend" diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index 3c2c81ff0ce7..d62d688fcfc5 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -98,12 +98,12 @@ update_flag /obj/structure/machinery/portable_atmospherics/canister/attackby(obj/item/W as obj, mob/user as mob) if(!HAS_TRAIT(W, TRAIT_TOOL_WRENCH) && !istype(W, /obj/item/tank) && !istype(W, /obj/item/device/analyzer)) - visible_message(SPAN_DANGER("[user] hits the [src] with a [W]!")) + visible_message(SPAN_DANGER("[user] hits [src] with [W]!")) update_health(W.force) src.add_fingerprint(user) ..() - nanomanager.update_uis(src) // Update all NanoUIs attached to src + SSnano.nanomanager.update_uis(src) // Update all NanoUIs attached to src /obj/structure/machinery/portable_atmospherics/canister/attack_remote(mob/user as mob) return src.attack_hand(user) diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm index 0af38cacd75e..1c240fb05dfb 100644 --- a/code/game/machinery/atmoalter/scrubber.dm +++ b/code/game/machinery/atmoalter/scrubber.dm @@ -18,16 +18,14 @@ PF.flags_can_pass_all = PASS_OVER|PASS_AROUND|PASS_UNDER /obj/structure/machinery/portable_atmospherics/powered/scrubber/emp_act(severity) + . = ..() if(inoperable()) - ..(severity) return if(prob(50/severity)) on = !on update_icon() - ..(severity) - /obj/structure/machinery/portable_atmospherics/powered/scrubber/update_icon() src.overlays = 0 diff --git a/code/game/machinery/bio-dome_floodlights.dm b/code/game/machinery/bio-dome_floodlights.dm index a1f028a79f30..e23dbcc023f4 100644 --- a/code/game/machinery/bio-dome_floodlights.dm +++ b/code/game/machinery/bio-dome_floodlights.dm @@ -14,7 +14,7 @@ /obj/structure/machinery/hydro_floodlight_switch/Initialize(mapload, ...) . = ..() - for(var/obj/structure/machinery/hydro_floodlight/F in machines) + for(var/obj/structure/machinery/hydro_floodlight/F in GLOB.machines) floodlist += F F.fswitch = src start_processing() diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm index 116753093fe5..46050d2705b3 100644 --- a/code/game/machinery/bots/bots.dm +++ b/code/game/machinery/bots/bots.dm @@ -114,6 +114,7 @@ /obj/structure/machinery/bot/emp_act(severity) + . = ..() var/was_on = on stat |= EMPED new /obj/effect/overlay/temp/emp_sparks (loc) @@ -150,7 +151,7 @@ /turf/proc/CardinalTurfsWithAccess(obj/item/card/id/ID) var/L[] = new() - for(var/d in cardinal) + for(var/d in GLOB.cardinals) var/turf/T = get_step(src, d) if(istype(T) && !T.density) if(!LinkBlockedWithAccess(src, T, ID)) diff --git a/code/game/machinery/bots/cleanbot.dm b/code/game/machinery/bots/cleanbot.dm index e2dcf7ffb1db..c21a7a854bc3 100644 --- a/code/game/machinery/bots/cleanbot.dm +++ b/code/game/machinery/bots/cleanbot.dm @@ -37,8 +37,8 @@ should_patrol = 1 src.botcard = new(src) - if(RoleAuthority) - var/datum/job/ctequiv = RoleAuthority.roles_by_name[JOB_CARGO_TECH] + if(GLOB.RoleAuthority) + var/datum/job/ctequiv = GLOB.RoleAuthority.roles_by_name[JOB_CARGO_TECH] if(ctequiv) botcard.access = ctequiv.get_access() src.locked = 0 // Start unlocked so roboticist can set them to patrol. diff --git a/code/game/machinery/bots/medbot.dm b/code/game/machinery/bots/medbot.dm index f28a15ea1893..77e890d88d34 100644 --- a/code/game/machinery/bots/medbot.dm +++ b/code/game/machinery/bots/medbot.dm @@ -63,7 +63,7 @@ src.botcard = new /obj/item/card/id(src) if(isnull(src.botcard_access) || (src.botcard_access.len < 1)) - var/datum/job/J = RoleAuthority ? RoleAuthority.roles_by_path[/datum/job/civilian/doctor] : new /datum/job/civilian/doctor + var/datum/job/J = GLOB.RoleAuthority ? GLOB.RoleAuthority.roles_by_path[/datum/job/civilian/doctor] : new /datum/job/civilian/doctor botcard.access = J.get_access() else src.botcard.access = src.botcard_access diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm index 4ad40a6058bb..08437d35a8e3 100644 --- a/code/game/machinery/bots/mulebot.dm +++ b/code/game/machinery/bots/mulebot.dm @@ -70,8 +70,8 @@ /obj/structure/machinery/bot/mulebot/Initialize(mapload, ...) . = ..() botcard = new(src) - if(RoleAuthority) - var/datum/job/ctequiv = RoleAuthority.roles_by_name[JOB_CARGO_TECH] + if(GLOB.RoleAuthority) + var/datum/job/ctequiv = GLOB.RoleAuthority.roles_by_name[JOB_CARGO_TECH] if(ctequiv) botcard.access = ctequiv.get_access() cell = new(src) @@ -83,7 +83,7 @@ SSradio.add_object(src, beacon_freq, filter = RADIO_NAVBEACONS) var/count = 0 - for(var/obj/structure/machinery/bot/mulebot/other in machines) + for(var/obj/structure/machinery/bot/mulebot/other in GLOB.machines) count++ if(!suffix) suffix = "#[count]" @@ -915,11 +915,11 @@ post_signal_multiple(control_freq, kv) /obj/structure/machinery/bot/mulebot/emp_act(severity) + . = ..() if (cell) cell.emp_act(severity) if(load) load.emp_act(severity) - ..() /obj/structure/machinery/bot/mulebot/explode() diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index d416c561fcd3..acb6d26bf0d5 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -35,6 +35,9 @@ var/colony_camera_mapload = TRUE + /// If this camera should have innate EMP-proofing + var/emp_proof = FALSE + /obj/structure/machinery/camera/Initialize(mapload, ...) . = ..() WireColorToFlag = randomCameraWires() @@ -72,12 +75,13 @@ if(WEST) pixel_x = 27 /obj/structure/machinery/camera/emp_act(severity) + . = ..() if(!isEmpProof()) if(prob(100/severity)) icon_state = "[initial(icon_state)]emp" var/list/previous_network = network network = list() - cameranet.removeCamera(src) + GLOB.cameranet.removeCamera(src) stat |= EMPED set_light(0) triggerCameraAlarm() @@ -87,9 +91,8 @@ stat &= ~EMPED cancelCameraAlarm() if(can_use()) - cameranet.addCamera(src) + GLOB.cameranet.addCamera(src) kick_viewers() - ..() /obj/structure/machinery/camera/ex_act(severity) @@ -101,7 +104,7 @@ /obj/structure/machinery/camera/proc/setViewRange(num = 7) src.view_range = num - cameranet.updateVisibility(src, 0) + GLOB.cameranet.updateVisibility(src, 0) /obj/structure/machinery/camera/attack_hand(mob/living/carbon/human/user as mob) diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm index 41aa7fa32707..5a0a41fdc9bf 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -40,7 +40,7 @@ if (!status || (stat & NOPOWER)) return 0 if (detectTime == -1) - for (var/mob/living/silicon/aiPlayer in ai_mob_list) + for (var/mob/living/silicon/aiPlayer in GLOB.ai_mob_list) aiPlayer.cancelAlarm("Motion", get_area(src), src) detectTime = 0 return 1 @@ -49,7 +49,7 @@ if (!status || (stat & NOPOWER)) return 0 if (!detectTime) return 0 - for (var/mob/living/silicon/aiPlayer in ai_mob_list) + for (var/mob/living/silicon/aiPlayer in GLOB.ai_mob_list) aiPlayer.triggerAlarm("Motion", get_area(src), list(src), src) detectTime = -1 return 1 diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm index a8735cbc06a8..1f680ad76712 100644 --- a/code/game/machinery/camera/presets.dm +++ b/code/game/machinery/camera/presets.dm @@ -30,6 +30,7 @@ network = list(CAMERA_NET_LASER_TARGETS) unslashable = TRUE unacidable = TRUE + emp_proof = TRUE /obj/structure/machinery/camera/laser_cam/Initialize(mapload, laser_name) . = ..() @@ -37,8 +38,6 @@ var/area/A = get_area(src) c_tag = "[laser_name] ([A.name])" -/obj/structure/machinery/camera/laser_cam/emp_act(severity) - return //immune to EMPs, just in case /obj/structure/machinery/camera/laser_cam/ex_act() return @@ -79,7 +78,7 @@ number = 1 var/area/A = get_area(src) if(A) - for(var/obj/structure/machinery/camera/autoname/C in machines) + for(var/obj/structure/machinery/camera/autoname/C in GLOB.machines) if(C == src) continue var/area/CA = get_area(C) if(CA.type == A.type) @@ -125,9 +124,7 @@ invisibility = 101 //fuck you init() colony_camera_mapload = FALSE - -/obj/structure/machinery/camera/autoname/lz_camera/emp_act(severity) - return //immune to EMPs, just in case + emp_proof = TRUE /obj/structure/machinery/camera/autoname/lz_camera/ex_act() return @@ -137,7 +134,7 @@ /obj/structure/machinery/camera/proc/isEmpProof() var/O = locate(/obj/item/stack/sheet/mineral/osmium) in assembly.upgrades - return O + return O || emp_proof /obj/structure/machinery/camera/proc/isXRay() var/obj/item/stock_parts/scanning_module/O = locate(/obj/item/stock_parts/scanning_module) in assembly.upgrades diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm index 806664e012de..b9ea018ba98f 100644 --- a/code/game/machinery/camera/tracking.dm +++ b/code/game/machinery/camera/tracking.dm @@ -16,7 +16,7 @@ return var/list/L = list() - for (var/obj/structure/machinery/camera/C in cameranet.cameras) + for (var/obj/structure/machinery/camera/C in GLOB.cameranet.cameras) L.Add(C) camera_sort(L) @@ -213,9 +213,9 @@ return 0 if(isrobot(M)) var/mob/living/silicon/robot/R = M - if(!(R.camera && R.camera.can_use()) && !cameranet.checkCameraVis(M)) + if(!(R.camera && R.camera.can_use()) && !GLOB.cameranet.checkCameraVis(M)) return 0 - else if(!cameranet.checkCameraVis(M)) + else if(!GLOB.cameranet.checkCameraVis(M)) return 0 return 1 diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index fcd8c65e93ca..eb7a501fa078 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -80,11 +80,11 @@ return /obj/structure/machinery/cell_charger/emp_act(severity) + . = ..() if(inoperable()) return if(charging) charging.emp_act(severity) - ..(severity) /obj/structure/machinery/cell_charger/process() diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index 08de86581518..55df45c70ccc 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -22,7 +22,7 @@ . = ..() icon_state = "grass[pick("1","2","3","4")]" update_icon() - for(var/direction in cardinal) + for(var/direction in GLOB.cardinals) if(istype(get_step(src, direction), /turf/open/floor)) var/turf/open/floor/FF = get_step(src,direction) FF.update_icon() //so siding get updated properly @@ -148,19 +148,19 @@ return M.forceMove(loc) M.apply_effect(5, WEAKEN) - for(var/obj/structure/machinery/scoreboard/X in machines) + for(var/obj/structure/machinery/scoreboard/X in GLOB.machines) if(X.id == id) X.score(side, 3)// 3 points for dunking a mob // no break, to update multiple scoreboards - visible_message(SPAN_DANGER("[user] dunks [M] into the [src]!")) + visible_message(SPAN_DANGER("[user] dunks [M] into [src]!")) return else if (istype(W, /obj/item) && get_dist(src,user)<2) user.drop_inv_item_to_loc(W, loc) - for(var/obj/structure/machinery/scoreboard/X in machines) + for(var/obj/structure/machinery/scoreboard/X in GLOB.machines) if(X.id == id) X.score(side) // no break, to update multiple scoreboards - visible_message(SPAN_NOTICE("[user] dunks [W] into the [src]!")) + visible_message(SPAN_NOTICE("[user] dunks [W] into [src]!")) return /obj/structure/holohoop/BlockedPassDirs(atom/movable/mover, target_dir) @@ -170,7 +170,7 @@ return BLOCKED_MOVEMENT if(prob(50)) I.forceMove(src.loc) - for(var/obj/structure/machinery/scoreboard/X in machines) + for(var/obj/structure/machinery/scoreboard/X in GLOB.machines) if(X.id == id) X.score(side) // no break, to update multiple scoreboards diff --git a/code/game/machinery/computer/almayer_control.dm b/code/game/machinery/computer/almayer_control.dm index fb9f7a0375d9..2b54d2e1df5b 100644 --- a/code/game/machinery/computer/almayer_control.dm +++ b/code/game/machinery/computer/almayer_control.dm @@ -72,7 +72,7 @@ var/list/data = list() var/list/messages = list() - data["alert_level"] = security_level + data["alert_level"] = GLOB.security_level data["time_request"] = cooldown_request data["time_destruct"] = cooldown_destruct @@ -116,7 +116,7 @@ // evac stuff start \\ if("evacuation_start") - if(security_level < SEC_LEVEL_RED) + if(GLOB.security_level < SEC_LEVEL_RED) to_chat(usr, SPAN_WARNING("The ship must be under red alert in order to enact evacuation procedures.")) return FALSE @@ -147,7 +147,7 @@ if("change_sec_level") var/list/alert_list = list(num2seclevel(SEC_LEVEL_GREEN), num2seclevel(SEC_LEVEL_BLUE)) - switch(security_level) + switch(GLOB.security_level) if(SEC_LEVEL_GREEN) alert_list -= num2seclevel(SEC_LEVEL_GREEN) if(SEC_LEVEL_BLUE) @@ -217,7 +217,7 @@ to_chat(usr, SPAN_WARNING("The distress beacon has recently broadcast a message. Please wait.")) return FALSE - if(security_level == SEC_LEVEL_DELTA) + if(GLOB.security_level == SEC_LEVEL_DELTA) to_chat(usr, SPAN_WARNING("The ship is already undergoing self-destruct procedures!")) return FALSE diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 8d35dd1b6aff..1ac5a06738d5 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -165,8 +165,8 @@ return /obj/structure/machinery/computer/arcade/emp_act(severity) + . = ..() if(inoperable()) - ..(severity) return var/empprize = null var/num_of_prizes = 0 @@ -178,5 +178,3 @@ for(num_of_prizes; num_of_prizes > 0; num_of_prizes--) empprize = pickweight(prizes) new empprize(src.loc) - - ..(severity) diff --git a/code/game/machinery/computer/area_air_control.dm b/code/game/machinery/computer/area_air_control.dm index 22f4211aa8ee..cd9870f175c4 100644 --- a/code/game/machinery/computer/area_air_control.dm +++ b/code/game/machinery/computer/area_air_control.dm @@ -156,7 +156,7 @@ var/turf/T = get_turf(src) if(!T.loc) return - for(var/obj/structure/machinery/portable_atmospherics/powered/scrubber/huge/scrubber in machines ) + for(var/obj/structure/machinery/portable_atmospherics/powered/scrubber/huge/scrubber in GLOB.machines ) var/turf/T2 = get_turf(scrubber) if(T2 && T2.loc) var/area/A = T2.loc diff --git a/code/game/machinery/computer/camera_console.dm b/code/game/machinery/computer/camera_console.dm index 281c548227b0..ca8c8b2f1a34 100644 --- a/code/game/machinery/computer/camera_console.dm +++ b/code/game/machinery/computer/camera_console.dm @@ -40,6 +40,8 @@ instance.del_on_map_removal = FALSE if(instance.blend_mode_override) instance.blend_mode = instance.blend_mode_override + if(istype(instance, /atom/movable/screen/plane_master/lighting)) + instance.add_filter("awooga", 1, color_matrix_filter(color_matrix_from_string("#90ee90"))) instance.screen_loc = "[map_name]:CENTER" cam_plane_masters += instance @@ -226,7 +228,7 @@ // Returns the list of cameras accessible from this computer /obj/structure/machinery/computer/cameras/proc/get_available_cameras() var/list/D = list() - for(var/obj/structure/machinery/camera/C in cameranet.cameras) + for(var/obj/structure/machinery/camera/C in GLOB.cameranet.cameras) if(!C.network) stack_trace("Camera in a cameranet has no camera network") continue @@ -354,8 +356,8 @@ exproof = TRUE colony_camera_mapload = FALSE -/obj/structure/machinery/computer/cameras/mortar/emp_act(severity) - return FALSE +/obj/structure/machinery/computer/cameras/mortar/set_broken() + return /obj/structure/machinery/computer/cameras/dropship name = "abstract dropship camera computer" diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 3332577683fe..7a51539b8888 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -43,7 +43,7 @@ var/stat_msg1 var/stat_msg2 - var/datum/tacmap/tacmap + var/datum/tacmap/drawing/tacmap var/minimap_type = MINIMAP_FLAG_USCM processing = TRUE @@ -98,9 +98,9 @@ if(-INFINITY to SEC_LEVEL_GREEN) tmp_alertlevel = SEC_LEVEL_GREEN //Cannot go below green. if(SEC_LEVEL_BLUE to INFINITY) tmp_alertlevel = SEC_LEVEL_BLUE //Cannot go above blue. - var/old_level = security_level + var/old_level = GLOB.security_level set_security_level(tmp_alertlevel) - if(security_level != old_level) + if(GLOB.security_level != old_level) //Only notify the admins if an actual change happened log_game("[key_name(usr)] has changed the security level to [get_security_level()].") message_admins("[key_name_admin(usr)] has changed the security level to [get_security_level()].") @@ -134,7 +134,7 @@ if("evacuation_start") if(state == STATE_EVACUATION) - if(security_level < SEC_LEVEL_DELTA) + if(GLOB.security_level < SEC_LEVEL_DELTA) to_chat(usr, SPAN_WARNING("The ship must be under delta alert in order to enact evacuation procedures.")) return FALSE @@ -185,7 +185,7 @@ to_chat(usr, SPAN_WARNING("The distress beacon has recently broadcast a message. Please wait.")) return FALSE - if(security_level == SEC_LEVEL_DELTA) + if(GLOB.security_level == SEC_LEVEL_DELTA) to_chat(usr, SPAN_WARNING("The ship is already undergoing self-destruct procedures!")) return FALSE diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 304b24a14f04..c33517796271 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -31,8 +31,9 @@ return 1 /obj/structure/machinery/computer/emp_act(severity) - if(prob(20/severity)) set_broken() - ..() + . = ..() + if(prob(20/severity)) + set_broken() /obj/structure/machinery/computer/ex_act(severity) diff --git a/code/game/machinery/computer/dropship_weapons.dm b/code/game/machinery/computer/dropship_weapons.dm index 6218bf0cdedb..d86b9fc28a28 100644 --- a/code/game/machinery/computer/dropship_weapons.dm +++ b/code/game/machinery/computer/dropship_weapons.dm @@ -64,7 +64,7 @@ power = MATRIX.power else - to_chat(user, SPAN_WARNING("matrix is not complete!")) + to_chat(user, SPAN_WARNING("Matrix is not complete!")) /obj/structure/machinery/computer/dropship_weapons/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) var/data[0] @@ -97,7 +97,7 @@ if(!faction) return //no faction, no weapons - var/datum/cas_iff_group/cas_group = cas_groups[faction] + var/datum/cas_iff_group/cas_group = GLOB.cas_groups[faction] if(!cas_group) return //broken group. No fighting @@ -237,7 +237,7 @@ "firemission_step" = firemission_stat, ) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = SSnano.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "dropship_weapons_console.tmpl", "Weapons Control", 800, 600) @@ -280,7 +280,7 @@ if(!faction) return //no faction, no weapons - var/datum/cas_iff_group/cas_group = cas_groups[faction] + var/datum/cas_iff_group/cas_group = GLOB.cas_groups[faction] if(!cas_group) return //broken group. No fighting @@ -490,7 +490,7 @@ if(dropship.mode != SHUTTLE_CALL) to_chat(usr, SPAN_WARNING("Shuttle has to be in orbit.")) return - var/datum/cas_iff_group/cas_group = cas_groups[faction] + var/datum/cas_iff_group/cas_group = GLOB.cas_groups[faction] var/datum/cas_signal/cas_sig for(var/X in cas_group.cas_signals) var/datum/cas_signal/LT = X @@ -588,7 +588,7 @@ to_chat(usr, SPAN_DANGER("Bug encountered, this console doesn't have a faction set, report this to a coder!")) return - var/datum/cas_iff_group/cas_group = cas_groups[faction] + var/datum/cas_iff_group/cas_group = GLOB.cas_groups[faction] if(!cas_group) to_chat(usr, SPAN_DANGER("Bug encountered, no CAS group exists for this console, report this to a coder!")) return diff --git a/code/game/machinery/computer/groundside_operations.dm b/code/game/machinery/computer/groundside_operations.dm index 9856ae8f970e..7b4c2d5df771 100644 --- a/code/game/machinery/computer/groundside_operations.dm +++ b/code/game/machinery/computer/groundside_operations.dm @@ -25,7 +25,11 @@ add_pmcs = FALSE else if(SSticker.current_state < GAME_STATE_PLAYING) RegisterSignal(SSdcs, COMSIG_GLOB_MODE_PRESETUP, PROC_REF(disable_pmc)) - tacmap = new(src, minimap_type) + if(announcement_faction == FACTION_MARINE) + tacmap = new /datum/tacmap/drawing(src, minimap_type) + else + tacmap = new(src, minimap_type) // Non-drawing version + return ..() /obj/structure/machinery/computer/groundside_operations/Destroy() @@ -55,7 +59,7 @@ dat += "
[is_announcement_active ? "Make An Announcement" : "*Unavailable*"]" dat += "
Tactical Map" dat += "

" - var/datum/squad/marine/echo/echo_squad = locate() in RoleAuthority.squads + var/datum/squad/marine/echo/echo_squad = locate() in GLOB.RoleAuthority.squads if(!echo_squad.active && faction == FACTION_MARINE) dat += "
Designate Echo Squad" dat += "

" @@ -247,7 +251,7 @@ if("pick_squad") var/list/squad_list = list() - for(var/datum/squad/S in RoleAuthority.squads) + for(var/datum/squad/S in GLOB.RoleAuthority.squads) if(S.active && S.faction == faction) squad_list += S.name @@ -276,7 +280,7 @@ usr.UnregisterSignal(cam, COMSIG_PARENT_QDELETING) cam = null usr.reset_view(null) - else if(usr.client.view != world_view_size) + else if(usr.client.view != GLOB.world_view_size) to_chat(usr, SPAN_WARNING("You're too busy peering through binoculars.")) else if(cam) @@ -290,7 +294,7 @@ if(!reason) return if(alert(usr, "Confirm activation of Echo Squad for [reason]", "Confirm Activation", "Yes", "No") != "Yes") return - var/datum/squad/marine/echo/echo_squad = locate() in RoleAuthority.squads + var/datum/squad/marine/echo/echo_squad = locate() in GLOB.RoleAuthority.squads if(!echo_squad) visible_message(SPAN_BOLDNOTICE("ERROR: Unable to locate Echo Squad database.")) return diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index 7ad223093130..20aa6925d0b4 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -108,7 +108,7 @@ dat += "Back" dat += "
Medical Robots:" var/bdat = null - for(var/obj/structure/machinery/bot/medbot/M in machines) + for(var/obj/structure/machinery/bot/medbot/M in GLOB.machines) if(M.z != src.z) continue //only find medibots on the same z-level as the computer var/turf/bl = get_turf(M) @@ -398,7 +398,7 @@ var/counter = 1 while(src.active2.fields[text("com_[]", counter)]) counter++ - src.active2.fields[text("com_[counter]")] = text("Made by [authenticated] ([rank]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [game_year]
[t1]") + src.active2.fields[text("com_[counter]")] = text("Made by [authenticated] ([rank]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [GLOB.game_year]
[t1]") if (href_list["del_c"]) if ((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])])) @@ -450,7 +450,7 @@ else P.info += "Medical Record Lost!
" P.info += "" - P.info += text("

This report was printed by [] [].
The [MAIN_SHIP_NAME],[]/[], []

\n",last_user_rank,last_user_name,time2text(world.timeofday, "MM/DD"),game_year,worldtime2text()) + P.info += text("

This report was printed by [] [].
The [MAIN_SHIP_NAME],[]/[], []

\n",last_user_rank,last_user_name,time2text(world.timeofday, "MM/DD"),GLOB.game_year,worldtime2text()) src.printing = null if(href_list["print_bs"])//Prints latest body scan @@ -473,7 +473,7 @@ break else P.info += "No scan on record." - P.info += text("

This report was printed by [] [].
The [MAIN_SHIP_NAME], []/[], []

\n",last_user_rank,last_user_name,time2text(world.timeofday, "MM/DD"),game_year,worldtime2text()) + P.info += text("

This report was printed by [] [].
The [MAIN_SHIP_NAME], []/[], []

\n",last_user_rank,last_user_name,time2text(world.timeofday, "MM/DD"),GLOB.game_year,worldtime2text()) src.printing = null @@ -483,15 +483,15 @@ return /obj/structure/machinery/computer/med_data/emp_act(severity) + . = ..() if(inoperable()) - ..(severity) return for(var/datum/data/record/R as anything in GLOB.data_core.medical) if(prob(10/severity)) switch(rand(1,6)) if(1) - R.fields["name"] = "[pick(pick(first_names_male), pick(first_names_female))] [pick(last_names)]" + R.fields["name"] = "[pick(pick(GLOB.first_names_male), pick(GLOB.first_names_female))] [pick(GLOB.last_names)]" if(2) R.fields["sex"] = pick("Male", "Female") if(3) @@ -509,8 +509,6 @@ qdel(R) continue - ..(severity) - /obj/structure/machinery/computer/med_data/laptop name = "Medical Laptop" diff --git a/code/game/machinery/computer/research.dm b/code/game/machinery/computer/research.dm index 2f37d9b2598a..1ba696eeee9c 100644 --- a/code/game/machinery/computer/research.dm +++ b/code/game/machinery/computer/research.dm @@ -28,8 +28,8 @@ if(N.note_type == "grant") if(!N.grant) return - chemical_data.update_credits(N.grant) - visible_message(SPAN_NOTICE("[user] scans the [N.name] on the [src], collecting the [N.grant] research credits.")) + GLOB.chemical_data.update_credits(N.grant) + visible_message(SPAN_NOTICE("[user] scans the [N.name] on [src], collecting the [N.grant] research credits.")) N.grant = 0 qdel(N) return @@ -42,7 +42,7 @@ response = alert(usr,"Use existing or new category?","[src]","Existing","New") if(response == "Existing") var/list/pool = list() - for(var/category in chemical_data.research_documents) + for(var/category in GLOB.chemical_data.research_documents) pool += category pool = sortAssoc(pool) response = tgui_input_list(usr,"Select a category:", "Categories", pool) @@ -51,7 +51,7 @@ if(!response) response = "Misc." var/obj/item/paper/research_report/CR = P.convert_to_chem_report() - chemical_data.save_document(CR, response, CR.name) + GLOB.chemical_data.save_document(CR, response, CR.name) return //Clearance Updating if(!istype(B, /obj/item/card/id)) @@ -60,8 +60,8 @@ if(!istype(card)) visible_message(SPAN_NOTICE("[user] swipes their ID card on \the [src], but it is refused.")) return - if(card.clearance_access <= chemical_data.clearance_level || (card.clearance_access == 6 && chemical_data.clearance_level >= 5 && chemical_data.clearance_x_access)) - visible_message(SPAN_NOTICE("[user] swipes the clearance card on the [src], but nothing happens.")) + if(card.clearance_access <= GLOB.chemical_data.clearance_level || (card.clearance_access == 6 && GLOB.chemical_data.clearance_level >= 5 && GLOB.chemical_data.clearance_x_access)) + visible_message(SPAN_NOTICE("[user] swipes the clearance card on [src], but nothing happens.")) return if(user.real_name != card.registered_name) visible_message(SPAN_WARNING("WARNING: ILLEGAL CLEARANCE USER DETECTED. CARD DATA HAS BEEN WIPED.")) @@ -76,10 +76,10 @@ else give_level = card.clearance_access - chemical_data.clearance_level = give_level + GLOB.chemical_data.clearance_level = give_level if(give_x) - chemical_data.clearance_x_access = TRUE - chemical_data.reached_x_access = TRUE + GLOB.chemical_data.clearance_x_access = TRUE + GLOB.chemical_data.reached_x_access = TRUE visible_message(SPAN_NOTICE("[user] swipes their ID card on \the [src], updating the clearance to level [give_level][give_x ? "X" : ""].")) msg_admin_niche("[key_name(user)] has updated the research clearance to level [give_level][give_x ? "X" : ""].") @@ -103,12 +103,12 @@ /obj/structure/machinery/computer/research/ui_data(mob/user) var/list/data = list( - "rsc_credits" = chemical_data.rsc_credits, - "clearance_level" = chemical_data.clearance_level, - "broker_cost" = max(RESEARCH_LEVEL_INCREASE_MULTIPLIER*(chemical_data.clearance_level + 1), 1), - "research_documents" = chemical_data.research_documents, - "published_documents" = chemical_data.research_publications, - "clearance_x_access" = chemical_data.clearance_x_access, + "rsc_credits" = GLOB.chemical_data.rsc_credits, + "clearance_level" = GLOB.chemical_data.clearance_level, + "broker_cost" = max(RESEARCH_LEVEL_INCREASE_MULTIPLIER*(GLOB.chemical_data.clearance_level + 1), 1), + "research_documents" = GLOB.chemical_data.research_documents, + "published_documents" = GLOB.chemical_data.research_publications, + "clearance_x_access" = GLOB.chemical_data.clearance_x_access, "photocopier_error" = !photocopier, "printer_toner" = photocopier?.toner ) @@ -133,7 +133,7 @@ if ("read_document") var/print_type = params["print_type"] var/print_title = params["print_title"] - var/obj/item/paper/research_report/report = chemical_data.get_report(print_type, print_title) + var/obj/item/paper/research_report/report = GLOB.chemical_data.get_report(print_type, print_title) if(report) report.read_paper(user) return @@ -145,7 +145,7 @@ var/print_title = params["print_title"] photocopier.toner = max(0, photocopier.toner - 1) var/obj/item/paper/research_report/printing = new /obj/item/paper/research_report/(photocopier.loc) - var/obj/item/paper/research_report/report = chemical_data.get_report(print_type, print_title) + var/obj/item/paper/research_report/report = GLOB.chemical_data.get_report(print_type, print_title) if(report) printing.name = report.name printing.info = report.info @@ -154,16 +154,16 @@ if("broker_clearance") if(!photocopier) return - if(chemical_data.clearance_level < 5) - var/cost = max(RESEARCH_LEVEL_INCREASE_MULTIPLIER*(chemical_data.clearance_level + 1), 1) - if(cost <= chemical_data.rsc_credits) - chemical_data.update_credits(cost * -1) - chemical_data.clearance_level++ - visible_message(SPAN_NOTICE("Clearance access increased to level [chemical_data.clearance_level] for [cost] credits.")) - msg_admin_niche("[key_name(user)] traded research credits to upgrade the clearance to level [chemical_data.clearance_level].") - if(max_clearance < chemical_data.clearance_level) - chemical_data.update_income(1) //Bonus income and a paper for buying clearance instead of swiping it up - switch(chemical_data.clearance_level) + if(GLOB.chemical_data.clearance_level < 5) + var/cost = max(RESEARCH_LEVEL_INCREASE_MULTIPLIER*(GLOB.chemical_data.clearance_level + 1), 1) + if(cost <= GLOB.chemical_data.rsc_credits) + GLOB.chemical_data.update_credits(cost * -1) + GLOB.chemical_data.clearance_level++ + visible_message(SPAN_NOTICE("Clearance access increased to level [GLOB.chemical_data.clearance_level] for [cost] credits.")) + msg_admin_niche("[key_name(user)] traded research credits to upgrade the clearance to level [GLOB.chemical_data.clearance_level].") + if(max_clearance < GLOB.chemical_data.clearance_level) + GLOB.chemical_data.update_income(1) //Bonus income and a paper for buying clearance instead of swiping it up + switch(GLOB.chemical_data.clearance_level) if(2) new /obj/item/paper/research_notes/unique/tier_two/(photocopier.loc) max_clearance = 2 @@ -182,11 +182,11 @@ var/purchase_tier = FLOOR(text2num(params["purchase_document"]), 1) if(purchase_tier <= 0 || purchase_tier > 5) return - if(purchase_tier > chemical_data.clearance_level) + if(purchase_tier > GLOB.chemical_data.clearance_level) return var/purchase_cost = base_purchase_cost + purchase_tier * 2 - if(purchase_cost <= chemical_data.rsc_credits) - chemical_data.update_credits(purchase_cost * -1) + if(purchase_cost <= GLOB.chemical_data.rsc_credits) + GLOB.chemical_data.update_credits(purchase_cost * -1) var/obj/item/paper/research_notes/unique/N switch(purchase_tier) if(1) @@ -203,21 +203,20 @@ if("publish_document") var/print_type = params["print_type"] var/print_title = params["print_title"] - var/obj/item/paper/research_report/report = chemical_data.get_report(print_type, print_title) + var/obj/item/paper/research_report/report = GLOB.chemical_data.get_report(print_type, print_title) if(!report) to_chat(usr, SPAN_WARNING("Report data corrupted. Unable to transmit.")) return - chemical_data.publish_document(report, print_type, print_title) + GLOB.chemical_data.publish_document(report, print_type, print_title) if("unpublish_document") var/print_title = params["print_title"] var/print_type = params["print_type"] - chemical_data.unpublish_document(print_type, print_title) + GLOB.chemical_data.unpublish_document(print_type, print_title) if("request_clearance_x_access") var/purchase_cost = 5 - if(purchase_cost <= chemical_data.rsc_credits) - chemical_data.clearance_x_access = TRUE - chemical_data.reached_x_access = TRUE - chemical_data.update_credits(purchase_cost * -1) + if(purchase_cost <= GLOB.chemical_data.rsc_credits) + GLOB.chemical_data.clearance_x_access = TRUE + GLOB.chemical_data.reached_x_access = TRUE + GLOB.chemical_data.update_credits(purchase_cost * -1) visible_message(SPAN_NOTICE("Clearance Level X Acquired.")) playsound(loc, pick('sound/machines/computer_typing1.ogg','sound/machines/computer_typing2.ogg','sound/machines/computer_typing3.ogg'), 5, 1) - diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 857118937910..8090f802b1d0 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -363,7 +363,7 @@ What a mess.*/ var/t1 = copytext(trim(strip_html(input("Your name and time will be added to this new comment.", "Add a comment", null, null) as message)),1,MAX_MESSAGE_LEN) if((!t1 || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!ishighersilicon(usr))) || active2 != a2)) return - var/created_at = text("[]  []  []", time2text(world.realtime, "MMM DD"), time2text(world.time, "[worldtime2text()]:ss"), game_year) + var/created_at = text("[]  []  []", time2text(world.realtime, "MMM DD"), time2text(world.time, "[worldtime2text()]:ss"), GLOB.game_year) var/new_comment = list("entry" = t1, "created_by" = list("name" = "", "rank" = ""), "deleted_by" = null, "deleted_at" = null, "created_at" = created_at) if(istype(usr,/mob/living/carbon/human)) var/mob/living/carbon/human/U = usr @@ -391,7 +391,7 @@ What a mess.*/ var/mob/living/silicon/robot/U = usr deleter = "[U.name] ([U.modtype] [U.braintype])" updated_comments[href_list["del_c"]]["deleted_by"] = deleter - updated_comments[href_list["del_c"]]["deleted_at"] = text("[]  []  []", time2text(world.realtime, "MMM DD"), time2text(world.time, "[worldtime2text()]:ss"), game_year) + updated_comments[href_list["del_c"]]["deleted_at"] = text("[]  []  []", time2text(world.realtime, "MMM DD"), time2text(world.time, "[worldtime2text()]:ss"), GLOB.game_year) active2.fields["comments"] = updated_comments to_chat(usr, text("You have deleted a comment from the Security Record of [].", active2.fields["name"])) //RECORD CREATE @@ -524,15 +524,15 @@ What a mess.*/ return selection.fields["img"] /obj/structure/machinery/computer/secure_data/emp_act(severity) + . = ..() if(inoperable()) - ..(severity) return for(var/datum/data/record/R in GLOB.data_core.security) if(prob(10/severity)) switch(rand(1,6)) if(1) - R.fields["name"] = "[pick(pick(first_names_male), pick(first_names_female))] [pick(last_names)]" + R.fields["name"] = "[pick(pick(GLOB.first_names_male), pick(GLOB.first_names_female))] [pick(GLOB.last_names)]" if(2) R.fields["sex"] = pick("Male", "Female") if(3) @@ -550,8 +550,6 @@ What a mess.*/ qdel(R) continue - ..(severity) - /obj/structure/machinery/computer/secure_data/detective_computer icon = 'icons/obj/structures/machinery/computer.dmi' icon_state = "messyfiles" diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm index a20d344b53a9..6e35d147ff38 100644 --- a/code/game/machinery/computer/skills.dm +++ b/code/game/machinery/computer/skills.dm @@ -347,15 +347,15 @@ What a mess.*/ return /obj/structure/machinery/computer/skills/emp_act(severity) + . = ..() if(inoperable()) - ..(severity) return for(var/datum/data/record/R in GLOB.data_core.security) if(prob(10/severity)) switch(rand(1,6)) if(1) - R.fields["name"] = "[pick(pick(first_names_male), pick(first_names_female))] [pick(last_names)]" + R.fields["name"] = "[pick(pick(GLOB.first_names_male), pick(GLOB.first_names_female))] [pick(GLOB.last_names)]" if(2) R.fields["sex"] = pick("Male", "Female") if(3) @@ -373,4 +373,3 @@ What a mess.*/ qdel(R) continue - ..(severity) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 86bb5f79a035..58935702cb7b 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -343,13 +343,13 @@ GLOBAL_LIST_INIT(frozen_items, list(SQUAD_MARINE_1 = list(), SQUAD_MARINE_2 = li if(SKILL_SPEC_SNIPER) set_name = "Sniper Set" - if(set_name && !available_specialist_sets.Find(set_name)) - available_specialist_sets += set_name + if(set_name && !GLOB.available_specialist_sets.Find(set_name)) + GLOB.available_specialist_sets += set_name SSticker.mode.latejoin_tally-- //Cryoing someone out removes someone from the Marines, blocking further larva spawns until accounted for //Handle job slot/tater cleanup. - RoleAuthority.free_role(GET_MAPPED_ROLE(occupant.job), TRUE) + GLOB.RoleAuthority.free_role(GET_MAPPED_ROLE(occupant.job), TRUE) var/occupant_ref = WEAKREF(occupant) //Delete them from datacore. diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 99996bea8978..687882d9d7ae 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -65,6 +65,7 @@ return /obj/structure/machinery/deployable/barrier/emp_act(severity) + . = ..() if(inoperable()) return if(prob(50/severity)) diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm index 8b73588f1d0b..030e732ea75f 100644 --- a/code/game/machinery/door_control.dm +++ b/code/game/machinery/door_control.dm @@ -64,7 +64,7 @@ if(is_mainship_level(z)) // on the almayer return - shuttle.control_doors("lock", "all", force=FALSE) + shuttle.control_doors("force-lock", "all", force=FALSE) /obj/structure/machinery/door_control/proc/handle_door() for(var/obj/structure/machinery/door/airlock/D in range(range)) @@ -95,7 +95,7 @@ D.safe = 1 /obj/structure/machinery/door_control/proc/handle_pod() - for(var/obj/structure/machinery/door/poddoor/M in machines) + for(var/obj/structure/machinery/door/poddoor/M in GLOB.machines) if(M.id == id) if(M.density) INVOKE_ASYNC(M, TYPE_PROC_REF(/obj/structure/machinery/door, open)) @@ -187,7 +187,7 @@ add_fingerprint(user) var/effective = 0 - for(var/obj/structure/machinery/door/poddoor/M in machines) + for(var/obj/structure/machinery/door/poddoor/M in GLOB.machines) if(M.id == id) effective = 1 spawn() diff --git a/code/game/machinery/door_display/door_display.dm b/code/game/machinery/door_display/door_display.dm index 7462b1f1b74d..3f0c53ada18e 100644 --- a/code/game/machinery/door_display/door_display.dm +++ b/code/game/machinery/door_display/door_display.dm @@ -31,7 +31,7 @@ get_targets() /obj/structure/machinery/door_display/proc/get_targets() - for(var/obj/structure/machinery/door/D in machines) + for(var/obj/structure/machinery/door/D in GLOB.machines) if (D.id == id) targets += D @@ -199,7 +199,7 @@ /obj/structure/machinery/door_display/research_cell/get_targets() ..() - for(var/obj/structure/machinery/flasher/F in machines) + for(var/obj/structure/machinery/flasher/F in GLOB.machines) if(F.id == id) targets += F if(has_wall_divider) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index df032301ee45..332d9b96bd44 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -557,7 +557,7 @@ GLOBAL_LIST_INIT(airlock_wire_descriptions, list( if(istype(attacking_item, /obj/item/clothing/mask/cigarette)) if(isElectrified()) var/obj/item/clothing/mask/cigarette/L = attacking_item - L.light(SPAN_NOTICE("[user] lights their [L] on an electrical arc from the [src]")) + L.light(SPAN_NOTICE("[user] lights their [L] on an electrical arc from [src]")) return if(!isRemoteControlling(user)) @@ -568,7 +568,7 @@ GLOBAL_LIST_INIT(airlock_wire_descriptions, list( add_fingerprint(user) if(istype(attacking_item, /obj/item/weapon/zombie_claws) && (welded || locked)) - user.visible_message(SPAN_NOTICE("[user] starts tearing into the door on the [src]!"), \ + user.visible_message(SPAN_NOTICE("[user] starts tearing into the door on [src]!"), \ SPAN_NOTICE("You start prying your hand into the gaps of the door with your fingers... This will take about 30 seconds."), \ SPAN_NOTICE("You hear tearing noises!")) @@ -817,7 +817,7 @@ GLOBAL_LIST_INIT(airlock_wire_descriptions, list( /obj/structure/machinery/door/airlock/LateInitialize() . = ..() if(closeOtherId != null) - for(var/obj/structure/machinery/door/airlock/A in machines) + for(var/obj/structure/machinery/door/airlock/A in GLOB.machines) if(A.closeOtherId == closeOtherId && A != src) closeOther = A break @@ -833,7 +833,7 @@ GLOBAL_LIST_INIT(airlock_wire_descriptions, list( return /obj/structure/machinery/door/airlock/allowed(mob/M) - if(isWireCut(AIRLOCK_WIRE_IDSCAN) || (maint_all_access && check_access_list(list(ACCESS_MARINE_MAINT)))) + if(isWireCut(AIRLOCK_WIRE_IDSCAN) || (GLOB.maint_all_access && check_access_list(list(ACCESS_MARINE_MAINT)))) return TRUE return ..(M) @@ -845,7 +845,7 @@ GLOBAL_LIST_INIT(airlock_wire_descriptions, list( for(var/i in resin_door_shmushereds) if(istype(x,i)) //I would like to just use a if(locate() in ) here but Im not gonna add every child to GLOB.resin_door_shmushereds so it works playsound(loc, "alien_resin_break", 25) - visible_message(SPAN_WARNING("The [src.name] closes on the [x], shmushing it!")) + visible_message(SPAN_WARNING("The [src.name] closes on [x], shmushing it!")) if(isturf(x)) var/turf/closed/wall/resin_wall_to_destroy = x resin_wall_to_destroy.dismantle_wall() @@ -858,7 +858,8 @@ GLOBAL_LIST_INIT(airlock_wire_descriptions, list( var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread sparks.set_up(5, 1, src) sparks.start() - xeno.apply_effect(1, WEAKEN) + xeno.KnockDown(1) + xeno.Stun(1) playsound(src, 'sound/effects/metalhit.ogg', 50, TRUE) xeno.visible_message(SPAN_XENOWARNING("\The [xeno] strikes \the [src] with its tail!"), SPAN_XENOWARNING("You strike \the [src] with your tail!")) @@ -866,3 +867,8 @@ GLOBAL_LIST_INIT(airlock_wire_descriptions, list( var/damage = xeno.melee_damage_upper * TAILSTAB_AIRLOCK_DAMAGE_MULTIPLIER take_damage(damage, xeno) return TAILSTAB_COOLDOWN_NORMAL + +/obj/structure/machinery/door/airlock/autoclose() + if(locked) + return + ..() diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index f4d09796194c..feb699fd245e 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -138,7 +138,6 @@ opacity = 0 assembly_type = /obj/structure/airlock_assembly/airlock_assembly_research glass = 1 - heat_proof = 1 req_one_access = list(ACCESS_CIVILIAN_RESEARCH, ACCESS_CIVILIAN_COMMAND, ACCESS_WY_COLONIAL) /obj/structure/machinery/door/airlock/glass_mining/colony diff --git a/code/game/machinery/doors/brig_system.dm b/code/game/machinery/doors/brig_system.dm index 58c3282abed4..56cc55828171 100644 --- a/code/game/machinery/doors/brig_system.dm +++ b/code/game/machinery/doors/brig_system.dm @@ -290,15 +290,15 @@ addtimer(CALLBACK(src, PROC_REF(search_for_components)), 20) /obj/structure/machinery/brig_cell/proc/search_for_components() - for(var/obj/structure/machinery/door/window/brigdoor/M in machines) + for(var/obj/structure/machinery/door/window/brigdoor/M in GLOB.machines) if(M.id == id) targets += M - for(var/obj/structure/machinery/flasher/F in machines) + for(var/obj/structure/machinery/flasher/F in GLOB.machines) if(F.id == id) targets += F - for(var/obj/structure/machinery/door/poddoor/almayer/locked/P in machines) + for(var/obj/structure/machinery/door/poddoor/almayer/locked/P in GLOB.machines) if(P.id == id) targets += P diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 578ef368f5d9..021cb60769f9 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -1,4 +1,3 @@ - /obj/structure/machinery/door name = "\improper Door" desc = "It opens and closes." @@ -7,50 +6,43 @@ anchored = TRUE opacity = TRUE density = TRUE - throwpass = 0 + throwpass = FALSE layer = DOOR_OPEN_LAYER minimap_color = MINIMAP_DOOR var/open_layer = DOOR_OPEN_LAYER var/closed_layer = DOOR_CLOSED_LAYER var/id = "" + var/width = 1 var/secondsElectrified = 0 - var/visible = 1 + var/visible = TRUE var/panel_open = FALSE - var/operating = 0 - var/autoclose = 0 - var/glass = 0 - var/normalspeed = 1 - var/openspeed = 10 //How many seconds does it take to open it? Default 1 second. Use only if you have long door opening animations - var/heat_proof = 0 // For glass airlocks/opacity firedoors - var/air_properties_vary_with_direction = 0 - var/turf/filler //Fixes double door opacity issue + var/operating = FALSE + var/autoclose = FALSE + var/glass = FALSE + /// If FALSE it speeds up the autoclosing timing. + var/normalspeed = TRUE + /// Time to open/close airlock, default is 1 second. + var/openspeed = 1 SECONDS + /// Fixes multi_tile doors opacity issues. + var/list/filler_turfs = list() //Previously this was just var, because no one had forseen someone creating doors more than 2 tiles wide /// Stops it being forced open through normal means (Hunters/Zombies/Aliens). var/heavy = FALSE /// Resistance to masterkey var/masterkey_resist = FALSE var/masterkey_mod = 0.1 - - - //Multi-tile doors - dir = EAST - var/width = 1 + dir = EAST //So multitile doors are directioned properly /obj/structure/machinery/door/Initialize(mapload, ...) . = ..() - if(density) - layer = closed_layer - update_flags_heat_protection(get_turf(src)) - else - layer = open_layer - + layer = density ? closed_layer : open_layer handle_multidoor() /obj/structure/machinery/door/Destroy() . = ..() - if(filler && width > 1) - filler.set_opacity(0)// Ehh... let's hope there are no walls there. Must fix this - filler = null + if(length(filler_turfs) && width > 1) + change_filler_opacity(0) // It still doesn't check for walls, might want to add checking that in the future + filler_turfs = null density = FALSE /obj/structure/machinery/door/initialize_pass_flags(datum/pass_flags_container/PF) @@ -58,21 +50,41 @@ if (PF) PF.flags_can_pass_all = NONE +/// Also refreshes filler_turfs list. +/obj/structure/machinery/door/proc/change_filler_opacity(new_opacity) + // I have no idea why do we null opacity first before... changing it + for(var/turf/filler_turf as anything in filler_turfs) + filler_turf.set_opacity(null) + + filler_turfs = list() + for(var/turf/filler as anything in locate_filler_turfs()) + filler.set_opacity(new_opacity) + filler_turfs += filler + +/// Updates collision box and opacity of multi_tile airlocks. /obj/structure/machinery/door/proc/handle_multidoor() if(width > 1) if(dir in list(EAST, WEST)) bound_width = width * world.icon_size bound_height = world.icon_size - filler = get_step(src,EAST) - filler.set_opacity(opacity) else bound_width = world.icon_size bound_height = width * world.icon_size - filler = get_step(src,NORTH) - filler.set_opacity(opacity) + change_filler_opacity(opacity) + +/// Finds turfs which should be filler ones. +/obj/structure/machinery/door/proc/locate_filler_turfs() + var/turf/filler_temp + var/list/located_turfs = list() -//process() - //return + for(var/i in 1 to width - 1) + if (dir in list(EAST, WEST)) + filler_temp = locate(x + i, y, z) + else + filler_temp = locate(x, y + i, z) + if (filler_temp) + located_turfs += filler_temp + return located_turfs /obj/structure/machinery/door/proc/borders_space() for(var/turf/target in range(1, src)) @@ -81,7 +93,8 @@ return FALSE /obj/structure/machinery/door/Collided(atom/movable/AM) - if(panel_open || operating) return + if(panel_open || operating) + return if(ismob(AM)) var/mob/M = AM if(world.time - M.last_bumped <= openspeed) return //Can bump-open one airlock per second. This is to prevent shock spam. @@ -89,12 +102,10 @@ if(!M.is_mob_restrained() && M.mob_size > MOB_SIZE_SMALL) bumpopen(M) return - if(istype(AM, /obj)) var/obj/O = AM if(O.buckled_mob) Collided(O.buckled_mob) - if(istype(AM, /obj/structure/machinery/bot)) var/obj/structure/machinery/bot/bot = AM if(src.check_access(bot.botcard)) @@ -102,16 +113,17 @@ open() return - /obj/structure/machinery/door/proc/bumpopen(mob/user as mob) - if(operating) return - src.add_fingerprint(user) - if(!src.requiresID()) + if(operating) + return + add_fingerprint(user) + if(!requiresID()) user = null - if(density) - if(allowed(user)) open() - else flick("door_deny", src) + if(allowed(user)) + open() + else + flick("door_deny", src) return /obj/structure/machinery/door/attack_remote(mob/user) @@ -124,9 +136,7 @@ add_fingerprint(user) if(operating) return - if(!Adjacent(user)) - user = null //so allowed(user) always succeeds - if(!requiresID()) + if(!Adjacent(user) || !requiresID()) user = null //so allowed(user) always succeeds if(allowed(user)) if(density) @@ -137,64 +147,56 @@ if(density) flick("door_deny", src) - /obj/structure/machinery/door/attackby(obj/item/I, mob/user) if(!(I.flags_item & NOBLUDGEON)) try_to_activate_door(user) - return 1 + return TRUE /obj/structure/machinery/door/emp_act(severity) - if(prob(20/severity) && (istype(src,/obj/structure/machinery/door/airlock) || istype(src,/obj/structure/machinery/door/window)) ) + . = ..() + if(prob(20/severity) && use_power) open() if(prob(40/severity)) if(secondsElectrified == 0) secondsElectrified = -1 spawn(30 SECONDS) secondsElectrified = 0 - ..() - /obj/structure/machinery/door/ex_act(severity) - if(unacidable) return + if(unacidable) + return if(density) switch(severity) if(0 to EXPLOSION_THRESHOLD_LOW) if(prob(80)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(2, 1, src) - s.start() + var/datum/effect_system/spark_spread/spark = new /datum/effect_system/spark_spread + spark.set_up(2, 1, src) + spark.start() if(EXPLOSION_THRESHOLD_LOW to INFINITY) qdel(src) else switch(severity) if(0 to EXPLOSION_THRESHOLD_MEDIUM) if(prob(80)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(2, 1, src) - s.start() + var/datum/effect_system/spark_spread/spark = new /datum/effect_system/spark_spread + spark.set_up(2, 1, src) + spark.start() else qdel(src) return - /obj/structure/machinery/door/get_explosion_resistance() if(density) if(unacidable) - return 1000000 + return 1000000 //Used for negation of explosions, should probably be made into define in the future else return EXPLOSION_THRESHOLD_LOW //this should exactly match the amount of damage needed to destroy the door else return 0 - /obj/structure/machinery/door/update_icon() - if(density) - icon_state = "door1" - else - icon_state = "door0" - return - + icon_state = density ? "door1" : "door0" /obj/structure/machinery/door/proc/do_animate(animation) switch(animation) @@ -212,7 +214,6 @@ flick("door_deny", src) return - /obj/structure/machinery/door/proc/open(forced=0) if(!density) return TRUE @@ -223,8 +224,8 @@ do_animate("opening") icon_state = "door0" set_opacity(FALSE) - if(filler) - filler.set_opacity(opacity) + if(length(filler_turfs)) + change_filler_opacity(opacity) addtimer(CALLBACK(src, PROC_REF(finish_open)), openspeed) return TRUE @@ -235,11 +236,9 @@ if(operating) operating = FALSE - if(autoclose) addtimer(CALLBACK(src, PROC_REF(autoclose)), normalspeed ? 150 + openspeed : 5) - /obj/structure/machinery/door/proc/close() if(density) return TRUE @@ -256,22 +255,19 @@ update_icon() if(visible && !glass) set_opacity(TRUE) - if(filler) - filler.set_opacity(opacity) + if(length(filler_turfs)) + change_filler_opacity(opacity) operating = FALSE /obj/structure/machinery/door/proc/requiresID() return TRUE - -/obj/structure/machinery/door/proc/update_flags_heat_protection(turf/source) - - +/// Used for overriding in airlocks /obj/structure/machinery/door/proc/autoclose() - var/obj/structure/machinery/door/airlock/A = src - if(!A.density && !A.operating && !A.locked && !A.welded && A.autoclose) + if(!autoclose) + return + if(!density && !operating) close() - return /obj/structure/machinery/door/Move(new_loc, new_dir) . = ..() @@ -279,16 +275,15 @@ if(dir in list(EAST, WEST)) bound_width = width * world.icon_size bound_height = world.icon_size - filler.set_opacity(0) - filler = (get_step(src,EAST)) //Find new turf - filler.set_opacity(opacity) else bound_width = world.icon_size bound_height = width * world.icon_size - filler.set_opacity(0) - filler = (get_step(src,NORTH)) //Find new turf - filler.set_opacity(opacity) + change_filler_opacity(opacity) +/obj/structure/machinery/door/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) + . = ..() + // Yes, for a split second after departure you can see through rear dropship airlocks, but it's the simplest solution I could've think of + handle_multidoor() /obj/structure/machinery/door/morgue icon = 'icons/obj/structures/doors/doormorgue.dmi' diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index d236b9616620..cddd67c7e2b2 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -1,7 +1,4 @@ // Door open and close constants -/var/const - CLOSED = 2 - #define FIREDOOR_MAX_PRESSURE_DIFF 25 // kPa #define FIREDOOR_MAX_TEMP 50 // °C #define FIREDOOR_MIN_TEMP 0 @@ -57,7 +54,7 @@ A.all_doors.Add(src) areas_added = list(A) - for(var/direction in cardinal) + for(var/direction in GLOB.cardinals) A = get_area(get_step(src,direction)) if(istype(A) && !(A in areas_added)) A.all_doors.Add(src) @@ -277,7 +274,7 @@ overlays += "palert" if(dir_alerts) for(var/d=1;d<=4;d++) - var/cdir = cardinal[d] + var/cdir = GLOB.cardinals[d] for(var/i=1;i<=ALERT_STATES.len;i++) if(dir_alerts[d] & (1<<(i-1))) overlays += new/icon(icon,"alert_[ALERT_STATES[i]]", dir=cdir) diff --git a/code/game/machinery/doors/multi_tile.dm b/code/game/machinery/doors/multi_tile.dm index 65ecd67a438e..0a179af27803 100644 --- a/code/game/machinery/doors/multi_tile.dm +++ b/code/game/machinery/doors/multi_tile.dm @@ -13,7 +13,6 @@ /obj/structure/machinery/door/airlock/multi_tile/Initialize() . = ..() - handle_multidoor() update_icon() /obj/structure/machinery/door/airlock/multi_tile/glass @@ -137,7 +136,6 @@ /obj/structure/window/framed/almayer, /obj/structure/machinery/door/airlock, ) - var/multi_filler = list() /obj/structure/machinery/door/airlock/multi_tile/almayer/Initialize() . = ..() @@ -233,42 +231,6 @@ req_access = null req_one_access = list(ACCESS_CIVILIAN_BRIG, ACCESS_CIVILIAN_COMMAND, ACCESS_WY_COLONIAL) -/obj/structure/machinery/door/airlock/multi_tile/almayer/handle_multidoor() - . = ..() - if(!(width > 1)) return //Bubblewrap - - update_filler_turfs() - -//We have to find these again since these doors are used on shuttles a lot so the turfs changes -/obj/structure/machinery/door/airlock/multi_tile/almayer/proc/update_filler_turfs() - for(var/turf/T in multi_filler) - T.set_opacity(null) - - multi_filler = list() - for(var/turf/T in get_filler_turfs()) - T.set_opacity(opacity) - multi_filler += list(T) - -/obj/structure/machinery/door/airlock/multi_tile/proc/get_filler_turfs() - . = list() - for(var/i = 1, i < width, i++) - if(dir in list(NORTH, SOUTH)) - var/turf/T = locate(x, y + i, z) - if(T) - . += list(T) - else if(dir in list(EAST, WEST)) - var/turf/T = locate(x + i, y, z) - if(T) - . += list(T) - -/obj/structure/machinery/door/airlock/multi_tile/almayer/open() - . = ..() - update_filler_turfs() - -/obj/structure/machinery/door/airlock/multi_tile/almayer/close() - . = ..() - update_filler_turfs() - //------Dropship Cargo Doors -----// /obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear @@ -313,6 +275,17 @@ name = "\improper Normandy cargo door" icon = 'icons/obj/structures/doors/dropship2_cargo.dmi' +/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside + width = 2 + +/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds1 + name = "\improper Alamo crew hatch" + icon = 'icons/obj/structures/doors/dropship1_side2.dmi' + +/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds2 + name = "\improper Normandy crew hatch" + icon = 'icons/obj/structures/doors/dropship2_side2.dmi' + /obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/blastdoor name = "bulkhead blast door" icon = 'icons/obj/structures/doors/almayerblastdoor.dmi' diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index b2d836ee476f..0a3b873ce385 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -240,6 +240,7 @@ /obj/structure/machinery/door/poddoor/filler_object name = "" + icon = null icon_state = "" unslashable = TRUE unacidable = TRUE diff --git a/code/game/machinery/doors/runed_sandstone.dm b/code/game/machinery/doors/runed_sandstone.dm index 4bf66dfdc8d8..a6de7348dd7f 100644 --- a/code/game/machinery/doors/runed_sandstone.dm +++ b/code/game/machinery/doors/runed_sandstone.dm @@ -110,8 +110,8 @@ density = FALSE update_icon() set_opacity(0) - if(filler) - filler.set_opacity(opacity) + if(length(filler_turfs)) + change_filler_opacity(opacity) if(operating) operating = FALSE diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 2b57fbd0a44d..bd544c5c3f5a 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -11,7 +11,6 @@ flags_atom = ON_BORDER opacity = FALSE var/obj/item/circuitboard/airlock/electronics = null - air_properties_vary_with_direction = 1 /obj/structure/machinery/door/window/Initialize() . = ..() diff --git a/code/game/machinery/fax_machine.dm b/code/game/machinery/fax_machine.dm index 87398700691d..4a5c62b1f9a0 100644 --- a/code/game/machinery/fax_machine.dm +++ b/code/game/machinery/fax_machine.dm @@ -1,11 +1,12 @@ -var/list/obj/structure/machinery/faxmachine/allfaxes = list() -var/list/alldepartments = list() +GLOBAL_LIST_INIT_TYPED(allfaxes, /obj/structure/machinery/faxmachine, list()) +GLOBAL_LIST_EMPTY(alldepartments) #define DEPARTMENT_WY "Weyland-Yutani" #define DEPARTMENT_HC "USCM High Command" #define DEPARTMENT_CMB "CMB Incident Command Center, Local Operations" #define DEPARTMENT_PROVOST "USCM Provost Office" #define DEPARTMENT_PRESS "Various Press Organizations" +#define HIGHCOM_DEPARTMENTS list(DEPARTMENT_WY, DEPARTMENT_HC, DEPARTMENT_CMB, DEPARTMENT_PROVOST, DEPARTMENT_PRESS) /obj/structure/machinery/faxmachine // why not fax_machine? name = "\improper General Purpose Fax Machine" @@ -44,11 +45,11 @@ var/list/alldepartments = list() /obj/structure/machinery/faxmachine/Initialize(mapload, ...) . = ..() - allfaxes += src + GLOB.allfaxes += src update_departments() /obj/structure/machinery/faxmachine/Destroy() - allfaxes -= src + GLOB.allfaxes -= src . = ..() /obj/structure/machinery/faxmachine/initialize_pass_flags(datum/pass_flags_container/PF) @@ -125,18 +126,18 @@ var/list/alldepartments = list() return /obj/structure/machinery/faxmachine/proc/update_departments() - if( !("[department]" in alldepartments) ) //Initialize departments. This will work with multiple fax machines. - alldepartments += department - if(!(DEPARTMENT_WY in alldepartments)) - alldepartments += DEPARTMENT_WY - if(!(DEPARTMENT_HC in alldepartments)) - alldepartments += DEPARTMENT_HC - if(!(DEPARTMENT_PROVOST in alldepartments)) - alldepartments += DEPARTMENT_PROVOST - if(!(DEPARTMENT_CMB in alldepartments)) - alldepartments += DEPARTMENT_CMB - if(!(DEPARTMENT_PRESS in alldepartments)) - alldepartments += DEPARTMENT_PRESS + if( !("[department]" in GLOB.alldepartments) ) //Initialize departments. This will work with multiple fax machines. + GLOB.alldepartments += department + if(!(DEPARTMENT_WY in GLOB.alldepartments)) + GLOB.alldepartments += DEPARTMENT_WY + if(!(DEPARTMENT_HC in GLOB.alldepartments)) + GLOB.alldepartments += DEPARTMENT_HC + if(!(DEPARTMENT_PROVOST in GLOB.alldepartments)) + GLOB.alldepartments += DEPARTMENT_PROVOST + if(!(DEPARTMENT_CMB in GLOB.alldepartments)) + GLOB.alldepartments += DEPARTMENT_CMB + if(!(DEPARTMENT_PRESS in GLOB.alldepartments)) + GLOB.alldepartments += DEPARTMENT_PRESS // TGUI SHIT \\ /obj/structure/machinery/faxmachine/tgui_interact(mob/user, datum/tgui/ui) @@ -255,7 +256,7 @@ var/list/alldepartments = list() if("select") var/last_target_department = target_department - target_department = tgui_input_list(ui.user, "Which department?", "Choose a department", alldepartments) + target_department = tgui_input_list(ui.user, "Which department?", "Choose a department", GLOB.alldepartments) if(!target_department) target_department = last_target_department . = TRUE @@ -320,10 +321,14 @@ var/list/alldepartments = list() GLOB.fax_contents += faxcontents + var/scan_department = target_department + if(department in HIGHCOM_DEPARTMENTS) + scan_department = department + var/msg_admin = SPAN_STAFF_IC("[target_department]: [key_name(user, 1)] ") msg_admin += "[CC_MARK(user)] [ADMIN_PP(user)] [ADMIN_VV(user)] [ADMIN_SM(user)] [ADMIN_JMP_USER(user)] " - switch(target_department) + switch(scan_department) if(DEPARTMENT_HC) GLOB.USCMFaxes.Add("\['[original_fax.name]' from [key_name(usr)], [scan] at [time2text(world.timeofday, "hh:mm:ss")]\] REPLY") msg_admin += "(RPLY): " @@ -375,7 +380,7 @@ var/list/alldepartments = list() /obj/structure/machinery/faxmachine/proc/send_fax(datum/fax/faxcontents) - for(var/obj/structure/machinery/faxmachine/F in allfaxes) + for(var/obj/structure/machinery/faxmachine/F in GLOB.allfaxes) if(F != src && F.department == target_department) if(!faxcontents) return diff --git a/code/game/machinery/fire_alarm.dm b/code/game/machinery/fire_alarm.dm index fe1f80646c4f..55aef1323c4d 100644 --- a/code/game/machinery/fire_alarm.dm +++ b/code/game/machinery/fire_alarm.dm @@ -47,7 +47,7 @@ FIRE ALARM if(stat & BROKEN) icon_state = "firex" - else if(stat & NOPOWER & (security_level != SEC_LEVEL_RED)) + else if(stat & NOPOWER & (GLOB.security_level != SEC_LEVEL_RED)) icon_state = "firep" /obj/structure/machinery/firealarm/fire_act(temperature, volume) @@ -63,8 +63,9 @@ FIRE ALARM return src.alarm() /obj/structure/machinery/firealarm/emp_act(severity) - if(prob(50/severity)) alarm() - ..() + . = ..() + if(prob(50/severity)) + alarm() /obj/structure/machinery/firealarm/attackby(obj/item/held_object as obj, mob/user as mob) src.add_fingerprint(user) @@ -182,7 +183,7 @@ FIRE ALARM pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0 if(!is_mainship_level(z)) - if(security_level) + if(GLOB.security_level) src.overlays += image('icons/obj/structures/machinery/monitors.dmi', "overlay_[get_security_level()]") else src.overlays += image('icons/obj/structures/machinery/monitors.dmi', "overlay_green") diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 75d0de56dec0..437ef7b067ea 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -60,7 +60,7 @@ src.last_flash = world.time use_power(1500) - for (var/mob/O in viewers(src, null)) + for (var/mob/living/O in viewers(src, null)) if (get_dist(src, O) > src.range) continue @@ -72,7 +72,9 @@ if (istype(O, /mob/living/carbon/xenomorph))//So aliens don't get flashed (they have no external eyes)/N continue - O.apply_effect(strength, WEAKEN) + O.KnockDown(strength) + O.Stun(strength) + if (istype(O, /mob/living/carbon/human)) var/mob/living/carbon/human/H = O var/datum/internal_organ/eyes/E = H.internal_organs_by_name["eyes"] @@ -84,12 +86,11 @@ /obj/structure/machinery/flasher/emp_act(severity) + . = ..() if(inoperable()) - ..(severity) return if(prob(75/severity)) flash() - ..(severity) /obj/structure/machinery/flasher/portable/HasProximity(atom/movable/AM as mob|obj) if ((src.disable) || (src.last_flash && world.time < src.last_flash + 150)) @@ -134,7 +135,7 @@ active = 1 icon_state = "launcheract" - for(var/obj/structure/machinery/flasher/M in machines) + for(var/obj/structure/machinery/flasher/M in GLOB.machines) if(M.id == src.id) INVOKE_ASYNC(M, TYPE_PROC_REF(/obj/structure/machinery/flasher, flash)) diff --git a/code/game/machinery/fusion_engine.dm b/code/game/machinery/fusion_engine.dm index 8e3097ef52d1..d7c7cc4c7d18 100644 --- a/code/game/machinery/fusion_engine.dm +++ b/code/game/machinery/fusion_engine.dm @@ -156,13 +156,13 @@ /obj/structure/machinery/power/fusion_engine/attackby(obj/item/O, mob/user) if(istype(O, /obj/item/fuelCell)) if(is_on) - to_chat(user, SPAN_WARNING("The [src] needs to be turned off first.")) + to_chat(user, SPAN_WARNING("[src] needs to be turned off first.")) return TRUE if(!fusion_cell) if(user.drop_inv_item_to_loc(O, src)) fusion_cell = O update_icon() - to_chat(user, SPAN_NOTICE("You load the [src] with the [O].")) + to_chat(user, SPAN_NOTICE("You load [src] with [O].")) return TRUE else to_chat(user, SPAN_WARNING("You need to remove the fuel cell from [src] first.")) diff --git a/code/game/machinery/groundmap_geothermal.dm b/code/game/machinery/groundmap_geothermal.dm index 808c717e8891..087facdbf5ee 100644 --- a/code/game/machinery/groundmap_geothermal.dm +++ b/code/game/machinery/groundmap_geothermal.dm @@ -223,7 +223,7 @@ /obj/structure/machinery/colony_floodlight_switch/LateInitialize() . = ..() - for(var/obj/structure/machinery/colony_floodlight/F in machines) + for(var/obj/structure/machinery/colony_floodlight/F in GLOB.machines) floodlist += F F.fswitch = src start_processing() diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 2f8f113ddd23..9ce3cb89bf79 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -59,12 +59,6 @@ Possible to do for anyone motivated enough: Itegrate EMP effect to disable the unit. */ - -// HOLOPAD MODE -// 0 = RANGE BASED -// 1 = AREA BASED -var/const/HOLOPAD_MODE = 0 - /obj/structure/machinery/hologram/holopad name = "\improper AI holopad" desc = "It's a floor-mounted device for projecting holographic images. It is activated remotely." @@ -167,17 +161,9 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ if(hologram)//If there is a hologram. if(master && !master.stat && master.client && master.eyeobj)//If there is an AI attached, it's not incapacitated, it has a client, and the client eye is centered on the projector. if(!(stat & NOPOWER))//If the machine has power. - if((HOLOPAD_MODE == 0 && (get_dist(master.eyeobj, src) <= holo_range))) + if(get_dist(master.eyeobj, src) <= holo_range) return 1 - else if (HOLOPAD_MODE == 1) - - var/area/holo_area = get_area(src) - var/area/eye_area = get_area(master.eyeobj) - - if(eye_area == holo_area) - return 1 - clear_holo()//If not, we want to get rid of the hologram. return 1 diff --git a/code/game/machinery/holosign.dm b/code/game/machinery/holosign.dm index 2d4182772cf3..41c63d465918 100644 --- a/code/game/machinery/holosign.dm +++ b/code/game/machinery/holosign.dm @@ -63,7 +63,7 @@ else icon_state = "light0" - for(var/obj/structure/machinery/holosign/M in machines) + for(var/obj/structure/machinery/holosign/M in GLOB.machines) if (M.id == src.id) INVOKE_ASYNC(M, TYPE_PROC_REF(/obj/structure/machinery/holosign, toggle)) diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 33f75c50e341..6109833004d6 100644 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -105,11 +105,10 @@ return 1 /obj/structure/machinery/sparker/emp_act(severity) + . = ..() if(inoperable()) - ..(severity) return ignite() - ..(severity) /obj/structure/machinery/ignition_switch/attack_remote(mob/user as mob) return attack_hand(user) @@ -125,11 +124,11 @@ active = 1 icon_state = "launcheract" - for(var/obj/structure/machinery/sparker/M in machines) + for(var/obj/structure/machinery/sparker/M in GLOB.machines) if (M.id == src.id) INVOKE_ASYNC(M, TYPE_PROC_REF(/obj/structure/machinery/sparker, ignite)) - for(var/obj/structure/machinery/igniter/M in machines) + for(var/obj/structure/machinery/igniter/M in GLOB.machines) if(M.id == src.id) use_power(50) M.on = !( M.on ) diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 4b863bec043d..e16d2cacf63b 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -101,7 +101,7 @@ for(var/datum/reagent/chem in beaker.reagents.reagent_list) reagentnames += ";[chem.name]" - log_admin("[key_name(user)] put a [beaker] into [src], containing [reagentnames] at ([src.loc.x],[src.loc.y],[src.loc.z]).") + log_admin("[key_name(user)] put \a [beaker] into [src], containing [reagentnames] at ([src.loc.x],[src.loc.y],[src.loc.z]).") to_chat(user, "You attach \the [container] to \the [src].") update_beam() diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm index 08a3d5c4dfee..3fa96ca0bc3a 100644 --- a/code/game/machinery/kitchen/gibber.dm +++ b/code/game/machinery/kitchen/gibber.dm @@ -27,7 +27,7 @@ /obj/structure/machinery/gibber/autogibber/New() ..() spawn(5) - for(var/i in cardinal) + for(var/i in GLOB.cardinals) var/obj/structure/machinery/mineral/input/input_obj = locate( /obj/structure/machinery/mineral/input, get_step(loc, i) ) if(input_obj) if(isturf(input_obj.loc)) diff --git a/code/game/machinery/kitchen/processor.dm b/code/game/machinery/kitchen/processor.dm index 0c4b8a973e83..a18f5db8af43 100644 --- a/code/game/machinery/kitchen/processor.dm +++ b/code/game/machinery/kitchen/processor.dm @@ -89,7 +89,7 @@ to_chat(user, SPAN_DANGER("That probably won't blend.")) return 1 user.visible_message("[user] put [what] into [src].", \ - "You put the [what] into [src].") + "You put [what] into [src].") user.drop_held_item() what.forceMove(src) @@ -118,4 +118,3 @@ src.processing = 0 src.visible_message(SPAN_NOTICE("\the [src] finished processing."), \ "You hear the food processor stopping/") - diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm index 903cd06c3119..6d3e18933457 100644 --- a/code/game/machinery/kitchen/smartfridge.dm +++ b/code/game/machinery/kitchen/smartfridge.dm @@ -54,8 +54,8 @@ contents -= item if(item_quants[item.name]) item_quants[item.name] -= item - if(is_in_network() && chemical_data.shared_item_storage[item.name]) - chemical_data.shared_item_storage[item.name] -= item + if(is_in_network() && GLOB.chemical_data.shared_item_storage[item.name]) + GLOB.chemical_data.shared_item_storage[item.name] -= item qdel(item) /obj/structure/machinery/smartfridge/proc/accept_check(obj/item/O as obj) @@ -94,7 +94,7 @@ overlays.Cut() if(panel_open) overlays += image(icon, icon_panel) - nanomanager.update_uis(src) + SSnano.nanomanager.update_uis(src) return if(HAS_TRAIT(O, TRAIT_TOOL_MULTITOOL)||HAS_TRAIT(O, TRAIT_TOOL_WIRECUTTERS)) @@ -157,7 +157,7 @@ /obj/structure/machinery/smartfridge/proc/add_network_item(obj/item/O) if(is_in_network()) - add_item(chemical_data.shared_item_storage, O) + add_item(GLOB.chemical_data.shared_item_storage, O) return TRUE return FALSE @@ -232,9 +232,9 @@ var/list/networked_items = list() if(is_in_network()) - for (var/i=1 to length(chemical_data.shared_item_storage)) - var/item_index = chemical_data.shared_item_storage[i] - var/list/item_list = chemical_data.shared_item_storage[item_index] + for (var/i=1 to length(GLOB.chemical_data.shared_item_storage)) + var/item_index = GLOB.chemical_data.shared_item_storage[i] + var/list/item_list = GLOB.chemical_data.shared_item_storage[item_index] var/count = length(item_list) if(count < 1) continue @@ -295,7 +295,7 @@ var/list/target_list = item_quants if(params["isLocal"] == 0) - target_list = chemical_data.shared_item_storage + target_list = GLOB.chemical_data.shared_item_storage var/item_index = target_list[index] var/list/item_list = target_list[item_index] @@ -328,9 +328,9 @@ var/amount=params["amount"] var/source = item_quants - var/target = chemical_data.shared_item_storage + var/target = GLOB.chemical_data.shared_item_storage if(params["isLocal"] == 0) - source = chemical_data.shared_item_storage + source = GLOB.chemical_data.shared_item_storage target = item_quants var/item_index = source[index] diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 66eb0386713f..de61830c2501 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -62,8 +62,7 @@ updateicon() /obj/structure/machinery/light_switch/emp_act(severity) + . = ..() if(inoperable()) - ..(severity) return power_change() - ..(severity) diff --git a/code/game/machinery/line_nexter.dm b/code/game/machinery/line_nexter.dm index d736df44664a..ae1896ad8138 100644 --- a/code/game/machinery/line_nexter.dm +++ b/code/game/machinery/line_nexter.dm @@ -62,7 +62,7 @@ icon_state = "doorctrl1" add_fingerprint(user) - for(var/obj/structure/machinery/line_nexter/L in machines) + for(var/obj/structure/machinery/line_nexter/L in GLOB.machines) if(id == L.id) L.next() diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 4bb9c55d25d8..c5eaa14e05b5 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -128,15 +128,15 @@ Class Procs: /obj/structure/machinery/Initialize(mapload, ...) . = ..() - machines += src + GLOB.machines += src var/area/A = get_area(src) if(A) A.add_machine(src) //takes care of adding machine's power usage /obj/structure/machinery/Destroy() - machines -= src - processing_machines -= src - power_machines -= src + GLOB.machines -= src + GLOB.processing_machines -= src + GLOB.power_machines -= src var/area/A = get_area(src) if(A) A.remove_machine(src) //takes care of removing machine from power usage @@ -151,15 +151,15 @@ Class Procs: if(!machine_processing) machine_processing = 1 if(power_machine) - addToListNoDupe(power_machines, src) + addToListNoDupe(GLOB.power_machines, src) else - addToListNoDupe(processing_machines, src) + addToListNoDupe(GLOB.processing_machines, src) /obj/structure/machinery/proc/stop_processing() if(machine_processing) machine_processing = 0 - processing_machines -= src - power_machines -= src + GLOB.processing_machines -= src + GLOB.power_machines -= src /obj/structure/machinery/process()//If you dont use process or power why are you here return PROCESS_KILL @@ -175,10 +175,10 @@ Class Procs: . += SPAN_WARNING("[msg]") /obj/structure/machinery/emp_act(severity) + . = ..() if(use_power && stat == 0) use_power(7500/severity) new /obj/effect/overlay/temp/emp_sparks (loc) - ..() /obj/structure/machinery/ex_act(severity) diff --git a/code/game/machinery/medical_pod/bodyscanner.dm b/code/game/machinery/medical_pod/bodyscanner.dm index 16584605a8c5..732ff1ba97b9 100644 --- a/code/game/machinery/medical_pod/bodyscanner.dm +++ b/code/game/machinery/medical_pod/bodyscanner.dm @@ -204,7 +204,7 @@ "toxloss" = H.getToxLoss(), "cloneloss" = H.getCloneLoss(), "brainloss" = H.getBrainLoss(), -// "knocked_out" = H.knocked_out, + "knocked_out" = H.GetKnockOutDuration(), "bodytemp" = H.bodytemperature, "inaprovaline_amount" = H.reagents.get_reagent_amount("inaprovaline"), "dexalin_amount" = H.reagents.get_reagent_amount("dexalin"), @@ -263,7 +263,7 @@ s_class = occ["brainloss"] < 1 ? INTERFACE_GOOD : INTERFACE_BAD dat += "[SET_CLASS("  Approx. Brain Damage:", INTERFACE_PINK)] [SET_CLASS("[occ["brainloss"]]%", s_class)]

" - //dat += "[SET_CLASS("Knocked Out Summary:", "#40628a")] [occ["knocked_out"]]% ([round(occ["knocked_out"] / 4)] seconds left!)
" + dat += "[SET_CLASS("Knocked Out Summary:", "#40628a")] [occ["knocked_out"]]% (approximately [round(occ["knocked_out"] * GLOBAL_STATUS_MULTIPLIER / (1 SECONDS))] seconds left!)
" dat += "[SET_CLASS("Body Temperature:", "#40628a")] [occ["bodytemp"]-T0C]°C ([occ["bodytemp"]*1.8-459.67]°F)

" s_class = occ["blood_amount"] > 448 ? INTERFACE_OKAY : INTERFACE_BAD diff --git a/code/game/machinery/medical_pod/sleeper.dm b/code/game/machinery/medical_pod/sleeper.dm index e6216c9ef0f9..84ef2f579ba1 100644 --- a/code/game/machinery/medical_pod/sleeper.dm +++ b/code/game/machinery/medical_pod/sleeper.dm @@ -164,7 +164,7 @@ var/chemicals[0] for(var/re in connected.available_chemicals) - var/datum/reagent/temp = chemical_reagents_list[re] + var/datum/reagent/temp = GLOB.chemical_reagents_list[re] if(temp) var/reagent_amount = 0 var/pretty_amount @@ -332,14 +332,13 @@ /obj/structure/machinery/medical_pod/sleeper/emp_act(severity) + . = ..() if(filtering) toggle_filter() if(inoperable()) - ..(severity) return if(occupant) go_out() - ..() /obj/structure/machinery/medical_pod/sleeper/proc/toggle_filter() if(!occupant) @@ -366,7 +365,7 @@ if(occupant && occupant.reagents) if(occupant.reagents.get_reagent_amount(chemical) + amount <= max_chem) occupant.reagents.add_reagent(chemical, amount, , , user) - var/datum/reagent/temp = chemical_reagents_list[chemical] + var/datum/reagent/temp = GLOB.chemical_reagents_list[chemical] to_chat(user, SPAN_NOTICE("[occupant] now has [occupant.reagents.get_reagent_amount(chemical)] units of [temp.name] in \his bloodstream.")) return to_chat(user, SPAN_WARNING("There's no occupant in the sleeper or the subject has too many chemicals!")) @@ -391,8 +390,8 @@ to_chat(user, "[]\t -Respiratory Damage %: []", (occupant.getOxyLoss() < 60 ? SPAN_NOTICE("") : SPAN_DANGER("")), occupant.getOxyLoss()) to_chat(user, "[]\t -Toxin Content %: []", (occupant.getToxLoss() < 60 ? SPAN_NOTICE("") : SPAN_DANGER("")), occupant.getToxLoss()) to_chat(user, "[]\t -Burn Severity %: []", (occupant.getFireLoss() < 60 ? SPAN_NOTICE("") : SPAN_DANGER("")), occupant.getFireLoss()) - to_chat(user, SPAN_NOTICE(" Expected time till occupant can safely awake: (note: If health is below 20% these times are inaccurate)")) -// to_chat(user, SPAN_NOTICE(" \t [occupant.knocked_out / 5] second\s (if around 1 or 2 the sleeper is keeping them asleep.)")) + to_chat(user, SPAN_NOTICE(" Expected time till occupant can safely awake: (note: These times are always inaccurate)")) + to_chat(user, SPAN_NOTICE(" \t [occupant.GetKnockOutDuration() * GLOBAL_STATUS_MULTIPLIER / (1 SECONDS)] second\s (if around 1 or 2 the sleeper is keeping them asleep.)")) else to_chat(user, SPAN_NOTICE(" There is no one inside!")) return diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 89c9e9277f4c..9bd7e5f5e965 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -45,10 +45,9 @@ var/list/datum/feed_channel/network_channels = list() var/datum/feed_message/wanted_issue -var/datum/feed_network/news_network = new /datum/feed_network //The global news-network, which is coincidentally a global list. - -var/list/obj/structure/machinery/newscaster/allCasters = list() //Global list that will contain reference to all newscasters in existence. +GLOBAL_DATUM_INIT(news_network, /datum/feed_network, new()) //The global news-network, which is coincidentally a global list. +GLOBAL_LIST_INIT_TYPED(allCasters, /obj/structure/machinery/newscaster, list()) //Global list that will contain reference to all newscasters in existence. /obj/structure/machinery/newscaster name = "newscaster" @@ -101,15 +100,15 @@ var/list/obj/structure/machinery/newscaster/allCasters = list() //Global list th securityCaster = 1 /obj/structure/machinery/newscaster/security_unit/New() //Constructor, ho~ - allCasters += src + GLOB.allCasters += src src.paper_remaining = 15 // Will probably change this to something better - for(var/obj/structure/machinery/newscaster/NEWSCASTER in allCasters) // Let's give it an appropriate unit number + for(var/obj/structure/machinery/newscaster/NEWSCASTER in GLOB.allCasters) // Let's give it an appropriate unit number src.unit_no++ src.update_icon() //for any custom ones on the map... ..() //I just realised the newscasters weren't in the global machines list. The superconstructor call will tend to that /obj/structure/machinery/newscaster/security_unit/Destroy() - allCasters -= src + GLOB.allCasters -= src return ..() /obj/structure/machinery/newscaster/update_icon() @@ -122,7 +121,7 @@ var/list/obj/structure/machinery/newscaster/allCasters = list() //Global list th src.overlays.Cut() //reset overlays - if(news_network.wanted_issue) //wanted icon state, there can be no overlays on it as it's a priority message + if(GLOB.news_network.wanted_issue) //wanted icon state, there can be no overlays on it as it's a priority message icon_state = "newscaster_wanted" return @@ -184,7 +183,7 @@ var/list/obj/structure/machinery/newscaster/allCasters = list() //Global list th if(0) dat += "Welcome to Newscasting Unit #[src.unit_no].
Interface & News networks Operational." dat += "
Property of Weyland-Yutani" - if(news_network.wanted_issue) + if(GLOB.news_network.wanted_issue) dat+= "
Read Wanted Issue" dat+= "

Create Feed Channel" dat+= "
View Feed Channels" @@ -194,7 +193,7 @@ var/list/obj/structure/machinery/newscaster/allCasters = list() //Global list th dat+= "

Exit" if(src.securityCaster) var/wanted_already = 0 - if(news_network.wanted_issue) + if(GLOB.news_network.wanted_issue) wanted_already = 1 dat+="
Feed Security functions:
" @@ -204,10 +203,10 @@ var/list/obj/structure/machinery/newscaster/allCasters = list() //Global list th dat+="

The newscaster recognises you as: [src.scanned_user]" if(1) dat+= "Station Feed Channels
" - if(!length(news_network.network_channels) ) + if(!length(GLOB.news_network.network_channels) ) dat+="No active channels found..." else - for(var/datum/feed_channel/CHANNEL in news_network.network_channels) + for(var/datum/feed_channel/CHANNEL in GLOB.news_network.network_channels) if(CHANNEL.is_admin_channel) dat+="[CHANNEL.channel_name]
" else @@ -255,7 +254,7 @@ var/list/obj/structure/machinery/newscaster/allCasters = list() //Global list th dat+="ERROR: Could not submit Feed Channel to Network.

" //var/list/existing_channels = list() //Let's get dem existing channels - OBSOLETE var/list/existing_authors = list() - for(var/datum/feed_channel/FC in news_network.network_channels) + for(var/datum/feed_channel/FC in GLOB.news_network.network_channels) //existing_channels += FC.channel_name //OBSOLETE if(FC.author == "\[REDACTED\]") existing_authors += FC.backup_author @@ -266,7 +265,7 @@ var/list/obj/structure/machinery/newscaster/allCasters = list() //Global list th if(src.channel_name=="" || src.channel_name == "\[REDACTED\]") dat+="�Invalid channel name.
" var/check = 0 - for(var/datum/feed_channel/FC in news_network.network_channels) + for(var/datum/feed_channel/FC in GLOB.news_network.network_channels) if(FC.channel_name == src.channel_name) check = 1 break @@ -276,10 +275,10 @@ var/list/obj/structure/machinery/newscaster/allCasters = list() //Global list th dat+="�Channel author unverified.
" dat+="
Return
" if(8) - var/total_num=length(news_network.network_channels) + var/total_num=length(GLOB.news_network.network_channels) var/active_num=total_num var/message_num=0 - for(var/datum/feed_channel/FC in news_network.network_channels) + for(var/datum/feed_channel/FC in GLOB.news_network.network_channels) if(!FC.censored) message_num += length(FC.messages) //Dont forget, datum/feed_channel's var messages is a list of datum/feed_message else @@ -312,10 +311,10 @@ var/list/obj/structure/machinery/newscaster/allCasters = list() //Global list th dat+="NOTE: Due to the nature of news Feeds, total deletion of a Feed Story is not possible.
" dat+="Keep in mind that users attempting to view a censored feed will instead see the \[REDACTED\] tag above it.
" dat+="
Select Feed channel to get Stories from:
" - if(!length(news_network.network_channels)) + if(!length(GLOB.news_network.network_channels)) dat+="No feed channels found active...
" else - for(var/datum/feed_channel/CHANNEL in news_network.network_channels) + for(var/datum/feed_channel/CHANNEL in GLOB.news_network.network_channels) dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : null]
" dat+="
Cancel" if(11) @@ -323,10 +322,10 @@ var/list/obj/structure/machinery/newscaster/allCasters = list() //Global list th dat+="A D-Notice is to be bestowed upon the channel if the handling Authority deems it as harmful for the station's" dat+="morale, integrity or disciplinary behaviour. A D-Notice will render a channel unable to be updated by anyone, without deleting any feed" dat+="stories it might contain at the time. You can lift a D-Notice if you have the required access at any time.
" - if(!length(news_network.network_channels)) + if(!length(GLOB.news_network.network_channels)) dat+="No feed channels found active...
" else - for(var/datum/feed_channel/CHANNEL in news_network.network_channels) + for(var/datum/feed_channel/CHANNEL in GLOB.news_network.network_channels) dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : null]
" dat+="
Back" @@ -360,7 +359,7 @@ var/list/obj/structure/machinery/newscaster/allCasters = list() //Global list th dat+="Wanted Issue Handler:" var/wanted_already = 0 var/end_param = 1 - if(news_network.wanted_issue) + if(GLOB.news_network.wanted_issue) wanted_already = 1 end_param = 2 @@ -371,7 +370,7 @@ var/list/obj/structure/machinery/newscaster/allCasters = list() //Global list th dat+="Description: [src.msg]
" dat+="Attach Photo: [(src.photo ? "Photo Attached" : "No Photo")]
" if(wanted_already) - dat+="Wanted Issue created by: [news_network.wanted_issue.backup_author]
" + dat+="Wanted Issue created by: [GLOB.news_network.wanted_issue.backup_author]
" else dat+="Wanted Issue will be created under prosecutor: [src.scanned_user]
" dat+="
[(wanted_already) ? ("Edit Issue") : ("Submit")]" @@ -394,12 +393,12 @@ var/list/obj/structure/machinery/newscaster/allCasters = list() //Global list th dat+="Wanted Issue successfully deleted from Circulation
" dat+="
Return
" if(18) - dat+="-- STATIONWIDE WANTED ISSUE --
\[Submitted by: [news_network.wanted_issue.backup_author]\]
" - dat+="Criminal: [news_network.wanted_issue.author]
" - dat+="Description: [news_network.wanted_issue.body]
" + dat+="-- STATIONWIDE WANTED ISSUE --
\[Submitted by: [GLOB.news_network.wanted_issue.backup_author]\]
" + dat+="Criminal: [GLOB.news_network.wanted_issue.author]
" + dat+="Description: [GLOB.news_network.wanted_issue.body]
" dat+="Photo:: " - if(news_network.wanted_issue.img) - usr << browse_rsc(news_network.wanted_issue.img, "tmp_photow.png") + if(GLOB.news_network.wanted_issue.img) + usr << browse_rsc(GLOB.news_network.wanted_issue.img, "tmp_photow.png") dat+="
" else dat+="None" @@ -448,14 +447,14 @@ var/list/obj/structure/machinery/newscaster/allCasters = list() //Global list th else if(href_list["submit_new_channel"]) //var/list/existing_channels = list() //OBSOLETE var/list/existing_authors = list() - for(var/datum/feed_channel/FC in news_network.network_channels) + for(var/datum/feed_channel/FC in GLOB.news_network.network_channels) //existing_channels += FC.channel_name if(FC.author == "\[REDACTED\]") existing_authors += FC.backup_author else existing_authors +=FC.author var/check = 0 - for(var/datum/feed_channel/FC in news_network.network_channels) + for(var/datum/feed_channel/FC in GLOB.news_network.network_channels) if(FC.channel_name == src.channel_name) check = 1 break @@ -468,7 +467,7 @@ var/list/obj/structure/machinery/newscaster/allCasters = list() //Global list th newChannel.channel_name = src.channel_name newChannel.author = src.scanned_user newChannel.locked = c_locked - news_network.network_channels += newChannel //Adding channel to the global network + GLOB.news_network.network_channels += newChannel //Adding channel to the global network src.screen=5 src.updateUsrDialog() //src.update_icon() @@ -476,7 +475,7 @@ var/list/obj/structure/machinery/newscaster/allCasters = list() //Global list th else if(href_list["set_channel_receiving"]) //var/list/datum/feed_channel/available_channels = list() var/list/available_channels = list() - for(var/datum/feed_channel/F in news_network.network_channels) + for(var/datum/feed_channel/F in GLOB.news_network.network_channels) if( (!F.locked || F.author == scanned_user) && !F.censored) available_channels += F.channel_name src.channel_name = strip_html(tgui_input_list(usr, "Choose receiving Feed Channel", "Network Channel Handler", available_channels )) @@ -501,12 +500,12 @@ var/list/obj/structure/machinery/newscaster/allCasters = list() //Global list th newMsg.body = src.msg if(photo) newMsg.img = photo.img - for(var/datum/feed_channel/FC in news_network.network_channels) + for(var/datum/feed_channel/FC in GLOB.news_network.network_channels) if(FC.channel_name == src.channel_name) FC.messages += newMsg //Adding message to the network's appropriate feed_channel break src.screen=4 - for(var/obj/structure/machinery/newscaster/NEWSCASTER in allCasters) + for(var/obj/structure/machinery/newscaster/NEWSCASTER in GLOB.allCasters) NEWSCASTER.newsAlert(src.channel_name) src.updateUsrDialog() @@ -540,12 +539,12 @@ var/list/obj/structure/machinery/newscaster/allCasters = list() //Global list th else if(href_list["menu_wanted"]) var/already_wanted = 0 - if(news_network.wanted_issue) + if(GLOB.news_network.wanted_issue) already_wanted = 1 if(already_wanted) - src.channel_name = news_network.wanted_issue.author - src.msg = news_network.wanted_issue.body + src.channel_name = GLOB.news_network.wanted_issue.author + src.msg = GLOB.news_network.wanted_issue.body src.screen = 14 src.updateUsrDialog() @@ -575,32 +574,32 @@ var/list/obj/structure/machinery/newscaster/allCasters = list() //Global list th WANTED.backup_author = src.scanned_user //I know, a bit wacky if(photo) WANTED.img = photo.img - news_network.wanted_issue = WANTED - for(var/obj/structure/machinery/newscaster/NEWSCASTER in allCasters) + GLOB.news_network.wanted_issue = WANTED + for(var/obj/structure/machinery/newscaster/NEWSCASTER in GLOB.allCasters) NEWSCASTER.newsAlert() NEWSCASTER.update_icon() src.screen = 15 else - if(news_network.wanted_issue.is_admin_message) + if(GLOB.news_network.wanted_issue.is_admin_message) alert("The wanted issue has been distributed by a Weyland-Yutani higherup. You cannot edit it.","Ok") return - news_network.wanted_issue.author = src.channel_name - news_network.wanted_issue.body = src.msg - news_network.wanted_issue.backup_author = src.scanned_user + GLOB.news_network.wanted_issue.author = src.channel_name + GLOB.news_network.wanted_issue.body = src.msg + GLOB.news_network.wanted_issue.backup_author = src.scanned_user if(photo) - news_network.wanted_issue.img = photo.img + GLOB.news_network.wanted_issue.img = photo.img src.screen = 19 src.updateUsrDialog() else if(href_list["cancel_wanted"]) - if(news_network.wanted_issue.is_admin_message) + if(GLOB.news_network.wanted_issue.is_admin_message) alert("The wanted issue has been distributed by a Weyland-Yutani higherup. You cannot take it down.","Ok") return var/choice = alert("Please confirm Wanted Issue removal","Network Security Handler","Confirm","Cancel") if(choice=="Confirm") - news_network.wanted_issue = null - for(var/obj/structure/machinery/newscaster/NEWSCASTER in allCasters) + GLOB.news_network.wanted_issue = null + for(var/obj/structure/machinery/newscaster/NEWSCASTER in GLOB.allCasters) NEWSCASTER.update_icon() src.screen=17 src.updateUsrDialog() @@ -915,10 +914,10 @@ var/list/obj/structure/machinery/newscaster/allCasters = list() //Global list th /obj/structure/machinery/newscaster/proc/print_paper() var/obj/item/newspaper/NEWSPAPER = new /obj/item/newspaper - for(var/datum/feed_channel/FC in news_network.network_channels) + for(var/datum/feed_channel/FC in GLOB.news_network.network_channels) NEWSPAPER.news_content += FC - if(news_network.wanted_issue) - NEWSPAPER.important_message = news_network.wanted_issue + if(GLOB.news_network.wanted_issue) + NEWSPAPER.important_message = GLOB.news_network.wanted_issue NEWSPAPER.forceMove(get_turf(src)) src.paper_remaining-- return @@ -930,7 +929,7 @@ var/list/obj/structure/machinery/newscaster/allCasters = list() //Global list th /obj/structure/machinery/newscaster/proc/newsAlert(channel) //This isn't Agouri's work, for it is ugly and vile. var/turf/T = get_turf(src) //Who the fuck uses spawn(600) anyway, jesus christ if(channel) - for(var/mob/O in hearers(world_view_size-1, T)) + for(var/mob/O in hearers(GLOB.world_view_size-1, T)) O.show_message(SPAN_NEWSCASTER("[src.name] beeps, \"Breaking news from [channel]!\""), SHOW_MESSAGE_AUDIBLE) src.alert = 1 src.update_icon() @@ -939,7 +938,7 @@ var/list/obj/structure/machinery/newscaster/allCasters = list() //Global list th src.update_icon() playsound(src.loc, 'sound/machines/twobeep.ogg', 25, 1) else - for(var/mob/O in hearers(world_view_size-1, T)) + for(var/mob/O in hearers(GLOB.world_view_size-1, T)) O.show_message(SPAN_NEWSCASTER("[src.name] beeps, \"Attention! Wanted issue distributed!\""), SHOW_MESSAGE_AUDIBLE) playsound(src.loc, 'sound/machines/warning-buzzer.ogg', 25, 1) return diff --git a/code/game/machinery/nuclearbomb.dm b/code/game/machinery/nuclearbomb.dm index 45062cbf6b39..369953788ae1 100644 --- a/code/game/machinery/nuclearbomb.dm +++ b/code/game/machinery/nuclearbomb.dm @@ -1,5 +1,4 @@ -var/bomb_set = FALSE - +GLOBAL_VAR_INIT(bomb_set, FALSE) /obj/structure/machinery/nuclearbomb name = "\improper Nuclear Fission Explosive" desc = "Nuke the entire site from orbit, it's the only way to be sure. Too bad we don't have any orbital nukes." @@ -59,7 +58,7 @@ var/bomb_set = FALSE update_minimap_icon() return PROCESS_KILL - bomb_set = TRUE //So long as there is one nuke timing, it means one nuke is armed. + GLOB.bomb_set = TRUE //So long as there is one nuke timing, it means one nuke is armed. timeleft = explosion_time - world.time if(world.time >= explosion_time) explode() @@ -90,7 +89,7 @@ var/bomb_set = FALSE return XENO_ATTACK_ACTION /obj/structure/machinery/nuclearbomb/attackby(obj/item/O as obj, mob/user as mob) - if(anchored && timing && bomb_set && HAS_TRAIT(O, TRAIT_TOOL_WIRECUTTERS)) + if(anchored && timing && GLOB.bomb_set && HAS_TRAIT(O, TRAIT_TOOL_WIRECUTTERS)) user.visible_message(SPAN_INFO("[user] begins to defuse \the [src]."), SPAN_INFO("You begin to defuse \the [src]. This will take some time...")) if(do_after(user, 150 * user.get_skill_duration_multiplier(SKILL_ENGINEER), INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE)) disable() @@ -111,7 +110,7 @@ var/bomb_set = FALSE return if(isqueen(user)) - if(timing && bomb_set) + if(timing && GLOB.bomb_set) user.visible_message(SPAN_INFO("[user] begins to defuse \the [src]."), SPAN_INFO("You begin to defuse \the [src]. This will take some time...")) if(do_after(user, 5 SECONDS, INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE)) disable() @@ -196,14 +195,14 @@ var/bomb_set = FALSE timing = !timing if(timing) if(!safety) - bomb_set = TRUE + GLOB.bomb_set = TRUE explosion_time = world.time + timeleft update_minimap_icon() start_processing() announce_to_players() message_admins("\The [src] has been activated by [key_name(ui.user, 1)] [ADMIN_JMP_USER(ui.user)]") else - bomb_set = FALSE + GLOB.bomb_set = FALSE else disable() message_admins("\The [src] has been deactivated by [key_name(ui.user, 1)] [ADMIN_JMP_USER(ui.user)]") @@ -232,7 +231,7 @@ var/bomb_set = FALSE being_used = FALSE if(safety) timing = FALSE - bomb_set = FALSE + GLOB.bomb_set = FALSE . = TRUE if("toggleCommandLockout") @@ -378,7 +377,7 @@ var/bomb_set = FALSE /obj/structure/machinery/nuclearbomb/proc/disable() timing = FALSE - bomb_set = FALSE + GLOB.bomb_set = FALSE timeleft = initial(timeleft) explosion_time = null announce_to_players() @@ -436,7 +435,7 @@ var/bomb_set = FALSE if(timing != -1) message_admins("\The [src] has been unexpectedly deleted at ([x],[y],[x]). [ADMIN_JMP(src)]") log_game("\The [src] has been unexpectedly deleted at ([x],[y],[x]).") - bomb_set = FALSE + GLOB.bomb_set = FALSE SSminimaps.remove_marker(src) return ..() diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index b21f73af76d6..a886b59f501f 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -296,7 +296,7 @@ Buildable meters /obj/item/pipe/Move() . = ..() if ((pipe_type in list (PIPE_SIMPLE_BENT, PIPE_SUPPLY_BENT, PIPE_SCRUBBERS_BENT, PIPE_HE_BENT, PIPE_INSULATED_BENT)) \ - && (src.dir in cardinal)) + && (src.dir in GLOB.cardinals)) setDir(src.dir|turn(src.dir, 90)) else if (pipe_type in list (PIPE_SIMPLE_STRAIGHT, PIPE_SUPPLY_STRAIGHT, PIPE_SCRUBBERS_STRAIGHT, PIPE_UNIVERSAL, PIPE_HE_STRAIGHT, PIPE_INSULATED_STRAIGHT, PIPE_MVALVE)) if(dir==2) @@ -620,8 +620,8 @@ Buildable meters playsound(src.loc, 'sound/items/Ratchet.ogg', 25, 1) user.visible_message( \ - "[user] fastens the [src].", \ - SPAN_NOTICE("You have fastened the [src]."), \ + "[user] fastens [src].", \ + SPAN_NOTICE("You have fastened [src]."), \ "You hear ratchet.") qdel(src) // remove the pipe item diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index c75360e07568..72e311c6d8ff 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -218,20 +218,14 @@ update_icon() /obj/structure/machinery/recharger/emp_act(severity) + . = ..() if(inoperable() || !anchored) - ..(severity) return -/* - if(istype(charging, /obj/item/weapon/gun/energy)) - var/obj/item/weapon/gun/energy/E = charging - if(E.power_supply) - E.power_supply.emp_act(severity) -*/ + if(istype(charging, /obj/item/weapon/baton)) var/obj/item/weapon/baton/B = charging if(B.bcell) B.bcell.charge = 0 - ..(severity) /obj/structure/machinery/recharger/update_icon() //we have an update_icon() in addition to the stuff in process to make it feel a tiny bit snappier. src.overlays = 0 diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 644402128852..56b782cd77a4 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -109,13 +109,12 @@ return /obj/structure/machinery/recharge_station/emp_act(severity) + . = ..() if(inoperable()) - ..(severity) return if(occupant) occupant.emp_act(severity) go_out() - ..(severity) /obj/structure/machinery/recharge_station/update_icon() ..() diff --git a/code/game/machinery/scoreboard.dm b/code/game/machinery/scoreboard.dm index 9b8d6402ca96..8740bed6dcfb 100644 --- a/code/game/machinery/scoreboard.dm +++ b/code/game/machinery/scoreboard.dm @@ -68,7 +68,7 @@ active = 1 icon_state = "launcheract" - for(var/obj/structure/machinery/scoreboard/X in machines) + for(var/obj/structure/machinery/scoreboard/X in GLOB.machines) if(X.id == id) X.reset_scores() diff --git a/code/game/machinery/seed_extractor.dm b/code/game/machinery/seed_extractor.dm index e07b13f64f97..0b4574cc9fb4 100644 --- a/code/game/machinery/seed_extractor.dm +++ b/code/game/machinery/seed_extractor.dm @@ -14,10 +14,10 @@ var/datum/seed/new_seed_type if(istype(O, /obj/item/grown)) var/obj/item/grown/F = O - new_seed_type = seed_types[F.plantname] + new_seed_type = GLOB.seed_types[F.plantname] else var/obj/item/reagent_container/food/snacks/grown/F = O - new_seed_type = seed_types[F.plantname] + new_seed_type = GLOB.seed_types[F.plantname] if(new_seed_type) to_chat(user, SPAN_NOTICE("You extract some seeds from [O].")) diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index aa51201ae18b..69b21964a4f4 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -40,12 +40,11 @@ /obj/structure/machinery/space_heater/emp_act(severity) + . = ..() if(inoperable()) - ..(severity) return if(cell) cell.emp_act(severity) - ..(severity) /obj/structure/machinery/space_heater/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/cell)) @@ -67,7 +66,7 @@ return else if(HAS_TRAIT(I, TRAIT_TOOL_SCREWDRIVER)) open = !open - user.visible_message(SPAN_NOTICE("[user] [open ? "opens" : "closes"] the hatch on the [src]."), SPAN_NOTICE("You [open ? "open" : "close"] the hatch on the [src].")) + user.visible_message(SPAN_NOTICE("[user] [open ? "opens" : "closes"] the hatch on [src]."), SPAN_NOTICE("You [open ? "open" : "close"] the hatch on [src].")) update_icon() if(!open && user.interactee == src) close_browser(user, "spaceheater") @@ -108,7 +107,7 @@ start_processing() else stop_processing() - user.visible_message(SPAN_NOTICE("[user] switches [on ? "on" : "off"] the [src]."),SPAN_NOTICE("You switch [on ? "on" : "off"] the [src].")) + user.visible_message(SPAN_NOTICE("[user] switches [on ? "on" : "off"] [src]."),SPAN_NOTICE("You switch [on ? "on" : "off"] [src].")) update_icon() return @@ -187,4 +186,3 @@ name = "radiator" desc = "It's a radiator. It heats the room through convection with hot water. This one has a red handle." icon_state = "radiator-r" - diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index c56f8da36150..547dbba68e4f 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -146,7 +146,7 @@ maptext = new_text /obj/structure/machinery/status_display/proc/get_supply_shuttle_timer() - var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle + var/datum/shuttle/ferry/supply/shuttle = GLOB.supply_controller.shuttle if (!shuttle) return "Error" @@ -164,7 +164,7 @@ maptext = "" /obj/structure/machinery/status_display/proc/set_sec_level_picture() - switch(security_level) + switch(GLOB.security_level) if(SEC_LEVEL_GREEN) set_picture("default") if(SEC_LEVEL_BLUE) @@ -188,11 +188,10 @@ var/emotion = "Neutral" /obj/structure/machinery/ai_status_display/emp_act(severity) + . = ..() if(inoperable()) - ..(severity) return set_picture("ai_bsod") - ..(severity) /obj/structure/machinery/ai_status_display/proc/update() if(mode==0) //Blank diff --git a/code/game/machinery/storm_siren.dm b/code/game/machinery/storm_siren.dm index e78414cb7e5b..335115715488 100644 --- a/code/game/machinery/storm_siren.dm +++ b/code/game/machinery/storm_siren.dm @@ -11,11 +11,11 @@ health = 0 /obj/structure/machinery/storm_siren/Initialize() - weather_notify_objects += src + GLOB.weather_notify_objects += src return ..() /obj/structure/machinery/storm_siren/Destroy() - weather_notify_objects -= src + GLOB.weather_notify_objects -= src . = ..() /obj/structure/machinery/storm_siren/power_change() diff --git a/code/game/machinery/supply_display.dm b/code/game/machinery/supply_display.dm index 26117474f0fe..7317ed6435f2 100644 --- a/code/game/machinery/supply_display.dm +++ b/code/game/machinery/supply_display.dm @@ -6,7 +6,7 @@ message1 = "SUPPLY" message2 = "" - var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle + var/datum/shuttle/ferry/supply/shuttle = GLOB.supply_controller.shuttle if (!shuttle) message2 = "Error" else if(shuttle.has_arrive_time()) diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index a370356ad60b..942d70f80705 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -128,7 +128,7 @@ dat += "
Prefabrication: [autolinkers.len ? "TRUE" : "FALSE"]" if(hide) dat += "
Shadow Link: ACTIVE" - //Show additional options for certain machines. + //Show additional options for certain GLOB.machines. dat += Options_Menu() dat += "
Linked Network Entities:
    " @@ -200,7 +200,7 @@ P = user.get_active_hand() return P -// Additional Options for certain machines. Use this when you want to add an option to a specific machine. +// Additional Options for certain GLOB.machines. Use this when you want to add an option to a specific machine. // Example of how to use below. /obj/structure/machinery/telecomms/proc/Options_Menu() diff --git a/code/game/machinery/telecomms/presets.dm b/code/game/machinery/telecomms/presets.dm index a9c7c61bc00d..7621d55e3645 100644 --- a/code/game/machinery/telecomms/presets.dm +++ b/code/game/machinery/telecomms/presets.dm @@ -1,8 +1,5 @@ // ### Preset machines ### - -//var/list/freq_listening = list() USE THIS FOR NEW RELAY STUFF WHEN I GET THIS - APOPHIS - //Relay /obj/structure/machinery/telecomms/relay/preset network = "tcommsat" diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index 255d70f45870..8b8b12dfd170 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -93,13 +93,13 @@ GLOBAL_LIST_EMPTY_TYPED(telecomms_list, /obj/structure/machinery/telecomms) update_state() /obj/structure/machinery/telecomms/emp_act(severity) + . = ..() if(prob(100/severity)) if(!(stat & EMPED)) stat |= EMPED var/duration = (300 * 10)/severity spawn(rand(duration - 20, duration + 20)) // Takes a long time for the machines to reboot. stat &= ~EMPED - ..() /* The receiver idles and receives messages from subspace-compatible radio equipment; diff --git a/code/game/machinery/vending/cm_vending.dm b/code/game/machinery/vending/cm_vending.dm index 1e82a69482f1..0745f05ab2d1 100644 --- a/code/game/machinery/vending/cm_vending.dm +++ b/code/game/machinery/vending/cm_vending.dm @@ -84,7 +84,7 @@ IN_USE used for vending/denying if(stat & NOPOWER || stat & TIPPED_OVER) //tipping off without breaking uses "_off" sprite overlays += image(icon, "[icon_state]_off") if(stat & MAINT) //if we require maintenance, then it is completely "_broken" - icon_state = "[initial(icon_state)]_broken" + overlays += image(icon, "[initial(icon_state)]_broken") if(stat & IN_REPAIR) //if someone started repairs, they unscrewed "_panel" overlays += image(icon, "[icon_state]_panel") @@ -440,10 +440,68 @@ GLOBAL_LIST_EMPTY(vending_products) user.set_interaction(src) tgui_interact(user) +/// Handles redeeming coin tokens. +/obj/structure/machinery/cm_vending/proc/redeem_token(obj/item/coin/marine/token, mob/user) + var/reward_typepath + switch(token.token_type) + if(VEND_TOKEN_VOID) + to_chat(user, SPAN_WARNING("ERROR: TOKEN NOT RECOGNISED.")) + return FALSE + if(VEND_TOKEN_SPEC) + reward_typepath = /obj/item/spec_kit/rifleman + else + to_chat(user, SPAN_WARNING("ERROR: INCORRECT TOKEN.")) + return FALSE + + if(reward_typepath && user.drop_inv_item_to_loc(token, src)) + to_chat(user, SPAN_NOTICE("You insert \the [token] into \the [src].")) + var/obj/new_item = new reward_typepath(get_turf(src)) + user.put_in_any_hand_if_possible(new_item) + return TRUE + return FALSE + + //------------TGUI PROCS--------------- /obj/structure/machinery/cm_vending/ui_data(mob/user) - return vendor_user_ui_data(src, user) + if(vend_flags & VEND_LIMITED_INVENTORY) + return vendor_inventory_ui_data(user) + + . = list() + var/list/ui_listed_products = get_listed_products(user) + // list format + // ( + // name: str + // cost + // item reference + // allowed to buy flag + // item priority (mandatory/recommended/regular) + // ) + + var/list/stock_values = list() + + var/mob/living/carbon/human/marine = user + var/points = 0 + + if(instanced_vendor_points) + points = available_points_to_display + else + if(use_snowflake_points) + points = marine.marine_snowflake_points + else if(use_points) + points = marine.marine_points + + for (var/i in 1 to length(ui_listed_products)) + var/list/myprod = ui_listed_products[i] //we take one list from listed_products + var/prod_available = FALSE + var/p_cost = myprod[2] + var/category = myprod[4] + if(points >= p_cost && (!category || ((category in marine.marine_buyable_categories) && (marine.marine_buyable_categories[category])))) + prod_available = TRUE + stock_values += list(prod_available) + + .["stock_listing"] = stock_values + .["current_m_points"] = points /obj/structure/machinery/cm_vending/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() @@ -492,7 +550,7 @@ GLOBAL_LIST_EMPTY(vending_products) vend_fail() return FALSE var/p_name = itemspec[1] - if(!available_specialist_sets.Find(p_name)) + if(!GLOB.available_specialist_sets.Find(p_name)) to_chat(user, SPAN_WARNING("That set is already taken.")) vend_fail() return FALSE @@ -523,14 +581,14 @@ GLOBAL_LIST_EMPTY(vending_products) return FALSE ID.set_assignment((user.assigned_squad ? (user.assigned_squad.name + " ") : "") + JOB_SQUAD_SPECIALIST + " ([specialist_assignment])") GLOB.data_core.manifest_modify(user.real_name, WEAKREF(user), ID.assignment) - available_specialist_sets -= p_name + GLOB.available_specialist_sets -= p_name else if(vendor_role.Find(JOB_SYNTH)) if(user.job != JOB_SYNTH) to_chat(user, SPAN_WARNING("Only USCM Synthetics may vend experimental tool tokens.")) vend_fail() return FALSE - if(!handle_vend(src, itemspec, user)) + if(!handle_vend(itemspec, user)) to_chat(user, SPAN_WARNING("You can't buy things from this category anymore.")) vend_fail() return FALSE @@ -548,7 +606,7 @@ GLOBAL_LIST_EMPTY(vending_products) vend_fail() return TRUE // one left and the player spam click during a lagspike. - vendor_successful_vend(src, itemspec, user) + vendor_successful_vend(itemspec, user) return TRUE add_fingerprint(user) @@ -701,13 +759,20 @@ GLOBAL_LIST_EMPTY(vending_products) hack_access(user) return TRUE + ///If we want to redeem a token + else if(istype(W, /obj/item/coin/marine)) + if(!can_access_to_vend(user, ignore_hack = TRUE)) + return FALSE + . = redeem_token(W, user) + return + ..() /obj/structure/machinery/cm_vending/proc/get_listed_products(mob/user) return listed_products -/obj/structure/machinery/cm_vending/proc/can_access_to_vend(mob/user, display=TRUE) - if(!hacked) +/obj/structure/machinery/cm_vending/proc/can_access_to_vend(mob/user, display = TRUE, ignore_hack = FALSE) + if(!hacked || ignore_hack) if(!allowed(user)) if(display) to_chat(user, SPAN_WARNING("Access denied.")) @@ -779,7 +844,7 @@ GLOBAL_LIST_EMPTY(vending_products) /obj/structure/machinery/cm_vending/gear/ui_static_data(mob/user) . = ..(user) .["vendor_type"] = "gear" - .["displayed_categories"] = vendor_user_inventory_list(src, user) + .["displayed_categories"] = vendor_user_inventory_list(user) //------------CLOTHING VENDORS--------------- //clothing vendors automatically put item on user. QoL at it's finest. @@ -796,7 +861,7 @@ GLOBAL_LIST_EMPTY(vending_products) /obj/structure/machinery/cm_vending/clothing/ui_static_data(mob/user) . = ..(user) .["vendor_type"] = "clothing" - .["displayed_categories"] = vendor_user_inventory_list(src, user) + .["displayed_categories"] = vendor_user_inventory_list(user) //------------SORTED VENDORS--------------- //22.06.2019 Modified ex-"marine_selector" system that doesn't use points by Jeser. In theory, should replace all vendors. @@ -855,7 +920,7 @@ GLOBAL_LIST_EMPTY(vending_products) /obj/structure/machinery/cm_vending/sorted/ui_static_data(mob/user) . = ..(user) .["vendor_type"] = "sorted" - .["displayed_categories"] = vendor_user_inventory_list(src, user, null, 4) + .["displayed_categories"] = vendor_user_inventory_list(user, null, 4) /obj/structure/machinery/cm_vending/sorted/MouseDrop_T(atom/movable/A, mob/user) @@ -934,7 +999,7 @@ GLOBAL_LIST_EMPTY(vending_products) /obj/structure/machinery/cm_vending/own_points/ui_static_data(mob/user) . = ..(user) .["vendor_type"] = "gear" - .["displayed_categories"] = vendor_user_inventory_list(src, user) + .["displayed_categories"] = vendor_user_inventory_list(user) //------------ESSENTIALS SETS AND RANDOM GEAR SPAWNER--------------- @@ -1060,7 +1125,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_corresponding_types_list, list( //---helper procs -/proc/vendor_user_inventory_list(vendor, mob/user, cost_index=2, priority_index=5) +/obj/structure/machinery/cm_vending/proc/vendor_user_inventory_list(mob/user, cost_index=2, priority_index=5) . = list() // default list format // ( @@ -1070,8 +1135,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_corresponding_types_list, list( // allowed to buy flag // item priority (mandatory/recommended/regular) // ) - var/obj/structure/machinery/cm_vending/vending_machine = vendor - var/list/ui_listed_products = vending_machine.get_listed_products(user) + var/list/ui_listed_products = get_listed_products(user) for (var/i in 1 to length(ui_listed_products)) var/list/myprod = ui_listed_products[i] //we take one list from listed_products @@ -1113,10 +1177,9 @@ GLOBAL_LIST_INIT(cm_vending_gear_corresponding_types_list, list( var/last_category = .[last_index] last_category["items"] += list(display_item) -/proc/vendor_inventory_ui_data(vendor, mob/user) +/obj/structure/machinery/cm_vending/proc/vendor_inventory_ui_data(mob/user) . = list() - var/obj/structure/machinery/cm_vending/vending_machine = vendor - var/list/ui_listed_products = vending_machine.get_listed_products(user) + var/list/ui_listed_products = get_listed_products(user) var/list/ui_categories = list() for (var/i in 1 to length(ui_listed_products)) @@ -1125,92 +1188,50 @@ GLOBAL_LIST_INIT(cm_vending_gear_corresponding_types_list, list( ui_categories += list(p_amount) .["stock_listing"] = ui_categories -/proc/vendor_user_ui_data(obj/structure/machinery/cm_vending/vending_machine, mob/user) - if(vending_machine.vend_flags & VEND_LIMITED_INVENTORY) - return vendor_inventory_ui_data(vending_machine, user) - - . = list() - var/list/ui_listed_products = vending_machine.get_listed_products(user) - // list format - // ( - // name: str - // cost - // item reference - // allowed to buy flag - // item priority (mandatory/recommended/regular) - // ) - - var/list/stock_values = list() - - var/mob/living/carbon/human/marine = user - var/points = 0 - - if(vending_machine.instanced_vendor_points) - points = vending_machine.available_points_to_display - else - if(vending_machine.use_snowflake_points) - points = marine.marine_snowflake_points - else if(vending_machine.use_points) - points = marine.marine_points - - for (var/i in 1 to length(ui_listed_products)) - var/list/myprod = ui_listed_products[i] //we take one list from listed_products - var/prod_available = FALSE - var/p_cost = myprod[2] - var/category = myprod[4] - if(points >= p_cost && (!category || ((category in marine.marine_buyable_categories) && (marine.marine_buyable_categories[category])))) - prod_available = TRUE - stock_values += list(prod_available) - - .["stock_listing"] = stock_values - .["current_m_points"] = points - -/proc/vendor_successful_vend(obj/structure/machinery/cm_vending/vendor, list/itemspec, mob/living/carbon/human/user) - if(vendor.stat & IN_USE) +/obj/structure/machinery/cm_vending/proc/vendor_successful_vend(list/itemspec, mob/living/carbon/human/user) + if(stat & IN_USE) return - vendor.stat |= IN_USE + stat |= IN_USE - var/vend_flags = vendor.vend_flags - var/turf/target_turf = vendor.get_appropriate_vend_turf(user) + var/turf/target_turf = get_appropriate_vend_turf(user) if(LAZYLEN(itemspec)) //making sure it's not empty - if(vendor.vend_delay) - vendor.overlays.Cut() - vendor.icon_state = "[initial(vendor.icon_state)]_vend" - if(vendor.vend_sound) - playsound(vendor.loc, vendor.vend_sound, 25, 1, 2) //heard only near vendor - sleep(vendor.vend_delay) + if(vend_delay) + overlays.Cut() + icon_state = "[initial(icon_state)]_vend" + if(vend_sound) + playsound(loc, vend_sound, 25, 1, 2) //heard only near vendor + sleep(vend_delay) var/prod_type = itemspec[3] if(islist(prod_type)) for(var/each_type in prod_type) - vendor_successful_vend_one(vendor, each_type, user, target_turf, itemspec[4] == MARINE_CAN_BUY_UNIFORM) + vendor_successful_vend_one(each_type, user, target_turf, itemspec[4] == MARINE_CAN_BUY_UNIFORM) else - vendor_successful_vend_one(vendor, prod_type, user, target_turf, itemspec[4] == MARINE_CAN_BUY_UNIFORM) + vendor_successful_vend_one(prod_type, user, target_turf, itemspec[4] == MARINE_CAN_BUY_UNIFORM) if(vend_flags & VEND_LIMITED_INVENTORY) itemspec[2]-- if(vend_flags & VEND_LOAD_AMMO_BOXES) - vendor.update_derived_ammo_and_boxes(itemspec) + update_derived_ammo_and_boxes(itemspec) else to_chat(user, SPAN_WARNING("ERROR: itemspec is missing. Please report this to admins.")) sleep(15) - vendor.stat &= ~IN_USE - vendor.icon_state = initial(vendor.icon_state) - vendor.update_icon() + stat &= ~IN_USE + icon_state = initial(icon_state) + update_icon() -/proc/vendor_successful_vend_one(obj/structure/machinery/cm_vending/vendor, prod_type, mob/living/carbon/human/user, turf/target_turf, insignas_override) +/obj/structure/machinery/cm_vending/proc/vendor_successful_vend_one(prod_type, mob/living/carbon/human/user, turf/target_turf, insignas_override) var/obj/item/new_item - var/vend_flags = vendor.vend_flags if(ispath(prod_type, /obj/item)) if(ispath(prod_type, /obj/item/weapon/gun)) new_item = new prod_type(target_turf, TRUE) else if(prod_type == /obj/item/device/radio/headset/almayer/marine) - prod_type = vendor.headset_type + prod_type = headset_type else if(prod_type == /obj/item/clothing/gloves/marine) - prod_type = vendor.gloves_type + prod_type = gloves_type new_item = new prod_type(target_turf) new_item.add_fingerprint(user) else @@ -1239,13 +1260,13 @@ GLOBAL_LIST_INIT(cm_vending_gear_corresponding_types_list, list( if(vend_flags & VEND_TO_HAND) if(user.client?.prefs && (user.client?.prefs?.toggle_prefs & TOGGLE_VEND_ITEM_TO_HAND)) - if(vendor.Adjacent(user)) + if(Adjacent(user)) user.put_in_any_hand_if_possible(new_item, disable_warning = TRUE) new_item.post_vendor_spawn_hook(user) -/proc/handle_vend(obj/structure/machinery/cm_vending/vendor, list/listed_products, mob/living/carbon/human/vending_human) - if(vendor.vend_flags & VEND_USE_VENDOR_FLAGS) +/obj/structure/machinery/cm_vending/proc/handle_vend(list/listed_products, mob/living/carbon/human/vending_human) + if(vend_flags & VEND_USE_VENDOR_FLAGS) return TRUE var/buying_category = listed_products[4] if(buying_category) @@ -1281,62 +1302,3 @@ GLOBAL_LIST_INIT(cm_vending_gear_corresponding_types_list, list( stat &= ~IN_USE if(destroy) qdel(src) - -//------------HACKING--------------- - -//Hacking code from old vendors, in case someone will actually would like to add complex hacking in future. For now, simple access hacking I believe sufficient. -/* -/obj/structure/machinery/vending/proc/get_wire_descriptions() - return list( - VENDING_WIRE_EXTEND = "Inventory control computer", - VENDING_WIRE_IDSCAN = "ID scanner", - VENDING_WIRE_SHOCK = "Ground safety", - VENDING_WIRE_SHOOT_INV = "Dispenser motor control" - ) - -/obj/structure/machinery/vending/proc/isWireCut(wire) - return !(wires & getWireFlag(wire)) - -/obj/structure/machinery/vending/proc/cut(wire) - wires ^= getWireFlag(wire) - - switch(wire) - if(VENDING_WIRE_EXTEND) - src.extended_inventory = 0 - visible_message(SPAN_NOTICE("A weak yellow light turns off underneath \the [src].")) - if(VENDING_WIRE_SHOCK) - src.seconds_electrified = -1 - visible_message(SPAN_DANGER("Electric arcs shoot off from \the [src]!")) - if (VENDING_WIRE_SHOOT_INV) - if(!src.shoot_inventory) - src.shoot_inventory = TRUE - visible_message(SPAN_WARNING("\The [src] begins whirring noisily.")) - -/obj/structure/machinery/vending/proc/mend(wire) - wires |= getWireFlag(wire) - - switch(wire) - if(VENDING_WIRE_EXTEND) - src.extended_inventory = 1 - visible_message(SPAN_NOTICE("A weak yellow light turns on underneath \the [src].")) - if(VENDING_WIRE_SHOCK) - src.seconds_electrified = 0 - if (VENDING_WIRE_SHOOT_INV) - src.shoot_inventory = FALSE - visible_message(SPAN_NOTICE("\The [src] stops whirring.")) - -/obj/structure/machinery/vending/proc/pulse(wire) - switch(wire) - if(VENDING_WIRE_EXTEND) - src.extended_inventory = !src.extended_inventory - visible_message(SPAN_NOTICE("A weak yellow light turns [extended_inventory ? "on" : "off"] underneath \the [src].")) - if (VENDING_WIRE_SHOCK) - src.seconds_electrified = 30 - visible_message(SPAN_DANGER("Electric arcs shoot off from \the [src]!")) - if (VENDING_WIRE_SHOOT_INV) - src.shoot_inventory = !src.shoot_inventory - if(shoot_inventory) - visible_message(SPAN_WARNING("\The [src] begins whirring noisily.")) - else - visible_message(SPAN_NOTICE("\The [src] stops whirring.")) -*/ diff --git a/code/game/machinery/vending/vending.dm b/code/game/machinery/vending/vending.dm index b5f2c6181c93..8629ce2bb2be 100644 --- a/code/game/machinery/vending/vending.dm +++ b/code/game/machinery/vending/vending.dm @@ -208,23 +208,23 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending update_icon() return TRUE else if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) - to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src].")) + to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src.name].")) return FALSE else if(stat & BROKEN) - to_chat(user, SPAN_NOTICE("You start to unscrew the [src]'s broken panel.")) + to_chat(user, SPAN_NOTICE("You start to unscrew [src]'s broken panel.")) if(!do_after(user, 3 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD, numticks = 3)) - to_chat(user, SPAN_WARNING("You stop unscrewing the [src]'s broken panel.")) + to_chat(user, SPAN_WARNING("You stop unscrewing [src]'s broken panel.")) return FALSE - to_chat(user, SPAN_NOTICE("You unscrew the [src]'s broken panel and remove it, exposing many broken wires.")) + to_chat(user, SPAN_NOTICE("You unscrew [src]'s broken panel and remove it, exposing many broken wires.")) stat &= ~BROKEN stat |= REPAIR_STEP_ONE return TRUE else if(stat & REPAIR_STEP_FOUR) - to_chat(user, SPAN_NOTICE("You start to fasten the [src]'s new panel.")) + to_chat(user, SPAN_NOTICE("You start to fasten [src]'s new panel.")) if(!do_after(user, 3 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD, numticks = 3)) - to_chat(user, SPAN_WARNING("You stop fastening the [src]'s new panel.")) + to_chat(user, SPAN_WARNING("You stop fastening [src]'s new panel.")) return FALSE - to_chat(user, SPAN_NOTICE("You fasten the [src]'s new panel, fully repairing the vendor.")) + to_chat(user, SPAN_NOTICE("You fasten [src]'s new panel, fully repairing the vendor.")) stat &= ~REPAIR_STEP_FOUR stat |= FULLY_REPAIRED update_icon() @@ -235,17 +235,17 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending return FALSE else if(HAS_TRAIT(item, TRAIT_TOOL_WIRECUTTERS)) if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) - to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src].")) + to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src.name].")) return FALSE else if(stat == WORKING && panel_open) attack_hand(user) return else if(stat & REPAIR_STEP_ONE) - to_chat(user, SPAN_NOTICE("You start to remove the [src]'s broken wires.")) + to_chat(user, SPAN_NOTICE("You start to remove [src]'s broken wires.")) if(!do_after(user, 3 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD, numticks = 3)) - to_chat(user, SPAN_WARNING("You stop removing the [src]'s broken wires.")) + to_chat(user, SPAN_WARNING("You stop removing [src]'s broken wires.")) return FALSE - to_chat(user, SPAN_NOTICE("You remove the [src]'s broken broken wires.")) + to_chat(user, SPAN_NOTICE("You remove [src]'s broken broken wires.")) stat &= ~REPAIR_STEP_ONE stat |= REPAIR_STEP_TWO return TRUE @@ -255,20 +255,20 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending return FALSE else if(istype(item, /obj/item/stack/cable_coil)) if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) - to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src].")) + to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src.name].")) return FALSE var/obj/item/stack/cable_coil/CC = item if(stat & REPAIR_STEP_TWO) if(CC.amount < 5) to_chat(user, SPAN_WARNING("You need more cable coil to replace the removed wires.")) - to_chat(user, SPAN_NOTICE("You start to replace the [src]'s removed wires.")) + to_chat(user, SPAN_NOTICE("You start to replace [src]'s removed wires.")) if(!do_after(user, 3 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD, numticks = 3)) - to_chat(user, SPAN_WARNING("You stop replacing the [src]'s removed wires.")) + to_chat(user, SPAN_WARNING("You stop replacing [src]'s removed wires.")) return FALSE if(!CC || !CC.use(5)) to_chat(user, SPAN_WARNING("You need more cable coil to replace the removed wires.")) return FALSE - to_chat(user, SPAN_NOTICE("You remove the [src]'s broken broken wires.")) + to_chat(user, SPAN_NOTICE("You remove [src]'s broken broken wires.")) stat &= ~REPAIR_STEP_TWO stat |= REPAIR_STEP_THREE return TRUE @@ -278,18 +278,18 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending return else if(istype(item, /obj/item/stack/sheet/metal)) if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) - to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src].")) + to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src.name].")) return FALSE var/obj/item/stack/sheet/metal/M = item if(stat & REPAIR_STEP_THREE) - to_chat(user, SPAN_NOTICE("You start to construct a new panel for the [src].")) + to_chat(user, SPAN_NOTICE("You start to construct a new panel for [src].")) if(!do_after(user, 3 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD, numticks = 3)) - to_chat(user, SPAN_WARNING("You stop constructing a new panel for the [src].")) + to_chat(user, SPAN_WARNING("You stop constructing a new panel for [src].")) return FALSE if(!M || !M.use(1)) to_chat(user, SPAN_WARNING("You a sheet of metal to construct a new panel.")) return FALSE - to_chat(user, SPAN_NOTICE("You construct a new panel for the [src].")) + to_chat(user, SPAN_NOTICE("You construct a new panel for [src].")) stat &= ~REPAIR_STEP_THREE stat |= REPAIR_STEP_FOUR return TRUE @@ -306,9 +306,9 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending switch (anchored) if (0) anchored = TRUE - user.visible_message("[user] tightens the bolts securing the [src] to the floor.", "You tighten the bolts securing the [src] to the floor.") + user.visible_message("[user] tightens the bolts securing [src] to the floor.", "You tighten the bolts securing [src] to the floor.") if (1) - user.visible_message("[user] unfastens the bolts securing the [src] to the floor.", "You unfasten the bolts securing the [src] to the floor.") + user.visible_message("[user] unfastens the bolts securing [src] to the floor.", "You unfasten the bolts securing [src] to the floor.") anchored = FALSE return else if(HAS_TRAIT(item, TRAIT_TOOL_MULTITOOL) || HAS_TRAIT(item, TRAIT_TOOL_WIRECUTTERS)) @@ -321,7 +321,7 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending return if(user.drop_inv_item_to_loc(item, src)) coin = item - to_chat(user, SPAN_NOTICE(" You insert the [item] into the [src]")) + to_chat(user, SPAN_NOTICE("You insert [item] into [src]")) tgui_interact(user) return else if(istype(item, /obj/item/spacecash)) @@ -343,7 +343,7 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending if (CH) // Only proceed if card contains proper account number. if(!CH.suspended) if(CH.security_level != 0) //If card requires pin authentication (ie seclevel 1 or 2) - if(vendor_account) + if(GLOB.vendor_account) var/attempt_pin = tgui_input_number(usr, "Enter pin code", "Vendor transaction") var/datum/money_account/D = attempt_account_access(card.associated_account_number, attempt_pin, 2) transfer_and_vend(D) @@ -364,18 +364,18 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending //transfer the money acc.money -= transaction_amount - vendor_account.money += transaction_amount + GLOB.vendor_account.money += transaction_amount //create entries in the two account transaction logs var/datum/transaction/T = new() - T.target_name = "[vendor_account.owner_name] (via [name])" + T.target_name = "[GLOB.vendor_account.owner_name] (via [name])" T.purpose = "Purchase of [currently_vending.product_name]" if(transaction_amount > 0) T.amount = "([transaction_amount])" else T.amount = "[transaction_amount]" T.source_terminal = name - T.date = current_date_string + T.date = GLOB.current_date_string T.time = worldtime2text() acc.transaction_log.Add(T) // @@ -384,9 +384,9 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending T.purpose = "Purchase of [currently_vending.product_name]" T.amount = "[transaction_amount]" T.source_terminal = name - T.date = current_date_string + T.date = GLOB.current_date_string T.time = worldtime2text() - vendor_account.transaction_log.Add(T) + GLOB.vendor_account.transaction_log.Add(T) // Vend the item vend(currently_vending, usr) @@ -422,9 +422,9 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending if(is_tipped_over) if(user.action_busy) return - user.visible_message(SPAN_NOTICE("[user] begins to heave the [src] back into place!"), SPAN_NOTICE("You start heaving the [src] back into place...")) + user.visible_message(SPAN_NOTICE("[user] begins to heave [src] back into place!"), SPAN_NOTICE("You start heaving [src] back into place...")) if(do_after(user, 80, INTERRUPT_NO_NEEDHAND, BUSY_ICON_FRIENDLY)) - user.visible_message(SPAN_NOTICE("[user] rights the [src]!"), SPAN_NOTICE("You right the [src]!")) + user.visible_message(SPAN_NOTICE("[user] rights [src]!"), SPAN_NOTICE("You right [src]!")) flip_back() return @@ -534,7 +534,7 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending return if(coin.string_attached) if(prob(50)) - to_chat(user, SPAN_NOTICE("You successfully pull the coin out before the [src] could swallow it.")) + to_chat(user, SPAN_NOTICE("You successfully pull the coin out before [src] could swallow it.")) user.put_in_hands(coin) else to_chat(user, SPAN_NOTICE("You weren't able to pull the coin out fast enough, the machine ate it, string and all.")) @@ -622,18 +622,18 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending //transfer the money user_account.money -= transaction_amount - vendor_account.money += transaction_amount + GLOB.vendor_account.money += transaction_amount //create entries in the two account transaction logs var/datum/transaction/new_transaction = new() - new_transaction.target_name = "[vendor_account.owner_name] (via [name])" + new_transaction.target_name = "[GLOB.vendor_account.owner_name] (via [name])" new_transaction.purpose = "Purchase of [currently_vending.product_name]" if(transaction_amount > 0) new_transaction.amount = "([transaction_amount])" else new_transaction.amount = "[transaction_amount]" new_transaction.source_terminal = name - new_transaction.date = current_date_string + new_transaction.date = GLOB.current_date_string new_transaction.time = worldtime2text() user_account.transaction_log.Add(new_transaction) @@ -642,9 +642,9 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending new_transaction.purpose = "Purchase of [currently_vending.product_name]" new_transaction.amount = "[transaction_amount]" new_transaction.source_terminal = name - new_transaction.date = current_date_string + new_transaction.date = GLOB.current_date_string new_transaction.time = worldtime2text() - vendor_account.transaction_log.Add(new_transaction) + GLOB.vendor_account.transaction_log.Add(new_transaction) return TRUE @@ -655,7 +655,7 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending //transfer the money cash.worth -= transaction_amount - vendor_account.money += transaction_amount + GLOB.vendor_account.money += transaction_amount //consume the cash if needed if(!cash.worth) @@ -667,9 +667,9 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending new_transaction.purpose = "Purchase of [currently_vending.product_name]" new_transaction.amount = "[transaction_amount]" new_transaction.source_terminal = name - new_transaction.date = current_date_string + new_transaction.date = GLOB.current_date_string new_transaction.time = worldtime2text() - vendor_account.transaction_log.Add(new_transaction) + GLOB.vendor_account.transaction_log.Add(new_transaction) return TRUE @@ -882,8 +882,8 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending S.remove_from_storage(item_to_stock, user.loc) qdel(item_to_stock) - user.visible_message(SPAN_NOTICE("[user] stocks the [src] with \a [product.product_name]."), - SPAN_NOTICE("You stock the [src] with \a [product.product_name].")) + user.visible_message(SPAN_NOTICE("[user] stocks [src] with \a [product.product_name]."), + SPAN_NOTICE("You stock [src] with \a [product.product_name].")) product.amount++ return //We found our item, no reason to go on. @@ -967,7 +967,7 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending if (!throw_item) return 0 INVOKE_ASYNC(throw_item, /atom/movable/proc/throw_atom, target, 16, SPEED_AVERAGE, src) - visible_message(SPAN_WARNING("The [src] launches \the [throw_item] at [target]!")) + visible_message(SPAN_WARNING("[src] launches [throw_item] at [target]!")) playsound(src, "sound/machines/vending.ogg", 40, TRUE) return 1 @@ -988,14 +988,14 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending switch(wire) if(VENDING_WIRE_EXTEND) extended_inventory = TRUE - visible_message(SPAN_NOTICE("A weak yellow light turns off underneath the [src].")) + visible_message(SPAN_NOTICE("A weak yellow light turns off underneath [src].")) if(VENDING_WIRE_SHOCK) seconds_electrified = -1 - visible_message(SPAN_DANGER("Electric arcs shoot off from the [src]!")) + visible_message(SPAN_DANGER("Electric arcs shoot off from [src]!")) if (VENDING_WIRE_SHOOT_INV) if(!shoot_inventory) shoot_inventory = TRUE - visible_message(SPAN_WARNING("The [src] begins whirring noisily.")) + visible_message(SPAN_WARNING("[src] begins whirring noisily.")) /obj/structure/machinery/vending/proc/mend(wire) wires |= getWireFlag(wire) @@ -1003,24 +1003,24 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending switch(wire) if(VENDING_WIRE_EXTEND) extended_inventory = FALSE - visible_message(SPAN_NOTICE("A weak yellow light turns on underneath the [src].")) + visible_message(SPAN_NOTICE("A weak yellow light turns on underneath [src].")) if(VENDING_WIRE_SHOCK) seconds_electrified = 0 if (VENDING_WIRE_SHOOT_INV) shoot_inventory = FALSE - visible_message(SPAN_NOTICE("The [src] stops whirring.")) + visible_message(SPAN_NOTICE("[src] stops whirring.")) /obj/structure/machinery/vending/proc/pulse(wire) switch(wire) if(VENDING_WIRE_EXTEND) extended_inventory = !extended_inventory - visible_message(SPAN_NOTICE("A weak yellow light turns [extended_inventory ? "on" : "off"] underneath the [src].")) + visible_message(SPAN_NOTICE("A weak yellow light turns [extended_inventory ? "on" : "off"] underneath [src].")) if (VENDING_WIRE_SHOCK) seconds_electrified = 30 - visible_message(SPAN_DANGER("Electric arcs shoot off from the [src]!")) + visible_message(SPAN_DANGER("Electric arcs shoot off from [src]!")) if (VENDING_WIRE_SHOOT_INV) shoot_inventory = !shoot_inventory if(shoot_inventory) - visible_message(SPAN_WARNING("The [src] begins whirring noisily.")) + visible_message(SPAN_WARNING("[src] begins whirring noisily.")) else - visible_message(SPAN_NOTICE("The [src] stops whirring.")) + visible_message(SPAN_NOTICE("[src] stops whirring.")) diff --git a/code/game/machinery/vending/vending_types.dm b/code/game/machinery/vending/vending_types.dm index c109db25b3a9..36b0b6e44df6 100644 --- a/code/game/machinery/vending/vending_types.dm +++ b/code/game/machinery/vending/vending_types.dm @@ -412,6 +412,12 @@ /obj/item/device/camera_film = 10, /obj/item/notepad = 5, /obj/item/device/toner = 5, + /obj/item/paper/colonial_grunts = 15, + /obj/item/toy/dice/d20 = 10, + /obj/item/tool/pen = 10, + /obj/item/tool/pen/blue = 10, + /obj/item/tool/pen/red = 10, + /obj/item/tool/pen/fountain = 3, ) contraband = list(/obj/item/toy/sword = 2) @@ -433,5 +439,77 @@ /obj/item/toy/deck/uno = 15, /obj/item/device/camera = 30, /obj/item/device/toner = 15, + /obj/item/paper/colonial_grunts = 5, + /obj/item/toy/dice/d20 = 1, + /obj/item/tool/pen = 2, + /obj/item/tool/pen/blue = 2, + /obj/item/tool/pen/red = 2, + /obj/item/tool/pen/fountain = 30, ) product_type = VENDOR_PRODUCT_TYPE_RECREATIONAL + +//vendor of ingredients for kitchen +/obj/structure/machinery/vending/ingredients + name = "\improper Galley Auxiliary Storage Requisition System" + desc = "A vending machine meant to be use for cooks." + product_ads = "If your out of ingredients i am here for you;all my organic produce are fresh;don't let my potatoes go stale time for you to cook some fries" + icon_state = "snack" + hacking_safety = TRUE + products = list( + /obj/item/storage/fancy/egg_box = 12, + /obj/item/storage/box/fish = 12, + /obj/item/storage/box/meat = 12, + /obj/item/storage/box/milk = 12, + /obj/item/storage/box/soymilk = 12, + /obj/item/storage/box/enzyme = 12, + /obj/item/storage/box/flour = 12, + /obj/item/storage/box/sugar = 12, + /obj/item/storage/box/saltshaker = 12, + /obj/item/storage/box/peppermill = 12, + /obj/item/storage/box/mint = 12, + /obj/item/storage/box/apple = 12, + /obj/item/storage/box/banana = 12, + /obj/item/storage/box/chanterelle = 12, + /obj/item/storage/box/cherries = 12, + /obj/item/storage/box/chili = 12, + /obj/item/storage/box/cabbage = 12, + /obj/item/storage/box/carrot = 12, + /obj/item/storage/box/corn = 12, + /obj/item/storage/box/eggplant = 12, + /obj/item/storage/box/lemon = 12, + /obj/item/storage/box/lime = 12, + /obj/item/storage/box/orange = 12, + /obj/item/storage/box/potato = 12, + /obj/item/storage/box/tomato = 12, + /obj/item/storage/box/whitebeet = 12, + ) + + prices = list( + /obj/item/storage/fancy/egg_box = 1, + /obj/item/storage/box/fish = 1, + /obj/item/storage/box/meat = 1, + /obj/item/storage/box/milk =1, + /obj/item/storage/box/soymilk = 1, + /obj/item/storage/box/enzyme = 1, + /obj/item/storage/box/flour = 1, + /obj/item/storage/box/sugar = 1, + /obj/item/storage/box/saltshaker = 1, + /obj/item/storage/box/peppermill = 1, + /obj/item/storage/box/mint = 1, + /obj/item/storage/box/apple = 1, + /obj/item/storage/box/banana = 2, + /obj/item/storage/box/chanterelle = 2, + /obj/item/storage/box/cherries = 2, + /obj/item/storage/box/chili = 2, + /obj/item/storage/box/cabbage = 2, + /obj/item/storage/box/carrot = 2, + /obj/item/storage/box/corn = 2, + /obj/item/storage/box/eggplant = 2, + /obj/item/storage/box/lemon = 2, + /obj/item/storage/box/lime = 2, + /obj/item/storage/box/orange = 2, + /obj/item/storage/box/potato = 2, + /obj/item/storage/box/tomato = 2, + /obj/item/storage/box/whitebeet = 2, + ) + product_type = VENDOR_PRODUCT_TYPE_FOOD diff --git a/code/game/machinery/vending/vendor_types/crew/synthetic.dm b/code/game/machinery/vending/vendor_types/crew/synthetic.dm index b489dbab16a4..ecef3ed622d9 100644 --- a/code/game/machinery/vending/vendor_types/crew/synthetic.dm +++ b/code/game/machinery/vending/vendor_types/crew/synthetic.dm @@ -335,13 +335,13 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth_snowflake, list( req_access = list(ACCESS_MARINE_SYNTH) vendor_role = list(JOB_SYNTH) -/obj/structure/machinery/cm_vending/own_points/experimental_tools/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/coin/marine/synth)) - if(user.drop_inv_item_to_loc(W, src)) +/obj/structure/machinery/cm_vending/own_points/experimental_tools/redeem_token(obj/item/coin/marine/token, mob/user) + if(token.token_type == VEND_TOKEN_SYNTH) + if(user.drop_inv_item_to_loc(token, src)) available_points = 30 available_points_to_display = available_points - to_chat(user, SPAN_NOTICE("You insert \the [W] into \the [src].")) - return + to_chat(user, SPAN_NOTICE("You insert \the [token] into \the [src].")) + return TRUE return ..() /obj/structure/machinery/cm_vending/own_points/experimental_tools/get_listed_products(mob/user) diff --git a/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm b/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm index 891a2a907b39..6877c2b4b5b3 100644 --- a/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm +++ b/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm @@ -26,12 +26,12 @@ /obj/structure/machinery/cm_vending/gear/vehicle_crew/Initialize(mapload, ...) . = ..() RegisterSignal(SSdcs, COMSIG_GLOB_VEHICLE_ORDERED, PROC_REF(populate_products)) - if(!VehicleGearConsole) - VehicleGearConsole = src + if(!GLOB.VehicleGearConsole) + GLOB.VehicleGearConsole = src /obj/structure/machinery/cm_vending/gear/vehicle_crew/Destroy() UnregisterSignal(SSdcs, COMSIG_GLOB_VEHICLE_ORDERED) - VehicleGearConsole = null + GLOB.VehicleGearConsole = null return ..() /obj/structure/machinery/cm_vending/gear/vehicle_crew/get_appropriate_vend_turf(mob/living/carbon/human/H) @@ -55,8 +55,10 @@ SIGNAL_HANDLER UnregisterSignal(SSdcs, COMSIG_GLOB_VEHICLE_ORDERED) - selected_vehicle = "APC" - available_categories &= ~(VEHICLE_ARMOR_AVAILABLE|VEHICLE_INTEGRAL_AVAILABLE) //APC lacks these, so we need to remove these flags to be able to access spare parts section + if(!selected_vehicle) + selected_vehicle = "APC" // The whole thing seems to be based upon the assumption you unlock tank as an override, defaulting to APC + if(selected_vehicle == "APC") + available_categories &= ~(VEHICLE_ARMOR_AVAILABLE|VEHICLE_INTEGRAL_AVAILABLE) //APC lacks these, so we need to remove these flags to be able to access spare parts section /obj/structure/machinery/cm_vending/gear/vehicle_crew/get_listed_products(mob/user) var/list/display_list = list() @@ -85,9 +87,9 @@ . = list() . += ui_static_data(user) - if(supply_controller.tank_points) //we steal points from supply_controller, meh-he-he. Solely to be able to modify amount of points in vendor if needed by just changing one var. - available_points_to_display = supply_controller.tank_points - supply_controller.tank_points = 0 + if(GLOB.supply_controller.tank_points) //we steal points from GLOB.supply_controller, meh-he-he. Solely to be able to modify amount of points in vendor if needed by just changing one var. + available_points_to_display = GLOB.supply_controller.tank_points + GLOB.supply_controller.tank_points = 0 .["current_m_points"] = available_points_to_display var/list/ui_listed_products = get_listed_products(user) diff --git a/code/game/machinery/vending/vendor_types/dress.dm b/code/game/machinery/vending/vendor_types/dress.dm index aff221260d03..d49361d912a0 100644 --- a/code/game/machinery/vending/vendor_types/dress.dm +++ b/code/game/machinery/vending/vendor_types/dress.dm @@ -6,11 +6,11 @@ /obj/structure/machinery/cm_vending/clothing/dress/proc/get_listed_products_for_role(list/role_specific_uniforms) . = list() - for(var/category_type in uniform_categories) + for(var/category_type in GLOB.uniform_categories) var/display_category = FALSE - if(!uniform_categories[category_type]) + if(!GLOB.uniform_categories[category_type]) continue - for(var/category in uniform_categories[category_type]) + for(var/category in GLOB.uniform_categories[category_type]) if((category in role_specific_uniforms) && role_specific_uniforms[category]) display_category = TRUE break @@ -19,7 +19,7 @@ . += list( list(category_type, 0, null, null, null) ) - for(var/object_type in uniform_categories[category_type]) + for(var/object_type in GLOB.uniform_categories[category_type]) if(!role_specific_uniforms[object_type]) continue for(var/uniform_path in role_specific_uniforms[object_type]) @@ -52,11 +52,11 @@ if(istype(id_card)) role_specific_uniforms = id_card.uniform_sets vended_items = id_card.vended_items - for(var/category_type in uniform_categories) + for(var/category_type in GLOB.uniform_categories) var/display_category = FALSE - if(!uniform_categories[category_type]) + if(!GLOB.uniform_categories[category_type]) continue - for(var/category in uniform_categories[category_type]) + for(var/category in GLOB.uniform_categories[category_type]) if((category in role_specific_uniforms) && role_specific_uniforms[category]) display_category = TRUE break @@ -65,7 +65,7 @@ display_list += list( list(category_type, 0, null, null, null) ) - for(var/object_type in uniform_categories[category_type]) + for(var/object_type in GLOB.uniform_categories[category_type]) if(!role_specific_uniforms[object_type]) continue for(var/uniform_path in role_specific_uniforms[object_type]) @@ -134,10 +134,10 @@ to_chat(H, SPAN_WARNING("This machine isn't for you.")) return - for(var/category in uniform_categories) // Very Hacky fix + for(var/category in GLOB.uniform_categories) // Very Hacky fix if(!exploiting) break - for(var/specific_category in uniform_categories[category]) + for(var/specific_category in GLOB.uniform_categories[category]) if(!exploiting) break if(!(specific_category in id_card.uniform_sets)) diff --git a/code/game/machinery/vending/vendor_types/intelligence_officer.dm b/code/game/machinery/vending/vendor_types/intelligence_officer.dm index ad10037ccfe1..93d31fe13253 100644 --- a/code/game/machinery/vending/vendor_types/intelligence_officer.dm +++ b/code/game/machinery/vending/vendor_types/intelligence_officer.dm @@ -4,26 +4,11 @@ GLOBAL_LIST_INIT(cm_vending_gear_intelligence_officer, list( list("INTELLIGENCE SET (MANDATORY)", 0, null, null, null), list("Essential Intelligence Set", 0, /obj/effect/essentials_set/intelligence_officer, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY), - list("SUPPLIES", 0, null, null, null), + list("ENGINEERING SUPPLIES", 0, null, null, null), list("Power Control Module", 5, /obj/item/circuitboard/apc, null, VENDOR_ITEM_REGULAR), - list("Binoculars", 5, /obj/item/device/binoculars, null, VENDOR_ITEM_REGULAR), - list("Night Vision Optic", 25, /obj/item/device/helmet_visor/night_vision, null, VENDOR_ITEM_RECOMMENDED), - list("Data Detector", 5, /obj/item/device/motiondetector/intel, null, VENDOR_ITEM_REGULAR), - list("Intel Radio Encryption Key", 5, /obj/item/device/encryptionkey/intel, null, VENDOR_ITEM_REGULAR), - list("Fire Extinguisher (Portable)", 5, /obj/item/tool/extinguisher/mini, null, VENDOR_ITEM_REGULAR), - list("Fulton Recovery Device", 10, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR), - list("Motion Detector", 15, /obj/item/device/motiondetector, null, VENDOR_ITEM_RECOMMENDED), list("Plastic Explosive", 10, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR), - list("Welding Visor", 5, /obj/item/device/helmet_visor/welding_visor, null, VENDOR_ITEM_REGULAR), - list("Medical Helmet Optic", 5, /obj/item/device/helmet_visor/medical, null, VENDOR_ITEM_REGULAR), list("Welding Goggles", 5, /obj/item/clothing/glasses/welding, null, VENDOR_ITEM_REGULAR), - list("POUCHES", 0, null, null, null), - list("Large Magazine Pouch", 10, /obj/item/storage/pouch/magazine/large, null, VENDOR_ITEM_REGULAR), - list("Large Shotgun Shell Pouch", 10, /obj/item/storage/pouch/shotgun/large, null, VENDOR_ITEM_REGULAR), - list("Autoinjector Pouch (Full)", 15, /obj/item/storage/pouch/autoinjector/full, null, VENDOR_ITEM_RECOMMENDED), - list("Machete Pouch (Full)", 10, /obj/item/storage/pouch/machete/full, null, VENDOR_ITEM_REGULAR), - list("PRIMARY AMMUNITION", 0, null, null, null), list("M4RA AP Magazine (10x24mm)", 10, /obj/item/ammo_magazine/rifle/m4ra/ap, null, VENDOR_ITEM_REGULAR), list("M39 AP Magazine (10x20mm)", 10, /obj/item/ammo_magazine/smg/m39/ap , null, VENDOR_ITEM_REGULAR), @@ -35,7 +20,30 @@ GLOBAL_LIST_INIT(cm_vending_gear_intelligence_officer, list( list("M44 Heavy Speed Loader (.44)", 10, /obj/item/ammo_magazine/revolver/heavy, null, VENDOR_ITEM_REGULAR), list("M4A3 HP Magazine", 5, /obj/item/ammo_magazine/pistol/hp, null, VENDOR_ITEM_REGULAR), list("M4A3 AP Magazine", 5, /obj/item/ammo_magazine/pistol/ap, null, VENDOR_ITEM_REGULAR), - list("VP78 Magazine", 5, /obj/item/ammo_magazine/pistol/vp78, null, VENDOR_ITEM_REGULAR) + list("VP78 Magazine", 5, /obj/item/ammo_magazine/pistol/vp78, null, VENDOR_ITEM_REGULAR), + + list("POUCHES", 0, null, null, null), + list("Large Magazine Pouch", 10, /obj/item/storage/pouch/magazine/large, null, VENDOR_ITEM_REGULAR), + list("Large Shotgun Shell Pouch", 10, /obj/item/storage/pouch/shotgun/large, null, VENDOR_ITEM_REGULAR), + list("Autoinjector Pouch (Full)", 15, /obj/item/storage/pouch/autoinjector/full, null, VENDOR_ITEM_RECOMMENDED), + list("Machete Pouch (Full)", 10, /obj/item/storage/pouch/machete/full, null, VENDOR_ITEM_REGULAR), + + list("UTILITIES", 0, null, null, null), + list("Fire Extinguisher (Portable)", 5, /obj/item/tool/extinguisher/mini, null, VENDOR_ITEM_REGULAR), + list("Fulton Device Stack", 10, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR), + list("Motion Detector", 15, /obj/item/device/motiondetector, null, VENDOR_ITEM_RECOMMENDED), + list("Data Detector", 5, /obj/item/device/motiondetector/intel, null, VENDOR_ITEM_REGULAR), + + list("BINOCULARS", 0, null, null, null), + list("Binoculars", 5, /obj/item/device/binoculars, null, VENDOR_ITEM_REGULAR), + + list("HELMET OPTICS", 0, null, null, null), + list("Medical Helmet Optic", 5, /obj/item/device/helmet_visor/medical, null, VENDOR_ITEM_REGULAR), + list("Welding Visor", 5, /obj/item/device/helmet_visor/welding_visor, null, VENDOR_ITEM_REGULAR), + list("Night Vision Optic", 25, /obj/item/device/helmet_visor/night_vision, null, VENDOR_ITEM_RECOMMENDED), + + list("RADIO KEYS", 0, null, null, null), + list("Intel Radio Encryption Key", 5, /obj/item/device/encryptionkey/intel, null, VENDOR_ITEM_REGULAR), )) /obj/structure/machinery/cm_vending/gear/intelligence_officer diff --git a/code/game/machinery/vending/vendor_types/requisitions.dm b/code/game/machinery/vending/vendor_types/requisitions.dm index 1dbd31c63de4..93680fb93d2c 100644 --- a/code/game/machinery/vending/vendor_types/requisitions.dm +++ b/code/game/machinery/vending/vendor_types/requisitions.dm @@ -413,6 +413,9 @@ list("MASKS", -1, null, null, null), list("Gas Mask", 20, /obj/item/clothing/mask/gas, VENDOR_ITEM_REGULAR), list("Heat Absorbent Coif", 10, /obj/item/clothing/mask/rebreather/scarf, VENDOR_ITEM_REGULAR), + + list("MISCELLANEOUS", -1, null, null), + list("Bedroll", 30, /obj/item/roller/bedroll, VENDOR_ITEM_REGULAR), ) /obj/structure/machinery/cm_vending/sorted/uniform_supply/ui_state(mob/user) diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm index 65397570511c..f11d1fd48b87 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm @@ -20,8 +20,6 @@ GLOBAL_LIST_INIT(cm_vending_gear_engi, list( list("Plasteel x10", 7, /obj/item/stack/sheet/plasteel/small_stack, null, VENDOR_ITEM_RECOMMENDED), list("Plastic Explosive", 3, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR), list("Breaching Charge", 5, /obj/item/explosive/plastic/breaching_charge, null, VENDOR_ITEM_RECOMMENDED), - list("Range Finder", 10, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR), - list("Laser Designator", 15, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_REGULAR), list("Sandbags x25", 10, /obj/item/stack/sandbags_empty/half, null, VENDOR_ITEM_RECOMMENDED), list("Super-Capacity Power Cell", 10, /obj/item/cell/super, null, VENDOR_ITEM_REGULAR), list("ES-11 Mobile Fuel Canister", 4, /obj/item/tool/weldpack/minitank, null, VENDOR_ITEM_REGULAR), @@ -72,6 +70,10 @@ GLOBAL_LIST_INIT(cm_vending_gear_engi, list( list("Motion Detector", 8, /obj/item/device/motiondetector, null, VENDOR_ITEM_REGULAR), list("Whistle", 3, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR), + list("BINOCULARS", 0, null, null, null), + list("Range Finder", 10, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR), + list("Laser Designator", 15, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_REGULAR), + list("HELMET OPTICS", 0, null, null, null), list("Medical Helmet Optic", 12, /obj/item/device/helmet_visor/medical, null, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm index 81c1941c3423..fc9813f9b172 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm @@ -23,18 +23,21 @@ GLOBAL_LIST_INIT(cm_vending_gear_leader, list( list("Machete Pouch (Full)", 4, /obj/item/storage/pouch/machete/full, null, VENDOR_ITEM_REGULAR), list("USCM Radio Telephone Pack", 5, /obj/item/storage/backpack/marine/satchel/rto, null, VENDOR_ITEM_REGULAR), list("M276 Pattern Combat Toolbelt Rig", 15, /obj/item/storage/belt/gun/utility, null, VENDOR_ITEM_REGULAR), - list("Night Vision Optic", 20, /obj/item/device/helmet_visor/night_vision, null, VENDOR_ITEM_RECOMMENDED), list("UTILITIES", 0, null, null, null), list("Whistle", 3, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR), - list("Range Finder", 3, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR), - list("Laser Designator", 5, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_REGULAR), list("Fire Extinguisher (Portable)", 3, /obj/item/tool/extinguisher/mini, null, VENDOR_ITEM_REGULAR), list("Motion Detector", 5, /obj/item/device/motiondetector, null, VENDOR_ITEM_REGULAR), list("Fulton Device Stack", 5, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR), + list("BINOCULARS", 0, null, null, null), + list("Range Finder", 3, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR), + list("Laser Designator", 5, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_REGULAR), + list("HELMET OPTICS", 0, null, null, null), list("Welding Visor", 5, /obj/item/device/helmet_visor/welding_visor, null, VENDOR_ITEM_REGULAR), + list("Medical Helmet Optic", 4, /obj/item/device/helmet_visor/medical, null, VENDOR_ITEM_RECOMMENDED), + list("Night Vision Optic", 20, /obj/item/device/helmet_visor/night_vision, null, VENDOR_ITEM_RECOMMENDED), list("ENGINEERING SUPPLIES", 0, null, null, null), list("Insulated Gloves", 3, /obj/item/clothing/gloves/yellow, null, VENDOR_ITEM_REGULAR), @@ -74,7 +77,6 @@ GLOBAL_LIST_INIT(cm_vending_gear_leader, list( list("Injector (Tricord)", 1, /obj/item/reagent_container/hypospray/autoinjector/tricord, null, VENDOR_ITEM_REGULAR), list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR), - list("Medical Helmet Optic", 4, /obj/item/device/helmet_visor/medical, null, VENDOR_ITEM_RECOMMENDED), list("Roller Bed", 2, /obj/item/roller, null, VENDOR_ITEM_REGULAR), list("SPECIAL AMMUNITION", 0, null, null, null), 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 f6b99887bbbb..21485f10c50f 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 @@ -81,12 +81,14 @@ GLOBAL_LIST_INIT(cm_vending_gear_medic, list( list("Welding Goggles", 3, /obj/item/clothing/glasses/welding, null, VENDOR_ITEM_REGULAR), list("UTILITIES", 0, null, null, null), - list("Range Finder", 6, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR), - list("Laser Designator", 8, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_REGULAR), list("Fire Extinguisher (Portable)", 3, /obj/item/tool/extinguisher/mini, null, VENDOR_ITEM_REGULAR), list("Motion Detector", 8, /obj/item/device/motiondetector, null, VENDOR_ITEM_REGULAR), list("Whistle", 3, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR), + list("BINOCULARS", 0, null, null, null), + list("Range Finder", 6, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR), + list("Laser Designator", 8, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_REGULAR), + list("HELMET OPTICS", 0, null, null, null), list("Welding Visor", 5, /obj/item/device/helmet_visor/welding_visor, null, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm index 222cd4693cd2..505ef81a1277 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 @@ -71,8 +71,10 @@ listed_products = list( list("STANDARD EQUIPMENT", -1, null, null, null), list("Marine Combat Boots", round(scale * 15), /obj/item/clothing/shoes/marine, VENDOR_ITEM_REGULAR), + list("Marine Brown Combat Boots", round(scale * 15), /obj/item/clothing/shoes/marine/brown, VENDOR_ITEM_REGULAR), list("USCM Uniform", round(scale * 15), /obj/item/clothing/under/marine, VENDOR_ITEM_REGULAR), list("Marine Combat Gloves", round(scale * 15), /obj/item/clothing/gloves/marine, VENDOR_ITEM_REGULAR), + list("Marine Brown Combat Gloves", round(scale * 15), /obj/item/clothing/gloves/marine/brown, VENDOR_ITEM_REGULAR), list("Marine Black Combat Gloves", round(scale * 15), /obj/item/clothing/gloves/marine/black, VENDOR_ITEM_REGULAR), list("Marine Radio Headset", round(scale * 15), /obj/item/device/radio/headset/almayer, VENDOR_ITEM_REGULAR), list("M10 Pattern Marine Helmet", round(scale * 15), /obj/item/clothing/head/helmet/marine, VENDOR_ITEM_REGULAR), @@ -158,6 +160,7 @@ list("USCM Flair", round(scale * 15), /obj/item/prop/helmetgarb/flair_uscm, VENDOR_ITEM_REGULAR), list("Falling Falcons Shoulder Patch", round(scale * 15), /obj/item/clothing/accessory/patch/falcon, VENDOR_ITEM_REGULAR), list("USCM Shoulder Patch", round(scale * 15), /obj/item/clothing/accessory/patch, VENDOR_ITEM_REGULAR), + list("Bedroll", round(scale * 20), /obj/item/roller/bedroll, VENDOR_ITEM_REGULAR), ) //--------------SQUAD SPECIFIC VERSIONS-------------- @@ -306,6 +309,7 @@ req_access = list(ACCESS_MARINE_ALPHA) req_one_access = list(ACCESS_MARINE_LEADER, ACCESS_MARINE_SPECPREP, ACCESS_MARINE_RO) hackable = TRUE + vend_flags = VEND_CLUTTER_PROTECTION | VEND_LIMITED_INVENTORY | VEND_TO_HAND vend_y_offset = 1 diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_rifleman.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_rifleman.dm index 6a569638984b..2e6f78f068f5 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_rifleman.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_rifleman.dm @@ -92,13 +92,15 @@ GLOBAL_LIST_INIT(cm_vending_clothing_marine, list( list("Sandbags", 20, /obj/item/stack/sandbags_empty/half, null, VENDOR_ITEM_REGULAR), list("Roller Bed", 5, /obj/item/roller, null, VENDOR_ITEM_REGULAR), list("Fulton Device Stack", 5, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR), - list("Range Finder", 10, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR), - list("Laser Designator", 15, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_REGULAR), list("Fire Extinguisher (Portable)", 5, /obj/item/tool/extinguisher/mini, null, VENDOR_ITEM_REGULAR), list("Motion Detector", 15, /obj/item/device/motiondetector, null, VENDOR_ITEM_REGULAR), list("Data Detector", 15, /obj/item/device/motiondetector/intel, null, VENDOR_ITEM_REGULAR), list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR), + list("BINOCULARS", 0, null, null, null), + list("Range Finder", 10, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR), + list("Laser Designator", 15, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_REGULAR), + list("HELMET OPTICS", 0, null, null, null), list("Medical Helmet Optic", 15, /obj/item/device/helmet_visor/medical, null, VENDOR_ITEM_REGULAR), list("Welding Visor", 5, /obj/item/device/helmet_visor/welding_visor, null, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm index 41710b477769..b67d11b3f487 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm @@ -29,13 +29,15 @@ GLOBAL_LIST_INIT(cm_vending_gear_smartgun, list( list("Large General Pouch", 6, /obj/item/storage/pouch/general/large, null, VENDOR_ITEM_REGULAR), list("UTILITIES", 0, null, null, null), - list("Range Finder", 10, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR), - list("Laser Designator", 15, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_REGULAR), list("Fire Extinguisher (Portable)", 5, /obj/item/tool/extinguisher/mini, null, VENDOR_ITEM_REGULAR), list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR), list("Roller Bed", 5, /obj/item/roller, null, VENDOR_ITEM_REGULAR), list("Fulton Device Stack", 5, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR), + list("BINOCULARS", 0, null, null, null), + list("Range Finder", 10, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR), + list("Laser Designator", 15, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_REGULAR), + list("HELMET OPTICS", 0, null, null, null), list("Medical Helmet Optic", 15, /obj/item/device/helmet_visor/medical, null, VENDOR_ITEM_REGULAR), list("Welding Visor", 5, /obj/item/device/helmet_visor/welding_visor, null, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm index 7bd45cb46a60..1c86a293772e 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm @@ -43,7 +43,6 @@ GLOBAL_LIST_INIT(cm_vending_gear_tl, list( list("Night Vision Optic", 30, /obj/item/device/helmet_visor/night_vision, null, VENDOR_ITEM_RECOMMENDED), list("UTILITIES", 0, null, null, null), - list("Binoculars", 5, /obj/item/device/binoculars, null, VENDOR_ITEM_REGULAR), list("Motion Detector", 15, /obj/item/device/motiondetector, null, VENDOR_ITEM_RECOMMENDED), list("Plastic Explosive", 10, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR), list("Breaching Charge", 10, /obj/item/explosive/plastic/breaching_charge, null, VENDOR_ITEM_REGULAR), @@ -52,6 +51,9 @@ GLOBAL_LIST_INIT(cm_vending_gear_tl, list( list("Fire Extinguisher (Portable)", 5, /obj/item/tool/extinguisher/mini, null, VENDOR_ITEM_REGULAR), list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR), + list("BINOCULARS", 0, null, null, null), + list("Binoculars", 5, /obj/item/device/binoculars, null, VENDOR_ITEM_REGULAR), + list("HELMET OPTICS", 0, null, null, null), list("Medical Helmet Optic", 15, /obj/item/device/helmet_visor/medical, null, VENDOR_ITEM_REGULAR), list("Welding Visor", 5, /obj/item/device/helmet_visor/welding_visor, null, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/weather_siren.dm b/code/game/machinery/weather_siren.dm index c7752a3dccf1..7816a33391e3 100644 --- a/code/game/machinery/weather_siren.dm +++ b/code/game/machinery/weather_siren.dm @@ -11,11 +11,11 @@ health = 0 /obj/structure/machinery/weather_siren/Initialize() - weather_notify_objects += src + GLOB.weather_notify_objects += src return ..() /obj/structure/machinery/weather_siren/Destroy() - weather_notify_objects -= src + GLOB.weather_notify_objects -= src . = ..() /obj/structure/machinery/weather_siren/power_change() diff --git a/code/game/objects/effects/decals/cleanable/fuel.dm b/code/game/objects/effects/decals/cleanable/fuel.dm index 3e245f760e21..a3f5f2d4e1a7 100644 --- a/code/game/objects/effects/decals/cleanable/fuel.dm +++ b/code/game/objects/effects/decals/cleanable/fuel.dm @@ -24,7 +24,7 @@ if(amount < 5.0) return var/turf/S = loc if(!istype(S)) return - for(var/d in cardinal) + for(var/d in GLOB.cardinals) if(rand(25)) var/turf/target = get_step(src, d) var/turf/origin = get_turf(src) diff --git a/code/game/objects/effects/decals/posters.dm b/code/game/objects/effects/decals/posters.dm index c688c4e6fb67..7a8054efce1a 100644 --- a/code/game/objects/effects/decals/posters.dm +++ b/code/game/objects/effects/decals/posters.dm @@ -184,6 +184,12 @@ serial_number = pick(27,28,30,31) .=..() +/obj/structure/sign/poster/io + icon_state = "poster14" + +/obj/structure/sign/poster/io/Initialize() + serial_number = 14 + . = ..() //////////////// //Hero Posters// //////////////// diff --git a/code/game/objects/effects/decals/warning_stripes.dm b/code/game/objects/effects/decals/warning_stripes.dm index ce0802d72d8e..20c96c2ac737 100644 --- a/code/game/objects/effects/decals/warning_stripes.dm +++ b/code/game/objects/effects/decals/warning_stripes.dm @@ -91,6 +91,20 @@ /obj/effect/decal/sand_overlay/sand2/corner2 icon_state = "sand2_c" +/obj/effect/decal/grass_overlay + name = "grass edge" + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + unacidable = TRUE + icon = 'icons/turf/floors/auto_strata_grass.dmi' + layer = TURF_LAYER + +/obj/effect/decal/grass_overlay/grass1 + icon_state = "grass_outercorner" + +/obj/effect/decal/grass_overlay/grass1/inner + name = "grass edge" + icon_state = "grass_innercorner" + /obj/effect/decal/siding name = "siding" icon = 'icons/turf/floors/floors.dmi' diff --git a/code/game/objects/effects/effect_system/chemsmoke.dm b/code/game/objects/effects/effect_system/chemsmoke.dm index eeb17f7c98d0..0c74912ceb25 100644 --- a/code/game/objects/effects/effect_system/chemsmoke.dm +++ b/code/game/objects/effects/effect_system/chemsmoke.dm @@ -195,7 +195,7 @@ chemholder.reagents.copy_to(smoke, chemholder.reagents.total_volume / dist, safety = 1) //copy reagents to the smoke so mob/breathe() can handle inhaling the reagents smoke.icon = I smoke.layer = FLY_LAYER - smoke.setDir(pick(cardinal)) + smoke.setDir(pick(GLOB.cardinals)) smoke.pixel_x = -32 + rand(-8,8) smoke.pixel_y = -32 + rand(-8,8) walk_to(smoke, T) @@ -229,7 +229,7 @@ while(pending.len) for(var/turf/current in pending) - for(var/D in cardinal) + for(var/D in GLOB.cardinals) var/turf/target = get_step(current, D) if(wallList) if(istype(target, /turf/closed/wall)) diff --git a/code/game/objects/effects/effect_system/effect_system.dm b/code/game/objects/effects/effect_system/effect_system.dm index 49342af8514f..2e2203682798 100644 --- a/code/game/objects/effects/effect_system/effect_system.dm +++ b/code/game/objects/effects/effect_system/effect_system.dm @@ -41,10 +41,10 @@ would spawn and follow the beaker, even if it is carried or thrown. // will always spawn at the items location, even if it's moved. /* Example: -var/datum/effect_system/steam_spread/steam = new /datum/effect_system/steam_spread() -- creates new system -steam.set_up(5, 0, mob.loc) -- sets up variables -OPTIONAL: steam.attach(mob) -steam.start() -- spawns the effect + var/datum/effect_system/steam_spread/steam = new /datum/effect_system/steam_spread() -- creates new system + steam.set_up(5, 0, mob.loc) -- sets up variables + OPTIONAL: steam.attach(mob) + steam.start() -- spawns the effect */ ///////////////////////////////////////////// /obj/effect/particle_effect/steam @@ -71,9 +71,9 @@ steam.start() -- spawns the effect var/obj/effect/particle_effect/steam/steam = new /obj/effect/particle_effect/steam(location) var/direction if(cardinals) - direction = pick(cardinal) + direction = pick(GLOB.cardinals) else - direction = pick(alldirs) + direction = pick(GLOB.alldirs) for(i=0, i0) S.spread_smoke() @@ -548,7 +548,7 @@ if(QDELETED(src)) return var/turf/U = get_turf(src) if(!U) return - for(var/i in cardinal) + for(var/i in GLOB.cardinals) if(direction && i != direction) continue var/turf/T = get_step(U, i) @@ -569,7 +569,7 @@ if(istype(A, /obj/flamer_fire)) qdel(A) - S.setDir(pick(cardinal)) + S.setDir(pick(GLOB.cardinals)) S.time_to_live = time_to_live if(S.amount>0) S.spread_smoke() diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm index 56c6ae45cda7..aa5e2ec400e2 100644 --- a/code/game/objects/effects/glowshroom.dm +++ b/code/game/objects/effects/glowshroom.dm @@ -46,7 +46,7 @@ set background = 1 var/direction = 16 - for(var/wallDir in cardinal) + for(var/wallDir in GLOB.cardinals) var/turf/newTurf = get_step(location,wallDir) if(istype(newTurf, /turf/closed/wall)) direction |= wallDir diff --git a/code/game/objects/effects/landmarks/corpsespawner.dm b/code/game/objects/effects/landmarks/corpsespawner.dm index fe338bceabfe..27a717f58ba8 100644 --- a/code/game/objects/effects/landmarks/corpsespawner.dm +++ b/code/game/objects/effects/landmarks/corpsespawner.dm @@ -135,7 +135,7 @@ /obj/effect/landmark/corpsespawner/wy/manager/burst name = "Burst Corporate Supervisor" - equip_path = /datum/equipment_preset/corpse/ua_riot/burst + equip_path = /datum/equipment_preset/corpse/wy/manager/burst ///////////Faction Specific Corpses////////////////////// diff --git a/code/game/objects/effects/landmarks/item_pool.dm b/code/game/objects/effects/landmarks/item_pool.dm index e01a6bbc3fd0..a5e628cd656b 100644 --- a/code/game/objects/effects/landmarks/item_pool.dm +++ b/code/game/objects/effects/landmarks/item_pool.dm @@ -13,10 +13,10 @@ /obj/effect/landmark/item_pool_spawner/Initialize(mapload, ...) . = ..() - item_pool_landmarks += src + GLOB.item_pool_landmarks += src /obj/effect/landmark/item_pool_spawner/Destroy() - item_pool_landmarks -= src + GLOB.item_pool_landmarks -= src . = ..() /obj/effect/landmark/item_pool_spawner/corsat_bio_lock diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index 16f30eaf0fd2..ce0fd5506cd7 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -176,17 +176,17 @@ user = _user if(squad_name) name = "[squad_name] laser" - if(user && user.faction && cas_groups[user.faction]) + if(user && user.faction && GLOB.cas_groups[user.faction]) signal = new(src) signal.name = name signal.target_id = tracking_id signal.linked_cam = new(loc, name) - cas_groups[user.faction].add_signal(signal) + GLOB.cas_groups[user.faction].add_signal(signal) /obj/effect/overlay/temp/laser_target/Destroy() if(signal) - cas_groups[user.faction].remove_signal(signal) + GLOB.cas_groups[user.faction].remove_signal(signal) if(signal.linked_cam) qdel(signal.linked_cam) signal.linked_cam = null @@ -225,7 +225,7 @@ effect_duration = 10 /obj/effect/overlay/temp/emp_sparks/New(loc) - setDir(pick(cardinal)) + setDir(pick(GLOB.cardinals)) ..() /obj/effect/overlay/temp/emp_pulse diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm index 382b92489baa..77b69f79e86f 100644 --- a/code/game/objects/effects/spawners/gibspawner.dm +++ b/code/game/objects/effects/spawners/gibspawner.dm @@ -99,7 +99,7 @@ gibamounts = list(1,1,1) /obj/effect/spawner/gibspawner/human/Initialize(mapload, list/viruses, mob/living/ml, fleshcolor, bloodcolor) - gibdirections = list(alldirs, alldirs, list()) + gibdirections = list(GLOB.alldirs, GLOB.alldirs, list()) . = ..() /obj/effect/spawner/gibspawner/xeno @@ -107,7 +107,7 @@ gibamounts = list(1,1,1) /obj/effect/spawner/gibspawner/xeno/Initialize(mapload, list/viruses, mob/living/ml, fleshcolor, bloodcolor) - gibdirections = list(alldirs, alldirs, list()) + gibdirections = list(GLOB.alldirs, GLOB.alldirs, list()) . = ..() /obj/effect/spawner/gibspawner/robot @@ -116,6 +116,6 @@ gibamounts = list(1,1,1,1,1,1) /obj/effect/spawner/gibspawner/robot/Initialize(mapload, list/viruses, mob/living/ml, fleshcolor, bloodcolor) - gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs) + gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, GLOB.alldirs) gibamounts[6] = pick(0,1,2) . = ..() diff --git a/code/game/objects/effects/spawners/random.dm b/code/game/objects/effects/spawners/random.dm index d302e7794f8b..388e9f289cd7 100644 --- a/code/game/objects/effects/spawners/random.dm +++ b/code/game/objects/effects/spawners/random.dm @@ -342,9 +342,9 @@ var/gunpath = pick(guns) var/ammopath if(istype(gunpath, /obj/item/weapon/gun/shotgun)) - ammopath = pick(shotgun_boxes_12g) + ammopath = pick(GLOB.shotgun_boxes_12g) else if(istype(gunpath, /obj/item/weapon/gun/launcher/grenade)) - ammopath = pick(grenade_packets) + ammopath = pick(GLOB.grenade_packets) else ammopath = guns[gunpath] spawn_weapon_on_floor(gunpath, ammopath, rand(mags_min, mags_max)) @@ -358,7 +358,7 @@ if(gunpath) gun = new gunpath(spawnloc) if(scatter) - var/direction = pick(alldirs) + var/direction = pick(GLOB.alldirs) var/turf/turf = get_step(gun, direction) if(!turf || turf.density) return @@ -368,7 +368,7 @@ ammo = new ammopath(spawnloc) if(scatter) for(i=0, i\The [src] have been [pick(W.attack_verb)] with \the [W][(user ? "by [user]." : ".")]")) else visible_message(SPAN_DANGER("\The [src] have been attacked with \the [W][(user ? "by [user]." : ".")]")) diff --git a/code/game/objects/explosion_recursive.dm b/code/game/objects/explosion_recursive.dm index 82566c80302f..2ec61b0cc1f1 100644 --- a/code/game/objects/explosion_recursive.dm +++ b/code/game/objects/explosion_recursive.dm @@ -139,7 +139,7 @@ explosion resistance exactly as much as their health //spread in each ordinal direction var/direction_angle = dir2angle(direction) - for(var/spread_direction in alldirs) + for(var/spread_direction in GLOB.alldirs) var/spread_power = power if(direction) //false if, for example, this turf was the explosion source @@ -325,7 +325,7 @@ explosion resistance exactly as much as their health return if(!direction) - direction = pick(alldirs) + direction = pick(GLOB.alldirs) var/range = min(round(severity/src.w_class * 0.2, 1), 14) if(!direction) range = round( range/2 ,1) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index f6eaff2713ec..11da4cce6d98 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -795,7 +795,7 @@ cases. Override_icon_state should be a list.*/ /obj/item/proc/showoff(mob/user) - var/list/viewers = get_mobs_in_view(world_view_size, user) + var/list/viewers = get_mobs_in_view(GLOB.world_view_size, user) user.langchat_speech("holds up [src].", viewers, GLOB.all_languages, skip_language_check = TRUE, animation_style = LANGCHAT_FAST_POP, additional_styles = list("langchat_small", "emote")) for (var/mob/M in viewers) M.show_message("[user] holds up [src]. Take a closer look.", SHOW_MESSAGE_VISIBLE) @@ -850,7 +850,7 @@ cases. Override_icon_state should be a list.*/ UnregisterSignal(user, COMSIG_MOB_MOVE_OR_LOOK) //General reset in case anything goes wrong, the view will always reset to default unless zooming in. if(user.client) - user.client.change_view(world_view_size, src) + user.client.change_view(GLOB.world_view_size, src) user.client.pixel_x = 0 user.client.pixel_y = 0 diff --git a/code/game/objects/items/books/manuals.dm b/code/game/objects/items/books/manuals.dm index ba2a30c35c7d..0854d2ec1b06 100644 --- a/code/game/objects/items/books/manuals.dm +++ b/code/game/objects/items/books/manuals.dm @@ -1302,9 +1302,9 @@ /obj/item/book/manual/orbital_cannon_manual/New() . = ..() - LAZYADD(objects_of_interest, src) + LAZYADD(GLOB.objects_of_interest, src) /obj/item/book/manual/orbital_cannon_manual/Destroy() . = ..() - LAZYREMOVE(objects_of_interest, src) + LAZYREMOVE(GLOB.objects_of_interest, src) diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index a5e0eafe2f91..ac5136b07a4a 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -80,7 +80,7 @@ /// actual job var/rank = null /// Marine's paygrade - var/paygrade = "ME1" + var/paygrade = PAY_SHORT_CIV /// For medics and engineers to 'claim' a locker var/claimedgear = 1 @@ -97,6 +97,21 @@ . = ..() screen_loc = null +/obj/item/card/id/proc/GetJobName() //Used in secHUD icon generation + + var/job_icons = get_all_job_icons() + var/centcom = get_all_centcom_jobs() + + if(assignment in job_icons) + return assignment//Check if the job has a hud icon + if(rank in job_icons) + return rank + if(assignment in centcom) + return "Centcom"//Return with the NT logo if it is a Centcom job + if(rank in centcom) + return "Centcom" + return "Unknown" //Return unknown if none of the above apply + /obj/item/card/id/attack_self(mob/user as mob) ..() user.visible_message("[user] shows you: [icon2html(src, viewers(user))] [name]: assignment: [assignment]") diff --git a/code/game/objects/items/circuitboards/computer.dm b/code/game/objects/items/circuitboards/computer.dm index 122136f6f2fa..08dcfc6964a6 100644 --- a/code/game/objects/items/circuitboards/computer.dm +++ b/code/game/objects/items/circuitboards/computer.dm @@ -278,7 +278,7 @@ to_chat(usr, "No input found please hang up and try your call again.") return var/list/tempnetwork = splittext(input, ",") - tempnetwork = difflist(tempnetwork,RESTRICTED_CAMERA_NETWORKS,1) + tempnetwork = difflist(tempnetwork,GLOB.RESTRICTED_CAMERA_NETWORKS,1) if(tempnetwork.len < 1) to_chat(usr, "No network found please hang up and try your call again.") return @@ -287,14 +287,12 @@ /obj/item/circuitboard/computer/rdconsole/attackby(obj/item/I as obj, mob/user as mob) if(HAS_TRAIT(I, TRAIT_TOOL_SCREWDRIVER)) - user.visible_message(SPAN_NOTICE("\the [user] adjusts the jumper on the [src]'s access protocol pins."), SPAN_NOTICE("You adjust the jumper on the access protocol pins.")) + user.visible_message(SPAN_NOTICE("[user] adjusts the jumper on [src]'s access protocol pins."), SPAN_NOTICE("You adjust the jumper on the access protocol pins.")) if(src.build_path == /obj/structure/machinery/computer/rdconsole/core) src.name = "Circuit Board (RD Console - Robotics)" src.build_path = /obj/structure/machinery/computer/rdconsole/robotics - to_chat(user, SPAN_NOTICE(" Access protocols set to robotics.")) + to_chat(user, SPAN_NOTICE("Access protocols set to robotics.")) else src.name = "Circuit Board (RD Console)" src.build_path = /obj/structure/machinery/computer/rdconsole/core - to_chat(user, SPAN_NOTICE(" Access protocols set to default.")) - - + to_chat(user, SPAN_NOTICE("Access protocols set to default.")) diff --git a/code/game/objects/items/circuitboards/machine.dm b/code/game/objects/items/circuitboards/machine.dm index ad4c31cb11e9..248d0d5c8885 100644 --- a/code/game/objects/items/circuitboards/machine.dm +++ b/code/game/objects/items/circuitboards/machine.dm @@ -141,7 +141,7 @@ to destroy them and players will be able to make replacements. if(HAS_TRAIT(I, TRAIT_TOOL_SCREWDRIVER)) machine_dir = turn(machine_dir, 90) init_dirs = machine_dir - user.visible_message(SPAN_NOTICE("\The [user] adjusts the jumper on the [src]'s port configuration pins."), SPAN_NOTICE("You adjust the jumper on the port configuration pins. Now set to [dir2text(machine_dir)].")) + user.visible_message(SPAN_NOTICE("[user] adjusts the jumper on [src]'s port configuration pins."), SPAN_NOTICE("You adjust the jumper on the port configuration pins. Now set to [dir2text(machine_dir)].")) return /obj/item/circuitboard/machine/unary_atmos/get_examine_text(mob/user) @@ -300,5 +300,3 @@ to destroy them and players will be able to make replacements. // Board itself is high tech. Coils have to be ordered from cargo or salvaged from existing SMESs. frame_desc = "Requires 1 superconducting magnetic coil and 30 wires." req_components = list(/obj/item/stock_parts/smes_coil = 1, /obj/item/stack/cable_coil = 30) - - diff --git a/code/game/objects/items/circuitboards/robot_modules.dm b/code/game/objects/items/circuitboards/robot_modules.dm index 2e5185353852..04fcff10fa2b 100644 --- a/code/game/objects/items/circuitboards/robot_modules.dm +++ b/code/game/objects/items/circuitboards/robot_modules.dm @@ -9,13 +9,12 @@ var/list/stacktypes /obj/item/circuitboard/robot_module/emp_act(severity) + . = ..() if(modules) for(var/obj/O in modules) O.emp_act(severity) if(emag) emag.emp_act(severity) - ..() - return /obj/item/circuitboard/robot_module/Initialize() diff --git a/code/game/objects/items/devices/autopsy_scanner.dm b/code/game/objects/items/devices/autopsy_scanner.dm index 8aa2053fee8b..6703ead88147 100644 --- a/code/game/objects/items/devices/autopsy_scanner.dm +++ b/code/game/objects/items/devices/autopsy_scanner.dm @@ -17,12 +17,12 @@ /obj/item/device/autopsy_scanner/Initialize() . = ..() - LAZYADD(objects_of_interest, src) + LAZYADD(GLOB.objects_of_interest, src) /obj/item/device/autopsy_scanner/Destroy() . = ..() - LAZYREMOVE(objects_of_interest, src) + LAZYREMOVE(GLOB.objects_of_interest, src) /datum/autopsy_data_scanner var/weapon = null // this is the DEFINITE weapon type that was used @@ -90,7 +90,7 @@ var/scan_data = "" if(timeofdeath) - scan_data += "Time of death: [worldtime2text("hh:mm", timeofdeath)] [time2text(timeofdeath, "DDD MMM DD [game_year]")]

    " + scan_data += "Time of death: [worldtime2text("hh:mm", timeofdeath)] [time2text(timeofdeath, "DDD MMM DD [GLOB.game_year]")]

    " var/n = 1 for(var/wdata_idx in wdata) @@ -139,7 +139,7 @@ if(damaging_weapon) scan_data += "Severity: [damage_desc]
    " scan_data += "Hits by weapon: [total_hits]
    " - scan_data += "Approximate time of wound infliction: [worldtime2text("hh:mm", age)] [time2text(age, "DDD MMM DD [game_year]")]
    " + scan_data += "Approximate time of wound infliction: [worldtime2text("hh:mm", age)] [time2text(age, "DDD MMM DD [GLOB.game_year]")]
    " scan_data += "Affected limbs: [D.organ_names]
    " scan_data += "Possible weapons:
    " for(var/weapon_name in weapon_chances) diff --git a/code/game/objects/items/devices/binoculars.dm b/code/game/objects/items/devices/binoculars.dm index f8cf52473114..a9b7706bcfb7 100644 --- a/code/game/objects/items/devices/binoculars.dm +++ b/code/game/objects/items/devices/binoculars.dm @@ -215,7 +215,7 @@ /obj/item/device/binoculars/range/designator/Initialize() . = ..() - tracking_id = ++cas_tracking_id_increment + tracking_id = ++GLOB.cas_tracking_id_increment /obj/item/device/binoculars/range/designator/Destroy() QDEL_NULL(laser) diff --git a/code/game/objects/items/devices/camera_bug.dm b/code/game/objects/items/devices/camera_bug.dm index 80a0d603282f..1549fbd3739b 100644 --- a/code/game/objects/items/devices/camera_bug.dm +++ b/code/game/objects/items/devices/camera_bug.dm @@ -10,7 +10,7 @@ ..() var/list/cameras = new/list() - for (var/obj/structure/machinery/camera/C in cameranet.cameras) + for (var/obj/structure/machinery/camera/C in GLOB.cameranet.cameras) if (C.bugged && C.status) cameras.Add(C) if (length(cameras) == 0) diff --git a/code/game/objects/items/devices/cictablet.dm b/code/game/objects/items/devices/cictablet.dm index 6abd70980136..3f87b2bfbea2 100644 --- a/code/game/objects/items/devices/cictablet.dm +++ b/code/game/objects/items/devices/cictablet.dm @@ -24,7 +24,10 @@ COOLDOWN_DECLARE(distress_cooldown) /obj/item/device/cotablet/Initialize() - tacmap = new(src, minimap_type) + if(announcement_faction == FACTION_MARINE) + tacmap = new /datum/tacmap/drawing(src, minimap_type) + else + tacmap = new(src, minimap_type) // Non-drawing version if(SSticker.mode && MODE_HAS_FLAG(MODE_FACTION_CLASH)) add_pmcs = FALSE else if(SSticker.current_state < GAME_STATE_PLAYING) @@ -60,7 +63,7 @@ /obj/item/device/cotablet/ui_data(mob/user) var/list/data = list() - data["alert_level"] = security_level + data["alert_level"] = GLOB.security_level data["evac_status"] = SShijack.evac_status data["endtime"] = announcement_cooldown data["distresstime"] = distress_cooldown @@ -131,7 +134,7 @@ if(announcement_faction != FACTION_MARINE) return - if(security_level < SEC_LEVEL_RED) + if(GLOB.security_level < SEC_LEVEL_RED) to_chat(usr, SPAN_WARNING("The ship must be under red alert in order to enact evacuation procedures.")) return FALSE @@ -152,7 +155,7 @@ if(!SSticker.mode) return FALSE //Not a game mode? - if(security_level == SEC_LEVEL_DELTA) + if(GLOB.security_level == SEC_LEVEL_DELTA) to_chat(usr, SPAN_WARNING("The ship is already undergoing self destruct procedures!")) return FALSE diff --git a/code/game/objects/items/devices/cloaking.dm b/code/game/objects/items/devices/cloaking.dm index 05e7786744e2..b0c5ed799977 100644 --- a/code/game/objects/items/devices/cloaking.dm +++ b/code/game/objects/items/devices/cloaking.dm @@ -47,12 +47,12 @@ src.add_fingerprint(user) if(chameleon_on) user.alpha = 25 - to_chat(user, SPAN_NOTICE("You activate the [src].")) + to_chat(user, SPAN_NOTICE("You activate [src].")) spark_system.start() src.icon_state = "shield1" else user.alpha = initial(user.alpha) - to_chat(user, SPAN_NOTICE("You deactivate the [src].")) + to_chat(user, SPAN_NOTICE("You deactivate [src].")) src.icon_state = "shield0" spark_system.start() diff --git a/code/game/objects/items/devices/coins.dm b/code/game/objects/items/devices/coins.dm index 139ea1cbac8c..6c00364642da 100644 --- a/code/game/objects/items/devices/coins.dm +++ b/code/game/objects/items/devices/coins.dm @@ -67,12 +67,6 @@ icon_state = "coin_platinum" black_market_value = 35 -/obj/item/coin/marine/synth - name = "synthetic experimental tool redemption token" - desc = "Insert this into a synthetic experimental tools vendor in order to access a variety of experimental support tools." - icon_state = "coin_synth" - black_market_value = 0 - /obj/item/coin/chitin name = "chitin coin" desc = "Durable alien chitin pressed into a coin. There are much better uses for chitin..." @@ -121,3 +115,33 @@ comment = "heads" user.visible_message(SPAN_NOTICE("[user] has thrown \the [src]. It lands on [comment]! "), \ SPAN_NOTICE("You throw \the [src]. It lands on [comment]! ")) + + +/obj/item/coin/marine + name = "marine equipment token" + desc = "I wonder what it does?" + icon_state = "coin_copper" + black_market_value = 0 + /// What is the token for? + var/token_type = VEND_TOKEN_VOID + +/obj/item/coin/marine/attackby(obj/item/W as obj, mob/user as mob) //To remove attaching a string functionality + return + +/obj/item/coin/marine/engineer + name = "marine engineer support token" + desc = "Insert this into an engineer vendor in order to access a support weapon." + icon_state = "coin_gold" + token_type = VEND_TOKEN_ENGINEER + +/obj/item/coin/marine/specialist + name = "marine specialist weapon token" + desc = "Insert this into a USCM equipment vendor in order to access a single highly dangerous weapon." + icon_state = "coin_diamond" + token_type = VEND_TOKEN_SPEC + +/obj/item/coin/marine/synth + name = "synthetic experimental tool redemption token" + desc = "Insert this into a synthetic experimental tools vendor in order to access a variety of experimental support tools." + icon_state = "coin_synth" + token_type = VEND_TOKEN_SYNTH diff --git a/code/game/objects/items/devices/device.dm b/code/game/objects/items/devices/device.dm index d3058960233c..23fe7b86bb3a 100644 --- a/code/game/objects/items/devices/device.dm +++ b/code/game/objects/items/devices/device.dm @@ -7,7 +7,7 @@ /obj/item/device/Initialize(mapload, ...) . = ..() - serial_number = "[rand(0,9)][pick(alphabet_uppercase)][rand(0,9)][rand(0,9)][rand(0,9)][rand(0,9)][pick(alphabet_uppercase)]" + serial_number = "[rand(0,9)][pick(GLOB.alphabet_uppercase)][rand(0,9)][rand(0,9)][rand(0,9)][rand(0,9)][pick(GLOB.alphabet_uppercase)]" /obj/item/device/get_examine_text(mob/user) . = ..() diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 0a7709aa6101..33a93ed18db5 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -155,6 +155,7 @@ do_flash(user = user, aoe = TRUE) /obj/item/device/flash/emp_act(severity) + . = ..() if(broken) return switch(flashes_stored) if(0 to 5) @@ -168,7 +169,6 @@ if(M.flash_eyes()) M.apply_effect(10, WEAKEN) M.visible_message(SPAN_DISARM("[M] is blinded by \the [src]!")) - ..() /obj/item/device/flash/synthetic name = "synthetic flash" diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 114964464a25..58e86998f39a 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -487,13 +487,13 @@ /obj/item/device/flashlight/flare/signal/activate_signal(mob/living/carbon/human/user) ..() - if(faction && cas_groups[faction]) + if(faction && GLOB.cas_groups[faction]) signal = new(src) - signal.target_id = ++cas_tracking_id_increment + signal.target_id = ++GLOB.cas_tracking_id_increment name = "[user.assigned_squad ? user.assigned_squad.name : "X"]-[signal.target_id] flare" signal.name = name signal.linked_cam = new(loc, name) - cas_groups[user.faction].add_signal(signal) + GLOB.cas_groups[user.faction].add_signal(signal) anchored = TRUE if(activate_message) visible_message(SPAN_DANGER("[src]'s flame reaches full strength. It's fully active now."), null, 5) @@ -513,14 +513,14 @@ /obj/item/device/flashlight/flare/signal/Destroy() STOP_PROCESSING(SSobj, src) if(signal) - cas_groups[faction].remove_signal(signal) + GLOB.cas_groups[faction].remove_signal(signal) QDEL_NULL(signal) return ..() /obj/item/device/flashlight/flare/signal/turn_off() anchored = FALSE if(signal) - cas_groups[faction].remove_signal(signal) + GLOB.cas_groups[faction].remove_signal(signal) qdel(signal) ..() @@ -549,9 +549,9 @@ turn_on() faction = FACTION_MARINE signal = new(src) - signal.target_id = ++cas_tracking_id_increment + signal.target_id = ++GLOB.cas_tracking_id_increment name += " [rand(100, 999)]" signal.name = name signal.linked_cam = new(loc, name) - cas_groups[FACTION_MARINE].add_signal(signal) + GLOB.cas_groups[FACTION_MARINE].add_signal(signal) anchored = TRUE diff --git a/code/game/objects/items/devices/helmet_visors.dm b/code/game/objects/items/devices/helmet_visors.dm index 596409c88c8b..c3c3f9597060 100644 --- a/code/game/objects/items/devices/helmet_visors.dm +++ b/code/game/objects/items/devices/helmet_visors.dm @@ -61,12 +61,12 @@ /// Called by toggle_visor() to activate the visor's effects /obj/item/device/helmet_visor/proc/activate_visor(obj/item/clothing/head/helmet/marine/attached_helmet, mob/living/carbon/human/user) - var/datum/mob_hud/current_mob_hud = huds[hud_type] + var/datum/mob_hud/current_mob_hud = GLOB.huds[hud_type] current_mob_hud.add_hud_to(user, attached_helmet) /// Called by toggle_visor() to deactivate the visor's effects /obj/item/device/helmet_visor/proc/deactivate_visor(obj/item/clothing/head/helmet/marine/attached_helmet, mob/living/carbon/human/user) - var/datum/mob_hud/current_mob_hud = huds[hud_type] + var/datum/mob_hud/current_mob_hud = GLOB.huds[hud_type] current_mob_hud.remove_hud_from(user, attached_helmet) /// Called by /obj/item/clothing/head/helmet/marine/get_examine_text(mob/user) to get extra examine text for this visor @@ -112,7 +112,7 @@ /obj/item/device/helmet_visor/medical/advanced/ui_data(mob/user) var/list/data = list( - "published_documents" = chemical_data.research_publications, + "published_documents" = GLOB.chemical_data.research_publications, "terminal_view" = FALSE ) return data @@ -140,7 +140,7 @@ if ("read_document") var/print_type = params["print_type"] var/print_title = params["print_title"] - var/obj/item/paper/research_report/report = chemical_data.get_report(print_type, print_title) + var/obj/item/paper/research_report/report = GLOB.chemical_data.get_report(print_type, print_title) if(report) report.read_paper(user) return @@ -311,14 +311,14 @@ . = ..() for(var/type in hud_type) - var/datum/mob_hud/current_mob_hud = huds[type] + var/datum/mob_hud/current_mob_hud = GLOB.huds[type] current_mob_hud.add_hud_to(user, attached_helmet) /obj/item/device/helmet_visor/night_vision/marine_raider/deactivate_visor(obj/item/clothing/head/helmet/marine/attached_helmet, mob/living/carbon/human/user) . = ..() for(var/type in hud_type) - var/datum/mob_hud/current_mob_hud = huds[type] + var/datum/mob_hud/current_mob_hud = GLOB.huds[type] current_mob_hud.remove_hud_from(user, attached_helmet) /obj/item/device/helmet_visor/night_vision/marine_raider/process(delta_time) diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 40ef8792aedb..3f285b358fb2 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -121,7 +121,7 @@ if(target.status != LIGHT_OK) if(CanUse(U)) if(!Use(U)) return - to_chat(U, SPAN_NOTICE("You replace the [target.fitting] with the [src].")) + to_chat(U, SPAN_NOTICE("You replace the [target.fitting] with [src].")) if(target.status != LIGHT_EMPTY) diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index 273ced980b44..a92135b9d7ed 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -53,8 +53,8 @@ var/area/A = get_area(src) var/APC = A? A.get_apc() : null if(APC) - to_chat(user, SPAN_NOTICE("The local APC is located at [SPAN_BOLD("[get_dist(src, APC)] units [dir2text(get_dir(src, APC))]")].")) - user.balloon_alert(user, "[get_dist(src, APC)] units [dir2text(get_dir(src, APC))]") + to_chat(user, SPAN_NOTICE("The local APC is located at [SPAN_BOLD("[get_dist(src, APC)] units [dir2text(Get_Compass_Dir(src, APC))]")].")) + user.balloon_alert(user, "[get_dist(src, APC)] units [dir2text(Get_Compass_Dir(src, APC))]") else to_chat(user, SPAN_WARNING("ERROR: Could not locate local APC.")) user.balloon_alert(user, "could not locate!") diff --git a/code/game/objects/items/devices/personal_data_transmitter.dm b/code/game/objects/items/devices/personal_data_transmitter.dm index 6e8aa001cad3..98f8c60452ea 100644 --- a/code/game/objects/items/devices/personal_data_transmitter.dm +++ b/code/game/objects/items/devices/personal_data_transmitter.dm @@ -122,7 +122,7 @@ return var/dist = get_dist(self_turf, bracelet_turf) - var/direction = dir2text_short(get_dir(self_turf, bracelet_turf)) + var/direction = dir2text_short(Get_Compass_Dir(self_turf, bracelet_turf)) if(dist > 1) to_chat(user, SPAN_BOLDNOTICE("The display on \the [src] lights up: [dist]-[direction]")) else diff --git a/code/game/objects/items/devices/pinpointer.dm b/code/game/objects/items/devices/pinpointer.dm index 7ec3118ef96b..2f5d9ffe9d5f 100644 --- a/code/game/objects/items/devices/pinpointer.dm +++ b/code/game/objects/items/devices/pinpointer.dm @@ -31,7 +31,7 @@ if(!the_disk) icon_state = "pinonnull" return - setDir(get_dir(src,the_disk)) + setDir(Get_Compass_Dir(src,the_disk)) switch(get_dist(src,the_disk)) if(0) icon_state = "pinondirect" @@ -45,7 +45,7 @@ /obj/item/device/pinpointer/get_examine_text(mob/user) . = ..() - for(var/obj/structure/machinery/nuclearbomb/bomb in machines) + for(var/obj/structure/machinery/nuclearbomb/bomb in GLOB.machines) if(bomb.timing) . += "Extreme danger. Arming signal detected. Time remaining: [bomb.timeleft]" @@ -80,7 +80,7 @@ if(!location) icon_state = "pinonnull" return - setDir(get_dir(src,location)) + setDir(Get_Compass_Dir(src,location)) switch(get_dist(src,location)) if(0) icon_state = "pinondirect" @@ -99,7 +99,7 @@ if(!target) icon_state = "pinonnull" return - setDir(get_dir(src,target)) + setDir(Get_Compass_Dir(src,target)) switch(get_dist(src,target)) if(0) icon_state = "pinondirect" diff --git a/code/game/objects/items/devices/pipe_painter.dm b/code/game/objects/items/devices/pipe_painter.dm index 840098cbc492..a69fe64c2565 100644 --- a/code/game/objects/items/devices/pipe_painter.dm +++ b/code/game/objects/items/devices/pipe_painter.dm @@ -9,7 +9,7 @@ /obj/item/device/pipe_painter/New() ..() modes = new() - for(var/C in pipe_colors) + for(var/C in GLOB.pipe_colors) modes += "[C]" mode = pick(modes) @@ -26,7 +26,7 @@ to_chat(user, SPAN_DANGER("You must remove the plating first.")) return - P.change_color(pipe_colors[mode]) + P.change_color(GLOB.pipe_colors[mode]) /obj/item/device/pipe_painter/attack_self(mob/user) ..() diff --git a/code/game/objects/items/devices/portable_vendor.dm b/code/game/objects/items/devices/portable_vendor.dm index 65e2128a02c0..29e1d06018ae 100644 --- a/code/game/objects/items/devices/portable_vendor.dm +++ b/code/game/objects/items/devices/portable_vendor.dm @@ -210,6 +210,7 @@ s.start() /obj/item/device/portable_vendor/emp_act(severity) + . = ..() if (broken) return if (prob(40*severity)) diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index fb8640eeaa71..7ec941f1192b 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -59,8 +59,8 @@ verbs += /obj/item/device/radio/headset/proc/switch_tracker_target if(frequency) - for(var/cycled_channel in radiochannels) - if(radiochannels[cycled_channel] == frequency) + for(var/cycled_channel in GLOB.radiochannels) + if(GLOB.radiochannels[cycled_channel] == frequency) default_freq = cycled_channel /obj/item/device/radio/headset/Destroy() @@ -183,7 +183,7 @@ /obj/item/device/radio/headset/proc/recalculateChannels() for(var/ch_name in channels) - SSradio.remove_object(src, radiochannels[ch_name]) + SSradio.remove_object(src, GLOB.radiochannels[ch_name]) secure_radio_connections[ch_name] = null channels = list() translate_apollo = FALSE @@ -214,14 +214,14 @@ locate_setting = initial(locate_setting) for (var/ch_name in channels) - secure_radio_connections[ch_name] = SSradio.add_object(src, radiochannels[ch_name], RADIO_CHAT) + secure_radio_connections[ch_name] = SSradio.add_object(src, GLOB.radiochannels[ch_name], RADIO_CHAT) SStgui.update_uis(src) /obj/item/device/radio/headset/set_frequency(new_frequency) ..() if(frequency) - for(var/cycled_channel in radiochannels) - if(radiochannels[cycled_channel] == frequency) + for(var/cycled_channel in GLOB.radiochannels) + if(GLOB.radiochannels[cycled_channel] == frequency) default_freq = cycled_channel /obj/item/device/radio/headset/equipped(mob/living/carbon/human/user, slot) @@ -237,7 +237,7 @@ RegisterSignal(user, COMSIG_MOB_DEATH, PROC_REF(update_minimap_icon)) RegisterSignal(user, COMSIG_HUMAN_SET_UNDEFIBBABLE, PROC_REF(update_minimap_icon)) if(headset_hud_on) - var/datum/mob_hud/H = huds[hud_type] + var/datum/mob_hud/H = GLOB.huds[hud_type] H.add_hud_to(user, src) //squad leader locator is no longer invisible on our player HUD. if(user.mind && (user.assigned_squad || misc_tracking) && user.hud_used && user.hud_used.locate_leader) @@ -256,7 +256,7 @@ COMSIG_MOB_STAT_SET_ALIVE )) if(istype(user) && user.has_item_in_ears(src)) //dropped() is called before the inventory reference is update. - var/datum/mob_hud/H = huds[hud_type] + var/datum/mob_hud/H = GLOB.huds[hud_type] H.remove_hud_from(user, src) //squad leader locator is invisible again if(user.hud_used && user.hud_used.locate_leader) @@ -288,7 +288,7 @@ if(ishuman(usr)) var/mob/living/carbon/human/user = usr if(user.has_item_in_ears(src)) //worn - var/datum/mob_hud/H = huds[hud_type] + var/datum/mob_hud/H = GLOB.huds[hud_type] if(headset_hud_on) H.add_hud_to(usr, src) if(user.mind && (misc_tracking || user.assigned_squad) && user.hud_used?.locate_leader) @@ -808,7 +808,7 @@ set_frequency(frequency) for(var/ch_name in channels) - secure_radio_connections[ch_name] = SSradio.add_object(src, radiochannels[ch_name], RADIO_CHAT) + secure_radio_connections[ch_name] = SSradio.add_object(src, GLOB.radiochannels[ch_name], RADIO_CHAT) recalculateChannels() if(H.mind && H.hud_used && H.hud_used.locate_leader) //make SL tracker visible H.hud_used.locate_leader.alpha = 255 diff --git a/code/game/objects/items/devices/radio/listening_bugs.dm b/code/game/objects/items/devices/radio/listening_bugs.dm new file mode 100644 index 000000000000..4a84df071c60 --- /dev/null +++ b/code/game/objects/items/devices/radio/listening_bugs.dm @@ -0,0 +1,276 @@ +#define DISGUISE_REMOVE "remove disguise" +#define DISGUISE_RADIO "radio" +#define DISGUISE_PEN "pen" +#define DISGUISE_FOUNTAIN_PEN "fountain pen" +#define DISGUISE_ACCESS_TUNER "access tuner" +#define DISGUISE_WHISTLE "whistle" +#define DISGUISE_MASS_SPEC "mass-spectrometer" +#define DISGUISE_CAMERA "camera" +#define DISGUISE_ZIPPO "zippo lighter" +#define DISGUISE_TAPE_RECORDER "tape recorder" + +/obj/item/device/radio/listening_bug + name = "listening device" + desc = "A small, and disguisable, listening device." + + icon = 'icons/obj/items/devices.dmi' + icon_state = "voice0" + item_state = "analyzer" + + w_class = SIZE_TINY + volume = RADIO_VOLUME_RAISED + + broadcasting = FALSE + listening = FALSE + frequency = BUG_A_FREQ + canhear_range = 2 + freqlock = TRUE + /// If the bug is disguised or not. + var/ready_to_disguise = FALSE + var/disguised = FALSE + /// Whether or not the bug can be used to listen to its own channel. + var/prevent_snooping = FALSE + /// The ID tag of the device, for identification. + var/nametag = "Device" + +/obj/item/device/radio/listening_bug/ui_data(mob/user) + var/list/data = list() + + data["broadcasting"] = broadcasting + data["listening"] = listening + data["frequency"] = frequency + data["freqlock"] = freqlock + + var/list/radio_channels = list() + + for(var/channel in channels) + var/channel_key = channel_to_prefix(channel) + radio_channels += list(list( + "name" = channel, + "status" = channels[channel] & FREQ_LISTENING, + "hotkey" = channel_key)) + + data["channels"] = radio_channels + + data["command"] = volume + data["useCommand"] = use_volume + data["subspace"] = subspace_transmission + data["subspaceSwitchable"] = subspace_switchable + data["headset"] = FALSE + + return data + +/obj/item/device/radio/listening_bug/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + switch(action) + if("listen") + if(prevent_snooping) + to_chat(usr, SPAN_WARNING("This device cannot receive transmissions!")) + return + listening = !listening + return + if("subspace") + if(!ishuman(usr)) + return + var/mob/living/carbon/human/user = usr + if(!check_access(user.wear_id) && !check_access(user.get_active_hand())) + to_chat(user, SPAN_WARNING("You need an authenticated ID card to change this function!")) + return + if(subspace_switchable) + subspace_transmission = !subspace_transmission + var/initial_prevent = initial(prevent_snooping) + if(initial_prevent) + prevent_snooping = TRUE + if(!subspace_transmission) + prevent_snooping = FALSE + channels = list() + return + ..() + +/obj/item/device/radio/listening_bug/hear_talk(mob/M as mob, msg, verb = "says", datum/language/speaking = null) + var/processed_verb = "[SPAN_RED("\[LSTN [nametag]\]")] [verb]" + if(broadcasting) + if(get_dist(src, M) <= 7) + talk_into(M, msg,null,processed_verb,speaking) + +/obj/item/device/radio/listening_bug/afterattack(atom/target_atom, mob/user as mob, proximity) + if(!ready_to_disguise) + return ..() + + var/obj/item/target_item = target_atom + if(!istype(target_item) || target_item.anchored || target_item.w_class >= SIZE_LARGE) + to_chat(user, SPAN_WARNING("You cannot disguise the listening device as this object.")) + return FALSE + + var/confirm = tgui_alert(user, "Are you sure you wish to disguise the listening device as '[target_item]'?", "Confirm Choice", list("Yes","No"), 20 SECONDS) + if(confirm != "Yes") + return FALSE + + icon = target_item.icon + name = target_item.name + desc = target_item.desc + icon_state = target_item.icon_state + item_state = target_item.item_state + flags_equip_slot = target_item.flags_equip_slot + w_class = target_item.w_class + ready_to_disguise = FALSE + disguised = TRUE + +/obj/item/device/radio/listening_bug/get_examine_text(mob/user) + if(disguised) + . = list() + var/size + switch(w_class) + if(SIZE_TINY) + size = "tiny" + if(SIZE_SMALL) + size = "small" + if(SIZE_MEDIUM) + size = "normal-sized" + . += "This is a [blood_color ? blood_color != "#030303" ? "bloody " : "oil-stained " : ""][icon2html(src, user)][src.name]. It is a [size] item." + if(desc) + . += desc + if(desc_lore) + . += SPAN_NOTICE("This has an extended lore description.") + else + . = ..() + . += SPAN_INFO("[src] is set to frequency [get_bug_letter()].") + if(nametag != initial(nametag)) + . += SPAN_INFO("[src]'s nametag is set to '[nametag]'") + +/obj/item/device/radio/listening_bug/verb/change_disguise() + set name = "Change Disguise" + set category = "Object" + set src in usr + + if(usr.is_mob_incapacitated()) + to_chat(usr, SPAN_WARNING("You cannot do this while incapacitated!")) + return FALSE + + var/check = tgui_alert(usr, "Do you wish to change the disguise of this listening bug?", "Change Disguise?", list("Yes", "No")) + if(check != "Yes") + return FALSE + if(disguised) + var/remove_check = tgui_alert(usr, "Do you wish to remove the current disguise?", "Remove Disguise?", list("Yes","No")) + if(remove_check == "Yes") + icon = initial(icon) + name = initial(name) + desc = initial(desc) + icon_state = initial(icon_state) + item_state = initial(item_state) + flags_equip_slot = initial(flags_equip_slot) + w_class = initial(w_class) + disguised = FALSE + return TRUE + + to_chat(usr, SPAN_HELPFUL("You can now change the disguise of the device by selecting a normal, or smaller, sized object.")) + ready_to_disguise = TRUE + return TRUE + +/obj/item/device/radio/listening_bug/proc/get_bug_letter() + switch(frequency) + if(BUG_A_FREQ) + return "A" + if(BUG_B_FREQ) + return "B" + if(SEC_FREQ) + return "MP" + if(PVST_FREQ) + return "PVST" + if(HC_FREQ) + return "HC" + if(WY_FREQ, PMC_CCT_FREQ) + return "WY" + if(PMC_CMD_FREQ) + return "WYC" + if(UPP_CCT_FREQ, UPP_KDO_FREQ) + return "UPP" + else + return "X" + +#define OPTION_REMOVE "Remove Tag" +#define OPTION_NEW "New Tag" + +/obj/item/device/radio/listening_bug/verb/set_nametag() + set name = "Set Nametag" + set category = "Object" + set src in usr + + if(usr.is_mob_incapacitated()) + to_chat(usr, SPAN_WARNING("You cannot do this while incapacitated!")) + return FALSE + + var/check = tgui_alert(usr, "Do you wish to change the name tag of this listening bug?", "Change Name tag?", list("Yes", "No")) + if(check != "Yes") + return FALSE + + + var/new_nametag + var/remove + if(nametag != initial(nametag)) + remove = tgui_alert(usr, "Do you wish to remove the current nametag?", "Remove Nametag", list("Yes", "No")) + if(remove == "Yes") + new_nametag = initial(nametag) + else + new_nametag = tgui_input_text(usr, "What new name tag do you wish to use?", "New Name", initial(nametag), 6) + + if(!new_nametag || (new_nametag == nametag)) + return FALSE + + nametag = new_nametag + log_game("[key_name(usr)] set a listening device nametag to [new_nametag].") + return TRUE + +#undef OPTION_REMOVE +#undef OPTION_NEW + +/obj/item/device/radio/listening_bug/freq_a + frequency = BUG_A_FREQ + +/obj/item/device/radio/listening_bug/freq_b + frequency = BUG_B_FREQ + +/obj/item/device/radio/listening_bug/radio_linked + prevent_snooping = TRUE + subspace_transmission = TRUE + subspace_switchable = TRUE + +/obj/item/device/radio/listening_bug/radio_linked/mp + frequency = SEC_FREQ + req_one_access = list(ACCESS_MARINE_BRIG) + +/obj/item/device/radio/listening_bug/radio_linked/hc + frequency = HC_FREQ + req_one_access = list(ACCESS_MARINE_CO) +/obj/item/device/radio/listening_bug/radio_linked/hc/pvst + frequency = PVST_FREQ + +/obj/item/device/radio/listening_bug/radio_linked/wy + frequency = WY_FREQ + req_one_access = list(ACCESS_WY_EXEC, ACCESS_WY_SECURITY) + +/obj/item/device/radio/listening_bug/radio_linked/wy/pmc + frequency = PMC_CCT_FREQ + req_one_access = list(ACCESS_WY_EXEC, ACCESS_WY_SECURITY) + +/obj/item/device/radio/listening_bug/radio_linked/upp + frequency = UPP_CCT_FREQ + req_one_access = list(ACCESS_UPP_COMMANDO, ACCESS_UPP_SECURITY) + +/obj/item/device/radio/listening_bug/radio_linked/upp/commando + frequency = UPP_KDO_FREQ + req_one_access = list(ACCESS_UPP_COMMANDO) + + +// ENCRYPTION KEYS FOR LISTENING IN! +//REQURIES SUBSPACE ACTIVATION ON THE BUGS FIRST! +/obj/item/device/encryptionkey/listening_bug + desc = "A small encryption key for listening to a secret broadcasting device! Unlikely to work if the device is not using subspace communications!" + icon_state = "stripped_key" + +/obj/item/device/encryptionkey/listening_bug/freq_a + name = "Listening Bug Encryption Key (A)" + channels = list(RADIO_CHANNEL_BUG_A = TRUE) + +/obj/item/device/encryptionkey/listening_bug/freq_b + name = "Listening Bug Encryption Key (B)" + channels = list(RADIO_CHANNEL_BUG_B = TRUE) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 2092ffa108c6..c628758c74e8 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -73,7 +73,7 @@ set_frequency(frequency) for (var/ch_name in channels) - secure_radio_connections[ch_name] = SSradio.add_object(src, radiochannels[ch_name], RADIO_CHAT) + secure_radio_connections[ch_name] = SSradio.add_object(src, GLOB.radiochannels[ch_name], RADIO_CHAT) flags_atom |= USES_HEARING @@ -425,11 +425,11 @@ else return /obj/item/device/radio/emp_act(severity) + . = ..() broadcasting = FALSE listening = FALSE for (var/ch_name in channels) channels[ch_name] = 0 - ..() /////////////////////////////// //////////Borg Radios////////// @@ -461,7 +461,7 @@ for(var/ch_name in channels) - SSradio.remove_object(src, radiochannels[ch_name]) + SSradio.remove_object(src, GLOB.radiochannels[ch_name]) secure_radio_connections[ch_name] = null @@ -509,7 +509,7 @@ src.channels[ch_name] += keyslot.channels[ch_name] for (var/ch_name in src.channels) - secure_radio_connections[ch_name] = SSradio.add_object(src, radiochannels[ch_name], RADIO_CHAT) + secure_radio_connections[ch_name] = SSradio.add_object(src, GLOB.radiochannels[ch_name], RADIO_CHAT) SStgui.update_uis(src) @@ -563,11 +563,11 @@ /obj/item/device/radio/proc/config(op) for (var/ch_name in channels) - SSradio.remove_object(src, radiochannels[ch_name]) + SSradio.remove_object(src, GLOB.radiochannels[ch_name]) secure_radio_connections = new channels = op for (var/ch_name in op) - secure_radio_connections[ch_name] = SSradio.add_object(src, radiochannels[ch_name], RADIO_CHAT) + secure_radio_connections[ch_name] = SSradio.add_object(src, GLOB.radiochannels[ch_name], RADIO_CHAT) /obj/item/device/radio/off listening = 0 diff --git a/code/game/objects/items/devices/suit_cooling.dm b/code/game/objects/items/devices/suit_cooling.dm index d388e06b9fa7..e0f65a4b31ec 100644 --- a/code/game/objects/items/devices/suit_cooling.dm +++ b/code/game/objects/items/devices/suit_cooling.dm @@ -110,7 +110,7 @@ cell.add_fingerprint(user) cell.update_icon() - to_chat(user, "You remove the [src.cell].") + to_chat(user, "You remove [cell].") src.cell = null updateicon() return @@ -121,7 +121,7 @@ else turn_on() if (on) - to_chat(user, "You switch on the [src].") + to_chat(user, "You switch on [src].") /obj/item/device/suit_cooling_unit/attackby(obj/item/W as obj, mob/user as mob) if (HAS_TRAIT(W, TRAIT_TOOL_SCREWDRIVER)) @@ -137,12 +137,12 @@ if (istype(W, /obj/item/cell)) if(cover_open) if(cell) - to_chat(user, "There is a [cell] already installed here.") + to_chat(user, "There is \a [cell] already installed here.") else if(user.drop_held_item()) W.forceMove(src) cell = W - to_chat(user, "You insert the [cell].") + to_chat(user, "You insert [cell].") updateicon() return @@ -169,7 +169,7 @@ if (cover_open) if(cell) - . += "The panel is open, exposing the [cell]." + . += "The panel is open, exposing [cell]." else . += "The panel is open." diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index a4247c90a5b3..9fe3521d858b 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -261,7 +261,7 @@ audible_message(SPAN_MAROON("[icon2html(src, usr)] End of recording.")) break - var/list/heard = get_mobs_in_view(world_view_size, src) + var/list/heard = get_mobs_in_view(GLOB.world_view_size, src) langchat_speech(mytape.storedinfo[i], heard, GLOB.all_languages, skip_language_check = TRUE, additional_styles = list("langchat_small")) audible_message(SPAN_MAROON("[icon2html(src, usr)] [mytape.storedinfo[i]]"))//We want to display this properly, don't double encode diff --git a/code/game/objects/items/devices/teleportation.dm b/code/game/objects/items/devices/teleportation.dm index 72a5c970b18f..793f399ecdf0 100644 --- a/code/game/objects/items/devices/teleportation.dm +++ b/code/game/objects/items/devices/teleportation.dm @@ -49,7 +49,7 @@ return var/turf/current_location = get_turf(usr)//What turf is the user on? if(!current_location || is_admin_level(current_location.z))//If turf was not found or they're on z level 2. - to_chat(usr, "The [src] is malfunctioning.") + to_chat(usr, "[src] is malfunctioning.") return if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)))) usr.set_interaction(src) @@ -144,7 +144,7 @@ to_chat(user, SPAN_NOTICE("\The [src] is malfunctioning.")) return var/list/L = list( ) - for(var/obj/structure/machinery/teleport/hub/R in machines) + for(var/obj/structure/machinery/teleport/hub/R in GLOB.machines) var/obj/structure/machinery/computer/teleporter/com = locate(/obj/structure/machinery/computer/teleporter, locate(R.x - 2, R.y, R.z)) if (istype(com, /obj/structure/machinery/computer/teleporter) && com.locked && !com.one_time_use) if(R.icon_state == "tele1") @@ -177,4 +177,3 @@ P.creator = src src.add_fingerprint(user) return - diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index b3d433727946..6fc526936809 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -47,7 +47,7 @@ user.temp_drop_inv_item(A) attached_device = A A.forceMove(src) - to_chat(user, SPAN_NOTICE("You attach the [item] to the valve controls and secure it.")) + to_chat(user, SPAN_NOTICE("You attach [item] to the valve controls and secure it.")) A.holder = src A.toggle_secure() //this calls update_icon(), which calls update_icon() on the holder (i.e. the bomb). diff --git a/code/game/objects/items/explosives/explosive.dm b/code/game/objects/items/explosives/explosive.dm index 0c482e8db9e7..4483372c9b85 100644 --- a/code/game/objects/items/explosives/explosive.dm +++ b/code/game/objects/items/explosives/explosive.dm @@ -262,8 +262,8 @@ if(falloff_mode == EXPLOSION_FALLOFF_SHAPE_LINEAR) falloff_mode = EXPLOSION_FALLOFF_SHAPE_EXPONENTIAL - to_chat(usr, SPAN_NOTICE("You enable the [src]'s blast wave dampener, limiting the blast radius.")) + to_chat(usr, SPAN_NOTICE("You enable [src]'s blast wave dampener, limiting the blast radius.")) else falloff_mode = EXPLOSION_FALLOFF_SHAPE_LINEAR - to_chat(usr, SPAN_NOTICE("You disable the [src]'s blast wave dampener, restoring the blast radius to full.")) + to_chat(usr, SPAN_NOTICE("You disable [src]'s blast wave dampener, restoring the blast radius to full.")) playsound(loc, 'sound/items/Screwdriver2.ogg', 25, 0, 6) diff --git a/code/game/objects/items/explosives/grenades/chem_grenade.dm b/code/game/objects/items/explosives/grenades/chem_grenade.dm index e975603d45d8..48430aacecc9 100644 --- a/code/game/objects/items/explosives/grenades/chem_grenade.dm +++ b/code/game/objects/items/explosives/grenades/chem_grenade.dm @@ -1,5 +1,5 @@ /obj/item/explosive/grenade/custom - name = "Custom grenade" + name = "custom grenade" icon_state = "grenade_custom" desc = "A custom chemical grenade with an M40 casing. This one is made to fit into underslung grenade launchers, but can also be thrown by hand." w_class = SIZE_SMALL @@ -17,7 +17,7 @@ ..() /obj/item/explosive/grenade/custom/large - name = "Large Custom Grenade" + name = "large custom grenade" desc = "A custom chemical grenade with an M15 casing. This casing has a higher explosive capacity than the M40 variant." icon_state = "large_grenade_custom" allowed_containers = list(/obj/item/reagent_container/glass) @@ -33,7 +33,7 @@ /obj/item/explosive/grenade/custom/metal_foam - name = "Metal-Foam Grenade" + name = "metal-foam grenade" desc = "Used for emergency sealing of air breaches." assembly_stage = ASSEMBLY_LOCKED harmful = FALSE @@ -56,7 +56,7 @@ update_icon() /obj/item/explosive/grenade/custom/incendiary - name = "Incendiary Grenade" + name = "incendiary grenade" desc = "Used for clearing rooms of living things." assembly_stage = ASSEMBLY_LOCKED has_blast_wave_dampener = FALSE @@ -79,7 +79,7 @@ update_icon() /obj/item/explosive/grenade/custom/flare - name = "M40-F flare grenade" + name = "\improper M40-F flare grenade" desc = "Chemical flare in a grenade form, designed for compatibility with most standard issue launchers." assembly_stage = ASSEMBLY_LOCKED has_blast_wave_dampener = FALSE @@ -103,7 +103,7 @@ update_icon() /obj/item/explosive/grenade/custom/large/flare - name = "M15-F flare grenade" + name = "\improper M15-F flare grenade" desc = "Chemical flare in a grenade form, expanded variant. The casing is too large to fit most launchers." assembly_stage = ASSEMBLY_LOCKED has_blast_wave_dampener = FALSE diff --git a/code/game/objects/items/explosives/mine.dm b/code/game/objects/items/explosives/mine.dm index 742a5f314c4a..768a32c003fa 100644 --- a/code/game/objects/items/explosives/mine.dm +++ b/code/game/objects/items/explosives/mine.dm @@ -42,6 +42,7 @@ prime() //We don't care about how strong the explosion was. /obj/item/explosive/mine/emp_act() + . = ..() prime() //Same here. Don't care about the effect strength. @@ -122,7 +123,7 @@ if(prob(75)) triggered = TRUE if(tripwire) - var/direction = reverse_dir[src.dir] + var/direction = GLOB.reverse_dir[src.dir] var/step_direction = get_step(src, direction) tripwire.forceMove(step_direction) prime() @@ -240,7 +241,7 @@ //We move the tripwire randomly in either of the four cardinal directions triggered = TRUE if(tripwire) - var/direction = pick(cardinal) + var/direction = pick(GLOB.cardinals) var/step_direction = get_step(src, direction) tripwire.forceMove(step_direction) prime() @@ -308,7 +309,7 @@ map_deployed = TRUE /obj/item/explosive/mine/custom - name = "Custom mine" + name = "custom mine" desc = "A custom chemical mine built from an M20 casing." icon_state = "m20_custom" customizable = TRUE diff --git a/code/game/objects/items/explosives/plastic.dm b/code/game/objects/items/explosives/plastic.dm index 830df9659070..071ff3458a91 100644 --- a/code/game/objects/items/explosives/plastic.dm +++ b/code/game/objects/items/explosives/plastic.dm @@ -26,7 +26,7 @@ /obj/item/explosive/plastic/Destroy() disarm() - . = ..() + return ..() /obj/item/explosive/plastic/explosion_throw(severity, direction, scatter_multiplier) if(active) @@ -156,7 +156,9 @@ plant_target.overlays -= overlay qdel(overlay) plant_target.contents -= src - forceMove(get_turf(plant_target)) + var/turf/plant_turf = get_turf(plant_target) + if(plant_turf) + forceMove(plant_turf) plant_target = null if(customizable) if(active) //deactivate @@ -182,7 +184,7 @@ //vehicle interior stuff checks if(SSinterior.in_interior(target)) - to_chat(user, SPAN_WARNING("It's too cramped in here to deploy \the [src].")) + to_chat(user, SPAN_WARNING("It's too cramped in here to deploy [src].")) return FALSE if(istype(target, /obj/effect) || istype(target, /obj/structure/machinery)) @@ -193,7 +195,7 @@ if(istype(target, /turf/closed/wall)) var/turf/closed/wall/W = target if(W.hull) - to_chat(user, SPAN_WARNING("You are unable to stick \the [src] to the [W]!")) + to_chat(user, SPAN_WARNING("You are unable to stick [src] to [W]!")) return FALSE if(istype(target, /obj/structure/window)) @@ -299,7 +301,7 @@ prime(TRUE) /obj/item/explosive/plastic/custom - name = "Custom plastic explosive" + name = "custom plastic explosive" desc = "A custom plastic explosive." icon_state = "custom_plastic_explosive" overlay_image = "custom_plastic_explosive_sensing" diff --git a/code/game/objects/items/frames/alarms.dm b/code/game/objects/items/frames/alarms.dm index f34b18d6825c..d665df65fc83 100644 --- a/code/game/objects/items/frames/alarms.dm +++ b/code/game/objects/items/frames/alarms.dm @@ -24,7 +24,7 @@ Code shamelessly copied from apc_frame return var/ndir = get_dir(on_wall,usr) - if (!(ndir in cardinal)) + if (!(ndir in GLOB.cardinals)) return var/turf/loc = get_turf(usr) @@ -67,7 +67,7 @@ Code shamelessly copied from apc_frame return var/ndir = get_dir(on_wall,usr) - if (!(ndir in cardinal)) + if (!(ndir in GLOB.cardinals)) return var/turf/loc = get_turf(usr) diff --git a/code/game/objects/items/frames/camera.dm b/code/game/objects/items/frames/camera.dm index e367e64e641d..efe697c3944b 100644 --- a/code/game/objects/items/frames/camera.dm +++ b/code/game/objects/items/frames/camera.dm @@ -105,9 +105,9 @@ C.auto_turn() C.network = uniquelist(tempnetwork) - tempnetwork = difflist(C.network,RESTRICTED_CAMERA_NETWORKS) + tempnetwork = difflist(C.network,GLOB.RESTRICTED_CAMERA_NETWORKS) if(!tempnetwork.len)//Camera isn't on any open network - remove its chunk from AI visibility. - cameranet.removeCamera(C) + GLOB.cameranet.removeCamera(C) C.c_tag = input @@ -167,7 +167,7 @@ to_chat(user, SPAN_WARNING("\The [WT] needs to be on!")) return 0 - to_chat(user, SPAN_NOTICE("You start to weld the [src]..")) + to_chat(user, SPAN_NOTICE("You start to weld [src]..")) playsound(src.loc, 'sound/items/Welder.ogg', 25, 1) WT.eyecheck(user) if(do_after(user, 20, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD)) diff --git a/code/game/objects/items/frames/frame.dm b/code/game/objects/items/frames/frame.dm index 9c039821cb75..06b1c14e46c8 100644 --- a/code/game/objects/items/frames/frame.dm +++ b/code/game/objects/items/frames/frame.dm @@ -23,7 +23,7 @@ if (get_dist(on_wall,usr)>1) return var/ndir = get_dir(usr,on_wall) - if (!(ndir in cardinal)) + if (!(ndir in GLOB.cardinals)) return var/turf/loc = get_turf(usr) var/area/A = get_area(loc) diff --git a/code/game/objects/items/frames/light_fixtures.dm b/code/game/objects/items/frames/light_fixtures.dm index 35f800f28fac..b52e19492cab 100644 --- a/code/game/objects/items/frames/light_fixtures.dm +++ b/code/game/objects/items/frames/light_fixtures.dm @@ -21,7 +21,7 @@ if (get_dist(on_wall,usr)>1) return var/ndir = get_dir(usr,on_wall) - if (!(ndir in cardinal)) + if (!(ndir in GLOB.cardinals)) return var/turf/loc = get_turf(usr) if (!istype(loc, /turf/open/floor)) diff --git a/code/game/objects/items/fulton.dm b/code/game/objects/items/fulton.dm index 98987d1cd2b3..788613cf4c6e 100644 --- a/code/game/objects/items/fulton.dm +++ b/code/game/objects/items/fulton.dm @@ -1,7 +1,7 @@ // Fulton baloon deployment devices, used to gather and send crates, dead things, and other objective-based items into space for collection. /// A list of fultons currently airborne. -var/global/list/deployed_fultons = list() +GLOBAL_LIST_EMPTY(deployed_fultons) /obj/item/stack/fulton name = "fulton recovery device" @@ -36,7 +36,7 @@ var/global/list/deployed_fultons = list() attached_atom = null if(original_location) original_location = null - deployed_fultons -= src + GLOB.deployed_fultons -= src . = ..() /obj/item/stack/fulton/update_icon() @@ -90,7 +90,7 @@ var/global/list/deployed_fultons = list() var/mob/living/carbon/human/H = target_atom if(isyautja(H) && H.stat == DEAD) can_attach = TRUE - else if((H.stat != DEAD || H.mind && H.check_tod() && H.is_revivable())) + else if((H.stat != DEAD || H.check_tod() && H.is_revivable())) to_chat(user, SPAN_WARNING("You can't attach [src] to [target_atom], they still have a chance!")) return else @@ -154,7 +154,7 @@ var/global/list/deployed_fultons = list() attached_atom.forceMove(space_tile) forceMove(attached_atom) - deployed_fultons += src + GLOB.deployed_fultons += src attached_atom.overlays -= I addtimer(CALLBACK(src, PROC_REF(return_fulton), original_location), 150 SECONDS) @@ -169,11 +169,11 @@ var/global/list/deployed_fultons = list() attached_atom.anchored = FALSE playsound(attached_atom.loc,'sound/effects/bamf.ogg', 50, 1) - if(intel_system) + if(GLOB.intel_system) if (!LAZYISIN(GLOB.failed_fultons, attached_atom)) //Giving marines an objective to retrieve that fulton (so they'd know what they lost and where) var/datum/cm_objective/retrieve_item/fulton/objective = new /datum/cm_objective/retrieve_item/fulton(attached_atom) - intel_system.store_single_objective(objective) + GLOB.intel_system.store_single_objective(objective) qdel(reservation) qdel(src) diff --git a/code/game/objects/items/implants/implant.dm b/code/game/objects/items/implants/implant.dm index d39b7e675452..e7ebe0391fae 100644 --- a/code/game/objects/items/implants/implant.dm +++ b/code/game/objects/items/implants/implant.dm @@ -82,6 +82,7 @@ Implant Specifics:
    "} return dat /obj/item/implant/tracking/emp_act(severity) + . = ..() if (malfunction) //no, dawg, you can't malfunction while you are malfunctioning return malfunction = MALFUNCTION_TEMPORARY @@ -216,6 +217,7 @@ Implant Specifics:
    "} return 1 /obj/item/implant/explosive/emp_act(severity) + . = ..() if (malfunction) return malfunction = MALFUNCTION_TEMPORARY @@ -307,6 +309,7 @@ the implant may become unstable and either pre-maturely inject the subject or si return /obj/item/implant/chem/emp_act(severity) + . = ..() if (malfunction) return malfunction = MALFUNCTION_TEMPORARY @@ -432,6 +435,7 @@ the implant may become unstable and either pre-maturely inject the subject or si STOP_PROCESSING(SSobj, src) /obj/item/implant/death_alarm/emp_act(severity) //for some reason alarms stop going off in case they are emp'd, even without this + . = ..() if (malfunction) //so I'm just going to add a meltdown chance here return malfunction = MALFUNCTION_TEMPORARY diff --git a/code/game/objects/items/implants/implantneurostim.dm b/code/game/objects/items/implants/implantneurostim.dm index 5893ad5fd233..21ee2542649b 100644 --- a/code/game/objects/items/implants/implantneurostim.dm +++ b/code/game/objects/items/implants/implantneurostim.dm @@ -105,6 +105,7 @@ /obj/item/implant/neurostim/emp_act(severity) + . = ..() if (malfunction) return if (prob(80)) diff --git a/code/game/objects/items/lightstick.dm b/code/game/objects/items/lightstick.dm index 70418049994b..89ce2c00762e 100644 --- a/code/game/objects/items/lightstick.dm +++ b/code/game/objects/items/lightstick.dm @@ -22,7 +22,7 @@ /obj/item/lightstick/Crossed(mob/living/O) if(anchored && prob(trample_chance) && can_trample) if(!istype(O,/mob/living/carbon/xenomorph/larva)) - visible_message(SPAN_DANGER("[O] tramples the [src]!")) + visible_message(SPAN_DANGER("[O] tramples [src]!")) playsound(src, 'sound/weapons/Genhit.ogg', 25, 1) if(istype(O,/mob/living/carbon/xenomorph)) if(prob(40)) @@ -46,17 +46,17 @@ if(!anchored)//If planted return - to_chat(user, "You start pulling out \the [src].") - if(!do_after(user,20, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD)) + to_chat(user, "You start pulling out [src].") + if(!do_after(user, 2 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD)) return anchored = FALSE - user.visible_message("[user.name] removes \the [src] from the ground.","You remove the [src] from the ground.") + user.visible_message("[user.name] removes [src] from the ground.", "You remove [src] from the ground.") icon_state = "lightstick_[s_color][anchored]" set_light(0) pixel_x = 0 pixel_y = 0 - playsound(user, 'sound/weapons/Genhit.ogg', 25, 1) + playsound(user, 'sound/weapons/Genhit.ogg', 25, TRUE) //Red /obj/item/lightstick/planted diff --git a/code/game/objects/items/misc.dm b/code/game/objects/items/misc.dm index 50c5cd75551b..1699cb24ef39 100644 --- a/code/game/objects/items/misc.dm +++ b/code/game/objects/items/misc.dm @@ -134,7 +134,7 @@ return stored_item = object mobber.drop_inv_item_to_loc(object, src) - to_chat(mobber, SPAN_NOTICE("You slide the [object] into [src].")) + to_chat(mobber, SPAN_NOTICE("You slide [object] into [src].")) playsound(mobber, 'sound/weapons/gun_shotgun_shell_insert.ogg', 15, TRUE) update_icon() break diff --git a/code/game/objects/items/paint.dm b/code/game/objects/items/paint.dm index 9089dd228ed0..c538cbf3944f 100644 --- a/code/game/objects/items/paint.dm +++ b/code/game/objects/items/paint.dm @@ -1,6 +1,6 @@ //NEVER USE THIS IT SUX -PETETHEGOAT -var/global/list/cached_icons = list() +GLOBAL_LIST_EMPTY(cached_icons) /obj/item/reagent_container/glass/paint desc = "It's a paint bucket." diff --git a/code/game/objects/items/props/helmetgarb.dm b/code/game/objects/items/props/helmetgarb.dm index 72c49a0ea15a..d8e65f1a3cd3 100644 --- a/code/game/objects/items/props/helmetgarb.dm +++ b/code/game/objects/items/props/helmetgarb.dm @@ -99,10 +99,8 @@ var/nvg_maxhealth = 125 var/nvg_health = 125 - var/nvg_maxcharge = 2500 - var/nvg_charge = 2500 - var/nvg_drain = 8 // has a 5 minute duration but byond may give it a couple of irl time due to lag - var/infinite_charge = FALSE + /// How much charge the cell should have at most. -1 is infinite + var/cell_max_charge = 2500 var/activated = FALSE var/nightvision = FALSE @@ -117,6 +115,13 @@ var/mob/living/attached_mob var/lighting_alpha = 100 +/obj/item/prop/helmetgarb/helmet_nvg/Initialize(mapload, ...) + . = ..() + if(shape != NVG_SHAPE_COSMETIC) + AddComponent(/datum/component/cell, cell_max_charge, TRUE, charge_drain = 8) + RegisterSignal(src, COMSIG_CELL_TRY_RECHARGING, PROC_REF(cell_try_recharge)) + RegisterSignal(src, COMSIG_CELL_OUT_OF_CHARGE, PROC_REF(on_power_out)) + /obj/item/prop/helmetgarb/helmet_nvg/on_enter_storage(obj/item/storage/internal/S) ..() @@ -139,42 +144,30 @@ /obj/item/prop/helmetgarb/helmet_nvg/attackby(obj/item/A as obj, mob/user as mob) - if(istype(A,/obj/item/cell)) - recharge(A, user) - if(HAS_TRAIT(A, TRAIT_TOOL_SCREWDRIVER)) repair(user) else ..() -/obj/item/prop/helmetgarb/helmet_nvg/proc/recharge(obj/item/cell/C, mob/user as mob) +/obj/item/prop/helmetgarb/helmet_nvg/proc/cell_try_recharge(datum/source, mob/living/user) + SIGNAL_HANDLER + if(user.action_busy) - return + return COMPONENT_CELL_NO_RECHARGE + if(src != user.get_inactive_hand()) - to_chat(user, SPAN_WARNING("You need to hold \the [src] in hand in order to recharge them.")) - return + to_chat(user, SPAN_WARNING("You need to hold [src] in hand in order to recharge them.")) + return COMPONENT_CELL_NO_RECHARGE + if(shape == NVG_SHAPE_COSMETIC) - to_chat(user, SPAN_WARNING("There is no connector for the power cell inside \the [src].")) - return + to_chat(user, SPAN_WARNING("There is no connector for the power cell inside [src].")) + return COMPONENT_CELL_NO_RECHARGE + if(shape == NVG_SHAPE_BROKEN) - to_chat(user, SPAN_WARNING("You need to repair \the [src] first.")) - return - if(nvg_charge == nvg_maxcharge) - to_chat(user, SPAN_WARNING("\The [src] are already fully charged.")) - return + to_chat(user, SPAN_WARNING("You need to repair [src] first.")) + return COMPONENT_CELL_NO_RECHARGE - while(nvg_charge < nvg_maxcharge) - if(C.charge <= 0) - to_chat(user, SPAN_WARNING("\The [C] is completely dry.")) - break - if(!do_after(user, 1 SECONDS, (INTERRUPT_ALL & (~INTERRUPT_MOVED)), BUSY_ICON_BUILD, C, INTERRUPT_DIFF_LOC)) - to_chat(user, SPAN_WARNING("You were interrupted.")) - break - var/to_transfer = min(400, C.charge, (nvg_maxcharge - nvg_charge)) - if(C.use(to_transfer)) - nvg_charge += to_transfer - to_chat(user, "You transfer some power between \the [C] and \the [src]. The gauge now reads: [round(100.0*nvg_charge/nvg_maxcharge) ]%.") /obj/item/prop/helmetgarb/helmet_nvg/proc/repair(mob/user as mob) if(user.action_busy) @@ -202,7 +195,6 @@ to_chat(user, "You successfully patch \the [src].") nvg_maxhealth = 65 nvg_health = 65 - nvg_drain = initial(nvg_drain) * 2 return else if(nvg_health == nvg_maxhealth) @@ -212,7 +204,7 @@ to_chat(user, SPAN_WARNING("Nothing to fix.")) else if(shape == NVG_SHAPE_COSMETIC) - to_chat(user, SPAN_WARNING("it's nothing but a husk of what it used to be.")) + to_chat(user, SPAN_WARNING("It's nothing but a husk of what it used to be.")) else to_chat(user, "You begin to repair \the [src].") @@ -244,9 +236,6 @@ else if(nvg_health_procent >= 0) . += "They are falling apart." - if (get_dist(user, src) <= 1 && (shape == NVG_SHAPE_FINE || shape == NVG_SHAPE_PATCHED)) - . += "A small gauge in the corner reads: Power: [round(100.0*nvg_charge/nvg_maxcharge) ]%." - /obj/item/prop/helmetgarb/helmet_nvg/on_exit_storage(obj/item/storage/S) remove_attached_item() return ..() @@ -296,7 +285,7 @@ if(attached_mob != user && slot == WEAR_HEAD) set_attached_mob(user) - if(slot == WEAR_HEAD && !nightvision && activated && nvg_charge > 0 && shape > NVG_SHAPE_BROKEN) + if(slot == WEAR_HEAD && !nightvision && activated && !SEND_SIGNAL(src, COMSIG_CELL_CHECK_CHARGE) && shape > NVG_SHAPE_BROKEN) enable_nvg(user) else remove_nvg() @@ -319,7 +308,7 @@ attached_item.update_icon() activation.update_button_icon() - START_PROCESSING(SSobj, src) + SEND_SIGNAL(src, COMSIG_CELL_START_TICK_DRAIN) /obj/item/prop/helmetgarb/helmet_nvg/proc/update_sight(mob/M) @@ -353,20 +342,15 @@ attached_mob.update_sight() - STOP_PROCESSING(SSobj, src) + SEND_SIGNAL(src, COMSIG_CELL_STOP_TICK_DRAIN) /obj/item/prop/helmetgarb/helmet_nvg/process(delta_time) - if(nvg_charge > 0 && !infinite_charge) - nvg_charge = max(0, nvg_charge - nvg_drain * delta_time) - if(!attached_mob) return PROCESS_KILL - if(!activated || !attached_item || nvg_charge <= 0 || attached_mob.is_dead()) - if(activated && !attached_mob.is_dead()) - to_chat(attached_mob, SPAN_WARNING("\The [src] emit a low power warning and immediately shut down!")) - remove_nvg() + if(!activated || !attached_item || attached_mob.is_dead()) + on_power_out() return if(!attached_item.has_garb_overlay()) @@ -375,6 +359,13 @@ return +/obj/item/prop/helmetgarb/helmet_nvg/proc/on_power_out(datum/source) + SIGNAL_HANDLER + + if(activated && !attached_mob.is_dead()) + to_chat(attached_mob, SPAN_WARNING("[src] emit a low power warning and immediately shut down!")) + remove_nvg() + /obj/item/prop/helmetgarb/helmet_nvg/ui_action_click(mob/owner, obj/item/holder) toggle_nods(owner) @@ -410,7 +401,7 @@ if(activated) to_chat(user, SPAN_NOTICE("You flip the goggles down.")) icon_state = active_icon_state - if(nvg_charge > 0 && user.head == attached_item && shape > NVG_SHAPE_BROKEN) + if(!SEND_SIGNAL(src, COMSIG_CELL_CHECK_CHARGE) && user.head == attached_item && shape > NVG_SHAPE_BROKEN) enable_nvg(user) else icon_state = active_icon_state @@ -462,7 +453,7 @@ /obj/item/prop/helmetgarb/helmet_nvg/marsoc //for Marine Raiders name = "\improper Tactical M3 night vision goggles" desc = "With an integrated self-recharging battery, nothing can stop you. Put them on your helmet and press the button and it's go-time." - infinite_charge = TRUE + cell_max_charge = -1 #undef NVG_SHAPE_COSMETIC #undef NVG_SHAPE_BROKEN @@ -505,14 +496,38 @@ desc = "The USCM had its funding pulled for these when it became apparent that not every deployed enlisted was wearing a helmet 24/7; much to the bafflement of UA High Command." icon_state = "helmet_gasmask" +/obj/item/prop/helmetgarb/helmet_gasmask/on_enter_storage(obj/item/storage/internal/helmet_internal_inventory) + ..() + if(!istype(helmet_internal_inventory)) + return + var/obj/item/clothing/head/helmet/helmet_item = helmet_internal_inventory.master_object + + if(!istype(helmet_item)) + return + + helmet_item.flags_inventory |= BLOCKGASEFFECT + helmet_item.flags_inv_hide |= HIDEFACE + +/obj/item/prop/helmetgarb/helmet_gasmask/on_exit_storage(obj/item/storage/internal/helmet_internal_inventory) + ..() + if(!istype(helmet_internal_inventory)) + return + var/obj/item/clothing/head/helmet/helmet_item = helmet_internal_inventory.master_object + + if(!istype(helmet_item)) + return + + helmet_item.flags_inventory &= ~(BLOCKGASEFFECT) + helmet_item.flags_inv_hide &= ~(HIDEFACE) + /obj/item/prop/helmetgarb/trimmed_wire name = "trimmed barbed wire" desc = "It is a length of barbed wire that's had most of the sharp points filed down so that it is safe to handle." icon_state = "trimmed_wire" /obj/item/prop/helmetgarb/bullet_pipe - name = "10x99mm XM42B casing pipe" - desc = "The XM42B was an experimental weapons platform briefly fielded by the USCM and Wey-Yu PMC teams. It was manufactured by ARMAT systems at the Atlas weapons facility. Unfortunately the project had its funding pulled alongside the M5 integrated gasmask program. This spent casing has been converted into a pipe, but there is too much tar in the mouthpiece for it to be useable." + name = "10x99mm XM43E1 casing pipe" + desc = "The XM43E1 was an experimental weapons platform briefly fielded by the USCM and Wey-Yu PMC teams. It was manufactured by ARMAT systems at the Atlas weapons facility. Unfortunately the project had its funding pulled alongside the M5 integrated gasmask program. This spent casing has been converted into a pipe, but there is too much tar in the mouthpiece for it to be useable." icon_state = "bullet_pipe" /obj/item/prop/helmetgarb/chaplain_patch @@ -527,29 +542,38 @@ icon = 'icons/obj/items/items.dmi' icon_state = "photo" ///The human who spawns with the photo - var/mob/living/carbon/human/owner + var/datum/weakref/owner + ///The belonging human name + var/owner_name + ///The belonging human faction + var/owner_faction ///Text written on the back var/scribble -/obj/item/prop/helmetgarb/family_photo/Initialize(mapload, ...) +/obj/item/prop/helmetgarb/family_photo/pickup(mob/user, silent) . = ..() - if(!mapload) - RegisterSignal(src, COMSIG_POST_SPAWN_UPDATE, PROC_REF(set_owner)) + if(!owner) + RegisterSignal(user, COMSIG_POST_SPAWN_UPDATE, PROC_REF(set_owner), override = TRUE) + ///Sets the owner of the family photo to the human it spawns with, needs var/source for signals -/obj/item/prop/helmetgarb/family_photo/proc/set_owner(source = src, mob/living/carbon/human/user) - UnregisterSignal(src, COMSIG_POST_SPAWN_UPDATE) - owner = user +/obj/item/prop/helmetgarb/family_photo/proc/set_owner(datum/source) + SIGNAL_HANDLER + UnregisterSignal(source, COMSIG_POST_SPAWN_UPDATE) + var/mob/living/carbon/human/user = source + owner = WEAKREF(user) + owner_name = user.name + owner_faction = user.faction /obj/item/prop/helmetgarb/family_photo/get_examine_text(mob/user) . = ..() if(scribble) . += "\"[scribble]\" is written on the back of the photo." - if(user == owner) + if(user.weak_reference == owner) . += "A photo of you and your family." return - if(user.faction == owner?.faction) - . += "A photo of [owner] and their family." + if(user.faction == owner_faction) + . += "A photo of [owner_name] and their family." return . += "A photo of a family you do not know." diff --git a/code/game/objects/items/reagent_containers/borghydro.dm b/code/game/objects/items/reagent_containers/borghydro.dm index 30a9bdbd3c65..4f1f5540988b 100644 --- a/code/game/objects/items/reagent_containers/borghydro.dm +++ b/code/game/objects/items/reagent_containers/borghydro.dm @@ -22,7 +22,7 @@ for(var/T in reagent_ids) reagent_volumes[T] = volume - var/datum/reagent/R = chemical_reagents_list[T] + var/datum/reagent/R = GLOB.chemical_reagents_list[T] reagent_names += R.name START_PROCESSING(SSobj, src) @@ -71,7 +71,7 @@ ..() var/selection = tgui_input_list(usr, "Please select a reagent:", "Reagent", reagent_ids) if(!selection) return - var/datum/reagent/R = chemical_reagents_list[selection] + var/datum/reagent/R = GLOB.chemical_reagents_list[selection] to_chat(user, SPAN_NOTICE(" Synthesizer is now producing '[R.name]'.")) mode = reagent_ids.Find(selection) playsound(src.loc, 'sound/effects/pop.ogg', 15, 0) @@ -81,6 +81,6 @@ . = ..() if (user != loc) return - var/datum/reagent/R = chemical_reagents_list[reagent_ids[mode]] + var/datum/reagent/R = GLOB.chemical_reagents_list[reagent_ids[mode]] . += SPAN_NOTICE("It is currently producing [R.name] and has [reagent_volumes[reagent_ids[mode]]] out of [volume] units left.") diff --git a/code/game/objects/items/reagent_containers/dropper.dm b/code/game/objects/items/reagent_containers/dropper.dm index eaf28f66b012..f36145e285cd 100644 --- a/code/game/objects/items/reagent_containers/dropper.dm +++ b/code/game/objects/items/reagent_containers/dropper.dm @@ -32,7 +32,7 @@ if(ismob(target)) var/time = 20 //2/3rds the time of a syringe - for(var/mob/O in viewers(world_view_size, user)) + for(var/mob/O in viewers(GLOB.world_view_size, user)) O.show_message(SPAN_DANGER("[user] is trying to squirt something into [target]'s eyes!"), SHOW_MESSAGE_VISIBLE) if(!do_after(user, time, INTERRUPT_ALL, BUSY_ICON_FRIENDLY, target, INTERRUPT_MOVED, BUSY_ICON_MEDICAL)) return @@ -56,7 +56,7 @@ safe_thing.create_reagents(100) trans = src.reagents.trans_to(safe_thing, amount_per_transfer_from_this) - for(var/mob/O in viewers(world_view_size, user)) + for(var/mob/O in viewers(GLOB.world_view_size, user)) O.show_message(SPAN_DANGER("[user] tries to squirt something into [target]'s eyes, but fails!"), SHOW_MESSAGE_VISIBLE) spawn(5) src.reagents.reaction(safe_thing, TOUCH) @@ -67,7 +67,7 @@ icon_state = "dropper[filled]" return - for(var/mob/O in viewers(world_view_size, user)) + for(var/mob/O in viewers(GLOB.world_view_size, user)) O.show_message(SPAN_DANGER("[user] squirts something into [target]'s eyes!"), SHOW_MESSAGE_VISIBLE) src.reagents.reaction(target, TOUCH) diff --git a/code/game/objects/items/reagent_containers/food/condiment.dm b/code/game/objects/items/reagent_containers/food/condiment.dm index a13489f0af1e..35944e4422c4 100644 --- a/code/game/objects/items/reagent_containers/food/condiment.dm +++ b/code/game/objects/items/reagent_containers/food/condiment.dm @@ -23,7 +23,7 @@ return FALSE if(M == user) - to_chat(M, SPAN_NOTICE(" You swallow some of contents of the [src].")) + to_chat(M, SPAN_NOTICE("You swallow some of contents of [src].")) else if(istype(M, /mob/living/carbon/human)) user.affected_message(M, @@ -80,7 +80,7 @@ to_chat(user, SPAN_DANGER("[src] is empty.")) return if(target.reagents.total_volume >= target.reagents.maximum_volume) - to_chat(user, SPAN_DANGER("you can't add anymore to [target].")) + to_chat(user, SPAN_DANGER("You can't add any more to [target].")) return var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this) to_chat(user, SPAN_NOTICE(" You transfer [trans] units of the condiment to [target].")) @@ -202,7 +202,7 @@ /obj/item/reagent_container/food/condiment/hotsauce/franks name = "\improper Frank's Red Hot bottle" desc = "A bottle of Weyland-Yutani brand Frank's Red Hot hot sauce." - desc_lore = "Supposedly designed as a middle-ground flavor between ketchup and cayenne, this brand of spicy goodness achieved critical acclaim throughout UA space within both colonies and vessels alike. The sudden and widespread adoption was curiously timed with the near-simultaneous shelving of the original Frank's 'ULTRA' hot sauce." + desc_lore = "Supposedly designed as a middle-ground flavor between ketchup and cayenne, this brand of spicy goodness achieved critical acclaim throughout UA space within both colonies and vessels alike. The sudden and widespread adoption was curiously timed with the near-simultaneous shelving of the original Frank's 'ULTRA' hot sauce." icon_state = "hotsauce_franks" item_state = "hotsauce_franks" diff --git a/code/game/objects/items/reagent_containers/food/fortunecookie.dm b/code/game/objects/items/reagent_containers/food/fortunecookie.dm index a878ff589dc8..6077541acd84 100644 --- a/code/game/objects/items/reagent_containers/food/fortunecookie.dm +++ b/code/game/objects/items/reagent_containers/food/fortunecookie.dm @@ -75,7 +75,7 @@ to_chat(user,SPAN_WARNING("[src] is cracked open! How are you gonna slip something in that?")) else if(!cookiefortune) - to_chat(user, SPAN_NOTICE("You slip the paper into the [src].")) + to_chat(user, SPAN_NOTICE("You slip the paper into [src].")) cookiefortune = W user.drop_inv_item_to_loc(W, src) else @@ -93,7 +93,7 @@ user.put_in_hands(cookiefortune) cookiefortune = null else - to_chat(SPAN_WARNING("You break open the fortune cookie, but there's no fortune inside! Oh no!")) + to_chat(user, SPAN_WARNING("You break open the fortune cookie, but there's no fortune inside! Oh no!")) else . = ..() @@ -109,7 +109,7 @@ user.put_in_hands(cookiefortune) cookiefortune = null else - to_chat(SPAN_WARNING("You break open the fortune cookie, but there's no fortune inside! Oh no!")) + to_chat(user, SPAN_WARNING("You break open the fortune cookie, but there's no fortune inside! Oh no!")) else . = ..() diff --git a/code/game/objects/items/reagent_containers/food/sandwich.dm b/code/game/objects/items/reagent_containers/food/sandwich.dm index 1b7d61eaddad..511c0c042be1 100644 --- a/code/game/objects/items/reagent_containers/food/sandwich.dm +++ b/code/game/objects/items/reagent_containers/food/sandwich.dm @@ -18,7 +18,7 @@ /obj/item/reagent_container/food/snacks/csandwich/attackby(obj/item/W as obj, mob/user as mob) if(istype(W, /obj/item/reagent_container/food/snacks/csandwich)) //No sandwitch inception, it causes some bugs... - to_chat(user, SPAN_NOTICE(" You can't put a [W] in the [src].")) + to_chat(user, SPAN_NOTICE("You can't put \a [W] in [src].")) return var/sandwich_limit = 4 diff --git a/code/game/objects/items/reagent_containers/food/snacks.dm b/code/game/objects/items/reagent_containers/food/snacks.dm index 2892eb1113e7..eb33ca6b1d0f 100644 --- a/code/game/objects/items/reagent_containers/food/snacks.dm +++ b/code/game/objects/items/reagent_containers/food/snacks.dm @@ -217,10 +217,10 @@ if(isanimal(M)) if(iscorgi(M)) if(bitecount == 0 || prob(50)) - M.emote("nibbles away at the [src]") + M.emote("nibbles away at [src]") bitecount++ if(bitecount >= 5) - var/sattisfaction_text = pick("burps from enjoyment", "yaps for more", "woofs twice", "looks at the area where the [src] was") + var/sattisfaction_text = pick("burps from enjoyment", "yaps for more", "woofs twice", "looks at the area where [src] was") if(sattisfaction_text) M.emote("[sattisfaction_text]") qdel(src) @@ -2801,7 +2801,7 @@ if( open && pizza ) user.put_in_hands( pizza ) - to_chat(user, SPAN_DANGER("You take the [src.pizza] out of the [src].")) + to_chat(user, SPAN_DANGER("You take the [src.pizza] out of [src].")) src.pizza = null update_icon() return @@ -2852,11 +2852,11 @@ box.update_icon() update_icon() - to_chat(user, SPAN_DANGER("You put the [box] ontop of the [src]!")) + to_chat(user, SPAN_DANGER("You put [box] ontop of [src]!")) else to_chat(user, SPAN_DANGER("The stack is too high!")) else - to_chat(user, SPAN_DANGER("Close the [box] first!")) + to_chat(user, SPAN_DANGER("Close [box] first!")) return @@ -2868,9 +2868,9 @@ update_icon() - to_chat(user, SPAN_DANGER("You put the [I] in the [src]!")) + to_chat(user, SPAN_DANGER("You put [I] in [src]!")) else - to_chat(user, SPAN_DANGER("You try to push the [I] through the lid but it doesn't work!")) + to_chat(user, SPAN_DANGER("You try to push [I] through the lid but it doesn't work!")) return if( istype(I, /obj/item/tool/pen/) ) diff --git a/code/game/objects/items/reagent_containers/food/snacks/grown.dm b/code/game/objects/items/reagent_containers/food/snacks/grown.dm index 12a5a704f663..32423c121b61 100644 --- a/code/game/objects/items/reagent_containers/food/snacks/grown.dm +++ b/code/game/objects/items/reagent_containers/food/snacks/grown.dm @@ -30,7 +30,7 @@ /obj/item/reagent_container/food/snacks/grown/proc/update_from_seed()// Fill the object up with the appropriate reagents. if(!isnull(plantname)) - var/datum/seed/S = seed_types[plantname] + var/datum/seed/S = GLOB.seed_types[plantname] if(!S) return name = S.seed_name //Copies the name from the seed, important for renamed plants diff --git a/code/game/objects/items/reagent_containers/glass.dm b/code/game/objects/items/reagent_containers/glass.dm index df344506c72c..2a7bde748fba 100644 --- a/code/game/objects/items/reagent_containers/glass.dm +++ b/code/game/objects/items/reagent_containers/glass.dm @@ -237,7 +237,7 @@ overlays += lid /obj/item/reagent_container/glass/minitank - name = "MS-11 Smart Refill Tank" + name = "\improper MS-11 Smart Refill Tank" desc = "A robust little tank capable of refilling autoinjectors that previously required a nanomed system to refill. Using the wonders of microchips, it automatically sorts the correct chemicals into most single reagent autoinjectors. It is unable to partially fill them however. A valve exists on the top to transfer reagents to another container or to flush it entirely." icon = 'icons/obj/items/tank.dmi' icon_state = "mini_reagent_tank" @@ -277,7 +277,7 @@ if(istype(W, /obj/item/reagent_container/hypospray/autoinjector)) var/obj/item/reagent_container/hypospray/autoinjector/A = W if(A.mixed_chem) - to_chat(user, SPAN_WARNING("The autoinjector doesn't fit into the [src]'s valve. It's probably not compatible.")) + to_chat(user, SPAN_WARNING("The autoinjector doesn't fit into [src]'s valve. It's probably not compatible.")) return if(reagents.has_reagent(A.chemname, A.volume)) reagents.trans_id_to(A, A.chemname, A.volume) @@ -285,10 +285,10 @@ A.update_icon() playsound(src.loc, 'sound/effects/refill.ogg', 25, 1, 3) else - to_chat(user, SPAN_WARNING("A small LED on \the [src] blinks. The tank can't refill \the [A] - it's either incompatible or out of chemicals to fill it with!")) + to_chat(user, SPAN_WARNING("A small LED on [src] blinks. The tank can't refill [A] - it's either incompatible or out of chemicals to fill it with!")) . = ..() return - to_chat(user,SPAN_INFO("You successfully refill \the [W.name] with \the [src]!")) + to_chat(user, SPAN_INFO("You successfully refill [A] with [src]!")) /obj/item/reagent_container/glass/minitank/verb/flush_tank(mob/user) set category = "Object" @@ -299,7 +299,7 @@ to_chat(user, SPAN_WARNING("It's already empty!")) return playsound(src.loc, 'sound/effects/slosh.ogg', 25, 1, 3) - to_chat(user, SPAN_WARNING("You work the flush valve and successfully flush \the [src]'s contents!")) + to_chat(user, SPAN_WARNING("You work the flush valve and successfully flush [src]'s contents!")) reagents.clear_reagents() update_icon() // just to be sure return @@ -389,17 +389,17 @@ . = ..() var/random_chem if(tier) - random_chem = pick(chemical_gen_classes_list[tier]) + random_chem = pick(GLOB.chemical_gen_classes_list[tier]) else - random_chem = pick( prob(3);pick(chemical_gen_classes_list["C1"]),\ - prob(5);pick(chemical_gen_classes_list["C2"]),\ - prob(7);pick(chemical_gen_classes_list["C3"]),\ - prob(10);pick(chemical_gen_classes_list["C4"]),\ - prob(15);pick(chemical_gen_classes_list["C5"]),\ - prob(25);pick(chemical_gen_classes_list["T1"]),\ - prob(15);pick(chemical_gen_classes_list["T2"]),\ - prob(10);pick(chemical_gen_classes_list["T3"]),\ - prob(5);pick(chemical_gen_classes_list["T4"]),\ + random_chem = pick( prob(3);pick(GLOB.chemical_gen_classes_list["C1"]),\ + prob(5);pick(GLOB.chemical_gen_classes_list["C2"]),\ + prob(7);pick(GLOB.chemical_gen_classes_list["C3"]),\ + prob(10);pick(GLOB.chemical_gen_classes_list["C4"]),\ + prob(15);pick(GLOB.chemical_gen_classes_list["C5"]),\ + prob(25);pick(GLOB.chemical_gen_classes_list["T1"]),\ + prob(15);pick(GLOB.chemical_gen_classes_list["T2"]),\ + prob(10);pick(GLOB.chemical_gen_classes_list["T3"]),\ + prob(5);pick(GLOB.chemical_gen_classes_list["T4"]),\ prob(15);"") if(random_chem) reagents.add_reagent(random_chem, 30) @@ -672,5 +672,5 @@ if(istype(AM) && (src in user)) user.visible_message("[user] starts to wipe down [AM] with [src]!") if(do_after(user,30, INTERRUPT_ALL, BUSY_ICON_GENERIC)) - user.visible_message("[user] finishes wiping off the [AM]!") + user.visible_message("[user] finishes wiping off [AM]!") AM.clean_blood() diff --git a/code/game/objects/items/reagent_containers/robodropper.dm b/code/game/objects/items/reagent_containers/robodropper.dm index 7447681f0566..694194fbef70 100644 --- a/code/game/objects/items/reagent_containers/robodropper.dm +++ b/code/game/objects/items/reagent_containers/robodropper.dm @@ -45,7 +45,7 @@ safe_thing.create_reagents(100) trans = src.reagents.trans_to(safe_thing, amount_per_transfer_from_this) - for(var/mob/O in viewers(world_view_size, user)) + for(var/mob/O in viewers(GLOB.world_view_size, user)) O.show_message(SPAN_DANGER("[user] tries to squirt something into [target]'s eyes, but fails!"), SHOW_MESSAGE_VISIBLE) spawn(5) src.reagents.reaction(safe_thing, TOUCH) @@ -58,7 +58,7 @@ return - for(var/mob/O in viewers(world_view_size, user)) + for(var/mob/O in viewers(GLOB.world_view_size, user)) O.show_message(SPAN_DANGER("[user] squirts something into [target]'s eyes!"), SHOW_MESSAGE_VISIBLE) src.reagents.reaction(target, TOUCH) diff --git a/code/game/objects/items/reagent_containers/syringes.dm b/code/game/objects/items/reagent_containers/syringes.dm index 06cbb559360c..2bb121740cef 100644 --- a/code/game/objects/items/reagent_containers/syringes.dm +++ b/code/game/objects/items/reagent_containers/syringes.dm @@ -258,20 +258,20 @@ return if (target != user && target.getarmor(target_zone, ARMOR_MELEE) > 5 && prob(50)) - for(var/mob/O in viewers(world_view_size, user)) + for(var/mob/O in viewers(GLOB.world_view_size, user)) O.show_message(text(SPAN_DANGER("[user] tries to stab [target] in \the [hit_area] with [src.name], but the attack is deflected by armor!")), SHOW_MESSAGE_VISIBLE) user.temp_drop_inv_item(src) qdel(src) return - for(var/mob/O in viewers(world_view_size, user)) + for(var/mob/O in viewers(GLOB.world_view_size, user)) O.show_message(text(SPAN_DANGER("[user] stabs [target] in \the [hit_area] with [src.name]!")), SHOW_MESSAGE_VISIBLE) if(affecting.take_damage(3)) target:UpdateDamageIcon() else - for(var/mob/O in viewers(world_view_size, user)) + for(var/mob/O in viewers(GLOB.world_view_size, user)) O.show_message(text(SPAN_DANGER("[user] stabs [target] with [src.name]!")), SHOW_MESSAGE_VISIBLE) target.take_limb_damage(3)// 7 is the same as crowbar punch diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index c5fa39fd100c..de2daa9a3009 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -12,7 +12,7 @@ /obj/item/robot/upgrade/proc/action(mob/living/silicon/robot/R) if(R.stat == DEAD) - to_chat(usr, SPAN_DANGER("The [src] will not function on a deceased robot.")) + to_chat(usr, SPAN_DANGER("[src] will not function on a deceased robot.")) return 1 return 0 @@ -68,7 +68,7 @@ for(var/mob/dead/observer/ghost in GLOB.observer_list) if(ghost.mind && ghost.mind.original == R) R.key = ghost.key - if(R.client) R.client.change_view(world_view_size) + if(R.client) R.client.change_view(GLOB.world_view_size) break R.set_stat(CONSCIOUS) diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 6d0736f8aeb2..7c12da0707c7 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -106,7 +106,7 @@ if(AC) to_chat(usr, SPAN_WARNING("\The [src] cannot be built here!")) return TRUE - var/list/directions = new/list(cardinal) + var/list/directions = GLOB.cardinals.Copy() var/i = 0 for (var/obj/structure/window/win in user.loc) i++ @@ -114,7 +114,7 @@ to_chat(user, SPAN_DANGER("There are too many windows in this location.")) return TRUE directions-=win.dir - if(!(win.dir in cardinal)) + if(!(win.dir in GLOB.cardinals)) to_chat(user, SPAN_DANGER("Can't let you do that.")) return TRUE diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 07345dcdc09f..a0814290ca40 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -10,7 +10,7 @@ /* * Metal */ -var/global/list/datum/stack_recipe/metal_recipes = list ( \ +GLOBAL_LIST_INIT_TYPED(metal_recipes, /datum/stack_recipe, list ( \ new/datum/stack_recipe("barbed wire", /obj/item/stack/barbed_wire, 1, 1, 20, time = 1 SECONDS, skill_req = SKILL_CONSTRUCTION, skill_lvl = SKILL_CONSTRUCTION_TRAINED), \ new/datum/stack_recipe("metal barricade", /obj/structure/barricade/metal, 4, time = 2 SECONDS, one_per_turf = ONE_TYPE_PER_BORDER, on_floor = 1, skill_req = SKILL_CONSTRUCTION, skill_lvl = SKILL_CONSTRUCTION_TRAINED, min_time = 1 SECONDS), \ new/datum/stack_recipe("folding metal barricade", /obj/structure/barricade/plasteel/metal, 6, time = 3 SECONDS, one_per_turf = ONE_TYPE_PER_BORDER, on_floor = 1, skill_req = SKILL_CONSTRUCTION, skill_lvl = SKILL_CONSTRUCTION_ENGI, min_time = 1.5 SECONDS), \ @@ -54,7 +54,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \ null, \ new/datum/stack_recipe("metal baseball bat", /obj/item/weapon/baseballbat/metal, 10, time = 20, on_floor = 1), \ null, \ -) +)) /obj/item/stack/sheet/metal name = "metal sheets" @@ -88,20 +88,20 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \ /obj/item/stack/sheet/metal/cyborg /obj/item/stack/sheet/metal/Initialize(mapload, amount) - recipes = metal_recipes + recipes = GLOB.metal_recipes return ..() /* * Plasteel */ -var/global/list/datum/stack_recipe/plasteel_recipes = list ( \ +GLOBAL_LIST_INIT_TYPED(plasteel_recipes, /datum/stack_recipe, list ( \ new/datum/stack_recipe("plasteel barricade", /obj/structure/barricade/plasteel, 8, time = 4 SECONDS, one_per_turf = ONE_TYPE_PER_TURF, on_floor = 1, skill_req = SKILL_CONSTRUCTION, skill_lvl = SKILL_CONSTRUCTION_ENGI, min_time = 2 SECONDS), null, \ new/datum/stack_recipe("reinforced window frame", /obj/structure/window_frame/colony/reinforced, 5, time = 40, one_per_turf = ONE_TYPE_PER_TURF, on_floor = 1, skill_req = SKILL_CONSTRUCTION, skill_lvl = SKILL_CONSTRUCTION_ENGI), null, \ new/datum/stack_recipe("plasteel rod", /obj/item/stack/rods/plasteel, 1, 1, 30), new/datum/stack_recipe("metal crate", /obj/structure/closet/crate, 5, time = 50, one_per_turf = ONE_TYPE_PER_TURF), \ - ) + )) /obj/item/stack/sheet/plasteel name = "plasteel sheet" @@ -119,7 +119,7 @@ var/global/list/datum/stack_recipe/plasteel_recipes = list ( \ ground_offset_y = 5 /obj/item/stack/sheet/plasteel/New(loc, amount=null) - recipes = plasteel_recipes + recipes = GLOB.plasteel_recipes return ..() @@ -141,7 +141,7 @@ var/global/list/datum/stack_recipe/plasteel_recipes = list ( \ /* * Wood */ -var/global/list/datum/stack_recipe/wood_recipes = list ( \ +GLOBAL_LIST_INIT_TYPED(wood_recipes, /datum/stack_recipe, list ( \ new/datum/stack_recipe("pair of wooden sandals", /obj/item/clothing/shoes/sandal, 1), \ new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20), \ /* @@ -156,7 +156,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \ new/datum/stack_recipe("baseball bat", /obj/item/weapon/baseballbat, 10, time = 20, on_floor = 1), \ new/datum/stack_recipe("wooden cross", /obj/structure/prop/wooden_cross, 2, time = 10, one_per_turf = ONE_TYPE_PER_TURF, on_floor = 1), \ new/datum/stack_recipe("wooden pole", /obj/item/weapon/pole, 3, time = 10, one_per_turf = ONE_TYPE_PER_TURF, on_floor = 1) \ - ) + )) /obj/item/stack/sheet/wood name = "wooden plank" @@ -184,7 +184,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \ icon_state = "sheet-wood" /obj/item/stack/sheet/wood/New(loc, amount=null) - recipes = wood_recipes + recipes = GLOB.wood_recipes return ..() /* @@ -201,7 +201,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \ /* * Cardboard */ -var/global/list/datum/stack_recipe/cardboard_recipes = list ( \ +GLOBAL_LIST_INIT_TYPED(cardboard_recipes, /datum/stack_recipe, list ( \ new/datum/stack_recipe("box", /obj/item/storage/box), \ new/datum/stack_recipe("donut box", /obj/item/storage/donut_box/empty), \ new/datum/stack_recipe("egg box", /obj/item/storage/fancy/egg_box), \ @@ -223,11 +223,13 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \ null, \ new/datum/stack_recipe_list("empty ammo boxes",list( \ new/datum/stack_recipe("empty magazine box (88 Mod 4 AP)", /obj/item/ammo_box/magazine/mod88/empty), \ + new/datum/stack_recipe("empty magazine box (SU-6)", /obj/item/ammo_box/magazine/su6/empty), \ + new/datum/stack_recipe("empty magazine box (VP78)", /obj/item/ammo_box/magazine/vp78/empty), \ + null, \ new/datum/stack_recipe("empty magazine box (M4A3)", /obj/item/ammo_box/magazine/m4a3/empty), \ new/datum/stack_recipe("empty magazine box (M4A3 AP)", /obj/item/ammo_box/magazine/m4a3/ap/empty), \ new/datum/stack_recipe("empty magazine box (M4A3 HP)", /obj/item/ammo_box/magazine/m4a3/hp/empty), \ - new/datum/stack_recipe("empty magazine box (SU-6)", /obj/item/ammo_box/magazine/su6/empty), \ - new/datum/stack_recipe("empty magazine box (VP78)", /obj/item/ammo_box/magazine/vp78/empty), \ + new/datum/stack_recipe("empty magazine box (M4A3 Incen)", /obj/item/ammo_box/magazine/m4a3/incen/empty), \ null, \ new/datum/stack_recipe("empty speed loader box (M44)", /obj/item/ammo_box/magazine/m44/empty), \ new/datum/stack_recipe("empty speed loader box (M44 Heavy)", /obj/item/ammo_box/magazine/m44/heavy/empty), \ @@ -256,10 +258,27 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \ new/datum/stack_recipe("empty magazine box (M41A Incen)", /obj/item/ammo_box/magazine/incen/empty), \ new/datum/stack_recipe("empty magazine box (M41A LE)", /obj/item/ammo_box/magazine/le/empty), \ null, \ + new/datum/stack_recipe("empty magazine box (M41A MK1)", /obj/item/ammo_box/magazine/mk1/empty), \ + new/datum/stack_recipe("empty magazine box (M41A MK1 AP)", /obj/item/ammo_box/magazine/mk1/ap/empty), \ + null, \ + new/datum/stack_recipe("empty drum box (M56B)", /obj/item/ammo_box/magazine/m56b/empty), \ + new/datum/stack_recipe("empty drum box (M56B Irradiated)", /obj/item/ammo_box/magazine/m56b/dirty/empty), \ + new/datum/stack_recipe("empty drum box (M56D)", /obj/item/ammo_box/magazine/m56d/empty), \ + null, \ + new/datum/stack_recipe("empty drum box (M2C)", /obj/item/ammo_box/magazine/m2c/empty), \ + null, \ + new/datum/stack_recipe("empty magazine box (M41AE2)", /obj/item/ammo_box/magazine/m41ae2/empty), \ + new/datum/stack_recipe("empty magazine box (M41AE2 Holo-Target)", /obj/item/ammo_box/magazine/m41ae2/holo/empty), \ + new/datum/stack_recipe("empty magazine box (M41AE2 HEAP)", /obj/item/ammo_box/magazine/m41ae2/heap/empty), \ + null, \ + new/datum/stack_recipe("empty flamer tank box (UT-Napthal)", /obj/item/ammo_box/magazine/flamer/empty), \ + new/datum/stack_recipe("empty flamer tank box (Napalm B-Gel)", /obj/item/ammo_box/magazine/flamer/bgel/empty), \ + null, \ new/datum/stack_recipe("empty shotgun shell box (Beanbag)", /obj/item/ammo_box/magazine/shotgun/beanbag/empty), \ new/datum/stack_recipe("empty shotgun shell box (Buckshot)", /obj/item/ammo_box/magazine/shotgun/buckshot/empty), \ new/datum/stack_recipe("empty shotgun shell box (Flechette)", /obj/item/ammo_box/magazine/shotgun/flechette/empty), \ new/datum/stack_recipe("empty shotgun shell box (Incendiary)", /obj/item/ammo_box/magazine/shotgun/incendiary/empty), \ + new/datum/stack_recipe("empty shotgun shell box (Incendiary Buckshot)", /obj/item/ammo_box/magazine/shotgun/incendiarybuck/empty), \ new/datum/stack_recipe("empty shotgun shell box (Slugs)", /obj/item/ammo_box/magazine/shotgun/empty), \ null, \ new/datum/stack_recipe("empty 45-70 bullets box", /obj/item/ammo_box/magazine/lever_action/empty), \ @@ -279,23 +298,48 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \ new/datum/stack_recipe("empty rifle ammo box (10x24mm Incen)", /obj/item/ammo_box/rounds/incen/empty), \ new/datum/stack_recipe("empty rifle ammo box (10x24mm LE)", /obj/item/ammo_box/rounds/le/empty), \ null, \ + new/datum/stack_recipe("empty rifle ammo box (9mm)", /obj/item/ammo_box/rounds/pistol/empty), \ + new/datum/stack_recipe("empty rifle ammo box (9mm AP)", /obj/item/ammo_box/rounds/pistol/ap/empty), \ + new/datum/stack_recipe("empty rifle ammo box (9mm HP)", /obj/item/ammo_box/rounds/pistol/hp/empty), \ + new/datum/stack_recipe("empty rifle ammo box (9mm Incen)", /obj/item/ammo_box/rounds/pistol/incen/empty), \ + null, \ new/datum/stack_recipe("empty box of MREs", /obj/item/ammo_box/magazine/misc/mre/empty), \ new/datum/stack_recipe("empty box of M94 Marking Flare Packs", /obj/item/ammo_box/magazine/misc/flares/empty), \ + new/datum/stack_recipe("empty box of M89 Signal Flare Packs", /obj/item/ammo_box/magazine/misc/flares/signal/empty), \ new/datum/stack_recipe("empty box of flashlights", /obj/item/ammo_box/magazine/misc/flashlight/empty), \ new/datum/stack_recipe("empty box of High-Capacity Power Cells", /obj/item/ammo_box/magazine/misc/power_cell/empty), \ null, \ + new/datum/stack_recipe("empty magazine box (Desert Eagle)", /obj/item/ammo_box/magazine/deagle/empty), \ + new/datum/stack_recipe("empty magazine box (Desert Eagle Heavy)", /obj/item/ammo_box/magazine/deagle/super/empty), \ + new/datum/stack_recipe("empty magazine box (Desert Eagle High-Impact)", /obj/item/ammo_box/magazine/deagle/super/highimpact/empty), \ + new/datum/stack_recipe("empty magazine box (Desert Eagle AP)", /obj/item/ammo_box/magazine/deagle/super/highimpact/ap/empty), \ + null, \ + new/datum/stack_recipe("empty magazine box (Spearhead HP)", /obj/item/ammo_box/magazine/spearhead/empty), \ + new/datum/stack_recipe("empty magazine box (Spearhead)", /obj/item/ammo_box/magazine/spearhead/normalpoint/empty), \ + null, \ new/datum/stack_recipe("empty magazine box (M16)", /obj/item/ammo_box/magazine/M16/empty), \ new/datum/stack_recipe("empty magazine box (M16 AP)", /obj/item/ammo_box/magazine/M16/ap/empty), \ null, \ + new/datum/stack_recipe("empty magazine box (AR10)", /obj/item/ammo_box/magazine/ar10/empty), \ + null, \ + new/datum/stack_recipe("empty magazine box (MP5)", /obj/item/ammo_box/magazine/mp5/empty), \ + null, \ + new/datum/stack_recipe("empty magazine box (NSG 23)", /obj/item/ammo_box/magazine/nsg23/empty), \ + new/datum/stack_recipe("empty magazine box (NSG 23 AP)", /obj/item/ammo_box/magazine/nsg23/ap/empty), \ + new/datum/stack_recipe("empty magazine box (NSG 23 EX)", /obj/item/ammo_box/magazine/nsg23/ex/empty), \ + null, \ new/datum/stack_recipe("empty magazine box (Type71)", /obj/item/ammo_box/magazine/type71/empty), \ new/datum/stack_recipe("empty magazine box (Type71 AP)", /obj/item/ammo_box/magazine/type71/ap/empty), \ null, \ + new/datum/stack_recipe("empty magazine box (Type73)", /obj/item/ammo_box/magazine/type73/empty), \ + new/datum/stack_recipe("empty magazine box (Type73 High-Impact)", /obj/item/ammo_box/magazine/type73/impact/empty), \ + null, \ new/datum/stack_recipe("empty rifle ammo box (5.45x39mm)", /obj/item/ammo_box/rounds/type71/empty), \ new/datum/stack_recipe("empty rifle ammo box (5.45x39mm AP)", /obj/item/ammo_box/rounds/type71/ap/empty), \ )) \ -) +)) /obj/item/stack/sheet/cardboard //BubbleWrap name = "cardboard" @@ -306,7 +350,7 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \ stack_id = "cardboard" /obj/item/stack/sheet/cardboard/New(loc, amount=null) - recipes = cardboard_recipes + recipes = GLOB.cardboard_recipes return ..() /obj/item/stack/sheet/cardboard/small_stack @@ -321,9 +365,9 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \ /* * Aluminum */ -var/global/list/datum/stack_recipe/aluminum_recipes = list ( \ +GLOBAL_LIST_INIT_TYPED(aluminium_recipes, /datum/stack_recipe, list ( \ new/datum/stack_recipe("flask", /obj/item/reagent_container/food/drinks/flask, 1) - ) + )) /obj/item/stack/sheet/aluminum name = "aluminum" @@ -336,9 +380,9 @@ var/global/list/datum/stack_recipe/aluminum_recipes = list ( \ /* * Copper */ -var/global/list/datum/stack_recipe/copper_recipes = list ( \ +GLOBAL_LIST_INIT_TYPED(copper_recipes, /datum/stack_recipe, list ( \ new/datum/stack_recipe("cable coil", /obj/item/stack/cable_coil, 2, 1, 20, time = 10, skill_req = SKILL_CONSTRUCTION, skill_lvl = SKILL_CONSTRUCTION_TRAINED) - ) + )) /obj/item/stack/sheet/copper name = "copper" diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 3912e2d64165..82e091be9008 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -313,6 +313,8 @@ Also change the icon to reflect the amount of sheets, if possible.*/ if(mods["alt"]) if(!CAN_PICKUP(user, src)) return + if(amount <= 1) + return var/desired = tgui_input_number(user, "How much would you like to split off from this stack?", "How much?", 1, amount-1, 1) if(!desired) return diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 2fcff493482f..5b77b9149a53 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -72,9 +72,9 @@ return FALSE // Create their vis object if needed - if(!xeno.backpack_icon_carrier) - xeno.backpack_icon_carrier = new(null, xeno) - xeno.vis_contents += xeno.backpack_icon_carrier + if(!xeno.backpack_icon_holder) + xeno.backpack_icon_holder = new(null, xeno) + xeno.vis_contents += xeno.backpack_icon_holder target_mob.put_in_back(src) return FALSE @@ -767,9 +767,9 @@ GLOBAL_LIST_EMPTY_TYPED(radio_packs, /obj/item/storage/backpack/marine/satchel/r H.FF_hit_evade = 1000 H.allow_gun_usage = allow_gun_usage - var/datum/mob_hud/security/advanced/SA = huds[MOB_HUD_SECURITY_ADVANCED] + var/datum/mob_hud/security/advanced/SA = GLOB.huds[MOB_HUD_SECURITY_ADVANCED] SA.remove_from_hud(H) - var/datum/mob_hud/xeno_infection/XI = huds[MOB_HUD_XENO_INFECTION] + var/datum/mob_hud/xeno_infection/XI = GLOB.huds[MOB_HUD_XENO_INFECTION] XI.remove_from_hud(H) anim(H.loc, H, 'icons/mob/mob.dmi', null, "cloak", null, H.dir) @@ -806,9 +806,9 @@ GLOBAL_LIST_EMPTY_TYPED(radio_packs, /obj/item/storage/backpack/marine/satchel/r H.alpha = initial(H.alpha) H.FF_hit_evade = initial(H.FF_hit_evade) - var/datum/mob_hud/security/advanced/SA = huds[MOB_HUD_SECURITY_ADVANCED] + var/datum/mob_hud/security/advanced/SA = GLOB.huds[MOB_HUD_SECURITY_ADVANCED] SA.add_to_hud(H) - var/datum/mob_hud/xeno_infection/XI = huds[MOB_HUD_XENO_INFECTION] + var/datum/mob_hud/xeno_infection/XI = GLOB.huds[MOB_HUD_XENO_INFECTION] XI.add_to_hud(H) if(anim) @@ -1127,6 +1127,10 @@ GLOBAL_LIST_EMPTY_TYPED(radio_packs, /obj/item/storage/backpack/marine/satchel/r max_storage_space = 21 camo_alpha = 10 +/obj/item/storage/backpack/marine/satchel/scout_cloak/upp/weak + desc = "A thermo-optic camouflage cloak commonly used by UPP commando units. This one is less effective than normal." + actions_types = null + //----------TWE SECTION---------- /obj/item/storage/backpack/rmc has_gamemode_skin = FALSE diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 71edc21e29f9..40953eb97395 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -648,7 +648,7 @@ /obj/item/storage/belt/shotgun/full/random/fill_preset_inventory() for(var/i = 1 to storage_slots) - var/random_shell_type = pick(shotgun_handfuls_12g) + var/random_shell_type = pick(GLOB.shotgun_handfuls_12g) new random_shell_type(src) /obj/item/storage/belt/shotgun/attackby(obj/item/W, mob/user) diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index 4a3afa00f368..8e4ffb90d2bd 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -761,3 +761,211 @@ else if(!isopened) isopened = 1 icon_state = "mealpackopened" + +//food boxes for storage in bulk + +//meat +/obj/item/storage/box/meat + name = "box of meat" + +/obj/item/storage/box/meat/fill_preset_inventory() + for(var/i in 1 to 7) + new /obj/item/reagent_container/food/snacks/meat/monkey(src) + +//fish +/obj/item/storage/box/fish + name = "box of fish" + +/obj/item/storage/box/fish/fill_preset_inventory() + for(var/i in 1 to 7) + new /obj/item/reagent_container/food/snacks/carpmeat(src) + +//grocery + +//milk +/obj/item/storage/box/milk + name = "box of milk" + +/obj/item/storage/box/milk/fill_preset_inventory() + for(var/i in 1 to 7) + new /obj/item/reagent_container/food/drinks/milk(src) + +//soymilk +/obj/item/storage/box/soymilk + name = "box of soymilk" + +/obj/item/storage/box/soymilk/fill_preset_inventory() + for(var/i in 1 to 7) + new /obj/item/reagent_container/food/drinks/soymilk(src) + +//enzyme +/obj/item/storage/box/enzyme + name = "box of enzyme" + +/obj/item/storage/box/enzyme/fill_preset_inventory() + for(var/i in 1 to 7) + new /obj/item/reagent_container/food/condiment/enzyme(src) + +//dry storage + +//flour +/obj/item/storage/box/flour + name = "box of flour" + +/obj/item/storage/box/flour/fill_preset_inventory() + for(var/i in 1 to 7) + new /obj/item/reagent_container/food/snacks/flour(src) + +//sugar +/obj/item/storage/box/sugar + name = "box of sugar" + +/obj/item/storage/box/sugar/fill_preset_inventory() + for(var/i in 1 to 7) + new /obj/item/reagent_container/food/condiment/sugar(src) + +//saltshaker +/obj/item/storage/box/saltshaker + name = "box of saltshakers" + +/obj/item/storage/box/saltshaker/fill_preset_inventory() + for(var/i in 1 to 7) + new /obj/item/reagent_container/food/condiment/saltshaker(src) + +//peppermill +/obj/item/storage/box/peppermill + name = "box of peppermills" + +/obj/item/storage/box/peppermill/fill_preset_inventory() + for(var/i in 1 to 7) + new /obj/item/reagent_container/food/condiment/peppermill(src) + +//mint +/obj/item/storage/box/mint + name = "box of mints" + +/obj/item/storage/box/mint/fill_preset_inventory() + for(var/i in 1 to 7) + new /obj/item/reagent_container/food/snacks/mint(src) + +// ORGANICS + +//apple +/obj/item/storage/box/apple + name = "box of apples" + +/obj/item/storage/box/apple/fill_preset_inventory() + for(var/i in 1 to 7) + new /obj/item/reagent_container/food/snacks/grown/apple(src) + +//banana +/obj/item/storage/box/banana + name = "box of bananas" + +/obj/item/storage/box/banana/fill_preset_inventory() + for(var/i in 1 to 7) + new /obj/item/reagent_container/food/snacks/grown/banana(src) + +//chanterelle +/obj/item/storage/box/chanterelles + name = "box of chanterelle" + +/obj/item/storage/box/chanterelle/fill_preset_inventory() + for(var/i in 1 to 7) + new /obj/item/reagent_container/food/snacks/grown/mushroom/chanterelle(src) + +//cherries +/obj/item/storage/box/cherries + name = "box of cherries" + +/obj/item/storage/box/cherries/fill_preset_inventory() + for(var/i in 1 to 7) + new /obj/item/reagent_container/food/snacks/grown/cherries(src) + +//chili +/obj/item/storage/box/chili + name = "box of chili" + +/obj/item/storage/box/chili/fill_preset_inventory() + for(var/i in 1 to 7) + new /obj/item/reagent_container/food/snacks/grown/chili(src) + +//cabbage +/obj/item/storage/box/cabbage + name = "box of cabbages" + +/obj/item/storage/box/cabbage/fill_preset_inventory() + for(var/i in 1 to 7) + new /obj/item/reagent_container/food/snacks/grown/cabbage(src) + +//carrot +/obj/item/storage/box/carrot + name = "box of carrots" + +/obj/item/storage/box/carrot/fill_preset_inventory() + for(var/i in 1 to 7) + new /obj/item/reagent_container/food/snacks/grown/carrot(src) + +//corn +/obj/item/storage/box/corn + name = "box of corn" + +/obj/item/storage/box/corn/fill_preset_inventory() + for(var/i in 1 to 7) + new /obj/item/reagent_container/food/snacks/grown/corn(src) + +//eggplant +/obj/item/storage/box/eggplant + name = "box of eggplants" + +/obj/item/storage/box/eggplant/fill_preset_inventory() + for(var/i in 1 to 7) + new /obj/item/reagent_container/food/snacks/grown/eggplant(src) + +//lemon +/obj/item/storage/box/lemon + name = "box of lemons" + +/obj/item/storage/box/lemon/fill_preset_inventory() + for(var/i in 1 to 7) + new /obj/item/reagent_container/food/snacks/grown/lemon(src) + +//lime +/obj/item/storage/box/lime + name = "box of limes" + +/obj/item/storage/box/lime/fill_preset_inventory() + for(var/i in 1 to 7) + new /obj/item/reagent_container/food/snacks/grown/lime(src) + +//orange +/obj/item/storage/box/orange + name = "box of oranges" + +/obj/item/storage/box/orange/fill_preset_inventory() + for(var/i in 1 to 7) + new /obj/item/reagent_container/food/snacks/grown/orange(src) + +//potato +/obj/item/storage/box/potato + name = "box of potatoes" + +/obj/item/storage/box/potato/fill_preset_inventory() + for(var/i in 1 to 7) + new /obj/item/reagent_container/food/snacks/grown/potato(src) + +//tomato +/obj/item/storage/box/tomato + name = "box of tomatoes" + +/obj/item/storage/box/tomato/fill_preset_inventory() + for(var/i in 1 to 7) + new /obj/item/reagent_container/food/snacks/grown/tomato(src) + +//whitebeet +/obj/item/storage/box/whitebeet + name = "box of whitebeet" + +/obj/item/storage/box/whitebeet/fill_preset_inventory() + for(var/i in 1 to 7) + new /obj/item/reagent_container/food/snacks/grown/whitebeet(src) diff --git a/code/game/objects/items/storage/large_holster.dm b/code/game/objects/items/storage/large_holster.dm index 76f98c423974..b02dff1bdbcc 100644 --- a/code/game/objects/items/storage/large_holster.dm +++ b/code/game/objects/items/storage/large_holster.dm @@ -250,12 +250,12 @@ return FALSE if(user.back != src) - to_chat(user, "The [src] must be equipped before you can switch types") + to_chat(user, SPAN_WARNING("[src] must be equipped before you can switch types.")) return var/obj/item/weapon/gun/flamer/M240T/flamer = user.get_active_hand() if(!istype(flamer)) - to_chat(user, "You must be holding the M240-T incinerator unit to use [src]") + to_chat(user, SPAN_WARNING("You must be holding [flamer] to use [src].")) return if(!active_fuel) diff --git a/code/game/objects/items/storage/pouch.dm b/code/game/objects/items/storage/pouch.dm index 525909cb621d..acb87e988879 100644 --- a/code/game/objects/items/storage/pouch.dm +++ b/code/game/objects/items/storage/pouch.dm @@ -683,6 +683,18 @@ new /obj/item/reagent_container/hypospray/autoinjector/stimulant/redemption_stimulant(src) new /obj/item/reagent_container/hypospray/autoinjector/stimulant/speed_stimulant(src) +/obj/item/storage/pouch/medical/socmed/not_op/fill_preset_inventory() + new /obj/item/device/healthanalyzer(src) + new /obj/item/stack/medical/splint(src) + new /obj/item/stack/medical/advanced/bruise_pack(src) + new /obj/item/stack/medical/advanced/ointment(src) + new /obj/item/reagent_container/hypospray/autoinjector/bicaridine(src) + new /obj/item/reagent_container/hypospray/autoinjector/kelotane(src) + new /obj/item/reagent_container/hypospray/autoinjector/oxycodone(src) + new /obj/item/reagent_container/hypospray/autoinjector/emergency(src) + new /obj/item/reagent_container/hypospray/autoinjector/emergency(src) + new /obj/item/tool/extinguisher/mini(src) + /obj/item/storage/pouch/medical/socmed/dutch name = "\improper Dutch's Medical Pouch" desc = "A pouch bought from a black market trader by Dutch quite a few years ago. Rumoured to be stolen from secret USCM assets. Its contents have been slowly used up and replaced over the years." diff --git a/code/game/objects/items/storage/storage.dm b/code/game/objects/items/storage/storage.dm index cfdb2f88b090..6e7e891d6ba8 100644 --- a/code/game/objects/items/storage/storage.dm +++ b/code/game/objects/items/storage/storage.dm @@ -852,6 +852,7 @@ W is always an item. stop_warning prevents messaging. user may be null.**/ return ..() /obj/item/storage/emp_act(severity) + . = ..() if(!istype(src.loc, /mob/living)) for(var/obj/O in contents) O.emp_act(severity) diff --git a/code/game/objects/items/tools/flame_tools.dm b/code/game/objects/items/tools/flame_tools.dm index 7681e74a1d88..82870f7ed8d1 100644 --- a/code/game/objects/items/tools/flame_tools.dm +++ b/code/game/objects/items/tools/flame_tools.dm @@ -233,12 +233,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM light(SPAN_NOTICE("[user] fiddles with [W], and manages to light their [name].")) else if(istype(W, /obj/item/attachable/attached_gun/flamer)) - light(SPAN_NOTICE("[user] lights their [src] with the [W].")) + light(SPAN_NOTICE("[user] lights their [name] with [W].")) else if(istype(W, /obj/item/weapon/gun/flamer)) var/obj/item/weapon/gun/flamer/F = W if(!(F.flags_gun_features & GUN_TRIGGER_SAFETY)) - light(SPAN_NOTICE("[user] lights their [src] with the pilot light of the [F].")) + light(SPAN_NOTICE("[user] lights their [name] with the pilot light of [F].")) else to_chat(user, SPAN_WARNING("Turn on the pilot light first!")) @@ -246,20 +246,20 @@ CIGARETTE PACKETS ARE IN FANCY.DM var/obj/item/weapon/gun/G = W for(var/slot in G.attachments) if(istype(G.attachments[slot], /obj/item/attachable/attached_gun/flamer)) - light(SPAN_NOTICE("[user] lights their [src] with [G.attachments[slot]].")) + light(SPAN_NOTICE("[user] lights their [name] with [G.attachments[slot]].")) break else if(istype(W, /obj/item/tool/surgery/cautery)) - light(SPAN_NOTICE("[user] lights their [src] with the [W].")) + light(SPAN_NOTICE("[user] lights their [name] with [W].")) else if(istype(W, /obj/item/clothing/mask/cigarette)) var/obj/item/clothing/mask/cigarette/C = W if(C.item_state == icon_on) - light(SPAN_NOTICE("[user] lights their [src] with the [C] after a few attempts.")) + light(SPAN_NOTICE("[user] lights their [name] with [C] after a few attempts.")) else if(istype(W, /obj/item/tool/candle)) if(W.heat_source > 200) - light(SPAN_NOTICE("[user] lights their [src] with the [W] after a few attempts.")) + light(SPAN_NOTICE("[user] lights their [name] with [W] after a few attempts.")) return @@ -529,12 +529,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM light(SPAN_NOTICE("[user] fiddles with [W], and manages to light their [name] with the power of science.")) else if(istype(W, /obj/item/attachable/attached_gun/flamer)) - light(SPAN_NOTICE("[user] lights their [src] with the [W], bet that would have looked cooler if it was attached to something first!")) + light(SPAN_NOTICE("[user] lights their [name] with [W], bet that would have looked cooler if it was attached to something first!")) else if(istype(W, /obj/item/weapon/gun/flamer)) var/obj/item/weapon/gun/flamer/F = W if(!(F.flags_gun_features & GUN_TRIGGER_SAFETY)) - light(SPAN_NOTICE("[user] lights their [src] with the pilot light of the [F], the glint of pyromania in their eye.")) + light(SPAN_NOTICE("[user] lights their [name] with the pilot light of [F], the glint of pyromania in their eye.")) else to_chat(user, SPAN_WARNING("Turn on the pilot light first!")) @@ -546,16 +546,16 @@ CIGARETTE PACKETS ARE IN FANCY.DM break else if(istype(W, /obj/item/tool/surgery/cautery)) - light(SPAN_NOTICE("[user] lights their [src] with the [W], that can't be sterile!")) + light(SPAN_NOTICE("[user] lights their [name] with [W], that can't be sterile!")) else if(istype(W, /obj/item/clothing/mask/cigarette)) var/obj/item/clothing/mask/cigarette/C = W if(C.item_state == icon_on) - light(SPAN_NOTICE("[user] lights their [src] with the [C] after a few attempts.")) + light(SPAN_NOTICE("[user] lights their [name] with [C] after a few attempts.")) else if(istype(W, /obj/item/tool/candle)) if(W.heat_source > 200) - light(SPAN_NOTICE("[user] lights their [src] with the [W] after a few attempts.")) + light(SPAN_NOTICE("[user] lights their [name] with [W] after a few attempts.")) ///////////////// //SMOKING PIPES// @@ -751,7 +751,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM else playsound(src.loc,"lighter",10, 1, 3) if(prob(95)) - user.visible_message(SPAN_NOTICE("After a few attempts, [user] manages to light the [src].")) + user.visible_message(SPAN_NOTICE("After a few attempts, [user] manages to light [src].")) else to_chat(user, SPAN_WARNING("You burn yourself while lighting the lighter.")) @@ -759,7 +759,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM user.apply_damage(2,BURN,"l_hand") else user.apply_damage(2,BURN,"r_hand") - user.visible_message(SPAN_NOTICE("After a few attempts, [user] manages to light the [src], they however burn their finger in the process.")) + user.visible_message(SPAN_NOTICE("After a few attempts, [user] manages to light [src], they however burn their finger in the process.")) set_light_range(2) set_light_on(TRUE) @@ -777,10 +777,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM item_state = icon_off if(!silent) if(istype(src, /obj/item/tool/lighter/zippo) ) - bearer.visible_message("You hear a quiet click, as [bearer] shuts off [src] without even looking at what they're doing.") + bearer.visible_message(SPAN_ROSE("You hear a quiet click, as [bearer] shuts off [src] without even looking at what they're doing.")) playsound(src.loc,"zippo_close",10, 1, 3) else - bearer.visible_message(SPAN_NOTICE("[bearer] quietly shuts off the [src].")) + bearer.visible_message(SPAN_NOTICE("[bearer] quietly shuts off [src].")) set_light_on(FALSE) STOP_PROCESSING(SSobj, src) @@ -805,4 +805,3 @@ CIGARETTE PACKETS ARE IN FANCY.DM cig.light(SPAN_NOTICE("[user] holds the [name] out for [M], and lights the [cig.name].")) else ..() - diff --git a/code/game/objects/items/tools/kitchen_tools.dm b/code/game/objects/items/tools/kitchen_tools.dm index bb763ada9911..2cff941be8d6 100644 --- a/code/game/objects/items/tools/kitchen_tools.dm +++ b/code/game/objects/items/tools/kitchen_tools.dm @@ -218,7 +218,7 @@ var/cooldown = 0 /obj/item/tool/kitchen/tray/attack(mob/living/carbon/M, mob/living/carbon/user) - to_chat(user, SPAN_WARNING("You accidentally slam yourself with the [src]!")) + to_chat(user, SPAN_WARNING("You accidentally slam yourself with [src]!")) user.apply_effect(1, WEAKEN) user.take_limb_damage(2) diff --git a/code/game/objects/items/tools/maintenance_tools.dm b/code/game/objects/items/tools/maintenance_tools.dm index a326808bf491..a02536800f15 100644 --- a/code/game/objects/items/tools/maintenance_tools.dm +++ b/code/game/objects/items/tools/maintenance_tools.dm @@ -96,8 +96,8 @@ if(E) var/safety = H.get_eye_protection() if(!safety) - to_chat(user, SPAN_DANGER("You stab [H] in the eyes with the [src]!")) - visible_message(SPAN_DANGER("[user] stabs [H] in the eyes with the [src]!")) + user.visible_message(SPAN_DANGER("[user] stabs [H] in the eyes with [src]!"), + SPAN_DANGER("You stab [H] in the eyes with [src]!")) E.take_damage(rand(8,20)) return ..() /obj/item/tool/screwdriver/tactical diff --git a/code/game/objects/items/tools/misc_tools.dm b/code/game/objects/items/tools/misc_tools.dm index 98dc89321d34..44aaab771db8 100644 --- a/code/game/objects/items/tools/misc_tools.dm +++ b/code/game/objects/items/tools/misc_tools.dm @@ -132,7 +132,7 @@ qdel(I) //delete the paper item labels_left = initial(labels_left) else - to_chat(user, SPAN_NOTICE("The [src] is already full.")) + to_chat(user, SPAN_NOTICE("[src] is already full.")) /* Instead of updating labels_left to user every label used, @@ -284,21 +284,24 @@ matter = list("metal" = 20, "gold" = 10) var/static/list/colour_list = list("red", "blue", "green", "yellow", "purple", "pink", "brown", "black", "orange") // Can add more colors as required var/current_colour_index = 1 - var/owner = "hard to read text" + var/owner_name -/obj/item/tool/pen/fountain/Initialize(mapload, ...) +/obj/item/tool/pen/fountain/pickup(mob/user, silent) . = ..() - if(!mapload) - RegisterSignal(src, COMSIG_POST_SPAWN_UPDATE, PROC_REF(set_owner)) + if(!owner_name) + RegisterSignal(user, COMSIG_POST_SPAWN_UPDATE, PROC_REF(set_owner), override = TRUE) ///Sets the owner of the pen to who it spawns with, requires var/source for signals -/obj/item/tool/pen/fountain/proc/set_owner(source = src, mob/living/carbon/human/user) - UnregisterSignal(src, COMSIG_POST_SPAWN_UPDATE) - owner = user +/obj/item/tool/pen/fountain/proc/set_owner(datum/source) + SIGNAL_HANDLER + UnregisterSignal(source, COMSIG_POST_SPAWN_UPDATE) + var/mob/living/carbon/human/user = source + owner_name = user.name /obj/item/tool/pen/fountain/get_examine_text(mob/user) . = ..() - . += "There's a laser engraving of [owner] on it." + if(owner_name) + . += "There's a laser engraving of [owner_name] on it." /obj/item/tool/pen/fountain/attack_self(mob/living/carbon/human/user) if(on) diff --git a/code/game/objects/items/tools/shovel_tools.dm b/code/game/objects/items/tools/shovel_tools.dm index 008b37705fe3..ad74dca54e88 100644 --- a/code/game/objects/items/tools/shovel_tools.dm +++ b/code/game/objects/items/tools/shovel_tools.dm @@ -151,7 +151,7 @@ /obj/item/tool/shovel/proc/dump_shovel(atom/target, mob/user) var/turf/T = target - to_chat(user, SPAN_NOTICE("you dump the [dirt_type_to_name(dirt_type)]!")) + to_chat(user, SPAN_NOTICE("You dump the [dirt_type_to_name(dirt_type)]!")) playsound(user.loc, "rustle", 30, 1, 6) if(dirt_type == DIRT_TYPE_SNOW) var/obj/item/stack/snow/S = locate() in T diff --git a/code/game/objects/items/toys/cards.dm b/code/game/objects/items/toys/cards.dm index b6e3bb558ec4..2debd83f9bab 100644 --- a/code/game/objects/items/toys/cards.dm +++ b/code/game/objects/items/toys/cards.dm @@ -21,7 +21,6 @@ icon = 'icons/obj/items/playing_cards.dmi' icon_state = "deck" w_class = SIZE_TINY - flags_item = NOTABLEMERGE var/base_icon = "deck" var/max_cards = 52 @@ -262,7 +261,6 @@ icon = 'icons/obj/items/playing_cards.dmi' icon_state = "empty" w_class = SIZE_TINY - flags_item = NOTABLEMERGE var/concealed = FALSE var/pile_state = FALSE diff --git a/code/game/objects/items/toys/crayons.dm b/code/game/objects/items/toys/crayons.dm index 5bd4d05f317f..c02b59289fa1 100644 --- a/code/game/objects/items/toys/crayons.dm +++ b/code/game/objects/items/toys/crayons.dm @@ -73,7 +73,7 @@ var/drawtype = tgui_input_list(usr, "Choose what you'd like to draw.", "Crayon scribbles", list("graffiti","rune","letter")) switch(drawtype) if("letter") - drawtype = tgui_input_list(usr, "Choose the letter.", "Crayon scribbles", alphabet_lowercase) + drawtype = tgui_input_list(usr, "Choose the letter.", "Crayon scribbles", GLOB.alphabet_lowercase) to_chat(user, "You start drawing a letter on the [target.name].") if("graffiti") to_chat(user, "You start drawing graffiti on the [target.name].") diff --git a/code/game/objects/items/toys/toy_weapons.dm b/code/game/objects/items/toys/toy_weapons.dm index 80f94cab8e2e..ce32cfdb67a9 100644 --- a/code/game/objects/items/toys/toy_weapons.dm +++ b/code/game/objects/items/toys/toy_weapons.dm @@ -130,7 +130,7 @@ for(var/mob/living/M in D.loc) if(!istype(M,/mob/living)) continue if(M == user) continue - for(var/mob/O in viewers(world_view_size, D)) + for(var/mob/O in viewers(GLOB.world_view_size, D)) O.show_message(SPAN_DANGER("[M] was hit by the foam dart!"), SHOW_MESSAGE_VISIBLE) new /obj/item/toy/crossbow_ammo(M.loc) qdel(D) @@ -152,7 +152,7 @@ return else if (bullets == 0) user.apply_effect(5, WEAKEN) - for(var/mob/O in viewers(world_view_size, user)) + for(var/mob/O in viewers(GLOB.world_view_size, user)) O.show_message(SPAN_DANGER("[user] realized they were out of ammo and starting scrounging for some!"), SHOW_MESSAGE_VISIBLE) diff --git a/code/game/objects/items/toys/toys.dm b/code/game/objects/items/toys/toys.dm index 7a17904635f0..65234c59b89b 100644 --- a/code/game/objects/items/toys/toys.dm +++ b/code/game/objects/items/toys/toys.dm @@ -44,7 +44,7 @@ if(!proximity) return if (istype(A, /obj/structure/reagent_dispensers/watertank) && get_dist(src,A) <= 1) A.reagents.trans_to(src, 10) - to_chat(user, SPAN_NOTICE(" You fill the balloon with the contents of [A].")) + to_chat(user, SPAN_NOTICE("You fill the balloon with the contents of [A].")) src.desc = "A translucent balloon with some form of liquid sloshing around in it." src.update_icon() return @@ -53,22 +53,22 @@ if(istype(O, /obj/item/reagent_container/glass)) if(O.reagents) if(O.reagents.total_volume < 1) - to_chat(user, "The [O] is empty.") + to_chat(user, SPAN_WARNING("[O] is empty.")) else if(O.reagents.total_volume >= 1) if(O.reagents.has_reagent("pacid", 1)) - to_chat(user, "The acid chews through the balloon!") + to_chat(user, SPAN_WARNING("The acid chews through the balloon!")) O.reagents.reaction(user) qdel(src) else src.desc = "A translucent balloon with some form of liquid sloshing around in it." - to_chat(user, SPAN_NOTICE(" You fill the balloon with the contents of [O].")) + to_chat(user, SPAN_NOTICE("You fill the balloon with the contents of [O].")) O.reagents.trans_to(src, 10) src.update_icon() return /obj/item/toy/balloon/launch_impact(atom/hit_atom) if(src.reagents.total_volume >= 1) - src.visible_message(SPAN_DANGER("The [src] bursts!"),"You hear a pop and a splash.") + src.visible_message(SPAN_DANGER("[src] bursts!"),"You hear a pop and a splash.") src.reagents.reaction(get_turf(hit_atom)) for(var/atom/A in get_turf(hit_atom)) src.reagents.reaction(A) @@ -553,15 +553,15 @@ ///Hexadecimal 0-F (0-15) var/static/list/hexadecimal = list("0", "1", "2", "3" , "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F") -/obj/item/toy/plush/therapy/random_color/New(loc, ...) +/obj/item/toy/plush/therapy/random_color/Initialize(mapload, ...) . = ..() var/color_code = "#[pick(hexadecimal)][pick(hexadecimal)][pick(hexadecimal)][pick(hexadecimal)][pick(hexadecimal)][pick(hexadecimal)]" //This is dumb and I hope theres a better way I'm missing color = color_code - desc = "A custom therapy plush, in a unique color. This one is labeled with \"#[color_code]\"." + desc = "A custom therapy plush, in a unique color." /obj/item/toy/plush/random_plushie //Not using an effect so it can fit into storage from loadout name = "random plush" - desc = "You should not be seeing this" + desc = "This plush looks awfully standard and bland. Is it actually yours?" /// Standard plushies for the spawner to pick from var/list/plush_list = list( /obj/item/toy/plush/farwa, @@ -587,22 +587,32 @@ . = ..() if(mapload) //Placed in mapping, will be randomized instantly on spawn create_plushie() - return - RegisterSignal(src, COMSIG_POST_SPAWN_UPDATE, PROC_REF(create_plushie)) + return INITIALIZE_HINT_QDEL + +/obj/item/toy/plush/random_plushie/pickup(mob/user, silent) + . = ..() + RegisterSignal(user, COMSIG_POST_SPAWN_UPDATE, PROC_REF(create_plushie), override = TRUE) ///The randomizer picking and spawning a plushie on either the ground or in the humans backpack. Needs var/source due to signals -/obj/item/toy/plush/random_plushie/proc/create_plushie(source = src, mob/living/user) - UnregisterSignal(src, COMSIG_POST_SPAWN_UPDATE) +/obj/item/toy/plush/random_plushie/proc/create_plushie(datum/source) + SIGNAL_HANDLER + if(source) + UnregisterSignal(source, COMSIG_POST_SPAWN_UPDATE) + var/turf/spawn_location = get_turf(src) var/plush_list_variety = pick(60; plush_list, 40; therapy_plush_list) var/random_plushie = pick(plush_list_variety) - var/obj/item/toy/plush/plush = new random_plushie(get_turf(src)) //Starts on floor by default + var/obj/item/toy/plush/plush = new random_plushie(spawn_location) //Starts on floor by default + var/mob/living/carbon/human/user = source if(!user) //If it didn't spawn on a humanoid qdel(src) return + var/obj/item/storage/backpack/storage = locate() in user //If the user has a backpack, put it there if(storage?.can_be_inserted(plush, user, stop_messages = TRUE)) storage.attempt_item_insertion(plush, TRUE, user) + if(plush.loc == spawn_location) // Still on the ground + user.put_in_hands(plush, drop_on_fail = TRUE) qdel(src) //Admin plushies diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 6cb9f58aae37..310c53dd5d0f 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -106,7 +106,7 @@ bcell.update_icon() bcell.forceMove(get_turf(src.loc)) bcell = null - to_chat(user, SPAN_NOTICE("You remove the cell from the [src].")) + to_chat(user, SPAN_NOTICE("You remove the cell from [src].")) status = 0 update_icon() return @@ -183,10 +183,10 @@ // Logging if(user == L) - user.attack_log += "\[[time_stamp()]\] [key_name(user)] stunned themselves with the [src] in [get_area(user)]" + user.attack_log += "\[[time_stamp()]\] [key_name(user)] stunned themselves with [src] in [get_area(user)]" else - msg_admin_attack("[key_name(user)] stunned [key_name(L)] with the [src] in [get_area(user)] ([user.loc.x],[user.loc.y],[user.loc.z]).", user.loc.x, user.loc.y, user.loc.z) - var/logentry = "\[[time_stamp()]\] [key_name(user)] stunned [key_name(L)] with the [src] in [get_area(user)]" + msg_admin_attack("[key_name(user)] stunned [key_name(L)] with [src] in [get_area(user)] ([user.loc.x],[user.loc.y],[user.loc.z]).", user.loc.x, user.loc.y, user.loc.z) + var/logentry = "\[[time_stamp()]\] [key_name(user)] stunned [key_name(L)] with [src] in [get_area(user)]" L.attack_log += logentry user.attack_log += logentry @@ -197,9 +197,9 @@ return TRUE /obj/item/weapon/baton/emp_act(severity) + . = ..() if(bcell) bcell.emp_act(severity) //let's not duplicate code everywhere if we don't have to please. - ..() //secborg stun baton module /obj/item/weapon/baton/robot/attack_self(mob/user) diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index efa898ba9937..f3c76bcff638 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -113,7 +113,7 @@ w_class = SIZE_MEDIUM attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") else - to_chat(user, SPAN_NOTICE("The [src] can now be concealed.")) + to_chat(user, SPAN_NOTICE("[src] can now be concealed.")) force = initial(force) edge = 0 sharp = 0 @@ -260,7 +260,7 @@ M.apply_effect(kill_delay/15, STUN) - for (var/mob/O in hearers(world_view_size, M)) + for (var/mob/O in hearers(GLOB.world_view_size, M)) O << sound('sound/effects/Heart Beat.ogg', repeat = 1, wait = 0, volume = 100, channel = 2) //play on same channel as ambience spawn(kill_delay) O << sound(, , , , channel = 2) //cut sound diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 4304d4516e1b..cc9f1fe53fea 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -389,7 +389,7 @@ else if(LAZYISIN(item_icons, slot)) mob_icon = item_icons[slot] else - mob_icon = default_onmob_icons[slot] + mob_icon = GLOB.default_onmob_icons[slot] var/image/overlay_img diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 95998d5de79a..2519ed2940d5 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -209,7 +209,7 @@ /obj/structure/proc/toggle_anchored(obj/item/W, mob/user) if(!wrenchable) - to_chat(user, SPAN_WARNING("The [src] cannot be [anchored ? "un" : ""]anchored.")) + to_chat(user, SPAN_WARNING("[src] cannot be [anchored ? "un" : ""]anchored.")) return FALSE else // Wrenching is faster if we are better at engineering diff --git a/code/game/objects/structures/barricade/metal.dm b/code/game/objects/structures/barricade/metal.dm index 4056ac9021f8..4f250eed50e9 100644 --- a/code/game/objects/structures/barricade/metal.dm +++ b/code/game/objects/structures/barricade/metal.dm @@ -110,7 +110,7 @@ to_chat(user, SPAN_NOTICE("You lack the required metal.")) return if((usr.get_active_hand()) != metal) - to_chat(user, SPAN_WARNING("You must be holding the [metal] to upgrade \the [src]!")) + to_chat(user, SPAN_WARNING("You must be holding [metal] to upgrade [src]!")) return switch(choice) @@ -150,7 +150,7 @@ to_chat(user, SPAN_NOTICE("You lack the required metal.")) return if((usr.get_active_hand()) != metal) - to_chat(user, SPAN_WARNING("You must be holding the [metal] to upgrade \the [src]!")) + to_chat(user, SPAN_WARNING("You must be holding [metal] to upgrade [src]!")) return switch(choice) diff --git a/code/game/objects/structures/barricade/plasteel.dm b/code/game/objects/structures/barricade/plasteel.dm index d1a42c9b61ab..dd95aa3f1baf 100644 --- a/code/game/objects/structures/barricade/plasteel.dm +++ b/code/game/objects/structures/barricade/plasteel.dm @@ -30,7 +30,7 @@ /obj/structure/barricade/plasteel/update_icon() ..() if(linked) - for(var/direction in cardinal) + for(var/direction in GLOB.cardinals) for(var/obj/structure/barricade/plasteel/cade in get_step(src, direction)) if(((dir & (NORTH|SOUTH) && get_dir(src, cade) & (EAST|WEST)) || (dir & (EAST|WEST) && get_dir(src, cade) & (NORTH|SOUTH))) && dir == cade.dir && cade.linked && cade.closed == src.closed && hasconnectionoverlay) if(closed) @@ -125,10 +125,10 @@ user.visible_message(SPAN_NOTICE("[user] sets up [src] for linking."), SPAN_NOTICE("You set up [src] for linking.")) else - to_chat(user, SPAN_WARNING("The [src] has no linking points...")) + to_chat(user, SPAN_WARNING("[src] has no linking points...")) return linked = !linked - for(var/direction in cardinal) + for(var/direction in GLOB.cardinals) for(var/obj/structure/barricade/plasteel/cade in get_step(src, direction)) cade.update_icon() update_icon() @@ -210,7 +210,7 @@ if(closed) if(recentlyflipped) - to_chat(user, SPAN_NOTICE("The [src] has been flipped too recently!")) + to_chat(user, SPAN_NOTICE("[src] has been flipped too recently!")) return user.visible_message(SPAN_NOTICE("[user] flips [src] open."), SPAN_NOTICE("You flip [src] open.")) @@ -222,7 +222,7 @@ else if(recentlyflipped) - to_chat(user, SPAN_NOTICE("The [src] has been flipped too recently!")) + to_chat(user, SPAN_NOTICE("[src] has been flipped too recently!")) return user.visible_message(SPAN_NOTICE("[user] flips [src] closed."), SPAN_NOTICE("You flip [src] closed.")) @@ -239,7 +239,7 @@ closed = 0 density = TRUE if(linked) - for(var/direction in cardinal) + for(var/direction in GLOB.cardinals) for(var/obj/structure/barricade/plasteel/cade in get_step(src, direction)) if(((dir & (NORTH|SOUTH) && get_dir(src, cade) & (EAST|WEST)) || (dir & (EAST|WEST) && get_dir(src, cade) & (NORTH|SOUTH))) && dir == cade.dir && cade != origin && cade.linked) cade.open(src) @@ -252,7 +252,7 @@ closed = 1 density = FALSE if(linked) - for(var/direction in cardinal) + for(var/direction in GLOB.cardinals) for(var/obj/structure/barricade/plasteel/cade in get_step(src, direction)) if(((dir & (NORTH|SOUTH) && get_dir(src, cade) & (EAST|WEST)) || (dir & (EAST|WEST) && get_dir(src, cade) & (NORTH|SOUTH))) && dir == cade.dir && cade != origin && cade.linked) cade.close(src) diff --git a/code/game/objects/structures/blocker.dm b/code/game/objects/structures/blocker.dm index 284daf0028aa..f85b1e65fff5 100644 --- a/code/game/objects/structures/blocker.dm +++ b/code/game/objects/structures/blocker.dm @@ -105,9 +105,21 @@ /obj/structure/blocker/forcefield/vehicles types = list(/obj/vehicle/) + +/obj/structure/blocker/forcefield/vehicles/handle_vehicle_bump(obj/vehicle/multitile/multitile_vehicle) + if(multitile_vehicle.vehicle_flags & VEHICLE_BYPASS_BLOCKERS) + return TRUE + return FALSE + /obj/structure/blocker/forcefield/multitile_vehicles types = list(/obj/vehicle/multitile/) + +/obj/structure/blocker/forcefield/multitile_vehicles/handle_vehicle_bump(obj/vehicle/multitile/multitile_vehicle) + if(multitile_vehicle.vehicle_flags & VEHICLE_BYPASS_BLOCKERS) + return TRUE + return FALSE + /obj/structure/blocker/forcefield/human types = list(/mob/living/carbon/human) icon_state = "purple_line" diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index d6148b23b7f0..fa87cd6b2b71 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -158,10 +158,15 @@ /obj/structure/closet/proc/take_damage(damage) + if(health <= 0) + return + health = max(health - damage, 0) if(health <= 0) - for(var/atom/movable/A as anything in src) - A.forceMove(src.loc) + for(var/atom/movable/movable as anything in src) + if(!loc) + break + movable.forceMove(loc) playsound(loc, 'sound/effects/meteorimpact.ogg', 25, 1) qdel(src) @@ -195,7 +200,7 @@ /obj/structure/closet/attack_animal(mob/living/user) if(user.wall_smash) - visible_message(SPAN_DANGER("[user] destroys the [src]. ")) + visible_message(SPAN_DANGER("[user] destroys [src].")) for(var/atom/movable/A as mob|obj in src) A.forceMove(src.loc) qdel(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/kitchen.dm b/code/game/objects/structures/crates_lockers/closets/secure/kitchen.dm new file mode 100644 index 000000000000..d8b0c984d4b1 --- /dev/null +++ b/code/game/objects/structures/crates_lockers/closets/secure/kitchen.dm @@ -0,0 +1,143 @@ +//standart fridge + +/obj/structure/closet/secure_closet/fridge + name = "Refrigerator" + icon = 'icons/obj/structures/machinery/kitchen.dmi' + icon_state = "fridge1" + icon_closed = "fridge" + icon_locked = "fridge1" + icon_opened = "fridgeopen" + icon_broken = "fridgebroken" + icon_off = "fridge1" + storage_capacity = 60 //give extra storage capacity so that everything can fit. + +/obj/structure/closet/secure_closet/fridge/update_icon() + if(broken) + icon_state = icon_broken + else + if(!opened) + if(locked) + icon_state = icon_locked + else + icon_state = icon_closed + else + icon_state = icon_opened + +// for almayer. + +// Kitchen preparation room small quantity out of boxes... + +//standart organic storage. + +/obj/structure/closet/secure_closet/fridge/organic + name = "Organic" + +/obj/structure/closet/secure_closet/fridge/organic/Initialize() + . = ..() + for(var/i in 1 to 2) + new /obj/item/reagent_container/food/snacks/grown/apple(src) + new /obj/item/reagent_container/food/snacks/grown/cabbage(src) + new /obj/item/reagent_container/food/snacks/grown/carrot(src) + new /obj/item/reagent_container/food/snacks/grown/mushroom/chanterelle(src) + new /obj/item/reagent_container/food/snacks/grown/chili(src) + new /obj/item/reagent_container/food/snacks/grown/corn(src) + new /obj/item/reagent_container/food/snacks/grown/eggplant(src) + new /obj/item/reagent_container/food/snacks/grown/potato(src) + new /obj/item/reagent_container/food/snacks/grown/tomato(src) + new /obj/item/reagent_container/food/snacks/grown/whitebeet(src) + new /obj/item/reagent_container/food/snacks/grown/cherries(src) + new /obj/item/reagent_container/food/snacks/grown/lime(src) + new /obj/item/reagent_container/food/snacks/grown/lemon(src) + new /obj/item/reagent_container/food/snacks/grown/orange(src) + new /obj/item/reagent_container/food/snacks/grown/banana(src) + +//DRy + +/obj/structure/closet/secure_closet/fridge/dry + name = "dry" + +/obj/structure/closet/secure_closet/fridge/dry/Initialize() + . = ..() + for(var/i in 1 to 6) + new /obj/item/reagent_container/food/snacks/flour(src) + for(var/i in 1 to 2) + new /obj/item/reagent_container/food/condiment/sugar(src) + +//grocery + +/obj/structure/closet/secure_closet/fridge/groceries + name = "Groceries" + +/obj/structure/closet/secure_closet/fridge/groceries/Initialize() + . = ..() + for(var/i in 1 to 2) + new /obj/item/reagent_container/food/drinks/milk(src) + new /obj/item/reagent_container/food/drinks/soymilk(src) + new /obj/item/storage/fancy/egg_box(src) + new /obj/item/reagent_container/food/condiment/enzyme(src) + +// Kitchen Reserve big quantity stored in boxes + +//meat surplus +/obj/structure/closet/secure_closet/fridge/meat/stock + name = "meat" + +/obj/structure/closet/secure_closet/fridge/meat/stock/Initialize() + . = ..() + for(var/i in 1 to 2) + new /obj/item/storage/box/meat(src) + +//fish surplus +/obj/structure/closet/secure_closet/fridge/fish/stock + name = "fish" + +/obj/structure/closet/secure_closet/fridge/fish/stock/Initialize() + . = ..() + for(var/i in 1 to 2) + new /obj/item/storage/box/fish(src) + +//groceries to hold milk in bulk +/obj/structure/closet/secure_closet/fridge/groceries/stock + name = "Groceries" + +/obj/structure/closet/secure_closet/fridge/groceries/stock/Initialize() + . = ..() + for(var/i in 1 to 2) + new /obj/item/storage/box/milk(src) + new /obj/item/storage/box/soymilk(src) + for(var/i in 1 to 7) + new /obj/item/storage/fancy/egg_box(src) + new /obj/item/storage/box/enzyme(src) + +//dry storage for dry food only... not a fridge +/obj/structure/closet/secure_closet/fridge/dry/stock + name = "dry" + +/obj/structure/closet/secure_closet/fridge/dry/stock/Initialize() + . = ..() + for(var/i in 1 to 4) + new /obj/item/storage/box/flour(src) + new /obj/item/storage/box/sugar(src) + +// organic storage in bulk + +/obj/structure/closet/secure_closet/fridge/organic/stock + name = "Organic" + +/obj/structure/closet/secure_closet/fridge/organic/stock/Initialize() + . = ..() + new /obj/item/storage/box/apple(src) + new /obj/item/storage/box/banana(src) + new /obj/item/storage/box/chanterelle(src) + new /obj/item/storage/box/cherries(src) + new /obj/item/storage/box/chili(src) + new /obj/item/storage/box/cabbage(src) + new /obj/item/storage/box/carrot(src) + new /obj/item/storage/box/corn(src) + new /obj/item/storage/box/eggplant(src) + new /obj/item/storage/box/lemon(src) + new /obj/item/storage/box/lime(src) + new /obj/item/storage/box/orange(src) + new /obj/item/storage/box/potato(src) + new /obj/item/storage/box/tomato(src) + new /obj/item/storage/box/whitebeet(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index ed0b1ae05c08..ba974a8e722a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -30,6 +30,7 @@ return 0 /obj/structure/closet/secure_closet/emp_act(severity) + . = ..() for(var/obj/O in src) O.emp_act(severity) if(!broken) @@ -42,7 +43,6 @@ else src.req_access = list() src.req_access += pick(get_access(ACCESS_LIST_MARINE_MAIN)) - ..() /obj/structure/closet/secure_closet/proc/togglelock(mob/living/user) if(src.opened) diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index 2f2877ba7539..f1b58e6f657b 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -28,9 +28,8 @@ material_sheet = new parts_type(current_turf, 2) // Move the objects back to the turf, above the crate material - for(var/atom/movable/moving_atom in contents) - var/atom/movable/current_atom = contents[1] - current_atom.forceMove(current_turf) + for(var/atom/movable/moving_atom as anything in contents) + moving_atom.forceMove(current_turf) deconstruct(TRUE) diff --git a/code/game/objects/structures/crates_lockers/secure_crates.dm b/code/game/objects/structures/crates_lockers/secure_crates.dm index f06a15da7115..6b025a57c78b 100644 --- a/code/game/objects/structures/crates_lockers/secure_crates.dm +++ b/code/game/objects/structures/crates_lockers/secure_crates.dm @@ -87,6 +87,7 @@ ..() /obj/structure/closet/crate/secure/emp_act(severity) + . = ..() for(var/obj/O in src) O.emp_act(severity) if(!broken && !opened && prob(50/severity)) @@ -106,7 +107,6 @@ else src.req_access = list() src.req_access += pick(get_access(ACCESS_LIST_MARINE_MAIN)) - ..() //------------------------------------ diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index 7b54f0447fae..e4ee4a1b662b 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -5,13 +5,15 @@ icon_state = "extinguisher" anchored = TRUE density = FALSE - var/obj/item/tool/extinguisher/has_extinguisher = new/obj/item/tool/extinguisher + var/obj/item/tool/extinguisher/has_extinguisher var/opened = 0 var/base_icon /obj/structure/extinguisher_cabinet/Initialize() . = ..() base_icon = initial(icon_state) + has_extinguisher = new /obj/item/tool/extinguisher() + has_extinguisher.forceMove(src) /obj/structure/extinguisher_cabinet/lifeboat name = "extinguisher cabinet" @@ -21,15 +23,15 @@ /obj/structure/extinguisher_cabinet/alt icon_state = "extinguisher_alt" -/obj/structure/extinguisher_cabinet/attackby(obj/item/O, mob/user) +/obj/structure/extinguisher_cabinet/attackby(obj/item/item, mob/user) if(isrobot(user)) return - if(istype(O, /obj/item/tool/extinguisher)) + if(istype(item, /obj/item/tool/extinguisher)) if(!has_extinguisher && opened) user.drop_held_item() - contents += O - has_extinguisher = O - to_chat(user, SPAN_NOTICE("You place [O] in [src].")) + item.forceMove(src) + has_extinguisher = item + to_chat(user, SPAN_NOTICE("You place [item] in [src].")) else opened = !opened else @@ -45,7 +47,7 @@ user.put_in_hands(has_extinguisher) to_chat(user, SPAN_NOTICE("You take [has_extinguisher] from [src].")) has_extinguisher = null - opened = 1 + opened = TRUE else opened = !opened update_icon() diff --git a/code/game/objects/structures/fence.dm b/code/game/objects/structures/fence.dm index b29c69e8af18..db24dfdfebdd 100644 --- a/code/game/objects/structures/fence.dm +++ b/code/game/objects/structures/fence.dm @@ -209,7 +209,7 @@ //This proc is used to update the icons of nearby windows. /obj/structure/fence/proc/update_nearby_icons() update_icon() - for(var/direction in cardinal) + for(var/direction in GLOB.cardinals) for(var/obj/structure/fence/W in get_step(src, direction)) W.update_icon() diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index b1e950dd18f0..0e4a20cf989a 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -73,7 +73,7 @@ PLANT_CUT_MACHETE = 3 = Needs at least a machete to be cut down /obj/structure/flora/proc/spread_fire() SIGNAL_HANDLER - for(var/D in cardinal) //Spread fire + for(var/D in GLOB.cardinals) //Spread fire var/turf/T = get_step(src.loc, D) if(T) for(var/obj/structure/flora/F in T) @@ -725,7 +725,7 @@ ICEY GRASS. IT LOOKS LIKE IT'S MADE OF ICE. //this bush marks the edge of the map, you can't destroy it to_chat(user, SPAN_DANGER("You flail away at the undergrowth, but it's too thick here.")) else - user.visible_message(SPAN_DANGER("[user] flails away at the [src] with [I]."),SPAN_DANGER("You flail away at the [src] with [I].")) + user.visible_message(SPAN_DANGER("[user] flails away at [src] with [I]."), SPAN_DANGER("You flail away at [src] with [I].")) playsound(src.loc, 'sound/effects/vegetation_hit.ogg', 25, 1) health -= damage if(health < 0) @@ -758,4 +758,3 @@ ICEY GRASS. IT LOOKS LIKE IT'S MADE OF ICE. desc = "Looks like some of that fruit might be edible." icon_tag = "plant" variations = 7 - diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 0f864ee2f116..063f6a337290 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -166,7 +166,7 @@ if (ST.use(1)) var/obj/structure/window/WD = new wtype(loc) WD.set_constructed_window(dir_to_set) - to_chat(user, SPAN_NOTICE("You place the [WD] on [src].")) + to_chat(user, SPAN_NOTICE("You place [WD] on [src].")) return //window placing end diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index d2b3d36b5920..dd427adfabb9 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -19,14 +19,14 @@ icon = 'icons/obj/structures/props/smoothlattice.dmi' icon_state = "latticeblank" updateOverlays() - for (var/dir in cardinal) + for (var/dir in GLOB.cardinals) var/obj/structure/lattice/L if(locate(/obj/structure/lattice, get_step(src, dir))) L = locate(/obj/structure/lattice, get_step(src, dir)) L.updateOverlays() /obj/structure/lattice/Destroy() - for (var/dir in cardinal) + for (var/dir in GLOB.cardinals) var/obj/structure/lattice/L if(locate(/obj/structure/lattice, get_step(src, dir))) L = locate(/obj/structure/lattice, get_step(src, dir)) @@ -73,7 +73,7 @@ var/dir_sum = 0 - for (var/direction in cardinal) + for (var/direction in GLOB.cardinals) if(locate(/obj/structure/lattice, get_step(src, direction))) dir_sum += direction else diff --git a/code/game/objects/structures/props.dm b/code/game/objects/structures/props.dm index bd5610487ea0..e14eee13b1dd 100644 --- a/code/game/objects/structures/props.dm +++ b/code/game/objects/structures/props.dm @@ -805,14 +805,14 @@ /obj/structure/prop/brazier/campfire/attackby(obj/item/attacking_item, mob/user) if(!istype(attacking_item, /obj/item/stack/sheet/wood)) - to_chat(SPAN_NOTICE("You cannot fuel [src] with [attacking_item].")) + to_chat(user, SPAN_NOTICE("You cannot fuel [src] with [attacking_item].")) return var/obj/item/stack/sheet/wood/fuel = attacking_item if(remaining_fuel >= initial(remaining_fuel)) to_chat(user, SPAN_NOTICE("You cannot fuel [src] further.")) return if(!fuel.use(1)) - to_chat(SPAN_NOTICE("You do not have enough [attacking_item] to fuel [src].")) + to_chat(user, SPAN_NOTICE("You do not have enough [attacking_item] to fuel [src].")) return visible_message(SPAN_NOTICE("[user] fuels [src] with [fuel].")) remaining_fuel++ @@ -1179,7 +1179,7 @@ new_info_tag.fallen_names = list(dogtag_name) new_info_tag.fallen_assgns = list(dogtag_assign) new_info_tag.fallen_blood_types = list(dogtag_blood) - fallen_list_cross -= dogtag_name + GLOB.fallen_list_cross -= dogtag_name return ..() /obj/structure/prop/wooden_cross/attackby(obj/item/W, mob/living/user) @@ -1187,18 +1187,18 @@ var/obj/item/dogtag/dog = W if(!tagged) tagged = TRUE - user.visible_message(SPAN_NOTICE("[user] drapes the [W] around the [src].")) + user.visible_message(SPAN_NOTICE("[user] drapes [W] around [src].")) dogtag_name = popleft(dog.fallen_names) dogtag_assign = popleft(dog.fallen_assgns) dogtag_blood = popleft(dog.fallen_blood_types) - fallen_list_cross += dogtag_name + GLOB.fallen_list_cross += dogtag_name update_icon() if(!length(dog.fallen_names)) qdel(dog) else return else - to_chat(user, SPAN_WARNING("There's already a dog tag on the [src]!")) + to_chat(user, SPAN_WARNING("There's already a dog tag on [src]!")) balloon_alert(user, "already a tag here!") if(istype(W, /obj/item/clothing/head)) @@ -1372,4 +1372,3 @@ if(initial(emote.sound)) playsound(loc, initial(emote.sound), 50, FALSE) return TRUE - diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index 24598e7460bb..34b0fb01e9d6 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -310,7 +310,7 @@ ////////////////////////////////////////////// //List of all activated medevac stretchers -var/global/list/activated_medevac_stretchers = list() +GLOBAL_LIST_EMPTY(activated_medevac_stretchers) /obj/structure/bed/medevac_stretcher name = "medevac stretcher" @@ -328,7 +328,7 @@ var/global/list/activated_medevac_stretchers = list() /obj/structure/bed/medevac_stretcher/Destroy() if(stretcher_activated) stretcher_activated = FALSE - activated_medevac_stretchers -= src + GLOB.activated_medevac_stretchers -= src if(linked_medevac) linked_medevac.linked_stretcher = null linked_medevac = null @@ -366,7 +366,7 @@ var/global/list/activated_medevac_stretchers = list() if(stretcher_activated) stretcher_activated = FALSE - activated_medevac_stretchers -= src + GLOB.activated_medevac_stretchers -= src if(linked_medevac) linked_medevac.linked_stretcher = null linked_medevac = null @@ -384,7 +384,7 @@ var/global/list/activated_medevac_stretchers = list() return stretcher_activated = TRUE - activated_medevac_stretchers += src + GLOB.activated_medevac_stretchers += src to_chat(user, SPAN_NOTICE("You activate [src]'s beacon.")) update_icon() @@ -404,7 +404,17 @@ var/global/list/activated_medevac_stretchers = list() //bedroll /obj/structure/bed/bedroll - name = "bedroll" - desc = "bedroll" + name = "unfolded bedroll" + desc = "Perfect for those long missions, when there's nowhere else to sleep, you remembered to bring at least one thing of comfort." + icon = 'icons/monkey_icos.dmi' icon_state = "bedroll_o" + buckling_y = 0 + foldabletype = /obj/item/roller/bedroll + accepts_bodybag = FALSE + +/obj/item/roller/bedroll + name = "folded bedroll" + desc = "A standard issue USCMC bedroll, They've been in service for as long as you can remember. The tag on it states to unfold it before rest, but who needs rules anyway, right?" icon = 'icons/monkey_icos.dmi' + icon_state = "bedroll" + rollertype = /obj/structure/bed/bedroll diff --git a/code/game/objects/structures/surface.dm b/code/game/objects/structures/surface.dm index efc69002424f..13a81af2dc3d 100644 --- a/code/game/objects/structures/surface.dm +++ b/code/game/objects/structures/surface.dm @@ -1,159 +1,20 @@ //Surface structures are structures that can have items placed on them /obj/structure/surface health = 100 - var/list/update_types = list( - /obj/item/reagent_container/glass, - /obj/item/storage, - /obj/item/reagent_container/food/snacks - ) - //add items there that behave like structures for whatever dumb reason - var/list/blacklisted_item_types = list( - /obj/item/device/radio/intercom, - /obj/item/device/sentry_computer - ) -/obj/structure/surface/Initialize() - . = ..() - return INITIALIZE_HINT_LATELOAD - -/obj/structure/surface/LateInitialize() - attach_all() - update_icon() - -/obj/structure/surface/Destroy() - detach_all() - . = ..() - -/obj/structure/surface/ex_act(severity, direction, datum/cause_data/cause_data) - health -= severity - if(health <= 0) - var/location = get_turf(src) - handle_debris(severity, direction) - detach_all() - for(var/obj/item/O in loc) - O.explosion_throw(severity, direction) - qdel(src) - if(prob(66)) - create_shrapnel(location, rand(1,4), direction, , /datum/ammo/bullet/shrapnel/light, cause_data) - return TRUE - -/obj/structure/surface/proc/attach_all() - for(var/obj/item/O in loc) - if(in_blacklist(O)) - continue - attach_item(O, FALSE) - draw_item_overlays() - -/obj/structure/surface/proc/in_blacklist(obj/item/O) - for(var/allowed_type in blacklisted_item_types) - if(istype(O, allowed_type)) - return TRUE - return FALSE - -/obj/structure/surface/proc/attach_item(obj/item/O, update = TRUE) - if(!O) +/obj/structure/surface/attackby(obj/item/attacking_item, mob/user, click_data) + if(!user.drop_inv_item_to_loc(attacking_item, loc)) return - if(O.luminosity) //it can't make light as an overlay - return - O.forceMove(src) - RegisterSignal(O, COMSIG_ATOM_DECORATED, PROC_REF(decorate_update)) - if(update) - draw_item_overlays() - -/obj/structure/surface/proc/detach_item(obj/item/O) - O.scatter_item() - UnregisterSignal(O, COMSIG_ATOM_DECORATED) - draw_item_overlays() - return - -/obj/structure/surface/proc/decorate_update(obj/item/O) - SIGNAL_HANDLER - draw_item_overlays() -/obj/structure/surface/proc/detach_all() - overlays.Cut() - for(var/obj/item/O in contents) - UnregisterSignal(O, COMSIG_ATOM_DECORATED) - O.forceMove(loc) + auto_align(attacking_item, click_data) + user.next_move = world.time + 2 + return TRUE -/obj/structure/surface/proc/get_item(list/click_data) - var/i = LAZYLEN(contents) - if(!click_data) - return - if(i < 1) - return FALSE - for(i, i >= 1, i--)//starting from the end because that's where the topmost is - var/obj/item/O = contents[i] - var/bounds_x = text2num(click_data["icon-x"])-1 - O.pixel_x - var/bounds_y = text2num(click_data["icon-y"])-1 - O.pixel_y - if(bounds_x < 0 || bounds_y < 0) - continue - var/icon/I = icon(O.icon, O.icon_state) - var/p = I.GetPixel(bounds_x, bounds_y) - if(p) - return O - return FALSE - -/obj/structure/surface/proc/draw_item_overlays() - overlays.Cut() - for(var/obj/item/O in contents) - var/image/I = image(O.icon) - I.appearance = O.appearance - I.appearance_flags |= RESET_COLOR - I.overlays = O.overlays - LAZYADD(overlays, I) - -/obj/structure/surface/clicked(mob/user, list/mods) - if(mods["shift"] && !mods["middle"]) - var/obj/item/O = get_item(mods) - if(!O) - return ..() - if(O.can_examine(user)) - O.examine(user) - return TRUE - ..() - -/obj/structure/surface/proc/try_to_open_container(mob/user, mods) - if(!Adjacent(user)) - return - - if(ishuman(user) || isrobot(user)) - var/obj/item/O = get_item(mods) - if(O && isstorage(O)) - var/obj/item/storage/S = O - S.open(usr) - return TRUE - -/obj/structure/surface/attack_hand(mob/user, click_data) - . = ..() - if(click_data && click_data["alt"]) - return - var/obj/item/O = get_item(click_data) - if(!O) - return - O.attack_hand(user) - if(!LAZYISIN(contents, O))//in case attack_hand did not pick up the item - detach_item(O) - -/obj/structure/surface/attackby(obj/item/W, mob/user, click_data) - var/obj/item/O = get_item(click_data) - if(!O || click_data["ctrl"])//holding the ctrl key will force it to place the object - // Placing stuff on tables - if(user.drop_inv_item_to_loc(W, loc)) - auto_align(W, click_data) - user.next_move = world.time + 2 - return TRUE - else if(!O.attackby(W, user)) - W.afterattack(O, user, TRUE) - for(var/type in update_types) - if(istype(O, type)) - draw_item_overlays() - -/obj/structure/surface/proc/auto_align(obj/item/W, click_data) - if(!W.center_of_mass) // Clothing, material stacks, generally items with large sprites where exact placement would be unhandy. - W.pixel_x = rand(-W.randpixel, W.randpixel) - W.pixel_y = rand(-W.randpixel, W.randpixel) - W.pixel_z = 0 +/obj/structure/surface/proc/auto_align(obj/item/new_item, click_data) + if(!new_item.center_of_mass) // Clothing, material stacks, generally items with large sprites where exact placement would be unhandy. + new_item.pixel_x = rand(-new_item.randpixel, new_item.randpixel) + new_item.pixel_y = rand(-new_item.randpixel, new_item.randpixel) + new_item.pixel_z = 0 return if(!click_data) @@ -169,16 +30,8 @@ var/cell_x = Clamp(round(mouse_x/CELLSIZE), 0, CELLS-1) // Ranging from 0 to CELLS-1 var/cell_y = Clamp(round(mouse_y/CELLSIZE), 0, CELLS-1) - var/list/center = cached_key_number_decode(W.center_of_mass) - - W.pixel_x = (CELLSIZE * (cell_x + 0.5)) - center["x"] - W.pixel_y = (CELLSIZE * (cell_y + 0.5)) - center["y"] - W.pixel_z = 0 - - if(!(W.flags_item & NOTABLEMERGE)) - attach_item(W) + var/list/center = cached_key_number_decode(new_item.center_of_mass) -/obj/structure/surface/MouseDrop(atom/over) - . = ..() - if(over == usr && usr && usr.client && usr.client.lmb_last_mousedown_mods) - return try_to_open_container(usr, usr.client.lmb_last_mousedown_mods) + new_item.pixel_x = (CELLSIZE * (cell_x + 0.5)) - center["x"] + new_item.pixel_y = (CELLSIZE * (cell_y + 0.5)) - center["y"] + new_item.pixel_z = 0 diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index db3ce98339a3..f9f5105fbf2f 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -143,7 +143,7 @@ dir_sum += 128 var/table_type = 0 //stand_alone table - if((dir_sum%16) in cardinal) + if((dir_sum%16) in GLOB.cardinals) table_type = 1 //endtable dir_sum %= 16 if((dir_sum%16) in list(3, 12)) @@ -274,7 +274,9 @@ var/mob/living/M = G.grabbed_thing if(user.a_intent == INTENT_HARM) if(user.grab_level > GRAB_AGGRESSIVE) - if (prob(15)) M.apply_effect(5, WEAKEN) + if (prob(15)) + M.KnockDown(5) + M.Stun(5) M.apply_damage(8, def_zone = "head") user.visible_message(SPAN_DANGER("[user] slams [M]'s face against [src]!"), SPAN_DANGER("You slam [M]'s face against [src]!")) @@ -284,7 +286,8 @@ return else if(user.grab_level >= GRAB_AGGRESSIVE) M.forceMove(loc) - M.apply_effect(5, WEAKEN) + M.KnockDown(5) + M.Stun(5) user.visible_message(SPAN_DANGER("[user] throws [M] on [src]."), SPAN_DANGER("You throw [M] on [src].")) return @@ -434,8 +437,6 @@ verbs -= /obj/structure/surface/table/verb/do_flip verbs += /obj/structure/surface/table/proc/do_put - detach_all() - var/list/targets = list(get_step(src, dir), get_step(src, turn(dir, 45)), get_step(src, turn(dir, -45))) for(var/atom/movable/movable_on_table in get_turf(src)) if(!movable_on_table.anchored) @@ -479,7 +480,6 @@ var/obj/structure/surface/table/T = locate() in get_step(src.loc,D) if(T && T.flipped && T.dir == src.dir) T.unflip() - attach_all() update_icon() update_adjacent() diff --git a/code/game/objects/structures/vulture_spotter.dm b/code/game/objects/structures/vulture_spotter.dm index ab23a8086759..d90a1ec1615a 100644 --- a/code/game/objects/structures/vulture_spotter.dm +++ b/code/game/objects/structures/vulture_spotter.dm @@ -108,7 +108,7 @@ REMOVE_TRAIT(user, TRAIT_IMMOBILIZED, TRAIT_SOURCE_ABILITY("Vulture spotter")) user.reset_view(null) user.Move(get_step(src, reverse_direction(src.dir))) - user.client?.change_view(world_view_size, src) + user.client?.change_view(GLOB.world_view_size, src) user.setDir(dir) //set the direction of the player to the direction the gun is facing update_pixels(FALSE) remove_action(user, /datum/action/vulture_tripod_unscope) @@ -238,7 +238,7 @@ user.pixel_x = 0 user.pixel_y = 0 if(user.client) - user.client.change_view(world_view_size, src) + user.client.change_view(GLOB.world_view_size, src) user.client.pixel_x = 0 user.client.pixel_y = 0 UnregisterSignal(user.client, COMSIG_PARENT_QDELETING) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 60c37fcdc607..daf4a47a8ef6 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -151,7 +151,7 @@ GM.apply_damage(5, OXY) swirlie = null else - user.visible_message(SPAN_DANGER("[user] slams [GM.name] into the [src]!"), SPAN_NOTICE("You slam [GM.name] into the [src]!")) + user.visible_message(SPAN_DANGER("[user] slams [GM.name] into [src]!"), SPAN_NOTICE("You slam [GM.name] into [src]!")) GM.apply_damage(8, BRUTE) else to_chat(user, SPAN_NOTICE("You need a tighter grip.")) @@ -189,7 +189,7 @@ if(!GM.loc == get_turf(src)) to_chat(user, SPAN_NOTICE("[GM.name] needs to be on the urinal.")) return - user.visible_message(SPAN_DANGER("[user] slams [GM.name] into the [src]!"), SPAN_NOTICE("You slam [GM.name] into the [src]!")) + user.visible_message(SPAN_DANGER("[user] slams [GM.name] into [src]!"), SPAN_NOTICE("You slam [GM.name] into [src]!")) GM.apply_damage(8, BRUTE) else to_chat(user, SPAN_NOTICE("You need a tighter grip.")) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index d0651eb5e993..61552896f6f1 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -81,7 +81,7 @@ junction = 0 if(anchored) var/turf/TU - for(var/dirn in cardinal) + for(var/dirn in GLOB.cardinals) TU = get_step(src, dirn) var/obj/structure/window/W = locate() in TU if(W && W.anchored && W.density && W.legacy_full) //Only counts anchored, non-destroyed, legacy full-tile windows. @@ -353,7 +353,7 @@ //This proc is used to update the icons of nearby windows. /obj/structure/window/proc/update_nearby_icons() update_icon() - for(var/direction in cardinal) + for(var/direction in GLOB.cardinals) for(var/obj/structure/window/W in get_step(src, direction)) W.update_icon() @@ -865,7 +865,7 @@ return triggered = TRUE - for(var/direction in cardinal) + for(var/direction in GLOB.cardinals) if(direction == from_dir) continue //doesn't check backwards for(var/obj/structure/window/framed/prison/reinforced/hull/W in get_step(src,direction) ) @@ -958,7 +958,7 @@ return triggered = 1 - for(var/direction in cardinal) + for(var/direction in GLOB.cardinals) if(direction == from_dir) continue //doesn't check backwards diff --git a/code/game/sim_manager/datums/simulator.dm b/code/game/sim_manager/datums/simulator.dm index 04ddb7faa088..bf99c65ee66f 100644 --- a/code/game/sim_manager/datums/simulator.dm +++ b/code/game/sim_manager/datums/simulator.dm @@ -37,7 +37,7 @@ if(!sim_camera) to_chat(user, SPAN_WARNING("GPU damaged! Unable to start simulation.")) return - if(user.client.view != world_view_size) + if(user.client.view != GLOB.world_view_size) to_chat(user, SPAN_WARNING("You're too busy looking at something else.")) return user.reset_view(sim_camera) diff --git a/code/game/smoothwall.dm b/code/game/smoothwall.dm index eb81861a3b1f..b9284639976c 100644 --- a/code/game/smoothwall.dm +++ b/code/game/smoothwall.dm @@ -13,7 +13,7 @@ var/j //second iterator var/k //third iterator (I know, that's a lot, but I'm trying to make this modular, so bear with me) - for(i in cardinal) //For all cardinal dir turfs + for(i in GLOB.cardinals) //For all cardinal dir turfs T = get_step(src, i) if(!istype(T)) continue for(j in tiles_with) //And for all types that we tile with @@ -34,7 +34,7 @@ var/j //second iterator var/atom/k //third iterator (I know, that's a lot, but I'm trying to make this modular, so bear with me) - for(i in cardinal) //For all cardinal dir turfs + for(i in GLOB.cardinals) //For all cardinal dir turfs T = get_step(src, i) if(!istype(T)) continue for(j in tiles_with) //And for all types that we tile with @@ -61,7 +61,7 @@ var/j var/k - for(i in cardinal) + for(i in GLOB.cardinals) T = get_step(src, i) if(!istype(T)) continue for(j in tiles_with) @@ -93,7 +93,7 @@ var/j var/k - for(i in cardinal) + for(i in GLOB.cardinals) T = get_step(src, i) if(!istype(T)) continue for(j in tiles_with) @@ -227,7 +227,7 @@ var/j //second iterator var/k //third iterator (I know, that's a lot, but I'm trying to make this modular, so bear with me) - for(i in alldirs) //For all cardinal dir turfs + for(i in GLOB.alldirs) //For all cardinal dir turfs T = get_step(src, i) if(!istype(T)) continue for(j in tiles_with) //And for all types that we tile with @@ -249,7 +249,7 @@ var/j //second iterator var/k //third iterator (I know, that's a lot, but I'm trying to make this modular, so bear with me) - for(i in alldirs) //For all cardinal dir turfs + for(i in GLOB.alldirs) //For all cardinal dir turfs T = get_step(src, i) if(!istype(T)) continue for(j in tiles_with) //And for all types that we tile with diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index e8f40c1d52b3..e4e4923173bf 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -10,7 +10,7 @@ GLOBAL_LIST_EMPTY_TYPED(asrs_empty_space_tiles_list, /turf/open/floor/almayer/empty) -var/datum/controller/supply/supply_controller = new() +GLOBAL_DATUM_INIT(supply_controller, /datum/controller/supply, new()) /area/supply ceiling = CEILING_METAL @@ -113,11 +113,11 @@ var/datum/controller/supply/supply_controller = new() /obj/structure/machinery/computer/supplycomp/Initialize() . = ..() - LAZYADD(supply_controller.bound_supply_computer_list, src) + LAZYADD(GLOB.supply_controller.bound_supply_computer_list, src) /obj/structure/machinery/computer/supplycomp/Destroy() . = ..() - LAZYREMOVE(supply_controller.bound_supply_computer_list, src) + LAZYREMOVE(GLOB.supply_controller.bound_supply_computer_list, src) /obj/structure/machinery/computer/supplycomp/attackby(obj/item/hit_item, mob/user) if(istype(hit_item, /obj/item/spacecash)) @@ -127,7 +127,7 @@ var/datum/controller/supply/supply_controller = new() to_chat(user, SPAN_NOTICE("You find a small horizontal slot at the bottom of the console. You try to feed \the [slotted_cash] into it, but it rejects it! Maybe it's counterfeit?")) return to_chat(user, SPAN_NOTICE("You find a small horizontal slot at the bottom of the console. You feed \the [slotted_cash] into it..")) - supply_controller.black_market_points += slotted_cash.worth + GLOB.supply_controller.black_market_points += slotted_cash.worth qdel(slotted_cash) else to_chat(user, SPAN_NOTICE("You find a small horizontal slot at the bottom of the console. You try to feed \the [hit_item] into it, but it's seemingly blocked off from the inside.")) @@ -136,17 +136,17 @@ var/datum/controller/supply/supply_controller = new() /obj/structure/machinery/computer/supplycomp/proc/toggle_contraband(contraband_enabled = FALSE) can_order_contraband = contraband_enabled - for(var/obj/structure/machinery/computer/supplycomp/computer as anything in supply_controller.bound_supply_computer_list) + for(var/obj/structure/machinery/computer/supplycomp/computer as anything in GLOB.supply_controller.bound_supply_computer_list) if(computer.can_order_contraband) - supply_controller.black_market_enabled = TRUE + GLOB.supply_controller.black_market_enabled = TRUE return - supply_controller.black_market_enabled = FALSE + GLOB.supply_controller.black_market_enabled = FALSE //If any computers are able to order contraband, it's enabled. Otherwise, it's disabled! /// Prevents use of black market, even if it is otherwise enabled. If any computer has black market locked out, it applies across all of the currently established ones. /obj/structure/machinery/computer/supplycomp/proc/lock_black_market(market_locked = FALSE) - for(var/obj/structure/machinery/computer/supplycomp/computer as anything in supply_controller.bound_supply_computer_list) + for(var/obj/structure/machinery/computer/supplycomp/computer as anything in GLOB.supply_controller.bound_supply_computer_list) if(market_locked) computer.black_market_lockout = TRUE @@ -194,7 +194,7 @@ var/datum/controller/supply/supply_controller = new() var/list/data = list() var/list/squad_list = list() - for(var/datum/squad/current_squad in RoleAuthority.squads) + for(var/datum/squad/current_squad in GLOB.RoleAuthority.squads) if(current_squad.active && current_squad.faction == faction && current_squad.equipment_color) squad_list += list(list( "squad_name" = current_squad.name, @@ -327,7 +327,7 @@ var/datum/controller/supply/supply_controller = new() M.count_niche_stat(STATISTICS_NICHE_CRATES) playsound(C.loc,'sound/effects/bamf.ogg', 50, 1) //Ehh - var/obj/structure/droppod/supply/pod = new() + var/obj/structure/droppod/supply/pod = new(null, C) C.forceMove(pod) pod.launch(T) visible_message("[icon2html(src, viewers(src))] [SPAN_BOLDNOTICE("'[C.name]' supply drop launched! Another launch will be available in five minutes.")]") @@ -453,7 +453,7 @@ var/datum/controller/supply/supply_controller = new() if(processing) iteration++ points += points_per_process - if(iteration >= 20 && iteration % base_random_crate_interval == 0 && supply_controller.shoppinglist.len <= 20) + if(iteration >= 20 && iteration % base_random_crate_interval == 0 && GLOB.supply_controller.shoppinglist.len <= 20) add_random_crates() crate_iteration++ sleep(processing_interval) @@ -480,18 +480,18 @@ var/datum/controller/supply/supply_controller = new() //This is a weighted pick based upon their cost. //Their cost will go up if the crate is picked /datum/controller/supply/proc/add_random_crate() - var/datum/supply_packs/C = supply_controller.pick_weighted_crate(random_supply_packs) + var/datum/supply_packs/C = GLOB.supply_controller.pick_weighted_crate(random_supply_packs) if(C == null) return C.cost = round(C.cost * ASRS_COST_MULTIPLIER) //We still do this to raise the weight //We have to create a supply order to make the system spawn it. Here we transform a crate into an order. var/datum/supply_order/supply_order = new /datum/supply_order() - supply_order.ordernum = supply_controller.ordernum + supply_order.ordernum = GLOB.supply_controller.ordernum supply_order.object = C supply_order.orderedby = "ASRS" supply_order.approvedby = "ASRS" //We add the order to the shopping list - supply_controller.shoppinglist += supply_order + GLOB.supply_controller.shoppinglist += supply_order //Here we weigh the crate based upon it's cost /datum/controller/supply/proc/pick_weighted_crate(list/cratelist) @@ -590,8 +590,8 @@ var/datum/controller/supply/supply_controller = new() if(order.object.contraband == TRUE && prob(5)) // Mendoza loaded the wrong order in. What a dunce! var/list/contraband_list - for(var/supply_name in supply_controller.supply_packs) - var/datum/supply_packs/supply_pack = supply_controller.supply_packs[supply_name] + for(var/supply_name in GLOB.supply_controller.supply_packs) + var/datum/supply_packs/supply_pack = GLOB.supply_controller.supply_packs[supply_name] if(supply_pack.contraband == FALSE) continue LAZYADD(contraband_list, supply_pack) @@ -711,10 +711,10 @@ var/datum/controller/supply/supply_controller = new() if(temp) dat = temp else - var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle + var/datum/shuttle/ferry/supply/shuttle = GLOB.supply_controller.shuttle if (shuttle) dat += {"Location: [shuttle.has_arrive_time() ? "Raising platform":shuttle.at_station() ? "Raised":"Lowered"]
    -
    Supply budget: $[supply_controller.points * SUPPLY_TO_MONEY_MUPLTIPLIER]
    +
    Supply budget: $[GLOB.supply_controller.points * SUPPLY_TO_MONEY_MUPLTIPLIER]

    \nRequest items

    View approved orders

    View requests

    @@ -735,18 +735,18 @@ var/datum/controller/supply/supply_controller = new() //all_supply_groups //Request what? last_viewed_group = "categories" - temp = "Supply budget: $[supply_controller.points * SUPPLY_TO_MONEY_MUPLTIPLIER]
    " + temp = "Supply budget: $[GLOB.supply_controller.points * SUPPLY_TO_MONEY_MUPLTIPLIER]
    " temp += "Main Menu


    " temp += "Select a category

    " - for(var/supply_group_name in supply_controller.all_supply_groups) + for(var/supply_group_name in GLOB.supply_controller.all_supply_groups) temp += "[supply_group_name]
    " else last_viewed_group = href_list["order"] - temp = "Supply budget: $[supply_controller.points * SUPPLY_TO_MONEY_MUPLTIPLIER]
    " + temp = "Supply budget: $[GLOB.supply_controller.points * SUPPLY_TO_MONEY_MUPLTIPLIER]
    " temp += "Back to all categories


    " temp += "Request from: [last_viewed_group]

    " - for(var/supply_name in supply_controller.supply_packs ) - var/datum/supply_packs/N = supply_controller.supply_packs[supply_name] + for(var/supply_name in GLOB.supply_controller.supply_packs ) + var/datum/supply_packs/N = GLOB.supply_controller.supply_packs[supply_name] if(N.contraband || N.group != last_viewed_group || !N.buyable) continue //Have to send the type instead of a reference to temp += "[supply_name] Cost: $[round(N.cost) * SUPPLY_TO_MONEY_MUPLTIPLIER]
    " //the obj because it would get caught by the garbage @@ -757,7 +757,7 @@ var/datum/controller/supply/supply_controller = new() return //Find the correct supply_pack datum - var/datum/supply_packs/supply_pack = supply_controller.supply_packs[href_list["doorder"]] + var/datum/supply_packs/supply_pack = GLOB.supply_controller.supply_packs[href_list["doorder"]] if(!istype(supply_pack)) return if(supply_pack.contraband || !supply_pack.buyable) @@ -777,11 +777,11 @@ var/datum/controller/supply/supply_controller = new() else if(ishighersilicon(usr)) idname = usr.real_name - supply_controller.ordernum++ + GLOB.supply_controller.ordernum++ var/obj/item/paper/reqform = new /obj/item/paper(loc) reqform.name = "Requisition Form - [supply_pack.name]" - reqform.info += "

    [station_name] Supply Requisition Form


    " - reqform.info += "INDEX: #[supply_controller.ordernum]
    " + reqform.info += "

    [MAIN_SHIP_NAME] Supply Requisition Form


    " + reqform.info += "INDEX: #[GLOB.supply_controller.ordernum]
    " reqform.info += "REQUESTED BY: [idname]
    " reqform.info += "RANK: [idrank]
    " reqform.info += "REASON: [reason]
    " @@ -797,24 +797,24 @@ var/datum/controller/supply/supply_controller = new() //make our supply_order datum var/datum/supply_order/supply_order = new /datum/supply_order() - supply_order.ordernum = supply_controller.ordernum + supply_order.ordernum = GLOB.supply_controller.ordernum supply_order.object = supply_pack supply_order.orderedby = idname - supply_controller.requestlist += supply_order + GLOB.supply_controller.requestlist += supply_order temp = "Thanks for your request. The cargo team will process it as soon as possible.
    " temp += "
    Back Main Menu" else if (href_list["vieworders"]) temp = "Current approved orders:

    " - for(var/S in supply_controller.shoppinglist) + for(var/S in GLOB.supply_controller.shoppinglist) var/datum/supply_order/SO = S temp += "[SO.object.name] approved by [SO.approvedby]
    " temp += "
    OK" else if (href_list["viewrequests"]) temp = "Current requests:

    " - for(var/S in supply_controller.requestlist) + for(var/S in GLOB.supply_controller.requestlist) var/datum/supply_order/SO = S temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby]
    " temp += "
    OK" @@ -840,7 +840,7 @@ var/datum/controller/supply/supply_controller = new() if (temp) dat = temp else - var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle + var/datum/shuttle/ferry/supply/shuttle = GLOB.supply_controller.shuttle if (shuttle) dat += "\nPlatform position: " if (shuttle.has_arrive_time()) @@ -874,7 +874,7 @@ var/datum/controller/supply/supply_controller = new() dat += "
    \n
    " - dat += {"
    \nSupply budget: $[supply_controller.points * SUPPLY_TO_MONEY_MUPLTIPLIER]
    \n
    + dat += {"
    \nSupply budget: $[GLOB.supply_controller.points * SUPPLY_TO_MONEY_MUPLTIPLIER]
    \n
    \nOrder items
    \n
    \nView requests
    \n
    \nView orders
    \n
    @@ -886,10 +886,10 @@ var/datum/controller/supply/supply_controller = new() /obj/structure/machinery/computer/supplycomp/Topic(href, href_list) if(!is_mainship_level(z)) return - if(!supply_controller) - world.log << "## ERROR: Eek. The supply_controller controller datum is missing somehow." + if(!GLOB.supply_controller) + world.log << "## ERROR: Eek. The GLOB.supply_controller controller datum is missing somehow." return - var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle + var/datum/shuttle/ferry/supply/shuttle = GLOB.supply_controller.shuttle if (!shuttle) world.log << "## ERROR: Eek. The supply/shuttle datum is missing somehow." return @@ -927,10 +927,10 @@ var/datum/controller/supply/supply_controller = new() //all_supply_groups //Request what? last_viewed_group = "categories" - temp = "Supply budget: $[supply_controller.points * SUPPLY_TO_MONEY_MUPLTIPLIER]
    " + temp = "Supply budget: $[GLOB.supply_controller.points * SUPPLY_TO_MONEY_MUPLTIPLIER]
    " temp += "Main Menu


    " temp += "Select a category

    " - for(var/supply_group_name in supply_controller.all_supply_groups) + for(var/supply_group_name in GLOB.supply_controller.all_supply_groups) temp += "[supply_group_name]
    " if(can_order_contraband) temp += "[SPAN_DANGER("$E4RR301¿")]
    " @@ -938,14 +938,14 @@ var/datum/controller/supply/supply_controller = new() last_viewed_group = href_list["order"] if(last_viewed_group == "Black Market") handle_black_market(temp) - else if(last_viewed_group in supply_controller.contraband_supply_groups) + else if(last_viewed_group in GLOB.supply_controller.contraband_supply_groups) handle_black_market_groups() else - temp = "Supply budget: $[supply_controller.points * SUPPLY_TO_MONEY_MUPLTIPLIER]
    " + temp = "Supply budget: $[GLOB.supply_controller.points * SUPPLY_TO_MONEY_MUPLTIPLIER]
    " temp += "Back to all categories


    " temp += "Request from: [last_viewed_group]

    " - for(var/supply_name in supply_controller.supply_packs ) - var/datum/supply_packs/supply_pack = supply_controller.supply_packs[supply_name] + for(var/supply_name in GLOB.supply_controller.supply_packs ) + var/datum/supply_packs/supply_pack = GLOB.supply_controller.supply_packs[supply_name] if(!is_buyable(supply_pack)) continue temp += "[supply_name] Cost: $[round(supply_pack.cost) * SUPPLY_TO_MONEY_MUPLTIPLIER]
    " //the obj because it would get caught by the garbage @@ -957,7 +957,7 @@ var/datum/controller/supply/supply_controller = new() return //Find the correct supply_pack datum - var/datum/supply_packs/supply_pack = supply_controller.supply_packs[href_list["doorder"]] + var/datum/supply_packs/supply_pack = GLOB.supply_controller.supply_packs[href_list["doorder"]] if(!istype(supply_pack)) return @@ -980,11 +980,11 @@ var/datum/controller/supply/supply_controller = new() else if(isSilicon(usr)) idname = usr.real_name - supply_controller.ordernum++ + GLOB.supply_controller.ordernum++ var/obj/item/paper/reqform = new /obj/item/paper(loc) reqform.name = "Requisition Form - [supply_pack.name]" - reqform.info += "

    [station_name] Supply Requisition Form


    " - reqform.info += "INDEX: #[supply_controller.ordernum]
    " + reqform.info += "

    [MAIN_SHIP_NAME] Supply Requisition Form


    " + reqform.info += "INDEX: #[GLOB.supply_controller.ordernum]
    " reqform.info += "REQUESTED BY: [idname]
    " reqform.info += "RANK: [idrank]
    " reqform.info += "REASON: [reason]
    " @@ -1000,10 +1000,10 @@ var/datum/controller/supply/supply_controller = new() //make our supply_order datum var/datum/supply_order/supply_order = new /datum/supply_order() - supply_order.ordernum = supply_controller.ordernum + supply_order.ordernum = GLOB.supply_controller.ordernum supply_order.object = supply_pack supply_order.orderedby = idname - supply_controller.requestlist += supply_order + GLOB.supply_controller.requestlist += supply_order temp = "Order request placed.
    " temp += "
    Back|Main Menu|Authorize Order" @@ -1016,29 +1016,29 @@ var/datum/controller/supply/supply_controller = new() temp = "Invalid Request" temp += "
    Back|Main Menu" - if(supply_controller.shoppinglist.len > 20) + if(GLOB.supply_controller.shoppinglist.len > 20) to_chat(usr, SPAN_DANGER("Current retrieval load has reached maximum capacity.")) return - for(var/i=1, i<=supply_controller.requestlist.len, i++) - var/datum/supply_order/SO = supply_controller.requestlist[i] + for(var/i=1, i<=GLOB.supply_controller.requestlist.len, i++) + var/datum/supply_order/SO = GLOB.supply_controller.requestlist[i] if(SO.ordernum == ordernum) supply_order = SO supply_pack = supply_order.object - if(supply_controller.points >= round(supply_pack.cost) && supply_controller.black_market_points >= supply_pack.dollar_cost) - supply_controller.requestlist.Cut(i,i+1) - supply_controller.points -= round(supply_pack.cost) - supply_controller.black_market_points -= round(supply_pack.dollar_cost) - if(supply_controller.black_market_heat != -1) //-1 Heat means heat is disabled - supply_controller.black_market_heat = clamp(supply_controller.black_market_heat + supply_pack.crate_heat + (supply_pack.crate_heat * rand(rand(-0.25,0),0.25)), 0, 100) // black market heat added is crate heat +- up to 25% of crate heat - supply_controller.shoppinglist += supply_order + if(GLOB.supply_controller.points >= round(supply_pack.cost) && GLOB.supply_controller.black_market_points >= supply_pack.dollar_cost) + GLOB.supply_controller.requestlist.Cut(i,i+1) + GLOB.supply_controller.points -= round(supply_pack.cost) + GLOB.supply_controller.black_market_points -= round(supply_pack.dollar_cost) + if(GLOB.supply_controller.black_market_heat != -1) //-1 Heat means heat is disabled + GLOB.supply_controller.black_market_heat = clamp(GLOB.supply_controller.black_market_heat + supply_pack.crate_heat + (supply_pack.crate_heat * rand(rand(-0.25,0),0.25)), 0, 100) // black market heat added is crate heat +- up to 25% of crate heat + GLOB.supply_controller.shoppinglist += supply_order supply_pack.cost = supply_pack.cost * SUPPLY_COST_MULTIPLIER temp = "Thank you for your order.
    " temp += "
    Back Main Menu" supply_order.approvedby = usr.name msg_admin_niche("[usr] confirmed supply order of [supply_pack.name].") - if(supply_controller.black_market_heat == 100) - supply_controller.black_market_investigation() + if(GLOB.supply_controller.black_market_heat == 100) + GLOB.supply_controller.black_market_investigation() var/pack_source = "Cargo Hold" var/pack_name = supply_pack.name if(supply_pack.dollar_cost) @@ -1053,7 +1053,7 @@ var/datum/controller/supply/supply_controller = new() else if (href_list["vieworders"]) temp = "Current approved orders:

    " - for(var/S in supply_controller.shoppinglist) + for(var/S in GLOB.supply_controller.shoppinglist) var/datum/supply_order/SO = S temp += "#[SO.ordernum] - [SO.object.name] approved by [SO.approvedby]
    "// (Cancel)
    " temp += "
    OK" @@ -1071,7 +1071,7 @@ var/datum/controller/supply/supply_controller = new() */ else if (href_list["viewrequests"]) temp = "Current requests:

    " - for(var/S in supply_controller.requestlist) + for(var/S in GLOB.supply_controller.requestlist) var/datum/supply_order/SO = S temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby] Approve Remove
    " @@ -1081,16 +1081,16 @@ var/datum/controller/supply/supply_controller = new() else if (href_list["rreq"]) var/ordernum = text2num(href_list["rreq"]) temp = "Invalid Request.
    " - for(var/i=1, i<=supply_controller.requestlist.len, i++) - var/datum/supply_order/SO = supply_controller.requestlist[i] + for(var/i=1, i<=GLOB.supply_controller.requestlist.len, i++) + var/datum/supply_order/SO = GLOB.supply_controller.requestlist[i] if(SO.ordernum == ordernum) - supply_controller.requestlist.Cut(i,i+1) + GLOB.supply_controller.requestlist.Cut(i,i+1) temp = "Request removed.
    " break temp += "
    Back Main Menu" else if (href_list["clearreq"]) - supply_controller.requestlist.Cut() + GLOB.supply_controller.requestlist.Cut() temp = "List cleared.
    " temp += "
    OK" @@ -1103,28 +1103,28 @@ var/datum/controller/supply/supply_controller = new() /obj/structure/machinery/computer/supplycomp/proc/handle_black_market() - temp = "W-Y Dollars: $[supply_controller.black_market_points]
    " + temp = "W-Y Dollars: $[GLOB.supply_controller.black_market_points]
    " temp += "Back to all categories


    " temp += SPAN_DANGER("ERR0R UNK7OWN C4T2G#!$0-


    ") if(black_market_lockout) temp += "





    Unauthorized Access Removed.
    This console is currently under CMB investigation.
    Thank you for your cooperation.
    " return temp += "KHZKNHZH#0-" - if(!supply_controller.mendoza_status) // he's daed + if(!GLOB.supply_controller.mendoza_status) // he's daed temp += "........." return handle_mendoza_dialogue() //mendoza has been in there for a while. he gets lonely sometimes temp += "[last_viewed_group]

    " - for(var/supply_group_name in supply_controller.contraband_supply_groups) + for(var/supply_group_name in GLOB.supply_controller.contraband_supply_groups) temp += "[supply_group_name]
    " /obj/structure/machinery/computer/supplycomp/proc/handle_black_market_groups() - temp = "W-Y Dollars: $[supply_controller.black_market_points]
    " + temp = "W-Y Dollars: $[GLOB.supply_controller.black_market_points]
    " temp += "Back to black market categories


    " temp += "Purchase from: [last_viewed_group]

    " - for(var/supply_name in supply_controller.supply_packs ) - var/datum/supply_packs/supply_pack = supply_controller.supply_packs[supply_name] + for(var/supply_name in GLOB.supply_controller.supply_packs ) + var/datum/supply_packs/supply_pack = GLOB.supply_controller.supply_packs[supply_name] if(!is_buyable(supply_pack)) continue temp += "[supply_name] Cost: $[round(supply_pack.dollar_cost)]
    " @@ -1185,7 +1185,7 @@ var/datum/controller/supply/supply_controller = new() return_value = movable_atom.black_market_value // so they cant sell the same thing over and over and over - return_value = POSITIVE(return_value - supply_controller.black_market_sold_items[movable_atom.type] * 0.5) + return_value = POSITIVE(return_value - GLOB.supply_controller.black_market_sold_items[movable_atom.type] * 0.5) return return_value /datum/controller/supply/proc/kill_mendoza() @@ -1315,6 +1315,14 @@ var/datum/controller/supply/supply_controller = new() /datum/vehicle_order/tank/has_vehicle_lock() return +/datum/vehicle_order/tank/broken + name = "Smashed M34A2 Longstreet Light Tank" + ordered_vehicle = /obj/effect/vehicle_spawner/tank/hull/broken + +/datum/vehicle_order/tank/plain + name = "M34A2 Longstreet Light Tank" + ordered_vehicle = /obj/effect/vehicle_spawner/tank + /datum/vehicle_order/apc name = "M577 Armored Personnel Carrier" ordered_vehicle = /obj/effect/vehicle_spawner/apc/decrepit @@ -1327,23 +1335,24 @@ var/datum/controller/supply/supply_controller = new() name = "M577-CMD Armored Personnel Carrier" ordered_vehicle = /obj/effect/vehicle_spawner/apc_cmd/decrepit +/datum/vehicle_order/apc/empty + name = "Barebones M577 Armored Personal Carrier" + ordered_vehicle = /obj/effect/vehicle_spawner/apc/unarmed/broken + /obj/structure/machinery/computer/supplycomp/vehicle/Initialize() . = ..() vehicles = list( - /datum/vehicle_order/apc, - /datum/vehicle_order/apc/med, - /datum/vehicle_order/apc/cmd, + new /datum/vehicle_order/apc(), + new /datum/vehicle_order/apc/med(), + new /datum/vehicle_order/apc/cmd(), ) - for(var/order as anything in vehicles) - new order - - if(!VehicleElevatorConsole) - VehicleElevatorConsole = src + if(!GLOB.VehicleElevatorConsole) + GLOB.VehicleElevatorConsole = src /obj/structure/machinery/computer/supplycomp/vehicle/Destroy() - VehicleElevatorConsole = null + GLOB.VehicleElevatorConsole = null return ..() /obj/structure/machinery/computer/supplycomp/vehicle/attack_hand(mob/living/carbon/human/H as mob) @@ -1399,8 +1408,8 @@ var/datum/controller/supply/supply_controller = new() return if(spent) return - if(!supply_controller) - world.log << "## ERROR: Eek. The supply_controller controller datum is missing somehow." + if(!GLOB.supply_controller) + world.log << "## ERROR: Eek. The GLOB.supply_controller controller datum is missing somehow." return if (!SSshuttle.vehicle_elevator) @@ -1408,6 +1417,7 @@ var/datum/controller/supply/supply_controller = new() return if(!is_admin_level(SSshuttle.vehicle_elevator.z)) + to_chat(usr, SPAN_WARNING("The elevator needs to be in the cargo bay dock to call a vehicle up. Ask someone to send it away.")) return if(ismaintdrone(usr)) diff --git a/code/game/turfs/auto_turf.dm b/code/game/turfs/auto_turf.dm index 45756c30bb9c..e07f7324bcc2 100644 --- a/code/game/turfs/auto_turf.dm +++ b/code/game/turfs/auto_turf.dm @@ -53,7 +53,7 @@ return bleed_layer = max(0, new_layer) - for(var/direction in alldirs) + for(var/direction in GLOB.alldirs) var/turf/open/T = get_step(src, direction) if(istype(T)) T.update_icon() @@ -169,7 +169,7 @@ if(istype(I, /obj/item/lightstick)) var/obj/item/lightstick/L = I if(locate(/obj/item/lightstick) in get_turf(src)) - to_chat(user, "There's already a [L] at this position!") + to_chat(user, "There's already \a [L] at this position!") return to_chat(user, "Now planting \the [L].") diff --git a/code/game/turfs/floor.dm b/code/game/turfs/floor.dm index 5f99aba26c09..1be6235cd2ac 100644 --- a/code/game/turfs/floor.dm +++ b/code/game/turfs/floor.dm @@ -69,7 +69,7 @@ ..() if(is_grass_floor()) var/dir_sum = 0 - for(var/direction in cardinal) + for(var/direction in GLOB.cardinals) var/turf/T = get_step(src,direction) if(!(T.is_grass_floor())) dir_sum += direction diff --git a/code/game/turfs/floor_types.dm b/code/game/turfs/floor_types.dm index 4e47fd004f74..f957686fac22 100644 --- a/code/game/turfs/floor_types.dm +++ b/code/game/turfs/floor_types.dm @@ -203,6 +203,13 @@ icon_state = "default" plating_type = /turf/open/floor/plating/almayer +/// Admin level thunderdome floor. Doesn't get damaged by explosions and such for pristine testing +/turf/open/floor/tdome + icon = 'icons/turf/almayer.dmi' + icon_state = "plating" + plating_type = /turf/open/floor/tdome + hull_floor = TRUE + //Cargo elevator /turf/open/floor/almayer/empty name = "empty space" @@ -242,10 +249,10 @@ qdel(AM) return var/mob/living/carbon/human/thrown_human = AM - for(var/atom/computer as anything in supply_controller.bound_supply_computer_list) + for(var/atom/computer as anything in GLOB.supply_controller.bound_supply_computer_list) computer.balloon_alert_to_viewers("you hear horrifying noises coming from the elevator!") - var/area/area_shuttle = supply_controller.shuttle?.get_location_area() + var/area/area_shuttle = GLOB.supply_controller.shuttle?.get_location_area() if(!area_shuttle) return var/list/turflist = list() @@ -452,7 +459,7 @@ /turf/open/floor/grass/LateInitialize() . = ..() - for(var/direction in cardinal) + for(var/direction in GLOB.cardinals) if(istype(get_step(src,direction),/turf/open/floor)) var/turf/open/floor/FF = get_step(src,direction) FF.update_icon() //so siding get updated properly @@ -497,7 +504,7 @@ if(!broken && !burnt) if(icon_state != "carpetsymbol") var/connectdir = 0 - for(var/direction in cardinal) + for(var/direction in GLOB.cardinals) if(istype(get_step(src, direction), /turf/open/floor)) var/turf/open/floor/FF = get_step(src, direction) if(FF.is_carpet_floor()) @@ -538,7 +545,7 @@ icon_state = "carpet[connectdir]-[diagonalconnect]" /turf/open/floor/carpet/make_plating() - for(var/direction in alldirs) + for(var/direction in GLOB.alldirs) if(istype(get_step(src, direction), /turf/open/floor)) var/turf/open/floor/FF = get_step(src,direction) FF.update_icon() // So siding get updated properly diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index 93eb45c3b79c..7d9dd6303c64 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -24,7 +24,7 @@ add_cleanable_overlays() var/list/turf/open/auto_turf/auto_turf_dirs = list() - for(var/direction in alldirs) + for(var/direction in GLOB.alldirs) var/turf/open/auto_turf/T = get_step(src, direction) if(!istype(T)) continue @@ -36,7 +36,7 @@ var/list/handled_dirs = list() var/list/unhandled_dirs = list() - for(var/direction in diagonals) + for(var/direction in GLOB.diagonals) var/x_dir = direction & (direction-1) var/y_dir = direction - x_dir @@ -90,7 +90,7 @@ if(!T.icon_state_before_scorching) T.icon_state_before_scorching = T.icon_state var/direction_from_neighbor_towards_src = get_dir(T, src) - var/icon/culling_mask = icon(T.icon, "[T.scorchable]_mask[turf_edgeinfo_cache[T.icon_state_before_scorching][dir2indexnum(T.dir)][dir2indexnum(direction_from_neighbor_towards_src)]]", direction_from_neighbor_towards_src) + var/icon/culling_mask = icon(T.icon, "[T.scorchable]_mask[GLOB.turf_edgeinfo_cache[T.icon_state_before_scorching][dir2indexnum(T.dir)][dir2indexnum(direction_from_neighbor_towards_src)]]", direction_from_neighbor_towards_src) edge_overlay.Blend(culling_mask, ICON_OVERLAY) edge_overlay.SwapColor(rgb(255, 0, 255, 255), rgb(0, 0, 0, 0)) overlays += edge_overlay @@ -292,7 +292,7 @@ if(istype(I, /obj/item/lightstick)) var/obj/item/lightstick/L = I if(locate(/obj/item/lightstick) in get_turf(src)) - to_chat(user, "There's already a [L] at this position!") + to_chat(user, "There's already \a [L] at this position!") return to_chat(user, "Now planting \the [L].") @@ -370,16 +370,16 @@ /turf/open/gm/grass/Initialize(mapload, ...) . = ..() - if(!locate(icon_state) in turf_edgeinfo_cache) + if(!locate(icon_state) in GLOB.turf_edgeinfo_cache) switch(icon_state) if("grass1") - turf_edgeinfo_cache["grass1"] = GLOB.edgeinfo_full + GLOB.turf_edgeinfo_cache["grass1"] = GLOB.edgeinfo_full if("grass2") - turf_edgeinfo_cache["grass2"] = GLOB.edgeinfo_full + GLOB.turf_edgeinfo_cache["grass2"] = GLOB.edgeinfo_full if("grassbeach") - turf_edgeinfo_cache["grassbeach"] = GLOB.edgeinfo_edge + GLOB.turf_edgeinfo_cache["grassbeach"] = GLOB.edgeinfo_edge if("gbcorner") - turf_edgeinfo_cache["gbcorner"] = GLOB.edgeinfo_corner + GLOB.turf_edgeinfo_cache["gbcorner"] = GLOB.edgeinfo_corner /turf/open/gm/dirt2 name = "dirt" @@ -435,14 +435,14 @@ /turf/open/gm/dirtgrassborder/Initialize(mapload, ...) . = ..() - if(!locate(icon_state) in turf_edgeinfo_cache) + if(!locate(icon_state) in GLOB.turf_edgeinfo_cache) switch(icon_state) if("grassdirt_edge") - turf_edgeinfo_cache["grassdirt_edge"] = GLOB.edgeinfo_edge + GLOB.turf_edgeinfo_cache["grassdirt_edge"] = GLOB.edgeinfo_edge if("grassdirt_corner") - turf_edgeinfo_cache["grassdirt_corner"] = GLOB.edgeinfo_corner + GLOB.turf_edgeinfo_cache["grassdirt_corner"] = GLOB.edgeinfo_corner if("grassdirt_corner2") - turf_edgeinfo_cache["grassdirt_corner2"] = GLOB.edgeinfo_corner2 + GLOB.turf_edgeinfo_cache["grassdirt_corner2"] = GLOB.edgeinfo_corner2 /turf/open/gm/dirtgrassborder2 name = "grass" @@ -787,7 +787,7 @@ if(istype(I, /obj/item/lightstick)) var/obj/item/lightstick/L = I if(locate(/obj/item/lightstick) in get_turf(src)) - to_chat(user, "There's already a [L] at this position!") + to_chat(user, "There's already \a [L] at this position!") return to_chat(user, "Now planting \the [L].") diff --git a/code/game/turfs/snow.dm b/code/game/turfs/snow.dm index 72b1f35d0aff..f7fb746cfbbc 100644 --- a/code/game/turfs/snow.dm +++ b/code/game/turfs/snow.dm @@ -16,7 +16,7 @@ if(istype(I, /obj/item/lightstick)) var/obj/item/lightstick/L = I if(locate(/obj/item/lightstick) in get_turf(src)) - to_chat(user, "There's already a [L] at this position!") + to_chat(user, "There's already \a [L] at this position!") return to_chat(user, "Now planting \the [L].") @@ -77,7 +77,7 @@ if(update_full) var/turf/open/T if(!skip_sides) - for(var/dirn in alldirs) + for(var/dirn in GLOB.alldirs) var/turf/open/snow/D = get_step(src,dirn) if(istype(D)) //Update turfs that are near us, but only once @@ -85,7 +85,7 @@ overlays.Cut() - for(var/dirn in alldirs) + for(var/dirn in GLOB.alldirs) T = get_step(src, dirn) if(istype(T)) if(bleed_layer > T.bleed_layer && T.bleed_layer < 1) @@ -148,6 +148,3 @@ /turf/open/snow/layer3 icon_state = "snow_3" bleed_layer = 3 - - - diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 837610d5d7fe..22fe85bdde65 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -72,9 +72,8 @@ // by default, vis_contents is inherited from the turf that was here before vis_contents.Cut() - turfs += src - if(is_ground_level(z)) - z1turfs += src + GLOB.turfs += src + assemble_baseturfs() @@ -82,11 +81,11 @@ visibilityChanged() - pass_flags = pass_flags_cache[type] + pass_flags = GLOB.pass_flags_cache[type] if (isnull(pass_flags)) pass_flags = new() initialize_pass_flags(pass_flags) - pass_flags_cache[type] = pass_flags + GLOB.pass_flags_cache[type] = pass_flags else initialize_pass_flags() diff --git a/code/game/turfs/walls/wall_icon.dm b/code/game/turfs/walls/wall_icon.dm index 9e47612964c4..2b414ca46af8 100644 --- a/code/game/turfs/walls/wall_icon.dm +++ b/code/game/turfs/walls/wall_icon.dm @@ -86,7 +86,7 @@ break if(success) - if(get_dir(src, T) in cardinal) + if(get_dir(src, T) in GLOB.cardinals) wall_dirs += get_dir(src, T) for(var/neighbor in wall_dirs) diff --git a/code/game/turfs/walls/wall_types.dm b/code/game/turfs/walls/wall_types.dm index 1b4091eb2aab..3093f8c7771a 100644 --- a/code/game/turfs/walls/wall_types.dm +++ b/code/game/turfs/walls/wall_types.dm @@ -28,15 +28,23 @@ /obj/structure/machinery/cm_vending/sorted/cargo_guns/cargo/blend, ) + /// The type of wall decoration we use, to avoid the wall changing icon all the time + var/decoration_type + +/turf/closed/wall/almayer/Initialize(mapload, ...) + if(!special_icon && prob(20)) + decoration_type = rand(0,3) + return ..() + /turf/closed/wall/almayer/update_icon() - ..() - if(special_icon) - return + if(decoration_type == null) + return ..() if(neighbors_list in list(EAST|WEST)) - var/r1 = rand(0,10) //Make a random chance for this to happen - var/r2 = rand(0,3) // Which wall if we do choose it - if(r1 >= 9) - overlays += image(icon, icon_state = "almayer_deco_wall[r2]") + special_icon = TRUE + icon_state = "almayer_deco_wall[decoration_type]" + else // Wall connection was broken, return to normality + special_icon = FALSE + return ..() /turf/closed/wall/almayer/take_damage(dam, mob/M) var/damage_check = max(0, damage + dam) @@ -255,15 +263,15 @@ INITIALIZE_IMMEDIATE(/turf/closed/wall/indestructible/splashscreen) tag = "LOBBYART" /proc/force_lobby_art(art_id) - displayed_lobby_art = art_id + GLOB.displayed_lobby_art = art_id var/turf/closed/wall/indestructible/splashscreen/SS = locate("LOBBYART") var/list/lobby_arts = CONFIG_GET(str_list/lobby_art_images) var/list/lobby_authors = CONFIG_GET(str_list/lobby_art_authors) - SS.icon_state = lobby_arts[displayed_lobby_art] - SS.desc = "Artwork by [lobby_authors[displayed_lobby_art]]" + SS.icon_state = lobby_arts[GLOB.displayed_lobby_art] + SS.desc = "Artwork by [lobby_authors[GLOB.displayed_lobby_art]]" for(var/client/C in GLOB.clients) - if(displayed_lobby_art != -1) - var/author = lobby_authors[displayed_lobby_art] + if(GLOB.displayed_lobby_art != -1) + var/author = lobby_authors[GLOB.displayed_lobby_art] if(author != "Unknown") to_chat_forced(C, SPAN_ROUNDBODY("
    This round's lobby art is brought to you by [author]
    ")) @@ -814,7 +822,7 @@ INITIALIZE_IMMEDIATE(/turf/closed/wall/indestructible/splashscreen) var/datum/movable_wall_group/MWG = new() MWG.add_structure(current) - for(var/dir in cardinal) + for(var/dir in GLOB.cardinals) connected = locate() in get_step(current, dir) if(connected in current_walls) if(connected.group == src) @@ -949,7 +957,7 @@ INITIALIZE_IMMEDIATE(/turf/closed/wall/indestructible/splashscreen) /obj/structure/alien/movable_wall/proc/update_connections(propagate = FALSE) var/list/wall_dirs = list() - for(var/dir in alldirs) + for(var/dir in GLOB.alldirs) var/obj/structure/alien/movable_wall/MW = locate() in get_step(src, dir) if(!(MW in group.walls)) continue @@ -1003,7 +1011,7 @@ INITIALIZE_IMMEDIATE(/turf/closed/wall/indestructible/splashscreen) /obj/structure/alien/movable_wall/proc/recalculate_structure() var/list/found_structures = list() var/current_walls = 0 - for(var/i in cardinal) + for(var/i in GLOB.cardinals) var/turf/T = get_step(src, i) var/obj/structure/alien/movable_wall/MW = locate() in T if(!MW) @@ -1060,7 +1068,7 @@ INITIALIZE_IMMEDIATE(/turf/closed/wall/indestructible/splashscreen) return COMPONENT_TURF_ALLOW_MOVEMENT /obj/structure/alien/movable_wall/Move(NewLoc, direct) - if(!(direct in cardinal)) + if(!(direct in GLOB.cardinals)) return group.try_move_in_direction(direct) @@ -1234,7 +1242,7 @@ INITIALIZE_IMMEDIATE(/turf/closed/wall/indestructible/splashscreen) . = ..() if(.) var/turf/T - for(var/i in cardinal) + for(var/i in GLOB.cardinals) T = get_step(src, i) if(!istype(T)) continue for(var/obj/structure/mineral_door/resin/R in T) diff --git a/code/game/turfs/walls/walls.dm b/code/game/turfs/walls/walls.dm index 2387a2086192..303a9a7655e8 100644 --- a/code/game/turfs/walls/walls.dm +++ b/code/game/turfs/walls/walls.dm @@ -73,7 +73,7 @@ . = ..() if(.) //successful turf change var/turf/T - for(var/i in cardinal) + for(var/i in GLOB.cardinals) T = get_step(src, i) //nearby glowshrooms updated @@ -88,8 +88,6 @@ if(istype(found_object, /obj/structure/sign/poster)) var/obj/structure/sign/poster/found_poster = found_object found_poster.roll_and_drop(src) - if(istype(found_object, /obj/effect/alien/weeds)) - qdel(found_object) var/list/turf/cardinal_neighbors = list(get_step(src, NORTH), get_step(src, SOUTH), get_step(src, EAST), get_step(src, WEST)) for(var/turf/cardinal_turf as anything in cardinal_neighbors) diff --git a/code/game/verbs/discord.dm b/code/game/verbs/discord.dm index 210038084caa..2446c89aafe5 100644 --- a/code/game/verbs/discord.dm +++ b/code/game/verbs/discord.dm @@ -29,7 +29,7 @@ var/datum/entity/discord_identifier/new_identifier = DB_ENTITY(/datum/entity/discord_identifier) var/not_unique = TRUE - var/long_list = operation_postfixes + operation_prefixes + operation_titles + var/long_list = GLOB.operation_postfixes + GLOB.operation_prefixes + GLOB.operation_titles var/token while(not_unique) diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index 3c964cf4011b..2fe22ef3d4da 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -15,10 +15,10 @@ return if(!admin_holder || !(admin_holder.rights & R_MOD)) - if(!ooc_allowed) //Send to LOOC instead + if(!GLOB.ooc_allowed) //Send to LOOC instead looc(msg) return - if(!dooc_allowed && (mob.stat == DEAD || isobserver(mob))) + if(!GLOB.dooc_allowed && (mob.stat == DEAD || isobserver(mob))) to_chat(usr, SPAN_DANGER("OOC for dead mobs has been turned off.")) return if(prefs.muted & MUTE_OOC) @@ -108,10 +108,10 @@ return if(!admin_holder || !(admin_holder.rights & R_MOD)) - if(!looc_allowed) + if(!GLOB.looc_allowed) to_chat(src, SPAN_DANGER("LOOC is globally muted")) return - if(!dlooc_allowed && (mob.stat != CONSCIOUS || isobserver(mob))) + if(!GLOB.dlooc_allowed && (mob.stat != CONSCIOUS || isobserver(mob))) to_chat(usr, SPAN_DANGER("Sorry, you cannot utilize LOOC while dead or incapacitated.")) return if(prefs.muted & MUTE_OOC) @@ -150,7 +150,7 @@ if(C.prefs.toggles_chat & CHAT_LOOC) to_chat(C, "LOOC: [display_name]: [msg]") - if(mob.looc_overhead || ooc_allowed) + if(mob.looc_overhead || GLOB.ooc_allowed) var/transmit_language = isxeno(mob) ? LANGUAGE_XENOMORPH : LANGUAGE_ENGLISH mob.langchat_speech(msg, heard, GLOB.all_languages[transmit_language], "#ff47d7") diff --git a/code/game/verbs/records.dm b/code/game/verbs/records.dm index 18ed35ee6321..db420a45bc76 100644 --- a/code/game/verbs/records.dm +++ b/code/game/verbs/records.dm @@ -84,7 +84,7 @@ var/list/options = list() if(CLIENT_IS_STAFF(src)) - options = note_categories.Copy() + options = GLOB.note_categories.Copy() if(admin_holder.rights & R_PERMISSIONS) MA = TRUE else if(!isCouncil(src)) @@ -97,13 +97,13 @@ return target = ckey(target) - if(RoleAuthority.roles_whitelist[src.ckey] & WHITELIST_COMMANDER_COUNCIL) + if(GLOB.RoleAuthority.roles_whitelist[src.ckey] & WHITELIST_COMMANDER_COUNCIL) options |= "Commanding Officer" edit_C = TRUE - if(RoleAuthority.roles_whitelist[src.ckey] & WHITELIST_SYNTHETIC_COUNCIL) + if(GLOB.RoleAuthority.roles_whitelist[src.ckey] & WHITELIST_SYNTHETIC_COUNCIL) options |= "Synthetic" edit_S = TRUE - if(RoleAuthority.roles_whitelist[src.ckey] & WHITELIST_YAUTJA_COUNCIL) + if(GLOB.RoleAuthority.roles_whitelist[src.ckey] & WHITELIST_YAUTJA_COUNCIL) options |= "Yautja" edit_Y = TRUE @@ -116,17 +116,17 @@ if("Merit") show_other_record(NOTE_MERIT, choice, target, TRUE) if("Commanding Officer") - if(MA || (RoleAuthority.roles_whitelist[src.ckey] & WHITELIST_COMMANDER_LEADER)) + if(MA || (GLOB.RoleAuthority.roles_whitelist[src.ckey] & WHITELIST_COMMANDER_LEADER)) show_other_record(NOTE_COMMANDER, choice, target, TRUE, TRUE) else show_other_record(NOTE_COMMANDER, choice, target, edit_C) if("Synthetic") - if(MA || (RoleAuthority.roles_whitelist[src.ckey] & WHITELIST_SYNTHETIC_LEADER)) + if(MA || (GLOB.RoleAuthority.roles_whitelist[src.ckey] & WHITELIST_SYNTHETIC_LEADER)) show_other_record(NOTE_SYNTHETIC, choice, target, TRUE, TRUE) else show_other_record(NOTE_SYNTHETIC, choice, target, edit_S) if("Yautja") - if(MA || (RoleAuthority.roles_whitelist[src.ckey] & WHITELIST_YAUTJA_LEADER)) + if(MA || (GLOB.RoleAuthority.roles_whitelist[src.ckey] & WHITELIST_YAUTJA_LEADER)) show_other_record(NOTE_YAUTJA, choice, target, TRUE, TRUE) else show_other_record(NOTE_YAUTJA, choice, target, edit_Y) diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm index 8a249d297cbe..9cad56cdabe8 100644 --- a/code/game/verbs/who.dm +++ b/code/game/verbs/who.dm @@ -83,7 +83,7 @@ counted_humanoids["Infected humans"]++ if(C.mob.faction == FACTION_MARINE) counted_humanoids[FACTION_MARINE]++ - if(C.mob.job in (ROLES_MARINES)) + if(C.mob.job in (GLOB.ROLES_MARINES)) counted_humanoids["USCM Marines"]++ else counted_humanoids[C.mob.faction]++ @@ -160,7 +160,7 @@ if(CONFIG_GET(flag/show_manager)) LAZYSET(mappings, "Management", R_PERMISSIONS) if(CONFIG_GET(flag/show_devs)) - LAZYSET(mappings, "Maintainers", R_PROFILER) + LAZYSET(mappings, "Maintainers", R_PROFILER) LAZYSET(mappings, "Admins", R_ADMIN) if(CONFIG_GET(flag/show_mods)) LAZYSET(mappings, "Moderators", R_MOD) @@ -182,7 +182,7 @@ for(var/category in listings) dat += "
    Current [category] ([length(listings[category])]):
    \n" for(var/client/entry in listings[category]) - dat += "\t[entry.key] is a [entry.admin_holder.rank]" + dat += "\t[entry.key] is \a [entry.admin_holder.rank]" if(entry.admin_holder.extra_titles?.len) for(var/srank in entry.admin_holder.extra_titles) dat += " & [srank]" diff --git a/code/game/world.dm b/code/game/world.dm index f5388ed6fd52..d8156547ef76 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -1,10 +1,8 @@ -var/world_view_size = 7 -var/lobby_view_size = 16 +GLOBAL_VAR_INIT(world_view_size, 7) +GLOBAL_VAR_INIT(lobby_view_size, 16) -var/internal_tick_usage = 0 - -var/list/reboot_sfx = file2list("config/reboot_sfx.txt") +GLOBAL_LIST_INIT(reboot_sfx, file2list("config/reboot_sfx.txt")) /world mob = /mob/new_player turf = /turf/open/space/basic @@ -18,7 +16,6 @@ var/list/reboot_sfx = file2list("config/reboot_sfx.txt") if (debug_server) LIBCALL(debug_server, "auxtools_init")() enable_debugging() - internal_tick_usage = 0.2 * world.tick_lag hub_password = "kMZy3U5jJHSiBQjr" #ifdef BYOND_TRACY @@ -49,8 +46,6 @@ var/list/reboot_sfx = file2list("config/reboot_sfx.txt") LoadBans() load_motd() load_tm_message() - load_mode() - loadShuttleInfoDatums() populate_gear_list() initialize_global_regex() @@ -67,8 +62,8 @@ var/list/reboot_sfx = file2list("config/reboot_sfx.txt") // Only do offline sleeping when the server isn't running unit tests or hosting a local dev test sleep_offline = (!running_tests && !testing_locally) - if(!RoleAuthority) - RoleAuthority = new /datum/authority/branch/role() + if(!GLOB.RoleAuthority) + GLOB.RoleAuthority = new /datum/authority/branch/role() to_world(SPAN_DANGER("\b Job setup complete")) initiate_minimap_icons() @@ -99,7 +94,7 @@ var/list/reboot_sfx = file2list("config/reboot_sfx.txt") // If the server's configured for local testing, get everything set up ASAP. // Shamelessly stolen from the test manager's host_tests() proc if(testing_locally) - master_mode = "Extended" + GLOB.master_mode = "Extended" // Wait for the game ticker to initialize while(!SSticker.initialized) @@ -109,9 +104,6 @@ var/list/reboot_sfx = file2list("config/reboot_sfx.txt") SSticker.request_start() return -var/world_topic_spam_protect_ip = "0.0.0.0" -var/world_topic_spam_protect_time = world.timeofday - /proc/start_logging() GLOB.round_id = SSentity_manager.round.id @@ -256,8 +248,8 @@ var/world_topic_spam_protect_time = world.timeofday /world/proc/send_tgs_restart() if(CONFIG_GET(string/new_round_alert_channel) && CONFIG_GET(string/new_round_alert_role_id)) - if(round_statistics) - send2chat("[round_statistics.round_name][GLOB.round_id ? " (Round [GLOB.round_id])" : ""] completed!", CONFIG_GET(string/new_round_alert_channel)) + if(GLOB.round_statistics) + send2chat("[GLOB.round_statistics.round_name][GLOB.round_id ? " (Round [GLOB.round_id])" : ""] completed!", CONFIG_GET(string/new_round_alert_channel)) if(SSmapping.next_map_configs) var/datum/map_config/next_map = SSmapping.next_map_configs[GROUND_MAP] if(next_map) @@ -267,32 +259,20 @@ var/world_topic_spam_protect_time = world.timeofday return /world/proc/send_reboot_sound() - var/reboot_sound = SAFEPICK(reboot_sfx) + var/reboot_sound = SAFEPICK(GLOB.reboot_sfx) if(reboot_sound) var/sound/reboot_sound_ref = sound(reboot_sound) for(var/client/client as anything in GLOB.clients) if(client?.prefs.toggles_sound & SOUND_REBOOT) SEND_SOUND(client, reboot_sound_ref) -/world/proc/load_mode() - var/list/Lines = file2list("data/mode.txt") - if(Lines.len) - if(Lines[1]) - master_mode = Lines[1] - log_misc("Saved mode is '[master_mode]'") - -/world/proc/save_mode(the_mode) - var/F = file("data/mode.txt") - fdel(F) - F << the_mode - /world/proc/load_motd() - join_motd = file2text("config/motd.txt") + GLOB.join_motd = file2text("config/motd.txt") /world/proc/load_tm_message() var/datum/getrev/revdata = GLOB.revdata if(revdata.testmerge.len) - current_tms = revdata.GetTestMergeInfo() + GLOB.current_tms = revdata.GetTestMergeInfo() /world/proc/update_status() //Note: Hub content is limited to 254 characters, including limited HTML/CSS. @@ -310,32 +290,10 @@ var/world_topic_spam_protect_time = world.timeofday world.status = s -#define FAILED_DB_CONNECTION_CUTOFF 1 -var/failed_db_connections = 0 -var/failed_old_db_connections = 0 - -// /hook/startup/proc/connectDB() -// if(!setup_database_connection()) -// world.log << "Your server failed to establish a connection with the feedback database." -// else -// world.log << "Feedback database connection established." -// return 1 - -var/datum/BSQL_Connection/connection -/proc/setup_database_connection() - - if(failed_db_connections > FAILED_DB_CONNECTION_CUTOFF) //If it failed to establish a connection more than 5 times in a row, don't bother attempting to conenct anymore. - return 0 - - - return . - /proc/set_global_view(view_size) - world_view_size = view_size + GLOB.world_view_size = view_size for(var/client/c in GLOB.clients) - c.view = world_view_size - -#undef FAILED_DB_CONNECTION_CUTOFF + c.view = GLOB.world_view_size /proc/give_image_to_client(obj/O, icon_text) var/image/I = image(null, O) diff --git a/code/global.dm b/code/global.dm index e329cbdd00d5..6847fbd2b7fe 100644 --- a/code/global.dm +++ b/code/global.dm @@ -38,135 +38,3 @@ #define AHOLD_IS_ADMIN(ahold) (ahold && (ahold.rights & R_ADMIN)) //items that ask to be called every cycle - -////////////// -var/list/paper_tag_whitelist = list("center","p","div","span","h1","h2","h3","h4","h5","h6","hr","pre", \ - "big","small","font","i","u","b","s","sub","sup","tt","br","hr","ol","ul","li","caption","col", \ - "table","td","th","tr") - -/////////////// - -var/command_name = "Central Command" -var/station_name = "[MAIN_SHIP_NAME]" -var/game_version = "Colonial Marines" -var/game_year = 2182 - -var/going = 1 -var/master_mode = "Distress Signal" - -/// If this is anything but "secret", the secret rotation will forceably choose this mode. -var/secret_force_mode = "secret" - -var/host = null -var/ooc_allowed = 1 -var/looc_allowed = 1 -var/dsay_allowed = 1 -var/dooc_allowed = 1 -var/dlooc_allowed = 0 -var/abandon_allowed = 1 -var/enter_allowed = 1 -var/shuttle_frozen = 0 -var/shuttle_left = 0 -var/midi_playing = 0 -var/heard_midi = 0 -var/total_silenced = 0 - -var/list/admin_log = list() -var/list/asset_log = list() - -var/CELLRATE = 0.006 // multiplier for watts per tick <> cell storage (eg: 0.02 means if there is a load of 1000 watts, 20 units will be taken from a cell per second) - //It's a conversion constant. power_used*CELLRATE = charge_provided, or charge_used/CELLRATE = power_provided -var/CHARGELEVEL = 0.001 // Cap for how fast cells charge, as a percentage-per-tick (0.01 means cellcharge is capped to 1% per second) - -var/VehicleElevatorConsole -var/VehicleGearConsole - -//Spawnpoints. -var/list/fallen_list = list() -/// This is for dogtags placed on crosses- they will show up at the end-round memorial. -var/list/fallen_list_cross = list() -var/list/cardinal = list(NORTH, SOUTH, EAST, WEST) -var/list/diagonals = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST) -var/list/alldirs = list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST) -var/list/reverse_dir = list(2, 1, 3, 8, 10, 9, 11, 4, 6, 5, 7, 12, 14, 13, 15, 32, 34, 33, 35, 40, 42, 41, 43, 36, 38, 37, 39, 44, 46, 45, 47, 16, 18, 17, 19, 24, 26, 25, 27, 20, 22, 21, 23, 28, 30, 29, 31, 48, 50, 49, 51, 56, 58, 57, 59, 52, 54, 53, 55, 60, 62, 61, 63) - -var/list/combatlog = list() -var/list/IClog = list() -var/list/OOClog = list() -var/list/adminlog = list() - -var/Debug = 0 // global debug switch - -var/datum/moduletypes/mods = new() - -var/join_motd = null -var/current_tms - -// nanomanager, the manager for Nano UIs -var/datum/nanomanager/nanomanager = new() - -var/list/BorgWireColorToFlag = RandomBorgWires() -var/list/BorgIndexToFlag -var/list/BorgIndexToWireColor -var/list/BorgWireColorToIndex -var/list/AAlarmWireColorToFlag = RandomAAlarmWires() -var/list/AAlarmIndexToFlag -var/list/AAlarmIndexToWireColor -var/list/AAlarmWireColorToIndex - -//Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam -#define MAX_MESSAGE_LEN 1024 -#define MAX_EMOTE_LEN 256 -#define MAX_PAPER_MESSAGE_LEN 3072 -#define MAX_BOOK_MESSAGE_LEN 9216 -#define MAX_NAME_LEN 26 - -/// 3 minutes in the station. -#define shuttle_time_in_station 3 MINUTES -/// 10 minutes to arrive. -#define shuttle_time_to_arrive 10 MINUTES - - // MySQL configuration - -var/sqladdress = "localhost" -var/sqlport = "3306" -var/sqldb = "cmdb" -var/sqllogin = "root" -var/sqlpass = "" - - - // For FTP requests. (i.e. downloading runtime logs.) - // However it'd be ok to use for accessing attack logs and such too, which are even laggier. -var/fileaccess_timer = 0 - -// Reference list for disposal sort junctions. Filled up by sorting junction's New() -/var/list/tagger_locations = list() - -//added for Xenoarchaeology, might be useful for other stuff -var/list/alphabet_uppercase = list("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z") -var/list/alphabet_lowercase = list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z") - -var/list/greek_letters = list("Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta", "Eta", "Theta", "Iota", "Kappa", "Lambda", "Mu", "Nu", "Xi", "Omnicron", "Pi", "Rho", "Sigma", "Tau", "Upsilon", "Phi", "Chi", "Psi", "Omega") -var/list/nato_phonetic_alphabet = list("Alpha", "Bravo", "Charlie", "Delta", "Echo", "Foxtrot", "Golf", "Hotel", "India", "Juliett", "Kilo", "Lima", "Mike", "November", "Oscar", "Papa", "Quebec", "Romeo", "Sierra", "Tango", "Uniform", "Victor", "Whiskey", "X-Ray", "Yankee", "Zulu") - -//Used for autocall procs on ERT -var/distress_cancel = 0 -var/destroy_cancel = 0 - -// Which lobby art is on display -// This is updated by the lobby art turf when it initializes -var/displayed_lobby_art = -1 - -// Last global ID that was assigned to a mob (for round recording purposes) -var/last_mob_gid = 0 - -// be careful messing with this. the section names are hardcoded here, while defines are used everywhere else -// see the big commented block for an explanation -var/list/almayer_ship_sections = list( - "Upper deck Foreship", - "Upper deck Midship", - "Upper deck Aftship", - "Lower deck Foreship", - "Lower deck Midship", - "Lower deck Aftship" -) diff --git a/code/js/byjax.dm b/code/js/byjax.dm deleted file mode 100644 index 8e196ef013f4..000000000000 --- a/code/js/byjax.dm +++ /dev/null @@ -1,50 +0,0 @@ -//this function places received data into element with specified id. -var/const/js_byjax = {" - -function replaceContent() { - var args = Array.prototype.slice.call(arguments); - var id = args\[0\]; - var content = args\[1\]; - var callback = null; - if(args\[2\]){ - callback = args\[2\]; - if(args\[3\]){ - args = args.slice(3); - } - } - var parent = document.getElementById(id); - if(typeof(parent)!=='undefined' && parent!=null){ - parent.innerHTML = content?content:''; - } - if(callback && window\[callback\]){ - window\[callback\].apply(null,args); - } -} -"} - -/* -sends data to control_id:replaceContent - -receiver - mob -control_id - window id (for windows opened with browse(), it'll be "windowname.browser") -target_element - HTML element id -new_content - HTML content -callback - js function that will be called after the data is sent -callback_args - arguments for callback function - -Be sure to include required js functions in your page, or it'll raise an exception. -*/ -/proc/send_byjax(receiver, control_id, target_element, new_content=null, callback=null, list/callback_args=null) - if(receiver && target_element && control_id) // && winexists(receiver, control_id)) - var/list/argums = list(target_element, new_content) - if(callback) - argums += callback - if(callback_args) - argums += callback_args - argums = list2params(argums) -/* if(callback_args) - argums += "&[list2params(callback_args)]" -*/ - receiver << output(argums,"[control_id]:replaceContent") - return - diff --git a/code/js/menus.dm b/code/js/menus.dm deleted file mode 100644 index 0064522c2f81..000000000000 --- a/code/js/menus.dm +++ /dev/null @@ -1,37 +0,0 @@ -var/const/js_dropdowns = {" -function dropdowns() { - var divs = document.getElementsByTagName('div'); - var headers = new Array(); - var links = new Array(); - for(var i=0;i=0) { - elem.className = elem.className.replace('visible','hidden'); - this.className = this.className.replace('open','closed'); - this.innerHTML = this.innerHTML.replace('-','+'); - } - else { - elem.className = elem.className.replace('hidden','visible'); - this.className = this.className.replace('closed','open'); - this.innerHTML = this.innerHTML.replace('+','-'); - } - return false; - } - })(links\[i\]); - } - } -} -"} diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index bf6d8e261ab3..94f40629fc6a 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -18,7 +18,7 @@ return list("reason"="guest", "desc"="\nReason: Guests not allowed. Please sign in with a byond account.") WAIT_DB_READY - if(admin_datums[ckey] && (admin_datums[ckey].rights & R_MOD)) + if(GLOB.admin_datums[ckey] && (GLOB.admin_datums[ckey].rights & R_MOD)) return ..() if(CONFIG_GET(number/limit_players) && CONFIG_GET(number/limit_players) < GLOB.clients.len) diff --git a/code/modules/admin/NewBan.dm b/code/modules/admin/NewBan.dm index b64b1e4682fd..7dca354129ff 100644 --- a/code/modules/admin/NewBan.dm +++ b/code/modules/admin/NewBan.dm @@ -1,75 +1,75 @@ -var/CMinutes = null -var/savefile/Banlist +GLOBAL_VAR(CMinutes) +GLOBAL_DATUM(Banlist, /savefile) /proc/CheckBan(ckey, id, address) - if(!Banlist) // if Banlist cannot be located for some reason + if(!GLOB.Banlist) // if GLOB.Banlist cannot be located for some reason LoadBans() // try to load the bans - if(!Banlist) // uh oh, can't find bans! + if(!GLOB.Banlist) // uh oh, can't find bans! return 0 // ABORT ABORT ABORT . = list() var/appeal if(CONFIG_GET(string/banappeals)) appeal = "\nFor more information on your ban, or to appeal, head to [CONFIG_GET(string/banappeals)]" - Banlist.cd = "/base" - if( "[ckey][id]" in Banlist.dir ) - Banlist.cd = "[ckey][id]" - if (Banlist["temp"]) - if (!GetExp(Banlist["minutes"])) + GLOB.Banlist.cd = "/base" + if( "[ckey][id]" in GLOB.Banlist.dir ) + GLOB.Banlist.cd = "[ckey][id]" + if (GLOB.Banlist["temp"]) + if (!GetExp(GLOB.Banlist["minutes"])) ClearTempbans() return 0 else - .["desc"] = "\nReason: [Banlist["reason"]]\nExpires: [GetExp(Banlist["minutes"])]\nBy: [Banlist["bannedby"]][appeal]" + .["desc"] = "\nReason: [GLOB.Banlist["reason"]]\nExpires: [GetExp(GLOB.Banlist["minutes"])]\nBy: [GLOB.Banlist["bannedby"]][appeal]" else - Banlist.cd = "/base/[ckey][id]" - .["desc"] = "\nReason: [Banlist["reason"]]\nExpires: PERMENANT\nBy: [Banlist["bannedby"]][appeal]" + GLOB.Banlist.cd = "/base/[ckey][id]" + .["desc"] = "\nReason: [GLOB.Banlist["reason"]]\nExpires: PERMENANT\nBy: [GLOB.Banlist["bannedby"]][appeal]" .["reason"] = "ckey/id" return . else - for (var/A in Banlist.dir) - Banlist.cd = "/base/[A]" + for (var/A in GLOB.Banlist.dir) + GLOB.Banlist.cd = "/base/[A]" var/matches - if( ckey == Banlist["key"] ) + if( ckey == GLOB.Banlist["key"] ) matches += "ckey" - if( id == Banlist["id"] ) + if( id == GLOB.Banlist["id"] ) if(matches) matches += "/" matches += "id" - if( address == Banlist["ip"] ) + if( address == GLOB.Banlist["ip"] ) if(matches) matches += "/" matches += "ip" if(matches) - if(Banlist["temp"]) - if (!GetExp(Banlist["minutes"])) + if(GLOB.Banlist["temp"]) + if (!GetExp(GLOB.Banlist["minutes"])) ClearTempbans() return 0 else - .["desc"] = "\nReason: [Banlist["reason"]]\nExpires: [GetExp(Banlist["minutes"])]\nBy: [Banlist["bannedby"]][appeal]" + .["desc"] = "\nReason: [GLOB.Banlist["reason"]]\nExpires: [GetExp(GLOB.Banlist["minutes"])]\nBy: [GLOB.Banlist["bannedby"]][appeal]" else - .["desc"] = "\nReason: [Banlist["reason"]]\nExpires: PERMENANT\nBy: [Banlist["bannedby"]][appeal]" + .["desc"] = "\nReason: [GLOB.Banlist["reason"]]\nExpires: PERMENANT\nBy: [GLOB.Banlist["bannedby"]][appeal]" .["reason"] = matches return . return 0 /proc/UpdateTime() //No idea why i made this a proc. - CMinutes = (world.realtime / 10) / 60 + GLOB.CMinutes = (world.realtime / 10) / 60 return 1 /proc/LoadBans() - Banlist = new("data/banlist.bdb") - log_admin("Loading Banlist") + GLOB.Banlist = new("data/banlist.bdb") + log_admin("Loading GLOB.Banlist") - if (!length(Banlist.dir)) log_admin("Banlist is empty.") + if (!length(GLOB.Banlist.dir)) log_admin("GLOB.Banlist is empty.") - if (!Banlist.dir.Find("base")) - log_admin("Banlist missing base dir.") - Banlist.dir.Add("base") - Banlist.cd = "/base" - else if (Banlist.dir.Find("base")) - Banlist.cd = "/base" + if (!GLOB.Banlist.dir.Find("base")) + log_admin("GLOB.Banlist missing base dir.") + GLOB.Banlist.dir.Add("base") + GLOB.Banlist.cd = "/base" + else if (GLOB.Banlist.dir.Find("base")) + GLOB.Banlist.cd = "/base" ClearTempbans() return 1 @@ -77,64 +77,64 @@ var/savefile/Banlist /proc/ClearTempbans() UpdateTime() - Banlist.cd = "/base" - for (var/A in Banlist.dir) - Banlist.cd = "/base/[A]" - if (!Banlist["key"] || !Banlist["id"]) + GLOB.Banlist.cd = "/base" + for (var/A in GLOB.Banlist.dir) + GLOB.Banlist.cd = "/base/[A]" + if (!GLOB.Banlist["key"] || !GLOB.Banlist["id"]) RemoveBan(A) log_admin("Invalid Ban.") message_admins("Invalid Ban.") continue - if (!Banlist["temp"]) continue - if (CMinutes >= Banlist["minutes"]) RemoveBan(A) + if (!GLOB.Banlist["temp"]) continue + if (GLOB.CMinutes >= GLOB.Banlist["minutes"]) RemoveBan(A) return 1 /proc/AddBan(ckey, computerid, reason, bannedby, temp, minutes, address) - if(!Banlist) // if Banlist cannot be located for some reason + if(!GLOB.Banlist) // if GLOB.Banlist cannot be located for some reason LoadBans() // try to load the bans - if(!Banlist) // uh oh, can't find bans! + if(!GLOB.Banlist) // uh oh, can't find bans! return 0 // ABORT ABORT ABORT var/bantimestamp if (temp) UpdateTime() - bantimestamp = CMinutes + minutes + bantimestamp = GLOB.CMinutes + minutes - Banlist.cd = "/base" - if ( Banlist.dir.Find("[ckey][computerid]")) + GLOB.Banlist.cd = "/base" + if ( GLOB.Banlist.dir.Find("[ckey][computerid]")) RemoveBan("[ckey][computerid]") //have to remove dirs before processing - Banlist.dir.Add("[ckey][computerid]") - Banlist.cd = "/base/[ckey][computerid]" - Banlist["key"] << ckey - Banlist["id"] << computerid - Banlist["ip"] << address - Banlist["reason"] << reason - Banlist["bannedby"] << bannedby - Banlist["temp"] << temp + GLOB.Banlist.dir.Add("[ckey][computerid]") + GLOB.Banlist.cd = "/base/[ckey][computerid]" + GLOB.Banlist["key"] << ckey + GLOB.Banlist["id"] << computerid + GLOB.Banlist["ip"] << address + GLOB.Banlist["reason"] << reason + GLOB.Banlist["bannedby"] << bannedby + GLOB.Banlist["temp"] << temp if (temp) - Banlist["minutes"] << bantimestamp + GLOB.Banlist["minutes"] << bantimestamp return 1 /proc/RemoveBan(foldername) - if(!Banlist) // if Banlist cannot be located for some reason + if(!GLOB.Banlist) // if GLOB.Banlist cannot be located for some reason LoadBans() // try to load the bans - if(!Banlist) // uh oh, can't find bans! + if(!GLOB.Banlist) // uh oh, can't find bans! return 0 // ABORT ABORT ABORT var/key var/id - Banlist.cd = "/base/[foldername]" - Banlist["key"] >> key - Banlist["id"] >> id - Banlist.cd = "/base" + GLOB.Banlist.cd = "/base/[foldername]" + GLOB.Banlist["key"] >> key + GLOB.Banlist["id"] >> id + GLOB.Banlist.cd = "/base" - if (!Banlist.dir.Remove(foldername)) return 0 + if (!GLOB.Banlist.dir.Remove(foldername)) return 0 if(!usr) log_admin("Ban Expired: [key]") @@ -143,18 +143,18 @@ var/savefile/Banlist ban_unban_log_save("[key_name_admin(usr)] unbanned [key]") log_admin("[key_name_admin(usr)] unbanned [key]") message_admins("[key_name_admin(usr)] unbanned: [key]") - for (var/A in Banlist.dir) - Banlist.cd = "/base/[A]" - if (key == Banlist["key"] /*|| id == Banlist["id"]*/) - Banlist.cd = "/base" - Banlist.dir.Remove(A) + for (var/A in GLOB.Banlist.dir) + GLOB.Banlist.cd = "/base/[A]" + if (key == GLOB.Banlist["key"] /*|| id == GLOB.Banlist["id"]*/) + GLOB.Banlist.cd = "/base" + GLOB.Banlist.dir.Remove(A) continue return 1 /proc/GetExp(minutes as num) UpdateTime() - var/exp = minutes - CMinutes + var/exp = minutes - GLOB.CMinutes if (exp <= 0) return 0 else @@ -202,27 +202,27 @@ var/savefile/Banlist var/a = pick(1,0) var/b = pick(1,0) if(b) - Banlist.cd = "/base" - Banlist.dir.Add("trash[i]trashid[i]") - Banlist.cd = "/base/trash[i]trashid[i]" - Banlist["key"] << "trash[i]" + GLOB.Banlist.cd = "/base" + GLOB.Banlist.dir.Add("trash[i]trashid[i]") + GLOB.Banlist.cd = "/base/trash[i]trashid[i]" + GLOB.Banlist["key"] << "trash[i]" else - Banlist.cd = "/base" - Banlist.dir.Add("[last]trashid[i]") - Banlist.cd = "/base/[last]trashid[i]" - Banlist["key"] << last - Banlist["id"] << "trashid[i]" - Banlist["reason"] << "Trashban[i]." - Banlist["temp"] << a - Banlist["minutes"] << CMinutes + rand(1,2000) - Banlist["bannedby"] << "trashmin" + GLOB.Banlist.cd = "/base" + GLOB.Banlist.dir.Add("[last]trashid[i]") + GLOB.Banlist.cd = "/base/[last]trashid[i]" + GLOB.Banlist["key"] << last + GLOB.Banlist["id"] << "trashid[i]" + GLOB.Banlist["reason"] << "Trashban[i]." + GLOB.Banlist["temp"] << a + GLOB.Banlist["minutes"] << GLOB.CMinutes + rand(1,2000) + GLOB.Banlist["bannedby"] << "trashmin" last = "trash[i]" - Banlist.cd = "/base" + GLOB.Banlist.cd = "/base" /proc/ClearAllBans() - Banlist.cd = "/base" - for (var/A in Banlist.dir) + GLOB.Banlist.cd = "/base" + for (var/A in GLOB.Banlist.dir) RemoveBan(A) /client/proc/cmd_admin_do_ban(mob/M) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 38b63b94570c..fe95affaffd2 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -121,10 +121,10 @@ var/t //text to show in the window var/u //unban button href arg var/dat = "" - for(r in jobban_keylist) - L = jobban_keylist[r] + for(r in GLOB.jobban_keylist) + L = GLOB.jobban_keylist[r] for(c in L) - i = jobban_keylist[r][c] //These are already strings, as you're iterating through them. Anyway, establish jobban. + i = GLOB.jobban_keylist[r][c] //These are already strings, as you're iterating through them. Anyway, establish jobban. t = "[c] - [r] ## [i]" u = "[c] - [r]" dat += "" @@ -138,8 +138,6 @@ var/dat = {" Change Game Mode
    "} - if(master_mode == "secret") - dat += "(Force Secret Mode)
    " dat += {"
    diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index cbeb1169c807..5bb9692b0368 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -1,8 +1,8 @@ -var/list/admin_ranks = list() //list of all ranks with associated rights +GLOBAL_LIST_EMPTY(admin_ranks) //list of all ranks with associated rights //load our rank - > rights associations /proc/load_admin_ranks() - admin_ranks.Cut() + GLOB.admin_ranks.Cut() var/previous_rights = 0 @@ -46,19 +46,19 @@ var/list/admin_ranks = list() //list of all ranks with associated rights if("host") rights |= RL_HOST if("everything") rights |= RL_EVERYTHING - admin_ranks[rank] = rights + GLOB.admin_ranks[rank] = rights previous_rights = rights #ifdef TESTING var/msg = "Permission Sets Built:\n" - for(var/rank in admin_ranks) - msg += "\t[rank] - [admin_ranks[rank]]\n" + for(var/rank in GLOB.admin_ranks) + msg += "\t[rank] - [GLOB.admin_ranks[rank]]\n" testing(msg) #endif /proc/load_admins() //clear the datums references - admin_datums.Cut() + GLOB.admin_datums.Cut() for(var/client/C in GLOB.admins) C.remove_admin_verbs() C.admin_holder = null @@ -78,9 +78,9 @@ var/list/admin_ranks = list() //list of all ranks with associated rights #ifdef TESTING var/msg = "Admins Built:\n" - for(var/ckey in admin_datums) + for(var/ckey in GLOB.admin_datums) var/rank - var/datum/admins/D = admin_datums[ckey] + var/datum/admins/D = GLOB.admin_datums[ckey] if(D) rank = D.rank msg += "\t[ckey] - [rank]\n" testing(msg) @@ -115,7 +115,7 @@ var/list/admin_ranks = list() //list of all ranks with associated rights return //load permissions associated with this rank - var/rights = admin_ranks[rank] + var/rights = GLOB.admin_ranks[rank] //create the admin datum and store it for later use var/datum/admins/D = new /datum/admins(rank, rights, ckey, extra_titles) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 7d9127313094..07d7d4e89623 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -1,5 +1,5 @@ //admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless -var/list/admin_verbs_default = list( +GLOBAL_LIST_INIT(admin_verbs_default, list( /datum/admins/proc/show_player_panel, /*shows an interface for individual players, with various links (links require additional flags*/ /client/proc/toggleadminhelpsound, /*toggles whether we hear a sound when adminhelps/PMs are used*/ /client/proc/becomelarva, /*lets you forgo your larva protection as staff member. */ @@ -36,6 +36,7 @@ var/list/admin_verbs_default = list( /client/proc/togglenichelogs, /datum/admins/proc/display_tags, /datum/admins/proc/player_notes_show, + /datum/admins/proc/check_ckey, /datum/admins/proc/toggleooc, /*toggles ooc on/off for everyone*/ /datum/admins/proc/togglelooc, /*toggles ooc on/off for everyone*/ /datum/admins/proc/toggledsay, /*toggles dsay on/off for everyone*/ @@ -69,9 +70,10 @@ var/list/admin_verbs_default = list( /client/proc/toggle_ares_ping, /client/proc/cmd_admin_say, /*staff-only ooc chat*/ /client/proc/cmd_mod_say, /* alternate way of typing asay, no different than cmd_admin_say */ - ) + /client/proc/cmd_admin_tacmaps_panel, + )) -var/list/admin_verbs_admin = list( +GLOBAL_LIST_INIT(admin_verbs_admin, list( /datum/admins/proc/togglejoin, /*toggles whether people can join the current game*/ /datum/admins/proc/announce, /*priority announce something to all clients.*/ /datum/admins/proc/view_game_log, /*shows the server game log (diary) for this round*/ @@ -91,22 +93,20 @@ var/list/admin_verbs_admin = list( /client/proc/force_teleporter, /client/proc/matrix_editor, /datum/admins/proc/open_shuttlepanel -) +)) -var/list/admin_verbs_ban = list( +GLOBAL_LIST_INIT(admin_verbs_ban, list( /client/proc/unban_panel // /client/proc/jobbans // Disabled temporarily due to 15-30 second lag spikes. Don't forget the comma in the line above when uncommenting this! -) +)) -var/list/admin_verbs_sounds = list( - /client/proc/play_web_sound, - /client/proc/play_sound, - /client/proc/stop_web_sound, - /client/proc/stop_sound, +GLOBAL_LIST_INIT(admin_verbs_sounds, list( + /client/proc/play_admin_sound, + /client/proc/stop_admin_sound, /client/proc/cmd_admin_vox_panel -) +)) -var/list/admin_verbs_minor_event = list( +GLOBAL_LIST_INIT(admin_verbs_minor_event, list( /client/proc/cmd_admin_change_custom_event, /datum/admins/proc/admin_force_distress, /datum/admins/proc/admin_force_ERT_shuttle, @@ -137,9 +137,9 @@ var/list/admin_verbs_minor_event = list( /client/proc/admin_biohazard_alert, /client/proc/toggle_hardcore_perma, /client/proc/toggle_bypass_joe_restriction, -) +)) -var/list/admin_verbs_major_event = list( +GLOBAL_LIST_INIT(admin_verbs_major_event, list( /client/proc/enable_event_mob_verbs, /client/proc/cmd_admin_dress_all, /client/proc/free_all_mobs_in_view, @@ -158,16 +158,16 @@ var/list/admin_verbs_major_event = list( /client/proc/change_taskbar_icon, /client/proc/change_weather, /client/proc/admin_blurb -) +)) -var/list/admin_verbs_spawn = list( +GLOBAL_LIST_INIT(admin_verbs_spawn, list( /datum/admins/proc/spawn_atom, /client/proc/game_panel, /client/proc/create_humans, /client/proc/create_xenos -) +)) -var/list/admin_verbs_server = list( +GLOBAL_LIST_INIT(admin_verbs_server, list( /datum/admins/proc/startnow, /datum/admins/proc/restart, /datum/admins/proc/delay, @@ -181,9 +181,9 @@ var/list/admin_verbs_server = list( /client/proc/cmd_debug_del_all, /datum/admins/proc/togglejoin, /client/proc/toggle_cdn, -) +)) -var/list/admin_verbs_debug = list( +GLOBAL_LIST_INIT(admin_verbs_debug, list( /client/proc/debug_role_authority, /client/proc/cmd_debug_make_powernets, /client/proc/cmd_debug_list_processing_items, @@ -215,19 +215,19 @@ var/list/admin_verbs_debug = list( /datum/admins/proc/view_href_log, /*shows the server HREF log for this round*/ /datum/admins/proc/view_tgui_log, /*shows the server TGUI log for this round*/ /client/proc/admin_blurb, -) +)) -var/list/admin_verbs_debug_advanced = list( +GLOBAL_LIST_INIT(admin_verbs_debug_advanced, list( /client/proc/callproc_datum, /client/proc/callproc, /client/proc/SDQL2_query, -) +)) -var/list/clan_verbs = list( +GLOBAL_LIST_INIT(clan_verbs, list( /client/proc/usr_create_new_clan -) +)) -var/list/debug_verbs = list( +GLOBAL_LIST_INIT(debug_verbs, list( /client/proc/Cell, /client/proc/cmd_assume_direct_control, /client/proc/ticklag, @@ -236,22 +236,22 @@ var/list/debug_verbs = list( /client/proc/view_power_update_stats_machines, /client/proc/toggle_power_update_profiling, /client/proc/nanomapgen_DumpImage, -) +)) -var/list/admin_verbs_possess = list( +GLOBAL_LIST_INIT(admin_verbs_possess, list( /client/proc/possess, /client/proc/release -) +)) -var/list/admin_verbs_permissions = list( +GLOBAL_LIST_INIT(admin_verbs_permissions, list( /client/proc/ToRban -) +)) -var/list/admin_verbs_color = list( +GLOBAL_LIST_INIT(admin_verbs_color, list( /client/proc/set_ooc_color_self -) +)) -var/list/admin_mob_event_verbs_hideable = list( +GLOBAL_LIST_INIT(admin_mob_event_verbs_hideable, list( /client/proc/hide_event_mob_verbs, /client/proc/cmd_admin_select_mob_rank, /client/proc/cmd_admin_dress, @@ -266,10 +266,10 @@ var/list/admin_mob_event_verbs_hideable = list( /client/proc/cmd_admin_grantfullaccess, /client/proc/cmd_admin_grantallskills, /client/proc/admin_create_account -) +)) //verbs which can be hidden - needs work -var/list/admin_verbs_hideable = list( +GLOBAL_LIST_INIT(admin_verbs_hideable, list( /client/proc/release, /client/proc/possess, /client/proc/callproc_datum, @@ -288,9 +288,9 @@ var/list/admin_verbs_hideable = list( /datum/admins/proc/togglesleep, /client/proc/debug_variables, /client/proc/debug_global_variables -) +)) -var/list/admin_verbs_teleport = list( +GLOBAL_LIST_INIT(admin_verbs_teleport, list( /client/proc/teleport_panel, /*teleport panel, for jumping to things/places and getting things/places */ /client/proc/jumptocoord, /client/proc/jumptooffsetcoord, @@ -302,75 +302,75 @@ var/list/admin_verbs_teleport = list( /client/proc/Getmob, /client/proc/Getkey, /client/proc/toggle_noclip -) +)) -var/list/roundstart_mod_verbs = list( +GLOBAL_LIST_INIT(roundstart_mod_verbs, list( /client/proc/toggle_ob_spawn -) +)) /client/proc/add_admin_verbs() if(!admin_holder) return if(CLIENT_IS_STAFF(src)) - add_verb(src, admin_verbs_default) + add_verb(src, GLOB.admin_verbs_default) if(CLIENT_HAS_RIGHTS(src, R_MOD)) - add_verb(src, admin_verbs_ban) - add_verb(src, admin_verbs_teleport) + add_verb(src, GLOB.admin_verbs_ban) + add_verb(src, GLOB.admin_verbs_teleport) if(CLIENT_HAS_RIGHTS(src, R_EVENT)) - add_verb(src, admin_verbs_minor_event) + add_verb(src, GLOB.admin_verbs_minor_event) if(CLIENT_HAS_RIGHTS(src, R_ADMIN)) - add_verb(src, admin_verbs_admin) - add_verb(src, admin_verbs_major_event) + 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) if(CLIENT_HAS_RIGHTS(src, R_BUILDMODE)) add_verb(src, /client/proc/togglebuildmodeself) if(CLIENT_HAS_RIGHTS(src, R_SERVER)) - add_verb(src, admin_verbs_server) + add_verb(src, GLOB.admin_verbs_server) if(CLIENT_HAS_RIGHTS(src, R_DEBUG)) - add_verb(src, admin_verbs_debug) + add_verb(src, GLOB.admin_verbs_debug) if(!CONFIG_GET(flag/debugparanoid) || CLIENT_HAS_RIGHTS(src, R_ADMIN)) - add_verb(src, admin_verbs_debug_advanced) // Right now it's just callproc but we can easily add others later on. + add_verb(src, GLOB.admin_verbs_debug_advanced) // Right now it's just callproc but we can easily add others later on. if(CLIENT_HAS_RIGHTS(src, R_POSSESS)) - add_verb(src, admin_verbs_possess) + add_verb(src, GLOB.admin_verbs_possess) if(CLIENT_HAS_RIGHTS(src, R_PERMISSIONS)) - add_verb(src, admin_verbs_permissions) + add_verb(src, GLOB.admin_verbs_permissions) if(CLIENT_HAS_RIGHTS(src, R_COLOR)) - add_verb(src, admin_verbs_color) + add_verb(src, GLOB.admin_verbs_color) if(CLIENT_HAS_RIGHTS(src, R_SOUNDS)) - add_verb(src, admin_verbs_sounds) + add_verb(src, GLOB.admin_verbs_sounds) if(CLIENT_HAS_RIGHTS(src, R_SPAWN)) - add_verb(src, admin_verbs_spawn) - if(RoleAuthority && (RoleAuthority.roles_whitelist[ckey] & WHITELIST_YAUTJA_LEADER)) - add_verb(src, clan_verbs) + add_verb(src, GLOB.admin_verbs_spawn) + if(GLOB.RoleAuthority && (GLOB.RoleAuthority.roles_whitelist[ckey] & WHITELIST_YAUTJA_LEADER)) + add_verb(src, GLOB.clan_verbs) /client/proc/add_admin_whitelists() if(CLIENT_IS_MENTOR(src)) - RoleAuthority.roles_whitelist[ckey] |= WHITELIST_MENTOR + GLOB.RoleAuthority.roles_whitelist[ckey] |= WHITELIST_MENTOR if(CLIENT_IS_STAFF(src)) - RoleAuthority.roles_whitelist[ckey] |= WHITELIST_JOE + GLOB.RoleAuthority.roles_whitelist[ckey] |= WHITELIST_JOE /client/proc/remove_admin_verbs() remove_verb(src, list( - admin_verbs_default, + GLOB.admin_verbs_default, /client/proc/togglebuildmodeself, - admin_verbs_admin, - admin_verbs_ban, - admin_verbs_minor_event, - admin_verbs_major_event, - admin_verbs_server, - admin_verbs_debug, - admin_verbs_debug_advanced, - admin_verbs_possess, - admin_verbs_permissions, - admin_verbs_color, - admin_verbs_sounds, - admin_verbs_spawn, - admin_verbs_teleport, - admin_mob_event_verbs_hideable, - admin_verbs_hideable, - debug_verbs, + GLOB.admin_verbs_admin, + GLOB.admin_verbs_ban, + GLOB.admin_verbs_minor_event, + GLOB.admin_verbs_major_event, + GLOB.admin_verbs_server, + GLOB.admin_verbs_debug, + GLOB.admin_verbs_debug_advanced, + GLOB.admin_verbs_possess, + GLOB.admin_verbs_permissions, + GLOB.admin_verbs_color, + GLOB.admin_verbs_sounds, + GLOB.admin_verbs_spawn, + GLOB.admin_verbs_teleport, + GLOB.admin_mob_event_verbs_hideable, + GLOB.admin_verbs_hideable, + GLOB.debug_verbs, )) /client/proc/jobbans() @@ -405,7 +405,7 @@ var/list/roundstart_mod_verbs = list( if(!check_rights(R_ADMIN)) return if(!warned_ckey || !istext(warned_ckey)) return - if(warned_ckey in admin_datums) + if(warned_ckey in GLOB.admin_datums) to_chat(usr, "Error: warn(): You can't warn admins.") return @@ -436,7 +436,7 @@ var/list/roundstart_mod_verbs = list( set name = "Give Disease (old)" set desc = "Gives a (tg-style) Disease to a mob." var/list/disease_names = list() - for(var/v in diseases) + for(var/v in GLOB.diseases) disease_names.Add(copytext("[v]", 16, 0)) var/datum/disease/D = tgui_input_list(usr, "Choose the disease to give to that guy", "ACHOO", disease_names) if(!D) return diff --git a/code/modules/admin/banjob.dm b/code/modules/admin/banjob.dm index 18f06e79a66a..13c3b4664a15 100644 --- a/code/modules/admin/banjob.dm +++ b/code/modules/admin/banjob.dm @@ -7,23 +7,23 @@ won't recognize the older one, as an example. */ -var/jobban_runonce // Updates legacy bans with new info -var/jobban_keylist[0] //to store the keys & ranks +GLOBAL_VAR(jobban_runonce) // Updates legacy bans with new info +GLOBAL_LIST_EMPTY(jobban_keylist) /proc/check_jobban_path(X) . = ckey(X) - if(!islist(jobban_keylist[.])) //If it's not a list, we're in trouble. - jobban_keylist[.] = list() + if(!islist(GLOB.jobban_keylist[.])) //If it's not a list, we're in trouble. + GLOB.jobban_keylist[.] = list() /proc/jobban_fullban(mob/M, rank, reason) if (!M || !M.ckey) return rank = check_jobban_path(rank) - jobban_keylist[rank][M.ckey] = reason + GLOB.jobban_keylist[rank][M.ckey] = reason /proc/jobban_client_fullban(ckey, rank) if (!ckey || !rank) return rank = check_jobban_path(rank) - jobban_keylist[rank][ckey] = "Reason Unspecified" + GLOB.jobban_keylist[rank][ckey] = "Reason Unspecified" //returns a reason if M is banned from rank, returns 0 otherwise /proc/jobban_isbanned(mob/M, rank, datum/entity/player/P = null) @@ -49,17 +49,17 @@ var/jobban_keylist[0] //to store the keys & ranks /proc/jobban_loadbanfile() var/savefile/S=new("data/job_new.ban") - S["new_bans"] >> jobban_keylist + S["new_bans"] >> GLOB.jobban_keylist log_admin("Loading jobban_rank") - S["runonce"] >> jobban_runonce + S["runonce"] >> GLOB.jobban_runonce - if (!length(jobban_keylist)) - jobban_keylist=list() + if (!length(GLOB.jobban_keylist)) + GLOB.jobban_keylist=list() log_admin("jobban_keylist was empty") /proc/jobban_savebanfile() var/savefile/S=new("data/job_new.ban") - S["new_bans"] << jobban_keylist + S["new_bans"] << GLOB.jobban_keylist /proc/jobban_unban(mob/M, rank) jobban_remove("[M.ckey] - [ckey(rank)]") @@ -70,7 +70,7 @@ var/jobban_keylist[0] //to store the keys & ranks /proc/jobban_remove(X) var/regex/r1 = new("(.*) - (.*)") if(r1.Find(X)) - var/L[] = jobban_keylist[r1.group[2]] + var/L[] = GLOB.jobban_keylist[r1.group[2]] L.Remove(r1.group[1]) return 1 @@ -89,7 +89,7 @@ var/jobban_keylist[0] //to store the keys & ranks if(!M.ckey) //sanity to_chat(usr, "This mob has no ckey") return - if(!RoleAuthority) + if(!GLOB.RoleAuthority) to_chat(usr, "The Role Authority is not set up!") return @@ -109,31 +109,31 @@ var/jobban_keylist[0] //to store the keys & ranks WARNING!*/ //Regular jobs //Command (Blue) - jobs += generate_job_ban_list(M, P, ROLES_CIC, "CIC", "ddddff") + jobs += generate_job_ban_list(M, P, GLOB.ROLES_CIC, "CIC", "ddddff") jobs += "
    " // SUPPORT - jobs += generate_job_ban_list(M, P, ROLES_AUXIL_SUPPORT, "Support", "ccccff") + jobs += generate_job_ban_list(M, P, GLOB.ROLES_AUXIL_SUPPORT, "Support", "ccccff") jobs += "
    " // MPs - jobs += generate_job_ban_list(M, P, ROLES_POLICE, "Police", "ffdddd") + jobs += generate_job_ban_list(M, P, GLOB.ROLES_POLICE, "Police", "ffdddd") jobs += "
    " //Engineering (Yellow) - jobs += generate_job_ban_list(M, P, ROLES_ENGINEERING, "Engineering", "fff5cc") + jobs += generate_job_ban_list(M, P, GLOB.ROLES_ENGINEERING, "Engineering", "fff5cc") jobs += "
    " //Cargo (Yellow) //Copy paste, yada, yada. Hopefully Snail can rework this in the future. - jobs += generate_job_ban_list(M, P, ROLES_REQUISITION, "Requisition", "fff5cc") + jobs += generate_job_ban_list(M, P, GLOB.ROLES_REQUISITION, "Requisition", "fff5cc") jobs += "
    " //Medical (White) - jobs += generate_job_ban_list(M, P, ROLES_MEDICAL, "Medical", "ffeef0") + jobs += generate_job_ban_list(M, P, GLOB.ROLES_MEDICAL, "Medical", "ffeef0") jobs += "
    " //Marines - jobs += generate_job_ban_list(M, P, ROLES_MARINES, "Marines", "ffeeee") + jobs += generate_job_ban_list(M, P, GLOB.ROLES_MARINES, "Marines", "ffeeee") jobs += "
    " // MISC - jobs += generate_job_ban_list(M, P, ROLES_MISC, "Misc", "aaee55") + jobs += generate_job_ban_list(M, P, GLOB.ROLES_MISC, "Misc", "aaee55") jobs += "
    " // Xenos (Orange) - jobs += generate_job_ban_list(M, P, ROLES_XENO, "Xenos", "a268b1") + jobs += generate_job_ban_list(M, P, GLOB.ROLES_XENO, "Xenos", "a268b1") jobs += "
    " //Extra (Orange) var/isbanned_dept = jobban_isbanned(M, "Syndicate", P) diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index 644165be0fa0..910bafd50a9b 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -1,4 +1,5 @@ -/var/create_mob_html = null +/datum/admins/var/static/create_mob_html = null + /datum/admins/proc/create_mob(mob/user) if (!create_mob_html) var/mobjs = null @@ -7,4 +8,4 @@ create_mob_html = replacetext(create_mob_html, "null /* object types */", "\"[mobjs]\"") create_mob_html = replacetext(create_mob_html, "/* href token */", RawHrefToken(forceGlobal = TRUE)) - show_browser(user, replacetext(create_mob_html, "/* ref src */", "\ref[src]"), "Create Mob", "create_mob", "size=425x475") + show_browser(user, replacetext(create_mob_html, "/* ref src */", "\ref[src]"), "Create Mob", "create_mob", "size=450x525") diff --git a/code/modules/admin/create_object.dm b/code/modules/admin/create_object.dm index 9d344a1f551c..054fc20aef5e 100644 --- a/code/modules/admin/create_object.dm +++ b/code/modules/admin/create_object.dm @@ -1,4 +1,4 @@ -/var/create_object_html = null +/datum/admins/var/static/create_object_html = null /datum/admins/proc/create_object(mob/user) if (!create_object_html) @@ -8,7 +8,7 @@ create_object_html = replacetext(create_object_html, "null /* object types */", "\"[objectjs]\"") create_object_html = replacetext(create_object_html, "/* href token */", RawHrefToken(forceGlobal = TRUE)) - show_browser(user, replacetext(create_object_html, "/* ref src */", "\ref[src]"), "Create Object", "create_object", "size=425x475") + show_browser(user, replacetext(create_object_html, "/* ref src */", "\ref[src]"), "Create Object", "create_object", "size=450x525") /datum/admins/proc/quick_create_object(mob/user) @@ -46,4 +46,4 @@ quick_create_object_html = replacetext(quick_create_object_html, "null /* object types */", "\"[objectjs]\"") quick_create_object_html = replacetext(quick_create_object_html, "/* href token */", RawHrefToken(forceGlobal = TRUE)) - show_browser(user, replacetext(quick_create_object_html, "/* ref src */", "\ref[src]"), "Quick Create Object", "quick_create_object", "size=425x475") + show_browser(user, replacetext(quick_create_object_html, "/* ref src */", "\ref[src]"), "Quick Create Object", "quick_create_object", "size=450x525") diff --git a/code/modules/admin/create_turf.dm b/code/modules/admin/create_turf.dm index c87034ecfd9f..cc8bd1a5ec77 100644 --- a/code/modules/admin/create_turf.dm +++ b/code/modules/admin/create_turf.dm @@ -1,4 +1,5 @@ -/var/create_turf_html = null +/datum/admins/var/static/create_turf_html = null + /datum/admins/proc/create_turf(mob/user) if (!create_turf_html) var/turfjs = null @@ -7,4 +8,4 @@ create_turf_html = replacetext(create_turf_html, "null /* object types */", "\"[turfjs]\"") create_turf_html = replacetext(create_turf_html, "/* href token */", RawHrefToken(forceGlobal = TRUE)) - show_browser(usr, replacetext(create_turf_html, "/* ref src */", "\ref[src]"), "Create Turf", "create_turf", "size=425x475") + show_browser(usr, replacetext(create_turf_html, "/* ref src */", "\ref[src]"), "Create Turf", "create_turf", "size=450x525") diff --git a/code/modules/admin/fax_templates.dm b/code/modules/admin/fax_templates.dm index 459ab675d3a3..2522acf92b3b 100644 --- a/code/modules/admin/fax_templates.dm +++ b/code/modules/admin/fax_templates.dm @@ -70,7 +70,7 @@ dat += "
    " dat += "

    [fax_header]

    " - dat += "

    [fax_subject] - [time2text(world.realtime, "DD Month")] [game_year]

    " + dat += "

    [fax_subject] - [time2text(world.realtime, "DD Month")] [GLOB.game_year]

    " dat += "
    " dat += "
    " diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index e7559f3aa4fd..e31d372743c5 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -1,4 +1,4 @@ -var/list/datum/admins/admin_datums = list() +GLOBAL_LIST_INIT_TYPED(admin_datums, /datum/admins, list()) GLOBAL_VAR_INIT(href_token, GenerateToken()) GLOBAL_PROTECT(href_token) @@ -35,7 +35,7 @@ GLOBAL_PROTECT(href_token) rank = initial_rank rights = initial_rights href_token = GenerateToken() - admin_datums[ckey] = src + GLOB.admin_datums[ckey] = src extra_titles = new_extra_titles // Letting admins edit their own permission giver is a poor idea @@ -138,8 +138,8 @@ you will have to do something like if(client.admin_holder.rights & R_ADMIN) your return TRUE /client/proc/readmin() - if(admin_datums[ckey]) - admin_datums[ckey].associate(src) + if(GLOB.admin_datums[ckey]) + GLOB.admin_datums[ckey].associate(src) return TRUE /datum/admins/proc/check_for_rights(rights_required) diff --git a/code/modules/admin/player_panel/actions/physical.dm b/code/modules/admin/player_panel/actions/physical.dm index a48f39e81a5e..eb43fe5d2aa8 100644 --- a/code/modules/admin/player_panel/actions/physical.dm +++ b/code/modules/admin/player_panel/actions/physical.dm @@ -90,15 +90,15 @@ if(SKILL_SPEC_SNIPER) set_name = "Sniper Set" - if(set_name && !available_specialist_sets.Find(set_name)) - available_specialist_sets += set_name + if(set_name && !GLOB.available_specialist_sets.Find(set_name)) + GLOB.available_specialist_sets += set_name S.forget_marine_in_squad(H) message_admins("[key_name_admin(user)] sent [key_name_admin(target)] ([H.job]) to cryogenics.") SSticker.mode.latejoin_tally-- //Cryoing someone out removes someone from the Marines, blocking further larva spawns until accounted for //Handle job slot/tater cleanup. - RoleAuthority.free_role(RoleAuthority.roles_for_mode[target.job], TRUE) + GLOB.RoleAuthority.free_role(GLOB.RoleAuthority.roles_for_mode[target.job], TRUE) //Delete them from datacore. var/target_ref = WEAKREF(target) @@ -200,7 +200,7 @@ /datum/player_action/set_squad/act(client/user, mob/living/carbon/human/target, list/params) var/list/squads = list() - for(var/datum/squad/S in RoleAuthority.squads) + for(var/datum/squad/S in GLOB.RoleAuthority.squads) squads[S.name] = S var/selected_squad = tgui_input_list(user, "Select a squad.", "Squad Selection", squads) diff --git a/code/modules/admin/player_panel/player_panel.dm b/code/modules/admin/player_panel/player_panel.dm index e29ea83ef5ce..bead55f994ab 100644 --- a/code/modules/admin/player_panel/player_panel.dm +++ b/code/modules/admin/player_panel/player_panel.dm @@ -389,7 +389,7 @@ dat += "Round Duration: [round(world.time / 36000)]:[add_zero(world.time / 600 % 60, 2)]:[world.time / 100 % 6][world.time / 100 % 10]
    " if(check_rights(R_DEBUG, 0)) - dat += "VV Shuttle Controller

    " + dat += "VV Shuttle Controller

    " if(check_rights(R_MOD, 0)) dat += "Evacuation Goals: " diff --git a/code/modules/admin/tabs/admin_tab.dm b/code/modules/admin/tabs/admin_tab.dm index e0a8c540ea85..8dce41ac8235 100644 --- a/code/modules/admin/tabs/admin_tab.dm +++ b/code/modules/admin/tabs/admin_tab.dm @@ -97,7 +97,7 @@ if(body && !body.key) body.key = "@[key]" //Haaaaaaaack. But the people have spoken. If it breaks; blame adminbus if(body.client) - body.client.change_view(world_view_size) //reset view range to default. + body.client.change_view(GLOB.world_view_size) //reset view range to default. //re-open STUI if(new_STUI) @@ -185,6 +185,29 @@ dat += "" show_browser(usr, dat, "Admin record for [key]", "adminplayerinfo", "size=480x480") +/datum/admins/proc/check_ckey(target_key as text) + set name = "Check CKey" + set category = "Admin" + + var/mob/user = usr + if (!istype(src, /datum/admins)) + src = user.client.admin_holder + if (!istype(src, /datum/admins) || !(rights & R_MOD)) + to_chat(user, "Error: you are not an admin!") + return + target_key = ckey(target_key) + if(!target_key) + to_chat(user, "Error: No key detected!") + return + to_chat(user, SPAN_WARNING("Checking Ckey: [target_key]")) + var/list/keys = analyze_ckey(target_key) + if(!keys) + to_chat(user, SPAN_WARNING("No results for [target_key].")) + return + to_chat(user, SPAN_WARNING("Check CKey Results: [keys.Join(", ")]")) + + log_admin("[key_name(user)] analyzed ckey '[target_key]'") + /datum/admins/proc/sleepall() set name = "Sleep All" set category = "Admin.InView" @@ -383,7 +406,7 @@ set name = "Admin Verbs - Show" set category = "Admin" - add_verb(src, admin_verbs_hideable) + add_verb(src, GLOB.admin_verbs_hideable) remove_verb(src, /client/proc/enable_admin_verbs) if(!(admin_holder.rights & R_DEBUG)) @@ -396,7 +419,7 @@ set name = "Admin Verbs - Hide" set category = "Admin" - remove_verb(src, admin_verbs_hideable) + remove_verb(src, GLOB.admin_verbs_hideable) add_verb(src, /client/proc/enable_admin_verbs) /client/proc/strip_all_in_view() @@ -657,13 +680,13 @@ /proc/set_lz_resin_allowed(allowed = TRUE) if(allowed) - for(var/area/A in all_areas) + for(var/area/A in GLOB.all_areas) if(A.flags_area & AREA_UNWEEDABLE) continue A.is_resin_allowed = TRUE msg_admin_niche("Areas close to landing zones are now weedable.") else - for(var/area/A in all_areas) + for(var/area/A in GLOB.all_areas) if(A.flags_area & AREA_UNWEEDABLE) continue A.is_resin_allowed = initial(A.is_resin_allowed) diff --git a/code/modules/admin/tabs/debug_tab.dm b/code/modules/admin/tabs/debug_tab.dm index d8187abe3714..df11917f087a 100644 --- a/code/modules/admin/tabs/debug_tab.dm +++ b/code/modules/admin/tabs/debug_tab.dm @@ -5,7 +5,7 @@ if(!check_rights(R_DEBUG)) return - add_verb(src, debug_verbs) + add_verb(src, GLOB.debug_verbs) remove_verb(src, /client/proc/enable_debug_verbs) /client/proc/hide_debug_verbs() @@ -15,7 +15,7 @@ if(!check_rights(R_DEBUG)) return - remove_verb(src, debug_verbs) + remove_verb(src, GLOB.debug_verbs) add_verb(src, /client/proc/enable_debug_verbs) /client/proc/enter_tree() @@ -81,8 +81,8 @@ set name = "Reset Intel Data Tab" if(tgui_alert(src, "Clear the data tab?", "Confirm", list("Yes", "No"), 10 SECONDS) == "Yes") - for(var/datum/cm_objective/Objective in intel_system.oms.disks) - intel_system.oms.disks -= Objective + for(var/datum/cm_objective/Objective in GLOB.intel_system.oms.disks) + GLOB.intel_system.oms.disks -= Objective /client/proc/check_round_statistics() set category = "Debug" @@ -90,7 +90,7 @@ if(!check_rights(R_ADMIN|R_DEBUG)) return - debug_variables(round_statistics) + debug_variables(GLOB.round_statistics) /client/proc/cmd_admin_delete(atom/O as obj|mob|turf in world) set category = "Debug" @@ -165,10 +165,10 @@ set name = "Reload Whitelist" set category = "Debug" if(alert("Are you sure you want to do this?",, "Yes", "No") != "Yes") return - if(!check_rights(R_SERVER) || !RoleAuthority) return + if(!check_rights(R_SERVER) || !GLOB.RoleAuthority) return message_admins("[usr.ckey] manually reloaded the role whitelist.") - RoleAuthority.load_whitelist() + GLOB.RoleAuthority.load_whitelist() /client/proc/bulk_fetcher() set name = "Bulk Fetch Items" diff --git a/code/modules/admin/tabs/event_tab.dm b/code/modules/admin/tabs/event_tab.dm index fcc604c9cfa8..6ae974d2faea 100644 --- a/code/modules/admin/tabs/event_tab.dm +++ b/code/modules/admin/tabs/event_tab.dm @@ -217,18 +217,15 @@ if(!istype(chosen_ert)) return - - var/launch_broadcast = tgui_alert(usr, "Would you like to broadcast the beacon launch? This will reveal the distress beacon to all players.", "Announce distress beacon?", list("Yes", "No"), 20 SECONDS) - if(launch_broadcast == "Yes") - launch_broadcast = TRUE - else - launch_broadcast = FALSE - - var/announce_receipt = tgui_alert(usr, "Would you like to announce the beacon received message? This will reveal the distress beacon to all players.", "Announce beacon received?", list("Yes", "No"), 20 SECONDS) - if(announce_receipt == "Yes") + var/quiet_launch = TRUE + var/ql_prompt = tgui_alert(usr, "Would you like to broadcast the beacon launch? This will reveal the distress beacon to all players.", "Announce distress beacon?", list("Yes", "No"), 20 SECONDS) + if(ql_prompt == "Yes") + quiet_launch = FALSE + + var/announce_receipt = FALSE + var/ar_prompt = tgui_alert(usr, "Would you like to announce the beacon received message? This will reveal the distress beacon to all players.", "Announce beacon received?", list("Yes", "No"), 20 SECONDS) + if(ar_prompt == "Yes") announce_receipt = TRUE - else - announce_receipt = FALSE var/turf/override_spawn_loc var/prompt = tgui_alert(usr, "Spawn at their assigned spawn, or at your location?", "Spawnpoint Selection", list("Spawn", "Current Location"), 0) @@ -238,7 +235,7 @@ if(prompt == "Current Location") override_spawn_loc = get_turf(usr) - chosen_ert.activate(quiet_launch = launch_broadcast, announce_incoming = announce_receipt, override_spawn_loc = override_spawn_loc) + chosen_ert.activate(quiet_launch, announce_receipt, override_spawn_loc) message_admins("[key_name_admin(usr)] admin-called a [choice == "Randomize" ? "randomized ":""]distress beacon: [chosen_ert.name]") @@ -275,12 +272,12 @@ var/points_to_add = tgui_input_real_number(usr, "Enter the amount of points to give, or a negative number to subtract. 1 point = $100.", "Points", 0) if(!points_to_add) return - else if((supply_controller.points + points_to_add) < 0) - supply_controller.points = 0 - else if((supply_controller.points + points_to_add) > 99999) - supply_controller.points = 99999 + else if((GLOB.supply_controller.points + points_to_add) < 0) + GLOB.supply_controller.points = 0 + else if((GLOB.supply_controller.points + points_to_add) > 99999) + GLOB.supply_controller.points = 99999 else - supply_controller.points += points_to_add + GLOB.supply_controller.points += points_to_add message_admins("[key_name_admin(usr)] granted requisitions [points_to_add] points.") @@ -294,11 +291,11 @@ if(!SSticker.mode || !check_rights(R_ADMIN)) return - var/req_heat_change = tgui_input_real_number(usr, "Set the new requisitions black market heat. ERT is called at 100, disabled at -1. Current Heat: [supply_controller.black_market_heat]", "Modify Req Heat", 0, 100, -1) + var/req_heat_change = tgui_input_real_number(usr, "Set the new requisitions black market heat. ERT is called at 100, disabled at -1. Current Heat: [GLOB.supply_controller.black_market_heat]", "Modify Req Heat", 0, 100, -1) if(!req_heat_change) return - supply_controller.black_market_heat = req_heat_change + GLOB.supply_controller.black_market_heat = req_heat_change message_admins("[key_name_admin(usr)] set requisitions heat to [req_heat_change].") @@ -433,16 +430,16 @@ return var/datum/supply_order/new_order = new() - new_order.ordernum = supply_controller.ordernum - supply_controller.ordernum++ - new_order.object = supply_controller.supply_packs[nuketype] + new_order.ordernum = GLOB.supply_controller.ordernum + GLOB.supply_controller.ordernum++ + new_order.object = GLOB.supply_controller.supply_packs[nuketype] new_order.orderedby = MAIN_AI_SYSTEM new_order.approvedby = MAIN_AI_SYSTEM - supply_controller.shoppinglist += new_order + GLOB.supply_controller.shoppinglist += new_order marine_announcement("A nuclear device has been supplied and will be delivered to requisitions via ASRS.", "NUCLEAR ARSENAL ACQUIRED", 'sound/misc/notice2.ogg') - message_admins("[key_name_admin(usr)] admin-spawned a [encrypt] nuke.") - log_game("[key_name_admin(usr)] admin-spawned a [encrypt] nuke.") + message_admins("[key_name_admin(usr)] admin-spawned \a [encrypt] nuke.") + log_game("[key_name_admin(usr)] admin-spawned \a [encrypt] nuke.") /client/proc/turn_everyone_into_primitives() var/random_names = FALSE @@ -507,7 +504,7 @@ if(!customname) customname = "[faction] Update" if(faction == FACTION_MARINE) - for(var/obj/structure/machinery/computer/almayer_control/C in machines) + for(var/obj/structure/machinery/computer/almayer_control/C in GLOB.machines) if(!(C.inoperable())) var/obj/item/paper/P = new /obj/item/paper( C.loc ) P.name = "'[customname].'" @@ -524,7 +521,7 @@ else marine_announcement(input, customname, 'sound/AI/commandreport.ogg', faction) - message_admins("[key_name_admin(src)] has created a [faction] command report") + message_admins("[key_name_admin(src)] has created \a [faction] command report") log_admin("[key_name_admin(src)] [faction] command report: [input]") /client/proc/cmd_admin_xeno_report() @@ -678,14 +675,14 @@ set name = "Mob Event Verbs - Show" set category = "Admin.Events" - add_verb(src, admin_mob_event_verbs_hideable) + add_verb(src, GLOB.admin_mob_event_verbs_hideable) remove_verb(src, /client/proc/enable_event_mob_verbs) /client/proc/hide_event_mob_verbs() set name = "Mob Event Verbs - Hide" set category = "Admin.Events" - remove_verb(src, admin_mob_event_verbs_hideable) + remove_verb(src, GLOB.admin_mob_event_verbs_hideable) add_verb(src, /client/proc/enable_event_mob_verbs) // ---------------------------- diff --git a/code/modules/admin/tabs/round_tab.dm b/code/modules/admin/tabs/round_tab.dm index 22ba96a2317a..39a9050053f1 100644 --- a/code/modules/admin/tabs/round_tab.dm +++ b/code/modules/admin/tabs/round_tab.dm @@ -38,9 +38,9 @@ return if(!(predator_round.flags_round_type & MODE_PREDATOR)) - var/datum/job/PJ = RoleAuthority.roles_for_mode[JOB_PREDATOR] + var/datum/job/PJ = GLOB.RoleAuthority.roles_for_mode[JOB_PREDATOR] if(istype(PJ) && !PJ.spawn_positions) - PJ.set_spawn_positions(players_preassigned) + PJ.set_spawn_positions(GLOB.players_preassigned) predator_round.flags_round_type |= MODE_PREDATOR else predator_round.flags_round_type &= ~MODE_PREDATOR @@ -58,8 +58,8 @@ var/roles[] = new var/i var/datum/job/J - for(i in RoleAuthority.roles_for_mode) //All the roles in the game. - J = RoleAuthority.roles_for_mode[i] + for(i in GLOB.RoleAuthority.roles_for_mode) //All the roles in the game. + J = GLOB.RoleAuthority.roles_for_mode[i] if(J.total_positions > 0 && J.current_positions > 0) roles += i @@ -67,7 +67,7 @@ var/role = input("This list contains all roles that have at least one slot taken.\nPlease select role slot to free.", "Free role slot") as null|anything in roles if(!role) return - RoleAuthority.free_role_admin(RoleAuthority.roles_for_mode[role], TRUE, src) + GLOB.RoleAuthority.free_role_admin(GLOB.RoleAuthority.roles_for_mode[role], TRUE, src) /client/proc/modify_slot() set name = "Adjust Job Slots" @@ -81,10 +81,10 @@ var/active_role_names = GLOB.gamemode_roles[GLOB.master_mode] if(!active_role_names) - active_role_names = ROLES_DISTRESS_SIGNAL + active_role_names = GLOB.ROLES_DISTRESS_SIGNAL for(var/role_name as anything in active_role_names) - var/datum/job/job = RoleAuthority.roles_by_name[role_name] + var/datum/job/job = GLOB.RoleAuthority.roles_by_name[role_name] if(!job) continue roles += role_name @@ -92,12 +92,12 @@ var/role = input("Please select role slot to modify", "Modify amount of slots") as null|anything in roles if(!role) return - J = RoleAuthority.roles_by_name[role] + J = GLOB.RoleAuthority.roles_by_name[role] var/tpos = J.spawn_positions var/num = tgui_input_number(src, "How many slots role [J.title] should have?\nCurrently taken slots: [J.current_positions]\nTotal amount of slots opened this round: [J.total_positions_so_far]","Number:", tpos) if(isnull(num)) return - if(!RoleAuthority.modify_role(J, num)) + if(!GLOB.RoleAuthority.modify_role(J, num)) to_chat(usr, SPAN_BOLDNOTICE("Can't set job slots to be less than amount of log-ins or you are setting amount of slots less than minimal. Free slots first.")) message_admins("[key_name(usr)] adjusted job slots of [J.title] to be [num].") diff --git a/code/modules/admin/tabs/server_tab.dm b/code/modules/admin/tabs/server_tab.dm index 84c9426dfa3f..382b08c182b5 100644 --- a/code/modules/admin/tabs/server_tab.dm +++ b/code/modules/admin/tabs/server_tab.dm @@ -21,8 +21,8 @@ set desc = "Players can still log into the server, but players won't be able to join the game as a new mob." set category = "Server" - enter_allowed = !enter_allowed - if(!enter_allowed) + GLOB.enter_allowed = !GLOB.enter_allowed + if(!GLOB.enter_allowed) to_world("New players may no longer join the game.") else to_world("New players may now join the game.") @@ -34,8 +34,8 @@ set desc = "Globally Toggles Deadchat" set category = "Server" - dsay_allowed = !dsay_allowed - if(dsay_allowed) + GLOB.dsay_allowed = !GLOB.dsay_allowed + if(GLOB.dsay_allowed) to_world("Deadchat has been globally enabled!") else to_world("Deadchat has been globally disabled!") @@ -46,8 +46,8 @@ set desc = "Globally Toggles OOC" set category = "Server" - ooc_allowed = !ooc_allowed - if(ooc_allowed) + GLOB.ooc_allowed = !GLOB.ooc_allowed + if(GLOB.ooc_allowed) to_world("The OOC channel has been globally enabled!") else to_world("The OOC channel has been globally disabled!") @@ -58,8 +58,8 @@ set desc = "Globally Toggles LOOC" set category = "Server" - looc_allowed = !looc_allowed - if(looc_allowed) + GLOB.looc_allowed = !GLOB.looc_allowed + if(GLOB.looc_allowed) to_world("The LOOC channel has been globally enabled!") else to_world("The LOOC channel has been globally disabled!") diff --git a/code/modules/admin/tacmap_panel/tacmap_admin_panel.dm b/code/modules/admin/tacmap_panel/tacmap_admin_panel.dm new file mode 100644 index 000000000000..dcc8c7d5b664 --- /dev/null +++ b/code/modules/admin/tacmap_panel/tacmap_admin_panel.dm @@ -0,0 +1,9 @@ +/client/proc/cmd_admin_tacmaps_panel() + set name = "Tacmaps Panel" + set category = "Admin.Panels" + + if(!check_rights(R_ADMIN|R_MOD)) + to_chat(src, "Only administrators may use this command.") + return + + GLOB.tacmap_admin_panel.tgui_interact(mob) diff --git a/code/modules/admin/tacmap_panel/tacmap_admin_panel_tgui.dm b/code/modules/admin/tacmap_panel/tacmap_admin_panel_tgui.dm new file mode 100644 index 000000000000..e4b6f6846031 --- /dev/null +++ b/code/modules/admin/tacmap_panel/tacmap_admin_panel_tgui.dm @@ -0,0 +1,152 @@ +GLOBAL_DATUM_INIT(tacmap_admin_panel, /datum/tacmap_admin_panel, new) + +#define LATEST_SELECTION -1 + +/datum/tacmap_admin_panel + var/name = "Tacmap Panel" + /// The index picked last for USCM (zero indexed), -1 will try to select latest if it exists + var/uscm_selection = LATEST_SELECTION + /// The index picked last for Xenos (zero indexed), -1 will try to select latest if it exists + var/xeno_selection = LATEST_SELECTION + /// A url that will point to the wiki map for the current map as a fall back image + var/static/wiki_map_fallback + /// The last time the map selection was changed - used as a key to trick react into updating the map + var/last_update_time = 0 + +/datum/tacmap_admin_panel/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + if(!wiki_map_fallback) + var/wiki_url = CONFIG_GET(string/wikiurl) + var/obj/item/map/current_map/new_map = new + if(wiki_url && new_map.html_link) + wiki_map_fallback ="[wiki_url]/[new_map.html_link]" + else + debug_log("Failed to determine fallback wiki map! Attempted '[wiki_url]/[new_map.html_link]'") + qdel(new_map) + + // Ensure we actually have the latest map images sent (recache can handle older/different faction maps) + resend_current_map_png(user) + + ui = new(user, src, "TacmapAdminPanel", "Tacmap Panel") + ui.open() + +/datum/tacmap_admin_panel/ui_state(mob/user) + return GLOB.admin_state + +/datum/tacmap_admin_panel/ui_data(mob/user) + var/list/data = list() + var/list/uscm_ckeys = list() + var/list/xeno_ckeys = list() + var/list/uscm_names = list() + var/list/xeno_names = list() + var/list/uscm_times = list() + var/list/xeno_times = list() + + // Assumption: Length of flat_tacmap_data is the same as svg_tacmap_data + var/uscm_length = length(GLOB.uscm_svg_tacmap_data) + if(uscm_selection < 0 || uscm_selection >= uscm_length) + uscm_selection = uscm_length - 1 + for(var/i = 1, i <= uscm_length, i++) + var/datum/svg_overlay/current_svg = GLOB.uscm_svg_tacmap_data[i] + uscm_ckeys += current_svg.ckey + uscm_names += current_svg.name + uscm_times += current_svg.time + data["uscm_ckeys"] = uscm_ckeys + data["uscm_names"] = uscm_names + data["uscm_times"] = uscm_times + + var/xeno_length = length(GLOB.xeno_svg_tacmap_data) + if(xeno_selection < 0 || xeno_selection >= xeno_length) + xeno_selection = xeno_length - 1 + for(var/i = 1, i <= xeno_length, i++) + var/datum/svg_overlay/current_svg = GLOB.xeno_svg_tacmap_data[i] + xeno_ckeys += current_svg.ckey + xeno_names += current_svg.name + xeno_times += current_svg.time + data["xeno_ckeys"] = xeno_ckeys + data["xeno_names"] = xeno_names + data["xeno_times"] = xeno_times + + if(uscm_selection == LATEST_SELECTION) + data["uscm_map"] = null + data["uscm_svg"] = null + else + var/datum/flattened_tacmap/selected_flat = GLOB.uscm_flat_tacmap_data[uscm_selection + 1] + var/datum/svg_overlay/selected_svg = GLOB.uscm_svg_tacmap_data[uscm_selection + 1] + data["uscm_map"] = selected_flat.flat_tacmap + data["uscm_svg"] = selected_svg.svg_data + + if(xeno_selection == LATEST_SELECTION) + data["xeno_map"] = null + data["xeno_svg"] = null + else + var/datum/flattened_tacmap/selected_flat = GLOB.xeno_flat_tacmap_data[xeno_selection + 1] + var/datum/svg_overlay/selected_svg = GLOB.xeno_svg_tacmap_data[xeno_selection + 1] + data["xeno_map"] = selected_flat.flat_tacmap + data["xeno_svg"] = selected_svg.svg_data + + data["uscm_selection"] = uscm_selection + data["xeno_selection"] = xeno_selection + data["map_fallback"] = wiki_map_fallback + data["last_update_time"] = last_update_time + + return data + +/datum/tacmap_admin_panel/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + + var/mob/user = ui.user + var/client/client_user = user.client + if(!client_user) + return // Is this even possible? + + switch(action) + if("recache") + var/is_uscm = params["uscm"] + var/datum/flattened_tacmap/selected_flat + if(is_uscm) + if(uscm_selection == LATEST_SELECTION) + return TRUE + selected_flat = GLOB.uscm_flat_tacmap_data[uscm_selection + 1] + else + if(xeno_selection == LATEST_SELECTION) + return TRUE + selected_flat = GLOB.xeno_flat_tacmap_data[xeno_selection + 1] + SSassets.transport.send_assets(client_user, selected_flat.asset_key) + last_update_time = world.time + return TRUE + + if("change_selection") + var/is_uscm = params["uscm"] + if(is_uscm) + uscm_selection = params["index"] + else + xeno_selection = params["index"] + last_update_time = world.time + return TRUE + + if("delete") + var/is_uscm = params["uscm"] + var/datum/svg_overlay/selected_svg + if(is_uscm) + if(uscm_selection == LATEST_SELECTION) + return TRUE + selected_svg = GLOB.uscm_svg_tacmap_data[uscm_selection + 1] + else + if(xeno_selection == LATEST_SELECTION) + return TRUE + selected_svg = GLOB.xeno_svg_tacmap_data[xeno_selection + 1] + selected_svg.svg_data = null + last_update_time = world.time + message_admins("[key_name_admin(usr)] deleted the tactical map drawing by [selected_svg.ckey].") + return TRUE + +/datum/tacmap_admin_panel/ui_close(mob/user) + . = ..() + uscm_selection = LATEST_SELECTION + xeno_selection = LATEST_SELECTION + +#undef LATEST_SELECTION diff --git a/code/modules/admin/topic/topic.dm b/code/modules/admin/topic/topic.dm index 7dfc28a85ee4..10ba5b0f1091 100644 --- a/code/modules/admin/topic/topic.dm +++ b/code/modules/admin/topic/topic.dm @@ -50,7 +50,7 @@ if(task == "add") var/new_ckey = ckey(input(usr,"New admin's ckey","Admin ckey", null) as text|null) if(!new_ckey) return - if(new_ckey in admin_datums) + if(new_ckey in GLOB.admin_datums) to_chat(usr, "Error: Topic 'editrights': [new_ckey] is already an admin") return adm_ckey = new_ckey @@ -61,20 +61,20 @@ to_chat(usr, "Error: Topic 'editrights': No valid ckey") return - var/datum/admins/D = admin_datums[adm_ckey] + var/datum/admins/D = GLOB.admin_datums[adm_ckey] if(task == "remove") if(alert("Are you sure you want to remove [adm_ckey]?","Message","Yes","Cancel") == "Yes") if(!D) return - admin_datums -= adm_ckey + GLOB.admin_datums -= adm_ckey D.disassociate() message_admins("[key_name_admin(usr)] removed [adm_ckey] from the admins list") else if(task == "rank") var/new_rank - if(admin_ranks.len) - new_rank = tgui_input_list(usr, "Please select a rank", "New rank", (admin_ranks|"*New Rank*")) + if(GLOB.admin_ranks.len) + new_rank = tgui_input_list(usr, "Please select a rank", "New rank", (GLOB.admin_ranks|"*New Rank*")) else new_rank = tgui_input_list(usr, "Please select a rank", "New rank", list("Game Master","Game Admin", "Trial Admin", "Admin Observer","*New Rank*")) @@ -91,15 +91,15 @@ to_chat(usr, "Error: Topic 'editrights': Invalid rank") return if(CONFIG_GET(flag/admin_legacy_system)) - if(admin_ranks.len) - if(new_rank in admin_ranks) - rights = admin_ranks[new_rank] //we typed a rank which already exists, use its rights + if(GLOB.admin_ranks.len) + if(new_rank in GLOB.admin_ranks) + rights = GLOB.admin_ranks[new_rank] //we typed a rank which already exists, use its rights else - admin_ranks[new_rank] = 0 //add the new rank to admin_ranks + GLOB.admin_ranks[new_rank] = 0 //add the new rank to admin_ranks else if(CONFIG_GET(flag/admin_legacy_system)) new_rank = ckeyEx(new_rank) - rights = admin_ranks[new_rank] //we input an existing rank, use its rights + rights = GLOB.admin_ranks[new_rank] //we input an existing rank, use its rights if(D) D.disassociate() //remove adminverbs and unlink from client @@ -238,31 +238,31 @@ var/reason var/banfolder = href_list["unbanupgradeperma"] - Banlist.cd = "/base/[banfolder]" - var/reason2 = Banlist["reason"] + GLOB.Banlist.cd = "/base/[banfolder]" + var/reason2 = GLOB.Banlist["reason"] - var/minutes = Banlist["minutes"] + var/minutes = GLOB.Banlist["minutes"] - var/banned_key = Banlist["key"] - Banlist.cd = "/base" + var/banned_key = GLOB.Banlist["key"] + GLOB.Banlist.cd = "/base" var/mins = 0 - if(minutes > CMinutes) - mins = minutes - CMinutes + if(minutes > GLOB.CMinutes) + mins = minutes - GLOB.CMinutes if(!mins) return mins = max(5255990,mins) // 10 years - minutes = CMinutes + mins + minutes = GLOB.CMinutes + mins reason = input(usr,"Reason?","reason",reason2) as message|null if(!reason) return ban_unban_log_save("[key_name(usr)] upgraded [banned_key]'s ban to a permaban. Reason: [sanitize(reason)]") message_admins("[key_name_admin(usr)] upgraded [banned_key]'s ban to a permaban. Reason: [sanitize(reason)]") - Banlist.cd = "/base/[banfolder]" - Banlist["reason"] << sanitize(reason) - Banlist["temp"] << 0 - Banlist["minutes"] << minutes - Banlist["bannedby"] << usr.ckey - Banlist.cd = "/base" + GLOB.Banlist.cd = "/base/[banfolder]" + GLOB.Banlist["reason"] << sanitize(reason) + GLOB.Banlist["temp"] << 0 + GLOB.Banlist["minutes"] << minutes + GLOB.Banlist["bannedby"] << usr.ckey + GLOB.Banlist.cd = "/base" unbanpanel() else if(href_list["unbane"]) @@ -272,36 +272,36 @@ var/reason var/banfolder = href_list["unbane"] - Banlist.cd = "/base/[banfolder]" - var/reason2 = Banlist["reason"] - var/temp = Banlist["temp"] + GLOB.Banlist.cd = "/base/[banfolder]" + var/reason2 = GLOB.Banlist["reason"] + var/temp = GLOB.Banlist["temp"] - var/minutes = Banlist["minutes"] + var/minutes = GLOB.Banlist["minutes"] - var/banned_key = Banlist["key"] - Banlist.cd = "/base" + var/banned_key = GLOB.Banlist["key"] + GLOB.Banlist.cd = "/base" var/duration var/mins = 0 - if(minutes > CMinutes) - mins = minutes - CMinutes + if(minutes > GLOB.CMinutes) + mins = minutes - GLOB.CMinutes mins = tgui_input_number(usr,"How long (in minutes)? \n 1440 = 1 day \n 4320 = 3 days \n 10080 = 7 days \n 43800 = 1 Month","Ban time", 1440, 262800, 1) if(!mins) return mins = min(525599,mins) - minutes = CMinutes + mins + minutes = GLOB.CMinutes + mins duration = GetExp(minutes) reason = input(usr,"Reason?","reason",reason2) as message|null if(!reason) return ban_unban_log_save("[key_name(usr)] edited [banned_key]'s ban. Reason: [sanitize(reason)] Duration: [duration]") message_admins("[key_name_admin(usr)] edited [banned_key]'s ban. Reason: [sanitize(reason)] Duration: [duration]") - Banlist.cd = "/base/[banfolder]" - Banlist["reason"] << sanitize(reason) - Banlist["temp"] << temp - Banlist["minutes"] << minutes - Banlist["bannedby"] << usr.ckey - Banlist.cd = "/base" + GLOB.Banlist.cd = "/base/[banfolder]" + GLOB.Banlist["reason"] << sanitize(reason) + GLOB.Banlist["temp"] << temp + GLOB.Banlist["minutes"] << minutes + GLOB.Banlist["bannedby"] << usr.ckey + GLOB.Banlist.cd = "/base" unbanpanel() /////////////////////////////////////new ban stuff @@ -320,7 +320,7 @@ alert("You cannot perform this action. You must be of a higher administrative rank!") return - if(!RoleAuthority) + if(!GLOB.RoleAuthority) to_chat(usr, "Role Authority has not been set up!") return @@ -333,23 +333,23 @@ var/list/joblist = list() switch(href_list["jobban3"]) if("CICdept") - joblist += get_job_titles_from_list(ROLES_COMMAND) + joblist += get_job_titles_from_list(GLOB.ROLES_COMMAND) if("Supportdept") - joblist += get_job_titles_from_list(ROLES_AUXIL_SUPPORT) + joblist += get_job_titles_from_list(GLOB.ROLES_AUXIL_SUPPORT) if("Policedept") - joblist += get_job_titles_from_list(ROLES_POLICE) + joblist += get_job_titles_from_list(GLOB.ROLES_POLICE) if("Engineeringdept") - joblist += get_job_titles_from_list(ROLES_ENGINEERING) + joblist += get_job_titles_from_list(GLOB.ROLES_ENGINEERING) if("Requisitiondept") - joblist += get_job_titles_from_list(ROLES_REQUISITION) + joblist += get_job_titles_from_list(GLOB.ROLES_REQUISITION) if("Medicaldept") - joblist += get_job_titles_from_list(ROLES_MEDICAL) + joblist += get_job_titles_from_list(GLOB.ROLES_MEDICAL) if("Marinesdept") - joblist += get_job_titles_from_list(ROLES_MARINES) + joblist += get_job_titles_from_list(GLOB.ROLES_MARINES) if("Miscdept") - joblist += get_job_titles_from_list(ROLES_MISC) + joblist += get_job_titles_from_list(GLOB.ROLES_MISC) if("Xenosdept") - joblist += get_job_titles_from_list(ROLES_XENO) + joblist += get_job_titles_from_list(GLOB.ROLES_XENO) else joblist += href_list["jobban3"] @@ -562,23 +562,9 @@ var/dat = {"What mode do you wish to play?
    "} for(var/mode in config.modes) dat += {"[config.mode_names[mode]]
    "} - dat += {"Now: [master_mode]"} + dat += {"Now: [GLOB.master_mode]"} show_browser(usr, dat, "Change Gamemode", "c_mode") - else if(href_list["f_secret"]) - if(!check_rights(R_ADMIN)) return - - if(SSticker.mode) - return alert(usr, "The game has already started.", null, null, null, null) - if(master_mode != "secret") - return alert(usr, "The game mode has to be secret!", null, null, null, null) - var/dat = {"What game mode do you want to force secret to be? Use this if you want to change the game mode, but want the players to believe it's secret. This will only work if the current game mode is secret.
    "} - for(var/mode in config.modes) - dat += {"[config.mode_names[mode]]
    "} - dat += {"Random (default)
    "} - dat += {"Now: [secret_force_mode]"} - show_browser(usr, dat, "Change Secret Gamemode", "f_secret") - else if(href_list["c_mode2"]) if(!check_rights(R_ADMIN|R_SERVER)) return @@ -588,19 +574,6 @@ Game() // updates the main game menu SSticker.save_mode(GLOB.master_mode) - - else if(href_list["f_secret2"]) - if(!check_rights(R_ADMIN|R_SERVER)) return - - if(SSticker.mode) - return alert(usr, "The game has already started.", null, null, null, null) - if(master_mode != "secret") - return alert(usr, "The game mode has to be secret!", null, null, null, null) - secret_force_mode = href_list["f_secret2"] - message_admins("[key_name_admin(usr)] set the forced secret mode as [secret_force_mode].") - Game() // updates the main game menu - .(href, list("f_secret"=1)) - else if(href_list["monkeyone"]) if(!check_rights(R_SPAWN)) return @@ -617,7 +590,7 @@ var/mob/M = locate(href_list["forcespeech"]) if(!ismob(M)) - to_chat(usr, "this can only be used on instances of type /mob") + to_chat(usr, "This can only be used on instances of type /mob") return var/speech = input("What will [key_name(M)] say?.", "Force speech", "")// Don't need to sanitize, since it does that in say(), we also trust our admins. @@ -630,7 +603,7 @@ if(!check_rights(R_ADMIN)) return var/mob/living/carbon/human/H = locate(href_list["zombieinfect"]) if(!istype(H)) - to_chat(usr, "this can only be used on instances of type /human") + to_chat(usr, "This can only be used on instances of type /human") return if(alert(usr, "Are you sure you want to infect them with a ZOMBIE VIRUS? This can trigger a major event!", "Message", "Yes", "No") != "Yes") @@ -649,7 +622,7 @@ if(!check_rights(R_ADMIN)) return var/mob/living/carbon/human/H = locate(href_list["larvainfect"]) if(!istype(H)) - to_chat(usr, "this can only be used on instances of type /human") + to_chat(usr, "This can only be used on instances of type /human") return if(alert(usr, "Are you sure you want to infect them with a xeno larva?", "Message", "Yes", "No") != "Yes") @@ -731,7 +704,7 @@ var/mob/M = locate(href_list["forceemote"]) if(!ismob(M)) - to_chat(usr, "this can only be used on instances of type /mob") + to_chat(usr, "This can only be used on instances of type /mob") var/speech = input("What will [key_name(M)] emote?.", "Force emote", "")// Don't need to sanitize, since it does that in say(), we also trust our admins. if(!speech) return @@ -938,7 +911,7 @@ H.mind.transfer_to(M) else M.key = H.key - if(M.client) M.client.change_view(world_view_size) + if(M.client) M.client.change_view(GLOB.world_view_size) if(M.skills) qdel(M.skills) @@ -1033,7 +1006,7 @@ return if(alert("Are you sure you want to cancel this OB?",,"Yes","No") != "Yes") return - orbital_cannon_cancellation["[cancel_token]"] = null + GLOB.orbital_cannon_cancellation["[cancel_token]"] = null message_admins("[src.owner] has cancelled the orbital strike.") else if(href_list["admincancelpredsd"]) @@ -1197,7 +1170,7 @@ msg_ghost += "view message" announce_fax(msg_ghost = msg_ghost) - for(var/obj/structure/machinery/faxmachine/F in machines) + for(var/obj/structure/machinery/faxmachine/F in GLOB.machines) if(F == fax) if(!(F.inoperable())) @@ -1279,7 +1252,7 @@ msg_ghost += "view message" announce_fax( ,msg_ghost) - for(var/obj/structure/machinery/faxmachine/F in machines) + for(var/obj/structure/machinery/faxmachine/F in GLOB.machines) if(F == fax) if(!(F.inoperable())) @@ -1361,7 +1334,7 @@ announce_fax( ,msg_ghost) - for(var/obj/structure/machinery/faxmachine/F in machines) + for(var/obj/structure/machinery/faxmachine/F in GLOB.machines) if(F == fax) if(!(F.inoperable())) @@ -1443,7 +1416,7 @@ announce_fax( ,msg_ghost) - for(var/obj/structure/machinery/faxmachine/F in machines) + for(var/obj/structure/machinery/faxmachine/F in GLOB.machines) if(F == fax) if(!(F.inoperable())) @@ -1767,16 +1740,16 @@ //unanswered_distress -= ref_person if(href_list["distresscancel"]) - if(distress_cancel) + if(GLOB.distress_cancel) to_chat(usr, "The distress beacon was either canceled, or you are too late to cancel.") return log_game("[key_name_admin(usr)] has canceled the distress beacon.") message_admins("[key_name_admin(usr)] has canceled the distress beacon.") - distress_cancel = TRUE + GLOB.distress_cancel = TRUE return if(href_list["distress"]) //Distress Beacon, sends a random distress beacon when pressed - distress_cancel = FALSE + GLOB.distress_cancel = FALSE message_admins("[key_name_admin(usr)] has opted to SEND the distress beacon! Launching in 10 seconds... (CANCEL)") addtimer(CALLBACK(src, PROC_REF(accept_ert), usr, locate(href_list["distress"])), 10 SECONDS) //unanswered_distress -= ref_person @@ -1784,7 +1757,7 @@ if(href_list["distress_handheld"]) //Prepares to call and logs accepted handheld distress beacons var/mob/ref_person = href_list["distress_handheld"] var/ert_name = href_list["ert_name"] - distress_cancel = FALSE + GLOB.distress_cancel = FALSE message_admins("[key_name_admin(usr)] has opted to SEND [ert_name]! Launching in 10 seconds... (CANCEL)") addtimer(CALLBACK(src, PROC_REF(accept_handheld_ert), usr, ref_person, ert_name), 10 SECONDS) @@ -1795,10 +1768,10 @@ message_admins("[key_name_admin(usr)] has denied a distress beacon, requested by [key_name_admin(ref_person)]") if(href_list["destroyship"]) //Distress Beacon, sends a random distress beacon when pressed - destroy_cancel = FALSE + GLOB.destroy_cancel = FALSE message_admins("[key_name_admin(usr)] has opted to GRANT the self-destruct! Starting in 10 seconds... (CANCEL)") spawn(100) - if(distress_cancel) + if(GLOB.distress_cancel) return var/mob/ref_person = locate(href_list["destroyship"]) set_security_level(SEC_LEVEL_DELTA) @@ -1813,25 +1786,25 @@ var/prompt = tgui_alert(usr, "Do you want the nuke to be Encrypted?", "Nuke Type", list("Encrypted", "Decrypted"), 20 SECONDS) if(prompt == "Decrypted") nuketype = "Decrypted Operational Nuke" - prompt = tgui_alert(usr, "Are you sure you want to authorize a [nuketype] to the marines? This will greatly affect the round!", "DEFCON 1", list("No", "Yes")) + prompt = tgui_alert(usr, "Are you sure you want to authorize \a [nuketype] to the marines? This will greatly affect the round!", "DEFCON 1", list("No", "Yes")) if(prompt != "Yes") return //make ASRS order for nuke var/datum/supply_order/new_order = new() - new_order.ordernum = supply_controller.ordernum - supply_controller.ordernum++ - new_order.object = supply_controller.supply_packs[nuketype] + new_order.ordernum = GLOB.supply_controller.ordernum + GLOB.supply_controller.ordernum++ + new_order.object = GLOB.supply_controller.supply_packs[nuketype] new_order.orderedby = ref_person new_order.approvedby = "USCM High Command" - supply_controller.shoppinglist += new_order + GLOB.supply_controller.shoppinglist += new_order //Can no longer request a nuke GLOB.ares_datacore.nuke_available = FALSE marine_announcement("A nuclear device has been authorized by High Command and will be delivered to requisitions via ASRS.", "NUCLEAR ORDNANCE AUTHORIZED", 'sound/misc/notice2.ogg', logging = ARES_LOG_MAIN) - log_game("[key_name_admin(usr)] has authorized a [nuketype], requested by [key_name_admin(ref_person)]") - message_admins("[key_name_admin(usr)] has authorized a [nuketype], requested by [key_name_admin(ref_person)]") + log_game("[key_name_admin(usr)] has authorized \a [nuketype], requested by [key_name_admin(ref_person)]") + message_admins("[key_name_admin(usr)] has authorized \a [nuketype], requested by [key_name_admin(ref_person)]") if(href_list["nukedeny"]) var/mob/ref_person = locate(href_list["nukedeny"]) @@ -1848,7 +1821,7 @@ message_admins("[key_name_admin(usr)] has denied self-destruct, requested by [key_name_admin(ref_person)]", 1) if(href_list["sdcancel"]) - if(destroy_cancel) + if(GLOB.destroy_cancel) to_chat(usr, "The self-destruct was already canceled.") return if(get_security_level() == "delta") @@ -1856,7 +1829,7 @@ return log_game("[key_name_admin(usr)] has canceled the self-destruct.") message_admins("[key_name_admin(usr)] has canceled the self-destruct.") - destroy_cancel = 1 + GLOB.destroy_cancel = TRUE return if(href_list["tag_datum"]) @@ -1964,18 +1937,18 @@ return /datum/admins/proc/accept_ert(mob/approver, mob/ref_person) - if(distress_cancel) + if(GLOB.distress_cancel) return - distress_cancel = TRUE + GLOB.distress_cancel = TRUE SSticker.mode.activate_distress() log_game("[key_name_admin(approver)] has sent a randomized distress beacon, requested by [key_name_admin(ref_person)]") message_admins("[key_name_admin(approver)] has sent a randomized distress beacon, requested by [key_name_admin(ref_person)]") ///Handles calling the ERT sent by handheld distress beacons /datum/admins/proc/accept_handheld_ert(mob/approver, mob/ref_person, ert_called) - if(distress_cancel) + if(GLOB.distress_cancel) return - distress_cancel = TRUE + GLOB.distress_cancel = TRUE SSticker.mode.get_specific_call("[ert_called]", TRUE, FALSE) log_game("[key_name_admin(approver)] has sent [ert_called], requested by [key_name_admin(ref_person)]") message_admins("[key_name_admin(approver)] has sent [ert_called], requested by [key_name_admin(ref_person)]") @@ -1989,7 +1962,7 @@ for(var/jobPos in roles) if(!jobPos) continue - var/datum/job/job = RoleAuthority.roles_by_name[jobPos] + var/datum/job/job = GLOB.RoleAuthority.roles_by_name[jobPos] if(!job) continue @@ -2011,7 +1984,7 @@ for(var/jobPos in roles) if(!jobPos) continue - var/datum/job/J = RoleAuthority.roles_by_name[jobPos] + var/datum/job/J = GLOB.RoleAuthority.roles_by_name[jobPos] if(!J) continue temp += J.title diff --git a/code/modules/admin/topic/topic_chems.dm b/code/modules/admin/topic/topic_chems.dm index fe8af3b77d96..77e1c0c6d1b8 100644 --- a/code/modules/admin/topic/topic_chems.dm +++ b/code/modules/admin/topic/topic_chems.dm @@ -39,14 +39,14 @@ var/response = alert(usr,"Enter ID or select ID from list?",null, "Enter ID","Select from list") var/target if(response == "Select from list") - var/list/pool = chemical_reagents_list + var/list/pool = GLOB.chemical_reagents_list pool = sortAssoc(pool) target = tgui_input_list(usr,"Select the ID of the chemical reagent you wish to view:", "View reagent", pool) else if(response == "Enter ID") target = input(usr,"Enter the ID of the chemical reagent you wish to view:") if(!target) return - var/datum/reagent/R = chemical_reagents_list[target] + var/datum/reagent/R = GLOB.chemical_reagents_list[target] if(R) usr.client.debug_variables(R) else @@ -56,7 +56,7 @@ var/target = input(usr,"Enter the ID of the chemical reaction you wish to view:") if(!target) return - var/datum/chemical_reaction/R = chemical_reactions_list[target] + var/datum/chemical_reaction/R = GLOB.chemical_reactions_list[target] if(R) usr.client.debug_variables(R) log_admin("[key_name(usr)] is viewing the chemical reaction for [R].") @@ -67,7 +67,7 @@ var/target = input(usr,"Enter the ID of the chemical reaction you wish to syncronize. This is only necessary if you edited a reaction through the debugger (VV).") if(!target) return - var/datum/chemical_reaction/R = chemical_reactions_list[target] + var/datum/chemical_reaction/R = GLOB.chemical_reactions_list[target] if(R) R.add_to_filtered_list(TRUE) log_debug("[key_name(usr)] resyncronized [R.id]") @@ -77,7 +77,7 @@ return if("spawn_reagent") var/target = input(usr,"Enter the ID of the chemical reagent you wish to make:") - if(!chemical_reagents_list[target]) + if(!GLOB.chemical_reagents_list[target]) to_chat(usr,SPAN_WARNING("No reagent with this ID could been found.")) return var/volume = tgui_input_number(usr,"How much? An appropriate container will be selected.") @@ -88,18 +88,18 @@ return if("make_report") var/target = input(usr, "Enter the ID of the chemical reagent you wish to make a report of:") - if(!chemical_reagents_list[target]) + if(!GLOB.chemical_reagents_list[target]) to_chat(usr, SPAN_WARNING("No reagent with this ID could be found.")) return - var/datum/reagent/R = chemical_reagents_list[target] + var/datum/reagent/R = GLOB.chemical_reagents_list[target] R.print_report(loc = usr.loc, admin_spawned = TRUE) //For quickly generating a new chemical if("create_random_reagent") var/target = input(usr,"Enter the ID of the chemical reagent you wish to make:") if(!target) return - if(chemical_reagents_list[target]) + if(GLOB.chemical_reagents_list[target]) to_chat(usr,SPAN_WARNING("This ID is already in use.")) return var/tier = tgui_input_number(usr,"Enter the generation tier you wish. This will affect the number of properties (tier + 1), rarity of components and potential for good properties. Ought to be 1-4, max 10.", "Generation tier", 1, 10) @@ -116,41 +116,41 @@ R.generate_name() R.generate_stats() //Save our reagent - chemical_reagents_list[target] = R + GLOB.chemical_reagents_list[target] = R message_admins("[key_name_admin(usr)] has generated the reagent: [target].") var/response = alert(usr,"Do you want to do anything else?",null,"Generate associated reaction","View my reagent","Finish") while(response != "Finish") switch(response) if("Generate associated reaction") - if(chemical_reactions_list[target]) + if(GLOB.chemical_reactions_list[target]) to_chat(usr,SPAN_WARNING("This ID is already in use.")) return R.generate_assoc_recipe() - if(!chemical_reactions_list[target]) + if(!GLOB.chemical_reactions_list[target]) to_chat(usr,SPAN_WARNING("Something went wrong when saving the reaction. The associated reagent has been deleted.")) - chemical_reagents_list[target] -= R + GLOB.chemical_reagents_list[target] -= R return response = alert(usr,"Do you want to do anything else?",null,"View my reaction","View my reagent","Finish") if("View my reagent") - if(chemical_reagents_list[target]) - R = chemical_reagents_list[target] + if(GLOB.chemical_reagents_list[target]) + R = GLOB.chemical_reagents_list[target] usr.client.debug_variables(R) log_admin("[key_name(usr)] is viewing the chemical reaction for [R].") else to_chat(usr,SPAN_WARNING("No reagent with this ID could been found. Wait what? But I just... Contact a debugger.")) - chemical_reagents_list.Remove(target) - chemical_reactions_list.Remove("[target]") - chemical_reactions_filtered_list.Remove("[target]") + GLOB.chemical_reagents_list.Remove(target) + GLOB.chemical_reactions_list.Remove("[target]") + GLOB.chemical_reactions_filtered_list.Remove("[target]") return if("View my reaction") - if(chemical_reactions_list[target]) - var/datum/chemical_reaction/generated/G = chemical_reactions_list[target] + if(GLOB.chemical_reactions_list[target]) + var/datum/chemical_reaction/generated/G = GLOB.chemical_reactions_list[target] usr.client.debug_variables(G) else to_chat(usr,SPAN_WARNING("No reaction with this ID could been found. Wait what? But I just... Contact a debugger.")) - chemical_reagents_list.Remove(target) - chemical_reactions_list.Remove("[target]") - chemical_reactions_filtered_list.Remove("[target]") + GLOB.chemical_reagents_list.Remove(target) + GLOB.chemical_reactions_list.Remove("[target]") + GLOB.chemical_reactions_filtered_list.Remove("[target]") return else break @@ -165,7 +165,7 @@ var/target = input(usr,"Enter the ID of the chemical reagent you wish to make:") if(!target) return - if(chemical_reagents_list[target]) + if(GLOB.chemical_reagents_list[target]) to_chat(usr,SPAN_WARNING("This ID is already in use.")) return var/datum/reagent/generated/R = new /datum/reagent/generated @@ -190,7 +190,7 @@ response = alert(usr,"Select Input Type","Custom reagent [target]","Manual Input","Select","No more properties") if("Manual Input") var/input = input(usr,"Enter the name of the chemical property you wish to add:") - var/datum/chem_property/P = chemical_properties_list[input] + var/datum/chem_property/P = GLOB.chemical_properties_list[input] if(!P) to_chat(usr,SPAN_WARNING("Property not found, did you spell it right?")) response = "Specific property" @@ -199,7 +199,7 @@ R.insert_property(P.name,level) response = alert(usr,"Done. Add more?","Custom reagent [target]","Specific property","Specific number","No more properties") if("Select") - var/list/pool = chemical_properties_list + var/list/pool = GLOB.chemical_properties_list pool = sortAssoc(pool) var/P = tgui_input_list(usr,"Which property do you want?", "Property selection", pool) var/level = tgui_input_number(usr,"Choose the level (this is a strength modifier, ought to be between 1-8)", "strengthmod", 1) @@ -221,7 +221,7 @@ break R.generate_description() //Save our reagent - chemical_reagents_list[target] = R + GLOB.chemical_reagents_list[target] = R message_admins("[key_name_admin(usr)] has created a custom reagent: [target].") //See what we want to do last response = alert(usr,"Spawn container with reagent?","Custom reagent [target]","Yes","No, show me the reagent","No, I'm all done") @@ -233,14 +233,14 @@ spawn_reagent(target, volume) if("No, show me the reagent") - usr.client.debug_variables(chemical_reagents_list[target]) + usr.client.debug_variables(GLOB.chemical_reagents_list[target]) return //For creating a custom reaction if("create_custom_reaction") var/target = input(usr,"Enter the ID of the chemical reaction you wish to make:") if(!target) return - if(chemical_reactions_list[target]) + if(GLOB.chemical_reactions_list[target]) to_chat(usr,SPAN_WARNING("This ID is already in use.")) return var/datum/chemical_reaction/generated/R = new /datum/chemical_reaction/generated @@ -262,7 +262,7 @@ if("Select type") response = alert(usr,"Enter id manually or select from list?","Custom reaction [target]","Select from list","Manual input","Back") if("Select from list") - var/list/pool = chemical_reagents_list + var/list/pool = GLOB.chemical_reagents_list pool = sortAssoc(pool) component = tgui_input_list(usr,"Select:", "Create custom reaction", pool) if(!component) @@ -274,7 +274,7 @@ if(!component) response = "Select type" continue - if(!chemical_reagents_list[component]) + if(!GLOB.chemical_reagents_list[component]) to_chat(usr,SPAN_WARNING("ID not found. Try again.")) continue response = "Add" @@ -290,11 +290,11 @@ to_chat(usr,SPAN_WARNING("You need to add at least 3 components excluding catalysts. The reaction has not been saved.")) return //Save our reaction - chemical_reactions_list[target] = R + GLOB.chemical_reactions_list[target] = R R.add_to_filtered_list() - if(!chemical_reactions_list[target]) + if(!GLOB.chemical_reactions_list[target]) to_chat(usr,SPAN_WARNING("Something went wrong when saving the reaction.")) return - usr.client.debug_variables(chemical_reactions_list[target]) + usr.client.debug_variables(GLOB.chemical_reactions_list[target]) message_admins("[key_name_admin(usr)] has created a custom chemical reaction: [target].") return diff --git a/code/modules/admin/topic/topic_events.dm b/code/modules/admin/topic/topic_events.dm index c38f715d93bf..0c37e81f2641 100644 --- a/code/modules/admin/topic/topic_events.dm +++ b/code/modules/admin/topic/topic_events.dm @@ -52,7 +52,7 @@ if("whiteout") if(alert(usr, "Are you sure you want to do this?", "Confirmation", "Yes", "No") != "Yes") return - for(var/obj/structure/machinery/light/L in machines) + for(var/obj/structure/machinery/light/L in GLOB.machines) L.fix() message_admins("[key_name_admin(usr)] fixed all lights") if("power") @@ -82,16 +82,16 @@ power_restore_ship_reactors() if("change_clearance") var/list/clearance_levels = list(0,1,2,3,4,5) - var/level = tgui_input_list(usr, "Select new clearance level:","Current level: [chemical_data.clearance_level]", clearance_levels) + var/level = tgui_input_list(usr, "Select new clearance level:","Current level: [GLOB.chemical_data.clearance_level]", clearance_levels) if(!level) return message_admins("[key_name_admin(usr)] changed research clearance level to [level].") - chemical_data.clearance_level = level + GLOB.chemical_data.clearance_level = level if("give_research_credits") var/amount = tgui_input_real_number(usr, "How many credits to add?") if(amount != 0) //can add negative numbers too! message_admins("[key_name_admin(usr)] added [amount] research credits.") - chemical_data.update_credits(amount) + GLOB.chemical_data.update_credits(amount) /datum/admins/proc/create_humans_list(href_list) if(SSticker?.current_state < GAME_STATE_PLAYING) @@ -205,20 +205,17 @@ em_call.mob_max = humans.len em_call.players_to_offer = humans em_call.owner = owner - - var/launch_broadcast = tgui_alert(usr, "Would you like to broadcast the beacon launch? This will reveal the distress beacon to all players.", "Announce distress beacon?", list("Yes", "No"), 20 SECONDS) - if(launch_broadcast == "Yes") - launch_broadcast = TRUE - else - launch_broadcast = FALSE - - var/announce_receipt = tgui_alert(usr, "Would you like to announce the beacon received message? This will reveal the distress beacon to all players.", "Announce beacon received?", list("Yes", "No"), 20 SECONDS) - if(announce_receipt == "Yes") + var/quiet_launch = TRUE + var/ql_prompt = tgui_alert(usr, "Would you like to broadcast the beacon launch? This will reveal the distress beacon to all players.", "Announce distress beacon?", list("Yes", "No"), 20 SECONDS) + if(ql_prompt == "Yes") + quiet_launch = FALSE + + var/announce_receipt = FALSE + var/ar_prompt = tgui_alert(usr, "Would you like to announce the beacon received message? This will reveal the distress beacon to all players.", "Announce beacon received?", list("Yes", "No"), 20 SECONDS) + if(ar_prompt == "Yes") announce_receipt = TRUE - else - announce_receipt = FALSE - - em_call.activate(launch_broadcast, announce_receipt) + log_debug("ERT DEBUG (CUSTOM SET): [quiet_launch] - [announce_receipt]") + em_call.activate(quiet_launch, announce_receipt) message_admins("[key_name_admin(usr)] created [humans_to_spawn] humans as [job_name] at [get_area(initial_spot)]") @@ -272,7 +269,7 @@ if(!length(turfs)) return - var/caste_type = RoleAuthority.get_caste_by_text(xeno_caste) + var/caste_type = GLOB.RoleAuthority.get_caste_by_text(xeno_caste) var/list/xenos = list() var/mob/living/carbon/xenomorph/X diff --git a/code/modules/admin/topic/topic_teleports.dm b/code/modules/admin/topic/topic_teleports.dm index 38eefdb49257..8a5360169999 100644 --- a/code/modules/admin/topic/topic_teleports.dm +++ b/code/modules/admin/topic/topic_teleports.dm @@ -8,7 +8,7 @@ owner.jump_to_area(choice) if("jump_to_turf") - var/turf/choice = tgui_input_list(owner, "Pick a turf to jump to:", "Jump", turfs) + var/turf/choice = tgui_input_list(owner, "Pick a turf to jump to:", "Jump", GLOB.turfs) if(QDELETED(choice)) return diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm index cef0625c0adf..8a86d7282aa9 100644 --- a/code/modules/admin/verbs/adminjump.dm +++ b/code/modules/admin/verbs/adminjump.dm @@ -15,15 +15,21 @@ if(!src.mob) return + var/list/area_turfs = get_area_turfs(A) + + if(!length(area_turfs)) + to_chat(src, "There aren't any turfs in this area!") + return + if(!isobserver(mob)) src.admin_ghost() src.mob.on_mob_jump() - src.mob.forceMove(pick(get_area_turfs(A))) + src.mob.forceMove(pick(area_turfs)) message_admins(WRAP_STAFF_LOG(usr, "jumped to area [get_area(usr)] ([usr.loc.x],[usr.loc.y],[usr.loc.z])."), usr.loc.x, usr.loc.y, usr.loc.z) -/client/proc/jump_to_turf(turf/T in turfs) +/client/proc/jump_to_turf(turf/T in GLOB.turfs) set name = "Jump to Turf" set category = null diff --git a/code/modules/admin/verbs/adminpanelgq.dm b/code/modules/admin/verbs/adminpanelgq.dm index 8ef1ed869661..82efd0906873 100644 --- a/code/modules/admin/verbs/adminpanelgq.dm +++ b/code/modules/admin/verbs/adminpanelgq.dm @@ -2,7 +2,7 @@ set name = "Call General Quarters" set category = "Admin.Ship" - if(security_level == SEC_LEVEL_RED || security_level == SEC_LEVEL_DELTA) + if(GLOB.security_level == SEC_LEVEL_RED || GLOB.security_level == SEC_LEVEL_DELTA) tgui_alert(src, "Security is already red or above, General Quarters cannot be called.", "Acknowledge!", list("ok."), 10 SECONDS) return FALSE diff --git a/code/modules/admin/verbs/autoreplace.dm b/code/modules/admin/verbs/autoreplace.dm index dc6ebb09db2c..b2fe04cfb4a3 100644 --- a/code/modules/admin/verbs/autoreplace.dm +++ b/code/modules/admin/verbs/autoreplace.dm @@ -1,4 +1,4 @@ -var/list/datum/decorator/manual/admin_runtime/admin_runtime_decorators = list() +GLOBAL_LIST_INIT_TYPED(admin_runtime_decorators, /datum/decorator/manual/admin_runtime, list()) /client/proc/set_autoreplacer() set category = "Admin.Events" @@ -30,9 +30,9 @@ var/list/datum/decorator/manual/admin_runtime/admin_runtime_decorators = list() if("No") return - admin_runtime_decorators.Add(SSdecorator.add_decorator(/datum/decorator/manual/admin_runtime, types, subtypes, field, value)) + GLOB.admin_runtime_decorators.Add(SSdecorator.add_decorator(/datum/decorator/manual/admin_runtime, types, subtypes, field, value)) - log_and_message_admins("[src] activated new decorator id: [admin_runtime_decorators.len] set for [hint_text] `[types]` for field `[field]` set value `[value]`") + log_and_message_admins("[src] activated new decorator id: [GLOB.admin_runtime_decorators.len] set for [hint_text] `[types]` for field `[field]` set value `[value]`") /client/proc/deactivate_autoreplacer() set category = "Admin.Events" @@ -47,7 +47,7 @@ var/list/datum/decorator/manual/admin_runtime/admin_runtime_decorators = list() if(!num_value) return - admin_runtime_decorators[num_value].enabled = FALSE + GLOB.admin_runtime_decorators[num_value].enabled = FALSE log_and_message_admins("[src] deactivated decorator id: [num_value]") diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index a7ee69469f1d..c776a12eb330 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -86,8 +86,8 @@ if(!SSticker.mode) to_chat(usr, "Mode not found?") - round_should_check_for_win = !round_should_check_for_win - if (round_should_check_for_win) + GLOB.round_should_check_for_win = !GLOB.round_should_check_for_win + if (GLOB.round_should_check_for_win) message_admins("[key_name(src)] enabled checking for round-end.") else message_admins("[key_name(src)] disabled checking for round-end.") @@ -333,17 +333,17 @@ individual_counts["[M.type]"]++ for(var/mob/M in SShuman.processable_human_list) individual_counts["[M.type]"]++ - for(var/obj/structure/machinery/M in processing_machines) + for(var/obj/structure/machinery/M in GLOB.processing_machines) individual_counts["[M.type]"]++ - for(var/datum/powernet/M in powernets) + for(var/datum/powernet/M in GLOB.powernets) individual_counts["[M.type]"]++ for(var/mob/M in SSmob.living_misc_mobs) individual_counts["[M.type]"]++ - for(var/datum/nanoui/M in nanomanager.processing_uis) + for(var/datum/nanoui/M in SSnano.nanomanager.processing_uis) individual_counts["[M.type]"]++ - for(var/datum/powernet/M in powernets) + for(var/datum/powernet/M in GLOB.powernets) individual_counts["[M.type]"]++ - for(var/datum/M in power_machines) + for(var/datum/M in GLOB.power_machines) individual_counts["[M.type]"]++ for(var/mob/M in GLOB.xeno_mob_list) individual_counts["[M.type]"]++ diff --git a/code/modules/admin/verbs/mob_verbs.dm b/code/modules/admin/verbs/mob_verbs.dm index 351d281e1881..abb43461c2fe 100644 --- a/code/modules/admin/verbs/mob_verbs.dm +++ b/code/modules/admin/verbs/mob_verbs.dm @@ -24,7 +24,7 @@ message_admins("[key_name_admin(usr)] modified [key_name(M)]'s ckey to [new_ckey]", 1) M.ckey = new_ckey - M.client?.change_view(world_view_size) + M.client?.change_view(GLOB.world_view_size) /client/proc/cmd_admin_changekey(mob/O in GLOB.mob_list) set name = "Change CKey" @@ -72,13 +72,13 @@ var/datum/mob_hud/H switch(hud_choice) if("Medical HUD") - H = huds[MOB_HUD_MEDICAL_ADVANCED] + H = GLOB.huds[MOB_HUD_MEDICAL_ADVANCED] if("Security HUD") - H = huds[MOB_HUD_SECURITY_ADVANCED] + H = GLOB.huds[MOB_HUD_SECURITY_ADVANCED] if("Squad HUD") - H = huds[MOB_HUD_FACTION_OBSERVER] + H = GLOB.huds[MOB_HUD_FACTION_OBSERVER] if("Xeno Status HUD") - H = huds[MOB_HUD_XENO_STATUS] + H = GLOB.huds[MOB_HUD_XENO_STATUS] else return H.add_hud_to(M, HUD_SOURCE_ADMIN) @@ -220,7 +220,7 @@ "Narrating as [selected.name]") if(!message) return - var/list/heard = get_mobs_in_view(world_view_size, selected) + var/list/heard = get_mobs_in_view(GLOB.world_view_size, selected) switch(type) if(NARRATION_METHOD_SAY) diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index 9d622fce501b..0763a0e10795 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -1,45 +1,83 @@ -/client/proc/play_web_sound() +/client/proc/play_admin_sound() set category = "Admin.Fun" - set name = "Play Internet Sound" + set name = "Play Admin Sound" if(!check_rights(R_SOUNDS)) return - var/ytdl = CONFIG_GET(string/invoke_youtubedl) - if(!ytdl) - to_chat(src, SPAN_BOLDWARNING("Youtube-dl was not configured, action unavailable"), confidential = TRUE) //Check config.txt for the INVOKE_YOUTUBEDL value + var/sound_mode = tgui_input_list(src, "Play a sound from which source?", "Select Source", list("Web", "Upload")) + if(!sound_mode) return - var/web_sound_input = input("Enter content URL (supported sites only)", "Play Internet Sound via youtube-dl") as text|null - if(!istext(web_sound_input) || !length(web_sound_input)) - return + var/list/data = list() + var/log_title = TRUE + var/web_sound_input + var/asset_name + var/must_send_assets = FALSE + var/announce_title = TRUE + + if(sound_mode == "Web") + var/ytdl = CONFIG_GET(string/invoke_youtubedl) + if(!ytdl) + to_chat(src, SPAN_BOLDWARNING("Youtube-dl was not configured, action unavailable"), confidential = TRUE) //Check config.txt for the INVOKE_YOUTUBEDL value + return - web_sound_input = trim(web_sound_input) + web_sound_input = input("Enter content URL (supported sites only)", "Play Internet Sound via youtube-dl") as text|null + if(!istext(web_sound_input) || !length(web_sound_input)) + return - if(findtext(web_sound_input, ":") && !findtext(web_sound_input, GLOB.is_http_protocol)) - to_chat(src, SPAN_WARNING("Non-http(s) URIs are not allowed.")) - to_chat(src, SPAN_WARNING("For youtube-dl shortcuts like ytsearch: please use the appropriate full url from the website.")) - return + web_sound_input = trim(web_sound_input) - var/web_sound_url = "" - var/list/music_extra_data = list() - var/title + if(findtext(web_sound_input, ":") && !findtext(web_sound_input, GLOB.is_http_protocol)) + to_chat(src, SPAN_WARNING("Non-http(s) URIs are not allowed.")) + to_chat(src, SPAN_WARNING("For youtube-dl shortcuts like ytsearch: please use the appropriate full url from the website.")) + return - var/list/output = world.shelleo("[ytdl] --geo-bypass --format \"bestaudio\[ext=mp3]/best\[ext=mp4]\[height<=360]/bestaudio\[ext=m4a]/bestaudio\[ext=aac]\" --dump-single-json --no-playlist -- \"[shell_url_scrub(web_sound_input)]\"") - var/errorlevel = output[SHELLEO_ERRORLEVEL] - var/stdout = output[SHELLEO_STDOUT] - var/stderr = output[SHELLEO_STDERR] + var/list/output = world.shelleo("[ytdl] --geo-bypass --format \"bestaudio\[ext=mp3]/best\[ext=mp4]\[height<=360]/bestaudio\[ext=m4a]/bestaudio\[ext=aac]\" --dump-single-json --no-playlist -- \"[shell_url_scrub(web_sound_input)]\"") + var/errorlevel = output[SHELLEO_ERRORLEVEL] + var/stdout = output[SHELLEO_STDOUT] + var/stderr = output[SHELLEO_STDERR] - if(errorlevel) - to_chat(src, SPAN_WARNING("Youtube-dl URL retrieval FAILED: [stderr]")) - return + if(errorlevel) + to_chat(src, SPAN_WARNING("Youtube-dl URL retrieval FAILED: [stderr]")) + return - var/list/data = list() - try - data = json_decode(stdout) - catch(var/exception/e) - to_chat(src, SPAN_WARNING("Youtube-dl JSON parsing FAILED: [e]: [stdout]")) - return + try + data = json_decode(stdout) + catch(var/exception/e) + to_chat(src, SPAN_WARNING("Youtube-dl JSON parsing FAILED: [e]: [stdout]")) + return + + else if(sound_mode == "Upload") + var/current_transport = CONFIG_GET(string/asset_transport) + if(!current_transport || current_transport == "simple") + if(tgui_alert(usr, "WARNING: Your server is using simple asset transport. Sounds will have to be sent directly to players, which may freeze the game for long durations. Are you SURE?", "Really play direct sound?", list("Yes", "No")) != "Yes") + return + must_send_assets = TRUE + + var/soundfile = input(usr, "Choose a sound file to play", "Upload Sound") as null|file + if(!soundfile) + return + + var/static/regex/only_extension = regex(@{"^.*\.([a-z0-9]{1,5})$"}, "gi") + var/extension = only_extension.Replace("[soundfile]", "$1") + if(!length(extension)) + to_chat(src, SPAN_WARNING("Invalid filename extension.")) + return + + var/static/playsound_notch = 1 + asset_name = "admin_sound_[playsound_notch++].[extension]" + SSassets.transport.register_asset(asset_name, soundfile) + message_admins("[key_name_admin(src)] uploaded admin sound '[soundfile]' to asset transport.") + + var/static/regex/remove_extension = regex(@{"\.[a-z0-9]+$"}, "gi") + data["title"] = remove_extension.Replace("[soundfile]", "") + data["url"] = SSassets.transport.get_asset_url(asset_name) + web_sound_input = "[soundfile]" + log_title = FALSE + var/title + var/web_sound_url = "" + var/list/music_extra_data = list() if(data["url"]) music_extra_data["link"] = data["url"] music_extra_data["title"] = data["title"] @@ -48,19 +86,28 @@ music_extra_data["start"] = data["start_time"] music_extra_data["end"] = data["end_time"] - if(web_sound_url && !findtext(web_sound_url, GLOB.is_http_protocol)) + if(!must_send_assets && web_sound_url && !findtext(web_sound_url, GLOB.is_http_protocol)) to_chat(src, SPAN_BOLDWARNING("BLOCKED: Content URL not using http(s) protocol"), confidential = TRUE) to_chat(src, SPAN_WARNING("The media provider returned a content URL that isn't using the HTTP or HTTPS protocol"), confidential = TRUE) return + switch(tgui_alert(src, "Show the name of this sound to the players?", "Sound Name", list("Yes","No","Cancel"))) + if("No") + music_extra_data["title"] = "Admin sound" + announce_title = FALSE + if("Cancel") + return + var/list/targets = list() var/list/sound_type_list = list( "Meme" = SOUND_ADMIN_MEME, "Atmospheric" = SOUND_ADMIN_ATMOSPHERIC ) - var/style = tgui_input_list(src, "Who do you want to play this to?", "Select Listeners", list("Globally", "Xenos", "Marines", "Ghosts", "All Inview", "Single Inview")) + + var/style = tgui_input_list(src, "Who do you want to play this to?", "Select Listeners", list("Globally", "Xenos", "Marines", "Ghosts", "All In View Range", "Single Mob")) var/sound_type = tgui_input_list(src, "What kind of sound is this?", "Select Sound Type", sound_type_list) sound_type = sound_type_list[sound_type] + switch(style) if("Globally") targets = GLOB.mob_list @@ -70,30 +117,40 @@ targets = GLOB.human_mob_list + GLOB.dead_mob_list if("Ghosts") targets = GLOB.observer_list + GLOB.dead_mob_list - if("All Inview") - targets = viewers(usr.client.view, src) - if("Single Inview") - var/mob/choice = tgui_input_list(src, "Select the mob to play to:","Select Mob", sortmobs()) + if("All In View Range") + var/list/atom/ranged_atoms = urange(usr.client.view, get_turf(usr)) + for(var/mob/receiver in ranged_atoms) + targets += receiver + if("Single Mob") + var/list/mob/all_mobs = sortmobs() + var/list/mob/all_client_mobs = list() + for(var/mob/mob in all_mobs) + if(mob.client) + all_client_mobs += mob + var/mob/choice = tgui_input_list(src, "Select the mob to play to:","Select Mob", all_client_mobs) if(QDELETED(choice)) return targets.Add(choice) else return - for(var/i in targets) - var/mob/M = i - var/client/client = M?.client - if((client?.prefs.toggles_sound & SOUND_INTERNET) && (client?.prefs.toggles_sound & sound_type)) + for(var/mob/mob as anything in targets) + var/client/client = mob?.client + if((client?.prefs?.toggles_sound & SOUND_MIDI) && (client?.prefs?.toggles_sound & sound_type)) + if(must_send_assets) + SSassets.transport.send_assets(client, asset_name) client?.tgui_panel?.play_music(web_sound_url, music_extra_data) + if(announce_title) + to_chat(client, SPAN_BOLDANNOUNCE("An admin played: [music_extra_data["title"]]"), confidential = TRUE) else client?.tgui_panel?.stop_music() - log_admin("[key_name(src)] played web sound: [web_sound_input] - [title] - [style]") - message_admins("[key_name_admin(src)] played web sound: [web_sound_input] - [title] - [style]") + log_admin("[key_name(src)] played admin sound: [web_sound_input] -[log_title ? " [title] -" : ""] [style]") + message_admins("[key_name_admin(src)] played admin sound: [web_sound_input] -[log_title ? " [title] -" : ""] [style]") -/client/proc/stop_web_sound() +/client/proc/stop_admin_sound() set category = "Admin.Fun" - set name = "Stop Internet Sounds" + set name = "Stop Admin Sounds" if(!check_rights(R_SOUNDS)) return @@ -105,86 +162,3 @@ log_admin("[key_name(src)] stopped the currently playing web sounds.") message_admins("[key_name_admin(src)] stopped the currently playing web sounds.") -/client/proc/play_sound(S as sound) - set category = "Admin.Fun" - set name = "Play Midi Sound" - if(!check_rights(R_SOUNDS)) - return - - var/freq = 1 - var/vol = tgui_input_number(src, "What volume would you like the sound to play at?", "Volume", 25, 100, 1) - if(!vol) - return - vol = clamp(vol, 1, 100) - - var/sound/admin_sound = new() - admin_sound.file = S - admin_sound.priority = 250 - admin_sound.channel = SOUND_CHANNEL_ADMIN_MIDI - admin_sound.frequency = freq - admin_sound.wait = 1 - admin_sound.repeat = FALSE - admin_sound.status = SOUND_STREAM - admin_sound.volume = vol - - var/showtitle = FALSE - var/res = alert(src, "Show the title of this song to the players?",, "Yes","No", "Cancel") - switch(res) - if("Yes") - showtitle = TRUE - if("Cancel") - return - - var/list/targets = list() - var/list/sound_type_list = list( - "Meme" = SOUND_ADMIN_MEME, - "Atmospheric" = SOUND_ADMIN_ATMOSPHERIC - ) - var/style = tgui_input_list(src, "Who do you want to play this to?", "Select Listeners", list("Globally", "Xenos", "Marines", "Ghosts", "All Inview", "Single Inview")) - var/sound_type = tgui_input_list(src, "What kind of sound is this?", "Select Sound Type", sound_type_list) - sound_type = sound_type_list[sound_type] - switch(style) - if("Globally") - targets = GLOB.mob_list - if("Xenos") - targets = GLOB.xeno_mob_list + GLOB.dead_mob_list - if("Marines") - targets = GLOB.human_mob_list + GLOB.dead_mob_list - if("Ghosts") - targets = GLOB.observer_list + GLOB.dead_mob_list - if("All Inview") - targets = viewers(usr.client.view, src) - if("Single Inview") - var/mob/choice = tgui_input_list(src, "Select the mob to play to:","Select Mob", sortmobs()) - if(QDELETED(choice)) - return - targets.Add(choice) - else - return - - for(var/items in targets) - var/mob/Mob = items - var/client/client = Mob?.client - if((client?.prefs.toggles_sound & SOUND_INTERNET) && (client?.prefs.toggles_sound & sound_type)) - admin_sound.volume = vol * client?.admin_music_volume - SEND_SOUND(Mob, admin_sound) - admin_sound.volume = vol - if(showtitle) - to_chat(client, SPAN_BOLDANNOUNCE("An admin played: [S]"), confidential = TRUE) - - log_admin("[key_name(src)] played midi sound [S] - [style]") - message_admins("[key_name_admin(src)] played midi sound [S] - [style]") - -/client/proc/stop_sound() - set category = "Admin.Fun" - set name = "Stop Midi Sounds" - - if(!check_rights(R_SOUNDS)) - return - - for(var/mob/M in GLOB.player_list) - if(M.client) - SEND_SOUND(M, sound(null)) - - log_admin("[key_name(src)] stopped midi sounds.") - message_admins("[key_name_admin(src)] stopped midi sounds.") diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index e0210e4577a0..66ed690a0e80 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -17,13 +17,14 @@ liaison = 1 if(liaison) - msg = SPAN_STAFF_IC("LIAISON: [key_name(src, 1)] [CC_MARK(src)] [ADMIN_PP(src)] [ADMIN_VV(src)] [ADMIN_SM(src)] [ADMIN_JMP_USER(src)] [ADMIN_SC(src)]: [msg]") + msg = "[SPAN_STAFF_IC("LIAISON:")][key_name(src, 1)] [CC_MARK(src)] [ADMIN_PP(src)] [ADMIN_VV(src)] [ADMIN_SM(src)] [ADMIN_JMP_USER(src)] [ADMIN_SC(src)]: [msg]" else - msg = SPAN_STAFF_IC("PRAY: [key_name(src, 1)] [CC_MARK(src)] [ADMIN_PP(src)] [ADMIN_VV(src)] [ADMIN_SM(src)] [ADMIN_JMP_USER(src)] [ADMIN_SC(src)]: [msg]") + msg = "[SPAN_STAFF_IC("PRAY: ")][key_name(src, 1)] [CC_MARK(src)] [ADMIN_PP(src)] [ADMIN_VV(src)] [ADMIN_SM(src)] [ADMIN_JMP_USER(src)] [ADMIN_SC(src)]: [msg]" log_admin(msg) for(var/client/C in GLOB.admins) if(AHOLD_IS_MOD(C.admin_holder) && C.prefs.toggles_chat & CHAT_PRAYER) to_chat(C, msg) + C << 'sound/machines/terminal_alert.ogg' if(liaison) to_chat(usr, "Your corporate overlords at Weyland-Yutani have received your message.") else @@ -31,7 +32,7 @@ /proc/high_command_announce(text , mob/Sender , iamessage) var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN) - msg = "[SPAN_STAFF_IC("USCM[iamessage ? "IA" : ""]:")][key_name(Sender, 1)] [CC_MARK(Sender)] [ADMIN_PP(Sender)] [ADMIN_VV(Sender)] [ADMIN_SM(Sender)] [ADMIN_JMP_USER(Sender)] [CC_REPLY(Sender)]: [msg]" + msg = "[SPAN_STAFF_IC("USCM[iamessage ? "IA" : ""]:")][key_name(Sender, 1)] [CC_MARK(Sender)] [ADMIN_PP(Sender)] [ADMIN_VV(Sender)] [ADMIN_SM(Sender)] [ADMIN_JMP_USER(Sender)] [CC_REPLY(Sender)]: [msg]" log_admin(msg) for(var/client/C in GLOB.admins) if((R_ADMIN|R_MOD) & C.admin_holder.rights) diff --git a/code/modules/admin/verbs/select_equipment.dm b/code/modules/admin/verbs/select_equipment.dm index b684fc0d6f95..7e78652c5c35 100644 --- a/code/modules/admin/verbs/select_equipment.dm +++ b/code/modules/admin/verbs/select_equipment.dm @@ -5,7 +5,7 @@ alert("Invalid mob") return - var/rank_list = list("Custom", "Weyland-Yutani") + RoleAuthority.roles_by_name + var/rank_list = list("Custom", "Weyland-Yutani") + GLOB.RoleAuthority.roles_by_name var/newrank = tgui_input_list(usr, "Select new rank for [H]", "Change the mob's rank and skills", rank_list) if (!newrank) @@ -14,8 +14,8 @@ return var/obj/item/card/id/I = H.wear_id - if(RoleAuthority.roles_by_name[newrank]) - var/datum/job/J = RoleAuthority.roles_by_name[newrank] + if(GLOB.RoleAuthority.roles_by_name[newrank]) + var/datum/job/J = GLOB.RoleAuthority.roles_by_name[newrank] H.comm_title = J.get_comm_title() H.set_skills(J.get_skills()) if(istype(I)) @@ -44,14 +44,14 @@ H.faction = FACTION_WY H.faction_group = FACTION_LIST_WY - var/newskillset = tgui_input_list(usr, "Select a skillset", "Skill Set", (list("Keep Skillset") +RoleAuthority.roles_by_name)) + var/newskillset = tgui_input_list(usr, "Select a skillset", "Skill Set", (list("Keep Skillset") +GLOB.RoleAuthority.roles_by_name)) if(!newskillset || newskillset == "Keep Skillset") return if(!H) return - var/datum/job/J = RoleAuthority.roles_by_name[newskillset] + var/datum/job/J = GLOB.RoleAuthority.roles_by_name[newskillset] H.set_skills(J.get_skills()) if("Custom") @@ -88,14 +88,14 @@ new_faction = FACTION_NEUTRAL H.faction = new_faction - var/newskillset = tgui_input_list(usr, "Select a skillset", "Skill Set", RoleAuthority.roles_by_name) + var/newskillset = tgui_input_list(usr, "Select a skillset", "Skill Set", GLOB.RoleAuthority.roles_by_name) if(!newskillset) return if(!H) return - var/datum/job/J = RoleAuthority.roles_by_name[newskillset] + var/datum/job/J = GLOB.RoleAuthority.roles_by_name[newskillset] H.set_skills(J.get_skills()) /client/proc/cmd_admin_dress(mob/M) diff --git a/code/modules/almayer/machinery.dm b/code/modules/almayer/machinery.dm index cb90db9e8535..74ce9a81eb88 100644 --- a/code/modules/almayer/machinery.dm +++ b/code/modules/almayer/machinery.dm @@ -80,13 +80,19 @@ use_power = USE_POWER_IDLE density = TRUE idle_power_usage = 2 - ///flags that we want to be shown when you interact with this table var/datum/tacmap/map + ///flags that we want to be shown when you interact with this table var/minimap_type = MINIMAP_FLAG_USCM + ///The faction that is intended to use this structure (determines type of tacmap used) + var/faction = FACTION_MARINE /obj/structure/machinery/prop/almayer/CICmap/Initialize() . = ..() - map = new(src, minimap_type) + + if (faction == FACTION_MARINE) + map = new /datum/tacmap/drawing(src, minimap_type) + else + map = new(src, minimap_type) // Non-drawing version /obj/structure/machinery/prop/almayer/CICmap/Destroy() QDEL_NULL(map) @@ -99,12 +105,15 @@ /obj/structure/machinery/prop/almayer/CICmap/upp minimap_type = MINIMAP_FLAG_UPP + faction = FACTION_UPP /obj/structure/machinery/prop/almayer/CICmap/clf minimap_type = MINIMAP_FLAG_CLF + faction = FACTION_CLF /obj/structure/machinery/prop/almayer/CICmap/pmc minimap_type = MINIMAP_FLAG_PMC + faction = FACTION_PMC //Nonpower using props @@ -196,7 +205,7 @@ var/obj/item/dogtag/D = I if(D.fallen_names) to_chat(user, SPAN_NOTICE("You add [D] to [src].")) - fallen_list += D.fallen_names + GLOB.fallen_list += D.fallen_names qdel(D) return TRUE else @@ -204,13 +213,13 @@ /obj/structure/prop/almayer/ship_memorial/get_examine_text(mob/user) . = ..() - if((isobserver(user) || ishuman(user)) && fallen_list) + if((isobserver(user) || ishuman(user)) && GLOB.fallen_list) var/faltext = "" - for(var/i = 1 to fallen_list.len) - if(i != fallen_list.len) - faltext += "[fallen_list[i]], " + for(var/i = 1 to GLOB.fallen_list.len) + if(i != GLOB.fallen_list.len) + faltext += "[GLOB.fallen_list[i]], " else - faltext += fallen_list[i] + faltext += GLOB.fallen_list[i] . += SPAN_NOTICE("To our fallen soldiers: [faltext].") /obj/structure/prop/almayer/particle_cannon diff --git a/code/modules/almayer/shakeship.dm b/code/modules/almayer/shakeship.dm index c3f359c9a77c..29d9b7a762f8 100644 --- a/code/modules/almayer/shakeship.dm +++ b/code/modules/almayer/shakeship.dm @@ -35,7 +35,7 @@ playsound_client(current_mob.client, 'sound/effects/bigboom3.ogg', 100) if(drop) - INVOKE_ASYNC(current_mob, TYPE_PROC_REF(/atom/movable, throw_atom), get_ranged_target_turf(current_mob, pick(cardinal), sstrength-5), pick(cardinal), sstrength) + INVOKE_ASYNC(current_mob, TYPE_PROC_REF(/atom/movable, throw_atom), get_ranged_target_turf(current_mob, pick(GLOB.cardinals), sstrength-5), pick(GLOB.cardinals), sstrength) to_chat(current_mob, SPAN_HIGHDANGER("YOU ARE THROWN AROUND VIOLENTLY AND HIT THE DECK WITH FULL FORCE!!")) if(current_mob.client && osound) diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index d1e7f83dacb1..300c999b885b 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -147,6 +147,7 @@ "cmblogo.png" = 'html/images/cmblogo.png', "faxwylogo.png" = 'html/images/faxwylogo.png', "faxbackground.jpg" = 'html/images/faxbackground.jpg', + "colonialspacegruntsEZ.png" = 'html/images/colonialspacegruntsEZ.png', ) /datum/asset/spritesheet/chat @@ -285,7 +286,7 @@ list("SL", "hudsquad_leader"), ) - for(var/datum/squad/marine/squad in RoleAuthority.squads) + for(var/datum/squad/marine/squad in GLOB.RoleAuthority.squads) var/color = squad.equipment_color for(var/iref in icon_data) var/list/iconref = iref @@ -314,7 +315,9 @@ log_debug("not atom! [item]") continue - if (sprites[icon_file]) + var/imgid = replacetext(replacetext("[k]", "/obj/item/", ""), "/", "-") + + if(sprites[imgid]) continue if(icon_state in icon_states(icon_file)) @@ -338,7 +341,6 @@ item = new k() I = icon(item.icon, item.icon_state, SOUTH) qdel(item) - var/imgid = replacetext(replacetext("[k]", "/obj/item/", ""), "/", "-") Insert(imgid, I) return ..() diff --git a/code/modules/buildmode/submodes/variable_edit.dm b/code/modules/buildmode/submodes/variable_edit.dm index da4620b157a6..7517012583da 100644 --- a/code/modules/buildmode/submodes/variable_edit.dm +++ b/code/modules/buildmode/submodes/variable_edit.dm @@ -44,7 +44,7 @@ if(TYPE_OBJ_REFERENCE) selected_value = input(usr,"Enter variable value:" ,"Value") as obj in world if(TYPE_TURF_REFERENCE) - selected_value = input(usr,"Enter variable value:" ,"Value") as turf in turfs + selected_value = input(usr,"Enter variable value:" ,"Value") as turf in GLOB.turfs #undef TYPE_TEXT #undef TYPE_NUMBER diff --git a/code/modules/character_traits/biology_traits.dm b/code/modules/character_traits/biology_traits.dm index e5801a07b510..efd894fe20cf 100644 --- a/code/modules/character_traits/biology_traits.dm +++ b/code/modules/character_traits/biology_traits.dm @@ -58,11 +58,11 @@ to_chat(target, SPAN_WARNING("Your species is too sophisticated for you be able to recieve the lisping trait.")) return - ADD_TRAIT(target, TRAIT_LISPING, TRAIT_SOURCE_QUIRK) + ADD_TRAIT(target, TRAIT_LISPING, ROUNDSTART_TRAIT) ..() /datum/character_trait/biology/lisp/unapply_trait(mob/living/carbon/human/target) - REMOVE_TRAIT(target, TRAIT_LISPING, TRAIT_SOURCE_QUIRK) + REMOVE_TRAIT(target, TRAIT_LISPING, ROUNDSTART_TRAIT) ..() /datum/character_trait/biology/bad_leg @@ -124,9 +124,9 @@ to_chat(target, SPAN_WARNING("Only riflemen can have the Hardcore trait.")) return - ADD_TRAIT(target, TRAIT_HARDCORE, TRAIT_SOURCE_QUIRK) + ADD_TRAIT(target, TRAIT_HARDCORE, ROUNDSTART_TRAIT) ..() /datum/character_trait/biology/hardcore/unapply_trait(mob/living/carbon/human/target) - REMOVE_TRAIT(target, TRAIT_HARDCORE, TRAIT_SOURCE_QUIRK) + REMOVE_TRAIT(target, TRAIT_HARDCORE, ROUNDSTART_TRAIT) ..() diff --git a/code/modules/clans/client.dm b/code/modules/clans/client.dm index d1f403c08300..c46adf89711a 100644 --- a/code/modules/clans/client.dm +++ b/code/modules/clans/client.dm @@ -5,12 +5,12 @@ set waitfor = FALSE . = ..() - if(RoleAuthority && (RoleAuthority.roles_whitelist[ckey] & WHITELIST_PREDATOR)) + if(GLOB.RoleAuthority && (GLOB.RoleAuthority.roles_whitelist[ckey] & WHITELIST_PREDATOR)) clan_info = GET_CLAN_PLAYER(player.id) clan_info.sync() - if(RoleAuthority.roles_whitelist[ckey] & WHITELIST_YAUTJA_LEADER) - clan_info.clan_rank = clan_ranks_ordered[CLAN_RANK_ADMIN] + if(GLOB.RoleAuthority.roles_whitelist[ckey] & WHITELIST_YAUTJA_LEADER) + clan_info.clan_rank = GLOB.clan_ranks_ordered[CLAN_RANK_ADMIN] clan_info.permissions |= CLAN_PERMISSION_ALL else clan_info.permissions &= ~CLAN_PERMISSION_ADMIN_MANAGER // Only the leader can manage the ancients @@ -157,7 +157,7 @@ var/list/player = list( player_id = CP.player_id, name = CP.ckey, - rank = clan_ranks[CP.clan_rank], // rank_to_give not used here, because we need to get their visual rank, not their position + rank = GLOB.clan_ranks[CP.clan_rank], // rank_to_give not used here, because we need to get their visual rank, not their position rank_pos = rank_to_give, honor = (CP.honor? CP.honor : 0) ) @@ -166,7 +166,7 @@ data["clan_keys"] = clan_members - var/datum/nanoui/ui = nanomanager.try_update_ui(mob, mob, "clan_status_ui", null, data) + var/datum/nanoui/ui = SSnano.nanomanager.try_update_ui(mob, mob, "clan_status_ui", null, data) if(!ui) ui = new(mob, mob, "clan_status_ui", "clan_menu.tmpl", "Clan Menu", 550, 500) ui.set_initial_data(data) @@ -295,8 +295,8 @@ pl.sync() pl.clan_id = null - pl.permissions = clan_ranks[CLAN_RANK_UNBLOODED].permissions - pl.clan_rank = clan_ranks_ordered[CLAN_RANK_UNBLOODED] + pl.permissions = GLOB.clan_ranks[CLAN_RANK_UNBLOODED].permissions + pl.clan_rank = GLOB.clan_ranks_ordered[CLAN_RANK_UNBLOODED] pl.save() @@ -377,16 +377,16 @@ if(input == "Remove from clan" && target.clan_id) target.clan_id = null - target.clan_rank = clan_ranks_ordered[CLAN_RANK_YOUNG] + target.clan_rank = GLOB.clan_ranks_ordered[CLAN_RANK_YOUNG] to_chat(src, SPAN_NOTICE("Removed [player_name] from their clan.")) log_and_message_admins("[key_name_admin(src)] has removed [player_name] from their current clan.") else if(input == "Remove from Ancient") - target.clan_rank = clan_ranks_ordered[CLAN_RANK_YOUNG] - target.permissions = clan_ranks[CLAN_RANK_YOUNG].permissions + target.clan_rank = GLOB.clan_ranks_ordered[CLAN_RANK_YOUNG] + target.permissions = GLOB.clan_ranks[CLAN_RANK_YOUNG].permissions to_chat(src, SPAN_NOTICE("Removed [player_name] from ancient.")) log_and_message_admins("[key_name_admin(src)] has removed [player_name] from ancient.") else if(input == "Make Ancient" && is_clan_manager) - target.clan_rank = clan_ranks_ordered[CLAN_RANK_ADMIN] + target.clan_rank = GLOB.clan_ranks_ordered[CLAN_RANK_ADMIN] target.permissions = CLAN_PERMISSION_ADMIN_ANCIENT to_chat(src, SPAN_NOTICE("Made [player_name] an ancient.")) log_and_message_admins("[key_name_admin(src)] has made [player_name] an ancient.") @@ -397,15 +397,15 @@ target.clan_id = clans[input] if(!(target.permissions & CLAN_PERMISSION_ADMIN_ANCIENT)) - target.permissions = clan_ranks[CLAN_RANK_BLOODED].permissions - target.clan_rank = clan_ranks_ordered[CLAN_RANK_BLOODED] + target.permissions = GLOB.clan_ranks[CLAN_RANK_BLOODED].permissions + target.clan_rank = GLOB.clan_ranks_ordered[CLAN_RANK_BLOODED] if(CLAN_ACTION_PLAYER_MODIFYRANK) if(!target.clan_id) to_chat(src, SPAN_WARNING("This player doesn't belong to a clan!")) return - var/list/datum/yautja_rank/ranks = clan_ranks.Copy() + var/list/datum/yautja_rank/ranks = GLOB.clan_ranks.Copy() ranks -= CLAN_RANK_ADMIN // Admin rank should not and cannot be obtained from here var/datum/yautja_rank/chosen_rank @@ -430,7 +430,7 @@ chosen_rank = ranks[input] if(chosen_rank.limit_type) - var/list/datum/view_record/clan_playerbase_view/CPV = DB_VIEW(/datum/view_record/clan_playerbase_view/, DB_AND(DB_COMP("clan_id", DB_EQUALS, target.clan_id), DB_COMP("rank", DB_EQUALS, clan_ranks_ordered[input]))) + var/list/datum/view_record/clan_playerbase_view/CPV = DB_VIEW(/datum/view_record/clan_playerbase_view/, DB_AND(DB_COMP("clan_id", DB_EQUALS, target.clan_id), DB_COMP("rank", DB_EQUALS, GLOB.clan_ranks_ordered[input]))) var/players_in_rank = CPV.len switch(chosen_rank.limit_type) @@ -453,7 +453,7 @@ if(!has_clan_permission(chosen_rank.permission_required)) // Double check return - target.clan_rank = clan_ranks_ordered[chosen_rank.name] + target.clan_rank = GLOB.clan_ranks_ordered[chosen_rank.name] target.permissions = chosen_rank.permissions log_and_message_admins("[key_name_admin(src)] has set the rank of [player_name] to [chosen_rank.name] for their clan.") to_chat(src, SPAN_NOTICE("Set [player_name]'s rank to [chosen_rank.name]")) diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 9268cd3aadba..e1dbd1f026c1 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -147,7 +147,6 @@ GLOBAL_LIST_INIT(whitelisted_client_procs, list( return cmd_admin_pm(receiver_client, null) return - else if(href_list["FaxView"]) var/datum/fax/info = locate(href_list["FaxView"]) @@ -164,6 +163,14 @@ GLOBAL_LIST_INIT(whitelisted_client_procs, list( else if(href_list["medals_panel"]) GLOB.medals_panel.tgui_interact(mob) + else if(href_list["tacmaps_panel"]) + GLOB.tacmap_admin_panel.tgui_interact(mob) + + else if(href_list["MapView"]) + if(isxeno(mob)) + return + GLOB.uscm_tacmap_status.tgui_interact(mob) + //NOTES OVERHAUL if(href_list["add_merit_info"]) var/key = href_list["add_merit_info"] @@ -311,20 +318,20 @@ GLOBAL_LIST_INIT(whitelisted_client_procs, list( if(isnull(address) || (address in localhost_addresses)) var/datum/admins/admin = new("!localhost!", RL_HOST, ckey) admin.associate(src) - RoleAuthority.roles_whitelist[ckey] = WHITELIST_EVERYTHING + GLOB.RoleAuthority.roles_whitelist[ckey] = WHITELIST_EVERYTHING //Admin Authorisation - admin_holder = admin_datums[ckey] + admin_holder = GLOB.admin_datums[ckey] if(admin_holder) admin_holder.associate(src) notify_login() add_pref_verbs() //preferences datum - also holds some persistent data for the client (because we may as well keep these datums to a minimum) - prefs = preferences_datums[ckey] + prefs = GLOB.preferences_datums[ckey] if(QDELETED(prefs) || !istype(prefs)) prefs = new /datum/preferences(src) - preferences_datums[ckey] = prefs + GLOB.preferences_datums[ckey] = prefs prefs.client_reconnected(src) prefs.last_ip = address //these are gonna be used for banning prefs.last_id = computer_id //these are gonna be used for banning @@ -344,7 +351,7 @@ GLOBAL_LIST_INIT(whitelisted_client_procs, list( player_details.byond_version = full_version GLOB.player_details[ckey] = player_details - view = world_view_size + view = GLOB.world_view_size . = ..() //calls mob.Login() if(SSinput.initialized) @@ -398,10 +405,6 @@ GLOBAL_LIST_INIT(whitelisted_client_procs, list( CEI = GLOB.custom_event_info_list[mob.faction] CEI.show_player_event_info(src) - if( (world.address == address || !address) && !host ) - host = key - world.update_status() - connection_time = world.time winset(src, null, "command=\".configure graphics-hwmode on\"") @@ -435,7 +438,7 @@ GLOBAL_LIST_INIT(whitelisted_client_procs, list( load_player_data() - view = world_view_size + view = GLOB.world_view_size SEND_GLOBAL_SIGNAL(COMSIG_GLOB_CLIENT_LOGIN, src) @@ -527,17 +530,17 @@ GLOBAL_LIST_INIT(whitelisted_client_procs, list( /proc/setup_player_entity(ckey) if(!ckey) return - if(player_entities["[ckey]"]) - return player_entities["[ckey]"] + if(GLOB.player_entities["[ckey]"]) + return GLOB.player_entities["[ckey]"] var/datum/entity/player_entity/P = new() P.ckey = ckey P.name = ckey - player_entities["[ckey]"] = P + GLOB.player_entities["[ckey]"] = P // P.setup_save(ckey) return P /proc/save_player_entities() - for(var/key_ref in player_entities) + for(var/key_ref in GLOB.player_entities) // var/datum/entity/player_entity/P = player_entities["[key_ref]"] // P.save_statistics() log_debug("STATISTICS: Statistics saving complete.") diff --git a/code/modules/client/country_flags.dm b/code/modules/client/country_flags.dm index 7d49bf836977..4955c446aea1 100644 --- a/code/modules/client/country_flags.dm +++ b/code/modules/client/country_flags.dm @@ -26,10 +26,10 @@ else //null response, ratelimited most likely. Try again in 60s addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(ip2country), ipaddr, origin), 60 SECONDS) -var/list/countries = icon_states('icons/flags.dmi') +GLOBAL_LIST_INIT(countries, icon_states('icons/flags.dmi')) /proc/country2chaticon(country_code, targets) - if(countries.Find(country_code)) + if(GLOB.countries.Find(country_code)) return "[icon2html('icons/flags.dmi', targets, country_code)]" else return "[icon2html('icons/flags.dmi', targets, "unknown")]" diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 04b82628e3c6..6c52b497f9a3 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -7,7 +7,7 @@ #define MENU_SETTINGS "settings" #define MENU_SPECIAL "special" -var/list/preferences_datums = list() +GLOBAL_LIST_EMPTY(preferences_datums) GLOBAL_LIST_INIT(stylesheets, list( "Modern" = "common.css", @@ -21,7 +21,7 @@ GLOBAL_LIST_INIT(bgstate_options, list( "whitefull" )) -var/const/MAX_SAVE_SLOTS = 10 +#define MAX_SAVE_SLOTS 10 /datum/preferences var/client/owner @@ -306,13 +306,13 @@ var/const/MAX_SAVE_SLOTS = 10 dat += "
    " dat += "Human - " dat += "Xenomorph - " - if(RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_COMMANDER) + if(GLOB.RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_COMMANDER) dat += "Commanding Officer - " - if(RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_SYNTHETIC) + if(GLOB.RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_SYNTHETIC) dat += "Synthetic - " - if(RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_PREDATOR) + if(GLOB.RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_PREDATOR) dat += "Yautja - " - if(RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_MENTOR) + if(GLOB.RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_MENTOR) dat += "Mentor - " dat += "Settings - " dat += "Special Roles" @@ -382,7 +382,7 @@ var/const/MAX_SAVE_SLOTS = 10 dat += "Underwear: [underwear]
    " dat += "Undershirt: [undershirt]
    " - dat += "Backpack Type: [backbaglist[backbag]]
    " + dat += "Backpack Type: [GLOB.backbaglist[backbag]]
    " dat += "Preferred Armor: [preferred_armor]
    " @@ -398,7 +398,7 @@ var/const/MAX_SAVE_SLOTS = 10 if(length(gear)) dat += "
    " for(var/i = 1; i <= gear.len; i++) - var/datum/gear/G = gear_datums_by_name[gear[i]] + var/datum/gear/G = GLOB.gear_datums_by_name[gear[i]] if(G) total_cost += G.cost dat += "[gear[i]] ([G.cost] points) Remove
    " @@ -482,7 +482,7 @@ var/const/MAX_SAVE_SLOTS = 10 n++ if(MENU_CO) - if(RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_COMMANDER) + if(GLOB.RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_COMMANDER) dat += "
    " dat += "

    Commander Settings:

    " dat += "Commander Whitelist Status: [commander_status]
    " @@ -492,7 +492,7 @@ var/const/MAX_SAVE_SLOTS = 10 else dat += "You do not have the whitelist for this role." if(MENU_SYNTHETIC) - if(RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_SYNTHETIC) + if(GLOB.RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_SYNTHETIC) dat += "
    " dat += "

    Synthetic Settings:

    " dat += "Synthetic Name: [synthetic_name]
    " @@ -502,7 +502,7 @@ var/const/MAX_SAVE_SLOTS = 10 else dat += "You do not have the whitelist for this role." if(MENU_YAUTJA) - if(RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_PREDATOR) + if(GLOB.RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_PREDATOR) dat += "
    " dat += "

    Yautja Information:

    " dat += "Yautja Name: [predator_name]
    " @@ -516,7 +516,7 @@ var/const/MAX_SAVE_SLOTS = 10 dat += "
    " dat += "

    Equipment Setup:

    " - if(RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_YAUTJA_LEGACY) + if(GLOB.RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_YAUTJA_LEGACY) dat += "Legacy Gear: [predator_use_legacy]
    " dat += "Translator Type: [predator_translator_type]
    " dat += "Mask Style: ([predator_mask_type])
    " @@ -540,7 +540,7 @@ var/const/MAX_SAVE_SLOTS = 10 else dat += "You do not have the whitelist for this role." if(MENU_MENTOR) - if(RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_MENTOR) + if(GLOB.RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_MENTOR) dat += "Nothing here. For now." else dat += "You do not have the whitelist for this role." @@ -586,8 +586,7 @@ var/const/MAX_SAVE_SLOTS = 10 dat += "Tooltips: [tooltips ? "Enabled" : "Disabled"]
    " dat += "tgui Window Mode: [(tgui_fancy) ? "Fancy (default)" : "Compatible (slower)"]
    " dat += "tgui Window Placement: [(tgui_lock) ? "Primary monitor" : "Free (default)"]
    " - dat += "Play Admin Midis: [(toggles_sound & SOUND_MIDI) ? "Yes" : "No"]
    " - dat += "Play Admin Internet Sounds: [(toggles_sound & SOUND_INTERNET) ? "Yes" : "No"]
    " + dat += "Play Admin Sounds: [(toggles_sound & SOUND_MIDI) ? "Yes" : "No"]
    " dat += "Toggle Meme or Atmospheric Sounds: Toggle
    " dat += "Set Eye Blur Type: Set
    " dat += "Play Lobby Music: [(toggles_sound & SOUND_LOBBY) ? "Yes" : "No"]
    " @@ -634,7 +633,7 @@ var/const/MAX_SAVE_SLOTS = 10 dat += "Spawn as Engineer: [toggles_ert & PLAY_ENGINEER ? "Yes" : "No"]
    " dat += "Spawn as Specialist: [toggles_ert & PLAY_HEAVY ? "Yes" : "No"]
    " dat += "Spawn as Smartgunner: [toggles_ert & PLAY_SMARTGUNNER ? "Yes" : "No"]
    " - if(RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_SYNTHETIC) + if(GLOB.RoleAuthority.roles_whitelist[user.ckey] & WHITELIST_SYNTHETIC) dat += "Spawn as Synth: [toggles_ert & PLAY_SYNTH ? "Yes" : "No"]
    " dat += "Spawn as Miscellaneous: [toggles_ert & PLAY_MISC ? "Yes" : "No"]
    " dat += "
    " @@ -650,7 +649,7 @@ var/const/MAX_SAVE_SLOTS = 10 //width - Screen' width. Defaults to 550 to make it look nice. //height - Screen's height. Defaults to 500 to make it look nice. /datum/preferences/proc/SetChoices(mob/user, limit = 19, list/splitJobs = list(JOB_CHIEF_REQUISITION), width = 950, height = 700) - if(!RoleAuthority) + if(!GLOB.RoleAuthority) return var/HTML = "" @@ -665,10 +664,10 @@ var/const/MAX_SAVE_SLOTS = 10 var/list/active_role_names = GLOB.gamemode_roles[GLOB.master_mode] if(!active_role_names) - active_role_names = ROLES_DISTRESS_SIGNAL + active_role_names = GLOB.ROLES_DISTRESS_SIGNAL for(var/role_name as anything in active_role_names) - var/datum/job/job = RoleAuthority.roles_by_name[role_name] + var/datum/job/job = GLOB.RoleAuthority.roles_by_name[role_name] if(!job) debug_log("Missing job for prefs: [role_name]") continue @@ -682,7 +681,7 @@ var/const/MAX_SAVE_SLOTS = 10 if(jobban_isbanned(user, job.title)) HTML += "[job.disp_title]
    " continue - else if(job.flags_startup_parameters & ROLE_WHITELISTED && !(RoleAuthority.roles_whitelist[user.ckey] & job.flags_whitelist)) + else if(job.flags_startup_parameters & ROLE_WHITELISTED && !(GLOB.RoleAuthority.roles_whitelist[user.ckey] & job.flags_whitelist)) HTML += "[job.disp_title]" continue else if(!job.can_play_role(user.client)) @@ -763,7 +762,7 @@ var/const/MAX_SAVE_SLOTS = 10 //width - Screen' width. Defaults to 550 to make it look nice. //height - Screen's height. Defaults to 500 to make it look nice. /datum/preferences/proc/set_job_slots(mob/user, limit = 19, list/splitJobs = list(JOB_CHIEF_REQUISITION), width = 950, height = 700) - if(!RoleAuthority) + if(!GLOB.RoleAuthority) return var/HTML = "" @@ -778,10 +777,10 @@ var/const/MAX_SAVE_SLOTS = 10 var/list/active_role_names = GLOB.gamemode_roles[GLOB.master_mode] if(!active_role_names) - active_role_names = ROLES_DISTRESS_SIGNAL + active_role_names = GLOB.ROLES_DISTRESS_SIGNAL for(var/role_name as anything in active_role_names) - var/datum/job/job = RoleAuthority.roles_by_name[role_name] + var/datum/job/job = GLOB.RoleAuthority.roles_by_name[role_name] if(!job) debug_log("Missing job for prefs: [role_name]") continue @@ -794,7 +793,7 @@ var/const/MAX_SAVE_SLOTS = 10 if(jobban_isbanned(user, job.title)) HTML += "[job.disp_title]" continue - else if(job.flags_startup_parameters & ROLE_WHITELISTED && !(RoleAuthority.roles_whitelist[user.ckey] & job.flags_whitelist)) + else if(job.flags_startup_parameters & ROLE_WHITELISTED && !(GLOB.RoleAuthority.roles_whitelist[user.ckey] & job.flags_whitelist)) HTML += "[job.disp_title]" continue else if(!job.can_play_role(user.client)) @@ -874,7 +873,7 @@ var/const/MAX_SAVE_SLOTS = 10 return /datum/preferences/proc/SetJob(mob/user, role, priority) - var/datum/job/job = RoleAuthority.roles_by_name[role] + var/datum/job/job = GLOB.RoleAuthority.roles_by_name[role] if(!job) close_browser(user, "mob_occupation") ShowChoices(user) @@ -891,12 +890,12 @@ var/const/MAX_SAVE_SLOTS = 10 job_preference_list[job] = NEVER_PRIORITY return - if(!RoleAuthority) + if(!GLOB.RoleAuthority) return job_preference_list = list() - for(var/role in RoleAuthority.roles_by_path) - var/datum/job/J = RoleAuthority.roles_by_path[role] + for(var/role in GLOB.RoleAuthority.roles_by_path) + var/datum/job/J = GLOB.RoleAuthority.roles_by_path[role] job_preference_list[J.title] = NEVER_PRIORITY /datum/preferences/proc/get_job_priority(J) @@ -955,12 +954,12 @@ var/const/MAX_SAVE_SLOTS = 10 /datum/preferences/proc/reset_job_slots() pref_job_slots = list() var/datum/job/J - for(var/role in RoleAuthority.roles_by_path) - J = RoleAuthority.roles_by_path[role] + for(var/role in GLOB.RoleAuthority.roles_by_path) + J = GLOB.RoleAuthority.roles_by_path[role] pref_job_slots[J.title] = JOB_SLOT_CURRENT_SLOT /datum/preferences/proc/process_link(mob/user, list/href_list) - var/whitelist_flags = RoleAuthority.roles_whitelist[user.ckey] + var/whitelist_flags = GLOB.RoleAuthority.roles_whitelist[user.ckey] switch(href_list["preference"]) if("job") @@ -1007,10 +1006,10 @@ var/const/MAX_SAVE_SLOTS = 10 if("loadout") switch(href_list["task"]) if("input") - var/gear_category = tgui_input_list(user, "Select gear category: ", "Gear to add", gear_datums_by_category) + var/gear_category = tgui_input_list(user, "Select gear category: ", "Gear to add", GLOB.gear_datums_by_category) if(!gear_category) return - var/choice = tgui_input_list(user, "Select gear to add: ", gear_category, gear_datums_by_category[gear_category]) + var/choice = tgui_input_list(user, "Select gear to add: ", gear_category, GLOB.gear_datums_by_category[gear_category]) if(!choice) return @@ -1020,10 +1019,10 @@ var/const/MAX_SAVE_SLOTS = 10 gear = list() if(gear.len) for(var/gear_name in gear) - G = gear_datums_by_name[gear_name] + G = GLOB.gear_datums_by_name[gear_name] total_cost += G?.cost - G = gear_datums_by_category[gear_category][choice] + G = GLOB.gear_datums_by_category[gear_category][choice] total_cost += G.cost if(total_cost <= MAX_GEAR_COST) gear += G.display_name @@ -1283,8 +1282,8 @@ var/const/MAX_SAVE_SLOTS = 10 return predator_caster_material = new_pred_caster_mat if("pred_cape_type") - var/datum/job/J = RoleAuthority.roles_by_name[JOB_PREDATOR] - var/whitelist_status = clan_ranks_ordered[J.get_whitelist_status(RoleAuthority.roles_whitelist, owner)] + var/datum/job/J = GLOB.RoleAuthority.roles_by_name[JOB_PREDATOR] + var/whitelist_status = GLOB.clan_ranks_ordered[J.get_whitelist_status(GLOB.RoleAuthority.roles_whitelist, owner)] var/list/options = list("None" = "None") for(var/cape_name in GLOB.all_yautja_capes) @@ -1603,9 +1602,9 @@ var/const/MAX_SAVE_SLOTS = 10 ooccolor = new_ooccolor if("bag") - var/new_backbag = input(user, "Choose your character's style of bag:", "Character Preference") as null|anything in backbaglist + var/new_backbag = input(user, "Choose your character's style of bag:", "Character Preference") as null|anything in GLOB.backbaglist if(new_backbag) - backbag = backbaglist.Find(new_backbag) + backbag = GLOB.backbaglist.Find(new_backbag) if("nt_relation") var/new_relation = input(user, "Choose your relation to the Weyland-Yutani company. Note that this represents what others can find out about your character by researching your background, not what your character actually thinks.", "Character Preference") as null|anything in list("Loyal", "Supportive", "Neutral", "Skeptical", "Opposed") @@ -1621,6 +1620,8 @@ var/const/MAX_SAVE_SLOTS = 10 var/new_pref_armor = tgui_input_list(user, "Choose your character's default style of armor:", "Character Preferences", GLOB.armor_style_list) if(new_pref_armor) preferred_armor = new_pref_armor + // Update the dummy with the new armor style. + update_preview_icon() if("limbs") var/limb_name = tgui_input_list(user, "Which limb do you want to change?", list("Left Leg","Right Leg","Left Arm","Right Arm","Left Foot","Right Foot","Left Hand","Right Hand")) @@ -1706,7 +1707,7 @@ var/const/MAX_SAVE_SLOTS = 10 origin = choice if("religion") - var/choice = tgui_input_list(user, "Please choose a religion.", "Religion choice", religion_choices + "Other") + var/choice = tgui_input_list(user, "Please choose a religion.", "Religion choice", GLOB.religion_choices + "Other") if(!choice) return if(choice == "Other") @@ -1717,7 +1718,7 @@ var/const/MAX_SAVE_SLOTS = 10 religion = choice if("special_job_select") - var/datum/job/job = RoleAuthority.roles_by_name[href_list["text"]] + var/datum/job/job = GLOB.RoleAuthority.roles_by_name[href_list["text"]] if(!job) close_browser(user, "mob_occupation") ShowChoices(user) @@ -1807,11 +1808,10 @@ var/const/MAX_SAVE_SLOTS = 10 if("rand_body") be_random_body = !be_random_body - if("hear_midis") + if("hear_admin_sounds") toggles_sound ^= SOUND_MIDI - - if("hear_internet") - toggles_sound ^= SOUND_INTERNET + if(!(toggles_sound & SOUND_MIDI)) + user?.client?.tgui_panel?.stop_music() if("lobby_music") toggles_sound ^= SOUND_LOBBY @@ -2006,9 +2006,9 @@ var/const/MAX_SAVE_SLOTS = 10 var/firstspace = findtext(real_name, " ") var/name_length = length(real_name) if(!firstspace) //we need a surname - real_name += " [pick(last_names)]" + real_name += " [pick(GLOB.last_names)]" else if(firstspace == name_length) - real_name += "[pick(last_names)]" + real_name += "[pick(GLOB.last_names)]" character.real_name = real_name character.voice = real_name @@ -2209,7 +2209,7 @@ var/const/MAX_SAVE_SLOTS = 10 if (key in key_mod_buf) return - if (key in key_mods) + if (key in GLOB.key_mods) key_mod_buf.Add(key) /datum/preferences/proc/set_key_buf(client/source, key) diff --git a/code/modules/client/preferences_factions.dm b/code/modules/client/preferences_factions.dm index 6f10f9dc1df5..42041d846787 100644 --- a/code/modules/client/preferences_factions.dm +++ b/code/modules/client/preferences_factions.dm @@ -1,4 +1,4 @@ -var/global/list/religion_choices = list( +GLOBAL_LIST_INIT(religion_choices, list( RELIGION_PROTESTANT, RELIGION_CATHOLIC, RELIGION_ORTHODOX, @@ -16,4 +16,4 @@ var/global/list/religion_choices = list( RELIGION_MINOR, RELIGION_ATHEISM, RELIGION_AGNOSTICISM - ) + )) diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm index 4b937b0135b3..a71f7dbcb3e9 100644 --- a/code/modules/client/preferences_gear.dm +++ b/code/modules/client/preferences_gear.dm @@ -1,5 +1,5 @@ -var/global/list/gear_datums_by_category = list() -var/global/list/gear_datums_by_name = list() +GLOBAL_LIST_EMPTY(gear_datums_by_category) +GLOBAL_LIST_EMPTY(gear_datums_by_name) /proc/populate_gear_list() var/datum/gear/G @@ -10,11 +10,11 @@ var/global/list/gear_datums_by_name = list() if(!G.category) log_debug("Improper gear datum: [gear_type].") continue - if(G.display_name in gear_datums_by_name) + if(G.display_name in GLOB.gear_datums_by_name) log_debug("Duplicate gear datum name: [G.display_name].") continue - LAZYSET(gear_datums_by_category[G.category], "[G.display_name] [G.cost == 1 ? "(1 point)" : "([G.cost] points)"]", G) - gear_datums_by_name[G.display_name] = G + LAZYSET(GLOB.gear_datums_by_category[G.category], "[G.display_name] [G.cost == 1 ? "(1 point)" : "([G.cost] points)"]", G) + GLOB.gear_datums_by_name[G.display_name] = G /datum/gear var/display_name // Name/index. @@ -161,6 +161,18 @@ var/global/list/gear_datums_by_name = list() display_name = "USCM balaclava, tan" path = /obj/item/clothing/mask/rebreather/scarf/tan +/datum/gear/mask/uscm/skull_balaclava_blue + display_name = "USCM balaclava, blue skull" + path = /obj/item/clothing/mask/rebreather/skull + cost = 4 //same as skull facepaint + slot = WEAR_FACE + +/datum/gear/mask/uscm/skull_balaclava_black + display_name = "USCM balaclava, black skull" + path = /obj/item/clothing/mask/rebreather/skull/black + cost = 4 + slot = WEAR_FACE + /datum/gear/headwear category = "Headwear" cost = 3 @@ -350,7 +362,7 @@ var/global/list/gear_datums_by_name = list() path = /obj/item/prop/helmetgarb/trimmed_wire /datum/gear/helmet_garb/bullet_pipe - display_name = "10x99mm XM42B casing pipe" + display_name = "10x99mm XM43E1 casing pipe" path = /obj/item/prop/helmetgarb/bullet_pipe allowed_origins = USCM_ORIGINS @@ -876,6 +888,11 @@ var/global/list/gear_datums_by_name = list() display_name = "Facepaint, black" path = /obj/item/facepaint/black +/datum/gear/misc/facepaint_skull + display_name = "Facepaint, skull" + path = /obj/item/facepaint/skull + cost = 3 + /datum/gear/misc/facepaint_body display_name = "Fullbody paint" path = /obj/item/facepaint/sniper diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index c885e9b73af1..c67effe90eb1 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -11,8 +11,8 @@ //if a file was updated, return 1 /datum/preferences/proc/savefile_update(savefile/S) if(!isnum(savefile_version) || savefile_version < SAVEFILE_VERSION_MIN) //lazily delete everything + additional files so they can be saved in the new format - for(var/ckey in preferences_datums) - var/datum/preferences/D = preferences_datums[ckey] + for(var/ckey in GLOB.preferences_datums) + var/datum/preferences/D = GLOB.preferences_datums[ckey] if(D == src) var/delpath = "data/player_saves/[copytext(ckey,1,2)]/[ckey]/" if(delpath && fexists(delpath)) @@ -188,11 +188,6 @@ S["co_affiliation"] >> affiliation S["yautja_status"] >> yautja_status S["synth_status"] >> synth_status - S["key_bindings"] >> key_bindings - check_keybindings() - - var/list/remembered_key_bindings - S["remembered_key_bindings"] >> remembered_key_bindings S["lang_chat_disabled"] >> lang_chat_disabled S["show_permission_errors"] >> show_permission_errors @@ -206,6 +201,10 @@ S["autofit_viewport"] >> auto_fit_viewport S["adaptive_zoom"] >> adaptive_zoom S["tooltips"] >> tooltips + S["key_bindings"] >> key_bindings + + var/list/remembered_key_bindings + S["remembered_key_bindings"] >> remembered_key_bindings //Sanitize ooccolor = sanitize_hexcolor(ooccolor, CONFIG_GET(string/ooc_color_default)) @@ -261,11 +260,11 @@ predator_h_style = sanitize_inlist(predator_h_style, GLOB.yautja_hair_styles_list, initial(predator_h_style)) predator_skin_color = sanitize_inlist(predator_skin_color, PRED_SKIN_COLOR, initial(predator_skin_color)) predator_flavor_text = predator_flavor_text ? sanitize_text(predator_flavor_text, initial(predator_flavor_text)) : initial(predator_flavor_text) - commander_status = sanitize_inlist(commander_status, whitelist_hierarchy, initial(commander_status)) + commander_status = sanitize_inlist(commander_status, GLOB.whitelist_hierarchy, initial(commander_status)) commander_sidearm = sanitize_inlist(commander_sidearm, (CO_GUNS + COUNCIL_CO_GUNS), initial(commander_sidearm)) affiliation = sanitize_inlist(affiliation, FACTION_ALLEGIANCE_USCM_COMMANDER, initial(affiliation)) - yautja_status = sanitize_inlist(yautja_status, whitelist_hierarchy + list("Elder"), initial(yautja_status)) - synth_status = sanitize_inlist(synth_status, whitelist_hierarchy, initial(synth_status)) + yautja_status = sanitize_inlist(yautja_status, GLOB.whitelist_hierarchy + list("Elder"), initial(yautja_status)) + synth_status = sanitize_inlist(synth_status, GLOB.whitelist_hierarchy, initial(synth_status)) key_bindings = sanitize_keybindings(key_bindings) remembered_key_bindings = sanitize_islist(remembered_key_bindings, null) hotkeys = sanitize_integer(hotkeys, FALSE, TRUE, TRUE) @@ -274,6 +273,9 @@ pref_job_slots = sanitize_islist(pref_job_slots, list()) vars["fps"] = fps + check_keybindings() + S["key_bindings"] << key_bindings + if(remembered_key_bindings) for(var/i in GLOB.keybindings_by_name) if(!(i in remembered_key_bindings)) @@ -520,7 +522,7 @@ b_eyes = sanitize_integer(b_eyes, 0, 255, initial(b_eyes)) underwear = sanitize_inlist(underwear, gender == MALE ? GLOB.underwear_m : GLOB.underwear_f, initial(underwear)) undershirt = sanitize_inlist(undershirt, gender == MALE ? GLOB.undershirt_m : GLOB.undershirt_f, initial(undershirt)) - backbag = sanitize_integer(backbag, 1, backbaglist.len, initial(backbag)) + backbag = sanitize_integer(backbag, 1, GLOB.backbaglist.len, initial(backbag)) preferred_armor = sanitize_inlist(preferred_armor, GLOB.armor_style_list, "Random") //b_type = sanitize_text(b_type, initial(b_type)) @@ -651,7 +653,7 @@ addedbind = TRUE if(!addedbind) notadded += kb - save_preferences() + if(length(notadded)) addtimer(CALLBACK(src, PROC_REF(announce_conflict), notadded), 5 SECONDS) diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm index 6f9026a437dd..6fe334a2a0ab 100644 --- a/code/modules/client/preferences_toggles.dm +++ b/code/modules/client/preferences_toggles.dm @@ -48,25 +48,10 @@ to_chat(src, "You will [(prefs.toggles_sound & SOUND_REBOOT) ? "now" : "no longer"] hear server reboot sounds.") /client/verb/togglemidis() - set name = "Silence Current Midi" + set name = "Silence Current Admin Sound" set category = "Preferences.Sound" - set desc = "Toggles hearing sounds uploaded by admins" - // prefs.toggles_sound ^= SOUND_MIDI // Toggle on/off - // prefs.save_preferences() // We won't save the change - it'll be a temporary switch instead of permanent, but they can still make it permanent in character setup. - if(prefs.toggles_sound & SOUND_MIDI) // Not using && midi_playing here - since we can't tell how long an admin midi is, the user should always be able to turn it off at any time. - to_chat(src, SPAN_BOLDNOTICE("The currently playing midi has been silenced.")) - var/sound/break_sound = sound(null, repeat = 0, wait = 0, channel = SOUND_CHANNEL_ADMIN_MIDI) - break_sound.priority = 250 - src << break_sound //breaks the client's sound output on SOUND_CHANNEL_ADMIN_MIDI - if(src.mob.client.midi_silenced) return - if(midi_playing) - total_silenced++ - message_admins("A player has silenced the currently playing midi. Total: [total_silenced] player(s).", 1) - src.mob.client.midi_silenced = 1 - spawn(30 SECONDS) // Prevents message_admins() spam. Should match with the midi_playing_timer spawn() in playsound.dm - src.mob.client.midi_silenced = 0 - else - to_chat(src, SPAN_BOLDNOTICE("You have 'Play Admin Midis' disabled in your Character Setup, so this verb is useless to you.")) + set desc = "Stops the current admin sound. You can also use the STOP icon in the player above tgchat." + tgui_panel?.stop_music() /client/verb/togglechat() set name = "Toggle Abovehead Chat" @@ -562,7 +547,7 @@ set category = "Preferences" set desc = "Shows ghost-related preferences." - add_verb(src, ghost_prefs_verbs) + add_verb(src, GLOB.ghost_prefs_verbs) remove_verb(src, /client/proc/show_ghost_preferences) /client/proc/hide_ghost_preferences() // Hides ghost-related preferences. @@ -570,7 +555,7 @@ set category = "Preferences" set desc = "Hides ghost-related preferences." - remove_verb(src, ghost_prefs_verbs) + remove_verb(src, GLOB.ghost_prefs_verbs) add_verb(src, /client/proc/show_ghost_preferences) /client/proc/toggle_ghost_hivemind() @@ -636,21 +621,21 @@ var/datum/mob_hud/H switch(hud_choice) if("Medical HUD") - H = huds[MOB_HUD_MEDICAL_OBSERVER] + H = GLOB.huds[MOB_HUD_MEDICAL_OBSERVER] if("Security HUD") - H = huds[MOB_HUD_SECURITY_ADVANCED] + H = GLOB.huds[MOB_HUD_SECURITY_ADVANCED] if("Squad HUD") - H = huds[MOB_HUD_FACTION_OBSERVER] + H = GLOB.huds[MOB_HUD_FACTION_OBSERVER] if("Xeno Status HUD") - H = huds[MOB_HUD_XENO_STATUS] + H = GLOB.huds[MOB_HUD_XENO_STATUS] if("Faction UPP HUD") - H = huds[MOB_HUD_FACTION_UPP] + H = GLOB.huds[MOB_HUD_FACTION_UPP] if("Faction Wey-Yu HUD") - H = huds[MOB_HUD_FACTION_WY] + H = GLOB.huds[MOB_HUD_FACTION_WY] if("Faction TWE HUD") - H = huds[MOB_HUD_FACTION_TWE] + H = GLOB.huds[MOB_HUD_FACTION_TWE] if("Faction CLF HUD") - H = huds[MOB_HUD_FACTION_CLF] + H = GLOB.huds[MOB_HUD_FACTION_CLF] observer_user.HUD_toggled[hud_choice] = prefs.observer_huds[hud_choice] if(observer_user.HUD_toggled[hud_choice]) @@ -700,7 +685,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE, GHOST_ORBIT_TRIANGLE, GH set name = "Show Combat Chat Prefs" set desc = "Shows additional chat preferences for combat and ghost messages." - add_verb(src, combat_chat_prefs_verbs) + add_verb(src, GLOB.combat_chat_prefs_verbs) remove_verb(src, /client/proc/show_combat_chat_preferences) /client/proc/hide_combat_chat_preferences() // Hides additional chat logs preferences. @@ -708,7 +693,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE, GHOST_ORBIT_TRIANGLE, GH set name = "Hide Combat Chat Prefs" set desc = "Hides additional chat preferences for combat and ghost messages." - remove_verb(src, combat_chat_prefs_verbs) + remove_verb(src, GLOB.combat_chat_prefs_verbs) add_verb(src, /client/proc/show_combat_chat_preferences) /client/proc/toggle_chat_shooting() @@ -759,16 +744,16 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE, GHOST_ORBIT_TRIANGLE, GH to_chat(src, SPAN_BOLDNOTICE("As a player, you will now [(prefs.chat_display_preferences & CHAT_TYPE_PAIN) ? "see you being in pain messages" : "never see you being in pain messages"].")) prefs.save_preferences() -var/list/combat_chat_prefs_verbs = list( +GLOBAL_LIST_INIT(combat_chat_prefs_verbs, list( /client/proc/toggle_chat_shooting, /client/proc/toggle_chat_xeno_attack, /client/proc/toggle_chat_xeno_armor, /client/proc/toggle_chat_someone_hit, /client/proc/toggle_chat_you_hit, /client/proc/toggle_chat_you_pain, - /client/proc/hide_combat_chat_preferences) + /client/proc/hide_combat_chat_preferences)) -var/list/ghost_prefs_verbs = list( +GLOBAL_LIST_INIT(ghost_prefs_verbs, list( /client/proc/toggle_ghost_ears, /client/proc/toggle_ghost_sight, /client/proc/toggle_ghost_radio, @@ -777,4 +762,4 @@ var/list/ghost_prefs_verbs = list( /client/proc/toggle_ghost_hud, /client/proc/toggle_ghost_health_scan, /client/proc/pick_ghost_orbit, - /client/proc/hide_ghost_preferences) + /client/proc/hide_ghost_preferences)) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index bffbda9f538a..d6596474885c 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -48,6 +48,11 @@ return ..() +/obj/item/clothing/hear_talk(mob/M, msg) + for(var/obj/item/clothing/accessory/attached in accessories) + attached.hear_talk(M, msg) + ..() + /obj/item/clothing/proc/get_armor(armortype) var/armor_total = 0 var/armor_count = 0 @@ -130,12 +135,12 @@ /obj/item/clothing/ears/earmuffs/New() . = ..() - LAZYADD(objects_of_interest, src) + LAZYADD(GLOB.objects_of_interest, src) /obj/item/clothing/ears/earmuffs/Destroy() . = ..() - LAZYREMOVE(objects_of_interest, src) + LAZYREMOVE(GLOB.objects_of_interest, src) /////////////////////////////////////////////////////////////////////// @@ -217,6 +222,7 @@ M.update_inv_gloves() /obj/item/clothing/gloves/emp_act(severity) + . = ..() if(cell) //why is this not part of the powercell code? cell.charge -= 1000 / severity @@ -224,7 +230,6 @@ cell.charge = 0 if(cell.reliability != 100 && prob(50/severity)) cell.reliability -= 10 / severity - ..() // Called just before an attack_hand(), in mob/UnarmedAttack() /obj/item/clothing/gloves/proc/Touch(atom/A, proximity) diff --git a/code/modules/clothing/clothing_accessories.dm b/code/modules/clothing/clothing_accessories.dm index ba855e42d3ba..a07e83db7381 100644 --- a/code/modules/clothing/clothing_accessories.dm +++ b/code/modules/clothing/clothing_accessories.dm @@ -13,10 +13,10 @@ var/tmp_icon_state = overlay_state? overlay_state : icon_state if(icon_override && ("[tmp_icon_state]_tie" in icon_states(icon_override))) inv_overlay = image(icon = icon_override, icon_state = "[tmp_icon_state]_tie", dir = SOUTH) - else if("[tmp_icon_state]_tie" in icon_states(default_onmob_icons[WEAR_ACCESSORY])) - inv_overlay = image(icon = default_onmob_icons[WEAR_ACCESSORY], icon_state = "[tmp_icon_state]_tie", dir = SOUTH) + else if("[tmp_icon_state]_tie" in icon_states(GLOB.default_onmob_icons[WEAR_ACCESSORY])) + inv_overlay = image(icon = GLOB.default_onmob_icons[WEAR_ACCESSORY], icon_state = "[tmp_icon_state]_tie", dir = SOUTH) else - inv_overlay = image(icon = default_onmob_icons[WEAR_ACCESSORY], icon_state = tmp_icon_state, dir = SOUTH) + inv_overlay = image(icon = GLOB.default_onmob_icons[WEAR_ACCESSORY], icon_state = tmp_icon_state, dir = SOUTH) inv_overlay.color = color return inv_overlay @@ -148,7 +148,7 @@ verbs -= /obj/item/clothing/proc/removetie_verb /obj/item/clothing/emp_act(severity) + . = ..() if(LAZYLEN(accessories)) for(var/obj/item/clothing/accessory/A in accessories) A.emp_act(severity) - ..() diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 5a36112dfb4b..dae7f633f05d 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -68,7 +68,7 @@ update_clothing_icon() if(hud_type) - var/datum/mob_hud/MH = huds[hud_type] + var/datum/mob_hud/MH = GLOB.huds[hud_type] if(active) MH.add_hud_to(H, src) playsound(H, 'sound/handling/hud_on.ogg', 25, 1) @@ -94,7 +94,7 @@ to_chat(user, SPAN_WARNING("You have no idea what any of the data means and power it off before it makes you nauseated.")) else if(hud_type) - var/datum/mob_hud/MH = huds[hud_type] + var/datum/mob_hud/MH = GLOB.huds[hud_type] MH.add_hud_to(user, src) user.update_sight() ..() @@ -102,7 +102,7 @@ /obj/item/clothing/glasses/dropped(mob/living/carbon/human/user) if(hud_type && active && istype(user)) if(src == user.glasses) //dropped is called before the inventory reference is updated. - var/datum/mob_hud/H = huds[hud_type] + var/datum/mob_hud/H = GLOB.huds[hud_type] H.remove_hud_from(user, src) user.glasses = null user.update_inv_glasses() @@ -508,37 +508,39 @@ set src in usr if(usr.is_mob_incapacitated()) - if(active) - active = 0 - vision_impair = vision_impair_off - flags_inventory &= ~COVEREYES - flags_inv_hide &= ~HIDEEYES - flags_armor_protection &= ~BODY_FLAG_EYES - update_icon() - eye_protection = EYE_PROTECTION_NONE - to_chat(usr, "You push [src] up out of your face.") - else - active = 1 - vision_impair = vision_impair_on - flags_inventory |= COVEREYES - flags_inv_hide |= HIDEEYES - flags_armor_protection |= BODY_FLAG_EYES - update_icon() - eye_protection = initial(eye_protection) - to_chat(usr, "You flip [src] down to protect your eyes.") - - - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - if(H.glasses == src) - H.update_tint() + return + + if(active) + active = 0 + vision_impair = vision_impair_off + flags_inventory &= ~COVEREYES + flags_inv_hide &= ~HIDEEYES + flags_armor_protection &= ~BODY_FLAG_EYES + update_icon() + eye_protection = EYE_PROTECTION_NONE + to_chat(usr, "You push [src] up out of your face.") + else + active = 1 + vision_impair = vision_impair_on + flags_inventory |= COVEREYES + flags_inv_hide |= HIDEEYES + flags_armor_protection |= BODY_FLAG_EYES + update_icon() + eye_protection = initial(eye_protection) + to_chat(usr, "You flip [src] down to protect your eyes.") + + + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + if(H.glasses == src) + H.update_tint() - update_clothing_icon() + update_clothing_icon() - for(var/X in actions) - var/datum/action/A = X - if(istype(A, /datum/action/item_action/toggle)) - A.update_button_icon() + for(var/X in actions) + var/datum/action/A = X + if(istype(A, /datum/action/item_action/toggle)) + A.update_button_icon() /obj/item/clothing/glasses/welding/superior name = "superior welding goggles" diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index e4f9bdde48cb..7406e6baa754 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -48,7 +48,7 @@ /obj/item/clothing/glasses/hud/health/ui_data(mob/user) var/list/data = list( - "published_documents" = chemical_data.research_publications, + "published_documents" = GLOB.chemical_data.research_publications, "terminal_view" = FALSE ) return data @@ -74,7 +74,7 @@ if ("read_document") var/print_type = params["print_type"] var/print_title = params["print_title"] - var/obj/item/paper/research_report/report = chemical_data.get_report(print_type, print_title) + var/obj/item/paper/research_report/report = GLOB.chemical_data.get_report(print_type, print_title) if(report) report.read_paper(user) return @@ -98,7 +98,7 @@ return if(href_list["read_document"]) - var/obj/item/paper/research_report/report = chemical_data.research_documents[href_list["print_type"]][href_list["print_title"]] + var/obj/item/paper/research_report/report = GLOB.chemical_data.research_documents[href_list["print_type"]][href_list["print_title"]] if(report) report.read_paper(user) diff --git a/code/modules/clothing/glasses/night.dm b/code/modules/clothing/glasses/night.dm index 2a3780832e2a..b2b6f8406dcc 100644 --- a/code/modules/clothing/glasses/night.dm +++ b/code/modules/clothing/glasses/night.dm @@ -150,7 +150,7 @@ far_sight = FALSE if(user) if(user.client) - user.client.change_view(world_view_size, src) + user.client.change_view(GLOB.world_view_size, src) STOP_PROCESSING(SSobj, src) var/datum/action/item_action/m56_goggles/far_sight/FT = locate(/datum/action/item_action/m56_goggles/far_sight) in actions diff --git a/code/modules/clothing/glasses/thermal.dm b/code/modules/clothing/glasses/thermal.dm index b2ec7597e270..f4a728c8864d 100644 --- a/code/modules/clothing/glasses/thermal.dm +++ b/code/modules/clothing/glasses/thermal.dm @@ -18,6 +18,7 @@ var/blinds_on_emp = TRUE /obj/item/clothing/glasses/thermal/emp_act(severity) + . = ..() if(blinds_on_emp) if(istype(src.loc, /mob/living/carbon/human)) var/mob/living/carbon/human/M = src.loc @@ -29,7 +30,6 @@ M.disabilities |= NEARSIGHTED spawn(100) M.disabilities &= ~NEARSIGHTED - ..() /obj/item/clothing/glasses/thermal/syndi //These are now a traitor item, concealed as mesons. -Pete diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index edbd831d9909..edc4a81b364a 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -46,32 +46,34 @@ set src in usr if(usr.is_mob_incapacitated()) - if(up) - vision_impair = VISION_IMPAIR_MAX - flags_inventory |= COVEREYES|COVERMOUTH|BLOCKSHARPOBJ - flags_inv_hide |= HIDEEARS|HIDEEYES|HIDEFACE - icon_state = initial(icon_state) - eye_protection = initial(eye_protection) - to_chat(usr, "You flip the [src] down to protect your eyes.") - else - vision_impair = VISION_IMPAIR_NONE - flags_inventory &= ~(COVEREYES|COVERMOUTH|BLOCKSHARPOBJ) - flags_inv_hide &= ~(HIDEEARS|HIDEEYES|HIDEFACE) - icon_state = "[initial(icon_state)]up" - eye_protection = EYE_PROTECTION_NONE - to_chat(usr, "You push the [src] up out of your face.") - up = !up - - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - if(H.head == src) - H.update_tint() - - update_clothing_icon() //so our mob-overlays update - - for(var/X in actions) - var/datum/action/A = X - A.update_button_icon() + return + + if(up) + vision_impair = VISION_IMPAIR_MAX + flags_inventory |= COVEREYES|COVERMOUTH|BLOCKSHARPOBJ + flags_inv_hide |= HIDEEARS|HIDEEYES|HIDEFACE + icon_state = initial(icon_state) + eye_protection = initial(eye_protection) + to_chat(usr, SPAN_NOTICE("You flip [src] down to protect your eyes.")) + else + vision_impair = VISION_IMPAIR_NONE + flags_inventory &= ~(COVEREYES|COVERMOUTH|BLOCKSHARPOBJ) + flags_inv_hide &= ~(HIDEEARS|HIDEEYES|HIDEFACE) + icon_state = "[initial(icon_state)]up" + eye_protection = EYE_PROTECTION_NONE + to_chat(usr, SPAN_NOTICE("You push [src] up out of your face.")) + up = !up + + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + if(H.head == src) + H.update_tint() + + update_clothing_icon() //so our mob-overlays update + + for(var/X in actions) + var/datum/action/A = X + A.update_button_icon() /* * Cakehat diff --git a/code/modules/clothing/spacesuits/breaches.dm b/code/modules/clothing/spacesuits/breaches.dm index f2be4eaf2062..45a3c51a6701 100644 --- a/code/modules/clothing/spacesuits/breaches.dm +++ b/code/modules/clothing/spacesuits/breaches.dm @@ -25,21 +25,21 @@ //Some simple descriptors for breaches. Global because lazy, TODO: work out a better way to do this. -var/global/list/breach_brute_descriptors = list( +GLOBAL_LIST_INIT(breach_brute_descriptors, list( "tiny puncture", "ragged tear", "large split", "huge tear", "gaping wound" - ) + )) -var/global/list/breach_burn_descriptors = list( +GLOBAL_LIST_INIT(breach_burn_descriptors, list( "small burn", "melted patch", "sizable burn", "large scorched area", "huge scorched area" - ) + )) /datum/breach/proc/update_descriptor() @@ -47,9 +47,9 @@ var/global/list/breach_burn_descriptors = list( class = max(1,min(class,5)) //Apply the correct descriptor. if(damtype == BURN) - descriptor = breach_burn_descriptors[class] + descriptor = GLOB.breach_burn_descriptors[class] else if(damtype == BRUTE) - descriptor = breach_brute_descriptors[class] + descriptor = GLOB.breach_brute_descriptors[class] //Repair a certain amount of brute or burn damage to the suit. /obj/item/clothing/suit/space/proc/repair_breaches(damtype, amount, mob/user) diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 2c023fed2ed7..82d461c5ca55 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -335,10 +335,10 @@ add_fingerprint(user) /obj/item/clothing/suit/armor/reactive/emp_act(severity) + . = ..() active = 0 src.icon_state = "reactiveoff" src.item_state = "reactiveoff" - ..() diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 1c2fb2a9f29d..54e9d91576f1 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -299,3 +299,21 @@ name = "liaison's winter coat" desc = "A Weyland-Yutani winter coat. Only the best comfort for the liaison in a cold environment." icon_state = "snowsuit_liaison" + +/obj/item/clothing/suit/storage/snow_suit/liaison/modified + name = "modified liaison's winter coat" + desc = "A Weyland-Yutani winter coat. This one has been modified to holster guns and other objects. Only the best comfort and utility for the liaison surviving in a cold, hostile environment." + allowed = list( + /obj/item/weapon/gun, + /obj/item/tank/emergency_oxygen, + /obj/item/device/flashlight, + /obj/item/ammo_magazine, + /obj/item/explosive/grenade, + /obj/item/device/binoculars, + /obj/item/attachable/bayonet, + /obj/item/storage/large_holster/machete, + /obj/item/weapon/baseballbat, + /obj/item/weapon/baseballbat/metal, + /obj/item/device/motiondetector, + /obj/item/device/walkman, + ) diff --git a/code/modules/clothing/suits/marine_armor.dm b/code/modules/clothing/suits/marine_armor.dm index 00e387de0365..e505d458e496 100644 --- a/code/modules/clothing/suits/marine_armor.dm +++ b/code/modules/clothing/suits/marine_armor.dm @@ -118,7 +118,7 @@ select_gamemode_skin(type) armor_overlays = list("lamp") //Just one for now, can add more later. if(armor_variation && mapload) - post_vendor_spawn_hook() + set_armor_style("Random") update_icon() pockets.max_w_class = SIZE_SMALL //Can contain small items AND rifle magazines. pockets.bypass_w_limit = list( @@ -149,18 +149,15 @@ /obj/item/clothing/suit/storage/marine/post_vendor_spawn_hook(mob/living/carbon/human/user) //used for randomizing/selecting a variant for armors. - var/new_look //used for the icon_state text replacement. - - if(!user?.client?.prefs) - new_look = rand(1,armor_variation) - - else if(user.client.prefs.preferred_armor == "Random") - new_look = rand(1,armor_variation) + if(!armor_variation) + return + if(user?.client?.prefs) + // Set the armor style to the user's preference. + set_armor_style(user.client.prefs.preferred_armor) else - new_look = GLOB.armor_style_list[user.client.prefs.preferred_armor] - - icon_state = replacetext(icon_state,"1","[new_look]") + // Or if that isn't possible, just pick a random one. + set_armor_style("Random") update_icon(user) /obj/item/clothing/suit/storage/marine/attack_self(mob/user) @@ -219,6 +216,27 @@ M.visible_message(SPAN_DANGER("Your programming prevents you from wearing this!")) return 0 +/** + * Updates the armor's `icon_state` to the style represented by `new_style`. + * + * Arguments: + * * new_style - The new armor style. May only be one of `GLOB.armor_style_list`'s keys, or `"Random"`. + */ +/obj/item/clothing/suit/storage/marine/proc/set_armor_style(new_style) + // Regex to match one or more digits. + var/static/regex/digits = new("\\d+") + // Integer for the new armor style's `icon_state`. + var/new_look + + if(new_style == "Random") + // The style icon states are all numbers between 1 and `armor_variation`, so this picks a random one. + new_look = rand(1, armor_variation) + else + new_look = GLOB.armor_style_list[new_style] + + // Replace the digits in the current icon state with `new_look`. (E.g. "L6" -> "L2") + icon_state = digits.Replace(icon_state, new_look) + /obj/item/clothing/suit/storage/marine/padded name = "M3 pattern padded marine armor" icon_state = "1" @@ -908,9 +926,9 @@ RegisterSignal(H, COMSIG_MOB_MOVE_OR_LOOK, PROC_REF(handle_mob_move_or_look)) - var/datum/mob_hud/security/advanced/SA = huds[MOB_HUD_SECURITY_ADVANCED] + var/datum/mob_hud/security/advanced/SA = GLOB.huds[MOB_HUD_SECURITY_ADVANCED] SA.remove_from_hud(H) - var/datum/mob_hud/xeno_infection/XI = huds[MOB_HUD_XENO_INFECTION] + var/datum/mob_hud/xeno_infection/XI = GLOB.huds[MOB_HUD_XENO_INFECTION] XI.remove_from_hud(H) anim(H.loc, H, 'icons/mob/mob.dmi', null, "cloak", null, H.dir) @@ -938,9 +956,9 @@ H.FF_hit_evade = initial(H.FF_hit_evade) REMOVE_TRAIT(H, TRAIT_UNDENSE, SPECIALIST_GEAR_TRAIT) - var/datum/mob_hud/security/advanced/SA = huds[MOB_HUD_SECURITY_ADVANCED] + var/datum/mob_hud/security/advanced/SA = GLOB.huds[MOB_HUD_SECURITY_ADVANCED] SA.add_to_hud(H) - var/datum/mob_hud/xeno_infection/XI = huds[MOB_HUD_XENO_INFECTION] + var/datum/mob_hud/xeno_infection/XI = GLOB.huds[MOB_HUD_XENO_INFECTION] XI.add_to_hud(H) H.visible_message(SPAN_DANGER("[H]'s camouflage fails!"), SPAN_WARNING("Your camouflage fails!"), max_distance = 4) @@ -1104,8 +1122,8 @@ item_state_slots = list(WEAR_JACKET = "pmc_sniper") /obj/item/clothing/suit/storage/marine/veteran/pmc/light/synth - name = "\improper M4 synthetic PMC armor" - desc = "A modification of the standard Armat Systems M3 armor. This variant was designed for PMC Support Units in the field, offering protection and storage while not restricting movement." + name = "\improper M4 Synthetic PMC armor" + desc = "A serious modification of the standard Armat Systems M3 armor. This variant was designed for PMC Support Units in the field, with every armor insert removed. It's designed with the idea of a high speed lifesaver in mind." time_to_unequip = 0.5 SECONDS time_to_equip = 1 SECONDS armor_melee = CLOTHING_ARMOR_NONE @@ -1117,6 +1135,7 @@ armor_rad = CLOTHING_ARMOR_NONE armor_internaldamage = CLOTHING_ARMOR_NONE storage_slots = 3 + slowdown = SLOWDOWN_ARMOR_SUPER_LIGHT /obj/item/clothing/suit/storage/marine/veteran/pmc/light/synth/Initialize() flags_atom |= NO_NAME_OVERRIDE diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm index a18faa60c0d3..0d5fc31a2560 100644 --- a/code/modules/clothing/suits/storage.dm +++ b/code/modules/clothing/suits/storage.dm @@ -33,8 +33,8 @@ return pockets.attackby(W, user) /obj/item/clothing/suit/storage/emp_act(severity) + . = ..() pockets.emp_act(severity) - ..() /obj/item/clothing/suit/storage/hear_talk(mob/living/M, msg, verb, datum/language/speaking, italics) pockets.hear_talk(M, msg, verb, speaking, italics) diff --git a/code/modules/clothing/under/marine_uniform.dm b/code/modules/clothing/under/marine_uniform.dm index dbbfdb059fc2..a950b4de3d94 100644 --- a/code/modules/clothing/under/marine_uniform.dm +++ b/code/modules/clothing/under/marine_uniform.dm @@ -1004,7 +1004,7 @@ return if(!linked_hood) - to_chat(SPAN_BOLDWARNING("You are missing a linked_hood! This should not be possible.")) + to_chat(user, SPAN_BOLDWARNING("You are missing a linked_hood! This should not be possible.")) CRASH("[user] attempted to toggle hood on [src] that was missing a linked_hood.") playsound(user.loc, "armorequip", 25, 1) diff --git a/code/modules/clothing/under/rank_pins.dm b/code/modules/clothing/under/rank_pins.dm index bcadaec52090..894ff6d879b7 100644 --- a/code/modules/clothing/under/rank_pins.dm +++ b/code/modules/clothing/under/rank_pins.dm @@ -5,7 +5,7 @@ desc = "A set of rank pins, used to denote the paygrade of someone within the military." icon_state = "ranks_enlisted" var/rank = "Private" - var/rank_short = "ME1" + var/rank_short = PAY_SHORT_ME1 slot = ACCESSORY_SLOT_RANK high_visibility = TRUE gender = PLURAL @@ -23,116 +23,116 @@ /obj/item/clothing/accessory/ranks/marine/e1 /obj/item/clothing/accessory/ranks/marine/e2 - rank_short = "ME2" + rank_short = PAY_SHORT_ME2 /obj/item/clothing/accessory/ranks/marine/e3 - rank_short = "ME3" + rank_short = PAY_SHORT_ME3 /obj/item/clothing/accessory/ranks/marine/e4 - rank_short = "ME4" + rank_short = PAY_SHORT_ME4 icon_state = "ranks_nco" /obj/item/clothing/accessory/ranks/marine/e5 - rank_short = "ME5" + rank_short = PAY_SHORT_ME5 icon_state = "ranks_nco" /obj/item/clothing/accessory/ranks/marine/e6 - rank_short = "ME6" + rank_short = PAY_SHORT_ME6 icon_state = "ranks_snco" /obj/item/clothing/accessory/ranks/marine/e7 - rank_short = "ME7" + rank_short = PAY_SHORT_ME7 icon_state = "ranks_snco" /obj/item/clothing/accessory/ranks/marine/e8 - rank_short = "ME8" + rank_short = PAY_SHORT_ME8 icon_state = "ranks_snco" /obj/item/clothing/accessory/ranks/marine/e8e - rank_short = "ME8E" + rank_short = PAY_SHORT_ME8E icon_state = "ranks_snco" /obj/item/clothing/accessory/ranks/marine/e9 - rank_short = "ME9" + rank_short = PAY_SHORT_ME9 icon_state = "ranks_snco" /obj/item/clothing/accessory/ranks/marine/e9e - rank_short = "ME9E" + rank_short = PAY_SHORT_ME9E icon_state = "ranks_snco" /obj/item/clothing/accessory/ranks/marine/e9c - rank_short = "ME9C" + rank_short = PAY_SHORT_ME9C icon_state = "ranks_snco" //OFFICERS /obj/item/clothing/accessory/ranks/marine/o1 name = "rank boards" - rank_short = "MO1" + rank_short = PAY_SHORT_MO1 icon_state = "ranks_officer" /obj/item/clothing/accessory/ranks/marine/o2 name = "rank boards" - rank_short = "MO2" + rank_short = PAY_SHORT_MO2 icon_state = "ranks_officer" /obj/item/clothing/accessory/ranks/marine/o3 name = "rank boards" - rank_short = "MO3" + rank_short = PAY_SHORT_MO3 icon_state = "ranks_officer" /obj/item/clothing/accessory/ranks/marine/o4 name = "rank boards" - rank_short = "MO4" + rank_short = PAY_SHORT_MO4 icon_state = "ranks_seniorofficer" /obj/item/clothing/accessory/ranks/marine/o5 name = "rank boards" - rank_short = "MO5" + rank_short = PAY_SHORT_MO5 icon_state = "ranks_seniorofficer" /obj/item/clothing/accessory/ranks/marine/o6 name = "rank boards" - rank_short = "MO6" + rank_short = PAY_SHORT_MO6 icon_state = "ranks_seniorofficer" /obj/item/clothing/accessory/ranks/marine/o6e name = "rank boards" - rank_short = "MO6E" + rank_short = PAY_SHORT_MO6E icon_state = "ranks_seniorofficer" /obj/item/clothing/accessory/ranks/marine/o6c name = "rank boards" - rank_short = "MO6C" + rank_short = PAY_SHORT_MO6C icon_state = "ranks_flagofficer" /obj/item/clothing/accessory/ranks/marine/o7 name = "rank boards" - rank_short = "MO7" + rank_short = PAY_SHORT_MO7 icon_state = "ranks_flagofficer" /obj/item/clothing/accessory/ranks/marine/o8 name = "rank boards" - rank_short = "MO8" + rank_short = PAY_SHORT_MO8 icon_state = "ranks_flagofficer" /obj/item/clothing/accessory/ranks/marine/o9 name = "rank boards" - rank_short = "MO9" + rank_short = PAY_SHORT_MO9 icon_state = "ranks_flagofficer" /obj/item/clothing/accessory/ranks/marine/o10 name = "rank boards" - rank_short = "MO10" + rank_short = PAY_SHORT_MO10 icon_state = "ranks_flagofficer" /obj/item/clothing/accessory/ranks/marine/o10c name = "rank boards" - rank_short = "MO10C" + rank_short = PAY_SHORT_MO10C icon_state = "ranks_flagofficer" /obj/item/clothing/accessory/ranks/marine/o10s name = "rank boards" - rank_short = "MO10S" + rank_short = PAY_SHORT_MO10S icon_state = "ranks_flagofficer" /*################################################ @@ -140,134 +140,112 @@ ################################################*/ //ENLISTED /obj/item/clothing/accessory/ranks/navy/e1 - rank_short = "NE1" + rank_short = PAY_SHORT_NE1 /obj/item/clothing/accessory/ranks/navy/e2 - rank_short = "NE2" + rank_short = PAY_SHORT_NE2 /obj/item/clothing/accessory/ranks/navy/e3 - rank_short = "NE3" + rank_short = PAY_SHORT_NE3 /obj/item/clothing/accessory/ranks/navy/e4 - rank_short = "NE4" + rank_short = PAY_SHORT_NE4 icon_state = "ranks_nco" /obj/item/clothing/accessory/ranks/navy/e5 - rank_short = "NE5" + rank_short = PAY_SHORT_NE5 icon_state = "ranks_nco" /obj/item/clothing/accessory/ranks/navy/e6 - rank_short = "NE6" + rank_short = PAY_SHORT_NE6 icon_state = "ranks_nco" /obj/item/clothing/accessory/ranks/navy/e7 - rank_short = "NE7" + rank_short = PAY_SHORT_NE7 icon_state = "ranks_snco" -/obj/item/clothing/accessory/ranks/navy/e7/pvst - icon_state = "ranks_pvst" - /obj/item/clothing/accessory/ranks/navy/e8 - rank_short = "NE8" + rank_short = PAY_SHORT_NE8 icon_state = "ranks_snco" -/obj/item/clothing/accessory/ranks/navy/e8/pvst - icon_state = "ranks_pvst" - /obj/item/clothing/accessory/ranks/navy/e8c - rank_short = "NE8C" + rank_short = PAY_SHORT_NE8C icon_state = "ranks_snco" /obj/item/clothing/accessory/ranks/navy/e9 - rank_short = "NE9" + rank_short = PAY_SHORT_NE9 icon_state = "ranks_snco" -/obj/item/clothing/accessory/ranks/navy/e9/pvst - icon_state = "ranks_pvst" - /obj/item/clothing/accessory/ranks/navy/e9c - rank_short = "NE9C" + rank_short = PAY_SHORT_NE9C icon_state = "ranks_snco" //OFFICERS /obj/item/clothing/accessory/ranks/navy/o1 name = "rank boards" - rank_short = "NO1" + rank_short = PAY_SHORT_NO1 icon_state = "ranks_officer" /obj/item/clothing/accessory/ranks/navy/o2 name = "rank boards" - rank_short = "NO2" + rank_short = PAY_SHORT_NO2 icon_state = "ranks_officer" /obj/item/clothing/accessory/ranks/navy/o3 name = "rank boards" - rank_short = "NO3" + rank_short = PAY_SHORT_NO3 icon_state = "ranks_officer" /obj/item/clothing/accessory/ranks/navy/o4 name = "rank boards" - rank_short = "NO4" + rank_short = PAY_SHORT_NO4 icon_state = "ranks_seniorofficer" /obj/item/clothing/accessory/ranks/navy/o5 name = "rank boards" - rank_short = "NO5" + rank_short = PAY_SHORT_NO5 icon_state = "ranks_seniorofficer" /obj/item/clothing/accessory/ranks/navy/o6 name = "rank boards" - rank_short = "NO6" + rank_short = PAY_SHORT_NO6 icon_state = "ranks_seniorofficer" /obj/item/clothing/accessory/ranks/navy/o6e name = "rank boards" - rank_short = "NO6E" + rank_short = PAY_SHORT_NO6E icon_state = "ranks_seniorofficer" /obj/item/clothing/accessory/ranks/navy/o6c name = "rank boards" - rank_short = "NO6C" + rank_short = PAY_SHORT_NO6C icon_state = "ranks_seniorofficer" /obj/item/clothing/accessory/ranks/navy/o7 name = "rank boards" - rank_short = "NO7" + rank_short = PAY_SHORT_NO7 icon_state = "ranks_flagofficer" /obj/item/clothing/accessory/ranks/navy/o8 name = "rank boards" - rank_short = "NO8" + rank_short = PAY_SHORT_NO8 icon_state = "ranks_flagofficer" -/obj/item/clothing/accessory/ranks/navy/o8/pvst - icon_state = "ranks_pvstofficer" - /obj/item/clothing/accessory/ranks/navy/o9 name = "rank boards" - rank_short = "NO9" + rank_short = PAY_SHORT_NO9 icon_state = "ranks_flagofficer" -/obj/item/clothing/accessory/ranks/navy/o9/pvst - icon_state = "ranks_pvstofficer" - /obj/item/clothing/accessory/ranks/navy/o10 name = "rank boards" - rank_short = "NO10" + rank_short = PAY_SHORT_NO10 icon_state = "ranks_flagofficer" -/obj/item/clothing/accessory/ranks/navy/o10/pvst - icon_state = "ranks_pvstofficer" - /obj/item/clothing/accessory/ranks/navy/o10c name = "rank boards" - rank_short = "NO10C" + rank_short = PAY_SHORT_NO10C icon_state = "ranks_flagofficer" -/obj/item/clothing/accessory/ranks/navy/o10c/pvst - rank_short = "PvCM" - icon_state = "ranks_pvstofficer" - /*################################################ ################# SPECIAL ################# ################################################*/ diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm index ee19f9ef7d5f..a0c8219ffe69 100644 --- a/code/modules/clothing/under/ties.dm +++ b/code/modules/clothing/under/ties.dm @@ -440,8 +440,8 @@ return hold.attackby(W, user) /obj/item/clothing/accessory/storage/emp_act(severity) + . = ..() hold.emp_act(severity) - ..() /obj/item/clothing/accessory/storage/hear_talk(mob/M, msg) hold.hear_talk(M, msg) diff --git a/code/modules/clothing/under/under.dm b/code/modules/clothing/under/under.dm index ec20ed6f6b1a..a48967d88538 100644 --- a/code/modules/clothing/under/under.dm +++ b/code/modules/clothing/under/under.dm @@ -45,7 +45,7 @@ else worn_state = icon_state - var/check_icon = contained_sprite ? icon : default_onmob_icons[WEAR_BODY] + var/check_icon = contained_sprite ? icon : GLOB.default_onmob_icons[WEAR_BODY] //autodetect rollability, cuttability, and removability. if(icon_exists(check_icon, "[worn_state]_d[contained_sprite ? "_un" : ""]")) @@ -259,7 +259,7 @@ else if(LAZYISIN(item_icons, WEAR_BODY)) under_icon = item_icons[WEAR_BODY] else - under_icon = default_onmob_icons[WEAR_BODY] + under_icon = GLOB.default_onmob_icons[WEAR_BODY] var/check_worn_state = "[worn_state]_d[contained_sprite ? "_un" : ""]" if(!(check_worn_state in icon_states(under_icon))) @@ -292,7 +292,7 @@ else if(LAZYISIN(item_icons, WEAR_BODY)) under_icon = item_icons[WEAR_BODY] else - under_icon = default_onmob_icons[WEAR_BODY] + under_icon = GLOB.default_onmob_icons[WEAR_BODY] var/check_worn_state = "[worn_state]_dj[contained_sprite ? "_un" : ""]" if(!(check_worn_state in icon_states(under_icon))) @@ -326,7 +326,7 @@ return update_rollsuit_status() //we need the _d version of the sprite anyways. In the future we might need to make a different version of the sprite to accomodate for rolling sleeves and hoods. if(user.head && !istype(user.head, hood_state)) - to_chat(user, SPAN_WARNING("You can't wear a hood while also wearing the [user.head]!")) + to_chat(user, SPAN_WARNING("You can't wear a hood while also wearing [user.head]!")) return if(!HAS_TRAIT(src, TRAIT_CLOTHING_HOOD)) diff --git a/code/modules/cm_aliens/XenoStructures.dm b/code/modules/cm_aliens/XenoStructures.dm index a1d530e2e366..81978bb01ba0 100644 --- a/code/modules/cm_aliens/XenoStructures.dm +++ b/code/modules/cm_aliens/XenoStructures.dm @@ -203,7 +203,7 @@ if (hive) hivenumber = hive set_hive_data(src, hivenumber) - setDir(pick(alldirs)) + setDir(pick(GLOB.alldirs)) if(hivenumber == XENO_HIVE_NORMAL) RegisterSignal(SSdcs, COMSIG_GLOB_GROUNDSIDE_FORSAKEN_HANDLING, PROC_REF(forsaken_handling)) @@ -419,18 +419,23 @@ update_icon() isSwitchingStates = 0 layer = DOOR_OPEN_LAYER - spawn(close_delay) - if(!isSwitchingStates && state == 1) - Close() + addtimer(CALLBACK(src, PROC_REF(Close)), close_delay, TIMER_UNIQUE|TIMER_OVERRIDE) + +/obj/structure/mineral_door/resin/proc/close_blocked() + for(var/turf/turf in locs) + for(var/mob/living/living_mob in turf) + if(!HAS_TRAIT(living_mob, TRAIT_MERGED_WITH_WEEDS)) + return TRUE + return FALSE /obj/structure/mineral_door/resin/Close() - if(!state || !loc) return //already closed + if(!state || !loc || isSwitchingStates) + return //already closed or changing //Can't close if someone is blocking it - for(var/turf/turf in locs) - if(locate(/mob/living) in turf) - spawn (close_delay) - Close() - return + if(close_blocked()) + addtimer(CALLBACK(src, PROC_REF(Close)), close_delay, TIMER_UNIQUE|TIMER_OVERRIDE) + return + isSwitchingStates = 1 playsound(loc, "alien_resin_move", 25) flick("[mineralType]closing",src) @@ -441,10 +446,10 @@ update_icon() isSwitchingStates = 0 layer = DOOR_CLOSED_LAYER - for(var/turf/turf in locs) - if(locate(/mob/living) in turf) - Open() - return + + if(close_blocked()) + Open() + return /obj/structure/mineral_door/resin/Dismantle(devastated = 0) qdel(src) @@ -458,7 +463,7 @@ var/turf/U = loc spawn(0) var/turf/T - for(var/i in cardinal) + for(var/i in GLOB.cardinals) T = get_step(U, i) if(!istype(T)) continue for(var/obj/structure/mineral_door/resin/R in T) @@ -491,7 +496,7 @@ //do we still have something next to us to support us? /obj/structure/mineral_door/resin/proc/check_resin_support() var/turf/T - for(var/i in cardinal) + for(var/i in GLOB.cardinals) T = get_step(src, i) if(!T) continue @@ -776,7 +781,7 @@ /obj/effect/alien/resin/resin_pillar/proc/brittle() //playsound(granite cracking) - visible_message(SPAN_DANGER("You hear cracking sounds from the [src] as splinters start falling off from the structure! It seems brittle now.")) + visible_message(SPAN_DANGER("You hear cracking sounds from [src] as splinters start falling off from the structure! It seems brittle now.")) health = vulnerable_health for(var/i in walls) var/turf/closed/wall/T = i @@ -809,7 +814,7 @@ /obj/effect/alien/resin/resin_pillar/hitby(atom/movable/AM) if(!brittle) - visible_message(SPAN_DANGER("[AM] harmlessly bounces off the [src]!")) + visible_message(SPAN_DANGER("[AM] harmlessly bounces off [src]!")) return return ..() @@ -935,9 +940,9 @@ // If the cell is the epicenter, propagate in all directions if(isnull(direction)) - return alldirs + return GLOB.alldirs - if(direction in cardinal) + if(direction in GLOB.cardinals) . += list(direction, turn(direction, 45), turn(direction, -45)) else . += direction @@ -971,7 +976,7 @@ // Set the direction the explosion is traveling in E.direction = dir - if(dir in diagonals) + if(dir in GLOB.diagonals) E.range-- switch(E.range) diff --git a/code/modules/cm_aliens/structures/egg.dm b/code/modules/cm_aliens/structures/egg.dm index c23f4f3e2b20..eda9803c8784 100644 --- a/code/modules/cm_aliens/structures/egg.dm +++ b/code/modules/cm_aliens/structures/egg.dm @@ -296,3 +296,67 @@ linked_egg.HasProximity(C) if(linked_eggmorph) linked_eggmorph.HasProximity(C) + +/* +SPECIAL EGG USED BY EGG CARRIER +*/ + +#define CARRIER_EGG_UNSUSTAINED_LIFE 1 MINUTES +#define CARRIER_EGG_MAXIMUM_LIFE 5 MINUTES + +/obj/effect/alien/egg/carrier_egg + name = "fragile egg" + desc = "It looks like a weird, fragile egg." + ///Owner of the fragile egg, must be a mob/living/carbon/xenomorph/carrier + var/mob/living/carbon/xenomorph/carrier/owner = null + ///Time that the carrier was last within refresh range of the egg (14 tiles) + var/last_refreshed = null + /// Timer holder for the maximum lifetime of the egg as defined CARRIER_EGG_MAXIMUM_LIFE + var/life_timer = null + +/obj/effect/alien/egg/carrier_egg/Initialize(mapload, hivenumber, planter = null) + . = ..() + last_refreshed = world.time + if(!planter) + //If we have no owner when created... this really shouldn't happen but start decaying the egg immediately. + start_unstoppable_decay() + else + //Die after maximum lifetime + life_timer = addtimer(CALLBACK(src, PROC_REF(start_unstoppable_decay)), CARRIER_EGG_MAXIMUM_LIFE, TIMER_STOPPABLE) + set_owner(planter) + +/obj/effect/alien/egg/carrier_egg/Destroy() + if(life_timer) + deltimer(life_timer) + //Remove reference to src in owner's behavior_delegate and set owner to null + if(owner) + var/mob/living/carbon/xenomorph/carrier/my_owner = owner + var/datum/behavior_delegate/carrier_eggsac/behavior = my_owner.behavior_delegate + behavior.eggs_sustained -= src + my_owner = null + return ..() + +/// Set the owner of the egg to the planter. +/obj/effect/alien/egg/carrier_egg/proc/set_owner(mob/living/carbon/xenomorph/carrier/planter) + var/datum/behavior_delegate/carrier_eggsac/my_delegate = planter.behavior_delegate + my_delegate.eggs_sustained += src + owner = planter + +///Check the last refreshed time and burst the egg if we're over the lifetime of the egg +/obj/effect/alien/egg/carrier_egg/proc/check_decay() + if(last_refreshed + CARRIER_EGG_UNSUSTAINED_LIFE < world.time) + start_unstoppable_decay() + +///Burst the egg without hugger release after a 10 second timer & remove the life timer. +/obj/effect/alien/egg/carrier_egg/proc/start_unstoppable_decay() + addtimer(CALLBACK(src, PROC_REF(Burst), TRUE), 10 SECONDS) + if(life_timer) + deltimer(life_timer) + +/obj/effect/alien/egg/carrier_egg/Burst(kill, instant_trigger, mob/living/carbon/xenomorph/X, is_hugger_player_controlled) + . = ..() + if(owner) + var/datum/behavior_delegate/carrier_eggsac/behavior = owner.behavior_delegate + behavior.remove_egg_owner(src) + if(life_timer) + deltimer(life_timer) diff --git a/code/modules/cm_aliens/structures/special/egg_morpher.dm b/code/modules/cm_aliens/structures/special/egg_morpher.dm index 1fd154eb354c..bcd0ecc03be5 100644 --- a/code/modules/cm_aliens/structures/special/egg_morpher.dm +++ b/code/modules/cm_aliens/structures/special/egg_morpher.dm @@ -147,7 +147,7 @@ if(isitem(A)) var/obj/item/item = A if(item.is_objective && item.unacidable) - item.forceMove(get_step(loc, pick(alldirs))) + item.forceMove(get_step(loc, pick(GLOB.alldirs))) item.mouse_opacity = initial(item.mouse_opacity) QDEL_NULL(captured_mob) diff --git a/code/modules/cm_aliens/structures/special/pylon_core.dm b/code/modules/cm_aliens/structures/special/pylon_core.dm index 88964d76c3eb..a7cb15a31ce7 100644 --- a/code/modules/cm_aliens/structures/special/pylon_core.dm +++ b/code/modules/cm_aliens/structures/special/pylon_core.dm @@ -248,7 +248,7 @@ /obj/effect/alien/resin/special/pylon/core/proc/update_minimap_icon() SSminimaps.remove_marker(src) - SSminimaps.add_marker(src, z, MINIMAP_FLAG_XENO, "core") + SSminimaps.add_marker(src, z, get_minimap_flag_for_faction(linked_hive?.hivenumber), "core") /obj/effect/alien/resin/special/pylon/core/process() . = ..() @@ -272,12 +272,14 @@ if(spawning_larva || (last_larva_queue_time + spawn_cooldown * 4) < world.time) last_larva_queue_time = world.time var/list/players_with_xeno_pref = get_alien_candidates(linked_hive) - if(length(players_with_xeno_pref)) - if(spawning_larva && spawn_burrowed_larva(players_with_xeno_pref[1])) - // We were in spawning_larva mode and successfully spawned someone - count_spawned = 1 - // Update everyone's queue status - message_alien_candidates(players_with_xeno_pref, dequeued = count_spawned) + if(spawning_larva) + var/i = 0 + while(i < length(players_with_xeno_pref) && can_spawn_larva()) + if(spawn_burrowed_larva(players_with_xeno_pref[++i])) + // We were in spawning_larva mode and successfully spawned someone + count_spawned++ + // Update everyone's queue status + message_alien_candidates(players_with_xeno_pref, dequeued = count_spawned) if(linked_hive.hijack_burrowed_surge && (last_surge_time + surge_cooldown) < world.time) last_surge_time = world.time @@ -318,7 +320,7 @@ to_chat(new_xeno, SPAN_XENOANNOUNCE("You are a xenomorph larva awakened from slumber!")) playsound(new_xeno, 'sound/effects/xeno_newlarva.ogg', 50, 1) if(new_xeno.client) - if(new_xeno.client?.prefs.toggles_flashing & FLASH_POOLSPAWN) + if(new_xeno.client.prefs.toggles_flashing & FLASH_POOLSPAWN) window_flash(new_xeno.client) linked_hive.stored_larva-- diff --git a/code/modules/cm_aliens/structures/tunnel.dm b/code/modules/cm_aliens/structures/tunnel.dm index f08215fa432a..8c467be695b4 100644 --- a/code/modules/cm_aliens/structures/tunnel.dm +++ b/code/modules/cm_aliens/structures/tunnel.dm @@ -29,7 +29,7 @@ /obj/structure/tunnel/Initialize(mapload, h_number) . = ..() var/turf/L = get_turf(src) - tunnel_desc = L.loc.name + " ([loc.x], [loc.y]) [pick(greek_letters)]"//Default tunnel desc is the (x, y) + tunnel_desc = L.loc.name + " ([loc.x], [loc.y]) [pick(GLOB.greek_letters)]"//Default tunnel desc is the (x, y) if(h_number && GLOB.hive_datum[h_number]) hivenumber = h_number @@ -48,7 +48,7 @@ if(resin_trap) qdel(resin_trap) - SSminimaps.add_marker(src, z, MINIMAP_FLAG_XENO, "xenotunnel") + SSminimaps.add_marker(src, z, get_minimap_flag_for_faction(hivenumber), "xenotunnel") /obj/structure/tunnel/Destroy() if(hive) diff --git a/code/modules/cm_aliens/weeds.dm b/code/modules/cm_aliens/weeds.dm index 736d4f947450..4be1ce63ac25 100644 --- a/code/modules/cm_aliens/weeds.dm +++ b/code/modules/cm_aliens/weeds.dm @@ -216,7 +216,7 @@ return var/list/weeds = list() - for(var/dirn in cardinal) + for(var/dirn in GLOB.cardinals) var/turf/T = get_step(src, dirn) if(!istype(T)) continue @@ -282,7 +282,7 @@ if(istype(O, /obj/structure/barricade)) //cades on tile we're trying to expand to var/obj/structure/barricade/to_blocking_cade = O - if(to_blocking_cade.density && to_blocking_cade.dir == reverse_dir[direction] && to_blocking_cade.health >= (to_blocking_cade.maxhealth / 4)) + if(to_blocking_cade.density && to_blocking_cade.dir == GLOB.reverse_dir[direction] && to_blocking_cade.health >= (to_blocking_cade.maxhealth / 4)) return FALSE if(istype(O, /obj/structure/window/framed)) @@ -299,7 +299,7 @@ if(!U) U = loc if(istype(U)) - for(var/dirn in cardinal) + for(var/dirn in GLOB.cardinals) var/turf/T = get_step(U, dirn) if(!istype(T)) @@ -313,7 +313,7 @@ overlays.Cut() var/my_dir = 0 - for(var/check_dir in cardinal) + for(var/check_dir in GLOB.cardinals) var/turf/check = get_step(src, check_dir) if(!istype(check)) diff --git a/code/modules/cm_marines/NonLethalRestraints.dm b/code/modules/cm_marines/NonLethalRestraints.dm index 78884aa59843..e1eb7ec60a77 100644 --- a/code/modules/cm_marines/NonLethalRestraints.dm +++ b/code/modules/cm_marines/NonLethalRestraints.dm @@ -31,7 +31,7 @@ to_chat(user, SPAN_WARNING("\The [src] is out of charge.")) add_fingerprint(user) -/obj/item/weapon/stunprod/attack(mob/M, mob/user) +/obj/item/weapon/stunprod/attack(mob/living/M, mob/user) if(isrobot(M)) ..() return @@ -43,9 +43,10 @@ return if(status) - M.apply_effect(6, WEAKEN) + M.KnockDown(6) + M.Stun(6) charges -= 2 - M.visible_message(SPAN_DANGER("[M] has been prodded with the [src] by [user]!")) + M.visible_message(SPAN_DANGER("[M] has been prodded with [src] by [user]!")) user.attack_log += "\[[time_stamp()]\] Stunned [key_name(M)] with [src.name]" M.attack_log += "\[[time_stamp()]\] Stunned by [key_name(user)] with [src.name]" @@ -60,6 +61,7 @@ /obj/item/weapon/stunprod/emp_act(severity) + . = ..() switch(severity) if(1) charges = 0 diff --git a/code/modules/cm_marines/anti_air.dm b/code/modules/cm_marines/anti_air.dm index 8c8cab302e19..e867c0d64083 100644 --- a/code/modules/cm_marines/anti_air.dm +++ b/code/modules/cm_marines/anti_air.dm @@ -1,4 +1,4 @@ -var/obj/structure/anti_air_cannon/almayer_aa_cannon +GLOBAL_DATUM(almayer_aa_cannon, /obj/structure/anti_air_cannon) /obj/structure/anti_air_cannon name = "\improper IX-50 MGAD Cannon" @@ -20,14 +20,14 @@ var/obj/structure/anti_air_cannon/almayer_aa_cannon /obj/structure/anti_air_cannon/New() . = ..() - if(!almayer_aa_cannon) - almayer_aa_cannon = src + if(!GLOB.almayer_aa_cannon) + GLOB.almayer_aa_cannon = src /obj/structure/anti_air_cannon/Destroy() . = ..() - if(almayer_aa_cannon == src) - almayer_aa_cannon = null - message_admins("Reference to almayer_aa_cannon is lost!") + if(GLOB.almayer_aa_cannon == src) + GLOB.almayer_aa_cannon = null + message_admins("Reference to GLOB.almayer_aa_cannon is lost!") /obj/structure/anti_air_cannon/ex_act() return @@ -79,7 +79,7 @@ var/obj/structure/anti_air_cannon/almayer_aa_cannon data["sections"] = list() - for(var/section in almayer_ship_sections) + for(var/section in GLOB.almayer_ship_sections) data["sections"] += list(list( "section_id" = section, )) @@ -89,8 +89,8 @@ var/obj/structure/anti_air_cannon/almayer_aa_cannon /obj/structure/machinery/computer/aa_console/ui_data(mob/user) var/list/data = list() - data["disabled"] = almayer_aa_cannon.is_disabled - data["protecting_section"] = almayer_aa_cannon.protecting_section + data["disabled"] = GLOB.almayer_aa_cannon.is_disabled + data["protecting_section"] = GLOB.almayer_aa_cannon.protecting_section return data @@ -99,20 +99,20 @@ var/obj/structure/anti_air_cannon/almayer_aa_cannon if(.) return - if(!almayer_aa_cannon) + if(!GLOB.almayer_aa_cannon) return switch(action) if("protect") - almayer_aa_cannon.protecting_section = params["section_id"] - if(!(almayer_aa_cannon.protecting_section in almayer_ship_sections)) - almayer_aa_cannon.protecting_section = "" + GLOB.almayer_aa_cannon.protecting_section = params["section_id"] + if(!(GLOB.almayer_aa_cannon.protecting_section in GLOB.almayer_ship_sections)) + GLOB.almayer_aa_cannon.protecting_section = "" return - message_admins("[key_name(usr)] has set the AA to [html_encode(almayer_aa_cannon.protecting_section)].") - log_ares_antiair("[usr] Set AA to cover [html_encode(almayer_aa_cannon.protecting_section)].") + message_admins("[key_name(usr)] has set the AA to [html_encode(GLOB.almayer_aa_cannon.protecting_section)].") + log_ares_antiair("[usr] Set AA to cover [html_encode(GLOB.almayer_aa_cannon.protecting_section)].") . = TRUE if("deactivate") - almayer_aa_cannon.protecting_section = "" + GLOB.almayer_aa_cannon.protecting_section = "" message_admins("[key_name(usr)] has deactivated the AA cannon.") log_ares_antiair("[usr] Deactivated Anti Air systems.") . = TRUE diff --git a/code/modules/cm_marines/codebook.dm b/code/modules/cm_marines/codebook.dm index 11013f764538..64e74fba2c9a 100644 --- a/code/modules/cm_marines/codebook.dm +++ b/code/modules/cm_marines/codebook.dm @@ -11,10 +11,10 @@ GLOBAL_LIST_EMPTY(codebook_data) var/letter var/code_data = "
    [t] (unban)
    BANNED
    WHITELISTED
    BANNED
    WHITELISTED
    " for(var/i in 1 to 10) - letter = pick(greek_letters) + letter = pick(GLOB.greek_letters) number = rand(100,999) code_data += "" - letter = pick(greek_letters) + letter = pick(GLOB.greek_letters) number = rand(100,999) code_data += "" code_data += "
    CallResponse
    [letter]-[number][letter]-[number]
    " diff --git a/code/modules/cm_marines/dropship_ammo.dm b/code/modules/cm_marines/dropship_ammo.dm index ef59e643e4cf..53a22051299b 100644 --- a/code/modules/cm_marines/dropship_ammo.dm +++ b/code/modules/cm_marines/dropship_ammo.dm @@ -40,7 +40,7 @@ var/combat_equipment = TRUE /obj/structure/ship_ammo/attack_alien(mob/living/carbon/xenomorph/current_xenomorph) - if(unslashable) + if(unslashable) return XENO_NO_DELAY_ACTION current_xenomorph.animation_attack_on(src) playsound(src, 'sound/effects/metalhit.ogg', 25, 1) @@ -170,7 +170,7 @@ var/turf/impact_tile = pick(turf_list) sleep(1) var/datum/cause_data/cause_data = create_cause_data(initial(name), source_mob) - impact_tile.ex_act(EXPLOSION_THRESHOLD_VLOW, pick(alldirs), cause_data) + impact_tile.ex_act(EXPLOSION_THRESHOLD_VLOW, pick(GLOB.alldirs), cause_data) create_shrapnel(impact_tile,1,0,0,shrapnel_type,cause_data,FALSE,100) //simulates a bullet for(var/atom/movable/explosion_effect in impact_tile) if(iscarbon(explosion_effect)) diff --git a/code/modules/cm_marines/dropship_equipment.dm b/code/modules/cm_marines/dropship_equipment.dm index 851b91ea3e1a..b50198095aab 100644 --- a/code/modules/cm_marines/dropship_equipment.dm +++ b/code/modules/cm_marines/dropship_equipment.dm @@ -824,7 +824,7 @@ return var/list/possible_stretchers = list() - for(var/obj/structure/bed/medevac_stretcher/MS in activated_medevac_stretchers) + for(var/obj/structure/bed/medevac_stretcher/MS in GLOB.activated_medevac_stretchers) var/area/AR = get_area(MS) var/evaccee_name var/evaccee_triagecard_color @@ -1046,7 +1046,7 @@ return var/list/possible_fultons = list() - for(var/obj/item/stack/fulton/F in deployed_fultons) + for(var/obj/item/stack/fulton/F in GLOB.deployed_fultons) var/recovery_object if(F.attached_atom) recovery_object = F.attached_atom.name @@ -1148,7 +1148,7 @@ color = "#17d17a" /obj/structure/dropship_equipment/rappel_system/attack_hand(mob/living/carbon/human/user) - var/datum/cas_iff_group/cas_group = cas_groups[FACTION_MARINE] + var/datum/cas_iff_group/cas_group = GLOB.cas_groups[FACTION_MARINE] var/list/targets = cas_group.cas_signals if(!LAZYLEN(targets)) diff --git a/code/modules/cm_marines/equipment/gear.dm b/code/modules/cm_marines/equipment/gear.dm index b3ec6c800c68..00f956fdd4ed 100644 --- a/code/modules/cm_marines/equipment/gear.dm +++ b/code/modules/cm_marines/equipment/gear.dm @@ -149,15 +149,6 @@ return FALSE . = ..() handle_cloaking() - -/obj/item/coin/marine - name = "marine specialist weapon token" - desc = "Insert this into a specialist vendor in order to access a single highly dangerous weapon." - icon_state = "coin_platinum" - -/obj/item/coin/marine/attackby(obj/item/W as obj, mob/user as mob) //To remove attaching a string functionality - return - /obj/structure/broken_apc name = "\improper M577 armored personnel carrier" desc = "A large, armored behemoth capable of ferrying marines around. \nThis one is sitting nonfunctional." diff --git a/code/modules/cm_marines/equipment/kit_boxes.dm b/code/modules/cm_marines/equipment/kit_boxes.dm index 4a7864dbe0f5..d99da8f59f2c 100644 --- a/code/modules/cm_marines/equipment/kit_boxes.dm +++ b/code/modules/cm_marines/equipment/kit_boxes.dm @@ -165,9 +165,13 @@ var/squad_assignment_update = TRUE //this one is delivered via ASRS as a reward for DEFCON/techwebs/whatever else we will have -/obj/item/spec_kit/asrs +/obj/item/spec_kit/rifleman + squad_assignment_update = FALSE allowed_roles_list = list(JOB_SQUAD_MARINE, JOB_WO_SQUAD_MARINE) +/obj/item/spec_kit/rifleman/jobless + allowed_roles_list = list() + /obj/item/spec_kit/cryo squad_assignment_update = FALSE @@ -212,14 +216,25 @@ return FALSE return TRUE +/obj/item/spec_kit/rifleman/can_use(mob/living/carbon/human/user) + if(!length(allowed_roles_list)) + return TRUE + + for(var/allowed_role in allowed_roles_list) + if(user.job == allowed_role)//Alternate check to normal kit as this is distributed to people without SKILL_SPEC_TRAINED. + if(skillcheck(user, SKILL_SPEC_WEAPONS, SKILL_SPEC_KITTED) && !skillcheckexplicit(user, SKILL_SPEC_WEAPONS, SKILL_SPEC_ALL)) + to_chat(user, SPAN_WARNING("You already have specialization, give this kit to someone else!")) + return FALSE + return TRUE + /obj/item/spec_kit/proc/select_and_spawn(mob/living/carbon/human/user) - var/selection = tgui_input_list(user, "Pick your specialist equipment type.", "Specialist Kit Selection", available_specialist_kit_boxes) + var/selection = tgui_input_list(user, "Pick your specialist equipment type.", "Specialist Kit Selection", GLOB.available_specialist_kit_boxes) if(!selection || QDELETED(src)) return FALSE if(!skillcheckexplicit(user, SKILL_SPEC_WEAPONS, SKILL_SPEC_TRAINED) && !skillcheckexplicit(user, SKILL_SPEC_WEAPONS, SKILL_SPEC_ALL)) to_chat(user, SPAN_WARNING("You already unwrapped your [name], give this one to someone else!")) return - if(!available_specialist_kit_boxes[selection] || available_specialist_kit_boxes[selection] <= 0) + if(!GLOB.available_specialist_kit_boxes[selection] || GLOB.available_specialist_kit_boxes[selection] <= 0) to_chat(user, SPAN_WARNING("No more kits of this type may be chosen!")) return FALSE var/obj/item/card/id/ID = user.wear_id diff --git a/code/modules/cm_marines/equipment/mortar/mortars.dm b/code/modules/cm_marines/equipment/mortar/mortars.dm index 86bc3f5917c0..a4d4cfdc1bf5 100644 --- a/code/modules/cm_marines/equipment/mortar/mortars.dm +++ b/code/modules/cm_marines/equipment/mortar/mortars.dm @@ -314,7 +314,7 @@ if(get_turf(M) == target) relative_dir = 0 else - relative_dir = get_dir(M, target) + relative_dir = Get_Compass_Dir(M, target) M.show_message( \ SPAN_DANGER("A SHELL IS COMING DOWN [SPAN_UNDERLINE(relative_dir ? uppertext(("TO YOUR " + dir2text(relative_dir))) : uppertext("right above you"))]!"), SHOW_MESSAGE_VISIBLE, \ SPAN_DANGER("YOU HEAR SOMETHING COMING DOWN [SPAN_UNDERLINE(relative_dir ? uppertext(("TO YOUR " + dir2text(relative_dir))) : uppertext("right above you"))]!"), SHOW_MESSAGE_AUDIBLE \ @@ -324,7 +324,7 @@ if(get_turf(M) == target) relative_dir = 0 else - relative_dir = get_dir(M, target) + relative_dir = Get_Compass_Dir(M, target) M.show_message( \ SPAN_HIGHDANGER("A SHELL IS ABOUT TO IMPACT [SPAN_UNDERLINE(relative_dir ? uppertext(("TO YOUR " + dir2text(relative_dir))) : uppertext("right above you"))]!"), SHOW_MESSAGE_VISIBLE, \ SPAN_HIGHDANGER("YOU HEAR SOMETHING VERY CLOSE COMING DOWN [SPAN_UNDERLINE(relative_dir ? uppertext(("TO YOUR " + dir2text(relative_dir))) : uppertext("right above you"))]!"), SHOW_MESSAGE_AUDIBLE \ diff --git a/code/modules/cm_marines/m2c.dm b/code/modules/cm_marines/m2c.dm index ff16c924cddc..f61c9ef89659 100644 --- a/code/modules/cm_marines/m2c.dm +++ b/code/modules/cm_marines/m2c.dm @@ -554,7 +554,7 @@ animate(user, pixel_x=diff_x, pixel_y=diff_y, 0.4 SECONDS) else if(user.client) - user.client.change_view(world_view_size) + user.client.change_view(GLOB.world_view_size) user.client.pixel_x = 0 user.client.pixel_y = 0 diff --git a/code/modules/cm_marines/marines_consoles.dm b/code/modules/cm_marines/marines_consoles.dm index 734972ac7bab..994e9f1ddcb2 100644 --- a/code/modules/cm_marines/marines_consoles.dm +++ b/code/modules/cm_marines/marines_consoles.dm @@ -199,7 +199,7 @@ if(is_centcom) new_access = get_access(ACCESS_LIST_WY_ALL) else - var/datum/job/job = RoleAuthority.roles_for_mode[target] + var/datum/job/job = GLOB.RoleAuthority.roles_for_mode[target] if(!job) visible_message("[SPAN_BOLD("[src]")] states, \"DATA ERROR: Can not find next entry in database: [target]\"") @@ -293,7 +293,7 @@ /obj/structure/machinery/computer/card/ui_static_data(mob/user) var/list/data = list() - data["station_name"] = station_name + data["station_name"] = MAIN_SHIP_NAME data["centcom_access"] = is_centcom data["manifest"] = GLOB.data_core.get_manifest(FALSE, FALSE, TRUE) @@ -303,25 +303,25 @@ else if(Check_WO()) // I am not sure about WOs departments so it may need adjustment departments = list( - CARDCON_DEPARTMENT_COMMAND = ROLES_CIC & ROLES_WO, - CARDCON_DEPARTMENT_AUXCOM = ROLES_AUXIL_SUPPORT & ROLES_WO, - CARDCON_DEPARTMENT_MISC = ROLES_MISC & ROLES_WO, - CARDCON_DEPARTMENT_SECURITY = ROLES_POLICE & ROLES_WO, - CARDCON_DEPARTMENT_ENGINEERING = ROLES_ENGINEERING & ROLES_WO, - CARDCON_DEPARTMENT_SUPPLY = ROLES_REQUISITION & ROLES_WO, - CARDCON_DEPARTMENT_MEDICAL = ROLES_MEDICAL & ROLES_WO, - CARDCON_DEPARTMENT_MARINE = ROLES_MARINES + CARDCON_DEPARTMENT_COMMAND = GLOB.ROLES_CIC & GLOB.ROLES_WO, + CARDCON_DEPARTMENT_AUXCOM = GLOB.ROLES_AUXIL_SUPPORT & GLOB.ROLES_WO, + CARDCON_DEPARTMENT_MISC = GLOB.ROLES_MISC & GLOB.ROLES_WO, + CARDCON_DEPARTMENT_SECURITY = GLOB.ROLES_POLICE & GLOB.ROLES_WO, + CARDCON_DEPARTMENT_ENGINEERING = GLOB.ROLES_ENGINEERING & GLOB.ROLES_WO, + CARDCON_DEPARTMENT_SUPPLY = GLOB.ROLES_REQUISITION & GLOB.ROLES_WO, + CARDCON_DEPARTMENT_MEDICAL = GLOB.ROLES_MEDICAL & GLOB.ROLES_WO, + CARDCON_DEPARTMENT_MARINE = GLOB.ROLES_MARINES ) else departments = list( - CARDCON_DEPARTMENT_COMMAND = ROLES_CIC - ROLES_WO, - CARDCON_DEPARTMENT_AUXCOM = ROLES_AUXIL_SUPPORT - ROLES_WO, - CARDCON_DEPARTMENT_MISC = ROLES_MISC - ROLES_WO, - CARDCON_DEPARTMENT_SECURITY = ROLES_POLICE - ROLES_WO, - CARDCON_DEPARTMENT_ENGINEERING = ROLES_ENGINEERING - ROLES_WO, - CARDCON_DEPARTMENT_SUPPLY = ROLES_REQUISITION - ROLES_WO, - CARDCON_DEPARTMENT_MEDICAL = ROLES_MEDICAL - ROLES_WO, - CARDCON_DEPARTMENT_MARINE = ROLES_MARINES + CARDCON_DEPARTMENT_COMMAND = GLOB.ROLES_CIC - GLOB.ROLES_WO, + CARDCON_DEPARTMENT_AUXCOM = GLOB.ROLES_AUXIL_SUPPORT - GLOB.ROLES_WO, + CARDCON_DEPARTMENT_MISC = GLOB.ROLES_MISC - GLOB.ROLES_WO, + CARDCON_DEPARTMENT_SECURITY = GLOB.ROLES_POLICE - GLOB.ROLES_WO, + CARDCON_DEPARTMENT_ENGINEERING = GLOB.ROLES_ENGINEERING - GLOB.ROLES_WO, + CARDCON_DEPARTMENT_SUPPLY = GLOB.ROLES_REQUISITION - GLOB.ROLES_WO, + CARDCON_DEPARTMENT_MEDICAL = GLOB.ROLES_MEDICAL - GLOB.ROLES_WO, + CARDCON_DEPARTMENT_MARINE = GLOB.ROLES_MARINES ) data["jobs"] = list() for(var/department in departments) @@ -376,7 +376,7 @@ /obj/structure/machinery/computer/card/ui_data(mob/user) var/list/data = list() - data["station_name"] = station_name + data["station_name"] = MAIN_SHIP_NAME data["authenticated"] = authenticated data["has_id"] = !!target_id_card @@ -560,7 +560,7 @@ var/datum/squad/selected = get_squad_by_name(params["name"]) if(!selected) return - if(RoleAuthority.check_squad_capacity(person_to_modify, selected)) + if(GLOB.RoleAuthority.check_squad_capacity(person_to_modify, selected)) visible_message("[SPAN_BOLD("[src]")] states, \"CAPACITY ERROR: [selected] can't have another [person_to_modify.job].\"") return TRUE if(transfer_marine_to_squad(person_to_modify, selected, person_to_modify.assigned_squad, ID_to_modify)) @@ -594,7 +594,7 @@ /obj/structure/machinery/computer/squad_changer/ui_static_data(mob/user) var/list/data = list() var/list/squads = list() - for(var/datum/squad/current_squad in RoleAuthority.squads) + for(var/datum/squad/current_squad in GLOB.RoleAuthority.squads) if(current_squad.name != "Root" && !current_squad.locked && current_squad.active && current_squad.faction == faction) var/list/squad = list(list( "name" = current_squad.name, @@ -1005,7 +1005,7 @@ GLOBAL_LIST_EMPTY_TYPED(crewmonitor, /datum/crewmonitor) RAIDER_SQUAD = 131, ) var/squad_number = 70 - for(var/squad_name in ROLES_SQUAD_ALL + "") + for(var/squad_name in GLOB.ROLES_SQUAD_ALL + "") if(!squad_name) squad_number = 120 else squad_name += " " jobs += list( diff --git a/code/modules/cm_marines/orbital_cannon.dm b/code/modules/cm_marines/orbital_cannon.dm index 2448161aca7e..b003237f68ee 100644 --- a/code/modules/cm_marines/orbital_cannon.dm +++ b/code/modules/cm_marines/orbital_cannon.dm @@ -1,8 +1,8 @@ //global vars -var/obj/structure/orbital_cannon/almayer_orbital_cannon -var/list/ob_type_fuel_requirements +GLOBAL_DATUM(almayer_orbital_cannon, /obj/structure/orbital_cannon) +GLOBAL_LIST(ob_type_fuel_requirements) /obj/structure/orbital_cannon name = "\improper Orbital Cannon" @@ -30,16 +30,16 @@ var/list/ob_type_fuel_requirements /obj/structure/orbital_cannon/New() ..() - if(!almayer_orbital_cannon) - almayer_orbital_cannon = src + if(!GLOB.almayer_orbital_cannon) + GLOB.almayer_orbital_cannon = src - if(!ob_type_fuel_requirements) - ob_type_fuel_requirements = list() + if(!GLOB.ob_type_fuel_requirements) + GLOB.ob_type_fuel_requirements = list() var/list/L = list(4,5,6) var/amt for(var/i=1 to 3) amt = pick_n_take(L) - ob_type_fuel_requirements += amt + GLOB.ob_type_fuel_requirements += amt var/turf/T = locate(x+1,y+2,z) var/obj/structure/orbital_tray/O = new(T) @@ -48,9 +48,9 @@ var/list/ob_type_fuel_requirements /obj/structure/orbital_cannon/Destroy() QDEL_NULL(tray) - if(almayer_orbital_cannon == src) - almayer_orbital_cannon = null - message_admins("Reference to almayer_orbital_cannon is lost!") + if(GLOB.almayer_orbital_cannon == src) + GLOB.almayer_orbital_cannon = null + message_admins("Reference to GLOB.almayer_orbital_cannon is lost!") return ..() /obj/structure/orbital_cannon/ex_act() @@ -82,15 +82,15 @@ var/list/ob_type_fuel_requirements if(!tray.warhead) if(user) - to_chat(user, "no warhead in the tray, loading operation cancelled.") + to_chat(user, SPAN_WARNING("No warhead in the tray, loading operation cancelled.")) return if(tray.fuel_amt < 1) - to_chat(user, "no solid fuel in the tray, loading operation cancelled.") + to_chat(user, SPAN_WARNING("No solid fuel in the tray, loading operation cancelled.")) return if(loaded_tray) - to_chat(user, "Tray is already loaded.") + to_chat(user, SPAN_WARNING("Tray is already loaded.")) return tray.forceMove(src) @@ -190,17 +190,16 @@ var/list/ob_type_fuel_requirements update_icon() -/var/global/list/orbital_cannon_cancellation = new - +GLOBAL_LIST_EMPTY(orbital_cannon_cancellation) /obj/structure/orbital_cannon/proc/get_misfuel_amount() switch(tray.warhead.warhead_kind) if("explosive") - return abs(ob_type_fuel_requirements[1] - tray.fuel_amt) + return abs(GLOB.ob_type_fuel_requirements[1] - tray.fuel_amt) if("incendiary") - return abs(ob_type_fuel_requirements[2] - tray.fuel_amt) + return abs(GLOB.ob_type_fuel_requirements[2] - tray.fuel_amt) if("cluster") - return abs(ob_type_fuel_requirements[3] - tray.fuel_amt) + return abs(GLOB.ob_type_fuel_requirements[3] - tray.fuel_amt) return 0 /obj/structure/orbital_cannon/proc/fire_ob_cannon(turf/T, mob/user, squad_behalf) @@ -389,7 +388,7 @@ var/list/ob_type_fuel_requirements playsound(target, 'sound/weapons/gun_orbital_travel.ogg', 100, 1, 75) var/cancellation_token = rand(0,32000) - orbital_cannon_cancellation["[cancellation_token]"] = src + GLOB.orbital_cannon_cancellation["[cancellation_token]"] = src message_admins(FONT_SIZE_XL("CLICK TO CANCEL THIS OB")) var/relative_dir @@ -397,7 +396,7 @@ var/list/ob_type_fuel_requirements if(get_turf(M) == target) relative_dir = 0 else - relative_dir = get_dir(M, target) + relative_dir = Get_Compass_Dir(M, target) M.show_message( \ SPAN_HIGHDANGER("The sky erupts into flames [SPAN_UNDERLINE(relative_dir ? ("to the " + dir2text(relative_dir)) : "right above you")]!"), SHOW_MESSAGE_VISIBLE, \ SPAN_HIGHDANGER("You hear a very loud sound coming from above to the [SPAN_UNDERLINE(relative_dir ? ("to the " + dir2text(relative_dir)) : "right above you")]!"), SHOW_MESSAGE_AUDIBLE \ @@ -408,7 +407,7 @@ var/list/ob_type_fuel_requirements if(get_turf(M) == target) relative_dir = 0 else - relative_dir = get_dir(M, target) + relative_dir = Get_Compass_Dir(M, target) M.show_message( \ SPAN_HIGHDANGER("The sky roars louder [SPAN_UNDERLINE(relative_dir ? ("to the " + dir2text(relative_dir)) : "right above you")]!"), SHOW_MESSAGE_VISIBLE, \ SPAN_HIGHDANGER("The sound becomes louder [SPAN_UNDERLINE(relative_dir ? ("to the " + dir2text(relative_dir)) : "right above you")]!"), SHOW_MESSAGE_AUDIBLE \ @@ -422,9 +421,9 @@ var/list/ob_type_fuel_requirements ) sleep(OB_TRAVEL_TIMING/3) - if(orbital_cannon_cancellation["[cancellation_token]"]) // the cancelling notification is in the topic + if(GLOB.orbital_cannon_cancellation["[cancellation_token]"]) // the cancelling notification is in the topic target.ceiling_debris_check(5) - orbital_cannon_cancellation["[cancellation_token]"] = null + GLOB.orbital_cannon_cancellation["[cancellation_token]"] = null return TRUE return FALSE @@ -627,33 +626,33 @@ var/list/ob_type_fuel_requirements /obj/structure/machinery/computer/orbital_cannon_console/ui_static_data(mob/user) var/list/data = list() - data["hefuel"] = ob_type_fuel_requirements[1] - data["incfuel"] = ob_type_fuel_requirements[2] - data["clusterfuel"] = ob_type_fuel_requirements[3] + data["hefuel"] = GLOB.ob_type_fuel_requirements[1] + data["incfuel"] = GLOB.ob_type_fuel_requirements[2] + data["clusterfuel"] = GLOB.ob_type_fuel_requirements[3] - data["linkedcannon"] = almayer_orbital_cannon - data["linkedtray"] = almayer_orbital_cannon.tray + data["linkedcannon"] = GLOB.almayer_orbital_cannon + data["linkedtray"] = GLOB.almayer_orbital_cannon.tray return data /obj/structure/machinery/computer/orbital_cannon_console/ui_data(mob/user) var/list/data = list() - data["loadedtray"] = almayer_orbital_cannon.loaded_tray - data["chamberedtray"] = almayer_orbital_cannon.chambered_tray + data["loadedtray"] = GLOB.almayer_orbital_cannon.loaded_tray + data["chamberedtray"] = GLOB.almayer_orbital_cannon.chambered_tray var/warhead_name = null - if(almayer_orbital_cannon.tray.warhead) - warhead_name = almayer_orbital_cannon.tray.warhead.name + if(GLOB.almayer_orbital_cannon.tray.warhead) + warhead_name = GLOB.almayer_orbital_cannon.tray.warhead.name data["warhead"] = warhead_name - data["fuel"] = almayer_orbital_cannon.tray.fuel_amt + data["fuel"] = GLOB.almayer_orbital_cannon.tray.fuel_amt data["worldtime"] = world.time - data["nextchambertime"] = almayer_orbital_cannon.ob_chambering_cooldown - data["chamber_cooldown"] = almayer_orbital_cannon.chamber_cooldown_time + data["nextchambertime"] = GLOB.almayer_orbital_cannon.ob_chambering_cooldown + data["chamber_cooldown"] = GLOB.almayer_orbital_cannon.chamber_cooldown_time - data["disabled"] = almayer_orbital_cannon.is_disabled + data["disabled"] = GLOB.almayer_orbital_cannon.is_disabled return data @@ -664,15 +663,15 @@ var/list/ob_type_fuel_requirements switch(action) if("load_tray") - almayer_orbital_cannon.load_tray(usr) + GLOB.almayer_orbital_cannon.load_tray(usr) . = TRUE if("unload_tray") - almayer_orbital_cannon.unload_tray(usr) + GLOB.almayer_orbital_cannon.unload_tray(usr) . = TRUE if("chamber_tray") - almayer_orbital_cannon.chamber_payload(usr) + GLOB.almayer_orbital_cannon.chamber_payload(usr) . = TRUE add_fingerprint(usr) @@ -686,4 +685,3 @@ var/list/ob_type_fuel_requirements return TRUE tgui_interact(user) - diff --git a/code/modules/cm_marines/overwatch.dm b/code/modules/cm_marines/overwatch.dm index 6db426a348c3..c5b296772c79 100644 --- a/code/modules/cm_marines/overwatch.dm +++ b/code/modules/cm_marines/overwatch.dm @@ -39,8 +39,11 @@ /obj/structure/machinery/computer/overwatch/Initialize() . = ..() - tacmap = new(src, minimap_type) + if (faction == FACTION_MARINE) + tacmap = new /datum/tacmap/drawing(src, minimap_type) + else + tacmap = new(src, minimap_type) // Non-drawing version /obj/structure/machinery/computer/overwatch/Destroy() QDEL_NULL(tacmap) @@ -112,7 +115,7 @@ if(!current_squad) data["squad_list"] = list() - for(var/datum/squad/current_squad in RoleAuthority.squads) + for(var/datum/squad/current_squad in GLOB.RoleAuthority.squads) if(current_squad.active && !current_squad.overwatch_officer && current_squad.faction == faction && current_squad.name != "Root") data["squad_list"] += current_squad.name return data @@ -202,7 +205,7 @@ acting_sl = " (acting SL)" is_squad_leader = TRUE else if(current_turf && (current_turf.z == SL_z)) - distance = "[get_dist(marine_human, current_squad.squad_leader)] ([dir2text_short(get_dir(current_squad.squad_leader, marine_human))])" + distance = "[get_dist(marine_human, current_squad.squad_leader)] ([dir2text_short(Get_Compass_Dir(current_squad.squad_leader, marine_human))])" switch(marine_human.stat) @@ -315,8 +318,8 @@ data["can_launch_crates"] = has_supply_pad data["has_crate_loaded"] = supply_crate data["supply_cooldown"] = COOLDOWN_TIMELEFT(current_squad, next_supplydrop) - data["ob_cooldown"] = COOLDOWN_TIMELEFT(almayer_orbital_cannon, ob_firing_cooldown) - data["ob_loaded"] = almayer_orbital_cannon.chambered_tray + data["ob_cooldown"] = COOLDOWN_TIMELEFT(GLOB.almayer_orbital_cannon, ob_firing_cooldown) + data["ob_loaded"] = GLOB.almayer_orbital_cannon.chambered_tray data["operator"] = operator.name @@ -340,7 +343,7 @@ if(current_squad) return var/datum/squad/selected_squad - for(var/datum/squad/searching_squad in RoleAuthority.squads) + for(var/datum/squad/searching_squad in GLOB.RoleAuthority.squads) if(searching_squad.active && !searching_squad.overwatch_officer && searching_squad.faction == faction && searching_squad.name != "Root" && searching_squad.name == params["squad"]) selected_squad = searching_squad break @@ -453,10 +456,10 @@ return x_bomb = text2num(params["x"]) y_bomb = text2num(params["y"]) - if(almayer_orbital_cannon.is_disabled) + if(GLOB.almayer_orbital_cannon.is_disabled) to_chat(user, "[icon2html(src, usr)] [SPAN_WARNING("Orbital bombardment cannon disabled!")]") - else if(!COOLDOWN_FINISHED(almayer_orbital_cannon, ob_firing_cooldown)) - to_chat(user, "[icon2html(src, usr)] [SPAN_WARNING("Orbital bombardment cannon not yet ready to fire again! Please wait [COOLDOWN_TIMELEFT(almayer_orbital_cannon, ob_firing_cooldown)/10] seconds.")]") + else if(!COOLDOWN_FINISHED(GLOB.almayer_orbital_cannon, ob_firing_cooldown)) + to_chat(user, "[icon2html(src, usr)] [SPAN_WARNING("Orbital bombardment cannon not yet ready to fire again! Please wait [COOLDOWN_TIMELEFT(GLOB.almayer_orbital_cannon, ob_firing_cooldown)/10] seconds.")]") else handle_bombard(user) @@ -503,7 +506,7 @@ user.UnregisterSignal(cam, COMSIG_PARENT_QDELETING) cam = null user.reset_view(null) - else if(user.client.view != world_view_size) + else if(user.client.view != GLOB.world_view_size) to_chat(user, SPAN_WARNING("You're too busy peering through binoculars.")) else if(cam) @@ -628,9 +631,9 @@ var/area/ob_area = get_area(target) if(!ob_area) return - var/ob_type = almayer_orbital_cannon.tray.warhead ? almayer_orbital_cannon.tray.warhead.warhead_kind : "UNKNOWN" + var/ob_type = GLOB.almayer_orbital_cannon.tray.warhead ? GLOB.almayer_orbital_cannon.tray.warhead.warhead_kind : "UNKNOWN" - for(var/datum/squad/S in RoleAuthority.squads) + for(var/datum/squad/S in GLOB.RoleAuthority.squads) if(!S.active) continue for(var/mob/living/carbon/human/M in S.marines_list) @@ -697,7 +700,7 @@ return var/list/available_squads = list() - for(var/datum/squad/squad as anything in RoleAuthority.squads) + for(var/datum/squad/squad as anything in GLOB.RoleAuthority.squads) if(squad.active && !squad.locked && squad.faction == faction && squad.name != "Root") available_squads += squad @@ -718,7 +721,7 @@ to_chat(usr, "[icon2html(src, usr)] [SPAN_WARNING("[transfer_marine] is already in [new_squad]!")]") return - if(RoleAuthority.check_squad_capacity(transfer_marine, new_squad)) + if(GLOB.RoleAuthority.check_squad_capacity(transfer_marine, new_squad)) to_chat(usr, "[icon2html(src, usr)] [SPAN_WARNING("Transfer aborted. [new_squad] can't have another [transfer_marine.job].")]") return @@ -741,7 +744,7 @@ to_chat(user, "[icon2html(src, user)] [SPAN_WARNING("No squad selected!")]") return - if(!almayer_orbital_cannon.chambered_tray) + if(!GLOB.almayer_orbital_cannon.chambered_tray) to_chat(user, "[icon2html(src, user)] [SPAN_WARNING("The orbital cannon has no ammo chambered.")]") return @@ -791,8 +794,8 @@ if(!T) return - var/ob_name = lowertext(almayer_orbital_cannon.tray.warhead.name) - var/mutable_appearance/warhead_appearance = mutable_appearance(almayer_orbital_cannon.tray.warhead.icon, almayer_orbital_cannon.tray.warhead.icon_state) + var/ob_name = lowertext(GLOB.almayer_orbital_cannon.tray.warhead.name) + var/mutable_appearance/warhead_appearance = mutable_appearance(GLOB.almayer_orbital_cannon.tray.warhead.icon, GLOB.almayer_orbital_cannon.tray.warhead.icon_state) notify_ghosts(header = "Bombardment Inbound", message = "\A [ob_name] targeting [get_area(T)] has been fired!", source = T, alert_overlay = warhead_appearance, extra_large = TRUE) /// Project ARES interface log. @@ -800,7 +803,7 @@ busy = FALSE if(istype(T)) - almayer_orbital_cannon.fire_ob_cannon(T, user, current_squad) + GLOB.almayer_orbital_cannon.fire_ob_cannon(T, user, current_squad) user.count_niche_stat(STATISTICS_NICHE_OB) /obj/structure/machinery/computer/overwatch/proc/handle_supplydrop() diff --git a/code/modules/cm_marines/shuttle_backend.dm b/code/modules/cm_marines/shuttle_backend.dm index 3de169d773e5..142caa81eb8a 100644 --- a/code/modules/cm_marines/shuttle_backend.dm +++ b/code/modules/cm_marines/shuttle_backend.dm @@ -87,11 +87,6 @@ DOCUMENTATION ON HOW TO ADD A NEW SHUTTLE: Fourkhan, 6/7/19 */ -var/global/list/s_info = null - -/proc/loadShuttleInfoDatums() - s_info = list() - return 1 /proc/get_shuttle_turfs(turf/ref, list/L) diff --git a/code/modules/cm_marines/smartgun_mount.dm b/code/modules/cm_marines/smartgun_mount.dm index 501cbfdd6e2e..01183ebceca5 100644 --- a/code/modules/cm_marines/smartgun_mount.dm +++ b/code/modules/cm_marines/smartgun_mount.dm @@ -1,12 +1,6 @@ ////////////////////////////////////////////////////////////// //Mounted MG, Replacment for the current jury rig code. -//Adds a coin for engi vendors -/obj/item/coin/marine/engineer - name = "marine engineer support token" - desc = "Insert this into an engineer vendor in order to access a support weapon." - icon_state = "coin_platinum" - // First thing we need is the ammo drum for this thing. /obj/item/ammo_magazine/m56d name = "M56D drum magazine (10x28mm Caseless)" @@ -910,7 +904,7 @@ animate(user, pixel_x=diff_x, pixel_y=diff_y, 0.4 SECONDS) else if(user.client) - user.client.change_view(world_view_size) + user.client.change_view(GLOB.world_view_size) user.client.pixel_x = 0 user.client.pixel_y = 0 animate(user, pixel_x=user_old_x, pixel_y=user_old_y, 4, 1) diff --git a/code/modules/cm_marines/vehicle_part_fabricator.dm b/code/modules/cm_marines/vehicle_part_fabricator.dm index ca53d368bbd6..0095ff54a2ab 100644 --- a/code/modules/cm_marines/vehicle_part_fabricator.dm +++ b/code/modules/cm_marines/vehicle_part_fabricator.dm @@ -123,13 +123,13 @@ unacidable = TRUE /obj/structure/machinery/part_fabricator/dropship/get_point_store() - return supply_controller.dropship_points + return GLOB.supply_controller.dropship_points /obj/structure/machinery/part_fabricator/dropship/add_to_point_store(number = 1) - supply_controller.dropship_points += number + GLOB.supply_controller.dropship_points += number /obj/structure/machinery/part_fabricator/dropship/spend_point_store(number = 1) - supply_controller.dropship_points -= number + GLOB.supply_controller.dropship_points -= number /obj/structure/machinery/part_fabricator/dropship/ui_static_data(mob/user) var/list/static_data = list() @@ -230,13 +230,13 @@ indestructible = TRUE /obj/structure/machinery/part_fabricator/tank/get_point_store() - return supply_controller.tank_points + return GLOB.supply_controller.tank_points /obj/structure/machinery/part_fabricator/tank/add_to_point_store(number = 1) - supply_controller.tank_points += number + GLOB.supply_controller.tank_points += number /obj/structure/machinery/part_fabricator/tank/spend_point_store(number = 1) - supply_controller.tank_points -= number + GLOB.supply_controller.tank_points -= number /obj/structure/machinery/part_fabricator/tank/ui_static_data(mob/user) var/list/static_data = list() diff --git a/code/modules/cm_phone/phone.dm b/code/modules/cm_phone/phone.dm index fd9c8aa02d44..b4f13044bc20 100644 --- a/code/modules/cm_phone/phone.dm +++ b/code/modules/cm_phone/phone.dm @@ -26,6 +26,8 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter) var/enabled = TRUE /// Whether or not the phone is receiving calls or not. Varies between on/off or forcibly on/off. var/do_not_disturb = PHONE_DND_OFF + /// The Phone_ID of the last person to call this telephone. + var/last_caller var/base_icon_state @@ -138,6 +140,7 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter) var/list/data = list() data["availability"] = do_not_disturb + data["last_caller"] = last_caller return data @@ -175,6 +178,7 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter) calling = T T.caller = src + T.last_caller = src.phone_id T.update_icon() to_chat(user, SPAN_PURPLE("[icon2html(src, user)] Dialing [calling_phone_id]..")) diff --git a/code/modules/cm_preds/falcon.dm b/code/modules/cm_preds/falcon.dm index 4461f9b4f7e7..dc898a2b76ba 100644 --- a/code/modules/cm_preds/falcon.dm +++ b/code/modules/cm_preds/falcon.dm @@ -85,11 +85,11 @@ PF.flags_can_pass_all = PASS_ALL /mob/hologram/falcon/add_to_all_mob_huds() - var/datum/mob_hud/hud = huds[MOB_HUD_HUNTER] + var/datum/mob_hud/hud = GLOB.huds[MOB_HUD_HUNTER] hud.add_to_hud(src) /mob/hologram/falcon/remove_from_all_mob_huds() - var/datum/mob_hud/hud = huds[MOB_HUD_HUNTER] + var/datum/mob_hud/hud = GLOB.huds[MOB_HUD_HUNTER] hud.remove_from_hud(src) /mob/hologram/falcon/med_hud_set_status() @@ -119,6 +119,7 @@ qdel(src) /mob/hologram/falcon/emp_act() + . = ..() new /obj/item/trash/falcon_drone/emp(loc) QDEL_NULL(parent_drone) qdel(src) diff --git a/code/modules/cm_preds/yaut_bracers.dm b/code/modules/cm_preds/yaut_bracers.dm index 32b1aef81e07..df8ab136ea18 100644 --- a/code/modules/cm_preds/yaut_bracers.dm +++ b/code/modules/cm_preds/yaut_bracers.dm @@ -292,6 +292,7 @@ right_wristblades = new(src) /obj/item/clothing/gloves/yautja/hunter/emp_act(severity) + . = ..() charge = max(charge - (severity * 500), 0) if(ishuman(loc)) var/mob/living/carbon/human/wearer = loc @@ -496,7 +497,7 @@ if(dist < closest) closest = dist closest_item = tracked_item - direction = get_dir(M,loc) + direction = Get_Compass_Dir(M,loc) areaLoc = loc for(var/mob/living/carbon/human/Y as anything in GLOB.yautja_mob_list) if(Y.stat != DEAD) @@ -513,7 +514,7 @@ var/dist = get_dist(M,Y) if(dist < closest) closest = dist - direction = get_dir(M,Y) + direction = Get_Compass_Dir(M,Y) areaLoc = loc var/output = FALSE @@ -590,9 +591,9 @@ playsound(M.loc,'sound/effects/pred_cloakon.ogg', 15, 1) animate(M, alpha = new_alpha, time = 1.5 SECONDS, easing = SINE_EASING|EASE_OUT) - var/datum/mob_hud/security/advanced/SA = huds[MOB_HUD_SECURITY_ADVANCED] + var/datum/mob_hud/security/advanced/SA = GLOB.huds[MOB_HUD_SECURITY_ADVANCED] SA.remove_from_hud(M) - var/datum/mob_hud/xeno_infection/XI = huds[MOB_HUD_XENO_INFECTION] + var/datum/mob_hud/xeno_infection/XI = GLOB.huds[MOB_HUD_XENO_INFECTION] XI.remove_from_hud(M) anim(M.loc,M,'icons/mob/mob.dmi',,"cloak",,M.dir) @@ -632,9 +633,9 @@ user.see_invisible = initial(user.see_invisible) cloak_timer = world.time + (DECLOAK_STANDARD / 2) - var/datum/mob_hud/security/advanced/SA = huds[MOB_HUD_SECURITY_ADVANCED] + var/datum/mob_hud/security/advanced/SA = GLOB.huds[MOB_HUD_SECURITY_ADVANCED] SA.add_to_hud(user) - var/datum/mob_hud/xeno_infection/XI = huds[MOB_HUD_XENO_INFECTION] + var/datum/mob_hud/xeno_infection/XI = GLOB.huds[MOB_HUD_XENO_INFECTION] XI.add_to_hud(user) anim(user.loc, user, 'icons/mob/mob.dmi', null, "uncloak", null, user.dir) @@ -927,7 +928,7 @@ addtimer(VARSET_CALLBACK(src, disc_timer, FALSE), 10 SECONDS) for(var/mob/living/simple_animal/hostile/smartdisc/S in range(7)) - to_chat(caller, SPAN_WARNING("The [S] skips back towards you!")) + to_chat(caller, SPAN_WARNING("[S] skips back towards you!")) new /obj/item/explosive/grenade/spawnergrenade/smartdisc(S.loc) qdel(S) diff --git a/code/modules/cm_preds/yaut_machines.dm b/code/modules/cm_preds/yaut_machines.dm index a1782ca22b85..f076c6782d9a 100644 --- a/code/modules/cm_preds/yaut_machines.dm +++ b/code/modules/cm_preds/yaut_machines.dm @@ -6,6 +6,7 @@ breakable = FALSE minimap_type = MINIMAP_FLAG_ALL + faction = FACTION_YAUTJA /obj/structure/machinery/autolathe/yautja name = "yautja autolathe" diff --git a/code/modules/cm_preds/yaut_mask.dm b/code/modules/cm_preds/yaut_mask.dm index ae27809a3ec7..7e8e661e8a5e 100644 --- a/code/modules/cm_preds/yaut_mask.dm +++ b/code/modules/cm_preds/yaut_mask.dm @@ -172,7 +172,7 @@ STOP_PROCESSING(SSobj, src) if(istype(user) && user.wear_mask == src) //inventory reference is only cleared after dropped(). for(var/listed_hud in mask_huds) - var/datum/mob_hud/H = huds[listed_hud] + var/datum/mob_hud/H = GLOB.huds[listed_hud] H.remove_hud_from(user, src) var/obj/item/visor = user.glasses if(visor) //make your hud fuck off @@ -187,7 +187,7 @@ if(slot == WEAR_FACE) START_PROCESSING(SSobj, src) for(var/listed_hud in mask_huds) - var/datum/mob_hud/H = huds[listed_hud] + var/datum/mob_hud/H = GLOB.huds[listed_hud] H.add_hud_to(user, src) if(current_goggles) var/obj/item/clothing/gloves/yautja/bracer = user.gloves diff --git a/code/modules/cm_tech/droppod/gear_access_point.dm b/code/modules/cm_tech/droppod/gear_access_point.dm index b581764e2d3b..608fd33e18f4 100644 --- a/code/modules/cm_tech/droppod/gear_access_point.dm +++ b/code/modules/cm_tech/droppod/gear_access_point.dm @@ -43,9 +43,9 @@ return /obj/structure/techpod_vendor/proc/get_access_permission(mob/living/carbon/human/user) - if(SSticker.mode == GAMEMODE_WHISKEY_OUTPOST || master_mode == GAMEMODE_WHISKEY_OUTPOST) //all WO has lifted access restrictions + if(SSticker.mode == GAMEMODE_WHISKEY_OUTPOST || GLOB.master_mode == GAMEMODE_WHISKEY_OUTPOST) //all WO has lifted access restrictions return TRUE - else if(SSticker.mode == "Distress Signal" || master_mode == "Distress Signal") + else if(SSticker.mode == "Distress Signal" || GLOB.master_mode == "Distress Signal") if(access_settings_override) //everyone allowed to grab stuff return TRUE else if(user.get_target_lock(faction_requirement)) //only it's faction group allowed diff --git a/code/modules/cm_tech/implements/engi_czsp.dm b/code/modules/cm_tech/implements/engi_czsp.dm index 8e1ab8248c19..f3024129b3eb 100644 --- a/code/modules/cm_tech/implements/engi_czsp.dm +++ b/code/modules/cm_tech/implements/engi_czsp.dm @@ -35,7 +35,7 @@ return if((user.get_active_hand()) != src) - to_chat(user, SPAN_WARNING("You must be holding the [src] to upgrade \the [D]!")) + to_chat(user, SPAN_WARNING("You must be holding [src] to upgrade [D]!")) return var/type_to_change_to = D.upgrade_string_to_type(chosen_upgrade) diff --git a/code/modules/cm_tech/implements/stims.dm b/code/modules/cm_tech/implements/stims.dm index 7b0f74457a7f..f7307e2ef99b 100644 --- a/code/modules/cm_tech/implements/stims.dm +++ b/code/modules/cm_tech/implements/stims.dm @@ -47,7 +47,7 @@ return icon_state = "stimpack" - var/datum/reagent/R = chemical_reagents_list[chemname] + var/datum/reagent/R = GLOB.chemical_reagents_list[chemname] if(!R) return diff --git a/code/modules/cm_tech/implements/tank.dm b/code/modules/cm_tech/implements/tank.dm index 1ce83c37eae3..ec1b81e9f675 100644 --- a/code/modules/cm_tech/implements/tank.dm +++ b/code/modules/cm_tech/implements/tank.dm @@ -1,16 +1,3 @@ -/datum/supply_packs/vc_kit - name = "Vehicle Crewman Kits" - contains = list( - /obj/item/pamphlet/skill/vc, - /obj/item/pamphlet/skill/vc, - ) - cost = 0 - containertype = /obj/structure/closet/crate/supply - containername = "vehicle crewman kits crate" - buyable = 0 - group = "Operations" - iteration_needed = null - /obj/item/pamphlet/skill/vc name = "vehicle training manual" desc = "A manual used to quickly impart vital knowledge on driving vehicles." @@ -18,26 +5,34 @@ trait = /datum/character_trait/skills/vc bypass_pamphlet_limit = TRUE -/obj/item/tank_coupon - name = "tank coupon" - desc = "A coupon to be used for ASRS Vehicle Consoles to grant the wearer a TANK! One use only." +/obj/item/vehicle_coupon + name = "vehicle coupon" + desc = "A coupon to be used for ASRS Vehicle Consoles to grant the wearer an actual APC! Yeah baby, we're done walking! One use only. The ASRS elevator must be manually sent to lower level. Special restrictions may apply. No warranty." icon = 'icons/obj/items/pamphlets.dmi' icon_state = "pamphlet_written" item_state = "pamphlet_written" + var/vehicle_type = /datum/vehicle_order/apc/empty + var/vehicle_category = "APC" -/obj/item/tank_coupon/attack_self(mob/user) +/obj/item/vehicle_coupon/tank + name = "tank coupon" + desc = "We're done playing! This coupon allows the ship crew to retrieve a complete Longstreet tank from Vehicle ASRS. Make sure to send the ASRS lift down so it can be retrieved. One use only. LTB not included. Comes with free friendly fire." + vehicle_type = /datum/vehicle_order/tank/broken + vehicle_category = "TANK" + +/obj/item/vehicle_coupon/attack_self(mob/user) if(QDELETED(src)) return - if(redeem_tank()) - to_chat(user, SPAN_WARNING("\The [src] catches fire as it is read, resetting the ASRS Vehicle system!")) + if(redeem_vehicle()) + to_chat(user, SPAN_WARNING("\The [src] catches fire as it is read and resets the ASRS Vehicle system! Send the lift down and haul your prize up.")) qdel(src) return ..() -/obj/item/tank_coupon/proc/redeem_tank(mob/user) +/obj/item/vehicle_coupon/proc/redeem_vehicle(mob/user) SHOULD_NOT_SLEEP(TRUE) . = FALSE - var/obj/structure/machinery/computer/supplycomp/vehicle/comp = VehicleElevatorConsole - var/obj/structure/machinery/cm_vending/gear/vehicle_crew/gearcomp = VehicleGearConsole + var/obj/structure/machinery/computer/supplycomp/vehicle/comp = GLOB.VehicleElevatorConsole + var/obj/structure/machinery/cm_vending/gear/vehicle_crew/gearcomp = GLOB.VehicleGearConsole if(!comp || !gearcomp) return @@ -46,7 +41,7 @@ comp.spent = FALSE QDEL_NULL_LIST(comp.vehicles) comp.vehicles = list( - new /datum/vehicle_order/tank() + new vehicle_type(), ) comp.allowed_roles = null comp.req_access = list() @@ -56,17 +51,7 @@ gearcomp.req_access = list() gearcomp.req_one_access = list() gearcomp.vendor_role = list() - gearcomp.selected_vehicle = "TANK" + gearcomp.selected_vehicle = vehicle_category gearcomp.available_categories = VEHICLE_ALL_AVAILABLE - var/datum/supply_packs/VK = /datum/supply_packs/vc_kit - var/pack = initial(VK.name) - var/datum/supply_order/O = new /datum/supply_order() - O.ordernum = supply_controller.ordernum - supply_controller.ordernum++ - O.object = supply_controller.supply_packs[pack] - O.orderedby = MAIN_AI_SYSTEM - O.approvedby = MAIN_AI_SYSTEM - supply_controller.shoppinglist += O - return TRUE diff --git a/code/modules/cm_tech/research_memories.dm b/code/modules/cm_tech/research_memories.dm index d46a52b8b47a..4d84a762c719 100644 --- a/code/modules/cm_tech/research_memories.dm +++ b/code/modules/cm_tech/research_memories.dm @@ -14,8 +14,8 @@ clue_category["name"] = "Analyze Chemicals" clue_category["icon"] = "scroll" clue_category["clues"] = list() - for (var/chemid in chemical_data.chemical_not_completed_objective_list) - clue_category["clues"] += list(chemical_data.get_tgui_data(chemid)) + for (var/chemid in GLOB.chemical_data.chemical_not_completed_objective_list) + clue_category["clues"] += list(GLOB.chemical_data.get_tgui_data(chemid)) clue_categories += list(clue_category) return clue_categories @@ -51,7 +51,7 @@ "Analyze Chemicals", SSobjectives.statistics["chemicals_completed"], FALSE, - chemical_data.rsc_credits, + GLOB.chemical_data.rsc_credits, "white" )) @@ -60,9 +60,9 @@ /datum/research_objective_memory_interface/ui_data(mob/user) . = list() - .["research_credits"] = chemical_data.rsc_credits - var/clearance = "[chemical_data.clearance_level]" - if(chemical_data.clearance_x_access) + .["research_credits"] = GLOB.chemical_data.rsc_credits + var/clearance = "[GLOB.chemical_data.clearance_level]" + if(GLOB.chemical_data.clearance_x_access) clearance +="X" .["clearance"] = clearance .["objectives"] = get_objectives(user) diff --git a/code/modules/cm_tech/techs/marine/tier1/points.dm b/code/modules/cm_tech/techs/marine/tier1/points.dm index 739b82fa1504..d6bb5bace6fc 100644 --- a/code/modules/cm_tech/techs/marine/tier1/points.dm +++ b/code/modules/cm_tech/techs/marine/tier1/points.dm @@ -24,7 +24,7 @@ /datum/tech/repeatable/req_points/on_unlock() . = ..() - supply_controller.points += points_to_give * get_tech_scaling_value() + GLOB.supply_controller.points += points_to_give * get_tech_scaling_value() /datum/tech/repeatable/dropship_points name = "Dropship Budget Increase" @@ -44,4 +44,4 @@ /datum/tech/repeatable/dropship_points/on_unlock() . = ..() - supply_controller.dropship_points += points_to_give + GLOB.supply_controller.dropship_points += points_to_give diff --git a/code/modules/cm_tech/techs/marine/tier2/orbital_ammo.dm b/code/modules/cm_tech/techs/marine/tier2/orbital_ammo.dm index 2ab2c2541e68..d4f2ce6fc0ef 100644 --- a/code/modules/cm_tech/techs/marine/tier2/orbital_ammo.dm +++ b/code/modules/cm_tech/techs/marine/tier2/orbital_ammo.dm @@ -17,12 +17,12 @@ return var/datum/supply_order/O = new /datum/supply_order() - O.ordernum = supply_controller.ordernum - supply_controller.ordernum++ - O.object = supply_controller.supply_packs[type_to_give] + O.ordernum = GLOB.supply_controller.ordernum + GLOB.supply_controller.ordernum++ + O.object = GLOB.supply_controller.supply_packs[type_to_give] O.orderedby = MAIN_AI_SYSTEM - supply_controller.shoppinglist += O + GLOB.supply_controller.shoppinglist += O /datum/tech/repeatable/ob/he name = "Additional OB projectiles - HE" diff --git a/code/modules/cm_tech/techs/marine/tier4/nuke.dm b/code/modules/cm_tech/techs/marine/tier4/nuke.dm index f970f37a3fab..46ffb4a94193 100644 --- a/code/modules/cm_tech/techs/marine/tier4/nuke.dm +++ b/code/modules/cm_tech/techs/marine/tier4/nuke.dm @@ -21,13 +21,13 @@ . = ..() var/datum/supply_order/new_order = new() - new_order.ordernum = supply_controller.ordernum - supply_controller.ordernum++ - new_order.object = supply_controller.supply_packs["Encrypted Operational Nuke"] + new_order.ordernum = GLOB.supply_controller.ordernum + GLOB.supply_controller.ordernum++ + new_order.object = GLOB.supply_controller.supply_packs["Encrypted Operational Nuke"] new_order.orderedby = MAIN_AI_SYSTEM new_order.approvedby = MAIN_AI_SYSTEM - supply_controller.shoppinglist += new_order + GLOB.supply_controller.shoppinglist += new_order /datum/tech/nuke/can_unlock(mob/unlocking_mob) . = ..() @@ -36,7 +36,7 @@ return if(ROUND_TIME < NUKE_UNLOCK_TIME) - to_chat(unlocking_mob, SPAN_WARNING("You cannot purchase this node before [NUKE_UNLOCK_TIME / (1 MINUTES)] minutes into the operation.")) + to_chat(unlocking_mob, SPAN_WARNING("You cannot purchase this node before [Ceiling((NUKE_UNLOCK_TIME + SSticker.round_start_time) / (1 MINUTES))] minutes into the operation.")) return FALSE return TRUE diff --git a/code/modules/cm_tech/trees/marine.dm b/code/modules/cm_tech/trees/marine.dm index 8a805647e060..55e82882b848 100644 --- a/code/modules/cm_tech/trees/marine.dm +++ b/code/modules/cm_tech/trees/marine.dm @@ -161,7 +161,7 @@ GLOBAL_LIST_EMPTY(tech_controls_marine) if(!powered()) to_chat(user, SPAN_WARNING("This computer has no power!")) return FALSE - if(!intel_system) + if(!GLOB.intel_system) to_chat(user, SPAN_WARNING("The computer doesn't seem to be connected to anything...")) return FALSE if(user.action_busy) diff --git a/code/modules/defenses/defenses.dm b/code/modules/defenses/defenses.dm index d08e4decefe9..633b51801e27 100644 --- a/code/modules/defenses/defenses.dm +++ b/code/modules/defenses/defenses.dm @@ -431,6 +431,7 @@ turned_on = FALSE /obj/structure/machinery/defenses/emp_act(severity) + . = ..() if(turned_on) if(prob(50)) visible_message("[icon2html(src, viewers(src))] [src] beeps and buzzes wildly, flashing odd symbols on its screen before shutting down!") diff --git a/code/modules/defenses/sentry_computer.dm b/code/modules/defenses/sentry_computer.dm index dd5726d6ccbf..e2cbd5d5858e 100644 --- a/code/modules/defenses/sentry_computer.dm +++ b/code/modules/defenses/sentry_computer.dm @@ -121,6 +121,7 @@ playsound(src, 'sound/machines/terminal_off.ogg', 25, FALSE) /obj/item/device/sentry_computer/emp_act(severity) + . = ..() return TRUE /** diff --git a/code/modules/desert_dam/filtration/consoles.dm b/code/modules/desert_dam/filtration/consoles.dm index 8c2814fafde7..277b2485ed23 100644 --- a/code/modules/desert_dam/filtration/consoles.dm +++ b/code/modules/desert_dam/filtration/consoles.dm @@ -1,4 +1,4 @@ -var/global/river_activated = FALSE +GLOBAL_VAR_INIT(river_activated, FALSE) /obj/structure/machinery/filtration/console name = "console" @@ -62,7 +62,7 @@ var/global/river_activated = FALSE /obj/structure/machinery/filtration/console/ui_data(mob/user) var/list/data = list() - data["filt_on"] = river_activated + data["filt_on"] = GLOB.river_activated return data @@ -73,7 +73,7 @@ var/global/river_activated = FALSE switch(action) if("activate_filt") - river_activated = TRUE + GLOB.river_activated = TRUE /obj/structure/machinery/filtration/console/attack_hand(mob/user) . = ..() diff --git a/code/modules/desert_dam/filtration/filtration.dm b/code/modules/desert_dam/filtration/filtration.dm index a0fd1b2933be..c289ae878bad 100644 --- a/code/modules/desert_dam/filtration/filtration.dm +++ b/code/modules/desert_dam/filtration/filtration.dm @@ -47,18 +47,6 @@ Global river status var, maybe Each var depends on others -var/global/riverend_west = 0 -var/global/riverend_north = 0 -var/global/river_central = 0 -var/global/cannal = 0 -var/global/dam_underpass = 0 -var/global/south_river = 0 -var/global/south_filtration = 0 -var/global/east_river = 0 -var/global/east_filtration = 0 -var/global/south_riverstart = 0 -var/global/east_riverstart = 0 - /proc/filtration_check() if(east_filtration) @@ -219,7 +207,7 @@ var/global/east_riverstart = 0 if(dispersing || !toxic) return - for(var/direction in alldirs) + for(var/direction in GLOB.alldirs) if(direction == from_dir) continue //doesn't check backwards var/effective_spread_delay @@ -303,7 +291,7 @@ var/global/east_riverstart = 0 //var/area/A = get_area(src) //A.ambience_exterior = 'sound/ambience/ambiatm1.ogg' - for(var/obj/structure/machinery/dispersal_initiator/M in machines) + for(var/obj/structure/machinery/dispersal_initiator/M in GLOB.machines) if (M.id == src.id) M.initiate() diff --git a/code/modules/desert_dam/motion_sensor/sensortower.dm b/code/modules/desert_dam/motion_sensor/sensortower.dm index f9554cee2488..50aeede45f66 100644 --- a/code/modules/desert_dam/motion_sensor/sensortower.dm +++ b/code/modules/desert_dam/motion_sensor/sensortower.dm @@ -68,7 +68,7 @@ return SSminimaps.remove_marker(current_xeno) - current_xeno.add_minimap_marker(MINIMAP_FLAG_USCM|MINIMAP_FLAG_XENO) + current_xeno.add_minimap_marker(MINIMAP_FLAG_USCM|get_minimap_flag_for_faction(current_xeno.hivenumber)) minimap_added += WEAKREF(current_xeno) /obj/structure/machinery/sensortower/proc/checkfailure() @@ -233,6 +233,25 @@ ..() update_icon() +/* Decreases the buildstate of the sensor tower and switches it off if affected by any explosion. +Higher severity explosion will damage the sensor tower more +*/ +/obj/structure/machinery/sensortower/ex_act(severity) + if(buildstate == SENSORTOWER_BUILDSTATE_WRENCH) + return + switch(severity) + if(0 to EXPLOSION_THRESHOLD_LOW) + buildstate += 1 + if(EXPLOSION_THRESHOLD_LOW to EXPLOSION_THRESHOLD_MEDIUM) + buildstate = clamp(buildstate + 2, SENSORTOWER_BUILDSTATE_WORKING, SENSORTOWER_BUILDSTATE_WRENCH) + if(EXPLOSION_THRESHOLD_HIGH to INFINITY) + buildstate = 3 + if(is_on) + is_on = FALSE + cur_tick = 0 + stop_processing() + update_icon() + #undef SENSORTOWER_BUILDSTATE_WORKING #undef SENSORTOWER_BUILDSTATE_BLOWTORCH #undef SENSORTOWER_BUILDSTATE_WIRECUTTERS diff --git a/code/modules/droppod/droppod_ui.dm b/code/modules/droppod/droppod_ui.dm index 33202e38a0a7..b0c6683a4f7c 100644 --- a/code/modules/droppod/droppod_ui.dm +++ b/code/modules/droppod/droppod_ui.dm @@ -76,7 +76,8 @@ GLOBAL_LIST_INIT(droppod_target_mode, list( /datum/admin_podlauncher/proc/refresh_bay() bay = locate(/area/admin/droppod/loading) in GLOB.sorted_areas if(!bay) - to_chat(SPAN_WARNING("There's no /area/admin/droppod/loading. You can make one yourself, but yell at the mappers to fix this.")) + if(holder) + to_chat(holder, SPAN_WARNING("There's no /area/admin/droppod/loading. You can make one yourself, but yell at the mappers to fix this.")) CRASH("No /area/admin/droppod/loading has been mapped into the admin z-level!") ordered_area = list() for(var/turf/T in bay) @@ -221,7 +222,8 @@ GLOBAL_LIST_INIT(droppod_target_mode, list( custom_dropoff = TRUE temp_pod.dropoff_point = get_turf(target) - to_chat(SPAN_NOTICE("You have selected [temp_pod.dropoff_point] as your dropoff location.")) + if(holder) + to_chat(holder, SPAN_NOTICE("You have selected [temp_pod.dropoff_point] as your dropoff location.")) SStgui.update_uis(src) return COMPONENT_INTERRUPT_CLICK diff --git a/code/modules/economy/ATM.dm b/code/modules/economy/ATM.dm index b166f9a4961d..1345164fcf34 100644 --- a/code/modules/economy/ATM.dm +++ b/code/modules/economy/ATM.dm @@ -37,7 +37,7 @@ log transactions /obj/structure/machinery/atm/New() ..() - machine_id = "[station_name] RT #[num_financial_terminals++]" + machine_id = "[MAIN_SHIP_NAME] RT #[GLOB.num_financial_terminals++]" spark_system = new /datum/effect_system/spark_spread spark_system.set_up(5, 0, src) spark_system.attach(src) @@ -79,7 +79,7 @@ log transactions T.purpose = "Credit deposit" T.amount = I:worth T.source_terminal = machine_id - T.date = current_date_string + T.date = GLOB.current_date_string T.time = worldtime2text() authenticated_account.transaction_log.Add(T) @@ -212,7 +212,7 @@ log transactions T.target_name = "Account #[target_account_number]" T.purpose = transfer_purpose T.source_terminal = machine_id - T.date = current_date_string + T.date = GLOB.current_date_string T.time = worldtime2text() T.amount = "([transfer_amount])" authenticated_account.transaction_log.Add(T) @@ -254,7 +254,7 @@ log transactions T.target_name = failed_account.owner_name T.purpose = "Unauthorised login attempt" T.source_terminal = machine_id - T.date = current_date_string + T.date = GLOB.current_date_string T.time = worldtime2text() failed_account.transaction_log.Add(T) else @@ -275,7 +275,7 @@ log transactions T.target_name = authenticated_account.owner_name T.purpose = "Remote terminal access" T.source_terminal = machine_id - T.date = current_date_string + T.date = GLOB.current_date_string T.time = worldtime2text() authenticated_account.transaction_log.Add(T) @@ -307,7 +307,7 @@ log transactions T.purpose = "Credit withdrawal" T.amount = "([amount])" T.source_terminal = machine_id - T.date = current_date_string + T.date = GLOB.current_date_string T.time = worldtime2text() authenticated_account.transaction_log.Add(T) withdrawal_timer = world.time + 20 @@ -338,7 +338,7 @@ log transactions T.purpose = "Credit withdrawal" T.amount = "([amount])" T.source_terminal = machine_id - T.date = current_date_string + T.date = GLOB.current_date_string T.time = worldtime2text() authenticated_account.transaction_log.Add(T) withdrawal_timer = world.time + 20 @@ -353,7 +353,7 @@ log transactions R.info += "Account holder: [authenticated_account.owner_name]
    " R.info += "Account number: [authenticated_account.account_number]
    " R.info += "Balance: $[authenticated_account.money]
    " - R.info += "Date and time: [worldtime2text()], [current_date_string]

    " + R.info += "Date and time: [worldtime2text()], [GLOB.current_date_string]

    " R.info += "Service terminal ID: [machine_id]
    " //stamp the paper @@ -376,7 +376,7 @@ log transactions R.info = "Transaction logs
    " R.info += "Account holder: [authenticated_account.owner_name]
    " R.info += "Account number: [authenticated_account.account_number]
    " - R.info += "Date and time: [worldtime2text()], [current_date_string]

    " + R.info += "Date and time: [worldtime2text()], [GLOB.current_date_string]

    " R.info += "Service terminal ID: [machine_id]
    " R.info += "" R.info += "" @@ -443,7 +443,7 @@ log transactions T.target_name = authenticated_account.owner_name T.purpose = "Remote terminal access" T.source_terminal = machine_id - T.date = current_date_string + T.date = GLOB.current_date_string T.time = worldtime2text() authenticated_account.transaction_log.Add(T) diff --git a/code/modules/economy/Accounts.dm b/code/modules/economy/Accounts.dm index 7e5bf22041a0..0a5a0b8f3cc8 100644 --- a/code/modules/economy/Accounts.dm +++ b/code/modules/economy/Accounts.dm @@ -32,7 +32,7 @@ T.purpose = "Account creation" T.amount = starting_funds * id_paygrade.pay_multiplier //set a random date, time and location some time over the past few decades - T.date = "[num2text(rand(1,31))] [pick("January","February","March","April","May","June","July","August","September","October","November","December")], [game_year - rand(0, 10)]" + T.date = "[num2text(rand(1,31))] [pick("January","February","March","April","May","June","July","August","September","October","November","December")], [GLOB.game_year - rand(0, 10)]" T.time = "[rand(0,24)]:[rand(11,59)]" T.source_terminal = "Weyland-Yutani Terminal #[rand(111,1111)]" for(var/attempt in 1 to 100) // Make up to 100 attempts to get a unique account number @@ -41,12 +41,12 @@ break // Account number is unique! //add the account M.transaction_log.Add(T) - all_money_accounts.Add(M) + GLOB.all_money_accounts.Add(M) return M /proc/charge_to_account(attempt_account_number, source_name, purpose, terminal_id, amount) - for(var/datum/money_account/D in all_money_accounts) + for(var/datum/money_account/D in GLOB.all_money_accounts) if(D.account_number == attempt_account_number && !D.suspended) D.money += amount @@ -58,7 +58,7 @@ T.amount = "([amount])" else T.amount = "[amount]" - T.date = current_date_string + T.date = GLOB.current_date_string T.time = worldtime2text() T.source_terminal = terminal_id D.transaction_log.Add(T) @@ -70,13 +70,13 @@ //this returns the first account datum that matches the supplied accnum/pin combination, it returns null if the combination did not match any account /proc/attempt_account_access(attempt_account_number, attempt_pin_number, security_level_passed = 0) - for(var/datum/money_account/D in all_money_accounts) + for(var/datum/money_account/D in GLOB.all_money_accounts) if(D.account_number == attempt_account_number) if( D.security_level <= security_level_passed && (!D.security_level || D.remote_access_pin == attempt_pin_number) ) return D break /proc/get_account(account_number) - for(var/datum/money_account/D in all_money_accounts) + for(var/datum/money_account/D in GLOB.all_money_accounts) if(D.account_number == account_number) return D diff --git a/code/modules/economy/EFTPOS.dm b/code/modules/economy/EFTPOS.dm index a5b36fd0bf3e..ca73c2efb84f 100644 --- a/code/modules/economy/EFTPOS.dm +++ b/code/modules/economy/EFTPOS.dm @@ -13,7 +13,7 @@ /obj/item/device/eftpos/Initialize() . = ..() - machine_id = "[station_name] EFTPOS #[num_financial_terminals++]" + machine_id = "[MAIN_SHIP_NAME] EFTPOS #[GLOB.num_financial_terminals++]" access_code = rand(1111,111111) spawn(0) print_reference() @@ -59,7 +59,7 @@ //by default, connect to the station account //the user of the EFTPOS device can change the target account though, and no-one will be the wiser (except whoever's being charged) - linked_account = station_account + linked_account = GLOB.station_account /obj/item/device/eftpos/proc/print_reference() var/obj/item/paper/R = new(src.loc) @@ -136,7 +136,7 @@ T.purpose = (transaction_purpose ? transaction_purpose : "None supplied.") T.amount = transaction_amount T.source_terminal = machine_id - T.date = current_date_string + T.date = GLOB.current_date_string T.time = worldtime2text() linked_account.transaction_log.Add(T) else @@ -257,7 +257,7 @@ else T.amount = "[transaction_amount]" T.source_terminal = machine_id - T.date = current_date_string + T.date = GLOB.current_date_string T.time = worldtime2text() D.transaction_log.Add(T) // @@ -266,7 +266,7 @@ T.purpose = transaction_purpose T.amount = "[transaction_amount]" T.source_terminal = machine_id - T.date = current_date_string + T.date = GLOB.current_date_string T.time = worldtime2text() linked_account.transaction_log.Add(T) else diff --git a/code/modules/economy/TradeDestinations.dm b/code/modules/economy/TradeDestinations.dm index ff01dc89d242..94ead45bf13e 100644 --- a/code/modules/economy/TradeDestinations.dm +++ b/code/modules/economy/TradeDestinations.dm @@ -1,6 +1,6 @@ -var/list/weighted_randomevent_locations = list() -var/list/weighted_mundaneevent_locations = list() +GLOBAL_LIST_EMPTY(weighted_randomevent_locations) +GLOBAL_LIST_EMPTY(weighted_mundaneevent_locations) /datum/trade_destination var/name = "" diff --git a/code/modules/economy/economy_misc.dm b/code/modules/economy/economy_misc.dm index 75a10a8ee199..a5f061e1a727 100644 --- a/code/modules/economy/economy_misc.dm +++ b/code/modules/economy/economy_misc.dm @@ -62,17 +62,17 @@ //Destroyers are medium sized vessels, often used for escorting larger ships but able to go toe-to-toe with them if need be. //Frigates are medium sized vessels, often used for escorting larger ships. They will rapidly find themselves outclassed if forced to face heavy warships head on. -var/global/current_date_string +GLOBAL_VAR(current_date_string) -var/global/datum/money_account/vendor_account -var/global/datum/money_account/station_account -var/global/list/datum/money_account/department_accounts = list() -var/global/num_financial_terminals = 1 -var/global/list/all_money_accounts = list() -var/global/economy_init = 0 +GLOBAL_DATUM(vendor_account, /datum/money_account) +GLOBAL_DATUM(station_account, /datum/money_account) +GLOBAL_LIST_INIT_TYPED(department_accounts, /datum/money_account, list()) +GLOBAL_VAR_INIT(num_financial_terminals, 1) +GLOBAL_LIST_EMPTY(all_money_accounts) +GLOBAL_VAR_INIT(economy_init, FALSE) /proc/setup_economy() - if(economy_init) + if(GLOB.economy_init) return 2 var/datum/feed_channel/newChannel = new /datum/feed_channel @@ -80,48 +80,48 @@ var/global/economy_init = 0 newChannel.author = "Automated Announcement Listing" newChannel.locked = 1 newChannel.is_admin_channel = 1 - news_network.network_channels += newChannel + GLOB.news_network.network_channels += newChannel newChannel = new /datum/feed_channel newChannel.channel_name = "Nyx Daily" newChannel.author = "CentComm Minister of Information" newChannel.locked = 1 newChannel.is_admin_channel = 1 - news_network.network_channels += newChannel + GLOB.news_network.network_channels += newChannel newChannel = new /datum/feed_channel newChannel.channel_name = "The Gibson Gazette" newChannel.author = "Editor Mike Hammers" newChannel.locked = 1 newChannel.is_admin_channel = 1 - news_network.network_channels += newChannel + GLOB.news_network.network_channels += newChannel for(var/loc_type in typesof(/datum/trade_destination) - /datum/trade_destination) var/datum/trade_destination/D = new loc_type - weighted_randomevent_locations[D] = D.viable_random_events.len - weighted_mundaneevent_locations[D] = D.viable_mundane_events.len + GLOB.weighted_randomevent_locations[D] = D.viable_random_events.len + GLOB.weighted_mundaneevent_locations[D] = D.viable_mundane_events.len create_station_account() create_department_account("Vendor") - vendor_account = department_accounts["Vendor"] + GLOB.vendor_account = GLOB.department_accounts["Vendor"] - current_date_string = "[num2text(rand(1,31))] [pick("January","February","March","April","May","June","July","August","September","October","November","December")], [game_year]" + GLOB.current_date_string = "[num2text(rand(1,31))] [pick("January","February","March","April","May","June","July","August","September","October","November","December")], [GLOB.game_year]" - economy_init = 1 + GLOB.economy_init = TRUE return 1 /proc/create_station_account() - if(!station_account) - station_account = new() - station_account.owner_name = "[station_name] Station Account" - station_account.account_number = rand(111111, 999999) - station_account.remote_access_pin = rand(1111, 111111) - station_account.money = 75000 + if(!GLOB.station_account) + GLOB.station_account = new() + GLOB.station_account.owner_name = "[MAIN_SHIP_NAME] Station Account" + GLOB.station_account.account_number = rand(111111, 999999) + GLOB.station_account.remote_access_pin = rand(1111, 111111) + GLOB.station_account.money = 75000 //create an entry in the account transaction log for when it was created var/datum/transaction/T = new() - T.target_name = station_account.owner_name + T.target_name = GLOB.station_account.owner_name T.purpose = "Account creation" T.amount = 75000 T.date = "2nd April, 2555" @@ -129,8 +129,8 @@ var/global/economy_init = 0 T.source_terminal = "Biesel GalaxyNet Terminal #277" //add the account - station_account.transaction_log.Add(T) - all_money_accounts.Add(station_account) + GLOB.station_account.transaction_log.Add(T) + GLOB.all_money_accounts.Add(GLOB.station_account) /proc/create_department_account(department) var/datum/money_account/department_account = new() @@ -150,6 +150,6 @@ var/global/economy_init = 0 //add the account department_account.transaction_log.Add(T) - all_money_accounts.Add(department_account) + GLOB.all_money_accounts.Add(department_account) - department_accounts[department] = department_account + GLOB.department_accounts[department] = department_account diff --git a/code/modules/escape_menu/admin_buttons.dm b/code/modules/escape_menu/admin_buttons.dm index e6771d05bf68..661901c1b77a 100644 --- a/code/modules/escape_menu/admin_buttons.dm +++ b/code/modules/escape_menu/admin_buttons.dm @@ -46,7 +46,7 @@ new /atom/movable/screen/escape_menu/home_button( null, src, - "Medal Panel", + "Medals Panel", /* offset = */ 5, CALLBACK(src, PROC_REF(home_medal)), ) @@ -56,8 +56,18 @@ new /atom/movable/screen/escape_menu/home_button( null, src, - "Teleport Panel", + "Tacmaps Panel", /* offset = */ 6, + CALLBACK(src, PROC_REF(home_tacmaps)), + ) + ) + + page_holder.give_screen_object( + new /atom/movable/screen/escape_menu/home_button( + null, + src, + "Teleport Panel", + /* offset = */ 7, CALLBACK(src, PROC_REF(home_teleport)), ) ) @@ -67,7 +77,7 @@ null, src, "Inview Panel", - /* offset = */ 7, + /* offset = */ 8, CALLBACK(src, PROC_REF(home_inview)), ) ) @@ -77,7 +87,7 @@ null, src, "Unban Panel", - /* offset = */ 8, + /* offset = */ 9, CALLBACK(src, PROC_REF(home_unban)), ) ) @@ -87,7 +97,7 @@ null, src, "Shuttle Manipulator", - /* offset = */ 9, + /* offset = */ 10, CALLBACK(src, PROC_REF(home_shuttle)), ) ) @@ -117,6 +127,12 @@ GLOB.medals_panel.tgui_interact(client?.mob) +/datum/escape_menu/proc/home_tacmaps() + if(!client?.admin_holder.check_for_rights(R_ADMIN|R_MOD)) + return + + GLOB.tacmap_admin_panel.tgui_interact(client?.mob) + /datum/escape_menu/proc/home_teleport() if(!client?.admin_holder.check_for_rights(R_MOD)) return diff --git a/code/modules/events/comms_blackout.dm b/code/modules/events/comms_blackout.dm index 76a871205067..ea7ad9c84b78 100644 --- a/code/modules/events/comms_blackout.dm +++ b/code/modules/events/comms_blackout.dm @@ -2,7 +2,7 @@ if(!silent) marine_announcement("Ionic radiation flare detected from nearby star. Imminent telecommunication failu*3mga;b4;'1v�-BZZZT", "Problem Detected", 'sound/misc/interference.ogg') else // AIs will always know if there's a comm blackout, rogue AIs could then lie about comm blackouts in the future while they shutdown comms - for(var/mob/living/silicon/ai/A in ai_mob_list) + for(var/mob/living/silicon/ai/A in GLOB.ai_mob_list) to_chat(A, "
    ") to_chat(A, SPAN_WARNING("Ionic radiation flare detected from nearby star. Imminent telecommunication failu*3mga;b4;'1v�-BZZZT")) to_chat(A, "
    ") diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 1f8dcb2f81c7..ceff47b5b63c 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -95,7 +95,7 @@ Gunshots/explosions/opening doors/less rare audio (done) //to_chat(src, "Danger Flash") if(!halimage) var/list/possible_points = list() - for(var/turf/open/floor/F in view(src,world_view_size)) + for(var/turf/open/floor/F in view(src,GLOB.world_view_size)) possible_points += F if(possible_points.len) var/turf/open/floor/target = pick(possible_points) @@ -159,7 +159,7 @@ Gunshots/explosions/opening doors/less rare audio (done) //to_chat(src, "Danger Flash") if(!halbody) var/list/possible_points = list() - for(var/turf/open/floor/F in view(src,world_view_size)) + for(var/turf/open/floor/F in view(src,GLOB.world_view_size)) possible_points += F if(possible_points.len) var/turf/open/floor/target = pick(possible_points) @@ -249,7 +249,7 @@ Gunshots/explosions/opening doors/less rare audio (done) /obj/effect/fake_attacker/attackby(obj/item/P as obj, mob/user as mob) step_away(src,my_target,2) - for(var/mob/M in oviewers(world_view_size,my_target)) + for(var/mob/M in oviewers(GLOB.world_view_size,my_target)) to_chat(M, SPAN_WARNING("[my_target] flails around wildly.")) my_target.show_message(SPAN_DANGER("[src] has been attacked by [my_target] "), SHOW_MESSAGE_VISIBLE) //Lazy. @@ -262,7 +262,7 @@ Gunshots/explosions/opening doors/less rare audio (done) if(M == my_target) step_away(src,my_target,2) if(prob(30)) - for(var/mob/O in oviewers(world_view_size , my_target)) + for(var/mob/O in oviewers(GLOB.world_view_size , my_target)) to_chat(O, SPAN_DANGER("[my_target] stumbles around.")) /obj/effect/fake_attacker/New() @@ -341,9 +341,9 @@ Gunshots/explosions/opening doors/less rare audio (done) QDEL_IN(O, 30 SECONDS) return -var/list/non_fakeattack_weapons = list(/obj/item/device/aicard,\ +GLOBAL_LIST_INIT(non_fakeattack_weapons, list(/obj/item/device/aicard,\ /obj/item/clothing/shoes/magboots, /obj/item/disk/nuclear,\ - /obj/item/clothing/suit/space/uscm, /obj/item/tank) + /obj/item/clothing/suit/space/uscm, /obj/item/tank)) /proc/fake_attack(mob/living/target) // var/list/possible_clones = new/list() @@ -363,11 +363,11 @@ var/list/non_fakeattack_weapons = list(/obj/item/device/aicard,\ //var/obj/effect/fake_attacker/F = new/obj/effect/fake_attacker(outside_range(target)) var/obj/effect/fake_attacker/F = new/obj/effect/fake_attacker(target.loc) if(clone.l_hand) - if(!(locate(clone.l_hand) in non_fakeattack_weapons)) + if(!(locate(clone.l_hand) in GLOB.non_fakeattack_weapons)) clone_weapon = clone.l_hand.name F.weap = clone.l_hand else if (clone.r_hand) - if(!(locate(clone.r_hand) in non_fakeattack_weapons)) + if(!(locate(clone.r_hand) in GLOB.non_fakeattack_weapons)) clone_weapon = clone.r_hand.name F.weap = clone.r_hand diff --git a/code/modules/gear_presets/_select_equipment.dm b/code/modules/gear_presets/_select_equipment.dm index 39f832ea8ca8..5a5ecea2d03d 100644 --- a/code/modules/gear_presets/_select_equipment.dm +++ b/code/modules/gear_presets/_select_equipment.dm @@ -87,7 +87,7 @@ new_human.gender = pick(60;MALE,40;FEMALE) var/datum/preferences/A = new() A.randomize_appearance(new_human) - var/random_name = capitalize(pick(new_human.gender == MALE ? first_names_male : first_names_female)) + " " + capitalize(pick(last_names)) + var/random_name = capitalize(pick(new_human.gender == MALE ? GLOB.first_names_male : GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) new_human.change_real_name(new_human, random_name) new_human.age = rand(21,45) @@ -155,8 +155,8 @@ load_status(new_human, mob_client) load_vanity(new_human, mob_client) load_traits(new_human, mob_client) - if(round_statistics && count_participant) - round_statistics.track_new_participant(faction) + if(GLOB.round_statistics && count_participant) + GLOB.round_statistics.track_new_participant(faction) new_human.assigned_equipment_preset = src @@ -172,7 +172,7 @@ if(!new_human.client || !new_human.client.prefs || !new_human.client.prefs.gear) return//We want to equip them with custom stuff second, after they are equipped with everything else. for(var/gear_name in new_human.client.prefs.gear) - var/datum/gear/current_gear = gear_datums_by_name[gear_name] + var/datum/gear/current_gear = GLOB.gear_datums_by_name[gear_name] if(current_gear) if(current_gear.allowed_roles && !(assignment in current_gear.allowed_roles)) to_chat(new_human, SPAN_WARNING("Custom gear [current_gear.display_name] cannot be equipped: Invalid Role")) @@ -461,16 +461,16 @@ return 1 -var/list/rebel_shotguns = list( +GLOBAL_LIST_INIT(rebel_shotguns, list( /obj/item/weapon/gun/shotgun/double = /obj/item/ammo_magazine/handful/shotgun/buckshot, /obj/item/weapon/gun/shotgun/double/with_stock = /obj/item/ammo_magazine/handful/shotgun/flechette, /obj/item/weapon/gun/shotgun/pump/dual_tube/cmb = /obj/item/ammo_magazine/handful/shotgun/incendiary, /obj/item/weapon/gun/shotgun/pump/dual_tube/cmb = /obj/item/ammo_magazine/handful/shotgun/incendiary, /obj/item/weapon/gun/shotgun/double/sawn = /obj/item/ammo_magazine/handful/shotgun/incendiary, /obj/item/weapon/gun/shotgun/double/sawn = /obj/item/ammo_magazine/handful/shotgun/buckshot - ) + )) -var/list/rebel_smgs = list( +GLOBAL_LIST_INIT(rebel_smgs, list( /obj/item/weapon/gun/smg/pps43 = /obj/item/ammo_magazine/smg/pps43, /obj/item/weapon/gun/smg/mp27 = /obj/item/ammo_magazine/smg/mp27, /obj/item/weapon/gun/smg/mp5 = /obj/item/ammo_magazine/smg/mp5, @@ -478,9 +478,9 @@ var/list/rebel_smgs = list( /obj/item/weapon/gun/smg/mac15 = /obj/item/ammo_magazine/smg/mac15, /obj/item/weapon/gun/smg/uzi = /obj/item/ammo_magazine/smg/uzi, /obj/item/weapon/gun/smg/fp9000 = /obj/item/ammo_magazine/smg/fp9000 - ) + )) -var/list/rebel_rifles = list( +GLOBAL_LIST_INIT(rebel_rifles, list( /obj/item/weapon/gun/rifle/mar40 = /obj/item/ammo_magazine/rifle/mar40, /obj/item/weapon/gun/rifle/mar40 = /obj/item/ammo_magazine/rifle/mar40, /obj/item/weapon/gun/rifle/mar40/carbine = /obj/item/ammo_magazine/rifle/mar40, @@ -490,13 +490,13 @@ var/list/rebel_rifles = list( /obj/item/weapon/gun/rifle/ar10 = /obj/item/ammo_magazine/rifle/ar10, /obj/item/weapon/gun/rifle/l42a/abr40 = /obj/item/ammo_magazine/rifle/l42a/abr40, /obj/item/weapon/gun/rifle/l42a/abr40 = /obj/item/ammo_magazine/rifle/l42a/abr40, - ) + )) /datum/equipment_preset/proc/spawn_rebel_smg(atom/M, ammo_amount = 12) if(!M) return - var/gunpath = pick(rebel_smgs) - var/ammopath = rebel_smgs[gunpath] + var/gunpath = pick(GLOB.rebel_smgs) + var/ammopath = GLOB.rebel_smgs[gunpath] spawn_weapon(gunpath, ammopath, M, ammo_amount) @@ -505,8 +505,8 @@ var/list/rebel_rifles = list( /datum/equipment_preset/proc/spawn_rebel_shotgun(atom/M, ammo_amount = 12) if(!M) return - var/gunpath = pick(rebel_shotguns) - var/ammopath = rebel_shotguns[gunpath] + var/gunpath = pick(GLOB.rebel_shotguns) + var/ammopath = GLOB.rebel_shotguns[gunpath] spawn_weapon(gunpath, ammopath, M, ammo_amount) @@ -515,8 +515,8 @@ var/list/rebel_rifles = list( /datum/equipment_preset/proc/spawn_rebel_rifle(atom/M, ammo_amount = 12) if(!M) return - var/gunpath = pick(rebel_rifles) - var/ammopath = rebel_rifles[gunpath] + var/gunpath = pick(GLOB.rebel_rifles) + var/ammopath = GLOB.rebel_rifles[gunpath] spawn_weapon(gunpath, ammopath, M, ammo_amount) @@ -575,10 +575,10 @@ var/list/rebel_rifles = list( if(!M) return var/list/merc_shotguns = list( - /obj/item/weapon/gun/shotgun/merc = pick(shotgun_handfuls_12g), - /obj/item/weapon/gun/shotgun/combat = pick(shotgun_handfuls_12g), - /obj/item/weapon/gun/shotgun/double/with_stock = pick(shotgun_handfuls_12g), - /obj/item/weapon/gun/shotgun/pump/dual_tube/cmb = pick(shotgun_handfuls_12g)) + /obj/item/weapon/gun/shotgun/merc = pick(GLOB.shotgun_handfuls_12g), + /obj/item/weapon/gun/shotgun/combat = pick(GLOB.shotgun_handfuls_12g), + /obj/item/weapon/gun/shotgun/double/with_stock = pick(GLOB.shotgun_handfuls_12g), + /obj/item/weapon/gun/shotgun/pump/dual_tube/cmb = pick(GLOB.shotgun_handfuls_12g)) var/gunpath = pick(merc_shotguns) var/ammopath = merc_shotguns[gunpath] @@ -610,9 +610,9 @@ var/list/rebel_rifles = list( /obj/item/weapon/gun/rifle/m41a/elite = /obj/item/ammo_magazine/rifle/ap) var/list/elite_merc_shotguns = list( - /obj/item/weapon/gun/shotgun/merc = pick(shotgun_handfuls_12g), - /obj/item/weapon/gun/shotgun/combat = pick(shotgun_handfuls_12g), - /obj/item/weapon/gun/shotgun/type23 = pick(shotgun_handfuls_8g)) + /obj/item/weapon/gun/shotgun/merc = pick(GLOB.shotgun_handfuls_12g), + /obj/item/weapon/gun/shotgun/combat = pick(GLOB.shotgun_handfuls_12g), + /obj/item/weapon/gun/shotgun/type23 = pick(GLOB.shotgun_handfuls_8g)) if(prob(shotgun_chance)) var/gunpath = pick(elite_merc_shotguns) diff --git a/code/modules/gear_presets/agents.dm b/code/modules/gear_presets/agents.dm index dcf2a367b677..c7449883b87f 100644 --- a/code/modules/gear_presets/agents.dm +++ b/code/modules/gear_presets/agents.dm @@ -69,7 +69,7 @@ ) assignment = JOB_UPP_REPRESENTATIVE rank = JOB_UPP_REPRESENTATIVE - paygrade = "CR" + paygrade = PAY_SHORT_CREP role_comm_title = "UPP Rep." skills = /datum/skills/civilian/survivor @@ -105,7 +105,7 @@ ) assignment = JOB_TWE_REPRESENTATIVE rank = JOB_TWE_REPRESENTATIVE - paygrade = "CR" + paygrade = PAY_SHORT_CREP role_comm_title = "TWE Rep." skills = /datum/skills/civilian/survivor @@ -115,7 +115,7 @@ A.randomize_appearance(new_human) var/random_name if(new_human.gender == MALE) - random_name = "[pick(first_names_male_dutch)] [pick(last_names_clf)]" + random_name = "[pick(GLOB.first_names_male_dutch)] [pick(GLOB.last_names_clf)]" new_human.f_style = "Shaved" new_human.change_real_name(new_human, random_name) diff --git a/code/modules/gear_presets/cbrn.dm b/code/modules/gear_presets/cbrn.dm index 00934bc94fc7..e59f276fe486 100644 --- a/code/modules/gear_presets/cbrn.dm +++ b/code/modules/gear_presets/cbrn.dm @@ -2,7 +2,7 @@ name = "Generic CBRN" //Parent type for easier gear assignment = JOB_SQUAD_MARINE rank = JOB_SQUAD_MARINE - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "CBRN" flags = EQUIPMENT_PRESET_EXTRA auto_squad_name = SQUAD_CBRN @@ -67,7 +67,7 @@ /datum/equipment_preset/uscm/cbrn/engineer name = "CBRN Combat Technician" - paygrade = "ME4" + paygrade = PAY_SHORT_ME4 assignment = JOB_SQUAD_ENGI rank = JOB_SQUAD_ENGI role_comm_title = "ComTech" @@ -111,7 +111,7 @@ /datum/equipment_preset/uscm/cbrn/medic name = "CBRN Hospital Corpsman" - paygrade = "ME4" + paygrade = PAY_SHORT_ME4 assignment = JOB_SQUAD_MEDIC rank = JOB_SQUAD_MEDIC role_comm_title = "HM" @@ -154,7 +154,7 @@ /datum/equipment_preset/uscm/cbrn/leader name = "CBRN Fireteam Leader" - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 assignment = JOB_SQUAD_TEAM_LEADER rank = JOB_SQUAD_TEAM_LEADER role_comm_title = "TL" @@ -189,7 +189,7 @@ /datum/equipment_preset/uscm/cbrn/specialist name = "CBRN Specialist" - paygrade = "O" + paygrade = PAY_SHORT_OPR assignment = JOB_SQUAD_SPECIALIST rank = JOB_SQUAD_SPECIALIST role_comm_title = "Spc" diff --git a/code/modules/gear_presets/clf.dm b/code/modules/gear_presets/clf.dm index 9afc89ab65c6..d89e349a62c1 100644 --- a/code/modules/gear_presets/clf.dm +++ b/code/modules/gear_presets/clf.dm @@ -3,6 +3,7 @@ languages = list(LANGUAGE_JAPANESE, LANGUAGE_ENGLISH) assignment = JOB_CLF rank = FACTION_CLF + paygrade = PAY_SHORT_REB faction = FACTION_CLF origin_override = ORIGIN_CIVILIAN idtype = /obj/item/card/id/data @@ -21,18 +22,18 @@ if(prob(40)) first_name = "[capitalize(randomly_generate_japanese_word(rand(1, 3)))]" else - first_name = "[pick(first_names_male_clf)]" + first_name = "[pick(GLOB.first_names_male_clf)]" new_human.f_style = pick("3 O'clock Shadow", "3 O'clock Moustache", "5 O'clock Shadow", "5 O'clock Moustache") else if(prob(40)) first_name = "[capitalize(randomly_generate_japanese_word(rand(1, 3)))]" else - first_name = "[pick(first_names_female_clf)]" + first_name = "[pick(GLOB.first_names_female_clf)]" //surname if(prob(35)) last_name = "[capitalize(randomly_generate_japanese_word(rand(1, 4)))]" else - last_name = "[pick(last_names_clf)]" + last_name = "[pick(GLOB.last_names_clf)]" //put them together random_name = "[first_name] [last_name]" new_human.change_real_name(new_human, random_name) @@ -281,6 +282,7 @@ assignment = JOB_CLF_MEDIC rank = JOB_CLF_MEDIC role_comm_title = "MED" + paygrade = PAY_SHORT_CDOC skills = /datum/skills/clf/combat_medic /datum/equipment_preset/clf/medic/load_gear(mob/living/carbon/human/new_human) @@ -709,6 +711,7 @@ skills = /datum/skills/colonial_synthetic assignment = JOB_CLF_SYNTH rank = JOB_CLF_SYNTH + paygrade = PAY_SHORT_SYN role_comm_title = "Syn" /datum/equipment_preset/clf/synth/New() @@ -723,9 +726,9 @@ if(prob(10)) random_name = "[capitalize(randomly_generate_japanese_word(rand(2, 3)))]" else if(new_human.gender == MALE) - random_name = "[pick(first_names_male_clf)]" + random_name = "[pick(GLOB.first_names_male_clf)]" else - random_name = "[pick(first_names_female_clf)]" + random_name = "[pick(GLOB.first_names_female_clf)]" if(new_human.gender == MALE) new_human.f_style = "5 O'clock Shadow" @@ -897,6 +900,7 @@ flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_CLF_COMMANDER rank = JOB_CLF_COMMANDER + paygrade = PAY_SHORT_REBC role_comm_title = "CMDR" skills = /datum/skills/clf/commander diff --git a/code/modules/gear_presets/cmb.dm b/code/modules/gear_presets/cmb.dm index 578681979115..aa2c7438ba75 100644 --- a/code/modules/gear_presets/cmb.dm +++ b/code/modules/gear_presets/cmb.dm @@ -17,7 +17,7 @@ var/datum/preferences/A = new() A.randomize_appearance(new_human) var/random_name - random_name = capitalize(pick(new_human.gender == MALE ? first_names_male : first_names_female)) + " " + capitalize(pick(last_names)) + random_name = capitalize(pick(new_human.gender == MALE ? GLOB.first_names_male : GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) new_human.change_real_name(new_human, random_name) new_human.name = new_human.real_name new_human.age = rand(22,45) @@ -58,7 +58,7 @@ /datum/equipment_preset/cmb/standard name = "CMB - Colonial Marshal Deputy" - paygrade = "GS-9" + paygrade = PAY_SHORT_CMBD role_comm_title = "CMB DEP" flags = EQUIPMENT_PRESET_EXTRA assignment = "CMB Deputy" @@ -141,7 +141,7 @@ /datum/equipment_preset/cmb/leader name = "CMB - The Colonial Marshal" - paygrade = "GS-13" + paygrade = PAY_SHORT_CMBM idtype = /obj/item/card/id/marshal role_comm_title = "CMB MAR" flags = EQUIPMENT_PRESET_EXTRA @@ -195,7 +195,7 @@ //*****************************************************************************************************/ /datum/equipment_preset/cmb/synth name = "CMB - Colonial Marshal Investigative Synthetic" - paygrade = "GS-C.9" + paygrade = PAY_SHORT_CMBS idtype = /obj/item/card/id/deputy role_comm_title = "CMB Syn" flags = EQUIPMENT_PRESET_EXTRA @@ -214,9 +214,9 @@ A.randomize_appearance(new_human) var/random_name if(new_human.gender == MALE) - random_name = "[pick(first_names_male)]" + random_name = "[pick(GLOB.first_names_male)]" else - random_name = "[pick(first_names_female)]" + random_name = "[pick(GLOB.first_names_female)]" if(new_human.gender == MALE) new_human.f_style = pick("3 O'clock Shadow", "3 O'clock Moustache", "5 O'clock Shadow", "5 O'clock Moustache") @@ -298,7 +298,7 @@ /datum/equipment_preset/cmb/liaison name = "CMB - ICC Liaison" - paygrade = "GS-6" + paygrade = PAY_SHORT_ICCL idtype = /obj/item/card/id/silver/cl role_comm_title = "ICC Rep." flags = EQUIPMENT_PRESET_EXTRA @@ -357,7 +357,7 @@ /datum/equipment_preset/cmb/observer name = "CMB - Interstellar Human Rights Observer" - paygrade = "GS-3" + paygrade = PAY_SHORT_IHRO idtype = /obj/item/card/id/lanyard role_comm_title = "OBS" flags = EQUIPMENT_PRESET_EXTRA @@ -416,7 +416,7 @@ assignment = "Anchorpoint Station Marine Rifleman" rank = JOB_SQUAD_MARINE - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 role_comm_title = "A-RFN" skills = /datum/skills/pfc/crafty faction = FACTION_MARSHAL @@ -466,7 +466,7 @@ assignment = "Anchorpoint Station Marine Team Leader" rank = JOB_SQUAD_LEADER - paygrade = "ME6" + paygrade = PAY_SHORT_ME6 role_comm_title = "A-TL" minimum_age = 25 skills = /datum/skills/SL @@ -511,7 +511,7 @@ assignment = "Anchorpoint Station Marine Technical Specialist" rank = JOB_SQUAD_TEAM_LEADER - paygrade = "ME4" + paygrade = PAY_SHORT_ME4 role_comm_title = "A-TS" skills = /datum/skills/tl @@ -556,7 +556,7 @@ assignment = "Anchorpoint Station Hospital Corpsman" rank = JOB_SQUAD_MEDIC - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "A-HM" skills = /datum/skills/combat_medic @@ -617,7 +617,7 @@ assignment = "Anchorpoint Station Marine Smartgunner" rank = JOB_SQUAD_SMARTGUN - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "A-SG" skills = /datum/skills/smartgunner diff --git a/code/modules/gear_presets/contractor.dm b/code/modules/gear_presets/contractor.dm index c849092570cc..ea77fe4a4d0f 100644 --- a/code/modules/gear_presets/contractor.dm +++ b/code/modules/gear_presets/contractor.dm @@ -19,7 +19,7 @@ var/datum/preferences/A = new() A.randomize_appearance(new_human) var/random_name - random_name = capitalize(pick(new_human.gender == MALE ? first_names_male : first_names_female)) + " " + capitalize(pick(last_names)) + random_name = capitalize(pick(new_human.gender == MALE ? GLOB.first_names_male : GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) new_human.change_real_name(new_human, random_name) new_human.name = new_human.real_name new_human.age = rand(22,45) @@ -367,9 +367,9 @@ A.randomize_appearance(new_human) var/random_name if(new_human.gender == MALE) - random_name = "[pick(first_names_male)]" + random_name = "[pick(GLOB.first_names_male)]" else - random_name = "[pick(first_names_female)]" + random_name = "[pick(GLOB.first_names_female)]" if(new_human.gender == MALE) new_human.f_style = pick("3 O'clock Shadow", "3 O'clock Moustache", "5 O'clock Shadow", "5 O'clock Moustache") @@ -753,9 +753,9 @@ A.randomize_appearance(new_human) var/random_name if(new_human.gender == MALE) - random_name = "[pick(first_names_male)]" + random_name = "[pick(GLOB.first_names_male)]" else - random_name = "[pick(first_names_female)]" + random_name = "[pick(GLOB.first_names_female)]" if(new_human.gender == MALE) new_human.f_style = pick("3 O'clock Shadow", "3 O'clock Moustache", "5 O'clock Shadow", "5 O'clock Moustache") diff --git a/code/modules/gear_presets/corpses.dm b/code/modules/gear_presets/corpses.dm index de24f1f84ff3..ca2b2e2ab52d 100644 --- a/code/modules/gear_presets/corpses.dm +++ b/code/modules/gear_presets/corpses.dm @@ -338,7 +338,7 @@ name = "Corpse - Corporate Liaison" assignment = "Corporate Liaison" xenovictim = TRUE - paygrade = "WYC2" + paygrade = PAY_SHORT_WYC2 access = list( ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_LOGISTICS, @@ -430,7 +430,7 @@ idtype = /obj/item/card/id/general assignment = "Bridge Officer" uses_special_name = TRUE - paygrade = "WYC2" + paygrade = PAY_SHORT_WYC2 access = list( ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_LOGISTICS, @@ -637,7 +637,7 @@ /datum/equipment_preset/corpse/wy/manager name = "Corpse - Corporate Supervisor" flags = EQUIPMENT_PRESET_EXTRA - paygrade = "WYC7" + paygrade = PAY_SHORT_WYC6 assignment = "Colony Supervisor" role_comm_title = "Supervisor" rank = FACTION_WY @@ -800,7 +800,7 @@ languages = list(LANGUAGE_ENGLISH) assignment = JOB_WY_GOON rank = JOB_WY_GOON - paygrade = "WEY-GOON" + paygrade = PAY_SHORT_CPO skills = /datum/skills/MP /datum/equipment_preset/corpse/pmc/goon/load_gear(mob/living/carbon/human/new_human) @@ -822,7 +822,7 @@ flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_WY_GOON_LEAD rank = JOB_WY_GOON_LEAD - paygrade = "WEY-GOON-L" + paygrade = PAY_SHORT_CSPO /datum/equipment_preset/corpse/pmc/goon/lead/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress, WEAR_L_EAR) @@ -985,7 +985,7 @@ name = "Corpse - USCM Reconnaissance Spotter" assignment = "Reconnaissance Spotter" xenovictim = FALSE - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 idtype = /obj/item/card/id/dogtag role_comm_title = "FORECON" faction_group = list(FACTION_USCM, FACTION_SURVIVOR) diff --git a/code/modules/gear_presets/dust_raider.dm b/code/modules/gear_presets/dust_raider.dm index e6464d56085e..27a3ce086c85 100644 --- a/code/modules/gear_presets/dust_raider.dm +++ b/code/modules/gear_presets/dust_raider.dm @@ -10,7 +10,7 @@ var/datum/preferences/A = new() A.randomize_appearance(new_human) var/random_name - random_name = capitalize(pick(new_human.gender == MALE ? first_names_male : first_names_female)) + " " + capitalize(pick(last_names)) + random_name = capitalize(pick(new_human.gender == MALE ? GLOB.first_names_male : GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) new_human.change_real_name(new_human, random_name) new_human.name = new_human.real_name new_human.age = rand(21,45) @@ -24,7 +24,7 @@ access = list(ACCESS_MARINE_PREP) assignment = JOB_SQUAD_MARINE rank = JOB_SQUAD_MARINE - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 role_comm_title = "RFN" skills = /datum/skills/pfc/crafty @@ -46,7 +46,7 @@ access = list(ACCESS_MARINE_PREP) assignment = JOB_SQUAD_LEADER rank = JOB_SQUAD_LEADER - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 role_comm_title = "SL" skills = /datum/skills/SL @@ -75,7 +75,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SMARTPREP) assignment = JOB_SQUAD_SMARTGUN rank = JOB_SQUAD_SMARTGUN - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "SG" skills = /datum/skills/smartgunner @@ -100,7 +100,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_ENGPREP, ACCESS_CIVILIAN_ENGINEERING) assignment = JOB_SQUAD_ENGI rank = JOB_SQUAD_ENGI - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "Eng" skills = /datum/skills/combat_engineer @@ -129,7 +129,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_MEDBAY) assignment = JOB_SQUAD_MEDIC rank = JOB_SQUAD_MEDIC - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "HM" skills = /datum/skills/combat_medic @@ -164,7 +164,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SPECPREP) assignment = JOB_SQUAD_SPECIALIST rank = JOB_SQUAD_SPECIALIST - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "Spc" skills = /datum/skills/specialist diff --git a/code/modules/gear_presets/dutch.dm b/code/modules/gear_presets/dutch.dm index c83e8384f57a..66a7254494b2 100644 --- a/code/modules/gear_presets/dutch.dm +++ b/code/modules/gear_presets/dutch.dm @@ -2,7 +2,7 @@ /datum/equipment_preset/dutch name = JOB_DUTCH_RIFLEMAN - paygrade = "DTC" + paygrade = PAY_SHORT_DTC assignment = JOB_DUTCH_RIFLEMAN flags = EQUIPMENT_PRESET_EXTRA faction = FACTION_DUTCH @@ -19,10 +19,10 @@ human.randomize_appearance(new_human) var/random_name if(new_human.gender == MALE) - random_name = "[pick(first_names_male_dutch)] [pick(last_names)]" + random_name = "[pick(GLOB.first_names_male_dutch)] [pick(GLOB.last_names)]" new_human.f_style = "5 O'clock Shadow" else - random_name = "[pick(first_names_female_dutch)] [pick(last_names)]" + random_name = "[pick(GLOB.first_names_female_dutch)] [pick(GLOB.last_names)]" new_human.change_real_name(new_human, random_name) new_human.age = rand(25,35) @@ -83,7 +83,7 @@ /datum/equipment_preset/dutch/minigun name = JOB_DUTCH_MINIGUNNER - paygrade = "DTCMG" + paygrade = PAY_SHORT_DTCMG assignment = JOB_DUTCH_MINIGUNNER flags = EQUIPMENT_PRESET_EXTRA @@ -116,7 +116,7 @@ /datum/equipment_preset/dutch/flamer name = JOB_DUTCH_FLAMETHROWER - paygrade = "DTCF" + paygrade = PAY_SHORT_DTCF assignment = JOB_DUTCH_FLAMETHROWER flags = EQUIPMENT_PRESET_EXTRA @@ -150,7 +150,7 @@ /datum/equipment_preset/dutch/medic name = JOB_DUTCH_MEDIC - paygrade = "DTCM" + paygrade = PAY_SHORT_DTCM assignment = JOB_DUTCH_MEDIC flags = EQUIPMENT_PRESET_EXTRA @@ -193,7 +193,7 @@ /datum/equipment_preset/dutch/arnie name = "Dutch's Dozen - Arnold" - paygrade = "ARN" + paygrade = PAY_SHORT_DTCA assignment = JOB_DUTCH_ARNOLD flags = EQUIPMENT_PRESET_EXTRA diff --git a/code/modules/gear_presets/fun.dm b/code/modules/gear_presets/fun.dm index 23350768a692..68253afbf90a 100644 --- a/code/modules/gear_presets/fun.dm +++ b/code/modules/gear_presets/fun.dm @@ -240,7 +240,7 @@ /datum/equipment_preset/fun/santa name = "Fun - Santa" - paygrade = "C" + paygrade = PAY_SHORT_CIV flags = EQUIPMENT_PRESET_EXTRA skills = /datum/skills/everything faction = FACTION_MARINE @@ -338,7 +338,7 @@ /datum/equipment_preset/fun/van_bandolier name = "Fun - Big Game Hunter" - paygrade = "CCMO" + paygrade = PAY_SHORT_CCMO uses_special_name = TRUE flags = EQUIPMENT_PRESET_EXTRA skills = /datum/skills/everything @@ -433,14 +433,14 @@ new_human.age = rand(1, 40) /datum/equipment_preset/fun/monkey/proc/get_random_name(mob/living/carbon/human/new_human) - return pick(monkey_names) + return pick(GLOB.monkey_names) /datum/equipment_preset/fun/monkey/marine name = "Fun - Monkey Marine" assignment = "Monkey Marine" rank = "Monkey Marine" - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 /datum/equipment_preset/fun/monkey/marine/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine(new_human), WEAR_BODY) @@ -457,10 +457,10 @@ assignment = "Monkey Soldier" rank = "Monkey Soldier" - paygrade = "UE1" + paygrade = PAY_SHORT_UE1 /datum/equipment_preset/fun/monkey/soldier/get_random_name(mob/living/carbon/human/new_human) - return new_human.gender == MALE ? pick(first_names_male_upp) : pick(first_names_female_upp) + return new_human.gender == MALE ? pick(GLOB.first_names_male_upp) : pick(GLOB.first_names_female_upp) /datum/equipment_preset/fun/monkey/soldier/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP(new_human), WEAR_BODY) diff --git a/code/modules/gear_presets/other.dm b/code/modules/gear_presets/other.dm index 0308c8d9e3cb..6a9fa4d6f55a 100644 --- a/code/modules/gear_presets/other.dm +++ b/code/modules/gear_presets/other.dm @@ -46,10 +46,10 @@ A.randomize_appearance(new_human) var/random_name if(new_human.gender == MALE) - random_name = "[pick(first_names_male_colonist)] [pick(last_names_colonist)]" + random_name = "[pick(GLOB.first_names_male_colonist)] [pick(GLOB.last_names_colonist)]" new_human.f_style = "5 O'clock Shadow" else - random_name = "[pick(first_names_female_colonist)] [pick(last_names_colonist)]" + random_name = "[pick(GLOB.first_names_female_colonist)] [pick(GLOB.last_names_colonist)]" new_human.change_real_name(new_human, random_name) new_human.age = rand(20,45) new_human.r_hair = 25 @@ -105,7 +105,7 @@ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/shotgun, WEAR_WAIST) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/explosive/C4, WEAR_R_STORE) new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar, WEAR_IN_BACK) - spawn_weapon(/obj/item/weapon/gun/shotgun/type23, pick(shotgun_handfuls_8g), new_human, 0, 14) //shotgunner mini-spec + spawn_weapon(/obj/item/weapon/gun/shotgun/type23, pick(GLOB.shotgun_handfuls_8g), new_human, 0, 14) //shotgunner mini-spec new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/stick, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/stick, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/stick, WEAR_IN_BACK) @@ -255,10 +255,10 @@ A.randomize_appearance(new_human) var/random_name if(new_human.gender == MALE) - random_name = "[pick(first_names_male_colonist)] [pick(last_names_colonist)]" + random_name = "[pick(GLOB.first_names_male_colonist)] [pick(GLOB.last_names_colonist)]" new_human.f_style = "5 O'clock Shadow" else - random_name = "[pick(first_names_female_colonist)] [pick(last_names_colonist)]" + random_name = "[pick(GLOB.first_names_female_colonist)] [pick(GLOB.last_names_colonist)]" new_human.change_real_name(new_human, random_name) new_human.age = rand(20,45) new_human.r_hair = rand(15,35) @@ -551,9 +551,9 @@ A.randomize_appearance(new_human) var/random_name if(new_human.gender == MALE) - random_name = "[pick(first_names_male)] [pick(last_names)]" + random_name = "[pick(GLOB.first_names_male)] [pick(GLOB.last_names)]" else - random_name = "[pick(first_names_female)] [pick(last_names)]" + random_name = "[pick(GLOB.first_names_female)] [pick(GLOB.last_names)]" new_human.change_real_name(new_human, random_name) new_human.age = rand(17,45) @@ -641,7 +641,7 @@ new_human.gender = pick(MALE, FEMALE) var/datum/preferences/A = new A.randomize_appearance(new_human) - var/random_name = capitalize(pick(new_human.gender == MALE ? first_names_male : first_names_female)) + " " + capitalize(pick(last_names)) + var/random_name = capitalize(pick(new_human.gender == MALE ? GLOB.first_names_male : GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) new_human.change_real_name(new_human, random_name) new_human.age = rand(21,45) @@ -681,7 +681,7 @@ new_human.gender = pick(MALE, FEMALE) var/datum/preferences/A = new A.randomize_appearance(new_human) - var/random_name = capitalize(pick(new_human.gender == MALE ? first_names_male_gladiator : first_names_female_gladiator)) + var/random_name = capitalize(pick(new_human.gender == MALE ? GLOB.first_names_male_gladiator : GLOB.first_names_female_gladiator)) new_human.change_real_name(new_human, random_name) new_human.age = rand(21,45) @@ -806,7 +806,7 @@ var/list/huds_to_add = list(MOB_HUD_XENO_INFECTION, MOB_HUD_XENO_STATUS) for(var/hud_to_add in huds_to_add) - var/datum/mob_hud/hud = huds[hud_to_add] + var/datum/mob_hud/hud = GLOB.huds[hud_to_add] hud.add_hud_to(new_human, new_human) var/list/actions_to_add = subtypesof(/datum/action/human_action/activable/cult) diff --git a/code/modules/gear_presets/pmc.dm b/code/modules/gear_presets/pmc.dm index 1ec17a1a561d..9571859b0f0f 100644 --- a/code/modules/gear_presets/pmc.dm +++ b/code/modules/gear_presets/pmc.dm @@ -26,17 +26,17 @@ if(prob(10)) first_name = "[capitalize(randomly_generate_japanese_word(rand(2, 3)))]" else - first_name = "[pick(first_names_male_pmc)]" + first_name = "[pick(GLOB.first_names_male_pmc)]" new_human.f_style = "5 O'clock Shadow" else if(prob(10)) first_name = "[capitalize(randomly_generate_japanese_word(rand(2, 3)))]" else - first_name = "[pick(first_names_female_pmc)]" + first_name = "[pick(GLOB.first_names_female_pmc)]" if(prob(25)) last_name = "[capitalize(randomly_generate_japanese_word(rand(2, 4)))]" else - last_name = "[pick(last_names_pmc)]" + last_name = "[pick(GLOB.last_names_pmc)]" random_name = "[first_name] [last_name]" new_human.change_real_name(new_human, random_name) new_human.age = rand(25,35) @@ -1860,9 +1860,9 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), if(prob(10)) random_name = "[capitalize(randomly_generate_japanese_word(rand(2, 3)))]" else if(new_human.gender == MALE) - random_name = "[pick(first_names_male_pmc)]" + random_name = "[pick(GLOB.first_names_male_pmc)]" else - random_name = "[pick(first_names_female_pmc)]" + random_name = "[pick(GLOB.first_names_female_pmc)]" if(new_human.gender == MALE) new_human.f_style = "5 O'clock Shadow" diff --git a/code/modules/gear_presets/royal_marines.dm b/code/modules/gear_presets/royal_marines.dm index c990f19fdb27..90361a24cc57 100644 --- a/code/modules/gear_presets/royal_marines.dm +++ b/code/modules/gear_presets/royal_marines.dm @@ -24,11 +24,11 @@ new_human.b_eyes = colors[eye_color][3] idtype = /obj/item/card/id/dogtag if(new_human.gender == MALE) - random_name = "[pick(first_names_male)] [pick(last_names)]" + random_name = "[pick(GLOB.first_names_male)] [pick(GLOB.last_names)]" new_human.h_style = pick("Crewcut", "Shaved Head", "Buzzcut", "Undercut", "Side Undercut", "Pvt. Joker", "Marine Fade", "Low Fade", "Medium Fade", "High Fade", "No Fade", "Coffee House Cut", "Flat Top",) new_human.f_style = pick("5 O'clock Shadow", "Shaved", "Full Beard", "3 O'clock Moustache", "5 O'clock Shadow", "5 O'clock Moustache", "7 O'clock Shadow", "7 O'clock Moustache",) else - random_name = "[pick(first_names_female)] [pick(last_names)]" + random_name = "[pick(GLOB.first_names_female)] [pick(GLOB.last_names)]" new_human.h_style = pick("Ponytail 1", "Ponytail 2", "Ponytail 3", "Ponytail 4", "Pvt. Redding", "Pvt. Clarison", "Cpl. Dietrich", "Pvt. Vasquez", "Marine Bun", "Marine Bun 2", "Marine Flat Top",) new_human.change_real_name(new_human, random_name) new_human.age = rand(20,45) diff --git a/code/modules/gear_presets/survivors/lv_522/forcon_survivors.dm b/code/modules/gear_presets/survivors/lv_522/forcon_survivors.dm index 825228f29735..34cbc8e0ab9c 100644 --- a/code/modules/gear_presets/survivors/lv_522/forcon_survivors.dm +++ b/code/modules/gear_presets/survivors/lv_522/forcon_survivors.dm @@ -1,7 +1,7 @@ ///*****************************LV-522 Force Recon Survivors*******************************************************/ //Nanu told me to put them here so they dont clutter up survivors.dm /datum/equipment_preset/survivor/forecon - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 idtype = /obj/item/card/id/dogtag role_comm_title = "FORECON" rank = JOB_SURVIVOR @@ -208,7 +208,7 @@ name = "Survivor - USCM Reconnaissance Squad Leader" assignment = JOB_FORECON_SL skills = /datum/skills/military/survivor/forecon_squad_leader - paygrade = "MO1" + paygrade = PAY_SHORT_MO1 /datum/equipment_preset/survivor/forecon/squad_leader/load_gear(mob/living/carbon/human/new_human) var/obj/item/clothing/under/marine/reconnaissance/uniform = new() @@ -234,7 +234,7 @@ name = "Survivor - USCM Reconnaissance Major" assignment = JOB_FORECON_CO skills = /datum/skills/commander - paygrade = "MO4" + paygrade = PAY_SHORT_MO4 idtype = /obj/item/card/id/gold role_comm_title = "FORECON CO" diff --git a/code/modules/gear_presets/survivors/misc.dm b/code/modules/gear_presets/survivors/misc.dm index 3beba6a31b06..15eae8dfe5d4 100644 --- a/code/modules/gear_presets/survivors/misc.dm +++ b/code/modules/gear_presets/survivors/misc.dm @@ -178,7 +178,7 @@ everything bellow isn't used or out of place. name = "Survivor - Corporate Security Goon" flags = EQUIPMENT_PRESET_START_OF_ROUND assignment = JOB_WY_GOON - paygrade = "WEY-GOON" + paygrade = PAY_SHORT_CPO idtype = /obj/item/card/id/silver/cl skills = /datum/skills/civilian/survivor/goon languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE) @@ -257,7 +257,7 @@ everything bellow isn't used or out of place. name = "Survivor - USASF Commander" assignment = "USASF Commander" skills = /datum/skills/commander - paygrade = "NO5" + paygrade = PAY_SHORT_NO5 idtype = /obj/item/card/id/gold role_comm_title = "USASF CDR" flags = EQUIPMENT_PRESET_START_OF_ROUND diff --git a/code/modules/gear_presets/survivors/solaris/crashlanding-offices_insert_bigred.dm b/code/modules/gear_presets/survivors/solaris/crashlanding-offices_insert_bigred.dm index 35a9b8e5eaba..cbc777ad6852 100644 --- a/code/modules/gear_presets/survivors/solaris/crashlanding-offices_insert_bigred.dm +++ b/code/modules/gear_presets/survivors/solaris/crashlanding-offices_insert_bigred.dm @@ -82,7 +82,7 @@ /datum/equipment_preset/survivor/wy/manager name = "Survivor - Corporate Supervisor" flags = EQUIPMENT_PRESET_EXTRA - paygrade = "WYC7" + paygrade = PAY_SHORT_WYC6 skills = /datum/skills/civilian/survivor/manager assignment = "Colony Supervisor" role_comm_title = "Supervisor" diff --git a/code/modules/gear_presets/survivors/sorokyne_strata/preset_sorokyne_strata.dm b/code/modules/gear_presets/survivors/sorokyne_strata/preset_sorokyne_strata.dm index 532b422a13a9..f53f25326b69 100644 --- a/code/modules/gear_presets/survivors/sorokyne_strata/preset_sorokyne_strata.dm +++ b/code/modules/gear_presets/survivors/sorokyne_strata/preset_sorokyne_strata.dm @@ -1,6 +1,6 @@ /datum/equipment_preset/survivor/engineer/soro - name = "Survivor - Sorokyne Strata Political Prisioner" - assignment = "Sorokyne Strata Political Prisioner" + name = "Survivor - Sorokyne Strata Political Prisoner" + assignment = "Sorokyne Strata Political Prisoner" /datum/equipment_preset/survivor/engineer/soro/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP(new_human), WEAR_BODY) @@ -58,3 +58,17 @@ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/survivor(new_human), WEAR_JACKET) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(new_human), WEAR_HEAD) ..() + +/datum/equipment_preset/survivor/corporate/soro + name = "Survivor - Sorokyne Strata Corporate Liaison" + assignment = "Sorokyne Strata Corporate Liaison" + +/datum/equipment_preset/survivor/corporate/soro/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/liaison_suit/charcoal(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf(new_human), WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/liaison/modified(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/lockable/liaison, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) + ..() + diff --git a/code/modules/gear_presets/survivors/survivors.dm b/code/modules/gear_presets/survivors/survivors.dm index 6d7036635b1c..ae26fc40938b 100644 --- a/code/modules/gear_presets/survivors/survivors.dm +++ b/code/modules/gear_presets/survivors/survivors.dm @@ -5,7 +5,7 @@ skills = /datum/skills/civilian/survivor languages = list(LANGUAGE_ENGLISH) - paygrade = "C" + paygrade = PAY_SHORT_CIV idtype = /obj/item/card/id/lanyard faction = FACTION_SURVIVOR faction_group = list(FACTION_SURVIVOR) @@ -22,7 +22,7 @@ new_human.gender = pick(MALE, FEMALE) var/datum/preferences/A = new A.randomize_appearance(new_human) - var/random_name = capitalize(pick(new_human.gender == MALE ? first_names_male : first_names_female)) + " " + capitalize(pick(last_names)) + var/random_name = capitalize(pick(new_human.gender == MALE ? GLOB.first_names_male : GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) new_human.change_real_name(new_human, random_name) new_human.age = rand(21,45) @@ -195,7 +195,7 @@ Standart Survivors : /datum/equipment_preset/survivor/scientist, /datum/equipment_preset/survivor/colonial_marshal name = "Survivor - Colonial Marshal Deputy" assignment = "CMB Deputy" - paygrade = "GS-9" + paygrade = PAY_SHORT_CMBD skills = /datum/skills/civilian/survivor/marshal flags = EQUIPMENT_PRESET_START_OF_ROUND idtype = /obj/item/card/id/deputy @@ -293,7 +293,7 @@ Everything bellow is a parent used as a base for one or multiple maps. assignment = "Corporate Liaison" skills = /datum/skills/civilian/survivor flags = EQUIPMENT_PRESET_START_OF_ROUND - paygrade = "WYC2" + paygrade = PAY_SHORT_WYC2 idtype = /obj/item/card/id/silver/clearance_badge/cl access = list( ACCESS_CIVILIAN_PUBLIC, @@ -325,11 +325,11 @@ Everything bellow is a parent used as a base for one or multiple maps. var/playtime = get_job_playtime(new_human.client, JOB_CORPORATE_LIAISON) if(new_human.client.prefs.playtime_perks) if(playtime > JOB_PLAYTIME_TIER_4) - return "WYC5" + return PAY_SHORT_WYC5 else if(playtime > JOB_PLAYTIME_TIER_3) - return "WYC4" + return PAY_SHORT_WYC4 else if(playtime > JOB_PLAYTIME_TIER_2) - return "WYC3" + return PAY_SHORT_WYC3 else return paygrade return paygrade @@ -339,7 +339,7 @@ Everything bellow is a parent used as a base for one or multiple maps. present in xenomorph.dm file -var/list/survivor_types = list( +GLOBAL_LIST_INIT(survivor_types, list() /datum/equipment_preset/survivor/scientist, /datum/equipment_preset/survivor/doctor, /datum/equipment_preset/survivor/security, @@ -411,7 +411,7 @@ and is used as a base for all of the maps. assignment = "Interstellar Commerce Commission Corporate Liaison" skills = /datum/skills/civilian/survivor idtype = /obj/item/card/id/silver/cl - paygrade = "WYC2" + paygrade = PAY_SHORT_ICCL role_comm_title = "ICC Rep." flags = EQUIPMENT_PRESET_START_OF_ROUND diff --git a/code/modules/gear_presets/survivors/trijent/crashlanding_upp_bar_insert_trijent.dm b/code/modules/gear_presets/survivors/trijent/crashlanding_upp_bar_insert_trijent.dm index c1ca81683c4b..324cfbe3bf7a 100644 --- a/code/modules/gear_presets/survivors/trijent/crashlanding_upp_bar_insert_trijent.dm +++ b/code/modules/gear_presets/survivors/trijent/crashlanding_upp_bar_insert_trijent.dm @@ -2,7 +2,7 @@ //crashlanding-upp-bar.dmm map. /datum/equipment_preset/survivor/upp name = "Survivor - UPP" - paygrade = "UE1" + paygrade = PAY_SHORT_UE1 origin_override = ORIGIN_UPP rank = JOB_SURVIVOR skills = /datum/skills/military/survivor/upp_private @@ -39,7 +39,7 @@ //crashlanding-upp-bar.dmm /datum/equipment_preset/survivor/upp/soldier name = "Survivor - UPP Soldier" - paygrade = "UE2" + paygrade = PAY_SHORT_UE2 assignment = JOB_UPP rank = JOB_UPP skills = /datum/skills/military/survivor/upp_private @@ -60,11 +60,18 @@ spawn_random_upp_belt(new_human) ..() + +/datum/equipment_preset/survivor/upp/soldier/load_rank(mob/living/carbon/human/new_human) + if(new_human.client) + if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1) + return PAY_SHORT_UE1 + return paygrade + // /obj/effect/landmark/survivor_spawner/upp_sapper //crashlanding-upp-bar.dmm /datum/equipment_preset/survivor/upp/sapper name = "Survivor - UPP Sapper" - paygrade = "UE3" + paygrade = PAY_SHORT_UE3 assignment = JOB_UPP_ENGI rank = JOB_UPP_ENGI skills = /datum/skills/military/survivor/upp_sapper @@ -92,7 +99,7 @@ //crashlanding-upp-bar.dmm /datum/equipment_preset/survivor/upp/medic name = "Survivor - UPP Medic" - paygrade = "UE3" + paygrade = PAY_SHORT_UE3 assignment = JOB_UPP_MEDIC rank = JOB_UPP_MEDIC skills = /datum/skills/military/survivor/upp_medic @@ -124,7 +131,7 @@ name = "Survivor - UPP Specialist" assignment = JOB_UPP_SPECIALIST rank = JOB_UPP_SPECIALIST - paygrade = "UE4" + paygrade = PAY_SHORT_UE4 skills = /datum/skills/military/survivor/upp_spec /datum/equipment_preset/survivor/upp/specialist/load_gear(mob/living/carbon/human/new_human) @@ -143,7 +150,7 @@ // /obj/effect/landmark/survivor_spawner/squad_leader /datum/equipment_preset/survivor/upp/squad_leader name = "Survivor - UPP Squad Leader" - paygrade = "UE5" + paygrade = PAY_SHORT_UE5 assignment = JOB_UPP_LEADER rank = JOB_UPP_LEADER languages = list(LANGUAGE_RUSSIAN, LANGUAGE_ENGLISH, LANGUAGE_GERMAN, LANGUAGE_CHINESE) @@ -171,7 +178,7 @@ faction = FACTION_UPP faction_group = list(FACTION_UPP, FACTION_SURVIVOR) skills = /datum/skills/colonial_synthetic - paygrade = "SYN" + paygrade = PAY_SHORT_SYN idtype = /obj/item/card/id/dogtag role_comm_title = "173/RECON Syn" diff --git a/code/modules/gear_presets/synths.dm b/code/modules/gear_presets/synths.dm index 9ac7950b7246..3b2efd8c22be 100644 --- a/code/modules/gear_presets/synths.dm +++ b/code/modules/gear_presets/synths.dm @@ -3,7 +3,7 @@ uses_special_name = TRUE languages = ALL_SYNTH_LANGUAGES skills = /datum/skills/synthetic - paygrade = "SYN" + paygrade = PAY_SHORT_SYN minimap_icon = "synth" @@ -41,7 +41,7 @@ idtype = /obj/item/card/id/gold assignment = JOB_SYNTH rank = "Synthetic" - paygrade = "SYN" + paygrade = PAY_SHORT_SYN role_comm_title = "Syn" /datum/equipment_preset/synth/uscm/load_gear(mob/living/carbon/human/new_human) @@ -65,7 +65,7 @@ idtype = /obj/item/card/id/gold assignment = JOB_SYNTH rank = "Synthetic" - paygrade = "SYN" + paygrade = PAY_SHORT_SYN role_comm_title = "Syn" /datum/equipment_preset/synth/uscm/councillor/load_gear(mob/living/carbon/human/new_human) @@ -654,7 +654,7 @@ rank = JOB_COLONIST skills = /datum/skills/infiltrator_synthetic idtype = /obj/item/card/id/lanyard - paygrade = "C" + paygrade = PAY_SHORT_CIV /datum/equipment_preset/synth/infiltrator/New() . = ..() @@ -668,11 +668,11 @@ var/datum/preferences/A = new() A.randomize_appearance(new_human) if(new_human.gender == MALE) - first_name = "[pick(first_names_male_colonist)]" + first_name = "[pick(GLOB.first_names_male_colonist)]" else - first_name ="[pick(first_names_female_colonist)]" + first_name ="[pick(GLOB.first_names_female_colonist)]" - last_name ="[pick(last_names_colonist)]" + last_name ="[pick(GLOB.last_names_colonist)]" random_name = "[first_name] [last_name]" new_human.change_real_name(new_human, random_name) var/static/list/colors = list("BLACK" = list(15, 15, 25), "BROWN" = list(102, 51, 0), "AUBURN" = list(139, 62, 19)) diff --git a/code/modules/gear_presets/upp.dm b/code/modules/gear_presets/upp.dm index 6c361795b4a6..dc79f87c5135 100644 --- a/code/modules/gear_presets/upp.dm +++ b/code/modules/gear_presets/upp.dm @@ -21,18 +21,18 @@ if(prob(40)) first_name = "[capitalize(randomly_generate_chinese_word(1))]" else - first_name = "[pick(first_names_male_upp)]" + first_name = "[pick(GLOB.first_names_male_upp)]" new_human.f_style = pick("3 O'clock Shadow", "3 O'clock Moustache", "5 O'clock Shadow", "5 O'clock Moustache") else if(prob(40)) first_name = "[capitalize(randomly_generate_chinese_word(1))]" else - first_name = "[pick(first_names_female_upp)]" + first_name = "[pick(GLOB.first_names_female_upp)]" //surname if(prob(35)) last_name = "[capitalize(randomly_generate_chinese_word(pick(20;1, 80;2)))]" else - last_name = "[pick(last_names_upp)]" + last_name = "[pick(GLOB.last_names_upp)]" //put them together random_name = "[first_name] [last_name]" @@ -64,7 +64,7 @@ assignment = JOB_UPP rank = JOB_UPP role_comm_title = "Sol" - paygrade = "UE2" + paygrade = PAY_SHORT_UE2 /datum/equipment_preset/upp/soldier/load_gear(mob/living/carbon/human/new_human) //TODO: add backpacks and satchels @@ -86,6 +86,12 @@ load_upp_soldier(new_human, UPP) +/datum/equipment_preset/upp/soldier/load_rank(mob/living/carbon/human/new_human) + if(new_human.client) + if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1) + return PAY_SHORT_UE1 + return paygrade + /datum/equipment_preset/upp/soldier/proc/load_upp_soldier(mob/living/carbon/human/new_human, obj/item/clothing/under/marine/veteran/UPP/UPP) var/percentage = rand(1, 100) switch(percentage) @@ -230,7 +236,7 @@ assignment = JOB_UPP_MEDIC rank = JOB_UPP_MEDIC role_comm_title = "Med" - paygrade = "UE3" + paygrade = PAY_SHORT_UE3 /datum/equipment_preset/upp/medic/load_gear(mob/living/carbon/human/new_human) //back @@ -399,7 +405,7 @@ assignment = JOB_UPP_ENGI rank = JOB_UPP_ENGI role_comm_title = "Sap" - paygrade = "UE3" + paygrade = PAY_SHORT_UE3 /datum/equipment_preset/upp/sapper/load_gear(mob/living/carbon/human/new_human) //Sappers should have lots of gear and whatnot that helps them attack or siege marines @@ -533,7 +539,7 @@ assignment = JOB_UPP_SPECIALIST rank = JOB_UPP_SPECIALIST role_comm_title = "Spc" - paygrade = "UE5" + paygrade = PAY_SHORT_UE5 /datum/equipment_preset/upp/specialist/load_gear(mob/living/carbon/human/new_human) //back @@ -660,7 +666,7 @@ assignment = JOB_UPP_SPECIALIST rank = JOB_UPP_SPECIALIST role_comm_title = "Spc" - paygrade = "UE5" + paygrade = PAY_SHORT_UE5 /datum/equipment_preset/upp/machinegunner/load_gear(mob/living/carbon/human/new_human) //back @@ -785,7 +791,7 @@ assignment = JOB_UPP_LEADER rank = JOB_UPP_LEADER role_comm_title = "SL" - paygrade = "UE6" + paygrade = PAY_SHORT_UE6 /datum/equipment_preset/upp/leader/load_gear(mob/living/carbon/human/new_human) var/UPPleadsidearm = rand(1,4) @@ -953,7 +959,7 @@ assignment = JOB_UPP_POLICE rank = JOB_UPP_POLICE role_comm_title = "MP" - paygrade = "UE6" + paygrade = PAY_SHORT_UE6 /datum/equipment_preset/upp/military_police/load_gear(mob/living/carbon/human/new_human) //back @@ -1105,7 +1111,7 @@ assignment = JOB_UPP_LT_OFFICER rank = JOB_UPP_LT_OFFICER role_comm_title = "Lt." - paygrade = "UO1" + paygrade = PAY_SHORT_UO1 /datum/equipment_preset/upp/officer/load_gear(mob/living/carbon/human/new_human) //back @@ -1265,7 +1271,7 @@ assignment = JOB_UPP_SRLT_OFFICER rank = JOB_UPP_SRLT_OFFICER role_comm_title = "Sr-Lt." - paygrade = "UO2" + paygrade = PAY_SHORT_UO2 /datum/equipment_preset/upp/officer/senior/load_gear(mob/living/carbon/human/new_human) //back @@ -1425,7 +1431,7 @@ assignment = JOB_UPP_KPT_OFFICER rank = JOB_UPP_KPT_OFFICER role_comm_title = "May." - paygrade = "UO3" + paygrade = PAY_SHORT_UO3 skills = /datum/skills/upp/kapitan /datum/equipment_preset/upp/officer/kapitan/load_gear(mob/living/carbon/human/new_human) @@ -1586,7 +1592,7 @@ assignment = JOB_UPP_MAY_OFFICER rank = JOB_UPP_MAY_OFFICER role_comm_title = "May." - paygrade = "UO4" + paygrade = PAY_SHORT_UO4 skills = /datum/skills/upp/commander /datum/equipment_preset/upp/officer/major/load_gear(mob/living/carbon/human/new_human) @@ -1747,7 +1753,7 @@ assignment = JOB_UPP_LTKOL_OFFICER rank = JOB_UPP_LTKOL_OFFICER role_comm_title = "Lt. Kol." - paygrade = "UO5" + paygrade = PAY_SHORT_UO5 skills = /datum/skills/upp/commander /datum/equipment_preset/upp/officer/lt_kolonel/load_gear(mob/living/carbon/human/new_human) @@ -1908,7 +1914,7 @@ assignment = JOB_UPP_KOL_OFFICER rank = JOB_UPP_KOL_OFFICER role_comm_title = "Kol." - paygrade = "UO6" + paygrade = PAY_SHORT_UO6 skills = /datum/skills/upp/commander /datum/equipment_preset/upp/officer/kolonel/load_gear(mob/living/carbon/human/new_human) @@ -2069,7 +2075,7 @@ assignment = JOB_UPP_KOL_OFFICER rank = JOB_UPP_KOL_OFFICER role_comm_title = "May. Gen." - paygrade = "UO7" + paygrade = PAY_SHORT_UO7 skills = /datum/skills/upp/commander /datum/equipment_preset/upp/officer/may_gen/load_gear(mob/living/carbon/human/new_human) @@ -2230,7 +2236,7 @@ assignment = JOB_UPP_KOL_OFFICER rank = JOB_UPP_KOL_OFFICER role_comm_title = "Lt. Gen." - paygrade = "UO8" + paygrade = PAY_SHORT_UO8 skills = /datum/skills/upp/commander /datum/equipment_preset/upp/officer/ley_gen/load_gear(mob/living/carbon/human/new_human) @@ -2391,7 +2397,7 @@ assignment = JOB_UPP_KOL_OFFICER rank = JOB_UPP_KOL_OFFICER role_comm_title = "Gen." - paygrade = "UO9" + paygrade = PAY_SHORT_UO9 skills = /datum/skills/upp/commander /datum/equipment_preset/upp/officer/gen/load_gear(mob/living/carbon/human/new_human) @@ -2592,7 +2598,7 @@ skills = /datum/skills/synthetic assignment = JOB_UPP_COMBAT_SYNTH rank = JOB_UPP_COMBAT_SYNTH - paygrade = "SYN" + paygrade = PAY_SHORT_SYN idtype = /obj/item/card/id/gold /datum/equipment_preset/upp/synth/load_name(mob/living/carbon/human/new_human, randomise) @@ -2603,9 +2609,9 @@ if(prob(10)) random_name = "[capitalize(randomly_generate_chinese_word(2))]" else if(new_human.gender == MALE) - random_name = "[pick(first_names_male_upp)]" + random_name = "[pick(GLOB.first_names_male_upp)]" else - random_name = "[pick(first_names_female_upp)]" + random_name = "[pick(GLOB.first_names_female_upp)]" if(new_human.gender == MALE) new_human.f_style = pick("3 O'clock Shadow", "3 O'clock Moustache", "5 O'clock Shadow", "5 O'clock Moustache") @@ -2801,7 +2807,7 @@ assignment = JOB_UPP_CONSCRIPT rank = JOB_UPP_CONSCRIPT role_comm_title = "Cons" - paygrade = "UE1" + paygrade = PAY_SHORT_UE1 /datum/equipment_preset/upp/conscript/load_gear(mob/living/carbon/human/new_human) //TODO: add backpacks and satchels @@ -2902,14 +2908,14 @@ //*****************************************************************************************************/ /datum/equipment_preset/upp/commando - name = "UPP Commando" + name = "UPP Commando (!DEATHSQUAD!)" flags = EQUIPMENT_PRESET_EXTRA skills = /datum/skills/commando assignment = JOB_UPP_COMMANDO rank = JOB_UPP_COMMANDO role_comm_title = "JKdo" - paygrade = "UC1" + paygrade = PAY_SHORT_UC1 idtype = /obj/item/card/id/data languages = list(LANGUAGE_RUSSIAN, LANGUAGE_ENGLISH, LANGUAGE_TSL, LANGUAGE_SPANISH, LANGUAGE_CHINESE) @@ -3031,14 +3037,14 @@ //*****************************************************************************************************/ /datum/equipment_preset/upp/commando/medic - name = "UPP Commando Medic" + name = "UPP Commando Medic (!DEATHSQUAD!)" flags = EQUIPMENT_PRESET_EXTRA skills = /datum/skills/commando/medic assignment = JOB_UPP_COMMANDO_MEDIC rank = JOB_UPP_COMMANDO_MEDIC role_comm_title = "2ndKdo" - paygrade = "UC2" + paygrade = PAY_SHORT_UC2 /datum/equipment_preset/upp/commando/medic/load_gear(mob/living/carbon/human/new_human) //TODO: add backpacks and satchels @@ -3200,14 +3206,14 @@ //*****************************************************************************************************/ /datum/equipment_preset/upp/commando/leader - name = "UPP Commando Leader" + name = "UPP Commando Leader (!DEATHSQUAD!)" flags = EQUIPMENT_PRESET_EXTRA skills = /datum/skills/commando/leader assignment = JOB_UPP_COMMANDO_LEADER rank = JOB_UPP_COMMANDO_LEADER role_comm_title = "1stKdo" - paygrade = "UC3" + paygrade = PAY_SHORT_UC3 idtype = /obj/item/card/id/silver /datum/equipment_preset/upp/commando/leader/load_gear(mob/living/carbon/human/new_human) @@ -3351,6 +3357,106 @@ list("Drop Pouch", 10, /obj/item/clothing/accessory/storage/droppouch, null, VENDOR_ITEM_REGULAR), ) +/datum/equipment_preset/upp/commando/low_threat + name = "UPP Commando" + +/datum/equipment_preset/upp/commando/low_threat/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/kdo, WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/commando, WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap, WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/np92/suppressed, WEAR_WAIST) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel/scout_cloak/upp/weak, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/upp, WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/m42_night_goggles/upp, WEAR_EYES) + + new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/phosphorus/upp, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/magazine/large, WEAR_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full, WEAR_L_STORE) + + new_human.equip_to_slot_or_del(new /obj/item/handcuffs, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/handcuffs, WEAR_IN_BACK) + + spawn_weapon(/obj/item/weapon/gun/rifle/type71/carbine/commando, /obj/item/ammo_magazine/rifle/type71, new_human, 0, 8) + +/datum/equipment_preset/upp/commando/medic/low_threat + name = "UPP Commando Medic" + +/datum/equipment_preset/upp/commando/medic/load_gear(mob/living/carbon/human/new_human) + //TODO: add backpacks and satchels + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/kdo/medic, WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP/medic, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/commando, WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap, WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel/scout_cloak/upp/weak, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/upp, WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/m42_night_goggles/upp, WEAR_EYES) + + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/upp/full, WEAR_WAIST) + new_human.equip_to_slot_or_del(new /obj/item/device/healthanalyzer, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/surgical_line, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/synthgraft, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/adv, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/roller, WEAR_IN_BACK) + if(new_human.disabilities & NEARSIGHTED) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health/prescription(new_human), WEAR_IN_BACK) + else + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/magazine/large, WEAR_R_STORE) + + new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/explosive/C4, WEAR_L_STORE) + + new_human.equip_to_slot_or_del(new /obj/item/handcuffs, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/handcuffs, WEAR_IN_JACKET) + + spawn_weapon(/obj/item/weapon/gun/rifle/type71/carbine/commando, /obj/item/ammo_magazine/rifle/type71, new_human, 0, 5) + +/datum/equipment_preset/upp/commando/leader/low_threat + name = "UPP Commando Leader" + +/datum/equipment_preset/upp/commando/leader/load_gear(mob/living/carbon/human/new_human) + //TODO: add backpacks and satchels + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/kdo/command, WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/commando, WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/beret, WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel/scout_cloak/upp/weak, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/upp, WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/m42_night_goggles/upp, WEAR_EYES) + + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/np92/suppressed, WEAR_WAIST) + + new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/phosphorus/upp, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/phosphorus/upp, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/magazine/large, WEAR_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/explosive/C4, WEAR_L_STORE) + + new_human.equip_to_slot_or_del(new /obj/item/handcuffs, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/handcuffs, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/box/handcuffs, WEAR_IN_BACK) + //*****************************************************************************************************/ /datum/equipment_preset/upp/tank @@ -3359,7 +3465,7 @@ assignment = JOB_UPP_CREWMAN rank = JOB_UPP_CREWMAN - paygrade = "UE5" + paygrade = PAY_SHORT_UE5 role_comm_title = "TANK" minimum_age = 30 skills = /datum/skills/tank_crew @@ -3477,7 +3583,7 @@ assignment = JOB_UPP_LT_DOKTOR rank = JOB_UPP_LT_DOKTOR role_comm_title = "Lt. Med." - paygrade = "UO1" + paygrade = PAY_SHORT_UO1 /datum/equipment_preset/upp/doctor/load_gear(mob/living/carbon/human/new_human) //back diff --git a/code/modules/gear_presets/uscm.dm b/code/modules/gear_presets/uscm.dm index baee71eee8b4..8677b372159b 100644 --- a/code/modules/gear_presets/uscm.dm +++ b/code/modules/gear_presets/uscm.dm @@ -67,7 +67,7 @@ access = list(ACCESS_MARINE_PREP) assignment = JOB_SQUAD_MARINE rank = JOB_SQUAD_MARINE - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 role_comm_title = "RFN" skills = /datum/skills/pfc @@ -83,7 +83,7 @@ /datum/equipment_preset/uscm/pfc/load_rank(mob/living/carbon/human/new_human) if(new_human.client) if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1) - return "ME1" + return PAY_SHORT_ME1 return paygrade /datum/equipment_preset/uscm/pfc/cryo @@ -103,7 +103,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SMARTPREP) assignment = JOB_SQUAD_SMARTGUN rank = JOB_SQUAD_SMARTGUN - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "SG" skills = /datum/skills/smartgunner @@ -159,7 +159,7 @@ ) assignment = JOB_CREWMAN rank = JOB_CREWMAN - paygrade = "ME4" + paygrade = PAY_SHORT_ME4 role_comm_title = "CRMN" minimum_age = 30 skills = /datum/skills/tank_crew @@ -220,7 +220,7 @@ ) assignment = JOB_INTEL rank = JOB_INTEL - paygrade = "MO1" + paygrade = PAY_SHORT_MO1 role_comm_title = "IO" skills = /datum/skills/intel @@ -276,7 +276,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SPECPREP) assignment = JOB_SQUAD_SPECIALIST rank = JOB_SQUAD_SPECIALIST - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "Spc" skills = /datum/skills/specialist @@ -333,7 +333,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_MEDBAY) assignment = JOB_SQUAD_MEDIC rank = JOB_SQUAD_MEDIC - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "HM" skills = /datum/skills/combat_medic @@ -365,7 +365,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_TL_PREP) assignment = JOB_SQUAD_TEAM_LEADER rank = JOB_SQUAD_TEAM_LEADER - paygrade = "ME4" + paygrade = PAY_SHORT_ME4 role_comm_title = "FTL" skills = /datum/skills/tl @@ -395,7 +395,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_ENGPREP, ACCESS_CIVILIAN_ENGINEERING) assignment = JOB_SQUAD_ENGI rank = JOB_SQUAD_ENGI - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "ComTech" skills = /datum/skills/combat_engineer @@ -427,7 +427,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP) assignment = JOB_SQUAD_LEADER rank = JOB_SQUAD_LEADER - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 role_comm_title = "SL" minimum_age = 27 skills = /datum/skills/SL @@ -460,7 +460,7 @@ access = list(ACCESS_MARINE_PREP) assignment = JOB_SQUAD_MARINE rank = JOB_SQUAD_MARINE - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 role_comm_title = "RFN" skills = /datum/skills/pfc/crafty @@ -472,7 +472,7 @@ /datum/equipment_preset/uscm/private_equipped/load_rank(mob/living/carbon/human/new_human) if(new_human.client) if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1) - return "ME1" + return PAY_SHORT_ME1 return paygrade /datum/equipment_preset/uscm/private_equipped/load_gear(mob/living/carbon/human/new_human) @@ -508,7 +508,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP) assignment = JOB_SQUAD_LEADER rank = JOB_SQUAD_LEADER - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 role_comm_title = "SL" minimum_age = 27 skills = /datum/skills/SL @@ -550,7 +550,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SMARTPREP) assignment = JOB_SQUAD_SMARTGUN rank = JOB_SQUAD_SMARTGUN - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "SG" skills = /datum/skills/smartgunner @@ -587,7 +587,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_ENGPREP, ACCESS_CIVILIAN_ENGINEERING) assignment = JOB_SQUAD_ENGI rank = JOB_SQUAD_ENGI - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "ComTech" skills = /datum/skills/combat_engineer @@ -633,7 +633,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_MEDBAY) assignment = JOB_SQUAD_MEDIC rank = JOB_SQUAD_MEDIC - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "HM" skills = /datum/skills/combat_medic @@ -687,7 +687,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SPECPREP) assignment = JOB_SQUAD_SPECIALIST rank = JOB_SQUAD_SPECIALIST - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "Spc" skills = /datum/skills/specialist @@ -757,7 +757,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_TL_PREP) assignment = JOB_SQUAD_TEAM_LEADER rank = JOB_SQUAD_TEAM_LEADER - paygrade = "ME4" + paygrade = PAY_SHORT_ME4 role_comm_title = "TL" skills = /datum/skills/tl @@ -789,7 +789,7 @@ //############ Marine Raiders ############# //Operator /datum/equipment_preset/uscm/marsoc - name = "Marine Raider" + name = "Marine Raider (!DEATHSQUAD!)" flags = EQUIPMENT_PRESET_EXTRA assignment = "Marine Raider" rank = JOB_MARINE_RAIDER @@ -798,7 +798,7 @@ skills = /datum/skills/commando/deathsquad auto_squad_name = SQUAD_SOF ert_squad = TRUE - paygrade = "ME6" + paygrade = PAY_SHORT_ME6 minimap_icon = "private" @@ -851,27 +851,27 @@ /datum/equipment_preset/uscm/marsoc/load_rank(mob/living/carbon/human/new_human) if(new_human.client) if(get_job_playtime(new_human.client, rank) > JOB_PLAYTIME_TIER_2) - return "ME7" + return PAY_SHORT_ME7 return paygrade //Covert Raiders /datum/equipment_preset/uscm/marsoc/covert - name = "Marine Raiders (Covert)" + name = "Marine Raiders (!DEATHSQUAD! Covert)" uses_special_name = TRUE /datum/equipment_preset/uscm/marsoc/covert/load_name(mob/living/carbon/human/new_human, randomise) new_human.gender = MALE - new_human.change_real_name(new_human, "[pick(nato_phonetic_alphabet)]") + new_human.change_real_name(new_human, "[pick(GLOB.nato_phonetic_alphabet)]") new_human.age = rand(20,30) /datum/equipment_preset/uscm/marsoc/covert/load_rank(mob/living/carbon/human/new_human) return "O" //Team Leader /datum/equipment_preset/uscm/marsoc/sl - name = "Marine Raider Team Leader" + name = "Marine Raider Team Leader (!DEATHSQUAD!)" assignment = JOB_MARINE_RAIDER_SL rank = JOB_MARINE_RAIDER_SL role_comm_title = "TL." - paygrade = "MO1" + paygrade = PAY_SHORT_MO1 skills = /datum/skills/commando/deathsquad/leader minimap_icon = "leader" @@ -879,30 +879,88 @@ /datum/equipment_preset/uscm/marsoc/sl/load_rank(mob/living/carbon/human/new_human) if(new_human.client) if(get_job_playtime(new_human.client, rank) > JOB_PLAYTIME_TIER_2) - return "MO2" + return PAY_SHORT_MO2 return paygrade //Codenamed Team Leader /datum/equipment_preset/uscm/marsoc/sl/covert - name = "Marine Raider Team Leader (Covert)" + name = "Marine Raider Team Leader (!DEATHSQUAD! Covert)" uses_special_name = TRUE /datum/equipment_preset/uscm/marsoc/sl/covert/load_name(mob/living/carbon/human/new_human, randomise) new_human.gender = MALE - new_human.change_real_name(new_human, "[pick(nato_phonetic_alphabet)]") + new_human.change_real_name(new_human, "[pick(GLOB.nato_phonetic_alphabet)]") new_human.age = rand(20,30) /datum/equipment_preset/uscm/marsoc/sl/covert/load_rank(mob/living/carbon/human/new_human) return "O" //Officer /datum/equipment_preset/uscm/marsoc/cmd - name = "Marine Raider Officer" + name = "Marine Raider Officer (!DEATHSQUAD!)" assignment = JOB_MARINE_RAIDER_CMD rank = JOB_MARINE_RAIDER_CMD role_comm_title = "CMD." - paygrade = "MO3" + paygrade = PAY_SHORT_MO3 skills = /datum/skills/commando/deathsquad/officer /datum/equipment_preset/uscm/marsoc/cmd/load_rank(mob/living/carbon/human/new_human) if(new_human.client) if(get_job_playtime(new_human.client, rank) > JOB_PLAYTIME_TIER_3) - return "MO4" + return PAY_SHORT_MO4 + return paygrade + +/datum/equipment_preset/uscm/marsoc/low_threat + name = "Marine Raider" + +/datum/equipment_preset/uscm/marsoc/low_threat/load_gear(mob/living/carbon/human/new_human) + //back + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/marsoc, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/phosphorus, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/phosphorus, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/phosphorus, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector, WEAR_IN_BACK) + //face + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/sof, WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/marsoc, WEAR_FACE) + //head + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/sof, WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/prop/helmetgarb/helmet_nvg/marsoc, WEAR_IN_HELMET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/buckshot, WEAR_IN_HELMET) + //uniform + var/obj/item/clothing/under/marine/veteran/marsoc/uniform = new() + var/obj/item/clothing/accessory/storage/black_vest/accessory = new() + uniform.attach_accessory(new_human, accessory) + new_human.equip_to_slot_or_del(uniform, WEAR_BODY) + for(var/i in 1 to accessory.hold.storage_slots) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/buckshot, WEAR_IN_ACCESSORY) + //jacket + var/obj/item/clothing/suit/storage/marine/sof/armor = new() + new_human.equip_to_slot_or_del(armor, WEAR_JACKET) + for(var/i in 1 to armor.storage_slots) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/xm40, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/m41a/elite/xm40/ap, WEAR_J_STORE) + //waist + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/shotgun/combat/marsoc, WEAR_WAIST) + //limbs + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine, WEAR_HANDS) + //pockets + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/medical/socmed/not_op, WEAR_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/tools/tactical/full, WEAR_R_STORE) + +/datum/equipment_preset/uscm/marsoc/low_threat/sl + name = "Marine Raider Team Leader" + assignment = JOB_MARINE_RAIDER_SL + rank = JOB_MARINE_RAIDER_SL + role_comm_title = "TL." + paygrade = PAY_SHORT_MO1 + skills = /datum/skills/commando/deathsquad/leader + + minimap_icon = "leader" + +/datum/equipment_preset/uscm/marsoc/sl/load_rank(mob/living/carbon/human/new_human) + if(new_human.client) + if(get_job_playtime(new_human.client, rank) > JOB_PLAYTIME_TIER_2) + return PAY_SHORT_MO2 return paygrade diff --git a/code/modules/gear_presets/uscm_dress.dm b/code/modules/gear_presets/uscm_dress.dm index 393cc5b41a66..080ed18d7c40 100644 --- a/code/modules/gear_presets/uscm_dress.dm +++ b/code/modules/gear_presets/uscm_dress.dm @@ -5,7 +5,7 @@ rank = JOB_MARINE access = list(ACCESS_MARINE_PREP) minimum_age = 18 - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 role_comm_title = "Mar" skills = /datum/skills/pfc @@ -25,13 +25,13 @@ /datum/equipment_preset/uscm_event/dress/lcpl name = "Dress Blues - (E-3) Lance Corporal" - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 //NCOs/SNCOs// /datum/equipment_preset/uscm_event/dress/nco name = "Dress Blues - (E-4) Corporal" - paygrade = "ME4" + paygrade = PAY_SHORT_ME4 skills = /datum/skills/SL dress_under = list(/obj/item/clothing/under/marine/dress/blues/senior) @@ -44,11 +44,11 @@ /datum/equipment_preset/uscm_event/dress/nco/sgt name = "Dress Blues - (E-5) Sergeant" - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 /datum/equipment_preset/uscm_event/dress/nco/snco name = "Dress Blues - (E-6) Staff Sergeant" - paygrade = "ME6" + paygrade = PAY_SHORT_ME6 skills = /datum/skills/SEA access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP) @@ -58,29 +58,29 @@ /datum/equipment_preset/uscm_event/dress/nco/snco/gysgt name = "Dress Blues - (E-7) Gunnery Sergeant" - paygrade = "ME7" + paygrade = PAY_SHORT_ME7 /datum/equipment_preset/uscm_event/dress/nco/snco/msgt name = "Dress Blues - (E-8) Master Sergeant" - paygrade = "ME8" + paygrade = PAY_SHORT_ME8 /datum/equipment_preset/uscm_event/dress/nco/snco/firstsgt name = "Dress Blues - (E-8E) First Sergeant" - paygrade = "ME8E" + paygrade = PAY_SHORT_ME8E /datum/equipment_preset/uscm_event/dress/nco/snco/mgysgt name = "Dress Blues - (E-9) Master Gunnery Sergeant" - paygrade = "ME9" + paygrade = PAY_SHORT_ME9 /datum/equipment_preset/uscm_event/dress/nco/snco/sgtmaj name = "Dress Blues - (E-9E) Sergeant Major" - paygrade = "ME9E" + paygrade = PAY_SHORT_ME9E //FIELD OFFICERS// /datum/equipment_preset/uscm_event/dress/officer name = "Dress Blues - (O-1) 2nd Lieutenant" - paygrade = "MO1" + paygrade = PAY_SHORT_MO1 idtype = /obj/item/card/id/silver skills = /datum/skills/SO access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_DATABASE, ACCESS_MARINE_MEDBAY) @@ -100,11 +100,11 @@ /datum/equipment_preset/uscm_event/dress/officer/firstlt name = "Dress Blues - (O-2) 1st Lieutenant" - paygrade = "MO2" + paygrade = PAY_SHORT_MO2 /datum/equipment_preset/uscm_event/dress/officer/capt name = "Dress Blues - (O-3) Captain" - paygrade = "MO3" + paygrade = PAY_SHORT_MO3 idtype = /obj/item/card/id/gold skills = /datum/skills/XO @@ -115,7 +115,7 @@ /datum/equipment_preset/uscm_event/dress/officer/co name = "Dress Blues - (O-4) Major" - paygrade = "MO4" + paygrade = PAY_SHORT_MO4 idtype = /obj/item/card/id/gold skills = /datum/skills/commander @@ -125,19 +125,19 @@ /datum/equipment_preset/uscm_event/dress/officer/co/ltcol name = "Dress Blues - (O-5) Lieutenant Colonel" - paygrade = "MO5" + paygrade = PAY_SHORT_MO5 idtype = /obj/item/card/id/gold/council /datum/equipment_preset/uscm_event/dress/officer/co/col name = "Dress Blues - (O-6) Colonel" - paygrade = "MO6" + paygrade = PAY_SHORT_MO6 idtype = /obj/item/card/id/general //GENERAL OFFICERS// /datum/equipment_preset/uscm_event/dress/officer/general name = "Dress Blues - (O-8) Major General" - paygrade = "MO8" + paygrade = PAY_SHORT_MO8 idtype = /obj/item/card/id/general skills = /datum/skills/general @@ -155,8 +155,8 @@ /datum/equipment_preset/uscm_event/dress/officer/general/ltgen name = "Dress Blues - (O-9) Lieutenant General" - paygrade = "MO9" + paygrade = PAY_SHORT_MO9 /datum/equipment_preset/uscm_event/dress/officer/general/gen name = "Dress Blues - (O-10) General" - paygrade = "MO10" + paygrade = PAY_SHORT_MO10 diff --git a/code/modules/gear_presets/uscm_event.dm b/code/modules/gear_presets/uscm_event.dm index 5f7c40c016e0..ce36f1fd807f 100644 --- a/code/modules/gear_presets/uscm_event.dm +++ b/code/modules/gear_presets/uscm_event.dm @@ -16,7 +16,7 @@ access = list(ACCESS_MARINE_MEDBAY, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE) assignment = JOB_COLONEL rank = JOB_COLONEL - paygrade = "MO6" + paygrade = PAY_SHORT_MO6 role_comm_title = "COL" minimum_age = 40 skills = /datum/skills/general @@ -61,7 +61,7 @@ access = list(ACCESS_MARINE_MEDBAY, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE) assignment = JOB_GENERAL rank = JOB_GENERAL - paygrade = "MO7" + paygrade = PAY_SHORT_MO7 role_comm_title = "GEN" minimum_age = 50 skills = /datum/skills/general @@ -102,30 +102,30 @@ /datum/equipment_preset/uscm_event/general/o7 name = "USCM O-7 - Brigadier General (High Command)" - paygrade = "MO7" + paygrade = PAY_SHORT_MO7 /datum/equipment_preset/uscm_event/general/o8 name = "USCM O-8 - Major General (High Command)" - paygrade = "MO8" + paygrade = PAY_SHORT_MO8 /datum/equipment_preset/uscm_event/general/o9 name = "USCM O-9 - Lieutenant General (High Command)" - paygrade = "MO9" + paygrade = PAY_SHORT_MO9 /datum/equipment_preset/uscm_event/general/o10 name = "USCM O-10 - General (High Command)" - paygrade = "MO10" + paygrade = PAY_SHORT_MO10 /datum/equipment_preset/uscm_event/general/o10c name = "USCM O-10C - Assistant Commandant of the Marine Corps (High Command)" - paygrade = "MO10C" + paygrade = PAY_SHORT_MO10C assignment = JOB_ACMC rank = JOB_ACMC role_comm_title = "ACMC" /datum/equipment_preset/uscm_event/general/o10s name = "USCM O-10S - Commandant of the Marine Corps (High Command)" - paygrade = "MO10S" + paygrade = PAY_SHORT_MO10S assignment = JOB_CMC rank = JOB_CMC role_comm_title = "CMC" @@ -145,7 +145,7 @@ ) assignment = JOB_ORDNANCE_TECH rank = "UPP" - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 role_comm_title = "OT" skills = /datum/skills/spy @@ -192,11 +192,11 @@ access = get_access(ACCESS_LIST_MARINE_ALL) /datum/equipment_preset/uscm_event/provost/enforcer - name = "Provost Enforcer (ME5)" + name = "Provost Enforcer" assignment = JOB_PROVOST_ENFORCER rank = "Provost Enforcer" - paygrade = "ME5" + paygrade = PAY_SHORT_CPO role_comm_title = "PvE" flags = EQUIPMENT_PRESET_EXTRA @@ -233,12 +233,12 @@ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/shotgun/combat(new_human), WEAR_J_STORE) /datum/equipment_preset/uscm_event/provost/tml - name = "Provost Team Leader (ME6)" + name = "Provost Team Leader" skills = /datum/skills/CMP assignment = JOB_PROVOST_TML rank = "Provost Team Leader" - paygrade = "ME6" + paygrade = PAY_SHORT_CSPO role_comm_title = "PvTML" flags = EQUIPMENT_PRESET_EXTRA @@ -276,11 +276,11 @@ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/shotgun/combat(new_human), WEAR_J_STORE) /datum/equipment_preset/uscm_event/provost/inspector - name = "Provost Inspector (PvI)" + name = "Provost Inspector" assignment = JOB_PROVOST_INSPECTOR rank = "Provost Inspector" - paygrade = "PvI" + paygrade = PAY_SHORT_PVI role_comm_title = "PvI" flags = EQUIPMENT_PRESET_EXTRA @@ -303,17 +303,20 @@ new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/taperecorder(new_human), WEAR_L_STORE) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large(new_human), WEAR_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/listening_bug/radio_linked/hc/pvst(new_human), WEAR_IN_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/listening_bug/radio_linked/hc/pvst(new_human), WEAR_IN_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/listening_bug/radio_linked/hc/pvst(new_human), WEAR_IN_R_STORE) new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/MP/provost/light/flexi(new_human.back), WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/flash(new_human), WEAR_IN_JACKET) new_human.equip_to_slot_or_del(new /obj/item/handcuffs(new_human), WEAR_IN_JACKET) /datum/equipment_preset/uscm_event/provost/inspector/advisor - name = "Provost Advisor (ME6)" + name = "Provost Advisor" assignment = JOB_PROVOST_ADVISOR rank = "Provost Advisor" - paygrade = "ME6" + paygrade = PAY_SHORT_CSPO role_comm_title = "PvA" flags = EQUIPMENT_PRESET_EXTRA @@ -324,8 +327,8 @@ assignment = JOB_PROVOST_MARSHAL rank = "Provost Marshal" - paygrade = "MO6" - role_comm_title = "PvM" + paygrade = PAY_SHORT_PVM + role_comm_title = PAY_SHORT_PVM flags = EQUIPMENT_PRESET_EXTRA /datum/equipment_preset/uscm_event/provost/marshal/load_gear(mob/living/carbon/human/new_human) @@ -355,8 +358,8 @@ assignment = JOB_PROVOST_SMARSHAL rank = "Provost Sector Marshal" - paygrade = "MO7" - role_comm_title = "PvSM" + paygrade = PAY_SHORT_PVSM + role_comm_title = PAY_SHORT_PVSM /datum/equipment_preset/uscm_event/provost/marshal/chief name = "Provost Chief Marshal (PvCM)" @@ -364,8 +367,8 @@ assignment = JOB_PROVOST_CMARSHAL rank = "Provost Chief Marshal" - paygrade = "PvCM" - role_comm_title = "PvCM" + paygrade = PAY_SHORT_PVCM + role_comm_title = PAY_SHORT_PVCM /*****************************************************************************************************/ @@ -386,7 +389,7 @@ assignment = JOB_TIS_IO rank = "UAAC-TIS Intelligence Officer" - paygrade = "NO2" + paygrade = PAY_SHORT_NO2 role_comm_title = "TIS-IO" flags = EQUIPMENT_PRESET_EXTRA @@ -413,7 +416,7 @@ assignment = JOB_TIS_SA rank = "UAAC-TIS Special Agent" - paygrade = "NO5" + paygrade = PAY_SHORT_NO5 role_comm_title = "TIS-SA" flags = EQUIPMENT_PRESET_EXTRA diff --git a/code/modules/gear_presets/uscm_medical.dm b/code/modules/gear_presets/uscm_medical.dm index 47d5ee19c9b4..be599755bacf 100644 --- a/code/modules/gear_presets/uscm_medical.dm +++ b/code/modules/gear_presets/uscm_medical.dm @@ -36,7 +36,7 @@ ) assignment = JOB_CMO rank = JOB_CMO - paygrade = "MO2" + paygrade = PAY_SHORT_MO2 role_comm_title = "CMO" skills = /datum/skills/CMO @@ -80,7 +80,7 @@ assignment = JOB_DOCTOR rank = JOB_DOCTOR - paygrade = "MO1" + paygrade = PAY_SHORT_MO1 role_comm_title = "Doc" skills = /datum/skills/doctor @@ -114,7 +114,7 @@ assignment = JOB_NURSE rank = JOB_NURSE - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 role_comm_title = "Nurse" skills = /datum/skills/nurse @@ -139,7 +139,7 @@ /datum/equipment_preset/uscm_ship/uscm_medical/nurse/load_rank(mob/living/carbon/human/new_human) if(new_human.client) if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1) - return "ME3" + return PAY_SHORT_ME3 return paygrade //*****************************************************************************************************/ @@ -149,7 +149,7 @@ access = list(ACCESS_MARINE_MEDBAY, ACCESS_MARINE_RESEARCH, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE) assignment = JOB_RESEARCHER rank = JOB_RESEARCHER - paygrade = "MO1" + paygrade = PAY_SHORT_MO1 role_comm_title = "Rsr" skills = /datum/skills/researcher diff --git a/code/modules/gear_presets/uscm_police.dm b/code/modules/gear_presets/uscm_police.dm index 0ead4f713c23..14e35d990348 100644 --- a/code/modules/gear_presets/uscm_police.dm +++ b/code/modules/gear_presets/uscm_police.dm @@ -27,7 +27,7 @@ ) assignment = JOB_POLICE rank = JOB_POLICE - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 role_comm_title = "MP" skills = /datum/skills/MP @@ -61,7 +61,7 @@ /datum/equipment_preset/uscm_ship/uscm_police/mp/load_rank(mob/living/carbon/human/human) if(human.client && get_job_playtime(human.client, rank) < JOB_PLAYTIME_TIER_1) - return "ME3" + return PAY_SHORT_ME3 return paygrade //*****************************************************************************************************/ @@ -90,7 +90,7 @@ ) assignment = JOB_WARDEN rank = JOB_WARDEN - paygrade = "ME6" + paygrade = PAY_SHORT_ME6 role_comm_title = "MW" skills = /datum/skills/MW @@ -151,7 +151,7 @@ ) assignment = JOB_CHIEF_POLICE rank = JOB_CHIEF_POLICE - paygrade = "MO2" + paygrade = PAY_SHORT_MO2 role_comm_title = "CMP" skills = /datum/skills/CMP @@ -195,7 +195,7 @@ access = list() assignment = JOB_RIOT rank = JOB_RIOT - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 role_comm_title = "RMP" skills = /datum/skills/CMP @@ -243,6 +243,6 @@ assignment = JOB_RIOT_CHIEF rank = JOB_RIOT_CHIEF - paygrade = "MO1" + paygrade = PAY_SHORT_MO1 role_comm_title = "CRMP" skills = /datum/skills/CMP diff --git a/code/modules/gear_presets/uscm_ship.dm b/code/modules/gear_presets/uscm_ship.dm index d34137a1c36b..b5ef13f35b2b 100644 --- a/code/modules/gear_presets/uscm_ship.dm +++ b/code/modules/gear_presets/uscm_ship.dm @@ -45,7 +45,7 @@ ) assignment = JOB_CORPORATE_LIAISON rank = JOB_CORPORATE_LIAISON - paygrade = "WYC2" + paygrade = PAY_SHORT_WYC2 role_comm_title = "CL" skills = /datum/skills/civilian @@ -89,11 +89,11 @@ var/playtime = get_job_playtime(new_human.client, rank) if(new_human.client.prefs.playtime_perks) if(playtime > JOB_PLAYTIME_TIER_4) - return "WYC5" + return PAY_SHORT_WYC5 else if(playtime > JOB_PLAYTIME_TIER_3) - return "WYC4" + return PAY_SHORT_WYC4 else if(playtime > JOB_PLAYTIME_TIER_2) - return "WYC3" + return PAY_SHORT_WYC3 else return paygrade return paygrade @@ -119,7 +119,7 @@ ) assignment = JOB_COMBAT_REPORTER rank = JOB_COMBAT_REPORTER - paygrade = "C" + paygrade = PAY_SHORT_CIV role_comm_title = "PRESS" skills = /datum/skills/civilian idtype = /obj/item/card/id/silver/cl @@ -151,7 +151,7 @@ ) assignment = JOB_COMBAT_REPORTER rank = JOB_COMBAT_REPORTER - paygrade = "ME4" + paygrade = PAY_SHORT_ME4 role_comm_title = "CC" skills = /datum/skills/pfc idtype = /obj/item/card/id/dogtag @@ -203,7 +203,7 @@ ) assignment = JOB_CHIEF_ENGINEER rank = JOB_CHIEF_ENGINEER - paygrade = "MO1" + paygrade = PAY_SHORT_MO1 role_comm_title = "CE" minimum_age = 27 skills = /datum/skills/CE @@ -239,7 +239,7 @@ ) assignment = JOB_MAINT_TECH rank = JOB_MAINT_TECH - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 role_comm_title = "MT" skills = /datum/skills/MT @@ -267,7 +267,7 @@ /datum/equipment_preset/uscm_ship/maint/load_rank(mob/living/carbon/human/new_human) if(new_human.client) if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1) - return "ME1" + return PAY_SHORT_ME1 return paygrade //*****************************************************************************************************/ @@ -285,7 +285,7 @@ ) assignment = JOB_ORDNANCE_TECH rank = JOB_ORDNANCE_TECH - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 role_comm_title = "OT" skills = /datum/skills/OT @@ -326,7 +326,7 @@ ) assignment = JOB_CHIEF_REQUISITION rank = JOB_CHIEF_REQUISITION - paygrade = "ME7" + paygrade = PAY_SHORT_ME7 role_comm_title = "QM" minimum_age = 27 skills = /datum/skills/RO @@ -359,7 +359,7 @@ access = list(ACCESS_MARINE_CARGO, ACCESS_MARINE_PREP) assignment = JOB_CARGO_TECH rank = JOB_CARGO_TECH - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 role_comm_title = "CT" skills = /datum/skills/CT @@ -384,7 +384,7 @@ /datum/equipment_preset/uscm_ship/cargo/load_rank(mob/living/carbon/human/new_human) if(new_human.client) if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1) - return "ME1" + return PAY_SHORT_ME1 return paygrade //*****************************************************************************************************/ @@ -396,7 +396,7 @@ idtype = /obj/item/card/id/gold assignment = JOB_CO rank = JOB_CO - paygrade = "MO4" + paygrade = PAY_SHORT_MO4 role_comm_title = "CO" minimum_age = 30 skills = /datum/skills/commander @@ -469,7 +469,7 @@ idtype = /obj/item/card/id/gold/council rank = JOB_CO - paygrade = "MO5" + paygrade = PAY_SHORT_MO5 role_comm_title = "CO" minimum_age = 35 @@ -488,7 +488,7 @@ /datum/equipment_preset/uscm_ship/commander/council/plus name = "USCM Commanding Officer (CO++)" idtype = /obj/item/card/id/general - paygrade = "MO6" + paygrade = PAY_SHORT_MO6 /datum/equipment_preset/uscm_ship/commander/council/plus/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/marine/commander/councilchief(new_human), WEAR_HEAD) @@ -503,7 +503,7 @@ idtype = /obj/item/card/id/silver assignment = JOB_XO rank = JOB_XO - paygrade = "MO3" + paygrade = PAY_SHORT_MO3 role_comm_title = "XO" minimum_age = 35 skills = /datum/skills/XO @@ -542,7 +542,7 @@ access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_DATABASE, ACCESS_MARINE_MEDBAY) assignment = JOB_SO rank = JOB_SO - paygrade = "MO1" + paygrade = PAY_SHORT_MO1 role_comm_title = "SO" minimum_age = 25 skills = /datum/skills/SO @@ -575,7 +575,7 @@ access assignment = JOB_SEA rank = JOB_SEA - paygrade = "ME7" + paygrade = PAY_SHORT_ME7 role_comm_title = "SEA" minimum_age = 40 skills = /datum/skills/SEA @@ -619,7 +619,7 @@ idtype = /obj/item/card/id/silver assignment = JOB_AUXILIARY_OFFICER rank = JOB_AUXILIARY_OFFICER - paygrade = "MO2" + paygrade = PAY_SHORT_MO2 role_comm_title = "ASO" minimum_age = 27 skills = /datum/skills/auxiliary_officer @@ -678,7 +678,7 @@ access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT) assignment = JOB_PILOT rank = JOB_PILOT - paygrade = "MO1" + paygrade = PAY_SHORT_MO1 role_comm_title = "DP" skills = /datum/skills/pilot @@ -728,7 +728,7 @@ access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT) assignment = JOB_DROPSHIP_CREW_CHIEF rank = JOB_DROPSHIP_CREW_CHIEF - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 role_comm_title = "DCC" skills = /datum/skills/crew_chief @@ -778,7 +778,7 @@ access = list(ACCESS_MARINE_MEDBAY, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE) assignment = "USCM Officer" rank = "USCM Officer" - paygrade = "MO3" + paygrade = PAY_SHORT_MO3 role_comm_title = "Cpt" minimum_age = 40 skills = /datum/skills/commander @@ -818,7 +818,7 @@ access = list(ACCESS_MARINE_KITCHEN) assignment = JOB_MESS_SERGEANT rank = JOB_MESS_SERGEANT - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 role_comm_title = "MST" skills = /datum/skills/mess_technician @@ -844,5 +844,5 @@ /datum/equipment_preset/uscm_ship/chef/load_rank(mob/living/carbon/human/new_human) if(new_human.client) if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1) - return "ME1" + return PAY_SHORT_ME1 return paygrade diff --git a/code/modules/gear_presets/whiteout.dm b/code/modules/gear_presets/whiteout.dm index dde564f93375..62b6d5db8008 100644 --- a/code/modules/gear_presets/whiteout.dm +++ b/code/modules/gear_presets/whiteout.dm @@ -1,5 +1,5 @@ /datum/equipment_preset/pmc/w_y_whiteout - name = "Whiteout Team Operative" + name = "Whiteout Team Operative (!DEATHSQUAD!)" flags = EQUIPMENT_PRESET_EXTRA uses_special_name = TRUE //We always use a codename! faction = FACTION_WY_DEATHSQUAD @@ -9,7 +9,7 @@ languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE, LANGUAGE_CHINESE, LANGUAGE_RUSSIAN, LANGUAGE_GERMAN, LANGUAGE_SPANISH, LANGUAGE_YAUTJA, LANGUAGE_XENOMORPH, LANGUAGE_TSL) //Synths after all. skills = /datum/skills/everything //They are Synths, programmed for Everything. idtype = /obj/item/card/id/pmc/ds - paygrade = "O" + paygrade = PAY_SHORT_OPR /datum/equipment_preset/pmc/w_y_whiteout/New() . = ..() @@ -27,9 +27,9 @@ //A.randomize_appearance(mob) var/random_name if(new_human.gender == MALE) - random_name = "[pick(greek_letters)]" + random_name = "[pick(GLOB.greek_letters)]" else - random_name = "[pick(greek_letters)]" + random_name = "[pick(GLOB.greek_letters)]" new_human.change_real_name(new_human, random_name) new_human.age = rand(17,45) @@ -130,7 +130,7 @@ //*****************************************************************************************************/ /datum/equipment_preset/pmc/w_y_whiteout/terminator - name = "Whiteout Team Terminator" + name = "Whiteout Team Terminator (!DEATHSQUAD!)" flags = EQUIPMENT_PRESET_EXTRA assignment = "Whiteout Team Terminator" role_comm_title = "WO-TT" @@ -170,7 +170,7 @@ //*****************************************************************************************************/ /datum/equipment_preset/pmc/w_y_whiteout/leader - name = "Whiteout Team Leader" + name = "Whiteout Team Leader (!DEATHSQUAD!)" flags = EQUIPMENT_PRESET_EXTRA assignment = "Whiteout Team Leader" role_comm_title = "WO-TL" @@ -216,3 +216,182 @@ var/obj/item/device/internal_implant/agility/implant = new() implant.on_implanted(new_human) + +//*****************************************************************************************************/ + +/datum/equipment_preset/pmc/w_y_whiteout/low_threat + name = "Whiteout Team Operative" + +/datum/equipment_preset/pmc/w_y_whiteout/low_threat/load_gear(mob/living/carbon/human/new_human) + // back + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/commando, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/stack/nanopaste, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/synth, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank, WEAR_IN_BACK) + + + //face + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/m42_night_goggles/m42c, WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/leader, WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/commando, WEAR_L_EAR) + //head + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc/commando, WEAR_HEAD) + //uniform + var/obj/item/clothing/under/marine/veteran/pmc/commando/uniform = new() + var/obj/item/clothing/accessory/storage/webbing/accessory = new() + uniform.attach_accessory(new_human, accessory) + new_human.equip_to_slot_or_del(uniform, WEAR_BODY) + for(var/i in 1 to accessory.hold.storage_slots) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/pmc, WEAR_IN_ACCESSORY) + //jacket + var/obj/item/clothing/suit/storage/marine/veteran/pmc/commando/armor = new() + new_human.equip_to_slot_or_del(armor, WEAR_JACKET) + for(var/i in 1 to armor.storage_slots) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/ap, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/m41a/elite, WEAR_J_STORE) + //waist + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/flamer/deathsquad/standard, WEAR_WAIST) + //limbs + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/pmc/commando, WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/veteran/pmc/commando/knife, WEAR_FEET) + //pockets + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/magazine/large/pmc_rifle, WEAR_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/magazine/large/pmc_rifle, WEAR_L_STORE) + + var/obj/item/device/internal_implant/agility/implant = new() + implant.on_implanted(new_human) + +//*****************************************************************************************************/ + +/datum/equipment_preset/pmc/w_y_whiteout/low_threat/medic + name = "Whiteout Team Medic" + +/datum/equipment_preset/pmc/w_y_whiteout/low_threat/medic/load_gear(mob/living/carbon/human/new_human) + // back + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/commando, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/synth, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/synth, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/synth, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/synth, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/healthanalyzer, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator/upgraded, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/roller, WEAR_IN_BACK) + //face + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/medhud, WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/leader, WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/commando, WEAR_L_EAR) + //head + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc/commando, WEAR_HEAD) + //uniform + var/obj/item/clothing/under/marine/veteran/pmc/commando/uniform = new() + var/obj/item/clothing/accessory/storage/webbing/accessory = new() + uniform.attach_accessory(new_human, accessory) + new_human.equip_to_slot_or_del(uniform, WEAR_BODY) + for(var/i in 1 to accessory.hold.storage_slots) + new_human.equip_to_slot_or_del(new /obj/item/stack/nanopaste, WEAR_IN_ACCESSORY) + //jacket + var/obj/item/clothing/suit/storage/marine/veteran/pmc/commando/armor = new() + new_human.equip_to_slot_or_del(armor, WEAR_JACKET) + for(var/i in 1 to armor.storage_slots) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/m39/ap, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smg/m39/elite, WEAR_J_STORE) + //waist + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/flamer/deathsquad/standard, WEAR_WAIST) + //limbs + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/pmc/commando, WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/veteran/pmc/commando/knife, WEAR_FEET) + //pockets + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/magazine/large/pmc_m39, WEAR_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/magazine/large/pmc_m39, WEAR_R_STORE) + + var/obj/item/device/internal_implant/agility/implant = new() + implant.on_implanted(new_human) + +/datum/equipment_preset/pmc/w_y_whiteout/low_threat/terminator + name = "Whiteout Team Terminator" + +/datum/equipment_preset/pmc/w_y_whiteout/low_threat/terminator/load_gear(mob/living/carbon/human/new_human) + //face + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/leader, WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/commando, WEAR_L_EAR) + //head + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc/commando, WEAR_HEAD) + //uniform + var/obj/item/clothing/under/marine/veteran/pmc/commando/uniform = new() + var/obj/item/clothing/accessory/storage/webbing/accessory = new() + uniform.attach_accessory(new_human, accessory) + new_human.equip_to_slot_or_del(uniform, WEAR_BODY) + for(var/i in 1 to accessory.hold.storage_slots) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/pmc, WEAR_IN_ACCESSORY) + //jacket + var/obj/item/clothing/suit/storage/marine/smartgunner/veteran/pmc/terminator/armor = new() + new_human.equip_to_slot_or_del(armor, WEAR_JACKET) + for(var/i in 1 to armor.storage_slots) + new_human.equip_to_slot_or_del(new /obj/item/stack/nanopaste, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smartgun/dirty, WEAR_J_STORE) + //waist + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/smartgunner/pmc/full, WEAR_WAIST) + //limbs + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/pmc/commando, WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/veteran/pmc/commando/knife, WEAR_FEET) + //pockets + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/magazine/large/pmc_sg, WEAR_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/magazine/large/pmc_sg, WEAR_L_STORE) + + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/m56_goggles/whiteout, WEAR_EYES) + + var/obj/item/device/internal_implant/agility/implant = new() + implant.on_implanted(new_human) + +//*****************************************************************************************************/ +/datum/equipment_preset/pmc/w_y_whiteout/low_threat/leader + name = "Whiteout Team Leader" + +/datum/equipment_preset/pmc/w_y_whiteout/low_threat/leader/load_gear(mob/living/carbon/human/new_human) + // back + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/commando, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/stack/nanopaste, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/stack/nanopaste, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/synth, WEAR_IN_BACK) + //face + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/m42_night_goggles/m42c, WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/leader, WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/commando, WEAR_L_EAR) + //head + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc/commando, WEAR_HEAD) + //uniform + var/obj/item/clothing/under/marine/veteran/pmc/commando/uniform = new() + var/obj/item/clothing/accessory/storage/webbing/accessory = new() + uniform.attach_accessory(new_human, accessory) + new_human.equip_to_slot_or_del(uniform, WEAR_BODY) + for(var/i in 1 to accessory.hold.storage_slots) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/pmc, WEAR_IN_ACCESSORY) + //jacket + var/obj/item/clothing/suit/storage/marine/veteran/pmc/commando/armor = new() + new_human.equip_to_slot_or_del(armor, WEAR_JACKET) + for(var/i in 1 to armor.storage_slots) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/ap, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/m41a/elite, WEAR_J_STORE) + //waist + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/mateba/full, WEAR_WAIST) + //limbs + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/pmc/commando, WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/veteran/pmc/commando/knife, WEAR_FEET) + //pockets + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/magazine/large/pmc_rifle, WEAR_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/magazine/large/pmc_rifle, WEAR_R_STORE) + + var/obj/item/device/internal_implant/agility/implant = new() + implant.on_implanted(new_human) diff --git a/code/modules/gear_presets/wo.dm b/code/modules/gear_presets/wo.dm index acc795dc6882..884b865bce11 100644 --- a/code/modules/gear_presets/wo.dm +++ b/code/modules/gear_presets/wo.dm @@ -17,7 +17,7 @@ assignment = JOB_WO_CO rank = JOB_WO_CO - paygrade = "MO2" + paygrade = PAY_SHORT_MO2 role_comm_title = "CDR" skills = /datum/skills/commander idtype = /obj/item/card/id/gold @@ -96,7 +96,7 @@ assignment = JOB_WO_XO rank = JOB_WO_XO - paygrade = "MO1" + paygrade = PAY_SHORT_MO1 role_comm_title = "LCDR" skills = /datum/skills/XO idtype = /obj/item/card/id/silver @@ -140,7 +140,7 @@ access = list(ACCESS_MARINE_BRIG, ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_DATABASE, ACCESS_MARINE_PREP, ACCESS_MARINE_CMP, ACCESS_MARINE_MEDBAY) assignment = JOB_WO_CHIEF_POLICE rank = JOB_WO_CHIEF_POLICE - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 role_comm_title = "HGSL" skills = /datum/skills/honor_guard/lead idtype = /obj/item/card/id/silver @@ -176,7 +176,7 @@ access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_BRIG, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_DATABASE) assignment = JOB_WO_SO rank = JOB_WO_SO - paygrade = "ME4" + paygrade = PAY_SHORT_ME4 role_comm_title = "VHG" skills = /datum/skills/honor_guard/vet idtype = /obj/item/card/id/silver @@ -218,7 +218,7 @@ access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_DATABASE) assignment = JOB_WO_CREWMAN rank = JOB_WO_CREWMAN - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "HGS" skills = /datum/skills/honor_guard/spec idtype = /obj/item/card/id/gold @@ -258,7 +258,7 @@ access = list(ACCESS_MARINE_BRIG, ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_DATABASE, ACCESS_MARINE_PREP, ACCESS_MARINE_MEDBAY) assignment = JOB_WO_POLICE rank = JOB_WO_POLICE - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 role_comm_title = "HG" skills = /datum/skills/honor_guard @@ -292,7 +292,7 @@ access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT) assignment = JOB_WO_PILOT rank = JOB_WO_PILOT - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "MC" skills = /datum/skills/mortar_crew @@ -327,7 +327,7 @@ access = list(ACCESS_MARINE_CARGO, ACCESS_MARINE_RO, ACCESS_MARINE_COMMAND) assignment = JOB_WO_CHIEF_REQUISITION rank = JOB_WO_CHIEF_REQUISITION - paygrade = "ME8" + paygrade = PAY_SHORT_ME8 role_comm_title = "QM" skills = /datum/skills/RO idtype = /obj/item/card/id/silver @@ -357,7 +357,7 @@ access = list(ACCESS_MARINE_ENGINEERING, ACCESS_CIVILIAN_ENGINEERING, ACCESS_MARINE_CARGO) assignment = JOB_WO_REQUISITION rank = JOB_WO_REQUISITION - paygrade = "ME4" + paygrade = PAY_SHORT_ME4 role_comm_title = "BCL" skills = /datum/skills/CE idtype = /obj/item/card/id @@ -389,7 +389,7 @@ access = list(ACCESS_MARINE_CMO, ACCESS_MARINE_MEDBAY, ACCESS_MARINE_RESEARCH, ACCESS_MARINE_COMMAND, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE) assignment = JOB_WO_CMO rank = JOB_WO_CMO - paygrade = "CCMO" + paygrade = PAY_SHORT_CCMO role_comm_title = "HS" skills = /datum/skills/CMO idtype = /obj/item/card/id/silver @@ -432,7 +432,7 @@ access = list(ACCESS_MARINE_MEDBAY, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE) assignment = JOB_WO_DOCTOR rank = JOB_WO_DOCTOR - paygrade = "CD" + paygrade = PAY_SHORT_CDOC role_comm_title = "Doc" skills = /datum/skills/doctor idtype = /obj/item/card/id @@ -472,7 +472,7 @@ access = list(ACCESS_MARINE_MEDBAY, ACCESS_MARINE_RESEARCH, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE) assignment = JOB_WO_RESEARCHER rank = JOB_WO_RESEARCHER - paygrade = "CD" + paygrade = PAY_SHORT_CDOC role_comm_title = "Chem" skills = /datum/skills/researcher idtype = /obj/item/card/id @@ -512,7 +512,7 @@ access = list(ACCESS_MARINE_CE, ACCESS_MARINE_ENGINEERING, ACCESS_MARINE_COMMAND, ACCESS_CIVILIAN_ENGINEERING, ACCESS_MARINE_DATABASE) assignment = JOB_WO_CHIEF_ENGINEER rank = JOB_WO_CHIEF_ENGINEER - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 role_comm_title = "BCM" skills = /datum/skills/CE idtype = /obj/item/card/id/silver @@ -546,7 +546,7 @@ access = list(ACCESS_MARINE_CE, ACCESS_MARINE_ENGINEERING, ACCESS_MARINE_COMMAND, ACCESS_CIVILIAN_ENGINEERING) assignment = JOB_WO_ORDNANCE_TECH rank = JOB_WO_ORDNANCE_TECH - paygrade = "ME4" + paygrade = PAY_SHORT_ME4 role_comm_title = "BC" skills = /datum/skills/OT idtype = /obj/item/card/id @@ -579,7 +579,7 @@ assignment = JOB_WO_CORPORATE_LIAISON rank = JOB_WO_CORPORATE_LIAISON - paygrade = "WYC2" + paygrade = PAY_SHORT_WYC2 role_comm_title = "PRESS" skills = /datum/skills/civilian idtype = /obj/item/card/id/silver/cl @@ -623,7 +623,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP) assignment = JOB_SQUAD_LEADER rank = JOB_SQUAD_LEADER - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 role_comm_title = "SL" skills = /datum/skills/SL @@ -658,7 +658,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SPECPREP) assignment = JOB_SQUAD_SPECIALIST rank = JOB_SQUAD_SPECIALIST - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "Spc" skills = /datum/skills/specialist @@ -693,7 +693,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SMARTPREP) assignment = JOB_SQUAD_SMARTGUN rank = JOB_SQUAD_SMARTGUN - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "SG" skills = /datum/skills/smartgunner @@ -717,7 +717,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_ENGPREP, ACCESS_CIVILIAN_ENGINEERING) assignment = JOB_SQUAD_ENGI rank = JOB_SQUAD_ENGI - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "ComTech" skills = /datum/skills/combat_engineer @@ -751,7 +751,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_MEDBAY) assignment = JOB_SQUAD_MEDIC rank = JOB_SQUAD_MEDIC - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "HM" skills = /datum/skills/combat_medic @@ -789,7 +789,7 @@ access = list(ACCESS_MARINE_PREP) assignment = JOB_SQUAD_MARINE rank = JOB_SQUAD_MARINE - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 role_comm_title = "RFN" skills = /datum/skills/pfc diff --git a/code/modules/gear_presets/wy.dm b/code/modules/gear_presets/wy.dm index d5b5194401bd..0b63c76b59d0 100644 --- a/code/modules/gear_presets/wy.dm +++ b/code/modules/gear_presets/wy.dm @@ -1,6 +1,6 @@ /datum/equipment_preset/wy name = "WY" - paygrade = "WYC1" + paygrade = PAY_SHORT_WYC1 faction = FACTION_WY rank = FACTION_WY @@ -29,7 +29,7 @@ flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_TRAINEE rank = JOB_TRAINEE - paygrade = "WYC1" + paygrade = PAY_SHORT_WYC1 /datum/equipment_preset/wy/trainee/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/trainee(new_human), WEAR_BODY) @@ -40,35 +40,35 @@ flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_JUNIOR_EXECUTIVE rank = JOB_JUNIOR_EXECUTIVE - paygrade = "WYC2" + paygrade = PAY_SHORT_WYC2 /datum/equipment_preset/wy/exec name = "Corporate - C - Executive" flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_EXECUTIVE rank = JOB_EXECUTIVE - paygrade = "WYC3" + paygrade = PAY_SHORT_WYC3 /datum/equipment_preset/wy/senior_exec name = "Corporate - D - Senior Executive" flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_SENIOR_EXECUTIVE rank = JOB_SENIOR_EXECUTIVE - paygrade = "WYC4" + paygrade = PAY_SHORT_WYC4 /datum/equipment_preset/wy/exec_spec name = "Corporate - E - Executive Specialist" flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_EXECUTIVE_SPECIALIST rank = JOB_EXECUTIVE_SPECIALIST - paygrade = "WYC5" + paygrade = PAY_SHORT_WYC5 /datum/equipment_preset/wy/exec_supervisor name = "Corporate - F - Executive Supervisor" flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_EXECUTIVE_SUPERVISOR rank = JOB_EXECUTIVE_SUPERVISOR - paygrade = "WYC6" + paygrade = PAY_SHORT_WYC6 /datum/equipment_preset/wy/manager skills = /datum/skills/civilian/manager @@ -91,21 +91,21 @@ flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_ASSISTANT_MANAGER rank = JOB_ASSISTANT_MANAGER - paygrade = "WYC7" + paygrade = PAY_SHORT_WYC7 /datum/equipment_preset/wy/manager/division_manager name = "Corporate - H - Division Manager" flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_DIVISION_MANAGER rank = JOB_DIVISION_MANAGER - paygrade = "WYC8" + paygrade = PAY_SHORT_WYC8 /datum/equipment_preset/wy/manager/chief_executive name = "Corporate - I - Chief Executive" flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_CHIEF_EXECUTIVE rank = JOB_CHIEF_EXECUTIVE - paygrade = "WYC9" + paygrade = PAY_SHORT_WYC9 /datum/equipment_preset/wy/manager/chief_executive/New() . = ..() @@ -116,7 +116,7 @@ flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_DIRECTOR rank = JOB_DIRECTOR - paygrade = "WYC10" + paygrade = PAY_SHORT_WYC10 skills = /datum/skills/civilian/manager/director headset_type = /obj/item/device/radio/headset/distress/pmc/command/director diff --git a/code/modules/gear_presets/wy_goons.dm b/code/modules/gear_presets/wy_goons.dm index 5160f0bf319a..a7c0dad679ee 100644 --- a/code/modules/gear_presets/wy_goons.dm +++ b/code/modules/gear_presets/wy_goons.dm @@ -22,11 +22,11 @@ var/last_name //gender checks if(new_human.gender == MALE) - first_name = "[pick(first_names_male_pmc)]" + first_name = "[pick(GLOB.first_names_male_pmc)]" new_human.f_style = pick("3 O'clock Shadow", "3 O'clock Moustache", "5 O'clock Shadow", "5 O'clock Moustache") else - first_name = "[pick(first_names_female_pmc)]" - last_name = "[pick(last_names_pmc)]" + first_name = "[pick(GLOB.first_names_female_pmc)]" + last_name = "[pick(GLOB.last_names_pmc)]" random_name = "[first_name] [last_name]" new_human.change_real_name(new_human, random_name) @@ -61,7 +61,7 @@ assignment = JOB_WY_GOON rank = JOB_WY_GOON - paygrade = "WEY-GOON" + paygrade = PAY_SHORT_CPO skills = /datum/skills/MP /datum/equipment_preset/goon/standard/load_gear(mob/living/carbon/human/new_human) @@ -94,7 +94,7 @@ assignment = JOB_WY_GOON_LEAD rank = JOB_WY_GOON_LEAD - paygrade = "WEY-GOON-L" + paygrade = PAY_SHORT_CSPO skills = /datum/skills/MP /datum/equipment_preset/goon/lead/New() @@ -130,7 +130,7 @@ assignment = JOB_WY_GOON_RESEARCHER rank = JOB_WY_GOON_RESEARCHER - paygrade = "CCMO" + paygrade = PAY_SHORT_CCMO skills = /datum/skills/researcher /datum/equipment_preset/goon/researcher/load_gear(mob/living/carbon/human/new_human) diff --git a/code/modules/holidays/halloween/decorators.dm b/code/modules/holidays/halloween/decorators.dm index b25d6ff6b957..6575ed5ba665 100644 --- a/code/modules/holidays/halloween/decorators.dm +++ b/code/modules/holidays/halloween/decorators.dm @@ -90,7 +90,7 @@ // Skip this if this corner is result of a door connection (mostly for Almayer shutters) var/valid = TRUE - for(var/a_cardinal in cardinal) + for(var/a_cardinal in GLOB.cardinals) var/cardinal_dir = diag & a_cardinal if(!a_cardinal) // We check cardinals contributing to that diagonal continue diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm index 38ff3ea26528..e47ad43acaf1 100644 --- a/code/modules/hydroponics/grown_inedible.dm +++ b/code/modules/hydroponics/grown_inedible.dm @@ -15,7 +15,7 @@ // Fill the object up with the appropriate reagents. if(!isnull(plantname)) - var/datum/seed/S = seed_types[plantname] + var/datum/seed/S = GLOB.seed_types[plantname] if(!S || !S.chems) return diff --git a/code/modules/hydroponics/hydro_tools.dm b/code/modules/hydroponics/hydro_tools.dm index cc4ef0daf7f3..b7e3d8bb84c5 100644 --- a/code/modules/hydroponics/hydro_tools.dm +++ b/code/modules/hydroponics/hydro_tools.dm @@ -19,11 +19,11 @@ return ..() else if(istype(target,/obj/item/reagent_container/food/snacks/grown)) var/obj/item/reagent_container/food/snacks/grown/G = target - grown_seed = seed_types[G.plantname] + grown_seed = GLOB.seed_types[G.plantname] grown_reagents = G.reagents else if(istype(target,/obj/item/grown)) var/obj/item/grown/G = target - grown_seed = seed_types[G.plantname] + grown_seed = GLOB.seed_types[G.plantname] grown_reagents = G.reagents else if(istype(target,/obj/item/seeds)) var/obj/item/seeds/S = target diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index 4d175c5a6f1f..d3a086d96e04 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -426,7 +426,7 @@ //Remove the seed if something is already planted. if(seed) seed = null - seed = seed_types[pick(list("mushrooms","plumphelmet","harebells","poppies","grass","weeds"))] + seed = GLOB.seed_types[pick(list("mushrooms","plumphelmet","harebells","poppies","grass","weeds"))] if(!seed) return //Weed does not exist, someone fucked up. dead = 0 @@ -456,7 +456,7 @@ // We need to make sure we're not modifying one of the global seed datums. // If it's not in the global list, then no products of the line have been // harvested yet and it's safe to assume it's restricted to this tray. - if(!isnull(seed_types[seed.name])) + if(!isnull(GLOB.seed_types[seed.name])) seed = seed.diverge() seed.mutate(severity,get_turf(src)) @@ -481,8 +481,8 @@ var/previous_plant = seed.display_name var/newseed = seed.get_mutant_variant() - if(newseed in seed_types) - seed = seed_types[newseed] + if(newseed in GLOB.seed_types) + seed = GLOB.seed_types[newseed] else return diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 2aff95eb1fcc..04339f77c9bc 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -1,5 +1,5 @@ -var/global/list/seed_types = list() // A list of all seed data. -var/global/list/gene_tag_masks = list() // Gene obfuscation for delicious trial and error goodness. +GLOBAL_LIST_EMPTY(seed_types) // A list of all seed data. +GLOBAL_LIST_EMPTY(gene_tag_masks) // Gene obfuscation for delicious trial and error goodness. // Debug for testing seed genes. /client/proc/show_plant_genes() @@ -9,12 +9,12 @@ var/global/list/gene_tag_masks = list() // Gene obfuscation for delicious tria if(!admin_holder) return - if(!gene_tag_masks) + if(!GLOB.gene_tag_masks) to_chat(usr, "Gene masks not set.") return - for(var/mask in gene_tag_masks) - to_chat(usr, "[mask]: [gene_tag_masks[mask]]") + for(var/mask in GLOB.gene_tag_masks) + to_chat(usr, "[mask]: [GLOB.gene_tag_masks[mask]]") // Predefined/roundstart varieties use a string key to make it // easier to grab the new variety when mutating. Post-roundstart @@ -26,8 +26,8 @@ var/global/list/gene_tag_masks = list() // Gene obfuscation for delicious tria // Populate the global seed datum list. for(var/type in typesof(/datum/seed)-/datum/seed) var/datum/seed/S = new type - seed_types[S.name] = S - S.uid = "[seed_types.len]" + GLOB.seed_types[S.name] = S + S.uid = "[GLOB.seed_types.len]" S.roundstart = 1 // Make sure any seed packets that were mapped in are updated @@ -54,7 +54,7 @@ var/global/list/gene_tag_masks = list() // Gene obfuscation for delicious tria used_masks += gene_mask gene_tags -= gene_tag - gene_tag_masks[gene_tag] = gene_mask + GLOB.gene_tag_masks[gene_tag] = gene_mask /datum/plantgene var/genetype // Label used when applying trait. @@ -379,12 +379,12 @@ var/global/list/gene_tag_masks = list() // Gene obfuscation for delicious tria else source_turf.visible_message(SPAN_NOTICE("\The [display_name]'s flowers wither and fall off.")) else //New chems! (20% chance) - var/new_chem = list(pick( prob(10);pick(chemical_gen_classes_list["C1"]),\ - prob(15);pick(chemical_gen_classes_list["C2"]),\ - prob(25);pick(chemical_gen_classes_list["C3"]),\ - prob(30);pick(chemical_gen_classes_list["C4"]),\ - prob(15);pick(chemical_gen_classes_list["T1"]),\ - prob(5);pick(chemical_gen_classes_list["T2"])) = list(1,rand(1,2))) + var/new_chem = list(pick( prob(10);pick(GLOB.chemical_gen_classes_list["C1"]),\ + prob(15);pick(GLOB.chemical_gen_classes_list["C2"]),\ + prob(25);pick(GLOB.chemical_gen_classes_list["C3"]),\ + prob(30);pick(GLOB.chemical_gen_classes_list["C4"]),\ + prob(15);pick(GLOB.chemical_gen_classes_list["T1"]),\ + prob(5);pick(GLOB.chemical_gen_classes_list["T2"])) = list(1,rand(1,2))) chems += new_chem @@ -580,10 +580,10 @@ var/global/list/gene_tag_masks = list() // Gene obfuscation for delicious tria to_chat(user, "You [harvest_sample ? "take a sample" : "harvest"] from the [display_name].") //This may be a new line. Update the global if it is. - if(name == "new line" || !(name in seed_types)) - uid = seed_types.len + 1 + if(name == "new line" || !(name in GLOB.seed_types)) + uid = GLOB.seed_types.len + 1 name = "[uid]" - seed_types[name] = src + GLOB.seed_types[name] = src if(harvest_sample) var/obj/item/seeds/seeds = new(get_turf(user)) diff --git a/code/modules/hydroponics/seed_machines/seed_editor.dm b/code/modules/hydroponics/seed_machines/seed_editor.dm index 2e89a9c7fb10..37e25fb3508a 100644 --- a/code/modules/hydroponics/seed_machines/seed_editor.dm +++ b/code/modules/hydroponics/seed_machines/seed_editor.dm @@ -21,7 +21,7 @@ data["sourceName"] = loaded_disk.genesource for(var/datum/plantgene/P in loaded_disk.genes) - locus.Add("[gene_tag_masks[P.genetype]]") + locus.Add("[GLOB.gene_tag_masks[P.genetype]]") data["locus"] = locus else @@ -56,7 +56,7 @@ if(!loaded_disk || !seed) return - if(!isnull(seed_types[seed.seed.name])) + if(!isnull(GLOB.seed_types[seed.seed.name])) seed.seed = seed.seed.diverge(1) seed.seed_type = seed.seed.name seed.update_seed() diff --git a/code/modules/hydroponics/seed_machines/seed_extractor.dm b/code/modules/hydroponics/seed_machines/seed_extractor.dm index 4f8867596c76..58d11e7990fc 100644 --- a/code/modules/hydroponics/seed_machines/seed_extractor.dm +++ b/code/modules/hydroponics/seed_machines/seed_extractor.dm @@ -16,10 +16,10 @@ var/list/data = list() var/list/geneMasks = list() - for(var/gene_tag in gene_tag_masks) + for(var/gene_tag in GLOB.gene_tag_masks) var/list/genedata = list(list( "tag" = gene_tag, - "mask" = gene_tag_masks[gene_tag] + "mask" = GLOB.gene_tag_masks[gene_tag] )) geneMasks += genedata @@ -89,8 +89,8 @@ if(!genetics.roundstart) loaded_disk.genesource += " (variety #[genetics.uid])" - loaded_disk.name += " ([gene_tag_masks[params["gene"]]], #[genetics.uid])" - loaded_disk.desc += " The label reads \'gene [gene_tag_masks[params["gene"]]], sampled from [genetics.display_name]\'." + loaded_disk.name += " ([GLOB.gene_tag_masks[params["gene"]]], #[genetics.uid])" + loaded_disk.desc += " The label reads \'gene [GLOB.gene_tag_masks[params["gene"]]], sampled from [genetics.display_name]\'." playsound(loc, 'sound/machines/fax.ogg', 15, 1) eject_disk() diff --git a/code/modules/hydroponics/seed_machines/seed_machines.dm b/code/modules/hydroponics/seed_machines/seed_machines.dm index 501118465ecf..ad3fbed4625f 100644 --- a/code/modules/hydroponics/seed_machines/seed_machines.dm +++ b/code/modules/hydroponics/seed_machines/seed_machines.dm @@ -30,10 +30,10 @@ return seed.forceMove(get_turf(src)) - if(seed.seed.name == "new line" || isnull(seed_types[seed.seed.name])) - seed.seed.uid = seed_types.len + 1 + if(seed.seed.name == "new line" || isnull(GLOB.seed_types[seed.seed.name])) + seed.seed.uid = GLOB.seed_types.len + 1 seed.seed.name = "[seed.seed.uid]" - seed_types[seed.seed.name] = seed.seed + GLOB.seed_types[seed.seed.name] = seed.seed seed.update_seed() playsound(src, 'sound/machines/terminal_eject.ogg', 25, TRUE) diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index ca203dcc1ada..1895389abb07 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -50,8 +50,8 @@ //Grabs the appropriate seed datum from the global list. /obj/item/seeds/proc/update_seed() - if(!seed && seed_type && !isnull(seed_types) && seed_types[seed_type]) - seed = seed_types[seed_type] + if(!seed && seed_type && !isnull(GLOB.seed_types) && GLOB.seed_types[seed_type]) + seed = GLOB.seed_types[seed_type] update_appearance() //Updates strings and icon appropriately based on seed datum. diff --git a/code/modules/hydroponics/vines.dm b/code/modules/hydroponics/vines.dm index 0b7987e82bad..bfca73e8d01b 100644 --- a/code/modules/hydroponics/vines.dm +++ b/code/modules/hydroponics/vines.dm @@ -192,7 +192,7 @@ overlays += flower_overlay /obj/effect/plantsegment/proc/spread() - var/direction = pick(cardinal) + var/direction = pick(GLOB.cardinals) var/step = get_step(src,direction) if(istype(step,/turf/open/floor)) var/turf/open/floor/F = step diff --git a/code/modules/keybindings/setup.dm b/code/modules/keybindings/setup.dm index 703649808f70..9ba1b783a11d 100644 --- a/code/modules/keybindings/setup.dm +++ b/code/modules/keybindings/setup.dm @@ -15,7 +15,7 @@ for(var/k in 1 to length(macro_set)) var/list/split_name = splittext(macro_set[k], ".") - if(findtext(split_name[2], "srvkeybinds-") == 1) + if((length(split_name) >= 2) && (findtext(split_name[2], "srvkeybinds-") == 1)) var/macro_name = "[split_name[1]].[split_name[2]]" // [3] is "command" erase_output = "[erase_output];[macro_name].parent=null" winset(src, null, erase_output) diff --git a/code/modules/maptext_alerts/screen_alerts.dm b/code/modules/maptext_alerts/screen_alerts.dm index a983f24465c5..b096d3b3718f 100644 --- a/code/modules/maptext_alerts/screen_alerts.dm +++ b/code/modules/maptext_alerts/screen_alerts.dm @@ -249,6 +249,10 @@ ghost_user.do_observe(target) if(NOTIFY_JOIN_XENO) ghost_user.join_as_alien() + if(NOTIFY_USCM_TACMAP) + GLOB.uscm_tacmap_status.tgui_interact(ghost_user) + if(NOTIFY_XENO_TACMAP) + GLOB.xeno_tacmap_status.tgui_interact(ghost_user) /atom/movable/screen/alert/buckled name = "Buckled" diff --git a/code/modules/maptext_alerts/text_blurbs.dm b/code/modules/maptext_alerts/text_blurbs.dm index c942543f88df..297b02aff3a3 100644 --- a/code/modules/maptext_alerts/text_blurbs.dm +++ b/code/modules/maptext_alerts/text_blurbs.dm @@ -5,7 +5,7 @@ set waitfor = 0 var/areaname = replacetext(A.name, "\improper", "") //The \improper flickers "ÿ" briefly - var/text = "[worldtime2text("hhmm")], [time2text(REALTIMEOFDAY, "DD-MMM-[game_year]")]\n[station_name], [areaname]" + var/text = "[worldtime2text("hhmm")], [time2text(REALTIMEOFDAY, "DD-MMM-[GLOB.game_year]")]\n[MAIN_SHIP_NAME], [areaname]" show_blurb(targets, duration, text, TRUE) @@ -14,13 +14,13 @@ exempt_ztraits = trait or list of traits of zlevels where any marines don't see shouldn't see the ship marines' drop message. Ex. ZTRAIT_GROUND by default. unit = the unit the marines are from. FF, Dust Raiders etc. Military crew see this. base = the base the marines are staging from. The ship, Whiskey Outpost etc. Noncombat crew see this.**/ -/proc/show_blurb_uscm(list/exempt_ztraits = ZTRAIT_GROUND, unit = "2nd Bat. 'Falling Falcons'", base = station_name) +/proc/show_blurb_uscm(list/exempt_ztraits = ZTRAIT_GROUND, unit = "2nd Bat. 'Falling Falcons'", base = MAIN_SHIP_NAME) if(!islist(exempt_ztraits)) exempt_ztraits = list(exempt_ztraits) var/list/exempt_zlevels = SSmapping.levels_by_any_trait(exempt_ztraits) - var/base_text = "[uppertext(round_statistics.round_name)]\n\ - [worldtime2text("hhmm hrs")], [uppertext(time2text(REALTIMEOFDAY, "DD-MMM-[game_year]"))]\n\ + var/base_text = "[uppertext(GLOB.round_statistics.round_name)]\n\ + [worldtime2text("hhmm hrs")], [uppertext(time2text(REALTIMEOFDAY, "DD-MMM-[GLOB.game_year]"))]\n\ [SSmapping.configs[GROUND_MAP].map_name]" var/list/post_text = list("combat" = "\n[unit]", diff --git a/code/modules/mob/camera/imaginary_friend.dm b/code/modules/mob/camera/imaginary_friend.dm index 0be51ede324a..4e7be80056de 100644 --- a/code/modules/mob/camera/imaginary_friend.dm +++ b/code/modules/mob/camera/imaginary_friend.dm @@ -150,21 +150,21 @@ var/datum/mob_hud/hud switch(hud_choice) if("Medical HUD") - hud = huds[MOB_HUD_MEDICAL_OBSERVER] + hud = GLOB.huds[MOB_HUD_MEDICAL_OBSERVER] if("Security HUD") - hud = huds[MOB_HUD_SECURITY_ADVANCED] + hud = GLOB.huds[MOB_HUD_SECURITY_ADVANCED] if("Squad HUD") - hud = huds[MOB_HUD_FACTION_OBSERVER] + hud = GLOB.huds[MOB_HUD_FACTION_OBSERVER] if("Xeno Status HUD") - hud = huds[MOB_HUD_XENO_STATUS] + hud = GLOB.huds[MOB_HUD_XENO_STATUS] if("Faction UPP HUD") - hud = huds[MOB_HUD_FACTION_UPP] + hud = GLOB.huds[MOB_HUD_FACTION_UPP] if("Faction Wey-Yu HUD") - hud = huds[MOB_HUD_FACTION_WY] + hud = GLOB.huds[MOB_HUD_FACTION_WY] if("Faction TWE HUD") - hud = huds[MOB_HUD_FACTION_TWE] + hud = GLOB.huds[MOB_HUD_FACTION_TWE] if("Faction CLF HUD") - hud = huds[MOB_HUD_FACTION_CLF] + hud = GLOB.huds[MOB_HUD_FACTION_CLF] if(hud_choice in current_huds) hud.remove_hud_from(src, src) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 76204dce5857..430f959a7718 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -119,7 +119,7 @@ forceMove(spawn_turf) if(!name) //To prevent nameless ghosts - name = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) + name = capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) if(name == "Unknown") if(body) name = body.real_name @@ -250,7 +250,7 @@ RegisterSignal(observe_target_client, COMSIG_CLIENT_SCREEN_REMOVE, PROC_REF(observe_target_screen_remove)) ///makes the ghost see the target hud and sets the eye at the target. -/mob/dead/observer/proc/do_observe(mob/target) +/mob/dead/observer/proc/do_observe(atom/movable/target) if(!client || !target || !istype(target)) return @@ -259,24 +259,23 @@ if(!ishuman(target) || !client.prefs?.auto_observe) return + var/mob/living/carbon/human/human_target = target - client.eye = target + client.eye = human_target - if(!target.hud_used) + if(!human_target.hud_used) return client.clear_screen() - LAZYINITLIST(target.observers) - target.observers |= src - target.hud_used.show_hud(target.hud_used.hud_version, src) - - var/mob/living/carbon/human/human_target = target + LAZYINITLIST(human_target.observers) + human_target.observers |= src + human_target.hud_used.show_hud(human_target.hud_used.hud_version, src) var/list/target_contents = human_target.get_contents() //Handles any currently open storage containers the target is looking in when we observe for(var/obj/item/storage/checked_storage in target_contents) - if(!(target in checked_storage.content_watchers)) + if(!(human_target in checked_storage.content_watchers)) continue client.add_to_screen(checked_storage.closer) @@ -291,7 +290,7 @@ break - observe_target_mob = target + observe_target_mob = human_target RegisterSignal(observe_target_mob, COMSIG_PARENT_QDELETING, PROC_REF(clean_observe_target)) RegisterSignal(observe_target_mob, COMSIG_MOB_GHOSTIZE, PROC_REF(observe_target_ghosting)) RegisterSignal(observe_target_mob, COMSIG_MOB_NEW_MIND, PROC_REF(observe_target_new_mind)) @@ -299,8 +298,8 @@ RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(observer_move_react)) - if(target.client) - observe_target_client = target.client + if(human_target.client) + observe_target_client = human_target.client RegisterSignal(observe_target_client, COMSIG_CLIENT_SCREEN_ADD, PROC_REF(observe_target_screen_add)) RegisterSignal(observe_target_client, COMSIG_CLIENT_SCREEN_REMOVE, PROC_REF(observe_target_screen_remove)) return @@ -380,6 +379,10 @@ handle_joining_as_freed_mob(locate(href_list["claim_freed"])) if(href_list["join_xeno"]) join_as_alien() + if(href_list[NOTIFY_USCM_TACMAP]) + GLOB.uscm_tacmap_status.tgui_interact(src) + if(href_list[NOTIFY_XENO_TACMAP]) + GLOB.xeno_tacmap_status.tgui_interact(src) /mob/dead/observer/proc/set_huds_from_prefs() if(!client || !client.prefs) @@ -391,28 +394,28 @@ if(HUD_toggled[i]) switch(i) if("Medical HUD") - H = huds[MOB_HUD_MEDICAL_OBSERVER] + H = GLOB.huds[MOB_HUD_MEDICAL_OBSERVER] H.add_hud_to(src, src) if("Security HUD") - H = huds[MOB_HUD_SECURITY_ADVANCED] + H = GLOB.huds[MOB_HUD_SECURITY_ADVANCED] H.add_hud_to(src, src) if("Squad HUD") - H = huds[MOB_HUD_FACTION_OBSERVER] + H = GLOB.huds[MOB_HUD_FACTION_OBSERVER] H.add_hud_to(src, src) if("Xeno Status HUD") - H = huds[MOB_HUD_XENO_STATUS] + H = GLOB.huds[MOB_HUD_XENO_STATUS] H.add_hud_to(src, src) if("Faction UPP HUD") - H = huds[MOB_HUD_FACTION_UPP] + H = GLOB.huds[MOB_HUD_FACTION_UPP] H.add_hud_to(src, src) if("Faction Wey-Yu HUD") - H = huds[MOB_HUD_FACTION_WY] + H = GLOB.huds[MOB_HUD_FACTION_WY] H.add_hud_to(src, src) if("Faction TWE HUD") - H = huds[MOB_HUD_FACTION_TWE] + H = GLOB.huds[MOB_HUD_FACTION_TWE] H.add_hud_to(src, src) if("Faction CLF HUD") - H = huds[MOB_HUD_FACTION_CLF] + H = GLOB.huds[MOB_HUD_FACTION_CLF] H.add_hud_to(src, src) see_invisible = INVISIBILITY_OBSERVER @@ -471,20 +474,20 @@ Works together with spawning an observer, noted above. if(!can_reenter_corpse) away_timer = 300 //They'll never come back, so we can max out the timer right away. - if(round_statistics) - round_statistics.update_panel_data() + if(GLOB.round_statistics) + GLOB.round_statistics.update_panel_data() track_death_calculations() //This needs to be done before mind is nullified if(ghost.mind) ghost.mind.original = ghost else if(ghost.mind && ghost.mind.player_entity) //Use else here because track_death_calculations() already calls this. - ghost.mind.player_entity.update_panel_data(round_statistics) + ghost.mind.player_entity.update_panel_data(GLOB.round_statistics) ghost.mind.original = src mind = null if(ghost.client) ghost.client.init_verbs() - ghost.client.change_view(world_view_size) //reset view range to default + ghost.client.change_view(GLOB.world_view_size) //reset view range to default ghost.client.pixel_x = 0 //recenters our view ghost.client.pixel_y = 0 ghost.set_lighting_alpha_from_pref(ghost.client) @@ -521,7 +524,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/living/proc/do_ghost() if(stat == DEAD) if(mind && mind.player_entity) - mind.player_entity.update_panel_data(round_statistics) + mind.player_entity.update_panel_data(GLOB.round_statistics) ghostize(TRUE) else var/list/options = list("Ghost", "Stay in body") @@ -755,12 +758,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!tx || !ty || !tz) return following = null - spawn(0) - // To stop the ghost flickering. - x = tx - y = ty - z = tz - sleep(15) + forceMove(locate(tx, ty, tz)) /mob/dead/observer/verb/dead_teleport_mob() //Moves the ghost instead of just changing the ghosts's eye -Nodrak set category = "Ghost" @@ -828,8 +826,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp set category = "Ghost.Settings" if(client) - if(client.view != world_view_size) - client.change_view(world_view_size) + if(client.view != GLOB.world_view_size) + client.change_view(GLOB.world_view_size) else client.change_view(14) @@ -901,6 +899,23 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp GLOB.hive_datum[hives[faction]].hive_ui.open_hive_status(src) +/mob/dead/observer/verb/view_uscm_tacmap() + set name = "View USCM Tacmap" + set category = "Ghost.View" + + GLOB.uscm_tacmap_status.tgui_interact(src) + +/mob/dead/observer/verb/view_xeno_tacmap() + set name = "View Xeno Tacmap" + set category = "Ghost.View" + + var/datum/hive_status/hive = GLOB.hive_datum[XENO_HIVE_NORMAL] + if(!hive || !length(hive.totalXenos)) + to_chat(src, SPAN_ALERT("There seems to be no living normal hive at the moment")) + return + + GLOB.xeno_tacmap_status.tgui_interact(src) + /mob/dead/verb/join_as_alien() set category = "Ghost.Join" set name = "Join as Xeno" @@ -1129,7 +1144,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp to_chat(src, SPAN_INFO("Wrong game mode. You have to be observing a Hunter Games round.")) return - if(!waiting_for_drop_votes) + var/datum/game_mode/huntergames/mode = SSticker.mode + + if(!mode.waiting_for_drop_votes) to_chat(src, SPAN_INFO("There's no drop vote currently in progress. Wait for a supply drop to be announced!")) return @@ -1173,8 +1190,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp set name = "View Kill Feed" set desc = "View global kill statistics tied to the game." - if(round_statistics) - round_statistics.show_kill_feed(src) + if(GLOB.round_statistics) + GLOB.round_statistics.show_kill_feed(src) /mob/dead/observer/get_status_tab_items() . = ..() @@ -1262,7 +1279,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!key_to_use) return - if(!(RoleAuthority.roles_whitelist[key_to_use] & WHITELIST_PREDATOR)) + if(!(GLOB.RoleAuthority.roles_whitelist[key_to_use] & WHITELIST_PREDATOR)) return if(!SSticker.mode) diff --git a/code/modules/mob/dead/observer/orbit.dm b/code/modules/mob/dead/observer/orbit.dm index 06e404a43555..5fe27c5e5167 100644 --- a/code/modules/mob/dead/observer/orbit.dm +++ b/code/modules/mob/dead/observer/orbit.dm @@ -65,7 +65,7 @@ var/is_admin = FALSE if(user && user.client) - is_admin = check_other_rights(user.client, R_ADMIN, FALSE) + is_admin = check_client_rights(user.client, R_ADMIN, FALSE) var/list/pois = getpois(skip_mindless = !is_admin, specify_dead_role = FALSE) for(var/name in pois) var/list/serialized = list() diff --git a/code/modules/mob/dead/observer/say.dm b/code/modules/mob/dead/observer/say.dm index 33af36991e17..b9a972bda5c2 100644 --- a/code/modules/mob/dead/observer/say.dm +++ b/code/modules/mob/dead/observer/say.dm @@ -21,7 +21,7 @@ if(!client) return - if(speaker && !speaker.client && client.prefs.toggles_chat & CHAT_GHOSTEARS && speaker.z == z && get_dist(speaker, src) <= world_view_size) + if(speaker && !speaker.client && client.prefs.toggles_chat & CHAT_GHOSTEARS && speaker.z == z && get_dist(speaker, src) <= GLOB.world_view_size) //Does the speaker have a client? It's either random stuff that observers won't care about (Experiment 97B says, 'EHEHEHEHEHEHEHE') //Or someone snoring. So we make it where they won't hear it. return @@ -52,10 +52,10 @@ var/mob/hologram/queen/queen_eye = speaker?.client?.eye if(istype(queen_eye)) track += "(E) " - if(client && client.prefs && client.prefs.toggles_chat & CHAT_GHOSTEARS && speaker.z == z && get_dist(speaker, src) <= world_view_size) + if(client && client.prefs && client.prefs.toggles_chat & CHAT_GHOSTEARS && speaker.z == z && get_dist(speaker, src) <= GLOB.world_view_size) message = "[message]" to_chat(src, "[comm_paygrade][speaker_name][alt_name] [track][verb], \"[message]\"") - if (speech_sound && (get_dist(speaker, src) <= world_view_size && src.z == speaker.z)) + if (speech_sound && (get_dist(speaker, src) <= GLOB.world_view_size && src.z == speaker.z)) var/turf/source = speaker? get_turf(speaker) : get_turf(src) playsound_client(client, speech_sound, source, sound_vol) diff --git a/code/modules/mob/death.dm b/code/modules/mob/death.dm index 115e78fa7f58..8aea59b96a81 100644 --- a/code/modules/mob/death.dm +++ b/code/modules/mob/death.dm @@ -61,7 +61,7 @@ jitteriness = 0 if(client) - client.change_view(world_view_size) //just so we never get stuck with a large view somehow + client.change_view(GLOB.world_view_size) //just so we never get stuck with a large view somehow if(s_active) //Close inventory screens. s_active.storage_close(src) diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index ca5639c36cd0..c66d096c6c68 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -12,7 +12,7 @@ //non-verbal languages are garbled if you can't see the speaker. Yes, this includes if they are inside a closet. if (language && (language.flags & NONVERBAL)) - if (!speaker || (src.sdisabilities & DISABILITY_BLIND || src.blinded) || !(speaker.z == z && get_dist(speaker, src) <= world_view_size)) + if (!speaker || (src.sdisabilities & DISABILITY_BLIND || src.blinded) || !(speaker.z == z && get_dist(speaker, src) <= GLOB.world_view_size)) message = language.scramble(message) if(!say_understands(speaker,language)) @@ -47,7 +47,7 @@ to_chat(src, SPAN_LOCALSAY("[comm_paygrade][speaker_name][alt_name] talks but you cannot hear them.")) else to_chat(src, SPAN_LOCALSAY("[comm_paygrade][speaker_name][alt_name] [verb], \"[message]\"")) - if (speech_sound && (get_dist(speaker, src) <= world_view_size && src.z == speaker.z)) + if (speech_sound && (get_dist(speaker, src) <= GLOB.world_view_size && src.z == speaker.z)) var/turf/source = speaker? get_turf(speaker) : get_turf(src) playsound_client(src.client, speech_sound, source, sound_vol, GET_RANDOM_FREQ) diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index ab3ce823c68e..dea179e6ad48 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -2,80 +2,6 @@ BLOOD SYSTEM */ -/mob/living/proc/handle_blood() - return - -// Takes care blood loss and regeneration -/mob/living/carbon/human/handle_blood() - if(NO_BLOOD in species.flags) - return - - if(stat != DEAD && bodytemperature >= 170) //Dead or cryosleep people do not pump the blood. - //Blood regeneration if there is some space - if(blood_volume < max_blood && nutrition >= 1) - blood_volume += 0.1 // regenerate blood VERY slowly - nutrition -= 0.25 - else if(blood_volume > max_blood) - blood_volume -= 0.1 // The reverse in case we've gotten too much blood in our body - if(blood_volume > limit_blood) - blood_volume = limit_blood // This should never happen, but lets make sure - - var/b_volume = blood_volume - - // Damaged heart virtually reduces the blood volume, as the blood isn't - // being pumped properly anymore. - if(species && species.has_organ["heart"]) - var/datum/internal_organ/heart/heart = internal_organs_by_name["heart"] - if(!heart) - b_volume = 0 - else if(chem_effect_flags & CHEM_EFFECT_ORGAN_STASIS) - b_volume *= 1 - else if(heart.damage >= heart.organ_status >= ORGAN_BRUISED) - b_volume *= Clamp(100 - (2 * heart.damage), 30, 100) / 100 - - //Effects of bloodloss - if(b_volume <= BLOOD_VOLUME_SAFE) - /// The blood volume turned into a %, with BLOOD_VOLUME_NORMAL being 100% - var/blood_percentage = b_volume / (BLOOD_VOLUME_NORMAL / 100) - /// How much oxyloss will there be from the next time blood processes - var/additional_oxyloss = (100 - blood_percentage) / 5 - /// The limit of the oxyloss gained, ignoring oxyloss from the switch statement - var/maximum_oxyloss = Clamp((100 - blood_percentage) / 2, oxyloss, 100) - if(oxyloss < maximum_oxyloss) - oxyloss += round(max(additional_oxyloss, 0)) - - switch(b_volume) - if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE) - if(prob(1)) - var/word = pick("dizzy","woozy","faint") - to_chat(src, SPAN_DANGER("You feel [word].")) - if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) - if(eye_blurry < 50) - AdjustEyeBlur(6) - oxyloss += 3 - if(prob(15)) - apply_effect(rand(1,3), PARALYZE) - var/word = pick("dizzy","woozy","faint") - to_chat(src, SPAN_DANGER("You feel very [word].")) - if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD) - if(eye_blurry < 50) - AdjustEyeBlur(6) - oxyloss += 8 - toxloss += 3 - if(prob(15)) - apply_effect(rand(1,3), PARALYZE) - var/word = pick("dizzy","woozy","faint") - to_chat(src, SPAN_DANGER("You feel extremely [word].")) - if(0 to BLOOD_VOLUME_SURVIVE) - death(create_cause_data("blood loss")) - -// Xeno blood regeneration -/mob/living/carbon/xenomorph/handle_blood() - if(stat != DEAD) //Only living xenos regenerate blood - //Blood regeneration if there is some space - if(blood_volume < max_blood) - blood_volume = min(blood_volume + 1, max_blood) - //Makes a blood drop, leaking amt units of blood from the mob /mob/living/carbon/proc/drip(amt) if(!blood_volume) @@ -91,7 +17,7 @@ /mob/living/carbon/human/drip(amt) if(in_stasis) // stasis now stops bloodloss return - if(NO_BLOOD in species.flags) + if((species.flags & NO_BLOOD) && !(species.flags & IS_SYNTHETIC)) return ..() @@ -272,7 +198,7 @@ return "xenoblood" /mob/living/carbon/human/get_blood_id() - if((NO_BLOOD in species.flags)) + if(species.flags & NO_BLOOD) return if(special_blood) return special_blood diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm index 3861a0126be4..bcb709e2f402 100644 --- a/code/modules/mob/living/brain/MMI.dm +++ b/code/modules/mob/living/brain/MMI.dm @@ -134,6 +134,7 @@ to_chat(brainmob, SPAN_NOTICE(" Radio is [radio.listening==1 ? "now" : "no longer"] receiving broadcast. ")) /obj/item/device/mmi/emp_act(severity) + . = ..() if(!brainmob) return else @@ -144,4 +145,3 @@ brainmob.emp_damage += rand(10,20) if(3) brainmob.emp_damage += rand(0,10) - ..() diff --git a/code/modules/mob/living/brain/brain.dm b/code/modules/mob/living/brain/brain.dm index d9480fab4c49..b815fe4e3621 100644 --- a/code/modules/mob/living/brain/brain.dm +++ b/code/modules/mob/living/brain/brain.dm @@ -67,5 +67,5 @@ set desc = "Relinquish your sentience and visit the land of the past." if(mind && mind.player_entity) - mind.player_entity.update_panel_data(round_statistics) + mind.player_entity.update_panel_data(GLOB.round_statistics) ghostize(TRUE) diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index c8925239c33b..4f1b4f193275 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -67,4 +67,4 @@ brainmob.mind.transfer_to(target) else target.key = brainmob.key - if(target.client) target.client.change_view(world_view_size) + if(target.client) target.client.change_view(GLOB.world_view_size) diff --git a/code/modules/mob/living/brain/life.dm b/code/modules/mob/living/brain/life.dm index 2c9c99736867..7f84b6466144 100644 --- a/code/modules/mob/living/brain/life.dm +++ b/code/modules/mob/living/brain/life.dm @@ -182,17 +182,3 @@ reset_view(null) return 1 - - -/*/mob/living/brain/emp_act(severity) - if(!(container && istype(container, /obj/item/device/mmi))) - return - else - switch(severity) - if(1) - emp_damage += rand(20,30) - if(2) - emp_damage += rand(10,20) - if(3) - emp_damage += rand(0,10) - ..()*/ diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index ca06bfece88f..b63ce0174a22 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -260,11 +260,7 @@ /mob/living/carbon/proc/help_shake_act(mob/living/carbon/M) if(src == M) return - var/t_him = "them" - if(gender == MALE) - t_him = "him" - else if(gender == FEMALE) - t_him = "her" + var/t_him = p_them() var/shake_action if(stat == DEAD || HAS_TRAIT(src, TRAIT_INCAPACITATED) || sleeping) // incap implies also unconscious or knockedout diff --git a/code/modules/mob/living/carbon/carbon_helpers.dm b/code/modules/mob/living/carbon/carbon_helpers.dm index 92d049b977bc..4d3c7b9144b6 100644 --- a/code/modules/mob/living/carbon/carbon_helpers.dm +++ b/code/modules/mob/living/carbon/carbon_helpers.dm @@ -18,7 +18,7 @@ var/view_rating = view_change_sources[view_source] if(highest_view < view_rating) highest_view = view_rating - if(source && new_size != world_view_size) + if(source && new_size != GLOB.world_view_size) LAZYSET(view_change_sources, source, new_size) if(new_size < highest_view) new_size = highest_view diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 19810893694a..5890a44f4168 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -82,8 +82,8 @@ last_living_human = null break last_living_human = cur_human - if(last_living_human && (last_qm_callout + 2 MINUTES) < world.time) - last_qm_callout = world.time + if(last_living_human && (GLOB.last_qm_callout + 2 MINUTES) < world.time) + GLOB.last_qm_callout = world.time // Tell the xenos where the human is. xeno_announcement("I sense the last tallhost hiding in [get_area(last_living_human)].", XENO_HIVE_NORMAL, SPAN_ANNOUNCEMENT_HEADER_BLUE("[QUEEN_MOTHER_ANNOUNCE]")) // Tell the human he is the last guy. diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 6e99ca1e5a15..62fbd1da09fa 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -5,6 +5,10 @@ if(user.sdisabilities & DISABILITY_BLIND || user.blinded || user.stat==UNCONSCIOUS) return list(SPAN_NOTICE("Something is there but you can't see it.")) + var/mob/dead/observer/observer + if(isobserver(user)) + observer = user + if(isxeno(user)) var/msg = "This is " @@ -435,7 +439,7 @@ for(var/implant in get_visible_implants()) msg += SPAN_WARNING("[t_He] has \a [implant] sticking out of [t_his] flesh!\n") - if(hasHUD(user,"security")) + if(hasHUD(user,"security") || (observer && observer.HUD_toggled["Security HUD"])) var/perpref @@ -450,9 +454,17 @@ if(R.fields["id"] == E.fields["id"]) criminal = R.fields["criminal"] - msg += "Criminal status: \[[criminal]\]\n" - msg += "Security records: \[View\] \[Add comment\]\n" + msg += "Criminal status:" + if(!observer) + msg += "\[[criminal]\]\n" + else + msg += "\[[criminal]\]\n" + msg += "Security records: \[View\]" + if(!observer) + msg += " \[Add comment\]\n" + else + msg += "\n" if(hasHUD(user,"medical")) var/cardcolor = holo_card_color if(!cardcolor) cardcolor = "none" @@ -520,16 +532,16 @@ switch(hudtype) if("security") if(skillcheck(passed_human, SKILL_POLICE, SKILL_POLICE_SKILLED)) - var/datum/mob_hud/sec_hud = huds[MOB_HUD_SECURITY_ADVANCED] + var/datum/mob_hud/sec_hud = GLOB.huds[MOB_HUD_SECURITY_ADVANCED] if(locate(passed_mob) in sec_hud.hudusers) return TRUE if("medical") if(skillcheck(passed_human, SKILL_MEDICAL, SKILL_MEDICAL_MEDIC)) - var/datum/mob_hud/med_hud = huds[MOB_HUD_MEDICAL_ADVANCED] + var/datum/mob_hud/med_hud = GLOB.huds[MOB_HUD_MEDICAL_ADVANCED] if(locate(passed_mob) in med_hud.hudusers) return TRUE if("squadleader") - var/datum/mob_hud/faction_hud = huds[MOB_HUD_FACTION_USCM] + var/datum/mob_hud/faction_hud = GLOB.huds[MOB_HUD_FACTION_USCM] if(passed_human.mind && passed_human.assigned_squad && passed_human.assigned_squad.squad_leader == passed_human && locate(passed_mob) in faction_hud.hudusers) return TRUE else diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 5268aec6d0ca..b523cef08eec 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -106,7 +106,7 @@ . += "Primary LZ: [SSticker.mode.active_lz.loc.loc.name]" if(faction == FACTION_MARINE & !isnull(SSticker) && !isnull(SSticker.mode)) - . += "Operation Name: [round_statistics.round_name]" + . += "Operation Name: [GLOB.round_statistics.round_name]" if(assigned_squad) if(assigned_squad.overwatch_officer) @@ -115,7 +115,9 @@ . += "Primary Objective: [html_decode(assigned_squad.primary_objective)]" if(assigned_squad.secondary_objective) . += "Secondary Objective: [html_decode(assigned_squad.secondary_objective)]" - + if(faction == FACTION_MARINE) + . += "" + . += "View Tactical Map" if(mobility_aura) . += "Active Order: MOVE" if(protection_aura) @@ -613,7 +615,7 @@ to_chat(usr, SPAN_DANGER("Unable to locate a data core entry for this person.")) if(href_list["secrecord"]) - if(hasHUD(usr,"security")) + if(hasHUD(usr,"security") || isobserver(usr)) var/perpref = null var/read = 0 @@ -625,7 +627,7 @@ if(E.fields["ref"] == perpref) for(var/datum/data/record/R in GLOB.data_core.security) if(R.fields["id"] == E.fields["id"]) - if(hasHUD(usr,"security")) + if(hasHUD(usr,"security") || isobserver(usr)) to_chat(usr, "Name: [R.fields["name"]] Criminal Status: [R.fields["criminal"]]") to_chat(usr, "Incidents: [R.fields["incident"]]") to_chat(usr, "\[View Comment Log\]") @@ -634,7 +636,7 @@ if(!read) to_chat(usr, SPAN_DANGER("Unable to locate a data core entry for this person.")) - if(href_list["secrecordComment"] && hasHUD(usr,"security")) + if(href_list["secrecordComment"] && (hasHUD(usr,"security") || isobserver(usr))) var/perpref = null if(wear_id) var/obj/item/card/id/ID = wear_id.GetID() @@ -663,7 +665,8 @@ continue comment_markup += text("Comment deleted by [] at []
    ", comment["deleted_by"], comment["deleted_at"]) to_chat(usr, comment_markup) - to_chat(usr, "\[Add comment\]
    ") + if(!isobserver(usr)) + to_chat(usr, "\[Add comment\]
    ") if(!read) to_chat(usr, SPAN_DANGER("Unable to locate a data core entry for this person.")) @@ -685,7 +688,7 @@ var/t1 = copytext(trim(strip_html(input("Your name and time will be added to this new comment.", "Add a comment", null, null) as message)), 1, MAX_MESSAGE_LEN) if(!(t1) || usr.stat || usr.is_mob_restrained()) return - var/created_at = text("[]  []  []", time2text(world.realtime, "MMM DD"), time2text(world.time, "[worldtime2text()]:ss"), game_year) + var/created_at = text("[]  []  []", time2text(world.realtime, "MMM DD"), time2text(world.time, "[worldtime2text()]:ss"), GLOB.game_year) var/new_comment = list("entry" = t1, "created_by" = list("name" = "", "rank" = ""), "deleted_by" = null, "deleted_at" = null, "created_at" = created_at) if(istype(usr,/mob/living/carbon/human)) var/mob/living/carbon/human/U = usr @@ -814,10 +817,10 @@ counter++ if(istype(usr,/mob/living/carbon/human)) var/mob/living/carbon/human/U = usr - R.fields[text("com_[counter]")] = text("Made by [U.get_authentification_name()] ([U.get_assignment()]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [game_year]
    [t1]") + R.fields[text("com_[counter]")] = text("Made by [U.get_authentification_name()] ([U.get_assignment()]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [GLOB.game_year]
    [t1]") if(istype(usr,/mob/living/silicon/robot)) var/mob/living/silicon/robot/U = usr - R.fields[text("com_[counter]")] = text("Made by [U.name] ([U.modtype] [U.braintype]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [game_year]
    [t1]") + R.fields[text("com_[counter]")] = text("Made by [U.name] ([U.modtype] [U.braintype]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [GLOB.game_year]
    [t1]") if(href_list["medholocard"]) if(!skillcheck(usr, SKILL_MEDICAL, SKILL_MEDICAL_MEDIC)) @@ -1095,9 +1098,9 @@ for(var/datum/effects/bleeding/internal/internal_bleed in effects_list) msg += "They have bloating and discoloration on their [internal_bleed.limb.display_name]\n" - if(knocked_out && stat != DEAD) + if(stat == UNCONSCIOUS) msg += "They seem to be unconscious\n" - if(stat == DEAD) + else if(stat == DEAD) if(src.check_tod() && is_revivable()) msg += "They're not breathing" else @@ -1328,7 +1331,7 @@ else if(C.z != src.z || get_dist(src,C) < 1) hud_used.locate_leader.icon_state = "trackondirect_lz" else - hud_used.locate_leader.setDir(get_dir(src,C)) + hud_used.locate_leader.setDir(Get_Compass_Dir(src,C)) hud_used.locate_leader.icon_state = "trackon_lz" return if(TRACKER_FTL) @@ -1343,13 +1346,13 @@ H = GLOB.marine_leaders[JOB_XO] tracking_suffix = "_xo" if(TRACKER_CL) - var/datum/job/civilian/liaison/liaison_job = RoleAuthority.roles_for_mode[JOB_CORPORATE_LIAISON] + var/datum/job/civilian/liaison/liaison_job = GLOB.RoleAuthority.roles_for_mode[JOB_CORPORATE_LIAISON] if(liaison_job?.active_liaison) H = liaison_job.active_liaison tracking_suffix = "_cl" else if(tracker_setting in squad_leader_trackers) - var/datum/squad/S = RoleAuthority.squads_by_type[squad_leader_trackers[tracker_setting]] + var/datum/squad/S = GLOB.RoleAuthority.squads_by_type[squad_leader_trackers[tracker_setting]] H = S.squad_leader tracking_suffix = tracker_setting @@ -1358,11 +1361,11 @@ if(H.z != src.z || get_dist(src,H) < 1 || src == H) hud_used.locate_leader.icon_state = "trackondirect[tracking_suffix]" else - hud_used.locate_leader.setDir(get_dir(src,H)) + hud_used.locate_leader.setDir(Get_Compass_Dir(src,H)) hud_used.locate_leader.icon_state = "trackon[tracking_suffix]" /mob/living/carbon/proc/locate_nearest_nuke() - if(!bomb_set) return + if(!GLOB.bomb_set) return var/obj/structure/machinery/nuclearbomb/N for(var/obj/structure/machinery/nuclearbomb/bomb in world) if(!istype(N) || N.z != src.z ) @@ -1376,7 +1379,7 @@ if(get_dist(src,N) < 1) hud_used.locate_nuke.icon_state = "nuke_trackondirect" else - hud_used.locate_nuke.setDir(get_dir(src,N)) + hud_used.locate_nuke.setDir(Get_Compass_Dir(src,N)) hud_used.locate_nuke.icon_state = "nuke_trackon" @@ -1739,3 +1742,9 @@ return FALSE . = ..() + +/mob/living/carbon/human/make_dizzy(amount) + dizziness = min(500, dizziness + amount) // store what will be new value + // clamped to max 500 + if(dizziness > 100 && !is_dizzy) + INVOKE_ASYNC(src, PROC_REF(dizzy_process)) diff --git a/code/modules/mob/living/carbon/human/human_abilities.dm b/code/modules/mob/living/carbon/human/human_abilities.dm index 2af2d738bc5b..a568e93df5c0 100644 --- a/code/modules/mob/living/carbon/human/human_abilities.dm +++ b/code/modules/mob/living/carbon/human/human_abilities.dm @@ -556,7 +556,7 @@ CULT H.cancel_camera() H.reset_view() - H.client.change_view(world_view_size, target) + H.client.change_view(GLOB.world_view_size, target) H.client.pixel_x = 0 H.client.pixel_y = 0 @@ -588,7 +588,7 @@ CULT remove_from(H) H.unset_interaction() - H.client.change_view(world_view_size, target) + H.client.change_view(GLOB.world_view_size, target) H.client.pixel_x = 0 H.client.pixel_y = 0 H.reset_view() diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 2bb113d67739..8af760a3c780 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -155,13 +155,15 @@ return held_weapon.afterattack(target,src) var/disarm_chance = rand(1, 100) - var/attacker_skill_level = skills && attacking_mob.skills ? skills.get_skill_level(SKILL_CQC) : SKILL_CQC_MAX // No skills, so assume max + var/attacker_skill_level = attacking_mob.skills ? attacking_mob.skills.get_skill_level(SKILL_CQC) : SKILL_CQC_MAX // No skills, so assume max var/defender_skill_level = skills ? skills.get_skill_level(SKILL_CQC) : SKILL_CQC_MAX // No skills, so assume max disarm_chance -= 5 * attacker_skill_level disarm_chance += 5 * defender_skill_level if(disarm_chance <= 25) - apply_effect(2 + max((attacker_skill_level - defender_skill_level), 0), WEAKEN) + var/strength = 2 + max((attacker_skill_level - defender_skill_level), 0) + KnockDown(strength) + Stun(strength) playsound(loc, 'sound/weapons/thudswoosh.ogg', 25, 1, 7) var/shove_text = attacker_skill_level > 1 ? "tackled" : pick("pushed", "shoved") visible_message(SPAN_DANGER("[attacking_mob] has [shove_text] [src]!"), null, null, 5) @@ -205,15 +207,14 @@ if (w_uniform) w_uniform.add_fingerprint(M) - - if(body_position == LYING_DOWN || sleeping) + if(HAS_TRAIT(src, TRAIT_FLOORED) || HAS_TRAIT(src, TRAIT_KNOCKEDOUT) || body_position == LYING_DOWN || sleeping) if(client) sleeping = max(0,src.sleeping-5) if(!sleeping) set_resting(FALSE) M.visible_message(SPAN_NOTICE("[M] shakes [src] trying to wake [t_him] up!"), \ SPAN_NOTICE("You shake [src] trying to wake [t_him] up!"), null, 4) - else if(stunned) + else if(HAS_TRAIT(src, TRAIT_INCAPACITATED)) M.visible_message(SPAN_NOTICE("[M] shakes [src], trying to shake [t_him] out of his stupor!"), \ SPAN_NOTICE("You shake [src], trying to shake [t_him] out of his stupor!"), null, 4) else diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 00b64338b0b8..cebbbd6086bb 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -371,7 +371,7 @@ This function restores all limbs. /mob/living/carbon/human/get_limb(zone) RETURN_TYPE(/obj/limb) zone = check_zone(zone) - return (locate(limb_types_by_name[zone]) in limbs) + return (locate(GLOB.limb_types_by_name[zone]) in limbs) /mob/living/carbon/human/apply_armoured_damage(damage = 0, armour_type = ARMOR_MELEE, damage_type = BRUTE, def_zone = null, penetration = 0, armour_break_pr_pen = 0, armour_break_flat = 0) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index ede57d64241b..4e4d65e485ef 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -44,7 +44,7 @@ Contains most of the procs that are called when a mob is attacked by something //If you don't specify a bodypart, it checks ALL your bodyparts for protection, and averages out the values for(var/X in limbs) var/obj/limb/E = X - var/weight = organ_rel_size[E.name] + var/weight = GLOB.organ_rel_size[E.name] armorval += getarmor_organ(E, type) * weight total += weight return (armorval/max(total, 1)) @@ -155,6 +155,7 @@ Contains most of the procs that are called when a mob is attacked by something return FALSE /mob/living/carbon/human/emp_act(severity) + . = ..() for(var/obj/O in src) if(!O) continue @@ -167,7 +168,6 @@ Contains most of the procs that are called when a mob is attacked by something if(I.robotic == FALSE) continue I.emp_act(severity) - ..() //Returns 1 if the attack hit, 0 if it missed. diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index ec27fd0a3e17..9ec9d0b05ec5 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -175,8 +175,8 @@ var/total_marine_playtime = 0 - for(var/job in RoleAuthority.roles_by_name) - var/datum/job/J = RoleAuthority.roles_by_name[job] + for(var/job in GLOB.RoleAuthority.roles_by_name) + var/datum/job/J = GLOB.RoleAuthority.roles_by_name[job] if(istype(J, /datum/job/antag)) continue diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index f0ca5fe27f19..1803e289114e 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -140,3 +140,10 @@ prob_slip = round(prob_slip) return(prob_slip) + +/// Updates [TRAIT_FLOORED] based on whether the mob has appropriate limbs to stand or not +/mob/living/carbon/human/proc/update_leg_status() + if((has_limb("r_foot") && has_limb("r_leg")) || (has_limb("l_foot") && has_limb("l_leg"))) + REMOVE_TRAIT(src, TRAIT_FLOORED, BODY_TRAIT) + else + ADD_TRAIT(src, TRAIT_FLOORED, BODY_TRAIT) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index b86a6a625f57..b54f03e2ce7d 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -550,6 +550,7 @@ to_chat(src, SPAN_WARNING("You can't put \the [interact_item.name] on [target_mob]!")) return visible_message(SPAN_NOTICE("[src] tries to put \the [interact_item.name] on [target_mob]."), null, null, 5) + log_interact(src, target_mob, "[key_name(src)] attempted to put [interact_item.name] on [key_name(target_mob)]'s ([slot_to_process]).") if(do_after(src, get_strip_delay(src, target_mob), INTERRUPT_ALL, BUSY_ICON_GENERIC, target_mob, INTERRUPT_MOVED, BUSY_ICON_GENERIC)) if(interact_item == get_active_hand() && !target_mob.get_item_by_slot(slot_to_process) && Adjacent(target_mob)) if(interact_item.flags_item & WIELDED) //to prevent re-wielding it during the do_after @@ -558,6 +559,7 @@ drop_inv_item_on_ground(interact_item) if(interact_item && !QDELETED(interact_item)) //Might be self-deleted? target_mob.equip_to_slot_if_possible(interact_item, slot_to_process, 1, 0, 1, 1) + log_interact(src, target_mob, "[key_name(src)] put [interact_item.name] on [key_name(target_mob)]'s ([slot_to_process]) successfully.") if(ishuman(target_mob) && target_mob.stat == DEAD) var/mob/living/carbon/human/human_target = target_mob human_target.disable_lights() // take that powergamers -spookydonut diff --git a/code/modules/mob/living/carbon/human/life/handle_stasis_bag.dm b/code/modules/mob/living/carbon/human/life/handle_stasis_bag.dm index 024235b78156..43c757fabb3e 100644 --- a/code/modules/mob/living/carbon/human/life/handle_stasis_bag.dm +++ b/code/modules/mob/living/carbon/human/life/handle_stasis_bag.dm @@ -4,7 +4,9 @@ //Handle side effects from stasis switch(in_stasis) if(STASIS_IN_BAG) - // I hate whoever wrote this and statuses with a passion - knocked_down = knocked_down? --knocked_down : knocked_down + 10 //knocked_down set. + // At least 6 seconds, but reduce by 2s every time - IN ADDITION to normal recovery + // Don't ask me why and feel free to change it + KnockDown(3) + AdjustKnockDown(-1) if(STASIS_IN_CRYO_CELL) if(sleeping < 10) sleeping += 10 //Puts the mob to sleep indefinitely. 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 9cab659980a6..be7848b2a936 100644 --- a/code/modules/mob/living/carbon/human/powers/human_powers.dm +++ b/code/modules/mob/living/carbon/human/powers/human_powers.dm @@ -201,6 +201,10 @@ return if(new_resting == resting) return + if(!COOLDOWN_FINISHED(src, rest_cooldown)) + to_chat(src, SPAN_WARNING("You can't 'rest' that fast. Take a breather!")) + return + COOLDOWN_START(src, rest_cooldown, 1 SECONDS) . = resting resting = new_resting @@ -260,9 +264,9 @@ var/chosen_HUD = 1 switch(hud_choice) if("Medical HUD") - H = huds[MOB_HUD_MEDICAL_ADVANCED] + H = GLOB.huds[MOB_HUD_MEDICAL_ADVANCED] if("Security HUD") - H = huds[MOB_HUD_SECURITY_ADVANCED] + H = GLOB.huds[MOB_HUD_SECURITY_ADVANCED] chosen_HUD = 2 else return diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index b41cd8207a08..e8702e56c05f 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -15,7 +15,7 @@ if(current_channel == " " || current_channel == ":" || current_channel == ".") i-- break - .["modes"] += department_radio_keys[":[current_channel]"] + .["modes"] += GLOB.department_radio_keys[":[current_channel]"] .["message_and_language"] = copytext(message, i+1) var/multibroadcast_cooldown = 0 for(var/obj/item/device/radio/headset/headset in list(wear_l_ear, wear_r_ear)) @@ -31,9 +31,9 @@ if(length(message) >= 2 && (message[1] == "." || message[1] == ":" || message[1] == "#")) var/channel_prefix = copytext(message, 1, 3) - if(channel_prefix in department_radio_keys) + if(channel_prefix in GLOB.department_radio_keys) .["message_and_language"] = copytext(message, 3) - .["modes"] += department_radio_keys[channel_prefix] + .["modes"] += GLOB.department_radio_keys[channel_prefix] return .["message_and_language"] = message @@ -57,7 +57,7 @@ var/verb = "says" var/alt_name = "" - var/message_range = world_view_size + var/message_range = GLOB.world_view_size var/italics = 0 if(!able_to_speak) diff --git a/code/modules/mob/living/carbon/human/species/human.dm b/code/modules/mob/living/carbon/human/species/human.dm index 6a59e97af867..add78365a350 100644 --- a/code/modules/mob/living/carbon/human/species/human.dm +++ b/code/modules/mob/living/carbon/human/species/human.dm @@ -1,3 +1,85 @@ +// handles all blood related problems for humans and synthetics, moved from blood.dm +/mob/living/proc/handle_blood() + return + +// Takes care blood loss and regeneration +/mob/living/carbon/human/handle_blood() + if((species.flags & NO_BLOOD) && !(species.flags & IS_SYNTHETIC)) + return + + if(stat != DEAD && bodytemperature >= 170) //Dead or cryosleep people do not pump the blood. + //Blood regeneration if there is some space + if(blood_volume < max_blood && nutrition >= 1) + blood_volume += 0.1 // regenerate blood VERY slowly + nutrition -= 0.25 + else if(blood_volume > max_blood) + blood_volume -= 0.1 // The reverse in case we've gotten too much blood in our body + if(blood_volume > limit_blood) + blood_volume = limit_blood // This should never happen, but lets make sure + + var/b_volume = blood_volume + + // Damaged heart virtually reduces the blood volume, as the blood isn't + // being pumped properly anymore. + if(species && species.has_organ["heart"]) + var/datum/internal_organ/heart/heart = internal_organs_by_name["heart"] + if(!heart) + b_volume = 0 + else if(chem_effect_flags & CHEM_EFFECT_ORGAN_STASIS) + b_volume *= 1 + else if(heart.damage >= heart.organ_status >= ORGAN_BRUISED) + b_volume *= Clamp(100 - (2 * heart.damage), 30, 100) / 100 + + //Effects of bloodloss + if(b_volume <= BLOOD_VOLUME_SAFE) + /// The blood volume turned into a %, with BLOOD_VOLUME_NORMAL being 100% + var/blood_percentage = b_volume / (BLOOD_VOLUME_NORMAL / 100) + /// How much oxyloss will there be from the next time blood processes + var/additional_oxyloss = (100 - blood_percentage) / 5 + /// The limit of the oxyloss gained, ignoring oxyloss from the switch statement + var/maximum_oxyloss = Clamp((100 - blood_percentage) / 2, oxyloss, 100) + if(oxyloss < maximum_oxyloss) + oxyloss += round(max(additional_oxyloss, 0)) + + switch(b_volume) + if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE) + if(species.flags & IS_SYNTHETIC) + if(prob(1)) + to_chat(src, SPAN_DANGER("Subdermal damage detected in critical region. Operational impact minimal. Diagnosis queued for maintenance cycle.")) + else + if(prob(1)) + var/word = pick("dizzy","woozy","faint") + to_chat(src, SPAN_DANGER("You feel [word].")) + if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) + if(species.flags & IS_SYNTHETIC) + if(prob(3)) + apply_effect(rand(1, 2), WEAKEN) + to_chat(src, SPAN_DANGER("Internal power cell fault detected.\nSeek nearest recharging station.")) + else + if(eye_blurry < 50) + AdjustEyeBlur(6) + oxyloss += 3 + if(prob(15)) + apply_effect(rand(1,3), PARALYZE) + var/word = pick("dizzy","woozy","faint") + to_chat(src, SPAN_DANGER("You feel very [word].")) + if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD) + if(species.flags & IS_SYNTHETIC) + if(prob(5)) + apply_effect(rand(1, 2), PARALYZE) + to_chat(src, SPAN_DANGER("Critical power cell failure detected.\nSeek recharging station immediately.")) + else + if(eye_blurry < 50) + AdjustEyeBlur(6) + oxyloss += 8 + toxloss += 3 + if(prob(15)) + apply_effect(rand(1, 3), PARALYZE) + var/word = pick("dizzy", "woozy", "faint") + to_chat(src, SPAN_DANGER("You feel extremely [word].")) + if(0 to BLOOD_VOLUME_SURVIVE) + death(create_cause_data(species.flags & IS_SYNTHETIC ? "power failure" : "blood loss")) + /datum/species/human group = SPECIES_HUMAN name = "Human" diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm index 4c10788992c7..8e8d2443293d 100644 --- a/code/modules/mob/living/carbon/human/species/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/monkey.dm @@ -47,7 +47,7 @@ if(H.stat != CONSCIOUS) return if(prob(33) && isturf(H.loc) && !H.pulledby && (H.mobility_flags & MOBILITY_MOVE) && !H.is_mob_restrained()) //won't move if being pulled - step(H, pick(cardinal)) + step(H, pick(GLOB.cardinals)) var/obj/held = H.get_active_hand() if(held && prob(1)) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index d38e81335be6..4392c3359596 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -169,6 +169,13 @@ for(var/datum/internal_organ/I in H.internal_organs) I.mechanize() + // We just deleted the legs so they fell down. + // Update again now that the legs are back so they can stand properly during rest of species code and before outside updates kick in. + // I hate this code. + H.update_leg_status() + // While we're deep in shitcode we also force instant transition so this nonsense isn't visually noticeable + H.update_transform(instant_update = TRUE) + /datum/species/proc/initialize_pain(mob/living/carbon/human/H) if(pain_type) QDEL_NULL(H.pain) @@ -182,14 +189,7 @@ /datum/species/proc/hug(mob/living/carbon/human/H, mob/living/carbon/target, target_zone = "chest") if(H.flags_emote) return - var/t_him = "them" - switch(target.gender) - if(MALE) - t_him = "him" - if(FEMALE) - t_him = "her" - else - t_him = "them" + var/t_him = target.p_them() if(target_zone == "head") attempt_rock_paper_scissors(H, target) @@ -478,7 +478,7 @@ /datum/species/proc/handle_blood_splatter(mob/living/carbon/human/human, splatter_dir) var/color_override if(human.special_blood) - var/datum/reagent/D = chemical_reagents_list[human.special_blood] + var/datum/reagent/D = GLOB.chemical_reagents_list[human.special_blood] if(D) color_override = D.color diff --git a/code/modules/mob/living/carbon/human/species/yautja/_species.dm b/code/modules/mob/living/carbon/human/species/yautja/_species.dm index f8ecb3e0591b..f8937279d8b9 100644 --- a/code/modules/mob/living/carbon/human/species/yautja/_species.dm +++ b/code/modules/mob/living/carbon/human/species/yautja/_species.dm @@ -161,7 +161,7 @@ /datum/species/yautja/post_species_loss(mob/living/carbon/human/H) ..() - var/datum/mob_hud/medical/advanced/A = huds[MOB_HUD_MEDICAL_ADVANCED] + var/datum/mob_hud/medical/advanced/A = GLOB.huds[MOB_HUD_MEDICAL_ADVANCED] A.add_to_hud(H) H.blood_type = pick("A+","A-","B+","B-","O-","O+","AB+","AB-") H.h_style = "Bald" diff --git a/code/modules/mob/living/carbon/human/species/yautja/yautja_sound.dm b/code/modules/mob/living/carbon/human/species/yautja/yautja_sound.dm index a6a9a659f215..afd138fec2bb 100644 --- a/code/modules/mob/living/carbon/human/species/yautja/yautja_sound.dm +++ b/code/modules/mob/living/carbon/human/species/yautja/yautja_sound.dm @@ -65,6 +65,6 @@ return for(var/mob/current_mob as anything in get_mobs_in_z_level_range(get_turf(user), 18) - user) - var/relative_dir = get_dir(current_mob, user) + var/relative_dir = Get_Compass_Dir(current_mob, user) var/final_dir = dir2text(relative_dir) to_chat(current_mob, SPAN_HIGHDANGER("You hear a loud roar coming from [final_dir ? "the [final_dir]" : "nearby"]!")) diff --git a/code/modules/mob/living/carbon/human/species/zombie.dm b/code/modules/mob/living/carbon/human/species/zombie.dm index ef2d7ef415ff..76b1c3928659 100644 --- a/code/modules/mob/living/carbon/human/species/zombie.dm +++ b/code/modules/mob/living/carbon/human/species/zombie.dm @@ -53,9 +53,6 @@ if(zombie.glasses) zombie.drop_inv_item_on_ground(zombie.glasses, FALSE, TRUE) if(zombie.wear_mask) zombie.drop_inv_item_on_ground(zombie.wear_mask, FALSE, TRUE) -// if(zombie.lying) -// zombie.lying = FALSE - var/obj/item/weapon/zombie_claws/ZC = new(zombie) ZC.icon_state = "claw_r" zombie.equip_to_slot_or_del(ZC, WEAR_R_HAND, TRUE) @@ -67,7 +64,7 @@ D = zombie.AddDisease(new /datum/disease/black_goo()) D.stage = 5 - var/datum/mob_hud/Hu = huds[MOB_HUD_MEDICAL_OBSERVER] + var/datum/mob_hud/Hu = GLOB.huds[MOB_HUD_MEDICAL_OBSERVER] Hu.add_hud_to(zombie, zombie) return ..() @@ -76,7 +73,7 @@ /datum/species/zombie/post_species_loss(mob/living/carbon/human/zombie) ..() remove_from_revive(zombie) - var/datum/mob_hud/Hu = huds[MOB_HUD_MEDICAL_OBSERVER] + var/datum/mob_hud/Hu = GLOB.huds[MOB_HUD_MEDICAL_OBSERVER] Hu.remove_hud_from(zombie, zombie) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 21562af8319f..c7427384f0a4 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -4,8 +4,8 @@ TODO: Proper documentation icon_key is [species.race_key][g][husk][fat][hulk][skeleton][ethnicity] */ -var/global/list/human_icon_cache = list() -var/global/list/tail_icon_cache = list() +GLOBAL_LIST_EMPTY(human_icon_cache) +GLOBAL_LIST_EMPTY(tail_icon_cache) /proc/overlay_image(icon, icon_state, color, flags) var/image/ret = image(icon,icon_state) @@ -19,7 +19,7 @@ var/global/list/tail_icon_cache = list() Global associative list for caching uniform masks. Each index is just 0 or 1 for not removed and removed (as in previously delimbed). */ -var/global/list/uniform_mask_cache = list() +GLOBAL_LIST_EMPTY(uniform_mask_cache) /////////////////////// //UPDATE_ICONS SYSTEM// @@ -112,12 +112,7 @@ There are several things that need to be remembered: //BASE MOB SPRITE /mob/living/carbon/human/proc/update_body() - if((has_limb("r_foot") && has_limb("r_leg")) || (has_limb("l_foot") && has_limb("l_leg"))) - // temporary crutch. i know this is in effect an icons proc, but this is literally "update_body" material. - // remove this when we can migrate it to signal based limb handling. - REMOVE_TRAIT(src, TRAIT_FLOORED, BODY_TRAIT) - else - ADD_TRAIT(src, TRAIT_FLOORED, BODY_TRAIT) + update_leg_status() // Not icon ops, but placed here due to lack of a non-icons update_body appearance_flags |= KEEP_TOGETHER // sanity @@ -687,11 +682,11 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate, /mob/living/carbon/human/proc/get_tail_icon() var/icon_key = "[species.race_key][r_skin][g_skin][b_skin][r_hair][g_hair][b_hair]" - var/icon/tail_icon = tail_icon_cache[icon_key] + var/icon/tail_icon = GLOB.tail_icon_cache[icon_key] if(!tail_icon) //generate a new one tail_icon = icon('icons/effects/species.dmi', "[species.get_tail(src)]") - tail_icon_cache[icon_key] = tail_icon + GLOB.tail_icon_cache[icon_key] = tail_icon return tail_icon diff --git a/code/modules/mob/living/carbon/xenomorph/Abilities.dm b/code/modules/mob/living/carbon/xenomorph/Abilities.dm index 0a6e0ff2ca26..cb46b3c6cc26 100644 --- a/code/modules/mob/living/carbon/xenomorph/Abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/Abilities.dm @@ -75,6 +75,7 @@ X.tunnel_delay = 1 addtimer(CALLBACK(src, PROC_REF(cooldown_end)), 4 MINUTES) var/msg = strip_html(input("Add a description to the tunnel:", "Tunnel Description") as text|null) + msg = replace_non_alphanumeric_plus(msg) var/description if(msg) description = msg diff --git a/code/modules/mob/living/carbon/xenomorph/Embryo.dm b/code/modules/mob/living/carbon/xenomorph/Embryo.dm index 06f677ece9d9..0d522c142f36 100644 --- a/code/modules/mob/living/carbon/xenomorph/Embryo.dm +++ b/code/modules/mob/living/carbon/xenomorph/Embryo.dm @@ -260,7 +260,7 @@ new_xeno.key = picked.key if(new_xeno.client) - new_xeno.client.change_view(world_view_size) + new_xeno.client.change_view(GLOB.world_view_size) if(new_xeno.client.prefs?.toggles_flashing & FLASH_POOLSPAWN) window_flash(new_xeno.client) @@ -336,17 +336,17 @@ victim.attack_log += "\[[time_stamp()]\] Was chestbursted in [get_area_name(larva_embryo)] at X[victim.x], Y[victim.y], Z[victim.z]. The larva was [key_name(larva_embryo)]." if(burstcount) - step(larva_embryo, pick(cardinal)) + step(larva_embryo, pick(GLOB.cardinals)) - if(round_statistics) - round_statistics.total_larva_burst++ + if(GLOB.round_statistics) + GLOB.round_statistics.total_larva_burst++ GLOB.larva_burst_by_hive[hive] = (GLOB.larva_burst_by_hive[hive] || 0) + 1 burstcount++ if(!larva_embryo.ckey && larva_embryo.burrowable && loc && is_ground_level(loc.z) && (locate(/obj/structure/bed/nest) in loc) && hive.living_xeno_queen && hive.living_xeno_queen.z == loc.z) larva_embryo.visible_message(SPAN_XENODANGER("[larva_embryo] quickly burrows into the ground.")) - if(round_statistics && !larva_embryo.statistic_exempt) - round_statistics.track_new_participant(faction, -1) // keep stats sane + if(GLOB.round_statistics && !larva_embryo.statistic_exempt) + GLOB.round_statistics.track_new_participant(faction, -1) // keep stats sane hive.stored_larva++ hive.hive_ui.update_burrowed_larva() qdel(larva_embryo) diff --git a/code/modules/mob/living/carbon/xenomorph/Evolution.dm b/code/modules/mob/living/carbon/xenomorph/Evolution.dm index 332f8d1778dd..af6be8265cc0 100644 --- a/code/modules/mob/living/carbon/xenomorph/Evolution.dm +++ b/code/modules/mob/living/carbon/xenomorph/Evolution.dm @@ -26,8 +26,15 @@ if(!length(castes_available)) to_chat(src, SPAN_WARNING("The Hive is not capable of supporting any castes you can evolve to yet.")) return + var/castepick + if((client.prefs && client.prefs.no_radials_preference) || !hive.evolution_menu_images) + castepick = tgui_input_list(usr, "You are growing into a beautiful alien! It is time to choose a caste.", "Evolve", castes_available, theme="hive_status") + else + var/list/fancy_caste_list = list() + for(var/caste in castes_available) + fancy_caste_list[caste] = hive.evolution_menu_images[caste] - var/castepick = tgui_input_list(usr, "You are growing into a beautiful alien! It is time to choose a caste.", "Evolve", castes_available, theme="hive_status") + castepick = show_radial_menu(src, src.client?.eye, fancy_caste_list) if(!castepick) //Changed my mind return @@ -82,7 +89,7 @@ var/mob/living/carbon/xenomorph/M = null - M = RoleAuthority.get_caste_by_text(castepick) + M = GLOB.RoleAuthority.get_caste_by_text(castepick) if(isnull(M)) to_chat(usr, SPAN_WARNING("[castepick] is not a valid caste! If you're seeing this message, tell a coder!")) @@ -148,7 +155,7 @@ else new_xeno.key = src.key if(new_xeno.client) - new_xeno.client.change_view(world_view_size) + new_xeno.client.change_view(GLOB.world_view_size) //Regenerate the new mob's name now that our player is inside new_xeno.generate_name() @@ -182,8 +189,8 @@ if (new_xeno.client) new_xeno.client.mouse_pointer_icon = initial(new_xeno.client.mouse_pointer_icon) - if(new_xeno.mind && round_statistics) - round_statistics.track_new_participant(new_xeno.faction, -1) //so an evolved xeno doesn't count as two. + if(new_xeno.mind && GLOB.round_statistics) + GLOB.round_statistics.track_new_participant(new_xeno.faction, -1) //so an evolved xeno doesn't count as two. SSround_recording.recorder.track_player(new_xeno) /mob/living/carbon/xenomorph/proc/evolve_checks() @@ -336,7 +343,7 @@ else new_xeno.key = key if(new_xeno.client) - new_xeno.client.change_view(world_view_size) + new_xeno.client.change_view(GLOB.world_view_size) new_xeno.client.pixel_x = 0 new_xeno.client.pixel_y = 0 @@ -347,8 +354,8 @@ new_xeno.visible_message(SPAN_XENODANGER("A [new_xeno.caste.caste_type] emerges from the husk of \the [src]."), \ SPAN_XENODANGER("You regress into your previous form.")) - if(round_statistics && !new_xeno.statistic_exempt) - round_statistics.track_new_participant(faction, -1) //so an evolved xeno doesn't count as two. + if(GLOB.round_statistics && !new_xeno.statistic_exempt) + GLOB.round_statistics.track_new_participant(faction, -1) //so an evolved xeno doesn't count as two. SSround_recording.recorder.track_player(new_xeno) src.transfer_observers_to(new_xeno) diff --git a/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm b/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm index c4ba3fd50682..3ed4bf036e12 100644 --- a/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm +++ b/code/modules/mob/living/carbon/xenomorph/Facehuggers.dm @@ -14,7 +14,7 @@ flags_inventory = COVEREYES|ALLOWINTERNALS|COVERMOUTH|ALLOWREBREATH|CANTSTRIP flags_armor_protection = BODY_FLAG_FACE|BODY_FLAG_EYES flags_atom = NO_FLAGS - flags_item = NOBLUDGEON|NOTABLEMERGE + flags_item = NOBLUDGEON throw_range = 1 layer = FACEHUGGER_LAYER black_market_value = 20 @@ -329,8 +329,8 @@ else target.visible_message(SPAN_DANGER("[src] violates [target]'s face!")) - if(round_statistics && ishuman(target)) - round_statistics.total_huggers_applied++ + if(GLOB.round_statistics && ishuman(target)) + GLOB.round_statistics.total_huggers_applied++ /obj/item/clothing/mask/facehugger/proc/go_active() if(stat == DEAD) @@ -523,7 +523,7 @@ /datum/species/yautja/handle_hugger_attachment(mob/living/carbon/human/target, obj/item/clothing/mask/facehugger/hugger) var/catch_chance = 50 - if(target.dir == reverse_dir[hugger.dir]) + if(target.dir == GLOB.reverse_dir[hugger.dir]) catch_chance += 20 if(target.body_position == LYING_DOWN) catch_chance -= 50 diff --git a/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm b/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm index 6361ff595b10..317c7999e586 100644 --- a/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm +++ b/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm @@ -90,7 +90,7 @@ //Hot hot Aliens on Aliens action. //Actually just used for eating people. /mob/living/carbon/xenomorph/attack_alien(mob/living/carbon/xenomorph/M) - if (M.fortify || M.burrow) + if (M.fortify || HAS_TRAIT(M, TRAIT_ABILITY_BURROWED)) return XENO_NO_DELAY_ACTION if(HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) diff --git a/code/modules/mob/living/carbon/xenomorph/XenoOverwatch.dm b/code/modules/mob/living/carbon/xenomorph/XenoOverwatch.dm index 46e144a1b1f5..68c422619d32 100644 --- a/code/modules/mob/living/carbon/xenomorph/XenoOverwatch.dm +++ b/code/modules/mob/living/carbon/xenomorph/XenoOverwatch.dm @@ -12,7 +12,7 @@ var/mob/living/carbon/xenomorph/X = owner if(!istype(X)) return FALSE - if(X.is_mob_incapacitated() || X.buckled || X.burrow) + if(X.is_mob_incapacitated() || X.buckled || HAS_TRAIT(X, TRAIT_ABILITY_BURROWED)) return FALSE else return TRUE diff --git a/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm b/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm index 373c57b4a6d4..f59ea5d30996 100644 --- a/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm +++ b/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm @@ -284,7 +284,8 @@ if(H.check_shields(15, "the pounce")) //Human shield block. visible_message(SPAN_DANGER("[src] slams into [H]!"), SPAN_XENODANGER("You slam into [H]!"), null, 5) - apply_effect(1, WEAKEN) + KnockDown(1) + Stun(1) throwing = FALSE //Reset throwing manually. playsound(H, "bonk", 75, FALSE) //bonk return @@ -292,20 +293,23 @@ if(isyautja(H)) if(H.check_shields(0, "the pounce", 1)) visible_message(SPAN_DANGER("[H] blocks the pounce of [src] with the combistick!"), SPAN_XENODANGER("[H] blocks your pouncing form with the combistick!"), null, 5) - apply_effect(3, WEAKEN) + KnockDown(3) + Stun(3) throwing = FALSE playsound(H, "bonk", 75, FALSE) return else if(prob(75)) //Body slam the fuck out of xenos jumping at your front. visible_message(SPAN_DANGER("[H] body slams [src]!"), SPAN_XENODANGER("[H] body slams you!"), null, 5) - apply_effect(3, WEAKEN) + KnockDown(3) + Stun(3) throwing = FALSE return if(iscolonysynthetic(H) && prob(60)) visible_message(SPAN_DANGER("[H] withstands being pounced and slams down [src]!"), SPAN_XENODANGER("[H] throws you down after withstanding the pounce!"), null, 5) - apply_effect(1.5, WEAKEN) + KnockDown(1.5) + Stun(1.5) throwing = FALSE return @@ -535,81 +539,9 @@ if(client) client.mouse_pointer_icon = initial(client.mouse_pointer_icon) // Reset our mouse pointer when we no longer have an action queued. -// Called when pulling something and attacking yourself with the pull -/mob/living/carbon/xenomorph/proc/pull_power(mob/M) - if(iswarrior(src) && !ripping_limb && M.stat != DEAD) - if(M.status_flags & XENO_HOST) - to_chat(src, SPAN_XENOWARNING("This would harm the embryo!")) - return - ripping_limb = TRUE - if(rip_limb(M)) - stop_pulling() - ripping_limb = FALSE - - -// Warrior Rip Limb - called by pull_power() -/mob/living/carbon/xenomorph/proc/rip_limb(mob/M) - if(!istype(M, /mob/living/carbon/human)) - return FALSE - - if(action_busy) //can't stack the attempts - return FALSE - - var/mob/living/carbon/human/H = M - var/obj/limb/L = H.get_limb(check_zone(zone_selected)) - - if(can_not_harm(H)) - to_chat(src, SPAN_XENOWARNING("You can't harm this host!")) - return - - if(!L || L.body_part == BODY_FLAG_CHEST || L.body_part == BODY_FLAG_GROIN || (L.status & LIMB_DESTROYED)) //Only limbs and head. - to_chat(src, SPAN_XENOWARNING("You can't rip off that limb.")) - return FALSE - var/limb_time = rand(40,60) - - if(L.body_part == BODY_FLAG_HEAD) - limb_time = rand(90,110) - - visible_message(SPAN_XENOWARNING("[src] begins pulling on [M]'s [L.display_name] with incredible strength!"), \ - SPAN_XENOWARNING("You begin to pull on [M]'s [L.display_name] with incredible strength!")) - - if(!do_after(src, limb_time, INTERRUPT_ALL|INTERRUPT_DIFF_SELECT_ZONE, BUSY_ICON_HOSTILE) || M.stat == DEAD) - to_chat(src, SPAN_NOTICE("You stop ripping off the limb.")) - return FALSE - - if(L.status & LIMB_DESTROYED) - return FALSE - - if(L.status & (LIMB_ROBOT|LIMB_SYNTHSKIN)) - L.take_damage(rand(30,40), 0, 0) // just do more damage - visible_message(SPAN_XENOWARNING("You hear [M]'s [L.display_name] being pulled beyond its load limits!"), \ - SPAN_XENOWARNING("[M]'s [L.display_name] begins to tear apart!")) - else - visible_message(SPAN_XENOWARNING("You hear the bones in [M]'s [L.display_name] snap with a sickening crunch!"), \ - SPAN_XENOWARNING("[M]'s [L.display_name] bones snap with a satisfying crunch!")) - L.take_damage(rand(15,25), 0, 0) - L.fracture(100) - M.last_damage_data = create_cause_data(initial(caste_type), src) - src.attack_log += text("\[[time_stamp()]\] ripped the [L.display_name] off of [M.name] ([M.ckey]) 1/2 progress") - M.attack_log += text("\[[time_stamp()]\] had their [L.display_name] ripped off by [src.name] ([src.ckey]) 1/2 progress") - log_attack("[src.name] ([src.ckey]) ripped the [L.display_name] off of [M.name] ([M.ckey]) 1/2 progress") - - if(!do_after(src, limb_time, INTERRUPT_ALL|INTERRUPT_DIFF_SELECT_ZONE, BUSY_ICON_HOSTILE) || M.stat == DEAD || iszombie(M)) - to_chat(src, SPAN_NOTICE("You stop ripping off the limb.")) - return FALSE - - if(L.status & LIMB_DESTROYED) - return FALSE - - visible_message(SPAN_XENOWARNING("[src] rips [M]'s [L.display_name] away from \his body!"), \ - SPAN_XENOWARNING("[M]'s [L.display_name] rips away from \his body!")) - src.attack_log += text("\[[time_stamp()]\] ripped the [L.display_name] off of [M.name] ([M.ckey]) 2/2 progress") - M.attack_log += text("\[[time_stamp()]\] had their [L.display_name] ripped off by [src.name] ([src.ckey]) 2/2 progress") - log_attack("[src.name] ([src.ckey]) ripped the [L.display_name] off of [M.name] ([M.ckey]) 2/2 progress") - - L.droplimb(0, 0, initial(name)) - - return TRUE +/// Called when pulling something and attacking yourself wth the pull (Z hotkey) override for caste specific behaviour +/mob/living/carbon/xenomorph/proc/pull_power(mob/mob) + return // Vent Crawl /mob/living/carbon/xenomorph/proc/vent_crawl() @@ -660,7 +592,7 @@ /mob/living/carbon/xenomorph/burn_skin(burn_amount) - if(burrow) + if(HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) return FALSE if(caste.fire_immunity & FIRE_IMMUNITY_NO_DAMAGE) @@ -694,9 +626,15 @@ target.xenos_tracking |= src tracked_marker = target to_chat(src, SPAN_XENONOTICE("You start tracking the [target.mark_meaning.name] resin mark.")) - to_chat(src, SPAN_INFO("shift click the compass to watch the mark, alt click to stop tracking")) + to_chat(src, SPAN_INFO("Shift click the compass to watch the mark, alt click to stop tracking")) /mob/living/carbon/xenomorph/proc/stop_tracking_resin_mark(destroyed, silent = FALSE) //tracked_marker shouldnt be nulled outside this PROC!! >:C + if(QDELETED(src)) + return + + if(!hud_used) + CRASH("hud_used is null in stop_tracking_resin_mark") + var/atom/movable/screen/mark_locator/ML = hud_used.locate_marker ML.overlays.Cut() diff --git a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm index b6153c3f1b79..e041bbafabdf 100644 --- a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm +++ b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm @@ -21,7 +21,8 @@ if(mind in SSticker.mode.xenomorphs) to_chat(src, SPAN_DEBUG("[src] mind is in the xenomorph list. Mind key is [mind.key].")) to_chat(src, SPAN_DEBUG("Current mob is: [mind.current]. Original mob is: [mind.original].")) - else to_chat(src, SPAN_DEBUG("This xenomorph is not in the xenomorph list.")) + else + to_chat(src, SPAN_DEBUG("This xenomorph is not in the xenomorph list.")) #endif #undef DEBUG_XENO @@ -269,13 +270,11 @@ var/tunnel = FALSE /// for check on lurker invisibility var/stealth = FALSE - var/burrow = FALSE var/fortify = FALSE var/crest_defense = FALSE /// 0/FALSE - upright, 1/TRUE - all fours var/agility = FALSE var/ripping_limb = FALSE - var/steelcrest = FALSE /// The world.time at which we will regurgitate our currently-vored victim var/devour_timer = 0 /// For drones/hivelords. Extends the maximum build range they have @@ -333,178 +332,168 @@ //Burrower Vars var/used_tremor = 0 - // Defender vars - var/used_headbutt = 0 - var/used_fortify = 0 // Burrowers var/used_burrow = 0 var/used_tunnel = 0 - //Carrier vars - var/threw_a_hugger = 0 - var/huggers_cur = 0 - var/eggs_cur = 0 - var/huggers_max = 0 - var/eggs_max = 0 - var/laid_egg = 0 - //Taken from update_icon for all xeno's var/list/overlays_standing[X_TOTAL_LAYERS] - var/atom/movable/vis_obj/xeno_wounds/wound_icon_carrier - var/atom/movable/vis_obj/xeno_pack/backpack_icon_carrier + var/atom/movable/vis_obj/xeno_wounds/wound_icon_holder + var/atom/movable/vis_obj/xeno_pack/backpack_icon_holder -/mob/living/carbon/xenomorph/Initialize(mapload, mob/living/carbon/xenomorph/oldXeno, h_number) - var/area/A = get_area(src) - if(A && A.statistic_exempt) - statistic_exempt = TRUE +/mob/living/carbon/xenomorph/Initialize(mapload, mob/living/carbon/xenomorph/old_xeno, hivenumber) - wound_icon_carrier = new(null, src) - vis_contents += wound_icon_carrier - - if(oldXeno) - set_movement_intent(oldXeno.m_intent) - hivenumber = oldXeno.hivenumber - nicknumber = oldXeno.nicknumber - life_kills_total = oldXeno.life_kills_total - life_damage_taken_total = oldXeno.life_damage_taken_total - evolution_stored = oldXeno.evolution_stored - if(oldXeno.iff_tag) - iff_tag = oldXeno.iff_tag - iff_tag.forceMove(src) - oldXeno.iff_tag = null - else if (h_number) - hivenumber = h_number + if(old_xeno && old_xeno.hivenumber) + src.hivenumber = old_xeno.hivenumber + else if(hivenumber) + src.hivenumber = hivenumber + + var/datum/hive_status/hive = GLOB.hive_datum[src.hivenumber] + + if(hive) + hive.add_xeno(src) + + wound_icon_holder = new(null, src) + vis_contents += wound_icon_holder set_languages(list(LANGUAGE_XENOMORPH, LANGUAGE_HIVEMIND)) - if(oldXeno) - for(var/datum/language/L in oldXeno.languages) - add_language(L.name)//Make sure to keep languages (mostly for event Queens that know English) - // Well, not yet, technically - var/datum/hive_status/in_hive = GLOB.hive_datum[hivenumber] - if(in_hive) - in_hive.add_xeno(src) - // But now we are! + ///Handle transferring things from the old Xeno if we have one in the case of evolve, devolve etc. + if(old_xeno) + src.nicknumber = old_xeno.nicknumber + src.life_kills_total = old_xeno.life_kills_total + src.life_damage_taken_total = old_xeno.life_damage_taken_total + src.evolution_stored = old_xeno.evolution_stored + + for(var/datum/language/language as anything in old_xeno.languages) + add_language(language.name)//Make sure to keep languages (mostly for event Queens that know English) + + //Carry over intents & targeted limb to the new Xeno + set_movement_intent(old_xeno.m_intent) + a_intent_change(old_xeno.a_intent) - for(var/T in in_hive.hive_inherant_traits) - ADD_TRAIT(src, T, TRAIT_SOURCE_HIVE) + //We are hiding, let's keep hiding if we can! + if(old_xeno.layer == XENO_HIDING_LAYER) + for(var/datum/action/xeno_action/onclick/xenohide/hide in actions) + layer = XENO_HIDING_LAYER + hide.button.icon_state = "template_active" + + //If we're holding things drop them + for(var/obj/item/item in old_xeno.contents) //Drop stuff + old_xeno.drop_inv_item_on_ground(item) + old_xeno.empty_gut() + + if(old_xeno.iff_tag) + iff_tag = old_xeno.iff_tag + iff_tag.forceMove(src) + old_xeno.iff_tag = null + + if(hive) + for(var/trait in hive.hive_inherant_traits) + ADD_TRAIT(src, trait, TRAIT_SOURCE_HIVE) mutators.xeno = src + //Set caste stuff if(caste_type && GLOB.xeno_datum_list[caste_type]) caste = GLOB.xeno_datum_list[caste_type] - else - to_world("something went very wrong") - return - update_icon_source() + //Fire immunity signals + if (caste.fire_immunity != FIRE_IMMUNITY_NONE) + if(caste.fire_immunity & FIRE_IMMUNITY_NO_IGNITE) + RegisterSignal(src, COMSIG_LIVING_PREIGNITION, PROC_REF(fire_immune)) - acid_splash_cooldown = caste.acid_splash_cooldown + RegisterSignal(src, list(COMSIG_LIVING_FLAMER_CROSSED, COMSIG_LIVING_FLAMER_FLAMED), PROC_REF(flamer_crossed_immune)) + else + UnregisterSignal(src, list( + COMSIG_LIVING_PREIGNITION, + COMSIG_LIVING_FLAMER_CROSSED, + COMSIG_LIVING_FLAMER_FLAMED + )) - if (caste.fire_immunity != FIRE_IMMUNITY_NONE) - if(caste.fire_immunity & FIRE_IMMUNITY_NO_IGNITE) - RegisterSignal(src, COMSIG_LIVING_PREIGNITION, PROC_REF(fire_immune)) - RegisterSignal(src, list( - COMSIG_LIVING_FLAMER_CROSSED, - COMSIG_LIVING_FLAMER_FLAMED, - ), PROC_REF(flamer_crossed_immune)) - else - UnregisterSignal(src, list( - COMSIG_LIVING_PREIGNITION, - COMSIG_LIVING_FLAMER_CROSSED, - COMSIG_LIVING_FLAMER_FLAMED, - )) + if(caste.spit_types && length(caste.spit_types)) + ammo = GLOB.ammo_list[caste.spit_types[1]] - recalculate_everything() + acid_splash_cooldown = caste.acid_splash_cooldown + + if(caste.adjust_size_x != 1) + var/matrix/matrix = matrix() + matrix.Scale(caste.adjust_size_x, caste.adjust_size_y) + apply_transform(matrix) + + behavior_delegate = new caste.behavior_delegate_type() + behavior_delegate.bound_xeno = src + behavior_delegate.add_to_xeno() + resin_build_order = caste.resin_build_order + + job = caste.caste_type // Used for tracking the caste playtime + + else + CRASH("Attempted to create a new xenomorph [src] without caste datum.") if(mob_size < MOB_SIZE_BIG) mob_flags |= SQUEEZE_UNDER_VEHICLES + // More setup stuff for names, abilities etc + update_icon_source() generate_name() + add_inherent_verbs() + add_abilities() + create_reagents(100) + regenerate_icons() - if(isqueen(src)) - SStracking.set_leader("hive_[hivenumber]", src) - SStracking.start_tracking("hive_[hivenumber]", src) + toggle_xeno_hostilehud() + recalculate_everything() + toggle_xeno_mobhud() //This is a verb, but fuck it, it just werks . = ..() + + //Set leader to the new mob + if(old_xeno && hive && IS_XENO_LEADER(old_xeno)) + hive.replace_hive_leader(old_xeno, src) + + //Begin SStracking + SStracking.start_tracking("hive_[src.hivenumber]", src) + + GLOB.living_xeno_list += src + GLOB.xeno_mob_list += src + //WO GAMEMODE if(SSticker?.mode?.hardcore) hardcore = 1 //Prevents healing and queen evolution time_of_birth = world.time - add_inherent_verbs() - add_abilities() - recalculate_actions() - + //Minimap if(z) INVOKE_NEXT_TICK(src, PROC_REF(add_minimap_marker)) + //Sight sight |= SEE_MOBS see_invisible = SEE_INVISIBLE_LIVING see_in_dark = 12 + if(client) set_lighting_alpha_from_prefs(client) else lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - if(caste && caste.spit_types && caste.spit_types.len) - ammo = GLOB.ammo_list[caste.spit_types[1]] - - create_reagents(100) - - GLOB.living_xeno_list += src - GLOB.xeno_mob_list += src - - if(caste && caste.adjust_size_x != 1) - var/matrix/M = matrix() - M.Scale(caste.adjust_size_x, caste.adjust_size_y) - apply_transform(M) - - if(caste) - behavior_delegate = new caste.behavior_delegate_type() - behavior_delegate.bound_xeno = src - behavior_delegate.add_to_xeno() - resin_build_order = caste.resin_build_order - else - CRASH("Xenomorph [src] has no caste datum! Tell the devs!") - - regenerate_icons() - toggle_xeno_mobhud() //This is a verb, but fuck it, it just werks - toggle_xeno_hostilehud() - - if(oldXeno) - a_intent_change(oldXeno.a_intent)//Keep intent - - if(oldXeno.layer == XENO_HIDING_LAYER) - //We are hiding, let's keep hiding if we can! - for(var/datum/action/xeno_action/onclick/xenohide/hide in actions) - if(istype(hide)) - layer = XENO_HIDING_LAYER - hide.button.icon_state = "template_active" - - for(var/obj/item/W in oldXeno.contents) //Drop stuff - oldXeno.drop_inv_item_on_ground(W) - - oldXeno.empty_gut() - - if(IS_XENO_LEADER(oldXeno)) - hive.replace_hive_leader(oldXeno, src) - // Only handle free slots if the xeno is not in tdome - if(!is_admin_level(z)) + if(hive && !is_admin_level(z)) var/selected_caste = GLOB.xeno_datum_list[caste_type]?.type hive.used_slots[selected_caste]++ - if(round_statistics && !statistic_exempt) - round_statistics.track_new_participant(faction, 1) - generate_name() + //Statistics + var/area/current_area = get_area(src) + if(current_area && current_area.statistic_exempt) + statistic_exempt = TRUE + if(GLOB.round_statistics && !statistic_exempt) + GLOB.round_statistics.track_new_participant(faction, 1) // This can happen if a xeno gets made before the game starts if (hive && hive.hive_ui) hive.hive_ui.update_all_xeno_data() - job = caste.caste_type // Used for tracking the caste playtime Decorate() RegisterSignal(src, COMSIG_MOB_SCREECH_ACT, PROC_REF(handle_screech_act)) @@ -515,7 +504,11 @@ if(queen.can_not_harm(src)) return COMPONENT_SCREECH_ACT_CANCEL -/mob/living/carbon/xenomorph/proc/add_minimap_marker(flags = MINIMAP_FLAG_XENO) +/// Adds a minimap marker for this xeno using the provided flags. +/// If flags is 0, it will use get_minimap_flag_for_faction for this xeno +/mob/living/carbon/xenomorph/proc/add_minimap_marker(flags) + if(!flags) + flags = get_minimap_flag_for_faction(hivenumber) if(IS_XENO_LEADER(src)) SSminimaps.add_marker(src, z, hud_flags = flags, given_image = caste.get_minimap_icon(), overlay_iconstates = list(caste.minimap_leadered_overlay)) return @@ -536,7 +529,7 @@ /mob/living/carbon/xenomorph/proc/fire_immune(mob/living/L) SIGNAL_HANDLER - if(L.fire_reagent?.fire_penetrating && !burrow) + if(L.fire_reagent?.fire_penetrating && !HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) return return COMPONENT_CANCEL_IGNITION @@ -549,27 +542,21 @@ . = COMPONENT_NO_BURN // Burrowed xenos also cannot be ignited - if((caste.fire_immunity & FIRE_IMMUNITY_NO_IGNITE) || burrow) + if((caste.fire_immunity & FIRE_IMMUNITY_NO_IGNITE) || HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) . |= COMPONENT_NO_IGNITE if(caste.fire_immunity & FIRE_IMMUNITY_XENO_FRENZY) . |= COMPONENT_XENO_FRENZY +//Off-load this proc so it can be called freely +//Since Xenos change names like they change shoes, we need somewhere to hammer in all those legos +//We set their name first, then update their real_name AND their mind name //Off-load this proc so it can be called freely //Since Xenos change names like they change shoes, we need somewhere to hammer in all those legos //We set their name first, then update their real_name AND their mind name /mob/living/carbon/xenomorph/proc/generate_name() //We don't have a nicknumber yet, assign one to stick with us if(!nicknumber) - var/tempnumber = rand(1, 999) - var/list/numberlist = list() - for(var/mob/living/carbon/xenomorph/X in GLOB.xeno_mob_list) - numberlist += X.nicknumber - - while(tempnumber in numberlist) - tempnumber = rand(1, 999) - - nicknumber = tempnumber - + generate_and_set_nicknumber() // Even if we don't have the hive datum we usually still have the hive number var/datum/hive_status/in_hive = hive if(!in_hive) @@ -578,12 +565,10 @@ //Im putting this in here, because this proc gets called when a player inhabits a SSD xeno and it needs to go somewhere (sorry) hud_set_marks() - handle_name(in_hive) - -/mob/living/carbon/xenomorph/proc/handle_name(datum/hive_status/in_hive) var/name_prefix = in_hive.prefix var/name_client_prefix = "" var/name_client_postfix = "" + var/number_decorator = "" if(client) name_client_prefix = "[(client.xeno_prefix||client.xeno_postfix) ? client.xeno_prefix : "XX"]-" name_client_postfix = client.xeno_postfix ? ("-"+client.xeno_postfix) : "" @@ -594,9 +579,12 @@ var/age_display = show_age_prefix ? age_prefix : "" var/name_display = "" + // Rare easter egg + if(nicknumber == 666) + number_decorator = "Infernal " if(show_name_numbers) name_display = show_only_numbers ? " ([nicknumber])" : " ([name_client_prefix][nicknumber][name_client_postfix])" - name = "[name_prefix][age_display][caste.display_name || caste.caste_type][name_display]" + name = "[name_prefix][number_decorator][age_display][caste.display_name || caste.caste_type][name_display]" //Update linked data so they show up properly change_real_name(src, name) @@ -714,11 +702,11 @@ built_structures = null - vis_contents -= wound_icon_carrier - QDEL_NULL(wound_icon_carrier) - if(backpack_icon_carrier) - vis_contents -= backpack_icon_carrier - QDEL_NULL(backpack_icon_carrier) + vis_contents -= wound_icon_holder + QDEL_NULL(wound_icon_holder) + if(backpack_icon_holder) + vis_contents -= backpack_icon_holder + QDEL_NULL(backpack_icon_holder) QDEL_NULL(iff_tag) @@ -741,7 +729,7 @@ if(SEND_SIGNAL(AM, COMSIG_MOVABLE_XENO_START_PULLING, src) & COMPONENT_ALLOW_PULL) return do_pull(AM, lunge, no_msg) - if(burrow) + if(HAS_TRAIT(src,TRAIT_ABILITY_BURROWED)) return if(!isliving(AM)) return FALSE @@ -792,7 +780,7 @@ //and display them add_to_all_mob_huds() - var/datum/mob_hud/MH = huds[MOB_HUD_XENO_INFECTION] + var/datum/mob_hud/MH = GLOB.huds[MOB_HUD_XENO_INFECTION] MH.add_hud_to(src, src) @@ -816,23 +804,17 @@ /mob/living/carbon/xenomorph/proc/set_hive_and_update(new_hivenumber = XENO_HIVE_NORMAL) var/datum/hive_status/new_hive = GLOB.hive_datum[new_hivenumber] if(!new_hive) - return + return FALSE - for(var/T in _status_traits) // They can't keep getting away with this!!! - REMOVE_TRAIT(src, T, TRAIT_SOURCE_HIVE) + for(var/trait in _status_traits) // They can't keep getting away with this!!! + REMOVE_TRAIT(src, trait, TRAIT_SOURCE_HIVE) new_hive.add_xeno(src) - for(var/T in new_hive.hive_inherant_traits) - ADD_TRAIT(src, T, TRAIT_SOURCE_HIVE) + for(var/trait in new_hive.hive_inherant_traits) + ADD_TRAIT(src, trait, TRAIT_SOURCE_HIVE) - if(istype(src, /mob/living/carbon/xenomorph/larva)) - var/mob/living/carbon/xenomorph/larva/L = src - L.update_icons() // larva renaming done differently - else - generate_name() - if(istype(src, /mob/living/carbon/xenomorph/queen)) - update_living_queens() + generate_name() lock_evolve = FALSE banished = FALSE @@ -843,6 +825,9 @@ // Update the hive status UI new_hive.hive_ui.update_all_xeno_data() + return TRUE + + //*********************************************************// //********************Mutator functions********************// //*********************************************************// @@ -941,8 +926,9 @@ if(is_zoomed) zoom_out() if(iscarrier(src)) - huggers_max = caste.huggers_max - eggs_max = caste.eggs_max + var/mob/living/carbon/xenomorph/carrier/carrier = src + carrier.huggers_max = caste.huggers_max + carrier.eggs_max = caste.eggs_max need_weeds = mutators.need_weeds @@ -1080,7 +1066,7 @@ /mob/living/carbon/xenomorph/handle_blood_splatter(splatter_dir, duration) var/color_override if(special_blood) - var/datum/reagent/D = chemical_reagents_list[special_blood] + var/datum/reagent/D = GLOB.chemical_reagents_list[special_blood] if(D) color_override = D.color new /obj/effect/temp_visual/dir_setting/bloodsplatter/xenosplatter(loc, splatter_dir, duration, color_override) @@ -1109,3 +1095,16 @@ SPAN_WARNING("You squeeze and scuttle underneath [current_structure]."), max_distance = 5) forceMove(current_structure.loc) return TRUE + +///Generate a new unused nicknumber for the current hive, if hive doesn't exist return 0 +/mob/living/carbon/xenomorph/proc/generate_and_set_nicknumber() + if(!hive) + //If hive doesn't exist make it 0 + nicknumber = 0 + return + var/datum/hive_status/hive_status = hive + if(length(hive_status.available_nicknumbers)) + nicknumber = pick_n_take(hive_status.available_nicknumbers) + else + //If we somehow use all 999 numbers fallback on 0 + nicknumber = 0 diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/ability_helper_procs.dm b/code/modules/mob/living/carbon/xenomorph/abilities/ability_helper_procs.dm index 180f3f1126ae..35024d7304af 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/ability_helper_procs.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/ability_helper_procs.dm @@ -11,7 +11,7 @@ to_chat(src, SPAN_WARNING("[O] is too far away.")) return - if(!isturf(loc) || burrow) + if(!isturf(loc) || HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) to_chat(src, SPAN_WARNING("You can't melt [O] from here!")) return @@ -219,7 +219,7 @@ /mob/living/carbon/xenomorph/proc/zoom_out() if(!client) return - client.change_view(world_view_size) + client.change_view(GLOB.world_view_size) client.pixel_x = 0 client.pixel_y = 0 is_zoomed = 0 diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_abilities.dm index 9472008d6449..4430a1619e03 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_abilities.dm @@ -68,7 +68,7 @@ ability_name = "Acid Shroud" action_icon_state = "acid_shroud" action_type = XENO_ACTION_ACTIVATE - ability_primacy = XENO_PRIMARY_ACTION_4 + ability_primacy = XENO_PRIMARY_ACTION_5 plasma_cost = 10 macro_path = /datum/action/xeno_action/verb/verb_acid_shroud /// Allows the sound to play. Flipped to false when sound is triggered and true after a timer. This prevents soundspam @@ -86,30 +86,6 @@ /// Duration for the cooldown of abilities affected by acid shroud var/cooldown_duration = 30 SECONDS -/datum/action/xeno_action/onclick/dump_acid - name = "Dump Acid" - ability_name = "dump acid" - action_icon_state = "dump_acid" - plasma_cost = 10 - macro_path = /datum/action/xeno_action/verb/verb_dump_acid - action_type = XENO_ACTION_ACTIVATE - ability_primacy = XENO_PRIMARY_ACTION_4 - xeno_cooldown = 34 SECONDS - - var/buffs_duration = 6 SECONDS - var/cooldown_duration = 30 SECONDS - - var/speed_buff_amount = 0.5 - var/movespeed_buff_applied = FALSE - - /// List of types of actions to place on 20-second CD,if you ever want to subtype this for a strain or whatever, just change this var on the subtype - var/action_types_to_cd = list( - /datum/action/xeno_action/activable/xeno_spit/bombard, - /datum/action/xeno_action/onclick/dump_acid, - /datum/action/xeno_action/onclick/toggle_long_range/boiler, - /datum/action/xeno_action/activable/spray_acid/boiler, - ) - //////////////////////////// Trapper boiler abilities /datum/action/xeno_action/activable/boiler_trap diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_powers.dm index 6748b662b118..0fcdbf47a695 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_powers.dm @@ -1,13 +1,13 @@ -/datum/action/xeno_action/activable/acid_lance/use_ability(atom/A) - var/mob/living/carbon/xenomorph/X = owner +/datum/action/xeno_action/activable/acid_lance/use_ability(atom/affected_atom) + var/mob/living/carbon/xenomorph/xeno = owner - if (!istype(X) || !X.check_state()) + if (!istype(xeno) || !xeno.check_state()) return if (!activated_once && !action_cooldown_check()) return - if(!A || A.layer >= FLY_LAYER || !isturf(X.loc)) + if(!affected_atom || affected_atom.layer >= FLY_LAYER || !isturf(xeno.loc)) return if (!activated_once) @@ -16,8 +16,8 @@ if (!check_and_use_plasma_owner()) return - X.create_empower() - X.visible_message(SPAN_XENODANGER("[X] starts to gather its acid for a massive blast!"), SPAN_XENODANGER("You start to gather your acid for a massive blast!")) + xeno.create_empower() + xeno.visible_message(SPAN_XENODANGER("[xeno] starts to gather its acid for a massive blast!"), SPAN_XENODANGER("You start to gather your acid for a massive blast!")) activated_once = TRUE stack() addtimer(CALLBACK(src, PROC_REF(timeout)), max_stacks*stack_time + time_after_max_before_end) @@ -29,18 +29,18 @@ var/range = base_range + stacks*range_per_stack var/damage = base_damage + stacks*damage_per_stack var/turfs_visited = 0 - for (var/turf/T in getline2(get_turf(X), A)) - if(T.density || T.opacity) + for (var/turf/turf in getline2(get_turf(xeno), affected_atom)) + if(turf.density || turf.opacity) break var/should_stop = FALSE - for(var/obj/structure/S in T) - if(istype(S, /obj/structure/window/framed)) - var/obj/structure/window/framed/W = S - if(!W.unslashable) - W.deconstruct(disassembled = FALSE) + for(var/obj/structure/structure in turf) + if(istype(structure, /obj/structure/window/framed)) + var/obj/structure/window/framed/window_frame = structure + if(!window_frame.unslashable) + window_frame.deconstruct(disassembled = FALSE) - if(S.opacity) + if(structure.opacity) should_stop = TRUE break @@ -52,15 +52,15 @@ turfs_visited++ - new /obj/effect/xenomorph/acid_damage_delay(T, damage, 7, FALSE, "You are blasted with a stream of high-velocity acid!", X) + new /obj/effect/xenomorph/acid_damage_delay(turf, damage, 7, FALSE, "You are blasted with a stream of high-velocity acid!", xeno) - X.visible_message(SPAN_XENODANGER("[X] fires a massive blast of acid at [A]!"), SPAN_XENODANGER("You fire a massive blast of acid at [A]!")) + xeno.visible_message(SPAN_XENODANGER("[xeno] fires a massive blast of acid at [affected_atom]!"), SPAN_XENODANGER("You fire a massive blast of acid at [affected_atom]!")) remove_stack_effects("You feel your speed return to normal!") return TRUE /datum/action/xeno_action/activable/acid_lance/proc/stack() - var/mob/living/carbon/xenomorph/X = owner - if (!istype(X)) + var/mob/living/carbon/xenomorph/xeno = owner + if (!istype(xeno)) return if (!activated_once) @@ -68,31 +68,31 @@ stacks = min(max_stacks, stacks + 1) if (stacks != max_stacks) - X.speed_modifier += movespeed_per_stack + xeno.speed_modifier += movespeed_per_stack movespeed_nerf_applied += movespeed_per_stack - X.recalculate_speed() + xeno.recalculate_speed() addtimer(CALLBACK(src, PROC_REF(stack)), stack_time) return else - to_chat(X, SPAN_XENOHIGHDANGER("You have charged your acid lance to maximum!")) + to_chat(xeno, SPAN_XENOHIGHDANGER("You have charged your acid lance to maximum!")) return /datum/action/xeno_action/activable/acid_lance/proc/remove_stack_effects(message = null) - var/mob/living/carbon/xenomorph/X = owner + var/mob/living/carbon/xenomorph/xeno = owner - if (!istype(X)) + if (!istype(xeno)) return if (stacks <= 0) return if (message) - to_chat(X, SPAN_XENODANGER(message)) + to_chat(xeno, SPAN_XENODANGER(message)) stacks = 0 - X.speed_modifier -= movespeed_nerf_applied + xeno.speed_modifier -= movespeed_nerf_applied movespeed_nerf_applied = 0 - X.recalculate_speed() + xeno.recalculate_speed() /datum/action/xeno_action/activable/acid_lance/proc/timeout() if (activated_once) @@ -103,7 +103,7 @@ /datum/action/xeno_action/activable/acid_lance/action_cooldown_check() return (activated_once || ..()) -/datum/action/xeno_action/activable/xeno_spit/bombard/use_ability(atom/A) +/datum/action/xeno_action/activable/xeno_spit/bombard/use_ability(atom/affected_atom) . = ..() var/mob/living/carbon/xenomorph/xeno = owner if(!action_cooldown_check()) // activate c/d only if we already spit @@ -114,7 +114,7 @@ xeno_action.apply_cooldown_override(cooldown_duration) -/datum/action/xeno_action/onclick/acid_shroud/use_ability(atom/atom) +/datum/action/xeno_action/onclick/acid_shroud/use_ability(atom/affected_atom) var/datum/effect_system/smoke_spread/xeno_acid/spicy_gas var/mob/living/carbon/xenomorph/xeno = owner if (!isxeno(owner)) @@ -125,14 +125,18 @@ if (!xeno.check_state()) return + if(sound_play) playsound(xeno,"acid_strike", 35, 1) sound_play = FALSE addtimer(VARSET_CALLBACK(src, sound_play, TRUE), 2 SECONDS) + if (!do_after(xeno, xeno.ammo.spit_windup/6.5, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_HOSTILE, numticks = 2)) /// 0.7 seconds to_chat(xeno, SPAN_XENODANGER("You decide to cancel your gas shroud.")) return + playsound(xeno,"acid_sizzle", 50, 1) + if(xeno.ammo == GLOB.ammo_list[/datum/ammo/xeno/boiler_gas/acid]) spicy_gas = new /datum/effect_system/smoke_spread/xeno_acid else if(xeno.ammo == GLOB.ammo_list[/datum/ammo/xeno/boiler_gas]) @@ -143,6 +147,7 @@ spicy_gas.set_up(1, 0, get_turf(xeno), null, 6, new_cause_data = cause_data) spicy_gas.start() to_chat(xeno, SPAN_XENOHIGHDANGER("You dump your acid through your pores, creating a shroud of gas!")) + for (var/action_type in action_types_to_cd) var/datum/action/xeno_action/xeno_action = get_xeno_action_by_type(xeno, action_type) if (!istype(xeno_action)) @@ -153,57 +158,35 @@ apply_cooldown() return ..() -/datum/action/xeno_action/onclick/dump_acid/proc/remove_speed_buff() - if (movespeed_buff_applied && isxeno(owner)) - var/mob/living/carbon/xenomorph/xeno = owner - xeno.speed_modifier += speed_buff_amount - xeno.recalculate_speed() - movespeed_buff_applied = FALSE - UnregisterSignal(owner, COMSIG_MOB_MOVE_OR_LOOK) - -/datum/action/xeno_action/onclick/dump_acid/proc/handle_mob_move_or_look(mob/living/carbon/xenomorph/mover, actually_moving, direction, specific_direction) - SIGNAL_HANDLER - - if(!actually_moving) - return - - var/obj/effect/particle_effect/smoke/xeno_burn/smoke_effect = new(get_turf(mover), 1, create_cause_data("dumped acid gas", mover)) - smoke_effect.time_to_live = 3 - smoke_effect.spread_speed = 1000000 - -/datum/action/xeno_action/onclick/dump_acid/remove_from() - remove_speed_buff() - ..() - -/datum/action/xeno_action/onclick/shift_spits/boiler/use_ability(atom/A) +/datum/action/xeno_action/onclick/shift_spits/boiler/use_ability(atom/affected_atom) . = ..() apply_cooldown() /////////////////////////////// Trapper boiler powers -/datum/action/xeno_action/activable/boiler_trap/use_ability(atom/A) - var/mob/living/carbon/xenomorph/X = owner +/datum/action/xeno_action/activable/boiler_trap/use_ability(atom/affected_atom) + var/mob/living/carbon/xenomorph/xeno = owner - if (!istype(X)) + if (!istype(xeno)) return if (!action_cooldown_check()) return - if (!X.check_state()) + if (!xeno.check_state()) return - if (!can_see(X, A, TRAPPER_VIEWRANGE)) - to_chat(X, SPAN_XENODANGER("You cannot see that location!")) + if (!can_see(xeno, affected_atom, TRAPPER_VIEWRANGE)) + to_chat(xeno, SPAN_XENODANGER("You cannot see that location!")) return if (!check_and_use_plasma_owner()) return // 5-long line of turfs orthogonal to the line between us and our target as precisely as we can figure it - var/dir_between = Get_Compass_Dir(X, A) + var/dir_between = Get_Compass_Dir(xeno, affected_atom) var/list/target_turfs = list() - var/target_turf = get_turf(A) + var/target_turf = get_turf(affected_atom) var/left_turf = get_step(target_turf, turn(dir_between, -90)) var/right_turf = get_step(target_turf, turn(dir_between, 90)) target_turfs += target_turf @@ -212,70 +195,70 @@ target_turfs += get_step(left_turf, turn(dir_between, -90)) target_turfs += get_step(right_turf, turn(dir_between, 90)) - for (var/turf/T in target_turfs) - if (!istype(T) || T.density) + for (var/turf/turf in target_turfs) + if (!istype(turf) || turf.density) continue var/trap_found = FALSE - for (var/obj/effect/alien/resin/boilertrap/BT in T) + for (var/obj/effect/alien/resin/boilertrap/boiler_trap in turf) trap_found = TRUE break if (trap_found) continue - var/obj/effect/alien/resin/boilertrap/BT + var/obj/effect/alien/resin/boilertrap/boiler_trap if(empowered) - BT = new /obj/effect/alien/resin/boilertrap/empowered(T, X) + boiler_trap = new /obj/effect/alien/resin/boilertrap/empowered(turf, xeno) else - BT = new /obj/effect/alien/resin/boilertrap/(T, X) - QDEL_IN(BT, trap_ttl) + boiler_trap = new /obj/effect/alien/resin/boilertrap(turf, xeno) + QDEL_IN(boiler_trap, trap_ttl) if(empowered) empowered = FALSE empowering_charge_counter = 0 button.overlays -= "+empowered" - var/datum/action/xeno_action/activable/acid_mine/mine = get_xeno_action_by_type(X, /datum/action/xeno_action/activable/acid_mine) + var/datum/action/xeno_action/activable/acid_mine/mine = get_xeno_action_by_type(xeno, /datum/action/xeno_action/activable/acid_mine) if(!mine.empowered) mine.empowered = TRUE mine.button.overlays += "+empowered" - to_chat(X, SPAN_XENODANGER("You tap in your reserves to prepare a stronger [mine.name]!")) + to_chat(xeno, SPAN_XENODANGER("You tap in your reserves to prepare a stronger [mine.name]!")) apply_cooldown() return ..() -/datum/action/xeno_action/activable/acid_mine/use_ability(atom/A) - var/mob/living/carbon/xenomorph/X = owner +/datum/action/xeno_action/activable/acid_mine/use_ability(atom/affected_atom) + var/mob/living/carbon/xenomorph/xeno = owner - if (!istype(X)) + if (!istype(xeno)) return - if (!X.check_state()) + if (!xeno.check_state()) return if (!action_cooldown_check()) return - if(!A || A.layer >= FLY_LAYER || !isturf(X.loc)) + if(!affected_atom || affected_atom.layer >= FLY_LAYER || !isturf(xeno.loc)) return - if(!check_clear_path_to_target(X, A, TRUE, TRAPPER_VIEWRANGE)) - to_chat(X, SPAN_XENOWARNING("Something is in the way!")) + if(!check_clear_path_to_target(xeno, affected_atom, TRUE, TRAPPER_VIEWRANGE)) + to_chat(xeno, SPAN_XENOWARNING("Something is in the way!")) return if (!check_and_use_plasma_owner()) return - var/turf/T = get_turf(A) + var/turf/turf = get_turf(affected_atom) var/acid_bolt_message = "a bolt of acid" if(empowered) acid_bolt_message = "a powerful bolt of acid" - X.visible_message(SPAN_XENODANGER("[X] fires " + acid_bolt_message + " at [A]!"), SPAN_XENODANGER("You fire " + acid_bolt_message + " at [A]!")) - new /obj/effect/xenomorph/acid_damage_delay/boiler_landmine(T, damage, delay, empowered, "You are blasted with " + acid_bolt_message + "!", X, ) + xeno.visible_message(SPAN_XENODANGER("[xeno] fires " + acid_bolt_message + " at [affected_atom]!"), SPAN_XENODANGER("You fire " + acid_bolt_message + " at [affected_atom]!")) + new /obj/effect/xenomorph/acid_damage_delay/boiler_landmine(turf, damage, delay, empowered, "You are blasted with " + acid_bolt_message + "!", xeno) - for (var/turf/targetTurf in orange(1, T)) - new /obj/effect/xenomorph/acid_damage_delay/boiler_landmine(targetTurf, damage, delay, empowered, "You are blasted with a " + acid_bolt_message + "!", X) + for (var/turf/target_turf in orange(1, turf)) + new /obj/effect/xenomorph/acid_damage_delay/boiler_landmine(target_turf, damage, delay, empowered, "You are blasted with a " + acid_bolt_message + "!", xeno) if(empowered) empowered = FALSE @@ -284,7 +267,7 @@ apply_cooldown() return ..() -/datum/action/xeno_action/activable/acid_shotgun/use_ability(atom/target) +/datum/action/xeno_action/activable/acid_shotgun/use_ability(atom/affected_atom) var/mob/living/carbon/xenomorph/xeno = owner if (!istype(xeno)) return @@ -292,12 +275,12 @@ if (!action_cooldown_check()) return - if(!target || target.layer >= FLY_LAYER || !isturf(xeno.loc) || !xeno.check_state()) + if(!affected_atom || affected_atom.layer >= FLY_LAYER || !isturf(xeno.loc) || !xeno.check_state()) return - xeno.visible_message(SPAN_XENOWARNING("The [xeno] fires a blast of acid at [target]!"), SPAN_XENOWARNING("You fire a blast of acid at [target]!")) + xeno.visible_message(SPAN_XENOWARNING("The [xeno] fires a blast of acid at [affected_atom]!"), SPAN_XENOWARNING("You fire a blast of acid at [affected_atom]!")) - var/turf/target_turf = locate(target.x, target.y, target.z) + var/turf/target_turf = locate(affected_atom.x, affected_atom.y, affected_atom.z) var/obj/projectile/proj = new(xeno.loc, create_cause_data("acid shotgun", xeno)) var/datum/ammo/ammoDatum = new ammo_type() @@ -335,7 +318,7 @@ bonus_projectiles_amount = 0 max_range = 4 -/datum/action/xeno_action/activable/tail_stab/boiler/use_ability(atom/A) +/datum/action/xeno_action/activable/tail_stab/boiler/use_ability(atom/affected_atom) var/mob/living/carbon/xenomorph/stabbing_xeno = owner var/target = ..() if(iscarbon(target)) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_abilities.dm index 84b6c5ff5fef..747a3f90a691 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_abilities.dm @@ -11,7 +11,7 @@ /datum/action/xeno_action/activable/burrow/use_ability(atom/A) var/mob/living/carbon/xenomorph/X = owner - if(X.burrow) + if(HAS_TRAIT(X, TRAIT_ABILITY_BURROWED)) X.tunnel(get_turf(A)) else X.burrow() diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_powers.dm index 49558ee83607..3276705ce9b7 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_powers.dm @@ -35,7 +35,6 @@ return // TODO Make immune to all damage here. to_chat(src, SPAN_XENOWARNING("You burrow yourself into the ground.")) - burrow = TRUE invisibility = 101 anchored = TRUE if(caste.fire_immunity == FIRE_IMMUNITY_NONE) @@ -52,20 +51,19 @@ process_burrow() /mob/living/carbon/xenomorph/proc/process_burrow() - if(!burrow) + if(!HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) return if(world.time > burrow_timer && !tunnel) burrow_off() if(observed_xeno) overwatch(observed_xeno, TRUE) - if(burrow) + if(HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) addtimer(CALLBACK(src, PROC_REF(process_burrow)), 1 SECONDS) /mob/living/carbon/xenomorph/proc/burrow_off() if(caste_type && GLOB.xeno_datum_list[caste_type]) caste = GLOB.xeno_datum_list[caste_type] to_chat(src, SPAN_NOTICE("You resurface.")) - burrow = FALSE if(caste.fire_immunity == FIRE_IMMUNITY_NONE) UnregisterSignal(src, list( COMSIG_LIVING_PREIGNITION, @@ -85,7 +83,7 @@ /mob/living/carbon/xenomorph/proc/do_burrow_cooldown() used_burrow = FALSE - if(burrow) + if(HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) to_chat(src, SPAN_NOTICE("You can now surface.")) for(var/X in actions) var/datum/action/act = X @@ -96,7 +94,7 @@ if(!check_state()) return - if(!burrow) + if(!HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) to_chat(src, SPAN_NOTICE("You must be burrowed to do this.")) return @@ -179,6 +177,7 @@ return var/new_name = strip_html(input("Change the description of the tunnel:", "Tunnel Description") as text|null) + new_name = replace_non_alphanumeric_plus(new_name) if(new_name) new_name = "[new_name] ([get_area_name(T)])" log_admin("[key_name(src)] has renamed the tunnel \"[T.tunnel_desc]\" as \"[new_name]\".") @@ -191,7 +190,7 @@ return !xeno.used_tremor /mob/living/carbon/xenomorph/proc/tremor() //More support focused version of crusher earthquakes. - if(burrow || is_ventcrawling) + if(HAS_TRAIT(src, TRAIT_ABILITY_BURROWED) || is_ventcrawling) to_chat(src, SPAN_XENOWARNING("You must be above ground to do this.")) return diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/defender/defender_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/defender/defender_powers.dm index 8a36e4d5cdf7..0709f2b17717 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/defender/defender_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/defender/defender_powers.dm @@ -51,7 +51,7 @@ if(!check_and_use_plasma_owner()) return - if(fendy.fortify && !fendy.steelcrest) + if(fendy.fortify && !(fendy.mutation_type == DEFENDER_STEELCREST)) to_chat(fendy, SPAN_XENOWARNING("You cannot use headbutt while fortified.")) return @@ -78,7 +78,9 @@ SPAN_XENOWARNING("You ram [carbone] with your armored crest!")) if(carbone.stat != DEAD && (!(carbone.status_flags & XENO_HOST) || !HAS_TRAIT(carbone, TRAIT_NESTED)) ) - var/h_damage = 30 - (fendy.crest_defense * 10) + (fendy.steelcrest * 7.5) //30 if crest up, 20 if down, plus 7.5 + var/h_damage = 30 - (fendy.crest_defense * 10) + if(fendy.mutation_type == DEFENDER_STEELCREST) + h_damage += 7.5 carbone.apply_armoured_damage(get_xeno_damage_slash(carbone, h_damage), ARMOR_MELEE, BRUTE, "chest", 5) var/facing = get_dir(fendy, carbone) @@ -159,7 +161,7 @@ if (!istype(xeno)) return - if(xeno.crest_defense && xeno.steelcrest) + if(xeno.crest_defense && xeno.mutation_type == DEFENDER_STEELCREST) to_chat(src, SPAN_XENOWARNING("You cannot fortify while your crest is already down!")) return @@ -207,7 +209,7 @@ if(fortify_state) to_chat(X, SPAN_XENOWARNING("You tuck yourself into a defensive stance.")) - if(X.steelcrest) + if(X.mutation_type == DEFENDER_STEELCREST) X.armor_deflection_buff += 10 X.armor_explosive_buff += 60 X.ability_speed_modifier += 3 @@ -227,7 +229,7 @@ to_chat(X, SPAN_XENOWARNING("You resume your normal stance.")) REMOVE_TRAIT(X, TRAIT_IMMOBILIZED, TRAIT_SOURCE_ABILITY("Fortify")) X.anchored = FALSE - if(X.steelcrest) + if(X.mutation_type == DEFENDER_STEELCREST) X.armor_deflection_buff -= 10 X.armor_explosive_buff -= 60 X.ability_speed_modifier -= 3 diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/general_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/general_abilities.dm index 29172fd9b1d3..00a7ceaba97e 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/general_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/general_abilities.dm @@ -541,6 +541,14 @@ hide_from(owner) +/datum/action/xeno_action/onclick/tacmap/can_use_action() + if(!owner) + return FALSE + var/mob/living/carbon/xenomorph/xeno = owner + if(xeno.is_mob_incapacitated() || xeno.dazed) + return FALSE + return TRUE + /datum/action/xeno_action/onclick/tacmap/use_ability(atom/target) var/mob/living/carbon/xenomorph/xeno = owner xeno.xeno_tacmap() diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm index 250d024041a4..74a46a30e9ba 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm @@ -9,7 +9,7 @@ return if(!xeno.check_state()) return - if(xeno.burrow) + if(HAS_TRAIT(xeno, TRAIT_ABILITY_BURROWED)) return var/turf/turf = xeno.loc @@ -89,7 +89,7 @@ to_chat(src, SPAN_WARNING("You cannot rest while fortified!")) return - if(burrow) + if(HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) to_chat(src, SPAN_WARNING("You cannot rest while burrowed!")) return @@ -526,7 +526,7 @@ if (istype(X, /mob/living/carbon/xenomorph/burrower)) var/mob/living/carbon/xenomorph/burrower/B = X - if (B.burrow) + if (HAS_TRAIT(B, TRAIT_ABILITY_BURROWED)) return var/turf/T = get_turf(X) @@ -570,6 +570,13 @@ to_chat(X, SPAN_XENOWARNING("You can only shape on weeds. Find some resin before you start building!")) return FALSE + // This snowflake check exists because stairs specifically are indestructable, tile-covering, and cannot be moved, which allows resin holes to be + // planted under them without any possible counterplay. In the future if resin holes stop being able to be hidden under objects, remove this check. + var/obj/structure/stairs/staircase = locate() in src + if(staircase) + to_chat(X, SPAN_XENOWARNING("You cannot make a hole beneath a staircase!")) + return FALSE + if(alien_weeds.linked_hive.hivenumber != X.hivenumber) to_chat(X, SPAN_XENOWARNING("These weeds don't belong to your hive!")) return FALSE @@ -846,7 +853,7 @@ for(var/mob/living/L in T) to_chat(L, SPAN_XENOHIGHDANGER("You see a massive ball of acid flying towards you!")) - for(var/dirn in alldirs) + for(var/dirn in GLOB.alldirs) recursive_spread(get_step(T, dirn), dist_left - 1, orig_depth) @@ -905,7 +912,7 @@ /datum/action/xeno_action/activable/tail_stab/use_ability(atom/targetted_atom) var/mob/living/carbon/xenomorph/stabbing_xeno = owner - if(stabbing_xeno.burrow || stabbing_xeno.is_ventcrawling) + if(HAS_TRAIT(stabbing_xeno, TRAIT_ABILITY_BURROWED) || stabbing_xeno.is_ventcrawling) to_chat(stabbing_xeno, SPAN_XENOWARNING("You must be above ground to do this.")) return diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/lurker/lurker_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/lurker/lurker_abilities.dm index 0c9358119def..2facee1edc9d 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/lurker/lurker_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/lurker/lurker_abilities.dm @@ -30,20 +30,20 @@ if (istype(lurker_invis)) lurker_invis.invisibility_off() -/datum/action/xeno_action/activable/pounce/lurker/additional_effects(mob/living/L) - var/mob/living/carbon/xenomorph/X = owner - if (!istype(X)) +/datum/action/xeno_action/activable/pounce/lurker/additional_effects(mob/living/living_mob) + var/mob/living/carbon/xenomorph/xeno = owner + if (!istype(xeno)) return - if (X.mutation_type == LURKER_NORMAL) - RegisterSignal(X, COMSIG_XENO_SLASH_ADDITIONAL_EFFECTS_SELF, PROC_REF(remove_freeze), TRUE) // Suppresses runtime ever we pounce again before slashing + if (xeno.mutation_type == LURKER_NORMAL) + RegisterSignal(xeno, COMSIG_XENO_SLASH_ADDITIONAL_EFFECTS_SELF, PROC_REF(remove_freeze), TRUE) // Suppresses runtime ever we pounce again before slashing -/datum/action/xeno_action/activable/pounce/lurker/proc/remove_freeze(mob/living/carbon/xenomorph/X) +/datum/action/xeno_action/activable/pounce/lurker/proc/remove_freeze(mob/living/carbon/xenomorph/xeno) SIGNAL_HANDLER - var/datum/behavior_delegate/lurker_base/BD = X.behavior_delegate - if (istype(BD)) - UnregisterSignal(X, COMSIG_XENO_SLASH_ADDITIONAL_EFFECTS_SELF) + var/datum/behavior_delegate/lurker_base/behaviour_del = xeno.behavior_delegate + if (istype(behaviour_del)) + UnregisterSignal(xeno, COMSIG_XENO_SLASH_ADDITIONAL_EFFECTS_SELF) end_pounce_freeze() /datum/action/xeno_action/onclick/lurker_invisibility diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/lurker/lurker_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/lurker/lurker_powers.dm index 06c3a05cc0e6..0c2b226cb268 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/lurker/lurker_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/lurker/lurker_powers.dm @@ -208,6 +208,9 @@ xeno.visible_message(SPAN_XENOWARNING("\The [xeno] strikes the window with their tail!"), SPAN_XENOWARNING("You strike the window with your tail!")) apply_cooldown(cooldown_modifier = 0.5) return + if(current_structure.density) + to_chat(xeno, SPAN_WARNING("There's something blocking you from striking!")) + return if(!isxeno_human(hit_target) || xeno.can_not_harm(hit_target) || hit_target.stat == DEAD) xeno.visible_message(SPAN_XENOWARNING("\The [xeno] swipes their tail through the air!"), SPAN_XENOWARNING("You swipe your tail through the air!")) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_powers.dm index e836ac21cf61..85a9ee8f054b 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_powers.dm @@ -232,16 +232,16 @@ xeno_attack_delay(stabbing_xeno) return ..() -/datum/action/xeno_action/activable/prae_abduct/use_ability(atom/A) - var/mob/living/carbon/xenomorph/X = owner +/datum/action/xeno_action/activable/prae_abduct/use_ability(atom/atom) + var/mob/living/carbon/xenomorph/xeno = owner - if(!A || A.layer >= FLY_LAYER || !isturf(X.loc)) + if(!atom || atom.layer >= FLY_LAYER || !isturf(xeno.loc)) return - if(!action_cooldown_check() || X.action_busy) + if(!action_cooldown_check() || xeno.action_busy) return - if(!X.check_state()) + if(!xeno.check_state()) return if(!check_plasma_owner()) @@ -250,13 +250,13 @@ // Build our turflist var/list/turf/turflist = list() var/list/telegraph_atom_list = list() - var/facing = get_dir(X, A) - var/turf/T = X.loc - var/turf/temp = X.loc - for(var/x in 0 to max_distance) - temp = get_step(T, facing) - if(facing in diagonals) // check if it goes through corners - var/reverse_face = reverse_dir[facing] + var/facing = get_dir(xeno, atom) + var/turf/turf = xeno.loc + var/turf/temp = xeno.loc + for(var/distance in 0 to max_distance) + temp = get_step(turf, facing) + if(facing in GLOB.diagonals) // check if it goes through corners + var/reverse_face = GLOB.reverse_dir[facing] var/turf/back_left = get_step(temp, turn(reverse_face, 45)) var/turf/back_right = get_step(temp, turn(reverse_face, -45)) if((!back_left || back_left.density) && (!back_right || back_right.density)) @@ -265,98 +265,98 @@ break var/blocked = FALSE - for(var/obj/structure/S in temp) - if(S.opacity || ((istype(S, /obj/structure/barricade) || istype(S, /obj/structure/girder) && S.density || istype(S, /obj/structure/machinery/door)) && S.density)) + for(var/obj/structure/structure in temp) + if(structure.opacity || ((istype(structure, /obj/structure/barricade) || istype(structure, /obj/structure/girder) && structure.density || istype(structure, /obj/structure/machinery/door)) && structure.density)) blocked = TRUE break if(blocked) break - T = temp + turf = temp - if (T in turflist) + if (turf in turflist) break - turflist += T - facing = get_dir(T, A) - telegraph_atom_list += new /obj/effect/xenomorph/xeno_telegraph/brown/abduct_hook(T, windup) + turflist += turf + facing = get_dir(turf, atom) + telegraph_atom_list += new /obj/effect/xenomorph/xeno_telegraph/brown/abduct_hook(turf, windup) if(!length(turflist)) - to_chat(X, SPAN_XENOWARNING("You don't have any room to do your abduction!")) + to_chat(xeno, SPAN_XENOWARNING("You don't have any room to do your abduction!")) return - X.visible_message(SPAN_XENODANGER("\The [X]'s segmented tail starts coiling..."), SPAN_XENODANGER("You begin coiling your tail, aiming towards \the [A]...")) - X.emote("roar") + xeno.visible_message(SPAN_XENODANGER("\The [xeno]'s segmented tail starts coiling..."), SPAN_XENODANGER("You begin coiling your tail, aiming towards \the [atom]...")) + xeno.emote("roar") - var/throw_target_turf = get_step(X.loc, facing) + var/throw_target_turf = get_step(xeno.loc, facing) - ADD_TRAIT(X, TRAIT_IMMOBILIZED, TRAIT_SOURCE_ABILITY("Abduct")) - if(!do_after(X, windup, INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE, numticks = 1)) - to_chat(X, SPAN_XENOWARNING("You relax your tail.")) + ADD_TRAIT(xeno, TRAIT_IMMOBILIZED, TRAIT_SOURCE_ABILITY("Abduct")) + if(!do_after(xeno, windup, INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE, numticks = 1)) + to_chat(xeno, SPAN_XENOWARNING("You relax your tail.")) apply_cooldown() - for (var/obj/effect/xenomorph/xeno_telegraph/XT in telegraph_atom_list) - telegraph_atom_list -= XT - qdel(XT) + for (var/obj/effect/xenomorph/xeno_telegraph/xenotelegraph in telegraph_atom_list) + telegraph_atom_list -= xenotelegraph + qdel(xenotelegraph) - REMOVE_TRAIT(X, TRAIT_IMMOBILIZED, TRAIT_SOURCE_ABILITY("Abduct")) + REMOVE_TRAIT(xeno, TRAIT_IMMOBILIZED, TRAIT_SOURCE_ABILITY("Abduct")) return if(!check_and_use_plasma_owner()) return - REMOVE_TRAIT(X, TRAIT_IMMOBILIZED, TRAIT_SOURCE_ABILITY("Abduct")) + REMOVE_TRAIT(xeno, TRAIT_IMMOBILIZED, TRAIT_SOURCE_ABILITY("Abduct")) - playsound(get_turf(X), 'sound/effects/bang.ogg', 25, 0) - X.visible_message(SPAN_XENODANGER("\The [X] suddenly uncoils its tail, firing it towards [A]!"), SPAN_XENODANGER("You uncoil your tail, sending it out towards \the [A]!")) + playsound(get_turf(xeno), 'sound/effects/bang.ogg', 25, 0) + xeno.visible_message(SPAN_XENODANGER("\The [xeno] suddenly uncoils its tail, firing it towards [atom]!"), SPAN_XENODANGER("You uncoil your tail, sending it out towards \the [atom]!")) var/list/targets = list() for (var/turf/target_turf in turflist) - for (var/mob/living/carbon/H in target_turf) - if(!isxeno_human(H) || X.can_not_harm(H) || H.is_dead() || H.is_mob_incapacitated(TRUE)) + for (var/mob/living/carbon/target in target_turf) + if(!isxeno_human(target) || xeno.can_not_harm(target) || target.is_dead() || target.is_mob_incapacitated(TRUE) || target.mob_size >= MOB_SIZE_BIG) continue - targets += H + targets += target if (LAZYLEN(targets) == 1) - X.balloon_alert(X, "your tail catches and slows one target!", text_color = "#51a16c") + xeno.balloon_alert(xeno, "your tail catches and slows one target!", text_color = "#51a16c") else if (LAZYLEN(targets) == 2) - X.balloon_alert(X, "your tail catches and roots two targets!", text_color = "#51a16c") + xeno.balloon_alert(xeno, "your tail catches and roots two targets!", text_color = "#51a16c") else if (LAZYLEN(targets) >= 3) - X.balloon_alert(X, "your tail catches and stuns [LAZYLEN(targets)] targets!", text_color = "#51a16c") + xeno.balloon_alert(xeno, "your tail catches and stuns [LAZYLEN(targets)] targets!", text_color = "#51a16c") - for (var/mob/living/carbon/H in targets) - X.visible_message(SPAN_XENODANGER("\The [X]'s hooked tail coils itself around [H]!"), SPAN_XENODANGER("Your hooked tail coils itself around [H]!")) + for (var/mob/living/carbon/target in targets) + xeno.visible_message(SPAN_XENODANGER("\The [xeno]'s hooked tail coils itself around [target]!"), SPAN_XENODANGER("Your hooked tail coils itself around [target]!")) - H.apply_effect(0.2, WEAKEN) + target.apply_effect(0.2, WEAKEN) if (LAZYLEN(targets) == 1) - new /datum/effects/xeno_slow(H, X, , ,25) - H.apply_effect(1, SLOW) + new /datum/effects/xeno_slow(target, xeno, , ,25) + target.apply_effect(1, SLOW) else if (LAZYLEN(targets) == 2) - ADD_TRAIT(H, TRAIT_IMMOBILIZED, TRAIT_SOURCE_ABILITY("Abduct")) - if (ishuman(H)) - var/mob/living/carbon/human/Hu = H - Hu.update_xeno_hostile_hud() - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(unroot_human), H, TRAIT_SOURCE_ABILITY("Abduct")), get_xeno_stun_duration(H, 25)) - to_chat(H, SPAN_XENOHIGHDANGER("[X] has pinned you to the ground! You cannot move!")) - - H.set_effect(2, DAZE) + ADD_TRAIT(target, TRAIT_IMMOBILIZED, TRAIT_SOURCE_ABILITY("Abduct")) + if (ishuman(target)) + var/mob/living/carbon/human/target_human = target + target_human.update_xeno_hostile_hud() + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(unroot_human), target, TRAIT_SOURCE_ABILITY("Abduct")), get_xeno_stun_duration(target, 25)) + to_chat(target, SPAN_XENOHIGHDANGER("[xeno] has pinned you to the ground! You cannot move!")) + + target.set_effect(2, DAZE) else if (LAZYLEN(targets) >= 3) - H.apply_effect(get_xeno_stun_duration(H, 1.3), WEAKEN) - to_chat(H, SPAN_XENOHIGHDANGER("You are slammed into the other victims of [X]!")) + target.apply_effect(get_xeno_stun_duration(target, 1.3), WEAKEN) + to_chat(target, SPAN_XENOHIGHDANGER("You are slammed into the other victims of [xeno]!")) - shake_camera(H, 10, 1) + shake_camera(target, 10, 1) - var/obj/effect/beam/tail_beam = X.beam(H, "oppressor_tail", 'icons/effects/beam.dmi', 0.5 SECONDS, 8) + var/obj/effect/beam/tail_beam = xeno.beam(target, "oppressor_tail", 'icons/effects/beam.dmi', 0.5 SECONDS, 8) var/image/tail_image = image('icons/effects/status_effects.dmi', "hooked") - H.overlays += tail_image + target.overlays += tail_image - H.throw_atom(throw_target_turf, get_dist(throw_target_turf, H)-1, SPEED_VERY_FAST) + target.throw_atom(throw_target_turf, get_dist(throw_target_turf, target)-1, SPEED_VERY_FAST) qdel(tail_beam) // hook beam catches target, throws them back, is deleted (throw_atom has sleeps), then hook beam catches another target, repeat - addtimer(CALLBACK(src, /datum/action/xeno_action/activable/prae_abduct/proc/remove_tail_overlay, H, tail_image), 0.5 SECONDS) //needed so it can actually be seen as it gets deleted too quickly otherwise. + addtimer(CALLBACK(src, /datum/action/xeno_action/activable/prae_abduct/proc/remove_tail_overlay, target, tail_image), 0.5 SECONDS) //needed so it can actually be seen as it gets deleted too quickly otherwise. apply_cooldown() return ..() @@ -965,8 +965,8 @@ var/turf/temp = X.loc for(var/x in 0 to max_distance) temp = get_step(T, facing) - if(facing in diagonals) // check if it goes through corners - var/reverse_face = reverse_dir[facing] + if(facing in GLOB.diagonals) // check if it goes through corners + var/reverse_face = GLOB.reverse_dir[facing] var/turf/back_left = get_step(temp, turn(reverse_face, 45)) var/turf/back_right = get_step(temp, turn(reverse_face, -45)) if((!back_left || back_left.density) && (!back_right || back_right.density)) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm index 65ea443c133c..65769eac9cdf 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm @@ -102,7 +102,7 @@ else new_xeno.key = target_xeno.key if(new_xeno.client) - new_xeno.client.change_view(world_view_size) + new_xeno.client.change_view(GLOB.world_view_size) new_xeno.client.pixel_x = 0 new_xeno.client.pixel_y = 0 @@ -125,8 +125,8 @@ target_xeno.transfer_observers_to(new_xeno) - if(round_statistics && !new_xeno.statistic_exempt) - round_statistics.track_new_participant(target_xeno.faction, -1) //so an evolved xeno doesn't count as two. + if(GLOB.round_statistics && !new_xeno.statistic_exempt) + GLOB.round_statistics.track_new_participant(target_xeno.faction, -1) //so an evolved xeno doesn't count as two. SSround_recording.recorder.stop_tracking(target_xeno) SSround_recording.recorder.track_player(new_xeno) qdel(target_xeno) @@ -537,7 +537,7 @@ return var/obj/effect/alien/weeds/node/node - for(var/direction in cardinal) + for(var/direction in GLOB.cardinals) var/turf/weed_turf = get_step(T, direction) var/obj/effect/alien/weeds/W = locate() in weed_turf if(W && W.hivenumber == X.hivenumber && W.parent && !W.hibernate && !LinkBlocked(W, weed_turf, T)) @@ -698,5 +698,5 @@ set name = "View Xeno Tacmap" set desc = "This opens a tactical map, where you can see where every xenomorph is." set category = "Alien" - hive.tacmap.tgui_interact(src) + diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/ravager/ravager_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/ravager/ravager_powers.dm index 1834e05ac5b1..8e1a299f3269 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/ravager/ravager_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/ravager/ravager_powers.dm @@ -118,30 +118,30 @@ return FALSE // Supplemental behavior for our charge -/datum/action/xeno_action/activable/pounce/charge/additional_effects(mob/living/L) +/datum/action/xeno_action/activable/pounce/charge/additional_effects(mob/living/living) - var/mob/living/carbon/human/H = L - var/mob/living/carbon/xenomorph/X = owner - if(X.mutation_type != RAVAGER_NORMAL) + var/mob/living/carbon/human/human = living + var/mob/living/carbon/xenomorph/xeno = owner + if(xeno.mutation_type != RAVAGER_NORMAL) return - var/datum/behavior_delegate/ravager_base/BD = X.behavior_delegate - if(BD.empower_targets < BD.super_empower_threshold) + var/datum/behavior_delegate/ravager_base/behavior = xeno.behavior_delegate + if(behavior.empower_targets < behavior.super_empower_threshold) return - X.visible_message(SPAN_XENODANGER("The [X] uses its shield to bash [H] as it charges at them!"), SPAN_XENODANGER("You use your shield to bash [H] as you charge at them!")) - H.apply_effect(BD.knockdown_amount, WEAKEN) - H.attack_alien(X, rand(X.melee_damage_lower, X.melee_damage_upper)) + xeno.visible_message(SPAN_XENODANGER("The [xeno] uses its shield to bash [human] as it charges at them!"), SPAN_XENODANGER("You use your shield to bash [human] as you charge at them!")) + human.apply_effect(behavior.knockdown_amount, WEAKEN) + human.attack_alien(xeno, rand(xeno.melee_damage_lower, xeno.melee_damage_upper)) - var/facing = get_dir(X, H) - var/turf/T = X.loc - var/turf/temp = X.loc + var/facing = get_dir(xeno, human) + var/turf/turf = xeno.loc + var/turf/temp = xeno.loc - for(var/x in 0 to BD.fling_distance-1) - temp = get_step(T, facing) + for(var/step in 0 to behavior.fling_distance-1) + temp = get_step(turf, facing) if (!temp) break - T = temp + turf = temp - H.throw_atom(T, BD.fling_distance, SPEED_VERY_FAST, X, TRUE) + human.throw_atom(turf, behavior.fling_distance, SPEED_VERY_FAST, xeno, TRUE) /datum/action/xeno_action/activable/scissor_cut/use_ability(atom/target_atom) var/mob/living/carbon/xenomorph/ravager_user = owner @@ -164,14 +164,15 @@ var/list/turf/target_turfs = list() var/facing = Get_Compass_Dir(ravager_user, target_atom) - var/turf/T = ravager_user.loc + var/turf/turf = ravager_user.loc var/turf/temp = ravager_user.loc var/list/telegraph_atom_list = list() - for (var/x in 0 to 3) - temp = get_step(T, facing) - if(facing in diagonals) // check if it goes through corners - var/reverse_face = reverse_dir[facing] + for (var/step in 0 to 3) + temp = get_step(turf, facing) + if(facing in GLOB.diagonals) // check if it goes through corners + var/reverse_face = GLOB.reverse_dir[facing] + var/turf/back_left = get_step(temp, turn(reverse_face, 45)) var/turf/back_right = get_step(temp, turn(reverse_face, -45)) if((!back_left || back_left.density) && (!back_right || back_right.density)) @@ -182,9 +183,9 @@ var/blocked = FALSE for(var/obj/structure/structure_blocker in temp) if(istype(structure_blocker, /obj/structure/window/framed)) - var/obj/structure/window/framed/W = structure_blocker - if(!W.unslashable) - W.deconstruct(disassembled = FALSE) + var/obj/structure/window/framed/framed_window = structure_blocker + if(!framed_window.unslashable) + framed_window.deconstruct(disassembled = FALSE) if(structure_blocker.opacity) blocked = TRUE @@ -192,13 +193,13 @@ if(blocked) break - T = temp - target_turfs += T - telegraph_atom_list += new /obj/effect/xenomorph/xeno_telegraph/red(T, 0.25 SECONDS) + turf = temp + target_turfs += turf + telegraph_atom_list += new /obj/effect/xenomorph/xeno_telegraph/red(turf, 0.25 SECONDS) // Extract our 'optimal' turf, if it exists - if (target_turfs.len >= 2) - ravager_user.animation_attack_on(target_turfs[target_turfs.len], 15) + if (length(target_turfs) >= 2) + ravager_user.animation_attack_on(target_turfs[length(target_turfs)], 15) // Hmm today I will kill a marine while looking away from them ravager_user.face_atom(target_atom) @@ -218,7 +219,7 @@ playsound(get_turf(carbon_target), "alien_claw_flesh", 30, TRUE) if(should_sslow) - new /datum/effects/xeno_slow/superslow/(carbon_target, ravager_user, ttl = superslow_duration) + new /datum/effects/xeno_slow/superslow(carbon_target, ravager_user, ttl = superslow_duration) apply_cooldown() return ..() @@ -226,124 +227,124 @@ ///////////// BERSERKER POWERS -/datum/action/xeno_action/onclick/apprehend/use_ability(atom/A) - var/mob/living/carbon/xenomorph/X = owner +/datum/action/xeno_action/onclick/apprehend/use_ability(atom/affected_atom) + var/mob/living/carbon/xenomorph/xeno = owner - if (!istype(X)) + if (!istype(xeno)) return if (!action_cooldown_check()) return - if (!X.check_state()) + if (!xeno.check_state()) return if (!check_and_use_plasma_owner()) return - var/datum/behavior_delegate/ravager_berserker/BD = X.behavior_delegate - if (istype(BD)) - BD.next_slash_buffed = TRUE + var/datum/behavior_delegate/ravager_berserker/behavior = xeno.behavior_delegate + if (istype(behavior)) + behavior.next_slash_buffed = TRUE - to_chat(X, SPAN_XENODANGER("Your next slash will slow!")) + to_chat(xeno, SPAN_XENODANGER("Your next slash will slow!")) addtimer(CALLBACK(src, PROC_REF(unbuff_slash)), buff_duration) - X.speed_modifier -= speed_buff - X.recalculate_speed() + xeno.speed_modifier -= speed_buff + xeno.recalculate_speed() addtimer(CALLBACK(src, PROC_REF(apprehend_off)), buff_duration, TIMER_UNIQUE) - X.add_filter("apprehend_on", 1, list("type" = "outline", "color" = "#522020ff", "size" = 1)) // Dark red because the berserker is scary in this state + xeno.add_filter("apprehend_on", 1, list("type" = "outline", "color" = "#522020ff", "size" = 1)) // Dark red because the berserker is scary in this state apply_cooldown() return ..() /datum/action/xeno_action/onclick/apprehend/proc/apprehend_off() - var/mob/living/carbon/xenomorph/X = owner - X.remove_filter("apprehend_on") - if (istype(X)) - X.speed_modifier += speed_buff - X.recalculate_speed() - to_chat(X, SPAN_XENOHIGHDANGER("You feel your speed wane!")) + var/mob/living/carbon/xenomorph/xeno = owner + xeno.remove_filter("apprehend_on") + if (istype(xeno)) + xeno.speed_modifier += speed_buff + xeno.recalculate_speed() + to_chat(xeno, SPAN_XENOHIGHDANGER("You feel your speed wane!")) /datum/action/xeno_action/onclick/apprehend/proc/unbuff_slash() - var/mob/living/carbon/xenomorph/X = owner - if (!istype(X)) + var/mob/living/carbon/xenomorph/xeno = owner + if (!istype(xeno)) return - var/datum/behavior_delegate/ravager_berserker/BD = X.behavior_delegate - if (istype(BD)) + var/datum/behavior_delegate/ravager_berserker/behavior = xeno.behavior_delegate + if (istype(behavior)) // In case slash has already landed - if (!BD.next_slash_buffed) + if (!behavior.next_slash_buffed) return - BD.next_slash_buffed = FALSE + behavior.next_slash_buffed = FALSE - to_chat(X, SPAN_XENODANGER("You have waited too long, your slash will no longer slow enemies!")) + to_chat(xeno, SPAN_XENODANGER("You have waited too long, your slash will no longer slow enemies!")) -/datum/action/xeno_action/activable/clothesline/use_ability(atom/A) - var/mob/living/carbon/xenomorph/X = owner +/datum/action/xeno_action/activable/clothesline/use_ability(atom/affected_atom) + var/mob/living/carbon/xenomorph/xeno = owner if (!action_cooldown_check()) return - if (!X.check_state()) + if (!xeno.check_state()) return - if (!isxeno_human(A) || X.can_not_harm(A)) - to_chat(X, SPAN_XENOWARNING("You must target a hostile!")) + if (!isxeno_human(affected_atom) || xeno.can_not_harm(affected_atom)) + to_chat(xeno, SPAN_XENOWARNING("You must target a hostile!")) return - if (!X.Adjacent(A)) - to_chat(X, SPAN_XENOWARNING("You must be adjacent to your target!")) + if (!xeno.Adjacent(affected_atom)) + to_chat(xeno, SPAN_XENOWARNING("You must be adjacent to your target!")) return - var/mob/living/carbon/H = A + var/mob/living/carbon/carbon = affected_atom var/heal_amount = base_heal var/fling_distance = fling_dist_base var/debilitate = TRUE // Do we apply neg. status effects to the target? - if (H.mob_size >= MOB_SIZE_BIG) - to_chat(X, SPAN_XENOWARNING("This creature is too massive to target")) + if (carbon.mob_size >= MOB_SIZE_BIG) + to_chat(xeno, SPAN_XENOWARNING("This creature is too massive to target")) return - if (H.stat == DEAD) + if (carbon.stat == DEAD) return // All strain-specific behavior - if (X.mutation_type == RAVAGER_BERSERKER) - var/datum/behavior_delegate/ravager_berserker/BD = X.behavior_delegate + if (xeno.mutation_type == RAVAGER_BERSERKER) + var/datum/behavior_delegate/ravager_berserker/behavior = xeno.behavior_delegate - if (BD.rage >= 2) - BD.decrement_rage() + if (behavior.rage >= 2) + behavior.decrement_rage() heal_amount += additional_healing_enraged else - to_chat(X, SPAN_XENOWARNING("Your rejuvenation was weaker without rage!")) + to_chat(xeno, SPAN_XENOWARNING("Your rejuvenation was weaker without rage!")) debilitate = FALSE fling_distance-- // Damage - var/obj/limb/head/head = H.get_limb("head") - if(ishuman(H) && head) - H.apply_armoured_damage(damage, ARMOR_MELEE, BRUTE, "head") + var/obj/limb/head/head = carbon.get_limb("head") + if(ishuman(carbon) && head) + carbon.apply_armoured_damage(damage, ARMOR_MELEE, BRUTE, "head") else - H.apply_armoured_damage(get_xeno_damage_slash(H, damage), ARMOR_MELEE, BRUTE) // just for consistency + carbon.apply_armoured_damage(get_xeno_damage_slash(carbon, damage), ARMOR_MELEE, BRUTE) // just for consistency // Heal - if(!X.on_fire) - X.gain_health(heal_amount) + if(!xeno.on_fire) + xeno.gain_health(heal_amount) // Fling - var/facing = get_dir(X, H) - var/turf/T = X.loc - var/turf/temp = X.loc + var/facing = get_dir(xeno, carbon) + var/turf/turf = xeno.loc + var/turf/temp = xeno.loc - for (var/x in 0 to fling_distance-1) - temp = get_step(T, facing) + for (var/step in 0 to fling_distance-1) + temp = get_step(turf, facing) if (!temp) break - T = temp + turf = temp - H.throw_atom(T, fling_distance, SPEED_VERY_FAST, X, TRUE) + carbon.throw_atom(turf, fling_distance, SPEED_VERY_FAST, xeno, TRUE) // Negative stat effects if (debilitate) @@ -352,7 +353,7 @@ apply_cooldown() return ..() -/datum/action/xeno_action/activable/eviscerate/use_ability(atom/A) +/datum/action/xeno_action/activable/eviscerate/use_ability(atom/affected_atom) var/mob/living/carbon/xenomorph/xeno = owner if(!action_cooldown_check() || xeno.action_busy) @@ -500,33 +501,33 @@ xeno.overlay_shields() return -/datum/action/xeno_action/activable/rav_spikes/use_ability(atom/A) - var/mob/living/carbon/xenomorph/X = owner +/datum/action/xeno_action/activable/rav_spikes/use_ability(atom/affected_atom) + var/mob/living/carbon/xenomorph/xeno = owner if (!action_cooldown_check()) return - if(!A || A.layer >= FLY_LAYER || !isturf(X.loc) || !X.check_state()) + if(!affected_atom || affected_atom.layer >= FLY_LAYER || !isturf(xeno.loc) || !xeno.check_state()) return - if (X.mutation_type == RAVAGER_HEDGEHOG) - var/datum/behavior_delegate/ravager_hedgehog/BD = X.behavior_delegate - if (!BD.check_shards(shard_cost)) - to_chat(X, SPAN_DANGER("Not enough shards! You need [shard_cost - BD.shards] more!")) + if (xeno.mutation_type == RAVAGER_HEDGEHOG) + var/datum/behavior_delegate/ravager_hedgehog/behavior = xeno.behavior_delegate + if (!behavior.check_shards(shard_cost)) + to_chat(xeno, SPAN_DANGER("Not enough shards! You need [shard_cost - behavior.shards] more!")) return - BD.use_shards(shard_cost) + behavior.use_shards(shard_cost) - X.visible_message(SPAN_XENOWARNING("The [X] fires their spikes at [A]!"), SPAN_XENOWARNING("You fire your spikes at [A]!")) + xeno.visible_message(SPAN_XENOWARNING("The [xeno] fires their spikes at [affected_atom]!"), SPAN_XENOWARNING("You fire your spikes at [affected_atom]!")) - var/turf/target = locate(A.x, A.y, A.z) - var/obj/projectile/P = new /obj/projectile(X.loc, create_cause_data(initial(X.caste_type), X)) + var/turf/target = locate(affected_atom.x, affected_atom.y, affected_atom.z) + var/obj/projectile/projectile = new /obj/projectile(xeno.loc, create_cause_data(initial(xeno.caste_type), xeno)) - var/datum/ammo/ammoDatum = GLOB.ammo_list[ammo_type] + var/datum/ammo/ammo_datum = GLOB.ammo_list[ammo_type] - P.generate_bullet(ammoDatum) + projectile.generate_bullet(ammo_datum) - P.fire_at(target, X, X, ammoDatum.max_range, ammoDatum.shell_speed) - playsound(X, 'sound/effects/spike_spray.ogg', 25, 1) + projectile.fire_at(target, xeno, xeno, ammo_datum.max_range, ammo_datum.shell_speed) + playsound(xeno, 'sound/effects/spike_spray.ogg', 25, 1) apply_cooldown() return ..() @@ -535,38 +536,38 @@ if(!owner) return FALSE if (cooldown_timer_id == TIMER_ID_NULL) - var/mob/living/carbon/xenomorph/X = owner - if(!istype(X)) + var/mob/living/carbon/xenomorph/xeno = owner + if(!istype(xeno)) return FALSE - if (X.mutation_type == RAVAGER_HEDGEHOG) - var/datum/behavior_delegate/ravager_hedgehog/BD = X.behavior_delegate - return BD.check_shards(shard_cost) + if (xeno.mutation_type == RAVAGER_HEDGEHOG) + var/datum/behavior_delegate/ravager_hedgehog/behavior = xeno.behavior_delegate + return behavior.check_shards(shard_cost) return TRUE else return FALSE -/datum/action/xeno_action/onclick/spike_shed/use_ability(atom/A) - var/mob/living/carbon/xenomorph/X = owner +/datum/action/xeno_action/onclick/spike_shed/use_ability(atom/affected_atom) + var/mob/living/carbon/xenomorph/xeno = owner if (!action_cooldown_check()) return - if (!X.check_state()) + if (!xeno.check_state()) return - if (X.mutation_type == RAVAGER_HEDGEHOG) - var/datum/behavior_delegate/ravager_hedgehog/BD = X.behavior_delegate - if (!BD.check_shards(shard_cost)) - to_chat(X, SPAN_DANGER("Not enough shards! You need [shard_cost - BD.shards] more!")) + if (xeno.mutation_type == RAVAGER_HEDGEHOG) + var/datum/behavior_delegate/ravager_hedgehog/behavior = xeno.behavior_delegate + if (!behavior.check_shards(shard_cost)) + to_chat(xeno, SPAN_DANGER("Not enough shards! You need [shard_cost - behavior.shards] more!")) return - BD.use_shards(shard_cost) - BD.lock_shards() + behavior.use_shards(shard_cost) + behavior.lock_shards() - X.visible_message(SPAN_XENOWARNING("The [X] sheds their spikes, firing them in all directions!"), SPAN_XENOWARNING("You shed your spikes, firing them in all directions!!")) - X.spin_circle() - create_shrapnel(get_turf(X), shrapnel_amount, null, null, ammo_type, create_cause_data(initial(X.caste_type), owner), TRUE) - playsound(X, 'sound/effects/spike_spray.ogg', 25, 1) + xeno.visible_message(SPAN_XENOWARNING("The [xeno] sheds their spikes, firing them in all directions!"), SPAN_XENOWARNING("You shed your spikes, firing them in all directions!!")) + xeno.spin_circle() + create_shrapnel(get_turf(xeno), shrapnel_amount, null, null, ammo_type, create_cause_data(initial(xeno.caste_type), owner), TRUE) + playsound(xeno, 'sound/effects/spike_spray.ogg', 25, 1) apply_cooldown() return ..() diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/runner/runner_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/runner/runner_powers.dm index 9a29e2cb6da0..06bf3e0e2e0a 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/runner/runner_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/runner/runner_powers.dm @@ -1,151 +1,150 @@ -/datum/action/xeno_action/activable/runner_skillshot/use_ability(atom/A) - var/mob/living/carbon/xenomorph/X = owner - if (!istype(X)) +/datum/action/xeno_action/activable/runner_skillshot/use_ability(atom/affected_atom) + var/mob/living/carbon/xenomorph/xeno = owner + if (!istype(xeno)) return if (!action_cooldown_check()) return - if(!A || A.layer >= FLY_LAYER || !isturf(X.loc) || !X.check_state()) + if(!affected_atom || affected_atom.layer >= FLY_LAYER || !isturf(xeno.loc) || !xeno.check_state()) return if (!check_and_use_plasma_owner()) return - X.visible_message(SPAN_XENOWARNING("[X] fires a burst of bone chips at [A]!"), SPAN_XENOWARNING("You fire a burst of bone chips at [A]!")) + xeno.visible_message(SPAN_XENOWARNING("[xeno] fires a burst of bone chips at [affected_atom]!"), SPAN_XENOWARNING("You fire a burst of bone chips at [affected_atom]!")) - var/turf/target = locate(A.x, A.y, A.z) - var/obj/projectile/P = new /obj/projectile(X.loc, create_cause_data(initial(X.caste_type), X)) + var/turf/target = locate(affected_atom.x, affected_atom.y, affected_atom.z) + var/obj/projectile/projectile = new /obj/projectile(xeno.loc, create_cause_data(initial(xeno.caste_type), xeno)) - var/datum/ammo/ammoDatum = GLOB.ammo_list[ammo_type] + var/datum/ammo/ammo_datum = GLOB.ammo_list[ammo_type] - P.generate_bullet(ammoDatum) + projectile.generate_bullet(ammo_datum) - P.fire_at(target, X, X, ammoDatum.max_range, ammoDatum.shell_speed) + projectile.fire_at(target, xeno, xeno, ammo_datum.max_range, ammo_datum.shell_speed) apply_cooldown() return ..() -/datum/action/xeno_action/activable/acider_acid/use_ability(atom/A) - var/mob/living/carbon/xenomorph/X = owner - if(!istype(A, /obj/item) && !istype(A, /obj/structure/) && !istype(A, /obj/vehicle/multitile)) - to_chat(X, SPAN_XENOHIGHDANGER("Can only melt barricades and items!")) +/datum/action/xeno_action/activable/acider_acid/use_ability(atom/affected_atom) + var/mob/living/carbon/xenomorph/xeno = owner + if(!istype(affected_atom, /obj/item) && !istype(affected_atom, /obj/structure/) && !istype(affected_atom, /obj/vehicle/multitile)) + to_chat(xeno, SPAN_XENOHIGHDANGER("Can only melt barricades and items!")) return - var/datum/behavior_delegate/runner_acider/BD = X.behavior_delegate - if (!istype(BD)) + var/datum/behavior_delegate/runner_acider/behavior_delegate = xeno.behavior_delegate + if (!istype(behavior_delegate)) return - if(BD.acid_amount < acid_cost) - to_chat(X, SPAN_XENOHIGHDANGER("Not enough acid stored!")) + if(behavior_delegate.acid_amount < acid_cost) + to_chat(xeno, SPAN_XENOHIGHDANGER("Not enough acid stored!")) return - X.corrosive_acid(A, acid_type, 0) - for(var/obj/item/explosive/plastic/E in A.contents) - X.corrosive_acid(E,acid_type,0) + xeno.corrosive_acid(affected_atom, acid_type, 0) + for(var/obj/item/explosive/plastic/plastic_explosive in affected_atom.contents) + xeno.corrosive_acid(plastic_explosive, acid_type, 0) return ..() -/mob/living/carbon/xenomorph/runner/corrosive_acid(atom/O, acid_type, plasma_cost) +/mob/living/carbon/xenomorph/runner/corrosive_acid(atom/affected_atom, acid_type, plasma_cost) if (mutation_type != RUNNER_ACIDER) - ..(O, acid_type, plasma_cost) - return - if(!O.Adjacent(src)) - if(istype(O,/obj/item/explosive/plastic)) - var/obj/item/explosive/plastic/E = O - if(E.plant_target && !E.plant_target.Adjacent(src)) - to_chat(src, SPAN_WARNING("You can't reach [O].")) + return ..() + if(!affected_atom.Adjacent(src)) + if(istype(affected_atom,/obj/item/explosive/plastic)) + var/obj/item/explosive/plastic/plastic_explosive = affected_atom + if(plastic_explosive.plant_target && !plastic_explosive.plant_target.Adjacent(src)) + to_chat(src, SPAN_WARNING("You can't reach [affected_atom].")) return else - to_chat(src, SPAN_WARNING("[O] is too far away.")) + to_chat(src, SPAN_WARNING("[affected_atom] is too far away.")) return - if(!isturf(loc) || burrow) - to_chat(src, SPAN_WARNING("You can't melt [O] from here!")) + if(!isturf(loc) || HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) + to_chat(src, SPAN_WARNING("You can't melt [affected_atom] from here!")) return - face_atom(O) + face_atom(affected_atom) var/wait_time = 10 - var/turf/T = get_turf(O) + var/turf/turf = get_turf(affected_atom) - for(var/obj/effect/xenomorph/acid/A in T) - if(acid_type == A.type && A.acid_t == O) - to_chat(src, SPAN_WARNING("[A] is already drenched in acid.")) + for(var/obj/effect/xenomorph/acid/acid in turf) + if(acid_type == acid.type && acid.acid_t == affected_atom) + to_chat(src, SPAN_WARNING("[affected_atom] is already drenched in acid.")) return - var/obj/I + var/obj/object //OBJ CHECK - if(isobj(O)) - I = O + if(isobj(affected_atom)) + object = affected_atom - if(istype(O, /obj/structure/window_frame)) - var/obj/structure/window_frame/WF = O - if(WF.reinforced && acid_type != /obj/effect/xenomorph/acid/strong) - to_chat(src, SPAN_WARNING("This [O.name] is too tough to be melted by your weak acid.")) + if(istype(object, /obj/structure/window_frame)) + var/obj/structure/window_frame/window_frame = object + if(window_frame.reinforced && acid_type != /obj/effect/xenomorph/acid/strong) + to_chat(src, SPAN_WARNING("This [object.name] is too tough to be melted by your weak acid.")) return - wait_time = I.get_applying_acid_time() + wait_time = object.get_applying_acid_time() if(wait_time == -1) - to_chat(src, SPAN_WARNING("You cannot dissolve \the [I].")) + to_chat(src, SPAN_WARNING("You cannot dissolve [object].")) return else - to_chat(src, SPAN_WARNING("You cannot dissolve [O].")) + to_chat(src, SPAN_WARNING("You cannot dissolve [affected_atom].")) return wait_time = wait_time / 4 if(!do_after(src, wait_time, INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE)) return // AGAIN BECAUSE SOMETHING COULD'VE ACIDED THE PLACE - for(var/obj/effect/xenomorph/acid/A in T) - if(acid_type == A.type && A.acid_t == O) - to_chat(src, SPAN_WARNING("[A] is already drenched in acid.")) + for(var/obj/effect/xenomorph/acid/acid in turf) + if(acid_type == acid.type && acid.acid_t == affected_atom) + to_chat(src, SPAN_WARNING("[acid] is already drenched in acid.")) return if(!check_state()) return - if(!O || QDELETED(O)) //Some logic. + if(!affected_atom || QDELETED(affected_atom)) //Some logic. return - if(!O.Adjacent(src) || (I && !isturf(I.loc)))//not adjacent or inside something - if(istype(O,/obj/item/explosive/plastic)) - var/obj/item/explosive/plastic/E = O - if(E.plant_target && !E.plant_target.Adjacent(src)) - to_chat(src, SPAN_WARNING("You can't reach [O].")) + if(!affected_atom.Adjacent(src) || (object && !isturf(object.loc)))//not adjacent or inside something + if(istype(affected_atom, /obj/item/explosive/plastic)) + var/obj/item/explosive/plastic/plastic_explosive = affected_atom + if(plastic_explosive.plant_target && !plastic_explosive.plant_target.Adjacent(src)) + to_chat(src, SPAN_WARNING("You can't reach [affected_atom].")) return else - to_chat(src, SPAN_WARNING("[O] is too far away.")) + to_chat(src, SPAN_WARNING("[affected_atom] is too far away.")) return - var/datum/behavior_delegate/runner_acider/BD = behavior_delegate - if (!istype(BD)) + var/datum/behavior_delegate/runner_acider/behavior_del = behavior_delegate + if (!istype(behavior_del)) return - if(BD.acid_amount < BD.melt_acid_cost) + if(behavior_del.acid_amount < behavior_del.melt_acid_cost) to_chat(src, SPAN_XENOHIGHDANGER("Not enough acid stored!")) return - BD.modify_acid(-BD.melt_acid_cost) + behavior_del.modify_acid(-behavior_del.melt_acid_cost) - var/obj/effect/xenomorph/acid/A = new acid_type(T, O) + var/obj/effect/xenomorph/acid/acid = new acid_type(turf, affected_atom) - if(istype(O, /obj/vehicle/multitile)) - var/obj/vehicle/multitile/R = O - R.take_damage_type(20 / A.acid_delay, "acid", src) - visible_message(SPAN_XENOWARNING("[src] vomits globs of vile stuff at \the [O]. It sizzles under the bubbling mess of acid!"), \ - SPAN_XENOWARNING("You vomit globs of vile stuff at [O]. It sizzles under the bubbling mess of acid!"), null, 5) + if(istype(affected_atom, /obj/vehicle/multitile)) + var/obj/vehicle/multitile/multitile_vehicle = affected_atom + multitile_vehicle.take_damage_type(20 / acid.acid_delay, "acid", src) + visible_message(SPAN_XENOWARNING("[src] vomits globs of vile stuff at [multitile_vehicle]. It sizzles under the bubbling mess of acid!"), \ + SPAN_XENOWARNING("You vomit globs of vile stuff at [multitile_vehicle]. It sizzles under the bubbling mess of acid!"), null, 5) playsound(loc, "sound/bullets/acid_impact1.ogg", 25) - QDEL_IN(A, 20) + QDEL_IN(acid, 20) return - A.add_hiddenprint(src) - A.name += " ([O])" + acid.add_hiddenprint(src) + acid.name += " ([affected_atom])" - visible_message(SPAN_XENOWARNING("[src] vomits globs of vile stuff all over [O]. It begins to sizzle and melt under the bubbling mess of acid!"), \ - SPAN_XENOWARNING("You vomit globs of vile stuff all over [O]. It begins to sizzle and melt under the bubbling mess of acid!"), null, 5) + visible_message(SPAN_XENOWARNING("[src] vomits globs of vile stuff all over [affected_atom]. It begins to sizzle and melt under the bubbling mess of acid!"), \ + SPAN_XENOWARNING("You vomit globs of vile stuff all over [affected_atom]. It begins to sizzle and melt under the bubbling mess of acid!"), null, 5) playsound(loc, "sound/bullets/acid_impact1.ogg", 25) -/datum/action/xeno_action/activable/acider_for_the_hive/use_ability(atom/A) +/datum/action/xeno_action/activable/acider_for_the_hive/use_ability(atom/affected_atom) var/mob/living/carbon/xenomorph/xeno = owner if(!istype(xeno)) @@ -169,15 +168,15 @@ if(xeno.mutation_type != RUNNER_ACIDER) return - var/datum/behavior_delegate/runner_acider/BD = xeno.behavior_delegate - if(!istype(BD)) + var/datum/behavior_delegate/runner_acider/behavior_delegate = xeno.behavior_delegate + if(!istype(behavior_delegate)) return - if(BD.caboom_trigger) + if(behavior_delegate.caboom_trigger) cancel_ability() return - if(BD.acid_amount < minimal_acid) + if(behavior_delegate.acid_amount < minimal_acid) to_chat(xeno, SPAN_XENOWARNING("Not enough acid built up for an explosion.")) return @@ -188,10 +187,10 @@ xeno.set_light_color("#22FF22") xeno.set_light_range(3) - BD.caboom_trigger = TRUE - BD.caboom_left = BD.caboom_timer - BD.caboom_last_proc = 0 - xeno.set_effect(BD.caboom_timer*2, SUPERSLOW) + behavior_delegate.caboom_trigger = TRUE + behavior_delegate.caboom_left = behavior_delegate.caboom_timer + behavior_delegate.caboom_last_proc = 0 + xeno.set_effect(behavior_delegate.caboom_timer*2, SUPERSLOW) xeno.say(";FOR THE HIVE!!!") return ..() @@ -201,17 +200,17 @@ if(!istype(xeno)) return - var/datum/behavior_delegate/runner_acider/behavior = xeno.behavior_delegate - if(!istype(behavior)) + var/datum/behavior_delegate/runner_acider/behavior_delegate = xeno.behavior_delegate + if(!istype(behavior_delegate)) return - behavior.caboom_trigger = FALSE + behavior_delegate.caboom_trigger = FALSE xeno.color = null xeno.set_light_range(0) - behavior.modify_acid(-behavior.max_acid / 4) + behavior_delegate.modify_acid(-behavior_delegate.max_acid / 4) // Done this way rather than setting to 0 in case something else slowed us // -Original amount set - (time exploding + timer inaccuracy) * how much gets removed per tick / 2 - xeno.adjust_effect(behavior.caboom_timer * -2 - (behavior.caboom_timer - behavior.caboom_left + 2) * xeno.life_slow_reduction * 0.5, SUPERSLOW) + xeno.adjust_effect(behavior_delegate.caboom_timer * -2 - (behavior_delegate.caboom_timer - behavior_delegate.caboom_left + 2) * xeno.life_slow_reduction * 0.5, SUPERSLOW) to_chat(xeno, SPAN_XENOWARNING("You remove all your explosive acid before it combusted.")) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/warrior/warrior_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/warrior/warrior_abilities.dm index bd6e2bb8d08b..5127ca6fe4ed 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/warrior/warrior_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/warrior/warrior_abilities.dm @@ -1,17 +1,3 @@ -// toggle agility -/datum/action/xeno_action/onclick/toggle_agility - name = "Toggle Agility" - action_icon_state = "agility_on" - ability_name = "toggle agility" - macro_path = /datum/action/xeno_action/verb/verb_toggle_agility - action_type = XENO_ACTION_CLICK - xeno_cooldown = 10 - -/datum/action/xeno_action/onclick/toggle_agility/can_use_action() - var/mob/living/carbon/xenomorph/X = owner - if(X && !X.buckled && !X.is_mob_incapacitated()) - return TRUE - // Warrior Fling /datum/action/xeno_action/activable/fling name = "Fling" @@ -28,7 +14,6 @@ var/weaken_power = 0.5 var/slowdown = 2 - // Warrior Lunge /datum/action/xeno_action/activable/lunge name = "Lunge" @@ -44,8 +29,6 @@ var/click_miss_cooldown = 15 var/twitch_message_cooldown = 0 //apparently this is necessary for a tiny code that makes the lunge message on cooldown not be spammable, doesn't need to be big so 5 will do. -// Warrior Agility - /datum/action/xeno_action/activable/warrior_punch name = "Punch" action_icon_state = "punch" @@ -60,27 +43,3 @@ var/base_punch_damage_synth = 30 var/base_punch_damage_pred = 25 var/damage_variance = 5 - -/datum/action/xeno_action/activable/uppercut - name = "Uppercut" - action_icon_state = "rav_clothesline" - ability_name = "uppercut" - macro_path = /datum/action/xeno_action/verb/verb_uppercut - action_type = XENO_ACTION_CLICK - ability_primacy = XENO_PRIMARY_ACTION_3 - xeno_cooldown = 100 - var/base_damage = 15 - var/base_knockback = 40 - var/base_knockdown = 0.25 - var/knockout_power = 11 // 11 seconds - var/base_healthgain = 5 // in percents of health per ko point - -/datum/action/xeno_action/activable/jab - name = "Jab" - action_icon_state = "pounce" - ability_name = "jab" - macro_path = /datum/action/xeno_action/verb/verb_jab - action_type = XENO_ACTION_CLICK - ability_primacy = XENO_PRIMARY_ACTION_2 - xeno_cooldown = 40 - diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/warrior/warrior_macros.dm b/code/modules/mob/living/carbon/xenomorph/abilities/warrior/warrior_macros.dm index 09a24c079fd0..63d97bb69aa2 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/warrior/warrior_macros.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/warrior/warrior_macros.dm @@ -19,24 +19,3 @@ set hidden = TRUE var/action_name = "Punch" handle_xeno_macro(src, action_name) - -/datum/action/xeno_action/verb/verb_jab() - set category = "Alien" - set name = "Jab" - set hidden = TRUE - var/action_name = "Jab" - handle_xeno_macro(src, action_name) - -/datum/action/xeno_action/verb/verb_uppercut() - set category = "Alien" - set name = "Uppercut" - set hidden = TRUE - var/action_name = "Uppercut" - handle_xeno_macro(src, action_name) - -/datum/action/xeno_action/verb/verb_toggle_agility() - set category = "Alien" - set name = "Toggle Agility" - set hidden = TRUE - var/action_name = "Toggle Agility" - handle_xeno_macro(src, action_name) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/warrior/warrior_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/warrior/warrior_powers.dm index 1ba675f5e6d6..cde2e3432e7b 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/warrior/warrior_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/warrior/warrior_powers.dm @@ -1,28 +1,28 @@ -/datum/action/xeno_action/activable/lunge/use_ability(atom/A) - var/mob/living/carbon/xenomorph/X = owner +/datum/action/xeno_action/activable/lunge/use_ability(atom/affected_atom) + var/mob/living/carbon/xenomorph/xeno = owner if (!action_cooldown_check()) if(twitch_message_cooldown < world.time ) - X.visible_message(SPAN_XENOWARNING("\The [X]'s claws twitch."), SPAN_XENOWARNING("Your claws twitch as you try to lunge but lack the strength. Wait a moment to try again.")) + xeno.visible_message(SPAN_XENOWARNING("[xeno]'s claws twitch."), SPAN_XENOWARNING("Your claws twitch as you try to lunge but lack the strength. Wait a moment to try again.")) twitch_message_cooldown = world.time + 5 SECONDS return //this gives a little feedback on why your lunge didn't hit other than the lunge button going grey. Plus, it might spook marines that almost got lunged if they know why the message appeared, and extra spookiness is always good. - if (!A) + if (!affected_atom) return - if (!isturf(X.loc)) - to_chat(X, SPAN_XENOWARNING("You can't lunge from here!")) + if (!isturf(xeno.loc)) + to_chat(xeno, SPAN_XENOWARNING("You can't lunge from here!")) return - if (!X.check_state() || X.agility) + if (!xeno.check_state() || xeno.agility) return - if(X.can_not_harm(A) || !ismob(A)) + if(xeno.can_not_harm(affected_atom) || !ismob(affected_atom)) apply_cooldown_override(click_miss_cooldown) return - var/mob/living/carbon/H = A - if(H.stat == DEAD) + var/mob/living/carbon/carbon = affected_atom + if(carbon.stat == DEAD) return if (!check_and_use_plasma_owner()) @@ -31,165 +31,150 @@ apply_cooldown() ..() - X.visible_message(SPAN_XENOWARNING("\The [X] lunges towards [H]!"), SPAN_XENOWARNING("You lunge at [H]!")) + xeno.visible_message(SPAN_XENOWARNING("[xeno] lunges towards [carbon]!"), SPAN_XENOWARNING("You lunge at [carbon]!")) - X.throw_atom(get_step_towards(A, X), grab_range, SPEED_FAST, X) + xeno.throw_atom(get_step_towards(affected_atom, xeno), grab_range, SPEED_FAST, xeno) - if (X.Adjacent(H)) - X.start_pulling(H,1) + if (xeno.Adjacent(carbon)) + xeno.start_pulling(carbon,1) else - X.visible_message(SPAN_XENOWARNING("\The [X]'s claws twitch."), SPAN_XENOWARNING("Your claws twitch as you lunge but are unable to grab onto your target. Wait a moment to try again.")) + xeno.visible_message(SPAN_XENOWARNING("[xeno]'s claws twitch."), SPAN_XENOWARNING("Your claws twitch as you lunge but are unable to grab onto your target. Wait a moment to try again.")) return TRUE -/datum/action/xeno_action/onclick/toggle_agility/use_ability(atom/A) - var/mob/living/carbon/xenomorph/X = owner +/datum/action/xeno_action/activable/fling/use_ability(atom/affected_atom) + var/mob/living/carbon/xenomorph/xeno = owner if (!action_cooldown_check()) return - if (!X.check_state(1)) + if (!isxeno_human(affected_atom) || xeno.can_not_harm(affected_atom)) return - X.agility = !X.agility - if (X.agility) - to_chat(X, SPAN_XENOWARNING("You lower yourself to all fours.")) - else - to_chat(X, SPAN_XENOWARNING("You raise yourself to stand on two feet.")) - X.update_icons() - - apply_cooldown() - return ..() - -/datum/action/xeno_action/activable/fling/use_ability(atom/target_atom) - var/mob/living/carbon/xenomorph/woyer = owner - - if (!action_cooldown_check()) + if (!xeno.check_state() || xeno.agility) return - if (!isxeno_human(target_atom) || woyer.can_not_harm(target_atom)) + if (!xeno.Adjacent(affected_atom)) return - if (!woyer.check_state() || woyer.agility) + var/mob/living/carbon/carbon = affected_atom + if(carbon.stat == DEAD) return - if (!woyer.Adjacent(target_atom)) + if(HAS_TRAIT(carbon, TRAIT_NESTED)) return - var/mob/living/carbon/carbone = target_atom - if(carbone.stat == DEAD) return - if(HAS_TRAIT(carbone, TRAIT_NESTED)) - return - - if(carbone == woyer.pulling) - woyer.stop_pulling() + if(carbon == xeno.pulling) + xeno.stop_pulling() - if(carbone.mob_size >= MOB_SIZE_BIG) - to_chat(woyer, SPAN_XENOWARNING("[carbone] is too big for you to fling!")) + if(carbon.mob_size >= MOB_SIZE_BIG) + to_chat(xeno, SPAN_XENOWARNING("[carbon] is too big for you to fling!")) return if (!check_and_use_plasma_owner()) return - woyer.visible_message(SPAN_XENOWARNING("\The [woyer] effortlessly flings [carbone] to the side!"), SPAN_XENOWARNING("You effortlessly fling [carbone] to the side!")) - playsound(carbone,'sound/weapons/alien_claw_block.ogg', 75, 1) + xeno.visible_message(SPAN_XENOWARNING("[xeno] effortlessly flings [carbon] to the side!"), SPAN_XENOWARNING("You effortlessly fling [carbon] to the side!")) + playsound(carbon,'sound/weapons/alien_claw_block.ogg', 75, 1) if(stun_power) - carbone.apply_effect(get_xeno_stun_duration(carbone, stun_power), STUN) + carbon.apply_effect(get_xeno_stun_duration(carbon, stun_power), STUN) if(weaken_power) - carbone.apply_effect(weaken_power, WEAKEN) + carbon.apply_effect(weaken_power, WEAKEN) if(slowdown) - if(carbone.slowed < slowdown) - carbone.apply_effect(slowdown, SLOW) - carbone.last_damage_data = create_cause_data(initial(woyer.caste_type), woyer) - shake_camera(carbone, 2, 1) + if(carbon.slowed < slowdown) + carbon.apply_effect(slowdown, SLOW) + carbon.last_damage_data = create_cause_data(initial(xeno.caste_type), xeno) + shake_camera(carbon, 2, 1) - var/facing = get_dir(woyer, carbone) - var/turf/throw_turf = woyer.loc - var/turf/temp = woyer.loc + var/facing = get_dir(xeno, carbon) + var/turf/throw_turf = xeno.loc + var/turf/temp = xeno.loc - for (var/x in 0 to fling_distance-1) + for (var/step in 0 to fling_distance-1) temp = get_step(throw_turf, facing) if (!temp) break throw_turf = temp // Hmm today I will kill a marine while looking away from them - woyer.face_atom(carbone) - woyer.animation_attack_on(carbone) - woyer.flick_attack_overlay(carbone, "disarm") - carbone.throw_atom(throw_turf, fling_distance, SPEED_VERY_FAST, woyer, TRUE) + xeno.face_atom(carbon) + xeno.animation_attack_on(carbon) + xeno.flick_attack_overlay(carbon, "disarm") + carbon.throw_atom(throw_turf, fling_distance, SPEED_VERY_FAST, xeno, TRUE) apply_cooldown() return ..() -/datum/action/xeno_action/activable/warrior_punch/use_ability(atom/target_atom) - var/mob/living/carbon/xenomorph/woyer = owner +/datum/action/xeno_action/activable/warrior_punch/use_ability(atom/affected_atom) + var/mob/living/carbon/xenomorph/xeno = owner if (!action_cooldown_check()) return - if (!isxeno_human(target_atom) || woyer.can_not_harm(target_atom)) + if (!isxeno_human(affected_atom) || xeno.can_not_harm(affected_atom)) return - if (!woyer.check_state() || woyer.agility) + if (!xeno.check_state() || xeno.agility) return - var/distance = get_dist(woyer, target_atom) + var/distance = get_dist(xeno, affected_atom) if (distance > 2) return - var/mob/living/carbon/carbone = target_atom + var/mob/living/carbon/carbon = affected_atom - if (!woyer.Adjacent(carbone)) + if (!xeno.Adjacent(carbon)) return - if(carbone.stat == DEAD) return - if(HAS_TRAIT(carbone, TRAIT_NESTED)) return - - var/obj/limb/target_limb = carbone.get_limb(check_zone(woyer.zone_selected)) + if(carbon.stat == DEAD) + return + if(HAS_TRAIT(carbon, TRAIT_NESTED)) + return - if (ishuman(carbone) && (!target_limb || (target_limb.status & LIMB_DESTROYED))) - target_limb = carbone.get_limb("chest") + var/obj/limb/target_limb = carbon.get_limb(check_zone(xeno.zone_selected)) + if (ishuman(carbon) && (!target_limb || (target_limb.status & LIMB_DESTROYED))) + target_limb = carbon.get_limb("chest") if (!check_and_use_plasma_owner()) return - carbone.last_damage_data = create_cause_data(initial(woyer.caste_type), woyer) + carbon.last_damage_data = create_cause_data(initial(xeno.caste_type), xeno) - woyer.visible_message(SPAN_XENOWARNING("\The [woyer] hits [carbone] in the [target_limb? target_limb.display_name : "chest"] with a devastatingly powerful punch!"), \ - SPAN_XENOWARNING("You hit [carbone] in the [target_limb? target_limb.display_name : "chest"] with a devastatingly powerful punch!")) - var/S = pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg') - playsound(carbone,S, 50, 1) - do_base_warrior_punch(carbone, target_limb) + xeno.visible_message(SPAN_XENOWARNING("[xeno] hits [carbon] in the [target_limb ? target_limb.display_name : "chest"] with a devastatingly powerful punch!"), \ + SPAN_XENOWARNING("You hit [carbon] in the [target_limb ? target_limb.display_name : "chest"] with a devastatingly powerful punch!")) + var/sound = pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg') + playsound(carbon, sound, 50, 1) + do_base_warrior_punch(carbon, target_limb) apply_cooldown() return ..() -/datum/action/xeno_action/activable/warrior_punch/proc/do_base_warrior_punch(mob/living/carbon/carbone, obj/limb/target_limb) - var/mob/living/carbon/xenomorph/woyer = owner +/datum/action/xeno_action/activable/warrior_punch/proc/do_base_warrior_punch(mob/living/carbon/carbon, obj/limb/target_limb) + var/mob/living/carbon/xenomorph/xeno = owner var/damage = rand(base_damage, base_damage + damage_variance) - if(ishuman(carbone)) + if(ishuman(carbon)) if((target_limb.status & LIMB_SPLINTED) && !(target_limb.status & LIMB_SPLINTED_INDESTRUCTIBLE)) //If they have it splinted, the splint won't hold. target_limb.status &= ~LIMB_SPLINTED - playsound(get_turf(carbone), 'sound/items/splintbreaks.ogg', 20) - to_chat(carbone, SPAN_DANGER("The splint on your [target_limb.display_name] comes apart!")) - carbone.pain.apply_pain(PAIN_BONE_BREAK_SPLINTED) + playsound(get_turf(carbon), 'sound/items/splintbreaks.ogg', 20) + to_chat(carbon, SPAN_DANGER("The splint on your [target_limb.display_name] comes apart!")) + carbon.pain.apply_pain(PAIN_BONE_BREAK_SPLINTED) + + if(ishuman_strict(carbon)) + carbon.apply_effect(3, SLOW) - if(ishuman_strict(carbone)) - carbone.apply_effect(3, SLOW) - if(isyautja(carbone)) + if(isyautja(carbon)) damage = rand(base_punch_damage_pred, base_punch_damage_pred + damage_variance) else if(target_limb.status & (LIMB_ROBOT|LIMB_SYNTHSKIN)) damage = rand(base_punch_damage_synth, base_punch_damage_synth + damage_variance) - carbone.apply_armoured_damage(get_xeno_damage_slash(carbone, damage), ARMOR_MELEE, BRUTE, target_limb? target_limb.name : "chest") + carbon.apply_armoured_damage(get_xeno_damage_slash(carbon, damage), ARMOR_MELEE, BRUTE, target_limb ? target_limb.name : "chest") // Hmm today I will kill a marine while looking away from them - woyer.face_atom(carbone) - woyer.animation_attack_on(carbone) - woyer.flick_attack_overlay(carbone, "punch") - shake_camera(carbone, 2, 1) - step_away(carbone, woyer, 2) + xeno.face_atom(carbon) + xeno.animation_attack_on(carbon) + xeno.flick_attack_overlay(carbon, "punch") + shake_camera(carbon, 2, 1) + step_away(carbon, xeno, 2) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/xeno_action.dm b/code/modules/mob/living/carbon/xenomorph/abilities/xeno_action.dm index f4f2614312fa..5749ed734951 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/xeno_action.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/xeno_action.dm @@ -63,8 +63,8 @@ if(!owner) return var/mob/living/carbon/xenomorph/X = owner - if (ability_name && round_statistics) - round_statistics.track_ability_usage(ability_name) + if (ability_name && GLOB.round_statistics) + GLOB.round_statistics.track_ability_usage(ability_name) X.track_ability_usage(ability_name, X.caste_type) /datum/action/xeno_action/can_use_action() diff --git a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm index 56ff1d2a4290..60a592178070 100644 --- a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm +++ b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm @@ -9,7 +9,7 @@ /mob/living/carbon/human/attack_alien(mob/living/carbon/xenomorph/M, dam_bonus) - if(M.fortify || M.burrow) + if(M.fortify || HAS_TRAIT(M, TRAIT_ABILITY_BURROWED)) return XENO_NO_DELAY_ACTION var/intent = M.a_intent @@ -204,12 +204,14 @@ if(M.attempt_tackle(src, tackle_mult, tackle_min_offset, tackle_max_offset)) playsound(loc, 'sound/weapons/alien_knockdown.ogg', 25, 1) - apply_effect(rand(M.tacklestrength_min, M.tacklestrength_max), WEAKEN) + var/strength = rand(M.tacklestrength_min, M.tacklestrength_max) + Stun(strength) + KnockDown(strength) // Purely for knockdown visuals. All the heavy lifting is done by Stun M.visible_message(SPAN_DANGER("[M] tackles down [src]!"), \ SPAN_DANGER("You tackle down [src]!"), null, 5, CHAT_TYPE_XENO_COMBAT) else playsound(loc, 'sound/weapons/alien_claw_swipe.ogg', 25, 1) - if (HAS_TRAIT(src, TRAIT_FLOORED)) + if (body_position == LYING_DOWN) M.visible_message(SPAN_DANGER("[M] tries to tackle [src], but they are already down!"), \ SPAN_DANGER("You try to tackle [src], but they are already down!"), null, 5, CHAT_TYPE_XENO_COMBAT) else @@ -220,7 +222,7 @@ //Every other type of nonhuman mob /mob/living/attack_alien(mob/living/carbon/xenomorph/M) - if(M.fortify || M.burrow) + if(M.fortify || HAS_TRAIT(M, TRAIT_ABILITY_BURROWED)) return XENO_NO_DELAY_ACTION switch(M.a_intent) @@ -767,9 +769,9 @@ to_chat(M, SPAN_XENONOTICE("You interact with the machine and disable remote control.")) xeno_message(SPAN_XENOANNOUNCE("[message]"),3,M.hivenumber) last_locked = world.time - if(almayer_orbital_cannon) - almayer_orbital_cannon.is_disabled = TRUE - addtimer(CALLBACK(almayer_orbital_cannon, .obj/structure/orbital_cannon/proc/enable), 10 MINUTES, TIMER_UNIQUE) + if(GLOB.almayer_orbital_cannon) + GLOB.almayer_orbital_cannon.is_disabled = TRUE + addtimer(CALLBACK(GLOB.almayer_orbital_cannon, TYPE_PROC_REF(/obj/structure/orbital_cannon, enable)), 10 MINUTES, TIMER_UNIQUE) queen_locked = 1 /datum/shuttle/ferry/marine/proc/door_override(mob/living/carbon/xenomorph/M, shuttle_tag) @@ -783,17 +785,17 @@ if(shuttle_tag == DROPSHIP_NORMANDY) ship_id = "sh_dropship2" - for(var/obj/structure/machinery/door/airlock/dropship_hatch/D in machines) + for(var/obj/structure/machinery/door/airlock/dropship_hatch/D in GLOB.machines) if(D.id == ship_id) D.unlock() var/obj/structure/machinery/door/airlock/multi_tile/almayer/reardoor switch(ship_id) if("sh_dropship1") - for(var/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/ds1/D in machines) + for(var/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/ds1/D in GLOB.machines) reardoor = D if("sh_dropship2") - for(var/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/ds2/D in machines) + for(var/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/ds2/D in GLOB.machines) reardoor = D if(!reardoor) CRASH("Shuttle crashed trying to override invalid rear door with shuttle id [ship_id]") diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Boiler.dm b/code/modules/mob/living/carbon/xenomorph/castes/Boiler.dm index 092dae00d603..37dc3048408a 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Boiler.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Boiler.dm @@ -69,8 +69,8 @@ /datum/action/xeno_action/activable/xeno_spit/bombard, //1st macro /datum/action/xeno_action/onclick/shift_spits/boiler, //2nd macro /datum/action/xeno_action/activable/spray_acid/boiler, //3rd macro - /datum/action/xeno_action/onclick/toggle_long_range/boiler, //4rd macro - /datum/action/xeno_action/onclick/acid_shroud, //4th macro + /datum/action/xeno_action/onclick/toggle_long_range/boiler, //4th macro + /datum/action/xeno_action/onclick/acid_shroud, //5th macro /datum/action/xeno_action/onclick/tacmap, ) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Burrower.dm b/code/modules/mob/living/carbon/xenomorph/castes/Burrower.dm index 32d98d43a5c4..ee882bc14fdf 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Burrower.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Burrower.dm @@ -85,23 +85,23 @@ sight |= SEE_TURFS /mob/living/carbon/xenomorph/burrower/ex_act(severity) - if(burrow) + if(HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) return ..() /mob/living/carbon/xenomorph/burrower/attack_hand() - if(burrow) + if(HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) return ..() /mob/living/carbon/xenomorph/burrower/attackby() - if(burrow) + if(HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) return ..() /mob/living/carbon/xenomorph/burrower/get_projectile_hit_chance() . = ..() - if(burrow) + if(HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) return 0 /datum/behavior_delegate/burrower_base @@ -111,6 +111,6 @@ if(bound_xeno.stat == DEAD) return - if(bound_xeno.burrow) + if(HAS_TRAIT(bound_xeno, TRAIT_ABILITY_BURROWED)) bound_xeno.icon_state = "[bound_xeno.mutation_icon_state] Burrower Burrowed" return TRUE diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Carrier.dm b/code/modules/mob/living/carbon/xenomorph/castes/Carrier.dm index 577f412b9fa2..07f161f4c6f7 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Carrier.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Carrier.dm @@ -84,6 +84,14 @@ var/mutable_appearance/hugger_overlays_icon var/mutable_appearance/eggsac_overlays_icon + //Carrier specific vars + var/threw_a_hugger = 0 + var/huggers_cur = 0 + var/eggs_cur = 0 + var/huggers_max = 0 + var/eggs_max = 0 + var/laid_egg = 0 + /mob/living/carbon/xenomorph/carrier/update_icons() . = ..() if (mutation_type == CARRIER_NORMAL) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Hivelord.dm b/code/modules/mob/living/carbon/xenomorph/castes/Hivelord.dm index b0a44b0e3835..23f8ffc8acd6 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Hivelord.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Hivelord.dm @@ -119,7 +119,7 @@ /// This check mainly exists because of the new resin node ability for resin whisperer. /mob/living/carbon/xenomorph/hivelord/proc/on_weeds() - var/turf/T = get_turf(src) - if(locate(/obj/effect/alien/weeds) in T) + var/turf/turf = get_turf(src) + if(locate(/obj/effect/alien/weeds) in turf) return TRUE return FALSE diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Larva.dm b/code/modules/mob/living/carbon/xenomorph/castes/Larva.dm index 816e6020c30f..6d5c6699b929 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Larva.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Larva.dm @@ -50,15 +50,22 @@ var/burrowable = TRUE //Can it be safely burrowed if it has no player? var/state_override + var/is_bloody = TRUE //We're still "bloody" icon_xeno = 'icons/mob/xenos/larva.dmi' icon_xenonid = 'icons/mob/xenonids/larva.dmi' -/mob/living/carbon/xenomorph/larva/initialize_pass_flags(datum/pass_flags_container/PF) +/mob/living/carbon/xenomorph/larva/Life() + if(is_bloody && (evolution_stored >= evolution_threshold / 2)) //We're no longer bloody so update our name... + generate_name() + is_bloody = FALSE + return ..() + +/mob/living/carbon/xenomorph/larva/initialize_pass_flags(datum/pass_flags_container/pass_flags) ..() - if (PF) - PF.flags_pass = PASS_MOB_THRU|PASS_FLAGS_CRAWLER - PF.flags_can_pass_all = PASS_ALL^PASS_OVER_THROW_ITEM + if (pass_flags) + pass_flags.flags_pass = PASS_MOB_THRU|PASS_FLAGS_CRAWLER + pass_flags.flags_can_pass_all = PASS_ALL^PASS_OVER_THROW_ITEM /mob/living/carbon/xenomorph/larva/corrupted hivenumber = XENO_HIVE_CORRUPTED @@ -101,29 +108,10 @@ //Larva code is just a mess, so let's get it over with /mob/living/carbon/xenomorph/larva/update_icons() - var/progress = "" //Naming convention, three different names var/state = "" //Icon convention, two different sprite sets - var/name_prefix = "" - - if(hive) - name_prefix = hive.prefix - color = hive.color - - if(evolution_stored >= evolution_threshold) - progress = "Mature " - else if(evolution_stored < evolution_threshold / 2) //We're still bloody - progress = "Bloody " + if(evolution_stored < evolution_threshold / 2) //We're still bloody state = "Bloody " - else - progress = "" - - name = "[name_prefix][progress]Larva ([nicknumber])" - - if(istype(src,/mob/living/carbon/xenomorph/larva/predalien)) state = "Predalien " //Sort of a hack. - - //Update linked data so they show up properly - change_real_name(src, name) if(stat == DEAD) icon_state = "[state_override || state]Larva Dead" @@ -141,16 +129,13 @@ /mob/living/carbon/xenomorph/larva/alter_ghost(mob/dead/observer/ghost) ghost.icon_state = "[caste.caste_type]" -/mob/living/carbon/xenomorph/larva/handle_name() - return - /mob/living/carbon/xenomorph/larva/start_pulling(atom/movable/AM) return /mob/living/carbon/xenomorph/larva/pull_response(mob/puller) return TRUE -/mob/living/carbon/xenomorph/larva/UnarmedAttack(atom/A, proximity, click_parameters, tile_attack, ignores_resin = FALSE) +/mob/living/carbon/xenomorph/larva/UnarmedAttack(atom/atom, proximity, click_parameters, tile_attack, ignores_resin = FALSE) a_intent = INTENT_HELP //Forces help intent for all interactions. if(!caste) return FALSE @@ -158,21 +143,50 @@ if(body_position) //No attacks while laying down return FALSE - A.attack_larva(src) + atom.attack_larva(src) xeno_attack_delay(src) //Adds some lag to the 'attack' -/proc/spawn_hivenumber_larva(atom/A, hivenumber) - if(!GLOB.hive_datum[hivenumber] || isnull(A)) +/proc/spawn_hivenumber_larva(atom/atom, hivenumber) + if(!GLOB.hive_datum[hivenumber] || isnull(atom)) return - var/mob/living/carbon/xenomorph/larva/L = new /mob/living/carbon/xenomorph/larva(A) + var/mob/living/carbon/xenomorph/larva/larva = new /mob/living/carbon/xenomorph/larva(atom) - L.set_hive_and_update(hivenumber) + larva.set_hive_and_update(hivenumber) - return L + return larva /mob/living/carbon/xenomorph/larva/emote(act, m_type, message, intentional, force_silence) playsound(loc, "alien_roar_larva", 15) /mob/living/carbon/xenomorph/larva/is_xeno_grabbable() return TRUE + +/* +Larva name generation, set nicknumber = (number between 1 & 999) which isn't taken by any other xenos in GLOB.xeno_mob_list if doesn't already exist. +Also handles the "Mature / Bloody naming convention. Call this to update the name." +*/ +/mob/living/carbon/xenomorph/larva/generate_name() + if(!nicknumber) + generate_and_set_nicknumber() + + var/progress = "" //Naming convention, three different names + var/name_prefix = "" // Prefix for hive + + if(hive) + name_prefix = hive.prefix + color = hive.color + + if(evolution_stored >= evolution_threshold) + progress = "Mature " + else if(evolution_stored < evolution_threshold / 2) //We're still bloody + progress = "Bloody " + + name = "[name_prefix][progress]Larva ([nicknumber])" + + //Update linked data so they show up properly + change_real_name(src, name) + //Update the hive status UI + if(hive) + var/datum/hive_status/hive_status = hive + hive_status.hive_ui.update_xeno_info() diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Lurker.dm b/code/modules/mob/living/carbon/xenomorph/castes/Lurker.dm index 285d64a04498..a34913b2ff5c 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Lurker.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Lurker.dm @@ -84,7 +84,7 @@ target_carbon.set_effect(get_xeno_stun_duration(target_carbon, 3), SUPERSLOW) next_slash_buffed = FALSE var/datum/action/xeno_action/onclick/lurker_assassinate/ability = get_xeno_action_by_type(bound_xeno, /datum/action/xeno_action/onclick/lurker_assassinate) - if (ability && istype(ability)) + if (ability) ability.button.icon_state = "template" return original_damage @@ -110,22 +110,22 @@ /datum/behavior_delegate/lurker_base/melee_attack_additional_effects_self() ..() - var/datum/action/xeno_action/onclick/lurker_invisibility/LIA = get_xeno_action_by_type(bound_xeno, /datum/action/xeno_action/onclick/lurker_invisibility) - if (LIA && istype(LIA)) - LIA.invisibility_off() + var/datum/action/xeno_action/onclick/lurker_invisibility/lurker_invis_action = get_xeno_action_by_type(bound_xeno, /datum/action/xeno_action/onclick/lurker_invisibility) + if (lurker_invis_action) + lurker_invis_action.invisibility_off() /datum/behavior_delegate/lurker_base/proc/decloak_handler(mob/source) SIGNAL_HANDLER - var/datum/action/xeno_action/onclick/lurker_invisibility/LIA = get_xeno_action_by_type(bound_xeno, /datum/action/xeno_action/onclick/lurker_invisibility) - if(istype(LIA)) - LIA.invisibility_off() + var/datum/action/xeno_action/onclick/lurker_invisibility/lurker_invis_action = get_xeno_action_by_type(bound_xeno, /datum/action/xeno_action/onclick/lurker_invisibility) + if(istype(lurker_invis_action)) + lurker_invis_action.invisibility_off() // What to do when we go invisible /datum/behavior_delegate/lurker_base/proc/on_invisibility() - var/datum/action/xeno_action/activable/pounce/lurker/LPA = get_xeno_action_by_type(bound_xeno, /datum/action/xeno_action/activable/pounce/lurker) - if (LPA && istype(LPA)) - LPA.knockdown = TRUE // pounce knocks down - LPA.freeze_self = TRUE + var/datum/action/xeno_action/activable/pounce/lurker/lurker_pounce_action = get_xeno_action_by_type(bound_xeno, /datum/action/xeno_action/activable/pounce/lurker) + if (lurker_pounce_action) + lurker_pounce_action.knockdown = TRUE // pounce knocks down + lurker_pounce_action.freeze_self = TRUE ADD_TRAIT(bound_xeno, TRAIT_CLOAKED, TRAIT_SOURCE_ABILITY("cloak")) RegisterSignal(bound_xeno, COMSIG_MOB_EFFECT_CLOAK_CANCEL, PROC_REF(decloak_handler)) bound_xeno.stealth = TRUE @@ -133,10 +133,10 @@ invis_start_time = world.time /datum/behavior_delegate/lurker_base/proc/on_invisibility_off() - var/datum/action/xeno_action/activable/pounce/lurker/LPA = get_xeno_action_by_type(bound_xeno, /datum/action/xeno_action/activable/pounce/lurker) - if (LPA && istype(LPA)) - LPA.knockdown = FALSE // pounce no longer knocks down - LPA.freeze_self = FALSE + var/datum/action/xeno_action/activable/pounce/lurker/lurker_pounce_action = get_xeno_action_by_type(bound_xeno, /datum/action/xeno_action/activable/pounce/lurker) + if (lurker_pounce_action) + lurker_pounce_action.knockdown = FALSE // pounce no longer knocks down + lurker_pounce_action.freeze_self = FALSE bound_xeno.stealth = FALSE REMOVE_TRAIT(bound_xeno, TRAIT_CLOAKED, TRAIT_SOURCE_ABILITY("cloak")) UnregisterSignal(bound_xeno, COMSIG_MOB_EFFECT_CLOAK_CANCEL) @@ -153,9 +153,9 @@ can_go_invisible = TRUE if(bound_xeno) - var/datum/action/xeno_action/onclick/lurker_invisibility/LIA = get_xeno_action_by_type(bound_xeno, /datum/action/xeno_action/onclick/lurker_invisibility) - if(LIA && istype(LIA)) - LIA.end_cooldown() + var/datum/action/xeno_action/onclick/lurker_invisibility/lurker_invisibility_action = get_xeno_action_by_type(bound_xeno, /datum/action/xeno_action/onclick/lurker_invisibility) + if(lurker_invisibility_action) + lurker_invisibility_action.end_cooldown() /datum/behavior_delegate/lurker_base/append_to_stat() . = list() diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm b/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm index e6f4dfae8a44..63802d5023c2 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm @@ -389,6 +389,7 @@ /mob/living/carbon/xenomorph/queen/Initialize() . = ..() + SStracking.set_leader("hive_[hivenumber]", src) if(!is_admin_level(z))//so admins can safely spawn Queens in Thunderdome for tests. xeno_message(SPAN_XENOANNOUNCE("A new Queen has risen to lead the Hive! Rejoice!"),3,hivenumber) notify_ghosts(header = "New Queen", message = "A new Queen has risen.", source = src, action = NOTIFY_ORBIT) @@ -409,8 +410,10 @@ AddComponent(/datum/component/footstep, 2 , 35, 11, 4, "alien_footstep_large") -/mob/living/carbon/xenomorph/queen/handle_name(datum/hive_status/in_hive) - var/name_prefix = in_hive.prefix +/mob/living/carbon/xenomorph/queen/generate_name() + if(!nicknumber) + generate_and_set_nicknumber() + var/name_prefix = hive.prefix if(queen_aged) age_xeno() switch(age) @@ -439,11 +442,16 @@ name_client_prefix = "[(client.xeno_prefix||client.xeno_postfix) ? client.xeno_prefix : "XX"]-" name_client_postfix = client.xeno_postfix ? ("-"+client.xeno_postfix) : "" full_designation = "[name_client_prefix][nicknumber][name_client_postfix]" - color = in_hive.color + color = hive.color //Update linked data so they show up properly change_real_name(src, name) +/mob/living/carbon/xenomorph/queen/set_hive_and_update(new_hivenumber) + if(!..()) + return FALSE + update_living_queens() + /mob/living/carbon/xenomorph/queen/proc/make_combat_effective() queen_aged = TRUE diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Ravager.dm b/code/modules/mob/living/carbon/xenomorph/castes/Ravager.dm index 35938ff7f808..7853934da2dd 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Ravager.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Ravager.dm @@ -73,7 +73,7 @@ var/super_empower_threshold = 3 var/dmg_buff_per_target = 2 -/datum/behavior_delegate/ravager_base/melee_attack_modify_damage(original_damage, mob/living/carbon/A) +/datum/behavior_delegate/ravager_base/melee_attack_modify_damage(original_damage, mob/living/carbon/carbon) var/damage_plus if(empower_targets) damage_plus = dmg_buff_per_target * empower_targets @@ -90,18 +90,18 @@ /datum/behavior_delegate/ravager_base/append_to_stat() . = list() var/shield_total = 0 - for (var/datum/xeno_shield/XS in bound_xeno.xeno_shields) - if (XS.shield_source == XENO_SHIELD_SOURCE_RAVAGER) - shield_total += XS.amount + for (var/datum/xeno_shield/xeno_shield in bound_xeno.xeno_shields) + if (xeno_shield.shield_source == XENO_SHIELD_SOURCE_RAVAGER) + shield_total += xeno_shield.amount . += "Empower Shield: [shield_total]" . += "Bonus Slash Damage: [dmg_buff_per_target * empower_targets]" /datum/behavior_delegate/ravager_base/on_life() var/datum/xeno_shield/rav_shield - for (var/datum/xeno_shield/XS in bound_xeno.xeno_shields) - if (XS.shield_source == XENO_SHIELD_SOURCE_RAVAGER) - rav_shield = XS + for (var/datum/xeno_shield/xeno_shield in bound_xeno.xeno_shields) + if (xeno_shield.shield_source == XENO_SHIELD_SOURCE_RAVAGER) + rav_shield = xeno_shield break if (rav_shield && ((rav_shield.last_damage_taken + shield_decay_time) < world.time)) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Runner.dm b/code/modules/mob/living/carbon/xenomorph/castes/Runner.dm index f946ec44b5b7..77e4291ee84b 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Runner.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Runner.dm @@ -68,10 +68,10 @@ icon_xenonid = 'icons/mob/xenonids/runner.dmi' -/mob/living/carbon/xenomorph/runner/initialize_pass_flags(datum/pass_flags_container/PF) +/mob/living/carbon/xenomorph/runner/initialize_pass_flags(datum/pass_flags_container/pass_flags_container) ..() - if (PF) - PF.flags_pass |= PASS_FLAGS_CRAWLER + if (pass_flags_container) + pass_flags_container.flags_pass |= PASS_FLAGS_CRAWLER /datum/behavior_delegate/runner_base name = "Base Runner Behavior Delegate" diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Sentinel.dm b/code/modules/mob/living/carbon/xenomorph/castes/Sentinel.dm index 39426b1a9ef7..793bc733fc56 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Sentinel.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Sentinel.dm @@ -99,5 +99,6 @@ #undef NEURO_TOUCH_DELAY /datum/behavior_delegate/sentinel_base/proc/paralyzing_slash(mob/living/carbon/human/human_target) - human_target.apply_effect(2, WEAKEN) + human_target.KnockDown(2) + human_target.Stun(2) to_chat(human_target, SPAN_XENOHIGHDANGER("You fall over, paralyzed by the toxin!")) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Warrior.dm b/code/modules/mob/living/carbon/xenomorph/castes/Warrior.dm index 7c8edace81e4..5f82e3a2d321 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Warrior.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Warrior.dm @@ -72,41 +72,43 @@ lunged.set_effect(0, WEAKEN) return ..() -/mob/living/carbon/xenomorph/warrior/start_pulling(atom/movable/AM, lunge) - if (!check_state() || agility) +/mob/living/carbon/xenomorph/warrior/start_pulling(atom/movable/movable_atom, lunge) + if (!check_state()) return FALSE - if(!isliving(AM)) + if(!isliving(movable_atom)) return FALSE - var/mob/living/L = AM - var/should_neckgrab = !(src.can_not_harm(L)) && lunge + var/mob/living/living_mob = movable_atom + var/should_neckgrab = !(src.can_not_harm(living_mob)) && lunge - if(!QDELETED(L) && !QDELETED(L.pulledby) && L != src ) //override pull of other mobs - visible_message(SPAN_WARNING("[src] has broken [L.pulledby]'s grip on [L]!"), null, null, 5) - L.pulledby.stop_pulling() + if(!QDELETED(living_mob) && !QDELETED(living_mob.pulledby) && living_mob != src ) //override pull of other mobs + visible_message(SPAN_WARNING("[src] has broken [living_mob.pulledby]'s grip on [living_mob]!"), null, null, 5) + living_mob.pulledby.stop_pulling() - . = ..(L, lunge, should_neckgrab) + . = ..(living_mob, lunge, should_neckgrab) if(.) //successful pull - if(isxeno(L)) - var/mob/living/carbon/xenomorph/X = L - if(X.tier >= 2) // Tier 2 castes or higher immune to warrior grab stuns - return . - - if(should_neckgrab && L.mob_size < MOB_SIZE_BIG) - L.drop_held_items() - L.apply_effect(get_xeno_stun_duration(L, 2), WEAKEN) - L.pulledby = src - visible_message(SPAN_XENOWARNING("\The [src] grabs [L] by the throat!"), \ - SPAN_XENOWARNING("You grab [L] by the throat!")) + if(isxeno(living_mob)) + var/mob/living/carbon/xenomorph/xeno = living_mob + if(xeno.tier >= 2) // Tier 2 castes or higher immune to warrior grab stuns + return + + if(should_neckgrab && living_mob.mob_size < MOB_SIZE_BIG) + living_mob.drop_held_items() + var/duration = get_xeno_stun_duration(living_mob, 2) + living_mob.KnockDown(duration) + living_mob.Stun(duration) + living_mob.pulledby = src + visible_message(SPAN_XENOWARNING("[src] grabs [living_mob] by the throat!"), \ + SPAN_XENOWARNING("You grab [living_mob] by the throat!")) lunging = TRUE - addtimer(CALLBACK(src, PROC_REF(stop_lunging)), get_xeno_stun_duration(L, 2) SECONDS + 1 SECONDS) + addtimer(CALLBACK(src, PROC_REF(stop_lunging)), get_xeno_stun_duration(living_mob, 2) SECONDS + 1 SECONDS) /mob/living/carbon/xenomorph/warrior/proc/stop_lunging(world_time) lunging = FALSE -/mob/living/carbon/xenomorph/warrior/hitby(atom/movable/AM) - if(ishuman(AM)) +/mob/living/carbon/xenomorph/warrior/hitby(atom/movable/movable_atom) + if(ishuman(movable_atom)) return ..() @@ -120,7 +122,7 @@ var/color = "#6c6f24" var/emote_cooldown = 0 -/datum/behavior_delegate/warrior_base/melee_attack_additional_effects_target(mob/living/carbon/A) +/datum/behavior_delegate/warrior_base/melee_attack_additional_effects_target(mob/living/carbon/carbon) ..() if(SEND_SIGNAL(bound_xeno, COMSIG_XENO_PRE_HEAL) & COMPONENT_CANCEL_XENO_HEAL) @@ -156,3 +158,82 @@ /datum/behavior_delegate/warrior_base/proc/lifesteal_lock() bound_xeno.remove_filter("empower_rage") + + +/// Warrior specific behaviour for increasing pull power, limb rip. +/mob/living/carbon/xenomorph/warrior/pull_power(mob/mob) + if(!ripping_limb && mob.stat != DEAD) + if(mob.status_flags & XENO_HOST) + to_chat(src, SPAN_XENOWARNING("This would harm the embryo!")) + return + ripping_limb = TRUE + if(rip_limb(mob)) + stop_pulling() + ripping_limb = FALSE + + +/// Warrior Rip Limb - called by pull_power() +/mob/living/carbon/xenomorph/warrior/proc/rip_limb(mob/mob) + if(!istype(mob, /mob/living/carbon/human)) + return FALSE + + if(action_busy) //can't stack the attempts + return FALSE + + var/mob/living/carbon/human/human = mob + var/obj/limb/limb = human.get_limb(check_zone(zone_selected)) + + if(can_not_harm(human)) + to_chat(src, SPAN_XENOWARNING("You can't harm this host!")) + return + + if(!limb || limb.body_part == BODY_FLAG_CHEST || limb.body_part == BODY_FLAG_GROIN || (limb.status & LIMB_DESTROYED)) //Only limbs and head. + to_chat(src, SPAN_XENOWARNING("You can't rip off that limb.")) + return FALSE + var/limb_time = rand(40,60) + + if(limb.body_part == BODY_FLAG_HEAD) + limb_time = rand(90,110) + + visible_message(SPAN_XENOWARNING("[src] begins pulling on [mob]'s [limb.display_name] with incredible strength!"), \ + SPAN_XENOWARNING("You begin to pull on [mob]'s [limb.display_name] with incredible strength!")) + + if(!do_after(src, limb_time, INTERRUPT_ALL|INTERRUPT_DIFF_SELECT_ZONE, BUSY_ICON_HOSTILE) || mob.stat == DEAD || mob.status_flags & XENO_HOST) + to_chat(src, SPAN_NOTICE("You stop ripping off the limb.")) + if(mob.status_flags & XENO_HOST) + to_chat(src, SPAN_NOTICE("You detect an embryo inside [mob] which overwhelms your instinct to rip.")) + return FALSE + + if(limb.status & LIMB_DESTROYED) + return FALSE + + if(limb.status & (LIMB_ROBOT|LIMB_SYNTHSKIN)) + limb.take_damage(rand(30,40), 0, 0) // just do more damage + visible_message(SPAN_XENOWARNING("You hear [mob]'s [limb.display_name] being pulled beyond its load limits!"), \ + SPAN_XENOWARNING("[mob]'s [limb.display_name] begins to tear apart!")) + else + visible_message(SPAN_XENOWARNING("You hear the bones in [mob]'s [limb.display_name] snap with a sickening crunch!"), \ + SPAN_XENOWARNING("[mob]'s [limb.display_name] bones snap with a satisfying crunch!")) + limb.take_damage(rand(15,25), 0, 0) + limb.fracture(100) + mob.last_damage_data = create_cause_data(initial(caste_type), src) + src.attack_log += text("\[[time_stamp()]\] ripped the [limb.display_name] off of [mob.name] ([mob.ckey]) 1/2 progress") + mob.attack_log += text("\[[time_stamp()]\] had their [limb.display_name] ripped off by [src.name] ([src.ckey]) 1/2 progress") + log_attack("[src.name] ([src.ckey]) ripped the [limb.display_name] off of [mob.name] ([mob.ckey]) 1/2 progress") + + if(!do_after(src, limb_time, INTERRUPT_ALL|INTERRUPT_DIFF_SELECT_ZONE, BUSY_ICON_HOSTILE) || mob.stat == DEAD || iszombie(mob)) + to_chat(src, SPAN_NOTICE("You stop ripping off the limb.")) + return FALSE + + if(limb.status & LIMB_DESTROYED) + return FALSE + + visible_message(SPAN_XENOWARNING("[src] rips [mob]'s [limb.display_name] away from their body!"), \ + SPAN_XENOWARNING("[mob]'s [limb.display_name] rips away from their body!")) + src.attack_log += text("\[[time_stamp()]\] ripped the [limb.display_name] off of [mob.name] ([mob.ckey]) 2/2 progress") + mob.attack_log += text("\[[time_stamp()]\] had their [limb.display_name] ripped off by [src.name] ([src.ckey]) 2/2 progress") + log_attack("[src.name] ([src.ckey]) ripped the [limb.display_name] off of [mob.name] ([mob.ckey]) 2/2 progress") + + limb.droplimb(0, 0, initial(name)) + + return TRUE diff --git a/code/modules/mob/living/carbon/xenomorph/castes/lesser_drone.dm b/code/modules/mob/living/carbon/xenomorph/castes/lesser_drone.dm index 48bf0d95ddcf..9ca4cdc52474 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/lesser_drone.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/lesser_drone.dm @@ -95,3 +95,11 @@ if (PF) PF.flags_pass = PASS_MOB_IS_XENO|PASS_MOB_THRU_XENO PF.flags_can_pass_all = PASS_MOB_IS_XENO|PASS_MOB_THRU_XENO + +/mob/living/carbon/xenomorph/lesser_drone/ghostize(can_reenter_corpse = FALSE, aghosted = FALSE) + . = ..() + if(. && !aghosted && !QDELETED(src)) + gib() + +/mob/living/carbon/xenomorph/lesser_drone/handle_ghost_message() + return diff --git a/code/modules/mob/living/carbon/xenomorph/death.dm b/code/modules/mob/living/carbon/xenomorph/death.dm index 0374b21c6f36..1f7d02f98c7d 100644 --- a/code/modules/mob/living/carbon/xenomorph/death.dm +++ b/code/modules/mob/living/carbon/xenomorph/death.dm @@ -116,11 +116,11 @@ hive.remove_xeno(src) // Finding the last xeno for anti-delay. if(SSticker.mode && SSticker.current_state != GAME_STATE_FINISHED) - if((last_ares_callout + 2 MINUTES) > world.time) + if((GLOB.last_ares_callout + 2 MINUTES) > world.time) return if(hive.hivenumber == XENO_HIVE_NORMAL && (LAZYLEN(hive.totalXenos) == 1)) var/mob/living/carbon/xenomorph/X = LAZYACCESS(hive.totalXenos, 1) - last_ares_callout = world.time + GLOB.last_ares_callout = world.time // Tell the marines where the last one is. var/name = "[MAIN_AI_SYSTEM] Bioscan Status" var/input = "Bioscan complete.\n\nSensors indicate one remaining unknown lifeform signature in [get_area(X)]." diff --git a/code/modules/mob/living/carbon/xenomorph/egg_item.dm b/code/modules/mob/living/carbon/xenomorph/egg_item.dm index 77c5548d9f9f..b9304b33b15a 100644 --- a/code/modules/mob/living/carbon/xenomorph/egg_item.dm +++ b/code/modules/mob/living/carbon/xenomorph/egg_item.dm @@ -98,7 +98,7 @@ to_chat(user, SPAN_XENOWARNING("[src] must be planted on [lowertext(hive.prefix)]weeds.")) return - if(!hive_weeds) + if(!hive_weeds && user.mutation_type != CARRIER_EGGSAC) to_chat(user, SPAN_XENOWARNING("[src] can only be planted on [lowertext(hive.prefix)]hive weeds.")) return @@ -117,9 +117,16 @@ return for(var/obj/effect/alien/weeds/weed in T) - if(weed.weed_strength >= WEED_LEVEL_HIVE) + if(weed.weed_strength >= WEED_LEVEL_HIVE || user.mutation_type == CARRIER_EGGSAC) user.use_plasma(30) - var/obj/effect/alien/egg/newegg = new /obj/effect/alien/egg(T, hivenumber) + var/obj/effect/alien/egg/newegg + if(weed.weed_strength >= WEED_LEVEL_HIVE) + newegg = new /obj/effect/alien/egg(T, hivenumber) + else if(weed.weed_strength >= WEED_LEVEL_STANDARD) + newegg = new /obj/effect/alien/egg/carrier_egg(T,hivenumber, user) + else + to_chat(user, SPAN_XENOWARNING("[src] can't be planted on these weeds.")) + return newegg.flags_embryo = flags_embryo diff --git a/code/modules/mob/living/carbon/xenomorph/life.dm b/code/modules/mob/living/carbon/xenomorph/life.dm index c8f442c3dd28..2c84e5051f7c 100644 --- a/code/modules/mob/living/carbon/xenomorph/life.dm +++ b/code/modules/mob/living/carbon/xenomorph/life.dm @@ -456,7 +456,7 @@ Make sure their actual health updates immediately.*/ var/area/A = get_area(loc) var/area/QA = get_area(tracking_atom.loc) if(A.fake_zlevel == QA.fake_zlevel) - QL.setDir(get_dir(src, tracking_atom)) + QL.setDir(Get_Compass_Dir(src, tracking_atom)) QL.icon_state = "trackon" else QL.icon_state = "trackondirect" @@ -485,7 +485,7 @@ Make sure their actual health updates immediately.*/ ML.overlays |= image('icons/mob/hud/xeno_markers.dmi', "all_direction") return else if(A.fake_zlevel == MA.fake_zlevel) //normal tracking - ML.setDir(get_dir(src, tracked_marker_turf)) + ML.setDir(Get_Compass_Dir(src, tracked_marker_turf)) ML.overlays |= image(tracked_marker.seenMeaning, "pixel_y" = 0) ML.overlays |= image('icons/mob/hud/xeno_markers.dmi', "center_glow") ML.overlays |= image('icons/mob/hud/xeno_markers.dmi', "direction") diff --git a/code/modules/mob/living/carbon/xenomorph/mutators/strains/boiler/trapper.dm b/code/modules/mob/living/carbon/xenomorph/mutators/strains/boiler/trapper.dm index cb43960a8e2c..c14d2c6773cf 100644 --- a/code/modules/mob/living/carbon/xenomorph/mutators/strains/boiler/trapper.dm +++ b/code/modules/mob/living/carbon/xenomorph/mutators/strains/boiler/trapper.dm @@ -10,7 +10,6 @@ /datum/action/xeno_action/activable/xeno_spit/bombard, /datum/action/xeno_action/onclick/shift_spits/boiler, /datum/action/xeno_action/activable/spray_acid/boiler, - /datum/action/xeno_action/onclick/dump_acid, /datum/action/xeno_action/onclick/toggle_long_range/boiler, /datum/action/xeno_action/onclick/acid_shroud, ) diff --git a/code/modules/mob/living/carbon/xenomorph/mutators/strains/carrier/eggsac.dm b/code/modules/mob/living/carbon/xenomorph/mutators/strains/carrier/eggsac.dm index 18d28675557e..3b321ca259c9 100644 --- a/code/modules/mob/living/carbon/xenomorph/mutators/strains/carrier/eggsac.dm +++ b/code/modules/mob/living/carbon/xenomorph/mutators/strains/carrier/eggsac.dm @@ -1,6 +1,6 @@ /datum/xeno_mutator/eggsac name = "STRAIN: Carrier - Eggsac" - description = "In exchange for your ability to store huggers and place traps, you gain larger plasma stores, strong pheromones, and the ability to lay eggs by using your plasma stores. In addition, you can now carry twelve eggs at once and can place eggs one pace further than normal" + description = "In exchange for your ability to store huggers and place traps, you gain larger plasma stores, strong pheromones, and the ability to lay eggs by using your plasma stores. In addition, you can now carry twelve eggs at once and can place eggs one pace further than normal. \n\nYou can also place a small number of fragile eggs on normal weeds. These eggs have a lifetime of five minutes while you remain within 14 tiles. Or one minute if you leave this range." flavor_description = "An egg is always an adventure; the next one may be different." cost = MUTATOR_COST_EXPENSIVE individual_only = TRUE @@ -15,6 +15,7 @@ /datum/action/xeno_action/active_toggle/generate_egg, /datum/action/xeno_action/activable/retrieve_egg, // readding it so it gets at the end of the ability list ) + behavior_delegate_type = /datum/behavior_delegate/carrier_eggsac keystone = TRUE /datum/xeno_mutator/eggsac/apply_mutator(datum/mutator_set/individual_mutators/mutator_set) @@ -40,8 +41,58 @@ carrier.update_eggsac_overlays() carrier.eggs_max = 12 carrier.egg_planting_range = 2 + apply_behavior_holder(carrier) return TRUE +#define EGGSAC_OFF_WEED_EGGCAP 4 +#define EGGSAC_EGG_SUSTAIN_DISTANCE 14 + +/datum/behavior_delegate/carrier_eggsac + name = "Eggsac Carrier Behavior Delegate" + ///List of /obj/effect/alien/egg/carrier_egg sustained by the carrier on normal weeds + var/list/eggs_sustained = list() + ///Total number of eggs which can be sustained defined as EGGSAC_OFF_WEED_EGGCAP + var/egg_sustain_cap = EGGSAC_OFF_WEED_EGGCAP + ///Distance from the egg that the carrier can go before it stops sustaining it + var/sustain_distance = EGGSAC_EGG_SUSTAIN_DISTANCE + +/datum/behavior_delegate/carrier_eggsac/append_to_stat() + . = list() + . += "Eggs sustained: [length(eggs_sustained)] / [egg_sustain_cap]" + +/datum/behavior_delegate/carrier_eggsac/on_life() + if(length(eggs_sustained) > egg_sustain_cap) + var/obj/effect/alien/egg/carrier_egg/my_egg = eggs_sustained[1] + if(my_egg) + remove_egg_owner(my_egg) + my_egg.start_unstoppable_decay() + to_chat(bound_xeno, SPAN_XENOWARNING("You can only sustain [egg_sustain_cap] eggs off hive weeds! Your oldest placed egg is decaying rapidly.")) + + for(var/obj/effect/alien/egg/carrier_egg/my_egg as anything in eggs_sustained) + //Get the distance from us to our sustained egg + if(get_dist(bound_xeno, my_egg) <= sustain_distance) + my_egg.last_refreshed = world.time + else + my_egg.check_decay() + +///Remove owner of egg +/datum/behavior_delegate/carrier_eggsac/proc/remove_egg_owner(obj/effect/alien/egg/carrier_egg/egg) + if(!egg.owner || egg.owner != bound_xeno) + return + eggs_sustained -= egg + egg.owner = null + +/datum/behavior_delegate/carrier_eggsac/handle_death(mob/M) + for(var/obj/effect/alien/egg/carrier_egg/my_egg as anything in eggs_sustained) + remove_egg_owner(my_egg) + my_egg.start_unstoppable_decay() + +///Remove all references to src in eggs_sustained +/datum/behavior_delegate/carrier_eggsac/Destroy() + for(var/obj/effect/alien/egg/carrier_egg/my_egg as anything in eggs_sustained) + my_egg.owner = null + return ..() + /datum/action/xeno_action/active_toggle/generate_egg name = "Generate Eggs (50)" action_icon_state = "lay_egg" @@ -58,7 +109,7 @@ /datum/action/xeno_action/active_toggle/generate_egg/should_use_plasma() . = FALSE - var/mob/living/carbon/xenomorph/xeno = owner + var/mob/living/carbon/xenomorph/carrier/xeno = owner if(!xeno) return if(xeno.eggs_cur < xeno.eggs_max) @@ -67,7 +118,7 @@ /datum/action/xeno_action/active_toggle/generate_egg/life_tick() . = ..() if(.) - var/mob/living/carbon/xenomorph/xeno = owner + var/mob/living/carbon/xenomorph/carrier/xeno = owner if(!xeno) return if(xeno.eggs_cur < xeno.eggs_max) @@ -77,3 +128,6 @@ xeno.eggs_cur++ to_chat(xeno, SPAN_XENONOTICE("You generate a egg. Now sheltering: [xeno.eggs_cur] / [xeno.eggs_max].")) xeno.update_icons() + +#undef EGGSAC_OFF_WEED_EGGCAP +#undef EGGSAC_EGG_SUSTAIN_DISTANCE diff --git a/code/modules/mob/living/carbon/xenomorph/mutators/strains/crusher/charger.dm b/code/modules/mob/living/carbon/xenomorph/mutators/strains/crusher/charger.dm index 5e986020bb48..1fc746829acd 100644 --- a/code/modules/mob/living/carbon/xenomorph/mutators/strains/crusher/charger.dm +++ b/code/modules/mob/living/carbon/xenomorph/mutators/strains/crusher/charger.dm @@ -385,8 +385,8 @@ if(HAS_TRAIT(src, TRAIT_CHARGING)) apply_effect(2, WEAKEN) xeno.apply_effect(2, WEAKEN) - src.throw_atom(pick(cardinal),1,3,xeno,TRUE) - xeno.throw_atom(pick(cardinal),1,3,xeno,TRUE) + src.throw_atom(pick(GLOB.cardinals),1,3,xeno,TRUE) + xeno.throw_atom(pick(GLOB.cardinals),1,3,xeno,TRUE) charger_ability.stop_momentum() // We assume the other crusher'sparks handle_charge_collision() kicks in and stuns us too. playsound(get_turf(xeno), 'sound/effects/bang.ogg', 25, 0) return diff --git a/code/modules/mob/living/carbon/xenomorph/mutators/strains/defender/steel_crest.dm b/code/modules/mob/living/carbon/xenomorph/mutators/strains/defender/steel_crest.dm index 630477bd053e..957e7f1b8926 100644 --- a/code/modules/mob/living/carbon/xenomorph/mutators/strains/defender/steel_crest.dm +++ b/code/modules/mob/living/carbon/xenomorph/mutators/strains/defender/steel_crest.dm @@ -23,7 +23,6 @@ defender.mutation_type = DEFENDER_STEELCREST defender.mutation_icon_state = DEFENDER_STEELCREST defender.damage_modifier -= XENO_DAMAGE_MOD_VERY_SMALL - defender.steelcrest = TRUE if(defender.fortify) defender.ability_speed_modifier += 2.5 mutator_update_actions(defender) diff --git a/code/modules/mob/living/carbon/xenomorph/resin_constructions.dm b/code/modules/mob/living/carbon/xenomorph/resin_constructions.dm index 3bfb4e355416..793ed45bcb13 100644 --- a/code/modules/mob/living/carbon/xenomorph/resin_constructions.dm +++ b/code/modules/mob/living/carbon/xenomorph/resin_constructions.dm @@ -196,7 +196,7 @@ GLOBAL_VAR_INIT(resin_lz_allowed, FALSE) return FALSE var/wall_support = FALSE - for(var/D in cardinal) + for(var/D in GLOB.cardinals) var/turf/CT = get_step(T, D) if(CT) if(CT.density) diff --git a/code/modules/mob/living/carbon/xenomorph/say.dm b/code/modules/mob/living/carbon/xenomorph/say.dm index 47e560b80956..5b8ce1ecd292 100644 --- a/code/modules/mob/living/carbon/xenomorph/say.dm +++ b/code/modules/mob/living/carbon/xenomorph/say.dm @@ -1,7 +1,7 @@ /mob/living/carbon/xenomorph/say(message) var/verb = "says" var/forced = 0 - var/message_range = world_view_size + var/message_range = GLOB.world_view_size if(client) if(client.prefs.muted & MUTE_IC) diff --git a/code/modules/mob/living/carbon/xenomorph/update_icons.dm b/code/modules/mob/living/carbon/xenomorph/update_icons.dm index 787d1547da3f..7b048bdf2f58 100644 --- a/code/modules/mob/living/carbon/xenomorph/update_icons.dm +++ b/code/modules/mob/living/carbon/xenomorph/update_icons.dm @@ -166,12 +166,12 @@ apply_overlay(X_L_HAND_LAYER) /mob/living/carbon/xenomorph/update_inv_back() - if(!backpack_icon_carrier) + if(!backpack_icon_holder) return // Xenos will only have a vis_obj if they've been equipped with a pack before var/obj/item/storage/backpack/backpack = back if(!backpack?.xeno_icon_state) - backpack_icon_carrier.icon_state = "none" + backpack_icon_holder.icon_state = "none" return var/state_modifier = "" @@ -185,11 +185,11 @@ else if(handle_special_state()) state_modifier = handle_special_backpack_states() - backpack_icon_carrier.icon_state = backpack.xeno_icon_state + state_modifier + backpack_icon_holder.icon_state = backpack.xeno_icon_state + state_modifier - backpack_icon_carrier.layer = -X_BACK_LAYER + backpack_icon_holder.layer = -X_BACK_LAYER if(dir == NORTH && (back.flags_item & ITEM_OVERRIDE_NORTHFACE)) - backpack_icon_carrier.layer = -X_BACK_FRONT_LAYER + backpack_icon_holder.layer = -X_BACK_FRONT_LAYER /mob/living/carbon/xenomorph/proc/update_inv_resource() remove_overlay(X_RESOURCE_LAYER) @@ -304,24 +304,24 @@ // Shamelessly inspired from the equivalent proc on TGCM /mob/living/carbon/xenomorph/proc/update_wounds() - if(!wound_icon_carrier) + if(!wound_icon_holder) return var/health_threshold - wound_icon_carrier.layer = layer + 0.01 + wound_icon_holder.layer = layer + 0.01 health_threshold = max(CEILING((health * 4) / (maxHealth), 1), 0) //From 0 to 4, in 25% chunks if(health > HEALTH_THRESHOLD_DEAD) if(health_threshold > 3) - wound_icon_carrier.icon_state = "none" + wound_icon_holder.icon_state = "none" else if(body_position == LYING_DOWN) - if((resting || sleeping) && (!HAS_TRAIT(src, TRAIT_KNOCKEDOUT) && health > 0)) - wound_icon_carrier.icon_state = "[caste.caste_type]_rest_[health_threshold]" + if(!HAS_TRAIT(src, TRAIT_INCAPACITATED) && !HAS_TRAIT(src, TRAIT_FLOORED)) + wound_icon_holder.icon_state = "[caste.caste_type]_rest_[health_threshold]" else - wound_icon_carrier.icon_state = "[caste.caste_type]_downed_[health_threshold]" + wound_icon_holder.icon_state = "[caste.caste_type]_downed_[health_threshold]" else if(!handle_special_state()) - wound_icon_carrier.icon_state = "[caste.caste_type]_walk_[health_threshold]" + wound_icon_holder.icon_state = "[caste.caste_type]_walk_[health_threshold]" else - wound_icon_carrier.icon_state = handle_special_wound_states(health_threshold) + wound_icon_holder.icon_state = handle_special_wound_states(health_threshold) ///Used to display the xeno wounds/backpacks without rapidly switching overlays @@ -335,7 +335,7 @@ /atom/movable/vis_obj/xeno_pack/Initialize(mapload, mob/living/carbon/source) . = ..() if(source) - icon = default_xeno_onmob_icons[source.type] + icon = GLOB.default_xeno_onmob_icons[source.type] //Xeno Overlays Indexes////////// #undef X_BACK_LAYER diff --git a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm index f1fff4fb765e..a5da9763047d 100644 --- a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm +++ b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm @@ -166,7 +166,7 @@ var/total_xeno_playtime = 0 - for(var/caste in RoleAuthority.castes_by_name) + for(var/caste in GLOB.RoleAuthority.castes_by_name) total_xeno_playtime += get_job_playtime(src, caste) total_xeno_playtime += get_job_playtime(src, JOB_XENOMORPH) @@ -187,7 +187,7 @@ var/list/drone_evo_castes = list(XENO_CASTE_DRONE, XENO_CASTE_CARRIER, XENO_CASTE_BURROWER, XENO_CASTE_HIVELORD, XENO_CASTE_QUEEN) - for(var/caste in RoleAuthority.castes_by_name) + for(var/caste in GLOB.RoleAuthority.castes_by_name) if(!(caste in drone_evo_castes)) continue total_drone_playtime += get_job_playtime(src, caste) @@ -198,8 +198,8 @@ /client/proc/get_total_t3_playtime() var/total_t3_playtime = 0 var/datum/caste_datum/caste - for(var/caste_name in RoleAuthority.castes_by_name) - caste = RoleAuthority.castes_by_name[caste_name] + for(var/caste_name in GLOB.RoleAuthority.castes_by_name) + caste = GLOB.RoleAuthority.castes_by_name[caste_name] if(caste.tier < 3) continue total_t3_playtime += get_job_playtime(src, caste_name) @@ -362,22 +362,43 @@ /// This number divides the total xenos counted for slots to give the max number of lesser drones var/playable_lesser_drones_max_divisor = 3 - var/datum/tacmap/xeno/tacmap + var/datum/tacmap/drawing/xeno/tacmap var/minimap_type = MINIMAP_FLAG_XENO + var/list/available_nicknumbers = list() + + /*Stores the image()'s for the xeno evolution radial menu + To add an image for your caste - add an icon to icons/mob/xenos/radial_xenos.dmi + Icon size should be 32x32, to make them fit within the radial menu border size your icon 22x22 and leave 10px transparent border. + The name of the icon should be the same as the XENO_CASTE_ define for that caste eg. #define XENO_CASTE_DRONE "Drone" + */ + var/static/list/evolution_menu_images + /datum/hive_status/New() mutators.hive = src hive_ui = new(src) mark_ui = new(src) faction_ui = new(src) + minimap_type = get_minimap_flag_for_faction(hivenumber) tacmap = new(src, minimap_type) if(!internal_faction) internal_faction = name + for(var/number in 1 to 999) + available_nicknumbers += number if(hivenumber != XENO_HIVE_NORMAL) return + if(!evolution_menu_images) + evolution_menu_images = list() + generate_evo_menu_images() + RegisterSignal(SSdcs, COMSIG_GLOB_POST_SETUP, PROC_REF(post_setup)) +///Generate the image()'s requried for the evolution radial menu. +/datum/hive_status/proc/generate_evo_menu_images() + for(var/datum/caste_datum/caste as anything in subtypesof(/datum/caste_datum)) + evolution_menu_images[initial(caste.caste_type)] = image('icons/mob/xenos/radial_xenos.dmi', initial(caste.caste_type)) + /datum/hive_status/proc/post_setup() SIGNAL_HANDLER @@ -944,12 +965,12 @@ for(var/mob/living/carbon/human/current_human as anything in GLOB.alive_human_list) if(!(isspecieshuman(current_human) || isspeciessynth(current_human))) continue - var/datum/job/job = RoleAuthority.roles_for_mode[current_human.job] + var/datum/job/job = GLOB.RoleAuthority.roles_for_mode[current_human.job] if(!job) continue var/turf/turf = get_turf(current_human) if(is_mainship_level(turf?.z)) - shipside_humans_weighted_count += RoleAuthority.calculate_role_weight(job) + shipside_humans_weighted_count += GLOB.RoleAuthority.calculate_role_weight(job) hijack_burrowed_surge = TRUE hijack_burrowed_left = max(n_ceil(shipside_humans_weighted_count * 0.5) - xenos_count, 5) hivecore_cooldown = FALSE diff --git a/code/modules/mob/living/carbon/xenomorph/xeno_verbs.dm b/code/modules/mob/living/carbon/xenomorph/xeno_verbs.dm index 94218b224e2d..dd722f62df63 100644 --- a/code/modules/mob/living/carbon/xenomorph/xeno_verbs.dm +++ b/code/modules/mob/living/carbon/xenomorph/xeno_verbs.dm @@ -81,7 +81,7 @@ set desc = "Toggles the health and plasma HUD appearing above Xenomorphs." set category = "Alien" - var/datum/mob_hud/H = huds[MOB_HUD_XENO_STATUS] + var/datum/mob_hud/H = GLOB.huds[MOB_HUD_XENO_STATUS] if (xeno_mobhud) H.remove_hud_from(usr, usr) else @@ -94,7 +94,7 @@ set desc = "Toggles the HUD that renders various negative status effects inflicted on humans." set category = "Alien" - var/datum/mob_hud/H = huds[MOB_HUD_XENO_HOSTILE] + var/datum/mob_hud/H = GLOB.huds[MOB_HUD_XENO_HOSTILE] if (xeno_hostile_hud) H.remove_hud_from(usr, usr) else diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index 9fade66e44c6..7c4eff0e2c15 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -65,14 +65,13 @@ //#define EFFECT_FLAG_XENOMORPH //#define EFFECT_FLAG_CHEMICAL +/// Legacy wrapper for effects, DO NOT USE and migrate all code to USING THE STATUS PROCS DIRECTLY /mob/proc/apply_effect() return FALSE +// Legacy wrapper for effects, DO NOT USE and migrate all code to USING THE BELOW PROCS DIRECTLY /mob/living/apply_effect(effect = 0, effect_type = STUN, effect_flags = EFFECT_FLAG_DEFAULT) - if(SEND_SIGNAL(src, COMSIG_LIVING_APPLY_EFFECT, effect, effect_type, effect_flags) & COMPONENT_CANCEL_EFFECT) - return - if(!effect) return FALSE @@ -106,9 +105,6 @@ /mob/living/adjust_effect(effect = 0, effect_type = STUN, effect_flags = EFFECT_FLAG_DEFAULT) - if(SEND_SIGNAL(src, COMSIG_LIVING_ADJUST_EFFECT, effect, effect_type, effect_flags) & COMPONENT_CANCEL_EFFECT) - return - if(!effect) return FALSE @@ -142,9 +138,6 @@ /mob/living/set_effect(effect = 0, effect_type = STUN, effect_flags = EFFECT_FLAG_DEFAULT) - if(SEND_SIGNAL(src, COMSIG_LIVING_SET_EFFECT, effect, effect_type, effect_flags) & COMPONENT_CANCEL_EFFECT) - return - switch(effect_type) if(STUN) SetStun(effect) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index a515225a9127..5e39e37681ba 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -656,8 +656,6 @@ var/matrix/base = matrix() if(pulledby && pulledby.grab_level >= GRAB_CARRY) visual_angle = 90 // CM code - for fireman carry - else if(lying_angle) - base.Translate(rand(-10,10), rand(-10,10)) if(instant_update) apply_transform(base.Turn(visual_angle)) else diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index fa33af97275e..375594574ab8 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -22,10 +22,10 @@ return 0 //only carbon liveforms have this proc /mob/living/emp_act(severity) + . = ..() var/list/L = src.get_contents() for(var/obj/O in L) O.emp_act(severity) - ..() //this proc handles being hit by a thrown atom /mob/living/hitby(atom/movable/AM) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 68b24e7c0ee1..fb2bd2af0cf9 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -14,10 +14,7 @@ var/brainloss = 0 //'Retardation' damage caused by someone hitting you in the head with a bible or being infected with brainrot. var/halloss = 0 //Hallucination damage. 'Fake' damage obtained through hallucinating or the holodeck. Sleeping should cause it to wear off. - // please don't use these - VAR_PROTECTED/knocked_out = 0 - VAR_PROTECTED/knocked_down = 0 - VAR_PROTECTED/stunned = 0 + // please don't use these directly, use the procs var/dazed = 0 var/slowed = 0 // X_SLOW_AMOUNT var/superslowed = 0 // X_SUPERSLOW_AMOUNT @@ -25,6 +22,8 @@ ///a list of all status effects the mob has var/list/status_effects + /// Cooldown for manually toggling resting to avoid spamming + COOLDOWN_DECLARE(rest_cooldown) var/hallucination = 0 //Directly affects how long a mob will hallucinate for var/list/atom/hallucinations = list() //A list of hallucinated people that try to attack the mob. See /obj/effect/fake_attacker in hallucinations.dm diff --git a/code/modules/mob/living/living_health_procs.dm b/code/modules/mob/living/living_health_procs.dm index 5b27b9dab738..42b09ef0afbb 100644 --- a/code/modules/mob/living/living_health_procs.dm +++ b/code/modules/mob/living/living_health_procs.dm @@ -87,7 +87,7 @@ return amount * GLOBAL_STATUS_MULTIPLIER /mob/living/proc/IsStun() //If we're stunned return has_status_effect(/datum/status_effect/incapacitating/stun) -/mob/living/proc/AmountStun() //How many deciseconds remain in our stun +/mob/living/proc/AmountStun() //How much time remain in our stun - scaled by GLOBAL_STATUS_MULTIPLIER (normally in multiples of legacy 2 seconds) var/datum/status_effect/incapacitating/stun/S = IsStun() if(S) return S.get_duration_left() / GLOBAL_STATUS_MULTIPLIER @@ -205,13 +205,17 @@ /// Overridable handler to adjust the numerical value of status effects. Expand as needed /mob/living/proc/GetKnockDownDuration(amount) return amount * GLOBAL_STATUS_MULTIPLIER + /mob/living/proc/IsKnockDown() return has_status_effect(/datum/status_effect/incapacitating/knockdown) -/mob/living/proc/AmountKnockDown() //How many deciseconds remains + +///How much time remains - scaled by GLOBAL_STATUS_MULTIPLIER (normally in multiples of legacy 2 seconds) +/mob/living/proc/AmountKnockDown() var/datum/status_effect/incapacitating/knockdown/S = IsKnockDown() if(S) return S.get_duration_left() / GLOBAL_STATUS_MULTIPLIER return 0 + /mob/living/proc/KnockDown(amount) if(!(status_flags & CANKNOCKDOWN)) return @@ -222,7 +226,9 @@ else if(amount > 0) S = apply_status_effect(/datum/status_effect/incapacitating/knockdown, amount) return S -/mob/living/proc/SetKnockDown(amount, ignore_canstun = FALSE) //Sets remaining duration + +///Sets exact remaining KnockDown duration +/mob/living/proc/SetKnockDown(amount, ignore_canstun = FALSE) if(!(status_flags & CANKNOCKDOWN)) return amount = GetKnockDownDuration(amount) @@ -236,7 +242,9 @@ else S = apply_status_effect(/datum/status_effect/incapacitating/knockdown, amount) return S -/mob/living/proc/AdjustKnockDown(amount, ignore_canstun = FALSE) //Adds to remaining duration + +///Adds to remaining Knockdown duration +/mob/living/proc/AdjustKnockDown(amount, ignore_canstun = FALSE) if(!(status_flags & CANKNOCKDOWN)) return amount = GetKnockDownDuration(amount) @@ -251,13 +259,17 @@ /// Overridable handler to adjust the numerical value of status effects. Expand as needed /mob/living/proc/GetKnockOutDuration(amount) return amount * GLOBAL_STATUS_MULTIPLIER + /mob/living/proc/IsKnockOut() return has_status_effect(/datum/status_effect/incapacitating/unconscious) -/mob/living/proc/AmountKnockOut() //How many deciseconds remains + +/mob/living/proc/AmountKnockOut() //How much time remains - scaled by GLOBAL_STATUS_MULTIPLIER (normally in multiples of legacy 2 seconds) var/datum/status_effect/incapacitating/unconscious/S = IsKnockOut() if(S) return S.get_duration_left() / GLOBAL_STATUS_MULTIPLIER return 0 + +/// Sets Knockout duration to at least the amount provided /mob/living/proc/KnockOut(amount) if(!(status_flags & CANKNOCKOUT)) return @@ -268,7 +280,9 @@ else if(amount > 0) S = apply_status_effect(/datum/status_effect/incapacitating/unconscious, amount) return S -/mob/living/proc/SetKnockOut(amount, ignore_canstun = FALSE) //Sets remaining duration + +/// Sets exact remaining Knockout duration +/mob/living/proc/SetKnockOut(amount, ignore_canstun = FALSE) if(!(status_flags & CANKNOCKOUT)) return amount = GetKnockOutDuration(amount) @@ -282,7 +296,9 @@ else S = apply_status_effect(/datum/status_effect/incapacitating/unconscious, amount) return S -/mob/living/proc/AdjustKnockOut(amount, ignore_canstun = FALSE) //Adds to remaining duration + +/// Adds to remaining Knockout duration +/mob/living/proc/AdjustKnockOut(amount, ignore_canstun = FALSE) if(!(status_flags & CANKNOCKOUT)) return amount = GetKnockOutDuration(amount) @@ -528,3 +544,4 @@ if(stat >= UNCONSCIOUS) return face_dir(direction) + return ..() diff --git a/code/modules/mob/living/living_healthscan.dm b/code/modules/mob/living/living_healthscan.dm index 6875aa934fd2..f3355157a40f 100644 --- a/code/modules/mob/living/living_healthscan.dm +++ b/code/modules/mob/living/living_healthscan.dm @@ -441,7 +441,7 @@ GLOBAL_LIST_INIT(known_implants, subtypesof(/obj/item/implant)) data["ssd"] = null //clear the data in case we have an old input from a previous scan if(target_mob.getBrainLoss() >= 100 || !target_mob.has_brain()) - data["ssd"] = "Subject is brain-dead." + data["ssd"] = "Subject has taken extreme amounts of brain damage." else if(target_mob.has_brain() && target_mob.stat != DEAD && ishuman(target_mob)) if(!target_mob.key) data["ssd"] = "No soul detected." // they ghosted @@ -586,7 +586,7 @@ GLOBAL_LIST_INIT(known_implants, subtypesof(/obj/item/implant)) if(!D.hidden[SCANNER]) dat += "\t *Warning: [D.form] Detected\nName: [D.name].\nType: [D.spread].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure]\n" if (src.getBrainLoss() >= 100 || !src.has_brain()) - dat += "\t *Subject is brain dead.\n" + dat += "\t *Subject has taken extreme amounts of brain damage.\n" if(src.has_brain() && src.stat != DEAD && ishuman(src)) if(!src.key) diff --git a/code/modules/mob/living/living_helpers.dm b/code/modules/mob/living/living_helpers.dm index 7650995f102c..8d5a469c1b4d 100644 --- a/code/modules/mob/living/living_helpers.dm +++ b/code/modules/mob/living/living_helpers.dm @@ -23,7 +23,7 @@ return if(!direction) - direction = pick(alldirs) + direction = pick(GLOB.alldirs) var/turf/target_turf = get_turf(src) var/turf/temporary_turf = get_turf(src) diff --git a/code/modules/mob/living/living_verbs.dm b/code/modules/mob/living/living_verbs.dm index 34510898423d..9dfb5ff721a1 100644 --- a/code/modules/mob/living/living_verbs.dm +++ b/code/modules/mob/living/living_verbs.dm @@ -20,7 +20,7 @@ if(isxeno(src)) var/mob/living/carbon/xenomorph/xeno = src - if(xeno.burrow) + if(HAS_TRAIT(xeno, TRAIT_ABILITY_BURROWED)) to_chat(src, SPAN_WARNING("You can't resist in your current state.")) return diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 45eb43c91773..9fa38d1ecb43 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -1,4 +1,4 @@ -var/list/department_radio_keys = list( +GLOBAL_LIST_INIT(department_radio_keys, list( ":i" = RADIO_CHANNEL_INTERCOM, ".i" = RADIO_CHANNEL_INTERCOM, "#i" = RADIO_CHANNEL_INTERCOM, ":h" = RADIO_CHANNEL_DEPARTMENT, ".h" = RADIO_CHANNEL_DEPARTMENT, "#h" = RADIO_CHANNEL_DEPARTMENT, ":w" = RADIO_MODE_WHISPER, ".w" = RADIO_MODE_WHISPER, "#w" = RADIO_MODE_WHISPER, @@ -49,18 +49,18 @@ var/list/department_radio_keys = list( ":K" = SQUAD_SOF, ".K" = SQUAD_SOF, "#K" = RADIO_CHANNEL_WY_WO, ":Q" = RADIO_CHANNEL_ROYAL_MARINE, ".Q" = RADIO_CHANNEL_ROYAL_MARINE, ":R" = RADIO_CHANNEL_PROVOST, ".R" = RADIO_CHANNEL_PROVOST, "#R" = RADIO_CHANNEL_PROVOST, -) +)) /proc/channel_to_prefix(channel) var/channel_key - for(var/key in department_radio_keys) - if(department_radio_keys[key] == channel) + for(var/key in GLOB.department_radio_keys) + if(GLOB.department_radio_keys[key] == channel) channel_key = key break return channel_key /proc/prefix_to_channel(prefix) - return department_radio_keys[prefix] + return GLOB.department_radio_keys[prefix] ///Shows custom speech bubbles for screaming, *warcry etc. /mob/living/proc/show_speech_bubble(bubble_name, bubble_type = bubble_icon) @@ -76,7 +76,7 @@ var/list/department_radio_keys = list( /mob/living/proc/remove_speech_bubble(mutable_appearance/speech_bubble, list_of_mobs) overlays -= speech_bubble -/mob/living/say(message, datum/language/speaking = null, verb="says", alt_name="", italics=0, message_range = world_view_size, sound/speech_sound, sound_vol, nolog = 0, message_mode = null, bubble_type = bubble_icon) +/mob/living/say(message, datum/language/speaking = null, verb="says", alt_name="", italics=0, message_range = GLOB.world_view_size, sound/speech_sound, sound_vol, nolog = 0, message_mode = null, bubble_type = bubble_icon) var/turf/T if(SEND_SIGNAL(src, COMSIG_LIVING_SPEAK, message, speaking, verb, alt_name, italics, message_range, speech_sound, sound_vol, nolog, message_mode) & COMPONENT_OVERRIDE_SPEAK) return @@ -118,6 +118,13 @@ var/list/department_radio_keys = list( listening += M hearturfs += M.locs[1] for(var/obj/O in M.contents) + var/obj/item/clothing/worn_item = O + if((O.flags_atom & USES_HEARING) || ((istype(worn_item) && worn_item.accessories))) + listening_obj |= O + else if(istype(I, /obj/structure/surface)) + var/obj/structure/surface/table = I + hearturfs += table.locs[1] + for(var/obj/O in table.contents) if(O.flags_atom & USES_HEARING) listening_obj |= O else if(istype(I, /obj/)) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index b4e5b6d855b4..6782e3174579 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -1,8 +1,8 @@ #define AI_CHECK_WIRELESS 1 #define AI_CHECK_RADIO 2 -var/list/ai_list = list() -var/list/ai_verbs_default = list( +GLOBAL_LIST_EMPTY(ai_list) +GLOBAL_LIST_INIT(ai_verbs_default, list( /mob/living/silicon/ai/proc/ai_alerts, /mob/living/silicon/ai/proc/ai_announcement, // /mob/living/silicon/ai/proc/ai_recall_shuttle, @@ -17,7 +17,7 @@ var/list/ai_verbs_default = list( /mob/living/silicon/ai/proc/pick_icon, /mob/living/silicon/ai/proc/sensor_mode, /mob/living/silicon/ai/proc/toggle_acceleration -) +)) //mob/living/silicon/ai/proc/ai_hologram_change, @@ -30,7 +30,7 @@ var/list/ai_verbs_default = list( /proc/AutoUpdateAI(obj/subject) var/is_in_use = 0 if (subject!=null) - for(var/A in ai_list) + for(var/A in GLOB.ai_list) var/mob/living/silicon/ai/M = A if ((M.client && M.interactee == subject)) is_in_use = 1 @@ -82,17 +82,17 @@ var/list/ai_verbs_default = list( var/datum/announcement/priority/announcement /mob/living/silicon/ai/proc/add_ai_verbs() - add_verb(src, ai_verbs_default) + add_verb(src, GLOB.ai_verbs_default) /mob/living/silicon/ai/proc/remove_ai_verbs() - remove_verb(src, ai_verbs_default) + remove_verb(src, GLOB.ai_verbs_default) /mob/living/silicon/ai/New(loc, obj/item/device/mmi/B, safety = 0) - var/list/possibleNames = ai_names + var/list/possibleNames = GLOB.ai_names var/pickedName = null while(!pickedName) - pickedName = pick(ai_names) + pickedName = pick(GLOB.ai_names) for (var/mob/living/silicon/ai/A in GLOB.mob_list) if (A.real_name == pickedName && possibleNames.len > 1) //fixing the theoretically possible infinite loop possibleNames -= pickedName @@ -143,12 +143,12 @@ var/list/ai_verbs_default = list( spawn(5) new /obj/structure/machinery/ai_powersupply(src) - ai_list += src + GLOB.ai_list += src ..() return /mob/living/silicon/ai/Destroy() - ai_list -= src + GLOB.ai_list -= src QDEL_NULL(aiMulti) if(aiRadio) aiRadio.myAi = null @@ -301,8 +301,8 @@ var/list/ai_verbs_default = list( return 0 /mob/living/silicon/ai/emp_act(severity) + . = ..() if (prob(30)) view_core() - ..() /mob/living/silicon/ai/Topic(href, href_list) if(usr != src) @@ -315,7 +315,7 @@ var/list/ai_verbs_default = list( unset_interaction() src << browse(null, t1) if (href_list["switchcamera"]) - switchCamera(locate(href_list["switchcamera"])) in cameranet.cameras + switchCamera(locate(href_list["switchcamera"])) in GLOB.cameranet.cameras if (href_list["showalerts"]) ai_alerts() //Carn: holopad requests @@ -422,11 +422,11 @@ var/list/ai_verbs_default = list( var/mob/living/silicon/ai/U = usr - for (var/obj/structure/machinery/camera/C in cameranet.cameras) + for (var/obj/structure/machinery/camera/C in GLOB.cameranet.cameras) if(!C.can_use()) continue - var/list/tempnetwork = difflist(C.network,RESTRICTED_CAMERA_NETWORKS,1) + var/list/tempnetwork = difflist(C.network,GLOB.RESTRICTED_CAMERA_NETWORKS,1) if(tempnetwork.len) for(var/i in tempnetwork) cameralist[i] = i @@ -440,7 +440,7 @@ var/list/ai_verbs_default = list( if(isnull(network)) network = old_network // If nothing is selected else - for(var/obj/structure/machinery/camera/C in cameranet.cameras) + for(var/obj/structure/machinery/camera/C in GLOB.cameranet.cameras) if(!C.can_use()) continue if(network in C.network) @@ -458,7 +458,7 @@ var/list/ai_verbs_default = list( var/list/ai_emotions = list("Very Happy", "Happy", "Neutral", "Unsure", "Confused", "Surprised", "Sad", "Upset", "Angry", "Awesome", "BSOD", "Blank", "Problems?", "Facepalm", "Friend Computer") var/emote = tgui_input_list(usr, "Please, select a status!", "AI Status", ai_emotions) - for (var/obj/structure/machinery/M in machines) //change status + for (var/obj/structure/machinery/M in GLOB.machines) //change status if(istype(M, /obj/structure/machinery/ai_status_display)) var/obj/structure/machinery/ai_status_display/AISD = M AISD.emotion = emote diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm index 19a6267518c3..1555fc9c2b7b 100644 --- a/code/modules/mob/living/silicon/ai/death.dm +++ b/code/modules/mob/living/silicon/ai/death.dm @@ -13,7 +13,7 @@ if(explosive) addtimer(CALLBACK(src, PROC_REF(explosion), src.loc, 3, 6, 12, 15), 10) - for(var/obj/structure/machinery/ai_status_display/O in machines) + for(var/obj/structure/machinery/ai_status_display/O in GLOB.machines) spawn( 0 ) O.mode = 2 if (istype(loc, /obj/item/device/aicard)) diff --git a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm index d6eb167e1677..808ad653b73c 100644 --- a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm +++ b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm @@ -2,7 +2,7 @@ // // The datum containing all the chunks. -var/datum/cameranet/cameranet = new() +GLOBAL_DATUM_INIT(cameranet, /datum/cameranet, new()) /datum/cameranet // The cameras on the map, no matter if they work or not. Updated in obj/structure/machinery/camera/New() and Dispose(). @@ -142,7 +142,7 @@ var/datum/cameranet/cameranet = new() /turf/verb/view_chunk() set src in world - if(cameranet.chunkGenerated(x, y, z)) - var/datum/camerachunk/chunk = cameranet.getCameraChunk(x, y, z) + if(GLOB.cameranet.chunkGenerated(x, y, z)) + var/datum/camerachunk/chunk = GLOB.cameranet.getCameraChunk(x, y, z) usr.client.debug_variables(chunk) */ diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index 5fe03ffa272c..22e2bf05aa2c 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -30,7 +30,7 @@ T = get_turf(T) forceMove(T) - cameranet.visibility(src) + GLOB.cameranet.visibility(src) if(ai.client) ai.client.eye = src //Holopad diff --git a/code/modules/mob/living/silicon/ai/freelook/update_triggers.dm b/code/modules/mob/living/silicon/ai/freelook/update_triggers.dm index a7109f491740..7ecaab1c3e79 100644 --- a/code/modules/mob/living/silicon/ai/freelook/update_triggers.dm +++ b/code/modules/mob/living/silicon/ai/freelook/update_triggers.dm @@ -9,47 +9,47 @@ /turf/proc/visibilityChanged() if(z && SSatoms.initialized != INITIALIZATION_INSSATOMS) - cameranet.updateVisibility(src) + GLOB.cameranet.updateVisibility(src) /obj/structure/machinery/door/poddoor/shutters/open() if(z && SSatoms.initialized != INITIALIZATION_INSSATOMS) - cameranet.updateVisibility(src) + GLOB.cameranet.updateVisibility(src) . = ..() /obj/structure/machinery/door/poddoor/shutters/close() if(z && SSatoms.initialized != INITIALIZATION_INSSATOMS) - cameranet.updateVisibility(src) + GLOB.cameranet.updateVisibility(src) . = ..() /obj/structure/machinery/door/poddoor/shutters/Destroy() if(z && SSatoms.initialized != INITIALIZATION_INSSATOMS) - cameranet.updateVisibility(src) + GLOB.cameranet.updateVisibility(src) . = ..() // STRUCTURES /obj/structure/Destroy(force) if(z && SSatoms.initialized != INITIALIZATION_INSSATOMS) - cameranet.updateVisibility(src) + GLOB.cameranet.updateVisibility(src) . = ..() /obj/structure/Initialize(mapload, ...) . = ..() if(z && SSatoms.initialized != INITIALIZATION_INSSATOMS) - cameranet.updateVisibility(src) + GLOB.cameranet.updateVisibility(src) // EFFECTS /obj/effect/Destroy() if(z && SSatoms.initialized != INITIALIZATION_INSSATOMS) - cameranet.updateVisibility(src) + GLOB.cameranet.updateVisibility(src) . = ..() /obj/effect/Initialize(mapload, ...) . = ..() if(z && SSatoms.initialized != INITIALIZATION_INSSATOMS) - cameranet.updateVisibility(src) + GLOB.cameranet.updateVisibility(src) @@ -68,7 +68,7 @@ updating = 1 spawn(BORG_CAMERA_BUFFER) if(oldLoc != src.loc) - cameranet.updatePortableCamera(src.camera) + GLOB.cameranet.updatePortableCamera(src.camera) updating = 0 /mob/living/carbon/human/var/updating = 0 @@ -85,7 +85,7 @@ updating = TRUE spawn(BORG_CAMERA_BUFFER) if (oldLoc != loc) - cameranet.updatePortableCamera(H.camera) + GLOB.cameranet.updatePortableCamera(H.camera) updating = FALSE // CAMERA @@ -95,23 +95,23 @@ /obj/structure/machinery/camera/toggle_cam_status(mob/user, silent) ..() if(can_use()) - cameranet.addCamera(src) + GLOB.cameranet.addCamera(src) else set_light(0) - cameranet.removeCamera(src) + GLOB.cameranet.removeCamera(src) /obj/structure/machinery/camera/Initialize() . = ..() - cameranet.cameras += src //Camera must be added to global list of all cameras no matter what... - var/list/open_networks = difflist(network,RESTRICTED_CAMERA_NETWORKS) //...but if all of camera's networks are restricted, it only works for specific camera consoles. + GLOB.cameranet.cameras += src //Camera must be added to global list of all cameras no matter what... + var/list/open_networks = difflist(network,GLOB.RESTRICTED_CAMERA_NETWORKS) //...but if all of camera's networks are restricted, it only works for specific camera consoles. if(open_networks.len) //If there is at least one open network, chunk is available for AI usage. - cameranet.addCamera(src) + GLOB.cameranet.addCamera(src) /obj/structure/machinery/camera/Destroy() - cameranet.cameras -= src - var/list/open_networks = difflist(network,RESTRICTED_CAMERA_NETWORKS) + GLOB.cameranet.cameras -= src + var/list/open_networks = difflist(network,GLOB.RESTRICTED_CAMERA_NETWORKS) if(open_networks.len) - cameranet.removeCamera(src) + GLOB.cameranet.removeCamera(src) . = ..() //#undef BORG_CAMERA_BUFFER diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index 5b190143f5bc..7b0ee6869e80 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -34,9 +34,6 @@ // Gain Power apply_damage(-1, OXY) - // Handle EMP-stun - handle_stunned() - //stage = 1 //if (isRemoteControlling(src)) // Are we not sure what we are? var/blind = 0 diff --git a/code/modules/mob/living/silicon/ai/login.dm b/code/modules/mob/living/silicon/ai/login.dm index 91bcd76b2eb5..7a8d6ba9585f 100644 --- a/code/modules/mob/living/silicon/ai/login.dm +++ b/code/modules/mob/living/silicon/ai/login.dm @@ -3,7 +3,7 @@ regenerate_icons() if(stat != DEAD) - for(var/obj/structure/machinery/ai_status_display/O in machines) //change status + for(var/obj/structure/machinery/ai_status_display/O in GLOB.machines) //change status O.mode = 1 O.emotion = "Neutral" src.view_core() diff --git a/code/modules/mob/living/silicon/ai/logout.dm b/code/modules/mob/living/silicon/ai/logout.dm index efc03f575ec8..62964915c33a 100644 --- a/code/modules/mob/living/silicon/ai/logout.dm +++ b/code/modules/mob/living/silicon/ai/logout.dm @@ -1,6 +1,6 @@ /mob/living/silicon/ai/Logout() ..() - for(var/obj/structure/machinery/ai_status_display/O in machines) //change status + for(var/obj/structure/machinery/ai_status_display/O in GLOB.machines) //change status O.mode = 0 if(!isturf(loc)) if (client) diff --git a/code/modules/mob/living/silicon/decoy/decoy.dm b/code/modules/mob/living/silicon/decoy/decoy.dm index 5b41078eea4c..bc7271554352 100644 --- a/code/modules/mob/living/silicon/decoy/decoy.dm +++ b/code/modules/mob/living/silicon/decoy/decoy.dm @@ -20,14 +20,14 @@ name = MAIN_AI_SYSTEM desc = "This is the artificial intelligence system for the [MAIN_SHIP_NAME]. Like many other military-grade AI systems, this one was manufactured by Weyland-Yutani." ai_headset = new(src) - ai_mob_list += src + GLOB.ai_mob_list += src real_name = MAIN_AI_SYSTEM ADD_TRAIT(src, TRAIT_IMMOBILIZED, TRAIT_SOURCE_INHERENT) /mob/living/silicon/decoy/ship_ai/Destroy() QDEL_NULL(ai_headset) #ifdef UNIT_TESTS - ai_mob_list -= src // Or should we always remove them? + GLOB.ai_mob_list -= src // Or should we always remove them? #endif return ..() @@ -76,7 +76,7 @@ if(length(message) >= 2) var/channel_prefix = copytext(message, 1 ,3) - channel_prefix = department_radio_keys[channel_prefix] + channel_prefix = GLOB.department_radio_keys[channel_prefix] if(channel_prefix) return channel_prefix diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index 1fa07ae0bc85..6bb01661fbd5 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -182,7 +182,7 @@ /mob/living/silicon/robot/drone/proc/transfer_personality(client/player) if(!player) return - player.change_view(world_view_size) + player.change_view(GLOB.world_view_size) src.ckey = player.ckey if(player.mob && player.mob.mind) @@ -236,7 +236,7 @@ spawn(0) var/newname - newname = tgui_input_list(src,"You are drone. Pick a name, no duplicates allowed.", "Drone name pick", greek_letters) + newname = tgui_input_list(src,"You are drone. Pick a name, no duplicates allowed.", "Drone name pick", GLOB.greek_letters) if(custom_name) return diff --git a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm index 7909ff05f603..261e6ffc7623 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm @@ -4,7 +4,7 @@ set desc = "Tag yourself for delivery through the disposals system." set category = "Drone" - var/new_tag = tgui_input_list(usr, "Select the desired destination.", "Set Mail Tag", null, tagger_locations) + var/new_tag = tgui_input_list(usr, "Select the desired destination.", "Set Mail Tag", null, GLOB.tagger_locations) if(!new_tag) mail_destination = "" diff --git a/code/modules/mob/living/silicon/robot/drone/drone_console.dm b/code/modules/mob/living/silicon/robot/drone/drone_console.dm index 2be09d46da9f..2433720d23c1 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_console.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_console.dm @@ -55,7 +55,7 @@ if (href_list["setarea"]) //Probably should consider using another list, but this one will do. - var/t_area = tgui_input_list(usr, "Select the area to ping.", "Set Target Area", null, tagger_locations) + var/t_area = tgui_input_list(usr, "Select the area to ping.", "Set Target Area", null, GLOB.tagger_locations) if(!t_area) return diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index b4a6e59e52e2..ac031e74e11f 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -22,7 +22,7 @@ /mob/living/silicon/robot/proc/clamp_values() // set_effect(min(stunned, 30), STUN) - set_effect(min(knocked_out, 30), PARALYZE) +// set_effect(min(knocked_out, 30), PARALYZE) // set_effect(min(knocked_down, 20), WEAKEN) sleeping = 0 apply_damage(0, BRUTE) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index ebcdd60aa996..888b484fab06 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1,6 +1,6 @@ -var/list/robot_verbs_default = list( +GLOBAL_LIST_INIT(robot_verbs_default, list( /mob/living/silicon/robot/proc/sensor_mode -) +)) #define CYBORG_POWER_USAGE_MULTIPLIER 2.5 // Multiplier for amount of power cyborgs use. @@ -871,7 +871,7 @@ var/list/robot_verbs_default = list( //Disconnect it's camera so it's not so easily tracked. if(src.camera) src.camera.network = list() - cameranet.removeCamera(src.camera) + GLOB.cameranet.removeCamera(src.camera) /mob/living/silicon/robot/proc/ResetSecurityCodes() @@ -933,10 +933,10 @@ var/list/robot_verbs_default = list( toggle_sensor_mode() /mob/living/silicon/robot/proc/add_robot_verbs() - add_verb(src, robot_verbs_default) + add_verb(src, GLOB.robot_verbs_default) /mob/living/silicon/robot/proc/remove_robot_verbs() - remove_verb(src, robot_verbs_default) + remove_verb(src, GLOB.robot_verbs_default) // Uses power from cyborg's cell. Returns 1 on success or 0 on failure. // Properly converts using CELLRATE now! Amount is in Joules. diff --git a/code/modules/mob/living/silicon/robot/wires.dm b/code/modules/mob/living/silicon/robot/wires.dm index ea09fe5985a4..62d05abe6e13 100644 --- a/code/modules/mob/living/silicon/robot/wires.dm +++ b/code/modules/mob/living/silicon/robot/wires.dm @@ -7,9 +7,9 @@ /proc/RandomBorgWires() //to make this not randomize the wires, just set index to 1 and increment it in the flag for loop (after doing everything else). var/list/Borgwires = list(0, 0, 0, 0, 0) - BorgIndexToFlag = list(0, 0, 0, 0, 0) - BorgIndexToWireColor = list(0, 0, 0, 0, 0) - BorgWireColorToIndex = list(0, 0, 0, 0, 0) + GLOB.BorgIndexToFlag = list(0, 0, 0, 0, 0) + GLOB.BorgIndexToWireColor = list(0, 0, 0, 0, 0) + GLOB.BorgWireColorToIndex = list(0, 0, 0, 0, 0) var/flagIndex = 1 //I think it's easier to read this way, also doesn't rely on the random number generator to land on a new wire. var/list/colorIndexList = list(BORG_WIRE_LAWCHECK, BORG_WIRE_MAIN_POWER1, BORG_WIRE_MAIN_POWER2, BORG_WIRE_AI_CONTROL, BORG_WIRE_CAMERA) @@ -17,25 +17,25 @@ var/colorIndex = pick(colorIndexList) if (Borgwires[colorIndex]==0) Borgwires[colorIndex] = flag - BorgIndexToFlag[flagIndex] = flag - BorgIndexToWireColor[flagIndex] = colorIndex - BorgWireColorToIndex[colorIndex] = flagIndex + GLOB.BorgIndexToFlag[flagIndex] = flag + GLOB.BorgIndexToWireColor[flagIndex] = colorIndex + GLOB.BorgWireColorToIndex[colorIndex] = flagIndex colorIndexList -= colorIndex // Shortens the list. //world.log << "Flag: [flag], CIndex: [colorIndex], FIndex: [flagIndex]" flagIndex+=1 return Borgwires /mob/living/silicon/robot/proc/isWireColorCut(wireColor) - var/wireFlag = BorgWireColorToFlag[wireColor] + var/wireFlag = GLOB.BorgWireColorToFlag[wireColor] return ((src.borgwires & wireFlag) == 0) /mob/living/silicon/robot/proc/isWireCut(wireIndex) - var/wireFlag = BorgIndexToFlag[wireIndex] + var/wireFlag = GLOB.BorgIndexToFlag[wireIndex] return ((src.borgwires & wireFlag) == 0) /mob/living/silicon/robot/proc/cut(wireColor) - var/wireFlag = BorgWireColorToFlag[wireColor] - var/wireIndex = BorgWireColorToIndex[wireColor] + var/wireFlag = GLOB.BorgWireColorToFlag[wireColor] + var/wireIndex = GLOB.BorgWireColorToIndex[wireColor] borgwires &= ~wireFlag switch(wireIndex) if(BORG_WIRE_LAWCHECK) //Cut the law wire, and the borg will no longer receive law updates from its AI @@ -52,8 +52,8 @@ src.interact(usr) /mob/living/silicon/robot/proc/mend(wireColor) - var/wireFlag = BorgWireColorToFlag[wireColor] - var/wireIndex = BorgWireColorToIndex[wireColor] + var/wireFlag = GLOB.BorgWireColorToFlag[wireColor] + var/wireIndex = GLOB.BorgWireColorToIndex[wireColor] borgwires |= wireFlag switch(wireIndex) if(BORG_WIRE_LAWCHECK) //turns law updates back on assuming the borg hasn't been emagged @@ -67,7 +67,7 @@ /mob/living/silicon/robot/proc/pulse(wireColor) - var/wireIndex = BorgWireColorToIndex[wireColor] + var/wireIndex = GLOB.BorgWireColorToIndex[wireColor] switch(wireIndex) if(BORG_WIRE_LAWCHECK) //Forces a law update if the borg is set to receive them. Since an update would happen when the borg checks its laws anyway, not much use, but eh if (src.lawupdate) @@ -96,7 +96,7 @@ "Blue" = 5, ) for(var/wiredesc in Borgwires) - var/is_uncut = src.borgwires & BorgWireColorToFlag[Borgwires[wiredesc]] + var/is_uncut = src.borgwires & GLOB.BorgWireColorToFlag[Borgwires[wiredesc]] t1 += "[wiredesc] wire: " if(!is_uncut) t1 += "Mend" diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index bccd74036658..7f95e3d695b5 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -36,6 +36,7 @@ return /mob/living/silicon/emp_act(severity) + . = ..() switch(severity) if(1) src.take_limb_damage(20) @@ -47,7 +48,6 @@ to_chat(src, SPAN_DANGER("*BZZZT*")) to_chat(src, SPAN_DANGER("Warning: Electromagnetic pulse detected.")) - ..() /mob/living/silicon/stun_effect_act(stun_amount, agony_amount) return //immune @@ -148,12 +148,12 @@ var/HUD_nbr = 1 switch(hud_choice) if("Medical HUD") - H = huds[MOB_HUD_MEDICAL_OBSERVER] + H = GLOB.huds[MOB_HUD_MEDICAL_OBSERVER] if("Security HUD") - H = huds[MOB_HUD_SECURITY_ADVANCED] + H = GLOB.huds[MOB_HUD_SECURITY_ADVANCED] HUD_nbr = 2 if("Squad HUD") - H = huds[MOB_HUD_FACTION_USCM] + H = GLOB.huds[MOB_HUD_FACTION_USCM] HUD_nbr = 3 else return diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index c10d4f8327a0..268825288198 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -209,8 +209,8 @@ new /mob/living/simple_animal/chicken(src.loc) qdel(src) -var/const/MAX_CHICKENS = 50 -var/global/chicken_count = 0 +GLOBAL_VAR_INIT(MAX_CHICKENS, 50) +GLOBAL_VAR_INIT(chicken_count, 0) /mob/living/simple_animal/chicken name = "\improper chicken" @@ -244,7 +244,7 @@ var/global/chicken_count = 0 icon_dead = "chicken_[body_color]_dead" pixel_x = rand(-6, 6) pixel_y = rand(0, 10) - chicken_count++ + GLOB.chicken_count++ /mob/living/simple_animal/chicken/initialize_pass_flags(datum/pass_flags_container/PF) ..() @@ -253,7 +253,7 @@ var/global/chicken_count = 0 /mob/living/simple_animal/chicken/death() ..() - chicken_count-- + GLOB.chicken_count-- if(last_damage_data) var/mob/user = last_damage_data.resolve_mob() if(user) @@ -282,7 +282,7 @@ var/global/chicken_count = 0 var/obj/item/reagent_container/food/snacks/egg/E = new(get_turf(src)) E.pixel_x = rand(-6,6) E.pixel_y = rand(-6,6) - if(chicken_count < MAX_CHICKENS && prob(10)) + if(GLOB.chicken_count < GLOB.MAX_CHICKENS && prob(10)) START_PROCESSING(SSobj, E) /obj/item/reagent_container/food/snacks/egg/var/amount_grown = 0 diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm index f693574349d7..1e1c15d173b7 100644 --- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm +++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm @@ -138,7 +138,7 @@ src.mind = M.brainmob.mind src.mind.key = M.brainmob.key src.ckey = M.brainmob.ckey - if(client) client.change_view(world_view_size) + if(client) client.change_view(GLOB.world_view_size) src.name = "Spider-bot ([M.brainmob.name])" /mob/living/simple_animal/spiderbot/proc/explode(cause = "exploding") //When emagged. diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 5eddf4c0058a..6e8d0b8a2867 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -40,7 +40,7 @@ pixel_x = -12 old_x = -12 - var/atom/movable/vis_obj/xeno_wounds/wound_icon_carrier + var/atom/movable/vis_obj/xeno_wounds/wound_icon_holder /mob/living/simple_animal/hostile/alien/Initialize() maxHealth = health @@ -52,8 +52,8 @@ var/datum/hive_status/hive = GLOB.hive_datum[hivenumber] color = hive.color - wound_icon_carrier = new(null, src) - vis_contents += wound_icon_carrier + wound_icon_holder = new(null, src) + vis_contents += wound_icon_holder /mob/living/simple_animal/hostile/alien/proc/generate_name() change_real_name(src, "[caste_name] (BD-[rand(1, 999)])") @@ -105,22 +105,22 @@ update_wounds() /mob/living/simple_animal/hostile/alien/proc/update_wounds() - if(!wound_icon_carrier) + if(!wound_icon_holder) return - wound_icon_carrier.layer = layer + 0.01 - wound_icon_carrier.dir = dir + wound_icon_holder.layer = layer + 0.01 + wound_icon_holder.dir = dir var/health_threshold = max(CEILING((health * 4) / (maxHealth), 1), 0) //From 0 to 4, in 25% chunks if(health > HEALTH_THRESHOLD_DEAD) if(health_threshold > 3) - wound_icon_carrier.icon_state = "none" + wound_icon_holder.icon_state = "none" else if(body_position == LYING_DOWN) - if((resting || sleeping) && (!HAS_TRAIT(src, TRAIT_KNOCKEDOUT) && health > 0)) - wound_icon_carrier.icon_state = "[caste_name]_rest_[health_threshold]" + if(!HAS_TRAIT(src, TRAIT_INCAPACITATED) && !HAS_TRAIT(src, TRAIT_FLOORED)) + wound_icon_holder.icon_state = "[caste_name]_rest_[health_threshold]" else - wound_icon_carrier.icon_state = "[caste_name]_downed_[health_threshold]" + wound_icon_holder.icon_state = "[caste_name]_downed_[health_threshold]" else - wound_icon_carrier.icon_state = "[caste_name]_walk_[health_threshold]" + wound_icon_holder.icon_state = "[caste_name]_walk_[health_threshold]" /mob/living/simple_animal/hostile/alien/bullet_act(obj/projectile/P) . = ..() @@ -148,8 +148,8 @@ animate(src, 5 SECONDS, alpha = 0, easing = CUBIC_EASING) /mob/living/simple_animal/hostile/alien/Destroy() - vis_contents -= wound_icon_carrier - QDEL_NULL(wound_icon_carrier) + vis_contents -= wound_icon_holder + QDEL_NULL(wound_icon_holder) return ..() /mob/living/simple_animal/hostile/alien/ravager diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index b285ec11799f..5a5791eb8311 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -145,9 +145,9 @@ /mob/living/simple_animal/hostile/proc/DestroySurroundings() if(prob(break_stuff_probability)) - for(var/dir in cardinal) // North, South, East, West + for(var/dir in GLOB.cardinals) // North, South, East, West for(var/obj/structure/window/obstacle in get_step(src, dir)) - if(obstacle.dir == reverse_dir[dir]) // So that windows get smashed in the right order + if(obstacle.dir == GLOB.reverse_dir[dir]) // So that windows get smashed in the right order obstacle.attack_animal(src) return var/obj/structure/obstacle = locate(/obj/structure, get_step(src, dir)) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm index 3d37f8ea57c1..b7c091d564d6 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm @@ -152,6 +152,7 @@ //ion rifle! /mob/living/simple_animal/hostile/retaliate/malf_drone/emp_act(severity) + . = ..() health -= rand(3,15) * (severity + 1) disabled = rand(150, 600) hostile_drone = 0 diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index f1452d95c294..d1b140305d60 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -54,7 +54,7 @@ var/parrot_sleep_dur = 25 //Same as above, this is the var that physically counts down var/parrot_dam_zone = list("chest", "head", "l_arm", "l_leg", "r_arm", "r_leg") //For humans, select a bodypart to attack - var/parrot_speed = 5 //"Delay in machines ticks between movement." according to byond. Yeah, that's BS but it does directly affect movement. Higher number = slower. + var/parrot_speed = 5 //"Delay in GLOB.machines ticks between movement." according to byond. Yeah, that's BS but it does directly affect movement. Higher number = slower. var/parrot_been_shot = 0 //Parrots get a speed bonus after being shot. This will deincrement every Life() and at 0 the parrot will return to regular speed. var/list/speech_buffer = list() @@ -146,7 +146,7 @@ ears.forceMove(src.loc) ears = null for(var/possible_phrase in speak) - if(copytext(possible_phrase,1,3) in department_radio_keys) + if(copytext(possible_phrase,1,3) in GLOB.department_radio_keys) possible_phrase = copytext(possible_phrase,3,length(possible_phrase)) else to_chat(usr, SPAN_DANGER("There is nothing to remove from its [remove_from].")) @@ -332,7 +332,7 @@ if(prob(50)) useradio = 1 - if(copytext(possible_phrase,1,3) in department_radio_keys) + if(copytext(possible_phrase,1,3) in GLOB.department_radio_keys) possible_phrase = "[useradio?pick(available_channels):""] [copytext(possible_phrase,3,length(possible_phrase)+1)]" //crop out the channel prefix else possible_phrase = "[useradio?pick(available_channels):""] [possible_phrase]" @@ -341,7 +341,7 @@ else //If we have no headset or channels to use, dont try to use any! for(var/possible_phrase in speak) - if(copytext(possible_phrase,1,3) in department_radio_keys) + if(copytext(possible_phrase,1,3) in GLOB.department_radio_keys) possible_phrase = "[copytext(possible_phrase,3,length(possible_phrase)+1)]" //crop out the channel prefix newspeak.Add(possible_phrase) speak = newspeak @@ -363,7 +363,7 @@ //Wander around aimlessly. This will help keep the loops from searches down //and possibly move the mob into a new are in view of something they can use if(prob(90)) - step(src, pick(cardinal)) + step(src, pick(GLOB.cardinals)) return if(!held_item && !parrot_perch) //If we've got nothing to do... look for something to do. @@ -713,7 +713,7 @@ if(length(message) >= 2) var/channel_prefix = copytext(message, 1 ,3) - message_mode = department_radio_keys[channel_prefix] + message_mode = GLOB.department_radio_keys[channel_prefix] if(copytext(message,1,2) == ":") var/positioncut = 3 @@ -722,7 +722,7 @@ message = capitalize(trim_left(message)) if(message_mode) - if(message_mode in radiochannels) + if(message_mode in GLOB.radiochannels) if(ears && istype(ears,/obj/item/device/radio)) ears.talk_into(src,message, message_mode, verb, null) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 212487937f73..7b0393d97bdd 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -99,7 +99,7 @@ turns_since_move++ if(turns_since_move >= turns_per_move) if(!(stop_automated_movement_when_pulled && pulledby)) //Soma animals don't move when pulled - var/move_dir = pick(cardinal) + var/move_dir = pick(GLOB.cardinals) Move(get_step(src, move_dir )) setDir(move_dir) turns_since_move = 0 diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index 3f65e01e917c..839645f1084c 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -1,6 +1,6 @@ /mob/Logout() SEND_SIGNAL(src, COMSIG_MOB_LOGOUT) - nanomanager.user_logout(src) // this is used to clean up (remove) this user's Nano UIs + SSnano.nanomanager.user_logout(src) // this is used to clean up (remove) this user's Nano UIs if(interactee) unset_interaction() GLOB.player_list -= src diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index c83449388034..6d0535bdcdd3 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -54,8 +54,8 @@ if(!faction_group) faction_group = list(faction) - last_mob_gid++ - gid = last_mob_gid + GLOB.last_mob_gid++ + gid = GLOB.last_mob_gid GLOB.mob_list += src if(stat == DEAD) @@ -593,20 +593,13 @@ adds a dizziness amount to a mob use this rather than directly changing var/dizziness since this ensures that the dizzy_process proc is started -currently only humans get dizzy +currently only mob/living/carbon/human get dizzy value of dizziness ranges from 0 to 1000 below 100 is not dizzy */ /mob/proc/make_dizzy(amount) - if(!istype(src, /mob/living/carbon/human)) // for the moment, only humans get dizzy - return - - dizziness = min(500, dizziness + amount) // store what will be new value - // clamped to max 500 - if(dizziness > 100 && !is_dizzy) - INVOKE_ASYNC(src, PROC_REF(dizzy_process)) - + return /* dizzy process - wiggles the client's pixel offset over time @@ -705,6 +698,8 @@ note dizziness decrements automatically in the mob's Life() proc. if(anchored) return 0 if(monkeyizing) return 0 if(is_mob_restrained()) return 0 + if(HAS_TRAIT(src, TRAIT_INCAPACITATED)) // We allow rotation if simply floored + return FALSE return 1 /mob/proc/face_dir(ndir, specific_dir) @@ -850,11 +845,6 @@ note dizziness decrements automatically in the mob's Life() proc. handle_slowed() handle_superslowed() -/mob/living/proc/handle_stunned() - if(stunned) - adjust_effect(-1, STUN) - return stunned - /mob/living/proc/handle_slowed() if(slowed) adjust_effect(-1, SLOW) diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index 48e371f3d544..071728195e3f 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -60,8 +60,8 @@ if(!ishuman(user)) //only humans can reinforce a grab. if (isxeno(user)) - var/mob/living/carbon/xenomorph/X = user - X.pull_power(grabbed_thing) + var/mob/living/carbon/xenomorph/xeno = user + xeno.pull_power(grabbed_thing) return @@ -102,21 +102,21 @@ if(M == grabbed_thing) attack_self(user) else if(M == user && user.pulling && isxeno(user)) - var/mob/living/carbon/xenomorph/X = user - var/mob/living/carbon/pulled = X.pulling + var/mob/living/carbon/xenomorph/xeno = user + var/mob/living/carbon/pulled = xeno.pulling if(!istype(pulled)) return if(isxeno(pulled) || issynth(pulled)) - to_chat(X, SPAN_WARNING("That wouldn't taste very good.")) + to_chat(xeno, SPAN_WARNING("That wouldn't taste very good.")) return 0 if(pulled.buckled) - to_chat(X, SPAN_WARNING("[pulled] is buckled to something.")) + to_chat(xeno, SPAN_WARNING("[pulled] is buckled to something.")) return 0 if(pulled.stat == DEAD && !pulled.chestburst) - to_chat(X, SPAN_WARNING("Ew, [pulled] is already starting to rot.")) + to_chat(xeno, SPAN_WARNING("Ew, [pulled] is already starting to rot.")) return 0 - if(X.stomach_contents.len) //Only one thing in the stomach at a time, please - to_chat(X, SPAN_WARNING("You already have something in your belly, there's no way that will fit.")) + if(xeno.stomach_contents.len) //Only one thing in the stomach at a time, please + to_chat(xeno, SPAN_WARNING("You already have something in your belly, there's no way that will fit.")) return 0 /* Saving this in case we want to allow devouring of dead bodies UNLESS their client is still online somewhere if(pulled.client) //The client is still inside the body @@ -126,19 +126,21 @@ to_chat(src, "You start to devour [pulled] but realize \he is already dead.") return */ if(user.action_busy) - to_chat(X, SPAN_WARNING("You are already busy with something.")) + to_chat(xeno, SPAN_WARNING("You are already busy with something.")) return - X.visible_message(SPAN_DANGER("[X] starts to devour [pulled]!"), \ + xeno.visible_message(SPAN_DANGER("[xeno] starts to devour [pulled]!"), \ SPAN_DANGER("You start to devour [pulled]!"), null, 5) - if(do_after(X, 50, INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE)) - if(isxeno(pulled.loc) && !X.stomach_contents.len) - to_chat(X, SPAN_WARNING("Someone already ate \the [pulled].")) + if(HAS_TRAIT(xeno, TRAIT_CLOAKED)) //cloaked don't show the visible message, so we gotta work around + to_chat(pulled, FONT_SIZE_HUGE(SPAN_DANGER("[xeno] is trying to devour you!"))) + if(do_after(xeno, 50, INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE)) + if(isxeno(pulled.loc) && !xeno.stomach_contents.len) + to_chat(xeno, SPAN_WARNING("Someone already ate \the [pulled].")) return 0 - if(X.pulling == pulled && !pulled.buckled && (pulled.stat != DEAD || pulled.chestburst) && !X.stomach_contents.len) //make sure you've still got them in your claws, and alive - if(SEND_SIGNAL(pulled, COMSIG_MOB_DEVOURED, X) & COMPONENT_CANCEL_DEVOUR) + if(xeno.pulling == pulled && !pulled.buckled && (pulled.stat != DEAD || pulled.chestburst) && !xeno.stomach_contents.len) //make sure you've still got them in your claws, and alive + if(SEND_SIGNAL(pulled, COMSIG_MOB_DEVOURED, xeno) & COMPONENT_CANCEL_DEVOUR) return FALSE - X.visible_message(SPAN_WARNING("[X] devours [pulled]!"), \ + xeno.visible_message(SPAN_WARNING("[xeno] devours [pulled]!"), \ SPAN_WARNING("You devour [pulled]!"), null, 5) if(ishuman(pulled)) @@ -146,10 +148,10 @@ pulled_human.disable_lights() //Then, we place the mob where it ought to be - X.stomach_contents.Add(pulled) - X.devour_timer = world.time + 500 + rand(0,200) // 50-70 seconds - pulled.forceMove(X) + xeno.stomach_contents.Add(pulled) + xeno.devour_timer = world.time + 500 + rand(0,200) // 50-70 seconds + pulled.forceMove(xeno) return TRUE - if(!(pulled in X.stomach_contents)) - to_chat(X, SPAN_WARNING("You stop devouring \the [pulled]. \He probably tasted gross anyways.")) + if(!(pulled in xeno.stomach_contents)) + to_chat(xeno, SPAN_WARNING("You stop devouring \the [pulled]. \He probably tasted gross anyways.")) return 0 diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 2c02286247ea..6abe12eee9b1 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -29,7 +29,7 @@ //TODO: Integrate defence zones and targeting body parts with the actual organ system, move these into organ definitions. /// The base miss chance for the different defence zones -var/list/global/base_miss_chance = list( +GLOBAL_LIST_INIT(base_miss_chance, list( "head" = 10, "chest" = 0, "groin" = 5, @@ -43,11 +43,11 @@ var/list/global/base_miss_chance = list( "r_foot" = 40, "eyes" = 20, "mouth" = 15, -) +)) //Used to weight organs when an organ is hit randomly (i.e. not a directed, aimed attack). //Also used to weight the protection value that armor provides for covering that body part when calculating protection from full-body effects. -var/list/global/organ_rel_size = list( +GLOBAL_LIST_INIT(organ_rel_size, list( "head" = 15, "chest" = 70, "groin" = 30, @@ -61,10 +61,10 @@ var/list/global/organ_rel_size = list( "r_foot" = 10, "eyes" = 5, "mouth" = 15, -) +)) // This is much faster than a string comparison -var/global/list/limb_types_by_name = list( +GLOBAL_LIST_INIT(limb_types_by_name, list( "head" = /obj/limb/head, "chest" = /obj/limb/chest, "groin" = /obj/limb/groin, @@ -76,7 +76,7 @@ var/global/list/limb_types_by_name = list( "r_hand" = /obj/limb/hand/r_hand, "l_foot" = /obj/limb/foot/l_foot, "r_foot" = /obj/limb/foot/r_foot, -) +)) /proc/check_zone(zone) if(!zone) @@ -99,17 +99,17 @@ var/global/list/limb_types_by_name = list( var/rand_zone = zone while (rand_zone == zone) rand_zone = pick ( - organ_rel_size["head"]; "head", - organ_rel_size["chest"]; "chest", - organ_rel_size["groin"]; "groin", - organ_rel_size["l_arm"]; "l_arm", - organ_rel_size["r_arm"]; "r_arm", - organ_rel_size["l_leg"]; "l_leg", - organ_rel_size["r_leg"]; "r_leg", - organ_rel_size["l_hand"]; "l_hand", - organ_rel_size["r_hand"]; "r_hand", - organ_rel_size["l_foot"]; "l_foot", - organ_rel_size["r_foot"]; "r_foot", + GLOB.organ_rel_size["head"]; "head", + GLOB.organ_rel_size["chest"]; "chest", + GLOB.organ_rel_size["groin"]; "groin", + GLOB.organ_rel_size["l_arm"]; "l_arm", + GLOB.organ_rel_size["r_arm"]; "r_arm", + GLOB.organ_rel_size["l_leg"]; "l_leg", + GLOB.organ_rel_size["r_leg"]; "r_leg", + GLOB.organ_rel_size["l_hand"]; "l_hand", + GLOB.organ_rel_size["r_hand"]; "r_hand", + GLOB.organ_rel_size["l_foot"]; "l_foot", + GLOB.organ_rel_size["r_foot"]; "r_foot", ) return rand_zone @@ -313,7 +313,6 @@ var/global/list/limb_types_by_name = list( /// Returns if the mob is incapacitated and unable to perform general actions /mob/proc/is_mob_incapacitated(ignore_restrained) - // note that stat includes knockout via unconscious return (stat || (!ignore_restrained && is_mob_restrained()) || (status_flags & FAKEDEATH) || HAS_TRAIT(src, TRAIT_INCAPACITATED)) /mob/proc/get_eye_protection() diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 241a83ee8863..8e9a513fdc88 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -142,6 +142,12 @@ if(mob.is_mob_incapacitated(TRUE)) return + + if(mob.buckled) + // Handle buckled relay before mobility because buckling inherently immobilizes + // This means you can (try to) move with a cargo tug or powerloader while immobilized, which i think makes sense + return mob.buckled.relaymove(mob, direct) + if(!(living_mob.mobility_flags & MOBILITY_MOVE)) return if(living_mob.body_position == LYING_DOWN && !living_mob.can_crawl) @@ -160,9 +166,6 @@ next_movement = world.time + MINIMAL_MOVEMENT_INTERVAL return - if(mob.buckled) - return mob.buckled.relaymove(mob, direct) - if(!mob.z)//Inside an object, tell it we moved var/atom/O = mob.loc if(!O) @@ -181,8 +184,10 @@ mob.cur_speed = Clamp(10/(move_delay + 0.5), MIN_SPEED, MAX_SPEED) next_movement = world.time + MINIMAL_MOVEMENT_INTERVAL // We pre-set this now for the crawling case. If crawling do_after fails, next_movement would be set after the attempt end instead of now. - //We are now going to move - if(!mob.crawling && living_mob && living_mob.body_position == LYING_DOWN) + //Try to crawl first + if(living_mob && living_mob.body_position == LYING_DOWN) + if(mob.crawling) + return // Already doing it. //check for them not being a limbless blob (only humans have limbs) if(ishuman(mob)) var/mob/living/carbon/human/human = mob @@ -198,11 +203,12 @@ mob.crawling = FALSE return if(!mob.crawling) - return // Crawling interrupted by a "real" move. Do nothing. Normally do_after INTERRUPT_CHANGED_LYING would do it, but it's not instant. + return // Crawling interrupted by a "real" move. Do nothing. In theory INTERRUPT_MOVED|INTERRUPT_CHANGED_LYING catches this in do_after. mob.crawling = FALSE mob.move_intentionally = TRUE + moving = TRUE if(mob.confused) - mob.Move(get_step(mob, pick(cardinal))) + mob.Move(get_step(mob, pick(GLOB.cardinals))) else . = ..() diff --git a/code/modules/mob/mob_transformation_simple.dm b/code/modules/mob/mob_transformation_simple.dm index 92e46454cc5e..cd76618f3243 100644 --- a/code/modules/mob/mob_transformation_simple.dm +++ b/code/modules/mob/mob_transformation_simple.dm @@ -4,7 +4,7 @@ //Note that this proc does NOT do MMI related stuff! /mob/proc/change_mob_type(new_type = null, turf/location = null, new_name = null as text, delete_old_mob = 0 as num, subspecies) if(istype(src,/mob/new_player)) - to_chat(usr, SPAN_DANGER("cannot convert players who have not entered yet.")) + to_chat(usr, SPAN_DANGER("Cannot convert players who have not entered yet.")) return if(!new_type) @@ -18,7 +18,7 @@ return if( new_type == /mob/new_player ) - to_chat(usr, SPAN_DANGER("cannot convert into a new_player mob type.")) + to_chat(usr, SPAN_DANGER("Cannot convert into a new_player mob type.")) return var/mob/M diff --git a/code/modules/mob/mob_verbs.dm b/code/modules/mob/mob_verbs.dm index 066c74d3c8ae..a941dfc51090 100644 --- a/code/modules/mob/mob_verbs.dm +++ b/code/modules/mob/mob_verbs.dm @@ -155,7 +155,7 @@ return M.key = key - if(M.client) M.client.change_view(world_view_size) + if(M.client) M.client.change_view(GLOB.world_view_size) // M.Login() //wat return diff --git a/code/modules/mob/new_player/login.dm b/code/modules/mob/new_player/login.dm index 9ff317260ccf..4b25d7a2ae39 100644 --- a/code/modules/mob/new_player/login.dm +++ b/code/modules/mob/new_player/login.dm @@ -25,14 +25,14 @@ client.playtitlemusic() // To show them the full lobby art. This fixes itself on a mind transfer so no worries there. - client.change_view(lobby_view_size) + client.change_view(GLOB.lobby_view_size) // Credit the lobby art author - if(displayed_lobby_art != -1) + if(GLOB.displayed_lobby_art != -1) var/list/lobby_authors = CONFIG_GET(str_list/lobby_art_authors) - var/author = lobby_authors[displayed_lobby_art] + var/author = lobby_authors[GLOB.displayed_lobby_art] if(author != "Unknown") to_chat(src, SPAN_ROUNDBODY("
    This round's lobby art is brought to you by [author]
    ")) - if(join_motd) - to_chat(src, "
    [join_motd]
    ") - if(current_tms) - to_chat(src, SPAN_BOLDANNOUNCE(current_tms)) + if(GLOB.join_motd) + to_chat(src, "
    [GLOB.join_motd]
    ") + if(GLOB.current_tms) + to_chat(src, SPAN_BOLDANNOUNCE(GLOB.current_tms)) diff --git a/code/modules/mob/new_player/logout.dm b/code/modules/mob/new_player/logout.dm index 11589f59ee34..4f9a45f5667e 100644 --- a/code/modules/mob/new_player/logout.dm +++ b/code/modules/mob/new_player/logout.dm @@ -1,6 +1,6 @@ /mob/new_player/Logout() if(ready) - readied_players-- + GLOB.readied_players-- ready = FALSE . = ..() if(!spawning)//Here so that if they are spawning and log out, the other procs can play out and they will have a mob to come back to. diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 12565fb7c589..ee99f6836473 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -18,7 +18,7 @@ /mob/new_player/Destroy() if(ready) - readied_players-- + GLOB.readied_players-- GLOB.new_player_list -= src return ..() @@ -63,7 +63,7 @@ output += "" if (refresh) close_browser(src, "playersetup") - show_browser(src, output, null, "playersetup", "size=240x[round_start ? 330 : 460];can_close=0;can_minimize=0") + show_browser(src, output, null, "playersetup", "size=240x[round_start ? 360 : 460];can_close=0;can_minimize=0") return /mob/new_player/Topic(href, href_list[]) @@ -97,14 +97,14 @@ if("ready") if( (SSticker.current_state <= GAME_STATE_PREGAME) && !ready) // Make sure we don't ready up after the round has started ready = TRUE - readied_players++ + GLOB.readied_players++ new_player_panel_proc() if("unready") if((SSticker.current_state <= GAME_STATE_PREGAME) && ready) // Make sure we don't ready up after the round has started ready = FALSE - readied_players-- + GLOB.readied_players-- new_player_panel_proc() @@ -145,12 +145,12 @@ mind.transfer_to(observer, TRUE) if(observer.client) - observer.client.change_view(world_view_size) + observer.client.change_view(GLOB.world_view_size) observer.set_huds_from_prefs() qdel(src) - return 1 + return TRUE if("late_join") @@ -207,7 +207,7 @@ if("SelectedJob") - if(!enter_allowed) + if(!GLOB.enter_allowed) to_chat(usr, SPAN_WARNING("There is an administrative lock on entering the game! (The dropship likely crashed into the Almayer. This should take at most 20 minutes.)")) return @@ -228,16 +228,16 @@ new_player_panel() /mob/new_player/proc/AttemptLateSpawn(rank) - var/datum/job/player_rank = RoleAuthority.roles_for_mode[rank] + var/datum/job/player_rank = GLOB.RoleAuthority.roles_for_mode[rank] if (src != usr) return if(SSticker.current_state != GAME_STATE_PLAYING) to_chat(usr, SPAN_WARNING("The round is either not ready, or has already finished!")) return - if(!enter_allowed) + if(!GLOB.enter_allowed) to_chat(usr, SPAN_WARNING("There is an administrative lock on entering the game! (The dropship likely crashed into the Almayer. This should take at most 20 minutes.)")) return - if(!RoleAuthority.assign_role(src, player_rank, 1)) + if(!GLOB.RoleAuthority.assign_role(src, player_rank, 1)) to_chat(src, alert("[rank] is not available. Please try another.")) return @@ -245,18 +245,18 @@ close_spawn_windows() var/mob/living/carbon/human/character = create_character(TRUE) //creates the human and transfers vars and mind - RoleAuthority.equip_role(character, player_rank, late_join = TRUE) + GLOB.RoleAuthority.equip_role(character, player_rank, late_join = TRUE) EquipCustomItems(character) - if((security_level > SEC_LEVEL_BLUE || SShijack.hijack_status) && player_rank.gets_emergency_kit) + if((GLOB.security_level > SEC_LEVEL_BLUE || SShijack.hijack_status) && player_rank.gets_emergency_kit) to_chat(character, SPAN_HIGHDANGER("As you stagger out of hypersleep, the sleep bay blares: '[SShijack.evac_status ? "VESSEL UNDERGOING EVACUATION PROCEDURES, SELF DEFENSE KIT PROVIDED" : "VESSEL IN HEIGHTENED ALERT STATUS, SELF DEFENSE KIT PROVIDED"]'.")) character.put_in_hands(new /obj/item/storage/box/kit/cryo_self_defense(character.loc)) GLOB.data_core.manifest_inject(character) SSticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn - SSticker.mode.latejoin_tally += RoleAuthority.calculate_role_weight(player_rank) + SSticker.mode.latejoin_tally += GLOB.RoleAuthority.calculate_role_weight(player_rank) - for(var/datum/squad/sq in RoleAuthority.squads) + for(var/datum/squad/sq in GLOB.RoleAuthority.squads) if(sq) sq.max_engineers = engi_slot_formula(GLOB.clients.len) sq.max_medics = medic_slot_formula(GLOB.clients.len) @@ -276,11 +276,11 @@ if(player.get_playtime(STATISTIC_HUMAN) == 0 && player.get_playtime(STATISTIC_XENO) == 0) msg_admin_niche("NEW JOIN: [key_name(character, 1, 1, 0)]. IP: [character.lastKnownIP], CID: [character.computer_id]") if(character.client) - var/client/C = character.client - if(C.player_data && C.player_data.playtime_loaded && length(C.player_data.playtimes) == 0) + var/client/client = character.client + if(client.player_data && client.player_data.playtime_loaded && length(client.player_data.playtimes) == 0) msg_admin_niche("NEW PLAYER: [key_name(character, 1, 1, 0)]. IP: [character.lastKnownIP], CID: [character.computer_id]") - if(C.player_data && C.player_data.playtime_loaded && ((round(C.get_total_human_playtime() DECISECONDS_TO_HOURS, 0.1)) <= 5)) - msg_sea("NEW PLAYER: [key_name(character, 0, 1, 0)] only has [(round(C.get_total_human_playtime() DECISECONDS_TO_HOURS, 0.1))] hours as a human. Current role: [get_actual_job_name(character)] - Current location: [get_area(character)]") + if(client.player_data && client.player_data.playtime_loaded && ((round(client.get_total_human_playtime() DECISECONDS_TO_HOURS, 0.1)) <= 5)) + msg_sea("NEW PLAYER: [key_name(character, 0, 1, 0)] only has [(round(client.get_total_human_playtime() DECISECONDS_TO_HOURS, 0.1))] hours as a human. Current role: [get_actual_job_name(character)] - Current location: [get_area(character)]") character.client.init_verbs() qdel(src) @@ -303,44 +303,44 @@ dat += "Choose from the following open positions:
    " var/roles_show = FLAG_SHOW_ALL_JOBS - for(var/i in RoleAuthority.roles_for_mode) - var/datum/job/J = RoleAuthority.roles_for_mode[i] - if(!RoleAuthority.check_role_entry(src, J, TRUE)) + for(var/i in GLOB.RoleAuthority.roles_for_mode) + var/datum/job/J = GLOB.RoleAuthority.roles_for_mode[i] + if(!GLOB.RoleAuthority.check_role_entry(src, J, TRUE)) continue var/active = 0 // Only players with the job assigned and AFK for less than 10 minutes count as active for(var/mob/M in GLOB.player_list) if(M.client && M.job == J.title) active++ - if(roles_show & FLAG_SHOW_CIC && ROLES_CIC.Find(J.title)) + if(roles_show & FLAG_SHOW_CIC && GLOB.ROLES_CIC.Find(J.title)) dat += "Command:
    " roles_show ^= FLAG_SHOW_CIC - else if(roles_show & FLAG_SHOW_AUXIL_SUPPORT && ROLES_AUXIL_SUPPORT.Find(J.title)) + else if(roles_show & FLAG_SHOW_AUXIL_SUPPORT && GLOB.ROLES_AUXIL_SUPPORT.Find(J.title)) dat += "
    Auxiliary Combat Support:
    " roles_show ^= FLAG_SHOW_AUXIL_SUPPORT - else if(roles_show & FLAG_SHOW_MISC && ROLES_MISC.Find(J.title)) + else if(roles_show & FLAG_SHOW_MISC && GLOB.ROLES_MISC.Find(J.title)) dat += "
    Other:
    " roles_show ^= FLAG_SHOW_MISC - else if(roles_show & FLAG_SHOW_POLICE && ROLES_POLICE.Find(J.title)) + else if(roles_show & FLAG_SHOW_POLICE && GLOB.ROLES_POLICE.Find(J.title)) dat += "
    Military Police:
    " roles_show ^= FLAG_SHOW_POLICE - else if(roles_show & FLAG_SHOW_ENGINEERING && ROLES_ENGINEERING.Find(J.title)) + else if(roles_show & FLAG_SHOW_ENGINEERING && GLOB.ROLES_ENGINEERING.Find(J.title)) dat += "
    Engineering:
    " roles_show ^= FLAG_SHOW_ENGINEERING - else if(roles_show & FLAG_SHOW_REQUISITION && ROLES_REQUISITION.Find(J.title)) + else if(roles_show & FLAG_SHOW_REQUISITION && GLOB.ROLES_REQUISITION.Find(J.title)) dat += "
    Requisitions:
    " roles_show ^= FLAG_SHOW_REQUISITION - else if(roles_show & FLAG_SHOW_MEDICAL && ROLES_MEDICAL.Find(J.title)) + else if(roles_show & FLAG_SHOW_MEDICAL && GLOB.ROLES_MEDICAL.Find(J.title)) dat += "
    Medbay:
    " roles_show ^= FLAG_SHOW_MEDICAL - else if(roles_show & FLAG_SHOW_MARINES && ROLES_MARINES.Find(J.title)) + else if(roles_show & FLAG_SHOW_MARINES && GLOB.ROLES_MARINES.Find(J.title)) dat += "
    Squad Riflemen:
    " roles_show ^= FLAG_SHOW_MARINES @@ -393,7 +393,7 @@ INVOKE_ASYNC(new_character, TYPE_PROC_REF(/mob/living/carbon/human, update_hair)) new_character.key = key //Manually transfer the key to log them in - new_character.client?.change_view(world_view_size) + new_character.client?.change_view(GLOB.world_view_size) return new_character diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index fb4dbac3c160..a4525e16a6c6 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -198,6 +198,16 @@ arm_equipment(preview_dummy, J, FALSE, FALSE, owner, show_job_gear) + // If the dummy was equipped with marine armor. + var/jacket = preview_dummy.get_item_by_slot(WEAR_JACKET) + if(istype(jacket, /obj/item/clothing/suit/storage/marine)) + var/obj/item/clothing/suit/storage/marine/armor = jacket + // If the armor has different sprite variants. + if(armor.armor_variation) + // Set its `icon_state` to the style the player picked as their 'Preferred Armor'. + armor.set_armor_style(preferred_armor) + armor.update_icon(preview_dummy) + if(isnull(preview_front)) preview_front = new() owner.add_to_screen(preview_front) @@ -237,9 +247,9 @@ if(JOB_SQUAD_TEAM_LEADER) return /datum/equipment_preset/uscm/tl_equipped if(JOB_CO) - if(length(RoleAuthority.roles_whitelist)) - var/datum/job/J = RoleAuthority.roles_by_name[JOB_CO] - return J.gear_preset_whitelist["[JOB_CO][J.get_whitelist_status(RoleAuthority.roles_whitelist, owner)]"] + if(length(GLOB.RoleAuthority.roles_whitelist)) + var/datum/job/J = GLOB.RoleAuthority.roles_by_name[JOB_CO] + return J.gear_preset_whitelist["[JOB_CO][J.get_whitelist_status(GLOB.RoleAuthority.roles_whitelist, owner)]"] return /datum/equipment_preset/uscm_ship/commander if(JOB_SO) return /datum/equipment_preset/uscm_ship/so @@ -258,9 +268,9 @@ if(JOB_COMBAT_REPORTER) return /datum/equipment_preset/uscm_ship/reporter if(JOB_SYNTH) - if(length(RoleAuthority.roles_whitelist)) - var/datum/job/J = RoleAuthority.roles_by_name[JOB_SYNTH] - return J.gear_preset_whitelist["[JOB_SYNTH][J.get_whitelist_status(RoleAuthority.roles_whitelist, owner)]"] + if(length(GLOB.RoleAuthority.roles_whitelist)) + var/datum/job/J = GLOB.RoleAuthority.roles_by_name[JOB_SYNTH] + return J.gear_preset_whitelist["[JOB_SYNTH][J.get_whitelist_status(GLOB.RoleAuthority.roles_whitelist, owner)]"] return /datum/equipment_preset/synth/uscm if(JOB_WORKING_JOE) return /datum/equipment_preset/synth/working_joe @@ -307,9 +317,9 @@ return pick(SSmapping.configs[GROUND_MAP].CO_survivor_types) return /datum/equipment_preset/uscm_ship/commander if(JOB_PREDATOR) - if(length(RoleAuthority.roles_whitelist)) - var/datum/job/J = RoleAuthority.roles_by_name[JOB_PREDATOR] - return J.gear_preset_whitelist["[JOB_PREDATOR][J.get_whitelist_status(RoleAuthority.roles_whitelist, owner)]"] + if(length(GLOB.RoleAuthority.roles_whitelist)) + var/datum/job/J = GLOB.RoleAuthority.roles_by_name[JOB_PREDATOR] + return J.gear_preset_whitelist["[JOB_PREDATOR][J.get_whitelist_status(GLOB.RoleAuthority.roles_whitelist, owner)]"] return /datum/equipment_preset/yautja/blooded return /datum/equipment_preset/uscm/private_equipped diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 8cd5b148a161..032888f26709 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -66,7 +66,7 @@ return if(!src.client.admin_holder || !(client.admin_holder.rights & R_MOD)) - if(!dsay_allowed) + if(!GLOB.dsay_allowed) to_chat(src, SPAN_DANGER("Deadchat is globally muted")) return @@ -174,7 +174,7 @@ for it but just ignore it. if(length(message) >= 2) var/channel_prefix = copytext(message, 1 ,3) - return department_radio_keys[channel_prefix] + return GLOB.department_radio_keys[channel_prefix] return null diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 51c9ba9e13fd..6dda93e4d9c2 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -108,7 +108,7 @@ O.mind.original = O else O.key = key - if(O.client) O.client.change_view(world_view_size) + if(O.client) O.client.change_view(GLOB.world_view_size) O.forceMove(loc) O.job = "Cyborg" @@ -180,7 +180,7 @@ new_xeno.a_intent = INTENT_HARM new_xeno.key = key - if(new_xeno.client) new_xeno.client.change_view(world_view_size) + if(new_xeno.client) new_xeno.client.change_view(GLOB.world_view_size) to_chat(new_xeno, "You are now an alien.") qdel(src) @@ -212,7 +212,7 @@ var/mob/new_mob = new mobpath(src.loc) new_mob.key = key - if(new_mob.client) new_mob.client.change_view(world_view_size) + if(new_mob.client) new_mob.client.change_view(GLOB.world_view_size) new_mob.a_intent = INTENT_HARM @@ -232,7 +232,7 @@ var/mob/new_mob = new mobpath(src.loc) new_mob.key = key - if(new_mob.client) new_mob.client.change_view(world_view_size) + if(new_mob.client) new_mob.client.change_view(GLOB.world_view_size) new_mob.a_intent = INTENT_HARM to_chat(new_mob, "You feel more... animalistic") diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm index 69263ed02e3f..46a30b313bb8 100644 --- a/code/modules/nano/nanoui.dm +++ b/code/modules/nano/nanoui.dm @@ -105,7 +105,7 @@ nanoui is used to open and update nano browser uis */ /datum/nanoui/Destroy() if(user) - nanomanager.ui_closed(src) + SSnano.nanomanager.ui_closed(src) close_browser(user, "[window_id]") user = null @@ -444,7 +444,7 @@ nanoui is used to open and update nano browser uis winset(user, "mapwindow.map", "focus=true") // return keyboard focus to map on_close_winset() //onclose(user, window_id) - nanomanager.ui_opened(src) + SSnano.nanomanager.ui_opened(src) /** * Close this UI @@ -453,7 +453,7 @@ nanoui is used to open and update nano browser uis */ /datum/nanoui/proc/close() is_auto_updating = 0 - nanomanager.ui_closed(src) + SSnano.nanomanager.ui_closed(src) close_browser(user, "[window_id]") qdel(src) @@ -520,7 +520,7 @@ nanoui is used to open and update nano browser uis map_update = 1 if ((src_object && src_object.Topic(href, href_list)) || map_update) - nanomanager.update_uis(src_object) // update all UIs attached to src_object + SSnano.nanomanager.update_uis(src_object) // update all UIs attached to src_object /** * Process this UI, updating the entire UI or just the status (aka visibility) diff --git a/code/modules/objectives/data_retrieval.dm b/code/modules/objectives/data_retrieval.dm index 01689a18d081..f66c578f48fb 100644 --- a/code/modules/objectives/data_retrieval.dm +++ b/code/modules/objectives/data_retrieval.dm @@ -14,7 +14,7 @@ /datum/cm_objective/retrieve_data/New() . = ..() - decryption_password = "[pick(alphabet_uppercase)][rand(100,999)][pick(alphabet_uppercase)][rand(10,99)]" + decryption_password = "[pick(GLOB.alphabet_uppercase)][rand(100,999)][pick(GLOB.alphabet_uppercase)][rand(10,99)]" /datum/cm_objective/retrieve_data/pre_round_start() SSobjectives.statistics["data_retrieval_total_instances"]++ @@ -208,7 +208,7 @@ disk_color = "Bloodied blue" display_color = "#5296e3" - label = "[pick(greek_letters)]-[rand(100,999)]" + label = "[pick(GLOB.greek_letters)]-[rand(100,999)]" name = "[disk_color] computer disk [label]" objective = new /datum/cm_objective/retrieve_data/disk(src) retrieve_objective = new /datum/cm_objective/retrieve_item/document(src) @@ -237,7 +237,7 @@ /obj/structure/machinery/computer/objective/Initialize() . = ..() - label = "[pick(greek_letters)]-[rand(100,999)]" + label = "[pick(GLOB.greek_letters)]-[rand(100,999)]" name = "data terminal [label]" objective = new /datum/cm_objective/retrieve_data/terminal(src) diff --git a/code/modules/objectives/documents.dm b/code/modules/objectives/documents.dm index 5c6041a406c2..8562f1985e7f 100644 --- a/code/modules/objectives/documents.dm +++ b/code/modules/objectives/documents.dm @@ -129,7 +129,7 @@ /obj/item/document_objective/Initialize(mapload, ...) . = ..() - label = "[pick(alphabet_uppercase)][rand(100,999)]" + label = "[pick(GLOB.alphabet_uppercase)][rand(100,999)]" objective = new objective_type(src) retrieve_objective = new /datum/cm_objective/retrieve_item/document(src) LAZYADD(objective.enables_objectives, retrieve_objective) diff --git a/code/modules/objectives/objective_memory_storage.dm b/code/modules/objectives/objective_memory_storage.dm index 08dfc8cdb2c2..161c78d4d1ba 100644 --- a/code/modules/objectives/objective_memory_storage.dm +++ b/code/modules/objectives/objective_memory_storage.dm @@ -77,26 +77,26 @@ /datum/objective_memory_storage/proc/synchronize_objectives() clean_objectives() - if(!intel_system || !intel_system.oms) + if(!GLOB.intel_system || !GLOB.intel_system.oms) return - intel_system.oms.clean_objectives() + GLOB.intel_system.oms.clean_objectives() - for(var/datum/cm_objective/O in intel_system.oms.folders) + for(var/datum/cm_objective/O in GLOB.intel_system.oms.folders) addToListNoDupe(folders, O) - for(var/datum/cm_objective/O in intel_system.oms.progress_reports) + for(var/datum/cm_objective/O in GLOB.intel_system.oms.progress_reports) addToListNoDupe(progress_reports, O) - for(var/datum/cm_objective/O in intel_system.oms.technical_manuals) + for(var/datum/cm_objective/O in GLOB.intel_system.oms.technical_manuals) addToListNoDupe(technical_manuals, O) - for(var/datum/cm_objective/O in intel_system.oms.terminals) + for(var/datum/cm_objective/O in GLOB.intel_system.oms.terminals) addToListNoDupe(terminals, O) - for(var/datum/cm_objective/O in intel_system.oms.disks) + for(var/datum/cm_objective/O in GLOB.intel_system.oms.disks) addToListNoDupe(disks, O) - for(var/datum/cm_objective/O in intel_system.oms.retrieve_items) + for(var/datum/cm_objective/O in GLOB.intel_system.oms.retrieve_items) addToListNoDupe(retrieve_items, O) - for(var/datum/cm_objective/O in intel_system.oms.other) + for(var/datum/cm_objective/O in GLOB.intel_system.oms.other) addToListNoDupe(other, O) -var/global/datum/intel_system/intel_system = new() +GLOBAL_DATUM_INIT(intel_system, /datum/intel_system, new()) /datum/intel_system var/datum/objective_memory_storage/oms = new() @@ -127,7 +127,7 @@ var/global/datum/intel_system/intel_system = new() if(!powered()) to_chat(user, SPAN_WARNING("This computer has no power!")) return FALSE - if(!intel_system) + if(!GLOB.intel_system) to_chat(user, SPAN_WARNING("The computer doesn't seem to be connected to anything...")) return FALSE if(user.action_busy) @@ -197,9 +197,9 @@ var/global/datum/intel_system/intel_system = new() return TRUE /obj/structure/machinery/computer/intel/proc/transfer_intel(mob/living/user, datum/cm_objective/O) - if(!intel_system || !intel_system.oms) + if(!GLOB.intel_system || !GLOB.intel_system.oms) return 0 - if(intel_system.oms.has_objective(O)) + if(GLOB.intel_system.oms.has_objective(O)) return 0 if(user.action_busy) return 0 @@ -215,7 +215,7 @@ var/global/datum/intel_system/intel_system = new() return -1 to_chat(user, SPAN_NOTICE("...something about \"[clue]\"...")) - intel_system.store_single_objective(O) + GLOB.intel_system.store_single_objective(O) return 1 // -------------------------------------------- @@ -236,7 +236,7 @@ var/global/datum/intel_system/intel_system = new() if(!powered()) to_chat(user, SPAN_WARNING("This computer has no power!")) return FALSE - if(!intel_system) + if(!GLOB.intel_system) to_chat(user, SPAN_WARNING("The computer doesn't seem to be connected to anything...")) return FALSE if(user.action_busy) diff --git a/code/modules/objectives/power_objectives.dm b/code/modules/objectives/power_objectives.dm index ecd192caa32e..8f18af9337ea 100644 --- a/code/modules/objectives/power_objectives.dm +++ b/code/modules/objectives/power_objectives.dm @@ -16,7 +16,7 @@ /datum/cm_objective/power/pre_round_start() if(uses_smes) - for(var/obj/structure/machinery/power/smes/colony_smes in machines) + for(var/obj/structure/machinery/power/smes/colony_smes in GLOB.machines) if(!is_ground_level(colony_smes.loc.z)) continue LAZYADD(power_objects, colony_smes) diff --git a/code/modules/organs/limbs.dm b/code/modules/organs/limbs.dm index 58d0a4780681..8df96650ac50 100644 --- a/code/modules/organs/limbs.dm +++ b/code/modules/organs/limbs.dm @@ -171,6 +171,7 @@ */ /obj/limb/emp_act(severity) + . = ..() if(!(status & (LIMB_ROBOT|LIMB_SYNTHSKIN))) //meatbags do not care about EMP return var/probability = 30 @@ -944,7 +945,7 @@ This function completely restores a damaged organ to perfect condition. if(organ) //Throw organs around - var/lol = pick(cardinal) + var/lol = pick(GLOB.cardinals) step(organ,lol) owner.update_body() //Among other things, this calls update_icon() and updates our visuals. diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index e18c1ce3c2e7..b572b5d9e87b 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -227,10 +227,10 @@ t = replacetext(t, "\[large\]", "") t = replacetext(t, "\[/large\]", "") t = replacetext(t, "\[sign\]", "[user ? user.real_name : "Anonymous"]") - t = replacetext(t, "\[date\]", "[time2text(REALTIMEOFDAY, "Day DD Month [game_year]")]") - t = replacetext(t, "\[shortdate\]", "[time2text(REALTIMEOFDAY, "DD/MM/[game_year]")]") + t = replacetext(t, "\[date\]", "[time2text(REALTIMEOFDAY, "Day DD Month [GLOB.game_year]")]") + t = replacetext(t, "\[shortdate\]", "[time2text(REALTIMEOFDAY, "DD/MM/[GLOB.game_year]")]") t = replacetext(t, "\[time\]", "[worldtime2text("hh:mm")]") - t = replacetext(t, "\[date+time\]", "[worldtime2text("hh:mm")], [time2text(REALTIMEOFDAY, "Day DD Month [game_year]")]") + t = replacetext(t, "\[date+time\]", "[worldtime2text("hh:mm")], [time2text(REALTIMEOFDAY, "Day DD Month [GLOB.game_year]")]") t = replacetext(t, "\[field\]", "") t = replacetext(t, "\[h1\]", "

    ") @@ -569,6 +569,10 @@ name = "crumpled note" info = "there is cotten candy in the walls" +/obj/item/paper/bigred/lambda + name = "ripped diary entry" + info = "Director Smith's Diary\nEntry Date: 15 December 2181\nToday, I've felt true progress! The XX-121 reproduction program is in full effect, and Administrator Cooper have given us the all clear to continue producing specimens. To think that all this is coming from just that first specimen, a single 'Queen' form... It's grown to almost 5 meters tall and shows no signs of ceasing egg production! These creatures will be the next Synthetic of our time, we'll show those Seegson bastards." + /obj/item/paper/bigred/union name = "Shaft miners union" info = "Today we have had enough of being underpaid and treated like shit for not reaching the higher up's unreasonable quotas of ore. They say this place has a \"sea of valuable ores,\" yet we have been mining for years and are yet to find a single diamond. We have had it, enough is enough. They think they can control everything we do, they thought wrong! We, the oppressed workers, shall rise up against the capitalist dogs in a mutiny and take back our pay by force. \n If they send their dogs here to bust us, we will kill each and every single one of them." @@ -666,34 +670,34 @@ if(!C) var/random_chem if(tier) - random_chem = pick(chemical_gen_classes_list[tier]) + random_chem = pick(GLOB.chemical_gen_classes_list[tier]) else if(note_type == "test") - random_chem = pick(chemical_gen_classes_list["T4"]) + random_chem = pick(GLOB.chemical_gen_classes_list["T4"]) else - random_chem = pick( prob(55);pick(chemical_gen_classes_list["T2"]), - prob(30);pick(chemical_gen_classes_list["T3"]), - prob(15);pick(chemical_gen_classes_list["T4"])) + random_chem = pick( prob(55);pick(GLOB.chemical_gen_classes_list["T2"]), + prob(30);pick(GLOB.chemical_gen_classes_list["T3"]), + prob(15);pick(GLOB.chemical_gen_classes_list["T4"])) if(!random_chem) - random_chem = pick(chemical_gen_classes_list["T1"]) - C = chemical_reagents_list["[random_chem]"] + random_chem = pick(GLOB.chemical_gen_classes_list["T1"]) + C = GLOB.chemical_reagents_list["[random_chem]"] var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) var/txt = "

    Official Weyland-Yutani Document
    Experiment Notes

    " switch(note_type) if("synthesis") - var/datum/chemical_reaction/G = chemical_reactions_list[C.id] + var/datum/chemical_reaction/G = GLOB.chemical_reactions_list[C.id] name = "Synthesis of [C.name]" icon_state = "paper_wy_partial_report" txt += "[name]

    " txt += "During experiment [pick("C","Q","V","W","X","Y","Z")][rand(100,999)][pick("a","b","c")] the theorized compound identified as [C.name], was successfully synthesized using the following formula:
    \n
    \n" for(var/I in G.required_reagents) - var/datum/reagent/R = chemical_reagents_list["[I]"] + var/datum/reagent/R = GLOB.chemical_reagents_list["[I]"] var/U = G.required_reagents[I] txt += " - [U] [R.name]
    \n" if(G.required_catalysts && G.required_catalysts.len) txt += "
    \nWhile using the following catalysts:
    \n
    \n" for(var/I in G.required_catalysts) - var/datum/reagent/R = chemical_reagents_list["[I]"] + var/datum/reagent/R = GLOB.chemical_reagents_list["[I]"] var/U = G.required_catalysts[I] txt += " - [U] [R.name]
    \n" if(full_report) @@ -770,16 +774,16 @@ /obj/item/paper/research_notes/unique/Initialize() //Each one of these get a new unique chem var/datum/reagent/generated/C = new /datum/reagent/generated - C.id = "tau-[length(chemical_gen_classes_list["tau"])]" + C.id = "tau-[length(GLOB.chemical_gen_classes_list["tau"])]" C.generate_name() C.chemclass = CHEM_CLASS_RARE if(gen_tier) C.gen_tier = gen_tier else - C.gen_tier = chemical_data.clearance_level + C.gen_tier = GLOB.chemical_data.clearance_level C.generate_stats() - chemical_gen_classes_list["tau"] += C.id //Because each unique_vended should be unique, we do not save the chemclass anywhere but in the tau list - chemical_reagents_list[C.id] = C + GLOB.chemical_gen_classes_list["tau"] += C.id //Because each unique_vended should be unique, we do not save the chemclass anywhere but in the tau list + GLOB.chemical_reagents_list[C.id] = C C.generate_assoc_recipe() data = C msg_admin_niche("New reagent with id [C.id], name [C.name], level [C.gen_tier], generated and printed at [loc] [ADMIN_JMP(loc)].") @@ -803,7 +807,7 @@ info += "ID: [S.name]

    \n" info += "Database Details:
    \n" if(S.chemclass >= CHEM_CLASS_ULTRA) - if(chemical_data.clearance_level >= S.gen_tier || info_only) + if(GLOB.chemical_data.clearance_level >= S.gen_tier || info_only) info += "The following information relating to [S.name] is restricted with a level [S.gen_tier] clearance classification.
    " info += "[S.description]\n" info += "
    Overdoses at: [S.overdose] units\n" @@ -813,7 +817,7 @@ else info += "CLASSIFIED: Clearance level [S.gen_tier] required to read the database entry.
    \n" icon_state = "paper_wy_partial_report" - else if(S.chemclass == CHEM_CLASS_SPECIAL && !chemical_data.clearance_x_access && !info_only) + else if(S.chemclass == CHEM_CLASS_SPECIAL && !GLOB.chemical_data.clearance_x_access && !info_only) info += "CLASSIFIED: Clearance level X required to read the database entry.
    \n" icon_state = "paper_wy_partial_report" else if(S.description) @@ -825,14 +829,14 @@ else info += "No details on this reagent could be found in the database.
    \n" icon_state = "paper_wy_synthesis" - if(S.chemclass >= CHEM_CLASS_SPECIAL && !chemical_data.chemical_identified_list[S.id] && !info_only) + if(S.chemclass >= CHEM_CLASS_SPECIAL && !GLOB.chemical_data.chemical_identified_list[S.id] && !info_only) info += "
    Saved emission spectrum of [S.name] to the database.
    \n" info += "
    Composition Details:
    \n" - if(chemical_reactions_list[S.id]) - var/datum/chemical_reaction/C = chemical_reactions_list[S.id] + if(GLOB.chemical_reactions_list[S.id]) + var/datum/chemical_reaction/C = GLOB.chemical_reactions_list[S.id] for(var/I in C.required_reagents) - var/datum/reagent/R = chemical_reagents_list["[I]"] - if(R.chemclass >= CHEM_CLASS_SPECIAL && !chemical_data.chemical_identified_list[R.id] && !info_only) + var/datum/reagent/R = GLOB.chemical_reagents_list["[I]"] + if(R.chemclass >= CHEM_CLASS_SPECIAL && !GLOB.chemical_data.chemical_identified_list[R.id] && !info_only) info += " - Unknown emission spectrum
    \n" completed = FALSE else @@ -842,14 +846,14 @@ if(C.required_catalysts.len) info += "
    Reaction would require the following catalysts:
    \n" for(var/I in C.required_catalysts) - var/datum/reagent/R = chemical_reagents_list["[I]"] - if(R.chemclass >= CHEM_CLASS_SPECIAL && !chemical_data.chemical_identified_list[R.id] && !info_only) + var/datum/reagent/R = GLOB.chemical_reagents_list["[I]"] + if(R.chemclass >= CHEM_CLASS_SPECIAL && !GLOB.chemical_data.chemical_identified_list[R.id] && !info_only) info += " - Unknown emission spectrum
    \n" completed = FALSE else var/U = C.required_catalysts[I] info += " - [U] [R.name]
    \n" - else if(chemical_gen_classes_list["C1"].Find(S.id)) + else if(GLOB.chemical_gen_classes_list["C1"].Find(S.id)) info += " - [S.name]
    \n" else info += "ERROR: Unable to analyze emission spectrum of sample." //A reaction to make this doesn't exist, so this is our IC excuse @@ -860,7 +864,7 @@ else if(!S.properties) //Safety for empty reagents completed = FALSE - if(S.chemclass == CHEM_CLASS_SPECIAL && chemical_data.clearance_x_access) + if(S.chemclass == CHEM_CLASS_SPECIAL && GLOB.chemical_data.clearance_x_access) completed = TRUE data = S @@ -906,3 +910,14 @@ info = parsepencode(template, null, null, FALSE) #undef MAX_FIELDS + +/obj/item/paper/colonial_grunts + icon = 'icons/obj/items/paper.dmi' + icon_state = "paper_stack_words" + name = "Colonial Space Grunts" + desc = "A tabletop game based around the USCM, easy to get into, simple to play, and most inportantly fun for the whole squad." + +/obj/item/paper/colonial_grunts/Initialize(mapload, ...) + . = ..() + info = "
    " + update_icon() diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index b62161b802c1..cebb4ad613b0 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -288,7 +288,7 @@ /obj/item/device/camera/proc/captureimage(atom/target, mob/user, flag) var/mob_descriptions = "" var/radius = (size-1)*0.5 - var/list/turf/turfs = RANGE_TURFS(radius, target) & view(world_view_size + radius, user.client) + var/list/turf/turfs = RANGE_TURFS(radius, target) & view(GLOB.world_view_size + radius, user.client) for(var/turf/the_turf as anything in turfs) mob_descriptions = get_mob_descriptions(the_turf, mob_descriptions) var/datum/picture/the_picture = createpicture(target, user, turfs, mob_descriptions, flag) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index bce7051abb1c..dd0327e3821d 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -1011,7 +1011,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list( return 0 if(!(ishuman(user) || isRemoteControlling(user))) to_chat(user, SPAN_WARNING("You don't have the dexterity to use [src]!")) - nanomanager.close_user_uis(user, src) + SSnano.nanomanager.close_user_uis(user, src) return 0 if(user.is_mob_restrained()) to_chat(user, SPAN_WARNING("You must have free hands to use [src].")) @@ -1024,11 +1024,11 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list( if(aidisabled) if(!loud) to_chat(user, SPAN_WARNING("[src] has AI control disabled!")) - nanomanager.close_user_uis(user, src) + SSnano.nanomanager.close_user_uis(user, src) return 0 else if((!in_range(src, user) || !istype(src.loc, /turf))) - nanomanager.close_user_uis(user, src) + SSnano.nanomanager.close_user_uis(user, src) return 0 var/mob/living/carbon/human/H = user @@ -1266,6 +1266,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list( //Damage and destruction acts /obj/structure/machinery/power/apc/emp_act(severity) + . = ..() if(cell) cell.emp_act(severity) lighting = 0 @@ -1274,7 +1275,6 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list( spawn(1 MINUTES) equipment = 3 environ = 3 - ..() /obj/structure/machinery/power/apc/ex_act(severity) switch(severity) diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 992e0f3464ff..31a096a3a2ee 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -71,12 +71,12 @@ /obj/item/cell/emp_act(severity) + . = ..() charge -= 1000 / severity if (charge < 0) charge = 0 if(reliability != 100 && prob(50/severity)) reliability -= 10 / severity - ..() /obj/item/cell/ex_act(severity) diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index bee3e0aac8c2..00e6b92eab8f 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -81,13 +81,13 @@ if(has_power || !src.needs_power) if(machine_processing) if(stat & NOPOWER) - addToListNoDupe(processing_machines, src) // power interupted us, start processing again + addToListNoDupe(GLOB.processing_machines, src) // power interupted us, start processing again stat &= ~NOPOWER src.update_use_power(USE_POWER_IDLE) else if(machine_processing) - processing_machines -= src // no power, can't process. + GLOB.processing_machines -= src // no power, can't process. stat |= NOPOWER src.update_use_power(USE_POWER_NONE) @@ -97,19 +97,19 @@ // rebuild all power networks from scratch /proc/makepowernets() - for(var/datum/powernet/PN in powernets) + for(var/datum/powernet/PN in GLOB.powernets) del(PN) //not qdel on purpose, powernet is still using del. - powernets.Cut() + GLOB.powernets.Cut() - for(var/area/A in all_areas) - if(powernets_by_name[A.powernet_name]) + for(var/area/A in GLOB.all_areas) + if(GLOB.powernets_by_name[A.powernet_name]) continue var/datum/powernet/PN = new() PN.powernet_name = A.powernet_name - powernets += PN - powernets_by_name[A.powernet_name] = PN + GLOB.powernets += PN + GLOB.powernets_by_name[A.powernet_name] = PN - for(var/obj/structure/machinery/power/M in machines) + for(var/obj/structure/machinery/power/M in GLOB.machines) M.connect_to_network() return 1 @@ -222,7 +222,7 @@ var/cdir - for(var/card in cardinal) + for(var/card in GLOB.cardinals) var/turf/T = get_step(loc,card) cdir = get_dir(T,loc) @@ -250,7 +250,7 @@ var/area/A = get_area(src) if(!A) return 0 - var/datum/powernet/PN = powernets_by_name[A.powernet_name] + var/datum/powernet/PN = GLOB.powernets_by_name[A.powernet_name] if(!PN) return 0 powernet = PN diff --git a/code/modules/power/profiling.dm b/code/modules/power/profiling.dm index 21c8e2a63538..b4b67b8c8543 100644 --- a/code/modules/power/profiling.dm +++ b/code/modules/power/profiling.dm @@ -1,29 +1,27 @@ -datum +GLOBAL_VAR_INIT(enable_power_update_profiling, FALSE) -var/global/enable_power_update_profiling = 0 - -var/global/power_profiled_time = 0 -var/global/power_last_profile_time = 0 -var/global/list/power_update_requests_by_machine = list() -var/global/list/power_update_requests_by_area = list() +GLOBAL_VAR_INIT(power_profiled_time, 0) +GLOBAL_VAR_INIT(power_last_profile_time, 0) +GLOBAL_LIST_EMPTY(power_update_requests_by_machine) +GLOBAL_LIST_EMPTY(power_update_requests_by_area) /proc/log_power_update_request(area/A, obj/structure/machinery/M) - if (!enable_power_update_profiling) + if (!GLOB.enable_power_update_profiling) return var/machine_type = "[M.type]" - if (machine_type in power_update_requests_by_machine) - power_update_requests_by_machine[machine_type]++ + if (machine_type in GLOB.power_update_requests_by_machine) + GLOB.power_update_requests_by_machine[machine_type]++ else - power_update_requests_by_machine[machine_type] = 1 + GLOB.power_update_requests_by_machine[machine_type] = 1 - if (A.name in power_update_requests_by_area) - power_update_requests_by_area[A.name]++ + if (A.name in GLOB.power_update_requests_by_area) + GLOB.power_update_requests_by_area[A.name]++ else - power_update_requests_by_area[A.name] = 1 + GLOB.power_update_requests_by_area[A.name] = 1 - power_profiled_time += (world.time - power_last_profile_time) - power_last_profile_time = world.time + GLOB.power_profiled_time += (world.time - GLOB.power_last_profile_time) + GLOB.power_last_profile_time = world.time /client/proc/toggle_power_update_profiling() set name = "Toggle Area Power Update Profiling" @@ -31,14 +29,14 @@ var/global/list/power_update_requests_by_area = list() set category = "Debug.Profiling" if(!check_rights(R_DEBUG)) return if(!ishost(usr) || alert("Are you sure you want to do this?",, "Yes", "No") != "Yes") return - if(enable_power_update_profiling) - enable_power_update_profiling = 0 + if(GLOB.enable_power_update_profiling) + GLOB.enable_power_update_profiling = 0 to_chat(usr, "Area power update profiling disabled.") message_admins("[key_name(src)] toggled area power update profiling off.") else - enable_power_update_profiling = 1 - power_last_profile_time = world.time + GLOB.enable_power_update_profiling = 1 + GLOB.power_last_profile_time = world.time to_chat(usr, "Area power update profiling enabled.") message_admins("[key_name(src)] toggled area power update profiling on.") @@ -52,9 +50,9 @@ var/global/list/power_update_requests_by_area = list() if(!check_rights(R_DEBUG)) return - to_chat(usr, "Total profiling time: [power_profiled_time] ticks") - for (var/M in power_update_requests_by_machine) - to_chat(usr, "[M] = [power_update_requests_by_machine[M]]") + to_chat(usr, "Total profiling time: [GLOB.power_profiled_time] ticks") + for (var/M in GLOB.power_update_requests_by_machine) + to_chat(usr, "[M] = [GLOB.power_update_requests_by_machine[M]]") /client/proc/view_power_update_stats_area() set name = "View Area Power Update Statistics By Area" @@ -63,7 +61,7 @@ var/global/list/power_update_requests_by_area = list() if(!check_rights(R_DEBUG)) return - to_chat(usr, "Total profiling time: [power_profiled_time] ticks") - to_chat(usr, "Total profiling time: [power_profiled_time] ticks") - for (var/A in power_update_requests_by_area) - to_chat(usr, "[A] = [power_update_requests_by_area[A]]") + to_chat(usr, "Total profiling time: [GLOB.power_profiled_time] ticks") + to_chat(usr, "Total profiling time: [GLOB.power_profiled_time] ticks") + for (var/A in GLOB.power_update_requests_by_area) + to_chat(usr, "[A] = [GLOB.power_update_requests_by_area[A]]") diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index ac19d1ba0c67..7cf72ce1cb81 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -46,7 +46,7 @@ connect_to_network() dir_loop: - for(var/d in cardinal) + for(var/d in GLOB.cardinals) var/turf/T = get_step(src, d) for(var/obj/structure/machinery/power/terminal/term in T) if(term && term.dir == turn(d, 180)) @@ -390,6 +390,7 @@ /obj/structure/machinery/power/smes/emp_act(severity) + . = ..() outputting = 0 inputting = 0 output_level = 0 @@ -400,7 +401,6 @@ output_level = initial(output_level) inputting = initial(inputting) outputting = initial(outputting) - ..() diff --git a/code/modules/projectiles/ammo_boxes/grenade_packets.dm b/code/modules/projectiles/ammo_boxes/grenade_packets.dm index 83c222a0a128..5546fe3bc520 100644 --- a/code/modules/projectiles/ammo_boxes/grenade_packets.dm +++ b/code/modules/projectiles/ammo_boxes/grenade_packets.dm @@ -25,7 +25,7 @@ for(var/i in 1 to storage_slots) new content_type(src) -var/list/grenade_packets = list( +GLOBAL_LIST_INIT(grenade_packets, list( /obj/item/storage/box/packet/high_explosive, /obj/item/storage/box/packet/baton_slug, /obj/item/storage/box/packet/flare, @@ -37,7 +37,7 @@ var/list/grenade_packets = list( /obj/item/storage/box/packet/m15, /obj/item/storage/box/packet/airburst_he, /obj/item/storage/box/packet/airburst_incen - ) + )) /obj/item/storage/box/packet/high_explosive name = "\improper HEDP grenade packet" diff --git a/code/modules/projectiles/ammo_boxes/handful_boxes.dm b/code/modules/projectiles/ammo_boxes/handful_boxes.dm index 28eab8463011..9ac2aeea8870 100644 --- a/code/modules/projectiles/ammo_boxes/handful_boxes.dm +++ b/code/modules/projectiles/ammo_boxes/handful_boxes.dm @@ -48,6 +48,15 @@ /obj/item/ammo_box/magazine/shotgun/incendiary/empty empty = TRUE +/obj/item/ammo_box/magazine/shotgun/incendiarybuck + name = "\improper shotgun shell box (Incendiary buckshot x 100)" + icon_state = "base_incbuck" + overlay_content = "_incenbuck" + magazine_type = /obj/item/ammo_magazine/shotgun/incendiarybuck + +/obj/item/ammo_box/magazine/shotgun/incendiarybuck/empty + empty = TRUE + /obj/item/ammo_box/magazine/shotgun/beanbag name = "\improper shotgun shell box (Beanbag x 100)" icon_state = "base_bean" diff --git a/code/modules/projectiles/ammo_boxes/magazine_boxes.dm b/code/modules/projectiles/ammo_boxes/magazine_boxes.dm index ff90a6659fb2..6d20dcc75949 100644 --- a/code/modules/projectiles/ammo_boxes/magazine_boxes.dm +++ b/code/modules/projectiles/ammo_boxes/magazine_boxes.dm @@ -286,6 +286,15 @@ /obj/item/ammo_box/magazine/m4a3/hp/empty empty = TRUE +/obj/item/ammo_box/magazine/m4a3/incen + name = "\improper magazine box (Incen M4A3 x 16)" + overlay_ammo_type = "_incen" + overlay_content = "_incen" + magazine_type = /obj/item/ammo_magazine/pistol/incendiary + +/obj/item/ammo_box/magazine/m4a3/incen/empty + empty = TRUE + //-----------------------M44 Revolver Speed Loaders Box----------------------- /obj/item/ammo_box/magazine/m44 @@ -410,3 +419,306 @@ /obj/item/ammo_box/magazine/nailgun/empty empty = TRUE + +//-----------------------M56B Drum Box----------------------- + +/obj/item/ammo_box/magazine/m56b + name = "\improper drum box (M56B x 8)" + icon_state = "base_m56b" + overlay_ammo_type = "_reg_heavy" + overlay_gun_type = "_sg" + overlay_content = "_sg" + magazine_type = /obj/item/ammo_magazine/smartgun + num_of_magazines = 8 + +/obj/item/ammo_box/magazine/m56b/empty + empty = TRUE + +/obj/item/ammo_box/magazine/m56b/dirty + name = "\improper drum box (M56B 'Dirty' x 8)" + overlay_ammo_type = "_red_heavy" + overlay_content = "_sgdirty" + magazine_type = /obj/item/ammo_magazine/smartgun/dirty + +/obj/item/ammo_box/magazine/m56b/dirty/empty + empty = TRUE + +//-----------------------M56D Drum Box----------------------- + +/obj/item/ammo_box/magazine/m56d + name = "\improper drum box (M56D x 8)" + icon_state = "base_m56d" + overlay_ammo_type = "" + overlay_gun_type = "_m56d" + overlay_content = "_m56d" + magazine_type = /obj/item/ammo_magazine/m56d + num_of_magazines = 8 + +/obj/item/ammo_box/magazine/m56d/update_icon() + if(overlays) + overlays.Cut() + overlays += image(icon, icon_state = "[icon_state]_lid") //adding lid + overlays += image(text_markings_icon, icon_state = "text[overlay_gun_type]") //adding text + +/obj/item/ammo_box/magazine/m56d/empty + empty = TRUE + + +//-----------------------M2C Ammo Box----------------------- + +/obj/item/ammo_box/magazine/m2c + name = "\improper ammo box (M2C x 8)" + icon_state = "base_m2c" + overlay_ammo_type = "" + overlay_gun_type = "_m2c" + overlay_content = "_m2c" + magazine_type = /obj/item/ammo_magazine/m2c + num_of_magazines = 8 + +/obj/item/ammo_box/magazine/m2c/update_icon() + if(overlays) + overlays.Cut() + overlays += image(icon, icon_state = "[icon_state]_lid") //adding lid + overlays += image(text_markings_icon, icon_state = "text[overlay_gun_type]") //adding text + +/obj/item/ammo_box/magazine/m2c/empty + empty = TRUE + +//-----------------------M41AE2 Ammo Box----------------------- + +/obj/item/ammo_box/magazine/m41ae2 + name = "\improper magazine (M41AE2 x 8)" + icon_state = "base_m41ae2" + overlay_ammo_type = "_reg_heavy" + overlay_gun_type = "_m41ae2" + overlay_content = "_m41ae2" + magazine_type = /obj/item/ammo_magazine/rifle/lmg + num_of_magazines = 8 + +/obj/item/ammo_box/magazine/m41ae2/empty + empty = TRUE + +/obj/item/ammo_box/magazine/m41ae2/holo + name = "\improper magazine box (M41AE2 Holo-Target x 8)" + overlay_ammo_type = "_holo_heavy" + overlay_content = "_m41ae2_holo" + magazine_type = /obj/item/ammo_magazine/rifle/lmg/holo_target + +/obj/item/ammo_box/magazine/m41ae2/holo/empty + empty = TRUE + +/obj/item/ammo_box/magazine/m41ae2/heap + name = "\improper magazine box (M41AE2 HEAP x 8)" + overlay_ammo_type = "_heap_heavy" + overlay_content = "_m41ae2_heap" + magazine_type = /obj/item/ammo_magazine/rifle/lmg/heap + +/obj/item/ammo_box/magazine/m41ae2/heap/empty + empty = TRUE + +//-----------------------Flamer Fuel Tank Box----------------------- + +/obj/item/ammo_box/magazine/flamer + name = "\improper flamer tank box (UT-Napthal Fuel x 8)" + icon_state = "base_flamer" + overlay_ammo_type = "_flamer" + overlay_gun_type = "_blank" + overlay_content = "_flamer" + magazine_type = /obj/item/ammo_magazine/flamer_tank + num_of_magazines = 8 + +/obj/item/ammo_box/magazine/flamer/empty + empty = TRUE + +/obj/item/ammo_box/magazine/flamer/bgel + name = "\improper flamer fuel box (Napalm B-Gel x 8)" + overlay_ammo_type = "_flamer_bgel" + overlay_content = "_flamer_bgel" + magazine_type = /obj/item/ammo_magazine/flamer_tank/gellied + +/obj/item/ammo_box/magazine/flamer/bgel/empty + empty = TRUE + +//-----------------------M41A MK1 Rifle Mag Boxes----------------------- + +/obj/item/ammo_box/magazine/mk1 + name = "\improper magazine box (M41A MK1 x 8)" + overlay_ammo_type = "_reg_mk1" + overlay_gun_type = "_mk1" + overlay_content = "_reg" + magazine_type = /obj/item/ammo_magazine/rifle/m41aMK1 + num_of_magazines = 8 + +/obj/item/ammo_box/magazine/mk1/empty + empty = TRUE + +/obj/item/ammo_box/magazine/mk1/ap + name = "\improper magazine box (M41A MK1 AP x 8)" + flags_equip_slot = SLOT_BACK + overlay_ammo_type = "_ap_mk1" + overlay_content = "_ap" + magazine_type = /obj/item/ammo_magazine/rifle/m41aMK1/ap + +/obj/item/ammo_box/magazine/mk1/ap/empty + empty = TRUE + +//-----------------------NSG 23 Rifle Mag Boxes----------------------- + +/obj/item/ammo_box/magazine/nsg23 + name = "\improper magazine box (NSG 23 x 16)" + icon_state = "base_nsg23" + overlay_gun_type = "_nsg23" + overlay_content = "_reg" + magazine_type = /obj/item/ammo_magazine/rifle/nsg23 + num_of_magazines = 16 + +/obj/item/ammo_box/magazine/nsg23/empty + empty = TRUE + +/obj/item/ammo_box/magazine/nsg23/ap + name = "\improper magazine box (NSG 23 AP x 12)" + overlay_ammo_type = "_ap" + overlay_content = "_ap" + magazine_type = /obj/item/ammo_magazine/rifle/nsg23/ap + num_of_magazines = 12 + +/obj/item/ammo_box/magazine/nsg23/ap/empty + empty = TRUE + +/obj/item/ammo_box/magazine/nsg23/ex + name = "\improper magazine box (NSG 23 Extended x 8)" + overlay_ammo_type = "_ext" + magazine_type = /obj/item/ammo_magazine/rifle/nsg23/extended + num_of_magazines = 8 + +/obj/item/ammo_box/magazine/nsg23/ex/empty + empty = TRUE + +/obj/item/ammo_box/magazine/nsg23/heap + name = "\improper magazine box (NSG 23 HEAP x 16)" + overlay_ammo_type = "_heap" + overlay_content = "_heap" + magazine_type = /obj/item/ammo_magazine/rifle/nsg23/heap + +/obj/item/ammo_box/magazine/nsg23/heap/empty + empty = TRUE + +//-----------------------Spearhead Autorevolver Speed Loaders Box----------------------- + +/obj/item/ammo_box/magazine/spearhead + name = "\improper speed loaders box (Spearhead HP x 12)" + icon_state = "base_cmb" + overlay_ammo_type = "_357_hp" + overlay_gun_type = "_357" + overlay_content = "_speed" + num_of_magazines = 12 + magazine_type = /obj/item/ammo_magazine/revolver/cmb + +/obj/item/ammo_box/magazine/spearhead/empty + empty = TRUE + +/obj/item/ammo_box/magazine/spearhead/normalpoint + name = "\improper speed loaders box (Spearhead x 12)" + overlay_ammo_type = "_357_reg" + magazine_type = /obj/item/ammo_magazine/revolver/cmb/normalpoint + +/obj/item/ammo_box/magazine/spearhead/normalpoint/empty + empty = TRUE + +//-----------------------Type 73 Pistol Mag Box----------------------- + +/obj/item/ammo_box/magazine/type73 + name = "\improper magazine box (Type 73 x 16)" + icon_state = "base_type73" + flags_equip_slot = SLOT_BACK + overlay_ammo_type = "_type71_reg" + overlay_gun_type = "_type73" + overlay_content = "_type71_reg" + num_of_magazines = 16 + magazine_type = /obj/item/ammo_magazine/pistol/t73 + +/obj/item/ammo_box/magazine/type73/empty + empty = TRUE + +/obj/item/ammo_box/magazine/type73/impact + name = "\improper magazine box (Type 73 High-Impact x 10)" + overlay_ammo_type = "_type73_impact" + overlay_content = "_type73_impact" + num_of_magazines = 10 + magazine_type = /obj/item/ammo_magazine/pistol/t73_impact + +/obj/item/ammo_box/magazine/type73/impact/empty + empty = TRUE + + +//-----------------------AR10 Rifle Mag Box----------------------- + +/obj/item/ammo_box/magazine/ar10 + name = "\improper magazine box (AR10 x 12)" + icon_state = "base_ar10" + flags_equip_slot = SLOT_BACK + overlay_gun_type = "_ar10" + overlay_content = "_reg" + num_of_magazines = 12 + magazine_type = /obj/item/ammo_magazine/rifle/ar10 + +/obj/item/ammo_box/magazine/ar10/empty + empty = TRUE + +//-----------------------MP5 Smg Mag Box----------------------- + +/obj/item/ammo_box/magazine/mp5 + name = "\improper magazine box (MP5 x 12)" + icon_state = "base_m16" + flags_equip_slot = SLOT_BACK + overlay_gun_type = "_mp5" + overlay_content = "_reg" + num_of_magazines = 12 + magazine_type = /obj/item/ammo_magazine/smg/mp5 + +/obj/item/ammo_box/magazine/mp5/empty + empty = TRUE + + +//-----------------------Desert Eagle Pistol Mag Box----------------------- + +/obj/item/ammo_box/magazine/deagle + name = "\improper magazine box (Desert Eagle x 12)" + icon_state = "base_deagle" + flags_equip_slot = SLOT_BACK + overlay_ammo_type = "_reg" + overlay_gun_type = "_deagle" + overlay_content = "_reg" + num_of_magazines = 16 + magazine_type = /obj/item/ammo_magazine/pistol/heavy + +/obj/item/ammo_box/magazine/deagle/empty + empty = TRUE + +/obj/item/ammo_box/magazine/deagle/super + name = "\improper magazine box (Heavy Desert Eagle x 8)" + overlay_ammo_type = "_hp" + overlay_content = "_hp" + num_of_magazines = 8 + magazine_type = /obj/item/ammo_magazine/pistol/heavy/super + +/obj/item/ammo_box/magazine/deagle/super/empty + empty = TRUE + +/obj/item/ammo_box/magazine/deagle/super/highimpact + name = "\improper magazine box (High Impact Desert Eagle x 8)" + overlay_ammo_type = "_impact" + overlay_content = "_impact" + magazine_type = /obj/item/ammo_magazine/pistol/heavy/super/highimpact + +/obj/item/ammo_box/magazine/deagle/super/highimpact/empty + empty = TRUE + +/obj/item/ammo_box/magazine/deagle/super/highimpact/ap + name = "\improper magazine box (High Impact Armor-Piercing Desert Eagle x 8)" + overlay_ammo_type = "_ap" + overlay_content = "_ap" + magazine_type = /obj/item/ammo_magazine/pistol/heavy/super/highimpact/ap + +/obj/item/ammo_box/magazine/deagle/super/highimpact/ap/empty + empty = TRUE diff --git a/code/modules/projectiles/ammo_boxes/misc_boxes.dm b/code/modules/projectiles/ammo_boxes/misc_boxes.dm index d09a69e5bb50..7b19555f4de5 100644 --- a/code/modules/projectiles/ammo_boxes/misc_boxes.dm +++ b/code/modules/projectiles/ammo_boxes/misc_boxes.dm @@ -75,6 +75,15 @@ overlay_gun_type = "_m94" overlay_content = "_flares" +//------------------------M89 Signal Flare Packs Box-------------------------- + +/obj/item/ammo_box/magazine/misc/flares/signal + name = "\improper box of M89 signal flare packs" + desc = "A box of M89 signal flare packs, to mark up the way." + magazine_type = /obj/item/storage/box/m94/signal + overlay_gun_type = "_m89" + overlay_content = "_flares_signal" + //---------------------FIRE HANDLING PROCS //flare box has unique stuff @@ -139,6 +148,9 @@ /obj/item/ammo_box/magazine/misc/flares/empty empty = TRUE +/obj/item/ammo_box/magazine/misc/flares/signal/empty + empty = TRUE + //------------------------Flashlight Box-------------------------- /obj/item/ammo_box/magazine/misc/flashlight diff --git a/code/modules/projectiles/ammo_boxes/round_boxes.dm b/code/modules/projectiles/ammo_boxes/round_boxes.dm index 95115b76df43..ab1d1667c15f 100644 --- a/code/modules/projectiles/ammo_boxes/round_boxes.dm +++ b/code/modules/projectiles/ammo_boxes/round_boxes.dm @@ -130,3 +130,43 @@ /obj/item/ammo_box/rounds/type71/heap/empty empty = TRUE + +//----------------9mm Pistol Ammunition Boxes (for mod88, M4A3 pistols)------------------ + +/obj/item/ammo_box/rounds/pistol + name = "\improper pistol ammunition box (9mm)" + desc = "A 9mm ammunition box. Used to refill M4A3 magazines. It comes with a leather strap allowing to wear it on the back." + caliber = "9mm" + icon_state = "base_m4a3" + overlay_content = "_reg" + default_ammo = /datum/ammo/bullet/pistol + +/obj/item/ammo_box/rounds/pistol/empty + empty = TRUE + +/obj/item/ammo_box/rounds/pistol/ap + name = "\improper pistol ammunition box (9mm AP)" + desc = "A 9mm armor-piercing ammunition box. Used to refill mod88 and M4A3 magazines. It comes with a leather strap allowing to wear it on the back." + overlay_content = "_ap" + default_ammo = /datum/ammo/bullet/pistol/ap + +/obj/item/ammo_box/rounds/pistol/ap/empty + empty = TRUE + +/obj/item/ammo_box/rounds/pistol/hp + name = "\improper pistol ammunition box (9mm HP)" + desc = "A 9mm hollow-point ammunition box. Used to refill M4A3 magazines. It comes with a leather strap allowing to wear it on the back." + overlay_content = "_hp" + default_ammo = /datum/ammo/bullet/pistol/hollow + +/obj/item/ammo_box/rounds/pistol/hp/empty + empty = TRUE + +/obj/item/ammo_box/rounds/pistol/incen + name = "\improper pistol ammunition box (9mm Incendiary)" + desc = "A 9mm incendiary ammunition box. Used to refill M4A3 magazines. It comes with a leather strap allowing to wear it on the back." + overlay_content = "_incen" + default_ammo = /datum/ammo/bullet/pistol/incendiary + +/obj/item/ammo_box/rounds/pistol/incen/empty + empty = TRUE diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index aecabed17d65..a01d85eb5003 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -480,6 +480,7 @@ /obj/item/weapon/gun/emp_act(severity) + . = ..() for(var/obj/O in contents) O.emp_act(severity) diff --git a/code/modules/projectiles/gun_attachables.dm b/code/modules/projectiles/gun_attachables.dm index e08db17db2ac..9f0ddd04fc11 100644 --- a/code/modules/projectiles/gun_attachables.dm +++ b/code/modules/projectiles/gun_attachables.dm @@ -495,6 +495,20 @@ Defined in conflicts.dm of the #defines folder. accuracy_mod = HIT_ACCURACY_MULT_TIER_3 scatter_mod = -SCATTER_AMOUNT_TIER_8 +/obj/item/attachable/pmc_sniperbarrel + name = "sniper barrel" + icon = 'icons/obj/items/weapons/guns/attachments/barrel.dmi' + icon_state = "pmc_sniperbarrel" + desc = "A heavy barrel. CANNOT BE REMOVED." + slot = "muzzle" + flags_attach_features = NO_FLAGS + hud_offset_mod = -3 + +/obj/item/attachable/pmc_sniperbarrel/New() + ..() + accuracy_mod = HIT_ACCURACY_MULT_TIER_3 + scatter_mod = -SCATTER_AMOUNT_TIER_8 + /obj/item/attachable/sniperbarrel/vulture name = "\improper M707 barrel" icon_state = "vulture_barrel" @@ -1283,7 +1297,7 @@ Defined in conflicts.dm of the #defines folder. switch(action) if("adjust_dir") var/direction = params["offset_dir"] - if(!(direction in alldirs) || !scoping || !scope_user) + if(!(direction in GLOB.alldirs) || !scoping || !scope_user) return var/mob/scoper = scope_user.resolve() @@ -1300,7 +1314,7 @@ Defined in conflicts.dm of the #defines folder. if("adjust_position") var/direction = params["position_dir"] - if(!(direction in alldirs) || !scoping || !scope_user) + if(!(direction in GLOB.alldirs) || !scoping || !scope_user) return var/mob/scoper = scope_user.resolve() @@ -1367,7 +1381,7 @@ Defined in conflicts.dm of the #defines folder. return TRUE /obj/item/attachable/vulture_scope/proc/get_offset_dirs() - var/list/possible_dirs = alldirs.Copy() + var/list/possible_dirs = GLOB.alldirs.Copy() if(scope_offset_x >= scope_drift_max) possible_dirs -= list(NORTHEAST, EAST, SOUTHEAST) else if(scope_offset_x <= -scope_drift_max) @@ -1384,7 +1398,7 @@ Defined in conflicts.dm of the #defines folder. /obj/item/attachable/vulture_scope/proc/get_adjust_dirs() if(!scoping) return list() - var/list/possible_dirs = alldirs.Copy() + var/list/possible_dirs = GLOB.alldirs.Copy() var/turf/current_turf = get_turf(src) var/turf/scope_tile = locate(scope_x, scope_y, current_turf.z) var/mob/scoper = scope_user.resolve() diff --git a/code/modules/projectiles/guns/boltaction.dm b/code/modules/projectiles/guns/boltaction.dm index c18e45e38d3e..d21cb5b87254 100644 --- a/code/modules/projectiles/guns/boltaction.dm +++ b/code/modules/projectiles/guns/boltaction.dm @@ -214,7 +214,7 @@ return . for(var/mob/current_mob as anything in get_mobs_in_z_level_range(get_turf(user), fire_message_range) - user) - var/relative_dir = get_dir(current_mob, user) + var/relative_dir = Get_Compass_Dir(current_mob, user) var/final_dir = dir2text(relative_dir) to_chat(current_mob, SPAN_HIGHDANGER("You hear a massive boom coming from [final_dir ? "the [final_dir]" : "nearby"]!")) if(current_mob.client) diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index adca6a7cce6f..ee122d8f8edd 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -66,9 +66,9 @@ overlays += charge_icon + "_0" /obj/item/weapon/gun/energy/emp_act(severity) + . = ..() cell.use(round(cell.maxcharge / severity)) update_icon() - ..() /obj/item/weapon/gun/energy/load_into_chamber() if(!cell || cell.charge < charge_cost) diff --git a/code/modules/projectiles/guns/flamer/flamer.dm b/code/modules/projectiles/guns/flamer/flamer.dm index 323e994529ae..18fb0bf44cd8 100644 --- a/code/modules/projectiles/guns/flamer/flamer.dm +++ b/code/modules/projectiles/guns/flamer/flamer.dm @@ -250,6 +250,9 @@ /obj/item/weapon/gun/flamer/deathsquad/nolock flags_gun_features = GUN_WIELDED_FIRING_ONLY +/obj/item/weapon/gun/flamer/deathsquad/standard + current_mag = /obj/item/ammo_magazine/flamer_tank + /obj/item/weapon/gun/flamer/M240T name = "\improper M240-T incinerator unit" desc = "An improved version of the M240A1 incinerator unit, the M240-T model is capable of dispersing a larger variety of fuel types." @@ -372,29 +375,6 @@ . = ..() set_fire_delay(FIRE_DELAY_TIER_7) -GLOBAL_LIST_EMPTY(flamer_particles) -/particles/flamer_fire - icon = 'icons/effects/particles/fire.dmi' - icon_state = "bonfire" - width = 100 - height = 100 - count = 1000 - spawning = 8 - lifespan = 0.7 SECONDS - fade = 1 SECONDS - grow = -0.01 - velocity = list(0, 0) - position = generator("box", list(-16, -16), list(16, 16), NORMAL_RAND) - drift = generator("vector", list(0, -0.2), list(0, 0.2)) - gravity = list(0, 0.95) - scale = generator("vector", list(0.3, 0.3), list(1,1), NORMAL_RAND) - rotation = 30 - spin = generator("num", -20, 20) - -/particles/flamer_fire/New(set_color) - ..() - color = set_color - /obj/flamer_fire name = "fire" desc = "Ouch!" @@ -451,14 +431,11 @@ GLOBAL_LIST_EMPTY(flamer_particles) set_light(l_color = R.burncolor) - if(!GLOB.flamer_particles[R.burncolor]) - GLOB.flamer_particles[R.burncolor] = new /particles/flamer_fire(R.burncolor) - particles = GLOB.flamer_particles[R.burncolor] - tied_reagent = new R.type() // Can't get deleted this way tied_reagent.make_alike(R) - tied_reagents = obj_reagents + if(obj_reagents) + tied_reagents = obj_reagents target_clicked = target @@ -728,7 +705,7 @@ GLOBAL_LIST_EMPTY(flamer_particles) if(target.density) return - for(var/spread_direction in alldirs) + for(var/spread_direction in GLOB.alldirs) var/spread_power = remaining_distance @@ -774,7 +751,7 @@ GLOBAL_LIST_EMPTY(flamer_particles) fire_reag.burncolor = f_color new/obj/flamer_fire(target, cause_data, fire_reag) - for(var/direction in alldirs) + for(var/direction in GLOB.alldirs) var/spread_power = range switch(direction) if(NORTH,SOUTH,EAST,WEST) diff --git a/code/modules/projectiles/guns/flamer/flameshape.dm b/code/modules/projectiles/guns/flamer/flameshape.dm index f5a0699067e4..ae6c2dec0a67 100644 --- a/code/modules/projectiles/guns/flamer/flameshape.dm +++ b/code/modules/projectiles/guns/flamer/flameshape.dm @@ -28,7 +28,7 @@ /datum/flameshape/default/handle_fire_spread(obj/flamer_fire/F, fire_spread_amount, burn_dam, fuel_pressure = 1) var/turf/T var/turf/source_turf = get_turf(F.loc) - for(var/dirn in cardinal) + for(var/dirn in GLOB.cardinals) T = get_step(source_turf, dirn) if(istype(T, /turf/open/space)) continue @@ -64,7 +64,7 @@ id = FLAMESHAPE_STAR /datum/flameshape/star/proc/dirs_to_use() - return alldirs + return GLOB.alldirs /datum/flameshape/star/handle_fire_spread(obj/flamer_fire/F, fire_spread_amount, burn_dam, fuel_pressure = 1) fire_spread_amount = Floor(fire_spread_amount * 1.5) // branch 'length' @@ -102,9 +102,9 @@ /datum/flameshape/star/minor/dirs_to_use() if(prob(50)) - return cardinal + return GLOB.cardinals else - return diagonals + return GLOB.diagonals /datum/flameshape/line name = "Line" diff --git a/code/modules/projectiles/guns/lever_action.dm b/code/modules/projectiles/guns/lever_action.dm index d93796fbb15f..849844f4f044 100644 --- a/code/modules/projectiles/guns/lever_action.dm +++ b/code/modules/projectiles/guns/lever_action.dm @@ -373,6 +373,7 @@ their unique feature is that a direct hit will buff your damage and firerate hit_buff_reset_cooldown = 2 SECONDS //how much time after a direct hit until streaks reset var/floating_penetration = FLOATING_PENETRATION_TIER_0 //holder var var/floating_penetration_upper_limit = FLOATING_PENETRATION_TIER_4 + var/direct_hit_sound = 'sound/weapons/gun_xm88_directhit_low.ogg' attachable_allowed = list( /obj/item/attachable/bayonet/upp, // Barrel /obj/item/attachable/bayonet, @@ -499,12 +500,16 @@ their unique feature is that a direct hit will buff your damage and firerate switch(floating_penetration) if(FLOATING_PENETRATION_TIER_1) P.ammo = GLOB.ammo_list[/datum/ammo/bullet/lever_action/xm88/pen20] + direct_hit_sound = "sound/weapons/gun_xm88_directhit_low.ogg" if(FLOATING_PENETRATION_TIER_2) P.ammo = GLOB.ammo_list[/datum/ammo/bullet/lever_action/xm88/pen30] + direct_hit_sound = "sound/weapons/gun_xm88_directhit_medium.ogg" if(FLOATING_PENETRATION_TIER_3) P.ammo = GLOB.ammo_list[/datum/ammo/bullet/lever_action/xm88/pen40] + direct_hit_sound = "sound/weapons/gun_xm88_directhit_medium.ogg" if(FLOATING_PENETRATION_TIER_4) P.ammo = GLOB.ammo_list[/datum/ammo/bullet/lever_action/xm88/pen50] + direct_hit_sound = "sound/weapons/gun_xm88_directhit_high.ogg" return ..() /obj/item/weapon/gun/lever_action/xm88/unload(mob/user) @@ -524,6 +529,7 @@ their unique feature is that a direct hit will buff your damage and firerate lever_message = initial(lever_message) wield_delay = initial(wield_delay) cur_onehand_chance = initial(cur_onehand_chance) + direct_hit_sound = "sound/weapons/gun_xm88_directhit_low.ogg" if(in_chamber) var/obj/projectile/P = in_chamber P.ammo = GLOB.ammo_list[/datum/ammo/bullet/lever_action/xm88] @@ -536,6 +542,10 @@ their unique feature is that a direct hit will buff your damage and firerate if(one_hand_lever) addtimer(VARSET_CALLBACK(src, cur_onehand_chance, reset_onehand_chance), 4 SECONDS, TIMER_OVERRIDE|TIMER_UNIQUE) +/obj/item/weapon/gun/lever_action/xm88/direct_hit_buff(mob/user, mob/target, one_hand_lever = FALSE) + . = ..() + playsound(target, direct_hit_sound, 75) + #undef FLOATING_PENETRATION_TIER_0 #undef FLOATING_PENETRATION_TIER_1 #undef FLOATING_PENETRATION_TIER_2 diff --git a/code/modules/projectiles/guns/rifles.dm b/code/modules/projectiles/guns/rifles.dm index 65e4a6f2b7b3..1ee8aa189ed3 100644 --- a/code/modules/projectiles/guns/rifles.dm +++ b/code/modules/projectiles/guns/rifles.dm @@ -357,6 +357,8 @@ burst_scatter_mult = SCATTER_AMOUNT_TIER_10 scatter_unwielded = SCATTER_AMOUNT_TIER_4 +/obj/item/weapon/gun/rifle/m41a/elite/xm40/ap + current_mag = /obj/item/ammo_magazine/rifle/xm40 //------------------------------------------------------- //M41A TRUE AND ORIGINAL diff --git a/code/modules/projectiles/guns/specialist/sniper.dm b/code/modules/projectiles/guns/specialist/sniper.dm index 59b93275ca9a..673de1a59602 100644 --- a/code/modules/projectiles/guns/specialist/sniper.dm +++ b/code/modules/projectiles/guns/specialist/sniper.dm @@ -154,7 +154,7 @@ target.overlays -= lockon_direction_icon qdel(laser_beam) - if(!check_can_use(target, TRUE)) + if(!check_can_use(target, TRUE) || target.is_dead()) return var/obj/projectile/aimed_proj = sniper_rifle.in_chamber @@ -337,12 +337,12 @@ damage_mult = BASE_BULLET_DAMAGE_MULT recoil = RECOIL_AMOUNT_TIER_5 -/obj/item/weapon/gun/rifle/sniper/xm43e1 +/obj/item/weapon/gun/rifle/sniper/XM43E1 name = "\improper XM43E1 experimental anti-materiel rifle" desc = "An experimental anti-materiel rifle produced by Armat Systems, recently reacquired from the deep storage of an abandoned prototyping facility. This one in particular is currently undergoing field testing. Chambered in 10x99mm Caseless." icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi' - icon_state = "xm42b" - item_state = "xm42b" + icon_state = "xm43e1" + item_state = "xm43e1" unacidable = TRUE indestructible = 1 @@ -353,12 +353,12 @@ zoomdevicename = "scope" attachable_allowed = list(/obj/item/attachable/bipod) flags_gun_features = GUN_AUTO_EJECTOR|GUN_SPECIALIST|GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER - starting_attachment_types = list(/obj/item/attachable/sniperbarrel) + starting_attachment_types = list(/obj/item/attachable/pmc_sniperbarrel) sniper_beam_type = /obj/effect/ebeam/laser/intense sniper_beam_icon = "laser_beam_intense" sniper_lockon_icon = "sniper_lockon_intense" -/obj/item/weapon/gun/rifle/sniper/XM42B/handle_starting_attachment() +/obj/item/weapon/gun/rifle/sniper/XM43E1/handle_starting_attachment() ..() var/obj/item/attachable/scope/variable_zoom/S = new(src) S.icon_state = "pmcscope" @@ -368,11 +368,11 @@ update_attachable(S.slot) -/obj/item/weapon/gun/rifle/sniper/XM42B/set_gun_attachment_offsets() +/obj/item/weapon/gun/rifle/sniper/XM43E1/set_gun_attachment_offsets() attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 18,"rail_x" = 15, "rail_y" = 19, "under_x" = 20, "under_y" = 15, "stock_x" = 20, "stock_y" = 15) -/obj/item/weapon/gun/rifle/sniper/XM42B/set_gun_config_values() +/obj/item/weapon/gun/rifle/sniper/XM43E1/set_gun_config_values() ..() set_fire_delay(FIRE_DELAY_TIER_6 * 6 )//Big boy damage, but it takes a lot of time to fire a shot. //Kaga: Adjusted from 56 (Tier 4, 7*8) -> 30 (Tier 6, 5*6) ticks. 95 really wasn't big-boy damage anymore, although I updated it to 125 to remain consistent with the other 10x99mm caliber weapon (M42C). Now takes only twice as long as the M42A. @@ -382,7 +382,7 @@ damage_mult = BASE_BULLET_DAMAGE_MULT recoil = RECOIL_AMOUNT_TIER_1 -/obj/item/weapon/gun/rifle/sniper/XM42B/set_bullet_traits() +/obj/item/weapon/gun/rifle/sniper/XM43E1/set_bullet_traits() LAZYADD(traits_to_give, list( BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_iff), BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_penetrating), @@ -415,7 +415,7 @@ force = 17 zoomdevicename = "scope" flags_gun_features = GUN_AUTO_EJECTOR|GUN_WY_RESTRICTED|GUN_SPECIALIST|GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER - starting_attachment_types = list(/obj/item/attachable/sniperbarrel) + starting_attachment_types = list(/obj/item/attachable/pmc_sniperbarrel) sniper_beam_type = /obj/effect/ebeam/laser/intense sniper_beam_icon = "laser_beam_intense" sniper_lockon_icon = "sniper_lockon_intense" @@ -453,7 +453,8 @@ if(PMC_sniper.body_position == STANDING_UP && !istype(PMC_sniper.wear_suit,/obj/item/clothing/suit/storage/marine/smartgunner/veteran/pmc) && !istype(PMC_sniper.wear_suit,/obj/item/clothing/suit/storage/marine/veteran)) PMC_sniper.visible_message(SPAN_WARNING("[PMC_sniper] is blown backwards from the recoil of the [src.name]!"),SPAN_HIGHDANGER("You are knocked prone by the blowback!")) step(PMC_sniper,turn(PMC_sniper.dir,180)) - PMC_sniper.apply_effect(5, WEAKEN) + PMC_sniper.KnockDown(5) + PMC_sniper.Stun(5) //Type 88 //Based on the actual Dragunov DMR rifle. diff --git a/code/modules/projectiles/magazines/shotguns.dm b/code/modules/projectiles/magazines/shotguns.dm index 24e482549dac..6c103aaa9677 100644 --- a/code/modules/projectiles/magazines/shotguns.dm +++ b/code/modules/projectiles/magazines/shotguns.dm @@ -8,11 +8,11 @@ you're looking back on the different shotgun projectiles available. In short of one type of shotgun ammo, but I think it helps in referencing it. ~N */ -var/list/shotgun_boxes_12g = list( +GLOBAL_LIST_INIT(shotgun_boxes_12g, list( /obj/item/ammo_magazine/shotgun/buckshot, /obj/item/ammo_magazine/shotgun/flechette, /obj/item/ammo_magazine/shotgun/slugs - ) + )) /obj/item/ammo_magazine/shotgun name = "box of shotgun slugs" @@ -46,6 +46,14 @@ var/list/shotgun_boxes_12g = list( default_ammo = /datum/ammo/bullet/shotgun/incendiary handful_state = "incendiary_slug" +/obj/item/ammo_magazine/shotgun/incendiarybuck + name = "box of incendiary buckshots" + desc = "A box filled with self-detonating buckshot incendiary shotgun rounds. 12 Gauge." + icon_state = "incendiarybuck" + item_state = "incendiarybuck" + default_ammo = /datum/ammo/bullet/shotgun/buckshot/incendiary + handful_state = "incen_buckshot" + /obj/item/ammo_magazine/shotgun/buckshot name = "box of buckshot shells" desc = "A box filled with buckshot spread shotgun shells. 12 Gauge." @@ -151,21 +159,21 @@ also doesn't really matter. You can only reload them with handfuls. Handfuls of shotgun rounds. For spawning directly on mobs in roundstart, ERTs, etc */ -var/list/shotgun_handfuls_8g = list( +GLOBAL_LIST_INIT(shotgun_handfuls_8g, list( /obj/item/ammo_magazine/handful/shotgun/heavy/slug, /obj/item/ammo_magazine/handful/shotgun/heavy/buckshot, /obj/item/ammo_magazine/handful/shotgun/heavy/flechette, /obj/item/ammo_magazine/handful/shotgun/heavy/dragonsbreath - ) + )) -var/list/shotgun_handfuls_12g = list( +GLOBAL_LIST_INIT(shotgun_handfuls_12g, list( /obj/item/ammo_magazine/handful/shotgun/slug, /obj/item/ammo_magazine/handful/shotgun/buckshot, /obj/item/ammo_magazine/handful/shotgun/flechette, /obj/item/ammo_magazine/handful/shotgun/incendiary, /obj/item/ammo_magazine/handful/shotgun/buckshot/incendiary, /obj/item/ammo_magazine/handful/shotgun/beanbag - ) + )) /obj/item/ammo_magazine/handful/shotgun name = "handful of shotgun slugs (12g)" diff --git a/code/modules/projectiles/magazines/specialist.dm b/code/modules/projectiles/magazines/specialist.dm index 821273247f66..761e77305254 100644 --- a/code/modules/projectiles/magazines/specialist.dm +++ b/code/modules/projectiles/magazines/specialist.dm @@ -27,14 +27,14 @@ default_ammo = /datum/ammo/bullet/sniper/flak ammo_band_color = AMMO_BAND_COLOR_IMPACT -//M42B Magazine +//XM43E1 Magazine /obj/item/ammo_magazine/sniper/anti_materiel - name = "\improper XM42B marksman magazine (10x99mm)" + name = "\improper XM43E1 marksman magazine (10x99mm)" desc = "A magazine of caseless 10x99mm anti-materiel rounds." max_rounds = 8 caliber = "10x99mm" default_ammo = /datum/ammo/bullet/sniper/anti_materiel - gun_type = /obj/item/weapon/gun/rifle/sniper/XM42B + gun_type = /obj/item/weapon/gun/rifle/sniper/XM43E1 //M42C magazine diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 6ddbef523344..7de8f12fc546 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -193,10 +193,10 @@ setDir(get_dir(loc, target_turf)) var/ammo_flags = ammo.flags_ammo_behavior | projectile_override_flags - if(round_statistics && ammo_flags & AMMO_BALLISTIC) - round_statistics.total_projectiles_fired++ + if(GLOB.round_statistics && ammo_flags & AMMO_BALLISTIC) + GLOB.round_statistics.total_projectiles_fired++ if(ammo.bonus_projectiles_amount) - round_statistics.total_projectiles_fired += ammo.bonus_projectiles_amount + GLOB.round_statistics.total_projectiles_fired += ammo.bonus_projectiles_amount if(firer && ismob(firer) && weapon_cause_data) var/mob/M = firer M.track_shot(weapon_cause_data.cause_name) @@ -466,7 +466,7 @@ def_zone = rand_zone() // Other targets do the same roll with penalty - a near hit will hit but redirected to another limb - else if(!isxeno(L) && hit_roll > hit_chance - 20 - base_miss_chance[def_zone]) + else if(!isxeno(L) && hit_roll > hit_chance - 20 - GLOB.base_miss_chance[def_zone]) def_zone = rand_zone() else @@ -478,7 +478,7 @@ // simply to avoid them from resetting target to chest every time they want to shoot a xeno if(!direct_hit || !isxeno(L)) // For normal people or direct hits we apply the limb accuracy penalty - hit_chance -= base_miss_chance[def_zone] + hit_chance -= GLOB.base_miss_chance[def_zone] // else for direct hits on xenos, we skip it, pretending it's a chest shot with zero penalty #if DEBUG_HIT_CHANCE @@ -1185,7 +1185,7 @@ var/area/A = get_area(src) if(ishuman(firingMob) && ishuman(src) && faction == firingMob.faction && !A?.statistic_exempt) //One human shot another, be worried about it but do everything basically the same //special_role should be null or an empty string if done correctly if(!istype(P.ammo, /datum/ammo/energy/taser)) - round_statistics.total_friendly_fire_instances++ + GLOB.round_statistics.total_friendly_fire_instances++ var/ff_msg = "[key_name(firingMob)] shot [key_name(src)] with \a [P.name] in [get_area(firingMob)] [ADMIN_JMP(firingMob)] [ADMIN_PM(firingMob)]" var/ff_living = TRUE if(src.stat == DEAD) diff --git a/code/modules/reagents/Chemistry-Generator.dm b/code/modules/reagents/Chemistry-Generator.dm index bb8f69b714b2..b2e6402d4b06 100644 --- a/code/modules/reagents/Chemistry-Generator.dm +++ b/code/modules/reagents/Chemistry-Generator.dm @@ -75,56 +75,56 @@ if(my_chemid) //Do we want a specific chem? chem_id = my_chemid else if(class) //do we want a specific class? - chem_id = pick(chemical_gen_classes_list["C[class]"]) + chem_id = pick(GLOB.chemical_gen_classes_list["C[class]"]) else var/roll = rand(0,100) switch(tier) if(0) - chem_id = pick(chemical_gen_classes_list["C"])//If tier is 0, we can add any classed chemical + chem_id = pick(GLOB.chemical_gen_classes_list["C"])//If tier is 0, we can add any classed chemical if(1) if(roll<=35) - chem_id = pick(chemical_gen_classes_list["C1"]) + chem_id = pick(GLOB.chemical_gen_classes_list["C1"]) else if(roll<=65) - chem_id = pick(chemical_gen_classes_list["C2"]) + chem_id = pick(GLOB.chemical_gen_classes_list["C2"]) else if(roll<=85) - chem_id = pick(chemical_gen_classes_list["C3"]) + chem_id = pick(GLOB.chemical_gen_classes_list["C3"]) else - chem_id = pick(chemical_gen_classes_list["C4"]) + chem_id = pick(GLOB.chemical_gen_classes_list["C4"]) if(2) if(roll<=30) - chem_id = pick(chemical_gen_classes_list["C1"]) + chem_id = pick(GLOB.chemical_gen_classes_list["C1"]) else if(roll<=55) - chem_id = pick(chemical_gen_classes_list["C2"]) + chem_id = pick(GLOB.chemical_gen_classes_list["C2"]) else if(roll<=70) - chem_id = pick(chemical_gen_classes_list["C3"]) + chem_id = pick(GLOB.chemical_gen_classes_list["C3"]) else - chem_id = pick(chemical_gen_classes_list["C4"]) + chem_id = pick(GLOB.chemical_gen_classes_list["C4"]) if(3) if(roll<=10) - chem_id = pick(chemical_gen_classes_list["C1"]) + chem_id = pick(GLOB.chemical_gen_classes_list["C1"]) else if(roll<=30) - chem_id = pick(chemical_gen_classes_list["C2"]) + chem_id = pick(GLOB.chemical_gen_classes_list["C2"]) else if(roll<=50) - chem_id = pick(chemical_gen_classes_list["C3"]) + chem_id = pick(GLOB.chemical_gen_classes_list["C3"]) else if(roll<=70) - chem_id = pick(chemical_gen_classes_list["C4"]) + chem_id = pick(GLOB.chemical_gen_classes_list["C4"]) else - chem_id = pick(chemical_gen_classes_list["C5"]) + chem_id = pick(GLOB.chemical_gen_classes_list["C5"]) else if(!required_reagents || is_catalyst)//first component is more likely to be special in chems tier 4 or higher, catalysts are always special in tier 4 or higher if (prob(50)) - chem_id = pick(chemical_gen_classes_list["C5"]) + chem_id = pick(GLOB.chemical_gen_classes_list["C5"]) else - chem_id = pick(chemical_gen_classes_list["C4"]) + chem_id = pick(GLOB.chemical_gen_classes_list["C4"]) else if(roll<=15) - chem_id = pick(chemical_gen_classes_list["C2"]) + chem_id = pick(GLOB.chemical_gen_classes_list["C2"]) else if(roll<=40) - chem_id = pick(chemical_gen_classes_list["C3"]) + chem_id = pick(GLOB.chemical_gen_classes_list["C3"]) else if(roll<=65) - chem_id = pick(chemical_gen_classes_list["C4"]) + chem_id = pick(GLOB.chemical_gen_classes_list["C4"]) else - chem_id = pick(chemical_gen_classes_list["C5"]) + chem_id = pick(GLOB.chemical_gen_classes_list["C5"]) //if we are already using this reagent, try again if(required_reagents && required_reagents.Find(chem_id)) @@ -169,7 +169,7 @@ while(!gen_name) gen_name = addtext(pick(prefix),pick(wordroot),pick(suffix)) //Make sure this name is not already used - for(var/datum/reagent/R in chemical_reagents_list) + for(var/datum/reagent/R in GLOB.chemical_reagents_list) if(R.name == gen_name)//if we are already using this name, try again gen_name = "" //set name @@ -249,58 +249,58 @@ var/property var/roll = rand(1,100) if(make_rare) - property = pick(chemical_properties_list["rare"]) + property = pick(GLOB.chemical_properties_list["rare"]) //Pick the property by value and roll else if(value_offset > 0) //Balance the value of our chemical - property = pick(chemical_properties_list["positive"]) + property = pick(GLOB.chemical_properties_list["positive"]) else if(value_offset < 0) if(roll <= gen_tier*10) - property = pick(chemical_properties_list["negative"]) + property = pick(GLOB.chemical_properties_list["negative"]) else - property = pick(chemical_properties_list["neutral"]) + property = pick(GLOB.chemical_properties_list["neutral"]) else switch(gen_tier) if(1) if(roll<=20) - property = pick(chemical_properties_list["negative"]) + property = pick(GLOB.chemical_properties_list["negative"]) else if (roll<=50) - property = pick(chemical_properties_list["neutral"]) + property = pick(GLOB.chemical_properties_list["neutral"]) else - property = pick(chemical_properties_list["positive"]) + property = pick(GLOB.chemical_properties_list["positive"]) if(2) if(roll<=25) - property = pick(chemical_properties_list["negative"]) + property = pick(GLOB.chemical_properties_list["negative"]) else if (roll<=45) - property = pick(chemical_properties_list["neutral"]) + property = pick(GLOB.chemical_properties_list["neutral"]) else - property = pick(chemical_properties_list["positive"]) + property = pick(GLOB.chemical_properties_list["positive"]) if(3) if(roll<=15) - property = pick(chemical_properties_list["negative"]) + property = pick(GLOB.chemical_properties_list["negative"]) else if (roll<=40) - property = pick(chemical_properties_list["neutral"]) + property = pick(GLOB.chemical_properties_list["neutral"]) else - property = pick(chemical_properties_list["positive"]) + property = pick(GLOB.chemical_properties_list["positive"]) else if(roll<=15) - property = pick(chemical_properties_list["negative"]) + property = pick(GLOB.chemical_properties_list["negative"]) else if (roll<=40) - property = pick(chemical_properties_list["neutral"]) + property = pick(GLOB.chemical_properties_list["neutral"]) else - property = pick(chemical_properties_list["positive"]) + property = pick(GLOB.chemical_properties_list["positive"]) if(track_added_properties) //Generated effects are more unique for lower-tier chemicals, but not higher-tier ones var/property_checks = 0 while(!check_generated_properties(property) && property_checks < 4) property_checks++ - if(LAZYISIN(chemical_properties_list["negative"], property)) - property = pick(chemical_properties_list["negative"]) - else if(LAZYISIN(chemical_properties_list["neutral"], property)) - property = pick(chemical_properties_list["neutral"]) + if(LAZYISIN(GLOB.chemical_properties_list["negative"], property)) + property = pick(GLOB.chemical_properties_list["negative"]) + else if(LAZYISIN(GLOB.chemical_properties_list["neutral"], property)) + property = pick(GLOB.chemical_properties_list["neutral"]) else - property = pick(chemical_properties_list["positive"]) + property = pick(GLOB.chemical_properties_list["positive"]) - var/datum/chem_property/P = chemical_properties_list[property] + var/datum/chem_property/P = GLOB.chemical_properties_list[property] //Calculate what our chemical value is with our level var/new_value @@ -389,7 +389,7 @@ return FALSE break //Insert the property - var/datum/chem_property/P = chemical_properties_list[property] + var/datum/chem_property/P = GLOB.chemical_properties_list[property] P = new P.type() P.level = level P.holder = src @@ -397,7 +397,7 @@ //Special case: If it's a catalyst property, add it nonetheless. if(initial_property && initial_property != property) - P = chemical_properties_list[initial_property] + P = GLOB.chemical_properties_list[initial_property] if(P.category & PROPERTY_TYPE_CATALYST) P = new P.type() P.level = level @@ -425,22 +425,22 @@ C.gen_tier = gen_tier if(!C.generate_recipe(complexity)) return //Generating a recipe failed, so return null - chemical_reactions_list[C.id] = C + GLOB.chemical_reactions_list[C.id] = C C.add_to_filtered_list() return C //Returns false if a property has been generated in a previous reagent and all properties of that category haven't been generated yet. /datum/reagent/proc/check_generated_properties(datum/chem_property/P) - if(LAZYISIN(chemical_properties_list["positive"], P)) - if(LAZYISIN(GLOB.generated_properties["positive"], P) && LAZYLEN(GLOB.generated_properties["positive"]) < LAZYLEN(chemical_properties_list["positive"])) + if(LAZYISIN(GLOB.chemical_properties_list["positive"], P)) + if(LAZYISIN(GLOB.generated_properties["positive"], P) && LAZYLEN(GLOB.generated_properties["positive"]) < LAZYLEN(GLOB.chemical_properties_list["positive"])) return FALSE GLOB.generated_properties["positive"] += P - else if(LAZYISIN(chemical_properties_list["negative"], P)) - if(LAZYISIN(GLOB.generated_properties["negative"], P) && LAZYLEN(GLOB.generated_properties["negative"]) < LAZYLEN(chemical_properties_list["negative"])) + else if(LAZYISIN(GLOB.chemical_properties_list["negative"], P)) + if(LAZYISIN(GLOB.generated_properties["negative"], P) && LAZYLEN(GLOB.generated_properties["negative"]) < LAZYLEN(GLOB.chemical_properties_list["negative"])) return FALSE GLOB.generated_properties["negative"] += P - else if(LAZYISIN(chemical_properties_list["neutral"], P)) - if(LAZYISIN(GLOB.generated_properties["neutral"], P) && LAZYLEN(GLOB.generated_properties["neutral"]) < LAZYLEN(chemical_properties_list["neutral"])) + else if(LAZYISIN(GLOB.chemical_properties_list["neutral"], P)) + if(LAZYISIN(GLOB.generated_properties["neutral"], P) && LAZYLEN(GLOB.generated_properties["neutral"]) < LAZYLEN(GLOB.chemical_properties_list["neutral"])) return FALSE GLOB.generated_properties["neutral"] += P return TRUE diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index 2c08e9f4e693..dcb949424bdf 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -25,7 +25,7 @@ maximum_volume = maximum #ifdef UNIT_TESTS - if(!chemical_reagents_list || !chemical_reactions_filtered_list || !chemical_properties_list) + if(!GLOB.chemical_reagents_list || !GLOB.chemical_reactions_filtered_list || !GLOB.chemical_properties_list) CRASH("Chemistry reagents are not set up!") #endif @@ -240,7 +240,7 @@ O.volume += R.volume qdel(R) break - for(var/reaction in chemical_reactions_filtered_list[R.id]) // Was a big list but now it should be smaller since we filtered it with our reagent id + for(var/reaction in GLOB.chemical_reactions_filtered_list[R.id]) // Was a big list but now it should be smaller since we filtered it with our reagent id if(!reaction) continue @@ -417,10 +417,10 @@ handle_reactions() return FALSE - var/datum/reagent/D = chemical_reagents_list[reagent] + var/datum/reagent/D = GLOB.chemical_reagents_list[reagent] if(D) if(!istype(D, /datum/reagent)) - CRASH("Not REAGENT - [reagent] - chemical_reagents_list[reagent]") + CRASH("Not REAGENT - [reagent] - GLOB.chemical_reagents_list[reagent]") var/datum/reagent/R = new D.type() if(D.type == /datum/reagent/generated) diff --git a/code/modules/reagents/Chemistry-Reactions.dm b/code/modules/reagents/Chemistry-Reactions.dm index 1d9c03f9e923..7a8f0b21158a 100644 --- a/code/modules/reagents/Chemistry-Reactions.dm +++ b/code/modules/reagents/Chemistry-Reactions.dm @@ -22,15 +22,15 @@ /datum/chemical_reaction/proc/add_to_filtered_list(reset = FALSE) if(reset) - for(var/R in chemical_reactions_filtered_list) - LAZYREMOVE(chemical_reactions_filtered_list[R], src) + for(var/R in GLOB.chemical_reactions_filtered_list) + LAZYREMOVE(GLOB.chemical_reactions_filtered_list[R], src) for(var/R in required_reagents) - LAZYADD(chemical_reactions_filtered_list[R], src) + LAZYADD(GLOB.chemical_reactions_filtered_list[R], src) /datum/chemical_reaction/proc/check_duplicate() for(var/R in required_reagents) - if(chemical_reactions_filtered_list[R]) - for(var/reaction in chemical_reactions_filtered_list[R])//We filter the chemical_reactions_filtered_list so we don't have to search through as much + if(GLOB.chemical_reactions_filtered_list[R]) + for(var/reaction in GLOB.chemical_reactions_filtered_list[R])//We filter the GLOB.chemical_reactions_filtered_list so we don't have to search through as much var/datum/chemical_reaction/C = reaction var/matches = 0 for(var/B in required_reagents) @@ -43,7 +43,7 @@ // To prevent such a situation, if ALL reagent inside a reaction are medical chemicals, the recipe is considered flawed. /datum/chemical_reaction/proc/check_reaction_uses_all_default_medical() for(var/R in required_reagents) - var/datum/reagent/M = chemical_reagents_list[R] + var/datum/reagent/M = GLOB.chemical_reagents_list[R] if(!(initial(M.flags) & REAGENT_TYPE_MEDICAL)) return FALSE return TRUE diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 7f659c54c40d..6d36765146ed 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -267,37 +267,37 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent()) if(chemclass && !(flags & REAGENT_NO_GENERATION)) switch(chemclass) if(CHEM_CLASS_BASIC) - chemical_gen_classes_list["C1"] += id + GLOB.chemical_gen_classes_list["C1"] += id if(CHEM_CLASS_COMMON) - chemical_gen_classes_list["C2"] += id + GLOB.chemical_gen_classes_list["C2"] += id if(CHEM_CLASS_UNCOMMON) - chemical_gen_classes_list["C3"] += id + GLOB.chemical_gen_classes_list["C3"] += id if(CHEM_CLASS_RARE) - chemical_gen_classes_list["C4"] += id + GLOB.chemical_gen_classes_list["C4"] += id if(CHEM_CLASS_SPECIAL) - chemical_gen_classes_list["C5"] += id - chemical_data.add_chemical_objective(src) + GLOB.chemical_gen_classes_list["C5"] += id + GLOB.chemical_data.add_chemical_objective(src) if(CHEM_CLASS_ULTRA) - chemical_gen_classes_list["C6"] += id - chemical_data.add_chemical_objective(src) - chemical_gen_classes_list["C"] += id + GLOB.chemical_gen_classes_list["C6"] += id + GLOB.chemical_data.add_chemical_objective(src) + GLOB.chemical_gen_classes_list["C"] += id if(gen_tier) switch(gen_tier) if(1) - chemical_gen_classes_list["T1"] += id + GLOB.chemical_gen_classes_list["T1"] += id if(2) - chemical_gen_classes_list["T2"] += id + GLOB.chemical_gen_classes_list["T2"] += id if(3) - chemical_gen_classes_list["T3"] += id + GLOB.chemical_gen_classes_list["T3"] += id if(4) - chemical_gen_classes_list["T4"] += id + GLOB.chemical_gen_classes_list["T4"] += id if(5) - chemical_gen_classes_list["T5"] += id + GLOB.chemical_gen_classes_list["T5"] += id /datum/reagent/proc/properties_to_datums() #ifdef UNIT_TESTS - if(!chemical_properties_list) + if(!GLOB.chemical_properties_list) CRASH("Chemistry reagents are not set up!") #endif @@ -306,7 +306,7 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent()) if(istype(prop, /datum/chem_property)) new_properties += prop continue - var/datum/chem_property/chem = chemical_properties_list[prop] + var/datum/chem_property/chem = GLOB.chemical_properties_list[prop] if(chem) chem = new chem.type() chem.level = properties[prop] diff --git a/code/modules/reagents/chemical_research/Chemical-Research.dm b/code/modules/reagents/chemical_research/Chemical-Research.dm index 0b1152154dc3..e66cb474df50 100644 --- a/code/modules/reagents/chemical_research/Chemical-Research.dm +++ b/code/modules/reagents/chemical_research/Chemical-Research.dm @@ -1,4 +1,4 @@ -var/global/datum/chemical_data/chemical_data = new /datum/chemical_data +GLOBAL_DATUM_INIT(chemical_data, /datum/chemical_data, new) /datum/chemical_data var/rsc_credits = 0 @@ -38,7 +38,7 @@ var/global/datum/chemical_data/chemical_data = new /datum/chemical_data /datum/chemical_data/proc/get_report(doc_type, doc_title) var/obj/item/paper/research_report/report = null - for(var/document_data in chemical_data.research_documents[doc_type]) + for(var/document_data in GLOB.chemical_data.research_documents[doc_type]) if(document_data["document_title"] == doc_title) report = document_data["document"] break @@ -92,7 +92,7 @@ var/global/datum/chemical_data/chemical_data = new /datum/chemical_data if(LAZYLEN(property_names)) has_new_properties = TRUE for(var/name in property_names) - var/datum/chem_property/ref = chemical_properties_list[name] + var/datum/chem_property/ref = GLOB.chemical_properties_list[name] var/datum/chem_property/P = new ref.type P.level = 0 research_property_data += P @@ -146,7 +146,7 @@ var/global/datum/chemical_data/chemical_data = new /datum/chemical_data chemical_not_completed_objective_list[chem.id] = chem.objective_value /datum/chemical_data/proc/get_tgui_data(chemid) - var/datum/reagent/chem = chemical_reagents_list[chemid] + var/datum/reagent/chem = GLOB.chemical_reagents_list[chemid] if(!chem) error("Invalid chemid [chemid]") return diff --git a/code/modules/reagents/chemical_research/generated_reagents.dm b/code/modules/reagents/chemical_research/generated_reagents.dm index 6eaa664b6d7e..a21d74e26f8a 100644 --- a/code/modules/reagents/chemical_research/generated_reagents.dm +++ b/code/modules/reagents/chemical_research/generated_reagents.dm @@ -16,21 +16,21 @@ //Generate stats if(!id) //So we can initiate a new datum without generating it return - if(!chemical_reagents_list[id]) + if(!GLOB.chemical_reagents_list[id]) generate_name() generate_stats() - chemical_reagents_list[id] = src - make_alike(chemical_reagents_list[id]) + GLOB.chemical_reagents_list[id] = src + make_alike(GLOB.chemical_reagents_list[id]) recalculate_variables() /datum/chemical_reaction/generated/New() //Generate recipe if(!id) //So we can initiate a new datum without generating it return - if(!chemical_reactions_list[id]) + if(!GLOB.chemical_reactions_list[id]) generate_recipe() - chemical_reactions_list[id] = src - make_alike(chemical_reactions_list[id]) + GLOB.chemical_reactions_list[id] = src + make_alike(GLOB.chemical_reactions_list[id]) /////////Tier 1 /datum/chemical_reaction/generated/alpha diff --git a/code/modules/reagents/chemistry_machinery/chem_dispenser.dm b/code/modules/reagents/chemistry_machinery/chem_dispenser.dm index 6778bdd3c72b..85ed21543127 100644 --- a/code/modules/reagents/chemistry_machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry_machinery/chem_dispenser.dm @@ -59,7 +59,7 @@ /obj/structure/machinery/chem_dispenser/process() if(!chem_storage) - chem_storage = chemical_data.connect_chem_storage(network) + chem_storage = GLOB.chemical_data.connect_chem_storage(network) /obj/structure/machinery/chem_dispenser/Initialize() . = ..() @@ -68,7 +68,7 @@ /obj/structure/machinery/chem_dispenser/Destroy() if(!chem_storage) - chem_storage = chemical_data.disconnect_chem_storage(network) + chem_storage = GLOB.chemical_data.disconnect_chem_storage(network) return ..() /obj/structure/machinery/chem_dispenser/ex_act(severity) @@ -155,7 +155,7 @@ var/list/chemicals = list() for(var/re in dispensable_reagents) - var/datum/reagent/temp = chemical_reagents_list[re] + var/datum/reagent/temp = GLOB.chemical_reagents_list[re] if(temp) var/chemname = temp.name chemicals.Add(list(list("title" = chemname, "id" = temp.id))) diff --git a/code/modules/reagents/chemistry_machinery/chem_simulator.dm b/code/modules/reagents/chemistry_machinery/chem_simulator.dm index 2c8602b0dab7..1debbc56b495 100644 --- a/code/modules/reagents/chemistry_machinery/chem_simulator.dm +++ b/code/modules/reagents/chemistry_machinery/chem_simulator.dm @@ -62,7 +62,7 @@ ..() if(inoperable()) icon_state = "modifier_off" - nanomanager.update_uis(src) // update all UIs attached to src + SSnano.nanomanager.update_uis(src) // update all UIs attached to src /obj/structure/machinery/chem_simulator/attackby(obj/item/B, mob/living/user) if(!skillcheck(user, SKILL_RESEARCH, SKILL_RESEARCH_TRAINED)) @@ -93,7 +93,7 @@ to_chat(user, SPAN_NOTICE("You insert [B] into the [src].")) flick("[icon_state]_reading",src) update_costs() - nanomanager.update_uis(src) // update all UIs attached to src + SSnano.nanomanager.update_uis(src) // update all UIs attached to src /obj/structure/machinery/chem_simulator/attack_hand(mob/user as mob) if(inoperable()) @@ -105,7 +105,7 @@ /obj/structure/machinery/chem_simulator/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) var/list/data = list( - "rsc_credits" = chemical_data.rsc_credits, + "rsc_credits" = GLOB.chemical_data.rsc_credits, "target" = target, "reference" = reference, "mode" = mode, @@ -122,7 +122,7 @@ if(simulating == SIMULATION_STAGE_FINAL) for(var/reagent_id in recipe_targets) - var/datum/reagent/R = chemical_reagents_list[reagent_id] + var/datum/reagent/R = GLOB.chemical_reagents_list[reagent_id] var/list/id_name[0] id_name["[R.id]"] = R.name data["recipe_targets"] += id_name @@ -134,7 +134,7 @@ //List of all available properties data["property_data_list"] = list() - for(var/datum/chem_property/P in chemical_data.research_property_data) + for(var/datum/chem_property/P in GLOB.chemical_data.research_property_data) data["property_codings"][P.name] = P.code if(template_filter && !check_bitflag(P.category, template_filter)) continue @@ -182,7 +182,7 @@ else data["reference_info"] = "" - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = SSnano.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "chem_simulator.tmpl", "Synthesis Simulator", 800, 550) ui.set_initial_data(data) @@ -198,7 +198,7 @@ if(user.stat || user.is_mob_restrained() || !in_range(src, user)) return - if(mode == MODE_CREATE && chemical_data.has_new_properties) + if(mode == MODE_CREATE && GLOB.chemical_data.has_new_properties) update_costs() if(href_list["simulate"] && ready) @@ -252,7 +252,7 @@ return if(mode == MODE_CREATE) var/target_name = href_list["set_target"] - for(var/datum/chem_property/P in chemical_data.research_property_data) + for(var/datum/chem_property/P in GLOB.chemical_data.research_property_data) if(P.name == target_name) if(target_property && target_property.name == target_name) //Toggle the property @@ -294,15 +294,15 @@ newname = reject_bad_name(newname, TRUE, 20, FALSE) if(isnull(newname)) to_chat(user, "Bad name.") - else if(chemical_reagents_list[newname]) + else if(GLOB.chemical_reagents_list[newname]) to_chat(user, "Name already taken.") else creation_name = newname else if(href_list["set_level"] && target_property) var/level_to_set = 1 - if(chemical_data.clearance_level <= 2) + if(GLOB.chemical_data.clearance_level <= 2) level_to_set = tgui_input_list(usr, "Set target level for [target_property.name]:","[src]", list(1,2,3,4)) - else if(chemical_data.clearance_level <= 4) + else if(GLOB.chemical_data.clearance_level <= 4) level_to_set = tgui_input_list(usr, "Set target level for [target_property.name]:","[src]", list(1,2,3,4,5,6,7,8)) else level_to_set = tgui_input_list(usr, "Set target level for [target_property.name]:","[src]", list(1,2,3,4,5,6,7,8,9,10)) @@ -350,7 +350,7 @@ calculate_creation_cost() ready = check_ready() playsound(loc, pick('sound/machines/computer_typing1.ogg','sound/machines/computer_typing2.ogg','sound/machines/computer_typing3.ogg'), 5, 1) - nanomanager.update_uis(src) + SSnano.nanomanager.update_uis(src) /obj/structure/machinery/chem_simulator/process() if(inoperable()) @@ -384,7 +384,7 @@ C.name = C.id if(C.id in simulations) //We've already simulated this before, so we don't need to continue - C = chemical_reagents_list[C.id] + C = GLOB.chemical_reagents_list[C.id] print(C.id) status_bar = "SIMULATION COMPLETE" simulating = SIMULATION_STAGE_OFF @@ -398,13 +398,13 @@ else ready = check_ready() stop_processing() - nanomanager.update_uis(src) + SSnano.nanomanager.update_uis(src) /obj/structure/machinery/chem_simulator/proc/update_costs() property_costs = list() var/only_positive = TRUE if(mode == MODE_CREATE) - for(var/datum/chem_property/P in chemical_data.research_property_data) + for(var/datum/chem_property/P in GLOB.chemical_data.research_property_data) property_costs[P.name] = max(abs(P.value), 1) else if(target && target.data && target.completed) for(var/datum/chem_property/P in target.data.properties) @@ -431,7 +431,7 @@ if(only_positive) for(var/P in property_costs) property_costs[P] = property_costs[P] + 1 - chemical_data.has_new_properties = FALSE + GLOB.chemical_data.has_new_properties = FALSE //Here the cost for creating a chemical is calculated. If you're looking to rebalance create mode, this is where you do it /obj/structure/machinery/chem_simulator/proc/calculate_creation_cost() @@ -468,7 +468,7 @@ new_od_level = max(new_od_level - 5, 5) /obj/structure/machinery/chem_simulator/proc/prepare_recipe_options() - var/datum/chemical_reaction/generated/O = chemical_reactions_list[target.data.id] + var/datum/chemical_reaction/generated/O = GLOB.chemical_reactions_list[target.data.id] if(!O) //If it doesn't have a recipe, go immediately to finalizing, which will then generate a new associated recipe return FALSE recipe_targets = list() //reset @@ -481,7 +481,7 @@ if(LAZYLEN(R.required_reagents) > 2) LAZYREMOVE(R.required_reagents, pick(R.required_reagents)) var/new_component_id = R.add_component(tier = max(min(target.data.chemclass, CHEM_CLASS_COMMON), target.data.gen_tier, 1)) - var/datum/reagent/new_component = chemical_reagents_list[new_component_id] + var/datum/reagent/new_component = GLOB.chemical_reagents_list[new_component_id] //Make sure we don't have an identical reaction and that the component is identified if(R.check_duplicate() || R.check_reaction_uses_all_default_medical() || new_component.chemclass >= CHEM_CLASS_SPECIAL) R.required_reagents = old_reaction.Copy() @@ -512,27 +512,27 @@ status_bar = "TARGET CAN NOT BE ALTERED" return FALSE //Safety check in case of irregular papers - var/datum/chemical_reaction/C = chemical_reactions_list[target.data.id] + var/datum/chemical_reaction/C = GLOB.chemical_reactions_list[target.data.id] if(C) for(var/component in C.required_reagents) - var/datum/reagent/R = chemical_reagents_list[component] - if(R && R.chemclass >= CHEM_CLASS_SPECIAL && !chemical_data.chemical_identified_list[R.id]) + var/datum/reagent/R = GLOB.chemical_reagents_list[component] + if(R && R.chemclass >= CHEM_CLASS_SPECIAL && !GLOB.chemical_data.chemical_identified_list[R.id]) status_bar = "UNREGISTERED COMPONENTS DETECTED" return FALSE for(var/catalyst in C.required_catalysts) - var/datum/reagent/R = chemical_reagents_list[catalyst] - if(R && R.chemclass >= CHEM_CLASS_SPECIAL && !chemical_data.chemical_identified_list[R.id]) + var/datum/reagent/R = GLOB.chemical_reagents_list[catalyst] + if(R && R.chemclass >= CHEM_CLASS_SPECIAL && !GLOB.chemical_data.chemical_identified_list[R.id]) status_bar = "UNREGISTERED CATALYSTS DETECTED" return FALSE if(target_property) - if(property_costs[target_property.name] > chemical_data.rsc_credits) + if(property_costs[target_property.name] > GLOB.chemical_data.rsc_credits) status_bar = "INSUFFICIENT FUNDS" return FALSE if(target_property.category & PROPERTY_TYPE_UNADJUSTABLE) status_bar = "TARGET PROPERTY CAN NOT BE SIMULATED" return FALSE if(mode == MODE_AMPLIFY) - if(target_property.level >= chemical_data.clearance_level*TECHTREE_LEVEL_MULTIPLIER + 2 && chemical_data.clearance_level < 5) + if(target_property.level >= GLOB.chemical_data.clearance_level*TECHTREE_LEVEL_MULTIPLIER + 2 && GLOB.chemical_data.clearance_level < 5) status_bar = "CLEARANCE INSUFFICIENT FOR AMPLIFICATION" return FALSE if(target && length(target.data.properties) < 2) @@ -560,7 +560,7 @@ if(LAZYLEN(creation_name) < 2) status_bar = "NAME NOT SET" return FALSE - if(creation_cost > chemical_data.rsc_credits) + if(creation_cost > GLOB.chemical_data.rsc_credits) status_bar = "INSUFFICIENT FUNDS" return FALSE else if(!target) @@ -575,18 +575,18 @@ flick("[icon_state]_printing",src) sleep(10) var/obj/item/paper/research_report/report = new /obj/item/paper/research_report/(loc) - var/datum/reagent/D = chemical_reagents_list[id] + var/datum/reagent/D = GLOB.chemical_reagents_list[id] var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) report.name = "Simulation result for [D.name]" report.info += "

    Official Company Document
    Simulated Synthesis Report

    Result for [D.name]

    " report.generate(D) - report.info += "

    This report was automatically printed by the Synthesis Simulator.
    The [MAIN_SHIP_NAME], [time2text(world.timeofday, "MM/DD")]/[game_year], [worldtime2text()]

    \n" + report.info += "

    This report was automatically printed by the Synthesis Simulator.
    The [MAIN_SHIP_NAME], [time2text(world.timeofday, "MM/DD")]/[GLOB.game_year], [worldtime2text()]

    \n" playsound(loc, 'sound/machines/twobeep.ogg', 15, 1) if(is_new) - chemical_data.save_document(report, "Synthesis Simulations", report.name) + GLOB.chemical_data.save_document(report, "Synthesis Simulations", report.name) /obj/structure/machinery/chem_simulator/proc/encode_reagent(datum/reagent/C) - var/datum/reagent/O = chemical_reagents_list[C.original_id] //So make the new name based on the Original + var/datum/reagent/O = GLOB.chemical_reagents_list[C.original_id] //So make the new name based on the Original var/suffix = " " for(var/datum/chem_property/P in C.properties) suffix += P.code+"[P.level]" @@ -661,7 +661,7 @@ R.gen_tier = C.gen_tier if(mode != MODE_CREATE) - assoc_R = chemical_reactions_list[target.data.id] + assoc_R = GLOB.chemical_reactions_list[target.data.id] if(!assoc_R) //no associated recipe found if(mode == MODE_CREATE) assoc_R = C.generate_assoc_recipe(creation_complexity) @@ -690,25 +690,25 @@ //Pay if(mode == MODE_CREATE) - chemical_data.update_credits(creation_cost * -1) + GLOB.chemical_data.update_credits(creation_cost * -1) else - chemical_data.update_credits(property_costs[target_property.name] * -1) + GLOB.chemical_data.update_credits(property_costs[target_property.name] * -1) //Refund 1 credit if a rare or rarer target was added - var/datum/reagent/component = chemical_reagents_list[recipe_target] + var/datum/reagent/component = GLOB.chemical_reagents_list[recipe_target] if(component && component.chemclass >= CHEM_CLASS_RARE) - chemical_data.update_credits(1) + GLOB.chemical_data.update_credits(1) //Save the reagent C.generate_description() C.chemclass = CHEM_CLASS_RARE //So that we can always scan this in the future, don't generate defcon, and don't get a loop of making credits - chemical_reagents_list[C.id] = C + GLOB.chemical_reagents_list[C.id] = C LAZYADD(simulations, C.id) //Remember we've simulated this //Save the reaction R.id = C.id R.result = C.id - chemical_reactions_list[R.id] = R + GLOB.chemical_reactions_list[R.id] = R R.add_to_filtered_list() status_bar = "SIMULATION COMPLETE" print(C.id, TRUE) diff --git a/code/modules/reagents/chemistry_machinery/chem_storage.dm b/code/modules/reagents/chemistry_machinery/chem_storage.dm index 3a05201dea25..692daef7864f 100644 --- a/code/modules/reagents/chemistry_machinery/chem_storage.dm +++ b/code/modules/reagents/chemistry_machinery/chem_storage.dm @@ -31,11 +31,11 @@ /obj/structure/machinery/chem_storage/Initialize() . = ..() - chemical_data.add_chem_storage(src) + GLOB.chemical_data.add_chem_storage(src) start_processing() /obj/structure/machinery/chem_storage/Destroy() - chemical_data.remove_chem_storage(src) + GLOB.chemical_data.remove_chem_storage(src) return ..() /obj/structure/machinery/chem_storage/get_examine_text(mob/user) diff --git a/code/modules/reagents/chemistry_machinery/pandemic.dm b/code/modules/reagents/chemistry_machinery/pandemic.dm index c9e34f79609e..5cd7f6584705 100644 --- a/code/modules/reagents/chemistry_machinery/pandemic.dm +++ b/code/modules/reagents/chemistry_machinery/pandemic.dm @@ -59,10 +59,10 @@ if(B) var/datum/disease/D = null if(!vaccine_type) - D = archive_diseases[path] + D = GLOB.archive_diseases[path] vaccine_type = path else - if(vaccine_type in diseases) + if(vaccine_type in GLOB.diseases) D = new vaccine_type(0, null) if(D) @@ -90,11 +90,11 @@ B.icon_state = "bottle3" var/datum/disease/D = null if(!virus_type) - var/datum/disease/advance/A = archive_diseases[href_list["create_virus_culture"]] + var/datum/disease/advance/A = GLOB.archive_diseases[href_list["create_virus_culture"]] if(A) D = new A.type(0, A) else - if(virus_type in diseases) // Make sure this is a disease + if(virus_type in GLOB.diseases) // Make sure this is a disease D = new virus_type(0, null) var/list/data = list("viruses"=list(D)) var/name = strip_html(input(user,"Name:","Name the culture",D.name)) @@ -129,8 +129,8 @@ if(user.stat || user.is_mob_restrained()) return if(!in_range(src, user)) return var/id = href_list["name_disease"] - if(archive_diseases[id]) - var/datum/disease/advance/A = archive_diseases[id] + if(GLOB.archive_diseases[id]) + var/datum/disease/advance/A = GLOB.archive_diseases[id] A.AssignName(new_name) for(var/datum/disease/advance/AD in SSdisease.all_diseases) AD.Refresh() @@ -184,7 +184,7 @@ if(istype(D, /datum/disease/advance)) var/datum/disease/advance/A = D - D = archive_diseases[A.GetDiseaseID()] + D = GLOB.archive_diseases[A.GetDiseaseID()] disease_creation = A.GetDiseaseID() if(D.name == "Unknown") dat += "Name Disease
    " @@ -216,7 +216,7 @@ var/disease_name = "Unknown" if(!ispath(type)) - var/datum/disease/advance/A = archive_diseases[type] + var/datum/disease/advance/A = GLOB.archive_diseases[type] if(A) disease_name = A.name else diff --git a/code/modules/reagents/chemistry_machinery/reagent_analyzer.dm b/code/modules/reagents/chemistry_machinery/reagent_analyzer.dm index dc1f72ec41c7..de059de46436 100644 --- a/code/modules/reagents/chemistry_machinery/reagent_analyzer.dm +++ b/code/modules/reagents/chemistry_machinery/reagent_analyzer.dm @@ -89,27 +89,27 @@ var/datum/reagent/S = sample.reagents.reagent_list[1] S.print_report(report = report, sample_number = sample_number) sample.name = "vial ([S.name])" - chemical_data.save_document(report, "XRF Scans", "[sample_number] - [report.name]") + GLOB.chemical_data.save_document(report, "XRF Scans", "[sample_number] - [report.name]") if(S.chemclass < CHEM_CLASS_SPECIAL || (S.chemclass >= CHEM_CLASS_SPECIAL && report.completed)) - chemical_data.save_new_properties(S.properties) - if(S.chemclass >= CHEM_CLASS_SPECIAL && !chemical_data.chemical_identified_list[S.id]) + GLOB.chemical_data.save_new_properties(S.properties) + if(S.chemclass >= CHEM_CLASS_SPECIAL && !GLOB.chemical_data.chemical_identified_list[S.id]) if(last_used) last_used.count_niche_stat(STATISTICS_NICHE_CHEMS) var/datum/chem_property/P = S.get_property(PROPERTY_DNA_DISINTEGRATING) if(P) - if(chemical_data.clearance_level >= S.gen_tier) + if(GLOB.chemical_data.clearance_level >= S.gen_tier) P.trigger() else return - chemical_data.complete_chemical(S) + GLOB.chemical_data.complete_chemical(S) else var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) report.name = "Analysis of ERROR" report.info += "

    Official Weyland-Yutani Document
    Reagent Analysis Print

    Analysis ERROR

    " report.info += "Result:
    Analysis failed for sample #[sample_number].

    \n" report.info += "Reason for error:
    [reason]
    \n" - report.info += "

    This report was automatically printed by the A-XRF Scanner.
    The [MAIN_SHIP_NAME], [time2text(world.timeofday, "MM/DD")]/[game_year], [worldtime2text()]

    \n" + report.info += "

    This report was automatically printed by the A-XRF Scanner.
    The [MAIN_SHIP_NAME], [time2text(world.timeofday, "MM/DD")]/[GLOB.game_year], [worldtime2text()]

    \n" /datum/reagent/proc/print_report(turf/loc, obj/item/paper/research_report/report, admin_spawned = FALSE, sample_number = 0) if(!report) diff --git a/code/modules/reagents/chemistry_properties/prop_neutral.dm b/code/modules/reagents/chemistry_properties/prop_neutral.dm index b3ec6620fb04..3048b12ee296 100644 --- a/code/modules/reagents/chemistry_properties/prop_neutral.dm +++ b/code/modules/reagents/chemistry_properties/prop_neutral.dm @@ -199,9 +199,8 @@ M.druggy = min(M.druggy + 0.5 * potency * delta_time, potency * 10) /datum/chem_property/neutral/hallucinogenic/process_overdose(mob/living/M, potency = 1, delta_time) - // Disabled automove because it's antiquated and won't work properly. Use Move() for this probably - //if(isturf(M.loc) && !istype(M.loc, /turf/open/space) && M.canmove && !M.is_mob_restrained()) - // step(M, pick(cardinal)) + if(isturf(M.loc) && !istype(M.loc, /turf/open/space) && (M.mobility_flags & MOBILITY_MOVE) && !M.is_mob_restrained()) + step(M, pick(GLOB.cardinals)) M.hallucination += 10 M.make_jittery(5) diff --git a/code/modules/reagents/chemistry_properties/prop_special.dm b/code/modules/reagents/chemistry_properties/prop_special.dm index cec04ca66616..52354f0d6b01 100644 --- a/code/modules/reagents/chemistry_properties/prop_special.dm +++ b/code/modules/reagents/chemistry_properties/prop_special.dm @@ -97,7 +97,7 @@ /datum/chem_property/special/DNA_Disintegrating/trigger() SSticker.mode.get_specific_call("Weyland-Yutani Goon (Chemical Investigation Squad)", TRUE, FALSE, holder.name) - chemical_data.update_credits(10) + GLOB.chemical_data.update_credits(10) message_admins("The research department has discovered DNA_Disintegrating in [holder.name] adding 10 bonus tech points.") var/datum/techtree/tree = GET_TREE(TREE_MARINE) tree.add_points(10) diff --git a/code/modules/reagents/chemistry_reagents/drink.dm b/code/modules/reagents/chemistry_reagents/drink.dm index 66ce0844556b..9739687dec20 100644 --- a/code/modules/reagents/chemistry_reagents/drink.dm +++ b/code/modules/reagents/chemistry_reagents/drink.dm @@ -555,8 +555,7 @@ /datum/reagent/neurotoxin/on_mob_life(mob/living/carbon/M) . = ..() if(!.) return - if(!HAS_TRAIT(src, TRAIT_FLOORED)) - M.apply_effect(5, WEAKEN) + M.KnockDown(5) if(!data) data = 1 data++ M.dizziness +=6 diff --git a/code/modules/reagents/chemistry_reagents/toxin.dm b/code/modules/reagents/chemistry_reagents/toxin.dm index d9be565a85b2..445918ef284d 100644 --- a/code/modules/reagents/chemistry_reagents/toxin.dm +++ b/code/modules/reagents/chemistry_reagents/toxin.dm @@ -115,7 +115,8 @@ M.status_flags |= FAKEDEATH ADD_TRAIT(M, TRAIT_IMMOBILIZED, FAKEDEATH_TRAIT) M.apply_damage(0.5*REM, OXY) - M.apply_effect(2, WEAKEN) + M.KnockDown(2) + M.Stun(2) M.silent = max(M.silent, 10) /datum/reagent/toxin/zombiepowder/on_delete() diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 429f56003286..4c60a9e345e0 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -197,7 +197,7 @@ /obj/structure/machinery/conveyor_switch/LateInitialize() . = ..() conveyors = list() - for(var/obj/structure/machinery/conveyor/C in machines) + for(var/obj/structure/machinery/conveyor/C in GLOB.machines) if(C.id == id) conveyors += C start_processing() @@ -246,7 +246,7 @@ update() // find any switches with same id as this one, and set their positions to match us - for(var/obj/structure/machinery/conveyor_switch/S in machines) + for(var/obj/structure/machinery/conveyor_switch/S in GLOB.machines) if(S.id == src.id) S.position = position S.update() @@ -266,7 +266,7 @@ update() // find any switches with same id as this one, and set their positions to match us - for(var/obj/structure/machinery/conveyor_switch/S in machines) + for(var/obj/structure/machinery/conveyor_switch/S in GLOB.machines) if(S.id == src.id) S.position = position S.update() diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 9f0d37e00bc6..1522f0100c4e 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -221,7 +221,7 @@ update() ///Attempt to move while inside -/obj/structure/machinery/disposal/relaymove(mob/user) +/obj/structure/machinery/disposal/relaymove(mob/living/user) if(user.is_mob_incapacitated(TRUE) || flushing) return FALSE if(user.loc == src) @@ -744,7 +744,7 @@ //Remains : set to leave broken pipe pieces in place /obj/structure/disposalpipe/deconstruct(disassembled = TRUE) if(disassembled) - for(var/D in cardinal) + for(var/D in GLOB.cardinals) if(D & dpdir) var/obj/structure/disposalpipe/broken/P = new(loc) P.setDir(D) @@ -1094,7 +1094,8 @@ /obj/structure/disposalpipe/tagger/Initialize(mapload, ...) . = ..() dpdir = dir|turn(dir, 180) - if(sort_tag) tagger_locations |= sort_tag + if(sort_tag) + GLOB.tagger_locations |= sort_tag updatename() updatedesc() update() @@ -1150,7 +1151,8 @@ /obj/structure/disposalpipe/sortjunction/Initialize(mapload, ...) . = ..() - if(sortType) tagger_locations |= sortType + if(sortType) + GLOB.tagger_locations |= sortType updatedir() updatename() @@ -1455,7 +1457,7 @@ if(direction) dirs = list( direction, turn(direction, -45), turn(direction, 45)) else - dirs = alldirs.Copy() + dirs = GLOB.alldirs.Copy() INVOKE_ASYNC(streak(dirs)) @@ -1464,7 +1466,7 @@ if(direction) dirs = list( direction, turn(direction, -45), turn(direction, 45)) else - dirs = alldirs.Copy() + dirs = GLOB.alldirs.Copy() INVOKE_ASYNC(streak(dirs)) diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index e8ac568140bc..ec1c8c245f2b 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -337,8 +337,8 @@ var/dat = "

    TagMaster 2.3

    " dat += "

    " - for(var/i = 1, i <= tagger_locations.len, i++) - dat += "" + for(var/i = 1, i <= GLOB.tagger_locations.len, i++) + dat += "" if (i%4==0) dat += "" @@ -357,7 +357,7 @@ if(.) return src.add_fingerprint(usr) - if(href_list["nextTag"] && (href_list["nextTag"] in tagger_locations)) + if(href_list["nextTag"] && (href_list["nextTag"] in GLOB.tagger_locations)) src.currTag = href_list["nextTag"] openwindow(usr) diff --git a/code/modules/round_recording/round_recorder.dm b/code/modules/round_recording/round_recorder.dm index 677b32bba1d2..8748b995aa6c 100644 --- a/code/modules/round_recording/round_recorder.dm +++ b/code/modules/round_recording/round_recorder.dm @@ -31,8 +31,8 @@ game_start = time2text(world.realtime, "DD.MM.YYYY@hh:mm:ss") map = SSmapping.configs[GROUND_MAP].map_name - gamemode = master_mode - round_name = round_statistics.name + gamemode = GLOB.master_mode + round_name = GLOB.round_statistics.name // Record the end time of the game and export the game history /datum/round_recorder/proc/end_game() diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm index 9d6d862bfc3c..4b7cdd69a449 100644 --- a/code/modules/security_levels/keycard_authentication.dm +++ b/code/modules/security_levels/keycard_authentication.dm @@ -108,7 +108,7 @@ /obj/structure/machinery/keycard_auth/proc/broadcast_request() icon_state = "auth_on" - for(var/obj/structure/machinery/keycard_auth/KA in machines) + for(var/obj/structure/machinery/keycard_auth/KA in GLOB.machines) if(KA == src || KA.channel != channel) continue KA.reset() INVOKE_ASYNC(KA, TYPE_PROC_REF(/obj/structure/machinery/keycard_auth, receive_request), src) @@ -149,14 +149,14 @@ if(CONFIG_GET(flag/ert_admin_call_only)) return 1 return SSticker.mode && SSticker.mode.ert_disabled -var/global/maint_all_access = 1 +GLOBAL_VAR_INIT(maint_all_access, TRUE) /proc/make_maint_all_access() - maint_all_access = 1 + GLOB.maint_all_access = TRUE ai_announcement("The maintenance access requirement has been removed on all airlocks.") /proc/revoke_maint_all_access() - maint_all_access = 0 + GLOB.maint_all_access = FALSE ai_announcement("The maintenance access requirement has been added on all airlocks.") // Keycard reader at the CORSAT locks @@ -209,7 +209,7 @@ var/global/maint_all_access = 1 /obj/structure/machinery/keycard_auth/lockdown/broadcast_request() icon_state = "auth_on" - for(var/obj/structure/machinery/keycard_auth/lockdown/KA in machines) + for(var/obj/structure/machinery/keycard_auth/lockdown/KA in GLOB.machines) if(KA == src || KA.channel != channel) continue KA.reset() @@ -249,7 +249,7 @@ var/global/maint_all_access = 1 /obj/structure/machinery/keycard_auth/lockdown/proc/timed_countdown(timeleft = 0) if(!timeleft) - for(var/obj/structure/machinery/door/poddoor/M in machines) + for(var/obj/structure/machinery/door/poddoor/M in GLOB.machines) if(M.id == podlock_id && M.density) INVOKE_ASYNC(M, TYPE_PROC_REF(/obj/structure/machinery/door, open)) return diff --git a/code/modules/security_levels/security_levels.dm b/code/modules/security_levels/security_levels.dm index 8221b8771c88..b6577a2fcbfa 100644 --- a/code/modules/security_levels/security_levels.dm +++ b/code/modules/security_levels/security_levels.dm @@ -1,51 +1,44 @@ -/var/security_level = 0 -//0 = code green -//1 = code blue -//2 = code red -//3 = code delta - -//config.alert_desc_blue_downto - +GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN) /proc/set_security_level(level, no_sound = FALSE, announce = TRUE, log = ARES_LOG_SECURITY) - if(level != security_level) + if(level != GLOB.security_level) SEND_GLOBAL_SIGNAL(COMSIG_GLOB_SECURITY_LEVEL_CHANGED, level) //Will not be announced if you try to set to the same level as it already is - if(level >= SEC_LEVEL_GREEN && level <= SEC_LEVEL_DELTA && level != security_level) + if(level >= SEC_LEVEL_GREEN && level <= SEC_LEVEL_DELTA && level != GLOB.security_level) switch(level) if(SEC_LEVEL_GREEN) if(announce) ai_announcement("Attention: Security level lowered to GREEN - all clear.", no_sound ? null : 'sound/AI/code_green.ogg', log) - security_level = SEC_LEVEL_GREEN + GLOB.security_level = SEC_LEVEL_GREEN if(SEC_LEVEL_BLUE) - if(security_level < SEC_LEVEL_BLUE) + if(GLOB.security_level < SEC_LEVEL_BLUE) if(announce) ai_announcement("Attention: Security level elevated to BLUE - potentially hostile activity on board.", no_sound ? null : 'sound/AI/code_blue_elevated.ogg', log) else if(announce) ai_announcement("Attention: Security level lowered to BLUE - potentially hostile activity on board.", no_sound ? null : 'sound/AI/code_blue_lowered.ogg', log) - security_level = SEC_LEVEL_BLUE + GLOB.security_level = SEC_LEVEL_BLUE if(SEC_LEVEL_RED) - if(security_level < SEC_LEVEL_RED) + if(GLOB.security_level < SEC_LEVEL_RED) if(announce) ai_announcement("Attention: Security level elevated to RED - there is an immediate threat to the ship.", no_sound ? null : 'sound/AI/code_red_elevated.ogg', log) else if(announce) ai_announcement("Attention: Security level lowered to RED - there is an immediate threat to the ship.", no_sound ? null : 'sound/AI/code_red_lowered.ogg', log) - security_level = SEC_LEVEL_RED + GLOB.security_level = SEC_LEVEL_RED if(SEC_LEVEL_DELTA) if(announce) var/name = "SELF-DESTRUCT SYSTEMS ACTIVE" var/input = "DANGER, THE EMERGENCY DESTRUCT SYSTEM IS NOW ACTIVATED. PROCEED TO THE SELF-DESTRUCT CHAMBER FOR CONTROL ROD INSERTION." marine_announcement(input, name, 'sound/AI/selfdestruct_short.ogg', logging = log) - security_level = SEC_LEVEL_DELTA + GLOB.security_level = SEC_LEVEL_DELTA /proc/get_security_level() - switch(security_level) + switch(GLOB.security_level) if(SEC_LEVEL_GREEN) return "green" if(SEC_LEVEL_BLUE) diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index 3d0c8fca142d..4d94ae05f8c9 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -281,6 +281,8 @@ icon_state = "terminal" req_access = list() breakable = FALSE + ///If true, the lifeboat is in the process of launching, and so the code will not allow another launch. + var/launch_initiated = FALSE /obj/structure/machinery/computer/shuttle/lifeboat/attack_hand(mob/user) . = ..() @@ -293,23 +295,40 @@ switch(lifeboat.mode) if(SHUTTLE_IDLE) if(!istype(user, /mob/living/carbon/human)) - to_chat(user, SPAN_NOTICE("[src]'s screen says \"Awaiting confirmation of the evacuation order\".")) + to_chat(user, SPAN_NOTICE("[src]'s screen says \"Unauthorized access. Please inform your supervisor\".")) return var/mob/living/carbon/human/human_user = user - if(!(ACCESS_MARINE_COMMAND in human_user.wear_id?.access)) - to_chat(user, SPAN_NOTICE("[src]'s screen says \"Awaiting confirmation of the evacuation order\".")) + if(!(ACCESS_MARINE_SENIOR in human_user.wear_id?.access) && !(ACCESS_MARINE_DROPSHIP in human_user.wear_id?.access)) + to_chat(user, SPAN_NOTICE("[src]'s screen says \"Unauthorized access. Please inform your supervisor\".")) return if(SShijack.current_progress < SShijack.early_launch_required_progress) to_chat(user, SPAN_NOTICE("[src]'s screen says \"Unable to launch, fuel insufficient\".")) return - if(tgui_alert(user, "Early launch the lifeboat?", "Confirm", list("Yes", "No"), 10 SECONDS) == "Yes") - to_chat(user, SPAN_NOTICE("[src]'s screen blinks and says \"Early launch accepted\".")) - lifeboat.evac_launch() + if(launch_initiated) + to_chat(user, SPAN_NOTICE("[src]'s screen blinks and says \"Launch sequence already initiated\".")) return + var/response = tgui_alert(user, "Launch the lifeboat?", "Confirm", list("Yes", "No", "Emergency Launch"), 10 SECONDS) + if(launch_initiated) + to_chat(user, SPAN_NOTICE("[src]'s screen blinks and says \"Launch sequence already initiated\".")) + return + switch(response) + if ("Yes") + launch_initiated = TRUE + to_chat(user, "[src]'s screen blinks and says \"Launch command accepted\".") + shipwide_ai_announcement("Launch command received. [lifeboat.id == MOBILE_SHUTTLE_LIFEBOAT_PORT ? "Port" : "Starboard"] Lifeboat doors will close in 10 seconds.") + addtimer(CALLBACK(lifeboat, TYPE_PROC_REF(/obj/docking_port/mobile/crashable/lifeboat, evac_launch)), 10 SECONDS) + return + if ("Emergency Launch") + launch_initiated = TRUE + to_chat(user, "[src]'s screen blinks and says \"Emergency Launch command accepted\".") + lifeboat.evac_launch() + shipwide_ai_announcement("Emergency Launch command received. Launching [lifeboat.id == MOBILE_SHUTTLE_LIFEBOAT_PORT ? "Port" : "Starboard"] Lifeboat.") + return + if(SHUTTLE_IGNITING) to_chat(user, SPAN_NOTICE("[src]'s screen says \"Engines firing\".")) if(SHUTTLE_CALL) diff --git a/code/modules/shuttle/computers/dropship_computer.dm b/code/modules/shuttle/computers/dropship_computer.dm index 4fe102270537..6774d81e590d 100644 --- a/code/modules/shuttle/computers/dropship_computer.dm +++ b/code/modules/shuttle/computers/dropship_computer.dm @@ -217,9 +217,9 @@ dropship.control_doors("unlock", "all", TRUE) dropship_control_lost = TRUE door_control_cooldown = addtimer(CALLBACK(src, PROC_REF(remove_door_lock)), SHUTTLE_LOCK_COOLDOWN, TIMER_STOPPABLE) - if(almayer_orbital_cannon) - almayer_orbital_cannon.is_disabled = TRUE - addtimer(CALLBACK(almayer_orbital_cannon, TYPE_PROC_REF(/obj/structure/orbital_cannon, enable)), 10 MINUTES, TIMER_UNIQUE) + if(GLOB.almayer_orbital_cannon) + GLOB.almayer_orbital_cannon.is_disabled = TRUE + addtimer(CALLBACK(GLOB.almayer_orbital_cannon, TYPE_PROC_REF(/obj/structure/orbital_cannon, enable)), 10 MINUTES, TIMER_UNIQUE) if(!GLOB.resin_lz_allowed) set_lz_resin_allowed(TRUE) @@ -251,7 +251,7 @@ // select crash location var/turf/source_turf = get_turf(src) var/obj/docking_port/mobile/marine_dropship/dropship = SSshuttle.getShuttle(shuttleId) - var/result = tgui_input_list(user, "Where to 'land'?", "Dropship Hijack", almayer_ship_sections , timeout = 10 SECONDS) + var/result = tgui_input_list(user, "Where to 'land'?", "Dropship Hijack", GLOB.almayer_ship_sections , timeout = 10 SECONDS) if(!result) return if(!user.Adjacent(source_turf) && !force) @@ -270,6 +270,9 @@ hijack.fire() GLOB.alt_ctrl_disabled = TRUE + dropship.alarm_sound_loop.stop() + dropship.playing_launch_announcement_alarm = FALSE + marine_announcement("Unscheduled dropship departure detected from operational area. Hijack likely. Shutting down autopilot.", "Dropship Alert", 'sound/AI/hijack.ogg', logging = ARES_LOG_SECURITY) log_ares_flight("Unknown", "Unscheduled dropship departure detected from operational area. Hijack likely. Shutting down autopilot.") @@ -319,6 +322,9 @@ .["door_status"] = is_remote ? list() : shuttle.get_door_data() .["has_flyby_skill"] = skillcheck(user, SKILL_PILOT, SKILL_PILOT_EXPERT) + // Launch Alarm Variables + .["playing_launch_announcement_alarm"] = shuttle.playing_launch_announcement_alarm + .["destinations"] = list() // add flight .["destinations"] += list( @@ -381,6 +387,7 @@ msg_admin_niche(log) log_interact(user, msg = "[log]") shuttle.send_for_flyby() + stop_playing_launch_announcement_alarm() return TRUE update_equipment(is_optimised, FALSE) @@ -410,6 +417,7 @@ var/log = "[key_name(user)] launched the dropship [src.shuttleId] on transport." msg_admin_niche(log) log_interact(user, msg = "[log]") + stop_playing_launch_announcement_alarm() return TRUE if("button-push") playsound(loc, get_sfx("terminal_button"), KEYBOARD_SOUND_VOLUME, 1) @@ -469,6 +477,23 @@ if("cancel-flyby") if(shuttle.in_flyby && shuttle.timer && shuttle.timeLeft(1) >= DROPSHIP_WARMUP_TIME) shuttle.setTimer(DROPSHIP_WARMUP_TIME) + if("play_launch_announcement_alarm") + if (shuttle.mode != SHUTTLE_IDLE && shuttle.mode != SHUTTLE_RECHARGING) + to_chat(usr, SPAN_WARNING("The Launch Announcement Alarm is designed to tell people that you're going to take off soon.")) + return + shuttle.alarm_sound_loop.start() + shuttle.playing_launch_announcement_alarm = TRUE + return + if ("stop_playing_launch_announcement_alarm") + stop_playing_launch_announcement_alarm() + return + +/obj/structure/machinery/computer/shuttle/dropship/flight/proc/stop_playing_launch_announcement_alarm() + var/obj/docking_port/mobile/marine_dropship/shuttle = SSshuttle.getShuttle(shuttleId) + + shuttle.alarm_sound_loop.stop() + shuttle.playing_launch_announcement_alarm = FALSE + return /obj/structure/machinery/computer/shuttle/dropship/flight/lz1 icon = 'icons/obj/structures/machinery/computer.dmi' diff --git a/code/modules/shuttle/computers/escape_pod_computer.dm b/code/modules/shuttle/computers/escape_pod_computer.dm index eb81a4a98a8a..ec523747e18d 100644 --- a/code/modules/shuttle/computers/escape_pod_computer.dm +++ b/code/modules/shuttle/computers/escape_pod_computer.dm @@ -209,7 +209,6 @@ /obj/structure/machinery/door/airlock/evacuation name = "\improper Evacuation Airlock" icon = 'icons/obj/structures/doors/pod_doors.dmi' - heat_proof = 1 unslashable = TRUE unacidable = TRUE var/obj/docking_port/mobile/crashable/escape_shuttle/linked_shuttle diff --git a/code/modules/shuttle/dropship_hijack.dm b/code/modules/shuttle/dropship_hijack.dm index 36bc879ace46..809601c815f2 100644 --- a/code/modules/shuttle/dropship_hijack.dm +++ b/code/modules/shuttle/dropship_hijack.dm @@ -10,7 +10,7 @@ /datum/dropship_hijack/almayer/proc/crash_landing() //break APCs - for(var/obj/structure/machinery/power/apc/A in machines) + for(var/obj/structure/machinery/power/apc/A in GLOB.machines) if(A.z != crash_site.z) continue if(prob(A.crash_break_probability)) @@ -66,7 +66,7 @@ var/explosion_alive = TRUE while(explosion_alive) explosion_alive = FALSE - for(var/datum/automata_cell/explosion/E in cellauto_cells) + for(var/datum/automata_cell/explosion/E in GLOB.cellauto_cells) if(E.explosion_cause_data && E.explosion_cause_data.cause_name == "dropship crash") explosion_alive = TRUE break @@ -80,8 +80,8 @@ return FALSE shuttle.callTime = DROPSHIP_CRASH_TRANSIT_DURATION * GLOB.ship_alt SSshuttle.moveShuttle(shuttle.id, crash_site.id, TRUE) - if(round_statistics) - round_statistics.track_hijack() + if(GLOB.round_statistics) + GLOB.round_statistics.track_hijack() return TRUE /datum/dropship_hijack/almayer/proc/target_crash_site(ship_section) @@ -115,8 +115,8 @@ return // if the AA site matches target site - if(target_ship_section == almayer_aa_cannon.protecting_section) - var/list/remaining_crash_sites = almayer_ship_sections.Copy() + if(target_ship_section == GLOB.almayer_aa_cannon.protecting_section) + var/list/remaining_crash_sites = GLOB.almayer_ship_sections.Copy() remaining_crash_sites -= target_ship_section var/new_target_ship_section = pick(remaining_crash_sites) var/turf/target = get_crashsite_turf(new_target_ship_section) @@ -173,7 +173,7 @@ playsound_z(SSmapping.levels_by_any_trait(list(ZTRAIT_MARINE_MAIN_SHIP)), 'sound/effects/dropship_crash.ogg', volume = 75) /datum/dropship_hijack/almayer/proc/disable_latejoin() - enter_allowed = FALSE + GLOB.enter_allowed = FALSE /datum/dropship_hijack/almayer/proc/get_crashsite_turf(ship_section) var/list/turfs = list() diff --git a/code/modules/shuttle/helpers.dm b/code/modules/shuttle/helpers.dm index 1d841581faa0..6b29f155582e 100644 --- a/code/modules/shuttle/helpers.dm +++ b/code/modules/shuttle/helpers.dm @@ -117,21 +117,20 @@ var/list/door_turfs = list(get_turf(air)) if(istype(air, /obj/structure/machinery/door/airlock/multi_tile)) var/obj/structure/machinery/door/airlock/multi_tile/multi_door = air - door_turfs = multi_door.get_filler_turfs() + door_turfs = multi_door.locate_filler_turfs() for(var/turf/door_turf in door_turfs) bump_at_turf(door_turf) lockdown_door(air) /datum/door_controller/single/proc/bump_at_turf(turf/door_turf) - for(var/mob/blocking_mob in door_turf) - if(isliving(blocking_mob)) - to_chat(blocking_mob, SPAN_HIGHDANGER("You get thrown back as the [label] doors slam shut!")) - blocking_mob.apply_effect(4, WEAKEN) - for(var/turf/target_turf in orange(1, door_turf)) // Forcemove to a non shuttle turf - if(!istype(target_turf, /turf/open/shuttle) && !istype(target_turf, /turf/closed/shuttle)) - blocking_mob.forceMove(target_turf) - break + for(var/mob/living/blocking_mob in door_turf) + to_chat(blocking_mob, SPAN_HIGHDANGER("You get thrown back as the [label] doors slam shut!")) + blocking_mob.KnockDown(4) + for(var/turf/target_turf in orange(1, door_turf)) // Forcemove to a non shuttle turf + if(!istype(target_turf, /turf/open/shuttle) && !istype(target_turf, /turf/closed/shuttle)) + blocking_mob.forceMove(target_turf) + break /datum/door_controller/proc/lockdown_door(obj/structure/machinery/door/target) if(istype(target, /obj/structure/machinery/door/airlock)) diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index d834822e884a..5fe3a7989898 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -184,11 +184,11 @@ All ShuttleMove procs go here . = ..() if(. & MOVE_AREA) . |= MOVE_CONTENTS - cameranet.removeCamera(src) + GLOB.cameranet.removeCamera(src) /obj/structure/machinery/camera/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) . = ..() - cameranet.addCamera(src) + GLOB.cameranet.addCamera(src) /obj/structure/machinery/atmospherics/pipe/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) . = ..() diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 7bbdb214d34b..85fc38bf5f1b 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -343,6 +343,9 @@ var/rechargeTime = 0 //time spent after arrival before being able to launch again var/prearrivalTime = 0 //delay after call time finishes for sound effects, explosions, etc. + var/playing_launch_announcement_alarm = FALSE // FALSE = off ; TRUE = on + var/datum/looping_sound/looping_launch_announcement_alarm/alarm_sound_loop + var/landing_sound = 'sound/effects/engine_landing.ogg' var/ignition_sound = 'sound/effects/engine_startup.ogg' /// Default shuttle audio ambience while flying @@ -383,6 +386,7 @@ /obj/docking_port/mobile/Destroy(force) if(force) + QDEL_NULL(alarm_sound_loop) SSshuttle.mobile -= src destination = null previous = null @@ -410,6 +414,14 @@ initial_engines = count_engines() current_engines = initial_engines + //Launch Announcement Alarm variables setup + alarm_sound_loop = new(src) + alarm_sound_loop.mid_length = 20 + alarm_sound_loop.extra_range = 30 + alarm_sound_loop.volume = 100 + alarm_sound_loop.is_sound_projecting = TRUE + alarm_sound_loop.falloff_distance = 7 + #ifdef DOCKING_PORT_HIGHLIGHT highlight("#0f0") #endif diff --git a/code/modules/shuttle/shuttles/crashable/crashable.dm b/code/modules/shuttle/shuttles/crashable/crashable.dm index de1c5cc8e4fb..f07be5f0c93a 100644 --- a/code/modules/shuttle/shuttles/crashable/crashable.dm +++ b/code/modules/shuttle/shuttles/crashable/crashable.dm @@ -26,7 +26,7 @@ found_turf.ChangeTurf(/turf/open/floor) for(var/mob/current_mob as anything in get_mobs_in_z_level_range(destination.return_center_turf(), 18)) - var/relative_dir = get_dir(current_mob, destination.return_center_turf()) + var/relative_dir = Get_Compass_Dir(current_mob, destination.return_center_turf()) var/final_dir = dir2text(relative_dir) to_chat(current_mob, SPAN_HIGHDANGER("You hear something crashing down from above [final_dir ? "to the [final_dir]" : "nearby"]!")) diff --git a/code/modules/shuttle/shuttles/dropship.dm b/code/modules/shuttle/shuttles/dropship.dm index e1c2bb9a1f9a..ee91c9b9e5d4 100644 --- a/code/modules/shuttle/shuttles/dropship.dm +++ b/code/modules/shuttle/shuttles/dropship.dm @@ -234,8 +234,8 @@ /obj/docking_port/stationary/marine_dropship/on_departure(obj/docking_port/mobile/departing_shuttle) . = ..() turn_off_landing_lights() - var/obj/docking_port/mobile/marine_dropship/shuttle = departing_shuttle - for(var/obj/structure/dropship_equipment/eq as anything in shuttle.equipments) + var/obj/docking_port/mobile/marine_dropship/dropship = departing_shuttle + for(var/obj/structure/dropship_equipment/eq as anything in dropship.equipments) eq.on_launch() /obj/docking_port/stationary/marine_dropship/lz1 diff --git a/code/modules/shuttle/shuttles/ert.dm b/code/modules/shuttle/shuttles/ert.dm index 1760caf3d87c..b619645c501c 100644 --- a/code/modules/shuttle/shuttles/ert.dm +++ b/code/modules/shuttle/shuttles/ert.dm @@ -61,14 +61,13 @@ INVOKE_ASYNC(src, PROC_REF(lockdown_door_launch), door) /obj/docking_port/mobile/emergency_response/proc/lockdown_door_launch(obj/structure/machinery/door/airlock/air) - for(var/mob/blocking_mob in air.loc) // Bump all mobs outta the way for outside airlocks of shuttles - if(isliving(blocking_mob)) - to_chat(blocking_mob, SPAN_HIGHDANGER("You get thrown back as the dropship doors slam shut!")) - blocking_mob.apply_effect(4, WEAKEN) - for(var/turf/target_turf in orange(1, air)) // Forcemove to a non shuttle turf - if(!istype(target_turf, /turf/open/shuttle) && !istype(target_turf, /turf/closed/shuttle)) - blocking_mob.forceMove(target_turf) - break + for(var/mob/living/blocking_mob in air.loc) // Bump all mobs outta the way for outside airlocks of shuttles + to_chat(blocking_mob, SPAN_HIGHDANGER("You get thrown back as the dropship doors slam shut!")) + blocking_mob.KnockDown(4) + for(var/turf/target_turf in orange(1, air)) // Forcemove to a non shuttle turf + if(!istype(target_turf, /turf/open/shuttle) && !istype(target_turf, /turf/closed/shuttle)) + blocking_mob.forceMove(target_turf) + break lockdown_door(air) /obj/docking_port/mobile/emergency_response/proc/lockdown_door(obj/structure/machinery/door/airlock/air) diff --git a/code/modules/shuttle/vehicle_elevator.dm b/code/modules/shuttle/vehicle_elevator.dm index c9a051a261c5..d2e102933fd8 100644 --- a/code/modules/shuttle/vehicle_elevator.dm +++ b/code/modules/shuttle/vehicle_elevator.dm @@ -20,10 +20,10 @@ /obj/docking_port/mobile/vehicle_elevator/register() . = ..() SSshuttle.vehicle_elevator = src - for(var/obj/structure/machinery/gear/G in machines) + for(var/obj/structure/machinery/gear/G in GLOB.machines) if(G.id == "vehicle_elevator_gears") gears += G - for(var/obj/structure/machinery/door/poddoor/railing/R in machines) + for(var/obj/structure/machinery/door/poddoor/railing/R in GLOB.machines) if(R.id == "vehicle_elevator_railing") railings += R diff --git a/code/modules/shuttles/marine_ferry.dm b/code/modules/shuttles/marine_ferry.dm index 032294a45b39..d0f2b3c17bdc 100644 --- a/code/modules/shuttles/marine_ferry.dm +++ b/code/modules/shuttles/marine_ferry.dm @@ -58,7 +58,7 @@ for(var/obj/vehicle/multitile/M in D.loc) if(M) return 0 - for(var/turf/T in D.get_filler_turfs()) + for(var/turf/T in D.locate_filler_turfs()) for(var/obj/vehicle/multitile/M in T) if(M) return 0 @@ -73,13 +73,6 @@ control.visible_message(SPAN_WARNING(fail_flavortext)) return //Kill it so as not to repeat -/datum/shuttle/ferry/marine/proc/load_datums() - if(!(info_tag in s_info)) - message_admins(SPAN_WARNING("Error with shuttles: Shuttle tag does not exist. Code: MSD10.\n WARNING: DROPSHIP LAUNCH WILL PROBABLY FAIL")) - - var/list/L = s_info[info_tag] - info_datums = L.Copy() - /datum/shuttle/ferry/marine/proc/set_automated_launch(bool_v) automated_launch = bool_v if(bool_v) @@ -343,17 +336,17 @@ var/target_section = crash_target_section if(isnull(target_section)) - var/list/potential_crash_sections = almayer_ship_sections.Copy() - potential_crash_sections -= almayer_aa_cannon.protecting_section + var/list/potential_crash_sections = GLOB.almayer_ship_sections.Copy() + potential_crash_sections -= GLOB.almayer_aa_cannon.protecting_section target_section = pick(potential_crash_sections) - var/turf/T_trg = pick(shuttle_controller.locs_crash[target_section]) + var/turf/T_trg = pick(SSoldshuttle.shuttle_controller.locs_crash[target_section]) for(var/X in equipments) var/obj/structure/dropship_equipment/E = X if(istype(E, /obj/structure/dropship_equipment/adv_comp/docking)) var/list/crash_turfs = list() - for(var/turf/TU in shuttle_controller.locs_crash[target_section]) + for(var/turf/TU in SSoldshuttle.shuttle_controller.locs_crash[target_section]) if(istype(get_area(TU), /area/almayer/hallways/hangar)) crash_turfs += TU if(crash_turfs.len) T_trg = pick(crash_turfs) @@ -363,7 +356,7 @@ if(!istype(T_src) || !istype(T_int) || !istype(T_trg)) message_admins(SPAN_WARNING("Error with shuttles: Reference turfs not correctly instantiated. Code: MSD04.\n WARNING: DROPSHIP LAUNCH WILL FAIL")) - shuttle_controller.locs_crash[target_section] -= T_trg + SSoldshuttle.shuttle_controller.locs_crash[target_section] -= T_trg //END: Heavy lifting backend @@ -440,12 +433,12 @@ sleep(85) - if(security_level < SEC_LEVEL_RED) //automatically set security level to red. + if(GLOB.security_level < SEC_LEVEL_RED) //automatically set security level to red. set_security_level(SEC_LEVEL_RED, TRUE) shake_cameras(turfs_int) //shake for 1.5 seconds before crash, 0.5 after - for(var/obj/structure/machinery/power/apc/A in machines) //break APCs + for(var/obj/structure/machinery/power/apc/A in GLOB.machines) //break APCs if(A.z != T_trg.z) continue if(prob(A.crash_break_probability)) A.overload_lighting() @@ -477,7 +470,7 @@ var/explosion_alive = TRUE while(explosion_alive) explosion_alive = FALSE - for(var/datum/automata_cell/explosion/E in cellauto_cells) + for(var/datum/automata_cell/explosion/E in GLOB.cellauto_cells) if(E.explosion_cause_data && E.explosion_cause_data.cause_name == "dropship crash") explosion_alive = TRUE break @@ -520,15 +513,15 @@ open_doors_crashed(turfs_trg) //And now open the doors - for (var/obj/structure/machinery/door_display/research_cell/d in machines) + for (var/obj/structure/machinery/door_display/research_cell/d in GLOB.machines) if(is_mainship_level(d.z) || is_reserved_level(d.z)) d.ion_act() //Breaking xenos out of containment //Stolen from events.dm. WARNING: This code is old as hell - for (var/obj/structure/machinery/power/apc/APC in machines) + for (var/obj/structure/machinery/power/apc/APC in GLOB.machines) if(is_mainship_level(APC.z) || is_reserved_level(APC.z)) APC.ion_act() - for (var/obj/structure/machinery/power/smes/SMES in machines) + for (var/obj/structure/machinery/power/smes/SMES in GLOB.machines) if(is_mainship_level(SMES.z) || is_reserved_level(SMES.z)) SMES.ion_act() @@ -545,7 +538,7 @@ colonial_marines.add_current_round_status_to_end_results("Hijack") /datum/shuttle/ferry/marine/proc/disable_latejoin() - enter_allowed = FALSE + GLOB.enter_allowed = FALSE /datum/shuttle/ferry/marine/short_jump() @@ -606,14 +599,13 @@ /datum/shuttle/ferry/marine/force_close_launch(obj/structure/machinery/door/AL) if(!iselevator) - for(var/mob/M in AL.loc) // Bump all mobs outta the way for outside airlocks of shuttles - if(isliving(M)) - to_chat(M, SPAN_HIGHDANGER("You get thrown back as the dropship doors slam shut!")) - M.apply_effect(4, WEAKEN) - for(var/turf/T in orange(1, AL)) // Forcemove to a non shuttle turf - if(!istype(T, /turf/open/shuttle) && !istype(T, /turf/closed/shuttle)) - M.forceMove(T) - break + for(var/mob/living/M in AL.loc) // Bump all mobs outta the way for outside airlocks of shuttles + to_chat(M, SPAN_HIGHDANGER("You get thrown back as the dropship doors slam shut!")) + M.KnockDown(4) + for(var/turf/T in orange(1, AL)) // Forcemove to a non shuttle turf + if(!istype(T, /turf/open/shuttle) && !istype(T, /turf/closed/shuttle)) + M.forceMove(T) + break return ..() // Sleeps /datum/shuttle/ferry/marine/open_doors(list/L) diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm index a5911d18b3a2..af7019a08ce8 100644 --- a/code/modules/shuttles/shuttle.dm +++ b/code/modules/shuttles/shuttle.dm @@ -29,8 +29,6 @@ var/iselevator = 0 //Used to remove some shuttle related procs and texts to make it compatible with elevators var/almayerelevator = 0 //elevators on the almayer without limitations - var/list/last_passangers = list() //list of living creatures that were our last passengers - var/require_link = FALSE var/linked = FALSE var/ambience_muffle = MUFFLE_HIGH @@ -202,9 +200,7 @@ origin.move_contents_to(destination, direction=direction) - last_passangers.Cut() - for(var/mob/M in destination) - last_passangers += M + for(var/mob/living/M in destination) if(M.client) spawn(0) if(M.buckled && !iselevator) @@ -215,7 +211,8 @@ shake_camera(M, iselevator? 2 : 10, 1) if(istype(M, /mob/living/carbon) && !iselevator) if(!M.buckled) - M.apply_effect(3, WEAKEN) + M.Stun(3) + M.KnockDown(3) for(var/turf/T in origin) // WOW so hacky - who cares. Abby if(iselevator) diff --git a/code/modules/shuttles/shuttle_console.dm b/code/modules/shuttles/shuttle_console.dm index da1923730e4e..96cc72970f3b 100644 --- a/code/modules/shuttles/shuttle_console.dm +++ b/code/modules/shuttles/shuttle_console.dm @@ -33,7 +33,7 @@ GLOBAL_LIST_EMPTY(shuttle_controls) return ..() /obj/structure/machinery/computer/shuttle_control/proc/get_shuttle() - var/datum/shuttle/ferry/shuttle = shuttle_controller.shuttles[shuttle_tag] + var/datum/shuttle/ferry/shuttle = SSoldshuttle.shuttle_controller.shuttles[shuttle_tag] if(shuttle_datum) shuttle = shuttle_datum @@ -201,7 +201,7 @@ GLOBAL_LIST_EMPTY(shuttle_controls) "auto_time_cdown" = automated_launch_time_left, ) - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = SSnano.nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, shuttle.iselevator? "elevator_control_console.tmpl" : "shuttle_control_console.tmpl", shuttle.iselevator? "Elevator Control" : "Shuttle Control", 550, 500) @@ -260,7 +260,7 @@ GLOBAL_LIST_EMPTY(shuttle_controls) return // Allow the queen to choose the ship section to crash into - var/crash_target = tgui_input_list(usr, "Choose a ship section to target","Hijack", almayer_ship_sections + list("Cancel")) + var/crash_target = tgui_input_list(usr, "Choose a ship section to target","Hijack", GLOB.almayer_ship_sections + list("Cancel")) if(crash_target == "Cancel") return @@ -278,16 +278,16 @@ GLOBAL_LIST_EMPTY(shuttle_controls) shuttle1.true_crash_target_section = crash_target // If the AA is protecting the target area, pick any other section to crash into at random - if(almayer_aa_cannon.protecting_section == crash_target) - var/list/potential_crash_sections = almayer_ship_sections.Copy() - potential_crash_sections -= almayer_aa_cannon.protecting_section + if(GLOB.almayer_aa_cannon.protecting_section == crash_target) + var/list/potential_crash_sections = GLOB.almayer_ship_sections.Copy() + potential_crash_sections -= GLOB.almayer_aa_cannon.protecting_section crash_target = pick(potential_crash_sections) shuttle1.crash_target_section = crash_target shuttle1.transit_gun_mission = 0 - if(round_statistics) - round_statistics.track_hijack() + if(GLOB.round_statistics) + GLOB.round_statistics.track_hijack() marine_announcement("Unscheduled dropship departure detected from operational area. Hijack likely. Shutting down autopilot.", "Dropship Alert", 'sound/AI/hijack.ogg', logging = ARES_LOG_SECURITY) shuttle.alerts_allowed-- @@ -306,16 +306,16 @@ GLOBAL_LIST_EMPTY(shuttle_controls) if(Q.hive) addtimer(CALLBACK(Q.hive, TYPE_PROC_REF(/datum/hive_status, abandon_on_hijack)), DROPSHIP_WARMUP_TIME + 5 SECONDS, TIMER_UNIQUE) //+ 5 seconds catch standing in doorways - if(bomb_set) + if(GLOB.bomb_set) for(var/obj/structure/machinery/nuclearbomb/bomb in world) bomb.end_round = FALSE - if(almayer_orbital_cannon) - almayer_orbital_cannon.is_disabled = TRUE - addtimer(CALLBACK(almayer_orbital_cannon, TYPE_PROC_REF(/obj/structure/orbital_cannon, enable)), 10 MINUTES, TIMER_UNIQUE) + if(GLOB.almayer_orbital_cannon) + GLOB.almayer_orbital_cannon.is_disabled = TRUE + addtimer(CALLBACK(GLOB.almayer_orbital_cannon, TYPE_PROC_REF(/obj/structure/orbital_cannon, enable)), 10 MINUTES, TIMER_UNIQUE) - if(almayer_aa_cannon) - almayer_aa_cannon.is_disabled = TRUE + if(GLOB.almayer_aa_cannon) + GLOB.almayer_aa_cannon.is_disabled = TRUE else if(shuttle.require_link) use_power(4080) diff --git a/code/modules/shuttles/shuttle_supply.dm b/code/modules/shuttles/shuttle_supply.dm index 67da9ff4311e..7eb7b96eb2e8 100644 --- a/code/modules/shuttles/shuttle_supply.dm +++ b/code/modules/shuttles/shuttle_supply.dm @@ -77,7 +77,7 @@ lower_railings() return else //at centcom - supply_controller.buy() + GLOB.supply_controller.buy() //We pretend it's a long_jump by making the shuttle stay at centcom for the "in-transit" period. var/area/away_area = get_location_area(away_location) @@ -137,14 +137,14 @@ recharging = 0 /datum/shuttle/ferry/supply/proc/handle_sell() - supply_controller.sell() + GLOB.supply_controller.sell() // returns 1 if the supply shuttle should be prevented from moving because it contains forbidden atoms /datum/shuttle/ferry/supply/proc/forbidden_atoms_check() if (!at_station()) return 0 //if badmins want to send mobs or a nuke on the supply shuttle from centcom we don't care - return supply_controller.forbidden_atoms_check(get_location_area()) + return GLOB.supply_controller.forbidden_atoms_check(get_location_area()) /datum/shuttle/ferry/supply/proc/at_station() return (!location) @@ -155,7 +155,7 @@ /datum/shuttle/ferry/supply/proc/raise_railings() var/effective = 0 - for(var/obj/structure/machinery/door/poddoor/M in machines) + for(var/obj/structure/machinery/door/poddoor/M in GLOB.machines) if(M.id == railing_id && !M.density) effective = 1 spawn() @@ -165,7 +165,7 @@ /datum/shuttle/ferry/supply/proc/lower_railings() var/effective = 0 - for(var/obj/structure/machinery/door/poddoor/M in machines) + for(var/obj/structure/machinery/door/poddoor/M in GLOB.machines) if(M.id == railing_id && M.density) effective = 1 INVOKE_ASYNC(M, TYPE_PROC_REF(/obj/structure/machinery/door, open)) @@ -173,14 +173,14 @@ playsound(locate(Elevator_x,Elevator_y,Elevator_z), 'sound/machines/elevator_openclose.ogg', 50, 0) /datum/shuttle/ferry/supply/proc/start_gears(direction = 1) - for(var/obj/structure/machinery/gear/M in machines) + for(var/obj/structure/machinery/gear/M in GLOB.machines) if(M.id == gear_id) spawn() M.icon_state = "gear_moving" M.setDir(direction) /datum/shuttle/ferry/supply/proc/stop_gears() - for(var/obj/structure/machinery/gear/M in machines) + for(var/obj/structure/machinery/gear/M in GLOB.machines) if(M.id == gear_id) spawn() M.icon_state = "gear" diff --git a/code/modules/tgs/v5/__interop_version.dm b/code/modules/tgs/v5/__interop_version.dm index 1b52b31d6a73..83420d130a74 100644 --- a/code/modules/tgs/v5/__interop_version.dm +++ b/code/modules/tgs/v5/__interop_version.dm @@ -1 +1 @@ -"5.6.2" +"5.7.0" diff --git a/code/modules/tgs/v5/_defines.dm b/code/modules/tgs/v5/_defines.dm index bdcd4e4dd58e..48969c0c7d56 100644 --- a/code/modules/tgs/v5/_defines.dm +++ b/code/modules/tgs/v5/_defines.dm @@ -80,6 +80,7 @@ #define DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH 8 #define DMAPI5_TOPIC_COMMAND_SEND_CHUNK 9 #define DMAPI5_TOPIC_COMMAND_RECEIVE_CHUNK 10 +#define DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST 11 #define DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE "commandType" #define DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND "chatCommand" @@ -89,6 +90,7 @@ #define DMAPI5_TOPIC_PARAMETER_NEW_INSTANCE_NAME "newInstanceName" #define DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE "chatUpdate" #define DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION "newServerVersion" +#define DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE "broadcastMessage" #define DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE "commandResponse" #define DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE "commandResponseMessage" diff --git a/code/modules/tgs/v5/topic.dm b/code/modules/tgs/v5/topic.dm index d7d471213813..2ef0c70a97fa 100644 --- a/code/modules/tgs/v5/topic.dm +++ b/code/modules/tgs/v5/topic.dm @@ -94,7 +94,7 @@ if(DMAPI5_TOPIC_COMMAND_CHANGE_PORT) var/new_port = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_PORT] if (!isnum(new_port) || !(new_port > 0)) - return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]]") + return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]") if(event_handler != null) event_handler.HandleEvent(TGS_EVENT_PORT_SWAP, new_port) @@ -141,7 +141,7 @@ if(DMAPI5_TOPIC_COMMAND_SERVER_PORT_UPDATE) var/new_port = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_PORT] if (!isnum(new_port) || !(new_port > 0)) - return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]]") + return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]") server_port = new_port return TopicResponse() @@ -157,7 +157,7 @@ var/error_message = null if (new_port != null) if (!isnum(new_port) || !(new_port > 0)) - error_message = "Invalid [DMAPI5_TOPIC_PARAMETER_NEW_PORT]]" + error_message = "Invalid [DMAPI5_TOPIC_PARAMETER_NEW_PORT]" else server_port = new_port @@ -165,7 +165,7 @@ if (!istext(new_version_string)) if(error_message != null) error_message += ", " - error_message += "Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION]]" + error_message += "Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION]" else var/datum/tgs_version/new_version = new(new_version_string) if (event_handler) @@ -267,4 +267,16 @@ return chunk_to_send + if(DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST) + var/message = topic_parameters[DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE] + if (!istext(message)) + return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE]") + + TGS_WORLD_ANNOUNCE(message) + return TopicResponse() + return TopicResponse("Unknown command: [command]") + +/datum/tgs_api/v5/proc/WorldBroadcast(message) + set waitfor = FALSE + TGS_WORLD_ANNOUNCE(message) diff --git a/code/modules/tgs/v5/undefs.dm b/code/modules/tgs/v5/undefs.dm index f163adaaafe3..fd1ed7e4cf54 100644 --- a/code/modules/tgs/v5/undefs.dm +++ b/code/modules/tgs/v5/undefs.dm @@ -78,6 +78,9 @@ #undef DMAPI5_TOPIC_COMMAND_SERVER_PORT_UPDATE #undef DMAPI5_TOPIC_COMMAND_HEALTHCHECK #undef DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH +#undef DMAPI5_TOPIC_COMMAND_SEND_CHUNK +#undef DMAPI5_TOPIC_COMMAND_RECEIVE_CHUNK +#undef DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST #undef DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE #undef DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND @@ -87,6 +90,7 @@ #undef DMAPI5_TOPIC_PARAMETER_NEW_INSTANCE_NAME #undef DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE #undef DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION +#undef DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE #undef DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE #undef DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE diff --git a/code/modules/tgui_panel/audio.dm b/code/modules/tgui_panel/audio.dm index 680696159943..d66421df5348 100644 --- a/code/modules/tgui_panel/audio.dm +++ b/code/modules/tgui_panel/audio.dm @@ -3,8 +3,6 @@ * SPDX-License-Identifier: MIT */ -/// Admin music volume, from 0 to 1. -/client/var/admin_music_volume = 1 /** * public @@ -22,8 +20,9 @@ /datum/tgui_panel/proc/play_music(url, extra_data) if(!is_ready()) return - if(!findtext(url, GLOB.is_http_protocol)) - return + // Commented to allow playing via simple asset transport. Just check when calling. +// if(!findtext(url, GLOB.is_http_protocol)) +// return var/list/payload = list() if(length(extra_data) > 0) for(var/key in extra_data) diff --git a/code/modules/tgui_panel/tgui_panel.dm b/code/modules/tgui_panel/tgui_panel.dm index 9fb8b02b0196..f33f190d80e0 100644 --- a/code/modules/tgui_panel/tgui_panel.dm +++ b/code/modules/tgui_panel/tgui_panel.dm @@ -85,9 +85,10 @@ ), )) return TRUE - if(type == "audio/setAdminMusicVolume") - client.admin_music_volume = payload["volume"] - return TRUE +// Deprecated due to removal of old sound play commands +// if(type == "audio/setAdminMusicVolume") +// client.admin_music_volume = payload["volume"] +// return TRUE if(type == "telemetry") analyze_telemetry(payload) return TRUE diff --git a/code/modules/tooltip/tooltip.dm b/code/modules/tooltip/tooltip.dm index b3dc005c0887..e668196d383a 100644 --- a/code/modules/tooltip/tooltip.dm +++ b/code/modules/tooltip/tooltip.dm @@ -98,10 +98,12 @@ Notes: last_target = null /datum/tooltip/proc/do_hide() - winshow(owner, control, FALSE) + if(owner) + winshow(owner, control, FALSE) /datum/tooltip/Destroy(force, ...) last_target = null + owner = null return ..() //Open a tooltip for user, at a location based on params diff --git a/code/modules/vehicles/apc/apc.dm b/code/modules/vehicles/apc/apc.dm index d71db37074f1..24b137a6804a 100644 --- a/code/modules/vehicles/apc/apc.dm +++ b/code/modules/vehicles/apc/apc.dm @@ -256,9 +256,16 @@ GLOBAL_LIST_EMPTY(command_apc_list) handle_direction(APC) APC.update_icon() + return APC + /obj/effect/vehicle_spawner/apc/unarmed/load_hardpoints(obj/vehicle/multitile/apc/V) return +/obj/effect/vehicle_spawner/apc/unarmed/broken/spawn_vehicle() + var/obj/vehicle/multitile/apc/apc = ..() + load_damage(apc) + apc.update_icon() + //PRESET: default hardpoints, destroyed /obj/effect/vehicle_spawner/apc/unarmed/decrepit/spawn_vehicle() var/obj/vehicle/multitile/apc/unarmed/APC = new (loc) diff --git a/code/modules/vehicles/apc/apc_command.dm b/code/modules/vehicles/apc/apc_command.dm index c5bd55928362..e0862ae4f2ab 100644 --- a/code/modules/vehicles/apc/apc_command.dm +++ b/code/modules/vehicles/apc/apc_command.dm @@ -59,7 +59,7 @@ continue SSminimaps.remove_marker(current_xeno) - current_xeno.add_minimap_marker(MINIMAP_FLAG_USCM|MINIMAP_FLAG_XENO) + current_xeno.add_minimap_marker(MINIMAP_FLAG_USCM|get_minimap_flag_for_faction(current_xeno.hivenumber)) minimap_added += WEAKREF(current_xeno) else if(WEAKREF(current_xeno) in minimap_added) @@ -184,9 +184,9 @@ //stole my own code from techpod_vendor /obj/vehicle/multitile/apc/command/proc/get_access_permission(mob/living/carbon/human/user) - if(SSticker.mode == GAMEMODE_WHISKEY_OUTPOST || master_mode == GAMEMODE_WHISKEY_OUTPOST) + if(SSticker.mode == GAMEMODE_WHISKEY_OUTPOST || GLOB.master_mode == GAMEMODE_WHISKEY_OUTPOST) return TRUE - else if(SSticker.mode == "Distress Signal" || master_mode == "Distress Signal") + else if(SSticker.mode == "Distress Signal" || GLOB.master_mode == "Distress Signal") if(techpod_access_settings_override) return TRUE else if(user.get_target_lock(techpod_faction_requirement)) diff --git a/code/modules/vehicles/hardpoints/hardpoint.dm b/code/modules/vehicles/hardpoints/hardpoint.dm index ee49ebc0ab57..acdefca18fd2 100644 --- a/code/modules/vehicles/hardpoints/hardpoint.dm +++ b/code/modules/vehicles/hardpoints/hardpoint.dm @@ -1,22 +1,20 @@ -/* - Hardpoints are any items that attach to a base vehicle, such as wheels/treads, support systems and guns -*/ - +/** + * Hardpoints are any items that attach to a base vehicle, such as wheels/treads, support systems and guns + */ /obj/item/hardpoint //------MAIN VARS---------- - // Which slot is this hardpoint in - // Purely to check for conflicting hardpoints + /// Which slot is this hardpoint in. Purely to check for conflicting hardpoints. var/slot - // The vehicle this hardpoint is installed on + /// The vehicle this hardpoint is installed on. var/obj/vehicle/multitile/owner health = 100 w_class = SIZE_LARGE - // Determines how much of any incoming damage is actually taken + /// Determines how much of any incoming damage is actually taken. var/damage_multiplier = 1 - // Origin coords of the hardpoint relative to the vehicle + /// Origin coords of the hardpoint relative to the vehicle. var/list/origins = list(0, 0) var/list/buff_multipliers @@ -32,13 +30,13 @@ var/disp_icon //This also differentiates tank vs apc vs other var/disp_icon_state - // List of pixel offsets for each direction + /// List of pixel offsets for each direction. var/list/px_offsets - //visual layer of hardpoint when on vehicle + /// Visual layer of hardpoint when on vehicle. var/hdpt_layer = HDPT_LAYER_WHEELS - // List of offsets for where to place the muzzle flash for each direction + /// List of offsets for where to place the muzzle flash for each direction. var/list/muzzle_flash_pos = list( "1" = list(0, 0), "2" = list(0, 0), @@ -54,33 +52,23 @@ var/const_mz_offset_y = 0 //------SOUNDS VARS---------- - // Sounds to play when the module activated/fired + /// Sounds to play when the module activated/fired. var/list/activation_sounds //------INTERACTION VARS---------- - //which seat can use this module + /// Which seat can use this module. var/allowed_seat = VEHICLE_GUNNER - //Cooldown on use of the hardpoint - var/cooldown = 100 - var/next_use = 0 - - //whether hardpoint has activatable ability like shooting or zooming + /// Whether hardpoint has activatable ability like shooting or zooming. var/activatable = 0 - //used to prevent welder click spam + /// Used to prevent welder click spam. var/being_repaired = FALSE - //current user. We can have only one user at a time. Better never change that - var/user - - //Accuracy of the hardpoint. (which is, in fact, a scatter. Need to change this system) - var/accuracy = 1 - - // The firing arc of this hardpoint + /// The firing arc of this hardpoint. var/firing_arc = 0 //in degrees. 0 skips whole arc of fire check // Muzzleflash @@ -91,17 +79,53 @@ //------AMMUNITION VARS---------- - //Currently loaded ammo that we shoot from + /// Currently loaded ammo that we shoot from. var/obj/item/ammo_magazine/hardpoint/ammo - //spare magazines that we can reload from + /// Spare magazines that we can reload from. var/list/backup_clips - //maximum amount of spare mags + /// Maximum amount of spare mags. var/max_clips = 0 /// An assoc list in the format list(/datum/element/bullet_trait_to_give = list(...args)) - /// that will be given to a projectile fired from the hardpoint + /// that will be given to a projectile fired from the hardpoint. var/list/list/traits_to_give + /// How much the bullet scatters when fired, in degrees. + var/scatter = 0 + /// How many bullets the gun fired while burst firing/auto firing. + var/shots_fired = 0 + /// Delay before a new firing sequence can start. + COOLDOWN_DECLARE(fire_cooldown) + + // Firemodes. + /// Current selected firemode of the gun. + var/gun_firemode = GUN_FIREMODE_SEMIAUTO + /// List of allowed firemodes. + var/list/gun_firemode_list = list( + GUN_FIREMODE_SEMIAUTO, + ) + + // Semi-auto and full-auto. + /// For regular shots, how long to wait before firing again. Use modify_fire_delay and set_fire_delay instead of modifying this on the fly + var/fire_delay = 0 + /// The multiplier for how much slower this should fire in automatic mode. 1 is normal, 1.2 is 20% slower, 2 is 100% slower, etc. Protected due to it never needing to be edited. + var/autofire_slow_mult = 1 + /// If the gun is currently auto firing. + var/auto_firing = FALSE + + // Burst fire. + /// How many shots can the weapon shoot in burst? Anything less than 2 and you cannot toggle burst. Use modify_burst_amount and set_burst_amount instead of modifying this + var/burst_amount = 1 + /// The delay in between shots. Lower = less delay = faster. Use modify_burst_delay and set_burst_delay instead of modifying this + var/burst_delay = 1 + /// When burst-firing, this number is extra time before the weapon can fire again. + var/extra_delay = 0 + /// If the gun is currently burst firing. + var/burst_firing = FALSE + + /// Currently selected target to fire at. Set with set_target(). + var/atom/target + //----------------------------- //------GENERAL PROCS---------- //----------------------------- @@ -109,6 +133,7 @@ /obj/item/hardpoint/Initialize() . = ..() set_bullet_traits() + AddComponent(/datum/component/automatedfire/autofire, fire_delay, burst_delay, burst_amount, gun_firemode, autofire_slow_mult, CALLBACK(src, PROC_REF(set_burst_firing)), CALLBACK(src, PROC_REF(reset_fire)), CALLBACK(src, PROC_REF(fire_wrapper)), callback_set_firing = CALLBACK(src, PROC_REF(set_auto_firing))) /obj/item/hardpoint/Destroy() if(owner) @@ -117,7 +142,7 @@ owner = null QDEL_NULL_LIST(backup_clips) QDEL_NULL(ammo) - + set_target(null) return ..() /obj/item/hardpoint/ex_act(severity) @@ -166,37 +191,64 @@ /obj/item/hardpoint/proc/get_integrity_percent() return 100.0*health/initial(health) -/obj/item/hardpoint/proc/on_install(obj/vehicle/multitile/V) - apply_buff(V) - return +/// Apply hardpoint effects to vehicle and self. +/obj/item/hardpoint/proc/on_install(obj/vehicle/multitile/vehicle) + if(!vehicle) //in loose holder + return + RegisterSignal(vehicle, COMSIG_GUN_RECALCULATE_ATTACHMENT_BONUSES, PROC_REF(recalculate_hardpoint_bonuses)) + apply_buff(vehicle) -/obj/item/hardpoint/proc/on_uninstall(obj/vehicle/multitile/V) - remove_buff(V) - return +/// Remove hardpoint effects from vehicle and self. +/obj/item/hardpoint/proc/on_uninstall(obj/vehicle/multitile/vehicle) + if(!vehicle) //in loose holder + return + UnregisterSignal(vehicle, COMSIG_GUN_RECALCULATE_ATTACHMENT_BONUSES) + remove_buff(vehicle) + //resetting values like set_gun_config_values() would be tidy, but unnecessary as it gets recalc'd on install anyway -//applying passive buffs like damage type resistance, speed, accuracy, cooldowns -/obj/item/hardpoint/proc/apply_buff(obj/vehicle/multitile/V) +/// Applying passive buffs like damage type resistance, speed, accuracy, cooldowns. +/obj/item/hardpoint/proc/apply_buff(obj/vehicle/multitile/vehicle) if(buff_applied) return if(LAZYLEN(type_multipliers)) for(var/type in type_multipliers) - V.dmg_multipliers[type] *= LAZYACCESS(type_multipliers, type) + vehicle.dmg_multipliers[type] *= LAZYACCESS(type_multipliers, type) if(LAZYLEN(buff_multipliers)) for(var/type in buff_multipliers) - V.misc_multipliers[type] *= LAZYACCESS(buff_multipliers, type) + vehicle.misc_multipliers[type] *= LAZYACCESS(buff_multipliers, type) buff_applied = TRUE + SEND_SIGNAL(vehicle, COMSIG_GUN_RECALCULATE_ATTACHMENT_BONUSES) -//removing buffs -/obj/item/hardpoint/proc/remove_buff(obj/vehicle/multitile/V) +/// Removing passive buffs like damage type resistance, speed, accuracy, cooldowns. +/obj/item/hardpoint/proc/remove_buff(obj/vehicle/multitile/vehicle) if(!buff_applied) return if(LAZYLEN(type_multipliers)) for(var/type in type_multipliers) - V.dmg_multipliers[type] *= 1 / LAZYACCESS(type_multipliers, type) + vehicle.dmg_multipliers[type] *= 1 / LAZYACCESS(type_multipliers, type) if(LAZYLEN(buff_multipliers)) for(var/type in buff_multipliers) - V.misc_multipliers[type] *= 1 / LAZYACCESS(buff_multipliers, type) + vehicle.misc_multipliers[type] *= 1 / LAZYACCESS(buff_multipliers, type) buff_applied = FALSE + SEND_SIGNAL(vehicle, COMSIG_GUN_RECALCULATE_ATTACHMENT_BONUSES) + +/// Recalculates hardpoint values based on vehicle modifiers. +/obj/item/hardpoint/proc/recalculate_hardpoint_bonuses() + scatter = initial(scatter) / owner.misc_multipliers["accuracy"] + var/cooldown_mult = owner.misc_multipliers["cooldown"] + set_fire_delay(initial(fire_delay) * cooldown_mult) + set_burst_delay(initial(burst_delay) * cooldown_mult) + extra_delay = initial(extra_delay) * cooldown_mult + +/// Setter for fire_delay. +/obj/item/hardpoint/proc/set_fire_delay(value) + fire_delay = value + SEND_SIGNAL(src, COMSIG_GUN_AUTOFIREDELAY_MODIFIED, fire_delay) + +/// Setter for burst_delay. +/obj/item/hardpoint/proc/set_burst_delay(value) + burst_delay = value + SEND_SIGNAL(src, COMSIG_GUN_BURST_SHOT_DELAY_MODIFIED, burst_delay) //this proc called on each move of vehicle /obj/item/hardpoint/proc/on_move(turf/old, turf/new_turf, move_dir) @@ -253,13 +305,12 @@ return data -// Traces backwards from the gun origin to the vehicle to check for obstacles between the vehicle and the muzzle -/obj/item/hardpoint/proc/clear_los(atom/A) - +/// Traces backwards from the gun origin to the vehicle to check for obstacles between the vehicle and the muzzle. +/obj/item/hardpoint/proc/clear_los() if(origins[1] == 0 && origins[2] == 0) //skipping check for modules we don't need this return TRUE - var/turf/muzzle_turf = locate(owner.x + origins[1], owner.y + origins[2], owner.z) + var/turf/muzzle_turf = get_origin_turf() var/turf/checking_turf = muzzle_turf while(!(owner in checking_turf)) @@ -268,24 +319,24 @@ return FALSE // Ensure that we can pass over all objects in the turf - for(var/obj/O in checking_turf) + for(var/obj/object in checking_turf) // Since vehicles are multitile the - if(O == owner) + if(object == owner) continue // Non-dense objects are irrelevant - if(!O.density) + if(!object.density) continue // Make sure we can pass object from all directions - if(!(O.pass_flags.flags_can_pass_all & PASS_OVER_THROW_ITEM)) - if(!(O.flags_atom & ON_BORDER)) + if(!HAS_FLAG(object.pass_flags.flags_can_pass_all, PASS_OVER_THROW_ITEM)) + if(!HAS_FLAG(object.flags_atom, ON_BORDER)) return FALSE //If we're behind the object, check the behind pass flags - else if(dir == O.dir && !(O.pass_flags.flags_can_pass_behind & PASS_OVER_THROW_ITEM)) + else if(dir == object.dir && !HAS_FLAG(object.pass_flags.flags_can_pass_behind, PASS_OVER_THROW_ITEM)) return FALSE //If we're in front, check front pass flags - else if(dir == turn(O.dir, 180) && !(O.pass_flags.flags_can_pass_front & PASS_OVER_THROW_ITEM)) + else if(dir == turn(object.dir, 180) && !HAS_FLAG(object.pass_flags.flags_can_pass_front, PASS_OVER_THROW_ITEM)) return FALSE // Trace back towards the vehicle @@ -297,47 +348,6 @@ //------INTERACTION PROCS---------- //----------------------------- -//If the hardpoint can be activated by current user -/obj/item/hardpoint/proc/can_activate(mob/user, atom/A) - if(!owner) - return - - var/seat = owner.get_mob_seat(user) - if(!seat) - return - - if(seat != allowed_seat) - to_chat(user, SPAN_WARNING("Only [allowed_seat] can use [name].")) - return - - if(health <= 0) - to_chat(user, SPAN_WARNING("\The [name] is broken!")) - return FALSE - - if(world.time < next_use) - if(cooldown >= 20) //filter out guns with high firerate to prevent message spam. - to_chat(user, SPAN_WARNING("You need to wait [SPAN_HELPFUL((next_use - world.time) / 10)] seconds before [name] can be used again.")) - return FALSE - - if(ammo && ammo.current_rounds <= 0) - to_chat(user, SPAN_WARNING("\The [name] is out of ammo! Magazines: [SPAN_HELPFUL(LAZYLEN(backup_clips))]/[SPAN_HELPFUL(max_clips)]")) - return FALSE - - if(!in_firing_arc(A)) - to_chat(user, SPAN_WARNING("The target is not within your firing arc!")) - return FALSE - - if(!clear_los(A)) - to_chat(user, SPAN_WARNING("You don't have a clear line of sight to the target!")) - return FALSE - - return TRUE - -//Called when you want to activate the hardpoint, by default firing a gun -//This can also be used for some type of temporary buff or toggling mode, up to you -/obj/item/hardpoint/proc/activate(mob/user, atom/A) - fire(user, A) - /obj/item/hardpoint/proc/deactivate() return @@ -490,76 +500,201 @@ user.visible_message(SPAN_NOTICE("[user] stops repairing \the [name]."), SPAN_NOTICE("You stop repairing \the [name]. The integrity of the module is at [SPAN_HELPFUL(round(get_integrity_percent()))]%.")) return -//determines whether something is in firing arc of a hardpoint -/obj/item/hardpoint/proc/in_firing_arc(atom/A) - if(!owner) - return FALSE +/// Setter proc for the automatic firing flag. +/obj/item/hardpoint/proc/set_auto_firing(auto = FALSE) + if(auto_firing != auto) + auto_firing = auto + if(!auto_firing) //end-of-fire, show changed ammo + display_ammo() + +/// Setter proc for the burst firing flag. +/obj/item/hardpoint/proc/set_burst_firing(burst = FALSE) + if(burst_firing != burst) + burst_firing = burst + if(!burst_firing) //end-of-fire, show changed ammo + display_ammo() + +/// Clean all firing references. +/obj/item/hardpoint/proc/reset_fire() + shots_fired = 0 + set_target(null) + set_auto_firing(FALSE) //on abnormal exits automatic fire doesn't call set_auto_firing() + +/// Set the target and take care of hard delete. +/obj/item/hardpoint/proc/set_target(atom/object) + if(object == target || object == loc) + return + if(target) + UnregisterSignal(target, COMSIG_PARENT_QDELETING) + target = object + if(target) + RegisterSignal(target, COMSIG_PARENT_QDELETING, PROC_REF(clean_target)) + +/// Set the target to its turf, so we keep shooting even when it was qdeled. +/obj/item/hardpoint/proc/clean_target() + SIGNAL_HANDLER + target = get_turf(target) + +/// Print how much ammo is left to chat. +/obj/item/hardpoint/proc/display_ammo(mob/user) + if(!user) + user = owner.get_seat_mob(allowed_seat) + if(!user) + return - if(!firing_arc) - return TRUE + if(ammo) + to_chat(user, SPAN_WARNING("[name] Ammo: [SPAN_HELPFUL(ammo ? ammo.current_rounds : 0)]/[SPAN_HELPFUL(ammo ? ammo.max_rounds : 0)] | Mags: [SPAN_HELPFUL(LAZYLEN(backup_clips))]/[SPAN_HELPFUL(max_clips)]")) - var/turf/T = get_turf(A) - if(!T) - return FALSE +/// Reset variables used in firing and remove the gun from the autofire system. +/obj/item/hardpoint/proc/stop_fire(datum/source, atom/object, turf/location, control, params) + SEND_SIGNAL(src, COMSIG_GUN_STOP_FIRE) + if(auto_firing) + reset_fire() //automatic fire doesn't reset itself from COMSIG_GUN_STOP_FIRE - var/dx = T.x - (owner.x + origins[1]/2) - var/dy = T.y - (owner.y + origins[2]/2) - - var/deg = 0 - switch(dir) - if(EAST) - deg = 0 - if(NORTH) - deg = -90 - if(WEST) - deg = 180 - if(SOUTH) - deg = 90 - - var/nx = dx * cos(deg) - dy * sin(deg) - var/ny = dx * sin(deg) + dy * cos(deg) - if(nx == 0) - return firing_arc >= 90 - - var/angle = arctan(ny/nx) - if(nx < 0) - angle += 180 - - return abs(angle) <= (firing_arc/2) - -//doing last preparation before actually firing gun -/obj/item/hardpoint/proc/fire(mob/user, atom/A) - if(!ammo) //Prevents a runtime +/// Update the target if you dragged your mouse. +/obj/item/hardpoint/proc/change_target(datum/source, atom/src_object, atom/over_object, turf/src_location, turf/over_location, src_control, over_control, params) + set_target(get_turf_on_clickcatcher(over_object, source, params)) + +/// Check if the gun can fire and add it to bucket autofire system if needed, or just fire the gun if not. +/obj/item/hardpoint/proc/start_fire(datum/source, atom/object, turf/location, control, params) + if(istype(object, /atom/movable/screen)) return - if(ammo.current_rounds <= 0) + + if(QDELETED(object)) return - next_use = world.time + cooldown * owner.misc_multipliers["cooldown"] - if(!prob((accuracy * 100) / owner.misc_multipliers["accuracy"])) - A = get_step(get_turf(A), pick(cardinal)) + if(!auto_firing && !burst_firing && !COOLDOWN_FINISHED(src, fire_cooldown)) + if(max(fire_delay, burst_delay + extra_delay) >= 2.0 SECONDS) //filter out guns with high firerate to prevent message spam. + to_chat(source, SPAN_WARNING("You need to wait [SPAN_HELPFUL(COOLDOWN_SECONDSLEFT(src, fire_cooldown))] seconds before [name] can be used again.")) + return - if(LAZYLEN(activation_sounds)) - playsound(get_turf(src), pick(activation_sounds), 60, 1) + set_target(get_turf_on_clickcatcher(object, source, params)) - fire_projectile(user, A) + if(gun_firemode == GUN_FIREMODE_SEMIAUTO) + var/fire_return = try_fire(object, source, params) + //end-of-fire, show ammo (if changed) + if(fire_return == AUTOFIRE_CONTINUE) + reset_fire() + display_ammo(source) + else + SEND_SIGNAL(src, COMSIG_GUN_FIRE) + +/// Wrapper proc for the autofire system to ensure the important args aren't null. +/obj/item/hardpoint/proc/fire_wrapper(atom/target, mob/living/user, params) + SHOULD_NOT_OVERRIDE(TRUE) + if(!target) + target = src.target + if(!user) + user = owner.get_seat_mob(allowed_seat) + if(!target || !user) + return NONE + + return try_fire(target, user, params) + +/// Tests if firing should be interrupted, otherwise fires. +/obj/item/hardpoint/proc/try_fire(atom/target, mob/living/user, params) + if(health <= 0) + to_chat(user, SPAN_WARNING("\The [name] is broken!")) + return NONE - to_chat(user, SPAN_WARNING("[name] Ammo: [SPAN_HELPFUL(ammo ? ammo.current_rounds : 0)]/[SPAN_HELPFUL(ammo ? ammo.max_rounds : 0)] | Mags: [SPAN_HELPFUL(LAZYLEN(backup_clips))]/[SPAN_HELPFUL(max_clips)]")) + if(ammo && ammo.current_rounds <= 0) + click_empty(user) + return NONE -//finally firing the gun -/obj/item/hardpoint/proc/fire_projectile(mob/user, atom/A) - set waitfor = 0 + if(!in_firing_arc(target)) + to_chat(user, SPAN_WARNING("The target is not within your firing arc!")) + return NONE - var/turf/origin_turf = get_turf(src) - origin_turf = locate(origin_turf.x + origins[1], origin_turf.y + origins[2], origin_turf.z) + if(!clear_los()) + to_chat(user, SPAN_WARNING("The muzzle is obstructed!")) + return NONE - var/obj/projectile/P = generate_bullet(user, origin_turf) - SEND_SIGNAL(P, COMSIG_BULLET_USER_EFFECTS, user) - P.fire_at(A, user, src, P.ammo.max_range, P.ammo.shell_speed) + return handle_fire(target, user, params) - if(use_muzzle_flash) - muzzle_flash(Get_Angle(origin_turf, A)) +/// Actually fires the gun, sets up the projectile and fires it. +/obj/item/hardpoint/proc/handle_fire(atom/target, mob/living/user, params) + var/turf/origin_turf = get_origin_turf() + var/obj/projectile/projectile_to_fire = generate_bullet(user, origin_turf) ammo.current_rounds-- + SEND_SIGNAL(projectile_to_fire, COMSIG_BULLET_USER_EFFECTS, user) + + // turf-targeted projectiles are fired without scatter, because proc would raytrace them further away + var/ammo_flags = projectile_to_fire.ammo.flags_ammo_behavior | projectile_to_fire.projectile_override_flags + if(!HAS_FLAG(ammo_flags, AMMO_HITS_TARGET_TURF) && !HAS_FLAG(ammo_flags, AMMO_EXPLOSIVE)) //AMMO_EXPLOSIVE is also a turf-targeted projectile + projectile_to_fire.scatter = scatter + target = simulate_scatter(projectile_to_fire, target, origin_turf, get_turf(target), user) + + INVOKE_ASYNC(projectile_to_fire, TYPE_PROC_REF(/obj/projectile, fire_at), target, user, src, projectile_to_fire.ammo.max_range, projectile_to_fire.ammo.shell_speed) + projectile_to_fire = null + + shots_fired++ + play_firing_sounds() + if(use_muzzle_flash) + muzzle_flash(Get_Angle(origin_turf, target)) + + set_fire_cooldown(gun_firemode) + + return AUTOFIRE_CONTINUE + +/// Start cooldown to respect delay of firemode. +/obj/item/hardpoint/proc/set_fire_cooldown(firemode) + var/cooldown_time = 0 + switch(firemode) + if(GUN_FIREMODE_SEMIAUTO) + cooldown_time = fire_delay + if(GUN_FIREMODE_BURSTFIRE) + cooldown_time = burst_delay + extra_delay + if(GUN_FIREMODE_AUTOMATIC) + cooldown_time = fire_delay + COOLDOWN_START(src, fire_cooldown, cooldown_time) + +/// Adjust target based on random scatter angle. +/obj/item/hardpoint/proc/simulate_scatter(obj/projectile/projectile_to_fire, atom/target, turf/curloc, turf/targloc) + var/fire_angle = Get_Angle(curloc, targloc) + var/total_scatter_angle = projectile_to_fire.scatter + + //Not if the gun doesn't scatter at all, or negative scatter. + if(total_scatter_angle > 0) + fire_angle += rand(-total_scatter_angle, total_scatter_angle) + target = get_angle_target_turf(curloc, fire_angle, 30) + + return target + +/// Get turf at hardpoint origin offset, used as the muzzle. +/obj/item/hardpoint/proc/get_origin_turf() + return get_offset_target_turf(get_turf(src), origins[1], origins[2]) + +/// Plays 'click' noise and announced to chat. Usually called when weapon empty. +/obj/item/hardpoint/proc/click_empty(mob/user) + playsound(src, 'sound/weapons/gun_empty.ogg', 25, 1, 5) + if(user) + to_chat(user, SPAN_WARNING("*click*")) + +/// Selects and plays a firing sound from the list. +/obj/item/hardpoint/proc/play_firing_sounds() + if(LAZYLEN(activation_sounds)) + playsound(get_turf(src), pick(activation_sounds), 60, 1) + +/// Determines whether something is in firing arc of a hardpoint. +/obj/item/hardpoint/proc/in_firing_arc(atom/target) + if(!firing_arc || !ISINRANGE_EX(firing_arc, 0, 360)) + return TRUE + + var/turf/muzzle_turf = get_origin_turf() + var/turf/target_turf = get_turf(target) + + //same tile angle returns EAST, returning FALSE to ensure consistency + if(muzzle_turf == target_turf) + return FALSE + + var/angle_diff = SIMPLIFY_DEGREES(dir2angle(dir) - get_angle(muzzle_turf, target_turf)) + if(angle_diff < -180) + angle_diff += 360 + else if(angle_diff > 180) + angle_diff -= 360 + + return abs(angle_diff) <= (firing_arc * 0.5) //----------------------------- //------ICON PROCS---------- diff --git a/code/modules/vehicles/hardpoints/holder/holder.dm b/code/modules/vehicles/hardpoints/holder/holder.dm index b14e078a3997..fc8e849d105c 100644 --- a/code/modules/vehicles/hardpoints/holder/holder.dm +++ b/code/modules/vehicles/hardpoints/holder/holder.dm @@ -43,10 +43,21 @@ for(var/obj/item/hardpoint/H in hardpoints) H.take_damage(damage) -/obj/item/hardpoint/holder/on_install(obj/vehicle/multitile/V) - for(var/obj/item/hardpoint/HP in hardpoints) - HP.owner = V - return +/obj/item/hardpoint/holder/on_install(obj/vehicle/multitile/vehicle) + ..() + if(!vehicle) //in loose holder + return + for(var/obj/item/hardpoint/hardpoint in hardpoints) + hardpoint.owner = vehicle + hardpoint.on_install(vehicle) + +/obj/item/hardpoint/holder/on_uninstall(obj/vehicle/multitile/vehicle) + if(!vehicle) //in loose holder + return + for(var/obj/item/hardpoint/hardpoint in hardpoints) + hardpoint.on_uninstall(vehicle) + hardpoint.owner = null + ..() /obj/item/hardpoint/holder/proc/can_install(obj/item/hardpoint/H) // Can only have 1 hardpoint of each slot type @@ -121,16 +132,17 @@ H.forceMove(src) LAZYADD(hardpoints, H) + H.on_install(owner) H.rotate(turning_angle(H.dir, dir)) /obj/item/hardpoint/holder/proc/remove_hardpoint(obj/item/hardpoint/H, turf/uninstall_to) if(!hardpoints) return - hardpoints -= H H.forceMove(uninstall_to ? uninstall_to : get_turf(src)) + H.on_uninstall(owner) H.reset_rotation() - + hardpoints -= H H.owner = null if(H.health <= 0) diff --git a/code/modules/vehicles/hardpoints/holder/tank_turret.dm b/code/modules/vehicles/hardpoints/holder/tank_turret.dm index 27ab6c95404c..896628e609bb 100644 --- a/code/modules/vehicles/hardpoints/holder/tank_turret.dm +++ b/code/modules/vehicles/hardpoints/holder/tank_turret.dm @@ -13,8 +13,6 @@ density = TRUE //come on, it's huge activatable = TRUE - cooldown = 150 - accuracy = 0.8 ammo = new /obj/item/ammo_magazine/hardpoint/turret_smoke max_clips = 2 @@ -60,6 +58,15 @@ // Used during the windup var/rotating = FALSE + scatter = 4 + gun_firemode = GUN_FIREMODE_BURSTFIRE + gun_firemode_list = list( + GUN_FIREMODE_BURSTFIRE, + ) + burst_amount = 2 + burst_delay = 1.0 SECONDS + extra_delay = 13.0 SECONDS + /obj/item/hardpoint/holder/tank_turret/update_icon() var/broken = (health <= 0) icon_state = "tank_turret_[broken]" @@ -182,12 +189,7 @@ user.client.pixel_x = -1 * AM.view_tile_offset * 32 user.client.pixel_y = 0 -/obj/item/hardpoint/holder/tank_turret/fire(mob/user, atom/A) - if(ammo.current_rounds <= 0) - return - - next_use = world.time + cooldown - +/obj/item/hardpoint/holder/tank_turret/try_fire(atom/target, mob/living/user, params) var/turf/L var/turf/R switch(owner.dir) @@ -204,26 +206,14 @@ L = locate(owner.x - 4, owner.y + 2, owner.z) R = locate(owner.x - 4, owner.y - 2, owner.z) - if(LAZYLEN(activation_sounds)) - playsound(get_turf(src), pick(activation_sounds), 60, 1) - fire_projectile(user, L) + if(shots_fired) + target = R + else + target = L - sleep(10) + return ..() - if(LAZYLEN(activation_sounds)) - playsound(get_turf(src), pick(activation_sounds), 60, 1) - fire_projectile(user, R) - - to_chat(user, SPAN_WARNING("Smoke Screen uses left: [SPAN_HELPFUL(ammo ? ammo.current_rounds / 2 : 0)]/[SPAN_HELPFUL(ammo ? ammo.max_rounds / 2 : 0)] | Mags: [SPAN_HELPFUL(LAZYLEN(backup_clips))]/[SPAN_HELPFUL(max_clips)]")) - -/obj/item/hardpoint/holder/tank_turret/fire_projectile(mob/user, atom/A) - set waitfor = 0 - - var/turf/origin_turf = get_turf(src) - origin_turf = locate(origin_turf.x + origins[1], origin_turf.y + origins[2], origin_turf.z) +/obj/item/hardpoint/holder/tank_turret/get_origin_turf() + var/origin_turf = ..() origin_turf = get_step(get_step(origin_turf, owner.dir), owner.dir) //this should get us tile in front of tank to prevent grenade being stuck under us. - - var/obj/projectile/P = generate_bullet(user, origin_turf) - SEND_SIGNAL(P, COMSIG_BULLET_USER_EFFECTS, owner.seats[VEHICLE_GUNNER]) - P.fire_at(A, owner.seats[VEHICLE_GUNNER], src, get_dist(origin_turf, A) + 1, P.ammo.shell_speed) - ammo.current_rounds-- + return origin_turf diff --git a/code/modules/vehicles/hardpoints/primary/autocannon.dm b/code/modules/vehicles/hardpoints/primary/autocannon.dm index df9224011b32..b6dc2cedc674 100644 --- a/code/modules/vehicles/hardpoints/primary/autocannon.dm +++ b/code/modules/vehicles/hardpoints/primary/autocannon.dm @@ -8,8 +8,6 @@ activation_sounds = list('sound/weapons/vehicles/autocannon_fire.ogg') health = 500 - cooldown = 7 - accuracy = 0.98 firing_arc = 60 origins = list(0, -3) @@ -23,3 +21,10 @@ "4" = list(32, 0), "8" = list(-32, 0) ) + + scatter = 1 + gun_firemode = GUN_FIREMODE_AUTOMATIC + gun_firemode_list = list( + GUN_FIREMODE_AUTOMATIC, + ) + fire_delay = 0.7 SECONDS diff --git a/code/modules/vehicles/hardpoints/primary/dual_cannon.dm b/code/modules/vehicles/hardpoints/primary/dual_cannon.dm index 763bfb69842d..4033a4bffb2a 100644 --- a/code/modules/vehicles/hardpoints/primary/dual_cannon.dm +++ b/code/modules/vehicles/hardpoints/primary/dual_cannon.dm @@ -12,10 +12,7 @@ damage_multiplier = 0.2 health = 500 - cooldown = 7 - accuracy = 0.98 firing_arc = 60 - var/burst_amount = 2 origins = list(0, -2) @@ -33,27 +30,15 @@ "8" = list(14, 9) ) + scatter = 1 + gun_firemode = GUN_FIREMODE_AUTOMATIC + gun_firemode_list = list( + GUN_FIREMODE_AUTOMATIC, + ) + fire_delay = 0.3 SECONDS + /obj/item/hardpoint/primary/dualcannon/set_bullet_traits() ..() LAZYADD(traits_to_give, list( BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_iff) )) - -/obj/item/hardpoint/primary/dualcannon/fire(mob/user, atom/A) - if(ammo.current_rounds <= 0) - return - - next_use = world.time + cooldown * owner.misc_multipliers["cooldown"] - - for(var/bullets_fired = 1, bullets_fired <= burst_amount, bullets_fired++) - var/atom/T = A - if(!prob((accuracy * 100) / owner.misc_multipliers["accuracy"])) - T = get_step(get_turf(A), pick(cardinal)) - if(LAZYLEN(activation_sounds)) - playsound(get_turf(src), pick(activation_sounds), 60, 1) - fire_projectile(user, T) - if(ammo.current_rounds <= 0) - break - if(bullets_fired < burst_amount) //we need to sleep only if there are more bullets to shoot in the burst - sleep(3) - to_chat(user, SPAN_WARNING("[src] Ammo: [SPAN_HELPFUL(ammo ? ammo.current_rounds : 0)]/[SPAN_HELPFUL(ammo ? ammo.max_rounds : 0)] | Mags: [SPAN_HELPFUL(LAZYLEN(backup_clips))]/[SPAN_HELPFUL(max_clips)]")) diff --git a/code/modules/vehicles/hardpoints/primary/flamer.dm b/code/modules/vehicles/hardpoints/primary/flamer.dm index 929842df2307..13beee9dd2c2 100644 --- a/code/modules/vehicles/hardpoints/primary/flamer.dm +++ b/code/modules/vehicles/hardpoints/primary/flamer.dm @@ -8,8 +8,6 @@ activation_sounds = list('sound/weapons/vehicles/flamethrower.ogg') health = 400 - cooldown = 20 - accuracy = 0.75 firing_arc = 90 origins = list(0, -3) @@ -26,36 +24,19 @@ use_muzzle_flash = FALSE + scatter = 5 + fire_delay = 2.0 SECONDS + /obj/item/hardpoint/primary/flamer/set_bullet_traits() ..() LAZYADD(traits_to_give, list( BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_iff) )) -/obj/item/hardpoint/primary/flamer/can_activate(mob/user, atom/A) - if(!..()) - return FALSE - - var/turf/origin_turf = get_turf(src) - origin_turf = locate(origin_turf.x + origins[1], origin_turf.y + origins[2], origin_turf.z) - if(origin_turf == get_turf(A)) - return FALSE - - return TRUE - -/obj/item/hardpoint/primary/flamer/fire_projectile(mob/user, atom/A) - set waitfor = 0 - - var/turf/origin_turf = get_turf(src) - origin_turf = locate(origin_turf.x + origins[1], origin_turf.y + origins[2], origin_turf.z) - - var/range = get_dist(origin_turf, A) + 1 - - var/obj/projectile/P = generate_bullet(user, origin_turf) - SEND_SIGNAL(P, COMSIG_BULLET_USER_EFFECTS, owner.seats[VEHICLE_GUNNER]) - P.fire_at(A, owner.seats[VEHICLE_GUNNER], src, range < P.ammo.max_range ? range : P.ammo.max_range, P.ammo.shell_speed) - - if(use_muzzle_flash) - muzzle_flash(Get_Angle(owner, A)) +/obj/item/hardpoint/primary/flamer/try_fire(target, user, params) + var/turf/origin_turf = get_origin_turf() + if(origin_turf == get_turf(target)) + to_chat(user, SPAN_WARNING("The target is too close.")) + return NONE - ammo.current_rounds-- + return ..() diff --git a/code/modules/vehicles/hardpoints/primary/ltb.dm b/code/modules/vehicles/hardpoints/primary/ltb.dm index 7c663dc27fbc..19b5c7e7b9b4 100644 --- a/code/modules/vehicles/hardpoints/primary/ltb.dm +++ b/code/modules/vehicles/hardpoints/primary/ltb.dm @@ -8,8 +8,6 @@ activation_sounds = list('sound/weapons/vehicles/cannon_fire1.ogg', 'sound/weapons/vehicles/cannon_fire2.ogg') health = 500 - cooldown = 200 - accuracy = 0.97 firing_arc = 60 origins = list(0, -3) @@ -30,3 +28,6 @@ "4" = list(89, -4), "8" = list(-89, -4) ) + + scatter = 2 + fire_delay = 20.0 SECONDS diff --git a/code/modules/vehicles/hardpoints/primary/minigun.dm b/code/modules/vehicles/hardpoints/primary/minigun.dm index c6158f1a3b2c..3acf37eec268 100644 --- a/code/modules/vehicles/hardpoints/primary/minigun.dm +++ b/code/modules/vehicles/hardpoints/primary/minigun.dm @@ -7,8 +7,6 @@ disp_icon_state = "ltaaap_minigun" health = 350 - cooldown = 8 - accuracy = 0.6 firing_arc = 90 origins = list(0, -3) @@ -30,46 +28,58 @@ "8" = list(-77, 0) ) - //changed minigun mechanic so instead of having lowered cooldown with each shot it now has increased burst size. - //While it's still spammy, user doesn't have to click as fast as possible anymore and has margin of 2 seconds before minigun will start slowing down - - var/chained_shots = 1 //how many quick succession shots we've fired, 1 by default - var/last_shot_time = 0 //when was last shot fired, after 3 seconds we stop barrel - var/list/chain_bursts = list(1, 1, 2, 2, 3, 3, 3, 4, 4, 4) //how many shots per click we do + scatter = 7 + gun_firemode = GUN_FIREMODE_AUTOMATIC + gun_firemode_list = list( + GUN_FIREMODE_AUTOMATIC, + ) + fire_delay = 0.8 SECONDS //base fire rate, modified by stage_delay_mult + activation_sounds = list('sound/weapons/gun_minigun.ogg') + /// Active firing time to reach max spin_stage. + var/spinup_time = 8 SECONDS + /// Grace period before losing spin_stage. + var/spindown_grace_time = 2 SECONDS + COOLDOWN_DECLARE(spindown_grace_cooldown) + /// Cooldown time to reach min spin_stage. + var/spindown_time = 3 SECONDS + /// Index of stage_rate. + var/spin_stage = 1 + /// Shots fired per fire_delay at a particular spin_stage. + var/list/stage_rate = list(1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 5) + /// Fire delay multiplier for current spin_stage. + var/stage_delay_mult = 1 + /// When it was last fired, related to world.time. + var/last_fired = 0 -/obj/item/hardpoint/primary/minigun/fire(mob/user, atom/A) +/obj/item/hardpoint/primary/minigun/set_fire_delay(value) + fire_delay = value + SEND_SIGNAL(src, COMSIG_GUN_AUTOFIREDELAY_MODIFIED, fire_delay * stage_delay_mult) - var/S = 'sound/weapons/vehicles/minigun_stop.ogg' - //check how much time since last shot. 2 seconds are grace period before minigun starts to lose rotation momentum - var/t = world.time - last_shot_time - 2 SECONDS - t = round(t / 10) - if(t > 0) - chained_shots = max(chained_shots - t * 3, 1) //we lose 3 chained_shots per second - else - if(chained_shots < 11) - chained_shots++ - S = 'sound/weapons/vehicles/minigun_loop.ogg' +/obj/item/hardpoint/primary/minigun/set_fire_cooldown() + calculate_stage_delay_mult() //needs to check grace_cooldown before refreshed + last_fired = world.time + COOLDOWN_START(src, spindown_grace_cooldown, spindown_grace_time) + COOLDOWN_START(src, fire_cooldown, fire_delay * stage_delay_mult) - if(chained_shots == 1) - playsound(get_turf(src), 'sound/weapons/vehicles/minigun_start.ogg', 40, 1) +/obj/item/hardpoint/primary/minigun/proc/calculate_stage_delay_mult() + var/stage_rate_len = stage_rate.len + var/delta_time = world.time - last_fired - next_use = world.time + cooldown * owner.misc_multipliers["cooldown"] - - //how many rounds we will shoot in this burst - if(chained_shots > LAZYLEN(chain_bursts)) //5 shots at maximum rotation - t = 5 + var/old_spin_stage = spin_stage + if(auto_firing || burst_firing) //spinup if continuing fire + var/delta_stage = delta_time * (stage_rate_len - 1) + spin_stage += delta_stage / spinup_time + else if(COOLDOWN_FINISHED(src, spindown_grace_cooldown)) //spindown if initiating fire after grace + var/delta_stage = (delta_time - spindown_grace_time) * (stage_rate_len - 1) + spin_stage -= delta_stage / spindown_time else - t = LAZYACCESS(chain_bursts, chained_shots) - for(var/i = 1; i <= t; i++) - var/atom/T = A - if(!prob((accuracy * 100) / owner.misc_multipliers["accuracy"])) - T = get_step(get_turf(T), pick(cardinal)) - fire_projectile(user, T) - if(ammo.current_rounds <= 0) - break - sleep(2) - to_chat(user, SPAN_WARNING("[src] Ammo: [SPAN_HELPFUL(ammo ? ammo.current_rounds : 0)]/[SPAN_HELPFUL(ammo ? ammo.max_rounds : 0)] | Mags: [SPAN_HELPFUL(LAZYLEN(backup_clips))]/[SPAN_HELPFUL(max_clips)]")) + return + spin_stage = Clamp(spin_stage, 1, stage_rate_len) + + var/old_stage_rate = stage_rate[Floor(old_spin_stage)] + var/new_stage_rate = stage_rate[Floor(spin_stage)] - playsound(get_turf(src), S, 40, 1) - last_shot_time = world.time + if(old_stage_rate != new_stage_rate) + stage_delay_mult = 1 / new_stage_rate + SEND_SIGNAL(src, COMSIG_GUN_AUTOFIREDELAY_MODIFIED, fire_delay * stage_delay_mult) diff --git a/code/modules/vehicles/hardpoints/secondary/cupola.dm b/code/modules/vehicles/hardpoints/secondary/cupola.dm index f1f8f23435c2..f259d6ea2623 100644 --- a/code/modules/vehicles/hardpoints/secondary/cupola.dm +++ b/code/modules/vehicles/hardpoints/secondary/cupola.dm @@ -8,10 +8,7 @@ activation_sounds = list('sound/weapons/gun_smartgun1.ogg', 'sound/weapons/gun_smartgun2.ogg', 'sound/weapons/gun_smartgun3.ogg', 'sound/weapons/gun_smartgun4.ogg') health = 350 - cooldown = 15 - accuracy = 0.9 firing_arc = 120 - var/burst_amount = 3 origins = list(0, -2) @@ -25,27 +22,17 @@ "8" = list(-5, 7) ) + scatter = 3 + gun_firemode = GUN_FIREMODE_BURSTFIRE + gun_firemode_list = list( + GUN_FIREMODE_BURSTFIRE, + ) + burst_amount = 3 + burst_delay = 0.3 SECONDS + extra_delay = 0.6 SECONDS + /obj/item/hardpoint/secondary/m56cupola/set_bullet_traits() ..() LAZYADD(traits_to_give, list( BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_iff) )) - -/obj/item/hardpoint/secondary/m56cupola/fire(mob/user, atom/A) - if(ammo.current_rounds <= 0) - return - - next_use = world.time + cooldown * owner.misc_multipliers["cooldown"] - - for(var/bullets_fired = 1, bullets_fired <= burst_amount, bullets_fired++) - var/atom/T = A - if(!prob((accuracy * 100) / owner.misc_multipliers["accuracy"])) - T = get_step(get_turf(A), pick(cardinal)) - if(LAZYLEN(activation_sounds)) - playsound(get_turf(src), pick(activation_sounds), 60, 1) - fire_projectile(user, T) - if(ammo.current_rounds <= 0) - break - if(bullets_fired < burst_amount) //we need to sleep only if there are more bullets to shoot in the burst - sleep(3) - to_chat(user, SPAN_WARNING("[src] Ammo: [SPAN_HELPFUL(ammo ? ammo.current_rounds : 0)]/[SPAN_HELPFUL(ammo ? ammo.max_rounds : 0)] | Mags: [SPAN_HELPFUL(LAZYLEN(backup_clips))]/[SPAN_HELPFUL(max_clips)]")) diff --git a/code/modules/vehicles/hardpoints/secondary/flamer.dm b/code/modules/vehicles/hardpoints/secondary/flamer.dm index 10f7453d8c95..5557cfb24e17 100644 --- a/code/modules/vehicles/hardpoints/secondary/flamer.dm +++ b/code/modules/vehicles/hardpoints/secondary/flamer.dm @@ -8,8 +8,6 @@ activation_sounds = list('sound/weapons/vehicles/flamethrower.ogg') health = 300 - cooldown = 30 - accuracy = 0.68 firing_arc = 120 origins = list(0, -2) @@ -28,31 +26,20 @@ "8" = list(-3, 18) ) -/obj/item/hardpoint/secondary/small_flamer/fire_projectile(mob/user, atom/A) - set waitfor = 0 - - var/turf/origin_turf = get_turf(src) - origin_turf = locate(origin_turf.x + origins[1], origin_turf.y + origins[2], origin_turf.z) - var/list/turf/turfs = getline2(origin_turf, A) - var/distance = 0 - var/turf/prev_T - - for(var/turf/T in turfs) - if(T == loc) - prev_T = T - continue - if(!ammo.current_rounds) break - if(distance >= max_range) break - if(prev_T && LinkBlocked(prev_T, T)) - break - ammo.current_rounds-- - flame_turf(T, user) - distance++ - prev_T = T - sleep(1) - -/obj/item/hardpoint/secondary/small_flamer/proc/flame_turf(turf/T, mob/user) - if(!istype(T)) return - - if(!locate(/obj/flamer_fire) in T) // No stacking flames! - new/obj/flamer_fire(T, create_cause_data(initial(name), user)) + scatter = 6 + fire_delay = 3.0 SECONDS + +/obj/item/hardpoint/secondary/small_flamer/handle_fire(atom/target, mob/living/user, params) + var/turf/origin_turf = get_origin_turf() + + var/distance = get_dist(origin_turf, get_turf(target)) + var/fire_amount = min(ammo.current_rounds, distance+1, max_range) + ammo.current_rounds -= fire_amount + + new /obj/flamer_fire(origin_turf, create_cause_data(initial(name), user), null, fire_amount, null, FLAMESHAPE_LINE, target, CALLBACK(src, PROC_REF(display_ammo), user)) + + play_firing_sounds() + + COOLDOWN_START(src, fire_cooldown, fire_delay) + + return AUTOFIRE_CONTINUE diff --git a/code/modules/vehicles/hardpoints/secondary/frontal_cannon.dm b/code/modules/vehicles/hardpoints/secondary/frontal_cannon.dm index 4d454bed12a4..536b5742cfcd 100644 --- a/code/modules/vehicles/hardpoints/secondary/frontal_cannon.dm +++ b/code/modules/vehicles/hardpoints/secondary/frontal_cannon.dm @@ -11,10 +11,7 @@ damage_multiplier = 0.11 health = 350 - cooldown = 16 - accuracy = 0.8 firing_arc = 120 - var/burst_amount = 4 origins = list(0, -2) @@ -32,27 +29,15 @@ "8" = list(-62, -26) ) + scatter = 4 + gun_firemode = GUN_FIREMODE_AUTOMATIC + gun_firemode_list = list( + GUN_FIREMODE_AUTOMATIC, + ) + fire_delay = 0.3 SECONDS + /obj/item/hardpoint/secondary/frontalcannon/set_bullet_traits() ..() LAZYADD(traits_to_give, list( BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_iff) )) - -/obj/item/hardpoint/secondary/frontalcannon/fire(mob/user, atom/A) - if(ammo.current_rounds <= 0) - return - - next_use = world.time + cooldown * owner.misc_multipliers["cooldown"] - - for(var/bullets_fired = 1, bullets_fired <= burst_amount, bullets_fired++) - var/atom/T = A - if(!prob((accuracy * 100) / owner.misc_multipliers["accuracy"])) - T = get_step(get_turf(A), pick(cardinal)) - if(LAZYLEN(activation_sounds)) - playsound(get_turf(src), pick(activation_sounds), 60, 1) - fire_projectile(user, T) - if(ammo.current_rounds <= 0) - break - if(bullets_fired < burst_amount) //we need to sleep only if there are more bullets to shoot in the burst - sleep(3) - to_chat(user, SPAN_WARNING("[src] Ammo: [SPAN_HELPFUL(ammo ? ammo.current_rounds : 0)]/[SPAN_HELPFUL(ammo ? ammo.max_rounds : 0)] | Mags: [SPAN_HELPFUL(LAZYLEN(backup_clips))]/[SPAN_HELPFUL(max_clips)]")) diff --git a/code/modules/vehicles/hardpoints/secondary/grenade_launcher.dm b/code/modules/vehicles/hardpoints/secondary/grenade_launcher.dm index 8151a1ee50c1..efd151e93cb3 100644 --- a/code/modules/vehicles/hardpoints/secondary/grenade_launcher.dm +++ b/code/modules/vehicles/hardpoints/secondary/grenade_launcher.dm @@ -8,8 +8,6 @@ activation_sounds = list('sound/weapons/gun_m92_attachable.ogg') health = 500 - cooldown = 30 - accuracy = 0.4 firing_arc = 90 var/max_range = 7 @@ -27,40 +25,19 @@ "8" = list(-6, 17) ) + scatter = 10 + fire_delay = 3.0 SECONDS + /obj/item/hardpoint/secondary/grenade_launcher/set_bullet_traits() ..() LAZYADD(traits_to_give, list( BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_iff) )) -/obj/item/hardpoint/secondary/grenade_launcher/can_activate(mob/user, atom/A) - if(!..()) - return FALSE - - var/turf/origin_turf = get_turf(src) - origin_turf = locate(origin_turf.x + origins[1], origin_turf.y + origins[2], origin_turf.z) - if(get_dist(origin_turf, A) < 1) - to_chat(usr, SPAN_WARNING("The target is too close.")) - return FALSE - - return TRUE - -/obj/item/hardpoint/secondary/grenade_launcher/fire_projectile(mob/user, atom/A) - set waitfor = 0 - - var/turf/origin_turf = get_turf(src) - origin_turf = locate(origin_turf.x + origins[1], origin_turf.y + origins[2], origin_turf.z) - - //getting distance between supposed target and tank center. - var/range = get_dist(origin_turf, A) + 1 //otherwise nade falls one tile shorter - if(range > max_range) - range = max_range - - var/obj/projectile/P = generate_bullet(user, origin_turf) - SEND_SIGNAL(P, COMSIG_BULLET_USER_EFFECTS, owner.seats[VEHICLE_GUNNER]) - P.fire_at(A, owner.seats[VEHICLE_GUNNER], src, P.ammo.max_range, P.ammo.shell_speed) - - if(use_muzzle_flash) - muzzle_flash(Get_Angle(owner, A)) +/obj/item/hardpoint/secondary/grenade_launcher/try_fire(mob/user, atom/A) + var/turf/origin_turf = get_origin_turf() + if(origin_turf == get_turf(A)) + to_chat(user, SPAN_WARNING("The target is too close.")) + return NONE - ammo.current_rounds-- + return ..() diff --git a/code/modules/vehicles/hardpoints/secondary/tow.dm b/code/modules/vehicles/hardpoints/secondary/tow.dm index 4bdbc6f417fb..7c58f7970c7b 100644 --- a/code/modules/vehicles/hardpoints/secondary/tow.dm +++ b/code/modules/vehicles/hardpoints/secondary/tow.dm @@ -7,8 +7,6 @@ disp_icon_state = "towlauncher" health = 500 - cooldown = 150 - accuracy = 0.8 firing_arc = 60 origins = list(0, -2) @@ -29,3 +27,7 @@ "4" = list(5, -8), "8" = list(-5, 10) ) + + scatter = 4 + fire_delay = 15.0 SECONDS + diff --git a/code/modules/vehicles/hardpoints/special/firing_port_weapon.dm b/code/modules/vehicles/hardpoints/special/firing_port_weapon.dm index 9310556ee94f..780c195f00be 100644 --- a/code/modules/vehicles/hardpoints/special/firing_port_weapon.dm +++ b/code/modules/vehicles/hardpoints/special/firing_port_weapon.dm @@ -10,10 +10,7 @@ activation_sounds = list('sound/weapons/gun_smartgun1.ogg', 'sound/weapons/gun_smartgun2.ogg', 'sound/weapons/gun_smartgun3.ogg', 'sound/weapons/gun_smartgun4.ogg') health = 100 - cooldown = 10 - accuracy = 0.9 firing_arc = 120 - var/burst_amount = 3 //FPWs reload automatically var/reloading = FALSE var/reload_time = 10 SECONDS @@ -30,6 +27,13 @@ underlayer_north_muzzleflash = TRUE + scatter = 3 + gun_firemode = GUN_FIREMODE_AUTOMATIC + gun_firemode_list = list( + GUN_FIREMODE_AUTOMATIC, + ) + fire_delay = 0.3 SECONDS + /obj/item/hardpoint/special/firing_port_weapon/set_bullet_traits() ..() LAZYADD(traits_to_give, list( @@ -49,46 +53,6 @@ return data - -/obj/item/hardpoint/special/firing_port_weapon/can_activate(mob/user, atom/A) - if(!owner) - return FALSE - - var/seat = owner.get_mob_seat(user) - if(!seat) - return FALSE - - if(seat != allowed_seat) - to_chat(user, SPAN_WARNING("Only [allowed_seat] can use [name].")) - return FALSE - - //FPW stop working at 50% hull - if(owner.health < initial(owner.health) * 0.5) - to_chat(user, SPAN_WARNING("\The [owner]'s hull is too damaged!")) - return FALSE - - if(world.time < next_use) - if(cooldown >= 20) //filter out guns with high firerate to prevent message spam. - to_chat(user, SPAN_WARNING("You need to wait [SPAN_HELPFUL((next_use - world.time) / 10)] seconds before [name] can be used again.")) - return FALSE - - if(reloading) - to_chat(user, SPAN_NOTICE("\The [name] is reloading. Wait [SPAN_HELPFUL("[((reload_time_started + reload_time - world.time) / 10)]")] seconds.")) - return FALSE - - if(ammo && ammo.current_rounds <= 0) - if(reloading) - to_chat(user, SPAN_WARNING("\The [name] is out of ammo! You have to wait [(reload_time_started + reload_time - world.time) / 10] seconds before it reloads!")) - else - start_auto_reload(user) - return FALSE - - if(!in_firing_arc(A)) - to_chat(user, SPAN_WARNING("The target is not within your firing arc!")) - return FALSE - - return TRUE - /obj/item/hardpoint/special/firing_port_weapon/reload(mob/user) if(!ammo) ammo = new /obj/item/ammo_magazine/hardpoint/firing_port_weapon @@ -116,27 +80,32 @@ to_chat(user, SPAN_NOTICE("\The [name] reloads automatically.")) return FALSE +/obj/item/hardpoint/special/firing_port_weapon/try_fire(atom/target, mob/living/user, params) + if(!owner) + return NONE + + //FPW stop working at 50% hull + if(owner.health < initial(owner.health) * 0.5) + to_chat(user, SPAN_WARNING("\The [owner]'s hull is too damaged!")) + return NONE -/obj/item/hardpoint/special/firing_port_weapon/fire(mob/user, atom/A) if(user.get_active_hand()) to_chat(user, SPAN_WARNING("You need a free hand to use \the [name].")) - return + return NONE - if(ammo.current_rounds <= 0) - start_auto_reload(user) - return + if(reloading) + to_chat(user, SPAN_NOTICE("\The [name] is reloading. Wait [SPAN_HELPFUL("[((reload_time_started + reload_time - world.time) / 10)]")] seconds.")) + return NONE + + if(ammo && ammo.current_rounds <= 0) + if(reloading) + to_chat(user, SPAN_WARNING("\The [name] is out of ammo! You have to wait [(reload_time_started + reload_time - world.time) / 10] seconds before it reloads!")) + else + start_auto_reload(user) + return NONE + + if(!in_firing_arc(target)) + to_chat(user, SPAN_WARNING("The target is not within your firing arc!")) + return NONE - next_use = world.time + cooldown * owner.misc_multipliers["cooldown"] - - for(var/bullets_fired = 1, bullets_fired <= burst_amount, bullets_fired++) - var/atom/T = A - if(!prob((accuracy * 100) / owner.misc_multipliers["accuracy"])) - T = get_step(get_turf(A), pick(cardinal)) - if(LAZYLEN(activation_sounds)) - playsound(get_turf(src), pick(activation_sounds), 60, 1) - fire_projectile(user, T) - if(ammo.current_rounds <= 0) - break - if(bullets_fired < burst_amount) //we need to sleep only if there are more bullets to shoot in the burst - sleep(3) - to_chat(user, SPAN_WARNING("[src] Ammo: [SPAN_HELPFUL(ammo ? ammo.current_rounds : 0)]/[SPAN_HELPFUL(ammo ? ammo.max_rounds : 0)]")) + return handle_fire(target, user, params) diff --git a/code/modules/vehicles/hardpoints/support/artillery.dm b/code/modules/vehicles/hardpoints/support/artillery.dm index 441817107e7c..dfcdcaf73f74 100644 --- a/code/modules/vehicles/hardpoints/support/artillery.dm +++ b/code/modules/vehicles/hardpoints/support/artillery.dm @@ -14,7 +14,7 @@ var/view_buff = 10 //This way you can VV for more or less fun var/view_tile_offset = 7 -/obj/item/hardpoint/support/artillery_module/activate(mob/user, atom/A) +/obj/item/hardpoint/support/artillery_module/handle_fire(atom/target, mob/living/user, params) if(!user.client) return @@ -57,13 +57,14 @@ continue var/mob/user = C.seats[seat] if(!user.client) continue - user.client.change_view(world_view_size, owner) + user.client.change_view(GLOB.world_view_size, owner) user.client.pixel_x = 0 user.client.pixel_y = 0 is_active = FALSE -/obj/item/hardpoint/support/artillery_module/can_activate() +/obj/item/hardpoint/support/artillery_module/try_fire(target, user, params) if(health <= 0) to_chat(usr, SPAN_WARNING("\The [src] is broken!")) - return FALSE - return TRUE + return NONE + + return handle_fire(target, user, params) diff --git a/code/modules/vehicles/hardpoints/support/flare.dm b/code/modules/vehicles/hardpoints/support/flare.dm index 00dcd3ac1886..432c9636dadd 100644 --- a/code/modules/vehicles/hardpoints/support/flare.dm +++ b/code/modules/vehicles/hardpoints/support/flare.dm @@ -13,8 +13,6 @@ activatable = TRUE health = 500 - cooldown = 30 - accuracy = 0.7 firing_arc = 120 origins = list(0, -2) @@ -33,6 +31,9 @@ "8" = list(14, -6) ) + scatter = 6 + fire_delay = 3.0 SECONDS + /obj/item/hardpoint/support/flare_launcher/set_bullet_traits() ..() LAZYADD(traits_to_give, list( diff --git a/code/modules/vehicles/interior/interactable/seats.dm b/code/modules/vehicles/interior/interactable/seats.dm index ebd002ba0c76..253b4a066b4f 100644 --- a/code/modules/vehicles/interior/interactable/seats.dm +++ b/code/modules/vehicles/interior/interactable/seats.dm @@ -40,10 +40,10 @@ return if(QDELETED(buckled_mob)) - vehicle.set_seated_mob(seat, null) M.unset_interaction() + vehicle.set_seated_mob(seat, null) if(M.client) - M.client.change_view(world_view_size, vehicle) + M.client.change_view(GLOB.world_view_size, vehicle) M.client.pixel_x = 0 M.client.pixel_y = 0 M.reset_view() @@ -174,10 +174,10 @@ return if(QDELETED(buckled_mob)) - vehicle.set_seated_mob(seat, null) M.unset_interaction() + vehicle.set_seated_mob(seat, null) if(M.client) - M.client.change_view(world_view_size, vehicle) + M.client.change_view(GLOB.world_view_size, vehicle) M.client.pixel_x = 0 M.client.pixel_y = 0 else @@ -252,10 +252,10 @@ return if(QDELETED(buckled_mob)) - vehicle.set_seated_mob(seat, null) M.unset_interaction() + vehicle.set_seated_mob(seat, null) if(M.client) - M.client.change_view(world_view_size, vehicle) + M.client.change_view(GLOB.world_view_size, vehicle) M.client.pixel_x = 0 M.client.pixel_y = 0 M.reset_view() @@ -388,16 +388,6 @@ handle_rotation() -/obj/structure/bed/chair/vehicle/unbuckle() - if(buckled_mob && buckled_mob.buckled == src) - buckled_mob.buckled = null - buckled_mob.anchored = initial(buckled_mob.anchored) - - var/M = buckled_mob - buckled_mob = null - - afterbuckle(M) - //attack handling /obj/structure/bed/chair/vehicle/attack_alien(mob/living/user) diff --git a/code/modules/vehicles/interior/interactable/vehicle_locker.dm b/code/modules/vehicles/interior/interactable/vehicle_locker.dm index ab536c7637c6..5571995594f0 100644 --- a/code/modules/vehicles/interior/interactable/vehicle_locker.dm +++ b/code/modules/vehicles/interior/interactable/vehicle_locker.dm @@ -117,8 +117,8 @@ return container.attackby(W, user) /obj/structure/vehicle_locker/emp_act(severity) + . = ..() container.emp_act(severity) - ..() /obj/structure/vehicle_locker/hear_talk(mob/M, msg) container.hear_talk(M, msg) diff --git a/code/modules/vehicles/multitile/multitile.dm b/code/modules/vehicles/multitile/multitile.dm index 9e4d2c9d297b..f3b7be510b08 100644 --- a/code/modules/vehicles/multitile/multitile.dm +++ b/code/modules/vehicles/multitile/multitile.dm @@ -240,26 +240,15 @@ var/amt_hardpoints = LAZYLEN(hardpoints) if(amt_hardpoints) - var/list/hardpoint_images[amt_hardpoints] - var/list/C[HDPT_LAYER_MAX] - - // Counting sort the images into a list so we get the hardpoint images sorted by layer - for(var/obj/item/hardpoint/H in hardpoints) - C[H.hdpt_layer] += 1 - - for(var/i = 2 to HDPT_LAYER_MAX) - C[i] += C[i-1] - - for(var/obj/item/hardpoint/H in hardpoints) - hardpoint_images[C[H.hdpt_layer]] = H.get_hardpoint_image() - C[H.hdpt_layer] -= 1 - - for(var/i = 1 to amt_hardpoints) - var/image/I = hardpoint_images[i] - // get_hardpoint_image() can return a list of images - if(istype(I)) - I.layer = layer + (i*0.1) - overlays += I + for(var/obj/item/hardpoint/hardpoint in hardpoints) + var/image/hardpoint_image = hardpoint.get_hardpoint_image() + if(istype(hardpoint_image)) + hardpoint_image.layer = layer + hardpoint.hdpt_layer * 0.1 + else if(islist(hardpoint_image)) + var/list/image/hardpoint_image_list = hardpoint_image // Linter will complain about iterating on "an image" otherwise + for(var/image/subimage in hardpoint_image_list) + subimage.layer = layer + hardpoint.hdpt_layer * 0.1 + overlays += hardpoint_image if(clamped) var/image/J = image(icon, icon_state = "vehicle_clamp", layer = layer+0.1) @@ -351,15 +340,24 @@ M.reset_view(src) give_action(M, /datum/action/human_action/vehicle_unbuckle) +/// Get crewmember of seat. /obj/vehicle/multitile/proc/get_seat_mob(seat) return seats[seat] +/// Get seat of crewmember. /obj/vehicle/multitile/proc/get_mob_seat(mob/M) for(var/seat in seats) if(seats[seat] == M) return seat return null +/// Get active hardpoint of crewmember. +/obj/vehicle/multitile/proc/get_mob_hp(mob/crew) + var/seat = get_mob_seat(crew) + if(seat) + return active_hp[seat] + return null + /obj/vehicle/multitile/proc/get_passengers() if(interior) return interior.get_passengers() diff --git a/code/modules/vehicles/multitile/multitile_bump.dm b/code/modules/vehicles/multitile/multitile_bump.dm index d9b480866f99..48706805948f 100644 --- a/code/modules/vehicles/multitile/multitile_bump.dm +++ b/code/modules/vehicles/multitile/multitile_bump.dm @@ -106,14 +106,12 @@ return TRUE /obj/structure/surface/handle_vehicle_bump(obj/vehicle/multitile/V) - detach_all() playsound(V, 'sound/effects/metal_crash.ogg', 20) visible_message(SPAN_DANGER("\The [V] crushes \the [src]!")) qdel(src) return TRUE /obj/structure/surface/table/handle_vehicle_bump(obj/vehicle/multitile/V) - detach_all() playsound(V, 'sound/effects/metal_crash.ogg', 20) visible_message(SPAN_DANGER("\The [V] crushes \the [src]!")) if(prob(50)) @@ -122,7 +120,6 @@ return TRUE /obj/structure/surface/rack/handle_vehicle_bump(obj/vehicle/multitile/V) - detach_all() playsound(V, 'sound/effects/metal_crash.ogg', 20) visible_message(SPAN_DANGER("\The [V] crushes \the [src]!")) deconstruct() @@ -642,7 +639,7 @@ //Check what dir they should be facing to be looking directly at the vehicle else if(dir_between == dir) //front hit (facing the vehicle) blocked = TRUE - else if(dir_between == reverse_dir[dir]) // rear hit (facing directly away from the vehicle) + else if(dir_between == GLOB.reverse_dir[dir]) // rear hit (facing directly away from the vehicle) takes_damage = TRUE //side hit else if(caste.caste_type == XENO_CASTE_QUEEN) // queen blocks even with sides @@ -740,7 +737,7 @@ //BURROWER /mob/living/carbon/xenomorph/burrower/handle_vehicle_bump(obj/vehicle/multitile/V) - if(burrow) + if(HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) return TRUE else return . = ..() diff --git a/code/modules/vehicles/multitile/multitile_hardpoints.dm b/code/modules/vehicles/multitile/multitile_hardpoints.dm index 2c5a343b802a..a6014c6cf2cd 100644 --- a/code/modules/vehicles/multitile/multitile_hardpoints.dm +++ b/code/modules/vehicles/multitile/multitile_hardpoints.dm @@ -230,47 +230,3 @@ qdel(old) update_icon() - -//proc that fires non selected weaponry -/obj/vehicle/multitile/proc/shoot_other_weapon(mob/living/carbon/human/M, seat, atom/A) - - if(!istype(M)) - return - - var/list/usable_hps = get_hardpoints_with_ammo(seat) - for(var/obj/item/hardpoint/HP in usable_hps) - if(HP == active_hp[seat] || HP.slot != HDPT_PRIMARY && HP.slot != HDPT_SECONDARY) - usable_hps.Remove(HP) - - if(!LAZYLEN(usable_hps)) - to_chat(M, SPAN_WARNING("No other working weapons detected.")) - return - - for(var/obj/item/hardpoint/HP in usable_hps) - if(!HP.can_activate(M, A)) - return - HP.activate(M, A) - break - return - -//proc that activates support module if it can be activated and you meet requirements -/obj/vehicle/multitile/proc/activate_support_module(mob/living/carbon/human/M, seat, atom/A) - - if(!istype(M)) - return - - var/list/usable_hps = get_activatable_hardpoints(seat) - for(var/obj/item/hardpoint/HP in usable_hps) - if(HP.slot != HDPT_SUPPORT) - usable_hps.Remove(HP) - - if(!LAZYLEN(usable_hps)) - to_chat(M, SPAN_WARNING("No activatable support modules detected.")) - return - - for(var/obj/item/hardpoint/HP in usable_hps) - if(!HP.can_activate(M, A)) - return - HP.activate(M, A) - break - return diff --git a/code/modules/vehicles/multitile/multitile_interaction.dm b/code/modules/vehicles/multitile/multitile_interaction.dm index 42b141327bd8..aa2025d151b5 100644 --- a/code/modules/vehicles/multitile/multitile_interaction.dm +++ b/code/modules/vehicles/multitile/multitile_interaction.dm @@ -330,80 +330,61 @@ healthcheck() -/obj/vehicle/multitile/handle_click(mob/living/user, atom/A, list/mods) - - var/seat - for(var/vehicle_seat in seats) - if(seats[vehicle_seat] == user) - seat = vehicle_seat - break - - if(istype(A, /atom/movable/screen) || !seat) +/obj/vehicle/multitile/on_set_interaction(mob/user) + RegisterSignal(user, COMSIG_MOB_MOUSEDOWN, PROC_REF(crew_mousedown)) + RegisterSignal(user, COMSIG_MOB_MOUSEDRAG, PROC_REF(crew_mousedrag)) + RegisterSignal(user, COMSIG_MOB_MOUSEUP, PROC_REF(crew_mouseup)) + +/obj/vehicle/multitile/on_unset_interaction(mob/user) + UnregisterSignal(user, list(COMSIG_MOB_MOUSEUP, COMSIG_MOB_MOUSEDOWN, COMSIG_MOB_MOUSEDRAG)) + + var/obj/item/hardpoint/hardpoint = get_mob_hp(user) + if(hardpoint) + SEND_SIGNAL(hardpoint, COMSIG_GUN_INTERRUPT_FIRE) //abort fire when crew leaves + +/// Relays crew mouse release to active hardpoint. +/obj/vehicle/multitile/proc/crew_mouseup(datum/source, atom/object, turf/location, control, params) + SIGNAL_HANDLER + var/obj/item/hardpoint/hardpoint = get_mob_hp(source) + if(!hardpoint) return - if(seat == VEHICLE_DRIVER) - if(mods["shift"] && !mods["alt"]) - A.examine(user) - return - - if(mods["ctrl"] && !mods["alt"]) - activate_horn() - return - - var/obj/item/hardpoint/HP = active_hp[seat] - if(!HP) - to_chat(user, SPAN_WARNING("Please select an active hardpoint first.")) - return - - if(!HP.can_activate(user, A)) - return - - HP.activate(user, A) - - if(seat == VEHICLE_GUNNER) - if(mods["shift"] && !mods["middle"]) - if(vehicle_flags & VEHICLE_TOGGLE_SHIFT_CLICK_GUNNER) - shoot_other_weapon(user, seat, A) - else - A.examine(user) - return - if(mods["middle"] && !mods["shift"]) - if(!(vehicle_flags & VEHICLE_TOGGLE_SHIFT_CLICK_GUNNER)) - shoot_other_weapon(user, seat, A) - return - if(mods["alt"]) - toggle_gyrostabilizer() - return - if(mods["ctrl"]) - activate_support_module(user, seat, A) - return + hardpoint.stop_fire(source, object, location, control, params) - var/obj/item/hardpoint/HP = active_hp[seat] - if(!HP) - to_chat(user, SPAN_WARNING("Please select an active hardpoint first.")) - return +/// Relays crew mouse movement to active hardpoint. +/obj/vehicle/multitile/proc/crew_mousedrag(datum/source, atom/src_object, atom/over_object, turf/src_location, turf/over_location, src_control, over_control, params) + SIGNAL_HANDLER + var/obj/item/hardpoint/hardpoint = get_mob_hp(source) + if(!hardpoint) + return - if(!HP.can_activate(user, A)) - return + hardpoint.change_target(source, src_object, over_object, src_location, over_location, src_control, over_control, params) - HP.activate(user, A) +/// Checks for special control keybinds, else relays crew mouse press to active hardpoint. +/obj/vehicle/multitile/proc/crew_mousedown(datum/source, atom/object, turf/location, control, params) + SIGNAL_HANDLER - if(seat == VEHICLE_SUPPORT_GUNNER_ONE || seat == VEHICLE_SUPPORT_GUNNER_TWO) - if(mods["shift"]) - A.examine(user) - return - if(mods["middle"] || mods["alt"] || mods["ctrl"]) - return + var/list/modifiers = params2list(params) + if(modifiers[SHIFT_CLICK] || modifiers[MIDDLE_CLICK] || modifiers[RIGHT_CLICK]) //don't step on examine, point, etc + return - var/obj/item/hardpoint/HP = active_hp[seat] - if(!HP) - to_chat(user, SPAN_WARNING("Please select an active hardpoint first.")) - return + var/seat = get_mob_seat(source) + switch(seat) + if(VEHICLE_DRIVER) + if(modifiers[LEFT_CLICK] && modifiers[CTRL_CLICK]) + activate_horn() + return + if(VEHICLE_GUNNER) + if(modifiers[LEFT_CLICK] && modifiers[ALT_CLICK]) + toggle_gyrostabilizer() + return - if(!HP.can_activate(user, A)) - return + var/obj/item/hardpoint/hardpoint = get_mob_hp(source) + if(!hardpoint) + to_chat(source, SPAN_WARNING("Please select an active hardpoint first.")) + return - HP.activate(user, A) + hardpoint.start_fire(source, object, location, control, params) /obj/vehicle/multitile/proc/handle_player_entrance(mob/M) if(!M || M.client == null) return diff --git a/code/modules/vehicles/multitile/multitile_verbs.dm b/code/modules/vehicles/multitile/multitile_verbs.dm index c7dd29bbf0a9..3801cd2e176c 100644 --- a/code/modules/vehicles/multitile/multitile_verbs.dm +++ b/code/modules/vehicles/multitile/multitile_verbs.dm @@ -30,6 +30,10 @@ if(!HP) return + var/obj/item/hardpoint/old_HP = V.active_hp[seat] + if(old_HP) + SEND_SIGNAL(old_HP, COMSIG_GUN_INTERRUPT_FIRE) //stop fire when switching away from HP + V.active_hp[seat] = HP var/msg = "You select \the [HP]." if(HP.ammo) @@ -66,6 +70,10 @@ if(!HP) return + var/obj/item/hardpoint/old_HP = V.active_hp[seat] + if(old_HP) + SEND_SIGNAL(old_HP, COMSIG_GUN_INTERRUPT_FIRE) //stop fire when switching away from HP + V.active_hp[seat] = HP var/msg = "You select \the [HP]." if(HP.ammo) @@ -225,10 +233,7 @@ 3. \"G: Toggle Turret Gyrostabilizer\" - toggles Turret Gyrostabilizer allowing it to keep current direction ignoring hull turning. (Exists only on vehicles with rotating turret, e.g. M34A2 Longstreet Light Tank)
    \ Support Gunner verbs:
    1. \"Reload Firing Port Weapon\" - initiates automated reloading process for M56 FPW. Requires a confirmation.
    \ Driver shortcuts:
    1. \"CTRL + Click\" - activates vehicle horn.
    \ - Gunner shortcuts:
    1. \"ALT + Click\" - toggles Turret Gyrostabilizer. (Exists only on vehicles with rotating turret, e.g. M34A2 Longstreet Light Tank)
    \ - 2. \"CTRL + Click\" - activates not destroyed activatable support module.
    \ - 3. \"Middle Mouse Button Click (MMB)\" - default shortcut to shoot currently not selected weapon if possible. Won't work if SHIFT + Click firing is toggled ON.
    \ - 4. \"SHIFT + Click\" - examines target as usual, unless \"G: Toggle Middle/Shift Clicking\" verb was used to toggle SHIFT + Click firing ON. In this case, it will fire currently not selected weapon if possible.
    " + Gunner shortcuts:
    1. \"ALT + Click\" - toggles Turret Gyrostabilizer. (Exists only on vehicles with rotating turret, e.g. M34A2 Longstreet Light Tank)
    " show_browser(user, dat, "Vehicle Controls Guide", "vehicle_help", "size=900x500") onclose(user, "vehicle_help") diff --git a/code/modules/vehicles/tank/tank.dm b/code/modules/vehicles/tank/tank.dm index ad69f80cdfb6..147e359471df 100644 --- a/code/modules/vehicles/tank/tank.dm +++ b/code/modules/vehicles/tank/tank.dm @@ -157,7 +157,7 @@ if(!T) return FALSE - if(direction == reverse_dir[T.dir] || direction == T.dir) + if(direction == GLOB.reverse_dir[T.dir] || direction == T.dir) return FALSE T.user_rotation(user, turning_angle(T.dir, direction)) @@ -189,6 +189,8 @@ handle_direction(TANK) TANK.update_icon() + return TANK + /obj/effect/vehicle_spawner/tank/load_hardpoints(obj/vehicle/multitile/tank/V) V.add_hardpoint(new /obj/item/hardpoint/holder/tank_turret) @@ -201,6 +203,12 @@ /obj/effect/vehicle_spawner/tank/hull/load_hardpoints(obj/vehicle/multitile/tank/V) return +//Just the hull and it's broken TOO, you get the full experience +/obj/effect/vehicle_spawner/tank/hull/broken/spawn_vehicle() + var/obj/vehicle/multitile/tank/tonk = ..() + load_damage(tonk) + tonk.update_icon() + //PRESET: default hardpoints, destroyed /obj/effect/vehicle_spawner/tank/decrepit/spawn_vehicle() var/obj/vehicle/multitile/tank/TANK = new (loc) diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index 5192a6834050..2239329d3e44 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -112,6 +112,7 @@ return /obj/vehicle/emp_act(severity) + . = ..() var/was_on = on stat |= EMPED new /obj/effect/overlay/temp/emp_sparks (loc) diff --git a/code/names.dm b/code/names.dm deleted file mode 100644 index 0961d12f7d45..000000000000 --- a/code/names.dm +++ /dev/null @@ -1,39 +0,0 @@ -var/list/ai_names = file2list("strings/ai.txt") -var/list/first_names_male = file2list("strings/first_male.txt") -var/list/first_names_female = file2list("strings/first_female.txt") -var/list/last_names = file2list("strings/last.txt") -var/list/clown_names = file2list("strings/clown.txt") -var/list/operation_titles = file2list("strings/operation_title.txt") -var/list/operation_prefixes = file2list("strings/operation_prefix.txt") -var/list/operation_postfixes = file2list("strings/operation_postfix.txt") - -var/list/verbs = file2list("strings/verbs.txt") -//loaded on startup because of " -//would include in rsc if ' was used - - -var/list/first_names_male_clf = list("Alan","Jack","Bil","Jonathan","John","Shiro","Gareth","Clark","Sam", "Lionel", "Aaron", "Charlie", "Scott", "Winston", "Aidan", "Ellis", "Mason", "Wesley", "Nicholas", "Calvin", "Nishikawa", "Hiroto", "Chiba", "Ouchi", "Furuse", "Takagi", "Oba", "Kishimoto") -var/list/first_names_female_clf = list("Emma", "Adelynn", "Mary", "Halie", "Chelsea", "Lexie", "Arya", "Alicia", "Selah", "Amber", "Heather", "Myra", "Heidi", "Charlotte", "Oliva", "Lydia", "Tia", "Riko", "Ari", "Machida", "Ueki", "Mihara", "Noda") -var/list/last_names_clf = list("Hawkins","Rickshaw","Elliot","Billard","Cooper","Fox", "Barlow", "Barrows", "Stewart", "Morgan", "Green", "Stone", "Burr", "Hunt", "Yuko", "Gesshin", "Takanibu", "Tetsuzan", "Tomomi", "Bokkai", "Takesi") - -var/list/first_names_male_colonist = list("Alan","Jack","Bil","Jonathan","John","Shiro","Gareth","Clark","Sam", "Lionel", "Aaron", "Charlie", "Scott", "Winston", "Aidan", "Ellis", "Mason", "Wesley", "Nicholas", "Calvin", "Nishikawa", "Hiroto", "Chiba", "Ouchi", "Furuse", "Takagi", "Oba", "Kishimoto") -var/list/first_names_female_colonist = list("Emma", "Adelynn", "Mary", "Halie", "Chelsea", "Lexie", "Arya", "Alicia", "Selah", "Amber", "Heather", "Myra", "Heidi", "Charlotte", "Ashley", "Raven", "Tori", "Anne", "Madison", "Oliva", "Lydia", "Tia", "Riko", "Ari", "Machida", "Ueki", "Mihara", "Noda") -var/list/last_names_colonist = list("Hawkins","Rickshaw","Elliot","Billard","Cooper","Fox", "Barlow", "Barrows", "Stewart", "Morgan", "Green", "Stone", "Titan", "Crowe", "Krantz", "Pathillo", "Driggers", "Burr", "Hunt", "Yuko", "Gesshin", "Takanibu", "Tetsuzan", "Tomomi", "Bokkai", "Takesi") - -var/list/first_names_male_upp = list("Badai","Mongkeemur","Alexei","Andrei","Artyom","Viktor","Xiangai","Ivan","Choban","Oleg", "Dayan", "Taghi", "Batu", "Arik", "Orda", "Ghazan", "Bala", "Gao", "Zhan", "Ren", "Hou", "Xue", "Serafim", "Luca", "Su", "György", "István", "Mihály", "Vladimir", "Aleksandr", "Fyodor", "Bhodar", "Qazem", "Łukasz", "Miłogost", "Radogost", "Uniegost", "Hostirad", "Hostimil", "Hostisvit", "Lubgost", "Gościsław", "Vseslav", "Bohuměr", "Bronisław", "Česćiměr", "Dobysław", "Horisław", "Jaroměr", "Mirosław", "Mječisław", "Radoměr", "Stanij", "Stanisław", "Wjeleměr", "Wójsław") -var/list/first_names_female_upp = list("Altani","Cirina","Anastasiya","Saran","Wei","Oksana","Ren","Svena","Tatyana","Yaroslava", "Izabella", "Kata", "Krisztina", "Miruna", "Flori", "Lucia", "Anica", "Li", "Yimu", "Alona", "Hsiau-Li", "Xiaoling", "Erhong", "Baśka", "Angela", "Angelina", "Angja", "Ankica", "Biljana", "Bisera", "Bistra", "Blaga", "Blagica", "Blagorodna", "Verka", "Vladica", "Denica", "Živka", "Zlata", "Jagoda", "Letka", "Ljupka", "Mila", "Mirjana", "Mirka", "Rada", "Radmila", "Slavica", "Slavka", "Snežana", "Stojna", "Ubavka", "Jaromir", "Mscëwòj", "Subisłôw", "Swiãtopôłk", "Ji-Sun", "Chaeyong", "Chaewon", "Saerom", "Seoyeong", "Jiheon", "Hayoung") -var/list/last_names_upp = list("Azarov","Bogdanov","Barsukov","Golovin","Davydov","Khan","Noica","Barbu","Zhukov","Ivanov","Mihai","Kasputin","Belov", "Belova","Melnikov", "Vasilevsky", "Aleksander", "Halkovich", "Stanislaw", "Proca", "Zaituc", "Arcos", "Kubat", "Kral", "Volf", "Xun", "Jia", "Bachoń", "Wang", "Ji", "Xiang", "Zhang", "Mei", "Ma", "Kim", "Yi", "Ri", "Pak", "Chong", "Baek", "Kwon", "Hwang", "Roh", "Lee", "Song") - -var/list/first_names_male_pmc = list("Owen","Luka","Nelson","Branson", "Tyson", "Leo", "Bryant", "Kobe", "Rohan", "Riley", "Aidan", "Watase","Egawa", "Hisakawa", "Koide", "Remy", "Martial", "Magnus", "Heiko", "Lennard") -var/list/first_names_female_pmc = list("Madison","Jessica","Anna","Juliet", "Olivia", "Lea", "Diane", "Kaori", "Beatrice", "Riley", "Amy", "Natsue","Yumi", "Aiko", "Fujiko", "Jennifer", "Ashley", "Mary", "Hitomi", "Lisa") -var/list/last_names_pmc = list("Bates","Shaw","Hansen","Black", "Chambers", "Hall", "Gibson", "Weiss", "Waller", "Burton", "Bakin", "Rohan", "Naomichi", "Yakumo", "Yosai", "Gallagher", "Hiles", "Bourdon", "Strassman", "Palau") - -var/list/first_names_male_gladiator = list("Augustus", "Maximus", "Octavius", "Septimus", "Titus", "Brutus", "Caesar", "Justinian") -var/list/first_names_female_gladiator = list("Aelia", "Aquila", "Caecilia", "Camilla", "Claudia", "Flavia", "Martina", "Theodora") - -var/list/first_names_male_dutch = list("Raymond", "Jesse", "Jack", "John", "Sam", "Aaron", "Charlie", "Ellis", "Nick", "Francis", "Louis") -var/list/first_names_female_dutch = list("Chelsea", "Mira", "Jessica", "Catherine", "Eliza", "Emma", "Ashley", "Annie", "Alicia", "Miranda", "Ellen") - -var/list/monkey_names = list("Abu", "Aldo", "Bear", "Bingo", "Clyde", "Crystal", "Gordo", "George", "Koko", "Marcel", "Nim", "Rafiki", "Spike", "Banana", "Boots", "Bubbles", "Smiley", "Winston") - -var/list/weapon_surnames = list("Adze", "Axe", "Bagh Nakha", "Bo", "Bola", "Bow", "Bowman", "Cannon", "Carbine", "Cestus", "Club", "Culverin", "Dagger", "Dao", "Derringer", "Dha", "Dussack", "Emeici", "Falchion", "Fan", "Flyssa", "Gauntlet", "Hammer", "Halberd", "Harquebus", "Hatchet", "Hwando", "Katar", "Kampilan", "Knuckles", "Lance", "Lancer", "Larim", "Maduvu", "Mace", "Maru", "Mauser", "Messer", "Mine", "Mubucae", "Nyepel", "Onager", "Pata", "Pike", "Ram", "Saber", "Seax", "Shamsir", "Sickle", "Sling", "Spear", "Spears", "Staff", "Sword", "Tekko") diff --git a/colonialmarines.dme b/colonialmarines.dme index 3de84a97ce28..ab1b6deae245 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -17,7 +17,6 @@ #include "code\_experiments.dm" #include "code\_macros.dm" #include "code\global.dm" -#include "code\names.dm" #include "code\span_macros.dm" #include "code\stylesheet.dm" #include "code\__DEFINES\__game.dm" @@ -127,6 +126,7 @@ #include "code\__DEFINES\dcs\signals\signals_global.dm" #include "code\__DEFINES\dcs\signals\signals_subsystem.dm" #include "code\__DEFINES\dcs\signals\atom\signals_atom.dm" +#include "code\__DEFINES\dcs\signals\atom\signals_cell.dm" #include "code\__DEFINES\dcs\signals\atom\signals_item.dm" #include "code\__DEFINES\dcs\signals\atom\signals_movable.dm" #include "code\__DEFINES\dcs\signals\atom\signals_obj.dm" @@ -136,6 +136,14 @@ #include "code\__DEFINES\dcs\signals\atom\mob\living\signals_human.dm" #include "code\__DEFINES\dcs\signals\atom\mob\living\signals_living.dm" #include "code\__DEFINES\dcs\signals\atom\mob\living\signals_xeno.dm" +#include "code\__DEFINES\paygrade_defs\civilian.dm" +#include "code\__DEFINES\paygrade_defs\cmb.dm" +#include "code\__DEFINES\paygrade_defs\dutch.dm" +#include "code\__DEFINES\paygrade_defs\marines.dm" +#include "code\__DEFINES\paygrade_defs\navy.dm" +#include "code\__DEFINES\paygrade_defs\provost.dm" +#include "code\__DEFINES\paygrade_defs\upp.dm" +#include "code\__DEFINES\paygrade_defs\weyland.dm" #include "code\__DEFINES\typecheck\assemblers.dm" #include "code\__DEFINES\typecheck\datums.dm" #include "code\__DEFINES\typecheck\generic_types.dm" @@ -183,10 +191,12 @@ #include "code\_globalvars\misc.dm" #include "code\_globalvars\regexes.dm" #include "code\_globalvars\tgui.dm" +#include "code\_globalvars\lists\clans.dm" #include "code\_globalvars\lists\client.dm" #include "code\_globalvars\lists\keybindings.dm" #include "code\_globalvars\lists\mapping_globals.dm" #include "code\_globalvars\lists\mobs.dm" +#include "code\_globalvars\lists\names.dm" #include "code\_globalvars\lists\object_lists.dm" #include "code\_onclick\adjacent.dm" #include "code\_onclick\ai.dm" @@ -271,6 +281,7 @@ #include "code\controllers\subsystem\police_clues.dm" #include "code\controllers\subsystem\power.dm" #include "code\controllers\subsystem\predships.dm" +#include "code\controllers\subsystem\profiler.dm" #include "code\controllers\subsystem\projectiles.dm" #include "code\controllers\subsystem\quadtrees.dm" #include "code\controllers\subsystem\reagents.dm" @@ -331,7 +342,6 @@ #include "code\datums\mind.dm" #include "code\datums\mixed.dm" #include "code\datums\mob_hud.dm" -#include "code\datums\modules.dm" #include "code\datums\movement_detector.dm" #include "code\datums\mutable_appearance.dm" #include "code\datums\quadtree.dm" @@ -379,6 +389,7 @@ #include "code\datums\components\armor_link.dm" #include "code\datums\components\bad_leg.dm" #include "code\datums\components\bonus_damage_stack.dm" +#include "code\datums\components\cell.dm" #include "code\datums\components\cluster_stack.dm" #include "code\datums\components\connect_mob_behalf.dm" #include "code\datums\components\crate_tag.dm" @@ -557,6 +568,7 @@ #include "code\datums\langchat\langchat.dm" #include "code\datums\looping_sounds\_looping_sound.dm" #include "code\datums\looping_sounds\item_sounds.dm" +#include "code\datums\looping_sounds\misc_sounds.dm" #include "code\datums\origin\civilian.dm" #include "code\datums\origin\origin.dm" #include "code\datums\origin\upp.dm" @@ -571,7 +583,7 @@ #include "code\datums\pain\pain_zombie.dm" #include "code\datums\paygrades\helper.dm" #include "code\datums\paygrades\paygrade.dm" -#include "code\datums\paygrades\factions\civillian\civilian.dm" +#include "code\datums\paygrades\factions\other\civilian.dm" #include "code\datums\paygrades\factions\other\cmb.dm" #include "code\datums\paygrades\factions\other\contractors.dm" #include "code\datums\paygrades\factions\other\dutch_dozen.dm" @@ -582,7 +594,6 @@ #include "code\datums\paygrades\factions\uscm\marine.dm" #include "code\datums\paygrades\factions\uscm\navy.dm" #include "code\datums\paygrades\factions\uscm\provost.dm" -#include "code\datums\paygrades\factions\wy\goons.dm" #include "code\datums\paygrades\factions\wy\pmc.dm" #include "code\datums\paygrades\factions\wy\wy.dm" #include "code\datums\redis\redis_message.dm" @@ -1096,6 +1107,7 @@ #include "code\game\objects\items\devices\radio\encryptionkey.dm" #include "code\game\objects\items\devices\radio\headset.dm" #include "code\game\objects\items\devices\radio\intercom.dm" +#include "code\game\objects\items\devices\radio\listening_bugs.dm" #include "code\game\objects\items\devices\radio\radio.dm" #include "code\game\objects\items\explosives\explosive.dm" #include "code\game\objects\items\explosives\mine.dm" @@ -1295,6 +1307,7 @@ #include "code\game\objects\structures\crates_lockers\closets\secure\engineering.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\freezer.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\hydroponics.dm" +#include "code\game\objects\structures\crates_lockers\closets\secure\kitchen.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\medical.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\personal.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\scientist.dm" @@ -1349,8 +1362,6 @@ #include "code\game\verbs\preferences.dm" #include "code\game\verbs\records.dm" #include "code\game\verbs\who.dm" -#include "code\js\byjax.dm" -#include "code\js\menus.dm" #include "code\modules\trigger.dm" #include "code\modules\admin\admin.dm" #include "code\modules\admin\admin_ranks.dm" @@ -1387,6 +1398,8 @@ #include "code\modules\admin\tabs\event_tab.dm" #include "code\modules\admin\tabs\round_tab.dm" #include "code\modules\admin\tabs\server_tab.dm" +#include "code\modules\admin\tacmap_panel\tacmap_admin_panel.dm" +#include "code\modules\admin\tacmap_panel\tacmap_admin_panel_tgui.dm" #include "code\modules\admin\topic\topic.dm" #include "code\modules\admin\topic\topic_chems.dm" #include "code\modules\admin\topic\topic_events.dm" diff --git a/config/example/config.txt b/config/example/config.txt index 8e8bb2b754d5..8a976e02a580 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -140,6 +140,9 @@ RULESURL https://cm-ss13.com/viewtopic.php?f=57&t=5094 ## Ban appeals URL - usually for a forum or wherever people should go to contact your admins. BANAPPEALS https://cm-ss13.com/viewforum.php?f=76 +## Discord URL - uncomment and add a valid Discord invite link (remember to make it a permanent one, since it does not default to it) to make the Discord button work properly. +## DISCORDURL + ## In-game features ## Remove the # to show a popup 'reply to' window to every non-admin that recieves an adminPM. ## The intention is to make adminPMs more visible. (although I fnd popups annoying so this defaults to off) diff --git a/html/changelogs/AutoChangeLog-pr-4863.yml b/html/changelogs/AutoChangeLog-pr-4863.yml deleted file mode 100644 index 3fb781dcb8be..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4863.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Drathek" -delete-after: True -changes: - - bugfix: "Fixed imaginary friend merge ability preventing hearing if ghost ears are set to only nearby." - - bugfix: "Fixed imaginary friend hide ability not updating its icons." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4872.yml b/html/changelogs/AutoChangeLog-pr-4872.yml deleted file mode 100644 index 2d08135f4a9f..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4872.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Drathek" -delete-after: True -changes: - - bugfix: "Fixed fax template images in CDN mode" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4959.yml b/html/changelogs/AutoChangeLog-pr-4959.yml new file mode 100644 index 000000000000..353ab3f02880 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4959.yml @@ -0,0 +1,5 @@ +author: "Doubleumc" +delete-after: True +changes: + - refactor: "vehicle weapons can fire full-auto" + - rscdel: "no more controls for firing vehicle non-selected weapons" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4976.yml b/html/changelogs/AutoChangeLog-pr-4976.yml new file mode 100644 index 000000000000..2a0de1ec20d0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4976.yml @@ -0,0 +1,4 @@ +author: "zzzmike, drathek, ihatethisengine2" +delete-after: True +changes: + - rscadd: "Lifeboat launch now has an ARES announcement followed by a 10 second delay before doors close. The current launch functionality is preserved as Emergency Launch." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5073.yml b/html/changelogs/AutoChangeLog-pr-5073.yml new file mode 100644 index 000000000000..6eb992e2759c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5073.yml @@ -0,0 +1,4 @@ +author: "realforest2001" +delete-after: True +changes: + - admin: "Added a Check Ckey verb to analyze for multikey. We're watching you Wazowski. Always watching." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5083.yml b/html/changelogs/AutoChangeLog-pr-5083.yml new file mode 100644 index 000000000000..8688793c2ffb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5083.yml @@ -0,0 +1,4 @@ +author: "Ediblebomb" +delete-after: True +changes: + - rscadd: "M5 Helmet Gasmask now functions as a gasmask when in a marine helmet (and yes, gasmasks do still have some functionality)" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5099.yml b/html/changelogs/AutoChangeLog-pr-5099.yml new file mode 100644 index 000000000000..bbdd8c2954be --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5099.yml @@ -0,0 +1,4 @@ +author: "realforest2001" +delete-after: True +changes: + - code_imp: "Cleaned up 1 letter vars in the global datacore. Also made the entry names reflect the real name of who they relate to, for VV purposes." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5111.yml b/html/changelogs/AutoChangeLog-pr-5111.yml new file mode 100644 index 000000000000..61bab6e59ca9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5111.yml @@ -0,0 +1,4 @@ +author: "zzzmike" +delete-after: True +changes: + - bugfix: "disarm chance wasn't calculating properly" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5117.yml b/html/changelogs/AutoChangeLog-pr-5117.yml new file mode 100644 index 000000000000..7c87e5dfa082 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5117.yml @@ -0,0 +1,4 @@ +author: "VileBeggar" +delete-after: True +changes: + - soundadd: "The XM88 now has a scaling hit sound for every direct hit you manage to land with it." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5119.yml b/html/changelogs/AutoChangeLog-pr-5119.yml new file mode 100644 index 000000000000..5ec2e0a33e33 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5119.yml @@ -0,0 +1,4 @@ +author: "Drathek" +delete-after: True +changes: + - bugfix: "Fix some errors regarding the nano subystem" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5120.yml b/html/changelogs/AutoChangeLog-pr-5120.yml new file mode 100644 index 000000000000..eb9c6fc96e9a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5120.yml @@ -0,0 +1,4 @@ +author: "Drathek" +delete-after: True +changes: + - code_imp: "Reduced most preference re-saving when preferences are initially loaded" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5121.yml b/html/changelogs/AutoChangeLog-pr-5121.yml new file mode 100644 index 000000000000..5daa315b8e9f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5121.yml @@ -0,0 +1,4 @@ +author: "SabreML" +delete-after: True +changes: + - spellcheck: "Fixed instances of \"The the\" and \"A the\" in chat messages so that they're just \"The\" instead. (Part 2)" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5125.yml b/html/changelogs/AutoChangeLog-pr-5125.yml new file mode 100644 index 000000000000..236ad26c2f8d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5125.yml @@ -0,0 +1,5 @@ +author: "SabreML" +delete-after: True +changes: + - admin: "Fixed a freeze when opening the the 'Create Object' interface." + - admin: "Adjusted the size and positioning of the 'Create Object/Mob/Turf' panels so that everything fits into the window." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5127.yml b/html/changelogs/AutoChangeLog-pr-5127.yml new file mode 100644 index 000000000000..6aa332377bce --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5127.yml @@ -0,0 +1,5 @@ +author: "realforest2001" +delete-after: True +changes: + - bugfix: "Fixes custom sent ERTs broadcasting when they shouldn't." + - bugfix: "Fixes UPP friendly ERT telling staff it's hostile." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5128.yml b/html/changelogs/AutoChangeLog-pr-5128.yml new file mode 100644 index 000000000000..572e5b13f457 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5128.yml @@ -0,0 +1,6 @@ +author: "realforest2001" +delete-after: True +changes: + - code_imp: "Paygrade shorthands now use defines." + - bugfix: "CLF and Survivors are no longer privates." + - bugfix: "Civillian Mr/Ms/Mx prefix now works correctly, and is the default for new ID cards." \ No newline at end of file diff --git a/html/changelogs/archive/2023-11.yml b/html/changelogs/archive/2023-11.yml index 728ad07e8a98..02e7bf43396b 100644 --- a/html/changelogs/archive/2023-11.yml +++ b/html/changelogs/archive/2023-11.yml @@ -152,3 +152,274 @@ - rscadd: You can now label crate with package wrap, which will also be shown during overwatch supply drop alert. - mapadd: Added more packaging wrap to Requisitions. +2023-11-10: + Drathek: + - bugfix: Fixed fax template images in CDN mode + - bugfix: Fixed imaginary friend merge ability preventing hearing if ghost ears + are set to only nearby. + - bugfix: Fixed imaginary friend hide ability not updating its icons. + MorrowWolf: + - bugfix: Fixed Pumpkins appearing past season. + MrDas: + - bugfix: You can no longer see through solid rear drop ship doors. + - code_imp: Moved filler turf logic from almayer airlocks to its parent door. + SpartanBobby: + - maptweak: fixes conflicting tiles on USS Almayer squad bunks + - maptweak: updates multiple bedrooms and closet area detailing +2023-11-11: + QuickLode: + - rscadd: SUPERLIGHT armor category. + - balance: M4 Synthetic Armor slows by 10% to justify having 1 extra storage slot. + - spellcheck: Clarifies M4 Synthetic Armor description that it does not have any + armor whatsoever. +2023-11-12: + SpartanBobby Tophatpenguin: + - maptweak: redetails a room on the upper deck of the USS Almayer, places a few + L42As in this room +2023-11-14: + BeagleGaming1: + - rscdel: Removes icon baking on surfaces (primarily seen on tables) + Birdtalon: + - bugfix: Boiler acid shroud now works on hotkey 5 + - code_imp: Replaces single letter vars and removes unused code for boiler. + - code_imp: Replaces burrow var from Xenomorph with burrowed trait + - code_imp: Starts refactoring some vars on xenomorph class + - rscadd: Observer with Security HUD enabled can examine and read security records. + - rscadd: Toggle HUD button to ghost UI + BraveMole, Zonespace: + - bugfix: Guns should no longer very rarely jam mid-burst. + Ediblebomb: + - qol: Changed "Subject is brain-dead." to "Subject has taken extreme amounts of + brain damage." when scanning somebody with 100 brain damage. + Releasethesea: + - bugfix: Fixxed the improperly area'd hull south of construction site, adds fire + shutters to north fueling pod to make it mirror the south one + - rscadd: Adds Colonial Space Grunts to rec vend aswell as several pens and Dice + for playing the game. + - rscadd: Adds functional bedrolls to the game. + SpartanBobby: + - maptweak: fixes broken sidewalk on bigred + Steelpoint: + - rscadd: Less powerful variants of the Commando ERTs (Marsoc, WY Whiteout, UPP + Commandos) have been added for admin use. + - admin: The powerful versions of commando ERTs are denoted with (!DEATHSQUAD!) + in the distress call and equipment preset menus. + fira: + - bugfix: Fixed ghost droppods appearing when launching crates by Echo pad. + - bugfix: Fixed an issue in traits backend update causing among others leadership + action buttons to be missing. +2023-11-15: + Birdtalon: + - code_imp: Replaced single letter vars in runner code. +2023-11-16: + fira: + - bugfix: Rooting effects should now properly update when stacked and unstacked. +2023-11-17: + Birdtalon: + - bugfix: Lurker can no longer tail jab through doors/structures. + - code_imp: Var disambiguation, cleanup and removal of redundant typechecks in lurker + code. + - bugfix: Adds missing newline when viewing sec records as observer. + - bugfix: Fixes posters in CL office displaying IO description. + - code_imp: Replaces single letter var in hivelord code + - code_imp: Replaces single letter vars in ravager code + - code_imp: Refactors vending machine global scope procs + Doubleumc: + - rscadd: vehicles can be followed by ghosts + SpartanBobby, GDS Pathe: + - maptweak: Updates bigred floortiles + - maptweak: Re-adds reactor to bigred + Steelpoint: + - maptweak: LV-624's Caves have had an aesthetic change regarding jungle tiles and + flora. + casperr04: + - bugfix: Removes the ability to fulton bodies that can still be revived + fira: + - admin: VV 'Modify Transform' can now be used to flip objects. + - bugfix: Horizontal Almayer walls no longer change icon randomly, and now properly + display damage overlays. + realforest2001: + - rscadd: Faxes sent from HighCom fax machines now appear in their correct category. + sleepynecrons: + - imageadd: fixes biosuit body sprite not properly covering mobs +2023-11-18: + Cthulhu80, Drathek: + - rscadd: Adds drawing to tactical maps, viewable via stat panel for marines and + xeno tacmap for xenos. + - bugfix: Corrupted (and other hives) now have separate tactical maps. + fira: + - admin: Moderators are now immune to inactivity kick, much like Admins. + - bugfix: Fixed the tank driving through vehicle blockers and accessing "deep" parts + of the map it wasn't intended to push. + - bugfix: Tentatively fixed some visual bugs with turret based vehicles. + - bugfix: Fixed using the tank coupon as first vehicle spawn causing Gear Vendor + to still give out APC gear. + - admin: Added an APC coupon in same vein as Tank Coupon for Admins to use. + - admin: Tank/APC Coupons now spawn broken down versions of the vehicles, for the + full VC experience. You want a ready to use one, just spawn it. + - admin: Tank/APC coupons do not spawn VC pamphlets in ASRS anymore. + - admin: Added a vehicle_flag for tanks to bypass blockers (in a legit fashion this + time). Abuse at your discretion. + ihatethisengine: + - rscadd: Cloaked lurker devouring now shows a message to target again. +2023-11-20: + Zonespace27: + - bugfix: Jump-to-area verb will now warn you if there aren't any turfs in the given + area. +2023-11-21: + hislittlecuzingames: + - code_imp: Added ability to have looping sounds from further away +2023-11-22: + AnturK: + - server: the server now supports auto-profiling + Birdtalon: + - code_imp: Removes some istype(src) + Morrow: + - rscadd: Mess tech positions now scale from 1 to 2 after 70 marines are in the + game + hislittlecuzingames: + - rscadd: Launch Announcement Alarm for dropships to notify ground forces of departure. +2023-11-23: + Birdtalon: + - rscdel: Lesser drones die upon ghosting and are not offered to observers. + - rscadd: Explosion handling logic to experimental sensor tower. + - bugfix: Explosions no longer delete experimental sensor tower. + - bugfix: Pylons now differentiated in the input list with a (1) if in the same + area. + Drathek: + - bugfix: Resin doors will now close on dead mobs that are merged with weeds (currently + only human). + - bugfix: Resin doors will now restart their closing timer each open making the + delay to close consistent. + - code_imp: Added a TRAIT_MERGED_WITH_WEEDS that is set whenever the mob is currently + merged with weeds. + - bugfix: 'Fixed buried larva spawn grace period at start of round if there is a + queue: Now join as xeno when there''s a queue will only prevent buried larva + spawns if there is no core.' + - bugfix: 'Tweaked larva queue spawning: Now spawns as many larva as possible each + cycle rather than one.' + LC4492: + - maptweak: 'Changes to the CO office: The bathroom now faces into the CO''s bedroom, + and not to his main office. Victory cabinet have been moved to the Officer''s + mess because of logical issues. Extra-detail to the office, including an exclusive + stamp, table flags and others. The safe is now inside the CO''s bedroom, and + not in his office. The energy APC is now inside the CO''s bedroom, and not in + his office. Jones finally have a BED again, or something like that. Other minor + changes to objects, such the addition of a cane, a box of glasses for serving + guests, etc.' + QuickLode: + - rscadd: Damage to Synthetic's internal causes debuffs, eventual powercell failure.(death) + - bugfix: Synthetic's should no longer lose blood. + - code_imp: moves blood proc to human.dm from blood.dm with above changes. + SortieEnMer: + - qol: Match Unlock Time in Nuke Timelock Message with Nuke Techtree Description + Steelpoint: + - maptweak: Secure Storage on LV-624 has been broken open, making it far less defendable + but easier to access. + fira: + - bugfix: The Thunderdome floor is now explosion-proof. + - balance: Default Web Music Player volume is now 20% down from 50%. It was found + too effective against new players. + - admin: '"Play Internet Sound" is now "Play Admin Sound" and optionally allow to + hide the track name.' + - admin: '"Play Admin Sound" can now be used with uploaded tracks, which use CDN + delivery and the in-chat music player, granting players more control over them.' + - admin: Removed "Play Midi Sound". + ihatethisengine: + - balance: Oppressor no longer can abduct big xenos. + zzzmike: + - qol: ARES hijack announcement specifies that pods will not crash at 100% fuel + - qol: Location name standardization. So, North is now Starboard. This is already + how it is for everything except pumps. +2023-11-25: + BadAtThisGame302: + - bugfix: fixed corporate supervisor burst corpse landmark + Birdtalon: + - bugfix: Fixes defender headbutt bug while fortified. + - bugfix: Lifeboats fire extinguisher runtime. + Doubleumc: + - imageadd: 2-wide dropship side doors + - maptweak: changed dropship side doors to a lone doublewide door + - qol: directions in trackers and messages are more accurate + HeresKozmos: + - bugfix: fixed a nonsensical window facing a solid rock wall + - rscadd: Added pizza and pizza cutter to Req + - rscdel: Deleted a random kepler crisps bag + - bugfix: deleted random raised edges from inside rock wall + Releasethesea: + - bugfix: fixes the XM43E1s name (previously named XM42B) and sprite, fixes the + M42C and XM43E1s barrel, correctly names several items relating to the XM43E1 + SabreML: + - ui: Tweaked the colour of the 'Maintainer' category in staffwho. + ihatethisengine: + - rscadd: Locking down dropship's doors closes them before locking. + realforest2001: + - rscadd: Telephones now list the last attempted caller, above the DND button. +2023-11-26: + Birdtalon: + - code_imp: Replaces single letter vars removes redundant abilitiesin warrior code. + - bugfix: Warriors can no longer behead caps if they start limb ripping before embryo + is inserted. + - code_imp: Refactors warrior limb proc to the warrior class. + Huffie56: + - rscadd: Added a new section to role squad vendors called binoculars except specialist. + - qol: moved NVG and medical hud into helmet optics section for SL and just NVG + for TL + Nanu308: + - rscdel: Removed the Pizza Cutter. +2023-11-27: + Birdtalon: + - bugfix: "Fixes vendor sprites not updating icon when fully repaired\n/\U0001F191" + - bugfix: Fix lesser drone crash on getting gibbed. + Doubleumc: + - bugfix: CORSAT poddoors no longer have extra sprites overlaid on them + - maptweak: CORSAT LZs can be used by shuttles + HeresKozmos: + - rscadd: Added eight new tunnels to Sorokyne + - rscdel: Removed the original five tunnels on Sorokyne + SabreML: + - rscadd: Made the character preview in the character creation menu show the 'Preferred + Armor' setting. + - bugfix: Fixed 'Padded' armour being replaced by the user's armour style preference + when vended. + - qol: Made the squad prep attachments vendors vend items into the user's hands. + Zonespace27: + - bugfix: The Self Destruct timer in the status panel will now stop once SD has + gone off. + hislittlecuzingames: + - bugfix: Disables launch announcment alarm if it's sounding when queen hijacks +2023-11-28: + Birdtalon: + - rscadd: Eggsac carrier can now place eggs on normal weeds to a maximum of 4 eggs. + - rscadd: Eggsac carrier eggs on normal weeds have an expiry date. + fira: + - code_imp: Ported basic /tg/ Status Backend. + - rscadd: Human transform changes such as lying down, knock down, buckling, are + now animated. + - bugfix: Some statuses will now take effect immediately instead of waiting for + a life tick, notably Resting. + - balance: Many interaction requirements were changed to eg. fail upon stuns rather + than if lying down. + stalkerino: + - rscadd: readds skull facepaint and skull balaclava (blue and black) +2023-11-29: + realforest2001: + - rscdel: Whiskey Outpost no longer rolls pred rounds naturally. +2023-11-30: + Birdtalon: + - code_imp: Refactiors xenomorph initialize & removes some duplicate proc calls + HeresKozmos: + - mapadd: added a new spring area to kutjevo's south caves + Huffie56: + - rscadd: Added a lot's of food boxes for that hold the basic ingredients for cooking. + - rscadd: Added a file to handle the fridges in almayer kitchen. + - rscadd: Added a vendor in the kitchen that sell boxes of ingredients. + - rscadd: Added a a food crate called surplus boxes ingredient containing random + boxes of ingredients. + - rscadd: Added a version of this crate that will be freely given via the ASR system. + SabreML: + - bugfix: Fixed a few space tiles under a window in Kutjevo Refinery. + harryob: + - bugfix: the health indicator in the tooltip and colorbox is still present when + a POI has 0 health + - bugfix: admins can refresh the orbit menu without runtimes diff --git a/html/changelogs/archive/2023-12.yml b/html/changelogs/archive/2023-12.yml new file mode 100644 index 000000000000..f6213027ce92 --- /dev/null +++ b/html/changelogs/archive/2023-12.yml @@ -0,0 +1,85 @@ +2023-12-01: + Birdtalon: + - bugfix: Eggsac fragile eggs can be placed on hardy weeds. + Morrow: + - rscdel: Removed flame particles. Possibly increases performance for some players. + Zonespace27: + - bugfix: Resin holes can no longer be planted below stairs +2023-12-02: + 567Turtle: + - rscadd: Brown boots and gloves are now vendable from the surplus vendors. + Birdtalon: + - rscadd: '"Infernal" name prefix for xeno who rolls number 666' + - code_imp: Refactors xeno name generation. Larva name generation and removes some + istype(src) + - bugfix: 'Restricts burrower tunnels to alphanumeric characters as some other characters + break the tunnel. + + code; Adds new proc to replace non alphanumeric or space characters.' + Morrow: + - code_imp: Corrected a check to avoid repeat work in /datum/asset/spritesheet/vending_products/register() + realforest2001: + - rscadd: Added disguisable listening bugs/devices. MPs have two outside CMP office, + the CL has two in their bedroom. + - bugfix: Fixes incorrect frequencies being used to display channel names on radios. + - bugfix: Radios and tape recorders placed on tables or placed inside webbing can + now hear speech again. +2023-12-03: + BadAtThisGame302: + - rscadd: Added a flavor diary entry from the Director of Lambda + - mapadd: added back the old vault nightmare insert on Solaris which was removed + due to the creation of static comms where it spawned + - maptweak: tweaked the Lambda Director's Office + - maptweak: tweaked the Lambda Administration Office + - maptweak: tweaked the Lambda Relaxation Room + SpartanBobby: + - maptweak: Redetails Almayer Squad briefing rooms + blackdragonTOW: + - maptweak: Standardized the names of LZs to include the name of the LZ. + stalkerino: + - bugfix: fixes the skull facepaint, black mask, blue mask +2023-12-04: + Birdtalon: + - bugfix: "Upgraded resin walls can now nest hosts.\n/\U0001F191" + - rscadd: Radial Menu for xeno Evolve + IowaPotatoFarmer: + - rscadd: Added a Corporate Liaison survivor to Sorokyne. + - rscadd: Added a modified version of the liaison's winter coat that allows it to + holster guns and a few other things. Only available to the Sorokyne Strata Corporate + Liaison for now. + - spellcheck: Fixed a typo in the Sorokyne Strata Political Prisoner's ID tag. + MrDas: + - bugfix: Observer minimap should no longer occasionally show wrong / no map. + SabreML: + - ui: Removed the scrollbar from the 'Player setup' menu. + cuberound: + - bugfix: fixed a runtime in /datum/component/healing_reduction/process(delta_time) + ihatethisengine: + - rscadd: Whiskey outpost is voteable less often and requires 140 players. + realforest2001: + - bugfix: Fixes /spec_kit/asrs (now /spec_kit/rifleman) not allowing use. + - code_imp: Adds back-end functionality for token redeeming on cm_vending vendors, + and moves synth experimental tools token to use it. + - rscadd: Spec tokens are real. +2023-12-05: + Birdtalon: + - bugfix: "Fixes a runtime in vendors\n/\U0001F191" + Huffie56: + - rscadd: added new sections(Binoculars, Utilities, Helmet Optics, Radio keys, and + fill them with items already in the vendor. + - qol: move the section called pouches just above utilities section. + - qol: changed the section called "Supplies" to "engineering supplies" and fill + it with C4 and APC circuit board . + SabreML: + - spellcheck: Fixed instances of "The the" and "A the" in chat messages so that + they're just "The" instead. (Part 1) + Tsurupeta: + - bugfix: fixed saving of certain preferences. + silencer_pl: + - admin: Recieving prayers now makes a sound + - admin: Prayers and USCM emergency messages are now better highlighted for mods/admins +2023-12-06: + Birdtalon: + - bugfix: "Fixes runtime in spiders.dm\n/\U0001F191" + Blundir: + - rscadd: added new ammo boxes for various weapons and ammo diff --git a/html/create_object.html b/html/create_object.html index a4c3085a9ac6..8e67b99aebca 100644 --- a/html/create_object.html +++ b/html/create_object.html @@ -9,16 +9,17 @@
    - Type
    - Offset: + Offset: A R
    Number: Dir: - Name:
    + Name:
    + Where:

    +
    @@ -37,13 +39,11 @@ var objects = object_paths == null ? new Array() : object_paths.split(";"); document.spawner.filter.focus(); - populateList(objects); function populateList(from_list) { object_list.options.length = 0; - var i; - for (i in from_list) { + for (var i in from_list) { var new_option = document.createElement("option"); new_option.value = from_list[i]; new_option.text = from_list[i]; @@ -71,6 +71,7 @@ return false; } + // Carriage return if (event.keyCode == 13 || event.which == 13) { object_list.options[0].selected = 'true'; } diff --git a/html/images/ColonialSpaceGruntsEZ.png b/html/images/ColonialSpaceGruntsEZ.png new file mode 100644 index 000000000000..7db4ca5ba768 Binary files /dev/null and b/html/images/ColonialSpaceGruntsEZ.png differ diff --git a/html/statbrowser.js b/html/statbrowser.js index 105270ad298e..289536d37da1 100644 --- a/html/statbrowser.js +++ b/html/statbrowser.js @@ -374,6 +374,8 @@ function draw_debug() { document.getElementById("statcontent").appendChild(table3); } function draw_status() { + var status_tab_map_href_exception = + "View Tactical Map"; if (!document.getElementById("Status")) { createStatusTab("Status"); current_tab = "Status"; @@ -384,6 +386,13 @@ function draw_status() { document .getElementById("statcontent") .appendChild(document.createElement("br")); + } else if ( + // hardcoded because merely using .includes() to test for a href seems unreliable for some reason. + status_tab_parts[i] == status_tab_map_href_exception + ) { + var maplink = document.createElement("a"); + maplink.innerHTML = status_tab_parts[i]; + document.getElementById("statcontent").appendChild(maplink); } else { var div = document.createElement("div"); div.textContent = status_tab_parts[i]; diff --git a/icons/mob/humans/onmob/back.dmi b/icons/mob/humans/onmob/back.dmi index a6e9ef72c010..8fc07bc410fb 100644 Binary files a/icons/mob/humans/onmob/back.dmi and b/icons/mob/humans/onmob/back.dmi differ diff --git a/icons/mob/humans/onmob/items_lefthand_1.dmi b/icons/mob/humans/onmob/items_lefthand_1.dmi index 37b5f9bcc609..b67106a1f831 100644 Binary files a/icons/mob/humans/onmob/items_lefthand_1.dmi and b/icons/mob/humans/onmob/items_lefthand_1.dmi differ diff --git a/icons/mob/humans/onmob/items_righthand_1.dmi b/icons/mob/humans/onmob/items_righthand_1.dmi index 3ad8b52d0403..7bcc772c7375 100644 Binary files a/icons/mob/humans/onmob/items_righthand_1.dmi and b/icons/mob/humans/onmob/items_righthand_1.dmi differ diff --git a/icons/mob/humans/onmob/suit_0.dmi b/icons/mob/humans/onmob/suit_0.dmi index 52f2c7f0a9cb..d0f816e2b7fa 100644 Binary files a/icons/mob/humans/onmob/suit_0.dmi and b/icons/mob/humans/onmob/suit_0.dmi differ diff --git a/icons/mob/humans/onmob/suit_slot.dmi b/icons/mob/humans/onmob/suit_slot.dmi index 9f0e15209fe6..e83ce1301fa7 100644 Binary files a/icons/mob/humans/onmob/suit_slot.dmi and b/icons/mob/humans/onmob/suit_slot.dmi differ diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index 27e85be9a72a..21cc40876fbc 100644 Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ diff --git a/icons/mob/screen_ghost.dmi b/icons/mob/screen_ghost.dmi index 195cf31e3689..3fedae4c80b1 100644 Binary files a/icons/mob/screen_ghost.dmi and b/icons/mob/screen_ghost.dmi differ diff --git a/icons/mob/xenos/radial_xenos.dmi b/icons/mob/xenos/radial_xenos.dmi new file mode 100644 index 000000000000..2832f42fda33 Binary files /dev/null and b/icons/mob/xenos/radial_xenos.dmi differ diff --git a/icons/obj/items/bedrolls.dmi b/icons/obj/items/bedrolls.dmi new file mode 100644 index 000000000000..c36e07002a3d Binary files /dev/null and b/icons/obj/items/bedrolls.dmi differ diff --git a/icons/obj/items/food.dmi b/icons/obj/items/food.dmi index 3c2e963e3804..54de858ffc9c 100644 Binary files a/icons/obj/items/food.dmi and b/icons/obj/items/food.dmi differ diff --git a/icons/obj/items/food_ingredients.dmi b/icons/obj/items/food_ingredients.dmi index 3e30f51153c0..c0a0213e6db4 100644 Binary files a/icons/obj/items/food_ingredients.dmi and b/icons/obj/items/food_ingredients.dmi differ diff --git a/icons/obj/items/weapons/guns/ammo_boxes/boxes_and_lids.dmi b/icons/obj/items/weapons/guns/ammo_boxes/boxes_and_lids.dmi index 6c5d741ef9b8..42e7c54bbd2b 100644 Binary files a/icons/obj/items/weapons/guns/ammo_boxes/boxes_and_lids.dmi and b/icons/obj/items/weapons/guns/ammo_boxes/boxes_and_lids.dmi differ diff --git a/icons/obj/items/weapons/guns/ammo_boxes/handfuls.dmi b/icons/obj/items/weapons/guns/ammo_boxes/handfuls.dmi index 3355358f72f9..eeef3f91412d 100644 Binary files a/icons/obj/items/weapons/guns/ammo_boxes/handfuls.dmi and b/icons/obj/items/weapons/guns/ammo_boxes/handfuls.dmi differ diff --git a/icons/obj/items/weapons/guns/ammo_boxes/magazines.dmi b/icons/obj/items/weapons/guns/ammo_boxes/magazines.dmi index c56cb4deea9c..ff0c6d60d4ac 100644 Binary files a/icons/obj/items/weapons/guns/ammo_boxes/magazines.dmi and b/icons/obj/items/weapons/guns/ammo_boxes/magazines.dmi differ diff --git a/icons/obj/items/weapons/guns/ammo_boxes/text.dmi b/icons/obj/items/weapons/guns/ammo_boxes/text.dmi index dd08bf7e69b1..911b727ba5f6 100644 Binary files a/icons/obj/items/weapons/guns/ammo_boxes/text.dmi and b/icons/obj/items/weapons/guns/ammo_boxes/text.dmi differ diff --git a/icons/obj/items/weapons/guns/ammo_by_faction/uscm.dmi b/icons/obj/items/weapons/guns/ammo_by_faction/uscm.dmi index 51bc441aefaa..f6bddae9b090 100644 Binary files a/icons/obj/items/weapons/guns/ammo_by_faction/uscm.dmi and b/icons/obj/items/weapons/guns/ammo_by_faction/uscm.dmi differ diff --git a/icons/obj/items/weapons/guns/attachments.dmi b/icons/obj/items/weapons/guns/attachments.dmi index 332217fe1cf0..e627f7559a78 100644 Binary files a/icons/obj/items/weapons/guns/attachments.dmi and b/icons/obj/items/weapons/guns/attachments.dmi differ diff --git a/icons/obj/items/weapons/guns/attachments/barrel.dmi b/icons/obj/items/weapons/guns/attachments/barrel.dmi index 03c2257c69c5..138b9b658fb6 100644 Binary files a/icons/obj/items/weapons/guns/attachments/barrel.dmi and b/icons/obj/items/weapons/guns/attachments/barrel.dmi differ diff --git a/icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi b/icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi index 38fe8079a2e8..a7586a656965 100644 Binary files a/icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi and b/icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi differ diff --git a/icons/obj/structures/doors/dropship1_side2.dmi b/icons/obj/structures/doors/dropship1_side2.dmi new file mode 100644 index 000000000000..f2d96e59af5a Binary files /dev/null and b/icons/obj/structures/doors/dropship1_side2.dmi differ diff --git a/icons/obj/structures/doors/dropship2_side2.dmi b/icons/obj/structures/doors/dropship2_side2.dmi new file mode 100644 index 000000000000..bff39827c359 Binary files /dev/null and b/icons/obj/structures/doors/dropship2_side2.dmi differ diff --git a/icons/rebase_icons.dmi b/icons/rebase_icons.dmi index 6b0a25a1f7e6..14c19d8b27e6 100644 Binary files a/icons/rebase_icons.dmi and b/icons/rebase_icons.dmi differ diff --git a/maps/map_files/BigRed/BigRed.dmm b/maps/map_files/BigRed/BigRed.dmm index 412d970cffbd..6a90f35e4de3 100644 --- a/maps/map_files/BigRed/BigRed.dmm +++ b/maps/map_files/BigRed/BigRed.dmm @@ -119,7 +119,7 @@ /area/bigredv2/outside/space_port) "aau" = ( /obj/docking_port/stationary/marine_dropship/lz1{ - name = "Communications Landing Zone" + name = "LZ1: Communications Landing Zone" }, /turf/open/floor/plating, /area/bigredv2/outside/space_port) @@ -2548,7 +2548,8 @@ "ahv" = ( /obj/structure/surface/table/holotable/wood, /obj/item/paper_bin, -/turf/open/floor/wood, +/obj/item/tool/pen/clicky, +/turf/open/floor/carpet, /area/bigredv2/caves/lambda/breakroom) "ahw" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, @@ -3147,6 +3148,15 @@ /area/bigredv2/outside/marshal_office) "ajd" = ( /obj/structure/surface/table/holotable/wood, +/obj/structure/transmitter/colony_net/rotary{ + phone_category = "Lambda Labs"; + phone_color = "blue"; + phone_id = "Administration" + }, +/obj/item/clothing/mask/cigarette{ + pixel_x = 5; + pixel_y = 6 + }, /turf/open/floor/carpet, /area/bigredv2/caves/lambda/breakroom) "aje" = ( @@ -3198,7 +3208,8 @@ /area/bigredv2/outside/dorms) "ajm" = ( /obj/structure/filingcabinet, -/obj/effect/landmark/objective_landmark/science, +/obj/effect/landmark/objective_landmark/close, +/obj/effect/landmark/objective_landmark/medium, /turf/open/floor/wood, /area/bigredv2/caves/lambda/breakroom) "ajn" = ( @@ -3410,8 +3421,8 @@ /turf/open/floor, /area/bigredv2/outside/marshal_office) "ajO" = ( -/obj/structure/surface/table/holotable/wood, -/obj/item/tool/pen, +/obj/structure/machinery/prop/almayer/computer/PC, +/obj/structure/surface/table/woodentable/fancy, /turf/open/floor/carpet, /area/bigredv2/caves/lambda/breakroom) "ajP" = ( @@ -3501,8 +3512,8 @@ }, /area/bigredv2/outside/nw) "aka" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/effect/landmark/objective_landmark/close, +/obj/structure/machinery/faxmachine, +/obj/structure/surface/table/woodentable/fancy, /turf/open/floor/wood, /area/bigredv2/caves/lambda/breakroom) "akc" = ( @@ -4484,16 +4495,14 @@ /turf/open/floor/plating, /area/bigredv2/outside/dorms) "amW" = ( -/obj/structure/machinery/door_control{ - id = "safe_room"; - layer = 4; - name = "Door Bolt Control"; - normaldoorcontrol = 1; - pixel_y = -5; - req_access_txt = "7"; - specialfunctions = 4 +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/structure/closet/crate/freezer/rations, +/turf/open/floor{ + dir = 1; + icon_state = "elevatorshaft" }, -/turf/closed/wall/solaris/reinforced, /area/bigredv2/caves/lambda/breakroom) "amX" = ( /obj/structure/window/framed/solaris/reinforced, @@ -5896,9 +5905,13 @@ }, /area/bigredv2/outside/general_offices) "aqX" = ( -/obj/structure/closet/crate/freezer/rations, /obj/item/storage/toolbox/mechanical, /obj/item/device/multitool, +/obj/structure/window/reinforced{ + dir = 4; + health = 80 + }, +/obj/structure/surface/rack, /turf/open/floor{ dir = 1; icon_state = "elevatorshaft" @@ -5914,8 +5927,15 @@ }, /area/bigredv2/caves/lambda/breakroom) "aqZ" = ( -/obj/structure/closet/fireaxecabinet{ - pixel_y = 32 +/obj/structure/noticeboard{ + dir = 1; + pixel_y = 30; + desc = "A board for pinning important items upon."; + name = "trophy board" + }, +/obj/item/XenoBio/Chitin{ + pixel_y = 27; + anchored = 1 }, /turf/open/floor{ dir = 1; @@ -5923,8 +5943,11 @@ }, /area/bigredv2/caves/lambda/breakroom) "ara" = ( -/obj/structure/surface/table/holotable/wood, -/obj/item/device/flashlight/lamp, +/obj/structure/surface/table/woodentable/fancy, +/obj/item/device/flashlight/lamp{ + pixel_y = 15 + }, +/obj/item/paper/bigred/lambda, /turf/open/floor{ dir = 1; icon_state = "elevatorshaft" @@ -6141,9 +6164,7 @@ /obj/item/ammo_magazine/shotgun/incendiary, /obj/item/ammo_magazine/shotgun/incendiary, /obj/item/weapon/gun/shotgun/combat, -/obj/structure/window/reinforced{ - dir = 1 - }, +/obj/structure/machinery/door/window/eastleft, /turf/open/floor{ dir = 1; icon_state = "elevatorshaft" @@ -6157,7 +6178,7 @@ /area/bigredv2/caves/lambda/breakroom) "arG" = ( /obj/structure/bed, -/obj/item/bedsheet/captain, +/obj/item/bedsheet/rd, /turf/open/floor{ dir = 1; icon_state = "elevatorshaft" @@ -6387,8 +6408,9 @@ /area/bigredv2/outside/ne) "asn" = ( /obj/structure/surface/rack, -/obj/structure/window/reinforced, /obj/item/clothing/suit/armor/vest, +/obj/structure/machinery/door/window/eastright, +/obj/structure/window/reinforced, /turf/open/floor{ dir = 1; icon_state = "elevatorshaft" @@ -6405,9 +6427,7 @@ }, /area/bigredv2/caves/lambda/breakroom) "asp" = ( -/obj/structure/bed/chair/office/light{ - dir = 4 - }, +/obj/structure/bed/chair/comfy/black, /turf/open/floor/wood, /area/bigredv2/caves/lambda/breakroom) "asq" = ( @@ -6417,7 +6437,7 @@ }, /area/bigredv2/outside/medical) "asr" = ( -/obj/structure/bed/chair{ +/obj/structure/bed/chair/comfy{ dir = 8 }, /turf/open/floor/carpet, @@ -6690,9 +6710,12 @@ /area/bigredv2/outside/chapel) "ate" = ( /obj/structure/machinery/door_control{ - id = "safe_blast"; - name = "Blast Door"; - pixel_y = -25 + id = "safe_room"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + pixel_y = -28; + req_access_txt = "106"; + specialfunctions = 4 }, /turf/open/floor{ dir = 1; @@ -6700,12 +6723,8 @@ }, /area/bigredv2/caves/lambda/breakroom) "atf" = ( -/obj/structure/closet/crate/medical, -/obj/item/storage/firstaid/adv, -/obj/item/storage/firstaid/o2, -/obj/item/storage/firstaid/toxin, -/obj/item/storage/firstaid/rad, -/obj/effect/landmark/objective_landmark/medium, +/obj/structure/closet/secure_closet/RD, +/obj/effect/landmark/objective_landmark/science, /turf/open/floor{ dir = 1; icon_state = "elevatorshaft" @@ -6918,7 +6937,7 @@ dir = 1; icon_state = "door_locked"; id = "safe_room"; - name = "\improper Lambda Lab Secure Storage" + name = "\improper Lambda Lab Director's Safe Room" }, /turf/open/floor{ icon_state = "delivery" @@ -7145,7 +7164,7 @@ /area/bigredv2/outside/office_complex) "aum" = ( /obj/structure/machinery/door/airlock/almayer/research/glass/colony{ - name = "\improper Lambda Lab Administration Office" + name = "\improper Lambda Lab Director's Office" }, /turf/open/floor{ icon_state = "delivery" @@ -7718,7 +7737,6 @@ /turf/open/floor/wood, /area/bigredv2/caves/lambda/breakroom) "avN" = ( -/obj/structure/bed/chair, /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /turf/open/floor/carpet, /area/bigredv2/caves/lambda/breakroom) @@ -7982,8 +8000,19 @@ /turf/open/mars, /area/bigredv2/outside/ne) "awz" = ( -/obj/structure/surface/table/holotable/wood, -/obj/item/XenoBio/Chitin, +/obj/item/ashtray/bronze{ + pixel_x = -7 + }, +/obj/item/trash/cigbutt, +/obj/item/trash/cigbutt{ + pixel_x = 7; + pixel_y = 7 + }, +/obj/item/trash/cigbutt{ + pixel_x = -10; + pixel_y = 14 + }, +/obj/structure/surface/table/woodentable/fancy, /turf/open/floor/carpet, /area/bigredv2/caves/lambda/breakroom) "awA" = ( @@ -7998,13 +8027,12 @@ }, /area/bigredv2/caves/lambda/research) "awB" = ( -/obj/structure/surface/table/holotable/wood, -/obj/item/reagent_container/food/drinks/coffee, /obj/structure/transmitter/colony_net/rotary{ phone_category = "Lambda Labs"; phone_color = "blue"; - phone_id = "Administration" + phone_id = "Director" }, +/obj/structure/surface/table/woodentable/fancy, /turf/open/floor/carpet, /area/bigredv2/caves/lambda/breakroom) "awC" = ( @@ -8253,10 +8281,10 @@ }, /area/bigredv2/caves/lambda/virology) "axo" = ( -/obj/structure/bed/chair/office/light{ +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/structure/bed/chair/comfy/black{ dir = 8 }, -/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /turf/open/floor/wood, /area/bigredv2/caves/lambda/breakroom) "axp" = ( @@ -8711,6 +8739,12 @@ /area/bigredv2/caves/lambda/breakroom) "ayB" = ( /obj/structure/machinery/light, +/obj/structure/surface/table/woodentable, +/obj/item/storage/fancy/cigarettes/wypacket{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/tool/lighter/zippo, /turf/open/floor/carpet, /area/bigredv2/caves/lambda/breakroom) "ayC" = ( @@ -10233,6 +10267,15 @@ icon_state = "asteroidwarning" }, /area/bigredv2/outside/c) +"aCO" = ( +/obj/structure/surface/table, +/obj/item/stack/cable_coil, +/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, +/turf/open/floor{ + dir = 10; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) "aCP" = ( /obj/structure/closet/secure_closet/bar, /obj/effect/landmark/objective_landmark/close, @@ -10822,8 +10865,10 @@ }, /area/bigredv2/caves/lambda/research) "aEs" = ( -/obj/structure/surface/table/holotable/wood, -/turf/open/floor/wood, +/obj/structure/bed/chair/comfy/lime{ + dir = 8 + }, +/turf/open/floor/carpet, /area/bigredv2/caves/lambda/breakroom) "aEt" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, @@ -11482,9 +11527,7 @@ }, /area/bigredv2/caves/lambda/research) "aGh" = ( -/obj/structure/bed/chair/office/light{ - dir = 1 - }, +/obj/structure/filingcabinet/filingcabinet, /turf/open/floor/wood, /area/bigredv2/caves/lambda/breakroom) "aGi" = ( @@ -13544,7 +13587,10 @@ "aLJ" = ( /obj/structure/filingcabinet, /obj/effect/landmark/objective_landmark/close, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "aLM" = ( /obj/structure/machinery/shower{ @@ -13579,7 +13625,9 @@ /obj/structure/surface/table, /obj/item/tool/lighter/random, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "aLQ" = ( /obj/structure/window/reinforced/toughened{ @@ -13858,8 +13906,10 @@ /obj/structure/surface/table, /obj/effect/decal/cleanable/dirt, /obj/item/tool/pen, -/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "aMC" = ( /obj/effect/landmark/railgun_camera_pos, @@ -18585,6 +18635,13 @@ icon_state = "dark" }, /area/bigredv2/outside/chapel) +"aZJ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + dir = 6; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) "aZK" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 9 @@ -18655,6 +18712,15 @@ }, /turf/open/floor/carpet, /area/bigredv2/outside/admin_building) +"aZV" = ( +/obj/structure/surface/table, +/obj/effect/spawner/random/tool, +/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) "aZW" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 @@ -19377,6 +19443,13 @@ icon_state = "white" }, /area/bigredv2/outside/office_complex) +"bcg" = ( +/obj/effect/decal/cleanable/liquid_fuel, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "bch" = ( /obj/structure/surface/table, /obj/item/clipboard, @@ -19498,7 +19571,7 @@ /turf/open/floor, /area/bigredv2/outside/cargo) "bcy" = ( -/obj/structure/machinery/vending/cigarette, +/obj/structure/machinery/vending/cigarette/colony, /turf/open/floor, /area/bigredv2/outside/cargo) "bcz" = ( @@ -21415,7 +21488,7 @@ /area/bigredv2/outside/space_port_lz2) "biI" = ( /obj/docking_port/stationary/marine_dropship/lz2{ - name = "Engineering Landing Zone" + name = "LZ2: Engineering Landing Zone" }, /turf/open/floor/plating, /area/bigredv2/outside/space_port_lz2) @@ -21866,8 +21939,8 @@ dir = 1; name = "\improper Atmospherics Condenser" }, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/filtration_plant) "bkw" = ( @@ -21875,8 +21948,8 @@ dir = 1; name = "\improper Atmospherics Condenser" }, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/filtration_plant) "bkx" = ( @@ -21886,8 +21959,8 @@ dir = 1; name = "\improper Atmospherics Condenser" }, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/filtration_plant) "bky" = ( @@ -21924,18 +21997,30 @@ icon_state = "sovietsoda-broken"; stat = 1 }, -/turf/open/floor, +/turf/open/floor{ + dir = 9; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bkE" = ( -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bkG" = ( /obj/structure/reagent_dispensers/watertank, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bkH" = ( /obj/structure/dispenser/oxygen, -/turf/open/floor, +/turf/open/floor{ + dir = 5; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bkI" = ( /obj/structure/cryofeed/right{ @@ -21954,7 +22039,9 @@ "bkK" = ( /obj/structure/closet/toolcloset, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, /area/bigredv2/outside/filtration_plant) "bkL" = ( /obj/structure/surface/table, @@ -21962,29 +22049,43 @@ dir = 1 }, /obj/item/tank/air, -/turf/open/floor, +/turf/open/floor{ + dir = 9; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bkM" = ( /obj/structure/surface/table, /obj/effect/spawner/random/bomb_supply, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bkN" = ( /obj/structure/surface/table, /obj/effect/spawner/random/tool, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bkO" = ( /obj/structure/machinery/light{ dir = 1 }, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bkP" = ( /obj/structure/machinery/door/airlock/almayer/engineering/colony{ name = "\improper Atmospherics Condenser Storage" }, -/turf/open/floor, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, /area/bigredv2/outside/filtration_plant) "bkS" = ( /obj/structure/closet/toolcloset, @@ -21992,7 +22093,10 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bkT" = ( /obj/structure/machinery/portable_atmospherics/powered/scrubber/huge/chan, @@ -22144,19 +22248,27 @@ /obj/effect/spawner/random/toolbox, /obj/item/tool/extinguisher, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bly" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "blA" = ( /obj/structure/dispenser/oxygen, /obj/structure/machinery/camera/autoname{ dir = 8 }, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "blB" = ( /obj/effect/landmark/survivor_spawner, @@ -22168,24 +22280,34 @@ dir = 4; pixel_x = -30 }, -/turf/open/floor, +/turf/open/floor{ + dir = 9; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "blC" = ( /obj/structure/closet/firecloset/full, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "blD" = ( /obj/structure/surface/table, /obj/item/circuitboard/firealarm, /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "blE" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/crap_item, /obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "blF" = ( /obj/structure/machinery/door/airlock/almayer/engineering/colony{ @@ -22199,12 +22321,6 @@ }, /turf/open/floor/plating, /area/bigredv2/outside/filtration_plant) -"blL" = ( -/obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor{ - icon_state = "delivery" - }, -/area/bigredv2/outside/engineering) "blT" = ( /obj/structure/bed/chair/office/light{ dir = 8 @@ -22212,7 +22328,9 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "blV" = ( /obj/structure/bed/chair/office/light{ @@ -22221,7 +22339,9 @@ /obj/structure/pipes/standard/simple/hidden/green{ dir = 6 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "blW" = ( /obj/structure/surface/table, @@ -22231,25 +22351,35 @@ dir = 8 }, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "blX" = ( /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + dir = 9; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "blY" = ( /obj/structure/bed/chair{ dir = 8 }, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "blZ" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/pipes/standard/simple/hidden/green{ dir = 5 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bma" = ( /obj/effect/decal/cleanable/dirt, @@ -22258,7 +22388,9 @@ /obj/structure/pipes/standard/simple/hidden/green{ dir = 10 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bmb" = ( /obj/structure/surface/table, @@ -22267,42 +22399,69 @@ pixel_x = 32 }, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bme" = ( /turf/open/mars, /area/bigredv2/outside/sw) "bmf" = ( /obj/structure/closet/secure_closet/engineering_personal, -/turf/open/floor, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, /area/bigredv2/outside/engineering) "bmg" = ( /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bmh" = ( /obj/effect/decal/cleanable/liquid_fuel, /obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bmi" = ( -/turf/open/floor, +/obj/effect/decal/cleanable/liquid_fuel, +/obj/structure/curtain/red, +/turf/open/floor{ + icon_state = "freezerfloor" + }, /area/bigredv2/outside/engineering) "bmj" = ( -/obj/structure/machinery/light{ - dir = 4 - }, /obj/effect/decal/cleanable/liquid_fuel, -/turf/open/floor, +/obj/structure/machinery/shower{ + dir = 8 + }, +/turf/open/floor{ + icon_state = "freezerfloor" + }, /area/bigredv2/outside/engineering) "bml" = ( /obj/structure/machinery/portable_atmospherics/canister/air, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + dir = 9; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bmm" = ( /obj/structure/machinery/portable_atmospherics/canister/air, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bmn" = ( /obj/structure/machinery/power/smes/buildable{ @@ -22312,31 +22471,41 @@ /area/bigredv2/outside/engineering) "bmp" = ( /obj/structure/machinery/mill, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bmq" = ( /obj/structure/surface/table, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, -/area/bigredv2/outside/engineering) -"bmr" = ( -/obj/structure/surface/table, -/obj/effect/spawner/random/tool, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bms" = ( /obj/structure/machinery/autolathe, -/turf/open/floor, +/turf/open/floor{ + dir = 5; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bmt" = ( /obj/structure/machinery/computer/atmos_alert, /obj/structure/surface/table, -/turf/open/floor, +/turf/open/floor{ + dir = 9; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bmu" = ( /obj/structure/machinery/computer/station_alert, /obj/structure/surface/table, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bmw" = ( /obj/structure/closet/secure_closet/engineering_chief, @@ -22344,20 +22513,32 @@ dir = 1 }, /obj/effect/landmark/objective_landmark/close, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bmx" = ( /obj/structure/bookcase/manuals/engineering, -/turf/open/floor, +/turf/open/floor{ + dir = 5; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bmy" = ( /obj/effect/decal/cleanable/liquid_fuel, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bmz" = ( /obj/structure/pipes/standard/simple/hidden/green, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bmA" = ( /obj/structure/barricade/wooden, @@ -22379,33 +22560,49 @@ dir = 4 }, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bmD" = ( /obj/structure/pipes/standard/manifold/hidden/green{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bmF" = ( /obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bmG" = ( /obj/structure/closet/wardrobe/atmospherics_yellow, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bmH" = ( /obj/structure/surface/table, /obj/item/tool/lighter/random, /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bmJ" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bmM" = ( /obj/effect/landmark/hunter_primary, @@ -22420,14 +22617,24 @@ "bmO" = ( /obj/effect/decal/cleanable/liquid_fuel, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bmP" = ( /obj/effect/decal/cleanable/liquid_fuel, /obj/effect/decal/cleanable/liquid_fuel, /obj/item/stack/sheet/metal, /obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bmQ" = ( /obj/structure/machinery/shower{ @@ -22443,13 +22650,18 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bmS" = ( /obj/structure/machinery/portable_atmospherics/canister/air, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bmT" = ( /obj/structure/machinery/power/terminal{ @@ -22475,23 +22687,33 @@ /area/bigredv2/outside/engineering) "bmW" = ( /obj/effect/decal/cleanable/blood, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bmX" = ( /obj/structure/bed/chair/office/dark, /obj/effect/landmark/corpsespawner/engineer, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bmZ" = ( /obj/effect/decal/cleanable/liquid_fuel, /obj/effect/decal/cleanable/liquid_fuel, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bna" = ( /obj/structure/pipes/standard/simple/hidden/green, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/liquid_fuel, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bnb" = ( /obj/structure/machinery/door_control{ @@ -22499,14 +22721,20 @@ name = "Storm Shutters"; pixel_x = -32 }, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bnd" = ( /obj/structure/machinery/light{ dir = 4 }, -/obj/structure/machinery/computer3/server/rack, -/turf/open/floor, +/obj/structure/machinery/computer3/server, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bne" = ( /obj/structure/cryofeed, @@ -22519,7 +22747,10 @@ /area/bigredv2/outside/filtration_plant) "bnf" = ( /obj/structure/machinery/computer3/server/rack, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bng" = ( /obj/effect/decal/cleanable/dirt, @@ -22527,12 +22758,16 @@ /obj/structure/pipes/standard/simple/hidden/green{ dir = 6 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bnh" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/pipes/standard/manifold/hidden/green, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bnj" = ( /obj/structure/pipes/standard/simple/hidden/green{ @@ -22541,8 +22776,8 @@ /obj/structure/machinery/door/airlock/almayer/engineering/colony{ name = "\improper Atmospherics Condenser Storage" }, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/filtration_plant) "bnl" = ( @@ -22550,66 +22785,93 @@ /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bnm" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/pipes/standard/simple/hidden/green{ dir = 10 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bnn" = ( /obj/structure/pipes/vents/pump, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bno" = ( /obj/effect/decal/cleanable/dirt, /obj/item/device/radio/headset, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bnp" = ( /obj/structure/machinery/computer/area_atmos/area, /obj/structure/surface/table, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bnq" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor, +/obj/structure/machinery/light{ + dir = 4 + }, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bnr" = ( /obj/structure/largecrate/random, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bns" = ( /obj/structure/machinery/door/airlock/almayer/engineering/colony{ dir = 1; name = "\improper Engineering SMES" }, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/engineering) "bnt" = ( /obj/effect/decal/cleanable/dirt, /obj/item/clothing/glasses/welding, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bnu" = ( /obj/structure/machinery/light{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bnw" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 6 }, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bnx" = ( /obj/structure/surface/table, @@ -22619,7 +22881,9 @@ /obj/effect/decal/cleanable/dirt, /obj/item/clothing/glasses/meson, /obj/effect/landmark/crap_item, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bny" = ( /obj/structure/window/reinforced/toughened{ @@ -22644,41 +22908,55 @@ /obj/structure/surface/table, /obj/item/tool/lighter/zippo, /obj/item/tool/lighter/zippo, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bnA" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/engidoor/glass/colony{ dir = 1; name = "\improper Atmospherics Condenser" }, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/filtration_plant) "bnB" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 6 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bnE" = ( /obj/effect/decal/cleanable/blood, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bnF" = ( /obj/structure/pipes/standard/simple/hidden/green, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bnH" = ( /obj/structure/machinery/computer/general_air_control, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bnI" = ( /obj/structure/machinery/light, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bnK" = ( /obj/structure/pipes/standard/simple/hidden/green{ @@ -22687,40 +22965,53 @@ /obj/structure/machinery/camera/autoname{ dir = 1 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bnL" = ( /obj/structure/pipes/standard/manifold/hidden/green, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bnM" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/pipes/standard/simple/hidden/green{ dir = 9 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bnN" = ( /obj/structure/bed/chair{ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bnO" = ( /obj/structure/machinery/computer/atmos_alert{ dir = 8 }, /obj/structure/surface/table, -/turf/open/floor, +/turf/open/floor{ + dir = 6; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bnQ" = ( /obj/structure/closet/secure_closet/engineering_personal, /obj/structure/machinery/light{ dir = 8 }, -/turf/open/floor, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, /area/bigredv2/outside/engineering) "bnR" = ( /obj/structure/machinery/shower{ @@ -22733,30 +23024,40 @@ /area/bigredv2/outside/engineering) "bnS" = ( /obj/item/trash/eat, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bnT" = ( /obj/structure/machinery/door/airlock/almayer/secure/colony{ name = "\improper Engineering Secure Storage" }, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/engineering) "bnV" = ( /obj/structure/sign/safety/electronics{ pixel_y = 32 }, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bnW" = ( /obj/structure/pipes/vents/pump, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellowcorners2" + }, /area/bigredv2/outside/engineering) "bnX" = ( /obj/item/folder/yellow, /obj/effect/landmark/crap_item, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bnY" = ( /obj/structure/machinery/photocopier, @@ -22766,26 +23067,36 @@ name = "General Listening Channel"; pixel_x = 30 }, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bnZ" = ( /obj/structure/pipes/standard/simple/hidden/green, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "boa" = ( /obj/structure/bed/chair{ dir = 1 }, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bob" = ( /obj/structure/bed/chair{ dir = 1 }, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "boc" = ( /obj/structure/machinery/light{ @@ -22793,64 +23104,85 @@ }, /obj/structure/pipes/standard/simple/hidden/green, /obj/effect/landmark/crap_item, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "boe" = ( -/obj/structure/machinery/computer3/server, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bof" = ( /obj/structure/pipes/standard/simple/hidden/green, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "boj" = ( /obj/structure/closet/secure_closet/engineering_welding, -/turf/open/floor, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, /area/bigredv2/outside/engineering) "bok" = ( /obj/structure/largecrate/random, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, -/area/bigredv2/outside/engineering) -"bop" = ( -/obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "boq" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 5 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bor" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bos" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 10 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bou" = ( /obj/structure/machinery/light{ dir = 8 }, /obj/structure/machinery/computer3/server/rack, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bov" = ( /obj/structure/pipes/standard/simple/hidden/green, /obj/effect/decal/cleanable/dirt, /obj/item/weapon/twohanded/fireaxe, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "box" = ( /obj/item/frame/table, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "boy" = ( /obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, @@ -22868,44 +23200,63 @@ dir = 1; name = "\improper Engineering Complex" }, -/turf/open/floor, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, /area/bigredv2/outside/engineering) "boG" = ( /obj/structure/closet/secure_closet/engineering_electrical, -/turf/open/floor, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, /area/bigredv2/outside/engineering) "boH" = ( /obj/effect/decal/cleanable/liquid_fuel, /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/crap_item, /obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellowcorners2" + }, /area/bigredv2/outside/engineering) "boI" = ( /obj/structure/machinery/light{ dir = 1 }, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "boK" = ( /obj/item/trash/pistachios, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "boL" = ( /obj/structure/reagent_dispensers/fueltank, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "boM" = ( /obj/structure/closet/firecloset/full, /obj/structure/machinery/light{ dir = 8 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "boN" = ( /obj/structure/closet/firecloset/full, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "boR" = ( /obj/structure/surface/table, @@ -22914,14 +23265,19 @@ dir = 1 }, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "boS" = ( /obj/structure/surface/table, /obj/effect/spawner/random/tool, /obj/effect/spawner/random/technology_scanner, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + dir = 6; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "boU" = ( /obj/structure/pipes/standard/simple/hidden/green, @@ -22929,8 +23285,8 @@ dir = 1; name = "\improper Chief Engineer's Office" }, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/engineering) "boV" = ( @@ -22938,17 +23294,22 @@ /obj/structure/machinery/door/airlock/multi_tile/almayer/generic{ name = "\improper Engineering Complex" }, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/engineering) "boW" = ( /obj/structure/closet/secure_closet/atmos_personal, -/turf/open/floor, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, /area/bigredv2/outside/filtration_plant) "boX" = ( /obj/structure/machinery/pipedispenser, -/turf/open/floor, +/turf/open/floor{ + dir = 9; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "boY" = ( /obj/structure/machinery/cm_vending/sorted/tech/tool_storage, @@ -22958,17 +23319,24 @@ phone_id = "Filtration"; pixel_y = 24 }, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "boZ" = ( /obj/effect/landmark/crap_item, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bpa" = ( /obj/effect/decal/cleanable/blood, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bpc" = ( /obj/structure/barricade/handrail, @@ -22978,26 +23346,41 @@ /area/bigredv2/outside/filtration_plant) "bpe" = ( /obj/effect/landmark/survivor_spawner, -/turf/open/floor, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/turf/open/floor{ + dir = 10; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bpf" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/pipes/standard/simple/hidden/green{ dir = 5 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bpi" = ( /obj/structure/reagent_dispensers/watertank, /obj/structure/machinery/light{ dir = 8 }, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bpj" = ( /obj/structure/reagent_dispensers/watertank, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bpk" = ( /obj/structure/pipes/standard/simple/hidden/green, @@ -23005,19 +23388,26 @@ dir = 1; name = "\improper Engineering Tool Storage" }, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/engineering) "bpl" = ( /obj/structure/machinery/light{ dir = 8 }, -/turf/open/floor, +/turf/open/floor{ + dir = 9; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bpm" = ( -/obj/effect/landmark/corpsespawner/engineer, -/turf/open/floor, +/obj/structure/surface/table, +/obj/effect/decal/cleanable/dirt, +/obj/item/clothing/glasses/welding, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bpn" = ( /obj/structure/pipes/standard/simple/hidden/green{ @@ -23026,25 +23416,34 @@ /obj/structure/machinery/camera/autoname{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bpo" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bpp" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 9 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bpq" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/item/frame/table, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bpu" = ( /obj/structure/machinery/landinglight/ds2/delaythree{ @@ -23076,8 +23475,8 @@ dir = 1; name = "\improper Engineering Lockers" }, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/engineering) "bpA" = ( @@ -23086,44 +23485,51 @@ dir = 1; name = "\improper Engineering Lockers" }, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/engineering) "bpC" = ( /obj/structure/reagent_dispensers/fueltank, -/turf/open/floor, +/turf/open/floor{ + dir = 6; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bpD" = ( /obj/structure/surface/rack, /obj/item/device/camera_film, -/obj/item/device/analyzer, -/turf/open/floor, +/turf/open/floor{ + dir = 9; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bpE" = ( /obj/structure/surface/rack, -/obj/item/weapon/gun/smg/nailgun, -/obj/item/weapon/gun/smg/nailgun, -/obj/item/ammo_magazine/smg/nailgun, -/obj/item/ammo_magazine/smg/nailgun, -/obj/item/ammo_magazine/smg/nailgun, -/obj/item/ammo_magazine/smg/nailgun, -/obj/item/ammo_magazine/smg/nailgun, -/obj/item/ammo_magazine/smg/nailgun, -/turf/open/floor, +/obj/item/device/analyzer, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bpF" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 6 }, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bpH" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bpI" = ( /obj/structure/pipes/standard/simple/hidden/green{ @@ -23131,7 +23537,10 @@ }, /obj/effect/decal/cleanable/dirt, /obj/item/device/lightreplacer, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bpK" = ( /obj/structure/machinery/light{ @@ -23140,31 +23549,43 @@ /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bpL" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, /obj/effect/landmark/hunter_secondary, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellowcorners2" + }, /area/bigredv2/outside/engineering) "bpM" = ( -/obj/structure/pipes/standard/manifold/hidden/green, -/turf/open/floor, +/obj/structure/pipes/standard/manifold/fourway/hidden/green, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bpN" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, /obj/effect/decal/cleanable/liquid_fuel, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bpO" = ( /obj/structure/pipes/standard/manifold/hidden/green{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bpP" = ( /obj/structure/machinery/camera/autoname{ @@ -23173,7 +23594,9 @@ /obj/structure/pipes/standard/simple/hidden/green{ dir = 5 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bpQ" = ( /obj/structure/machinery/light{ @@ -23183,20 +23606,26 @@ /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bpR" = ( /obj/structure/pipes/standard/manifold/hidden/green{ dir = 1 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bpS" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, /obj/effect/landmark/good_item, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bpT" = ( /obj/structure/pipes/standard/simple/hidden/green, @@ -23207,13 +23636,14 @@ "bpU" = ( /obj/structure/machinery/portable_atmospherics/powered/scrubber/huge/stationary, /obj/effect/decal/warning_stripes, -/turf/open/floor, +/turf/open/floor/plating, /area/bigredv2/outside/filtration_plant) "bpV" = ( /obj/effect/decal/warning_stripes{ - icon_state = "N" + icon_state = "N"; + pixel_y = 1 }, -/turf/open/floor, +/turf/open/floor/plating, /area/bigredv2/outside/filtration_plant) "bpX" = ( /turf/open/floor{ @@ -23275,8 +23705,8 @@ dir = 1; name = "\improper Engineering Break Room" }, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/engineering) "bqg" = ( @@ -23291,34 +23721,39 @@ dir = 1; pixel_y = -30 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bql" = ( -/obj/effect/decal/cleanable/liquid_fuel, /obj/structure/machinery/door_control{ id = "Engineering"; name = "Storm Shutters"; pixel_y = -32 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bqo" = ( /obj/structure/bed/chair{ dir = 8 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bqv" = ( /obj/effect/decal/warning_stripes{ icon_state = "W" }, -/turf/open/floor, +/turf/open/floor/plating, /area/bigredv2/outside/filtration_plant) "bqw" = ( /obj/effect/decal/warning_stripes{ icon_state = "E-corner" }, -/turf/open/floor, +/turf/open/floor/plating, /area/bigredv2/outside/filtration_plant) "bqA" = ( /obj/structure/closet/toolcloset, @@ -23339,21 +23774,30 @@ icon_state = "snack-broken"; stat = 1 }, -/turf/open/floor, +/turf/open/floor{ + dir = 9; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bqJ" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/machinery/camera/autoname{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellowcorners2" + }, /area/bigredv2/outside/engineering) "bqK" = ( /obj/item/folder/yellow, /obj/structure/pipes/standard/manifold/hidden/green{ dir = 8 }, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellowcorners2" + }, /area/bigredv2/outside/engineering) "bqL" = ( /obj/structure/pipes/standard/simple/hidden/green{ @@ -23362,8 +23806,8 @@ /obj/structure/machinery/door/airlock/almayer/engineering/colony{ name = "\improper Engineering Workshop" }, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/engineering) "bqM" = ( @@ -23371,29 +23815,39 @@ /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bqN" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/pipes/standard/simple/hidden/green{ dir = 9 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bqP" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out"; + pixel_x = 1; + pixel_y = -1 + }, /obj/structure/machinery/door/airlock/almayer/engineering/colony{ dir = 1; name = "\improper Engine Reactor Control" }, -/obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/engineering) "bqT" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/survivor_spawner, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bqV" = ( /obj/structure/machinery/light{ @@ -23402,13 +23856,16 @@ /obj/structure/surface/table, /obj/item/paper, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bqX" = ( /obj/effect/decal/warning_stripes{ icon_state = "S" }, -/turf/open/floor, +/turf/open/floor/plating, /area/bigredv2/outside/filtration_plant) "brb" = ( /obj/structure/machinery/landinglight/ds2{ @@ -23434,14 +23891,17 @@ /area/bigredv2/outside/sw) "bre" = ( /obj/structure/bed/chair, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "brf" = ( /obj/structure/machinery/door/airlock/almayer/engineering/colony{ name = "\improper Engineering Workshop" }, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/engineering) "brg" = ( @@ -23449,57 +23909,73 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bri" = ( /obj/effect/decal/cleanable/dirt, /obj/item/stack/sheet/metal, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "brj" = ( /obj/structure/surface/table, /obj/effect/spawner/random/toolbox, /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, -/area/bigredv2/outside/engineering) -"brm" = ( -/obj/structure/surface/table, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "brn" = ( -/obj/structure/surface/table, -/obj/effect/spawner/random/technology_scanner, -/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/obj/structure/transmitter/colony_net{ - phone_category = "Solaris Ridge"; - phone_color = "yellow"; - phone_id = "Engineering"; - pixel_y = 24 +/obj/structure/machinery/power/breakerbox/activated, +/obj/structure/machinery/light{ + dir = 8 + }, +/turf/open/floor{ + dir = 9; + icon_state = "darkyellow2" }, -/turf/open/floor, /area/bigredv2/outside/engineering) "bro" = ( /obj/structure/machinery/camera/autoname, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bru" = ( /obj/structure/machinery/vending/cigarette/colony, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "brv" = ( /obj/structure/machinery/vending/snack, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "brw" = ( /obj/structure/machinery/vending/cola, -/turf/open/floor, +/turf/open/floor{ + dir = 5; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "brx" = ( /obj/structure/surface/table, /obj/item/stack/cable_coil, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bry" = ( /obj/structure/pipes/standard/manifold/hidden/green{ @@ -23507,14 +23983,18 @@ }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "brz" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "brA" = ( /obj/structure/surface/table, @@ -23529,17 +24009,25 @@ pixel_x = 30 }, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "brB" = ( /obj/structure/machinery/light{ dir = 8 }, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "brC" = ( /obj/effect/landmark/good_item, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "brD" = ( /turf/open/floor/plating, @@ -23560,42 +24048,61 @@ /obj/item/stack/sheet/metal{ amount = 30 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "brJ" = ( /obj/effect/decal/cleanable/dirt, /obj/item/stack/sheet/glass, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "brK" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/hunter_primary, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "brL" = ( /obj/structure/bed/chair/office/light{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "brM" = ( /obj/structure/surface/table, /obj/effect/spawner/random/powercell, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "brO" = ( /obj/structure/machinery/light{ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "brP" = ( /obj/structure/bed/chair/office/light{ dir = 8 }, -/turf/open/floor, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 6 + }, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "brR" = ( /obj/item/device/radio/intercom{ @@ -23604,36 +24111,50 @@ name = "General Listening Channel"; pixel_x = 30 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "podhatchfloor" + }, /area/bigredv2/outside/engineering) "brU" = ( /obj/structure/surface/table, /obj/item/stack/cable_coil, /obj/item/stack/cable_coil, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "brV" = ( /obj/structure/bed/chair/office/light{ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "brW" = ( /obj/structure/surface/table, /obj/item/weapon/baton, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "brY" = ( /obj/structure/bed/chair/office/light, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "brZ" = ( /obj/structure/bed/chair/office/light, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellowcorners2" + }, /area/bigredv2/outside/filtration_plant) "bsa" = ( /obj/structure/machinery/floodlight/landing/floor, @@ -23683,11 +24204,9 @@ amount = 30 }, /obj/effect/landmark/crap_item, -/turf/open/floor, -/area/bigredv2/outside/engineering) -"bso" = ( -/obj/structure/machinery/power/geothermal, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bss" = ( /obj/structure/prop/invuln/minecart_tracks{ @@ -23698,40 +24217,50 @@ }, /turf/open/floor/plating, /area/bigredv2/caves/mining) -"bsu" = ( -/obj/effect/landmark/crap_item, -/turf/open/floor, -/area/bigredv2/outside/engineering) "bsB" = ( /obj/structure/surface/table, /obj/effect/spawner/random/tool, /obj/effect/spawner/random/tool, -/turf/open/floor, +/turf/open/floor{ + dir = 10; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bsC" = ( /obj/structure/surface/table, /obj/effect/spawner/random/technology_scanner, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bsD" = ( /obj/structure/surface/table, /obj/effect/spawner/random/tool, /obj/effect/spawner/random/toolbox, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bsE" = ( /obj/structure/surface/table, /obj/effect/spawner/random/toolbox, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bsF" = ( /obj/structure/surface/table, /obj/item/circuitboard/solar_tracker, -/turf/open/floor, +/turf/open/floor{ + dir = 6; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bsG" = ( /obj/structure/closet/wardrobe/engineering_yellow, -/turf/open/floor, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, /area/bigredv2/outside/filtration_plant) "bsH" = ( /obj/effect/landmark/hunter_primary, @@ -23747,19 +24276,26 @@ icon_state = "coffee-broken"; stat = 1 }, -/turf/open/floor, +/turf/open/floor{ + dir = 10; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bsK" = ( /obj/structure/machinery/light, /obj/structure/surface/table, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bsL" = ( /obj/effect/landmark/crap_item, /obj/structure/surface/table, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bsM" = ( /obj/structure/machinery/door_control{ @@ -23767,7 +24303,10 @@ name = "Storm Shutters"; pixel_y = -32 }, -/turf/open/floor, +/turf/open/floor{ + dir = 6; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bsN" = ( /obj/structure/surface/table, @@ -23779,49 +24318,62 @@ /obj/item/stack/sheet/glass{ amount = 30 }, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bsP" = ( -/obj/structure/surface/table, -/obj/effect/spawner/random/toolbox, -/turf/open/floor, +/obj/structure/closet/radiation, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, /area/bigredv2/outside/engineering) "bsX" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/generic{ name = "\improper Engineering Complex" }, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/engineering) "bsY" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/generic{ name = "\improper Atmospherics Condenser" }, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, -/area/bigredv2/outside/filtration_plant) +/area/bigredv2/outside/engineering) "bsZ" = ( /obj/structure/janitorialcart, -/turf/open/floor, +/turf/open/floor{ + dir = 10; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bta" = ( /obj/structure/machinery/constructable_frame{ icon_state = "box_1" }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "btb" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/machinery/constructable_frame, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "btc" = ( /obj/structure/surface/table, /obj/structure/machinery/light, /obj/effect/spawner/random/tool, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "btd" = ( /obj/structure/surface/table, @@ -23829,28 +24381,48 @@ /obj/item/stack/sheet/metal{ amount = 30 }, -/turf/open/floor, +/turf/open/floor{ + dir = 6; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bte" = ( -/obj/structure/machinery/light, -/turf/open/floor, +/obj/structure/machinery/light{ + dir = 4 + }, +/obj/structure/sign/safety/high_rad{ + pixel_x = 32 + }, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bti" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/reagent_dispensers/fueltank, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "btj" = ( /obj/structure/bed/chair, /obj/structure/machinery/light{ dir = 1 }, -/turf/open/floor, -/area/bigredv2/outside/filtration_plant) +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "btk" = ( /obj/structure/bed/chair, -/turf/open/floor, -/area/bigredv2/outside/filtration_plant) +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "btn" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor{ @@ -23865,43 +24437,40 @@ }, /area/bigredv2/outside/se) "btr" = ( -/obj/structure/machinery/computer/station_alert{ - dir = 1 - }, -/obj/structure/surface/table, -/turf/open/floor, -/area/bigredv2/outside/engineering) -"bts" = ( -/obj/structure/machinery/power/monitor{ - name = "Main Power Grid Monitoring" +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" }, -/turf/open/floor, /area/bigredv2/outside/engineering) "btt" = ( -/obj/structure/surface/table, -/obj/item/device/analyzer, -/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/obj/structure/bed/chair/office/light, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "btu" = ( -/obj/structure/machinery/computer/atmos_alert{ - dir = 1 +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" }, -/obj/structure/surface/table, -/turf/open/floor, /area/bigredv2/outside/engineering) "btw" = ( /turf/open/floor/plating, /area/bigredv2/outside/lz2_south_cas) "btA" = ( /obj/effect/landmark/hunter_primary, -/turf/open/floor, -/area/bigredv2/outside/filtration_plant) +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/engineering) "btB" = ( /obj/structure/pipes/standard/simple/hidden/green, /obj/structure/reagent_dispensers/fueltank, -/turf/open/floor, -/area/bigredv2/outside/filtration_plant) +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "btD" = ( /turf/open/mars_cave{ icon_state = "mars_dirt_7" @@ -23915,8 +24484,8 @@ dir = 1; name = "\improper Engineering Complex" }, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/engineering) "btJ" = ( @@ -23924,13 +24493,19 @@ dir = 4 }, /obj/structure/machinery/light, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "btK" = ( -/obj/structure/pipes/standard/manifold/hidden/green{ - dir = 1 +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/obj/item/stack/sheet/metal, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" }, -/turf/open/floor, /area/bigredv2/outside/engineering) "btN" = ( /obj/structure/pipes/standard/simple/hidden/green{ @@ -23940,15 +24515,18 @@ /obj/structure/machinery/light{ dir = 4 }, -/turf/open/floor, -/area/bigredv2/outside/filtration_plant) +/turf/open/floor{ + dir = 6; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "bua" = ( /obj/structure/pipes/standard/simple/hidden/green, /obj/structure/machinery/door/airlock/multi_tile/almayer/generic{ name = "\improper Engineering Complex" }, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/engineering) "bub" = ( @@ -25524,7 +26102,9 @@ /obj/structure/surface/table, /obj/item/trash/kepler, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bAp" = ( /obj/structure/pipes/vents/pump{ @@ -25835,9 +26415,12 @@ }, /area/bigredv2/caves/eta/xenobiology) "bBg" = ( -/obj/structure/machinery/power/geothermal, -/turf/open/floor/plating, -/area/bigredv2/outside/medical) +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) "bBh" = ( /obj/structure/filingcabinet, /turf/open/floor{ @@ -27309,12 +27892,27 @@ icon_state = "asteroidwarning" }, /area/bigredv2/outside/telecomm/lz2_cave) +"bYW" = ( +/obj/structure/pipes/vents/pump, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "bZp" = ( /obj/structure/bed/chair{ dir = 4 }, /turf/open/floor/plating, /area/bigredv2/outside/nw/ceiling) +"bZJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/clothing/suit/radiation, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellowcorners2" + }, +/area/bigredv2/outside/engineering) "bZL" = ( /obj/effect/landmark/monkey_spawn, /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, @@ -27338,7 +27936,10 @@ /obj/structure/surface/table, /obj/effect/spawner/random/bomb_supply, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "cdA" = ( /turf/open/mars_cave{ @@ -27386,6 +27987,14 @@ icon_state = "mars_dirt_4" }, /area/bigredv2/caves/mining) +"cla" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/engineering) "clB" = ( /turf/open/floor{ dir = 1; @@ -27505,10 +28114,15 @@ icon_state = "darkyellowcorners2" }, /area/bigredv2/caves/eta/living) -"cuF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/pipes/standard/manifold/hidden/green, -/turf/open/floor, +"cud" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "cvi" = ( /obj/effect/decal/cleanable/dirt, @@ -27583,12 +28197,6 @@ icon_state = "platingdmg3" }, /area/bigredv2/caves/mining) -"cFb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/sheet/metal, -/obj/structure/bed/chair/office/light, -/turf/open/floor, -/area/bigredv2/outside/engineering) "cGQ" = ( /obj/structure/blocker/forcefield/multitile_vehicles, /turf/open/floor{ @@ -27603,7 +28211,10 @@ pixel_x = -32; start_charge = 0 }, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "cGZ" = ( /turf/open/mars_cave{ @@ -27681,6 +28292,12 @@ icon_state = "mars_cave_20" }, /area/bigredv2/caves_north) +"cKu" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "cLZ" = ( /obj/structure/closet/secure_closet/brig, /obj/effect/landmark/objective_landmark/close, @@ -27688,12 +28305,31 @@ icon_state = "dark" }, /area/bigredv2/outside/marshal_office) +"cNb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/machinery/light{ + dir = 1 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/engineering) "cNH" = ( /obj/structure/pipes/standard/simple/hidden/green, /turf/open/floor{ icon_state = "delivery" }, /area/bigredv2/outside/bar) +"cOa" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/crap_item, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/engineering) "cOl" = ( /turf/open/mars_cave{ icon_state = "mars_cave_18" @@ -27799,6 +28435,12 @@ /obj/effect/landmark/objective_landmark/medium, /turf/open/floor/plating, /area/bigredv2/caves/mining) +"cZB" = ( +/obj/structure/pipes/standard/manifold/hidden/green, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/engineering) "daf" = ( /obj/effect/landmark/crap_item, /turf/open/mars_cave{ @@ -27835,6 +28477,14 @@ icon_state = "delivery" }, /area/bigredv2/outside/c) +"dhN" = ( +/obj/structure/window/framed/solaris, +/obj/structure/machinery/door/poddoor/almayer{ + id = "rad_door"; + name = "\improper Radiation Shielding" + }, +/turf/open/floor/plating, +/area/bigredv2/outside/engineering) "dhS" = ( /obj/structure/machinery/light/small{ dir = 4 @@ -27926,6 +28576,19 @@ icon_state = "platingdmg3" }, /area/bigredv2/caves/mining) +"dsm" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/engineering) +"dsy" = ( +/obj/structure/platform, +/obj/structure/platform{ + dir = 8 + }, +/turf/open/gm/river, +/area/bigredv2/outside/engineering) "dtf" = ( /obj/structure/prop/server_equipment/broken, /turf/open/floor{ @@ -27947,6 +28610,12 @@ /obj/effect/landmark/corpsespawner/colonist/burst, /turf/open/floor/plating, /area/bigredv2/caves/mining) +"duA" = ( +/obj/structure/platform{ + dir = 1 + }, +/turf/open/gm/river, +/area/bigredv2/outside/engineering) "dvB" = ( /obj/item/ore/coal{ pixel_x = 9; @@ -27959,10 +28628,10 @@ /area/bigredv2/caves/mining) "dvC" = ( /obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, -/area/bigredv2/outside/filtration_plant) +/area/bigredv2/outside/engineering) "dwL" = ( /obj/structure/bed/chair{ buckling_y = 5; @@ -27991,6 +28660,16 @@ "dyv" = ( /turf/open/mars, /area/bigredv2/caves/eta/xenobiology) +"dyH" = ( +/obj/structure/machinery/computer/area_atmos{ + dir = 1 + }, +/obj/structure/surface/table, +/turf/open/floor{ + dir = 6; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "dzY" = ( /obj/structure/pipes/standard/simple/hidden/green, /turf/open/floor{ @@ -28035,6 +28714,17 @@ icon_state = "platingdmg3" }, /area/bigredv2/caves/mining) +"dBU" = ( +/obj/structure/barricade/handrail{ + dir = 1; + layer = 3.01; + pixel_y = 9 + }, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "dCb" = ( /obj/effect/landmark/corpsespawner/security/marshal, /obj/effect/decal/cleanable/blood/oil, @@ -28227,6 +28917,12 @@ icon_state = "mars_cave_23" }, /area/bigredv2/caves/mining) +"dQw" = ( +/obj/structure/blocker/forcefield/multitile_vehicles, +/turf/open/mars_cave{ + icon_state = "mars_cave_5" + }, +/area/bigredv2/caves_sw) "dQF" = ( /obj/effect/spawner/random/tool, /turf/open/mars_cave{ @@ -28234,16 +28930,13 @@ }, /area/bigredv2/caves/mining) "dQZ" = ( -/obj/structure/machinery/door/airlock/almayer/engineering/colony{ - name = "\improper Engine Reactor Control" - }, -/obj/structure/pipes/standard/simple/hidden/green{ - dir = 4 - }, +/obj/structure/closet/toolcloset, +/obj/effect/decal/cleanable/dirt, /turf/open/floor{ - icon_state = "delivery" + dir = 5; + icon_state = "darkyellow2" }, -/area/bigredv2/outside/engineering) +/area/bigredv2/outside/filtration_plant) "dSg" = ( /obj/effect/landmark/crap_item, /obj/effect/decal/cleanable/dirt, @@ -28273,6 +28966,14 @@ icon_state = "mars_cave_5" }, /area/bigredv2/outside/lz2_south_cas) +"dWd" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 5 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/engineering) "dWg" = ( /obj/structure/pipes/standard/simple/hidden/green, /turf/open/mars{ @@ -28281,7 +28982,10 @@ /area/bigredv2/outside/c) "dWl" = ( /obj/structure/closet/toolcloset, -/turf/open/floor, +/turf/open/floor{ + dir = 9; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "dXs" = ( /obj/item/tool/pickaxe{ @@ -28325,6 +29029,13 @@ icon_state = "platingdmg3" }, /area/bigredv2/caves/mining) +"ebr" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellowcorners2" + }, +/area/bigredv2/outside/engineering) "ebZ" = ( /turf/open/floor{ icon_state = "darkgreencorners2" @@ -28375,6 +29086,14 @@ icon_state = "mars_dirt_6" }, /area/bigredv2/caves/mining) +"egL" = ( +/obj/structure/surface/table, +/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, +/turf/open/floor{ + dir = 10; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "egS" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating, @@ -28548,6 +29267,13 @@ icon_state = "mars_cave_2" }, /area/bigredv2/caves/mining) +"ewv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/curtain/red, +/turf/open/floor{ + icon_state = "freezerfloor" + }, +/area/bigredv2/outside/engineering) "exc" = ( /turf/open/floor{ dir = 4; @@ -28635,10 +29361,9 @@ }, /area/bigredv2/caves_sw) "eGM" = ( -/obj/structure/surface/table, -/obj/item/device/lightreplacer, -/obj/structure/pipes/standard/manifold/hidden/green, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellowcorners2" + }, /area/bigredv2/outside/engineering) "eHA" = ( /obj/structure/pipes/standard/simple/hidden/green, @@ -28646,6 +29371,14 @@ icon_state = "dark" }, /area/bigredv2/caves/eta/xenobiology) +"eIN" = ( +/obj/structure/machinery/power/port_gen/pacman, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "eJE" = ( /turf/open/floor{ dir = 4; @@ -28670,7 +29403,10 @@ pixel_x = 30; throw_range = 15 }, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "eLp" = ( /obj/structure/closet/secure_closet/brig, @@ -28738,6 +29474,13 @@ }, /turf/closed/wall/solaris, /area/bigredv2/outside/dorms) +"eSm" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "eSu" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /turf/open/mars_cave{ @@ -28883,8 +29626,13 @@ /area/bigredv2/caves/lambda/research) "fgE" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/static_comms/net_two, -/turf/open/floor, +/obj/effect/decal/remains/human, +/obj/effect/landmark/static_comms/net_two{ + broken_on_spawn = 1 + }, +/turf/open/floor{ + icon_state = "podhatchfloor" + }, /area/bigredv2/outside/engineering) "fhy" = ( /obj/structure/bed/chair/comfy/blue{ @@ -28956,6 +29704,10 @@ icon_state = "darkyellowcorners2" }, /area/bigredv2/caves/eta/living) +"fnv" = ( +/obj/structure/bed/chair/comfy, +/turf/open/floor/carpet, +/area/bigredv2/caves/lambda/breakroom) "fnO" = ( /turf/open/mars_cave{ icon_state = "mars_cave_13" @@ -29085,6 +29837,11 @@ /obj/structure/pipes/standard/tank/phoron, /turf/open/floor/plating, /area/bigredv2/caves/mining) +"fBo" = ( +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/filtration_plant) "fCb" = ( /turf/open/floor, /area/bigredv2/outside/filtration_cave_cas) @@ -29094,6 +29851,14 @@ icon_state = "darkred2" }, /area/bigredv2/caves/eta/research) +"fEv" = ( +/obj/structure/machinery/door/airlock/almayer/secure/colony{ + name = "\improper Engine Reactor" + }, +/turf/open/floor{ + icon_state = "delivery" + }, +/area/bigredv2/outside/engineering) "fFG" = ( /obj/structure/largecrate/random/barrel, /turf/open/mars_cave{ @@ -29141,6 +29906,12 @@ icon_state = "mars_cave_6" }, /area/bigredv2/caves_virology) +"fLl" = ( +/turf/open/floor{ + dir = 5; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "fLA" = ( /obj/structure/pipes/standard/simple/hidden/green, /obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, @@ -29221,7 +29992,10 @@ /obj/structure/surface/table, /obj/effect/spawner/random/toolbox, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "fOM" = ( /obj/effect/decal/warning_stripes{ @@ -29295,12 +30069,31 @@ icon_state = "asteroidwarning" }, /area/bigredv2/outside/filtration_plant) +"fUp" = ( +/obj/structure/machinery/door/airlock/almayer/secure/colony{ + dir = 1; + name = "\improper Engine Reactor" + }, +/turf/open/floor{ + icon_state = "delivery" + }, +/area/bigredv2/outside/engineering) "fWw" = ( /turf/open/jungle{ bushes_spawn = 0; icon_state = "grass_impenetrable" }, /area/bigredv2/caves/eta/xenobiology) +"fXm" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "fYH" = ( /turf/closed/wall/solaris/reinforced/hull, /area/bigredv2/caves/mining) @@ -29330,8 +30123,8 @@ }, /area/bigredv2/outside/eta) "gad" = ( -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/filtration_plant) "gan" = ( @@ -29354,6 +30147,12 @@ "gda" = ( /turf/open/mars_cave, /area/bigredv2/outside/lz1_telecomm_cas) +"gdx" = ( +/turf/open/floor{ + dir = 6; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "gdN" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /turf/open/mars, @@ -29363,6 +30162,14 @@ icon_state = "mars_dirt_6" }, /area/bigredv2/outside/lz1_north_cas) +"gfX" = ( +/obj/structure/sign/safety/hazard{ + pixel_y = -32 + }, +/turf/open/floor{ + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "ggC" = ( /obj/structure/surface/rack, /obj/effect/landmark/good_item, @@ -29381,6 +30188,10 @@ "gio" = ( /turf/open/mars_cave, /area/bigredv2/outside/filtration_cave_cas) +"giB" = ( +/obj/structure/blocker/forcefield/multitile_vehicles, +/turf/open/mars_cave, +/area/bigredv2/caves_sw) "giY" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 @@ -29420,6 +30231,15 @@ /obj/structure/blocker/forcefield/multitile_vehicles, /turf/closed/wall/solaris/reinforced, /area/bigredv2/outside/lz2_south_cas) +"gmm" = ( +/obj/structure/window/framed/solaris, +/obj/effect/decal/cleanable/molten_item, +/obj/structure/machinery/door/poddoor/almayer{ + id = "rad_door"; + name = "\improper Radiation Shielding" + }, +/turf/open/floor/plating, +/area/bigredv2/outside/engineering) "gmN" = ( /turf/open/mars_cave{ icon_state = "mars_cave_18" @@ -29493,6 +30313,12 @@ "gtX" = ( /turf/open/mars_cave, /area/bigredv2/caves_se) +"guu" = ( +/obj/structure/machinery/light, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/engineering) "guM" = ( /turf/open/mars_cave{ icon_state = "mars_dirt_4" @@ -29512,7 +30338,7 @@ do_not_disturb = 1; phone_category = "Lambda Labs"; phone_color = "red"; - phone_id = "Secure Storage"; + phone_id = "Director's Safe Room"; pixel_x = -18 }, /turf/open/floor{ @@ -29520,6 +30346,13 @@ icon_state = "elevatorshaft" }, /area/bigredv2/caves/lambda/breakroom) +"gwg" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "gxJ" = ( /turf/open/mars_cave{ icon_state = "mars_cave_18" @@ -29568,7 +30401,10 @@ "gCx" = ( /obj/structure/surface/table, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "gCC" = ( /obj/structure/closet/secure_closet, @@ -29596,6 +30432,13 @@ icon_state = "mars_cave_2" }, /area/bigredv2/caves_east) +"gFR" = ( +/obj/structure/machinery/power/port_gen/pacman, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "gGO" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating{ @@ -29609,6 +30452,13 @@ icon_state = "mars_cave_2" }, /area/bigredv2/caves/mining) +"gHV" = ( +/obj/structure/surface/table, +/turf/open/floor{ + dir = 6; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "gJw" = ( /obj/structure/blocker/forcefield/multitile_vehicles, /turf/open/mars_cave, @@ -29619,6 +30469,13 @@ icon_state = "mars_cave_4" }, /area/bigredv2/caves_virology) +"gML" = ( +/obj/structure/machinery/power/turbine, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "gNz" = ( /obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, /obj/effect/landmark/structure_spawner/setup/distress/xeno_door, @@ -29640,6 +30497,15 @@ icon_state = "mars_cave_2" }, /area/bigredv2/caves_research) +"gPh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/machinery/door/airlock/almayer/secure/colony{ + name = "\improper Engine Reactor" + }, +/turf/open/floor{ + icon_state = "delivery" + }, +/area/bigredv2/outside/engineering) "gPE" = ( /obj/effect/decal/cleanable/dirt, /obj/item/device/flashlight/lantern, @@ -29683,6 +30549,28 @@ icon_state = "platingdmg3" }, /area/bigredv2/caves/mining) +"gUD" = ( +/obj/structure/barricade/handrail{ + dir = 1; + layer = 3.01; + pixel_y = 9 + }, +/turf/open/floor{ + dir = 9; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) +"gVl" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 1; + pixel_y = 1 + }, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellowcorners2" + }, +/area/bigredv2/outside/engineering) "gVm" = ( /turf/open/floor{ dir = 6; @@ -29726,12 +30614,50 @@ icon_state = "mars_cave_2" }, /area/bigredv2/caves_sw) +"gZc" = ( +/obj/structure/machinery/light{ + dir = 8 + }, +/obj/structure/sign/safety/high_rad{ + pixel_x = -32 + }, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) +"haT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) "hcb" = ( /obj/effect/landmark/hunter_secondary, /turf/open/mars_cave{ icon_state = "mars_cave_2" }, /area/bigredv2/outside/lz1_telecomm_cas) +"hcH" = ( +/obj/structure/surface/table, +/obj/effect/spawner/random/tool, +/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) +"hdc" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "heG" = ( /obj/structure/bed/chair{ can_buckle = 0; @@ -29776,6 +30702,12 @@ icon_state = "mars_dirt_7" }, /area/bigredv2/outside/lz1_north_cas) +"hhK" = ( +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "hiP" = ( /obj/structure/sign/safety/one{ pixel_x = 16 @@ -29874,7 +30806,9 @@ "hsF" = ( /obj/structure/closet/firecloset/full, /obj/effect/landmark/objective_landmark/close, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "hsJ" = ( /obj/item/ore, @@ -30090,7 +31024,7 @@ }, /area/bigredv2/outside/lambda_cave_cas) "hSP" = ( -/obj/structure/machinery/vending/cigarette, +/obj/structure/machinery/vending/cigarette/colony, /turf/open/mars_cave{ icon_state = "mars_dirt_6" }, @@ -30126,6 +31060,18 @@ icon_state = "mars_cave_15" }, /area/bigredv2/caves/mining) +"hYB" = ( +/obj/structure/platform{ + dir = 1 + }, +/obj/structure/platform{ + dir = 8 + }, +/obj/structure/platform_decoration{ + dir = 5 + }, +/turf/open/gm/river, +/area/bigredv2/outside/engineering) "hYI" = ( /obj/effect/landmark/xeno_hive_spawn, /obj/effect/landmark/ert_spawns/groundside_xeno, @@ -30161,6 +31107,10 @@ }, /turf/open/floor, /area/bigredv2/outside/cargo) +"iaC" = ( +/obj/structure/platform, +/turf/open/gm/river, +/area/bigredv2/outside/engineering) "iaN" = ( /obj/structure/largecrate/random/barrel/red, /obj/effect/decal/cleanable/dirt, @@ -30186,6 +31136,13 @@ icon_state = "mars_cave_6" }, /area/bigredv2/caves_sw) +"idM" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "iep" = ( /obj/structure/surface/rack, /obj/item/clothing/head/hardhat/dblue{ @@ -30254,6 +31211,11 @@ icon_state = "mars_dirt_7" }, /area/bigredv2/outside/eta) +"iig" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/window/framed/solaris, +/turf/open/floor/plating, +/area/bigredv2/outside/engineering) "ijU" = ( /obj/structure/prop/almayer/cannon_cables{ name = "\improper Cables" @@ -30387,13 +31349,24 @@ "iyd" = ( /obj/structure/machinery/computer/general_air_control, /obj/structure/surface/table, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "iyY" = ( /turf/open/mars_cave{ icon_state = "mars_cave_13" }, /area/bigredv2/outside/lz1_north_cas) +"izb" = ( +/obj/structure/surface/table, +/obj/effect/spawner/random/tool, +/obj/effect/spawner/random/technology_scanner, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/engineering) "izh" = ( /turf/open/mars_cave{ icon_state = "mars_cave_2" @@ -30422,6 +31395,12 @@ icon_state = "mars_cave_11" }, /area/bigredv2/caves_sw) +"iAI" = ( +/obj/structure/platform{ + dir = 8 + }, +/turf/open/gm/river, +/area/bigredv2/outside/engineering) "iDJ" = ( /obj/effect/landmark/corpsespawner/miner, /obj/effect/decal/cleanable/blood{ @@ -30471,6 +31450,14 @@ icon_state = "platingdmg3" }, /area/bigredv2/caves/mining) +"iFa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/bananapeel, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "iGK" = ( /turf/open/mars_cave, /area/bigredv2/caves_sw) @@ -30511,10 +31498,8 @@ }, /area/bigredv2/caves/mining) "iNR" = ( -/turf/open/mars_cave{ - icon_state = "mars_cave_20" - }, -/area/bigredv2/caves_sw) +/turf/open/gm/river, +/area/bigredv2/outside/engineering) "iOL" = ( /obj/effect/landmark/crap_item, /turf/open/mars_cave{ @@ -30534,12 +31519,10 @@ /turf/open/gm/river, /area/bigredv2/outside/filtration_plant) "iQC" = ( -/obj/structure/surface/table, -/obj/structure/pipes/standard/simple/hidden/green{ - dir = 4 +/obj/effect/landmark/crap_item, +/turf/open/floor{ + icon_state = "dark" }, -/obj/item/clothing/head/welding, -/turf/open/floor, /area/bigredv2/outside/engineering) "iQG" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, @@ -30569,6 +31552,15 @@ icon_state = "mars_cave_2" }, /area/bigredv2/caves_research) +"iSz" = ( +/obj/structure/barricade/handrail{ + dir = 1; + layer = 3.01; + pixel_y = 9 + }, +/obj/structure/barricade/handrail, +/turf/open/floor/plating/plating_catwalk, +/area/bigredv2/outside/engineering) "iUe" = ( /turf/open/floor{ dir = 6; @@ -30869,6 +31861,19 @@ icon_state = "bcircuitoff" }, /area/bigredv2/caves/lambda/research) +"jxA" = ( +/obj/structure/barricade/handrail, +/turf/open/floor/plating/plating_catwalk, +/area/bigredv2/outside/engineering) +"jxS" = ( +/obj/structure/machinery/light{ + dir = 4 + }, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "jzD" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /turf/open/floor{ @@ -30894,6 +31899,11 @@ icon_state = "mars_cave_5" }, /area/bigredv2/caves_sw) +"jAJ" = ( +/turf/open/floor{ + icon_state = "podhatchfloor" + }, +/area/bigredv2/outside/engineering) "jAN" = ( /obj/item/tool/pickaxe, /turf/open/mars_cave{ @@ -30949,6 +31959,14 @@ }, /turf/open/floor/plating, /area/bigredv2/caves/mining) +"jDT" = ( +/obj/structure/surface/table, +/obj/effect/spawner/random/technology_scanner, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "jEx" = ( /obj/structure/machinery/power/port_gen/pacman/super, /turf/open/mars_cave{ @@ -31036,6 +32054,16 @@ icon_state = "mars_cave_2" }, /area/bigredv2/caves_sw) +"jMn" = ( +/obj/structure/machinery/light{ + dir = 8 + }, +/obj/effect/decal/cleanable/ash, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "jOc" = ( /obj/structure/machinery/door/poddoor/almayer/closed{ dir = 4; @@ -31119,6 +32147,21 @@ icon_state = "platingdmg3" }, /area/bigredv2/caves/mining) +"jRn" = ( +/obj/structure/machinery/computer3/server, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) +"jTk" = ( +/obj/structure/surface/table, +/obj/effect/decal/cleanable/molten_item, +/turf/open/floor{ + dir = 10; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "jUc" = ( /obj/structure/surface/table, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, @@ -31199,6 +32242,25 @@ icon_state = "mars_cave_13" }, /area/bigredv2/caves/mining) +"jXf" = ( +/obj/structure/pipes/standard/manifold/hidden/green{ + dir = 4 + }, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) +"jXJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/machinery/light_construct{ + dir = 8 + }, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "jXP" = ( /obj/item/stack/cable_coil/cut, /turf/open/mars_cave{ @@ -31220,7 +32282,9 @@ /area/bigredv2/caves/mining) "jYF" = ( /obj/structure/machinery/recharge_station, -/turf/open/floor, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, /area/bigredv2/outside/engineering) "jYS" = ( /obj/effect/decal/cleanable/blood, @@ -31415,6 +32479,15 @@ icon_state = "mars_dirt_6" }, /area/bigredv2/caves/mining) +"kka" = ( +/obj/structure/barricade/handrail, +/obj/structure/barricade/handrail{ + dir = 1; + layer = 3.01; + pixel_y = 9 + }, +/turf/open/floor/plating/plating_catwalk, +/area/bigredv2/outside/engineering) "kli" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /turf/open/mars_cave{ @@ -31448,6 +32521,12 @@ icon_state = "delivery" }, /area/bigredv2/outside/admin_building) +"kmx" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + icon_state = "darkyellowcorners2" + }, +/area/bigredv2/outside/engineering) "knN" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 @@ -31490,6 +32569,13 @@ /obj/effect/decal/cleanable/blood/writing, /turf/open/floor/plating, /area/bigredv2/caves/mining) +"ksO" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/engineering) "ktE" = ( /obj/item/tool/wrench{ pixel_x = -7; @@ -31507,6 +32593,13 @@ icon_state = "mars_cave_17" }, /area/bigredv2/outside/filtration_plant) +"ktY" = ( +/obj/effect/landmark/survivor_spawner, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "kuu" = ( /obj/effect/decal/cleanable/dirt, /obj/item/trash/cigbutt, @@ -31617,6 +32710,12 @@ icon_state = "wood" }, /area/bigredv2/outside/admin_building) +"kIF" = ( +/obj/structure/bed/chair/comfy/orange{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/bigredv2/caves/lambda/breakroom) "kIW" = ( /obj/structure/fence, /turf/open/floor{ @@ -31675,6 +32774,13 @@ icon_state = "mars_cave_2" }, /area/bigredv2/caves_research) +"kNK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/engineering) "kNP" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 9 @@ -31758,10 +32864,10 @@ }, /area/bigredv2/outside/filtration_cave_cas) "kVT" = ( -/obj/structure/flora/pottedplant{ - icon_state = "pottedplant_21" +/turf/open/floor{ + dir = 10; + icon_state = "darkyellow2" }, -/turf/open/floor, /area/bigredv2/outside/engineering) "kVY" = ( /obj/structure/surface/rack, @@ -31808,6 +32914,13 @@ }, /turf/open/floor/plating, /area/bigredv2/caves/mining) +"lck" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "lcu" = ( /obj/structure/surface/table/reinforced/prison, /obj/item/clothing/mask/cigarette, @@ -31866,6 +32979,13 @@ }, /turf/open/floor, /area/bigredv2/outside/lz2_south_cas) +"lmi" = ( +/obj/structure/closet/toolcloset, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "lms" = ( /turf/open/floor{ dir = 6; @@ -31885,6 +33005,16 @@ icon_state = "mars_cave_3" }, /area/bigredv2/caves/mining) +"lqo" = ( +/obj/item/tool/lighter/random, +/obj/structure/pipes/vents/pump{ + dir = 4 + }, +/obj/structure/surface/table, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/engineering) "lrH" = ( /obj/effect/landmark/crap_item, /turf/open/mars_cave{ @@ -31981,6 +33111,12 @@ /obj/structure/blocker/forcefield/multitile_vehicles, /turf/closed/wall/solaris/reinforced, /area/bigredv2/caves) +"lAF" = ( +/obj/item/paper_bin, +/obj/item/tool/pen, +/obj/structure/surface/table/woodentable/fancy, +/turf/open/floor/wood, +/area/bigredv2/caves/lambda/breakroom) "lAK" = ( /obj/effect/landmark/static_comms/net_two, /turf/open/floor{ @@ -32036,6 +33172,14 @@ icon_state = "redfull" }, /area/bigredv2/caves/eta/research) +"lEi" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/engineering) "lEw" = ( /obj/item/tool/pickaxe{ pixel_y = -3 @@ -32181,6 +33325,23 @@ icon_state = "asteroidwarning" }, /area/bigredv2/outside/filtration_cave_cas) +"lTi" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) +"lTM" = ( +/obj/item/folder/yellow, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellowcorners2" + }, +/area/bigredv2/outside/engineering) "lUd" = ( /obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, /obj/effect/landmark/structure_spawner/setup/distress/xeno_door, @@ -32234,6 +33395,12 @@ icon_state = "platingdmg2" }, /area/bigredv2/caves/mining) +"lYH" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor{ + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) "lYZ" = ( /obj/structure/bed/chair/office/dark{ dir = 8 @@ -32246,8 +33413,8 @@ }, /area/bigredv2/caves/mining) "maD" = ( -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/engineering) "maF" = ( @@ -32256,6 +33423,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/bigredv2/caves/mining) +"maH" = ( +/obj/structure/surface/table, +/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "mdU" = ( /obj/structure/machinery/power/apc{ dir = 1; @@ -32294,6 +33469,21 @@ }, /turf/closed/wall/solaris/reinforced/hull, /area/bigredv2/caves/mining) +"mhZ" = ( +/obj/structure/machinery/portable_atmospherics/canister/air, +/turf/open/floor{ + dir = 5; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) +"mij" = ( +/obj/item/folder/yellow, +/obj/effect/landmark/crap_item, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "miD" = ( /obj/effect/decal/cleanable/blood, /obj/effect/landmark/corpsespawner/security/marshal, @@ -32308,6 +33498,13 @@ }, /turf/open/floor, /area/bigred/ground/garage_workshop) +"mlV" = ( +/obj/structure/surface/table, +/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/engineering) "mmg" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/drip{ @@ -32338,6 +33535,12 @@ icon_state = "platingdmg3" }, /area/bigredv2/caves/mining) +"mqh" = ( +/obj/structure/window/framed/solaris, +/turf/open/floor{ + icon_state = "panelscorched" + }, +/area/bigredv2/outside/engineering) "mqX" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /turf/open/mars_cave{ @@ -32563,6 +33766,14 @@ icon_state = "mars_cave_2" }, /area/bigredv2/caves/mining) +"mPK" = ( +/obj/effect/decal/cleanable/liquid_fuel, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "mRi" = ( /obj/effect/landmark/structure_spawner/xvx_hive/xeno_core, /turf/open/mars_cave{ @@ -32581,6 +33792,12 @@ icon_state = "asteroidwarning" }, /area/bigredv2/outside/c) +"mSS" = ( +/turf/open/floor{ + dir = 8; + icon_state = "darkyellowcorners2" + }, +/area/bigredv2/outside/engineering) "mST" = ( /obj/effect/decal/warning_stripes{ icon_state = "SE-out"; @@ -32678,6 +33895,12 @@ icon_state = "mars_dirt_4" }, /area/bigredv2/caves/mining) +"ndw" = ( +/turf/open/floor{ + dir = 4; + icon_state = "darkyellowcorners2" + }, +/area/bigredv2/outside/engineering) "ndy" = ( /obj/effect/decal/cleanable/blood/drip{ pixel_x = -3; @@ -32699,6 +33922,15 @@ icon_state = "mars_dirt_6" }, /area/bigredv2/caves/mining) +"niQ" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 6 + }, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellowcorners2" + }, +/area/bigredv2/outside/engineering) "njf" = ( /turf/open/mars_cave{ icon_state = "mars_dirt_6" @@ -32734,6 +33966,12 @@ icon_state = "mars_dirt_6" }, /area/bigredv2/caves/mining) +"nlJ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) "nlW" = ( /obj/structure/platform/kutjevo/rock, /obj/structure/platform/kutjevo/rock{ @@ -32742,6 +33980,13 @@ /obj/structure/platform_decoration/kutjevo/rock, /turf/open/mars, /area/space) +"nmU" = ( +/obj/structure/surface/table, +/obj/item/device/analyzer, +/turf/open/floor{ + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "nny" = ( /turf/open/mars_cave{ icon_state = "mars_dirt_7" @@ -32754,6 +33999,23 @@ icon_state = "asteroidfloor" }, /area/bigredv2/outside/e) +"nnU" = ( +/obj/structure/machinery/door_control{ + desc = "A remote control-switch for opening the engines blast doors."; + id = "rad_door"; + name = "Reactor Radiation Shielding control"; + pixel_x = 30; + req_access_txt = "7" + }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor{ + dir = 5; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "npz" = ( /obj/structure/surface/table, /obj/item/spacecash/c100, @@ -32811,6 +34073,18 @@ icon_state = "platingdmg3" }, /area/bigredv2/caves/mining) +"nug" = ( +/obj/structure/platform{ + dir = 1 + }, +/obj/structure/platform{ + dir = 4 + }, +/obj/structure/platform_decoration{ + dir = 9 + }, +/turf/open/gm/river, +/area/bigredv2/outside/engineering) "nuw" = ( /obj/effect/decal/warning_stripes{ icon_state = "NE-out"; @@ -32821,6 +34095,19 @@ icon_state = "dark" }, /area/bigredv2/outside/admin_building) +"nuz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/barricade/handrail, +/turf/open/floor{ + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) +"nwB" = ( +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) "nwS" = ( /obj/item/ore{ pixel_x = -7; @@ -32838,6 +34125,13 @@ icon_state = "mars_cave_3" }, /area/bigredv2/caves/mining) +"nzN" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "nBb" = ( /obj/item/ammo_magazine/pistol/b92fs, /obj/item/weapon/gun/pistol/b92fs{ @@ -32875,6 +34169,14 @@ icon_state = "mars_dirt_5" }, /area/bigredv2/outside/eta) +"nEP" = ( +/obj/structure/surface/table, +/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellowcorners2" + }, +/area/bigredv2/outside/filtration_plant) "nEV" = ( /obj/item/weapon/twohanded/folded_metal_chair{ pixel_x = -10; @@ -32931,6 +34233,15 @@ icon_state = "delivery" }, /area/bigredv2/outside/filtration_cave_cas) +"nIi" = ( +/obj/structure/machinery/door/airlock/almayer/secure/colony{ + dir = 1; + name = "\improper Engine Reactor" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/bigredv2/outside/engineering) "nKL" = ( /obj/structure/prop/invuln/minecart_tracks{ desc = "An exchange valve"; @@ -32944,6 +34255,12 @@ icon_state = "platingdmg3" }, /area/bigredv2/caves/mining) +"nLw" = ( +/obj/structure/blocker/forcefield/multitile_vehicles, +/turf/open/mars_cave{ + icon_state = "mars_dirt_4" + }, +/area/bigredv2/outside/sw) "nMB" = ( /obj/structure/machinery/door_control{ id = "workshop_br_g"; @@ -32963,6 +34280,15 @@ icon_state = "platingdmg3" }, /area/bigredv2/caves/mining) +"nPz" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "nQl" = ( /obj/item/ore{ pixel_x = -1; @@ -33023,10 +34349,9 @@ }, /area/bigredv2/outside/filtration_cave_cas) "nVq" = ( -/obj/structure/surface/table, -/obj/item/clothing/glasses/welding, -/obj/structure/pipes/vents/pump, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "nVw" = ( /turf/open/mars_cave{ @@ -33211,6 +34536,12 @@ icon_state = "mars_dirt_6" }, /area/bigredv2/outside/sw) +"ojD" = ( +/obj/structure/platform_decoration{ + dir = 4 + }, +/turf/open/gm/river, +/area/bigredv2/outside/engineering) "okh" = ( /obj/structure/cable{ icon_state = "4-8" @@ -33348,10 +34679,16 @@ icon_state = "dark" }, /area/bigredv2/caves/eta/research) +"orT" = ( +/obj/structure/machinery/vending/coffee, +/turf/open/floor/carpet, +/area/bigredv2/caves/lambda/breakroom) "orZ" = ( /obj/structure/closet/secure_closet/atmos_personal, /obj/effect/landmark/objective_landmark/medium, -/turf/open/floor, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, /area/bigredv2/outside/filtration_plant) "otb" = ( /obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, @@ -33368,6 +34705,13 @@ icon_state = "platingdmg3" }, /area/bigredv2/caves/mining) +"ouh" = ( +/obj/item/tool/extinguisher, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "ovq" = ( /turf/open/floor{ icon_state = "delivery" @@ -33491,6 +34835,16 @@ icon_state = "mars_cave_3" }, /area/bigredv2/caves/mining) +"oIK" = ( +/obj/structure/platform, +/obj/structure/platform{ + dir = 4 + }, +/obj/structure/platform_decoration{ + dir = 6 + }, +/turf/open/gm/river, +/area/bigredv2/outside/engineering) "oJd" = ( /obj/structure/prop/invuln/minecart_tracks{ desc = "A heavy duty power cable for high voltage applications"; @@ -33657,6 +35011,14 @@ icon_state = "darkblue2" }, /area/bigredv2/outside/admin_building) +"oWp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/barricade/handrail, +/turf/open/floor{ + dir = 10; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "oWC" = ( /obj/structure/prop/invuln/minecart_tracks{ desc = "A heavy duty power cable for high voltage applications"; @@ -33807,6 +35169,13 @@ icon_state = "mars_cave_2" }, /area/bigredv2/caves/mining) +"pgk" = ( +/obj/structure/machinery/portable_atmospherics/canister/air, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "pgu" = ( /obj/effect/decal/warning_stripes{ icon_state = "W-corner" @@ -33856,6 +35225,15 @@ icon_state = "mars_dirt_11" }, /area/bigredv2/caves_north) +"pog" = ( +/obj/structure/platform{ + dir = 1 + }, +/obj/structure/platform{ + dir = 8 + }, +/turf/open/gm/river, +/area/bigredv2/outside/engineering) "pow" = ( /obj/structure/blocker/forcefield/multitile_vehicles, /turf/open/mars_cave{ @@ -33963,6 +35341,13 @@ icon_state = "dark" }, /area/bigredv2/outside/admin_building) +"pBv" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + dir = 10; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) "pBD" = ( /turf/open/floor{ dir = 4; @@ -34037,12 +35422,28 @@ icon_state = "mars_cave_14" }, /area/bigredv2/caves/mining) +"pKP" = ( +/obj/structure/surface/table, +/obj/effect/spawner/random/tool, +/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "pLj" = ( /obj/structure/largecrate/random/barrel/red, /turf/open/mars_cave{ icon_state = "mars_cave_19" }, /area/bigredv2/caves/mining) +"pMi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/tool/extinguisher, +/turf/open/floor{ + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "pMm" = ( /turf/open/floor{ dir = 8; @@ -34076,12 +35477,28 @@ icon_state = "wood" }, /area/bigredv2/outside/admin_building) +"pOg" = ( +/obj/structure/machinery/compressor{ + dir = 1 + }, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "pOL" = ( /obj/structure/closet/crate/miningcar/yellow, /turf/open/mars_cave{ icon_state = "mars_dirt_4" }, /area/bigredv2/caves/mining) +"pPo" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/filtration_plant) "pQv" = ( /obj/structure/surface/table, /obj/effect/landmark/objective_landmark/close, @@ -34098,6 +35515,14 @@ /obj/structure/blocker/forcefield/multitile_vehicles, /turf/open/mars_cave, /area/bigredv2/outside/lz1_telecomm_cas) +"pRG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/oil, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "pRP" = ( /turf/closed/wall/solaris/reinforced, /area/bigredv2/outside/telecomm/n_cave) @@ -34137,6 +35562,16 @@ icon_state = "mars_cave_13" }, /area/bigredv2/caves/mining) +"pVv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/machinery/compressor{ + dir = 1 + }, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "pVP" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor{ @@ -34144,6 +35579,14 @@ icon_state = "asteroidfloor" }, /area/bigred/ground/garage_workshop) +"pWs" = ( +/obj/structure/barricade/handrail{ + dir = 1; + layer = 3.01; + pixel_y = 9 + }, +/turf/open/floor/plating/plating_catwalk, +/area/bigredv2/outside/engineering) "pXm" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 @@ -34241,7 +35684,10 @@ /obj/structure/surface/table, /obj/effect/spawner/random/tool, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + dir = 5; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "qeX" = ( /obj/structure/largecrate, @@ -34395,6 +35841,13 @@ icon_state = "asteroidwarning" }, /area/bigredv2/outside/filtration_plant) +"qqw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) "qrZ" = ( /obj/structure/surface/table/reinforced/prison, /obj/item/storage/firstaid/fire, @@ -34541,6 +35994,20 @@ icon_state = "platingdmg3" }, /area/bigredv2/caves/mining) +"qGY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) +"qHc" = ( +/turf/open/floor{ + dir = 1; + icon_state = "darkyellowcorners2" + }, +/area/bigredv2/outside/filtration_plant) "qHY" = ( /turf/open/mars_cave{ icon_state = "mars_cave_10" @@ -34640,6 +36107,15 @@ icon_state = "dark" }, /area/bigredv2/caves/eta/xenobiology) +"qUF" = ( +/obj/structure/machinery/computer/area_atmos{ + dir = 1 + }, +/obj/structure/surface/table, +/turf/open/floor{ + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "qUS" = ( /turf/open/mars_cave{ icon_state = "mars_dirt_6" @@ -34743,6 +36219,13 @@ icon_state = "mars_cave_16" }, /area/bigredv2/caves_research) +"rdr" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "rdR" = ( /turf/open/floor, /area/bigredv2/outside/lz2_south_cas) @@ -34763,6 +36246,12 @@ icon_state = "mars_cave_13" }, /area/bigredv2/caves/mining) +"reL" = ( +/obj/effect/landmark/nightmare{ + insert_tag = "vault_v2" + }, +/turf/closed/wall/solaris/rock, +/area/bigredv2/caves) "rfe" = ( /obj/structure/platform/kutjevo/rock{ dir = 8 @@ -34793,6 +36282,18 @@ icon_state = "warnplate" }, /area/bigredv2/outside/telecomm/warehouse) +"rhP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_x = -1; + pixel_y = 1 + }, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellowcorners2" + }, +/area/bigredv2/outside/engineering) "rie" = ( /obj/effect/decal/cleanable/blood/drip, /obj/item/stack/cable_coil/cut{ @@ -34830,6 +36331,12 @@ "rnc" = ( /turf/open/mars_cave, /area/bigredv2/caves_research) +"rnV" = ( +/obj/item/stack/sheet/glass, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/engineering) "row" = ( /turf/open/floor{ dir = 8; @@ -34934,6 +36441,12 @@ icon_state = "mars_dirt_6" }, /area/bigredv2/caves/mining) +"rvS" = ( +/obj/structure/blocker/forcefield/multitile_vehicles, +/turf/open/mars_cave{ + icon_state = "mars_cave_2" + }, +/area/bigredv2/caves_sw) "rxh" = ( /turf/open/mars_cave{ icon_state = "mars_cave_2" @@ -34945,6 +36458,12 @@ icon_state = "mars_cave_23" }, /area/bigredv2/caves_east) +"rzb" = ( +/obj/structure/bed/chair, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/engineering) "rzO" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/reagent_dispensers/water_cooler/stacks{ @@ -35194,6 +36713,23 @@ }, /turf/open/floor/plating, /area/bigredv2/caves/mining) +"rUs" = ( +/obj/structure/machinery/door_control{ + id = "safe_room"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + pixel_y = 28; + req_access_txt = "106"; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/bigredv2/caves/lambda/breakroom) +"rUN" = ( +/obj/structure/platform{ + dir = 4 + }, +/turf/open/gm/river, +/area/bigredv2/outside/engineering) "rUZ" = ( /obj/structure/machinery/light/small{ dir = 8 @@ -35249,6 +36785,13 @@ icon_state = "darkpurple2" }, /area/bigredv2/caves/lambda/research) +"rYr" = ( +/obj/structure/surface/table, +/obj/effect/decal/cleanable/ash, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/engineering) "rYt" = ( /obj/effect/landmark/crap_item, /turf/open/mars_cave{ @@ -35276,6 +36819,23 @@ icon_state = "mars_cave_15" }, /area/bigredv2/caves/mining) +"sap" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) +"saX" = ( +/obj/structure/machinery/power/turbine, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "sbk" = ( /obj/effect/landmark/corpsespawner/miner, /obj/effect/decal/cleanable/blood, @@ -35374,11 +36934,17 @@ icon_state = "mars_dirt_5" }, /area/bigredv2/caves/mining) +"slC" = ( +/turf/open/floor{ + dir = 1; + icon_state = "darkyellowcorners2" + }, +/area/bigredv2/outside/engineering) "slG" = ( -/obj/structure/pipes/vents/pump{ - dir = 4 +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor{ + icon_state = "dark" }, -/turf/open/floor, /area/bigredv2/outside/engineering) "smh" = ( /obj/structure/blocker/forcefield/multitile_vehicles, @@ -35411,6 +36977,15 @@ icon_state = "mars_cave_2" }, /area/bigredv2/outside/filtration_cave_cas) +"snv" = ( +/obj/structure/machinery/light_construct{ + dir = 4 + }, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "sog" = ( /obj/item/explosive/grenade/slug/baton{ dir = 1; @@ -35596,6 +37171,19 @@ icon_state = "mars_dirt_6" }, /area/bigredv2/caves/mining) +"szy" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellowcorners2" + }, +/area/bigredv2/outside/engineering) +"sAG" = ( +/obj/effect/landmark/hunter_primary, +/turf/open/mars_cave{ + icon_state = "mars_cave_2" + }, +/area/bigredv2/caves_sw) "sAS" = ( /obj/item/toy/prize/fireripley{ pixel_y = 19 @@ -35603,6 +37191,17 @@ /obj/structure/surface/table/reinforced/prison, /turf/open/floor/plating, /area/bigredv2/caves/mining) +"sBm" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/engineering) "sBu" = ( /obj/effect/landmark/hunter_secondary, /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, @@ -35617,9 +37216,9 @@ }, /area/bigredv2/caves/mining) "sCt" = ( -/obj/structure/closet/toolcloset, -/obj/structure/machinery/light, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "sDs" = ( /obj/structure/closet/crate/miningcar, @@ -35639,6 +37238,20 @@ icon_state = "mars_cave_9" }, /area/bigredv2/caves_sw) +"sDO" = ( +/obj/structure/machinery/power/port_gen/pacman, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) +"sDZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/clothing/head/welding, +/turf/open/floor{ + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "sEi" = ( /obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, /obj/effect/landmark/structure_spawner/setup/distress/xeno_door, @@ -35716,6 +37329,12 @@ /obj/structure/machinery/suit_storage_unit/carbon_unit, /turf/open/floor/plating, /area/bigredv2/outside/admin_building) +"sNP" = ( +/obj/structure/window/framed/solaris, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/bigredv2/outside/engineering) "sNQ" = ( /turf/open/mars_cave{ icon_state = "mars_cave_11" @@ -35768,6 +37387,10 @@ icon_state = "mars_cave_19" }, /area/bigredv2/outside/lz2_south_cas) +"sUQ" = ( +/obj/structure/machinery/photocopier, +/turf/open/floor/wood, +/area/bigredv2/caves/lambda/breakroom) "sWa" = ( /obj/item/ore{ pixel_x = 12; @@ -35850,6 +37473,10 @@ icon_state = "mars_cave_3" }, /area/bigredv2/caves_research) +"tcP" = ( +/obj/effect/decal/cleanable/dirt/greenglow, +/turf/closed/wall/solaris/reinforced, +/area/bigredv2/outside/engineering) "tdn" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 6 @@ -35875,6 +37502,14 @@ icon_state = "mars_cave_2" }, /area/bigredv2/caves_se) +"tdN" = ( +/obj/structure/surface/table, +/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, +/turf/open/floor{ + dir = 9; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "tdZ" = ( /obj/item/tool/pickaxe/drill, /obj/structure/machinery/light{ @@ -35965,6 +37600,17 @@ icon_state = "mars_dirt_4" }, /area/bigredv2/caves/mining) +"tju" = ( +/obj/structure/machinery/shower{ + dir = 8 + }, +/obj/structure/machinery/light{ + dir = 8 + }, +/turf/open/floor{ + icon_state = "freezerfloor" + }, +/area/bigredv2/outside/engineering) "tkN" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 5 @@ -36034,7 +37680,10 @@ /obj/structure/surface/table, /obj/effect/spawner/random/tool, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "trW" = ( /obj/item/clothing/suit/storage/hazardvest, @@ -36086,6 +37735,15 @@ icon_state = "mars_cave_14" }, /area/bigredv2/outside/lz2_south_cas) +"tub" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 5 + }, +/turf/open/floor{ + dir = 10; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "tuu" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 @@ -36110,12 +37768,29 @@ icon_state = "asteroidwarning" }, /area/bigredv2/outside/lz2_south_cas) +"tvH" = ( +/obj/structure/machinery/compressor{ + dir = 1 + }, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "twS" = ( /turf/open/floor{ dir = 1; icon_state = "asteroidwarning" }, /area/bigredv2/outside/telecomm/lz2_cave) +"tzJ" = ( +/obj/structure/machinery/door/airlock/almayer/engineering/colony{ + name = "\improper Engine Reactor Control" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/bigredv2/outside/engineering) "tAe" = ( /obj/structure/bed, /obj/effect/landmark/objective_landmark/close, @@ -36253,6 +37928,13 @@ icon_state = "mars_cave_7" }, /area/bigredv2/caves_lambda) +"tIv" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) "tIA" = ( /obj/structure/surface/rack, /obj/effect/spawner/random/toolbox, @@ -36282,6 +37964,15 @@ icon_state = "mars_dirt_4" }, /area/bigredv2/caves/mining) +"tKr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/filtration_plant) "tKC" = ( /obj/structure/surface/table, /obj/item/reagent_container/food/drinks/cans/beer{ @@ -36394,9 +38085,10 @@ }, /area/bigredv2/caves/lambda/research) "tTI" = ( -/obj/structure/surface/table, -/obj/item/pizzabox, -/turf/open/floor, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "tUL" = ( /obj/effect/decal/cleanable/dirt, @@ -36444,6 +38136,17 @@ icon_state = "darkpurple2" }, /area/bigredv2/caves/lambda/research) +"uaS" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/obj/structure/machinery/door/airlock/almayer/engineering/colony{ + name = "\improper Engine Reactor Control" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/bigredv2/outside/engineering) "ubY" = ( /obj/structure/barricade/wooden, /turf/open/mars_cave{ @@ -36458,6 +38161,13 @@ icon_state = "mars_cave_4" }, /area/bigredv2/caves_se) +"ueL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/window/framed/solaris, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/bigredv2/outside/engineering) "ufu" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/oil, @@ -36581,6 +38291,14 @@ icon_state = "delivery" }, /area/bigredv2/outside/admin_building) +"urn" = ( +/obj/structure/surface/table, +/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, +/turf/open/floor{ + dir = 6; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) "usg" = ( /obj/item/tool/warning_cone, /turf/open/floor{ @@ -36657,6 +38375,14 @@ icon_state = "platingdmg3" }, /area/bigredv2/caves/mining) +"uBi" = ( +/obj/structure/pipes/standard/manifold/hidden/green{ + dir = 1 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/engineering) "uCa" = ( /obj/effect/landmark/corpsespawner/miner, /turf/open/floor/plating{ @@ -36677,6 +38403,12 @@ }, /turf/closed/wall/wood, /area/bigredv2/caves/mining) +"uDA" = ( +/obj/item/stack/sheet/glass, +/turf/open/floor{ + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "uDI" = ( /obj/structure/prop/invuln/minecart_tracks{ desc = "A pipe."; @@ -36726,6 +38458,13 @@ icon_state = "mars_cave_15" }, /area/bigredv2/caves/mining) +"uGs" = ( +/obj/structure/surface/table, +/obj/effect/decal/cleanable/ash, +/turf/open/floor{ + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "uGz" = ( /obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, /obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, @@ -36761,6 +38500,15 @@ icon_state = "asteroidfloor" }, /area/bigred/ground/garage_workshop) +"uJj" = ( +/obj/structure/machinery/light{ + dir = 8 + }, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "uJu" = ( /obj/item/robot_parts/robot_component/diagnosis_unit{ pixel_y = 15 @@ -36858,6 +38606,13 @@ icon_state = "mars_dirt_10" }, /area/bigredv2/outside/space_port_lz2) +"uTO" = ( +/obj/structure/machinery/pipedispenser, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) "uUV" = ( /obj/structure/prop/server_equipment/yutani_server/broken, /turf/open/floor/greengrid, @@ -36868,6 +38623,12 @@ icon_state = "asteroidwarning" }, /area/bigredv2/outside/filtration_cave_cas) +"uVn" = ( +/obj/structure/blocker/forcefield/multitile_vehicles, +/turf/open/mars_cave{ + icon_state = "mars_cave_7" + }, +/area/bigredv2/caves_sw) "uWo" = ( /obj/structure/pipes/standard/manifold/fourway/hidden/green, /obj/effect/decal/cleanable/dirt, @@ -36891,6 +38652,13 @@ icon_state = "darkpurple2" }, /area/bigredv2/caves/lambda/research) +"vbp" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "vcm" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 @@ -36918,6 +38686,17 @@ icon_state = "mars_cave_2" }, /area/bigredv2/caves/mining) +"vdl" = ( +/obj/effect/decal/cleanable/liquid_fuel, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "vdS" = ( /obj/item/explosive/grenade/incendiary/molotov{ pixel_x = -10; @@ -36967,6 +38746,14 @@ icon_state = "mars_cave_13" }, /area/bigredv2/caves/mining) +"vin" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/filtration_plant) "vis" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 @@ -37067,6 +38854,14 @@ icon_state = "wood" }, /area/bigredv2/outside/library) +"voG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/barricade/handrail, +/turf/open/floor{ + dir = 6; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "vpu" = ( /obj/item/weapon/twohanded/folded_metal_chair, /turf/open/mars_cave{ @@ -37222,6 +39017,13 @@ icon_state = "platingdmg3" }, /area/bigredv2/caves/mining) +"vCf" = ( +/obj/structure/surface/table, +/obj/effect/spawner/random/toolbox, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/engineering) "vCU" = ( /turf/open/mars_cave{ icon_state = "mars_cave_16" @@ -37350,6 +39152,13 @@ icon_state = "mars_cave_2" }, /area/bigredv2/caves/mining) +"vTt" = ( +/obj/structure/surface/table, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "vVl" = ( /obj/structure/machinery/door/airlock/almayer/generic{ name = "\improper Dormitories Toilet" @@ -37359,6 +39168,15 @@ icon_state = "platingdmg3" }, /area/bigredv2/caves/mining) +"vVz" = ( +/obj/structure/machinery/power/geothermal{ + name = "Reactor Turbine"; + power_generation_max = 100000 + }, +/turf/open/floor{ + icon_state = "delivery" + }, +/area/bigredv2/outside/engineering) "vVF" = ( /obj/effect/decal/cleanable/blood/drip{ pixel_x = -5; @@ -37371,6 +39189,12 @@ "vVZ" = ( /turf/closed/wall/solaris, /area/bigredv2/outside/filtration_cave_cas) +"vWm" = ( +/obj/structure/surface/table, +/turf/open/floor{ + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "vXp" = ( /obj/structure/machinery/light{ dir = 8 @@ -37516,7 +39340,9 @@ "whE" = ( /obj/structure/pipes/standard/simple/hidden/green, /obj/effect/landmark/objective_landmark/close, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "whZ" = ( /obj/effect/decal/cleanable/blood/oil/streak, @@ -37535,10 +39361,9 @@ /area/bigred/ground/garage_workshop) "wiK" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light{ - dir = 1 +/turf/open/floor{ + icon_state = "podhatchfloor" }, -/turf/open/floor, /area/bigredv2/outside/engineering) "wjW" = ( /obj/structure/platform/shiva{ @@ -37586,6 +39411,12 @@ icon_state = "mars_cave_19" }, /area/bigredv2/caves_north) +"wpn" = ( +/obj/structure/closet/radiation, +/turf/open/floor{ + icon_state = "delivery" + }, +/area/bigredv2/outside/engineering) "wpT" = ( /obj/effect/landmark/lv624/xeno_tunnel, /turf/open/mars, @@ -37621,7 +39452,16 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/filtration_plant) +"wtG" = ( +/obj/structure/machinery/computer3/server/rack, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "wtJ" = ( /obj/effect/decal/cleanable/blood{ @@ -37666,20 +39506,34 @@ }, /area/bigredv2/outside/virology) "wvK" = ( -/obj/structure/machinery/power/geothermal, -/turf/open/floor/plating, -/area/bigredv2/outside/admin_building) +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/filtration_plant) "wvR" = ( /turf/open/floor{ icon_state = "delivery" }, /area/bigredv2/caves/lambda/virology) +"wwT" = ( +/obj/effect/decal/cleanable/dirt, +/turf/closed/wall/solaris/reinforced, +/area/bigredv2/outside/engineering) "wxo" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor{ icon_state = "asteroidwarning" }, /area/bigredv2/outside/c) +"wyF" = ( +/obj/structure/surface/table, +/obj/effect/spawner/random/toolbox, +/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, +/turf/open/floor{ + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "wBi" = ( /obj/effect/decal/warning_stripes{ icon_state = "S" @@ -37699,6 +39553,10 @@ icon_state = "mars_dirt_4" }, /area/bigredv2/caves/mining) +"wCs" = ( +/obj/structure/machinery/vending/cigarette/colony, +/turf/open/floor/carpet, +/area/bigredv2/caves/lambda/breakroom) "wDa" = ( /obj/effect/decal/cleanable/blood/drip{ pixel_x = 6 @@ -37722,12 +39580,14 @@ }, /area/bigredv2/caves_north) "wFL" = ( -/obj/structure/surface/table, -/obj/structure/pipes/standard/simple/hidden/green{ - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/safety/hazard{ + pixel_x = 8; + pixel_y = -32 + }, +/turf/open/floor{ + icon_state = "darkyellow2" }, -/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, /area/bigredv2/outside/engineering) "wFO" = ( /turf/open/mars_cave{ @@ -37841,6 +39701,19 @@ icon_state = "mars_cave_9" }, /area/bigredv2/caves_north) +"wMM" = ( +/obj/structure/pipes/vents/pump{ + dir = 8 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "wMQ" = ( /obj/structure/largecrate/random/secure, /turf/open/floor, @@ -37919,6 +39792,22 @@ icon_state = "mars_cave_13" }, /area/bigredv2/caves/mining) +"wVw" = ( +/turf/open/floor{ + dir = 6; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) +"wVB" = ( +/obj/structure/platform, +/obj/structure/platform{ + dir = 8 + }, +/obj/structure/platform_decoration{ + dir = 10 + }, +/turf/open/gm/river, +/area/bigredv2/outside/engineering) "wVQ" = ( /turf/open/mars_cave{ icon_state = "mars_cave_17" @@ -37954,6 +39843,16 @@ icon_state = "wood" }, /area/bigredv2/outside/bar) +"wYE" = ( +/obj/structure/prop/server_equipment/yutani_server{ + density = 0; + pixel_y = 16 + }, +/turf/open/floor{ + dir = 5; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "wZC" = ( /turf/open/mars{ icon_state = "mars_dirt_11" @@ -38295,7 +40194,10 @@ /obj/structure/machinery/power/apc{ dir = 1 }, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "xBn" = ( /obj/structure/platform{ @@ -38327,8 +40229,8 @@ "xDW" = ( /obj/structure/pipes/standard/simple/hidden/green, /obj/effect/decal/cleanable/dirt, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/engineering) "xFZ" = ( @@ -38552,6 +40454,17 @@ icon_state = "mars_dirt_7" }, /area/bigredv2/caves/mining) +"xXq" = ( +/obj/structure/barricade/handrail{ + dir = 1; + layer = 3.01; + pixel_y = 9 + }, +/turf/open/floor{ + dir = 5; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "xXP" = ( /obj/structure/prop/invuln/minecart_tracks/bumper, /turf/open/mars_cave{ @@ -38588,6 +40501,12 @@ icon_state = "mars_dirt_7" }, /area/bigredv2/caves/mining) +"yar" = ( +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) "ybk" = ( /turf/open/mars_cave{ icon_state = "mars_cave_17" @@ -38677,6 +40596,20 @@ icon_state = "platingdmg3" }, /area/bigredv2/caves/mining) +"ygP" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/turf/open/floor{ + dir = 9; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "yha" = ( /obj/structure/surface/table, /obj/item/device/radio{ @@ -38704,8 +40637,8 @@ /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/filtration_plant) "yjU" = ( @@ -38715,6 +40648,15 @@ icon_state = "platingdmg3" }, /area/bigredv2/caves/mining) +"yjV" = ( +/obj/structure/platform_decoration{ + dir = 8 + }, +/turf/open/gm/river, +/area/bigredv2/outside/engineering) +"ykR" = ( +/turf/closed/wall/mineral/uranium, +/area/bigredv2/outside/engineering) "ykW" = ( /obj/effect/decal/cleanable/blood/drip{ pixel_x = -3; @@ -47992,7 +49934,7 @@ ayf bsa ayf axX -bmi +maD boD axX bpx @@ -48209,8 +50151,8 @@ ayf ayf ayf azb -bmi -bmi +hhK +sCt azb bpx ufD @@ -48426,8 +50368,8 @@ aFc aFc aFc azb -bmi -bmi +hhK +sCt azb bpx ufD @@ -48643,8 +50585,8 @@ aFc aFc bme azb -bmi -bmi +hhK +sCt azb bpx ufD @@ -48860,8 +50802,8 @@ aFc aFc bme azb -bmi -bmi +hhK +sCt azb bpy ufD @@ -49077,8 +51019,8 @@ aFc aFc bme azb -bmi -bmi +hhK +sCt azb bme bqe @@ -49294,8 +51236,8 @@ aFc bme bme azb -bmi -bmi +hhK +sCt axX azB axX @@ -49511,15 +51453,15 @@ bme bme bme azb -bmi -bmi -bmi -bmi +hhK +mSS +btr +kVT azb bqI bre -bmq -bob +maH +hdc bsJ axX bsI @@ -49728,16 +51670,16 @@ bme bme bme azb -bmi -bmi -bmi -bmi +hhK +nVq +nVq +sCt azb -bmi -bmi -bmi -bmi -bmi +hhK +nVq +nVq +nVq +sCt azb bme bme @@ -49945,15 +51887,15 @@ bme bme bme azb -bmi -bmi -bmi -bmi +hhK +nVq +nVq +nVq bqf -bmi -bmi -bmg -bre +nVq +nVq +tTI +rzb bsK axX bme @@ -50162,15 +52104,15 @@ bme bme bme azb -bmi -bmi -bmi -bmi +hhK +nVq +nVq +sCt azb -bmi -bmi -bmg -bre +hhK +nVq +tTI +rzb bsL azb bme @@ -50379,15 +52321,15 @@ bme bme bme azb -bmi -bmi -bmi -bmi +fLl +btu +btu +gdx azb -bmi -bmi -bmi -bmi +fLl +nVq +btu +nVq bsM axX bpx @@ -50817,16 +52759,16 @@ boj boG boj axX -bmi -bmi -bmi +jYF +sap +nVq brI -bmi +sCt azb bpx bpx bpx -aao +bpx aao aao aao @@ -51030,21 +52972,21 @@ bmf bmf bmf bnQ -bmi -bmi +ygP +cud bpe axX jYF -bmi -bmi -bmg -bmi +sap +nVq +tTI +sCt azb kdh -aao -aao -aao -aao +bpx +bpx +bpx +bpx aao aao euF @@ -51245,23 +53187,23 @@ bli bsX bmg bmO -bmy -bmy -bmg -bmg -bmi +vdl +vdl +rhP +tTI +sCt axX ayr ayr brg -bmg -bmi +tTI +sCt axX axX axX -aao -aao -aao +bpx +bpx +bpx aao aao aao @@ -51459,26 +53401,26 @@ bfB bbe bbe blj -blL +dvC bmh bmP bnq -bnq -bnq +qGY +qGY boH bpf bpz -bmg +lck bqJ -bmg +tTI brJ -bpF +niQ bsN bsZ axX -aao -aao -aao +bpx +bpx +bpx aao aao aao @@ -51685,17 +53627,17 @@ ayr boI bor ayr -bmg -bmg -bmg +tTI +tTI +tTI brK -bor -bmg -bmi +cla +tTI +sCt axX -aao -aao -aao +bpx +bpx +bpx aao aao aao @@ -51896,25 +53838,23 @@ aZr axX bmj bmQ -bmQ -bnR +tju bnR -bnW +ewv +bYW bpO bpA -bop +eSm bqK -bnq -bop +kNK +slG bqN -bmg +tTI bta -axX -aao -aao -aao -aao -aao +azb +nLw +bpx +bpx aao aao aao @@ -51923,9 +53863,11 @@ aao aao aao wog +oQI +wog +wog +wog wog -trk -jXX aao uCD aao @@ -52120,30 +54062,30 @@ ayr ayr ayr ayr -bor +nPz bri -bmi +nVq bsm -bmi +nVq btb -axX -aao -aao -aao -aao -aao -aao -aao -aao +azb +nLw +bpx +bpx aao aao aao wog wog -hiY -dxV -dxV -dxV +wog +wog +sAG +wog +oQI +wog +wog +wog +aao aao aao aao @@ -52335,20 +54277,18 @@ bnr bok bnr bpi -bmi +kVT ayr -bor -bmi +nPz +nVq brL -bmi -bmi +nVq +nVq btc axX -aao -aao -aao -aao -aao +nLw +bpx +bpx aao aao aao @@ -52356,11 +54296,13 @@ wog wog wog wog -trk -jXX -dxV -qUS -dxV +wog +wog +wog +icQ +wog +aao +aao aao aao aao @@ -52547,38 +54489,38 @@ bll axX bmm bmS -bmg -bmg -bsu +tTI +tTI +iQC boK -bmi -bmg +nVq +cKu ayr -bor +nPz brj brM aMB -bmg +gwg btd axX +nLw +nLw aao aao aao +giB +giB +giB +giB +giB +giB +giB +giB +giB +aao aao aao aao -wog -wog -trk -wog -wog -jXX -dxV -dxV -dxV -dxV -buz -sDC aao aao qUS @@ -52762,11 +54704,11 @@ aZu aZu blm axX -bmm -bmm -bmi +mhZ +pgk +btu bnS -bmg +tTI boL bpj bpC @@ -52778,27 +54720,27 @@ ayZ axX axX axX +axX +axX +axX +axX +axX +axX +axX +axX +wwT +axX +axX +axX +axX +axX +axX +axX +axX aao aao aao aao -aao -aao -aao -jXX -dxV -qgY -hiY -dxV -dxV -dxV -dxV -dxV -qgY -wog -aao -aao -aao buz wog wog @@ -52988,32 +54930,32 @@ ayr ayr ayr ayr -bor -bmi -bmg -bso -bso -bso +cla +btr +lck +kVT +ayZ +bsP +ayZ +ouh +lck +jXJ +btr +sDO +pOg +saX +pVv +saX +eIN +lck +btr +ayZ +btr +kVT +axX axX aao aao -aao -aao -aao -aao -aao -dxV -dxV -qgY -hiY -dxV -pYt -dxV -pYt -dxV -iNR -wog -wog wog wog wog @@ -53199,37 +55141,37 @@ axX bmn bmT ayr -bmg -bmg +nzN +tTI boM ayr bpD -bmi +btr bqM -bmi -bmi -bmi -bmi +rnV +nVq +tTI +nIi bte +nIi +btu +gwg +gwg +gwg +tTI +btu +gwg +gwg +tTI +btu +btu +ndw +fUp +nVq +sCt +wpn axX aao -aao -aao -aao -aao -aao -dxV -dxV -dxV -qgY -hiY -dxV -dxV -buz -sDC -dxV -dxV -qgY wog wog wog @@ -53416,37 +55358,37 @@ axX bmn bmU bns -bmi -bmg +hhK +tTI boN ayr bpE -bmi -bor -bmi -bmi -bso -bso -bso +nVq +cla +nVq +nVq +gfX +axX +axX +axX +iig +iig +iig +mqh +fEv +iig +iig +ayZ +fEv +ueL +ueL +ayZ +axX +fEv +ayZ +axX axX aao -aao -aao -aao -aao -dxV -dxV -dxV -buz -wog -hiY -dxV -buz -wog -hiY -dxV -dxV -qgY wog wog wog @@ -53634,36 +55576,36 @@ bmn bmV ayr bnV -bmg -bmg +tTI +cKu ayZ bpF -bop +slG bqN -bmi -bmi -bmi -bmi +nVq +nVq +uDA +bsP bsP axX +hYB +iAI +iAI +dsy +iSz +hYB +iAI +wVB +kka +pog +iAI +wVB +ayZ +ndw +sCt +axX aao aao -aao -aao -dxV -dxV -buz -ibZ -wog -wog -wog -ibZ -wog -wog -wog -sDC -dxV -iNR wog wog wog @@ -53851,36 +55793,36 @@ ayr ayr ayr xAX -bmg -bmg +tTI +cKu ayZ -bor -bmg +nPz tTI -brm -bmi -bmi -bmi -brm +tTI +tTI +dsm +mSS +mij +kVT +dhN +duA +iNR +ykR +iaC +iSz +duA +iNR +iaC +kka +duA +ykR +iaC +ayZ +hhK +sCt axX aao -aao -dxV -aao -dxV -dxV -qgY -wog -wog -wog wog -aao -wog -wog -wog -jXX -dxV -dxV qgY wog hiY @@ -54065,39 +56007,39 @@ asK asK axX dWl -bmi -bmi +btr +btr bnW -bop -bmz +slG +ksO bpk bpM -bmi -bmi -bmi -bmi -bmi -bmi +slG +slG +slG +slG +slG +dWd sCt -axX -aao -aao -dxV -dxV -dxV -dxV +dhN +duA iNR -wog -wog -aao -aao -aao +iNR +iaC +iSz +duA +iNR +iaC +kka +duA +iNR +iaC +ayZ +hhK +sCt +axX aao wog -hiY -dxV -dxV -buz wog wog hiY @@ -54281,40 +56223,40 @@ bjx bjx bjw axX -dWl -bmi -bmg -bmg -bmg -bmg +lmi +nVq +tTI +tTI +tTI +cKu ayZ bpH -bmg -bmg -bmg +kmx +gwg +gwg brO -bmg -bmi -dWl +gwg +cla +gdx +dhN +nug +yjV +ykR +iaC +iSz +duA +iNR +iaC +kka +duA +ykR +iaC +ayZ +hhK +sCt axX -aao -aao -dxV -qUS -pYt -dxV -dxV -qgY -aao -aao -aao -aao -aao +uVn wog -hiY -dxV -dxV -iNR wog wog hiY @@ -54499,39 +56441,39 @@ bjB blq axX bmp -bmi -bmg +nVq +tTI bnX -bmg +tTI aLP ayZ bpI -bmg +cKu axX axX axX axX +uaS axX axX axX -aao -aao -aao -dxV -dxV -dxV -dxV -qgY -aao -aao -aao -aao -qUS +duA iNR -jXX -dxV -dxV -dxV +iaC +iSz +nug +rUN +oIK +kka +duA +iNR +iaC +ayZ +hhK +sCt +axX +dQw +wog qgY wog wog @@ -54716,39 +56658,39 @@ bkp blq axX bmq -bmi +nVq bnt -bmg -bmi +tTI +nVq boR ayr -bor -bmi +nPz +sCt axX brn -bmq -trr -bpl +jDT +vTt +cla btr -axX -aao -aao -aao -dxV -dxV -dxV -dxV -qgY +jTk +dhN +duA +ykR +iaC +pWs +vVz +vVz +vVz +jxA +duA +ykR +iaC +ueL +nzN +sCt +tcP +dQw wog -aao -aao -aao -dxV -dxV -dxV -dxV -dxV -buz wog wog wog @@ -54933,38 +56875,38 @@ bjA blq axX trr -bmg -bmg -bmi -bmi -fOK +tTI +tTI +nVq +nVq +wyF ayZ bpH -bmg +cKu axX bro brP slG -bmg -trr -axX -aao -aao -aao -aao -dxV -dxV -buz -wog -wog -aao -aao -dxV -dxV -pYt -dxV -dxV -buz +bqN +btt +uGs +gmm +duA +iNR +iaC +gUD +btr +jxS +btr +oWp +duA +iNR +iaC +ueL +nzN +cKu +tcP +rvS wog wog wog @@ -55150,38 +57092,38 @@ bjA blq axX bms -bmg +gwg bnu bnY -trr +hcH boS ayZ btK -bnq +tTI bqP -bop -bop -bpM -bmg -bts +fXm +wMM +gVl +tTI +nVq +qUF +dhN +duA +ykR +iaC +dBU +guu axX -aao -aao -aao -aao -aao -buz -wog -wog -wog -wog -wog -ibZ -sDC -dxV -dxV -buz -wog +cNb +nuz +duA +ykR +iaC +ayZ +hhK +cKu +axX +rvS wog wog wog @@ -55378,27 +57320,27 @@ bqk axX wiK fgE -bor -cFb +sap +tTI btt +nmU +dhN +duA +iNR +iaC +xXq +btu +uJj +gwg +voG +duA +iNR +iaC +ayZ +hhK +sCt axX -aao -aao -aao -aao -aao -wog -wog -trk -trk -wog -wog -wog -wog -ibZ -ibZ -wog -wog +rvS wog wog trk @@ -55584,39 +57526,39 @@ bjH blq axX bmt -bmi +btr fOK -trr -bmq +pKP +egL ayZ bpl bpL -bmg +cKu axX -bmi +jAJ brR -bor -bmi +nnU +nVq btu +gHV +dhN +duA +ykR +iaC +pWs +vVz +vVz +vVz +jxA +duA +ykR +iaC +ayZ +nzN +sCt axX -aao -aao -aao -aao -wog -wog -jXX -dxV -dxV -iNR -wog -wog +rvS wog -wog -wog -aao -aao -aao jXX pYt dxV @@ -55801,37 +57743,37 @@ bjH blq axX bmu -bmi +nVq bnw bnZ boq azE -bmi -bor +hhK +cla bql axX axX axX -dQZ axX +tzJ axX axX -aao -aao -aao -wog -wog -hiY -dxV -dxV -pYt -dxV +axX +duA iNR -wog -wog -trk -trk -aao +iaC +iSz +hYB +iAI +wVB +kka +duA +iNR +iaC +ayZ +nzN +sCt +axX aao aao aao @@ -56023,32 +57965,32 @@ bnx boa bor ayZ -bmi -bor -bmg -bmi -bmi -bmi -bor -bmg +hhK +cla +bZJ +btr +btr +jMn +btr +tTI kVT -axX -axX -aao -aao -wog -wog -wog -sDC -dxV -dxV -dxV -dxV +dhN +hYB +ojD +ykR +iaC +iSz +duA iNR -jXX -dxV -aao -aao +iaC +kka +duA +ykR +iaC +iig +nzN +sCt +axX aao aao aao @@ -56237,39 +58179,39 @@ axX bmw bmX bAo -bmg +tTI bos boU -bop -bpM -bmi -bmi -bmi -bmi -bor -bmg -bmi +slG +cZB +cOa +lEi +lEi +tTI +nVq +tTI +sCt +dhN +duA +iNR +iNR +iaC +iSz +duA +iNR +iaC +kka +duA +iNR +iaC +ayZ +hhK +sCt axX aao aao aao aao -wog -wog -wog -ibZ -ibZ -sDC -dxV -dxV -dxV -dxV -aao -aao -aao -aao -aao -aao aao aao wog @@ -56452,42 +58394,42 @@ bjH blr axX bmx -bmW +rdr bnz bob -bmi +gdx ayZ -bmy -bor +bcg +cla bpm -bmi -bre -bmr +izb +rYr +tTI iQC -bob -bmi +nVq +vWm +dhN +duA +iNR +ykR +iaC +iSz +duA +iNR +iaC +kka +duA +ykR +iaC +ayZ +hhK +sCt axX aao aao aao aao aao -wog -wog -wog -wog -hiY -dxV -dxV -aao -aao -aao -aao -aao -aao -aao -aao -aao aao aao wog @@ -56674,32 +58616,32 @@ ayZ ayr ayr ayr -bpe -bor -bmi -bmi -bre +ktY +cla +vCf +mlV +lqo nVq eGM -bob -bmi +btu +dyH +axX +nug +rUN +rUN +oIK +iSz +nug +rUN +oIK +kka +nug +rUN +oIK +ayZ +slC +sCt axX -aao -aao -aao -aao -aao -aao -aao -wog -aao -aao -qUS -aao -aao -aao -aao -aao aao aao aao @@ -56888,36 +58830,36 @@ bsX bmy bmZ bmZ -bmO -bmg +mPK +lck boV -bmi +slC bpN -bmi -bmi -bre -fOK +bqo +bqo +sBm +tTI wFL -bob -bmg axX -aao -aao -aao -aao -aao -aao -aao -aao -aao -aao -aao -aao -aao -aao -aao -aao -aao +axX +axX +ayZ +ayZ +ayZ +ayZ +fEv +ayZ +sNP +ueL +gPh +sNP +ayZ +ayZ +axX +fEv +ayZ +axX +axX aao aao aao @@ -57108,16 +59050,32 @@ bmz boc bmz xDW -bop +eSm +jXf +eSm +ebr bpO -bop -bop -bop -bnq -cuF -bmi -bmi -axX +bpf +tTI +nIi +gZc +nIi +btr +lck +lck +lck +tTI +lck +lck +ouh +tTI +btr +btr +slC +fUp +nVq +sCt +wpn axX aao aao @@ -57127,22 +59085,6 @@ aao aao aao aao -bub -aao -aao -aao -aao -aao -aao -aao -aao -aao -aao -aao -aao -aao -aao -aao wog wog wog @@ -57328,30 +59270,30 @@ axX axX axX axX -axX -bmi -bmg -bor -bmg -bmi -axX +wYE +lTM +bqM +pMi +ayZ +bsP +ayZ +btu +iFa +snv +btu +gFR +tvH +gML +tvH +gML +gFR +btu +btu +ayZ +btu +gdx axX axX -gNH -aao -bjA -bjA -bjA -bjH -bub -bub -bub -aao -aao -aao -aao -aao -aao aao aao aao @@ -57481,7 +59423,7 @@ axC alu ayV ayV -bBg +ayV alu aHF aMg @@ -57543,31 +59485,31 @@ bjx bjx bjx bjx -bjx bjw axX +axX bru -bmg bqM -bmi -bmi +sDZ +axX +axX +axX +axX +axX +axX +axX +axX +axX +axX +axX +axX +axX +axX +axX axX axX axX axX -bjY -bjA -bjA -bjA -bjH -bub -bub -bub -aao -aao -aao -aao -aao aao aao aao @@ -57698,7 +59640,7 @@ axE alu ayW ayV -bBg +ayV alu aHD aBR @@ -57760,17 +59702,17 @@ bjA bjA bjA bjA -bjA -blq +blu +bjw axX brv -bmi bos -bop -bop -bop -bop -boq +szy +vbp +vbp +vbp +vbp +tub axX bjY bjA @@ -57981,12 +59923,12 @@ bjA blq axX brw -bmi -bmg +btu +pRG brO bti -bpC -bmi +idM +ndw bor axX bjY @@ -58418,9 +60360,9 @@ bjx bjx bjw ayr -bmq -bmq -bmi +tdN +maH +slC bor ayr bjY @@ -58637,7 +60579,7 @@ blq ayr bmq bqo -bmi +nVq btJ ayr bjw @@ -58803,8 +60745,8 @@ aXL aPS aOM aof -wvK -wvK +aTa +aTa aof oWe aOM @@ -58852,10 +60794,10 @@ bjy bjy blq bsX -bmi -bmi -bmi -btK +nVq +nVq +nVq +uBi bua buo buo @@ -59069,10 +61011,10 @@ bjy bjy blq maD -bmi -bmi -bsu -bor +nVq +nVq +iQC +cla maD bjw bjw @@ -59285,12 +61227,12 @@ bkb bkb bkb bjw -awp +ayr btj -bkE -bkE -bpo -awp +nVq +nVq +bor +ayr bjw bjY bjy @@ -59502,12 +61444,12 @@ awp awp awp awp -awp +ayr btk -bkE -bkE -bpo -awp +nVq +nVq +bor +ayr bjw bjY bjy @@ -59705,7 +61647,7 @@ aMg awp bkD blx -qeK +aZV bmC bnb bnB @@ -59714,17 +61656,17 @@ bku bmF bmF bpP -bkE -gCx +fBo +nEP brx brU -brx -awp +aCO +ayr btk -bkE +nVq btA -bpo -awp +bor +ayr bjw bjY bjz @@ -59924,24 +61866,24 @@ bmF wtC blT bmD -bmJ +pPo bpp boe awp awp awp bpQ -blX +wvK bqT -blX -blX -blX +wvK +wvK +wvK bsY -bkE -bkE -bkE -bpo -awp +slC +nVq +nVq +bor +ayr bjw bjY bkq @@ -60141,12 +62083,12 @@ bkE bly bly bly -blX -bkE -bkE +wvK +fBo +boe ayF boW -bkE +lTi bpR bnF bnF @@ -60154,11 +62096,11 @@ bry bnF bof dvC -bmF -bmF +eSm +eSm btB btN -awp +ayr bjw bjY bjA @@ -60355,27 +62297,27 @@ erf aHF awp bkG -blX -blX -blX -bkE -bkE -bkE +wvK +wvK +tKr +vin +fBo +boe ayF orZ -bkE +lTi bpS -blX -blX +wvK +wvK brz brV -bkE -awp -awp -awp -awp -awp -awp +boe +ayr +ayr +ayr +ayr +ayr +ayr bjw bjY bjA @@ -60573,20 +62515,20 @@ bkf awp bkH blA -bkE -bkE +wtG +jRn bnd -bnf -boe +wtG +wVw ayF boW -bkE +lTi bpo -bkE +fBo bqV brA brW -gCx +urn awp bjw bjx @@ -61016,7 +62958,7 @@ awM boX bpn bpp -bkE +fBo bnb brB bkN @@ -61235,8 +63177,8 @@ bpo bpU bqv bpU -blX -blX +wvK +wvK bsC awp bjY @@ -61447,12 +63389,12 @@ awM awM awM awM -boX +uTO bpo bpV -bkE +bkU bqX -blX +wvK brY bsD awp @@ -61658,19 +63600,19 @@ aHF awp bkK blB -blX -bkE +tIv +nwB bnf bnf bnf bou -bkE +qHc bpo bpU -bkE +bkU bpU -blX -blX +wvK +wvK bsE awp bjY @@ -61874,19 +63816,19 @@ erf aHF awp bkK -blX -blX -blX -blX +bBg +wvK +wvK +wvK bnE -blX -blX +wvK +wvK boZ bpo bpV -bkE +bkU bqX -bkE +fBo brZ bsF azG @@ -62091,8 +64033,8 @@ auX aHF awp bkL -bkE -bkE +qHc +fBo bly bng bnF @@ -62104,7 +64046,7 @@ bpU bqw bpU brC -blX +nlJ bsG azG btn @@ -62308,20 +64250,20 @@ auX aHF awp bkM -bkE +fBo blV bmF bnh -blX -blX +wvK +wvK bly bpa bpq -blX -blX -bkE -blX -bly +wvK +wvK +fBo +wvK +qqw bsG azG bjY @@ -62530,15 +64472,15 @@ blW ccP bpo bnH -bkE +yar box -bkE +yar iyd iyd eKU -bkE -bkE -blX +yar +yar +aZJ bsG awp bjY @@ -62963,7 +64905,7 @@ blC awp bmG bpo -bkG +lYH awp bWk bWk @@ -63397,7 +65339,7 @@ blC awp bmG bpo -bkE +boe awp bWk bMf @@ -63831,7 +65773,7 @@ blD cGT bmH bnl -blX +pBv ayF vjc bpc @@ -64043,10 +65985,10 @@ asv beI bgx awp -blX -blX +bBg +wvK blY -blX +wvK bnm bnK ayF @@ -64477,11 +66419,11 @@ asv bjL bkg awp -blX +bBg bly bma -bmJ -bmJ +pPo +pPo bnM ayF bWk @@ -64697,7 +66639,7 @@ awp bkS bly bly -blX +wvK bno bnN ayF @@ -64911,8 +66853,8 @@ aZF bjM bgx awp -bkK -bly +dQZ +haT bmb gCx bnp @@ -74833,9 +76775,9 @@ asn gvI amk ajm -aqc +sUQ avM -aqc +lAF aka amk tQw @@ -75051,9 +76993,9 @@ atc amk auj auY -auY +fnv awz -ahv +aqc amk aao tQw @@ -75478,14 +77420,14 @@ adZ afd afd adZ -aqY +amW arF arF ate -amW -aqc -auY +amk +rUs auY +fnv awB aqc amk @@ -76138,7 +78080,7 @@ agd agd amX awC -axp +kIF axp ayA amk @@ -76357,7 +78299,7 @@ avO auY aqc axT -auY +wCs amk anI aAM @@ -76574,7 +78516,7 @@ auy auY aqc aqc -auY +orT amk anI aAN @@ -76789,8 +78731,8 @@ agd agd amX awD -auY -auY +aEs +aEs ayB amk anI @@ -76996,8 +78938,8 @@ adZ anQ amK adZ -aEs -aGh +sUQ +aqc aqc asp aqc @@ -77214,7 +79156,7 @@ anR amM adZ adZ -aqc +aGh ahv ajd aqc @@ -77432,7 +79374,7 @@ anS apv adZ adZ -aqc +auY asr aqc amX @@ -80264,7 +82206,7 @@ aao aao jgW aig -aao +reL aao anI anI diff --git a/maps/map_files/BigRed/sprinkles/15.reactor_meltdown.dmm b/maps/map_files/BigRed/sprinkles/15.reactor_meltdown.dmm index b1a2ababa604..8f6063172ff5 100644 --- a/maps/map_files/BigRed/sprinkles/15.reactor_meltdown.dmm +++ b/maps/map_files/BigRed/sprinkles/15.reactor_meltdown.dmm @@ -1,7 +1,9 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "ai" = ( /obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "ak" = ( /obj/effect/spawner/random/tool, @@ -10,25 +12,35 @@ "al" = ( /obj/structure/surface/table, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "am" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 5 }, -/turf/open/floor, +/turf/open/floor{ + dir = 10; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "an" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "ao" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 10 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "aq" = ( /turf/closed/wall/solaris/reinforced, @@ -42,13 +54,17 @@ "aD" = ( /obj/structure/surface/table, /obj/effect/spawner/random/toolbox, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "aE" = ( /obj/structure/surface/table, /obj/effect/spawner/random/tool, /obj/effect/spawner/random/technology_scanner, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "aF" = ( /obj/structure/window/framed/solaris, @@ -56,34 +72,51 @@ /area/bigredv2/outside/engineering) "aT" = ( /obj/structure/reagent_dispensers/fueltank, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "aU" = ( /obj/structure/surface/rack, /obj/item/device/camera_film, -/turf/open/floor, +/turf/open/floor{ + dir = 9; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "aV" = ( /obj/structure/surface/rack, /obj/item/device/analyzer, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "aW" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 6 }, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "aY" = ( /obj/structure/pipes/standard/manifold/fourway/hidden/green, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "aZ" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "ba" = ( /obj/structure/pipes/standard/simple/hidden/green{ @@ -91,14 +124,20 @@ }, /obj/effect/decal/cleanable/dirt, /obj/item/device/lightreplacer, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bb" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, /obj/item/stack/sheet/metal, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bc" = ( /obj/structure/machinery/light{ @@ -107,41 +146,58 @@ /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bd" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, /obj/effect/landmark/hunter_secondary, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellowcorners2" + }, /area/bigredv2/outside/engineering) "be" = ( /obj/structure/pipes/standard/manifold/hidden/green, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bf" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, /obj/effect/decal/cleanable/liquid_fuel, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bg" = ( /obj/structure/pipes/standard/manifold/hidden/green{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bi" = ( /obj/effect/decal/cleanable/dirt, /obj/item/clothing/mask/breath, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bj" = ( /obj/structure/pipes/standard/simple/hidden/green, /obj/item/stack/sheet/metal, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bk" = ( /obj/effect/decal/cleanable/dirt, @@ -149,7 +205,9 @@ dir = 1; pixel_y = -30 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bl" = ( /obj/effect/decal/cleanable/liquid_fuel, @@ -158,7 +216,9 @@ name = "Storm Shutters"; pixel_y = -32 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bm" = ( /obj/structure/bed/chair{ @@ -166,26 +226,35 @@ }, /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/crap_item, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bn" = ( /obj/structure/surface/table, /obj/effect/decal/cleanable/dirt, /obj/item/clothing/glasses/welding, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bo" = ( /obj/structure/bed/chair{ dir = 8 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bp" = ( /obj/item/folder/yellow, /obj/structure/pipes/standard/manifold/hidden/green{ dir = 8 }, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellowcorners2" + }, /area/bigredv2/outside/engineering) "bq" = ( /obj/structure/pipes/standard/simple/hidden/green{ @@ -194,14 +263,18 @@ /obj/structure/machinery/door/airlock/almayer/engineering/colony{ name = "\improper Engineering Workshop" }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "delivery" + }, /area/bigredv2/outside/engineering) "br" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bs" = ( /obj/effect/decal/cleanable/dirt, @@ -217,41 +290,60 @@ dir = 1; name = "\improper Engine Reactor Control" }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "delivery" + }, /area/bigredv2/outside/telecomm/engi) "bv" = ( /obj/structure/bed/chair{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bw" = ( -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bx" = ( /obj/structure/machinery/computer/arcade, -/turf/open/floor, +/turf/open/floor{ + dir = 5; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "by" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bz" = ( /obj/effect/decal/cleanable/dirt, /obj/item/stack/sheet/metal, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bA" = ( /obj/structure/surface/table, /obj/effect/spawner/random/toolbox, /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bB" = ( /obj/item/stack/sheet/glass, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bC" = ( /obj/effect/decal/cleanable/dirt, @@ -269,19 +361,30 @@ dir = 8 }, /obj/effect/spawner/random/technology_scanner, -/turf/open/floor, +/turf/open/floor{ + dir = 9; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/telecomm/engi) "bF" = ( /obj/structure/machinery/camera/autoname, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/telecomm/engi) "bG" = ( -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/telecomm/engi) "bH" = ( /obj/structure/surface/table, /obj/effect/decal/cleanable/ash, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bJ" = ( /obj/structure/bed/chair{ @@ -290,46 +393,70 @@ /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bK" = ( /obj/item/folder/yellow, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellowcorners2" + }, /area/bigredv2/outside/engineering) "bL" = ( /obj/structure/machinery/vending/cigarette/colony, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bM" = ( /obj/structure/machinery/vending/snack, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bN" = ( /obj/structure/machinery/vending/cola, -/turf/open/floor, +/turf/open/floor{ + dir = 5; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bO" = ( /obj/structure/bed/chair/office/light{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bP" = ( /obj/structure/surface/table, /obj/effect/spawner/random/powercell, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bQ" = ( /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellowcorners2" + }, /area/bigredv2/outside/engineering) "bR" = ( /obj/structure/machinery/light{ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "bS" = ( /obj/structure/bed/chair/office/light{ @@ -338,13 +465,18 @@ /obj/structure/pipes/standard/simple/hidden/green{ dir = 6 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/telecomm/engi) "bT" = ( /obj/structure/pipes/vents/pump{ dir = 8 }, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/telecomm/engi) "bU" = ( /obj/item/device/radio/intercom{ @@ -353,21 +485,27 @@ name = "General Listening Channel"; pixel_x = 30 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "podhatchfloor" + }, /area/bigredv2/outside/telecomm/engi) "bV" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/pipes/standard/simple/hidden/green{ dir = 5 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bX" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/pipes/standard/simple/hidden/green{ dir = 9 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bY" = ( /obj/effect/decal/cleanable/dirt, @@ -375,19 +513,27 @@ amount = 30 }, /obj/effect/landmark/crap_item, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "bZ" = ( /obj/structure/surface/table, /obj/effect/decal/cleanable/dirt, /obj/item/tool/pen, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "ca" = ( /obj/structure/sign/safety/hazard{ pixel_y = -32 }, -/turf/open/floor, +/turf/open/floor{ + dir = 10; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "ce" = ( /obj/item/tool/lighter/random, @@ -395,7 +541,9 @@ dir = 4 }, /obj/effect/decal/cleanable/ash, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "cf" = ( /obj/item/stack/sheet/metal, @@ -411,38 +559,55 @@ /area/bigredv2/outside/engineering) "ch" = ( /obj/effect/landmark/crap_item, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "ck" = ( /obj/effect/decal/cleanable/dirt, /obj/item/clothing/suit/radiation, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellowcorners2" + }, /area/bigredv2/outside/engineering) "cl" = ( /obj/effect/decal/cleanable/dirt, /obj/item/clothing/head/welding, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "cm" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/oil, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "cn" = ( /obj/structure/machinery/door/airlock/almayer/secure/colony{ dir = 1; name = "\improper Engine Reactor" }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "delivery" + }, /area/bigredv2/outside/engineering) "co" = ( /obj/structure/closet/radiation, -/turf/open/floor, +/turf/open/floor{ + icon_state = "delivery" + }, /area/bigredv2/outside/engineering) "cp" = ( /obj/item/folder/yellow, /obj/effect/landmark/crap_item, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "cq" = ( /obj/effect/decal/cleanable/ash, @@ -453,7 +618,10 @@ /area/bigredv2/outside/telecomm/engi) "cr" = ( /obj/effect/decal/cleanable/molten_item, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/telecomm/engi) "cs" = ( /obj/structure/pipes/standard/simple/hidden/green{ @@ -462,7 +630,9 @@ /obj/structure/machinery/door/airlock/almayer/engineering/colony{ name = "\improper Engine Reactor Control" }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "delivery" + }, /area/bigredv2/outside/telecomm/engi) "ct" = ( /obj/structure/machinery/door_control{ @@ -480,7 +650,9 @@ /obj/structure/machinery/door/airlock/almayer/engineering/colony{ name = "\improper Engine Reactor Control" }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "delivery" + }, /area/bigredv2/outside/telecomm/engi) "cw" = ( /obj/structure/pipes/standard/simple/hidden/green{ @@ -494,18 +666,24 @@ /obj/structure/machinery/constructable_frame{ icon_state = "box_1" }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "cy" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/machinery/constructable_frame, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "cz" = ( /obj/structure/surface/table, /obj/structure/machinery/light, /obj/effect/spawner/random/tool, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "cA" = ( /obj/structure/surface/table, @@ -513,7 +691,10 @@ /obj/item/stack/sheet/metal{ amount = 30 }, -/turf/open/floor, +/turf/open/floor{ + dir = 6; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "cB" = ( /obj/structure/machinery/light{ @@ -522,7 +703,9 @@ /obj/structure/sign/safety/high_rad{ pixel_x = 32 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "cC" = ( /obj/structure/pipes/standard/simple/hidden/green{ @@ -534,7 +717,10 @@ /area/bigredv2/outside/engineering) "cD" = ( /obj/structure/machinery/computer/area_atmos, -/turf/open/floor, +/turf/open/floor{ + dir = 6; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "cE" = ( /obj/structure/machinery/light{ @@ -543,12 +729,17 @@ /obj/structure/sign/safety/high_rad{ pixel_x = -32 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/engineering) "cF" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/reagent_dispensers/fueltank, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "cG" = ( /obj/structure/window/framed/solaris/reinforced, @@ -564,7 +755,9 @@ /obj/effect/landmark/static_comms/net_two{ broken_on_spawn = 1 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "podhatchfloor" + }, /area/bigredv2/outside/telecomm/engi) "cI" = ( /obj/structure/sign/safety/hazard{ @@ -572,12 +765,16 @@ }, /obj/effect/decal/cleanable/dirt, /obj/item/tool/extinguisher, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "cK" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/molten_item, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/telecomm/engi) "cM" = ( /turf/open/mars, @@ -615,7 +812,9 @@ dir = 1; name = "\improper Engineering Complex" }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "delivery" + }, /area/bigredv2/outside/engineering) "cY" = ( /turf/open/mars_cave{ @@ -655,7 +854,10 @@ dir = 8 }, /obj/effect/decal/cleanable/ash, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/engineering) "dj" = ( /obj/effect/decal/cleanable/dirt/greenglow, @@ -991,7 +1193,10 @@ /area/bigredv2/outside/engineering) "eI" = ( /obj/effect/decal/cleanable/ash, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/telecomm/engi) "eJ" = ( /obj/effect/decal/cleanable/molten_item, @@ -1024,6 +1229,31 @@ "eO" = ( /turf/closed/wall/mineral/uranium/leaking, /area/bigredv2/outside/engineering) +"fI" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/engineering) +"gT" = ( +/turf/open/floor{ + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) +"im" = ( +/obj/structure/pipes/standard/manifold/hidden/green{ + dir = 4 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/engineering) +"iQ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "jr" = ( /obj/structure/blocker/forcefield/multitile_vehicles, /turf/open/mars_cave{ @@ -1034,6 +1264,14 @@ /obj/structure/blocker/forcefield/multitile_vehicles, /turf/open/mars_cave, /area/bigredv2/outside/lz2_south_cas) +"ng" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/engineering) "oE" = ( /obj/structure/machinery/door/poddoor/almayer{ id = "rad_door"; @@ -1041,12 +1279,26 @@ }, /turf/open/floor/plating, /area/bigredv2/outside/telecomm/engi) +"oK" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "sU" = ( /obj/structure/blocker/forcefield/multitile_vehicles, /turf/open/mars_cave{ icon_state = "mars_dirt_6" }, /area/bigredv2/outside/lz2_south_cas) +"to" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "vs" = ( /turf/closed/wall/solaris/reinforced, /area/bigredv2/outside/telecomm/engi) @@ -1058,6 +1310,19 @@ icon_state = "panelscorched" }, /area/bigredv2/outside/telecomm/engi) +"xl" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellowcorners2" + }, +/area/bigredv2/outside/engineering) +"xz" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/telecomm/engi) "yH" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 @@ -1072,7 +1337,9 @@ /area/bigredv2/outside/lz2_south_cas) "Bo" = ( /obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/telecomm/engi) "CA" = ( /obj/effect/decal/cleanable/dirt, @@ -1083,6 +1350,26 @@ icon_state = "panelscorched" }, /area/bigredv2/outside/telecomm/engi) +"Dh" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellowcorners2" + }, +/area/bigredv2/outside/engineering) +"Dq" = ( +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) +"ET" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "IE" = ( /obj/structure/blocker/forcefield/multitile_vehicles, /turf/open/mars_cave{ @@ -1093,12 +1380,31 @@ /obj/structure/window_frame/solaris/reinforced, /turf/open/floor/plating, /area/bigredv2/outside/telecomm/engi) +"Lf" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor{ + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) "LE" = ( /obj/effect/decal/cleanable/ash, /turf/open/floor/plating{ icon_state = "panelscorched" }, /area/bigredv2/outside/telecomm/engi) +"Nv" = ( +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/engineering) +"NT" = ( +/turf/open/floor{ + dir = 4; + icon_state = "darkyellowcorners2" + }, +/area/bigredv2/outside/telecomm/engi) "NX" = ( /obj/structure/blocker/forcefield/multitile_vehicles, /turf/open/mars{ @@ -1116,10 +1422,35 @@ icon_state = "panelscorched" }, /area/bigredv2/outside/telecomm/engi) +"Sz" = ( +/obj/item/stack/sheet/glass, +/turf/open/floor{ + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) +"SC" = ( +/turf/open/floor{ + icon_state = "delivery" + }, +/area/bigredv2/outside/engineering) +"Tv" = ( +/turf/open/floor{ + icon_state = "podhatchfloor" + }, +/area/bigredv2/outside/telecomm/engi) "Uo" = ( /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "podhatchfloor" + }, /area/bigredv2/outside/telecomm/engi) +"WI" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/engineering) (1,1,1) = {" au @@ -1131,7 +1462,7 @@ bp by ai bX -bQ +fI cx cG Ah @@ -1161,9 +1492,9 @@ au au an bz -bw +Nv bY -bw +Nv cy cG NX @@ -1192,10 +1523,10 @@ au au au an -bw +Nv bO -bw -bw +Nv +Nv cz aq Ph @@ -1227,7 +1558,7 @@ an bA bP bZ -bQ +WI cA aq Ph @@ -1287,9 +1618,9 @@ au au au au -an +ng bw -bQ +oK ca aq co @@ -1321,8 +1652,8 @@ aU bw br bB -bw -bQ +Nv +fI cn cB cn @@ -1350,11 +1681,11 @@ au au au aV -bw -an -bw -bw -bw +Nv +ng +Nv +Nv +gT aq aq aq @@ -1384,9 +1715,9 @@ au aW ai bs -bw +Nv ew -bB +Sz co co dk @@ -1479,8 +1810,8 @@ au au aZ bQ -bQ -bQ +WI +WI bR ez cC @@ -1510,7 +1841,7 @@ au au au ba -bQ +iQ vs vs vs @@ -1542,7 +1873,7 @@ au au au an -bw +gT vs bE eI @@ -1574,7 +1905,7 @@ au au au aZ -bQ +iQ vs bF bS @@ -1606,12 +1937,12 @@ ak au au bb -bQ +fI bu bG bT -bG -Uo +NT +xz RN eE oE @@ -1670,9 +2001,9 @@ au au au bd -bQ +iQ vs -bG +Tv bU ct RN @@ -1701,7 +2032,7 @@ dR au au au -an +ng bl vs vs @@ -1733,13 +2064,13 @@ dT au au au -an +ng ck bw bw di bw -bQ +fI ew dr cS @@ -1769,8 +2100,8 @@ be bm bv bv -bQ -bw +fI +Nv ez ew dr @@ -1797,11 +2128,11 @@ dT au au au -an +ng bn aE bH -bQ +fI ch ew ew @@ -1829,11 +2160,11 @@ dT au au au -an +ng aD al ce -bw +Nv ew ew cD @@ -1865,8 +2196,8 @@ bf bo bo bJ -bQ -bQ +fI +iQ aq aq aq @@ -1894,11 +2225,11 @@ au au au bg -ai -ai -bg +to +Dh +im bV -bQ +fI cn cE cn @@ -1994,11 +2325,11 @@ au aq bM ao -ai -ai -ai -ai -ai +xl +ET +ET +ET +ET am aq as @@ -2025,13 +2356,13 @@ au au aq bN -bw +Dq cm bR cF aT -bw -an +Nv +Lf aq as as @@ -2062,7 +2393,7 @@ aq aq aq aq -bw +SC cX aq as diff --git a/maps/map_files/BigRed/sprinkles/25.vault_v2.dmm b/maps/map_files/BigRed/sprinkles/25.vault_v2.dmm index 566f892d6fdd..f62f085e7ea2 100644 --- a/maps/map_files/BigRed/sprinkles/25.vault_v2.dmm +++ b/maps/map_files/BigRed/sprinkles/25.vault_v2.dmm @@ -1,508 +1,652 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aa" = ( -/turf/open/mars, -/area/bigredv2/outside/c) +/obj/structure/inflatable/popped/door, +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = -11; + pixel_y = 10 + }, +/turf/open/floor{ + icon_state = "darkpurplecorners2" + }, +/area/bigredv2/caves/lambda/breakroom) "ab" = ( -/turf/open/mars{ - icon_state = "mars_dirt_8" +/obj/effect/decal/cleanable/blood/drip{ + pixel_y = 6 }, -/area/bigredv2/outside/c) +/turf/open/floor{ + dir = 4; + icon_state = "darkpurplecorners2" + }, +/area/bigredv2/caves/lambda/breakroom) "ac" = ( +/obj/item/tool/pickaxe/drill, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /turf/open/mars_cave{ - icon_state = "mars_dirt_4" + icon_state = "mars_cave_2" }, -/area/bigredv2/outside/c) +/area/bigredv2/caves_lambda) "ad" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/mars_cave{ - icon_state = "mars_dirt_4" - }, -/area/bigredv2/outside/c) +/obj/effect/glowshroom, +/turf/open/mars_cave, +/area/bigredv2/caves_lambda) "ae" = ( -/turf/open/mars{ - icon_state = "mars_dirt_3" +/obj/effect/glowshroom, +/turf/open/mars_cave{ + icon_state = "mars_cave_7" }, -/area/bigredv2/outside/c) +/area/bigredv2/caves_lambda) "af" = ( -/obj/effect/landmark/crap_item, -/turf/open/mars, -/area/bigredv2/outside/c) +/obj/effect/decal/cleanable/blood/xeno, +/turf/open/mars_cave{ + icon_state = "mars_cave_7" + }, +/area/bigredv2/caves_lambda) "ag" = ( -/turf/open/mars{ - icon_state = "mars_dirt_9" +/obj/structure/barricade/wooden, +/turf/open/floor{ + dir = 4; + icon_state = "darkpurplecorners2" }, -/area/bigredv2/outside/c) +/area/bigredv2/caves/lambda/breakroom) "ah" = ( -/turf/open/mars{ - icon_state = "mars_dirt_13" +/obj/effect/glowshroom, +/turf/open/mars_cave{ + icon_state = "mars_cave_10" }, -/area/bigredv2/outside/c) +/area/bigredv2/caves_lambda) "ai" = ( -/turf/open/mars{ - icon_state = "mars_dirt_10" +/turf/open/mars_cave{ + icon_state = "mars_cave_6" }, -/area/bigredv2/outside/c) +/area/bigredv2/caves_lambda) "aj" = ( -/turf/open/mars{ - icon_state = "mars_dirt_14" +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/turf/open/mars_cave{ + icon_state = "mars_cave_11" }, -/area/bigredv2/outside/c) +/area/bigredv2/caves_lambda) "ak" = ( +/turf/closed/wall/solaris/rock, +/area/bigredv2/caves) +"al" = ( +/obj/structure/sign/safety/restrictedarea{ + pixel_x = 8; + pixel_y = -32 + }, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /turf/open/floor{ - dir = 1; - icon_state = "asteroidwarning" + dir = 4; + icon_state = "darkpurplecorners2" }, -/area/bigredv2/outside/c) -"al" = ( -/turf/closed/wall/solaris/reinforced, -/area/bigredv2/outside/storage) +/area/bigredv2/caves/lambda/breakroom) "am" = ( -/obj/structure/largecrate/hunter_games_guns/mediocre, -/turf/open/floor, -/area/bigredv2/outside/storage) +/obj/structure/machinery/door_control{ + id = "sci_br"; + name = "Observation Shutters"; + pixel_y = 28 + }, +/obj/effect/decal/cleanable/blood/gibs/xeno, +/turf/open/floor{ + icon_state = "darkpurplecorners2" + }, +/area/bigredv2/caves/lambda/breakroom) "an" = ( -/obj/structure/largecrate/supply/floodlights, -/turf/open/floor, -/area/bigredv2/outside/storage) +/obj/effect/decal/cleanable/mucus, +/obj/structure/machinery/door_control{ + id = "sci_br"; + name = "Observation Shutters"; + pixel_y = 28 + }, +/obj/effect/landmark/corpsespawner/pmc, +/obj/effect/decal/cleanable/vomit, +/turf/open/floor{ + icon_state = "darkpurplecorners2" + }, +/area/bigredv2/caves/lambda/breakroom) "ao" = ( -/turf/open/floor, -/area/bigredv2/outside/storage) +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = -8; + pixel_y = 6 + }, +/turf/open/floor{ + icon_state = "darkpurplecorners2" + }, +/area/bigredv2/caves/lambda/breakroom) "ap" = ( -/obj/structure/surface/table, -/obj/effect/spawner/random/technology_scanner, -/turf/open/floor, -/area/bigredv2/outside/storage) +/obj/structure/sign/safety/bulkhead_door, +/turf/closed/wall/solaris/reinforced, +/area/bigredv2/caves/lambda/breakroom) "aq" = ( -/obj/structure/surface/table, -/obj/structure/machinery/power/apc{ - dir = 1 +/turf/open/floor/almayer{ + dir = 1; + icon_state = "w-y0" }, -/obj/effect/spawner/random/powercell, -/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, -/area/bigredv2/outside/storage) +/area/bigredv2/caves/lambda/breakroom) "ar" = ( -/obj/structure/surface/table, -/obj/structure/machinery/light{ - dir = 1 +/obj/structure/filingcabinet{ + density = 0; + layer = 3.1; + pixel_x = 8; + pixel_y = 18 + }, +/obj/structure/filingcabinet{ + density = 0; + pixel_x = -8; + pixel_y = 20 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "white_cyan1" }, -/obj/effect/spawner/random/tech_supply, -/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, -/area/bigredv2/outside/storage) +/area/bigredv2/caves/lambda/breakroom) "as" = ( -/obj/structure/surface/table, -/obj/effect/spawner/random/tool, -/turf/open/floor, -/area/bigredv2/outside/storage) +/obj/structure/filingcabinet{ + pixel_x = 7 + }, +/obj/structure/filingcabinet{ + density = 0; + pixel_x = -7; + pixel_y = 19 + }, +/obj/structure/filingcabinet{ + pixel_x = -9 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "white_cyan1" + }, +/area/bigredv2/caves/lambda/breakroom) "at" = ( -/obj/structure/surface/table, -/obj/effect/spawner/random/tech_supply, -/turf/open/floor, -/area/bigredv2/outside/storage) +/turf/open/floor/plating/almayer, +/area/bigredv2/caves/lambda/breakroom) "au" = ( -/obj/structure/surface/table, -/obj/effect/spawner/random/toolbox, -/turf/open/floor, -/area/bigredv2/outside/storage) +/turf/open/floor/strata{ + dir = 4; + icon_state = "white_cyan1" + }, +/area/bigredv2/caves/lambda/breakroom) "av" = ( -/obj/structure/surface/table, -/obj/item/tool/extinguisher, -/turf/open/floor, -/area/bigredv2/outside/storage) +/obj/structure/filingcabinet{ + density = 0; + pixel_x = 8; + pixel_y = 20 + }, +/obj/structure/filingcabinet{ + density = 0; + pixel_x = -8; + pixel_y = 16 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "white_cyan1" + }, +/area/bigredv2/caves/lambda/breakroom) "aw" = ( -/obj/structure/largecrate/supply/generator, -/turf/open/floor, -/area/bigredv2/outside/storage) +/obj/structure/inflatable/popped/door, +/turf/open/floor{ + icon_state = "darkpurplecorners2" + }, +/area/bigredv2/caves/lambda/breakroom) "ax" = ( -/obj/structure/largecrate/random/secure, -/turf/open/floor, -/area/bigredv2/outside/storage) -"aA" = ( -/obj/structure/pipes/standard/simple/hidden/green{ - dir = 6 +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor{ + icon_state = "darkpurplecorners2" }, -/turf/open/floor, -/area/bigredv2/outside/storage) +/area/bigredv2/caves/lambda/breakroom) +"aA" = ( +/turf/template_noop, +/area/template_noop) "aB" = ( -/obj/structure/pipes/standard/simple/hidden/green{ - dir = 4; - layer = 2.4 +/turf/open/floor/almayer{ + dir = 1; + icon_state = "w-y1" }, -/turf/open/floor, -/area/bigredv2/outside/storage) +/area/bigredv2/caves/lambda/breakroom) "aC" = ( -/obj/structure/pipes/standard/simple/hidden/green{ +/obj/structure/machinery/light, +/turf/open/floor{ dir = 4; - layer = 2.4 - }, -/obj/structure/machinery/door/airlock/almayer/secure/colony{ - icon_state = "door_locked"; - locked = 0; - name = "\improper Emergency Vault" + icon_state = "darkpurplecorners2" }, -/turf/open/floor, -/area/bigredv2/outside/storage) +/area/bigredv2/caves/lambda/breakroom) "aD" = ( -/obj/structure/largecrate/supply/supplies/water, -/turf/open/floor, -/area/bigredv2/outside/storage) +/obj/structure/inflatable/popped/door, +/turf/open/floor{ + dir = 4; + icon_state = "darkpurplecorners2" + }, +/area/bigredv2/caves/lambda/breakroom) "aE" = ( -/obj/structure/largecrate/random, -/turf/open/floor, -/area/bigredv2/outside/storage) +/turf/open/floor{ + dir = 4; + icon_state = "darkpurplecorners2" + }, +/area/bigredv2/caves/lambda/breakroom) "aF" = ( -/obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor, -/area/bigredv2/outside/storage) +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/structure/surface/table/reinforced/prison, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/machinery/door/window/brigdoor/southright, +/obj/item/clothing/accessory/medal/gold{ + pixel_x = 7; + pixel_y = 10 + }, +/obj/item/clothing/accessory/medal/bronze/science{ + pixel_x = -5 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "white_cyan1" + }, +/area/bigredv2/caves/lambda/breakroom) "aG" = ( -/obj/structure/largecrate/supply/medicine/medkits, -/turf/open/floor, -/area/bigredv2/outside/storage) +/obj/structure/window/framed/solaris/reinforced, +/obj/structure/machinery/door/poddoor/almayer{ + id = "sci_br"; + name = "\improper Lambda Observation Shutters" + }, +/turf/open/floor/plating, +/area/bigredv2/caves/lambda/breakroom) "aH" = ( -/obj/structure/largecrate/supply/medicine/blood, -/turf/open/floor, -/area/bigredv2/outside/storage) +/obj/structure/barricade/wooden{ + dir = 1; + pixel_y = 7 + }, +/turf/open/floor{ + icon_state = "darkpurplecorners2" + }, +/area/bigredv2/caves/lambda/breakroom) "aI" = ( -/obj/structure/largecrate/supply/medicine/iv, -/turf/open/floor, -/area/bigredv2/outside/storage) +/turf/closed/wall/solaris/reinforced, +/area/bigredv2/caves/lambda/breakroom) "aJ" = ( /obj/structure/machinery/light, -/turf/open/floor, -/area/bigredv2/outside/storage) -"aK" = ( -/obj/structure/pipes/vents/pump{ - dir = 1 - }, -/obj/structure/surface/table, -/obj/effect/spawner/random/toolbox, -/turf/open/floor, -/area/bigredv2/outside/storage) -"aL" = ( -/obj/structure/surface/table, -/obj/structure/machinery/light, -/obj/effect/spawner/random/powercell, -/turf/open/floor, -/area/bigredv2/outside/storage) -"aM" = ( -/obj/structure/pipes/standard/simple/hidden/green{ +/turf/open/floor/strata{ dir = 4; - layer = 2.4 + icon_state = "white_cyan1" }, -/turf/open/floor{ - icon_state = "asteroidwarning" +/area/bigredv2/caves/lambda/breakroom) +"aK" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/structure/machinery/door_control{ + id = "vault"; + name = "Vault Lockdown" }, -/area/bigredv2/outside/s) -"aN" = ( -/obj/structure/pipes/standard/simple/hidden/green{ +/turf/open/floor/strata{ dir = 4; - layer = 2.4 - }, -/turf/open/floor{ - dir = 1; - icon_state = "asteroidfloor" + icon_state = "white_cyan1" }, -/area/bigredv2/outside/s) -"aO" = ( -/obj/structure/pipes/standard/manifold/hidden/green{ - dir = 1 +/area/bigredv2/caves/lambda/breakroom) +"aL" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/item/spacecash/c1000, +/obj/item/spacecash/c1000, +/obj/item/spacecash/c1000, +/obj/item/spacecash/c1000, +/turf/open/floor/strata{ + dir = 4; + icon_state = "white_cyan1" }, -/turf/open/floor{ +/area/bigredv2/caves/lambda/breakroom) +"aM" = ( +/turf/open/floor/almayer{ dir = 1; - icon_state = "asteroidfloor" + icon_state = "w-y2" }, -/area/bigredv2/outside/s) +/area/bigredv2/caves/lambda/breakroom) +"aN" = ( +/turf/open/mars_cave, +/area/bigredv2/caves_lambda) "aP" = ( -/turf/open/mars{ - icon_state = "mars_dirt_3" +/turf/open/mars_cave{ + icon_state = "mars_cave_7" }, -/area/bigredv2/outside/s) +/area/bigredv2/caves_lambda) "aQ" = ( /turf/open/mars_cave{ - icon_state = "mars_dirt_4" + icon_state = "mars_cave_18" }, -/area/bigredv2/outside/s) +/area/bigredv2/caves_lambda) "aR" = ( -/turf/open/floor{ - dir = 8; - icon_state = "asteroidwarning" +/obj/structure/filingcabinet{ + density = 0; + pixel_x = 8; + pixel_y = 19 }, -/area/bigredv2/outside/s) -"aS" = ( -/obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor{ +/obj/structure/filingcabinet{ + density = 0; + pixel_x = -9; + pixel_y = 20 + }, +/turf/open/floor/strata{ dir = 4; - icon_state = "asteroidwarning" + icon_state = "white_cyan1" + }, +/area/bigredv2/caves/lambda/breakroom) +"aS" = ( +/obj/effect/glowshroom, +/turf/open/mars_cave{ + icon_state = "mars_cave_2" }, -/area/bigredv2/outside/s) +/area/bigredv2/caves_lambda) "aT" = ( -/turf/open/mars, -/area/bigredv2/outside/s) -"aU" = ( -/turf/open/mars{ - icon_state = "mars_dirt_11" +/turf/open/mars_cave{ + icon_state = "mars_cave_4" }, -/area/bigredv2/outside/s) +/area/bigredv2/caves_lambda) "aV" = ( -/turf/open/mars{ - icon_state = "mars_dirt_9" +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/turf/open/mars_cave{ + icon_state = "mars_cave_2" }, -/area/bigredv2/outside/s) +/area/bigredv2/caves_lambda) "aW" = ( -/turf/open/mars{ - icon_state = "mars_dirt_8" +/obj/structure/machinery/door/airlock/almayer/secure/reinforced/colony{ + icon_state = "door_locked" }, -/area/bigredv2/outside/s) +/obj/structure/machinery/door/poddoor/almayer/closed{ + dir = 4; + id = "vault"; + name = "Vault Lockdown" + }, +/turf/open/floor{ + icon_state = "delivery" + }, +/area/bigredv2/caves/lambda/breakroom) "aX" = ( -/turf/open/mars{ - icon_state = "mars_dirt_10" +/turf/open/mars_cave{ + icon_state = "mars_cave_8" }, -/area/bigredv2/outside/s) +/area/bigredv2/caves_lambda) "aY" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor{ - dir = 8; - icon_state = "asteroidwarning" +/turf/open/mars_cave{ + icon_state = "mars_cave_10" }, -/area/bigredv2/outside/s) +/area/bigredv2/caves_lambda) "aZ" = ( -/turf/open/mars{ - icon_state = "mars_dirt_12" +/turf/open/mars_cave{ + icon_state = "mars_cave_5" }, -/area/bigredv2/outside/s) +/area/bigredv2/caves_lambda) "ba" = ( -/obj/effect/landmark/crap_item, -/turf/open/mars, -/area/bigredv2/outside/s) +/turf/open/mars_cave{ + icon_state = "mars_cave_2" + }, +/area/bigredv2/caves_lambda) +"vm" = ( +/obj/item/shard{ + icon_state = "small" + }, +/turf/open/mars_cave{ + icon_state = "mars_cave_18" + }, +/area/bigredv2/caves_lambda) "zP" = ( -/obj/structure/surface/table, -/obj/effect/spawner/random/technology_scanner, -/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, -/area/bigredv2/outside/storage) +/obj/effect/glowshroom, +/turf/open/mars_cave{ + icon_state = "mars_cave_5" + }, +/area/bigredv2/caves_lambda) +"EW" = ( +/obj/structure/machinery/door/poddoor/almayer{ + id = "sci_br"; + name = "\improper Lambda Observation Shutters" + }, +/obj/item/shard{ + icon_state = "medium" + }, +/obj/structure/window_frame/solaris/reinforced, +/turf/open/floor/plating, +/area/bigredv2/caves/lambda/breakroom) +"Gv" = ( +/obj/structure/machinery/door/poddoor/almayer{ + id = "sci_br"; + name = "\improper Lambda Observation Shutters" + }, +/obj/item/shard, +/obj/structure/window_frame/solaris/reinforced, +/turf/open/floor/plating, +/area/bigredv2/caves/lambda/breakroom) +"RW" = ( +/obj/item/shard{ + icon_state = "medium" + }, +/turf/open/mars_cave{ + icon_state = "mars_cave_6" + }, +/area/bigredv2/caves_lambda) (1,1,1) = {" -aa -aa -aa -ak -al -al -al -al -al +aA +aA +aA +aA +aA +aI +am al -aM -aP +aI +aA +aA +aY aT -aX +ak "} (2,1,1) = {" -aa -aa -aa -ak -al -am +aA +aA +aA +aA +zP +aG aw aD aG -al -aM -aP -aT +ai +ai +aZ +ba aX "} (3,1,1) = {" -aa -aa +aA +aA ah -ak -al -an -ax -aE +ai +ai +aG aH -al -aM +aE +aG aP -aT -aX +ba +aP +ai +aZ "} (4,1,1) = {" -aa -aa -ai -ak -al -ao +aA +ae +aP +ba +aZ +aI ax -ao +aC aI -al -aM -aP -aT -aX +ae +RW +ac +ba +aZ "} (5,1,1) = {" -aa -aa ai -ak -al -ao -ao +ai +aj +ad +aZ +aG ao -aJ -al -aM -aQ -aU -aQ +ag +EW +af +ba +ba +ba +aZ "} (6,1,1) = {" -aa -aa +aY ai -ak -al -zP -ao -ao -as -al +ai +ba +ba +aG +aa +aD +Gv +vm aN -aR -aR -aY +aS +ba +aZ "} (7,1,1) = {" -aa -aa -aj +ba +ba ak -al -aq -ao -ao +ak +ak +aI +an +ab ap -al -aO -aS -aS +aA +aA +aP aS +aZ "} (8,1,1) = {" -aa -aa -aa +ba ak -al -ar -ao -ao -as -al -aM -aQ -aQ -aQ +ak +aI +aI +aI +aI +aW +aI +aI +aA +ba +aP +aZ "} (9,1,1) = {" -aa -aa -aa +aZ ak -al +ak +aI +aR as -aA -aF +au +au aK -al -aM -aQ -aQ -aQ +aI +aA +aY +ba +aZ "} (10,1,1) = {" -aa -af -aa ak -al -as -aB -ao +aA +aA +aI au -al -aM -aQ -aQ +at +aq +at +au +aI +aA +aP +ba aZ "} (11,1,1) = {" -ab -aa -aa ak -al +aA +aA +aI +aF at aB -ao -as -al -aM -aQ -aQ -aT +at +aJ +aI +aA +aP +ba +aZ "} (12,1,1) = {" -ac -ab -aa -ak -al +aA +aA +aA +aI au -aB -ao -aL -al +at aM +at +aL +aI +aA aQ aV -aT +ba "} (13,1,1) = {" -ad -ag -aa -ak -al +aA +aA +aA +aI +ar av -aB -ao -at -al -aM -aP -aT +aL +aL +aL +aI +aA +ba +ba ba "} (14,1,1) = {" -ae -aa -aa -ak -al -al -aC -al -al -al -aM -aQ -aW -aT +aA +aA +aA +aI +aI +aI +aI +aI +aI +aI +aA +ba +ba +ba "} diff --git a/maps/map_files/BigRed/sprinkles/35.filtration_restored.dmm b/maps/map_files/BigRed/sprinkles/35.filtration_restored.dmm index 47984a920749..adbdf51bd259 100644 --- a/maps/map_files/BigRed/sprinkles/35.filtration_restored.dmm +++ b/maps/map_files/BigRed/sprinkles/35.filtration_restored.dmm @@ -7,7 +7,9 @@ /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "ad" = ( /obj/effect/decal/cleanable/dirt, @@ -17,12 +19,16 @@ /obj/structure/pipes/vents/pump, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "af" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "ah" = ( /obj/structure/window/framed/solaris, @@ -36,13 +42,19 @@ /area/bigredv2/caves) "ak" = ( /obj/structure/closet/wardrobe/atmospherics_yellow, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "al" = ( /obj/structure/surface/table, /obj/item/tool/lighter/random, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "am" = ( /turf/open/floor{ @@ -53,43 +65,59 @@ "an" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "ap" = ( /obj/structure/reagent_dispensers/watertank, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "aq" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/machinery/camera/autoname{ dir = 1 }, -/turf/open/floor, +/turf/open/floor{ + dir = 10; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "ar" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 5 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "as" = ( /obj/structure/pipes/standard/manifold/hidden/green, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "at" = ( /obj/structure/bed/chair{ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "au" = ( /obj/structure/machinery/computer/atmos_alert{ dir = 8 }, /obj/structure/surface/table, -/turf/open/floor, +/turf/open/floor{ + dir = 6; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "av" = ( /obj/item/tool/warning_cone, @@ -123,8 +151,8 @@ /obj/structure/machinery/door/airlock/almayer/engineering/colony{ name = "\improper Atmospherics Condenser Storage" }, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/filtration_plant) "aB" = ( @@ -132,8 +160,8 @@ dir = 1; name = "\improper Atmospherics Condenser" }, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/filtration_plant) "aC" = ( @@ -141,7 +169,9 @@ /obj/structure/pipes/standard/simple/hidden/green{ dir = 10 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "aD" = ( /obj/structure/machinery/door/airlock/almayer/engineering/colony{ @@ -149,14 +179,16 @@ name = "\improper Atmospherics Condenser" }, /obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/filtration_plant) "aE" = ( /obj/effect/decal/cleanable/dirt, /obj/item/device/radio/headset, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "aF" = ( /obj/structure/machinery/portable_atmospherics/powered/scrubber/huge/chan, @@ -173,7 +205,9 @@ /obj/structure/pipes/standard/manifold/hidden/green{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "aJ" = ( /turf/open/floor{ @@ -187,39 +221,49 @@ /area/bigredv2/outside/se) "aL" = ( /obj/structure/reagent_dispensers/fueltank, -/turf/open/floor{ - dir = 1; - icon_state = "bot" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/filtration_plant) "aM" = ( /obj/structure/reagent_dispensers/watertank, -/turf/open/floor{ - dir = 1; - icon_state = "bot" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/filtration_plant) "aN" = ( /obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "aO" = ( /obj/structure/pipes/vents/pump, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "aP" = ( /obj/effect/landmark/crap_item, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "aQ" = ( /obj/structure/surface/table, /obj/effect/landmark/good_item, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "aR" = ( /obj/structure/surface/table, /obj/effect/spawner/random/toolbox, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "aS" = ( /turf/open/floor{ @@ -229,9 +273,8 @@ /area/bigredv2/outside/filtration_plant) "aT" = ( /obj/structure/dispenser/oxygen, -/turf/open/floor{ - dir = 1; - icon_state = "bot" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/filtration_plant) "aV" = ( @@ -239,24 +282,34 @@ icon_state = "U-N" }, /obj/structure/machinery/computer3/server/rack, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "aW" = ( /obj/structure/pipes/standard/manifold/hidden/green, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "aX" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 10 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "aY" = ( /turf/closed/wall/solaris/reinforced, /area/bigredv2/outside/filtration_plant) "aZ" = ( /obj/structure/machinery/computer/general_air_control, -/turf/open/floor, +/obj/structure/surface/table, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bb" = ( /obj/structure/surface/table, @@ -264,23 +317,34 @@ /obj/structure/machinery/light{ dir = 1 }, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bc" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/surface/rack, /obj/effect/spawner/random/tool, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bd" = ( /obj/structure/surface/table, /obj/effect/spawner/random/tool, -/turf/open/floor, +/turf/open/floor{ + dir = 5; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "be" = ( /obj/structure/surface/table, /obj/item/circuitboard/solar_tracker, -/turf/open/floor, +/turf/open/floor{ + dir = 6; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bf" = ( /obj/structure/machinery/light{ @@ -293,34 +357,53 @@ /obj/effect/decal/warning_stripes{ icon_state = "U-S" }, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bh" = ( /obj/effect/decal/warning_stripes{ icon_state = "U-S" }, /obj/structure/machinery/computer3/server/rack, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bj" = ( /obj/structure/surface/rack, /obj/item/tank/air, /obj/item/tool/pickaxe, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bk" = ( /obj/structure/surface/rack, /obj/effect/spawner/random/tool, /obj/structure/machinery/light, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bl" = ( /obj/structure/machinery/door/airlock/almayer/engineering/colony{ dir = 1; name = "\improper Filtration Facility" }, -/turf/open/floor{ - icon_state = "delivery" +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 1; + pixel_y = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/filtration_plant) "bm" = ( @@ -329,34 +412,42 @@ name = "\improper Filtration Facility" }, /obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/filtration_plant) "bn" = ( -/obj/structure/closet/firecloset/full, /obj/structure/sign/safety/distribution_pipes{ pixel_x = 32 }, -/turf/open/floor, +/turf/open/floor{ + dir = 5; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bo" = ( /obj/item/tank/air, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bp" = ( /obj/structure/pipes/vents/pump{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bq" = ( /obj/effect/landmark/crap_item, /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "br" = ( /obj/structure/machinery/door/airlock/almayer/engineering/colony{ @@ -365,8 +456,8 @@ /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/filtration_plant) "bt" = ( @@ -378,7 +469,9 @@ dir = 4 }, /obj/item/frame/table, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bv" = ( /obj/structure/machinery/portable_atmospherics/powered/scrubber/huge/chan, @@ -393,7 +486,9 @@ dir = 9 }, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bz" = ( /obj/effect/decal/cleanable/dirt, @@ -413,7 +508,10 @@ /obj/structure/machinery/computer/atmos_alert{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bD" = ( /obj/structure/window/framed/solaris/reinforced/hull, @@ -435,11 +533,20 @@ /area/bigredv2/outside/filtration_plant) "bG" = ( /obj/structure/surface/table, -/turf/open/floor, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bH" = ( -/obj/structure/machinery/computer/area_atmos/area, -/turf/open/floor, +/obj/structure/machinery/computer/area_atmos/area{ + dir = 8 + }, +/obj/structure/surface/table, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bI" = ( /obj/structure/window_frame/solaris/reinforced, @@ -450,7 +557,10 @@ /area/bigredv2/outside/filtration_plant) "bJ" = ( /obj/item/weapon/twohanded/fireaxe, -/turf/open/floor, +/turf/open/floor{ + dir = 10; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bK" = ( /turf/open/mars, @@ -458,7 +568,10 @@ "bN" = ( /obj/structure/surface/table, /obj/effect/spawner/random/technology_scanner, -/turf/open/floor, +/turf/open/floor{ + dir = 10; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bO" = ( /turf/open/mars_cave{ @@ -475,29 +588,36 @@ /obj/structure/surface/table, /obj/effect/spawner/random/technology_scanner, /obj/structure/machinery/light, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bS" = ( /obj/item/frame/table, /obj/structure/machinery/light, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bT" = ( /obj/effect/decal/cleanable/dirt, /obj/item/frame/table, /obj/effect/decal/cleanable/dirt, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "bU" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/surface/table, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "bW" = ( -/obj/structure/largecrate/random, /turf/open/floor{ - dir = 1; - icon_state = "bot" + icon_state = "dark" }, /area/bigredv2/outside/filtration_plant) "bX" = ( @@ -519,7 +639,9 @@ pixel_x = -32 }, /obj/structure/machinery/light, -/turf/open/floor, +/turf/open/floor{ + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "ce" = ( /obj/structure/machinery/light, @@ -533,8 +655,8 @@ id = "FiltrationShutters"; name = "\improper Airlock Shutters" }, -/turf/open/floor{ - icon_state = "delivery" +/turf/open/floor/almayer{ + icon_state = "test_floor4" }, /area/bigredv2/outside/filtration_plant) "cg" = ( @@ -559,7 +681,10 @@ /area/bigredv2/outside/filtration_cave_cas) "cj" = ( /obj/item/tool/pickaxe, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "bot" + }, /area/bigredv2/outside/filtration_plant) "ck" = ( /obj/effect/decal/warning_stripes{ @@ -581,13 +706,61 @@ icon_state = "delivery" }, /area/bigredv2/outside/filtration_plant) +"cO" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/bigredv2/outside/filtration_plant) +"et" = ( +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/bigredv2/outside/filtration_plant) +"eL" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/turf/open/floor{ + dir = 5; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) +"ff" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/filtration_plant) +"gt" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) +"hk" = ( +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) "jh" = ( /obj/structure/machinery/light, /turf/open/floor, /area/bigredv2/outside/filtration_plant) "ka" = ( /obj/structure/closet/firecloset/full, -/turf/open/floor, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) +"kE" = ( +/obj/structure/machinery/light, +/turf/open/floor{ + dir = 6; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "nk" = ( /obj/structure/blocker/forcefield/multitile_vehicles, @@ -597,23 +770,152 @@ /obj/item/tank/air, /turf/open/floor, /area/bigredv2/outside/filtration_plant) +"oE" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + layer = 2.5 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/filtration_plant) +"qi" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/structure/closet/firecloset/full, +/turf/open/floor{ + dir = 1; + icon_state = "bot" + }, +/area/bigredv2/outside/filtration_plant) +"ti" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + dir = 1; + icon_state = "bot" + }, +/area/bigredv2/outside/filtration_plant) +"tp" = ( +/obj/structure/largecrate/random, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) +"tz" = ( +/turf/open/floor{ + dir = 9; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) "tB" = ( /obj/effect/landmark/crap_item, /turf/open/mars_cave{ icon_state = "mars_cave_2" }, /area/bigredv2/outside/filtration_cave_cas) +"vK" = ( +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) +"xd" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) +"yi" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) +"yZ" = ( +/turf/open/floor{ + dir = 8; + icon_state = "darkyellowcorners2" + }, +/area/bigredv2/outside/filtration_plant) "zu" = ( /turf/open/mars_cave{ icon_state = "mars_cave_7" }, /area/bigredv2/outside/filtration_cave_cas) +"Ap" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + dir = 4; + icon_state = "darkyellowcorners2" + }, +/area/bigredv2/outside/filtration_plant) +"AD" = ( +/turf/open/floor{ + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) +"Ee" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) +"FI" = ( +/turf/open/floor{ + dir = 4; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) +"FK" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + layer = 2.5 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/turf/open/floor{ + icon_state = "dark" + }, +/area/bigredv2/outside/filtration_plant) +"Jy" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor{ + dir = 1; + icon_state = "bot" + }, +/area/bigredv2/outside/filtration_plant) +"Kp" = ( +/obj/structure/surface/table, +/turf/open/floor{ + dir = 10; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) "Ms" = ( /obj/structure/machinery/computer3/server/rack, /obj/effect/decal/warning_stripes{ icon_state = "U-N" }, -/turf/open/floor, +/turf/open/floor{ + dir = 8; + icon_state = "darkyellow2" + }, /area/bigredv2/outside/filtration_plant) "Qx" = ( /obj/effect/decal/cleanable/dirt, @@ -623,6 +925,12 @@ icon_state = "asteroidwarning" }, /area/bigredv2/outside/filtration_plant) +"QJ" = ( +/turf/open/floor{ + dir = 10; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) "Rv" = ( /obj/structure/blocker/forcefield/multitile_vehicles, /turf/open/floor{ @@ -630,11 +938,36 @@ icon_state = "asteroidwarning" }, /area/bigredv2/outside/filtration_plant) +"Sj" = ( +/obj/structure/machinery/door/airlock/almayer/engineering/colony{ + dir = 1; + name = "\improper Filtration Facility" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/bigredv2/outside/filtration_plant) +"Sk" = ( +/obj/structure/machinery/light, +/obj/structure/largecrate/random, +/turf/open/floor{ + dir = 6; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) +"TC" = ( +/obj/structure/machinery/light, +/turf/open/floor{ + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) "TX" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, -/turf/open/floor, +/turf/open/floor{ + icon_state = "dark" + }, /area/bigredv2/outside/filtration_plant) "UH" = ( /obj/effect/decal/warning_stripes{ @@ -656,12 +989,34 @@ icon_state = "bot" }, /area/bigredv2/outside/filtration_plant) +"Wc" = ( +/turf/open/floor{ + dir = 1; + icon_state = "darkyellowcorners2" + }, +/area/bigredv2/outside/filtration_plant) +"Wz" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/turf/open/floor{ + dir = 1; + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) "WD" = ( /obj/structure/blocker/forcefield/multitile_vehicles, /turf/open/mars_cave{ icon_state = "mars_cave_2" }, /area/bigredv2/outside/filtration_cave_cas) +"Xx" = ( +/obj/structure/surface/table, +/obj/effect/spawner/random/technology_scanner, +/turf/open/floor{ + icon_state = "darkyellow2" + }, +/area/bigredv2/outside/filtration_plant) "XC" = ( /obj/structure/cargo_container/grant/right, /turf/open/floor{ @@ -710,12 +1065,12 @@ TX ap aa aL -aS +et aL aL aa -az -az +tz +vK bJ bw bw @@ -734,16 +1089,16 @@ bw (3,1,1) = {" ak TX -jh +TC aa -bf -az -az -az +oE +FK +FK +FK bl -az +bW bp -az +AD bw bw bw @@ -761,19 +1116,19 @@ aY (4,1,1) = {" ak TX -az +AD aa aT aM aT -aS +et aa -az +hk TX -az +yZ bU bB -bG +Kp aY cg az @@ -795,17 +1150,17 @@ aa aa aa aa -bf +Wz bq -az -az -az +bW +bW +bW cb aY bf ad -ad -ad +ti +ti az aS aS @@ -817,22 +1172,22 @@ al ac aq aa -az +tz bg Ms -az +QJ aa -az +hk TX -aS -aS -aS -az +bW +bW +bW +bW cf az ad -ad -az +ti +aS az aS VW @@ -840,21 +1195,21 @@ az bw "} (7,1,1) = {" -ad +ff aC ar aB -az -az -az -az -bl -az +bW +bW +bW +bW +Sj +bW TX -aL bW -aS -az +bW +bW +bW cf az az @@ -871,22 +1226,22 @@ an ae as ah -az +hk bh aV -ad +gt ah -ad +xd TX -aS -aS bW -az +bW +bW +bW cf az az -az -az +aS +aS az aS XC @@ -901,19 +1256,19 @@ aD aN aN ar -az +AD ah -az +hk TX -aS -aS -aS -az +bW +bW +bW +bW cf az az -az -az +aS +aS np bz aS @@ -921,25 +1276,25 @@ jh aY "} (10,1,1) = {" -ad +ff aE at aa -bf -az +Wz +bW ac bk aa -bf +eL TX -az -az -az -jh +FI +yi +tp +Sk aY bf az -az +aS cj az aS @@ -980,11 +1335,11 @@ ah ah aa ka -az +bW TX -az +AD aa -az +tz TX bN bw @@ -1013,7 +1368,7 @@ aN bm aN aW -bN +Xx bt bF bF @@ -1034,11 +1389,11 @@ ai ai aa bb -az -az -jh +bW +bW +TC ay -bf +Wz TX bQ bw @@ -1065,9 +1420,9 @@ aR aQ be aa -az +hk TX -bN +Xx bw bF bF @@ -1092,9 +1447,9 @@ aa ay aa aa -az +hk TX -az +AD bw bD bD @@ -1116,10 +1471,10 @@ am am am aY -bf +Ee bj bj -az +Wc TX bS aa @@ -1142,14 +1497,14 @@ am am am am -US -az -az -az -az +et +bW +bW +bW +bW bu -ad -cn +ff +cO WD bO bO @@ -1169,14 +1524,14 @@ am am am am -US -az -az +et +bW +bW aP aO by -az -US +bW +et WD bO bO @@ -1196,14 +1551,14 @@ am am am am -US -az -az -ad +et +FI +FI +Ap bo -az +bW bT -US +et WD bO bO @@ -1224,12 +1579,12 @@ am aG aG aY -bf -ka +qi +Jy bn -az -az -jh +FI +FI +kE bX WD bO diff --git a/maps/map_files/BigRed/standalone/crashlanding-offices.dmm b/maps/map_files/BigRed/standalone/crashlanding-offices.dmm index 652b4df3bdd3..e0c625805375 100644 --- a/maps/map_files/BigRed/standalone/crashlanding-offices.dmm +++ b/maps/map_files/BigRed/standalone/crashlanding-offices.dmm @@ -23,8 +23,9 @@ }, /area/bigredv2/outside/c) "ag" = ( -/turf/open/mars_cave{ - icon_state = "mars_dirt_4" +/turf/open/floor{ + dir = 8; + icon_state = "asteroidwarning" }, /area/bigredv2/outside/e) "ah" = ( @@ -38,13 +39,12 @@ /area/bigredv2/outside/e) "aj" = ( /turf/open/mars{ - icon_state = "mars_dirt_11" + icon_state = "mars_dirt_12" }, /area/bigredv2/outside/e) "ak" = ( -/turf/open/floor{ - dir = 8; - icon_state = "asteroidwarning" +/turf/open/mars{ + icon_state = "mars_dirt_11" }, /area/bigredv2/outside/e) "al" = ( @@ -54,8 +54,8 @@ }, /area/bigredv2/outside/e) "am" = ( -/turf/open/mars{ - icon_state = "mars_dirt_12" +/turf/open/mars_cave{ + icon_state = "mars_dirt_4" }, /area/bigredv2/outside/e) "an" = ( @@ -2147,8 +2147,8 @@ Ha dq "} (20,1,1) = {" -aj -ag +ai +at aA dX dX @@ -2175,7 +2175,7 @@ PR "} (21,1,1) = {" ak -ak +am aA aG dX @@ -2201,9 +2201,9 @@ Ha PR "} (22,1,1) = {" -al -al -aA +ag +ag +aG aG dX ap @@ -2228,9 +2228,9 @@ Ha PR "} (23,1,1) = {" -am -ag -aA +al +al +aG aG aG ap @@ -2255,8 +2255,8 @@ Ha dq "} (24,1,1) = {" -ai -at +aj +am aA aG aG diff --git a/maps/map_files/CORSAT/Corsat.dmm b/maps/map_files/CORSAT/Corsat.dmm index ab1e9cbaa2fd..7029d71a6076 100644 --- a/maps/map_files/CORSAT/Corsat.dmm +++ b/maps/map_files/CORSAT/Corsat.dmm @@ -37445,8 +37445,7 @@ /area/corsat/gamma/biodome/virology) "drp" = ( /obj/docking_port/stationary/marine_dropship/lz1{ - dwidth = 1; - name = "Gamma Landing Zone" + name = "LZ1: Gamma Landing Zone" }, /turf/open/floor/plating, /area/corsat/gamma/hangar) @@ -38223,8 +38222,7 @@ /area/corsat/omega/complex) "dUj" = ( /obj/docking_port/stationary/marine_dropship/lz2{ - dwidth = 1; - name = "Sigma Landing Zone" + name = "LZ2: Sigma Landing Zone" }, /turf/open/floor/plating, /area/corsat/sigma/hangar) diff --git a/maps/map_files/DesertDam/Desert_Dam.dmm b/maps/map_files/DesertDam/Desert_Dam.dmm index 4b760f41e5c0..4bf4d0e7a88c 100644 --- a/maps/map_files/DesertDam/Desert_Dam.dmm +++ b/maps/map_files/DesertDam/Desert_Dam.dmm @@ -9576,17 +9576,6 @@ /obj/structure/window/framed/colony/reinforced, /turf/open/floor/plating, /area/desert_dam/interior/dam_interior/east_tunnel_entrance) -"aCT" = ( -/obj/structure/barricade/wooden{ - desc = "This barricade is heavily reinforced. Nothing short of blasting it open seems like it'll do the trick, that or melting the breams supporting it..."; - dir = 8; - health = 25000 - }, -/turf/open/floor/prison{ - dir = 10; - icon_state = "bright_clean" - }, -/area/desert_dam/interior/dam_interior/east_tunnel_entrance) "aCU" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/prison{ @@ -9651,18 +9640,6 @@ }, /turf/open/asphalt, /area/desert_dam/exterior/valley/valley_northwest) -"aDd" = ( -/obj/structure/bed/chair, -/obj/structure/barricade/wooden{ - desc = "This barricade is heavily reinforced. Nothing short of blasting it open seems like it'll do the trick, that or melting the breams supporting it..."; - dir = 8; - health = 25000 - }, -/turf/open/floor/prison{ - dir = 10; - icon_state = "bright_clean" - }, -/area/desert_dam/interior/dam_interior/east_tunnel_entrance) "aDe" = ( /obj/effect/decal/sand_overlay/sand1, /turf/open/asphalt{ @@ -85490,8 +85467,8 @@ dTs dTs aEa aEa -aCS -aCS +aEa +aEa aEa aEa dTs @@ -85724,8 +85701,8 @@ dTs dTs aEa aCD -aCT -aDd +aCF +aDg aDn aEa aDt diff --git a/maps/map_files/FOP_v2_Cellblocks/Prison_Station_FOP.dmm b/maps/map_files/FOP_v2_Cellblocks/Prison_Station_FOP.dmm index 5da17a318887..ba9986948eed 100644 --- a/maps/map_files/FOP_v2_Cellblocks/Prison_Station_FOP.dmm +++ b/maps/map_files/FOP_v2_Cellblocks/Prison_Station_FOP.dmm @@ -5305,7 +5305,7 @@ /area/prison/hanger/research) "aoj" = ( /obj/docking_port/stationary/marine_dropship/lz2{ - name = "Research Landing Zone" + name = "LZ2: Research Landing Zone" }, /turf/open/floor/plating, /area/prison/hanger/research) @@ -19201,7 +19201,7 @@ /area/prison/hanger/main) "bcF" = ( /obj/docking_port/stationary/marine_dropship/lz1{ - name = "Hangar Landing Zone" + name = "LZ1: Hangar Landing Zone" }, /turf/open/floor/plating, /area/prison/hanger/main) diff --git a/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm b/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm index 7238b5ab66cb..bffe3f990722 100644 --- a/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm +++ b/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm @@ -6510,7 +6510,7 @@ /area/fiorina/station/disco) "dYp" = ( /obj/docking_port/stationary/marine_dropship/lz1{ - name = "Hangar Landing Zone" + name = "LZ1: Hangar Landing Zone" }, /turf/open/floor/plating/prison, /area/fiorina/lz/near_lzI) diff --git a/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm b/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm index 73bac536752f..485760ebc2af 100644 --- a/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm +++ b/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm @@ -34904,7 +34904,7 @@ /area/ice_colony/surface/hangar/alpha) "sto" = ( /obj/docking_port/stationary/marine_dropship/lz1{ - name = "Hangar Landing Zone" + name = "LZ1: Hangar Landing Zone" }, /turf/open/floor/plating, /area/ice_colony/exterior/surface/landing_pad) diff --git a/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm b/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm index f5e2f597ef24..60847e12bae1 100644 --- a/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm +++ b/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm @@ -17375,7 +17375,7 @@ /area/shiva/interior/caves/s_lz2) "mlX" = ( /obj/docking_port/stationary/marine_dropship/lz2{ - name = "Research Landing Zone" + name = "LZ2: Research Landing Zone" }, /turf/open/floor/plating, /area/shiva/exterior/lz2_fortress) diff --git a/maps/map_files/Kutjevo/Kutjevo.dmm b/maps/map_files/Kutjevo/Kutjevo.dmm index eb5f1afabaed..2e1ebb3ea204 100644 --- a/maps/map_files/Kutjevo/Kutjevo.dmm +++ b/maps/map_files/Kutjevo/Kutjevo.dmm @@ -62,6 +62,10 @@ "adD" = ( /turf/open/floor/almayer/research/containment/floor1, /area/kutjevo/exterior/lz_dunes) +"adG" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/turf/open/auto_turf/sand/layer0, +/area/kutjevo/interior/colony_South) "adX" = ( /obj/item/stack/sheet/wood, /obj/structure/machinery/light, @@ -362,6 +366,15 @@ dir = 4 }, /area/kutjevo/interior/complex/Northwest_Dorms) +"axi" = ( +/obj/structure/flora/bush/ausbushes/grassybush{ + pixel_x = -4; + pixel_y = 10 + }, +/turf/open/gm/river/desert/shallow_edge{ + dir = 9 + }, +/area/kutjevo/exterior/spring) "axK" = ( /obj/item/trash/cigbutt/bcigbutt, /obj/structure/stairs/perspective/kutjevo{ @@ -563,6 +576,10 @@ }, /turf/open/auto_turf/sand/layer0, /area/kutjevo/exterior/scrubland) +"aKg" = ( +/obj/structure/tunnel, +/turf/open/auto_turf/sand/layer0, +/area/kutjevo/interior/colony_South) "aKl" = ( /obj/structure/machinery/landinglight/ds1{ dir = 1 @@ -679,6 +696,13 @@ icon = 'icons/turf/floors/desert_water_toxic.dmi' }, /area/kutjevo/interior/oob) +"aXU" = ( +/obj/structure/barricade/wooden{ + dir = 1; + pixel_y = 13 + }, +/turf/open/desert/desert_shore/shore_edge1, +/area/kutjevo/exterior/spring) "aXV" = ( /obj/structure/machinery/colony_floodlight_switch, /turf/closed/wall/kutjevo/colony/reinforced, @@ -964,7 +988,7 @@ "bsq" = ( /obj/structure/tunnel, /turf/open/auto_turf/sand/layer0, -/area/kutjevo/interior/colony_central) +/area/kutjevo/interior/colony_north) "bsw" = ( /obj/structure/platform/kutjevo/smooth{ dir = 8 @@ -1958,6 +1982,14 @@ }, /turf/open/asphalt/cement_sunbleached, /area/kutjevo/interior/power) +"cKY" = ( +/obj/structure/prop/brazier/frame/full/campfire, +/obj/item/tool/match/paper{ + pixel_y = -2; + pixel_x = -11 + }, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "cLn" = ( /obj/structure/stairs/perspective/kutjevo{ dir = 1; @@ -2286,6 +2318,11 @@ }, /turf/open/floor/plating/kutjevo, /area/kutjevo/interior/complex/botany) +"dcC" = ( +/turf/open/desert/desert_shore/shore_edge1{ + dir = 1 + }, +/area/kutjevo/exterior/spring) "ddi" = ( /obj/structure/platform/kutjevo, /obj/structure/blocker/invisible_wall, @@ -2418,6 +2455,11 @@ dir = 10 }, /area/kutjevo/interior/colony_South/power2) +"dnd" = ( +/turf/open/gm/river/desert/shallow_edge{ + dir = 8 + }, +/area/kutjevo/exterior/spring) "dnl" = ( /obj/structure/platform/kutjevo/rock, /turf/open/auto_turf/sand/layer1, @@ -2676,6 +2718,15 @@ dir = 8 }, /area/kutjevo/exterior/runoff_river) +"dBt" = ( +/obj/structure/flora/bush/ausbushes/grassybush{ + pixel_x = -8; + pixel_y = 10 + }, +/turf/open/gm/river/desert/shallow_edge{ + dir = 5 + }, +/area/kutjevo/exterior/spring) "dBO" = ( /obj/structure/ladder, /obj/structure/blocker/invisible_wall, @@ -2744,6 +2795,12 @@ }, /turf/open/auto_turf/sand/layer0, /area/kutjevo/interior/colony_South) +"dGi" = ( +/obj/structure/flora/grass/tallgrass/desert/corner{ + dir = 1 + }, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "dGx" = ( /obj/structure/window/framed/kutjevo, /turf/open/floor/kutjevo/tan, @@ -2867,6 +2924,11 @@ /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /turf/open/auto_turf/sand/layer0, /area/kutjevo/interior/colony_north) +"dOj" = ( +/turf/open/gm/river/desert/shallow_corner{ + dir = 1 + }, +/area/kutjevo/exterior/spring) "dOJ" = ( /obj/structure/barricade/deployable, /turf/open/floor/kutjevo/colors/purple/edge, @@ -2957,6 +3019,10 @@ }, /turf/open/gm/river/desert/shallow, /area/kutjevo/exterior/runoff_river) +"dUc" = ( +/obj/structure/flora/grass/tallgrass/desert, +/turf/open/auto_turf/sand/layer2, +/area/kutjevo/exterior/spring) "dUy" = ( /obj/structure/platform/kutjevo/smooth, /turf/open/floor/kutjevo/multi_tiles{ @@ -3046,6 +3112,15 @@ /obj/structure/blocker/invisible_wall, /turf/open/floor/plating/kutjevo, /area/kutjevo/exterior/runoff_dunes) +"eaT" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/interior/colony_South) +"ebv" = ( +/turf/open/desert/desert_shore/shore_corner2{ + dir = 8 + }, +/area/kutjevo/exterior/spring) "ebB" = ( /turf/open/auto_turf/sand/layer1, /area/kutjevo/interior/colony_S_East) @@ -3427,6 +3502,9 @@ "evZ" = ( /turf/open/floor/almayer/research/containment/floor2, /area/kutjevo/interior/power) +"ewl" = ( +/turf/open/desert/desert_shore/desert_shore1, +/area/kutjevo/exterior/spring) "ewF" = ( /obj/item/phone{ pixel_x = 1; @@ -3548,6 +3626,20 @@ }, /turf/open/floor/kutjevo/grey/plate, /area/kutjevo/interior/construction) +"eCE" = ( +/obj/item/clipboard{ + pixel_y = 4; + pixel_x = -4 + }, +/obj/item/tool/pen{ + name = "stained pen"; + desc = "It's a seemingly normal pen... aside from the faint red fingerprints on the side..."; + pixel_x = 2; + pixel_y = 10 + }, +/obj/item/paper/crumpled/bloody, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "eCY" = ( /obj/structure/machinery/cryo_cell, /turf/open/floor/kutjevo/grey/plate, @@ -3604,6 +3696,10 @@ "eHX" = ( /turf/open/auto_turf/sand/layer0, /area/kutjevo/exterior/telecomm/lz1_south) +"eIq" = ( +/obj/item/tool/hatchet, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "eIL" = ( /turf/open/floor/kutjevo/colors/cyan/edge{ dir = 4 @@ -3859,6 +3955,9 @@ dir = 4 }, /area/kutjevo/interior/colony_South/power2) +"eVR" = ( +/turf/open/gm/river/desert/deep, +/area/kutjevo/exterior/spring) "eWP" = ( /obj/effect/landmark/corpsespawner/colonist/kutjevo, /turf/open/floor/kutjevo/multi_tiles, @@ -3943,6 +4042,10 @@ icon = 'icons/turf/floors/desert_water_toxic.dmi' }, /area/kutjevo/interior/power) +"fdH" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/auto_turf/sand/layer0, +/area/kutjevo/exterior/spring) "fdS" = ( /obj/effect/decal/cleanable/blood/xeno{ icon_state = "xgib1" @@ -4114,6 +4217,10 @@ dir = 4 }, /area/kutjevo/interior/construction) +"fne" = ( +/obj/item/trash/barcardine, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "foE" = ( /obj/structure/surface/table/reinforced/prison, /obj/structure/barricade/handrail/kutjevo{ @@ -4411,6 +4518,12 @@ }, /turf/open/floor/plating/kutjevo, /area/kutjevo/interior/colony_South/power2) +"fMB" = ( +/obj/structure/flora/grass/tallgrass/desert/corner{ + dir = 5 + }, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "fNc" = ( /obj/structure/platform/kutjevo{ dir = 4 @@ -4589,6 +4702,14 @@ /obj/structure/prop/dam/gravestone, /turf/open/auto_turf/sand/layer0, /area/kutjevo/interior/colony_N_East) +"fYr" = ( +/obj/structure/barricade/wooden{ + desc = "This barricade is heavily reinforced. Nothing short of blasting it open seems like it'll do the trick, that or melting the breams supporting it..."; + dir = 8; + health = 25000 + }, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "fYE" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/computer/shuttle/dropship/flight/lz2, @@ -4711,6 +4832,10 @@ dir = 8 }, /area/kutjevo/interior/power/comms) +"giY" = ( +/obj/item/device/flashlight/lamp/tripod/grey, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "giZ" = ( /obj/structure/machinery/cm_vending/sorted/medical/wall_med/limited{ pixel_y = 28 @@ -4762,7 +4887,7 @@ /area/kutjevo/interior/oob) "gnj" = ( /obj/docking_port/stationary/marine_dropship/lz1{ - name = "Dunes Landing Zone" + name = "LZ1: Dunes Landing Zone" }, /turf/open/floor/plating/kutjevo, /area/shuttle/drop1/kutjevo) @@ -4782,6 +4907,13 @@ dir = 10 }, /area/kutjevo/exterior/runoff_dunes) +"gok" = ( +/obj/structure/flora/bush/desert{ + icon_state = "tree_2"; + pixel_y = 14 + }, +/turf/open/desert/desert_shore/desert_shore1, +/area/kutjevo/exterior/spring) "goT" = ( /turf/closed/wall/kutjevo/rock, /area/kutjevo/exterior/runoff_dunes) @@ -4813,6 +4945,15 @@ /obj/item/clipboard, /turf/open/floor/kutjevo/colors/green, /area/kutjevo/interior/complex/botany) +"gsn" = ( +/obj/structure/flora/bush/desert{ + icon_state = "tree_2"; + pixel_y = 14 + }, +/turf/open/desert/desert_shore/desert_shore1{ + dir = 1 + }, +/area/kutjevo/exterior/spring) "gsq" = ( /obj/structure/filingcabinet, /obj/structure/window/reinforced/tinted{ @@ -4956,6 +5097,13 @@ "gBl" = ( /turf/open/auto_turf/sand/layer0, /area/kutjevo/interior/oob) +"gBu" = ( +/obj/structure/barricade/wooden{ + dir = 4; + pixel_y = 4 + }, +/turf/open/auto_turf/sand/layer2, +/area/kutjevo/exterior/spring) "gBI" = ( /obj/effect/decal/cleanable/blood/oil, /obj/structure/machinery/door/poddoor/shutters/almayer/open{ @@ -5053,6 +5201,9 @@ dir = 8 }, /area/kutjevo/interior/complex/Northwest_Flight_Control) +"gFA" = ( +/turf/open/desert/desert_shore/shore_edge1, +/area/kutjevo/exterior/spring) "gHh" = ( /obj/structure/flora/grass/desert/lightgrass_9, /turf/open/auto_turf/sand/layer0, @@ -5072,6 +5223,15 @@ /obj/effect/landmark/objective_landmark/close, /turf/open/floor/kutjevo/grey/plate, /area/kutjevo/interior/foremans_office) +"gHV" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) +"gJx" = ( +/turf/open/gm/river/desert/shallow_corner{ + dir = 4 + }, +/area/kutjevo/exterior/spring) "gJB" = ( /obj/structure/stairs/perspective/kutjevo{ dir = 8; @@ -5720,6 +5880,11 @@ }, /turf/open/floor/kutjevo/plate, /area/kutjevo/interior/colony_central) +"hET" = ( +/turf/open/gm/river/desert/shallow_edge{ + dir = 10 + }, +/area/kutjevo/exterior/spring) "hFi" = ( /obj/structure/barricade/wooden{ dir = 1; @@ -5848,6 +6013,10 @@ icon_state = "platingdmg3" }, /area/kutjevo/interior/complex/Northwest_Dorms) +"hRG" = ( +/obj/structure/prop/dam/boulder/boulder2, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "hSo" = ( /obj/structure/flora/grass/tallgrass/desert/corner{ dir = 10 @@ -5961,6 +6130,11 @@ }, /turf/open/floor/plating/kutjevo, /area/kutjevo/exterior/construction) +"hZx" = ( +/obj/structure/flora/grass/tallgrass/desert, +/obj/structure/flora/grass/tallgrass/desert, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "iaj" = ( /turf/closed/wall/kutjevo/rock, /area/kutjevo/exterior/lz_river) @@ -6108,6 +6282,12 @@ }, /turf/open/floor/plating/kutjevo, /area/kutjevo/interior/complex/med/triage) +"irb" = ( +/obj/structure/flora/grass/tallgrass/desert/corner{ + dir = 8 + }, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "ird" = ( /obj/structure/blocker/invisible_wall, /obj/structure/platform/kutjevo{ @@ -6381,6 +6561,9 @@ /obj/item/storage/box/trackimp, /turf/open/floor/kutjevo/tan, /area/kutjevo/interior/complex/botany/east_tech) +"iNI" = ( +/turf/open/auto_turf/sand/layer0, +/area/kutjevo/exterior/spring) "iNY" = ( /obj/structure/barricade/wooden{ dir = 8 @@ -6541,6 +6724,13 @@ }, /turf/open/auto_turf/sand/layer0, /area/kutjevo/exterior/complex_border/med_rec) +"jac" = ( +/obj/item/device/radio{ + name = "damp shortwave radio"; + desc = "A regular shortwave radio, this one has experienced minor water damage but is still functional." + }, +/turf/open/desert/desert_shore/shore_corner2, +/area/kutjevo/exterior/spring) "jav" = ( /obj/structure/closet/secure_closet/engineering_welding, /obj/item/ammo_box/magazine/nailgun, @@ -6712,6 +6902,16 @@ /obj/item/stack/sheet/wood, /turf/open/floor/kutjevo/colors, /area/kutjevo/interior/power/comms) +"jnD" = ( +/obj/structure/barricade/wooden{ + dir = 4 + }, +/obj/structure/barricade/wooden{ + dir = 1; + pixel_y = 13 + }, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "jnS" = ( /obj/structure/window/framed/kutjevo, /turf/open/floor/plating/kutjevo, @@ -7282,6 +7482,10 @@ /obj/structure/platform/kutjevo, /turf/open/floor/kutjevo/tan, /area/kutjevo/interior/colony_north) +"kgx" = ( +/obj/structure/flora/grass/tallgrass/desert, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "khI" = ( /obj/structure/window/framed/kutjevo/reinforced/hull, /turf/open/floor/kutjevo/grey/plate, @@ -7668,6 +7872,9 @@ "kDS" = ( /turf/open/floor/kutjevo/tan, /area/kutjevo/interior/complex/botany) +"kEh" = ( +/turf/open/gm/river/desert/shallow_edge, +/area/kutjevo/exterior/spring) "kEG" = ( /obj/structure/sign/poster{ pixel_y = -32 @@ -7724,6 +7931,10 @@ "kIn" = ( /turf/open/auto_turf/sand/layer2, /area/kutjevo/exterior/scrubland) +"kIQ" = ( +/obj/structure/prop/dam/large_boulder/boulder2, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "kKb" = ( /obj/structure/barricade/wooden{ dir = 8 @@ -7837,10 +8048,20 @@ }, /turf/open/floor/plating/kutjevo, /area/kutjevo/interior/colony_South/power2) +"kQa" = ( +/obj/structure/bed/bedroll, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "kQo" = ( /obj/structure/girder, /turf/open/auto_turf/sand/layer1, /area/kutjevo/interior/construction) +"kQD" = ( +/turf/open/desert/desert_shore/desert_shore1{ + dir = 8 + }, +/area/kutjevo/exterior/spring) "kQU" = ( /obj/structure/platform/kutjevo{ dir = 8 @@ -8099,7 +8320,7 @@ /area/kutjevo/interior/power/comms) "lkY" = ( /obj/docking_port/stationary/marine_dropship/lz2{ - name = "NW Colony Landing Zone" + name = "LZ2: NW Colony Landing Zone" }, /turf/open/floor/plating/kutjevo, /area/shuttle/drop2/kutjevo) @@ -8361,6 +8582,11 @@ /obj/item/stack/sheet/wood, /turf/open/floor/kutjevo/colors/purple, /area/kutjevo/interior/complex/med/locks) +"lEf" = ( +/turf/open/gm/river/desert/shallow_edge{ + dir = 6 + }, +/area/kutjevo/exterior/spring) "lEA" = ( /turf/closed/wall/kutjevo/colony/reinforced, /area/kutjevo/interior/colony_central) @@ -8631,11 +8857,9 @@ /turf/open/floor/almayer/research/containment/floor2, /area/kutjevo/interior/complex/med/auto_doc) "lZT" = ( -/obj/structure/tunnel{ - id = "hole1" - }, -/turf/open/auto_turf/sand/layer2, -/area/kutjevo/interior/colony_north) +/obj/structure/tunnel, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/construction) "lZZ" = ( /obj/structure/platform_decoration/kutjevo{ dir = 4 @@ -8682,6 +8906,11 @@ "mbS" = ( /turf/closed/wall/kutjevo/colony, /area/kutjevo/interior/complex/botany) +"mct" = ( +/turf/open/gm/river/desert/shallow_corner{ + dir = 8 + }, +/area/kutjevo/exterior/spring) "mcv" = ( /obj/structure/window/framed/kutjevo/reinforced/hull, /obj/structure/blocker/invisible_wall, @@ -8977,6 +9206,10 @@ dir = 6 }, /area/kutjevo/interior/complex/med/locks) +"mvX" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "mwh" = ( /obj/structure/window/framed/kutjevo/reinforced, /turf/open/floor/kutjevo/colors/green/tile, @@ -8996,6 +9229,11 @@ /obj/item/frame/rack, /turf/open/floor/kutjevo/tan/multi_tiles, /area/kutjevo/interior/complex/botany/east_tech) +"myk" = ( +/turf/open/gm/river/desert/shallow_edge{ + dir = 4 + }, +/area/kutjevo/exterior/spring) "mzn" = ( /obj/structure/platform/kutjevo{ dir = 1 @@ -9015,6 +9253,18 @@ /obj/item/storage/pill_bottle/dexalin/skillless, /turf/open/floor/kutjevo/grey/plate, /area/kutjevo/interior/complex/med) +"mAD" = ( +/obj/structure/barricade/wooden{ + dir = 1; + pixel_y = 13 + }, +/obj/structure/barricade/wooden{ + desc = "This barricade is heavily reinforced. Nothing short of blasting it open seems like it'll do the trick, that or melting the breams supporting it..."; + dir = 8; + health = 25000 + }, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "mAH" = ( /obj/effect/decal/cleanable/blood, /obj/effect/decal/kutjevo_decals/catwalk, @@ -9308,6 +9558,11 @@ color = "#990000" }, /area/kutjevo/interior/oob) +"mNv" = ( +/turf/open/gm/river/desert/shallow_edge{ + dir = 5 + }, +/area/kutjevo/exterior/spring) "mNM" = ( /turf/closed/wall/kutjevo/colony, /area/kutjevo/exterior/runoff_bridge) @@ -9543,11 +9798,9 @@ /turf/open/desert/desert_shore/shore_corner2, /area/kutjevo/exterior/runoff_river) "niP" = ( -/obj/structure/tunnel{ - id = "hole3" - }, +/obj/structure/tunnel, /turf/open/auto_turf/sand/layer0, -/area/kutjevo/exterior/complex_border/botany_medical_cave) +/area/kutjevo/exterior/runoff_river) "niT" = ( /obj/structure/flora/grass/tallgrass/desert/corner{ dir = 1 @@ -10083,6 +10336,12 @@ /obj/structure/platform/kutjevo/rock, /turf/open/auto_turf/sand/layer0, /area/kutjevo/interior/colony_central) +"nPq" = ( +/obj/structure/flora/grass/tallgrass/desert/corner{ + dir = 6 + }, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "nPs" = ( /obj/structure/blocker/invisible_wall, /turf/open/auto_turf/sand/layer1, @@ -10096,6 +10355,11 @@ /obj/structure/machinery/iv_drip, /turf/open/floor/kutjevo/colors/cyan, /area/kutjevo/interior/complex/med/triage) +"nPX" = ( +/turf/open/gm/river/desert/shallow_edge{ + dir = 9 + }, +/area/kutjevo/exterior/spring) "nQc" = ( /obj/structure/platform_decoration/kutjevo/rock, /obj/structure/platform_decoration/kutjevo/rock{ @@ -10234,6 +10498,12 @@ /obj/effect/decal/cleanable/blood/splatter, /turf/open/floor/kutjevo/tan, /area/kutjevo/interior/complex/med/operating) +"nZC" = ( +/obj/structure/bed/bedroll, +/obj/effect/landmark/corpsespawner/colonist/kutjevo, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/auto_turf/sand/layer0, +/area/kutjevo/exterior/spring) "nZK" = ( /turf/open/floor/kutjevo/tan, /area/kutjevo/interior/complex/Northwest_Flight_Control) @@ -10251,6 +10521,12 @@ }, /turf/open/floor/kutjevo/tan/alt_inner_edge, /area/kutjevo/interior/complex/Northwest_Flight_Control) +"obv" = ( +/obj/structure/flora/grass/tallgrass/desert/corner{ + dir = 10 + }, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "oca" = ( /obj/structure/surface/table/almayer, /obj/item/device/flashlight/lamp, @@ -10787,6 +11063,10 @@ /obj/structure/filingcabinet/chestdrawer, /turf/open/floor/carpet, /area/kutjevo/interior/oob) +"oQb" = ( +/obj/structure/flora/grass/tallgrass/desert/corner, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "oQc" = ( /turf/closed/wall/kutjevo/colony, /area/kutjevo/interior/power_pt2_electric_boogaloo) @@ -10990,6 +11270,13 @@ icon_state = "0,5" }, /area/kutjevo/interior/construction) +"pfK" = ( +/obj/structure/barricade/wooden{ + dir = 1; + pixel_y = 13 + }, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "pfR" = ( /obj/structure/platform/kutjevo/rock{ dir = 4 @@ -11116,6 +11403,15 @@ "pmv" = ( /turf/closed/wall/kutjevo/colony/reinforced, /area/kutjevo/exterior/complex_border/med_rec) +"pmD" = ( +/obj/structure/flora/bush/ausbushes/grassybush{ + pixel_x = -6; + pixel_y = 10 + }, +/turf/open/gm/river/desert/shallow_edge{ + dir = 6 + }, +/area/kutjevo/exterior/spring) "pmR" = ( /obj/structure/largecrate/supply/supplies/flares, /turf/open/auto_turf/sand/layer1, @@ -11686,6 +11982,10 @@ }, /turf/open/floor/kutjevo/colors/cyan/inner_corner, /area/kutjevo/interior/complex/med/triage) +"pVH" = ( +/obj/structure/tunnel, +/turf/open/auto_turf/sand/layer2, +/area/kutjevo/exterior/runoff_river) "pWe" = ( /obj/structure/platform_decoration/kutjevo/rock{ dir = 1 @@ -11733,6 +12033,11 @@ dir = 4 }, /area/kutjevo/interior/complex/botany/east_tech) +"qaU" = ( +/turf/open/desert/desert_shore/shore_corner2{ + dir = 1 + }, +/area/kutjevo/exterior/spring) "qaY" = ( /obj/structure/blocker/invisible_wall, /turf/open/desert/desert_shore/shore_corner2{ @@ -12102,6 +12407,12 @@ /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /turf/open/auto_turf/sand/layer0, /area/kutjevo/interior/colony_S_East) +"qFh" = ( +/obj/structure/flora/grass/tallgrass/desert/corner{ + dir = 4 + }, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "qFU" = ( /turf/open/desert/desert_shore/shore_corner2{ dir = 8 @@ -12195,11 +12506,9 @@ }, /area/kutjevo/interior/oob) "qLV" = ( -/obj/structure/tunnel{ - id = "hole2" - }, -/turf/open/auto_turf/sand/layer1, -/area/kutjevo/exterior/stonyfields) +/obj/structure/tunnel, +/turf/open/auto_turf/sand/layer0, +/area/kutjevo/interior/colony_S_East) "qMC" = ( /obj/structure/machinery/light{ dir = 4 @@ -12493,6 +12802,10 @@ /obj/structure/surface/table/reinforced/prison, /turf/open/floor/kutjevo/colors/red, /area/kutjevo/interior/complex/botany) +"riT" = ( +/obj/item/stack/sheet/wood/small_stack, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "rjS" = ( /obj/structure/blocker/invisible_wall, /obj/structure/platform/kutjevo{ @@ -12661,6 +12974,10 @@ /obj/structure/window/framed/kutjevo/reinforced/hull, /turf/open/floor/plating/kutjevo, /area/kutjevo/interior/power) +"rwC" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/turf/open/auto_turf/sand/layer2, +/area/kutjevo/interior/colony_South) "rwL" = ( /obj/item/frame/table/almayer, /turf/open/floor/kutjevo/tan, @@ -12739,6 +13056,10 @@ "rCp" = ( /turf/open/desert/desert_shore/desert_shore1, /area/kutjevo/exterior/runoff_bridge) +"rDe" = ( +/obj/structure/prop/dam/boulder/boulder2, +/turf/open/auto_turf/sand/layer0, +/area/kutjevo/exterior/spring) "rDO" = ( /obj/effect/decal/medical_decals{ icon_state = "triagedecalbottomright" @@ -12998,6 +13319,13 @@ }, /turf/open/auto_turf/sand/layer0, /area/kutjevo/exterior/complex_border/botany_medical_cave) +"rUE" = ( +/obj/structure/barricade/wooden{ + dir = 4; + pixel_y = 4 + }, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "rUM" = ( /obj/structure/blocker/forcefield/multitile_vehicles, /obj/structure/girder, @@ -13212,6 +13540,9 @@ /obj/effect/spawner/random/tool, /turf/open/auto_turf/sand/layer0, /area/kutjevo/interior/construction) +"skx" = ( +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "slb" = ( /obj/structure/machinery/light{ dir = 4 @@ -13299,6 +13630,10 @@ }, /turf/open/auto_turf/sand/layer1, /area/kutjevo/exterior/scrubland) +"soL" = ( +/obj/item/stack/sheet/wood/small_stack, +/turf/open/auto_turf/sand/layer0, +/area/kutjevo/exterior/spring) "soP" = ( /obj/structure/platform/kutjevo/smooth{ dir = 1 @@ -13544,6 +13879,11 @@ }, /turf/open/floor/kutjevo/colors, /area/kutjevo/interior/complex/botany) +"sGS" = ( +/turf/open/desert/desert_shore/shore_edge1{ + dir = 8 + }, +/area/kutjevo/exterior/spring) "sHg" = ( /obj/structure/bed/chair{ dir = 4 @@ -13859,6 +14199,12 @@ "tax" = ( /turf/open/gm/river/desert/shallow_edge, /area/kutjevo/exterior/runoff_dunes) +"tbx" = ( +/obj/structure/flora/grass/tallgrass/desert/corner{ + dir = 9 + }, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "tdC" = ( /obj/structure/bed/chair{ dir = 4 @@ -14435,18 +14781,6 @@ }, /turf/open/floor/plating/kutjevo, /area/kutjevo/interior/complex/botany) -"tRD" = ( -/obj/structure/platform_decoration/kutjevo{ - dir = 8 - }, -/obj/structure/platform_decoration/kutjevo{ - dir = 8 - }, -/obj/structure/platform_decoration/kutjevo{ - dir = 8 - }, -/turf/closed/wall/kutjevo/rock, -/area/kutjevo/interior/oob) "tRG" = ( /obj/structure/platform/kutjevo/smooth{ dir = 1; @@ -14543,6 +14877,11 @@ /obj/structure/blocker/invisible_wall, /turf/open/gm/river/desert/deep, /area/kutjevo/interior/oob) +"uaz" = ( +/turf/open/desert/desert_shore/desert_shore1{ + dir = 1 + }, +/area/kutjevo/exterior/spring) "ubm" = ( /obj/structure/machinery/light{ dir = 8 @@ -14570,6 +14909,11 @@ /obj/structure/platform/kutjevo/rock, /turf/open/auto_turf/sand/layer0, /area/kutjevo/interior/colony_N_East) +"ueM" = ( +/turf/open/desert/desert_shore/shore_corner2{ + dir = 4 + }, +/area/kutjevo/exterior/spring) "ueO" = ( /obj/structure/prop/dam/boulder/boulder1, /turf/open/auto_turf/sand/layer0, @@ -14911,6 +15255,9 @@ }, /turf/open/auto_turf/sand/layer0, /area/kutjevo/exterior/complex_border/med_rec) +"uzJ" = ( +/turf/open/auto_turf/sand/layer2, +/area/kutjevo/exterior/spring) "uAh" = ( /obj/structure/platform/kutjevo/smooth, /turf/open/floor/kutjevo/multi_tiles, @@ -15162,6 +15509,10 @@ icon = 'icons/turf/floors/desert_water_toxic.dmi' }, /area/kutjevo/interior/oob) +"uNW" = ( +/obj/structure/prop/dam/boulder/boulder2, +/turf/open/auto_turf/sand/layer0, +/area/kutjevo/interior/colony_South) "uNZ" = ( /obj/structure/machinery/colony_floodlight, /obj/structure/platform/kutjevo/smooth{ @@ -15436,6 +15787,10 @@ /obj/structure/machinery/vending/snack, /turf/open/floor/kutjevo/colors/red, /area/kutjevo/interior/complex/botany) +"vdK" = ( +/obj/item/stack/sheet/wood/small_stack, +/turf/open/desert/desert_shore/desert_shore1, +/area/kutjevo/exterior/spring) "vdV" = ( /obj/structure/blocker/invisible_wall, /obj/structure/filtration/machine_96x96/indestructible{ @@ -15510,6 +15865,10 @@ /obj/effect/landmark/objective_landmark/medium, /turf/open/floor/kutjevo/colors/green, /area/kutjevo/interior/complex/botany) +"vhC" = ( +/obj/structure/flora/grass/desert/lightgrass_11, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/spring) "vhQ" = ( /obj/structure/platform_decoration/kutjevo/rock{ dir = 8 @@ -15701,11 +16060,9 @@ /turf/open/floor/kutjevo/multi_tiles, /area/kutjevo/exterior/runoff_bridge) "vzy" = ( -/obj/structure/tunnel{ - id = "hole4" - }, -/turf/open/auto_turf/sand/layer0, -/area/kutjevo/exterior/scrubland) +/obj/structure/tunnel, +/turf/open/gm/dirtgrassborder2, +/area/kutjevo/exterior/complex_border/med_park) "vzC" = ( /obj/structure/platform/kutjevo{ dir = 1 @@ -16328,6 +16685,16 @@ }, /turf/open/floor/kutjevo/multi_tiles, /area/kutjevo/exterior/Northwest_Colony) +"wrO" = ( +/turf/open/gm/river/desert/shallow_edge{ + dir = 1 + }, +/area/kutjevo/exterior/spring) +"wrV" = ( +/turf/open/desert/desert_shore/desert_shore1{ + dir = 4 + }, +/area/kutjevo/exterior/spring) "wsf" = ( /obj/structure/platform_decoration/kutjevo/rock{ dir = 8 @@ -16355,6 +16722,13 @@ dir = 1 }, /area/kutjevo/interior/foremans_office) +"wtk" = ( +/obj/structure/barricade/wooden{ + dir = 4; + pixel_y = 4 + }, +/turf/open/auto_turf/sand/layer0, +/area/kutjevo/exterior/spring) "wtu" = ( /obj/structure/platform_decoration/kutjevo{ dir = 4 @@ -17026,6 +17400,11 @@ dir = 8 }, /area/kutjevo/interior/complex/med/operating) +"xuN" = ( +/turf/open/desert/desert_shore/shore_edge1{ + dir = 4 + }, +/area/kutjevo/exterior/spring) "xuY" = ( /obj/structure/barricade/wooden, /turf/open/floor/kutjevo/multi_tiles{ @@ -17046,6 +17425,9 @@ /obj/structure/window/framed/kutjevo/reinforced, /turf/open/floor/plating/kutjevo, /area/kutjevo/interior/complex/med/pano) +"xxf" = ( +/turf/open/gm/river/desert/shallow_corner, +/area/kutjevo/exterior/spring) "xxz" = ( /obj/structure/prop/dam/gravestone{ icon_state = "gravestone3" @@ -17499,6 +17881,15 @@ /obj/effect/landmark/objective_landmark/close, /turf/open/floor/kutjevo/tan/alt_inner_edge, /area/kutjevo/interior/complex/Northwest_Flight_Control) +"yic" = ( +/obj/structure/flora/bush/desert{ + icon_state = "tree_2"; + pixel_y = 14 + }, +/turf/open/desert/desert_shore/desert_shore1{ + dir = 4 + }, +/area/kutjevo/exterior/spring) "yir" = ( /turf/open/floor/kutjevo/colors/orange, /area/kutjevo/interior/complex/botany/east) @@ -27683,7 +28074,7 @@ sYd bXl bXl bXl -vzy +bXl sYd bXl sYd @@ -31179,7 +31570,7 @@ bEp bEp bEp bEp -tKY +niP dic dic dic @@ -33244,7 +33635,7 @@ xJg xJg xJg xJg -qLV +xJg jfQ jfQ xJg @@ -34528,7 +34919,7 @@ jhS jhS jhS wff -niP +wff wff wff jhS @@ -35156,7 +35547,7 @@ dxF mxB mxB mxB -quy +vzy tUm wYp bGV @@ -35827,7 +36218,7 @@ dxF dxF dxF dxF -tRD +dxF dxF dxF dxF @@ -37402,7 +37793,7 @@ nKh nKh nKh wtH -sbX +pVH mtS fPH dTM @@ -42345,7 +42736,7 @@ bkR wTt bkR bEH -lZT +bEH hUk hUk hUk @@ -42692,7 +43083,7 @@ hUk hUk hUk hUk -xWK +lZT nlA xWK xWK @@ -43258,11 +43649,11 @@ bpj bpj bpj bpj -dxF -dxF -dxF -dxF -dxF +bpj +bpj +uzJ +skx +hRG dxF dxF dxF @@ -43425,12 +43816,12 @@ bpj bpj bpj bpj -dxF -dxF -dxF -dxF -dxF -dxF +bpj +bpj +skx +skx +skx +skx dxF dxF dxF @@ -43592,14 +43983,14 @@ bpj bpj oXH bpj -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +bpj +bpj +skx +skx +skx +skx +iNI +iNI dxF dxF dxF @@ -43760,14 +44151,14 @@ npL bpj bpj bpj -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +bpj +skx +skx +skx +uzJ +skx +skx +iNI dxF dxF dxF @@ -43927,16 +44318,16 @@ npL bpj bpj bpj +bpj dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +skx +skx +skx +skx +skx +skx +skx +iNI dxF dxF dxF @@ -44098,13 +44489,13 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +hRG +skx +mvX +uzJ +skx +skx +hRG dxF dxF dxF @@ -44266,14 +44657,14 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +skx +skx +skx +skx +skx +skx +skx +iNI dxF dxF dxF @@ -44433,15 +44824,15 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +iNI +skx +skx +skx +skx +skx +skx +skx +skx dxF dxF dxF @@ -44601,15 +44992,15 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +iNI +skx +skx +uzJ +skx +skx +skx +skx +iNI dxF dxF dxF @@ -44769,14 +45160,14 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +skx +skx +skx +skx +skx +uzJ +uzJ +skx dxF dxF dxF @@ -44938,13 +45329,13 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +iNI +skx +skx +skx +mvX +skx +iNI dxF dxF dxF @@ -45107,12 +45498,12 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF +rDe +skx +skx +skx +skx +iNI dxF dxF dxF @@ -45275,12 +45666,12 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF +iNI +skx +uzJ +skx +skx +iNI dxF dxF dxF @@ -45442,12 +45833,12 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF +iNI +skx +uzJ +uzJ +skx +skx dxF dxF dxF @@ -45610,15 +46001,15 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +skx +mAD +fYr +riT +fYr +skx +skx +skx +pfK dxF dxF dxF @@ -45778,16 +46169,16 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +skx +eIq +skx +gHV +skx +uzJ +kIQ +skx +skx +skx dxF dxF dxF @@ -45945,17 +46336,17 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +giY +skx +skx +skx +mvX +skx +skx +skx +skx +kQa +vhC dxF dxF dxF @@ -46111,19 +46502,19 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +skx +uzJ +skx +skx +iNI +iNI +fdH +iNI +soL +uzJ +cKY +mvX +hRG dxF dxF dxF @@ -46277,21 +46668,21 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +hRG +skx +skx +skx +iNI +dcC +kQD +kQD +kQD +aXU +nZC +gHV +eCE +skx +fne dxF dxF dxF @@ -46416,7 +46807,7 @@ wXd wXd wXd wXd -mMH +aKg bpj npL bpj @@ -46444,21 +46835,21 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +skx +uzJ +skx +iNI +dcC +qaU +axi +dnd +hET +vdK +wtk +riT +rUE +gBu +rUE dxF dxF dxF @@ -46611,21 +47002,21 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +fMB +mvX +iNI +dcC +qaU +nPX +dOj +eVR +kEh +jac +gFA +iNI +skx +nPq +qFh dxF dxF dxF @@ -46777,23 +47168,23 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +kgx +dGi +uzJ +iNI +gsn +nPX +dOj +eVR +eVR +mct +hET +ewl +iNI +skx +oQb +kgx +dUc dxF dxF dxF @@ -46944,23 +47335,23 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +kgx +dGi +skx +iNI +uaz +wrO +eVR +eVR +eVR +eVR +kEh +gok +iNI +giY +oQb +kgx +kgx dxF dxF dxF @@ -47111,23 +47502,23 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +irb +tbx +skx +iNI +uaz +wrO +eVR +eVR +eVR +eVR +kEh +ewl +iNI +skx +oQb +kgx +kgx dxF dxF dxF @@ -47278,23 +47669,23 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +skx +skx +skx +iNI +uaz +dBt +xxf +eVR +eVR +gJx +pmD +ewl +iNI +skx +obv +dUc +kgx dxF dxF dxF @@ -47445,22 +47836,22 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +vhC +uzJ +skx +iNI +xuN +ebv +mNv +myk +myk +lEf +ueM +sGS +iNI +kIQ +skx +obv dxF dxF dxF @@ -47613,21 +48004,21 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +skx +skx +skx +iNI +xuN +wrV +wrV +yic +wrV +sGS +iNI +skx +skx +skx +skx dxF dxF dxF @@ -47780,21 +48171,21 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +skx +skx +skx +mvX +iNI +iNI +iNI +iNI +iNI +iNI +skx +uzJ +skx +skx +uzJ dxF dxF dxF @@ -47933,24 +48324,8 @@ npL bpj bpj bpj -mMH -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +bpj +gBl dxF dxF dxF @@ -47961,6 +48336,22 @@ dxF dxF dxF dxF +iNI +iNI +jnD +skx +skx +uzJ +skx +kIQ +skx +skx +skx +skx +skx +mvX +skx +hRG dxF dxF dxF @@ -48100,6 +48491,8 @@ tCm bpj bpj bpj +bpj +bpj dxF dxF dxF @@ -48109,24 +48502,22 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +rDe +iNI +uzJ +skx +riT +skx +giY +skx +skx +skx +nPq +qFh +qFh +fMB +uzJ +vhC dxF dxF dxF @@ -48266,26 +48657,10 @@ mMH bpj bpj bpj -mMH -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +bpj +bpj +bpj +bpj dxF dxF dxF @@ -48293,6 +48668,22 @@ dxF dxF dxF dxF +iNI +skx +skx +skx +skx +jnD +skx +skx +skx +skx +uzJ +oQb +dUc +kgx +dGi +skx dxF dxF dxF @@ -48339,7 +48730,7 @@ bkR bkR bkR wTt -wTt +bsq hUk hUk hUk @@ -48433,31 +48824,31 @@ wXd npL bpj bpj +bpj +bpj +bpj +bpj +mMH mMH dxF dxF dxF dxF +iNI +skx +mvX +skx +skx +iNI +iNI dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +skx +oQb +kgx +hZx dxF dxF dxF @@ -48600,21 +48991,21 @@ wXd bpj npL bpj -qOP -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +oXH +bpj +bpj +bpj +bpj +bpj +mMH dxF dxF +skx +skx +uzJ +skx +iNI +iNI dxF dxF dxF @@ -48769,18 +49160,18 @@ bpj bpj mMH dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +mMH +bpj +npL +bpj +bpj +mMH +bpj +bpj +skx +skx +skx +iNI dxF dxF dxF @@ -48937,16 +49328,16 @@ bpj dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +bpj +bpj +bpj +oXH +bpj +bpj +bpj +uzJ +skx +iNI dxF dxF dxF @@ -49105,14 +49496,14 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +bpj +bpj +bpj +bpj +bpj +bpj +skx +skx dxF dxF dxF @@ -49272,12 +49663,12 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF +mMH +bpj +bpj +npL +bpj +mMH dxF dxF dxF @@ -49441,10 +49832,10 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF +mMH +bpj +bpj +mMH dxF dxF dxF @@ -49608,11 +49999,11 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF +mMH +bpj +bpj +bpj +mMH dxF dxF dxF @@ -49713,7 +50104,7 @@ kZz feg feg feg -bsq +uiK mnT mnT mnT @@ -49775,11 +50166,11 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF +uNW +bpj +bpj +bpj +mMH dxF dxF dxF @@ -49943,10 +50334,10 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF +adG +eaT +rwC +eaT dxF dxF dxF @@ -50110,10 +50501,10 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF +mMH +oXH +bpj +bpj dxF dxF dxF @@ -50277,10 +50668,10 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF +mMH +bpj +bpj +bpj dxF dxF dxF @@ -50443,11 +50834,11 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF +mMH +bpj +bpj +bpj +mMH dxF dxF dxF @@ -50609,12 +51000,12 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF +bpj +bpj +bpj +npL +bpj +mMH dxF dxF dxF @@ -50774,13 +51165,13 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +mMH +bpj +bpj +bpj +bpj +bpj +mMH dxF dxF dxF @@ -50941,13 +51332,13 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +mMH +bpj +npL +bpj +bpj +bpj +mMH dxF dxF dxF @@ -51107,13 +51498,13 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +bpj +bpj +bpj +bpj +bpj +bpj +npL dxF dxF dxF @@ -51274,12 +51665,12 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF +bpj +bpj +oXH +bpj +bpj +bpj dxF dxF dxF @@ -51440,13 +51831,13 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +mMH +bpj +npL +bpj +bpj +bpj +bpj dxF dxF dxF @@ -51607,12 +51998,12 @@ dxF dxF dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF +mMH +bpj +bpj +bpj +bpj +mMH dxF dxF dxF @@ -51772,13 +52163,13 @@ bpj bpj dxF dxF -dxF -dxF -dxF -dxF -dxF -dxF -dxF +bpj +bpj +bpj +bpj +npL +bpj +mMH dxF dxF dxF @@ -51938,13 +52329,13 @@ bpj bpj bpj mMH -dxF -dxF -dxF -dxF -dxF -dxF -dxF +bpj +npL +bpj +bpj +bpj +bpj +bpj dxF dxF dxF @@ -52105,13 +52496,13 @@ bpj oXH bpj bpj -dxF -dxF -dxF -dxF -dxF -dxF -dxF +bpj +bpj +oXH +bpj +bpj +mMH +mMH dxF dxF dxF @@ -52272,11 +52663,11 @@ bpj bpj bpj bpj -dxF -dxF -dxF -dxF -dxF +bpj +bpj +bpj +npL +mMH dxF dxF dxF @@ -52440,9 +52831,9 @@ bpj bpj bpj mMH -dxF -dxF -dxF +bpj +bpj +bpj dxF dxF dxF @@ -53919,7 +54310,7 @@ ptY ebB ebB bOc -ptY +qLV dxF dxF dxF diff --git a/maps/map_files/Kutjevo/sprinkles/35.communications.dmm b/maps/map_files/Kutjevo/sprinkles/35.communications.dmm index 235f370b4321..bc89cfab0105 100644 --- a/maps/map_files/Kutjevo/sprinkles/35.communications.dmm +++ b/maps/map_files/Kutjevo/sprinkles/35.communications.dmm @@ -108,10 +108,6 @@ dir = 1 }, /area/template_noop) -"qI" = ( -/obj/structure/window/framed/kutjevo, -/turf/open/space/basic, -/area/template_noop) "qM" = ( /obj/structure/machinery/light, /obj/effect/decal/cleanable/blood/oil, @@ -492,7 +488,7 @@ Re EK "} (5,1,1) = {" -qI +EK wC rG LO @@ -506,7 +502,7 @@ cm YO "} (6,1,1) = {" -qI +EK rm lZ nn diff --git a/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm b/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm index 69e040e98ea2..5a4fa0fbdf91 100644 --- a/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm +++ b/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm @@ -1030,7 +1030,7 @@ /area/lv522/outdoors/colony_streets/north_east_street) "aDE" = ( /obj/docking_port/stationary/marine_dropship/lz2{ - name = "Southeast Landing Zone" + name = "LZ2: Southeast Landing Zone" }, /turf/open/floor/plating, /area/shuttle/drop2/lv522) @@ -7115,7 +7115,7 @@ /area/lv522/indoors/a_block/dorms) "dos" = ( /obj/docking_port/stationary/marine_dropship/lz1{ - name = "Southwest Landing Zone" + name = "LZ1: Southwest Landing Zone" }, /turf/open/floor/plating, /area/shuttle/drop1/lv522) @@ -42329,8 +42329,10 @@ /turf/open/floor/wood, /area/lv522/indoors/a_block/fitness/glass) "qzp" = ( -/obj/structure/machinery/door/airlock/dropship_hatch/two{ - dir = 8 +/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds2{ + id = "sh_dropship2"; + dir = 2; + name = "\improper Typhoon crew hatch" }, /turf/open/shuttle/dropship{ icon_state = "rasputin3" @@ -47136,6 +47138,16 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/lv522/indoors/lone_buildings/storage_blocks) +"shh" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds2{ + dir = 1; + id = "sh_dropship2"; + name = "\improper Typhoon crew hatch" + }, +/turf/open/shuttle/dropship{ + icon_state = "rasputin3" + }, +/area/lv522/landing_zone_forecon/UD6_Typhoon) "shm" = ( /obj/structure/machinery/vending/cola, /obj/effect/decal/cleanable/dirt, @@ -66448,7 +66460,7 @@ pRK qmM qGQ qTh -qzp +rjP qzp nfq fDg @@ -67810,8 +67822,8 @@ pUc qst qLz qVl -qzp -qzp +rjP +shh rFp sdE sIx diff --git a/maps/map_files/LV624/LV624.dmm b/maps/map_files/LV624/LV624.dmm index 3d97333ad161..9c84577bbbdd 100644 --- a/maps/map_files/LV624/LV624.dmm +++ b/maps/map_files/LV624/LV624.dmm @@ -283,6 +283,9 @@ /area/lv624/ground/caves/west_caves) "abH" = ( /obj/effect/landmark/good_item, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 8 + }, /turf/open/gm/dirt, /area/lv624/ground/caves/west_caves) "abI" = ( @@ -398,7 +401,7 @@ "aco" = ( /obj/effect/landmark/crap_item, /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, -/turf/open/gm/dirt, +/turf/open/auto_turf/strata_grass/layer1, /area/lv624/ground/caves/south_east_caves) "acp" = ( /turf/closed/wall/cult, @@ -506,7 +509,7 @@ /obj/structure/tunnel{ id = "hole1" }, -/turf/open/gm/dirt, +/turf/open/auto_turf/strata_grass/layer1, /area/lv624/ground/caves/west_caves) "acL" = ( /obj/item/tool/shovel, @@ -581,6 +584,9 @@ /area/lv624/lazarus/crashed_ship_containers) "acY" = ( /obj/effect/landmark/hunter_primary, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 10 + }, /turf/open/gm/dirt, /area/lv624/ground/caves/south_central_caves) "acZ" = ( @@ -2581,6 +2587,13 @@ /obj/structure/flora/jungle/alienplant1, /turf/open/gm/river, /area/lv624/ground/river/west_river) +"amI" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 9 + }, +/obj/structure/flora/bush/ausbushes/ausbush, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "amK" = ( /obj/effect/landmark/lv624/fog_blocker, /turf/open/gm/dirtgrassborder/grassdirt_corner2/south_east, @@ -2708,6 +2721,10 @@ icon_state = "whiteyellowcorner" }, /area/lv624/lazarus/corporate_dome) +"anM" = ( +/obj/structure/flora/bush/ausbushes/var3/sparsegrass, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_east_caves) "anP" = ( /obj/structure/flora/bush/ausbushes/ppflowers, /turf/open/gm/grass/grass1, @@ -5845,7 +5862,7 @@ /area/lv624/ground/river/west_river) "aBo" = ( /obj/docking_port/stationary/marine_dropship/lz2{ - name = "Robotics Landing Zone" + name = "LZ2: Robotics Landing Zone" }, /turf/open/floor/plating, /area/lv624/lazarus/landing_zones/lz2) @@ -7923,6 +7940,12 @@ /obj/effect/landmark/monkey_spawn, /turf/open/gm/dirtgrassborder/south, /area/lv624/ground/jungle/west_jungle) +"aIA" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/plumphelmet{ + pixel_x = 8 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) "aIB" = ( /obj/structure/closet, /turf/open/floor{ @@ -7930,6 +7953,17 @@ icon_state = "purple" }, /area/lv624/lazarus/sleep_female) +"aIE" = ( +/obj/structure/flora/bush/ausbushes/var3/stalkybush, +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 11; + pixel_y = -2; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) "aIH" = ( /obj/structure/surface/table/woodentable/poor, /obj/item/clothing/mask/cigarette/cigar, @@ -8556,7 +8590,7 @@ /area/lv624/ground/jungle/south_west_jungle) "aLz" = ( /obj/docking_port/stationary/marine_dropship/lz1{ - name = "Nexus Landing Zone" + name = "LZ1: Nexus Landing Zone" }, /turf/open/floor/plating, /area/lv624/lazarus/landing_zones/lz1) @@ -9195,12 +9229,6 @@ /obj/effect/landmark/crap_item, /obj/effect/landmark/crap_item, /obj/item/clothing/suit/armor/vest/security, -/obj/structure/machinery/door_control{ - id = "secure_inner_blast"; - name = "Secure Inner Doors"; - pixel_x = 25; - pixel_y = 5 - }, /turf/open/floor{ icon_state = "cult" }, @@ -9532,6 +9560,14 @@ icon_state = "chapel" }, /area/lv624/lazarus/chapel) +"aPM" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/obj/effect/decal/grass_overlay/grass1{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) "aPN" = ( /obj/structure/window_frame/colony/reinforced, /turf/open/floor/plating, @@ -10445,6 +10481,12 @@ /obj/item/shard, /turf/open/floor/plating, /area/lv624/lazarus/captain) +"aTy" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/barrens/north_east_barrens) "aTB" = ( /obj/structure/machinery/light/small, /turf/open/floor{ @@ -11151,32 +11193,11 @@ /obj/item/ore/silver, /turf/open/floor/greengrid, /area/lv624/lazarus/secure_storage) -"aWb" = ( -/obj/structure/machinery/door_control{ - id = "secure_inner_blast"; - name = "Secure Inner Doors"; - pixel_x = 25; - pixel_y = 5 - }, -/obj/structure/machinery/door_control{ - id = "secure_outer_blast"; - name = "Secure Outer Doors"; - pixel_x = 25; - pixel_y = -5 - }, -/turf/open/floor/greengrid, -/area/lv624/lazarus/secure_storage) "aWc" = ( /obj/structure/computerframe{ anchored = 1 }, -/obj/structure/machinery/door_control{ - id = "secure_outer_blast"; - name = "Secure Outer Doors"; - pixel_x = 25; - pixel_y = -5 - }, -/turf/open/floor/greengrid, +/turf/open/floor/plating, /area/lv624/lazarus/secure_storage) "aWd" = ( /obj/structure/machinery/cm_vending/sorted/tech/comp_storage, @@ -11294,24 +11315,7 @@ /obj/structure/flora/jungle/vines/light_1, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/south_west_jungle) -"aWu" = ( -/obj/structure/machinery/door/poddoor/almayer{ - dir = 4; - id = "secure_inner_blast"; - layer = 3.3; - name = "\improper Secure Armory Blast Door"; - unacidable = 1 - }, -/turf/open/floor/greengrid, -/area/lv624/lazarus/secure_storage) "aWv" = ( -/obj/structure/machinery/door/poddoor/almayer{ - dir = 4; - id = "secure_outer_blast"; - layer = 3.3; - name = "\improper Secure Armory Blast Door"; - unacidable = 1 - }, /turf/open/floor/plating{ icon_state = "platebotc" }, @@ -11911,6 +11915,11 @@ icon_state = "red" }, /area/lv624/lazarus/security) +"aYI" = ( +/turf/open/gm/dirt{ + icon_state = "desert0" + }, +/area/lv624/ground/caves/south_west_caves) "aYJ" = ( /obj/structure/surface/table/woodentable/fancy, /obj/item/trash/chips, @@ -12266,6 +12275,13 @@ /obj/structure/flora/bush/ausbushes/var3/fullgrass, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/east_central_jungle) +"bak" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1{ + dir = 5 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_west_caves) "bav" = ( /obj/effect/decal/cleanable/blood/gibs/xeno/up, /turf/open/gm/dirt, @@ -12344,6 +12360,29 @@ /obj/structure/flora/jungle/vines/light_2, /turf/open/gm/grass/grass2, /area/lv624/ground/jungle/west_central_jungle) +"bcb" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 6 + }, +/obj/structure/flora/bush/ausbushes/ppflowers, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) +"bcU" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = -10; + pixel_y = -2; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_east_caves) +"bdu" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_west_caves) "bdL" = ( /obj/structure/surface/table/reinforced/prison, /obj/item/stack/sheet/metal{ @@ -12414,9 +12453,21 @@ /obj/structure/machinery/colony_floodlight, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/north_east_jungle) +"bje" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) "bkG" = ( /turf/open/gm/coast/beachcorner/north_west, /area/lv624/ground/river/central_river) +"bkK" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_east_caves) "bkP" = ( /obj/structure/flora/jungle/vines/light_3, /obj/structure/blocker/forcefield/multitile_vehicles, @@ -12444,6 +12495,12 @@ /obj/structure/flora/bush/ausbushes/pointybush, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/north_west_jungle) +"bnM" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 5 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "bnX" = ( /obj/structure/flora/bush/ausbushes/reedbush, /turf/open/gm/coast/beachcorner/south_west, @@ -12476,6 +12533,10 @@ /obj/structure/flora/jungle/vines/light_1, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/north_west_jungle) +"brC" = ( +/obj/effect/landmark/objective_landmark/close, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) "bsR" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner/south_west, /area/lv624/ground/jungle/south_west_jungle) @@ -12548,6 +12609,17 @@ /obj/structure/flora/jungle/plantbot1, /turf/open/gm/grass/grass1, /area/lv624/ground/colony/south_medbay_road) +"bvj" = ( +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/east_caves) +"bvS" = ( +/obj/structure/flora/bush/ausbushes/var3/ywflowers, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_east_caves) +"bvX" = ( +/obj/structure/flora/bush/ausbushes/ppflowers, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) "bwc" = ( /turf/open/gm/coast/beachcorner2/north_east, /area/lv624/ground/barrens/west_barrens) @@ -12558,6 +12630,12 @@ /obj/structure/machinery/colony_floodlight, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/west_central_jungle) +"bxb" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 5 + }, +/turf/open/gm/dirt, +/area/lv624/ground/barrens/north_east_barrens) "byl" = ( /obj/effect/landmark/lv624/fog_blocker, /turf/open/gm/dirtgrassborder/grassdirt_corner2/south_east, @@ -12601,6 +12679,14 @@ "bBu" = ( /turf/open/gm/coast/beachcorner2/south_west, /area/lv624/ground/jungle/west_jungle) +"bBT" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/obj/effect/decal/grass_overlay/grass1{ + dir = 8 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) "bCe" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner/south_west, /area/lv624/ground/jungle/south_east_jungle) @@ -12614,6 +12700,14 @@ }, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/south_east_jungle) +"bEj" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/obj/effect/decal/grass_overlay/grass1{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/east_caves) "bEq" = ( /turf/open/gm/dirtgrassborder/north, /area/lv624/ground/barrens/south_eastern_barrens) @@ -12667,6 +12761,12 @@ /obj/effect/landmark/corpsespawner/wygoon, /turf/open/floor/wood, /area/lv624/ground/caves/north_central_caves) +"bJQ" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/structure/blocker/forcefield/multitile_vehicles, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) "bLs" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_membrane, /obj/effect/landmark/structure_spawner/setup/distress/xeno_membrane, @@ -12703,6 +12803,15 @@ }, /turf/open/gm/dirt, /area/lv624/ground/barrens/south_eastern_barrens) +"bOm" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 4; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/barrens/north_east_barrens) "bOy" = ( /obj/structure/machinery/door/airlock/almayer/engineering/colony{ dir = 1; @@ -12717,6 +12826,17 @@ }, /turf/open/gm/grass/grass2, /area/lv624/ground/jungle/north_east_jungle) +"bPE" = ( +/obj/structure/flora/bush/ausbushes/pointybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_west_caves) +"bQz" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_east_caves) "bQA" = ( /obj/structure/stairs/perspective{ color = "#b29082"; @@ -12828,6 +12948,10 @@ icon_state = "white" }, /area/lv624/lazarus/medbay) +"cdw" = ( +/obj/effect/landmark/objective_landmark/science, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) "cdF" = ( /obj/effect/landmark/nightmare{ insert_tag = "lv-centralcaves" @@ -12843,6 +12967,11 @@ "cfD" = ( /turf/closed/wall/r_wall/unmeltable, /area/lv624/lazarus/quartstorage/outdoors) +"cfL" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/turf/open/gm/grass/grass1/weedable, +/area/lv624/ground/caves/north_east_caves) "cfN" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner/south_east, /area/lv624/ground/jungle/north_jungle) @@ -12885,6 +13014,16 @@ /obj/effect/landmark/structure_spawner/xvx_hive/xeno_core, /turf/open/gm/dirt, /area/lv624/ground/caves/west_caves) +"chi" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = -10; + pixel_y = -2; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) "cij" = ( /obj/structure/flora/jungle/vines/heavy, /turf/open/gm/dirtgrassborder/grassdirt_corner2/north_east, @@ -12914,6 +13053,13 @@ }, /turf/open/floor/sandstone/runed, /area/lv624/ground/caves/sand_temple) +"clO" = ( +/obj/effect/landmark/crap_item, +/obj/effect/decal/grass_overlay/grass1{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "cmf" = ( /obj/structure/flora/jungle/planttop1, /turf/open/gm/grass/grass1, @@ -12936,6 +13082,12 @@ icon_state = "squareswood" }, /area/lv624/ground/caves/sand_temple) +"cop" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/east_caves) "cpQ" = ( /turf/open/gm/dirtgrassborder/north, /area/lv624/ground/caves/sand_temple) @@ -12954,6 +13106,14 @@ /obj/structure/flora/jungle/vines/light_1, /turf/closed/wall/strata_ice/jungle, /area/lv624/ground/jungle/north_west_jungle) +"cqC" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/obj/effect/decal/grass_overlay/grass1{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) "cqE" = ( /obj/structure/barricade/wooden, /obj/structure/flora/jungle/vines/light_2, @@ -12962,6 +13122,23 @@ icon_state = "warning" }, /area/lv624/lazarus/landing_zones/lz1) +"cqH" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/chanterelle, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) +"cqN" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) +"crn" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 1 + }, +/turf/open/gm/dirt, +/area/lv624/ground/barrens/north_east_barrens) "crF" = ( /obj/structure/flora/bush/ausbushes/var3/fernybush, /obj/structure/flora/jungle/vines/heavy, @@ -12994,13 +13171,17 @@ icon_state = "desert_dug" }, /area/lv624/ground/barrens/west_barrens) +"cxi" = ( +/obj/structure/flora/bush/ausbushes/var3/brflowers, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) "cys" = ( /obj/structure/foamed_metal, /turf/open/gm/dirtgrassborder/south, /area/lv624/ground/jungle/east_central_jungle) "czq" = ( /obj/effect/landmark/objective_landmark/science, -/turf/open/gm/dirt, +/turf/open/auto_turf/strata_grass/layer1, /area/lv624/ground/caves/central_caves) "czu" = ( /obj/structure/flora/bush/ausbushes/var3/leafybush, @@ -13048,6 +13229,11 @@ "cCr" = ( /turf/open/gm/dirtgrassborder/south, /area/lv624/ground/jungle/east_jungle) +"cCP" = ( +/turf/open/gm/dirt{ + icon_state = "desert1" + }, +/area/lv624/ground/caves/south_west_caves) "cDr" = ( /obj/structure/girder, /turf/open/gm/grass/grass1, @@ -13072,6 +13258,12 @@ /obj/structure/flora/bush/ausbushes/pointybush, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/north_east_jungle) +"cEi" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/barrens/north_east_barrens) "cEn" = ( /obj/effect/decal/remains/xeno, /turf/open/gm/dirt, @@ -13084,6 +13276,12 @@ /obj/structure/flora/bush/ausbushes/var3/fullgrass, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/north_west_jungle) +"cHW" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "cIL" = ( /obj/structure/flora/jungle/vines/heavy, /turf/open/gm/grass/grass1, @@ -13096,6 +13294,9 @@ /obj/structure/blocker/forcefield/multitile_vehicles, /obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, /obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 6 + }, /turf/open/gm/dirt, /area/lv624/ground/caves/south_central_caves) "cJw" = ( @@ -13131,6 +13332,12 @@ /obj/effect/landmark/lv624/fog_blocker, /turf/closed/wall/strata_ice/jungle, /area/lv624/ground/river/west_river) +"cMG" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_west_caves) "cNH" = ( /obj/structure/surface/rack, /obj/item/storage/box/beakers, @@ -13156,6 +13363,10 @@ "cPV" = ( /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/west_central_jungle) +"cQB" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/amanita, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/west_caves) "cQJ" = ( /obj/structure/machinery/colony_floodlight, /turf/open/gm/grass/grass1, @@ -13181,6 +13392,12 @@ /obj/item/tool/surgery/surgicaldrill/predatorsurgicaldrill, /turf/open/gm/dirt, /area/lv624/ground/caves/sand_temple) +"cSL" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/plumphelmet{ + pixel_x = 8 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) "cTi" = ( /obj/structure/flora/jungle/vines/light_2, /turf/open/gm/grass/grass1, @@ -13202,6 +13419,10 @@ }, /turf/open/gm/grass/grass1, /area/lv624/ground/colony/west_nexus_road) +"cWs" = ( +/obj/structure/flora/bush/ausbushes/var3/sunnybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_west_caves) "cXd" = ( /obj/effect/landmark/monkey_spawn, /obj/structure/flora/jungle/vines/heavy, @@ -13229,6 +13450,14 @@ /obj/structure/blocker/forcefield/multitile_vehicles, /turf/closed/wall/mineral/sandstone/runed, /area/lv624/ground/caves/sand_temple) +"daY" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_membrane, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_membrane, +/obj/effect/decal/grass_overlay/grass1{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) "dbA" = ( /obj/structure/xenoautopsy/tank, /turf/open/shuttle{ @@ -13265,7 +13494,7 @@ /obj/effect/landmark/structure_spawner/xvx_hive/xeno_nest, /obj/effect/landmark/structure_spawner/setup/distress/xeno_nest, /obj/effect/landmark/corpsespawner/scientist, -/turf/open/gm/dirt, +/turf/open/auto_turf/strata_grass/layer1, /area/lv624/ground/caves/east_caves) "dhp" = ( /obj/structure/flora/bush/ausbushes/reedbush, @@ -13316,9 +13545,18 @@ /obj/structure/flora/jungle/vines/light_3, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/north_west_jungle) +"dmT" = ( +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/west_caves) "dmZ" = ( /turf/open/gm/grass/grass2, /area/lv624/ground/jungle/north_east_jungle) +"doe" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 5 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_west_caves) "dop" = ( /obj/structure/flora/jungle/planttop1, /turf/open/gm/grass/grass1, @@ -13376,6 +13614,13 @@ icon_state = "green" }, /area/lv624/lazarus/hydroponics) +"dtr" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/east_caves) "dvf" = ( /obj/structure/flora/bush/ausbushes/var3/sparsegrass, /turf/open/gm/grass/grass1, @@ -13438,6 +13683,31 @@ }, /turf/open/gm/dirtgrassborder/grassdirt_corner2/north_east, /area/lv624/ground/caves/sand_temple) +"dzM" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 1 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) +"dAu" = ( +/obj/effect/landmark/crap_item, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) +"dBS" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = -10; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_west_caves) +"dCD" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/barrens/north_east_barrens) "dCL" = ( /obj/item/reagent_container/food/drinks/cans/waterbottle{ pixel_x = 2 @@ -13482,6 +13752,9 @@ "dFz" = ( /obj/effect/landmark/structure_spawner/xvx_hive/xeno_membrane, /obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/obj/effect/decal/grass_overlay/grass1{ + dir = 10 + }, /turf/open/gm/dirt, /area/lv624/ground/caves/west_caves) "dGc" = ( @@ -13495,6 +13768,10 @@ /obj/effect/landmark/structure_spawner/setup/distress/xeno_door, /turf/open/gm/dirt, /area/lv624/ground/caves/central_caves) +"dHg" = ( +/obj/structure/flora/bush/ausbushes/var3/stalkybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_east_caves) "dHo" = ( /obj/effect/landmark/lv624/fog_blocker, /turf/open/gm/dirtgrassborder/grassdirt_corner/south_east, @@ -13505,6 +13782,18 @@ icon_state = "whiteblue" }, /area/lv624/lazarus/medbay) +"dIj" = ( +/obj/structure/flora/bush/ausbushes/reedbush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_west_caves) +"dIu" = ( +/obj/structure/flora/bush/ausbushes/genericbush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) +"dIv" = ( +/obj/structure/flora/bush/ausbushes/var3/leafybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_east_caves) "dID" = ( /obj/effect/landmark/objective_landmark/science, /turf/open/floor/strata{ @@ -13526,6 +13815,10 @@ "dKg" = ( /turf/open/gm/dirtgrassborder/east, /area/lv624/ground/barrens/south_eastern_jungle_barrens) +"dKl" = ( +/obj/structure/flora/bush/ausbushes/var3/fullgrass, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/west_caves) "dLd" = ( /obj/structure/bookcase, /obj/item/book/manual/research_and_development, @@ -13537,6 +13830,13 @@ icon_state = "whiteblue" }, /area/lv624/lazarus/corporate_dome) +"dLm" = ( +/obj/structure/blocker/forcefield/multitile_vehicles, +/obj/effect/decal/grass_overlay/grass1{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "dLn" = ( /obj/effect/acid_hole, /turf/closed/wall/r_wall, @@ -13547,9 +13847,19 @@ }, /turf/open/gm/dirtgrassborder/grassdirt_corner/south_west, /area/lv624/ground/jungle/east_jungle) +"dLW" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 6 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/east_caves) "dLY" = ( /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/east_jungle) +"dMc" = ( +/obj/structure/flora/jungle/planttop1, +/turf/open/gm/dirtgrassborder/south, +/area/lv624/ground/jungle/south_central_jungle) "dMF" = ( /obj/structure/surface/table/reinforced/prison{ color = "#6b675e" @@ -13578,11 +13888,19 @@ }, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/east_jungle) +"dOb" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/angel, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) "dOf" = ( /obj/effect/decal/cleanable/blood/drip, /obj/effect/landmark/crap_item, /turf/open/gm/dirt, /area/lv624/lazarus/crashed_ship_containers) +"dOA" = ( +/obj/structure/flora/bush/ausbushes/grassybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/west_caves) "dOC" = ( /obj/structure/kitchenspike, /obj/effect/decal/cleanable/blood, @@ -13641,12 +13959,18 @@ /area/lv624/lazarus/crashed_ship_containers) "dWM" = ( /obj/effect/landmark/monkey_spawn, -/turf/open/gm/dirt, +/turf/open/auto_turf/strata_grass/layer1, /area/lv624/ground/caves/south_west_caves) "dXq" = ( /obj/structure/platform_decoration/mineral/sandstone/runed, /turf/open/gm/dirt, /area/lv624/ground/barrens/south_eastern_barrens) +"dYx" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 6 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_west_caves) "dYE" = ( /obj/structure/fence, /turf/open/gm/dirt, @@ -13670,6 +13994,14 @@ /obj/effect/landmark/objective_landmark/close, /turf/open/floor/plating, /area/lv624/ground/barrens/central_barrens) +"eaI" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 1 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) "eaJ" = ( /obj/item/stack/sheet/wood{ amount = 2 @@ -13679,10 +14011,21 @@ icon_state = "bot" }, /area/lv624/lazarus/landing_zones/lz1) +"ebr" = ( +/turf/open/gm/dirtgrassborder/east, +/area/lv624/ground/jungle/south_central_jungle) "ebS" = ( /obj/structure/fence, /turf/open/gm/dirtgrassborder/east, /area/lv624/ground/colony/south_nexus_road) +"ecn" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_east_caves) "ecy" = ( /turf/closed/wall/sulaco, /area/lv624/lazarus/crashed_ship_containers) @@ -13709,9 +14052,27 @@ "efp" = ( /turf/open/gm/grass/grass1, /area/lv624/ground/colony/west_tcomms_road) +"eft" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "efX" = ( /turf/open/gm/coast/east, /area/lv624/ground/river/east_river) +"egc" = ( +/obj/structure/flora/bush/ausbushes/lavendergrass, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_east_caves) +"egU" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/east_caves) "ehy" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/generic{ name = "Hydroponics" @@ -13743,6 +14104,14 @@ /obj/structure/machinery/colony_floodlight, /turf/open/gm/grass/grass2, /area/lv624/ground/jungle/north_jungle) +"ejp" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/obj/effect/decal/grass_overlay/grass1{ + dir = 5 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "ejx" = ( /obj/structure/disposalpipe/segment, /obj/structure/window/framed/colony, @@ -13774,6 +14143,22 @@ icon_state = "green" }, /area/lv624/lazarus/hydroponics) +"elp" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 10 + }, +/obj/effect/decal/grass_overlay/grass1{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/east_caves) +"enn" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/barrens/north_east_barrens) "eny" = ( /obj/structure/flora/grass/tallgrass/jungle, /turf/open/gm/grass/grass1, @@ -13788,6 +14173,10 @@ icon_state = "whitebluecorner" }, /area/lv624/lazarus/medbay) +"eoW" = ( +/obj/structure/flora/bush/ausbushes/pointybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) "epG" = ( /obj/structure/showcase, /obj/structure/window/reinforced{ @@ -13817,6 +14206,10 @@ icon_state = "whitebluefull" }, /area/lv624/lazarus/medbay) +"eqS" = ( +/obj/structure/flora/bush/ausbushes/var3/brflowers, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_east_caves) "erx" = ( /turf/open/gm/coast/beachcorner/south_east, /area/lv624/ground/jungle/west_jungle) @@ -13831,6 +14224,10 @@ icon_state = "cult" }, /area/lv624/ground/caves/south_west_caves) +"etU" = ( +/obj/structure/flora/bush/ausbushes/var3/fernybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/east_caves) "euh" = ( /obj/effect/landmark/objective_landmark/medium, /turf/open/gm/dirt, @@ -13989,6 +14386,12 @@ icon_state = "floor4" }, /area/lv624/lazarus/crashed_ship_containers) +"eMe" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_east_caves) "eNK" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner/north_west, /area/lv624/ground/jungle/south_east_jungle) @@ -14026,6 +14429,9 @@ /obj/structure/largecrate/random, /turf/open/floor, /area/lv624/lazarus/landing_zones/lz1) +"eQL" = ( +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/barrens/north_east_barrens) "eSg" = ( /obj/structure/flora/jungle/vines/heavy, /turf/closed/wall/strata_ice/jungle, @@ -14046,6 +14452,10 @@ icon_state = "cult" }, /area/lv624/ground/caves/south_west_caves) +"eYb" = ( +/obj/structure/flora/bush/ausbushes/var3/sunnybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_east_caves) "eYh" = ( /obj/structure/surface/rack, /obj/effect/landmark/objective_landmark/close, @@ -14059,6 +14469,10 @@ /obj/effect/landmark/lv624/fog_blocker, /turf/open/gm/river, /area/lv624/ground/river/east_river) +"eZg" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/amanita, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) "eZC" = ( /obj/effect/landmark/structure_spawner/xvx_hive/xeno_nest, /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, @@ -14090,6 +14504,16 @@ /obj/structure/flora/jungle/planttop1, /turf/closed/wall/strata_ice/jungle, /area/lv624/ground/jungle/east_jungle) +"fcQ" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = -5; + pixel_y = -5; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) "fdl" = ( /turf/open/floor, /area/lv624/lazarus/hydroponics) @@ -14196,12 +14620,25 @@ icon_state = "asteroidfloor" }, /area/lv624/lazarus/corporate_dome) +"fmV" = ( +/obj/structure/flora/bush/ausbushes/ausbush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/east_caves) +"fmW" = ( +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) "fpn" = ( /turf/open/gm/coast/beachcorner/north_east, /area/lv624/ground/barrens/east_barrens) "fqh" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner/south_west, /area/lv624/ground/jungle/east_jungle) +"fqi" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 5 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) "fqM" = ( /obj/structure/machinery/power/apc{ start_charge = 0 @@ -14211,6 +14648,12 @@ icon_state = "asteroidwarning" }, /area/lv624/ground/colony/telecomm/sw_lz2) +"frV" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 6 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_west_caves) "fsa" = ( /obj/structure/surface/table, /turf/open/floor{ @@ -14218,6 +14661,12 @@ icon_state = "barber" }, /area/lv624/lazarus/kitchen) +"fsc" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 5 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) "fsu" = ( /obj/structure/machinery/light{ dir = 8 @@ -14313,10 +14762,18 @@ icon_state = "warning" }, /area/lv624/lazarus/landing_zones/lz1) +"fDE" = ( +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) "fDO" = ( /obj/structure/flora/jungle/alienplant1, /turf/open/gm/river, /area/lv624/ground/barrens/west_barrens) +"fDT" = ( +/turf/open/gm/dirt{ + icon_state = "desert_dug" + }, +/area/lv624/ground/caves/south_west_caves) "fEn" = ( /obj/structure/flora/jungle/vines/light_1, /turf/open/gm/grass/grass1, @@ -14357,6 +14814,11 @@ icon_state = "asteroidfloor" }, /area/lv624/ground/colony/telecomm/cargo) +"fGn" = ( +/obj/effect/decal/grass_overlay/grass1, +/obj/structure/flora/bush/ausbushes/pointybush, +/turf/open/gm/dirt, +/area/lv624/ground/caves/east_caves) "fGO" = ( /obj/structure/flora/bush/ausbushes/var3/ywflowers, /turf/open/gm/grass/grass1, @@ -14391,12 +14853,24 @@ /obj/structure/window/framed/colony/reinforced, /turf/open/floor, /area/lv624/lazarus/medbay) +"fIW" = ( +/obj/effect/decal/grass_overlay/grass1, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_east_caves) "fJQ" = ( /obj/structure/flora/grass/tallgrass/jungle/corner{ dir = 1 }, /turf/open/gm/grass/grass1, /area/lv624/ground/colony/west_tcomms_road) +"fKc" = ( +/obj/structure/flora/bush/ausbushes/ausbush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) +"fLh" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/angel, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/west_caves) "fMl" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/generic{ dir = 1; @@ -14422,6 +14896,14 @@ "fQL" = ( /turf/open/gm/coast/beachcorner2/south_east, /area/lv624/ground/river/west_river) +"fRD" = ( +/obj/structure/flora/bush/ausbushes/ausbush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_east_caves) +"fRU" = ( +/obj/structure/flora/bush/ausbushes/genericbush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/west_caves) "fSX" = ( /turf/open/gm/grass/grass2, /area/lv624/ground/jungle/east_jungle) @@ -14441,6 +14923,14 @@ "fTM" = ( /turf/open/gm/dirt, /area/lv624/ground/caves/south_east_caves) +"fTN" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_west_caves) +"fUj" = ( +/obj/structure/flora/bush/ausbushes/var3/stalkybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_east_caves) "fXr" = ( /obj/effect/landmark/crap_item, /turf/open/gm/dirt, @@ -14454,6 +14944,10 @@ /obj/effect/landmark/structure_spawner/setup/distress/xeno_membrane, /turf/open/gm/dirt, /area/lv624/ground/caves/south_central_caves) +"fYG" = ( +/obj/structure/flora/bush/ausbushes/ppflowers, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/east_caves) "fZO" = ( /turf/open/gm/dirtgrassborder/east, /area/lv624/ground/jungle/north_west_jungle) @@ -14487,6 +14981,16 @@ /obj/structure/flora/bush/ausbushes/lavendergrass, /turf/open/gm/grass/grass2, /area/lv624/ground/jungle/south_central_jungle) +"gcB" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 6; + pixel_y = -8; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) "gcI" = ( /obj/effect/landmark/crap_item, /turf/open/shuttle{ @@ -14572,6 +15076,16 @@ /obj/structure/flora/bush/ausbushes/lavendergrass, /turf/open/gm/grass/grass1, /area/lv624/ground/barrens/south_eastern_jungle_barrens) +"gnt" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = -5; + pixel_y = -5; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_west_caves) "gnx" = ( /turf/open/floor{ icon_state = "white" @@ -14581,6 +15095,10 @@ /obj/structure/fence, /turf/open/gm/dirtgrassborder/grassdirt_corner2/north_east, /area/lv624/ground/colony/north_nexus_road) +"gos" = ( +/obj/structure/flora/bush/ausbushes/var3/fernybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) "gpC" = ( /obj/structure/flora/jungle/vines/light_2, /obj/structure/flora/jungle/vines/heavy, @@ -14599,10 +15117,21 @@ /obj/structure/flora/jungle/planttop1, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/north_jungle) +"grW" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "grZ" = ( /obj/effect/landmark/objective_landmark/science, /turf/open/floor/plating, /area/lv624/ground/barrens/central_barrens) +"gsq" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_east_caves) "gss" = ( /obj/structure/largecrate/random/barrel/yellow, /turf/open/shuttle{ @@ -14642,6 +15171,17 @@ /obj/structure/flora/jungle/vines/heavy, /turf/closed/wall/mineral/sandstone/runed/decor, /area/lv624/ground/jungle/south_west_jungle/ceiling) +"gvm" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) +"gvr" = ( +/obj/structure/flora/bush/ausbushes/var3/stalkybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_west_caves) "gwP" = ( /turf/open/gm/dirt, /area/lv624/ground/caves/west_caves) @@ -14660,6 +15200,12 @@ }, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/south_central_jungle) +"gze" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/obj/effect/decal/grass_overlay/grass1, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) "gzo" = ( /turf/open/gm/dirt{ icon_state = "desert3" @@ -14671,6 +15217,10 @@ icon_state = "dark" }, /area/lv624/lazarus/quartstorage) +"gzH" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_east_caves) "gzW" = ( /obj/effect/landmark/hunter_secondary, /turf/open/gm/dirt, @@ -14746,12 +15296,22 @@ }, /turf/open/floor/sandstone/runed, /area/lv624/ground/caves/sand_temple) +"gPu" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "gPN" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner2/north_west, /area/lv624/ground/barrens/south_eastern_barrens) "gQr" = ( /turf/open/gm/coast/beachcorner/south_east, /area/lv624/ground/caves/sand_temple) +"gRk" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/west_caves) "gRm" = ( /obj/structure/flora/bush/ausbushes/ppflowers, /turf/open/gm/dirtgrassborder/north, @@ -14759,6 +15319,12 @@ "gRx" = ( /turf/open/gm/dirtgrassborder/south, /area/lv624/ground/colony/south_medbay_road) +"gTj" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_west_caves) "gTu" = ( /obj/structure/filingcabinet{ density = 0; @@ -14791,6 +15357,18 @@ "gUq" = ( /turf/open/gm/dirtgrassborder/south, /area/lv624/ground/jungle/south_east_jungle) +"gVw" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) +"gVR" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/obj/effect/decal/grass_overlay/grass1/inner, +/turf/open/gm/dirt, +/area/lv624/ground/caves/east_caves) "gWf" = ( /obj/structure/surface/rack, /obj/item/stack/sandbags/large_stack{ @@ -14806,6 +15384,12 @@ icon_state = "vault" }, /area/lv624/lazarus/quartstorage) +"gWE" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 10 + }, +/turf/open/floor/sandstone/runed, +/area/lv624/ground/caves/south_east_caves) "gWI" = ( /obj/structure/flora/bush/ausbushes/var3/ywflowers, /turf/open/gm/grass/grass1, @@ -14831,6 +15415,16 @@ /obj/structure/prop/brazier, /turf/open/gm/dirtgrassborder/east, /area/lv624/ground/caves/sand_temple) +"han" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/amanita, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) +"hav" = ( +/obj/structure/blocker/forcefield/multitile_vehicles, +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) "haN" = ( /obj/structure/flora/bush/ausbushes/grassybush, /turf/open/gm/grass/grass1, @@ -14882,6 +15476,16 @@ icon_state = "asteroidwarning" }, /area/lv624/lazarus/landing_zones/lz2) +"hez" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 2; + pixel_y = 7; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) "heC" = ( /obj/structure/flora/grass/tallgrass/jungle/corner{ dir = 6 @@ -14914,6 +15518,11 @@ }, /turf/closed/wall/strata_ice/jungle, /area/lv624/ground/jungle/west_jungle) +"hhs" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/west_caves) "hhv" = ( /turf/open/floor{ dir = 8; @@ -14929,6 +15538,12 @@ /obj/structure/fence, /turf/open/gm/dirtgrassborder/east, /area/lv624/ground/colony/west_tcomms_road) +"hjo" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 5 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "hke" = ( /obj/structure/platform/mineral/sandstone/runed, /obj/structure/stairs/perspective{ @@ -14938,6 +15553,25 @@ }, /turf/open/gm/dirt, /area/lv624/ground/barrens/south_eastern_barrens) +"hkT" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 10 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) +"hmq" = ( +/obj/structure/flora/bush/ausbushes/ausbush, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_west_caves) +"hmJ" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/barrens/north_east_barrens) "hmK" = ( /obj/structure/flora/jungle/planttop1, /turf/open/gm/grass/grass1, @@ -14953,6 +15587,16 @@ icon_state = "bot" }, /area/lv624/ground/caves/north_central_caves) +"hpK" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = -10; + pixel_y = -2; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) "hpN" = ( /obj/structure/surface/table, /obj/effect/landmark/good_item, @@ -14988,6 +15632,15 @@ "hsc" = ( /turf/closed/wall/r_wall, /area/lv624/ground/river/central_river) +"htV" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 4; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/west_caves) "huH" = ( /obj/structure/flora/jungle/planttop1, /obj/structure/flora/jungle/vines/light_3, @@ -15007,6 +15660,13 @@ /obj/effect/decal/remains/xeno, /turf/open/gm/grass/grass1, /area/lv624/ground/barrens/south_eastern_jungle_barrens) +"hyF" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "hyK" = ( /obj/effect/landmark/hunter_primary, /turf/open/gm/grass/grass1, @@ -15042,6 +15702,10 @@ /obj/effect/decal/remains/xeno, /turf/open/gm/dirt, /area/lv624/ground/colony/west_tcomms_road) +"hEe" = ( +/obj/effect/landmark/crap_item, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/barrens/north_east_barrens) "hEl" = ( /obj/structure/flora/jungle/vines/light_2, /turf/closed/wall/strata_ice/jungle, @@ -15106,6 +15770,10 @@ }, /turf/open/gm/grass/grass2, /area/lv624/ground/jungle/east_jungle) +"hKP" = ( +/obj/effect/decal/grass_overlay/grass1/inner, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_west_caves) "hLu" = ( /turf/open/gm/dirtgrassborder/south, /area/lv624/ground/jungle/south_central_jungle) @@ -15143,6 +15811,10 @@ /obj/item/clothing/under/colonist, /turf/open/floor/vault, /area/lv624/lazarus/quartstorage) +"hNT" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/plumphelmet, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) "hPV" = ( /obj/effect/decal/remains/xeno{ pixel_x = 31 @@ -15159,6 +15831,18 @@ icon_state = "vault" }, /area/lv624/lazarus/quartstorage) +"hRy" = ( +/turf/open/gm/dirt{ + icon_state = "desert3" + }, +/area/lv624/ground/caves/south_west_caves) +"hRB" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1{ + dir = 6 + }, +/turf/open/gm/dirt, +/area/lv624/ground/barrens/north_east_barrens) "hRI" = ( /obj/structure/flora/bush/ausbushes/reedbush, /turf/open/gm/grass/grass1, @@ -15184,6 +15868,10 @@ /obj/effect/landmark/monkey_spawn, /turf/open/gm/dirt, /area/lv624/ground/jungle/east_central_jungle) +"hTR" = ( +/obj/structure/flora/bush/ausbushes/var3/ywflowers, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_east_caves) "hUs" = ( /turf/open/gm/grass/grass2, /area/lv624/ground/jungle/south_west_jungle) @@ -15261,6 +15949,10 @@ /obj/structure/flora/jungle/vines/heavy, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/east_central_jungle) +"icd" = ( +/obj/structure/flora/bush/ausbushes/grassybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) "idz" = ( /obj/item/weapon/sword{ pixel_x = 6; @@ -15289,10 +15981,24 @@ /obj/structure/flora/jungle/vines/light_3, /turf/open/gm/grass/grass1, /area/lv624/lazarus/landing_zones/lz1) +"ieN" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 2; + pixel_y = 7; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/west_caves) "ifk" = ( /obj/structure/flora/bush/ausbushes/var3/brflowers, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/west_central_jungle) +"ifr" = ( +/obj/structure/flora/bush/ausbushes/pointybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/east_caves) "ifF" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner2/north_west, /area/lv624/ground/jungle/south_east_jungle) @@ -15303,6 +16009,11 @@ }, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/central_jungle) +"igN" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "ihS" = ( /obj/structure/surface/table, /obj/item/reagent_container/food/drinks/cans/lemon_lime{ @@ -15319,6 +16030,10 @@ /obj/effect/landmark/queen_spawn, /turf/open/gm/dirt, /area/lv624/ground/caves/east_caves) +"ikA" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/chanterelle, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) "ilf" = ( /obj/structure/flora/jungle/vines/light_3, /obj/structure/flora/jungle/vines/heavy, @@ -15326,6 +16041,13 @@ /obj/structure/flora/jungle/planttop1, /turf/open/floor/plating, /area/lv624/lazarus/corporate_dome) +"ilF" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/plumphelmet{ + pixel_x = 8 + }, +/obj/structure/flora/bush/ausbushes/ppflowers, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) "ilO" = ( /obj/structure/surface/table/woodentable/poor, /obj/item/device/flashlight/lantern{ @@ -15355,6 +16077,13 @@ }, /turf/open/gm/dirt, /area/lv624/ground/jungle/east_jungle) +"isL" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 10 + }, +/obj/structure/flora/bush/ausbushes/palebush, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) "isR" = ( /obj/effect/landmark/objective_landmark/medium, /obj/structure/largecrate/random, @@ -15369,6 +16098,13 @@ icon_state = "asteroidwarning" }, /area/lv624/lazarus/landing_zones/lz2) +"iuf" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "iuO" = ( /turf/open/gm/dirtgrassborder{ icon_state = "desert3" @@ -15400,6 +16136,12 @@ icon_state = "multi_tiles" }, /area/lv624/ground/caves/sand_temple) +"iye" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/east_caves) "iyr" = ( /obj/effect/landmark/structure_spawner/xvx_hive/xeno_nest, /obj/effect/landmark/structure_spawner/setup/distress/xeno_nest, @@ -15452,6 +16194,11 @@ /obj/structure/fence, /turf/open/gm/dirtgrassborder/south, /area/lv624/ground/colony/west_nexus_road) +"iDX" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_membrane, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_membrane, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) "iFp" = ( /obj/structure/flora/jungle/vines/light_1, /obj/structure/barricade/wooden{ @@ -15462,10 +16209,19 @@ icon_state = "warning" }, /area/lv624/lazarus/landing_zones/lz1) +"iGf" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/west_caves) "iGn" = ( /obj/effect/landmark/hunter_primary, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/south_west_jungle) +"iGx" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/west_caves) "iHQ" = ( /obj/structure/xenoautopsy/tank/broken, /turf/open/gm/dirt, @@ -15514,6 +16270,10 @@ /obj/structure/ore_box, /turf/open/gm/dirt, /area/lv624/ground/barrens/south_west_barrens) +"iNJ" = ( +/obj/structure/flora/bush/ausbushes/var3/leafybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_west_caves) "iOz" = ( /obj/structure/barricade/handrail/strata{ dir = 4 @@ -15555,6 +16315,14 @@ /obj/structure/flora/bush/ausbushes/ppflowers, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/central_jungle) +"iTQ" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 6 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "iUm" = ( /obj/structure/flora/bush/ausbushes/var3/fernybush, /turf/open/gm/grass/grass1, @@ -15581,6 +16349,10 @@ /obj/structure/fence, /turf/open/gm/dirtgrassborder/east, /area/lv624/ground/colony/west_nexus_road) +"iXX" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/angel, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_west_caves) "iYJ" = ( /obj/structure/flora/bush/ausbushes/var3/fullgrass, /turf/open/gm/grass/grass1, @@ -15613,6 +16385,12 @@ }, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/north_jungle) +"jcn" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "jdi" = ( /obj/structure/flora/jungle/vines/heavy, /obj/structure/flora/jungle/vines/light_3, @@ -15625,10 +16403,30 @@ "jga" = ( /turf/open/gm/river, /area/lv624/ground/jungle/west_jungle) +"jgj" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 6 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/east_caves) +"jgy" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 6 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "jgJ" = ( /obj/structure/fence, /turf/open/gm/dirtgrassborder/grassdirt_corner2/north_east, /area/lv624/ground/colony/south_nexus_road) +"jhj" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_nest, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_nest, +/obj/effect/decal/grass_overlay/grass1/inner, +/turf/open/gm/dirt, +/area/lv624/ground/caves/east_caves) "jhG" = ( /obj/structure/barricade/handrail/strata{ dir = 8 @@ -15652,6 +16450,12 @@ /obj/structure/machinery/colony_floodlight, /turf/open/gm/dirt, /area/lv624/ground/colony/north_tcomms_road) +"jlt" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_east_caves) "jnG" = ( /obj/structure/machinery/door/airlock/almayer/engineering/colony{ dir = 1; @@ -15675,6 +16479,21 @@ icon_state = "whitebluecorner" }, /area/lv624/lazarus/corporate_dome) +"jpX" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) +"jqr" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/obj/effect/decal/grass_overlay/grass1{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "jrC" = ( /obj/structure/curtain/red, /turf/open/shuttle{ @@ -15699,6 +16518,12 @@ /obj/structure/cargo_container/lockmart/mid, /turf/open/floor, /area/lv624/ground/barrens/containers) +"jvQ" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "jwW" = ( /turf/open/floor/plating{ dir = 6; @@ -15774,6 +16599,19 @@ icon_state = "floor6" }, /area/lv624/ground/caves/sand_temple) +"jBl" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 1 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) +"jCO" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/plumphelmet{ + pixel_x = 8; + pixel_y = 13 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) "jDY" = ( /obj/effect/decal/cleanable/blood/gibs/xeno/limb, /turf/open/gm/dirt, @@ -15798,6 +16636,12 @@ /obj/structure/flora/bush/ausbushes/var3/brflowers, /turf/open/gm/dirt, /area/lv624/ground/jungle/south_west_jungle/ceiling) +"jGU" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 1 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "jGW" = ( /turf/closed/wall/strata_ice/jungle, /area/lv624/ground/jungle/central_jungle) @@ -15821,6 +16665,16 @@ /obj/structure/flora/jungle/vines/light_3, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/central_jungle) +"jJg" = ( +/obj/structure/flora/bush/ausbushes/var3/sparsegrass, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_east_caves) +"jKc" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_west_caves) "jKu" = ( /obj/structure/flora/bush/ausbushes/var3/fernybush, /obj/structure/flora/jungle/vines/heavy, @@ -15850,6 +16704,12 @@ /obj/structure/flora/jungle/vines/heavy, /turf/open/gm/dirtgrassborder/south, /area/lv624/ground/jungle/west_central_jungle) +"jLY" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_west_caves) "jMk" = ( /obj/structure/lattice{ layer = 2.9 @@ -15865,6 +16725,12 @@ icon_state = "warnplate" }, /area/lv624/lazarus/engineering) +"jMD" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 6 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_east_caves) "jMH" = ( /obj/structure/stairs/perspective{ color = "#6b675e"; @@ -15939,6 +16805,16 @@ /obj/effect/decal/cleanable/blood/xeno, /turf/open/gm/dirt, /area/lv624/ground/jungle/north_west_jungle) +"jRL" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 2; + pixel_y = 7; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/east_caves) "jRM" = ( /obj/structure/flora/bush/ausbushes/var3/fullgrass, /obj/effect/landmark/lv624/fog_blocker, @@ -16001,6 +16877,20 @@ /obj/effect/landmark/monkey_spawn, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/north_jungle) +"jZX" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/obj/effect/decal/grass_overlay/grass1{ + dir = 6 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) +"kae" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/barrens/north_east_barrens) "kbn" = ( /obj/structure/machinery/sensortower, /turf/open/floor{ @@ -16023,6 +16913,10 @@ /obj/effect/landmark/lv624/fog_blocker, /turf/closed/wall/rock/brown, /area/lv624/ground/river/west_river) +"kdj" = ( +/obj/structure/flora/bush/ausbushes/pointybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) "keS" = ( /turf/open/floor/plating, /area/lv624/ground/barrens/east_barrens/ceiling) @@ -16049,6 +16943,18 @@ /obj/structure/flora/jungle/vines/light_3, /turf/open/gm/dirtgrassborder/grassdirt_corner/south_west, /area/lv624/ground/jungle/east_jungle) +"klD" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 6 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_west_caves) +"kmH" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/east_caves) "kmP" = ( /obj/item/stool, /turf/open/gm/dirt, @@ -16068,6 +16974,12 @@ /obj/structure/flora/bush/ausbushes/var3/sunnybush, /turf/open/gm/dirtgrassborder/grassdirt_corner/north_east, /area/lv624/ground/barrens/south_eastern_jungle_barrens) +"kpx" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 5 + }, +/turf/open/gm/dirt, +/area/lv624/ground/barrens/north_east_barrens) "kqx" = ( /obj/structure/flora/jungle/plantbot1, /obj/structure/flora/jungle/vines/light_3, @@ -16077,10 +16989,26 @@ /obj/structure/flora/jungle/vines/light_3, /turf/open/gm/dirt, /area/lv624/ground/caves/sand_temple) +"krs" = ( +/turf/open/gm/dirt{ + icon_state = "desert2" + }, +/area/lv624/ground/caves/south_west_caves) +"ksc" = ( +/obj/structure/flora/bush/ausbushes/var3/sunnybush{ + icon_state = "fernybush_2"; + pixel_y = 10 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_west_caves) "ksB" = ( /obj/structure/flora/jungle/vines/light_3, /turf/open/gm/dirtgrassborder/grassdirt_corner2/south_west, /area/lv624/ground/caves/sand_temple) +"ksM" = ( +/obj/structure/flora/bush/ausbushes/var3/sparsegrass, +/turf/open/gm/dirtgrassborder/south, +/area/lv624/ground/jungle/south_central_jungle) "ksQ" = ( /obj/structure/surface/rack, /obj/item/storage/toolbox/mechanical{ @@ -16103,6 +17031,12 @@ }, /turf/open/gm/dirtgrassborder/grassdirt_corner/north_east, /area/lv624/ground/barrens/south_eastern_barrens) +"ktr" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 6 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) "kuP" = ( /obj/item/tool/hatchet{ pixel_x = 6; @@ -16133,12 +17067,25 @@ /obj/effect/landmark/monkey_spawn, /turf/open/gm/grass/grass1, /area/lv624/lazarus/landing_zones/lz2) +"kxv" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 1 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "kxI" = ( /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/south_central_jungle) "kyc" = ( /turf/open/gm/coast/beachcorner/north_east, /area/lv624/ground/river/central_river) +"kyt" = ( +/obj/effect/decal/grass_overlay/grass1/inner, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_west_caves) "kyN" = ( /obj/structure/flora/bush/ausbushes/var3/ywflowers, /turf/open/gm/grass/grass1, @@ -16160,6 +17107,12 @@ icon_state = "green" }, /area/lv624/lazarus/hydroponics) +"kzn" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 5 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_west_caves) "kzu" = ( /obj/structure/flora/bush/ausbushes/grassybush, /turf/open/gm/grass/grass1, @@ -16168,6 +17121,10 @@ /obj/structure/flora/bush/ausbushes/var3/sunnybush, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/north_west_jungle) +"kzw" = ( +/obj/structure/flora/bush/ausbushes/var3/sunnybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) "kzE" = ( /obj/structure/cargo_container/lockmart/right, /turf/open/floor, @@ -16199,6 +17156,14 @@ icon_state = "vault" }, /area/lv624/lazarus/quartstorage) +"kBq" = ( +/obj/structure/flora/bush/ausbushes/ausbush, +/turf/open/gm/dirtgrassborder/grassdirt_corner/south_west, +/area/lv624/ground/jungle/south_west_jungle) +"kCD" = ( +/obj/structure/flora/bush/ausbushes/var3/leafybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/west_caves) "kFx" = ( /obj/structure/flora/jungle/plantbot1, /turf/open/gm/grass/grass1, @@ -16221,6 +17186,10 @@ "kHU" = ( /turf/open/gm/grass/grass1, /area/lv624/ground/caves/sand_temple) +"kIM" = ( +/obj/structure/flora/bush/ausbushes/reedbush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) "kJm" = ( /turf/open/gm/coast/beachcorner2/north_east, /area/lv624/ground/barrens/south_eastern_jungle_barrens) @@ -16232,11 +17201,31 @@ /obj/structure/flora/jungle/planttop1, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/south_west_jungle) +"kKa" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_west_caves) +"kLl" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "kLP" = ( /obj/structure/flora/jungle/plantbot1, /obj/structure/flora/jungle/vines/light_2, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/north_east_jungle) +"kML" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "kNm" = ( /obj/effect/landmark/hunter_primary, /turf/open/gm/grass/grass1, @@ -16303,6 +17292,12 @@ /obj/structure/fence, /turf/open/gm/dirtgrassborder/grassdirt_corner2/north_east, /area/lv624/ground/colony/north_tcomms_road) +"kVG" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_membrane, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_membrane, +/obj/effect/decal/grass_overlay/grass1, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "kVP" = ( /obj/structure/flora/jungle/plantbot1, /turf/open/gm/grass/grass1, @@ -16318,6 +17313,10 @@ }, /turf/open/floor/plating, /area/lv624/lazarus/landing_zones/lz2) +"kWV" = ( +/obj/effect/decal/grass_overlay/grass1/inner, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "kWX" = ( /turf/open/floor{ dir = 8; @@ -16361,6 +17360,11 @@ icon_state = "whiteblue" }, /area/lv624/lazarus/corporate_dome) +"lav" = ( +/turf/open/gm/dirt{ + icon_state = "desert_dug" + }, +/area/lv624/ground/caves/west_caves) "laY" = ( /obj/structure/flora/jungle/vines/light_1, /turf/closed/wall/strata_ice/jungle, @@ -16368,12 +17372,23 @@ "lbd" = ( /turf/open/gm/coast/beachcorner/north_west, /area/lv624/ground/barrens/west_barrens) +"lbt" = ( +/obj/effect/landmark/hunter_primary, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) "lbX" = ( /obj/structure/flora/grass/tallgrass/jungle/corner{ dir = 10 }, /turf/open/gm/grass/grass2, /area/lv624/ground/jungle/east_jungle) +"ldi" = ( +/obj/structure/flora/bush/ausbushes/grassybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_east_caves) "ldB" = ( /obj/structure/flora/grass/tallgrass/jungle/corner{ dir = 4 @@ -16391,6 +17406,24 @@ /obj/structure/flora/bush/ausbushes/genericbush, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/north_east_jungle) +"lhE" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/obj/effect/decal/grass_overlay/grass1, +/turf/open/gm/dirt, +/area/lv624/ground/caves/east_caves) +"lhH" = ( +/obj/structure/flora/bush/ausbushes/var3/stalkybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) +"liI" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/obj/effect/decal/grass_overlay/grass1{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) "lju" = ( /turf/open/gm/coast/beachcorner2/south_east, /area/lv624/ground/river/central_river) @@ -16402,6 +17435,11 @@ /obj/structure/inflatable/popped/door, /turf/open/gm/dirt, /area/lv624/lazarus/crashed_ship_containers) +"lkq" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) "lkF" = ( /obj/item/stack/sheet/wood{ amount = 2 @@ -16413,6 +17451,10 @@ icon_state = "warning" }, /area/lv624/lazarus/landing_zones/lz1) +"lnr" = ( +/obj/structure/flora/bush/ausbushes/lavendergrass, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) "lnK" = ( /obj/structure/flora/bush/ausbushes/genericbush, /obj/effect/landmark/nightmare{ @@ -16428,6 +17470,16 @@ /obj/effect/landmark/hunter_primary, /turf/open/gm/dirtgrassborder/grassdirt_corner2/south_east, /area/lv624/ground/jungle/south_east_jungle) +"loP" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 8 + }, +/obj/effect/decal/grass_overlay/grass1{ + dir = 10 + }, +/obj/structure/flora/bush/ausbushes/genericbush, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_east_caves) "lpV" = ( /turf/open/floor/plating{ icon_state = "platebotc" @@ -16491,6 +17543,19 @@ "lyS" = ( /turf/closed/wall/r_wall/unmeltable, /area/lv624/lazarus/quartstorage) +"lyZ" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/east_caves) +"lzf" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 8 + }, +/obj/structure/flora/bush/ausbushes/grassybush, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) "lzE" = ( /turf/open/gm/dirt{ icon_state = "desert0" @@ -16500,6 +17565,12 @@ /obj/structure/flora/bush/ausbushes/reedbush, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/south_central_jungle) +"lBl" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_east_caves) "lBq" = ( /obj/structure/barricade/handrail/strata, /obj/structure/barricade/handrail/strata{ @@ -16582,6 +17653,13 @@ icon_state = "dark" }, /area/lv624/lazarus/quartstorage) +"lIL" = ( +/obj/structure/blocker/forcefield/multitile_vehicles, +/obj/effect/decal/grass_overlay/grass1{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "lIU" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner/north_west, /area/lv624/ground/jungle/south_central_jungle) @@ -16621,6 +17699,16 @@ icon_state = "warning" }, /area/lv624/lazarus/landing_zones/lz2) +"lKl" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 6; + pixel_y = -8; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/west_caves) "lKF" = ( /turf/closed/wall/rock/brown, /area/lv624/ground/barrens/containers) @@ -16628,12 +17716,23 @@ /obj/structure/shuttle/engine/propulsion, /turf/open/gm/dirt, /area/lv624/ground/barrens/north_east_barrens) +"lLK" = ( +/obj/structure/flora/bush/ausbushes/ausbush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/west_caves) "lLO" = ( /obj/structure/flora/grass/tallgrass/jungle/corner{ dir = 10 }, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/east_jungle) +"lLU" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 10 + }, +/obj/structure/flora/bush/ausbushes/genericbush, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) "lNe" = ( /obj/effect/decal/cleanable/blood, /turf/open/floor{ @@ -16641,6 +17740,16 @@ icon_state = "whitebluecorner" }, /area/lv624/lazarus/corporate_dome) +"lNG" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 2; + pixel_y = 7; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_east_caves) "lPJ" = ( /turf/open/gm/dirtgrassborder{ icon_state = "desert" @@ -16678,6 +17787,23 @@ icon_state = "whiteblue" }, /area/lv624/lazarus/corporate_dome) +"lSA" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_east_caves) +"lSN" = ( +/obj/effect/decal/grass_overlay/grass1/inner, +/obj/structure/flora/bush/ausbushes/ausbush, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_east_caves) +"lTv" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 1 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_west_caves) "lTZ" = ( /obj/item/tool/shovel, /turf/open/gm/dirt, @@ -16699,6 +17825,25 @@ /obj/structure/prop/brazier/torch, /turf/closed/wall/rock/brown, /area/lv624/ground/caves/sand_temple) +"lUQ" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/structure/blocker/forcefield/multitile_vehicles, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 1 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_west_caves) +"lWh" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 6 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_west_caves) +"lWl" = ( +/obj/effect/decal/grass_overlay/grass1/inner, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_west_caves) "lWw" = ( /obj/structure/stairs/perspective{ color = "#b29082"; @@ -16711,6 +17856,12 @@ "lWO" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner/south_east, /area/lv624/ground/jungle/south_west_jungle) +"lYt" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_west_caves) "lYB" = ( /obj/structure/fence, /turf/open/gm/dirtgrassborder/grassdirt_corner2/north_west, @@ -16758,6 +17909,16 @@ /obj/structure/flora/jungle/vines/heavy, /turf/open/gm/dirt, /area/lv624/ground/jungle/east_jungle) +"mca" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 2; + pixel_y = 7; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) "mdQ" = ( /turf/closed/wall/rock/brown, /area/lv624/ground/caves/west_caves) @@ -16765,6 +17926,16 @@ /obj/structure/flora/jungle/vines/heavy, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/south_east_jungle) +"mfn" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 2; + pixel_y = -2; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/east_caves) "mfu" = ( /obj/structure/flora/grass/tallgrass/jungle/corner{ dir = 8 @@ -16779,6 +17950,12 @@ /obj/structure/flora/jungle/vines/light_1, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/central_jungle) +"mgi" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_west_caves) "mgs" = ( /obj/structure/machinery/door/poddoor/almayer{ dir = 8; @@ -16820,6 +17997,9 @@ icon_state = "grass1" }, /area/lv624/ground/barrens/south_eastern_barrens) +"mkn" = ( +/turf/open/floor/plating, +/area/lv624/lazarus/secure_storage) "mko" = ( /obj/structure/fence, /turf/open/gm/dirtgrassborder/north, @@ -16890,6 +18070,11 @@ /obj/effect/landmark/lv624/fog_blocker, /turf/open/gm/dirt, /area/lv624/ground/river/east_river) +"mrg" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) "mrQ" = ( /obj/structure/bed/chair/comfy/black{ dir = 4 @@ -16982,6 +18167,12 @@ icon_state = "whiteblue" }, /area/lv624/lazarus/corporate_dome) +"mEo" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 10 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_east_caves) "mEw" = ( /obj/effect/landmark/lv624/fog_blocker, /turf/open/gm/dirtgrassborder/south, @@ -16990,10 +18181,22 @@ /obj/effect/landmark/crap_item, /turf/open/gm/dirt, /area/lv624/ground/colony/north_nexus_road) +"mFZ" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 6 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) "mGG" = ( /obj/structure/window_frame/colony/reinforced, /turf/open/floor/plating, /area/lv624/lazarus/corporate_dome) +"mHk" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/east_caves) "mHM" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner2/south_west, /area/lv624/ground/colony/south_medbay_road) @@ -17008,6 +18211,10 @@ icon_state = "whiteyellowcorner" }, /area/lv624/lazarus/corporate_dome) +"mJF" = ( +/obj/structure/flora/bush/ausbushes/palebush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) "mKf" = ( /turf/open/gm/dirt, /area/lv624/ground/colony/west_nexus_road) @@ -17017,6 +18224,10 @@ }, /turf/open/floor/sandstone/runed, /area/lv624/ground/caves/sand_temple) +"mLv" = ( +/obj/structure/flora/bush/ausbushes/lavendergrass, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/east_caves) "mMq" = ( /obj/structure/flora/jungle/planttop1, /turf/open/gm/grass/grass1, @@ -17036,6 +18247,12 @@ icon_state = "vault" }, /area/lv624/lazarus/quartstorage) +"mNl" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 10 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/east_caves) "mNz" = ( /obj/structure/flora/bush/ausbushes/var3/fernybush, /turf/open/gm/grass/grass1, @@ -17052,6 +18269,10 @@ /obj/structure/flora/bush/ausbushes/ausbush, /turf/open/gm/dirt, /area/lv624/ground/barrens/south_eastern_jungle_barrens) +"mOL" = ( +/obj/structure/flora/bush/ausbushes/var3/leafybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) "mPt" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner2/north_east, /area/lv624/ground/barrens/south_eastern_jungle_barrens) @@ -17128,6 +18349,10 @@ icon_state = "whiteblue" }, /area/lv624/lazarus/corporate_dome) +"mVr" = ( +/obj/structure/flora/bush/ausbushes/palebush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) "mVK" = ( /obj/structure/machinery/colony_floodlight, /turf/open/gm/grass/grass1, @@ -17138,6 +18363,10 @@ "mWe" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner2/north_west, /area/lv624/ground/jungle/south_west_jungle) +"mWA" = ( +/obj/structure/flora/bush/ausbushes/var3/fernybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_east_caves) "mXR" = ( /turf/open/gm/dirtgrassborder/west, /area/lv624/ground/colony/north_nexus_road) @@ -17168,10 +18397,22 @@ icon_state = "asteroidwarning" }, /area/lv624/lazarus/landing_zones/lz2) +"ndk" = ( +/obj/structure/flora/bush/ausbushes/ppflowers, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/west_caves) "ndK" = ( /obj/structure/flora/jungle/vines/light_1, /turf/closed/wall/r_wall, /area/lv624/lazarus/corporate_dome) +"ner" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/obj/effect/decal/grass_overlay/grass1{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "nfD" = ( /obj/effect/landmark/survivor_spawner, /turf/open/gm/dirt, @@ -17186,6 +18427,14 @@ }, /turf/open/gm/dirt, /area/lv624/ground/barrens/south_eastern_barrens) +"nha" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/east_caves) "nhi" = ( /obj/structure/flora/bush/ausbushes/genericbush, /turf/open/gm/grass/grass1, @@ -17282,6 +18531,15 @@ }, /turf/open/floor/vault, /area/lv624/lazarus/quartstorage) +"nrR" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = -10; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_east_caves) "nsk" = ( /turf/open/gm/dirt, /area/lv624/ground/river/west_river) @@ -17379,6 +18637,12 @@ icon_state = "whiteyellowcorner" }, /area/lv624/lazarus/corporate_dome) +"nys" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_west_caves) "nzw" = ( /obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, /obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, @@ -17535,6 +18799,12 @@ /obj/structure/flora/grass/tallgrass/jungle, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/south_west_jungle) +"nLF" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) "nLH" = ( /obj/structure/prop/tower, /turf/open/floor{ @@ -17556,6 +18826,16 @@ /obj/structure/flora/jungle/vines/heavy, /turf/closed/wall/r_wall, /area/lv624/lazarus/corporate_dome) +"nNu" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 6; + pixel_y = -8; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/barrens/north_east_barrens) "nNw" = ( /obj/structure/fence, /turf/open/gm/dirtgrassborder/grassdirt_corner/north_west, @@ -17587,6 +18867,16 @@ icon_state = "squareswood" }, /area/lv624/ground/caves/sand_temple) +"nQH" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 6; + pixel_y = -8; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) "nRb" = ( /obj/structure/stairs/perspective{ color = "#b29082"; @@ -17598,6 +18888,13 @@ icon_state = "whiteyellowfull" }, /area/lv624/ground/caves/sand_temple) +"nRA" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/plumphelmet{ + pixel_x = 8; + pixel_y = 13 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/west_caves) "nSg" = ( /obj/structure/window/framed/colony, /turf/open/floor{ @@ -17647,6 +18944,10 @@ icon_state = "white" }, /area/lv624/lazarus/corporate_dome) +"nUZ" = ( +/obj/effect/decal/grass_overlay/grass1, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "nVC" = ( /obj/structure/flora/grass/tallgrass/jungle/corner{ dir = 6 @@ -17777,10 +19078,21 @@ icon_state = "squareswood" }, /area/lv624/ground/caves/sand_temple) +"ofg" = ( +/turf/open/gm/dirt{ + icon_state = "desert1" + }, +/area/lv624/ground/caves/west_caves) "ofv" = ( /obj/effect/landmark/crap_item, /turf/open/gm/grass/grass1, /area/lv624/ground/colony/south_medbay_road) +"ogJ" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 6 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "ogM" = ( /turf/open/gm/dirt, /area/lv624/ground/river/east_river) @@ -17794,6 +19106,21 @@ /obj/structure/flora/bush/ausbushes/var3/stalkybush, /turf/open/gm/dirt, /area/lv624/ground/river/central_river) +"oha" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) +"ohf" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/plumphelmet{ + pixel_x = 8; + pixel_y = 13 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) "ohE" = ( /obj/structure/surface/table/woodentable/poor, /obj/item/reagent_container/food/snacks/tomatomeat, @@ -17817,6 +19144,10 @@ "omK" = ( /turf/open/gm/coast/beachcorner/south_east, /area/lv624/ground/barrens/west_barrens) +"onP" = ( +/obj/effect/decal/grass_overlay/grass1, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) "onU" = ( /turf/closed/wall/strata_ice/jungle, /area/lv624/ground/caves/west_caves) @@ -17853,6 +19184,20 @@ icon_state = "asteroidwarning" }, /area/lv624/ground/colony/telecomm/cargo) +"osf" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 11; + pixel_y = -2; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) +"otl" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) "oua" = ( /obj/effect/landmark/crap_item, /turf/open/gm/dirt, @@ -17872,9 +19217,21 @@ /obj/item/stack/sheet/wood, /turf/open/gm/dirt, /area/lv624/lazarus/crashed_ship_containers) +"owe" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/plumphelmet{ + pixel_x = 8 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/west_caves) "owQ" = ( /turf/open/gm/coast/east, /area/lv624/ground/barrens/east_barrens) +"owZ" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 6 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "oxY" = ( /obj/structure/flora/grass/tallgrass/jungle/corner{ dir = 6 @@ -17936,6 +19293,10 @@ }, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/north_west_jungle) +"oDE" = ( +/obj/effect/decal/grass_overlay/grass1, +/turf/open/gm/dirt, +/area/lv624/ground/caves/east_caves) "oDY" = ( /obj/structure/platform_decoration/mineral/sandstone/runed{ dir = 4 @@ -17976,6 +19337,14 @@ "oFf" = ( /turf/open/gm/grass/grass1, /area/lv624/ground/river/east_river) +"oFJ" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "oFO" = ( /obj/structure/platform_decoration/mineral/sandstone/runed{ dir = 1 @@ -18079,6 +19448,10 @@ icon_state = "loadingarea" }, /area/lv624/lazarus/landing_zones/lz1) +"oQm" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/east_caves) "oRH" = ( /turf/open/gm/dirtgrassborder/south, /area/lv624/ground/jungle/north_east_jungle) @@ -18248,6 +19621,10 @@ }, /turf/open/gm/dirtgrassborder/grassdirt_corner/north_east, /area/lv624/ground/barrens/south_eastern_barrens) +"pgc" = ( +/obj/structure/flora/bush/ausbushes/var3/fullgrass, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/barrens/north_east_barrens) "pgf" = ( /obj/structure/machinery/power/apc{ dir = 1; @@ -18281,6 +19658,15 @@ /obj/structure/flora/jungle/plantbot1, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/central_jungle) +"pkU" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 9 + }, +/obj/item/reagent_container/food/snacks/grown/mushroom/plumphelmet{ + pixel_x = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "plf" = ( /obj/structure/flora/jungle/vines/heavy, /turf/open/gm/dirtgrassborder/grassdirt_corner2/south_east, @@ -18319,6 +19705,13 @@ icon_state = "white" }, /area/lv624/lazarus/corporate_dome) +"poX" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 6 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "ppR" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner2/south_east, /area/lv624/ground/colony/north_nexus_road) @@ -18366,6 +19759,11 @@ icon_state = "floor4" }, /area/lv624/lazarus/crashed_ship_containers) +"ptm" = ( +/turf/open/gm/dirt{ + icon_state = "desert0" + }, +/area/lv624/ground/caves/west_caves) "ptr" = ( /obj/structure/flora/bush/ausbushes/palebush, /turf/open/gm/grass/grass1, @@ -18415,10 +19813,18 @@ icon_state = "white" }, /area/lv624/lazarus/medbay) +"pAE" = ( +/obj/structure/flora/bush/ausbushes/var3/leafybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) "pBk" = ( /obj/structure/flora/bush/ausbushes/ppflowers, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/east_central_jungle) +"pBH" = ( +/obj/structure/flora/jungle/plantbot1, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) "pDh" = ( /obj/structure/surface/table/reinforced/prison{ color = "#6b675e" @@ -18457,6 +19863,12 @@ /obj/effect/landmark/hunter_primary, /turf/open/gm/grass/grass1, /area/lv624/lazarus/landing_zones/lz1) +"pET" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 6 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_east_caves) "pEV" = ( /turf/open/floor/strata{ color = "#5e5d5d"; @@ -18466,10 +19878,24 @@ "pFe" = ( /turf/open/gm/dirtgrassborder/west, /area/lv624/ground/jungle/south_east_jungle) +"pFB" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) "pGD" = ( /obj/structure/flora/bush/ausbushes/var3/fernybush, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/north_west_jungle) +"pGL" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_east_caves) "pHn" = ( /obj/effect/decal/cleanable/blood/oil, /turf/open/gm/dirt, @@ -18485,6 +19911,12 @@ icon_state = "whiteblue" }, /area/lv624/lazarus/corporate_dome) +"pIl" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 5 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_west_caves) "pIy" = ( /obj/structure/fence, /turf/open/gm/dirtgrassborder/north, @@ -18493,6 +19925,10 @@ /obj/structure/platform_decoration/mineral/sandstone/runed, /turf/open/floor/sandstone/runed, /area/lv624/ground/barrens/south_eastern_barrens) +"pIB" = ( +/obj/structure/flora/bush/ausbushes/ausbush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) "pIC" = ( /obj/effect/landmark/hunter_secondary, /turf/open/gm/grass/grass1, @@ -18526,6 +19962,15 @@ /obj/structure/fence, /turf/open/gm/dirtgrassborder/grassdirt_corner/south_west, /area/lv624/ground/colony/west_nexus_road) +"pLv" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 4; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_west_caves) "pMM" = ( /obj/structure/flora/bush/ausbushes/ppflowers, /turf/open/gm/dirtgrassborder/east, @@ -18572,6 +20017,10 @@ icon_state = "white" }, /area/lv624/lazarus/corporate_dome) +"pQV" = ( +/obj/structure/flora/bush/ausbushes/palebush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/east_caves) "pRe" = ( /obj/item/storage/firstaid/adv/empty, /obj/structure/machinery/door_control{ @@ -18618,9 +20067,21 @@ }, /turf/open/gm/dirt, /area/lv624/ground/barrens/south_eastern_barrens) +"pRD" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) "pRT" = ( /turf/closed/wall/strata_ice/jungle, /area/lv624/ground/caves/sand_temple) +"pSe" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 5 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_west_caves) "pSt" = ( /obj/structure/fence, /turf/open/gm/dirtgrassborder/grassdirt_corner2/north_west, @@ -18635,6 +20096,15 @@ "pUm" = ( /turf/closed/wall/rock/brown, /area/lv624/ground/caves/east_caves) +"pVZ" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = -10; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) "pXI" = ( /obj/structure/flora/grass/tallgrass/jungle, /turf/open/gm/grass/grass1, @@ -18675,6 +20145,12 @@ /obj/structure/machinery/colony_floodlight, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/east_jungle) +"qdx" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "qdQ" = ( /obj/structure/machinery/colony_floodlight, /turf/open/gm/grass/grass1, @@ -18707,9 +20183,25 @@ /obj/structure/flora/jungle/vines/light_3, /turf/open/floor, /area/lv624/lazarus/landing_zones/lz2) +"qfK" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) "qgA" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner/south_east, /area/lv624/ground/jungle/south_east_jungle) +"qhl" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) +"qiL" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/amanita, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_west_caves) "qjf" = ( /turf/open/floor, /area/lv624/ground/barrens/containers) @@ -18739,6 +20231,14 @@ "qqJ" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner2/south_west, /area/lv624/ground/caves/sand_temple) +"qrH" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_west_caves) "qsM" = ( /obj/structure/platform/mineral/sandstone/runed{ dir = 1 @@ -18748,6 +20248,14 @@ "qtj" = ( /turf/open/gm/dirt, /area/lv624/ground/jungle/south_central_jungle) +"qtK" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/obj/effect/decal/grass_overlay/grass1{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "qtS" = ( /obj/structure/flora/bush/ausbushes/reedbush, /turf/open/gm/grass/grass1, @@ -18932,6 +20440,12 @@ /obj/structure/flora/bush/ausbushes/var3/leafybush, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/north_jungle) +"qJE" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 5 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "qKl" = ( /turf/open/gm/dirtgrassborder/east, /area/lv624/ground/colony/north_nexus_road) @@ -18974,6 +20488,14 @@ icon_state = "whiteyellowfull" }, /area/lv624/ground/caves/sand_temple) +"qPY" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/east_caves) "qRj" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /turf/open/gm/dirt, @@ -18984,6 +20506,16 @@ }, /turf/open/gm/dirt, /area/lv624/lazarus/crashed_ship_containers) +"qSG" = ( +/obj/effect/decal/grass_overlay/grass1, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_west_caves) +"qSS" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_west_caves) "qSZ" = ( /obj/structure/flora/grass/tallgrass/jungle/corner{ dir = 10 @@ -19006,9 +20538,32 @@ "qUM" = ( /turf/open/gm/dirtgrassborder/north, /area/lv624/ground/jungle/west_central_jungle) +"qVh" = ( +/obj/effect/decal/grass_overlay/grass1, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_west_caves) +"qVi" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = -10; + pixel_y = -2; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_east_caves) +"qVN" = ( +/obj/structure/flora/bush/ausbushes/ausbush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_west_caves) "qWf" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner2/south_west, /area/lv624/ground/colony/west_nexus_road) +"qWI" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1/inner, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "qXo" = ( /obj/structure/surface/rack, /obj/item/explosive/grenade/incendiary/molotov, @@ -19025,6 +20580,10 @@ /obj/structure/flora/bush/ausbushes/var3/sparsegrass, /turf/open/gm/grass/grass2, /area/lv624/ground/jungle/south_west_jungle) +"qYS" = ( +/obj/structure/flora/bush/ausbushes/lavendergrass, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_west_caves) "qZv" = ( /obj/structure/flora/grass/tallgrass/jungle, /turf/open/gm/grass/grass1, @@ -19047,6 +20606,16 @@ icon_state = "desert1" }, /area/lv624/ground/barrens/west_barrens) +"rbs" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) +"rby" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_east_caves) "rck" = ( /obj/structure/flora/grass/tallgrass/jungle/corner{ dir = 5 @@ -19103,10 +20672,26 @@ /obj/structure/flora/jungle/vines/heavy, /turf/closed/wall/r_wall, /area/lv624/lazarus/corporate_dome) +"rgj" = ( +/obj/effect/decal/remains/xeno, +/obj/effect/decal/grass_overlay/grass1{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_east_caves) "rgQ" = ( /obj/structure/flora/jungle/plantbot1, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/north_east_jungle) +"rhi" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 4; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/east_caves) "rit" = ( /turf/open/gm/coast/south, /area/lv624/ground/river/central_river) @@ -19127,10 +20712,37 @@ icon_state = "dark" }, /area/lv624/lazarus/engineering) +"rmt" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 4; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) +"rmW" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 11; + pixel_y = -2; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/west_caves) "rox" = ( /obj/structure/flora/jungle/vines/light_1, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/south_central_jungle) +"roQ" = ( +/obj/structure/flora/bush/ausbushes/lavendergrass, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) +"rpx" = ( +/obj/effect/decal/grass_overlay/grass1, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) "rpR" = ( /obj/structure/flora/jungle/vines/heavy, /turf/open/floor{ @@ -19186,6 +20798,9 @@ /obj/effect/landmark/structure_spawner/xvx_hive/xeno_nest, /obj/effect/landmark/structure_spawner/setup/distress/xeno_nest, /obj/effect/landmark/corpsespawner/wygoon, +/obj/effect/decal/grass_overlay/grass1{ + dir = 10 + }, /turf/open/gm/dirt, /area/lv624/ground/caves/east_caves) "rwB" = ( @@ -19199,6 +20814,11 @@ icon_state = "desert_dug" }, /area/lv624/ground/barrens/south_eastern_barrens) +"ryp" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) "ryJ" = ( /obj/structure/surface/table, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, @@ -19213,6 +20833,12 @@ }, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/south_west_jungle) +"rze" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/obj/effect/decal/grass_overlay/grass1, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) "rzT" = ( /obj/structure/flora/jungle/vines/light_3, /obj/item/stack/sheet/wood{ @@ -19235,6 +20861,16 @@ icon_state = "asteroidfloor" }, /area/lv624/lazarus/corporate_dome) +"rAU" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 6; + pixel_y = -8; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/east_caves) "rBF" = ( /obj/structure/flora/jungle/vines/light_2, /turf/open/gm/grass/grass1, @@ -19253,6 +20889,13 @@ "rCV" = ( /turf/open/gm/grass/grass2, /area/lv624/ground/jungle/south_central_jungle) +"rER" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 6 + }, +/obj/structure/flora/bush/ausbushes/reedbush, +/turf/open/gm/dirt, +/area/lv624/ground/caves/east_caves) "rGd" = ( /obj/structure/girder/displaced, /obj/structure/shuttle/engine/propulsion, @@ -19271,6 +20914,16 @@ }, /turf/open/floor/vault, /area/lv624/lazarus/quartstorage) +"rGE" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 6; + pixel_y = -8; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_east_caves) "rGW" = ( /obj/structure/flora/jungle/vines/light_3, /turf/open/gm/dirtgrassborder/south, @@ -19284,11 +20937,34 @@ /obj/structure/flora/jungle/vines/heavy, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/south_central_jungle) +"rHV" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_west_caves) +"rIc" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) +"rIm" = ( +/obj/effect/decal/grass_overlay/grass1/inner, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) "rIq" = ( /obj/structure/flora/jungle/vines/light_1, /obj/structure/flora/jungle/vines/heavy, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/west_central_jungle) +"rID" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 5 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/east_caves) "rJd" = ( /obj/structure/bed/alien{ color = "#aba9a9" @@ -19381,6 +21057,13 @@ /obj/structure/flora/jungle/vines/heavy, /turf/open/gm/dirtgrassborder/south, /area/lv624/ground/colony/north_tcomms_road) +"rTT" = ( +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) +"rUX" = ( +/obj/structure/flora/bush/ausbushes/genericbush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) "rVH" = ( /obj/structure/transmitter/colony_net{ phone_category = "Lazarus Landing"; @@ -19393,6 +21076,12 @@ icon_state = "brown" }, /area/lv624/lazarus/comms) +"rWs" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "rWW" = ( /obj/structure/flora/bush/ausbushes/grassybush, /turf/open/gm/river, @@ -19402,6 +21091,11 @@ /obj/structure/flora/jungle/vines/light_3, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/west_central_jungle) +"rYe" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_east_caves) "rYA" = ( /obj/structure/platform/mineral/sandstone/runed{ dir = 1 @@ -19434,6 +21128,12 @@ icon_state = "white" }, /area/lv624/lazarus/corporate_dome) +"scs" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "sdh" = ( /obj/structure/barricade/sandbags/wired, /turf/open/floor/wood, @@ -19467,6 +21167,16 @@ /obj/structure/fence, /turf/open/gm/dirtgrassborder/grassdirt_corner/north_west, /area/lv624/ground/colony/north_nexus_road) +"sgU" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/plumphelmet, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) +"shb" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/obj/effect/decal/grass_overlay/grass1, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) "shq" = ( /obj/structure/flora/grass/tallgrass/jungle/corner{ dir = 10 @@ -19497,6 +21207,15 @@ }, /turf/open/floor/sandstone/runed, /area/lv624/ground/caves/sand_temple) +"snc" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 4; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) "sne" = ( /obj/item/ammo_casing/bullet{ icon_state = "cartridge_10_1" @@ -19518,10 +21237,26 @@ icon_state = "cult" }, /area/lv624/lazarus/armory) +"soz" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/obj/effect/decal/grass_overlay/grass1, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) +"soY" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "spm" = ( /obj/structure/flora/jungle/alienplant1, /turf/open/gm/river, /area/lv624/ground/barrens/east_barrens) +"spK" = ( +/obj/effect/decal/grass_overlay/grass1/inner, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "sqj" = ( /turf/open/gm/river, /area/lv624/ground/river/central_river) @@ -19551,6 +21286,12 @@ icon_state = "whiteyellowfull" }, /area/lv624/ground/caves/sand_temple) +"srn" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) "ssc" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner2/north_west, /area/lv624/ground/jungle/east_central_jungle) @@ -19558,6 +21299,11 @@ /obj/structure/flora/jungle/vines/light_3, /turf/closed/wall/mineral/sandstone/runed, /area/lv624/ground/caves/sand_temple) +"stt" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_west_caves) "suv" = ( /obj/structure/flora/jungle/vines/light_1, /turf/open/gm/grass/grass2, @@ -19575,9 +21321,21 @@ /obj/structure/flora/bush/ausbushes/var3/ywflowers, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/north_jungle) +"sxl" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/obj/effect/decal/grass_overlay/grass1{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "sxn" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner2/south_west, /area/lv624/ground/barrens/south_eastern_barrens) +"sxo" = ( +/obj/structure/flora/bush/ausbushes/var3/leafybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_east_caves) "sxY" = ( /obj/structure/surface/rack, /obj/item/moneybag, @@ -19595,6 +21353,16 @@ /obj/structure/fence, /turf/open/gm/dirtgrassborder/north, /area/lv624/ground/colony/south_medbay_road) +"sAh" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_east_caves) +"sAI" = ( +/obj/structure/flora/jungle/planttop1, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) "sBg" = ( /obj/structure/machinery/vending/cigarette, /obj/structure/machinery/light{ @@ -19613,6 +21381,9 @@ /obj/structure/flora/bush/ausbushes/var3/leafybush, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/south_central_jungle) +"sBY" = ( +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_west_caves) "sCg" = ( /obj/structure/stairs/perspective{ color = "#b29082"; @@ -19642,10 +21413,23 @@ /obj/structure/flora/bush/ausbushes/var3/brflowers, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/south_central_jungle) +"sET" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) "sFc" = ( /obj/structure/flora/bush/ausbushes/var3/stalkybush, /turf/open/gm/river, /area/lv624/ground/river/west_river) +"sFD" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) "sFY" = ( /obj/structure/machinery/door/airlock/almayer/engineering/colony{ name = "\improper Workshop Storage"; @@ -19699,6 +21483,19 @@ /obj/effect/landmark/structure_spawner/xvx_hive/xeno_core, /turf/open/gm/dirt, /area/lv624/ground/caves/central_caves) +"sLT" = ( +/obj/structure/flora/bush/ausbushes/palebush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_west_caves) +"sLU" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/obj/effect/decal/grass_overlay/grass1{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "sLX" = ( /obj/structure/bed/chair/comfy/black{ dir = 8 @@ -19716,6 +21513,12 @@ }, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/north_east_jungle) +"sNq" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/west_caves) "sOp" = ( /obj/structure/flora/jungle/planttop1, /turf/open/gm/grass/grass1, @@ -19739,6 +21542,10 @@ /obj/structure/flora/bush/ausbushes/ausbush, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/south_east_jungle) +"sPK" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/angel, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) "sRH" = ( /obj/structure/flora/bush/ausbushes/palebush, /turf/open/gm/grass/grass1, @@ -19773,6 +21580,19 @@ /obj/structure/window/framed/colony/reinforced, /turf/open/floor, /area/lv624/lazarus/hydroponics) +"sVx" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_membrane, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_membrane, +/obj/effect/decal/grass_overlay/grass1{ + dir = 1 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) +"sWk" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/lv624/lazarus/secure_storage) "sWy" = ( /obj/effect/landmark/monkey_spawn, /turf/open/gm/grass/grass1, @@ -19804,6 +21624,16 @@ icon_state = "squareswood" }, /area/lv624/ground/caves/sand_temple) +"sXg" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = -10; + pixel_y = -2; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/west_caves) "sXi" = ( /obj/structure/flora/grass/tallgrass/jungle/corner{ dir = 1 @@ -19833,6 +21663,16 @@ /obj/structure/flora/jungle/vines/heavy, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/south_east_jungle) +"tcF" = ( +/obj/structure/flora/bush/ausbushes/var3/brflowers, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_west_caves) +"tde" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 6 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) "tdX" = ( /obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, /obj/effect/landmark/structure_spawner/setup/distress/xeno_door, @@ -19885,6 +21725,16 @@ /obj/effect/landmark/lv624/fog_blocker, /turf/open/gm/coast/north, /area/lv624/ground/river/west_river) +"thk" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = -5; + pixel_y = -5; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) "thn" = ( /obj/item/weapon/sword{ pixel_x = -6; @@ -19913,6 +21763,13 @@ icon_state = "multi_tiles" }, /area/lv624/ground/caves/sand_temple) +"thI" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 1 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_west_caves) "thS" = ( /obj/structure/barricade/handrail/strata{ dir = 8 @@ -19920,12 +21777,6 @@ /obj/structure/barricade/handrail/strata, /turf/open/gm/dirtgrassborder/grassdirt_corner/south_west, /area/lv624/ground/barrens/south_eastern_barrens) -"tiw" = ( -/mob/living/simple_animal/bat, -/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, -/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, -/turf/open/gm/dirt, -/area/lv624/ground/caves/north_west_caves) "tka" = ( /obj/item/ammo_casing/bullet{ icon_state = "casing_9_1" @@ -19938,6 +21789,10 @@ }, /turf/open/gm/dirt, /area/lv624/ground/jungle/north_west_jungle) +"tlk" = ( +/obj/structure/flora/bush/ausbushes/reedbush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/west_caves) "tlD" = ( /obj/structure/flora/bush/ausbushes/var3/fernybush, /turf/open/gm/river, @@ -19961,6 +21816,11 @@ }, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/east_central_jungle) +"tnY" = ( +/turf/open/gm/dirt{ + icon_state = "desert3" + }, +/area/lv624/ground/caves/west_caves) "toz" = ( /obj/structure/flora/bush/ausbushes/pointybush, /turf/open/gm/grass/grass1, @@ -19990,6 +21850,10 @@ /obj/structure/flora/jungle/plantbot1, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/west_central_jungle) +"tqQ" = ( +/obj/effect/decal/grass_overlay/grass1/inner, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_east_caves) "trs" = ( /obj/item/tool/shovel, /turf/open/gm/dirt, @@ -20012,6 +21876,13 @@ /obj/structure/fence, /turf/open/gm/dirtgrassborder/west, /area/lv624/ground/colony/north_nexus_road) +"tti" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/plumphelmet{ + pixel_x = 8; + pixel_y = 13 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) "ttu" = ( /obj/structure/flora/jungle/vines/light_1, /turf/open/gm/grass/grass1, @@ -20027,6 +21898,16 @@ /obj/structure/barricade/handrail/strata, /turf/open/gm/dirtgrassborder/grassdirt_corner/south_east, /area/lv624/ground/barrens/south_eastern_barrens) +"tuJ" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = -5; + pixel_y = -5; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_east_caves) "tuX" = ( /obj/effect/landmark/crap_item, /turf/open/floor/wood{ @@ -20102,6 +21983,14 @@ }, /turf/open/gm/dirt, /area/lv624/ground/barrens/south_eastern_barrens) +"tEm" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/obj/effect/decal/grass_overlay/grass1{ + dir = 6 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/east_caves) "tEn" = ( /obj/structure/flora/jungle/vines/light_3, /turf/open/floor{ @@ -20201,10 +22090,38 @@ icon_state = "whiteyellowfull" }, /area/lv624/ground/barrens/south_eastern_barrens) +"tMQ" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) "tOS" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /turf/open/gm/dirt, /area/lv624/ground/caves/west_caves) +"tOV" = ( +/obj/structure/flora/bush/ausbushes/lavendergrass, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) +"tPH" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_membrane, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_membrane, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) +"tQU" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 2; + pixel_y = 7; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) "tRu" = ( /obj/effect/landmark/hunter_primary, /obj/structure/flora/jungle/vines/heavy, @@ -20214,9 +22131,20 @@ /obj/effect/decal/cleanable/blood/gibs/xeno, /turf/open/gm/dirt, /area/lv624/ground/jungle/north_west_jungle) +"tRM" = ( +/obj/structure/flora/bush/ausbushes/palebush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/west_caves) "tSd" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner/south_west, /area/lv624/lazarus/quartstorage/outdoors) +"tSi" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_east_caves) "tSN" = ( /obj/structure/flora/bush/ausbushes/var3/ywflowers, /turf/open/gm/grass/grass1, @@ -20231,6 +22159,12 @@ /obj/structure/flora/jungle/vines/heavy, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/east_central_jungle) +"tVw" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) "tWw" = ( /obj/effect/decal/cleanable/blood/drip, /turf/open/floor{ @@ -20254,8 +22188,17 @@ /area/lv624/lazarus/crashed_ship_containers) "tYx" = ( /obj/effect/landmark/objective_landmark/medium, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 4 + }, /turf/open/gm/dirt, /area/lv624/ground/caves/central_caves) +"tYW" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 6 + }, +/turf/open/gm/dirt, +/area/lv624/ground/barrens/north_east_barrens) "tZa" = ( /obj/structure/flora/bush/ausbushes/var3/stalkybush, /turf/open/gm/coast/beachcorner/south_east, @@ -20267,6 +22210,10 @@ "tZD" = ( /turf/closed/wall/r_wall, /area/lv624/lazarus/landing_zones/lz2) +"uaL" = ( +/obj/structure/flora/bush/ausbushes/lavendergrass, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/west_caves) "uaP" = ( /obj/structure/flora/bush/ausbushes/var3/fernybush, /turf/open/gm/grass/grass1, @@ -20391,6 +22338,14 @@ icon_state = "desert1" }, /area/lv624/ground/barrens/south_eastern_barrens) +"ukY" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "ukZ" = ( /turf/open/floor{ dir = 1; @@ -20432,6 +22387,10 @@ /obj/structure/flora/jungle/vines/heavy, /turf/open/gm/dirtgrassborder/south, /area/lv624/ground/jungle/east_jungle) +"uop" = ( +/obj/structure/flora/bush/ausbushes/reedbush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/east_caves) "upM" = ( /obj/effect/landmark/crap_item, /turf/open/gm/grass/grass1, @@ -20449,6 +22408,10 @@ }, /turf/open/gm/dirt, /area/lv624/ground/jungle/east_jungle) +"uqm" = ( +/obj/structure/flora/bush/ausbushes/var3/fullgrass, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) "urR" = ( /turf/open/floor/corsat{ dir = 1; @@ -20479,6 +22442,12 @@ "uvh" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner/south_west, /area/lv624/ground/barrens/south_eastern_barrens) +"uwG" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 6 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) "uxh" = ( /obj/structure/flora/bush/ausbushes/var3/brflowers, /turf/open/gm/grass/grass1, @@ -20488,6 +22457,16 @@ /obj/effect/landmark/corpsespawner/security/liaison, /turf/open/floor/wood, /area/lv624/ground/caves/north_central_caves) +"uxL" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 11; + pixel_y = -2; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) "uxT" = ( /obj/effect/landmark/lv624/fog_blocker, /turf/open/gm/coast/east, @@ -20498,6 +22477,12 @@ "uya" = ( /turf/open/gm/dirt, /area/lv624/lazarus/crashed_ship_containers) +"uyn" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_east_caves) "uzH" = ( /turf/open/floor/plating{ dir = 8; @@ -20507,6 +22492,11 @@ "uAp" = ( /turf/closed/wall/strata_ice/jungle, /area/lv624/ground/barrens/south_eastern_barrens) +"uBR" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/east_caves) "uDd" = ( /obj/structure/showcase{ desc = "An ancient, dusty tomb with strange alien writing. It's best not to touch it."; @@ -20568,6 +22558,12 @@ icon_state = "whitebluecorner" }, /area/lv624/lazarus/corporate_dome) +"uHc" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) "uHI" = ( /obj/structure/flora/bush/ausbushes/var3/leafybush, /turf/open/gm/grass/grass2, @@ -20590,11 +22586,17 @@ }, /turf/open/gm/grass/grass2, /area/lv624/ground/jungle/north_jungle) +"uMd" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "uMz" = ( /obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, /obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, /obj/effect/landmark/structure_spawner/setup/distress/xeno_door, -/turf/open/gm/dirt, +/turf/open/auto_turf/strata_grass/layer1, /area/lv624/ground/caves/central_caves) "uMD" = ( /obj/structure/flora/jungle/vines/light_3, @@ -20605,6 +22607,20 @@ /obj/structure/flora/jungle/vines/light_3, /turf/open/gm/dirtgrassborder/grassdirt_corner/south_east, /area/lv624/ground/caves/sand_temple) +"uOl" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 5 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) +"uOu" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/libertycap, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_west_caves) +"uOD" = ( +/obj/structure/flora/bush/ausbushes/var3/fullgrass, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) "uOK" = ( /obj/effect/landmark/objective_landmark/close, /turf/open/floor{ @@ -20615,6 +22631,10 @@ /obj/structure/machinery/colony_floodlight, /turf/open/gm/grass/grass1, /area/lv624/ground/colony/west_tcomms_road) +"uRe" = ( +/obj/effect/decal/grass_overlay/grass1, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "uRE" = ( /turf/open/gm/dirtgrassborder/west, /area/lv624/lazarus/landing_zones/lz2) @@ -20687,12 +22707,19 @@ "uWJ" = ( /turf/closed/wall/strata_ice/jungle, /area/lv624/ground/caves/south_west_caves) +"uXV" = ( +/obj/structure/flora/bush/ausbushes/lavendergrass, +/turf/open/gm/dirt, +/area/lv624/ground/jungle/south_central_jungle) "uXW" = ( /obj/structure/barricade/sandbags/wired, /turf/open/floor/wood{ icon_state = "wood-broken" }, /area/lv624/ground/caves/north_central_caves) +"uYj" = ( +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_east_caves) "uYC" = ( /obj/structure/flora/grass/tallgrass/jungle/corner{ dir = 6 @@ -20739,10 +22766,22 @@ }, /turf/open/gm/dirt, /area/lv624/ground/jungle/east_jungle) +"vbK" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/obj/effect/decal/grass_overlay/grass1, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "vcY" = ( /obj/structure/machinery/colony_floodlight, /turf/open/gm/grass/grass1, /area/lv624/lazarus/landing_zones/lz2) +"vdt" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_east_caves) "vdy" = ( /obj/structure/machinery/door/airlock/almayer/engineering/colony{ dir = 1; @@ -20801,6 +22840,19 @@ /obj/structure/girder, /turf/open/gm/dirt, /area/lv624/lazarus/crashed_ship_containers) +"vih" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) +"viC" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/obj/effect/decal/grass_overlay/grass1/inner, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_east_caves) "vjH" = ( /obj/structure/flora/jungle/vines/light_3, /turf/open/gm/grass/grass1, @@ -20828,6 +22880,25 @@ /obj/effect/landmark/objective_landmark/far, /turf/open/gm/dirt, /area/lv624/ground/jungle/south_central_jungle) +"vkS" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 10 + }, +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 2; + pixel_y = 7; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_east_caves) +"vle" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "vly" = ( /obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, /obj/effect/landmark/structure_spawner/setup/distress/xeno_door, @@ -20866,6 +22937,14 @@ /obj/structure/flora/bush/ausbushes/ausbush, /turf/open/gm/grass/grass1, /area/lv624/ground/barrens/south_eastern_barrens) +"vtk" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/obj/effect/decal/grass_overlay/grass1{ + dir = 6 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) "vtt" = ( /obj/structure/flora/jungle/vines/light_2, /turf/open/gm/grass/grass1, @@ -20900,6 +22979,13 @@ }, /turf/open/gm/grass/grass1, /area/lv624/lazarus/landing_zones/lz2) +"vxj" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) "vxU" = ( /obj/structure/flora/bush/ausbushes/lavendergrass, /turf/open/gm/grass/grass1, @@ -20911,6 +22997,25 @@ icon_state = "vault" }, /area/lv624/lazarus/quartstorage) +"vAg" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_east_caves) +"vAB" = ( +/obj/structure/flora/bush/ausbushes/var3/fullgrass, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) +"vAT" = ( +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_east_caves) +"vBd" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "vBe" = ( /turf/open/gm/dirtgrassborder/east, /area/lv624/ground/jungle/east_central_jungle) @@ -20957,6 +23062,19 @@ }, /turf/open/gm/grass/grass1, /area/lv624/lazarus/landing_zones/lz1) +"vGj" = ( +/obj/structure/flora/bush/ausbushes/ppflowers, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_west_caves) +"vGy" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 1 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_west_caves) "vHe" = ( /obj/structure/surface/rack, /obj/item/stack/sheet/plasteel{ @@ -21006,10 +23124,23 @@ /obj/effect/landmark/structure_spawner/setup/distress/xeno_door, /turf/open/gm/dirt, /area/lv624/ground/caves/south_west_caves) +"vNs" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_west_caves) "vNP" = ( /obj/effect/landmark/monkey_spawn, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/east_jungle) +"vNT" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 1 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_east_caves) "vNW" = ( /obj/structure/flora/bush/ausbushes/grassybush, /turf/open/gm/grass/grass1, @@ -21021,6 +23152,14 @@ "vOF" = ( /turf/open/gm/dirtgrassborder/west, /area/lv624/ground/jungle/south_central_jungle) +"vPo" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/obj/effect/decal/grass_overlay/grass1{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) "vPu" = ( /obj/effect/landmark/objective_landmark/close, /turf/open/floor, @@ -21028,10 +23167,18 @@ "vPV" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner2/south_west, /area/lv624/ground/jungle/east_jungle) +"vQR" = ( +/obj/structure/flora/bush/ausbushes/var3/sunnybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_east_caves) "vSG" = ( /obj/structure/flora/jungle/vines/light_1, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/north_east_jungle) +"vUj" = ( +/obj/structure/flora/bush/ausbushes/var3/sparsegrass, +/turf/open/gm/dirtgrassborder/south, +/area/lv624/ground/jungle/south_west_jungle) "vUw" = ( /obj/structure/flora/bush/ausbushes/var3/fullgrass, /turf/open/gm/dirt, @@ -21045,6 +23192,9 @@ /obj/effect/landmark/objective_landmark/medium, /turf/open/floor/greengrid, /area/lv624/lazarus/secure_storage) +"vVe" = ( +/turf/open/gm/dirtgrassborder/grassdirt_corner/south_east, +/area/lv624/ground/jungle/south_central_jungle) "vVf" = ( /turf/open/floor{ dir = 5; @@ -21069,6 +23219,12 @@ /obj/structure/flora/jungle/vines/light_3, /turf/closed/wall/strata_ice/jungle, /area/lv624/ground/jungle/east_jungle) +"vXP" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_west_caves) "vXW" = ( /obj/structure/flora/jungle/vines/light_3, /obj/structure/flora/jungle/vines/heavy, @@ -21078,6 +23234,18 @@ /obj/effect/landmark/objective_landmark/close, /turf/open/gm/dirt, /area/lv624/ground/caves/south_west_caves) +"waw" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_west_caves) +"wbg" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 1 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) "wbK" = ( /obj/structure/flora/jungle/vines/heavy, /turf/open/gm/grass/grass1, @@ -21133,6 +23301,16 @@ }, /turf/open/gm/dirtgrassborder/grassdirt_corner/south_west, /area/lv624/ground/caves/sand_temple) +"whk" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 2; + pixel_y = 7; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_west_caves) "whr" = ( /obj/item/ammo_magazine/smg/mp5, /obj/item/ammo_magazine/smg/mp5, @@ -21149,6 +23327,10 @@ icon_state = "desert2" }, /area/lv624/ground/barrens/south_eastern_barrens) +"whx" = ( +/obj/structure/flora/bush/ausbushes/lavendergrass, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_east_caves) "whQ" = ( /obj/structure/flora/bush/ausbushes/var3/sunnybush{ desc = "The oranges aren't done yet... this sucks."; @@ -21243,9 +23425,19 @@ icon_state = "multi_tiles" }, /area/lv624/ground/caves/sand_temple) +"woT" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/east_caves) "wpw" = ( /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/south_east_jungle) +"wpY" = ( +/obj/structure/flora/bush/ausbushes/var3/leafybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/barrens/north_east_barrens) "wqy" = ( /obj/structure/flora/bush/ausbushes/reedbush, /turf/open/gm/dirt, @@ -21267,6 +23459,10 @@ /obj/structure/flora/jungle/vines/light_2, /turf/closed/wall/strata_ice/jungle, /area/lv624/ground/jungle/north_east_jungle) +"wty" = ( +/obj/structure/flora/bush/ausbushes/ppflowers, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) "wtK" = ( /obj/structure/surface/table/reinforced/prison, /obj/item/storage/fancy/cigarettes/wypacket{ @@ -21300,18 +23496,16 @@ /obj/structure/flora/jungle/vines/heavy, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/north_west_jungle) -"wAe" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/machinery/door_control{ - id = "secure_inner_blast"; - name = "Secure Inner Doors"; - pixel_x = -25; - pixel_y = 5 - }, -/turf/open/floor{ - icon_state = "white" +"wzI" = ( +/obj/structure/flora/bush/ausbushes/var3/ywflowers, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) +"wAF" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 1 }, -/area/lv624/lazarus/research) +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_west_caves) "wAI" = ( /obj/structure/flora/jungle/vines/light_2, /turf/open/gm/dirtgrassborder/south, @@ -21324,6 +23518,12 @@ /obj/item/clothing/suit/armor/yautja_flavor, /turf/open/floor/sandstone/runed, /area/lv624/ground/barrens/south_eastern_barrens) +"wCs" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 6 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/east_caves) "wEO" = ( /obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, /obj/effect/landmark/structure_spawner/setup/distress/xeno_door, @@ -21349,12 +23549,28 @@ icon_state = "wood-broken3" }, /area/lv624/ground/caves/north_central_caves) +"wHh" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 6 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "wHp" = ( /turf/open/floor/plating{ dir = 1; icon_state = "asteroidfloor" }, /area/lv624/lazarus/landing_zones/lz2) +"wHE" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = -1; + pixel_y = 7; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) "wJA" = ( /obj/structure/flora/jungle/vines/light_3, /obj/structure/window/framed/colony/reinforced, @@ -21389,10 +23605,24 @@ icon_state = "asteroidwarning" }, /area/lv624/lazarus/landing_zones/lz2) +"wLT" = ( +/obj/structure/flora/bush/ausbushes/var3/fullgrass, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_east_caves) "wMk" = ( /obj/structure/flora/jungle/vines/heavy, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/west_central_jungle) +"wMr" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 2; + pixel_y = 7; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_east_caves) "wNp" = ( /obj/effect/landmark/objective_landmark/medium, /turf/open/gm/dirt, @@ -21435,6 +23665,18 @@ /obj/structure/flora/bush/ausbushes/grassybush, /turf/open/gm/grass/grass2, /area/lv624/ground/jungle/south_west_jungle) +"wQK" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 1 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) +"wRb" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) "wSg" = ( /obj/structure/inflatable/popped, /turf/open/gm/dirt, @@ -21568,6 +23810,18 @@ /obj/structure/flora/jungle/vines/light_3, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/south_east_jungle) +"wYz" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 1 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_west_caves) +"wYB" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 5 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_east_caves) "wZc" = ( /obj/structure/flora/bush/ausbushes/var3/brflowers, /turf/open/gm/grass/grass1, @@ -21585,6 +23839,10 @@ }, /turf/open/gm/dirt, /area/lv624/ground/barrens/south_eastern_barrens) +"xar" = ( +/obj/effect/decal/grass_overlay/grass1/inner, +/turf/open/gm/dirt, +/area/lv624/ground/caves/east_caves) "xbu" = ( /obj/item/shard, /turf/open/floor{ @@ -21599,6 +23857,10 @@ /obj/structure/flora/bush/ausbushes/pointybush, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/south_east_jungle) +"xdb" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) "xdO" = ( /turf/open/gm/dirtgrassborder/south, /area/lv624/ground/jungle/south_west_jungle) @@ -21635,6 +23897,17 @@ "xgE" = ( /turf/closed/wall/r_wall, /area/lv624/lazarus/corporate_dome) +"xhc" = ( +/mob/living/simple_animal/bat, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 1 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/north_west_caves) +"xhv" = ( +/obj/effect/decal/grass_overlay/grass1, +/turf/open/gm/dirt, +/area/lv624/ground/barrens/north_east_barrens) "xhC" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner/south_east, /area/lv624/ground/barrens/south_eastern_barrens) @@ -21645,6 +23918,10 @@ icon_state = "whiteyellow" }, /area/lv624/lazarus/corporate_dome) +"xmK" = ( +/obj/structure/flora/bush/ausbushes/grassybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/east_caves) "xov" = ( /obj/effect/landmark/hunter_primary, /turf/open/gm/dirt, @@ -21713,6 +23990,10 @@ "xwr" = ( /turf/open/gm/dirt, /area/lv624/ground/barrens/west_barrens) +"xwN" = ( +/obj/structure/flora/bush/ausbushes/var3/brflowers, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/east_caves) "xwQ" = ( /obj/structure/surface/table/reinforced/prison, /obj/item/handcuffs/cable/white{ @@ -21732,6 +24013,14 @@ icon_state = "whiteyellow" }, /area/lv624/lazarus/corporate_dome) +"xyH" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/obj/effect/decal/grass_overlay/grass1{ + dir = 1 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "xyI" = ( /obj/item/ammo_magazine/rifle/nsg23{ current_rounds = 0 @@ -21755,6 +24044,10 @@ "xBm" = ( /turf/open/gm/river, /area/lv624/ground/barrens/west_barrens) +"xBO" = ( +/obj/structure/flora/bush/ausbushes/palebush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_west_caves) "xCF" = ( /obj/item/ammo_magazine/smg/mp5, /obj/item/weapon/gun/smg/mp5, @@ -21786,10 +24079,23 @@ /obj/structure/flora/jungle/vines/heavy, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/east_central_jungle) +"xGL" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 6 + }, +/obj/effect/decal/grass_overlay/grass1{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/east_caves) "xHa" = ( /obj/effect/landmark/crap_item, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/north_west_jungle) +"xHW" = ( +/obj/structure/flora/bush/ausbushes/var3/brflowers, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/west_caves) "xJA" = ( /obj/effect/landmark/lv624/fog_blocker, /turf/open/gm/river, @@ -21808,14 +24114,36 @@ /obj/structure/flora/jungle/vines/light_3, /turf/open/gm/dirtgrassborder/east, /area/lv624/ground/jungle/west_jungle) +"xKL" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/west_caves) "xLi" = ( /obj/structure/surface/rack, /obj/item/storage/box/lights/mixed, /turf/open/floor/vault, /area/lv624/lazarus/quartstorage) +"xLT" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/lv624/lazarus/secure_storage) +"xNi" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/effect/decal/grass_overlay/grass1{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/barrens/north_east_barrens) "xNK" = ( /turf/open/gm/dirt, /area/lv624/ground/barrens/containers) +"xNQ" = ( +/obj/structure/flora/bush/ausbushes/var3/sparsegrass, +/turf/open/gm/dirtgrassborder/east, +/area/lv624/ground/jungle/south_central_jungle) "xPk" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner2/north_west, /area/lv624/ground/colony/south_medbay_road) @@ -21844,12 +24172,22 @@ }, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/east_jungle) +"xRe" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "xRo" = ( /obj/structure/flora/grass/tallgrass/jungle/corner{ dir = 1 }, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/south_central_jungle) +"xSk" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/north_east_caves) "xSA" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, @@ -21883,6 +24221,12 @@ "xVN" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner2/south_west, /area/lv624/ground/jungle/south_central_jungle) +"xWy" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 1 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "xXB" = ( /obj/structure/flora/bush/ausbushes/var3/sunnybush, /turf/open/gm/grass/grass1, @@ -21894,6 +24238,12 @@ /obj/structure/flora/jungle/vines/light_2, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/east_central_jungle) +"xYD" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_west_caves) "xZE" = ( /obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, /obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, @@ -21922,8 +24272,14 @@ /area/lv624/ground/barrens/south_eastern_jungle_barrens) "ydz" = ( /obj/structure/blocker/forcefield/multitile_vehicles, -/turf/open/gm/dirt, +/turf/open/auto_turf/strata_grass/layer1, /area/lv624/ground/caves/central_caves) +"yfe" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_east_caves) "yfH" = ( /turf/open/shuttle{ icon_state = "floor4" @@ -21961,6 +24317,11 @@ icon_state = "purple" }, /area/lv624/lazarus/sleep_female) +"yhT" = ( +/turf/open/gm/dirt{ + icon_state = "desert2" + }, +/area/lv624/ground/caves/west_caves) "yhY" = ( /obj/structure/inflatable/door, /turf/open/gm/dirt, @@ -21993,6 +24354,10 @@ /obj/structure/fence, /turf/open/gm/dirtgrassborder/grassdirt_corner2/north_east, /area/lv624/ground/colony/west_tcomms_road) +"yjs" = ( +/obj/structure/flora/bush/ausbushes/pointybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) "yjN" = ( /obj/structure/flora/jungle/vines/heavy, /obj/structure/machinery/door/airlock/sandstone/runed/destroyable{ @@ -23264,7 +25629,7 @@ mdQ mdQ gwP gwP -gwP +yhT mdQ mdQ mdQ @@ -23716,10 +26081,10 @@ gwP gwP gwP tOS -gwP -gwP -gwP -tOS +vle +qdx +qdx +hyF gwP gwP gwP @@ -23942,18 +26307,18 @@ gwP gwP gwP gwP +vle +qdx +cHW +dOA +dmT +grW +xKL gwP -gwP -gwP -gwP -gwP -gwP -gwP -gwP -gwP +yhT tOS gwP -gwP +ptm gwP gwP gwP @@ -24165,19 +26530,19 @@ mdQ mdQ mdQ gwP +ptm gwP -gwP -gwP +tnY tOS gwP -gwP -gwP -gwP -gwP -gwP -gwP -gwP -gwP +wQK +cQB +dmT +dmT +rmW +ndk +grW +xKL gwP gwP gwP @@ -24213,7 +26578,7 @@ amy ane ane ane -ahF +krs ahF ane ane @@ -24398,14 +26763,14 @@ gwP gwP gwP gwP -gwP +wQK mdQ mdQ onU onU -gwP -gwP -gwP +owe +dmT +uRe gwP gwP gwP @@ -24433,7 +26798,7 @@ nBh afV ahF ahF -ahF +aYI ahF ahF ahF @@ -24623,23 +26988,23 @@ gwP gwP gwP gwP -gwP -gwP -gwP +vle +qdx +qdx mdQ mdQ mdQ onU onU mdQ -gwP -tOS +dmT +igN gwP gwP mdQ gwP gwP -gwP +yhT gwP gwP gwP @@ -24850,9 +27215,9 @@ mdQ gwP gwP tOS -gwP -gwP -gwP +vle +amI +dmT mdQ mdQ onU @@ -24860,8 +27225,8 @@ onU onU mdQ mdQ -gwP -gwP +bcb +wHh gwP gwP mdQ @@ -24898,7 +27263,7 @@ ahF ahF ahF ahF -ahF +cCP ahF ane ane @@ -25078,8 +27443,8 @@ gwP gwP gwP gwP -gwP -gwP +wQK +dmT mdQ mdQ onU @@ -25302,13 +27667,13 @@ mdQ mdQ mdQ mdQ +ofg gwP gwP gwP -gwP -gwP -gwP -gwP +wQK +dmT +fRU onU onU onU @@ -25317,7 +27682,7 @@ mdQ gwP gwP gwP -gwP +ptm gwP gwP mdQ @@ -25336,8 +27701,8 @@ afV afV afV afV -ahF -ahF +hRy +aYI ahF afV afV @@ -25530,18 +27895,18 @@ gwP mdQ mdQ gwP +ptm gwP gwP gwP -gwP -gwP -gwP -gwP -gwP -gwP +wQK +dmT +dmT +nRA +htV onU mdQ -gwP +uRe gwP gwP gwP @@ -25562,6 +27927,7 @@ ahF ahF ahF ahF +aYI ahF ahF ahF @@ -25572,8 +27938,7 @@ ahF ahF ahF ahF -ahF -ahF +krs ahF ane ane @@ -25757,19 +28122,19 @@ gwP gwP mdQ mdQ +lav gwP gwP +ofg gwP -gwP -gwP -gwP -tOS -gwP -gwP -gwP -gwP -gwP -gwP +hjo +gvm +qJE +dmT +dmT +dmT +fLh +uRe gwP tOS gwP @@ -25796,7 +28161,7 @@ ahF ahF ahF ahF -ahF +fDT ahF ahF ahF @@ -25992,12 +28357,12 @@ gwP gwP gwP gwP -gwP -gwP -gwP -tOS -gwP -gwP +hjo +qJE +tlk +gRk +owZ +wHh gwP gwP gwP @@ -26022,7 +28387,7 @@ ahF ahF ahF ahF -ahF +krs ahF ahF ahH @@ -26030,14 +28395,14 @@ ahF ahF ahF ahF -ahF +cCP ahF ane +fDT ahF ahF ahF -ahF -ahF +aYI ahF ahF ane @@ -26213,6 +28578,7 @@ gwP gwP gwP aca +ptm gwP gwP gwP @@ -26220,14 +28586,13 @@ gwP gwP gwP gwP +hjo +qhl +qhl +wHh gwP -gwP -gwP -gwP -gwP -gwP -gwP -gwP +ptm +yhT gwP mdQ mdQ @@ -26246,10 +28611,10 @@ ahF ahF ahV ahF -ahF -ahH -ahF -ahF +xYD +gTj +gTj +nys ahF ahF ahF @@ -26472,13 +28837,13 @@ ane ane ahF ahF -ahF -ahF -ahF -ahF -ahF -ahF -ahF +xYD +hmq +lYt +chi +fmW +rHV +nys ePu ahF ahF @@ -26493,9 +28858,9 @@ ane ahF ahF ahF -ahF -ahF -ahF +hRy +hRy +fDT afV ane ane @@ -26640,7 +29005,7 @@ mdQ mdQ mdQ mdQ -gwP +uRe gwP gwP gwP @@ -26699,19 +29064,19 @@ ane ane ane ane -ahF -ahF -ahF -ahF +xYD +lYt +fmW +fmW uWJ +ilF +fmW +rHV +nys ahF ahF ahF -ahF -ahF -ahF -ahF -ahF +aYI ahF ahH ahF @@ -26827,9 +29192,9 @@ abB abB abB abN -abN -abN -abN +pSe +kzn +tcF amk amk amk @@ -26838,7 +29203,7 @@ abM abM abM abM -abN +qVh abN abN abN @@ -26866,9 +29231,9 @@ amk onU onU mdQ -tOS -gwP -gwP +gRk +dmT +uRe gwP gwP gwP @@ -26927,16 +29292,16 @@ ane ane ane ahF -ahF -ahF -ahF +wAF +aIE +fmW uWJ uWJ uWJ -ahF -ahF -ahF -ahF +fmW +fmW +vGj +nys ahF ahF ahF @@ -27052,21 +29417,21 @@ abM abM abB abB -tiw -abN -abN -abN -abN +abB +tgL abN abN +lTv +pLv +sBY amk amk amk amk amk abM -abN -abN +qiL +qVh abQ abN abN @@ -27087,16 +29452,16 @@ abN abN abN abN -abN -abN -abN -abN +cMG +waw +cWs +sBY onU onU onU -gwP -gwP -gwP +lKl +tRM +uRe gwP gwP gwP @@ -27111,11 +29476,11 @@ gwP gwP gwP gwP -gwP -gwP -gwP -gwP -gwP +vle +jvQ +jvQ +jvQ +xKL gwP gwP gwP @@ -27155,20 +29520,20 @@ ane ane ahF ahF -ahF -ahF +wAF +fmW uWJ uWJ uWJ +eoW +fmW +fmW +fmW +rHV +vXP +nys ahF -ahF -ahH -ahF -ahF -ahF -ahF -ahF -ahF +aYI ahF ahF ahF @@ -27284,17 +29649,17 @@ abN abN abN abN -abN -abN -abN -abN -abN +pSe +kzn +sBY +sBY +sBY amk amk -abN -abN -abN -abN +gnt +qVN +sBY +qVh abN abN abN @@ -27314,17 +29679,17 @@ abN abN abN abQ -abN -abN -abN -abN -abN -aca -gwP -gwP -gwP -gwP -gwP +cMG +waw +sBY +sBY +sBY +iGf +dKl +dmT +dmT +owZ +wHh gwP gwP gwP @@ -27337,14 +29702,14 @@ gwP aYC gwP gwP -gwP -gwP -gwP -tOS -gwP -gwP -gwP -gwP +vle +jvQ +pkU +gRk +lLK +dmT +grW +xKL gwP gwP gwP @@ -27382,19 +29747,19 @@ ane ane ahF ahF -ahH -ahF -ahF -ahF -ahF -ahF -ahF -ahF -ahF -ahF -ahF -ahF ahF +doe +pIl +eZg +fmW +fmW +fmW +fmW +fmW +fmW +fmW +fmW +rHV ahF ahF ane @@ -27513,16 +29878,16 @@ abN abN abN abN -abQ -abN -abN -abN -abN -abN -abN -abN -abN -abN +bak +kzn +iXX +sBY +sBY +iNJ +sBY +sBY +frV +klD abN abN abN @@ -27541,17 +29906,17 @@ abN abN abN abN -abN -abN -abN -abN -abQ -abN -aca -gwP -tOS -gwP -gwP +cMG +waw +sBY +sBY +fTN +sBY +iGf +dmT +gRk +owZ +wHh gwP gwP gwP @@ -27565,15 +29930,15 @@ gwP aca gwP gwP -gwP -xZE -xZE -xZE -gwP -gwP -gwP -gwP -gwP +jGU +hhs +hhs +hhs +htV +dOA +fRU +grW +xKL gwP gwP gwP @@ -27609,20 +29974,20 @@ ane ane ane ahF +aYI ahF ahF -ahF -ahF -ahF -ahF -ahF -ahF -ahF -ahF -ahF -ahF -ahF -ahF +doe +pIl +uqm +fmW +fmW +fmW +ikA +fmW +fmW +wty +chi ane ane ane @@ -27635,7 +30000,7 @@ ane ahF ahF ahH -ahF +cCP ahF ane ane @@ -27737,19 +30102,19 @@ abN abN abN abN -abQ -abN -abN -abN -abN -abN -abN -abN -abN -abN -abN -abQ -abN +vNs +bdu +bdu +bdu +jKc +pSe +jLY +jLY +jLY +jLY +jLY +kKa +klD abN abN abN @@ -27768,17 +30133,17 @@ abM abB abN abN -abN -abN -abN -abN -abN -abN -abN -aca -gwP -gwP -gwP +cMG +waw +gvr +uOu +sBY +iNJ +sBY +iGf +owZ +qhl +wHh gwP qaE gwP @@ -27798,11 +30163,11 @@ mdQ onU onU onU -xZE -xZE -xZE -gwP -gwP +hhs +hhs +hhs +grW +jvQ gwP gwP tOS @@ -27841,22 +30206,22 @@ ahF vZT ahF ahF -ahF -ahF -ahF +doe +qSS +pIl dWM -ahF -ahF -ahF -ahF -ahF -ahF +fmW +fmW +fmW +fmW +sAI +pBH ane ane afV afV -ahF -ahF +hRy +krs afV afV ane @@ -27962,16 +30327,16 @@ abN abN abN abN -abN -abN -abN -abN -abN -abN -abN -abN -abN -abN +cMG +bdu +bdu +waw +tcF +sBY +sBY +mgi +bdu +jKc abQ abN abN @@ -27995,11 +30360,11 @@ abN abN dhD abN -abQ -abN -abN -abN -abN +vNs +waw +sBY +sBY +sBY amk abM abM @@ -28028,11 +30393,11 @@ onU onU onU onU -xZE -xZE -xZE -gwP -gwP +hhs +hhs +hhs +grW +xKL gwP gwP gwP @@ -28069,13 +30434,13 @@ ane ane ane ahF +fDT ahF -ahF -ahF -ahF -ahF -ahF -ahF +wAF +fmW +fmW +snc +fmW uWJ uWJ uWJ @@ -28083,7 +30448,7 @@ ane ane afV ahF -ahF +aYI ahF ahF afV @@ -28189,17 +30554,17 @@ abM abN abN abN -abQ -abN -abN -abN -abN -abN -abN -abN -abN -abN -abN +vNs +waw +dIj +sBY +sBY +sBY +sBY +pLv +sBY +sBY +hKP abN abN abN @@ -28222,12 +30587,12 @@ abN abN abQ dhD -abN -abN -abN -abN -abN -abN +cMG +waw +sBY +sBY +sBY +sBY amk amk abM @@ -28258,9 +30623,9 @@ onU onU onU onU -xZE -xZE -gwP +hhs +hhs +uRe gwP gwP gwP @@ -28298,12 +30663,12 @@ afV afV afV ahF -ahF -ahH -ahF -ahF -ahF -ahF +cCP +wAF +fmW +fmW +jCO +uqm uWJ ane ane @@ -28417,17 +30782,17 @@ abM abN abN abN -abN -abN -abN -abN +vGy +sBY +whk +sBY amk amk amk amk -abN -abN -abN +sBY +sBY +hKP abN abN abN @@ -28450,11 +30815,11 @@ abN abN abN dhD -abN -abN -abN -abN -abN +vGy +sBY +sBY +gnt +sBY amk amk amk @@ -28522,14 +30887,14 @@ ahF ahF ahF ahF -ahF +cCP ahF afJ -ahF -ahF -ahF -ahF -ahF +xYD +vXP +lYt +dIu +fmW ane ane ane @@ -28542,7 +30907,7 @@ ahF ahF ahF ahF -ahF +cCP ahF ahF ahF @@ -28645,7 +31010,7 @@ abN abN abN abN -abN +vGy abM abM amk @@ -28678,10 +31043,10 @@ abN abN abN dhD -abN -abN -abN -abN +vGy +qVN +sBY +ksc amk amk amk @@ -28744,7 +31109,7 @@ acp ane ane ahF -ahF +fDT ahF ahF ahH @@ -28753,10 +31118,10 @@ ahF ahF ahF afJ -ahF -ahF -ahF -ahF +wAF +fmW +fmW +fmW ane ane ane @@ -28872,8 +31237,8 @@ abM abN abN abN -abN -abN +cMG +waw abM abM abM @@ -28976,13 +31341,13 @@ ahF ahF ahF ahF -ahF -ahF -ahF -ahF +gTj +gTj +gTj +nys afV -ahF -ahF +wAF +tQU uWJ uWJ ane @@ -28999,7 +31364,7 @@ ahF ahF ahF ahF -ahF +krs ahF ahF ahF @@ -29099,9 +31464,9 @@ abM abN abN abQ -abN -abN -abN +cMG +waw +tcF abM abM abM @@ -29203,11 +31568,11 @@ afV ahF isF ahF -ahF -ahF -ahF -ahF -ahF +lYt +fmW +gos +fmW +lWl afV afV uWJ @@ -29327,8 +31692,8 @@ abM abN abN abN -abN -abN +vGy +sBY abM abM abM @@ -29430,13 +31795,13 @@ ane vUx vMV vMV -vMV -vMV +lUQ +bJQ uWJ -ahF -ahF -ahF -ahF +nQH +fmW +lWl +krs afV ane ane @@ -29450,7 +31815,7 @@ ahF ahF ahF ahF -ahF +krs ahF ahV ahF @@ -29554,9 +31919,9 @@ abM abM abN abN -abN -abN -abN +cMG +waw +pLv abM abM abM @@ -29658,12 +32023,12 @@ ane afV ahF ahF -ahF -ahF +wAF +fmW uWJ -ahF -ahF -ahF +dIu +fmW +lWl ahF afV afV @@ -29674,7 +32039,7 @@ afV ahF ahF ahF -ahF +fDT ahF ahH ahF @@ -29684,7 +32049,7 @@ ahF ahF ahF ahF -ahF +aYI ahF ane ane @@ -29781,9 +32146,9 @@ abM abM abN abN -abN -abN -abN +cMG +waw +sBY amk abM abM @@ -29886,16 +32251,16 @@ ane ane ahF ahF -ahH -pmt +thI +cdw uWJ uWJ +dOb +lWl +aYI ahF ahF -ahF -ahF -ahF -ahF +krs ahF ahF ahF @@ -30009,9 +32374,9 @@ abM abM abN abN -abN -abQ -abN +vGy +fTN +sLT amk amk abM @@ -30112,20 +32477,20 @@ acp ane ane ane +krs ahF -ahF -ahF -ahF +wAF +fmW uWJ uWJ +kzw +kyt +nys ahF ahF ahF ahF -ahF -ahF -ahF -ahF +krs ahF ahF ahF @@ -30237,8 +32602,8 @@ abM abN abN abN -tgL -abN +xhc +sBY amk amk amk @@ -30342,15 +32707,14 @@ ane ane ahF ahF -ahF -ahF -ahF +wAF +tOV +fKc uWJ -ahF -ahF -ahF -ahF -ahH +jCO +fmW +rHV +nys ahF ahF ahF @@ -30358,6 +32722,7 @@ ahF ahF ahF ahF +krs ahF ahF ahF @@ -30465,8 +32830,8 @@ abM abN abN abN -abN -abN +vGy +sBY amk amk abM @@ -30570,17 +32935,17 @@ afV afV ahF ahF -ahF -ahF -ahF +doe +pIl +fmW uWJ ane uWJ +fmW +qSG ahF ahF -ahF -ahF -ahF +cCP ahF ahH ahF @@ -30693,9 +33058,9 @@ abM abN abN abN -abN -abN -abN +vGy +sBY +bPE amk abM abM @@ -30795,18 +33160,18 @@ acp ane ane ahF +cCP ahF ahF ahF -ahF -ahF -ahF +wYz +chi uWJ ane uWJ -ahF -ahF -ahF +fmW +rHV +nys ahF ahF ahF @@ -30921,11 +33286,11 @@ abM abN abN abN -abN -abN -abN -abN -abB +pSe +kzn +sBY +dBS +stt abM abM abM @@ -30996,8 +33361,8 @@ mdQ mdQ mdQ mdQ -gwP -gwP +qdx +xKL gwP gwP gwP @@ -31027,15 +33392,15 @@ ahF ane ane ahF -ahH ahF +pIl ane ane uWJ -ahF -ahF -ahF -ahF +tOV +fmW +rHV +nys ahF ahF ahF @@ -31122,10 +33487,10 @@ aTf aTf aTf aUQ -aWb aUQ aUQ aUQ +sWk aUQ aUQ aTf @@ -31150,12 +33515,12 @@ abM abN abN abN -abQ -abN -abN -abB -abB -abB +bak +kzn +qYS +stt +stt +stt abM abM abM @@ -31223,9 +33588,9 @@ mdQ mdQ mdQ mdQ -gwP -gwP -gwP +tlk +dmT +uRe gwP gwP acS @@ -31256,16 +33621,16 @@ ane ane ane ahF -ahF -ahF -ahF +doe +pIl +fmW uWJ uWJ ane -ahF -ahF -ahF -ahF +eZg +rHV +gTj +nys isF ahF ahF @@ -31351,11 +33716,11 @@ aTf aTf aTf aTf -aWu -aWu -aWu -aTf -aTf +mkn +xLT +mkn +xLT +sWk aTf aTf aXh @@ -31379,12 +33744,12 @@ abM abN abN abN -abN -abN -abN -abN -abN -abB +pSe +jLY +jLY +jLY +jLY +qrH abM abM abM @@ -31452,8 +33817,8 @@ mdQ mdQ mdQ mdQ -gwP -tOS +dmT +igN gwP gwP gwP @@ -31485,20 +33850,20 @@ ane ane ahF ahF -ahF -ahF -ahF +doe +pIl +fcQ uWJ ane ane -ahF -ahH -ahF -ahF +fmW +fmW +lWl ahF ahF ahF ahF +krs ahF ahF ahF @@ -31579,13 +33944,13 @@ efp aTf aTf aWc -aUQ -aUQ -aUQ -aTf -aTf -aTf -cWm +mkn +mkn +sWk +mkn +mkn +xLT +kBq aXh aXh aKb @@ -31679,9 +34044,9 @@ mdQ mdQ mdQ onU -gwP -gwP -gwP +dmT +dmT +uRe gwP gwP gwP @@ -31707,26 +34072,26 @@ mdQ ane afV ahF +aYI +krs ahF ahF ahF ahF ahF -ahF -ahF -ahF -ahF -ahF +wYz +fmW +fmW uWJ uWJ uWJ +fmW +lWl ahF -ahF -ahF -ahF -ahF -ahF -ahF +hRy +hRy +hRy +hRy ahF ahF ahF @@ -31807,13 +34172,13 @@ efp efp aTf aTf +xLT aWv aWv -aWv -aTf -aXh -aXh -aXh +xLT +xTT +xTT +vUj qGH aLj aXk @@ -31907,9 +34272,9 @@ mdQ mdQ onU onU -gwP -gwP -sMx +dmT +dmT +kVG sMx gwP gwP @@ -31940,16 +34305,16 @@ ahF ahF ahF ahF +fDT ahF ahF -ahF -ahH -ahF +pIl +fmW uWJ uWJ -ahF -ahF -ahF +wHE +fmW +lWl ahF ahF ahF @@ -32038,10 +34403,10 @@ uSq qIO qIO qIO -ntL -mnK -kxI -wkP +qIO +uXV +qtj +dMc knp iIU kZw @@ -32135,9 +34500,9 @@ mdQ mdQ onU onU -gwP -gwP -sMx +dmT +xHW +kVG sMx gwP gwP @@ -32171,13 +34536,13 @@ ahF ahF ahF ahF -ahF -ahF +wYz +sgU uWJ ane -ahF -ahF -ahF +xBO +lWh +dYx ahF ahH ahF @@ -32266,10 +34631,10 @@ uSq njC qIO qIO -ntL -kxI -tsa -kxI +qIO +qtj +qtj +ksM rox wqz kZw @@ -32362,10 +34727,10 @@ mdQ mdQ mdQ onU -gwP -gwP -gwP -gwP +lKl +dmT +dmT +uRe gwP gwP gwP @@ -32394,17 +34759,17 @@ ahF ane ane ane +hRy +hRy +hRy ahF ahF -ahF -ahF -ahF -ahF -ahF +doe +pIl ane ane -ahF -ahF +lWh +dYx ahH ahF ahF @@ -32495,9 +34860,9 @@ hDX qIO qIO aXH -kxI -gGd -kxI +ebr +xNQ +vVe kxI wbK rHp @@ -32585,15 +34950,15 @@ mdQ mdQ onU onU -gwP -gwP +ieN +kWV xZE -xZE -xZE -gwP -gwP -gwP -gwP +xyH +hhs +ndk +dmT +dmT +uRe tOS gwP sMx @@ -32622,7 +34987,7 @@ ahF ahF ane ane -ahF +krs afV afV afV @@ -32809,19 +35174,19 @@ mdQ mdQ mdQ mdQ -gwP -gwP +jGU +ndk onU +dmT +dmT +kWV gwP -gwP -gwP -gwP -gwP -aca -gwP -abO -gwP -gwP +hjo +qtK +qhl +clO +qhl +wHh gwP gwP sMx @@ -32850,20 +35215,20 @@ ahF ahF ane ane -ahF +cCP afV ahF ahF ahF ahF ane -ahF +aYI ahF ahF ane ahF -ahF -ahF +aYI +fDT ahF ane ane @@ -33037,20 +35402,20 @@ gwP mdQ gwP gwP -gwP -gwP -aca -gwP -gwP -gwP +jGU +dmT +iGf +dmT +owZ +wHh tOS gwP aca gwP gwP -gwP -gwP -gwP +vle +qdx +xKL gwP gwP gwP @@ -33265,22 +35630,22 @@ gwP gwP gwP gwP -gwP -tOS -aca -gwP -gwP +hjo +kML +ukY +soY +wHh gwP gwP gwP aca -gwP -gwP -gwP -gwP -gwP -gwP -gwP +vle +qdx +cHW +dmT +grW +qdx +xKL gwP gwP gwP @@ -33503,15 +35868,15 @@ gwP gwP mdQ mdQ -xZE -xZE -xZE -gwP -gwP -gwP +hhs +hhs +hhs +fLh +dmT +grW acp acp -gwP +xKL gwP gwP abO @@ -33733,14 +36098,14 @@ mdQ mdQ onU onU -xZE -xZE -xZE -gwP -gwP -xZE -xZE -gwP +hhs +hhs +hhs +dmT +dmT +hhs +eft +xKL gwP oMZ oMZ @@ -33963,13 +36328,13 @@ mdQ onU onU acK -gwP -gwP -gwP -gwP -xZE -aca -aca +dmT +dmT +kCD +dmT +hhs +soz +jqr dFz oMZ aca @@ -34191,15 +36556,15 @@ mdQ mdQ onU onU -gwP -gwP -gwP -gwP -aYC -eGD -eGD -eGD -eGD +htV +dmT +dmT +dmT +sNq +rTT +rTT +nLF +rbs eGD eGD eGD @@ -34423,11 +36788,11 @@ onU onU onU onU -xZE -eGD -eGD -eGD -acq +hhs +rTT +aIA +lhH +lkq eGD eGD eGD @@ -34653,10 +37018,10 @@ iIB iIB iIB iIB -eGD -eGD -eGD -ufG +rTT +rTT +nLF +liI eGD eGD ufG @@ -34881,10 +37246,10 @@ abS iIB iIB iIB -eGD -adc -eGD -ufG +rTT +dAu +hkT +shb eGD eGD gIe @@ -35072,8 +37437,8 @@ mdQ mdQ mdQ mdQ -aca -xZE +jqr +sxl xZE acp acu @@ -35109,10 +37474,10 @@ abS abS iIB iIB -eGD -eGD -eGD -ufG +rmt +rTT +tde +vtk eGD acq eGD @@ -35300,8 +37665,8 @@ mdQ mdQ mdQ mdQ -gwP -gwP +fLh +uRe acp acu acu @@ -35337,9 +37702,9 @@ abS abS abS iIB -eGD -eGD -eGD +rTT +rTT +onP ufG eGD eGD @@ -35528,8 +37893,8 @@ mdQ mdQ mdQ onU -tOS -gwP +gRk +uRe acu acu acu @@ -35565,9 +37930,9 @@ abS abS abS abS -eGD -eGD -eGD +wzI +tde +uwG eGD eGD eGD @@ -35756,8 +38121,8 @@ mdQ mdQ onU onU -gwP -gwP +dmT +uRe acp acu acy @@ -35793,8 +38158,8 @@ abS ady ady ady -eGD -eGD +tde +uwG ufG hzR eGD @@ -35984,8 +38349,8 @@ acf onU onU onU -gwP -gwP +dmT +grW xZE acp acu @@ -36020,8 +38385,8 @@ abS abS ady eGD -eGD -eGD +fqi +uwG eGD ufG hzR @@ -36212,8 +38577,8 @@ acf onU onU onU -gwP -gwP +dOA +dmT xZE xZE acp @@ -36440,10 +38805,10 @@ acf mdQ onU mdQ -gwP -gwP -gwP -gwP +htV +dmT +grW +xKL xZE xZE xZE @@ -36481,11 +38846,11 @@ adP eGD acq eGD -eGD -eGD -acq -eGD -eGD +bje +gVw +vih +gVw +rbs eGD eGD eGD @@ -36668,10 +39033,10 @@ acf mdQ mdQ mdQ -uSF -gwP -gwP -gwP +iGx +dmT +cQB +uRe gwP gwP gwP @@ -36707,14 +39072,14 @@ eGD adP adP adP -eGD -eGD -eGD -eGD -eGD -eGD -eGD -eGD +bje +gVw +tMQ +rTT +mJF +rTT +nLF +rbs eGD ady ady @@ -36896,14 +39261,14 @@ acf acf mdQ mdQ -xZE -xZE -gwP -tOS -gwP +hhs +hhs +uaL +iuf +jvQ abH -gwP -gwP +jvQ +xKL gwP gwP gwP @@ -36934,15 +39299,15 @@ eGD eGD eGD adP -adP -adP -eGD -eGD -eGD -eGD -eGD -eGD -eGD +daY +tPH +rTT +pIB +rTT +hpK +rTT +ohf +onP eGD ady abS @@ -37125,15 +39490,15 @@ acf acf mdQ mdQ -xZE -xZE -xZE -xZE -gwP -gwP -gwP -gwP -gwP +hhs +hhs +hhs +hhs +dmT +dmT +grW +jvQ +xKL gwP gwP gwP @@ -37162,15 +39527,15 @@ acq eGD eGD eGD -adP -adP -eGD -eGD +sVx +iDX +kdj +rTT iIB iIB iIB -eGD -eGD +uOD +onP abS abS abS @@ -37358,10 +39723,10 @@ mdQ onU onU onU -gwP -gwP -gwP -gwP +sXg +dmT +tlk +uRe gwP acf acf @@ -37389,10 +39754,10 @@ eGD eGD eGD eGD -eGD -eGD -eGD -eGD +bje +tMQ +rTT +rTT iIB iIB abS @@ -37588,8 +39953,8 @@ uxU uxU uxU uxU -dGQ -any +ryp +vbK dGQ acf acf @@ -37617,7 +39982,7 @@ eGD adc eGD eGD -eGD +fqi abS iIB iIB @@ -37812,12 +40177,12 @@ acf acf acf acf -abl -abl -abl -abl -abl -abl +fDE +pAE +fDE +vAB +fDE +nUZ abl acf acf @@ -38037,15 +40402,15 @@ acf acf acf acf -abl -abl -abl -abl -abl -abl -abl -abl -abl +pAE +fDE +fDE +sPK +ogJ +scs +scs +scs +jgy abl abl abl @@ -38264,12 +40629,12 @@ acf izh izh izh -izh -abl -abv -abl -abl -abl +ejp +scs +rIc +scs +scs +jgy abl abl abl @@ -38518,10 +40883,10 @@ abS abS eGD eGD -eGD -eGD -eGD -eGD +bje +gVw +gVw +rbs eGD acO eGD @@ -38744,13 +41109,13 @@ abl abl abl dGQ -eGD -eGD -acY -eGD -eGD -eGD -eGD +bje +gVw +lbt +rTT +rTT +nLF +rbs acO eGD acq @@ -38972,13 +41337,13 @@ abl abl abl dGQ -eGD -acq -eGD -eGD -eGD -eGD -eGD +wbg +xdb +rTT +mca +rTT +rTT +onP acO eGD eGD @@ -39200,13 +41565,13 @@ abl abl abl dGQ -eGD -eGD -eGD +wbg +rTT +rTT iIB iIB abS -eGD +onP acO eGD eGD @@ -39288,7 +41653,7 @@ auV atU avE atp -wAe +awr atU axH aum @@ -40124,8 +42489,8 @@ abS abS abS abS -eGD -acq +gVw +jpX eGD abS abS @@ -40352,8 +42717,8 @@ abS abS abS abS -acO -acO +bBT +rze acO abS abS @@ -40580,9 +42945,9 @@ abS abS abS abS -eGD -eGD -eGD +rTT +nLF +rbs eGD xTa abS @@ -40807,10 +43172,10 @@ abS abS abS iIB -eGD -eGD -eGD -eGD +rTT +kdj +rTT +onP eGD eGD abS @@ -41035,10 +43400,10 @@ abS abS iIB iIB -eGD -eGD -eGD -eGD +rTT +rTT +rTT +onP eGD eGD abS @@ -41263,10 +43628,10 @@ abS iIB iIB iIB -eGD -eGD -eGD -eGD +mca +rTT +tde +uwG eGD eGD abS @@ -41489,11 +43854,11 @@ abS abS abS iIB -eGD -eGD -eGD -eGD -eGD +rTT +rTT +rTT +rTT +onP acq eGD eGD @@ -41718,11 +44083,11 @@ abS abS abS abS -eGD -acq -eGD +rTT +xdb +rTT acY -eGD +rbs eGD eGD abS @@ -41945,12 +44310,12 @@ abS abS abS abS -eGD -eGD -eGD -eGD -eGD -eGD +wzI +aIA +rTT +rTT +rTT +onP eGD eGD abS @@ -42175,10 +44540,10 @@ abS abS abS iIB -eGD -eGD -eGD -eGD +rTT +rTT +rTT +onP eGD eGD abS @@ -42404,9 +44769,9 @@ abS abS iIB iIB -eGD -eGD -eGD +rTT +uxL +onP eGD abS abS @@ -42632,9 +44997,9 @@ abS abS abS iIB -eGD -eGD -eGD +rTT +rTT +onP eGD abS abS @@ -42860,9 +45225,9 @@ abS abS abS iIB -eGD -eGD -eGD +rTT +cxi +onP eGD abS abS @@ -43088,10 +45453,10 @@ abS abS abS abS -eGD -eGD -eGD -eGD +rTT +rTT +nLF +rbs eGD abS abS @@ -43315,11 +45680,11 @@ abS abS abS abS -eGD -eGD -eGD -acq -eGD +rTT +rTT +hpK +xdb +onP eGD abS abS @@ -43542,12 +45907,12 @@ abS abS abS abS -xTa -eGD -eGD -eGD -eGD -eGD +brC +rTT +rTT +rTT +rTT +onP eGD abS abS @@ -43738,12 +46103,12 @@ abl abl abl abl -abl -abl -abl -abl -abl -abl +gPu +jcn +jcn +jcn +jcn +jcn acf acf acf @@ -43770,12 +46135,12 @@ abS abS abS abS -eGD -eGD -acq -eGD -eGD -eGD +rTT +rTT +xdb +rTT +lnr +onP eGD abS abS @@ -43966,12 +46331,12 @@ abv abl abl abl -abl -abl -abl -abl -abl -abl +xWy +cqH +fDE +bvX +fDE +fDE acf acf acf @@ -43999,11 +46364,11 @@ abS abS abS abS -eGD -eGD -eGD -eGD -eGD +rTT +mOL +rTT +tde +uwG eGD abS abS @@ -44197,9 +46562,9 @@ abl acf acf uxU -dGQ +ryp uMz -dGQ +ryp acf acf acf @@ -44227,10 +46592,10 @@ abS abS abS abS -eGD -eGD -eGD -eGD +ohf +rTT +rTT +onP eGD abS abS @@ -44426,9 +46791,9 @@ acf acf uxU uxU -abl -abl -abl +fDE +gcB +fDE acf acf acf @@ -44455,10 +46820,10 @@ abS abS abS iIB -eGD -eGD -acq -eGD +rTT +rTT +xdb +onP eGD abS abS @@ -44654,9 +47019,9 @@ acf acf acf uxU -abl -abl -abl +fDE +tti +fDE acf acf acf @@ -44683,10 +47048,10 @@ abS abS iIB iIB -eGD -eGD -eGD -eGD +rTT +rmt +rTT +onP abS abS abS @@ -44882,14 +47247,14 @@ acf acf acf uxU -abl -abv -abl -abl +fDE +otl +fDE +fDE acf acf uxU -abl +fDE acf acf acf @@ -44899,7 +47264,7 @@ abl abl abv abl -abl +gPu abS abS abS @@ -44911,10 +47276,10 @@ abS iIB iIB iIB -eGD -eGD -eGD -eGD +rTT +rTT +rTT +onP abS abS abS @@ -45110,16 +47475,16 @@ acf acf acf acf -abl -abl -abl -abl +fDE +fDE +fDE +fDE uxU uxU uxU -abl -abl -abl +hez +fDE +spK acf acf acf @@ -45127,7 +47492,7 @@ acf abl abl abl -abl +kxv abS abS abS @@ -45139,8 +47504,8 @@ abS abS iIB iIB -cIU -cIU +hav +hav cIU abS abS @@ -45339,15 +47704,15 @@ acf acf acf acf -abl -abl -abl +fDE +fDE +fDE czq uxU uxU -abl -abl -abl +rUX +fDE +spK abl acf acf @@ -45355,8 +47720,8 @@ acf abl abl abl -abl -abl +kxv +han abS abS abS @@ -45367,9 +47732,9 @@ abS abS abS abS -pDt -pDt -pDt +aTy +aTy +tYW abS pDt pDt @@ -45568,14 +47933,14 @@ acf acf acf acf -abl -abl -abl +fDE +fDE +fDE uxU -izh -abl -abv -abl +mrg +fDE +poX +jgy acf acf acf @@ -45583,8 +47948,8 @@ abl abl abl abl -abl -abl +uMd +bvX iIB abS abS @@ -45796,13 +48161,13 @@ acf acf acf acf -izh -abl -abl -abv -dGQ -abl -abl +mrg +fDE +fDE +otl +ryp +ogJ +jgy abl acf acf @@ -45810,8 +48175,8 @@ acf abl abl abl -abl -abl +kxv +fDE iIB iIB abS @@ -46024,12 +48389,12 @@ acf acf acf acf -izh -abl -abl -abl -izh -abl +mrg +sPK +fDE +fDE +mrg +spK abl abl abl @@ -46039,16 +48404,16 @@ abl abv abl abl -abl +uOl ydz -pDt -pDt -pDt -pDt +eQL +eQL +eQL +pgc iIB iIB -pDt -pDt +bOm +xhv abS pDt pDt @@ -46253,11 +48618,11 @@ acf acf acf acf -abl -abl -abl -izh -abl +fDE +fDE +fDE +mrg +spK abl abl abl @@ -46267,16 +48632,16 @@ abl abl abl abl -abl -ydz -pDt -qRj -pDt -pDt -pDt -pDt -pDt -pDt +bnM +lIL +aTy +xNi +aTy +bxb +eQL +eQL +eQL +xhv pDt pDt pDt @@ -46482,29 +48847,29 @@ acf acf acf uxU +tti +fDE +ryp +spK abl -abl -dGQ -abl -abl -abl -abl -dGQ -abl -abl -abl -abl -abl -abl -ydz -pDt -pDt -pDt -pDt -pDt -pDt +gPu +jcn +ner +jcn +jcn +jcn +jcn +jcn +jcn +dLm +kae pDt pDt +kpx +aTy +aTy +aTy +tYW pDt pDt pDt @@ -46710,29 +49075,29 @@ acf uxU uxU uxU -abl -abl -acf -abl -abl -abv -abl -dGQ -abl -abl -abl -abl -abl -abl +fDE +fDE +acf +xRe +kLl +cqN +fDE +ryp +fDE +fDE +fDE +fDE +osf +hNT ydz +xhv pDt pDt -pDt -pDt -pDt -pDt -pDt -qRj +dCD +hmJ +hmJ +hmJ +enn pDt pDt pDt @@ -46936,31 +49301,31 @@ acf acf uxU uxU -abl -abl -abl -abl +fDE +fDE +fDE +fDE acf acf -abl -abl -abl +fDE +icd +fDE uxU uxU -abl -abl -abl -abv -abl +fDE +fDE +han +otl +fDE acf +xhv pDt -pDt -pDt -pDt -pDt -pDt -pDt -pDt +dCD +cEi +wpY +eQL +eQL +xhv pDt oeN oeN @@ -47159,36 +49524,36 @@ abv abl abl acf -abl -abl +xWy +fDE acf uxU -abl -abl -abl -abl -abl +fDE +fDE +yjs +fDE +fDE acf acf -abl -abl -abl +fDE +cSL +fDE uxU acf acf -abl -abl +fDE +mVr uxU uxU acf +tYW pDt -pDt -pDt -pDt -pDt +crn +eQL +eQL ntr -iZG -pDt +hEe +xhv pDt oeN adC @@ -47387,36 +49752,36 @@ abl abl abl abl -abl -abl -dGQ -abl -abl -abl -abl -abl +xWy +cSL +ryp +fDE +fDE +pVZ +fDE +fDE acf acf uxU -abl -abl -abl -abl +fDE +fDE +fDE +fDE acf acf -abl -abl +fDE +fDE uxU acf acf nbw pDt -pDt +crn nbw ntr ntr -pDt -pDt +nNu +xhv pDt oeN adD @@ -47615,20 +49980,20 @@ abl abl abl abl -abl -abl -dGQ -abl -abl -abl -abl -abl -abl +bnM +uOl +ryp +fDE +fDE +fDE +fDE +ogJ +jgy acf uxU uxU -abl -abl +fDE +ogJ tYx acf acf @@ -47642,9 +50007,9 @@ nbw nbw nbw nbw -pDt -pDt -pDt +eQL +eQL +xhv pDt oeN adE @@ -47844,19 +50209,19 @@ abl abl abv abl -abl -dGQ -abl -abl -abl -abv -abl +bnM +oha +rWs +rWs +rWs +vBd +jgy abl acf uxU -abl -abl -abv +osf +fDE +qWI abl acf acf @@ -47869,10 +50234,10 @@ acf nbw nbw nbw -pDt -pDt -pDt -qRj +aTy +aTy +aTy +hRB pDt oeN abt @@ -48082,9 +50447,9 @@ abl abl acf acf -abl -abl -abl +fDE +ogJ +jgy abl acf acf @@ -48304,14 +50669,14 @@ acf acf acf acf -abl -abl -abl +kLl +kLl +kLl abl acf acf acf -abl +jgy abl abl acf @@ -48532,10 +50897,10 @@ acf acf acf uxU -abl -abl -abl -abl +fDE +roQ +fDE +spK abl acf abl @@ -48760,10 +51125,10 @@ acf acf uxU uxU -izh -abl -abl -abv +mrg +fDE +fDE +qWI abl abl abl @@ -48988,10 +51353,10 @@ acf acf uxU uxU -izh -abl -abl -abl +mrg +thk +ogJ +jgy abl abl abl @@ -49216,9 +51581,9 @@ acf acf uxU acf -izh -abl -abl +mrg +kIM +spK abl abl abv @@ -49444,9 +51809,9 @@ acf acf acf acf -izh -abl -abl +mrg +fDE +spK abl abl abl @@ -49671,10 +52036,10 @@ acf acf acf acf -izh -izh -abl -abl +mrg +mrg +ogJ +jgy abl abl abl @@ -49899,9 +52264,9 @@ acf acf acf acf -izh -abl -abl +iTQ +rWs +jgy abv abl abl @@ -50127,7 +52492,7 @@ acf acf acf acf -izh +jZX abl abl abl @@ -51268,8 +53633,8 @@ acf acf acf acf -dGQ -any +oFJ +sLU dGQ acf acf @@ -51496,9 +53861,9 @@ pUm pUm pUm vVC -acg -acg -acg +bvj +mHk +egU pUm whU whU @@ -51715,8 +54080,8 @@ acf vVC pUm pUm -acg -aaN +iye +dtr acg pUm pUm @@ -51724,9 +54089,9 @@ pUm pUm vVC vVC -acg -acg -acg +uop +bvj +xar pUm whU whU @@ -51942,19 +54307,19 @@ acf uxU vVC vVC -acg -acg -acg -acg +fYG +bvj +mHk +iye pUm pUm pUm pUm vVC vVC -acg -acg -acg +rhi +etU +xar pUm whU whU @@ -52170,29 +54535,29 @@ vVC vVC vVC vVC -acg -acg -acg -acg +bvj +jRL +bvj +bvj pUm pUm pUm pUm vVC -acg -acg -aaN -acg +bvj +bvj +jgj +dLW pUm whU whU whU whU fTM -fTM -fTM -fTM -fTM +lSA +yfe +yfe +uyn fTM fTM fTM @@ -52397,19 +54762,19 @@ pUm vVC vVC vVC -acg -acg -acg -acg +bvj +bvj +pQV +bvj pUm pUm pUm pUm pUm vVC -acg -acg -acg +xwN +wCs +dLW acg pUm whU @@ -52418,20 +54783,20 @@ whU whU whU whU -fTM -fTM -fTM -fTM -akL -fTM -fTM -fTM -fTM +vAT +wLT +lBl +yfe +bQz fTM fTM fTM fTM fTM +lSA +eMe +eMe +uyn vCG pDt pDt @@ -52625,9 +54990,9 @@ pUm vVC vVC vVC -acg -aaN -acg +bvj +oQm +bvj pUm pUm pUm @@ -52635,8 +55000,8 @@ pUm pUm pUm pUm -acg -acg +bvj +xar acg pUm pUm @@ -52647,19 +55012,19 @@ whU whU whU unp -fTM -fTM -fTM -fTM -fTM +vAT +lNG +vAT +lBl +uyn jMS jMS fTM -fTM -fTM -fTM -fTM -fTM +lSA +bkK +vAT +vAT +lBl vCG pDt pDt @@ -52852,10 +55217,10 @@ pUm pUm pUm vVC -acg -acg -acg -acg +bvj +mfn +bvj +bvj pUm pUm pUm @@ -52863,8 +55228,8 @@ pUm pUm pUm pUm -gkC -nzw +nha +tEm gkC pUm pUm @@ -52877,16 +55242,16 @@ whU unp unp unp -fTM -fTM -fTM -jMS -jMS -akL -fTM -fTM -fTM -fTM +wLT +vAT +lBl +vAg +pGL +tSi +bkK +vAT +jJg +nrR whU whU pDt @@ -53064,7 +55429,7 @@ aag pZb pZb pZb -aag +uYj xpR xpR xpR @@ -53080,10 +55445,10 @@ pUm pUm pUm pUm -acg -acg -acg -acg +bvj +bvj +bvj +ifr pUm nzw nzw @@ -53106,12 +55471,12 @@ whU whU unp unp -fTM -fTM -fTM -fTM -fTM -fTM +vAT +vAT +vAT +vAT +vAT +vAT whU unp unp @@ -53281,21 +55646,21 @@ aag aag aag aag -aag -aag -aag -aag -aag +tVw +srn +srn +srn +pRD aag aag aag pZb pZb pZb -aag -aag -aag -aag +uYj +eqS +uYj +tuJ xpR xpR xpR @@ -53307,12 +55672,12 @@ pZb pUm pUm pUm -acg -acg -acg -acg -acg -acg +rID +woT +woT +woT +woT +dLW acg acg acg @@ -53333,12 +55698,12 @@ whU whU whU whU -fTM -fTM -akL -fTM -fTM -fTM +vAT +sxo +rby +vAT +vAT +jMD whU whU unp @@ -53509,24 +55874,24 @@ aag aag aag aag -aag -aag -aag -aai -aag -aag +dzM +uYj +tuJ +gzH +qfK +pRD aag aag aag pZb pZb -aag -aag -aag -aag -aag -aag -aag +uYj +uYj +uYj +mWA +uYj +uYj +uYj pZb pZb pZb @@ -53560,13 +55925,13 @@ whU whU whU whU -fTM -fTM -fTM -fTM -fTM -fTM -fTM +jlt +jlt +jlt +jlt +jlt +jlt +pET whU whU whU @@ -53736,27 +56101,27 @@ aai aag aag aag -aag -aai -aag -aag -aag -aag -aag +tVw +vxj +uYj +uYj +dHg +uYj +rIm aag aai aag vly -aag -aag -aag -aag -aag -aag -aag -aag -aag -aag +wYB +pFB +pFB +fsc +uYj +uYj +uYj +dIv +uYj +uYj pZb pZb pZb @@ -53799,9 +56164,9 @@ whU whU whU whU -fTM -fTM -fTM +yfe +yfe +uyn fTM fTM fTM @@ -53963,14 +56328,14 @@ aag aag aag aag -aag -aag -aag -aag +tVw +uHc +uYj +uYj xpR -aag -aag -aag +uYj +uYj +rIm aag aag aag @@ -53978,15 +56343,15 @@ vly aag aai aag -aag -aag -aai -aag -aag -aag -aag -aag -aag +wYB +pFB +sET +pFB +pFB +pFB +pFB +pFB +mFZ vly acg acg @@ -54028,8 +56393,8 @@ whU whU whU whU -fTM -fTM +vAT +fIW fTM fTM fTM @@ -54190,15 +56555,15 @@ aag aag aag aag -aag -aag -aag -aag +tVw +uHc +uYj +eYb xpR xpR -aag -aag -aag +uYj +uYj +rIm aag aag aag @@ -54216,11 +56581,11 @@ aag aag aag vly -acg -acg -acg -acg -acg +cop +iye +iye +iye +egU acg acg acg @@ -54256,8 +56621,8 @@ whU whU whU whU -fTM -fTM +fUj +fIW aeT fTM fTM @@ -54418,15 +56783,15 @@ aag aag aag aag -aag -aag -aab +dzM +uYj +rYe xpR xpR xpR -aag -aag -aag +uYj +uYj +rIm aag aag aag @@ -54442,14 +56807,14 @@ aag aag aag aag -aag -vly -acg -acg -acg -acg -acg -acg +tVw +cqC +kmH +mLv +bvj +bvj +elp +egU acg acg acg @@ -54483,9 +56848,9 @@ whU whU whU unp -fTM -fTM -fTM +vAT +vAT +fIW fTM sIH fTM @@ -54646,15 +57011,15 @@ aag aag aag aai -aag -aab -aab +dzM +rYe +rYe xpR xpR -aab -aag -aag -aag +rYe +uYj +anM +rIm aag aag aag @@ -54670,15 +57035,15 @@ aag aag aai aag -aag -vly -acg -acg -aaN -acg -acg -acg -acg +jBl +vdt +bvj +bvj +oQm +bvj +mfn +mHk +egU acg acg acg @@ -54712,8 +57077,8 @@ whU whU unp unp -fTM -fTM +vAT +fIW fTM agd afE @@ -54874,15 +57239,15 @@ aag aag aag aag -aab -aab +eaI +rYe pZb xpR pZb -aab -aag -aag -aag +rYe +tuJ +uYj +rIm aag aag aag @@ -54898,15 +57263,15 @@ aag aag aag aag -aag -aci +jBl +xSk vVC vVC vVC vVC -acg -acg -acg +bvj +fmV +oDE acg acg pUm @@ -54940,8 +57305,8 @@ whU whU whU unp -fTM -fTM +rGE +fIW akL adZ fTM @@ -55102,15 +57467,15 @@ aag aag aag aag -aab +eaI pZb pZb pZb pZb -aab -aag -aag -aag +rYe +ktr +sFD +mFZ aag aag aag @@ -55126,15 +57491,15 @@ aag aag aag aag -aag +wYB pZb pUm vVC vVC vVC vVC -xSA -nzw +lyZ +lhE gkC pUm pUm @@ -55168,8 +57533,8 @@ whU whU whU unp -fTM -fTM +vAT +fIW fTM adH fTM @@ -55319,10 +57684,10 @@ pZb pZb pZb pZb -aab -aab -aag -aag +vPo +vPo +wRb +pRD aag aag aag @@ -55335,8 +57700,8 @@ pZb pZb pZb pZb -aag -aag +ktr +mFZ aag aag aai @@ -55361,8 +57726,8 @@ pUm vVC vVC pUm -acg -acg +fYG +oDE acg pUm pUm @@ -55395,9 +57760,9 @@ whU whU whU whU -fTM -fTM -fTM +vQR +vAT +fIW aeT aek agA @@ -55547,11 +57912,11 @@ pZb pZb pZb pZb -aab -aag -aag -aag -aag +rYe +fRD +uYj +lLU +pRD aag aag aag @@ -55563,7 +57928,7 @@ pZb pZb pZb pZb -aag +mFZ aag aag aag @@ -55589,8 +57954,8 @@ pUm pUm pUm pUm -acg -acg +wCs +dLW acg pUm pUm @@ -55623,9 +57988,9 @@ whU fTM whU whU -fTM -fTM -fTM +sAh +sAh +pET fTM adH fTM @@ -55775,11 +58140,11 @@ pZb pZb pZb xpR -aab -aag -aai -aag -aag +rYe +uYj +gzH +mEo +rpx aag aag aag @@ -55817,8 +58182,8 @@ pUm pUm pUm pUm -acg -acg +xGL +egU acg pUm pUm @@ -56004,10 +58369,10 @@ pZb pZb xpR xpR -aag -aag -aag -aag +uYj +wMr +uYj +rpx aag aag aag @@ -56046,8 +58411,8 @@ pUm pUm pUm pUm -acg -aaN +mHk +dtr pUm pUm pUm @@ -56232,10 +58597,10 @@ pZb pZb xpR xpR -aag -aag -aag -aag +uYj +uYj +uYj +rpx aag aai aag @@ -56274,9 +58639,9 @@ pUm pUm pUm vVC -acg -acg -acg +bvj +mHk +egU abj pUm acg @@ -56312,9 +58677,9 @@ vCG fTM akL fTM -fTM -aeT -agA +lSA +rgj +gWE ahv ahv slW @@ -56460,10 +58825,10 @@ pZb pZb pZb xpR -aag -aag -aag -aag +bvS +uYj +ktr +mFZ aag aag aag @@ -56502,10 +58867,10 @@ pUm pUm vVC vVC -acg -acg -acg -acg +xmK +bvj +mHk +egU abo acg acg @@ -56540,9 +58905,9 @@ vCG fTM fTM fTM -fTM -fTM -fTM +vNT +vAT +vkS ahv ahv slW @@ -56688,9 +59053,9 @@ pZb pZb pZb pZb -aag -aag -aag +uYj +ktr +mFZ aag aag aag @@ -56730,10 +59095,10 @@ pUm pUm vVC vVC -acg -acg -acg -acg +rhi +bvj +mNl +oDE acg acg acg @@ -56767,10 +59132,10 @@ fTM whU whU fTM -fTM -fTM -fTM -fTM +lSA +bkK +vAT +vAT ahv ahv aeg @@ -56916,8 +59281,8 @@ pZb pZb pZb pZb -aab -aag +aPM +mFZ aag aag aag @@ -56958,10 +59323,10 @@ pUm pUm vVC vVC -acg -acg -acg -acg +bvj +bvj +wCs +dLW acg vjL acg @@ -56985,10 +59350,10 @@ whU jMS jMS fTM -fTM -fTM -fTM -fTM +lSA +eMe +eMe +uyn jMS jMS fTM @@ -56996,8 +59361,8 @@ whU ajc vCG whU -fTM -fTM +vAT +hTR pRT ahv ahv @@ -57186,9 +59551,9 @@ pUm pUm pUm pUm -acg -acg -acg +bvj +rER +dLW iiK acg acg @@ -57212,13 +59577,13 @@ whU whU whU whU -fTM -fTM -fTM -fTM -fTM -fTM -akL +eMe +bkK +ldi +vAT +lBl +loP +bQz fTM wEO fTM @@ -57413,9 +59778,9 @@ pUm pUm pUm pUm -acg -acg -acg +woT +woT +dLW acg acg acg @@ -57441,13 +59806,13 @@ whU whU whU aco -fTM -fTM -fTM -fTM -fTM -fTM -fTM +vAT +vAT +bcU +vAT +whx +lBl +uyn wEO fTM fTM @@ -57672,10 +60037,10 @@ whU unp unp unp -fTM -fTM -fTM -fTM +vAT +vAT +vAT +tqQ eFS fTM fTM @@ -57902,8 +60267,8 @@ whU unp unp unp -wEO -wEO +gsq +viC wEO fTM fTM @@ -58129,9 +60494,9 @@ whU whU whU whU -jMS -fTM -fTM +vAg +vAT +lSN fTM akL fTM @@ -58287,12 +60652,12 @@ pZb pZb pZb pZb -aab -aab -aag -aag -aag -aag +vPo +vPo +lzf +wRb +wRb +pRD aag aag aai @@ -58357,9 +60722,9 @@ whU whU whU whU -jMS -fTM -fTM +ecn +jlt +pET fTM fTM diW @@ -58516,15 +60881,15 @@ pZb pZb pZb pZb -aab -aab -aag -aai -aag -aag -aag -aag -aag +rYe +rYe +uYj +gzH +qfK +wRb +wRb +wRb +pRD aag aag aag @@ -58745,15 +61110,15 @@ pZb pZb pZb pZb -aab -aab -aag -aag -aag -aag -aag -aag -aag +cfL +rYe +uYj +qVi +egc +uYj +mEo +isL +pRD aag aag aai @@ -58778,7 +61143,7 @@ pZb pZb vVC vVC -nzw +uBR aaQ aaR aaR @@ -58978,10 +61343,10 @@ xpR xpR xpR xpR -aab -aab -aag -aag +rYe +rYe +uYj +rpx aag aag aag @@ -59006,8 +61371,8 @@ pZb pZb vVC vVC -nzw -nzw +uBR +uBR aaQ aaQ aaQ @@ -59207,9 +61572,9 @@ xpR xpR xpR xpR -aab -aab -aab +rYe +rYe +gze aab aab aab @@ -59234,8 +61599,8 @@ pZb pZb vVC vVC -acg -nzw +bvj +uBR nzw nzw nzw @@ -59462,10 +61827,10 @@ pZb pZb vVC vVC -acg -acg -acg -acg +bvj +bvj +mHk +egU acg aaN acg @@ -59478,9 +61843,9 @@ acg acg acg acg -acg -acg -nzw +iye +iye +bEj acg aaN acg @@ -59691,10 +62056,10 @@ pZb vVC vVC vVC -acg -acg -acg -acg +bvj +bvj +mHk +egU acg nzw bfY @@ -59706,9 +62071,9 @@ nzw nzw nzw pUm -acg -acg -nzw +pQV +bvj +lhE acg acg acg @@ -59919,11 +62284,11 @@ pZb pUm vVC vVC -acg -acg -aaN -acg -acg +bvj +bvj +oQm +mHk +egU nzw nHq jAo @@ -59932,11 +62297,11 @@ acg umb iyr eZC -nzw +uBR pUm vVC -acg -nzw +rAU +lhE acg acg acg @@ -60148,11 +62513,11 @@ pUm vVC vVC vVC -acg -acg -acg -acg -nzw +bvj +bvj +bvj +mHk +bEj jAo acg gkC @@ -60160,12 +62525,12 @@ acg gkC acg jAo -nzw +uBR vVC vVC aaQ -nzw -acg +qPY +egU acg acg acg @@ -60378,9 +62743,9 @@ vVC vVC vVC pUm -acg -acg -nzw +bvj +bvj +gVR umb umb umb @@ -60388,12 +62753,12 @@ aaN umb umb umb -nzw +uBR vVC vVC vVC -nzw -acg +uBR +oDE acg acg acg @@ -60606,9 +62971,9 @@ pUm vVC vVC vVC -acg -acg -nzw +bvj +bvj +qPY rwx acg gkC @@ -60616,12 +62981,12 @@ acg gkC acg dfJ -nzw +uBR pUm vVC vVC -nzw -acg +uBR +oDE acg acg acg @@ -60836,21 +63201,21 @@ vVC vVC vVC pUm -nzw -rPK +uBR +jhj upQ umb acg umb fAD rPK -nzw +uBR pUm pUm vVC -nzw -acg -aaN +uBR +mHk +dtr acg acg acg @@ -61064,8 +63429,8 @@ pUm vVC pUm pUm -nzw -nzw +uBR +gVR nzw nzw nzw @@ -61076,9 +63441,9 @@ nzw pUm pUm pUm -nzw -acg -acg +uBR +bvj +fGn acg acg aaQ diff --git a/maps/map_files/LV624/armory/10.cheese.dmm b/maps/map_files/LV624/armory/10.cheese.dmm index 26bfd92837f3..cee714b1c170 100644 --- a/maps/map_files/LV624/armory/10.cheese.dmm +++ b/maps/map_files/LV624/armory/10.cheese.dmm @@ -182,12 +182,6 @@ pixel_x = 8; pixel_y = -4 }, -/obj/structure/machinery/door_control{ - id = "secure_inner_blast"; - name = "Secure Inner Doors"; - pixel_x = 25; - pixel_y = 5 - }, /turf/open/floor{ icon_state = "cult" }, diff --git a/maps/map_files/LV624/armory/10.extra.dmm b/maps/map_files/LV624/armory/10.extra.dmm index f9c0f47729c5..7086e945d1ad 100644 --- a/maps/map_files/LV624/armory/10.extra.dmm +++ b/maps/map_files/LV624/armory/10.extra.dmm @@ -187,12 +187,6 @@ /obj/effect/landmark/crap_item, /obj/item/ammo_magazine/smg/m39/extended, /obj/item/weapon/gun/smg/m39, -/obj/structure/machinery/door_control{ - id = "secure_inner_blast"; - name = "Secure Inner Doors"; - pixel_x = 25; - pixel_y = 5 - }, /turf/open/floor{ icon_state = "cult" }, diff --git a/maps/map_files/LV624/armory/10.looted.dmm b/maps/map_files/LV624/armory/10.looted.dmm index 478a3db3ea48..b81e0660816d 100644 --- a/maps/map_files/LV624/armory/10.looted.dmm +++ b/maps/map_files/LV624/armory/10.looted.dmm @@ -186,18 +186,6 @@ icon_state = "cult" }, /area/lv624/lazarus/armory) -"K" = ( -/obj/item/stack/sheet/metal, -/obj/structure/machinery/door_control{ - id = "secure_inner_blast"; - name = "Secure Inner Doors"; - pixel_x = 25; - pixel_y = 5 - }, -/turf/open/floor{ - icon_state = "cult" - }, -/area/lv624/lazarus/armory) "T" = ( /obj/structure/machinery/door_control{ id = "garage_blast"; @@ -272,7 +260,7 @@ i w w w -K +w p i "} diff --git a/maps/map_files/LV624/centralcaves/10.T.dmm b/maps/map_files/LV624/centralcaves/10.T.dmm index 7433f2f6131d..56c54485e09e 100644 --- a/maps/map_files/LV624/centralcaves/10.T.dmm +++ b/maps/map_files/LV624/centralcaves/10.T.dmm @@ -1,4 +1,22 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 5 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) +"b" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) +"c" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "d" = ( /turf/closed/wall/rock/brown, /area/lv624/ground/caves/central_caves) @@ -16,7 +34,7 @@ /area/lv624/ground/caves/central_caves) "h" = ( /obj/structure/blocker/forcefield/multitile_vehicles, -/turf/open/gm/dirt, +/turf/open/auto_turf/strata_grass/layer1, /area/lv624/ground/caves/central_caves) "i" = ( /obj/structure/blocker/forcefield/multitile_vehicles, @@ -24,6 +42,10 @@ /obj/effect/landmark/structure_spawner/setup/distress/xeno_door, /turf/open/gm/dirt, /area/lv624/ground/caves/south_central_caves) +"j" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/amanita, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) "k" = ( /turf/open/gm/dirt, /area/lv624/ground/barrens/north_east_barrens) @@ -53,48 +75,136 @@ icon_state = "warning" }, /area/lv624/ground/barrens/containers) +"s" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) +"t" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 4; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/barrens/north_east_barrens) +"u" = ( +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) +"v" = ( +/obj/effect/decal/grass_overlay/grass1, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) "w" = ( /obj/structure/blocker/forcefield/multitile_vehicles, /turf/open/gm/dirt, /area/lv624/ground/barrens/west_barrens) -"z" = ( -/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, -/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, -/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, -/turf/open/gm/dirt, -/area/lv624/ground/caves/central_caves) "A" = ( /obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, /obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, /turf/open/gm/dirt, /area/lv624/ground/caves/central_caves) +"B" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) "C" = ( /obj/effect/landmark/objective_landmark/close, /turf/open/gm/dirt, /area/lv624/ground/caves/south_central_caves) +"D" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) +"E" = ( +/turf/closed/wall/strata_ice/jungle, +/area/lv624/ground/caves/south_central_caves) +"F" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) "G" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /turf/open/gm/dirt, /area/lv624/ground/caves/south_central_caves) +"H" = ( +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/barrens/north_east_barrens) +"I" = ( +/obj/effect/decal/grass_overlay/grass1, +/turf/open/gm/dirt, +/area/lv624/ground/barrens/north_east_barrens) +"K" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 2; + pixel_y = 7; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) +"M" = ( +/obj/structure/flora/bush/ausbushes/var3/fullgrass, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/barrens/north_east_barrens) +"N" = ( +/obj/effect/landmark/hunter_primary, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) +"O" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 1 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) "Q" = ( /obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, /obj/effect/landmark/structure_spawner/setup/distress/xeno_door, /turf/open/gm/dirt, /area/lv624/ground/caves/south_central_caves) +"R" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 1 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) +"S" = ( +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) +"U" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) "V" = ( /turf/open/gm/dirt, /area/lv624/ground/caves/south_central_caves) +"Z" = ( +/obj/structure/flora/bush/ausbushes/ppflowers, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) (1,1,1) = {" f -z -V -V -V -V -G -V -V +g +B +b +N +S +S +s +F Q V V @@ -111,13 +221,13 @@ l (2,1,1) = {" f g -V -V -V -V -V -V -V +R +U +S +K +S +S +v Q V V @@ -134,14 +244,14 @@ l (3,1,1) = {" f g -V -G -V -V +R +S +S +E +E l -l -n -n +v +Q V G V @@ -157,10 +267,10 @@ w (4,1,1) = {" f A -V -C l l +E +E l l l @@ -709,9 +819,9 @@ o (28,1,1) = {" f e -V -V -V +D +D +D l l l @@ -731,9 +841,9 @@ p "} (29,1,1) = {" f -f -V -V +O +S +S l l l @@ -754,8 +864,8 @@ p "} (30,1,1) = {" f -f -f +O +j l l l @@ -777,9 +887,9 @@ p "} (31,1,1) = {" f -f -f -l +c +Z +E l l l @@ -799,16 +909,16 @@ k p "} (32,1,1) = {" -f -f -l -l -l -l +O +u +E +E l l l l +E +E l l l @@ -823,16 +933,16 @@ p "} (33,1,1) = {" f -f +a h -k -k -k -k -l -l -k -k +H +H +H +M +E +E +t +I l k k diff --git a/maps/map_files/LV624/centralcaves/10.qc.dmm b/maps/map_files/LV624/centralcaves/10.qc.dmm index 1e84fde00653..5f63ae797e02 100644 --- a/maps/map_files/LV624/centralcaves/10.qc.dmm +++ b/maps/map_files/LV624/centralcaves/10.qc.dmm @@ -1,838 +1,1065 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"e" = ( -/obj/structure/blocker/forcefield/multitile_vehicles, +"aD" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) +"bV" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 6 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) +"dd" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 9 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) +"gU" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 9 + }, /turf/open/gm/dirt, /area/lv624/ground/caves/central_caves) -"f" = ( +"hJ" = ( +/obj/effect/decal/grass_overlay/grass1, /turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) +"hP" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 11; + pixel_y = -2; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) +"hW" = ( +/obj/structure/fence, +/turf/open/floor{ + dir = 9; + icon_state = "warning" + }, +/area/lv624/ground/barrens/containers) +"iS" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/plumphelmet{ + pixel_x = 8 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) +"kc" = ( +/obj/structure/flora/bush/ausbushes/pointybush, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) +"ks" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 2; + pixel_y = 7; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) +"lp" = ( +/turf/open/auto_turf/strata_grass/layer1, /area/lv624/ground/caves/central_caves) -"g" = ( +"lq" = ( +/turf/closed/wall/rock/brown, +/area/lv624/ground/barrens/west_barrens) +"mN" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /turf/open/gm/dirt, +/area/lv624/ground/barrens/north_east_barrens) +"oB" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/amanita, +/turf/open/auto_turf/strata_grass/layer1, /area/lv624/ground/caves/south_central_caves) -"h" = ( +"oJ" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /turf/open/gm/dirt, /area/lv624/ground/caves/central_caves) -"k" = ( -/turf/open/gm/dirt, +"pd" = ( +/obj/structure/flora/bush/ausbushes/var3/ywflowers, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) +"pC" = ( +/turf/open/auto_turf/strata_grass/layer1, /area/lv624/ground/barrens/north_east_barrens) -"l" = ( -/turf/closed/wall/rock/brown, +"pR" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/plumphelmet{ + pixel_x = 8; + pixel_y = 13 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) +"qK" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) +"ry" = ( +/obj/structure/flora/bush/ausbushes/var3/leafybush, +/turf/open/auto_turf/strata_grass/layer1, /area/lv624/ground/caves/south_central_caves) -"m" = ( +"sL" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) +"sO" = ( +/turf/closed/wall/strata_ice/jungle, +/area/lv624/ground/caves/south_central_caves) +"vC" = ( /obj/structure/blocker/forcefield/multitile_vehicles, /obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, /obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 6 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) +"vR" = ( +/obj/structure/flora/bush/ausbushes/var3/fullgrass, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) +"wk" = ( +/turf/closed/wall/rock/brown, +/area/lv624/ground/caves/south_central_caves) +"wL" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 10 + }, /turf/open/gm/dirt, /area/lv624/ground/caves/south_central_caves) -"n" = ( +"yv" = ( /obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, /obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/obj/effect/decal/grass_overlay/grass1, /turf/open/gm/dirt, /area/lv624/ground/caves/south_central_caves) -"o" = ( -/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +"yD" = ( /turf/open/gm/dirt, /area/lv624/ground/barrens/north_east_barrens) -"q" = ( -/obj/structure/fence, -/turf/open/floor{ - dir = 9; - icon_state = "warning" +"yO" = ( +/obj/effect/decal/grass_overlay/grass1, +/turf/open/gm/dirt, +/area/lv624/ground/barrens/north_east_barrens) +"zh" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 6 }, -/area/lv624/ground/barrens/containers) -"r" = ( +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) +"An" = ( +/obj/structure/blocker/forcefield/multitile_vehicles, +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) +"AL" = ( +/obj/effect/landmark/objective_landmark/close, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) +"DG" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 8 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) +"ER" = ( +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) +"GE" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 4; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/barrens/north_east_barrens) +"GR" = ( +/obj/effect/landmark/hunter_primary, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 10 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) +"Is" = ( +/obj/structure/blocker/forcefield/multitile_vehicles, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) +"Jf" = ( +/obj/structure/flora/bush/ausbushes/var3/brflowers, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) +"JB" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 1 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) +"JX" = ( +/obj/structure/flora/bush/ausbushes/lavendergrass, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) +"JZ" = ( /obj/structure/fence, /turf/open/floor{ dir = 1; icon_state = "warning" }, /area/lv624/ground/barrens/containers) -"w" = ( +"KX" = ( +/turf/open/gm/dirt, +/area/lv624/ground/barrens/west_barrens) +"Od" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/obj/effect/decal/grass_overlay/grass1{ + dir = 1 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/south_central_caves) +"Oe" = ( +/obj/structure/flora/bush/ausbushes/ppflowers, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/central_caves) +"Pd" = ( /obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, /obj/effect/landmark/structure_spawner/setup/distress/xeno_wall, +/obj/effect/decal/grass_overlay/grass1{ + dir = 1 + }, /turf/open/gm/dirt, /area/lv624/ground/caves/south_central_caves) -"x" = ( -/obj/effect/landmark/objective_landmark/close, +"PB" = ( /turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) +"Rx" = ( +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/turf/open/auto_turf/strata_grass/layer1, /area/lv624/ground/caves/south_central_caves) -"y" = ( -/turf/closed/wall/rock/brown, -/area/lv624/ground/barrens/west_barrens) -"C" = ( -/turf/open/gm/dirt, +"Tu" = ( +/obj/effect/landmark/structure_spawner/xvx_hive/xeno_door, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_door, +/obj/effect/decal/grass_overlay/grass1{ + dir = 8 + }, +/turf/open/auto_turf/strata_grass/layer1, /area/lv624/ground/caves/south_central_caves) -"O" = ( +"Uu" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = 4; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) +"UB" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 1 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) +"Vd" = ( /obj/effect/landmark/hunter_primary, +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 9 + }, /turf/open/gm/dirt, /area/lv624/ground/caves/south_central_caves) -"P" = ( -/obj/effect/landmark/structure_spawner/xvx_hive/xeno_membrane, -/obj/effect/landmark/structure_spawner/setup/distress/xeno_membrane, +"VY" = ( +/obj/item/reagent_container/food/snacks/grown/mushroom/glowshroom{ + pixel_x = -10; + pixel_y = -2; + light_on = 1; + light_range = 1; + light_system = 1 + }, +/turf/open/auto_turf/strata_grass/layer1, +/area/lv624/ground/caves/south_central_caves) +"Xj" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 10 + }, /turf/open/gm/dirt, /area/lv624/ground/caves/south_central_caves) -"Y" = ( +"XV" = ( /turf/open/gm/dirt, -/area/lv624/ground/barrens/west_barrens) +/area/lv624/ground/caves/south_central_caves) +"ZM" = ( +/obj/effect/decal/grass_overlay/grass1{ + dir = 4 + }, +/turf/open/gm/dirt, +/area/lv624/ground/barrens/north_east_barrens) +"ZU" = ( +/obj/effect/decal/grass_overlay/grass1/inner{ + dir = 5 + }, +/turf/open/gm/dirt, +/area/lv624/ground/caves/central_caves) (1,1,1) = {" -f -n -C -C -O -C -C -C -C -n -C -g -C -C -l -l -l -l -l -l -l +PB +qK +dd +DG +Vd +ER +ER +wL +Xj +qK +XV +sL +XV +XV +wk +wk +wk +wk +wk +wk +wk "} (2,1,1) = {" -f -n -C -g -C -C -C -g -C -n -C -C -C -C -C -l -l -l -l -y -Y +PB +qK +JB +Rx +ER +ks +ER +ER +hJ +qK +XV +XV +XV +XV +XV +wk +wk +wk +wk +lq +KX "} (3,1,1) = {" -f -n -C -C -l -l -l -w -w -w -C -C -C -C -C -C -l -l -l -Y -Y +PB +qK +JB +ER +ER +sO +sO +wk +hJ +qK +XV +XV +XV +XV +XV +XV +wk +wk +wk +KX +KX "} (4,1,1) = {" -f -w -l -l -l -l -l -l -l -l -l -C -C -C -C -C -l -l -l -Y -Y +PB +aD +wk +wk +sO +sO +wk +wk +wk +wk +wk +XV +XV +XV +XV +XV +wk +wk +wk +KX +KX "} (5,1,1) = {" -l -l -l -l -l -l -l -l -l -l -l -C -C -C -C -C -C -l -l -y -Y +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +XV +XV +XV +XV +XV +XV +wk +wk +lq +KX "} (6,1,1) = {" -l -l -l -l -l -l -l -l -l -l -l -l -l -C -C -C -C -C -l -y -Y +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +XV +XV +XV +XV +XV +wk +lq +KX "} (7,1,1) = {" -l -l -l -l -l -l -l -l -l -l -l -l -l -l -C -g -C -C -l -l -y +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +Tu +yv +qK +qK +wk +wk +lq "} (8,1,1) = {" -l -l -l -l -l -l -l -l -l -l -l -l -l -l -n -n -n -n -l -l -l +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +ER +wL +Xj +XV +AL +wk +wk "} (9,1,1) = {" -l -l -l -l -l -l -l -l -l -l -l -l -l -l -C -C -C -C -C -l -l +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +ER +kc +ER +hJ +XV +XV +wk +wk "} (10,1,1) = {" -l -l -l -l -l -l -l -l -l -l -l -l -l -P -C -C -C -C -C -l -l +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +sO +ER +ER +ER +hJ +XV +XV +wk +wk "} (11,1,1) = {" -l -l -l -l -l -l -l -l -l -l -l -l -P -P -C -C -C -C -l -l -l +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +sO +sO +ks +ER +bV +zh +XV +XV +wk +wk "} (12,1,1) = {" -l -l -l -l -l -l -l -l -l -l -l -P -P -C -C -C -C -l -l -l -l +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +sO +sO +sO +ER +ER +hJ +sL +XV +XV +wk +wk "} (13,1,1) = {" -l -l -l -l -l -l -l -l -l -l -l -P -C -C -C -C -g -l -l -l -l +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +sO +ER +ER +Rx +ER +GR +Xj +XV +XV +wk +wk "} (14,1,1) = {" -l -l -l -l -l -l -l -l -l -l -l -l -C -C -C -O -C -l -l -l -l +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +sO +ER +ER +ER +ER +hJ +XV +XV +wk +wk "} (15,1,1) = {" -l -l -l -l -l -l -C -C -l -l -l -l -l -C -C -C -C -C -l -l -l +wk +wk +wk +wk +wk +wk +XV +XV +wk +wk +wk +pd +iS +ER +ER +ER +hJ +XV +XV +wk +wk "} (16,1,1) = {" -l -l -l -l -l -C -C -C -C -l -l -l -l -l -C -C -C -C -C -l -l +wk +wk +wk +wk +wk +XV +XV +XV +XV +wk +wk +wk +sO +sO +ER +hP +hJ +XV +wk +wk +wk "} (17,1,1) = {" -l -l -l -C -C -C -C -C -C -C -l -l -l -C -C -g -C -x -l -l -l +wk +wk +wk +XV +XV +XV +XV +XV +XV +XV +wk +wk +wk +sO +ER +ER +hJ +XV +wk +wk +wk "} (18,1,1) = {" -l -l -l -C -C -g -C -C -C -g -C -C -l -C -C -C -C -P -l -l -l +wk +wk +wk +XV +XV +sL +XV +XV +XV +sL +XV +XV +wk +sO +ER +Jf +hJ +XV +wk +wk +wk "} (19,1,1) = {" -l -l -C -C -C -C -C -C -C -C -C -C -n -C -C -C -C -P -l -l -l +wk +wk +XV +XV +XV +XV +XV +XV +XV +XV +XV +XV +Od +ER +ER +ER +wL +Xj +XV +wk +wk "} (20,1,1) = {" -l -C -C -C -C -C -l -l -C -C -C -C -n -C -C -C -C -P -P -l -l +wk +XV +XV +XV +XV +XV +wk +wk +XV +XV +XV +XV +Od +ER +ER +VY +Rx +hJ +XV +wk +wk "} (21,1,1) = {" -f -C -C -C -C -C -l -l -C -C -C -g -w -C -C -C -g -C -P -l -l +PB +XV +XV +XV +XV +XV +wk +wk +XV +XV +XV +sL +Pd +ER +ER +ER +ER +hJ +XV +wk +wk "} (22,1,1) = {" -f -C -g -C -C -l -l -l -l -C -C -C -n -C -C -C -C -C -P -l -l +PB +XV +sL +XV +XV +wk +wk +wk +wk +XV +XV +XV +Od +ER +Rx +ER +JX +hJ +XV +wk +wk "} (23,1,1) = {" -f -f -C -C -l -l -l -l -l -l -C -C -n -C -C -C -C -C -P -l -l +PB +PB +XV +XV +wk +wk +wk +wk +wk +wk +XV +XV +Od +ER +ry +ER +bV +zh +XV +wk +wk "} (24,1,1) = {" -f -f -C -C -l -l -l -l -l -l -l -l -l -C -C -C -C -C -C -l -l +PB +PB +XV +XV +wk +wk +wk +wk +wk +wk +wk +wk +wk +pR +ER +ER +hJ +XV +wk +wk +wk "} (25,1,1) = {" -f -f -C -l -l -l -l -l -l -l -l -l -C -C -C -C -C -C -l -l -l +PB +PB +XV +wk +wk +wk +wk +wk +wk +wk +sO +sO +ER +ER +ER +Rx +hJ +XV +wk +wk +wk "} (26,1,1) = {" -f -f -C -l -l -l -l -l -l -l -l -x -C -C -C -g -C -C -l -l -l +PB +PB +XV +wk +wk +wk +wk +wk +wk +wk +sO +ER +ER +ER +Uu +ER +hJ +wk +wk +wk +wk "} (27,1,1) = {" -f -f -l -l -l -l -l -l -l -l -l -l -C -C -C -C -C -l -l -l -q +PB +PB +wk +wk +wk +wk +wk +wk +wk +wk +sO +sO +ER +ER +ER +ER +hJ +wk +wk +wk +hW "} (28,1,1) = {" -f -h -l -l -l -l -l -l -l -l -l -l -l -C -C -C -C -l -l -l -r +PB +oJ +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +ER +ER +ER +wk +wk +wk +wk +JZ "} (29,1,1) = {" -f -f -l -l -l -l -l -l -l -l -l -l -l -m -m -m -l -l -l -l -r +PB +UB +wk +wk +wk +wk +wk +wk +wk +wk +wk +sO +sO +An +An +vC +wk +wk +wk +wk +JZ "} (30,1,1) = {" -f -f -l -l -l -l -l -l -l -l -l -l -l -k -k -k -l -l -k -k -r +PB +UB +oB +wk +wk +wk +wk +wk +wk +wk +wk +wk +wk +ZM +ZM +ZM +wk +wk +yD +yD +JZ "} (31,1,1) = {" -f -f -f -l -l -l -l -l -l -l -l -l -k -k -k -k -k -k -k -k -r +PB +gU +Oe +sO +wk +wk +wk +wk +wk +wk +wk +wk +yD +yD +yD +yD +yD +yD +yD +yD +JZ "} (32,1,1) = {" -h -f -l -l -l -l -l -l -l -l -l -l -l -k -k -k -k -k -o -k -r +UB +lp +sO +sO +wk +wk +wk +wk +sO +sO +wk +wk +wk +yD +yD +yD +yD +yD +mN +yD +JZ "} (33,1,1) = {" -f -e -e -k -k -k -l -l -l -k -k -l -k -k -k -k -k -k -k -k -r +PB +ZU +Is +pC +pC +pC +vR +sO +sO +GE +yO +wk +yD +yD +yD +yD +yD +yD +yD +yD +JZ "} diff --git a/maps/map_files/LV624/hydro/30.destroyed.dmm b/maps/map_files/LV624/hydro/30.destroyed.dmm index 84e9ebb5c814..09eb12287a58 100644 --- a/maps/map_files/LV624/hydro/30.destroyed.dmm +++ b/maps/map_files/LV624/hydro/30.destroyed.dmm @@ -164,8 +164,8 @@ /area/lv624/lazarus/hydroponics) "mK" = ( /obj/item/clothing/suit/storage/marine/veteran/pmc/light/synth{ - desc = "A modification of the standard Armat Systems M3 armor. This variant was designed for PMC Support Units in the field, offering protection and storage while not restricting movement. This set seems damaged..."; - name = "damaged M4 synthetic PMC armor"; + desc = "A serious modification of the standard Armat Systems M3 armor. This variant was designed for PMC Support Units in the field, with every armor insert removed. It's designed with the idea of a high speed lifesaver in mind. This set seems damaged..."; + name = "damaged M4 Synthetic PMC armor"; pixel_x = -5; pixel_y = -5 }, diff --git a/maps/map_files/LV624/science/10.yautja.dmm b/maps/map_files/LV624/science/10.yautja.dmm index c77bacd35202..04e671be3259 100644 --- a/maps/map_files/LV624/science/10.yautja.dmm +++ b/maps/map_files/LV624/science/10.yautja.dmm @@ -538,18 +538,6 @@ icon_state = "white" }, /area/lv624/lazarus/research) -"WJ" = ( -/obj/effect/landmark/crap_item, -/obj/structure/machinery/door_control{ - id = "secure_inner_blast"; - name = "Secure Inner Doors"; - pixel_x = -25; - pixel_y = 5 - }, -/turf/open/floor{ - icon_state = "white" - }, -/area/lv624/lazarus/research) "Zw" = ( /obj/structure/surface/table, /obj/item/storage/fancy/vials/random, @@ -670,7 +658,7 @@ al ar aJ Lo -WJ +gd ar aZ CC diff --git a/maps/map_files/LV624/science/40.fullylocked.dmm b/maps/map_files/LV624/science/40.fullylocked.dmm index 8e523f6c7e9c..933de359a481 100644 --- a/maps/map_files/LV624/science/40.fullylocked.dmm +++ b/maps/map_files/LV624/science/40.fullylocked.dmm @@ -417,17 +417,6 @@ "bF" = ( /turf/closed/wall/strata_ice/jungle, /area/lv624/ground/jungle/central_jungle) -"gu" = ( -/obj/structure/machinery/door_control{ - id = "secure_inner_blast"; - name = "Secure Inner Doors"; - pixel_x = -25; - pixel_y = 5 - }, -/turf/open/floor{ - icon_state = "white" - }, -/area/lv624/lazarus/research) "ky" = ( /obj/effect/landmark/objective_landmark/science, /turf/open/floor{ @@ -608,7 +597,7 @@ ay au aQ Kl -gu +ak au bp ay diff --git a/maps/map_files/New_Varadero/New_Varadero.dmm b/maps/map_files/New_Varadero/New_Varadero.dmm index aeddb1aa1021..656c4a7f48b1 100644 --- a/maps/map_files/New_Varadero/New_Varadero.dmm +++ b/maps/map_files/New_Varadero/New_Varadero.dmm @@ -788,7 +788,7 @@ /area/varadero/exterior/pool) "aAX" = ( /obj/docking_port/stationary/marine_dropship/lz2{ - name = "LZ2 - Palm Airfield" + name = "LZ2: Palm Airfield" }, /turf/open/gm/dirt, /area/varadero/exterior/lz2_near) @@ -23224,7 +23224,7 @@ /area/varadero/interior/security) "oXw" = ( /obj/docking_port/stationary/marine_dropship/lz1{ - name = "LZ1 - Pontoon Dock" + name = "LZ1: Pontoon Dock" }, /turf/open/floor/plating/icefloor, /area/varadero/exterior/lz1_near) diff --git a/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm b/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm index 19a7717a7e67..84355a59b16d 100644 --- a/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm +++ b/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm @@ -7794,7 +7794,9 @@ }, /area/strata/ag/interior/outpost/engi) "axf" = ( -/obj/structure/surface/table/reinforced/prison, +/obj/structure/tunnel/maint_tunnel{ + pixel_y = 16 + }, /turf/open/floor/strata, /area/strata/ag/interior/outpost/engi) "axg" = ( @@ -10464,11 +10466,13 @@ }, /area/strata/ag/interior/outpost/canteen) "aFC" = ( -/obj/structure/tunnel{ - id = "hole3" +/obj/structure/machinery/light/small, +/obj/structure/tunnel/maint_tunnel, +/turf/open/floor/strata{ + dir = 10; + icon_state = "multi_tiles" }, -/turf/open/auto_turf/snow/brown_base/layer0, -/area/strata/ag/exterior/paths/north_outpost) +/area/strata/ag/interior/outpost/engi/drome) "aFD" = ( /turf/closed/wall/strata_ice/jungle, /area/strata/ag/interior/outpost/maint/canteen_e_1) @@ -16510,11 +16514,9 @@ /turf/open/auto_turf/snow/brown_base/layer2, /area/strata/ag/interior/disposals) "bad" = ( -/obj/structure/tunnel{ - id = "hole4" - }, -/turf/open/auto_turf/snow/brown_base/layer2, -/area/strata/ag/exterior/north_lz_caves) +/obj/structure/tunnel, +/turf/open/auto_turf/strata_grass/layer1, +/area/strata/ug/interior/jungle/deep/tearlake) "bae" = ( /obj/structure/prop/almayer/computers/mapping_computer, /turf/open/floor/strata{ @@ -18476,12 +18478,9 @@ }, /area/strata/ug/interior/outpost/jung/dorms/admin4) "bgX" = ( -/obj/structure/flora/bush/ausbushes/grassybush, -/obj/structure/tunnel{ - id = "hole2" - }, -/turf/open/auto_turf/strata_grass/layer1, -/area/strata/ug/exterior/jungle/deep/carplake_center) +/obj/structure/tunnel, +/turf/open/auto_turf/ice/layer1, +/area/strata/ag/exterior/marsh/center) "bha" = ( /obj/structure/pipes/standard/simple/hidden/cyan, /turf/open/auto_turf/snow/brown_base/layer1, @@ -21979,11 +21978,9 @@ /turf/open/auto_turf/snow/brown_base/layer2, /area/strata/ag/exterior/marsh/center) "bui" = ( -/obj/structure/tunnel{ - id = "hole1" - }, -/turf/open/auto_turf/snow/brown_base/layer3, -/area/strata/ag/exterior/tcomms/tcomms_deck) +/obj/structure/tunnel, +/turf/open/auto_turf/strata_grass/layer1, +/area/strata/ug/interior/jungle/deep/minehead) "bul" = ( /obj/item/tool/shovel/snow, /turf/open/auto_turf/snow/brown_base/layer1, @@ -34633,6 +34630,12 @@ "lbh" = ( /turf/open/asphalt/cement, /area/strata/ag/exterior/tcomms/tcomms_deck) +"lbW" = ( +/obj/structure/tunnel/maint_tunnel, +/turf/open/floor/strata{ + icon_state = "floor3" + }, +/area/strata/ag/interior/outpost/admin) "lcq" = ( /obj/item/clothing/suit/storage/militia, /obj/item/clothing/suit/storage/snow_suit/doctor, @@ -36226,6 +36229,10 @@ }, /turf/open/auto_turf/strata_grass/layer1, /area/strata/ug/interior/jungle/deep/hotsprings) +"nPr" = ( +/obj/structure/tunnel, +/turf/open/auto_turf/strata_grass/layer1, +/area/strata/ug/interior/jungle/deep/east_carp) "nPJ" = ( /obj/structure/pipes/standard/manifold/hidden/cyan, /turf/open/floor/strata, @@ -37410,12 +37417,14 @@ }, /area/strata/ag/interior/tcomms) "pMU" = ( -/obj/structure/flora/bush/ausbushes/grassybush, -/obj/structure/tunnel{ - id = "hole1" +/obj/structure/tunnel/maint_tunnel{ + pixel_y = 16 }, -/turf/open/auto_turf/strata_grass/layer1, -/area/strata/ug/interior/jungle/platform/east/scrub) +/turf/open/floor/strata{ + dir = 10; + icon_state = "multi_tiles" + }, +/area/strata/ag/interior/outpost/canteen/personal_storage) "pNL" = ( /obj/structure/stairs/perspective{ color = "#6e6e6e"; @@ -49411,7 +49420,7 @@ aXP aYd aac aac -bad +aYd aYd aXP aXP @@ -49825,7 +49834,7 @@ aac aac rsm coC -coC +bgX coC wrw aac @@ -55882,7 +55891,7 @@ aac aac aac aac -bui +btX btq btq btv @@ -60485,7 +60494,7 @@ ayr ayr aCu aAb -aFC +ayw ayw aAR awJ @@ -64616,7 +64625,7 @@ biK blQ biH bsC -bll +lbW cik bCo bGO @@ -69514,7 +69523,7 @@ bvz gUj snV srk -pMU +wij wZZ htD wZZ @@ -69706,7 +69715,7 @@ bgO bht bzl cfg -ppA +aFC snV tnM srk @@ -73738,7 +73747,7 @@ awb agR agR aiM -bPZ +pMU bPZ bPZ bSv @@ -74254,7 +74263,7 @@ jLb jLb sKX jLb -jLb +bad aad aad aad @@ -78846,7 +78855,7 @@ cpg cpg cpg cpg -bgX +kvY piY piY cwD @@ -84455,7 +84464,7 @@ aad aad bHj bHj -vVK +bui bon bon bon @@ -86083,7 +86092,7 @@ sKg sKg sKg daq -daq +nPr daq daq sKg diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index a37cd9d07230..263bce521d2a 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -790,7 +790,7 @@ "acE" = ( /obj/structure/closet/emcloset, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "cargo" }, /area/almayer/lifeboat_pumps/north2) "acF" = ( @@ -918,7 +918,7 @@ "acT" = ( /obj/structure/closet/firecloset, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "cargo" }, /area/almayer/lifeboat_pumps/north2) "acU" = ( @@ -1088,12 +1088,6 @@ "adu" = ( /turf/open/floor/almayer, /area/almayer/shipboard/starboard_missiles) -"adv" = ( -/obj/structure/machinery/power/apc/almayer{ - dir = 8 - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "ady" = ( /obj/effect/step_trigger/clone_cleaner, /obj/effect/decal/warning_stripes{ @@ -1177,11 +1171,14 @@ }, /area/almayer/lifeboat_pumps/north1) "adQ" = ( -/obj/structure/closet/emcloset, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_y = 1 + }, /turf/open/floor/almayer{ icon_state = "mono" }, -/area/almayer/lifeboat_pumps/north1) +/area/almayer/lifeboat_pumps/north2) "adR" = ( /obj/structure/machinery/door/airlock/almayer/generic{ access_modified = 1; @@ -1211,11 +1208,12 @@ }, /area/almayer/hallways/aft_hallway) "adZ" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/almayer{ - icon_state = "mono" +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 }, -/area/almayer/lifeboat_pumps/north1) +/turf/open/floor/almayer, +/area/almayer/lifeboat_pumps/north2) "aea" = ( /obj/structure/machinery/light{ dir = 1 @@ -1317,16 +1315,6 @@ "aet" = ( /turf/closed/wall/almayer, /area/almayer/living/starboard_garden) -"aew" = ( -/obj/structure/machinery/firealarm{ - pixel_y = 28 - }, -/obj/structure/closet/secure_closet/bar{ - name = "Success Cabinet"; - req_access_txt = "1" - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "aex" = ( /obj/item/reagent_container/food/drinks/cans/beer{ pixel_x = 6; @@ -1580,6 +1568,10 @@ density = 0; pixel_y = 17 }, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, /turf/open/floor/almayer, /area/almayer/hull/upper_hull/u_f_s) "afd" = ( @@ -2119,18 +2111,6 @@ icon_state = "plate" }, /area/almayer/living/cafeteria_officer) -"aha" = ( -/obj/structure/machinery/door/firedoor/border_only/almayer, -/obj/structure/machinery/door/airlock/almayer/command/reinforced{ - access_modified = 1; - name = "\improper Commanding Officer's Quarters"; - req_access = null; - req_access_txt = "31" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/living/commandbunks) "ahb" = ( /obj/structure/machinery/light/small{ dir = 1 @@ -2254,20 +2234,6 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_f_p) -"ahv" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) -"ahw" = ( -/obj/structure/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "ahx" = ( /obj/structure/window/framed/almayer/hull, /turf/open/floor/plating, @@ -2375,43 +2341,6 @@ icon_state = "bluecorner" }, /area/almayer/living/offices/flight) -"ahY" = ( -/obj/structure/machinery/light, -/obj/structure/surface/table/woodentable/fancy, -/obj/item/clothing/shoes/laceup{ - desc = "The height of fashion, and they're pre-polished! The name 'Bob' is written on the inside."; - pixel_y = -5 - }, -/obj/effect/landmark/map_item, -/obj/item/device/flashlight/lamp/green, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) -"ahZ" = ( -/obj/structure/surface/table/woodentable/fancy, -/obj/item/paper_bin/uscm, -/obj/item/tool/pen, -/obj/structure/machinery/door_control{ - id = "ARES StairsLock"; - name = "ARES Exterior Lockdown Override"; - pixel_x = 8; - pixel_y = -24; - req_one_access_txt = "90;91;92" - }, -/obj/structure/machinery/door_control{ - id = "ARES Emergency"; - name = "ARES Emergency Lockdown Override"; - pixel_y = -24; - req_one_access_txt = "91;92" - }, -/obj/structure/machinery/door_control{ - id = "Brig Lockdown Shutters"; - name = "Brig Lockdown Override"; - pixel_x = -8; - pixel_y = -24; - req_access_txt = "1;3" - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "aia" = ( /turf/open/floor/almayer{ dir = 8; @@ -2623,14 +2552,6 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_s) -"aiF" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) -"aiG" = ( -/obj/structure/filingcabinet, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "aiH" = ( /turf/open/floor/almayer{ icon_state = "plate" @@ -2699,10 +2620,6 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_f_s) -"aiW" = ( -/obj/structure/pipes/standard/simple/hidden/supply, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) "aiX" = ( /turf/closed/wall/almayer, /area/almayer/living/pilotbunks) @@ -3046,55 +2963,6 @@ icon_state = "redcorner" }, /area/almayer/shipboard/weapon_room) -"akk" = ( -/obj/structure/machinery/door/window/westright{ - dir = 4 - }, -/obj/structure/machinery/shower{ - dir = 4 - }, -/obj/structure/window/reinforced, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/living/commandbunks) -"akl" = ( -/obj/structure/machinery/light{ - dir = 1 - }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" - }, -/area/almayer/living/commandbunks) -"akm" = ( -/obj/structure/machinery/door/airlock/almayer/generic{ - name = "\improper Bathroom" - }, -/obj/structure/machinery/door/firedoor/border_only/almayer, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/living/commandbunks) -"akn" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/pipes/standard/manifold/hidden/supply{ - dir = 4 - }, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) -"ako" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) -"akp" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "akr" = ( /obj/structure/disposalpipe/segment{ dir = 8; @@ -3102,12 +2970,6 @@ }, /turf/open/floor/wood/ship, /area/almayer/living/commandbunks) -"aks" = ( -/obj/structure/surface/table/almayer, -/obj/item/clipboard, -/obj/item/device/binoculars, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "akt" = ( /obj/structure/cable/heavyduty{ icon_state = "4-8" @@ -3335,27 +3197,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/living/starboard_garden) -"alb" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/structure/mirror{ - pixel_x = -28 - }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" - }, -/area/almayer/living/commandbunks) -"alc" = ( -/obj/structure/toilet{ - dir = 8 - }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" - }, -/area/almayer/living/commandbunks) "ald" = ( /turf/open/floor/almayer{ icon_state = "red" @@ -3394,15 +3235,6 @@ icon_state = "bluecorner" }, /area/almayer/hallways/aft_hallway) -"alj" = ( -/obj/structure/surface/table/almayer, -/obj/item/paper, -/obj/item/device/whistle, -/obj/structure/sign/safety/bathunisex{ - pixel_x = -17 - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "alk" = ( /obj/structure/machinery/door/poddoor/shutters/almayer{ dir = 4; @@ -3420,13 +3252,6 @@ /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer, /area/almayer/hallways/aft_hallway) -"alo" = ( -/obj/structure/flora/pottedplant{ - icon_state = "pottedplant_18" - }, -/obj/structure/machinery/light, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "alp" = ( /turf/open/floor/almayer{ dir = 9; @@ -3447,12 +3272,6 @@ icon_state = "bluecorner" }, /area/almayer/hallways/aft_hallway) -"alu" = ( -/obj/structure/surface/table/almayer, -/obj/item/device/megaphone, -/obj/item/device/radio, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "alw" = ( /obj/structure/machinery/door/airlock/almayer/generic{ dir = 2; @@ -3887,6 +3706,12 @@ }, /turf/open/floor/almayer, /area/almayer/hallways/aft_hallway) +"anl" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 5 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_f_s) "anm" = ( /obj/structure/stairs{ icon_state = "ramptop" @@ -4227,15 +4052,6 @@ icon_state = "bluecorner" }, /area/almayer/hallways/aft_hallway) -"aox" = ( -/obj/structure/machinery/cm_vending/sorted/medical/wall_med{ - pixel_y = 25 - }, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "silver" - }, -/area/almayer/command/cichallway) "aoy" = ( /obj/structure/sign/safety/fire_haz{ pixel_x = 8; @@ -4476,10 +4292,6 @@ icon_state = "plating" }, /area/almayer/engineering/upper_engineering) -"aoZ" = ( -/obj/structure/sign/prop1, -/turf/closed/wall/almayer/reinforced, -/area/almayer/living/commandbunks) "apa" = ( /obj/structure/surface/rack, /obj/item/tool/screwdriver, @@ -6134,17 +5946,12 @@ icon_state = "blue" }, /area/almayer/hallways/aft_hallway) -"atW" = ( -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/lifeboat_pumps/north1) "atY" = ( /obj/structure/closet/emcloset, /obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "cargo" }, /area/almayer/command/lifeboat) "atZ" = ( @@ -8939,6 +8746,14 @@ icon_state = "orangecorner" }, /area/almayer/command/telecomms) +"aDc" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + icon_state = "red" + }, +/area/almayer/command/lifeboat) "aDe" = ( /obj/structure/machinery/light{ dir = 8 @@ -10883,6 +10698,15 @@ icon_state = "dark_sterile" }, /area/almayer/living/numbertwobunks) +"aLA" = ( +/obj/item/trash/uscm_mre, +/obj/structure/bed/chair/comfy/charlie{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "emeraldfull" + }, +/area/almayer/living/briefing) "aLB" = ( /turf/closed/wall/almayer, /area/almayer/hallways/starboard_hallway) @@ -11229,7 +11053,7 @@ /obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "cargo" }, /area/almayer/command/lifeboat) "aNi" = ( @@ -12206,12 +12030,25 @@ }, /area/almayer/medical/upper_medical) "aSh" = ( -/obj/structure/bed/chair/comfy/alpha{ - dir = 1 +/obj/structure/surface/table/almayer, +/obj/item/device/flashlight/lamp{ + layer = 3.3; + pixel_x = 15 + }, +/obj/item/paper_bin/uscm{ + pixel_x = -7; + pixel_y = 6 + }, +/obj/item/tool/pen{ + pixel_x = -11; + pixel_y = 5 + }, +/obj/item/tool/pen{ + pixel_x = -10; + pixel_y = -2 }, -/obj/item/prop/helmetgarb/helmet_nvg/cosmetic, /turf/open/floor/almayer{ - icon_state = "redfull" + icon_state = "plate" }, /area/almayer/living/briefing) "aSl" = ( @@ -12638,11 +12475,9 @@ /area/almayer/living/basketball) "aTV" = ( /obj/structure/toilet{ - dir = 1 - }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" + dir = 4 }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/cells) "aTW" = ( /obj/structure/bed/chair{ @@ -12828,6 +12663,12 @@ icon_state = "green" }, /area/almayer/living/offices) +"aUP" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "aUY" = ( /obj/structure/machinery/light{ dir = 4 @@ -13182,9 +13023,7 @@ pixel_x = -6; pixel_y = -10 }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/living/captain_mess) "aWD" = ( /obj/structure/window/framed/almayer, @@ -14275,20 +14114,6 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/chemistry) -"bcB" = ( -/obj/structure/machinery/light{ - dir = 1 - }, -/obj/structure/machinery/light{ - dir = 1 - }, -/obj/structure/surface/table/almayer, -/obj/item/tool/hand_labeler, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "sterile_green_side" - }, -/area/almayer/medical/chemistry) "bcC" = ( /obj/item/reagent_container/glass/beaker/bluespace, /obj/structure/machinery/chem_dispenser/medbay, @@ -14800,6 +14625,16 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_m_p) +"bfe" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "orange" + }, +/area/almayer/engineering/upper_engineering/port) "bfl" = ( /turf/open/floor/almayer{ dir = 5; @@ -19192,18 +19027,6 @@ icon_state = "cargo" }, /area/almayer/living/cryo_cells) -"bCO" = ( -/obj/item/tool/kitchen/tray{ - layer = 2.9 - }, -/obj/item/reagent_container/food/snacks/carpmeat{ - layer = 3.3 - }, -/obj/item/reagent_container/food/snacks/carpmeat{ - layer = 3.3 - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "bCP" = ( /obj/structure/bed/chair{ dir = 1 @@ -20363,6 +20186,28 @@ "bHP" = ( /turf/open/floor/plating/almayer, /area/almayer/shipboard/weapon_room) +"bHS" = ( +/obj/structure/surface/table/almayer, +/obj/item/trash/USCMtray{ + pixel_y = 4 + }, +/obj/item/trash/USCMtray{ + pixel_y = 6 + }, +/obj/item/trash/USCMtray{ + pixel_y = 8 + }, +/obj/item/trash/USCMtray{ + pixel_y = 10 + }, +/obj/item/device/flashlight/lamp{ + layer = 3.3; + pixel_x = 15 + }, +/turf/open/floor/almayer{ + icon_state = "emeraldfull" + }, +/area/almayer/living/briefing) "bHT" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -20531,12 +20376,6 @@ }, /turf/closed/wall/almayer/reinforced, /area/almayer/shipboard/navigation) -"bIz" = ( -/mob/living/simple_animal/cat/Jones{ - dir = 8 - }, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) "bIA" = ( /obj/structure/sink{ dir = 4; @@ -20549,8 +20388,11 @@ unacidable = 1; unslashable = 1 }, +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "dark_sterile" }, /area/almayer/living/auxiliary_officer_office) "bII" = ( @@ -22639,9 +22481,7 @@ /obj/structure/machinery/light{ dir = 8 }, -/turf/open/floor/almayer/no_build{ - icon_state = "ai_floors" - }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/command/airoom) "bRr" = ( /obj/structure/machinery/fuelcell_recycler, @@ -23379,17 +23219,6 @@ icon_state = "plate" }, /area/almayer/hallways/port_hallway) -"bUA" = ( -/obj/structure/surface/table/almayer, -/obj/item/tool/screwdriver, -/obj/item/prop/helmetgarb/gunoil{ - pixel_x = -7; - pixel_y = 12 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "bUE" = ( /turf/open/floor/almayer{ dir = 4; @@ -23532,6 +23361,13 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/medical/medical_science) +"bVg" = ( +/obj/structure/machinery/status_display{ + pixel_x = 32; + pixel_y = 16 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "bVi" = ( /obj/structure/disposalpipe/segment{ dir = 8; @@ -23879,18 +23715,10 @@ /area/almayer/engineering/engineering_workshop) "bXc" = ( /obj/structure/surface/table/almayer, -/obj/item/reagent_container/food/snacks/mre_pack/xmas2{ - pixel_x = 5; +/obj/structure/machinery/microwave{ pixel_y = 9 }, -/obj/effect/landmark/map_item{ - layer = 3.03; - pixel_x = -7; - pixel_y = 4 - }, -/obj/item/reagent_container/food/snacks/mre_pack/xmas3{ - pixel_x = 5 - }, +/obj/item/reagent_container/food/snacks/packaged_burger, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -24134,10 +23962,6 @@ /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/aft_hallway) -"bYd" = ( -/obj/structure/bookcase/manuals/engineering, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "bYe" = ( /turf/open/floor/almayer{ icon_state = "mono" @@ -25088,6 +24912,15 @@ icon_state = "ai_floors" }, /area/almayer/command/airoom) +"ccm" = ( +/obj/structure/machinery/light{ + dir = 8 + }, +/obj/structure/closet/secure_closet/fridge/organic, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/grunt_rnr) "ccq" = ( /obj/effect/decal/warning_stripes{ icon_state = "W" @@ -25223,14 +25056,14 @@ }, /area/almayer/engineering/lower_engineering) "ccF" = ( -/obj/structure/bed/chair/comfy/alpha{ - dir = 1 - }, /obj/structure/machinery/light{ dir = 8 }, +/obj/structure/bed/chair/comfy/alpha{ + dir = 1 + }, /turf/open/floor/almayer{ - icon_state = "redfull" + icon_state = "plate" }, /area/almayer/living/briefing) "ccG" = ( @@ -25833,15 +25666,27 @@ /turf/open/floor/almayer, /area/almayer/squads/charlie) "cgz" = ( -/obj/structure/bed/chair/comfy/charlie, /obj/structure/sign/poster{ desc = "Eat an EAT bar! ...Aren't they called MEAT bars?"; icon_state = "poster7"; name = "EAT - poster"; pixel_x = 27 }, +/obj/structure/surface/table/almayer, +/obj/item/paper_bin/uscm{ + pixel_x = 9; + pixel_y = 6 + }, +/obj/item/tool/pen{ + pixel_x = 9; + pixel_y = 9 + }, +/obj/item/tool/pen{ + pixel_x = 9; + pixel_y = 2 + }, /turf/open/floor/almayer{ - icon_state = "emeraldfull" + icon_state = "plate" }, /area/almayer/living/briefing) "cgA" = ( @@ -26493,41 +26338,14 @@ }, /area/almayer/hull/upper_hull/u_a_s) "ckE" = ( -/obj/structure/window/reinforced{ - dir = 4; - pixel_x = -2; - pixel_y = 4 - }, -/obj/structure/window/reinforced{ - dir = 8; - layer = 3.3; - pixel_y = 4 - }, -/obj/structure/bed{ - can_buckle = 0 - }, -/obj/structure/bed{ - buckling_y = 13; - layer = 3.5; - pixel_y = 13 - }, -/obj/item/bedsheet/yellow{ - layer = 3.2 - }, -/obj/item/bedsheet/yellow{ - pixel_y = 13 - }, -/obj/structure/sign/safety/bathunisex{ - pixel_x = -16; - pixel_y = 8 +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 }, -/obj/item/toy/plush/barricade, -/obj{ - name = "---Merge conflict marker---" +/turf/open/floor/almayer{ + icon_state = "mono" }, -/obj/structure/pipes/standard/simple/hidden/supply, -/turf/open/floor/almayer, -/area/almayer/living/briefing) +/area/almayer/lifeboat_pumps/north1) "ckI" = ( /obj/structure/disposalpipe/segment, /obj/item/device/radio/intercom{ @@ -27549,10 +27367,8 @@ }, /area/almayer/squads/req) "crK" = ( -/obj/structure/bed/chair/comfy/alpha{ - dir = 1 - }, /obj/structure/pipes/vents/pump, +/obj/structure/surface/table/almayer, /turf/open/floor/almayer{ icon_state = "redfull" }, @@ -27582,8 +27398,15 @@ }, /area/almayer/hull/upper_hull/u_m_p) "csG" = ( -/obj/structure/bed/chair/comfy/delta, -/obj/item/trash/popcorn, +/obj/structure/surface/table/almayer, +/obj/item/device/flashlight/lamp{ + pixel_x = 15 + }, +/obj/item/paper, +/obj/item/reagent_container/food/drinks/cans/waterbottle{ + pixel_x = -10; + pixel_y = 4 + }, /turf/open/floor/almayer{ icon_state = "bluefull" }, @@ -27677,6 +27500,15 @@ icon_state = "test_floor4" }, /area/almayer/shipboard/brig/cryo) +"cum" = ( +/obj/structure/pipes/standard/simple/hidden/supply, +/obj/structure/bed/chair/comfy/charlie{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "cus" = ( /obj/docking_port/stationary/lifeboat_dock/starboard, /turf/open/floor/almayer_hull{ @@ -27822,6 +27654,13 @@ icon_state = "test_floor4" }, /area/almayer/shipboard/brig/main_office) +"cxZ" = ( +/obj/structure/bed/chair/comfy/delta, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "cyo" = ( /obj/structure/machinery/vending/cigarette, /turf/open/floor/almayer{ @@ -27869,8 +27708,8 @@ /area/almayer/shipboard/brig/execution) "czG" = ( /obj/structure/machinery/recharge_station, -/turf/open/floor/almayer/no_build{ - icon_state = "ai_floors" +/turf/open/floor/almayer{ + icon_state = "cargo" }, /area/almayer/command/airoom) "czJ" = ( @@ -28038,12 +27877,6 @@ }, /turf/open/floor/almayer, /area/almayer/living/chapel) -"cCd" = ( -/obj/structure/bookcase{ - icon_state = "book-5" - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "cCD" = ( /obj/structure/platform{ dir = 8; @@ -28195,7 +28028,9 @@ pixel_x = -27 }, /obj/structure/pipes/standard/simple/hidden/supply, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + icon_state = "plate" + }, /area/almayer/living/briefing) "cEO" = ( /obj/structure/largecrate/supply/floodlights, @@ -28303,6 +28138,17 @@ "cHu" = ( /turf/closed/wall/almayer/research/containment/wall/south, /area/almayer/medical/containment/cell/cl) +"cHA" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "silver" + }, +/area/almayer/command/cichallway) "cHE" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -28341,6 +28187,13 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_f_s) +"cIl" = ( +/obj/structure/pipes/standard/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "cIr" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -28486,11 +28339,17 @@ }, /area/almayer/engineering/upper_engineering/port) "cKX" = ( -/obj/structure/platform, /obj/structure/pipes/vents/scrubber{ dir = 4 }, -/turf/open/floor/almayer, +/obj/structure/surface/table/almayer, +/obj/structure/machinery/computer/emails{ + pixel_x = 2; + pixel_y = 5 + }, +/turf/open/floor/almayer{ + icon_state = "bluefull" + }, /area/almayer/living/briefing) "cKY" = ( /obj/structure/machinery/light, @@ -28717,6 +28576,23 @@ "cQv" = ( /turf/closed/wall/almayer/reinforced, /area/almayer/shipboard/brig/general_equipment) +"cQD" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/obj/structure/mirror{ + pixel_x = -29 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/living/commandbunks) "cQF" = ( /obj/structure/largecrate/random/barrel/red, /turf/open/floor/almayer{ @@ -28755,6 +28631,16 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_f_s) +"cRg" = ( +/obj/item/tool/weldpack{ + pixel_y = 15 + }, +/obj/structure/surface/table/almayer, +/obj/item/clothing/head/welding, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "cRi" = ( /turf/open/floor/almayer{ icon_state = "mono" @@ -29457,6 +29343,17 @@ icon_state = "dark_sterile" }, /area/almayer/shipboard/brig/surgery) +"dfP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/guncabinet, +/obj/item/weapon/gun/rifle/l42a, +/obj/item/weapon/gun/rifle/l42a{ + pixel_y = 6 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "dgg" = ( /obj/structure/machinery/camera/autoname/almayer{ dir = 4; @@ -29544,12 +29441,13 @@ }, /area/almayer/hallways/starboard_umbilical) "diw" = ( -/obj/structure/bed/chair/comfy/delta, /obj/structure/machinery/light{ dir = 8 }, +/obj/structure/bed/chair/comfy/delta, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ - icon_state = "bluefull" + icon_state = "plate" }, /area/almayer/living/briefing) "diz" = ( @@ -29652,6 +29550,14 @@ icon_state = "orange" }, /area/almayer/engineering/engineering_workshop/hangar) +"djN" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/engineering/upper_engineering/port) "djQ" = ( /obj/item/device/radio/intercom{ freerange = 1; @@ -29689,6 +29595,25 @@ icon_state = "redfull" }, /area/almayer/living/offices/flight) +"dkn" = ( +/obj/structure/machinery/cm_vending/clothing/dress{ + density = 0; + pixel_y = 16 + }, +/obj/structure/machinery/light{ + dir = 8 + }, +/obj/structure/machinery/door_control{ + id = "bot_uniforms"; + name = "Uniform Vendor Lockdown"; + pixel_x = -24; + pixel_y = 18; + req_access_txt = "31" + }, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/command/cic) "dkq" = ( /obj/structure/machinery/door_control{ id = "hangarentrancenorth"; @@ -29707,10 +29632,10 @@ }, /area/almayer/living/briefing) "dkH" = ( -/obj/structure/bed/chair/comfy/delta, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 6 }, +/obj/structure/bed/chair/comfy/delta, /turf/open/floor/almayer{ icon_state = "bluefull" }, @@ -29740,9 +29665,7 @@ dir = 2 }, /obj/item/clothing/mask/cigarette/weed, -/turf/open/floor/prison{ - icon_state = "kitchen" - }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/engineering/upper_engineering/port) "dll" = ( /obj/structure/surface/table/almayer, @@ -29765,6 +29688,15 @@ icon_state = "dark_sterile" }, /area/almayer/shipboard/brig/surgery) +"dlN" = ( +/obj/structure/pipes/standard/simple/hidden/supply, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 2 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/lifeboat_pumps/north1) "dmg" = ( /obj/structure/machinery/vending/coffee, /obj/structure/sign/safety/coffee{ @@ -29867,6 +29799,10 @@ /obj/structure/machinery/camera/autoname/almayer{ name = "ship-grade camera" }, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 + }, /turf/open/floor/almayer{ dir = 1; icon_state = "red" @@ -29935,24 +29871,6 @@ icon_state = "cargo" }, /area/almayer/squads/req) -"dpn" = ( -/obj/structure/closet/secure_closet/freezer/fridge/full, -/obj/structure/machinery/light{ - dir = 1 - }, -/obj/item/reagent_container/food/condiment/enzyme, -/obj/item/reagent_container/food/condiment/enzyme, -/obj/structure/transmitter{ - name = "Kitchen Telephone"; - phone_category = "Almayer"; - phone_id = "Kitchen"; - pixel_x = -8; - pixel_y = 29 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/living/grunt_rnr) "dpo" = ( /obj/structure/machinery/light{ dir = 1 @@ -30065,6 +29983,12 @@ icon_state = "green" }, /area/almayer/hallways/aft_hallway) +"dqQ" = ( +/obj/structure/closet/secure_closet/fridge/groceries, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/grunt_rnr) "dqV" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -30107,6 +30031,18 @@ icon_state = "silver" }, /area/almayer/engineering/port_atmos) +"drp" = ( +/obj/structure/toilet{ + dir = 8; + layer = 2.9; + pixel_y = 8 + }, +/obj/structure/window{ + layer = 2.95; + pixel_y = -2 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/living/commandbunks) "drt" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -30164,6 +30100,12 @@ icon_state = "plate" }, /area/almayer/shipboard/brig/cryo) +"dtv" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out" + }, +/turf/open/floor/almayer, +/area/almayer/command/lifeboat) "dtH" = ( /obj/structure/bed/chair/comfy{ dir = 8 @@ -30506,6 +30448,17 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_f_p) +"dAi" = ( +/obj/structure/sign/nosmoking_2{ + pixel_x = 32 + }, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 2 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/lifeboat_pumps/north1) "dAq" = ( /obj/structure/machinery/door/firedoor/border_only/almayer, /obj/structure/disposalpipe/segment{ @@ -30523,7 +30476,9 @@ dir = 8 }, /obj/structure/pipes/standard/simple/hidden/supply, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + icon_state = "plate" + }, /area/almayer/living/briefing) "dAX" = ( /obj/structure/machinery/camera/autoname/almayer{ @@ -31327,6 +31282,13 @@ /area/almayer/shipboard/brig/main_office) "dSn" = ( /obj/structure/pipes/standard/simple/hidden/supply, +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, /turf/open/floor/almayer{ icon_state = "dark_sterile" }, @@ -31631,6 +31593,17 @@ }, /turf/open/floor/almayer, /area/almayer/living/chapel) +"dYH" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/structure/bed/chair/comfy/alpha{ + dir = 8 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "dYK" = ( /obj/item/folder/red{ desc = "A red folder. The previous contents are a mystery, though the number 28 has been written on the inside of each flap numerous times. Smells faintly of cough syrup."; @@ -31733,7 +31706,7 @@ "eaX" = ( /obj/structure/closet/firecloset, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "cargo" }, /area/almayer/engineering/upper_engineering/starboard) "ebd" = ( @@ -31904,13 +31877,19 @@ pixel_x = 8; pixel_y = -32 }, +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 + }, /turf/open/floor/almayer{ icon_state = "test_floor4" }, /area/almayer/command/lifeboat) "edM" = ( /obj/structure/closet/firecloset, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, /area/almayer/hallways/vehiclehangar) "eed" = ( /turf/open/floor/almayer{ @@ -32202,15 +32181,13 @@ }, /area/almayer/medical/containment/cell) "eiH" = ( -/obj/structure/sink{ - pixel_y = 24 - }, /obj/structure/machinery/light{ dir = 8 }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" +/obj/structure/toilet{ + dir = 4 }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/cells) "eiK" = ( /obj/structure/bed/chair{ @@ -32377,6 +32354,22 @@ dir = 1 }, /area/almayer/medical/containment/cell) +"elX" = ( +/obj/structure/surface/table/almayer, +/obj/item/trash/uscm_mre, +/obj/effect/decal/cleanable/dirt, +/obj/item/device/flashlight/lamp{ + layer = 3.3; + pixel_x = 15 + }, +/obj/item/reagent_container/food/drinks/cans/souto/diet/grape{ + pixel_x = -7; + pixel_y = 10 + }, +/turf/open/floor/almayer{ + icon_state = "emeraldfull" + }, +/area/almayer/living/briefing) "eme" = ( /obj/structure/pipes/vents/pump{ dir = 4 @@ -32519,10 +32512,6 @@ }, /area/almayer/hallways/aft_hallway) "epq" = ( -/obj/structure/stairs/perspective{ - dir = 1; - icon_state = "p_stair_full" - }, /obj/structure/sign/poster{ desc = "One of those hot, tanned babes back the beaches of good ol' Earth."; icon_state = "poster12"; @@ -32530,7 +32519,13 @@ pixel_x = 27; serial_number = 12 }, -/turf/open/floor/almayer, +/obj/structure/bed/chair/comfy/delta{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, /area/almayer/living/briefing) "epu" = ( /obj/structure/machinery/door/firedoor/border_only/almayer, @@ -32553,6 +32548,18 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_a_s) +"epK" = ( +/obj/structure/closet/secure_closet/guncabinet, +/obj/item/weapon/gun/smg/m39{ + pixel_y = 6 + }, +/obj/item/weapon/gun/smg/m39{ + pixel_y = -6 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "eqb" = ( /obj/structure/surface/table/almayer, /obj/item/tool/stamp/denied{ @@ -32675,6 +32682,14 @@ icon_state = "plate" }, /area/almayer/shipboard/brig/cryo) +"erz" = ( +/obj/structure/closet/crate, +/obj/item/ammo_box/magazine/l42a, +/obj/item/ammo_box/magazine/l42a, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "erG" = ( /obj/structure/disposalpipe/junction{ dir = 2; @@ -32699,10 +32714,6 @@ /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/port_umbilical) -"erZ" = ( -/obj/structure/pipes/vents/scrubber, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) "esi" = ( /obj/structure/sign/safety/stairs{ pixel_x = 15; @@ -32722,6 +32733,20 @@ icon_state = "plate" }, /area/almayer/hallways/starboard_hallway) +"esy" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/machinery/cm_vending/sorted/medical/wall_med{ + pixel_y = -29 + }, +/turf/open/floor/almayer{ + icon_state = "silver" + }, +/area/almayer/command/cichallway) "esF" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 1 @@ -32810,6 +32835,33 @@ icon_state = "test_floor4" }, /area/almayer/living/officer_study) +"euM" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/paper_bin/uscm{ + pixel_x = -17; + pixel_y = 7 + }, +/obj/item/tool/pen/clicky{ + pixel_x = -13; + pixel_y = -1 + }, +/obj/item/tool/pen/clicky{ + pixel_x = -13; + pixel_y = 5 + }, +/obj/structure/machinery/door_control{ + id = "CO-Office"; + name = "Door Control"; + normaldoorcontrol = 1; + pixel_y = 7; + req_access_txt = "31" + }, +/obj/item/ashtray/bronze{ + pixel_x = 12; + pixel_y = 1 + }, +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "euN" = ( /obj/effect/decal/warning_stripes{ icon_state = "SE-out" @@ -32844,7 +32896,7 @@ "euY" = ( /obj/structure/closet/firecloset, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "cargo" }, /area/almayer/engineering/upper_engineering/port) "eva" = ( @@ -33137,10 +33189,6 @@ icon_state = "orange" }, /area/almayer/hallways/starboard_hallway) -"eBo" = ( -/obj/structure/machinery/cm_vending/gear/commanding_officer, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "eBC" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 10 @@ -33208,8 +33256,6 @@ }, /area/almayer/lifeboat_pumps/south2) "eCS" = ( -/obj/structure/bed/chair/comfy/delta, -/obj/item/trash/popcorn, /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 1 }, @@ -33854,16 +33900,6 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/medical_science) -"eSJ" = ( -/obj/structure/surface/table/woodentable/fancy, -/obj/structure/transmitter/rotary{ - name = "Captain's Office"; - phone_category = "Offices"; - phone_id = "Captain's Office"; - pixel_y = 6 - }, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) "eSU" = ( /obj/structure/prop/almayer/name_stencil{ icon_state = "almayer1" @@ -34095,6 +34131,15 @@ /obj/structure/pipes/vents/pump, /turf/open/floor/almayer, /area/almayer/living/offices) +"eXU" = ( +/obj/structure/bed/chair{ + dir = 8; + pixel_y = 3 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "eYr" = ( /obj/effect/decal/warning_stripes{ icon_state = "S" @@ -34134,10 +34179,6 @@ icon_state = "ai_floors" }, /area/almayer/command/airoom) -"eYC" = ( -/obj/structure/machinery/vending/cigarette, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "eYH" = ( /obj/structure/platform{ dir = 4 @@ -34492,6 +34533,17 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/operating_room_two) +"ffl" = ( +/obj/structure/surface/table/almayer, +/obj/effect/landmark/map_item, +/obj/item/paper_bin/uscm{ + pixel_x = -7; + pixel_y = 6 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "ffE" = ( /turf/open/floor/almayer/no_build{ icon_state = "plating" @@ -34615,14 +34667,6 @@ icon_state = "mono" }, /area/almayer/engineering/upper_engineering/starboard) -"fhQ" = ( -/obj/structure/closet/secure_closet/freezer/fridge/full, -/obj/structure/machinery/light, -/obj/item/reagent_container/food/condiment/sugar, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/living/grunt_rnr) "fiq" = ( /turf/closed/wall/almayer, /area/almayer/hull/lower_hull/l_m_p) @@ -34637,6 +34681,27 @@ icon_state = "orange" }, /area/almayer/engineering/engine_core) +"fiP" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/storage/fancy/cigar{ + layer = 3.04; + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/reagent_container/food/drinks/bottle/sake{ + pixel_x = -11; + pixel_y = 16 + }, +/obj/item/reagent_container/food/drinks/bottle/sake{ + pixel_x = -2; + pixel_y = 16 + }, +/obj/item/reagent_container/food/drinks/bottle/sake{ + pixel_x = 7; + pixel_y = 16 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "fjO" = ( /obj/item/tool/wet_sign, /obj/effect/decal/cleanable/blood, @@ -34792,9 +34857,7 @@ /obj/structure/machinery/door/window/tinted{ dir = 1 }, -/turf/open/floor/prison{ - icon_state = "kitchen" - }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/engineering/upper_engineering/port) "fnZ" = ( /obj/structure/machinery/portable_atmospherics/canister/air, @@ -34916,6 +34979,12 @@ }, /turf/open/floor/wood/ship, /area/almayer/command/corporateliason) +"fqg" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer, +/area/almayer/lifeboat_pumps/south2) "fqu" = ( /obj/structure/largecrate/random/barrel/red, /turf/open/floor/almayer, @@ -35121,6 +35190,21 @@ /obj/structure/largecrate/random/barrel/green, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_s) +"fuR" = ( +/obj/structure/bed/bedroll{ + desc = "A bed of cotton fabric, purposely made for a cat to comfortably sleep on."; + name = "cat bed"; + pixel_y = 0 + }, +/mob/living/simple_animal/cat/Jones{ + dir = 8 + }, +/obj/structure/machinery/firealarm{ + pixel_x = -1; + pixel_y = 28 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "fuS" = ( /obj/structure/disposalpipe/segment, /obj/structure/pipes/standard/simple/hidden/supply, @@ -35432,6 +35516,15 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/command/lifeboat) +"fCt" = ( +/obj/structure/bed/chair/comfy/delta{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "fCL" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -35681,6 +35774,17 @@ }, /turf/open/floor/plating, /area/almayer/hull/lower_hull/l_f_p) +"fHe" = ( +/obj/structure/surface/table/almayer, +/obj/item/device/flashlight/lamp{ + layer = 3.3; + pixel_x = 15 + }, +/obj/item/prop/helmetgarb/helmet_nvg/cosmetic, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/living/briefing) "fHh" = ( /obj/structure/disposalpipe/segment{ dir = 8; @@ -35992,13 +36096,6 @@ icon_state = "green" }, /area/almayer/hallways/aft_hallway) -"fNb" = ( -/obj/structure/surface/table/woodentable/fancy, -/obj/structure/machinery/computer/card{ - dir = 4 - }, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) "fNg" = ( /obj/structure/largecrate/random/barrel/yellow, /turf/open/floor/plating/plating_catwalk, @@ -36018,6 +36115,17 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/hangar) +"fNu" = ( +/obj/structure/surface/table/almayer, +/obj/item/paper, +/obj/item/tool/pen{ + pixel_x = -5; + pixel_y = 2 + }, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/living/briefing) "fNA" = ( /obj/structure/closet/fireaxecabinet{ pixel_y = 32 @@ -36255,21 +36363,6 @@ icon_state = "green" }, /area/almayer/hallways/starboard_hallway) -"fUn" = ( -/obj/structure/flora/pottedplant{ - icon_state = "pottedplant_21" - }, -/obj/structure/sign/poster{ - desc = "A large piece of cheap printed paper. This one proudly demands that you REMEMBER IO!"; - icon_state = "poster14"; - name = "propaganda poster"; - pixel_y = 32 - }, -/obj/structure/sign/safety/escapepod{ - pixel_x = -17 - }, -/turf/open/floor/wood/ship, -/area/almayer/command/corporateliason) "fUA" = ( /turf/open/floor/plating/plating_catwalk, /area/almayer/living/briefing) @@ -36351,6 +36444,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/almayer, /area/almayer/hallways/aft_hallway) +"fXM" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer, +/area/almayer/command/lifeboat) "fXN" = ( /obj/effect/landmark/start/marine/delta, /obj/effect/landmark/late_join/delta, @@ -36567,6 +36666,12 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_f_p) +"gcw" = ( +/obj/structure/bed/chair/comfy/bravo, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "gcK" = ( /obj/structure/machinery/light/small{ dir = 1 @@ -36706,28 +36811,6 @@ icon_state = "orangecorner" }, /area/almayer/hallways/stern_hallway) -"geW" = ( -/obj/structure/sign/prop1{ - pixel_y = 32 - }, -/obj/item/storage/fancy/cigar, -/obj/item/reagent_container/food/drinks/bottle/sake{ - layer = 3.6; - pixel_x = 9; - pixel_y = 16 - }, -/obj/item/reagent_container/food/drinks/bottle/sake{ - layer = 3.6; - pixel_y = 16 - }, -/obj/item/reagent_container/food/drinks/bottle/sake{ - layer = 3.6; - pixel_x = -9; - pixel_y = 16 - }, -/obj/structure/surface/table/woodentable/fancy, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "geX" = ( /obj/structure/pipes/vents/scrubber, /obj/structure/sign/safety/ammunition{ @@ -36772,6 +36855,10 @@ /obj/structure/machinery/recharge_station, /turf/open/floor/plating, /area/almayer/command/airoom) +"gfK" = ( +/obj/structure/bed/chair/comfy/blue, +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "gfS" = ( /obj/structure/sign/safety/cryo{ pixel_y = -26 @@ -36837,19 +36924,12 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_m_p) "ghX" = ( -/obj/structure/window/reinforced/tinted{ - pixel_y = -8 - }, /obj/structure/machinery/shower{ dir = 8 }, -/obj/structure/machinery/door/window/tinted{ - dir = 8 - }, /obj/item/toy/inflatable_duck, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" - }, +/obj/structure/window/reinforced, +/turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/cells) "gio" = ( /obj/structure/closet/emcloset, @@ -36995,7 +37075,10 @@ /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 8 }, -/turf/open/floor/almayer, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, /area/almayer/living/briefing) "gkK" = ( /obj/structure/pipes/standard/simple/hidden/supply, @@ -37055,10 +37138,6 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_m_p) -"glU" = ( -/obj/structure/bed/chair/office/dark, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) "gmb" = ( /obj/structure/machinery/door/firedoor/border_only/almayer{ dir = 1 @@ -37079,6 +37158,16 @@ icon_state = "plate" }, /area/almayer/shipboard/starboard_point_defense) +"gmp" = ( +/obj/structure/surface/table/almayer, +/obj/item/device/flashlight/lamp{ + layer = 3.3; + pixel_x = 15 + }, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/living/briefing) "gms" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer{ @@ -37462,6 +37551,9 @@ /area/almayer/living/basketball) "gwu" = ( /obj/structure/machinery/light, +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out" + }, /turf/open/floor/almayer{ icon_state = "red" }, @@ -37606,6 +37698,12 @@ icon_state = "silver" }, /area/almayer/shipboard/brig/cic_hallway) +"gye" = ( +/obj/structure/machinery/door/poddoor/shutters/almayer/uniform_vendors, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/command/cic) "gyt" = ( /obj/item/storage/firstaid/regular, /obj/structure/surface/rack, @@ -37881,6 +37979,10 @@ /obj/structure/pipes/standard/simple/hidden/supply{ dir = 10 }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 2 + }, /turf/open/floor/almayer, /area/almayer/hull/upper_hull/u_f_p) "gDW" = ( @@ -37937,12 +38039,12 @@ }, /obj/structure/surface/table/woodentable/fancy, /obj/structure/machinery/door_control{ + id = "cl_evac"; + name = "Evac Pod Door Control"; + normaldoorcontrol = 1; pixel_x = -5; pixel_y = 2; - req_access_txt = "200"; - name = "Evac Pod Door Control"; - id = "cl_evac"; - normaldoorcontrol = 1 + req_access_txt = "200" }, /turf/open/floor/carpet, /area/almayer/command/corporateliason) @@ -38002,17 +38104,24 @@ /area/almayer/command/combat_correspondent) "gGo" = ( /obj/structure/surface/table/almayer, -/obj/effect/landmark/map_item{ - pixel_x = -8 +/obj/structure/machinery/firealarm{ + pixel_y = 28 }, -/obj/item/toy/plush/therapy/red{ - desc = "A USCM approved plush doll. It's not soft and hardly comforting!"; - force = 15; - layer = 4.1; - name = "Sergeant Huggs"; - pixel_x = 7; - pixel_y = -1; - throwforce = 15 +/obj/structure/prop/holidays/string_lights{ + dir = 8; + pixel_x = 29 + }, +/obj/item/reagent_container/food/condiment/hotsauce/cholula{ + pixel_x = 10; + pixel_y = 14 + }, +/obj/item/trash/USCMtray{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/reagent_container/food/snacks/hotdog{ + pixel_x = -7; + pixel_y = 5 }, /turf/open/floor/almayer{ icon_state = "plate" @@ -38185,10 +38294,10 @@ }, /area/almayer/shipboard/port_missiles) "gKH" = ( -/obj/structure/bed/chair/comfy/charlie, /obj/item/trash/uscm_mre, +/obj/structure/bed/chair/comfy/charlie, /turf/open/floor/almayer{ - icon_state = "emeraldfull" + icon_state = "plate" }, /area/almayer/living/briefing) "gKJ" = ( @@ -38368,7 +38477,6 @@ }, /area/almayer/engineering/engine_core) "gNi" = ( -/obj/structure/bed/chair/comfy/delta, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 }, @@ -38401,6 +38509,18 @@ /obj/effect/spawner/random/tool, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_m_p) +"gOm" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/bed/chair/comfy/bravo{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "gOs" = ( /obj/effect/decal/warning_stripes{ icon_state = "N"; @@ -38678,6 +38798,18 @@ /obj/structure/pipes/standard/manifold/hidden/supply, /turf/open/floor/plating/plating_catwalk, /area/almayer/lifeboat_pumps/north2) +"gVm" = ( +/obj/structure/bed/chair/comfy/bravo{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/arcturianstopsign{ + pixel_y = 32 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "gVq" = ( /obj/structure/machinery/light, /obj/effect/decal/warning_stripes{ @@ -39131,12 +39263,6 @@ icon_state = "mono" }, /area/almayer/lifeboat_pumps/south1) -"heH" = ( -/obj/structure/pipes/standard/simple/hidden/supply, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/lifeboat_pumps/north1) "heK" = ( /obj/structure/machinery/door/airlock/almayer/maint{ dir = 1; @@ -39192,21 +39318,6 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_m_s) -"hfm" = ( -/obj/structure/machinery/light{ - dir = 1 - }, -/obj/structure/machinery/photocopier{ - anchored = 0 - }, -/obj/structure/sign/poster{ - desc = "A large piece of cheap printed paper. This one proudly demands that you REMEMBER IO!"; - icon_state = "poster14"; - name = "propaganda poster"; - pixel_y = 32 - }, -/turf/open/floor/wood/ship, -/area/almayer/command/corporateliason) "hfw" = ( /obj/structure/flora/pottedplant{ icon_state = "pottedplant_22" @@ -39215,6 +39326,10 @@ dir = 1; name = "ship-grade camera" }, +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 + }, /turf/open/floor/almayer{ icon_state = "red" }, @@ -39377,6 +39492,13 @@ }, /turf/open/floor/almayer, /area/almayer/shipboard/brig/cic_hallway) +"hiN" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer, +/area/almayer/command/lifeboat) "hiQ" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 8 @@ -39427,6 +39549,13 @@ icon_state = "test_floor4" }, /area/almayer/living/grunt_rnr) +"hjT" = ( +/obj/structure/bed/chair/comfy/alpha, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "hki" = ( /obj/structure/machinery/cm_vending/sorted/tech/electronics_storage, /turf/open/floor/almayer{ @@ -39599,6 +39728,17 @@ icon_state = "sterile_green" }, /area/almayer/medical/hydroponics) +"hnH" = ( +/obj/structure/surface/table/almayer, +/obj/effect/decal/cleanable/dirt, +/obj/item/prop/magazine/boots/n117{ + pixel_x = 2; + pixel_y = 5 + }, +/turf/open/floor/almayer{ + icon_state = "bluefull" + }, +/area/almayer/living/briefing) "hnV" = ( /obj/structure/machinery/light, /turf/open/floor/almayer, @@ -39632,6 +39772,19 @@ /obj/structure/flora/pottedplant{ icon_state = "pottedplant_10" }, +/obj/structure/closet/secure_closet/cmdcabinet{ + pixel_y = 24; + desc = "A bulletproof cabinet containing communications equipment."; + name = "communications cabinet"; + req_access = null; + req_one_access_txt = "207;203" + }, +/obj/item/device/radio, +/obj/item/device/radio/listening_bug/radio_linked/wy, +/obj/item/device/radio/listening_bug/radio_linked/wy{ + pixel_x = 4; + pixel_y = -3 + }, /turf/open/floor/wood/ship, /area/almayer/command/corporateliason) "hpk" = ( @@ -39820,6 +39973,18 @@ icon_state = "silver" }, /area/almayer/command/computerlab) +"huR" = ( +/obj/structure/sign/prop1{ + pixel_y = 32 + }, +/obj/structure/filingcabinet/security{ + pixel_x = -8 + }, +/obj/structure/filingcabinet/medical{ + pixel_x = 8 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "huU" = ( /obj/structure/machinery/door/airlock/almayer/security{ access_modified = 1; @@ -40206,6 +40371,25 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_a_p) +"hBW" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/device/flashlight/lamp/green{ + pixel_x = -7; + pixel_y = 20 + }, +/obj/item/ashtray/bronze{ + pixel_x = 4; + pixel_y = 19 + }, +/obj/structure/machinery/light{ + dir = 8 + }, +/obj/effect/landmark/map_item{ + pixel_x = -1; + pixel_y = 3 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "hCo" = ( /obj/structure/surface/table/almayer, /obj/structure/flora/pottedplant{ @@ -40344,6 +40528,15 @@ /obj/structure/largecrate/random/barrel/red, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_p) +"hFX" = ( +/obj/structure/pipes/standard/simple/hidden/supply, +/obj/structure/bed/chair/comfy/bravo{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "hGa" = ( /obj/effect/decal/warning_stripes{ icon_state = "N"; @@ -40352,10 +40545,6 @@ /obj/structure/closet/secure_closet/guncabinet/red/mp_armory_m39_submachinegun, /turf/open/floor/plating/almayer, /area/almayer/shipboard/brig/armory) -"hGB" = ( -/obj/structure/machinery/light, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "hGD" = ( /obj/effect/decal/warning_stripes{ icon_state = "W" @@ -40442,6 +40631,23 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_p) +"hIt" = ( +/obj/structure/surface/table/almayer, +/obj/effect/decal/cleanable/dirt, +/obj/item/tool/kitchen/tray{ + pixel_y = 9 + }, +/obj/item/device/flashlight/lamp{ + pixel_x = 15 + }, +/obj/item/reagent_container/food/snacks/meatpizzaslice{ + pixel_x = -5; + pixel_y = 7 + }, +/turf/open/floor/almayer{ + icon_state = "emeraldfull" + }, +/area/almayer/living/briefing) "hII" = ( /obj/structure/machinery/cm_vending/gear/tl{ density = 0; @@ -40617,6 +40823,14 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_f_s) +"hMJ" = ( +/obj/structure/bed/chair/comfy/bravo{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "hMN" = ( /obj/structure/machinery/power/apc/almayer, /turf/open/floor/almayer{ @@ -40749,6 +40963,13 @@ icon_state = "cargo_arrow" }, /area/almayer/squads/charlie_delta_shared) +"hQh" = ( +/obj/structure/machinery/light, +/obj/structure/closet/secure_closet/fridge/groceries/stock, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/grunt_rnr) "hQU" = ( /obj/structure/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -41111,12 +41332,24 @@ icon_state = "blue" }, /area/almayer/command/cichallway) +"hWS" = ( +/obj/structure/closet/secure_closet/fridge/organic/stock, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/grunt_rnr) "hWU" = ( /obj/structure/largecrate/random/barrel/blue, /turf/open/floor/almayer{ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_s) +"hWX" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/hull/upper_hull/u_f_p) "hXb" = ( /turf/open/floor/almayer{ dir = 1; @@ -41154,6 +41387,15 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/almayer, /area/almayer/shipboard/brig/cic_hallway) +"hXD" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 + }, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/south1) "hXS" = ( /obj/structure/sign/safety/water{ pixel_x = 8; @@ -41294,6 +41536,12 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/engineering/upper_engineering/port) +"iaE" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_m_s) "iaF" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 4 @@ -41365,6 +41613,22 @@ icon_state = "kitchen" }, /area/almayer/living/grunt_rnr) +"idJ" = ( +/obj/structure/surface/table/almayer, +/obj/effect/decal/cleanable/dirt, +/obj/item/device/flashlight/lamp{ + layer = 3.3; + pixel_x = 15 + }, +/obj/item/paper, +/obj/item/tool/pen{ + pixel_x = -5; + pixel_y = 2 + }, +/turf/open/floor/almayer{ + icon_state = "orangefull" + }, +/area/almayer/living/briefing) "idX" = ( /obj/structure/pipes/vents/pump, /turf/open/floor/prison{ @@ -41505,6 +41769,12 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_s) +"ign" = ( +/obj/structure/closet/secure_closet/fridge/fish/stock, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/grunt_rnr) "igp" = ( /obj/structure/surface/table/almayer, /obj/item/device/flashlight/lamp{ @@ -42068,6 +42338,18 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/medical_science) +"isu" = ( +/obj/structure/machinery/light{ + dir = 4 + }, +/obj/item/bedsheet/hop{ + pixel_y = 0 + }, +/obj/structure/bed{ + pixel_y = 0 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "isC" = ( /obj/effect/projector{ name = "Almayer_AresDown"; @@ -42206,16 +42488,16 @@ }, /turf/open/floor/plating, /area/almayer/hull/lower_hull/l_f_p) -"iuy" = ( -/obj/structure/window/framed/almayer, -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 2 +"iuw" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 }, -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 2 +/turf/open/floor/almayer{ + dir = 9; + icon_state = "orange" }, -/turf/open/floor/plating, -/area/almayer/living/briefing) +/area/almayer/engineering/upper_engineering/port) "iuz" = ( /obj/structure/surface/rack, /obj/effect/spawner/random/warhead, @@ -42240,7 +42522,7 @@ name = "ship-grade camera" }, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "cargo" }, /area/almayer/hull/upper_hull/u_f_s) "ivf" = ( @@ -42450,14 +42732,14 @@ }, /area/almayer/living/offices) "izr" = ( -/obj/structure/bed/chair/comfy/alpha{ - dir = 1 - }, /obj/structure/sign/poster/propaganda{ pixel_x = -27 }, +/obj/structure/bed/chair/comfy/alpha{ + dir = 1 + }, /turf/open/floor/almayer{ - icon_state = "redfull" + icon_state = "plate" }, /area/almayer/living/briefing) "izx" = ( @@ -42670,6 +42952,14 @@ icon_state = "test_floor4" }, /area/almayer/hull/upper_hull/u_a_p) +"iET" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/structure/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "iFc" = ( /obj/structure/pipes/vents/pump{ dir = 1 @@ -42715,6 +43005,21 @@ }, /turf/open/floor/wood/ship, /area/almayer/shipboard/sea_office) +"iFG" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/structure/bed/chair/comfy/bravo{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/barricade/deployable{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "iFH" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 9 @@ -42804,6 +43109,18 @@ icon_state = "kitchen" }, /area/almayer/living/grunt_rnr) +"iIm" = ( +/obj/structure/machinery/door/airlock/almayer/generic{ + dir = 2; + name = "\improper Bathroom" + }, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/living/commandbunks) "iIP" = ( /obj/structure/toilet{ pixel_y = 16 @@ -43389,20 +43706,6 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_p) -"iVZ" = ( -/obj/structure/surface/table/woodentable/fancy, -/obj/item/folder/black, -/obj/item/storage/bible/booze, -/obj/structure/pipes/standard/simple/hidden/supply, -/obj/structure/machinery/door_control{ - id = "CO-Office"; - name = "Door Control"; - normaldoorcontrol = 1; - pixel_x = 18; - req_access_txt = "31" - }, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) "iWb" = ( /obj/structure/sign/safety/hazard{ pixel_x = 32; @@ -43443,13 +43746,18 @@ /turf/open/floor/almayer, /area/almayer/hallways/hangar) "iWE" = ( -/obj/structure/platform{ - dir = 1 - }, /obj/structure/pipes/vents/pump{ dir = 4 }, -/turf/open/floor/almayer, +/obj/structure/bed/chair/comfy/bravo{ + dir = 4 + }, +/obj/structure/barricade/deployable{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "orangefull" + }, /area/almayer/living/briefing) "iWL" = ( /obj/structure/pipes/standard/simple/hidden/supply, @@ -43478,6 +43786,11 @@ icon_state = "bluefull" }, /area/almayer/living/briefing) +"iXd" = ( +/turf/open/floor/almayer{ + icon_state = "orangefull" + }, +/area/almayer/living/briefing) "iXt" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer{ @@ -43485,6 +43798,15 @@ icon_state = "red" }, /area/almayer/shipboard/brig/processing) +"iXR" = ( +/obj/structure/bed/chair/comfy/alpha{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "iXT" = ( /obj/item/trash/uscm_mre, /turf/open/floor/almayer, @@ -43576,6 +43898,15 @@ icon_state = "plate" }, /area/almayer/living/gym) +"iYR" = ( +/obj/structure/closet/secure_closet/bar{ + name = "Success Cabinet"; + req_access_txt = "1" + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/captain_mess) "iZg" = ( /obj/structure/bed/chair/comfy{ dir = 8 @@ -43792,6 +44123,10 @@ /obj/structure/machinery/light{ dir = 8 }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, /turf/open/floor/almayer{ dir = 9; icon_state = "red" @@ -44033,8 +44368,12 @@ /obj/structure/mirror{ pixel_x = 29 }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, /turf/open/floor/almayer{ - icon_state = "sterile" + icon_state = "dark_sterile" }, /area/almayer/living/captain_mess) "jgw" = ( @@ -44288,6 +44627,11 @@ icon_state = "plate" }, /area/almayer/living/briefing) +"jkL" = ( +/obj/structure/surface/table/almayer, +/obj/item/tool/weldingtool, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_m_s) "jkS" = ( /obj/structure/window/framed/almayer/hull/hijack_bustable, /obj/structure/machinery/door/poddoor/shutters/almayer/open{ @@ -44479,8 +44823,8 @@ pixel_y = 5 }, /obj/item/folder/black{ - pixel_y = -3; - pixel_x = 7 + pixel_x = 7; + pixel_y = -3 }, /turf/open/floor/almayer{ icon_state = "plate" @@ -44492,6 +44836,16 @@ }, /turf/open/floor/almayer, /area/almayer/shipboard/brig/processing) +"joE" = ( +/obj/structure/pipes/standard/manifold/hidden/supply, +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/turf/open/floor/almayer{ + icon_state = "silver" + }, +/area/almayer/command/cichallway) "joG" = ( /obj/structure/machinery/washing_machine, /obj/structure/sign/poster{ @@ -44601,6 +44955,16 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/medical_science) +"jrV" = ( +/obj/structure/surface/table/almayer, +/obj/item/weapon/gun/rifle/l42a{ + pixel_y = 6 + }, +/obj/item/weapon/gun/rifle/l42a, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "jss" = ( /obj/structure/bed/chair/comfy{ dir = 8 @@ -44671,14 +45035,6 @@ /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer, /area/almayer/living/port_emb) -"juN" = ( -/obj/structure/surface/table/woodentable/fancy, -/obj/item/paper_bin/uscm, -/obj/item/tool/pen{ - pixel_y = 7 - }, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) "juX" = ( /obj/structure/platform_decoration{ dir = 1 @@ -44950,6 +45306,36 @@ icon_state = "test_floor4" }, /area/almayer/command/lifeboat) +"jBY" = ( +/obj/structure/surface/rack, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0; + pixel_x = -6; + pixel_y = 7 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0; + pixel_x = -6; + pixel_y = -3 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0; + pixel_x = 5; + pixel_y = 9 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0; + pixel_x = 5; + pixel_y = -3 + }, +/obj/structure/noticeboard{ + desc = "The note is haphazardly attached to the cork board by what looks like a bent firing pin. 'The order has come in to perform end of life service checks on all L42A service rifles, any that are defective are to be dis-assembled and packed into a crate and sent to to the cargo hold. L42A service rifles that are in working order after servicing, are to be locked in secure cabinets ready to be off-loaded at Chinook. Scheduled end of life service for the L42A - Complete'"; + pixel_y = 29 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "jCa" = ( /obj/structure/machinery/disposal, /obj/structure/disposalpipe/trunk, @@ -44958,6 +45344,15 @@ icon_state = "red" }, /area/almayer/shipboard/brig/main_office) +"jCn" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/pipes/standard/manifold/hidden/supply{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "jCK" = ( /obj/effect/decal/medical_decals{ icon_state = "triagedecalbottomleft"; @@ -45003,6 +45398,27 @@ }, /turf/open/floor/plating, /area/almayer/hull/lower_hull/l_f_p) +"jEI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/machinery/computer/cameras/wooden_tv/prop{ + pixel_y = 29 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) +"jEX" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/folder/black{ + pixel_y = 8 + }, +/obj/item/folder/yellow, +/obj/item/device/flashlight/lamp/green{ + pixel_x = -16; + pixel_y = 8 + }, +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "jFe" = ( /obj/structure/prop/holidays/string_lights{ pixel_y = 27 @@ -45146,6 +45562,15 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/medical/morgue) +"jIG" = ( +/obj/structure/bed/chair/comfy/charlie{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "jIV" = ( /obj/structure/surface/rack, /obj/item/book/manual/marine_law{ @@ -45435,6 +45860,14 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_s) +"jNY" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_18"; + pixel_y = 12 + }, +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "jOi" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -45522,6 +45955,12 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_a_s) +"jPn" = ( +/obj/structure/machinery/photocopier{ + anchored = 0 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "jPq" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/almayer{ @@ -45713,9 +46152,6 @@ /turf/open/floor/almayer, /area/almayer/engineering/engineering_workshop/hangar) "jUo" = ( -/obj/structure/bed/chair/comfy/bravo{ - dir = 1 - }, /obj/structure/pipes/standard/manifold/hidden/supply, /turf/open/floor/almayer{ icon_state = "orangefull" @@ -45843,11 +46279,25 @@ icon_state = "plate" }, /area/almayer/living/offices) +"jWC" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "red" + }, +/area/almayer/command/lifeboat) "jWH" = ( /obj/structure/machinery/power/apc/almayer/hardened{ cell_type = /obj/item/cell/hyper; dir = 1 }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_y = 1 + }, /turf/open/floor/almayer{ icon_state = "mono" }, @@ -45883,7 +46333,7 @@ "jXW" = ( /obj/structure/closet/firecloset, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "cargo" }, /area/almayer/command/lifeboat) "jXY" = ( @@ -45932,6 +46382,16 @@ }, /turf/open/floor/almayer, /area/almayer/shipboard/brig/processing) +"jZr" = ( +/obj/structure/surface/table/almayer, +/obj/structure/machinery/computer/emails{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/living/briefing) "jZs" = ( /obj/structure/machinery/light/containment{ dir = 4 @@ -46240,6 +46700,16 @@ icon_state = "silver" }, /area/almayer/shipboard/brig/cic_hallway) +"kfG" = ( +/obj/structure/surface/table/almayer, +/obj/effect/decal/cleanable/dirt, +/obj/item/device/flashlight/lamp{ + pixel_x = 15 + }, +/turf/open/floor/almayer{ + icon_state = "bluefull" + }, +/area/almayer/living/briefing) "kfN" = ( /obj/structure/closet/secure_closet/brig, /turf/open/floor/almayer{ @@ -46353,6 +46823,12 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_s) +"khX" = ( +/obj/structure/closet/secure_closet/fridge/dry/stock, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/grunt_rnr) "kif" = ( /turf/open/floor/almayer{ icon_state = "plate" @@ -46457,6 +46933,15 @@ icon_state = "plating" }, /area/almayer/engineering/engine_core) +"klG" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "klH" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 4 @@ -46526,6 +47011,12 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_f_s) +"kmY" = ( +/obj/structure/pipes/vents/pump{ + dir = 4 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "kng" = ( /obj/structure/machinery/light/small{ dir = 8 @@ -46813,15 +47304,6 @@ icon_state = "redfull" }, /area/almayer/command/cic) -"ksA" = ( -/obj/structure/closet/secure_closet/freezer/fridge/groceries, -/obj/structure/machinery/light{ - dir = 8 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/living/grunt_rnr) "ksN" = ( /turf/open/floor/almayer/uscm/directional{ dir = 6 @@ -46858,6 +47340,12 @@ icon_state = "red" }, /area/almayer/shipboard/brig/evidence_storage) +"ktc" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "ktB" = ( /obj/structure/largecrate/random/barrel/white, /turf/open/floor/almayer{ @@ -47001,6 +47489,13 @@ icon_state = "dark_sterile" }, /area/almayer/engineering/laundry) +"kxF" = ( +/obj/structure/bed/chair/comfy/charlie, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "kxL" = ( /obj/structure/closet/coffin/woodencrate, /obj/structure/largecrate/random/mini/wooden{ @@ -47350,10 +47845,6 @@ icon_state = "plate" }, /area/almayer/living/pilotbunks) -"kFk" = ( -/obj/structure/closet/secure_closet/commander, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "kFq" = ( /obj/structure/surface/table/almayer, /obj/item/book/manual/engineering_construction, @@ -47624,11 +48115,20 @@ }, /area/almayer/hull/lower_hull/l_f_s) "kKL" = ( -/obj/structure/stairs/perspective{ - dir = 4; - icon_state = "p_stair_sn_full_cap" +/obj/structure/bed/chair/comfy/bravo{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster{ + desc = "YOU ALWAYS KNOW A WORKING JOE. YOU ALWAYS KNOW A WORKING JOE. YOU ALWAYS KNOW A WORKING JOE. YOU ALWAYS KNOW A WORKING JOE. YOU ALWAYS KNOW A WORKING JOE."; + icon_state = "poster11"; + name = "YOU ALWAYS KNOW A WORKING JOE."; + pixel_x = -27; + serial_number = 11 + }, +/turf/open/floor/almayer{ + icon_state = "plate" }, -/turf/open/floor/almayer, /area/almayer/living/briefing) "kKR" = ( /obj/structure/pipes/vents/pump{ @@ -47948,11 +48448,13 @@ /obj/structure/bed/chair/comfy/bravo{ dir = 1 }, -/obj/structure/machinery/light{ - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/structure/prop/holidays/string_lights{ + dir = 8; + pixel_x = 29 }, /turf/open/floor/almayer{ - icon_state = "orangefull" + icon_state = "plate" }, /area/almayer/living/briefing) "kRd" = ( @@ -48060,14 +48562,16 @@ }, /area/almayer/command/telecomms) "kTx" = ( -/obj/structure/stairs/perspective{ - dir = 1; - icon_state = "p_stair_full" - }, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 5 }, -/turf/open/floor/almayer, +/obj/structure/bed/chair/comfy/charlie{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, /area/almayer/living/briefing) "kTM" = ( /obj/item/frame/rack{ @@ -48258,6 +48762,13 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/medical_science) +"kXH" = ( +/obj/structure/bed/chair/comfy/delta, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "bluefull" + }, +/area/almayer/living/briefing) "kXJ" = ( /obj/structure/surface/table/reinforced/almayer_B, /obj/structure/machinery/computer/secure_data{ @@ -48363,6 +48874,23 @@ icon_state = "mono" }, /area/almayer/medical/hydroponics) +"lad" = ( +/obj/structure/surface/table/almayer, +/obj/effect/decal/cleanable/dirt, +/obj/item/device/flashlight/lamp{ + layer = 3.3; + pixel_x = 15 + }, +/obj/item/tool/kitchen/tray{ + pixel_y = 9 + }, +/obj/item/reagent_container/food/snacks/sliceable/pizza/vegetablepizza{ + pixel_y = 8 + }, +/turf/open/floor/almayer{ + icon_state = "emeraldfull" + }, +/area/almayer/living/briefing) "lah" = ( /turf/open/floor/almayer{ dir = 6; @@ -48389,6 +48917,15 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_m_p) +"laG" = ( +/obj/structure/safe/co_office, +/obj/item/weapon/pole/fancy_cane, +/obj/item/tool/lighter/zippo/gold{ + layer = 3.05; + pixel_y = 3 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "laO" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -48507,8 +49044,9 @@ /area/almayer/shipboard/brig/chief_mp_office) "ldj" = ( /obj/structure/pipes/vents/pump, -/obj/structure/platform, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + icon_state = "emeraldfull" + }, /area/almayer/living/briefing) "ldl" = ( /obj/structure/sign/safety/maint{ @@ -48641,6 +49179,14 @@ icon_state = "plating" }, /area/almayer/engineering/engine_core) +"lfT" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/computer/card{ + dir = 4; + pixel_x = 2 + }, +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "lfW" = ( /obj/structure/sign/safety/high_voltage{ pixel_y = -32 @@ -48830,6 +49376,15 @@ /obj/effect/landmark/late_join/bravo, /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/bravo) +"ljz" = ( +/obj/structure/pipes/standard/simple/hidden/supply, +/obj/structure/bed/chair/comfy/delta{ + dir = 8 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "ljG" = ( /obj/structure/closet/crate/freezer, /obj/item/reagent_container/food/condiment/coldsauce, @@ -49014,6 +49569,11 @@ icon_state = "ai_floors" }, /area/almayer/command/airoom) +"lnZ" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/pipes/standard/simple/hidden/supply, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "lok" = ( /obj/structure/machinery/cm_vending/clothing/marine/charlie{ density = 0; @@ -49332,11 +49892,6 @@ /obj/structure/pipes/standard/simple/hidden/supply, /turf/closed/wall/almayer/reinforced, /area/almayer/shipboard/brig/main_office) -"lue" = ( -/obj/structure/surface/table/almayer, -/obj/item/folder/yellow, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "luk" = ( /obj/structure/machinery/light/small{ dir = 8 @@ -49639,6 +50194,61 @@ icon_state = "red" }, /area/almayer/hallways/aft_hallway) +"lAj" = ( +/obj/structure/machinery/light/small{ + dir = 1 + }, +/obj/structure/closet/crate, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_m_s) "lAl" = ( /turf/open/floor/almayer{ dir = 4; @@ -49827,6 +50437,13 @@ icon_state = "test_floor4" }, /area/almayer/hallways/starboard_hallway) +"lDj" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 2 + }, +/turf/open/floor/almayer, +/area/almayer/hull/upper_hull/u_f_p) "lDJ" = ( /obj/structure/sign/safety/distribution_pipes{ pixel_x = -17 @@ -49836,6 +50453,20 @@ icon_state = "orange" }, /area/almayer/hallways/starboard_hallway) +"lDK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/largecrate/supply/weapons/m39{ + pixel_x = 2 + }, +/obj/structure/largecrate/supply/weapons/m41a{ + layer = 3.1; + pixel_x = 6; + pixel_y = 17 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "lDL" = ( /obj/structure/machinery/light{ dir = 4 @@ -50450,6 +51081,15 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/cic_hallway) +"lPG" = ( +/obj/structure/machinery/camera/autoname/almayer{ + name = "ship-grade camera" + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "silver" + }, +/area/almayer/command/cichallway) "lPO" = ( /obj/structure/surface/rack, /turf/open/floor/almayer{ @@ -50476,11 +51116,6 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_s) -"lQq" = ( -/obj/structure/bed, -/obj/item/bedsheet/hop, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "lQu" = ( /obj/structure/bed/stool, /turf/open/floor/almayer{ @@ -50609,6 +51244,14 @@ icon_state = "redfull" }, /area/almayer/hull/lower_hull/l_f_s) +"lUw" = ( +/obj/structure/machinery/light, +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_21"; + pixel_y = 3 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "lVl" = ( /obj/structure/machinery/cm_vending/sorted/tech/electronics_storage, /turf/open/floor/almayer, @@ -50661,6 +51304,16 @@ icon_state = "red" }, /area/almayer/lifeboat_pumps/south1) +"lWD" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out" + }, +/obj/structure/sign/safety/bathunisex{ + pixel_x = 11; + pixel_y = -26 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "lXg" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/recharger, @@ -50856,6 +51509,25 @@ icon_state = "greencorner" }, /area/almayer/hallways/aft_hallway) +"mcl" = ( +/obj/structure/sign/safety/ladder{ + pixel_x = -16 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/turf/open/floor/almayer, +/area/almayer/hallways/vehiclehangar) +"mcK" = ( +/obj/structure/closet/secure_closet/commander, +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/item/device/whistle, +/obj/item/device/megaphone, +/obj/item/device/radio, +/obj/item/clothing/shoes/laceup, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "mcL" = ( /obj/structure/machinery/vending/snack, /obj/structure/sign/safety/maint{ @@ -51031,6 +51703,19 @@ icon_state = "cargo_arrow" }, /area/almayer/squads/charlie_delta_shared) +"mgR" = ( +/obj/structure/surface/table/almayer, +/obj/item/prop/magazine/dirty{ + pixel_y = 5 + }, +/obj/item/tool/pen{ + pixel_x = 4; + pixel_y = 6 + }, +/turf/open/floor/almayer{ + icon_state = "bluefull" + }, +/area/almayer/living/briefing) "mha" = ( /obj/effect/decal/warning_stripes{ icon_state = "SE-out"; @@ -51709,6 +52394,18 @@ icon_state = "plate" }, /area/almayer/squads/alpha) +"muQ" = ( +/obj/structure/machinery/cm_vending/clothing/dress{ + density = 0; + pixel_y = 16 + }, +/obj/structure/machinery/light{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/command/cic) "mvl" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -51722,6 +52419,15 @@ icon_state = "bluecorner" }, /area/almayer/squads/delta) +"mvH" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out"; + pixel_x = 1 + }, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/south2) "mvI" = ( /obj/structure/machinery/camera/autoname/almayer{ dir = 4; @@ -51735,6 +52441,11 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/lower_medical_lobby) +"mwz" = ( +/turf/open/floor/almayer{ + icon_state = "emeraldfull" + }, +/area/almayer/living/briefing) "mwA" = ( /obj/structure/disposalpipe/segment{ dir = 8; @@ -51882,6 +52593,25 @@ /obj/effect/decal/cleanable/blood/oil, /turf/open/floor/plating/plating_catwalk, /area/almayer/lifeboat_pumps/south2) +"mzG" = ( +/obj/structure/bookcase{ + icon_state = "book-5"; + name = "law and engineering manuals bookcase"; + opacity = 0 + }, +/obj/item/book/manual/marine_law, +/obj/item/book/manual/detective, +/obj/item/book/manual/security_space_law, +/obj/item/book/manual/engineering_guide, +/obj/item/book/manual/engineering_construction, +/obj/item/book/manual/orbital_cannon_manual, +/obj/item/book/manual/ripley_build_and_repair, +/obj/item/book/manual/engineering_hacking, +/obj/structure/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "mzO" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 10 @@ -52080,6 +52810,10 @@ }, /turf/open/floor/almayer, /area/almayer/living/briefing) +"mES" = ( +/obj/structure/pipes/vents/scrubber, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "mFq" = ( /obj/structure/machinery/door_control{ dir = 1; @@ -52236,7 +52970,7 @@ "mIA" = ( /obj/structure/closet/firecloset, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "cargo" }, /area/almayer/lifeboat_pumps/south2) "mIB" = ( @@ -52433,18 +53167,22 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/port_hallway) "mLb" = ( -/obj/structure/platform{ - dir = 1 +/obj/structure/surface/table/almayer, +/obj/item/toy/deck{ + pixel_x = -6; + pixel_y = -2 }, /obj/item/toy/deck/uno{ pixel_x = 6; pixel_y = -1 }, -/obj/item/toy/deck{ - pixel_x = -6; - pixel_y = -2 +/obj/structure/prop/holidays/string_lights{ + dir = 8; + pixel_x = 29 + }, +/turf/open/floor/almayer{ + icon_state = "plate" }, -/turf/open/floor/almayer, /area/almayer/living/briefing) "mLu" = ( /obj/effect/decal/warning_stripes{ @@ -52742,6 +53480,13 @@ icon_state = "test_floor4" }, /area/almayer/hallways/starboard_hallway) +"mRU" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/turf/open/floor/almayer, +/area/almayer/hull/upper_hull/u_f_p) "mRW" = ( /turf/open/floor/almayer/research/containment/corner1, /area/almayer/medical/containment/cell/cl) @@ -52948,7 +53693,13 @@ pixel_x = -27 }, /obj/structure/pipes/standard/simple/hidden/supply, -/turf/open/floor/almayer, +/obj/structure/bed/chair/comfy/charlie{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, /area/almayer/living/briefing) "mWe" = ( /obj/structure/machinery/camera/autoname/almayer{ @@ -53029,6 +53780,19 @@ dir = 1 }, /area/almayer/medical/containment/cell) +"mXa" = ( +/obj/structure/closet/secure_closet/guncabinet, +/obj/item/weapon/gun/rifle/l42a{ + pixel_y = 6 + }, +/obj/item/weapon/gun/rifle/l42a, +/obj/item/weapon/gun/rifle/l42a{ + pixel_y = -6 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "mXj" = ( /turf/closed/wall/almayer, /area/almayer/living/commandbunks) @@ -53066,6 +53830,17 @@ icon_state = "blue" }, /area/almayer/hallways/port_hallway) +"mYX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/guncabinet, +/obj/item/weapon/gun/rifle/m41a{ + pixel_y = 6 + }, +/obj/item/weapon/gun/rifle/m41a, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "mYY" = ( /obj/effect/decal/warning_stripes{ icon_state = "SW-out" @@ -53157,8 +53932,11 @@ /obj/structure/machinery/light/small{ dir = 4 }, -/turf/open/floor/prison{ - icon_state = "kitchen" +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" }, /area/almayer/engineering/upper_engineering/port) "naR" = ( @@ -53197,12 +53975,6 @@ icon_state = "redfull" }, /area/almayer/command/cic) -"nbB" = ( -/obj/structure/closet/secure_closet/freezer/fridge/full, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/living/grunt_rnr) "ncp" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 9 @@ -53309,6 +54081,22 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/hangar) +"neF" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/structure/transmitter{ + name = "Kitchen Telephone"; + phone_category = "Almayer"; + phone_id = "Kitchen"; + pixel_x = -8; + pixel_y = 29 + }, +/obj/structure/machinery/vending/ingredients, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/grunt_rnr) "neO" = ( /obj/structure/machinery/power/apc/almayer{ dir = 1 @@ -53723,10 +54511,11 @@ }, /area/almayer/command/securestorage) "nna" = ( +/obj/structure/closet/firecloset, /turf/open/floor/almayer{ - icon_state = "dark_sterile" + icon_state = "cargo" }, -/area/almayer/living/port_emb) +/area/almayer/hull/upper_hull/u_f_s) "nnc" = ( /obj/structure/largecrate/random/case/double, /turf/open/floor/almayer{ @@ -53792,6 +54581,16 @@ /obj/structure/largecrate/random/barrel/white, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_s) +"nnG" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/pipes/standard/manifold/hidden/supply{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "noj" = ( /obj/structure/largecrate, /obj/structure/prop/server_equipment/laptop{ @@ -53855,21 +54654,34 @@ }, /area/almayer/medical/containment) "npB" = ( -/obj/structure/sink{ - dir = 1; - pixel_y = -10 +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 }, -/obj/structure/pipes/vents/scrubber{ - dir = 1 +/turf/open/floor/almayer, +/area/almayer/hull/upper_hull/u_f_s) +"npK" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/computer/emails{ + dir = 4; + pixel_y = 2 }, -/obj/structure/surface/rack{ - density = 0; - pixel_x = 26 +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) +"npS" = ( +/obj/structure/surface/table/almayer, +/obj/item/device/flashlight/lamp{ + layer = 3.3; + pixel_x = 15 + }, +/obj/structure/prop/server_equipment/laptop{ + pixel_x = -2; + pixel_y = 1 }, /turf/open/floor/almayer{ - icon_state = "dark_sterile" + icon_state = "orangefull" }, -/area/almayer/living/port_emb) +/area/almayer/living/briefing) "nqx" = ( /obj/structure/pipes/standard/manifold/hidden/supply, /turf/open/floor/plating/plating_catwalk, @@ -54104,6 +54916,17 @@ }, /turf/open/floor/almayer, /area/almayer/squads/alpha) +"nuI" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/structure/surface/table/almayer, +/obj/item/tool/hand_labeler, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "sterile_green_side" + }, +/area/almayer/medical/chemistry) "nuK" = ( /obj/structure/surface/table/almayer, /obj/item/reagent_container/food/condiment/hotsauce/franks{ @@ -54172,15 +54995,6 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_s) -"nwv" = ( -/obj/structure/surface/table/woodentable/fancy, -/obj/item/paper{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/tool/lighter/zippo/gold, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) "nww" = ( /obj/item/device/radio/intercom{ freerange = 1; @@ -54326,11 +55140,12 @@ /turf/open/floor/almayer, /area/almayer/squads/charlie_delta_shared) "nza" = ( -/obj/structure/bed/chair/comfy/charlie, /obj/structure/pipes/vents/scrubber{ dir = 4 }, -/obj/item/trash/uscm_mre, +/obj/structure/bed/chair/comfy/charlie{ + dir = 4 + }, /turf/open/floor/almayer{ icon_state = "emeraldfull" }, @@ -54359,6 +55174,9 @@ /obj/structure/machinery/light{ dir = 8 }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, /turf/open/floor/almayer{ dir = 10; icon_state = "red" @@ -54512,6 +55330,11 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/req) +"nDV" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/pipes/standard/simple/hidden/supply, +/turf/open/floor/almayer, +/area/almayer/command/cichallway) "nEo" = ( /obj/structure/surface/table/almayer, /obj/item/storage/donut_box{ @@ -54772,12 +55595,12 @@ /turf/open/floor/almayer, /area/almayer/living/basketball) "nIW" = ( -/obj/structure/bed/chair/comfy/bravo{ - dir = 1 - }, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 9 }, +/obj/structure/bed/chair/comfy/bravo{ + dir = 1 + }, /turf/open/floor/almayer{ icon_state = "orangefull" }, @@ -54823,6 +55646,15 @@ icon_state = "red" }, /area/almayer/command/lifeboat) +"nKs" = ( +/obj/structure/machinery/cm_vending/clothing/dress{ + pixel_y = 0; + req_access = list(1) + }, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/living/commandbunks) "nLa" = ( /obj/structure/bed/chair{ dir = 4 @@ -54946,51 +55778,15 @@ }, /area/almayer/hull/lower_hull/l_m_s) "nMM" = ( -/obj/item/bedsheet/blue{ - layer = 3.2 - }, -/obj/item/bedsheet/blue{ - pixel_y = 13 - }, -/obj/item/toy/plush/therapy/red{ - desc = "A USCM approved plush doll. It's not soft and hardly comforting!"; - force = 15; - layer = 4.1; - name = "Sergeant Huggs"; - pixel_y = 15; - throwforce = 15 - }, -/obj/item/clothing/head/cmcap{ - layer = 4.1; - pixel_x = -1; - pixel_y = 22 - }, -/obj/structure/window/reinforced{ - dir = 4; - pixel_x = -2; - pixel_y = 4 - }, -/obj/structure/window/reinforced{ - dir = 8; - layer = 3.3; - pixel_y = 4 - }, -/obj/structure/bed{ - can_buckle = 0 - }, -/obj/structure/bed{ - buckling_y = 13; - layer = 3.5; - pixel_y = 13 - }, -/obj{ - name = "---Merge conflict marker---" +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 }, -/obj/structure/bed/chair/comfy/charlie, -/turf/open/floor/almayer{ - icon_state = "emeraldfull" +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_y = 2 }, -/area/almayer/living/briefing) +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_f_s) "nMV" = ( /obj/structure/machinery/cm_vending/sorted/medical/wall_med{ pixel_y = 25 @@ -55187,6 +55983,13 @@ /obj/structure/machinery/light, /turf/open/floor/almayer, /area/almayer/hallways/aft_hallway) +"nQH" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 10 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "nRq" = ( /obj/effect/decal/cleanable/blood/oil/streak, /obj/structure/pipes/standard/simple/hidden/supply{ @@ -55202,6 +56005,17 @@ icon_state = "silver" }, /area/almayer/shipboard/brig/cic_hallway) +"nRQ" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/structure/machinery/door/airlock/almayer/command/reinforced{ + name = "\improper Commanding Officer's Quarters"; + req_access = null; + req_access_txt = "31" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/living/commandbunks) "nRR" = ( /turf/open/floor/almayer{ dir = 1; @@ -55628,12 +56442,6 @@ icon_state = "green" }, /area/almayer/living/grunt_rnr) -"ocs" = ( -/obj/structure/pipes/vents/pump{ - dir = 4 - }, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) "ocB" = ( /obj/effect/decal/warning_stripes{ icon_state = "S"; @@ -55705,6 +56513,23 @@ icon_state = "cargo_arrow" }, /area/almayer/squads/bravo) +"odC" = ( +/obj/structure/machinery/light/small{ + dir = 8 + }, +/obj/item/prop/magazine/boots/n160{ + layer = 2.8; + pixel_x = 4; + pixel_y = -8 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/living/commandbunks) "odD" = ( /obj/structure/machinery/camera/autoname/almayer{ dir = 8; @@ -56039,9 +56864,6 @@ }, /area/almayer/engineering/engine_core) "okB" = ( -/obj/structure/bed/chair/comfy/alpha{ - dir = 1 - }, /obj/structure/pipes/vents/scrubber{ dir = 4 }, @@ -56072,12 +56894,16 @@ }, /area/almayer/shipboard/brig/execution) "olk" = ( -/obj/structure/machinery/door/airlock/almayer/generic{ - name = "\improper Bathroom" - }, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_y = 2 + }, +/obj/structure/machinery/door/airlock/almayer/generic{ + name = "\improper Bathroom" + }, /turf/open/floor/almayer{ icon_state = "test_floor4" }, @@ -56328,13 +57154,6 @@ icon_state = "plate" }, /area/almayer/living/pilotbunks) -"oqA" = ( -/obj/structure/machinery/door/poddoor/shutters/almayer/uniform_vendors, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "cargo_arrow" - }, -/area/almayer/command/cic) "oqD" = ( /obj/structure/surface/table/almayer, /obj/item/tool/wet_sign, @@ -56351,6 +57170,14 @@ }, /turf/open/floor/plating, /area/almayer/hull/lower_hull/l_f_p) +"oqP" = ( +/obj/structure/bed/chair/comfy/delta{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "oqS" = ( /obj/structure/toilet{ dir = 1 @@ -56585,6 +57412,23 @@ icon_state = "red" }, /area/almayer/lifeboat_pumps/south1) +"ouT" = ( +/obj/item/trash/plate{ + pixel_x = 9; + pixel_y = 11 + }, +/obj/item/reagent_container/food/snacks/carpmeat{ + layer = 3.3; + pixel_x = 8; + pixel_y = 11 + }, +/obj/item/reagent_container/food/snacks/carpmeat{ + layer = 3.3; + pixel_x = 8; + pixel_y = 11 + }, +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "ouV" = ( /obj/structure/sign/safety/cryo{ pixel_x = 1; @@ -56726,6 +57570,23 @@ icon_state = "orangecorner" }, /area/almayer/hull/upper_hull/u_a_s) +"oys" = ( +/obj/structure/pipes/standard/simple/hidden/supply, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 2 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/machinery/door/airlock/almayer/command/reinforced{ + dir = 1; + id_tag = "CO-Office"; + name = "\improper Commanding Officer's Office"; + req_access = null; + req_access_txt = "31" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/living/commandbunks) "oyw" = ( /obj/structure/platform_decoration{ dir = 8 @@ -56880,6 +57741,24 @@ icon_state = "silver" }, /area/almayer/command/cichallway) +"oBW" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/storage/bible{ + desc = "As the legendary US Army chaplain once said, 'There are no Athiests in fancy offices'."; + name = "Holy Bible"; + pixel_x = -3; + pixel_y = 9 + }, +/obj/item/prop/helmetgarb/rosary{ + pixel_x = -4; + pixel_y = 5 + }, +/obj/item/device/flashlight/lamp{ + pixel_x = 3; + pixel_y = 1 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "oCf" = ( /obj/structure/machinery/light{ unacidable = 1; @@ -57202,6 +58081,15 @@ "oIB" = ( /turf/closed/wall/almayer, /area/almayer/command/combat_correspondent) +"oIY" = ( +/obj/structure/machinery/cryopod/right{ + layer = 3.1; + pixel_y = 13 + }, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/command/airoom) "oJp" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 1 @@ -57340,12 +58228,6 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/hydroponics) -"oMd" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/living/grunt_rnr) "oMe" = ( /obj/structure/machinery/light{ dir = 8 @@ -57374,6 +58256,13 @@ icon_state = "rasputin3" }, /area/almayer/powered/agent) +"oMC" = ( +/obj/structure/machinery/light, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "oMH" = ( /obj/structure/bed/chair{ dir = 4 @@ -57382,13 +58271,6 @@ icon_state = "redfull" }, /area/almayer/squads/alpha_bravo_shared) -"oMM" = ( -/obj/structure/machinery/light{ - dir = 1 - }, -/obj/structure/machinery/cm_vending/clothing/commanding_officer, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "oMQ" = ( /obj/structure/pipes/vents/pump, /turf/open/floor/almayer, @@ -58064,12 +58946,6 @@ icon_state = "test_floor4" }, /area/almayer/hull/lower_hull/l_f_p) -"pdt" = ( -/obj/structure/closet/secure_closet/freezer/fridge/groceries, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/living/grunt_rnr) "pdG" = ( /obj/structure/machinery/door/airlock/almayer/security{ dir = 2; @@ -58125,6 +59001,7 @@ /obj/item/facepaint/black{ pixel_x = -10 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -58152,8 +59029,11 @@ /obj/structure/machinery/light/small{ dir = 8 }, -/turf/open/floor/prison{ - icon_state = "kitchen" +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" }, /area/almayer/engineering/upper_engineering/port) "pfH" = ( @@ -58789,6 +59669,20 @@ icon_state = "mono" }, /area/almayer/lifeboat_pumps/south2) +"pxL" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/coatrack{ + pixel_x = -5; + pixel_y = 1 + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 5 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "pyc" = ( /obj/structure/bed/stool, /turf/open/floor/almayer{ @@ -59268,6 +60162,16 @@ }, /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/south1) +"pJe" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/prop/tableflag/uscm{ + pixel_x = -5 + }, +/obj/item/prop/tableflag/uscm2{ + pixel_x = 5 + }, +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "pJi" = ( /obj/structure/closet/firecloset, /turf/open/floor/almayer{ @@ -59275,6 +60179,18 @@ icon_state = "red" }, /area/almayer/shipboard/brig/general_equipment) +"pJn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/machinery/light/small{ + dir = 1 + }, +/obj/structure/largecrate/random/secure{ + pixel_x = -5 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "pJD" = ( /obj/structure/pipes/vents/scrubber{ dir = 1 @@ -59321,6 +60237,21 @@ icon_state = "green" }, /area/almayer/hallways/port_hallway) +"pJK" = ( +/obj/structure/bookcase{ + icon_state = "book-5"; + name = "medical manuals bookcase"; + opacity = 0 + }, +/obj/item/book/manual/surgery, +/obj/item/book/manual/research_and_development, +/obj/item/book/manual/medical_diagnostics_manual, +/obj/item/book/manual/medical_cloning, +/obj/structure/machinery/light{ + dir = 4 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "pJR" = ( /obj/effect/step_trigger/teleporter_vector{ name = "Almayer_AresUp"; @@ -59438,6 +60369,14 @@ /obj/structure/largecrate/random/case/double, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_m_p) +"pNK" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/living/auxiliary_officer_office) "pNM" = ( /obj/structure/platform{ dir = 4 @@ -59546,6 +60485,10 @@ /area/almayer/hull/upper_hull/u_a_s) "pPF" = ( /obj/structure/machinery/power/apc/almayer/hardened, +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 + }, /turf/open/floor/almayer{ icon_state = "mono" }, @@ -59579,6 +60522,9 @@ pixel_x = 23; specialfunctions = 4 }, +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, /turf/open/floor/almayer{ icon_state = "dark_sterile" }, @@ -59709,6 +60655,12 @@ icon_state = "test_floor5" }, /area/almayer/medical/hydroponics) +"pSH" = ( +/obj/structure/pipes/standard/manifold/hidden/supply{ + dir = 8 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "pSL" = ( /obj/structure/machinery/alarm/almayer{ dir = 1 @@ -59766,6 +60718,10 @@ /area/almayer/command/computerlab) "pUe" = ( /obj/structure/machinery/power/apc/almayer/hardened, +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out"; + pixel_x = 1 + }, /turf/open/floor/almayer{ icon_state = "mono" }, @@ -59793,6 +60749,15 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_m_p) +"pUl" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hallways/vehiclehangar) "pUp" = ( /obj/item/device/radio/intercom{ freerange = 1; @@ -60044,6 +61009,12 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/containment) +"pYp" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "pYu" = ( /obj/item/tool/warning_cone{ pixel_x = -12; @@ -60115,6 +61086,23 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/medical_science) +"qan" = ( +/obj/item/device/radio/listening_bug/radio_linked/mp{ + pixel_y = 8 + }, +/obj/item/device/radio/listening_bug/radio_linked/mp, +/obj/structure/closet/secure_closet/cmdcabinet{ + pixel_y = 24; + desc = "A bulletproof cabinet containing communications equipment."; + name = "communications cabinet"; + req_access = null; + req_one_access_txt = "3" + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "red" + }, +/area/almayer/shipboard/brig/main_office) "qau" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -60454,10 +61442,13 @@ }, /area/almayer/living/starboard_garden) "qgw" = ( -/obj/structure/stairs/perspective{ - icon_state = "p_stair_sn_full_cap" +/obj/structure/bed/chair/comfy/alpha{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" }, -/turf/open/floor/almayer, /area/almayer/living/briefing) "qgG" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ @@ -60586,7 +61577,9 @@ pixel_x = 27 }, /obj/structure/pipes/standard/simple/hidden/supply, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + icon_state = "plate" + }, /area/almayer/living/briefing) "qit" = ( /obj/structure/surface/table/reinforced/almayer_B, @@ -60654,6 +61647,15 @@ /obj/effect/landmark/late_join/charlie, /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/charlie) +"qkj" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/lifeboat) "qkn" = ( /obj/structure/sign/safety/maint{ pixel_x = -17 @@ -60711,6 +61713,21 @@ icon_state = "bluecorner" }, /area/almayer/squads/delta) +"qmr" = ( +/obj/structure/surface/table/almayer, +/obj/item/tool/screwdriver, +/obj/item/prop/helmetgarb/gunoil{ + pixel_x = -7; + pixel_y = 12 + }, +/obj/item/weapon/gun/rifle/l42a{ + pixel_x = 17; + pixel_y = 6 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "qmt" = ( /obj/effect/decal/warning_stripes{ icon_state = "SW-out"; @@ -60759,6 +61776,18 @@ icon_state = "sterile_green_corner" }, /area/almayer/medical/medical_science) +"qmB" = ( +/obj/structure/bed/chair/comfy/bravo{ + dir = 1 + }, +/obj/structure/prop/holidays/string_lights{ + dir = 8; + pixel_x = 29 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "qmC" = ( /obj/structure/machinery/door/poddoor/almayer/open{ dir = 4; @@ -60949,8 +61978,10 @@ /area/almayer/medical/chemistry) "qpU" = ( /obj/structure/flora/pottedplant{ - icon_state = "pottedplant_22" + icon_state = "pottedplant_22"; + pixel_y = 12 }, +/obj/structure/surface/table/almayer, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -61027,6 +62058,15 @@ icon_state = "silver" }, /area/almayer/command/computerlab) +"qsa" = ( +/obj/structure/bed/chair/comfy/bravo{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "qsd" = ( /obj/structure/largecrate/random, /turf/open/floor/almayer{ @@ -61073,7 +62113,7 @@ "qtR" = ( /obj/structure/closet/emcloset, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "cargo" }, /area/almayer/command/lifeboat) "qtS" = ( @@ -61346,6 +62386,13 @@ icon_state = "plating" }, /area/almayer/hallways/vehiclehangar) +"qyH" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_y = 1 + }, +/turf/open/floor/almayer, +/area/almayer/command/lifeboat) "qyJ" = ( /obj/structure/closet/secure_closet/guncabinet/red/cic_armory_shotgun, /turf/open/floor/almayer{ @@ -61454,28 +62501,14 @@ /turf/open/floor/almayer, /area/almayer/living/briefing) "qCg" = ( -/obj/structure/pipes/vents/pump, /obj/structure/mirror{ pixel_y = 32 }, /obj/structure/sink{ pixel_y = 24 }, -/turf/open/floor/prison{ - icon_state = "kitchen" - }, -/area/almayer/engineering/upper_engineering/port) -"qCi" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 5 - }, -/obj/item/device/radio/intercom{ - freerange = 1; - name = "General Listening Channel"; - pixel_y = -28 - }, /turf/open/floor/plating/plating_catwalk, -/area/almayer/hull/upper_hull/u_f_s) +/area/almayer/engineering/upper_engineering/port) "qCo" = ( /obj/structure/pipes/vents/pump{ dir = 1 @@ -62126,6 +63159,16 @@ icon_state = "mono" }, /area/almayer/lifeboat_pumps/south1) +"qQL" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "orange" + }, +/area/almayer/engineering/upper_engineering/port) "qQM" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -62378,6 +63421,12 @@ icon_state = "plate" }, /area/almayer/squads/delta) +"qWy" = ( +/obj/structure/bed/chair/comfy/delta, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "qWI" = ( /obj/structure/machinery/status_display{ pixel_y = -30 @@ -62699,6 +63748,37 @@ icon_state = "orange" }, /area/almayer/engineering/upper_engineering) +"rcW" = ( +/obj/item/storage/toolbox/mechanical{ + pixel_y = 13 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) +"rdb" = ( +/obj/structure/surface/table/almayer, +/obj/effect/decal/cleanable/dirt, +/obj/item/paper_bin/uscm{ + pixel_x = 9; + pixel_y = 6 + }, +/obj/item/tool/pen{ + pixel_x = 9; + pixel_y = 2 + }, +/obj/item/tool/pen{ + pixel_x = 9; + pixel_y = 9 + }, +/obj/structure/prop/holidays/string_lights{ + dir = 8; + pixel_x = 29 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "rde" = ( /obj/structure/sign/prop1, /turf/closed/wall/almayer, @@ -62814,6 +63894,18 @@ icon_state = "test_floor4" }, /area/almayer/hull/upper_hull/u_m_s) +"rfv" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/faxmachine/uscm/command/capt{ + name = "Commanding Officer's Fax Machine"; + pixel_x = -4; + pixel_y = 3 + }, +/obj/structure/machinery/light{ + dir = 1 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "rfI" = ( /obj/structure/sign/safety/airlock{ pixel_y = -32 @@ -62861,14 +63953,6 @@ "rgJ" = ( /obj/structure/machinery/light, /obj/structure/machinery/disposal, -/obj/item/bananapeel{ - desc = "An experimental B8 Smart-Scope. Based on the technologies used in the Smart Gun by ARMAT, this sight has integrated IFF systems. It can only attach to the L42A Battle Rifle, M44 Combat Revolver, and M46C Pulse Rifle. This one appears to be covered in gun oil"; - icon = 'icons/obj/items/weapons/guns/attachments.dmi'; - icon_state = "iffbarrel"; - name = "Broken B8 Smart-Scope"; - pixel_x = -1; - pixel_y = 11 - }, /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -63375,6 +64459,17 @@ icon_state = "plate" }, /area/almayer/squads/delta) +"rqH" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/transmitter/rotary{ + name = "Commanding Officer's Office"; + phone_category = "Offices"; + phone_id = "Commanding Officer's Office"; + pixel_x = 16; + pixel_y = 8 + }, +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "rra" = ( /obj/structure/machinery/door/poddoor/almayer/locked{ dir = 8; @@ -63483,8 +64578,13 @@ /turf/open/floor/almayer, /area/almayer/command/computerlab) "rsW" = ( -/turf/open/floor/prison{ - icon_state = "kitchen" +/obj/structure/pipes/vents/pump, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" }, /area/almayer/engineering/upper_engineering/port) "rsY" = ( @@ -63685,9 +64785,7 @@ "rzf" = ( /obj/effect/landmark/late_join/working_joe, /obj/effect/landmark/start/working_joe, -/turf/open/floor/almayer/no_build{ - icon_state = "ai_floors" - }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/command/airoom) "rzj" = ( /obj/structure/pipes/standard/simple/hidden/supply, @@ -63731,15 +64829,11 @@ }, /area/almayer/living/briefing) "rAv" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/structure/machinery/door/window/tinted{ +/obj/structure/machinery/shower{ dir = 8 }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" - }, +/obj/structure/window/reinforced, +/turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/cells) "rAx" = ( /obj/structure/disposalpipe/junction{ @@ -63920,27 +65014,26 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/engineering/upper_engineering/port) -"rDd" = ( -/obj/structure/surface/table/woodentable/fancy, -/obj/structure/machinery/computer/emails{ - dir = 1; - pixel_y = 2 - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "rDe" = ( /obj/structure/surface/table/almayer, -/obj/item/reagent_container/food/snacks/kepler_crisps{ +/obj/structure/sign/safety/cryo{ pixel_x = 8; - pixel_y = 4 + pixel_y = 33 }, /obj/item/toy/deck{ pixel_x = -4; - pixel_y = 1 + pixel_y = 10 }, -/obj/structure/sign/safety/cryo{ - pixel_x = 8; - pixel_y = 33 +/obj/item/reagent_container/food/drinks/cans/souto/diet/cherry{ + pixel_x = 9; + pixel_y = 12 + }, +/obj/item/ashtray/plastic{ + pixel_y = -4 + }, +/obj/item/trash/cigbutt{ + pixel_x = 1; + pixel_y = 5 }, /turf/open/floor/almayer{ dir = 6; @@ -64047,6 +65140,14 @@ icon_state = "plate" }, /area/almayer/squads/delta) +"rEJ" = ( +/obj/structure/machinery/light, +/obj/structure/flora/pottedplant{ + pixel_x = -1; + pixel_y = 3 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "rEL" = ( /obj/structure/machinery/cm_vending/gear/intelligence_officer, /turf/open/floor/almayer{ @@ -64109,6 +65210,29 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/lower_medical_medbay) +"rFV" = ( +/obj/structure/surface/table/almayer, +/obj/effect/decal/cleanable/dirt, +/obj/item/device/flashlight/lamp{ + layer = 3.3; + pixel_x = 15 + }, +/obj/item/paper_bin/uscm{ + pixel_x = -7; + pixel_y = 6 + }, +/obj/item/tool/pen{ + pixel_x = -10; + pixel_y = 6 + }, +/obj/item/tool/pen{ + pixel_x = -10; + pixel_y = -2 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "rFY" = ( /turf/open/floor/almayer{ dir = 5; @@ -64464,6 +65588,17 @@ icon_state = "plate" }, /area/almayer/living/gym) +"rOZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/guncabinet, +/obj/item/weapon/gun/rifle/l42a{ + pixel_y = 6 + }, +/obj/item/weapon/gun/rifle/l42a, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "rPh" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -64710,11 +65845,21 @@ /area/almayer/command/computerlab) "rUB" = ( /obj/structure/pipes/vents/pump, +/obj/item/tool/soap, +/obj/effect/decal/cleanable/blood, +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/obj/structure/sink{ + pixel_y = 24 + }, /obj/structure/mirror{ pixel_y = 32 }, -/obj/item/tool/soap, -/obj/effect/decal/cleanable/blood, /turf/open/floor/almayer{ icon_state = "dark_sterile" }, @@ -64754,6 +65899,14 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/cic_hallway) +"rWF" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/lifeboat) "rWL" = ( /obj/structure/barricade/metal, /turf/open/floor/almayer{ @@ -64860,6 +66013,14 @@ icon_state = "plate" }, /area/almayer/living/offices/flight) +"rYZ" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_x = -1; + pixel_y = 2 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hallways/vehiclehangar) "rZz" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 5 @@ -65191,6 +66352,17 @@ icon_state = "plating" }, /area/almayer/hull/lower_hull/l_f_s) +"sgE" = ( +/obj/structure/pipes/standard/simple/hidden/supply, +/obj/structure/reagent_dispensers/water_cooler{ + density = 0; + pixel_x = 12; + pixel_y = 6 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "sgM" = ( /obj/structure/closet/toolcloset, /turf/open/floor/almayer{ @@ -65334,6 +66506,9 @@ /obj/structure/machinery/light/small{ dir = 8 }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, /turf/open/floor/almayer{ dir = 10; icon_state = "orange" @@ -65492,6 +66667,15 @@ /area/almayer/squads/delta) "soa" = ( /obj/structure/pipes/standard/simple/hidden/supply, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 1; + pixel_y = 1 + }, /obj/structure/machinery/door/airlock/almayer/generic{ dir = 1; name = "Bathroom" @@ -65702,6 +66886,12 @@ icon_state = "test_floor4" }, /area/almayer/hallways/repair_bay) +"ssn" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 10 + }, +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "ssD" = ( /obj/structure/machinery/light/small{ dir = 4 @@ -65823,11 +67013,15 @@ }, /area/almayer/command/lifeboat) "svp" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/almayer{ - icon_state = "mono" +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 }, -/area/almayer/lifeboat_pumps/south1) +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_f_s) "swn" = ( /obj/structure/window/framed/almayer, /obj/structure/machinery/door/firedoor/border_only/almayer{ @@ -66045,24 +67239,18 @@ icon_state = "orange" }, /area/almayer/engineering/ce_room) -"sBF" = ( -/obj/structure/pipes/standard/simple/hidden/supply, -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 2 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/machinery/door/airlock/almayer/command/reinforced{ - access_modified = 1; - dir = 1; - id_tag = "CO-Office"; - name = "\improper Commanding Officer's Office"; - req_access = null; - req_access_txt = "31" +"sBs" = ( +/obj/structure/surface/table/almayer, +/obj/effect/decal/cleanable/dirt, +/obj/item/paper, +/obj/item/tool/pen{ + pixel_x = -5; + pixel_y = 2 }, /turf/open/floor/almayer{ - icon_state = "test_floor4" + icon_state = "redfull" }, -/area/almayer/living/commandbunks) +/area/almayer/living/briefing) "sBH" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 10 @@ -66334,6 +67522,17 @@ /obj/structure/mirror, /turf/closed/wall/almayer, /area/almayer/living/gym) +"sGX" = ( +/obj/structure/machinery/firealarm{ + pixel_y = -28 + }, +/obj/structure/bed/chair/comfy/charlie{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "sGZ" = ( /obj/structure/closet/firecloset, /turf/open/floor/almayer{ @@ -67374,15 +68573,6 @@ /obj/effect/landmark/late_join, /turf/open/floor/almayer, /area/almayer/living/cryo_cells) -"teB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "teH" = ( /obj/structure/disposalpipe/segment, /obj/structure/pipes/standard/simple/hidden/supply, @@ -67462,6 +68652,11 @@ icon_state = "plating" }, /area/almayer/shipboard/brig/armory) +"tgE" = ( +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/living/briefing) "tgK" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -67509,6 +68704,15 @@ icon_state = "cargo_arrow" }, /area/almayer/squads/alpha_bravo_shared) +"thE" = ( +/obj/structure/bed/chair/comfy/charlie{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "emeraldfull" + }, +/area/almayer/living/briefing) "thL" = ( /turf/open/floor/wood/ship, /area/almayer/shipboard/brig/cells) @@ -67591,6 +68795,10 @@ pixel_x = -2; pixel_y = 8 }, +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 + }, /turf/open/floor/almayer{ dir = 6; icon_state = "orange" @@ -67999,11 +69207,28 @@ /obj/structure/machinery/light{ dir = 1 }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_y = 1 + }, /turf/open/floor/almayer{ dir = 1; icon_state = "red" }, /area/almayer/command/lifeboat) +"tqI" = ( +/obj/structure/machinery/door/window/westright, +/obj/structure/machinery/shower{ + dir = 8; + layer = 3.10; + plane = -4 + }, +/obj/item/tool/soap{ + pixel_x = 2; + pixel_y = 7 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/living/commandbunks) "tqV" = ( /obj/structure/extinguisher_cabinet{ pixel_y = 26 @@ -68093,14 +69318,6 @@ icon_state = "cargo" }, /area/almayer/engineering/upper_engineering/port) -"tsv" = ( -/obj/structure/sign/nosmoking_2{ - pixel_x = 32 - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/lifeboat_pumps/north1) "tsy" = ( /obj/structure/filingcabinet{ pixel_x = 8 @@ -68450,7 +69667,7 @@ "tAh" = ( /obj/structure/closet/emcloset, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "cargo" }, /area/almayer/engineering/upper_engineering/port) "tAi" = ( @@ -68476,6 +69693,12 @@ icon_state = "plate" }, /area/almayer/engineering/upper_engineering/port) +"tAJ" = ( +/obj/structure/closet/secure_closet/fridge/dry, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/grunt_rnr) "tAL" = ( /obj/structure/machinery/cryopod, /turf/open/floor/almayer{ @@ -68580,14 +69803,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_s) -"tDA" = ( -/obj/item/tool/weldpack{ - pixel_y = 15 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "tDZ" = ( /obj/structure/machinery/cryopod{ pixel_y = 6 @@ -68789,6 +70004,18 @@ /obj/structure/window/framed/almayer, /turf/open/floor/plating, /area/almayer/shipboard/brig/cells) +"tHU" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/structure/machinery/power/apc/almayer{ + dir = 8 + }, +/obj/item/storage/briefcase{ + pixel_y = 15 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "tIp" = ( /obj/structure/machinery/door/airlock/almayer/generic{ name = "\improper Dorms" @@ -68858,6 +70085,11 @@ /obj/structure/pipes/standard/simple/hidden/supply{ dir = 1 }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 2; + pixel_y = 2 + }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_p) "tJp" = ( @@ -68964,6 +70196,17 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_a_s) +"tMc" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/bed/chair/comfy/alpha{ + dir = 8 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "tMf" = ( /obj/effect/decal/warning_stripes{ icon_state = "W" @@ -68976,10 +70219,13 @@ icon_state = "red" }, /area/almayer/hallways/aft_hallway) -"tMn" = ( -/obj/structure/pipes/standard/simple/hidden/supply, -/obj/structure/bed/chair/comfy/beige, -/turf/open/floor/carpet, +"tMu" = ( +/obj/structure/machinery/cm_vending/clothing/commanding_officer{ + pixel_y = 0 + }, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, /area/almayer/living/commandbunks) "tMW" = ( /obj/effect/decal/warning_stripes{ @@ -69123,21 +70369,11 @@ icon_state = "test_floor4" }, /area/almayer/hallways/port_hallway) -"tQE" = ( -/obj/item/clothing/head/welding, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "tQL" = ( /obj/structure/pipes/standard/simple/hidden/supply, /obj/structure/machinery/light, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/hangar) -"tQM" = ( -/obj/structure/safe/co_office, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "tQV" = ( /turf/closed/wall/almayer/outer, /area/almayer/lifeboat_pumps/south1) @@ -69214,6 +70450,28 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_a_p) +"tSv" = ( +/obj/structure/surface/table/almayer, +/obj/effect/decal/cleanable/dirt, +/obj/item/device/flashlight/lamp{ + pixel_x = 15 + }, +/obj/item/paper_bin/uscm{ + pixel_x = -7; + pixel_y = 6 + }, +/obj/item/tool/pen{ + pixel_x = -9; + pixel_y = 3 + }, +/obj/item/tool/pen{ + pixel_x = 4; + pixel_y = -4 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "tSw" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer{ @@ -69233,8 +70491,8 @@ pixel_y = 12 }, /obj/item/paper_bin/uscm{ - pixel_y = 6; - pixel_x = 6 + pixel_x = 6; + pixel_y = 6 }, /obj/item/tool/pen{ pixel_x = 4; @@ -69414,6 +70672,13 @@ icon_state = "plate" }, /area/almayer/shipboard/brig/cryo) +"tXz" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hallways/vehiclehangar) "tXM" = ( /obj/structure/pipes/vents/pump{ dir = 8 @@ -69472,6 +70737,12 @@ icon_state = "dark_sterile" }, /area/almayer/medical/lower_medical_lobby) +"tYv" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/hull/upper_hull/u_f_p) "tYw" = ( /obj/effect/decal/medical_decals{ icon_state = "triagedecalbottomleft"; @@ -69535,12 +70806,6 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_s) -"tZB" = ( -/obj/structure/machinery/light{ - dir = 1 - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "tZF" = ( /obj/structure/machinery/light/small{ dir = 8 @@ -69671,6 +70936,17 @@ icon_state = "ai_floors" }, /area/almayer/command/airoom) +"uck" = ( +/obj/structure/surface/rack, +/obj/item/stack/cable_coil, +/obj/item/attachable/flashlight/grip, +/obj/item/ammo_box/magazine/l42a{ + pixel_y = 14 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "ucp" = ( /obj/structure/window/framed/almayer, /turf/open/floor/plating, @@ -69769,6 +71045,10 @@ /obj/structure/machinery/firealarm{ pixel_y = -28 }, +/obj/structure/bed/chair/comfy/delta{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -69812,6 +71092,15 @@ icon_state = "test_floor4" }, /area/almayer/shipboard/brig/evidence_storage) +"ueD" = ( +/obj/structure/machinery/light, +/obj/structure/machinery/cm_vending/gear/commanding_officer{ + pixel_y = 0 + }, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/living/commandbunks) "ueG" = ( /obj/item/bedsheet/orange, /obj/structure/bed{ @@ -70070,11 +71359,13 @@ /turf/open/floor/plating, /area/almayer/engineering/engineering_workshop/hangar) "ukA" = ( -/obj/structure/platform, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 }, -/turf/open/floor/almayer, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "emeraldfull" + }, /area/almayer/living/briefing) "ukS" = ( /obj/structure/disposalpipe/segment{ @@ -70168,6 +71459,10 @@ cell_type = /obj/item/cell/hyper; dir = 1 }, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 + }, /turf/open/floor/almayer{ icon_state = "mono" }, @@ -70190,13 +71485,16 @@ }, /area/almayer/hull/lower_hull/l_f_p) "umY" = ( -/obj/structure/pipes/standard/manifold/hidden/supply{ - dir = 8 +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_x = -1; + pixel_y = 2 }, -/area/almayer/living/port_emb) +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_f_s) "unh" = ( /obj/structure/surface/table/almayer, /obj/item/storage/firstaid/o2, @@ -70525,6 +71823,27 @@ icon_state = "cargo" }, /area/almayer/engineering/upper_engineering) +"utw" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/reagent_container/food/drinks/bottle/whiskey{ + pixel_x = -5; + pixel_y = 16 + }, +/obj/item/reagent_container/food/drinks/bottle/whiskey{ + desc = "A premium double-malt whiskey, this bottle was gifted to the Captain of the USS Almayer after the completion of the ship's space trials by the VADM. himself."; + pixel_x = 3; + pixel_y = 16 + }, +/obj/item/reagent_container/food/drinks/bottle/whiskey{ + pixel_x = 11; + pixel_y = 16 + }, +/obj/item/storage/box/drinkingglasses{ + pixel_x = -1; + pixel_y = 2 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "utK" = ( /obj/structure/machinery/light{ dir = 4 @@ -70637,11 +71956,13 @@ /turf/open/floor/wood/ship, /area/almayer/living/basketball) "uvk" = ( -/obj/structure/closet/firecloset, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "orange" }, -/area/almayer/lifeboat_pumps/south1) +/area/almayer/engineering/upper_engineering/starboard) "uvs" = ( /obj/structure/machinery/conveyor{ id = "lower_garbage" @@ -70717,40 +72038,12 @@ dir = 4 }, /area/almayer/medical/containment/cell) -"uvS" = ( -/obj/structure/surface/rack, -/obj/item/stack/cable_coil, -/obj/item/attachable/flashlight/grip, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "uvY" = ( /turf/open/floor/almayer{ dir = 8; icon_state = "red" }, /area/almayer/shipboard/brig/cells) -"uvZ" = ( -/obj/item/reagent_container/food/drinks/bottle/whiskey{ - desc = "A premium double-malt whiskey, this bottle was gifted to the Captain of the USS Almayer after the completion of the ship's space trials by the VADM. himself."; - pixel_x = 1; - pixel_y = 16 - }, -/obj/item/reagent_container/food/drinks/bottle/whiskey{ - pixel_x = 9; - pixel_y = 16 - }, -/obj/item/reagent_container/food/drinks/bottle/whiskey{ - pixel_x = -7; - pixel_y = 16 - }, -/obj/item/clothing/mask/cigarette/pipe{ - pixel_y = 5 - }, -/obj/structure/surface/table/woodentable/fancy, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "uws" = ( /obj/structure/machinery/light{ dir = 4 @@ -70861,6 +72154,25 @@ icon_state = "dark_sterile" }, /area/almayer/medical/chemistry) +"uzb" = ( +/obj/structure/surface/table/almayer, +/obj/item/device/flashlight/lamp{ + layer = 3.3; + pixel_x = 15 + }, +/obj/item/tool/screwdriver, +/obj/item/bananapeel{ + desc = "An experimental B8 Smart-Scope. Based on the technologies used in the Smart Gun by ARMAT, this sight has integrated IFF systems. It can only attach to the L42A Battle Rifle, M44 Combat Revolver, and M46C Pulse Rifle. This one appears to be covered in gun oil"; + icon = 'icons/obj/items/weapons/guns/attachments.dmi'; + icon_state = "iffbarrel"; + name = "Broken B8 Smart-Scope"; + pixel_x = -3; + pixel_y = 7 + }, +/turf/open/floor/almayer{ + icon_state = "orangefull" + }, +/area/almayer/living/briefing) "uzg" = ( /obj/structure/sign/safety/water{ pixel_x = 8; @@ -71211,7 +72523,7 @@ "uGa" = ( /obj/structure/closet/emcloset, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "cargo" }, /area/almayer/lifeboat_pumps/south2) "uGc" = ( @@ -71262,13 +72574,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_m_s) -"uGz" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/largecrate/random/secure, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "uGQ" = ( /obj/structure/machinery/suit_storage_unit/compression_suit/uscm, /turf/open/floor/almayer{ @@ -71441,6 +72746,14 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/engineering/upper_engineering/starboard) +"uLe" = ( +/obj/structure/pipes/standard/manifold/hidden/supply{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "uLn" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer, @@ -71896,9 +73209,7 @@ /obj/structure/machinery/door/window/tinted{ dir = 2 }, -/turf/open/floor/prison{ - icon_state = "kitchen" - }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/engineering/upper_engineering/port) "uVb" = ( /obj/structure/closet/toolcloset, @@ -71986,15 +73297,9 @@ /area/almayer/hallways/stern_hallway) "uWI" = ( /obj/structure/surface/table/almayer, -/obj/item/ashtray/plastic, -/obj/item/trash/cigbutt{ - pixel_x = 1; +/obj/item/pizzabox/margherita{ pixel_y = 8 }, -/obj/item/reagent_container/food/drinks/cans/souto/diet/cherry{ - pixel_x = -9; - pixel_y = 12 - }, /turf/open/floor/almayer{ dir = 1; icon_state = "green" @@ -72098,6 +73403,17 @@ /obj/structure/window/framed/almayer, /turf/open/floor/plating, /area/almayer/hallways/repair_bay) +"uZX" = ( +/obj/structure/surface/table/almayer, +/obj/item/paper{ + pixel_x = -4; + pixel_y = 5 + }, +/obj/item/tool/pen, +/turf/open/floor/almayer{ + icon_state = "bluefull" + }, +/area/almayer/living/briefing) "uZZ" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/generic{ name = "\improper Basketball Court" @@ -72116,6 +73432,15 @@ }, /turf/closed/wall/almayer, /area/almayer/hallways/starboard_umbilical) +"vba" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/engineering/upper_engineering/port) "vbf" = ( /obj/structure/machinery/landinglight/ds2/delaytwo{ dir = 8 @@ -72633,6 +73958,19 @@ icon_state = "plating" }, /area/almayer/shipboard/port_missiles) +"vjn" = ( +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_21" + }, +/obj/structure/sign/poster/io{ + name = "propaganda poster"; + pixel_y = 32 + }, +/obj/structure/sign/safety/escapepod{ + pixel_x = -17 + }, +/turf/open/floor/wood/ship, +/area/almayer/command/corporateliason) "vjx" = ( /obj/structure/largecrate/random/barrel/yellow, /turf/open/floor/almayer{ @@ -72727,6 +74065,15 @@ icon_state = "test_floor4" }, /area/almayer/shipboard/brig/general_equipment) +"vkN" = ( +/obj/structure/bed/chair/comfy/charlie{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "vkR" = ( /obj/structure/machinery/power/apc/almayer{ dir = 1 @@ -72775,7 +74122,9 @@ dir = 4 }, /obj/structure/pipes/standard/simple/hidden/supply, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + icon_state = "plate" + }, /area/almayer/living/briefing) "vlX" = ( /obj/structure/machinery/cm_vending/sorted/cargo_guns/squad_prep, @@ -72890,19 +74239,25 @@ }, /area/almayer/lifeboat_pumps/south1) "vpt" = ( -/obj/structure/bed/chair/comfy/bravo{ - dir = 1 +/obj/structure/surface/table/almayer, +/obj/item/paper_bin/uscm{ + pixel_x = 9; + pixel_y = 6 }, -/obj/structure/sign/poster{ - desc = "YOU ALWAYS KNOW A WORKING JOE. YOU ALWAYS KNOW A WORKING JOE. YOU ALWAYS KNOW A WORKING JOE. YOU ALWAYS KNOW A WORKING JOE. YOU ALWAYS KNOW A WORKING JOE."; - icon_state = "poster11"; - name = "YOU ALWAYS KNOW A WORKING JOE."; - pixel_x = 27; - serial_number = 11 +/obj/item/tool/pen{ + pixel_x = 9; + pixel_y = 2 + }, +/obj/item/tool/pen{ + pixel_x = 9; + pixel_y = 9 + }, +/obj/structure/prop/holidays/string_lights{ + dir = 8; + pixel_x = 29 }, -/obj/item/stack/folding_barricade, /turf/open/floor/almayer{ - icon_state = "orangefull" + icon_state = "plate" }, /area/almayer/living/briefing) "vpI" = ( @@ -73154,6 +74509,12 @@ icon_state = "rasputin3" }, /area/almayer/powered/agent) +"vtt" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "vtx" = ( /obj/structure/machinery/door/airlock/almayer/generic{ name = "\improper Bathroom" @@ -73176,14 +74537,6 @@ icon_state = "test_floor4" }, /area/almayer/hallways/port_hallway) -"vtT" = ( -/obj/structure/pipes/standard/manifold/hidden/supply, -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" - }, -/turf/open/floor/almayer, -/area/almayer/command/cichallway) "vub" = ( /turf/closed/wall/almayer, /area/almayer/shipboard/sea_office) @@ -73448,12 +74801,15 @@ /turf/open/floor/almayer, /area/almayer/engineering/upper_engineering/port) "vyU" = ( -/obj/structure/bed/chair/comfy/charlie, /obj/structure/machinery/light{ dir = 4 }, +/obj/structure/bed/chair/comfy/charlie{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ - icon_state = "emeraldfull" + icon_state = "plate" }, /area/almayer/living/briefing) "vzl" = ( @@ -73629,6 +74985,14 @@ icon_state = "green" }, /area/almayer/shipboard/brig/cells) +"vCz" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 2 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/lifeboat_pumps/north1) "vCG" = ( /obj/structure/toilet{ dir = 8 @@ -73661,11 +75025,15 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/living/synthcloset) "vEn" = ( -/obj/structure/bed/chair/comfy/bravo{ - dir = 1 +/obj/structure/surface/table/almayer, +/obj/item/device/flashlight/lamp{ + layer = 3.3; + pixel_x = 15 }, -/obj/item/stack/sheet/mineral/uranium{ - layer = 2.99 +/obj/item/paper, +/obj/item/tool/pen{ + pixel_x = -5; + pixel_y = 2 }, /turf/open/floor/almayer{ icon_state = "orangefull" @@ -73783,6 +75151,16 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/almayer, /area/almayer/living/port_emb) +"vHl" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/command/lifeboat) "vHq" = ( /obj/item/device/assembly/mousetrap/armed, /obj/structure/pipes/standard/manifold/hidden/supply{ @@ -74443,6 +75821,7 @@ /obj/structure/machinery/firealarm{ pixel_y = 28 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -74875,18 +76254,15 @@ /area/almayer/hallways/aft_hallway) "wbe" = ( /obj/structure/surface/table/almayer, -/obj/effect/landmark/map_item{ - layer = 3.03; - pixel_x = 7; - pixel_y = 4 - }, -/obj/item/prop/helmetgarb/spacejam_tickets{ +/obj/item/reagent_container/food/drinks/coffeecup{ pixel_x = -8; - pixel_y = 5 + pixel_y = -1 }, -/obj/item/prop/helmetgarb/spacejam_tickets{ - pixel_x = -8; - pixel_y = -3 +/obj/item/reagent_container/food/drinks/coffee{ + pixel_y = 9 + }, +/obj/item/tool/pen{ + pixel_x = 5 }, /turf/open/floor/almayer{ icon_state = "plate" @@ -74922,6 +76298,40 @@ icon_state = "mono" }, /area/almayer/living/pilotbunks) +"wbw" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/light{ + dir = 8 + }, +/obj/item/clothing/mask/cigarette/pipe{ + layer = 2.8; + pixel_y = -7 + }, +/obj/item/reagent_container/spray/cleaner{ + layer = 3.04; + pixel_x = -4; + pixel_y = 7 + }, +/obj/structure/machinery/door_control/brbutton{ + id = "Brig Lockdown Shutters"; + name = "Brig Lockdown"; + pixel_x = -12; + pixel_y = 26 + }, +/obj/structure/machinery/door_control/brbutton{ + id = "ARES StairsLock"; + name = "ARES Exterior Lockdown Override"; + pixel_x = -2; + pixel_y = 26 + }, +/obj/structure/machinery/door_control/brbutton{ + id = "ARES Emergency"; + name = "ARES Emergency Lockdown Override"; + pixel_x = 8; + pixel_y = 26 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "wbx" = ( /obj/structure/sign/safety/hazard{ desc = "A sign that warns of a hazardous environment nearby"; @@ -75144,6 +76554,27 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_m_p) +"wfd" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/tool/stamp/hop{ + name = "Commanding Officer's rubber stamp"; + pixel_x = -5; + pixel_y = 9 + }, +/obj/item/paper_bin/uscm{ + pixel_x = 7; + pixel_y = 6 + }, +/obj/item/tool/pen/red/clicky{ + pixel_x = -6; + pixel_y = 3 + }, +/obj/item/tool/pen/blue/clicky{ + pixel_x = -6; + pixel_y = -3 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "wft" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -75292,6 +76723,19 @@ icon_state = "mono" }, /area/almayer/lifeboat_pumps/south1) +"wiF" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/structure/machinery/photocopier{ + anchored = 0 + }, +/obj/structure/sign/poster/io{ + name = "propaganda poster"; + pixel_y = 32 + }, +/turf/open/floor/wood/ship, +/area/almayer/command/corporateliason) "wiG" = ( /obj/structure/sign/poster{ pixel_x = -30; @@ -75514,6 +76958,16 @@ }, /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/south2) +"wlH" = ( +/obj/structure/surface/table/almayer, +/obj/structure/machinery/computer/emails{ + pixel_x = 2; + pixel_y = 5 + }, +/turf/open/floor/almayer{ + icon_state = "emeraldfull" + }, +/area/almayer/living/briefing) "wlK" = ( /obj/effect/decal/warning_stripes{ icon_state = "N"; @@ -75653,6 +77107,13 @@ icon_state = "rasputin3" }, /area/almayer/powered/agent) +"wpj" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 2 + }, +/turf/open/floor/almayer, +/area/almayer/hull/upper_hull/u_f_p) "wpw" = ( /obj/structure/bed/chair/comfy/ares{ dir = 1 @@ -75784,29 +77245,31 @@ /turf/open/floor/almayer, /area/almayer/shipboard/brig/cic_hallway) "wsP" = ( -/obj/structure/platform{ - dir = 1 - }, /obj/item/prop/helmetgarb/gunoil{ layer = 4.2; pixel_x = -3; - pixel_y = 1 + pixel_y = 6 }, /obj/item/prop/helmetgarb/gunoil{ layer = 4.2; pixel_x = -10; - pixel_y = 1 + pixel_y = 10 }, /obj/item/prop/helmetgarb/gunoil{ layer = 4.2; pixel_x = 4; - pixel_y = 1 + pixel_y = 9 }, /obj/item/weapon/broken_bottle{ - pixel_x = 11; - pixel_y = -2 + layer = 4.51; + pixel_x = 9; + pixel_y = 1 + }, +/obj/structure/surface/table/almayer, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" }, -/turf/open/floor/almayer, /area/almayer/living/briefing) "wsR" = ( /obj/structure/machinery/door/firedoor/border_only/almayer, @@ -75814,12 +77277,6 @@ icon_state = "test_floor4" }, /area/almayer/squads/bravo) -"wta" = ( -/obj/structure/closet/crate, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "wtd" = ( /obj/structure/machinery/vending/coffee, /obj/item/toy/bikehorn/rubberducky{ @@ -75947,13 +77404,8 @@ }, /area/almayer/living/synthcloset) "wwk" = ( -/obj/structure/bed/chair/comfy/bravo{ - dir = 1 - }, -/obj/item/stack/folding_barricade, -/obj/item/stack/sheet/mineral/uranium{ - layer = 2.99 - }, +/obj/structure/surface/table/almayer, +/obj/effect/landmark/map_item, /turf/open/floor/almayer{ icon_state = "orangefull" }, @@ -76085,9 +77537,7 @@ }, /obj/effect/landmark/late_join/working_joe, /obj/effect/landmark/start/working_joe, -/turf/open/floor/almayer/no_build{ - icon_state = "ai_floors" - }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/command/airoom) "wyO" = ( /obj/structure/largecrate/random/barrel/red, @@ -76159,12 +77609,32 @@ }, /area/almayer/hallways/port_hallway) "wAU" = ( -/obj/structure/bed/chair/comfy/delta, /obj/structure/sign/poster/music{ pixel_x = -27 }, +/obj/structure/surface/table/almayer, +/obj/effect/decal/cleanable/dirt, +/obj/item/device/flashlight/lamp{ + pixel_x = 15 + }, +/obj/item/paper_bin/uscm{ + pixel_x = -7; + pixel_y = 6 + }, +/obj/item/tool/pen{ + pixel_x = -10; + pixel_y = -1 + }, +/obj/item/tool/pen{ + pixel_x = 3; + pixel_y = -4 + }, +/obj/item/tool/pen{ + pixel_x = -11; + pixel_y = 5 + }, /turf/open/floor/almayer{ - icon_state = "bluefull" + icon_state = "plate" }, /area/almayer/living/briefing) "wBY" = ( @@ -76547,6 +78017,11 @@ "wJH" = ( /turf/closed/wall/almayer/research/containment/wall/east, /area/almayer/medical/containment/cell/cl) +"wJL" = ( +/turf/open/floor/almayer{ + icon_state = "bluefull" + }, +/area/almayer/living/briefing) "wKn" = ( /obj/structure/surface/rack, /obj/item/facepaint/sniper, @@ -76578,6 +78053,15 @@ }, /turf/open/floor/plating, /area/almayer/medical/containment) +"wKS" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + dir = 6; + icon_state = "red" + }, +/area/almayer/command/lifeboat) "wLi" = ( /obj/structure/machinery/door_control/airlock{ id = "s_engi"; @@ -76676,9 +78160,13 @@ }, /area/almayer/medical/containment) "wLV" = ( -/obj/structure/bed/chair/comfy/charlie, +/obj/structure/machinery/vending/cola{ + density = 0; + pixel_y = 16 + }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ - icon_state = "emeraldfull" + icon_state = "plate" }, /area/almayer/living/briefing) "wMm" = ( @@ -77206,6 +78694,14 @@ /obj/structure/machinery/light{ dir = 8 }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "S"; + pixel_y = -1 + }, /turf/open/floor/almayer{ icon_state = "dark_sterile" }, @@ -77328,6 +78824,15 @@ }, /turf/open/floor/plating, /area/almayer/engineering/ce_room) +"wYZ" = ( +/obj/structure/machinery/door/airlock/almayer/secure/reinforced{ + name = "\improper Armourer's Workshop"; + req_access = null + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/hull/upper_hull/u_m_s) "wZa" = ( /turf/open/floor/almayer{ icon_state = "redcorner" @@ -77658,6 +79163,16 @@ icon_state = "plating" }, /area/almayer/hallways/vehiclehangar) +"xgE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/toolbox/mechanical{ + pixel_x = 4; + pixel_y = -3 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "xgJ" = ( /obj/structure/machinery/cm_vending/sorted/medical/blood, /obj/structure/machinery/light{ @@ -77686,9 +79201,6 @@ desc = "A supply crate containing everything you need to stop a CLF uprising."; name = "\improper USCM crate 'FOB supplies'" }, -/obj/structure/sign/arcturianstopsign{ - pixel_y = 32 - }, /obj/item/folded_tent/big{ pixel_x = -6; pixel_y = 10 @@ -77780,10 +79292,14 @@ /area/almayer/living/grunt_rnr) "xjw" = ( /obj/structure/pipes/standard/simple/hidden/supply{ - dir = 9 + dir = 4 }, -/turf/open/floor/prison{ - icon_state = "kitchen" +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" }, /area/almayer/engineering/upper_engineering/port) "xjz" = ( @@ -77862,6 +79378,14 @@ icon_state = "emerald" }, /area/almayer/hallways/port_hallway) +"xkY" = ( +/obj/structure/bed/chair/comfy/alpha{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "xlk" = ( /obj/structure/surface/table/almayer, /turf/open/floor/almayer, @@ -77968,6 +79492,12 @@ /obj/effect/landmark/start/requisition, /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/req) +"xnQ" = ( +/obj/structure/closet/secure_closet/fridge/meat/stock, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/grunt_rnr) "xnR" = ( /obj/structure/machinery/door/airlock/almayer/maint{ dir = 1; @@ -78129,9 +79659,13 @@ /turf/closed/wall/almayer, /area/almayer/command/securestorage) "xqM" = ( -/obj/structure/platform, /obj/structure/pipes/vents/pump, -/turf/open/floor/almayer, +/obj/structure/bed/chair/comfy/delta{ + dir = 8 + }, +/turf/open/floor/almayer{ + icon_state = "bluefull" + }, /area/almayer/living/briefing) "xqS" = ( /obj/effect/decal/warning_stripes{ @@ -78604,9 +80138,6 @@ /turf/open/floor/plating, /area/almayer/hull/upper_hull/u_a_p) "xzp" = ( -/obj/structure/bed/chair/comfy/bravo{ - dir = 1 - }, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 }, @@ -78623,6 +80154,18 @@ }, /turf/open/floor/almayer, /area/almayer/shipboard/brig/cells) +"xzB" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/bed/chair/comfy/delta{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "xAe" = ( /turf/closed/wall/almayer/research/containment/wall/corner, /area/almayer/medical/containment/cell) @@ -78654,9 +80197,7 @@ /area/almayer/squads/req) "xAC" = ( /obj/structure/surface/rack, -/turf/open/floor/prison{ - icon_state = "kitchen" - }, +/turf/open/floor/plating/plating_catwalk, /area/almayer/engineering/upper_engineering/port) "xAI" = ( /obj/structure/platform{ @@ -78683,6 +80224,12 @@ "xBe" = ( /turf/closed/wall/almayer/reinforced, /area/almayer/engineering/upper_engineering) +"xBg" = ( +/obj/structure/machinery/light{ + dir = 4 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "xBn" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/lifeboat/blastdoor{ id_tag = "Boat1-D3"; @@ -78783,20 +80330,22 @@ }, /area/almayer/command/airoom) "xDQ" = ( -/obj/structure/platform, -/obj/item/trash/USCMtray{ - pixel_y = 4 +/obj/structure/surface/table/almayer, +/obj/item/reagent_container/food/snacks/mre_pack/xmas3{ + pixel_x = 5 }, -/obj/item/trash/USCMtray{ - pixel_y = 6 +/obj/item/reagent_container/food/snacks/mre_pack/xmas2{ + pixel_x = 5; + pixel_y = 9 }, -/obj/item/trash/USCMtray{ - pixel_y = 8 +/obj/effect/landmark/map_item{ + layer = 3.03; + pixel_x = -7; + pixel_y = 4 }, -/obj/item/trash/USCMtray{ - pixel_y = 10 +/turf/open/floor/almayer{ + icon_state = "plate" }, -/turf/open/floor/almayer, /area/almayer/living/briefing) "xEc" = ( /turf/open/floor/almayer{ @@ -78947,6 +80496,25 @@ icon_state = "red" }, /area/almayer/living/briefing) +"xGL" = ( +/obj/structure/surface/table/almayer, +/obj/effect/decal/cleanable/dirt, +/obj/item/paper_bin/uscm{ + pixel_x = 9; + pixel_y = 6 + }, +/obj/item/tool/pen{ + pixel_x = 9; + pixel_y = 2 + }, +/obj/item/tool/pen{ + pixel_x = 9; + pixel_y = 9 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "xHe" = ( /obj/structure/pipes/vents/pump{ dir = 4 @@ -79058,7 +80626,7 @@ "xJn" = ( /obj/structure/closet/emcloset, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "cargo" }, /area/almayer/engineering/upper_engineering/starboard) "xJC" = ( @@ -79301,13 +80869,20 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_m_s) "xPR" = ( -/obj/structure/platform{ - dir = 1 - }, /obj/structure/pipes/vents/scrubber{ dir = 4 }, -/turf/open/floor/almayer, +/obj/structure/surface/table/almayer, +/obj/structure/machinery/computer/emails{ + dir = 1 + }, +/obj/item/reagent_container/food/snacks/grown/banana{ + pixel_x = 18; + pixel_y = 5 + }, +/turf/open/floor/almayer{ + icon_state = "orangefull" + }, /area/almayer/living/briefing) "xPZ" = ( /obj/structure/pipes/standard/simple/hidden/supply{ @@ -79838,11 +81413,6 @@ icon_state = "redfull" }, /area/almayer/command/cic) -"xZz" = ( -/obj/structure/surface/table/almayer, -/obj/structure/machinery/faxmachine/uscm/command/capt, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "xZI" = ( /obj/structure/prop/invuln/lattice_prop{ dir = 1; @@ -80036,6 +81606,10 @@ icon_state = "plate" }, /area/almayer/engineering/upper_engineering/port) +"ydr" = ( +/obj/structure/largecrate/supply/weapons/pistols, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_m_s) "ydx" = ( /obj/structure/sign/safety/hvac_old{ pixel_x = 8; @@ -80105,17 +81679,6 @@ icon_state = "plate" }, /area/almayer/command/lifeboat) -"yeo" = ( -/obj/structure/machinery/cm_vending/clothing/dress{ - req_access = list(1) - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) -"yev" = ( -/obj/item/device/flashlight/lamp/green, -/obj/structure/surface/table/woodentable/fancy, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) "yeH" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer, @@ -80144,6 +81707,16 @@ icon_state = "plate" }, /area/almayer/hallways/hangar) +"yeO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "yeP" = ( /obj/structure/sign/safety/hvac_old{ pixel_x = 8; @@ -80227,6 +81800,10 @@ }, /area/almayer/command/lifeboat) "ygs" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_y = 1 + }, /obj/structure/machinery/door/airlock/almayer/generic{ name = "\improper Bathroom" }, @@ -80306,6 +81883,17 @@ }, /turf/open/floor/almayer, /area/almayer/engineering/engineering_workshop/hangar) +"yiL" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + freerange = 1; + name = "General Listening Channel"; + pixel_y = -28 + }, +/turf/open/floor/almayer, +/area/almayer/hull/upper_hull/u_f_s) "yiW" = ( /obj/structure/machinery/cryopod/right{ layer = 3.1; @@ -80380,6 +81968,16 @@ icon_state = "cargo" }, /area/almayer/hull/lower_hull/l_m_s) +"ykD" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "red" + }, +/area/almayer/command/lifeboat) "ykF" = ( /obj/structure/machinery/cm_vending/sorted/tech/tool_storage, /turf/open/floor/almayer{ @@ -80431,9 +82029,9 @@ }, /area/almayer/squads/delta) "ylg" = ( -/obj/structure/machinery/cryopod, -/turf/open/floor/almayer/no_build{ - icon_state = "ai_floors" +/obj/structure/machinery/cryopod/right, +/turf/open/floor/almayer{ + icon_state = "cargo" }, /area/almayer/command/airoom) "ylJ" = ( @@ -89048,7 +90646,7 @@ tak tak bvx xys -ldu +qan eRL eRL mLJ @@ -93408,7 +95006,7 @@ poR mGL pNp kcp -bTS +pNK bIA alU uDn @@ -93816,9 +95414,9 @@ bTS lxo qcy kcp -bAg edM -egq +edM +mcl bLt bXX bKh @@ -94019,9 +95617,9 @@ oQM aqI aqI kcp -bzA -bBB -bBB +pUl +tXz +rYZ bLu bBB bBB @@ -98812,7 +100410,7 @@ vCO vCO vCO jxB -gpe +wpj gDq tJo bGr @@ -99015,9 +100613,9 @@ wmT jhW mWD jxB -fGN -dtN -gpe +hWX +tYv +mRU xuB gpe xEF @@ -99178,7 +100776,7 @@ aad aai aai pCi -lFb +nMM avl avl agj @@ -99220,7 +100818,7 @@ aES aES aES aES -gpe +lDj uEv gpe xEF @@ -99380,19 +100978,19 @@ aaa aad ahE iuT -naf -lFb +nna +svp avl agj agj -aew -bCO -hvH -hvH -hvH +wbw +npK +hBW +tHU +tMu kcN -cod -oqA +dkn +gye aic aov wVW @@ -99583,19 +101181,19 @@ aaa aad ahE afc -avl -lFb +npB +umY avl agj -yeo +laG agc -bIz +aUP agc -hvH -lQq +ktc +ueD kcN cod -oqA +gye aic aov wVW @@ -99788,18 +101386,18 @@ ahE aiV wBY hJJ -qCi +anl agj -eBo +fuR +ouT agc agc -agc -ahY -mXj -kcN +ktc +nKs kcN -agj -amI +muQ +gye +aic aKq luZ alX @@ -99991,16 +101589,16 @@ pCi kwS avl avl -lIh +yiL agj -oMM -agc -agc -glU -rDd +utw +kmY +pSH +mES +lWD mXj -akk -alb +kcN +kcN agj aic aKq @@ -100196,14 +101794,14 @@ avl hCo lIh agj -kFk +fiP hvH +pYp hvH hvH -ahZ -mXj -akl -alc +iIm +odC +cQD agj bFA aov @@ -100399,16 +101997,16 @@ avl hMI lFb agj +mcK +xBg +pYp +isu +oBW mXj -mXj -aoZ -aha -mXj -mXj -akm -mXj +drp +tqI agj -aox +aic aoA wVW teY @@ -100593,7 +102191,7 @@ bdH aaa aaa bdH -aaa +bdH aaa aad ahE @@ -100603,13 +102201,13 @@ iDT tDx agj mXj -tZB -hvH -hvH -hvH -adv -hvH -alj +mXj +nRQ +mXj +mXj +mXj +mXj +mXj agj aic aov @@ -100796,7 +102394,7 @@ bdH bdH bdH aaa -aaa +bdH aaa aad pCi @@ -100805,16 +102403,16 @@ dTt jgM lFb agj -eYC -agc -fNb -eSJ -agc -agc -hvH -alo +mXj +yeO +nQH +lnZ +lnZ +pxL +mzG +mXj agj -aic +amI aov wVW wVW @@ -101008,17 +102606,17 @@ avl jpJ lzH agj -uvZ -agc -agc -juN -pxG -agc -ocs +iET +akr +lfT +jNY agc +jCn +kmY +rEJ agj aic -aov +esy wVW asQ awG @@ -101211,17 +102809,17 @@ avl llM lGL agj -geW -erZ -tMn -iVZ -aiW -aiW -akn -xyk -sBF -amY -vtT +jPn +hvH +agc +euM +pxG +klG +agc +agc +agj +aic +cHA wVW nww atN @@ -101414,17 +103012,17 @@ avl avl mrc agj -cCd -agc -agc -nwv -pxG -agc -ako +huR +hvH +gfK +rqH agc -agj -aic -aov +nnG +xyk +xyk +oys +nDV +joE wVW qyJ qEk @@ -101617,16 +103215,16 @@ pCi jTi nRq agj -bYd +wfd +hvH agc -qck -yev +pJe +pxG +vtt agc agc -akp -hGB agj -aic +lPG aov wVW qyJ @@ -101820,14 +103418,14 @@ pCi avl myn agj -mXj -tZB +rfv hvH -ahv -aiF -aiF -akr -xZz +qck +jEX +agc +ssn +mES +lUw agj aic aov @@ -102024,13 +103622,13 @@ cnX lIh agj mXj -tQM -lue -ahw -aiG -aiG -aks -alu +xBg +hvH +hvH +bVg +hvH +pJK +mXj agj aic aoA @@ -103471,7 +105069,7 @@ aGV rvA aKE awF -cST +iYR aUw aUm aET @@ -104448,8 +106046,8 @@ bdH bdH aaC abw -adQ -awW +aee +avd acW awW auK @@ -104507,8 +106105,8 @@ mlz sOy baw sgU -baw -svp +xVF +njD trb aaC bdH @@ -104651,8 +106249,8 @@ bdH aaa aaY abw -adZ -awW +aec +avd acW awW avc @@ -104710,8 +106308,8 @@ fDS iLd baw sgU -baw -uvk +xVF +dLz trb aaC bdH @@ -104855,7 +106453,7 @@ aaa aaY abs adq -add +ckE ajI add fsU @@ -104913,7 +106511,7 @@ qys gBW aJU tiW -aJU +hXD pgD tQV aaY @@ -105991,7 +107589,7 @@ bsk sxu cBI bkA -bcB +nuI bej arX vSG @@ -106292,7 +107890,7 @@ awW awW awW fSm -atW +vCz apl bbL bbL @@ -106495,7 +108093,7 @@ ajf ajf ajf oAO -heH +dlN aod qgG amC @@ -106698,7 +108296,7 @@ awW awW awW aSJ -tsv +dAi dtM aii mce @@ -111093,8 +112691,8 @@ bJt xOL gGI eeu -nbB -ksA +dqQ +ccm gAz fiq uaa @@ -111496,7 +113094,7 @@ buH bHL buH lhB -nbB +tAJ bDs bIJ bDs @@ -111801,7 +113399,7 @@ kSJ avj cGr awE -fUn +vjn wQv rne guC @@ -112116,7 +113714,7 @@ jFE jFE idx hAz -fhQ +hQh bJt vhI oed @@ -112315,11 +113913,11 @@ vzP bJt hjB bJt -dpn +neF bDs gSk bDs -pdt +khX bJt kTq oed @@ -112928,7 +114526,7 @@ rBj bDs gSk bDs -oMd +hWS bJt oDf uqH @@ -113131,7 +114729,7 @@ bJt oKb gSk bDs -pdt +ign bJt sIx bxX @@ -113736,7 +115334,7 @@ qBM wXI nUd lkd -oMd +xnQ bDs gSk oDE @@ -114236,7 +115834,7 @@ ajr aii avm awE -hfm +wiF rne rne fAo @@ -114713,8 +116311,8 @@ wsP izr aSh ccF -tGG -tGG +rFV +iXR bdg aLG awb @@ -114744,12 +116342,12 @@ buH hOR buH bdg -sNI +cxZ wAU diw -csG -sNI -wNT +tSv +cxZ +ffl wbe bdd qXo @@ -114911,13 +116509,13 @@ hhw umv hhw bdd -bqZ -kbV -tGG -tGG -tGG +hjT +jZr tGG +fHe tGG +sBs +iXR bdg aLG aYO @@ -114947,13 +116545,13 @@ buH bHL buH bdg -sNI -sNI -sNI -sNI +cxZ +hnH +kXH +kfG dkH cKX -bqZ +oqP bdd tLc rsM @@ -115115,12 +116713,12 @@ aSm eoM bdd vTt -kbV -tGG -tGG -tGG -tGG +tgE +tgE +fNu tGG +gmp +iXR bdg aLG aYO @@ -115150,13 +116748,13 @@ buH bHL buH bdg -sNI +cxZ csG sNI -sNI +mgR gNi -wNT -cab +wJL +oMC bdd hxZ rsM @@ -115309,7 +116907,7 @@ kxd viu nsY iIP -nna +kxd dDt nsY xiz @@ -115317,14 +116915,14 @@ aSm aSm kOf bdd -bDQ -kbV -tGG +dYH +bDP +tgE okB -tGG +tgE crK -tGG -bdg +xkY +bdd beB aYT beB @@ -115352,11 +116950,11 @@ bCx buH bHL buH -bdg -sNI -sNI -sNI -sNI +bdd +qWy +uZX +wJL +wJL eCS xqM udV @@ -115512,20 +117110,20 @@ vHq vvY nsY pPV -umY -npB +bxC +jiU nsY glr mhl aSm ylY bdd -bqZ qgw -beH -qMR +qgw +qgw +tMc vlR -dRT +uLe qin pmv tBF @@ -115556,13 +117154,13 @@ bFu omW bFu hLS -eBg -eBg -eBg -eBg -fOk +vKe +vKe +sgE +ljz +xzB epq -bqZ +fCt bdd hTf rKO @@ -115926,18 +117524,18 @@ pOB hfk aLf bdd -bqZ +gVm kKL -aLJ -eBg +gOm +hFX dAO cEG -ckE +vKe dYX tBF lBz aLG -iuy +bdg bqZ beH bgO @@ -115962,13 +117560,13 @@ buH uXu bFu iUk -eBg +cIl gkJ -eBg -eBg +vKe +cum mVZ kTx -bqZ +jIG bdd hTf wRO @@ -116129,14 +117727,14 @@ lQu lQu aSm bdd -bDQ +iFG iWE jUo -wmz -wmz +iXd +iXd wwk -wmz -bdg +hMJ +bdd aLG awb aLG @@ -116164,14 +117762,14 @@ bdg buH hOR buH -bdg +bdd wLV nza -wLV -wLV -wLV +mwz +mwz +mwz ukA -bqZ +jIG bdd gKB rsM @@ -116332,13 +117930,13 @@ yfy ugV vUi bdd -vTt -kbV +jEI +iXd xzp vEn wmz -wmz -wmz +npS +qsa bdg aLG aYO @@ -116368,13 +117966,13 @@ bGe bHL buH bdg -wLV -wLV -wLV -wLV -gKH +kxF +elX +gAj +bHS +aLA ldj -cab +oMC bdd sOt cNX @@ -116535,13 +118133,13 @@ aLf qce aSm bdd -bqZ +gcw xPR nIW +uzb wmz -wmz -wmz -wmz +idJ +qsa bdg beB aYT @@ -116571,13 +118169,13 @@ bJz bHT bJz bdg -wLV -wLV -nMM -wLV -wLV -wNT -udV +kxF +lad +thE +hIt +gAj +wlH +sGX bdd pEl roU @@ -116740,11 +118338,11 @@ qEW bdd gGo mLb -wmz +qmB vpt kQU -wmz -wmz +rdb +kQU bdg aLG aYO @@ -116777,8 +118375,8 @@ bdg gKH cgz vyU -wLV -wLV +xGL +vkN xDQ bXc bdd @@ -117655,7 +119253,7 @@ abg caF aar aar -tiM +wYZ aar aar ael @@ -117857,10 +119455,10 @@ bWs abg caF aar -nuY +rcW sTB -uaZ -bUA +jrV +qmr ael afE agT @@ -118060,9 +119658,9 @@ acO aJs cbN aar -sTB +lDK aap -aao +eXU vFb ael afH @@ -118263,10 +119861,10 @@ pNQ abx hTy aar -teB +pJn aao aao -wta +erz ael afI agY @@ -118466,10 +120064,10 @@ acP bUE qFQ aar -aao +jBY aap aao -sTB +mYX ael afJ agY @@ -118669,10 +120267,10 @@ acG abx caF aar -aap +ydr aap aao -sTB +mYX ael afK ahc @@ -118874,7 +120472,7 @@ lCz aar tAV sTB -uvS +uck wKn ael afL @@ -119075,7 +120673,7 @@ acG abx caF aar -tiM +wYZ aar aar aar @@ -119280,8 +120878,8 @@ arJ aar aao aao -uGz -uGz +rOZ +dfP adO afM fpR @@ -119481,10 +121079,10 @@ jSY abx hTy aar -wFm -tQE +lAj aao -sTB +aao +xgE adO afN ahh @@ -119684,10 +121282,10 @@ acP bUE qFQ aar -aap -aap +jkL +iaE aao -fZF +mXa adO afO ahh @@ -119887,10 +121485,10 @@ aJa abg ccf aar -tDA -aao +cRg +uaZ aap -fZF +epK adO jkj ahh @@ -121500,7 +123098,7 @@ aag aag abh acx -aeC +adQ ajs aeC wXh @@ -121560,7 +123158,7 @@ eyG kpo vcE kUV -vcE +mvH rRq uOi aag @@ -121703,7 +123301,7 @@ aah aah abi acE -aeA +adZ ajk aeA asY @@ -121763,7 +123361,7 @@ deg wLu lJY xVS -lJY +fqg uGa uyC aah @@ -121906,7 +123504,7 @@ bdH bdH abi acT -aeA +adZ ajk aeA atp @@ -121966,7 +123564,7 @@ pfH wlF lJY xVS -lJY +fqg mIA uyC bdH @@ -130882,7 +132480,7 @@ cxo jWh uUV rsW -rsW +djN fnQ jWh lbB @@ -131084,7 +132682,7 @@ xct cxo jWh dkS -rsW +vba naQ fnQ jWh @@ -131267,7 +132865,7 @@ ptK dmQ psm psm -eky +qyH arV wZX eky @@ -131281,7 +132879,7 @@ aDQ eky wZX arV -eky +dtv vuv vuv cxo @@ -131470,7 +133068,7 @@ dmQ aeq psm aNe -eky +hiN arV wZX eky @@ -131484,7 +133082,7 @@ aHe eky wZX arV -eky +fXM aNe vuv ahb @@ -131673,7 +133271,7 @@ dmQ jXY psm atY -aMT +qkj aMT svl pzJ @@ -131687,7 +133285,7 @@ qDt pzJ sQO aMT -aMT +rWF atY vuv woM @@ -131876,7 +133474,7 @@ dmQ atD psm psm -aRp +vHl aRp jBX akS @@ -132306,7 +133904,7 @@ qMu qMu qMu euY -vME +iuw jHL wOK uIv @@ -132475,7 +134073,7 @@ cuC riJ kHY uhM -fcP +uvk xJn cuC aag @@ -132509,7 +134107,7 @@ aag aag bYn tAh -thV +bfe rDb qjV rID @@ -132712,7 +134310,7 @@ mNX qOk bYn bYn -tjj +qQL kHS rID bYn @@ -133909,7 +135507,7 @@ xVk aad jbq qtR -avu +jWC eky eky nJu @@ -133917,7 +135515,7 @@ aNl eky eky eky -aMU +aDc qtR jbq ajZ @@ -136142,7 +137740,7 @@ xVk aad jbq aNe -avu +jWC eky eky esT @@ -136150,7 +137748,7 @@ nYE orH eky eky -aMU +aDc aNe jbq ajZ @@ -136345,7 +137943,7 @@ xVk aad jbq atY -avu +jWC eky eky bAe @@ -136353,7 +137951,7 @@ aBG sGh eky eky -aMU +aDc atY jbq ajZ @@ -136548,7 +138146,7 @@ xVk aad aPw qpU -aqJ +ykD dqj eky xaS @@ -136556,7 +138154,7 @@ ejt mPf eky gUV -aqp +wKS qpU aPw ajZ @@ -139849,7 +141447,7 @@ lmz daz czG ylg -ylg +oIY daz daz daz diff --git a/maps/map_files/Whiskey_Outpost_v2/Whiskey_Outpost_v2.dmm b/maps/map_files/Whiskey_Outpost_v2/Whiskey_Outpost_v2.dmm index 36c8e9abe717..917759783a2a 100644 --- a/maps/map_files/Whiskey_Outpost_v2/Whiskey_Outpost_v2.dmm +++ b/maps/map_files/Whiskey_Outpost_v2/Whiskey_Outpost_v2.dmm @@ -2220,9 +2220,6 @@ icon_state = "floor_plate" }, /area/whiskey_outpost/inside/living) -"hP" = ( -/turf/open/space/basic, -/area/whiskey_outpost/inside/caves) "hQ" = ( /turf/open/floor/prison{ icon_state = "floor_plate" @@ -22778,7 +22775,7 @@ mT mT mT mT -hP +mT mT mT dl @@ -23177,12 +23174,12 @@ mT mT mT mT -hP mT mT mT mT -hP +mT +mT mT mT qz diff --git a/maps/map_files/generic/Admin_level.dmm b/maps/map_files/generic/Admin_level.dmm index 43b3d26ec3f9..d085d7a99b0c 100644 --- a/maps/map_files/generic/Admin_level.dmm +++ b/maps/map_files/generic/Admin_level.dmm @@ -12,7 +12,7 @@ /turf/open/floor/wood/ship, /area/adminlevel/ert_station) "ad" = ( -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -27,7 +27,7 @@ id = "tdome_observer"; name = "\improper Observer Shutters" }, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -63,7 +63,7 @@ /obj/effect/decal/warning_stripes{ icon_state = "W" }, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -72,7 +72,7 @@ /obj/effect/decal/warning_stripes{ icon_state = "E" }, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -83,7 +83,7 @@ id = "tdome_t2"; name = "\improper Team 2 Shutters" }, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ icon_state = "test_floor4" }, /area/tdome) @@ -101,7 +101,7 @@ /turf/open/space, /area/space) "aE" = ( -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 1; icon_state = "w-y0" }, @@ -683,7 +683,7 @@ /obj/item/device/binoculars{ pixel_y = 4 }, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -896,7 +896,7 @@ }, /area/adminlevel/ert_station/shuttle_dispatch) "wj" = ( -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 1; icon_state = "w-y2" }, @@ -921,7 +921,7 @@ /area/adminlevel/ert_station) "wv" = ( /obj/structure/machinery/vending/snack, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -1147,7 +1147,7 @@ /obj/effect/decal/warning_stripes{ icon_state = "E" }, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -1163,7 +1163,7 @@ /obj/structure/flora/pottedplant{ icon_state = "pottedplant_20" }, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -1277,13 +1277,13 @@ /turf/open/floor/plating/almayer, /area/adminlevel/ert_station/shuttle_dispatch) "DV" = ( -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ icon_state = "tcomms" }, /area/tdome) "Ee" = ( /obj/effect/landmark/thunderdome/one, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -1375,7 +1375,7 @@ "Fw" = ( /obj/structure/surface/table/almayer, /obj/item/storage/fancy/cigar, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -1639,7 +1639,7 @@ /turf/closed/wall/mineral/gold, /area/adminlevel/ert_station) "Kq" = ( -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ icon_state = "redfull" }, /area/tdome/tdome2) @@ -1738,7 +1738,7 @@ /obj/structure/disposalpipe/trunk{ dir = 4 }, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -1871,7 +1871,7 @@ /area/adminlevel/ert_station) "NU" = ( /obj/structure/machinery/vending/cola, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -1937,7 +1937,7 @@ /obj/effect/decal/warning_stripes{ icon_state = "W" }, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -1967,13 +1967,13 @@ /area/adminlevel/simulation) "PF" = ( /obj/effect/landmark/thunderdome/two, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, /area/tdome/tdome2) "PJ" = ( -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 1; icon_state = "w-y1" }, @@ -2041,7 +2041,7 @@ /area/adminlevel/ert_station) "QL" = ( /obj/structure/bed/chair/comfy/black, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ icon_state = "tcomms" }, /area/tdome/tdomeobserve) @@ -2095,7 +2095,7 @@ id = "tdome_t1"; name = "\improper Team 1 Shutters" }, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ icon_state = "test_floor4" }, /area/tdome) @@ -2165,7 +2165,7 @@ name = "Observer Shutters"; pixel_y = 9 }, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -2313,7 +2313,7 @@ /area/adminlevel/ert_station) "VD" = ( /obj/structure/machinery/vending/cigarette/free, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -2483,7 +2483,7 @@ }, /area/adminlevel/ert_station) "YP" = ( -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -2498,7 +2498,7 @@ /turf/open/floor/plating/plating_catwalk, /area/adminlevel/ert_station) "Zd" = ( -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ icon_state = "bluefull" }, /area/tdome/tdome1) diff --git a/maps/shuttles/dropship_alamo.dmm b/maps/shuttles/dropship_alamo.dmm index 7c49edfdd0d2..6cd6922c22b0 100644 --- a/maps/shuttles/dropship_alamo.dmm +++ b/maps/shuttles/dropship_alamo.dmm @@ -217,8 +217,9 @@ }, /area/shuttle/drop1/sulaco) "rS" = ( -/obj/structure/machinery/door/airlock/dropship_hatch{ - id = "port_door" +/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds1{ + id = "port_door"; + dir = 2 }, /turf/open/shuttle/dropship{ icon_state = "rasputin15" @@ -481,8 +482,8 @@ }, /area/shuttle/drop1/sulaco) "Pf" = ( -/obj/structure/machinery/door/airlock/dropship_hatch{ - dir = 8; +/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds1{ + dir = 1; id = "starboard_door" }, /turf/open/shuttle/dropship{ @@ -675,7 +676,7 @@ hG Et iI JP -rS +il rS mW qn @@ -859,7 +860,7 @@ zS iv zV MP -Pf +il Pf nC nE diff --git a/maps/shuttles/dropship_normandy.dmm b/maps/shuttles/dropship_normandy.dmm index f1595cd97db9..a2847ae62611 100644 --- a/maps/shuttles/dropship_normandy.dmm +++ b/maps/shuttles/dropship_normandy.dmm @@ -350,8 +350,8 @@ /turf/template_noop, /area/shuttle/drop2/sulaco) "En" = ( -/obj/structure/machinery/door/airlock/dropship_hatch/two{ - dir = 8; +/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds2{ + dir = 1; id = "starboard_door" }, /turf/open/shuttle/dropship{ @@ -583,8 +583,9 @@ /turf/template_noop, /area/shuttle/drop2/sulaco) "SC" = ( -/obj/structure/machinery/door/airlock/dropship_hatch/two{ - id = "port_door" +/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds2{ + id = "port_door"; + dir = 2 }, /turf/open/shuttle/dropship{ icon_state = "rasputin15" @@ -708,7 +709,7 @@ eu OI GE lJ -SC +PJ SC jc pU @@ -892,7 +893,7 @@ wX fI fx Tp -En +PJ En gG RG diff --git a/maps/sorokyne_strata.json b/maps/sorokyne_strata.json index 61c3a7fd3f69..5a0f6d67c410 100644 --- a/maps/sorokyne_strata.json +++ b/maps/sorokyne_strata.json @@ -11,6 +11,7 @@ "/datum/equipment_preset/survivor/scientist/soro", "/datum/equipment_preset/survivor/doctor/soro", "/datum/equipment_preset/survivor/engineer/soro", + "/datum/equipment_preset/survivor/corporate/soro", "/datum/equipment_preset/survivor/security/soro", "/datum/equipment_preset/survivor/interstellar_human_rights_observer/soro" ], diff --git a/sound/vehicles/Dropships/single_alarm_brr_dropship_1.ogg b/sound/vehicles/Dropships/single_alarm_brr_dropship_1.ogg new file mode 100644 index 000000000000..9fe0b4c11da1 Binary files /dev/null and b/sound/vehicles/Dropships/single_alarm_brr_dropship_1.ogg differ diff --git a/sound/weapons/gun_xm88_directhit_high.ogg b/sound/weapons/gun_xm88_directhit_high.ogg new file mode 100644 index 000000000000..6db42f73cf0e Binary files /dev/null and b/sound/weapons/gun_xm88_directhit_high.ogg differ diff --git a/sound/weapons/gun_xm88_directhit_low.ogg b/sound/weapons/gun_xm88_directhit_low.ogg new file mode 100644 index 000000000000..c516f4fc2650 Binary files /dev/null and b/sound/weapons/gun_xm88_directhit_low.ogg differ diff --git a/sound/weapons/gun_xm88_directhit_medium.ogg b/sound/weapons/gun_xm88_directhit_medium.ogg new file mode 100644 index 000000000000..106fd23cb981 Binary files /dev/null and b/sound/weapons/gun_xm88_directhit_medium.ogg differ diff --git a/tgui/packages/tgui-panel/settings/reducer.js b/tgui/packages/tgui-panel/settings/reducer.js index 42d799fd6597..0c93a5b94d4e 100644 --- a/tgui/packages/tgui-panel/settings/reducer.js +++ b/tgui/packages/tgui-panel/settings/reducer.js @@ -16,7 +16,7 @@ const initialState = { fontFamily: FONTS[0], lineHeight: 1.2, theme: 'light', - adminMusicVolume: 0.5, + adminMusicVolume: 0.2, // Keep these two state vars for compatibility with other servers highlightText: '', highlightColor: '#ffdd44', diff --git a/tgui/packages/tgui-panel/styles/goon/chat-dark.scss b/tgui/packages/tgui-panel/styles/goon/chat-dark.scss index 835a94341708..b4e59f32c121 100644 --- a/tgui/packages/tgui-panel/styles/goon/chat-dark.scss +++ b/tgui/packages/tgui-panel/styles/goon/chat-dark.scss @@ -956,10 +956,6 @@ em { color: #844300; } -.sentryradio { - color: #844300; -} - .medradio { color: #008160; } diff --git a/tgui/packages/tgui/constants.js b/tgui/packages/tgui/constants.js index 3d7530e7ead8..0ec51380a322 100644 --- a/tgui/packages/tgui/constants.js +++ b/tgui/packages/tgui/constants.js @@ -80,153 +80,233 @@ export const CSS_COLORS = [ export const RADIO_CHANNELS = [ { name: 'Yautja', - freq: 1214, + freq: 1205, color: '#1ecc43', }, { - name: 'PMC', - freq: 1235, + name: "Dutch's Dozen", + freq: 1210, color: '#1ecc43', }, + { + name: 'VAI', + freq: 1215, + color: '#e3580e', + }, + { + name: 'CMB', + freq: 1220, + color: '#1b748c', + }, { name: 'WY', - freq: 1236, - color: '#1ecc43', + freq: 1231, + color: '#fe9b24', }, { - name: "Dutch's Dozen", - freq: 1340, - color: '#1ecc43', + name: 'PMC CMD', + freq: 1232, + color: '#4dc5ce', }, { - name: 'VAI', - freq: 1218, - color: '#1ecc43', + name: 'PMC', + freq: 1233, + color: '#4dc5ce', }, { - name: 'ERT', - freq: 1342, - color: '#1ecc43', + name: 'PMC ENG', + freq: 1234, + color: '#4dc5ce', + }, + { + name: 'PMC MED', + freq: 1235, + color: '#4dc5ce', + }, + { + name: 'PMC CCT', + freq: 1236, + color: '#4dc5ce', + }, + { + name: 'Deathsquad', + freq: 1239, + color: '#fe9b24', }, { name: 'UPP', - freq: 1338, - color: '#1ecc43', + freq: 1251, + color: '#8f4a4b', + }, + { + name: 'UPP CMD', + freq: 1252, + color: '#8f4a4b', + }, + { + name: 'UPP ENG', + freq: 1253, + color: '#8f4a4b', + }, + { + name: 'UPP MED', + freq: 1254, + color: '#8f4a4b', + }, + { + name: 'UPP CCT', + freq: 1255, + color: '#8f4a4b', + }, + { + name: 'UPP KDO', + freq: 1259, + color: '#8f4a4b', }, { name: 'CLF', - freq: 1339, - color: '#1ecc43', + freq: 1271, + color: '#8e83ca', }, { - name: 'Deathsquad', - freq: 1344, + name: 'CLF CMD', + freq: 1272, + color: '#8e83ca', + }, + { + name: 'CLF ENG', + freq: 1273, + color: '#8e83ca', + }, + { + name: 'CLF MED', + freq: 1274, + color: '#8e83ca', + }, + { + name: 'CLF CCT', + freq: 1275, + color: '#8e83ca', + }, + { + name: 'LSTN BUG A', + freq: 1290, + color: '#d65d95', + }, + { + name: 'LSTN BUG B', + freq: 1291, + color: '#d65d95', + }, + { + name: 'Common', + freq: 1461, color: '#1ecc43', }, { - name: 'ARES', - freq: 1447, + name: 'Colony', + freq: 1469, color: '#1ecc43', }, { name: 'High Command', - freq: 1240, - color: '#1ecc43', + freq: 1471, + color: '#318779', }, { - name: 'CCT', - freq: 1350, - color: '#1ecc43', + name: 'SOF', + freq: 1472, + color: '#318779', + }, + { + name: 'Provost', + freq: 1473, + color: '#9b0612', + }, + { + name: 'Sentry', + freq: 1480, + color: '#844300', }, { name: 'Command', - freq: 1353, - color: '#1ecc43', + freq: 1481, + color: '#779cc2', }, { name: 'Medsci', - freq: 1355, - color: '#1ecc43', + freq: 1482, + color: '#008160', }, { name: 'Engineering', - freq: 1357, - color: '#1ecc43', + freq: 1483, + color: '#a66300', }, { name: 'MP', - freq: 1359, - color: '#1ecc43', + freq: 1484, + color: '#a52929', }, { name: 'Req', - freq: 1354, - color: '#1ecc43', + freq: 1485, + color: '#ba8e41', }, { name: 'JTAC', - freq: 1358, - color: '#1ecc43', + freq: 1486, + color: '#ad3b98', }, { name: 'Intel', - freq: 1356, - color: '#1ecc43', + freq: 1487, + color: '#027d02', }, { name: 'Alamo', - freq: 1441, + freq: 1488, color: '#1ecc43', }, { name: 'Normandy', - freq: 1443, + freq: 1489, color: '#1ecc43', }, { name: 'Alpha', - freq: 1449, - color: '#1ecc43', + freq: 1491, + color: '#db2626', }, { name: 'Bravo', - freq: 1451, - color: '#1ecc43', - }, - { - name: 'Common', - freq: 1461, - color: '#1ecc43', + freq: 1492, + color: '#c68610', }, { - name: 'Colony', - freq: 1469, - color: '#1ecc43', - }, - { - name: 'MARSOC', - freq: 1241, - color: '#1ecc43', + name: 'Charlie', + freq: 1493, + color: '#aa55aa', }, { - name: 'Reserves', - freq: 1457, - color: '#1ecc43', + name: 'Delta', + freq: 1494, + color: '#007fcf', }, { name: 'Echo', - freq: 1456, - color: '#1ecc43', + freq: 1495, + color: '#3eb489', }, { - name: 'Delta', - freq: 1455, - color: '#1ecc43', + name: 'Reserves', + freq: 1496, + color: '#ad6d48', }, { - name: 'Charlie', - freq: 1453, - color: '#1ecc43', + name: 'ARES', + freq: 1500, + color: '#ff00ff', }, ]; diff --git a/tgui/packages/tgui/interfaces/CanvasLayer.js b/tgui/packages/tgui/interfaces/CanvasLayer.js new file mode 100644 index 000000000000..e647ae765b1c --- /dev/null +++ b/tgui/packages/tgui/interfaces/CanvasLayer.js @@ -0,0 +1,311 @@ +import { Box, Icon, Tooltip } from '../components'; +import { Component, createRef } from 'inferno'; + +// this file should probably not be in interfaces, should move it later. +export class CanvasLayer extends Component { + constructor(props) { + super(props); + this.canvasRef = createRef(); + + // color selection + // using this.state prevents unpredictable behavior + this.state = { + selection: this.props.selection, + mapLoad: true, + }; + + // needs to be of type png of jpg + this.img = null; + this.imageSrc = this.props.imageSrc; + + // stores the stacked lines + this.lineStack = []; + + // stores the individual line drawn + this.currentLine = []; + + this.ctx = null; + this.isPainting = false; + this.lastX = null; + this.lastY = null; + + this.complexity = 0; + } + + componentDidMount() { + this.ctx = this.canvasRef.current.getContext('2d'); + this.ctx.lineWidth = 4; + this.ctx.lineCap = 'round'; + + this.img = new Image(); + + this.img.src = this.imageSrc; + + this.img.onload = () => { + this.setState({ mapLoad: true }); + }; + + this.img.onerror = () => { + this.setState({ mapLoad: false }); + }; + + this.drawCanvas(); + } + + handleMouseDown = (e) => { + this.isPainting = true; + + const rect = this.canvasRef.current.getBoundingClientRect(); + const x = e.clientX - rect.left; + const y = e.clientY - rect.top; + + this.ctx.beginPath(); + this.ctx.moveTo(this.lastX, this.lastY); + this.lastX = x; + this.lastY = y; + }; + + handleMouseMove = (e) => { + if (!this.isPainting || !this.state.selection) { + return; + } + if (e.buttons === 0) { + // We probably dragged off the window - lets not get stuck drawing + this.handleMouseUp(e); + return; + } + + this.ctx.strokeStyle = this.state.selection; + + const rect = this.canvasRef.current.getBoundingClientRect(); + const x = e.clientX - rect.left; + const y = e.clientY - rect.top; + + if (this.lastX !== null && this.lastY !== null) { + // this controls how often we make new strokes + if (Math.abs(this.lastX - x) + Math.abs(this.lastY - y) < 20) { + return; + } + + this.ctx.moveTo(this.lastX, this.lastY); + this.ctx.lineTo(x, y); + this.ctx.stroke(); + this.currentLine.push([ + this.lastX, + this.lastY, + x, + y, + this.ctx.strokeStyle, + ]); + } + + this.lastX = x; + this.lastY = y; + }; + + handleMouseUp = (e) => { + if ( + this.isPainting && + this.state.selection && + this.lastX !== null && + this.lastY !== null + ) { + const rect = this.canvasRef.current.getBoundingClientRect(); + const x = e.clientX - rect.left; + const y = e.clientY - rect.top; + + this.ctx.moveTo(this.lastX, this.lastY); + this.ctx.lineTo(x, y); + this.ctx.stroke(); + this.currentLine.push([ + this.lastX, + this.lastY, + x, + y, + this.ctx.strokeStyle, + ]); + } + + this.isPainting = false; + this.lastX = null; + this.lastY = null; + + if (this.currentLine.length === 0) { + return; + } + + this.lineStack.push([...this.currentLine]); + this.currentLine = []; + this.complexity = this.getComplexity(); + this.props.onDraw(); + }; + + handleSelectionChange = () => { + const { selection } = this.props; + + if (selection === 'clear') { + this.ctx.clearRect( + 0, + 0, + this.canvasRef.current.width, + this.canvasRef.current.height + ); + this.ctx.drawImage( + this.img, + 0, + 0, + this.canvasRef.current.width, + this.canvasRef.current.height + ); + + this.lineStack = []; + this.complexity = 0; + return; + } + + if (selection === 'undo') { + if (this.lineStack.length === 0) { + return; + } + + const line = this.lineStack.pop(); + if (line.length === 0) { + return; + } + + const prevColor = line[0][4]; + + this.ctx.clearRect( + 0, + 0, + this.canvasRef.current.width, + this.canvasRef.current.height + ); + this.ctx.drawImage( + this.img, + 0, + 0, + this.canvasRef.current.width, + this.canvasRef.current.height + ); + this.ctx.globalCompositeOperation = 'source-over'; + + this.lineStack.forEach((currentLine) => { + currentLine.forEach(([lastX, lastY, x, y, colorSelection]) => { + this.ctx.strokeStyle = colorSelection; + this.ctx.beginPath(); + this.ctx.moveTo(lastX, lastY); + this.ctx.lineTo(x, y); + this.ctx.stroke(); + }); + }); + + this.complexity = this.getComplexity(); + this.setState({ selection: prevColor }); + this.props.onUndo(prevColor); + return; + } + + if (selection === 'export') { + const svgData = this.convertToSVG(); + this.props.onImageExport(svgData); + return; + } + + this.setState({ selection: selection }); + }; + + componentDidUpdate(prevProps) { + if (prevProps.actionQueueChange !== this.props.actionQueueChange) { + this.handleSelectionChange(); + } + } + + drawCanvas() { + this.img.onload = () => { + // this onload may or may not be causing problems. + this.ctx.drawImage( + this.img, + 0, + 0, + this.canvasRef.current?.width, + this.canvasRef.current?.height + ); + }; + } + + convertToSVG() { + const lines = this.lineStack.flat(); + const combinedArray = lines.flatMap( + ([lastX, lastY, x, y, colorSelection]) => [ + lastX, + lastY, + x, + y, + colorSelection, + ] + ); + return combinedArray; + } + + getComplexity() { + let count = 0; + this.lineStack.forEach((item) => { + count += item.length; + }); + return count; + } + + displayCanvas() { + return ( +
    + {this.complexity > 500 && ( + + + + )} + this.handleMouseDown(e)} + onMouseUp={(e) => this.handleMouseUp(e)} + onMouseMove={(e) => this.handleMouseMove(e)} + /> +
    + ); + } + + displayLoading() { + return ( +
    + +

    + Please wait a few minutes before attempting to access the canvas. +

    +
    +
    + ); + } + + render() { + if (this.state.mapLoad) { + return this.displayCanvas(); + } else { + // edge case where a new user joins and tries to draw on the canvas before they cached the png + return this.displayLoading(); + } + } +} diff --git a/tgui/packages/tgui/interfaces/DrawnMap.js b/tgui/packages/tgui/interfaces/DrawnMap.js new file mode 100644 index 000000000000..cd5a9539f847 --- /dev/null +++ b/tgui/packages/tgui/interfaces/DrawnMap.js @@ -0,0 +1,110 @@ +import { Box } from '../components'; +import { Component, createRef } from 'inferno'; + +export class DrawnMap extends Component { + constructor(props) { + super(props); + this.containerRef = createRef(); + this.flatImgSrc = this.props.flatImage; + this.backupImgSrc = this.props.backupImage; + this.state = { + mapLoad: true, + loadingBackup: true, + }; + this.img = null; + this.svg = this.props.svgData; + } + + componentDidMount() { + this.img = new Image(); + this.img.src = this.flatImgSrc; + this.img.onload = () => { + this.setState({ mapLoad: true }); + }; + + this.img.onerror = () => { + this.img.src = this.backupImgSrc; + this.setState({ mapLoad: false }); + }; + + const backupImg = new Image(); + backupImg.src = this.backupImgSrc; + backupImg.onload = () => { + this.setState({ loadingBackup: false }); + }; + } + + parseSvgData(svgDataArray) { + if (!svgDataArray) return null; + let lines = []; + for (let i = 0; i < svgDataArray.length; i += 5) { + const x1 = svgDataArray[i]; + const y1 = svgDataArray[i + 1]; + const x2 = svgDataArray[i + 2]; + const y2 = svgDataArray[i + 3]; + const stroke = svgDataArray[i + 4]; + lines.push({ x1, y1, x2, y2, stroke }); + } + return lines; + } + + getSize() { + const ratio = Math.min( + (self.innerWidth - 50) / 650, + (self.innerHeight - 150) / 600 + ); + return { width: 650 * ratio, height: 600 * ratio }; + } + + render() { + const parsedSvgData = this.parseSvgData(this.svg); + const size = this.getSize(); + + return ( +
    + {this.state.loadingBackup && !this.state.mapLoad && ( + +

    Loading map...

    +
    + )} + {this.img && this.state.mapLoad && ( + + )} + {parsedSvgData && this.state.mapLoad && ( + + {parsedSvgData.map((line, index) => ( + + ))} + + )} +
    + ); + } +} diff --git a/tgui/packages/tgui/interfaces/DropshipFlightControl.tsx b/tgui/packages/tgui/interfaces/DropshipFlightControl.tsx index 65a67524f5b4..4c1c463e65dd 100644 --- a/tgui/packages/tgui/interfaces/DropshipFlightControl.tsx +++ b/tgui/packages/tgui/interfaces/DropshipFlightControl.tsx @@ -23,6 +23,8 @@ interface DropshipNavigationProps extends NavigationProps { primary_lz?: string; automated_control: AutomatedControl; has_flyby_skill: 0 | 1; + + playing_launch_announcement_alarm: boolean; } const DropshipDoorControl = (_, context) => { @@ -42,7 +44,10 @@ const DropshipDoorControl = (_, context) => { + ); +}; + +const PlayLaunchAnnouncementAlarm = (_, context) => { + const { act } = useBackend(context); + return ( + + ); +}; + +const LaunchAnnouncementAlarm = (_, context) => { + const { data, act } = useBackend(context); + const [siteselection, setSiteSelection] = useSharedState( + context, + 'target_site', + undefined + ); + return ( +
    + ) : ( + + ) + } + /> + ); +}; + const RenderScreen = (props, context) => { const { data } = useBackend(context); return ( @@ -292,6 +344,7 @@ const RenderScreen = (props, context) => { )} {data.door_status.length > 0 && } + {} ); }; diff --git a/tgui/packages/tgui/interfaces/Orbit/helpers.ts b/tgui/packages/tgui/interfaces/Orbit/helpers.ts index a43aaf1ff0b0..9facaf339b29 100644 --- a/tgui/packages/tgui/interfaces/Orbit/helpers.ts +++ b/tgui/packages/tgui/interfaces/Orbit/helpers.ts @@ -31,7 +31,9 @@ export const getDisplayName = (full_name: string, nickname?: string) => { }; /** Returns the display color for certain health percentages */ -export const getHealthColor = (health: number) => { +export const getHealthColor = (health?: number) => { + if (!health) return 'bad'; + switch (true) { case health > HEALTH.Good: return 'good'; diff --git a/tgui/packages/tgui/interfaces/Orbit/index.tsx b/tgui/packages/tgui/interfaces/Orbit/index.tsx index e9e345995271..83dfe3b361b2 100644 --- a/tgui/packages/tgui/interfaces/Orbit/index.tsx +++ b/tgui/packages/tgui/interfaces/Orbit/index.tsx @@ -215,6 +215,8 @@ const ObservableItem = ( const [autoObserve] = useLocalState(context, 'autoObserve', false); + const displayHealth = typeof health === 'number'; + return (
    +
    + + act('selectColor', { color: findColorValue(value) }) + } + onDraw={() => act('onDraw')} + /> +
    + + ); +}; diff --git a/tgui/packages/tgui/styles/interfaces/TacticalMap.scss b/tgui/packages/tgui/styles/interfaces/TacticalMap.scss index 312c9ce262ff..a4ab13451772 100644 --- a/tgui/packages/tgui/styles/interfaces/TacticalMap.scss +++ b/tgui/packages/tgui/styles/interfaces/TacticalMap.scss @@ -9,3 +9,7 @@ margin: 0.5em; text-align: center; } + +.progress-stack { + margin-top: 15px; +} diff --git a/tgui/public/tgui-panel.bundle.css b/tgui/public/tgui-panel.bundle.css index 3cb39fe3dbb8..9a9fc658bc7a 100644 --- a/tgui/public/tgui-panel.bundle.css +++ b/tgui/public/tgui-panel.bundle.css @@ -1,2 +1,2 @@ -html,body{box-sizing:border-box;height:100%;margin:0;font-size:12px}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif}*,*:before,*:after{box-sizing:inherit}h1,h2,h3,h4,h5,h6{display:block;margin:0;padding:6px 0;padding:.5rem 0}h1{font-size:18px;font-size:1.5rem}h2{font-size:16px;font-size:1.333rem}h3{font-size:14px;font-size:1.167rem}h4{font-size:12px;font-size:1rem}td,th{vertical-align:baseline;text-align:left}.candystripe:nth-child(odd){background-color:rgba(0,0,0,.25)}.color-black{color:#1a1a1a !important}.color-white{color:#fff !important}.color-red{color:#df3e3e !important}.color-orange{color:#f37f33 !important}.color-yellow{color:#fbda21 !important}.color-olive{color:#cbe41c !important}.color-green{color:#25ca4c !important}.color-teal{color:#00d6cc !important}.color-blue{color:#2e93de !important}.color-dark-blue{color:#005fa7 !important}.color-violet{color:#7349cf !important}.color-purple{color:#ad45d0 !important}.color-pink{color:#e34da1 !important}.color-brown{color:#b97447 !important}.color-grey{color:#848484 !important}.color-light-grey{color:#b3b3b3 !important}.color-good{color:#68c22d !important}.color-average{color:#f29a29 !important}.color-bad{color:#df3e3e !important}.color-label{color:#8b9bb0 !important}.color-xeno{color:#664573 !important}.color-bg-black{background-color:#000 !important}.color-bg-white{background-color:#d9d9d9 !important}.color-bg-red{background-color:#bd2020 !important}.color-bg-orange{background-color:#d95e0c !important}.color-bg-yellow{background-color:#d9b804 !important}.color-bg-olive{background-color:#9aad14 !important}.color-bg-green{background-color:#1b9638 !important}.color-bg-teal{background-color:#009a93 !important}.color-bg-blue{background-color:#1c71b1 !important}.color-bg-dark-blue{background-color:#003e6e !important}.color-bg-violet{background-color:#552dab !important}.color-bg-purple{background-color:#8b2baa !important}.color-bg-pink{background-color:#cf2082 !important}.color-bg-brown{background-color:#8c5836 !important}.color-bg-grey{background-color:#646464 !important}.color-bg-light-grey{background-color:#919191 !important}.color-bg-good{background-color:#4d9121 !important}.color-bg-average{background-color:#cd7a0d !important}.color-bg-bad{background-color:#bd2020 !important}.color-bg-label{background-color:#657a94 !important}.color-bg-xeno{background-color:#462f4e !important}.debug-layout,.debug-layout *:not(g):not(path){color:rgba(255,255,255,.9) !important;background:transparent !important;outline:1px solid rgba(255,255,255,.5) !important;box-shadow:none !important;filter:none !important}.debug-layout:hover,.debug-layout *:not(g):not(path):hover{outline-color:rgba(255,255,255,.8) !important}.outline-dotted{outline-style:dotted !important}.outline-dashed{outline-style:dashed !important}.outline-solid{outline-style:solid !important}.outline-double{outline-style:double !important}.outline-groove{outline-style:groove !important}.outline-ridge{outline-style:ridge !important}.outline-inset{outline-style:inset !important}.outline-outset{outline-style:outset !important}.outline-color-black{outline:.167rem solid #1a1a1a !important}.outline-color-white{outline:.167rem solid #fff !important}.outline-color-red{outline:.167rem solid #df3e3e !important}.outline-color-orange{outline:.167rem solid #f37f33 !important}.outline-color-yellow{outline:.167rem solid #fbda21 !important}.outline-color-olive{outline:.167rem solid #cbe41c !important}.outline-color-green{outline:.167rem solid #25ca4c !important}.outline-color-teal{outline:.167rem solid #00d6cc !important}.outline-color-blue{outline:.167rem solid #2e93de !important}.outline-color-dark-blue{outline:.167rem solid #005fa7 !important}.outline-color-violet{outline:.167rem solid #7349cf !important}.outline-color-purple{outline:.167rem solid #ad45d0 !important}.outline-color-pink{outline:.167rem solid #e34da1 !important}.outline-color-brown{outline:.167rem solid #b97447 !important}.outline-color-grey{outline:.167rem solid #848484 !important}.outline-color-light-grey{outline:.167rem solid #b3b3b3 !important}.outline-color-good{outline:.167rem solid #68c22d !important}.outline-color-average{outline:.167rem solid #f29a29 !important}.outline-color-bad{outline:.167rem solid #df3e3e !important}.outline-color-label{outline:.167rem solid #8b9bb0 !important}.outline-color-xeno{outline:.167rem solid #664573 !important}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-baseline{text-align:baseline}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-pre{white-space:pre}.text-bold{font-weight:bold}.text-italic{font-style:italic}.text-underline{text-decoration:underline}.BlockQuote{color:#8b9bb0;border-left:.1666666667em solid #8b9bb0;padding-left:.5em;margin-bottom:.5em}.BlockQuote:last-child{margin-bottom:0}.Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.Button:last-child{margin-right:0;margin-bottom:0}.Button .fa,.Button .fas,.Button .far{margin-left:-0.25em;margin-right:-0.25em;min-width:1.333em;text-align:center}.Button--hasContent .fa,.Button--hasContent .fas,.Button--hasContent .far{margin-right:.25em}.Button--hasContent.Button--iconPosition--right .fa,.Button--hasContent.Button--iconPosition--right .fas,.Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.Button--fluid{display:block;margin-left:0;margin-right:0}.Button--circular{border-radius:50%}.Button--compact{padding:0 .25em;line-height:1.333em}.Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.Button--color--black:hover{transition:color 0ms,background-color 0ms}.Button--color--black:focus{transition:color 100ms,background-color 100ms}.Button--color--black:hover,.Button--color--black:focus{background-color:#131313;color:#fff}.Button--color--white{transition:color 50ms,background-color 50ms;background-color:#d9d9d9;color:#000}.Button--color--white:hover{transition:color 0ms,background-color 0ms}.Button--color--white:focus{transition:color 100ms,background-color 100ms}.Button--color--white:hover,.Button--color--white:focus{background-color:#f8f8f8;color:#000}.Button--color--red{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--red:hover{transition:color 0ms,background-color 0ms}.Button--color--red:focus{transition:color 100ms,background-color 100ms}.Button--color--red:hover,.Button--color--red:focus{background-color:#dc4848;color:#fff}.Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#d95e0c;color:#fff}.Button--color--orange:hover{transition:color 0ms,background-color 0ms}.Button--color--orange:focus{transition:color 100ms,background-color 100ms}.Button--color--orange:hover,.Button--color--orange:focus{background-color:#f0853f;color:#fff}.Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.Button--color--yellow:focus{transition:color 100ms,background-color 100ms}.Button--color--yellow:hover,.Button--color--yellow:focus{background-color:#f5d72e;color:#000}.Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#9aad14;color:#fff}.Button--color--olive:hover{transition:color 0ms,background-color 0ms}.Button--color--olive:focus{transition:color 100ms,background-color 100ms}.Button--color--olive:hover,.Button--color--olive:focus{background-color:#c4da2b;color:#fff}.Button--color--green{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--color--green:hover{transition:color 0ms,background-color 0ms}.Button--color--green:focus{transition:color 100ms,background-color 100ms}.Button--color--green:hover,.Button--color--green:focus{background-color:#32c154;color:#fff}.Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#009a93;color:#fff}.Button--color--teal:hover{transition:color 0ms,background-color 0ms}.Button--color--teal:focus{transition:color 100ms,background-color 100ms}.Button--color--teal:hover,.Button--color--teal:focus{background-color:#13c4bc;color:#fff}.Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#1c71b1;color:#fff}.Button--color--blue:hover{transition:color 0ms,background-color 0ms}.Button--color--blue:focus{transition:color 100ms,background-color 100ms}.Button--color--blue:hover,.Button--color--blue:focus{background-color:#3a95d9;color:#fff}.Button--color--dark-blue{transition:color 50ms,background-color 50ms;background-color:#003e6e;color:#fff}.Button--color--dark-blue:hover{transition:color 0ms,background-color 0ms}.Button--color--dark-blue:focus{transition:color 100ms,background-color 100ms}.Button--color--dark-blue:hover,.Button--color--dark-blue:focus{background-color:#135b92;color:#fff}.Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#552dab;color:#fff}.Button--color--violet:hover{transition:color 0ms,background-color 0ms}.Button--color--violet:focus{transition:color 100ms,background-color 100ms}.Button--color--violet:hover,.Button--color--violet:focus{background-color:#7953cc;color:#fff}.Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#8b2baa;color:#fff}.Button--color--purple:hover{transition:color 0ms,background-color 0ms}.Button--color--purple:focus{transition:color 100ms,background-color 100ms}.Button--color--purple:hover,.Button--color--purple:focus{background-color:#ad4fcd;color:#fff}.Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#cf2082;color:#fff}.Button--color--pink:hover{transition:color 0ms,background-color 0ms}.Button--color--pink:focus{transition:color 100ms,background-color 100ms}.Button--color--pink:hover,.Button--color--pink:focus{background-color:#e257a5;color:#fff}.Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#8c5836;color:#fff}.Button--color--brown:hover{transition:color 0ms,background-color 0ms}.Button--color--brown:focus{transition:color 100ms,background-color 100ms}.Button--color--brown:hover,.Button--color--brown:focus{background-color:#b47851;color:#fff}.Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#646464;color:#fff}.Button--color--grey:hover{transition:color 0ms,background-color 0ms}.Button--color--grey:focus{transition:color 100ms,background-color 100ms}.Button--color--grey:hover,.Button--color--grey:focus{background-color:#868686;color:#fff}.Button--color--light-grey{transition:color 50ms,background-color 50ms;background-color:#919191;color:#fff}.Button--color--light-grey:hover{transition:color 0ms,background-color 0ms}.Button--color--light-grey:focus{transition:color 100ms,background-color 100ms}.Button--color--light-grey:hover,.Button--color--light-grey:focus{background-color:#bababa;color:#fff}.Button--color--good{transition:color 50ms,background-color 50ms;background-color:#4d9121;color:#fff}.Button--color--good:hover{transition:color 0ms,background-color 0ms}.Button--color--good:focus{transition:color 100ms,background-color 100ms}.Button--color--good:hover,.Button--color--good:focus{background-color:#6cba39;color:#fff}.Button--color--average{transition:color 50ms,background-color 50ms;background-color:#cd7a0d;color:#fff}.Button--color--average:hover{transition:color 0ms,background-color 0ms}.Button--color--average:focus{transition:color 100ms,background-color 100ms}.Button--color--average:hover,.Button--color--average:focus{background-color:#ed9d35;color:#fff}.Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--bad:hover{transition:color 0ms,background-color 0ms}.Button--color--bad:focus{transition:color 100ms,background-color 100ms}.Button--color--bad:hover,.Button--color--bad:focus{background-color:#dc4848;color:#fff}.Button--color--label{transition:color 50ms,background-color 50ms;background-color:#657a94;color:#fff}.Button--color--label:hover{transition:color 0ms,background-color 0ms}.Button--color--label:focus{transition:color 100ms,background-color 100ms}.Button--color--label:hover,.Button--color--label:focus{background-color:#91a1b3;color:#fff}.Button--color--xeno{transition:color 50ms,background-color 50ms;background-color:#462f4e;color:#fff}.Button--color--xeno:hover{transition:color 0ms,background-color 0ms}.Button--color--xeno:focus{transition:color 100ms,background-color 100ms}.Button--color--xeno:hover,.Button--color--xeno:focus{background-color:#64496d;color:#fff}.Button--color--default{transition:color 50ms,background-color 50ms;background-color:#3e6189;color:#fff}.Button--color--default:hover{transition:color 0ms,background-color 0ms}.Button--color--default:focus{transition:color 100ms,background-color 100ms}.Button--color--default:hover,.Button--color--default:focus{background-color:#5c83b0;color:#fff}.Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--caution:hover{transition:color 0ms,background-color 0ms}.Button--color--caution:focus{transition:color 100ms,background-color 100ms}.Button--color--caution:hover,.Button--color--caution:focus{background-color:#f5d72e;color:#000}.Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--danger:hover{transition:color 0ms,background-color 0ms}.Button--color--danger:focus{transition:color 100ms,background-color 100ms}.Button--color--danger:hover,.Button--color--danger:focus{background-color:#dc4848;color:#fff}.Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#202020;color:#fff;background-color:rgba(32,32,32,0);color:rgba(255,255,255,.5)}.Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.Button--color--transparent:hover,.Button--color--transparent:focus{background-color:#383838;color:#fff}.Button--disabled{background-color:#999 !important}.Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--selected:hover{transition:color 0ms,background-color 0ms}.Button--selected:focus{transition:color 100ms,background-color 100ms}.Button--selected:hover,.Button--selected:focus{background-color:#32c154;color:#fff}.Button--flex{display:inline-flex;flex-direction:column}.Button--flex--fluid{width:100%}.Button--verticalAlignContent--top{justify-content:flex-start}.Button--verticalAlignContent--middle{justify-content:center}.Button--verticalAlignContent--bottom{justify-content:flex-end}.Button__content{display:block;align-self:stretch}.ColorBox{display:inline-block;width:1em;height:1em;line-height:1em;text-align:center}.Dimmer{display:flex;justify-content:center;align-items:center;position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.75);z-index:1}.Divider--horizontal{margin:.5em 0}.Divider--horizontal:not(.Divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Divider--vertical{height:100%;margin:0 .5em}.Divider--vertical:not(.Divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Dropdown{position:relative}.Dropdown__control{position:relative;display:inline-block;font-family:Verdana,sans-serif;font-size:1em;width:8.3333333333em;line-height:1.4166666667em;user-select:none}.Dropdown__arrow-button{float:right;padding-left:.35em;width:1.2em;height:1.8333333333em;border-left:.0833333333em solid #000;border-left:.0833333333em solid rgba(0,0,0,.25)}.Dropdown__menu{position:absolute;overflow-y:auto;z-index:5;width:8.3333333333em;max-height:16.6666666667em;overflow-y:scroll;border-radius:0 0 .1666666667em .1666666667em;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75)}.Dropdown__menu-noscroll{position:absolute;overflow-y:auto;z-index:5;width:8.3333333333em;max-height:16.6666666667em;border-radius:0 0 .1666666667em .1666666667em;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75)}.Dropdown__menuentry{padding:.1666666667em .3333333333em;font-family:Verdana,sans-serif;font-size:1em;line-height:1.4166666667em;transition:background-color 100ms ease-out}.Dropdown__menuentry:hover{background-color:rgba(255,255,255,.2);transition:background-color 0ms}.Dropdown__over{top:auto;bottom:100%}.Dropdown__selected-text{display:inline-block;text-overflow:ellipsis;white-space:nowrap;height:1.4166666667em;width:calc(100% - 1.2em)}.Flex{display:-ms-flexbox;display:flex}.Flex--inline{display:inline-flex}.Flex--iefix{display:block}.Flex--iefix.Flex--inline{display:inline-block}.Flex__item--iefix{display:inline-block}.Flex--iefix--column>.Flex__item--iefix{display:block}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:transparent}.Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fff;color:inherit}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input--monospace .Input__input{font-family:"Consolas",monospace}.Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto;margin-bottom:-0.2em;cursor:n-resize}.Knob:after{content:".";color:transparent;line-height:2.5em}.Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.15) 0%, rgba(255, 255, 255, 0) 100%);border-radius:50%;box-shadow:0 .05em .5em 0 rgba(0,0,0,.5)}.Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.Knob__popupValue{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.Knob__ringTrackPivot{transform:rotateZ(135deg)}.Knob__ringTrack{fill:transparent;stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.Knob__ringFillPivot{transform:rotateZ(135deg)}.Knob--bipolar .Knob__ringFillPivot{transform:rotateZ(270deg)}.Knob__ringFill{fill:transparent;stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms ease-out}.Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.Knob--color--white .Knob__ringFill{stroke:#fff}.Knob--color--red .Knob__ringFill{stroke:#df3e3e}.Knob--color--orange .Knob__ringFill{stroke:#f37f33}.Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.Knob--color--green .Knob__ringFill{stroke:#25ca4c}.Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.Knob--color--blue .Knob__ringFill{stroke:#2e93de}.Knob--color--dark-blue .Knob__ringFill{stroke:#005fa7}.Knob--color--violet .Knob__ringFill{stroke:#7349cf}.Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.Knob--color--pink .Knob__ringFill{stroke:#e34da1}.Knob--color--brown .Knob__ringFill{stroke:#b97447}.Knob--color--grey .Knob__ringFill{stroke:#848484}.Knob--color--light-grey .Knob__ringFill{stroke:#b3b3b3}.Knob--color--good .Knob__ringFill{stroke:#68c22d}.Knob--color--average .Knob__ringFill{stroke:#f29a29}.Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.Knob--color--label .Knob__ringFill{stroke:#8b9bb0}.Knob--color--xeno .Knob__ringFill{stroke:#664573}.LabeledList{display:table;width:100%;width:calc(100% + 1em);border-collapse:collapse;border-spacing:0;margin:-0.25em -0.5em;margin-bottom:0;padding:0}.LabeledList__row{display:table-row}.LabeledList__row:last-child .LabeledList__cell{padding-bottom:0}.LabeledList__cell{display:table-cell;margin:0;padding:.25em .5em;border:0;text-align:left}.LabeledList__label--nowrap{width:1%;white-space:nowrap;min-width:5em}.LabeledList__buttons{width:.1%;white-space:nowrap;text-align:right;padding-top:.0833333333em;padding-bottom:0}.Modal{background-color:#202020;max-width:calc(100% - 1rem);padding:1rem}.NoticeBox{padding:.33em .5em;margin-bottom:.5em;box-shadow:none;font-weight:bold;font-style:italic;color:#000;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg, transparent, transparent 0.8333333333em, rgba(0, 0, 0, 0.1) 0.8333333333em, rgba(0, 0, 0, 0.1) 1.6666666667em)}.NoticeBox--color--black{color:#fff;background-color:#000}.NoticeBox--color--white{color:#000;background-color:#b3b3b3}.NoticeBox--color--red{color:#fff;background-color:#701f1f}.NoticeBox--color--orange{color:#fff;background-color:#854114}.NoticeBox--color--yellow{color:#000;background-color:#83710d}.NoticeBox--color--olive{color:#000;background-color:#576015}.NoticeBox--color--green{color:#fff;background-color:#174e24}.NoticeBox--color--teal{color:#fff;background-color:#064845}.NoticeBox--color--blue{color:#fff;background-color:#1b4565}.NoticeBox--color--dark-blue{color:#fff;background-color:#02121f}.NoticeBox--color--violet{color:#fff;background-color:#3b2864}.NoticeBox--color--purple{color:#fff;background-color:#542663}.NoticeBox--color--pink{color:#fff;background-color:#802257}.NoticeBox--color--brown{color:#fff;background-color:#4c3729}.NoticeBox--color--grey{color:#fff;background-color:#3e3e3e}.NoticeBox--color--light-grey{color:#fff;background-color:#6a6a6a}.NoticeBox--color--good{color:#fff;background-color:#2e4b1a}.NoticeBox--color--average{color:#fff;background-color:#7b4e13}.NoticeBox--color--bad{color:#fff;background-color:#701f1f}.NoticeBox--color--label{color:#fff;background-color:#53565a}.NoticeBox--color--xeno{color:#fff;background-color:#19161b}.NoticeBox--type--info{color:#fff;background-color:#235982}.NoticeBox--type--success{color:#fff;background-color:#1e662f}.NoticeBox--type--warning{color:#fff;background-color:#a95219}.NoticeBox--type--danger{color:#fff;background-color:#8f2828}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:transparent}.Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fff;color:inherit}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input--monospace .Input__input{font-family:"Consolas",monospace}.NumberInput{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#88bfff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.NumberInput--fluid{display:block}.NumberInput__content{margin-left:.5em}.NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #88bfff;background-color:#88bfff}.NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-width:.0833333333em !important;border-style:solid !important;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color 900ms ease-out}.ProgressBar__fill{position:absolute;top:-0.5px;left:0px;bottom:-0.5px}.ProgressBar__fill--animated{transition:background-color 900ms ease-out,width 900ms ease-out}.ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.ProgressBar--color--default{border:.0833333333em solid #3e6189}.ProgressBar--color--default .ProgressBar__fill{background-color:#3e6189}.ProgressBar--color--black{border-color:#000 !important}.ProgressBar--color--black .ProgressBar__fill{background-color:#000}.ProgressBar--color--white{border-color:#d9d9d9 !important}.ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.ProgressBar--color--red{border-color:#bd2020 !important}.ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--orange{border-color:#d95e0c !important}.ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.ProgressBar--color--yellow{border-color:#d9b804 !important}.ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.ProgressBar--color--olive{border-color:#9aad14 !important}.ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.ProgressBar--color--green{border-color:#1b9638 !important}.ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.ProgressBar--color--teal{border-color:#009a93 !important}.ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.ProgressBar--color--blue{border-color:#1c71b1 !important}.ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.ProgressBar--color--dark-blue{border-color:#003e6e !important}.ProgressBar--color--dark-blue .ProgressBar__fill{background-color:#003e6e}.ProgressBar--color--violet{border-color:#552dab !important}.ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.ProgressBar--color--purple{border-color:#8b2baa !important}.ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.ProgressBar--color--pink{border-color:#cf2082 !important}.ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.ProgressBar--color--brown{border-color:#8c5836 !important}.ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.ProgressBar--color--grey{border-color:#646464 !important}.ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.ProgressBar--color--light-grey{border-color:#919191 !important}.ProgressBar--color--light-grey .ProgressBar__fill{background-color:#919191}.ProgressBar--color--good{border-color:#4d9121 !important}.ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.ProgressBar--color--average{border-color:#cd7a0d !important}.ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.ProgressBar--color--bad{border-color:#bd2020 !important}.ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--label{border-color:#657a94 !important}.ProgressBar--color--label .ProgressBar__fill{background-color:#657a94}.ProgressBar--color--xeno{border-color:#462f4e !important}.ProgressBar--color--xeno .ProgressBar__fill{background-color:#462f4e}.Section{position:relative;margin-bottom:.5em;background-color:#131313;background-color:#131313;box-sizing:border-box}.Section:last-child{margin-bottom:0}.Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #4972a1}.Section__titleText{font-size:1.1666666667em;font-weight:bold;color:#fff}.Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.Section__rest{position:relative}.Section__content{padding:.66em .5em}.Section--fitted>.Section__rest>.Section__content{padding:0}.Section--fill{display:flex;flex-direction:column;height:100%}.Section--fill>.Section__rest{flex-grow:1}.Section--fill>.Section__rest>.Section__content{height:100%}.Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.Section--fill.Section--iefix{display:table !important;width:100% !important;height:100% !important;border-collapse:collapse;border-spacing:0}.Section--fill.Section--iefix>.Section__rest{display:table-row !important;height:100% !important}.Section--scrollable{overflow-x:hidden;overflow-y:hidden}.Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.Section--scrollableHorizontal{overflow-x:hidden;overflow-y:hidden}.Section--scrollableHorizontal>.Section__rest>.Section__content{overflow-y:hidden;overflow-x:scroll}.Section--scrollable.Section--scrollableHorizontal{overflow-x:hidden;overflow-y:hidden}.Section--scrollable.Section--scrollableHorizontal>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:scroll}.Section .Section{background-color:transparent;margin-left:-0.5em;margin-right:-0.5em}.Section .Section:first-child{margin-top:-0.5em}.Section .Section .Section__titleText{font-size:1.0833333333em}.Section .Section .Section .Section__titleText{font-size:1em}.Slider{cursor:e-resize}.Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none !important}.Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid transparent;border-right:.4166666667em solid transparent;border-bottom:.4166666667em solid #fff}.Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.Divider--horizontal{margin:.5em 0}.Divider--horizontal:not(.Divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Divider--vertical{height:100%;margin:0 .5em}.Divider--vertical:not(.Divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Stack--fill{height:100%}.Stack--horizontal>.Stack__item{margin-left:.5em}.Stack--horizontal>.Stack__item:first-child{margin-left:0}.Stack--vertical>.Stack__item{margin-top:.5em}.Stack--vertical>.Stack__item:first-child{margin-top:0}.Stack--horizontal>.Stack__divider:not(.Stack__divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Stack--vertical>.Stack__divider:not(.Stack__divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Table{display:table;width:100%;border-collapse:collapse;border-spacing:0;margin:0}.Table--collapsing{width:auto}.Table__row{display:table-row}.Table__cell{display:table-cell;padding:0 .25em}.Table__cell:first-child{padding-left:0}.Table__cell:last-child{padding-right:0}.Table__row--header .Table__cell,.Table__cell--header{font-weight:bold;padding-bottom:.5em}.Table__cell--collapsing{width:1%;white-space:nowrap}.Tabs{display:flex;align-items:stretch;overflow:hidden;background-color:#131313}.Tabs--fill{height:100%}.Section .Tabs{background-color:transparent}.Section:not(.Section--fitted) .Tabs{margin:0 -0.5em .5em}.Section:not(.Section--fitted) .Tabs:first-child{margin-top:-0.5em}.Tabs--vertical{flex-direction:column;padding:.25em 0 .25em .25em}.Tabs--horizontal{margin-bottom:.5em;padding:.25em .25em 0 .25em}.Tabs--horizontal:last-child{margin-bottom:0}.Tabs__Tab{flex-grow:0}.Tabs--fluid .Tabs__Tab{flex-grow:1}.Tab{display:flex;align-items:center;justify-content:space-between;background-color:transparent;color:rgba(255,255,255,.5);min-height:2.25em;min-width:4em}.Tab:not(.Tab--selected):hover{background-color:rgba(255,255,255,.075)}.Tab--selected{background-color:rgba(255,255,255,.125);color:#dfe7f0}.Tab__text{flex-grow:1;margin:0 .5em}.Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.Tabs--horizontal .Tab{border-top:.1666666667em solid transparent;border-bottom:.1666666667em solid transparent;border-top-left-radius:.25em;border-top-right-radius:.25em}.Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #d4dfec}.Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid transparent;border-right:.1666666667em solid transparent;border-top-left-radius:.25em;border-bottom-left-radius:.25em}.Tabs--vertical .Tab--selected{border-right:.1666666667em solid #d4dfec}.Tab--selected.Tab--color--black{color:#535353}.Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#1a1a1a}.Tabs--vertical .Tab--selected.Tab--color--black{border-right-color:#1a1a1a}.Tab--selected.Tab--color--white{color:#fff}.Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#fff}.Tabs--vertical .Tab--selected.Tab--color--white{border-right-color:#fff}.Tab--selected.Tab--color--red{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--red{border-right-color:#df3e3e}.Tab--selected.Tab--color--orange{color:#f69f66}.Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#f37f33}.Tabs--vertical .Tab--selected.Tab--color--orange{border-right-color:#f37f33}.Tab--selected.Tab--color--yellow{color:#fce358}.Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#fbda21}.Tabs--vertical .Tab--selected.Tab--color--yellow{border-right-color:#fbda21}.Tab--selected.Tab--color--olive{color:#d8eb55}.Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#cbe41c}.Tabs--vertical .Tab--selected.Tab--color--olive{border-right-color:#cbe41c}.Tab--selected.Tab--color--green{color:#53e074}.Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#25ca4c}.Tabs--vertical .Tab--selected.Tab--color--green{border-right-color:#25ca4c}.Tab--selected.Tab--color--teal{color:#21fff5}.Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00d6cc}.Tabs--vertical .Tab--selected.Tab--color--teal{border-right-color:#00d6cc}.Tab--selected.Tab--color--blue{color:#62aee6}.Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#2e93de}.Tabs--vertical .Tab--selected.Tab--color--blue{border-right-color:#2e93de}.Tab--selected.Tab--color--dark-blue{color:#008ffd}.Tabs--horizontal .Tab--selected.Tab--color--dark-blue{border-bottom-color:#005fa7}.Tabs--vertical .Tab--selected.Tab--color--dark-blue{border-right-color:#005fa7}.Tab--selected.Tab--color--violet{color:#9676db}.Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#7349cf}.Tabs--vertical .Tab--selected.Tab--color--violet{border-right-color:#7349cf}.Tab--selected.Tab--color--purple{color:#c274db}.Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#ad45d0}.Tabs--vertical .Tab--selected.Tab--color--purple{border-right-color:#ad45d0}.Tab--selected.Tab--color--pink{color:#ea79b9}.Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#e34da1}.Tabs--vertical .Tab--selected.Tab--color--pink{border-right-color:#e34da1}.Tab--selected.Tab--color--brown{color:#ca9775}.Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#b97447}.Tabs--vertical .Tab--selected.Tab--color--brown{border-right-color:#b97447}.Tab--selected.Tab--color--grey{color:#a3a3a3}.Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#848484}.Tabs--vertical .Tab--selected.Tab--color--grey{border-right-color:#848484}.Tab--selected.Tab--color--light-grey{color:#c6c6c6}.Tabs--horizontal .Tab--selected.Tab--color--light-grey{border-bottom-color:#b3b3b3}.Tabs--vertical .Tab--selected.Tab--color--light-grey{border-right-color:#b3b3b3}.Tab--selected.Tab--color--good{color:#8cd95a}.Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#68c22d}.Tabs--vertical .Tab--selected.Tab--color--good{border-right-color:#68c22d}.Tab--selected.Tab--color--average{color:#f5b35e}.Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#f29a29}.Tabs--vertical .Tab--selected.Tab--color--average{border-right-color:#f29a29}.Tab--selected.Tab--color--bad{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--bad{border-right-color:#df3e3e}.Tab--selected.Tab--color--label{color:#a8b4c4}.Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#8b9bb0}.Tabs--vertical .Tab--selected.Tab--color--label{border-right-color:#8b9bb0}.Tab--selected.Tab--color--xeno{color:#9366a3}.Tabs--horizontal .Tab--selected.Tab--color--xeno{border-bottom-color:#664573}.Tabs--vertical .Tab--selected.Tab--color--xeno{border-right-color:#664573}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:transparent}.Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fff;color:inherit}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input--monospace .Input__input{font-family:"Consolas",monospace}.TextArea{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.TextArea--fluid{display:block;width:auto;height:auto}.TextArea--noborder{border:0px}.TextArea__textarea.TextArea__textarea--scrollable{overflow:auto;overflow-x:hidden;overflow-y:scroll}.TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:transparent;color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.TextArea__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.TextArea__textarea_custom{overflow:visible;white-space:pre-wrap}.Tooltip{z-index:2;padding:.5em .75em;pointer-events:none;text-align:left;transition:opacity 150ms ease-out;background-color:#000;color:#fff;box-shadow:.1em .1em 1.25em -0.1em rgba(0,0,0,.5);border-radius:.16em;max-width:20.8333333333em}.Chat{color:#abc6ec}.Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:crimson;border-radius:10px;transition:font-size 200ms ease-out}.Chat__badge:before{content:"x"}.Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.Chat__scrollButton{position:fixed;right:2em;bottom:1em}.Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#131313}.Chat__reconnected:after{content:"";display:block;margin-top:-0.75em;border-bottom:.1666666667em solid #db2828}.Chat__highlight{color:#000}.Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:bold}.ChatMessage{word-wrap:break-word}.ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.Ping{position:relative;padding:.125em .25em;border:.0833333333em solid rgba(140,140,140,.5);border-radius:.25em;width:3.75em;text-align:right}.Ping__indicator{content:"";position:absolute;top:.5em;left:.5em;width:.5em;height:.5em;background-color:#888;border-radius:.25em}.Notifications{position:absolute;bottom:1em;left:1em;right:2em}.Notification{color:#fff;background-color:crimson;padding:.5em;margin:1em 0}.Notification:first-child{margin-top:0}.Notification:last-child{margin-bottom:0}.Layout,.Layout *{scrollbar-base-color:#181818;scrollbar-face-color:#363636;scrollbar-3dlight-color:#202020;scrollbar-highlight-color:#202020;scrollbar-track-color:#181818;scrollbar-arrow-color:#909090;scrollbar-shadow-color:#363636}.Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#202020;background-image:linear-gradient(to bottom, #202020 0%, #202020 100%)}.Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.Window__contentPadding:after{height:0}.Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(56,56,56,.25);pointer-events:none}.Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}em{font-style:normal;font-weight:bold}img{margin:0;padding:0;line-height:1;-ms-interpolation-mode:nearest-neighbor;image-rendering:pixelated}img.icon{height:1em;min-height:16px;width:auto;vertical-align:bottom}a{color:#397ea5}a.visited{color:#7c00e6}a:visited{color:#7c00e6}a.popt{text-decoration:none}.popup{position:fixed;top:50%;left:50%;background:#ddd}.popup .close{position:absolute;background:#aaa;top:0;right:0;color:#333;text-decoration:none;z-index:2;padding:0 10px;height:30px;line-height:30px}.popup .close:hover{background:#999}.popup .head{background:#999;color:#ddd;padding:0 10px;height:30px;line-height:30px;text-transform:uppercase;font-size:.9em;font-weight:bold;border-bottom:2px solid green}.popup input{border:1px solid #999;background:#fff;margin:0;padding:5px;outline:none;color:#333}.popup input[type=text]:hover,.popup input[type=text]:active,.popup input[type=text]:focus{border-color:green}.popup input[type=submit]{padding:5px 10px;background:#999;color:#ddd;text-transform:uppercase;font-size:.9em;font-weight:bold}.popup input[type=submit]:hover,.popup input[type=submit]:focus,.popup input[type=submit]:active{background:#aaa;cursor:pointer}.changeFont{padding:10px}.changeFont a{display:block;text-decoration:none;padding:3px;color:#333}.changeFont a:hover{background:#ccc}.highlightPopup{padding:10px;text-align:center}.highlightPopup input[type=text]{display:block;width:215px;text-align:left;margin-top:5px}.highlightPopup input.highlightColor{background-color:#ff0}.highlightPopup input.highlightTermSubmit{margin-top:5px}.contextMenu{background-color:#ddd;position:fixed;margin:2px;width:150px}.contextMenu a{display:block;padding:2px 5px;text-decoration:none;color:#333}.contextMenu a:hover{background-color:#ccc}.filterMessages{padding:5px}.filterMessages div{padding:2px 0}.icon-stack{height:1em;line-height:1em;width:1em;vertical-align:middle;margin-top:-2px}.motd{color:#a4bad6;font-family:Verdana,sans-serif;white-space:normal}.motd h1,.motd h2,.motd h3,.motd h4,.motd h5,.motd h6{color:#a4bad6;text-decoration:underline}.motd a,.motd a:link,.motd a:visited,.motd a:active,.motd a:hover{color:#a4bad6}.bold,.name,.prefix,.ooc,.looc,.adminooc,.admin,.medal,.yell{font-weight:bold}.italic,.italics{font-style:italic}.highlight{background:#ff0}h1,h2,h3,h4,h5,h6{color:#a4bad6;font-family:Georgia,Verdana,sans-serif}h1.alert,h2.alert{color:#a4bad6}em{font-style:normal;font-weight:bold}.ooc{font-weight:bold}.adminobserverooc{color:#09c;font-weight:bold}.adminooc{color:#3d5bc3;font-weight:bold}.adminsay{color:#9611d4;font-weight:bold}.admin{color:#5975da;font-weight:bold}.name{font-weight:bold}.deadsay{color:#e2c1ff}.binarysay{color:#1e90ff}.binarysay a{color:lime}.binarysay a:active,.binarysay a:visited{color:#8f8}.radio{color:#1ecc43}.sciradio{color:#c68cfa}.comradio{color:#fcdf03}.secradio{color:#dd3535}.medradio{color:#57b8f0}.engradio{color:#f37746}.suppradio{color:#b88646}.servradio{color:#6ca729}.syndradio{color:#8f4a4b}.gangradio{color:#ac2ea1}.centcomradio{color:#2681a5}.aiprivradio{color:#d65d95}.redteamradio{color:#f44}.blueteamradio{color:#3434fd}.greenteamradio{color:#34fd34}.yellowteamradio{color:#fdfd34}.yell{font-weight:bold}.alert{color:#d82020}.userdanger{color:#c51e1e;font-weight:bold;font-size:185%}.bolddanger{color:#c51e1e;font-weight:bold}.danger{color:#c51e1e}.warning{color:#c51e1e;font-style:italic}.alertwarning{color:red;font-weight:bold}.boldwarning{color:#c51e1e;font-style:italic;font-weight:bold}.announce{color:#c51e1e;font-weight:bold}.boldannounce{color:#c51e1e;font-weight:bold}.minorannounce{font-weight:bold;font-size:185%}.greenannounce{color:#059223;font-weight:bold}.rose{color:#ff5050}.info{color:#9ab0ff}.notice{color:#6685f5}.staff_ic{color:#6685f5}.tinynotice{color:#6685f5;font-size:85%}.tinynoticeital{color:#6685f5;font-style:italic;font-size:85%}.smallnotice{color:#6685f5;font-size:90%}.smallnoticeital{color:#6685f5;font-style:italic;font-size:90%}.boldnotice{color:#6685f5;font-weight:bold}.hear{color:#6685f5;font-style:italic}.adminnotice{color:#6685f5}.adminhelp{color:red;font-weight:bold}.unconscious{color:#a4bad6;font-weight:bold}.suicide{color:#ff5050;font-style:italic}.green{color:#059223}.grey{color:#838383}.red{color:red}.blue{color:#215cff}.nicegreen{color:#059223}.boldnicegreen{color:#059223;font-weight:bold}.cult{color:#973e3b}.cultitalic{color:#973e3b;font-style:italic}.cultbold{color:#973e3b;font-style:italic;font-weight:bold}.cultboldtalic{color:#973e3b;font-weight:bold;font-size:185%}.cultlarge{color:#973e3b;font-weight:bold;font-size:185%}.narsie{color:#973e3b;font-weight:bold;font-size:925%}.narsiesmall{color:#973e3b;font-weight:bold;font-size:370%}.colossus{color:#7f282a;font-size:310%}.hierophant{color:#b441ee;font-weight:bold;font-style:italic}.hierophant_warning{color:#c56bf1;font-style:italic}.purple{color:#9956d3}.holoparasite{color:#88809c}.revennotice{color:#c099e2}.revenboldnotice{color:#c099e2;font-weight:bold}.revenbignotice{color:#c099e2;font-weight:bold;font-size:185%}.revenminor{color:#823abb}.revenwarning{color:#760fbb;font-style:italic}.revendanger{color:#760fbb;font-weight:bold;font-size:185%}.deconversion_message{color:#a947ff;font-size:185%;font-style:italic}.ghostalert{color:#60f;font-style:italic;font-weight:bold}.alien{color:#855d85}.noticealien{color:#059223}.alertalien{color:#059223;font-weight:bold}.changeling{color:#059223;font-style:italic}.alertsyndie{color:red;font-size:185%;font-weight:bold}.spider{color:#80f;font-weight:bold;font-size:185%}.interface{color:#750e75}.sans{font-family:"Comic Sans MS",cursive,sans-serif}.papyrus{font-family:"Papyrus",cursive,sans-serif}.robot{font-family:"Courier New",cursive,sans-serif}.tape_recorder{color:red;font-family:"Courier New",cursive,sans-serif}.command_headset{font-weight:bold;font-size:160%}.small{font-size:60%}.big{font-size:185%}.reallybig{font-size:245%}.extremelybig{font-size:310%}.greentext{color:#059223;font-size:185%}.redtext{color:#c51e1e;font-size:185%}.clown{color:#ff70c1;font-size:160%;font-family:"Comic Sans MS",cursive,sans-serif;font-weight:bold}.singing{font-family:"Trebuchet MS",cursive,sans-serif;font-style:italic}.his_grace{color:#15d512;font-family:"Courier New",cursive,sans-serif;font-style:italic}.hypnophrase{color:#202020;font-weight:bold;animation:hypnocolor 1500ms infinite;animation-direction:alternate}@keyframes hypnocolor{0%{color:#202020}25%{color:#4b02ac}50%{color:#9f41f1}75%{color:#541c9c}100%{color:#7adbf3}}.phobia{color:#d00;font-weight:bold;animation:phobia 750ms infinite}@keyframes phobia{0%{color:#f75a5a}50%{color:#d00}100%{color:#f75a5a}}.icon{height:1em;width:auto}.bigicon{font-size:2.5em}.memo{color:#638500;text-align:center}.memoedit{text-align:center;font-size:125%}.abductor{color:#c204c2;font-style:italic}.mind_control{color:#df3da9;font-size:100%;font-weight:bold;font-style:italic}.slime{color:#00ced1}.drone{color:#848482}.monkey{color:#975032}.swarmer{color:#2c75ff}.resonate{color:#298f85}.monkeyhive{color:#a56408}.monkeylead{color:#af6805;font-size:80%}.connectionClosed,.fatalError{background:red;color:#fff;padding:5px}.connectionClosed.restored{background:green}.internal.boldnshit{color:#3d5bc3;font-weight:bold}.text-normal{font-weight:normal;font-style:normal}.hidden{display:none;visibility:hidden}.ml-1{margin-left:1em}.ml-2{margin-left:2em}.ml-3{margin-left:3em}.xooc{color:#ac04e9;font-weight:bold;font-size:140%}.mooc{color:#090;font-weight:bold;font-size:140%}.yooc{color:#999600;font-weight:bold;font-size:140%}.headminsay{color:#653d78;font-weight:bold}.radio{color:#b4b4b4}.deptradio{color:#939}.comradio{color:#779cc2}.centradio{color:#5c5c8a}.hcradio{color:#318779}.pvstradio{color:#9b0612}.cryoradio{color:#ad6d48}.airadio{color:#f0f}.secradio{color:#a52929}.engradio{color:#a66300}.sentryradio{color:#844300}.sentryradio{color:#844300}.medradio{color:#008160}.supradio{color:#ba8e41}.jtacradio{color:#ad3b98}.intelradio{color:#027d02}.wyradio{color:#fe9b24}.pmcradio{color:#4dc5ce}.vairadio{color:#e3580e}.rmcradio{color:#e3580e}.cmbradio{color:#1b748c}.clfradio{color:#8e83ca}.alpharadio{color:#db2626}.bravoradio{color:#c68610}.charlieradio{color:#a5a}.deltaradio{color:#007fcf}.echoradio{color:#3eb489}.medium{font-size:110%}.big{font-size:115%}.large{font-size:125%}.extra_large{font-size:130%}.huge{font-size:150%}.underline{text-decoration:underline}.orange{color:#eca100}.normal{font-style:normal}.attack{color:#ff3838}.moderate{color:#c00}.disarm{color:#900}.passive{color:#600}.helpful{color:#368f31}.scanner{color:#ff3838}.scannerb{color:#ff3838;font-weight:bold}.scannerburn{color:orange}.scannerburnb{color:orange;font-weight:bold}.rose{color:#ff5050}.debuginfo{color:#493d26;font-style:italic}.xenonotice{color:#51a16c}.xenoboldnotice{color:#51a16c;font-style:italic}.xenowarning{color:#51a16c;font-style:italic}.xenominorwarning{color:#51a16c;font-weight:bold;font-style:italic}.xenodanger{color:#51a16c;font-weight:bold}.avoidharm{color:#72a0e5;font-weight:bold}.highdanger{color:#ff3838;font-weight:bold;font-size:140%}.xenohighdanger{color:#51a16c;font-weight:bold;font-size:140%}.xenoannounce{color:#65c585;font-family:book-antiqua;font-weight:bold;font-size:140%}.yautjabold{color:purple;font-weight:bold}.yautjaboldbig{color:purple;font-weight:bold;font-size:120%}.objectivebig{font-weight:bold;font-size:130%}.objectivegreen{color:lime}.objectivered{color:red}.objectivesuccess{color:lime;font-weight:bold;font-size:110%}.objectivefail{color:red;font-weight:bold;font-size:110%}.xenotalk,.xeno{color:#c048c0;font-style:italic}.xenoleader{color:#996e99;font-style:italic;font-size:125%}.xenoqueen{color:#996e99;font-style:italic;font-weight:bold;font-size:125%}.newscaster{color:maroon}.role_header{color:#e92d2d;display:block;text-align:center;font-weight:bold;font-family:trebuchet-ms;font-size:150%}.role_body{color:#3a3ae9;display:block;text-align:center;font-size:125%}.round_header{color:#e92d2d;display:block;text-align:center;font-family:courier;font-weight:bold;font-size:180%}.round_body{color:#c5c5c5;display:block;text-align:center;font-family:trebuchet-ms;font-weight:bold;font-size:125%}.event_announcement{color:#600d48;font-family:arial-narrow;font-weight:bold;font-size:125%}.announce_header{color:#cecece;font-weight:bold;font-size:150%}.announce_header_blue{color:#7575f3;font-weight:bold;font-size:150%}.announce_header_admin{color:#7575f3;font-weight:bold;font-size:150%}.announce_body{color:#e92d2d;font-weight:normal;font-size:125%}.centerbold{display:block;text-align:center;font-weight:bold}.mod{color:#917455;font-weight:bold}.modooc{color:#184880;font-weight:bold}.adminmod{color:#7c440c;font-weight:bold}.mentorsay{color:#d4af57;font-weight:bold}.mentorhelp{color:#090;font-weight:bold}.mentorbody{color:#da6200;font-weight:bold}.mentorstaff{color:#b5850d;font-weight:bold}.staffsay{color:#b5850d;font-weight:bold}.tajaran{color:#803b56}.tajaran_signlang{color:#941c1c}.skrell{color:#00ced1}.soghun{color:#228b22}.changeling{color:purple}.vox{color:#a0a}.monkey{color:#966c47}.german{color:#858f1e;font-family:"Times New Roman",Times,serif}.spanish{color:#cf982b}.japanese{color:#940927}.chinese{color:#fe1919}.zombie{color:#2dacb1;font-style:italic}.rough{font-family:trebuchet-ms,cursive,sans-serif}.commando{color:#fe9b24;font-style:bold}.say_quote{font-family:Georgia,Verdana,sans-serif}.admin .message{color:#314cad}.admin .prefix{font-weight:bolder}.pm{font-size:110%}.deadsay{color:#8b4dff}.retro_translator{font-weight:bold}.yautja_translator{color:#a00;font-weight:bold;animation:glitch .5s infinite}@keyframes glitch{25%{color:#a00;transform:translate(-2px, -1px)}50%{color:#be0000;transform:translate(1px, -2px)}75%{color:#8d0000;transform:translate(-1px, 2px)}100%{color:#830000;transform:translate(1px, 1px)}}.examine_block{background:#1b1c1e;border:1px solid #a4bad6;margin:.5em;padding:.5em .75em}.examine_block .icon{width:1.5em;height:1.5em;margin:0;padding:0}.tooltip{font-style:italic;border-bottom:1px dashed #fff} +html,body{box-sizing:border-box;height:100%;margin:0;font-size:12px}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif}*,*:before,*:after{box-sizing:inherit}h1,h2,h3,h4,h5,h6{display:block;margin:0;padding:6px 0;padding:.5rem 0}h1{font-size:18px;font-size:1.5rem}h2{font-size:16px;font-size:1.333rem}h3{font-size:14px;font-size:1.167rem}h4{font-size:12px;font-size:1rem}td,th{vertical-align:baseline;text-align:left}.candystripe:nth-child(odd){background-color:rgba(0,0,0,.25)}.color-black{color:#1a1a1a !important}.color-white{color:#fff !important}.color-red{color:#df3e3e !important}.color-orange{color:#f37f33 !important}.color-yellow{color:#fbda21 !important}.color-olive{color:#cbe41c !important}.color-green{color:#25ca4c !important}.color-teal{color:#00d6cc !important}.color-blue{color:#2e93de !important}.color-dark-blue{color:#005fa7 !important}.color-violet{color:#7349cf !important}.color-purple{color:#ad45d0 !important}.color-pink{color:#e34da1 !important}.color-brown{color:#b97447 !important}.color-grey{color:#848484 !important}.color-light-grey{color:#b3b3b3 !important}.color-good{color:#68c22d !important}.color-average{color:#f29a29 !important}.color-bad{color:#df3e3e !important}.color-label{color:#8b9bb0 !important}.color-xeno{color:#664573 !important}.color-bg-black{background-color:#000 !important}.color-bg-white{background-color:#d9d9d9 !important}.color-bg-red{background-color:#bd2020 !important}.color-bg-orange{background-color:#d95e0c !important}.color-bg-yellow{background-color:#d9b804 !important}.color-bg-olive{background-color:#9aad14 !important}.color-bg-green{background-color:#1b9638 !important}.color-bg-teal{background-color:#009a93 !important}.color-bg-blue{background-color:#1c71b1 !important}.color-bg-dark-blue{background-color:#003e6e !important}.color-bg-violet{background-color:#552dab !important}.color-bg-purple{background-color:#8b2baa !important}.color-bg-pink{background-color:#cf2082 !important}.color-bg-brown{background-color:#8c5836 !important}.color-bg-grey{background-color:#646464 !important}.color-bg-light-grey{background-color:#919191 !important}.color-bg-good{background-color:#4d9121 !important}.color-bg-average{background-color:#cd7a0d !important}.color-bg-bad{background-color:#bd2020 !important}.color-bg-label{background-color:#657a94 !important}.color-bg-xeno{background-color:#462f4e !important}.debug-layout,.debug-layout *:not(g):not(path){color:rgba(255,255,255,.9) !important;background:transparent !important;outline:1px solid rgba(255,255,255,.5) !important;box-shadow:none !important;filter:none !important}.debug-layout:hover,.debug-layout *:not(g):not(path):hover{outline-color:rgba(255,255,255,.8) !important}.outline-dotted{outline-style:dotted !important}.outline-dashed{outline-style:dashed !important}.outline-solid{outline-style:solid !important}.outline-double{outline-style:double !important}.outline-groove{outline-style:groove !important}.outline-ridge{outline-style:ridge !important}.outline-inset{outline-style:inset !important}.outline-outset{outline-style:outset !important}.outline-color-black{outline:.167rem solid #1a1a1a !important}.outline-color-white{outline:.167rem solid #fff !important}.outline-color-red{outline:.167rem solid #df3e3e !important}.outline-color-orange{outline:.167rem solid #f37f33 !important}.outline-color-yellow{outline:.167rem solid #fbda21 !important}.outline-color-olive{outline:.167rem solid #cbe41c !important}.outline-color-green{outline:.167rem solid #25ca4c !important}.outline-color-teal{outline:.167rem solid #00d6cc !important}.outline-color-blue{outline:.167rem solid #2e93de !important}.outline-color-dark-blue{outline:.167rem solid #005fa7 !important}.outline-color-violet{outline:.167rem solid #7349cf !important}.outline-color-purple{outline:.167rem solid #ad45d0 !important}.outline-color-pink{outline:.167rem solid #e34da1 !important}.outline-color-brown{outline:.167rem solid #b97447 !important}.outline-color-grey{outline:.167rem solid #848484 !important}.outline-color-light-grey{outline:.167rem solid #b3b3b3 !important}.outline-color-good{outline:.167rem solid #68c22d !important}.outline-color-average{outline:.167rem solid #f29a29 !important}.outline-color-bad{outline:.167rem solid #df3e3e !important}.outline-color-label{outline:.167rem solid #8b9bb0 !important}.outline-color-xeno{outline:.167rem solid #664573 !important}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-baseline{text-align:baseline}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-pre{white-space:pre}.text-bold{font-weight:bold}.text-italic{font-style:italic}.text-underline{text-decoration:underline}.BlockQuote{color:#8b9bb0;border-left:.1666666667em solid #8b9bb0;padding-left:.5em;margin-bottom:.5em}.BlockQuote:last-child{margin-bottom:0}.Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.Button:last-child{margin-right:0;margin-bottom:0}.Button .fa,.Button .fas,.Button .far{margin-left:-0.25em;margin-right:-0.25em;min-width:1.333em;text-align:center}.Button--hasContent .fa,.Button--hasContent .fas,.Button--hasContent .far{margin-right:.25em}.Button--hasContent.Button--iconPosition--right .fa,.Button--hasContent.Button--iconPosition--right .fas,.Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.Button--fluid{display:block;margin-left:0;margin-right:0}.Button--circular{border-radius:50%}.Button--compact{padding:0 .25em;line-height:1.333em}.Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.Button--color--black:hover{transition:color 0ms,background-color 0ms}.Button--color--black:focus{transition:color 100ms,background-color 100ms}.Button--color--black:hover,.Button--color--black:focus{background-color:#131313;color:#fff}.Button--color--white{transition:color 50ms,background-color 50ms;background-color:#d9d9d9;color:#000}.Button--color--white:hover{transition:color 0ms,background-color 0ms}.Button--color--white:focus{transition:color 100ms,background-color 100ms}.Button--color--white:hover,.Button--color--white:focus{background-color:#f8f8f8;color:#000}.Button--color--red{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--red:hover{transition:color 0ms,background-color 0ms}.Button--color--red:focus{transition:color 100ms,background-color 100ms}.Button--color--red:hover,.Button--color--red:focus{background-color:#dc4848;color:#fff}.Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#d95e0c;color:#fff}.Button--color--orange:hover{transition:color 0ms,background-color 0ms}.Button--color--orange:focus{transition:color 100ms,background-color 100ms}.Button--color--orange:hover,.Button--color--orange:focus{background-color:#f0853f;color:#fff}.Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.Button--color--yellow:focus{transition:color 100ms,background-color 100ms}.Button--color--yellow:hover,.Button--color--yellow:focus{background-color:#f5d72e;color:#000}.Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#9aad14;color:#fff}.Button--color--olive:hover{transition:color 0ms,background-color 0ms}.Button--color--olive:focus{transition:color 100ms,background-color 100ms}.Button--color--olive:hover,.Button--color--olive:focus{background-color:#c4da2b;color:#fff}.Button--color--green{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--color--green:hover{transition:color 0ms,background-color 0ms}.Button--color--green:focus{transition:color 100ms,background-color 100ms}.Button--color--green:hover,.Button--color--green:focus{background-color:#32c154;color:#fff}.Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#009a93;color:#fff}.Button--color--teal:hover{transition:color 0ms,background-color 0ms}.Button--color--teal:focus{transition:color 100ms,background-color 100ms}.Button--color--teal:hover,.Button--color--teal:focus{background-color:#13c4bc;color:#fff}.Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#1c71b1;color:#fff}.Button--color--blue:hover{transition:color 0ms,background-color 0ms}.Button--color--blue:focus{transition:color 100ms,background-color 100ms}.Button--color--blue:hover,.Button--color--blue:focus{background-color:#3a95d9;color:#fff}.Button--color--dark-blue{transition:color 50ms,background-color 50ms;background-color:#003e6e;color:#fff}.Button--color--dark-blue:hover{transition:color 0ms,background-color 0ms}.Button--color--dark-blue:focus{transition:color 100ms,background-color 100ms}.Button--color--dark-blue:hover,.Button--color--dark-blue:focus{background-color:#135b92;color:#fff}.Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#552dab;color:#fff}.Button--color--violet:hover{transition:color 0ms,background-color 0ms}.Button--color--violet:focus{transition:color 100ms,background-color 100ms}.Button--color--violet:hover,.Button--color--violet:focus{background-color:#7953cc;color:#fff}.Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#8b2baa;color:#fff}.Button--color--purple:hover{transition:color 0ms,background-color 0ms}.Button--color--purple:focus{transition:color 100ms,background-color 100ms}.Button--color--purple:hover,.Button--color--purple:focus{background-color:#ad4fcd;color:#fff}.Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#cf2082;color:#fff}.Button--color--pink:hover{transition:color 0ms,background-color 0ms}.Button--color--pink:focus{transition:color 100ms,background-color 100ms}.Button--color--pink:hover,.Button--color--pink:focus{background-color:#e257a5;color:#fff}.Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#8c5836;color:#fff}.Button--color--brown:hover{transition:color 0ms,background-color 0ms}.Button--color--brown:focus{transition:color 100ms,background-color 100ms}.Button--color--brown:hover,.Button--color--brown:focus{background-color:#b47851;color:#fff}.Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#646464;color:#fff}.Button--color--grey:hover{transition:color 0ms,background-color 0ms}.Button--color--grey:focus{transition:color 100ms,background-color 100ms}.Button--color--grey:hover,.Button--color--grey:focus{background-color:#868686;color:#fff}.Button--color--light-grey{transition:color 50ms,background-color 50ms;background-color:#919191;color:#fff}.Button--color--light-grey:hover{transition:color 0ms,background-color 0ms}.Button--color--light-grey:focus{transition:color 100ms,background-color 100ms}.Button--color--light-grey:hover,.Button--color--light-grey:focus{background-color:#bababa;color:#fff}.Button--color--good{transition:color 50ms,background-color 50ms;background-color:#4d9121;color:#fff}.Button--color--good:hover{transition:color 0ms,background-color 0ms}.Button--color--good:focus{transition:color 100ms,background-color 100ms}.Button--color--good:hover,.Button--color--good:focus{background-color:#6cba39;color:#fff}.Button--color--average{transition:color 50ms,background-color 50ms;background-color:#cd7a0d;color:#fff}.Button--color--average:hover{transition:color 0ms,background-color 0ms}.Button--color--average:focus{transition:color 100ms,background-color 100ms}.Button--color--average:hover,.Button--color--average:focus{background-color:#ed9d35;color:#fff}.Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--bad:hover{transition:color 0ms,background-color 0ms}.Button--color--bad:focus{transition:color 100ms,background-color 100ms}.Button--color--bad:hover,.Button--color--bad:focus{background-color:#dc4848;color:#fff}.Button--color--label{transition:color 50ms,background-color 50ms;background-color:#657a94;color:#fff}.Button--color--label:hover{transition:color 0ms,background-color 0ms}.Button--color--label:focus{transition:color 100ms,background-color 100ms}.Button--color--label:hover,.Button--color--label:focus{background-color:#91a1b3;color:#fff}.Button--color--xeno{transition:color 50ms,background-color 50ms;background-color:#462f4e;color:#fff}.Button--color--xeno:hover{transition:color 0ms,background-color 0ms}.Button--color--xeno:focus{transition:color 100ms,background-color 100ms}.Button--color--xeno:hover,.Button--color--xeno:focus{background-color:#64496d;color:#fff}.Button--color--default{transition:color 50ms,background-color 50ms;background-color:#3e6189;color:#fff}.Button--color--default:hover{transition:color 0ms,background-color 0ms}.Button--color--default:focus{transition:color 100ms,background-color 100ms}.Button--color--default:hover,.Button--color--default:focus{background-color:#5c83b0;color:#fff}.Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--caution:hover{transition:color 0ms,background-color 0ms}.Button--color--caution:focus{transition:color 100ms,background-color 100ms}.Button--color--caution:hover,.Button--color--caution:focus{background-color:#f5d72e;color:#000}.Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--danger:hover{transition:color 0ms,background-color 0ms}.Button--color--danger:focus{transition:color 100ms,background-color 100ms}.Button--color--danger:hover,.Button--color--danger:focus{background-color:#dc4848;color:#fff}.Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#202020;color:#fff;background-color:rgba(32,32,32,0);color:rgba(255,255,255,.5)}.Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.Button--color--transparent:hover,.Button--color--transparent:focus{background-color:#383838;color:#fff}.Button--disabled{background-color:#999 !important}.Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--selected:hover{transition:color 0ms,background-color 0ms}.Button--selected:focus{transition:color 100ms,background-color 100ms}.Button--selected:hover,.Button--selected:focus{background-color:#32c154;color:#fff}.Button--flex{display:inline-flex;flex-direction:column}.Button--flex--fluid{width:100%}.Button--verticalAlignContent--top{justify-content:flex-start}.Button--verticalAlignContent--middle{justify-content:center}.Button--verticalAlignContent--bottom{justify-content:flex-end}.Button__content{display:block;align-self:stretch}.ColorBox{display:inline-block;width:1em;height:1em;line-height:1em;text-align:center}.Dimmer{display:flex;justify-content:center;align-items:center;position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.75);z-index:1}.Divider--horizontal{margin:.5em 0}.Divider--horizontal:not(.Divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Divider--vertical{height:100%;margin:0 .5em}.Divider--vertical:not(.Divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Dropdown{position:relative}.Dropdown__control{position:relative;display:inline-block;font-family:Verdana,sans-serif;font-size:1em;width:8.3333333333em;line-height:1.4166666667em;user-select:none}.Dropdown__arrow-button{float:right;padding-left:.35em;width:1.2em;height:1.8333333333em;border-left:.0833333333em solid #000;border-left:.0833333333em solid rgba(0,0,0,.25)}.Dropdown__menu{position:absolute;overflow-y:auto;z-index:5;width:8.3333333333em;max-height:16.6666666667em;overflow-y:scroll;border-radius:0 0 .1666666667em .1666666667em;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75)}.Dropdown__menu-noscroll{position:absolute;overflow-y:auto;z-index:5;width:8.3333333333em;max-height:16.6666666667em;border-radius:0 0 .1666666667em .1666666667em;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75)}.Dropdown__menuentry{padding:.1666666667em .3333333333em;font-family:Verdana,sans-serif;font-size:1em;line-height:1.4166666667em;transition:background-color 100ms ease-out}.Dropdown__menuentry:hover{background-color:rgba(255,255,255,.2);transition:background-color 0ms}.Dropdown__over{top:auto;bottom:100%}.Dropdown__selected-text{display:inline-block;text-overflow:ellipsis;white-space:nowrap;height:1.4166666667em;width:calc(100% - 1.2em)}.Flex{display:-ms-flexbox;display:flex}.Flex--inline{display:inline-flex}.Flex--iefix{display:block}.Flex--iefix.Flex--inline{display:inline-block}.Flex__item--iefix{display:inline-block}.Flex--iefix--column>.Flex__item--iefix{display:block}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:transparent}.Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fff;color:inherit}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input--monospace .Input__input{font-family:"Consolas",monospace}.Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto;margin-bottom:-0.2em;cursor:n-resize}.Knob:after{content:".";color:transparent;line-height:2.5em}.Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.15) 0%, rgba(255, 255, 255, 0) 100%);border-radius:50%;box-shadow:0 .05em .5em 0 rgba(0,0,0,.5)}.Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.Knob__popupValue{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.Knob__ringTrackPivot{transform:rotateZ(135deg)}.Knob__ringTrack{fill:transparent;stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.Knob__ringFillPivot{transform:rotateZ(135deg)}.Knob--bipolar .Knob__ringFillPivot{transform:rotateZ(270deg)}.Knob__ringFill{fill:transparent;stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms ease-out}.Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.Knob--color--white .Knob__ringFill{stroke:#fff}.Knob--color--red .Knob__ringFill{stroke:#df3e3e}.Knob--color--orange .Knob__ringFill{stroke:#f37f33}.Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.Knob--color--green .Knob__ringFill{stroke:#25ca4c}.Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.Knob--color--blue .Knob__ringFill{stroke:#2e93de}.Knob--color--dark-blue .Knob__ringFill{stroke:#005fa7}.Knob--color--violet .Knob__ringFill{stroke:#7349cf}.Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.Knob--color--pink .Knob__ringFill{stroke:#e34da1}.Knob--color--brown .Knob__ringFill{stroke:#b97447}.Knob--color--grey .Knob__ringFill{stroke:#848484}.Knob--color--light-grey .Knob__ringFill{stroke:#b3b3b3}.Knob--color--good .Knob__ringFill{stroke:#68c22d}.Knob--color--average .Knob__ringFill{stroke:#f29a29}.Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.Knob--color--label .Knob__ringFill{stroke:#8b9bb0}.Knob--color--xeno .Knob__ringFill{stroke:#664573}.LabeledList{display:table;width:100%;width:calc(100% + 1em);border-collapse:collapse;border-spacing:0;margin:-0.25em -0.5em;margin-bottom:0;padding:0}.LabeledList__row{display:table-row}.LabeledList__row:last-child .LabeledList__cell{padding-bottom:0}.LabeledList__cell{display:table-cell;margin:0;padding:.25em .5em;border:0;text-align:left}.LabeledList__label--nowrap{width:1%;white-space:nowrap;min-width:5em}.LabeledList__buttons{width:.1%;white-space:nowrap;text-align:right;padding-top:.0833333333em;padding-bottom:0}.Modal{background-color:#202020;max-width:calc(100% - 1rem);padding:1rem}.NoticeBox{padding:.33em .5em;margin-bottom:.5em;box-shadow:none;font-weight:bold;font-style:italic;color:#000;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg, transparent, transparent 0.8333333333em, rgba(0, 0, 0, 0.1) 0.8333333333em, rgba(0, 0, 0, 0.1) 1.6666666667em)}.NoticeBox--color--black{color:#fff;background-color:#000}.NoticeBox--color--white{color:#000;background-color:#b3b3b3}.NoticeBox--color--red{color:#fff;background-color:#701f1f}.NoticeBox--color--orange{color:#fff;background-color:#854114}.NoticeBox--color--yellow{color:#000;background-color:#83710d}.NoticeBox--color--olive{color:#000;background-color:#576015}.NoticeBox--color--green{color:#fff;background-color:#174e24}.NoticeBox--color--teal{color:#fff;background-color:#064845}.NoticeBox--color--blue{color:#fff;background-color:#1b4565}.NoticeBox--color--dark-blue{color:#fff;background-color:#02121f}.NoticeBox--color--violet{color:#fff;background-color:#3b2864}.NoticeBox--color--purple{color:#fff;background-color:#542663}.NoticeBox--color--pink{color:#fff;background-color:#802257}.NoticeBox--color--brown{color:#fff;background-color:#4c3729}.NoticeBox--color--grey{color:#fff;background-color:#3e3e3e}.NoticeBox--color--light-grey{color:#fff;background-color:#6a6a6a}.NoticeBox--color--good{color:#fff;background-color:#2e4b1a}.NoticeBox--color--average{color:#fff;background-color:#7b4e13}.NoticeBox--color--bad{color:#fff;background-color:#701f1f}.NoticeBox--color--label{color:#fff;background-color:#53565a}.NoticeBox--color--xeno{color:#fff;background-color:#19161b}.NoticeBox--type--info{color:#fff;background-color:#235982}.NoticeBox--type--success{color:#fff;background-color:#1e662f}.NoticeBox--type--warning{color:#fff;background-color:#a95219}.NoticeBox--type--danger{color:#fff;background-color:#8f2828}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:transparent}.Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fff;color:inherit}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input--monospace .Input__input{font-family:"Consolas",monospace}.NumberInput{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#88bfff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.NumberInput--fluid{display:block}.NumberInput__content{margin-left:.5em}.NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #88bfff;background-color:#88bfff}.NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-width:.0833333333em !important;border-style:solid !important;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color 900ms ease-out}.ProgressBar__fill{position:absolute;top:-0.5px;left:0px;bottom:-0.5px}.ProgressBar__fill--animated{transition:background-color 900ms ease-out,width 900ms ease-out}.ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.ProgressBar--color--default{border:.0833333333em solid #3e6189}.ProgressBar--color--default .ProgressBar__fill{background-color:#3e6189}.ProgressBar--color--black{border-color:#000 !important}.ProgressBar--color--black .ProgressBar__fill{background-color:#000}.ProgressBar--color--white{border-color:#d9d9d9 !important}.ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.ProgressBar--color--red{border-color:#bd2020 !important}.ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--orange{border-color:#d95e0c !important}.ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.ProgressBar--color--yellow{border-color:#d9b804 !important}.ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.ProgressBar--color--olive{border-color:#9aad14 !important}.ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.ProgressBar--color--green{border-color:#1b9638 !important}.ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.ProgressBar--color--teal{border-color:#009a93 !important}.ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.ProgressBar--color--blue{border-color:#1c71b1 !important}.ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.ProgressBar--color--dark-blue{border-color:#003e6e !important}.ProgressBar--color--dark-blue .ProgressBar__fill{background-color:#003e6e}.ProgressBar--color--violet{border-color:#552dab !important}.ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.ProgressBar--color--purple{border-color:#8b2baa !important}.ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.ProgressBar--color--pink{border-color:#cf2082 !important}.ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.ProgressBar--color--brown{border-color:#8c5836 !important}.ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.ProgressBar--color--grey{border-color:#646464 !important}.ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.ProgressBar--color--light-grey{border-color:#919191 !important}.ProgressBar--color--light-grey .ProgressBar__fill{background-color:#919191}.ProgressBar--color--good{border-color:#4d9121 !important}.ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.ProgressBar--color--average{border-color:#cd7a0d !important}.ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.ProgressBar--color--bad{border-color:#bd2020 !important}.ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--label{border-color:#657a94 !important}.ProgressBar--color--label .ProgressBar__fill{background-color:#657a94}.ProgressBar--color--xeno{border-color:#462f4e !important}.ProgressBar--color--xeno .ProgressBar__fill{background-color:#462f4e}.Section{position:relative;margin-bottom:.5em;background-color:#131313;background-color:#131313;box-sizing:border-box}.Section:last-child{margin-bottom:0}.Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #4972a1}.Section__titleText{font-size:1.1666666667em;font-weight:bold;color:#fff}.Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.Section__rest{position:relative}.Section__content{padding:.66em .5em}.Section--fitted>.Section__rest>.Section__content{padding:0}.Section--fill{display:flex;flex-direction:column;height:100%}.Section--fill>.Section__rest{flex-grow:1}.Section--fill>.Section__rest>.Section__content{height:100%}.Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.Section--fill.Section--iefix{display:table !important;width:100% !important;height:100% !important;border-collapse:collapse;border-spacing:0}.Section--fill.Section--iefix>.Section__rest{display:table-row !important;height:100% !important}.Section--scrollable{overflow-x:hidden;overflow-y:hidden}.Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.Section--scrollableHorizontal{overflow-x:hidden;overflow-y:hidden}.Section--scrollableHorizontal>.Section__rest>.Section__content{overflow-y:hidden;overflow-x:scroll}.Section--scrollable.Section--scrollableHorizontal{overflow-x:hidden;overflow-y:hidden}.Section--scrollable.Section--scrollableHorizontal>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:scroll}.Section .Section{background-color:transparent;margin-left:-0.5em;margin-right:-0.5em}.Section .Section:first-child{margin-top:-0.5em}.Section .Section .Section__titleText{font-size:1.0833333333em}.Section .Section .Section .Section__titleText{font-size:1em}.Slider{cursor:e-resize}.Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none !important}.Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid transparent;border-right:.4166666667em solid transparent;border-bottom:.4166666667em solid #fff}.Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.Divider--horizontal{margin:.5em 0}.Divider--horizontal:not(.Divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Divider--vertical{height:100%;margin:0 .5em}.Divider--vertical:not(.Divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Stack--fill{height:100%}.Stack--horizontal>.Stack__item{margin-left:.5em}.Stack--horizontal>.Stack__item:first-child{margin-left:0}.Stack--vertical>.Stack__item{margin-top:.5em}.Stack--vertical>.Stack__item:first-child{margin-top:0}.Stack--horizontal>.Stack__divider:not(.Stack__divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Stack--vertical>.Stack__divider:not(.Stack__divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Table{display:table;width:100%;border-collapse:collapse;border-spacing:0;margin:0}.Table--collapsing{width:auto}.Table__row{display:table-row}.Table__cell{display:table-cell;padding:0 .25em}.Table__cell:first-child{padding-left:0}.Table__cell:last-child{padding-right:0}.Table__row--header .Table__cell,.Table__cell--header{font-weight:bold;padding-bottom:.5em}.Table__cell--collapsing{width:1%;white-space:nowrap}.Tabs{display:flex;align-items:stretch;overflow:hidden;background-color:#131313}.Tabs--fill{height:100%}.Section .Tabs{background-color:transparent}.Section:not(.Section--fitted) .Tabs{margin:0 -0.5em .5em}.Section:not(.Section--fitted) .Tabs:first-child{margin-top:-0.5em}.Tabs--vertical{flex-direction:column;padding:.25em 0 .25em .25em}.Tabs--horizontal{margin-bottom:.5em;padding:.25em .25em 0 .25em}.Tabs--horizontal:last-child{margin-bottom:0}.Tabs__Tab{flex-grow:0}.Tabs--fluid .Tabs__Tab{flex-grow:1}.Tab{display:flex;align-items:center;justify-content:space-between;background-color:transparent;color:rgba(255,255,255,.5);min-height:2.25em;min-width:4em}.Tab:not(.Tab--selected):hover{background-color:rgba(255,255,255,.075)}.Tab--selected{background-color:rgba(255,255,255,.125);color:#dfe7f0}.Tab__text{flex-grow:1;margin:0 .5em}.Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.Tabs--horizontal .Tab{border-top:.1666666667em solid transparent;border-bottom:.1666666667em solid transparent;border-top-left-radius:.25em;border-top-right-radius:.25em}.Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #d4dfec}.Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid transparent;border-right:.1666666667em solid transparent;border-top-left-radius:.25em;border-bottom-left-radius:.25em}.Tabs--vertical .Tab--selected{border-right:.1666666667em solid #d4dfec}.Tab--selected.Tab--color--black{color:#535353}.Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#1a1a1a}.Tabs--vertical .Tab--selected.Tab--color--black{border-right-color:#1a1a1a}.Tab--selected.Tab--color--white{color:#fff}.Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#fff}.Tabs--vertical .Tab--selected.Tab--color--white{border-right-color:#fff}.Tab--selected.Tab--color--red{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--red{border-right-color:#df3e3e}.Tab--selected.Tab--color--orange{color:#f69f66}.Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#f37f33}.Tabs--vertical .Tab--selected.Tab--color--orange{border-right-color:#f37f33}.Tab--selected.Tab--color--yellow{color:#fce358}.Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#fbda21}.Tabs--vertical .Tab--selected.Tab--color--yellow{border-right-color:#fbda21}.Tab--selected.Tab--color--olive{color:#d8eb55}.Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#cbe41c}.Tabs--vertical .Tab--selected.Tab--color--olive{border-right-color:#cbe41c}.Tab--selected.Tab--color--green{color:#53e074}.Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#25ca4c}.Tabs--vertical .Tab--selected.Tab--color--green{border-right-color:#25ca4c}.Tab--selected.Tab--color--teal{color:#21fff5}.Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00d6cc}.Tabs--vertical .Tab--selected.Tab--color--teal{border-right-color:#00d6cc}.Tab--selected.Tab--color--blue{color:#62aee6}.Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#2e93de}.Tabs--vertical .Tab--selected.Tab--color--blue{border-right-color:#2e93de}.Tab--selected.Tab--color--dark-blue{color:#008ffd}.Tabs--horizontal .Tab--selected.Tab--color--dark-blue{border-bottom-color:#005fa7}.Tabs--vertical .Tab--selected.Tab--color--dark-blue{border-right-color:#005fa7}.Tab--selected.Tab--color--violet{color:#9676db}.Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#7349cf}.Tabs--vertical .Tab--selected.Tab--color--violet{border-right-color:#7349cf}.Tab--selected.Tab--color--purple{color:#c274db}.Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#ad45d0}.Tabs--vertical .Tab--selected.Tab--color--purple{border-right-color:#ad45d0}.Tab--selected.Tab--color--pink{color:#ea79b9}.Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#e34da1}.Tabs--vertical .Tab--selected.Tab--color--pink{border-right-color:#e34da1}.Tab--selected.Tab--color--brown{color:#ca9775}.Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#b97447}.Tabs--vertical .Tab--selected.Tab--color--brown{border-right-color:#b97447}.Tab--selected.Tab--color--grey{color:#a3a3a3}.Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#848484}.Tabs--vertical .Tab--selected.Tab--color--grey{border-right-color:#848484}.Tab--selected.Tab--color--light-grey{color:#c6c6c6}.Tabs--horizontal .Tab--selected.Tab--color--light-grey{border-bottom-color:#b3b3b3}.Tabs--vertical .Tab--selected.Tab--color--light-grey{border-right-color:#b3b3b3}.Tab--selected.Tab--color--good{color:#8cd95a}.Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#68c22d}.Tabs--vertical .Tab--selected.Tab--color--good{border-right-color:#68c22d}.Tab--selected.Tab--color--average{color:#f5b35e}.Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#f29a29}.Tabs--vertical .Tab--selected.Tab--color--average{border-right-color:#f29a29}.Tab--selected.Tab--color--bad{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--bad{border-right-color:#df3e3e}.Tab--selected.Tab--color--label{color:#a8b4c4}.Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#8b9bb0}.Tabs--vertical .Tab--selected.Tab--color--label{border-right-color:#8b9bb0}.Tab--selected.Tab--color--xeno{color:#9366a3}.Tabs--horizontal .Tab--selected.Tab--color--xeno{border-bottom-color:#664573}.Tabs--vertical .Tab--selected.Tab--color--xeno{border-right-color:#664573}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:transparent}.Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fff;color:inherit}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input--monospace .Input__input{font-family:"Consolas",monospace}.TextArea{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.TextArea--fluid{display:block;width:auto;height:auto}.TextArea--noborder{border:0px}.TextArea__textarea.TextArea__textarea--scrollable{overflow:auto;overflow-x:hidden;overflow-y:scroll}.TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:transparent;color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.TextArea__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.TextArea__textarea_custom{overflow:visible;white-space:pre-wrap}.Tooltip{z-index:2;padding:.5em .75em;pointer-events:none;text-align:left;transition:opacity 150ms ease-out;background-color:#000;color:#fff;box-shadow:.1em .1em 1.25em -0.1em rgba(0,0,0,.5);border-radius:.16em;max-width:20.8333333333em}.Chat{color:#abc6ec}.Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:crimson;border-radius:10px;transition:font-size 200ms ease-out}.Chat__badge:before{content:"x"}.Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.Chat__scrollButton{position:fixed;right:2em;bottom:1em}.Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#131313}.Chat__reconnected:after{content:"";display:block;margin-top:-0.75em;border-bottom:.1666666667em solid #db2828}.Chat__highlight{color:#000}.Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:bold}.ChatMessage{word-wrap:break-word}.ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.Ping{position:relative;padding:.125em .25em;border:.0833333333em solid rgba(140,140,140,.5);border-radius:.25em;width:3.75em;text-align:right}.Ping__indicator{content:"";position:absolute;top:.5em;left:.5em;width:.5em;height:.5em;background-color:#888;border-radius:.25em}.Notifications{position:absolute;bottom:1em;left:1em;right:2em}.Notification{color:#fff;background-color:crimson;padding:.5em;margin:1em 0}.Notification:first-child{margin-top:0}.Notification:last-child{margin-bottom:0}.Layout,.Layout *{scrollbar-base-color:#181818;scrollbar-face-color:#363636;scrollbar-3dlight-color:#202020;scrollbar-highlight-color:#202020;scrollbar-track-color:#181818;scrollbar-arrow-color:#909090;scrollbar-shadow-color:#363636}.Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#202020;background-image:linear-gradient(to bottom, #202020 0%, #202020 100%)}.Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.Window__contentPadding:after{height:0}.Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(56,56,56,.25);pointer-events:none}.Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}em{font-style:normal;font-weight:bold}img{margin:0;padding:0;line-height:1;-ms-interpolation-mode:nearest-neighbor;image-rendering:pixelated}img.icon{height:1em;min-height:16px;width:auto;vertical-align:bottom}a{color:#397ea5}a.visited{color:#7c00e6}a:visited{color:#7c00e6}a.popt{text-decoration:none}.popup{position:fixed;top:50%;left:50%;background:#ddd}.popup .close{position:absolute;background:#aaa;top:0;right:0;color:#333;text-decoration:none;z-index:2;padding:0 10px;height:30px;line-height:30px}.popup .close:hover{background:#999}.popup .head{background:#999;color:#ddd;padding:0 10px;height:30px;line-height:30px;text-transform:uppercase;font-size:.9em;font-weight:bold;border-bottom:2px solid green}.popup input{border:1px solid #999;background:#fff;margin:0;padding:5px;outline:none;color:#333}.popup input[type=text]:hover,.popup input[type=text]:active,.popup input[type=text]:focus{border-color:green}.popup input[type=submit]{padding:5px 10px;background:#999;color:#ddd;text-transform:uppercase;font-size:.9em;font-weight:bold}.popup input[type=submit]:hover,.popup input[type=submit]:focus,.popup input[type=submit]:active{background:#aaa;cursor:pointer}.changeFont{padding:10px}.changeFont a{display:block;text-decoration:none;padding:3px;color:#333}.changeFont a:hover{background:#ccc}.highlightPopup{padding:10px;text-align:center}.highlightPopup input[type=text]{display:block;width:215px;text-align:left;margin-top:5px}.highlightPopup input.highlightColor{background-color:#ff0}.highlightPopup input.highlightTermSubmit{margin-top:5px}.contextMenu{background-color:#ddd;position:fixed;margin:2px;width:150px}.contextMenu a{display:block;padding:2px 5px;text-decoration:none;color:#333}.contextMenu a:hover{background-color:#ccc}.filterMessages{padding:5px}.filterMessages div{padding:2px 0}.icon-stack{height:1em;line-height:1em;width:1em;vertical-align:middle;margin-top:-2px}.motd{color:#a4bad6;font-family:Verdana,sans-serif;white-space:normal}.motd h1,.motd h2,.motd h3,.motd h4,.motd h5,.motd h6{color:#a4bad6;text-decoration:underline}.motd a,.motd a:link,.motd a:visited,.motd a:active,.motd a:hover{color:#a4bad6}.bold,.name,.prefix,.ooc,.looc,.adminooc,.admin,.medal,.yell{font-weight:bold}.italic,.italics{font-style:italic}.highlight{background:#ff0}h1,h2,h3,h4,h5,h6{color:#a4bad6;font-family:Georgia,Verdana,sans-serif}h1.alert,h2.alert{color:#a4bad6}em{font-style:normal;font-weight:bold}.ooc{font-weight:bold}.adminobserverooc{color:#09c;font-weight:bold}.adminooc{color:#3d5bc3;font-weight:bold}.adminsay{color:#9611d4;font-weight:bold}.admin{color:#5975da;font-weight:bold}.name{font-weight:bold}.deadsay{color:#e2c1ff}.binarysay{color:#1e90ff}.binarysay a{color:lime}.binarysay a:active,.binarysay a:visited{color:#8f8}.radio{color:#1ecc43}.sciradio{color:#c68cfa}.comradio{color:#fcdf03}.secradio{color:#dd3535}.medradio{color:#57b8f0}.engradio{color:#f37746}.suppradio{color:#b88646}.servradio{color:#6ca729}.syndradio{color:#8f4a4b}.gangradio{color:#ac2ea1}.centcomradio{color:#2681a5}.aiprivradio{color:#d65d95}.redteamradio{color:#f44}.blueteamradio{color:#3434fd}.greenteamradio{color:#34fd34}.yellowteamradio{color:#fdfd34}.yell{font-weight:bold}.alert{color:#d82020}.userdanger{color:#c51e1e;font-weight:bold;font-size:185%}.bolddanger{color:#c51e1e;font-weight:bold}.danger{color:#c51e1e}.warning{color:#c51e1e;font-style:italic}.alertwarning{color:red;font-weight:bold}.boldwarning{color:#c51e1e;font-style:italic;font-weight:bold}.announce{color:#c51e1e;font-weight:bold}.boldannounce{color:#c51e1e;font-weight:bold}.minorannounce{font-weight:bold;font-size:185%}.greenannounce{color:#059223;font-weight:bold}.rose{color:#ff5050}.info{color:#9ab0ff}.notice{color:#6685f5}.staff_ic{color:#6685f5}.tinynotice{color:#6685f5;font-size:85%}.tinynoticeital{color:#6685f5;font-style:italic;font-size:85%}.smallnotice{color:#6685f5;font-size:90%}.smallnoticeital{color:#6685f5;font-style:italic;font-size:90%}.boldnotice{color:#6685f5;font-weight:bold}.hear{color:#6685f5;font-style:italic}.adminnotice{color:#6685f5}.adminhelp{color:red;font-weight:bold}.unconscious{color:#a4bad6;font-weight:bold}.suicide{color:#ff5050;font-style:italic}.green{color:#059223}.grey{color:#838383}.red{color:red}.blue{color:#215cff}.nicegreen{color:#059223}.boldnicegreen{color:#059223;font-weight:bold}.cult{color:#973e3b}.cultitalic{color:#973e3b;font-style:italic}.cultbold{color:#973e3b;font-style:italic;font-weight:bold}.cultboldtalic{color:#973e3b;font-weight:bold;font-size:185%}.cultlarge{color:#973e3b;font-weight:bold;font-size:185%}.narsie{color:#973e3b;font-weight:bold;font-size:925%}.narsiesmall{color:#973e3b;font-weight:bold;font-size:370%}.colossus{color:#7f282a;font-size:310%}.hierophant{color:#b441ee;font-weight:bold;font-style:italic}.hierophant_warning{color:#c56bf1;font-style:italic}.purple{color:#9956d3}.holoparasite{color:#88809c}.revennotice{color:#c099e2}.revenboldnotice{color:#c099e2;font-weight:bold}.revenbignotice{color:#c099e2;font-weight:bold;font-size:185%}.revenminor{color:#823abb}.revenwarning{color:#760fbb;font-style:italic}.revendanger{color:#760fbb;font-weight:bold;font-size:185%}.deconversion_message{color:#a947ff;font-size:185%;font-style:italic}.ghostalert{color:#60f;font-style:italic;font-weight:bold}.alien{color:#855d85}.noticealien{color:#059223}.alertalien{color:#059223;font-weight:bold}.changeling{color:#059223;font-style:italic}.alertsyndie{color:red;font-size:185%;font-weight:bold}.spider{color:#80f;font-weight:bold;font-size:185%}.interface{color:#750e75}.sans{font-family:"Comic Sans MS",cursive,sans-serif}.papyrus{font-family:"Papyrus",cursive,sans-serif}.robot{font-family:"Courier New",cursive,sans-serif}.tape_recorder{color:red;font-family:"Courier New",cursive,sans-serif}.command_headset{font-weight:bold;font-size:160%}.small{font-size:60%}.big{font-size:185%}.reallybig{font-size:245%}.extremelybig{font-size:310%}.greentext{color:#059223;font-size:185%}.redtext{color:#c51e1e;font-size:185%}.clown{color:#ff70c1;font-size:160%;font-family:"Comic Sans MS",cursive,sans-serif;font-weight:bold}.singing{font-family:"Trebuchet MS",cursive,sans-serif;font-style:italic}.his_grace{color:#15d512;font-family:"Courier New",cursive,sans-serif;font-style:italic}.hypnophrase{color:#202020;font-weight:bold;animation:hypnocolor 1500ms infinite;animation-direction:alternate}@keyframes hypnocolor{0%{color:#202020}25%{color:#4b02ac}50%{color:#9f41f1}75%{color:#541c9c}100%{color:#7adbf3}}.phobia{color:#d00;font-weight:bold;animation:phobia 750ms infinite}@keyframes phobia{0%{color:#f75a5a}50%{color:#d00}100%{color:#f75a5a}}.icon{height:1em;width:auto}.bigicon{font-size:2.5em}.memo{color:#638500;text-align:center}.memoedit{text-align:center;font-size:125%}.abductor{color:#c204c2;font-style:italic}.mind_control{color:#df3da9;font-size:100%;font-weight:bold;font-style:italic}.slime{color:#00ced1}.drone{color:#848482}.monkey{color:#975032}.swarmer{color:#2c75ff}.resonate{color:#298f85}.monkeyhive{color:#a56408}.monkeylead{color:#af6805;font-size:80%}.connectionClosed,.fatalError{background:red;color:#fff;padding:5px}.connectionClosed.restored{background:green}.internal.boldnshit{color:#3d5bc3;font-weight:bold}.text-normal{font-weight:normal;font-style:normal}.hidden{display:none;visibility:hidden}.ml-1{margin-left:1em}.ml-2{margin-left:2em}.ml-3{margin-left:3em}.xooc{color:#ac04e9;font-weight:bold;font-size:140%}.mooc{color:#090;font-weight:bold;font-size:140%}.yooc{color:#999600;font-weight:bold;font-size:140%}.headminsay{color:#653d78;font-weight:bold}.radio{color:#b4b4b4}.deptradio{color:#939}.comradio{color:#779cc2}.centradio{color:#5c5c8a}.hcradio{color:#318779}.pvstradio{color:#9b0612}.cryoradio{color:#ad6d48}.airadio{color:#f0f}.secradio{color:#a52929}.engradio{color:#a66300}.sentryradio{color:#844300}.medradio{color:#008160}.supradio{color:#ba8e41}.jtacradio{color:#ad3b98}.intelradio{color:#027d02}.wyradio{color:#fe9b24}.pmcradio{color:#4dc5ce}.vairadio{color:#e3580e}.rmcradio{color:#e3580e}.cmbradio{color:#1b748c}.clfradio{color:#8e83ca}.alpharadio{color:#db2626}.bravoradio{color:#c68610}.charlieradio{color:#a5a}.deltaradio{color:#007fcf}.echoradio{color:#3eb489}.medium{font-size:110%}.big{font-size:115%}.large{font-size:125%}.extra_large{font-size:130%}.huge{font-size:150%}.underline{text-decoration:underline}.orange{color:#eca100}.normal{font-style:normal}.attack{color:#ff3838}.moderate{color:#c00}.disarm{color:#900}.passive{color:#600}.helpful{color:#368f31}.scanner{color:#ff3838}.scannerb{color:#ff3838;font-weight:bold}.scannerburn{color:orange}.scannerburnb{color:orange;font-weight:bold}.rose{color:#ff5050}.debuginfo{color:#493d26;font-style:italic}.xenonotice{color:#51a16c}.xenoboldnotice{color:#51a16c;font-style:italic}.xenowarning{color:#51a16c;font-style:italic}.xenominorwarning{color:#51a16c;font-weight:bold;font-style:italic}.xenodanger{color:#51a16c;font-weight:bold}.avoidharm{color:#72a0e5;font-weight:bold}.highdanger{color:#ff3838;font-weight:bold;font-size:140%}.xenohighdanger{color:#51a16c;font-weight:bold;font-size:140%}.xenoannounce{color:#65c585;font-family:book-antiqua;font-weight:bold;font-size:140%}.yautjabold{color:purple;font-weight:bold}.yautjaboldbig{color:purple;font-weight:bold;font-size:120%}.objectivebig{font-weight:bold;font-size:130%}.objectivegreen{color:lime}.objectivered{color:red}.objectivesuccess{color:lime;font-weight:bold;font-size:110%}.objectivefail{color:red;font-weight:bold;font-size:110%}.xenotalk,.xeno{color:#c048c0;font-style:italic}.xenoleader{color:#996e99;font-style:italic;font-size:125%}.xenoqueen{color:#996e99;font-style:italic;font-weight:bold;font-size:125%}.newscaster{color:maroon}.role_header{color:#e92d2d;display:block;text-align:center;font-weight:bold;font-family:trebuchet-ms;font-size:150%}.role_body{color:#3a3ae9;display:block;text-align:center;font-size:125%}.round_header{color:#e92d2d;display:block;text-align:center;font-family:courier;font-weight:bold;font-size:180%}.round_body{color:#c5c5c5;display:block;text-align:center;font-family:trebuchet-ms;font-weight:bold;font-size:125%}.event_announcement{color:#600d48;font-family:arial-narrow;font-weight:bold;font-size:125%}.announce_header{color:#cecece;font-weight:bold;font-size:150%}.announce_header_blue{color:#7575f3;font-weight:bold;font-size:150%}.announce_header_admin{color:#7575f3;font-weight:bold;font-size:150%}.announce_body{color:#e92d2d;font-weight:normal;font-size:125%}.centerbold{display:block;text-align:center;font-weight:bold}.mod{color:#917455;font-weight:bold}.modooc{color:#184880;font-weight:bold}.adminmod{color:#7c440c;font-weight:bold}.mentorsay{color:#d4af57;font-weight:bold}.mentorhelp{color:#090;font-weight:bold}.mentorbody{color:#da6200;font-weight:bold}.mentorstaff{color:#b5850d;font-weight:bold}.staffsay{color:#b5850d;font-weight:bold}.tajaran{color:#803b56}.tajaran_signlang{color:#941c1c}.skrell{color:#00ced1}.soghun{color:#228b22}.changeling{color:purple}.vox{color:#a0a}.monkey{color:#966c47}.german{color:#858f1e;font-family:"Times New Roman",Times,serif}.spanish{color:#cf982b}.japanese{color:#940927}.chinese{color:#fe1919}.zombie{color:#2dacb1;font-style:italic}.rough{font-family:trebuchet-ms,cursive,sans-serif}.commando{color:#fe9b24;font-style:bold}.say_quote{font-family:Georgia,Verdana,sans-serif}.admin .message{color:#314cad}.admin .prefix{font-weight:bolder}.pm{font-size:110%}.deadsay{color:#8b4dff}.retro_translator{font-weight:bold}.yautja_translator{color:#a00;font-weight:bold;animation:glitch .5s infinite}@keyframes glitch{25%{color:#a00;transform:translate(-2px, -1px)}50%{color:#be0000;transform:translate(1px, -2px)}75%{color:#8d0000;transform:translate(-1px, 2px)}100%{color:#830000;transform:translate(1px, 1px)}}.examine_block{background:#1b1c1e;border:1px solid #a4bad6;margin:.5em;padding:.5em .75em}.examine_block .icon{width:1.5em;height:1.5em;margin:0;padding:0}.tooltip{font-style:italic;border-bottom:1px dashed #fff} .theme-light .color-black{color:#000 !important}.theme-light .color-white{color:#e6e6e6 !important}.theme-light .color-red{color:#c82121 !important}.theme-light .color-orange{color:#e6630d !important}.theme-light .color-yellow{color:#e5c304 !important}.theme-light .color-olive{color:#a3b816 !important}.theme-light .color-green{color:#1d9f3b !important}.theme-light .color-teal{color:#00a39c !important}.theme-light .color-blue{color:#1e78bb !important}.theme-light .color-dark-blue{color:#004274 !important}.theme-light .color-violet{color:#5a30b5 !important}.theme-light .color-purple{color:#932eb4 !important}.theme-light .color-pink{color:#db228a !important}.theme-light .color-brown{color:#955d39 !important}.theme-light .color-grey{color:#e6e6e6 !important}.theme-light .color-light-grey{color:#999 !important}.theme-light .color-good{color:#529923 !important}.theme-light .color-average{color:#da810e !important}.theme-light .color-bad{color:#c82121 !important}.theme-light .color-label{color:#353535 !important}.theme-light .color-xeno{color:#4a3253 !important}.theme-light .color-bg-black{background-color:#000 !important}.theme-light .color-bg-white{background-color:#bfbfbf !important}.theme-light .color-bg-red{background-color:#a61c1c !important}.theme-light .color-bg-orange{background-color:#c0530b !important}.theme-light .color-bg-yellow{background-color:#bfa303 !important}.theme-light .color-bg-olive{background-color:#889912 !important}.theme-light .color-bg-green{background-color:#188532 !important}.theme-light .color-bg-teal{background-color:#008882 !important}.theme-light .color-bg-blue{background-color:#19649c !important}.theme-light .color-bg-dark-blue{background-color:#003761 !important}.theme-light .color-bg-violet{background-color:#4b2897 !important}.theme-light .color-bg-purple{background-color:#7a2696 !important}.theme-light .color-bg-pink{background-color:#b61d73 !important}.theme-light .color-bg-brown{background-color:#7c4d2f !important}.theme-light .color-bg-grey{background-color:#bfbfbf !important}.theme-light .color-bg-light-grey{background-color:gray !important}.theme-light .color-bg-good{background-color:#44801d !important}.theme-light .color-bg-average{background-color:#b56b0b !important}.theme-light .color-bg-bad{background-color:#a61c1c !important}.theme-light .color-bg-label{background-color:#2c2c2c !important}.theme-light .color-bg-xeno{background-color:#3e2945 !important}.theme-light .Tabs{display:flex;align-items:stretch;overflow:hidden;background-color:#fff}.theme-light .Tabs--fill{height:100%}.theme-light .Section .Tabs{background-color:transparent}.theme-light .Section:not(.Section--fitted) .Tabs{margin:0 -0.5em .5em}.theme-light .Section:not(.Section--fitted) .Tabs:first-child{margin-top:-0.5em}.theme-light .Tabs--vertical{flex-direction:column;padding:.25em 0 .25em .25em}.theme-light .Tabs--horizontal{margin-bottom:.5em;padding:.25em .25em 0 .25em}.theme-light .Tabs--horizontal:last-child{margin-bottom:0}.theme-light .Tabs__Tab{flex-grow:0}.theme-light .Tabs--fluid .Tabs__Tab{flex-grow:1}.theme-light .Tab{display:flex;align-items:center;justify-content:space-between;background-color:transparent;color:rgba(0,0,0,.5);min-height:2.25em;min-width:4em}.theme-light .Tab:not(.Tab--selected):hover{background-color:rgba(255,255,255,.075)}.theme-light .Tab--selected{background-color:rgba(255,255,255,.125);color:#404040}.theme-light .Tab__text{flex-grow:1;margin:0 .5em}.theme-light .Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.theme-light .Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.theme-light .Tabs--horizontal .Tab{border-top:.1666666667em solid transparent;border-bottom:.1666666667em solid transparent;border-top-left-radius:.25em;border-top-right-radius:.25em}.theme-light .Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #000}.theme-light .Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid transparent;border-right:.1666666667em solid transparent;border-top-left-radius:.25em;border-bottom-left-radius:.25em}.theme-light .Tabs--vertical .Tab--selected{border-right:.1666666667em solid #000}.theme-light .Tab--selected.Tab--color--black{color:#404040}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#000}.theme-light .Tabs--vertical .Tab--selected.Tab--color--black{border-right-color:#000}.theme-light .Tab--selected.Tab--color--white{color:#ececec}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#e6e6e6}.theme-light .Tabs--vertical .Tab--selected.Tab--color--white{border-right-color:#e6e6e6}.theme-light .Tab--selected.Tab--color--red{color:#e14d4d}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#c82121}.theme-light .Tabs--vertical .Tab--selected.Tab--color--red{border-right-color:#c82121}.theme-light .Tab--selected.Tab--color--orange{color:#f48942}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#e6630d}.theme-light .Tabs--vertical .Tab--selected.Tab--color--orange{border-right-color:#e6630d}.theme-light .Tab--selected.Tab--color--yellow{color:#fcdd33}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#e5c304}.theme-light .Tabs--vertical .Tab--selected.Tab--color--yellow{border-right-color:#e5c304}.theme-light .Tab--selected.Tab--color--olive{color:#d0e732}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#a3b816}.theme-light .Tabs--vertical .Tab--selected.Tab--color--olive{border-right-color:#a3b816}.theme-light .Tab--selected.Tab--color--green{color:#33da5a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#1d9f3b}.theme-light .Tabs--vertical .Tab--selected.Tab--color--green{border-right-color:#1d9f3b}.theme-light .Tab--selected.Tab--color--teal{color:#00faef}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00a39c}.theme-light .Tabs--vertical .Tab--selected.Tab--color--teal{border-right-color:#00a39c}.theme-light .Tab--selected.Tab--color--blue{color:#419ce1}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#1e78bb}.theme-light .Tabs--vertical .Tab--selected.Tab--color--blue{border-right-color:#1e78bb}.theme-light .Tab--selected.Tab--color--dark-blue{color:#0079d7}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--dark-blue{border-bottom-color:#004274}.theme-light .Tabs--vertical .Tab--selected.Tab--color--dark-blue{border-right-color:#004274}.theme-light .Tab--selected.Tab--color--violet{color:#7f58d3}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#5a30b5}.theme-light .Tabs--vertical .Tab--selected.Tab--color--violet{border-right-color:#5a30b5}.theme-light .Tab--selected.Tab--color--purple{color:#b455d4}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#932eb4}.theme-light .Tabs--vertical .Tab--selected.Tab--color--purple{border-right-color:#932eb4}.theme-light .Tab--selected.Tab--color--pink{color:#e558a7}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#db228a}.theme-light .Tabs--vertical .Tab--selected.Tab--color--pink{border-right-color:#db228a}.theme-light .Tab--selected.Tab--color--brown{color:#c0825a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#955d39}.theme-light .Tabs--vertical .Tab--selected.Tab--color--brown{border-right-color:#955d39}.theme-light .Tab--selected.Tab--color--grey{color:#ececec}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#e6e6e6}.theme-light .Tabs--vertical .Tab--selected.Tab--color--grey{border-right-color:#e6e6e6}.theme-light .Tab--selected.Tab--color--light-grey{color:#b3b3b3}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--light-grey{border-bottom-color:#999}.theme-light .Tabs--vertical .Tab--selected.Tab--color--light-grey{border-right-color:#999}.theme-light .Tab--selected.Tab--color--good{color:#77d23b}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#529923}.theme-light .Tabs--vertical .Tab--selected.Tab--color--good{border-right-color:#529923}.theme-light .Tab--selected.Tab--color--average{color:#f3a23a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#da810e}.theme-light .Tabs--vertical .Tab--selected.Tab--color--average{border-right-color:#da810e}.theme-light .Tab--selected.Tab--color--bad{color:#e14d4d}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#c82121}.theme-light .Tabs--vertical .Tab--selected.Tab--color--bad{border-right-color:#c82121}.theme-light .Tab--selected.Tab--color--label{color:#686868}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#353535}.theme-light .Tabs--vertical .Tab--selected.Tab--color--label{border-right-color:#353535}.theme-light .Tab--selected.Tab--color--xeno{color:#7e558e}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--xeno{border-bottom-color:#4a3253}.theme-light .Tabs--vertical .Tab--selected.Tab--color--xeno{border-right-color:#4a3253}.theme-light .Section{position:relative;margin-bottom:.5em;background-color:#fff;background-color:#fff;box-sizing:border-box}.theme-light .Section:last-child{margin-bottom:0}.theme-light .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #fff}.theme-light .Section__titleText{font-size:1.1666666667em;font-weight:bold;color:#000}.theme-light .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-light .Section__rest{position:relative}.theme-light .Section__content{padding:.66em .5em}.theme-light .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-light .Section--fill{display:flex;flex-direction:column;height:100%}.theme-light .Section--fill>.Section__rest{flex-grow:1}.theme-light .Section--fill>.Section__rest>.Section__content{height:100%}.theme-light .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-light .Section--fill.Section--iefix{display:table !important;width:100% !important;height:100% !important;border-collapse:collapse;border-spacing:0}.theme-light .Section--fill.Section--iefix>.Section__rest{display:table-row !important;height:100% !important}.theme-light .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-light .Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.theme-light .Section--scrollableHorizontal{overflow-x:hidden;overflow-y:hidden}.theme-light .Section--scrollableHorizontal>.Section__rest>.Section__content{overflow-y:hidden;overflow-x:scroll}.theme-light .Section--scrollable.Section--scrollableHorizontal{overflow-x:hidden;overflow-y:hidden}.theme-light .Section--scrollable.Section--scrollableHorizontal>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:scroll}.theme-light .Section .Section{background-color:transparent;margin-left:-0.5em;margin-right:-0.5em}.theme-light .Section .Section:first-child{margin-top:-0.5em}.theme-light .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-light .Section .Section .Section .Section__titleText{font-size:1em}.theme-light .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-light .Button:last-child{margin-right:0;margin-bottom:0}.theme-light .Button .fa,.theme-light .Button .fas,.theme-light .Button .far{margin-left:-0.25em;margin-right:-0.25em;min-width:1.333em;text-align:center}.theme-light .Button--hasContent .fa,.theme-light .Button--hasContent .fas,.theme-light .Button--hasContent .far{margin-right:.25em}.theme-light .Button--hasContent.Button--iconPosition--right .fa,.theme-light .Button--hasContent.Button--iconPosition--right .fas,.theme-light .Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.theme-light .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-light .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-light .Button--circular{border-radius:50%}.theme-light .Button--compact{padding:0 .25em;line-height:1.333em}.theme-light .Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.theme-light .Button--color--black:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--black:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--black:hover,.theme-light .Button--color--black:focus{background-color:#131313;color:#fff}.theme-light .Button--color--white{transition:color 50ms,background-color 50ms;background-color:#bfbfbf;color:#000}.theme-light .Button--color--white:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--white:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--white:hover,.theme-light .Button--color--white:focus{background-color:#efefef;color:#000}.theme-light .Button--color--red{transition:color 50ms,background-color 50ms;background-color:#a61c1c;color:#fff}.theme-light .Button--color--red:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--red:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--red:hover,.theme-light .Button--color--red:focus{background-color:#d23333;color:#fff}.theme-light .Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#c0530b;color:#fff}.theme-light .Button--color--orange:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--orange:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--orange:hover,.theme-light .Button--color--orange:focus{background-color:#ea7426;color:#fff}.theme-light .Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#bfa303;color:#fff}.theme-light .Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--yellow:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--yellow:hover,.theme-light .Button--color--yellow:focus{background-color:#efce17;color:#fff}.theme-light .Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#889912;color:#fff}.theme-light .Button--color--olive:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--olive:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--olive:hover,.theme-light .Button--color--olive:focus{background-color:#afc328;color:#fff}.theme-light .Button--color--green{transition:color 50ms,background-color 50ms;background-color:#188532;color:#fff}.theme-light .Button--color--green:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--green:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--green:hover,.theme-light .Button--color--green:focus{background-color:#2fac4c;color:#fff}.theme-light .Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#008882;color:#fff}.theme-light .Button--color--teal:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--teal:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--teal:hover,.theme-light .Button--color--teal:focus{background-color:#13afa9;color:#fff}.theme-light .Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#19649c;color:#fff}.theme-light .Button--color--blue:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--blue:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--blue:hover,.theme-light .Button--color--blue:focus{background-color:#3086c7;color:#fff}.theme-light .Button--color--dark-blue{transition:color 50ms,background-color 50ms;background-color:#003761;color:#fff}.theme-light .Button--color--dark-blue:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--dark-blue:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--dark-blue:hover,.theme-light .Button--color--dark-blue:focus{background-color:#135283;color:#fff}.theme-light .Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#4b2897;color:#fff}.theme-light .Button--color--violet:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--violet:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--violet:hover,.theme-light .Button--color--violet:focus{background-color:#6a41c1;color:#fff}.theme-light .Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#7a2696;color:#fff}.theme-light .Button--color--purple:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--purple:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--purple:hover,.theme-light .Button--color--purple:focus{background-color:#a03fc0;color:#fff}.theme-light .Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#b61d73;color:#fff}.theme-light .Button--color--pink:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--pink:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--pink:hover,.theme-light .Button--color--pink:focus{background-color:#da3f96;color:#fff}.theme-light .Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#7c4d2f;color:#fff}.theme-light .Button--color--brown:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--brown:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--brown:hover,.theme-light .Button--color--brown:focus{background-color:#a26c49;color:#fff}.theme-light .Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#bfbfbf;color:#000}.theme-light .Button--color--grey:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--grey:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--grey:hover,.theme-light .Button--color--grey:focus{background-color:#efefef;color:#000}.theme-light .Button--color--light-grey{transition:color 50ms,background-color 50ms;background-color:gray;color:#fff}.theme-light .Button--color--light-grey:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--light-grey:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--light-grey:hover,.theme-light .Button--color--light-grey:focus{background-color:#a6a6a6;color:#fff}.theme-light .Button--color--good{transition:color 50ms,background-color 50ms;background-color:#44801d;color:#fff}.theme-light .Button--color--good:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--good:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--good:hover,.theme-light .Button--color--good:focus{background-color:#62a635;color:#fff}.theme-light .Button--color--average{transition:color 50ms,background-color 50ms;background-color:#b56b0b;color:#fff}.theme-light .Button--color--average:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--average:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--average:hover,.theme-light .Button--color--average:focus{background-color:#e48f20;color:#fff}.theme-light .Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#a61c1c;color:#fff}.theme-light .Button--color--bad:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--bad:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--bad:hover,.theme-light .Button--color--bad:focus{background-color:#d23333;color:#fff}.theme-light .Button--color--label{transition:color 50ms,background-color 50ms;background-color:#2c2c2c;color:#fff}.theme-light .Button--color--label:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--label:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--label:hover,.theme-light .Button--color--label:focus{background-color:#464646;color:#fff}.theme-light .Button--color--xeno{transition:color 50ms,background-color 50ms;background-color:#3e2945;color:#fff}.theme-light .Button--color--xeno:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--xeno:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--xeno:hover,.theme-light .Button--color--xeno:focus{background-color:#5a4363;color:#fff}.theme-light .Button--color--default{transition:color 50ms,background-color 50ms;background-color:#bbb;color:#000}.theme-light .Button--color--default:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--default:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--default:hover,.theme-light .Button--color--default:focus{background-color:#eaeaea;color:#000}.theme-light .Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#be6209;color:#fff}.theme-light .Button--color--caution:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--caution:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--caution:hover,.theme-light .Button--color--caution:focus{background-color:#ec8420;color:#fff}.theme-light .Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#9a9d00;color:#fff}.theme-light .Button--color--danger:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--danger:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--danger:hover,.theme-light .Button--color--danger:focus{background-color:#c4c813;color:#fff}.theme-light .Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#eee;color:#000;background-color:rgba(238,238,238,0);color:rgba(0,0,0,.5)}.theme-light .Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--transparent:hover,.theme-light .Button--color--transparent:focus{background-color:#fcfcfc;color:#000}.theme-light .Button--disabled{background-color:#363636 !important}.theme-light .Button--selected{transition:color 50ms,background-color 50ms;background-color:#0668b8;color:#fff}.theme-light .Button--selected:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--selected:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--selected:hover,.theme-light .Button--selected:focus{background-color:#1a8be7;color:#fff}.theme-light .Button--flex{display:inline-flex;flex-direction:column}.theme-light .Button--flex--fluid{width:100%}.theme-light .Button--verticalAlignContent--top{justify-content:flex-start}.theme-light .Button--verticalAlignContent--middle{justify-content:center}.theme-light .Button--verticalAlignContent--bottom{justify-content:flex-end}.theme-light .Button__content{display:block;align-self:stretch}.theme-light .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;color:#000;background-color:#fff;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.theme-light .Input--fluid{display:block;width:auto}.theme-light .Input__baseline{display:inline-block;color:transparent}.theme-light .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#000;color:inherit}.theme-light .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Input--monospace .Input__input{font-family:"Consolas",monospace}.theme-light .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;color:#000;background-color:#fff;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.theme-light .Input--fluid{display:block;width:auto}.theme-light .Input__baseline{display:inline-block;color:transparent}.theme-light .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#000;color:inherit}.theme-light .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Input--monospace .Input__input{font-family:"Consolas",monospace}.theme-light .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;color:#353535;background-color:#fff;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-light .NumberInput--fluid{display:block}.theme-light .NumberInput__content{margin-left:.5em}.theme-light .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-light .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #353535;background-color:#353535}.theme-light .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#fff;color:#000;text-align:right}.theme-light .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;color:#000;background-color:#fff;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.theme-light .Input--fluid{display:block;width:auto}.theme-light .Input__baseline{display:inline-block;color:transparent}.theme-light .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#000;color:inherit}.theme-light .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Input--monospace .Input__input{font-family:"Consolas",monospace}.theme-light .TextArea{position:relative;display:inline-block;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;background-color:#fff;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-light .TextArea--fluid{display:block;width:auto;height:auto}.theme-light .TextArea--noborder{border:0px}.theme-light .TextArea__textarea.TextArea__textarea--scrollable{overflow:auto;overflow-x:hidden;overflow-y:scroll}.theme-light .TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:transparent;color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-light .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .TextArea__textarea_custom{overflow:visible;white-space:pre-wrap}.theme-light .Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto;margin-bottom:-0.2em;cursor:n-resize}.theme-light .Knob:after{content:".";color:transparent;line-height:2.5em}.theme-light .Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.15) 0%, rgba(255, 255, 255, 0) 100%);border-radius:50%;box-shadow:0 .05em .5em 0 rgba(0,0,0,.5)}.theme-light .Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.theme-light .Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.theme-light .Knob__popupValue{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.theme-light .Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.theme-light .Knob__ringTrackPivot{transform:rotateZ(135deg)}.theme-light .Knob__ringTrack{fill:transparent;stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.theme-light .Knob__ringFillPivot{transform:rotateZ(135deg)}.theme-light .Knob--bipolar .Knob__ringFillPivot{transform:rotateZ(270deg)}.theme-light .Knob__ringFill{fill:transparent;stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms ease-out}.theme-light .Knob--color--black .Knob__ringFill{stroke:#000}.theme-light .Knob--color--white .Knob__ringFill{stroke:#e6e6e6}.theme-light .Knob--color--red .Knob__ringFill{stroke:#c82121}.theme-light .Knob--color--orange .Knob__ringFill{stroke:#e6630d}.theme-light .Knob--color--yellow .Knob__ringFill{stroke:#e5c304}.theme-light .Knob--color--olive .Knob__ringFill{stroke:#a3b816}.theme-light .Knob--color--green .Knob__ringFill{stroke:#1d9f3b}.theme-light .Knob--color--teal .Knob__ringFill{stroke:#00a39c}.theme-light .Knob--color--blue .Knob__ringFill{stroke:#1e78bb}.theme-light .Knob--color--dark-blue .Knob__ringFill{stroke:#004274}.theme-light .Knob--color--violet .Knob__ringFill{stroke:#5a30b5}.theme-light .Knob--color--purple .Knob__ringFill{stroke:#932eb4}.theme-light .Knob--color--pink .Knob__ringFill{stroke:#db228a}.theme-light .Knob--color--brown .Knob__ringFill{stroke:#955d39}.theme-light .Knob--color--grey .Knob__ringFill{stroke:#e6e6e6}.theme-light .Knob--color--light-grey .Knob__ringFill{stroke:#999}.theme-light .Knob--color--good .Knob__ringFill{stroke:#529923}.theme-light .Knob--color--average .Knob__ringFill{stroke:#da810e}.theme-light .Knob--color--bad .Knob__ringFill{stroke:#c82121}.theme-light .Knob--color--label .Knob__ringFill{stroke:#353535}.theme-light .Knob--color--xeno .Knob__ringFill{stroke:#4a3253}.theme-light .Slider{cursor:e-resize}.theme-light .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none !important}.theme-light .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #000}.theme-light .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid transparent;border-right:.4166666667em solid transparent;border-bottom:.4166666667em solid #000}.theme-light .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.theme-light .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-width:.0833333333em !important;border-style:solid !important;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color 900ms ease-out}.theme-light .ProgressBar__fill{position:absolute;top:-0.5px;left:0px;bottom:-0.5px}.theme-light .ProgressBar__fill--animated{transition:background-color 900ms ease-out,width 900ms ease-out}.theme-light .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-light .ProgressBar--color--default{border:.0833333333em solid #bfbfbf}.theme-light .ProgressBar--color--default .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--black{border-color:#000 !important}.theme-light .ProgressBar--color--black .ProgressBar__fill{background-color:#000}.theme-light .ProgressBar--color--white{border-color:#bfbfbf !important}.theme-light .ProgressBar--color--white .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--red{border-color:#a61c1c !important}.theme-light .ProgressBar--color--red .ProgressBar__fill{background-color:#a61c1c}.theme-light .ProgressBar--color--orange{border-color:#c0530b !important}.theme-light .ProgressBar--color--orange .ProgressBar__fill{background-color:#c0530b}.theme-light .ProgressBar--color--yellow{border-color:#bfa303 !important}.theme-light .ProgressBar--color--yellow .ProgressBar__fill{background-color:#bfa303}.theme-light .ProgressBar--color--olive{border-color:#889912 !important}.theme-light .ProgressBar--color--olive .ProgressBar__fill{background-color:#889912}.theme-light .ProgressBar--color--green{border-color:#188532 !important}.theme-light .ProgressBar--color--green .ProgressBar__fill{background-color:#188532}.theme-light .ProgressBar--color--teal{border-color:#008882 !important}.theme-light .ProgressBar--color--teal .ProgressBar__fill{background-color:#008882}.theme-light .ProgressBar--color--blue{border-color:#19649c !important}.theme-light .ProgressBar--color--blue .ProgressBar__fill{background-color:#19649c}.theme-light .ProgressBar--color--dark-blue{border-color:#003761 !important}.theme-light .ProgressBar--color--dark-blue .ProgressBar__fill{background-color:#003761}.theme-light .ProgressBar--color--violet{border-color:#4b2897 !important}.theme-light .ProgressBar--color--violet .ProgressBar__fill{background-color:#4b2897}.theme-light .ProgressBar--color--purple{border-color:#7a2696 !important}.theme-light .ProgressBar--color--purple .ProgressBar__fill{background-color:#7a2696}.theme-light .ProgressBar--color--pink{border-color:#b61d73 !important}.theme-light .ProgressBar--color--pink .ProgressBar__fill{background-color:#b61d73}.theme-light .ProgressBar--color--brown{border-color:#7c4d2f !important}.theme-light .ProgressBar--color--brown .ProgressBar__fill{background-color:#7c4d2f}.theme-light .ProgressBar--color--grey{border-color:#bfbfbf !important}.theme-light .ProgressBar--color--grey .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--light-grey{border-color:gray !important}.theme-light .ProgressBar--color--light-grey .ProgressBar__fill{background-color:gray}.theme-light .ProgressBar--color--good{border-color:#44801d !important}.theme-light .ProgressBar--color--good .ProgressBar__fill{background-color:#44801d}.theme-light .ProgressBar--color--average{border-color:#b56b0b !important}.theme-light .ProgressBar--color--average .ProgressBar__fill{background-color:#b56b0b}.theme-light .ProgressBar--color--bad{border-color:#a61c1c !important}.theme-light .ProgressBar--color--bad .ProgressBar__fill{background-color:#a61c1c}.theme-light .ProgressBar--color--label{border-color:#2c2c2c !important}.theme-light .ProgressBar--color--label .ProgressBar__fill{background-color:#2c2c2c}.theme-light .ProgressBar--color--xeno{border-color:#3e2945 !important}.theme-light .ProgressBar--color--xeno .ProgressBar__fill{background-color:#3e2945}.theme-light .Chat{color:#000}.theme-light .Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:crimson;border-radius:10px;transition:font-size 200ms ease-out}.theme-light .Chat__badge:before{content:"x"}.theme-light .Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.theme-light .Chat__scrollButton{position:fixed;right:2em;bottom:1em}.theme-light .Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.theme-light .Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#fff}.theme-light .Chat__reconnected:after{content:"";display:block;margin-top:-0.75em;border-bottom:.1666666667em solid #db2828}.theme-light .Chat__highlight{color:#000}.theme-light .Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:bold}.theme-light .ChatMessage{word-wrap:break-word}.theme-light .ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.theme-light .ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.theme-light .Layout,.theme-light .Layout *{scrollbar-base-color:#f2f2f2;scrollbar-face-color:#d6d6d6;scrollbar-3dlight-color:#eee;scrollbar-highlight-color:#eee;scrollbar-track-color:#f2f2f2;scrollbar-arrow-color:#777;scrollbar-shadow-color:#d6d6d6}.theme-light .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.theme-light .Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.theme-light .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#000;background-color:#eee;background-image:linear-gradient(to bottom, #eeeeee 0%, #eeeeee 100%)}.theme-light .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-light .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-light .Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.theme-light .Window__contentPadding:after{height:0}.theme-light .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-light .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(252,252,252,.25);pointer-events:none}.theme-light .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-light .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-light .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-light .TitleBar{background-color:#eee;border-bottom:1px solid rgba(0,0,0,.25);box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-light .TitleBar__clickable{color:rgba(0,0,0,.5);background-color:#eee;transition:color 250ms ease-out,background-color 250ms ease-out}.theme-light .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-light .TitleBar__title{position:absolute;display:inline-block;top:0;left:46px;left:3.8333333333rem;color:rgba(0,0,0,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap;pointer-events:none}.theme-light .TitleBar__buttons{pointer-events:initial;display:inline-block;width:100%;margin-left:10px}.theme-light .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-light .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px !important;line-height:2.6666666667rem !important}.theme-light .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-light .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-light html,.theme-light body{padding:0;margin:0;height:100%;color:#000}.theme-light body{background:#fff;font-family:Verdana,sans-serif;font-size:13px;line-height:1.2;overflow-x:hidden;overflow-y:scroll;word-wrap:break-word}.theme-light em{font-style:normal;font-weight:bold}.theme-light img{margin:0;padding:0;line-height:1;-ms-interpolation-mode:nearest-neighbor;image-rendering:pixelated}.theme-light img.icon{height:1em;min-height:16px;width:auto;vertical-align:bottom}.theme-light a{color:blue}.theme-light a.visited{color:#f0f}.theme-light a:visited{color:#f0f}.theme-light a.popt{text-decoration:none}.theme-light .popup{position:fixed;top:50%;left:50%;background:#ddd}.theme-light .popup .close{position:absolute;background:#aaa;top:0;right:0;color:#333;text-decoration:none;z-index:2;padding:0 10px;height:30px;line-height:30px}.theme-light .popup .close:hover{background:#999}.theme-light .popup .head{background:#999;color:#ddd;padding:0 10px;height:30px;line-height:30px;text-transform:uppercase;font-size:.9em;font-weight:bold;border-bottom:2px solid green}.theme-light .popup input{border:1px solid #999;background:#fff;margin:0;padding:5px;outline:none;color:#333}.theme-light .popup input[type=text]:hover,.theme-light .popup input[type=text]:active,.theme-light .popup input[type=text]:focus{border-color:green}.theme-light .popup input[type=submit]{padding:5px 10px;background:#999;color:#ddd;text-transform:uppercase;font-size:.9em;font-weight:bold}.theme-light .popup input[type=submit]:hover,.theme-light .popup input[type=submit]:focus,.theme-light .popup input[type=submit]:active{background:#aaa;cursor:pointer}.theme-light .changeFont{padding:10px}.theme-light .changeFont a{display:block;text-decoration:none;padding:3px;color:#333}.theme-light .changeFont a:hover{background:#ccc}.theme-light .highlightPopup{padding:10px;text-align:center}.theme-light .highlightPopup input[type=text]{display:block;width:215px;text-align:left;margin-top:5px}.theme-light .highlightPopup input.highlightColor{background-color:#ff0}.theme-light .highlightPopup input.highlightTermSubmit{margin-top:5px}.theme-light .contextMenu{background-color:#ddd;position:fixed;margin:2px;width:150px}.theme-light .contextMenu a{display:block;padding:2px 5px;text-decoration:none;color:#333}.theme-light .contextMenu a:hover{background-color:#ccc}.theme-light .filterMessages{padding:5px}.theme-light .filterMessages div{padding:2px 0}.theme-light .icon-stack{height:1em;line-height:1em;width:1em;vertical-align:middle;margin-top:-2px}.theme-light .motd{color:#638500;font-family:Verdana,sans-serif;white-space:normal}.theme-light .motd h1,.theme-light .motd h2,.theme-light .motd h3,.theme-light .motd h4,.theme-light .motd h5,.theme-light .motd h6{color:#638500;text-decoration:underline}.theme-light .motd a,.theme-light .motd a:link,.theme-light .motd a:visited,.theme-light .motd a:active,.theme-light .motd a:hover{color:#638500}.theme-light .bold,.theme-light .name,.theme-light .prefix,.theme-light .ooc,.theme-light .looc,.theme-light .adminooc,.theme-light .admin,.theme-light .medal,.theme-light .yell{font-weight:bold}.theme-light .italic,.theme-light .italics{font-style:italic}.theme-light .highlight{background:#ff0}.theme-light h1,.theme-light h2,.theme-light h3,.theme-light h4,.theme-light h5,.theme-light h6{color:blue;font-family:Georgia,Verdana,sans-serif}.theme-light h1.alert,.theme-light h2.alert{color:#000}.theme-light em{font-style:normal;font-weight:bold}.theme-light .ooc{font-weight:bold}.theme-light .adminobserverooc{color:#09c;font-weight:bold}.theme-light .adminooc{color:#700038;font-weight:bold}.theme-light .adminsay{color:#ff4500;font-weight:bold}.theme-light .admin{color:#4473ff;font-weight:bold}.theme-light .name{font-weight:bold}.theme-light .deadsay{color:#5c00e6}.theme-light .binarysay{color:#20c20e;background-color:#000;display:block}.theme-light .binarysay a{color:lime}.theme-light .binarysay a:active,.theme-light .binarysay a:visited{color:#8f8}.theme-light .radio{color:green}.theme-light .sciradio{color:#939}.theme-light .comradio{color:#948f02}.theme-light .secradio{color:#a30000}.theme-light .medradio{color:#337296}.theme-light .engradio{color:#fb5613}.theme-light .sentryradio{color:#844300}.theme-light .suppradio{color:#a8732b}.theme-light .servradio{color:#6eaa2c}.theme-light .syndradio{color:#6d3f40}.theme-light .gangradio{color:#ac2ea1}.theme-light .centcomradio{color:#686868}.theme-light .aiprivradio{color:#f0f}.theme-light .redteamradio{color:red}.theme-light .blueteamradio{color:blue}.theme-light .greenteamradio{color:lime}.theme-light .yellowteamradio{color:#d1ba22}.theme-light .yell{font-weight:bold}.theme-light .alert{color:red}.theme-light h1.alert,.theme-light h2.alert{color:#000}.theme-light .userdanger{color:red;font-weight:bold;font-size:185%}.theme-light .bolddanger{color:red;font-weight:bold}.theme-light .danger{color:red}.theme-light .tinydanger{color:red;font-size:85%}.theme-light .smalldanger{color:red;font-size:90%}.theme-light .warning{color:red;font-style:italic}.theme-light .alertwarning{color:red;font-weight:bold}.theme-light .boldwarning{color:red;font-style:italic;font-weight:bold}.theme-light .announce{color:#228b22;font-weight:bold}.theme-light .boldannounce{color:red;font-weight:bold}.theme-light .minorannounce{font-weight:bold;font-size:185%}.theme-light .greenannounce{color:lime;font-weight:bold}.theme-light .rose{color:#ff5050}.theme-light .info{color:#00c}.theme-light .notice{color:#009}.theme-light .staff_ic{color:#009}.theme-light .tinynotice{color:#009;font-size:85%}.theme-light .tinynoticeital{color:#009;font-style:italic;font-size:85%}.theme-light .smallnotice{color:#009;font-size:90%}.theme-light .smallnoticeital{color:#009;font-style:italic;font-size:90%}.theme-light .boldnotice{color:#009;font-weight:bold}.theme-light .hear{color:#009;font-style:italic}.theme-light .adminnotice{color:blue}.theme-light .adminhelp{color:red;font-weight:bold}.theme-light .unconscious{color:blue;font-weight:bold}.theme-light .suicide{color:#ff5050;font-style:italic}.theme-light .green{color:#03ff39}.theme-light .grey{color:#838383}.theme-light .red{color:red}.theme-light .blue{color:blue}.theme-light .nicegreen{color:#14a833}.theme-light .boldnicegreen{color:#14a833;font-weight:bold}.theme-light .cult{color:#973e3b}.theme-light .cultitalic{color:#973e3b;font-style:italic}.theme-light .cultbold{color:#973e3b;font-style:italic;font-weight:bold}.theme-light .cultboldtalic{color:#973e3b;font-weight:bold;font-size:185%}.theme-light .cultlarge{color:#973e3b;font-weight:bold;font-size:185%}.theme-light .narsie{color:#973e3b;font-weight:bold;font-size:925%}.theme-light .narsiesmall{color:#973e3b;font-weight:bold;font-size:370%}.theme-light .colossus{color:#7f282a;font-size:310%}.theme-light .hierophant{color:#609;font-weight:bold;font-style:italic}.theme-light .hierophant_warning{color:#609;font-style:italic}.theme-light .purple{color:#5e2d79}.theme-light .holoparasite{color:#35333a}.theme-light .revennotice{color:#1d2953}.theme-light .revenboldnotice{color:#1d2953;font-weight:bold}.theme-light .revenbignotice{color:#1d2953;font-weight:bold;font-size:185%}.theme-light .revenminor{color:#823abb}.theme-light .revenwarning{color:#760fbb;font-style:italic}.theme-light .revendanger{color:#760fbb;font-weight:bold;font-size:185%}.theme-light .deconversion_message{color:#5000a0;font-size:185%;font-style:italic}.theme-light .ghostalert{color:#5c00e6;font-style:italic;font-weight:bold}.theme-light .alien{color:#543354}.theme-light .noticealien{color:#00c000}.theme-light .alertalien{color:#00c000;font-weight:bold}.theme-light .changeling{color:purple;font-style:italic}.theme-light .alertsyndie{color:red;font-size:185%;font-weight:bold}.theme-light .spider{color:#4d004d;font-weight:bold;font-size:185%}.theme-light .interface{color:#303}.theme-light .sans{font-family:"Comic Sans MS",cursive,sans-serif}.theme-light .papyrus{font-family:"Papyrus",cursive,sans-serif}.theme-light .robot{font-family:"Courier New",cursive,sans-serif}.theme-light .tape_recorder{color:maroon;font-family:"Courier New",cursive,sans-serif}.theme-light .command_headset{font-weight:bold;font-size:160%}.theme-light .small{font-size:60%}.theme-light .big{font-size:185%}.theme-light .reallybig{font-size:245%}.theme-light .extremelybig{font-size:310%}.theme-light .greentext{color:lime;font-size:185%}.theme-light .redtext{color:red;font-size:185%}.theme-light .clown{color:#ff69bf;font-size:160%;font-family:"Comic Sans MS",cursive,sans-serif;font-weight:bold}.theme-light .singing{font-family:"Trebuchet MS",cursive,sans-serif;font-style:italic}.theme-light .his_grace{color:#15d512;font-family:"Courier New",cursive,sans-serif;font-style:italic}.theme-light .hypnophrase{color:#0d0d0d;font-weight:bold;animation:hypnocolor 1500ms infinite;animation-direction:alternate}@keyframes hypnocolor{0%{color:#0d0d0d}25%{color:#410194}50%{color:#7f17d8}75%{color:#410194}100%{color:#3bb5d3}}.theme-light .phobia{color:#d00;font-weight:bold;animation:phobia 750ms infinite}@keyframes phobia{0%{color:#0d0d0d}50%{color:#d00}100%{color:#0d0d0d}}.theme-light .icon{height:1em;width:auto}.theme-light .bigicon{font-size:2.5em}.theme-light .memo{color:#638500;text-align:center}.theme-light .memoedit{text-align:center;font-size:125%}.theme-light .abductor{color:purple;font-style:italic}.theme-light .mind_control{color:#a00d6f;font-size:100%;font-weight:bold;font-style:italic}.theme-light .slime{color:#00ced1}.theme-light .drone{color:#848482}.theme-light .monkey{color:#975032}.theme-light .swarmer{color:#2c75ff}.theme-light .resonate{color:#298f85}.theme-light .monkeyhive{color:#774704}.theme-light .monkeylead{color:#774704;font-size:80%}.theme-light .connectionClosed,.theme-light .fatalError{background:red;color:#fff;padding:5px}.theme-light .connectionClosed.restored{background:green}.theme-light .internal.boldnshit{color:blue;font-weight:bold}.theme-light .text-normal{font-weight:normal;font-style:normal}.theme-light .hidden{display:none;visibility:hidden}.theme-light .ml-1{margin-left:1em}.theme-light .ml-2{margin-left:2em}.theme-light .ml-3{margin-left:3em}.theme-light .xooc{color:#6c0094;font-weight:bold;font-size:140%}.theme-light .mooc{color:#090;font-weight:bold;font-size:140%}.theme-light .yooc{color:#999600;font-weight:bold;font-size:140%}.theme-light .headminsay{color:#5a0a7f;font-weight:bold}.theme-light .radio{color:#4e4e4e}.theme-light .deptradio{color:#939}.theme-light .comradio{color:#004080}.theme-light .centradio{color:#5c5c8a}.theme-light .cryoradio{color:#554e3f}.theme-light .hcradio{color:#318779}.theme-light .pvstradio{color:#9b0612}.theme-light .airadio{color:#f0f}.theme-light .secradio{color:#a30000}.theme-light .engradio{color:#a66300}.theme-light .sentryradio{color:#844300}.theme-light .medradio{color:#008160}.theme-light .supradio{color:#5f4519}.theme-light .jtacradio{color:#702963}.theme-light .intelradio{color:#027d02}.theme-light .wyradio{color:#fe9b24}.theme-light .pmcradio{color:#136957}.theme-light .vairadio{color:#943d0a}.theme-light .cmbradio{color:#1b748c}.theme-light .clfradio{color:#6f679c}.theme-light .alpharadio{color:#ea0000}.theme-light .bravoradio{color:#c68610}.theme-light .charlieradio{color:#a5a}.theme-light .deltaradio{color:#007fcf}.theme-light .echoradio{color:#3a7e65}.theme-light .medium{font-size:110%}.theme-light .big{font-size:115%}.theme-light .large{font-size:125%}.theme-light .extra_large{font-size:130%}.theme-light .huge{font-size:150%}.theme-light .underline{text-decoration:underline}.theme-light .orange{color:#eca100}.theme-light .normal{font-style:normal}.theme-light .attack{color:red}.theme-light .moderate{color:#c00}.theme-light .disarm{color:#900}.theme-light .passive{color:#600}.theme-light .helpful{color:#368f31}.theme-light .scanner{color:red}.theme-light .scannerb{color:red;font-weight:bold}.theme-light .scannerburn{color:orange}.theme-light .scannerburnb{color:orange;font-weight:bold}.theme-light .rose{color:#ff5050}.theme-light .debuginfo{color:#493d26;font-style:italic}.theme-light .xenonotice{color:#2a623d}.theme-light .xenoboldnotice{color:#2a623d;font-style:italic}.theme-light .xenowarning{color:#2a623d;font-style:italic}.theme-light .xenominorwarning{color:#2a623d;font-weight:bold;font-style:italic}.theme-light .xenodanger{color:#2a623d;font-weight:bold}.theme-light .avoidharm{color:#72a0e5;font-weight:bold}.theme-light .highdanger{color:red;font-weight:bold;font-size:140%}.theme-light .xenohighdanger{color:#2a623d;font-weight:bold;font-size:140%}.theme-light .xenoannounce{color:#1a472a;font-family:book-antiqua;font-weight:bold;font-size:140%}.theme-light .yautjabold{color:purple;font-weight:bold}.theme-light .yautjaboldbig{color:purple;font-weight:bold;font-size:120%}.theme-light .objectivebig{font-weight:bold;font-size:130%}.theme-light .objectivegreen{color:lime}.theme-light .objectivered{color:red}.theme-light .objectivesuccess{color:lime;font-weight:bold;font-size:110%}.theme-light .objectivefail{color:red;font-weight:bold;font-size:110%}.theme-light .xenotalk,.theme-light .xeno{color:#900090;font-style:italic}.theme-light .xenoleader{color:#730d73;font-style:italic;font-size:125%}.theme-light .xenoqueen{color:#730d73;font-style:italic;font-weight:bold;font-size:125%}.theme-light .newscaster{color:maroon}.theme-light .role_header{color:#db0000;display:block;text-align:center;font-weight:bold;font-family:trebuchet-ms;font-size:150%}.theme-light .role_body{color:#009;display:block;text-align:center;font-size:125%}.theme-light .round_header{color:#db0000;display:block;text-align:center;font-family:courier;font-weight:bold;font-size:180%}.theme-light .round_body{color:#001427;display:block;text-align:center;font-family:trebuchet-ms;font-weight:bold;font-size:125%}.theme-light .event_announcement{color:#600d48;font-family:arial-narrow;font-weight:bold;font-size:125%}.theme-light .announce_header{color:#000;font-weight:bold;font-size:150%}.theme-light .announce_header_blue{color:#009;font-weight:bold;font-size:150%}.theme-light .announce_body{color:red;font-weight:normal;font-size:125%}.theme-light .centerbold{display:block;text-align:center;font-weight:bold}.theme-light .mod{color:#735638;font-weight:bold}.theme-light .modooc{color:#184880;font-weight:bold}.theme-light .adminmod{color:#402a14;font-weight:bold}.theme-light .mentorsay{color:#b38c32;font-weight:bold}.theme-light .mentorhelp{color:#007e00;font-weight:bold}.theme-light .mentorbody{color:#da6200;font-weight:bold}.theme-light .mentorstaff{color:#876101;font-weight:bold}.theme-light .staffsay{color:#876101;font-weight:bold}.theme-light .tajaran{color:#803b56}.theme-light .tajaran_signlang{color:#941c1c}.theme-light .skrell{color:#00ced1}.theme-light .soghun{color:#228b22}.theme-light .changeling{color:purple}.theme-light .vox{color:#a0a}.theme-light .monkey{color:#966c47}.theme-light .german{color:#858f1e;font-family:"Times New Roman",Times,serif}.theme-light .spanish{color:#cf982b}.theme-light .japanese{color:#940927}.theme-light .chinese{color:#fe1919}.theme-light .zombie{color:#216163;font-style:italic}.theme-light .commando{color:#fe9b24;font-style:bold}.theme-light .rough{font-family:trebuchet-ms,cursive,sans-serif}.theme-light .say_quote{font-family:Georgia,Verdana,sans-serif}.theme-light .admin .message{color:#314cad}.theme-light .admin .prefix{font-weight:bolder}.theme-light .pm{font-size:110%}.theme-light .retro_translator{font-weight:bold}.theme-light .yautja_translator{color:#a00;font-weight:bold;animation:glitch .5s infinite}@keyframes glitch{25%{color:#a00;transform:translate(-2px, -1px)}50%{color:#be0000;transform:translate(1px, -2px)}75%{color:#8d0000;transform:translate(-1px, 2px)}100%{color:#830000;transform:translate(1px, 1px)}}.theme-light .examine_block{background:#f2f7fa;border:1px solid #111a27;margin:.5em;padding:.5em .75em}.theme-light .examine_block .icon{width:1.5em;height:1.5em;margin:0;padding:0}.theme-light .tooltip{font-style:italic;border-bottom:1px dashed #000} diff --git a/tools/ci/check_grep.sh b/tools/ci/check_grep.sh index 4a223fe3d3c5..891c17fea4b6 100644 --- a/tools/ci/check_grep.sh +++ b/tools/ci/check_grep.sh @@ -147,12 +147,12 @@ if grep -P '^/[\w/]\S+\(.*(var/|, ?var/.*).*\)' $code_files; then st=1 fi; -#part "unmanaged global vars" -#if grep -P '^/*var/' $code_files; then -# echo -# echo -e "${RED}ERROR: Unmanaged global var use detected in code, please use the helpers.${NC}" -# st=1 -#fi; +part "unmanaged global vars" +if grep -P '^/*var/' $code_files; then + echo + echo -e "${RED}ERROR: Unmanaged global var use detected in code, please use the helpers.${NC}" + st=1 +fi; part "map json naming" @@ -198,6 +198,13 @@ if $grep 'balloon_alert\(.*?, ?"[A-Z]' $code_files; then st=1 fi; +part "to_chat without user" +if $grep 'to_chat\(("|SPAN)' $code_files; then + echo + echo -e "${RED}ERROR: to_chat() requires a target as its first argument.${NC}" + st=1 +fi; + section "515 Proc Syntax" part "proc ref syntax" if $grep '\.proc/' $code_x_515 ; then
    [tagger_locations[i]][GLOB.tagger_locations[i]]