diff --git a/code/__DEFINES/xeno_ai.dm b/code/__DEFINES/xeno_ai.dm index d1f0b647cd..847f649fd5 100644 --- a/code/__DEFINES/xeno_ai.dm +++ b/code/__DEFINES/xeno_ai.dm @@ -23,8 +23,10 @@ PROBABILITY CALCULATIONS ARE HERE #define XENO_SLASH 80 -#define RETREAT_AT_PLASMA_LEVEL 0.2 -#define RETREAT_AT_HEALTH_LEVEL 0.4 +#define XENO_DOOR_BUILDING_CHANCE 25 + +#define PLASMA_RETREAT_PERCENTAGE 10 +#define HEALTH_RETREAT_PERCENTAGE 20 #define LURKING_IGNORE_SHOT_CHANCE 75 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 new file mode 100644 index 0000000000..5430c3cd03 --- /dev/null +++ b/code/datums/components/xeno/ai_behavior_overrides/build_override_behavior.dm @@ -0,0 +1,104 @@ + +/datum/component/ai_behavior_override/build + behavior_icon_state = "priority_move_order" + + max_assigned = 1 + +/datum/component/ai_behavior_override/build/Initialize(...) + . = ..() + + if(istype(parent, /mob)) + return COMPONENT_INCOMPATIBLE + + var/turf/open/location = get_turf(parent) + if(location.is_weedable() != FULLY_WEEDABLE) + return COMPONENT_INCOMPATIBLE + +/datum/component/ai_behavior_override/build/Destroy(force, silent, ...) + var/turf/parent_turf = get_turf(parent) + if(QDELETED(parent) && parent_turf != parent) + parent_turf.AddComponent(/datum/component/ai_behavior_override/build) + + return ..() + +/datum/component/ai_behavior_override/build/check_behavior_validity(mob/living/carbon/xenomorph/checked_xeno, distance) + . = ..() + if(!.) + return + + var/turf/open/location = get_turf(parent) + if(!istype(location)) + qdel(src) + return FALSE + + if(locate(/obj/structure/mineral_door/resin) in location) + qdel(src) + return FALSE + + if(distance > 10) + return FALSE + + if(checked_xeno.current_target) + return FALSE + + if(!locate(/datum/action/xeno_action/activable/secrete_resin) in checked_xeno.actions) + return FALSE + + if(checked_xeno.get_plasma_percentage() < PLASMA_RETREAT_PERCENTAGE) + var/turf/xeno_loc = get_turf(checked_xeno) + if(xeno_loc.weeds && !checked_xeno.resting) + currently_assigned -= checked_xeno + checked_xeno.lay_down() + + return FALSE + + return TRUE + +/datum/component/ai_behavior_override/build/process_override_behavior(mob/living/carbon/xenomorph/processing_xeno, delta_time) + . = ..() + if(!.) + return + + processing_xeno.resting = FALSE + + var/turf/xeno_loc = get_turf(processing_xeno) + if(xeno_loc.density) + return FALSE // We shouldn't stand in a wall, let's act default + + var/turf/parent_turf = get_turf(parent) + + var/is_diagonal = (get_dir(processing_xeno, parent_turf) in diagonals) + if(is_diagonal || get_dist(processing_xeno, parent) > 1) + return processing_xeno.move_to_next_turf(parent_turf) + + for(var/obj/structure/blocker in parent_turf.contents) + 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(!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)) + return TRUE + + 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 + var/blocked_turfs = 0 + for(var/turf/blocked_turf in orange(1, parent_turf) - parent_turf.AdjacentTurfs()) + if(get_dir(blocked_turf, parent_turf) in diagonals) + continue + + if(blocked_turf.density) + wall_nearby = TRUE + + blocked_turfs++ + + if(blocked_turfs) + if(prob(XENO_DOOR_BUILDING_CHANCE) || (wall_nearby && blocked_turfs == 2)) + 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) + return TRUE diff --git a/code/datums/skills/uscm.dm b/code/datums/skills/uscm.dm index d3f4823286..871278ff23 100644 --- a/code/datums/skills/uscm.dm +++ b/code/datums/skills/uscm.dm @@ -75,6 +75,7 @@ United States Colonial Marines SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED, SKILL_JTAC = SKILL_JTAC_TRAINED, SKILL_INTEL = SKILL_INTEL_TRAINED, + SKILL_PILOT = SKILL_PILOT_EXPERT, ) /datum/skills/intel @@ -290,6 +291,7 @@ COMMAND STAFF SKILL_JTAC = SKILL_JTAC_EXPERT, SKILL_INTEL = SKILL_INTEL_TRAINED, SKILL_SURGERY = SKILL_SURGERY_NOVICE, + SKILL_PILOT = SKILL_PILOT_EXPERT, ) /datum/skills/SEA diff --git a/code/datums/vehicles.dm b/code/datums/vehicles.dm index 36ac96938c..ac71cc1fc7 100644 --- a/code/datums/vehicles.dm +++ b/code/datums/vehicles.dm @@ -26,6 +26,10 @@ name = "APC - No FPW" interior_id = "apc_no_fpw" +/datum/map_template/interior/apc_movie + name = "Movie APC" + interior_id = "apc_movie" + /datum/map_template/interior/fancy_locker name = "Fancy Locker" interior_id = "fancylocker" diff --git a/code/game/area/golden_arrow.dm b/code/game/area/golden_arrow.dm index 11656d7da4..7c35640d06 100644 --- a/code/game/area/golden_arrow.dm +++ b/code/game/area/golden_arrow.dm @@ -65,3 +65,7 @@ /area/golden_arrow/synthcloset name = "\improper Synthetic Storage Closet" icon_state = "livingspace" + +/area/golden_arrow/firingrange + name = "\improper Firing Range" + icon_state = "firingrange" diff --git a/code/game/machinery/vending/vendor_types/crew/synthetic.dm b/code/game/machinery/vending/vendor_types/crew/synthetic.dm index c912ae8ce3..cec5627a63 100644 --- a/code/game/machinery/vending/vendor_types/crew/synthetic.dm +++ b/code/game/machinery/vending/vendor_types/crew/synthetic.dm @@ -121,6 +121,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth, list( list("M3A1 Pattern Synthetic Utility Vest (UA Jungle)", 0, /obj/item/clothing/suit/storage/marine/light/synvest/jungle, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR), list("M3A1 Pattern Synthetic Utility Vest (UA Snow)", 0, /obj/item/clothing/suit/storage/marine/light/synvest/snow, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR), list("M3A1 Pattern Synthetic Utility Vest (UA Desert)", 0, /obj/item/clothing/suit/storage/marine/light/synvest/desert, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR), + list("M3-VL Pattern Ballistics Vest", 0, /obj/item/clothing/suit/storage/marine/light/vest, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR), list("GLOVES (CHOOSE 1)", 0, null, null, null), list("Insulated Gloves", 0, /obj/item/clothing/gloves/yellow, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_RECOMMENDED), diff --git a/code/game/objects/effects/spawners/prop_gun_spawner.dm b/code/game/objects/effects/spawners/prop_gun_spawner.dm index 5e620994e7..bdfb083ffe 100644 --- a/code/game/objects/effects/spawners/prop_gun_spawner.dm +++ b/code/game/objects/effects/spawners/prop_gun_spawner.dm @@ -90,3 +90,8 @@ prop_gun_type = /obj/item/weapon/gun/rifle/m41aMK1 custom_gun_name = "\improper Broken M41A pulse rifle" custom_gun_desc = "An older design of the Pulse Rifle commonly used by Colonial Marines. This one has seen better days. The trigger is missing, the barrel is bent, and it no longer appropriately feeds magazines." + +/obj/effect/spawner/prop_gun/anti_tank + prop_gun_type = /obj/item/weapon/gun/launcher/rocket/anti_tank + custom_gun_name = "\improper Spent M83A2 SADAR" + custom_gun_desc = "A spent M83A2 tube. It's been kept as a trophy after a lucky tank kill nearly a thousand meters out. Someone has engraved a single tally-mark on the side to begin recording a kill-count." diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 114964464a..3f9dc09ae6 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -524,6 +524,27 @@ qdel(signal) ..() +/obj/effect/landmark/rappel + name = "Rappel Point" + var/datum/cas_signal/signal + invisibility_value = SEE_INVISIBLE_OBSERVER + icon_state = "o_green" + +/obj/effect/landmark/rappel/New() + . = ..() + signal = new(src) + signal.target_id = ++cas_tracking_id_increment + name = "Rappel Point #[signal.target_id]" + signal.name = name + cas_groups[FACTION_MARINE].add_signal(signal) + +/obj/effect/landmark/rappel/Destroy() + if(signal) + cas_groups[FACTION_MARINE].remove_signal(signal) + QDEL_NULL(signal) + return ..() + + /// Signal flares deployed by a flare gun /obj/item/device/flashlight/flare/signal/gun activate_message = FALSE diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 3f4e721d59..3a752b43f6 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -330,6 +330,7 @@ var/list/roundstart_mod_verbs = list( add_verb(src, /client/proc/toggle_join_xeno) add_verb(src, /client/proc/game_master_rename_platoon) add_verb(src, /client/proc/toggle_vehicle_blockers) + add_verb(src, /client/proc/toggle_rappel_menu) if(CLIENT_HAS_RIGHTS(src, R_SERVER)) add_verb(src, admin_verbs_server) if(CLIENT_HAS_RIGHTS(src, R_DEBUG)) @@ -363,6 +364,7 @@ var/list/roundstart_mod_verbs = list( /client/proc/toggle_join_xeno, /client/proc/game_master_rename_platoon, /client/proc/toggle_vehicle_blockers, + /client/proc/toggle_rappel_menu, admin_verbs_admin, admin_verbs_ban, admin_verbs_minor_event, diff --git a/code/modules/admin/game_master/extra_buttons/rappel_menu.dm b/code/modules/admin/game_master/extra_buttons/rappel_menu.dm new file mode 100644 index 0000000000..f35cbae24e --- /dev/null +++ b/code/modules/admin/game_master/extra_buttons/rappel_menu.dm @@ -0,0 +1,108 @@ +GLOBAL_LIST_EMPTY(game_master_rappels) +GLOBAL_DATUM_INIT(rappel_panel, /datum/rappel_menu, new) +#define RAPPEL_CLICK_INTERCEPT_ACTION "rappel_click_intercept_action" + +/client/proc/toggle_rappel_menu() + set name = "Rappel Menu" + set category = "Game Master.Extras" + if(!check_rights(R_ADMIN)) + return + + GLOB.rappel_panel.tgui_interact(mob) + +/datum/rappel_menu + var/rappel_click_intercept = FALSE + +/datum/rappel_menu/ui_data(mob/user) + . = ..() + + var/list/data = list() + + data["game_master_rappels"] = length(GLOB.game_master_rappels) ? GLOB.game_master_rappels : "" + data["rappel_click_intercept"] = rappel_click_intercept + return data + +/datum/rappel_menu/proc/InterceptClickOn(mob/user, params, atom/object) + var/list/modifiers = params2list(params) + if(rappel_click_intercept) + var/turf/object_turf = get_turf(object) + if(LAZYACCESS(modifiers, MIDDLE_CLICK)) + for(var/obj/effect/landmark/rappel/R in object_turf) + GLOB.game_master_rappels -= R + QDEL_NULL(R) + return TRUE + + var/obj/effect/landmark/rappel/rappel = new(object_turf) + var/rappel_ref = REF(rappel) + GLOB.game_master_rappels += list(list( + "rappel" = rappel, + "rappel_name" = rappel.name, + "rappel_ref" = rappel_ref, + )) + return TRUE + +/datum/rappel_menu/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "GameMasterRappelMenu", "Rappel Menu") + ui.open() + user.client?.click_intercept = src +/datum/rappel_menu/ui_status(mob/user, datum/ui_state/state) + return UI_INTERACTIVE + + +/datum/rappel_menu/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + + switch(action) + if("remove_rappel") + if(!params["val"]) + return + + var/list/rappel = params["val"] + + var/atom/rappel_atom = locate(rappel["rappel_ref"]) + + if(!rappel_atom) + return TRUE + + if(tgui_alert(ui.user, "Do you want to remove [rappel_atom] ?", "Confirmation", list("Yes", "No")) != "Yes") + return TRUE + + remove_rappel(rappel_atom) + + if("jump_to_rappel") + if(!params["val"]) + return + + var/list/rappel = params["val"] + + var/atom/rappel_atom = locate(rappel["rappel_ref"]) + + var/turf/rappel_turf = get_turf(rappel_atom) + + if(!rappel_turf) + return TRUE + + var/client/jumping_client = ui.user.client + jumping_client.jump_to_turf(rappel_turf) + return TRUE + + if("toggle_click_rappel") + rappel_click_intercept = !rappel_click_intercept + return + +/datum/rappel_menu/ui_close(mob/user) + var/client/user_client = user.client + if(user_client?.click_intercept == src) + user_client.click_intercept = null + + rappel_click_intercept = FALSE + +/datum/rappel_menu/proc/remove_rappel(obj/removing_datum) + SIGNAL_HANDLER + + for(var/list/cycled_rappel in GLOB.game_master_rappels) + if(cycled_rappel["rappel"] == removing_datum) + GLOB.game_master_rappels.Remove(list(cycled_rappel)) + QDEL_NULL(removing_datum) diff --git a/code/modules/admin/game_master/game_master.dm b/code/modules/admin/game_master/game_master.dm index 5d450037db..29de8161da 100644 --- a/code/modules/admin/game_master/game_master.dm +++ b/code/modules/admin/game_master/game_master.dm @@ -35,8 +35,8 @@ GLOBAL_VAR_INIT(radio_communication_clarity, 100) // Behavior stuff #define DEFAULT_BEHAVIOR_STRING "Attack" -#define SELECTABLE_XENO_BEHAVIORS list("Attack", "Capture", "Hive") -#define SELECTABLE_XENO_BEHAVIORS_ASSOC list("Attack" = /datum/component/ai_behavior_override/attack, "Capture" = /datum/component/ai_behavior_override/capture, "Hive" = /datum/component/ai_behavior_override/hive) +#define SELECTABLE_XENO_BEHAVIORS list("Attack", "Capture", "Hive", "Build") +#define SELECTABLE_XENO_BEHAVIORS_ASSOC list("Attack" = /datum/component/ai_behavior_override/attack, "Capture" = /datum/component/ai_behavior_override/capture, "Hive" = /datum/component/ai_behavior_override/hive, "Build" = /datum/component/ai_behavior_override/build) // Objective stuff #define OBJECTIVE_NUMBER_OPTIONS list("zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine") diff --git a/code/modules/gear_presets/synths.dm b/code/modules/gear_presets/synths.dm index 9ac7950b72..70efeb9f39 100644 --- a/code/modules/gear_presets/synths.dm +++ b/code/modules/gear_presets/synths.dm @@ -30,7 +30,7 @@ if(iscolonysynthetic(new_human) && !isworkingjoe(new_human)) new_human.set_skills(/datum/skills/colonial_synthetic) - new_human.allow_gun_usage = FALSE + new_human.allow_gun_usage = TRUE //*****************************************************************************************************/ diff --git a/code/modules/mob/living/carbon/human/species/synthetic.dm b/code/modules/mob/living/carbon/human/species/synthetic.dm index 38b7e93526..d521ed2a63 100644 --- a/code/modules/mob/living/carbon/human/species/synthetic.dm +++ b/code/modules/mob/living/carbon/human/species/synthetic.dm @@ -13,10 +13,7 @@ bloodsplatter_type = /obj/effect/temp_visual/dir_setting/bloodsplatter/synthsplatter - total_health = 150 //more health than regular humans - - brute_mod = 0.5 - burn_mod = 0.9 //a small bit of resistance + total_health = 100 //same health as regular humans cold_level_1 = -1 cold_level_2 = -1 @@ -40,7 +37,7 @@ knock_down_reduction = 5 stun_reduction = 5 - acid_blood_dodge_chance = 25 + acid_blood_dodge_chance = 50 inherent_verbs = list( /mob/living/carbon/human/synthetic/proc/toggle_HUD, @@ -76,20 +73,15 @@ name = SYNTH_COLONY name_plural = "Colonial Synthetics" uses_ethnicity = TRUE + brute_mod = 0.8 burn_mod = 0.8 mob_inherent_traits = list(TRAIT_SUPER_STRONG) pain_type = /datum/pain/synthetic/colonial rarity_value = 1.5 - slowdown = 0.2 - total_health = 200 //But more durable default_lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - knock_down_reduction = 3.5 - stun_reduction = 3.5 - - /datum/species/synthetic/colonial/colonial_gen_two name = SYNTH_COLONY_GEN_TWO uses_ethnicity = FALSE //2nd gen uses generic human look @@ -111,8 +103,8 @@ uses_ethnicity = FALSE mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES) - burn_mod = 0.6 //made for combat - total_health = 250 //made for combat + brute_mod = 0.5 + burn_mod = 0.5 //made for combat hair_color = "#000000" icobase = 'icons/mob/humans/species/r_synthetic.dmi' diff --git a/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm b/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm index fa1b2ac4a1..a1b6f96ab6 100644 --- a/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm +++ b/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm @@ -302,10 +302,10 @@ apply_effect(3, WEAKEN) throwing = FALSE return - if(iscolonysynthetic(H) && prob(60)) + if(issynth(H) && prob(80)) visible_message(SPAN_DANGER("[H] withstands being pounced and slams down [src]!"), SPAN_XENODANGER("[H] throws you down after withstanding the pounce!"), null, 5) - apply_effect(1.5, WEAKEN) + apply_effect(3.5, WEAKEN) throwing = FALSE return diff --git a/code/modules/mob/living/carbon/xenomorph/ai/movement/lurking.dm b/code/modules/mob/living/carbon/xenomorph/ai/movement/lurking.dm index e9413bc4a4..eeeb5b9ba8 100644 --- a/code/modules/mob/living/carbon/xenomorph/ai/movement/lurking.dm +++ b/code/modules/mob/living/carbon/xenomorph/ai/movement/lurking.dm @@ -67,8 +67,13 @@ continue var/blocked = FALSE - for(var/atom/potential_blocker as anything in potential_home) - if(potential_blocker != idle_xeno && (potential_blocker.can_block_movement || potential_blocker.density)) + for(var/obj/structure/potential_blocker in potential_home) + if(potential_blocker.unslashable && potential_blocker.can_block_movement && potential_blocker.density) + blocked = TRUE + break + + for(var/mob/potential_blocker in potential_home) + if(potential_blocker != idle_xeno && potential_blocker.can_block_movement && potential_blocker.density) blocked = TRUE break @@ -76,7 +81,24 @@ continue var/preferred = FALSE + for(var/obj/structure/structure in potential_home) + if(structure.unslashable && structure.can_block_movement && structure.density) + continue + + if(structure.invisibility == 101) + continue + + preferred = TRUE + break + for(var/turf/closed/touching_turf in orange(1, potential_home)) + if(get_dir(potential_home, touching_turf) in diagonals) + continue + + preferred = TRUE + break + + for(var/obj/item/stack/sheet/sheet in potential_home) preferred = TRUE break @@ -194,12 +216,14 @@ #undef LURKER_BAITS_BEFORE_AMBUSH /datum/xeno_ai_movement/linger/lurking/proc/interact_random(mob/living/carbon/xenomorph/X) - for(var/obj/potential_interaction in orange(1, X)) - if(istype(potential_interaction, /obj/structure/window_frame)) + for(var/atom/potential_interaction in orange(1, X)) + if(istype(potential_interaction, /obj/structure/shuttle)) + continue + if(istype(potential_interaction, /turf/closed/shuttle)) continue - if(istype(potential_interaction, /obj/structure/pipes)) + if(istype(potential_interaction, /obj/effect)) continue - if(istype(potential_interaction, /obj/structure/sign)) + if(istype(potential_interaction, /turf/open)) continue if(!potential_interaction.xeno_ai_act(X)) continue diff --git a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm index b5a8cfff51..497ebe734e 100644 --- a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm +++ b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm @@ -520,6 +520,10 @@ . = XENO_NO_DELAY_ACTION + if(M.action_busy) + to_chat(M, SPAN_WARNING("You are already doing something!")) + return + if(M.claw_type >= CLAW_TYPE_SHARP) M.animation_attack_on(src) playsound(src, 'sound/effects/metalhit.ogg', 25, 1) @@ -900,6 +904,7 @@ M.visible_message(SPAN_DANGER("[M] smashes \the [src] open!"), \ SPAN_DANGER("You smash \the [src] open!"), null, 5, CHAT_TYPE_XENO_COMBAT) else + take_damage(M.melee_damage_upper) M.visible_message(SPAN_DANGER("[M] smashes [src]!"), \ SPAN_DANGER("You smash [src]!"), null, 5, CHAT_TYPE_XENO_COMBAT) return XENO_ATTACK_ACTION @@ -933,6 +938,7 @@ M.visible_message(SPAN_DANGER("[M] smashes [src] beyond recognition!"), \ SPAN_DANGER("You enter a frenzy and smash [src] apart!"), null, 5, CHAT_TYPE_XENO_COMBAT) malfunction() + tip_over() else M.visible_message(SPAN_DANGER("[M] [M.slashes_verb] [src]!"), \ SPAN_DANGER("You [M.slash_verb] [src]!"), null, 5, CHAT_TYPE_XENO_COMBAT) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Lurker.dm b/code/modules/mob/living/carbon/xenomorph/castes/Lurker.dm index 8915cebbe6..d18b5eb671 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Lurker.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Lurker.dm @@ -59,6 +59,7 @@ icon_xeno = 'icons/mob/xenos/lurker.dmi' icon_xenonid = 'icons/mob/xenonids/lurker.dmi' + forced_retarget_time = (2 SECONDS) var/pull_direction /mob/living/carbon/xenomorph/lurker/launch_towards(datum/launch_metadata/LM) diff --git a/code/modules/mob/living/carbon/xenomorph/resin_constructions.dm b/code/modules/mob/living/carbon/xenomorph/resin_constructions.dm index 3bfb4e3554..bad467288e 100644 --- a/code/modules/mob/living/carbon/xenomorph/resin_constructions.dm +++ b/code/modules/mob/living/carbon/xenomorph/resin_constructions.dm @@ -20,11 +20,6 @@ GLOBAL_VAR_INIT(resin_lz_allowed, FALSE) var/can_build_on_doors = TRUE // if it can be built on a tile with an open door or not /datum/resin_construction/proc/can_build_here(turf/T, mob/living/carbon/xenomorph/X) - var/mob/living/carbon/xenomorph/blocker = locate() in T - if(blocker && blocker != X && blocker.stat != DEAD) - to_chat(X, SPAN_WARNING("Can't do that with [blocker] in the way!")) - return FALSE - if(!istype(T) || T.is_weedable() < FULLY_WEEDABLE) to_chat(X, SPAN_WARNING("You can't do that here.")) return FALSE diff --git a/code/modules/mob/living/carbon/xenomorph/xeno_ai_interaction.dm b/code/modules/mob/living/carbon/xenomorph/xeno_ai_interaction.dm index 9f4ce3df0e..217f61d56f 100644 --- a/code/modules/mob/living/carbon/xenomorph/xeno_ai_interaction.dm +++ b/code/modules/mob/living/carbon/xenomorph/xeno_ai_interaction.dm @@ -30,13 +30,19 @@ At bare minimum, make sure the relevant checks from parent types gets copied in return OBJECT_PENALTY /obj/structure/xeno_ai_act(mob/living/carbon/xenomorph/X) - if(unslashable) + if(unslashable || indestructible || (climbable && islurker(X))) if(!X.action_busy) do_climb(X) return return ..() +/obj/structure/machinery/xeno_ai_act(mob/living/carbon/xenomorph/X) + if(stat & TIPPED_OVER) + return + + return ..() + // MINERAL DOOR /obj/structure/mineral_door/xeno_ai_obstacle(mob/living/carbon/xenomorph/X, direction, turf/target) return DOOR_PENALTY diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index a234c5962f..ecda0787c5 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -66,15 +66,6 @@ var/mob/victim = grabbed_thing - var/max_grab_size = user.mob_size - /// Amazing what you can do with a bit of dexterity. - if(HAS_TRAIT(user, TRAIT_DEXTROUS)) - max_grab_size++ - /// Strong mobs can lift above their own weight. - if(HAS_TRAIT(user, TRAIT_SUPER_STRONG))//NB; this will mean Yautja can bodily lift MOB_SIZE_XENO(3) and Synths can lift MOB_SIZE_XENO_SMALL(2) - max_grab_size++ - if(victim.mob_size > max_grab_size || !(victim.status_flags & CANPUSH)) - return //can't tighten your grip on mobs bigger than you and mobs you can't push. last_upgrade = world.time switch(user.grab_level) diff --git a/code/modules/vehicles/apc/apc_movie.dm b/code/modules/vehicles/apc/apc_movie.dm new file mode 100644 index 0000000000..aef7ad45b2 --- /dev/null +++ b/code/modules/vehicles/apc/apc_movie.dm @@ -0,0 +1,168 @@ + +/obj/vehicle/multitile/apc/movie + name = "M577A3 Armored Personnel Carrier" + desc = "An M577A3 Armored Personnel Carrier complete with a tactical operations center. Entrance on the right." + + icon = 'icons/obj/vehicles/movieapc.dmi' + icon_state = "apc_base_movie" + pixel_x = -64 + pixel_y = -64 + + bound_width = 96 + bound_height = 96 + + interior_map = /datum/map_template/interior/apc_movie + + + passengers_slots = 20 + + entrances = list( + "right rear" = list(-2, 1), + "right front" = list(-2, 0) + ) + + seats = list( + VEHICLE_DRIVER = null, + VEHICLE_GUNNER = null, + ) + + active_hp = list( + VEHICLE_DRIVER = null, + VEHICLE_GUNNER = null, + ) + +/obj/vehicle/multitile/apc/movie/add_seated_verbs(mob/living/M, seat) + if(!M.client) + return + add_verb(M.client, list( + /obj/vehicle/multitile/proc/get_status_info, + /obj/vehicle/multitile/proc/open_controls_guide, + /obj/vehicle/multitile/proc/name_vehicle, + )) + if(seat == VEHICLE_DRIVER) + add_verb(M.client, list( + /obj/vehicle/multitile/proc/toggle_door_lock, + /obj/vehicle/multitile/proc/switch_hardpoint, + /obj/vehicle/multitile/proc/cycle_hardpoint, + /obj/vehicle/multitile/proc/toggle_shift_click, + /obj/vehicle/multitile/proc/activate_horn, + )) + else if(seat == VEHICLE_GUNNER) + add_verb(M.client, list( + /obj/vehicle/multitile/proc/switch_hardpoint, + /obj/vehicle/multitile/proc/cycle_hardpoint, + /obj/vehicle/multitile/proc/toggle_shift_click, + )) + +/obj/vehicle/multitile/apc/movie/remove_seated_verbs(mob/living/M, seat) + if(!M.client) + return + remove_verb(M.client, list( + /obj/vehicle/multitile/proc/get_status_info, + /obj/vehicle/multitile/proc/open_controls_guide, + /obj/vehicle/multitile/proc/name_vehicle, + )) + SStgui.close_user_uis(M, src) + if(seat == VEHICLE_DRIVER) + remove_verb(M.client, list( + /obj/vehicle/multitile/proc/toggle_door_lock, + /obj/vehicle/multitile/proc/switch_hardpoint, + /obj/vehicle/multitile/proc/cycle_hardpoint, + /obj/vehicle/multitile/proc/toggle_shift_click, + /obj/vehicle/multitile/proc/activate_horn, + )) + else if(seat == VEHICLE_GUNNER) + remove_verb(M.client, list( + /obj/vehicle/multitile/proc/switch_hardpoint, + /obj/vehicle/multitile/proc/cycle_hardpoint, + /obj/vehicle/multitile/proc/toggle_shift_click, + )) + +/obj/vehicle/multitile/apc/movie/initialize_cameras(change_tag = FALSE) + if(!camera) + camera = new /obj/structure/machinery/camera/vehicle(src) + if(change_tag) + camera.c_tag = "#[rand(1,100)] M577A3 \"[nickname]\" APC" + if(camera_int) + camera_int.c_tag = camera.c_tag + " interior" + else + camera.c_tag = "#[rand(1,100)] M577A3 APC" + if(camera_int) + camera_int.c_tag = camera.c_tag + " interior" + +/obj/vehicle/multitile/apc/movie/set_muzzle_offsets(obj/item/hardpoint/HP) + //sets muzzle flash offsets for APC weapons as appropriate for the movie APC + switch(HP.slot) + if(HDPT_PRIMARY) //dualcannon + HP.muzzle_flash_pos = list( + "1" = list(8, -20), + "2" = list(25, 31), + "4" = list(-7, 27), + "8" = list(37, 9) + ) + if(HDPT_SECONDARY) //frontalcannon + HP.muzzle_flash_pos = list( + "1" = list(34, 70), + "2" = list(-1, -70), + "4" = list(88, -7), + "8" = list(-56, 12) + ) + if(HDPT_SUPPORT) //flare + HP.muzzle_flash_pos = list( + "1" = list(22, -20), + "2" = list(11, 32), + "4" = list(-5, 10), + "8" = list(37, 24) + ) + return ..() + +/* +** PRESETS SPAWNERS +*/ +/obj/effect/vehicle_spawner/apc_movie + name = "Movie APC Spawner" + icon = 'icons/obj/vehicles/movieapc.dmi' + icon_state = "apc_base_movie" + pixel_x = -64 + pixel_y = -64 + +/obj/effect/vehicle_spawner/apc_movie/Initialize() + . = ..() + spawn_vehicle() + qdel(src) + +//PRESET: no hardpoints +/obj/effect/vehicle_spawner/apc_movie/spawn_vehicle() + var/obj/vehicle/multitile/apc/movie/APC = new (loc) + + load_misc(APC) + load_hardpoints(APC) + handle_direction(APC) + APC.update_icon() + +//PRESET: only wheels installed +/obj/effect/vehicle_spawner/apc_movie/plain/load_hardpoints(obj/vehicle/multitile/apc/movie/V) + V.add_hardpoint(new /obj/item/hardpoint/locomotion/apc_wheels) + +//PRESET: default hardpoints, destroyed +/obj/effect/vehicle_spawner/apc_movie/decrepit/spawn_vehicle() + var/obj/vehicle/multitile/apc/movie/APC = new (loc) + + load_misc(APC) + load_hardpoints(APC) + handle_direction(APC) + load_damage(APC) + APC.update_icon() + +/obj/effect/vehicle_spawner/apc_movie/decrepit/load_hardpoints(obj/vehicle/multitile/apc/movie/V) + V.add_hardpoint(new /obj/item/hardpoint/primary/dualcannon) + V.add_hardpoint(new /obj/item/hardpoint/secondary/frontalcannon) + V.add_hardpoint(new /obj/item/hardpoint/support/flare_launcher) + V.add_hardpoint(new /obj/item/hardpoint/locomotion/apc_wheels) + +//PRESET: default hardpoints +/obj/effect/vehicle_spawner/apc_movie/fixed/load_hardpoints(obj/vehicle/multitile/apc/movie/V) + V.add_hardpoint(new /obj/item/hardpoint/primary/dualcannon) + V.add_hardpoint(new /obj/item/hardpoint/secondary/frontalcannon) + V.add_hardpoint(new /obj/item/hardpoint/support/flare_launcher) + V.add_hardpoint(new /obj/item/hardpoint/locomotion/apc_wheels) diff --git a/code/modules/vehicles/interior/areas.dm b/code/modules/vehicles/interior/areas.dm index 605b32079f..f18c4d03c8 100644 --- a/code/modules/vehicles/interior/areas.dm +++ b/code/modules/vehicles/interior/areas.dm @@ -24,6 +24,10 @@ name = "\improper CMD APC interior" icon_state = "apc_cmd" +/area/vehicle/apc/movie + name = "\improper M557A3 APC interior" + icon_state = "apc_movie" + /area/vehicle/van name = "van interior" icon_state = "van" diff --git a/code/modules/vehicles/multitile/multitile_hardpoints.dm b/code/modules/vehicles/multitile/multitile_hardpoints.dm index 2c5a343b80..b8edba78da 100644 --- a/code/modules/vehicles/multitile/multitile_hardpoints.dm +++ b/code/modules/vehicles/multitile/multitile_hardpoints.dm @@ -201,6 +201,7 @@ //ALWAYS CALL THIS WHEN ATTACHING HARDPOINTS /obj/vehicle/multitile/proc/add_hardpoint(obj/item/hardpoint/HP, mob/user) HP.owner = src + set_muzzle_offsets(HP) HP.forceMove(src) hardpoints += HP @@ -209,6 +210,9 @@ update_icon() +/obj/vehicle/multitile/proc/set_muzzle_offsets(obj/item/hardpoint/HP) + return + //General proc for taking off hardpoints //ALWAYS CALL THIS WHEN REMOVING HARDPOINTS /obj/vehicle/multitile/proc/remove_hardpoint(obj/item/hardpoint/old, mob/user) diff --git a/colonialmarines.dme b/colonialmarines.dme index 9a91390f91..3f71204835 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -401,6 +401,7 @@ #include "code\datums\components\xeno\shield_slash.dm" #include "code\datums\components\xeno\ai_behavior_overrides\attack_override_behavior.dm" #include "code\datums\components\xeno\ai_behavior_overrides\base_override_behavior.dm" +#include "code\datums\components\xeno\ai_behavior_overrides\build_override_behavior.dm" #include "code\datums\components\xeno\ai_behavior_overrides\capture_override_behavior.dm" #include "code\datums\components\xeno\ai_behavior_overrides\hive_override_behavior.dm" #include "code\datums\construction\construction_template.dm" @@ -1382,6 +1383,7 @@ #include "code\modules\admin\ToRban.dm" #include "code\modules\admin\game_master\game_master.dm" #include "code\modules\admin\game_master\game_master_submenu.dm" +#include "code\modules\admin\game_master\extra_buttons\rappel_menu.dm" #include "code\modules\admin\game_master\extra_buttons\rename_platoon.dm" #include "code\modules\admin\game_master\extra_buttons\toggle_join_xeno.dm" #include "code\modules\admin\game_master\extra_buttons\toggle_vehicle_blockers.dm" @@ -2383,6 +2385,7 @@ #include "code\modules\vehicles\apc\apc.dm" #include "code\modules\vehicles\apc\apc_command.dm" #include "code\modules\vehicles\apc\apc_medical.dm" +#include "code\modules\vehicles\apc\apc_movie.dm" #include "code\modules\vehicles\apc\interior.dm" #include "code\modules\vehicles\hardpoints\hardpoint.dm" #include "code\modules\vehicles\hardpoints\armor\armor.dm" diff --git a/icons/mob/xenos/crusher.dmi b/icons/mob/xenos/crusher.dmi index 014246dbee..f6a30f5901 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 937ddaa7b9..28016677bd 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 a44b68ccf4..aef231c699 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 487aabae7b..7a87f9cf3e 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 bf7d573b73..65c5a84fbe 100644 Binary files a/icons/mob/xenos/wounds.dmi and b/icons/mob/xenos/wounds.dmi differ diff --git a/icons/obj/vehicles/interiors/apc.dmi b/icons/obj/vehicles/interiors/apc.dmi index 5855af1dc0..e12c5f68ab 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/movieapc.dmi b/icons/obj/vehicles/movieapc.dmi new file mode 100644 index 0000000000..8c5faee611 Binary files /dev/null and b/icons/obj/vehicles/movieapc.dmi differ diff --git a/icons/turf/areas_interiors.dmi b/icons/turf/areas_interiors.dmi index 4da1109803..40e6e906ce 100644 Binary files a/icons/turf/areas_interiors.dmi and b/icons/turf/areas_interiors.dmi differ diff --git a/maps/interiors/apc_movie.dmm b/maps/interiors/apc_movie.dmm new file mode 100644 index 0000000000..d32b9f49ec --- /dev/null +++ b/maps/interiors/apc_movie.dmm @@ -0,0 +1,536 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/structure/interior_wall/apc{ + icon_state = "rear_6" + }, +/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 + }, +/turf/open/shuttle/vehicle{ + icon_state = "floor_1_4" + }, +/area/vehicle/apc/movie) +"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"; + layer = 2.97; + name = "Tactical Map Display"; + pixel_x = -7; + pixel_y = 11; + density = 0 + }, +/turf/open/shuttle/vehicle{ + icon_state = "floor_1_3" + }, +/area/vehicle/apc/movie) +"d" = ( +/obj/structure/bed/chair/vehicle{ + dir = 1; + pixel_x = -8 + }, +/obj/structure/bed/chair/vehicle{ + dir = 1; + pixel_x = 8 + }, +/obj/effect/landmark/interior/spawn/interior_viewport{ + dir = 1; + pixel_x = 2; + pixel_y = -13 + }, +/turf/open/shuttle/vehicle{ + icon_state = "floor_2" + }, +/area/vehicle/apc/movie) +"e" = ( +/obj/structure/interior_wall/apc{ + icon_state = "wheel_front_top_2"; + pixel_x = 4; + pixel_y = -4 + }, +/turf/open/void/vehicle, +/area/space) +"f" = ( +/obj/structure/interior_wall/apc{ + icon_state = "wheel_front_top_1"; + pixel_x = 1; + pixel_y = -4 + }, +/turf/open/void/vehicle, +/area/space) +"g" = ( +/obj/structure/interior_wall/apc{ + icon_state = "front_1" + }, +/turf/open/void/vehicle, +/area/space) +"h" = ( +/obj/effect/landmark/interior/spawn/weapons_loader, +/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; + pixel_x = 8 + }, +/obj/structure/bed/chair/vehicle{ + dir = 1; + pixel_x = -8 + }, +/obj/effect/landmark/interior/spawn/interior_viewport{ + dir = 1; + pixel_x = 8; + pixel_y = -11 + }, +/turf/open/shuttle/vehicle{ + icon_state = "floor_2" + }, +/area/vehicle/apc/movie) +"l" = ( +/obj/structure/interior_wall/apc{ + icon_state = "wall"; + opacity = 0 + }, +/turf/open/space/basic, +/area/space) +"m" = ( +/turf/open/shuttle/vehicle{ + icon_state = "floor_1_5" + }, +/area/vehicle/apc/movie) +"n" = ( +/obj/structure/interior_wall/apc{ + icon_state = "intersection_2"; + 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, +/area/space) +"o" = ( +/obj/structure/interior_wall/apc{ + icon_state = "rear_1" + }, +/turf/open/void/vehicle, +/area/space) +"p" = ( +/obj/structure/interior_wall/apc{ + icon_state = "front_4" + }, +/turf/open/void/vehicle, +/area/space) +"q" = ( +/obj/structure/interior_wall/apc{ + icon_state = "front_wheel_L_1" + }, +/turf/open/space/basic, +/area/space) +"r" = ( +/obj/structure/interior_wall/apc{ + icon_state = "rear_wheel_R"; + layer = 5.2 + }, +/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 + }, +/turf/open/shuttle/vehicle{ + icon_state = "floor_1_3" + }, +/area/vehicle/apc/movie) +"v" = ( +/obj/structure/bed/chair/vehicle{ + pixel_x = 8 + }, +/obj/structure/bed/chair/vehicle{ + pixel_x = -8 + }, +/obj/effect/landmark/interior/spawn/interior_viewport{ + pixel_x = -7; + pixel_y = 23 + }, +/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/structure/extinguisher_cabinet/lifeboat{ + icon = 'icons/obj/vehicles/interiors/general.dmi'; + pixel_x = -8; + pixel_y = 28 + }, +/turf/open/shuttle/vehicle{ + icon_state = "floor_1_5" + }, +/area/vehicle/apc/movie) +"y" = ( +/obj/structure/interior_wall/apc{ + icon_state = "front_5" + }, +/turf/open/void/vehicle, +/area/space) +"z" = ( +/obj/effect/landmark/interior/spawn/entrance{ + alpha = 50; + exit_type = /obj/structure/interior_exit/vehicle/apc; + name = "Right APC door"; + tag = "right rear" + }, +/turf/open/shuttle/vehicle{ + icon_state = "floor_1_3" + }, +/area/vehicle/apc/movie) +"A" = ( +/obj/structure/bed/chair/vehicle{ + dir = 1; + pixel_x = 8 + }, +/obj/structure/bed/chair/vehicle{ + dir = 1; + pixel_x = -8 + }, +/turf/open/shuttle/vehicle{ + icon_state = "floor_2" + }, +/area/vehicle/apc/movie) +"B" = ( +/turf/open/shuttle/vehicle{ + icon_state = "floor_1_3" + }, +/area/vehicle/apc/movie) +"C" = ( +/obj/structure/interior_wall/apc{ + icon_state = "door_big_right"; + layer = 5.2; + pixel_y = 32; + alpha = 100 + }, +/turf/open/void/vehicle, +/area/space) +"D" = ( +/obj/structure/interior_wall/apc{ + icon_state = "rear_5" + }, +/turf/open/void/vehicle, +/area/space) +"E" = ( +/turf/open/void/vehicle, +/area/space) +"F" = ( +/obj/structure/bed/chair/vehicle{ + pixel_x = 8 + }, +/obj/structure/bed/chair/vehicle{ + pixel_x = -8 + }, +/obj/structure/vehicle_locker{ + pixel_y = 28 + }, +/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 + }, +/turf/open/shuttle/vehicle{ + icon_state = "floor_2" + }, +/area/vehicle/apc/movie) +"H" = ( +/obj/structure/interior_wall/apc{ + icon_state = "corner_inverse_L"; + opacity = 0 + }, +/turf/open/space/basic, +/area/space) +"I" = ( +/obj/structure/interior_wall/apc{ + icon_state = "front_3" + }, +/obj/structure/interior_wall/apc{ + icon_state = "front_4" + }, +/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 + }, +/turf/open/shuttle/vehicle, +/area/space) +"K" = ( +/obj/structure/interior_wall/apc{ + icon_state = "corner_small_L"; + opacity = 0 + }, +/obj/structure/interior_wall/apc{ + icon_state = "wheel_back_top_2"; + pixel_x = -4; + pixel_y = -4 + }, +/turf/open/void/vehicle, +/area/space) +"L" = ( +/obj/structure/interior_wall/apc{ + icon_state = "rear_wheel_L" + }, +/turf/open/space/basic, +/area/space) +"M" = ( +/obj/structure/interior_wall/apc{ + icon_state = "rear_3" + }, +/turf/open/void/vehicle, +/area/space) +"N" = ( +/turf/open/shuttle/vehicle{ + icon_state = "floor_1_4" + }, +/area/vehicle/apc/movie) +"O" = ( +/obj/structure/interior_wall/apc{ + icon_state = "front_2" + }, +/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"; + pixel_y = 32; + layer = 5.2; + alpha = 100 + }, +/turf/open/void/vehicle, +/area/space) +"R" = ( +/obj/structure/interior_wall/apc{ + icon_state = "wall_wheelside" + }, +/turf/open/space/basic, +/area/space) +"S" = ( +/obj/structure/interior_wall/apc{ + icon_state = "front_6" + }, +/turf/open/void/vehicle, +/area/space) +"T" = ( +/obj/effect/landmark/interior/spawn/entrance{ + alpha = 50; + exit_type = /obj/structure/interior_exit/vehicle/apc; + name = "Right APC door"; + tag = "right front" + }, +/turf/open/shuttle/vehicle{ + icon_state = "floor_1_4" + }, +/area/vehicle/apc/movie) +"U" = ( +/obj/structure/interior_wall/apc{ + icon_state = "front_wheel_R" + }, +/turf/open/space/basic, +/area/space) +"V" = ( +/obj/structure/interior_wall/apc{ + icon_state = "wheel_back_top_1"; + pixel_x = -4; + pixel_y = -4 + }, +/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 + }, +/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" + }, +/turf/open/void/vehicle, +/area/space) +"Z" = ( +/obj/structure/interior_wall/apc{ + icon_state = "corner_small_R"; + opacity = 0 + }, +/obj/structure/interior_wall/apc{ + icon_state = "wheel_front_top_2"; + pixel_x = 4; + pixel_y = -4 + }, +/obj/structure/interior_wall/apc{ + icon_state = "wheel_front_top_2"; + pixel_x = 8; + pixel_y = -4; + layer = 2.03 + }, +/turf/open/void/vehicle, +/area/space) + +(1,1,1) = {" +a +D +M +M +Y +o +E +"} +(2,1,1) = {" +V +s +v +m +A +L +E +"} +(3,1,1) = {" +K +H +F +m +j +r +E +"} +(4,1,1) = {" +X +c +u +P +B +z +Q +"} +(5,1,1) = {" +X +b +N +t +N +T +C +"} +(6,1,1) = {" +Z +i +G +m +d +R +E +"} +(7,1,1) = {" +e +J +n +w +A +q +E +"} +(8,1,1) = {" +f +l +W +m +h +U +E +"} +(9,1,1) = {" +S +I +O +p +y +g +E +"} diff --git a/maps/map_files/golden_arrow/golden_arrow.dmm b/maps/map_files/golden_arrow/golden_arrow.dmm index 3558338e21..c00c87e116 100644 --- a/maps/map_files/golden_arrow/golden_arrow.dmm +++ b/maps/map_files/golden_arrow/golden_arrow.dmm @@ -173,17 +173,17 @@ "aT" = ( /obj/structure/machinery/computer/cameras/almayer/vehicle{ dir = 4; - pixel_x = -17; - network = list("Golden Arrow","Vehicle","Midway") + network = list("Golden Arrow","Vehicle","Midway"); + pixel_x = -17 }, /obj/structure/machinery/prop/almayer/CICmap{ + density = 0; dir = 4; icon_state = "shuttle"; layer = 2.97; name = "Tactical Map Display"; pixel_x = -17; - pixel_y = 14; - density = 0 + pixel_y = 14 }, /turf/open/floor/almayer, /area/golden_arrow/platoon_commander_rooms) @@ -237,6 +237,9 @@ /obj/effect/landmark/late_join/alpha, /turf/open/floor/plating/plating_catwalk, /area/golden_arrow/cryo_cells) +"bl" = ( +/turf/closed/wall/almayer/outer, +/area/golden_arrow/firingrange) "bo" = ( /obj/structure/window/framed/almayer, /turf/open/floor/almayer{ @@ -354,6 +357,19 @@ "ca" = ( /turf/closed/wall/almayer/outer, /area/golden_arrow/hangar) +"ce" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "plating" + }, +/area/golden_arrow/firingrange) "cj" = ( /obj/effect/decal/warning_stripes{ icon_state = "S" @@ -466,11 +482,13 @@ /area/golden_arrow/hangar) "cD" = ( /obj/structure/surface/table/almayer, -/obj/item/reagent_container/food/drinks/coffeecup/wy{ - desc = "A matte gray coffee mug bearing the Weyland-Yutani logo on its front. Looks like someone spat in it."; - name = "dip cup"; - pixel_x = -4; - pixel_y = 8 +/obj/item/spacecash/c10{ + pixel_x = 5; + pixel_y = 7 + }, +/obj/item/storage/box/co2_knife{ + pixel_x = 3; + pixel_y = 13 }, /turf/open/floor/almayer, /area/golden_arrow/squad_one) @@ -511,6 +529,13 @@ /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 }, +/obj/structure/surface/table/almayer, +/obj/item/reagent_container/food/drinks/coffeecup/wy{ + desc = "A matte gray coffee mug bearing the Weyland-Yutani logo on its front. Looks like someone spat in it."; + name = "dip cup"; + pixel_x = -4; + pixel_y = 8 + }, /turf/open/floor/plating/plating_catwalk, /area/golden_arrow/squad_one) "cS" = ( @@ -722,6 +747,29 @@ icon_state = "sterile_green" }, /area/golden_arrow/medical) +"eh" = ( +/obj/structure/surface/rack, +/obj/item/ammo_magazine/rifle/m41aMK1{ + current_rounds = 0; + pixel_x = -5 + }, +/obj/item/ammo_magazine/rifle/m41aMK1{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/m41aMK1{ + current_rounds = 0; + pixel_x = 5 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/golden_arrow/firingrange) +"ek" = ( +/obj/structure/machinery/light, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/golden_arrow/firingrange) "eo" = ( /turf/open/floor/almayer{ icon_state = "cargo_arrow" @@ -744,8 +792,8 @@ /obj/structure/machinery/door/airlock/almayer/maint/reinforced{ access_modified = 1; dir = 8; - req_one_access = list(36); - name = "\improper Synthetic Preperations" + name = "\improper Synthetic Preperations"; + req_one_access = list(36) }, /obj/structure/machinery/door/poddoor/almayer/closed{ dir = 4; @@ -1261,6 +1309,16 @@ }, /turf/open/floor/plating/plating_catwalk, /area/golden_arrow/squad_two) +"hD" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "plating" + }, +/area/golden_arrow/firingrange) "hF" = ( /obj/effect/decal/cleanable/blood/oil, /turf/open/floor/almayer, @@ -1293,6 +1351,9 @@ icon_state = "plate" }, /area/golden_arrow/engineering) +"hM" = ( +/turf/open/floor/plating/plating_catwalk, +/area/golden_arrow/firingrange) "hN" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/computer/secure_data{ @@ -1302,6 +1363,17 @@ icon_state = "plate" }, /area/golden_arrow/platoon_sergeant) +"hQ" = ( +/obj/structure/machinery/power/apc/almayer{ + dir = 1 + }, +/obj/structure/pipes/standard/manifold/hidden/supply{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/golden_arrow/firingrange) "hR" = ( /obj/structure/machinery/firealarm{ pixel_y = 28 @@ -1438,16 +1510,7 @@ }, /area/golden_arrow/prep_hallway) "iE" = ( -/obj/structure/surface/table/almayer, /obj/structure/pipes/standard/simple/hidden/supply, -/obj/item/spacecash/c10{ - pixel_x = 5; - pixel_y = 7 - }, -/obj/item/storage/box/co2_knife{ - pixel_x = 3; - pixel_y = 13 - }, /turf/open/floor/plating/plating_catwalk, /area/golden_arrow/squad_one) "iF" = ( @@ -1477,9 +1540,7 @@ dir = 4 }, /obj/structure/pipes/vents/scrubber, -/turf/open/floor/almayer{ - icon_state = "plate" - }, +/turf/open/floor/almayer, /area/golden_arrow/prep_hallway) "iN" = ( /turf/open/floor/almayer{ @@ -1597,6 +1658,16 @@ icon_state = "plate" }, /area/golden_arrow/squad_two) +"jt" = ( +/obj/structure/target, +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/golden_arrow/firingrange) "jy" = ( /obj/effect/decal/cleanable/blood/oil, /obj/structure/machinery/computer/station_alert{ @@ -2237,6 +2308,15 @@ /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer, /area/golden_arrow/squad_one) +"nH" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/turf/open/floor/almayer{ + dir = 4; + icon_state = "cargo_arrow" + }, +/area/golden_arrow/prep_hallway) "nK" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/machinery/power/apc/almayer{ @@ -2246,6 +2326,12 @@ icon_state = "plate" }, /area/golden_arrow/canteen) +"nL" = ( +/obj/structure/surface/table/almayer, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/golden_arrow/firingrange) "nM" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/surface/table/reinforced/almayer_B, @@ -2702,6 +2788,16 @@ icon_state = "plate" }, /area/golden_arrow/squad_two) +"qE" = ( +/obj/structure/barricade/metal{ + dir = 8 + }, +/obj/structure/machinery/light, +/obj/structure/sign/safety/two{ + pixel_y = -22 + }, +/turf/open/floor/almayer, +/area/golden_arrow/firingrange) "qI" = ( /obj/structure/machinery/landinglight/ds1/delayone{ dir = 8 @@ -2950,11 +3046,12 @@ }, /area/golden_arrow/briefing) "so" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 5 +/obj/structure/pipes/standard/manifold/hidden/supply{ + dir = 8 + }, +/turf/open/floor/almayer{ + icon_state = "cargo_arrow" }, -/turf/open/floor/almayer, /area/golden_arrow/prep_hallway) "sv" = ( /obj/effect/decal/warning_stripes{ @@ -3066,6 +3163,25 @@ icon_state = "plate" }, /area/golden_arrow/platoon_commander_rooms) +"tb" = ( +/obj/structure/sign/safety/firingrange{ + pixel_x = -24; + pixel_y = 7 + }, +/obj/structure/sign/safety/hazard{ + pixel_y = -7; + pixel_x = -24 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/golden_arrow/prep_hallway) +"tf" = ( +/obj/structure/pipes/vents/pump{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, +/area/golden_arrow/firingrange) "ti" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes{ @@ -3239,6 +3355,18 @@ icon_state = "plate" }, /area/golden_arrow/briefing) +"uE" = ( +/obj/structure/machinery/firealarm{ + pixel_y = 28 + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/golden_arrow/firingrange) "uF" = ( /obj/structure/surface/table/reinforced/prison, /obj/structure/machinery/computer/crew/alt, @@ -3575,8 +3703,8 @@ dir = 8 }, /obj/item/device/walkman{ - pixel_y = -6; - pixel_x = 4 + pixel_x = 4; + pixel_y = -6 }, /turf/open/floor/almayer{ dir = 5; @@ -3647,6 +3775,12 @@ icon_state = "test_floor4" }, /area/golden_arrow/platoon_sergeant) +"wX" = ( +/obj/structure/pipes/standard/simple/hidden/supply, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/golden_arrow/firingrange) "xf" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer, @@ -3664,6 +3798,15 @@ icon_state = "plate" }, /area/golden_arrow/prep_hallway) +"xo" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 8 + }, +/turf/open/floor/almayer{ + dir = 8; + icon_state = "cargo_arrow" + }, +/area/golden_arrow/prep_hallway) "xx" = ( /obj/structure/machinery/light, /obj/structure/pipes/vents/scrubber, @@ -3979,6 +4122,11 @@ icon_state = "dark_sterile" }, /area/golden_arrow/cryo_cells) +"zv" = ( +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/golden_arrow/firingrange) "zy" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer, @@ -4057,6 +4205,16 @@ icon_state = "cargo_arrow" }, /area/golden_arrow/prep_hallway) +"zP" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "plating" + }, +/area/golden_arrow/firingrange) "zV" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/machinery/disposal, @@ -4079,12 +4237,7 @@ }, /area/golden_arrow/squad_one) "Ad" = ( -/obj/structure/machinery/door/poddoor/almayer/locked{ - name = "\improper Hangar Lockdown Blast Door" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, +/turf/open/floor/almayer, /area/golden_arrow/prep_hallway) "Ap" = ( /obj/structure/surface/table/almayer, @@ -4118,6 +4271,15 @@ }, /turf/open/floor/plating/plating_catwalk, /area/golden_arrow/cryo_cells) +"Ay" = ( +/obj/structure/machinery/door/poddoor/almayer/locked{ + dir = 2; + name = "\improper Hangar Lockdown Blast Door" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/golden_arrow/prep_hallway) "AA" = ( /obj/structure/machinery/cm_vending/sorted/medical/wall_med{ pixel_y = 25 @@ -4323,6 +4485,19 @@ icon_state = "plate" }, /area/golden_arrow/squad_two) +"BC" = ( +/obj/structure/target, +/obj/structure/machinery/light, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/golden_arrow/firingrange) +"BD" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/golden_arrow/firingrange) "BM" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/machinery/light{ @@ -4448,6 +4623,15 @@ }, /turf/open/floor/almayer, /area/golden_arrow/supply) +"Co" = ( +/obj/structure/barricade/plasteel{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/golden_arrow/firingrange) "Cr" = ( /turf/open/space/basic, /area/space) @@ -4502,6 +4686,10 @@ icon_state = "plate" }, /area/golden_arrow/supply) +"CA" = ( +/obj/structure/largecrate/random/barrel/green, +/turf/open/floor/plating/plating_catwalk, +/area/golden_arrow/prep_hallway) "CC" = ( /obj/structure/surface/rack, /obj/item/ammo_magazine/flamer_tank, @@ -4590,7 +4778,7 @@ /area/golden_arrow/platoon_commander_rooms) "Db" = ( /obj/effect/decal/cleanable/dirt, -/turf/closed/wall/almayer/outer, +/turf/closed/wall/almayer, /area/golden_arrow/squad_two) "Dc" = ( /obj/structure/pipes/standard/simple/hidden/supply{ @@ -4851,6 +5039,13 @@ icon_state = "cargo_arrow" }, /area/golden_arrow/cryo_cells) +"EN" = ( +/obj/structure/barricade/metal{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer, +/area/golden_arrow/firingrange) "EO" = ( /obj/structure/machinery/disposal{ density = 0; @@ -5014,6 +5209,20 @@ }, /turf/open/floor/almayer, /area/golden_arrow/dorms) +"FK" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "plating" + }, +/area/golden_arrow/firingrange) "FN" = ( /obj/structure/machinery/medical_pod/sleeper{ dir = 8; @@ -5151,6 +5360,9 @@ icon_state = "dark_sterile" }, /area/golden_arrow/canteen) +"Gl" = ( +/turf/closed/wall/almayer/outer, +/area/golden_arrow/prep_hallway) "Gq" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 5 @@ -5347,6 +5559,16 @@ }, /turf/open/floor/almayer, /area/golden_arrow/platoon_sergeant) +"Hu" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/obj/structure/target, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/golden_arrow/firingrange) "Hv" = ( /obj/item/frame/camera{ desc = "The Staff Officer insisted he needed to monitor everyone at all times."; @@ -5465,17 +5687,38 @@ icon_state = "dark_sterile" }, /area/golden_arrow/cryo_cells) +"Ib" = ( +/obj/structure/barricade/metal{ + dir = 8 + }, +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/structure/sign/safety/one{ + pixel_y = 22 + }, +/turf/open/floor/almayer, +/area/golden_arrow/firingrange) "Ii" = ( /obj/structure/machinery/cryopod, /turf/open/floor/almayer{ icon_state = "cargo" }, /area/golden_arrow/cryo_cells) +"Is" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/golden_arrow/firingrange) "It" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/engidoor/autoname{ + autoname = 0; dir = 1; - req_one_access = list(); - autoname = 0 + req_one_access = list() }, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 8 @@ -5521,6 +5764,12 @@ }, /turf/open/floor/plating/plating_catwalk, /area/golden_arrow/squad_two) +"IH" = ( +/obj/structure/barricade/metal{ + dir = 8 + }, +/turf/open/floor/almayer, +/area/golden_arrow/firingrange) "IP" = ( /turf/open/floor/plating/plating_catwalk, /area/golden_arrow/engineering) @@ -5613,6 +5862,14 @@ icon_state = "plate" }, /area/golden_arrow/platoon_commander_rooms) +"Jj" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/golden_arrow/firingrange) "Jk" = ( /obj/effect/decal/warning_stripes{ icon_state = "N"; @@ -5720,6 +5977,14 @@ icon_state = "plate" }, /area/golden_arrow/hangar) +"Kb" = ( +/obj/structure/surface/rack, +/obj/item/tool/screwdriver, +/obj/item/prop/helmetgarb/gunoil, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/golden_arrow/firingrange) "Kd" = ( /obj/structure/surface/table/almayer, /obj/effect/decal/cleanable/dirt, @@ -5821,6 +6086,15 @@ icon_state = "plate" }, /area/golden_arrow/dorms) +"KL" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/golden_arrow/firingrange) "KM" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/machinery/light, @@ -6157,13 +6431,22 @@ /area/golden_arrow/cryo_cells) "Mu" = ( /obj/structure/machinery/door/airlock/almayer/engineering/reinforced{ - req_one_access = list(); - name = "\improper Engineering Airlock" + name = "\improper Engineering Airlock"; + req_one_access = list() }, /turf/open/floor/almayer{ icon_state = "test_floor4" }, /area/golden_arrow/engineering) +"Mz" = ( +/obj/structure/machinery/light{ + dir = 4 + }, +/obj/structure/surface/table/almayer, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/golden_arrow/firingrange) "MB" = ( /obj/effect/decal/warning_stripes{ icon_state = "SE-out" @@ -6284,6 +6567,7 @@ /area/golden_arrow/briefing) "Nr" = ( /obj/structure/surface/table/almayer, +/obj/effect/spawner/prop_gun/anti_tank, /turf/open/floor/almayer, /area/golden_arrow/squad_two) "Nx" = ( @@ -6360,8 +6644,8 @@ /area/golden_arrow/platoon_commander_rooms) "NI" = ( /obj/structure/machinery/cm_vending/clothing/synth/snowflake{ - pixel_x = -30; - density = 0 + density = 0; + pixel_x = -30 }, /turf/open/floor/almayer{ icon_state = "test_floor5" @@ -6387,9 +6671,9 @@ /area/golden_arrow/canteen) "NU" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/engidoor/autoname{ + autoname = 0; dir = 1; - req_one_access = list(); - autoname = 0 + req_one_access = list() }, /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -6439,6 +6723,9 @@ icon_state = "cargo_arrow" }, /area/golden_arrow/briefing) +"Of" = ( +/turf/closed/wall/almayer, +/area/golden_arrow/firingrange) "Oj" = ( /obj/structure/machinery/camera/autoname/golden_arrow, /turf/open/floor/almayer{ @@ -6453,12 +6740,23 @@ /obj/structure/janitorialcart, /turf/open/floor/plating/plating_catwalk, /area/golden_arrow/engineering) +"Op" = ( +/turf/open/floor/plating/plating_catwalk, +/area/golden_arrow/prep_hallway) "Os" = ( /obj/structure/bed/chair/comfy, /turf/open/floor/almayer{ icon_state = "dark_sterile" }, /area/golden_arrow/canteen) +"Oy" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/golden_arrow/firingrange) "Oz" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 5 @@ -6720,6 +7018,14 @@ icon_state = "plate" }, /area/golden_arrow/squad_two) +"PI" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 8 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/golden_arrow/firingrange) "PL" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 10 @@ -6736,6 +7042,16 @@ icon_state = "cargo_arrow" }, /area/golden_arrow/platoon_sergeant) +"PS" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "plating" + }, +/area/golden_arrow/firingrange) "PW" = ( /obj/structure/machinery/door/airlock/almayer/command/reinforced{ name = "\improper Private Briefing Room"; @@ -6767,6 +7083,12 @@ /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 8 }, +/obj/structure/surface/table/almayer, +/obj/item/device/cassette_tape/nam{ + layer = 2.9; + pixel_x = -6; + pixel_y = 7 + }, /turf/open/floor/plating/plating_catwalk, /area/golden_arrow/squad_one) "Qc" = ( @@ -6829,8 +7151,8 @@ /area/golden_arrow/prep_hallway) "Qq" = ( /obj/structure/machinery/door/airlock/almayer/engineering/reinforced{ - req_one_access = list(); - name = "\improper Engineering Airlock" + name = "\improper Engineering Airlock"; + req_one_access = list() }, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 8 @@ -7060,7 +7382,16 @@ /turf/open/floor/almayer{ icon_state = "plate" }, -/area/golden_arrow/platoon_sergeant) +/area/golden_arrow/platoon_sergeant) +"Ri" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "plating" + }, +/area/golden_arrow/firingrange) "Rl" = ( /obj/structure/surface/table/almayer, /obj/item/tool/kitchen/tray{ @@ -7206,6 +7537,12 @@ }, /turf/open/floor/almayer, /area/golden_arrow/supply) +"RY" = ( +/turf/open/floor/almayer{ + dir = 8; + icon_state = "cargo_arrow" + }, +/area/golden_arrow/prep_hallway) "Sc" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ @@ -7363,6 +7700,16 @@ "SC" = ( /turf/closed/wall/almayer/outer, /area/space) +"SE" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/structure/target, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/golden_arrow/firingrange) "SL" = ( /obj/structure/machinery/light{ dir = 8 @@ -7706,8 +8053,8 @@ "Um" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/machinery/cm_vending/clothing/synth{ - pixel_x = -30; - density = 0 + density = 0; + pixel_x = -30 }, /turf/open/floor/almayer{ icon_state = "test_floor5" @@ -7721,12 +8068,6 @@ }, /area/golden_arrow/canteen) "UI" = ( -/obj/structure/surface/table/almayer, -/obj/item/device/cassette_tape/nam{ - layer = 2.9; - pixel_x = -6; - pixel_y = 7 - }, /turf/open/floor/plating/plating_catwalk, /area/golden_arrow/squad_one) "UK" = ( @@ -7858,6 +8199,12 @@ icon_state = "plate" }, /area/golden_arrow/hangar) +"VG" = ( +/turf/open/floor/almayer{ + dir = 5; + icon_state = "plating" + }, +/area/golden_arrow/firingrange) "VJ" = ( /obj/structure/ladder{ height = 1; @@ -8036,6 +8383,12 @@ icon_state = "plate" }, /area/golden_arrow/hangar) +"Wy" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 9 + }, +/turf/open/floor/almayer, +/area/golden_arrow/prep_hallway) "WA" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/machinery/power/apc/almayer{ @@ -8084,16 +8437,13 @@ pixel_x = -1; pixel_y = 1 }, -/obj/effect/decal/cleanable/dirt, /obj/structure/machinery/light{ dir = 8 }, /obj/structure/sign/safety/bulkhead_door{ pixel_x = -19 }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, +/turf/open/floor/almayer, /area/golden_arrow/prep_hallway) "Xa" = ( /obj/effect/decal/warning_stripes{ @@ -8147,6 +8497,16 @@ }, /turf/open/floor/plating/plating_catwalk, /area/golden_arrow/hangar) +"Xu" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/generic{ + name = "\improper Firing Range"; + req_one_access_txt = "8;12;40"; + dir = 2 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/golden_arrow/firingrange) "Xv" = ( /obj/structure/sign/safety/rewire{ pixel_x = 14; @@ -8265,6 +8625,11 @@ icon_state = "plate" }, /area/golden_arrow/canteen) +"XV" = ( +/obj/structure/pipes/standard/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer, +/area/golden_arrow/prep_hallway) "Ya" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer{ @@ -8315,10 +8680,21 @@ "Yj" = ( /turf/closed/wall/almayer, /area/golden_arrow/hangar) +"Yk" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "plating" + }, +/area/golden_arrow/firingrange) "Yl" = ( /obj/structure/machinery/cm_vending/gear/synth{ - pixel_x = -30; - density = 0 + density = 0; + pixel_x = -30 }, /turf/open/floor/almayer{ icon_state = "test_floor5" @@ -8545,6 +8921,11 @@ icon_state = "test_floor4" }, /area/golden_arrow/canteen) +"ZQ" = ( +/obj/structure/pipes/standard/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/plating_catwalk, +/area/golden_arrow/firingrange) "ZR" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/machinery/chem_master, @@ -15369,13 +15750,13 @@ ot Qw Cr Cr -Cr -Cr -Cr -Cr -Cr -Cr -Cr +bl +bl +bl +bl +bl +bl +bl Cr Cr Cr @@ -15521,13 +15902,13 @@ gd Qw Cr Cr -Cr -Cr -Cr -Cr -Cr -Cr -Cr +bl +Oy +SE +zv +Hu +ek +bl Cr Cr Cr @@ -15673,13 +16054,13 @@ gd Qw Cr Cr -Cr -Cr -Cr -Cr -Cr -Cr -Cr +bl +VG +hD +zv +zP +VG +bl Cr Cr Cr @@ -15825,13 +16206,13 @@ Me Qw Qw Qw -Cr -Cr -Cr -Cr -Cr -Cr -Cr +bl +VG +Ri +zv +Yk +VG +bl Cr Cr Cr @@ -15976,14 +16357,14 @@ Yp gd ST Df -Qw -Qw -Cr -Cr -Cr -Cr -Cr -Cr +Me +Me +jt +Jj +BD +Is +BC +bl Cr Cr Cr @@ -16129,13 +16510,13 @@ Fg Fg gd tS -Qw -Cr -Cr -Cr -Cr -Cr -Cr +Me +VG +hD +zv +zP +VG +bl Cr Cr Cr @@ -16281,13 +16662,13 @@ ty Fg Fg Ku -Qw -Cr -Cr -Cr -Cr -Cr -Cr +Me +PS +ce +zv +FK +PS +bl Cr Cr Cr @@ -16433,13 +16814,13 @@ mf Fy DR tS -Qw -Cr -Cr -Cr -Cr -Cr -Cr +Me +Ib +EN +Co +IH +qE +bl Cr Cr Cr @@ -16585,14 +16966,14 @@ pf sV Yp Db -Qw -Cr -Cr -Cr -Cr -Cr -Cr -Cr +Me +tf +hM +zv +hM +tf +bl +bl Cr Cr Cr @@ -16736,15 +17117,15 @@ dX pB Fg TT -Qw -Cr -Cr -Cr -Cr -Cr -Cr -Cr -Cr +Me +Of +hQ +wX +ZQ +wX +KL +Kb +bl Cr Cr Cr @@ -16888,15 +17269,15 @@ Qw qD cA RO -Qw -Cr -Cr -Cr -Cr -Cr -Cr -Cr -Cr +Me +Of +uE +BD +Mz +nL +BD +eh +bl Cr Cr Cr @@ -17031,24 +17412,24 @@ qA qA jc Jc -XQ +nH GG Zk Me -Qw -Qw -Qw -Qw -Qw -Qw -Cr -Cr -Cr -Cr -Cr -Cr -Cr -Cr +Me +Me +Me +Me +Me +Me +Of +PI +Xu +Of +Of +bl +bl +bl Cr Cr Cr @@ -17187,18 +17568,18 @@ XI Wl uu WY -Ad -Cr -Cr -Cr -Cr -Cr -Cr -Cr -Cr -Cr -Cr -Cr +iN +wp +iN +wp +iN +wp +tb +xo +RY +iN +oh +Ay Cr Cr Cr @@ -17339,18 +17720,18 @@ wn iK SO so +SO +iK +iK +XV +XV +iK +iK +Wy Ad -Cr -Cr -Cr -Cr -Cr -Cr -Cr -Cr -Cr -Cr -Cr +Op +CA +Ay Cr Cr Cr @@ -17491,18 +17872,18 @@ XI gq Va iL -Ad -Cr -Cr -Cr -Cr -Cr -Cr -Cr -Cr -Cr -Cr -Cr +iN +wp +iN +iN +iN +wp +wp +pZ +ms +wp +iN +Ay Cr Cr Cr @@ -17643,18 +18024,18 @@ TC GG jc ZC +ZC +ZC +ZC +ZC +ZC Ty -Ty -Ty -Ty -Ty -Ty -Cr -Cr -Cr -Cr -Cr -Cr +Gl +pt +pt +Gl +Gl +Gl Cr Cr Cr @@ -18100,7 +18481,7 @@ wp ZC Fe cT -cT +cD aJ iE xx @@ -18406,7 +18787,7 @@ qa cT cR Uk -cD +cT cT zk Ty diff --git a/tgui/packages/tgui/interfaces/GameMasterRappelMenu.js b/tgui/packages/tgui/interfaces/GameMasterRappelMenu.js new file mode 100644 index 0000000000..f1e3286db4 --- /dev/null +++ b/tgui/packages/tgui/interfaces/GameMasterRappelMenu.js @@ -0,0 +1,75 @@ +import { useBackend } from '../backend'; +import { Button, Section, Collapsible, Stack, Divider } from '../components'; +import { Window } from '../layouts'; + +export const GameMasterRappelMenu = (props, context) => { + const { data, act } = useBackend(context); + + return ( + + + + + + + + ); +}; + +export const GameMasterRappelPanel = (props, context) => { + const { data, act } = useBackend(context); + + return ( +
+ + +
+ ); +};