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/__DEFINES/xeno_ai.dm b/code/__DEFINES/xeno_ai.dm index 52bb4f0c91..9095f56ad9 100644 --- a/code/__DEFINES/xeno_ai.dm +++ b/code/__DEFINES/xeno_ai.dm @@ -15,7 +15,7 @@ #define VEHICLE_PENALTY 25 #define WINDOW_FRAME_PENALTY 25 #define BARRICADE_PENALTY 50 -#define WALL_PENALTY 50 +#define WALL_PENALTY 100 /* PROBABILITY CALCULATIONS ARE HERE diff --git a/code/datums/components/xeno/ai_behavior_overrides/build_override_behavior.dm b/code/datums/components/xeno/ai_behavior_overrides/build_override_behavior.dm index a5c4a03982..4a03c2c313 100644 --- a/code/datums/components/xeno/ai_behavior_overrides/build_override_behavior.dm +++ b/code/datums/components/xeno/ai_behavior_overrides/build_override_behavior.dm @@ -31,22 +31,19 @@ qdel(src) return FALSE - if(locate(/obj/structure/mineral_door/resin) in location) - qdel(src) - return FALSE - var/area/current_area = get_area(location) if(!current_area.is_resin_allowed) for(var/client/game_master in GLOB.game_masters) - to_chat(game_master, SPAN_XENOBOLDNOTICE("This area doesn't allow xenos to build here")) + to_chat(game_master, SPAN_XENOBOLDNOTICE("[current_area] doesn't allow xenos to build here")) qdel(src) return FALSE - if(distance > 10) + if(locate(/obj/structure/mineral_door/resin) in location) + qdel(src) return FALSE - if(checked_xeno.current_target) + if(distance > 10) return FALSE if(!locate(/datum/action/xeno_action/activable/secrete_resin) in checked_xeno.actions) @@ -55,7 +52,7 @@ if(checked_xeno.get_plasma_percentage() < PLASMA_RETREAT_PERCENTAGE) var/turf/xeno_loc = get_turf(checked_xeno) if(xeno_loc.weeds) - checked_xeno.set_resting(TRUE, FALSE, TRUE) + checked_xeno.set_resting(TRUE, FALSE) return FALSE @@ -75,19 +72,21 @@ var/turf/parent_turf = get_turf(parent) var/distance = get_dist(processing_xeno, parent) - var/list/turfs_around = xeno_loc.AdjacentTurfs() - if(turfs_around && distance < 1) // We are gonna be stuck after building at our loc, let's step away - return processing_xeno.move_to_next_turf(pick(turfs_around)) - - var/is_diagonal = (get_dir(processing_xeno, parent_turf) in diagonals) - if(is_diagonal || distance > 1) + /// Is xeno adjacent to parent_turf? + if(distance > 1) return processing_xeno.move_to_next_turf(parent_turf) + /// Xeno will be stuck after building at its loc, if so - we command droney to step away + if(distance < 1) + return processing_xeno.move_to_next_turf(pick(GLOB.cardinals)) + + /// If there is something that might block our resin - slash it for(var/obj/structure/blocker in parent_turf.contents) - if(!blocker.unslashable && blocker.density || istype(blocker, /obj/structure/bed)) + if(!blocker.unslashable && (blocker.density || istype(blocker, /obj/structure/bed))) INVOKE_ASYNC(processing_xeno, TYPE_PROC_REF(/mob, do_click), blocker, "", list()) return TRUE + /// If no ground weeds present - command our xeno to plant one if(!parent_turf.weeds) var/datum/action/xeno_action/onclick/plant_weeds/weeds_action = locate() in processing_xeno.actions INVOKE_ASYNC(weeds_action, TYPE_PROC_REF(/datum/action/xeno_action/onclick/plant_weeds, use_ability_wrapper)) @@ -96,24 +95,30 @@ var/list/resin_types = processing_xeno.resin_build_order processing_xeno.selected_resin = locate(/datum/resin_construction/resin_turf/wall) in resin_types - var/wall_nearby = FALSE - var/blocked_turfs = 0 - for(var/turf/blocked_turf in orange(1, parent_turf) - parent_turf.AdjacentTurfs()) - blocked_turfs++ + /// Let's decide whenever we are building a door or naw + var/build_door = FALSE + for(var/turf/blocked_turf in RANGE_TURFS(1, parent_turf) - parent_turf) + var/direction = get_dir(parent_turf, blocked_turf) + if(direction in diagonals) + continue - if(get_dir(blocked_turf, parent_turf) in diagonals) + if(!blocked_turf.density) continue - if(blocked_turf.density) - wall_nearby = TRUE + /// Checking for any opposite walls on angles 135, 180, 225 respectfully + for(var/opposite_dir in reverse_nearby_direction(direction)) + var/turf/opposite_turf = get_step(parent_turf, opposite_dir) + if(opposite_turf.density) + build_door = TRUE + break - var/obj/effect/alien/weeds/turf_weeds = blocked_turf.weeds - if(turf_weeds && turf_weeds.secreting) - wall_nearby = TRUE // Something is being constructed nearby, let's bet this is a new resin wall + var/obj/effect/alien/weeds/opposite_weeds = opposite_turf.weeds + if(opposite_weeds && opposite_weeds.secreting) + /// Something is being constructed nearby, let's bet this is a new resin wall + build_door = TRUE - if(wall_nearby) - if(prob(XENO_DOOR_BUILDING_CHANCE) || (wall_nearby && blocked_turfs > 1)) - processing_xeno.selected_resin = locate(/datum/resin_construction/resin_obj/door) in resin_types + if(build_door || prob(XENO_DOOR_BUILDING_CHANCE)) + processing_xeno.selected_resin = locate(/datum/resin_construction/resin_obj/door) in resin_types var/datum/action/xeno_action/activable/secrete_resin/build_action = locate() in processing_xeno.actions INVOKE_ASYNC(build_action, TYPE_PROC_REF(/datum/action/xeno_action/activable/secrete_resin, use_ability_wrapper), parent_turf) diff --git a/code/datums/skills/uscm.dm b/code/datums/skills/uscm.dm index 2da19793e5..7e6658d9c1 100644 --- a/code/datums/skills/uscm.dm +++ b/code/datums/skills/uscm.dm @@ -8,13 +8,6 @@ United States Colonial Marines name = "Private" //same as default -/datum/skills/pfc/crafty - name = "Crafty Private" - skills = list( - SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, - ) - /datum/skills/combat_medic name = "Combat Medic" skills = list( @@ -23,13 +16,6 @@ United States Colonial Marines SKILL_JTAC = SKILL_JTAC_BEGINNER, ) -/datum/skills/combat_medic/crafty - name = "Crafty Combat Medic" - skills = list( - SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, - ) - /datum/skills/combat_engineer name = "Combat Engineer" skills = list( 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/modules/gear_presets/cmb.dm b/code/modules/gear_presets/cmb.dm index 22bf31d42c..94672a1b9b 100644 --- a/code/modules/gear_presets/cmb.dm +++ b/code/modules/gear_presets/cmb.dm @@ -418,7 +418,7 @@ rank = JOB_SQUAD_MARINE paygrade = "ME2" role_comm_title = "A-RFN" - skills = /datum/skills/pfc/crafty + skills = /datum/skills/pfc faction = FACTION_MARSHAL faction_group = list(FACTION_MARSHAL, FACTION_MARINE) @@ -590,10 +590,6 @@ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/hypospray/autoinjector/emergency, WEAR_IN_BELT) new_human.equip_to_slot_or_del(new /obj/item/reagent_container/hypospray/autoinjector/emergency, WEAR_IN_BELT) new_human.equip_to_slot_or_del(new /obj/item/bodybag/cryobag, WEAR_IN_BELT) - if(new_human.disabilities & NEARSIGHTED) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health/prescription, WEAR_EYES) - else - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health, WEAR_EYES) new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine, WEAR_HANDS) new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife, WEAR_FEET) new_human.equip_to_slot_or_del(new /obj/item/storage/box/MRE, WEAR_IN_BACK) diff --git a/code/modules/gear_presets/dust_raider.dm b/code/modules/gear_presets/dust_raider.dm index 78fea23a77..37a69c7828 100644 --- a/code/modules/gear_presets/dust_raider.dm +++ b/code/modules/gear_presets/dust_raider.dm @@ -26,7 +26,7 @@ rank = JOB_SQUAD_MARINE paygrade = "ME2" role_comm_title = "RFN" - skills = /datum/skills/pfc/crafty + skills = /datum/skills/pfc /datum/equipment_preset/dust_raider/private/load_gear(mob/living/carbon/human/new_human) //TODO: add backpacks and satchels diff --git a/code/modules/gear_presets/fun.dm b/code/modules/gear_presets/fun.dm index 23350768a6..2e17dfe9ef 100644 --- a/code/modules/gear_presets/fun.dm +++ b/code/modules/gear_presets/fun.dm @@ -14,7 +14,7 @@ flags = EQUIPMENT_PRESET_EXTRA faction = FACTION_PIRATE - skills = /datum/skills/pfc/crafty + skills = /datum/skills/pfc /datum/equipment_preset/fun/pirate/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) @@ -417,7 +417,7 @@ uses_special_name = TRUE - skills = /datum/skills/pfc/crafty // about equivalent to a marine + skills = /datum/skills/pfc // about equivalent to a marine assignment = "Monkey" rank = "Monkey" diff --git a/code/modules/gear_presets/uscm.dm b/code/modules/gear_presets/uscm.dm index 1e64a30e17..e1a510ce8d 100644 --- a/code/modules/gear_presets/uscm.dm +++ b/code/modules/gear_presets/uscm.dm @@ -641,7 +641,7 @@ rank = JOB_SQUAD_MARINE paygrade = "ME2" role_comm_title = "RFN" - skills = /datum/skills/pfc/crafty + skills = /datum/skills/pfc minimap_icon = "private" 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/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..92978c9e14 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..5942c9dda6 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/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/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) => {