diff --git a/code/__DEFINES/dropships.dm b/code/__DEFINES/dropships.dm index f7df570a28..d53e7c68d8 100644 --- a/code/__DEFINES/dropships.dm +++ b/code/__DEFINES/dropships.dm @@ -10,3 +10,8 @@ #define DROPSHIP_MIN_AUTO_DELAY 10 SECONDS #define DROPSHIP_AUTO_RETRY_COOLDOWN 20 SECONDS #define DROPSHIP_MEDEVAC_COOLDOWN 20 SECONDS + +//Hatches states +#define SHUTTLE_DOOR_BROKEN -1 +#define SHUTTLE_DOOR_UNLOCKED 0 +#define SHUTTLE_DOOR_LOCKED 1 diff --git a/code/datums/entities/player.dm b/code/datums/entities/player.dm index 00c76d7b95..ddb52cb8d0 100644 --- a/code/datums/entities/player.dm +++ b/code/datums/entities/player.dm @@ -469,6 +469,7 @@ BSQL_PROTECT_DATUM(/datum/entity/player) set waitfor=0 WAIT_DB_READY load_player_data_info(get_player_from_key(ckey)) + check_discord_link() /client/proc/load_player_data_info(datum/entity/player/player) if(ckey != player.ckey) @@ -482,6 +483,25 @@ BSQL_PROTECT_DATUM(/datum/entity/player) record_login_triplet(player.ckey, address, computer_id) player_data.sync() +/client/proc/check_discord_link() + var/datum/view_record/discord_link/current_link = locate() in DB_VIEW(/datum/view_record/discord_link, DB_COMP("player_id", DB_EQUALS, player_data.id)) + + if(!current_link) + + if(player_data.discord_link_id != null) + player_data.discord_link_id = null + player_data.save() + player_data.sync() + + return + + if(player_data.discord_link_id == current_link.id) + return + + player_data.discord_link_id = current_link.id + player_data.save() + player_data.sync() + /datum/entity/player/proc/check_ban(computer_id, address, is_telemetry) . = list() diff --git a/code/datums/skills/uscm.dm b/code/datums/skills/uscm.dm index 871278ff23..2da19793e5 100644 --- a/code/datums/skills/uscm.dm +++ b/code/datums/skills/uscm.dm @@ -287,7 +287,7 @@ COMMAND STAFF SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED, SKILL_MEDICAL = SKILL_MEDICAL_MEDIC, SKILL_POLICE = SKILL_POLICE_FLASH, - SKILL_VEHICLE = SKILL_VEHICLE_SMALL, + SKILL_VEHICLE = SKILL_VEHICLE_LARGE, SKILL_JTAC = SKILL_JTAC_EXPERT, SKILL_INTEL = SKILL_INTEL_TRAINED, SKILL_SURGERY = SKILL_SURGERY_NOVICE, diff --git a/code/game/jobs/job/command/cic/staffofficer.dm b/code/game/jobs/job/command/cic/staffofficer.dm index 9f7d1d09bf..8e4e7c0cfa 100644 --- a/code/game/jobs/job/command/cic/staffofficer.dm +++ b/code/game/jobs/job/command/cic/staffofficer.dm @@ -11,7 +11,7 @@ flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/so gear_preset_secondary = /datum/equipment_preset/uscm_ship/so/lesser_rank - entry_message_body = "Your job is to monitor the Marines, man the CIC, and listen to your superior officers. You are in charge of logistics and the overwatch system. You are also in line to take command after other eligible superior commissioned officers." + entry_message_body = "Your job is to conduct the briefing for the platoon, monitor the operation, and listen to your superior officers. You are in charge of the platoon for the current operation and supported by your Company Command.
They will give your orders VIA the telephone in your office once they are ready.
You remember that you've stored your personal gear are located in your personal quarters.
Your job involves heavy roleplay and requires you to behave like an officer and to stay in character at all times." job_options = list(FIRST_LT_VARIANT = "1stLt", SECOND_LT_VARIANT = "2ndLt") @@ -52,6 +52,7 @@ AddTimelock(/datum/job/command/bridge, list( /datum/job/command/bridge/ai total_positions = 1 spawn_positions = 1 + prime_priority = TRUE /datum/job/command/bridge/ai/set_spawn_positions(count) return spawn_positions diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 34671be60f..103c826ce5 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -41,6 +41,9 @@ /// If TRUE, this job will spawn w/ a cryo emergency kit during evac/red alert var/gets_emergency_kit = TRUE + /// Whether or not linking your discord account can let you get prime priority for this role + var/prime_priority = FALSE + /datum/job/New() . = ..() diff --git a/code/game/jobs/job/marine/marine.dm b/code/game/jobs/job/marine/marine.dm index e07c1edd31..c50a0420a9 100644 --- a/code/game/jobs/job/marine/marine.dm +++ b/code/game/jobs/job/marine/marine.dm @@ -1,5 +1,5 @@ /datum/job/marine - supervisors = "the acting squad leader" + supervisors = "the acting platoon leader" selection_class = "job_marine" total_positions = 8 spawn_positions = 8 @@ -7,7 +7,7 @@ /datum/job/marine/generate_entry_message(mob/living/carbon/human/current_human) if(current_human.assigned_squad) - entry_message_intro = "You are a [title]!
You have been assigned to: [lowertext(current_human.assigned_squad.name)] squad.[Check_WO() ? "" : " Make your way to the cafeteria for some post-cryosleep chow, and then get equipped in your squad's prep room." ]" + entry_message_intro = "You are a [title]!
You have been assigned to the [lowertext(current_human.assigned_squad.name)] platoon.[Check_WO() ? "" : " Make your way to the cafeteria for some post-cryosleep chow, and then get equipped in your team's prep room." ]" return ..() /datum/job/marine/generate_entry_conditions(mob/living/carbon/human/current_human) diff --git a/code/game/jobs/job/marine/squad/leader.dm b/code/game/jobs/job/marine/squad/leader.dm index 24233c95d5..ebb0cd25a9 100644 --- a/code/game/jobs/job/marine/squad/leader.dm +++ b/code/game/jobs/job/marine/squad/leader.dm @@ -10,7 +10,7 @@ flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADD_TO_SQUAD gear_preset = /datum/equipment_preset/uscm/leader gear_preset_secondary = /datum/equipment_preset/uscm/leader/lesser_rank - entry_message_body = "You are responsible for the men and women of your squad. Make sure they are on task, working together, and communicating. You are also in charge of communicating with command and letting them know about the situation first hand. Keep out of harm's way." + entry_message_body = "You are responsible for the men and women of your entire platoon. Make sure they are on task, working together, and communicating. You are also in charge of communicating with command and letting them know about the situation first hand. Keep out of harm's way.
You remember that you've stored your personal gear and uniform are located in the dorm or locker rooms." job_options = list(GYSGT_VARIANT = "GYSGT", SSGT_VARIANT = "SSGT") @@ -53,6 +53,7 @@ AddTimelock(/datum/job/marine/leader, list( /datum/job/marine/leader/ai total_positions = 1 spawn_positions = 1 + prime_priority = TRUE /datum/job/marine/leader/ai/upp title = JOB_SQUAD_LEADER_UPP diff --git a/code/game/jobs/job/marine/squad/medic.dm b/code/game/jobs/job/marine/squad/medic.dm index 0b6f9f0702..02b438c048 100644 --- a/code/game/jobs/job/marine/squad/medic.dm +++ b/code/game/jobs/job/marine/squad/medic.dm @@ -10,7 +10,7 @@ flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADD_TO_SQUAD gear_preset = /datum/equipment_preset/uscm/medic gear_preset_secondary = /datum/equipment_preset/uscm/medic/lesser_rank - 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." + 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.
You remember that you've stored your personal gear and uniform are located in your medical office." job_options = list(CPL_VARIANT = "CPL", LCPL_VARIANT = "LCPL") diff --git a/code/game/jobs/job/marine/squad/smartgunner.dm b/code/game/jobs/job/marine/squad/smartgunner.dm index e10724355c..6c27f5ec27 100644 --- a/code/game/jobs/job/marine/squad/smartgunner.dm +++ b/code/game/jobs/job/marine/squad/smartgunner.dm @@ -11,7 +11,7 @@ flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADD_TO_SQUAD gear_preset = /datum/equipment_preset/uscm/sg gear_preset_secondary = /datum/equipment_preset/uscm/sg/lesser_rank - entry_message_body = "You are the smartgunner. Your task is to provide heavy weapons support." + entry_message_body = "You are a specialized automatic rifleman. Your task is to provide heavy weapons support for your squad.
You remember that you've stored your personal gear and uniform are located in the dorm or locker rooms." job_options = list(CPL_VARIANT = "CPL", LCPL_VARIANT = "LCPL") diff --git a/code/game/jobs/job/marine/squad/standard.dm b/code/game/jobs/job/marine/squad/standard.dm index 0269366bbf..71533679d9 100644 --- a/code/game/jobs/job/marine/squad/standard.dm +++ b/code/game/jobs/job/marine/squad/standard.dm @@ -13,7 +13,7 @@ job_options = list(PFC_VARIANT = "PFC", PVT_VARIANT = "PVT") /datum/job/marine/standard/on_config_load() - entry_message_body = "You are a rank-and-file Marine of the USCM, and that is your strength. What you lack alone, you gain standing shoulder to shoulder with the men and women of the corps. Ooh-rah!" + entry_message_body = "You are a rank-and-file Soldier of your standing army, and that is your strength. What you lack alone, you gain standing shoulder to shoulder with the men and women of the platoon. Ooh-rah!
You remember that you've stored your personal gear and uniform are located in the dorm or locker rooms." return ..() /datum/job/marine/standard/set_spawn_positions(count) diff --git a/code/game/jobs/job/marine/squad/tl.dm b/code/game/jobs/job/marine/squad/tl.dm index 987c5d58d8..be876dc0b3 100644 --- a/code/game/jobs/job/marine/squad/tl.dm +++ b/code/game/jobs/job/marine/squad/tl.dm @@ -8,7 +8,7 @@ allow_additional = 1 flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADD_TO_SQUAD gear_preset = /datum/equipment_preset/uscm/tl - entry_message_body = "You are the Team Leader.Your task is to assist the squad leader in leading the squad as well as utilize ordnance such as orbital bombardments, CAS, and mortar as well as coordinating resupply with Requisitions and CIC. If the squad leader dies, you are expected to lead in their place." + entry_message_body = "You are the Squad Leader. Your task is leading the designated squad and utilize available ordnance. If the platoon leader dies, you are expected to lead in their place.
You remember that you've stored your personal gear and uniform are located in the dorm or locker rooms." job_options = list(SGT_VARIANT = "SGT") diff --git a/code/game/jobs/role_authority.dm b/code/game/jobs/role_authority.dm index a50e25ae9e..42ffc22570 100644 --- a/code/game/jobs/role_authority.dm +++ b/code/game/jobs/role_authority.dm @@ -18,9 +18,10 @@ var/global/datum/authority/branch/role/RoleAuthority #define RETURN_TO_LOBBY 2 #define NEVER_PRIORITY 0 -#define HIGH_PRIORITY 1 -#define MED_PRIORITY 2 -#define LOW_PRIORITY 3 +#define PRIME_PRIORITY 1 +#define HIGH_PRIORITY 2 +#define MED_PRIORITY 3 +#define LOW_PRIORITY 4 #define SHIPSIDE_ROLE_WEIGHT 0.25 @@ -245,37 +246,19 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou if(!length(roles_to_assign) || !length(unassigned_players)) return + log_debug("ASSIGNMENT: Starting prime priority assignments.") + for(var/mob/new_player/cycled_unassigned in shuffle(unassigned_players)) + assign_role_to_player_by_priority(cycled_unassigned, roles_to_assign, unassigned_players, PRIME_PRIORITY) + + log_debug("ASSIGNMENT: Starting regular priority assignments.") for(var/mob/new_player/cycled_unassigned in shuffle(unassigned_players)) var/player_assigned_job = FALSE - log_debug("ASSIGNMENT: We have started assigning for [cycled_unassigned].") for(var/priority in HIGH_PRIORITY to LOW_PRIORITY) - var/wanted_jobs_by_name = shuffle(cycled_unassigned.client?.prefs?.get_jobs_by_priority(priority)) - log_debug("ASSIGNMENT: We have started cycled through priority [priority] for [cycled_unassigned].") - - for(var/job_name in wanted_jobs_by_name) - log_debug("ASSIGNMENT: We are cycling through wanted jobs and are at [job_name] for [cycled_unassigned].") - if(job_name in roles_to_assign) - log_debug("ASSIGNMENT: We have found [job_name] in roles to assign for [cycled_unassigned].") - var/datum/job/actual_job = roles_to_assign[job_name] - - if(assign_role(cycled_unassigned, actual_job)) - log_debug("ASSIGNMENT: We have assigned [job_name] to [cycled_unassigned].") - unassigned_players -= cycled_unassigned - - if(actual_job.spawn_positions != -1 && actual_job.current_positions >= actual_job.spawn_positions) - roles_to_assign -= job_name - log_debug("ASSIGNMENT: We have ran out of slots for [job_name] and it has been removed from roles to assign.") - - player_assigned_job = TRUE - break - + player_assigned_job = assign_role_to_player_by_priority(cycled_unassigned, roles_to_assign, unassigned_players, priority) if(player_assigned_job) - log_debug("ASSIGNMENT: [cycled_unassigned] has been assigned a job and we are breaking.") break - log_debug("ASSIGNMENT: [cycled_unassigned] did not get a job at priority [priority], moving to next priority level.") - if(!length(roles_to_assign)) log_debug("ASSIGNMENT: No more roles to assign, breaking.") break @@ -321,10 +304,39 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou log_debug("ASSIGNMENT: [cycled_unassigned] has opted for return to lobby alternate option.") cycled_unassigned.ready = 0 - log_debug("ASSIGNMENT: Assigning complete. Players unassigned: [length(unassigned_players)] Jobs unassigned: [length(roles_to_assign)]") + log_debug("ASSIGNMENT: Assignment complete. Players unassigned: [length(unassigned_players)] Jobs unassigned: [length(roles_to_assign)]") return roles_to_assign +/datum/authority/branch/role/proc/assign_role_to_player_by_priority(mob/new_player/cycled_unassigned, list/roles_to_assign, list/unassigned_players, priority) + log_debug("ASSIGNMENT: We have started cycled through priority [priority] for [cycled_unassigned].") + var/wanted_jobs_by_name = shuffle(cycled_unassigned.client?.prefs?.get_jobs_by_priority(priority)) + var/player_assigned_job = FALSE + + for(var/job_name in wanted_jobs_by_name) + log_debug("ASSIGNMENT: We are cycling through wanted jobs and are at [job_name] for [cycled_unassigned].") + if(job_name in roles_to_assign) + log_debug("ASSIGNMENT: We have found [job_name] in roles to assign for [cycled_unassigned].") + var/datum/job/actual_job = roles_to_assign[job_name] + + if(assign_role(cycled_unassigned, actual_job)) + log_debug("ASSIGNMENT: We have assigned [job_name] to [cycled_unassigned].") + unassigned_players -= cycled_unassigned + + if(actual_job.spawn_positions != -1 && actual_job.current_positions >= actual_job.spawn_positions) + roles_to_assign -= job_name + log_debug("ASSIGNMENT: We have ran out of slots for [job_name] and it has been removed from roles to assign.") + + player_assigned_job = TRUE + break + + if(player_assigned_job) + log_debug("ASSIGNMENT: [cycled_unassigned] has been assigned a job.") + return player_assigned_job + + log_debug("ASSIGNMENT: [cycled_unassigned] did not get a job at priority [priority].") + return player_assigned_job + /** * Calculate role balance weight for one person joining as that role. This weight is used * when calculating the number of xenos both roundstart and burrowed larva they get for diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm index 8b73588f1d..5d6c66309d 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)) diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm index 57e27cc60d..b20a052d26 100644 --- a/code/game/machinery/doors/airlock_control.dm +++ b/code/game/machinery/doors/airlock_control.dm @@ -123,15 +123,15 @@ radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK) -/obj/structure/machinery/door/airlock/open(surpress_send) +/obj/structure/machinery/door/airlock/open(forced) . = ..() - if(!surpress_send) send_status() + if(!forced) + send_status() - -/obj/structure/machinery/door/airlock/close(surpress_send) +/obj/structure/machinery/door/airlock/close(forced) . = ..() - if(!surpress_send) send_status() - + if(!forced) + send_status() /obj/structure/machinery/door/airlock/proc/set_frequency(new_frequency) SSradio.remove_object(src, frequency) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 99353a6688..2e79604e87 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -214,7 +214,7 @@ flick("door_deny", src) return -/obj/structure/machinery/door/proc/open(forced=0) +/obj/structure/machinery/door/proc/open(forced) if(!density) return TRUE if(operating || !loc) diff --git a/code/game/machinery/doors/multi_tile.dm b/code/game/machinery/doors/multi_tile.dm index cddcfae08c..c60c08dc03 100644 --- a/code/game/machinery/doors/multi_tile.dm +++ b/code/game/machinery/doors/multi_tile.dm @@ -241,10 +241,42 @@ no_panel = 1 not_weldable = 1 var/queen_pryable = TRUE + var/obj/docking_port/mobile/marine_dropship/linked_dropship /obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/ex_act(severity) return +/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/attackby(obj/item/item, mob/user) + if(HAS_TRAIT(item, TRAIT_TOOL_MULTITOOL)) + var/direction + switch(id) + if("starboard_door") + direction = "starboard" + if("port_door") + direction = "port" + if("aft_door") + direction = "aft" + if(!linked_dropship || !linked_dropship.door_control.door_controllers[direction]) + return ..() + var/datum/door_controller/single/control = linked_dropship.door_control.door_controllers[direction] + if (control.status != SHUTTLE_DOOR_BROKEN) + return ..() + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + to_chat(user, SPAN_WARNING("You don't seem to understand how to restore a remote connection to [src].")) + return + if(user.action_busy) + return + + to_chat(user, SPAN_WARNING("You begin to restore the remote connection to [src].")) + if(!do_after(user, 5 SECONDS, INTERRUPT_ALL, BUSY_ICON_BUILD)) + to_chat(user, SPAN_WARNING("You fail to restore a remote connection to [src].")) + return + unlock(TRUE) + close(FALSE) + control.status = SHUTTLE_DOOR_UNLOCKED + to_chat(user, SPAN_WARNING("You successfully restored the remote connection to [src].")) + return + ..() /obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/unlock() if(is_reserved_level(z)) @@ -258,13 +290,32 @@ if(!queen_pryable) return ..() - if(!locked) - return ..() - - to_chat(xeno, SPAN_NOTICE("You try and force the doors open")) + if(xeno.action_busy) + return + + var/direction + switch(id) + if("starboard_door") + direction = "starboard" + if("port_door") + direction = "port" + if("aft_door") + direction = "aft" + var/datum/door_controller/single/control + if(linked_dropship && linked_dropship.door_control.door_controllers[direction]) + control = linked_dropship.door_control.door_controllers[direction] + + if(control && control.status == SHUTTLE_DOOR_BROKEN) + to_chat(xeno, SPAN_NOTICE("The door is already disabled.")) + return + + to_chat(xeno, SPAN_WARNING("You try and force the doors open!")) if(do_after(xeno, 3 SECONDS, INTERRUPT_ALL, BUSY_ICON_HOSTILE)) + if(control) + control.status = SHUTTLE_DOOR_BROKEN unlock(TRUE) open(1) + open(TRUE) lock(TRUE) /obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/ds1 @@ -275,6 +326,23 @@ 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/ds1/midway + name = "\improper Midway crew hatch" + +/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/dropshipside/ds2/cyclone + name = "\improper Cyclone crew hatch" + /obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/upp name = "\improper Akademia Nauk cargo door" icon = 'icons/obj/structures/doors/dropshipupp_cargo.dmi' @@ -329,7 +397,7 @@ continue INVOKE_ASYNC(atom_movable, TYPE_PROC_REF(/atom/movable, throw_atom), projected, 1, SPEED_FAST, null, FALSE) -/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/lifeboat/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override) +/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/lifeboat/connect_to_shuttle(mapload, obj/docking_port/mobile/port, obj/docking_port/stationary/dock) . = ..() if(istype(port, /obj/docking_port/mobile/crashable/lifeboat)) var/obj/docking_port/mobile/crashable/lifeboat/lifeboat = port 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 60150ec777..42aa2e13b8 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 @@ -95,7 +95,9 @@ list("BACKPACK", -1, null, null, null), list("Lightweight IMP Backpack", round(scale * 15), /obj/item/storage/backpack/marine, VENDOR_ITEM_REGULAR), + list("USCM Technician Backpack", round(scale * 15), /obj/item/storage/backpack/marine/tech, VENDOR_ITEM_REGULAR), list("USCM Satchel", round(scale * 15), /obj/item/storage/backpack/marine/satchel, VENDOR_ITEM_REGULAR), + list("Technician Chestrig", round(scale * 15), /obj/item/storage/backpack/marine/satchel/tech, VENDOR_ITEM_REGULAR), list("Shotgun Scabbard", round(scale * 5), /obj/item/storage/large_holster/m37, VENDOR_ITEM_REGULAR), list("RESTRICTED BACKPACKS", -1, null, null), diff --git a/code/game/objects/structures/gun_rack.dm b/code/game/objects/structures/gun_rack.dm index ac32b0162d..400002fa35 100644 --- a/code/game/objects/structures/gun_rack.dm +++ b/code/game/objects/structures/gun_rack.dm @@ -54,3 +54,24 @@ max_stored = 6 initial_stored = 6 allowed_type = /obj/item/weapon/gun/rifle/type71 + +/obj/structure/gun_rack/apc + name = "APC ammo compartment" + icon_state = "frontal" + desc = "Uhoh. You shouldn't be seeing this." + +/obj/structure/gun_rack/apc/frontal + name = "frontal cannon ammo storage compartment" + icon_state = "frontal" + desc = "A small compartment that stores ammunition for the APC's 'Bleihagel RE-RE700 Frontal Cannon'." + max_stored = 2 + initial_stored = 0 + allowed_type = /obj/item/ammo_magazine/hardpoint/m56_cupola/frontal_cannon + +/obj/structure/gun_rack/apc/boyars + name = "dual cannon ammo storage compartment" + icon_state = "boyars" + desc = "A small compartment that stores ammunition for the APC's 'PARS-159 Boyars Dualcannon'." + max_stored = 2 + initial_stored = 0 + allowed_type = /obj/item/ammo_magazine/hardpoint/boyars_dualcannon diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 8d6441293f..c059301467 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -622,6 +622,23 @@ icon_state = "clothtable" table_prefix = "cloth" +/obj/structure/surface/table/reinforced/toc + name = "operations table" + desc = "A square metal surface resting on its fat metal bottom. You can't flip something that doesn't have legs." + icon_state = "tocWtable" + table_prefix = "toc" + +/obj/structure/surface/table/reinforced/toc/update_icon() + return + +/obj/structure/surface/table/reinforced/toc/west + desc = "A square metal surface resting on its fat metal bottom. You can't flip something that doesn't have legs." + icon_state = "tocWtable" + +/obj/structure/surface/table/reinforced/toc/east + desc = "A square metal surface resting on its fat metal bottom. You can't flip something that doesn't have legs." + icon_state = "tocEtable" + /* * Racks */ diff --git a/code/modules/almayer/machinery.dm b/code/modules/almayer/machinery.dm index 4c29fe9d5f..9491475ace 100644 --- a/code/modules/almayer/machinery.dm +++ b/code/modules/almayer/machinery.dm @@ -113,6 +113,11 @@ minimap_type = MINIMAP_FLAG_PMC faction = FACTION_PMC +/obj/structure/machinery/prop/almayer/CICmap/toc + name = "tactical map screen" + desc = "A screen on the TOC computer displaying the tactical map." + icon_state = "toc_map" + //Nonpower using props /obj/structure/prop/almayer diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 16b88e6293..262ae11219 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -648,10 +648,14 @@ var/const/MAX_SAVE_SLOTS = 10 //splitJobs - Allows you split the table by job. You can make different tables for each department by including their heads. Defaults to CE to make it look nice. //width - Screen' width. //height - Screen's height. -/datum/preferences/proc/SetChoices(mob/user, limit = 19, list/splitJobs = list(JOB_CHIEF_REQUISITION), width = 450, height = 450) +/datum/preferences/proc/SetChoices(mob/user, limit = 19, list/splitJobs = list(JOB_CHIEF_REQUISITION), width = 480, height = 450) if(!RoleAuthority) return + var/host_bypass = FALSE + if(user.client?.admin_holder?.check_for_rights(R_HOST)) + host_bypass = TRUE + var/HTML = "" HTML += "
" HTML += "Choose occupation chances
Unavailable occupations are crossed out.

