From d0da77f496e93d07b24c1b9c4507e773082077a5 Mon Sep 17 00:00:00 2001 From: Geeves Date: Sun, 24 Apr 2022 14:50:31 +0200 Subject: [PATCH 001/188] Synth SIMI Tool --- ColonialMarinesALPHA.dme | 1 + code/__DEFINES/dcs/signals.dm | 2 + code/game/objects/items/storage/smartpack.dm | 51 ++++++++++- code/game/objects/items/tools/synth_bracer.dm | 86 +++++++++++++++++++ code/modules/power/apc.dm | 39 +-------- 5 files changed, 143 insertions(+), 36 deletions(-) create mode 100644 code/game/objects/items/tools/synth_bracer.dm diff --git a/ColonialMarinesALPHA.dme b/ColonialMarinesALPHA.dme index 572e8de54eb7..5d6b9a8826b9 100644 --- a/ColonialMarinesALPHA.dme +++ b/ColonialMarinesALPHA.dme @@ -1009,6 +1009,7 @@ #include "code\game\objects\items\tools\misc_tools.dm" #include "code\game\objects\items\tools\shovel_tools.dm" #include "code\game\objects\items\tools\surgery_tools.dm" +#include "code\game\objects\items\tools\synth_bracer.dm" #include "code\game\objects\items\toys\cards.dm" #include "code\game\objects\items\toys\crayons.dm" #include "code\game\objects\items\toys\toy_weapons.dm" diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 91b825be17a6..fcae102dfe7b 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -106,6 +106,8 @@ #define COMSIG_MOB_APC_REMOVE_BOARD "mob_apc_remove_board" /// From /obj/structure/machinery/power/apc/attack_hand #define COMSIG_MOB_APC_REMOVE_CELL "mob_apc_remove_cell" +#define COMSIG_MOB_APC_ATTACK_HAND "mob_apc_attack_hand" + #define COMPONENT_APC_HANDLED_HAND (1<<0) /// From /obj/structure/machinery/power/apc/proc/cut #define COMSIG_MOB_APC_CUT_WIRE "mob_apc_cut_wire" /// From /obj/structure/machinery/power/apc/proc/pulse diff --git a/code/game/objects/items/storage/smartpack.dm b/code/game/objects/items/storage/smartpack.dm index 3588d422b232..4d505bed7d8d 100644 --- a/code/game/objects/items/storage/smartpack.dm +++ b/code/game/objects/items/storage/smartpack.dm @@ -122,7 +122,14 @@ SetLuminosity(0) ..() +/obj/item/storage/backpack/marine/smartpack/equipped(mob/user, slot) + . = ..() + if(slot == WEAR_BACK) + RegisterSignal(user, COMSIG_MOB_APC_ATTACK_HAND, .proc/handle_apc_charge) + /obj/item/storage/backpack/marine/smartpack/dropped(var/mob/living/M) + UnregisterSignal(M, COMSIG_MOB_APC_ATTACK_HAND) + for(var/datum/action/human_action/smartpack/S in M.actions) S.remove_from(M) @@ -134,7 +141,49 @@ M.status_flags |= CANPUSH M.anchored = FALSE M.unfreeze() - ..() + + return ..() + +/obj/item/storage/backpack/marine/smartpack/proc/handle_apc_charge(var/mob/living/carbon/human/user, var/obj/structure/machinery/power/apc/apc) + SIGNAL_HANDLER + + if(!istype(user)) + return FALSE + + if(!(user.species.flags & IS_SYNTHETIC) || user.a_intent != INTENT_GRAB) + return FALSE + + if(user.action_busy) + return FALSE + + INVOKE_ASYNC(src, .proc/complete_apc_charge, user, apc) + + return COMPONENT_APC_HANDLED_HAND + +/obj/item/storage/backpack/marine/smartpack/proc/complete_apc_charge(var/mob/living/carbon/human/user, var/obj/structure/machinery/power/apc/apc) + if(!do_after(user, 2 SECONDS, INTERRUPT_ALL, BUSY_ICON_GENERIC)) + return + + playsound(apc.loc, 'sound/effects/sparks2.ogg', 25, 1) + + if(apc.stat & BROKEN) + var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread + s.set_up(3, 1, apc) + s.start() + to_chat(user, SPAN_DANGER("The APC's power currents surge eratically, damaging your chassis!")) + user.apply_damage(10, 0, BURN) + else if(apc.cell?.charge > 0) + if(battery_charge < initial(battery_charge)) + var/charge_to_use = min(apc.cell.charge, initial(battery_charge) - battery_charge) + if(!(apc.cell.use(charge_to_use))) + return + battery_charge += charge_to_use + to_chat(user, SPAN_NOTICE("You slot your fingers into the APC interface and siphon off some of the stored charge. \The [src] now has [battery_charge]/[initial(battery_charge)].")) + apc.charging = 1 + else + to_chat(user, SPAN_WARNING("\The [src] is already fully charged.")) + else + to_chat(user, SPAN_WARNING("There is no charge to draw from that APC.")) /obj/item/storage/backpack/marine/smartpack/Destroy() if(ismob(loc)) diff --git a/code/game/objects/items/tools/synth_bracer.dm b/code/game/objects/items/tools/synth_bracer.dm new file mode 100644 index 000000000000..e67afbe0fea3 --- /dev/null +++ b/code/game/objects/items/tools/synth_bracer.dm @@ -0,0 +1,86 @@ +/obj/item/clothing/gloves/synth + name = "\improper PK-130 SIMI wrist-mounted computer" + desc = "Developed by a joint effort between Weyland-Yutani and the USCM, the SIMI portable computer is the ultimate solution for situational awareness, personnel monitoring and communication." + + icon = 'icons/obj/items/hunter/pred_gear.dmi' + icon_state = "bracer" + item_icons = list( + WEAR_HANDS = 'icons/mob/humans/onmob/hunter/pred_gear.dmi' + ) + + siemens_coefficient = 0 + permeability_coefficient = 0.05 + flags_cold_protection = BODY_FLAG_HANDS + flags_heat_protection = BODY_FLAG_HANDS + flags_armor_protection = BODY_FLAG_HANDS + min_cold_protection_temperature = GLOVES_min_cold_protection_temperature + max_heat_protection_temperature = GLOVES_max_heat_protection_temperature + + armor_melee = CLOTHING_ARMOR_MEDIUM + armor_bullet = CLOTHING_ARMOR_MEDIUM + armor_laser = CLOTHING_ARMOR_MEDIUM + armor_energy = CLOTHING_ARMOR_MEDIUM + armor_bomb = CLOTHING_ARMOR_MEDIUMHIGH + armor_bio = CLOTHING_ARMOR_MEDIUM + armor_rad = CLOTHING_ARMOR_MEDIUM + armor_internaldamage = CLOTHING_ARMOR_MEDIUM + + var/battery_charge = SMARTPACK_MAX_POWER_STORED + +/obj/item/clothing/gloves/synth/examine(mob/user) + ..() + to_chat(user, SPAN_INFO("The current charge reads [battery_charge]/[initial(battery_charge)].")) + +/* -- HANDLING APC CHARGING -- */ + +/obj/item/clothing/gloves/synth/equipped(mob/user, slot) + . = ..() + if(slot == WEAR_HANDS) + RegisterSignal(user, COMSIG_MOB_APC_ATTACK_HAND, .proc/handle_apc_charge) + +/obj/item/clothing/gloves/synth/dropped(mob/user) + UnregisterSignal(user, COMSIG_MOB_APC_ATTACK_HAND) + return ..() + +/obj/item/clothing/gloves/synth/proc/handle_apc_charge(var/mob/living/carbon/human/user, var/obj/structure/machinery/power/apc/apc) + SIGNAL_HANDLER + + if(!istype(user)) + return FALSE + + if(!(user.species.flags & IS_SYNTHETIC) || user.a_intent != INTENT_GRAB) + return FALSE + + if(user.action_busy) + return FALSE + + INVOKE_ASYNC(src, .proc/complete_apc_charge, user, apc) + + return COMPONENT_APC_HANDLED_HAND + +/obj/item/clothing/gloves/synth/proc/complete_apc_charge(var/mob/living/carbon/human/user, var/obj/structure/machinery/power/apc/apc) + if(!do_after(user, 2 SECONDS, INTERRUPT_ALL, BUSY_ICON_GENERIC)) + return + + playsound(apc.loc, 'sound/effects/sparks2.ogg', 25, 1) + + if(apc.stat & BROKEN) + var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread + s.set_up(3, 1, apc) + s.start() + to_chat(user, SPAN_DANGER("The APC's power currents surge eratically, damaging your chassis!")) + user.apply_damage(10, 0, BURN) + else if(apc.cell?.charge > 0) + if(battery_charge < initial(battery_charge)) + var/charge_to_use = min(apc.cell.charge, initial(battery_charge) - battery_charge) + if(!(apc.cell.use(charge_to_use))) + return + battery_charge += charge_to_use + to_chat(user, SPAN_NOTICE("You slot your fingers into the APC interface and siphon off some of the stored charge. \The [src] now has [battery_charge]/[initial(battery_charge)].")) + apc.charging = 1 + else + to_chat(user, SPAN_WARNING("\The [src] is already fully charged.")) + else + to_chat(user, SPAN_WARNING("There is no charge to draw from that APC.")) + +/* -- +++++ +++++ -- */ diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index e5f2324676c1..9ac337e6e44a 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -614,43 +614,13 @@ add_fingerprint(user) + if(SEND_SIGNAL(user, COMSIG_MOB_APC_ATTACK_HAND, src) & COMPONENT_APC_HANDLED_HAND) + return FALSE + //Human mob special interaction goes here. if(ishuman(user)) var/mob/living/carbon/human/H = user - - if(H.species.flags & IS_SYNTHETIC && H.a_intent == INTENT_GRAB) - if(H.action_busy) - return - - if(!do_after(H, 20, INTERRUPT_ALL, BUSY_ICON_GENERIC)) - return - - playsound(src.loc, 'sound/effects/sparks2.ogg', 25, 1) - - if(stat & BROKEN) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() - to_chat(H, SPAN_DANGER("The APC's power currents surge eratically, damaging your chassis!")) - H.apply_damage(10,0, BURN) - else if(cell && cell.charge > 0) - if(!istype(H.back, /obj/item/storage/backpack/marine/smartpack)) - return - - var/obj/item/storage/backpack/marine/smartpack/S = H.back - if(S.battery_charge < SMARTPACK_MAX_POWER_STORED) - var/charge_to_use = min(cell.charge, SMARTPACK_MAX_POWER_STORED - S.battery_charge) - if(!(cell.use(charge_to_use))) - return - S.battery_charge += charge_to_use - to_chat(user, SPAN_NOTICE("You slot your fingers into the APC interface and siphon off some of the stored charge. [S.name] now has [S.battery_charge]/[SMARTPACK_MAX_POWER_STORED]")) - charging = 1 - else - to_chat(user, SPAN_WARNING("[S.name] is already fully charged.")) - else - to_chat(user, SPAN_WARNING("There is no charge to draw from that APC.")) - return - else if(H.species.can_shred(H)) + if(H.species.can_shred(H)) var/allcut = TRUE for(var/wire = 1; wire < length(get_wire_descriptions()); wire++) if(!isWireCut(wire)) @@ -675,7 +645,6 @@ beenhit += 1 return - if(usr == user && opened && (!isRemoteControlling(user))) if(cell) if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) From b8a409acab52ce1e5eae00e74358f942bfdd9108 Mon Sep 17 00:00:00 2001 From: Geeves Date: Sun, 24 Apr 2022 16:37:38 +0200 Subject: [PATCH 002/188] ability framework, repairing, rescue hook --- ColonialMarinesALPHA.dme | 5 +- .../tools/synth_bracer/abilities/framework.dm | 55 +++++++++++ .../synth_bracer/abilities/repair_form.dm | 52 +++++++++++ .../synth_bracer/abilities/rescue_hook.dm | 92 +++++++++++++++++++ .../tools/{ => synth_bracer}/synth_bracer.dm | 10 ++ 5 files changed, 213 insertions(+), 1 deletion(-) create mode 100644 code/game/objects/items/tools/synth_bracer/abilities/framework.dm create mode 100644 code/game/objects/items/tools/synth_bracer/abilities/repair_form.dm create mode 100644 code/game/objects/items/tools/synth_bracer/abilities/rescue_hook.dm rename code/game/objects/items/tools/{ => synth_bracer}/synth_bracer.dm (88%) diff --git a/ColonialMarinesALPHA.dme b/ColonialMarinesALPHA.dme index 5d6b9a8826b9..44a5f93bbc21 100644 --- a/ColonialMarinesALPHA.dme +++ b/ColonialMarinesALPHA.dme @@ -1009,7 +1009,10 @@ #include "code\game\objects\items\tools\misc_tools.dm" #include "code\game\objects\items\tools\shovel_tools.dm" #include "code\game\objects\items\tools\surgery_tools.dm" -#include "code\game\objects\items\tools\synth_bracer.dm" +#include "code\game\objects\items\tools\synth_bracer\synth_bracer.dm" +#include "code\game\objects\items\tools\synth_bracer\abilities\framework.dm" +#include "code\game\objects\items\tools\synth_bracer\abilities\repair_form.dm" +#include "code\game\objects\items\tools\synth_bracer\abilities\rescue_hook.dm" #include "code\game\objects\items\toys\cards.dm" #include "code\game\objects\items\toys\crayons.dm" #include "code\game\objects\items\toys\toy_weapons.dm" diff --git a/code/game/objects/items/tools/synth_bracer/abilities/framework.dm b/code/game/objects/items/tools/synth_bracer/abilities/framework.dm new file mode 100644 index 000000000000..eba2386055fc --- /dev/null +++ b/code/game/objects/items/tools/synth_bracer/abilities/framework.dm @@ -0,0 +1,55 @@ +/* -- ACTIVATABLE ACTIONS -- */ + +/datum/action/human_action/activable/synth_bracer + var/mob/living/carbon/human/synth + var/obj/item/clothing/gloves/synth/synth_bracer + var/charge_cost = 0 + +/datum/action/human_action/activable/synth_bracer/give_to(user) + if(!isSynth(user)) + return FALSE + synth = user + synth_bracer = synth.gloves// never add a check to see if the synth has gloves on, because they shouldn't have these abilities while not wearing gloves. it should runtime to let us know + return ..() + +/datum/action/human_action/activable/synth_bracer/remove_from(mob/living/carbon/human/H) + synth = null + synth_bracer = null + return ..() + +/datum/action/human_action/activable/synth_bracer/can_use_action() + if(synth_bracer.battery_charge < charge_cost) + return FALSE + return ..() + +/datum/action/human_action/activable/synth_bracer/use_ability(var/mob/M) + if(charge_cost) + synth_bracer.drain_charge(owner, charge_cost) + +/* -- ON-CLICK ACTIONS -- */ + +/datum/action/human_action/synth_bracer + var/mob/living/carbon/human/synth + var/obj/item/clothing/gloves/synth/synth_bracer + var/charge_cost = 0 + +/datum/action/human_action/synth_bracer/give_to(user) + if(!isSynth(user)) + return FALSE + synth = user + synth_bracer = synth.gloves + return ..() + +/datum/action/human_action/synth_bracer/remove_from(mob/living/carbon/human/H) + synth = null + synth_bracer = null + return ..() + +/datum/action/human_action/synth_bracer/can_use_action() + if(synth_bracer.battery_charge < charge_cost) + return FALSE + return ..() + +/datum/action/human_action/synth_bracer/action_activate() + if(charge_cost) + synth_bracer.drain_charge(owner, charge_cost) diff --git a/code/game/objects/items/tools/synth_bracer/abilities/repair_form.dm b/code/game/objects/items/tools/synth_bracer/abilities/repair_form.dm new file mode 100644 index 000000000000..4629f47dd514 --- /dev/null +++ b/code/game/objects/items/tools/synth_bracer/abilities/repair_form.dm @@ -0,0 +1,52 @@ +#define REPAIR_COST 50 + +/obj/item/clothing/gloves/synth + var/repairing = FALSE + var/repair_form_cooldown = 15 SECONDS + +/obj/item/clothing/gloves/synth/verb/repair_form_verb() + set name = "Repair Form (50)" + set desc = "Repair yourself at the cost of 50u of charge." + set category = "Synthetic.SIMI" + set src in usr + + if(!isSynth(usr)) + return + + repair_form(usr) + +/obj/item/clothing/gloves/synth/proc/repair_form(mob/living/carbon/human/user) + if(!ishuman(user) || repairing) + return + + if(battery_charge < REPAIR_COST) + to_chat(user, SPAN_WARNING("There is a lack of charge for that action. Charge: [battery_charge]/[REPAIR_COST]")) + return + + if(user.getBruteLoss() <= 0 && user.getFireLoss() <= 0) + to_chat(user, SPAN_WARNING("[name] beeps, \"No noticeable damage. Procedure cancelled.\"")) + return + + repairing = TRUE + update_icon(user) + + user.visible_message(SPAN_WARNING("[name] beeps, \"Engaging the repairing process.\""), SPAN_WARNING("[name] beeps, \"Beginning to carefully examine your sustained damage.\"")) + playsound(loc, 'sound/mecha/mechmove04.ogg', 25, TRUE) + if(!do_after(user, 5 SECONDS, INTERRUPT_INCAPACITATED|INTERRUPT_CLICK, BUSY_ICON_FRIENDLY)) + repairing = FALSE + update_icon(user) + to_chat(user, SPAN_DANGER("[name] beeps, \"Repair process was cancelled.\"")) + return + + playsound(loc, 'sound/items/Welder2.ogg', 25, TRUE) + battery_charge -= REPAIR_COST + user.heal_overall_damage(25, 25, TRUE) + user.pain.recalculate_pain() + user.visible_message(SPAN_NOTICE("[name] beeps, \"Completed the repairing process. Charge now reads [battery_charge]/[initial(battery_charge)].\"")) + + addtimer(CALLBACK(src, .proc/repair_form_cooldown, user), repair_form_cooldown) + +/obj/item/clothing/gloves/synth/proc/repair_form_cooldown(mob/user) + repairing = FALSE + +#undef REPAIR_COST diff --git a/code/game/objects/items/tools/synth_bracer/abilities/rescue_hook.dm b/code/game/objects/items/tools/synth_bracer/abilities/rescue_hook.dm new file mode 100644 index 000000000000..382f52a6629f --- /dev/null +++ b/code/game/objects/items/tools/synth_bracer/abilities/rescue_hook.dm @@ -0,0 +1,92 @@ +/datum/action/human_action/activable/synth_bracer/rescue_hook + name = "Rescue Hook" + action_icon_state = "stomp" + cooldown = 5 SECONDS + + charge_cost = 10 + + // Config + var/max_distance = 7 + var/windup = 8 + +/datum/action/human_action/activable/synth_bracer/rescue_hook/use_ability(atom/A) + if(!A || A.layer >= FLY_LAYER || !isturf(synth.loc)) + return + + if(!action_cooldown_check() || synth.action_busy) + return + + // Build our turflist + var/list/turf/turflist = list() + var/list/telegraph_atom_list = list() + var/facing = get_dir(synth, A) + var/turf/T = synth.loc + var/turf/temp = synth.loc + for(var/x in 0 to max_distance) + temp = get_step(T, facing) + if(facing in diagonals) // check if it goes through corners + var/reverse_face = reverse_dir[facing] + var/turf/back_left = get_step(temp, turn(reverse_face, 45)) + var/turf/back_right = get_step(temp, turn(reverse_face, -45)) + if((!back_left || back_left.density) && (!back_right || back_right.density)) + break + if(!temp || temp.density || temp.opacity) + break + + var/blocked = FALSE + for(var/obj/structure/S in temp) + if(S.opacity || ((istype(S, /obj/structure/barricade) || istype(S, /obj/structure/machinery/door)) && S.density)) + blocked = TRUE + break + if(blocked) + break + + T = temp + + if (T in turflist) + break + + turflist += T + facing = get_dir(T, A) + telegraph_atom_list += new /obj/effect/xenomorph/xeno_telegraph/brown/abduct_hook(T, windup) + + if(!length(turflist)) + to_chat(synth, SPAN_WARNING("You don't have any room to launch your hook!")) + return + + synth.visible_message(SPAN_DANGER("[synth] prepares to launch a rescue hook [A]!"), SPAN_DANGER("You prepare to launch a rescue hook at [A]!")) + + var/throw_target_turf = get_step(synth.loc, facing) + + synth.frozen = TRUE + synth.update_canmove() + if(!do_after(synth, windup, INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE, null, null, FALSE, 1, FALSE, 1)) + to_chat(synth, SPAN_WARNING("You cancel your launch.")) + + for (var/obj/effect/xenomorph/xeno_telegraph/XT in telegraph_atom_list) + telegraph_atom_list -= XT + qdel(XT) + + synth.frozen = FALSE + synth.update_canmove() + + return + + synth_bracer.drain_charge(synth, charge_cost) + enter_cooldown() + + synth.frozen = FALSE + synth.update_canmove() + + playsound(get_turf(synth), 'sound/effects/bang.ogg', 25, 0) + + var/list/targets = list() + for (var/turf/target_turf in turflist) + for (var/mob/living/carbon/H in target_turf) + targets += H + + for (var/mob/living/carbon/H in targets) + to_chat(H, SPAN_DANGER("You are pulled towards [synth]!")) + H.KnockDown(0.2) + shake_camera(H, 10, 1) + H.throw_atom(throw_target_turf, get_dist(throw_target_turf, H)-1, SPEED_VERY_FAST) diff --git a/code/game/objects/items/tools/synth_bracer.dm b/code/game/objects/items/tools/synth_bracer/synth_bracer.dm similarity index 88% rename from code/game/objects/items/tools/synth_bracer.dm rename to code/game/objects/items/tools/synth_bracer/synth_bracer.dm index e67afbe0fea3..cd028226926f 100644 --- a/code/game/objects/items/tools/synth_bracer.dm +++ b/code/game/objects/items/tools/synth_bracer/synth_bracer.dm @@ -27,6 +27,8 @@ var/battery_charge = SMARTPACK_MAX_POWER_STORED + var/list/bracer_actions = list(/datum/action/human_action/activable/synth_bracer/rescue_hook) + /obj/item/clothing/gloves/synth/examine(mob/user) ..() to_chat(user, SPAN_INFO("The current charge reads [battery_charge]/[initial(battery_charge)].")) @@ -37,8 +39,12 @@ . = ..() if(slot == WEAR_HANDS) RegisterSignal(user, COMSIG_MOB_APC_ATTACK_HAND, .proc/handle_apc_charge) + for(var/action in bracer_actions) + give_action(user, action) /obj/item/clothing/gloves/synth/dropped(mob/user) + for(var/action in bracer_actions) + remove_action(user, action) UnregisterSignal(user, COMSIG_MOB_APC_ATTACK_HAND) return ..() @@ -84,3 +90,7 @@ to_chat(user, SPAN_WARNING("There is no charge to draw from that APC.")) /* -- +++++ +++++ -- */ + +/obj/item/clothing/gloves/synth/proc/drain_charge(var/mob/user, var/cost) + battery_charge -= cost + to_chat(user, SPAN_WARNING("\The [src] now has [battery_charge]/[initial(battery_charge)].")) From 2ed8b11e90577d81868ac0a6ee8e70ef0e8e0953 Mon Sep 17 00:00:00 2001 From: Geeves Date: Sun, 24 Apr 2022 20:04:37 +0200 Subject: [PATCH 003/188] better cooldown, charge handling, reflex overclock --- ColonialMarinesALPHA.dme | 1 + .../tools/synth_bracer/abilities/framework.dm | 41 ++++++++++++++++--- .../abilities/reflex_overclock.dm | 27 ++++++++++++ .../synth_bracer/abilities/rescue_hook.dm | 10 ++++- .../items/tools/synth_bracer/synth_bracer.dm | 7 +++- code/modules/projectiles/projectile.dm | 24 ++++++----- 6 files changed, 89 insertions(+), 21 deletions(-) create mode 100644 code/game/objects/items/tools/synth_bracer/abilities/reflex_overclock.dm diff --git a/ColonialMarinesALPHA.dme b/ColonialMarinesALPHA.dme index 44a5f93bbc21..d2659f9182f9 100644 --- a/ColonialMarinesALPHA.dme +++ b/ColonialMarinesALPHA.dme @@ -1011,6 +1011,7 @@ #include "code\game\objects\items\tools\surgery_tools.dm" #include "code\game\objects\items\tools\synth_bracer\synth_bracer.dm" #include "code\game\objects\items\tools\synth_bracer\abilities\framework.dm" +#include "code\game\objects\items\tools\synth_bracer\abilities\reflex_overclock.dm" #include "code\game\objects\items\tools\synth_bracer\abilities\repair_form.dm" #include "code\game\objects\items\tools\synth_bracer\abilities\rescue_hook.dm" #include "code\game\objects\items\toys\cards.dm" diff --git a/code/game/objects/items/tools/synth_bracer/abilities/framework.dm b/code/game/objects/items/tools/synth_bracer/abilities/framework.dm index eba2386055fc..f1fbc9516fe5 100644 --- a/code/game/objects/items/tools/synth_bracer/abilities/framework.dm +++ b/code/game/objects/items/tools/synth_bracer/abilities/framework.dm @@ -4,6 +4,8 @@ var/mob/living/carbon/human/synth var/obj/item/clothing/gloves/synth/synth_bracer var/charge_cost = 0 + var/handles_cooldown = FALSE + var/handles_charge_cost = FALSE /datum/action/human_action/activable/synth_bracer/give_to(user) if(!isSynth(user)) @@ -17,21 +19,27 @@ synth_bracer = null return ..() -/datum/action/human_action/activable/synth_bracer/can_use_action() +/datum/action/human_action/activable/synth_bracer/use_ability(var/mob/M) + if(!can_use_action()) + return FALSE if(synth_bracer.battery_charge < charge_cost) + to_chat(synth, SPAN_WARNING("You don't have enough charge to to do this! Charge: [synth_bracer.battery_charge]/[charge_cost].")) return FALSE - return ..() - -/datum/action/human_action/activable/synth_bracer/use_ability(var/mob/M) - if(charge_cost) + if(!handles_cooldown && cooldown) + enter_cooldown() + if(!handles_charge_cost && charge_cost) synth_bracer.drain_charge(owner, charge_cost) + return TRUE /* -- ON-CLICK ACTIONS -- */ /datum/action/human_action/synth_bracer var/mob/living/carbon/human/synth var/obj/item/clothing/gloves/synth/synth_bracer + var/ability_used_time = 0 var/charge_cost = 0 + var/handles_cooldown = FALSE // whether the cooldown gets handled by the child, or should be done automatically here + var/handles_charge_cost = FALSE /datum/action/human_action/synth_bracer/give_to(user) if(!isSynth(user)) @@ -45,11 +53,32 @@ synth_bracer = null return ..() +/datum/action/human_action/synth_bracer/action_cooldown_check() + return ability_used_time <= world.time + +/datum/action/human_action/synth_bracer/proc/enter_cooldown(var/amount = cooldown) + ability_used_time = world.time + amount + update_button_icon() + addtimer(CALLBACK(src, .proc/update_button_icon), amount) + +/datum/action/human_action/synth_bracer/update_button_icon() + if(!button) + return + if(!action_cooldown_check()) + button.color = rgb(240,180,0,200) + else + button.color = rgb(255,255,255,255) + /datum/action/human_action/synth_bracer/can_use_action() if(synth_bracer.battery_charge < charge_cost) + to_chat(synth, SPAN_WARNING("You don't have enough charge to to do this! Charge: [synth_bracer.battery_charge]/[charge_cost].")) + return FALSE + if(!action_cooldown_check()) return FALSE return ..() /datum/action/human_action/synth_bracer/action_activate() - if(charge_cost) + if(!handles_cooldown && cooldown) + enter_cooldown() + if(!handles_charge_cost && charge_cost) synth_bracer.drain_charge(owner, charge_cost) diff --git a/code/game/objects/items/tools/synth_bracer/abilities/reflex_overclock.dm b/code/game/objects/items/tools/synth_bracer/abilities/reflex_overclock.dm new file mode 100644 index 000000000000..eea4cd64ff02 --- /dev/null +++ b/code/game/objects/items/tools/synth_bracer/abilities/reflex_overclock.dm @@ -0,0 +1,27 @@ +/datum/action/human_action/synth_bracer/reflex_overclock + name = "Reflex Overclock" + action_icon_state = "agility_on" + cooldown = 20 SECONDS + charge_cost = 75 + + var/ability_duration = 15 SECONDS + +/datum/action/human_action/synth_bracer/reflex_overclock/action_activate() + ..() + + to_chat(synth, SPAN_BOLDNOTICE("Your reflexes go into overdrive!")) + RegisterSignal(synth, COMSIG_HUMAN_PRE_BULLET_ACT, .proc/handle_reflex_overclock) + synth.add_filter("reflex_overclock_on", 1, list("type" = "outline", "color" = "#d9ffd93b", "size" = 1)) + + addtimer(CALLBACK(src, .proc/disable_reflex_overclock), ability_duration) + +/datum/action/human_action/synth_bracer/reflex_overclock/proc/handle_reflex_overclock(var/mob/signal_owner, var/obj/item/projectile/projectile) + SIGNAL_HANDLER + + projectile.handle_miss(synth) + return COMPONENT_CANCEL_BULLET_ACT + +/datum/action/human_action/synth_bracer/reflex_overclock/proc/disable_reflex_overclock() + to_chat(synth, SPAN_BOLDNOTICE("Your programming returns to normal clock speeds.")) + UnregisterSignal(synth, COMSIG_HUMAN_PRE_BULLET_ACT) + synth.remove_filter("reflex_overclock_on") diff --git a/code/game/objects/items/tools/synth_bracer/abilities/rescue_hook.dm b/code/game/objects/items/tools/synth_bracer/abilities/rescue_hook.dm index 382f52a6629f..9ede60b4d3bb 100644 --- a/code/game/objects/items/tools/synth_bracer/abilities/rescue_hook.dm +++ b/code/game/objects/items/tools/synth_bracer/abilities/rescue_hook.dm @@ -2,14 +2,20 @@ name = "Rescue Hook" action_icon_state = "stomp" cooldown = 5 SECONDS + charge_cost = 60 - charge_cost = 10 + handles_cooldown = TRUE + handles_charge_cost = TRUE // Config var/max_distance = 7 var/windup = 8 /datum/action/human_action/activable/synth_bracer/rescue_hook/use_ability(atom/A) + . = ..() + if(!.) + return + if(!A || A.layer >= FLY_LAYER || !isturf(synth.loc)) return @@ -72,8 +78,8 @@ return - synth_bracer.drain_charge(synth, charge_cost) enter_cooldown() + synth_bracer.drain_charge(synth, charge_cost) synth.frozen = FALSE synth.update_canmove() diff --git a/code/game/objects/items/tools/synth_bracer/synth_bracer.dm b/code/game/objects/items/tools/synth_bracer/synth_bracer.dm index cd028226926f..53d944d801a1 100644 --- a/code/game/objects/items/tools/synth_bracer/synth_bracer.dm +++ b/code/game/objects/items/tools/synth_bracer/synth_bracer.dm @@ -27,7 +27,10 @@ var/battery_charge = SMARTPACK_MAX_POWER_STORED - var/list/bracer_actions = list(/datum/action/human_action/activable/synth_bracer/rescue_hook) + var/list/bracer_actions = list( + /datum/action/human_action/activable/synth_bracer/rescue_hook, + /datum/action/human_action/synth_bracer/reflex_overclock + ) /obj/item/clothing/gloves/synth/examine(mob/user) ..() @@ -93,4 +96,4 @@ /obj/item/clothing/gloves/synth/proc/drain_charge(var/mob/user, var/cost) battery_charge -= cost - to_chat(user, SPAN_WARNING("\The [src] now has [battery_charge]/[initial(battery_charge)].")) + to_chat(user, SPAN_WARNING("\The [src]'s charge now reads: [battery_charge]/[initial(battery_charge)].")) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index f17c6525f6f2..cb25d7972408 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -498,17 +498,7 @@ . = TRUE else if(!L.lying) - animatation_displace_reset(L) - if(ammo.sound_miss) playsound_client(L.client, ammo.sound_miss, get_turf(L), 75, TRUE) - L.visible_message(SPAN_AVOIDHARM("[src] misses [L]!"), - SPAN_AVOIDHARM("[src] narrowly misses you!"), null, 4, CHAT_TYPE_TAKING_HIT) - log_attack("[src] narrowly missed [key_name(L)]") - - var/mob/living/carbon/shotby = firer - if(istype(shotby)) - L.attack_log += "[time_stamp()]\] [src], fired by [key_name(firer)], narrowly missed [key_name(L)]" - shotby.attack_log += "[time_stamp()]\] [src], fired by [key_name(shotby)], narrowly missed [key_name(L)]" - + handle_miss(L) #if DEBUG_HIT_CHANCE to_world(SPAN_DEBUG("([L]) Missed.")) @@ -517,6 +507,18 @@ if(SEND_SIGNAL(src, COMSIG_BULLET_POST_HANDLE_MOB, L, .) & COMPONENT_BULLET_PASS_THROUGH) return FALSE +/obj/item/projectile/proc/handle_miss(var/mob/living/target) + animatation_displace_reset(target) + if(ammo.sound_miss) + playsound_client(target.client, ammo.sound_miss, get_turf(target), 75, TRUE) + target.visible_message(SPAN_AVOIDHARM("[src] misses [target]!"), SPAN_AVOIDHARM("[src] narrowly misses you!"), null, 4, CHAT_TYPE_TAKING_HIT) + log_attack("[src] narrowly missed [key_name(target)]") + + var/mob/living/carbon/shotby = firer + if(istype(shotby)) + target.attack_log += "[time_stamp()]\] [src], fired by [key_name(firer)], narrowly missed [key_name(target)]" + shotby.attack_log += "[time_stamp()]\] [src], fired by [key_name(shotby)], narrowly missed [key_name(target)]" + //---------------------------------------------------------- // \\ // HITTING THE TARGET \\ From 6f572a5fc1b6de18ce03b68964d01bc9e40dcb3d Mon Sep 17 00:00:00 2001 From: Geeves Date: Sun, 24 Apr 2022 20:28:20 +0200 Subject: [PATCH 004/188] ocular designator WIP --- ColonialMarinesALPHA.dme | 1 + .../abilities/ocular_designator.dm | 56 +++++++++++++++++++ .../items/tools/synth_bracer/synth_bracer.dm | 3 +- 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 code/game/objects/items/tools/synth_bracer/abilities/ocular_designator.dm diff --git a/ColonialMarinesALPHA.dme b/ColonialMarinesALPHA.dme index d2659f9182f9..8c77564f32ad 100644 --- a/ColonialMarinesALPHA.dme +++ b/ColonialMarinesALPHA.dme @@ -1011,6 +1011,7 @@ #include "code\game\objects\items\tools\surgery_tools.dm" #include "code\game\objects\items\tools\synth_bracer\synth_bracer.dm" #include "code\game\objects\items\tools\synth_bracer\abilities\framework.dm" +#include "code\game\objects\items\tools\synth_bracer\abilities\ocular_designator.dm" #include "code\game\objects\items\tools\synth_bracer\abilities\reflex_overclock.dm" #include "code\game\objects\items\tools\synth_bracer\abilities\repair_form.dm" #include "code\game\objects\items\tools\synth_bracer\abilities\rescue_hook.dm" diff --git a/code/game/objects/items/tools/synth_bracer/abilities/ocular_designator.dm b/code/game/objects/items/tools/synth_bracer/abilities/ocular_designator.dm new file mode 100644 index 000000000000..d791a00aa959 --- /dev/null +++ b/code/game/objects/items/tools/synth_bracer/abilities/ocular_designator.dm @@ -0,0 +1,56 @@ +/obj/item/clothing/gloves/synth + var/obj/item/device/binoculars/range/designator/scout/designator + +/obj/item/clothing/gloves/synth/Initialize(mapload, ...) + . = ..() + designator = new(src) + RegisterSignal(designator, COMSIG_ITEM_DROPPED, .proc/return_designator) + +/obj/item/clothing/gloves/synth/attackby(obj/item/I, mob/user) + if(I == designator) + return_designator() + return + return ..() + +/obj/item/clothing/gloves/synth/dropped(mob/user) + . = ..() + return_designator() + +/obj/item/clothing/gloves/synth/Destroy() + QDEL_NULL(designator) + return ..() + +/obj/item/clothing/gloves/synth/proc/deploy_designator(var/mob/M) + if(!M.put_in_active_hand(designator)) + M.put_in_inactive_hand(designator) + +/obj/item/clothing/gloves/synth/proc/return_designator() + if(QDELETED(designator)) + designator = null + return + + if(ismob(designator.loc)) + var/mob/M = designator.loc + M.drop_inv_item_to_loc(designator, src) + else + designator.forceMove(src) + + +/datum/action/human_action/synth_bracer/deploy_ocular_designator + name = "Deploy Ocular Designator" + action_icon_state = "toggle_queen_zoom" + +/datum/action/human_action/synth_bracer/deploy_ocular_designator/can_use_action() + if(QDELETED(synth_bracer.designator) || synth_bracer.designator.loc != synth_bracer) + to_chat(synth, SPAN_WARNING("The designator isn't inside the SIMI anymore.")) + return FALSE + if(synth.l_hand && synth.r_hand) + to_chat(synth, SPAN_WARNING("You need at least one free hand.")) + return FALSE + return ..() + +/datum/action/human_action/synth_bracer/deploy_ocular_designator/action_activate() + ..() + + to_chat(synth, SPAN_NOTICE("You deploy your ocular designator.")) + synth_bracer.deploy_designator(synth) diff --git a/code/game/objects/items/tools/synth_bracer/synth_bracer.dm b/code/game/objects/items/tools/synth_bracer/synth_bracer.dm index 53d944d801a1..bc97acb7f9ba 100644 --- a/code/game/objects/items/tools/synth_bracer/synth_bracer.dm +++ b/code/game/objects/items/tools/synth_bracer/synth_bracer.dm @@ -29,7 +29,8 @@ var/list/bracer_actions = list( /datum/action/human_action/activable/synth_bracer/rescue_hook, - /datum/action/human_action/synth_bracer/reflex_overclock + /datum/action/human_action/synth_bracer/reflex_overclock, + /datum/action/human_action/synth_bracer/deploy_ocular_designator ) /obj/item/clothing/gloves/synth/examine(mob/user) From 4d974e0ad2377f498f02e8c63f034b46bd8c4759 Mon Sep 17 00:00:00 2001 From: Geeves Date: Sun, 24 Apr 2022 20:38:03 +0200 Subject: [PATCH 005/188] convert repair form to synth_bracer action --- .../synth_bracer/abilities/repair_form.dm | 65 ++++++------------- .../items/tools/synth_bracer/synth_bracer.dm | 3 +- 2 files changed, 23 insertions(+), 45 deletions(-) diff --git a/code/game/objects/items/tools/synth_bracer/abilities/repair_form.dm b/code/game/objects/items/tools/synth_bracer/abilities/repair_form.dm index 4629f47dd514..2c91cc6e5276 100644 --- a/code/game/objects/items/tools/synth_bracer/abilities/repair_form.dm +++ b/code/game/objects/items/tools/synth_bracer/abilities/repair_form.dm @@ -1,52 +1,29 @@ -#define REPAIR_COST 50 +/datum/action/human_action/synth_bracer/repair_form + name = "Repair Form" + action_icon_state = "smartpack_repair" + cooldown = 15 SECONDS + charge_cost = 50 -/obj/item/clothing/gloves/synth - var/repairing = FALSE - var/repair_form_cooldown = 15 SECONDS + handles_charge_cost = TRUE + handles_cooldown = TRUE -/obj/item/clothing/gloves/synth/verb/repair_form_verb() - set name = "Repair Form (50)" - set desc = "Repair yourself at the cost of 50u of charge." - set category = "Synthetic.SIMI" - set src in usr +/datum/action/human_action/synth_bracer/repair_form/action_activate() + ..() - if(!isSynth(usr)) + if(synth.getBruteLoss() <= 0 && synth.getFireLoss() <= 0) + to_chat(synth, SPAN_WARNING("[synth_bracer.name] beeps, \"No noticeable damage. Procedure cancelled.\"")) return - repair_form(usr) - -/obj/item/clothing/gloves/synth/proc/repair_form(mob/living/carbon/human/user) - if(!ishuman(user) || repairing) - return - - if(battery_charge < REPAIR_COST) - to_chat(user, SPAN_WARNING("There is a lack of charge for that action. Charge: [battery_charge]/[REPAIR_COST]")) - return - - if(user.getBruteLoss() <= 0 && user.getFireLoss() <= 0) - to_chat(user, SPAN_WARNING("[name] beeps, \"No noticeable damage. Procedure cancelled.\"")) + synth.visible_message(SPAN_WARNING("[synth_bracer.name] beeps, \"Engaging the repairing process.\""), SPAN_WARNING("[synth_bracer.name] beeps, \"Beginning to carefully examine your sustained damage.\"")) + playsound(synth.loc, 'sound/mecha/mechmove04.ogg', 25, TRUE) + if(!do_after(synth, 5 SECONDS, INTERRUPT_INCAPACITATED|INTERRUPT_CLICK, BUSY_ICON_FRIENDLY)) + to_chat(synth, SPAN_DANGER("[synth_bracer.name] beeps, \"Repair process was cancelled.\"")) return - repairing = TRUE - update_icon(user) - - user.visible_message(SPAN_WARNING("[name] beeps, \"Engaging the repairing process.\""), SPAN_WARNING("[name] beeps, \"Beginning to carefully examine your sustained damage.\"")) - playsound(loc, 'sound/mecha/mechmove04.ogg', 25, TRUE) - if(!do_after(user, 5 SECONDS, INTERRUPT_INCAPACITATED|INTERRUPT_CLICK, BUSY_ICON_FRIENDLY)) - repairing = FALSE - update_icon(user) - to_chat(user, SPAN_DANGER("[name] beeps, \"Repair process was cancelled.\"")) - return - - playsound(loc, 'sound/items/Welder2.ogg', 25, TRUE) - battery_charge -= REPAIR_COST - user.heal_overall_damage(25, 25, TRUE) - user.pain.recalculate_pain() - user.visible_message(SPAN_NOTICE("[name] beeps, \"Completed the repairing process. Charge now reads [battery_charge]/[initial(battery_charge)].\"")) - - addtimer(CALLBACK(src, .proc/repair_form_cooldown, user), repair_form_cooldown) - -/obj/item/clothing/gloves/synth/proc/repair_form_cooldown(mob/user) - repairing = FALSE + enter_cooldown() + synth_bracer.drain_charge(synth, charge_cost) -#undef REPAIR_COST + playsound(synth.loc, 'sound/items/Welder2.ogg', 25, TRUE) + synth.heal_overall_damage(25, 25, TRUE) + synth.pain.recalculate_pain() + synth.visible_message(SPAN_NOTICE("[synth_bracer.name] beeps, \"Completed the repairing process.\"")) diff --git a/code/game/objects/items/tools/synth_bracer/synth_bracer.dm b/code/game/objects/items/tools/synth_bracer/synth_bracer.dm index bc97acb7f9ba..3ee222fabc64 100644 --- a/code/game/objects/items/tools/synth_bracer/synth_bracer.dm +++ b/code/game/objects/items/tools/synth_bracer/synth_bracer.dm @@ -30,7 +30,8 @@ var/list/bracer_actions = list( /datum/action/human_action/activable/synth_bracer/rescue_hook, /datum/action/human_action/synth_bracer/reflex_overclock, - /datum/action/human_action/synth_bracer/deploy_ocular_designator + /datum/action/human_action/synth_bracer/deploy_ocular_designator, + /datum/action/human_action/synth_bracer/repair_form ) /obj/item/clothing/gloves/synth/examine(mob/user) From ab235cbd20f82fbb003201cb6f52f0c881fbd737 Mon Sep 17 00:00:00 2001 From: Geeves Date: Sun, 24 Apr 2022 21:29:47 +0200 Subject: [PATCH 006/188] integrated phone --- ColonialMarinesALPHA.dme | 1 + .../abilities/integrated_phone.dm | 61 +++++++++++++++++++ .../items/tools/synth_bracer/synth_bracer.dm | 15 +++++ 3 files changed, 77 insertions(+) create mode 100644 code/game/objects/items/tools/synth_bracer/abilities/integrated_phone.dm diff --git a/ColonialMarinesALPHA.dme b/ColonialMarinesALPHA.dme index 8c77564f32ad..ea99cebb3c51 100644 --- a/ColonialMarinesALPHA.dme +++ b/ColonialMarinesALPHA.dme @@ -1011,6 +1011,7 @@ #include "code\game\objects\items\tools\surgery_tools.dm" #include "code\game\objects\items\tools\synth_bracer\synth_bracer.dm" #include "code\game\objects\items\tools\synth_bracer\abilities\framework.dm" +#include "code\game\objects\items\tools\synth_bracer\abilities\integrated_phone.dm" #include "code\game\objects\items\tools\synth_bracer\abilities\ocular_designator.dm" #include "code\game\objects\items\tools\synth_bracer\abilities\reflex_overclock.dm" #include "code\game\objects\items\tools\synth_bracer\abilities\repair_form.dm" diff --git a/code/game/objects/items/tools/synth_bracer/abilities/integrated_phone.dm b/code/game/objects/items/tools/synth_bracer/abilities/integrated_phone.dm new file mode 100644 index 000000000000..651d1bd64af9 --- /dev/null +++ b/code/game/objects/items/tools/synth_bracer/abilities/integrated_phone.dm @@ -0,0 +1,61 @@ +/obj/item/clothing/gloves/synth + var/obj/structure/transmitter/internal/internal_transmitter + +/obj/item/clothing/gloves/synth/Initialize(mapload, ...) + . = ..() + internal_transmitter = new(src) + internal_transmitter.relay_obj = src + internal_transmitter.phone_category = "Synth" + internal_transmitter.enabled = FALSE + + RegisterSignal(internal_transmitter, COMSIG_TRANSMITTER_UPDATE_ICON, .proc/check_for_ringing) + +/obj/item/clothing/gloves/synth/Destroy() + QDEL_NULL(internal_transmitter) + return ..() + +/obj/item/clothing/gloves/synth/proc/check_for_ringing() + SIGNAL_HANDLER + update_icon() + +/obj/item/clothing/gloves/synth/forceMove(atom/dest) + . = ..() + if(isturf(dest)) + internal_transmitter.set_tether_holder(src) + else + internal_transmitter.set_tether_holder(loc) + +/obj/item/clothing/gloves/synth/pickup(mob/user) + . = ..() + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(H.comm_title) + internal_transmitter.phone_id = "[H.comm_title] [H]" + else if(H.job) + internal_transmitter.phone_id = "[H.job] [H]" + else + internal_transmitter.phone_id = "[H]" + + if(H.assigned_squad) + internal_transmitter.phone_id += " ([H.assigned_squad.name])" + else + internal_transmitter.phone_id = "[user]" + + internal_transmitter.enabled = TRUE + +/obj/item/clothing/gloves/synth/dropped(mob/user) + . = ..() + internal_transmitter.phone_id = "[src]" + internal_transmitter.enabled = FALSE + +/obj/item/clothing/gloves/synth/attackby(obj/item/W, mob/user) + if(internal_transmitter.attached_to == W) + internal_transmitter.attackby(W, user) + return + return ..() + +/obj/item/clothing/gloves/synth/attack_hand(mob/living/carbon/human/user) + if(istype(user) && user.gloves == src) + internal_transmitter.attack_hand(user) + return + return ..() diff --git a/code/game/objects/items/tools/synth_bracer/synth_bracer.dm b/code/game/objects/items/tools/synth_bracer/synth_bracer.dm index 3ee222fabc64..7938e875d4fc 100644 --- a/code/game/objects/items/tools/synth_bracer/synth_bracer.dm +++ b/code/game/objects/items/tools/synth_bracer/synth_bracer.dm @@ -99,3 +99,18 @@ /obj/item/clothing/gloves/synth/proc/drain_charge(var/mob/user, var/cost) battery_charge -= cost to_chat(user, SPAN_WARNING("\The [src]'s charge now reads: [battery_charge]/[initial(battery_charge)].")) + +/obj/item/clothing/gloves/synth/MouseDrop(obj/over_object as obj) + if(CAN_PICKUP(usr, src)) + if(!istype(over_object, /obj/screen)) + return ..() + + if(!usr.is_mob_restrained() && !usr.stat) + switch(over_object.name) + if("r_hand") + if(usr.drop_inv_item_on_ground(src)) + usr.put_in_r_hand(src) + if("l_hand") + if(usr.drop_inv_item_on_ground(src)) + usr.put_in_l_hand(src) + add_fingerprint(usr) From 222812d65b744dafbdf5ff4f0f54801f172067bb Mon Sep 17 00:00:00 2001 From: Geeves Date: Sun, 24 Apr 2022 21:54:42 +0200 Subject: [PATCH 007/188] tacmap --- ColonialMarinesALPHA.dme | 1 + .../tools/synth_bracer/abilities/tactical_map.dm | 11 +++++++++++ .../objects/items/tools/synth_bracer/synth_bracer.dm | 3 ++- 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 code/game/objects/items/tools/synth_bracer/abilities/tactical_map.dm diff --git a/ColonialMarinesALPHA.dme b/ColonialMarinesALPHA.dme index ea99cebb3c51..dc307f67c8cb 100644 --- a/ColonialMarinesALPHA.dme +++ b/ColonialMarinesALPHA.dme @@ -1016,6 +1016,7 @@ #include "code\game\objects\items\tools\synth_bracer\abilities\reflex_overclock.dm" #include "code\game\objects\items\tools\synth_bracer\abilities\repair_form.dm" #include "code\game\objects\items\tools\synth_bracer\abilities\rescue_hook.dm" +#include "code\game\objects\items\tools\synth_bracer\abilities\tactical_map.dm" #include "code\game\objects\items\toys\cards.dm" #include "code\game\objects\items\toys\crayons.dm" #include "code\game\objects\items\toys\toy_weapons.dm" diff --git a/code/game/objects/items/tools/synth_bracer/abilities/tactical_map.dm b/code/game/objects/items/tools/synth_bracer/abilities/tactical_map.dm new file mode 100644 index 000000000000..23d5af0138a8 --- /dev/null +++ b/code/game/objects/items/tools/synth_bracer/abilities/tactical_map.dm @@ -0,0 +1,11 @@ +/datum/action/human_action/synth_bracer/tactical_map + name = "View Tactical Map" + action_icon_state = "resin_pit" + +/datum/action/human_action/synth_bracer/tactical_map/action_activate() + ..() + + var/icon/O = overlay_tacmap(TACMAP_DEFAULT, TACMAP_BASE_OCCLUDED) + if(O) + synth << browse_rsc(O, "marine_minimap.png") + show_browser(synth, "", "Marine Minimap", "marineminimap", "size=[(map_sizes[1]*2)+50]x[(map_sizes[2]*2)+50]", closeref = synth) diff --git a/code/game/objects/items/tools/synth_bracer/synth_bracer.dm b/code/game/objects/items/tools/synth_bracer/synth_bracer.dm index 7938e875d4fc..0d526cb4aaa6 100644 --- a/code/game/objects/items/tools/synth_bracer/synth_bracer.dm +++ b/code/game/objects/items/tools/synth_bracer/synth_bracer.dm @@ -31,7 +31,8 @@ /datum/action/human_action/activable/synth_bracer/rescue_hook, /datum/action/human_action/synth_bracer/reflex_overclock, /datum/action/human_action/synth_bracer/deploy_ocular_designator, - /datum/action/human_action/synth_bracer/repair_form + /datum/action/human_action/synth_bracer/repair_form, + /datum/action/human_action/synth_bracer/tactical_map ) /obj/item/clothing/gloves/synth/examine(mob/user) From e128a4d61361770b63a1330b5281e22e4ead9e75 Mon Sep 17 00:00:00 2001 From: Geeves Date: Sun, 1 May 2022 18:31:10 +0200 Subject: [PATCH 008/188] sprites --- .../abilities/integrated_phone.dm | 5 +- .../abilities/reflex_overclock.dm | 27 +++++-- .../synth_bracer/abilities/repair_form.dm | 2 + .../synth_bracer/abilities/rescue_hook.dm | 2 + .../items/tools/synth_bracer/synth_bracer.dm | 72 +++++++++++++++--- icons/mob/humans/onmob/synth/bracer.dmi | Bin 0 -> 494 bytes icons/obj/items/synth/bracer.dmi | Bin 0 -> 1354 bytes 7 files changed, 92 insertions(+), 16 deletions(-) create mode 100644 icons/mob/humans/onmob/synth/bracer.dmi create mode 100644 icons/obj/items/synth/bracer.dmi diff --git a/code/game/objects/items/tools/synth_bracer/abilities/integrated_phone.dm b/code/game/objects/items/tools/synth_bracer/abilities/integrated_phone.dm index 651d1bd64af9..e3e1abebcbbc 100644 --- a/code/game/objects/items/tools/synth_bracer/abilities/integrated_phone.dm +++ b/code/game/objects/items/tools/synth_bracer/abilities/integrated_phone.dm @@ -45,8 +45,9 @@ /obj/item/clothing/gloves/synth/dropped(mob/user) . = ..() - internal_transmitter.phone_id = "[src]" - internal_transmitter.enabled = FALSE + if(internal_transmitter) + internal_transmitter.phone_id = "[src]" + internal_transmitter.enabled = FALSE /obj/item/clothing/gloves/synth/attackby(obj/item/W, mob/user) if(internal_transmitter.attached_to == W) diff --git a/code/game/objects/items/tools/synth_bracer/abilities/reflex_overclock.dm b/code/game/objects/items/tools/synth_bracer/abilities/reflex_overclock.dm index eea4cd64ff02..08f19662c0c3 100644 --- a/code/game/objects/items/tools/synth_bracer/abilities/reflex_overclock.dm +++ b/code/game/objects/items/tools/synth_bracer/abilities/reflex_overclock.dm @@ -5,6 +5,7 @@ charge_cost = 75 var/ability_duration = 15 SECONDS + var/ability_timer /datum/action/human_action/synth_bracer/reflex_overclock/action_activate() ..() @@ -12,8 +13,10 @@ to_chat(synth, SPAN_BOLDNOTICE("Your reflexes go into overdrive!")) RegisterSignal(synth, COMSIG_HUMAN_PRE_BULLET_ACT, .proc/handle_reflex_overclock) synth.add_filter("reflex_overclock_on", 1, list("type" = "outline", "color" = "#d9ffd93b", "size" = 1)) + synth_bracer.icon_state = "bracer_protect" - addtimer(CALLBACK(src, .proc/disable_reflex_overclock), ability_duration) + RegisterSignal(synth_bracer, COMSIG_ITEM_DROPPED, .proc/handle_dropped) + ability_timer = addtimer(CALLBACK(src, .proc/disable_reflex_overclock, synth), ability_duration, TIMER_UNIQUE|TIMER_STOPPABLE) /datum/action/human_action/synth_bracer/reflex_overclock/proc/handle_reflex_overclock(var/mob/signal_owner, var/obj/item/projectile/projectile) SIGNAL_HANDLER @@ -21,7 +24,21 @@ projectile.handle_miss(synth) return COMPONENT_CANCEL_BULLET_ACT -/datum/action/human_action/synth_bracer/reflex_overclock/proc/disable_reflex_overclock() - to_chat(synth, SPAN_BOLDNOTICE("Your programming returns to normal clock speeds.")) - UnregisterSignal(synth, COMSIG_HUMAN_PRE_BULLET_ACT) - synth.remove_filter("reflex_overclock_on") +/datum/action/human_action/synth_bracer/reflex_overclock/proc/handle_dropped(var/obj/item/clothing/gloves/synth/bracer, var/mob/living/carbon/human/user) + SIGNAL_HANDLER + + deltimer(ability_timer) + ability_timer = null + + disable_reflex_overclock(user, bracer) + +/datum/action/human_action/synth_bracer/reflex_overclock/proc/disable_reflex_overclock(var/mob/living/carbon/human/synth_user, var/obj/item/clothing/gloves/synth/bracer) + if(synth) + synth_user = synth + if(synth_bracer) + bracer = synth_bracer + to_chat(synth_user, SPAN_BOLDNOTICE("Your programming returns to normal clock speeds.")) + UnregisterSignal(synth_user, COMSIG_HUMAN_PRE_BULLET_ACT) + UnregisterSignal(bracer, COMSIG_ITEM_DROPPED) + synth_user.remove_filter("reflex_overclock_on") + bracer.update_icon() diff --git a/code/game/objects/items/tools/synth_bracer/abilities/repair_form.dm b/code/game/objects/items/tools/synth_bracer/abilities/repair_form.dm index 2c91cc6e5276..2faf478306f4 100644 --- a/code/game/objects/items/tools/synth_bracer/abilities/repair_form.dm +++ b/code/game/objects/items/tools/synth_bracer/abilities/repair_form.dm @@ -14,10 +14,12 @@ to_chat(synth, SPAN_WARNING("[synth_bracer.name] beeps, \"No noticeable damage. Procedure cancelled.\"")) return + synth_bracer.icon_state = "bracer_repair" synth.visible_message(SPAN_WARNING("[synth_bracer.name] beeps, \"Engaging the repairing process.\""), SPAN_WARNING("[synth_bracer.name] beeps, \"Beginning to carefully examine your sustained damage.\"")) playsound(synth.loc, 'sound/mecha/mechmove04.ogg', 25, TRUE) if(!do_after(synth, 5 SECONDS, INTERRUPT_INCAPACITATED|INTERRUPT_CLICK, BUSY_ICON_FRIENDLY)) to_chat(synth, SPAN_DANGER("[synth_bracer.name] beeps, \"Repair process was cancelled.\"")) + synth_bracer.update_icon() return enter_cooldown() diff --git a/code/game/objects/items/tools/synth_bracer/abilities/rescue_hook.dm b/code/game/objects/items/tools/synth_bracer/abilities/rescue_hook.dm index 9ede60b4d3bb..7909f8907ad2 100644 --- a/code/game/objects/items/tools/synth_bracer/abilities/rescue_hook.dm +++ b/code/game/objects/items/tools/synth_bracer/abilities/rescue_hook.dm @@ -66,6 +66,7 @@ synth.frozen = TRUE synth.update_canmove() + synth_bracer.icon_state = "bracer_fortify" if(!do_after(synth, windup, INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE, null, null, FALSE, 1, FALSE, 1)) to_chat(synth, SPAN_WARNING("You cancel your launch.")) @@ -75,6 +76,7 @@ synth.frozen = FALSE synth.update_canmove() + synth_bracer.update_icon() return diff --git a/code/game/objects/items/tools/synth_bracer/synth_bracer.dm b/code/game/objects/items/tools/synth_bracer/synth_bracer.dm index 0d526cb4aaa6..f28d90758386 100644 --- a/code/game/objects/items/tools/synth_bracer/synth_bracer.dm +++ b/code/game/objects/items/tools/synth_bracer/synth_bracer.dm @@ -2,10 +2,15 @@ name = "\improper PK-130 SIMI wrist-mounted computer" desc = "Developed by a joint effort between Weyland-Yutani and the USCM, the SIMI portable computer is the ultimate solution for situational awareness, personnel monitoring and communication." - icon = 'icons/obj/items/hunter/pred_gear.dmi' + icon = 'icons/obj/items/synth/bracer.dmi' icon_state = "bracer" item_icons = list( - WEAR_HANDS = 'icons/mob/humans/onmob/hunter/pred_gear.dmi' + WEAR_HANDS = 'icons/mob/humans/onmob/synth/bracer.dmi' + ) + + var/base_item_slot_state = "bracer" + item_state_slots = list( + WEAR_HANDS = "bracer" ) siemens_coefficient = 0 @@ -27,7 +32,7 @@ var/battery_charge = SMARTPACK_MAX_POWER_STORED - var/list/bracer_actions = list( + var/list/actions_list = list( /datum/action/human_action/activable/synth_bracer/rescue_hook, /datum/action/human_action/synth_bracer/reflex_overclock, /datum/action/human_action/synth_bracer/deploy_ocular_designator, @@ -35,23 +40,47 @@ /datum/action/human_action/synth_bracer/tactical_map ) + var/list/bracer_actions = list() + +/obj/item/clothing/gloves/synth/Initialize(mapload, ...) + . = ..() + for(var/action_type in actions_list) + bracer_actions += new action_type + +/obj/item/clothing/gloves/synth/Destroy() + . = ..() + QDEL_NULL_LIST(bracer_actions) + /obj/item/clothing/gloves/synth/examine(mob/user) ..() to_chat(user, SPAN_INFO("The current charge reads [battery_charge]/[initial(battery_charge)].")) -/* -- HANDLING APC CHARGING -- */ +/obj/item/clothing/gloves/synth/update_icon() + var/mob/living/carbon/human/wearer = loc + if(!istype(wearer) || wearer.gloves != src) + icon_state = "bracer" + return + if(!isSynth(wearer)) + icon_state = "bracer_unauthorized" + else if(battery_charge <= initial(battery_charge) * 0.1) + icon_state = "bracer_nobattery" + else + icon_state = "bracer_idle" /obj/item/clothing/gloves/synth/equipped(mob/user, slot) . = ..() if(slot == WEAR_HANDS) RegisterSignal(user, COMSIG_MOB_APC_ATTACK_HAND, .proc/handle_apc_charge) - for(var/action in bracer_actions) - give_action(user, action) + for(var/datum/action/human_action/action as anything in bracer_actions) + action.give_to(user) + flick("bracer_startup", src) + update_icon() /obj/item/clothing/gloves/synth/dropped(mob/user) - for(var/action in bracer_actions) - remove_action(user, action) + for(var/datum/action/human_action/action as anything in bracer_actions) + action.remove_from(user) UnregisterSignal(user, COMSIG_MOB_APC_ATTACK_HAND) + update_icon() return ..() /obj/item/clothing/gloves/synth/proc/handle_apc_charge(var/mob/living/carbon/human/user, var/obj/structure/machinery/power/apc/apc) @@ -71,7 +100,10 @@ return COMPONENT_APC_HANDLED_HAND /obj/item/clothing/gloves/synth/proc/complete_apc_charge(var/mob/living/carbon/human/user, var/obj/structure/machinery/power/apc/apc) + start_charging(user) + if(!do_after(user, 2 SECONDS, INTERRUPT_ALL, BUSY_ICON_GENERIC)) + stop_charging(user) return playsound(apc.loc, 'sound/effects/sparks2.ogg', 25, 1) @@ -86,6 +118,7 @@ if(battery_charge < initial(battery_charge)) var/charge_to_use = min(apc.cell.charge, initial(battery_charge) - battery_charge) if(!(apc.cell.use(charge_to_use))) + stop_charging(user) return battery_charge += charge_to_use to_chat(user, SPAN_NOTICE("You slot your fingers into the APC interface and siphon off some of the stored charge. \The [src] now has [battery_charge]/[initial(battery_charge)].")) @@ -94,12 +127,20 @@ to_chat(user, SPAN_WARNING("\The [src] is already fully charged.")) else to_chat(user, SPAN_WARNING("There is no charge to draw from that APC.")) + stop_charging(user) -/* -- +++++ +++++ -- */ +/obj/item/clothing/gloves/synth/proc/start_charging(var/mob/user) + item_state_slots[WEAR_HANDS] += "_charging" + user.update_inv_gloves() + +/obj/item/clothing/gloves/synth/proc/stop_charging(var/mob/user) + item_state_slots[WEAR_HANDS] = base_item_slot_state + user.update_inv_gloves() /obj/item/clothing/gloves/synth/proc/drain_charge(var/mob/user, var/cost) battery_charge -= cost to_chat(user, SPAN_WARNING("\The [src]'s charge now reads: [battery_charge]/[initial(battery_charge)].")) + update_icon() /obj/item/clothing/gloves/synth/MouseDrop(obj/over_object as obj) if(CAN_PICKUP(usr, src)) @@ -115,3 +156,16 @@ if(usr.drop_inv_item_on_ground(src)) usr.put_in_l_hand(src) add_fingerprint(usr) + +/obj/item/clothing/gloves/synth/verb/swap_hands() + set name = "Swap Hands" + set src in usr + + if(base_item_slot_state == "bracer") + base_item_slot_state = "bracer_r" + else + base_item_slot_state = "bracer" + item_state_slots[WEAR_HANDS] = base_item_slot_state + + to_chat(usr, SPAN_NOTICE("You shift \the [src] over to your [base_item_slot_state == "bracer" ? "right arm" : "left arm"].")) + usr.update_inv_gloves() diff --git a/icons/mob/humans/onmob/synth/bracer.dmi b/icons/mob/humans/onmob/synth/bracer.dmi new file mode 100644 index 0000000000000000000000000000000000000000..76fd92c8c8ff35157dd7c641f8e434f8a4138936 GIT binary patch literal 494 zcmVfFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainGjE%TB zGg33tGfE(w;*!LYR3K9+sVFfywMdDJGbOXA7^I7fGp#5wHxtZ;8Lip;OgfB_96f;a72@-dNn}+008z$L_t(&f$f=13c@fDMl)EnOC!BNzys79 zwBDdMs5j^lx^?NU$F)-PBbkILC=~qOY6!#EFq?TaN&x`A4e8@jXuYO8I5PE8T#O)K zS2a;U*DuAb69nu}aX@Qt&`NH=1=tx#0_YkAC_6if#=}vGx&QzG{4WPrmFwCq|0D#{Sulg6EB@FohZw8;oK8yc^MNf%yx4dY|?y-aqIA2hz zXlu6RO~MD9FU$d^XItzI_;pVHvxUjtAmIbf7v_L-b_OXQ@c&{+q8tDK0KisAye9-N k2+U(b2>bwk0KhhQ0-z`z=n9hX2LJ#707*qoM6N<$f&@UvCjbBd literal 0 HcmV?d00001 diff --git a/icons/obj/items/synth/bracer.dmi b/icons/obj/items/synth/bracer.dmi new file mode 100644 index 0000000000000000000000000000000000000000..c4abaf7de5f1699e10e51b61f0ef26bc6e4aeff0 GIT binary patch literal 1354 zcmV-Q1-1H#P)004jp0{{R3yS|0 zz`ctZ?XDcnLnWjD0004WQchCV=-0C=38lEDgt zFc3t~<|~3;rD)Y-FGVRH>MxXNHZ@?4tZR$?`UZO_REtvfG85*p!xE1lvr}I1^qjLh zV6RQf4?Nxl%z0=@wKdV6IW_2OO>fhaAh6OcQB;5~bEL-JK7`CsC~ol9U$Ki(YHQSb zq@i1m+cpv!FaJ_IC_+h|2o)zizO!_R6%!g#z!4DR6c~aU4u4vg0*Y#R}iTRY|7VH%D3X~jo(p(jfi*M0`1>>@&kN) ze8e+wZ@mq-Cmp(nn~i;%=tgIg4EahqjUwy&zZDc znm8%E3`g(Ra{bu~Qhz!NTm`*66&+#+N_`A~n*$M(x zkX?hS{_kJ#gNpu7;`;ut$PdQ1nz!?Vdj7A_56b@Ur`-9$n*PQ9ubvOH9}M^q^QiyO zKP0%R|2w7lsg&>F|ArJFO1ZlKEA)eU{;$vv>iNIs2b&*k(V|6*7W)2A;_CkI89(SE z>jyQso53RA470m!a$nruESx{!<(&5S;bibIIYac~iiSy601?>=lyLHc{zz94Cqu_n z5XK#T)fJ*sLf(G~s%>J*Ek82S9_Cj_I(!o{`m*eGJ-TyT|*!*Dg zgRk;~ZhzlT{ou3v1Ev1>{3`kf!|X6_A0LK|C%3ceo)>2NqlY;#vuxA-l9c|7XN$1*U9$( z!%rtz=I>~8V1`TmSuQ77V4r~YWl@5R-SSbx;nQ4Bu)yC@1$}}nhe|FdsP6y742A3H)?7?Z)&GeJ zD*Hb%KW+b4l%S^nlM~!${~)_RP)tztchdgAdy3yn`xhiA`8#QU;CG6Dm-a8Ipy2PM z{ekxsznAteNKo1T$q6d^zoG*P%hyVZp literal 0 HcmV?d00001 From 02b9ae8f7a4626c985f02cf553a0c33614b53e9d Mon Sep 17 00:00:00 2001 From: forest2001 Date: Wed, 28 Jun 2023 19:05:05 +0100 Subject: [PATCH 009/188] Code quality --- code/game/machinery/ARES/ARES_procs.dm | 36 ++++++++++++++----- .../game/machinery/ARES/ARES_step_triggers.dm | 14 ++------ code/modules/admin/tabs/event_tab.dm | 7 +--- tgui/packages/tgui/interfaces/WorkingJoe.js | 6 ++-- 4 files changed, 34 insertions(+), 29 deletions(-) diff --git a/code/game/machinery/ARES/ARES_procs.dm b/code/game/machinery/ARES/ARES_procs.dm index 79c49818595c..5e8406ea8e6f 100644 --- a/code/game/machinery/ARES/ARES_procs.dm +++ b/code/game/machinery/ARES/ARES_procs.dm @@ -61,6 +61,14 @@ GLOBAL_DATUM_INIT(ares_link, /datum/ares_link, new) interface.records_security.Add(new /datum/ares_record/security(title, details)) // ------ End ARES Logging Procs ------ // +/proc/ares_apollo_talk(broadcast_message) + var/datum/language/apollo/apollo = GLOB.all_languages[LANGUAGE_APOLLO] + for(var/mob/living/silicon/decoy/ship_ai/ai in ai_mob_list) + apollo.broadcast(ai, broadcast_message) + for(var/mob/listener in (GLOB.human_mob_list + GLOB.dead_mob_list)) + if(listener.hear_apollo())//Only plays sound to mobs and not observers, to reduce spam. + playsound_client(listener.client, sound('sound/misc/interference.ogg'), listener, vol = 45) + // ------ ARES Interface Procs ------ // /obj/structure/machinery/computer/proc/get_ares_access(obj/item/card/id/card) if(ACCESS_ARES_DEBUG in card.access) @@ -577,7 +585,8 @@ GLOBAL_DATUM_INIT(ares_link, /datum/ares_link, new) set name = "Eject ID Card" set src in oview(1) - if(!usr || usr.stat || usr.lying) return + if(!usr || usr.stat || usr.lying) + return FALSE if(authenticator_id) authenticator_id.loc = get_turf(src) @@ -604,9 +613,12 @@ GLOBAL_DATUM_INIT(ares_link, /datum/ares_link, new) /obj/structure/machinery/computer/working_joe/attackby(obj/object, mob/user) if(istype(object, /obj/item/card/id)) + if(!ticket_console) + to_chat(user, SPAN_WARNING("This console doesn't have an ID port!")) + return FALSE if(!operable()) to_chat(user, SPAN_NOTICE("You try to insert [object] but [src] remains silent.")) - return + return FALSE var/obj/item/card/id/idcard = object if((ACCESS_MARINE_AI in idcard.access) || (ACCESS_ARES_DEBUG in idcard.access)) if(!authenticator_id) @@ -620,7 +632,7 @@ GLOBAL_DATUM_INIT(ares_link, /datum/ares_link, new) target_id = object else to_chat(user, "Both slots are full already. Remove a card first.") - return + return FALSE else if(!target_id) if(user.drop_held_item()) @@ -628,7 +640,7 @@ GLOBAL_DATUM_INIT(ares_link, /datum/ares_link, new) target_id = object else to_chat(user, "Both slots are full already. Remove a card first.") - return + return FALSE else ..() @@ -758,7 +770,7 @@ GLOBAL_DATUM_INIT(ares_link, /datum/ares_link, new) authentication = get_ares_access(idcard) last_login = idcard.registered_name else - to_chat(usr, SPAN_WARNING("You require an ID card to access this terminal!")) + to_chat(operator, SPAN_WARNING("You require an ID card to access this terminal!")) playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) return FALSE if(authentication) @@ -796,17 +808,25 @@ GLOBAL_DATUM_INIT(ares_link, /datum/ares_link, new) current_menu = "maint_claim" if("new_report") - var/name = tgui_input_text(usr, "What is the type of maintenance item you wish to report?\n\nExample:\n 'Broken light in Aft Hallway.'", "Ticket Name", encode = FALSE) + var/name = tgui_input_text(operator, "What is the type of maintenance item you wish to report?\n\nExample:\n 'Broken light in Aft Hallway.'", "Ticket Name", encode = FALSE) if(!name) return FALSE - var/details = tgui_input_text(usr, "What are the details for this report?", "Ticket Details", encode = FALSE) + var/details = tgui_input_text(operator, "What are the details for this report?", "Ticket Details", encode = FALSE) if(!details) return FALSE - var/confirm = tgui_alert(usr, "Please confirm the submission of your maintenance report. \n\n [name] \n\n [details] \n\n Is this correct?", "Confirmation", list("Yes", "No")) + var/priority = FALSE + if(authentication >= APOLLO_ACCESS_REPORTER) + var/is_priority = tgui_alert(operator, "Is this a priority report?", "Priority designation", list("Yes", "No")) + if(is_priority == "Yes") + priority = TRUE + + var/confirm = tgui_alert(operator, "Please confirm the submission of your maintenance report. \n\n '[name]' \n\n '[details]' \n\n Is this correct?", "Confirmation", list("Yes", "No")) if(confirm == "Yes") if(link) var/datum/ares_ticket/maintenance/maint_ticket = new(last_login, name, details) link.tickets_maintenance += maint_ticket + if(priority) + ares_apollo_talk("Priority Maintenance Report: '[name]', '[details]'.") log_game("ARES: Maintenance Ticket created by [key_name(operator)] as [last_login] with Header '[name]' and Details of '[details]'.") return TRUE return FALSE diff --git a/code/game/machinery/ARES/ARES_step_triggers.dm b/code/game/machinery/ARES/ARES_step_triggers.dm index 1562f1badaab..a50aa40abd90 100644 --- a/code/game/machinery/ARES/ARES_step_triggers.dm +++ b/code/game/machinery/ARES/ARES_step_triggers.dm @@ -74,12 +74,7 @@ return FALSE to_chat(passer, SPAN_BOLDWARNING("You hear a soft beeping sound as you cross the threshold.")) - var/datum/language/apollo/apollo = GLOB.all_languages[LANGUAGE_APOLLO] - for(var/mob/living/silicon/decoy/ship_ai/ai in ai_mob_list) - apollo.broadcast(ai, broadcast_message) - for(var/mob/listener as anything in (GLOB.human_mob_list + GLOB.dead_mob_list)) - if(listener.hear_apollo())//Only plays sound to mobs and not observers, to reduce spam. - playsound_client(listener.client, sound('sound/misc/interference.ogg'), listener, vol = 45) + ares_apollo_talk(broadcast_message) COOLDOWN_START(src, sensor_cooldown, cooldown_duration) if(alert_id && link) for(var/obj/effect/step_trigger/ares_alert/sensor in link.linked_alerts) @@ -166,12 +161,7 @@ return FALSE to_chat(passer, SPAN_BOLDWARNING("You hear a harsh buzzing sound as you cross the threshold!")) - var/datum/language/apollo/apollo = GLOB.all_languages[LANGUAGE_APOLLO] - for(var/mob/living/silicon/decoy/ship_ai/ai in ai_mob_list) - apollo.broadcast(ai, broadcast_message) - for(var/mob/listener in (GLOB.human_mob_list + GLOB.dead_mob_list)) - if(listener.hear_apollo())//Only plays sound to mobs and not observers, to reduce spam. - playsound_client(listener.client, sound('sound/misc/interference.ogg'), listener, vol = 45) + ares_apollo_talk(broadcast_message) if(idcard) idcard.access -= ACCESS_MARINE_AI_TEMP COOLDOWN_START(src, sensor_cooldown, COOLDOWN_ARES_ACCESS_CONTROL) diff --git a/code/modules/admin/tabs/event_tab.dm b/code/modules/admin/tabs/event_tab.dm index 20d98776c5ab..f1b35e56ef86 100644 --- a/code/modules/admin/tabs/event_tab.dm +++ b/code/modules/admin/tabs/event_tab.dm @@ -561,12 +561,7 @@ to_chat(usr, SPAN_WARNING("[MAIN_AI_SYSTEM] is not responding. It may be offline or destroyed.")) return FALSE - var/datum/language/apollo/apollo = GLOB.all_languages[LANGUAGE_APOLLO] - for(var/mob/living/silicon/decoy/ship_ai/AI in ai_mob_list) - apollo.broadcast(AI, input) - for(var/mob/listener as anything in (GLOB.human_mob_list + GLOB.dead_mob_list)) - if(listener.hear_apollo())//Only plays sound to mobs and not observers, to reduce spam. - playsound_client(listener.client, sound('sound/misc/interference.ogg'), listener, vol = 45) + ares_apollo_talk(input) message_admins("[key_name_admin(src)] has created an AI APOLLO report") log_admin("AI APOLLO report: [input]") diff --git a/tgui/packages/tgui/interfaces/WorkingJoe.js b/tgui/packages/tgui/interfaces/WorkingJoe.js index 492446a7a882..ef9150149519 100644 --- a/tgui/packages/tgui/interfaces/WorkingJoe.js +++ b/tgui/packages/tgui/interfaces/WorkingJoe.js @@ -149,8 +149,8 @@ const MainMenu = (props, context) => { )} + + ); +}; From a3a244f13d3da3c25e338c30e6fd0bb0947ca470 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Tue, 18 Jun 2024 19:13:30 +0100 Subject: [PATCH 137/188] stoopid forest again --- code/game/machinery/ARES/debug_pda.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/ARES/debug_pda.dm b/code/game/machinery/ARES/debug_pda.dm index c69bfa0deef7..7fc4319a1aaf 100644 --- a/code/game/machinery/ARES/debug_pda.dm +++ b/code/game/machinery/ARES/debug_pda.dm @@ -964,7 +964,7 @@ playsound(src, sound, 15, TRUE) /obj/item/device/ai_tech_pda/proc/check_security(mob/living/carbon/human/user) - if(user.real_name != logged_in) + if(logged_in && (user.real_name != logged_in)) playsound(src, 'sound/machines/lockdownalarm.ogg', 15, TRUE) audible_message(SPAN_ALERTWARNING("[src] blares a security alarm.")) From 42631cd3dc9b94b82dc0f0bfef50ae959e9e682a Mon Sep 17 00:00:00 2001 From: forest2001 Date: Sun, 23 Jun 2024 15:23:18 +0100 Subject: [PATCH 138/188] x --- code/__DEFINES/mode.dm | 2 +- code/__HELPERS/job.dm | 3 ++- code/game/jobs/job/special/uscm.dm | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/code/__DEFINES/mode.dm b/code/__DEFINES/mode.dm index a45259b12dc0..2c5c9261a164 100644 --- a/code/__DEFINES/mode.dm +++ b/code/__DEFINES/mode.dm @@ -154,7 +154,7 @@ GLOBAL_LIST_INIT(ROLES_UNASSIGNED, list(JOB_SQUAD_MARINE)) JOB_SQUAD_LEADER, JOB_SQUAD_TEAM_LEADER, JOB_SQUAD_SPECIALIST, JOB_SQUAD_SMARTGUN, JOB_SQUAD_MEDIC, JOB_SQUAD_ENGI, JOB_SQUAD_MARINE #define BLURB_USCM_FLIGHT JOB_CAS_PILOT, JOB_DROPSHIP_PILOT, JOB_DROPSHIP_CREW_CHIEF #define BLURB_USCM_MP JOB_CHIEF_POLICE, JOB_WARDEN, JOB_POLICE -#define BLURB_USCM_ENGI JOB_CHIEF_ENGINEER, JOB_ORDNANCE_TECH, JOB_MAINT_TECH, JOB_WO_CHIEF_ENGINEER, JOB_WO_ORDNANCE_TECH, JOB_TANK_CREW, JOB_WO_PILOT +#define BLURB_USCM_ENGI JOB_CHIEF_ENGINEER, JOB_ORDNANCE_TECH, JOB_MAINT_TECH, JOB_WO_CHIEF_ENGINEER, JOB_WO_ORDNANCE_TECH, JOB_TANK_CREW, JOB_WO_PILOT, JOB_AI_TECH #define BLURB_USCM_MEDICAL JOB_CMO, JOB_RESEARCHER, JOB_DOCTOR, JOB_NURSE, JOB_WO_CMO, JOB_WO_RESEARCHER, JOB_WO_DOCTOR #define BLURB_USCM_REQ JOB_CHIEF_REQUISITION, JOB_CARGO_TECH, JOB_WO_CHIEF_REQUISITION, JOB_WO_REQUISITION #define BLURB_USCM_WY JOB_CORPORATE_LIAISON diff --git a/code/__HELPERS/job.dm b/code/__HELPERS/job.dm index 51cc496feeae..4603516317c5 100644 --- a/code/__HELPERS/job.dm +++ b/code/__HELPERS/job.dm @@ -58,5 +58,6 @@ JOB_CHIEF_POLICE, JOB_WARDEN, JOB_SEA, - JOB_MARINE + JOB_MARINE, + JOB_AI_TECH ) diff --git a/code/game/jobs/job/special/uscm.dm b/code/game/jobs/job/special/uscm.dm index f3b97b7a52e4..c7b3f91da7b0 100644 --- a/code/game/jobs/job/special/uscm.dm +++ b/code/game/jobs/job/special/uscm.dm @@ -24,7 +24,7 @@ supervisors = "the acting commanding officer" total_positions = 1 spawn_positions = 1 - flags_startup_parameters = ROLE_WHITELISTED|ROLE_ADD_TO_DEFAULT + flags_startup_parameters = ROLE_WHITELISTED gear_preset = /datum/equipment_preset/uscm_event/ai_tech // job option From d7fa06ac9fc1b3741a90a62062ba8e55d4f1b237 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Sun, 23 Jun 2024 15:55:31 +0100 Subject: [PATCH 139/188] x --- code/modules/client/preferences.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index d83d4cb8607b..8cfaff989ffb 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -667,7 +667,7 @@ GLOBAL_LIST_INIT(bgstate_options, list( * * width - Screen' width. * * height - Screen's height. */ -/datum/preferences/proc/SetChoices(mob/user, limit = 21, list/splitJobs = list(JOB_CHIEF_REQUISITION, JOB_WO_CMO), width = 950, height = 750) +/datum/preferences/proc/SetChoices(mob/user, limit = 21, list/splitJobs = list(JOB_AI_TECH, JOB_WO_CMO), width = 950, height = 750) if(!GLOB.RoleAuthority) return @@ -787,7 +787,7 @@ GLOBAL_LIST_INIT(bgstate_options, list( * * width - Screen' width. * * height - Screen's height. */ -/datum/preferences/proc/set_job_slots(mob/user, limit = 21, list/splitJobs = list(JOB_CHIEF_REQUISITION, JOB_WO_CMO), width = 950, height = 750) +/datum/preferences/proc/set_job_slots(mob/user, limit = 21, list/splitJobs = list(JOB_AI_TECH, JOB_WO_CMO), width = 950, height = 750) if(!GLOB.RoleAuthority) return From e85c77916c67c4940585fc33c206dc89a43c8540 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Sat, 29 Jun 2024 21:45:37 +0100 Subject: [PATCH 140/188] x --- maps/map_files/USS_Almayer/USS_Almayer.dmm | 27 +++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index f5cb2912851d..d32f04c37608 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -17183,6 +17183,10 @@ icon_state = "S"; layer = 3.3 }, +/obj/item/device/radio/intercom{ + frequency = 1500; + name = "AI Core Intercom" + }, /turf/open/floor/almayer/aicore/glowing/no_build, /area/almayer/command/airoom) "ccs" = ( @@ -19976,6 +19980,17 @@ }, /turf/open/floor/plating, /area/almayer/maint/lower/constr) +"cKF" = ( +/obj/item/device/radio/intercom{ + frequency = 1500; + name = "AI Core Intercom"; + pixel_x = -32 + }, +/turf/open/floor/almayer{ + dir = 8; + icon_state = "silver" + }, +/area/almayer/hallways/upper/midship_hallway) "cKJ" = ( /obj/structure/machinery/light/small{ dir = 4 @@ -29498,6 +29513,11 @@ pixel_x = 8; pixel_y = -8 }, +/obj/item/device/radio/intercom{ + frequency = 1500; + name = "AI Core Intercom"; + pixel_x = 28 + }, /turf/open/floor/almayer/aicore/no_build, /area/almayer/command/airoom) "gbg" = ( @@ -49342,6 +49362,11 @@ pixel_x = 12; pixel_y = 6 }, +/obj/item/device/radio/intercom{ + frequency = 1500; + name = "AI Core Intercom"; + pixel_y = 32 + }, /turf/open/floor/almayer/aicore/no_build{ icon_state = "w_ai_floor1" }, @@ -121193,7 +121218,7 @@ rpV cGO cGO cGO -cGO +cKF cGO kaO cGO From b6dcb88a0142a34184ecbc90dbce82e822a43107 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Sat, 29 Jun 2024 21:48:25 +0100 Subject: [PATCH 141/188] x --- maps/map_files/USS_Almayer/USS_Almayer.dmm | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index d32f04c37608..2d7bbd7aded8 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -49367,6 +49367,12 @@ name = "AI Core Intercom"; pixel_y = 32 }, +/obj/item/device/radio/intercom{ + freerange = 1; + name = "General Listening Channel"; + pixel_y = 32; + pixel_x = 14 + }, /turf/open/floor/almayer/aicore/no_build{ icon_state = "w_ai_floor1" }, @@ -54405,6 +54411,11 @@ pixel_y = 6 }, /obj/item/tool/pen, +/obj/item/device/radio/intercom{ + freerange = 1; + name = "General Listening Channel"; + pixel_x = 28 + }, /turf/open/floor/almayer/aicore/no_build, /area/almayer/command/airoom) "ouw" = ( From c086c5a46ccc5f28b80bf4dd0633c7a1ddd61e28 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Sat, 29 Jun 2024 22:33:17 +0100 Subject: [PATCH 142/188] belt icons --- icons/obj/items/clothing/belts.dmi | Bin 72464 -> 72283 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/items/clothing/belts.dmi b/icons/obj/items/clothing/belts.dmi index ecbc5fb84969c3cc60527f981d232ea9c635b1c1..6d4451d558ed885eff0683ec413c7db85a8a6029 100644 GIT binary patch delta 28579 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

Z z=l%!WUq^Op+tGOgSJ%Ee-DJ0he_o%g#@^HNVwIcqD_)YOo?)O$3fQ)Oy<3=~hfDdXw zcA5xdf-kp4)-xG@?AV#<7NfYscgmu^UHNfc zd$KP>#vDjXo1vX6R3FGwoZpXn1pp5it96n5u&(}8v6noCb}YgQuw<}xP%%eaCN!-3%vK<1a4$>Angl4fvQm`AH0}CmI!zU2VfI2ABaR5xKqF{a#u3 z`Z^9>ka?Hi2H#b&HOK8&LVo?-+WPLCxb!-pzr*Qrsaum%`8>&*!PDOAU~3I%_L62z zOiIez4sEySdw;m*s9E-FRH@I3FV<1B4J45zeP*WllDsbV0xrpMMlUI|opj!GJkxow zonf-#J6cX#)9eEJXjJi)B?>$~xCnwrtl77Btyqp!E5 z-?skLW-NU7c)6bz9=I@U^wH`WeUJTsoK1d&z3bw}UtcN`%Gb|;IRE;t9M?J-OH0?& z%gr8_<;C5t8G#dQ#x5!wG*Defh>Guz88C?N-^p&>y7jlkFhQ;gobEw_+z-FJtXfoB zNOnqomy*|vP{!4v*x6)_r@w%NxP%Qev0XAWosW@JaY->aiAy2R)v~XB&r0l*!~R+7 zHzSNuSC3uP2nxWhB>bDNc;YlwxYH%vF#~6tc^L^vZvG(6(6Ag)K^wtJmW?F9-XrN1 zS6BWb2PrC?y0Y#49DRG^b>nA+N#MJ>=a_&h!D~%1k;cq)WyHB;nlYG=^ zFT#Ll49$45&3$9ICgC4V!pF%2b^CSY#Vy9hI@cq*Srup4?72`)l0r}oD7mX(@oBBex zZUdLyvFX-#2LV^|{hyqJK>UF<0b~$s-7js^8vql3t8O;0D)(-Q`(p0f=aW+oNJT8( z5|XCkikSW6+-etVaPOl*|3x)XHMk_$bD)W<6j@+hiz1-vvo9rjy#8~0ChtEI3X9+3Wd#~#)F@=LKk zdcf}^Iz9QP&d#P{Y0L0Z4zRbUSZ_6GvoCsjnf+O0r}D!b*5`ilQhKo#6w`ADz;jzw z<7(R2aCrazeK)dX1m!kk2ji+|O!1pGW*Kt249^gTKh$LuPp%(L5A5gCdd?_k-bC7T z=q(xD!*QvaD?4nP&$!?Ja!%x8dj>%icb*_Jh*fNTI=VA5gNihT<@P877!K$eBZBd5 z!7E_|c07Oy?r9A_dZlt%O3VSkPaLbY06;eACp*MGS_Tq!SZsT(q(Q4B{Epr_?Mho0 z-il}s=V*fb-|!bzL{#)*fy5LnU4yf}%mL!5a?77ZKtv~Sbij3=lOYEC@RAGiHHrO* zv9zdy6OyvhV!9>jf3~secKKljn-_G@;=A0#VI%$cGy9mx##xuo;!U6$kC2mga$0Dy+Q>jDXIHhed(2|VH&J0*(#iL{O}`iN z5_g7ItD#DD`fU&53pW?)l;5wg!OSMSp|1aJc~EvP*R z0AWv~`X^Y<>+2a>JSz{x7rl_AFRHftC?G)WRpuUWb_v!OQb#|q@UUSAYgw%iR^1HZ% zq`UR|-v=kpUWz*u7w`X0yRFDROOlqSO_fK8Yle0`+3rbeUR>2c)O_AA)MS}|^rY;2 zv67PKHoRPF3@uA>RS*$@rXUsq9=a}cZp$6g{L?_Ws(8cYz0 z?`9m_p~_S&9^J6{V=uC1k6L8#&rQ{-ivj;u0mKP7aOWlm$0_EcT^cxVnt$`=HCRtb zl5KazGfknrM}RDRJENqQfe-nZBA=RV(CF}i1oA47B!?8w?2w#2>0N*|L^xC?Ofi>= z@TZFRD+U!njEqXG+448da7aL9wm}-++|`w7`_P}_Y);5Lew+<{DOZ9@2eAfCW#6~thw6wrTIfdaxxutz#T66IgKj|G~9~A%X;1zGGcu1 zylOAphWY&K=r7T)J7h~dnM$f0bkS=0Miz3ZEkG4ZFguCVoGU&Q!3H4{Yc03C*>;my zL^L0;ICMWIFulkrxP9xEb)AP`VBeoFGhKEBT2y%u2D#TG!!@qKg&s47#15O|)oO^u zv-TF*hm(_1=3|_A_T1f38qB3bU72}0p6n#}rUo_i(`dBgsg(3wz)D)+0~$CwwzkH} z6@chWr7--md*Y*+w=+MI!+r5(@h%;7I7()?Fq`Nz3UD5XyxT`)s?PoV`SXw1bS%C9 zFIQ@@Cg>@X^aGFy_&0=%{r)!`mN98~!@%nFIi@%pDm^K}qI}GzRK{c8@S}7%wo@Rb zyFqV*_S3q$>*5ve7T3_{iSbkslOF&~DZb|9kb#r`Dc4$&T2ODp9{t4rtAT{acG0Z` z1H<2e&9|x{LJN~TnIF^MING&EMH(8>bikQ+}E2pZY_Gc99wRHtHHvQ-gzzkZ()fQ7ORm;{8`C z4Du4^`cz=KL=FQ^OI}3JqSwj@+*W0R*UFZL<}UW6z^zFKwa`QWu%{g;NrkUEo_i~y z$auBcz|nOD_M3Uu<|KEu!GK=^zMlW~&K5Xzk)84DWA97Gc-T{j@Or%N(=NE|eSXsc z@<&+S)SlBpq{Xm&gaiN{*r2so@V%j06o>j*7R#V@$2fE@B zLC=rJbdj^m9*r*LkJh+u?XE;;bQ zJ2La^1>pUo;gONM4YO}Rm2N>4J4P}`KS;iR4|C5r6o|2}bgbq-=y4>lB>J56dcX!5!xA$w zp*Os}&rVO$y(s&QP=o61DG}A8%d^Tf+dn@)uK&Fne+J)iHFdi^6zrI$e$)(lVg<1o zqA$%TZPo-V_X;~BL+%<{+6esQFKtJyrJSFQ{fQlY?ak&>_T@0T)h^dM5gK=OAQBI^ zodf*t`}xb-c)_Gbtzq2#Tg$fB<8?P;s!Yu{D6&$~PU;AP5h)EInAo=vl*3z|=ZzBe$A`@MFzDxhM4 zPIu-ROxd!o%8!&nQlXV8@aJu|3qJ^hf#l>CkaEJJo-8elKhi-4j+D|qVP$Ga_lxF! z5HH>ieiwH6$3wUI~aZHy@CQ38<{Ea zv5)`6HCQWhYh%(jjU_U3qn%k=4#&L8kK0Tj3cjA*jXZp?-Oal2SCnt1fMnSxM0LGkUxym;dithC|RWi6-!H>(u?mPzNT zs>5p0qJ&%WRN$FnKr~3PB?<#gw=V^2AZS~Y%zwqa07(K6U9kWU*|}ccOOpj&m$@j! z*`8RPDGYBPy(7QmJLl@`7QLFb@&tcG?7=G_>Bj@|7QsF_B42#m-rdqMn2?=Zlf2Bg zuYyJrL(Gnk@#)hq+LDzld>qQhxqJ7lk2P-GcVrM;_RqiXr?n4lUkFQV9=aLhN8Z=MLip zOX*238Ls6X9(7sJ%HPcnYqE2JJ(X!15|(#vrd&o`5RbvP)zTldO}H;wNItffUe-j5 z4{)VWoRLE6*V4m>F@Dl>5Q6o*7bVqHXHdOk=b8_n$3>kk&I*r!JL}qnxzWkbF%BqM z>PZ8U#tN5v1YTskJv`4rmw;9aD4_L-mM8pr#16l56@wT&BK^o7acv6n7pMm-?TRvL=a%OD@aYVBJ zjRdBh6qOPhqSe_!_nG~q#*BvgrgKQ*`* z_*6W$S=;=%vpE!MI8aHoMcQo>ob+QniU@#pg3PTXr5CX+45*2QVVQoh23{Z3utc4{FX-BhE$FqNGV&=1jV_q$Qs4tS`SM!#Zb9+>lSXSZ z`k&NYB0bK@#O2o1$Z#kFS3$-_^xqD^VKj?aywdmg)Pa-{2?+S7s;H&#Lt%P(-BO%@0-QC^Yb%y78-|w97 zkMsL+Gs7^m@4eSvbzN)CY#HLu3dEmpz)IIo8ustM*%{iJTHBjiSptA_VrGJ<)hrLb z&tP{E&P+yvuOWRXtSi%`WGhW@??B%Q@m%`D4+-VeoIm?Ti{j?N5z*@c7rz1a6YlUo z?^VWb_eNuc8$AYvz+2bb0&U${F1MZ&;fYFa=JFHOizo~3O77^w-k!#XQMYXe@FJ?- z&B-mpY|>b9`hLH^StdjGu>sYuqH^H-ix(H-i`#0ZlTw+PzYB*#!*xforHU8zvo=blttQzqnQVT3C8R&~Cc`Ho$fzB?7Xhjp1&E?dwtHYnrmFlu zxD?HdSoU#VUdrU=NzA!m1lBG*zT%rTTY9?LGo9L;s%VFgSQdFYb-dx#xdn&(yQSHC z567)W_pkam8lR~JR-@;2&@rIQAc>*ZZdgseN!+t0G36Xz#UpnNi=$0`&l;H%^@i?M z;0nzvqvx_RVrVh}32kfDt#&@3nX@}0fwem#mbtq%o7{QGadSWGsotu0l@L0Ehs+K`n-f28MQs*7eeZoM~^Px8lj>+ z`;)cp&@C{x5VoYZk{vN8$M$Y`4rx6uVa3$15N}EA;m>>86Jy?rzXnM#(Zb`vYcnH} zN)4kze6G}-^HTHXJe@y!Ka{ac!fo|lJ1i)Wtq^7WuFVwk{Ft*(et-e{2IJK`WKi=W zf?*+I9ic@o!4raI*I)1v$gc0-G*=M#{hCy*@Li6q zNm9P-n;FXY?cdd+RZgh!%2>WSrd7k4szr~8(Pc7g4cmAG&la?OS6lh*YU!!gCR4B1 z?bqiPVc8fpQXDnnTL`?GrTs3y*i~`&xOpU@n|SUtg>RRKaylrtorz!97;4{;?`B16t#y{+T@vGJA(jn?u24Y1 zMD)u=`AY*eX#rXD zmEXyH5_`Tv{mSvb3g;2)?^dkng^8?2MHeY=#eT()S~~lZNQw`h^M>nnncg9l7|Ka| z^ZS$^NJ4LV()JT-7&$#OmS^DKd|?yKwp-&`2vjhhUzyKQXLFXTJJ*(GsyyB|itM#` z0D9hQ-7VX@MuzOXUo_35KADHN{~WlZqd{e(>$$;eHn2e-lbRVKRUwMpH)^o3W3k%~w!z`MYY zd)z2X8MS22Joj(j4|X3Cb&f=PzGG5xK52WsZ4;3!Gjb}8O8bfijrF_A56y4Xo0ziQ zQ|0u_gi*&E)7fas9{9!B&eR z{pNWrVuI{(&L{Zjm5;dLLC5+7`?GDu6drg+(jIVlf#q0_ z%+)~D(r&i?=YWQD<$k(<_=Bu5Lor)}779uPML>=f{nP ziQB#2%fabQD_yHc1RX^hc2fjHuEo+TWa&K6E<8NF?()(2*PQropPxQ+2+h{vdOw59 z-YeC?{o=<}2>Br>%b5K)`(n&MGryei!OYD({I4qh@pC1S>bFGi#e%gESP@Y#edeTp zzv;F7_d)FE^?ivzgmJPy)9$TF2-GekzIouo9pUKJ135}wwS$fj;sAtXf zEZ=AFEhoy}%}tf89#=lPp#v=LZEqPqpZs}4wWY4Ee%za4HQz?@!SRCV?2sb-0lZ&T z*4FkNQJED;?X#!OZlhw)l?W1F;*7g?b9N;k8D$@81OS6_W%5dQWpWhH$*2#)^wh+F(!WN0>;*wA&wl)WU8#vT z01m9*hq2N5xuQI||I<;^kwJYEX%!yU)+{Hdg!+3^$MFJ>sSA7pH90tj zonf6B!OyP0*?g5_vi*4by0nqJIv4gUVTRDxx0m-K+efJNE1PK1BuK@6>Ig}K`TF`J zsYp6XUjRk`YKwOLjHj|w>e^N%5zg@a8?n`veRd|a z;NHHMa1~vIL-wnqbb$?10noL%p~0oc&AtFQ`KE1_#ah3-i|ZPW5bW$H z2hcQ2deP;2j{u644~NL0DOV|JBLLDAY%d?L?ydJ08Zdha*KM!|Vb7m*ZF}eg!M%8A znBiW)GGI=_B1D5+y=qr{5Nse&@)eC6cEj-b9BwHi!b-X95U25BaNYN+c{iUGQU!%T z>8P2T&Tz8!;h<;kWBKwg?nQVWPfn=rZjNv>fT`EuS6eA~+OHSw4W%)xuS%JLrA%D` zIN)j}GSuBiX&`55JYU`BoDTSa$E0m0_V{o-w0jQx5d_&heLgaMsZoNy5cxggE2l9s zz|(v3R?nk|%e~G44^o(4$;n>TcAK_gdH!|2_dkm(6F){#}oJ-1)XB{A4P==fseQSDtAZRRv$d>*(Zv0i!>YFhTl$n4c<}H zF=-jvA*pj{@}%u-Pb(5a)vWXg+8#BAE0$P=)Rj_Ib?@eU*THUcU_BO1PW~kTOkMQD zwRN_o=9a6f!J5?OHK0j95)*$-*na;G#7nR6F!o21qNf|0)*oKG)~$DavA!;KrRb+Z zW4$=tn^W7Ozxa8!Ecn*r5sL;Al=!I;!c+jvn3?ME7w=rwAlKFjWaV&8(3!NYz{+Vn zuN_Tip69u%;A1V~)PW$V)6@k#7sSy~D$SB#mQ&}qIrhV?Guak%aQB;+0N--9kb1_w zitG*u7t+G47mBySenn_T%340CyNg=%*nWLlRqs#7VpGtMdJ$aZNAa*>@wo_0t*xiX zKSAT1ckuOV)BMV;6&;gd4p6EKch$ryzx$#i2#?VpQ`#(h>-^)SoUJ^Ig0vZz%3x z?2BXPHA3v|4L=%hwoL+MLi?|h>PwQRb*`$P;@1n2h*T0s*tEs#3_ zxK62^Xi>8ULsEwV7<=W{G4-@9@N^bm&|KT(z#hIB+dK#im~SJd4xA5$=!qNu)V_fX z{lzdLi74k8+$_5Z3``(Gd^84=|?Nn!Xt z<0n5CNJj0ScRX@}a@?{z3jnr6BCG{=h`U7TYuAJXOq*=Cvw3=hI&7~BtZ<&=S?quP zaCxA-cALWQ#1xYxh}!EnK!bl2CW|1|8 z0Q{Tqq!xWruCB;Ez2Qq&B^m#u#EHZ#K%<7JJop!v58w9Lrfl906DandPV!OU!_s%o zA8-5s@P#SJ7~K|w^8S^ErL36`cIe;poJaY5vV|Eqr^8dGJ->z;8V8Y zx;G1U-49fHJ~*ZQ;^~#p>${YM-zvoVMk8$*d!4|i|29j3D9Ar66a`p7?2!khO%VC` z8DjarErsGEjAUW7-4qS>7S_9-@4Bm68MyKt5ZMtn2-@NRM|;7brc=!{|>@(-`yV#-f692%ZNGDZgwiqTQ(LInP@NK?#UZo1t>$R zaIHv%vl5iUC;*Q?bz{n?7i)yiOf2i#x}R>{q|Bw zC5$<^v1yrVJ;(&*$HPW{fy@y7;?TlxvSBJU3`CW zcf-xRy1eZIO=Z=tp$-l|p500=-uh9-NwIB?x0H4JAdviTZLeMPpI^@Br?9scCXz~r zyW|ufpx;xUXMd;*FZ#PlVqa`puGf`T6-QMtvrYDZ-AbO_2x50X{y699&!mgWPWQ1ABU= z@1C!$44asom?SOd^hEs13x6Nl9eflMV23HMz^PH515TU^`f^qwd0wg&om|JddzoGy zQVe1@!slor#YeIe1jI$L~1k%Tk_~W zu4VuL=>2^4*gO6Co%@N>k^s>9qA2W}^(R!7^Iuo12eObR{p%$JJd{3(-3S%CoEptT zE{&HKls{fu$dkk;2i_J^tN z)y9ocvrRrBl%MnSGvw{$_d`m)DyI1oivt{6xnf;MXGwDrxHS9L&VD>rz(e>dJ4I zzCH7;;Fr15f`uQPxKQrq`Wb@4RCe53+c+20{mkT_ zk<^FZ0^Nd8cErnTcs!bNhci8G2;PzW=pF#b85kv;HHZq->w>x9M82j7IcBl)yqQ{e zg-!uik~qk+i}fP*(}gC7d`3=@AHWt13NRgKdwV;U?b|b8$t|+MDrS(l)S}C8Is@fI zxyZqdu6U!5+P~(@_~ke%76ogMWd{bev_hc2j@9D@z0=x$*T6G!@DY&bx^$>Ge8`20sY(Tc%QDWu$4ZYrLElbA(AiLyiSH4Yqy`b z(0B1_8nFeg3;`R}>H`TP66%2UK|X?4GSg@%RJ@$=PZR4g<}YwLhs zhgXj$jVfaAPzzj%GF#FL9nyr%Sf@h+ajbKG@D7v_-D_?r!H6n9gL(1dg?j`o- zslIAz<|ZZ&wEU-)l~!c>lW#A&zn#8*Ehvc4{q9&$s9lgEdJCy9Ri_EjZ7ZCZoy6?@ z>ez(w950RLFV-n|RdB59S5OGtR!AF@L(LszWFY%mk$IgUg?v^3+l4& ztL86^{QYwN`(UUU;mIXZ+%2Ja%!7~$J}ro<1$UgbXA`4+y!K!MF10L;I5XW*%?3BE zio-yWNV^>ZT3o77rf_`C5s@ucMm@zLc~_D=abEvzJg?He;IuWCH3K#v z^=u5>Ln1|$3~_~{51;uTZIc8bZG)`aVAPn@Uf2AN2(s>hY+@2pd|@o_H022QJq$g& z@91V`--qXRVE7sJ{c6mXmh5ij2lV6IEyaBpa3Yq8wyJtxCXEf3$#_+=VvV-i8n@b1 zi)4L}gDT zjy(i8ECdb`AHH+0!2#FT!H^rE4KlO5G51yoEP2!_F&o#cfy~uo5p=Ww$RsuezO81b z>=+Hkw`=d$?Hu#XR=yu=ji$JG&#|6sU7MFj_f<~U6Jx6HClB_kl?u>)#iG3M5W9eI z4f0tnGQ7lf^iY6y{x;ygzB8WBV{an7K>_c1>X_2p+>8|(``qFW5zmAk+eRv$|BybLZy zAnetcpm&6><2)pwRj>*rwf-pu|P7J9Cj z@A;3fcn-ax&JnJ>{JK?Un(R&oS_+WetX<cvzUHp?2B=j)>h9b18YR}0+`VmGg@aN$Af`+26A@^G7uXlo0P4Vn8 z0y9#(H_0s<>9AvNdh2bK$QAB4>|!Bu0CrAl(Qn+3w|C`XGn0)v6qr!fn)0yb54h@J zSJnuL=7i2L!$qjW;rV3e+#?gbEpE0cE$v(y+J3KGoWU?|LzQ3Ciik_tk`!U4V zLbpT>en?((ucmdYUR>LdoC^MZhQ=!$QZ8ZYA5P@^AQP9DfbfG7^@p`olO*r~L;WXu zYF1yRi?szAnfWgw-Hnm)8lh$0C&*5gkSDe6cZ4X4<8$G>?7QjEA477~fWD7?jAo_{?r!}AutjSv#Wfkv<7gZmDkJ%%m0T0r=&Ka|Ks4EEm+iDTO?FY5z9{`s?pD}!0aj}7m+$IxRb13bST%vEbmmLKT( z&)8X+{Rd>FiB=eFxPnOHPWN=4mQ*c$-Fw&J`m3FXulTso!24a@H@7-IH!%Lbs+T00 zIsf^(52t?1`|`9ulW>Dl>Q5RNHi`x@5l{h(33^9K>)~_>EftmLYK2-Zy;1c9X{eN< zIB=a%@U6~iU^Owd6m6XHkd{>tU!bz%@eE0Qezr{tF%4isKd_gfQo1RO3~X(!JT0+= z2PEHQP+6ycH#zIIq$A?bcVo7?a~HFLi2xv8?ufZ-MKEkG(h6XduntQrKwvHBdsRSQ z4YGhvalrRd9Z_lN*o2n>32^?%M}gDTFM&U_nak=RO!1gBcpLlW8H-xo4g2`n#}-dQ zVFom?3nlod^C-LV?uFCAm5l^Qp2OH+?5a(#R7WjEb6}iN-A1o1}+cqE_v<7uj^|c1yOKB#^TI_O)F|iK&;k{ zfzd!>_aeG^*kK&Iv8^)hD;7;Y>Xggb+0zs#ArHbH`{05KnBxiqCYGEhlErz2aF940 zA5qo;_nTgG^b@Ber z^;bW}v(VJJ8$gNYUS|NJs~R6nk0Xe0M^|RWKyv3d=&hC_}OM zZ_4kXsCW7uxVg${ia!G)#HZu$CLwr}CKvOt7Z7;!^^eumA?`#AHN!hy!D zVIRo){+S|FID%^V_h)G>bozj_qGD&dL~vE@VFT&-_z2lx8H$m$QwWK#S|r-2@l4_4 z--Ozt+imtuYcvo6Sx?jhF6MW{5A^Z{`AAv&)v{+ijDiSM{@ATu%dJW_cZeRh8J$%b zgp2`UVI6{zw1&$qzH>9>-@myL$#?Aqzq<_SjB@iVa@z0g6?Tiht=Iw5Gcs6RZm9n4 zV%G@bhRczJNYP++7`qKDO$OUmuO^i|4b&Eh_idax5%gf@rhJWx@Y*x@H`5c3Rbcv& z2WHJ&uy7My7&9I)wcM)D=kangjG~hZD7rtWj35i9y}?CT(PPsbvL5!tB;{H<1Rra^ z{%1$O85zL?1IdEHeSLC$@m#*8XF(#z7mWXQ*|QXqdKeS9&|Z^?rkekI#8%?FgFl;&~9D=iu<7@3%tT*$Dj{I#%&mS=@KHM9{8^SECA$L?A9i_nnw;vYf0=g3oq zZbpc3l=@8ohMa86w|a6yv+pH^CYTbB?rmvscjLN?qxTn5;WmVM`OZ|Rz}p4y87xXV zx}IUnh?14@lx>}d>HN8d(peWO)IAgyEJCIfNqckf^SSO_@%zhNiR!uPQOr7AMBt^R z2tqomUK5bW=O8;_*hS`mLJs!VBM3XgI3KF(aM(Q_39Q-xN*X5e{_^pv`vDswZb$h4 zSg}gHh|^76TwJjRL)XB7q@yEOvd4|7f-K(emxTVcG-2%>gF>BqQsf;ykCPUN(L=^s z=4_Pr$^Jtw>G+k{a-D}UOdA7Gh}MG)y;ze%@C{~$6jn2HOuzVaH~PPwQuoiC=Cjees5^fV3b?4cFj9t6 zEvA*;L<>;BICL%7M~(WrQS{jLGY*KnGZx94hj24k&zl9NLqE&6O8lY0YFdfA?EP}E zJ6SXdcTulMxH$-}YWU+!JYWHS;Y8HY1)8vlS7Meh)})DE2+YCjvBU0fI}OhQ^jRu& zMYGS@u*hbZbCYXNjrSjIJF}=bMVWIe*kfP0Z>6E|0(IAJcO?ghE7hCHtADt>($dmU zv7U)ZOQYUkkcU)UIJRw_^Vpocp;=#}JnnFOJf2cHfPu8C?LOZVC4o3J0p}X>6#T6$vv|_&Ho%4(m>M=E5;6|6=7h0bbrn@FUc>Uw( zf9PAA;SpaoaXcV(e8>mE|3W5D_#_!cx$Jwwhx=0FL3rTt9rfj6Ofa)k)X^@=CApZ9 z5e;Z0e8R%zVKf@`QMYS)r?jb%nT1ja3$VUzvQOmI^gmwh(0}wo0M>Hh3ybHFm$*`U zE0W2_+7p_&v64ERCM{bn>Me}cqy_~-8z1%$ReDx~i?C;47yF~y_ox1#C3Fj)jpiZF z^qE((YGEISRQubKr<(sW z>gy@e`T0nNc-@?3u&d7g&c6>6D>ISTXgU;Q8dG{b-i_YD8qD z=jizsnJ`h6HC&vG%~VEH^Izw4T2S>i_Qi3adK2yM2T!-neNgrbR?Dd+L=k_??+>8q zJQq(&Ln^s97@iwp$o%tBL)ChA-3ZEil;6N-R|tJS<$gjPQwJ;%?1k(KCq(59f6J*l z8$7C~)h>A1&%JnL>a+;sra*JQ6g1^u;o#tGwr-uu%$kl*v$wZT-Oc-pr_$OU9I<2i zqLSSUpOA2OXJ^M|qD}w6`!ctf@nFf#> zhYVS=(c@%?ds5Bte4@x+;udT9PYK>$DO9Vu1KEJBjMrDFOR3AP)T5Oe4CK2hf^G!s z>+8}lacFZrpy*W-QSWARY|lGooYdUJ+?&h1kreTKo}Ze!rqTT7%jI^7-O#tM0N`w$lJ@w(?Qj`f>yC`r#4(kOmfPakBeuC!8WLjNl7 z?)=rAp5H6DpFKY^DIB*b)&e>q;{mB+kxG*881=H#pWNde18nJ0DD8Geb% zQ^e_(v06{L`zn@bjQGouiTfKNGqcSMFWJ^S!*LRCMbmriAfe&={XuXe$Z5YNAkACf zym7^YmRNthSvC<=Q30Q4$;G8>mYYSdj1HA7dYNMPErm!@0hEl?NI=fBDMbNt)c80` zwavxs@E@To(iEQkR~RHhPYKZ`zgO|#qw`K@&=xILfOx9}!XlbCi~t{h?&JnITKlND zeL=yKI-`}?BCWXM$@3>O^A#KT)VQ2$+c$(F&{ zcRX|$$&Ft&D=hgb;IOkI;%?X0AP`nT@Du(oatuX5D99?Qw48FCRwxLsdiU%06!yNB2Ze8j!+8zuoHD@WlfMPnKqsArpLi&0 zsxu!CwT!In3V5sGVCCvsV{QQmzLG48;e@{u*#X)leBc3$-&kX@GY~<&HrmEB)1kNB zbV0H>Lr;LwFJe|_(H0#~!#?pzZ8|g1rVR6gou4{#aaEOux`swqQczClzgOC2@0+^XMtn7&Y^ht z%wmk*9^gR>P0e+4iERkijvrd%o$at*m6#{C&AtMTtE+HZ!>@D&5`lHF*#`0#**5&O-134IlXu)P|y zlKPF;DytbkNho})0+bS2%3m?Pj#6y({@{rcQ#IG2eKx#Hw^Ufjl=zpsYEg-%rl!Wa zMz)^f5xVqAl@~j=C-8_7Y%F(YF6?}>(v$|{fn5O)u&?k332zmtoTYBm%?6iTgbBJ`EG@Vls>(fTsggZkNq;epQiB51snUbvHdzvxK7ZMqr~5>!L7)V78@(Gy zjCy0x7o)k~vGEap`IC*=Nah;P8*Us@CQd3(v#tD47Wf71dTvrMUL1<{GyOrL%PPjA4l=BYNf0$FzVfkH2Jj$G~a+#Mn{%ETf z2uqTZK0SPh3Y6f^L;pvP?I3R)OXX!Zb+41*;J4JR75_NO2t>{Nm>T z@3Nh#{^^h??G3$p;TXgNn*r}WrGRG$2fdrF*$1G|rt*yH2a!1L$ea~wRva1;s;#95(7xfl0Oz%7m) zg_O&DD6xU0IE)BF?8{VErlzJiSiQFSy9gJ8HomKe?_NZIAdSj2X;TiUmaiwYZX&P= zu4SdXJslLx;DtdDr5qiiEFu(MILRpsj5-Uiqfq zfRY)wu&>Dx1c2;q>nw7MD7iP%W3hXi z{zj%P7E>ODM>D|lol@6b^_rILOIsOS(L0eL$T6!+q?EUR>;a(SGUXG`0HIQ-F2=R; znXW90*=Q?Z_)d;e*1>P8wl-E5w6st)qQL@Cp;nnsDR0|4X_u}74Iw`Eb=#CycvTh8 z+FFQ&!hlA*eC*7Pxg$<_*Ff<(3t8f?0O1E7T;{rl{(kb4);u38PM>-gUsL1{C})@b za6qi1`O>J?{wCuJd1s&2KaP@y3=55T_D{}Elz&#zGtpVOvwlR{(%@KuXYB0kzmk&v zI&)I$?V_e|xJB>moG*6;@f?29^abIr4r9zPP5-Qbu;zR_zG zVWOyC1@R9v4!ib{AImy`vbImuBu%fi_kUwO%tbSJiwp_h?Bkk496M7^B^H#>zvIJy zW;jM>$YQ9_VBl)*%6D9yhx@C)n>biqZDs}{%HGJ0rwJ-g@d-Fuk{=lIew>Mvi7p6Y%2A=#g{hUr&lBHSSGpD|K!6B-lSG-@9s(V}A3 zkxr|Aq!CvcpXu$<@sFzcVcAwu=0&+Qo_Sde8nMkjeSk9a|KT{65H4WV1_CQj^AtdZ1wag5?^s-I3#*c4IKw|TR z_VKxrt4?(eg1+KF6A#ezLx!rvQW1$jjwDd~n=!s1a^8U|woya7YLo20&^4!Rc~=5*|d!Ll@+tp*7;o=21A8O=juN%vHxHJfDm&9gOP+K7czCn z>Fy>;{E@9pb$0d^F1>9jT$6soz}dYZQ(6{1Ot-gDg3xDvJoK)n>ekNM+iPA9Q}`t_D2S z7rtOO$s-o)nIJC~W@dGVa7L>-ni{;cXdQ7E)i~PRsj;$Nj(OEK%(cSYOX{PGddt?P z8-XJ=dv!{k_qS+r7x%@tTk`&mgG$ohG#$fSMy13wk=?ZSQBn9F8op5O_JB-)RZa;# z&#-Rm!+W_bV9M1O=$akwYausxR5SZ z6|R=<5j`vau4deB{f#Kb?K*Ba>UU5z4t^TlLs zYzTiBUAGLz_;_?={a#Wsy}rI)N|j})=I(sCg0ON4Rr7GaHM{n4ky{`@*D*@xXXDS^ z7tec~fZWEfZF_E=hO6qgthWot?z19k(|AmTYs_mC_2j6*0wg9te!jQ$47NAoL(@CW zg&chQT|z#+IM<-pn1FTWB(jVmbHw}vxHz{dx2W;3Sgu|SN0JND{<}aZ~i_+;GTyf zo8OrUKW>M;7-Xo>By>aKt!q8hb(^)E&xNx;qa@4@w7Ec7>J3-Y_-PTpLa#l!KjO1H zaDivldUB%HIH1>-0b(m|jP77aV#q2ih3YPPIl%)RXwVI%x6+w|HwPFwM8?Qtg!eyj zW;Gp+jkC4mt>>pbS}erG#joq?#<}CQ>##ru0 zq1{^cRD(ofCEYUwuYFF!T6x(>i+RhONR$`=P^tWD3)b|Agfd43}xI+ep0JufZ7vJ{VG*c#SB|sKV(RSOMd=LEE!JTpMYzun%XddaV1`) zv+zhD4d!l3L*@c`CNUTc7JkA_5^C8Cj{6w^P1;nYFV&j)J{aG^Em47rjB(*$!41*V zkukw(>8omzc6q+F3v}z<@xiuEbY|oGU5mkQ6FS31sHr^gl$?+=+RL-LmDrtE+YG8C zj!IloZW|&7@AcTB@@UPiG&Po5Vhb2uxa)i;Y%a`j*zg#abo_O;E0hQR9jCIgvg3Fq zMEP1`raC7;d{6jmzk#>(^aw*1@4tWl4n?M+>FK~j#YEI5M|Sj3+F41uR>lR%ME}ZwS+lpC$ zW9Rw+kgp9stdQ3Y_~GDYm)?unU`}*N7v+1l*L?f-Eg*D1SthIc^Nm-VHZer6K9I-o zBV-v}@3yuMjhRUvF3hW$XgU5C&!ADTGUHrzHAdn4Yffx=R239qF1ksW_g)zGXgC?(tiAq5&~2xR zxzo*+{G4Dc*h+lLfMZ#9(m_c6rRrA*CHdT5|6qyOdJBKu^MM%-NCuaYvT>z#%Za0- z=hI#qebp+@KmAIoh=zu?Jd5K9v8|=0k&1XyFFwaZUfH98GUN?kkjOu}t>~iq4G#G2 ze2`1rWJ%*i{BqrCKpyR^Gr}(CXG612w2!2I+qaae6x~u5L=5s(n6rcGQO*y=3Pddf zsJd!8_EW=>iA>}jZx|W+^l1^DW7XU zr0JMdMJlD!Ge*5c@thTF+2>2vlH?hpK1`ip!c099#Y*jLz3<(hbu*`3@XNdoD%EM) z+#z8#IbxZ897y~xUb{~}cN7fU#eiC!|BKm}tJqTu?tD#ENR$8tH#n$Y!D!BDP!RAW zt93j!Exb7WJv5|LOWv83lmsOmFsUcC!y%FR9nKOO-N+(e7b<)M?75yk8-+-mt-}Na zfMtKGDZ6@RP_s=iEUxg_=+4yXcjF*s6?el{>q0oeqT>7uN@j z@*Z7TA5isY3*85GvbV11JKrW7G{O`p8@8bQDml3^>PqDyVh26XbC;Qzj461Vlzhyv zia3{+6L+_k!?Vx>Sa~g`?AoSw{yGuR?x6tGp%~Is%}#suEfaEfp57=Hf-?ss?*{Q% z3NdonVec?==+o2Fiw!54JU*K~oqe0-0>BeYi=`emcKuX-t8d1 zc0bDVBI!^J(CRoe8dh(;LQ^)B%l8~nZ@xl`Xc!wz>G=?&?9zQ||7w>DR;c;&5@g|a zSfd0kATgL(tE;XgZ(Rj5KiOL2X3?kX%Ca&ZbKwn!`ClH7Q5a8m6-0VFPZN@X#}bQ+ zt0$Lt(R7c!6HK*S&IcpyH>aC}n;jU9WWZjYXK2>J7nbFJ%zO{8C!9bN#Q;W`RY4CFtbNj zz&oJUp0&lyR{uq@_124H7KVncD{l>5brqErd&Ar;(D1~e%q=%d{M3O-@bB&iPO|u- zjQQ`{y8E|^yEh9he6N9u+$CUA@Mm-~QroyzldNe^Zjs}4X&9==rTL3OzYof;1UTw; zaP*n)vKwaBbs;*m>E&k+{$)~r4!xU0JgDtS44WA?N%Ox2d(=?T$mLT!uzp;~QxnY?FNI!koBuy8Qa(pK9V>Sv!6%b>>~t{pCCKsUNtp_p1%I8Y;-i6E8)UYJm|Hk-<9QI0Zjj|Pe)U-v z!+gxehp?6NX$%QPdv**L2fZW4mnTxX@EWPm`T#;*iS0PED@zZtvs_U)Gk#v01KLd&&D2=FKWeuUI3v6!$j7KG9l zD5*#h5MXV#jaPejcHd3K%p5+td#-TF9w#?dW*Yec2A*{F_S(7a9h}{ZK7;yMNF7k~@8ihUc>CD+;<^f4B8==_8)AQhp2bh@cKkB`5UR*R`ix9c49CQP@8 zwcPM9lfXlem#6I;U+t6z3XXRs0wlu!HZp@Y?w@2$xO{q_I5JtOG#^O?O!<wJ8C zz!}5i(9jS$^X|Y2PC{zthZx%y5$}wpRz=-Vg}kb@Vt1iw6&Xjae9RSsj(R2{I;FHKt#L z2RP=54tymDz`7Mqz;oE-y?xngg(p1-;YQByLB;=zcAs6gMdw#2(*FOUUFT8Msn^;n zr#qXsi4TKM87lP{{;rfS(g&3XB zOid|wSDlI0^9cg6g%kN{pWEm_0fCng_rb_G(986;>tbbc!l;&9O`-`R`Sde zS)+}PjqN$3Bp#DyZKCC^cJ{tMEytJ<%l~!L)^!Hc(~eoxo8#^tp>8sV89=#8dkk1a zdYdrYXJTm~dK79LQtNQ>ngAC!%%{pZ{0#5ujT7*vr4PEqYtLa<&BLiIwbFSu!~Yl8 zaq@rAeL^6^!vW!eEfKtjz=^!T`U_IMnKN2K4x7ZOpaNT$=VnpkM8^-^ zX5ptALY8lJg!L9f#7xS_;;bOcQr2%)IK3bQ&of$n2=<6eJ3I48hLZR~=(go6TeJ4L z1$05h^3(X;rJ@Hsa0PZ}5G;-}Sq`kAGO^ znwg#FJkN9HzR!Kmp=iR|!&3Tur?Mr^(nWDiR`d4}Vx+Gp}ccsi|62*i|B1b*P4F_4f zqRU}%vHSn^;GLKd{fk&K$A=C+V}SK6ikR=w>w7q;JJvE$SzyyUvL!pKzE(d-`C|q6XyxrR6p~a(?vW2}+pCvC25%)2B9fo?G5TyH=fd>Z`p4%ytA8 zo|w@Kx6oYQ6#N?^c2}l<3G`k*%rz7%@$vpLHcRAeEL?0P-M~OxS}+mKdl((@AF8VN zhF{m=3<6`q#tp2Iy2WRh5H0x!6o8kJj9gzgqZz&a|7D)ur!rz+$d34|OJBDHuJTcC z%3fW0!E!Ix+tdR8pBqkD30KsDLGxg-W(|b|oWL1q$u(hF#9WjieHuDsu680j$jQr_ zuP!bC1^?qpy}Z4%pyg@($?T+Pab{-Siv`jvPD(0h-L8>#U()%xAY^0Xg5Ax5G1(^6 z=H;5)y5J!fhgO|0weKzsh(^9PKbEF25^5pyzvwwWwZ}i5k=C>5Q5%TP+6kC7ixWy35qX1--)`>O}iYlXlP#MTDG|?`O5AYy2-V>hN~X z@-}hgE@5 zLrq*G#n^m&NgIiz*wBAcVIG2Nk^L_@ zit&#O7oQ37xf9XQ7%E*Y5-|7rqA{U)&f@uYy8A{(qAhS%8u5?Q>RLTULdRNBLU0xve z_J0NigMk;N>}Jo;&;)??Ctm>A9VJgcJ#*~V_?A0+Vf3mUc(+qEQ(^BJlY8UD#r@=Z zqVY8!l#{}%U{hN@DS+f3v0O&7x)1@Xd7%U@6Y)xQRt?~<%B;Gu>jiz5?=q)e9{!xX zy6p6Ilh(U zmEKw3x2dqvJzC34bp;%@?A<30?p?2TtZDtxs?Hovpi{5>PPXzYs;6~!*%)EiWCGTd zjaHN=a!?@JBHX_pc$*5LAZa9UFfMNxyaPQlgeBwtOwxQw_9~_GSgE)&h;W&~Ryo5X z&(Ml3LqN4m!IT$-Kei)660|I(fa21t(@(J1bp7$~KfL6lleGUo9p%O0U^_O<&XGMV zN%ufzW{t*C?{~~^ikyfpzfe_GReDc=#@yVz;j4}7k(oidMna_FX}{$~md#daxLS;0 zg+pnPlkR^Xj@GlA?9RSN4GYO%EiEnETOJY=$Wh0nb0sr~YoWi3=;}WXMTiAg=(4^1 z3(?VFS3aqhJr91e9QOzR_$UYw(x^hjbS7gb%yb{cplrw|6tR4}QrLWmi)EX@L-X2@Ck0ZWMWW z@RBI~(-$cT6RDa?{FKKAve&rGh~`xoEjVFp|5Lm(B7Wuc+V^{^&R*^fdl9n95Zar85-J@h-`d!01#qv`F!3_q6-7ZFV zUWwF(ADEl}QJj?zge$5J(g}L{G?ZRG&&o}m9El-a?|+~q|!8;PfSipJ1v4vC}-xXeoI$a+pDYlv@a7zMLzl; zOBoctNgkPcN?2N28lMhl3Qu64x>tbox;#Vk#roe{RE3%_#1m+muJ>xFfp4|+KybJE5qXJd4s>em=Il=}4lor95;`{Dm^qoS?`gyplo48Tu$yk0YaX6907!r~k1N@{UOnKSW)&&i??pm)$)OH6@RsUIH7(M8Wi8_8x#R zFK7D}`C4Hi0GL+0lu^T>H-aQDCqY5Mo&17=&hLeMwWhRd?Dt}ox1c)A{D#-`T7(Lh zW{NE|dC1S_SyuLl8e`J^$N<%aJj&is&fq@$H)gO3?annBbS^^9D!;i`K0aT_tq+A? zLc_1odiX%O+pTX33%a`0m;?knXRA<~Vc~wIuJZ__dA;u1rcSRV#?!oq^#dUUNFYYu zQ73oHSopY@Jc-pCe)5 z$0IDM<2?(t7phzvLQng-P|5Nr5)Oy^!uVxlQJ<%<NsF_rG21@4l`IY3>mkF>!6LaMJG`%9l@EFKgd`Qi%G&t8<%} zD-NJ~4+*!~=+JK(^?~noCvAMZI3e{JCB7-IaQ|w6P*r{*#p}g${$}{Phs+({ZA*to z&?>vKtP*_PpA>jTe`mVVi!p+XwG{`peM|s?Vd{J*U}aYqQT@K2hDK%o!S6jADcF$! z(e2w(2yY#&hw9jHCj)ed+d--%Rw;5$vo#kncTx~xOTCw{2LJq?U^Nc_R>~`O`%FXzx!5j)*)$E_8O&fc&K>1C_X`ruWOaXI+Iz3GaTR9VzgL)GoV7-zlEFMMLv)Sm8cxk;F|-6Cv!eyLeie?T|S5Z|L>V(2-kf z&3U)ExI7~%Sk;u3Lx&RW3gS!$5LBeUWkSB?=K7jlnRonqszwd*xZSrN9Y?50dx|N% zUCBjoFaXfhacGnaiYtg4?!X0=XMkfi`G}pjwIu5iq$0+$Vp3We&0;~{ms6#Vwrqf24c!lBMhrT#Oh0#i{r$tz;BnQ z-A2cyXxChP82xveh?4?1G3gUV1IKL}OM&vhFFo+0LcRaxtD*<^egxC=Kkxy_HF(jH zR+d;}Im|DKg%hl21z^L`HguD*_=UKxY_fB`nt%oi2Qj&ie3Wo$Twj3B3NLhjg zSKfDSl=^H((~C*boW8RC6}UB8?~itB;(S}dsC<=s@#N-Dvt^=Mr}c{AnVklKhrIH{ zo^J!5hr6MvGhLCt8F}m9;;lt!XodaJn#WTSgeg_!yBLVPqLIr@ulOqxS8X7Qf2RSL zoF9AZ6aO9-nIeB?#<6k?o-K@d742k#+oRQ5YHa_eA2&EO=!PFakeMd=J<{dT)k#i% zO7u#m@eNA5K>o$bVs$sRjp1j9#)^SBrw44wq3E9L53qAPnJkox%?vj*a=xrJ2e_@S zH8af*a0^=zg*Lg4(-lXj)?CNez3=|!3sl8A-tB;4&h=3vUv^oeSX-5GFa%j*?Y{NA z0%}Kzwob}|Cydf>_(Uhj;dD%E?&ClcsxCW+-dy+Z^RXGk8Mxgd1X3cUf6J}t1$J=p z*1rW{#8?H#NyG;)6S?lm&C)JdXaU?XqYh@_Rq z;&v>t)NSqcbD1UxLrrk1W^?*V%c(XKls`vW6gtH4vm)bDhqNy4IPUt~XpOtiSw(;9 z;0GkZki#<6WI-p1fuUmpi#$3oa)sR^g{n;uieEmp#8UI@9^e|NpPhmmo=kW)z?1B= zUkN)4y-4tAr~Ly`vhu$B@9gTPNm2@mH6as#(xT%rqNd()1NENXCMqE4TOp&=WJb6A>i?&urRn(c>cKMjmO~zy)Y3aurXvF?A)wCRi8+obi8SA z{1WXj3jISV$MD&I+LDneTtDR!pSAUv)|cJ;a(K_-zh&1+zhWeRjtH7oM>|Va7g7Np zIeJ9#{~($&chUy1j0kF>YhkcSKSwok;v0gNCqDnpYlT0YYVTkO1vm2`a zCRil+dL!p%x8?_Hxp;Kd5PB$afyU(r!mlF!bS+Sj_w!>;Lz&P+aAJbz^4#Ug?jeBYKWR7< zWu7)k@^n9pjQ&Ac5?3n+fHT|X1nMzZ!ijAe`FDXb;~~^dLM?hI{en%`U?QvJtJ0_v zndYKB2EtFVQ#(?g_zJjTnS^8<&nLCF|DLDWQ;JL*LXmexrMrg0cwdB8mf%3BIMc^f z5uYR5Cf?BC3UJaKm#M0A*!W)@yvrEb7z|;~i7H0Zvj2r#ClXAihOb^D04^7lpfp2X ziCJsx)?Ctu{|ttvdsT77NxiMI5C`2q^%hOU3Jh(9Nw0QOv3(uA@#^ZkJG{KV05*1Z z5D!XlCd;?se48GV2RG}ZH!(RyThyT2c;LlGn@!I#j1q3&0@B#rJm-f9vka*JXj%43 z_&K5KIUuIr52YpcCG&e-xpHOx(>>>N`AjIOkx9+O((-^5%XXti{NT^vYI)>!6)zY; zG$dHXmU&$jOS{YOgijheLd2qTh4wATt^Lq-e|*xX!x`Dw6;pqpJ1^%~{_T(Z=%&mm zy21d>tFRDC{*ablaXH1|XT$gT@f{uI^-&w|brZ4R{uEsNL)H{LAYcAbxTFP60X}42 z7+6V^++4@|?4nVw*AWU&m_rtKTazRfMsIso52OmNB#Bx(p&Y`)m!#Y(d%^lZ`p)au zr^{fB<@-AZ$`)QQ_06A+jP*V{U9SKK(X{iSxU^;pNftH72bA!i*6aH+?rn0H$)BRX z_FrM8Bkh&YNMUmwsPkUC>vXBo=nnW`h@|;IgEggf?FlTaZ|A%+v~(VyofYxb_B6m2 zz(ebN{DirjFAtzQjulife@(^`bP{y#b|CTK!juuC3}v`V0Z_&#KG5*p=~j7p`N<(v z|KkUfg>plwnLBaFTlS(Mq7_j5KlS7M@DlC<3|M1jQce4_w?n9ZU_&J)_Ti)A=Q62h zPaHjjs(5SpOR}t#LI?|OZ@oQhuTs9XT1R7G=;^jFx$W2a6|AyL7BDh1XTPR=i!k+# zwBj^DTyWMBTks9e{^&$oGS494vEB!if6uc0WOiQHIpp$SIeTT{e9pN6KZBYUcB0pX zh7X$D^_raVbu+iiPNE}-&jbq-`gg==Gt3UpKEUdZ7!k zyLtSrpr;d0m%xsYmEB29soRQw0xsI_K@z5Kc(BU_*0}eqx$OA+^QWH!Lt#d1ro=@6 zN}_}oea`a95UF*VQM5%Ie0`?@)iVp=b50R{lH=Z1h+|1!5rtLjTFL(voBpT({9RAb zZbgE7*JcRICBFZ(O*>5woU$SkW=OO+B}+Du;2T@>2j^ZeXRk?RmzrAoksBU^cV*9a z+doQqW;HC#&Ar!?KkX1@E;`K9&3L!J|I$x}=KWH?Q1kdaJWAnw`?}|r0!|*a)5(in zIg872FG1%`viFGfv0w6**zSA0(~Zs_#bo z{PE|qXmCGZrJ0|te&=B?WS3u`{yxSE%rYk9nn&z_kOXUdP(Gl#mWPI!iQ35c?fqA4 z>>8Nd)&W+rps_qXVnzZfR9W}$nHB-Y{3$|cE1V;#>tPDpro=vVbf+IjxQZs55!Y~iyEE=ZJitTHO(&I zY|w|j(c>;AR0vJOfF z2V=QMwnaQ`3>3^YBPGE-UnW-A;SK3GN}HHp1baUaQFow(pTFztns-QxTGLhRyx-H4 za|P1BM8C_)DgsUh`H^pdUwpM!0pqhDPaOSi0=o8G0_$BW^jC-4Tt1~mJj3)g71j^O z47oR_TJkL3!~1&o?95VVVPWBI=W}r1TQp5vMeT`t+y%8l(9I={o89tqQ9nLVO-OiE zRjC}oymJLRZTF;2&Ypd)K57LuHs`+2(`I?*XIiW>O% zAb_~rVt)tG<^n^Uq+vu;n0{G(G?!|u()V9jHSrTB_F=xAiX50MwP2rTd>}EA8)q++@E_(#QeD7fY`6RdjRS@V+_({l^?j6JJIuf~nuG_AOP> zQdWAnIJ*n)VlJEXu{8yw1!N5&40FE5%S(sh;dnALB>;0rP=t6Z{6QMWfA~IIVc)oCe9+m}{t?6sBW-gA#z(Vf(ubQC6mz?zy4SPS?d0xKg;m=@ZbeU7h5sXekkLLV&BD`Zk=-1NeOe@0c`Qs z!1=M8F%f0YBD9lKoAdH`ItQM$8Zk4Mzi6O-e6$|BOj^G5gp-@hHd+RIaaHz$)4j`E z#2Nsq(In_=hL#MKL;PQ?^j z*W6V!zl#%%n3{8U+t?3pUrhC{kL4}xky(IJOw~`j`Cwg8ZmR*$Gsi8~D2xE=>%j9n zF^qFGm>l^ST8f^tAM|onCuH)RJq~`wq7k6lx^vakyI~C@QQOiV)^!(C)RB=m-K4eQ z=;$%j5VX8)n;r|za-2qVi|rDb(Wm0*~P{Z z$H@|BGeyk$jj0>kul)tive4s zU6X8Wf(JTWupKS;Zo8rR`$gTxdj8Ce;{5k~WqEmdHDXCe!9 zsy!=9c+v-w)97;GI!uT~oB|khLT`qYjrtbRx+gmkd4#O9>O_-(%PsG--?Es#tVw@-M_5SlB$=(flYpR`nF;92c)lRgLAW00 ze48nJPV59J7j&kzEaQihG4<}lDy)3fdL49zjlVET@lsd8(cZlIB|l%|r-U=r+mu)q zSP)fD4szn)$Rttt@UfBUwYa%(YIqR$&fLimyrXV*wsHj+{NX^bq|zGS;D{&>%NKWZ z@uSPsR(mWcukg|Gp(WTaMIZABW3pAXd_aAp{GNOoMqy4W5O^Xd@-uN87HH(jVNILU3Jt__3b5l=4#Er8I*DV?{q}ze)cw~~5d3smSGfT#Hz~5=% zD<$Rwwh#lQL)@51u@^Cg>kuyK5YDCc*6umdYa&j*Z!pFrV7{9*f6%sTe~m@*kW;|F z7Z(<^J)w{z2f&lv!yBj40|PA#Iq-)}tH;z=BRsI#uUarwwHHT*VS#T{vdh!(2DPo~ z4(vS1M1p0rVbEegiE(!C6craIJ-oj@dAy=yCCj4sOqwV-*U#*D?Unk4z@LY#h0tVg6m>2^gltqBdrzo27b6)i zhsSQZl4bY0a+whU=l8Z$cr$GHBKi8@yLN}WDy@`FeB1Gh6`Gv(_Es@JhPlXb*wURq zL7*5k;oNf3`+KoqSN}A2iHMR;#%6in!14utRdo7fS@7#u`ms1o+LgwIGo~UVfm=Jg znZfJFM!yDVf7}jxf8iEZ7hFvalRUW7w2?%X^3qfY!X4a<*v7NrUanUX?^9ddk5$9i zyJHV8rrtl}T6FPxIjVO^`tkmgx)7*ZH!CLxRQ>6m+?0t`L-F@c*8ZOTx#4S%qF4(& z9r$W8LpcHu8K;g^AdeS~2)0c*{JZw<5vD!H2JJp{lR)ZIcSk}~hX*{(sYA@juYGqc z4F|BD@mPO8tq%_1j-8sHd~X5E?o|W#VHT$h&D&miWP`3~;4?U|*d4D+PgucMDVQJh|tphOwG+ z748bvE{jV*@iT!>hg%cF$-Zz~sf)D^BOv~9=(ux()>SIN?9-foS^vpuA-o?Q_xoa) z_Os9YT|E|&m6=w;uMv+TZcj;hGjf3S$i=(bIG)p#Eg2>q9i5l=%Y^K=0FNIvMwS#i zTR+!~zxy`zWXi~N8VRPdRiue9ynjGhZ%`23MdjhCSE28QYTce`o7tc^#;7~t)~MTj zj8=~aNGvqX%22OKLh0I#A1BU~TEEFIDA3$|uez$8lpNpGi1Fv;rw@$&_)`S5Ie*Eu z*EG(hnKWl}gR=yVS(GQ=R`~0?*Ga32s1ikt7|kKkw<$x})Ffk}WR6+rpHQ&3b8`Uk zJc7KerfMIF(F#hG4}z=)^IbwmT79sKdA8Bh)8cIm`8X(fuuDGazr}_N%<&6J#ILW})jpO2BA_;P+#tEpHhj%(%-BK1%L9E6dLZfM2f*732jhOXmpZ z5PFn^3H%V1SH=?q~MBWXsAbcG2U~&z*h$1I#76~jSmtO!|)9;wyVS2 z`N7b03lMbkzMNNl%tQ=Cq$;I-HEyy^fZFC=P_}vES-w8vNP8V@2MBowP?AQnlZ1i^ z`*ou6_H=Ca{=`*W&?$ML2{#EE*0C88@b)PfDbVtat&`9~_cmqR(WeqbndqMDUF!a8LqF1fiq|$Vn#;d zc~MQpcch}6)ZM5GPlw*$IwYaNYcvC$xyL>X^5k)nUuNvtVmeUZ!4d+EVh($4X?=nLRCC>?UxFQh5DyhEA72Yj4g*}C@T9PDcf!|^ z2@0`gQ;7ykzksOA=jP{l+!NYrMy1q=PTVUk+gJ#~=uDv}F~UB3vd^ZpV9KH}O}F_) zXc0h5uM=FNdBL4O(;ss4)~y!Q0sF6GQ;7rdIkIn$cw=t%cin~d9+SXBnbL}U{FeKd z_R}9jj5|O~t;w;>*Uk!{lgx)fb_+sR5aVV-nkqU(p#T}M z0hk~;mJxn6nMiW{@M3e2f}(x>_46Ul$-^^ABUNYtJ`nYzb`SEUgN!Scp?mVi+Jq>A z?d>B{`W6A})u{u-+6~8J3co7+d*=LT(w-b8MNx}^FlgoHGM4@MV;?!U)dao&_2e;9 z_(2Mn14yA0wh|`j?E*|RA3egmK(#mb5{;t{prGaEbU@1oGBfBX)QL?0(W404eQxLz z8wvhhZ{kb8){!5k)j}tL#Q)IygW(}hsujvT*~-08==rz0-5;SZZpobgkx-f5IQddf*zzib2e7X7%W(O)KuOm}8qn zd2-nNyF0C=IchC`%iL#LN?7B&fO4{L2{wQ_pKcyCm)pNl&nE!`f5qmVG(>?@+cRIU(&(BO}pyF}yjLXl4nNi5k zL4F4$JP-0a=SdDG4W&aw6G!}H%bU<^|MsbO-`l8kY~0h{{x84HZhq&rD=PFh_I#~; z$aYgydlW%89?*Tv`Y_4>HvH{Ijys_mqhR)7$oOKrN6>J?>2qJ0ymrCSvTZs#O}HWz zP9JqUQ8EXOpD4NaI~!enD8m-hemLP<`bG`_XdKMU7}t6V7LFs6Q9wZjzHw=1CM}dJfGKceXT<@GPTFy{m-U-#nQJDAE>V{Ks*j3k^Q6 z``}bJ^*Wzk#2&LbKAb8ljLTr$3-~j&Qa{ZMT=-10d$mt4S6q`IwNo>1%!yOx=i?Jz zz2A{$#q}$&ubPTb#5>{omkDmYD07V1+ECjYwAY=px(%5!_kN3AF-Q6|`z0s4`RV1+ z;H0$6zyK5?2zGQIH-u%2%sR$A1+g`g$kYm}%_vGkyDZ><=J`+xv^msmY_d;w=6q%z zhaOEBD-hiP@PnGo_M0K+H~fZ;*W* zVdR6FjOqiq|}N`e4qSni^D%%sB}@T(}69EeXfv3{5> zELSyMEJ)$Zqj1gGhTUE;J7->3GGbT@##uJ!_+tH_nfT&tIC&AO&+D@Vio`s?0ct`K>4fW6ATQkq+Uq5S1!8#}T z7#;a$RIQ%`CRPHsBp!)<)^hq8?|14~ykh1zJwg|*HF!|r2_5+gp4DJKvKN${5xwn< zXEnj_!Xcndyxl6LX{JA2y9gekSZ^u82o}Fa*o&W_82K?y#xKOtf73m&n-M!lz7Rav zL)ks_@C<0#*N)FfRNU-{-HUYjBNi~M?bxIp%1-j!MZ}g_v1lNa#v4UJTtA#~h?s&u z-cr5IRLw=*fufphNe>W(LEGE@DQzhCkM>mS(`VmLv-HU9gQvx;@tnn!8b-g_?{i*? zQncNp+3H*J#G!0&8*Gm@XT0GMAn?-)S>S=%UtB6!#@GIv{`6M%4cUJ*tp}Nxxa(59 i;uvQ8uez1saIRpIA@NeQJ$4#^el%5eACxFth5jF$e+rHO From 5bd9c0079c77f9c0e5d6b6f443bfb8293296bbf2 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Sat, 29 Jun 2024 22:39:53 +0100 Subject: [PATCH 143/188] comms --- code/__DEFINES/radio.dm | 1 + code/controllers/subsystem/communications.dm | 1 + 2 files changed, 2 insertions(+) diff --git a/code/__DEFINES/radio.dm b/code/__DEFINES/radio.dm index cc1831501bad..8a94fa9dec78 100644 --- a/code/__DEFINES/radio.dm +++ b/code/__DEFINES/radio.dm @@ -73,3 +73,4 @@ #define RADIO_CHANNEL_YAUTJA "Yautja" +#define RADIO_CHANNEL_AICORE "AI Core" diff --git a/code/controllers/subsystem/communications.dm b/code/controllers/subsystem/communications.dm index c245b1012900..c25672993fc3 100644 --- a/code/controllers/subsystem/communications.dm +++ b/code/controllers/subsystem/communications.dm @@ -145,6 +145,7 @@ Radiochat range: 1441 to 1489 (most devices refuse to be tune to other frequency #define MAX_FREE_FREQ 1599 // ------------------------------------------------- GLOBAL_LIST_INIT(radiochannels, list( + RADIO_CHANNEL_AICORE = AI_FREQ, RADIO_CHANNEL_YAUTJA = YAUT_FREQ, RADIO_CHANNEL_VAI = VAI_FREQ, RADIO_CHANNEL_CMB = CMB_FREQ, From 3dd584e225ef2e94e6f4aef1f0ab4112c370b80f Mon Sep 17 00:00:00 2001 From: forest2001 Date: Sat, 13 Jul 2024 01:58:30 +0100 Subject: [PATCH 144/188] grr --- code/game/turfs/floor_types.dm | 66 ++++++-- maps/map_files/USS_Almayer/USS_Almayer.dmm | 175 +++++---------------- 2 files changed, 94 insertions(+), 147 deletions(-) diff --git a/code/game/turfs/floor_types.dm b/code/game/turfs/floor_types.dm index 096b39e988d2..d7ca11088496 100644 --- a/code/game/turfs/floor_types.dm +++ b/code/game/turfs/floor_types.dm @@ -485,22 +485,22 @@ /turf/open/floor/almayer/sterile_green_side/north dir = NORTH -/turf/open/floor/almayer/w_y0 +/turf/open/floor/almayer/white/y0 icon_state = "w-y0" -/turf/open/floor/almayer/w_y0/north +/turf/open/floor/almayer/white/y0/north dir = NORTH -/turf/open/floor/almayer/w_y1 +/turf/open/floor/almayer/white/y1 icon_state = "w-y1" -/turf/open/floor/almayer/w_y1/north +/turf/open/floor/almayer/white/y1/north dir = NORTH -/turf/open/floor/almayer/w_y2 +/turf/open/floor/almayer/white/y2 icon_state = "w-y2" -/turf/open/floor/almayer/w_y2/north +/turf/open/floor/almayer/white/y2/north dir = NORTH /turf/open/floor/almayer/green/south @@ -726,22 +726,22 @@ plating_type = /turf/open/floor/tdome hull_floor = TRUE -/turf/open/floor/tdome/w_y0 +/turf/open/floor/tdome/white/y0 icon_state = "w-y0" -/turf/open/floor/tdome/w_y0/north +/turf/open/floor/tdome/white/y0/north dir = NORTH -/turf/open/floor/tdome/w_y1 +/turf/open/floor/tdome/white/y1 icon_state = "w-y1" -/turf/open/floor/tdome/w_y1/north +/turf/open/floor/tdome/white/y1/north dir = NORTH -/turf/open/floor/tdome/w_y2 +/turf/open/floor/tdome/white/y2 icon_state = "w-y2" -/turf/open/floor/tdome/w_y2/north +/turf/open/floor/tdome/white/y2/north dir = NORTH /turf/open/floor/tdome/northeast @@ -944,6 +944,45 @@ /turf/open/floor/almayer/aicore/no_build/ai_plates icon_state = "ai_plates" +/turf/open/floor/almayer/aicore/glowing/no_build/ai_floor3 + icon_state = "ai_floor3" + +/turf/open/floor/almayer/aicore/no_build/white/ai_plates + icon_state = "w_ai_plates" + +/turf/open/floor/almayer/aicore/no_build/white/ai_silver + icon_state = "w_ai_silver" + +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/southwest + dir = SOUTHWEST + +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/north + dir = NORTH + +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/east + dir = EAST + +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/northeast + dir = NORTHEAST + +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/southeast + dir = SOUTHEAST + +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/west + dir = WEST + +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/northwest + dir = NORTHWEST + +/turf/open/floor/almayer/aicore/no_build/white/ai_cargo + icon_state = "w_ai_cargo" + +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1 + icon_state = "w_ai_floor1" + +/turf/open/floor/almayer/no_build/test_floor4 + icon_state = "test_floor4" + /turf/open/floor/almayer/aicore/glowing/no_build allow_construction = FALSE hull_floor = TRUE @@ -955,6 +994,9 @@ /turf/open/floor/almayer/aicore/glowing/no_build/ai_floor3 icon_state = "ai_floor3" +/turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3 + icon_state = "w_ai_floor3" + // RESEARCH STUFF /turf/open/floor/almayer/research/containment/entrance icon_state = "containment_entrance" diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index 72c32eddec19..320b8669b189 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -536,10 +536,7 @@ "afl" = ( /obj/item/bedsheet/yellow, /obj/structure/bed, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_silver"; - dir = 1 - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, /area/almayer/command/aist_office) "afo" = ( /obj/structure/sink{ @@ -6392,10 +6389,7 @@ req_one_access_txt = "1;92"; req_access = null }, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_silver"; - dir = 5 - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/northeast, /area/almayer/command/aist_office) "bWC" = ( /turf/open/floor/almayer/orange/east, @@ -7149,9 +7143,7 @@ /area/almayer/living/pilotbunks) "cit" = ( /obj/structure/flora/pottedplant/random, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_silver" - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver, /area/almayer/command/aist_office) "ciB" = ( /obj/structure/disposalpipe/segment{ @@ -8003,9 +7995,7 @@ req_one_access_txt = "31;92"; pixel_x = -5 }, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_silver" - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver, /area/almayer/command/aist_office) "cxU" = ( /obj/item/tool/weldingtool, @@ -9808,10 +9798,7 @@ /obj/structure/machinery/status_display{ pixel_y = 30 }, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_silver"; - dir = 1 - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, /area/almayer/command/aist_office) "dfo" = ( /obj/structure/machinery/cm_vending/sorted/medical/wall_med{ @@ -10152,10 +10139,7 @@ dir = 1 }, /obj/effect/step_trigger/clone_cleaner, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_silver"; - dir = 1 - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, /area/almayer/command/aist_office) "dpj" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/lifeboat/blastdoor{ @@ -12691,10 +12675,7 @@ /turf/open/floor/almayer/redcorner, /area/almayer/shipboard/brig/starboard_hallway) "elZ" = ( -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_silver"; - dir = 10 - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/southwest, /area/almayer/command/aist_office) "emg" = ( /obj/item/trash/c_tube{ @@ -12987,10 +12968,7 @@ pixel_x = 8; layer = 2.2 }, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_silver"; - dir = 1 - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, /area/almayer/command/aist_office) "eqH" = ( /turf/open/floor/almayer/silver, @@ -13469,9 +13447,7 @@ /turf/open/floor/almayer/orange/northwest, /area/almayer/engineering/upper_engineering/port) "eyW" = ( -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_floor3" - }, +/turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, /area/almayer/command/aist_office) "eyZ" = ( /turf/open/floor/almayer/emeraldcorner/west, @@ -15856,9 +15832,7 @@ /turf/open/floor/almayer/plate, /area/almayer/maint/hull/upper/p_bow) "fsM" = ( -/turf/open/floor/almayer/aicore/no_build{ - icon_state = "w_ai_floor1" - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, /area/almayer/command/aist_office) "fsR" = ( /obj/structure/pipes/vents/pump{ @@ -16530,10 +16504,7 @@ /obj/structure/machinery/light{ dir = 8 }, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_silver"; - dir = 8 - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/west, /area/almayer/command/aist_office) "fFA" = ( /obj/structure/pipes/standard/simple/hidden/supply{ @@ -21250,9 +21221,7 @@ /obj/structure/pipes/vents/pump/no_boom{ dir = 1 }, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_silver" - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver, /area/almayer/command/aist_office) "htS" = ( /obj/structure/machinery/door/poddoor/shutters/almayer/open{ @@ -26021,9 +25990,7 @@ dir = 1; masterkey_resist = 1 }, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_plates" - }, +/turf/open/floor/almayer/no_build/test_floor4, /area/almayer/command/aist_office) "jeY" = ( /obj/structure/surface/table/almayer, @@ -27320,10 +27287,7 @@ c_tag = "AI - AIST Office"; autoname = 0 }, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_silver"; - dir = 8 - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/west, /area/almayer/command/aist_office) "jDn" = ( /obj/structure/machinery/cryopod/right{ @@ -27345,9 +27309,7 @@ icon_state = "W"; pixel_x = -1 }, -/turf/open/floor/almayer/aicore/no_build{ - icon_state = "w_ai_cargo" - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_cargo, /area/almayer/command/aist_office) "jDM" = ( /obj/structure/surface/rack{ @@ -27801,9 +27763,7 @@ dir = 8; pixel_x = 29 }, -/turf/open/floor/almayer/aicore/no_build{ - icon_state = "w_ai_floor1" - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, /area/almayer/command/aist_office) "jMq" = ( /turf/open/floor/almayer/redcorner/west, @@ -32014,9 +31974,7 @@ pixel_y = 1; req_one_access_txt = "31;92" }, -/turf/open/floor/almayer/aicore/no_build{ - icon_state = "w_ai_floor1" - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, /area/almayer/command/aist_office) "lly" = ( /obj/effect/decal/warning_stripes{ @@ -33199,9 +33157,7 @@ unacidable = 1; unslashable = 1 }, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_silver" - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver, /area/almayer/command/aist_office) "lHk" = ( /obj/structure/closet/firecloset, @@ -34023,9 +33979,7 @@ req_access = null }, /obj/effect/step_trigger/clone_cleaner, -/turf/open/floor/almayer/no_build{ - icon_state = "test_floor4" - }, +/turf/open/floor/almayer/no_build/test_floor4, /area/almayer/command/airoom) "lXC" = ( /obj/effect/decal/warning_stripes{ @@ -34227,10 +34181,7 @@ /area/almayer/medical/operating_room_two) "mca" = ( /obj/structure/surface/table/reinforced/almayer_B, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_silver"; - dir = 1 - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, /area/almayer/command/aist_office) "mci" = ( /obj/structure/largecrate/random/barrel/red, @@ -36275,9 +36226,7 @@ /obj/structure/pipes/standard/simple/hidden/supply/no_boom{ dir = 4 }, -/turf/open/floor/almayer/aicore/no_build{ - icon_state = "w_ai_floor1" - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, /area/almayer/command/aist_office) "mKW" = ( /obj/structure/machinery/power/apc/almayer{ @@ -38596,9 +38545,7 @@ /obj/item/tool/pen/fountain{ pixel_y = 9 }, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_silver" - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver, /area/almayer/command/aist_office) "nFK" = ( /obj/structure/bed/chair{ @@ -39018,9 +38965,7 @@ /obj/structure/pipes/standard/manifold/hidden/supply/no_boom{ dir = 1 }, -/turf/open/floor/almayer/aicore/no_build{ - icon_state = "w_ai_floor1" - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, /area/almayer/command/aist_office) "nPs" = ( /obj/structure/prop/invuln/overhead_pipe{ @@ -40487,9 +40432,7 @@ /area/almayer/medical/morgue) "onL" = ( /obj/structure/pipes/standard/simple/hidden/supply/no_boom, -/turf/open/floor/almayer/aicore/no_build{ - icon_state = "w_ai_floor1" - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, /area/almayer/command/aist_office) "onM" = ( /obj/structure/machinery/light{ @@ -43675,9 +43618,7 @@ pixel_y = 32; pixel_x = 14 }, -/turf/open/floor/almayer/aicore/no_build{ - icon_state = "w_ai_floor1" - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, /area/almayer/command/aist_office) "prX" = ( /obj/structure/ladder{ @@ -44558,9 +44499,7 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/general_equipment) "pHl" = ( -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_silver" - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver, /area/almayer/command/aist_office) "pHp" = ( /turf/open/floor/plating/plating_catwalk, @@ -47415,10 +47354,7 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/bravo) "qDz" = ( -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_silver"; - dir = 6 - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/southeast, /area/almayer/command/aist_office) "qDA" = ( /obj/structure/pipes/standard/simple/hidden/supply, @@ -49403,10 +49339,7 @@ /turf/open/floor/almayer/plate, /area/almayer/living/auxiliary_officer_office) "rse" = ( -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_silver"; - dir = 8 - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/west, /area/almayer/command/aist_office) "rsj" = ( /turf/open/floor/almayer/blue/southwest, @@ -49749,9 +49682,7 @@ /obj/structure/pipes/vents/scrubber/no_boom{ dir = 1 }, -/turf/open/floor/almayer/aicore/no_build{ - icon_state = "w_ai_floor1" - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, /area/almayer/command/aist_office) "rxI" = ( /obj/structure/surface/table/almayer, @@ -50064,10 +49995,7 @@ /turf/open/floor/almayer/orange/northeast, /area/almayer/engineering/lower) "rCu" = ( -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_silver"; - dir = 4 - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/east, /area/almayer/command/aist_office) "rCL" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/comdoor/reinforced{ @@ -51144,10 +51072,7 @@ "rVl" = ( /obj/effect/landmark/late_join/aist, /obj/effect/landmark/start/aist, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_silver"; - dir = 1 - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, /area/almayer/command/aist_office) "rVp" = ( /obj/structure/machinery/light{ @@ -53648,9 +53573,7 @@ /area/almayer/hallways/lower/port_midship_hallway) "sQb" = ( /obj/structure/pipes/standard/simple/hidden/supply/no_boom, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_floor3" - }, +/turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, /area/almayer/command/aist_office) "sQd" = ( /obj/structure/surface/rack, @@ -54455,10 +54378,7 @@ pixel_x = -8; pixel_y = 18 }, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_silver"; - dir = 9 - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/west, /area/almayer/command/aist_office) "teN" = ( /obj/structure/pipes/standard/simple/hidden/supply, @@ -55503,9 +55423,7 @@ /area/almayer/maint/hull/lower/l_a_s) "twt" = ( /obj/structure/surface/table/reinforced/almayer_B, -/turf/open/floor/almayer/aicore/no_build{ - icon_state = "w_ai_floor1" - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, /area/almayer/command/aist_office) "twQ" = ( /obj/structure/pipes/standard/simple/hidden/supply{ @@ -58397,9 +58315,7 @@ /obj/structure/pipes/standard/simple/hidden/supply/no_boom{ dir = 6 }, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_floor3" - }, +/turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, /area/almayer/command/aist_office) "uAL" = ( /obj/structure/bed/chair/wood/normal, @@ -58587,9 +58503,7 @@ /obj/structure/pipes/standard/simple/hidden/supply/no_boom{ dir = 4 }, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_floor3" - }, +/turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, /area/almayer/command/aist_office) "uDP" = ( /obj/structure/pipes/standard/simple/hidden/supply{ @@ -59537,10 +59451,7 @@ /obj/structure/pipes/standard/simple/hidden/supply/no_boom{ dir = 10 }, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_silver"; - dir = 4 - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/east, /area/almayer/command/aist_office) "uUz" = ( /obj/structure/window/framed/almayer, @@ -60666,9 +60577,7 @@ /obj/structure/pipes/standard/simple/hidden/supply/no_boom{ dir = 5 }, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_floor3" - }, +/turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, /area/almayer/command/aist_office) "vqi" = ( /obj/structure/machinery/door/firedoor/border_only/almayer, @@ -64185,9 +64094,7 @@ req_one_access_txt = "31;92"; masterkey_resist = 1 }, -/turf/open/floor/almayer/aicore/no_build{ - icon_state = "w_ai_floor1" - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, /area/almayer/command/aist_office) "wAD" = ( /obj/structure/machinery/door/airlock/almayer/maint{ @@ -69196,9 +69103,7 @@ vent_tag = "AIST Office"; dir = 8 }, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_floor3" - }, +/turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, /area/almayer/command/aist_office) "yiX" = ( /obj/structure/machinery/camera/autoname/almayer{ From 6d87f3eee338b980b78adf0dd2f0da2f67fae997 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Sat, 13 Jul 2024 02:00:38 +0100 Subject: [PATCH 145/188] mapmore --- maps/map_files/USS_Almayer/USS_Almayer.dmm | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index 320b8669b189..bdd2bf03ee3a 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -26776,12 +26776,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/red/north, /area/almayer/shipboard/port_missiles) -"jtj" = ( -/obj/effect/step_trigger/clone_cleaner, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "ai_floor3" - }, -/area/almayer/command/airoom) "jtm" = ( /obj/structure/machinery/cm_vending/sorted/cargo_ammo/squad{ req_access = null; @@ -125385,7 +125379,7 @@ lmz lmz lmz daz -jtj +vMp kRA kRA pPY From 6c21bbca7a6652657753ed03cd458252da1fe592 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Sat, 13 Jul 2024 02:02:32 +0100 Subject: [PATCH 146/188] f --- code/game/turfs/floor_types.dm | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/code/game/turfs/floor_types.dm b/code/game/turfs/floor_types.dm index d7ca11088496..4806cca1324c 100644 --- a/code/game/turfs/floor_types.dm +++ b/code/game/turfs/floor_types.dm @@ -485,22 +485,22 @@ /turf/open/floor/almayer/sterile_green_side/north dir = NORTH -/turf/open/floor/almayer/white/y0 +/turf/open/floor/almayer/w_y0 icon_state = "w-y0" -/turf/open/floor/almayer/white/y0/north +/turf/open/floor/almayer/w_y0/north dir = NORTH -/turf/open/floor/almayer/white/y1 +/turf/open/floor/almayer/w_y1 icon_state = "w-y1" -/turf/open/floor/almayer/white/y1/north +/turf/open/floor/almayer/w_y1/north dir = NORTH -/turf/open/floor/almayer/white/y2 +/turf/open/floor/almayer/w_y2 icon_state = "w-y2" -/turf/open/floor/almayer/white/y2/north +/turf/open/floor/almayer/w_y2/north dir = NORTH /turf/open/floor/almayer/green/south @@ -726,22 +726,22 @@ plating_type = /turf/open/floor/tdome hull_floor = TRUE -/turf/open/floor/tdome/white/y0 +/turf/open/floor/almayer/w_y0 icon_state = "w-y0" -/turf/open/floor/tdome/white/y0/north +/turf/open/floor/almayer/w_y0/north dir = NORTH -/turf/open/floor/tdome/white/y1 +/turf/open/floor/almayer/w_y1 icon_state = "w-y1" -/turf/open/floor/tdome/white/y1/north +/turf/open/floor/almayer/w_y1/north dir = NORTH -/turf/open/floor/tdome/white/y2 +/turf/open/floor/almayer/w_y2 icon_state = "w-y2" -/turf/open/floor/tdome/white/y2/north +/turf/open/floor/almayer/w_y2/north dir = NORTH /turf/open/floor/tdome/northeast From 2c21fd8b1c36e9f2a8655ccff392669ed7495049 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Sat, 13 Jul 2024 02:04:06 +0100 Subject: [PATCH 147/188] curses upon this ruddy mapping change --- code/game/turfs/floor_types.dm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/game/turfs/floor_types.dm b/code/game/turfs/floor_types.dm index 4806cca1324c..6002821c5c18 100644 --- a/code/game/turfs/floor_types.dm +++ b/code/game/turfs/floor_types.dm @@ -726,22 +726,22 @@ plating_type = /turf/open/floor/tdome hull_floor = TRUE -/turf/open/floor/almayer/w_y0 +/turf/open/floor/tdome/w_y0 icon_state = "w-y0" -/turf/open/floor/almayer/w_y0/north +/turf/open/floor/tdome/w_y0/north dir = NORTH -/turf/open/floor/almayer/w_y1 +/turf/open/floor/tdome/w_y1 icon_state = "w-y1" -/turf/open/floor/almayer/w_y1/north +/turf/open/floor/tdome/w_y1/north dir = NORTH -/turf/open/floor/almayer/w_y2 +/turf/open/floor/tdome/w_y2 icon_state = "w-y2" -/turf/open/floor/almayer/w_y2/north +/turf/open/floor/tdome/w_y2/north dir = NORTH /turf/open/floor/tdome/northeast From 916a7b4e452e188b05088b613b04b234a806e178 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Sat, 13 Jul 2024 02:09:28 +0100 Subject: [PATCH 148/188] grrr --- maps/map_files/USS_Almayer/USS_Almayer.dmm | 29 ++++------------------ 1 file changed, 5 insertions(+), 24 deletions(-) diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index bdd2bf03ee3a..b48d9bf5ee23 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -14527,9 +14527,7 @@ vector_x = 3; vector_y = 1 }, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_plates" - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, /area/almayer/command/aist_office) "eUV" = ( /obj/structure/disposalpipe/segment{ @@ -21106,17 +21104,6 @@ }, /turf/open/floor/almayer, /area/almayer/living/briefing) -"hsm" = ( -/obj/structure/stairs, -/obj/effect/step_trigger/teleporter_vector{ - name = "Almayer_AresUp"; - vector_x = 3; - vector_y = 1 - }, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_floor3" - }, -/area/almayer/command/aist_office) "hsr" = ( /turf/open/floor/plating/plating_catwalk, /area/almayer/engineering/upper_engineering/starboard) @@ -44973,9 +44960,7 @@ vector_x = -3; vector_y = -1 }, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "ai_floor3" - }, +/turf/open/floor/almayer/aicore/glowing/no_build/ai_floor3, /area/almayer/command/airoom) "pQb" = ( /obj/structure/machinery/door/airlock/almayer/marine/charlie/tl, @@ -57728,9 +57713,7 @@ pixel_y = -8; req_one_access_txt = "31;92" }, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_plates" - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, /area/almayer/command/aist_office) "utk" = ( /obj/structure/pipes/vents/pump, @@ -65210,9 +65193,7 @@ pixel_y = 8; req_one_access_txt = "31;92" }, -/turf/open/floor/almayer/aicore/no_build{ - icon_state = "w_ai_floor1" - }, +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, /area/almayer/command/aist_office) "wSB" = ( /turf/open/floor/plating/plating_catwalk, @@ -124773,7 +124754,7 @@ aKQ lmz azS eUO -hsm +eUO ipq uth jeW From 76d70a1296a122bb96b7a9a55b7330cd9a89fda9 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Sat, 13 Jul 2024 02:16:34 +0100 Subject: [PATCH 149/188] istfg --- maps/map_files/USS_Almayer/USS_Almayer.dmm | 26 ++++++++++------------ 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index b48d9bf5ee23..b5c2ad6ebb2e 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -14520,15 +14520,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/maint/hull/lower/stern) -"eUO" = ( -/obj/structure/stairs, -/obj/effect/step_trigger/teleporter_vector{ - name = "Almayer_AresUp"; - vector_x = 3; - vector_y = 1 - }, -/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, -/area/almayer/command/aist_office) "eUV" = ( /obj/structure/disposalpipe/segment{ dir = 2; @@ -21104,6 +21095,15 @@ }, /turf/open/floor/almayer, /area/almayer/living/briefing) +"hsm" = ( +/obj/structure/stairs, +/obj/effect/step_trigger/teleporter_vector{ + name = "Almayer_AresUp"; + vector_x = 3; + vector_y = 1 + }, +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, +/area/almayer/command/aist_office) "hsr" = ( /turf/open/floor/plating/plating_catwalk, /area/almayer/engineering/upper_engineering/starboard) @@ -23693,9 +23693,7 @@ vector_x = 3; vector_y = 1 }, -/turf/open/floor/almayer/aicore/glowing/no_build{ - icon_state = "w_ai_floor3" - }, +/turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, /area/almayer/command/aist_office) "ipt" = ( /obj/structure/disposalpipe/segment{ @@ -124753,8 +124751,8 @@ bdH aKQ lmz azS -eUO -eUO +hsm +hsm ipq uth jeW From f9a7bbf894eac479432c3bd45c632c25142ba721 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Tue, 30 Jul 2024 21:55:25 +0100 Subject: [PATCH 150/188] conflict --- code/modules/gear_presets/uscm_event.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/gear_presets/uscm_event.dm b/code/modules/gear_presets/uscm_event.dm index 4d595d3f724e..dbae1d8e40e2 100644 --- a/code/modules/gear_presets/uscm_event.dm +++ b/code/modules/gear_presets/uscm_event.dm @@ -470,7 +470,7 @@ faction_group = FACTION_LIST_ARES_MARINE assignment = JOB_AI_TECH rank = JOB_AI_TECH - paygrade = PAY_SHORT_MO2 + paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_MO2 = JOB_PLAYTIME_TIER_1, PAY_SHORT_MO3 = JOB_PLAYTIME_TIER_3) role_comm_title = "AIST" skills = /datum/skills/CE languages = list(LANGUAGE_ENGLISH, LANGUAGE_RUSSIAN, LANGUAGE_JAPANESE, LANGUAGE_GERMAN, LANGUAGE_SPANISH, LANGUAGE_CHINESE) From b0160698093075da4d3254fcfe6ad59e096097c3 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Tue, 30 Jul 2024 21:56:14 +0100 Subject: [PATCH 151/188] wy conflict --- code/modules/gear_presets/uscm_event.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/gear_presets/uscm_event.dm b/code/modules/gear_presets/uscm_event.dm index dbae1d8e40e2..6dbc898051fa 100644 --- a/code/modules/gear_presets/uscm_event.dm +++ b/code/modules/gear_presets/uscm_event.dm @@ -522,7 +522,7 @@ /datum/equipment_preset/uscm_event/ai_tech/corporate name = "AI Technician (Contractor)" faction_group = FACTION_LIST_ARES_ALL - paygrade = PAY_SHORT_WYC5 + paygrades = list(PAY_SHORT_MO1 = PAY_SHORT_WYC4, PAY_SHORT_MO2 = PAY_SHORT_WYC5, PAY_SHORT_MO3 = PAY_SHORT_WYC6) idtype = /obj/item/card/id/silver/cl From d47f9a07236de05a1e3a9a8ca59273df36ca8d20 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Sat, 3 Aug 2024 21:58:55 +0100 Subject: [PATCH 152/188] f --- .../game/objects/items/tools/synth_bracer/abilities/framework.dm | 1 + .../items/tools/synth_bracer/abilities/primary/protect_form.dm | 1 + 2 files changed, 2 insertions(+) diff --git a/code/game/objects/items/tools/synth_bracer/abilities/framework.dm b/code/game/objects/items/tools/synth_bracer/abilities/framework.dm index 76261b08ef8e..cc05efadeb04 100644 --- a/code/game/objects/items/tools/synth_bracer/abilities/framework.dm +++ b/code/game/objects/items/tools/synth_bracer/abilities/framework.dm @@ -189,6 +189,7 @@ return ..() /datum/action/human_action/synth_bracer/action_activate() + . = ..() if(is_active()) set_inactive(category) return FALSE diff --git a/code/game/objects/items/tools/synth_bracer/abilities/primary/protect_form.dm b/code/game/objects/items/tools/synth_bracer/abilities/primary/protect_form.dm index df6f3c4cdcba..0641d8bce19a 100644 --- a/code/game/objects/items/tools/synth_bracer/abilities/primary/protect_form.dm +++ b/code/game/objects/items/tools/synth_bracer/abilities/primary/protect_form.dm @@ -10,6 +10,7 @@ ability_tag = SIMI_ABILITY_PROTECT /datum/action/human_action/synth_bracer/protective_form/action_activate() + . = ..() var/mob/living/carbon/human/user = owner if(!issynth(user) || synth_bracer.active_ability != SIMI_ACTIVE_NONE) return From 405a449f7f7e699dcac48323a0496e92a8f49c5a Mon Sep 17 00:00:00 2001 From: forest2001 Date: Sat, 3 Aug 2024 22:09:40 +0100 Subject: [PATCH 153/188] f --- icons/obj/items/clothing/belt_conflict.dmi | Bin 0 -> 590 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 icons/obj/items/clothing/belt_conflict.dmi diff --git a/icons/obj/items/clothing/belt_conflict.dmi b/icons/obj/items/clothing/belt_conflict.dmi new file mode 100644 index 0000000000000000000000000000000000000000..1cdbf180c08555cd8486e1fdff127220750326d2 GIT binary patch literal 590 zcmV-U0fFDZ*Bkpc$`yKaB_9`^iy#0_2eo` zEh^5;&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3K9+C$S(U-pIhvQi+Q* zC9|j)C}zmTnO2mTn+jp0t2803vLHJpJ|(|2DJK<|Qe_2KKNqlj0pz4I`$XKh*#H0m zJV``BR9J=WmD_HFFbqU}354K<_W!@OPWp;H(V|L~mf;b6GWb^!-vk)k5kCf2&unlRX<#UD}DOF*lw?R(2?u-gzV<+6$4ptikLBeSHD zF^Vfd*H)XYX0I5)g|qWqw{7L)i0jn>?x92h34nYJIo>1( z_=Q?BK;I<@NdGB)8SRV#DgZ$F6n%)G1*HB{xKsb=(I4yo=l_g@H2)z0<^LQc$^S`2 zod2^P^8APOF#iz%=06b5f8+q?KX8Ea9}-ahBf Date: Sat, 3 Aug 2024 22:11:26 +0100 Subject: [PATCH 154/188] icon fix --- icons/obj/items/clothing/belt_conflict.dmi | Bin 590 -> 0 bytes icons/obj/items/clothing/belts.dmi | Bin 72348 -> 72631 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 icons/obj/items/clothing/belt_conflict.dmi diff --git a/icons/obj/items/clothing/belt_conflict.dmi b/icons/obj/items/clothing/belt_conflict.dmi deleted file mode 100644 index 1cdbf180c08555cd8486e1fdff127220750326d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 590 zcmV-U0fFDZ*Bkpc$`yKaB_9`^iy#0_2eo` zEh^5;&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3K9+C$S(U-pIhvQi+Q* zC9|j)C}zmTnO2mTn+jp0t2803vLHJpJ|(|2DJK<|Qe_2KKNqlj0pz4I`$XKh*#H0m zJV``BR9J=WmD_HFFbqU}354K<_W!@OPWp;H(V|L~mf;b6GWb^!-vk)k5kCf2&unlRX<#UD}DOF*lw?R(2?u-gzV<+6$4ptikLBeSHD zF^Vfd*H)XYX0I5)g|qWqw{7L)i0jn>?x92h34nYJIo>1( z_=Q?BK;I<@NdGB)8SRV#DgZ$F6n%)G1*HB{xKsb=(I4yo=l_g@H2)z0<^LQc$^S`2 zod2^P^8APOF#iz%=06b5f8+q?KX8Ea9}-ahBfF-5lQG`TT$1 zwcfQ3XU*a4nb~viJFe^6_erfntf@haehm(|t7tfh89N#|nA~^;vXyC0`tPfu(tg6Q)JT|rIuf>eV!BTxr)*ret`6uF$UI-c5n?F6XLw-*TxAlULjBZn+7#?4CBYcG}AoO1R@U z4-c%b`}aUGlhAJ1W2MY%m+M;B61ym!e|Ri)FpFPu5{_Y+SgJxtSUA-`+)Bn@K%%!1 z{w?M5PnmbEzS!hP^P3-5*J%R0YncR^G4DvhFk@z#;sh9ZFn1Ull6UiE_ zzJq-%@kZPM0p#p>JQ*5N`1~QCq%xm>$6-b*i&gma{FCHqhrqnQ7l>}fQc9|rWaXaH zw)8%6VYAgOn_3}Do?7(TrNApEDm`+Ub2^RX*NRxyOXJpmP7(-;--%?t!8><}obToz z+0m)V8_p7)VIb*$YwIQQ{h#%{_UyVtim(qGZhDtoRI1|7ZGPD*F(Er2CI&?cdMi-K zdtOYHx!&x2D6f$Ja1D&2Y%uannWDHliBXs^o|qxh@7IpY)HiEFte>($u=;)`Flcr< z-vu7kdCY(OXjsF}YidcDE?>#$d(-{^;i;p?uKNxFlnzfHfN3p{U^3YHS> zPmWuT(e3>@s>~)wBz+A>)KBkL>DR@eZ-|7)@S@BRmmxJ#-*6QdFD%h+HCBPtXvLc@ zqO38EF`}&h5bk*hB28P4k^p_YNcOc#XI3U6{i<>jW>daSgw+u|XMNqXcf{YFU)=YB zaiS?>ikRh5$mbo}aH)d$MiSaqun?pNeLy}V5e;A1*YGWs9K0b7l{dWM+wFtpB9_(^ z>!EUjK&yCbi-XSOKT(u=vKJ=1J2JS4i zS+%>^`#HPYAXXxZzzuP>WG?17&uuRd^O!%oW^_+D>C$o;jE-}2eZTgQ(qnN{!Mr4F zn%?5o^nk5UquRzNs!Ra@RDhJ&dlk3T{huD573atT`Jlbx&nws?MhpcBE@E8Qdqul9 z#Nn0yYNV8HJsd4T*@N#ivK|B0vz8uXZ&(#8h}XVn(2(L$S6gT+ zh^e$j7!ZgP1{ou=rY=$TY}swHu=hI#fIb|aL|3Gc4#Bn4W#lI=Xb7yYV0kDdcZdsSgRKK!d8 z3KW3$9p|rKv->eZ9~h`}oNw?1_8(gw)-V%=zQSWsZf(^Vi7WiMlkaD*tDCP-e#JVE z6SZVJjnG<+tD+=)T-*>X#EIE}P4O{oCcH?iCLhd6zu7iq+Rq``BwHB1I}yz8=dM@v zAU?#t_4fAO-Z$%6wh5!T)zoV_0w`?eYvF{2g@M)xGH#Wxe+PO$&sd6{UhGZLXG(hk zA-cpEXnr?jyvAJLJMMp7owc>sRn!GKnmWe5mG9Dn9lZluYftcEQtk>F*|*6eHrg*u z8^F^5M=7bKfR`UKS-wc(hj%;R;~($&u#Mr75e0T8iceg8KDTvJBL5ysEjVfV-wiw< z^I?2L#2|T&1Wo44moIiCBqZ&Rts4I%%%2;P#t@GMZ;h>$o!$-AUOW!h-=n?ofBBvT zj5t6z_6Jj%v1rCTZcGQj7a8p+M98y{$-`x5j1%>^74WHNs6lCfFX65R#1|9Ss@ra}_ytOt5# z)z9z5EWMz)F>3vY=#9;F-?+HL8eR$6CznYRAdvsEg*rD%NR%xZMH$cuzI6ZHgDvWQ zPqn^YxIUep$~TS@y^X{U|H0qOzC@mZ<-}$^T`2HZo8S=Co;a=CYhf6Z6N)q>&ffxZ=MlMp!i^) z$s3Gu_XIwGh5c<;lf_S#;pKd#sJWLe=t!Cy7IyMWzJLb2eOS2-3zb8^TkDobY?WA! zk3^J{CJ(S>((S11d=L1jdtYJz%V+QA0#SdFE52v*3D7C7bbY!qE5|g^4&D(mK)&}P zxW`lTq|+!&{=Vrz0dPoC-ddM;QDx41 zY72e)GKX#*MJ_|P|2S-m2E2^U}4W=hiW%n!SO+Ct7X3g_cdgdFIIP8Vp-5W!3-H%F0 z@Do4TKfWGz|7r1Br?D!XM{Fpi?cH3N#ofyQ%uu-2D^<^vjioj0mRrzfXP647osMwu z=YSU(4!qA1W#&{6+%_xqC(aI*PA}$f7$NNw1s85Yf-eAD@3cz zWA5?Mn+(qL2wcoP@dA{O^RH~q(=7|~Nhr)sW zsASpb>hpLjctUE52agMjCOaV?KChEXCbj?je4Q;LyK5UI`8kZae-)>gl-dwnW*CaNdH6 z+V+u&IJTJ`PDI|3mi_&wj{c=ob0ZehSz-YJS9$=IM#20Z!Ea<{B(iXZ+9o@Z#q$!? z>fyG0br#&4Dj`UA4z;Ba zM(If3vVog3mg>*oq)wyG65+m-$NY83@LorNIwy{$rSIe|1{Y^|tuPh4;it&%1Lmot z0kf}Juo2mxb1UK<{5@z|G35*)xXT8w(IDE7$Q z>T8KpxV(JEy1MdrTF%;X>+jdZ_wRBL@0#h_!kAmayq4nfa#}XlWc}Kb*{v~P#|62p z(9=$w`=%YWZp{gc7mWmKW{n(d>WO>-x;Fa>VrgLa{Ul>CRc^Q@gNcXZ-g;k|e)7VV zfZ!!2x&_%Xf5zO7;|axZgqLcB+e3w|o!&03I+OqT&)4s)%O?twgE^Te1G4HvKQ@m~ zF~8$9kXS^Uk$~qHwfqkQ%r1ad8C}Y}b@{uOL|)=z*Hi*LR|fO!bX^P=L^4tBH_R|f z*tuanRLDtKih4brSk*lWI`%rkUVtBF&y(Ds5Ni0Du8MaIO%a!ZBBH*Yk6gfMdZRy* z0H2DF4c$4%J@=BNI+>B=ATTU8l#7XMep(#-cZUsV_M5Dz z-cuYCdif1M=UO&RYy(W-O$B)YH`9OO1-JD=134z|s( z=fWLhzZ}Kgam^R{&?uHgXjZf|GgADgc@pwsHhN8J`^su`)1f?JI9S>W0_zB^ysjED zi;xf&3a6L#K?h2GPXf~#2vE`ZRDI&NnKSKS7n*JC zHQ}&S$rI*^p9He+zpHXmn0ing9o!Z}sjN+Z`RyCE26(QNl)yep1*TI~#l>$Zl%&4Q zE_&7O@w*JHxRr@P5-4z4Yk^*qJ@ODdRJ*~u965!})jJnN4m9K>D)p79*j!4 zu6oOet^yCxbgb5A)gzrV$alza$+B$H&K0r-iq?tkjUg~ zbV59wfSQ6&MyrTMaRZ?>yic?*LXk{XdP{o819S*?&c)`q+Fs^F^O#+)q7~)$Pf)mc z)hOMY1_jw4uEKN(8SpgSbS*lq8*Z0RDy4M>18^>8Jxhtnn6<0^>=oS}lD65ez11wz z_=Q|%uQ>Pdou2G#1I^5=uQswFj%0Q~}D}25mN_!Ri~PX;9=iisOU~5uddFnJ~%i$zrTN2-r72{)9VKpD1sjA`LTe~ zl6>40Y(k^6HbZ=Eu9wzgUrN?SsSylVh;dxZo_UvTzh7yp!j8l{HIU6fN|1$uC29aA ztgIxzEaAn@lDC;4x~i;~|4XZs65F_GaJ1-K!Iv!4H1ZGgA0yA@A_+?D2g9W;rc5Z?+R{O7yK(>)C{||#2@Ec z2IW*=3bGBGyZ{gpUQe94c&UG`Iecdz()wHK&x?%>x=&)w(_j7#W;o%MQg=tB=gpF9 zUuMwgUyR(sjJ!_9Q(@V{J9q(VrQ1hg%#XUk_er}J3xh-S@YBQN!F~Dk92|8oKAKr> z%w=n7YH82960H@n(1Mn`i2BCfaouwlGulpXB**S;$_pOqp^b3^_-g77LGAF?HMvc)8RQI!xNCf4b5(R;@A zP+=-(1XTyM0>nSPTOLu%D|O2DL-%^-FR=lQYDO}C7b{Rvl^sG%eDa$xJR<_QN`jw` zKMvA8Gqs?~u2HUecj-c8|<2P6EaXBCFlja2-rUS^7+RcnDev8e zG>@#pj6mXu4N<&8?%gR})?Y4DxfY);86MVpqReLDPr|AiRJD*g2{rYEsoC72!gxf+ z?fBU2`A7Q7M<3|=*01yX>vrvzRJcYTNuqZFj9X2NL5w78A=GIeI!ZqFh z1ym+gr)kBi6{<%ii9*yH(3J9rlEHX0?hOI+gzs!<#&5_;E&7`__mn|R z%Hc&+_HhW2NbKFomtgzP%!fbTpI`&$FroRKTf|?S4g!eh{0NfsFU%eg$0>;k+fvS; z6tT+a15sm%3pQM`k+rR$6^nt7su8rmFg2GzD_&9CiMPT0aOut1bxj7;`cmo9DNln< zIex4`06?MPF^0Gdm*RPBULD9wh3ZFjEBwF(pJ-bj=>)_F9v1ok!**JxetB4!y?1aM z;CLP+**V+Nl=W}G>jy%{AKW+488(!+MQ}1v7-F-fsPhSY=y%VUsg~AfN1b+Je4h$X z^SB~Qm1}L|kK&p=yc(j1w&3T8?{R9d>+kP9i-y{0s>RFs_=DSGUk!a1dXEEr<;wRk z2|SH~UVU~w*zhl*yFjnPm$ABABw!6D1VarS|47@8Op)5Q!1zPF`7tq|(JNlTnB8|N z)zhg>|IymgVB&f1J8#cw2Khl`%|KUEHQS;kc-{S&4KYkDblZt;nMhPMT+uN&lOZ#^x>*a4!nQF!L;|jFoL{RtufANuX?Plw13Hn!SfeXz39wGZa8zk4wRRS}P<$-iIGf$LyOfP;hcnRsbqJt3}t zN8ut$TnMtz%{V$1u()(wJs^<4q%~*_E>hk9|>IEH~euN_Pz!bpDmVA^6ek|V|`dQ=i?9gUPCjCUly#_Q%B?%gbx6%Ej$&5n=Dt#9Ae#j&MPNJ6&=i-Ec?}GRwpU2om}LfKd9apWnTr zo+^A;HXgJr0m-}Q99$p=dJmIEBgPZOUT3jf-KGXoVkCah$R?1LMUHA3-rplHcZPJ- zZl&!2RK#tQmY6&qn;fB`a`gF>Ginj{V-u3;ZrlK>_%>-qsL-&{`Mp2#OXquyf~CdZ zWq)Y-)$70G??}1ZJr|o{%t<{;J%ejcQ^?P=>~s#-5H^s zt9)uOO$Esr`}NUdF@@mL-3>`t-S)2!WlwA5rcF+tudS6cK{B5IxKG;pR7JZnfrE=$ z_o^2kzKOjrnL_ZPr?IPj35VAm(G_5Cr097`{Lcw7wNa7?GHo^Bv3(gqP zi2QLW*Ld1zIS(>>pM1A^#8xkPgfPs>n6THI1Oecj^!Vhs1Ka)rQ&!(!6w0rx9+wZ2 za&qDh4s4hEGt?e>t?ysH%quF9I9Gsq424qxV%QX+xU8(TIa67g`RFO!)^QKs3I(tV zb0B+@iJIEK0rC*Q<|BMc;FW`8`o{VTxQl@e z2Lb!@!>zni32fc@FeS_bks6g8js=NeYLJ@IFgWv;8H_HuQ+45U-SI5aM}!03S}2CG zU{LVkLqsez?Za(n!-?4K!u8_p#dS{~Ipg($mLD#HPg{(lSst6=xu7zO@hQiD0pDv5 z!rzU`%gBg%cQzxR zqJ+F0W}Zi4q8dCL0s0U~b?CkPGlVQgTg03_=71?~#0xB*W0E`%96vD{nFn1ce*Un8 z)TH1-cP|~`y~hNh8J}yjro!1v{cp!BL6oZi>gLf-t~-pVK&@zXoy!*v4(|BuBCw@J z7&($OaI%^UV{*^FxDuazY?Nhx(*E&s9Q{y`U$*NoQ|)1EoP%Yx8O6kr{rr|?eN(7l zTU(?b@ddx0|2q%t)x{CkPhj7LUsCJ4u7PQ#MzS*BU6&36n$lgdcc=2>uWT~hXG5?V zJ9C(YaWA28g2d|Prv>%2J#g1HKN5`%0jbQ`Cf2r3Y`;vT+bw;Vt^{j7JcJQ3!}}c5 zzr_}cj%04`C%TNH5Q^;V6k~Kh$F+Kln^IBI>;Jg+QU7s^n3MoS1BeCNeV!2&usZkQ zlk>XcL;6B%*MTcs?X&IGE6ipcKN8Qg>#v?3XH4^)KHSv8o-4ffH_TwX@{4rPtAE#d zxHWAved*B%rMYP)qyhPwAqV^1#=+Qx#c5c7h4{@Y9})TUGN>;9u#{C3XAyV>72p%u z=r^Y5te#)K7lN}&`LYp>H%&!G?A#0-<0=L_(s=8N$(focp>393zMT`YP=#ca(8S zr7W;!X*s#>dgr}Tn+3kk&g15c9Pvf(;HlZ`ysZeZn5p1=_SW6tZa(lCF~0?Vaq#H6 zXwmIZ_E+HH{vJ|d(IEZ2Gl;UV2XBTKsy&sj6h(ZveI2(3Hw=x8e9kzDaX8WQ@aBDwhX%|=?LAUXiUI zW(20gr`bSGq#9jI9PglUv1eX{p1qJ#-}!)r`3=!Yvv?&Z(}38rbE?Dy5yxkE>IfYE z^+9wtoP<3Q5~jJ<%JH4==A>~H9Pc|J5nWYqTI%z%Rw zmjt)C-up)9M59z6E?k_ty(50Y7KAe5Lve{yN;7Zd=%!rh6om2utbySmBqu zIZKO+hn29dFd{`2l>mbe)W#D_4W_wFkH-euyn2Y2n$~P+bDwslzrGdLyOQ&6K9v8e zww_a3gF@~D6yBy4B7p#gZbOnl(Oi^=i;CFR_U9?P0-Pn3= z#Z&rlZ_c44n04V^Lvw4WVY~-n*6wfOajA513-@JHjq)`+osPI{XT7f?q3E$c@%)2B zr-JVCLWi4|T-cFtf(9m#c%z(k{|J@y-QNq0=;)CQ@8+1#pLR>09Z#%4eE<0D?1Kg> zC9YCAWj(&u6!@zVRD1XJ_1m{v2V@cAaX)^nE?|-=Xll}@3@!@tJ0ID)Y1Oz6$t^s6 zh$kS(E6l^eFgPFnMN3cjK6WPDk%;MU&K_#^u5d23&y%ig{rH8*^|Id_xX1eoiKeu) zJXk++@S$#_iGiQ|33DFXiJ5#}JCp+6D#{Oje(LXo{#O9`(qq-`EfKTs6I5wyYb%#nN`yfZ@z_Br$T$k_NnpfH_9k)Qe&l-v=?wMz z`&Px5p;D5{nKxA}yJ5VnMglZ1Xsbi}=zMw5QO=3w0Z~Mp?VXlvd`5Z_PB#`P>$tt5 zM+7M+YtTkSstg9oGzZ#pt6>o1+lHO?2s?OO9rawZW)07~G#z2np;}_8t=$?K8nSp? zS}j1yL`CmgZ+LG8%o4zdDb+6mavfUZ%qeov-c95Y~{2RZ`vY zhdZV*>nYX|O?hnfrFRK!$WE_Wv6cldYHXK^lZ0By(gS+g;g0=9&VRMF?>#H-cpkfwTwM73WVprl-9rEe{kxe|lI_CWY^FmE{rk?LIk>!I2o% z+0%I{EB5KC3r_;^bGiT_+_)dLGiD;*Zb9gc(ZjHYUM0kMBuP_31@%CRc5LvPx=Z#y zeV_DNrWfgBu5Zk%CRme%C5!7Pj8I{{2-9*()%#mZ3yV^V3HpI4Dnb;b@o<1`z4$Se z%O{L*a4H0X$rxxnU&|FHa0G_OW-6+xR8@6Gx6Jd{(C2XNk!6wuFtd)5{ElQu3qrj; zJci~yp%oRSY)k^#P2B@wsl1LH1&E(t)4%2sk(8E}Rz8@mnlufN2ryb*h&`U(y2;<2 zHPqc)6Gc>bm$=eU_^eg<9rwwXZvXu4<`(m?Lukvz$pCi}0X~InJw3Qqco(7Z1i_6u zkwa~U&g^&Tp1SHeAuB6uyDg>VAty10D5Z$`St%)0xLHA$aoUOVxV)z)sjC}uc={_` zD}Yul0c;{oKj>37R+90F^6TpCTrMBUlR^yNNg*ZWoUpYT7pL4de=&h>JC)$k8pKa7 zr(80+7jXNwICUB!L;G@Sj+{>`(jVsfQ!3BU(!dHl4cI=B5)Fy#dgYcnvAZH@RNMY zX!-@74W?hcl6r0k?A$NSBnpZ^a!??zJMkWt#T!;#~&jJ{fn?mGieqMWhbJOpD-7)XAl>#bISzW0Q(O8q5 zY`S8GkAqMRHP^ht5R+!o!>ms(HLrR+G5jZlPKAjp=c1hx!w$}Ul6IBOc-@2>b0;D;>2Ml$bF+@ zG5EpZ*`JkBHu$_iuzB+LYeZ-t&Dzk=&~AJ9gnYb7}!?TIyFT!fT_+o(UQ4LE;fkcG8S$;Mw3-sEJuvV zxFz6Iyj?L;YY~aqv}lj8GnQ+aQ^Hwz#@c!%q3D2~3d;laly!VVrH%dIAazEA81=M2 z^oS1D5q-78MKLy(91O|L=}jbDsO$0Sx?`UD0m-E~`u?HHZ5P~-7ie?&V8lwLZ00hz z+$&v;?oRM=ZV7+iErCT*n&m&9{$sYxVW#2ZBZUCQaeIFHKR)aXhFd71T(3ME`eOqR zX_18Bx>vodx<^+4hvHbz@yc#e3@qbuaPD!qES?Y0C_>CsQ<2-j?TIuqpE!ggU#7OP z0y?D&bccVVX+WJR(+!|7@V6O1l^s9cRsRrQXqWDauXXTyYN{0{s+je(6N?44>%*2B z9!skPd_{SAZS31;s@Cu{m8MTMm-p;w3pDie3Jl3$hQyr^p}nxTX+%=yPmD8#-xe+* zF)=Tsc~VmS&oP%59R&K(8GQ3NiC2$(o7!EJWBC~DfqM&uUkD#?2?!!8wg&U6(Ss8= zzmbZGi@$=z8)!>xEnAh@EnY~ALX2UWDq0b(<9JD!^qXGc!a~p6xFAk64+PL*610&3 zpkOq9P9ytCwF)h9TNnb@?aNxyZRWUejiZZ!5O)6k`?uM1-v+mn%$!@Kz(6yu6xFGC zCB-(0mNbt;URjwWwOga^GsTRtT)Dpb=fUiyZV*xYJrX>yPtF?Pk?4pAdW zx-mnMVPMziB>T!oMwrDWt`t9I7Pof$FH5*g@Py1`)heZB0Dt@41y^02(DUs+k{_EYG6a6|$ja@>yPFIhL{nVA{# z)+lr?VsQ*N*v*#eBdm-U&Uf+Ow?!tmFTj)He+W*&kRHoUksuxa3q0C?lC2Fw9$Mm) zc8l8n@0b=|@=4M~d_V84fEXKcAqp}Z`808tS5(v`CK3bpvmO@Aj@ecJ6M;K_h7N>e zB;7n`F16wyEea>*HyKFgEGJ_xy7=Fv55Me-1DMDN-(zD>&XwiifW?JUxTiFnV%ywH z5+U9tFJtNT-z0+h2^x^2lM2&e`=)-la}}o8&^aCy1!5qF-2aBy{fPgUU{^glWiv0@ zBCRW8Vv;lP2h1X*Jqg1}U+D*x{a-=3~; zB*aRTV6g`W#9zFl&9iRhbu8#M70-KbVnUM;69X69iwKz6*obRsrNjsAL`{SH2()kb z`BM;pN#-Fl4s_W{pwx8e#m6jL%{@HGQUUK0Z#-^0nurT1X@9eyN#KeYml1t6rqzM< z-yckuAy_Tb18w&UKX64@SAB^@j$mJbr+P0(hnMp|D@w*Bw^SP7svRjKDtuOB(rbT5 z8S8VWBw+xq1nQQMfzo{h6A8&J(a|_7O^Jz#-jr}oeL(1+KY!X9zn(qSvO=vItkpl7 z<0AjFlfHI-5mCRMr%GP5uEJc#%IB}xIhR=b%#DDu2MW`~DC z&Z_XExZ1nFGMk)|>xaz6V!J3{wOEN(S65e_t__ZYZ=XDa4l)*?Zwy1dm{y-ag)a1| zSocGlaqO{$#gW3tmby9;ps;`Gz)zaNS5jh`^#2d_?uA@P{I|%ZAE7fQD1W^$r+&q1 z@|TM7C+~Z=2n;NR3-ak!)g53G7Ct813L%O_L62%12o7TLYtw^)ledtWJAX>)A)r~c zArqC3G+*A{@v;ksQ+w4Rvr2NNPF$@wrZzFjUwp>@!TAuH;`5UZ^iZzl@xwgawyZ2+ zAM4;5O|ZlXQK4pLmfxy`D}-#9uUf#tu4l2=a2DtkP{3VQvsa=~CaU&Ov*ev}uG9Jx zeFV2y&2X`}1iX0Iinu*n4buD=A#*@6t^BpihHovkj-Uepq3D#9{R_^hxY+8%{j2^k zN_0R}*Gj8z_Z&Z*obb)QUVc$e!Oh1(-Av^|Imr1_Zf3`>&KoyrTz$fdYF^^q&C%tTFk&(viL0-w!9xiF$Bc+z6 zW`NTVnyyLKckkXoTM{-qJzZU&F;5K%^4#)~SgRuq%xkiQCWQO;!Xiwv>o9{#xX_Qf zZg2QyOw)}KL?8=GlHrE<{iFFE5saUyw0a5>*_LQG2Pk`l5|_n{i7MwaOWep)Z2MOl z#PH}BewamF6nO`Ara&87fSopsV3Vx9xy!JuUcIBEgCeIQNQ?{UG%Q0EdP74azD-68 zD|F*$XOI2wYHf(xEIyW#g(F3pRiOn??x4{Ta@xj$I4mSa`X?uo_NNJIO@gr#nk}RA zlLe%;{{ejI$Hz2P3IFkbZ(q2s6?84xFtt8ujEHj z;{-K0!WHdiUdO%3keO+M&2YOcRpcJ+d=25uzIBLy3?vldIbTA#4qEU^IlU7odAfqZ zkooVNoYlWE)J-qO83~{HEROK~5Q3bFoYw)7FbqjZNXX1;U6vm7ICw@FVKhEIj_RDG zAt48CUHX~C$kuWx?x=%3H0GE4y$vD=0qS*FNfqx*KiPh*o45ogV}y1ajD~o1cMgh6SkO(r06EK*>R0&FrGC8_AMu zKF2z>?$D5O?&f`fp{&-eL)@dhX~g?BW95?5B@Ly+(tF=Dy7hg|wpnQ+vJZqO^0KlY z4Gdl?DJut>7}{49xXms6fRjHyDTBSU`}(34Dy=V1ky|Z3VsR=c3tMZ5mE`U;+mP?D zjtYR>h>%2#TM#_C6y1<-HAhsk$%EO4lV8aHyCBQs zI6JE%(B`_>wcMnoSpIh>DxKT$9(5vt-pWQ=iVSz=-*)Ysr)`uJ-VI-eTJz<(pdfQu zj*8yi>Cyham@BuQ?Oa$ZZ)iWn0b8L6J*se*(0&XS-peb7l3kg*#{T|(+`?-%Fstv> zc?KxY(Wri%GMo3u*5U{!&1Ysd((B@V%!{>NC%{YfI%VpiYfWI^esJF6q0)A32iE@g z2mr)a^jxA0%!?hG3dj=j_eytnBp|t9OUYR$-D~-GkLUG_uTa*v%k!?1>P3&MrYraC znORqLJ#r~TcL}1B#dXZQEF%ptxxmTAB{Mtwqnlw7l#(GH{omPfadGG7qz5};de%)f zn-SdqcXB0x&KKnK^dRgx!Ef1h2ou7)&d;?)6w z`C*mFg*y7sg8kDccTwK{zdXC@Tm7tqt4Bx7=P&mm@zK;YH<~7bzMSKPb#HZ`{M# zbwXKIyWUQ2S}i4}Y=p-poN~nF2ysq!G;Q^-&+HhOFy_Pe3Q|?|4wsm%3ZTS6>v9O~ zDqf8vJFGknc>3ONm(qHVlJ3IfnWwY2+tK#duBzZgGaVRQEgA?yn~`3ccwVmd|A1L^ z>3rVj>Xu&L2nlS#Q6lw5&5XbkysWsB2A%UN7H`8iHt(7U2p*Jgsykeeek$fm2boM9 z7ftK4lcMY#X~Gfp7ZB-ekX^@LABIQf)@DI9?yLKQMLcL^lr;eJxE!_K!48oIpi%wE zNs=`SBPaNOnzfLR{jr6HpNbVAj45qyPL~G4zE03^s7OCm_Pu9D3D0+v5eaMHMGNR4|m-(-4@La+mhainVe~?n4izN;ll1Nq;d`HC3^6F-#!t&u8+3r z>za{&7iJclbo7chhP8E&BhJ6BYhn#7%p5}h+PfQ?yU+>56a#_l>}8;bI(kAEsdGfL z)xw`S_`f%ubf@%rkYIW z8+LyJpA=CJ7J&Qi;xQeA>c767fP|G>QpNw+9!{qu@|k>V_ckUr*2r;X5Bd?!)m#;Tc2in&TsIrm{KSOB^rGS7LQ+%759Lc>Z)FJL z|A!JC%iu3$-;t)1{6c0(U|w1DGGu~S2m(OAr=_4U=i|7k76EPbLUVU_lpt>H@0Ur5 zAp(etuapJgp}y=WwHDvJwqK%rV3M%&-`?I8Cm4)tX^oGcAgYz^?CLzogH=sfLGtZc zF4pC%5{%GRs3+-svzpr{DJe-?N$L6b@81>F)F$_;3JYZvz5d*grSmjy$%X>-a&mH5 z+*^xi8qp_!%i(qT)LyeuSLm+vfF9H$RdCgdNdK>IL%Mdu==oD`^FA}!IK1aQ&ld0sU z8YW$J;Rm(5?S=qE<6LKk+Cn6cOSB%aWG#{|J~VU)n1{Y|{%tUS^LerW&EJ_VOG( zd%RNijio6Oc&*YlB&*7jCYbl24ECC&Uh#VjCCvW@o0j}j_96^424!2IRF|9+Qu8=KNJcajW`!+P+7lW7v4Gt|5Pwal6hVp5{7v4Lc$^Vlq{$cc5Ls;a%Z z5{-w62@6nARW+`9_lAoNgW4!7@IiXQ8QNu=lQkXZuF}`fNLSTm9f{F^EYx^8srLG9 zC;V~>eb=0li7ZHJG!gDunTLTQ_v49d>AG`01CD34w0=(hAEyHW9<_du(uxy~Uke6N z##d}SBGcSeuKMyD1PwdkkgH>0V^sE8_D8>eVmaz(VJytvwEvrP!I(0OgNDkG^W@~( z#C@i2&)0T{M*^iuB~OSzx)9uvTv|A_9lu%iDU+K{;Ci~nQ#^HM)n=!%*Ib&D3ifu8 z;1&KhkN>a~E5OFi&fBDGd*x_SQ8$#~|Mn{nUVt6V_6n23w#WCLPy&Wp5xqOh586Rjy(wQ3elOvlZAbNp@b=x~ zv5ASpsz^}La!~J=@|(}R(NC+PR;bY?MOm4xonPGXWc$cSETHM1FcnqC zR7ZW2z;7C}u26zho?(54YrD$4{!P;j5iBqH)8Twr8QYVxWoB~-h7@Wr5(e!II;?i0 zrOZLywMS9o<4;C@nxgsx;V$V}+<_o;u!P-5&R~I{yyj#m5%j zxJ;E!uXLAIPN@(HF^!;(bF>`XWojLVvs=@p>Hl~6xZNP++g>FYk){OzJbL*=$sEna zEp2@*l9R`k`7M{bXUvh!vc@|d^au~TmJkM4JMW6u+nk!3NHp(pmPSYYy2bB|xAy)C zUsqM1E}^Kwtd`;h5{tj%HqF5imZ77ey*H{LnPSv&iF&AxeT=|FUB*Oa0IQEay^vAw z4PHF(nY@Ui#}%QZq)eF$PbO_Xb*Vzrw8Dsm3Wl<>KV({n4ZY&zB!IeqAU&`eoI@NC zYO$Hq1zMZ%zFToQ&q|x7BamZ@mQEqoL;t?N3cq2B&(00lxrxcQ7?h{|pZ$UY17BL$ z(K-+fRegrtMH28cf_mo|iyA-E{OleZ5Px3YmpB zxynxSf$y8QpImuBx>CZtUXt6Xr#_P!fr_JWrmLN?q;8T6_-;mtfU%uXQ8!u^S zX;Jas%5_59DF$3ABkE_?ked%jY_)jb8v(74;QdJya4q6n@s&lE^?wfDW$4@T6K!jw zRoM$ddAX-Jc+a2vZ6(Y{ao2bT?&&O`20SbeLi{rzAYeId#6I!+_kj1*hj4&)gD1R1 zSfAahXZ+ZIS8MevTJC_P5*`cPOMLkY1h4;JQ`Z62RMTxQf)qhOP!Xwu6hWjH=_o}( zKt;L&g7n^NxDilLKtP%_kuJT4P6E=q^xk{#C4rE4`M&>u@3FF0Zjwo6?vyiUpR@M> zOYC?W0*y~JUI>H*F@COYZeVIoPKRA}X;V`Z01u~`F!OYEcgJ_&y+TV(jStQFT6=5C zpwrTM+Xvh7^{Iq`smSb4qO6#g3I3Ei8bvPp9c`nl1{&?p&Z<2-QqMf`ZE`7o{%cv+ zo*4%3+gJJGN1GvgEiNHE((GG59uj@>{}CoWZ%ar>HjyH_ZoZg@}iu~ z!o*yC1aKT5Ph*3^%J55UF?w*mqEbLSGV8)9Wc*f^9xys8E$bBppfD?8mU^<{yLSvv zo<4P)lQg`5A}&zC?9oz#5Xo#~FF62cNntILTai^u+?OamV;vNi+-0^GLY~h9cN4lR zJ7wC|B!94{*kVmg0VtGv<3?ZUce$re{Tp4(*E-?P?G>R2=(B;bl`9U^G2xW=4tIW& z$mZlyT$6`skP?!uKKKfS@kB!7h3b&mSErH~R?Eu%P^}Vm9+Ah!!!ur0nlzhg!KQR7 z->T8mzVycY{0V9s66$pBQz-0M=vevOxyJ1cs%NZiIzxWui>-p*ryN7?yvyW?`|xFt zLe;YN9j_`84qn=kp;)|u>hmqymxSI?5XJo066Sh+ukX#4F-fj&TOR|KCdG*uwATDb zSv73ThUnX#Mkp50T>{y>Cpal@6!q=k=Jx@;W0F1~4CbxS*z}QHzkxyRgAcBIPqG|e}e{lY4fP_i^NiIk?7ZszE!RV^X$(YBQw(Q zZth{i4emOf3^^;!3>-KeV`!})!xe$s8#JK@avL5U7l}GFLY@aB8B5^hJq7NXcE&iu z7aocC_deUZPmxdL54NT3s4?15wuIST=X4l+avvLV6WSrY_=4y$+lwi#Sm)L}0xEdI z?#ao{P_ecu_E$Y{j>a+o7Mhd@Xf!suZ=bH8?@sp}|`@_T=(_~mxFrs(MCY>$&mW49mLga^7z=z5gf5^*JOZW0MPQ%@fz8Y#J_UHy9LmDdT`q? zgGw$!hHkfm6)Ze+a-9n{7uy>3-w#ww3dS>;!m_K?EYObS7qP4q_6ot6)(&9Y+iCys zOHQGs(PIA&<-2c{B%`{pwQDS}43!(Ak--VfXYqv1nhfd=mjkkYh#BI-ecc$bUAE?Z zryPY;GMpqB8xi6xSoiSz&mDk;ifG)<=P=hiCYD@IZV7QpFn8ys1d&pAqSNABzRh^q zbB=e-skyl-d@gytKhw=YDD07pjN!6M zamyG2zSM8b4$r?mZ!s7(iFy3^F}*(3Blh^65IcLyC(h2L>$f62RNo@N!>#zO|-x$BGV5$r>*=BRd`Wc8T|AV)TMoMUUn;$=X|ci+?xgW`?}~`(is@ z~16G{=~_0RW4PWAx6htuh&2~N0R(fghYU>te`rGhP;V`DhXvqUgh8hnbzUtOE z1{=$aJFV6v1R5}XJ*})nN`Hj}dOx~(>iTJT-i~G!L|tm&@Zqzw%##T*pDj4zKZElN z3l4d|>NOt(wxux9(+5C}x)&y{0ZTrEV>#H=Nmi=)Iw|p?OlC|^BK%V9=(0>ON0L`r zt-x=qeW+vE^L42S{%AP2uH9%*nCcBJ~ zD8%)S;D_+3qBCe}iuoX3X~2H1EE^t7$tSe7H{^f@WjPKQ>bL`@C%TV8nfq)__w2zD zyZd2uytOj6{SaYOlq2|4S#`Bu?ta)eMzd)1wJ||4aF6A)qSAz|TPUratm>!B-)ucM z?E%}C9i74}tSh4DHq~nnZEkl+V6NCL;awz1ZTw2lAU|9BuQLvHXcN=DusDmTC_nBzOI`PAP~+@!vo|pK`AAHR80t^8 zH6mNG2-sr{B)eD*3WEy#=@g@qi1b4Nb6`#|%rv^yOQ`kJm}O zcO}pq`C+-}gtLV(a^0y9KAZ;n*g$*RLbM%AIgNp0?Q}Iugg=y?9rh9J!-y;V-aBkB zI>L{Fx}oTu*Kx>Du8V$`#7-Vfd7-e#kr%3_6kqt3;^3P*c)$+Qyi7nh?}3&z3@!?u zku!Xf78=Zq0Xcr?>xDnY-OJs$nWlIc@xBv|ggWrO_e`;IuJ&5_ojt7i#*ZGmUuCs= zZ8)XenWF#uk&W^#g&zhNIIy(pDz8+6scVvP84{O$F;Z|*ApnQ;!G6>t2=~z!q}LB4 zu>?!~6xR=(xhVKcAr(#oh$ZF8uY-s)whiABgspG?d|OTi>|SK5ik%jM4Nh2bV0Jm* z*AKSU8!xQVradXS9t5fP$F4(Dy`e#l_!{{Wc@MF>iIYU|b+u_STj9_ra5St`g zQ-swKT7!_`30PPJTQso8Zlqs(6BQgB!YQXVtPQ&=vef6L(wveO%xS%5JerfF7#tD9 zGz)o_k&!>3LuI5tK2mn|=_*&>ceqG(x>dxpFf=u$(F2L#9f!->+v7AiZiUJoXB)oq z_n)v)8ecRr8xJtBOiGo;{HMtC-CvXntl?F`E8>!%;y-u6Z#9gAr2SB| z8w@39Z89Hx%EIuB*jFY6dQdiX5KZF&wTIJ<9$PcgL_i*PpBA9(O5kZyP3+ke9G~E+ zd~5Knb7{%KzG9S~p$4)#-xQ{!R`FM}ku|JdBZY>ACaRRjcEpd3inaE-*|y-h(bAyz zyThK`uR_h~_oyOz^M>=mma2szpDR;P+=s#1ugpAXQQoE?9iOkPpGG*CYxrh`*x7@r z`OU0EajkCR^wW!q|CBgEX<;^nwHt7_RoVmB4f8Jdbsb^W@HaSXeVjgRJwi!^a$|)8 z_>Jtd6jgn&_}5)HEGLI+5?oqf{UHc=?BDU$%l#9HN`iARa<;^kn&Zjx*+U7=QA|6B zmZ$tiuhDTGJyJRoI`aV8i_Ou;mrLYVS5}KlMIhsgZs=lP$?V4sVN*j8L9#hl=^`eW zj%dtfhIlVeHWB|1eko=6HpYWMEI%4MO}wJAs;Vqud;RDpHFX-JSC;2=v_MRYo!#zEE%V} z-cfVBSB)xx@x3%dQN#~p^faiWN6iKEYtrw1NBNHO&NPz>IkX>k}t1PVDtuj^YeSn^wbaB1OC}*_2!OX zKywlC>`1GZ&)7(-OVDt#+|#rJ)&P=`u@XzV`9{KPXVKmH0y{K#_ngXtZlAbAK9Klp zt!?Z@!OqsRtY;D4DAc8kcIg3G8n`ob=} zQ6#Qx_{6QO07MLrT!9XZ(oQ)F&4P-gA@=(9W+tHH3I;Bps?QO_v8j_?f&V6KBr%7LzPQ9*dK3Z zd`_18Hbq5K!;=IEFyMLeA!6{7ZB|Qk_v*tr^h)x|cznX;9u^g?ol;$X+a8I|wCbz~ zmtMoKPo&i#z{7i+YFp#(T1v&`#t)YFZjZMvwP(wIgt>*_$lo7Sk|^EZT97r6{)<%Nd6? zA6D4TsGXG1$PyM&)D8uNBVjP%vqj7NoggT}{^-F2l1sh~k0BE3Ovkj=l~O2FkPtD9 zpsV;xLFK4a`r-NQSOK?(A;Jg?JF6$7MxgJ@A7ehMn$*ucC_Vs5zhvSm`%ivKdqQ|& zK2&siHgnRM!mKNvEf?Ks;1X5@7S|FgtkCuKO)C(FS1#z5+z(DTNQ&bWgSBu?O_0qV zaD(-mGQCluw!#|x51H0-@7nq!T>^i>;!~Q&*sX1E&Eumc+ zpNQP3o6dgrFLb==n9Z@6jM;_ssPB~tq*$n}VdCvBrWDD`6b3!k66QNC>n<8d`0Aig z?48POUV}UgNr*aK*q-G=16iWPofdXtG-Y{}Eejl?2Tp#W=AdL?$agl=|Kj{toJs*R zJ;tGK4daJ=HG1Ga8yg<54z905MM6tT1OQpced}Cd6#?-Ykay^BbJdOvPCmII`$@OT zheY(D$mFuO<5M5UvZC#BF7TKE@kwGv-Q8uf58O>5s@j>9xY`o0mwT8K&*f8m7Hp6l zsXx=_`5>G3+aN#G7yPhkGWu!fwlreq&PJ_^hlbu5D+RLXVRtYJ2RtT-S`&>$`AhpBq47NyhydKrgkV&mKF6Iu(5&d0V$wCcnE!lw%~G}dJXh?RX=ljc5i+-R z>?{Q2PL3qaKgwA7<%X_l9L(0ZK}-8!GvNaCUSXnFh+E#yozf~qjkKt z6W$9#W0m>3D6NaG4+4tHX$#i-3$s7*yFlzwZIfaox{pv&E&x)(oh>@=# z1#s0KpvLy!n(bgZo*kWQe0F|Z@mNYE_=&Jwb2@II%DI^VyBERln33^A6vTUyZhyDy zoPR;odHF>VKiqk{TIJ{U$WQ6jr+X+tI z4DuvP8ulvRr3t`0L?pA{T$7TL+Ap8j>Zwc)Yizky0)u2<&cEYO?(V1!J`EY_v5*O! z3G=6&V!EFUV0Bv@__7c^*;M%AI-SUBHDB%ddTw4_o9)W}sL-_rf?K7&CYIm>HDiw# zkowYtm#Se}s-~}U-hg|NBhNSUJGuP@bi%4MW|j3Y;K}H5kHq}g+?NNCPqezV6|MS9 z>)|v#SE+uN1Lyk||GE~v!-rg;3C1Ga~HGo^bD-ZUJ&EUL90vlJE)EI&9_ljRDgLTsCgPp1EFH{Afh`X26)Q9Ga8<7A)6h9(r>!!Cz-7-sV@_A2 z`jUSG5$RJghcY_grLLE)7EcTGp|hPep&33;wlDzPRJc6bbxk|QAb9aF zn`Z*80}m_t=m3s74z)RvjOdP_=FmLZ;E`i`>`2ANmWE;}iH3Fep9rIGNZzXd6CK456H)w>31sBGB-mmiB4gmMQ+K6bKSdge5A#qA|ST#gxiqMr&Ip!42j| zPM$Vbn{ECGtf?RJJ5oPK6&Jq}aYp&>Dcp~Ij;@M~?*BkGeY2z$nv#ZYDm44h5m=dZ z-|VwOB9t?BTQEngnf&*neNhbOA|g3zC4a{agD?fz-%~WqilbUWZAtxKC$o11 zF2dqMe(L!UCf`_W?bbCV3+*4VD!gSl1gNKFfQekrWxa_srjA% z*?lVLak-Q&3m1|{zNR3|KxRQOIr&@KpRF#B#D|?thlNcUTUO=|#HXcV_7K2dFPyFJ z1ZR6Q5cg#a)1IR8jQoVVQ^2mjZF#H@=e6e{$qD6$CddODW7bytM&gZ9vO;6pUvH1Z z2Ne6D1^6E`|9&KDk|}MkxX*9rHO^h(xixmM(iXO{zOgvgsMpdCT7>-DZV~ug{Ad1H zON2$kn*i&(zz@-uzjm7P z2^1Q5HXgh0OHFMuUaHP|+>KPk46j@BjOd0@^SLoIdmG`$Ua#iVF%YXQp;EjY=czm4di986xkq8T-NlH*K$qCpDzv{4*U7gl;7m}!tcI;2p2wazsrS!$1pZ5#P;)} zNSl^WrOszo&Ar+)79oQp-WOL<FBg9WO!%hl=pJ!9}Ug# zV)R-qGB2FfrE)PzC1zMX{zylSR8yC-dAj^$Ubmkzw6fGi69j5e{FdqVVMwr_z=~Eh zf8>>CQl!#wlee|x2?tHq8EXGNn z*Xt;hod%m!6V}P*ED{{sU{BE$@T!pK@M0ubmu=>)>wcd)Iq?rEeXco8EiGf*1$N&z z_wZ;_RL}6a$b!i5u~w^~zDzQ>z=m%@rA+OCStPj|sf1Zj1oKW_2+#k_t$lwQI0lk3 zpGdr?$L7N6vebqrhl34ZY3&Lirdt|Kk6L%mO5#OfHIwN$YD#)BkJ2wj{3A}z5PDe^ z6*LV-l<=|^MnK+csMJp@DQmciGWU?=fEnL{rHf#D6hTKPYVQaPgCDL$oBVl}e3(Dj z8`}i`Aa=1b8w-SM`3+jvaw&fY-o{UO6?dL4^D&6_ycEj<6 z;zAQD#KtEkmYl|AQ3(8B5IEZ!9BE9LaDNOPqxSN{Ns{fZ_Y&2IM}mrHCj5sK+FT3R z=arQ;x||h9Mkh9N;M=2CuZvIPxaNS}Ed?~cpdZb5noV(fW51__f3FPZ>#tbY+tUzX z7M$2WA3jIv93H*YmT~emPUsL(cS;4`gm?(3Eg4NcXy=$dbm%L|{A8q*w zIqsV;@sV!;vNx0Va{Rqbhhe+9`Y(UIS@xLWq4q_yVI15Y;A2*nTc0d zSAXqqikWUtR=F`&8f|GN#aG`a`xfD5rDvA42EVxk@;;wPr5cX}(84<7{JFW;zr+ zLq{5mJqi(EQ%p!%oNa3g9=J!AAlpv7ErGob;00ET&mElgjgNEPwfwUQRfs^eFZXUZ z{n1!@BRsQtCsB<<#AeiJw5sCrgPoSI%7bsT=HqUK1<6+55K>8I&I=#|A&O}LVP61z z;NBWE_*qX4O@W}6#&$m6{Q zv7zBj)d3D-ZYTmnNdPu9C@1Hg(|#k}txhze6;q5`xb}MfKEPK?)6(isy3{Jj;# z98bCHsm}EJ0g(>j?u$`>9ieM-lp#?g(I15x0saArRGu5E#A5VcGiYZ;r>Ct>`F(`L z2>^Qh{ui_84^&?~lA#m--e3K9I0su2rOIu-tY&`~@aYQx;fu4B?3!;WVh*frZExY- zc}=z0y~tF7eJeulitEY)11ez0xPFdZgwo#*L#kF4*cWt5O{-|r7Ow;(;IN|*^H z0p89I4v+2$CF!I$`58#1Ny zHzG{&dpRO68-knivJbsY+8sNg2L=rxifodfA1-Q_3)ry@f25n6EUSKf|ActmBuRCv(>B z)NyfRA%?1k0?yn*+I60^D)|w@is-`V-DD(?Qod&4TeTEF@DghiYaT^c*>&7_t^eXw1W zIfFuS&Tj;>yw1+`0N3hHB9z~K8d#HOzL{Za6yyjcQT^KRw0x!dJg+ope0&Aw%c_nj z!>%}4Qig}n2;RH!3R_dmOG|5=Q)zf*v&2;}O)IEQcncvGbUf}pEI74Fj4 z?rszD%JJ*GtlgVm~wFi6wj9Cs+?EUoNA_G zbw2EB$J??S;*tc|J2?$pq_VlP4+@!xYBKdx~ky?G2KopJ8TnM zNqs%#cZOp9YO#G)eGgN33s6Fq9$^BI-pU&I0?{k`w%k~wtF2DvC3el18M1Uf#YjOQ7tZmK03WX@^;M^UW91IkECYs`~ojCfa#6e*HD<(KJnKgA~z=p%H&tOvfEbt34-lq8WDs zS8wCUV(b~Zej8?4Tq~-^%?V@W8@Hg%phyQ9TlPJdyJ;F%PSP4S8dDx^2);MtmC*=F zf32NybVWnkaVLqV{7`~9wDAxe@hx4W!Fn1RhvD*(lo)M&fp}p{;=n2SguPu4_i_MteJsucY%JV2;3;nje z%%fmGwq{>NAD!4|*3XIcnJ@C4Q)Nm{T3A^1Y47uYivo**Y!(?{uZP&CCXBf8gLX7x)=f~6a z&-u;fG&WQn&{nBp{|VwBXc>3Ff=U~d>zku&+1N!QX$sy3yrXkBdq^vA+MlA8t)QOx ziJPYVtY6tpWysLnOtFCzR_CaLJ1|on3-kfE#w)4eZn#pBR`HtM!GoxyaL;$#v9fyUFpSRHpN9P zG>nQ^CuHM5G;*Z$S&?;)iU{##s6;P0tbwes-vV#lWQQf?nI4mSxl4QUmJOSZaN5;p zX7ZNL$}W<1vJD^NaGR$u^gj*}2DKJYmAxxcKq--df485q1o7Vs!|Qq@@S&*xUQIZ$ zfB$HhJUYBqU7eosVm|#m)l9La%kWTfEsRaAyek`g{WKppG>+-41K{;WIvW1HVtZkD z)@BZL`Ms?c`p~}_FlszjecZZmCML}(bu5fFecIeQw~$TCL%88BmCRamc+hN@mXT2y z{feQG*bk7StQT-_Gm2e1Kx0QsoGE;KWqJtx-RQ5#y&z^U zag9A_ZyM$M$T5n>zGVh=Li<)-CggOdoOxer=XZHki?gchJ-ju>_yQ;Gc*2<&Q)d6H zE4#wz;#C)&;hC{TQEaMZnRGA_VCd$Kf2UotG~?BepL#ZkF9JSsQUg!A^b}R9k}S!R zqcMuc6@C5vD>4-4XUV)MkK?hjy-F?f`OQZl-UNw0xC?C<^O?6g|5AR{6CsQcoq%@n zkCfd2dkb$Q`U`Q@U8eGaI}|w61Z#Rdkc7_nnw zI%B3Eq|4LT!W5>5qxpWJ^N$@Vbh|M57<#po`>aI(?)@>fmbw|*K<8Y<-;dmpm(`=# z|H*`a#2=AH#D6&7#C~ko66tc8>!%J3#4QGGC>Dcm+PiLE zIePJo)31|>foNDdth2E86BsnZQ_;PY+8y#Fb75&=wNDg3?da$yYIkYmYGo0 zO6&2hoPQgYV&8&3*Z{`)Nh^N{!p{YS;0O~+bTev8(tG+AznNVmYxwi-vAz%5I-|}9_EX@lOZ!Kru8oG`HaV= zv|E3L!R7w<^x<6u8+FqL)o^`+w*aikqje8D_wY&^EMm?kF4|||P6mWplV$jkFTIoV zebl#xIRG~mF=(1!=$T&AIc~Rl_eW>BC&~Kc9;HHv&A*wpB627_m=rY%1OCkc1|a^y xBTy!aQ=sjCQO!T@=%x7QE0mY}x1d4`4quGLIZtI!%@2V7o-3%y7d$cY`yY6@YGnWb delta 28713 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 From 8a5ed56f1427bfce5b20fa899bc1a4136c3ac0bd Mon Sep 17 00:00:00 2001 From: forest2001 <41653574+realforest2001@users.noreply.github.com> Date: Tue, 13 Aug 2024 18:10:30 +0100 Subject: [PATCH 155/188] Update code/game/machinery/vending/vendor_types/crew/synthetic.dm --- code/game/machinery/vending/vendor_types/crew/synthetic.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/vending/vendor_types/crew/synthetic.dm b/code/game/machinery/vending/vendor_types/crew/synthetic.dm index aa5139522b00..fda8ba39156a 100644 --- a/code/game/machinery/vending/vendor_types/crew/synthetic.dm +++ b/code/game/machinery/vending/vendor_types/crew/synthetic.dm @@ -138,7 +138,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth, list( list("Smartpack, Green", 0, /obj/item/storage/backpack/marine/smartpack/green, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), list("Smartpack, Tan", 0, /obj/item/storage/backpack/marine/smartpack/tan, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), list("Smartpack, White", 0, /obj/item/storage/backpack/marine/smartpack/white, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), - list("Smartpack, Black", 0, /obj/item/storage/backpack/marine/smartpack/black, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR),*/ + list("Smartpack, Black", 0, /obj/item/storage/backpack/marine/smartpack/black, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), list("Logistics IMP Backpack", 0, /obj/item/storage/backpack/marine/satchel/big, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), list("Expedition Chestrig", 0, /obj/item/storage/backpack/marine/satchel/intel/chestrig, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), From 4a21dacb25ad27fa1269d39600d9d4fd03668778 Mon Sep 17 00:00:00 2001 From: forest2001 <41653574+realforest2001@users.noreply.github.com> Date: Tue, 13 Aug 2024 18:10:36 +0100 Subject: [PATCH 156/188] Update code/game/machinery/vending/vendor_types/crew/synthetic.dm --- code/game/machinery/vending/vendor_types/crew/synthetic.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/vending/vendor_types/crew/synthetic.dm b/code/game/machinery/vending/vendor_types/crew/synthetic.dm index fda8ba39156a..1304644aad8d 100644 --- a/code/game/machinery/vending/vendor_types/crew/synthetic.dm +++ b/code/game/machinery/vending/vendor_types/crew/synthetic.dm @@ -134,7 +134,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth, list( list("Latex Gloves", 0, /obj/item/clothing/gloves/latex, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_REGULAR), list("BACKPACK (CHOOSE 1)", 0, null, null, null), - /*list("Smartpack, Blue", 0, /obj/item/storage/backpack/marine/smartpack, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), + list("Smartpack, Blue", 0, /obj/item/storage/backpack/marine/smartpack, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), list("Smartpack, Green", 0, /obj/item/storage/backpack/marine/smartpack/green, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), list("Smartpack, Tan", 0, /obj/item/storage/backpack/marine/smartpack/tan, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), list("Smartpack, White", 0, /obj/item/storage/backpack/marine/smartpack/white, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), From 39af8a5094022ca1ebd07815181f6f7f53cc88bb Mon Sep 17 00:00:00 2001 From: forest2001 Date: Tue, 13 Aug 2024 18:17:33 +0100 Subject: [PATCH 157/188] smartpack --- .../vending/vendor_types/crew/synthetic.dm | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/code/game/machinery/vending/vendor_types/crew/synthetic.dm b/code/game/machinery/vending/vendor_types/crew/synthetic.dm index 1304644aad8d..a4179085a273 100644 --- a/code/game/machinery/vending/vendor_types/crew/synthetic.dm +++ b/code/game/machinery/vending/vendor_types/crew/synthetic.dm @@ -90,6 +90,14 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth, list( list("EXPERIMENTAL TOOL TOKEN", 0, null, null, null), list("Experimental Tool Vendor Token", 0, /obj/item/coin/marine/synth, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY), + list("SYNTHETIC SPECIALTY EQUIPMENT", 0, null, null, null), + list("PK-130 SIMI Wrist-Mounted Computer", 0, /obj/item/clothing/gloves/synth, MARINE_CAN_BUY_KIT, VENDOR_ITEM_REGULAR), + list("Smartpack, Blue", 0, /obj/item/storage/backpack/marine/smartpack, MARINE_CAN_BUY_KIT, VENDOR_ITEM_REGULAR), + list("Smartpack, Green", 0, /obj/item/storage/backpack/marine/smartpack/green, MARINE_CAN_BUY_KIT, VENDOR_ITEM_REGULAR), + list("Smartpack, Tan", 0, /obj/item/storage/backpack/marine/smartpack/tan, MARINE_CAN_BUY_KIT, VENDOR_ITEM_REGULAR), + list("Smartpack, White", 0, /obj/item/storage/backpack/marine/smartpack/white, MARINE_CAN_BUY_KIT, VENDOR_ITEM_REGULAR), + list("Smartpack, Black", 0, /obj/item/storage/backpack/marine/smartpack/black, MARINE_CAN_BUY_KIT, VENDOR_ITEM_REGULAR), + list("RADIO (TAKE ALL)", 0, null, null, null), list("Headset", 0, /obj/item/device/radio/headset/almayer/mcom/synth, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY), @@ -134,11 +142,6 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth, list( list("Latex Gloves", 0, /obj/item/clothing/gloves/latex, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_REGULAR), list("BACKPACK (CHOOSE 1)", 0, null, null, null), - list("Smartpack, Blue", 0, /obj/item/storage/backpack/marine/smartpack, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), - list("Smartpack, Green", 0, /obj/item/storage/backpack/marine/smartpack/green, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), - list("Smartpack, Tan", 0, /obj/item/storage/backpack/marine/smartpack/tan, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), - list("Smartpack, White", 0, /obj/item/storage/backpack/marine/smartpack/white, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), - list("Smartpack, Black", 0, /obj/item/storage/backpack/marine/smartpack/black, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), list("Logistics IMP Backpack", 0, /obj/item/storage/backpack/marine/satchel/big, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), list("Expedition Chestrig", 0, /obj/item/storage/backpack/marine/satchel/intel/chestrig, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), @@ -402,12 +405,10 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth_snowflake, list( GLOBAL_LIST_INIT(cm_vending_synth_tools, list( list("PK-130", 0, null, null, null), - list("PK-130 SIMI Wrist-Mounted Computer", 15, /obj/item/clothing/gloves/synth, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY), list("PK-130 Repair Mode", 7, /obj/item/device/simi_chip/repair, null, VENDOR_ITEM_RECOMMENDED), list("PK-130 Protection Mode", 7, /obj/item/device/simi_chip/protect, null, VENDOR_ITEM_REGULAR), - list("PK-130 Anchor Mode", 3, /obj/item/device/simi_chip/anchor, null, VENDOR_ITEM_REGULAR), + list("PK-130 Anchor Mode", 4, /obj/item/device/simi_chip/anchor, null, VENDOR_ITEM_REGULAR), list("PK-130 Motion Detector", 4, /obj/item/device/simi_chip/motion_detector, null, VENDOR_ITEM_REGULAR), - list("PK-130 Recovery Hook", 15, /obj/item/device/simi_chip/rescue_hook, null, VENDOR_ITEM_REGULAR), list("UTILITY & SELF DEFENSE TOOLS", 0, null, null, null), list("Telescopic Baton", 15, /obj/item/weapon/telebaton, null, VENDOR_ITEM_REGULAR), From 93830afccaf201e17b4b38e45588e9fc253079ee Mon Sep 17 00:00:00 2001 From: forest2001 Date: Mon, 19 Aug 2024 01:00:33 +0100 Subject: [PATCH 158/188] x --- .../items/tools/synth_bracer/abilities/primary/anchor_form.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/tools/synth_bracer/abilities/primary/anchor_form.dm b/code/game/objects/items/tools/synth_bracer/abilities/primary/anchor_form.dm index d530d81e8324..ceaaff88e2d2 100644 --- a/code/game/objects/items/tools/synth_bracer/abilities/primary/anchor_form.dm +++ b/code/game/objects/items/tools/synth_bracer/abilities/primary/anchor_form.dm @@ -27,7 +27,7 @@ return TRUE /datum/action/human_action/synth_bracer/anchor_form/action_activate() - ..() + . = ..() switch(synth_bracer.active_ability) if(SIMI_ACTIVE_NONE) From 483b6bc28757c209bcd2899c1a21dfc9d2883b01 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Mon, 19 Aug 2024 13:04:55 +0100 Subject: [PATCH 159/188] anchor fix and on-mob sprite tweaks --- .../tools/synth_bracer/abilities/framework.dm | 22 +++-- .../abilities/primary/anchor_form.dm | 40 +++++----- .../abilities/primary/protect_form.dm | 75 +++++++++--------- .../abilities/primary/repair_form.dm | 4 +- .../items/tools/synth_bracer/synth_bracer.dm | 38 +++++++-- icons/mob/humans/onmob/synth/bracer.dmi | Bin 1092 -> 963 bytes 6 files changed, 100 insertions(+), 79 deletions(-) diff --git a/code/game/objects/items/tools/synth_bracer/abilities/framework.dm b/code/game/objects/items/tools/synth_bracer/abilities/framework.dm index cc05efadeb04..7d85be000650 100644 --- a/code/game/objects/items/tools/synth_bracer/abilities/framework.dm +++ b/code/game/objects/items/tools/synth_bracer/abilities/framework.dm @@ -145,6 +145,9 @@ synth_bracer = null return ..() +/datum/action/human_action/synth_bracer/proc/form_call() + return + /datum/action/human_action/synth_bracer/action_cooldown_check() return ability_used_time <= world.time @@ -190,9 +193,11 @@ /datum/action/human_action/synth_bracer/action_activate() . = ..() - if(is_active()) - set_inactive(category) - return FALSE + if(!istype(owner, /mob/living/carbon/human)) + return + var/mob/living/carbon/human/human_owner = owner + if(human_owner.gloves == synth_bracer) + form_call(synth_bracer, human_owner) if(!handles_cooldown && cooldown) enter_cooldown() if(!handles_charge_cost && charge_cost) @@ -204,16 +209,7 @@ return FALSE /datum/action/human_action/synth_bracer/proc/set_active(category = SIMI_SECONDARY_ACTION, set_ability = SIMI_ACTIVE_NONE) - switch(category) - if(SIMI_PRIMARY_ACTION) - synth_bracer.active_ability = set_ability - if(SIMI_SECONDARY_ACTION) - synth_bracer.active_utility = set_ability - if((synth_bracer.active_ability == SIMI_ACTIVE_NONE) && (synth_bracer.active_utility == SIMI_ACTIVE_NONE)) - synth_bracer.flags_item &= ~NODROP - else - synth_bracer.flags_item |= NODROP - synth_bracer.update_icon(synth) + synth_bracer.set_active(category, set_ability) /datum/action/human_action/synth_bracer/proc/set_inactive(category = SIMI_SECONDARY_ACTION) set_active(category, SIMI_ACTIVE_NONE) diff --git a/code/game/objects/items/tools/synth_bracer/abilities/primary/anchor_form.dm b/code/game/objects/items/tools/synth_bracer/abilities/primary/anchor_form.dm index ceaaff88e2d2..82ca7e3326f5 100644 --- a/code/game/objects/items/tools/synth_bracer/abilities/primary/anchor_form.dm +++ b/code/game/objects/items/tools/synth_bracer/abilities/primary/anchor_form.dm @@ -16,35 +16,22 @@ if(synth.is_mob_incapacitated() || synth.dazed) to_chat(synth, SPAN_WARNING("You cannot use this action while incapacitated!")) return FALSE - if((synth_bracer.battery_charge < charge_cost) && (synth_bracer.active_ability != SIMI_ABILITY_ANCHOR)) + if((synth_bracer.battery_charge < charge_cost) && (synth_bracer.active_ability != ability_tag)) to_chat(synth, SPAN_WARNING("You don't have enough charge to to do this! Charge: [synth_bracer.battery_charge]/[synth_bracer.battery_charge_max] you need [SPAN_RED(charge_cost)].")) return FALSE if(!action_cooldown_check()) return FALSE - if((synth_bracer.active_ability != SIMI_ABILITY_ANCHOR) && (synth_bracer.active_ability != SIMI_ACTIVE_NONE)) + if((synth_bracer.active_ability != ability_tag) && (synth_bracer.active_ability != SIMI_ACTIVE_NONE)) to_chat(synth, SPAN_WARNING("You cannot use this action while another primary ability is active.")) return FALSE return TRUE -/datum/action/human_action/synth_bracer/anchor_form/action_activate() - . = ..() - +/datum/action/human_action/synth_bracer/anchor_form/form_call() switch(synth_bracer.active_ability) if(SIMI_ACTIVE_NONE) - set_active(category, SIMI_ABILITY_ANCHOR) - synth_bracer.drain_charge(synth, charge_cost) - synth.status_flags &= ~CANPUSH - synth.anchored = TRUE - ADD_TRAIT(synth, TRAIT_IMMOBILIZED, TRAIT_SOURCE_EQUIPMENT(WEAR_HANDS)) - to_chat(synth, SPAN_DANGER("[name] beeps, \"You are anchored in place and cannot be moved.\"")) - synth.add_filter("synth_immobile_form", priority = 1, params = list("type" = "outline", "color" = "#2B719E", "size" = 1)) + synth_bracer.enable_anchor(charge_cost) if(SIMI_ABILITY_ANCHOR) - synth.status_flags |= CANPUSH - synth.anchored = FALSE - REMOVE_TRAIT(synth, TRAIT_IMMOBILIZED, TRAIT_SOURCE_EQUIPMENT(WEAR_HANDS)) - to_chat(synth, SPAN_DANGER("[name] beeps, \"You can now move again.\"")) - set_inactive(category) - synth.remove_filter("synth_immobile_form") + synth_bracer.disable_anchor() else to_chat(synth, SPAN_WARNING("You cannot use this action while another primary ability is active.")) return FALSE @@ -53,3 +40,20 @@ playsound(synth_bracer, 'sound/mecha/mechmove04.ogg', 25, TRUE) COOLDOWN_START(synth_bracer, sound_cooldown, 5 SECONDS) return TRUE + +/obj/item/clothing/gloves/synth/proc/enable_anchor(charge_cost) + set_active(SIMI_PRIMARY_ACTION, SIMI_ABILITY_ANCHOR) + drain_charge(wearer, charge_cost) + wearer.status_flags &= ~CANPUSH + wearer.anchored = TRUE + ADD_TRAIT(wearer, TRAIT_IMMOBILIZED, TRAIT_SOURCE_EQUIPMENT(WEAR_HANDS)) + to_chat(wearer, SPAN_DANGER("[name] beeps, \"You are anchored in place and cannot be moved.\"")) + wearer.add_filter("synth_immobile_form", priority = 1, params = list("type" = "outline", "color" = "#2B719E", "size" = 1)) + +/obj/item/clothing/gloves/synth/proc/disable_anchor() + wearer.status_flags |= CANPUSH + wearer.anchored = FALSE + REMOVE_TRAIT(wearer, TRAIT_IMMOBILIZED, TRAIT_SOURCE_EQUIPMENT(WEAR_HANDS)) + to_chat(wearer, SPAN_DANGER("[name] beeps, \"You can now move again.\"")) + set_inactive(SIMI_PRIMARY_ACTION) + wearer.remove_filter("synth_immobile_form") diff --git a/code/game/objects/items/tools/synth_bracer/abilities/primary/protect_form.dm b/code/game/objects/items/tools/synth_bracer/abilities/primary/protect_form.dm index 0641d8bce19a..ed8c57e01a85 100644 --- a/code/game/objects/items/tools/synth_bracer/abilities/primary/protect_form.dm +++ b/code/game/objects/items/tools/synth_bracer/abilities/primary/protect_form.dm @@ -9,45 +9,46 @@ category = SIMI_PRIMARY_ACTION ability_tag = SIMI_ABILITY_PROTECT -/datum/action/human_action/synth_bracer/protective_form/action_activate() - . = ..() - var/mob/living/carbon/human/user = owner - if(!issynth(user) || synth_bracer.active_ability != SIMI_ACTIVE_NONE) +/datum/action/human_action/synth_bracer/protective_form/form_call() + if((!issynth(synth) && !human_adaptable) || synth_bracer.active_ability != SIMI_ACTIVE_NONE) return if(synth_bracer.battery_charge < SIMI_PROTECTIVE_COST) - to_chat(user, SPAN_DANGER("There is a lack of charge for that action. Charge: [synth_bracer.battery_charge]/[SIMI_PROTECTIVE_COST]")) + to_chat(synth, SPAN_DANGER("There is a lack of charge for that action. Charge: [synth_bracer.battery_charge]/[SIMI_PROTECTIVE_COST]")) return + synth_bracer.enable_shield(charge_cost) - synth_bracer.flags_item |= NODROP - synth_bracer.flags_inventory |= CANTSTRIP - LAZYSET(user.brute_mod_override, src, 0.2) - LAZYSET(user.burn_mod_override, src, 0.2) - synth_bracer.saved_melee_allowed = user.melee_allowed - synth_bracer.saved_gun_allowed = user.allow_gun_usage - synth_bracer.saved_throw_allowed = user.throw_allowed - user.melee_allowed = FALSE - user.allow_gun_usage = FALSE - user.throw_allowed = FALSE - to_chat(user, SPAN_DANGER("[name] beeps, \"You are now protected, but unable to attack.\"")) - synth_bracer.drain_charge(synth, charge_cost) - playsound(synth_bracer.loc, 'sound/mecha/mechmove04.ogg', 25, TRUE) - to_chat(user, SPAN_INFO("The current charge reads [synth_bracer.battery_charge]/[SMARTPACK_MAX_POWER_STORED]")) - set_active(category, SIMI_ABILITY_PROTECT) - - user.add_filter("synth_protective_form", priority = 1, params = list("type" = "outline", "color" = "#369E2B", "size" = 1)) - - addtimer(CALLBACK(src, PROC_REF(protective_form_cooldown), user), 120) - -/datum/action/human_action/synth_bracer/protective_form/proc/protective_form_cooldown(mob/living/carbon/human/user) - synth_bracer.flags_item &= ~NODROP - synth_bracer.flags_inventory &= ~CANTSTRIP - user.melee_allowed = synth_bracer.saved_melee_allowed - user.throw_allowed = synth_bracer.saved_throw_allowed - user.allow_gun_usage = synth_bracer.saved_gun_allowed - LAZYREMOVE(user.brute_mod_override, src) - LAZYREMOVE(user.burn_mod_override, src) - to_chat(user, SPAN_DANGER("[name] beeps, \"The protection wears off.\"")) - playsound(synth_bracer.loc, 'sound/mecha/mechmove04.ogg', 25, TRUE) - set_inactive(category) - user.remove_filter("synth_protective_form") + +/obj/item/clothing/gloves/synth/proc/enable_shield(charge_cost) + flags_item |= NODROP + flags_inventory |= CANTSTRIP + LAZYSET(wearer.brute_mod_override, src, 0.2) + LAZYSET(wearer.burn_mod_override, src, 0.2) + saved_melee_allowed = wearer.melee_allowed + saved_gun_allowed = wearer.allow_gun_usage + saved_throw_allowed = wearer.throw_allowed + wearer.melee_allowed = FALSE + wearer.allow_gun_usage = FALSE + wearer.throw_allowed = FALSE + to_chat(wearer, SPAN_DANGER("[name] beeps, \"You are now protected, but unable to attack.\"")) + drain_charge(wearer, charge_cost) + playsound(loc, 'sound/mecha/mechmove04.ogg', 25, TRUE) + to_chat(wearer, SPAN_INFO("The current charge reads [battery_charge]/[SMARTPACK_MAX_POWER_STORED]")) + set_active(SIMI_PRIMARY_ACTION, SIMI_ABILITY_PROTECT) + + wearer.add_filter("synth_protective_form", priority = 1, params = list("type" = "outline", "color" = "#369E2B", "size" = 1)) + + addtimer(CALLBACK(src, PROC_REF(disable_shield), wearer), 120) + +/obj/item/clothing/gloves/synth/proc/disable_shield(charge_cost) + flags_item &= ~NODROP + flags_inventory &= ~CANTSTRIP + wearer.melee_allowed = saved_melee_allowed + wearer.throw_allowed = saved_throw_allowed + wearer.allow_gun_usage = saved_gun_allowed + LAZYREMOVE(wearer.brute_mod_override, src) + LAZYREMOVE(wearer.burn_mod_override, src) + to_chat(wearer, SPAN_DANGER("[name] beeps, \"The protection wears off.\"")) + playsound(loc, 'sound/mecha/mechmove04.ogg', 25, TRUE) + set_inactive(SIMI_PRIMARY_ACTION) + wearer.remove_filter("synth_protective_form") diff --git a/code/game/objects/items/tools/synth_bracer/abilities/primary/repair_form.dm b/code/game/objects/items/tools/synth_bracer/abilities/primary/repair_form.dm index ade1822be2a1..ba64e27fa279 100644 --- a/code/game/objects/items/tools/synth_bracer/abilities/primary/repair_form.dm +++ b/code/game/objects/items/tools/synth_bracer/abilities/primary/repair_form.dm @@ -9,9 +9,7 @@ category = SIMI_PRIMARY_ACTION ability_tag = SIMI_ABILITY_REPAIR -/datum/action/human_action/synth_bracer/repair_form/action_activate() - ..() - +/datum/action/human_action/synth_bracer/repair_form/form_call() if(synth.getBruteLoss() <= 0 && synth.getFireLoss() <= 0) to_chat(synth, SPAN_WARNING("[synth_bracer.name] beeps, \"No noticeable damage. Procedure cancelled.\"")) return diff --git a/code/game/objects/items/tools/synth_bracer/synth_bracer.dm b/code/game/objects/items/tools/synth_bracer/synth_bracer.dm index 1d31fe88e83a..a7f7e885d4d4 100644 --- a/code/game/objects/items/tools/synth_bracer/synth_bracer.dm +++ b/code/game/objects/items/tools/synth_bracer/synth_bracer.dm @@ -68,6 +68,8 @@ var/saved_throw_allowed var/saved_gun_allowed + var/mob/living/carbon/human/wearer + /// Cooldown on abilities that play sounds (and don't internally handle it) COOLDOWN_DECLARE(sound_cooldown) @@ -105,15 +107,15 @@ flick("bracer_[bracer_color]_startup", src) if(ishuman(user)) - var/mob/living/carbon/human/human_user = user - if(human_user.comm_title) - internal_transmitter.phone_id = "[human_user.comm_title] [human_user]" - else if(human_user.job) - internal_transmitter.phone_id = "[human_user.job] [human_user]" + var/mob/living/carbon/human/wearer = user + if(wearer.comm_title) + internal_transmitter.phone_id = "[wearer.comm_title] [wearer]" + else if(wearer.job) + internal_transmitter.phone_id = "[wearer.job] [wearer]" else - internal_transmitter.phone_id = "[human_user]" - if(human_user.assigned_squad) - internal_transmitter.phone_id += " ([human_user.assigned_squad.name])" + internal_transmitter.phone_id = "[wearer]" + if(wearer.assigned_squad) + internal_transmitter.phone_id += " ([wearer.assigned_squad.name])" else internal_transmitter.phone_id = "[user]" internal_transmitter.enabled = TRUE @@ -121,6 +123,9 @@ update_icon() /obj/item/clothing/gloves/synth/dropped(mob/user) + disable_anchor() + disable_shield() + update_actions(SIMI_ACTIONS_REMOVE, user) if(bracer_charging) @@ -131,6 +136,7 @@ internal_transmitter.phone_id = "[src]" internal_transmitter.enabled = FALSE + wearer = null return ..() /obj/item/clothing/gloves/synth/MouseDrop(obj/over_object as obj) @@ -221,6 +227,22 @@ internal_transmitter.set_tether_holder(src) else internal_transmitter.set_tether_holder(loc) + +/obj/item/clothing/gloves/synth/proc/set_active(category = SIMI_SECONDARY_ACTION, set_ability = SIMI_ACTIVE_NONE) + switch(category) + if(SIMI_PRIMARY_ACTION) + active_ability = set_ability + if(SIMI_SECONDARY_ACTION) + active_utility = set_ability + if((active_ability == SIMI_ACTIVE_NONE) && (active_utility == SIMI_ACTIVE_NONE)) + flags_item &= ~NODROP + else + flags_item |= NODROP + update_icon() + +/obj/item/clothing/gloves/synth/proc/set_inactive(category = SIMI_SECONDARY_ACTION) + set_active(category, SIMI_ACTIVE_NONE) + //############################# //###### ICON HANDLING ######## //############################# diff --git a/icons/mob/humans/onmob/synth/bracer.dmi b/icons/mob/humans/onmob/synth/bracer.dmi index f8ca763dbe15df6c02a6cebdf1633de4501e0419..7016738afd67f7b28729d4333b4e16b7a93523c3 100644 GIT binary patch delta 812 zcmX@YahQFAzN?y=TA+YXOioR5n6D})*Q)>jTZ>a%?X4zHopa~@(>r(W?AU#1(e$=w z_phDUz5Kv|1Mly!K44&AU@Qsp3ubV5b|VeQSvj$!qFyCi;pVDOJ!d9`OcI%#&ib*g zQA_>itUp^!VkgxwUw7CSdgM2kC%5D4DWWldV-B1YVOX~5YX84Amr@uQnA$vD978JR zyuEWb=#YUxTjCPdEe>D*tq)uN*kYOVrrjsqxc2qCPuXPuwI}~j9y`!Rg^xiMTT81C z+aA7te{Fbe+6JHcRAad>QNNRST`cH%z5j}R&uZ;yD|`IbXRTcKcRJhp1( zEA`&gzgp`5WU|)%f}6WjHPW8dzIt6_IMH`i&Ci%RQOT~Gu3!GIte@(Q%&#<`9`f_k z&OchZf)OtNKe@*oKDxZ}`#XM!EetnS=%zK7ZuxGFC4SG;iHc8--0ey0Ht3A|;2PawPb=^r}5wFrJdhvH_rSIQ|H>~%6zN&w>R#`gu%enV8 zU%RdEoH!=3_p^2U-$#6Xv&y}FdzhdGHk|f;7&_Vh#66w(Ny~pGy!m&KYfG!t6#kjoNCMZto-cF>9_W(Rdbzrzinpi f#QUHW@c*oO$~gi5llfm;LB@Hy`njxgN@xNA)d!keZsBDkoQRm~Tu@jjO#?YjMh||NkdXopa~@(;d4H-MMpT(e$=w z_phDUz5DJz`(#*666=m;PC858j!PgVo62)lh-O?&XsOyo?4z=o@K%=;xFqO zUnz%G)oZNkBS-pzVHSgdzj&oBUT;(7n1A6VmfSCuzn&HwO&Yg>D6aaQZzlm}V@0(J75 zbE~&&RZlL>^b+}^_|E^-n|s3R*Pb&>j5U3D{z>WG6+-nMhUbe-zx`uae@1=r^zNT? zjplQI+8g;i-R-5%FZ)gyzkF)gajx{!7%5JX40;vd#N+a+F7dA_a#I`2bexGmHat(e`odk z`nht&+Ga~*S0)C0k5740Ue|p7p7sCdVL4vAgTB9I{QIxF=g+x(1D5iF4ZE8;nScEi zm;4!f<3K&zS++OrOBk1ywY3X0|4O@W`1#$}zo5Vcf(PQ8e*d2K+@?Om@;>Kz`CCWJ zr|-);6ji(4x?bbm@vArXp1$;R?xuZn-t!iv)lXScQn!4K{`2a?u|9t%O*!{|%Gakg z`4ft7Z|Q0U`nJ~cesSyf{7qm*ae3v!5GxoMEUcgYwEJ1K+qr46aQp=;oBh$!@{7x> z&aO=fwE=PL-QWLN7=3b8MMd3qGrxnfb3U=z*zJ!leEj2l!n20-)9;(sPdW2mq8@6V z!<>>cZ>8thhwQOm^MUuAyxmfl!cgI7FriNUTlh6~ zKNg6E4L8sK-(G896L)Ci%5VQ3t+lzY9zU6Ax4pLX~B%UtHJ654Hi^1aco z Date: Mon, 19 Aug 2024 15:58:19 +0100 Subject: [PATCH 160/188] fix --- code/game/objects/items/tools/synth_bracer/synth_bracer.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/tools/synth_bracer/synth_bracer.dm b/code/game/objects/items/tools/synth_bracer/synth_bracer.dm index a7f7e885d4d4..b11b2b19474c 100644 --- a/code/game/objects/items/tools/synth_bracer/synth_bracer.dm +++ b/code/game/objects/items/tools/synth_bracer/synth_bracer.dm @@ -107,7 +107,7 @@ flick("bracer_[bracer_color]_startup", src) if(ishuman(user)) - var/mob/living/carbon/human/wearer = user + wearer = user if(wearer.comm_title) internal_transmitter.phone_id = "[wearer.comm_title] [wearer]" else if(wearer.job) From a8e8d7e663fb3ab6d164ee0c109bd4edbcaf7246 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Fri, 23 Aug 2024 22:19:07 +0100 Subject: [PATCH 161/188] drop fix --- .../tools/synth_bracer/abilities/primary/anchor_form.dm | 2 ++ .../tools/synth_bracer/abilities/primary/protect_form.dm | 2 ++ code/game/objects/items/tools/synth_bracer/synth_bracer.dm | 6 +++--- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/tools/synth_bracer/abilities/primary/anchor_form.dm b/code/game/objects/items/tools/synth_bracer/abilities/primary/anchor_form.dm index 82ca7e3326f5..f55ff476784f 100644 --- a/code/game/objects/items/tools/synth_bracer/abilities/primary/anchor_form.dm +++ b/code/game/objects/items/tools/synth_bracer/abilities/primary/anchor_form.dm @@ -51,6 +51,8 @@ wearer.add_filter("synth_immobile_form", priority = 1, params = list("type" = "outline", "color" = "#2B719E", "size" = 1)) /obj/item/clothing/gloves/synth/proc/disable_anchor() + if(!active_ability == SIMI_ABILITY_ANCHOR) + return FALSE wearer.status_flags |= CANPUSH wearer.anchored = FALSE REMOVE_TRAIT(wearer, TRAIT_IMMOBILIZED, TRAIT_SOURCE_EQUIPMENT(WEAR_HANDS)) diff --git a/code/game/objects/items/tools/synth_bracer/abilities/primary/protect_form.dm b/code/game/objects/items/tools/synth_bracer/abilities/primary/protect_form.dm index ed8c57e01a85..61eb1bb6580a 100644 --- a/code/game/objects/items/tools/synth_bracer/abilities/primary/protect_form.dm +++ b/code/game/objects/items/tools/synth_bracer/abilities/primary/protect_form.dm @@ -41,6 +41,8 @@ addtimer(CALLBACK(src, PROC_REF(disable_shield), wearer), 120) /obj/item/clothing/gloves/synth/proc/disable_shield(charge_cost) + if(!active_ability == SIMI_ABILITY_PROTECT) + return FALSE flags_item &= ~NODROP flags_inventory &= ~CANTSTRIP wearer.melee_allowed = saved_melee_allowed diff --git a/code/game/objects/items/tools/synth_bracer/synth_bracer.dm b/code/game/objects/items/tools/synth_bracer/synth_bracer.dm index b11b2b19474c..f618d55478e4 100644 --- a/code/game/objects/items/tools/synth_bracer/synth_bracer.dm +++ b/code/game/objects/items/tools/synth_bracer/synth_bracer.dm @@ -64,9 +64,9 @@ var/bracer_color = SIMI_COLOR_DEFAULT // Capability states used in FORITIFY mode. - var/saved_melee_allowed - var/saved_throw_allowed - var/saved_gun_allowed + var/saved_melee_allowed = TRUE + var/saved_throw_allowed = TRUE + var/saved_gun_allowed = FALSE var/mob/living/carbon/human/wearer From ae1e6400f25dccabdf2f38227049146ec271d038 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Sat, 24 Aug 2024 19:13:44 +0100 Subject: [PATCH 162/188] fix 2.0 --- .../items/tools/synth_bracer/abilities/primary/anchor_form.dm | 2 +- .../items/tools/synth_bracer/abilities/primary/protect_form.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/tools/synth_bracer/abilities/primary/anchor_form.dm b/code/game/objects/items/tools/synth_bracer/abilities/primary/anchor_form.dm index f55ff476784f..a7e9c4982adb 100644 --- a/code/game/objects/items/tools/synth_bracer/abilities/primary/anchor_form.dm +++ b/code/game/objects/items/tools/synth_bracer/abilities/primary/anchor_form.dm @@ -51,7 +51,7 @@ wearer.add_filter("synth_immobile_form", priority = 1, params = list("type" = "outline", "color" = "#2B719E", "size" = 1)) /obj/item/clothing/gloves/synth/proc/disable_anchor() - if(!active_ability == SIMI_ABILITY_ANCHOR) + if(!(active_ability == SIMI_ABILITY_ANCHOR)) return FALSE wearer.status_flags |= CANPUSH wearer.anchored = FALSE diff --git a/code/game/objects/items/tools/synth_bracer/abilities/primary/protect_form.dm b/code/game/objects/items/tools/synth_bracer/abilities/primary/protect_form.dm index 61eb1bb6580a..4246b780a73b 100644 --- a/code/game/objects/items/tools/synth_bracer/abilities/primary/protect_form.dm +++ b/code/game/objects/items/tools/synth_bracer/abilities/primary/protect_form.dm @@ -41,7 +41,7 @@ addtimer(CALLBACK(src, PROC_REF(disable_shield), wearer), 120) /obj/item/clothing/gloves/synth/proc/disable_shield(charge_cost) - if(!active_ability == SIMI_ABILITY_PROTECT) + if(!(active_ability == SIMI_ABILITY_PROTECT)) return FALSE flags_item &= ~NODROP flags_inventory &= ~CANTSTRIP From 18f20bddf05e95f934c20a55d3afa36c47fbc87f Mon Sep 17 00:00:00 2001 From: forest2001 Date: Sat, 24 Aug 2024 19:18:33 +0100 Subject: [PATCH 163/188] Hrm --- code/game/jobs/job/special/uscm.dm | 2 +- maps/map_files/USS_Almayer/USS_Almayer.dmm | 2 +- maps/map_files/USS_Runtime/USS_Runtime.dmm | 6 +++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/code/game/jobs/job/special/uscm.dm b/code/game/jobs/job/special/uscm.dm index fcfa261db1a2..714692cdb955 100644 --- a/code/game/jobs/job/special/uscm.dm +++ b/code/game/jobs/job/special/uscm.dm @@ -53,7 +53,7 @@ entry_message_body = "You are a [corporate ? FACTION_WY : FACTION_MARINE] AI Service Technician temporarily assigned to the [MAIN_SHIP_NAME]. Your goal is to ensure the onboard AI, [MAIN_AI_SYSTEM], is operating effectively. Your job involves heavy roleplay and requires you to behave like [corporate ? "a senior corporate representative, remaining in character at all times.
As a Weyland Yutani Technician you have access to the Corporate Office aboard the USS Almayer. Although you should cooperate with the onboard Liaison, you are not their subordinate nor they yours. You should help The Company interests where applicable but do not abuse your access to the AI Systems." : "an officer and to stay in character at all times. You are required to adhere to and obey
Marine Law. Failure to do so may result in punitive action against you. Godspeed.\n\nThe access code for APOLLO Interface is [GLOB.ares_link.code_apollo].\nThe access code for ARES Interface is [GLOB.ares_link.code_interface]."]" return ..() -/obj/effect/landmark/start/aist +/obj/effect/landmark/start/ai_tech name = JOB_AI_TECH icon_state = "aist_spawn" job = /datum/job/special/uscm/ai_tech diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index 7a764e7639cb..72b7ac64d950 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -53978,7 +53978,7 @@ /area/almayer/shipboard/brig/processing) "slW" = ( /obj/effect/landmark/late_join/aist, -/obj/effect/landmark/start/aist, +/obj/effect/landmark/start/ai_tech, /turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, /area/almayer/command/aist_office) "smi" = ( diff --git a/maps/map_files/USS_Runtime/USS_Runtime.dmm b/maps/map_files/USS_Runtime/USS_Runtime.dmm index 6dae65b01699..75d94f6a4cdb 100644 --- a/maps/map_files/USS_Runtime/USS_Runtime.dmm +++ b/maps/map_files/USS_Runtime/USS_Runtime.dmm @@ -29,6 +29,10 @@ /obj/effect/landmark/start/marine/medic, /turf/open/floor/almayer/plating, /area/event) +"m" = ( +/obj/effect/landmark/start/ai_tech, +/turf/open/floor/almayer/plating, +/area/event) "n" = ( /obj/effect/landmark/start/professor, /turf/open/floor/almayer/plating, @@ -247,7 +251,7 @@ a W F Q -b +m b b b From 347f95ed718b6ad50359e106573397500a9480a0 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Sat, 24 Aug 2024 19:34:41 +0100 Subject: [PATCH 164/188] temp office removal --- maps/map_files/USS_Almayer/USS_Almayer.dmm | 916 +++++---------------- 1 file changed, 205 insertions(+), 711 deletions(-) diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index 72b7ac64d950..7d4fbbbd905f 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -3061,9 +3061,6 @@ }, /turf/open/floor/grass, /area/almayer/living/starboard_garden) -"avy" = ( -/turf/open/floor/almayer/aicore/no_build/white/ai_silver, -/area/almayer/command/aist_office) "avB" = ( /turf/open/floor/almayer/redcorner/west, /area/almayer/shipboard/navigation) @@ -5425,16 +5422,6 @@ /obj/item/reagent_container/spray/cleaner, /turf/open/floor/almayer/sterile_green_side, /area/almayer/shipboard/brig/medical) -"aJb" = ( -/obj/structure/pipes/standard/simple/hidden/supply/no_boom, -/obj/structure/machinery/door/airlock/almayer/generic{ - name = "\improper AIST Office"; - dir = 1; - req_one_access_txt = "31;92"; - masterkey_resist = 1 - }, -/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, -/area/almayer/command/aist_office) "aJc" = ( /obj/structure/machinery/door/airlock/almayer/command{ name = "\improper Commanding Officer's Mess" @@ -7508,16 +7495,6 @@ /obj/structure/largecrate/random/secure, /turf/open/floor/almayer/plate, /area/almayer/hallways/hangar) -"aXi" = ( -/obj/structure/bed/chair/office/dark{ - dir = 4 - }, -/obj/structure/machinery/computer/working_joe{ - dir = 8; - pixel_x = 29 - }, -/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, -/area/almayer/command/aist_office) "aXj" = ( /obj/structure/largecrate/random/barrel/white, /turf/open/floor/almayer/plate, @@ -8735,10 +8712,6 @@ }, /turf/open/floor/almayer/plate, /area/almayer/maint/hull/upper/u_m_p) -"bin" = ( -/obj/structure/pipes/standard/simple/hidden/supply/no_boom, -/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, -/area/almayer/command/aist_office) "biq" = ( /obj/structure/surface/table/almayer, /obj/item/reagent_container/glass/beaker/large, @@ -10294,9 +10267,7 @@ /area/almayer/squads/alpha) "bwi" = ( /obj/structure/machinery/cm_vending/sorted/attachments/blend, -/turf/closed/wall/almayer{ - opacity = 0 - }, +/turf/open/floor/almayer/plate, /area/almayer/squads/req) "bwl" = ( /obj/effect/decal/warning_stripes{ @@ -11225,13 +11196,6 @@ "bEG" = ( /turf/open/floor/almayer/red/southeast, /area/almayer/squads/alpha) -"bEJ" = ( -/obj/structure/pipes/vents/pump/no_boom/gas{ - vent_tag = "AIST Office"; - dir = 8 - }, -/turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, -/area/almayer/command/aist_office) "bEK" = ( /obj/effect/decal/warning_stripes{ icon_state = "N"; @@ -14360,9 +14324,6 @@ /area/almayer/shipboard/brig/armory) "chC" = ( /obj/structure/pipes/vents/pump/on, -/obj/structure/bed/chair{ - dir = 4 - }, /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/req) "chL" = ( @@ -15514,10 +15475,6 @@ }, /turf/open/floor/almayer/plate, /area/almayer/hallways/hangar) -"cuB" = ( -/obj/structure/pipes/standard/simple/hidden/supply/no_boom, -/turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, -/area/almayer/command/aist_office) "cuC" = ( /turf/closed/wall/almayer/outer, /area/almayer/engineering/upper_engineering/starboard) @@ -15709,15 +15666,6 @@ }, /turf/open/floor/almayer/sterile_green_side/west, /area/almayer/medical/lower_medical_medbay) -"cAs" = ( -/obj/structure/machinery/light{ - dir = 4 - }, -/obj/structure/pipes/standard/simple/hidden/supply/no_boom{ - dir = 10 - }, -/turf/open/floor/almayer/aicore/no_build/white/ai_silver/east, -/area/almayer/command/aist_office) "cAy" = ( /obj/structure/closet/secure_closet/guncabinet/red/mp_armory_shotgun, /obj/structure/machinery/camera/autoname/almayer{ @@ -17258,7 +17206,6 @@ /area/almayer/living/grunt_rnr) "dfD" = ( /obj/effect/landmark/start/intel, -/obj/effect/landmark/late_join/intel, /turf/open/floor/plating/plating_catwalk, /area/almayer/engineering/port_atmos) "dgg" = ( @@ -17443,11 +17390,6 @@ pixel_x = 8; pixel_y = -8 }, -/obj/item/device/radio/intercom{ - frequency = 1500; - name = "AI Core Intercom"; - pixel_x = 28 - }, /turf/open/floor/almayer/aicore/no_build, /area/almayer/command/airoom) "dkO" = ( @@ -17996,19 +17938,6 @@ }, /turf/open/floor/almayer/plate, /area/almayer/living/briefing) -"dyh" = ( -/obj/structure/filingcabinet{ - density = 0; - pixel_x = 8; - pixel_y = 18 - }, -/obj/structure/filingcabinet{ - density = 0; - pixel_x = -8; - pixel_y = 18 - }, -/turf/open/floor/almayer/aicore/no_build/white/ai_silver/west, -/area/almayer/command/aist_office) "dyj" = ( /obj/structure/closet/secure_closet/commander, /obj/item/clothing/suit/storage/marine/light/vest, @@ -18864,12 +18793,8 @@ pixel_x = 4; pixel_y = 11 }, -/obj/structure/sign/ROcreed{ - pixel_y = 30 - }, -/obj/item/device/flashlight/lamp{ - pixel_y = -11; - pixel_x = 7 +/obj/structure/sign/poster/propaganda{ + pixel_y = 34 }, /turf/open/floor/almayer/green/north, /area/almayer/squads/req) @@ -19420,15 +19345,6 @@ }, /turf/open/floor/almayer/plate, /area/almayer/living/briefing) -"ebH" = ( -/obj/structure/stairs, -/obj/effect/step_trigger/teleporter_vector{ - name = "Almayer_AresUp"; - vector_x = -3; - vector_y = -1 - }, -/turf/open/floor/almayer/aicore/glowing/no_build/ai_floor3, -/area/almayer/command/airoom) "ebI" = ( /obj/item/clothing/shoes/red, /turf/open/floor/plating/plating_catwalk, @@ -19861,10 +19777,6 @@ /turf/open/floor/almayer/silver/north, /area/almayer/hallways/upper/midship_hallway) "ejO" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "S"; - layer = 3.3 - }, /obj/effect/decal/warning_stripes{ icon_state = "S"; layer = 3.3 @@ -20047,12 +19959,6 @@ }, /turf/open/floor/almayer/plate, /area/almayer/engineering/lower/workshop) -"enw" = ( -/obj/structure/pipes/vents/scrubber/no_boom{ - dir = 1 - }, -/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, -/area/almayer/command/aist_office) "enK" = ( /obj/effect/step_trigger/clone_cleaner, /obj/structure/blocker/forcefield/multitile_vehicles, @@ -22282,22 +22188,6 @@ }, /turf/open/floor/almayer/blue/west, /area/almayer/hallways/upper/midship_hallway) -"fjX" = ( -/obj/structure/surface/table/reinforced/almayer_B, -/obj/item/folder/white{ - pixel_x = -12 - }, -/obj/item/paper_bin/uscm{ - pixel_y = 6 - }, -/obj/item/tool/pen/fountain{ - pixel_y = 3 - }, -/obj/item/tool/pen/fountain{ - pixel_y = 9 - }, -/turf/open/floor/almayer/aicore/no_build/white/ai_silver, -/area/almayer/command/aist_office) "fkK" = ( /obj/structure/machinery/door/airlock/almayer/maint{ dir = 1 @@ -22322,12 +22212,6 @@ pixel_y = 10; req_one_access_txt = "1;21" }, -/obj/item/paper_bin/uscm{ - pixel_y = -4 - }, -/obj/item/tool/pen{ - pixel_y = -5 - }, /turf/open/floor/almayer/plate, /area/almayer/squads/req) "fkX" = ( @@ -22845,10 +22729,6 @@ /obj/effect/step_trigger/message/memorial, /turf/open/floor/almayer/plate, /area/almayer/living/starboard_garden) -"fwF" = ( -/obj/structure/flora/pottedplant/random, -/turf/open/floor/almayer/aicore/no_build/white/ai_silver, -/area/almayer/command/aist_office) "fwK" = ( /turf/closed/wall/almayer/outer, /area/almayer/hallways/lower/starboard_umbilical) @@ -23496,17 +23376,6 @@ }, /turf/open/floor/almayer/plating/northeast, /area/almayer/shipboard/stern_point_defense) -"fLy" = ( -/obj/effect/step_trigger/clone_cleaner, -/obj/structure/machinery/door_control{ - id = "ARES AIST"; - name = "Privacy Shutters"; - pixel_x = 24; - pixel_y = 8; - req_one_access_txt = "31;92" - }, -/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, -/area/almayer/command/aist_office) "fLF" = ( /obj/structure/machinery/brig_cell/perma_2{ pixel_x = -32 @@ -25408,38 +25277,6 @@ /obj/structure/machinery/suit_storage_unit/carbon_unit, /turf/open/floor/almayer/plate, /area/almayer/engineering/lower) -"gEI" = ( -/obj/structure/surface/table/reinforced/almayer_B{ - climbable = 0; - indestructible = 1; - unacidable = 1; - unslashable = 1 - }, -/obj/structure/machinery/computer/cameras/almayer/ares{ - pixel_x = -4; - pixel_y = 6 - }, -/obj/structure/machinery/computer/cameras/almayer{ - pixel_y = 6; - pixel_x = 28 - }, -/obj/structure/machinery/computer/view_objectives{ - pixel_x = 12; - pixel_y = 6 - }, -/obj/item/device/radio/intercom{ - frequency = 1500; - name = "AI Core Intercom"; - pixel_y = 32 - }, -/obj/item/device/radio/intercom{ - freerange = 1; - name = "General Listening Channel"; - pixel_y = 32; - pixel_x = 14 - }, -/turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, -/area/almayer/command/aist_office) "gFa" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -25759,11 +25596,6 @@ pixel_y = 6 }, /obj/item/tool/pen, -/obj/item/device/radio/intercom{ - freerange = 1; - name = "General Listening Channel"; - pixel_x = 28 - }, /turf/open/floor/almayer/aicore/no_build, /area/almayer/command/airoom) "gLz" = ( @@ -25835,12 +25667,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/lower/starboard_fore_hallway) -"gMx" = ( -/obj/structure/pipes/standard/simple/hidden/supply/no_boom{ - dir = 4 - }, -/turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, -/area/almayer/command/aist_office) "gMN" = ( /obj/effect/decal/warning_stripes{ icon_state = "E"; @@ -26020,12 +25846,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/medical/medical_science) -"gQH" = ( -/obj/structure/machinery/light{ - dir = 8 - }, -/turf/open/floor/almayer/aicore/no_build/white/ai_silver/west, -/area/almayer/command/aist_office) "gQO" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 6 @@ -26038,12 +25858,6 @@ }, /turf/open/floor/almayer/plate, /area/almayer/maint/hull/lower/l_f_p) -"gQW" = ( -/obj/structure/machinery/status_display{ - pixel_y = 30 - }, -/turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, -/area/almayer/command/aist_office) "gRc" = ( /obj/item/tool/wet_sign, /turf/open/floor/plating/plating_catwalk, @@ -26821,12 +26635,6 @@ /obj/structure/bed/sofa/vert/grey/bot, /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/north1) -"hhW" = ( -/obj/structure/pipes/vents/pump/no_boom{ - dir = 1 - }, -/turf/open/floor/almayer/aicore/no_build/white/ai_silver, -/area/almayer/command/aist_office) "hif" = ( /obj/structure/machinery/floodlight/landing, /turf/open/floor/almayer/plate, @@ -27822,12 +27630,6 @@ /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer/plate, /area/almayer/hallways/lower/repair_bay) -"hBK" = ( -/obj/structure/pipes/standard/simple/hidden/supply/no_boom{ - dir = 4 - }, -/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, -/area/almayer/command/aist_office) "hBL" = ( /obj/structure/closet/emcloset, /turf/open/floor/almayer/cargo, @@ -28298,12 +28100,6 @@ }, /turf/open/floor/almayer/plate, /area/almayer/hallways/lower/starboard_fore_hallway) -"hOw" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/open/floor/almayer, -/area/almayer/squads/req) "hOV" = ( /turf/closed/wall/almayer, /area/almayer/maint/lower/constr) @@ -29313,10 +29109,6 @@ }, /turf/open/floor/wood/ship, /area/almayer/shipboard/sea_office) -"ike" = ( -/obj/structure/surface/table/reinforced/almayer_B, -/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, -/area/almayer/command/aist_office) "ikl" = ( /turf/open/floor/almayer/cargo_arrow, /area/almayer/hallways/lower/vehiclehangar) @@ -29949,17 +29741,6 @@ }, /turf/open/floor/almayer/plate, /area/almayer/living/offices) -"izz" = ( -/obj/structure/stairs{ - icon_state = "ramptop" - }, -/obj/effect/projector{ - name = "Almayer_AresUp"; - vector_x = -3; - vector_y = -1 - }, -/turf/open/floor/almayer/aicore/no_build, -/area/almayer/command/airoom) "izY" = ( /obj/structure/machinery/autodoc_console, /turf/open/floor/almayer/sterile_green_side/west, @@ -30241,7 +30022,6 @@ pixel_y = 29; serial_number = 12 }, -/obj/effect/landmark/late_join/intel, /turf/open/floor/plating/plating_catwalk, /area/almayer/engineering/port_atmos) "iIb" = ( @@ -30296,10 +30076,6 @@ /obj/structure/machinery/light/small, /turf/open/floor/almayer/plate, /area/almayer/maint/upper/u_a_s) -"iJq" = ( -/obj/structure/surface/table/reinforced/almayer_B, -/turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, -/area/almayer/command/aist_office) "iJs" = ( /obj/structure/disposalpipe/segment, /obj/structure/pipes/standard/simple/hidden/supply, @@ -30312,14 +30088,6 @@ }, /turf/open/floor/almayer/silver, /area/almayer/command/cichallway) -"iJC" = ( -/obj/structure/machinery/camera/autoname/almayer/containment/ares{ - dir = 8; - c_tag = "AI - Reception Desk"; - autoname = 0 - }, -/turf/open/floor/almayer/aicore/no_build, -/area/almayer/command/airoom) "iJS" = ( /obj/structure/machinery/cm_vending/gear/tl{ density = 0; @@ -30682,24 +30450,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/maint/hull/lower/l_f_s) -"iRj" = ( -/obj/structure/stairs{ - icon_state = "ramptop" - }, -/obj/effect/projector{ - name = "Almayer_AresUp"; - vector_x = 3; - vector_y = 1 - }, -/obj/structure/machinery/door_control{ - id = "ARES AIST"; - name = "Privacy Shutters"; - pixel_x = 24; - pixel_y = -8; - req_one_access_txt = "31;92" - }, -/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, -/area/almayer/command/aist_office) "iRp" = ( /obj/structure/window/framed/almayer, /obj/structure/machinery/door/poddoor/shutters/almayer/open{ @@ -31045,9 +30795,6 @@ /obj/structure/machinery/cm_vending/sorted/marine_food, /turf/open/floor/almayer/red/southwest, /area/almayer/shipboard/brig/processing) -"iVV" = ( -/turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, -/area/almayer/command/aist_office) "iWa" = ( /obj/structure/sign/safety/water{ pixel_x = 8; @@ -32330,50 +32077,6 @@ /obj/effect/step_trigger/clone_cleaner, /turf/open/floor/almayer/aicore/glowing/no_build/ai_floor3, /area/almayer/command/airoom) -"jtk" = ( -/obj/structure/machinery/sentry_holder/almayer/mini/aicore{ - dir = 4 - }, -/obj/structure/machinery/door_control{ - id = "ARES StairsUpper"; - name = "Stairway Shutters"; - pixel_x = 36; - req_one_access_txt = "31;92"; - pixel_y = -2 - }, -/obj/structure/machinery/door_control{ - id = "ARES StairsLower"; - name = "Corridor Shutters"; - pixel_x = 36; - pixel_y = 4; - req_one_access_txt = "31;92" - }, -/obj/structure/machinery/door_control{ - id = "ARES Interior"; - indestructible = 1; - name = "Core Shutters"; - pixel_x = 36; - pixel_y = 10; - req_one_access_txt = "31;92" - }, -/obj/structure/machinery/door_control{ - id = "ARES Railing"; - indestructible = 1; - name = "Core Railings"; - needs_power = 0; - pixel_x = 28; - req_one_access_txt = "31;92"; - pixel_y = 7 - }, -/obj/structure/machinery/door_control{ - id = "ARES Operations Left"; - name = "Records Room Shutters"; - pixel_x = 28; - pixel_y = 1; - req_one_access_txt = "31;92" - }, -/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, -/area/almayer/command/aist_office) "jts" = ( /obj/structure/machinery/door/firedoor/border_only/almayer, /obj/structure/disposalpipe/segment{ @@ -32676,10 +32379,6 @@ icon_state = "S"; layer = 3.3 }, -/obj/item/device/radio/intercom{ - frequency = 1500; - name = "AI Core Intercom" - }, /turf/open/floor/almayer/aicore/glowing/no_build, /area/almayer/command/airoom) "jzZ" = ( @@ -34225,19 +33924,6 @@ }, /turf/open/floor/almayer/tcomms, /area/almayer/engineering/lower/engine_core) -"kiJ" = ( -/obj/effect/step_trigger/clone_cleaner, -/obj/structure/machinery/door/poddoor/shutters/almayer{ - id = "ARES AIST"; - name = "\improper Privacy Shutters" - }, -/obj/structure/machinery/door/airlock/almayer/generic/glass{ - name = "\improper AIST Office"; - dir = 1; - masterkey_resist = 1 - }, -/turf/open/floor/almayer/no_build/test_floor4, -/area/almayer/command/aist_office) "kiM" = ( /obj/structure/surface/table/reinforced/almayer_B, /turf/open/floor/almayer/plate, @@ -36060,9 +35746,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/cells) -"kWf" = ( -/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, -/area/almayer/command/aist_office) "kWk" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 10 @@ -37275,14 +36958,6 @@ }, /turf/open/floor/almayer/plate, /area/almayer/engineering/lower) -"lvv" = ( -/obj/structure/machinery/door/airlock/almayer/secure/reinforced{ - name = "\improper AIST Office"; - req_access = null - }, -/obj/effect/step_trigger/clone_cleaner, -/turf/open/floor/almayer/no_build/test_floor4, -/area/almayer/command/airoom) "lvA" = ( /turf/open/floor/almayer/blue/north, /area/almayer/living/pilotbunks) @@ -40575,9 +40250,6 @@ "mRW" = ( /turf/open/floor/almayer/research/containment/corner1, /area/almayer/medical/containment/cell/cl) -"mSb" = ( -/turf/open/floor/almayer/aicore/no_build/white/ai_silver/southwest, -/area/almayer/command/aist_office) "mSi" = ( /obj/structure/bed/sofa/vert/grey/top{ pixel_y = 11 @@ -42341,9 +42013,6 @@ }, /turf/open/floor/almayer/orange, /area/almayer/squads/bravo) -"nCs" = ( -/turf/closed/wall/almayer/aicore/white/hull, -/area/almayer/command/aist_office) "nCx" = ( /obj/structure/surface/table/woodentable/fancy, /obj/item/reagent_container/food/drinks/bottle/whiskey{ @@ -42701,13 +42370,6 @@ }, /turf/open/floor/almayer/no_build/plating, /area/almayer/command/airoom) -"nKf" = ( -/obj/structure/machinery/cm_vending/clothing/senior_officer{ - req_one_access_txt = "1;92"; - req_access = null - }, -/turf/open/floor/almayer/aicore/no_build/white/ai_silver/northeast, -/area/almayer/command/aist_office) "nKq" = ( /obj/structure/machinery/status_display{ pixel_x = 16; @@ -42784,12 +42446,6 @@ /obj/item/reagent_container/food/condiment/hotsauce/franks, /turf/open/floor/almayer/bluefull, /area/almayer/living/briefing) -"nMP" = ( -/obj/structure/pipes/standard/simple/hidden/supply/no_boom{ - dir = 5 - }, -/turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, -/area/almayer/command/aist_office) "nMV" = ( /obj/structure/machinery/cm_vending/sorted/medical/wall_med{ pixel_y = 25 @@ -44750,33 +44406,6 @@ }, /turf/open/floor/almayer/plate, /area/almayer/maint/hull/upper/u_a_p) -"oBn" = ( -/obj/structure/surface/table/reinforced/almayer_B, -/obj/structure/machinery/light{ - unacidable = 1; - unslashable = 1 - }, -/obj/structure/transmitter/rotary{ - name = "Office Telephone"; - phone_category = "ARES"; - phone_color = "blue"; - phone_id = "AIST Office"; - pixel_x = 8; - pixel_y = 9 - }, -/obj/structure/machinery/aicore_lockdown{ - pixel_x = -5; - req_one_access_txt = "31;92" - }, -/obj/structure/machinery/door_control{ - id = "ARES AIST"; - name = "Privacy Shutters"; - pixel_y = 11; - req_one_access_txt = "31;92"; - pixel_x = -5 - }, -/turf/open/floor/almayer/aicore/no_build/white/ai_silver, -/area/almayer/command/aist_office) "oBq" = ( /obj/structure/bed, /obj/structure/machinery/flasher{ @@ -45359,12 +44988,6 @@ }, /turf/open/floor/almayer/test_floor4, /area/almayer/shipboard/brig/lobby) -"oLJ" = ( -/obj/structure/pipes/standard/manifold/hidden/supply/no_boom{ - dir = 1 - }, -/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, -/area/almayer/command/aist_office) "oLN" = ( /obj/effect/decal/warning_stripes{ icon_state = "NW-out" @@ -45804,7 +45427,6 @@ /turf/open/floor/almayer, /area/almayer/maint/hull/upper/u_f_s) "oUw" = ( -/obj/structure/closet/secure_closet/quartermaster_uscm, /turf/open/floor/almayer/green, /area/almayer/squads/req) "oUx" = ( @@ -47049,9 +46671,6 @@ "pvP" = ( /turf/open/floor/almayer/redcorner/north, /area/almayer/shipboard/starboard_missiles) -"pvT" = ( -/turf/open/floor/almayer/aicore/no_build/white/ai_silver/west, -/area/almayer/command/aist_office) "pwl" = ( /obj/structure/sign/safety/bridge{ pixel_x = 15; @@ -47249,12 +46868,7 @@ /obj/structure/surface/table/almayer, /obj/item/storage/firstaid/regular, /obj/item/clipboard, -/obj/item/tool/pen{ - pixel_y = -17 - }, -/obj/item/paper_bin/uscm{ - pixel_y = -16 - }, +/obj/item/tool/pen, /turf/open/floor/almayer/plate, /area/almayer/squads/req) "pAV" = ( @@ -48659,14 +48273,6 @@ /obj/structure/machinery/light, /turf/open/floor/almayer/red/southwest, /area/almayer/lifeboat_pumps/south1) -"qhd" = ( -/obj/structure/machinery/camera/autoname/almayer/containment/ares{ - dir = 4; - c_tag = "AI - AIST Office"; - autoname = 0 - }, -/turf/open/floor/almayer/aicore/no_build/white/ai_silver/west, -/area/almayer/command/aist_office) "qhg" = ( /obj/structure/largecrate/random/barrel/yellow, /turf/open/floor/almayer/plate, @@ -48685,12 +48291,6 @@ }, /turf/open/floor/almayer/sterile_green_side/north, /area/almayer/medical/upper_medical) -"qhA" = ( -/obj/structure/pipes/standard/simple/hidden/supply/no_boom{ - dir = 6 - }, -/turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, -/area/almayer/command/aist_office) "qhD" = ( /obj/structure/closet{ name = "backpack storage" @@ -51585,11 +51185,6 @@ /obj/item/storage/box/m94, /obj/item/storage/box/m94, /obj/item/stack/sheet/mineral/plastic/small_stack, -/obj/item/frame/rack, -/obj/item/frame/rack, -/obj/item/frame/rack, -/obj/item/frame/rack, -/obj/item/frame/rack, /turf/open/floor/almayer/test_floor4, /area/almayer/squads/req) "rnF" = ( @@ -52847,10 +52442,10 @@ pixel_x = 1 }, /obj/structure/machinery/camera/autoname/almayer/containment/ares{ - dir = 8; - pixel_y = 2; autoname = 0; - c_tag = "AI - Reception Corridor" + c_tag = "AI - Reception Exterior"; + dir = 8; + pixel_y = 2 }, /turf/open/floor/almayer/silver/east, /area/almayer/hallways/upper/midship_hallway) @@ -53857,9 +53452,6 @@ }, /turf/open/floor/almayer/orange/north, /area/almayer/engineering/ce_room) -"sjo" = ( -/turf/closed/wall/almayer/aicore/white/reinforced, -/area/almayer/command/aist_office) "sjr" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/lifeboat/blastdoor{ id_tag = "Boat1-D1"; @@ -53976,11 +53568,6 @@ "slF" = ( /turf/open/floor/almayer/red/northwest, /area/almayer/shipboard/brig/processing) -"slW" = ( -/obj/effect/landmark/late_join/aist, -/obj/effect/landmark/start/ai_tech, -/turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, -/area/almayer/command/aist_office) "smi" = ( /turf/open/floor/almayer/green, /area/almayer/living/grunt_rnr) @@ -54447,14 +54034,6 @@ }, /turf/open/floor/almayer/plate, /area/almayer/maint/hull/lower/l_m_p) -"svW" = ( -/obj/item/device/radio/intercom{ - frequency = 1500; - name = "AI Core Intercom"; - pixel_x = -32 - }, -/turf/open/floor/almayer/silver/west, -/area/almayer/hallways/upper/midship_hallway) "swn" = ( /obj/structure/machinery/cm_vending/sorted/medical/wall_med{ pixel_y = -25 @@ -54898,15 +54477,6 @@ /obj/item/tool/pen, /turf/open/floor/almayer/red/west, /area/almayer/shipboard/brig/starboard_hallway) -"sFz" = ( -/obj/structure/surface/table/reinforced/almayer_B, -/obj/structure/sign/safety/terminal{ - pixel_y = 26; - pixel_x = 8; - layer = 2.2 - }, -/turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, -/area/almayer/command/aist_office) "sGh" = ( /turf/open/floor/almayer/uscm/directional, /area/almayer/command/lifeboat) @@ -56058,13 +55628,6 @@ /obj/structure/largecrate/random/case/double, /turf/open/floor/plating/plating_catwalk, /area/almayer/maint/hull/lower/l_a_p) -"tgr" = ( -/obj/structure/machinery/light{ - unacidable = 1; - unslashable = 1 - }, -/turf/open/floor/almayer/aicore/no_build/white/ai_silver, -/area/almayer/command/aist_office) "tgy" = ( /obj/structure/machinery/light, /obj/effect/decal/warning_stripes{ @@ -56324,9 +55887,6 @@ }, /turf/open/floor/almayer/redfull, /area/almayer/hallways/upper/starboard) -"tlc" = ( -/turf/open/floor/almayer/aicore/no_build/white/ai_silver/east, -/area/almayer/command/aist_office) "tld" = ( /obj/structure/machinery/prop/almayer/computer{ dir = 8; @@ -57967,9 +57527,6 @@ }, /turf/open/floor/almayer/bluefull, /area/almayer/living/bridgebunks) -"tVj" = ( -/turf/open/floor/almayer/aicore/no_build/white/ai_silver/southeast, -/area/almayer/command/aist_office) "tVn" = ( /obj/structure/platform{ dir = 1 @@ -58944,15 +58501,6 @@ }, /turf/open/floor/almayer/orangecorner/west, /area/almayer/hallways/lower/starboard_umbilical) -"urx" = ( -/obj/structure/stairs, -/obj/effect/step_trigger/teleporter_vector{ - name = "Almayer_AresUp"; - vector_x = 3; - vector_y = 1 - }, -/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, -/area/almayer/command/aist_office) "ury" = ( /obj/structure/bed/chair{ dir = 8 @@ -59793,17 +59341,6 @@ /obj/effect/decal/cleanable/blood/oil, /turf/open/floor/almayer/plate, /area/almayer/maint/hull/upper/u_a_s) -"uKE" = ( -/obj/structure/stairs{ - icon_state = "ramptop" - }, -/obj/effect/projector{ - name = "Almayer_AresUp"; - vector_x = 3; - vector_y = 1 - }, -/turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, -/area/almayer/command/aist_office) "uKH" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -64959,28 +64496,6 @@ /obj/item/weapon/gun/rifle/l42a, /turf/open/floor/almayer/plate, /area/almayer/maint/upper/u_m_s) -"wEV" = ( -/obj/structure/machinery/cryopod/right{ - layer = 3.1; - pixel_y = 13 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, -/obj/effect/decal/warning_stripes{ - icon_state = "E"; - pixel_x = 1 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 1 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "W"; - pixel_x = -1 - }, -/turf/open/floor/almayer/aicore/no_build/white/ai_cargo, -/area/almayer/command/aist_office) "wFb" = ( /turf/open/floor/almayer/sterile_green_corner/east, /area/almayer/medical/lower_medical_medbay) @@ -66033,9 +65548,9 @@ /area/almayer/command/lifeboat) "xab" = ( /obj/structure/machinery/camera/autoname/almayer/containment/ares{ - dir = 1; - c_tag = "AI - Reception Lobby"; - autoname = 0 + autoname = 0; + c_tag = "AI - Reception Interior"; + dir = 1 }, /turf/open/floor/almayer/aicore/no_build, /area/almayer/command/airoom) @@ -66222,15 +65737,6 @@ }, /turf/open/floor/almayer/plate, /area/almayer/engineering/lower/workshop) -"xem" = ( -/obj/structure/stairs, -/obj/effect/step_trigger/teleporter_vector{ - name = "Almayer_AresUp"; - vector_x = -3; - vector_y = -1 - }, -/turf/open/floor/almayer/aicore/no_build, -/area/almayer/command/airoom) "xer" = ( /obj/structure/machinery/power/apc/almayer/south, /turf/open/floor/plating/plating_catwalk, @@ -66779,11 +66285,6 @@ }, /turf/open/floor/almayer/plate, /area/almayer/command/corporateliaison) -"xqZ" = ( -/obj/item/bedsheet/yellow, -/obj/structure/bed, -/turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, -/area/almayer/command/aist_office) "xrg" = ( /obj/structure/sign/safety/hazard{ pixel_x = 32; @@ -67824,13 +67325,6 @@ "xMs" = ( /turf/closed/wall/almayer/white, /area/almayer/medical/operating_room_two) -"xMw" = ( -/obj/structure/machinery/light{ - dir = 1 - }, -/obj/effect/step_trigger/clone_cleaner, -/turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, -/area/almayer/command/aist_office) "xMz" = ( /obj/effect/decal/warning_stripes{ icon_state = "E"; @@ -106251,7 +105745,7 @@ rpV cGO cGO cGO -svW +cGO cGO kaO cGO @@ -108281,7 +107775,7 @@ ryn ryn mOi xdA -iJC +qQS uUB aqU aHq @@ -112841,7 +112335,7 @@ mww sZe bdl fgm -hOw +bdj chC kuu mDj @@ -114276,7 +113770,7 @@ vub bPL bCM xSM -cgE +tez gsm bCM bbr @@ -114479,7 +113973,7 @@ qlz tez bCN ccQ -cgE +tez ccQ bCN bbr @@ -114682,7 +114176,7 @@ qlz tez bpV ccQ -cgE +tez ccQ cdn bbr @@ -114885,7 +114379,7 @@ qlz tez bCM ccQ -cgE +tez ccQ bCM bbr @@ -115088,7 +114582,7 @@ vub tez bCN ccQ -cgE +tez ccQ bCN jhb @@ -122140,21 +121634,21 @@ aKQ aaa aaa aak -aak -aak -aak -aak -aak -aak -aak -aak -aak -aak -aak -aak -aak -aak -aak +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH bdH bdH bdH @@ -122342,6 +121836,7 @@ aaa aKQ aaa aaa +aak bdH bdH bdH @@ -122357,7 +121852,6 @@ bdH bdH bdH bdH -aak bdH bdH bdH @@ -122545,7 +122039,7 @@ aaa aKQ aaa aaa -aaa +aab aaa bdH bdH @@ -122560,7 +122054,7 @@ bdH bdH bdH bdH -aak +bdH bdH bdH bdH @@ -122747,23 +122241,23 @@ aaa aaa aKQ aaa -iBn -iBn -iBn -iBn -iBn -iBn -iBn -iBn -iBn -iBn -iBn -iBn -iBn +bdH +aak +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH bdH bdH bdH -aak bdH aaa aaa @@ -122950,23 +122444,23 @@ aaa aaa aKQ aaa -iBn -nCs -nCs -nCs -nCs -nCs -nCs -nCs -nCs -nCs -nCs -iBn -iBn +bdH +aak +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH bdH bdH bdH -aak bdH aaa aaa @@ -123153,23 +122647,23 @@ aaa aaa aKQ aaa -iBn -nCs -wEV -gQH -mSb -sjo -dyh -pvT -qhd -mSb -nCs -iBn -iBn +bdH +aak +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH bdH bdH bdH -aak bdH aaa aaa @@ -123356,23 +122850,23 @@ aaa aaa aKQ aaa -iBn -nCs -slW -qhA -bin -aJb -bin -enw -kWf -avy -nCs -iBn -iBn +bdH +aak +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH bdH bdH bdH -aak bdH aaa aaa @@ -123559,23 +123053,23 @@ aaa aaa aKQ aaa -iBn -nCs -xqZ -hBK -fwF -sjo -gEI -aXi -jtk -oBn -nCs -iBn -iBn +bdH +aak +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH bdH bdH bdH -aak bdH aaa aaa @@ -123762,23 +123256,23 @@ aaa aaa aKQ aaa -iBn -nCs -iJq -oLJ -hhW -sjo -sFz -ike -ike -fjX -nCs -iBn -iBn +bdH +aak +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH bdH bdH bdH -aak bdH aaa aaa @@ -123964,24 +123458,24 @@ aab aaa aaa aKQ +aaa +bdH +aak +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH bdH -iBn -nCs -iJq -gMx -fwF -sjo -gQW -kWf -kWf -avy -nCs -iBn -iBn bdH bdH bdH -aak bdH aaa aaa @@ -124168,23 +123662,23 @@ aaa aaa aKQ bdH -iBn -nCs -nKf -cAs -bin -aJb -bin -cuB -nMP -tgr -nCs -iBn -iBn -bdH -bdH bdH aak +aak +aak +aak +aak +aak +aak +aak +aak +aak +aak +aak +aak +aak +aak +aak bdH aaa aaa @@ -124371,19 +123865,19 @@ bdH bdH aKQ bdH -nCs -nCs -nCs -nCs -nCs -nCs -xMw -iVV -bEJ -avy -nCs -iBn -iBn +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH bdH bdH bdH @@ -124573,20 +124067,20 @@ bdH bdH bdH aKQ -lmz -nCs -urx -urx -uKE -iRj -kiJ -fLy -tlc -tlc -tVj -nCs -iBn -iBn +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH bdH bdH bdH @@ -124777,17 +124271,17 @@ lmz lmz lmz lmz -nCs -nCs -nCs -nCs -nCs -nCs -nCs -nCs -nCs -nCs -nCs +iBn +iBn +iBn +iBn +iBn +iBn +iBn +iBn +iBn +iBn +iBn iBn iBn bdH @@ -124979,12 +124473,12 @@ lmz lmz lmz lmz -daz -daz -daz -daz -daz -daz +lmz +lmz +lmz +lmz +lmz +lmz lmz lmz lmz @@ -125181,13 +124675,13 @@ lmz lmz lmz lmz -daz -jtj -izz -izz -ebH -xem -daz +lmz +lmz +lmz +lmz +lmz +lmz +lmz lmz lmz lmz @@ -125385,10 +124879,10 @@ lmz lmz daz daz -lvv daz -wnh -wnh +daz +daz +daz daz daz daz @@ -126406,7 +125900,7 @@ roH ebN daz daz -wnh +daz wnh wnh daz @@ -127218,7 +126712,7 @@ gXs ebN daz daz -wnh +daz wnh wnh daz From c1304aaafea9cc0eeecc4eae92182fcc321c4ef6 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Sat, 24 Aug 2024 19:35:43 +0100 Subject: [PATCH 165/188] office restored --- maps/map_files/USS_Almayer/USS_Almayer.dmm | 1121 ++++++++++++++------ 1 file changed, 780 insertions(+), 341 deletions(-) diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index 7d4fbbbd905f..eedbcf5a133a 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -1702,6 +1702,12 @@ }, /turf/open/floor/plating, /area/almayer/engineering/port_atmos) +"amU" = ( +/obj/structure/pipes/standard/simple/hidden/supply/no_boom{ + dir = 6 + }, +/turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, +/area/space) "amX" = ( /turf/open/floor/almayer/red/north, /area/almayer/shipboard/navigation) @@ -7499,6 +7505,10 @@ /obj/structure/largecrate/random/barrel/white, /turf/open/floor/almayer/plate, /area/almayer/hallways/hangar) +"aXl" = ( +/obj/structure/surface/table/reinforced/almayer_B, +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, +/area/space) "aXx" = ( /obj/structure/machinery/cryopod{ pixel_y = 6 @@ -10038,6 +10048,22 @@ }, /turf/open/floor/almayer/plate, /area/almayer/maint/hull/upper/u_m_s) +"btW" = ( +/obj/structure/surface/table/reinforced/almayer_B, +/obj/item/folder/white{ + pixel_x = -12 + }, +/obj/item/paper_bin/uscm{ + pixel_y = 6 + }, +/obj/item/tool/pen/fountain{ + pixel_y = 3 + }, +/obj/item/tool/pen/fountain{ + pixel_y = 9 + }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver, +/area/space) "btX" = ( /obj/structure/machinery/light{ dir = 4 @@ -10315,6 +10341,28 @@ }, /turf/open/floor/almayer/plate, /area/almayer/hallways/lower/starboard_aft_hallway) +"bwB" = ( +/obj/structure/machinery/cryopod/right{ + layer = 3.1; + pixel_y = 13 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/turf/open/floor/almayer/aicore/no_build/white/ai_cargo, +/area/space) "bwG" = ( /turf/closed/wall/almayer, /area/almayer/maint/hull/lower/l_m_s) @@ -11633,6 +11681,10 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/hangar) +"bIf" = ( +/obj/structure/flora/pottedplant/random, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver, +/area/space) "bIj" = ( /turf/open/floor/almayer/emeraldcorner, /area/almayer/hallways/lower/port_midship_hallway) @@ -14131,6 +14183,17 @@ /obj/structure/bed/sofa/south/grey/left, /turf/open/floor/almayer/silver/northwest, /area/almayer/shipboard/brig/cic_hallway) +"cfd" = ( +/obj/structure/stairs{ + icon_state = "ramptop" + }, +/obj/effect/projector{ + name = "Almayer_AresUp"; + vector_x = -3; + vector_y = -1 + }, +/turf/open/floor/almayer/aicore/no_build, +/area/space) "cfk" = ( /obj/structure/machinery/firealarm{ dir = 4; @@ -14184,6 +14247,10 @@ "cfT" = ( /turf/open/floor/almayer/sterile_green_side/southwest, /area/almayer/medical/medical_science) +"cgd" = ( +/obj/structure/pipes/standard/simple/hidden/supply/no_boom, +/turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, +/area/space) "cgl" = ( /obj/structure/machinery/door/firedoor/border_only/almayer, /obj/structure/machinery/door/airlock/multi_tile/almayer/marine/shared/charlie_delta{ @@ -15191,6 +15258,9 @@ }, /turf/open/floor/carpet, /area/almayer/living/commandbunks) +"coG" = ( +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/southeast, +/area/space) "coH" = ( /obj/structure/platform_decoration{ dir = 1 @@ -16471,6 +16541,13 @@ "cQv" = ( /turf/closed/wall/almayer/reinforced, /area/almayer/shipboard/brig/general_equipment) +"cQy" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/effect/step_trigger/clone_cleaner, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, +/area/space) "cQC" = ( /obj/item/device/radio/intercom{ freerange = 1; @@ -16632,6 +16709,13 @@ "cUo" = ( /turf/open/floor/almayer/plate, /area/almayer/lifeboat_pumps/north1) +"cUX" = ( +/obj/structure/machinery/cm_vending/clothing/senior_officer{ + req_one_access_txt = "1;92"; + req_access = null + }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/northeast, +/area/space) "cVb" = ( /obj/structure/machinery/sentry_holder/almayer, /turf/open/floor/almayer/mono, @@ -18122,6 +18206,12 @@ }, /turf/open/floor/almayer/emeraldfull, /area/almayer/living/briefing) +"dBN" = ( +/obj/structure/machinery/status_display{ + pixel_y = 30 + }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, +/area/space) "dBO" = ( /obj/structure/pipes/vents/pump{ dir = 8; @@ -18959,6 +19049,12 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/medical/morgue) +"dSV" = ( +/obj/structure/pipes/standard/simple/hidden/supply/no_boom{ + dir = 5 + }, +/turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, +/area/space) "dSX" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -20419,6 +20515,14 @@ }, /turf/open/floor/almayer/green/north, /area/almayer/hallways/upper/fore_hallway) +"evP" = ( +/obj/structure/machinery/door/airlock/almayer/secure/reinforced{ + name = "\improper AIST Office"; + req_access = null + }, +/obj/effect/step_trigger/clone_cleaner, +/turf/open/floor/almayer/no_build/test_floor4, +/area/almayer/command/airoom) "evR" = ( /obj/structure/surface/table/almayer, /obj/item/storage/toolbox/mechanical/green{ @@ -21183,6 +21287,17 @@ }, /turf/open/floor/almayer, /area/almayer/hallways/lower/port_midship_hallway) +"eOy" = ( +/obj/structure/stairs{ + icon_state = "ramptop" + }, +/obj/effect/projector{ + name = "Almayer_AresUp"; + vector_x = 3; + vector_y = 1 + }, +/turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, +/area/space) "eOM" = ( /obj/structure/machinery/door/airlock/almayer/secure/reinforced{ dir = 2; @@ -21440,6 +21555,13 @@ /obj/structure/disposalpipe/trunk, /turf/open/floor/almayer/plate, /area/almayer/squads/charlie_delta_shared) +"eUk" = ( +/obj/structure/machinery/light{ + unacidable = 1; + unslashable = 1 + }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver, +/area/space) "eUn" = ( /obj/structure/machinery/chem_master, /turf/open/floor/almayer/sterile_green_corner, @@ -21676,6 +21798,11 @@ }, /turf/closed/wall/almayer/white/reinforced, /area/almayer/medical/hydroponics) +"eYX" = ( +/obj/item/bedsheet/yellow, +/obj/structure/bed, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, +/area/space) "eZm" = ( /turf/closed/wall/almayer, /area/almayer/maint/hull/upper/p_stern) @@ -23689,6 +23816,16 @@ }, /turf/open/floor/almayer/test_floor4, /area/almayer/engineering/laundry) +"fTM" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/obj/structure/machinery/computer/working_joe{ + dir = 8; + pixel_x = 29 + }, +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, +/area/space) "fUz" = ( /obj/structure/surface/rack, /obj/item/storage/box/cups{ @@ -24515,6 +24652,15 @@ }, /turf/open/floor/almayer/green/north, /area/almayer/hallways/upper/fore_hallway) +"gpD" = ( +/obj/structure/surface/table/reinforced/almayer_B, +/obj/structure/sign/safety/terminal{ + pixel_y = 26; + pixel_x = 8; + layer = 2.2 + }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, +/area/space) "gpI" = ( /obj/structure/disposalpipe/segment, /obj/structure/pipes/standard/simple/hidden/supply, @@ -26211,6 +26357,9 @@ }, /turf/open/floor/almayer/plate, /area/almayer/maint/hull/upper/u_a_p) +"gZg" = ( +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/east, +/area/space) "gZw" = ( /obj/structure/bed/sofa/vert/grey/bot, /turf/open/floor/almayer, @@ -27416,6 +27565,17 @@ /obj/structure/surface/table/reinforced/black, /turf/open/floor/almayer, /area/almayer/command/cic) +"hxA" = ( +/obj/effect/step_trigger/clone_cleaner, +/obj/structure/machinery/door_control{ + id = "ARES AIST"; + name = "Privacy Shutters"; + pixel_x = 24; + pixel_y = 8; + req_one_access_txt = "31;92" + }, +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, +/area/space) "hxG" = ( /obj/structure/pipes/vents/pump{ dir = 4 @@ -28666,6 +28826,19 @@ }, /turf/open/floor/almayer, /area/almayer/engineering/lower/workshop/hangar) +"hZh" = ( +/obj/effect/step_trigger/clone_cleaner, +/obj/structure/machinery/door/poddoor/shutters/almayer{ + id = "ARES AIST"; + name = "\improper Privacy Shutters" + }, +/obj/structure/machinery/door/airlock/almayer/generic/glass{ + name = "\improper AIST Office"; + dir = 1; + masterkey_resist = 1 + }, +/turf/open/floor/almayer/no_build/test_floor4, +/area/space) "hZj" = ( /obj/effect/decal/warning_stripes{ icon_state = "N"; @@ -32059,6 +32232,9 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/maint/hull/lower/s_bow) +"jsO" = ( +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, +/area/space) "jsP" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -33024,6 +33200,12 @@ }, /turf/open/floor/almayer, /area/almayer/shipboard/brig/processing) +"jPQ" = ( +/obj/structure/pipes/vents/scrubber/no_boom{ + dir = 1 + }, +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, +/area/space) "jPS" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 1 @@ -34775,6 +34957,10 @@ /obj/structure/largecrate/supply/ammo/shotgun, /turf/open/floor/plating/plating_catwalk, /area/almayer/maint/hull/lower/l_a_s) +"kAD" = ( +/obj/structure/pipes/standard/simple/hidden/supply/no_boom, +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, +/area/space) "kAL" = ( /obj/structure/closet/secure_closet/brig, /turf/open/floor/almayer/red, @@ -35377,6 +35563,38 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer/cargo_arrow, /area/almayer/shipboard/port_missiles) +"kOw" = ( +/obj/structure/surface/table/reinforced/almayer_B{ + climbable = 0; + indestructible = 1; + unacidable = 1; + unslashable = 1 + }, +/obj/structure/machinery/computer/cameras/almayer/ares{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/structure/machinery/computer/cameras/almayer{ + pixel_y = 6; + pixel_x = 28 + }, +/obj/structure/machinery/computer/view_objectives{ + pixel_x = 12; + pixel_y = 6 + }, +/obj/item/device/radio/intercom{ + frequency = 1500; + name = "AI Core Intercom"; + pixel_y = 32 + }, +/obj/item/device/radio/intercom{ + freerange = 1; + name = "General Listening Channel"; + pixel_y = 32; + pixel_x = 14 + }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, +/area/space) "kOB" = ( /obj/effect/decal/warning_stripes{ icon_state = "N"; @@ -36303,6 +36521,15 @@ }, /turf/open/floor/almayer/mono, /area/almayer/medical/medical_science) +"liF" = ( +/obj/structure/stairs, +/obj/effect/step_trigger/teleporter_vector{ + name = "Almayer_AresUp"; + vector_x = 3; + vector_y = 1 + }, +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, +/area/space) "liJ" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -37474,6 +37701,12 @@ "lIj" = ( /turf/closed/wall/almayer, /area/almayer/maint/upper/mess) +"lIn" = ( +/obj/structure/pipes/standard/manifold/hidden/supply/no_boom{ + dir = 1 + }, +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, +/area/space) "lIp" = ( /obj/structure/bed/chair/comfy/beige{ dir = 1 @@ -39147,6 +39380,12 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/cic_hallway) +"mwD" = ( +/obj/structure/pipes/standard/simple/hidden/supply/no_boom{ + dir = 4 + }, +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, +/area/space) "mwL" = ( /obj/structure/surface/table/almayer, /obj/item/book/manual/marine_law, @@ -40364,6 +40603,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/almayer, /area/almayer/shipboard/brig/processing) +"mTP" = ( +/obj/structure/machinery/light{ + dir = 8 + }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/west, +/area/space) "mUq" = ( /obj/effect/decal/warning_stripes{ icon_state = "E"; @@ -42665,6 +42910,9 @@ }, /turf/open/floor/almayer/no_build, /area/almayer/hallways/lower/port_midship_hallway) +"nRB" = ( +/turf/closed/wall/almayer/aicore/white/reinforced, +/area/space) "nRE" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 9 @@ -44227,6 +44475,10 @@ "owg" = ( /turf/open/floor/almayer/mono, /area/almayer/engineering/upper_engineering/starboard) +"owI" = ( +/obj/effect/step_trigger/clone_cleaner, +/turf/open/floor/almayer/aicore/glowing/no_build/ai_floor3, +/area/space) "owU" = ( /obj/structure/machinery/light/small{ dir = 8 @@ -46864,6 +47116,15 @@ "pAm" = ( /turf/open/floor/almayer, /area/almayer/engineering/lower/engine_core) +"pAp" = ( +/obj/structure/machinery/light{ + dir = 4 + }, +/obj/structure/pipes/standard/simple/hidden/supply/no_boom{ + dir = 10 + }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/east, +/area/space) "pAO" = ( /obj/structure/surface/table/almayer, /obj/item/storage/firstaid/regular, @@ -47013,6 +47274,33 @@ /obj/structure/machinery/light/small, /turf/open/floor/almayer/plate, /area/almayer/maint/hull/lower/l_a_p) +"pGg" = ( +/obj/structure/surface/table/reinforced/almayer_B, +/obj/structure/machinery/light{ + unacidable = 1; + unslashable = 1 + }, +/obj/structure/transmitter/rotary{ + name = "Office Telephone"; + phone_category = "ARES"; + phone_color = "blue"; + phone_id = "AIST Office"; + pixel_x = 8; + pixel_y = 9 + }, +/obj/structure/machinery/aicore_lockdown{ + pixel_x = -5; + req_one_access_txt = "31;92" + }, +/obj/structure/machinery/door_control{ + id = "ARES AIST"; + name = "Privacy Shutters"; + pixel_y = 11; + req_one_access_txt = "31;92"; + pixel_x = -5 + }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver, +/area/space) "pGh" = ( /obj/effect/decal/cleanable/cobweb{ pixel_x = -9; @@ -47400,6 +47688,9 @@ }, /turf/open/floor/almayer/plate, /area/almayer/living/grunt_rnr) +"pPa" = ( +/turf/open/floor/almayer/aicore/no_build/white/ai_silver, +/area/space) "pPd" = ( /obj/structure/machinery/door/poddoor/shutters/almayer{ dir = 2; @@ -47894,6 +48185,11 @@ "pYX" = ( /turf/open/floor/almayer/silvercorner/west, /area/almayer/shipboard/brig/cic_hallway) +"pZc" = ( +/obj/effect/landmark/late_join/aist, +/obj/effect/landmark/start/ai_tech, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, +/area/space) "pZH" = ( /obj/structure/machinery/shower{ dir = 8 @@ -48920,6 +49216,9 @@ }, /turf/open/floor/almayer/green/west, /area/almayer/living/grunt_rnr) +"qvd" = ( +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/southwest, +/area/space) "qvh" = ( /obj/effect/decal/warning_stripes{ icon_state = "NE-out"; @@ -58192,6 +58491,13 @@ }, /turf/open/floor/almayer/aicore/no_build/ai_floor2, /area/almayer/command/airoom) +"ujo" = ( +/obj/structure/pipes/vents/pump/no_boom/gas{ + vent_tag = "AIST Office"; + dir = 8 + }, +/turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, +/area/space) "ujz" = ( /obj/structure/disposalpipe/segment, /obj/structure/pipes/standard/simple/hidden/supply, @@ -59201,6 +59507,24 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/lobby) +"uFA" = ( +/obj/structure/stairs{ + icon_state = "ramptop" + }, +/obj/effect/projector{ + name = "Almayer_AresUp"; + vector_x = 3; + vector_y = 1 + }, +/obj/structure/machinery/door_control{ + id = "ARES AIST"; + name = "Privacy Shutters"; + pixel_x = 24; + pixel_y = -8; + req_one_access_txt = "31;92" + }, +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, +/area/space) "uFH" = ( /obj/structure/surface/table/almayer, /obj/effect/landmark/map_item, @@ -59508,6 +59832,19 @@ "uPr" = ( /turf/open/floor/almayer/blue/northeast, /area/almayer/living/basketball) +"uPB" = ( +/obj/structure/filingcabinet{ + density = 0; + pixel_x = 8; + pixel_y = 18 + }, +/obj/structure/filingcabinet{ + density = 0; + pixel_x = -8; + pixel_y = 18 + }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/west, +/area/space) "uPE" = ( /turf/open/floor/almayer, /area/almayer/hallways/lower/port_aft_hallway) @@ -60216,6 +60553,10 @@ }, /turf/open/floor/almayer/plating/northeast, /area/almayer/hallways/lower/vehiclehangar) +"vcg" = ( +/obj/structure/surface/table/reinforced/almayer_B, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, +/area/space) "vcm" = ( /obj/structure/reagent_dispensers/peppertank{ pixel_x = -30 @@ -61883,6 +62224,16 @@ }, /turf/open/floor/almayer/no_build/plating, /area/almayer/command/airoom) +"vHf" = ( +/obj/structure/pipes/standard/simple/hidden/supply/no_boom, +/obj/structure/machinery/door/airlock/almayer/generic{ + name = "\improper AIST Office"; + dir = 1; + req_one_access_txt = "31;92"; + masterkey_resist = 1 + }, +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, +/area/space) "vHh" = ( /obj/structure/pipes/standard/simple/hidden/supply, /obj/item/tool/warning_cone{ @@ -62541,6 +62892,12 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/maint/hull/lower/l_m_s) +"vSu" = ( +/obj/structure/pipes/vents/pump/no_boom{ + dir = 1 + }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver, +/area/space) "vSE" = ( /obj/structure/closet/secure_closet/personal, /turf/open/floor/almayer/orange/southeast, @@ -62839,6 +63196,12 @@ }, /turf/open/floor/almayer/plate, /area/almayer/hallways/hangar) +"vWM" = ( +/obj/structure/pipes/standard/simple/hidden/supply/no_boom{ + dir = 4 + }, +/turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, +/area/space) "vXd" = ( /obj/structure/window/framed/almayer, /obj/structure/machinery/door/poddoor/shutters/almayer{ @@ -65182,6 +65545,15 @@ "wSn" = ( /turf/open/floor/almayer/dark_sterile, /area/almayer/engineering/laundry) +"wSp" = ( +/obj/structure/stairs, +/obj/effect/step_trigger/teleporter_vector{ + name = "Almayer_AresUp"; + vector_x = -3; + vector_y = -1 + }, +/turf/open/floor/almayer/aicore/no_build, +/area/space) "wSu" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 8 @@ -66493,6 +66865,9 @@ }, /turf/open/floor/almayer/red/east, /area/almayer/shipboard/brig/processing) +"xvT" = ( +/turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, +/area/space) "xvX" = ( /obj/structure/machinery/cm_vending/gear/leader, /turf/open/floor/almayer/plate, @@ -67230,6 +67605,50 @@ }, /turf/open/floor/plating, /area/almayer/maint/lower/constr) +"xKK" = ( +/obj/structure/machinery/sentry_holder/almayer/mini/aicore{ + dir = 4 + }, +/obj/structure/machinery/door_control{ + id = "ARES StairsUpper"; + name = "Stairway Shutters"; + pixel_x = 36; + req_one_access_txt = "31;92"; + pixel_y = -2 + }, +/obj/structure/machinery/door_control{ + id = "ARES StairsLower"; + name = "Corridor Shutters"; + pixel_x = 36; + pixel_y = 4; + req_one_access_txt = "31;92" + }, +/obj/structure/machinery/door_control{ + id = "ARES Interior"; + indestructible = 1; + name = "Core Shutters"; + pixel_x = 36; + pixel_y = 10; + req_one_access_txt = "31;92" + }, +/obj/structure/machinery/door_control{ + id = "ARES Railing"; + indestructible = 1; + name = "Core Railings"; + needs_power = 0; + pixel_x = 28; + req_one_access_txt = "31;92"; + pixel_y = 7 + }, +/obj/structure/machinery/door_control{ + id = "ARES Operations Left"; + name = "Records Room Shutters"; + pixel_x = 28; + pixel_y = 1; + req_one_access_txt = "31;92" + }, +/turf/open/floor/almayer/aicore/no_build/white/ai_floor1, +/area/space) "xKM" = ( /obj/structure/machinery/status_display{ pixel_x = 16; @@ -67445,6 +67864,15 @@ }, /turf/open/floor/almayer/plate, /area/almayer/living/auxiliary_officer_office) +"xNC" = ( +/obj/structure/stairs, +/obj/effect/step_trigger/teleporter_vector{ + name = "Almayer_AresUp"; + vector_x = -3; + vector_y = -1 + }, +/turf/open/floor/almayer/aicore/glowing/no_build/ai_floor3, +/area/space) "xNM" = ( /obj/structure/machinery/cm_vending/gear/vehicle_crew, /turf/open/floor/almayer/cargo, @@ -68118,6 +68546,14 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/delta) +"yck" = ( +/obj/structure/machinery/camera/autoname/almayer/containment/ares{ + dir = 4; + c_tag = "AI - AIST Office"; + autoname = 0 + }, +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/west, +/area/space) "ycl" = ( /turf/open/floor/plating, /area/almayer/maint/hull/lower/l_m_s) @@ -68453,6 +68889,9 @@ }, /turf/open/floor/almayer/sterile_green_side/north, /area/almayer/medical/morgue) +"yjp" = ( +/turf/open/floor/almayer/aicore/no_build/white/ai_silver/west, +/area/space) "yjq" = ( /obj/structure/machinery/door/poddoor/almayer/locked{ icon_state = "almayer_pdoor"; @@ -121634,21 +122073,21 @@ aKQ aaa aaa aak -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH +aak +aak +aak +aak +aak +aak +aak +aak +aak +aak +aak +aak +aak +aak +aak bdH bdH bdH @@ -121836,7 +122275,6 @@ aaa aKQ aaa aaa -aak bdH bdH bdH @@ -121852,6 +122290,7 @@ bdH bdH bdH bdH +aak bdH bdH bdH @@ -122039,7 +122478,7 @@ aaa aKQ aaa aaa -aab +aaa aaa bdH bdH @@ -122054,7 +122493,7 @@ bdH bdH bdH bdH -bdH +aak bdH bdH bdH @@ -122241,23 +122680,23 @@ aaa aaa aKQ aaa -bdH -aak -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH +iBn +iBn +iBn +iBn +iBn +iBn +iBn +iBn +iBn +iBn +iBn +iBn +iBn bdH bdH bdH +aak bdH aaa aaa @@ -122444,23 +122883,23 @@ aaa aaa aKQ aaa -bdH -aak -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH +iBn +iBn +iBn +iBn +iBn +iBn +iBn +iBn +iBn +iBn +iBn +iBn +iBn bdH bdH bdH +aak bdH aaa aaa @@ -122647,23 +123086,23 @@ aaa aaa aKQ aaa -bdH -aak -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH +iBn +iBn +bwB +mTP +qvd +nRB +uPB +yjp +yck +qvd +iBn +iBn +iBn bdH bdH bdH +aak bdH aaa aaa @@ -122850,23 +123289,23 @@ aaa aaa aKQ aaa -bdH -aak -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH +iBn +iBn +pZc +amU +kAD +vHf +kAD +jPQ +jsO +pPa +iBn +iBn +iBn bdH bdH bdH +aak bdH aaa aaa @@ -123053,23 +123492,23 @@ aaa aaa aKQ aaa -bdH -aak -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH +iBn +iBn +eYX +mwD +bIf +nRB +kOw +fTM +xKK +pGg +iBn +iBn +iBn bdH bdH bdH +aak bdH aaa aaa @@ -123256,9 +123695,82 @@ aaa aaa aKQ aaa +iBn +iBn +vcg +lIn +vSu +nRB +gpD +aXl +aXl +btW +iBn +iBn +iBn +bdH +bdH bdH aak bdH +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bdH +aad +aag +aag +aag +nic +aIh +aIh +hsy +rBv +sov +pAm +pAm +hsy +nDa +nDa +nDa +hsy +gDH +pAm +fZl +snt +hsy +ppM +ppM +nic +aag +aag +aag +ajZ +aaa +aaa +aaa +aaa +aaa +bdH +bdH +bdH +bdH +bdH +bdH +bdH +bdH bdH bdH bdH @@ -123273,209 +123785,136 @@ bdH bdH bdH bdH -bdH -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -bdH -aad -aag -aag -aag -nic -aIh -aIh -hsy -rBv -sov -pAm -pAm -hsy -nDa -nDa -nDa -hsy -gDH -pAm -fZl -snt -hsy -ppM -ppM -nic -aag -aag -aag -ajZ -aaa -aaa -aaa -aaa -aaa -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -aaa -aaa -aaa -aaa -aaa -aab -aaa -aaa -"} -(271,1,1) = {" -aaa -aaa -aab -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -bdH -bdH -aaa -aaa -uMc -jMG -uiG -iUW -trB -ozN -jcP -xVk -xVk -xVk -xVk -xVk -xVk -xVk -etf -gZP -atM -aDO -atK -eky -fRC -lFe -fRC -eky -atM -aDO -atK -aPx -xjz -xVk -xVk -xVk -xVk -xVk -xVk -xVk -dbq -diz -vME -hSt -xoO -adC -pql -bdH -bdH -bdH -bdH -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aab -aaa -aaa -aKQ -aaa -bdH -aak -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH +bdH +aaa +aaa +aaa +aaa +aaa +aab +aaa +aaa +"} +(271,1,1) = {" +aaa +aaa +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bdH +bdH +aaa +aaa +uMc +jMG +uiG +iUW +trB +ozN +jcP +xVk +xVk +xVk +xVk +xVk +xVk +xVk +etf +gZP +atM +aDO +atK +eky +fRC +lFe +fRC +eky +atM +aDO +atK +aPx +xjz +xVk +xVk +xVk +xVk +xVk +xVk +xVk +dbq +diz +vME +hSt +xoO +adC +pql +bdH +bdH +bdH +bdH +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aaa +aaa +aKQ +bdH +iBn +iBn +vcg +vWM +bIf +nRB +dBN +jsO +jsO +pPa +iBn +iBn +iBn +bdH +bdH +bdH +aak bdH aaa aaa @@ -123662,22 +124101,22 @@ aaa aaa aKQ bdH +iBn +iBn +cUX +pAp +kAD +vHf +kAD +cgd +dSV +eUk +iBn +iBn +iBn +bdH +bdH bdH -aak -aak -aak -aak -aak -aak -aak -aak -aak -aak -aak -aak -aak -aak -aak aak bdH aaa @@ -123865,19 +124304,19 @@ bdH bdH aKQ bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH +iBn +iBn +iBn +iBn +iBn +iBn +cQy +xvT +ujo +pPa +iBn +iBn +iBn bdH bdH bdH @@ -124067,20 +124506,20 @@ bdH bdH bdH aKQ -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH -bdH +lmz +iBn +liF +liF +eOy +uFA +hZh +hxA +gZg +gZg +coG +iBn +iBn +iBn bdH bdH bdH @@ -124676,11 +125115,11 @@ lmz lmz lmz lmz -lmz -lmz -lmz -lmz -lmz +owI +cfd +cfd +xNC +wSp lmz lmz lmz @@ -124879,10 +125318,10 @@ lmz lmz daz daz +evP daz -daz -daz -daz +wnh +wnh daz daz daz From 7b41a700b23a28055d348304b2c99447bbc06eb2 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Sat, 24 Aug 2024 22:02:32 +0100 Subject: [PATCH 166/188] intercoms --- maps/map_files/USS_Almayer/USS_Almayer.dmm | 24 ++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index eedbcf5a133a..f286121d4df8 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -20605,6 +20605,14 @@ }, /turf/open/floor/almayer/tcomms, /area/almayer/engineering/upper_engineering/starboard) +"exE" = ( +/obj/item/device/radio/intercom{ + frequency = 1500; + name = "AI Core Intercom"; + pixel_x = 24 + }, +/turf/open/floor/almayer/aicore/no_build, +/area/almayer/command/airoom) "exQ" = ( /turf/open/floor/almayer/greencorner, /area/almayer/hallways/lower/starboard_midship_hallway) @@ -32555,6 +32563,10 @@ icon_state = "S"; layer = 3.3 }, +/obj/item/device/radio/intercom{ + frequency = 1500; + name = "AI Core Intercom" + }, /turf/open/floor/almayer/aicore/glowing/no_build, /area/almayer/command/airoom) "jzZ" = ( @@ -57676,6 +57688,14 @@ "tQV" = ( /turf/closed/wall/almayer/outer, /area/almayer/lifeboat_pumps/south1) +"tQZ" = ( +/obj/item/device/radio/intercom{ + frequency = 1500; + name = "AI Core Intercom"; + pixel_x = -24 + }, +/turf/open/floor/almayer/silver/west, +/area/almayer/hallways/upper/midship_hallway) "tRs" = ( /obj/structure/surface/table/almayer, /obj/item/reagent_container/spray/cleaner, @@ -106184,7 +106204,7 @@ rpV cGO cGO cGO -cGO +tQZ cGO kaO cGO @@ -108214,7 +108234,7 @@ ryn ryn mOi xdA -qQS +exE uUB aqU aHq From 9605b414bd1cea6b3c21c18ea6a4b9a7659b751b Mon Sep 17 00:00:00 2001 From: forest2001 Date: Sat, 24 Aug 2024 22:16:19 +0100 Subject: [PATCH 167/188] gas tweak --- code/game/objects/structures/pipes/vents/vents.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/structures/pipes/vents/vents.dm b/code/game/objects/structures/pipes/vents/vents.dm index d7e090c581c5..f93314ca9e44 100644 --- a/code/game/objects/structures/pipes/vents/vents.dm +++ b/code/game/objects/structures/pipes/vents/vents.dm @@ -180,5 +180,5 @@ if(!gas_holder || welded) return FALSE playsound(loc, 'sound/effects/smoke.ogg', 25, 1, 4) - gas_holder.set_up(radius, 0, get_turf(src), null, 10 SECONDS) + gas_holder.set_up(radius, 0, get_turf(src), null, 20) gas_holder.start() From 069bcb4f425e7d2090fe0f36490c4cbb2bb0621a Mon Sep 17 00:00:00 2001 From: forest2001 Date: Mon, 26 Aug 2024 20:50:31 +0100 Subject: [PATCH 168/188] how did this happen --- maps/map_files/USS_Almayer/USS_Almayer.dmm | 205 ++++++++++----------- 1 file changed, 102 insertions(+), 103 deletions(-) diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index f286121d4df8..a1c142d5af64 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -1707,7 +1707,7 @@ dir = 6 }, /turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, -/area/space) +/area/almayer/command/aist_office) "amX" = ( /turf/open/floor/almayer/red/north, /area/almayer/shipboard/navigation) @@ -7508,7 +7508,7 @@ "aXl" = ( /obj/structure/surface/table/reinforced/almayer_B, /turf/open/floor/almayer/aicore/no_build/white/ai_floor1, -/area/space) +/area/almayer/command/aist_office) "aXx" = ( /obj/structure/machinery/cryopod{ pixel_y = 6 @@ -10063,7 +10063,7 @@ pixel_y = 9 }, /turf/open/floor/almayer/aicore/no_build/white/ai_silver, -/area/space) +/area/almayer/command/aist_office) "btX" = ( /obj/structure/machinery/light{ dir = 4 @@ -10362,7 +10362,7 @@ pixel_x = -1 }, /turf/open/floor/almayer/aicore/no_build/white/ai_cargo, -/area/space) +/area/almayer/command/aist_office) "bwG" = ( /turf/closed/wall/almayer, /area/almayer/maint/hull/lower/l_m_s) @@ -11684,7 +11684,7 @@ "bIf" = ( /obj/structure/flora/pottedplant/random, /turf/open/floor/almayer/aicore/no_build/white/ai_silver, -/area/space) +/area/almayer/command/aist_office) "bIj" = ( /turf/open/floor/almayer/emeraldcorner, /area/almayer/hallways/lower/port_midship_hallway) @@ -14193,7 +14193,7 @@ vector_y = -1 }, /turf/open/floor/almayer/aicore/no_build, -/area/space) +/area/almayer/command/airoom) "cfk" = ( /obj/structure/machinery/firealarm{ dir = 4; @@ -14250,7 +14250,7 @@ "cgd" = ( /obj/structure/pipes/standard/simple/hidden/supply/no_boom, /turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, -/area/space) +/area/almayer/command/aist_office) "cgl" = ( /obj/structure/machinery/door/firedoor/border_only/almayer, /obj/structure/machinery/door/airlock/multi_tile/almayer/marine/shared/charlie_delta{ @@ -15260,7 +15260,7 @@ /area/almayer/living/commandbunks) "coG" = ( /turf/open/floor/almayer/aicore/no_build/white/ai_silver/southeast, -/area/space) +/area/almayer/command/aist_office) "coH" = ( /obj/structure/platform_decoration{ dir = 1 @@ -16547,7 +16547,7 @@ }, /obj/effect/step_trigger/clone_cleaner, /turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, -/area/space) +/area/almayer/command/aist_office) "cQC" = ( /obj/item/device/radio/intercom{ freerange = 1; @@ -16715,7 +16715,7 @@ req_access = null }, /turf/open/floor/almayer/aicore/no_build/white/ai_silver/northeast, -/area/space) +/area/almayer/command/aist_office) "cVb" = ( /obj/structure/machinery/sentry_holder/almayer, /turf/open/floor/almayer/mono, @@ -18211,7 +18211,7 @@ pixel_y = 30 }, /turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, -/area/space) +/area/almayer/command/aist_office) "dBO" = ( /obj/structure/pipes/vents/pump{ dir = 8; @@ -19054,7 +19054,7 @@ dir = 5 }, /turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, -/area/space) +/area/almayer/command/aist_office) "dSX" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -21305,7 +21305,7 @@ vector_y = 1 }, /turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, -/area/space) +/area/almayer/command/aist_office) "eOM" = ( /obj/structure/machinery/door/airlock/almayer/secure/reinforced{ dir = 2; @@ -21569,7 +21569,7 @@ unslashable = 1 }, /turf/open/floor/almayer/aicore/no_build/white/ai_silver, -/area/space) +/area/almayer/command/aist_office) "eUn" = ( /obj/structure/machinery/chem_master, /turf/open/floor/almayer/sterile_green_corner, @@ -21810,7 +21810,7 @@ /obj/item/bedsheet/yellow, /obj/structure/bed, /turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, -/area/space) +/area/almayer/command/aist_office) "eZm" = ( /turf/closed/wall/almayer, /area/almayer/maint/hull/upper/p_stern) @@ -23833,7 +23833,7 @@ pixel_x = 29 }, /turf/open/floor/almayer/aicore/no_build/white/ai_floor1, -/area/space) +/area/almayer/command/aist_office) "fUz" = ( /obj/structure/surface/rack, /obj/item/storage/box/cups{ @@ -24668,7 +24668,7 @@ layer = 2.2 }, /turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, -/area/space) +/area/almayer/command/aist_office) "gpI" = ( /obj/structure/disposalpipe/segment, /obj/structure/pipes/standard/simple/hidden/supply, @@ -26367,7 +26367,7 @@ /area/almayer/maint/hull/upper/u_a_p) "gZg" = ( /turf/open/floor/almayer/aicore/no_build/white/ai_silver/east, -/area/space) +/area/almayer/command/aist_office) "gZw" = ( /obj/structure/bed/sofa/vert/grey/bot, /turf/open/floor/almayer, @@ -27583,7 +27583,7 @@ req_one_access_txt = "31;92" }, /turf/open/floor/almayer/aicore/no_build/white/ai_floor1, -/area/space) +/area/almayer/command/aist_office) "hxG" = ( /obj/structure/pipes/vents/pump{ dir = 4 @@ -28846,7 +28846,7 @@ masterkey_resist = 1 }, /turf/open/floor/almayer/no_build/test_floor4, -/area/space) +/area/almayer/command/aist_office) "hZj" = ( /obj/effect/decal/warning_stripes{ icon_state = "N"; @@ -32242,7 +32242,7 @@ /area/almayer/maint/hull/lower/s_bow) "jsO" = ( /turf/open/floor/almayer/aicore/no_build/white/ai_floor1, -/area/space) +/area/almayer/command/aist_office) "jsP" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -33217,7 +33217,7 @@ dir = 1 }, /turf/open/floor/almayer/aicore/no_build/white/ai_floor1, -/area/space) +/area/almayer/command/aist_office) "jPS" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 1 @@ -34972,7 +34972,7 @@ "kAD" = ( /obj/structure/pipes/standard/simple/hidden/supply/no_boom, /turf/open/floor/almayer/aicore/no_build/white/ai_floor1, -/area/space) +/area/almayer/command/aist_office) "kAL" = ( /obj/structure/closet/secure_closet/brig, /turf/open/floor/almayer/red, @@ -35606,7 +35606,7 @@ pixel_x = 14 }, /turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, -/area/space) +/area/almayer/command/aist_office) "kOB" = ( /obj/effect/decal/warning_stripes{ icon_state = "N"; @@ -36541,7 +36541,7 @@ vector_y = 1 }, /turf/open/floor/almayer/aicore/no_build/white/ai_floor1, -/area/space) +/area/almayer/command/aist_office) "liJ" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -37718,7 +37718,7 @@ dir = 1 }, /turf/open/floor/almayer/aicore/no_build/white/ai_floor1, -/area/space) +/area/almayer/command/aist_office) "lIp" = ( /obj/structure/bed/chair/comfy/beige{ dir = 1 @@ -39397,7 +39397,7 @@ dir = 4 }, /turf/open/floor/almayer/aicore/no_build/white/ai_floor1, -/area/space) +/area/almayer/command/aist_office) "mwL" = ( /obj/structure/surface/table/almayer, /obj/item/book/manual/marine_law, @@ -40620,7 +40620,7 @@ dir = 8 }, /turf/open/floor/almayer/aicore/no_build/white/ai_silver/west, -/area/space) +/area/almayer/command/aist_office) "mUq" = ( /obj/effect/decal/warning_stripes{ icon_state = "E"; @@ -42924,7 +42924,7 @@ /area/almayer/hallways/lower/port_midship_hallway) "nRB" = ( /turf/closed/wall/almayer/aicore/white/reinforced, -/area/space) +/area/almayer/command/aist_office) "nRE" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 9 @@ -44487,10 +44487,6 @@ "owg" = ( /turf/open/floor/almayer/mono, /area/almayer/engineering/upper_engineering/starboard) -"owI" = ( -/obj/effect/step_trigger/clone_cleaner, -/turf/open/floor/almayer/aicore/glowing/no_build/ai_floor3, -/area/space) "owU" = ( /obj/structure/machinery/light/small{ dir = 8 @@ -47136,7 +47132,7 @@ dir = 10 }, /turf/open/floor/almayer/aicore/no_build/white/ai_silver/east, -/area/space) +/area/almayer/command/aist_office) "pAO" = ( /obj/structure/surface/table/almayer, /obj/item/storage/firstaid/regular, @@ -47312,7 +47308,7 @@ pixel_x = -5 }, /turf/open/floor/almayer/aicore/no_build/white/ai_silver, -/area/space) +/area/almayer/command/aist_office) "pGh" = ( /obj/effect/decal/cleanable/cobweb{ pixel_x = -9; @@ -47702,7 +47698,7 @@ /area/almayer/living/grunt_rnr) "pPa" = ( /turf/open/floor/almayer/aicore/no_build/white/ai_silver, -/area/space) +/area/almayer/command/aist_office) "pPd" = ( /obj/structure/machinery/door/poddoor/shutters/almayer{ dir = 2; @@ -48201,7 +48197,7 @@ /obj/effect/landmark/late_join/aist, /obj/effect/landmark/start/ai_tech, /turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, -/area/space) +/area/almayer/command/aist_office) "pZH" = ( /obj/structure/machinery/shower{ dir = 8 @@ -49230,7 +49226,7 @@ /area/almayer/living/grunt_rnr) "qvd" = ( /turf/open/floor/almayer/aicore/no_build/white/ai_silver/southwest, -/area/space) +/area/almayer/command/aist_office) "qvh" = ( /obj/effect/decal/warning_stripes{ icon_state = "NE-out"; @@ -56128,6 +56124,9 @@ "tjn" = ( /turf/open/floor/almayer/sterile_green_side, /area/almayer/medical/medical_science) +"tju" = ( +/turf/closed/wall/almayer/aicore/white/hull, +/area/almayer/command/aist_office) "tjw" = ( /obj/structure/machinery/cm_vending/clothing/vehicle_crew{ density = 0; @@ -58517,7 +58516,7 @@ dir = 8 }, /turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, -/area/space) +/area/almayer/command/aist_office) "ujz" = ( /obj/structure/disposalpipe/segment, /obj/structure/pipes/standard/simple/hidden/supply, @@ -59544,7 +59543,7 @@ req_one_access_txt = "31;92" }, /turf/open/floor/almayer/aicore/no_build/white/ai_floor1, -/area/space) +/area/almayer/command/aist_office) "uFH" = ( /obj/structure/surface/table/almayer, /obj/effect/landmark/map_item, @@ -59864,7 +59863,7 @@ pixel_y = 18 }, /turf/open/floor/almayer/aicore/no_build/white/ai_silver/west, -/area/space) +/area/almayer/command/aist_office) "uPE" = ( /turf/open/floor/almayer, /area/almayer/hallways/lower/port_aft_hallway) @@ -60576,7 +60575,7 @@ "vcg" = ( /obj/structure/surface/table/reinforced/almayer_B, /turf/open/floor/almayer/aicore/no_build/white/ai_silver/north, -/area/space) +/area/almayer/command/aist_office) "vcm" = ( /obj/structure/reagent_dispensers/peppertank{ pixel_x = -30 @@ -62253,7 +62252,7 @@ masterkey_resist = 1 }, /turf/open/floor/almayer/aicore/no_build/white/ai_floor1, -/area/space) +/area/almayer/command/aist_office) "vHh" = ( /obj/structure/pipes/standard/simple/hidden/supply, /obj/item/tool/warning_cone{ @@ -62917,7 +62916,7 @@ dir = 1 }, /turf/open/floor/almayer/aicore/no_build/white/ai_silver, -/area/space) +/area/almayer/command/aist_office) "vSE" = ( /obj/structure/closet/secure_closet/personal, /turf/open/floor/almayer/orange/southeast, @@ -63221,7 +63220,7 @@ dir = 4 }, /turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, -/area/space) +/area/almayer/command/aist_office) "vXd" = ( /obj/structure/window/framed/almayer, /obj/structure/machinery/door/poddoor/shutters/almayer{ @@ -65573,7 +65572,7 @@ vector_y = -1 }, /turf/open/floor/almayer/aicore/no_build, -/area/space) +/area/almayer/command/airoom) "wSu" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 8 @@ -66887,7 +66886,7 @@ /area/almayer/shipboard/brig/processing) "xvT" = ( /turf/open/floor/almayer/aicore/glowing/no_build/white/ai_floor3, -/area/space) +/area/almayer/command/aist_office) "xvX" = ( /obj/structure/machinery/cm_vending/gear/leader, /turf/open/floor/almayer/plate, @@ -67668,7 +67667,7 @@ req_one_access_txt = "31;92" }, /turf/open/floor/almayer/aicore/no_build/white/ai_floor1, -/area/space) +/area/almayer/command/aist_office) "xKM" = ( /obj/structure/machinery/status_display{ pixel_x = 16; @@ -67892,7 +67891,7 @@ vector_y = -1 }, /turf/open/floor/almayer/aicore/glowing/no_build/ai_floor3, -/area/space) +/area/almayer/command/airoom) "xNM" = ( /obj/structure/machinery/cm_vending/gear/vehicle_crew, /turf/open/floor/almayer/cargo, @@ -68573,7 +68572,7 @@ autoname = 0 }, /turf/open/floor/almayer/aicore/no_build/white/ai_silver/west, -/area/space) +/area/almayer/command/aist_office) "ycl" = ( /turf/open/floor/plating, /area/almayer/maint/hull/lower/l_m_s) @@ -68911,7 +68910,7 @@ /area/almayer/medical/morgue) "yjp" = ( /turf/open/floor/almayer/aicore/no_build/white/ai_silver/west, -/area/space) +/area/almayer/command/aist_office) "yjq" = ( /obj/structure/machinery/door/poddoor/almayer/locked{ icon_state = "almayer_pdoor"; @@ -122904,16 +122903,16 @@ aaa aKQ aaa iBn -iBn -iBn -iBn -iBn -iBn -iBn -iBn -iBn -iBn -iBn +tju +tju +tju +tju +tju +tju +tju +tju +tju +tju iBn iBn bdH @@ -123107,7 +123106,7 @@ aaa aKQ aaa iBn -iBn +tju bwB mTP qvd @@ -123116,7 +123115,7 @@ uPB yjp yck qvd -iBn +tju iBn iBn bdH @@ -123310,7 +123309,7 @@ aaa aKQ aaa iBn -iBn +tju pZc amU kAD @@ -123319,7 +123318,7 @@ kAD jPQ jsO pPa -iBn +tju iBn iBn bdH @@ -123513,7 +123512,7 @@ aaa aKQ aaa iBn -iBn +tju eYX mwD bIf @@ -123522,7 +123521,7 @@ kOw fTM xKK pGg -iBn +tju iBn iBn bdH @@ -123716,7 +123715,7 @@ aaa aKQ aaa iBn -iBn +tju vcg lIn vSu @@ -123725,7 +123724,7 @@ gpD aXl aXl btW -iBn +tju iBn iBn bdH @@ -123919,7 +123918,7 @@ aaa aKQ bdH iBn -iBn +tju vcg vWM bIf @@ -123928,7 +123927,7 @@ dBN jsO jsO pPa -iBn +tju iBn iBn bdH @@ -124122,7 +124121,7 @@ aaa aKQ bdH iBn -iBn +tju cUX pAp kAD @@ -124131,7 +124130,7 @@ kAD cgd dSV eUk -iBn +tju iBn iBn bdH @@ -124324,17 +124323,17 @@ bdH bdH aKQ bdH -iBn -iBn -iBn -iBn -iBn -iBn +tju +tju +tju +tju +tju +tju cQy xvT ujo pPa -iBn +tju iBn iBn bdH @@ -124527,7 +124526,7 @@ bdH bdH aKQ lmz -iBn +tju liF liF eOy @@ -124537,7 +124536,7 @@ hxA gZg gZg coG -iBn +tju iBn iBn bdH @@ -124730,17 +124729,17 @@ lmz lmz lmz lmz -iBn -iBn -iBn -iBn -iBn -iBn -iBn -iBn -iBn -iBn -iBn +tju +tju +tju +tju +tju +tju +tju +tju +tju +tju +tju iBn iBn bdH @@ -124931,13 +124930,13 @@ lmz lmz lmz lmz -lmz -lmz -lmz -lmz -lmz -lmz -lmz +daz +daz +daz +daz +daz +daz +daz lmz lmz lmz @@ -125134,13 +125133,13 @@ lmz lmz lmz lmz -lmz -owI +daz +jtj cfd cfd xNC wSp -lmz +daz lmz lmz lmz From 7fdaa4d682aba2585d10bded23aa76ffa4135fcc Mon Sep 17 00:00:00 2001 From: forest2001 Date: Thu, 29 Aug 2024 14:04:55 +0100 Subject: [PATCH 169/188] backend overhaul --- code/game/machinery/ARES/ARES_interface.dm | 160 +------- .../machinery/ARES/ARES_interface_admin.dm | 199 +--------- .../machinery/ARES/ARES_interface_apollo.dm | 77 +--- .../machinery/ARES/ARES_interface_data.dm | 197 ++++++++++ code/game/machinery/ARES/ARES_procs.dm | 16 - .../game/machinery/ARES/ARES_step_triggers.dm | 1 + code/game/machinery/ARES/apollo_pda.dm | 78 +--- colonialmarines.dme | 1 + maps/map_files/USS_Almayer/USS_Almayer.dmm | 16 +- tgui/packages/tgui/interfaces/AresAdmin.jsx | 358 ++++++++++-------- .../tgui/interfaces/AresInterface.jsx | 284 +++++++------- tgui/packages/tgui/interfaces/WorkingJoe.jsx | 139 ++++--- 12 files changed, 681 insertions(+), 845 deletions(-) create mode 100644 code/game/machinery/ARES/ARES_interface_data.dm diff --git a/code/game/machinery/ARES/ARES_interface.dm b/code/game/machinery/ARES/ARES_interface.dm index 0316274774be..b6aeb538b1d5 100644 --- a/code/game/machinery/ARES/ARES_interface.dm +++ b/code/game/machinery/ARES/ARES_interface.dm @@ -69,156 +69,30 @@ ui.open() /obj/structure/machinery/computer/ares_console/ui_data(mob/user) - var/list/data = list() - - data["current_menu"] = current_menu - data["last_page"] = last_menu - - data["logged_in"] = last_login - data["sudo"] = sudo_holder ? TRUE : FALSE - - data["access_text"] = "[sudo_holder ? "(SUDO)," : ""] access level [authentication], [ares_auth_to_text(authentication)]." - data["access_level"] = authentication - - data["alert_level"] = GLOB.security_level - data["evac_status"] = SShijack.evac_status - data["worldtime"] = world.time - - data["access_log"] = datacore.interface_access_list - data["apollo_log"] = datacore.apollo_log - - data["deleted_conversation"] = deleted_1to1 - - data["distresstime"] = datacore.ares_distress_cooldown - data["distresstimelock"] = DISTRESS_TIME_LOCK - data["quarterstime"] = datacore.ares_quarters_cooldown - data["mission_failed"] = SSticker.mode.is_in_endgame - data["nuketimelock"] = NUCLEAR_TIME_LOCK - data["nuke_available"] = datacore.nuke_available - - data["printer_cooldown"] = !COOLDOWN_FINISHED(src, printer_cooldown) - - var/list/logged_announcements = list() - for(var/datum/ares_record/announcement/broadcast as anything in datacore.records_announcement) - var/list/current_broadcast = list() - current_broadcast["time"] = broadcast.time - current_broadcast["title"] = broadcast.title - current_broadcast["details"] = broadcast.details - current_broadcast["ref"] = "\ref[broadcast]" - logged_announcements += list(current_broadcast) - data["records_announcement"] = logged_announcements - - var/list/logged_alerts = list() - for(var/datum/ares_record/security/security_alert as anything in datacore.records_security) - var/list/current_alert = list() - current_alert["time"] = security_alert.time - current_alert["title"] = security_alert.title - current_alert["details"] = security_alert.details - current_alert["ref"] = "\ref[security_alert]" - logged_alerts += list(current_alert) - data["records_security"] = logged_alerts - - var/list/logged_flights = list() - for(var/datum/ares_record/flight/flight_log as anything in datacore.records_flight) - var/list/current_flight = list() - current_flight["time"] = flight_log.time - current_flight["title"] = flight_log.title - current_flight["details"] = flight_log.details - current_flight["user"] = flight_log.user - current_flight["ref"] = "\ref[flight_log]" - logged_flights += list(current_flight) - data["records_flight"] = logged_flights - - var/list/logged_bioscans = list() - for(var/datum/ares_record/bioscan/scan as anything in datacore.records_bioscan) - var/list/current_scan = list() - current_scan["time"] = scan.time - current_scan["title"] = scan.title - current_scan["details"] = scan.details - current_scan["ref"] = "\ref[scan]" - logged_bioscans += list(current_scan) - data["records_bioscan"] = logged_bioscans - - var/list/logged_bombs = list() - for(var/datum/ares_record/bombardment/bomb as anything in datacore.records_bombardment) - var/list/current_bomb = list() - current_bomb["time"] = bomb.time - current_bomb["title"] = bomb.title - current_bomb["details"] = bomb.details - current_bomb["user"] = bomb.user - current_bomb["ref"] = "\ref[bomb]" - logged_bombs += list(current_bomb) - data["records_bombardment"] = logged_bombs - - var/list/logged_deletes = list() - for(var/datum/ares_record/deletion/deleted as anything in datacore.records_deletion) - if(!istype(deleted)) - continue - var/list/current_delete = list() - current_delete["time"] = deleted.time - current_delete["title"] = deleted.title - current_delete["details"] = deleted.details - current_delete["user"] = deleted.user - current_delete["ref"] = "\ref[deleted]" - logged_deletes += list(current_delete) - data["records_deletion"] = logged_deletes - - var/list/logged_discussions = list() - for(var/datum/ares_record/deleted_talk/deleted_convo as anything in datacore.records_deletion) - if(!istype(deleted_convo)) - continue - var/list/deleted_disc = list() - deleted_disc["time"] = deleted_convo.time - deleted_disc["title"] = deleted_convo.title - deleted_disc["ref"] = "\ref[deleted_convo]" - logged_discussions += list(deleted_disc) - data["deleted_discussions"] = logged_discussions - - var/list/logged_orders = list() - for(var/datum/ares_record/requisition_log/req_order as anything in datacore.records_asrs) - if(!istype(req_order)) - continue - var/list/current_order = list() - current_order["time"] = req_order.time - current_order["details"] = req_order.details - current_order["title"] = req_order.title - current_order["user"] = req_order.user - current_order["ref"] = "\ref[req_order]" - logged_orders += list(current_order) - data["records_requisition"] = logged_orders - - var/list/logged_techs = list() - for(var/datum/ares_record/tech/tech_unlock as anything in datacore.records_tech) - var/list/current_tech = list() - current_tech["time"] = tech_unlock.time - current_tech["details"] = tech_unlock.details - current_tech["user"] = tech_unlock.user - current_tech["tier_changer"] = tech_unlock.is_tier - current_tech["ref"] = "\ref[tech_unlock]" - logged_techs += list(current_tech) - data["records_tech"] = logged_techs - - var/list/logged_convos = list() + var/list/data = datacore.get_interface_data() + + data["local_current_menu"] = current_menu + data["local_last_page"] = last_menu + + data["local_logged_in"] = last_login + data["local_sudo"] = sudo_holder ? TRUE : FALSE + + data["local_access_text"] = "[sudo_holder ? "(SUDO)," : ""] access level [authentication], [ares_auth_to_text(authentication)]." + data["local_access_level"] = authentication + + data["local_deleted_conversation"] = deleted_1to1 + data["local_printer_cooldown"] = !COOLDOWN_FINISHED(src, printer_cooldown) + var/list/active_convo = list() var/active_ref - for(var/datum/ares_record/talk_log/log as anything in datacore.records_talking) + for(var/datum/ares_record/talk_log/log as anything in data["logged_convos"]) if(!istype(log)) continue if(log.user == last_login) active_convo = log.conversation active_ref = "\ref[log]" - - var/list/current_convo = list() - current_convo["user"] = log.user - current_convo["ref"] = "\ref[log]" - current_convo["conversation"] = log.conversation - logged_convos += list(current_convo) - - data["active_convo"] = active_convo - data["active_ref"] = active_ref - data["conversations"] = logged_convos - - data["security_vents"] = link.get_ares_vents() + data["local_active_convo"] = active_convo + data["local_active_ref"] = active_ref return data diff --git a/code/game/machinery/ARES/ARES_interface_admin.dm b/code/game/machinery/ARES/ARES_interface_admin.dm index 758ba9fbb5e7..094dbcf88953 100644 --- a/code/game/machinery/ARES/ARES_interface_admin.dm +++ b/code/game/machinery/ARES/ARES_interface_admin.dm @@ -48,190 +48,31 @@ if(!interface) to_chat(user, SPAN_WARNING("ARES ADMIN DATA LINK FAILED")) return FALSE - var/list/data = list() - - data["admin_login"] = "[admin_interface.logged_in], [user.client.admin_holder?.rank]" - data["admin_access_log"] = list(admin_interface.access_list) - - data["current_menu"] = admin_interface.current_menu - data["last_page"] = admin_interface.last_menu - - data["logged_in"] = interface.last_login - data["sudo"] = interface.sudo_holder ? TRUE : FALSE - - data["access_text"] = "[interface.sudo_holder ? "(SUDO)," : ""] access level [interface.authentication], [interface.ares_auth_to_text(interface.authentication)]." - data["access_level"] = interface.authentication - - data["alert_level"] = GLOB.security_level - data["evac_status"] = SShijack.evac_status - data["worldtime"] = world.time - - data["access_log"] = datacore.interface_access_list - data["apollo_log"] = datacore.apollo_log - - data["deleted_conversation"] = admin_interface.deleted_1to1 - - data["distresstime"] = datacore.ares_distress_cooldown - data["distresstimelock"] = DISTRESS_TIME_LOCK - data["mission_failed"] = SSticker.mode.is_in_endgame - data["nuketimelock"] = NUCLEAR_TIME_LOCK - data["nuke_available"] = datacore.nuke_available - - var/list/logged_announcements = list() - for(var/datum/ares_record/announcement/broadcast in datacore.records_announcement) - var/list/current_broadcast = list() - current_broadcast["time"] = broadcast.time - current_broadcast["title"] = broadcast.title - current_broadcast["details"] = broadcast.details - current_broadcast["ref"] = "\ref[broadcast]" - logged_announcements += list(current_broadcast) - data["records_announcement"] = logged_announcements - - var/list/logged_alerts = list() - for(var/datum/ares_record/security/security_alert in datacore.records_security) - var/list/current_alert = list() - current_alert["time"] = security_alert.time - current_alert["title"] = security_alert.title - current_alert["details"] = security_alert.details - current_alert["ref"] = "\ref[security_alert]" - logged_alerts += list(current_alert) - data["records_security"] = logged_alerts - - var/list/logged_flights = list() - for(var/datum/ares_record/flight/flight_log in datacore.records_flight) - var/list/current_flight = list() - current_flight["time"] = flight_log.time - current_flight["title"] = flight_log.title - current_flight["details"] = flight_log.details - current_flight["user"] = flight_log.user - current_flight["ref"] = "\ref[flight_log]" - logged_flights += list(current_flight) - data["records_flight"] = logged_flights - - var/list/logged_bioscans = list() - for(var/datum/ares_record/bioscan/scan in datacore.records_bioscan) - var/list/current_scan = list() - current_scan["time"] = scan.time - current_scan["title"] = scan.title - current_scan["details"] = scan.details - current_scan["ref"] = "\ref[scan]" - logged_bioscans += list(current_scan) - data["records_bioscan"] = logged_bioscans - - var/list/logged_bombs = list() - for(var/datum/ares_record/bombardment/bomb in datacore.records_bombardment) - var/list/current_bomb = list() - current_bomb["time"] = bomb.time - current_bomb["title"] = bomb.title - current_bomb["details"] = bomb.details - current_bomb["user"] = bomb.user - current_bomb["ref"] = "\ref[bomb]" - logged_bombs += list(current_bomb) - data["records_bombardment"] = logged_bombs - - var/list/logged_deletes = list() - for(var/datum/ares_record/deletion/deleted in datacore.records_deletion) - var/list/current_delete = list() - current_delete["time"] = deleted.time - current_delete["title"] = deleted.title - current_delete["details"] = deleted.details - current_delete["user"] = deleted.user - current_delete["ref"] = "\ref[deleted]" - logged_deletes += list(current_delete) - data["records_deletion"] = logged_deletes - - var/list/logged_discussions = list() - for(var/datum/ares_record/deleted_talk/deleted_convo in datacore.records_deletion) - var/list/deleted_disc = list() - deleted_disc["time"] = deleted_convo.time - deleted_disc["title"] = deleted_convo.title - deleted_disc["ref"] = "\ref[deleted_convo]" - logged_discussions += list(deleted_disc) - data["deleted_discussions"] = logged_discussions - - var/list/logged_orders = list() - for(var/datum/ares_record/requisition_log/req_order in datacore.records_asrs) - var/list/current_order = list() - current_order["time"] = req_order.time - current_order["details"] = req_order.details - current_order["title"] = req_order.title - current_order["user"] = req_order.user - current_order["ref"] = "\ref[req_order]" - logged_orders += list(current_order) - data["records_requisition"] = logged_orders - - var/list/logged_techs = list() - for(var/datum/ares_record/tech/tech_unlock as anything in datacore.records_tech) - var/list/current_tech = list() - current_tech["time"] = tech_unlock.time - current_tech["details"] = tech_unlock.details - current_tech["user"] = tech_unlock.user - current_tech["tier_changer"] = tech_unlock.is_tier - current_tech["ref"] = "\ref[tech_unlock]" - logged_techs += list(current_tech) - data["records_tech"] = logged_techs - - var/list/logged_convos = list() + var/list/data = datacore.get_interface_data() + + data["local_admin_login"] = "[admin_interface.logged_in], [user.client.admin_holder?.rank]" + data["admin_access_log"] = admin_interface.access_list + + data["local_current_menu"] = admin_interface.current_menu + data["local_last_page"] = admin_interface.last_menu + + data["ares_logged_in"] = interface.last_login + data["ares_sudo"] = interface.sudo_holder ? TRUE : FALSE + + data["ares_access_text"] = "[interface.sudo_holder ? "(SUDO)," : ""] access level [interface.authentication], [interface.ares_auth_to_text(interface.authentication)]." + + data["local_deleted_conversation"] = admin_interface.deleted_1to1 + var/list/active_convo = list() var/active_ref - for(var/datum/ares_record/talk_log/log in datacore.records_talking) + for(var/datum/ares_record/talk_log/log as anything in data["logged_convos"]) + if(!istype(log)) + continue if(log.user == interface.last_login) active_convo = log.conversation active_ref = "\ref[log]" - - var/list/current_convo = list() - current_convo["user"] = log.user - current_convo["ref"] = "\ref[log]" - current_convo["conversation"] = log.conversation - logged_convos += list(current_convo) - - data["active_convo"] = active_convo - data["active_ref"] = active_ref - data["conversations"] = logged_convos - - var/list/logged_maintenance = list() - for(var/datum/ares_ticket/maintenance/maint_ticket in tickets_maintenance) - var/lock_status = TICKET_OPEN - switch(maint_ticket.ticket_status) - if(TICKET_REJECTED, TICKET_CANCELLED, TICKET_COMPLETED) - lock_status = TICKET_CLOSED - - var/list/current_maint = list() - current_maint["id"] = maint_ticket.ticket_id - current_maint["time"] = maint_ticket.ticket_time - current_maint["priority_status"] = maint_ticket.ticket_priority - current_maint["category"] = maint_ticket.ticket_name - current_maint["details"] = maint_ticket.ticket_details - current_maint["status"] = maint_ticket.ticket_status - current_maint["submitter"] = maint_ticket.ticket_submitter - current_maint["assignee"] = maint_ticket.ticket_assignee - current_maint["lock_status"] = lock_status - current_maint["ref"] = "\ref[maint_ticket]" - logged_maintenance += list(current_maint) - data["maintenance_tickets"] = logged_maintenance - - var/list/logged_access = list() - for(var/datum/ares_ticket/access/access_ticket in tickets_access) - var/lock_status = TICKET_OPEN - switch(access_ticket.ticket_status) - if(TICKET_REJECTED, TICKET_CANCELLED, TICKET_REVOKED) - lock_status = TICKET_CLOSED - - var/list/current_ticket = list() - current_ticket["id"] = access_ticket.ticket_id - current_ticket["time"] = access_ticket.ticket_time - current_ticket["priority_status"] = access_ticket.ticket_priority - current_ticket["title"] = access_ticket.ticket_name - current_ticket["details"] = access_ticket.ticket_details - current_ticket["status"] = access_ticket.ticket_status - current_ticket["submitter"] = access_ticket.ticket_submitter - current_ticket["assignee"] = access_ticket.ticket_assignee - current_ticket["lock_status"] = lock_status - current_ticket["ref"] = "\ref[access_ticket]" - logged_access += list(current_ticket) - data["access_tickets"] = logged_access - - data["security_vents"] = get_ares_vents() + data["local_active_convo"] = active_convo + data["local_active_ref"] = active_ref return data diff --git a/code/game/machinery/ARES/ARES_interface_apollo.dm b/code/game/machinery/ARES/ARES_interface_apollo.dm index 93637f39d1a7..a0c66de3d8b3 100644 --- a/code/game/machinery/ARES/ARES_interface_apollo.dm +++ b/code/game/machinery/ARES/ARES_interface_apollo.dm @@ -73,75 +73,14 @@ ui.open() /obj/structure/machinery/computer/working_joe/ui_data(mob/user) - var/list/data = list() - - data["current_menu"] = current_menu - data["last_page"] = last_menu - - data["logged_in"] = last_login - - data["access_text"] = "access level [authentication], [ares_auth_to_text(authentication)]." - data["access_level"] = authentication - - data["alert_level"] = GLOB.security_level - data["worldtime"] = world.time - - data["access_log"] = list() - data["access_log"] += datacore.apollo_login_list - - data["apollo_log"] = datacore.apollo_log - - data["notify_sounds"] = notify_sounds - - var/list/logged_maintenance = list() - for(var/datum/ares_ticket/maintenance/maint_ticket as anything in link.tickets_maintenance) - if(!istype(maint_ticket)) - continue - var/lock_status = TICKET_OPEN - switch(maint_ticket.ticket_status) - if(TICKET_REJECTED, TICKET_CANCELLED, TICKET_COMPLETED) - lock_status = TICKET_CLOSED - - var/list/current_maint = list() - current_maint["id"] = maint_ticket.ticket_id - current_maint["time"] = maint_ticket.ticket_time - current_maint["priority_status"] = maint_ticket.ticket_priority - current_maint["category"] = maint_ticket.ticket_name - current_maint["details"] = maint_ticket.ticket_details - current_maint["status"] = maint_ticket.ticket_status - current_maint["submitter"] = maint_ticket.ticket_submitter - current_maint["assignee"] = maint_ticket.ticket_assignee - current_maint["lock_status"] = lock_status - current_maint["ref"] = "\ref[maint_ticket]" - logged_maintenance += list(current_maint) - data["maintenance_tickets"] = logged_maintenance - - var/list/logged_access = list() - var/list/requesting_access = list() - for(var/datum/ares_ticket/access/access_ticket as anything in link.tickets_access) - var/lock_status = TICKET_OPEN - switch(access_ticket.ticket_status) - if(TICKET_REJECTED, TICKET_CANCELLED, TICKET_REVOKED) - lock_status = TICKET_CLOSED - - var/list/current_ticket = list() - current_ticket["id"] = access_ticket.ticket_id - current_ticket["time"] = access_ticket.ticket_time - current_ticket["priority_status"] = access_ticket.ticket_priority - current_ticket["title"] = access_ticket.ticket_name - current_ticket["details"] = access_ticket.ticket_details - current_ticket["status"] = access_ticket.ticket_status - current_ticket["submitter"] = access_ticket.ticket_submitter - current_ticket["assignee"] = access_ticket.ticket_assignee - current_ticket["lock_status"] = lock_status - current_ticket["ref"] = "\ref[access_ticket]" - logged_access += list(current_ticket) - - if(lock_status == TICKET_OPEN) - requesting_access += access_ticket.ticket_name - data["access_tickets"] = logged_access - - data["security_vents"] = link.get_ares_vents() + var/list/data = datacore.get_interface_data() + + data["local_current_menu"] = current_menu + data["local_last_page"] = last_menu + data["local_logged_in"] = last_login + data["local_access_text"] = "access level [authentication], [ares_auth_to_text(authentication)]." + data["local_access_level"] = authentication + data["local_notify_sounds"] = notify_sounds return data diff --git a/code/game/machinery/ARES/ARES_interface_data.dm b/code/game/machinery/ARES/ARES_interface_data.dm new file mode 100644 index 000000000000..a693238358a3 --- /dev/null +++ b/code/game/machinery/ARES/ARES_interface_data.dm @@ -0,0 +1,197 @@ +/datum/ares_datacore/proc/get_interface_data() + var/datum/ares_link/link = GLOB.ares_link + var/list/data = list() + + data["alert_level"] = GLOB.security_level + data["evac_status"] = SShijack.evac_status + data["worldtime"] = world.time + + data["ares_access_log"] = interface_access_list + data["apollo_access_log"] = apollo_login_list + data["apollo_log"] = apollo_log + + + data["distresstime"] = ares_distress_cooldown + data["distresstimelock"] = DISTRESS_TIME_LOCK + data["quarterstime"] = ares_quarters_cooldown + data["mission_failed"] = SSticker.mode.is_in_endgame + data["nuketimelock"] = NUCLEAR_TIME_LOCK + data["nuke_available"] = nuke_available + + + var/list/logged_announcements = list() + for(var/datum/ares_record/announcement/broadcast as anything in records_announcement) + var/list/current_broadcast = list() + current_broadcast["time"] = broadcast.time + current_broadcast["title"] = broadcast.title + current_broadcast["details"] = broadcast.details + current_broadcast["ref"] = "\ref[broadcast]" + logged_announcements += list(current_broadcast) + data["records_announcement"] = logged_announcements + + var/list/logged_alerts = list() + for(var/datum/ares_record/security/security_alert as anything in records_security) + var/list/current_alert = list() + current_alert["time"] = security_alert.time + current_alert["title"] = security_alert.title + current_alert["details"] = security_alert.details + current_alert["ref"] = "\ref[security_alert]" + logged_alerts += list(current_alert) + data["records_security"] = logged_alerts + + var/list/logged_flights = list() + for(var/datum/ares_record/flight/flight_log as anything in records_flight) + var/list/current_flight = list() + current_flight["time"] = flight_log.time + current_flight["title"] = flight_log.title + current_flight["details"] = flight_log.details + current_flight["user"] = flight_log.user + current_flight["ref"] = "\ref[flight_log]" + logged_flights += list(current_flight) + data["records_flight"] = logged_flights + + var/list/logged_bioscans = list() + for(var/datum/ares_record/bioscan/scan as anything in records_bioscan) + var/list/current_scan = list() + current_scan["time"] = scan.time + current_scan["title"] = scan.title + current_scan["details"] = scan.details + current_scan["ref"] = "\ref[scan]" + logged_bioscans += list(current_scan) + data["records_bioscan"] = logged_bioscans + + var/list/logged_bombs = list() + for(var/datum/ares_record/bombardment/bomb as anything in records_bombardment) + var/list/current_bomb = list() + current_bomb["time"] = bomb.time + current_bomb["title"] = bomb.title + current_bomb["details"] = bomb.details + current_bomb["user"] = bomb.user + current_bomb["ref"] = "\ref[bomb]" + logged_bombs += list(current_bomb) + data["records_bombardment"] = logged_bombs + + var/list/logged_deletes = list() + for(var/datum/ares_record/deletion/deleted as anything in records_deletion) + if(!istype(deleted)) + continue + var/list/current_delete = list() + current_delete["time"] = deleted.time + current_delete["title"] = deleted.title + current_delete["details"] = deleted.details + current_delete["user"] = deleted.user + current_delete["ref"] = "\ref[deleted]" + logged_deletes += list(current_delete) + data["records_deletion"] = logged_deletes + + var/list/logged_discussions = list() + for(var/datum/ares_record/deleted_talk/deleted_convo as anything in records_deletion) + if(!istype(deleted_convo)) + continue + var/list/deleted_disc = list() + deleted_disc["time"] = deleted_convo.time + deleted_disc["title"] = deleted_convo.title + deleted_disc["ref"] = "\ref[deleted_convo]" + logged_discussions += list(deleted_disc) + data["deleted_discussions"] = logged_discussions + + var/list/logged_orders = list() + for(var/datum/ares_record/requisition_log/req_order as anything in records_asrs) + if(!istype(req_order)) + continue + var/list/current_order = list() + current_order["time"] = req_order.time + current_order["details"] = req_order.details + current_order["title"] = req_order.title + current_order["user"] = req_order.user + current_order["ref"] = "\ref[req_order]" + logged_orders += list(current_order) + data["records_requisition"] = logged_orders + + var/list/logged_techs = list() + for(var/datum/ares_record/tech/tech_unlock as anything in records_tech) + var/list/current_tech = list() + current_tech["time"] = tech_unlock.time + current_tech["details"] = tech_unlock.details + current_tech["user"] = tech_unlock.user + current_tech["tier_changer"] = tech_unlock.is_tier + current_tech["ref"] = "\ref[tech_unlock]" + logged_techs += list(current_tech) + data["records_tech"] = logged_techs + + var/list/logged_convos = list() + for(var/datum/ares_record/talk_log/log as anything in records_talking) + if(!istype(log)) + continue + + var/list/current_convo = list() + current_convo["user"] = log.user + current_convo["ref"] = "\ref[log]" + current_convo["conversation"] = log.conversation + logged_convos += list(current_convo) + + data["conversations"] = logged_convos + + var/list/security_vents = list() + for(var/obj/structure/pipes/vents/pump/no_boom/gas/vent in link.linked_vents) + if(!vent.vent_tag) + vent.vent_tag = "Security Vent #[link.tag_num]" + link.tag_num++ + + var/list/current_vent = list() + var/is_available = COOLDOWN_FINISHED(vent, vent_trigger_cooldown) + current_vent["vent_tag"] = vent.vent_tag + current_vent["ref"] = "\ref[vent]" + current_vent["available"] = is_available + security_vents += list(current_vent) + data["security_vents"] = security_vents + + var/list/logged_maintenance = list() + for(var/datum/ares_ticket/maintenance/maint_ticket as anything in link.tickets_maintenance) + if(!istype(maint_ticket)) + continue + var/lock_status = TICKET_OPEN + switch(maint_ticket.ticket_status) + if(TICKET_REJECTED, TICKET_CANCELLED, TICKET_COMPLETED) + lock_status = TICKET_CLOSED + + var/list/current_maint = list() + current_maint["id"] = maint_ticket.ticket_id + current_maint["time"] = maint_ticket.ticket_time + current_maint["priority_status"] = maint_ticket.ticket_priority + current_maint["category"] = maint_ticket.ticket_name + current_maint["details"] = maint_ticket.ticket_details + current_maint["status"] = maint_ticket.ticket_status + current_maint["submitter"] = maint_ticket.ticket_submitter + current_maint["assignee"] = maint_ticket.ticket_assignee + current_maint["lock_status"] = lock_status + current_maint["ref"] = "\ref[maint_ticket]" + logged_maintenance += list(current_maint) + data["maintenance_tickets"] = logged_maintenance + + var/list/logged_access = list() + var/list/requesting_access = list() + for(var/datum/ares_ticket/access/access_ticket as anything in link.tickets_access) + var/lock_status = TICKET_OPEN + switch(access_ticket.ticket_status) + if(TICKET_REJECTED, TICKET_CANCELLED, TICKET_REVOKED) + lock_status = TICKET_CLOSED + + var/list/current_ticket = list() + current_ticket["id"] = access_ticket.ticket_id + current_ticket["time"] = access_ticket.ticket_time + current_ticket["priority_status"] = access_ticket.ticket_priority + current_ticket["title"] = access_ticket.ticket_name + current_ticket["details"] = access_ticket.ticket_details + current_ticket["status"] = access_ticket.ticket_status + current_ticket["submitter"] = access_ticket.ticket_submitter + current_ticket["assignee"] = access_ticket.ticket_assignee + current_ticket["lock_status"] = lock_status + current_ticket["ref"] = "\ref[access_ticket]" + logged_access += list(current_ticket) + + if(lock_status == TICKET_OPEN) + requesting_access += access_ticket.ticket_name + data["access_tickets"] = logged_access + + return data diff --git a/code/game/machinery/ARES/ARES_procs.dm b/code/game/machinery/ARES/ARES_procs.dm index ef1b836a3d4b..09a90f240aeb 100644 --- a/code/game/machinery/ARES/ARES_procs.dm +++ b/code/game/machinery/ARES/ARES_procs.dm @@ -54,22 +54,6 @@ GLOBAL_LIST_INIT(maintenance_categories, list( alert.delink() ..() -/datum/ares_link/proc/get_ares_vents() - var/list/security_vents = list() - var/datum/ares_link/link = GLOB.ares_link - for(var/obj/structure/pipes/vents/pump/no_boom/gas/vent in link.linked_vents) - if(!vent.vent_tag) - vent.vent_tag = "Security Vent #[link.tag_num]" - link.tag_num++ - - var/list/current_vent = list() - var/is_available = COOLDOWN_FINISHED(vent, vent_trigger_cooldown) - current_vent["vent_tag"] = vent.vent_tag - current_vent["ref"] = "\ref[vent]" - current_vent["available"] = is_available - security_vents += list(current_vent) - return security_vents - /* BELOW ARE IN AdminAres.dm /datum/ares_link/tgui_interact(mob/user, datum/tgui/ui) diff --git a/code/game/machinery/ARES/ARES_step_triggers.dm b/code/game/machinery/ARES/ARES_step_triggers.dm index 77a53200ddd3..011702aa0c6d 100644 --- a/code/game/machinery/ARES/ARES_step_triggers.dm +++ b/code/game/machinery/ARES/ARES_step_triggers.dm @@ -84,6 +84,7 @@ /obj/effect/step_trigger/ares_alert/public pass_accesses = list(ACCESS_MARINE_AI_TEMP, ACCESS_MARINE_AI, ACCESS_ARES_DEBUG) + /obj/effect/step_trigger/ares_alert/core alert_id = "AresCore" pass_accesses = list(ACCESS_MARINE_AI_TEMP, ACCESS_MARINE_AI, ACCESS_ARES_DEBUG) diff --git a/code/game/machinery/ARES/apollo_pda.dm b/code/game/machinery/ARES/apollo_pda.dm index 7b92b869daeb..2276164ccc0b 100644 --- a/code/game/machinery/ARES/apollo_pda.dm +++ b/code/game/machinery/ARES/apollo_pda.dm @@ -97,76 +97,14 @@ update_icon() /obj/item/device/working_joe_pda/ui_data(mob/user) - var/list/data = list() - - data["current_menu"] = current_menu - data["last_page"] = last_menu - - data["logged_in"] = last_login - - data["access_text"] = "access level [authentication], [ares_auth_to_text(authentication)]." - data["access_level"] = authentication - - data["alert_level"] = GLOB.security_level - data["worldtime"] = world.time - - data["access_log"] = list() - data["access_log"] += datacore.apollo_login_list - - data["apollo_log"] = list() - data["apollo_log"] += datacore.apollo_log - - data["notify_sounds"] = notify_sounds - - var/list/logged_maintenance = list() - for(var/datum/ares_ticket/maintenance/maint_ticket as anything in link.tickets_maintenance) - if(!istype(maint_ticket)) - continue - var/lock_status = TICKET_OPEN - switch(maint_ticket.ticket_status) - if(TICKET_REJECTED, TICKET_CANCELLED, TICKET_COMPLETED) - lock_status = TICKET_CLOSED - - var/list/current_maint = list() - current_maint["id"] = maint_ticket.ticket_id - current_maint["time"] = maint_ticket.ticket_time - current_maint["priority_status"] = maint_ticket.ticket_priority - current_maint["category"] = maint_ticket.ticket_name - current_maint["details"] = maint_ticket.ticket_details - current_maint["status"] = maint_ticket.ticket_status - current_maint["submitter"] = maint_ticket.ticket_submitter - current_maint["assignee"] = maint_ticket.ticket_assignee - current_maint["lock_status"] = lock_status - current_maint["ref"] = "\ref[maint_ticket]" - logged_maintenance += list(current_maint) - data["maintenance_tickets"] = logged_maintenance - - var/list/logged_access = list() - var/list/requesting_access = list() - for(var/datum/ares_ticket/access/access_ticket as anything in link.tickets_access) - var/lock_status = TICKET_OPEN - switch(access_ticket.ticket_status) - if(TICKET_REJECTED, TICKET_CANCELLED, TICKET_REVOKED) - lock_status = TICKET_CLOSED - - var/list/current_ticket = list() - current_ticket["id"] = access_ticket.ticket_id - current_ticket["time"] = access_ticket.ticket_time - current_ticket["priority_status"] = access_ticket.ticket_priority - current_ticket["title"] = access_ticket.ticket_name - current_ticket["details"] = access_ticket.ticket_details - current_ticket["status"] = access_ticket.ticket_status - current_ticket["submitter"] = access_ticket.ticket_submitter - current_ticket["assignee"] = access_ticket.ticket_assignee - current_ticket["lock_status"] = lock_status - current_ticket["ref"] = "\ref[access_ticket]" - logged_access += list(current_ticket) - - if(lock_status == TICKET_OPEN) - requesting_access += access_ticket.ticket_name - data["access_tickets"] = logged_access - - data["security_vents"] = link.get_ares_vents() + var/list/data = datacore.get_interface_data() + + data["local_current_menu"] = current_menu + data["local_last_page"] = last_menu + data["local_logged_in"] = last_login + data["local_access_text"] = "access level [authentication], [ares_auth_to_text(authentication)]." + data["local_access_level"] = authentication + data["local_notify_sounds"] = notify_sounds return data diff --git a/colonialmarines.dme b/colonialmarines.dme index 48996a93ec30..ee0c5a9c105b 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -894,6 +894,7 @@ #include "code\game\machinery\ARES\ARES_interface.dm" #include "code\game\machinery\ARES\ARES_interface_admin.dm" #include "code\game\machinery\ARES\ARES_interface_apollo.dm" +#include "code\game\machinery\ARES\ARES_interface_data.dm" #include "code\game\machinery\ARES\ARES_procs.dm" #include "code\game\machinery\ARES\ARES_records.dm" #include "code\game\machinery\ARES\ARES_step_triggers.dm" diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index b5181e0f77f6..1b74cfdcf760 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -4994,7 +4994,7 @@ name = "ARES Operations Shutter"; pixel_x = -24; pixel_y = -8; - req_one_access_txt = "90;91;92" + req_one_access_txt = "91;92" }, /turf/open/floor/almayer/aicore/no_build/ai_silver/west, /area/almayer/command/airoom) @@ -20314,7 +20314,7 @@ name = "ARES Mainframe Lockdown"; pixel_x = 24; pixel_y = 24; - req_one_access_txt = "200;91;92" + req_one_access_txt = "91;92" }, /turf/open/floor/almayer/aicore/glowing/no_build, /area/almayer/command/airoom) @@ -23957,7 +23957,7 @@ name = "ARES Operations Shutter"; pixel_x = -24; pixel_y = -8; - req_one_access_txt = "90;91;92" + req_one_access_txt = "91;92" }, /turf/open/floor/almayer/aicore/glowing/no_build/ai_floor3, /area/almayer/command/airoom) @@ -35578,7 +35578,7 @@ name = "ARES Mainframe Lockdown"; pixel_x = -24; pixel_y = 24; - req_one_access_txt = "200;91;92" + req_one_access_txt = "91;92" }, /turf/open/floor/almayer/aicore/glowing/no_build, /area/almayer/command/airoom) @@ -36574,7 +36574,7 @@ name = "ARES Operations Shutter"; pixel_x = 24; pixel_y = -8; - req_one_access_txt = "90;91;92" + req_one_access_txt = "91;92" }, /turf/open/floor/almayer/aicore/glowing/no_build/ai_floor3, /area/almayer/command/airoom) @@ -37346,7 +37346,7 @@ name = "ARES Operations Shutter"; pixel_x = 24; pixel_y = -8; - req_one_access_txt = "90;91;92" + req_one_access_txt = "91;92" }, /turf/open/floor/almayer/aicore/no_build/ai_silver/east, /area/almayer/command/airoom) @@ -50597,7 +50597,7 @@ name = "ARES Mainframe Lockdown"; pixel_x = 24; pixel_y = -24; - req_one_access_txt = "200;91;92" + req_one_access_txt = "91;92" }, /turf/open/floor/almayer/aicore/no_build, /area/almayer/command/airoom) @@ -62176,7 +62176,7 @@ name = "ARES Mainframe Lockdown"; pixel_x = -24; pixel_y = -24; - req_one_access_txt = "200;91;92" + req_one_access_txt = "91;92" }, /turf/open/floor/almayer/aicore/no_build, /area/almayer/command/airoom) diff --git a/tgui/packages/tgui/interfaces/AresAdmin.jsx b/tgui/packages/tgui/interfaces/AresAdmin.jsx index 79a8e83a1f00..408614a0af63 100644 --- a/tgui/packages/tgui/interfaces/AresAdmin.jsx +++ b/tgui/packages/tgui/interfaces/AresAdmin.jsx @@ -27,15 +27,15 @@ const PAGES = { export const AresAdmin = (props) => { const { data } = useBackend(); - const { current_menu, sudo } = data; - const PageComponent = PAGES[current_menu](); + const { local_current_menu, ares_sudo } = data; + const PageComponent = PAGES[local_current_menu](); let themecolor = 'crtyellow'; - if (sudo >= 1) { + if (ares_sudo >= 1) { themecolor = 'crtred'; - } else if (current_menu === 'emergency') { + } else if (local_current_menu === 'emergency') { themecolor = 'crtred'; - } else if (current_menu === 'core_security') { + } else if (local_current_menu === 'core_security') { themecolor = 'crtred'; } @@ -86,8 +86,14 @@ const Login = (props) => { const MainMenu = (props) => { const { data, act } = useBackend(); - const { logged_in, access_text, last_page, current_menu, sudo, admin_login } = - data; + const { + ares_logged_in, + ares_access_text, + local_last_page, + local_current_menu, + ares_sudo, + local_admin_login, + } = data; return ( <> @@ -100,7 +106,7 @@ const MainMenu = (props) => { textAlign="center" tooltip="Go back" onClick={() => act('go_back')} - disabled={last_page === current_menu} + disabled={local_last_page === local_current_menu} /> )} - {sudo >= 1 && ( + {ares_sudo >= 1 && ( @@ -451,12 +457,12 @@ const MainMenu = (props) => { const AnnouncementLogs = (props) => { const { data, act } = useBackend(); const { - logged_in, - access_text, - last_page, - current_menu, + ares_logged_in, + ares_access_text, + local_last_page, + local_current_menu, records_announcement, - admin_login, + local_admin_login, } = data; return ( @@ -470,7 +476,7 @@ const AnnouncementLogs = (props) => { textAlign="center" tooltip="Go back" onClick={() => act('go_back')} - disabled={last_page === current_menu} + disabled={local_last_page === local_current_menu} /> )} - {active_convo.map((message, i) => { + {local_active_convo.map((message, i) => { return ( {message} ); })} - {!!active_convo.length && ( + {!!local_active_convo.length && ( @@ -1073,7 +1081,9 @@ const ARESTalk = (props) => { bold tooltip="Send a message as if you were the person logged in at the interface." onClick={() => - act('fake_message_ares', { active_convo: active_ref }) + act('fake_message_ares', { + local_active_convo: local_active_ref, + }) } > Send Fake Message @@ -1091,9 +1101,9 @@ const ARESTalk = (props) => { fontSize="1.5rem" bold onClick={() => - act('clear_conversation', { active_convo: active_ref }) + act('clear_conversation', { local_active_convo: local_active_ref }) } - disabled={!active_convo.length} + disabled={!local_active_convo.length} > Clear Conversation @@ -1105,12 +1115,12 @@ const ARESTalk = (props) => { const DeletedTalks = (props) => { const { data, act } = useBackend(); const { - logged_in, - access_text, - last_page, - current_menu, + ares_logged_in, + ares_access_text, + local_last_page, + local_current_menu, deleted_discussions, - admin_login, + local_admin_login, } = data; return ( @@ -1124,7 +1134,7 @@ const DeletedTalks = (props) => { textAlign="center" tooltip="Go back" onClick={() => act('go_back')} - disabled={last_page === current_menu} + disabled={local_last_page === local_current_menu} /> - {access_level >= 2 && ( + {local_access_level >= 2 && (

Access Level 2

@@ -215,7 +215,7 @@ const MainMenu = (props) => {
)} - {access_level >= 3 && ( + {local_access_level >= 3 && (

Access Level 3

@@ -248,7 +248,7 @@ const MainMenu = (props) => {
)} - {access_level >= 5 && ( + {local_access_level >= 5 && (

Access Level 5

@@ -295,7 +295,7 @@ const MainMenu = (props) => {
)} - {access_level >= 6 && ( + {local_access_level >= 6 && (

Access Level 6

@@ -315,7 +315,7 @@ const MainMenu = (props) => {
)} - {access_level >= 9 && ( + {local_access_level >= 9 && (

Access Level 9

@@ -348,12 +348,12 @@ const MainMenu = (props) => {
)} - {access_level >= 11 && ( + {local_access_level >= 11 && (

Maintenance Access

- {sudo === 0 && ( + {local_sudo === 0 && ( )} - {sudo >= 1 && ( + {local_sudo >= 1 && ( )} - {active_convo.map((message, i) => { + {local_active_convo.map((message, i) => { return ( {message} ); })} - {!!active_convo.length && ( + {!!local_active_convo.length && ( @@ -1020,9 +1039,9 @@ const ARESTalk = (props) => { fontSize="1.5rem" bold onClick={() => - act('clear_conversation', { active_convo: active_ref }) + act('clear_conversation', { local_active_convo: local_active_ref }) } - disabled={!active_convo.length} + disabled={!local_active_convo.length} > Clear Conversation @@ -1034,10 +1053,10 @@ const ARESTalk = (props) => { const DeletedTalks = (props) => { const { data, act } = useBackend(); const { - logged_in, - access_text, - last_page, - current_menu, + local_logged_in, + local_access_text, + local_last_page, + local_current_menu, deleted_discussions, } = data; @@ -1052,7 +1071,7 @@ const DeletedTalks = (props) => { textAlign="center" tooltip="Go back" onClick={() => act('go_back')} - disabled={last_page === current_menu} + disabled={local_last_page === local_current_menu} /> @@ -1296,12 +1315,12 @@ const Requisitions = (props) => { const FlightLogs = (props) => { const { data, act } = useBackend(); const { - logged_in, - access_text, - last_page, - current_menu, + local_logged_in, + local_access_text, + local_last_page, + local_current_menu, records_flight, - access_level, + local_access_level, } = data; return ( @@ -1315,7 +1334,7 @@ const FlightLogs = (props) => { textAlign="center" tooltip="Go back" onClick={() => act('go_back')} - disabled={last_page === current_menu} + disabled={local_last_page === local_current_menu} /> )} - {access_level === 3 && ( + {local_access_level === 3 && ( {
- {access_level >= 4 && ( + {local_access_level >= 4 && (

Certified Personnel

@@ -217,7 +217,7 @@ const MainMenu = (props) => {
)} - {access_level >= 5 && ( + {local_access_level >= 5 && (

Task Management

@@ -251,7 +251,7 @@ const MainMenu = (props) => {
)} - {access_level >= 5 && ( + {local_access_level >= 5 && (

Core Security Protocols

@@ -294,7 +294,13 @@ const MainMenu = (props) => { const ApolloLog = (props) => { const { data, act } = useBackend(); - const { logged_in, access_text, last_page, current_menu, apollo_log } = data; + const { + local_logged_in, + local_access_text, + local_last_page, + local_current_menu, + apollo_log, + } = data; return ( <> @@ -307,7 +313,7 @@ const ApolloLog = (props) => { textAlign="center" tooltip="Go back" onClick={() => act('go_back')} - disabled={last_page === current_menu} + disabled={local_last_page === local_current_menu} /> @@ -831,7 +843,7 @@ const AccessRequests = (props) => { view_icon = 'circle-minus'; } let can_cancel = 'Yes'; - if (ticket.submitter !== logged_in) { + if (ticket.submitter !== local_logged_in) { can_cancel = 'No'; } else if (ticket.lock_status === 'CLOSED') { can_cancel = 'No'; @@ -877,8 +889,13 @@ const AccessRequests = (props) => { const AccessTickets = (props) => { const { data, act } = useBackend(); - const { logged_in, access_text, last_page, current_menu, access_tickets } = - data; + const { + local_logged_in, + local_access_text, + local_last_page, + local_current_menu, + access_tickets, + } = data; return ( <> @@ -891,7 +908,7 @@ const AccessTickets = (props) => { textAlign="center" tooltip="Go back" onClick={() => act('go_back')} - disabled={last_page === current_menu} + disabled={local_last_page === local_current_menu} />