" @@ -676,7 +680,7 @@ var/const/MAX_SAVE_SLOTS = 10 HTML += "" index = 0 - HTML += "" @@ -714,6 +718,9 @@ var/const/MAX_SAVE_SLOTS = 10 if(NEVER_PRIORITY) b_color = "red" priority_text = "NEVER" + if(PRIME_PRIORITY) + b_color = "purple" + priority_text = "PRIME" if(HIGH_PRIORITY) b_color = "blue" priority_text = "HIGH" @@ -724,6 +731,9 @@ var/const/MAX_SAVE_SLOTS = 10 b_color = "orange" priority_text = "LOW" + if(j == PRIME_PRIORITY && !host_bypass && (!job.prime_priority || !user.client?.player_data?.discord_link_id || user.client?.get_total_human_playtime() < JOB_PLAYTIME_TIER_1)) + continue + HTML += "[priority_text]" if (j < 4) HTML += " " @@ -922,11 +932,15 @@ var/const/MAX_SAVE_SLOTS = 10 if(!J || priority < 0 || priority > 4) return FALSE - if(!length(job_preference_list)) ResetJobs() // Need to set old HIGH priority to 2 + if(priority == PRIME_PRIORITY) + for(var/job in job_preference_list) + if(job_preference_list[job] == PRIME_PRIORITY) + job_preference_list[job] = MED_PRIORITY + if(priority == HIGH_PRIORITY) for(var/job in job_preference_list) if(job_preference_list[job] == HIGH_PRIORITY) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index c01abae93e..44af545e2e 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -1,5 +1,5 @@ #define SAVEFILE_VERSION_MIN 8 -#define SAVEFILE_VERSION_MAX 22 +#define SAVEFILE_VERSION_MAX 24 //handles converting savefiles to new formats //MAKE SURE YOU KEEP THIS UP TO DATE! @@ -96,6 +96,20 @@ temp_ooccolor = "#1c52f5" S["ooccolor"] << temp_ooccolor + /// Skipping 23 due to a woopsy with job resets + if(savefile_version < 24) + for(var/i in 1 to 10) + S.cd = "/character[i]" + var/overwrite_job_preference_list + S["job_preference_list"] >> overwrite_job_preference_list + + for(var/j in overwrite_job_preference_list) + overwrite_job_preference_list[j] = 0 + + S["job_preference_list"] << overwrite_job_preference_list + + S.cd = "/" + savefile_version = SAVEFILE_VERSION_MAX return 1 @@ -574,7 +588,7 @@ ResetJobs() else for(var/job in job_preference_list) - job_preference_list[job] = sanitize_integer(job_preference_list[job], 0, 3, initial(job_preference_list[job])) + job_preference_list[job] = sanitize_integer(job_preference_list[job], 0, 4, initial(job_preference_list[job])) if(!organ_data) organ_data = list() diff --git a/code/modules/cm_marines/overwatch.dm b/code/modules/cm_marines/overwatch.dm index 6de3a17396..7b6572a781 100644 --- a/code/modules/cm_marines/overwatch.dm +++ b/code/modules/cm_marines/overwatch.dm @@ -906,6 +906,14 @@ /obj/structure/machinery/computer/overwatch/freelance faction = FACTION_FREELANCER +/obj/structure/machinery/computer/overwatch/toc + name = "TOC Overwatch Console" + desc = "The Tactical Operations Center overwatch console. Many different screens make up the display." + icon = 'icons/obj/structures/machinery/toc.dmi' + icon_state = "toc" + bound_width = 64 + bound_height = 32 + /obj/structure/supply_drop name = "Supply Drop Pad" desc = "Place a crate on here to allow bridge Overwatch officers to drop them on people's heads." diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index e4ecf80655..5c2f73922c 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -216,12 +216,18 @@ rotate_right.screen_loc = "preview:1:-16,0" /datum/preferences/proc/job_pref_to_gear_preset() - var/high_priority + var/highest_priority_job + var/highest_priority = LOW_PRIORITY + for(var/job in job_preference_list) - if(job_preference_list[job] == 1) - high_priority = job + if(job_preference_list[job] == NEVER_PRIORITY) + continue + + if(job_preference_list[job] < highest_priority) + highest_priority_job = job + highest_priority = job_preference_list[job] - switch(high_priority) + switch(highest_priority_job) if(JOB_SQUAD_MARINE) return /datum/equipment_preset/uscm/private_equipped if(JOB_SQUAD_ENGI) diff --git a/code/modules/shuttle/computers/dropship_computer.dm b/code/modules/shuttle/computers/dropship_computer.dm index d86d409a6b..3f688c5721 100644 --- a/code/modules/shuttle/computers/dropship_computer.dm +++ b/code/modules/shuttle/computers/dropship_computer.dm @@ -500,3 +500,11 @@ icon_state = "shuttle" is_remote = TRUE needs_power = TRUE + +/obj/structure/machinery/computer/shuttle/dropship/flight/toc + name = "midway control screen" + desc = "A screen on the TOC computer for controlling the dropship linked to it." + icon = 'icons/obj/structures/machinery/computer.dmi' + icon_state = "toc_shuttle" + shuttleId = DROPSHIP_MIDWAY + is_remote = TRUE diff --git a/code/modules/shuttle/computers/escape_pod_computer.dm b/code/modules/shuttle/computers/escape_pod_computer.dm index ec523747e1..ef2bfad381 100644 --- a/code/modules/shuttle/computers/escape_pod_computer.dm +++ b/code/modules/shuttle/computers/escape_pod_computer.dm @@ -55,7 +55,7 @@ .["docking_status"] = STATE_LAUNCHED var/obj/structure/machinery/door/door = shuttle.door_handler.doors[1] .["door_state"] = door.density - .["door_lock"] = shuttle.door_handler.is_locked + .["door_lock"] = shuttle.door_handler.status == SHUTTLE_DOOR_LOCKED .["can_delay"] = TRUE//launch_status[2] .["launch_without_evac"] = launch_without_evac diff --git a/code/modules/shuttle/helpers.dm b/code/modules/shuttle/helpers.dm index 6ab5d88da1..cb4082c761 100644 --- a/code/modules/shuttle/helpers.dm +++ b/code/modules/shuttle/helpers.dm @@ -19,7 +19,7 @@ if(!door_controllers[direction]) var/datum/door_controller/single/new_controller = new() new_controller.label = label - new_controller.is_locked = FALSE + new_controller.status = SHUTTLE_DOOR_UNLOCKED door_controllers[direction] = new_controller var/datum/door_controller/single/controller = door_controllers[direction] @@ -29,12 +29,12 @@ if(direction == "all") for(var/i in door_controllers) var/datum/door_controller/single/control = door_controllers[i] - if(!control.is_locked) + if(control.status != SHUTTLE_DOOR_LOCKED) return FALSE return TRUE if(door_controllers[direction]) var/datum/door_controller/single/single_controller = door_controllers[direction] - return single_controller.is_locked + return single_controller.status == SHUTTLE_DOOR_LOCKED else WARNING("Direction [direction] does not exist.") return FALSE @@ -60,9 +60,9 @@ for(var/direction in door_controllers) var/datum/door_controller/single/controller = door_controllers[direction] - var/list/door_data = list("id" = direction, "value" = controller.is_locked) + var/list/door_data = list("id" = direction, "value" = controller.status) . += list(door_data) - if(!controller.is_locked) + if(controller.status == SHUTTLE_DOOR_UNLOCKED) all_locked = FALSE var/list/door_data = list("id" = "all", "value" = all_locked) @@ -74,7 +74,7 @@ /datum/door_controller/single var/label = "dropship" var/list/doors = list() - var/is_locked = FALSE + var/status = SHUTTLE_DOOR_UNLOCKED /datum/door_controller/single/Destroy(force, ...) . = ..() @@ -93,23 +93,29 @@ if("close") INVOKE_ASYNC(door, TYPE_PROC_REF(/obj/structure/machinery/door/airlock, close)) if("force-lock") + if (status == SHUTTLE_DOOR_BROKEN) + continue INVOKE_ASYNC(src, PROC_REF(lockdown_door), door) - is_locked = TRUE + status = SHUTTLE_DOOR_LOCKED if("lock") INVOKE_ASYNC(door, TYPE_PROC_REF(/obj/structure/machinery/door/airlock, lock)) - is_locked = TRUE + if (status != SHUTTLE_DOOR_BROKEN) + status = SHUTTLE_DOOR_LOCKED if("unlock") INVOKE_ASYNC(door, TYPE_PROC_REF(/obj/structure/machinery/door/airlock, unlock)) - is_locked = FALSE + if (status != SHUTTLE_DOOR_BROKEN) + status = SHUTTLE_DOOR_UNLOCKED if("force-lock-launch") if(asynchronous) INVOKE_ASYNC(src, PROC_REF(lockdown_door_launch), door) else lockdown_door_launch(door) - is_locked = TRUE + if (status != SHUTTLE_DOOR_BROKEN) + status = SHUTTLE_DOOR_LOCKED if("force-unlock") INVOKE_ASYNC(src, PROC_REF(force_lock_open_door), door) - is_locked = FALSE + if (status != SHUTTLE_DOOR_BROKEN) + status = SHUTTLE_DOOR_UNLOCKED else CRASH("Unknown door command [action]") diff --git a/code/modules/shuttle/shuttles/dropship.dm b/code/modules/shuttle/shuttles/dropship.dm index 40b50d257f..bd9beefb61 100644 --- a/code/modules/shuttle/shuttles/dropship.dm +++ b/code/modules/shuttle/shuttles/dropship.dm @@ -42,6 +42,9 @@ door_control.add_door(air, "port") if("aft_door") door_control.add_door(air, "aft") + var/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/hatch = air + if(istype(hatch)) + hatch.linked_dropship = src /obj/docking_port/mobile/marine_dropship/Destroy(force) . = ..() diff --git a/code/modules/vehicles/interior/interactable/seats.dm b/code/modules/vehicles/interior/interactable/seats.dm index 017b9e6b58..06217d4cc0 100644 --- a/code/modules/vehicles/interior/interactable/seats.dm +++ b/code/modules/vehicles/interior/interactable/seats.dm @@ -300,6 +300,7 @@ desc = "A sturdy chair with a brace that lowers over your body. Prevents being flung around in vehicle during crash being injured as a result. Fasten your seatbelts, kids! Fix with welding tool in case of damage." icon = 'icons/obj/vehicles/interiors/general.dmi' icon_state = "vehicle_seat" + buckling_sound = 'sound/effects/metal_close.ogg' var/image/chairbar = null var/broken = FALSE buildstackamount = 0 @@ -442,3 +443,39 @@ break_seat() if(EXPLOSION_THRESHOLD_MEDIUM to INFINITY) break_seat() + +/obj/structure/bed/chair/vehicle/toc + name = "overwatch chair" + desc = "A sturdy chair with a brace that lowers over the body. Prevents being flung around in vehicle during a crash and being injured as a result. Fasten your seatbelts, kids! Fix with welding tool in case of damage." + icon_state = "armor_chair" + can_rotate = TRUE + +/obj/structure/bed/chair/vehicle/toc/afterbuckle(mob/M) + if(buckled_mob) + if(buckled_mob != M) + return + icon_state = initial(icon_state) + "_buckled" + overlays += chairbar + + if(buckle_offset_x != 0) + mob_old_x = M.pixel_x + M.pixel_x = buckle_offset_x + if(buckle_offset_y != 0) + mob_old_y = M.pixel_y + M.pixel_y = buckle_offset_y + + ADD_TRAIT(buckled_mob, TRAIT_UNDENSE, BUCKLED_TRAIT) + else + icon_state = initial(icon_state) + overlays -= chairbar + + if(buckle_offset_x != 0) + M.pixel_x = mob_old_x + mob_old_x = 0 + if(buckle_offset_y != 0) + M.pixel_y = mob_old_y + mob_old_y = 0 + + REMOVE_TRAIT(M, TRAIT_UNDENSE, BUCKLED_TRAIT) + + handle_rotation() diff --git a/code/modules/vehicles/interior/interactable/vehicle_locker.dm b/code/modules/vehicles/interior/interactable/vehicle_locker.dm index 5571995594..feeb533796 100644 --- a/code/modules/vehicles/interior/interactable/vehicle_locker.dm +++ b/code/modules/vehicles/interior/interactable/vehicle_locker.dm @@ -15,8 +15,6 @@ unslashable = TRUE indestructible = TRUE - var/list/role_restriction = list(JOB_CREWMAN, JOB_WO_CREWMAN, JOB_UPP_CREWMAN, JOB_PMC_CREWMAN) - var/obj/item/storage/internal/container /obj/structure/vehicle_locker/Initialize() @@ -34,7 +32,8 @@ /obj/item/storage/pouch, /obj/item/device/motiondetector, /obj/item/ammo_magazine/hardpoint, - /obj/item/tool/weldpack + /obj/item/tool/weldpack, + /obj/item/ammo_box/magazine ) flags_atom |= USES_HEARING @@ -47,10 +46,6 @@ if (!ishuman(H) || H.is_mob_restrained()) return - if(!role_restriction.Find(H.job)) - to_chat(H, SPAN_WARNING("You cannot access \the [name].")) - return - empty(get_turf(H), H) //regular storage's empty() proc doesn't work due to checks, so imitate it @@ -80,10 +75,6 @@ if(user.get_active_hand()) return ..() - if(!role_restriction.Find(user.job)) - to_chat(user, SPAN_WARNING("You cannot access \the [name].")) - return TRUE - if(Adjacent(user)) container.open(user) return TRUE @@ -98,9 +89,6 @@ return if(user.is_mob_incapacitated()) return - if(!role_restriction.Find(user.job)) - to_chat(user, SPAN_WARNING("You cannot access \the [name].")) - return if (container.handle_mousedrop(user, over_object)) ..(over_object) @@ -111,9 +99,6 @@ return if(!istype(user)) return - if(!role_restriction.Find(user.job)) - to_chat(user, SPAN_WARNING("You cannot access \the [name].")) - return return container.attackby(W, user) /obj/structure/vehicle_locker/emp_act(severity) @@ -141,11 +126,16 @@ icon = 'icons/obj/vehicles/interiors/tank.dmi' icon_state = "locker" +/obj/structure/vehicle_locker/movie + name = "storage compartment" + desc = "A wide storage unit to allow it's users to store a wide variety of objects, from equipment to weapons and their ammo. Very versatile." + icon = 'icons/obj/vehicles/interiors/movie.dmi' + icon_state = "locker" + /obj/structure/vehicle_locker/med name = "wall-mounted surgery kit storage" desc = "A small locker that securely stores a full surgical kit. ID-locked to surgeons." icon_state = "locker_med" - role_restriction = list(JOB_CMO, JOB_DOCTOR, JOB_RESEARCHER, JOB_SYNTH, JOB_WO_CMO, JOB_WO_DOCTOR, JOB_WO_RESEARCHER, JOB_SEA, JOB_CLF_MEDIC, "Colonial Doctor", "Sorokyne Strata Doctor", JOB_SYNTH, JOB_WO_SYNTH) var/has_tray = TRUE @@ -197,9 +187,6 @@ return if(!istype(user)) return - if(!role_restriction.Find(user.job)) - to_chat(user, SPAN_WARNING("You cannot access \the [name].")) - return if(istype(W, /obj/item/storage/surgical_tray)) add_tray(user, W) return @@ -215,10 +202,6 @@ if(user.get_active_hand()) return ..() - if(!role_restriction.Find(user.job)) - to_chat(user, SPAN_WARNING("You cannot access \the [name].")) - return TRUE - if(!has_tray) to_chat(user, SPAN_WARNING("\The [name] doesn't have a surgical tray installed!")) return TRUE @@ -233,9 +216,6 @@ return if(user.is_mob_incapacitated()) return - if(!role_restriction.Find(user.job)) - to_chat(user, SPAN_WARNING("You cannot access \the [name].")) - return if(!has_tray) to_chat(user, SPAN_WARNING("\The [name] doesn't have a surgical tray installed!")) return @@ -256,10 +236,6 @@ if(H.is_mob_incapacitated()) return - if(!role_restriction.Find(H.job)) - to_chat(H, SPAN_WARNING("You cannot access \the [name].")) - return - remove_tray(H) /obj/structure/vehicle_locker/med/proc/remove_tray(mob/living/carbon/human/H) @@ -303,4 +279,3 @@ has_tray = TRUE update_icon() H.visible_message(SPAN_NOTICE("[H] installs \the [tray] into \the [src]."), SPAN_NOTICE("You install \the [tray] into \the [src].")) - diff --git a/code/modules/vehicles/interior/interior_landmarks.dm b/code/modules/vehicles/interior/interior_landmarks.dm index eb62e50243..bfb4ab58c7 100644 --- a/code/modules/vehicles/interior/interior_landmarks.dm +++ b/code/modules/vehicles/interior/interior_landmarks.dm @@ -146,6 +146,28 @@ qdel(src) +/obj/effect/landmark/interior/spawn/vehicle_driver_seat/armor/movie + name = "movie apc seat spawner" + var/buckling_y = 0 + +/obj/effect/landmark/interior/spawn/vehicle_driver_seat/armor/movie/on_load(datum/interior/I) + var/obj/structure/bed/chair/comfy/vehicle/driver/S = new(loc) + + S.icon = icon + S.icon_state = icon_state + S.layer = layer + S.vehicle = I.exterior + S.required_skill = S.vehicle.required_skill + S.setDir(dir) + S.alpha = alpha + S.update_icon() + S.handle_rotation() + S.pixel_x = pixel_x + S.pixel_y = pixel_y + S.buckling_y = buckling_y + + qdel(src) + /obj/effect/landmark/interior/spawn/vehicle_support_gunner_seat name = "1st support gunner's seat spawner" icon = 'icons/obj/vehicles/interiors/general.dmi' @@ -215,6 +237,10 @@ icon_state = "wall_phone" color = "yellow" +/obj/effect/landmark/interior/spawn/telephone/toc + icon = 'icons/obj/vehicles/interiors/movie.dmi' + icon_state = "wall_phone" + /obj/effect/landmark/interior/spawn/telephone/on_load(datum/interior/I) var/obj/structure/phone_base/phone = new(loc) @@ -246,6 +272,7 @@ R.layer = layer R.pixel_x = pixel_x R.pixel_y = pixel_y + R.density = density R.vehicle = I.exterior R.setDir(dir) R.update_icon() @@ -268,6 +295,7 @@ V.pixel_x = pixel_x V.pixel_y = pixel_y V.alpha = alpha + V.layer = layer V.update_icon() qdel(src) diff --git a/icons/mob/humans/onmob/belt.dmi b/icons/mob/humans/onmob/belt.dmi index 970faab0a7..c471b62bb3 100644 Binary files a/icons/mob/humans/onmob/belt.dmi and b/icons/mob/humans/onmob/belt.dmi differ diff --git a/icons/mob/humans/onmob/head_1.dmi b/icons/mob/humans/onmob/head_1.dmi index 02595bb1a3..139dae66e8 100644 Binary files a/icons/mob/humans/onmob/head_1.dmi and b/icons/mob/humans/onmob/head_1.dmi differ diff --git a/icons/mob/humans/onmob/suit_1.dmi b/icons/mob/humans/onmob/suit_1.dmi index eb10ff063c..5ee10a5942 100644 Binary files a/icons/mob/humans/onmob/suit_1.dmi and b/icons/mob/humans/onmob/suit_1.dmi differ diff --git a/icons/mob/humans/onmob/suit_slot.dmi b/icons/mob/humans/onmob/suit_slot.dmi index 34ef7954df..d691e411ae 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/humans/onmob/ties.dmi b/icons/mob/humans/onmob/ties.dmi index a426cb7293..f277dc02a7 100644 Binary files a/icons/mob/humans/onmob/ties.dmi and b/icons/mob/humans/onmob/ties.dmi differ diff --git a/icons/mob/humans/onmob/uniform_0.dmi b/icons/mob/humans/onmob/uniform_0.dmi index 57b35aa5e2..abdf8994a2 100644 Binary files a/icons/mob/humans/onmob/uniform_0.dmi and b/icons/mob/humans/onmob/uniform_0.dmi differ diff --git a/icons/mob/xenos/crusher.dmi b/icons/mob/xenos/crusher.dmi index f6a30f5901..bea8c8a7e5 100644 Binary files a/icons/mob/xenos/crusher.dmi and b/icons/mob/xenos/crusher.dmi differ diff --git a/icons/mob/xenos/drone.dmi b/icons/mob/xenos/drone.dmi index 28016677bd..9555187e03 100644 Binary files a/icons/mob/xenos/drone.dmi and b/icons/mob/xenos/drone.dmi differ diff --git a/icons/mob/xenos/lurker.dmi b/icons/mob/xenos/lurker.dmi index aef231c699..5deed7c9fb 100644 Binary files a/icons/mob/xenos/lurker.dmi and b/icons/mob/xenos/lurker.dmi differ diff --git a/icons/mob/xenos/runner.dmi b/icons/mob/xenos/runner.dmi index 7a87f9cf3e..1bb209c259 100644 Binary files a/icons/mob/xenos/runner.dmi and b/icons/mob/xenos/runner.dmi differ diff --git a/icons/mob/xenos/wounds.dmi b/icons/mob/xenos/wounds.dmi index 65c5a84fbe..0e526df977 100644 Binary files a/icons/mob/xenos/wounds.dmi and b/icons/mob/xenos/wounds.dmi differ diff --git a/icons/obj/items/clothing/cm_hats.dmi b/icons/obj/items/clothing/cm_hats.dmi index 5df0576c6a..75c46ae6a7 100644 Binary files a/icons/obj/items/clothing/cm_hats.dmi and b/icons/obj/items/clothing/cm_hats.dmi differ diff --git a/icons/obj/items/clothing/cm_suits.dmi b/icons/obj/items/clothing/cm_suits.dmi index 1cc763aa80..f6a6b57f6b 100644 Binary files a/icons/obj/items/clothing/cm_suits.dmi and b/icons/obj/items/clothing/cm_suits.dmi differ diff --git a/icons/obj/items/clothing/ties.dmi b/icons/obj/items/clothing/ties.dmi index 3c702e55c1..17118d8760 100644 Binary files a/icons/obj/items/clothing/ties.dmi and b/icons/obj/items/clothing/ties.dmi differ diff --git a/icons/obj/items/clothing/uniforms.dmi b/icons/obj/items/clothing/uniforms.dmi index 5c36b764dd..5b9d981ed8 100644 Binary files a/icons/obj/items/clothing/uniforms.dmi and b/icons/obj/items/clothing/uniforms.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 0000000000..f2d96e59af 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 0000000000..bff39827c3 Binary files /dev/null and b/icons/obj/structures/doors/dropship2_side2.dmi differ diff --git a/icons/obj/structures/gun_racks.dmi b/icons/obj/structures/gun_racks.dmi index e452fa3c68..fb4e3c4b9c 100644 Binary files a/icons/obj/structures/gun_racks.dmi and b/icons/obj/structures/gun_racks.dmi differ diff --git a/icons/obj/structures/machinery/computer.dmi b/icons/obj/structures/machinery/computer.dmi index a3f60be487..4224992af2 100644 Binary files a/icons/obj/structures/machinery/computer.dmi and b/icons/obj/structures/machinery/computer.dmi differ diff --git a/icons/obj/structures/machinery/toc.dmi b/icons/obj/structures/machinery/toc.dmi new file mode 100644 index 0000000000..b2917b4790 Binary files /dev/null and b/icons/obj/structures/machinery/toc.dmi differ diff --git a/icons/obj/structures/tables.dmi b/icons/obj/structures/tables.dmi index bee6f34772..2528751b60 100644 Binary files a/icons/obj/structures/tables.dmi and b/icons/obj/structures/tables.dmi differ diff --git a/icons/obj/vehicles/interiors/apc.dmi b/icons/obj/vehicles/interiors/apc.dmi index e12c5f68ab..0d91ca9447 100644 Binary files a/icons/obj/vehicles/interiors/apc.dmi and b/icons/obj/vehicles/interiors/apc.dmi differ diff --git a/icons/obj/vehicles/interiors/movie.dmi b/icons/obj/vehicles/interiors/movie.dmi new file mode 100644 index 0000000000..1bacbe09b4 Binary files /dev/null and b/icons/obj/vehicles/interiors/movie.dmi differ diff --git a/maps/interiors/apc_movie.dmm b/maps/interiors/apc_movie.dmm index d32b9f49ec..d1f9258eef 100644 --- a/maps/interiors/apc_movie.dmm +++ b/maps/interiors/apc_movie.dmm @@ -6,34 +6,30 @@ /turf/open/void/vehicle, /area/space) "b" = ( -/obj/structure/machinery/computer/shuttle/dropship/flight/remote_control{ - name = "Alamo Remote Control Console"; - shuttleId = "dropship_alamo"; - pixel_x = 7; - pixel_y = 11 - }, -/obj/structure/bed/chair/vehicle{ - dir = 1; - pixel_x = -16; - layer = 3.21 +/obj/structure/interior_wall/apc{ + icon_state = "wall"; + pixel_y = -12; + opacity = 0 }, -/turf/open/shuttle/vehicle{ - icon_state = "floor_1_4" +/obj/structure/interior_wall/apc{ + icon_state = "wheel_front_top_2"; + pixel_x = -4; + pixel_y = -5; + layer = 2.01 }, -/area/vehicle/apc/movie) +/turf/open/void/vehicle, +/area/space) "c" = ( -/obj/structure/machinery/computer/overwatch/almayer{ - layer = 3.2; - pixel_x = 16; - pixel_y = 23 - }, -/obj/structure/machinery/prop/almayer/CICmap{ - icon_state = "security_cam"; +/obj/structure/machinery/computer/overwatch/toc{ layer = 2.97; - name = "Tactical Map Display"; - pixel_x = -7; - pixel_y = 11; - density = 0 + pixel_y = 12 + }, +/obj/structure/surface/table/reinforced/toc/west{ + pixel_y = -7 + }, +/obj/structure/machinery/computer/shuttle/dropship/flight/toc{ + pixel_y = 12; + pixel_x = 7 }, /turf/open/shuttle/vehicle{ icon_state = "floor_1_3" @@ -61,7 +57,8 @@ /obj/structure/interior_wall/apc{ icon_state = "wheel_front_top_2"; pixel_x = 4; - pixel_y = -4 + pixel_y = -5; + layer = 2.01 }, /turf/open/void/vehicle, /area/space) @@ -69,7 +66,8 @@ /obj/structure/interior_wall/apc{ icon_state = "wheel_front_top_1"; pixel_x = 1; - pixel_y = -4 + pixel_y = -5; + layer = 2.01 }, /turf/open/void/vehicle, /area/space) @@ -80,18 +78,14 @@ /turf/open/void/vehicle, /area/space) "h" = ( -/obj/effect/landmark/interior/spawn/weapons_loader, +/obj/effect/landmark/interior/spawn/weapons_loader{ + pixel_y = -11; + layer = 4 + }, /turf/open/shuttle/vehicle{ icon_state = "floor_2" }, /area/vehicle/apc/movie) -"i" = ( -/obj/structure/interior_wall/apc{ - icon_state = "corner_inverse_R"; - opacity = 0 - }, -/turf/open/space/basic, -/area/space) "j" = ( /obj/structure/bed/chair/vehicle{ dir = 1; @@ -103,7 +97,7 @@ }, /obj/effect/landmark/interior/spawn/interior_viewport{ dir = 1; - pixel_x = 8; + pixel_x = -7; pixel_y = -11 }, /turf/open/shuttle/vehicle{ @@ -111,29 +105,31 @@ }, /area/vehicle/apc/movie) "l" = ( -/obj/structure/interior_wall/apc{ - icon_state = "wall"; - opacity = 0 +/obj/structure/machinery/prop/almayer/CICmap{ + density = 0; + icon_state = "toc_map"; + layer = 2.97; + name = "Tactical Map Display"; + pixel_y = 11; + pixel_x = -7 + }, +/obj/structure/surface/table/reinforced/toc/east{ + pixel_y = -7 + }, +/obj/effect/landmark/interior/spawn/telephone/toc{ + pixel_y = 11; + pixel_x = 11 }, -/turf/open/space/basic, -/area/space) -"m" = ( /turf/open/shuttle/vehicle{ - icon_state = "floor_1_5" + icon_state = "floor_1_4" }, /area/vehicle/apc/movie) "n" = ( /obj/structure/interior_wall/apc{ - icon_state = "intersection_2"; + icon_state = "corner_inverse_L"; opacity = 0 }, -/obj/structure/interior_wall/apc{ - icon_state = "wheel_front_top_2"; - pixel_x = 2; - pixel_y = 8; - layer = 2 - }, -/turf/open/shuttle/vehicle, +/turf/open/space/basic, /area/space) "o" = ( /obj/structure/interior_wall/apc{ @@ -143,9 +139,10 @@ /area/space) "p" = ( /obj/structure/interior_wall/apc{ - icon_state = "front_4" + icon_state = "wall_2"; + opacity = 0 }, -/turf/open/void/vehicle, +/turf/open/space/basic, /area/space) "q" = ( /obj/structure/interior_wall/apc{ @@ -160,23 +157,11 @@ }, /turf/open/space/basic, /area/space) -"s" = ( -/obj/structure/interior_wall/apc{ - icon_state = "wall_2"; - opacity = 0 - }, -/turf/open/space/basic, -/area/space) "t" = ( -/turf/open/shuttle/vehicle{ - icon_state = "floor_0_10" - }, -/area/vehicle/apc/movie) -"u" = ( -/obj/effect/landmark/interior/spawn/interior_camera{ - dir = 10; - pixel_x = -14; - pixel_y = 38 +/obj/structure/bed/chair/vehicle/toc{ + dir = 1; + pixel_y = 19; + pixel_x = 16 }, /turf/open/shuttle/vehicle{ icon_state = "floor_1_3" @@ -184,33 +169,65 @@ /area/vehicle/apc/movie) "v" = ( /obj/structure/bed/chair/vehicle{ - pixel_x = 8 + pixel_x = 8; + pixel_y = 14 }, /obj/structure/bed/chair/vehicle{ - pixel_x = -8 + pixel_x = -8; + pixel_y = 14 }, -/obj/effect/landmark/interior/spawn/interior_viewport{ - pixel_x = -7; - pixel_y = 23 +/obj/structure/vehicle_locker/movie{ + pixel_y = 31; + layer = 2.9 }, /turf/open/shuttle/vehicle{ icon_state = "floor_2" }, /area/vehicle/apc/movie) "w" = ( -/obj/structure/machinery/cm_vending/sorted/medical/wall_med/vehicle{ - pixel_x = 6; - pixel_y = 28 +/obj/effect/landmark/interior/spawn/interior_camera{ + dir = 5; + pixel_x = -18; + pixel_y = 38 + }, +/obj/structure/vehicle_locker/movie{ + pixel_y = 11; + layer = 2.9 }, -/obj/structure/extinguisher_cabinet/lifeboat{ - icon = 'icons/obj/vehicles/interiors/general.dmi'; +/obj/structure/gun_rack/apc/boyars{ + pixel_x = 8; + pixel_y = 1; + density = 0 + }, +/obj/structure/gun_rack/apc/frontal{ + pixel_y = 1; pixel_x = -8; - pixel_y = 28 + density = 0 }, /turf/open/shuttle/vehicle{ - icon_state = "floor_1_5" + icon_state = "floor_2" }, /area/vehicle/apc/movie) +"x" = ( +/obj/structure/interior_wall/apc{ + icon_state = "wall"; + opacity = 0; + pixel_y = -12 + }, +/obj/structure/interior_wall/apc{ + icon_state = "wheel_front_top_2"; + pixel_x = 10; + pixel_y = -5; + layer = 2.01 + }, +/obj/structure/interior_wall/apc{ + icon_state = "wheel_front_top_2"; + pixel_x = -18; + pixel_y = -5; + layer = 2.01 + }, +/turf/open/void/vehicle, +/area/space) "y" = ( /obj/structure/interior_wall/apc{ icon_state = "front_5" @@ -265,27 +282,31 @@ /turf/open/void/vehicle, /area/space) "F" = ( +/obj/effect/landmark/interior/spawn/interior_viewport{ + pixel_x = 8; + pixel_y = 26; + layer = 3 + }, /obj/structure/bed/chair/vehicle{ - pixel_x = 8 + pixel_x = -8; + pixel_y = 14 }, /obj/structure/bed/chair/vehicle{ - pixel_x = -8 + pixel_x = 8; + pixel_y = 14 }, -/obj/structure/vehicle_locker{ - pixel_y = 28 +/obj/structure/machinery/cm_vending/sorted/medical/wall_med/vehicle{ + pixel_y = 30; + pixel_x = -8 }, /turf/open/shuttle/vehicle{ icon_state = "floor_2" }, /area/vehicle/apc/movie) "G" = ( -/obj/structure/machinery/cm_vending/sorted/vehicle_supply{ - pixel_y = 16 - }, -/obj/effect/landmark/interior/spawn/interior_viewport{ - dir = 8; - pixel_x = 5; - pixel_y = 8 +/obj/structure/gun_rack/m41{ + pixel_y = 22; + density = 0 }, /turf/open/shuttle/vehicle{ icon_state = "floor_2" @@ -293,7 +314,7 @@ /area/vehicle/apc/movie) "H" = ( /obj/structure/interior_wall/apc{ - icon_state = "corner_inverse_L"; + icon_state = "corner_inverse_R"; opacity = 0 }, /turf/open/space/basic, @@ -303,26 +324,39 @@ icon_state = "front_3" }, /obj/structure/interior_wall/apc{ - icon_state = "front_4" + icon_state = "front_4"; + pixel_y = 12 }, /turf/open/void/vehicle, /area/space) "J" = ( -/obj/structure/interior_wall/apc{ - icon_state = "intersection_1"; - opacity = 0 - }, /obj/structure/interior_wall/apc{ icon_state = "wheel_front_top_2"; pixel_x = 4; pixel_y = 1; - layer = 2.01 + layer = 2.01; + opacity = 0 + }, +/obj/structure/interior_wall/apc{ + icon_state = "corner_smaller_R"; + opacity = 0; + pixel_y = 12 + }, +/obj/structure/interior_wall/apc{ + icon_state = "corner_smaller_L"; + opacity = 0; + pixel_y = 12 + }, +/obj/structure/interior_wall/apc{ + icon_state = "intersection_2"; + opacity = 0; + pixel_y = -20 }, /turf/open/shuttle/vehicle, /area/space) "K" = ( /obj/structure/interior_wall/apc{ - icon_state = "corner_small_L"; + icon_state = "corner_smaller_L"; opacity = 0 }, /obj/structure/interior_wall/apc{ @@ -351,15 +385,16 @@ /area/vehicle/apc/movie) "O" = ( /obj/structure/interior_wall/apc{ - icon_state = "front_2" + icon_state = "front_2"; + pixel_y = 7 + }, +/obj/structure/interior_wall/apc{ + icon_state = "front_2"; + pixel_y = -2; + layer = 2.01 }, /turf/open/void/vehicle, /area/space) -"P" = ( -/turf/open/shuttle/vehicle{ - icon_state = "floor_0_9" - }, -/area/vehicle/apc/movie) "Q" = ( /obj/structure/interior_wall/apc{ icon_state = "door_big_left"; @@ -377,7 +412,8 @@ /area/space) "S" = ( /obj/structure/interior_wall/apc{ - icon_state = "front_6" + icon_state = "front_6"; + pixel_y = -1 }, /turf/open/void/vehicle, /area/space) @@ -394,7 +430,8 @@ /area/vehicle/apc/movie) "U" = ( /obj/structure/interior_wall/apc{ - icon_state = "front_wheel_R" + icon_state = "front_wheel_R"; + layer = 4.1 }, /turf/open/space/basic, /area/space) @@ -407,27 +444,20 @@ /turf/open/void/vehicle, /area/space) "W" = ( -/obj/effect/landmark/interior/spawn/vehicle_driver_seat/armor{ - dir = 4 - }, /obj/effect/landmark/interior/spawn/interior_viewport{ dir = 8; - pixel_x = 5 + pixel_x = 5; + pixel_y = 18 + }, +/obj/effect/landmark/interior/spawn/vehicle_driver_seat/armor/movie{ + dir = 4; + buckling_y = 16; + pixel_y = 16 }, /turf/open/shuttle/vehicle{ icon_state = "floor_2" }, /area/vehicle/apc/movie) -"X" = ( -/obj/structure/interior_wall/apc{ - icon_state = "wall"; - opacity = 0 - }, -/obj/structure/surface/table/reinforced/almayer_B{ - pixel_y = -18 - }, -/turf/open/space/basic, -/area/space) "Y" = ( /obj/structure/interior_wall/apc{ icon_state = "rear_2" @@ -436,19 +466,20 @@ /area/space) "Z" = ( /obj/structure/interior_wall/apc{ - icon_state = "corner_small_R"; + icon_state = "corner_smaller_R"; opacity = 0 }, /obj/structure/interior_wall/apc{ icon_state = "wheel_front_top_2"; pixel_x = 4; - pixel_y = -4 + pixel_y = -5; + layer = 2.01 }, /obj/structure/interior_wall/apc{ icon_state = "wheel_front_top_2"; pixel_x = 8; - pixel_y = -4; - layer = 2.03 + pixel_y = -5; + layer = 2.01 }, /turf/open/void/vehicle, /area/space) @@ -457,52 +488,46 @@ a D M -M Y o E "} (2,1,1) = {" V -s +p v -m -A +j L E "} (3,1,1) = {" K -H +n F -m -j +A r E "} (4,1,1) = {" -X +b c -u -P +t B z Q "} (5,1,1) = {" -X -b +x +l N -t N T C "} (6,1,1) = {" Z -i +H G -m d R E @@ -510,7 +535,6 @@ E (7,1,1) = {" e J -n w A q @@ -518,9 +542,8 @@ E "} (8,1,1) = {" f -l +p W -m h U E @@ -529,7 +552,6 @@ E S I O -p y g E 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 701a660ddb..a196e2f20c 100644 --- a/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm +++ b/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm @@ -27970,6 +27970,16 @@ icon_state = "plate" }, /area/lv522/atmos/cargo_intake) +"lgw" = ( +/obj/structure/machinery/door/poddoor/shutters/almayer{ + dir = 4; + id = "UD6 East"; + indestructible = 1 + }, +/turf/open/shuttle/dropship{ + icon_state = "rasputin3" + }, +/area/lv522/landing_zone_forecon/UD6_Tornado) "lgR" = ( /obj/structure/largecrate/random/secure, /turf/open/floor/plating, @@ -41284,6 +41294,20 @@ icon_state = "platingdmg3" }, /area/lv522/indoors/a_block/dorms) +"qjy" = ( +/obj/structure/machinery/door/poddoor/shutters/almayer{ + dir = 4; + id = "UD6 East"; + indestructible = 1 + }, +/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds2{ + dir = 1; + name = "\improper Tornado crew hatch" + }, +/turf/open/shuttle/dropship{ + icon_state = "rasputin3" + }, +/area/lv522/landing_zone_forecon/UD6_Tornado) "qjC" = ( /obj/item/stack/rods, /turf/open/floor/prison, @@ -42172,8 +42196,9 @@ /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{ + dir = 1; + name = "\improper Typhoon crew hatch" }, /turf/open/shuttle/dropship{ icon_state = "rasputin3" @@ -62477,8 +62502,9 @@ }, /area/lv522/outdoors/colony_streets/north_street) "xRM" = ( -/obj/structure/machinery/door/airlock/dropship_hatch/two{ - dir = 8 +/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds2{ + dir = 1; + name = "\improper Tornado crew hatch" }, /obj/structure/machinery/door/poddoor/shutters/almayer{ dir = 4; @@ -66220,7 +66246,7 @@ pRK qmM qGQ qTh -qzp +rjP qzp nfq fDg @@ -67582,7 +67608,7 @@ pUc qst qLz qVl -qzp +rjP qzp rFp sdE @@ -103011,7 +103037,7 @@ sCp toY uwQ wzg -xRM +lgw xRM bpZ wRL @@ -104373,8 +104399,8 @@ tcu tSo vjv wCr -xRM -xRM +lgw +qjy fXn uSB ecP diff --git a/maps/map_files/chapaev/chapaev.dmm b/maps/map_files/chapaev/chapaev.dmm index 19221308e2..c2b8457ee8 100644 --- a/maps/map_files/chapaev/chapaev.dmm +++ b/maps/map_files/chapaev/chapaev.dmm @@ -1069,6 +1069,7 @@ icon_off = "cabinetdetective_broken"; has_cryo_gear = 0 }, +/obj/item/clothing/under/marine/veteran/UPP/boiler, /turf/open/floor/strata{ dir = 6; icon_state = "multi_tiles" diff --git a/maps/map_files/golden_arrow/golden_arrow.dmm b/maps/map_files/golden_arrow/golden_arrow.dmm index 952d2b2f85..ab5d87ee73 100644 --- a/maps/map_files/golden_arrow/golden_arrow.dmm +++ b/maps/map_files/golden_arrow/golden_arrow.dmm @@ -3251,6 +3251,7 @@ icon_off = "cabinetdetective_broken"; has_cryo_gear = 0 }, +/obj/item/clothing/under/marine/officer/boiler, /turf/open/floor/almayer{ icon_state = "plate" }, diff --git a/maps/shuttles/dropship_alamo.dmm b/maps/shuttles/dropship_alamo.dmm index ea14641a75..df47309c7a 100644 --- a/maps/shuttles/dropship_alamo.dmm +++ b/maps/shuttles/dropship_alamo.dmm @@ -216,14 +216,6 @@ icon_state = "23" }, /area/shuttle/drop1/sulaco) -"rS" = ( -/obj/structure/machinery/door/airlock/dropship_hatch{ - id = "port_door" - }, -/turf/open/shuttle/dropship{ - icon_state = "rasputin15" - }, -/area/shuttle/drop1/sulaco) "rV" = ( /obj/structure/shuttle/part/dropship1/transparent/left_outer_bottom_wing, /turf/template_noop, @@ -242,6 +234,15 @@ icon_state = "rasputin15" }, /area/shuttle/drop1/sulaco) +"uR" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds1{ + dir = 1; + id = "starboard_door" + }, +/turf/open/shuttle/dropship{ + icon_state = "rasputin15" + }, +/area/shuttle/drop1/sulaco) "wk" = ( /obj/effect/attach_point/weapon/dropship1/right_wing, /obj/structure/shuttle/part/dropship1/transparent/lower_right_wing, @@ -481,9 +482,9 @@ }, /area/shuttle/drop1/sulaco) "Pf" = ( -/obj/structure/machinery/door/airlock/dropship_hatch{ - dir = 8; - id = "starboard_door" +/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds1{ + dir = 1; + id = "port_door" }, /turf/open/shuttle/dropship{ icon_state = "rasputin15" @@ -675,8 +676,8 @@ hG Et iI JP -rS -rS +il +Pf mW qn sA @@ -859,8 +860,8 @@ zS iv zV MP -Pf -Pf +il +uR nC nE rl diff --git a/maps/shuttles/dropship_cyclone.dmm b/maps/shuttles/dropship_cyclone.dmm index 0ff54bc78a..97fb82caeb 100644 --- a/maps/shuttles/dropship_cyclone.dmm +++ b/maps/shuttles/dropship_cyclone.dmm @@ -138,14 +138,6 @@ icon_state = "rasputin15" }, /area/shuttle/cyclone) -"jR" = ( -/obj/structure/machinery/door/airlock/dropship_hatch/two{ - id = "port_door" - }, -/turf/open/shuttle/dropship{ - icon_state = "rasputin15" - }, -/area/shuttle/cyclone) "lc" = ( /obj/structure/machinery/light{ dir = 4; @@ -407,6 +399,15 @@ icon_state = "rasputin3" }, /area/shuttle/cyclone) +"Ey" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds2/cyclone{ + dir = 1; + id = "starboard_door" + }, +/turf/open/shuttle/dropship{ + icon_state = "rasputin15" + }, +/area/shuttle/cyclone) "EP" = ( /turf/closed/shuttle/cyclone{ icon_state = "75" @@ -537,8 +538,9 @@ }, /area/shuttle/cyclone) "QA" = ( -/obj/structure/machinery/door/airlock/dropship_hatch/two{ - id = "starboard_door" +/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds2/cyclone{ + dir = 1; + id = "port_door" }, /turf/open/shuttle/dropship{ icon_state = "rasputin15" @@ -657,8 +659,8 @@ EP uH mI pb -jR -jR +Ty +QA xY hS wA @@ -777,8 +779,8 @@ AP sa Hg Uo -QA -QA +Ty +Ey At fo zH diff --git a/maps/shuttles/dropship_midway.dmm b/maps/shuttles/dropship_midway.dmm index d890d8cb1f..64b2dab98d 100644 --- a/maps/shuttles/dropship_midway.dmm +++ b/maps/shuttles/dropship_midway.dmm @@ -475,7 +475,8 @@ /area/shuttle/midway) "HY" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/ds1{ - id = "aft_door" + id = "aft_door"; + name = "\improper Midway cargo door" }, /turf/open/shuttle/dropship{ icon_state = "rasputin15" @@ -497,6 +498,15 @@ icon_state = "72" }, /area/shuttle/midway) +"Kp" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds1/midway{ + dir = 1; + id = "starboard_door" + }, +/turf/open/shuttle/dropship{ + icon_state = "rasputin15" + }, +/area/shuttle/midway) "Ks" = ( /obj/structure/shuttle/part/dropship1/transparent/lower_left_wing{ name = "\improper Midway" @@ -534,14 +544,6 @@ }, /turf/template_noop, /area/shuttle/midway) -"Mf" = ( -/obj/structure/machinery/door/airlock/dropship_hatch{ - id = "port_door" - }, -/turf/open/shuttle/dropship{ - icon_state = "rasputin15" - }, -/area/shuttle/midway) "Mz" = ( /obj/structure/stairs/perspective, /obj/structure/platform{ @@ -608,9 +610,9 @@ }, /area/shuttle/midway) "SS" = ( -/obj/structure/machinery/door/airlock/dropship_hatch{ - dir = 8; - id = "starboard_door" +/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds1/midway{ + dir = 1; + id = "port_door" }, /turf/open/shuttle/dropship{ icon_state = "rasputin15" @@ -722,8 +724,8 @@ Hj Jq Vu xp -Mf -Mf +ME +SS QI gw ls @@ -842,8 +844,8 @@ wB VU ym Ji -SS -SS +ME +Kp rF ul BS diff --git a/maps/shuttles/dropship_normandy.dmm b/maps/shuttles/dropship_normandy.dmm index 55d07883e3..df64ef84ca 100644 --- a/maps/shuttles/dropship_normandy.dmm +++ b/maps/shuttles/dropship_normandy.dmm @@ -350,9 +350,9 @@ /turf/template_noop, /area/shuttle/drop2/sulaco) "En" = ( -/obj/structure/machinery/door/airlock/dropship_hatch/two{ - dir = 8; - id = "starboard_door" +/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds2{ + dir = 1; + id = "port_door" }, /turf/open/shuttle/dropship{ icon_state = "rasputin15" @@ -408,6 +408,15 @@ icon_state = "53" }, /area/shuttle/drop2/sulaco) +"JN" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds2{ + dir = 1; + id = "starboard_door" + }, +/turf/open/shuttle/dropship{ + icon_state = "rasputin15" + }, +/area/shuttle/drop2/sulaco) "Kl" = ( /turf/closed/shuttle/dropship2{ icon_state = "10" @@ -582,14 +591,6 @@ /obj/structure/shuttle/part/dropship2/nose_front_left, /turf/template_noop, /area/shuttle/drop2/sulaco) -"SC" = ( -/obj/structure/machinery/door/airlock/dropship_hatch/two{ - id = "port_door" - }, -/turf/open/shuttle/dropship{ - icon_state = "rasputin15" - }, -/area/shuttle/drop2/sulaco) "SO" = ( /turf/closed/shuttle/dropship2{ icon_state = "36" @@ -708,8 +709,8 @@ eu OI GE lJ -SC -SC +PJ +En jc pU nS @@ -892,8 +893,8 @@ wX fI fx Tp -En -En +PJ +JN gG RG QK diff --git a/tgui/packages/tgui/interfaces/DropshipFlightControl.tsx b/tgui/packages/tgui/interfaces/DropshipFlightControl.tsx index bbb7fea96d..4d189614d6 100644 --- a/tgui/packages/tgui/interfaces/DropshipFlightControl.tsx +++ b/tgui/packages/tgui/interfaces/DropshipFlightControl.tsx @@ -3,6 +3,14 @@ import { Window } from '../layouts'; import { Box, Button, Flex, Icon, ProgressBar, Section, Stack } from '../components'; import { LaunchButton, CancelLaunchButton, DisabledScreen, InFlightCountdown, LaunchCountdown, NavigationProps, ShuttleRecharge, DockingPort } from './NavigationShuttle'; +const DoorStatusEnum = { + SHUTTLE_DOOR_BROKEN: -1, + SHUTTLE_DOOR_UNLOCKED: 0, + SHUTTLE_DOOR_LOCKED: 1, +} as const; + +type DoorStatusEnums = typeof DoorStatusEnum[keyof typeof DoorStatusEnum]; + interface DoorStatus { id: string; value: 0 | 1; @@ -45,7 +53,7 @@ const DropshipDoorControl = (_, context) => { disabled={disable_door_controls} onClick={() => act('door-control', { - interaction: 'lock', + interaction: 'force-lock', location: 'all', }) } @@ -81,7 +89,7 @@ const DropshipDoorControl = (_, context) => {
" + HTML += "
" if(jobban_isbanned(user, job.title)) HTML += "[job.disp_title]BANNED