From 4dd8954f1ecbba566052963ec23374dcf76ba9e9 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Mon, 22 Jun 2015 00:52:51 -0500 Subject: [PATCH 01/75] Multisword --- code/game/gamemodes/wizard/artefact.dm | 250 +++++++++++++++++++++++++ 1 file changed, 250 insertions(+) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 3fb8fe34f4b..b5082a5fb45 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -173,3 +173,253 @@ H.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/roman(H), slot_l_hand) H.equip_to_slot_or_del(new /obj/item/weapon/claymore(H), slot_r_hand) H.equip_to_slot_or_del(new /obj/item/weapon/twohanded/spear(H), slot_back) + +/obj/item/weapon/multisword + name = "multiverse sword" + desc = "A weapon capable of summoning copies of yourself from across space and time to fight by your side." + icon_state = "claymore" + item_state = "claymore" + hitsound = 'sound/weapons/bladeslice.ogg' + flags = CONDUCT + slot_flags = SLOT_BELT + force = 20 + throwforce = 10 + w_class = 2 + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + var/faction = list("unassigned") + var/charged = 40 + var/assigned = "unassigned" + var/evil = FALSE + +/obj/item/weapon/multisword/New() + ..() + SSobj.processing |= src + + +/obj/item/weapon/multisword/Destroy() + SSobj.processing.Remove(src) + ..() + + +/obj/item/weapon/multisword/process() + if(charged < 40) + charged++ + return + +/obj/item/weapon/multisword/attack_self(mob/user) + if(user.mind.special_role == "apprentice") + user << "You know better than to touch your teacher's stuff." + return + if(charged == 40) + var/faction_check = 0 + for(var/F in faction) + if(F in user.faction) + faction_check = 1 + break + if(faction_check == 0) + faction = list("[user.real_name]") + assigned = "user.realname" + user.faction = list("[user.real_name]") + user << "You bind the sword to yourself. You can now use it to summon help." + if(!usr.mind.special_role) + if(prob(30)) + user << "With your new found power you could easily conquer the station!" + var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone + hijack_objective.owner = usr.mind + usr.mind.objectives += hijack_objective + hijack_objective.explanation_text = "Ensure only [usr.real_name] and their copies are on the shuttle!" + ticker.mode.traitors += usr.mind + usr.mind.special_role = "[usr.real_name] Prime" + evil = TRUE + else + user << "With your new found power you could easily defend the station!" + var/datum/objective/survive/new_objective = new /datum/objective/survive + new_objective.owner = usr.mind + new_objective.explanation_text = "Survive, and help defend the innocent from the mobs of multiverse clones." + usr.mind.objectives += new_objective + ticker.mode.traitors += usr.mind + usr.mind.special_role = "[usr.real_name] Prime" + evil = FALSE + else + var/list/candidates = get_candidates(BE_WIZARD) + if(candidates.len) + var/client/C = pick(candidates) + spawn_copy(C, get_turf(user.loc), user) + user << "The sword flashes, and you find yourself face to face with...you!" + charged = 0 + spawn_copy(C, get_turf(user.loc), user) + for(var/obj/item/weapon/multisword/M in world) + if(M.assigned == assigned) + M.charged = 0 + + else + user << "Unable to reach your apprentice! You can either attack the spellbook with the contract to refund your points, or wait and try again later." + else + user << "[src] is recharging! Keep in mind it shares a cooldown with the swords wielded by your copies." + + +/obj/item/weapon/multisword/proc/spawn_copy(var/client/C, var/turf/T) + var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) + C.prefs.copy_to(M) + M.key = C.key + equip_copy(M) + M << "You are an alternate version of [usr.real_name] from another universe! Help them accomplish their goals at all costs." + M.mind.name = usr.real_name + M.real_name = usr.real_name + M.name = usr.real_name + if(evil) + var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone + hijack_objective.owner = M.mind + M.mind.objectives += hijack_objective + hijack_objective.explanation_text = "Ensure only [usr.real_name] and their copies are on the shuttle!" + ticker.mode.traitors += M.mind + M.mind.special_role = "multiverse traveller" + else + var/datum/objective/protect/new_objective = new /datum/objective/protect + new_objective.owner = M:mind + new_objective:target = usr:mind + new_objective.explanation_text = "Protect [usr.real_name], your copy, and help them defend the innocent from the mobs of multiverse clones." + M.mind.objectives += new_objective + ticker.mode.traitors += M.mind + M.mind.special_role = "multiverse traveller" + +/obj/item/weapon/multisword/proc/equip_copy(var/mob/living/carbon/human/M) + + var/obj/item/weapon/multisword/sword = new /obj/item/weapon/multisword + sword.assigned = assigned + sword.faction = list("[assigned]") + sword.evil = evil + + var/randomize = pick("mobster","roman","wizard","cyborg","syndicate","assistant", "animu", "cultist", "highlander", "clown", "killer", "pirate", "soviet") + + switch(randomize) + if("mobster") + M.equip_to_slot_or_del(new /obj/item/clothing/head/fedora(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses) + M.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/really_black(M), slot_w_uniform) + M.equip_to_slot_or_del(sword, slot_r_hand) + + if("roman") + var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionaire) + M.equip_to_slot_or_del(new hat(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/under/roman(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/roman(M), slot_l_hand) + M.equip_to_slot_or_del(sword, slot_r_hand) + + if("wizard") + M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/red(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/red(M), slot_head) + M.equip_to_slot_or_del(sword, slot_r_hand) + if("cyborg") + var/obj/item/organ/limb/chest/C = locate(/obj/item/organ/limb/chest) in M.organs + qdel(C) + M.organs += new /obj/item/organ/limb/robot/chest + var/obj/item/organ/limb/r_arm/R = locate(/obj/item/organ/limb/r_arm) in M.organs + qdel(R) + M.organs += new /obj/item/organ/limb/robot/r_arm + var/obj/item/organ/limb/l_arm/L = locate(/obj/item/organ/limb/l_arm) in M.organs + qdel(L) + M.organs += new /obj/item/organ/limb/robot/l_arm + var/obj/item/organ/limb/l_leg/LL = locate(/obj/item/organ/limb/l_leg) in M.organs + qdel(LL) + M.organs += new /obj/item/organ/limb/robot/l_leg + var/obj/item/organ/limb/r_leg/RL = locate(/obj/item/organ/limb/r_leg) in M.organs + qdel(RL) + M.organs += new /obj/item/organ/limb/robot/r_leg + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses) + M.equip_to_slot_or_del(sword, slot_r_hand) + if("syndicate") + M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/swat(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(M),slot_wear_mask) + M.equip_to_slot_or_del(sword, slot_r_hand) + if("assistant") + M.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes) + M.equip_to_slot_or_del(sword, slot_r_hand) + if("animu") + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/head/kitty(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/under/schoolgirl/red(M), slot_w_uniform) + M.equip_to_slot_or_del(sword, slot_r_hand) + if("cultist") + M.equip_to_slot_or_del(new /obj/item/clothing/head/culthood/alt(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(sword, slot_r_hand) + if("highlander") + M.equip_to_slot_or_del(new /obj/item/clothing/under/kilt(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/head/beret(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) + M.equip_to_slot_or_del(sword, slot_r_hand) + if("clown") + M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(M), slot_wear_mask) + M.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(M), slot_l_store) + M.equip_to_slot_or_del(sword, slot_r_hand) + if("killer") + M.equip_to_slot_or_del(new /obj/item/clothing/under/overalls(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/white(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/latex(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(M), slot_wear_mask) + M.equip_to_slot_or_del(new /obj/item/clothing/head/welding(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/apron(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_store) + M.equip_to_slot_or_del(new /obj/item/weapon/scalpel(M), slot_r_store) + M.equip_to_slot_or_del(sword, slot_r_hand) + for(var/obj/item/carried_item in M.contents) + if(!istype(carried_item, /obj/item/weapon/implant)) + carried_item.add_blood(M) + if("pirate") + M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/head/bandana(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses) + M.equip_to_slot_or_del(sword, slot_r_hand) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + if("soviet") + M.equip_to_slot_or_del(new /obj/item/clothing/head/hgpiratecap(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/hgpirate(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform) + + else + return + + ready_dna(M) + if(M.dna && prob(50)) + var/list/all_species = list() + for(var/speciestype in typesof(/datum/species) - /datum/species) + var/datum/species/S = new speciestype() + if(!S.dangerous_existence) + all_species += speciestype + hardset_dna(M, null, null, null, null, pick(all_species)) + M.update_icons() + +/* var/obj/item/weapon/card/id/W = new obj/item/weapon/card/id + W.icon_state = "centcom" + W.access = assistant.get_access() + W.assignment = "Multiverse Traveller" + W.registered_name = M.real_name + W.update_label(M.real_name) + M.equip_to_slot_or_del(W, slot_wear_id)*/ From e87e4b4ba2351fb0bb7fc69a68c6b61e8c8db57a Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Mon, 22 Jun 2015 00:55:02 -0500 Subject: [PATCH 02/75] New Hijack --- code/game/gamemodes/objective.dm | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 34097634102..67d996f582e 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -213,6 +213,33 @@ return 0 return 1 +/datum/objective/hijackclone + explanation_text = "Hijack the emergency shuttle by escaping with only your copies." + dangerrating = 25 + martyr_compatible = 0 + +/datum/objective/hijackclone/check_completion() + if(!owner.current || owner.current.stat) + return 0 + if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME) + return 0 + if(issilicon(owner.current)) + return 0 + + var/area/A = get_area(owner.current) + if(SSshuttle.emergency.areaInstance != A) + return 0 + + for(var/mob/living/player in player_list) + if(player.mind && player.mind != owner) + if(player.stat != DEAD) + switch(player.type) + if(/mob/living/silicon/ai, /mob/living/silicon/pai) + continue + if(get_area(player) == A) + if(player.real_name != owner.current.real_name && !istype(get_turf(player.mind.current), /turf/simulated/floor/plasteel/shuttle/red)) + return 0 + return 1 /datum/objective/block explanation_text = "Do not allow any organic lifeforms to escape on the shuttle alive." From b361c395abd99c86355a2b4c2c2fbac077e53511 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Mon, 22 Jun 2015 00:56:07 -0500 Subject: [PATCH 03/75] Only me --- code/modules/admin/verbs/onlyone.dm | 38 ++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm index 986ca51c31b..924e8e6880b 100644 --- a/code/modules/admin/verbs/onlyone.dm +++ b/code/modules/admin/verbs/onlyone.dm @@ -47,4 +47,40 @@ H.equip_to_slot_or_del(W, slot_wear_id) message_admins("[key_name_admin(usr)] used THERE CAN BE ONLY ONE!") - log_admin("[key_name(usr)] used there can be only one.") \ No newline at end of file + log_admin("[key_name(usr)] used there can be only one.") + + +/client/proc/only_me() + if(!ticker) + alert("The game hasn't started yet!") + return + + for(var/mob/living/carbon/human/H in player_list) + if(H.stat == 2 || !(H.client)) continue + if(is_special_character(H)) continue + + ticker.mode.traitors += H.mind + H.mind.special_role = "[H.real_name] Prime" + + var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone + hijack_objective.owner = H.mind + H.mind.objectives += hijack_objective + + H << "You are the multiverse summoner. Activate your blade to summon copies of yourself from another universe to fight by your side" + var/obj_count = 1 + for(var/datum/objective/OBJ in H.mind.objectives) + H << "Objective #[obj_count]: [OBJ.explanation_text]" + obj_count++ + + + var/obj/item/weapon/card/id/W = new(H) + W.icon_state = "centcom" + W.access = get_all_accesses() + W.access += get_all_centcom_access() + W.assignment = "Multiverse Summoner" + W.registered_name = H.real_name + W.update_label(H.real_name) + H.equip_to_slot_or_del(W, slot_wear_id) + + message_admins("[key_name_admin(usr)] used THERE CAN BE ONLY ME!") + log_admin("[key_name(usr)] used there can be only me.") From fd37bca4e751f535a6dab4990453d653ad8ef8cd Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Mon, 22 Jun 2015 01:09:16 -0500 Subject: [PATCH 04/75] Forgot a very important line --- code/game/gamemodes/wizard/artefact.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index b5082a5fb45..dd4c0e7234f 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -267,6 +267,7 @@ M.mind.name = usr.real_name M.real_name = usr.real_name M.name = usr.real_name + M.faction = list("[usr.real_name]") if(evil) var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone hijack_objective.owner = M.mind From 28ed26ebb686fa6414064635e6dfa3adbdba2c60 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Mon, 22 Jun 2015 01:12:47 -0500 Subject: [PATCH 05/75] Update artefact.dm --- code/game/gamemodes/wizard/artefact.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index dd4c0e7234f..97c2e00636d 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -189,7 +189,7 @@ var/faction = list("unassigned") var/charged = 40 var/assigned = "unassigned" - var/evil = FALSE + var/evil = TRUE /obj/item/weapon/multisword/New() ..() From 033650cc47541529063f0d697216d9f3aab07139 Mon Sep 17 00:00:00 2001 From: GunHog Date: Fri, 3 Jul 2015 01:38:29 -0500 Subject: [PATCH 06/75] Cyborg headlamps! - Borg lights are now a screen button. - Removed all borg flashlight modules. --- code/_onclick/hud/_defines.dm | 1 + code/_onclick/hud/robot.dm | 13 +++++++ .../objects/items/robot/robot_upgrades.dm | 1 + .../modules/mob/living/silicon/robot/death.dm | 1 + code/modules/mob/living/silicon/robot/life.dm | 1 + .../modules/mob/living/silicon/robot/robot.dm | 21 +++++++++- .../mob/living/silicon/robot/robot_modules.dm | 8 ---- html/changelogs/Gun_Hog_Borg_Lamps.yml | 36 ++++++++++++++++++ icons/mob/screen_cyborg.dmi | Bin 17522 -> 17952 bytes 9 files changed, 72 insertions(+), 10 deletions(-) create mode 100644 html/changelogs/Gun_Hog_Borg_Lamps.yml diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 1775761d6a2..e6235d4587e 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -38,6 +38,7 @@ #define ui_storage2 "CENTER+2:20,SOUTH:5" #define ui_borg_sensor "CENTER-3:16, SOUTH:5" //borgs +#define ui_borg_lamp "CENTER-4:16, SOUTH:5" //borgies #define ui_inv1 "CENTER-2:16,SOUTH:5" //borgs #define ui_inv2 "CENTER-1 :16,SOUTH:5" //borgs #define ui_inv3 "CENTER :16,SOUTH:5" //borgs diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index 878efe59e65..5b506d6aea2 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -53,6 +53,14 @@ var/mob/living/silicon/robot/R = usr R.uneq_active() +/obj/screen/robot/lamp + name = "headlamp" + icon_state = "lamp" + +/obj/screen/robot/lamp/Click() + var/mob/living/silicon/robot/R = usr + R.toggle_headlamp() + /datum/hud/proc/robot_hud() adding = list() @@ -102,6 +110,11 @@ using.screen_loc = ui_borg_sensor adding += using +//Headlamp control + using = new /obj/screen/robot/lamp() + using.screen_loc = ui_borg_lamp + adding += using + //Intent using = new /obj/screen/act_intent() using.icon = 'icons/mob/screen_cyborg.dmi' diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index f16ea230382..972142ccf4c 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -36,6 +36,7 @@ R.designation = "Default" R.notify_ai(2) R.update_icons() + R.update_headlamp() return 1 diff --git a/code/modules/mob/living/silicon/robot/death.dm b/code/modules/mob/living/silicon/robot/death.dm index e12b5db835b..280241e0cc0 100644 --- a/code/modules/mob/living/silicon/robot/death.dm +++ b/code/modules/mob/living/silicon/robot/death.dm @@ -27,6 +27,7 @@ update_canmove() if(camera) camera.status = 0 + update_headlamp() //So borg lights are disabled when killed. uneq_all() // particularly to ensure sight modes are cleared diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 7ce41a2de6a..26d994e3314 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -59,6 +59,7 @@ if (paralysis || stunned || weakened) //Stunned etc. stat = UNCONSCIOUS + update_headlamp() return 1 diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index c1030d43b39..2a0dfbfc541 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -60,6 +60,8 @@ var/tonermax = 40 var/jetpackoverlay = 0 var/braintype = "Cyborg" + var/lamp_on = 0 //If a borg's headlamp is on or not. + var/lamp_intensity = 4 //Some borgies require more light than others, such as miners. /mob/living/silicon/robot/New(loc) spark_system = new /datum/effect/effect/system/spark_spread() @@ -182,6 +184,7 @@ animation_length = 30 modtype = "Miner" feedback_inc("cyborg_miner",1) + lamp_intensity = 6 //mining lantern if("Medical") module = new /obj/item/weapon/robot_module/medical(src) @@ -201,6 +204,7 @@ //speed = -1 Secborgs have nerfed tasers now, so the speed boost is not necessary status_flags &= ~CANPUSH feedback_inc("cyborg_security",1) + lamp_intensity = 5 //seclite if("Engineering") module = new /obj/item/weapon/robot_module/engineering(src) @@ -221,6 +225,7 @@ transform_animation(animation_length) notify_ai(2) update_icons() + update_headlamp() SetEmagged(emagged) // Update emag status and give/take emag modules. /mob/living/silicon/robot/proc/transform_animation(animation_length) @@ -751,8 +756,6 @@ overlays += "minerjetpack" update_fire() - - /mob/living/silicon/robot/proc/installed_modules() if(!module) pick_module() @@ -978,6 +981,20 @@ set category = "Robot Commands" set_autosay() +/mob/living/silicon/robot/proc/toggle_headlamp() + lamp_on = !lamp_on + src << "Headlamp power [lamp_on ? "enabled" : "disabled"]." + update_headlamp() + +/mob/living/silicon/robot/proc/update_headlamp() + SetLuminosity(0) + + if(!lamp_on || stat) + return + else + AddLuminosity(lamp_intensity) + + /mob/living/silicon/robot/proc/deconstruct() var/turf/T = get_turf(src) if (robot_suit) diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 59e6475286e..bd56b118850 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -66,7 +66,6 @@ /obj/item/weapon/robot_module/standard/New() ..() - modules += new /obj/item/device/flashlight(src) modules += new /obj/item/weapon/melee/baton/loaded(src) modules += new /obj/item/weapon/extinguisher(src) modules += new /obj/item/weapon/wrench(src) @@ -81,7 +80,6 @@ /obj/item/weapon/robot_module/medical/New() ..() - modules += new /obj/item/device/flashlight(src) modules += new /obj/item/device/healthanalyzer(src) modules += new /obj/item/weapon/reagent_containers/borghypo(src) modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src) @@ -119,7 +117,6 @@ /obj/item/weapon/robot_module/engineering/New() ..() - modules += new /obj/item/device/flashlight(src) modules += new /obj/item/borg/sight/meson(src) emag = new /obj/item/borg/stun(src) modules += new /obj/item/weapon/rcd/borg(src) @@ -173,7 +170,6 @@ /obj/item/weapon/robot_module/security/New() ..() - modules += new /obj/item/device/flashlight/seclite(src) modules += new /obj/item/weapon/restraints/handcuffs/cable/zipties/cyborg(src) modules += new /obj/item/weapon/melee/baton/loaded(src) modules += new /obj/item/weapon/gun/energy/disabler/cyborg(src) @@ -187,7 +183,6 @@ /obj/item/weapon/robot_module/janitor/New() ..() - modules += new /obj/item/device/flashlight(src) modules += new /obj/item/weapon/soap/nanotrasen(src) modules += new /obj/item/weapon/storage/bag/trash/cyborg(src) modules += new /obj/item/weapon/mop/cyborg(src) @@ -205,7 +200,6 @@ /obj/item/weapon/robot_module/butler/New() ..() - modules += new /obj/item/device/flashlight(src) modules += new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src) modules += new /obj/item/weapon/reagent_containers/food/condiment/enzyme(src) modules += new /obj/item/weapon/pen(src) @@ -239,7 +233,6 @@ modules += new /obj/item/weapon/storage/bag/ore/cyborg(src) modules += new /obj/item/weapon/pickaxe/drill/cyborg(src) modules += new /obj/item/weapon/shovel(src) - modules += new /obj/item/device/flashlight/lantern(src) modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) modules += new /obj/item/device/t_scanner/adv_mining_scanner(src) modules += new /obj/item/weapon/gun/energy/kinetic_accelerator(src) @@ -251,7 +244,6 @@ /obj/item/weapon/robot_module/syndicate/New() ..() - modules += new /obj/item/device/flashlight(src) modules += new /obj/item/weapon/melee/energy/sword/cyborg(src) modules += new /obj/item/weapon/gun/energy/printer(src) modules += new /obj/item/weapon/gun/projectile/revolver/grenadelauncher/cyborg(src) diff --git a/html/changelogs/Gun_Hog_Borg_Lamps.yml b/html/changelogs/Gun_Hog_Borg_Lamps.yml new file mode 100644 index 00000000000..37c4bccb9de --- /dev/null +++ b/html/changelogs/Gun_Hog_Borg_Lamps.yml @@ -0,0 +1,36 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# spellcheck (typo fixes) +# experiment +# tgs (TG-ported fixes?) +################################# + +# Your name. +author: Gun Hog + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Nanotrasen advancements in cyborg technology now allow for integrated headlamps! As such, the flashlight package normally used as a module is now seamlessly merged with their systems!" diff --git a/icons/mob/screen_cyborg.dmi b/icons/mob/screen_cyborg.dmi index 002768f9d2a37cff13be284e644135c7811d1085..1371a38420f7b66c41dacc9f7dde5c8184fc20e8 100644 GIT binary patch literal 17952 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 IOPU7!A7Hl*Jpcdz literal 17522 zcmXwBbyQT}_hmr31tb&!>29S#5Kxguy7?doNVhO_r!+_--67rGodVJz-7zr0@6LCv z-yiC7&G6oR_nx!Q-us+Kh?0UVE*1qA5)u;bhxhMPz`v{DPdf%0_?yzlW)2An!r-o^ z>G;mn!NmTnt>af4Ya}Gs)QIU8Yh-R5^b^<_@w0Gg67-rh>p}?MAue|f}i#Ly5x%gT4LbQIT z>uV=Wk<3En@Uq|a-H9CkZMao)5lo?qj#Y|9*{o^*15neK#lAIBKL1@7}7p zrXHq!*CjT+dt8aeSSO!Q<3lA9AubFHObOj)ju(kDHBA`H$xMznEQEQ!8>)&;&SiFX zt@>2VI3$v59GDW=>n?$-e1>Blqxn)&?drPk=wNho^k|r^iS0gVY`@3y%Ta@w81Ino zdGdZEexiZ9yHGs&z`y{5f!$b|@Z6Zjk`N185eDnlJ@rQ_F@y6A>&m%CecnIn`oFab zomw`3i6>SWzE9(>+R=47m9mf#eo4Ekl2B?rwelx6HPz~=fvnpDntkuFB~;LLBc-PK zrg`KzF+JUyo|_^feLE(g!?2=>z~GFLk@4q~4a-}dJNq@#bJ+Tu=!XXq9|JtZN^Eqa zIt-Oe{kJ-7K1=wRZx1Is$Iq2$nbfTiaZyCfdPz#Jk%o^g;%9akX71V?9ujMK=$&tm zY+Nnc)Ul3@jG!7${`&B;0j=SV^jv(+|1l8#rm23FR0@7FmiqM>O@|K4&$-Q@33JDr zTiYISt9dSq*^+^Y9NA-~)xMa26y2plQa zG{ju5F#YM^27TtmNl3)lRA4?DCJ+2lr2p~xxTMs5GOrh{s3?*5#liH{vDRJ(2dknJBH{tv8f z$$9acTB&yY&5i45y68{>yG|0X8QxT$e06$TXdD;h93|0$@2Ls%P~3FLkGO%E*jd6k zhX7=1=mIp$dl(=uk7CK+@i@99W zRm~$j95j@fqR$(f1F^$N+QB5Xa3vp}nwfl|nEb+yA!6a-qi3(b| z-cOnD4?gIRV~TjY?Yg$azCWMut&GsTCaHfG+IY0cQml>_(5|7rG8XWxn{khyP%&(4D#&YEnUDpCgF|e^WM&7La2fsNL zxtcer`8pMtChYQ*h)BxXn&aW&LATlUM@-DqKegY6Is>rD1?}m6Th48l*8QzYUwI43 z9ej0F*?rej#I$6>5ZRinRvAZq{T((?!W!Qol);Lz#~3(0pBu^uHTod#XQK27D@CQ1 zjeJ5)OY8UVpSh)$R=iT_Eq^uJxj|GQvsP-C&VwOURE9EkXIGb2i#vZ|Vd1BAkz{_$ z*>RBnAXXLi^{tk~y zZ20lvTD<9ekvvnG*cGz)Q@8L_IqZzW_YEG6JN+?5&iZM8<>jfgxH|=LK0`;n;NQ$H{wp)^!OK6RXNnVI zw#T^bh^|qtzjb@LKYJJ+j$`SjWvgJ?LhT*)8mb>vYh5fFBy^DlR@2YWf9GVctYqdi zvko$5eLPF5#(Fs=QQtizjFgkdsPhSjZhiapikISCncnV7n>aY zKW$tuCS;kJnb+>GSMp_}Uc%3YIB{MGj32>C29a{xViR6BSFNf%n?9XvNK393PBnJI z#=~Qvrf$!Q%nUp#S}oLDs?N#EsLGj*k^823J|v8ib5XJn`Q3mF&R9l1*n|@OmX!H<&D-naF|c{N^Odw4y%8oC z|0Z-B9Yge*ob9#-Nzy&eK2Y#mbPp%`NPVGwOE@S%G0oBe?4Lgo_JbrKCEiong^IIm0NXNDccD+VFOd^Jp z84ZJp0%h92?)&UwxBqBCwUg1*Bm>8=z7|B4XVevF^|v`$`?rPNam)2&mJ~XoW`g|? za6TaOy1yjVYjmXH;ZgYs`FN+}YiSyb-Ddf@Gt|&g+W>hzkJK(Xe{J~KVYY2L?X{#d zYTWtV)9{LJL!Ho7OjP1kHVT%{Z?g2Ya1^~WGN?dUeAyXI192Mj^QT;$^|I?p2RiJa zdhF!-nh_MWIsNYuGsPNHg{q98n18aeVndX{A74y8cy*V+Gl$2y*XE*&f zo`v)LbvOv~*qE5kEU6$2e0(!NBjV!XqNAhRdn2A}wLwKeg)+T5SP*%HpVQIN&0hxo z;FoClfz~P1U!1~wIhF0-8tNOm_OW5QAVqg4pi0twBep0*6IN9<+&i8f;8x<(VQ9~@tN_x>xb~3!|?{A$R z&NCjBKr-_1@+JcogNllJu+o;{d3R;E)`=<;^>PFSU!)yyiDY3Hj<;{$vgtP`0cKWd zF~gGXwoQ%*O0UN|gQoK#ip-Ofg3oX1FIDfjZdtGz_tt~>dPH81$J-Yw^Z&+T+E(+O zz8)GJth#lXbe7A~myrqNH!h+FOV)I5UFl~Fn@rwMj}_T`3rlD$mnGus$&M~s*jimo z=eoN-HUpcOD(n*Je!0i(abx?}>(P_Lp!HL+da3!}X2FGp1*_%8cu){x;^Mk{!bo8N zEXepRh_OjIHc!^NE{<0+^3&Zzv$J1SRackpB=SqF(U81+MNi_G2kkty5U2MfK_$V* zwI{)_zmg=`8=7&tI#Z&EqzjzCRt@$2Vrr`OnOj&`$8NQl*gn+s^8RV~i}Pycv{WyR z7iffeY}K4e7T)hn$nV?vn#}WR62p-Aw~lW7!MgKJhY~LK=c1HzWVoI7)MUcR-rCu5 zM?8PSASjs3nBfsKJpAbyyY@R!x#ruv#6ft|GB5;oc1nuf9q{745NJ1v67B867as+!YFuxXl@*fT=ng!Oc8YVjjQA%*efzg$jx(?-jUPD?H;o@{!J zaiAof0<=Bfj8)Wbfujw^_K6+l>SP-g}W@9f^R8;CcU_8}dMi3Rxcz?Fkd1r2#NJeN6GEqB^&xY+m ziF(O*AfrNtV|~p}qQ)g8^oPRs2dE{DpZ3s4a}wSn*}Nl)OY9lof(ebBQ9nkQx2x`< zw_ZW&tQI5z!5|lP=j-U`;IsLg%JR9W!s`(Vy;(yCS>1PYx&Z`Dmd#3QiB@&sTR${F z`=mTPMC20Kvg8su_`Xj12jV_QRNbdU-%yU0_OP`R2%3t6Dnzm~?ct_}WQSOz!}6^8 zny6bxZ8F8->LpCcOup~`+G4BC54`1ExYBZcDzlfvhroo@K5v<2DiP9)xHmN9d*hj=R1C|Gj$k$`|Az$b=3MPYw24Sf7j3)?hmsJIgLBx%Kr)l_q`m z8@;$f&IkQdisB=1*f}#3Q|7nDTC1nhVM{y`yVR<`uX8U5+=a3BFlooJXbq>yLL5;W z7*IP1(mYcvd}1s}P(BU#GS@ct7$IpDMYff|LMKbkTQTm116s4zG4frh=3k|+w`SSd zIfaB_PyF%**=G!D)_-5VsHmyE1JH~h>wt68adAb10({!`cpqh!?iRQ|SAIUgn1LvX zrwI7$qjafoJvF9yZS@|+U4e2=;65{Rjl}-YJ9&YnpUO%a@V_r2l6IgknKu=dV$nW{*{^GwMY+6lhCP0SPm^+?zpE2v9PP zmYaZJU;F$0c&lM2ePb}56&y*-o4>Ap&)-UGyBPuEi{l(5wT<4SzDLdR0Ge*E~!n{T}f7V%$dnwJ@_;0hDw_6~m zQJJFIKi~815A1~Ul~47bopLI#y7*IVH;61t>FVkY@jUTP=KVeV(c)nQ|D{NOC#QlCzqVTKAvO5#V7{_M zr!G?b5guzXQ>3h<)b0&INfNNjb~=LohBF{#?Y(4jS{4G-?^a3F?(UiJn&M5ztxS*G7Icy+jVdVRgqbljTrbt(^`MNT*R9L~4p z_1$;r0eh1Mcy+z(Ld6gp0v_XRRQQ-l`Og|~0T4z9s0iF9y*SQ?e|ms49T*xi0kQ!B zgaAFp+q}GhNukx`%nrZhtFj?`gJ~;3QREd7Q{SsN^lU|p+lL1jcyLbM zIoHOOg=H0Zdp*Dy0VeGLc?V?c|0E3l%TK_Nas#?PI3#4P-3Nu3m^eByQ5Mup3|!n? zaFT#sf{L#O4pR2N|L9cnK2`1q=Agk~u#3H!Fo4XFFGW8Ba;@25PY*ch7NAd0(9usaPdCsc~O zC%-kglk!!XT+gDz>WWzTqsuG<)SR|PcSBW+u#QfK8a|ZO4`$zt-k{<&tZ05^)+3dg zVKfIzsCV3b3XGmrVBGY8{RXVbeoXWlVFUo+K+vUzhK7UXrbKUVB(Ru1P&jT@{qXzy z`&WTc0c65tu?A;+opmp;z|6-pA-rFP+yCRKv|W>gKETWxoeu|rHuyA>!tVy#N?fQi z#Rg_W^ZnH#Vjr&mevbkn&jq+9f{B66>I2u@U2dvlcpw|bdgd!Xa%;Hz-=VSalj=X@ zrjeZ3{&mfmI@zWg7Sv@L&lEJ~X!@8x`?R{gmQ!=HZ&+8YKHT%lH23yH$Ik;C7Lin7 zRcGMIv>4OefJu={c-hQ7|`W0_T$FcD}vjG^fX=T@#FO9?JDa z;c$4;>u(fZkN0n+rKJ(x8t{8$h}vjGmx~P1CMGj0*hOWU%TOol+A{tr>N4mh7VqFq zN{dBR??-PCCl2W4KLd`l-w;XL)m19`Cf6kF&7yb@P;rkF%ifEqEZzk z6Odz=*w{HAVi}M;z$Vi%FaQej5mYv)j#YRO0D??;{q#<8q|idUqr| znl|-XHCMam503eiI;D^r*(yTQgMxl{b%^9&U>- zRWAYCKo}(eEggWWMg(=s_1~e{Qk{^fC^O(I7IB_{t2rM2i7(S@QmOtT4+?D$Fw)4x zJOm89?)kx)Z6P2K*aHaj6)+#3FT-RAehf%Le-gI|0GrJqDkwDGY3{ zqJ1(*fcbOSOGS1unP zAFG9`0N^xmAv`35)?uJwI?XaXWz5YBETC)O|7u-S@!S6XK-3gxNF(6V_*;f9e(xF* zsng2R&1)ol?o$IzDO|f|@E9rguR3F;FiaD2a@~s8aQ&AR#Kg>;1@`ZSh-)L$QX2S;aJS`xm-UDcrQM{b4O5%^zTQ4pgc>1I_`S-dyWrxaH;m&bCAm$;1SG# z^+6UP1BIW;ei=(20j&iA`%Mf)byF0*BnDQi2?(hY-G&%mv(ack)d38e^oFkiX7>wh zjN|^S{1pDLY3oE>5p(WlUKBKN0Pe+YJD5!5pC|~dlQ$U`v;8e1&*|FUtXcl=Jh(B4 zUcC5}$f1Wg6G~xc5MlxMch^%jUsVB(eGfKW;QJLD!VSTG#zqZl4G<6~Kw_EjQ8a8N z=#T+rfrRiXI#ItF1%ED9C#0ep1ElXO0Idw@EwjtA6KRw4p)oML*>vlpQL&$Kc|CZ5 zfC8ueA85%SSVo@w&nl;Vb?cT(b?4*1@=-5E`F7+8WVyE#wnGh3w$g> z{Wu|F_xwMgkJ4`ECHWLsYfi!z#YIsK&RMfc;GtOa&2A3PM@t{T&ej7biQi&+6*v?% zmUEH76AKk`+KWy}8Dy_p>O?5hv#p_pdOO+`&udEHXlzyXy`&WrO9v&C$Me=PfkUro z7rES^Z4?-x^?>MqzdA4)&wSf_HpuD$?8WBChdcP~e)$Vw=WwuF)d0T`wlt`pWUsBr z!2Msbv4yki)Dk>@J_K$Ad$>F1mzKnBw-mUBsIuQpaj|AqyLbLnu_RVApR?cA2wrUI zBqBeSk}SmZUPveF42kwmHwpM>pl$Rd>CNI)xcz= z;4^OrS?;zT!iX^PKnj_HjSZ*Z59MsV@y*YGrT|&T4R#%fnCx9-T3T9=cGw6Q1#}SM z+u)FKc>_XVF;^xJEPVjJ+ub2Vh`vR4cQ>%~--E}w0mwWLq7*n{Mu0#02Lx1t-j+Ok z{YnJVsl)M#1_F8ovxoHaU-a%WHbs2#cNK&)YxLx9*yP^7r~b@?ol>pOXzIq5cAB4; z7ZYtRK9oAGh=Y(y9Qg@}IB2WdjKcKk35%lq&E8 z5SYn28v}(5u@P`ch%*5`YCd4&fIcVzFCCNzL@2->%umxlCqpVhKSHWq6MX-e1u&jkKw!SGszC);@kAVSo&Ga3)1ZJh zoHyMTDGimIdjl80O%PZC03GPX#WT=wDJnegoPm<8-!E%=FDGXL;C6F!vjQZ5Lb}L@ z7WYd5&>e{5J+lt+E*#n<_G&B4-!lh z*l_YGd^8~JfK`aFw-6!}pd+F)3FPy3?V|Mtpu~;`^FLhvx&?uaooH>Tbu-u`W_?A| zA>^iJX%)(J`*Ou=8hq{D-S0qN z^#R8KVN@MApW~5o=o$j#LU4mZ)%=*0l#gId|E3Fx0KH5Vu=54ZVU^oCpurhq(KJ%7 z0MFbuBHp~0o7#>5U7hi2GeuyNYqoj_Mo{o)gK$NVe0*_uH1L-yY*xfVLqj#Izu+Q} zE`U@YQB|LyqS^rm5K(er=Q}`U8-gE6x!Lll6@HiDxzJ8GJeU}9SV|VDh57r|!{Q_} zc!gBC-FCvvz;yGPEyC%8@v+~XBa3~ zh=$&eA3r>9ck^q^Cw#$vpH9kga)XW^;7~pDl_tqTPAotg!!M>30k=2l8!E>u-ZV z4a)aLQj!ZhvwU`h0kA8&!P?dIk-U2c$3QNaaR z;adRaAz@*(AfUlHo&)g*l7il>01lxqJj(EiN=wkKDs z`U@Q+V>L)8gct@97!n@-3&0XF3CRTLAORB+v2uXA>!4<219+S+)ky>>gHVJ3ObX5> zhv%DIIMMN5tRj*S_`NkYE9nS*4U`7O8|z_kPV%<4T%ZF)4U95;u^aD2>!yele#^BodN>WlVrsk`67(|rk5^lFy#CMXNFPK`lITc-f4QAqq0pTzOULx>9szD;BLvO!= z+w}r5$DRBM;hbE~8Ju^ZQ-Mg+e8!>MkEkr~-aP>T$Ov|I17Pd$&o@zEbi%T+9Z2Qa z`1l@xIuf8s4~m=#a9?V^EhZ?6--Bic!Q|AGpvMgt;N7o)wFa`B7d$oyG{p9jlauSV zxW@}0H^+kKivldCVB2LT-=VsvAJLdYU2TG(XxcFEdp87y6FY6J&zBf+sB2_!0}fny zUdSkV{X+KLVTrxXzeYPd$BS{@3Ki*}7fTM&-_HGqei}q{_V)A$Qkwk327DkqEDWIp zfH{Hb<>iHVVnkO9pl$t5`gij`HOx>bwE1Q|%;Ri;5rHkAlDK>TyN?HCe{E-{4+JFw zFnW4=fLjp+T#tg*0RV$%0I|*iQMLz;T;8YTPG3}P0rv|gG(R7pseEkizvLY+DeggOUm#t=w2j|bRJI2pGuvuYmT)LlRm zAvO|};!Z`AgkHWEJI;g;PXHAU#FjXTp$BxSy(oCH?WA7d7610Y)0-{Z?O}4zoEfMs zP;fPV1!}hf?TDS7U3bIJ{Gp!TT8m;tM2BVh&9L0X$0tx})FqHbbxZcxU{)m)=%W{c z_WmzL-3dVb0QRV$*MkUPDqnzW4|D*CP+3rqG^_r@1YyXBu*HGpTsdl$5EGNV%V6NT zhWd<6vmK#ifV3V1^d=-S@(bYOY&x~!2o2QUE&(i~PEf7^7r;Z%HvruiN6SAo^xXmg zBAf!ZjLUjS0FdKuU>N13tY}ephAfWB%2DH}=X!(-~*iwV`Uw2QB9Y8C@u6_7`iLih`Gi@8} z%v^UHIgIcK(6x#(Y%C_vV*@0d1S)-{R%I+0;mkV71tez+#_Mg8htp0KX7L>De!E@x zAJ}E#t`jtEB?un6@Z-TtF*56XAKtn-2MpZtH7Qq7*=9V`8=ep5ra|Sgztof9-tM7R zE5G`mDJ{S}1F#7F314<5-G5J`+I;)pU(<{Xy;X4+7ud;4<4|t~Vi4|S>zO;#FOT@- zwoaBzK5^}wxa3*SkkxsZ{75Y-nBdsl{4e%q`*`dRHgtSV{OZuZlmDjFpm;BEdi9~C zr6jWU(ahjQW1@ti_6t6=8{}Y_XReUo9$8O< zFLYl}p1LRy55^_DpEVty$LG+RjUtPn^Q=orM23GoK<6z>JX7%&=Pg@oJ>05A4c-qM z(xa*1UaHaco-n8D@?vk3=gjS4-QEbeT**uPL&+G2dFkJ{e*dw692fq@;B`)o0Ldyn zC;6`=)dVlKLZ|ikM6t_eWtP)Kyk_gIYl9uPoVX3*aK-moE{A{k_gmN3*LfUzySqW| z6Sg4{&m^* zX{8?VUuzvKC*3t|v8Bo7VVln_Bir^(mm}kwI*YKf5Bo+2J9SyP&X+Um^pBbEIxsvT z9sjxmHPZ>g6|91{AiptnsXSLISBB2=bzS;iCx628{PCN4_5H-vMhs8xH&hJ`rFOXl zClteaBh?tE7@plLImiQFuP(y@5obI#)9Q%awiA+jSMuLlON=E`gD;=!{w8<|yqsGn z@iGsO^uj>!H0Q&V?Dc!lj>0oN@@Oqmk&yW7{mb;@B1g21FNI9b%ucoHn~-(E#b=R2 zZ#uve8Fngs&;!qNP;6au4SV;|`HOj>AF@8tj6MAdSPUg^k`0f?J`9z8h;$(JeS8BVVMfP? ztjDsVAd?fPvKd!VVzKsH+EJ{ksF_l6py`|TC&@f-9`qte)IJ8gvPkpK%*MVN4}xlg z*`!}m<}KeGjTN+@oX^vqw!L|kF?!QuyVW-U^Bm2brDAJ>2#tzvK8u6b*gZ3_$qXyl zo`0VEdPUhJwkQo>W3)aF)ybn@YXR0{o2whI4e2=8AF0<5T?;h1OV@-g5%Le)=9jG*4( z)M=ED_KLivu%VI?0gwWCTSw0gS<3F))c6XsC{T%4(ra3aJuNZ^(TPX8H4mQx7EVr8re0@xYQ3t?j>b*MM({IN;E%6&cypqpTh08cx;2$(jkM=Vrg%;%nB$_ zFBm+?QT4z)aEeMRZA}l@4Js?YoMl+}G;-`f_o7W(DO4nr%@Os2X)~}lj?v6?hm`s{ zqyS(#YD$#d7!uK`tM6-eET%};&{KQwwncJ#Fp0#~syH$)=CY^JJvtvBLS=Zm-jfFm zk_ymLFF$ksH|`S`M?3{oDj!~dyyTw;#(>@{iQk9bt0JcJNMS}$P3b0@Mz!`4mc6*# z)<`TL(eGFFBm>jP;2D5}U$SUwiB5dyJ1Gc2BlAyd=4x}sj#pXYdXQUqraHf4t~a}L zvTTcRI7(c*5nc03-20u5%oh-LqVOYdJHKgCwYBF$Lu1r`hS;D5)30 zAuj}iX?f0vnF>G0Vgh{TXj?wqj2+1KkZ*MoqsZ16dTS+UF?L*HQt>8hn!J(cG|cFt z3`wZn0V|2Ax)f4ItaKwkePwI+*+67l35WgAd(zFQXCb3QRJu57w60{`%43ET`DU)oH+h^8+>BU@e zZnD=t>DHU66g*Qvpangv!07X?vtgc2owaU*eGl^vIIF{*R>((Ats?IjeXftNh2~{E za|*70>rry%=F*RqxqdHpQY+i%y6jkl+q}C)zn2&&Vp3Xt*cEb&mQ%{d1*#b6zm>)o zlRmsmHY}!mXC70F^J=$ZN-q0V>h@U_qaL~H|MuNjjTee@MIV0}^q*rpsf5dvM?P^O z+2SR``E_u@-p1YI0ym7Tkh27ga4JjxYhi63!W`3_>j~7%%FAmLFZRd_B>mEppdjyM zXAV2Tt~TCRow`dma7EMg40K14v`NB>rBYHHRcVOLxd~mFYoNJ+dy^o!yYsBPeIr3B z#KL{iK;-!Egob6fyIIH)Wh4)r6mApHlP}?YHOQ4{`_Wa>u%l9`(E6}@Ajj|4nYny9Ki=n7z`0c+fYkRxa z*Hd|7`?^=7spJzLRk6LYg4@PX;N?XdQBiNs!=5WT*bk0!+A{rZ3wYF4oVa(XJ6%*v zGTd)jxqYs)JFf9&~1 z{$McTymUpp#4Q%zz^}Ldhx{h%fzUpD^jJLhlX0+-$(oF$loVuMslKD}rQe25FGfuQ z%<~1#iF4SNT>QtQ?O(C7ZtLjvqT|^fGlw&Szp8>V2cA4^4DUmsN{yP&+fEi>pr3;< zz>JMy3}}sd7YnScCU{Ea-WImCty(bOw9R~CFEP|1tM5c|i7APSB5U=>^V|Z^rCJVj z{z2E;2SVF)>X2U42*kJ&!>3sqxjdO#^p$vu!Fw@0G}nL83oEe-5ll=vU-EL+Ft>~^ ziS`PTj3?5;p#O2t`|dtYLLLJ(F@2BJfnN^-+@KSI7~mdSzCptC(Ylw&4R=$Agn2m} z9{(P=a%ecj>@QsDjTo;hcWW_{`ZqULJ4VC_h4i$&jSMSq>*ZtM6^{i2U6Nzh=+won zTKAiAiZ~6NPtZ|_CvyswCAd@NbIFKu4$&JqZ%k`ESsw?M3jbr)A+eLJIeXd&W-+O;$lQB&C`+0f>6`Th*oH2g?BN$hrwKUwy z4V1AP??cB*YMFCstwR!Av6*H%x1VBwDUJtYEQaatV{3#TvqlVhe9q>{%oT~rDLJ|y>>01%@BDOV;omKzk(N6N5L8P*;hJpaqV$| zl->y4s6F*U@9o?ed?s~%JH5ArxpxsV7+9f_e@fQcZQPuO3e%raRZKq(=T5fjLk(a# z|4yW=tQu0R5gj}0$h9{oedVv-|z z!n9(-kPHUj)Ys68@ijHQP_j0wX)IChrS619uVzL1?p%tz%Q9b6g!DiS!)XHH$kjN#d=^&AJ6QJD$7+xv}1rrMraK#fd`vaBM(B`Yj$nf8HYG|eq%;$Mx~d)HDXirLAl zyD-{}s+}4pn*QP}VcT49=Z<)fe#Q(CkNtJmgj)n8#L`{ok=Nya(AltoMIqp!si#+n z|BrAwgoo4e``Qu<0SQTNW0?lAl4whbJtjfiIC(0wK{fR`YX4@wBc|P^YWU&exBX5w zuXL5J)!A(WwGntG+JJbE7VkS^i^KJqWF1<5j3o4$T)ii77$mR665w$1Ob)kwi3q)uoo=cQ$0DOJeb^p|sM*Zd$w~F-CPOI| zcW5<`Ysy&I>B{!tD$lQ7G1$BFF(G!`kU6ia7l>CweIqSTr&I6MpwFsO(*ggyT2f~F zIHI@ImInEAmctxdEEV}*p|Lt!j+gteRx=-{(MxJnN6fU&E@azg)Xr2lr|l99`yKI ziyOQ=MKVVXvTk}fB?PH#rx?C_aq{!eSO|Q~Ve7_XN=sH;opYqMmK?Us_ipWv$^%Mx zbi6!cp>BV6zE?@br2ejhbh^kJh<7KU;X>n0bhaJ1IZ4FI zqUuwo?3l*~mG`t+iXukpoys}GcM7Q|;mF!+`*82AG^*0<)8{y7pVD8fyz-f3j4VH1 znS-lfU@^Vi<%mlYEtZFXLj4iA3%Yn0mtUb02Ai_Qw(w`JVJkB`8UgiQRA)n3Mp6Rq zYON(kQcN6pxnKlmd|WA!g)v;+1=V1w4ZI20Xbi0>)v0TAf|Q-*_^`hX7&T~sp}Mk? zkApcD2*PhiLcB|58F;dFzsQ`)d6x5;4tly{gpPlPEo#(FFjmjdK6edXeLJx-!zf(y z8M)b1qB%oJaDmo@_Hv>to)iawWhcTV8(%AuXRYpsc#3J9$N1u(qujEHry!-Z*`J54 zg%$3yT0sFtadgFZcc!Bh^1u)kR-uHx@Z*p{}+QY>S zYD-ykeHl5t!)Y))H319P-r}2zVJ7nD5HgGV4Z7!y-gy#*$ zg}(}^r)DU9wP)JJv0lGS(pVmnSJu=-%=04V1S5ryDiXqQ!C-}R)kntHLWPo`D%%d@ zn=4Z_MA3Crq<#$+?t5>y*-u!cUbZ@~b?9&DcUgIKs*G@3;Ed~Cq6pZn z`yW(}4sKD8DE_N32qqjs)u&OMiTE{go!?c(tU)oc4|s*u%?KS2w&R`H z@00IS|GHBn8))bjeeIcajk?A+ac;jzDqBLNm zx-sYWsx4rq-rwOPjvX1-a@GCdT9*f{pnk*}W_{e}hmf4^)c9lrXNfYkhE1FuemOlO z#4gacXB9B@e8CmWO#!bMByujce#ldNBkn#~1-!fBF~(IOmVT#KgV83AhPPTRsfVQK zhW2aaDSCHg;9batyu#?@-42_=c&)rYZfHKX`FgB&u`;N|93xS$QHFrp?zrn zWwW7bJJ1qbV9ZE3URBbJhnz&2L zrG{G0Vpb-C;%gfcrG5ZNc-tR4s?UAd0!hu2NlJ1<;jX|1wf(9h@P>vgJrC}I_}P(v z`wGxbo3{H|p`VGwojZlB!4ZmF%>@NaVBX^wi+FnES%3#rLNQJ6W@##kYHSJ`x()Xb z8&xd0Nd8wOo^KpCH`IXdXzrIzRS|QJjbi`vVYW3ja3je88JSVSbbIa`We;A}W!H?G zyCxAIU@(SXaDG?AYj3*qzfTZYE1o%8-W4?dzb~f!7>cdtIp2ptoS>9q??{wJqqeOL z+do5VKzlFt58P3x%?0LkgXa#FNNZEUM?d3lOQ%xWsp~Z4I&ok<9+TU%FfiQ!msYoj zf+^yav;77d7D11+)OQl5TXVP-F;a?(+lv?ffx*#Tu{%bLG+)nwa;G9ON+A(UalZ~j z6QyTvz_H-g?cv>3TSwDiu#Dt%gERXDW2ARZtLCBlwhK(+2Zt*S+bkbT z12Z{N&-}Q(Tq=l@IwSk`+oHvRM&;}-9E_)a;dp@-od3<0Xh%Qn=b z7~UDS@F$0n-y)?#QbNJXz))2GNy4pS<-8arK1DQm47dV@K6#7kOdzXM9BMJuV=>=?h8K7pARpp|G=zUtE1 zLvO?{$T7~sn!kQl`I`Sd%{y^OnTfg>r1ah0W_A`2fkWtAS7#@iarXcc67n(P_W~d@ zqhAs^fT?m;HOL)@c2#ukozFQ&zAm2{nz6#EJ76zo@IzDYOz+U^5-C~1Of1b?b$#1O z6zQcS7qaRNea!IgYi0BJF)W6v?XOSmy-;!%=7%5asG+Quq>pJM({tbB@fzDxC+O`$t2BiLaM2lE>N6uy#r!QQrj17f1RmF zcnZXTg$9kzI}_Y`a`e6M-wkg;4y9pQ9YcIa%j^Jrr-io`d}qs9qLMI#giA+_!zv?A zu-6y7;K;+n^TOr*Dm!Wk7^qkQLnAhmo)VNKn1g6cGLYA(@QeZvfwK*Ww1DSr4GWeH zv!Ruh)m?aaxP(orP7t2U+Bo?leK*z((YE5WQ4(z~c+Zpi_3H#M9DH_mR$@9TWb$1K zVhM7o4logNM#c0RmdwB8Iybs ztKhx4pAt6c)5?{Z)&em|mH14bB|`8Eh;8j&zZeKpR%$xm>-yoS_QYI60(=(7eB*6l z#6<>v{X+4O^D|R0v&({2f<{JIMVgqiA(W#45zY}nmb6yi3yyAi(KOzwi}Nmn1U$i8 z5(&4WE2DO$gYWI{NeG5%sjDg@LTw>-FEM-!>d_47f+n)MNNwLMs=sU?fAVj4z){T^ bF1{BX&GJg?D9=hQ9v?3e7hw From ea1780ce970a69c786a43d2de33d0472985ce29f Mon Sep 17 00:00:00 2001 From: phil235 Date: Tue, 7 Jul 2015 19:40:32 +0200 Subject: [PATCH 07/75] - Mech equipment was using its unique processing method, with specific timing for each equipment, but now it uses obj processing, I changed the values so the equipment effect stays the same. Remove global_iterator datum. - fiddled with equip_ready procs of mech tools. - removed mecha/proc/do_after and /enter_after() procs. - Renamed mech sleeper occupant var to "patient" to avoid confusion with the occupant of the mech. - all non instant tool (drill) now show a progbar when drilling etc.. - action cooldown now use do_after_cooldown() (that itself uses do_after) and start_cooldown (for instantaneous actions). - Removed mecha_equipment's destroy proc, it's now all in Destroy(). No confusion. - modified mecha_equipment/proc/can_attach() to not check istype(mecha) b/c it can't not be. (so the child only have one istype check. - Removed diamonddrill/can_attach() , all done at drill level. - armor booster now only for combat mech, instead of all except honkmech. - Removed dynhitby, dynbulletdamage, dynattackby, dynusepower(), dyngetcharge(), dynabsorbdamage() - I split the tools.dm file into smaller ones: work tools, mining tools, other tools. - I split mecha.dm into mecha.dm, mecha_topic.dm and mecha_defense.dm - refactored mech weapon ballistic/launcher, new proj_init proc, more OOP. - Moving consumes energy! Lights consumes energy. Fixes #9425. - Fixed #7354 xeno not bursting if host is inside a mech. - Added action buttons to mech. Moved toggle lights, internal tank, eject, view stats from verbs to action buttons, these can now only be done via these buttons (removed them from the big stats window). - Removed port connect verbs b/C it's automated now. - regular hud is no longer hidden when inside a mech (doesn't matter b/c you can't interact with most stuff in it while in a mecha). Fixes issue 10387 - can't walk when shooting projectiles. Makes walking on your projectile a bit harder. Helps against issue 10315 (but doesn't fix it). - also made into action buttons: the special abilities of certain combat mechs. - Added thrown alerts for mech charge and integrity. - Fixes teleporting occupant out not properly removing it from the mech. Fixes issue 10330 - fixes ballistic mech weapons spinning when launched. proc/throw_at() now has a spin argument instead of using var/allow_spin that was added to all atoms just for that. - added a update_action_buttons() to ai/life() to handle ai mech. --- code/_onclick/hud/alert.dm | 7 + code/_onclick/hud/hud.dm | 2 - code/datums/helper_datums/global_iterator.dm | 160 -- code/game/atoms.dm | 5 - code/game/atoms_movable.dm | 4 +- .../gamemodes/malfunction/Malf_Modules.dm | 2 +- code/game/mecha/combat/durand.dm | 64 +- code/game/mecha/combat/gygax.dm | 10 +- code/game/mecha/combat/marauder.dm | 136 +- code/game/mecha/combat/phazon.dm | 96 +- code/game/mecha/combat/reticence.dm | 2 +- code/game/mecha/equipment/mecha_equipment.dm | 53 +- .../mecha/equipment/tools/medical_tools.dm | 265 ++-- .../mecha/equipment/tools/mining_tools.dm | 127 ++ .../game/mecha/equipment/tools/other_tools.dm | 518 ++++++ code/game/mecha/equipment/tools/tools.dm | 1245 --------------- code/game/mecha/equipment/tools/work_tools.dm | 424 +++++ code/game/mecha/equipment/weapons/weapons.dm | 134 +- code/game/mecha/mecha.dm | 1413 ++++------------- code/game/mecha/mecha_defense.dm | 345 ++++ code/game/mecha/mecha_parts.dm | 27 - code/game/mecha/mecha_topic.dm | 321 ++++ code/game/mecha/working/ripley.dm | 63 +- code/game/objects/items.dm | 2 +- code/game/objects/items/devices/PDA/PDA.dm | 2 +- code/modules/admin/verbs/debug.dm | 2 +- code/modules/mining/mine_turfs.dm | 2 +- .../carbon/alien/special/alien_embryo.dm | 5 +- code/modules/mob/living/silicon/ai/life.dm | 4 +- code/modules/power/singularity/singularity.dm | 2 +- .../modules/research/designs/mecha_designs.dm | 10 +- .../designs/mechfabricator_designs.dm | 18 +- data/mode.txt | 2 +- html/changelogs/phil235-MechRefactoring.yml | 4 + icons/mob/actions.dmi | Bin 21822 -> 29912 bytes icons/mob/screen_alert.dmi | Bin 23130 -> 23899 bytes tgstation.dme | 7 +- 37 files changed, 2465 insertions(+), 3018 deletions(-) delete mode 100644 code/datums/helper_datums/global_iterator.dm create mode 100644 code/game/mecha/equipment/tools/mining_tools.dm create mode 100644 code/game/mecha/equipment/tools/other_tools.dm delete mode 100644 code/game/mecha/equipment/tools/tools.dm create mode 100644 code/game/mecha/equipment/tools/work_tools.dm create mode 100644 code/game/mecha/mecha_defense.dm create mode 100644 code/game/mecha/mecha_topic.dm create mode 100644 html/changelogs/phil235-MechRefactoring.yml diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index e9b60141730..c8f7df027e5 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -228,6 +228,13 @@ office by your AI master or any qualified human may resolve this matter. Robotic so as to remain in compliance with the most up-to-date laws." timeout = 300 +//MECHS + +/obj/screen/alert/low_mech_integrity + name = "Mech Damaged" + desc = "Mech integrity is low." + + //OBJECT-BASED /obj/screen/alert/buckled diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index cb0ddfbf5ee..3d24b6c1c5b 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -198,8 +198,6 @@ var/datum/global_hud/global_hud = new() else if(isdrone(mymob)) drone_hud(ui_style) - if(istype(mymob.loc,/obj/mecha) && ishuman(mymob)) - show_hud(HUD_STYLE_REDUCED) //Version denotes which style should be displayed. blank or 0 means "next version" /datum/hud/proc/show_hud(var/version = 0) diff --git a/code/datums/helper_datums/global_iterator.dm b/code/datums/helper_datums/global_iterator.dm deleted file mode 100644 index 828f6cfe559..00000000000 --- a/code/datums/helper_datums/global_iterator.dm +++ /dev/null @@ -1,160 +0,0 @@ -/* -README: - -The global_iterator datum is supposed to provide a simple and robust way to -create some constantly "looping" processes with ability to stop and restart them at will. -Generally, the only thing you want to play with (meaning, redefine) is the process() proc. -It must contain all the things you want done. - -Control functions: - new - used to create datum. First argument (optional) - var list(to use in process() proc) as list, - second (optional) - autostart control. - If autostart == TRUE, the loop will be started immediately after datum creation. - - start(list/arguments) - starts the loop. Takes arguments(optional) as a list, which is then used - by process() proc. Returns null if datum already active, 1 if loop started successfully and 0 if there's - an error in supplied arguments (not list or empty list). - - stop() - stops the loop. Returns null if datum is already inactive and 1 on success. - - set_delay(new_delay) - sets the delay between iterations. Pretty selfexplanatory. - Returns 0 on error(new_delay is not numerical), 1 otherwise. - - set_process_args(list/arguments) - passes the supplied arguments to the process() proc. - - active() - Returns 1 if datum is active, 0 otherwise. - - toggle() - toggles datum state. Returns new datum state (see active()). - -Misc functions: - - get_last_exec_time() - Returns the time of last iteration. - - get_last_exec_time_as_text() - Returns the time of last iteration as text - - -Control vars: - - delay - delay between iterations - - check_for_null - if equals TRUE, on each iteration the supplied arguments will be checked for nulls. - If some varible equals null (and null only), the loop is stopped. - Usefull, if some var unexpectedly becomes null - due to object deletion, for example. - Of course, you can also check the variables inside process() proc to prevent runtime errors. - -Data storage vars: - - result - stores the value returned by process() proc -*/ - -/datum/global_iterator - var/control_switch = 0 - var/delay = 10 - var/list/arg_list = new - var/last_exec = null - var/check_for_null = 1 - var/forbid_garbage = 0 - var/result - var/state = 0 - -/datum/global_iterator/New(list/arguments=null,autostart=1) - delay = delay>0?(delay):1 - if(forbid_garbage) //prevents garbage collection with tag != null - tag = "\ref[src]" - set_process_args(arguments) - if(autostart) - start() - return - -/datum/global_iterator/Destroy() - tag = null - arg_list.Cut() - stop() - //Do not call ..() - -/datum/global_iterator/proc/main() - state = 1 - while(src && control_switch) - last_exec = world.timeofday - if(check_for_null && has_null_args()) - stop() - return 0 - result = process(arglist(arg_list)) - for(var/sleep_time=delay;sleep_time>0;sleep_time--) //uhh, this is ugly. But I see no other way to terminate sleeping proc. Such disgrace. - if(!control_switch) - return 0 - sleep(1) - return 0 - -/datum/global_iterator/proc/start(list/arguments=null) - if(active()) - return - if(arguments) - if(!set_process_args(arguments)) - return 0 - if(!state_check()) //the main loop is sleeping, wait for it to terminate. - return - control_switch = 1 - spawn() - state = main() - return 1 - -/datum/global_iterator/proc/stop() - if(!active()) - return - control_switch = 0 - spawn(-1) //report termination error but don't wait for state_check(). - state_check() - return 1 - -/datum/global_iterator/proc/state_check() - var/lag = 0 - while(state) - sleep(1) - if(++lag>10) - CRASH("The global_iterator loop \ref[src] failed to terminate in designated timeframe. This may be caused by server lagging.") - return 1 - -/datum/global_iterator/process() - return - -/datum/global_iterator/proc/active() - return control_switch - -/datum/global_iterator/proc/has_null_args() - if(null in arg_list) - return 1 - return 0 - - -/datum/global_iterator/proc/set_delay(new_delay) - if(isnum(new_delay)) - delay = max(1, round(new_delay)) - return 1 - else - return 0 - -/datum/global_iterator/proc/get_last_exec_time() - return (last_exec||0) - -/datum/global_iterator/proc/get_last_exec_time_as_text() - return (time2text(last_exec)||"Wasn't executed yet") - -/datum/global_iterator/proc/set_process_args(list/arguments) - if(arguments && istype(arguments, /list) && arguments.len) - arg_list = arguments - return 1 - else -// world << "\red Invalid arguments supplied for [src.type], ref = \ref[src]" - return 0 - -/datum/global_iterator/proc/toggle_null_checks() - check_for_null = !check_for_null - return check_for_null - -/datum/global_iterator/proc/toggle() - if(!stop()) - start() - return active() - - diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 52ac867c334..8b4019f2800 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -17,11 +17,6 @@ //HUD images that this atom can provide. var/list/hud_possible - //var/chem_is_open_container = 0 - // replaced by OPENCONTAINER flags and atom/proc/is_open_container() - ///Chemistry. - var/allow_spin = 1 - //Value used to increment ex_act() if reactionary_explosions is on var/explosion_block = 0 diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index f0083db4d8b..655741064cb 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -168,12 +168,12 @@ src.throw_impact(A) src.throwing = 0 -/atom/movable/proc/throw_at(atom/target, range, speed, mob/thrower) +/atom/movable/proc/throw_at(atom/target, range, speed, mob/thrower, var/spin = 1) if(!target || !src || (flags & NODROP)) return 0 //use a modified version of Bresenham's algorithm to get from the atom's current position to that of the target src.throwing = 1 - if(target.allow_spin) // turns out 1000+ spinning objects being thrown at the singularity creates lag - Iamgoofball + if(spin) // turns out 1000+ spinning objects being thrown at the singularity creates lag - Iamgoofball SpinAnimation(5, 1) var/dist_x = abs(target.x - src.x) var/dist_y = abs(target.y - src.y) diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index e89be96093c..7c17d354ae6 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -140,7 +140,7 @@ rcdmod.uses -- for(var/obj/item/weapon/rcd/rcd in world) rcd.disabled = 1 - for(var/obj/item/mecha_parts/mecha_equipment/tool/rcd/rcd in world) + for(var/obj/item/mecha_parts/mecha_equipment/rcd/rcd in world) rcd.disabled = 1 src << "Out of uses." diff --git a/code/game/mecha/combat/durand.dm b/code/game/mecha/combat/durand.dm index 3a49c11433a..fcbd128a5c3 100644 --- a/code/game/mecha/combat/durand.dm +++ b/code/game/mecha/combat/durand.dm @@ -13,15 +13,7 @@ var/defence = 0 var/defence_deflect = 35 wreckage = /obj/structure/mecha_wreckage/durand - -/* -/obj/mecha/combat/durand/New() - ..() - weapons += new /datum/mecha_weapon/ballistic/lmg(src) - weapons += new /datum/mecha_weapon/ballistic/scattershot(src) - selected_weapon = weapons[1] - return -*/ + var/datum/action/mecha/mech_defence_mode/defense_action = new /obj/mecha/combat/durand/relaymove(mob/user,direction) if(defence) @@ -32,43 +24,33 @@ . = ..() return +/obj/mecha/combat/durand/GrantActions(var/mob/living/user, var/human_occupant = 0) + ..() + defense_action.chassis = src + defense_action.Grant(user) -/obj/mecha/combat/durand/verb/defence_mode() - set category = "Exosuit Interface" - set name = "Toggle defence mode" - set src = usr.loc - set popup_menu = 0 - if(!can_use(usr)) - return - defence = !defence - if(defence) - deflect_chance = defence_deflect - src.occupant_message("You enable [src] defence mode.") - else - deflect_chance = initial(deflect_chance) - src.occupant_message("You disable [src] defence mode.") - src.log_message("Toggled defence mode.") - return - +/obj/mecha/combat/durand/RemoveActions(var/mob/living/user, var/human_occupant = 0) + ..() + defense_action.Remove(user) /obj/mecha/combat/durand/get_stats_part() var/output = ..() output += "Defence mode: [defence?"on":"off"]" return output -/obj/mecha/combat/durand/get_commands() - var/output = {" - "} - output += ..() - return output +/datum/action/mecha/mech_defence_mode + name = "Toggle Defense Mode" + button_icon_state = "mech_toggle_defense_mode" -/obj/mecha/combat/durand/Topic(href, href_list) - ..() - if (href_list["toggle_defence_mode"]) - src.defence_mode() - return \ No newline at end of file +/datum/action/mecha/mech_defence_mode/Activate() + if(!owner || !chassis || chassis.occupant != owner) + return + var/obj/mecha/combat/durand/D = chassis + D.defence = !D.defence + if(D.defence) + D.deflect_chance = D.defence_deflect + D.occupant_message("You enable [D] defence mode.") + else + D.deflect_chance = initial(D.deflect_chance) + D.occupant_message("You disable [D] defence mode.") + D.log_message("Toggled defence mode.") \ No newline at end of file diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm index 722b576f134..1a9ec2627cd 100644 --- a/code/game/mecha/combat/gygax.dm +++ b/code/game/mecha/combat/gygax.dm @@ -33,7 +33,7 @@ ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang ME.attach(src) ME = new /obj/item/mecha_parts/mecha_equipment/teleporter ME.attach(src) @@ -71,16 +71,16 @@ src.log_message("Toggled leg actuators overload.") return -/obj/mecha/combat/gygax/dyndomove(direction) - if(!..()) return +/obj/mecha/combat/gygax/domove(direction) + if(!..()) + return if(overload) health-- if(health < initial(health) - initial(health)/3) overload = 0 step_in = initial(step_in) step_energy_drain = initial(step_energy_drain) - src.occupant_message("Leg actuators damage threshold exceded. Disabling overload.") - return + occupant_message("Leg actuators damage threshold exceded. Disabling overload.") /obj/mecha/combat/gygax/get_stats_part() diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index 89580944e01..2d39f58e103 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -20,6 +20,9 @@ internal_damage_threshold = 25 force = 45 max_equip = 4 + var/datum/action/mecha/mech_smoke/smoke_action = new + var/datum/action/mecha/mech_toggle_thrusters/thrusters_action = new + var/datum/action/mecha/mech_zoom/zoom_action = new /obj/mecha/combat/marauder/Destroy() qdel(smoke_system) @@ -51,7 +54,7 @@ ME.attach(src) ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot(src) ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack(src) + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack(src) ME.attach(src) ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) ME.attach(src) @@ -65,7 +68,7 @@ ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse(src) ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack(src) + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack(src) ME.attach(src) ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) ME.attach(src) @@ -84,7 +87,7 @@ qdel(ME) ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot(src) ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack(src) + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack(src) ME.attach(src) ME = new /obj/item/mecha_parts/mecha_equipment/teleporter(src) ME.attach(src) @@ -110,54 +113,23 @@ return 1 return 0 -/obj/mecha/combat/marauder/verb/toggle_thrusters() - set category = "Exosuit Interface" - set name = "Toggle thrusters" - set src = usr.loc - set popup_menu = 0 - if(usr!=src.occupant) - return - if(src.occupant) - if(get_charge() > 0) - thrusters = !thrusters - src.log_message("Toggled thrusters.") - src.occupant_message("Thrusters [thrusters?"en":"dis"]abled.") - return +/obj/mecha/combat/marauder/GrantActions(var/mob/living/user, var/human_occupant = 0) + ..() + smoke_action.chassis = src + smoke_action.Grant(user) -/obj/mecha/combat/marauder/verb/smoke() - set category = "Exosuit Interface" - set name = "Smoke" - set src = usr.loc - set popup_menu = 0 - if(usr!=src.occupant) - return - if(smoke_ready && smoke>0) - src.smoke_system.start() - smoke-- - smoke_ready = 0 - spawn(smoke_cooldown) - smoke_ready = 1 - return + thrusters_action.chassis = src + thrusters_action.Grant(user) -/obj/mecha/combat/marauder/verb/zoom() - set category = "Exosuit Interface" - set name = "Zoom" - set src = usr.loc - set popup_menu = 0 - if(usr!=src.occupant) - return - if(src.occupant.client) - src.zoom = !src.zoom - src.log_message("Toggled zoom mode.") - src.occupant_message("Zoom mode [zoom?"en":"dis"]abled.") - if(zoom) - src.occupant.client.view = 12 - src.occupant << sound('sound/mecha/imag_enh.ogg',volume=50) - else - src.occupant.client.view = world.view//world.view - default mob view size - return + zoom_action.chassis = src + zoom_action.Grant(user) +/obj/mecha/combat/marauder/RemoveActions(var/mob/living/user, var/human_occupant = 0) + ..() + smoke_action.Remove(user) + thrusters_action.Remove(user) + zoom_action.Remove(user) /obj/mecha/combat/marauder/go_out() if(src.occupant && src.occupant.client) @@ -176,25 +148,53 @@ return output -/obj/mecha/combat/marauder/get_commands() - var/output = {"
-
Special
- -
- "} - output += ..() - return output +/datum/action/mecha/mech_smoke + name = "Smoke" + button_icon_state = "smoke" -/obj/mecha/combat/marauder/Topic(href, href_list) - ..() - if (href_list["toggle_thrusters"]) - src.toggle_thrusters() - if (href_list["smoke"]) - src.smoke() - if (href_list["toggle_zoom"]) - src.zoom() - return \ No newline at end of file +/datum/action/mecha/mech_smoke/Activate() + if(!owner || !chassis || chassis.occupant != owner) + return + var/obj/mecha/combat/marauder/M = chassis + if(M.smoke_ready && M.smoke>0) + M.smoke_system.start() + M.smoke-- + M.smoke_ready = 0 + spawn(M.smoke_cooldown) + M.smoke_ready = 1 + + +/datum/action/mecha/mech_toggle_thrusters + name = "Toggle Thrusters" + button_icon_state = "mech_toggle_thrusters" + +/datum/action/mecha/mech_toggle_thrusters/Activate() + if(!owner || !chassis || chassis.occupant != owner) + return + var/obj/mecha/combat/marauder/M = chassis + if(M.get_charge() > 0) + M.thrusters = !M.thrusters + if(M.thrusters) + button_icon_state = "mech_toggle_thrusters_on" + else + button_icon_state = "mech_toggle_thrusters" + M.log_message("Toggled thrusters.") + M.occupant_message("Thrusters [M.thrusters?"en":"dis"]abled.") + +/datum/action/mecha/mech_zoom + name = "Zoom" + button_icon_state = "mech_zoom" + +/datum/action/mecha/mech_zoom/Activate() + if(!owner || !chassis || chassis.occupant != owner) + return + var/obj/mecha/combat/marauder/M = chassis + if(owner.client) + M.zoom = !M.zoom + M.log_message("Toggled zoom mode.") + M.occupant_message("Zoom mode [M.zoom?"en":"dis"]abled.") + if(M.zoom) + owner.client.view = 12 + owner << sound('sound/mecha/imag_enh.ogg',volume=50) + else + owner.client.view = world.view//world.view - default mob view size diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm index 4260976a41a..758dd4ccd62 100644 --- a/code/game/mecha/combat/phazon.dm +++ b/code/game/mecha/combat/phazon.dm @@ -17,6 +17,8 @@ var/phasing = 0 var/phasing_energy_drain = 200 max_equip = 3 + var/datum/action/mecha/mech_switch_damtype/switch_damtype_action = new + var/datum/action/mecha/mech_toggle_phasing/phasing_action = new /obj/mecha/combat/phazon/Bump(var/atom/obstacle) if(phasing && get_charge()>=phasing_energy_drain) @@ -24,8 +26,8 @@ if(can_move) can_move = 0 flick("phazon-phase", src) - src.loc = get_step(src,src.dir) - src.use_power(phasing_energy_drain) + loc = get_step(src, dir) + use_power(phasing_energy_drain) sleep(step_in*3) can_move = 1 else @@ -34,50 +36,56 @@ /obj/mecha/combat/phazon/click_action(atom/target,mob/user) if(phasing) - src.occupant_message("Unable to interact with objects while phasing") + occupant_message("Unable to interact with objects while phasing") return else return ..() -/obj/mecha/combat/phazon/verb/switch_damtype() - set category = "Exosuit Interface" - set name = "Reconfigure arm microtool arrays" - set src = usr.loc - set popup_menu = 0 - if(usr!=src.occupant) - return - var/new_damtype = alert(src.occupant,"Arm tool selection",null,"Fists","Torch","Toxic injector") - switch(new_damtype) - if("Fists") - damtype = "brute" - src.occupant_message("Your exosuit's hands form into fists.") - if("Torch") - damtype = "fire" - src.occupant_message("A torch tip extends from your exosuit's hand, glowing red.") - if("Toxic injector") - damtype = "tox" - src.occupant_message("A bone-chillingly thick plasteel needle protracts from the exosuit's palm.") - playsound(src, 'sound/mecha/mechmove01.ogg', 50, 1) - return - -/obj/mecha/combat/phazon/get_commands() - var/output = {" - "} - output += ..() - return output - -/obj/mecha/combat/phazon/Topic(href, href_list) +/obj/mecha/combat/phazon/GrantActions(var/mob/living/user, var/human_occupant = 0) ..() - if (href_list["switch_damtype"]) - src.switch_damtype() - if (href_list["phasing"]) - phasing = !phasing - send_byjax(src.occupant,"exosuit.browser","phasing_command","[phasing?"Dis":"En"]able phasing") - src.occupant_message("En":"#f00\">Dis"]abled phasing.") - return \ No newline at end of file + switch_damtype_action.chassis = src + switch_damtype_action.Grant(user) + + phasing_action.chassis = src + phasing_action.Grant(user) + + +/obj/mecha/combat/phazon/RemoveActions(var/mob/living/user, var/human_occupant = 0) + ..() + switch_damtype_action.Remove(user) + phasing_action.Remove(user) + + +/datum/action/mecha/mech_switch_damtype + name = "Reconfigure arm microtool arrays" + button_icon_state = "mech_switch_damtype" + +/datum/action/mecha/mech_switch_damtype/Activate() + if(!owner || !chassis || chassis.occupant != owner) + return + var/obj/mecha/combat/phazon/P = chassis + var/new_damtype + switch(P.damtype) + if("tox") + new_damtype = "brute" + P.occupant_message("Your exosuit's hands form into fists.") + if("brute") + new_damtype = "fire" + P.occupant_message("A torch tip extends from your exosuit's hand, glowing red.") + if("fire") + new_damtype = "tox" + P.occupant_message("A bone-chillingly thick plasteel needle protracts from the exosuit's palm.") + P.damtype = new_damtype. + playsound(src, 'sound/mecha/mechmove01.ogg', 50, 1) + + +/datum/action/mecha/mech_toggle_phasing + name = "Enable Phasing" + button_icon_state = "mech_toggle_phasing" + +/datum/action/mecha/mech_toggle_phasing/Activate() + if(!owner || !chassis || chassis.occupant != owner) + return + var/obj/mecha/combat/phazon/P = chassis + P.phasing = !P.phasing + P.occupant_message("En":"#f00\">Dis"]abled phasing.") \ No newline at end of file diff --git a/code/game/mecha/combat/reticence.dm b/code/game/mecha/combat/reticence.dm index 6b2fa70ee3a..612add46853 100644 --- a/code/game/mecha/combat/reticence.dm +++ b/code/game/mecha/combat/reticence.dm @@ -22,6 +22,6 @@ ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/tool/rcd //HAHA IT MAKES WALLS GET IT + ME = new /obj/item/mecha_parts/mecha_equipment/rcd //HAHA IT MAKES WALLS GET IT ME.attach(src) return \ No newline at end of file diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index af4b08e73c2..d89765b5ddc 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -8,23 +8,14 @@ icon_state = "mecha_equip" force = 5 origin_tech = "materials=2" - var/equip_cooldown = 0 - var/equip_ready = 1 + var/equip_cooldown = 0 // cooldown after use + var/equip_ready = 1 //whether the equipment is ready for use. (or deactivated/activated for static stuff) var/energy_drain = 0 var/obj/mecha/chassis = null var/range = MELEE //bitflags reliability = 1000 var/salvageable = 1 - -/obj/item/mecha_parts/mecha_equipment/proc/do_after_cooldown(target=1) - sleep(equip_cooldown) - set_ready_state(1) - if(target && chassis && chassis.occupant) - return 1 - return 0 - - /obj/item/mecha_parts/mecha_equipment/New() ..() return @@ -42,10 +33,9 @@ return 1 return -/obj/item/mecha_parts/mecha_equipment/proc/destroy()//missiles detonating, teleporter creating singularity? +/obj/item/mecha_parts/mecha_equipment/Destroy() if(chassis) chassis.equipment -= src - listclearnulls(chassis.equipment) if(chassis.selected == src) chassis.selected = null src.update_chassis_page() @@ -55,13 +45,12 @@ chassis.occupant << sound('sound/mecha/weapdestr.ogg',volume=50) else chassis.occupant << sound('sound/mecha/critdestr.ogg',volume=50) - qdel(src) - return + chassis = null + ..() /obj/item/mecha_parts/mecha_equipment/proc/critfail() if(chassis) log_message("Critical failure",1) - return /obj/item/mecha_parts/mecha_equipment/proc/get_equip_info() if(!chassis) return @@ -90,13 +79,29 @@ /obj/item/mecha_parts/mecha_equipment/proc/action(atom/target) return -/obj/item/mecha_parts/mecha_equipment/proc/can_attach(obj/mecha/M as obj) - if(istype(M)) - if(M.equipment.len[target] will not fit into the sleeper because they are buckled to [target.buckled]!") return - if(occupant) + if(patient) occupant_message("The sleeper is already occupied!") return for(var/mob/living/simple_animal/slime/M in range(1,target)) @@ -53,81 +54,65 @@ return occupant_message("You start putting [target] into [src]...") chassis.visible_message("[chassis] starts putting [target] into \the [src].") - var/C = chassis.loc - var/T = target.loc if(do_after_cooldown(target)) - if(chassis.loc!=C || target.loc!=T) - return - if(occupant) + if(patient) occupant_message("The sleeper is already occupied!") return target.forceMove(src) - occupant = target + patient = target target.reset_view(src) - /* - if(target.client) - target.client.perspective = EYE_PERSPECTIVE - target.client.eye = chassis - */ - set_ready_state(0) - pr_mech_sleeper.start() + SSobj.processing |= src + update_equip_info() occupant_message("[target] successfully loaded into [src]. Life support functions engaged.") chassis.visible_message("[chassis] loads [target] into [src].") log_message("[target] loaded. Life support functions engaged.") - return -/obj/item/mecha_parts/mecha_equipment/tool/sleeper/proc/go_out() - if(!occupant) +/obj/item/mecha_parts/mecha_equipment/sleeper/proc/go_out() + if(!patient) return - occupant.forceMove(get_turf(src)) - occupant_message("[occupant] ejected. Life support functions disabled.") - log_message("[occupant] ejected. Life support functions disabled.") - occupant.reset_view() - /* - if(occupant.client) - occupant.client.eye = occupant.client.mob - occupant.client.perspective = MOB_PERSPECTIVE - */ - occupant = null - pr_mech_sleeper.stop() - set_ready_state(1) - return + patient.forceMove(get_turf(src)) + occupant_message("[patient] ejected. Life support functions disabled.") + log_message("[patient] ejected. Life support functions disabled.") + patient.reset_view() + SSobj.processing.Remove(src) + update_equip_info() -/obj/item/mecha_parts/mecha_equipment/tool/sleeper/detach() - if(occupant) +/obj/item/mecha_parts/mecha_equipment/sleeper/detach() + if(patient) occupant_message("Unable to detach [src] - equipment occupied!") return - pr_mech_sleeper.stop() + SSobj.processing.Remove(src) + update_equip_info() return ..() -/obj/item/mecha_parts/mecha_equipment/tool/sleeper/get_equip_info() +/obj/item/mecha_parts/mecha_equipment/sleeper/get_equip_info() var/output = ..() if(output) var/temp = "" - if(occupant) - temp = "
\[Occupant: [occupant] ([occupant.stat > 1 ? "*DECEASED*" : "Health: [occupant.health]%"])\]
View stats|Eject" + if(patient) + temp = "
\[Occupant: [patient] ([patient.stat > 1 ? "*DECEASED*" : "Health: [patient.health]%"])\]
View stats|Eject" return "[output] [temp]" return -/obj/item/mecha_parts/mecha_equipment/tool/sleeper/Topic(href,href_list) +/obj/item/mecha_parts/mecha_equipment/sleeper/Topic(href,href_list) ..() var/datum/topic_input/filter = new /datum/topic_input(href,href_list) if(filter.get("eject")) go_out() if(filter.get("view_stats")) - chassis.occupant << browse(get_occupant_stats(),"window=msleeper") + chassis.occupant << browse(get_patient_stats(),"window=msleeper") onclose(chassis.occupant, "msleeper") return if(filter.get("inject")) inject_reagent(filter.getType("inject",/datum/reagent),filter.getObj("source")) return -/obj/item/mecha_parts/mecha_equipment/tool/sleeper/proc/get_occupant_stats() - if(!occupant) +/obj/item/mecha_parts/mecha_equipment/sleeper/proc/get_patient_stats() + if(!patient) return return {" - [occupant] statistics + [patient] statistics @@ -139,11 +124,11 @@

Health statistics

- [get_occupant_dam()] + [get_patient_dam()]

Reagents in bloodstream

- [get_occupant_reagents()] + [get_patient_reagents()]
[get_available_reagents()] @@ -151,9 +136,9 @@ "} -/obj/item/mecha_parts/mecha_equipment/tool/sleeper/proc/get_occupant_dam() +/obj/item/mecha_parts/mecha_equipment/sleeper/proc/get_patient_dam() var/t1 - switch(occupant.stat) + switch(patient.stat) if(0) t1 = "Conscious" if(1) @@ -162,26 +147,26 @@ t1 = "*dead*" else t1 = "Unknown" - return {"Health: [occupant.stat > 1 ? "[t1]" : "[occupant.health]% ([t1])"]
- Core Temperature: [src.occupant.bodytemperature-T0C]°C ([src.occupant.bodytemperature*1.8-459.67]°F)
- Brute Damage: [occupant.getBruteLoss()]%
- Respiratory Damage: [occupant.getOxyLoss()]%
- Toxin Content: [occupant.getToxLoss()]%
- Burn Severity: [occupant.getFireLoss()]%
- [occupant.getCloneLoss() ? "Subject appears to have cellular damage." : ""]
- [occupant.getBrainLoss() ? "Significant brain damage detected." : ""]
+ return {"Health: [patient.stat > 1 ? "[t1]" : "[patient.health]% ([t1])"]
+ Core Temperature: [patient.bodytemperature-T0C]°C ([patient.bodytemperature*1.8-459.67]°F)
+ Brute Damage: [patient.getBruteLoss()]%
+ Respiratory Damage: [patient.getOxyLoss()]%
+ Toxin Content: [patient.getToxLoss()]%
+ Burn Severity: [patient.getFireLoss()]%
+ [patient.getCloneLoss() ? "Subject appears to have cellular damage." : ""]
+ [patient.getBrainLoss() ? "Significant brain damage detected." : ""]
"} -/obj/item/mecha_parts/mecha_equipment/tool/sleeper/proc/get_occupant_reagents() - if(occupant.reagents) - for(var/datum/reagent/R in occupant.reagents.reagent_list) +/obj/item/mecha_parts/mecha_equipment/sleeper/proc/get_patient_reagents() + if(patient.reagents) + for(var/datum/reagent/R in patient.reagents.reagent_list) if(R.volume > 0) . += "[R]: [round(R.volume,0.01)]
" return . || "None" -/obj/item/mecha_parts/mecha_equipment/tool/sleeper/proc/get_available_reagents() +/obj/item/mecha_parts/mecha_equipment/sleeper/proc/get_available_reagents() var/output - var/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/SG = locate(/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun) in chassis + var/obj/item/mecha_parts/mecha_equipment/syringe_gun/SG = locate(/obj/item/mecha_parts/mecha_equipment/syringe_gun) in chassis if(SG && SG.reagents && islist(SG.reagents.reagent_list)) for(var/datum/reagent/R in SG.reagents.reagent_list) if(R.volume > 0) @@ -189,41 +174,41 @@ return output -/obj/item/mecha_parts/mecha_equipment/tool/sleeper/proc/inject_reagent(var/datum/reagent/R,var/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/SG) - if(!R || !occupant || !SG || !(SG in chassis.equipment)) +/obj/item/mecha_parts/mecha_equipment/sleeper/proc/inject_reagent(var/datum/reagent/R,var/obj/item/mecha_parts/mecha_equipment/syringe_gun/SG) + if(!R || !patient || !SG || !(SG in chassis.equipment)) return 0 var/to_inject = min(R.volume, inject_amount) - if(to_inject && occupant.reagents.get_reagent_amount(R.id) + to_inject <= inject_amount*2) - occupant_message("Injecting [occupant] with [to_inject] units of [R.name].") - log_message("Injecting [occupant] with [to_inject] units of [R.name].") - add_logs(chassis.occupant, occupant, "injected", object="[name] ([R] - [to_inject] units)") - SG.reagents.trans_id_to(occupant,R.id,to_inject) + if(to_inject && patient.reagents.get_reagent_amount(R.id) + to_inject <= inject_amount*2) + occupant_message("Injecting [patient] with [to_inject] units of [R.name].") + log_message("Injecting [patient] with [to_inject] units of [R.name].") + add_logs(chassis.occupant, patient, "injected", object="[name] ([R] - [to_inject] units)") + SG.reagents.trans_id_to(patient,R.id,to_inject) update_equip_info() return -/obj/item/mecha_parts/mecha_equipment/tool/sleeper/update_equip_info() +/obj/item/mecha_parts/mecha_equipment/sleeper/update_equip_info() if(..()) - send_byjax(chassis.occupant,"msleeper.browser","lossinfo",get_occupant_dam()) - send_byjax(chassis.occupant,"msleeper.browser","reagents",get_occupant_reagents()) + send_byjax(chassis.occupant,"msleeper.browser","lossinfo",get_patient_dam()) + send_byjax(chassis.occupant,"msleeper.browser","reagents",get_patient_reagents()) send_byjax(chassis.occupant,"msleeper.browser","injectwith",get_available_reagents()) return 1 return -/obj/item/mecha_parts/mecha_equipment/tool/sleeper/container_resist() +/obj/item/mecha_parts/mecha_equipment/sleeper/container_resist() go_out() -/datum/global_iterator/mech_sleeper -/datum/global_iterator/mech_sleeper/process(var/obj/item/mecha_parts/mecha_equipment/tool/sleeper/S) - if(!S.chassis) - S.set_ready_state(1) - return stop() - if(!S.chassis.has_charge(S.energy_drain)) - S.set_ready_state(1) - S.log_message("Deactivated.") - S.occupant_message("[src] deactivated - no power.") - return stop() - var/mob/living/carbon/M = S.occupant +/obj/item/mecha_parts/mecha_equipment/sleeper/process() + if(!chassis) + SSobj.processing.Remove(src) + return + if(!chassis.has_charge(energy_drain)) + set_ready_state(1) + log_message("Deactivated.") + occupant_message("[src] deactivated - no power.") + SSobj.processing.Remove(src) + return + var/mob/living/carbon/M = patient if(!M) return if(M.health > 0) @@ -234,11 +219,16 @@ M.AdjustStunned(-4) if(M.reagents.get_reagent_amount("epinephrine") < 5) M.reagents.add_reagent("epinephrine", 5) - S.chassis.use_power(S.energy_drain) - S.update_equip_info() - return + chassis.use_power(energy_drain) + update_equip_info() -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun + + + +///////////////////////////////// Syringe Gun /////////////////////////////////////////////////////////////// + + +/obj/item/mecha_parts/mecha_equipment/syringe_gun name = "exosuit syringe gun" desc = "Equipment for medical exosuits. A chem synthesizer with syringe gun. Reagents inside are held in stasis, so no reactions will occur." icon = 'icons/obj/guns/projectile.dmi' @@ -251,42 +241,44 @@ var/synth_speed = 5 //[num] reagent units per cycle energy_drain = 10 var/mode = 0 //0 - fire syringe, 1 - analyze reagents. - var/datum/global_iterator/mech_synth/synth range = MELEE|RANGED equip_cooldown = 10 origin_tech = "materials=3;biotech=4;magnets=4;programming=3" -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/New() +/obj/item/mecha_parts/mecha_equipment/syringe_gun/New() ..() flags |= NOREACT syringes = new known_reagents = list("epinephrine"="Epinephrine","charcoal"="Charcoal") processed_reagents = new create_reagents(max_volume) - synth = new (list(src),0) -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/detach() - synth.stop() +/obj/item/mecha_parts/mecha_equipment/syringe_gun/detach() + SSobj.processing.Remove(src) return ..() -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/critfail() +/obj/item/mecha_parts/mecha_equipment/syringe_gun/Destroy() + SSobj.processing.Remove(src) + ..() + +/obj/item/mecha_parts/mecha_equipment/syringe_gun/critfail() ..() flags &= ~NOREACT return -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/can_attach(obj/mecha/medical/M) +/obj/item/mecha_parts/mecha_equipment/syringe_gun/can_attach(obj/mecha/medical/M) if(..()) if(istype(M)) return 1 return 0 -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/get_equip_info() +/obj/item/mecha_parts/mecha_equipment/syringe_gun/get_equip_info() var/output = ..() if(output) return "[output] \[[mode? "Analyze" : "Launch"]\]
\[Syringes: [syringes.len]/[max_syringes] | Reagents: [reagents.total_volume]/[reagents.maximum_volume]\]
Reagents list" return -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/action(atom/movable/target) +/obj/item/mecha_parts/mecha_equipment/syringe_gun/action(atom/movable/target) if(!action_checks(target)) return if(istype(target,/obj/item/weapon/reagent_containers/syringe)) @@ -303,8 +295,6 @@ if(reagents.total_volume<=0) occupant_message("No available reagents to load syringe with.") return - set_ready_state(0) - chassis.use_power(energy_drain) var/turf/trg = get_turf(target) var/obj/item/weapon/reagent_containers/syringe/mechsyringe = syringes[1] mechsyringe.forceMove(get_turf(chassis)) @@ -315,7 +305,7 @@ playsound(chassis, 'sound/items/syringeproj.ogg', 50, 1) log_message("Launched [mechsyringe] from [src], targeting [target].") var/mob/originaloccupant = chassis.occupant - spawn(-1) + spawn(0) src = null //if src is deleted, still process the syringe for(var/i=0, i<6, i++) if(!mechsyringe) @@ -350,11 +340,10 @@ mechsyringe.update_icon() break sleep(1) - do_after_cooldown() return 1 -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/Topic(href,href_list) +/obj/item/mecha_parts/mecha_equipment/syringe_gun/Topic(href,href_list) ..() var/datum/topic_input/filter = new (href,href_list) if(filter.get("toggle_mode")) @@ -375,7 +364,7 @@ m++ if(processed_reagents.len) message += " added to production" - synth.start() + SSobj.processing |= src occupant_message(message) occupant_message("Reagent processing started.") log_message("Reagent processing started.") @@ -392,7 +381,7 @@ return return -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/proc/get_reagents_page() +/obj/item/mecha_parts/mecha_equipment/syringe_gun/proc/get_reagents_page() var/output = {" Reagent Synthesizer @@ -420,7 +409,7 @@ "} return output -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/proc/get_reagents_form() +/obj/item/mecha_parts/mecha_equipment/syringe_gun/proc/get_reagents_form() var/r_list = get_reagents_list() var/inputs if(r_list) @@ -435,14 +424,14 @@ "} return output -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/proc/get_reagents_list() +/obj/item/mecha_parts/mecha_equipment/syringe_gun/proc/get_reagents_list() var/output for(var/i=1 to known_reagents.len) var/reagent_id = known_reagents[i] output += {" [known_reagents[reagent_id]]
"} return output -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/proc/get_current_reagents() +/obj/item/mecha_parts/mecha_equipment/syringe_gun/proc/get_current_reagents() var/output for(var/datum/reagent/R in reagents.reagent_list) if(R.volume > 0) @@ -451,7 +440,7 @@ output += "Total: [round(reagents.total_volume,0.001)]/[reagents.maximum_volume] - Purge All" return output || "None" -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/proc/load_syringe(obj/item/weapon/reagent_containers/syringe/S) +/obj/item/mecha_parts/mecha_equipment/syringe_gun/proc/load_syringe(obj/item/weapon/reagent_containers/syringe/S) if(syringes.len= 2) occupant_message("The syringe is too far away.") @@ -473,7 +462,7 @@ occupant_message("The [src] syringe chamber is full.") return 0 -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/proc/analyze_reagents(atom/A) +/obj/item/mecha_parts/mecha_equipment/syringe_gun/proc/analyze_reagents(atom/A) if(get_dist(src,A) >= 4) occupant_message("The object is too far away.") return 0 @@ -488,42 +477,38 @@ occupant_message("Analyzis complete.") return 1 -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/proc/add_known_reagent(r_id,r_name) - set_ready_state(0) - do_after_cooldown() +/obj/item/mecha_parts/mecha_equipment/syringe_gun/proc/add_known_reagent(r_id,r_name) if(!(r_id in known_reagents)) known_reagents += r_id known_reagents[r_id] = r_name return 1 return 0 -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/update_equip_info() +/obj/item/mecha_parts/mecha_equipment/syringe_gun/update_equip_info() if(..()) send_byjax(chassis.occupant,"msyringegun.browser","reagents",get_current_reagents()) send_byjax(chassis.occupant,"msyringegun.browser","reagents_form",get_reagents_form()) return 1 return -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/on_reagent_change() +/obj/item/mecha_parts/mecha_equipment/syringe_gun/on_reagent_change() ..() update_equip_info() return -/datum/global_iterator/mech_synth - delay = 100 -/datum/global_iterator/mech_synth/process(var/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/S) - if(!S.chassis) - return stop() - var/energy_drain = S.energy_drain*10 - if(!S.processed_reagents.len || S.reagents.total_volume >= S.reagents.maximum_volume || !S.chassis.has_charge(energy_drain)) - S.occupant_message("Reagent processing stopped.") - S.log_message("Reagent processing stopped.") - return stop() - if(anyprob(S.reliability)) - S.critfail() - var/amount = S.synth_speed / S.processed_reagents.len - for(var/reagent in S.processed_reagents) - S.reagents.add_reagent(reagent,amount) - S.chassis.use_power(energy_drain) - return 1 +/obj/item/mecha_parts/mecha_equipment/syringe_gun/process() + if(!chassis) + SSobj.processing.Remove(src) + return + if(!processed_reagents.len || reagents.total_volume >= reagents.maximum_volume || !chassis.has_charge(energy_drain)) + occupant_message("Reagent processing stopped.") + log_message("Reagent processing stopped.") + SSobj.processing.Remove(src) + if(anyprob(reliability)) + critfail() + var/amount = synth_speed / processed_reagents.len + for(var/reagent in processed_reagents) + reagents.add_reagent(reagent,amount) + chassis.use_power(energy_drain) + diff --git a/code/game/mecha/equipment/tools/mining_tools.dm b/code/game/mecha/equipment/tools/mining_tools.dm new file mode 100644 index 00000000000..0cc2255b75f --- /dev/null +++ b/code/game/mecha/equipment/tools/mining_tools.dm @@ -0,0 +1,127 @@ + +// Drill, Diamond drill, Mining scanner + + +/obj/item/mecha_parts/mecha_equipment/drill + name = "exosuit drill" + desc = "Equipment for engineering and combat exosuits. This is the drill that'll pierce the heavens!" + icon_state = "mecha_drill" + equip_cooldown = 30 + energy_drain = 10 + force = 15 + +/obj/item/mecha_parts/mecha_equipment/drill/action(atom/target) + if(!action_checks(target)) + return + if(istype(target, /turf) && !istype(target, /turf/simulated)) + return + if(isobj(target)) + var/obj/target_obj = target + if(target_obj.unacidable) + return + target.visible_message("[chassis] starts to drill [target].", \ + "[chassis] starts to drill [target]...", \ + "You hear drilling.") + + if(do_after_cooldown(target)) + if(istype(target, /turf/simulated/wall/r_wall)) + if(istype(src , /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill)) + if(do_after_cooldown(target))//To slow down how fast mechs can drill through the station + log_message("Drilled through [target]") + target.ex_act(3) + else + occupant_message("[target] is too durable to drill through.") + else if(istype(target, /turf/simulated/mineral)) + for(var/turf/simulated/mineral/M in range(chassis,1)) + if(get_dir(chassis,M)&chassis.dir) + M.gets_drilled(chassis.occupant) + log_message("Drilled through [target]") + if(locate(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp) in chassis.equipment) + var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo + if(ore_box) + for(var/obj/item/weapon/ore/ore in range(chassis,1)) + if(get_dir(chassis,ore)&chassis.dir) + ore.Move(ore_box) + else if(istype(target, /turf/simulated/floor/plating/asteroid)) + for(var/turf/simulated/floor/plating/asteroid/M in range(chassis,1)) + if(get_dir(chassis,M)&chassis.dir) + M.gets_dug() + log_message("Drilled through [target]") + if(locate(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp) in chassis.equipment) + var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo + if(ore_box) + for(var/obj/item/weapon/ore/ore in range(chassis,1)) + if(get_dir(chassis,ore)&chassis.dir) + ore.Move(ore_box) + else + log_message("Drilled through [target]") + if(isliving(target)) + if(istype(src , /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill)) + drill_mob(target, chassis.occupant, 120) + else + drill_mob(target, chassis.occupant) + else + target.ex_act(2) + + +/obj/item/mecha_parts/mecha_equipment/drill/can_attach(obj/mecha/M as obj) + if(..()) + if(istype(M, /obj/mecha/working) || istype(M, /obj/mecha/combat)) + return 1 + return 0 + +/obj/item/mecha_parts/mecha_equipment/drill/proc/drill_mob(mob/living/target, mob/user, var/drill_damage=80) + target.visible_message("[chassis] drills [target] with [src].", \ + "[chassis] drills [target] with [src].") + add_logs(user, target, "attacked", object="[name]", addition="(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(damtype)])") + if(ishuman(target)) + var/mob/living/carbon/human/H = target + var/obj/item/organ/limb/affecting = H.get_organ("chest") + affecting.take_damage(drill_damage) + H.update_damage_overlays(0) + else + target.take_organ_damage(drill_damage) + if(target) + target.Paralyse(10) + target.updatehealth() + + + +/obj/item/mecha_parts/mecha_equipment/drill/diamonddrill + name = "diamond-tipped exosuit drill" + desc = "Equipment for engineering and combat exosuits. This is an upgraded version of the drill that'll pierce the heavens!" + icon_state = "mecha_diamond_drill" + origin_tech = "materials=4;engineering=3" + equip_cooldown = 20 + force = 15 + + + +/obj/item/mecha_parts/mecha_equipment/mining_scanner + name = "exosuit mining scanner" + desc = "Equipment for engineering and combat exosuits. It will automatically check surrounding rock for useful minerals." + icon_state = "mecha_analyzer" + origin_tech = "materials=3;engineering=2" + equip_cooldown = 30 + var/scanning = 0 + +/obj/item/mecha_parts/mecha_equipment/mining_scanner/New() + SSobj.processing |= src + +/obj/item/mecha_parts/mecha_equipment/mining_scanner/process() + if(!loc) + SSobj.processing.Remove(src) + qdel(src) + if(scanning) + return + if(istype(loc,/obj/mecha/working)) + var/obj/mecha/working/mecha = loc + if(!mecha.occupant) + return + var/list/occupant = list() + occupant |= mecha.occupant + scanning = 1 + mineral_scan_pulse(occupant,get_turf(loc)) + spawn(equip_cooldown) + scanning = 0 + diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm new file mode 100644 index 00000000000..56e6aa089d2 --- /dev/null +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -0,0 +1,518 @@ + +// Teleporter, Wormhole generator, Gravitational catapult, Armor booster modules, +// Repair droid, Tesla Energy relay, Generators + +////////////////////////////////////////////// TELEPORTER /////////////////////////////////////////////// + +/obj/item/mecha_parts/mecha_equipment/teleporter + name = "mounted teleporter" + desc = "An exosuit module that allows exosuits to teleport to any position in view." + icon_state = "mecha_teleport" + origin_tech = "bluespace=10" + equip_cooldown = 150 + energy_drain = 1000 + range = RANGED + +/obj/item/mecha_parts/mecha_equipment/teleporter/action(atom/target) + if(!action_checks(target) || src.loc.z == ZLEVEL_CENTCOM) return + var/turf/T = get_turf(target) + if(T) + do_teleport(chassis, T, 4) + return 1 + + + +////////////////////////////////////////////// WORMHOLE GENERATOR ////////////////////////////////////////// + +/obj/item/mecha_parts/mecha_equipment/wormhole_generator + name = "mounted wormhole generator" + desc = "An exosuit module that allows generating of small quasi-stable wormholes." + icon_state = "mecha_wholegen" + origin_tech = "bluespace=3" + equip_cooldown = 50 + energy_drain = 300 + range = RANGED + + +/obj/item/mecha_parts/mecha_equipment/wormhole_generator/action(atom/target) + if(!action_checks(target) || src.loc.z == ZLEVEL_CENTCOM) return + var/list/theareas = list() + for(var/area/AR in orange(100, chassis)) + if(AR in theareas) continue + theareas += AR + if(!theareas.len) + return + var/area/thearea = pick(theareas) + var/list/L = list() + var/turf/pos = get_turf(src) + for(var/turf/T in get_area_turfs(thearea.type)) + if(!T.density && pos.z == T.z) + var/clear = 1 + for(var/obj/O in T) + if(O.density) + clear = 0 + break + if(clear) + L+=T + if(!L.len) + return + var/turf/target_turf = pick(L) + if(!target_turf) + return + var/obj/effect/portal/P = new /obj/effect/portal(get_turf(target)) + P.target = target_turf + P.creator = null + P.icon = 'icons/obj/objects.dmi' + P.icon_state = "anom" + P.name = "wormhole" + var/turf/T = get_turf(target) + message_admins("[key_name_admin(chassis.occupant, chassis.occupant.client)](?) (FLW) used a Wormhole Generator in ([T.x],[T.y],[T.z] - JMP)",0,1) + log_game("[key_name(chassis.occupant)] used a Wormhole Generator in ([T.x],[T.y],[T.z])") + src = null + spawn(rand(150,300)) + qdel(P) + return 1 + + +/////////////////////////////////////// GRAVITATIONAL CATAPULT /////////////////////////////////////////// + +/obj/item/mecha_parts/mecha_equipment/gravcatapult + name = "mounted gravitational catapult" + desc = "An exosuit mounted Gravitational Catapult." + icon_state = "mecha_teleport" + origin_tech = "bluespace=2;magnets=3" + equip_cooldown = 10 + energy_drain = 100 + range = MELEE|RANGED + var/atom/movable/locked + var/mode = 1 //1 - gravsling 2 - gravpush + + +/obj/item/mecha_parts/mecha_equipment/gravcatapult/action(atom/movable/target) + if(!action_checks(target)) + return + switch(mode) + if(1) + if(!locked) + if(!istype(target) || target.anchored) + occupant_message("Unable to lock on [target]") + return + locked = target + occupant_message("Locked on [target]") + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + else if(target!=locked) + if(locked in view(chassis)) + locked.throw_at(target, 14, 1.5) + locked = null + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + return 1 + else + locked = null + occupant_message("Lock on [locked] disengaged.") + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + if(2) + var/list/atoms = list() + if(isturf(target)) + atoms = range(target,3) + else + atoms = orange(target,3) + for(var/atom/movable/A in atoms) + if(A.anchored) continue + spawn(0) + var/iter = 5-get_dist(A,target) + for(var/i=0 to iter) + step_away(A,target) + sleep(2) + var/turf/T = get_turf(target) + log_game("[chassis.occupant.ckey]([chassis.occupant]) used a Gravitational Catapult in ([T.x],[T.y],[T.z])") + return 1 + + +/obj/item/mecha_parts/mecha_equipment/gravcatapult/get_equip_info() + return "[..()] [mode==1?"([locked||"Nothing"])":null] \[S|P\]" + +/obj/item/mecha_parts/mecha_equipment/gravcatapult/Topic(href, href_list) + ..() + if(href_list["mode"]) + mode = text2num(href_list["mode"]) + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + return + + + + +//////////////////////////// ARMOR BOOSTER MODULES ////////////////////////////////////////////////////////// + + +/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster //what is that noise? A BAWWW from TK mutants. + name = "armor booster module (Close Combat Weaponry)" + desc = "Boosts exosuit armor against armed melee attacks. Requires energy to operate." + icon_state = "mecha_abooster_ccw" + origin_tech = "materials=3" + equip_cooldown = 10 + energy_drain = 50 + range = 0 + var/deflect_coeff = 1.15 + var/damage_coeff = 0.8 + +/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/can_attach(obj/mecha/combat/M as obj) + if(..()) + if(istype(M)) + return 1 + +/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/get_equip_info() + if(!chassis) return + return "* [src.name]" + +/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/proc/attack_react(mob/user as mob) + if(action_checks(user)) + start_cooldown() + return 1 + + + +/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster + name = "armor booster module (Ranged Weaponry)" + desc = "Boosts exosuit armor against ranged attacks. Completely blocks taser shots. Requires energy to operate." + icon_state = "mecha_abooster_proj" + origin_tech = "materials=4" + equip_cooldown = 10 + energy_drain = 50 + range = 0 + var/deflect_coeff = 1.15 + var/damage_coeff = 0.8 + +/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/can_attach(obj/mecha/combat/M as obj) + if(..()) + if(istype(M)) + return 1 + return 0 + +/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/get_equip_info() + if(!chassis) return + return "* [src.name]" + +/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/proc/projectile_react() + if(action_checks(src)) + start_cooldown() + return 1 + + +////////////////////////////////// REPAIR DROID ////////////////////////////////////////////////// + + +/obj/item/mecha_parts/mecha_equipment/repair_droid + name = "exosuit repair droid" + desc = "An automated repair droid for exosuits. Scans for damage and repairs it. Can fix almost all types of external or internal damage." + icon_state = "repair_droid" + origin_tech = "magnets=3;programming=3" + energy_drain = 50 + range = 0 + var/health_boost = 1 + var/icon/droid_overlay + var/list/repairable_damage = list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH) + +/obj/item/mecha_parts/mecha_equipment/repair_droid/Destroy() + SSobj.processing.Remove(src) + if(chassis) + chassis.overlays -= droid_overlay + ..() + +/obj/item/mecha_parts/mecha_equipment/repair_droid/attach(obj/mecha/M as obj) + ..() + droid_overlay = new(src.icon, icon_state = "repair_droid") + M.overlays += droid_overlay + +/obj/item/mecha_parts/mecha_equipment/repair_droid/detach() + chassis.overlays -= droid_overlay + SSobj.processing.Remove(src) + ..() + +/obj/item/mecha_parts/mecha_equipment/repair_droid/get_equip_info() + if(!chassis) return + return "* [src.name] - [equip_ready?"A":"Dea"]ctivate" + + +/obj/item/mecha_parts/mecha_equipment/repair_droid/Topic(href, href_list) + ..() + if(href_list["toggle_repairs"]) + chassis.overlays -= droid_overlay + if(equip_ready) + SSobj.processing |= src + droid_overlay = new(src.icon, icon_state = "repair_droid_a") + log_message("Activated.") + set_ready_state(0) + else + SSobj.processing.Remove(src) + droid_overlay = new(src.icon, icon_state = "repair_droid") + log_message("Deactivated.") + set_ready_state(1) + chassis.overlays += droid_overlay + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + + +/obj/item/mecha_parts/mecha_equipment/repair_droid/process() + if(!chassis) + SSobj.processing.Remove(src) + set_ready_state(1) + return + var/h_boost = health_boost + var/repaired = 0 + if(chassis.internal_damage & MECHA_INT_SHORT_CIRCUIT) + h_boost *= -2 + else if(chassis.internal_damage && prob(15)) + for(var/int_dam_flag in repairable_damage) + if(chassis.internal_damage & int_dam_flag) + chassis.clearInternalDamage(int_dam_flag) + repaired = 1 + break + if(health_boost<0 || chassis.health < initial(chassis.health)) + chassis.health += min(health_boost, initial(chassis.health)-chassis.health) + repaired = 1 + if(repaired) + if(!chassis.use_power(energy_drain)) + SSobj.processing.Remove(src) + set_ready_state(1) + else //no repair needed, we turn off + SSobj.processing.Remove(src) + set_ready_state(1) + + + + + +/////////////////////////////////// TESLA ENERGY RELAY //////////////////////////////////////////////// + +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay + name = "exosuit energy relay" + desc = "An exosuit module that wirelessly drains energy from any available power channel in area. The performance index is quite low." + icon_state = "tesla" + origin_tech = "magnets=4;powerstorage=3" + energy_drain = 0 + range = 0 + var/coeff = 100 + var/list/use_channels = list(EQUIP,ENVIRON,LIGHT) + +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/Destroy() + SSobj.processing.Remove(src) + ..() + +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/detach() + SSobj.processing.Remove(src) + ..() + return + +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/proc/get_charge() + if(equip_ready) //disabled + return + var/area/A = get_area(chassis) + var/pow_chan = get_power_channel(A) + if(pow_chan) + return 1000 //making magic + + +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/proc/get_power_channel(var/area/A) + var/pow_chan + if(A) + for(var/c in use_channels) + if(A.master && A.master.powered(c)) + pow_chan = c + break + return pow_chan + +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/Topic(href, href_list) + ..() + if(href_list["toggle_relay"]) + if(equip_ready) //inactive + SSobj.processing |= src + set_ready_state(0) + log_message("Activated.") + else + SSobj.processing.Remove(src) + set_ready_state(1) + log_message("Deactivated.") + +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/get_equip_info() + if(!chassis) return + return "* [src.name] - [equip_ready?"A":"Dea"]ctivate" + + +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/process() + if(!chassis || chassis.internal_damage & MECHA_INT_SHORT_CIRCUIT) + SSobj.processing.Remove(src) + set_ready_state(1) + return + var/cur_charge = chassis.get_charge() + if(isnull(cur_charge) || !chassis.cell) + SSobj.processing.Remove(src) + set_ready_state(1) + occupant_message("No powercell detected.") + return + if(cur_charge < chassis.cell.maxcharge) + var/area/A = get_area(chassis) + if(A) + var/pow_chan + for(var/c in list(EQUIP,ENVIRON,LIGHT)) + if(A.master.powered(c)) + pow_chan = c + break + if(pow_chan) + var/delta = min(15, chassis.cell.maxcharge-cur_charge) + chassis.give_power(delta) + A.master.use_power(delta*coeff, pow_chan) + + + + +/////////////////////////////////////////// GENERATOR ///////////////////////////////////////////// + + +/obj/item/mecha_parts/mecha_equipment/generator + name = "exosuit plasma converter" + desc = "An exosuit module that generates power using solid plasma as fuel. Pollutes the environment." + icon_state = "tesla" + origin_tech = "plasmatech=2;powerstorage=2;engineering=1" + range = MELEE + var/coeff = 100 + var/obj/item/stack/sheet/fuel + var/max_fuel = 150000 + var/fuel_per_cycle_idle = 25 + var/fuel_per_cycle_active = 200 + var/power_per_cycle = 20 + reliability = 1000 + +/obj/item/mecha_parts/mecha_equipment/generator/New() + ..() + generator_init() + +/obj/item/mecha_parts/mecha_equipment/generator/Destroy() + SSobj.processing.Remove(src) + ..() + +/obj/item/mecha_parts/mecha_equipment/generator/proc/generator_init() + fuel = new /obj/item/stack/sheet/mineral/plasma(src) + fuel.amount = 0 + +/obj/item/mecha_parts/mecha_equipment/generator/detach() + SSobj.processing.Remove(src) + ..() + +/obj/item/mecha_parts/mecha_equipment/generator/Topic(href, href_list) + ..() + if(href_list["toggle"]) + if(equip_ready) //inactive + set_ready_state(0) + SSobj.processing |= src + log_message("Activated.") + else + set_ready_state(1) + SSobj.processing.Remove(src) + log_message("Deactivated.") + +/obj/item/mecha_parts/mecha_equipment/generator/get_equip_info() + var/output = ..() + if(output) + return "[output] \[[fuel]: [round(fuel.amount*fuel.perunit,0.1)] cm3\] - [equip_ready?"A":"Dea"]ctivate" + +/obj/item/mecha_parts/mecha_equipment/generator/action(target) + if(chassis) + var/result = load_fuel(target) + if(result) + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + +/obj/item/mecha_parts/mecha_equipment/generator/proc/load_fuel(var/obj/item/stack/sheet/P) + if(P.type == fuel.type && P.amount > 0) + var/to_load = max(max_fuel - fuel.amount*fuel.perunit,0) + if(to_load) + var/units = min(max(round(to_load / P.perunit),1),P.amount) + fuel.amount += units + P.use(units) + occupant_message("[units] unit\s of [fuel] successfully loaded.") + return units + else + occupant_message("Unit is full.") + return 0 + else + occupant_message("[fuel] traces in target minimal! [P] cannot be used as fuel.") + return + +/obj/item/mecha_parts/mecha_equipment/generator/attackby(weapon,mob/user, params) + load_fuel(weapon) + +/obj/item/mecha_parts/mecha_equipment/generator/critfail() + ..() + var/turf/simulated/T = get_turf(src) + if(!T) + return + var/datum/gas_mixture/GM = new + if(prob(10)) + GM.toxins += 100 + GM.temperature = 1500+T0C //should be enough to start a fire + T.visible_message("The [src] suddenly disgorges a cloud of heated plasma.") + qdel(src) + else + GM.toxins += 5 + GM.temperature = istype(T) ? T.air.return_temperature() : T20C + T.visible_message("The [src] suddenly disgorges a cloud of plasma.") + T.assume_air(GM) + return + +/obj/item/mecha_parts/mecha_equipment/generator/process() + if(!chassis) + SSobj.processing.Remove(src) + set_ready_state(1) + return + if(fuel.amount<=0) + SSobj.processing.Remove(src) + log_message("Deactivated - no fuel.") + set_ready_state(1) + return + if(anyprob(reliability)) + set_ready_state(1) //inactive + critfail() + SSobj.processing.Remove(src) + return + var/cur_charge = chassis.get_charge() + if(isnull(cur_charge)) + set_ready_state(1) + occupant_message("No powercell detected.") + log_message("Deactivated.") + SSobj.processing.Remove(src) + return + var/use_fuel = fuel_per_cycle_idle + if(cur_charge < chassis.cell.maxcharge) + use_fuel = fuel_per_cycle_active + chassis.give_power(power_per_cycle) + fuel.amount -= min(use_fuel/fuel.perunit,fuel.amount) + update_equip_info() + return 1 + + +/obj/item/mecha_parts/mecha_equipment/generator/nuclear + name = "exonuclear reactor" + desc = "An exosuit module that generates power using uranium as fuel. Pollutes the environment." + icon_state = "tesla" + origin_tech = "powerstorage=3;engineering=3" + max_fuel = 50000 + fuel_per_cycle_idle = 10 + fuel_per_cycle_active = 30 + power_per_cycle = 50 + var/rad_per_cycle = 0.3 + reliability = 1000 + +/obj/item/mecha_parts/mecha_equipment/generator/nuclear/generator_init() + fuel = new /obj/item/stack/sheet/mineral/uranium(src) + fuel.amount = 0 + +/obj/item/mecha_parts/mecha_equipment/generator/nuclear/critfail() + return + +/obj/item/mecha_parts/mecha_equipment/generator/nuclear/process() + if(..()) + for(var/mob/living/carbon/M in view(chassis)) + if(istype(M,/mob/living/carbon/human)) + M.irradiate(rad_per_cycle*3) + else + M.irradiate(rad_per_cycle) + + diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm deleted file mode 100644 index 7b9a4867f03..00000000000 --- a/code/game/mecha/equipment/tools/tools.dm +++ /dev/null @@ -1,1245 +0,0 @@ -/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp - name = "hydraulic clamp" - desc = "Equipment for engineering exosuits. Lifts objects and loads them into cargo." - icon_state = "mecha_clamp" - equip_cooldown = 15 - energy_drain = 10 - var/dam_force = 20 - var/obj/mecha/working/ripley/cargo_holder - -/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/can_attach(obj/mecha/working/ripley/M as obj) - if(..()) - if(istype(M)) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/attach(obj/mecha/M as obj) - ..() - cargo_holder = M - return - -/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/detach(atom/moveto = null) - ..() - if(can_attach(chassis)) - cargo_holder = chassis - else - cargo_holder = null - -/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/action(atom/target) - if(!action_checks(target)) - return - if(!cargo_holder) - return - if(istype(target,/obj)) - var/obj/O = target - if(!O.anchored) - if(cargo_holder.cargo.len < cargo_holder.cargo_capacity) - chassis.visible_message("[chassis] lifts [target] and starts to load it into cargo compartment.") - set_ready_state(0) - chassis.use_power(energy_drain) - O.anchored = 1 - var/T = chassis.loc - if(do_after_cooldown(target)) - if(T == chassis.loc && src == chassis.selected) - cargo_holder.cargo += O - O.loc = chassis - O.anchored = 0 - occupant_message("[target] successfully loaded.") - log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]") - else - occupant_message("You must hold still while handling objects!") - O.anchored = initial(O.anchored) - else - occupant_message("Not enough room in cargo compartment!") - else - occupant_message("[target] is firmly secured!") - - else if(istype(target,/mob/living)) - var/mob/living/M = target - if(M.stat>1) return - if(chassis.occupant.a_intent == "harm") - M.take_overall_damage(dam_force) - if(!M) - return - M.adjustOxyLoss(round(dam_force/2)) - M.updatehealth() - target.visible_message("[chassis] squeezes [target].", \ - "[chassis] squeezes [target].",\ - "You hear something crack.") - add_logs(chassis.occupant, M, "attacked", object="[name]", addition="(INTENT: [uppertext(chassis.occupant.a_intent)]) (DAMTYE: [uppertext(damtype)])") - else - step_away(M,chassis) - occupant_message("You push [target] out of the way.") - chassis.visible_message("[chassis] pushes [target] out of the way.") - set_ready_state(0) - chassis.use_power(energy_drain) - do_after_cooldown() - return 1 - -/obj/item/mecha_parts/mecha_equipment/tool/drill - name = "exosuit drill" - desc = "Equipment for engineering and combat exosuits. This is the drill that'll pierce the heavens!" - icon_state = "mecha_drill" - equip_cooldown = 30 - energy_drain = 10 - force = 15 - -/obj/item/mecha_parts/mecha_equipment/tool/drill/action(atom/target) - if(!action_checks(target)) - return - if(istype(target, /turf) && !istype(target, /turf/simulated)) - return - if(isobj(target)) - var/obj/target_obj = target - if(target_obj.unacidable) - return - set_ready_state(0) - chassis.use_power(energy_drain) - target.visible_message("[chassis] starts to drill [target].", \ - "[chassis] starts to drill [target]...", \ - "You hear drilling.") - var/T = chassis.loc - var/C = target.loc //why are these backwards? we may never know -Pete - if(do_after_cooldown(target)) - if(T == chassis.loc && src == chassis.selected) - if(istype(target, /turf/simulated/wall/r_wall)) - if(istype(src , /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill)) - if(do_after_cooldown(target))//To slow down how fast mechs can drill through the station - log_message("Drilled through [target]") - target.ex_act(3) - else - occupant_message("[target] is too durable to drill through.") - else if(istype(target, /turf/simulated/mineral)) - for(var/turf/simulated/mineral/M in range(chassis,1)) - if(get_dir(chassis,M)&chassis.dir) - M.gets_drilled(chassis.occupant) - log_message("Drilled through [target]") - if(locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in chassis.equipment) - var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo - if(ore_box) - for(var/obj/item/weapon/ore/ore in range(chassis,1)) - if(get_dir(chassis,ore)&chassis.dir) - ore.Move(ore_box) - else if(istype(target, /turf/simulated/floor/plating/asteroid)) - for(var/turf/simulated/floor/plating/asteroid/M in range(chassis,1)) - if(get_dir(chassis,M)&chassis.dir) - M.gets_dug() - log_message("Drilled through [target]") - if(locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in chassis.equipment) - var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo - if(ore_box) - for(var/obj/item/weapon/ore/ore in range(chassis,1)) - if(get_dir(chassis,ore)&chassis.dir) - ore.Move(ore_box) - else if(target.loc == C) - log_message("Drilled through [target]") - if(isliving(target)) - if(istype(src , /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill)) - drill_mob(target, chassis.occupant, 120) - else - drill_mob(target, chassis.occupant) - else - target.ex_act(2) - return 1 - -/obj/item/mecha_parts/mecha_equipment/tool/drill/can_attach(obj/mecha/M as obj) - if(..()) - if(istype(M, /obj/mecha/working) || istype(M, /obj/mecha/combat)) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/tool/drill/proc/drill_mob(mob/living/target, mob/user, var/drill_damage=80) - target.visible_message("[chassis] drills [target] with [src].", \ - "[chassis] drills [target] with [src].") - add_logs(user, target, "attacked", object="[name]", addition="(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(damtype)])") - if(ishuman(target)) - var/mob/living/carbon/human/H = target - var/obj/item/organ/limb/affecting = H.get_organ("chest") - affecting.take_damage(drill_damage) - H.update_damage_overlays(0) - else - target.take_organ_damage(drill_damage) - if(target) - target.Paralyse(10) - target.updatehealth() - -/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill - name = "diamond-tipped exosuit drill" - desc = "Equipment for engineering and combat exosuits. This is an upgraded version of the drill that'll pierce the heavens!" - icon_state = "mecha_diamond_drill" - origin_tech = "materials=4;engineering=3" - equip_cooldown = 20 - force = 15 - - -/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill/can_attach(obj/mecha/M as obj) - if(..()) - if(istype(M, /obj/mecha/working) || istype(M, /obj/mecha/combat)) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/tool/mining_scanner - name = "exosuit mining scanner" - desc = "Equipment for engineering and combat exosuits. It will automatically check surrounding rock for useful minerals." - icon_state = "mecha_analyzer" - origin_tech = "materials=3;engineering=2" - equip_cooldown = 30 - var/scanning = 0 - -/obj/item/mecha_parts/mecha_equipment/tool/mining_scanner/New() - SSobj.processing |= src - -/obj/item/mecha_parts/mecha_equipment/tool/mining_scanner/process() - if(!loc) - SSobj.processing.Remove(src) - qdel(src) - if(scanning) - return - if(istype(loc,/obj/mecha/working)) - var/obj/mecha/working/mecha = loc - if(!mecha.occupant) - return - var/list/occupant = list() - occupant |= mecha.occupant - scanning = 1 - mineral_scan_pulse(occupant,get_turf(loc)) - spawn(equip_cooldown) - scanning = 0 - -/obj/item/mecha_parts/mecha_equipment/tool/extinguisher - name = "exosuit extinguisher" - desc = "Equipment for engineering exosuits. A rapid-firing high capacity fire extinguisher." - icon_state = "mecha_exting" - equip_cooldown = 5 - energy_drain = 0 - range = MELEE|RANGED - -/obj/item/mecha_parts/mecha_equipment/tool/extinguisher/New() - create_reagents(1000) - reagents.add_reagent("water", 1000) - ..() - return - -/obj/item/mecha_parts/mecha_equipment/tool/extinguisher/action(atom/target) //copypasted from extinguisher. TODO: Rewrite from scratch. - if(!action_checks(target) || get_dist(chassis, target)>3) return - if(get_dist(chassis, target)>2) return - set_ready_state(0) - if(do_after_cooldown(target)) - if(istype(target, /obj/structure/reagent_dispensers/watertank) && get_dist(chassis,target) <= 1) - var/obj/o = target - o.reagents.trans_to(src, 1000) - occupant_message("Extinguisher refilled.") - playsound(chassis, 'sound/effects/refill.ogg', 50, 1, -6) - else - if(src.reagents.total_volume > 0) - playsound(chassis, 'sound/effects/extinguish.ogg', 75, 1, -3) - var/direction = get_dir(chassis,target) - var/turf/T = get_turf(target) - var/turf/T1 = get_step(T,turn(direction, 90)) - var/turf/T2 = get_step(T,turn(direction, -90)) - - var/list/the_targets = list(T,T1,T2) - spawn(0) - for(var/a=0, a<5, a++) - var/obj/effect/effect/water/W = PoolOrNew(/obj/effect/effect/water, get_turf(chassis)) - if(!W) - return - var/turf/my_target = pick(the_targets) - var/datum/reagents/R = new/datum/reagents(5) - W.reagents = R - R.my_atom = W - src.reagents.trans_to(W,1) - for(var/b=0, b<4, b++) - if(!W) - return - step_towards(W,my_target) - if(!W) - return - var/turf/W_turf = get_turf(W) - W.reagents.reaction(W_turf) - for(var/atom/atm in W_turf) - W.reagents.reaction(atm) - if(W.loc == my_target) - break - sleep(2) - return 1 - -/obj/item/mecha_parts/mecha_equipment/tool/extinguisher/get_equip_info() - return "[..()] \[[src.reagents.total_volume]\]" - -/obj/item/mecha_parts/mecha_equipment/tool/extinguisher/on_reagent_change() - return - -/obj/item/mecha_parts/mecha_equipment/tool/extinguisher/can_attach(obj/mecha/working/M as obj) - if(..()) - if(istype(M)) - return 1 - return 0 - - -/obj/item/mecha_parts/mecha_equipment/tool/rcd - name = "mounted RCD" - desc = "An exosuit-mounted Rapid Construction Device." - icon_state = "mecha_rcd" - origin_tech = "materials=4;bluespace=3;magnets=4;powerstorage=4" - equip_cooldown = 10 - energy_drain = 250 - range = MELEE|RANGED - var/mode = 0 //0 - deconstruct, 1 - wall or floor, 2 - airlock. - var/disabled = 0 //malf - -/obj/item/mecha_parts/mecha_equipment/tool/rcd/action(atom/target) - if(istype(target,/area/shuttle)||istype(target, /turf/space/transit))//>implying these are ever made -Sieve - disabled = 1 - else - disabled = 0 - if(!istype(target, /turf) && !istype(target, /obj/machinery/door/airlock)) - target = get_turf(target) - if(!action_checks(target) || disabled || get_dist(chassis, target)>3) return - playsound(chassis, 'sound/machines/click.ogg', 50, 1) - //meh - switch(mode) - if(0) - if (istype(target, /turf/simulated/wall)) - var/turf/simulated/wall/W = target - occupant_message("Deconstructing [W]...") - set_ready_state(0) - if(do_after_cooldown(W)) - if(disabled) return - chassis.spark_system.start() - W.ChangeTurf(/turf/simulated/floor/plating) - playsound(W, 'sound/items/Deconstruct.ogg', 50, 1) - chassis.use_power(energy_drain) - else if (istype(target, /turf/simulated/floor)) - var/turf/simulated/floor/F = target - occupant_message("Deconstructing [F]...") - set_ready_state(0) - if(do_after_cooldown(F)) - if(disabled) return - chassis.spark_system.start() - F.ChangeTurf(F.baseturf) - playsound(F, 'sound/items/Deconstruct.ogg', 50, 1) - chassis.use_power(energy_drain) - else if (istype(target, /obj/machinery/door/airlock)) - occupant_message("Deconstructing [target]...") - set_ready_state(0) - if(do_after_cooldown(target)) - if(disabled) return - chassis.spark_system.start() - qdel(target) - playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) - chassis.use_power(energy_drain) - if(1) - if(istype(target, /turf/space)) - var/turf/space/S = target - occupant_message("Building Floor...") - set_ready_state(0) - if(do_after_cooldown(S)) - if(disabled) return - S.ChangeTurf(/turf/simulated/floor/plating) - playsound(S, 'sound/items/Deconstruct.ogg', 50, 1) - chassis.spark_system.start() - chassis.use_power(energy_drain*2) - else if(istype(target, /turf/simulated/floor)) - var/turf/simulated/floor/F = target - occupant_message("Building Wall...") - set_ready_state(0) - if(do_after_cooldown(target)) - if(disabled) return - F.ChangeTurf(/turf/simulated/wall) - playsound(F, 'sound/items/Deconstruct.ogg', 50, 1) - chassis.spark_system.start() - chassis.use_power(energy_drain*2) - if(2) - if(istype(target, /turf/simulated/floor)) - occupant_message("Building Airlock...") - set_ready_state(0) - if(do_after_cooldown(target)) - if(disabled) return - chassis.spark_system.start() - var/obj/machinery/door/airlock/T = new /obj/machinery/door/airlock(target) - T.autoclose = 1 - playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) - playsound(target, 'sound/effects/sparks2.ogg', 50, 1) - chassis.use_power(energy_drain*2) - return - - -/obj/item/mecha_parts/mecha_equipment/tool/rcd/Topic(href,href_list) - ..() - if(href_list["mode"]) - mode = text2num(href_list["mode"]) - switch(mode) - if(0) - occupant_message("Switched RCD to Deconstruct.") - if(1) - occupant_message("Switched RCD to Construct.") - if(2) - occupant_message("Switched RCD to Construct Airlock.") - return - -/obj/item/mecha_parts/mecha_equipment/tool/rcd/get_equip_info() - return "[..()] \[D|C|A\]" - - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer - name = "cable layer" - desc = "Equipment for engineering exosuits. Lays cable along the exosuit's path." - icon_state = "mecha_wire" - var/datum/event/event - var/turf/old_turf - var/obj/structure/cable/last_piece - var/obj/item/stack/cable_coil/cable - var/max_cable = 1000 - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/New() - cable = new(src) - cable.amount = 0 - ..() - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/can_attach(obj/mecha/working/M) - if(..()) - if(istype(M)) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/attach() - ..() - event = chassis.events.addEvent("onMove",src,"layCable") - return - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/detach() - chassis.events.clearEvent("onMove",event) - return ..() - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/destroy() - chassis.events.clearEvent("onMove",event) - return ..() - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/action(var/obj/item/stack/cable_coil/target) - if(!action_checks(target)) - return - var/result = load_cable(target) - var/message - if(isnull(result)) - message = "Unable to load [target] - no cable found." - else if(!result) - message = "Reel is full." - else - message = "[result] meters of cable successfully loaded." - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) - occupant_message(message) - return - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/Topic(href,href_list) - ..() - if(href_list["toggle"]) - set_ready_state(!equip_ready) - occupant_message("[src] [equip_ready?"dea":"a"]ctivated.") - log_message("[equip_ready?"Dea":"A"]ctivated.") - return - if(href_list["cut"]) - if(cable && cable.amount) - var/m = round(input(chassis.occupant,"Please specify the length of cable to cut","Cut cable",min(cable.amount,30)) as num, 1) - m = min(m, cable.amount) - if(m) - use_cable(m) - var/obj/item/stack/cable_coil/CC = new (get_turf(chassis)) - CC.amount = m - else - occupant_message("There's no more cable on the reel.") - return - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/get_equip_info() - var/output = ..() - if(output) - return "[output] \[Cable: [cable ? cable.amount : 0] m\][(cable && cable.amount) ? "- [!equip_ready?"Dea":"A"]ctivate|Cut" : null]" - return - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/load_cable(var/obj/item/stack/cable_coil/CC) - if(istype(CC) && CC.amount) - var/cur_amount = cable? cable.amount : 0 - var/to_load = max(max_cable - cur_amount,0) - if(to_load) - to_load = min(CC.amount, to_load) - if(!cable) - cable = new(src) - cable.amount = 0 - cable.amount += to_load - CC.use(to_load) - return to_load - else - return 0 - return - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/use_cable(amount) - if(!cable || cable.amount<1) - set_ready_state(1) - occupant_message("Cable depleted, [src] deactivated.") - log_message("Cable depleted, [src] deactivated.") - return - if(cable.amount < amount) - occupant_message("No enough cable to finish the task.") - return - cable.use(amount) - update_equip_info() - return 1 - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/reset() - last_piece = null - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/dismantleFloor(var/turf/new_turf) - if(istype(new_turf, /turf/simulated/floor)) - var/turf/simulated/floor/T = new_turf - if(!istype(T, /turf/simulated/floor/plating)) - if(!T.broken && !T.burnt) - new T.floor_tile(T) - T.make_plating() - return !new_turf.intact - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/layCable(var/turf/new_turf) - if(equip_ready || !istype(new_turf) || !dismantleFloor(new_turf)) - return reset() - var/fdirn = turn(chassis.dir,180) - for(var/obj/structure/cable/LC in new_turf) // check to make sure there's not a cable there already - if(LC.d1 == fdirn || LC.d2 == fdirn) - return reset() - if(!use_cable(1)) - return reset() - var/obj/structure/cable/NC = new(new_turf) - NC.cableColor("red") - NC.d1 = 0 - NC.d2 = fdirn - NC.updateicon() - - var/datum/powernet/PN - if(last_piece && last_piece.d2 != chassis.dir) - last_piece.d1 = min(last_piece.d2, chassis.dir) - last_piece.d2 = max(last_piece.d2, chassis.dir) - last_piece.updateicon() - PN = last_piece.powernet - - if(!PN) - PN = new() - powernets += PN - NC.powernet = PN - PN.cables += NC - NC.mergeConnectedNetworks(NC.d2) - - //NC.mergeConnectedNetworksOnTurf() - last_piece = NC - return 1 - - -/obj/item/mecha_parts/mecha_equipment/teleporter - name = "mounted teleporter" - desc = "An exosuit module that allows exosuits to teleport to any position in view." - icon_state = "mecha_teleport" - origin_tech = "bluespace=10" - equip_cooldown = 150 - energy_drain = 1000 - range = RANGED - -/obj/item/mecha_parts/mecha_equipment/teleporter/action(atom/target) - if(!action_checks(target) || src.loc.z == ZLEVEL_CENTCOM) return - var/turf/T = get_turf(target) - if(T) - set_ready_state(0) - chassis.use_power(energy_drain) - do_teleport(chassis, T, 4) - do_after_cooldown() - return - - -/obj/item/mecha_parts/mecha_equipment/wormhole_generator - name = "mounted wormhole generator" - desc = "An exosuit module that allows generating of small quasi-stable wormholes." - icon_state = "mecha_wholegen" - origin_tech = "bluespace=3" - equip_cooldown = 50 - energy_drain = 300 - range = RANGED - - -/obj/item/mecha_parts/mecha_equipment/wormhole_generator/action(atom/target) - if(!action_checks(target) || src.loc.z == ZLEVEL_CENTCOM) return - var/list/theareas = list() - for(var/area/AR in orange(100, chassis)) - if(AR in theareas) continue - theareas += AR - if(!theareas.len) - return - var/area/thearea = pick(theareas) - var/list/L = list() - var/turf/pos = get_turf(src) - for(var/turf/T in get_area_turfs(thearea.type)) - if(!T.density && pos.z == T.z) - var/clear = 1 - for(var/obj/O in T) - if(O.density) - clear = 0 - break - if(clear) - L+=T - if(!L.len) - return - var/turf/target_turf = pick(L) - if(!target_turf) - return - chassis.use_power(energy_drain) - set_ready_state(0) - var/obj/effect/portal/P = new /obj/effect/portal(get_turf(target)) - P.target = target_turf - P.creator = null - P.icon = 'icons/obj/objects.dmi' - P.icon_state = "anom" - P.name = "wormhole" - var/turf/T = get_turf(target) - message_admins("[key_name_admin(chassis.occupant, chassis.occupant.client)](?) (FLW) used a Wormhole Generator in ([T.x],[T.y],[T.z] - JMP)",0,1) - log_game("[key_name(chassis.occupant)] used a Wormhole Generator in ([T.x],[T.y],[T.z])") - do_after_cooldown() - src = null - spawn(rand(150,300)) - qdel(P) - return - -/obj/item/mecha_parts/mecha_equipment/gravcatapult - name = "mounted gravitational catapult" - desc = "An exosuit mounted Gravitational Catapult." - icon_state = "mecha_teleport" - origin_tech = "bluespace=2;magnets=3" - equip_cooldown = 10 - energy_drain = 100 - range = MELEE|RANGED - var/atom/movable/locked - var/mode = 1 //1 - gravsling 2 - gravpush - - -/obj/item/mecha_parts/mecha_equipment/gravcatapult/action(atom/movable/target) - switch(mode) - if(1) - if(!action_checks(target) && !locked) return - if(!locked) - if(!istype(target) || target.anchored) - occupant_message("Unable to lock on [target]") - return - locked = target - occupant_message("Locked on [target]") - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) - return - else if(target!=locked) - if(locked in view(chassis)) - locked.throw_at(target, 14, 1.5) - locked = null - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) - set_ready_state(0) - chassis.use_power(energy_drain) - do_after_cooldown() - else - locked = null - occupant_message("Lock on [locked] disengaged.") - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) - if(2) - if(!action_checks(target)) return - var/list/atoms = list() - if(isturf(target)) - atoms = range(target,3) - else - atoms = orange(target,3) - for(var/atom/movable/A in atoms) - if(A.anchored) continue - spawn(0) - var/iter = 5-get_dist(A,target) - for(var/i=0 to iter) - step_away(A,target) - sleep(2) - set_ready_state(0) - chassis.use_power(energy_drain) - var/turf/T = get_turf(target) - log_game("[chassis.occupant.ckey]([chassis.occupant]) used a Gravitational Catapult in ([T.x],[T.y],[T.z])") - do_after_cooldown() - return - -/obj/item/mecha_parts/mecha_equipment/gravcatapult/get_equip_info() - return "[..()] [mode==1?"([locked||"Nothing"])":null] \[S|P\]" - -/obj/item/mecha_parts/mecha_equipment/gravcatapult/Topic(href, href_list) - ..() - if(href_list["mode"]) - mode = text2num(href_list["mode"]) - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) - return - - -/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster //what is that noise? A BAWWW from TK mutants. - name = "armor booster module (Close Combat Weaponry)" - desc = "Boosts exosuit armor against armed melee attacks. Requires energy to operate." - icon_state = "mecha_abooster_ccw" - origin_tech = "materials=3" - equip_cooldown = 10 - energy_drain = 50 - range = 0 - var/deflect_coeff = 1.15 - var/damage_coeff = 0.8 - -/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/can_attach(obj/mecha/M as obj) - if(..()) - if(!istype(M, /obj/mecha/combat/honker)) - if(!M.proc_res["dynattackby"]) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/attach(obj/mecha/M as obj) - ..() - chassis.proc_res["dynattackby"] = src - return - -/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/detach() - chassis.proc_res["dynattackby"] = null - ..() - return - -/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/get_equip_info() - if(!chassis) return - return "* [src.name]" - -/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/proc/dynattackby(obj/item/weapon/W as obj, mob/user as mob) - if(!action_checks(user)) - return chassis.dynattackby(W,user) - chassis.log_message("Attacked by [W]. Attacker - [user]") - if(prob(chassis.deflect_chance*deflect_coeff)) - user << "The [W] bounces off [chassis] armor." - chassis.log_append_to_last("Armor saved.") - else - chassis.occupant_message("[user] hits [chassis] with [W].") - user.visible_message("[user] hits [chassis] with [W].", "You hit [src] with [W].") - chassis.take_damage(round(W.force*damage_coeff),W.damtype) - chassis.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - set_ready_state(0) - chassis.use_power(energy_drain) - do_after_cooldown() - return - - -/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster - name = "armor booster module (Ranged Weaponry)" - desc = "Boosts exosuit armor against ranged attacks. Completely blocks taser shots. Requires energy to operate." - icon_state = "mecha_abooster_proj" - origin_tech = "materials=4" - equip_cooldown = 10 - energy_drain = 50 - range = 0 - var/deflect_coeff = 1.15 - var/damage_coeff = 0.8 - -/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/can_attach(obj/mecha/M as obj) - if(..()) - if(!istype(M, /obj/mecha/combat/honker)) - if(!M.proc_res["dynbulletdamage"] && !M.proc_res["dynhitby"]) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/attach(obj/mecha/M as obj) - ..() - chassis.proc_res["dynbulletdamage"] = src - chassis.proc_res["dynhitby"] = src - return - -/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/detach() - chassis.proc_res["dynbulletdamage"] = null - chassis.proc_res["dynhitby"] = null - ..() - return - -/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/get_equip_info() - if(!chassis) return - return "* [src.name]" - -/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/proc/dynbulletdamage(var/obj/item/projectile/Proj) - if(!action_checks(src)) - return chassis.dynbulletdamage(Proj) - if(prob(chassis.deflect_chance*deflect_coeff)) - chassis.visible_message("The [chassis.name] armor deflects the projectile") - chassis.log_append_to_last("Armor saved.") - else - chassis.take_damage(round(Proj.damage*src.damage_coeff),Proj.flag) - chassis.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - Proj.on_hit(chassis) - set_ready_state(0) - chassis.use_power(energy_drain) - do_after_cooldown() - return - -/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/proc/dynhitby(atom/movable/A) - if(!action_checks(A)) - return chassis.dynhitby(A) - if(prob(chassis.deflect_chance*deflect_coeff) || istype(A, /mob/living) || istype(A, /obj/item/mecha_parts/mecha_tracking)) - chassis.visible_message("The [A] bounces off the [chassis] armor") - chassis.log_append_to_last("Armor saved.") - if(istype(A, /mob/living)) - var/mob/living/M = A - M.take_organ_damage(10) - else if(istype(A, /obj)) - var/obj/O = A - if(O.throwforce) - chassis.take_damage(round(O.throwforce*damage_coeff)) - chassis.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - set_ready_state(0) - chassis.use_power(energy_drain) - do_after_cooldown() - return - - -/obj/item/mecha_parts/mecha_equipment/repair_droid - name = "exosuit repair droid" - desc = "An automated repair droid for exosuits. Scans for damage and repairs it. Can fix almost all types of external or internal damage." - icon_state = "repair_droid" - origin_tech = "magnets=3;programming=3" - equip_cooldown = 20 - energy_drain = 100 - range = 0 - var/health_boost = 2 - var/datum/global_iterator/pr_repair_droid - var/icon/droid_overlay - var/list/repairable_damage = list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH) - -/obj/item/mecha_parts/mecha_equipment/repair_droid/New() - ..() - pr_repair_droid = new /datum/global_iterator/mecha_repair_droid(list(src),0) - pr_repair_droid.set_delay(equip_cooldown) - return - -/obj/item/mecha_parts/mecha_equipment/repair_droid/Destroy() - qdel(pr_repair_droid) - pr_repair_droid = null - ..() - -/obj/item/mecha_parts/mecha_equipment/repair_droid/attach(obj/mecha/M as obj) - ..() - droid_overlay = new(src.icon, icon_state = "repair_droid") - M.overlays += droid_overlay - return - -/obj/item/mecha_parts/mecha_equipment/repair_droid/destroy() - chassis.overlays -= droid_overlay - ..() - return - -/obj/item/mecha_parts/mecha_equipment/repair_droid/detach() - chassis.overlays -= droid_overlay - pr_repair_droid.stop() - ..() - return - -/obj/item/mecha_parts/mecha_equipment/repair_droid/get_equip_info() - if(!chassis) return - return "* [src.name] - [pr_repair_droid.active()?"Dea":"A"]ctivate" - - -/obj/item/mecha_parts/mecha_equipment/repair_droid/Topic(href, href_list) - ..() - if(href_list["toggle_repairs"]) - chassis.overlays -= droid_overlay - if(pr_repair_droid.toggle()) - droid_overlay = new(src.icon, icon_state = "repair_droid_a") - log_message("Activated.") - else - droid_overlay = new(src.icon, icon_state = "repair_droid") - log_message("Deactivated.") - set_ready_state(1) - chassis.overlays += droid_overlay - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) - return - - -/datum/global_iterator/mecha_repair_droid - -/datum/global_iterator/mecha_repair_droid/process(var/obj/item/mecha_parts/mecha_equipment/repair_droid/RD as obj) - if(!RD.chassis) - stop() - RD.set_ready_state(1) - return - var/health_boost = RD.health_boost - var/repaired = 0 - if(RD.chassis.hasInternalDamage(MECHA_INT_SHORT_CIRCUIT)) - health_boost *= -2 - else if(RD.chassis.hasInternalDamage() && prob(15)) - for(var/int_dam_flag in RD.repairable_damage) - if(RD.chassis.hasInternalDamage(int_dam_flag)) - RD.chassis.clearInternalDamage(int_dam_flag) - repaired = 1 - break - if(health_boost<0 || RD.chassis.health < initial(RD.chassis.health)) - RD.chassis.health += min(health_boost, initial(RD.chassis.health)-RD.chassis.health) - repaired = 1 - if(repaired) - if(RD.chassis.use_power(RD.energy_drain)) - RD.set_ready_state(0) - else - stop() - RD.set_ready_state(1) - return - else - RD.set_ready_state(1) - return - - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay - name = "exosuit energy relay" - desc = "An exosuit module that wirelessly drains energy from any available power channel in area. The performance index is quite low." - icon_state = "tesla" - origin_tech = "magnets=4;powerstorage=3" - equip_cooldown = 10 - energy_drain = 0 - range = 0 - var/datum/global_iterator/pr_energy_relay - var/coeff = 100 - var/list/use_channels = list(EQUIP,ENVIRON,LIGHT) - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/New() - ..() - pr_energy_relay = new /datum/global_iterator/mecha_energy_relay(list(src),0) - pr_energy_relay.set_delay(equip_cooldown) - return - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/Destroy() - qdel(pr_energy_relay) - pr_energy_relay = null - ..() - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/detach() - pr_energy_relay.stop() -// chassis.proc_res["dynusepower"] = null - chassis.proc_res["dyngetcharge"] = null - ..() - return - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/attach(obj/mecha/M) - ..() - chassis.proc_res["dyngetcharge"] = src -// chassis.proc_res["dynusepower"] = src - return - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/can_attach(obj/mecha/M) - if(..()) - if(!M.proc_res["dyngetcharge"])// && !M.proc_res["dynusepower"]) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/proc/dyngetcharge() - if(equip_ready) //disabled - return chassis.dyngetcharge() - var/area/A = get_area(chassis) - var/pow_chan = get_power_channel(A) - var/charge = 0 - if(pow_chan) - charge = 1000 //making magic - else - return chassis.dyngetcharge() - return charge - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/proc/get_power_channel(var/area/A) - var/pow_chan - if(A) - for(var/c in use_channels) - if(A.master && A.master.powered(c)) - pow_chan = c - break - return pow_chan - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/Topic(href, href_list) - ..() - if(href_list["toggle_relay"]) - if(pr_energy_relay.toggle()) - set_ready_state(0) - log_message("Activated.") - else - set_ready_state(1) - log_message("Deactivated.") - return - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/get_equip_info() - if(!chassis) return - return "* [src.name] - [pr_energy_relay.active()?"Dea":"A"]ctivate" - -/*/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/proc/dynusepower(amount) - if(!equip_ready) //enabled - var/area/A = get_area(chassis) - var/pow_chan = get_power_channel(A) - if(pow_chan) - A.master.use_power(amount*coeff, pow_chan) - return 1 - return chassis.dynusepower(amount)*/ - -/datum/global_iterator/mecha_energy_relay - -/datum/global_iterator/mecha_energy_relay/process(var/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/ER) - if(!ER.chassis || ER.chassis.hasInternalDamage(MECHA_INT_SHORT_CIRCUIT)) - stop() - ER.set_ready_state(1) - return - var/cur_charge = ER.chassis.get_charge() - if(isnull(cur_charge) || !ER.chassis.cell) - stop() - ER.set_ready_state(1) - ER.occupant_message("No powercell detected.") - return - if(cur_charge3\] - [pr_mech_generator.active()?"Dea":"A"]ctivate" - return - -/obj/item/mecha_parts/mecha_equipment/generator/action(target) - if(chassis) - var/result = load_fuel(target) - var/message - if(isnull(result)) - message = "[fuel] traces in target minimal! [target] cannot be used as fuel." - else if(!result) - message = "Unit is full." - else - message = "[result] unit\s of [fuel] successfully loaded." - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) - occupant_message(message) - return - -/obj/item/mecha_parts/mecha_equipment/generator/proc/load_fuel(var/obj/item/stack/sheet/P) - if(P.type == fuel.type && P.amount) - var/to_load = max(max_fuel - fuel.amount*fuel.perunit,0) - if(to_load) - var/units = min(max(round(to_load / P.perunit),1),P.amount) - if(units) - fuel.amount += units - P.use(units) - return units - else - return 0 - return - -/obj/item/mecha_parts/mecha_equipment/generator/attackby(weapon,mob/user, params) - var/result = load_fuel(weapon) - if(isnull(result)) - user.visible_message("[user] tries to shove [weapon] into [src]. What a dumb-ass.","[fuel] traces minimal. [weapon] cannot be used as fuel.") - else if(!result) - user << "Unit is full." - else - user.visible_message("[user] loads [src] with [fuel].","[result] unit\s of [fuel] successfully loaded.") - return - -/obj/item/mecha_parts/mecha_equipment/generator/critfail() - ..() - var/turf/simulated/T = get_turf(src) - if(!T) - return - var/datum/gas_mixture/GM = new - if(prob(10)) - GM.toxins += 100 - GM.temperature = 1500+T0C //should be enough to start a fire - T.visible_message("The [src] suddenly disgorges a cloud of heated plasma.") - destroy() - else - GM.toxins += 5 - GM.temperature = istype(T) ? T.air.return_temperature() : T20C - T.visible_message("The [src] suddenly disgorges a cloud of plasma.") - T.assume_air(GM) - return - -/datum/global_iterator/mecha_generator - -/datum/global_iterator/mecha_generator/process(var/obj/item/mecha_parts/mecha_equipment/generator/EG) - if(!EG.chassis) - stop() - EG.set_ready_state(1) - return 0 - if(EG.fuel.amount<=0) - stop() - EG.log_message("Deactivated - no fuel.") - EG.set_ready_state(1) - return 0 - if(anyprob(EG.reliability)) - EG.critfail() - stop() - return 0 - var/cur_charge = EG.chassis.get_charge() - if(isnull(cur_charge)) - EG.set_ready_state(1) - EG.occupant_message("No powercell detected.") - EG.log_message("Deactivated.") - stop() - return 0 - var/use_fuel = EG.fuel_per_cycle_idle - if(cur_charge[target] successfully loaded.") - chassis.log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]") - else - chassis.occupant_message("You must hold still while handling objects!") - O.anchored = initial(O.anchored) - else - chassis.occupant_message("Not enough room in cargo compartment!") - else - chassis.occupant_message("[target] is firmly secured!") - - else if(istype(target,/mob/living)) - var/mob/living/M = target - if(M.stat>1) return - if(chassis.occupant.a_intent == "harm") - target.visible_message("[chassis] destroys [target] in an unholy fury.", \ - "[chassis] destroys [target] in an unholy fury.") - if(chassis.occupant.a_intent == "disarm") - target.visible_message("[chassis] rips [target]'s arms off.", \ - "[chassis] rips [target]'s arms off.") - else - step_away(M,chassis) - target.visible_message("[chassis] tosses [target] like a piece of paper.") - set_ready_state(0) - chassis.use_power(energy_drain) - do_after_cooldown() - return 1 diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm new file mode 100644 index 00000000000..515fe52c2a2 --- /dev/null +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -0,0 +1,424 @@ + +//Hydraulic clamp, Kill clamp, Extinguisher, RCD, Cable layer. + + +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp + name = "hydraulic clamp" + desc = "Equipment for engineering exosuits. Lifts objects and loads them into cargo." + icon_state = "mecha_clamp" + equip_cooldown = 15 + energy_drain = 10 + var/dam_force = 20 + var/obj/mecha/working/ripley/cargo_holder + +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/can_attach(obj/mecha/working/ripley/M as obj) + if(..()) + if(istype(M)) + return 1 + return 0 + +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/attach(obj/mecha/M as obj) + ..() + cargo_holder = M + return + +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/detach(atom/moveto = null) + ..() + cargo_holder = null + +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/action(atom/target) + if(!action_checks(target)) + return + if(!cargo_holder) + return + if(istype(target,/obj)) + var/obj/O = target + if(!O.anchored) + if(cargo_holder.cargo.len < cargo_holder.cargo_capacity) + chassis.visible_message("[chassis] lifts [target] and starts to load it into cargo compartment.") + O.anchored = 1 + if(do_after_cooldown(target)) + cargo_holder.cargo += O + O.loc = chassis + O.anchored = 0 + occupant_message("[target] successfully loaded.") + log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]") + else + O.anchored = initial(O.anchored) + else + occupant_message("Not enough room in cargo compartment!") + else + occupant_message("[target] is firmly secured!") + + else if(istype(target,/mob/living)) + var/mob/living/M = target + if(M.stat == DEAD) return + if(chassis.occupant.a_intent == "harm") + M.take_overall_damage(dam_force) + if(!M) + return + M.adjustOxyLoss(round(dam_force/2)) + M.updatehealth() + target.visible_message("[chassis] squeezes [target].", \ + "[chassis] squeezes [target].",\ + "You hear something crack.") + add_logs(chassis.occupant, M, "attacked", object="[name]", addition="(INTENT: [uppertext(chassis.occupant.a_intent)]) (DAMTYE: [uppertext(damtype)])") + else + step_away(M,chassis) + occupant_message("You push [target] out of the way.") + chassis.visible_message("[chassis] pushes [target] out of the way.") + return 1 + + + +//This is pretty much just for the death-ripley +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill + name = "\improper KILL CLAMP" + desc = "They won't know what clamped them!" + energy_drain = 0 + +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill/action(atom/target) + if(!action_checks(target)) return + if(!cargo_holder) return + if(istype(target,/obj)) + var/obj/O = target + if(!O.anchored) + if(cargo_holder.cargo.len < cargo_holder.cargo_capacity) + chassis.visible_message("[chassis] lifts [target] and starts to load it into cargo compartment.") + O.anchored = 1 + if(do_after_cooldown(target)) + cargo_holder.cargo += O + O.loc = chassis + O.anchored = 0 + occupant_message("[target] successfully loaded.") + log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]") + else + O.anchored = initial(O.anchored) + else + occupant_message("Not enough room in cargo compartment!") + else + occupant_message("[target] is firmly secured!") + + else if(istype(target,/mob/living)) + var/mob/living/M = target + if(M.stat == DEAD) return + if(chassis.occupant.a_intent == "harm") + target.visible_message("[chassis] destroys [target] in an unholy fury.", \ + "[chassis] destroys [target] in an unholy fury.") + if(chassis.occupant.a_intent == "disarm") + target.visible_message("[chassis] rips [target]'s arms off.", \ + "[chassis] rips [target]'s arms off.") + else + step_away(M,chassis) + target.visible_message("[chassis] tosses [target] like a piece of paper.") + return 1 + + + +/obj/item/mecha_parts/mecha_equipment/extinguisher + name = "exosuit extinguisher" + desc = "Equipment for engineering exosuits. A rapid-firing high capacity fire extinguisher." + icon_state = "mecha_exting" + equip_cooldown = 5 + energy_drain = 0 + range = MELEE|RANGED + +/obj/item/mecha_parts/mecha_equipment/extinguisher/New() + create_reagents(1000) + reagents.add_reagent("water", 1000) + ..() + return + +/obj/item/mecha_parts/mecha_equipment/extinguisher/action(atom/target) //copypasted from extinguisher. TODO: Rewrite from scratch. + if(!action_checks(target) || get_dist(chassis, target)>3) + return + + if(istype(target, /obj/structure/reagent_dispensers/watertank) && get_dist(chassis,target) <= 1) + var/obj/structure/reagent_dispensers/watertank/WT = target + WT.reagents.trans_to(src, 1000) + occupant_message("Extinguisher refilled.") + playsound(chassis, 'sound/effects/refill.ogg', 50, 1, -6) + else + if(reagents.total_volume > 0) + playsound(chassis, 'sound/effects/extinguish.ogg', 75, 1, -3) + var/direction = get_dir(chassis,target) + var/turf/T = get_turf(target) + var/turf/T1 = get_step(T,turn(direction, 90)) + var/turf/T2 = get_step(T,turn(direction, -90)) + + var/list/the_targets = list(T,T1,T2) + spawn(0) + for(var/a=0, a<5, a++) + var/obj/effect/effect/water/W = PoolOrNew(/obj/effect/effect/water, get_turf(chassis)) + if(!W) + return + var/turf/my_target = pick(the_targets) + var/datum/reagents/R = new/datum/reagents(5) + W.reagents = R + R.my_atom = W + reagents.trans_to(W,1) + for(var/b=0, b<4, b++) + if(!W) + return + step_towards(W,my_target) + if(!W) + return + var/turf/W_turf = get_turf(W) + W.reagents.reaction(W_turf) + for(var/atom/atm in W_turf) + W.reagents.reaction(atm) + if(W.loc == my_target) + break + sleep(2) + return 1 + +/obj/item/mecha_parts/mecha_equipment/extinguisher/get_equip_info() + return "[..()] \[[src.reagents.total_volume]\]" + +/obj/item/mecha_parts/mecha_equipment/extinguisher/on_reagent_change() + return + +/obj/item/mecha_parts/mecha_equipment/extinguisher/can_attach(obj/mecha/working/M as obj) + if(..()) + if(istype(M)) + return 1 + return 0 + + + +/obj/item/mecha_parts/mecha_equipment/rcd + name = "mounted RCD" + desc = "An exosuit-mounted Rapid Construction Device." + icon_state = "mecha_rcd" + origin_tech = "materials=4;bluespace=3;magnets=4;powerstorage=4" + equip_cooldown = 10 + energy_drain = 250 + range = MELEE|RANGED + var/mode = 0 //0 - deconstruct, 1 - wall or floor, 2 - airlock. + var/disabled = 0 //malf + +/obj/item/mecha_parts/mecha_equipment/rcd/action(atom/target) + if(istype(target,/area/shuttle)||istype(target, /turf/space/transit))//>implying these are ever made -Sieve + disabled = 1 + else + disabled = 0 + if(!istype(target, /turf) && !istype(target, /obj/machinery/door/airlock)) + target = get_turf(target) + if(!action_checks(target) || disabled || get_dist(chassis, target)>3) + return + playsound(chassis, 'sound/machines/click.ogg', 50, 1) + + switch(mode) + if(0) + if (istype(target, /turf/simulated/wall)) + var/turf/simulated/wall/W = target + occupant_message("Deconstructing [W]...") + if(do_after_cooldown(W)) + chassis.spark_system.start() + W.ChangeTurf(/turf/simulated/floor/plating) + playsound(W, 'sound/items/Deconstruct.ogg', 50, 1) + else if (istype(target, /turf/simulated/floor)) + var/turf/simulated/floor/F = target + occupant_message("Deconstructing [F]...") + if(do_after_cooldown(target)) + chassis.spark_system.start() + F.ChangeTurf(F.baseturf) + playsound(F, 'sound/items/Deconstruct.ogg', 50, 1) + else if (istype(target, /obj/machinery/door/airlock)) + occupant_message("Deconstructing [target]...") + if(do_after_cooldown(target)) + chassis.spark_system.start() + qdel(target) + playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) + if(1) + if(istype(target, /turf/space)) + var/turf/space/S = target + occupant_message("Building Floor...") + if(do_after_cooldown(S)) + S.ChangeTurf(/turf/simulated/floor/plating) + playsound(S, 'sound/items/Deconstruct.ogg', 50, 1) + chassis.spark_system.start() + else if(istype(target, /turf/simulated/floor)) + var/turf/simulated/floor/F = target + occupant_message("Building Wall...") + if(do_after_cooldown(F)) + if(disabled) return + F.ChangeTurf(/turf/simulated/wall) + playsound(F, 'sound/items/Deconstruct.ogg', 50, 1) + chassis.spark_system.start() + if(2) + if(istype(target, /turf/simulated/floor)) + occupant_message("Building Airlock...") + if(do_after_cooldown(target)) + chassis.spark_system.start() + var/obj/machinery/door/airlock/T = new /obj/machinery/door/airlock(target) + T.autoclose = 1 + playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(target, 'sound/effects/sparks2.ogg', 50, 1) + + + +/obj/item/mecha_parts/mecha_equipment/rcd/do_after_cooldown(var/atom/target) + . = ..() + if(disabled) + return 0 + +/obj/item/mecha_parts/mecha_equipment/rcd/Topic(href,href_list) + ..() + if(href_list["mode"]) + mode = text2num(href_list["mode"]) + switch(mode) + if(0) + occupant_message("Switched RCD to Deconstruct.") + energy_drain = initial(energy_drain) + if(1) + occupant_message("Switched RCD to Construct.") + energy_drain = 2*initial(energy_drain) + if(2) + occupant_message("Switched RCD to Construct Airlock.") + energy_drain = 2*initial(energy_drain) + return + +/obj/item/mecha_parts/mecha_equipment/rcd/get_equip_info() + return "[..()] \[D|C|A\]" + + + + +/obj/item/mecha_parts/mecha_equipment/cable_layer + name = "cable layer" + desc = "Equipment for engineering exosuits. Lays cable along the exosuit's path." + icon_state = "mecha_wire" + var/datum/event/event + var/turf/old_turf + var/obj/structure/cable/last_piece + var/obj/item/stack/cable_coil/cable + var/max_cable = 1000 + +/obj/item/mecha_parts/mecha_equipment/cable_layer/New() + cable = new(src) + cable.amount = 0 + ..() + +/obj/item/mecha_parts/mecha_equipment/cable_layer/can_attach(obj/mecha/working/M) + if(..()) + if(istype(M)) + return 1 + return 0 + +/obj/item/mecha_parts/mecha_equipment/cable_layer/attach() + ..() + event = chassis.events.addEvent("onMove",src,"layCable") + return + +/obj/item/mecha_parts/mecha_equipment/cable_layer/detach() + chassis.events.clearEvent("onMove",event) + return ..() + +/obj/item/mecha_parts/mecha_equipment/cable_layer/Destroy() + chassis.events.clearEvent("onMove",event) + ..() + +/obj/item/mecha_parts/mecha_equipment/cable_layer/action(var/obj/item/stack/cable_coil/target) + if(!action_checks(target)) + return + if(istype(target) && target.amount) + var/cur_amount = cable? cable.amount : 0 + var/to_load = max(max_cable - cur_amount,0) + if(to_load) + to_load = min(target.amount, to_load) + if(!cable) + cable = new(src) + cable.amount = 0 + cable.amount += to_load + target.use(to_load) + occupant_message("[to_load] meters of cable successfully loaded.") + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + else + occupant_message("Reel is full.") + else + occupant_message("Unable to load [target] - no cable found.") + + +/obj/item/mecha_parts/mecha_equipment/cable_layer/Topic(href,href_list) + ..() + if(href_list["toggle"]) + set_ready_state(!equip_ready) + occupant_message("[src] [equip_ready?"dea":"a"]ctivated.") + log_message("[equip_ready?"Dea":"A"]ctivated.") + return + if(href_list["cut"]) + if(cable && cable.amount) + var/m = round(input(chassis.occupant,"Please specify the length of cable to cut","Cut cable",min(cable.amount,30)) as num, 1) + m = min(m, cable.amount) + if(m) + use_cable(m) + var/obj/item/stack/cable_coil/CC = new (get_turf(chassis)) + CC.amount = m + else + occupant_message("There's no more cable on the reel.") + return + +/obj/item/mecha_parts/mecha_equipment/cable_layer/get_equip_info() + var/output = ..() + if(output) + return "[output] \[Cable: [cable ? cable.amount : 0] m\][(cable && cable.amount) ? "- [!equip_ready?"Dea":"A"]ctivate|Cut" : null]" + return + +/obj/item/mecha_parts/mecha_equipment/cable_layer/proc/use_cable(amount) + if(!cable || cable.amount<1) + set_ready_state(1) + occupant_message("Cable depleted, [src] deactivated.") + log_message("Cable depleted, [src] deactivated.") + return + if(cable.amount < amount) + occupant_message("No enough cable to finish the task.") + return + cable.use(amount) + update_equip_info() + return 1 + +/obj/item/mecha_parts/mecha_equipment/cable_layer/proc/reset() + last_piece = null + +/obj/item/mecha_parts/mecha_equipment/cable_layer/proc/dismantleFloor(var/turf/new_turf) + if(istype(new_turf, /turf/simulated/floor)) + var/turf/simulated/floor/T = new_turf + if(!istype(T, /turf/simulated/floor/plating)) + if(!T.broken && !T.burnt) + new T.floor_tile(T) + T.make_plating() + return !new_turf.intact + +/obj/item/mecha_parts/mecha_equipment/cable_layer/proc/layCable(var/turf/new_turf) + if(equip_ready || !istype(new_turf) || !dismantleFloor(new_turf)) + return reset() + var/fdirn = turn(chassis.dir,180) + for(var/obj/structure/cable/LC in new_turf) // check to make sure there's not a cable there already + if(LC.d1 == fdirn || LC.d2 == fdirn) + return reset() + if(!use_cable(1)) + return reset() + var/obj/structure/cable/NC = new(new_turf) + NC.cableColor("red") + NC.d1 = 0 + NC.d2 = fdirn + NC.updateicon() + + var/datum/powernet/PN + if(last_piece && last_piece.d2 != chassis.dir) + last_piece.d1 = min(last_piece.d2, chassis.dir) + last_piece.d2 = max(last_piece.d2, chassis.dir) + last_piece.updateicon() + PN = last_piece.powernet + + if(!PN) + PN = new() + powernets += PN + NC.powernet = PN + PN.cables += NC + NC.mergeConnectedNetworks(NC.d2) + + //NC.mergeConnectedNetworksOnTurf() + last_piece = NC + return 1 diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 0414658025d..266a0061be6 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -20,7 +20,6 @@ /obj/item/mecha_parts/mecha_equipment/weapon/action(atom/target) if(!action_checks(target)) return 0 - set_ready_state(0) var/turf/curloc = get_turf(chassis) var/turf/targloc = get_turf(target) @@ -29,6 +28,10 @@ if (targloc == curloc) return 0 + set_ready_state(0) + chassis.can_move = 0 + spawn(shot_delay*projectiles_per_shot) + chassis.can_move = 1 for(var/i=1 to get_shot_amount()) var/obj/item/projectile/A = new projectile(curloc) A.firer = chassis.occupant @@ -49,9 +52,9 @@ sleep(shot_delay) chassis.log_message("Fired from [src.name], targeting [target].") - do_after_cooldown() return 1 + //Base energy weapon type /obj/item/mecha_parts/mecha_equipment/weapon/energy name = "general energy weapon" @@ -59,10 +62,11 @@ /obj/item/mecha_parts/mecha_equipment/weapon/energy/get_shot_amount() return min(round(chassis.cell.charge / energy_drain), projectiles_per_shot) -/obj/item/mecha_parts/mecha_equipment/weapon/energy/action(atom/target) - ..() - chassis.use_power(energy_drain * get_shot_amount()) - +/obj/item/mecha_parts/mecha_equipment/weapon/energy/start_cooldown() + set_ready_state(0) + chassis.use_power(energy_drain*get_shot_amount()) + sleep(equip_cooldown) + set_ready_state(1) /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser equip_cooldown = 8 @@ -112,9 +116,9 @@ projectile = /obj/item/projectile/plasma/adv/mech fire_sound = 'sound/weapons/Laser.ogg' -/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma/can_attach(obj/mecha/M as obj) - if(istype(M, /obj/mecha/working)) - if(M.equipment.len < M.max_equip) +/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma/can_attach(obj/mecha/working/M as obj) + if(..()) + if(istype(M)) return 1 return 0 @@ -158,8 +162,8 @@ return 0 /obj/item/mecha_parts/mecha_equipment/weapon/honker/action(target) - if(!action_checks(target)) return 0 - set_ready_state(0) + if(!action_checks(target)) + return playsound(chassis, 'sound/items/AirHorn.ogg', 100, 1) chassis.occupant_message("HONK") for(var/mob/living/carbon/M in ohearers(6, chassis)) @@ -177,24 +181,12 @@ M.Paralyse(4) else M.Jitter(500) - /* //else the mousetraps are useless - if(istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - if(isobj(H.shoes)) - var/thingy = H.shoes - H.unEquip(H.shoes) - walk_away(thingy,chassis,15,2) - spawn(20) - if(thingy) - walk(thingy,0) - */ - chassis.use_power(energy_drain) + log_message("Honked from [src.name]. HONK!") var/turf/T = get_turf(src) message_admins("[key_name_admin(chassis.occupant, chassis.occupant.client)](?) (FLW) used a Mecha Honker in ([T.x],[T.y],[T.z] - JMP)",0,1) log_game("[chassis.occupant.ckey]([chassis.occupant]) used a Mecha Honker in ([T.x],[T.y],[T.z])") - do_after_cooldown() - return + return 1 //Base ballistic weapon type @@ -212,8 +204,6 @@ return 0 if(projectiles <= 0) return 0 - if(!equip_ready) - return 0 return 1 /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/get_equip_info() @@ -238,8 +228,9 @@ /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/action(atom/target) if(..()) - src.projectiles -= get_shot_amount() + projectiles -= get_shot_amount() send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + return 1 /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine @@ -284,7 +275,27 @@ deviation = 0.3 shot_delay = 2 -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher + var/missile_speed = 2 + var/missile_range = 30 + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/action(target) + if(!action_checks(target)) + return + var/obj/O = new projectile(chassis.loc) + playsound(chassis, fire_sound, 50, 1) + log_message("Launched a [O.name] from [name], targeting [target].") + projectiles-- + proj_init(O) + spawn(0) + O.throw_at(target, missile_range, missile_speed, spin = 0) + return 1 + +//used for projectile initilisation (priming flashbang) and additional logging +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/proc/proj_init(var/obj/O) + return + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack name = "\improper SRM-8 missile rack" desc = "A weapon for combat exosuits. Shoots light explosive missiles." icon_state = "mecha_missilerack" @@ -293,24 +304,12 @@ projectiles = 8 projectile_energy_cost = 1000 equip_cooldown = 60 - var/missile_speed = 2 - var/missile_range = 30 -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/action(target) - if(!action_checks(target)) return - set_ready_state(0) - var/obj/item/missile/M = new projectile(chassis.loc) +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack/proj_init(var/obj/item/missile/M) M.primed = 1 - playsound(chassis, fire_sound, 50, 1) - M.throw_at(target, missile_range, missile_speed) - projectiles-- - log_message("Fired from [src.name], targeting [target].") var/turf/T = get_turf(src) message_admins("[key_name(chassis.occupant, chassis.occupant.client)](?) fired a [src] in ([T.x],[T.y],[T.z] - JMP)",0,1) log_game("[key_name(chassis.occupant)] fired a [src] ([T.x],[T.y],[T.z])") - do_after_cooldown() - return - /obj/item/missile icon = 'icons/obj/grenade.dmi' @@ -324,9 +323,8 @@ qdel(src) else ..() - return -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang name = "\improper SGL-6 grenade launcher" desc = "A weapon for combat exosuits. Launches primed flashbangs." icon_state = "mecha_grenadelnchr" @@ -338,24 +336,16 @@ equip_cooldown = 60 var/det_time = 20 -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/action(target) - if(!action_checks(target)) return - set_ready_state(0) - var/obj/item/weapon/grenade/flashbang/F = new projectile(chassis.loc) - playsound(chassis, fire_sound, 50, 1) - F.throw_at(target, missile_range, missile_speed) - projectiles-- - log_message("Fired from [src.name], targeting [target].") +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/proj_init(var/obj/item/weapon/grenade/flashbang/F) var/turf/T = get_turf(src) - message_admins("[key_name(chassis.occupant, chassis.occupant.client)](?) (FLW) fired a [src] in ([T.x],[T.y],[T.z] - JMP)",0,1) + message_admins("[key_name(chassis.occupant, chassis.occupant.client)](?) fired a [src] in ([T.x],[T.y],[T.z] - JMP)",0,1) log_game("[key_name(chassis.occupant)] fired a [src] ([T.x],[T.y],[T.z])") spawn(det_time) if(F) F.prime() - do_after_cooldown() - return -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang //Because I am a heartless bastard -Sieve //Heartless? for making the poor man's honkblast? - Kaze + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/clusterbang //Because I am a heartless bastard -Sieve //Heartless? for making the poor man's honkblast? - Kaze name = "\improper SOB-3 grenade launcher" desc = "A weapon for combat exosuits. Launches primed clusterbangs. You monster." projectiles = 3 @@ -363,7 +353,7 @@ projectile_energy_cost = 1600 //getting off cheap seeing as this is 3 times the flashbangs held in the grenade launcher. equip_cooldown = 90 -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar name = "banana mortar" desc = "Equipment for clown exosuits. Launches banana peels." icon_state = "mecha_bananamrtr" @@ -374,25 +364,13 @@ projectile_energy_cost = 100 equip_cooldown = 20 -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar/can_attach(obj/mecha/combat/honker/M as obj) +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar/can_attach(obj/mecha/combat/honker/M as obj) if(..()) if(istype(M)) return 1 return 0 -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar/action(target) - if(!action_checks(target)) return - set_ready_state(0) - var/obj/item/weapon/grown/bananapeel/B = new projectile(chassis.loc,60) - playsound(chassis, fire_sound, 60, 1) - B.throw_at(target, missile_range, missile_speed) - projectiles-- - log_message("Bananed from [src.name], targeting [target]. HONK!") - do_after_cooldown() - return - - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar name = "mousetrap mortar" desc = "Equipment for clown exosuits. Launches armed mousetraps." icon_state = "mecha_mousetrapmrtr" @@ -403,20 +381,12 @@ projectile_energy_cost = 100 equip_cooldown = 10 -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar/can_attach(obj/mecha/combat/honker/M as obj) +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar/can_attach(obj/mecha/combat/honker/M as obj) if(..()) if(istype(M)) return 1 return 0 -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar/action(target) - if(!action_checks(target)) return - set_ready_state(0) - var/obj/item/device/assembly/mousetrap/armed/M = new projectile(chassis.loc) +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar/proj_init(var/obj/item/device/assembly/mousetrap/armed/M) M.secured = 1 - playsound(chassis, fire_sound, 60, 1) - M.throw_at(target, missile_range, missile_speed) - projectiles-- - log_message("Launched a mouse-trap from [src.name], targeting [target]. HONK!") - do_after_cooldown() - return + diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 48f34a6faaf..35512a1429f 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -57,10 +57,6 @@ var/list/operation_req_access = list()//required access level for mecha operation var/list/internals_req_access = list(access_engine,access_robotics)//required access level to open cell compartment - var/datum/global_iterator/pr_int_temp_processor //normalizes internal air mixture temperature - var/datum/global_iterator/pr_give_air //moves air from tank to cabin - var/datum/global_iterator/pr_internal_damage //processes internal damage - var/wreckage var/list/equipment = new @@ -74,6 +70,12 @@ var/melee_cooldown = 10 var/melee_can_hit = 1 + var/datum/action/mecha/mech_eject/eject_action = new + var/datum/action/mecha/mech_toggle_internals/internals_action = new + var/datum/action/mecha/mech_cycle_equip/cycle_action = new + var/datum/action/mecha/mech_toggle_lights/lights_action = new + var/datum/action/mecha/mech_view_stats/stats_action = new + /obj/mecha/New() ..() @@ -81,14 +83,11 @@ icon_state += "-open" add_radio() add_cabin() - if(!add_airtank()) //we check this here in case mecha does not have an internal tank available by default - WIP - removeVerb(/obj/mecha/verb/connect_to_port) - removeVerb(/obj/mecha/verb/toggle_internal_tank) + add_airtank() spark_system.set_up(2, 0, src) spark_system.attach(src) add_cell() - add_iterators() - removeVerb(/obj/mecha/verb/disconnect_from_port) + SSobj.processing |= src log_message("[src.name] created.") mechas_list += src //global mech list return @@ -114,7 +113,7 @@ E.reliability = round(rand(E.reliability/3,E.reliability)) else E.detach(loc) - E.destroy() + qdel(E) if(cell) WR.crowbar_salvage += cell cell.forceMove(WR) @@ -125,22 +124,16 @@ else for(var/obj/item/mecha_parts/mecha_equipment/E in equipment) E.detach(loc) - E.destroy() + qdel(E) if(cell) qdel(cell) if(internal_tank) qdel(internal_tank) + SSobj.processing.Remove(src) equipment.Cut() cell = null internal_tank = null - - qdel(pr_int_temp_processor) - qdel(pr_give_air) - qdel(pr_internal_damage) qdel(spark_system) - pr_int_temp_processor = null - pr_give_air = null - pr_internal_damage = null spark_system = null mechas_list -= src //global mech list @@ -150,12 +143,6 @@ ////// Helpers ///////// //////////////////////// -/obj/mecha/proc/removeVerb(verb_path) - verbs -= verb_path - -/obj/mecha/proc/addVerb(verb_path) - verbs += verb_path - /obj/mecha/proc/add_airtank() internal_tank = new /obj/machinery/portable_atmospherics/canister/air(src) return internal_tank @@ -184,37 +171,16 @@ radio.icon_state = icon_state radio.subspace_transmission = 1 -/obj/mecha/proc/add_iterators() - pr_int_temp_processor = new /datum/global_iterator/mecha_preserve_temp(list(src)) - pr_give_air = new /datum/global_iterator/mecha_tank_give_air(list(src)) - pr_internal_damage = new /datum/global_iterator/mecha_internal_damage(list(src),0) - -/obj/mecha/proc/do_after(delay as num) - sleep(delay) - if(src) - return 1 - return 0 - -/obj/mecha/proc/enter_after(delay as num, var/mob/user as mob, var/numticks = 5) - var/delayfraction = delay/numticks - - var/turf/T = user.loc - - for(var/i = 0, i internal_tank.maximum_pressure && !(internal_damage & MECHA_INT_TANK_BREACH)) + setInternalDamage(MECHA_INT_TANK_BREACH) + var/datum/gas_mixture/int_tank_air = internal_tank.return_air() + if(int_tank_air && int_tank_air.return_volume()>0) //heat the air_contents + int_tank_air.temperature = min(6000+T0C, int_tank_air.temperature+rand(10,15)) + if(cabin_air && cabin_air.return_volume()>0) + cabin_air.temperature = min(6000+T0C, cabin_air.return_temperature()+rand(10,15)) + if(cabin_air.return_temperature() > max_temperature/2) + take_damage(4/round(max_temperature/cabin_air.return_temperature(),0.1),"fire") + + if(internal_damage & MECHA_INT_TEMP_CONTROL) + internal_temp_regulation = 0 + + if(internal_damage & MECHA_INT_TANK_BREACH) //remove some air from internal tank + if(internal_tank) + var/datum/gas_mixture/int_tank_air = internal_tank.return_air() + var/datum/gas_mixture/leaked_gas = int_tank_air.remove_ratio(0.10) + if(loc) + loc.assume_air(leaked_gas) + else + del(leaked_gas) + + if(internal_damage & MECHA_INT_SHORT_CIRCUIT) + if(get_charge()) + spark_system.start() + cell.charge -= min(20,cell.charge) + cell.maxcharge -= min(20,cell.maxcharge) + + if(internal_temp_regulation) + if(cabin_air && cabin_air.return_volume() > 0) + var/delta = cabin_air.temperature - T20C + cabin_air.temperature -= max(-10, min(10, round(delta/4,0.1))) + + if(internal_tank) + var/datum/gas_mixture/tank_air = internal_tank.return_air() + + var/release_pressure = internal_tank_valve + var/cabin_pressure = cabin_air.return_pressure() + var/pressure_delta = min(release_pressure - cabin_pressure, (tank_air.return_pressure() - cabin_pressure)/2) + var/transfer_moles = 0 + if(pressure_delta > 0) //cabin pressure lower than release pressure + if(tank_air.return_temperature() > 0) + transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION) + var/datum/gas_mixture/removed = tank_air.remove(transfer_moles) + cabin_air.merge(removed) + else if(pressure_delta < 0) //cabin pressure higher than release pressure + var/datum/gas_mixture/t_air = return_air() + pressure_delta = cabin_pressure - release_pressure + if(t_air) + pressure_delta = min(cabin_pressure - t_air.return_pressure(), pressure_delta) + if(pressure_delta > 0) //if location pressure is lower than cabin pressure + transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION) + var/datum/gas_mixture/removed = cabin_air.remove(transfer_moles) + if(t_air) + t_air.merge(removed) + else //just delete the cabin gas, we're in space or some shit + del(removed) + + if(occupant) + if(cell) + var/cellcharge = cell.charge/cell.maxcharge + switch(cellcharge) + if(0.75 to INFINITY) + occupant.clear_alert("charge") + if(0.5 to 0.75) + occupant.throw_alert("charge","lowcell",1) + if(0.25 to 0.5) + occupant.throw_alert("charge","lowcell",2) + if(0.01 to 0.25) + occupant.throw_alert("charge","lowcell",3) + else + occupant.throw_alert("charge","emptycell") + + var/integrity = health/initial(health)*100 + switch(integrity) + if(30 to 45) + occupant.throw_alert("mech damage", "low_mech_integrity", 1) + if(15 to 35) + occupant.throw_alert("mech damage", "low_mech_integrity", 2) + if(-INFINITY to 15) + occupant.throw_alert("mech damage", "low_mech_integrity", 3) + else + occupant.clear_alert("mech damage") + + if(occupant.loc != src) //something went wrong + occupant.clear_alert("charge") + occupant.clear_alert("mech damage") + RemoveActions(occupant, human_occupant=1) + occupant = null + + if(lights) + var/lights_energy_drain = 2 + use_power(lights_energy_drain) + + + + /obj/mecha/proc/drop_item()//Derpfix, but may be useful in future for engineering exosuits. return @@ -247,32 +321,11 @@ //////////////////////////// ///// Action processing //// //////////////////////////// -/* -/atom/DblClick(object,location,control,params) - var/mob/M = src.mob - if(M && M.in_contents_of(/obj/mecha)) - if(mech_click == world.time) return - mech_click = world.time - - if(!istype(object, /atom)) return - if(istype(object, /obj/screen)) - var/obj/screen/using = object - if(using.screen_loc == ui_acti || using.screen_loc == ui_iarrowleft || using.screen_loc == ui_iarrowright)//ignore all HUD objects save 'intent' and its arrows - return ..() - else - return - var/obj/mecha/Mech = M.loc - spawn() //this helps prevent clickspam fest. - if (Mech) - Mech.click_action(object,M) -// else -// return ..() -*/ /obj/mecha/proc/click_action(atom/target,mob/user) - if(!src.occupant || src.occupant != user ) return - if(user.stat || !user.canmove) + if(!occupant || occupant != user ) return + if(user.incapacitated()) return if(state) occupant_message("Maintenance protocols in effect.") @@ -284,49 +337,28 @@ var/dir_to_target = get_dir(src,target) if(dir_to_target && !(dir_to_target & src.dir))//wrong direction return - if(hasInternalDamage(MECHA_INT_CONTROL_LOST)) + if(internal_damage & MECHA_INT_CONTROL_LOST) target = safepick(view(3,target)) if(!target) return if(!target.Adjacent(src)) if(selected && selected.is_ranged()) - selected.action(target) + if(selected.action(target)) + selected.start_cooldown() else if(selected && selected.is_melee()) - selected.action(target) + if(selected.action(target)) + selected.start_cooldown() else - if(internal_damage&MECHA_INT_CONTROL_LOST) + if(internal_damage & MECHA_INT_CONTROL_LOST) target = safepick(oview(1,src)) if(!melee_can_hit || !istype(target, /atom)) return target.mech_melee_attack(src) melee_can_hit = 0 - if(do_after(melee_cooldown)) + spawn(melee_cooldown) melee_can_hit = 1 return -/obj/mecha/proc/mech_toxin_damage(mob/living/target) - playsound(src, 'sound/effects/spray2.ogg', 50, 1) - if(target.reagents) - if(target.reagents.get_reagent_amount("cryptobiolin") + force < force*2) - target.reagents.add_reagent("cryptobiolin", force/2) - if(target.reagents.get_reagent_amount("toxin") + force < force*2) - target.reagents.add_reagent("toxin", force/2.5) - - -/atom/proc/mech_melee_attack(obj/mecha/M) - return - -/obj/mecha/mech_melee_attack(obj/mecha/M) - if(M.damtype =="brute") - playsound(src, 'sound/weapons/punch4.ogg', 50, 1) - else if(M.damtype == "fire") - playsound(src, 'sound/items/Welder.ogg', 50, 1) - else - return - visible_message("[M.name] has hit [src].") - take_damage(M.force, damtype) - add_logs(M.occupant, src, "attacked", object=M, addition="(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])") - return /obj/mecha/proc/range_action(atom/target) return @@ -364,9 +396,6 @@ return domove(direction) /obj/mecha/proc/domove(direction) - return call((proc_res["dyndomove"]||src), "dyndomove")(direction) - -/obj/mecha/proc/dyndomove(direction) if(!can_move) return 0 if(!Process_Spacemove(direction)) @@ -374,15 +403,16 @@ if(!has_charge(step_energy_drain)) return 0 var/move_result = 0 - if(hasInternalDamage(MECHA_INT_CONTROL_LOST)) + if(internal_damage & MECHA_INT_CONTROL_LOST) move_result = mechsteprand() else if(src.dir!=direction) move_result = mechturn(direction) else move_result = mechstep(direction) if(move_result) + use_power(step_energy_drain) can_move = 0 - if(do_after(step_in)) + spawn(step_in) can_move = 1 return 1 return 0 @@ -410,15 +440,15 @@ if(istype(obstacle, /obj)) var/obj/O = obstacle if(istype(O, /obj/effect/portal)) //derpfix - src.anchored = 0 + anchored = 0 O.Crossed(src) src.anchored = 1 else if(!O.anchored) - step(obstacle,src.dir) + step(obstacle, dir) else //I have no idea why I disabled this obstacle.Bumped(src) else if(istype(obstacle, /mob)) - step(obstacle,src.dir) + step(obstacle, dir) else obstacle.Bumped(src) return @@ -430,7 +460,7 @@ /obj/mecha/proc/check_for_internal_damage(var/list/possible_int_damage,var/ignore_threshold=null) if(!islist(possible_int_damage) || isemptylist(possible_int_damage)) return if(prob(20)) - if(ignore_threshold || src.health*100/initial(src.health)Life support system reactivated.") + if(MECHA_INT_FIRE) + occupant_message("Internal fire extinquished.") + if(MECHA_INT_TANK_BREACH) + occupant_message("Damaged internal tank has been sealed.") internal_damage &= ~int_dam_flag - switch(int_dam_flag) - if(MECHA_INT_TEMP_CONTROL) - if(pr_int_temp_processor) - occupant_message("Life support system reactivated.") - pr_int_temp_processor.start() - if(MECHA_INT_FIRE) - occupant_message("Internal fire extinquished.") - if(MECHA_INT_TANK_BREACH) - occupant_message("Damaged internal tank has been sealed.") - return -//////////////////////////////////////// -//////// Health related procs //////// -//////////////////////////////////////// - -/obj/mecha/proc/take_damage(amount, type="brute") - if(amount) - var/damage = absorbDamage(amount,type) - health -= damage - update_health() - occupant_message("Taking damage!") - log_append_to_last("Took [damage] points of damage. Damage type: \"[type]\".",1) - -/obj/mecha/proc/absorbDamage(damage,damage_type) - return call((proc_res["dynabsorbdamage"]||src), "dynabsorbdamage")(damage,damage_type) - -/obj/mecha/proc/dynabsorbdamage(damage,damage_type) - return damage*(listgetindex(damage_absorption,damage_type) || 1) - - -/obj/mecha/proc/update_health() - if(src.health > 0) - src.spark_system.start() - else - qdel(src) - -/obj/mecha/attack_hulk(mob/living/carbon/human/user) - if(!prob(src.deflect_chance)) - ..(user, 1) - take_damage(15) - check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - user.visible_message("[user] hits [src.name], doing some damage.", "You hit [src.name] with all your might. The metal creaks and bends.") - occupant_message("[user] hits [src.name], doing some damage.") - return 1 - return 0 - -/obj/mecha/attack_hand(mob/living/user as mob) - user.changeNext_move(CLICK_CD_MELEE) // Ugh. Ideally we shouldn't be setting cooldowns outside of click code. - user.do_attack_animation(src) - src.log_message("Attack by hand/paw. Attacker - [user].",1) - user.visible_message("[user] hits [src.name]. Nothing happens","You hit [src.name] with no visible effect.") - src.log_append_to_last("Armor saved.") - return - -/obj/mecha/attack_paw(mob/user as mob) - return src.attack_hand(user) - - -/obj/mecha/attack_alien(mob/living/user as mob) - src.log_message("Attack by alien. Attacker - [user].",1) - user.changeNext_move(CLICK_CD_MELEE) //Now stompy alien killer mechs are actually scary to aliens! - user.do_attack_animation(src) - if(!prob(src.deflect_chance)) - src.take_damage(15) - src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - playsound(src.loc, 'sound/weapons/slash.ogg', 50, 1, -1) - visible_message("The [user] slashes at [src.name]'s armor!") - else - src.log_append_to_last("Armor saved.") - playsound(src.loc, 'sound/weapons/slash.ogg', 50, 1, -1) - user << "\green Your claws had no effect!" - visible_message("The [user] rebounds off [src.name]'s armor!") - return - - -/obj/mecha/attack_animal(mob/living/simple_animal/user as mob) - src.log_message("Attack by simple animal. Attacker - [user].",1) - user.changeNext_move(CLICK_CD_MELEE) - if(user.melee_damage_upper == 0) - user.emote("[user.friendly] [src]") - else - user.do_attack_animation(src) - if(!prob(src.deflect_chance)) - var/damage = rand(user.melee_damage_lower, user.melee_damage_upper) - src.take_damage(damage) - src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - visible_message("[user] [user.attacktext] [src]!") - add_logs(user, src, "attacked", admin=0) - else - src.log_append_to_last("Armor saved.") - playsound(src.loc, 'sound/weapons/slash.ogg', 50, 1, -1) - visible_message("The [user] rebounds off [src.name]'s armor!") - add_logs(user, src, "attacked", admin=0) - return - -/obj/mecha/attack_tk() - return - -/obj/mecha/hitby(atom/movable/A as mob|obj) //wrapper - src.log_message("Hit by [A].",1) - call((proc_res["dynhitby"]||src), "dynhitby")(A) - return - -/obj/mecha/proc/dynhitby(atom/movable/A) - if(istype(A, /obj/item/mecha_parts/mecha_tracking)) - A.forceMove(src) - src.visible_message("The [A] fastens firmly to [src].") - return - if(prob(src.deflect_chance) || istype(A, /mob)) - src.visible_message("[A] bounces off the [src.name] armor") - src.log_append_to_last("Armor saved.") - if(istype(A, /mob/living)) - var/mob/living/M = A - M.take_organ_damage(10) - else if(istype(A, /obj)) - var/obj/O = A - if(O.throwforce) - src.visible_message("[src.name] is hit by [A].") - src.take_damage(O.throwforce) - src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - return - - -/obj/mecha/bullet_act(var/obj/item/projectile/Proj) //wrapper - src.log_message("Hit by projectile. Type: [Proj.name]([Proj.flag]).",1) - call((proc_res["dynbulletdamage"]||src), "dynbulletdamage")(Proj) //calls equipment - ..() - return - -/obj/mecha/proc/dynbulletdamage(var/obj/item/projectile/Proj) - if(prob(src.deflect_chance)) - src.visible_message("The [src.name] armor deflects the projectile") - src.log_append_to_last("Armor saved.") - return - var/ignore_threshold - if(Proj.flag == "taser") - use_power(200) - return - if(istype(Proj, /obj/item/projectile/beam/pulse)) - ignore_threshold = 1 - if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) - src.take_damage(Proj.damage,Proj.flag) - src.visible_message("[src.name] is hit by [Proj].") - src.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),ignore_threshold) - Proj.on_hit(src) - return - -/obj/mecha/ex_act(severity, target) - src.log_message("Affected by explosion of severity: [severity].",1) - if(prob(src.deflect_chance)) - severity++ - src.log_append_to_last("Armor saved, changing severity to [severity].") - switch(severity) - if(1.0) - qdel(src) - if(2.0) - if (prob(30)) - qdel(src) - else - src.take_damage(initial(src.health)/2) - src.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),1) - if(3.0) - if (prob(5)) - qdel(src) - else - src.take_damage(initial(src.health)/5) - src.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),1) - return - -/obj/mecha/blob_act() - take_damage(30, "brute") - return - -/obj/mecha/emp_act(severity) - if(get_charge()) - use_power((cell.charge/2)/severity) - take_damage(50 / severity,"energy") - src.log_message("EMP detected",1) - check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),1) - return - -/obj/mecha/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature>src.max_temperature) - src.log_message("Exposed to dangerous temperature.",1) - src.take_damage(5,"fire") - src.check_for_internal_damage(list(MECHA_INT_FIRE, MECHA_INT_TEMP_CONTROL)) - return - -/obj/mecha/proc/dynattackby(obj/item/weapon/W as obj, mob/living/user as mob) - user.changeNext_move(CLICK_CD_MELEE) // Ugh. Ideally we shouldn't be setting cooldowns outside of click code. - user.do_attack_animation(src) - src.log_message("Attacked by [W]. Attacker - [user]") - if(prob(src.deflect_chance)) - user << "The [W] bounces off [src.name] armor." - src.log_append_to_last("Armor saved.") - return 0 - else - user.visible_message("[user] hits [src] with [W].", "You hit [src] with [W].") - src.take_damage(W.force,W.damtype) - src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - return 1 - -////////////////////// -////// AttackBy ////// -////////////////////// - -/obj/mecha/attackby(obj/item/W as obj, mob/user as mob, params) - - if(istype(W, /obj/item/device/mmi)) - if(mmi_move_inside(W,user)) - user << "[src]-[W] interface initialized successfuly" - else - user << "[src]-[W] interface initialization failed." - return - - if(istype(W, /obj/item/mecha_parts/mecha_equipment)) - var/obj/item/mecha_parts/mecha_equipment/E = W - spawn() - if(E.can_attach(src)) - if(!user.drop_item()) - return - E.attach(src) - user.visible_message("[user] attaches [W] to [src].", "You attach [W] to [src].") - else - user << "You were unable to attach [W] to [src]!" - return - if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) - if(add_req_access || maint_access) - if(internals_access_allowed(user)) - var/obj/item/weapon/card/id/id_card - if(istype(W, /obj/item/weapon/card/id)) - id_card = W - else - var/obj/item/device/pda/pda = W - id_card = pda.id - output_maintenance_dialog(id_card, user) - return - else - user << "Invalid ID: Access denied." - else - user << "Maintenance protocols disabled by operator." - else if(istype(W, /obj/item/weapon/wrench)) - if(state==1) - state = 2 - user << "You undo the securing bolts." - else if(state==2) - state = 1 - user << "You tighten the securing bolts." - return - else if(istype(W, /obj/item/weapon/crowbar)) - if(state==2) - state = 3 - user << "You open the hatch to the power unit." - else if(state==3) - state=2 - user << "You close the hatch to the power unit." - return - else if(istype(W, /obj/item/stack/cable_coil)) - if(state == 3 && hasInternalDamage(MECHA_INT_SHORT_CIRCUIT)) - var/obj/item/stack/cable_coil/CC = W - if(CC.use(2)) - clearInternalDamage(MECHA_INT_SHORT_CIRCUIT) - user << "You replace the fused wires." - else - user << "You need two lengths of cable to fix this mech!" - return - else if(istype(W, /obj/item/weapon/screwdriver)) - if(hasInternalDamage(MECHA_INT_TEMP_CONTROL)) - clearInternalDamage(MECHA_INT_TEMP_CONTROL) - user << "You repair the damaged temperature controller." - else if(state==3 && src.cell) - src.cell.forceMove(src.loc) - src.cell = null - state = 4 - user << "You unscrew and pry out the powercell." - src.log_message("Powercell removed") - else if(state==4 && src.cell) - state=3 - user << "You screw the cell in place." - return - - else if(istype(W, /obj/item/weapon/stock_parts/cell)) - if(state==4) - if(!src.cell) - if(!user.drop_item()) - return - var/obj/item/weapon/stock_parts/cell/C = W - user << "You install the powercell." - C.forceMove(src) - C.use(C.charge * 0.8) - src.cell = C - src.log_message("Powercell installed") - else - user << "There's already a powercell installed." - return - - else if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent != "harm") - user.changeNext_move(CLICK_CD_MELEE) - var/obj/item/weapon/weldingtool/WT = W - if(src.healthYou repair the damaged gas tank." - else - user.visible_message("[user] repairs some damage to [src.name].") - src.health += min(10, initial(src.health)-src.health) - else - user << "The welder must be on for this task!" - return 1 - else - user << "The [src.name] is at full integrity!" - return 1 - - else if(istype(W, /obj/item/mecha_parts/mecha_tracking)) - if(!user.unEquip(W)) - user << "\the [W] is stuck to your hand, you cannot put it in \the [src]!" - return - W.forceMove(src) - user.visible_message("[user] attaches [W] to [src].", "You attach [W] to [src].") - return - - else if(!(W.flags&NOBLUDGEON)) - call((proc_res["dynattackby"]||src), "dynattackby")(W,user) - return - ///////////////////////////////////// //////////// AI piloting //////////// ///////////////////////////////////// @@ -861,7 +568,7 @@ occupant = AI icon_state = initial(icon_state) playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) - if(!hasInternalDamage()) + if(!internal_damage) occupant << sound('sound/mecha/nominal.ogg',volume=50) AI.cancel_camera() AI.controlled_mech = src @@ -871,7 +578,7 @@ AI << "[interaction == AI_MECH_HACK ? "Takeover of [name] complete! You are now permanently loaded onto the onboard computer. Do not attempt to leave the station sector!" \ : "You have been uploaded to a mech's onboard computer."]" AI << "Use Middle-Mouse to activate mech functions and equipment. Click normally for AI interactions." - + GrantActions(AI) ///////////////////////////////////// //////// Atmospheric stuff //////// @@ -929,81 +636,6 @@ /obj/mecha/portableConnectorReturnAir() return internal_tank.return_air() -///////////////////////// -//////// Verbs //////// -///////////////////////// - - -/obj/mecha/verb/connect_to_port() - set name = "Connect to port" - set category = "Exosuit Interface" - set src = usr.loc - set popup_menu = 0 - - if(!can_use(usr)) - return - - var/obj/machinery/atmospherics/unary/portables_connector/possible_port = locate(/obj/machinery/atmospherics/unary/portables_connector/) in loc - if(possible_port) - if(connect(possible_port)) - src.occupant_message("[name] connects to the port.") - src.verbs += /obj/mecha/verb/disconnect_from_port - src.verbs -= /obj/mecha/verb/connect_to_port - return - else - src.occupant_message("[name] failed to connect to the port.") - return - else - src.occupant_message("Nothing happens") - - -/obj/mecha/verb/disconnect_from_port() - set name = "Disconnect from port" - set category = "Exosuit Interface" - set src = usr.loc - set popup_menu = 0 - - if(!can_use(usr)) - return - - if(disconnect()) - src.occupant_message("[name] disconnects from the port.") - src.verbs -= /obj/mecha/verb/disconnect_from_port - src.verbs += /obj/mecha/verb/connect_to_port - else - src.occupant_message("[name] is not connected to the port at the moment.") - -/obj/mecha/verb/toggle_lights() - set name = "Toggle Lights" - set category = "Exosuit Interface" - set src = usr.loc - set popup_menu = 0 - - if(!can_use(usr)) - return - - lights = !lights - if(lights) AddLuminosity(lights_power) - else AddLuminosity(-lights_power) - src.occupant_message("Toggled lights [lights?"on":"off"].") - log_message("Toggled lights [lights?"on":"off"].") - return - - -/obj/mecha/verb/toggle_internal_tank() - set name = "Toggle internal airtank usage." - set category = "Exosuit Interface" - set src = usr.loc - set popup_menu = 0 - - if(!can_use(usr)) - return - - use_internal_tank = !use_internal_tank - src.occupant_message("Now taking air from [use_internal_tank?"internal airtank":"environment"].") - src.log_message("Now taking air from [use_internal_tank?"internal airtank":"environment"].") - return - /obj/mecha/MouseDrop_T(mob/M as mob, mob/user as mob) if (!user.canUseTopic(src) || (user != M)) @@ -1034,13 +666,13 @@ visible_message("[user] starts to climb into [src.name].") - if(enter_after(40,user)) - if(src.health <= 0) + if(do_after(user, 40, target = src)) + if(health <= 0) user << "You cannot get in the [src.name], it has been destroyed!" - else if(!src.occupant) - moved_inside(user) - else if(src.occupant!=user) + else if(occupant) user << "[src.occupant] was faster! Try better next time, loser." + else + moved_inside(user) else user << "You stop entering the exosuit!" return @@ -1048,25 +680,18 @@ /obj/mecha/proc/moved_inside(var/mob/living/carbon/human/H as mob) if(H && H.client && H in range(1)) H.reset_view(src) - /* - H.client.perspective = EYE_PERSPECTIVE - H.client.eye = src - */ H.stop_pulling() H.forceMove(src) - if(H.hud_used) - last_user_hud = H.hud_used.hud_shown - H.hud_used.show_hud(HUD_STYLE_REDUCED) - - src.occupant = H - src.add_fingerprint(H) - src.forceMove(src.loc) - src.log_append_to_last("[H] moved in as pilot.") - src.icon_state = initial(icon_state) + occupant = H + add_fingerprint(H) + GrantActions(H, human_occupant=1) + forceMove(loc) + log_append_to_last("[H] moved in as pilot.") + icon_state = initial(icon_state) dir = dir_in playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) - if(!hasInternalDamage()) - src.occupant << sound('sound/mecha/nominal.ogg',volume=50) + if(!internal_damage) + occupant << sound('sound/mecha/nominal.ogg',volume=50) return 1 else return 0 @@ -1089,7 +714,7 @@ visible_message("[user] starts to insert an MMI into [src.name].") - if(enter_after(40,user)) + if(do_after(user, 40, target = src)) if(!occupant) return mmi_moved_inside(mmi_as_oc,user) else @@ -1111,122 +736,65 @@ return var/mob/brainmob = mmi_as_oc.brainmob brainmob.reset_view(src) - /* - brainmob.client.eye = src - brainmob.client.perspective = EYE_PERSPECTIVE - */ occupant = brainmob brainmob.loc = src //should allow relaymove brainmob.canmove = 1 mmi_as_oc.loc = src mmi_as_oc.mecha = src - src.verbs -= /obj/mecha/verb/eject - src.icon_state = initial(icon_state) + icon_state = initial(icon_state) dir = dir_in - src.log_message("[mmi_as_oc] moved in as pilot.") - if(!hasInternalDamage()) - src.occupant << sound('sound/mecha/nominal.ogg',volume=50) + log_message("[mmi_as_oc] moved in as pilot.") + if(!internal_damage) + occupant << sound('sound/mecha/nominal.ogg',volume=50) + GrantActions(brainmob) return 1 else return 0 -/obj/mecha/verb/view_stats() - set name = "View Stats" - set category = "Exosuit Interface" - set src = usr.loc - set popup_menu = 0 - - if(!can_use(usr)) - return - //pr_update_stats.start() - src.occupant << browse(src.get_stats_html(), "window=exosuit") - return - -/* -/obj/mecha/verb/force_eject() - set category = "Object" - set name = "Force Eject" - set src in view(5) - src.go_out() - return -*/ - -/obj/mecha/verb/eject() - set name = "Eject" - set category = "Exosuit Interface" - set src = usr.loc - set popup_menu = 0 - - if(!can_use(usr)) - return - - src.go_out() - add_fingerprint(usr) - return - /obj/mecha/container_resist() go_out() -/obj/mecha/proc/go_out(var/forced) - if(!src.occupant) return +/obj/mecha/Exited(var/atom/movable/M, var/atom/newloc) + if(occupant && occupant == M) // The occupant exited the mech without calling go_out() + go_out(1, newloc) + +/obj/mecha/proc/go_out(var/forced, var/atom/newloc = loc) + if(!occupant) return var/atom/movable/mob_container + occupant.clear_alert("charge") + occupant.clear_alert("mech damage") if(ishuman(occupant)) - mob_container = src.occupant - if(occupant.hud_used && last_user_hud) - occupant.hud_used.show_hud(HUD_STYLE_STANDARD) + mob_container = occupant + RemoveActions(occupant, human_occupant=1) else if(istype(occupant, /mob/living/carbon/brain)) var/mob/living/carbon/brain/brain = occupant + RemoveActions(brain) mob_container = brain.container else if(isAI(occupant) && forced) //This should only happen if there are multiple AIs in a round, and at least one is Malf. + RemoveActions(occupant) occupant.gib() //If one Malf decides to steal a mech from another AI (even other Malfs!), they are destroyed, as they have nowhere to go when replaced. occupant = null return else return - if(mob_container.forceMove(src.loc))//ejecting mob container - /* - if(ishuman(occupant) && (return_pressure() > HAZARD_HIGH_PRESSURE)) - use_internal_tank = 0 - var/datum/gas_mixture/environment = get_turf_air() - if(environment) - var/env_pressure = environment.return_pressure() - var/pressure_delta = (cabin.return_pressure() - env_pressure) - //Can not have a pressure delta that would cause environment pressure > tank pressure - - var/transfer_moles = 0 - if(pressure_delta > 0) - transfer_moles = pressure_delta*environment.volume/(cabin.return_temperature() * R_IDEAL_GAS_EQUATION) - - //Actually transfer the gas - var/datum/gas_mixture/removed = cabin.air_contents.remove(transfer_moles) - loc.assume_air(removed) - - occupant.SetStunned(5) - occupant.SetWeakened(5) - occupant << "You were blown out of the mech!" - */ - src.log_message("[mob_container] moved out.") - occupant.reset_view() - /* - if(src.occupant.client) - src.occupant.client.eye = src.occupant.client.mob - src.occupant.client.perspective = MOB_PERSPECTIVE - */ - src.occupant << browse(null, "window=exosuit") + var/mob/living/L = occupant + occupant = null //we need it null when forceMove calls Exited(). + if(mob_container.forceMove(newloc))//ejecting mob container + log_message("[mob_container] moved out.") + L.reset_view() + L << browse(null, "window=exosuit") if(istype(mob_container, /obj/item/device/mmi)) var/obj/item/device/mmi/mmi = mob_container if(mmi.brainmob) - occupant.loc = mmi + L.loc = mmi mmi.mecha = null mmi.update_icon() - src.occupant.canmove = 0 - src.verbs += /obj/mecha/verb/eject - src.occupant = null - src.icon_state = initial(icon_state)+"-open" - src.dir = dir_in + L.canmove = 0 + icon_state = initial(icon_state)+"-open" + dir = dir_in return ///////////////////////// @@ -1244,211 +812,6 @@ return allowed(M) -//////////////////////////////////// -///// Rendering stats window /////// -//////////////////////////////////// - -/obj/mecha/proc/get_stats_html() - var/output = {" - [src.name] data - - - - -
- [src.get_stats_part()] -
-
- [src.get_equipment_list()] -
-
-
- [src.get_commands()] -
- - - "} - return output - - -/obj/mecha/proc/report_internal_damage() - var/output = null - var/list/dam_reports = list( - "[MECHA_INT_FIRE]" = "INTERNAL FIRE", - "[MECHA_INT_TEMP_CONTROL]" = "LIFE SUPPORT SYSTEM MALFUNCTION", - "[MECHA_INT_TANK_BREACH]" = "GAS TANK BREACH", - "[MECHA_INT_CONTROL_LOST]" = "COORDINATION SYSTEM CALIBRATION FAILURE - Recalibrate", - "[MECHA_INT_SHORT_CIRCUIT]" = "SHORT CIRCUIT" - ) - for(var/tflag in dam_reports) - var/intdamflag = text2num(tflag) - if(hasInternalDamage(intdamflag)) - output += dam_reports[tflag] - output += "
" - if(return_pressure() > WARNING_HIGH_PRESSURE) - output += "DANGEROUSLY HIGH CABIN PRESSURE
" - return output - - -/obj/mecha/proc/get_stats_part() - var/integrity = health/initial(health)*100 - var/cell_charge = get_charge() - var/tank_pressure = internal_tank ? round(internal_tank.return_pressure(),0.01) : "None" - var/tank_temperature = internal_tank ? internal_tank.return_temperature() : "Unknown" - var/cabin_pressure = round(return_pressure(),0.01) - var/output = {"[report_internal_damage()] - [integrity<30?"DAMAGE LEVEL CRITICAL
":null] - Integrity: [integrity]%
- Powercell charge: [isnull(cell_charge)?"No powercell installed":"[cell.percent()]%"]
- Air source: [use_internal_tank?"Internal Airtank":"Environment"]
- Airtank pressure: [tank_pressure]kPa
- Airtank temperature: [tank_temperature]°K|[tank_temperature - T0C]°C
- Cabin pressure: [cabin_pressure>WARNING_HIGH_PRESSURE ? "[cabin_pressure]": cabin_pressure]kPa
- Cabin temperature: [return_temperature()]°K|[return_temperature() - T0C]°C
- Lights: [lights?"on":"off"]
- [src.dna?"DNA-locked:
[src.dna] \[Reset\]
":null] - "} - return output - -/obj/mecha/proc/get_commands() - var/output = {"
-
Electronics
- -
-
-
Airtank
- -
- -
[get_equipment_menu()]
-
- [(/obj/mecha/verb/eject in src.verbs)?"Eject
":null] - "} - return output - -/obj/mecha/proc/get_equipment_menu() //outputs mecha html equipment menu - var/output - if(equipment.len) - output += {"
-
Equipment
-
" - return output - -/obj/mecha/proc/get_equipment_list() //outputs mecha equipment list in html - if(!equipment.len) - return - var/output = "Equipment:
" - for(var/obj/item/mecha_parts/mecha_equipment/MT in equipment) - output += "
[MT.get_equip_info()]
" - output += "
" - return output - - -/obj/mecha/proc/get_log_html() - var/output = "[src.name] Log" - for(var/list/entry in log) - output += {"
[entry["time"]] [time2text(entry["date"],"MMM DD")] [entry["year"]]
-
[entry["message"]]
- "} - output += "" - return output - - -/obj/mecha/proc/output_access_dialog(obj/item/weapon/card/id/id_card, mob/user) - if(!id_card || !user) return - var/output = {" - - - -

Following keycodes are present in this system:

"} - for(var/a in operation_req_access) - output += "[get_access_desc(a)] - Delete
" - output += "

Following keycodes were detected on portable device:

" - for(var/a in id_card.access) - if(a in operation_req_access) continue - var/a_name = get_access_desc(a) - if(!a_name) continue //there's some strange access without a name - output += "[a_name] - Add
" - output += "
Finish (Warning! The ID upload panel will be locked. It can be unlocked only through Exosuit Interface.)" - output += "" - user << browse(output, "window=exosuit_add_access") - onclose(user, "exosuit_add_access") - return - -/obj/mecha/proc/output_maintenance_dialog(obj/item/weapon/card/id/id_card,mob/user) - if(!id_card || !user) return - var/output = {" - - - - - [add_req_access?"Edit operation keycodes":null] - [maint_access?"Initiate maintenance protocol":null] - [(state>0) ?"Set Cabin Air Pressure":null] - - "} - user << browse(output, "window=exosuit_maint_console") - onclose(user, "exosuit_maint_console") - return - //////////////////////////////// /////// Messages and Log /////// @@ -1473,172 +836,6 @@ var/year = time2text(world.realtime,"YYYY") var/year_integer = text2num(year) // = 2013??? -///////////////// -///// Topic ///// -///////////////// - -/obj/mecha/Topic(href, href_list) - ..() - if(href_list["update_content"]) - if(usr != src.occupant) return - send_byjax(src.occupant,"exosuit.browser","content",src.get_stats_part()) - return - if(href_list["close"]) - return - if(usr.stat > 0) - return - var/datum/topic_input/filter = new /datum/topic_input(href,href_list) - if(href_list["select_equip"]) - if(usr != src.occupant) return - var/obj/item/mecha_parts/mecha_equipment/equip = filter.getObj("select_equip") - if(equip) - src.selected = equip - src.occupant_message("You switch to [equip]") - src.visible_message("[src] raises [equip]") - send_byjax(src.occupant,"exosuit.browser","eq_list",src.get_equipment_list()) - return - if(href_list["eject"]) - if(usr != src.occupant) return - src.eject() - return - if(href_list["toggle_lights"]) - if(usr != src.occupant) return - src.toggle_lights() - return - if(href_list["toggle_airtank"]) - if(usr != src.occupant) return - src.toggle_internal_tank() - return - if(href_list["rmictoggle"]) - if(usr != src.occupant) return - radio.broadcasting = !radio.broadcasting - send_byjax(src.occupant,"exosuit.browser","rmicstate",(radio.broadcasting?"Engaged":"Disengaged")) - return - if(href_list["rspktoggle"]) - if(usr != src.occupant) return - radio.listening = !radio.listening - send_byjax(src.occupant,"exosuit.browser","rspkstate",(radio.listening?"Engaged":"Disengaged")) - return - if(href_list["rfreq"]) - if(usr != src.occupant) return - var/new_frequency = (radio.frequency + filter.getNum("rfreq")) - if (!radio.freerange || (radio.frequency < 1200 || radio.frequency > 1600)) - new_frequency = sanitize_frequency(new_frequency) - radio.set_frequency(new_frequency) - send_byjax(src.occupant,"exosuit.browser","rfreq","[format_frequency(radio.frequency)]") - return - if(href_list["port_disconnect"]) - if(usr != src.occupant) return - src.disconnect_from_port() - return - if (href_list["port_connect"]) - if(usr != src.occupant) return - src.connect_to_port() - return - if (href_list["view_log"]) - if(usr != src.occupant) return - src.occupant << browse(src.get_log_html(), "window=exosuit_log") - onclose(occupant, "exosuit_log") - return - if (href_list["change_name"]) - if(usr != src.occupant) return - var/newname = stripped_input(occupant,"Choose new exosuit name","Rename exosuit","", MAX_NAME_LEN) - if(newname && trim(newname)) - name = newname - else - alert(occupant, "nope.avi") - return - if (href_list["toggle_id_upload"]) - if(usr != src.occupant) return - add_req_access = !add_req_access - send_byjax(src.occupant,"exosuit.browser","t_id_upload","[add_req_access?"L":"Unl"]ock ID upload panel") - return - if(href_list["toggle_maint_access"]) - if(usr != src.occupant) return - if(state) - occupant_message("Maintenance protocols in effect") - return - maint_access = !maint_access - send_byjax(src.occupant,"exosuit.browser","t_maint_access","[maint_access?"Forbid":"Permit"] maintenance protocols") - return - if(href_list["req_access"] && add_req_access) - if(!in_range(src, usr)) return - output_access_dialog(filter.getObj("id_card"),filter.getMob("user")) - return - if(href_list["maint_access"] && maint_access) - if(!in_range(src, usr)) return - var/mob/user = filter.getMob("user") - if(user) - if(state==0) - state = 1 - user << "The securing bolts are now exposed." - else if(state==1) - state = 0 - user << "The securing bolts are now hidden." - output_maintenance_dialog(filter.getObj("id_card"),user) - return - if(href_list["set_internal_tank_valve"] && state >=1) - if(!in_range(src, usr)) return - var/mob/user = filter.getMob("user") - if(user) - var/new_pressure = input(user,"Input new output pressure","Pressure setting",internal_tank_valve) as num - if(new_pressure) - internal_tank_valve = new_pressure - user << "The internal pressure valve has been set to [internal_tank_valve]kPa." - if(href_list["add_req_access"] && add_req_access && filter.getObj("id_card")) - if(!in_range(src, usr)) return - operation_req_access += filter.getNum("add_req_access") - output_access_dialog(filter.getObj("id_card"),filter.getMob("user")) - return - if(href_list["del_req_access"] && add_req_access && filter.getObj("id_card")) - if(!in_range(src, usr)) return - operation_req_access -= filter.getNum("del_req_access") - output_access_dialog(filter.getObj("id_card"),filter.getMob("user")) - return - if(href_list["finish_req_access"]) - if(!in_range(src, usr)) return - add_req_access = 0 - var/mob/user = filter.getMob("user") - user << browse(null,"window=exosuit_add_access") - return - if(href_list["dna_lock"]) - if(usr != src.occupant) - return - if(src.occupant && !iscarbon(src.occupant)) - src.occupant << " You do not have any DNA!" - return - src.dna = src.occupant.dna.unique_enzymes - src.occupant_message("You feel a prick as the needle takes your DNA sample.") - return - if(href_list["reset_dna"]) - if(usr != src.occupant) return - src.dna = null - if(href_list["repair_int_control_lost"]) - if(usr != src.occupant) return - src.occupant_message("Recalibrating coordination system...") - src.log_message("Recalibration of coordination system started.") - var/T = src.loc - if(do_after(100)) - if(T == src.loc) - src.clearInternalDamage(MECHA_INT_CONTROL_LOST) - src.occupant_message("Recalibration successful.") - src.log_message("Recalibration of coordination system finished with 0 errors.") - else - src.occupant_message("Recalibration failed!") - src.log_message("Recalibration of coordination system failed with 1 error.",1) - - //debug - /* - if(href_list["debug"]) - if(href_list["set_i_dam"]) - setInternalDamage(filter.getNum("set_i_dam")) - if(href_list["clear_i_dam"]) - clearInternalDamage(filter.getNum("clear_i_dam")) - return - */ - - return - /////////////////////// ///// Power stuff ///// /////////////////////// @@ -1647,16 +844,14 @@ var/year_integer = text2num(year) // = 2013??? return (get_charge()>=amount) /obj/mecha/proc/get_charge() - return call((proc_res["dyngetcharge"]||src), "dyngetcharge")() - -/obj/mecha/proc/dyngetcharge()//returns null if no powercell, else returns cell.charge - if(!src.cell) return - return max(0, src.cell.charge) + for(var/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/R in equipment) + var/relay_charge = R.get_charge() + if(relay_charge) + return relay_charge + if(cell) + return max(0, cell.charge) /obj/mecha/proc/use_power(amount) - return call((proc_res["dynusepower"]||src), "dynusepower")(amount) - -/obj/mecha/proc/dynusepower(amount) if(get_charge()) cell.use(amount) return 1 @@ -1672,123 +867,121 @@ var/year_integer = text2num(year) // = 2013??? return 0 -////////////////////////////////////////// -//////// Mecha global iterators //////// -////////////////////////////////////////// +//////////////////////////////////////// Action Buttons /////////////////////////////////////////////// + +/obj/mecha/proc/GrantActions(var/mob/living/user, var/human_occupant = 0) + if(human_occupant) + eject_action.chassis = src + eject_action.Grant(user) + + internals_action.chassis = src + internals_action.Grant(user) + + cycle_action.chassis = src + cycle_action.Grant(user) + + lights_action.chassis = src + lights_action.Grant(user) + + stats_action.chassis = src + stats_action.Grant(user) -/datum/global_iterator/mecha_preserve_temp //normalizing cabin air temperature to 20 degrees celsium - delay = 20 +/obj/mecha/proc/RemoveActions(var/mob/living/user, var/human_occupant = 0) + if(human_occupant) + eject_action.Remove(user) + internals_action.Remove(user) + cycle_action.Remove(user) + lights_action.Remove(user) + stats_action.Remove(user) - process(var/obj/mecha/mecha) - if(mecha.cabin_air && mecha.cabin_air.return_volume() > 0) - var/delta = mecha.cabin_air.temperature - T20C - mecha.cabin_air.temperature -= max(-10, min(10, round(delta/4,0.1))) + +/datum/action/mecha + check_flags = AB_CHECK_RESTRAINED | AB_CHECK_STUNNED | AB_CHECK_ALIVE + action_type = AB_INNATE + var/obj/mecha/chassis + + +/datum/action/mecha/mech_eject + name = "Eject From Mech" + button_icon_state = "mech_eject" + +/datum/action/mecha/mech_eject/Activate() + if(!owner || !iscarbon(owner)) return - -/datum/global_iterator/mecha_tank_give_air - delay = 15 - - process(var/obj/mecha/mecha) - if(mecha.internal_tank) - var/datum/gas_mixture/tank_air = mecha.internal_tank.return_air() - var/datum/gas_mixture/cabin_air = mecha.cabin_air - - var/release_pressure = mecha.internal_tank_valve - var/cabin_pressure = cabin_air.return_pressure() - var/pressure_delta = min(release_pressure - cabin_pressure, (tank_air.return_pressure() - cabin_pressure)/2) - var/transfer_moles = 0 - if(pressure_delta > 0) //cabin pressure lower than release pressure - if(tank_air.return_temperature() > 0) - transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION) - var/datum/gas_mixture/removed = tank_air.remove(transfer_moles) - cabin_air.merge(removed) - else if(pressure_delta < 0) //cabin pressure higher than release pressure - var/datum/gas_mixture/t_air = mecha.return_air() - pressure_delta = cabin_pressure - release_pressure - if(t_air) - pressure_delta = min(cabin_pressure - t_air.return_pressure(), pressure_delta) - if(pressure_delta > 0) //if location pressure is lower than cabin pressure - transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION) - var/datum/gas_mixture/removed = cabin_air.remove(transfer_moles) - if(t_air) - t_air.merge(removed) - else //just delete the cabin gas, we're in space or some shit - del(removed) - else - return stop() + if(!chassis || chassis.occupant != owner) return + chassis.go_out() -/datum/global_iterator/mecha_internal_damage // processing internal damage +/datum/action/mecha/mech_toggle_internals + name = "Toggle Internal Airtank Usage" + button_icon_state = "mech_toggle_internals" - process(var/obj/mecha/mecha) - if(!mecha.hasInternalDamage()) - return stop() - if(mecha.hasInternalDamage(MECHA_INT_FIRE)) - if(!mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL) && prob(5)) - mecha.clearInternalDamage(MECHA_INT_FIRE) - if(mecha.internal_tank) - if(mecha.internal_tank.return_pressure()>mecha.internal_tank.maximum_pressure && !(mecha.hasInternalDamage(MECHA_INT_TANK_BREACH))) - mecha.setInternalDamage(MECHA_INT_TANK_BREACH) - var/datum/gas_mixture/int_tank_air = mecha.internal_tank.return_air() - if(int_tank_air && int_tank_air.return_volume()>0) //heat the air_contents - int_tank_air.temperature = min(6000+T0C, int_tank_air.temperature+rand(10,15)) - if(mecha.cabin_air && mecha.cabin_air.return_volume()>0) - mecha.cabin_air.temperature = min(6000+T0C, mecha.cabin_air.return_temperature()+rand(10,15)) - if(mecha.cabin_air.return_temperature()>mecha.max_temperature/2) - mecha.take_damage(4/round(mecha.max_temperature/mecha.cabin_air.return_temperature(),0.1),"fire") - if(mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL)) //stop the mecha_preserve_temp loop datum - mecha.pr_int_temp_processor.stop() - if(mecha.hasInternalDamage(MECHA_INT_TANK_BREACH)) //remove some air from internal tank - if(mecha.internal_tank) - var/datum/gas_mixture/int_tank_air = mecha.internal_tank.return_air() - var/datum/gas_mixture/leaked_gas = int_tank_air.remove_ratio(0.10) - if(mecha.loc && hascall(mecha.loc,"assume_air")) - mecha.loc.assume_air(leaked_gas) - else - del(leaked_gas) - if(mecha.hasInternalDamage(MECHA_INT_SHORT_CIRCUIT)) - if(mecha.get_charge()) - mecha.spark_system.start() - mecha.cell.charge -= min(20,mecha.cell.charge) - mecha.cell.maxcharge -= min(20,mecha.cell.maxcharge) +/datum/action/mecha/mech_toggle_internals/Activate() + if(!owner || !chassis || chassis.occupant != owner) return + chassis.use_internal_tank = !chassis.use_internal_tank + if(chassis.use_internal_tank) + button_icon_state = "mech_toggle_internals_on" + else + button_icon_state = "mech_toggle_internals" + chassis.occupant_message("Now taking air from [chassis.use_internal_tank?"internal airtank":"environment"].") + chassis.log_message("Now taking air from [chassis.use_internal_tank?"internal airtank":"environment"].") -///////////// +/datum/action/mecha/mech_cycle_equip + name = "Cycle Equipment" + button_icon_state = "mech_cycle_equip" -//debug -/* -/obj/mecha/verb/test_int_damage() - set name = "Test internal damage" - set category = "Exosuit Interface" - set src in view(0) - if(!occupant) return - if(usr!=occupant) +/datum/action/mecha/mech_cycle_equip/Activate() + if(!owner || !chassis || chassis.occupant != owner) return - var/output = {" - - - -

Set:

- MECHA_INT_FIRE
- MECHA_INT_TEMP_CONTROL
- MECHA_INT_SHORT_CIRCUIT
- MECHA_INT_TANK_BREACH
- MECHA_INT_CONTROL_LOST
-
-

Clear:

- MECHA_INT_FIRE
- MECHA_INT_TEMP_CONTROL
- MECHA_INT_SHORT_CIRCUIT
- MECHA_INT_TANK_BREACH
- MECHA_INT_CONTROL_LOST
- - "} + if(chassis.equipment.len == 0) + chassis.occupant_message("No equipment available.") + return + if(!chassis.selected) + chassis.selected = chassis.equipment[1] + chassis.occupant_message("You select [chassis.selected]") + send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list()) + return + var/number = 0 + for(var/A in chassis.equipment) + number++ + if(A == chassis.selected) + if(chassis.equipment.len == number) + chassis.selected = null + chassis.occupant_message("You switch to no equipment") + else + chassis.selected = chassis.equipment[number+1] + chassis.occupant_message("You switch to [chassis.selected]") + send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list()) + return - occupant << browse(output, "window=ex_debug") - //src.health = initial(src.health)/2.2 - //src.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - return -*/ + +/datum/action/mecha/mech_toggle_lights + name = "Toggle Lights" + button_icon_state = "mech_toggle_lights" + +/datum/action/mecha/mech_toggle_lights/Activate() + if(!owner || !chassis || chassis.occupant != owner) + return + chassis.lights = !chassis.lights + if(chassis.lights) + chassis.AddLuminosity(chassis.lights_power) + button_icon_state = "mech_toggle_lights_on" + else + chassis.AddLuminosity(-chassis.lights_power) + button_icon_state = "mech_toggle_lights" + chassis.occupant_message("Toggled lights [chassis.lights?"on":"off"].") + chassis.log_message("Toggled lights [chassis.lights?"on":"off"].") + + +/datum/action/mecha/mech_view_stats + name = "View Stats" + button_icon_state = "mech_view_stats" + +/datum/action/mecha/mech_view_stats/Activate() + if(!owner || !chassis || chassis.occupant != owner) + return + chassis.occupant << browse(chassis.get_stats_html(), "window=exosuit") diff --git a/code/game/mecha/mecha_defense.dm b/code/game/mecha/mecha_defense.dm new file mode 100644 index 00000000000..3b61b31887f --- /dev/null +++ b/code/game/mecha/mecha_defense.dm @@ -0,0 +1,345 @@ + +/obj/mecha/proc/take_damage(amount, type="brute") + if(amount) + var/damage = absorbDamage(amount,type) + health -= damage + update_health() + occupant_message("Taking damage!") + log_append_to_last("Took [damage] points of damage. Damage type: \"[type]\".",1) + +/obj/mecha/proc/absorbDamage(damage,damage_type) + var/coeff = 1 + if(damage_absorption[damage_type]) + coeff = damage_absorption[damage_type] + return damage*coeff + + +/obj/mecha/proc/update_health() + if(src.health > 0) + src.spark_system.start() + else + qdel(src) + +/obj/mecha/attack_hulk(mob/living/carbon/human/user) + if(!prob(src.deflect_chance)) + ..(user, 1) + take_damage(15) + check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) + user.visible_message("[user] hits [src.name], doing some damage.", "You hit [src.name] with all your might. The metal creaks and bends.") + occupant_message("[user] hits [src.name], doing some damage.") + return 1 + return 0 + +/obj/mecha/attack_hand(mob/living/user as mob) + user.changeNext_move(CLICK_CD_MELEE) // Ugh. Ideally we shouldn't be setting cooldowns outside of click code. + user.do_attack_animation(src) + src.log_message("Attack by hand/paw. Attacker - [user].",1) + user.visible_message("[user] hits [src.name]. Nothing happens","You hit [src.name] with no visible effect.") + src.log_append_to_last("Armor saved.") + return + +/obj/mecha/attack_paw(mob/user as mob) + return src.attack_hand(user) + + +/obj/mecha/attack_alien(mob/living/user as mob) + src.log_message("Attack by alien. Attacker - [user].",1) + user.changeNext_move(CLICK_CD_MELEE) //Now stompy alien killer mechs are actually scary to aliens! + user.do_attack_animation(src) + if(!prob(src.deflect_chance)) + take_damage(15) + check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) + playsound(src.loc, 'sound/weapons/slash.ogg', 50, 1, -1) + visible_message("The [user] slashes at [src.name]'s armor!") + else + src.log_append_to_last("Armor saved.") + playsound(src.loc, 'sound/weapons/slash.ogg', 50, 1, -1) + user << "\green Your claws had no effect!" + visible_message("The [user] rebounds off [src.name]'s armor!") + return + + +/obj/mecha/attack_animal(mob/living/simple_animal/user as mob) + src.log_message("Attack by simple animal. Attacker - [user].",1) + user.changeNext_move(CLICK_CD_MELEE) + if(user.melee_damage_upper == 0) + user.emote("[user.friendly] [src]") + else + user.do_attack_animation(src) + if(!prob(src.deflect_chance)) + var/damage = rand(user.melee_damage_lower, user.melee_damage_upper) + take_damage(damage) + check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) + visible_message("[user] [user.attacktext] [src]!") + add_logs(user, src, "attacked", admin=0) + else + src.log_append_to_last("Armor saved.") + playsound(src.loc, 'sound/weapons/slash.ogg', 50, 1, -1) + visible_message("The [user] rebounds off [src.name]'s armor!") + add_logs(user, src, "attacked", admin=0) + return + +/obj/mecha/attack_tk() + return + +/obj/mecha/hitby(atom/movable/A as mob|obj) //wrapper + log_message("Hit by [A].",1) + var/deflection = deflect_chance + var/dam_coeff = 1 + var/counter_tracking = 0 + for(var/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/B in equipment) + if(B.projectile_react()) + deflection *= B.deflect_coeff + dam_coeff *= B.damage_coeff + counter_tracking = 1 + break + if(istype(A, /obj/item/mecha_parts/mecha_tracking)) + if(!counter_tracking) + A.forceMove(src) + visible_message("The [A] fastens firmly to [src].") + return + else + deflection = 100 //will bounce off + if(prob(deflection) || istype(A, /mob)) + visible_message("[A] bounces off the [src.name] armor") + log_append_to_last("Armor saved.") + if(istype(A, /mob/living)) + var/mob/living/M = A + M.take_organ_damage(10) + else if(istype(A, /obj)) + var/obj/O = A + if(O.throwforce) + visible_message("[src.name] is hit by [A].") + take_damage(O.throwforce*dam_coeff) + check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) + return + + +/obj/mecha/bullet_act(var/obj/item/projectile/Proj) //wrapper + log_message("Hit by projectile. Type: [Proj.name]([Proj.flag]).",1) + var/deflection = deflect_chance + var/dam_coeff = 1 + for(var/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/B in equipment) + if(B.projectile_react()) + deflection *= B.deflect_coeff + dam_coeff *= B.damage_coeff + break + if(prob(deflection)) + visible_message("The [src.name] armor deflects the projectile") + log_append_to_last("Armor saved.") + return + var/ignore_threshold + if(Proj.flag == "taser") + use_power(200) + return + if(istype(Proj, /obj/item/projectile/beam/pulse)) + ignore_threshold = 1 + if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) + take_damage(Proj.damage*dam_coeff,Proj.flag) + visible_message("[src.name] is hit by [Proj].") + check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),ignore_threshold) + Proj.on_hit(src) + +/obj/mecha/ex_act(severity, target) + src.log_message("Affected by explosion of severity: [severity].",1) + if(prob(src.deflect_chance)) + severity++ + log_append_to_last("Armor saved, changing severity to [severity].") + switch(severity) + if(1.0) + qdel(src) + if(2.0) + if (prob(30)) + qdel(src) + else + take_damage(initial(src.health)/2) + check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),1) + if(3.0) + if (prob(5)) + qdel(src) + else + take_damage(initial(src.health)/5) + check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),1) + return + +/obj/mecha/blob_act() + take_damage(30, "brute") + return + +/obj/mecha/emp_act(severity) + if(get_charge()) + use_power((cell.charge/2)/severity) + take_damage(50 / severity,"energy") + src.log_message("EMP detected",1) + check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),1) + return + +/obj/mecha/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) + if(exposed_temperature>src.max_temperature) + log_message("Exposed to dangerous temperature.",1) + take_damage(5,"fire") + check_for_internal_damage(list(MECHA_INT_FIRE, MECHA_INT_TEMP_CONTROL)) + return + + +/obj/mecha/attackby(obj/item/W as obj, mob/user as mob, params) + + if(istype(W, /obj/item/device/mmi)) + if(mmi_move_inside(W,user)) + user << "[src]-[W] interface initialized successfuly" + else + user << "[src]-[W] interface initialization failed." + return + + if(istype(W, /obj/item/mecha_parts/mecha_equipment)) + var/obj/item/mecha_parts/mecha_equipment/E = W + spawn() + if(E.can_attach(src)) + if(!user.drop_item()) + return + E.attach(src) + user.visible_message("[user] attaches [W] to [src].", "You attach [W] to [src].") + else + user << "You were unable to attach [W] to [src]!" + return + if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) + if(add_req_access || maint_access) + if(internals_access_allowed(user)) + var/obj/item/weapon/card/id/id_card + if(istype(W, /obj/item/weapon/card/id)) + id_card = W + else + var/obj/item/device/pda/pda = W + id_card = pda.id + output_maintenance_dialog(id_card, user) + return + else + user << "Invalid ID: Access denied." + else + user << "Maintenance protocols disabled by operator." + else if(istype(W, /obj/item/weapon/wrench)) + if(state==1) + state = 2 + user << "You undo the securing bolts." + else if(state==2) + state = 1 + user << "You tighten the securing bolts." + return + else if(istype(W, /obj/item/weapon/crowbar)) + if(state==2) + state = 3 + user << "You open the hatch to the power unit." + else if(state==3) + state=2 + user << "You close the hatch to the power unit." + return + else if(istype(W, /obj/item/stack/cable_coil)) + if(state == 3 && (internal_damage & MECHA_INT_SHORT_CIRCUIT)) + var/obj/item/stack/cable_coil/CC = W + if(CC.use(2)) + clearInternalDamage(MECHA_INT_SHORT_CIRCUIT) + user << "You replace the fused wires." + else + user << "You need two lengths of cable to fix this mech!" + return + else if(istype(W, /obj/item/weapon/screwdriver)) + if(internal_damage & MECHA_INT_TEMP_CONTROL) + clearInternalDamage(MECHA_INT_TEMP_CONTROL) + user << "You repair the damaged temperature controller." + else if(state==3 && src.cell) + src.cell.forceMove(src.loc) + src.cell = null + state = 4 + user << "You unscrew and pry out the powercell." + src.log_message("Powercell removed") + else if(state==4 && src.cell) + state=3 + user << "You screw the cell in place." + return + + else if(istype(W, /obj/item/weapon/stock_parts/cell)) + if(state==4) + if(!src.cell) + if(!user.drop_item()) + return + var/obj/item/weapon/stock_parts/cell/C = W + user << "You install the powercell." + C.forceMove(src) + C.use(C.charge * 0.8) + src.cell = C + src.log_message("Powercell installed") + else + user << "There's already a powercell installed." + return + + else if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent != "harm") + user.changeNext_move(CLICK_CD_MELEE) + var/obj/item/weapon/weldingtool/WT = W + if(src.healthYou repair the damaged gas tank.
" + else + user.visible_message("[user] repairs some damage to [src.name].") + src.health += min(10, initial(src.health)-src.health) + else + user << "The welder must be on for this task!" + return 1 + else + user << "The [src.name] is at full integrity!" + return 1 + + else if(istype(W, /obj/item/mecha_parts/mecha_tracking)) + if(!user.unEquip(W)) + user << "\the [W] is stuck to your hand, you cannot put it in \the [src]!" + return + W.forceMove(src) + user.visible_message("[user] attaches [W] to [src].", "You attach [W] to [src].") + return + + else if(!(W.flags&NOBLUDGEON)) + user.changeNext_move(CLICK_CD_MELEE) // Ugh. Ideally we shouldn't be setting cooldowns outside of click code. + user.do_attack_animation(src) + log_message("Attacked by [W]. Attacker - [user]") + var/deflection = deflect_chance + var/dam_coeff = 1 + for(var/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/B in equipment) + if(B.attack_react(user)) + deflection *= B.deflect_coeff + dam_coeff *= B.damage_coeff + break + if(prob(deflection)) + user << "The [W] bounces off [src.name] armor." + src.log_append_to_last("Armor saved.") + return 0 + else + user.visible_message("[user] hits [src] with [W].", "You hit [src] with [W].") + take_damage(round(W.force*dam_coeff),W.damtype) + check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) + return 1 + + +/obj/mecha/proc/mech_toxin_damage(mob/living/target) + playsound(src, 'sound/effects/spray2.ogg', 50, 1) + if(target.reagents) + if(target.reagents.get_reagent_amount("cryptobiolin") + force < force*2) + target.reagents.add_reagent("cryptobiolin", force/2) + if(target.reagents.get_reagent_amount("toxin") + force < force*2) + target.reagents.add_reagent("toxin", force/2.5) + + +/atom/proc/mech_melee_attack(obj/mecha/M) + return + +/obj/mecha/mech_melee_attack(obj/mecha/M) + if(M.damtype =="brute") + playsound(src, 'sound/weapons/punch4.ogg', 50, 1) + else if(M.damtype == "fire") + playsound(src, 'sound/items/Welder.ogg', 50, 1) + else + return + visible_message("[M.name] has hit [src].") + take_damage(M.force, damtype) + add_logs(M.occupant, src, "attacked", object=M, addition="(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])") + return \ No newline at end of file diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm index 0e6d689b85f..ec04357cf2c 100644 --- a/code/game/mecha/mecha_parts.dm +++ b/code/game/mecha/mecha_parts.dm @@ -175,27 +175,7 @@ /obj/item/mecha_parts/chassis/firefighter/New() ..() construct = new /datum/construction/mecha/firefighter_chassis(src) -/* -/obj/item/mecha_parts/part/firefighter_torso - name="Ripley-on-Fire Torso" - icon_state = "ripley_harness" -/obj/item/mecha_parts/part/firefighter_left_arm - name="Ripley-on-Fire Left Arm" - icon_state = "ripley_l_arm" - -/obj/item/mecha_parts/part/firefighter_right_arm - name="Ripley-on-Fire Right Arm" - icon_state = "ripley_r_arm" - -/obj/item/mecha_parts/part/firefighter_left_leg - name="Ripley-on-Fire Left Leg" - icon_state = "ripley_l_leg" - -/obj/item/mecha_parts/part/firefighter_right_leg - name="Ripley-on-Fire Right Leg" - icon_state = "ripley_r_leg" -*/ ////////// HONK @@ -334,13 +314,6 @@ icon_state = "odysseus_r_leg" origin_tech = "programming=2;materials=2;engineering=2" -/*/obj/item/mecha_parts/part/odysseus_armor - name="Odysseus Carapace" - icon_state = "odysseus_armor" - origin_tech = "materials=3;engineering=3" - construction_time = 200 - construction_cost = list("metal"=15000)*/ - ///////// Circuitboards diff --git a/code/game/mecha/mecha_topic.dm b/code/game/mecha/mecha_topic.dm new file mode 100644 index 00000000000..25ba30fde4a --- /dev/null +++ b/code/game/mecha/mecha_topic.dm @@ -0,0 +1,321 @@ + +//////////////////////////////////// +///// Rendering stats window /////// +//////////////////////////////////// + +/obj/mecha/proc/get_stats_html() + var/output = {" + [src.name] data + + + + +
+ [src.get_stats_part()] +
+
+ [src.get_equipment_list()] +
+
+
+ [src.get_commands()] +
+ + + "} + return output + + +/obj/mecha/proc/report_internal_damage() + var/output = null + var/list/dam_reports = list( + "[MECHA_INT_FIRE]" = "INTERNAL FIRE", + "[MECHA_INT_TEMP_CONTROL]" = "LIFE SUPPORT SYSTEM MALFUNCTION", + "[MECHA_INT_TANK_BREACH]" = "GAS TANK BREACH", + "[MECHA_INT_CONTROL_LOST]" = "COORDINATION SYSTEM CALIBRATION FAILURE - Recalibrate", + "[MECHA_INT_SHORT_CIRCUIT]" = "SHORT CIRCUIT" + ) + for(var/tflag in dam_reports) + var/intdamflag = text2num(tflag) + if(internal_damage & intdamflag) + output += dam_reports[tflag] + output += "
" + if(return_pressure() > WARNING_HIGH_PRESSURE) + output += "DANGEROUSLY HIGH CABIN PRESSURE
" + return output + + +/obj/mecha/proc/get_stats_part() + var/integrity = health/initial(health)*100 + var/cell_charge = get_charge() + var/tank_pressure = internal_tank ? round(internal_tank.return_pressure(),0.01) : "None" + var/tank_temperature = internal_tank ? internal_tank.return_temperature() : "Unknown" + var/cabin_pressure = round(return_pressure(),0.01) + var/output = {"[report_internal_damage()] + [integrity<30?"DAMAGE LEVEL CRITICAL
":null] + Integrity: [integrity]%
+ Powercell charge: [isnull(cell_charge)?"No powercell installed":"[cell.percent()]%"]
+ Air source: [use_internal_tank?"Internal Airtank":"Environment"]
+ Airtank pressure: [tank_pressure]kPa
+ Airtank temperature: [tank_temperature]°K|[tank_temperature - T0C]°C
+ Cabin pressure: [cabin_pressure>WARNING_HIGH_PRESSURE ? "[cabin_pressure]": cabin_pressure]kPa
+ Cabin temperature: [return_temperature()]°K|[return_temperature() - T0C]°C
+ [src.dna?"DNA-locked:
[src.dna] \[Reset\]
":null] + "} + return output + +/obj/mecha/proc/get_commands() + var/output = {"
+
Electronics
+ +
+ +
[get_equipment_menu()]
+ "} + return output + +/obj/mecha/proc/get_equipment_menu() //outputs mecha html equipment menu + var/output + if(equipment.len) + output += {"
+
Equipment
+
" + return output + +/obj/mecha/proc/get_equipment_list() //outputs mecha equipment list in html + if(!equipment.len) + return + var/output = "Equipment:
" + for(var/obj/item/mecha_parts/mecha_equipment/MT in equipment) + output += "
[MT.get_equip_info()]
" + output += "
" + return output + + +/obj/mecha/proc/get_log_html() + var/output = "[src.name] Log" + for(var/list/entry in log) + output += {"
[entry["time"]] [time2text(entry["date"],"MMM DD")] [entry["year"]]
+
[entry["message"]]
+ "} + output += "" + return output + + +/obj/mecha/proc/output_access_dialog(obj/item/weapon/card/id/id_card, mob/user) + if(!id_card || !user) return + var/output = {" + + + +

Following keycodes are present in this system:

"} + for(var/a in operation_req_access) + output += "[get_access_desc(a)] - Delete
" + output += "

Following keycodes were detected on portable device:

" + for(var/a in id_card.access) + if(a in operation_req_access) continue + var/a_name = get_access_desc(a) + if(!a_name) continue //there's some strange access without a name + output += "[a_name] - Add
" + output += "
Finish (Warning! The ID upload panel will be locked. It can be unlocked only through Exosuit Interface.)" + output += "" + user << browse(output, "window=exosuit_add_access") + onclose(user, "exosuit_add_access") + return + +/obj/mecha/proc/output_maintenance_dialog(obj/item/weapon/card/id/id_card,mob/user) + if(!id_card || !user) return + var/output = {" + + + + + [add_req_access?"Edit operation keycodes":null] + [maint_access?"Initiate maintenance protocol":null] + [(state>0) ?"Set Cabin Air Pressure":null] + + "} + user << browse(output, "window=exosuit_maint_console") + onclose(user, "exosuit_maint_console") + return + + + +///////////////// +///// Topic ///// +///////////////// + +/obj/mecha/Topic(href, href_list) + ..() + if(href_list["close"]) + return + + if(usr.incapacitated()) + return + + var/datum/topic_input/filter = new /datum/topic_input(href,href_list) + + if(in_range(src, usr)) + + if(href_list["req_access"] && add_req_access) + output_access_dialog(filter.getObj("id_card"),filter.getMob("user")) + + if(href_list["maint_access"] && maint_access) + var/mob/user = filter.getMob("user") + if(user) + if(state==0) + state = 1 + user << "The securing bolts are now exposed." + else if(state==1) + state = 0 + user << "The securing bolts are now hidden." + output_maintenance_dialog(filter.getObj("id_card"),user) + + if(href_list["set_internal_tank_valve"] && state >=1) + var/mob/user = filter.getMob("user") + if(user) + var/new_pressure = input(user,"Input new output pressure","Pressure setting",internal_tank_valve) as num + if(new_pressure) + internal_tank_valve = new_pressure + user << "The internal pressure valve has been set to [internal_tank_valve]kPa." + + if(href_list["add_req_access"] && add_req_access && filter.getObj("id_card")) + operation_req_access += filter.getNum("add_req_access") + output_access_dialog(filter.getObj("id_card"),filter.getMob("user")) + + if(href_list["del_req_access"] && add_req_access && filter.getObj("id_card")) + operation_req_access -= filter.getNum("del_req_access") + output_access_dialog(filter.getObj("id_card"),filter.getMob("user")) + + if(href_list["finish_req_access"]) + add_req_access = 0 + var/mob/user = filter.getMob("user") + user << browse(null,"window=exosuit_add_access") + + if(usr != occupant) + return + + if(href_list["update_content"]) + send_byjax(src.occupant,"exosuit.browser","content",src.get_stats_part()) + + if(href_list["select_equip"]) + var/obj/item/mecha_parts/mecha_equipment/equip = filter.getObj("select_equip") + if(equip) + src.selected = equip + src.occupant_message("You switch to [equip]") + src.visible_message("[src] raises [equip]") + send_byjax(src.occupant,"exosuit.browser","eq_list",src.get_equipment_list()) + + if(href_list["rmictoggle"]) + radio.broadcasting = !radio.broadcasting + send_byjax(src.occupant,"exosuit.browser","rmicstate",(radio.broadcasting?"Engaged":"Disengaged")) + + if(href_list["rspktoggle"]) + radio.listening = !radio.listening + send_byjax(src.occupant,"exosuit.browser","rspkstate",(radio.listening?"Engaged":"Disengaged")) + + if(href_list["rfreq"]) + var/new_frequency = (radio.frequency + filter.getNum("rfreq")) + if (!radio.freerange || (radio.frequency < 1200 || radio.frequency > 1600)) + new_frequency = sanitize_frequency(new_frequency) + radio.set_frequency(new_frequency) + send_byjax(src.occupant,"exosuit.browser","rfreq","[format_frequency(radio.frequency)]") + + if (href_list["view_log"]) + src.occupant << browse(src.get_log_html(), "window=exosuit_log") + onclose(occupant, "exosuit_log") + + if (href_list["change_name"]) + var/newname = stripped_input(occupant,"Choose new exosuit name","Rename exosuit","", MAX_NAME_LEN) + if(newname && trim(newname)) + name = newname + else + alert(occupant, "nope.avi") + + if (href_list["toggle_id_upload"]) + add_req_access = !add_req_access + send_byjax(src.occupant,"exosuit.browser","t_id_upload","[add_req_access?"L":"Unl"]ock ID upload panel") + + if(href_list["toggle_maint_access"]) + if(state) + occupant_message("Maintenance protocols in effect") + return + maint_access = !maint_access + send_byjax(src.occupant,"exosuit.browser","t_maint_access","[maint_access?"Forbid":"Permit"] maintenance protocols") + + if(href_list["dna_lock"]) + if(occupant && !iscarbon(occupant)) + occupant << " You do not have any DNA!" + return + dna = src.occupant.dna.unique_enzymes + occupant_message("You feel a prick as the needle takes your DNA sample.") + + if(href_list["reset_dna"]) + dna = null + + if(href_list["repair_int_control_lost"]) + occupant_message("Recalibrating coordination system...") + log_message("Recalibration of coordination system started.") + var/T = loc + spawn(100) + if(T == loc) + clearInternalDamage(MECHA_INT_CONTROL_LOST) + occupant_message("Recalibration successful.") + log_message("Recalibration of coordination system finished with 0 errors.") + else + occupant_message("Recalibration failed!") + log_message("Recalibration of coordination system failed with 1 error.",1) + diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 78fcf6d541a..a83a4a8c422 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -13,15 +13,9 @@ var/list/cargo = new var/cargo_capacity = 15 -/* -/obj/mecha/working/ripley/New() - ..() - return -*/ - /obj/mecha/working/ripley/Move() . = ..() - if(. && (locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in equipment)) + if(. && (locate(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp) in equipment)) var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in cargo if(ore_box) for(var/obj/item/weapon/ore/ore in get_turf(src)) @@ -29,10 +23,11 @@ update_pressure() /obj/mecha/working/ripley/Destroy() - while(src.damage_absorption.["brute"] < 0.6) - new /obj/item/asteroid/goliath_hide(src.loc) - src.damage_absorption.["brute"] = src.damage_absorption.["brute"] + 0.1 //If a goliath-plated ripley gets killed, all the plates drop - for(var/atom/movable/A in src.cargo) + var/hides = round((initial(damage_absorption["brute"]) - damage_absorption["brute"])*10) + for(var/i=0, i < hides, i++) + new /obj/item/asteroid/goliath_hide(loc) //If a goliath-plated ripley gets killed, all the plates drop + damage_absorption["brute"] = initial(damage_absorption["brute"]) + for(var/atom/movable/A in cargo) A.loc = loc step_rand(A) cargo.Cut() @@ -40,30 +35,25 @@ /obj/mecha/working/ripley/go_out() ..() - if (src.damage_absorption["brute"] < 0.6 && src.damage_absorption["brute"] > 0.3) - src.overlays = null - src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-open") - else if (src.damage_absorption.["brute"] == 0.3) - src.overlays = null - src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full-open") + update_icon() /obj/mecha/working/ripley/moved_inside(var/mob/living/carbon/human/H as mob) ..() - if (src.damage_absorption["brute"] < 0.6 && src.damage_absorption["brute"] > 0.3) - src.overlays = null - src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g") - else if (src.damage_absorption["brute"] == 0.3) - src.overlays = null - src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full") + update_icon() /obj/mecha/working/ripley/mmi_moved_inside(var/obj/item/device/mmi/mmi_as_oc as obj,mob/user as mob) ..() - if (src.damage_absorption["brute"] < 0.6 && src.damage_absorption["brute"] > 0.3) - src.overlays = null - src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g") - else if (src.damage_absorption["brute"] == 0.3) - src.overlays = null - src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full") + update_icon() + +/obj/mecha/working/ripley/update_icon() + ..() + if (damage_absorption["brute"] < 0.6 && damage_absorption["brute"] > 0.3) + overlays = null + overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-open") + else if (damage_absorption.["brute"] == 0.3) + overlays = null + overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full-open") + /obj/mecha/working/ripley/firefighter desc = "Autonomous Power Loader Unit. This model is refitted with additional thermal protection." @@ -76,6 +66,7 @@ max_equip = 5 // More armor, less tools wreckage = /obj/structure/mecha_wreckage/ripley/firefighter + /obj/mecha/working/ripley/deathripley desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE" name = "\improper DEATH-RIPLEY" @@ -88,7 +79,7 @@ /obj/mecha/working/ripley/deathripley/New() ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tool/safety_clamp + var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill ME.attach(src) return @@ -100,10 +91,10 @@ ..() //Attach drill if(prob(25)) //Possible diamond drill... Feeling lucky? - var/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill/D = new /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill + var/obj/item/mecha_parts/mecha_equipment/drill/diamonddrill/D = new /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill D.attach(src) else - var/obj/item/mecha_parts/mecha_equipment/tool/drill/D = new /obj/item/mecha_parts/mecha_equipment/tool/drill + var/obj/item/mecha_parts/mecha_equipment/drill/D = new /obj/item/mecha_parts/mecha_equipment/drill D.attach(src) //Add possible plasma cutter @@ -115,12 +106,12 @@ cargo.Add(new /obj/structure/ore_box(src)) //Attach hydraulic clamp - var/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/HC = new /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp + var/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/HC = new /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp HC.attach(src) for(var/obj/item/mecha_parts/mecha_tracking/B in src.contents)//Deletes the beacon so it can't be found easily qdel(B) - var/obj/item/mecha_parts/mecha_equipment/tool/mining_scanner/scanner = new /obj/item/mecha_parts/mecha_equipment/tool/mining_scanner + var/obj/item/mecha_parts/mecha_equipment/mining_scanner/scanner = new /obj/item/mecha_parts/mecha_equipment/mining_scanner scanner.attach(src) /obj/mecha/working/ripley/Exit(atom/movable/O) @@ -159,9 +150,9 @@ if(pressure < 20) step_in = 3 - for(var/obj/item/mecha_parts/mecha_equipment/tool/drill/drill in equipment) + for(var/obj/item/mecha_parts/mecha_equipment/drill/drill in equipment) drill.equip_cooldown = initial(drill.equip_cooldown)/2 else step_in = 5 - for(var/obj/item/mecha_parts/mecha_equipment/tool/drill/drill in equipment) + for(var/obj/item/mecha_parts/mecha_equipment/drill/drill in equipment) drill.equip_cooldown = initial(drill.equip_cooldown) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index b71cb447ff7..3879f0071e4 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -430,7 +430,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s /obj/item/singularity_pull(S, current_size) spawn(0) //this is needed or multiple items will be thrown sequentially and not simultaneously if(current_size >= STAGE_FOUR) - throw_at(S,14,3) + throw_at(S,14,3, spin=0) else ..() /obj/item/acid_act(var/acidpwr, var/acid_volume) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 6ef0a3fa4f8..26dc5d73cb7 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -243,7 +243,7 @@ var/global/list/obj/item/device/pda/PDAs = list() /obj/item/device/pda/proc/can_use(mob/user) if(user && ismob(user)) - if(user.stat || user.restrained() || user.paralysis || user.stunned || user.weakened) + if(user.incapacitated()) return 0 if(loc == user) return 1 diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 9dc2e9482ba..92004a21780 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -398,7 +398,7 @@ var/list/TYPES_SHORTCUTS = list( /obj/item/weapon/reagent_containers = "REAGENT_CONTAINERS", /obj/machinery/atmospherics = "ATMOS", /obj/machinery/portable_atmospherics = "PORT_ATMOS", - /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack = "MECHA_MISSILE_RACK", + /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack = "MECHA_MISSILE_RACK", /obj/item/mecha_parts/mecha_equipment = "MECHA_EQUIP", ) diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 2f3218f4e27..11bca2a452b 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -487,7 +487,7 @@ var/global/list/rockTurfEdgeCache return /* else if(istype(AM,/obj/mecha)) var/obj/mecha/M = AM - if(istype(M.selected,/obj/item/mecha_parts/mecha_equipment/tool/drill)) + if(istype(M.selected,/obj/item/mecha_parts/mecha_equipment/drill)) src.attackby(M.selected,M) return*/ //Aparantly mechs are just TOO COOL to call Bump(), so fuck em (for now) diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index d7c223124b6..7779f227a18 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -72,7 +72,10 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds else affected_mob.overlays += image('icons/mob/alien.dmi', loc = affected_mob, icon_state = "burst_stand") spawn(6) - var/mob/living/carbon/alien/larva/new_xeno = new(affected_mob.loc) + var/location = get_turf(affected_mob) + if(!location) + location = affected_mob.loc + var/mob/living/carbon/alien/larva/new_xeno = new(location) new_xeno.key = C.key new_xeno << sound('sound/voice/hiss5.ogg',0,0,0,100) //To get the player's attention if(gib_on_success) diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index cf6548b0e05..840f19ef3bb 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -10,10 +10,12 @@ src.reset_view(null) src.unset_machine() - src.updatehealth() + updatehealth() update_gravity(mob_has_gravity()) + update_action_buttons() + if (src.malfhack) if (src.malfhack.aidisabled) src << "ERROR: APC access disabled, hack attempt canceled." diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 90c60fc5769..44e06e7d5c2 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -26,7 +26,7 @@ var/last_failed_movement = 0//Will not move in the same dir if it couldnt before, will help with the getting stuck on fields thing var/last_warning var/consumedSupermatter = 0 //If the singularity has eaten a supermatter shard and can go to stage six - allow_spin = 0 + /obj/singularity/New(loc, var/starting_energy = 50, var/temp = 0) //CARN: admin-alert for chuckle-fuckery. admin_investigate_setup() diff --git a/code/modules/research/designs/mecha_designs.dm b/code/modules/research/designs/mecha_designs.dm index 95d25e4592b..a93cf7e7b52 100644 --- a/code/modules/research/designs/mecha_designs.dm +++ b/code/modules/research/designs/mecha_designs.dm @@ -227,7 +227,7 @@ id = "mech_grenade_launcher" build_type = MECHFAB req_tech = list("combat" = 3) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang materials = list(MAT_METAL=22000,MAT_GOLD=6000,MAT_SILVER=8000) construction_time = 100 category = list("Exosuit Equipment") @@ -238,7 +238,7 @@ id = "mech_missile_rack" build_type = MECHFAB req_tech = list("combat" = 6, "materials" = 6) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack materials = list(MAT_METAL=22000,MAT_GOLD=6000,MAT_SILVER=8000) construction_time = 100 category = list("Exosuit Equipment") @@ -249,7 +249,7 @@ id = "clusterbang_launcher" build_type = MECHFAB req_tech = list("combat"= 5, "materials" = 5, "syndicate" = 3) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/clusterbang materials = list(MAT_METAL=20000,MAT_GOLD=10000,MAT_URANIUM=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -282,7 +282,7 @@ id = "mech_rcd" build_type = MECHFAB req_tech = list("materials" = 4, "bluespace" = 3, "magnets" = 4, "powerstorage"=4, "engineering" = 4) - build_path = /obj/item/mecha_parts/mecha_equipment/tool/rcd + build_path = /obj/item/mecha_parts/mecha_equipment/rcd materials = list(MAT_METAL=30000,MAT_GOLD=20000,MAT_PLASMA=25000,MAT_SILVER=20000) construction_time = 1200 category = list("Exosuit Equipment") @@ -348,7 +348,7 @@ id = "mech_diamond_drill" build_type = MECHFAB req_tech = list("materials" = 4, "engineering" = 3) - build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill + build_path = /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill materials = list(MAT_METAL=10000,MAT_DIAMOND=6500) construction_time = 100 category = list("Exosuit Equipment") diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index ce602a5e800..c3a14613b65 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -490,7 +490,7 @@ name = "Exosuit Engineering Equipment (Hydraulic Clamp)" id = "mech_hydraulic_clamp" build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp + build_path = /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp materials = list(MAT_METAL=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -499,7 +499,7 @@ name = "Exosuit Engineering Equipment (Drill)" id = "mech_drill" build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill + build_path = /obj/item/mecha_parts/mecha_equipment/drill materials = list(MAT_METAL=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -508,7 +508,7 @@ name = "Exosuit Engineering Equipement (Mining Scanner)" id = "mech_mscanner" build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/tool/mining_scanner + build_path = /obj/item/mecha_parts/mecha_equipment/mining_scanner materials = list(MAT_METAL=5000,MAT_GLASS=2500) construction_time = 50 category = list("Exosuit Equipment") @@ -517,7 +517,7 @@ name = "Exosuit Engineering Equipment (Extinguisher)" id = "mech_extinguisher" build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/tool/extinguisher + build_path = /obj/item/mecha_parts/mecha_equipment/extinguisher materials = list(MAT_METAL=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -526,7 +526,7 @@ name = "Exosuit Engineering Equipment (Cable Layer)" id = "mech_cable_layer" build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/tool/cable_layer + build_path = /obj/item/mecha_parts/mecha_equipment/cable_layer materials = list(MAT_METAL=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -535,7 +535,7 @@ name = "Exosuit Medical Equipment (Mounted Sleeper)" id = "mech_sleeper" build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/tool/sleeper + build_path = /obj/item/mecha_parts/mecha_equipment/sleeper materials = list(MAT_METAL=5000,MAT_GLASS=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -544,7 +544,7 @@ name = "Exosuit Medical Equipment (Syringe Gun)" id = "mech_syringe_gun" build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/tool/syringe_gun + build_path = /obj/item/mecha_parts/mecha_equipment/syringe_gun materials = list(MAT_METAL=3000,MAT_GLASS=2000) construction_time = 200 category = list("Exosuit Equipment") @@ -580,7 +580,7 @@ name = "H.O.N.K Mousetrap Mortar" id = "mech_mousetrap_mortar" build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar materials = list(MAT_METAL=20000,MAT_BANANIUM=5000) construction_time = 300 category = list("Exosuit Equipment") @@ -589,7 +589,7 @@ name = "H.O.N.K Banana Mortar" id = "mech_banana_mortar" build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar materials = list(MAT_METAL=20000,MAT_BANANIUM=5000) construction_time = 300 category = list("Exosuit Equipment") diff --git a/data/mode.txt b/data/mode.txt index cf1ffd5c991..ef18df98db4 100644 --- a/data/mode.txt +++ b/data/mode.txt @@ -1 +1 @@ -extended \ No newline at end of file +extended diff --git a/html/changelogs/phil235-MechRefactoring.yml b/html/changelogs/phil235-MechRefactoring.yml new file mode 100644 index 00000000000..c8e188f6fc5 --- /dev/null +++ b/html/changelogs/phil235-MechRefactoring.yml @@ -0,0 +1,4 @@ +author: phil235 +delete-after: True +changes: + - rscadd: "Mechs no longer use object verbs and the exosuit interface tab. They now use action buttons. Mechs now have a cycle equipment action button to change weapon faster than by using the view stats window. Mechs get two special alerts when their battery or health is low. Mechs now properly consume energy when moving and having their lights on. Using a mech tool that takes time to act now shows a progress bar (e.g. mech drill)." diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi index 4ced7caebed4b66461ad6c277e4396986b1b4055..0636ebac478a469a37372c34de9684144a836ceb 100644 GIT binary patch literal 29912 zcmYIv1yoe;^Zs2}VCkhBmIeVqK|yjU2`N!p3F%N!LYk!!qy*`b=0kT#cc*lBgLK3H z`aS1&{^#uBy>Ku4&O7hSGtbPO_nVrE96k;;4gdi73i2}Q0003mApi^$9NvA&H3NS+ zc73buAY*E8{KeAF!P52<05~TlYxaGbpS_Va;ZCXwEHg8=A=zDD+(H%(kr_>CmNwwfSVJt5_8`dR_|cX_oDc>w8>@?uq_5 zsi%8{o-vaz5<*hZ{IzXRJhX zgvXe4zm(L+Vra?#Kzh-tU)%I3lsxt3vmC+yg!lkS&hb1b9)9!N^VJ=_h+pnU{TqA+ zqV!K59T;4@aTu&T+B$mw6-63G?NFhAIbf$AaUPhiMF~fo%q?y-aq3cc*TzgeZml6#}$23KeC+_tgLml#qw*b0Zh$rS(~00kMzx6Vm> z9&YZW>kaoOgL@u=6ljdzcKC)&a5eI1SEFiI9Gr;{S;4L|#@7C$*VdJ!dWV94=!x8vOJl|3K_hW|Ls{9%~nWwnyr;T#0biI7F0$2ciRLZiQ9QMFNRCl|+_B$=gi9HwGM&B> z2T#{X9X09C_o&X9p^BQba$;;;l*RtgaH=M1Z2J#-iB#Po02r8>nhHftDlMfrM39CO zAt_PSWo1vJd*A8crm^>$d7=YLVs~G+Y)oNpR&E{)ovAX3d@oCZ))d_VFRb75DutR{ z_4>R3%EPJlo%CQYr4>1fthrt9Q>|&fesTHuINeqL*!H`3Iy#(q?E^x|DxUYZSBKFt zD)o;@aoqG>x3gS;Fu+39w6OqVIJ6{(-1sH&pMz@}w&<9QtVVQk5B&aLgU|)e&hPzr z6jWD`Z3+s%GmfH;i0h&?y<1F)gSPHipWtC|{u zo%O92BDZTbtiE{XX0iT|-@||#PmFf5L!V~SmXmvZW`+iYX=$koPhyr0`2I&TneABk z%M8S1B3YteYH<5aeQ0r)2R`GL7UPnG@Kqmg(;iP?o6EplEk(=z5#LJo*$}vUk%laq zKHg8izc5}+A+bwUgUU|5p<#rL%G$1}nkkh{>0ZNIicKX;2GHG4tdV2%OE@Y-n0l`m z6t{m*<^Wr-Ky$HuiIU1B#Sb;NJ6o~MC@j3AMxBPhBf7n=^!UyC>o;~f7CV>QYJy8&# zFP68f&T;gaR)Mzn+3qAdKtLz#=W??=+prZ#GzO zb`?xE)l`fbZ6!BVfB|RVj>{oO14^!s96=H5=%u_Zy?DmFva+)5e$Ve1GGL%+KGk^7 z*|p(&)WN=e*bOGcMp$~v-9J*C<$>=yp|~mmpc{`6K?*sy&LW|%@=+?!W`Vkr0pF~= z0=#o^(@1mk@;X!>7FCZfSHs^+!(8Z^zdrq3C>uh4Hy~~ua}uNH8I1z3w#TzpR4K|+_db-o09grl#WQm5=&8c!XLK($%Yist+GIFGQlBo2PUlsLQC#gCZy1#)DaPt=2wks^h_-q$M zfoALChL;!nvw;_jUJUxhT2xJryA#pH3RN!1%^8H|As}H*eW^2s`b-Znd$Um(K2%3< zYBCoAYF}?(sBcjmYH@*+?V+XKJwa$ojVhpcm2>=6~b6$mkgo$C_ieJI3?Z zDgPa_bmnSQse5$P#UK~qHectsB&323lzrY#+v%)a`_aUk2_W7cqH77u5o3nD%7S#w z*6{!V{8?%C4GQnggY*E>XyU(qX%4NZ zQnx!hJAU*2+IF{A;vLES-u#9X}YjeJehHC?ZVo5fgt&#QG?v71@*;;WHh z2IIv>^n^|bxHUGptAJH|85A&-vaBT*_>)d(xI0m3vQY0r3QQCm5Qca8zOdhbSN%{o zHD#SHHO8u(w$W~MfAP5CR6R2a;~$c&I6Ja}^dRMBPgb*Sh_vn~10aV9RQ{!bH1XO$5Kc9=e+M#qdxmqibqv;;7`DhyV+&_ZLk~ z8xoBV=(OVQGUZq0cXMEh~>UiDe4bk1n#y|!)y_%L* z;OHpJTRU0~?|LtEaN{`uyDWR;ETke8!dU=N69T{XiH{QN5wqeQ6D+vCt}uY7LPA8s zUK4=G!Gc3xuJ9(_`_2FU+ISM~WfF6XH!p>1Jd0KKs@pjB(gUiyd%Ni}&pVkm`DuQ#n+e`mjNRZdkp`UM8=$KmjF@853Y@D72SjB0*w zZ7IYAWnuBIvxegSK)xGlrHulGVed^S1F92Q^^N!lS3OZg3b4q!qk3wH0fkifw;2uT z+1?fx79DgO+$7%ODZ#cJ>XfmX3ThwG61V{sJr{Ar;5>_41AAItgEEZpVK={2M=UG+ z?CI(lahVdS1s&?M6sCX#j3o@awX9hEgrEbbCCD}uO3G-5pFZRLCYje7;*b&4s0vAo ze5a7^>s8u+zr_sz17j#)=}T?5&NM**NC}2VaUyQ^-dI%*kglD<=8m~|K<&wcAw976 z93RI)5S>+hUC@lBrH4O0AM11NyMH!EWZEPhdD}c(4h&j>Pp41{-ssXk+eyyg`|B zm610ir1Vo{!jvB45~OM20$a5QO`3*7gz|sTKukop-{P0)0{&R!9jYDQ?bJW~{UO@H z)XgOBfP4_0XV1U70mBcL@)14WkMC+*%6)=@sZWTAZww@1E$D=z@DuH)F_N~r;;)Yd ze{f*~q}z)*4c8~v?|K%s8qn2G;EBv3m;Y!E6eNzf%E~#)JUq%&9-@?tEE^duo+pVC zOCUc?)%>ZSF29k7)FCz}*MaZ_!4Km-?)>*w>l$4V(_OxVqGjP&Lm$#2$N(LaBeIth z81lp_IT>0Xb#!!oj$7&AQJG*M(Si_no0N;YQ`7Ut<*kSir4}PkssHAW=JW3CA+*K9 zRS@KOsD}Mmyl9l&bN%{Ik0S1C7UPR;2Vo0?%y5)dfqj*)nSb;2H{j?iua=53`niNt zTx!}j%sYq@U>4syCWt+KJ_YqIKU(>Ce*S5Cy_eAXF_g5BA@R0rC27Kb&&JY56P_dn zgG)3NdaKcxJdcQ9A=aO;T-V2aOVlNfFzrnJcIX{svFLlhP`+LTxC zF12^ej*_7@M0mOXapIN<-(I+k|Dzgx@@A?&aHHz1R}$-wQPKj>?fS1zOH$R$F?bcEgh{gqKcK`7}NNKd;h_2{~`~q3Qz_^hz!9zugKZ3=RI?~8fz6KM7cGOh4sbbyf=3A)oHuAcA6!ZykAHLaD3*AMIzbqYD+>^g7nn^K3T zH$%|?HML83@tTHDO37+P-z_a9d_fJ-zS!v!O!0bMt5Sgx@f~j1o^stu0}XPor`4-4 zdmqVir6uqj4WNHc?bhGctzT&fX^?=cb!IU`(=#5dQWyW5Ft`^fj=kUt|Ibbq$J;^eY-~1~mokfV zQ>iMwZxX}Hf>h~xEKbOYDJ)57R2s-V{OO@`>Pf4@{$A@Xi{(u^lPsLCrCFX(hWKH# zOs#}Yg1&U|XgN@ZPDH-_Ly*67UX$|{A!FK4AczWDP*-a8X=V+pjvr>(4*Gj>*k$?9 zhz{WP`*FHDpMr&gCqkbaq0r9suogz3bg-och3t(Q@!Z;Vl@Ae}f4M*ZYO?69sofvr z*G-to<`?G_&i3#}Z~>vbKdM{8tMB;izQ&oc)4-+nxQtFBEQgxrsAL3|eRN0&RRgv3 zeq;*f^vTGxafO%#=h@Xw@M-yKtVVxOE-7t4<S+dXvmWu3cfE>fXpj zF#t{na|)!d5WP6^>|F4V3ht{{6g`m{p8mH-VBmYC3B0<>yL&LPA_4XCOX>?~(!}TS zk*PYE-{x?~?gu;>0KIE+nWIMl zKkQ=zPJjg?T$LjeJtJ_tzg*0TN@ofwaVuem|MV^olp;<{J*Fr|}n!pKPz7y6u zI?JdOPn4kA6L;n_N^LYAos@s`W=~cNi}{)x`lbHS=9$L5dj&#Gpq^_70goP*uaxP5mm+km(653!Y34nNAS3BQoodtbW6sM0qIAT*fvzx zj(4k(;e;$4x%vO>?%^q5&p=BV(x2`qM0P~gw&7u5+XEXhgg(*+60CT ziZI&IsRvbzhGzt4rWi^dtN3Lqblb7t`h32gCiN&xvdQG&j)R-l+=fd&EW?k+pRLq# z;EQFPc!I?|FjwD}I@;RWDw9n|x;2lsl_7y3|F8GI4XeU4tqEb*hy=@f=f_CuJ4k}e zzQ!<1ep(e8>eDNP&n{HArZWUMzfpjrPXG<_vbCCr8#DV1QT>J>p4G#?CT)oMo4=FO$U{D!s$TXdH(M;H5=;(D-#xK)VH3wS5_pgaS+btP2YYRpK zgnQFilSP;{PS4U@wV2N*otkZ)8ZSno+j&ffdB_nUCdsc5@aL*Vp5hZ^WRi4nB?0&r zzQ5u4Zt2ZZi{Cw4|3kGlH+HBh#)xTCUJL}?x1K6!{4U=Y^?l0<7jaE%zS=SS?#hU# z4mwteCXmOfc5|cz%f*1qYFdBfaet8E#^#|8%(X=ZZ>dgOh%3us;)uoN(IO#j!s@X^H4 zUaf%CKqs94noM`ⅈ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

eR0579QX}Bu4 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 F{{T#Xq~HJm diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index 0ed43592376e0513ba34baa4f0ed1e94e3c0c729..1b707cda5e039736087908846454c09f7712ec5f 100644 GIT binary patch delta 3317 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 Ef|Zfr_y7O^ diff --git a/tgstation.dme b/tgstation.dme index f1be4b290bc..cabc33c6f09 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -215,7 +215,6 @@ #include "code\datums\helper_datums\construction_datum.dm" #include "code\datums\helper_datums\events.dm" #include "code\datums\helper_datums\getrev.dm" -#include "code\datums\helper_datums\global_iterator.dm" #include "code\datums\helper_datums\icon_snapshot.dm" #include "code\datums\helper_datums\teleport.dm" #include "code\datums\helper_datums\topic_input.dm" @@ -501,7 +500,9 @@ #include "code\game\mecha\mecha.dm" #include "code\game\mecha\mecha_construction_paths.dm" #include "code\game\mecha\mecha_control_console.dm" +#include "code\game\mecha\mecha_defense.dm" #include "code\game\mecha\mecha_parts.dm" +#include "code\game\mecha\mecha_topic.dm" #include "code\game\mecha\mecha_wreckage.dm" #include "code\game\mecha\combat\combat.dm" #include "code\game\mecha\combat\durand.dm" @@ -512,7 +513,9 @@ #include "code\game\mecha\combat\reticence.dm" #include "code\game\mecha\equipment\mecha_equipment.dm" #include "code\game\mecha\equipment\tools\medical_tools.dm" -#include "code\game\mecha\equipment\tools\tools.dm" +#include "code\game\mecha\equipment\tools\mining_tools.dm" +#include "code\game\mecha\equipment\tools\other_tools.dm" +#include "code\game\mecha\equipment\tools\work_tools.dm" #include "code\game\mecha\equipment\weapons\weapons.dm" #include "code\game\mecha\medical\medical.dm" #include "code\game\mecha\medical\odysseus.dm" From 9cc577273ff2b654d0c3efdc1a5bd794c6314e74 Mon Sep 17 00:00:00 2001 From: phil235 Date: Wed, 8 Jul 2015 02:24:29 +0200 Subject: [PATCH 08/75] added update_action_buttons to mmi life subproc Fixes seraph smoke not working. buff energy relay so it's closet to the old effect Fixes 6812 (mmi in mech cant use equipment) somehow. Moved check to prevent drilling inventory to mecha/click_action so that it also happens with an AI occupant. Fixes 9562 (verbs sometimes aren't given to the pilot) by removing the verbs Upon destroy() we delete cabin_air: Fixes 8110 Changed armor booster availability back to all mechs. Fixes repair droid overlay not updating when turned off after repair done Fixes heavy plasma cutter not being attachable to anything. --- code/_onclick/click.dm | 2 - code/game/mecha/combat/marauder.dm | 132 +++++++++--------- .../game/mecha/equipment/tools/other_tools.dm | 17 +-- code/game/mecha/equipment/weapons/weapons.dm | 7 +- code/game/mecha/mecha.dm | 7 +- code/modules/mob/living/carbon/brain/life.dm | 1 + data/mode.txt | 1 - 7 files changed, 78 insertions(+), 89 deletions(-) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 5fafc67c934..03fd150be03 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -67,8 +67,6 @@ return if(istype(loc,/obj/mecha)) - if(!locate(/turf) in list(A,A.loc)) // Prevents inventory from being drilled - return var/obj/mecha/M = loc return M.click_action(A,src) diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index 2d39f58e103..152cb53b72d 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -24,79 +24,16 @@ var/datum/action/mecha/mech_toggle_thrusters/thrusters_action = new var/datum/action/mecha/mech_zoom/zoom_action = new +/obj/mecha/combat/marauder/New() + ..() + smoke_system.set_up(3, 0, src) + smoke_system.attach(src) + /obj/mecha/combat/marauder/Destroy() qdel(smoke_system) smoke_system = null ..() -/obj/mecha/combat/marauder/seraph - desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel." - name = "\improper Seraph" - icon_state = "seraph" - operation_req_access = list(access_cent_specops) - step_in = 3 - health = 550 - wreckage = /obj/structure/mecha_wreckage/seraph - internal_damage_threshold = 20 - force = 55 - max_equip = 5 - -/obj/mecha/combat/marauder/mauler - desc = "Heavy-duty, combat exosuit, developed off of the existing Marauder model." - name = "\improper Mauler" - icon_state = "mauler" - operation_req_access = list(access_syndicate) - wreckage = /obj/structure/mecha_wreckage/mauler - -/obj/mecha/combat/marauder/mauler/loaded/New() - ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster(src) - ME.attach(src) - src.smoke_system.set_up(3, 0, src) - src.smoke_system.attach(src) - return - -/obj/mecha/combat/marauder/loaded/New() - ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster(src) - ME.attach(src) - src.smoke_system.set_up(3, 0, src) - src.smoke_system.attach(src) - return - -/obj/mecha/combat/marauder/seraph/New() - ..()//Let it equip whatever is needed. - var/obj/item/mecha_parts/mecha_equipment/ME - if(equipment.len)//Now to remove it and equip anew. - for(ME in equipment) - equipment -= ME - qdel(ME) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/teleporter(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster(src) - ME.attach(src) - return - /obj/mecha/combat/marauder/relaymove(mob/user,direction) if(zoom) if(world.time - last_message > 20) @@ -148,6 +85,64 @@ return output +/obj/mecha/combat/marauder/loaded/New() + ..() + var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster(src) + ME.attach(src) + +/obj/mecha/combat/marauder/seraph + desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel." + name = "\improper Seraph" + icon_state = "seraph" + operation_req_access = list(access_cent_specops) + step_in = 3 + health = 550 + wreckage = /obj/structure/mecha_wreckage/seraph + internal_damage_threshold = 20 + force = 55 + max_equip = 5 + +/obj/mecha/combat/marauder/seraph/New() + ..() + var/obj/item/mecha_parts/mecha_equipment/ME + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/teleporter(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster(src) + ME.attach(src) + +/obj/mecha/combat/marauder/mauler + desc = "Heavy-duty, combat exosuit, developed off of the existing Marauder model." + name = "\improper Mauler" + icon_state = "mauler" + operation_req_access = list(access_syndicate) + wreckage = /obj/structure/mecha_wreckage/mauler + +/obj/mecha/combat/marauder/mauler/loaded/New() + ..() + var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster(src) + ME.attach(src) + + /datum/action/mecha/mech_smoke name = "Smoke" button_icon_state = "smoke" @@ -163,7 +158,6 @@ spawn(M.smoke_cooldown) M.smoke_ready = 1 - /datum/action/mecha/mech_toggle_thrusters name = "Toggle Thrusters" button_icon_state = "mech_toggle_thrusters" diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm index 56e6aa089d2..1ae8bb1cd2b 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -155,11 +155,6 @@ var/deflect_coeff = 1.15 var/damage_coeff = 0.8 -/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/can_attach(obj/mecha/combat/M as obj) - if(..()) - if(istype(M)) - return 1 - /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/get_equip_info() if(!chassis) return return "* [src.name]" @@ -182,12 +177,6 @@ var/deflect_coeff = 1.15 var/damage_coeff = 0.8 -/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/can_attach(obj/mecha/combat/M as obj) - if(..()) - if(istype(M)) - return 1 - return 0 - /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/get_equip_info() if(!chassis) return return "* [src.name]" @@ -276,7 +265,9 @@ else //no repair needed, we turn off SSobj.processing.Remove(src) set_ready_state(1) - + chassis.overlays -= droid_overlay + droid_overlay = new(src.icon, icon_state = "repair_droid") + chassis.overlays += droid_overlay @@ -357,7 +348,7 @@ pow_chan = c break if(pow_chan) - var/delta = min(15, chassis.cell.maxcharge-cur_charge) + var/delta = min(20, chassis.cell.maxcharge-cur_charge) chassis.give_power(delta) A.master.use_power(delta*coeff, pow_chan) diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 266a0061be6..f6b3eb111d0 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -117,9 +117,10 @@ fire_sound = 'sound/weapons/Laser.ogg' /obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma/can_attach(obj/mecha/working/M as obj) - if(..()) - if(istype(M)) - return 1 + if(..()) //combat mech + return 1 + else if(M.equipment.len < M.max_equip && istype(M)) + return 1 return 0 /obj/item/projectile/beam/pulse/heavy diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 35512a1429f..3c7771236c5 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -133,6 +133,8 @@ equipment.Cut() cell = null internal_tank = null + qdel(cabin_air) + cabin_air = null qdel(spark_system) spark_system = null @@ -324,7 +326,10 @@ /obj/mecha/proc/click_action(atom/target,mob/user) - if(!occupant || occupant != user ) return + if(!occupant || occupant != user ) + return + if(!locate(/turf) in list(target,target.loc)) // Prevents inventory from being drilled + return if(user.incapacitated()) return if(state) diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm index fff5bebcdeb..eb8dc6e9c65 100644 --- a/code/modules/mob/living/carbon/brain/life.dm +++ b/code/modules/mob/living/carbon/brain/life.dm @@ -147,4 +147,5 @@ /mob/living/carbon/brain/handle_regular_hud_updates() handle_vision() handle_hud_icons_health() + update_action_buttons() return 1 diff --git a/data/mode.txt b/data/mode.txt index ef18df98db4..e69de29bb2d 100644 --- a/data/mode.txt +++ b/data/mode.txt @@ -1 +0,0 @@ -extended From 63588814e271968e998ebbeb06356257eac6a3ec Mon Sep 17 00:00:00 2001 From: phil235 Date: Wed, 8 Jul 2015 13:58:53 +0200 Subject: [PATCH 09/75] derp --- code/game/mecha/mecha.dm | 16 +++++++--------- data/mode.txt | 1 + 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 3c7771236c5..1361d0f7a5f 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -647,22 +647,22 @@ return if(!ishuman(user)) // no silicons or drones in mechas. return - src.log_message("[user] tries to move in.") - if (src.occupant) - usr << "The [src.name] is already occupied!" - src.log_append_to_last("Permission denied.") + log_message("[user] tries to move in.") + if (occupant) + usr << "The [name] is already occupied!" + log_append_to_last("Permission denied.") return var/passed - if(src.dna) + if(dna) if(check_dna_integrity(user)) var/mob/living/carbon/C = user if(C.dna.unique_enzymes==src.dna) passed = 1 - else if(src.operation_allowed(user)) + else if(operation_allowed(user)) passed = 1 if(!passed) user << "Access denied." - src.log_append_to_last("Permission denied.") + log_append_to_last("Permission denied.") return for(var/mob/living/simple_animal/slime/S in range(1,user)) if(S.Victim == user) @@ -714,8 +714,6 @@ else if(dna && dna!=mmi_as_oc.brainmob.dna.unique_enzymes) user << "Stop it!" return 0 - //Added a message here since people assume their first click failed or something./N -// user << "Installing MMI, please stand by." visible_message("[user] starts to insert an MMI into [src.name].") diff --git a/data/mode.txt b/data/mode.txt index e69de29bb2d..cf1ffd5c991 100644 --- a/data/mode.txt +++ b/data/mode.txt @@ -0,0 +1 @@ +extended \ No newline at end of file From d4cdd8eaa100aa3df558d1f894db6863c4d752ad Mon Sep 17 00:00:00 2001 From: phil235 Date: Thu, 9 Jul 2015 19:49:06 +0200 Subject: [PATCH 10/75] iron foam is now blue steel color just like aluminium foam. Fixes metal foam from backpack firefighter watertank. Fixes nanofrost not freezing shut vent scrubbers. Atmos backpack watertank now starts full of water. Change foam layer to Objlayer +0.1 so that it is above foammetalstructure so it doesn't hide the dissolving animation and also above tables. Buff foam and smoke: smoke/foam contains four times the amount of reagents that was inserted in them, for balancing. Add a little more smoke clouds for tear gas grenade. Removed the no longer needed max_lifetime smoke var. Reagent_dispensers (watertank) now show how much reagents they have left upon examination. Fixed some code formatting in reagent_dispensers. Fixes nanofrost temperature lowering effect that wasn't working. Adjusted reagent volume in blob spore smoke because of the buff. Change to sorium and ldm: effect varies with created volume. If you are close to a powerful vortex you are thrown, otherwise you are just moved instead. Vortex blobs now only make you step if you are far from it when reaction hits, otherwise it throws you. The vortex blob range gets +1 to compensate. Also the range and effect depends on the reagent volume which means lower effect for blobspore smoke. --- code/ATMOSPHERICS/atmospherics.dm | 2 +- .../components/unary_devices/vent_pump.dm | 2 + .../components/unary_devices/vent_scrubber.dm | 2 + code/__HELPERS/unsorted.dm | 2 - code/game/atoms_movable.dm | 11 ++--- code/game/gamemodes/blob/blobs/blob_mobs.dm | 8 ++-- .../effects/effect_system/effects_foam.dm | 8 ++-- .../effects/effect_system/effects_smoke.dm | 9 ++-- .../items/weapons/grenades/chem_grenade.dm | 10 ++--- .../objects/items/weapons/tanks/watertank.dm | 18 +++++--- .../mob/living/carbon/human/species.dm | 2 +- code/modules/mob/living/carbon/life.dm | 2 +- .../Chemistry-Reagents/Blob-Reagents.dm | 33 ++++++++++---- code/modules/reagents/Chemistry-Recipes.dm | 31 +++++++++---- .../Chemistry-Recipes/Pyrotechnics.dm | 14 ++++-- code/modules/reagents/reagent_dispenser.dm | 45 +++++++++++-------- html/changelogs/phil235-SmokeFoamBuff.yml | 14 ++++++ 17 files changed, 135 insertions(+), 78 deletions(-) create mode 100644 html/changelogs/phil235-SmokeFoamBuff.yml diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index 49fb54d5094..bea84778558 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -20,7 +20,7 @@ Pipelines + Other Objects -> Pipe network var/initialize_directions = 0 var/pipe_color var/obj/item/pipe/stored - var/welded = 0 //Used on pumps and scrubbers + var/welded //Used on pumps and scrubbers var/global/list/iconsetids = list() var/global/list/pipeimages = list() var/datum/pipeline/parent = null diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm index 459bf870c66..3765c5f328e 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm @@ -7,6 +7,8 @@ can_unwrench = 1 + welded = 0 + var/area/initial_loc level = 1 var/area_uid diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm index 9588baa7ee7..a6801c3bf0e 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm @@ -9,6 +9,8 @@ can_unwrench = 1 + welded = 0 + var/area/initial_loc var/id_tag = null var/frequency = 1439 diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index f83878efb29..b4e7aaaf3ce 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -514,7 +514,6 @@ Turf and target are seperate in case you want to teleport some distance from a t // returns the turf located at the map edge in the specified direction relative to A // used for mass driver /proc/get_edge_target_turf(var/atom/A, var/direction) - var/turf/target = locate(A.x, A.y, A.z) if(!A || !target) return 0 @@ -530,7 +529,6 @@ Turf and target are seperate in case you want to teleport some distance from a t target = locate(world.maxx, target.y, target.z) if(direction & WEST) target = locate(1, target.y, target.z) - return target // returns turf relative to A in given direction at set range diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index f24e6bf8e4f..e904280e175 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -94,16 +94,13 @@ return /atom/movable/Bump(var/atom/A as mob|obj|turf|area, yes) - if(src.throwing) - src.throw_impact(A) - src.throwing = 0 - + if(throwing) + throw_impact(A) + throwing = 0 if ((A && yes)) A.last_bumped = world.time A.Bumped(src) - return - ..() - return + /atom/movable/proc/forceMove(atom/destination) if(destination) diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index 8580c480ab1..2961be7eb35 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -94,16 +94,16 @@ var/turf/location = get_turf(src) // Create the reagents to put into the air - create_reagents(25) + create_reagents(5) if(overmind && overmind.blob_reagent_datum) - reagents.add_reagent(overmind.blob_reagent_datum.id, 25) + reagents.add_reagent(overmind.blob_reagent_datum.id, 5) else - reagents.add_reagent("spore", 25) + reagents.add_reagent("spore", 5) // Attach the smoke spreader and setup/start it. S.attach(location) - S.set_up(reagents, 1, 1, location, 15, 1) // only 1-2 smoke cloud + S.set_up(reagents, 1, 1, location, 15, 1) // only 1 smoke cloud S.start() ghostize() diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index 81031ea3985..49005536c82 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -7,7 +7,7 @@ opacity = 0 anchored = 1 density = 0 - layer = TURF_LAYER + 0.1 + layer = OBJ_LAYER + 0.05 //above table, below windoor/airlock/foamed metal. mouse_opacity = 0 var/amount = 3 animate_movement = 0 @@ -15,7 +15,7 @@ var/lifetime = 6 -/obj/effect/effect/foam/metal/aluminium +/obj/effect/effect/foam/metal name = "aluminium foam" metal = 1 icon_state = "mfoam" @@ -153,7 +153,7 @@ location = get_turf(loca) amount = round(sqrt(amt / 2), 1) - carry.copy_to(chemholder, carry.total_volume) + carry.copy_to(chemholder, 4*carry.total_volume) //The foam holds 4 times the total reagents volume for balance purposes. /datum/effect/effect/system/foam_spread/metal/set_up(amt=5, loca, var/datum/reagents/carry = null, var/metaltype) ..() @@ -166,7 +166,7 @@ else var/obj/effect/effect/foam/F = PoolOrNew(foamtype, location) var/foamcolor = mix_color_from_reagents(chemholder.reagents.reagent_list) - chemholder.reagents.copy_to(F, chemholder.reagents.total_volume/amount) //how much reagents each foam cell holds + chemholder.reagents.copy_to(F, chemholder.reagents.total_volume/amount) F.color = foamcolor F.amount = amount F.metal = metal diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index 1f447c5c1f9..f1b45cc23e4 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -149,11 +149,10 @@ icon = 'icons/effects/chemsmoke.dmi' icon_state = "" lifetime = 10 - var/max_lifetime = 10 /obj/effect/effect/smoke/chem/process() if(..()) - var/fraction = 1/max_lifetime + var/fraction = 1/initial(lifetime) for(var/obj/O in range(1,src)) if(O.type == src.type) continue @@ -173,7 +172,7 @@ return 0 if(!istype(M)) return 0 - var/fraction = 1/max_lifetime + var/fraction = 1/initial(lifetime) reagents.reaction(M, TOUCH, fraction) lifetime-- return 1 @@ -207,7 +206,7 @@ location = get_turf(loca) if(direct) direction = direct - carry.copy_to(chemholder, carry.total_volume) + carry.copy_to(chemholder, 4*carry.total_volume) //The smoke holds 4 times the total reagents volume for balance purposes. if(!silent) var/contained = "" @@ -256,8 +255,6 @@ else S.steps = pick(0,1,1,1,2,2,2,3) - S.max_lifetime = S.lifetime - if(chemholder.reagents.total_volume > 1) // can't split 1 very well chemholder.reagents.copy_to(S, chemholder.reagents.total_volume/number) // copy reagents to each smoke, divide evenly diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 2ab9f5a64dd..ab4bed24950 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -355,11 +355,11 @@ var/obj/item/weapon/reagent_containers/glass/beaker/large/B1 = new(src) var/obj/item/weapon/reagent_containers/glass/beaker/large/B2 = new(src) - B1.reagents.add_reagent("condensedcapsaicin", 70) - B1.reagents.add_reagent("potassium", 30) - B2.reagents.add_reagent("phosphorus", 30) - B2.reagents.add_reagent("sugar", 30) - B1.reagents.add_reagent("condensedcapsaicin", 40) + B1.reagents.add_reagent("condensedcapsaicin", 60) + B1.reagents.add_reagent("potassium", 40) + B2.reagents.add_reagent("phosphorus", 40) + B2.reagents.add_reagent("sugar", 40) + B1.reagents.add_reagent("condensedcapsaicin", 20) beakers += B1 beakers += B2 diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm index 08808afdc04..7ab76a4e520 100644 --- a/code/game/objects/items/weapons/tanks/watertank.dm +++ b/code/game/objects/items/weapons/tanks/watertank.dm @@ -191,6 +191,10 @@ item_state = "waterbackpackatmos" volume = 200 +/obj/item/weapon/watertank/atmos/New() + ..() + reagents.add_reagent("water", 200) + /obj/item/weapon/watertank/atmos/make_noz() return new /obj/item/weapon/extinguisher/mini/nozzle(src) @@ -294,8 +298,7 @@ F.amount = 0 metal_synthesis_cooldown++ spawn(100) - if(src) - metal_synthesis_cooldown-- + metal_synthesis_cooldown-- else user << "Metal foam mix is still being synthesized..." return @@ -333,7 +336,7 @@ var/turf/simulated/T = A if(T.air) var/datum/gas_mixture/G = T.air - if(get_dist(T, src) < 2) // Otherwise we'll get silliness like people using Nanofrost to kill people through walls with cold air + if(get_dist(T, location) < 2) // Otherwise we'll get silliness like people using Nanofrost to kill people through walls with cold air G.temperature = 2 T.air_update_turf() for(var/obj/effect/hotspot/H in T) @@ -341,10 +344,11 @@ if(G.toxins) G.nitrogen += (G.toxins) G.toxins = 0 - for(var/obj/machinery/atmospherics/unary/vent_pump/V in T) - V.welded = 1 - V.update_icon() - V.visible_message("[V] was frozen shut!") + for(var/obj/machinery/atmospherics/unary/U in T) + if(!isnull(U.welded) && !U.welded) //must be an unwelded vent pump or vent scrubber. + U.welded = 1 + U.update_icon() + U.visible_message("[U] was frozen shut!") for(var/mob/living/L in T) L.ExtinguishMob() for(var/obj/item/Item in T) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 5f9ea9ff9d8..45396b99eba 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1177,7 +1177,7 @@ if(!H.has_smoke_protection()) for(var/obj/effect/effect/smoke/chem/S in range(1, H)) if(S.reagents.total_volume && S.lifetime) - var/fraction = 1/S.max_lifetime + var/fraction = 1/initial(S.lifetime) S.reagents.reaction(H,INGEST, fraction) var/amount = round(S.reagents.total_volume*fraction,0.1) S.reagents.copy_to(H, amount) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index b019a52ab44..df487d56b87 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -73,7 +73,7 @@ if(!has_smoke_protection()) for(var/obj/effect/effect/smoke/chem/S in range(1, src)) if(S.reagents.total_volume && S.lifetime) - var/fraction = 1/S.max_lifetime + var/fraction = 1/initial(S.lifetime) S.reagents.reaction(src,INGEST, fraction) var/amount = round(S.reagents.total_volume*fraction,0.1) S.reagents.copy_to(src, amount) diff --git a/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm index 19826ce0d21..da820b5d877 100644 --- a/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm @@ -173,16 +173,31 @@ /datum/reagent/blob/proc/reagent_vortex(var/mob/living/M as mob, var/setting_type) var/turf/pull = get_turf(M) - for(var/atom/movable/X in range(4,pull)) - if(istype(X, /atom/movable)) - if((X) && !X.anchored) - if(setting_type) - step_away(X,pull) - step_away(X,pull) - step_away(X,pull) - step_away(X,pull) + var/range_power = Clamp(round(volume/5, 1), 1, 5) + for(var/atom/movable/X in range(range_power,pull)) + if(X && !X.anchored) + var/distance = get_dist(X, pull) + var/moving_power = max(range_power - distance, 1) + spawn(0) + if(moving_power > 2) //if the vortex is powerful and we're close, we get thrown + if(setting_type) + var/atom/throw_target = get_edge_target_turf(X, get_dir(X, get_step_away(X, pull))) + var/throw_range = 5 - distance + X.throw_at(throw_target, throw_range, 1) + else + X.throw_at(pull, distance, 1) else - X.throw_at(pull) + if(setting_type) + for(var/i = 0, i < moving_power, i++) + sleep(2) + if(!step_away(X, pull)) + break + else + for(var/i = 0, i < moving_power, i++) + sleep(2) + if(!step_towards(X, pull)) + break + /datum/reagent/blob/proc/send_message(var/mob/living/M as mob) var/totalmessage = message diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index 9555c8a126a..f632e72e590 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -78,15 +78,28 @@ for(var/j = 1, j <= rand(1, 3), j++) step(C, pick(NORTH,SOUTH,EAST,WEST)) -/datum/chemical_reaction/proc/goonchem_vortex(var/turf/simulated/T, var/setting_type, var/range, var/pull_times) +/datum/chemical_reaction/proc/goonchem_vortex(var/turf/simulated/T, var/setting_type, var/range) for(var/atom/movable/X in orange(range, T)) if(istype(X, /obj/effect)) - continue //stop pulling smoke and hotspots please - if(istype(X, /atom/movable)) - if((X) && !X.anchored) - if(setting_type) - for(var/i = 0, i < pull_times, i++) - step_away(X,T) + continue + if(X && !X.anchored) + var/distance = get_dist(X, T) + var/moving_power = max(range - distance, 1) + spawn(0) //so everything moves at the same time. + if(moving_power > 2) //if the vortex is powerful and we're close, we get thrown + if(setting_type) + var/atom/throw_target = get_edge_target_turf(X, get_dir(X, get_step_away(X, T))) + X.throw_at(throw_target, moving_power, 1) + else + X.throw_at(T, moving_power, 1) else - for(var/i = 0, i < pull_times, i++) - step_towards(X,T) \ No newline at end of file + if(setting_type) + for(var/i = 0, i < moving_power, i++) + sleep(2) + if(!step_away(X, T)) + break + else + for(var/i = 0, i < moving_power, i++) + sleep(2) + if(!step_towards(X, T)) + break \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Recipes/Pyrotechnics.dm b/code/modules/reagents/Chemistry-Recipes/Pyrotechnics.dm index ba20b7c7817..ecfbf01d851 100644 --- a/code/modules/reagents/Chemistry-Recipes/Pyrotechnics.dm +++ b/code/modules/reagents/Chemistry-Recipes/Pyrotechnics.dm @@ -124,18 +124,21 @@ return holder.remove_reagent("sorium", created_volume) var/turf/simulated/T = get_turf(holder.my_atom) - goonchem_vortex(T, 1, 5, 6) + var/range = Clamp(sqrt(created_volume), 1, 6) + goonchem_vortex(T, 1, range) /datum/chemical_reaction/sorium_vortex name = "sorium_vortex" id = "sorium_vortex" result = null + result_amount = 1 required_reagents = list("sorium" = 1) required_temp = 474 /datum/chemical_reaction/sorium_vortex/on_reaction(var/datum/reagents/holder, var/created_volume) var/turf/simulated/T = get_turf(holder.my_atom) - goonchem_vortex(T, 1, 5, 6) + var/range = Clamp(sqrt(created_volume), 1, 6) + goonchem_vortex(T, 1, range) /datum/chemical_reaction/liquid_dark_matter @@ -150,18 +153,21 @@ return holder.remove_reagent("liquid_dark_matter", created_volume) var/turf/simulated/T = get_turf(holder.my_atom) - goonchem_vortex(T, 0, 5, 6) + var/range = Clamp(sqrt(created_volume), 1, 6) + goonchem_vortex(T, 0, range) /datum/chemical_reaction/ldm_vortex name = "LDM Vortex" id = "ldm_vortex" result = null + result_amount = 1 required_reagents = list("liquid_dark_matter" = 1) required_temp = 474 /datum/chemical_reaction/ldm_vortex/on_reaction(var/datum/reagents/holder, var/created_volume) var/turf/simulated/T = get_turf(holder.my_atom) - goonchem_vortex(T, 0, 5, 6) + var/range = Clamp(sqrt(created_volume/2), 1, 6) + goonchem_vortex(T, 0, range) /datum/chemical_reaction/flash_powder name = "Flash powder" diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 553f6c9cfbc..23730bc7565 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -49,6 +49,10 @@ if (N) amount_per_transfer_from_this = N +/obj/structure/reagent_dispensers/examine(mob/user) + ..() + user << "It contains [reagents.total_volume] units." + //Dispensers /obj/structure/reagent_dispensers/watertank name = "watertank" @@ -56,9 +60,10 @@ icon = 'icons/obj/objects.dmi' icon_state = "watertank" amount_per_transfer_from_this = 10 - New() - ..() - reagents.add_reagent("water",1000) + +/obj/structure/reagent_dispensers/watertank/New() + ..() + reagents.add_reagent("water",1000) /obj/structure/reagent_dispensers/watertank/ex_act(severity, target) switch(severity) @@ -89,9 +94,10 @@ icon = 'icons/obj/objects.dmi' icon_state = "weldtank" amount_per_transfer_from_this = 10 - New() - ..() - reagents.add_reagent("welding_fuel",1000) + +/obj/structure/reagent_dispensers/fueltank/New() + ..() + reagents.add_reagent("welding_fuel",1000) /obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj) @@ -127,9 +133,10 @@ anchored = 1 density = 0 amount_per_transfer_from_this = 45 - New() - ..() - reagents.add_reagent("condensedcapsaicin",1000) + +/obj/structure/reagent_dispensers/peppertank/New() + ..() + reagents.add_reagent("condensedcapsaicin",1000) /obj/structure/reagent_dispensers/water_cooler @@ -141,9 +148,10 @@ possible_transfer_amounts = null anchored = 1 var/cups = 50 - New() - ..() - reagents.add_reagent("water",500) + +/obj/structure/reagent_dispensers/water_cooler/New() + ..() + reagents.add_reagent("water",500) /obj/structure/reagent_dispensers/water_cooler/attack_hand(var/mob/living/carbon/human/user) if((!istype(user)) || (user.stat)) @@ -170,9 +178,10 @@ icon = 'icons/obj/objects.dmi' icon_state = "beertankTEMP" amount_per_transfer_from_this = 10 - New() - ..() - reagents.add_reagent("beer",1000) + +/obj/structure/reagent_dispensers/beerkeg/New() + ..() + reagents.add_reagent("beer",1000) /obj/structure/reagent_dispensers/beerkeg/blob_act() explosion(src.loc,0,3,5,7,10) @@ -186,6 +195,6 @@ amount_per_transfer_from_this = 10 anchored = 1 - New() - ..() - reagents.add_reagent("virusfood", 1000) \ No newline at end of file +/obj/structure/reagent_dispensers/virusfood/New() + ..() + reagents.add_reagent("virusfood", 1000) \ No newline at end of file diff --git a/html/changelogs/phil235-SmokeFoamBuff.yml b/html/changelogs/phil235-SmokeFoamBuff.yml new file mode 100644 index 00000000000..63cd5d14ac3 --- /dev/null +++ b/html/changelogs/phil235-SmokeFoamBuff.yml @@ -0,0 +1,14 @@ + +author: phil + +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - tweak: "Smoke and foam touch reactions gets buffed." + - rscadd: "Reagent dispensers (watertank, fueltank) tells you how much reagents they have left when examined." + - tweak: "Liquid dark matter blob spore smoke now cannot throw you. The effects of sorium, blob sorium, liquid dark matter and blob liquid dark matter are now scaled by their volume. Sorium/LDM blob's touch now throws the mobs who are close but simply moves the mobs that are further away." From 8295f0c6212eddd883e39a46adb877b6eae308a6 Mon Sep 17 00:00:00 2001 From: phil235 Date: Thu, 9 Jul 2015 20:19:11 +0200 Subject: [PATCH 11/75] Blob vortex shouldn't throw /obj/effect --- code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm | 4 +++- code/modules/reagents/Chemistry-Recipes.dm | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm index da820b5d877..bdbbaf86506 100644 --- a/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm @@ -175,7 +175,9 @@ var/turf/pull = get_turf(M) var/range_power = Clamp(round(volume/5, 1), 1, 5) for(var/atom/movable/X in range(range_power,pull)) - if(X && !X.anchored) + if(istype(X, /obj/effect)) + continue + if(!X.anchored) var/distance = get_dist(X, pull) var/moving_power = max(range_power - distance, 1) spawn(0) diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index f632e72e590..0ad9252a5aa 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -82,7 +82,7 @@ for(var/atom/movable/X in orange(range, T)) if(istype(X, /obj/effect)) continue - if(X && !X.anchored) + if(!X.anchored) var/distance = get_dist(X, T) var/moving_power = max(range - distance, 1) spawn(0) //so everything moves at the same time. From 38aeb528dfa195a79a561e922dc5e8b96e8f08d1 Mon Sep 17 00:00:00 2001 From: MrStonedOne Date: Mon, 13 Jul 2015 07:10:07 -0700 Subject: [PATCH 12/75] Scrubber tweaks + related air alarm tweaks. Scrubbers now use power. How much depends on what its doing, how many gases its set to filter, etc. Scrubbers can now pull from a 3x3 area around them at a major power cost! Air alarms given some new environmental modes to account for this. --- .../components/unary_devices/vent_scrubber.dm | 120 ++++++++++++++---- code/game/machinery/alarm.dm | 76 +++++++++-- nano/templates/air_alarm.tmpl | 32 +++-- 3 files changed, 177 insertions(+), 51 deletions(-) diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm index 9588baa7ee7..d1520ce60a0 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm @@ -3,7 +3,10 @@ name = "air scrubber" desc = "Has a valve and pump attached to it" + use_power = 1 + idle_power_usage = 10 + active_power_usage = 60 level = 1 @@ -14,14 +17,16 @@ var/frequency = 1439 var/datum/radio_frequency/radio_connection + var/list/turf/simulated/adjacent_turfs = list() + var/on = 0 var/scrubbing = 1 //0 = siphoning, 1 = scrubbing var/scrub_CO2 = 1 var/scrub_Toxins = 0 var/scrub_N2O = 0 - var/volume_rate = 120 - var/panic = 0 //is this scrubber panicked? + var/volume_rate = 200 + var/widenet = 0 //is this scrubber acting on the 3x3 area around it. var/area_uid var/radio_filter_out @@ -46,6 +51,30 @@ if(radio_controller) radio_controller.remove_object(src,frequency) ..() +/obj/machinery/atmospherics/unary/vent_scrubber/auto_use_power() + if(!powered(power_channel)) + return 0 + if (!on || welded) + return 0 + if(stat & (NOPOWER|BROKEN)) + return 0 + + var/amount = idle_power_usage + + if (scrubbing) + if (scrub_CO2) + amount += idle_power_usage + if (scrub_Toxins) + amount += idle_power_usage + if (scrub_N2O) + amount += idle_power_usage + else + amount = active_power_usage + + if (widenet) + amount += amount*(adjacent_turfs.len*(adjacent_turfs.len/2)) + use_power(amount, power_channel) + return 1 /obj/machinery/atmospherics/unary/vent_scrubber/update_icon_nopipes() overlays.Cut() @@ -84,7 +113,7 @@ "timestamp" = world.time, "power" = on, "scrubbing" = scrubbing, - "panic" = panic, + "widenet" = widenet, "filter_co2" = scrub_CO2, "filter_toxins" = scrub_Toxins, "filter_n2o" = scrub_N2O, @@ -104,6 +133,7 @@ radio_filter_out = frequency==initial(frequency)?(RADIO_TO_AIRALARM):null if (frequency) set_frequency(frequency) + check_turfs() ..() /obj/machinery/atmospherics/unary/vent_scrubber/initialize() ..() @@ -119,16 +149,24 @@ //broadcast_status() if(!on || welded) return 0 + scrub(loc) + if (widenet) + for (var/turf/simulated/tile in adjacent_turfs) + scrub(tile) - var/datum/gas_mixture/environment = loc.return_air() +/obj/machinery/atmospherics/unary/vent_scrubber/proc/scrub(var/turf/simulated/tile) + if (!tile || !istype(tile)) + return 0 + + var/datum/gas_mixture/environment = tile.return_air() if(scrubbing) if((environment.toxins>0) || (environment.carbon_dioxide>0) || (environment.trace_gases.len>0)) var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles() //Take a gas sample - var/datum/gas_mixture/removed = loc.remove_air(transfer_moles) + var/datum/gas_mixture/removed = tile.remove_air(transfer_moles) if (isnull(removed)) //in space return @@ -155,8 +193,8 @@ //Remix the resulting gases air_contents.merge(filtered_out) - loc.assume_air(removed) - air_update_turf() + tile.assume_air(removed) + tile.air_update_turf() parent.update = 1 @@ -166,15 +204,56 @@ var/transfer_moles = environment.total_moles()*(volume_rate/environment.volume) - var/datum/gas_mixture/removed = loc.remove_air(transfer_moles) + var/datum/gas_mixture/removed = tile.remove_air(transfer_moles) air_contents.merge(removed) - air_update_turf() + tile.air_update_turf() parent.update = 1 return 1 +//There is no easy way for an object to be notified of changes to atmos can pass flags +// So we check every machinery process (2 seconds) +/obj/machinery/atmospherics/unary/vent_scrubber/process() + if (widenet) + check_turfs() + +//we populate a list of turfs with nonatmos-blocked cardinal turfs AND +// diagonal turfs that can share atmos with *both* of the cardinal turfs +/obj/machinery/atmospherics/unary/vent_scrubber/proc/check_turfs() + if (!loc || !istype(loc, /turf/simulated)) + return + + adjacent_turfs.Cut() + var/turf/simulated/curloc = loc + + for (var/direction in cardinal) + if(!(curloc.atmos_adjacent_turfs & direction)) + continue + + var/turf/simulated/S = get_step(loc, direction) + if (istype(S)) + adjacent_turfs += S + + for (var/direction in diagonals) + var/matchingDirections = 0 + var/turf/simulated/S = get_step(curloc, direction) + + for (var/checkDirection in cardinal) + if(!(S.atmos_adjacent_turfs & checkDirection)) + continue + var/turf/simulated/checkTurf = get_step(S, checkDirection) + + if (checkTurf in adjacent_turfs) + matchingDirections++ + + if (matchingDirections >= 2) + adjacent_turfs += S + break + + + /obj/machinery/atmospherics/unary/vent_scrubber/receive_signal(datum/signal/signal) if(stat & (NOPOWER|BROKEN)) return @@ -186,24 +265,10 @@ if("power_toggle" in signal.data) on = !on - if("panic_siphon" in signal.data) //must be before if("scrubbing" thing - panic = text2num(signal.data["panic_siphon"]) - if(panic) - on = 1 - scrubbing = 0 - volume_rate = 2000 - else - scrubbing = 1 - volume_rate = initial(volume_rate) - if("toggle_panic_siphon" in signal.data) - panic = !panic - if(panic) - on = 1 - scrubbing = 0 - volume_rate = 2000 - else - scrubbing = 1 - volume_rate = initial(volume_rate) + if("widenet" in signal.data) + widenet = text2num(signal.data["widenet"]) + if("toggle_widenet" in signal.data) + widenet = !widenet if("scrubbing" in signal.data) scrubbing = text2num(signal.data["scrubbing"]) @@ -234,7 +299,6 @@ broadcast_status() return //do not update_icon -// log_admin("DEBUG \[[world.timeofday]\]: vent_scrubber/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]") spawn(2) broadcast_status() update_icon() diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index dbeb74c7411..c5bc3ded116 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -32,10 +32,13 @@ #define AALARM_MODE_SCRUBBING 1 #define AALARM_MODE_VENTING 2 //makes draught -#define AALARM_MODE_PANIC 3 //constantly sucks all air +#define AALARM_MODE_PANIC 3 //like siphon, but stronger (enables widenet) #define AALARM_MODE_REPLACEMENT 4 //sucks off all air, then refill and swithes to scrubbing #define AALARM_MODE_OFF 5 #define AALARM_MODE_FLOOD 6 //Emagged mode; turns off scrubbers and pressure checks on vents +#define AALARM_MODE_SIPHON 7 //Scrubbers suck air +#define AALARM_MODE_CONTAMINATED 8 //Turns on all filtering and widenet scrubbing. +#define AALARM_MODE_REFILL 9 //just like normal, but with triple the air output #define AALARM_SCREEN_MAIN 1 #define AALARM_SCREEN_VENT 2 @@ -337,7 +340,7 @@ "long_name" = sanitize(long_name), "power" = info["power"], "scrubbing" = info["scrubbing"], - "panic" = info["panic"], + "widenet" = info["widenet"], "filter_co2" = info["filter_co2"], "filter_toxins" = info["filter_toxins"], "filter_n2o" = info["filter_n2o"] @@ -346,12 +349,15 @@ data["mode"] = mode data["modes"] = list() data["modes"] += list(list("name" = "Filtering - Scrubs out contaminants", "mode" = AALARM_MODE_SCRUBBING, "selected" = mode == AALARM_MODE_SCRUBBING, "danger" = 0)) + data["modes"] += list(list("name" = "Contaminated - Scrubs out ALL contaminants quickly","mode" = AALARM_MODE_CONTAMINATED, "selected" = mode == AALARM_MODE_CONTAMINATED, "danger" = 0)) data["modes"] += list(list("name" = "Draught - Siphons out air while replacing", "mode" = AALARM_MODE_VENTING, "selected" = mode == AALARM_MODE_VENTING, "danger" = 0)) + data["modes"] += list(list("name" = "Refill - Triple vent output", "mode" = AALARM_MODE_REFILL, "selected" = mode == AALARM_MODE_REFILL, "danger" = 0)) data["modes"] += list(list("name" = "Cycle - Siphons air before replacing", "mode" = AALARM_MODE_REPLACEMENT, "selected" = mode == AALARM_MODE_REPLACEMENT, "danger" = 1)) - data["modes"] += list(list("name" = "Panic - Siphons air out of the room", "mode" = AALARM_MODE_PANIC, "selected" = mode == AALARM_MODE_PANIC, "danger" = 1)) + data["modes"] += list(list("name" = "Siphon - Siphons air out of the room", "mode" = AALARM_MODE_SIPHON, "selected" = mode == AALARM_MODE_SIPHON, "danger" = 1)) + data["modes"] += list(list("name" = "Panic Siphon - Siphons air out of the room quickly","mode" = AALARM_MODE_PANIC, "selected" = mode == AALARM_MODE_PANIC, "danger" = 1)) data["modes"] += list(list("name" = "Off - Shuts off vents and scrubbers", "mode" = AALARM_MODE_OFF, "selected" = mode == AALARM_MODE_OFF, "danger" = 0)) if (src.emagged) - data["modes"] += list(list("name" = "Flood - Shuts off scrubbers and opens vents", "mode" = AALARM_MODE_FLOOD, "selected" = mode == AALARM_MODE_FLOOD, "danger" = 1)) + data["modes"] += list(list("name" = "Flood - Shuts off scrubbers and opens vents", "mode" = AALARM_MODE_FLOOD, "selected" = mode == AALARM_MODE_FLOOD, "danger" = 1)) if(AALARM_SCREEN_SENSORS) var/datum/tlv/selected var/list/thresholds = list() @@ -426,7 +432,7 @@ "co2_scrub", "tox_scrub", "n2o_scrub", - "panic_siphon", + "widenet", "scrubbing" ) send_signal(device_id, list (href_list["command"] = text2num(href_list["val"]))) @@ -496,8 +502,26 @@ send_signal(device_id, list( "power"= 1, "co2_scrub"= 1, + "tox_scrub"= 0, + "n2o_scrub"= 0, "scrubbing"= 1, - "panic_siphon"= 0, + "widenet"= 0, + )) + for(var/device_id in alarm_area.air_vent_names) + send_signal(device_id, list( + "power"= 1, + "checks"= 1, + "set_external_pressure"= ONE_ATMOSPHERE + )) + if(AALARM_MODE_CONTAMINATED) + for(var/device_id in alarm_area.air_scrub_names) + send_signal(device_id, list( + "power"= 1, + "co2_scrub"= 1, + "tox_scrub"= 1, + "n2o_scrub"= 1, + "scrubbing"= 1, + "widenet"= 1, )) for(var/device_id in alarm_area.air_vent_names) send_signal(device_id, list( @@ -505,19 +529,34 @@ "checks"= 1, "set_external_pressure"= ONE_ATMOSPHERE )) - if(AALARM_MODE_VENTING) for(var/device_id in alarm_area.air_scrub_names) send_signal(device_id, list( "power"= 1, - "panic_siphon"= 0, + "widenet"= 0, "scrubbing"= 0 )) for(var/device_id in alarm_area.air_vent_names) send_signal(device_id, list( "power"= 1, "checks"= 1, - "set_external_pressure"= ONE_ATMOSPHERE + "set_external_pressure" = ONE_ATMOSPHERE*2 + )) + if(AALARM_MODE_REFILL) + for(var/device_id in alarm_area.air_scrub_names) + send_signal(device_id, list( + "power"= 1, + "co2_scrub"= 1, + "tox_scrub"= 0, + "n2o_scrub"= 0, + "scrubbing"= 1, + "widenet"= 0, + )) + for(var/device_id in alarm_area.air_vent_names) + send_signal(device_id, list( + "power"= 1, + "checks"= 1, + "set_external_pressure" = ONE_ATMOSPHERE*3 )) if( AALARM_MODE_PANIC, @@ -526,16 +565,30 @@ for(var/device_id in alarm_area.air_scrub_names) send_signal(device_id, list( "power"= 1, - "panic_siphon"= 1 + "widenet"= 1, + "scrubbing"= 0 )) for(var/device_id in alarm_area.air_vent_names) send_signal(device_id, list( "power"= 0 )) + if( + AALARM_MODE_SIPHON + ) + for(var/device_id in alarm_area.air_scrub_names) + send_signal(device_id, list( + "power"= 1, + "widenet"= 0, + "scrubbing"= 0 + )) + for(var/device_id in alarm_area.air_vent_names) + send_signal(device_id, list( + "power"= 0 + )) + if(AALARM_MODE_OFF) for(var/device_id in alarm_area.air_scrub_names) send_signal(device_id, list( - "panic_siphon"= 0, "power"= 0 )) for(var/device_id in alarm_area.air_vent_names) @@ -545,7 +598,6 @@ if(AALARM_MODE_FLOOD) for(var/device_id in alarm_area.air_scrub_names) send_signal(device_id, list( - "panic_siphon"= 0, "power"=0 )) for(var/device_id in alarm_area.air_vent_names) diff --git a/nano/templates/air_alarm.tmpl b/nano/templates/air_alarm.tmpl index a5556180308..05a508dfb0f 100644 --- a/nano/templates/air_alarm.tmpl +++ b/nano/templates/air_alarm.tmpl @@ -2,18 +2,20 @@ Title: Air Alarm Used In File(s): \code\game\machinery\alarm.dm -#define AALARM_MODE_SCRUBBING 1 -#define AALARM_MODE_VENTING 2 //makes draught -#define AALARM_MODE_PANIC 3 //constantly sucks all air -#define AALARM_MODE_REPLACEMENT 4 //sucks off all air, then refill and swithes to scrubbing -#define AALARM_MODE_OFF 5 -#define AALARM_MODE_FLOOD 6 //Emagged mode; turns off scrubbers and pressure checks on vents +#define AALARM_MODE_SCRUBBING 1 +#define AALARM_MODE_VENTING 2 //makes draught +#define AALARM_MODE_PANIC 3 //like siphon, but stronger (enables widenet) +#define AALARM_MODE_REPLACEMENT 4 //sucks off all air, then refill and swithes to scrubbing +#define AALARM_MODE_OFF 5 +#define AALARM_MODE_FLOOD 6 //Emagged mode; turns off scrubbers and pressure checks on vents +#define AALARM_MODE_SIPHON 7 //Scrubbers suck air +#define AALARM_MODE_CONTAMINATED 8 //Turns on all filtering and widenet scrubbing. -#define AALARM_SCREEN_MAIN 1 -#define AALARM_SCREEN_VENT 2 -#define AALARM_SCREEN_SCRUB 3 -#define AALARM_SCREEN_MODE 4 -#define AALARM_SCREEN_SENSORS 5 +#define AALARM_SCREEN_MAIN 1 +#define AALARM_SCREEN_VENT 2 +#define AALARM_SCREEN_SCRUB 3 +#define AALARM_SCREEN_MODE 4 +#define AALARM_SCREEN_SENSORS 5 -->

@@ -155,6 +157,14 @@ Used In File(s): \code\game\machinery\alarm.dm {{:~link(scrubbing ? 'Scrubbing' : 'Siphoning', null, { 'id_tag' : id_tag, 'command' : 'scrubbing', 'val' : scrubbing ? 0 : 1}, null, scrubbing ? null : 'redButton')}}
+
+
+ Scrub Range: +
+
+ {{:~link(widenet ? 'Extended' : 'Normal', null, { 'id_tag' : id_tag, 'command' : 'widenet', 'val' : widenet ? 0 : 1}, null, widenet ? 'selected' : null)}} +
+
Filters: From 3c1e4948e34b7f82066a9d04ef3defaca8f5924d Mon Sep 17 00:00:00 2001 From: MrStonedOne Date: Mon, 13 Jul 2015 07:16:45 -0700 Subject: [PATCH 13/75] Fixes bug with atmos overlays not updating. --- code/LINDA/LINDA_turf_tile.dm | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/code/LINDA/LINDA_turf_tile.dm b/code/LINDA/LINDA_turf_tile.dm index 8d6ba7d7802..24193fa0090 100644 --- a/code/LINDA/LINDA_turf_tile.dm +++ b/code/LINDA/LINDA_turf_tile.dm @@ -6,6 +6,7 @@ var/atmos_adjacent_turfs = 0 var/atmos_adjacent_turfs_amount = 0 var/atmos_supeconductivity = 0 + var/atoms_overlay_type = "" /turf/assume_air(datum/gas_mixture/giver) //use this for machines to adjust air del(giver) @@ -76,8 +77,7 @@ air.merge(giver) - if(air.check_tile_graphic()) - update_visuals(air) + update_visuals(air) return 1 @@ -207,8 +207,7 @@ air.react() - if(air.check_tile_graphic()) - update_visuals(air) + update_visuals(air) if(air.temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) hotspot_expose(air.temperature, CELL_VOLUME) @@ -232,6 +231,9 @@ archived_cycle = SSair.times_fired /turf/simulated/proc/update_visuals(datum/gas_mixture/model) + model.check_tile_graphic() + if (atoms_overlay_type == model.graphic) + return overlays.Cut() var/siding_icon_state = return_siding_icon_state() if(siding_icon_state) @@ -241,6 +243,7 @@ overlays.Add(SSair.plasma_overlay) if("sleeping_agent") overlays.Add(SSair.sleeptoxin_overlay) + atoms_overlay_type = model.graphic /turf/simulated/proc/share_air(var/turf/simulated/T) if(T.current_cycle < current_cycle) @@ -338,8 +341,7 @@ G.moles = S.moles/turf_list.len T.air.trace_gases += G - if(T.air.check_tile_graphic()) - T.update_visuals(T.air) + T.update_visuals(T.air) /datum/excited_group/proc/dismantle() From 73c2635e5d231b3c72cd0c35f35d89557fb9d0c6 Mon Sep 17 00:00:00 2001 From: MrStonedOne Date: Mon, 13 Jul 2015 07:17:38 -0700 Subject: [PATCH 14/75] Tweaks some atmos defines relating to spreading and plasma Makes plasma show up as an overlay more easily, and makes linda less aggressive about sleeping active turfs. --- code/__DEFINES/atmospherics.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index d43fd334d1a..1745c74f2a2 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -27,7 +27,7 @@ #define TANK_RUPTURE_PRESSURE (40.*ONE_ATMOSPHERE) //Tank spills all contents into atmosphere #define TANK_FRAGMENT_PRESSURE (50.*ONE_ATMOSPHERE) //Boom 3x3 base explosion #define TANK_FRAGMENT_SCALE (10.*ONE_ATMOSPHERE) //+1 for each SCALE kPa aboe threshold -#define MINIMUM_AIR_RATIO_TO_SUSPEND 0.05 //Minimum ratio of air that must move to/from a tile to suspend group processing +#define MINIMUM_AIR_RATIO_TO_SUSPEND 0.005 //Minimum ratio of air that must move to/from a tile to suspend group processing #define MINIMUM_AIR_TO_SUSPEND (MOLES_CELLSTANDARD*MINIMUM_AIR_RATIO_TO_SUSPEND) //Minimum amount of air that has to move before a group processing can be suspended #define MINIMUM_MOLES_DELTA_TO_MOVE (MOLES_CELLSTANDARD*MINIMUM_AIR_RATIO_TO_SUSPEND) //Either this must be active #define MINIMUM_TEMPERATURE_TO_MOVE (T20C+100) //or this (or both, obviously) @@ -60,7 +60,7 @@ #define PLASMA_OXYGEN_FULLBURN 10 #define MIN_PLASMA_DAMAGE 1 #define MAX_PLASMA_DAMAGE 10 -#define MOLES_PLASMA_VISIBLE 0.7 //Moles in a standard cell after which plasma is visible +#define MOLES_PLASMA_VISIBLE 0.5 //Moles in a standard cell after which plasma is visible // Pressure limits. #define HAZARD_HIGH_PRESSURE 550 //This determins at what pressure the ultra-high pressure red icon is displayed. (This one is set as a constant) From 6937076afe9f1dd6de0e3015cfdf9b9ff19df12a Mon Sep 17 00:00:00 2001 From: Remie Richards Date: Tue, 14 Jul 2015 00:17:40 +0100 Subject: [PATCH 15/75] buffs to changelings: * Changelings now regenerate chemicals while dead, up to half and ONLY HALF of their maximum storage (taking into account their storage upgrades, if applicable) * Changelings now repair geneticdamage while dead, with the lowest value they can be taken to being 50, this number is arbitrary but was based on half the value at which fakedeath stops working for too much geneticdamage * Changeling fakedeath timer is now halved, down from 80 seconds (1 minute 20 seconds) to 40 seconds. --- code/game/gamemodes/changeling/changeling.dm | 16 +++++++++++++--- .../gamemodes/changeling/powers/fakedeath.dm | 2 +- code/modules/mob/living/carbon/human/life.dm | 2 +- code/modules/mob/living/carbon/life.dm | 7 ++++--- code/modules/mob/living/life.dm | 2 -- 5 files changed, 19 insertions(+), 10 deletions(-) diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index b7eec7d9187..39894b02956 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -1,3 +1,8 @@ + +#define LING_FAKEDEATH_TIME 400 //40 seconds +#define LING_DEAD_GENETICDAMAGE_HEAL_CAP 50 //The lowest value of geneticdamage handle_changeling() can take it to while dead. + + var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega") /datum/game_mode @@ -261,9 +266,14 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" absorbed_dna.len = dna_max -/datum/changeling/proc/regenerate() - chem_charges = min(max(0, chem_charges + chem_recharge_rate - chem_recharge_slowdown), chem_storage) - geneticdamage = max(0, geneticdamage-1) +/datum/changeling/proc/regenerate(var/mob/living/carbon/the_ling) + if(istype(the_ling)) + if(the_ling.stat == DEAD) + chem_charges = min(max(0, chem_charges + chem_recharge_rate - chem_recharge_slowdown), (chem_storage*0.5)) + geneticdamage = max(LING_DEAD_GENETICDAMAGE_HEAL_CAP,geneticdamage-1) + else //not dead? no chem/geneticdamage caps. + chem_charges = min(max(0, chem_charges + chem_recharge_rate - chem_recharge_slowdown), chem_storage) + geneticdamage = max(0, geneticdamage-1) /datum/changeling/proc/get_dna(var/dna_owner) diff --git a/code/game/gamemodes/changeling/powers/fakedeath.dm b/code/game/gamemodes/changeling/powers/fakedeath.dm index f09eeceb54d..dd3527f3988 100644 --- a/code/game/gamemodes/changeling/powers/fakedeath.dm +++ b/code/game/gamemodes/changeling/powers/fakedeath.dm @@ -16,7 +16,7 @@ if(user.stat != DEAD) user.emote("deathgasp") user.tod = worldtime2text() - spawn(800) + spawn(LING_FAKEDEATH_TIME) if(user && user.mind && user.mind.changeling && user.mind.changeling.purchasedpowers) user << "We are ready to regenerate." user.mind.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/revive(null) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index bfa438e032f..67801be1087 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -302,7 +302,7 @@ /mob/living/carbon/human/handle_changeling() if(mind && hud_used) if(mind.changeling) - mind.changeling.regenerate() + mind.changeling.regenerate(src) hud_used.lingchemdisplay.invisibility = 0 hud_used.lingchemdisplay.maptext = "
[round(mind.changeling.chem_charges)]
" else diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 40e05df8060..11d48e98d45 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -8,9 +8,10 @@ return if(..()) - //Updates the number of stored chemicals for powers - handle_changeling() - return 1 + . = 1 + + //Updates the number of stored chemicals for powers + handle_changeling() /////////////// // BREATHING // diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index bdd6bd4119a..4b45ec8dcd5 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -54,8 +54,6 @@ if(client) handle_regular_hud_updates() - return . - /mob/living/proc/handle_breathing() From 26428f72ab4526a100c3d8523cc59f9441d82e70 Mon Sep 17 00:00:00 2001 From: phil235 Date: Tue, 14 Jul 2015 01:27:06 +0200 Subject: [PATCH 16/75] Fix some merge conflict stuff --- code/game/mecha/equipment/tools/medical_tools.dm | 2 +- code/game/mecha/equipment/tools/mining_tools.dm | 2 +- code/game/mecha/equipment/tools/work_tools.dm | 2 +- code/game/mecha/mecha_defense.dm | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index 6d4d76fd612..ffafd888832 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -181,7 +181,7 @@ if(to_inject && patient.reagents.get_reagent_amount(R.id) + to_inject <= inject_amount*2) occupant_message("Injecting [patient] with [to_inject] units of [R.name].") log_message("Injecting [patient] with [to_inject] units of [R.name].") - add_logs(chassis.occupant, patient, "injected", object="[name] ([R] - [to_inject] units)") + add_logs(chassis.occupant, patient, "injected", "[name] ([R] - [to_inject] units)") SG.reagents.trans_id_to(patient,R.id,to_inject) update_equip_info() return diff --git a/code/game/mecha/equipment/tools/mining_tools.dm b/code/game/mecha/equipment/tools/mining_tools.dm index 0cc2255b75f..7d786f075db 100644 --- a/code/game/mecha/equipment/tools/mining_tools.dm +++ b/code/game/mecha/equipment/tools/mining_tools.dm @@ -73,7 +73,7 @@ /obj/item/mecha_parts/mecha_equipment/drill/proc/drill_mob(mob/living/target, mob/user, var/drill_damage=80) target.visible_message("[chassis] drills [target] with [src].", \ "[chassis] drills [target] with [src].") - add_logs(user, target, "attacked", object="[name]", addition="(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(damtype)])") + add_logs(user, target, "attacked", "[name]", "(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(damtype)])") if(ishuman(target)) var/mob/living/carbon/human/H = target var/obj/item/organ/limb/affecting = H.get_organ("chest") diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index 515fe52c2a2..ef4de9cf891 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -62,7 +62,7 @@ target.visible_message("[chassis] squeezes [target].", \ "[chassis] squeezes [target].",\ "You hear something crack.") - add_logs(chassis.occupant, M, "attacked", object="[name]", addition="(INTENT: [uppertext(chassis.occupant.a_intent)]) (DAMTYE: [uppertext(damtype)])") + add_logs(chassis.occupant, M, "attacked", "[name]", "(INTENT: [uppertext(chassis.occupant.a_intent)]) (DAMTYE: [uppertext(damtype)])") else step_away(M,chassis) occupant_message("You push [target] out of the way.") diff --git a/code/game/mecha/mecha_defense.dm b/code/game/mecha/mecha_defense.dm index 3b61b31887f..e6d498dd0f4 100644 --- a/code/game/mecha/mecha_defense.dm +++ b/code/game/mecha/mecha_defense.dm @@ -341,5 +341,5 @@ return visible_message("[M.name] has hit [src].") take_damage(M.force, damtype) - add_logs(M.occupant, src, "attacked", object=M, addition="(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])") + add_logs(M.occupant, src, "attacked", M, "(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])") return \ No newline at end of file From 1dc5f1a1ae72d1b4afb022308d7baeeeb573685e Mon Sep 17 00:00:00 2001 From: xxalpha Date: Tue, 14 Jul 2015 00:57:05 +0100 Subject: [PATCH 17/75] Removed spawn because aran yelled at me --- code/__HELPERS/icon_smoothing.dm | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm index 16d6f49e3cb..0d823e39fb6 100644 --- a/code/__HELPERS/icon_smoothing.dm +++ b/code/__HELPERS/icon_smoothing.dm @@ -42,20 +42,19 @@ return adjacencies /proc/smooth_icon(atom/A) - spawn(2) - if(A && A.smooth) - clear_overlays(A) - var/adjacencies = calculate_adjacencies(A) + if(A && A.smooth) + clear_overlays(A) + var/adjacencies = calculate_adjacencies(A) - A.top_left_corner = make_nw_corner(adjacencies) - A.top_right_corner = make_ne_corner(adjacencies) - A.bottom_left_corner = make_sw_corner(adjacencies) - A.bottom_right_corner = make_se_corner(adjacencies) + A.top_left_corner = make_nw_corner(adjacencies) + A.top_right_corner = make_ne_corner(adjacencies) + A.bottom_left_corner = make_sw_corner(adjacencies) + A.bottom_right_corner = make_se_corner(adjacencies) - A.overlays += A.top_left_corner - A.overlays += A.top_right_corner - A.overlays += A.bottom_right_corner - A.overlays += A.bottom_left_corner + A.overlays += A.top_left_corner + A.overlays += A.top_right_corner + A.overlays += A.bottom_right_corner + A.overlays += A.bottom_left_corner /proc/make_nw_corner(adjacencies) From f72da939550fe6a18e151d45ad6b4106ff06da77 Mon Sep 17 00:00:00 2001 From: Remie Richards Date: Tue, 14 Jul 2015 00:59:38 +0100 Subject: [PATCH 18/75] Changelog, since this is a balance PR and people need to know that ling is less shit. --- html/changelogs/RemieRichards-PR-10599.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 html/changelogs/RemieRichards-PR-10599.yml diff --git a/html/changelogs/RemieRichards-PR-10599.yml b/html/changelogs/RemieRichards-PR-10599.yml new file mode 100644 index 00000000000..32310e98e5a --- /dev/null +++ b/html/changelogs/RemieRichards-PR-10599.yml @@ -0,0 +1,10 @@ + +author: RemieRichards + +delete-after: True + +changes: + - tweak: "Changelings now regenerate chemicals and geneticdamage while dead, but only up to specific caps (50% of their max chem storage, and 50 geneticdamage)" + - tweak: "Fakedeath's length has been reduced from 80s dead (1 minute 20) to 40s dead" + + \ No newline at end of file From 85e64ae7e02383702f7f5124dc6683e0a6bc67db Mon Sep 17 00:00:00 2001 From: oranges Date: Tue, 14 Jul 2015 13:11:38 +1200 Subject: [PATCH 19/75] Adds some more messages for braindamage gibbering --- code/modules/mob/living/carbon/human/life.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index bfa438e032f..ba202f9f50b 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -76,7 +76,7 @@ if (getBrainLoss() >= 60 && stat != DEAD) if (prob(3)) - switch(pick(1,2,3,4)) + switch(pick(1,2,3,4,5)) if(1) say(pick("IM A PONY NEEEEEEIIIIIIIIIGH", "without oxigen blob don't evoluate?", "CAPTAINS A COMDOM", "[pick("", "that faggot traitor")] [pick("joerge", "george", "gorge", "gdoruge")] [pick("mellens", "melons", "mwrlins")] is grifing me HAL;P!!!", "can u give me [pick("telikesis","halk","eppilapse","kamelien","eksrey","glowey skin")]?", "THe saiyans screwed", "Bi is THE BEST OF BOTH WORLDS>", "I WANNA PET TEH monkeyS", "stop grifing me!!!!", "SOTP IT#", "shiggey diggey!!", "A PIRATE APPEAR")) if(2) @@ -85,6 +85,8 @@ say(pick("GEY AWAY FROM ME U GREIFING PRICK!!!!", "ur a fuckeing autist!", ";HELP SHITECIRTY MURDERIN MEE!!!", "hwat dose tha [pick("g", "squid", "r")] mean?????", "CAL; TEH SHUTTLE!!!!!", "wearnig siNGUARLTY IS .... FIne xDDDDDDDDD", "AI laW 22 Open door", "this SI mY stATIon......", "who the HELL do u thenk u r?!!!!", "geT THE FUCK OUTTTT", "H U G B O X", ";;CRAGING THIS STTAYTION WITH NIO SURVIVROS", "[pick("bager", "syebl")] is down11!!!!!!!!!!!!!!!!!", "PSHOOOM")) if(4) emote("drool") + if(5) + say(pick("REMOVE SINGULARITY", "INSTLL TEG", "TURBIN IS BEST ENGIENE", "SOLIRS CAN POWER THE HOLE STATION ANEWAY")) /mob/living/carbon/human/handle_mutations_and_radiation() From 8a2ad876948190765d5448ac287252ab6c02a48e Mon Sep 17 00:00:00 2001 From: Remie Richards Date: Tue, 14 Jul 2015 03:20:39 +0100 Subject: [PATCH 20/75] Lings now get to see the last 8 messages the person they absorbed said, to allow for better impersonations. --- code/game/gamemodes/changeling/changeling.dm | 2 +- .../gamemodes/changeling/powers/absorb.dm | 21 +++++++++++++++++++ code/modules/mob/living/living_defines.dm | 4 +++- code/modules/mob/living/say.dm | 7 +++++-- html/changelogs/RemieRichards-PR-10599.yml | 1 + 5 files changed, 31 insertions(+), 4 deletions(-) diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 39894b02956..0a1211a3eef 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -1,7 +1,7 @@ #define LING_FAKEDEATH_TIME 400 //40 seconds #define LING_DEAD_GENETICDAMAGE_HEAL_CAP 50 //The lowest value of geneticdamage handle_changeling() can take it to while dead. - +#define LING_ABSORB_RECENT_SPEECH 8 //The amount of recent spoken lines to gain on absorbing a mob var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega") diff --git a/code/game/gamemodes/changeling/powers/absorb.dm b/code/game/gamemodes/changeling/powers/absorb.dm index 516a407cbef..7bbd247c13d 100644 --- a/code/game/gamemodes/changeling/powers/absorb.dm +++ b/code/game/gamemodes/changeling/powers/absorb.dm @@ -63,6 +63,27 @@ target.mind.show_memory(src, 0) //I can read your mind, kekeke. Output all their notes. + //Some of target's recent speech, so the changeling can attempt to imitate them better. + //Recent as opposed to all because rounds tend to have a LOT of text. + var/list/recent_speech = list() + + if(target.say_log.len > LING_ABSORB_RECENT_SPEECH) + recent_speech = target.say_log.Copy(target.say_log.len-LING_ABSORB_RECENT_SPEECH+1,0) //0 so len-LING_ARS+1 to end of list + else + for(var/spoken_memory in target.say_log) + if(recent_speech.len >= LING_ABSORB_RECENT_SPEECH) + break + recent_speech += spoken_memory + + if(recent_speech.len) + user.mind.store_memory("Some of [target]'s speech patterns, we should study these to better impersonate them!") + user << "Some of [target]'s speech patterns, we should study these to better impersonate them!" + for(var/spoken_memory in recent_speech) + user.mind.store_memory("\"[spoken_memory]\"") + user << "\"[spoken_memory]\"" + user.mind.store_memory("We have no more knowledge of [target]'s speech patterns.") + user << "We have no more knowledge of [target]'s speech patterns." + if(target.mind.changeling)//If the target was a changeling, suck out their extra juice and objective points! changeling.chem_charges += min(target.mind.changeling.chem_charges, changeling.chem_storage) changeling.absorbedcount += (target.mind.changeling.absorbedcount) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index b48f2f21e14..096da4e0b0d 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -45,4 +45,6 @@ var/list/pipes_shown = list() var/last_played_vent - var/smoke_delay = 0 //used to prevent spam with smoke reagent reaction on mob. \ No newline at end of file + var/smoke_delay = 0 //used to prevent spam with smoke reagent reaction on mob. + + var/list/say_log = list() //a log of what we've said, plain text, no spans or junk, essentially just each individual "message" \ No newline at end of file diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index a0df06a9088..f7910fd9d77 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -87,7 +87,7 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) return if(!can_speak_vocal(message)) - src << "You find yourself unable to speak!" + src << "You find yourself unable to speak!" return message = treat_message(message) @@ -97,6 +97,9 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) if(!message) return + //Log of what we've said, plain message, no spans or junk + say_log += message + var/message_range = 7 var/radio_return = radio(message, message_mode, spans) if(radio_return & NOPASS) //There's a whisper() message_mode, no need to continue the proc if that is called @@ -272,4 +275,4 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) return "stammers, \"[tempinput]\"" if (getBrainLoss() >= 60) return "gibbers, \"[tempinput]\"" - return ..() + return ..() \ No newline at end of file diff --git a/html/changelogs/RemieRichards-PR-10599.yml b/html/changelogs/RemieRichards-PR-10599.yml index 32310e98e5a..7f89855a7c0 100644 --- a/html/changelogs/RemieRichards-PR-10599.yml +++ b/html/changelogs/RemieRichards-PR-10599.yml @@ -6,5 +6,6 @@ delete-after: True changes: - tweak: "Changelings now regenerate chemicals and geneticdamage while dead, but only up to specific caps (50% of their max chem storage, and 50 geneticdamage)" - tweak: "Fakedeath's length has been reduced from 80s dead (1 minute 20) to 40s dead" + - rscadd: "Changelings now get to see the last 8 messages the person they absorbed said, to allow them to better impersonate their victim's speech patterns" \ No newline at end of file From 360822af44cfb146a6ef0ad7a538f817b7489475 Mon Sep 17 00:00:00 2001 From: CorruptComputer Date: Tue, 14 Jul 2015 00:51:35 -0500 Subject: [PATCH 21/75] Fixed path errors on shuttles Fixed the escape shuttle being cut in half Fixed some pipes in atmos room being hidden Added lights to atmos room (how the fuck did I miss this?) Fixed some issues with the main power line --- .../AsteroidStation/Asteroidstation.dmm | 333 +++++++++-------- _maps/map_files/AsteroidStation/readme.dm | 6 - _maps/map_files/AsteroidStation/z2.dmm | 339 +++++++++--------- 3 files changed, 344 insertions(+), 334 deletions(-) delete mode 100644 _maps/map_files/AsteroidStation/readme.dm diff --git a/_maps/map_files/AsteroidStation/Asteroidstation.dmm b/_maps/map_files/AsteroidStation/Asteroidstation.dmm index cb5952c9593..e4393e25946 100644 --- a/_maps/map_files/AsteroidStation/Asteroidstation.dmm +++ b/_maps/map_files/AsteroidStation/Asteroidstation.dmm @@ -11,49 +11,49 @@ "aak" = (/obj/structure/lattice,/turf/space,/area/space) "aal" = (/turf/simulated/floor/plating/asteroid/airless,/area/mine/explored) "aam" = (/turf/simulated/floor/plating/asteroid/airless,/area/space) -"aan" = (/turf/simulated/wall/shuttle{icon_state = "swall_s6"},/area/space) -"aao" = (/turf/simulated/wall/shuttle{icon_state = "swall14"},/area/space) -"aap" = (/turf/simulated/wall/shuttle{icon_state = "swall12"},/area/space) -"aaq" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/floor/plasteel/shuttle,/area/space) -"aar" = (/turf/space,/turf/simulated/wall/shuttle{dir = 3; icon_state = "swall_f10"},/area/space) -"aas" = (/obj/structure/shuttle/engine/propulsion{dir = 4},/turf/space,/area/space) -"aat" = (/turf/simulated/wall/shuttle{icon_state = "swall11"},/area/space) -"aau" = (/turf/simulated/floor/plasteel/shuttle,/area/space) -"aav" = (/obj/machinery/computer/arcade,/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaw" = (/obj/structure/closet/wardrobe/white,/turf/simulated/floor/plasteel/shuttle,/area/space) -"aax" = (/obj/structure/closet/wardrobe/black,/turf/simulated/floor/plasteel/shuttle,/area/space) -"aay" = (/turf/simulated/wall/shuttle{icon_state = "swall7"},/area/space) -"aaz" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f10"},/area/space) -"aaA" = (/obj/structure/shuttle/engine/heater{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/space) -"aaB" = (/obj/structure/stool/bed/chair{dir = 4},/obj/effect/landmark{name = "JoinLate"},/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaC" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaD" = (/obj/structure/table,/obj/item/weapon/pen,/obj/item/weapon/paper{icon_state = "paper_words"; info = "Pilot's Log, . I think the engine trouble might be serious this time. This station hasn't exactly been a big help for fixing our problems, either; so I think this shuttle's grounded for the forseeable future. Fuck."; name = "Pilot's Log"},/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaE" = (/turf/simulated/wall/shuttle{icon_state = "swall3"},/area/space) -"aaF" = (/obj/effect/landmark{name = "Observer-Start"},/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaG" = (/obj/machinery/door/airlock/shuttle{name = "Arrivals Shuttle Airlock"},/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaH" = (/obj/structure/table,/obj/item/weapon/cigbutt/cigarbutt,/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaI" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f6"},/area/space) -"aaJ" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaK" = (/obj/structure/table,/obj/machinery/microwave,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaL" = (/obj/structure/closet/wardrobe/grey,/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaM" = (/obj/structure/closet/wardrobe/green,/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaN" = (/obj/structure/table,/obj/machinery/requests_console{department = "Arrival shuttle"; name = "Arrivals Shuttle Requests Console"; pixel_y = -30},/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaO" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f9"},/area/space) -"aaP" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/status_display{pixel_x = 32},/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaQ" = (/turf/simulated/wall/shuttle{icon_state = "swall_s5"},/area/space) -"aaR" = (/turf/simulated/wall/shuttle{icon_state = "swall13"},/area/space) -"aaS" = (/obj/machinery/door/airlock/shuttle{name = "Arrivals Shuttle Airlock"},/obj/docking_port/mobile{dwidth = 5; height = 7; id = "arrival"; name = "arrival shuttle"; travelDir = -90; width = 15},/obj/docking_port/stationary{dwidth = 5; height = 7; id = "arrival_home"; name = "port bay 1"; width = 15},/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaT" = (/turf/simulated/wall/shuttle{icon_state = "swall_s9"},/area/space) -"aaU" = (/obj/structure/stool/bed/chair{dir = 1},/obj/item/device/radio/intercom{pixel_x = 25},/turf/simulated/floor/plasteel/shuttle,/area/space) +"aan" = (/turf/simulated/wall/shuttle{icon_state = "swall_s6"},/area/shuttle/arrival) +"aao" = (/turf/simulated/wall/shuttle{icon_state = "swall12"},/area/shuttle/arrival) +"aap" = (/turf/simulated/wall/shuttle{icon_state = "swall14"},/area/shuttle/arrival) +"aaq" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aar" = (/turf/space,/turf/simulated/wall/shuttle{dir = 3; icon_state = "swall_f10"},/area/shuttle/arrival) +"aas" = (/obj/structure/shuttle/engine/propulsion{dir = 4},/turf/space,/area/shuttle/arrival) +"aat" = (/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aau" = (/turf/simulated/wall/shuttle{icon_state = "swall11"},/area/shuttle/arrival) +"aav" = (/obj/machinery/computer/arcade,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aaw" = (/obj/structure/closet/wardrobe/black,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aax" = (/obj/structure/closet/wardrobe/white,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aay" = (/turf/simulated/wall/shuttle{icon_state = "swall7"},/area/shuttle/arrival) +"aaz" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f10"},/area/shuttle/arrival) +"aaA" = (/obj/structure/shuttle/engine/heater{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/shuttle/arrival) +"aaB" = (/obj/structure/stool/bed/chair{dir = 4},/obj/effect/landmark{name = "JoinLate"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aaC" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aaD" = (/turf/simulated/wall/shuttle{icon_state = "swall3"},/area/shuttle/arrival) +"aaE" = (/obj/structure/table,/obj/item/weapon/pen,/obj/item/weapon/paper{icon_state = "paper_words"; info = "Pilot's Log, . I think the engine trouble might be serious this time. This station hasn't exactly been a big help for fixing our problems, either; so I think this shuttle's grounded for the forseeable future. Fuck."; name = "Pilot's Log"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aaF" = (/obj/effect/landmark{name = "Observer-Start"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aaG" = (/obj/machinery/door/airlock/shuttle{name = "Arrivals Shuttle Airlock"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aaH" = (/obj/structure/table,/obj/item/weapon/cigbutt/cigarbutt,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aaI" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f6"},/area/shuttle/pod_1) +"aaJ" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f10"},/area/shuttle/pod_1) +"aaK" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_1) +"aaL" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f6"},/area/shuttle/pod_2) +"aaM" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f10"},/area/shuttle/pod_2) +"aaN" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_2) +"aaO" = (/obj/structure/table,/obj/machinery/microwave,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aaP" = (/obj/structure/closet/wardrobe/green,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aaQ" = (/obj/structure/closet/wardrobe/grey,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aaR" = (/obj/structure/table,/obj/machinery/requests_console{department = "Arrival shuttle"; name = "Arrivals Shuttle Requests Console"; pixel_y = -30},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aaS" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f9"},/area/shuttle/arrival) +"aaT" = (/turf/simulated/wall/shuttle{icon_state = "swall3"},/area/shuttle/pod_1) +"aaU" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/status_display{pixel_x = 32},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_1) "aaV" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/entry) "aaW" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry{name = "Arrivals Lounge"}) "aaX" = (/obj/machinery/door/airlock/external{name = "Arrivals Docking Airlock"},/turf/simulated/floor/plating,/area/hallway/secondary/entry{name = "Arrivals Lounge"}) "aaY" = (/turf/simulated/wall,/area/hallway/secondary/entry{name = "Arrivals Lounge"}) -"aaZ" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/wall/shuttle{icon_state = "swall_f5"},/area/space) -"aba" = (/obj/machinery/door/airlock/shuttle{name = "Escape Pod Airlock"},/obj/docking_port/mobile/pod{id = "pod1"; name = "escape pod 1"},/turf/simulated/floor/plasteel/shuttle,/area/space) -"abb" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/wall/shuttle{icon_state = "swall_f9"},/area/space) +"aaZ" = (/turf/simulated/wall/shuttle{icon_state = "swall3"},/area/shuttle/pod_2) +"aba" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/status_display{pixel_x = 32},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_2) +"abb" = (/turf/simulated/wall/shuttle{icon_state = "swall_s5"},/area/shuttle/arrival) "abc" = (/turf/simulated/wall,/area/hallway/secondary/entry) -"abd" = (/obj/machinery/door/airlock/shuttle{name = "Escape Pod Airlock"},/obj/docking_port/mobile/pod{id = "pod2"; name = "escape pod 2"},/turf/simulated/floor/plasteel/shuttle,/area/space) +"abd" = (/turf/simulated/wall/shuttle{icon_state = "swall13"},/area/shuttle/arrival) "abe" = (/turf/simulated/floor/plating,/area/hallway/secondary/entry{name = "Arrivals Lounge"}) "abf" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry{name = "Arrivals Lounge"}) "abg" = (/obj/structure/closet/emcloset,/obj/machinery/camera{c_tag = "Escape Pod One"; dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry{name = "Arrivals Lounge"}) @@ -170,7 +170,7 @@ "adn" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; pixel_y = 0},/turf/simulated/floor/plating,/area/construction) "ado" = (/turf/simulated/floor/plasteel,/area/construction) "adp" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai) -"adq" = (/obj/structure/cable/orange{icon_state = "0-2"; d1 = 1; d2 = 2},/obj/machinery/power/smes,/turf/simulated/floor/plating,/area/maintenance/fpmaint) +"adq" = (/obj/machinery/door/airlock/shuttle{name = "Arrivals Shuttle Airlock"},/obj/docking_port/mobile{dwidth = 5; height = 7; id = "arrival"; name = "arrival shuttle"; travelDir = -90; width = 15},/obj/docking_port/stationary{dwidth = 5; height = 7; id = "arrival_home"; name = "port bay 1"; width = 15},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) "adr" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint) "ads" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/wall,/area/maintenance/fpmaint) "adt" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/fpmaint) @@ -192,8 +192,8 @@ "adJ" = (/obj/machinery/light_construct,/turf/simulated/floor/plating,/area/construction) "adK" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/construction) "adL" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/floor/plasteel,/area/construction) -"adM" = (/turf/simulated/wall,/area/mine/explored) -"adN" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/smes{charge = 5e+006},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"adM" = (/turf/simulated/wall/shuttle{icon_state = "swall_s9"},/area/shuttle/arrival) +"adN" = (/obj/structure/stool/bed/chair{dir = 1},/obj/item/device/radio/intercom{pixel_x = 25},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_1) "adO" = (/obj/machinery/power/terminal{dir = 8},/turf/simulated/wall/r_wall,/area/turret_protected/ai) "adP" = (/obj/structure/cable/orange{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera{c_tag = "Arrivals Power Control"; dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint) "adQ" = (/obj/structure/cable/orange{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 4; name = "E.V.A. Maintenance APC"; pixel_x = 24},/turf/simulated/floor/plating,/area/maintenance/fpmaint) @@ -453,7 +453,7 @@ "aiK" = (/obj/structure/cable/orange{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall,/area/maintenance/apmaint) "aiL" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/machinery/door/airlock/atmos{name = "Cargo Atmospheric Control"; req_access_txt = "24"},/turf/simulated/floor/plating,/area/maintenance/apmaint) "aiM" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/maintenance/apmaint) -"aiN" = (/obj/docking_port/stationary{dir = 8; dwidth = 5; height = 7; id = "supply_home"; name = "supply bay"; width = 12},/turf/space,/area/space) +"aiN" = (/obj/structure/stool/bed/chair{dir = 1},/obj/item/device/radio/intercom{pixel_x = 25},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_2) "aiO" = (/obj/machinery/telecomms/bus/preset_two,/turf/simulated/floor/bluegrid{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server) "aiP" = (/obj/machinery/telecomms/processor/preset_one,/turf/simulated/floor/bluegrid{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server) "aiQ" = (/obj/machinery/power/apc{dir = 1; name = "Telecommunications APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/tcommsat/server) @@ -563,7 +563,7 @@ "akQ" = (/obj/machinery/door/airlock/highsecurity{desc = "The heart of the AI, defended by autoturrets and motion alarms."; icon_state = "door_locked"; locked = 1; name = "AI Chamber"; req_access_txt = "16"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) "akR" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/turret_protected/ai) "akS" = (/turf/simulated/wall/r_wall,/area/mine/explored) -"akT" = (/obj/machinery/power/smes,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) +"akT" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/wall/shuttle{icon_state = "swall_f5"},/area/shuttle/pod_1) "akU" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "akV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "akW" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) @@ -592,7 +592,7 @@ "alt" = (/obj/machinery/conveyor{id = "QMLoad"},/obj/machinery/door/poddoor{id = "QMLoaddoor"; name = "Supply Dock Loading Door"},/turf/simulated/floor/plating{icon_state = "warnplatecorner"},/area/quartermaster/office) "alu" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/tcommsat/server) "alv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/tcommsat/server) -"alw" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes{charge = 5e+006},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/tcommsat/server) +"alw" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/wall/shuttle{icon_state = "swall_f9"},/area/shuttle/pod_1) "alx" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload) "aly" = (/obj/machinery/light_switch{dir = 1; pixel_y = 22},/obj/machinery/porta_turret{ai = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "alz" = (/obj/machinery/flasher{id = "AI"; pixel_x = 6; pixel_y = 32},/obj/machinery/computer/upload/ai,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) @@ -1249,7 +1249,7 @@ "aya" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/blue{icon_state = "1-4"; d1 = 1; d2 = 2},/turf/simulated/floor/plasteel{icon_state = "neutralcorner"},/area/hallway/primary/starboard{name = "Starboard Hallway"}) "ayb" = (/obj/structure/cable/blue{icon_state = "4-8"; d1 = 1; d2 = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall,/area/hallway/primary/starboard{name = "Starboard Hallway"}) "ayc" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/blue{icon_state = "2-8"; d1 = 1; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/maintcentral) -"ayd" = (/obj/machinery/power/smes,/obj/structure/cable/blue{icon_state = "0-4"; d1 = 1; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"ayd" = (/obj/machinery/door/airlock/shuttle{name = "Escape Pod Airlock"},/obj/docking_port/mobile/pod{id = "pod1"; name = "escape pod 1"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_1) "aye" = (/obj/structure/cable/blue{icon_state = "2-8"; d1 = 1; d2 = 2},/obj/machinery/camera{c_tag = "Bridge Power Control"},/turf/simulated/floor/plating,/area/maintenance/maintcentral) "ayf" = (/obj/item/weapon/pickaxe{pixel_x = 5},/turf/simulated/floor/plating,/area/construction/Storage{name = "Construction Site"}) "ayg" = (/turf/simulated/floor/plating,/area/construction/Storage{name = "Construction Site"}) @@ -1793,7 +1793,7 @@ "aIy" = (/obj/structure/transit_tube{icon_state = "E-W-Pass"},/turf/space,/area/space) "aIz" = (/obj/structure/transit_tube{icon_state = "W-NE"},/turf/space,/area/space) "aIA" = (/obj/machinery/power/terminal{dir = 4},/turf/simulated/wall/r_wall,/area/engine/gravity_generator) -"aIB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel,/area/engine/gravity_generator) +"aIB" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/wall/shuttle{icon_state = "swall_f5"},/area/shuttle/pod_2) "aIC" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plasteel,/area/engine/gravity_generator) "aID" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/light{dir = 1},/obj/structure/table,/obj/item/weapon/paper/gravity_gen,/obj/item/weapon/pen/blue,/turf/simulated/floor/plasteel,/area/engine/gravity_generator) "aIE" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/firealarm{pixel_y = 25},/obj/structure/stool/bed/chair/office/light{dir = 8},/turf/simulated/floor/plasteel,/area/engine/gravity_generator) @@ -2081,7 +2081,7 @@ "aOa" = (/obj/machinery/light_switch{dir = 4; pixel_x = 22},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/obj/structure/cable/blue{icon_state = "2-8"; d1 = 1; d2 = 2},/turf/simulated/floor/wood,/area/crew_quarters/captain) "aOb" = (/obj/structure/sign/pods,/turf/simulated/wall,/area/bridge) "aOc" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/bridge) -"aOd" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f6"},/area/space) +"aOd" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/wall/shuttle{icon_state = "swall_f9"},/area/shuttle/pod_2) "aOe" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/obj/machinery/camera{c_tag = "Prison Fore"; dir = 4; network = list("SS13","Prison")},/turf/simulated/floor/plasteel,/area/security/prison) "aOf" = (/turf/simulated/floor/plasteel,/area/security/prison) "aOg" = (/obj/machinery/washing_machine,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/security/prison) @@ -2131,7 +2131,7 @@ "aOY" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/starboard{name = "Starboard Hallway"}) "aOZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard{name = "Starboard Hallway"}) "aPa" = (/obj/structure/cable,/obj/machinery/power/terminal{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"aPb" = (/obj/structure/cable/green,/obj/machinery/power/smes,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"aPb" = (/obj/machinery/door/airlock/shuttle{name = "Escape Pod Airlock"},/obj/docking_port/mobile/pod{id = "pod2"; name = "escape pod 2"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_2) "aPc" = (/turf/simulated/wall,/area/crew_quarters/kitchen) "aPd" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; freq = 1400; location = "Kitchen"},/obj/structure/plasticflaps,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "loadingarea"},/area/crew_quarters/kitchen) "aPe" = (/obj/structure/cable/green{icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{name = "Kitchen Maintenance"; req_access_txt = "28"; req_one_access_txt = "0"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) @@ -2146,9 +2146,9 @@ "aPn" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/command{desc = "The office of the station's commanding officer, answerable only to Central Command and Space Law."; name = "Captain's Quarters"; req_access = null; req_access_txt = "20"},/turf/simulated/floor/wood,/area/crew_quarters/captain) "aPo" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/crew_quarters/captain) "aPp" = (/obj/machinery/light/small{dir = 8},/obj/machinery/camera{c_tag = "Bridge Escape Pod"; dir = 4},/turf/simulated/floor/plating,/area/bridge) -"aPq" = (/obj/machinery/door/airlock/shuttle{name = "Escape Pod Airlock"},/obj/docking_port/mobile/pod{dir = 4; id = "pod3"; name = "escape pod 3"},/turf/simulated/floor/plasteel/shuttle,/area/space) -"aPr" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor/plasteel/shuttle,/area/space) -"aPs" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/status_display{pixel_y = 32},/turf/simulated/floor/plasteel/shuttle,/area/space) +"aPq" = (/obj/structure/cable/orange{icon_state = "0-2"; d1 = 1; d2 = 2},/obj/machinery/power/smes{charge = 1e+006},/turf/simulated/floor/plating,/area/maintenance/fpmaint) +"aPr" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/smes{charge = 1e+006},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"aPs" = (/turf/space,/area/shuttle/supply) "aPt" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/security/prison) "aPu" = (/obj/structure/table,/turf/simulated/floor/plasteel,/area/security/prison) "aPv" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "permacell1"; name = "Cell Shutters"; opacity = 0},/obj/machinery/door/airlock/glass{id_tag = "permabolt1"; name = "Cell 1"},/turf/simulated/floor/plasteel,/area/security/prison) @@ -2203,7 +2203,7 @@ "aQs" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/requests_console{announcementConsole = 1; department = "Bridge"; departmentType = 5; name = "Bridge Requests Console"; pixel_y = 30},/turf/simulated/floor/plasteel,/area/bridge) "aQt" = (/obj/machinery/door/airlock/external{desc = "Leads to one of the station's small, FTL-capable lifeboats."; name = "Bridge Escape Pod"; req_access = null; req_access_txt = "0"},/obj/structure/cable/blue{icon_state = "4-8"; d1 = 1; d2 = 2},/turf/simulated/floor/plating,/area/bridge) "aQu" = (/turf/simulated/floor/plating,/area/bridge) -"aQv" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f5"},/area/space) +"aQv" = (/obj/docking_port/stationary{dir = 8; dwidth = 5; height = 7; id = "supply_home"; name = "supply bay"; width = 12},/turf/space,/area/shuttle/supply) "aQw" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/prison) "aQx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/security/prison) "aQy" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel,/area/security/prison) @@ -3040,7 +3040,7 @@ "bgx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/engine/engineering) "bgy" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/engine/engineering) "bgz" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/engine/engineering) -"bgA" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes,/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/engine/engineering) +"bgA" = (/obj/machinery/power/smes{charge = 1e+006},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "bgB" = (/obj/machinery/door/airlock/external{name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engineering) "bgC" = (/obj/machinery/computer/secure_data,/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/engine/engineering) "bgD" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/engine/engineering) @@ -3222,7 +3222,7 @@ "bjX" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering) "bjY" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/glass_engineering{desc = "A place for the Engineering staff to slack off (hopefully) after completing the Engine."; name = "Engineering Break Room"; req_access_txt = "11"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowfull"},/area/engine/engineering) "bjZ" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering) -"bka" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f6"},/area/space) +"bka" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes{charge = 1e+006},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/tcommsat/server) "bkb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "neutralcorner"; dir = 1},/area/hallway/primary/starboard{name = "Starboard Hallway"}) "bkc" = (/obj/structure/table/wood,/obj/item/toy/carpplushie,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "bkd" = (/obj/machinery/door/window/westright{name = "Theater Stage"; req_access_txt = "46"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) @@ -3266,7 +3266,7 @@ "bkP" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/engine/engineering) "bkQ" = (/obj/machinery/disposal,/obj/machinery/alarm{dir = 8; pixel_x = 22},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plasteel{dir = 5; icon_state = "yellow"},/area/engine/engineering) "bkR" = (/obj/machinery/camera{c_tag = "Engineering Escape Pod"; dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/engine/engineering) -"bkS" = (/obj/machinery/door/airlock/shuttle{name = "Escape Pod Airlock"},/obj/docking_port/mobile/pod{dir = 4; id = "pod4"; name = "escape pod 4"},/turf/simulated/floor/plasteel/shuttle,/area/space) +"bkS" = (/obj/machinery/power/smes{charge = 1e+006},/obj/structure/cable/blue{icon_state = "0-4"; d1 = 1; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/maintcentral) "bkT" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/light{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "neutralcorner"; dir = 1},/area/hallway/primary/starboard{name = "Starboard Hallway"}) "bkU" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bkV" = (/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/bar) @@ -3304,7 +3304,7 @@ "blB" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/structure/stool,/turf/simulated/floor/plasteel,/area/engine/engineering) "blC" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/engine/engineering) "blD" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/engine/engineering) -"blE" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f5"},/area/space) +"blE" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/obj/machinery/power/smes{charge = 1e+006},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel,/area/engine/gravity_generator) "blF" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "neutralcorner"; dir = 1},/area/hallway/primary/starboard{name = "Starboard Hallway"}) "blG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard{name = "Starboard Hallway"}) "blH" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) @@ -3868,7 +3868,7 @@ "bwt" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel,/area/hallway/primary/central{name = "Aft Central Hallway"}) "bwu" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/hallway/primary/central{name = "Aft Central Hallway"}) "bwv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/central{name = "Aft Central Hallway"}) -"bww" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 0; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/hallway/primary/central{name = "Aft Central Hallway"}) +"bww" = (/turf/simulated/wall/shuttle{icon_state = "swall12"},/area/shuttle/pod_3) "bwx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/central{name = "Aft Central Hallway"}) "bwy" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/central{name = "Aft Central Hallway"}) "bwz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/central{name = "Aft Central Hallway"}) @@ -3992,7 +3992,7 @@ "byN" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/crew_quarters/fitness) "byO" = (/obj/machinery/computer/monitor,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "byP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"byQ" = (/obj/machinery/power/smes,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"byQ" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f6"},/area/shuttle/pod_3) "byR" = (/obj/item/clothing/suit/ianshirt,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "byS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/assembly/chargebay) "byT" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/assembly/chargebay) @@ -4381,7 +4381,7 @@ "bGm" = (/obj/structure/grille,/obj/item/weapon/shard,/turf/simulated/floor/plating/airless,/area/mine/abandoned) "bGn" = (/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned) "bGo" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"bGp" = (/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/machinery/power/smes,/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"bGp" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f10"},/area/shuttle/pod_3) "bGq" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bGr" = (/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "Research Division Maintenance APC"; pixel_y = 24},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bGs" = (/obj/structure/table,/obj/item/weapon/extinguisher,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -4626,7 +4626,7 @@ "bKX" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 31},/obj/structure/lamarr,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"},/area/crew_quarters/hor) "bKY" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 8; pixel_x = 22},/turf/simulated/floor/plasteel{icon_state = "neutralcorner"},/area/hallway/primary/aft{name = "Aft Hallway"}) "bKZ" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"bLa" = (/obj/structure/cable/cyan{icon_state = "0-2"},/obj/machinery/power/smes,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"bLa" = (/obj/structure/cable/green,/obj/machinery/power/smes{charge = 1e+006},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "bLb" = (/obj/structure/cable/cyan{icon_state = "0-2"},/obj/machinery/computer/monitor,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bLc" = (/obj/structure/cable/cyan{icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "bLd" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteyellow"},/area/medical/chemistry) @@ -5307,7 +5307,7 @@ "bYc" = (/obj/machinery/light,/obj/structure/cable/cyan{icon_state = "1-2"},/obj/structure/cable/cyan{icon_state = "2-8"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) "bYd" = (/obj/structure/table/glass,/obj/item/clothing/glasses/hud/health,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) "bYe" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/maintenance/starboardsolar) -"bYf" = (/obj/machinery/power/smes,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"bYf" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_3) "bYg" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "bYh" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "bYi" = (/obj/structure/cable,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/solar/starboard) @@ -5686,11 +5686,11 @@ "cfr" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 10; initialize_directions = 12},/turf/simulated/floor/plasteel,/area/atmos) "cfs" = (/obj/machinery/atmospherics/unary/portables_connector/visible{dir = 1},/turf/simulated/floor/plasteel,/area/atmos) "cft" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 6},/turf/simulated/floor/plasteel,/area/atmos) -"cfu" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) -"cfv" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/turf/simulated/floor/plasteel,/area/atmos) -"cfw" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/atmos) -"cfx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) -"cfy" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel,/area/atmos) +"cfu" = (/obj/machinery/door/airlock/shuttle{name = "Escape Pod Airlock"},/obj/docking_port/mobile/pod{dir = 4; id = "pod3"; name = "escape pod 3"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_3) +"cfv" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_3) +"cfw" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/status_display{pixel_y = 32},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_3) +"cfx" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f5"},/area/shuttle/pod_3) +"cfy" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f9"},/area/shuttle/pod_3) "cfz" = (/obj/machinery/door_control{id = "mixedvent"; name = "Gas Mix Emergency Vent Control"; pixel_x = 0; pixel_y = 24},/obj/machinery/door/window/eastright,/turf/simulated/floor/plasteel,/area/atmos) "cfA" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) "cfB" = (/turf/simulated/floor/plasteel/airless{dir = 4; icon_state = "warningcorner"},/area/toxins/test_area) @@ -5718,9 +5718,9 @@ "cfX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/floor/plasteel,/area/atmos) "cfY" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 5},/turf/simulated/floor/plasteel,/area/atmos) "cfZ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 9},/turf/simulated/floor/plasteel,/area/atmos) -"cga" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/turf/simulated/floor/plasteel,/area/atmos) +"cga" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes{charge = 1e+006},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/engine/engineering) "cgb" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/atmos) -"cgc" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/atmos) +"cgc" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f6"},/area/shuttle/pod_4) "cgd" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) "cge" = (/obj/structure/grille,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) "cgf" = (/obj/machinery/door/airlock/glass{name = "Chapel"; req_access_txt = "0"},/turf/simulated/floor/carpet,/area/chapel/main) @@ -5740,12 +5740,15 @@ "cgt" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/carpet,/area/chapel/main) "cgu" = (/obj/machinery/camera{c_tag = "Chapel Starboard"; dir = 8},/turf/simulated/floor/carpet,/area/chapel/main) "cgv" = (/obj/structure/table/wood,/turf/simulated/floor/carpet,/area/chapel/main) +"cgw" = (/turf/simulated/wall/shuttle{icon_state = "swall12"},/area/shuttle/pod_4) +"cgx" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f10"},/area/shuttle/pod_4) +"cgy" = (/obj/machinery/door/airlock/shuttle{name = "Escape Pod Airlock"},/obj/docking_port/mobile/pod{dir = 4; id = "pod4"; name = "escape pod 4"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_4) "cgz" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/atmos) -"cgA" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) -"cgB" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 6},/turf/simulated/floor/plasteel,/area/atmos) -"cgC" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) +"cgA" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/status_display{pixel_y = 32},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_4) +"cgB" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_4) +"cgC" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_4) "cgD" = (/obj/machinery/atmospherics/pipe/manifold/supplymain/visible{dir = 1},/turf/simulated/floor/plasteel,/area/atmos) -"cgE" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/atmos) +"cgE" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f5"},/area/shuttle/pod_4) "cgF" = (/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Mix to Main"; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cgG" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1; layer = 2.9},/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 4},/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos) "cgH" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) @@ -5776,6 +5779,12 @@ "chg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/aft{name = "Aft Hallway"}) "chh" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/turf/simulated/floor/plasteel{icon_state = "neutralcorner"},/area/hallway/primary/aft{name = "Aft Hallway"}) "chi" = (/obj/machinery/door/airlock/glass{name = "Chapel Foyer"; req_access_txt = "0"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"chj" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f9"},/area/shuttle/pod_4) +"chk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/central{name = "Aft Central Hallway"}) +"chl" = (/obj/machinery/power/smes{charge = 1e+006},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"chm" = (/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/machinery/power/smes{charge = 1e+006},/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"chn" = (/obj/structure/cable/cyan{icon_state = "0-2"},/obj/machinery/power/smes{charge = 1e+006},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cho" = (/obj/machinery/power/smes{charge = 1e+006},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "chp" = (/obj/machinery/camera{c_tag = "Atmospherics Fore Port"; dir = 8},/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plasteel,/area/atmos) "chq" = (/turf/simulated/wall,/area/atmos) "chr" = (/obj/machinery/atmospherics/unary/vent_pump,/turf/simulated/floor/plasteel,/area/atmos) @@ -5817,14 +5826,14 @@ "cib" = (/obj/machinery/atmospherics/unary/portables_connector/visible,/obj/machinery/portable_atmospherics/canister,/obj/item/weapon/wrench,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "cic" = (/obj/machinery/atmospherics/unary/cold_sink/freezer,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "cid" = (/obj/machinery/atmospherics/unary/portables_connector/visible,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) -"cie" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/floor/plasteel,/area/atmos) +"cie" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel,/area/atmos) "cif" = (/obj/structure/fireaxecabinet{pixel_x = 32},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/atmos) "cig" = (/obj/structure/table,/obj/item/device/t_scanner,/obj/item/device/t_scanner,/turf/simulated/floor/plasteel{dir = 9; icon_state = "yellow"},/area/atmos) -"cih" = (/obj/structure/table,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/atmos) +"cih" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/supplymain/visible,/turf/simulated/floor/plasteel,/area/atmos) "cii" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/atmos) "cij" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/atmos) "cik" = (/obj/structure/closet/secure_closet/atmospherics,/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/atmos) -"cil" = (/obj/structure/closet/secure_closet/atmospherics,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 5; icon_state = "yellow"},/area/atmos) +"cil" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{dir = 1},/turf/simulated/floor/plasteel,/area/atmos) "cim" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 6},/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/floor/plasteel,/area/atmos) "cin" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) "cio" = (/obj/machinery/atmospherics/pipe/manifold/yellow/visible{dir = 1},/turf/simulated/floor/plasteel,/area/atmos) @@ -5892,9 +5901,9 @@ "cjy" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) "cjz" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) "cjA" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel,/area/atmos) -"cjB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos) +"cjB" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) "cjC" = (/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Connector Ports"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) -"cjD" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 9},/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos) +"cjD" = (/obj/machinery/atmospherics/pipe/simple/supplymain/visible,/turf/simulated/floor/plasteel,/area/atmos) "cjE" = (/obj/machinery/door/airlock/glass_atmos{desc = "The Atmos storage area, with all the gear you could want."; name = "Atmospherics Storage"; req_access_txt = "24"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowfull"},/area/atmos) "cjF" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/atmos) "cjG" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/atmos) @@ -5956,9 +5965,9 @@ "ckK" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/atmos) "ckL" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 4},/obj/structure/closet/wardrobe/atmospherics_yellow,/turf/simulated/floor/plasteel{dir = 5; icon_state = "yellow"},/area/atmos) "ckM" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 4},/turf/simulated/wall,/area/atmos) -"ckN" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plasteel,/area/atmos) -"ckO" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/floor/plasteel,/area/atmos) -"ckP" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 9},/turf/simulated/floor/plasteel,/area/atmos) +"ckN" = (/obj/machinery/atmospherics/pipe/simple/supplymain/visible{dir = 6},/turf/simulated/floor/plasteel,/area/atmos) +"ckO" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) +"ckP" = (/obj/machinery/atmospherics/pipe/simple/supplymain/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) "ckQ" = (/obj/machinery/atmospherics/unary/portables_connector/visible{dir = 1},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "ckR" = (/obj/machinery/atmospherics/unary/heat_reservoir/heater{dir = 1; on = 1; tag = ""},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "ckS" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/atmos) @@ -6003,7 +6012,7 @@ "clF" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/atmos) "clG" = (/obj/machinery/door/airlock/atmos{desc = "The station's Atmospherics department, responsible for keeping air in your lungs and fire out."; name = "Atmospherics"; req_access_txt = "24"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowfull"},/area/atmos) "clH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/floor/plasteel,/area/atmos) -"clI" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; id_tag = "o2_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/plasteel,/area/atmos) +"clI" = (/obj/machinery/atmospherics/pipe/simple/supplymain/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/floor/plasteel,/area/atmos) "clJ" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/atmos) "clK" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel,/area/atmos) "clL" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/obj/effect/landmark/start{name = "Atmospheric Technician"},/turf/simulated/floor/plasteel,/area/atmos) @@ -6032,8 +6041,8 @@ "cmi" = (/turf/simulated/floor/plasteel{icon_state = "yellow"; dir = 10},/area/atmos) "cmj" = (/obj/machinery/camera{c_tag = "Atmospherics Access"; dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/atmos) "cmk" = (/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/atmos) -"cml" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 6; icon_state = "yellow"},/area/atmos) -"cmm" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plasteel,/area/atmos) +"cml" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/wall,/area/atmos) +"cmm" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel,/area/atmos) "cmn" = (/obj/structure/dispenser/oxygen,/turf/simulated/floor/plasteel,/area/atmos) "cmo" = (/obj/machinery/suit_storage_unit/atmos,/turf/simulated/floor/plasteel,/area/atmos) "cmp" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel,/area/atmos) @@ -6042,8 +6051,8 @@ "cms" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/atmos) "cmt" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "yellow"; dir = 10},/area/atmos) "cmu" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/atmos) -"cmv" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; id_tag = "o2_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/atmos) -"cmw" = (/obj/machinery/computer/general_air_control{frequency = 1441; name = "Tank Monitor"; sensors = list("n2_sensor" = "Nitrogen", "o2_sensor" = "Oxygen", "co2_sensor" = "Carbon Dioxide", "tox_sensor" = "Toxins", "n2o_sensor" = "Nitrous Oxide", "waste_sensor" = "Gas Mix Tank")},/turf/simulated/floor/plasteel{dir = 6; icon_state = "yellow"},/area/atmos) +"cmv" = (/obj/structure/table,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/atmos) +"cmw" = (/obj/structure/closet/secure_closet/atmospherics,/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/floor/plasteel{dir = 5; icon_state = "yellow"},/area/atmos) "cmx" = (/obj/machinery/atmospherics/trinary/filter{dir = 1; filter_type = 1; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cmy" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos) "cmz" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) @@ -6070,7 +6079,7 @@ "cmU" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) "cmV" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 4},/area/hallway/secondary/exit) "cmW" = (/obj/machinery/alarm{dir = 8; pixel_x = 22},/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) -"cmX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/hallway/secondary/exit) +"cmX" = (/obj/structure/closet/secure_closet/atmospherics,/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/atmos) "cmY" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/atmos) "cmZ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/atmos) "cna" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/wall,/area/atmos) @@ -6097,13 +6106,13 @@ "cnv" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) "cnw" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/hallway/secondary/exit) "cnx" = (/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) -"cny" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=4"; freq = 1400; location = "Atmospherics"},/obj/structure/plasticflaps,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 4; icon_state = "loadingarea"},/area/hallway/secondary/exit) +"cny" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 6},/turf/simulated/floor/plasteel,/area/atmos) "cnz" = (/obj/machinery/door/window/northleft{dir = 4; layer = 2.7; name = "Atmospherics Deliveries"; req_access_txt = "24"},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/atmos) "cnA" = (/obj/machinery/alarm{pixel_y = 20},/turf/simulated/floor/plasteel,/area/atmos) -"cnB" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/atmos) +"cnB" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/supplymain/visible{dir = 9},/turf/simulated/floor/plasteel,/area/atmos) "cnC" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/atmos) "cnD" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{dir = 5; icon_state = "yellow"},/area/atmos) -"cnE" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/atmos) +"cnE" = (/obj/machinery/atmospherics/pipe/simple/supplymain/visible{dir = 9},/turf/simulated/floor/plasteel,/area/atmos) "cnF" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cnG" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 6},/turf/simulated/floor/plasteel,/area/atmos) "cnH" = (/obj/machinery/atmospherics/pipe/manifold/yellow/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) @@ -6126,10 +6135,10 @@ "cnY" = (/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cnZ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/hallway/secondary/exit) "coa" = (/obj/machinery/newscaster,/turf/simulated/wall,/area/hallway/secondary/exit) -"cob" = (/obj/structure/table/reinforced,/obj/machinery/door/window/northleft{dir = 4; layer = 2.9; name = "Atmospherics Desk"; req_access_txt = "24"},/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) +"cob" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "coc" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/effect/landmark/start{name = "Atmospheric Technician"},/turf/simulated/floor/plasteel,/area/atmos) -"cod" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/atmos) -"coe" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/atmos) +"cod" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "yellow"},/area/atmos) +"coe" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/atmos) "cof" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "To Mix"},/turf/simulated/floor/plasteel,/area/atmos) "cog" = (/obj/structure/toilet{cistern = 1; desc = "The HT-451, a torque rotation-based, waste disposal unit for small matter. This one has a heart drawn on the cistern."; dir = 4},/obj/machinery/door_control{id = "barbath"; name = "Bolts Control"; normaldoorcontrol = 1; pixel_y = 25; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/plating{icon_state = "platingdmg3"},/area/maintenance/asmaint2) "coh" = (/obj/structure/sink{pixel_y = 32},/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "floorgrime"; temperature = 273.15},/area/maintenance/asmaint2) @@ -6239,7 +6248,7 @@ "cqh" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/turf/simulated/floor/plating,/area/atmos) "cqi" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = -32},/turf/simulated/floor/plating,/area/maintenance/portsolar) "cqj" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/portsolar) -"cqk" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/smes,/turf/simulated/floor/plating,/area/maintenance/portsolar) +"cqk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/wall,/area/atmos) "cql" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/maintenance/portsolar) "cqm" = (/obj/machinery/light,/turf/simulated/floor/engine,/area/toxins/xenobiology) "cqn" = (/obj/machinery/shieldwallgen{req_access = list(55)},/obj/structure/cable/pink{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/toxins/xenobiology) @@ -6264,9 +6273,9 @@ "cqG" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/hallway/secondary/exit) "cqH" = (/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/exit) "cqI" = (/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/exit) -"cqJ" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/exit) +"cqJ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/atmos) "cqK" = (/turf/simulated/floor/plasteel{icon_state = "warningcorner"; dir = 1},/area/hallway/secondary/exit) -"cqL" = (/turf/simulated/floor/plasteel{icon_state = "warningcorner"},/area/hallway/secondary/exit) +"cqL" = (/obj/machinery/computer/general_air_control{frequency = 1441; name = "Tank Monitor"; sensors = list("n2_sensor" = "Nitrogen", "o2_sensor" = "Oxygen", "co2_sensor" = "Carbon Dioxide", "tox_sensor" = "Toxins", "n2o_sensor" = "Nitrous Oxide", "waste_sensor" = "Gas Mix Tank")},/obj/machinery/light,/turf/simulated/floor/plasteel{dir = 6; icon_state = "yellow"},/area/atmos) "cqM" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/exit) "cqN" = (/obj/machinery/camera{c_tag = "Escape Hallway Aft"; dir = 1},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/exit) "cqO" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/obj/structure/lattice,/turf/space,/area/space) @@ -6275,8 +6284,8 @@ "cqR" = (/obj/structure/stool,/turf/simulated/floor/plating,/area/maintenance/portsolar) "cqS" = (/obj/machinery/power/apc{dir = 4; name = "Aft Port Solar APC"; pixel_x = 23; pixel_y = 2},/obj/machinery/camera{c_tag = "Aft Port Solar Control"; dir = 1},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/portsolar) "cqT" = (/obj/machinery/door/airlock/external{name = "Escape Airlock"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/hallway/secondary/exit) -"cqU" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/hallway/secondary/exit) -"cqV" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/hallway/secondary/exit) +"cqU" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel,/area/atmos) +"cqV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel,/area/atmos) "cqW" = (/obj/machinery/door/airlock/external{name = "Shuttle Brig Airlock"; req_access_txt = "63; 42"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/hallway/secondary/exit) "cqX" = (/obj/structure/lattice,/turf/space,/area/atmos) "cqY" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -6299,7 +6308,7 @@ "crp" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; frequency = 1441; id_tag = "n2_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos) "crq" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating{icon_state = "warnplatecorner"; dir = 8},/area/hallway/secondary/exit) "crr" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating{icon_state = "warnplatecorner"; dir = 4},/area/hallway/secondary/exit) -"crs" = (/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"crs" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=4"; freq = 1400; location = "Atmospherics"},/obj/structure/plasticflaps,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 4; icon_state = "loadingarea"},/area/atmos) "crt" = (/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) "cru" = (/turf/simulated/floor/engine{name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos) "crv" = (/turf/simulated/floor/engine/n20,/area/atmos) @@ -6315,12 +6324,20 @@ "crF" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/solar/port) "crG" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/solar/port) "crH" = (/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/obj/structure/cable,/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/port) -"crI" = (/obj/docking_port/stationary{dir = 4; dwidth = 9; height = 11; id = "emergency_home"; name = "emergency evac bay"; width = 22},/turf/space,/area/space) +"crI" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/atmos) "crJ" = (/obj/structure/lattice,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space) "crK" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/space) "crL" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/solar/port) "crM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/solar/port) "crN" = (/obj/machinery/power/tracker,/obj/structure/cable,/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/port) +"crO" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel,/area/atmos) +"crP" = (/obj/structure/table/reinforced,/obj/machinery/door/window/northleft{dir = 4; layer = 2.9; name = "Atmospherics Desk"; req_access_txt = "24"},/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/atmos) +"crQ" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/atmos) +"crR" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/wall,/area/atmos) +"crS" = (/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) +"crT" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/smes{charge = 1e+006},/turf/simulated/floor/plating,/area/maintenance/portsolar) +"crU" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_y = -32},/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/exit) +"crV" = (/obj/docking_port/stationary{dir = 4; dwidth = 0; height = 28; id = "emergency_home"; name = "emergency evac bay"; width = 13},/turf/space,/area/space) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6412,14 +6429,14 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaadaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaalaalaakaaiaakaakaakaakaakaakaakaakaakaakaakaakaakaaiaakaakaakaakaakaakaakaakaakaakaakaakaakaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaeaaeaabaajaajaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaakaaeaabaajaajaajaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaeaaeaabaajaajaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaaaaanaaoaapaapaapaaqaaqaapaapaapaapaaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaakaaeaaeaabaajaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaaaaasaataauaauaavaawaaxaavaauaauaauaayaapaapaazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaeaabaajaadaadaadaadaadaadaadaadaabaabaabaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaaaaasaaAaauaaBaauaaBaauaaBaauaaBaauaaqaaCaaDaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaeaabaajaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaaaaasaaAaauaaBaauaaBaaFaaBaauaaBaauaaGaauaauaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaiaaiaaiaaiaaiaaiaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaaaaasaaAaauaaBaauaaBaauaaBaauaaBaauaaqaaCaaHaaEaaaaaIaaJaazaaaaaIaaJaazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaabaabaadaadaadaadaadaadaadaadaadaabaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaaaaasaataauaauaaKaaLaaMaaNaauaauaauaayaapaapaaOaaaaaEaaPaaEaaaaaEaaPaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaabaabaaeaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaalaaaaaQaaRaaGaapaapaaqaaqaapaapaaSaapaaTaaaaaaaaaaaaaaEaaUaaEaaVaaEaaUaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaakaabaaeaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaalaalaalaaWaaXaaWaaaaaaaaaaaaaaWaaXaaWaaaaaaaaaaaaaaYaaZabaabbabcaaZabdabbaaYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaabaaeaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaaaaanaapaaoaaoaaoaaqaaqaaoaaoaaoaaoaaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaakaaeaaeaabaajaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaaaaasaauaataataavaaxaawaavaataataataayaaoaaoaazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaeaabaajaadaadaadaadaadaadaadaadaabaabaabaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaaaaasaaAaataaBaataaBaataaBaataaBaataaqaaCaaEaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaeaabaajaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaaaaasaaAaataaBaataaBaaFaaBaataaBaataaGaataataaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaiaaiaaiaaiaaiaaiaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaaaaasaaAaataaBaataaBaataaBaataaBaataaqaaCaaHaaDaaaaaIaaKaaJaaaaaLaaNaaMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaabaabaadaadaadaadaadaadaadaadaadaabaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaaaaasaauaataataaOaaQaaPaaRaataataataayaaoaaoaaSaaaaaTaaUaaTaaaaaZabaaaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaabaabaaeaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaalaaaabbabdaaGaaoaaoaaqaaqaaoaaoadqaaoadMaaaaaaaaaaaaaaTadNaaTaaVaaZaiNaaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaakaabaaeaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaalaalaalaaWaaXaaWaaaaaaaaaaaaaaWaaXaaWaaaaaaaaaaaaaaYakTaydalwabcaIBaPbaOdaaYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaabaaeaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaalaalaaWabeaaWaaaaaaaaaaaaaaWabeaaWaaaaaaaaaaaaaaYabfabeabgaaYabfabeabhaaYaaYaaWaaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaabaabaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaababiabjaaYaaWaaXaaWaaYaaWaaWaaYaaWaaXaaWaaYaaWaaWaaYaaYaaYabkablaaYaaYabmablaaYabnaboabpaaWabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaakaabaabaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaababrabsaaYabtabuabuabvabuabwabxabyabyabzabAabyabyabBabCabDabEabFabGabHabIabJabGabGabKabLabeabMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaabaabaabaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6428,20 +6445,20 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaababiacyaaYaczaciaclaclacmaclacnacoacDaaYabeacEaaYacFacGacHacIacJacKacLacMacMacsaaYaaWaaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaaaaaaakaabaabaabaabaabaadaabaabaabaabaabaabaabaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaababiacyaaYacNaciacBacAacCacBacOacoacSacTabeacUaaYacVacWacXacYacZadaacLadbadcacsaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaakaakaakaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaababiabiabiabiabiabiacyaaYaddaciaacacPacRacQadeacoadiaaYadjadkaaYadlacGadmadbacIadbadnadoadoacsaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaiaakaabaabaabaabaabaabaabaabaabadpadpadpaabaabaabaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaababiadqadradsadtadtadtaduadvadwadxadxadxadyadzadAadBaaYadCadDaaYadEadFadGadHadIadJadKadLadoacsaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaakadMaabaabaabaabaabaabaabadpadpadpadpadNadOadpadpadpaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaababiadPadQabiacyacyadRaaYadSadTadUadVabGadWadXacSabGadYadYadYadYadYadZadYacsacsacsacsacsacsacsaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaabadMaabaabaabaabaabaabaabadpaeaaebaecaedaeeaebaeeadpaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaababiaefaegaehaeiacyaejaejaekaekaelaekaemaejaenaeoaepadYaeqaeraesaetaeuadYaevaewaexaeyaezaeAbRObROadfadfadfadfadfadfadfadfadfadfadfadfadfadfadfadgaaaaaaaaaaakaakaabadMaabaabaabaabaabaabadpadpaeEaeFaeGaeHaeGaeIaeJadpadpaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaababiabiabiabiaeKacyaejaeLaeMaeMaeNaeOaePaejaeQaeRaeSadYaeqaeTaeUaeVaeuadYaeWaeXaeYaeZafaafbaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhaaaaakaakaakaabaabadMaabaabaabaabaabaabadpaeeaeFafdadpadpadpafeaeIaeeadpaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaababiaPqadradsadtadtadtaduadvadwadxadxadxadyadzadAadBaaYadCadDaaYadEadFadGadHadIadJadKadLadoacsaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaakaaiaabaabaabaabaabaabaabadpadpadpadpaPradOadpadpadpaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaababiadPadQabiacyacyadRaaYadSadTadUadVabGadWadXacSabGadYadYadYadYadYadZadYacsacsacsacsacsacsacsaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaabaaiaabaabaabaabaabaabaabadpaeaaebaecaedaeeaebaeeadpaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaababiaefaegaehaeiacyaejaejaekaekaelaekaemaejaenaeoaepadYaeqaeraesaetaeuadYaevaewaexaeyaezaeAbRObROadfadfadfadfadfadfadfadfadfadfadfadfadfadfadfadgaaaaaaaaaaakaakaabaaiaabaabaabaabaabaabadpadpaeEaeFaeGaeHaeGaeIaeJadpadpaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaababiabiabiabiaeKacyaejaeLaeMaeMaeNaeOaePaejaeQaeRaeSadYaeqaeTaeUaeVaeuadYaeWaeXaeYaeZafaafbaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhaaaaakaakaakaabaabaaiaabaabaabaabaabaabadpaeeaeFafdadpadpadpafeaeIaeeadpaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaadaadaadaadaadaabaabaababiabiabiabiabiabiabiabiabiabiabiabiaffafgafhafiafjafkaflafmafnafnafoafpafqafraeRaeSadYafsaftafuafvafwadYafxafyafzafbafAafbaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeBaakaakaabaabaabaabaabaabaabaabaabaabaabadpafCaedadpadpafDadpadpaedafEadpaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaadaadaadaadaabaabaababiafFafjafjafjafjafjafjafjafjafjafjafGafHafIafJafKaejafLafMafNafOafPafQaejafRaeRaeSadYafSafTafUafVafWadYaeWafXafYafZagaafbaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalaeBaalaabaabaabaabaabaabaabaabaabaabaabadpadpagbagcadpagdageagfadpagcaggadpadpaalaalaalaalaalaalaalaalaalaalagiagiagiaalagiagiagiagiagjagiagiaalagiagiaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaagaagaabaabaabaabaababiagkaglafIafIafIagmafIafIafIafIafIagnagkagoagoagoagpagpagpagpagpagoagoagoagqagragsagtaguagvagwagxagyadYaeWagzagAagBagCafbaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalaalaeBaalaabaabaabaabaabaabaabaabaabaabaabadpagDagEagFagGagHagIagJagEagIagGagKadpaeCaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalagiaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaabaabaabaabaabaabaabaabaabaababiagkaeKagLagLagLagLagLagLagLagLagLaeKagkagoagMagNagpagOagPagQagpagRagSagoagTagUagVagWagXagYagZahaahbadYaeWahcahdafbafbafbafbafbafbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbafbaheafbafbaabaabaabaabaabaabaabaabaabaabadpadpahfahgahhahiadpahiahhahgahjadpadpaabaalaalaalaalaalaalaalaalagiaalahkahlahmaalahkahlahmaalahkahlahmaalagiaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaabaabaabaabaabaabaabaabaabaababiagkaeKagLahnahnahnahnahoahnahnagLaeKagkagoahpahqagpagpahragpagpahsahtagoahuaeRahvahwahxahyahzahAahBadYaeWahcahCafbahDahEahFahGafbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbahHahIahJafbaabaabaabaabaabaabaabaabaabaabaabadpahKahgahLahgahgahgahMahgahNadpaabaabaalaalaalaalaalaalaalaalagiaalahkahOahmaalahkahOahmaalahkahOahmaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaalaalaalaabaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaabaabaabaabaabaabaabaabaabaababiagkaeKagLahPahQahQahQahQahQahQagLaeKagkagoahRahSahTahUahVahWahXahYahZagoagqaeRaeSaiaaibaicaidaieaifadYaigahcaihafbaiiaijaikailafbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbaimainaioaipaipaipaipaipaipaipaipaipaipaabaabadpaeEaeeaiqahgairahgaisaeeaeJadpaabaabaalaalaalaalaalaalaalaalagjaalahkahOahmaalahkahOahmaalahkahOahmaalagiaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaalaalaalaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaadaadaadaadaadaadaagaagaabaabaababiabiabiabiabiabiabiabiagkaeKagLaitaiuaiuaivaiuaiuaiwagLaeKagkagoaixaiyaizaiyaiAaiyaiBaiCaiDaiEaiFaiGaiHadYadYadYadZadYadYadYaiIaiJaiIafbaiKaiLaiMafbafbaaaaaaaaaaaaaaaaaaaaaaiNaaaaaaaaaaaaafbafbafbaheaipaiOaiPaiQaiRaiSaiTaiUaiVaipaabaabadpadpaiWaiXaiYaiZajaajbajcadpadpaabaabaabaalaalaalaalaalaalaalagiaalahkahOahmaalahkahOahmaalahkahOahmaalagiaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaadaadaadaadaabaabaababiafFafjafjafjafjafjafjafjafjafjafjafGafHafIafJafKaejafLafMafNafOafPafQaejafRaeRaeSadYafSafTafUafVafWadYaeWafXafYafZagaafbaalaalaalaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsaaaaalaeBaalaabaabaabaabaabaabaabaabaabaabaabadpadpagbagcadpagdageagfadpagcaggadpadpaalaalaalaalaalaalaalaalaalaalagiagiagiaalagiagiagiagiagjagiagiaalagiagiaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaagaagaabaabaabaabaababiagkaglafIafIafIagmafIafIafIafIafIagnagkagoagoagoagpagpagpagpagpagoagoagoagqagragsagtaguagvagwagxagyadYaeWagzagAagBagCafbaalaalaalaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsaalaalaeBaalaabaabaabaabaabaabaabaabaabaabaabadpagDagEagFagGagHagIagJagEagIagGagKadpaeCaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalagiaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaabaabaabaabaabaabaabaabaabaababiagkaeKagLagLagLagLagLagLagLagLagLaeKagkagoagMagNagpagOagPagQagpagRagSagoagTagUagVagWagXagYagZahaahbadYaeWahcahdafbafbafbafbafbafbaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsafbafbaheafbafbaabaabaabaabaabaabaabaabaabaabadpadpahfahgahhahiadpahiahhahgahjadpadpaabaalaalaalaalaalaalaalaalagiaalahkahlahmaalahkahlahmaalahkahlahmaalagiaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaabaabaabaabaabaabaabaabaabaababiagkaeKagLahnahnahnahnahoahnahnagLaeKagkagoahpahqagpagpahragpagpahsahtagoahuaeRahvahwahxahyahzahAahBadYaeWahcahCafbahDahEahFahGafbaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsafbahHahIahJafbaabaabaabaabaabaabaabaabaabaabaabadpahKahgahLahgahgahgahMahgahNadpaabaabaalaalaalaalaalaalaalaalagiaalahkahOahmaalahkahOahmaalahkahOahmaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaalaalaalaabaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaabaabaabaabaabaabaabaabaabaababiagkaeKagLahPahQahQahQahQahQahQagLaeKagkagoahRahSahTahUahVahWahXahYahZagoagqaeRaeSaiaaibaicaidaieaifadYaigahcaihafbaiiaijaikailafbaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsafbaimainaioaipaipaipaipaipaipaipaipaipaipaabaabadpaeEaeeaiqahgairahgaisaeeaeJadpaabaabaalaalaalaalaalaalaalaalagjaalahkahOahmaalahkahOahmaalahkahOahmaalagiaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaalaalaalaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaadaadaadaadaadaadaagaagaabaabaababiabiabiabiabiabiabiabiagkaeKagLaitaiuaiuaivaiuaiuaiwagLaeKagkagoaixaiyaizaiyaiAaiyaiBaiCaiDaiEaiFaiGaiHadYadYadYadZadYadYadYaiIaiJaiIafbaiKaiLaiMafbafbaPsaPsaPsaPsaPsaPsaPsaQvaPsaPsaPsaPsafbafbafbaheaipaiOaiPaiQaiRaiSaiTaiUaiVaipaabaabadpadpaiWaiXaiYaiZajaajbajcadpadpaabaabaabaalaalaalaalaalaalaalagiaalahkahOahmaalahkahOahmaalahkahOahmaalagiaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaalaalaalaalaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaababiajdajeajfabiajgajhabiagkaeKagLajiajjajkajlajmajlajnagLajoajpajqajrajsajtajuajvajuajuajuajwajxajyajzajAajBajCajCajDajCajCajEajFajGajHajIajJajKajLajMafbaaaaaaajNajOajNajPajNajOajNaaaaaaajQafbajRafbajSaipajTaiTajUaiTaiTaiTaiTajVaipaabaabaabadpadpajWaiqahgaisajWadpadpajXajXajXajXajYaalaalaalaalaalagiagiaalahkahOahmaalahkahOahmaalahkahOahmaalagiagiagiagiaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaalaalaalaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaababiajdajZakaabiakbacyakcagkaeKagLakdakeakfakgakeakhakhagLaeKagkagoakiakjakkaklakmaknakoakpakqagoakraksaktakuainakvakwakxakxakyakzakAakBakzakxakCakwakDafbaakaakakEakFakEakGakEakFakEaakaakaakafbakHafbakIaipakJakKajUakLakMaiTakNakOaipaipaabaabaabadpadpakPakQakRadpadpakSakTakUakVakWajYajYajYaalaalaalaalaalaalaalakXaalaalaalakXaalaalaalakXaalaalaalaalaalagjaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaalaalaalaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaababiakZalaalbabialcaldabialeafialfalgalhalialjaljaljaljalkallagkalmalmalmalmalmalmalmalmalmalmalmalnaeRaloajNajNalpajNajNalqalqalqalqalralqalqajNajNalsajNakEakEajNajOajNaltajNajOajNakEakEakEajNajNafbakIaipaiTaiTalualvalvalvalvalvalwaipaipaipalxalxalyalzalAalBalCalxalxalDalEalFalGalHakValHalIalJalJalJalJalJalJalJalJalJalJalJalJalJalJalJalJalKalLalMaalagiaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaalaalaalaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaababiajdajZakaabiakbacyakcagkaeKagLakdakeakfakgakeakhakhagLaeKagkagoakiakjakkaklakmaknakoakpakqagoakraksaktakuainakvakwakxakxakyakzakAakBakzakxakCakwakDafbaakaakakEakFakEakGakEakFakEaakaakaakafbakHafbakIaipakJakKajUakLakMaiTakNakOaipaipaabaabaabadpadpakPakQakRadpadpakSbgAakUakVakWajYajYajYaalaalaalaalaalaalaalakXaalaalaalakXaalaalaalakXaalaalaalaalaalagjaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaalaalaalaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaababiakZalaalbabialcaldabialeafialfalgalhalialjaljaljaljalkallagkalmalmalmalmalmalmalmalmalmalmalmalnaeRaloajNajNalpajNajNalqalqalqalqalralqalqajNajNalsajNakEakEajNajOajNaltajNajOajNakEakEakEajNajNafbakIaipaiTaiTalualvalvalvalvalvbkaaipaipaipalxalxalyalzalAalBalCalxalxalDalEalFalGalHakValHalIalJalJalJalJalJalJalJalJalJalJalJalJalJalJalJalJalKalLalMaalagiaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaalaalaalaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaalalNalNalNalNalNalNalNalNalNalNalNalNalNalNalNalOalPabialQabiabiagkaeKagLalRaiualSalTaiualUalVagLalWalXalmalYalZamaambamcamdameamfamgalmamhamiamjajNamkamlammajNamnamoampamqamramsalqamtamuamvamwamwamwamxamwamyamzamAamBamCamDamEamFamGajNamHakIaipaiTamIamJaiTaiTaiTaiTaiTamKamLamMaipalxamNamOamPalAamQamOamRalxamSamTamUamVajYajYajYaalaalaalaalaalaalaalamWaalaalaalamWaalaalaalamWaalaalaalaalaalagiaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaalaalaalaalaabaabaabaabaabaabaabaabaabaabaabaabaabaalaalaalaalalNamXamYamYamZamYamYanaalNanbancandaneanfalNagkalbabiabiabiangagkaeKagLanhaiuanianjaiuaiuankagLanlagkalmanmanmannanoalYanmanpanmanqalmagqaeRamjajNanramBansakEantanuanuanuanvanwanxanyamBanzanAanAanAanAanAanBanCanDamBamBanEanEanEanFajNanGakIaipajTaiTaiTaiTanHanIanHaiTaiTaiTajVaipalxanJanKanLanManNanOanPalxajXanQanRajXajYaalaalaalagiagiagiagjaalahkanSahmaalahkanSahmaalahkanSahmaalagiagiaalagiaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaalaalaalaabaabaabaabaabaabaabaabaabaabaalaalaalaalaalaalaalaalalNanUanVanVanVanVanWanXanYanZanXaoaanXaobaocaodaoeaofaogaogaogaohagnagLaoiaiuaojaokaolaomaonagLaooaleaopaoqaoqaoranmaosanmanmanmaotaouaovaeRamjajNaowamBaoxajNaoyaozanuaoAaoBaoCaoDaoEaoFaoGaoHaoIaoIaoJaoJaoJaoJaoKaoJaoLaoFaoFaoFaoFaoMaoNakIaipaoOaoPaoQaoRanHaoSanHaoTaoUaoVaoWaipalxaoXaoYaoZapaapbapcapdalxapeapfapgaphaalaalaalaalaalaalaalagiaalahkanSahmaalahkanSahmaalahkanSahmaalagiaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6452,7 +6469,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalasMatYatZasMauaaubaubaubaucasMapmarzanVanVapoaudauearGaufaugaugaugaugaugaugaugauhaugauiarGaujatjaukaulaumaunaunaunaunauoaupauqauqauqauqatjaurausautauuapUauvapUauvauwapUauxauyapUapUapUapUapUapUauzauAamBamBamBauBajNauCasiauDauEasiauFajNajNajNauGaqfaqfauHaqfaqfauHauIauJaqfauHaqfaqfaqlaqlaqlaqlauKauLauMaqlaqlaqlauNauOauPauQauRauSauTauUauVaynaynaynaynaynaynaynaynaynaynaynaynaynaynaynaynaynaynaynaynaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaalaalaalaalaalaalaabaabaabaabaabaabaabaabaabaabaalaalaalaalaalaalaalauXapmappauYanVanVanVauZaqravaaqtavbavcanVapoasMauearGavdaveaveaveaveaveaveaveaveaveavfarGaujavgaukaulavhauqaviaviavjaviavkauqavlavmavmavnavoarSatlavpamBamBamBamBavqamBaqPavravsavtamBavuamBavvavwaoFaoFavxavyavzajNauFasiauDavAasiasiajNavBavCavDavEavFavGavFavHavIavJavKavLavGavFavMavFavNavFavOavPavQavRavSavNavTavUavVavWavXavYavZawaawbaphaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalagjaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaalaalaalaalaalaabaabaabaabaabaabaabaabaabaabaabaabaabaalaalaalaalaalasMawcawdasMaweawfawgawhawiasMapmanVawjanVawkalNawlarGavdaveaalaalaalaabaalaalaalaveavfarGaujatjawmaulauqauqauqauqawnauqaulauqauqawnawoatjatkarSatlaqPatmawpaoFaoFawqaoFawrawsawsawsawsawtawsawuawvawwawxajNalpajNajNawyawzawAawBauFawCajNawDawEawFawGawHawHawHawHawHawIawJawHawKawLawHawHawMawHawHawHawNawOawJawPawQawRawSapgawTawTawTawTaphaphaalaalagiagiaalagiagiagjagiagiaalagiagiagiagiagiagiaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaalaalaalaalaabawUawUawUawUawVawVawVawUawUawUaabaabaabaabaalaalaalawWalNalNalNalNalNalNalNalNalNalNawXawYawZawYaxaaxbaxcaxdaxeaveaalaalaabaabaabaalaabaveavfaxfaxgaxhaxiaxjauqauqaxkaxlaxmaxnaxoauqauqauqaxpaxqaxrarSaxsajNaxtamBamBaxuaxvaxwatyaxxaxyaxzaxAaxBaxCaxDaxAaxzaxAaxEaxFaxGatyatAaxHaxIaxJaxKaxKatyaxLaxMaxNaxOaxPaxPaxPaxPaxPaxQaxRaxPaxSaxPaxPaxTaxUaxPaxVaxPaxWaxXaxYaxZayaaybaycapgawTaydayeawTaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaalaalaalaalaabawUawUawUawUawVawVawVawUawUawUaabaabaabaabaalaalaalawWalNalNalNalNalNalNalNalNalNalNawXawYawZawYaxaaxbaxcaxdaxeaveaalaalaabaabaabaalaabaveavfaxfaxgaxhaxiaxjauqauqaxkaxlaxmaxnaxoauqauqauqaxpaxqaxrarSaxsajNaxtamBamBaxuaxvaxwatyaxxaxyaxzaxAaxBaxCaxDaxAaxzaxAaxEaxFaxGatyatAaxHaxIaxJaxKaxKatyaxLaxMaxNaxOaxPaxPaxPaxPaxPaxQaxRaxPaxSaxPaxPaxTaxUaxPaxVaxPaxWaxXaxYaxZayaaybaycapgawTbkSayeawTaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaalaalaalaalaabaabaabawUayfaygayhayiayjaykaylaymawUaabaabaabaalaalaalaalaynayoaypayqayraysayrayraysanVaytanVanWayuanXayvalNaywarGayxaveaalaalaveaveaveaveaveaveavfarGayyarPayzatjatjavgatjatjarPatjayAavgatjatjatjarPatkarSayBajNayCakEayDayEayFajNajNajNajNajNajNajNajNajNajNajNajNajNalpajNajNajNajNajNajNajNajNajNayGaxZayHayIayIayIayIayIayIayIayIayIayIayIayIayIayJayIayIayIayJayIayKaxZayLavUayMapgawTayNayMayOaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaalaalaalaabaabaabaabawVaygaygaygayPaygaygayQayRawUawUawUaalaalaalaalaalaalaypaypaySalNalNalNalNayTayUanVanVanVayVaqrayWayXayYayZazaaveaalaalaveazbazcazcazcazcazdazeazfazgazhaziaziaziaziaziazjaziazkaziaziaziaziazlazmaznazoazpazqazrazrazsaztazuazvazvazvazvazvazvazvazvazwazvazxazyazzazvazvazAazvazvazvazBazvazCazDazEazFayIapYapXayIapYapXayIapYapXayIapYapXayIazIazJazJazKazLayIazMaxZazNavUazOauPazPazQazRayOaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaalaalaalaabaabaabaabaabawVaygazSaygaygazTayQayQazUazVazWazXaalaalaalaalaalaynayoazYazYazZaAaaAbaAcasMaAdayUanVanVaAeaAfaAgasMauearGayxaveaalaalaveaAhaAiaAjaAjaAjaAkaAjaAjaAlaAmaAnaAoaAoaAoaAoaAoaAoaApaAoaAoaAoaAoaAqaAraAsaAtaAoaAoaAoaAoaAoaApaAoaAoaAoaAoaAoaAuaAnaAoaAoaAoaAoaAoaAoaApaAoaAoaAoaAoaAoaAoaAnaAoaAvaAwaAxaAyayIaqFaqEayIaqGartayIaqGauWayIaqGazGayIaAFazKazKazKaAGayIayKaAHaAIaAJaAKaALaAMaANaAOayOaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6464,13 +6481,13 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaCLazHaAAaAzaEBaECaFyaEEaFzaFAaFBaFCaFDaFEaFFaFGaFHaCPaCPaFIaFJaFKaFLaFMaFIaFNaAYaCaaCdaDaaDaaCdaFOaELaFPaFQaDaaFRaFSaFTaFSaynaalaalaakaakaabaabaabaabaakaabaaaaaaaakaaaaakaakaakaakaakaakaaaaaaaaaaaaaaaaaaaakaakaFUaFVaFVaFWaCkaFXaDlaEPaFYaCiaFZaxZaAyayIayIayIayIayIayIayIayIayIayIayJaGaaBFayIayIaGbayIayIayIayKaFqazNaCFaGcaGdaGdaGdaGdaGdaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaCLaABaADaACaEBaECaGiaGjaGkaFFaFFaFFaFFaFFaGlaEEaGmaGnaGnaGnaGnaGnaGnaGnaGnaGoaGpaGqaCdaDaaDaaCdaGraELarGaCdaGsaGtaCdaCdaCdaalaalaalaakaaaaaaaaaaaaaaaaakaaaaaaaaaaGuaaaaaaaaaaaaaakaakaaaaaaaaaaaaaaaaaaaaaaGvaGwaGxaGyaGzaGAaCkaGBaGCaGDaGEaCkaGFaxZaAyaCFaGGaGHaGIaGJaGKaGLaGMaGNayIaGOaGPaGQayIaGRaGSayIaGTayIaGUaGVaGWaCFaGcaGdaGXaGYaGZaGdaGdaGdaHaaHaaHaaHaaGdaGdaGdaabaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaCLaAEaFwaFvaHeaHfaHgaHhaHiaHjaHkaHkaHkaHlaFFaHmaGmaHnaHoaHpaHqaHraHsaHtaGnaHuaHvaHwaCdaDaaDaaCdaHxaHyaveaCdaCdaCdaCdaakaalaalaalaalaakaakaakaakaakaakaHzaakaakaakaakaaaaaaaaaaaaaakaakaaaaaaaaaaaaaaaaaaaGvaHAaHBaHCaHCaHCaHCaHCaHCaHCaHDaHEaHDawDaxZaAyaCFaHFaHGaHHaGJaHIaHJaHKaHLayIaHMaHNaHOayIaHPaHQaHRaHSayIayKaFqazNaCFaGcaGdaGdaGdaHTaGdaHUaHVaHWaHXaHYaHZaIaaIbaGdaabaabaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaIcaIcaIcaIcaIcaIcaIcaIcaIcaIcaIcaIcaCLaDKaDKaDKaDKaDKaDKaEEaIdaIeaIfaIgaIhaIiaFFaHmaGmaIjaIkaIlaIlaIlaIlaImaInaIoaHvaIpaCdaDaaIqaCdaIraIsaakaakaakaakaaaaaaaaaaaaaaaaalaakaaaaaaaaaaaaaaaaakaaaaaaaaaaItaIuaIvaIwaIvaIvaIvaIwaIxaIxaIxaIyaIxaIzaHBaaaaIAaIBaICaIDaIEaIFaIGaIHaIIaIJaIKaxZaAyaCFaGJaILaGJaGJaGJaIMaINaGJayIayIayIayIayIayIayJayIayIayIayKaIOaIPaCFaGcaGdaIQaIRaISaITaISaISaISaIUaGeaFxaGfaIYaGdaabaabaabaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaIcaIcaIcaIcaIcaIcaIcaIcaIcaIcaIcaIcaCLaDKaDKaDKaDKaDKaDKaEEaIdaIeaIfaIgaIhaIiaFFaHmaGmaIjaIkaIlaIlaIlaIlaImaInaIoaHvaIpaCdaDaaIqaCdaIraIsaakaakaakaakaaaaaaaaaaaaaaaaalaakaaaaaaaaaaaaaaaaakaaaaaaaaaaItaIuaIvaIwaIvaIvaIvaIwaIxaIxaIxaIyaIxaIzaHBaaaaIAblEaICaIDaIEaIFaIGaIHaIIaIJaIKaxZaAyaCFaGJaILaGJaGJaGJaIMaINaGJayIayIayIayIayIayIayJayIayIayIayKaIOaIPaCFaGcaGdaIQaIRaISaITaISaISaISaIUaGeaFxaGfaIYaGdaabaabaabaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIcaJaaJbaJcaJdaJeaJfaJgaJhaJiaJjaJkaJlaEEaJmaJnaJoaJpaJqaJraJsaJtaJuaJvaJuaJwaFFaJxaGmaIlaIlaIlaJyaJzaJAaJBaGnaJCaJDaJEaJFaDaaJGaCdaJHaJIaaaaakaakaakaaaaaaaaaaaaaaaaaaaakaaaaaaaabaaaaaaaakaaaaaaaGvaJJaHBaaaaaaaaaaakaakajQaakaaaaaaaaaaaaaaaaaaaakaHCaJKaJLaJMaJNaJNaJOaJPaJQaJRaJSaJTaJUaJVaJWaJXaJYaJYaJYaJZaKaaKbaKcaKdaKeaKfaKgaKhaKiaKjaKkaKlaKmaKnaKoaCFaGcaGdaKpaISaISaGdaKqaKraKsaISaGhaGgaHbaKwaGdaabaabaabaabaabaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIcaJdaJdaKxaJdaKyaKzaKAaKBaKCaKzaKDaKEaEEaKFaKGaKHaKGaKIaGjaKJaKKaFFaKLaFFaJwaFFaHmaGmaIlaKMaKNaKOaKPaKQaKRaGnaHuaHvaHwaCdaDaaDaaCdaaaaKSaaaaGvaIuaIvaIwaIxaIxaIxaIyaIxaIvaIxaIyaIxaIxaIxaIwaIxaIxaIzaKTaaaaKUaKUaKUaKUaKUaKUaKUaKVaKVaKWaKWaKWaKWaKVaKVaKXaKYaKZaLaaLbaHCaLcaLdaHDaLeaxZaAyaCFaLfaLgaGJaHIaHIaLhaLiaLjaLkaLlaLmaLnaLoaLoaLoaLoaLpaLkayKaFqaLqaCFaGcaGdaLraLsaLtaGdaLuaLvaLwaLxaHdaHcaHbaLAaGdaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaLBaLBaLBaIcaLCaLDaJcaJdaLEaLFaLGaLHaLIaLJaLKaLLaEEaLMaLMaLMaLMaLMaEEaLNaLOaLPaLQaLRaLSaLTaEGaLUaLVaLUaLUaLUaLUaLUaLUaLWaLXaHvaHwaCdaDaaDaaCdaaaaKSaaaaLYaHBaakaakaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaaaaaaaaaakaaaaKUaLZaMaaMaaMbaMcaMdaKVaMeaMfaMgaMhaMiaMjaKVaMkaMlaMlaMlaMlaHCaMmaMmaHDaMnaxZaAyaCFaMoaMpaMqaMraMsaMtaMuaMvaMwaMxaMyaMzaMyaMyaMyaLoaLpaLkaMAaFqaMBaCFaGcaGdaMCaMDaMEaMFaMGaMHaMIaMJaIWaIVaIXaMNaGdaabaMOaMOaMOaMOaMOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaLBaLBaLBaLBaIcaMPaMQaMRaJdaJdaJdaJdaJdaJdaJdaMSaMTaJdaMUaMVaMVaMVaMWaMXaMYaMZaNaaNbaNcaNdaNeaNfaNgaNhaNiaNjaNkaNlaNmaNnaNoaNpaNqaNraCdaCdaDaaCdaaaaNsaaaaNsaaaaaaaakaakaakaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaKUaNuaNuaNuaNvaNvaNvaKVaNwaNxaNyaNzaNAaNBaNCaMkaNDaNEaNFaNGaHCaaaaaaaCFaNHaxZaNIaCFaNJaNKaGJaLjaHIaHIaHIaLjaLkaNLaNMaLnaLoaLoaLoaNMaLpaNNaNOaFqaLqaCFaGcaGdaNPaNQaNRaNSaNTaNUaNVaNWaNXaNYaNZaOaaGdaabaObaOcaOdaapaapaazaaaaaaaaaanTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaLBaalaalaIcaIcaOeaOfaOfaOgaOhaJdaOiaOjaOkaJdaOlaOmaJdaOnaOoaOpaOqaOraOsaOtaLOaOuaOvaLRaOwaOxaOyaOzaOAaOBaOCaODaOEaOFaOGaOHaOIaHvaOJaOKaCdaDaaCdaaaaKSaaaaKSaaaaaaaaaaakaakaakaabaaaaakaaaaaaaaaaaaaakaaaaaaaaaaaaaakaaaaKUaOLaOLaOLaNvaNvaOMaKVaONaOOaOPaOQaORaOSaOTaOUaOVaOWaOVaOXaHCaaaaaaaCFaOYaOZaAyaCFaPaaPbaGJaLjaPcaPdaPcaPeaPcaPfaMyaMzaPgaPhaPhaPiaPjaPkaPlaFqaLqaPmaGcaGdaGdaGdaGdaGdaGdaGdaGdaGdaGdaGdaPnaPoaGdaMOaMOaPpaPqaPraPsaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaalaalaalaPtaPuaOfaOfaOfaOfaOfaPvaPwaPxaPyaPzaPyaPAaJdaPBaPCaPDaPCaPEaPFaPGaPHaPIaPHaJpaPIaPJaPKaPLaPMaPNaLUaLWaLWaLWaPOaOHaOIaHvaOJaPPaCdaDaaCdaakaKSaaaaKSaaaaaaaaaaakaakaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaPQaKUaKVaPRaPSaPTaPUaPVaPWaKVaPXaNFaPYaNDaMlaHCaakaakaCFaPZaxZaQaaQbaQbaQbaQbaQcaPcaQdaQeaQfaPcaQgaQhaQiaQjaLoaLoaQkaQlaQmaQnaEtaQoaCFaGcapgapgapgapgapgapgapgapgapgaQpaQqaQraQsaQqaQqaQtaQuaQvaapaapaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaLBaLBaLBaLBaIcaMPaMQaMRaJdaJdaJdaJdaJdaJdaJdaMSaMTaJdaMUaMVaMVaMVaMWaMXaMYaMZaNaaNbaNcaNdaNeaNfaNgaNhaNiaNjaNkaNlaNmaNnaNoaNpaNqaNraCdaCdaDaaCdaaaaNsaaaaNsaaaaaaaakaakaakaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaKUaNuaNuaNuaNvaNvaNvaKVaNwaNxaNyaNzaNAaNBaNCaMkaNDaNEaNFaNGaHCaaaaaaaCFaNHaxZaNIaCFaNJaNKaGJaLjaHIaHIaHIaLjaLkaNLaNMaLnaLoaLoaLoaNMaLpaNNaNOaFqaLqaCFaGcaGdaNPaNQaNRaNSaNTaNUaNVaNWaNXaNYaNZaOaaGdaabaObaOcbyQbwwbwwbGpaaaaaaaaaanTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaLBaalaalaIcaIcaOeaOfaOfaOgaOhaJdaOiaOjaOkaJdaOlaOmaJdaOnaOoaOpaOqaOraOsaOtaLOaOuaOvaLRaOwaOxaOyaOzaOAaOBaOCaODaOEaOFaOGaOHaOIaHvaOJaOKaCdaDaaCdaaaaKSaaaaKSaaaaaaaaaaakaakaakaabaaaaakaaaaaaaaaaaaaakaaaaaaaaaaaaaakaaaaKUaOLaOLaOLaNvaNvaOMaKVaONaOOaOPaOQaORaOSaOTaOUaOVaOWaOVaOXaHCaaaaaaaCFaOYaOZaAyaCFaPabLaaGJaLjaPcaPdaPcaPeaPcaPfaMyaMzaPgaPhaPhaPiaPjaPkaPlaFqaLqaPmaGcaGdaGdaGdaGdaGdaGdaGdaGdaGdaGdaGdaPnaPoaGdaMOaMOaPpcfubYfcfwcfvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaalaalaalaPtaPuaOfaOfaOfaOfaOfaPvaPwaPxaPyaPzaPyaPAaJdaPBaPCaPDaPCaPEaPFaPGaPHaPIaPHaJpaPIaPJaPKaPLaPMaPNaLUaLWaLWaLWaPOaOHaOIaHvaOJaPPaCdaDaaCdaakaKSaaaaKSaaaaaaaaaaakaakaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaPQaKUaKVaPRaPSaPTaPUaPVaPWaKVaPXaNFaPYaNDaMlaHCaakaakaCFaPZaxZaQaaQbaQbaQbaQbaQcaPcaQdaQeaQfaPcaQgaQhaQiaQjaLoaLoaQkaQlaQmaQnaEtaQoaCFaGcapgapgapgapgapgapgapgapgapgaQpaQqaQraQsaQqaQqaQtaQucfxbwwbwwcfyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaLBaalaalaalaQwaQxaQyaQzaQAaQBaQCaLIaQDaQEaQFaLIaQGaQHaJdaJdaJdaJdaJdaJdaJdaQIaQJaQKaQLaQLaQMaQNaQOaQPaQQaOBaQRaQSaQTaQUaQVaQWaQXaQYaQZaCdaCdaDXaCdaHzaRaaakaRaaakaakaKUaKUaKUaKUaRbaRcaRdaRcaRcaRcaRcaReaRfaRcaRcaRcaRdaRgaRhaRiaRjaRkaRlaRmaRnaKVaKVaRoaRpaRqaRraKVaKVaMlaMlaRsaMlaMlaHCajQajQaCFawDaxZaAyaRtaRuaRvaRwaRxaPcaRyaRzaQfaPcaRAaRBaRCaRDaREaREaRFaRGaLkaRHaFqaRIaRJaRKaRJaMOaRJaRJaRJaRJaRJaRJaRJaRJaRLaQraRMaRNaROaMOaMOaMOaMOaMOaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaLBaRPaalaalaQwaQxaRQaRRaRSaOfaRTaJdaJdaJdaJdaJdaRUaRVaRWaRXaRYaJdaRZaSaaJdaJdaSbaSbaScaSbaSbaSbaSbaSdaSeaOBaOCaODaSfaSgaOGaOHaOIaHvaHwaCdaShaFRaSiaakaNsaaaaNsaaaaaaaSjaSkaSjaSlaRcaSmaSnaSoaSpaSpaSpaSpaSpaSpaSpaSpaSpaSqaSraSsaSraStaSuaSvaSwaSxaSyaSzaSAaSBaSCaSDaKUaHCaHCaHCaHCaHCaHCaSEaSEaCdawDaxZaAyaQbaSFaSGaSHaSIaSJaSKaSLaSMaPcaSNaSOaLnaQjaLoaLoaSPaSQaLkaSRaSSaSTaSUaSVaSWaMOaQqaSXaSYaQqaRJaSZaTaaRJaTbaTcaRMaTdaTeaTfaakaakaakaTgajQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaalaalaalaalaQwaThaRQaTiaTjaQzaTkaJdaTlaTmaTnaLIaToaTpaTqaTraPxaTsaTtaTuaTvaTwaTxaTxaTxaTxaTxaTxaTyaTzaTAaTBaLUaLWaLWaTCaPOaTDaOIaHvaTEaCdaDaaFRaSiaaaaKSaaaaKSaaaaaaaKUaTFaKUaTGaRcaTHaTIaTJaTJaTJaTJaTJaTJaTJaTJaTJaTKaTLaSraSraTMaTNaTOaTPaTQaTQaTRaTSaTTaTUaTVaTWaTXaTYaTZaUaaUbaUcaUdaEcaDgaCdaUeaUfaUgaQbaUhaUiaUjaUkaPcaUlaUmaUnaUoaUpaUqaLnaQjaLoaLoaNMaUraLkaUsaUtaUuaUvaUwaUxaUyaUzaUAaUxaUzaUBaUCaUDaUEaUFaUCaUGaUHaUIaUJaaaaaaaaaaTgaakaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6482,13 +6499,13 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaLBaLBaIcaIcbbYbbZbcabcbbccaJdaWraWsaWtaJdbcdbceaZhbcfbcgbcgbcgbcgbcgbcgbchbcibcjbckbclbcmbcnbcobcpbcqbcrbcsbctbctbcubcvbcwaNqaJEaCdaDaaFRaSiaaaaKSaaaaRaaNtaaaaaaaakaXXaRcaXYaXZaYaaVlaWPaVlbcxaSnbcyaVlaWPaVlaTHaYcaYdaNvbczbcAbcBaVwbcCbcDaSrbcEbcFbcGbcHbcIbcJbcKbcLbcMbcNbcObcPbcQbcRbcSbcTaxZbbxaZTaZUbcUbcVaZUbcUbcWaPcaYBbcXbcYbcZbdabdbbdcbaabddbdebdfbdgaEtbbIbaebdhaXpbdibdjbdkbajbdlaLyaKubdnaRJbdobdpbdqbdraQqbdsbdtaUJaaaaTgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaLBaLBakSakSakSakSakSaIcaJdaJdaJdaJdaJdbdubdvaZhbdwbcgbdxbdybdybdzbdAbdBbdCbdDbdEbdFbdGbdHaPLbdIbdJaLUbdKbdLbdKaPOaLUbaSaHvaHwaCdaDaaFRaSiaaaaNsaaaaNsaNtaaaaaaaakaXXaRcaXYaXZaYaaVlaWPaVlaVlaVlaVlaVlaWPaVlaTHaYcaYdaNvaNvbdMbdNbdObdPaSraSrbdQbdRbdSbdTbdUbdVaKUbdWaSraSrbdXbdYbdZaSraSrbeaaxZbbxaZXaZXaZXbebaZTaZTbecaPcaPcaPcbedbedbeeaPcaPcaYBaYBbefaPcbegaUtbehbeibejbekbelbdjbembenbeobepbeqberaRJbesbetbeubevaQqbbWbewaUJaaaaTgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaLBaalaalaalbexbeybezbeAbeBbeCbeDaJdbeEbeFaZhbeGbcgbcgbcgbcgbcgbcgbeHbeIbeJbeKbeLbeMbeNbeObePbeQbeRaNkbeSaNkbeTbeUbeVaHvaHwaCdaDaaFRaSiaaaaKSaaaaKSaNtaaaaakaakaWKbeWbeXbeYaYaaVlaWPaWPaWPaVlaWPaWPbeZaVlaTHaWQaSraSraSraSrbfaaSraSraSrbfbbfcbdRbfdbfebffbfgaSrbfhaSrbfibfjbfkbflbfmbfnbfoaxZbbxaZXbfpbfqbfrbfsbfsbfsbfsbftbfubfvbfwbfxbfyaPcbfzbfAbfBaPcbfCaGVbfDaXoaXoaXpaXpbfEaXraXraXraXraXraXraRJbfFbfGbfHbfIbfJbfKbfLaUJaakaTgaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaalaalaalaalbfMbfNbfObfPaQxbfQbfRbfSbfTbfUaZhbdwbcgbfVbfWbfXbfYbfZbgabgbbgcbgdbgebgfbggbghaZlbgibgjbgkbglbgmbgnaOHaOIaHvbgoaCdbgpaWJaCdaaaaKSaaaaKSaNtaakaKUaKUaKUaRcaRcaTHbaZaVkaVlaVlaVkaVlaVlaVlaVlaVkaTHbgqaVnaSraVobgrbbfbgsbgtbgubgvaVwbgwbgxbgybgzbgAaSrbgBaSrbgCbgDaSubgEbgFbfnbgGaOZbbxaZXbgHbgIbbyaZXaZXbgJbgKbgLaZXaZXaZXaZXaZXbgMaZXaZXaZXbgNbgObgPbgQaWjaWbaWbbgRbgSbgTbgUaWbaWbbgVaWiaWjbgWbgXaWmaQqbgYbgZbhaaUJaaaaTgaakaakajQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaalaalaalaalbfMbfNbfObfPaQxbfQbfRbfSbfTbfUaZhbdwbcgbfVbfWbfXbfYbfZbgabgbbgcbgdbgebgfbggbghaZlbgibgjbgkbglbgmbgnaOHaOIaHvbgoaCdbgpaWJaCdaaaaKSaaaaKSaNtaakaKUaKUaKUaRcaRcaTHbaZaVkaVlaVlaVkaVlaVlaVlaVlaVkaTHbgqaVnaSraVobgrbbfbgsbgtbgubgvaVwbgwbgxbgybgzcgaaSrbgBaSrbgCbgDaSubgEbgFbfnbgGaOZbbxaZXbgHbgIbbyaZXaZXbgJbgKbgLaZXaZXaZXaZXaZXbgMaZXaZXaZXbgNbgObgPbgQaWjaWbaWbbgRbgSbgTbgUaWbaWbbgVaWiaWjbgWbgXaWmaQqbgYbgZbhaaUJaaaaTgaakaakajQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaalaalaalaalbhbbhcbhdbhebhfaPwbhgaJibhhbhiaZhbhjbcgbcgbcgbcgbcgbhkaZhbhlbhmbhnbhobhpbhqbaKaSebhraLUaLWaLWaLWaPOaTDaOIaHvaHwaCdbhsaDaaCdaaaaKSaaaaKSaaaaaaaKUbhtaKUbhuaRcaTHbhvaSnbhwaSnaSnaSnaSnaSnaSnaSnbcybhxaSraSraTMbhybhzbhAbhBbhCbhCbhCbhDbhEbhFbhGbhHaKUbhIaSrbhJbhKbhLbhLbhMbfnbfoaxZbbxaZXbhNbhNbfrbhOaZXaZXaZXaZXbhPbhQbhQbhQbhQbhQbhRbfpbfpaZXbgObhSaVYaVZaQqaQqbhTaQqbhUbhVbhVbhWbhXbhYbhZbiabhVbibbicbidaUJaUJaUJaaaaTgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaalaalaalaalbieakSakSaIcaIcbifbigbihaJdbifaOfaZhbiibijbikbikbikbilbimaZhaZiaZiaZiaZiaZiaZibinaSeaOBbioaQSbipaQUaQVaQWaQXbiqbiraCdaDaaDaaCdaaaaNsaaaaNsaaaaaaaSjbisaSjaSlaRcbitbiubivbiwbiwbiwbiwbiwbiwbiwbiwbixbiyaSrbizaSraStbiAbiBbiCbiDbiEbiFbiGbiHaKUaKUaKUaKUbhIaSraSrbfnbfnbfnaSraSrbiIaxZbbxaZXaZXaZXbbyaZXaZXbiJbiKbiLaZXbiJbiMbgLaZXaZXbiNbiObiMbiLbgObhSbiPaRJbiQaSZaMOaQqbiRbiSaQqaRJaQqbiTaMObiUaQqaWmbiVbiWaUJaaaaaaaakaTgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaalaalaalaalaalaalaalaalaIcbiXbiYbiZaJdaJdbjaaIcaIcbjbbjbbjbbjbbjbbjbbjbbjcbjdbjebjfbjgaLWbjhaSeaOBaOCaODbjiaSgbjjaOHbjkbjlaIpaCdaDaaDXaCdaHzaRaaakaRaaakaakaKUaKUaKUaKUaRbaRcbjmbjnbjnbjnbjnbjobjnbjnbjnbjnbjpbjnbjqbjrbjsbjtbjubjvbjwaSrbjxaSrbjyaSraKUajQaakaakaakaakaakaaaaaaaakaakaCFbjzaxZbbxaZXbfqbfpbbyaZXbjAbjBbjBbjBbjBbjBbjBbjBbjCaZXbiNbiMbiMbgLbjDbjEbjFaRJaRJaRJaRJaRJaRJaRJaRJaRJaRJbjGaMOaQraQqaWmbjHbjIaUJaakaakaaaaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaalaalaalaalaalaalaalaIcbjJbjKbjLaJdaOfaOfbjMbjNbjbbjObjPbjPbjPbjQbjbbjRbjSaQSaQSbjSbjTbjUbdIbjVaLUaLWaLWaTCaPOaOHaOIaHvaHwaCdaDaaFRaSiaakaKSaaaaKSaaaaaaaaaaakaakaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaSraSrbjWbjXbjYbjZaSraNvbkaaapaapaazaaaaaaajQaakaakaaaaaaaaaaaaaakaCFbkbaxZbbxaZXbkcbiKbfrbfsbkdbkebkfaUjaUjaUjbkgbkhbkibhQbkjbkkbklbiLbgOaFqaLqbkmaaaaaaaaaaaaaaaaaaaaabknapgbkoaMObkpbkqaWmbkrbksaUJaaaaaaaaaaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaalaalaalaalaalaalaIcaIcaIcaIcaIcbktaPubkubkvbjbbkwaLzaMKaLzbkzbkAbkBbkCbaPbkDbkEbkFbkGbkHaVebkIaNkbkJaVhaViaNoaNpaNqaJEaCdbkKaFRaSiaaaaKSaaaaKSaaaaaaaaaaakaakaakaaaaaaaakaaaaaaaaaaaaaakaaaaaaaaaaaaaakaaaaKUbkLbkMbkNbkObkPbkQaSrbkRbkSaPraPsaaJaaaaaaaakaaaaaaaaaaaaaaaaaaajQaCFbkTaxZbbxaZXbhNbhNbbyaZXbkUbkVaUjaUjbkWaUjaUjbkVbkXaZXbkYbhNbhNaZXbgOaFqaLqbkmaaabkZbkZbkZbkZbkZbkZbkZapgbkoaRJblaaMOblbaMOaMOaMOaRJaRJaakaNtaakajQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaalaalaalaalaalaIZaIZaIZakSakSakSakSakSbjbblcaMLbalaMMblgblhblibljblkbllblmblnbloblpblqaOCaODblraOFblsaOHaOIbltblublvblwaFRaSiaaaaIraIsaNsaaaaaaaakaakaakaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaKUblxblyblzblAblBblCaSrblDblEaapaapaaOaaaajQajQaaaaaaaaaaaaaaaaaaaaaaCFblFblGbbxaZXaZXaZXbbyblHaQbaQbaQbblIaQbblIaQbaQbaQbblJbkYaZXaZXaZXblKaUtblLbkmaaabkZblMblNblNblNblOblPaEwblQaSUblRblSblTblUblVblWblXaRJaaaaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaalaalaalaalaalaalaalaIcbjJbjKbjLaJdaOfaOfbjMbjNbjbbjObjPbjPbjPbjQbjbbjRbjSaQSaQSbjSbjTbjUbdIbjVaLUaLWaLWaTCaPOaOHaOIaHvaHwaCdaDaaFRaSiaakaKSaaaaKSaaaaaaaaaaakaakaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaSraSrbjWbjXbjYbjZaSraNvcgccgwcgwcgxaaaaaaajQaakaakaaaaaaaaaaaaaakaCFbkbaxZbbxaZXbkcbiKbfrbfsbkdbkebkfaUjaUjaUjbkgbkhbkibhQbkjbkkbklbiLbgOaFqaLqbkmaaaaaaaaaaaaaaaaaaaaabknapgbkoaMObkpbkqaWmbkrbksaUJaaaaaaaaaaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaalaalaalaalaalaalaIcaIcaIcaIcaIcbktaPubkubkvbjbbkwaLzaMKaLzbkzbkAbkBbkCbaPbkDbkEbkFbkGbkHaVebkIaNkbkJaVhaViaNoaNpaNqaJEaCdbkKaFRaSiaaaaKSaaaaKSaaaaaaaaaaakaakaakaaaaaaaakaaaaaaaaaaaaaakaaaaaaaaaaaaaakaaaaKUbkLbkMbkNbkObkPbkQaSrbkRcgycgBcgAcgCaaaaaaaakaaaaaaaaaaaaaaaaaaajQaCFbkTaxZbbxaZXbhNbhNbbyaZXbkUbkVaUjaUjbkWaUjaUjbkVbkXaZXbkYbhNbhNaZXbgOaFqaLqbkmaaabkZbkZbkZbkZbkZbkZbkZapgbkoaRJblaaMOblbaMOaMOaMOaRJaRJaakaNtaakajQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaalaalaalaalaalaIZaIZaIZakSakSakSakSakSbjbblcaMLbalaMMblgblhblibljblkbllblmblnbloblpblqaOCaODblraOFblsaOHaOIbltblublvblwaFRaSiaaaaIraIsaNsaaaaaaaakaakaakaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaKUblxblyblzblAblBblCaSrblDcgEcgwcgwchjaaaajQajQaaaaaaaaaaaaaaaaaaaaaaCFblFblGbbxaZXaZXaZXbbyblHaQbaQbaQbblIaQbblIaQbaQbaQbblJbkYaZXaZXaZXblKaUtblLbkmaaabkZblMblNblNblNblOblPaEwblQaSUblRblSblTblUblVblWblXaRJaaaaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaalaalaIZaIZaIZaIZaIZaIZaIZaIZaIZbjbblYbambdmbbObmcbmdaLWbmeaLWaLUbmfaLUaLUbmgaLUaLUaLUaLUaLUaLUaLWaJCaHvbmhaCdaCdaWJaCdaaaaJHbmibmjaaaaakbmkaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKUbmlbmmbmnbmobmmbmpaKUaKUaKUaWPaWPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCFbmqbmrbmsbmtbmubmtbmvbmwbmtbmtbmtbmtbmxbmybmtbmtbmtbmwbmzbmtbmtbmtbmAaFqbmBbmCbkmbkZbmDbmEbmFbmEbmGbkZbmHbkoaRJbmIbkybkxblebldblfbmObmPaaaaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbjbbmQbmRbmSbjPbmTbjbbmUbmVbmWaLUbmXbmYbmZbnabnbbncbncbndbncbnebmZaHuaHvaOJbnfaCdaDaaCdaaaaaaaJHbngbnhaakaakaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaKUbniaSubmmbnjaSubnkaKUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalaalbnlbkbbnmbnnaFqaSSbnobnpaFqaFqaFqaFqaFqbnqbnraFqaFqaFqaFqbnsaFqaFqaFqbnrbntbnubnvbnwbnxbnwbmEbnybmEbnzbkZbnAbnBbnCbnDbmablZbmJbmbbkybnIbmPaakaNtaaaaaaaaaajQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZakSakSakSakSakSaLUaLUbnJbnKbnLbnMbnNbnObnPbnQbnRbnSbnSbnSbnSbnTbnUbnVaHvaOJbnWaCdaDaaCdajQaakaakbnXbnYbnhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKUbnZboabobbocbodboeaKUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalaynbnlbofaVHaVIbogbogbohboibogbogbojbogbogbokbolbogbombonbogboobohbogbogbopaEtboqborbkmbkZbosbnwbotbnwboubkZapgbovaRJbmIbmabmKbmLbmbbkyboybmPaaaaNtaakaakaakaakaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6501,21 +6518,21 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbtbbrubqLbrubtcbmZbmXbtdbmZbspbnbbtebtebtfbtebnbbmZbtgbthbtiaCdbtjbtkbtjaCdaCdaCdaCdbtlbtmaDaaDaaDaaDaaDaaDaaDaaDaaDaaDaaDaaDaaDaaDaaDaaDaaDaaDaaDaaDabtnbtoaDaaDaaDaaDabtpaVEbtqaCdbqrbqrbqrbtrbsxbtsbttbsxbswaDaaDaaCFbkbaJTbtubtvbtwbtxbtybtzbtxbtybtzbtxbtAbtzbtxbtBbtCbtDbtEbtFbtGbtHbtIbtJbtKbtLbtMbtNbtObtPbtQbtRbtRbtSbsjbtTbtUbqJbqKbqKbqKbqKbqKbqJaaaaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbtVbtWbtXbtYbtZbmZbuabmZbmZbubbmZbmZbmZbmZbmZbmZbmZbucbudbueaCdaCdaCdaCdaCdbufbufaCdaCdaCdaCdbugaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdbuhaCdaCdaCdbufbufbqrbqrbuibujbukbqraCdaCdaCdaCFbulbumbunboTbuobupbuqburbupbusburbutbuqburbuubuvbrObuwbrObuxbuyboTbuzbuAbuBbuCbsjbsjbsjbuDbuEbtRbtRbuFbsjbuGbuHbqJbqKbqKbqKbqKbqKbqJaaaaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbuIbuJbuKbuLbuMbuNbuObuPbuPbuQbuRbuSbuTbuUbuVbuWbuXbuYbuZbvabvbbvcbvcbvcbvdbvebvebvfbvgbvcbvcbvcbvcbvhbvibvcbvcbvcbvjbvkbvlbvmbvnbvcbvcbvjbvcbvhbvbbvobvpbvqbvrbvcbvhbvsbvtbvcbvcbvubvebvebvvbvcbvwbvxbvybvzbvAbvBbvcbvCbvDbvEbvFboTbvGbrmboTbvHbrmboTbvIbrmboTbvJbrmboTbvKbvLbvMbvNbvMboTbvObnpbvPbqIbvQbsjbsjbsjbvRbvSbvTbvUbsjbsjbvVbtabqKbqKbqKbqKbqKbqJaaaaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbvWbvXbqLbvYbvZbwabwbbwbbwbbwbbwcbwdbwebwfbwgbwgbwhbwibwjbwkbwlbwkbwkbwkbwkbwkbwmbwnbwkbwkbwkbwkbwkbwkbwlbwkbwkbwkbwobwkbwpbwqbwrbwsbwtbwobwkbwkbwlbwubwkbwvbwkbwkbwkbwwbwxbwsbwsbwsbwsbwsbwybwsbwzbwAbwkbwkbwubwvbwkbwvbwkbwBbwCboTbnHbnGboTbowbnGboTboxbnGboTbpjbnGboTbvMbvLbvMbvNbwIboTbwJbhSbwKbwLbwMbwNbwObwObwPbwQbwObwRbwSbsjbvVbqJbqKbqKbqKbqKbqKbqJaaaaNtaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbvWbvXbqLbvYbvZbwabwbbwbbwbbwbbwcbwdbwebwfbwgbwgbwhbwibwjbwkbwlbwkbwkbwkbwkbwkbwmbwnbwkbwkbwkbwkbwkbwkbwlbwkbwkbwkbwobwkbwpbwqbwrbwsbwtbwobwkbwkbwlbwubwkbwvbwkbwkbwkchkbwxbwsbwsbwsbwsbwsbwybwsbwzbwAbwkbwkbwubwvbwkbwvbwkbwBbwCboTbnHbnGboTbowbnGboTboxbnGboTbpjbnGboTbvMbvLbvMbvNbwIboTbwJbhSbwKbwLbwMbwNbwObwObwPbwQbwObwRbwSbsjbvVbqJbqKbqKbqKbqKbqKbqJaaaaNtaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbqLbqLbqLbqLbwTbwUbqLbqLbqLbrubuRbwVbwWbwXbwYbwZbqrbxabxbbxcbxcbxcbxcbxcbxdbxcbxebxcbxcbxfbxcbxgbxhbxhbxhbxhbxibxjbxkbxcbxlbxmbxnbxobxpbxqbxobxobxobxrbxobxsbxobxobxtbxobxubxobxobxobxobxobxobxvbxwbxxbxybxybxzbxwbxybxwbxybxAbxBboTbplbpkboTbplbpmboTbplbwDboTbplbwEboTbxHbxIbxHbvNbxJboTbxKbxLbxMbqIbqIbqIbqIbqIbqIbqIbqIbqIbqIbxNbvVbqJbqKbqKbqKbqKbrsbqJaaaaNtaaaaakaakaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbrubxObxPbqLbxQbqLbrubuRbxRbxSbxTbwYbxUbxVbxWbxXbxYbxZbyabxVbybbxVbxVbycbydbxVbxVbyebyebyfbygbygbyfbyebyebyebyebyhbyibyjbykbylbykbykbykbykbymbykbynbyobypbypbypbypbypbypbypbypbypbyqbyrbysbytbyubyubyvbywbyubywbyxbyrbyqbyybyybyybyybyybyybyybyybyybyybyybyybyybyybyzboTbyAbyBbyBbyCbyDbyEbyBbyFbyGbyHbyIbyBbyJbyKbyLbyBbyMbyNbqJbqKbqKbqKbqKbqKbqJaakaNtaaaaaaajQaakajQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbyObyPbyQbqLbyRbqLbrubuRbySbyTbyUbyUbyVbyWbyXbyYbyZbyZbyZbzabzbbxVbzcbzdbzebzebxVbzfbzgbzgbzgbzgbzgbzhbzibzjbzkbzlbzmbznbykbzobzpbzqbzrbzsbztbykbzubzvbypbzwbzxbzybzzbzAbzBbzAbypbzCbzDbzEbzFbzGbzGbzHbzIbzGbzIbzGbzJbzKbyybzLbzMbzNbyybzObzPbzQbzRbzSbzTbzUbzVbzWbzXbzYbzZbyBbyIbyIbAabAbbAcbyFbAdbyFbAebyBbAfbAgbAhbyBbqIbqIbqIbqIbqIbqIbqIbqIbqIaaaaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbyObyPchlbqLbyRbqLbrubuRbySbyTbyUbyUbyVbyWbyXbyYbyZbyZbyZbzabzbbxVbzcbzdbzebzebxVbzfbzgbzgbzgbzgbzgbzhbzibzjbzkbzlbzmbznbykbzobzpbzqbzrbzsbztbykbzubzvbypbzwbzxbzybzzbzAbzBbzAbypbzCbzDbzEbzFbzGbzGbzHbzIbzGbzIbzGbzJbzKbyybzLbzMbzNbyybzObzPbzQbzRbzSbzTbzUbzVbzWbzXbzYbzZbyBbyIbyIbAabAbbAcbyFbAdbyFbAebyBbAfbAgbAhbyBbqIbqIbqIbqIbqIbqIbqIbqIbqIaaaaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbqLbqLbqLbqLbxQbqLbrubuRbAibAjbAkbwYbAlbxVbAmbAnbAobApbApbApbAqbxVbArbAsbzebAtbxVbAubAvbAwbAwbAwbAxbAybAzbAAbABbACbADbAEbykbAFbAGbAHbAGbAIbAJbykbAKbALbypbAMbANbAObAPbzAbzAbAQbypbzGbzGbARbASbzGbzGbATbAUbAVbAWbAXbAYbAZbBabBbbBcbBdbBebBfbBgbBhbBibBjbBkbBlbBkbBmbBnbBobzvbyBbBpbwGbwFbAbbyFbyFbBsbBtbyFbBubAfbAfbBvbyBaabaabaabaabaabaabaabaalaakaaaaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbqLbqLbrubuRbBwbBxbuRbBybBzbxVbBAbBBbBAbBCbBCbBCbBDbxVbxVbycbydbxVbxVbBEbBFbBGbBHbBIbBJbBKbBLbBMbBNbBObADbBPbBQbBRbAGbAGbAGbAGbBSbykbBTbBUbypbBVbBWbAObBXbzAbzAbzAbypbBYbAVbBZbCabCabCabCbbCcbCdbCdbCebzIbCfbyybCgbChbCibyybCjbCkbClbzRbCmbBkbCnbBkbCobyybCpbzvbyBbCqbwGbwFbCrbCsbyFbCtbCubCvbyBbyBbyBbyBbyBaalaabaabaabaabaabaabaalaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbrubCwbxObCxbxVbCybCzbCAbCBbCCbCDbCEbCEbCEbCEbCFbCGbCHbCIbCJbCKbCLbCMbCNbCObCPbBJbBKbCQbyfbBNbBObADbAEbCRbCSbAGbAGbAGbAGbAGbCTbBTbCUbypbypbypbCVbypbypbypbypbypbCWbzGbCXbCYbCZbDabDabDbbCZbDcbDdbDebDfbDgbDhbBkbDibyybzObCkbClbzRbDjbDkbDlbDmbDnbyybDobzvbyBbDpbxCbwHbxEbxDbxFbxDbxDbDvbDvbDwbDxbDybyBaalaalaabaabaabaabaalaalaaaaakaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbDzbDAbuQbCxbxVbDBbDCbDCbDCbDDbDEbDFbDFbDFbDFbDGbDHbDIbDJbDKbxVbDLbDMbDNbDObDPbDQbBKbCQbyebBNbBObADbAEbykbDRbDSbAGbDTbDUbDVbykbBTbDWbypbDXbDYbDZbEabEbbEcbEdbEebzHbzGbCXbEfbEgbEhbzGbEibEjbEkbDdbElbEmbyybEnbBkbEobyybzObEpbEqbErbEsbEtbEubEvbEwbyybExbzvbyBbEybwGbwFbEzbEAbyFbEAbEAbEBbyFbECbyFbyFbEDaalaalaalaabaabaalaalaalaaaajQajQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbEEbuQbEFbEGbCxbxVbEHbEIbCEbCEbEJbEKbELbEMbENbEObEPbEQbERbESbETbxVbEUbEVbEWbEXbEYbEZbFabFbbyebFcbBObADbFdbykbFebFfbFgbFhbFibFjbFkbBTbBUbypbFlbBWbANbFmbFnbFobFpbEebzHbzGbCXbEfbzGbzGbzGbzIbzGbFqbDdbElbFrbyqbyqbyqbyqbyqbyqbyqbFsbyybyybFtbyybyybyybyybFubzvbyBbFvbwGbwFbxGbwGbwGbwGbwGbyFbyFbFxbFxbyFbEDaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFybFzbFAaabaabaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbqLbwUbqLbqLbFBbFCbxVbxVbxVbFDbxVbxVbxVbxVbxVbxVbxVbxVbycbxVbxVbxVbxVbyebyebyebyebFEbyebygbFFbFGbFGbFHbADbFIbykbylbykbykbykbykbykbykbFJbFKbypbFLbANbANbFMbFNbFObEdbEebATbFPbFQbyrbyxbyxbFRbysbyxbyrbFSbFTbFUbFVbyqbFWbFXbFXbFYbyqbFZbGabGbbGcbGdbGebGfbyybCpbzvbyBbGgbwGbwFbGhbGibyFbGjbGjbyFbGkbyIbyIbGlbEDaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGmbGnbGoaabaabaabaabaabaabaadaadaadaadaadaadaadaagaagaabaabaabaabaabaabaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbGpbGqbGrbqLbFBbFCbGsbGtbqLbGubtYbtYbtYbGvbtYbGwbGxbGybGzbGxbtYbtYbtYbGAbtYbtYbtYbGBbGCbGDbGEbGFbGGbGHbGIbGJbGKbGLbGMbGNbGObGPbGQbGNbBTbzvbypbGRbANbANbANbGSbGTbEdbEebzHbzGbGUbGVbGWbGXbGXbGYbGZbyxbHabElbzGbHbbHcbHdbHebHfbHgbHhbHibBcbHjbBcbBcbHkbHlbyybHmbzvbyBbHnbwGbBqbDqbBrbBrbBrbBrbHrbGkbyIbHsbGlbEDaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGmbGnbGoaabaabaabaabaabaabaadaadaadaadaadaadaadaagaagaabaabaabaabaabaabaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLchmbGqbGrbqLbFBbFCbGsbGtbqLbGubtYbtYbtYbGvbtYbGwbGxbGybGzbGxbtYbtYbtYbGAbtYbtYbtYbGBbGCbGDbGEbGFbGGbGHbGIbGJbGKbGLbGMbGNbGObGPbGQbGNbBTbzvbypbGRbANbANbANbGSbGTbEdbEebzHbzGbGUbGVbGWbGXbGXbGYbGZbyxbHabElbzGbHbbHcbHdbHebHfbHgbHhbHibBcbHjbBcbBcbHkbHlbyybHmbzvbyBbHnbwGbBqbDqbBrbBrbBrbBrbHrbGkbyIbHsbGlbEDaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabHtbHubHvbFAbHwbHwbHwbHwbHwaabaabaabaagaagaagaagaagaagaabaabaabaalbHxaabaabaabaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbHybrubFBbHzbFBbFCbHAbrubqLbHBbHCbHCbHCbHDbHCbHCbHCbHCbHCbHCbHCbHCbHCbHDbHCbHCbHCbHCbHEbHFbHGbHHbHIbFHbHJbHKbHLbHMbHNbHObHPbHQbHRbGNbBTbzvbHSbANbANbANbANbGSbGTbEdbEebzHbzGbHTbyxbHUbHVbHWbHXbHYbyxbHabHZbzGbHbbIabIbbIcbIdbIebIfbIgbIhbIibIjbBkbBkbIkbyybHmbzvbyBbIlbwGbDrbInbIobyFbIobyFbyFbGkbIpbIqbGlbEDaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIrbIsbGnbItbIubHwbIvbIwbIxbHwaabaabaabaabaabaabaabaabaabaabaabaalbIyaalaalaabaabaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbIzbHCbIAbIBbICbIDbrubIEbqLbIFbrubqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbIGbIGbIGbIGbIHbIIbIJbIGbIKbADbFIbGKbILbIMbINbIObIPbIQbGNbBTbzvbypbIRbANbISbITbIUbIVbIWbIXbIYbIZbJabyqbJbbJcbHWbJdbJebyqbHabElbzGbJfbyqbJgbIcbzGbHbbJhbJibJjbIibBkbBkbBkbBkbJkbHmbzvbyBbJlbyIbJmbJnbJobJobJpbyFbyFbyFbJqbJqbyFbEDaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFAbJrbJsbJtbJubJvbJwbJxbHwaabaabaabaabaabaabaabaabaabaabbJybJyaalbJzaalaabaabaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbqLbqLbqLbqLbqLbFBbFCbJAbJBbqLbIFbrubqLaabaabbqLbJCbJDbJEbJFbqLbJGbJHbJIbJIbJIbIGbJJbJKbJLbJMbJNbJObIGbFHbADbFIbGKbJPbJQbGNbGNbGNbGNbGNbJRbJSbJTbJUbJVbJVbJVbJWbJXbJYbyqbJZbKabKbbyqbKcbKdbKebKfbKgbyqbyqbKhbKibyqbyqbKjbKkbKlbKmbJhbKnbKobKpbKqbKrbKsbKtbyybHmbzvbyBbKubIqbJmbyFbKvbKwbKxbyIbKybKzbyFbyFbKAbyBaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaanTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFAbKBbKCbKDbHwbKEbKFbKGbKHaynaalaalaalaalbJyaalaalaalaalaalaalbKIbKJaalaabaabaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbKKbKLbtWbKMbKNbKObKPbKNbKNbKNbKQbrubqLbqLaabbqLbrubrubKRbrubrubrubrubrubrubrubIGbKSbKTbKUbKVbKWbKXbIGbFHbADbKYbGKbHmbJQbGNbKZbLabLbbGNbLcbzvbypbLdbLebANbANbGSbLfbypbLgbLhbLibLjbyqbyqbLkbLlbysbyqbyqbLmbLnbLobLpbyqbyqbLqbLrbJhbJhbLsbLtbLubyybyybyybyybyybHmbzvbyBbyBbyBbyBbLvbyBbyBbyBbyBbyBbyBbyBbyBbyBbyBaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFAbKBbKCbKDbHwbKEbKFbKGbKHaynaalaalaalaalbJyaalaalaalaalaalaalbKIbKJaalaabaabaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbKKbKLbtWbKMbKNbKObKPbKNbKNbKNbKQbrubqLbqLaabbqLbrubrubKRbrubrubrubrubrubrubrubIGbKSbKTbKUbKVbKWbKXbIGbFHbADbKYbGKbHmbJQbGNbKZchnbLbbGNbLcbzvbypbLdbLebANbANbGSbLfbypbLgbLhbLibLjbyqbyqbLkbLlbysbyqbyqbLmbLnbLobLpbyqbyqbLqbLrbJhbJhbLsbLtbLubyybyybyybyybyybHmbzvbyBbyBbyBbyBbLvbyBbyBbyBbyBbyBbyBbyBbyBbyBbyBaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabHwbHwbHwbHwbLwbHwbLxbLybLzbLAbLBbLCaalbJyaalaalaabaabaabaabaabaalaalaalaalaabaabaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaabaabbqLbKKbLDbuJbLEbLFbLGbLHbHCbHCbHCbLIbLJbLKbqLaabbqLbLLbrubrubLMbrtbLNbIGbIGbIGbIGbIGbLObLPbLQbLRbLSbLTbIGbLUbADbFIbGKbLVbLWbLXbLYbLZbMabGNbLcbzvbMbbMcbMdbMebMebMfbMgbMhbMibMjbMkbMlbMmbMnbMobMpbMqbMrbMsbMtbMubMvbMwbMxbMybMzbMAbMBbMCbMDbMEbMwbMFbMGbMHbMIbMJbLVbMKbMKbMKbMLbMKbMKbMKbMKbBobMMbMNbMObMObMObMObMObMPbMPbMPbMPbMPbMPbMPbMPbMPbMPbMPbMPbMPbMPbMPbMQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabHwbHwbMRbMSbHwbMTbHwbHwbHwbHwbHwaynbMUaalaalaabaabaabaabaabaabaabaabaabaabaabaabaabaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaabaabbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbMVbqLaabbqLbMWbrubMXbqLbqLbqLbIGbMYbMZbNabNbbNcbNdbNebNfbKWbNgbIGbFHbADbFIbGKbzvbJQbGNbNhbNibNjbGNbNkbIPbNlbNmbNnbNobNpbNqbNrbNsbNtbNubNvbNwbNxbNybNzbNAbLobLobNBbNCbNDbNEbMpbNFbNGbMpbMkbMpbMkbNHbMebMebMebNIbNJbzvbNKbNLbNLbNLbNLbNMbNLbNLbNLbNLbNNbNObGNaabaabaabaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNPbNQbKCbNRbHwbNSbNTbNUbNVbHwaabaabaabaabaabaabaabaagaagaagaagaagaabaabaabaabaabaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbqLbMVbqLaabbqLbNWbrubNXbqLbNYbNZbIGbOabObbOcbOdbOebNebNebOfbKWbNebIGbOgbOhbOibGKbBUbJQbGNbGNbOjbGNbGNbJQbzvbOkbOkbOkbOkbOlbOkbOkbOkbOmbOnbOobOmbOpbOmbOqbOrbOsbOtbOtbOubOvbOwbOsbOxbOybOzbOAbOBbLibOCbODbMebOEbOFbOFbOFbOFbOFbOFbOFbOFbOFbOFbOFbOFbOFbHmbOGbGNaabaabaabaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6528,39 +6545,39 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUPbUQbUQbUQbUPaabaabaabaabaabaabaabaalaalaalaalaalaalaalaalaalaabaabaabbURbURbURbURbURbqLbRSbFBbPRbSKbSLbSMbUSbSObUTbSObUUbUVbSUbSUbUWbSUbSUbUXbUYbUZbVabHIbFHbVbbGJbGKbGKbGKbGKbGKbLcbRbbOmbOmbOmbOmbOmbOmbOmbVcbOmbOmbOmbOmbOmbOmbVdbOmbOmbVebVfbMHbMHbMHbMHbVgbVhbVibVjbVkbVlbVmbVnbVobVpbVqbSxbTAbOFbVrbVrbVrbVrbVsbVtbUJbVubQFbVvbVwbOFbVxbTIbGNaabaabaabaalaalaalagiaalbTJbUObTLaalbTJbUObTLaalbTJbUObTLaalagiaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVzbVybUQbUQaabbUQbUQbUQbUQaalaalaalaalbVAaalaalaalaalbVAaalbURbURbURbVBbVCbVDbURbVEbVFbVGbPRbPRbPRbPRbPRbPRbVHbPRbVIbVJbVKbVLbVMbVNbVObVPbVQbUZbHHbHIbFHbADbFIbGKbVRbVSbVTbBUbVUbVVbzvbzvbzvbzvbzvbzvbVWbzvbzvbzvbzvbMIbVfbVXbVYbVZbVXbWabWbbVfbWcbWdbMHbWebWfbWgbWhbWibWjbWkbWlbWmbUzbWnbSxbWobOFbWpbWqbWrbUHbWsbWtbWubWvbWwbWsbWxbWybWzbWAbGNaabaabaabaabaalaalagiaalbTJbUObTLaalbTJbUObTLaalbTJbUObTLaalagiaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybVybVybVybUQbUQbUQbWBbWCbWDbWEbWEbWEbWEbWEbWEbWEbWEbWEbWEbWEbWFbWGbWFbWHbWIbWJbWKbQTbWLbWMbHCbHCbHCbHCbHCbWNbWObPRbWPbWQbPRbPRbPRbPRbWRbPRbWSbUZbHHbHIbOgbWTbWUbWVbWWbWXbWXbWXbWYbWZbXabXabXabXbbXabXabXcbXabXabXabXabXdbXebXfbXgbXhbXibXjbXibXkbXibXibMHbXlbMebMebMebTpbVlbXmbUzbXnbUzbXobSxbXpbOFbXqbXrbXsbTEbXtbXubXvbTEbXwbXxbXybOFbXzbBTbXAbXAbXAbXAbXBaalaalagiaalbTJbUObTLaalbTJbUObTLaalbTJbUObTLaalagiagiagiagiaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybVybVybVybVybVybUQbUQbXCbXDbUQaalaalaalaalaalaalaalaalaalaalaalbPSbPSbURbXEbXFbURbURbXGbXGbXGbXGbXGbXGbXGbXGbXHbHIbPRbPRbPRbPSbXIbXJbXJbXJbXJbXKbXLbXMbXNbXObXPbXQbGKbGKbGKbXRbXRbXRbXSbXRbXRbXRbXTbXRbXRbXRbXRbXRbXRbXRbOGbVfbVXbVYbXibVXbXibXibVfbXUbXVbMHbXWbRubXXbXYbXZbSxbYabYbbYcbUzbYdbSxbSxbOFbOFbOFbOFbOFbOFbOFbOFbOFbOFbOFbOFbOFbXzbBTbYebYfbYgbYhbXBbXBbXBaalaalaalbYiaalaalaalbYiaalaalaalbYiaalaalaalaalaalagjaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybVybVybVybVybVybUQbUQbXCbXDbUQaalaalaalaalaalaalaalaalaalaalaalbPSbPSbURbXEbXFbURbURbXGbXGbXGbXGbXGbXGbXGbXGbXHbHIbPRbPRbPRbPSbXIbXJbXJbXJbXJbXKbXLbXMbXNbXObXPbXQbGKbGKbGKbXRbXRbXRbXSbXRbXRbXRbXTbXRbXRbXRbXRbXRbXRbXRbOGbVfbVXbVYbXibVXbXibXibVfbXUbXVbMHbXWbRubXXbXYbXZbSxbYabYbbYcbUzbYdbSxbSxbOFbOFbOFbOFbOFbOFbOFbOFbOFbOFbOFbOFbOFbXzbBTbYechobYgbYhbXBbXBbXBaalaalaalbYiaalaalaalbYiaalaalaalbYiaalaalaalaalaalagjaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybYjbYkbVybYjbYkbVybVybUQbYlbUQbUQaalaalaalaalaalaalaalaalaalaalaalaalbPSbYmbYnbYobYpbYqbDsbDtbYtbYubDubYwbYxbYybYzbYAbYBbYCbSZbSZbSZbSZbSZbSZbSZbYDbSYbYEbHIbFHbADbFIbGKbYFbYGbXRbYHbYIbYJbXRbYKbYLbYMbYNbYLbXRbYLbYObYPbXRbOGbVfbVXbYQbXibVXbXibYRbVfbYSbYTbMHbMHbMHbJkbMHbMHbSxbSxbSxbYUbSxbSxbSxbYVbYWbYXbYYbYZbZabNLbNLbNLbNLbNLbNLbNLbNLbZbbZcbZdbZebZfbZgbZhbZibZhbZjbZkbZkbZkbZkbZkbZkbZkbZkbZkbZkbZkbZlbZmbZmbZnaalagiaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybVybZobZpbZqbZrbZsbVybVybZtbZubZvbUQaalaalaalaalaalaalaalaalaalaalaalbZwbPSbZxbZybZzbZAbZBbZCbHHbHHbHHbHHbZDbZEbZFbZGbZHbZIbZJbZKbZLbZMbZNbZObZPbZPbZPbZQbHHbHIbZRbADbZSbGKbGKbGKbXRbZTbZUbZVbXRbZWbHobFwbHpbYLcaabYLbYPbYPbXRbOGbVfbVXcabcacbVXbXicadbVfbVfbVfbVfbzvcaebzvbzvbzvcafbzvbzvbLcbzvbzvbzvbzvbLcbzvbzvbzvcagcahcaicajcakcakcakcakcakcalcambXAcancaocapbXBbXBbXBaalaalaalcaqaalaalaalcaqaalaalaalcaqaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaadaadaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUPbUQbVybVybYjcarcasbZpbZqbZrcatcarcarcarcarcaubUPaalaalaalaalbVAaalaalaalaalbVAaalaalbPScavbZycawcaxbURbZCbHHcaycazcaAcaBcaCcaDcaEcaFbXGcaGbXGcaHbXGbXGcaIcaJbXGbXGbXGbXGbHIcaKbADcaLbGKcaMcaNbXRcaObYLcaPbXRcaQbImbHqbYrcaUbXRbYLcaVbYPbXRbOGbVfbVfbVfbVfbVfbVfbVfbVfcaWcaXbNLbNLcaYbNLbNLbNLbNLbNLbNLcaYbNLbNLbNLbNLcaZcbacbacbacbacbbcbccbdcbecbecbecbecbecbecbebXAbXAbXAbXAbXBaalaalagiaalbTJcbfbTLaalbTJcbfbTLaalbTJcbfbTLaalagiagiagjaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaadaadaadaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbVybVybVybZtcbgcbgcbhbZqcbicbgcbgcbgcbgcbgcbjbUQaalaalaalaalaalaalaalaalaalaalaalaalbPScbkcblcblcbmbURcbnbHHbHHcbocbpcaBcaCbZFcbqcbrbXGcbscbtcbucbvcbwcbxbHHbXGcbycbzcbAbHIcbBbOhbTccbCcbDcbEbXRcaQcbFcbGcbHcbIbYvbYsbZXcbMbXRbXRbXRbXRbXRcbNcbObNLbNLbNLbNLbNLbNLbNLcaYcaZbzvcbPcbPcbPcbPcbPcbPcbPcbPcbPcbPcbPbGNcbQbGNcbacbRcbScbTcbUcbVcbWcbecbXcbYcbZccaccbcccccccbeaalaalaalaalaalagiaalbTJcbfbTLaalbTJcbfbTLaalbTJcbfbTLaalagiaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaadaadaadaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQccdbVybVybVybZqbZqcceccfbZqbZqbZqbZqbZqbZqbZqccgaynaynaynaynaynaynaynaynaynaynaynayncchcciccjccjcckbURcclccmccnccnccnccnccoccpccqccrccscctccuccvccwcbwccxbSZccycczbSZccAccBccCbADbTcbGKccDccEbXRcaOccFccGccHccIccJccKbYLccLbXRccMccNccObXRccPccQbzvbBUccRccSbVSbzvbzvbzvbzvccTcbPccUccUccUccUccVccWccWccWccWcbPccXbzvccYcbaccZcdacdbcbRcdccddcdecdfcdgcdhcdhccbcccccccbeaalaalaalaalaalagiaalbTJcbfbTLaalbTJcbfbTLaalbTJcbfbTLaalagjaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaadaadaadaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQccdbVybVybVybZqbZqcceccfbZqbZqbZqbZqbZqbZqbZqccgaynaynaynaynaynaynaynaynaynaynaynayncchcciccjccjcckbURcclccmccnccnccnccnccoccpccqccrccscctccuccvccwcbwccxbSZccycczbSZccAccBccCbADbTcbGKccDccEbXRcaOccFccGccHccIccJccKbYLccLbXRccMccNccObXRccPccQbzvbBUccRccSbVSbzvbzvbzvbzvccTcbPccUccUccUccUcieccWccWccWccWcbPccXbzvccYcbaccZcdacdbcbRcdccddcdecdfcdgcdhcdhccbcccccccbeaalaalaalaalaalagiaalbTJcbfbTLaalbTJcbfbTLaalbTJcbfbTLaalagjaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbVybVybVybYjcdicdicdjbZqcdkcdicdicdicdicdicdibUQaalaalaalaalaalaalaalaalcdlcdlcdlcdlbPSbURbURbURbURbURbXGbXGcdmbZFcaDbZFbZFbXGcdncbrbXGcdocdpcdqcdrcbwcdscdtcducdvcdwcdxbHIcdybADbTcbXRbXRbXRbXRbXRbXRbXRbXRbXRcdzcdAcdBcdCbXRcdDbXRcdEcbPcbPcdFcdGcbPcbPcbPcbPcbPcbPcbPcbPcbPcbPcdHcdIcdIcdJccVcdKcdLcdLcdMcbPccTbMIcdNcbacbRcdOcdPcdQcdQcdRcdScdTcdScdUcdhccbcccccccbeaalaalaalaalaalagiaalbTJcbfbTLaalbTJcbfbTLaalbTJcbfbTLaalagiaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUPbUQbVybVybZtbZubZvbZpbZqbZrcdVbZubZubZubZucdWbUPaalaalaalaalbVAaalaalaalcdlcdXcdXcdYcdXcdXcdZceaceaceacdZbSebHHcebceccedbHHceecefcbrbXGcaGcegcaGbXGbXGcehceibXGbXGcejbXGbHIcekbADbTZbXRcelcemcenceobXRbYLbYLcepceqbYMbYLcercesbYLbYLbYLcbPcetceuccVccVcevcewcexcexcexccVceycezceAccVccVccVceBccVceCccVccVceDcbPceEceEceEcbecbecbacbacbacbacbacbecbecbecbecbecbecbecbecbeaalaalaalaalaalagiaalbTJceFbTLaalbTJceFbTLaalbTJceFbTLaalagiaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybVybZobZpbZqbZrbZsbVybVybYjcarcasbUQaabaalaalaalaalaalaalaalcdlceGceHceHceIceJceKceJceJceJceLceMceMceNceOcePceOceOceQceRceSceTceUceVceWceXceYbUZbXGceZcfacfbbHIbFHbADcfcbXRcfdbZUcbIcfecffcfgcbIcbIcfhcficfjcfkcflbZYbZYbZYcbPcfncfocfpcfpcfpcfqcfpcfpcfpcfpcfrcfscftcfpcfpcfpcfucfvcfwcfxcfyccVccVccVcfzcfAcfAcbPaalaalaalaalaalaalaynaalaalaalaalaalaalaalaalaalaalaalaalagjaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybZtcfBbVybZtcfBbVybVybUQbUQbUQbUQaabaabaabaalaalaalaalaalcdlcfCcfCcfCcfDcfEcfEcfFcfGceGcdZbHHbHHcfHcdtcfIcfJbZPcfIbZPcfKcfLcfMcfNbZPbTXbZPbZQbXGcfacfacfbbHIbFHbADbFIcdBbYLbYLcfOccGcfPccGccGccGcfQcfRbYLcfScfTbZYcaRbZZcbPcfWcfXccVccVccVccVccVccVccVccVcfYcfpcfZccVccVccVcgacgbccVccVcgcccVccVccVcgdcfAcfAcbPaalcbPcbPcbPcbPcbPaalcgeaalaalaalaalaalaalaalaalaalaalaalaalaalagiagiagjaalagiagiagiagiagiagiagiagiaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybVybVybVybVybVybUQbUQaabaabaabaabaabaabaabaabaabbqLbqLcdlcdlcdlcdlcggcdlcdlcdlcdlcdlcdlcghcaGcgicaHcghbHIbHIbHIbHIbHIbHIcgjcgkbHHbUZcglcgmbXGceZcgncfbbHIcgobADcgpcgqcgrcaScaTcaScbJcaScaScaScbKcaScaScbLbZYbZYcfUcfmcbPcgzcgAcgBcgCcgCcgCcgCcgCcgCcgCcgCcgDcgCcgCcgCcgCcdIcgCcgCcgCcgEcgCcgCcgCcgFcgGcgHcgIcgJcgIcgKcgLcgLcbPaalagjaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybVybVybVybUQbUQaabaabaabaabaabaabaabaabaabaabbqLcgMcgNcgNcgNbqLcgOcgPcgQcgRcgRcgScgTcgUcgVcgWcgXcgYcgZchachbchbchbcgPcggchcchdchechdchdchfchfchfchfchfbFHchgchhchibYLbZYcfVbZYcgfbZYbZYbZYcgtcgsbZYbZYbZYbZYcgvcgucbPccVcfXcgachpchqchqchqchqchqchqchqcgachrchqchqchqchqchqchqchqchschqccVccVccVchtcfAchuaalchuchvcgLcgLchwaalagjaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVychxbVybUQbUQaabaabaabaabaabaabaabaabaabaabaabbqLchychzchzchzbqLbrucgPchAchBchbchCchDchEchFchGchHchIchJchKchbchbchLcgPbFBchcchMchNchOchdchPchQchRchRchfbBOchSchTchUcgrcgrchVcgrchUchWbYLbYLchXcflbYLchYcflbZYcaRbZZcbPccVcfXcgachZchqciacibciccidcidchqciecifchqcigcihciicijcikcikcilchqcimcinciocipciqcirciscircitcgLcgLcbPaalagiaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUPbUQbUQbUQbUPaabaabaabaabaabaabaabaabaabaabaabaabbqLciucivciwchzbPPbrucgPchbchbchbcixciycizcgVciAcgXciBciCciDcgRcgRciEcgPbFBchcciFciGciHciIciIciJciKciLciMciNciObFIbXRbZTbYLciPciQbXRciRbYLbYLciSciTciUciVcfTbZYbZYbZYcbPccVcfXcgaccVccVciWciXciYciYciZccVcgacjachqcjbccVccVccVccVccVcjcchqcjdccVcjecfAcfAcbPaalcbPcbPcbPcbPcbPaalcjfaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabbqLbqLbqLbqLbqLbqLbqLcjgcjhchzchzbqLbrucgPcjicjicjicjicjicjjcgVcjkcgXcjlcjicjicjicjicjicgPbFBchccjmchNcjncjocjpcjqcjrcjschfbBObADchTcjtcjucjvcjvceobXRcjwbYLcjxceqcjybYLcjxcjzbYLbYLbYLcbPcjAcfXcgacjBcjCciZccVccVccVciWcjCcjDcjacjEcjFccVccVccVccVccVcjGcjEcjdccVcjHcfAcfAcbPaalaalaalaalaalaalaalagiaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabbqLbqLbqLbqLcjIcjJcjKbrubrubqLcjLcgNcgNcgNbqLbrucgPcgQcgRcgRcjMcjNcizcgVcgVcgXciBcjOcjPchbchbchbcgPbFBchccjQcjRciHcjSchdcjTcjUcjVchfcjWcjXcjYbXRbXRbXRbXRbXRbXRbXRbXRbXRbXSbXRbXRcbPcbPcbPcbPcbPcbPccVcfXcgacgcccVciWcjZcjZcjZciZccVccVcjachuckackbccVckcccVccVckdchqcjdccVckecfAcfAcbPaalcbPcbPcbPcbPcbPaalagiaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabbqLckfckgbqLckhbruckhckickhbqLbqLbqLbqLbqLbqLbrucgPchAchBchbckjchDckkcgVcklcgXckmchJcknchbchbchLcgPbFBckockpckqckrckschdcjUcjUcktchfckuckvckwckxckyckyckyckzckAckBckCckDckEckFckGckHckIckJckKckLckMckNckOckPcgcchqckQckQckRckQckQchqccVcjachuckSckTccVccVccVccVckUchqckVckWckXckYciqcirciscirckZclaclacbPaalagiaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbqLbKRclbclccldclebKRclfclgclhclicljbqLbrubrubrucgPchbchbchbclkcllcizcgVclmcgXciBciCclncgRcgRciEcgPbFBchdcloclocloclpchdcjUclqclrclscltcluclvclwclwclwclwclwclwclwclwclxclyclzclAclBclCclDclEclFclGclDclHclIcgcchqchqchqchqchqchqchqccVcjachuclJclKccVccVccVclLclMchqclNccVclOclPcfAchuaalchuclQclaclRcbPaalcjfaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbqLbqLbqLbqLbruckhbKRclSclTckhclUbrubqLbrucgPcgPcgPcgPcgPcgPcgPcgPcizcgVclVcgXciBcjicjicjicjicjicgPbFBchdclWclWclWclWchdclXclYclZchfcmacmbcmccmdcmecmecmecmecmecmecmecmdcmfcmgcmhcbPcmicmjcmkcmlchqcjacfocfxcmmchqcmncmocmocmocmpchqcmqcmrcmscmtcmucmvcmkcmkcmkcmwchqcjdccVcmxcmycmzcmAcmBcmAcmCclaclacbPaalagiaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbqLcmDcmEcmFckickibKRcjJbrucmGcmHcmIbqLbrucgPchbchbcmJchbcgPcmKcmLcmMcgVcmNcmOciBcmPcmQchbchbchbcgPbFBchdcmRclWcmSclWchdchfchfchfchfcmTcmUcmVcmeaabaalaalaalaalaalaabcmecmfcmWcmXcmYcmZcnacnbcncchqcndclHcnecnecnecnecnecnecnecnecnecnecnfchqchuchuchucjEchuchuchqchqcjdccVckecfAcfAcbPaalcbPcbPcbPcbPcbPaalcgeaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbqLcngcnhbqLbruckiclTbruclTcnicjKbKRbqLbrucgPchbchbchbchbcgPcnjcnkcnlcnmcnncnocnpchJcnqchbchbchLcgPbFBchdchdchdchdchdchdbrucnrcnscntcnucnvcmccmeaabaabaalaalaalaalaalcmecnwcnxcnycnzcnAcnBcnCcnDchqccVcnEcfxcnFcnGcincincincincinciocincincincincinciocincincincincincnHccVcjHcfAcfAcbPaalaalaalaalaalaalaalagiaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbqLbqLbqLbqLckickhcleckhckicnIcnJbrubPPbrucgPcnKchbcnLcnMcnNcnOcnPcnQcnRcnScnTcnUciCcnVcgRcgRciEcgPbEFbHCbHCbHCbHCbHCcnWbHCcnXcnYcmdcnZckvcmccoacmecmecmecmecmecmecmecmdcnwcnxcobcocccVccVccVcodcoecfxcgAccVccVcofccVccVccVccVccVcofccVccVccVccVccVcofccVccVccVccVccVcofccVckecfAcfAcbPaalagiagjcgeagiagicjfagiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUPbUQbVybVybZtbZubZvbZpbZqbZrcdVbZubZubZubZucdWbUPaalaalaalaalbVAaalaalaalcdlcdXcdXcdYcdXcdXcdZceaceaceacdZbSebHHcebceccedbHHceecefcbrbXGcaGcegcaGbXGbXGcehceibXGbXGcejbXGbHIcekbADbTZbXRcelcemcenceobXRbYLbYLcepceqbYMbYLcercesbYLbYLbYLcbPcetceuccVciecevcewcexcexcexccVceycezceAccVccVccVceBccVceCccVccVceDcbPceEceEceEcbecbecbacbacbacbacbacbecbecbecbecbecbecbecbecbeaalaalaalaalaalagiaalbTJceFbTLaalbTJceFbTLaalbTJceFbTLaalagiaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybVybZobZpbZqbZrbZsbVybVybYjcarcasbUQaabaalaalaalaalaalaalaalcdlceGceHceHceIceJceKceJceJceJceLceMceMceNceOcePceOceOceQceRceSceTceUceVceWceXceYbUZbXGceZcfacfbbHIbFHbADcfcbXRcfdbZUcbIcfecffcfgcbIcbIcfhcficfjcfkcflbZYbZYbZYcbPcfncfocfpcfpcfpcfqcfpcfpcfpcfpcfrcfscftcfpcfpcfpcihcilcdLcfpcfrccVccVccVcfzcfAcjBcbPaalaalaalaalaalaalaynaalaalaalaalaalaalaalaalaalaalaalaalagjaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybZtcfBbVybZtcfBbVybVybUQbUQbUQbUQaabaabaabaalaalaalaalaalcdlcfCcfCcfCcfDcfEcfEcfFcfGceGcdZbHHbHHcfHcdtcfIcfJbZPcfIbZPcfKcfLcfMcfNbZPbTXbZPbZQbXGcfacfacfbbHIbFHbADbFIcdBbYLbYLcfOccGcfPccGccGccGcfQcfRbYLcfScfTbZYcaRbZZcbPcfWcfXccVccVccVccVccVccVccVccVcfYcfpcfZccVccVccVcjDcgbccVccVcfXccVccVccVcgdcfAcfAcbPaalcbPcbPcbPcbPcbPaalcgeaalaalaalaalaalaalaalaalaalaalaalaalaalagiagiagjaalagiagiagiagiagiagiagiagiaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybVybVybVybVybVybUQbUQaabaabaabaabaabaabaabaabaabbqLbqLcdlcdlcdlcdlcggcdlcdlcdlcdlcdlcdlcghcaGcgicaHcghbHIbHIbHIbHIbHIbHIcgjcgkbHHbUZcglcgmbXGceZcgncfbbHIcgobADcgpcgqcgrcaScaTcaScbJcaScaScaScbKcaScaScbLbZYbZYcfUcfmcbPcgzckOckNckPckPckPckPckPckPckPckPcgDckPckPckPckPcdIckPckPckPclIckPckPckPcgFcgGcgHcgIcgJcgIcgKcgLcgLcbPaalagjaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybVybVybVybUQbUQaabaabaabaabaabaabaabaabaabaabbqLcgMcgNcgNcgNbqLcgOcgPcgQcgRcgRcgScgTcgUcgVcgWcgXcgYcgZchachbchbchbcgPcggchcchdchechdchdchfchfchfchfchfbFHchgchhchibYLbZYcfVbZYcgfbZYbZYbZYcgtcgsbZYbZYbZYbZYcgvcgucbPccVcfXcjDchpchqchqchqchqchqchqchqcjDchrchqchqchqchqchqchqchqcmlchqcmmccVccVchtcfAchuaalchuchvcgLcgLchwaalagjaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVychxbVybUQbUQaabaabaabaabaabaabaabaabaabaabaabbqLchychzchzchzbqLbrucgPchAchBchbchCchDchEchFchGchHchIchJchKchbchbchLcgPbFBchcchMchNchOchdchPchQchRchRchfbBOchSchTchUcgrcgrchVcgrchUchWbYLbYLchXcflbYLchYcflbZYcaRbZZcbPccVcfXcjDchZchqciacibciccidcidchqcjDcifchqcigcmvciicijcikcmXcmwchqcimcinciocipciqcirciscircitcgLcgLcbPaalagiaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUPbUQbUQbUQbUPaabaabaabaabaabaabaabaabaabaabaabaabbqLciucivciwchzbPPbrucgPchbchbchbcixciycizcgVciAcgXciBciCciDcgRcgRciEcgPbFBchcciFciGciHciIciIciJciKciLciMciNciObFIbXRbZTbYLciPciQbXRciRbYLbYLciSciTciUciVcfTbZYbZYbZYcbPcmmcfXcjDccVccVciWciXciYciYciZciecjDcjachqcjbccVccVccVccVccVcjcchqcjdccVcjecfAcfAcbPaalcbPcbPcbPcbPcbPaalcjfaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabbqLbqLbqLbqLbqLbqLbqLcjgcjhchzchzbqLbrucgPcjicjicjicjicjicjjcgVcjkcgXcjlcjicjicjicjicjicgPbFBchccjmchNcjncjocjpcjqcjrcjschfbBObADchTcjtcjucjvcjvceobXRcjwbYLcjxceqcjybYLcjxcjzbYLbYLbYLcbPcjAcfXcjDcnycjCciZccVccVccVciWcjCcnBcjacjEcjFccVccVccVccVccVcjGcjEcjdccVcjHcfAcjBcbPaalaalaalaalaalaalaalagiaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabbqLbqLbqLbqLcjIcjJcjKbrubrubqLcjLcgNcgNcgNbqLbrucgPcgQcgRcgRcjMcjNcizcgVcgVcgXciBcjOcjPchbchbchbcgPbFBchccjQcjRciHcjSchdcjTcjUcjVchfcjWcjXcjYbXRbXRbXRbXRbXRbXRbXRbXRbXRbXSbXRbXRcbPcbPcbPcbPcbPcbPccVcfXcjDcfXccVciWcjZcjZcjZciZccVccVcjachuckackbccVckcccVccVckdchqcjdccVckecfAcfAcbPaalcbPcbPcbPcbPcbPaalagiaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabbqLckfckgbqLckhbruckhckickhbqLbqLbqLbqLbqLbqLbrucgPchAchBchbckjchDckkcgVcklcgXckmchJcknchbchbchLcgPbFBckockpckqckrckschdcjUcjUcktchfckuckvckwckxckyckyckyckzckAckBckCckDckEckFckGckHckIckJckKckLckMckPclIcnEcfXchqckQckQckRckQckQchqccVcjachuckSckTccVccVccVccVckUchqckVckWckXckYciqcirciscirckZclaclacbPaalagiaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbqLbKRclbclccldclebKRclfclgclhclicljbqLbrubrubrucgPchbchbchbclkcllcizcgVclmcgXciBciCclncgRcgRciEcgPbFBchdcloclocloclpchdcjUclqclrclscltcluclvclwclwclwclwclwclwclwclwclxclyclzclAclBclCclDclEclFclGclDclHcobcfXchqchqchqchqchqchqchqccVcjachuclJclKccVccVccVclLclMchqclNccVclOclPcfAchuaalchuclQclaclRcbPaalcjfaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbqLbqLbqLbqLbruckhbKRclSclTckhclUbrubqLbrucgPcgPcgPcgPcgPcgPcgPcgPcizcgVclVcgXciBcjicjicjicjicjicgPbFBchdclWclWclWclWchdclXclYclZchfcmacmbcmccmdcmecmecmecmecmecmecmecmdcmfcmgcmhcbPcmicmjcoecodcqkcjacfocfpcfZchqcmncmocmocmocmpchqcmqcmrcmscmtcmucqJcmkcmkcmkcqLchqcqUccVcmxcmycmzcmAcmBcmAcmCclaclacbPaalagiaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbqLcmDcmEcmFckickibKRcjJbrucmGcmHcmIbqLbrucgPchbchbcmJchbcgPcmKcmLcmMcgVcmNcmOciBcmPcmQchbchbchbcgPbFBchdcmRclWcmSclWchdchfchfchfchfcmTcmUcmVcmeaabaalaalaalaalaalaabcmecmfcmWcmYcmYcmZcnacnbcncchscndclHcnecnecqVcnecnecnecnecnecqVcnecnfchqchuchuchucjEchuchuchqchqcjdccVckecfAcfAcbPaalcbPcbPcbPcbPcbPaalcgeaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbqLcngcnhbqLbruckiclTbruclTcnicjKbKRbqLbrucgPchbchbchbchbcgPcnjcnkcnlcnmcnncnocnpchJcnqchbchbchLcgPbFBchdchdchdchdchdchdbrucnrcnscntcnucnvcmccmeaabaabaalaalaalaalaalcmecnwcnxcrscnzcnAcrIcnCcnDchsccVcfocfpcnFcnGcincincincincinciocincincincincinciocincincincrOcincnHccVcjHcfAcjBcbPaalaalaalaalaalaalaalagiaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbqLbqLbqLbqLckickhcleckhckicnIcnJbrubPPbrucgPcnKchbcnLcnMcnNcnOcnPcnQcnRcnScnTcnUciCcnVcgRcgRciEcgPbEFbHCbHCbHCbHCbHCcnWbHCcnXcnYcmdcnZckvcmccoacmecmecmecmecmecmecmecmdcnwcnxcrPcocccVccVccVcrQcrRcfpckOccVccVcofccVccVccVccVccVcofccVccVccVccVccVcofccVccVccVccVccVcofccVckecfAcfAcbPaalagiagjcgeagiagicjfagiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbqLcogcohcoiclebrubruckiclScojcokcolbqLbrucgPcomconcoochbchbcopcoqcorcoscotcgVcoucjicgPcgPcgPcgPcgPbrucmdcmdcmdcmdcmdcmdcmdcmdcmdcovcowcoxcoycozcoAcoBcoCcoDcoEcoFcoGcoHcoIcoJcoKcoLcoMcoNcoMcoOchqcoPcoQcoRcoScoTcoUcoVcoUcoWcoScoTcoUcoVcoUcoXcoScoTcoUcoVcoUcoYcoScoTcoUcoZcfAcfAcbPcpacbPcbPaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbqLbqLbqLbqLbqLbqLbqLcpbcpbbqLbqLbqLbqLbrucgPchbcpcchbchbcpdcpecpfcpgcphcpicpjcpkcgPbDzbuPbuPcplbrubrucmdcpmcpncpocppcpqcprcpscptcpucpvckvcpwcpwcnxcpwcpwcpwcpxcnxcpycpycpzcpAcbPchuchucbPcbPcbPcbPcfAcfAcpBcpCcpDcfAcfAcfAcpBcpEcpDcfAcfAcfAcpBcpFcpDcfAcfAcfAcpBcpGcpHcfAcfAcfAcfAcbPcpIcpJcbPaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaalaalaalaalaalcpKcpLcpLcpLcpLbrucgPchbchbchbchbcgPcpMcpNcpOcpPcgPcgPcgPcgPbxObqLcpQcpRbuPbuPcpScpTcpUcpVcpUcpUcpUcpUcpUcpUcpUcpWcpXcpYcpYcpYcpYcpYcpZcpYcpYcpYcqacqbchqaaaaaaaaaaaaaaacbPcfAcfAcqccfAcqdcqecfAcfAcqccfAcqdcfAcfAcfAcqccfAcqdcfAcfAcfAcqccfAcqdcqfcfAcfAcfAcpacqgcqhcbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaalaalaalcpKcpKcpKcqicqjcqkcqlbrucgPchbchbcqmchbcgPcqncqocqpcqqcgPbDzbuPbuPbuQbqLbqLbqLbrubrucmdcqrcnxcqscpycpycnxcnxcpwcpwcpwcqtcqucpwcnxcpwcpwcpwcqscnxcpycpycnxcqbchqaaaaaaaaaaaaaaacbPcbPcbPcqvchucqwcbPcbPcbPcqvchucqwcbPcbPcbPcqvchucqwcbPcbPcbPcqvchucqwcbPcbPcbPcbPcbPcbPcbPcbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaalcqxcqxcqxcqycqzcqAcqzcqBcqCcqDcqEcplcgPcgPcgPcgPcgPcgPcgPcgPcgPcgPcgPbxObqLbqLbqLbqLaabbqLcqFbrucmdcqGcqHcqIcqHcqHcqJcqKcnxcnxcnxcnxcnxcnxcnxcqLcqJcqMcqNcqHcqHcqIcqHcqKchqaaaaaaaaaaaaaaaaakaakaakcqOaakcqPaakaakaakcqOaakcqPaakaakaakcqOaakcqPaakaakaakcqOaakcqPaakajQaakaaaaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalcqxaalaalaalcpKcpKcpKcqQcqRcqScpLcpRbuPbuPbuPbuPbuPbuPbuPbuPbuPbuPbuPbuQbqLaabaabaabaabbqLcpbcpbcmdcmdcqTcmdcmdcmdcmdcqUcqHcqHcqHcqHcqHcqHcqHcqVcmdcmdcmdcmdcqWcmdcmdcmdchqaaaaaaaaaaaaaaaaNtaakcbPcqvchucqwcbPcqXcbPcqvchucqwcbPcqXcbPcqvchucqwcbPcqXcbPcqvchucqwcbPaakaNtajQaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaalaalaalaalagiagiagiagjagiaalcqxaalaalaalaalaalcpKcpLcpLcpLcpLcqYbrubrubrubrubrubrubrubrubrubrubrubrubqLaabaaaaaaaaaaaaaaaaaaaaacqZcracrbaaaaaacmdcrccqTcrccrccrccrccrccqTcrdcmdaaaaaacqZcracrbaaaaaaaaaaakajQaakaakaakaakaakcbPcrecrfcrgcbPaakcbPcrhcricrjcbPcqXcbPcrkcrlcrmcbPcqXcbPcrncrocrpcbPaakaNtaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaalaalaalaalaalaalaalaalaalaalaalcqxaalaalaalaalaalaalaalagjaalbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLaaaaaaaaaaaaaaaaaaaaaaaacrqcqTcrraaaaaaaaacmecrscmeaakaakaakcmecrscmeaaaaaaaaacrqcqTcrraaaaaaaaaaaaaakajQajQaakaNtaakcbPcrtcrtcrtcbPaakcbPcrucrucrucbPcqXcbPcrvcrvcrvcbPcqXcbPcrwcrwcrwcbPaakajQaaaajQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaalaalaalagiaalcrxcrxcrxcrxcrxaalcqxaalcrxcrxcrxcrxcrxaalagiaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqZcracrbaakaakaakcqZcracrbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaaaakaaaajQaakcbPcrtcrycrtcbPaakcbPcrucrzcrucbPaakcbPcrvcrAcrvcbPaakcbPcrwcrBcrwcbPaakaakaakajQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaalaalaalaalagjaalcrCcrDcrDcrDcrDcrEcqxcqycrFcrFcrFcrFcrGaalagiaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrqcqTcrraakaakaakcrqcqTcrraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajQaaaaaaaaaaTgaakcbPcbPcbPcbPcbPaakcbPcbPcbPcbPcbPaakcbPcbPcbPcbPcbPaakcbPcbPcbPcbPcbPaakaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaalaalaalaalaalaalagiaalcrHcrHcrHcrHcrHaalcqxaalcrHcrHcrHcrHcrHaalagiaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrJaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakcrJaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaalaalaalaalaalcpKcpLcpLcpLcpLbrucgPchbchbchbchbcgPcpMcpNcpOcpPcgPcgPcgPcgPbxObqLcpQcpRbuPbuPcpScpTcpUcpVcpUcpUcpUcpUcpUcpUcpUcpWcpXcpYcpYcpYcpYcpYcpZcpYcpYcpYcqacqbcmdaaaaaaaaaaaaaaacbPcrScfAcqccfAcqdcqecrScfAcqccfAcqdcfAcrScfAcqccfAcqdcfAcrScfAcqccfAcqdcqfcfAcrScfAcpacqgcqhcbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaalaalaalcpKcpKcpKcqicqjcrTcqlbrucgPchbchbcqmchbcgPcqncqocqpcqqcgPbDzbuPbuPbuQbqLbqLbqLbrubrucmdcqrcnxcqscpycpycnxcnxcpwcpwcpwcqtcqucpwcnxcpwcpwcpwcqscnxcpycpycnxcqbcmdaaaaaaaaaaaaaaacbPcbPcbPcqvchucqwcbPcbPcbPcqvchucqwcbPcbPcbPcqvchucqwcbPcbPcbPcqvchucqwcbPcbPcbPcbPcbPcbPcbPcbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaalcqxcqxcqxcqycqzcqAcqzcqBcqCcqDcqEcplcgPcgPcgPcgPcgPcgPcgPcgPcgPcgPcgPbxObqLbqLbqLbqLaabbqLcqFbrucmdcqGcqHcqIcqHcqHcrUcqHcqHcqHcqHcqHcqHcqHcqHcqHcrUcqMcqNcqHcqHcqIcqHcqKcmdaaaaaaaaaaaaaaaaakaakaakcqOaakcqPaakaakaakcqOaakcqPaakaakaakcqOaakcqPaakaakaakcqOaakcqPaakajQaakaaaaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalcqxaalaalaalcpKcpKcpKcqQcqRcqScpLcpRbuPbuPbuPbuPbuPbuPbuPbuPbuPbuPbuPbuQbqLaabaabaabaabbqLcpbcpbcmdcmdcqTcmdcmdcmdcmdcrccqTcrccrccrccrccrccqTcrdcmdcmdcmdcmdcqWcmdcmdcmdcmdaaaaaaaaaaaaaaaaNtaakcbPcqvchucqwcbPcqXcbPcqvchucqwcbPcqXcbPcqvchucqwcbPcqXcbPcqvchucqwcbPaakaNtajQaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaalaalaalaalagiagiagiagjagiaalcqxaalaalaalaalaalcpKcpLcpLcpLcpLcqYbrubrubrubrubrubrubrubrubrubrubrubrubqLaabaaaaaaaaaaaaaaaaaaaaacqZcracrbaaaaaaaaacqZcracrbaakaakaakcqZcracrbaaaaaaaaacqZcracrbaaaaaaaaaaakajQaakaakaakaakaakcbPcrecrfcrgcbPaakcbPcrhcricrjcbPcqXcbPcrkcrlcrmcbPcqXcbPcrncrocrpcbPaakaNtaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaalaalaalaalaalaalaalaalaalaalaalcqxaalaalaalaalaalaalaalagjaalbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLaaaaaaaaaaaaaaaaaaaaaaaacrqcqTcrraaaaaaaaacrqcqTcrraakaakaakcrqcqTcrraaaaaaaaacrqcqTcrraaaaaaaaaaaaaakajQajQaakaNtaakcbPcrtcrtcrtcbPaakcbPcrucrucrucbPcqXcbPcrvcrvcrvcbPcqXcbPcrwcrwcrwcbPaakajQaaaajQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaalaalaalagiaalcrxcrxcrxcrxcrxaalcqxaalcrxcrxcrxcrxcrxaalagiaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaaaakaaaajQaakcbPcrtcrycrtcbPaakcbPcrucrzcrucbPaakcbPcrvcrAcrvcbPaakcbPcrwcrBcrwcbPaakaakaakajQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaalaalaalaalagjaalcrCcrDcrDcrDcrDcrEcqxcqycrFcrFcrFcrFcrGaalagiaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajQaaaaaaaaaaTgaakcbPcbPcbPcbPcbPaakcbPcbPcbPcbPcbPaakcbPcbPcbPcbPcbPaakcbPcbPcbPcbPcbPaakaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaalaalaalaalaalaalagiaalcrHcrHcrHcrHcrHaalcqxaalcrHcrHcrHcrHcrHaalagiaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrJaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakcrJaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaalaalaalaalaalaalaalaalaalagiaalaalaalaalaalaalaalcqxaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrJaNtaakajQcrJaakaNtcrJcrJaNtaakaNtaakcrKcrJcrJaNtcrJaNtaNtajQaNtcrJaakaNtaakaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaalaalaalaalaalaalaalaalaalaalaalagiaalcrxcrxcrxcrxcrxaalcqxaalcrxcrxcrxcrxcrxaalagiaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalagiaalcrCcrDcrDcrDcrDcrEcqxcqycrFcrFcrFcrFcrGaalagiaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/AsteroidStation/readme.dm b/_maps/map_files/AsteroidStation/readme.dm deleted file mode 100644 index 809ba633d38..00000000000 --- a/_maps/map_files/AsteroidStation/readme.dm +++ /dev/null @@ -1,6 +0,0 @@ -/* - The contents of these files should not be ticked/included while compiling. - - These files are only included, and compiled, when \_maps\Asteroidstation.dm is included; as these files are necessary to run Asteroidstation. - You do not have to tick them yourself, it will be automatically done by the asteroidstation.dm file. -*/ \ No newline at end of file diff --git a/_maps/map_files/AsteroidStation/z2.dmm b/_maps/map_files/AsteroidStation/z2.dmm index 87437c35cfc..d624a944e99 100644 --- a/_maps/map_files/AsteroidStation/z2.dmm +++ b/_maps/map_files/AsteroidStation/z2.dmm @@ -160,7 +160,7 @@ "dd" = (/turf/simulated/floor/plating,/turf/simulated/wall/shuttle{icon_state = "swall_f6"; dir = 2},/area/centcom/evac) "de" = (/turf/simulated/floor/plasteel/shuttle,/turf/simulated/wall/shuttle{icon_state = "swall_f9"; dir = 2},/area/centcom/evac) "df" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) -"dg" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "floor2"},/area/centcom/evac) +"dg" = (/obj/machinery/door/airlock/shuttle,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/centcom/evac) "dh" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/toxin{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) "di" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/fire{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) "dj" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 0},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) @@ -183,33 +183,33 @@ "dA" = (/obj/machinery/flasher_button{id = "tdomeflash"; pixel_x = 0; pixel_y = 0},/obj/structure/table,/turf/simulated/floor/plasteel/redyellow,/area/tdome/tdomeadmin) "dB" = (/turf/simulated/wall/shuttle{icon_state = "swall12"; dir = 2},/area/centcom/evac) "dC" = (/turf/simulated/wall/shuttle{icon_state = "swallc1"; dir = 2},/area/centcom/evac) -"dD" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/centcom/evac) -"dE" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/fancy/donut_box,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/centcom/evac) -"dF" = (/obj/structure/table/reinforced,/obj/item/weapon/pen,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/centcom/evac) -"dG" = (/obj/structure/table/reinforced,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/centcom/evac) -"dH" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) +"dD" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/centcom/evac) +"dE" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/fancy/donut_box,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) +"dF" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) +"dG" = (/obj/structure/table/reinforced,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) +"dH" = (/obj/structure/table/reinforced,/obj/item/weapon/pen,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) "dI" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) "dJ" = (/turf/simulated/wall/shuttle{icon_state = "swallc2"; dir = 2},/area/centcom/evac) "dK" = (/turf/indestructible/riveted,/area/tdome/tdomeadmin) "dL" = (/obj/machinery/computer/security/telescreen{pixel_y = -32},/turf/simulated/floor/plasteel/redyellow,/area/tdome/tdomeadmin) "dM" = (/turf/simulated/floor/plasteel,/area/tdome/tdomeadmin) -"dN" = (/obj/machinery/computer/secure_data,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/centcom/evac) -"dO" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/centcom/evac) -"dP" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/centcom/evac) -"dQ" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/stamp,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/centcom/evac) +"dN" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) +"dO" = (/obj/machinery/computer/secure_data,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) +"dP" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/stamp,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) +"dQ" = (/obj/structure/table,/obj/item/device/flash/handheld,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) "dR" = (/turf/indestructible/fakedoor{name = "Thunderdome Admin"},/area/tdome/tdomeadmin) "dS" = (/obj/structure/table,/obj/machinery/door_control{id = "thunderdomehea"; name = "Heavy Supply Control"; pixel_y = 0; req_access_txt = "102"},/turf/simulated/floor/plasteel,/area/tdome/tdomeadmin) "dT" = (/obj/structure/table,/obj/machinery/door_control{id = "thunderdome"; name = "Main Blast Doors Control"; pixel_y = 0; req_access_txt = "102"},/turf/simulated/floor/plasteel,/area/tdome/tdomeadmin) "dU" = (/obj/structure/table,/obj/machinery/door_control{id = "thunderdomegen"; name = "General Supply Control"; pixel_y = 0; req_access_txt = "102"},/turf/simulated/floor/plasteel,/area/tdome/tdomeadmin) -"dV" = (/obj/structure/table,/obj/item/device/flash/handheld,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/centcom/evac) -"dW" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/centcom/evac) +"dV" = (/obj/structure/table,/obj/item/weapon/storage/box/handcuffs,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) +"dW" = (/obj/machinery/door/window/northright{base_state = "right"; dir = 4; icon_state = "right"; name = "Security Desk"; req_access_txt = "103"},/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) "dX" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) -"dY" = (/obj/structure/table,/obj/item/weapon/storage/box/handcuffs,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/centcom/evac) -"dZ" = (/obj/machinery/door/window/northright{base_state = "right"; dir = 4; icon_state = "right"; name = "Security Desk"; req_access_txt = "103"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/centcom/evac) +"dY" = (/obj/structure/stool/bed,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/centcom/evac) +"dZ" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/centcom/evac) "ea" = (/obj/docking_port/stationary{dir = 4; dwidth = 1; height = 4; id = "pod3_away"; name = "recovery ship"; width = 3},/turf/space,/area/space) "eb" = (/turf/indestructible/riveted,/area/centcom/ferry) "ec" = (/turf/indestructible/fakedoor,/area/centcom/ferry) -"ed" = (/obj/structure/stool/bed,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) +"ed" = (/obj/machinery/door/airlock/shuttle{name = "Cockpit"; req_access_txt = "109"},/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) "ee" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plating,/area/centcom/evac) "ef" = (/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel/black,/area/centcom/ferry) "eg" = (/obj/machinery/vending/cigarette{products = list(/obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate = 7, /obj/item/weapon/storage/fancy/cigarettes/cigpack_uplift = 3, /obj/item/weapon/storage/fancy/cigarettes/cigpack_robust = 2, /obj/item/weapon/storage/fancy/cigarettes/cigpack_carp = 3, /obj/item/weapon/storage/fancy/cigarettes/cigpack_midori = 1, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/storage/fancy/rollingpapers = 5)},/turf/simulated/floor/plasteel/black,/area/centcom/ferry) @@ -217,7 +217,7 @@ "ei" = (/turf/simulated/floor/plasteel/black,/area/centcom/ferry) "ej" = (/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel/black,/area/centcom/ferry) "ek" = (/obj/structure/stool/bed/chair/office/dark,/obj/effect/landmark{name = "Emergencyresponseteam"},/turf/simulated/floor/plasteel/black,/area/centcom/ferry) -"el" = (/obj/machinery/door/airlock/shuttle,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor2"},/area/centcom/evac) +"el" = (/turf/simulated/wall/shuttle{icon_state = "swall14"; dir = 2},/area/shuttle/supply) "em" = (/obj/docking_port/stationary{dir = 4; dwidth = 1; height = 4; id = "pod4_away"; name = "recovery ship"; width = 3},/turf/space,/area/space) "en" = (/obj/structure/table/reinforced,/turf/simulated/floor/vault,/area/centcom/ferry) "eo" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/effect/landmark{name = "Emergencyresponseteam"},/turf/simulated/floor/plasteel/black,/area/centcom/ferry) @@ -237,7 +237,7 @@ "eC" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/drinks/bottle/rum,/obj/item/weapon/reagent_containers/food/drinks/bottle/tequila,/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka{pixel_x = -5},/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey{pixel_x = 5},/turf/simulated/floor/plasteel/black,/area/centcom/ferry) "eD" = (/turf/simulated/wall/shuttle{icon_state = "swall14"; dir = 2},/area/centcom/evac) "eE" = (/turf/simulated/wall/shuttle{icon_state = "swallc4"; dir = 2},/area/centcom/evac) -"eF" = (/obj/machinery/door/airlock/shuttle{name = "Cockpit"; req_access_txt = "109"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor2"},/area/centcom/evac) +"eF" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"},/turf/simulated/wall/shuttle{icon_state = "swall14"; dir = 2},/area/shuttle/supply) "eG" = (/turf/simulated/floor/plasteel/freezer{dir = 2},/area/centcom/ferry) "eH" = (/obj/machinery/door/poddoor/ert,/turf/simulated/floor/plasteel/freezer{dir = 2},/area/centcom/ferry) "eI" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/effect/landmark{name = "Emergencyresponseteam"},/turf/simulated/floor/plasteel/black,/area/centcom/ferry) @@ -318,7 +318,7 @@ "gf" = (/obj/structure/table/wood,/turf/simulated/floor/wood,/area/centcom/ferry) "gg" = (/turf/indestructible/riveted,/area/start) "gh" = (/obj/machinery/door/airlock/centcom{name = "Transport Shuttle"; opacity = 1; req_access_txt = "101"},/turf/simulated/floor/plasteel/darkgreen/side{dir = 2},/area/centcom/ferry) -"gi" = (/turf/simulated/wall/shuttle{icon_state = "swall_s6"; dir = 2},/area/shuttle/supply) +"gi" = (/obj/machinery/door/poddoor{id = "QMLoaddoor"; name = "Supply Dock Loading Door"},/obj/machinery/conveyor{dir = 2; id = "QMLoad"},/turf/simulated/wall/shuttle{icon_state = "swall14"; dir = 2},/area/shuttle/supply) "gj" = (/turf/simulated/wall/shuttle{icon_state = "swall12"; dir = 2},/area/shuttle/supply) "gk" = (/turf/simulated/wall/shuttle{icon_state = "swall_s10"; dir = 2},/area/shuttle/supply) "gl" = (/turf/space,/area/shuttle/supply) @@ -348,11 +348,11 @@ "gJ" = (/turf/indestructible/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/centcom/control) "gK" = (/turf/simulated/floor/plasteel/green/corner,/area/centcom/control) "gL" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/plasteel/black,/area/centcom/control) -"gM" = (/turf/simulated/wall/shuttle{icon_state = "swall_s5"; dir = 2},/area/shuttle/supply) -"gN" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/supply) -"gO" = (/obj/machinery/door/poddoor{id = "QMLoaddoor"; name = "Supply Dock Loading Door"},/obj/machinery/conveyor{dir = 2; id = "QMLoad"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/supply) -"gP" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/obj/docking_port/mobile/supply{dwidth = 5; width = 12},/obj/docking_port/stationary{dir = 8; dwidth = 5; height = 7; id = "supply_away"; name = "Centcom"; width = 12},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/supply) -"gQ" = (/turf/simulated/wall/shuttle{icon_state = "swall_s9"; dir = 2},/area/shuttle/supply) +"gM" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/obj/docking_port/mobile/supply{dwidth = 5; width = 12},/obj/docking_port/stationary{dir = 8; dwidth = 5; height = 7; id = "supply_away"; name = "Centcom"; width = 12},/turf/simulated/wall/shuttle{icon_state = "swall14"; dir = 2},/area/shuttle/supply) +"gN" = (/obj/docking_port/mobile/emergency{dwidth = 0; height = 28; width = 13},/obj/docking_port/stationary{dir = 4; dwidth = 0; height = 28; id = "emergency_away"; name = "Centcom"; width = 13},/turf/space,/area/space) +"gO" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/shuttle/escape) +"gP" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plating/airless,/area/shuttle/escape) +"gQ" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) "gR" = (/turf/simulated/floor/plasteel/green/side{dir = 4},/area/centcom/control) "gS" = (/obj/machinery/door_control{desc = "A remote control switch for port-side blast doors."; icon_state = "doorctrl0"; id = "CentComPort"; name = "Security Doors"; pixel_y = 28; req_access_txt = "101"},/obj/structure/showcase/fakeid,/turf/simulated/floor/plasteel/black,/area/centcom/control) "gT" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/turf/simulated/floor/plasteel/black,/area/centcom/control) @@ -428,17 +428,17 @@ "il" = (/obj/machinery/door/airlock/external{name = "Port Docking Bay 1"},/turf/space,/area/centcom/evac) "im" = (/turf/simulated/wall/shuttle{icon_state = "swall_s6"; dir = 2},/area/shuttle/escape) "in" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/space,/area/shuttle/escape) -"io" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) +"io" = (/obj/structure/ore_box,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/shuttle/escape) "ip" = (/turf/simulated/wall/shuttle{icon_state = "swall_s10"; dir = 2},/area/shuttle/escape) -"iq" = (/turf/indestructible/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/centcom/evac) -"ir" = (/turf/simulated/floor/engine,/area/centcom/evac) +"iq" = (/obj/machinery/recharge_station,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/shuttle/escape) +"ir" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/shuttle/escape) "is" = (/turf/simulated/wall/shuttle{icon_state = "swall12"; dir = 2},/area/shuttle/escape) "it" = (/turf/simulated/wall/shuttle{icon_state = "swall14"; dir = 2},/area/shuttle/escape) "iu" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"; req_access_txt = "2"},/turf/simulated/floor/plasteel/shuttle/red,/area/shuttle/escape) "iv" = (/turf/simulated/wall/shuttle{icon_state = "swall11"; dir = 2},/area/shuttle/escape) -"iw" = (/obj/structure/ore_box,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor2"},/area/shuttle/escape) -"ix" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "floor2"},/area/shuttle/escape) -"iy" = (/obj/machinery/recharge_station,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor2"},/area/shuttle/escape) +"iw" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"ix" = (/turf/simulated/wall/shuttle{tag = "icon-swall_f13"; icon_state = "swall_f13"},/area/shuttle/escape) +"iy" = (/turf/simulated/wall/shuttle{tag = "icon-swall_f11"; icon_state = "swall_f11"},/area/shuttle/escape) "iz" = (/turf/simulated/wall/shuttle{icon_state = "swall7"; dir = 2},/area/shuttle/escape) "iA" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (EAST)"; icon_state = "propulsion"; dir = 4},/turf/space,/area/shuttle/escape) "iB" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (WEST)"; icon_state = "heater"; dir = 8},/turf/simulated/floor/plating/airless,/area/shuttle/escape) @@ -449,16 +449,16 @@ "iG" = (/turf/simulated/wall/shuttle{icon_state = "swall15"; dir = 2},/area/shuttle/escape) "iH" = (/turf/simulated/wall/shuttle{icon_state = "swallc4"; dir = 2},/area/shuttle/escape) "iI" = (/turf/simulated/wall/shuttle{icon_state = "swall13"; dir = 2},/area/shuttle/escape) -"iJ" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/obj/docking_port/mobile/emergency,/obj/docking_port/stationary{dir = 4; dwidth = 9; height = 11; id = "emergency_away"; name = "Centcom"; width = 22},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) +"iJ" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/shuttle/escape) "iK" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28; tag = "west"},/turf/simulated/floor/plasteel/shuttle/red,/area/shuttle/escape) -"iL" = (/obj/machinery/suit_storage_unit,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor2"},/area/shuttle/escape) -"iM" = (/obj/machinery/door/airlock/mining{name = "Emergency Shuttle Storage"; req_access_txt = "0"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor2"},/area/shuttle/escape) +"iL" = (/obj/machinery/suit_storage_unit,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/shuttle/escape) +"iM" = (/obj/structure/extinguisher_cabinet{pixel_y = 30; tag = "(north)"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) "iN" = (/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "iO" = (/obj/structure/closet,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "iP" = (/obj/structure/table,/obj/item/weapon/extinguisher,/obj/item/weapon/crowbar,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) -"iQ" = (/obj/structure/stool/bed/chair,/obj/structure/extinguisher_cabinet{pixel_y = 30; tag = "(north)"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) +"iQ" = (/obj/machinery/door/airlock/mining{name = "Emergency Shuttle Storage"; req_access_txt = "0"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/shuttle/escape) "iR" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) -"iS" = (/obj/structure/stool/bed/chair,/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 23; tag = "north"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) +"iS" = (/obj/structure/closet/emcloset,/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 23; tag = "north"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "iT" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "iU" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "iV" = (/obj/structure/stool/bed/roller,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) @@ -482,32 +482,32 @@ "jn" = (/obj/machinery/door/airlock/glass_command{name = "Emergency Shuttle Cockpit"; req_access_txt = "19"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "jo" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "jp" = (/obj/machinery/status_display,/turf/simulated/wall/shuttle{icon_state = "swall7"; dir = 2},/area/shuttle/escape) -"jq" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor3"},/area/shuttle/escape) +"jq" = (/obj/machinery/computer/crew,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) "jr" = (/obj/machinery/computer/communications,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "js" = (/obj/structure/stool/bed/chair/office/light{dir = 1; name = "Research Director"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "jt" = (/obj/structure/stool/bed/chair/office/light{dir = 1; name = "Head of Personnel"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "ju" = (/obj/structure/stool/bed/chair/office/light{dir = 1; name = "Chief Medical Officer"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "jv" = (/obj/structure/extinguisher_cabinet{pixel_y = -30; tag = "(south)"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "jw" = (/obj/machinery/status_display,/turf/simulated/wall/shuttle{icon_state = "swall2"; dir = 2},/area/shuttle/escape) -"jx" = (/obj/machinery/computer/crew,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor3"},/area/shuttle/escape) -"jy" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "floor3"},/area/shuttle/escape) -"jz" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Escape Shuttle Infirmary"; req_access_txt = "5"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor3"},/area/shuttle/escape) -"jA" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Escape Shuttle Infirmary"; req_access_txt = "0"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor3"},/area/shuttle/escape) -"jB" = (/obj/structure/stool/bed,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor3"},/area/shuttle/escape) -"jC" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -30},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) -"jD" = (/obj/machinery/door/airlock{name = "Emergency Shuttle Restroom"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) +"jx" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Escape Shuttle Infirmary"; req_access_txt = "5"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"jy" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Escape Shuttle Infirmary"; req_access_txt = "0"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"jz" = (/obj/structure/stool/bed,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"jA" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -30},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"jB" = (/obj/machinery/door/airlock{name = "Emergency Shuttle Restroom"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"jC" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"jD" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28; tag = "west"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) "jE" = (/obj/structure/stool/bed/chair{dir = 1},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29; tag = "south"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "jF" = (/obj/structure/stool/bed/chair{dir = 1},/obj/structure/extinguisher_cabinet{pixel_y = -30; tag = "(south)"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "jG" = (/obj/structure/table,/obj/item/weapon/extinguisher,/obj/item/weapon/crowbar,/obj/machinery/recharger,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) -"jH" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor3"},/area/shuttle/escape) +"jH" = (/obj/structure/closet/secure_closet/medical2,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) "jI" = (/turf/simulated/wall/shuttle{icon_state = "swall_s9"; dir = 2},/area/shuttle/escape) "jJ" = (/turf/simulated/wall/shuttle{icon_state = "swall_s5"; dir = 2},/area/shuttle/escape) -"jK" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28; tag = "west"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor3"},/area/shuttle/escape) -"jL" = (/obj/structure/closet/secure_closet/medical2,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor3"},/area/shuttle/escape) -"jM" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) -"jN" = (/obj/structure/table,/obj/item/weapon/retractor,/obj/item/weapon/hemostat,/obj/item/weapon/scalpel,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor3"},/area/shuttle/escape) -"jO" = (/obj/structure/optable,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor3"},/area/shuttle/escape) -"jP" = (/obj/structure/table,/obj/item/weapon/circular_saw,/obj/item/weapon/cautery{pixel_x = 4},/obj/item/weapon/surgical_drapes,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor3"},/area/shuttle/escape) +"jK" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"jL" = (/obj/structure/table,/obj/item/weapon/retractor,/obj/item/weapon/hemostat,/obj/item/weapon/scalpel,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"jM" = (/obj/structure/table,/obj/item/weapon/circular_saw,/obj/item/weapon/cautery{pixel_x = 4},/obj/item/weapon/surgical_drapes,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"jN" = (/obj/structure/optable,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"jO" = (/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"jP" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "jQ" = (/turf/simulated/wall/shuttle,/area/shuttle/escape) "jR" = (/turf/indestructible/riveted,/area/centcom/holding) "jS" = (/obj/structure/table,/turf/simulated/floor/plasteel/freezer{dir = 2},/area/centcom/holding) @@ -556,25 +556,25 @@ "kJ" = (/turf/simulated/wall/shuttle{icon_state = "wall3"},/area/shuttle/syndicate) "kK" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters{id = "syndieshutters"; name = "blast shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/shuttle/syndicate) "kL" = (/turf/simulated/floor/plating/snow,/turf/simulated/wall/shuttle{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/syndicate) -"kM" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"kN" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"kO" = (/obj/structure/table,/obj/item/device/flashlight/lamp{pixel_x = 4; pixel_y = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"kP" = (/obj/machinery/computer/shuttle/syndicate,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"kQ" = (/obj/structure/table,/obj/machinery/door_control{id = "syndieshutters"; name = "remote shutter control"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"kR" = (/obj/structure/computerframe,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"kM" = (/obj/machinery/computer/shuttle/syndicate,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"kN" = (/obj/structure/table,/obj/item/device/flashlight/lamp{pixel_x = 4; pixel_y = 1},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"kO" = (/obj/structure/computerframe,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"kP" = (/obj/structure/table,/obj/machinery/door_control{id = "syndieshutters"; name = "remote shutter control"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"kQ" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"kR" = (/obj/structure/stool/bed/chair/comfy/black{dir = 1; icon_state = "comfychair"; name = "pilot's chair"; tag = "icon-comfychair (NORTH)"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "kS" = (/turf/simulated/floor/plating/snow,/turf/simulated/floor/plating/snow/gravsnow/corner{dir = 8},/area/syndicate_mothership) "kT" = (/turf/indestructible/fakeglass{icon_state = "fakewindows"; dir = 8},/area/syndicate_mothership) "kU" = (/turf/indestructible/fakeglass{icon_state = "fakewindows"; dir = 4},/area/syndicate_mothership) "kV" = (/turf/simulated/floor/plating/snow,/obj/structure/flora/grass/both,/turf/simulated/floor/plating/snow/gravsnow/corner,/area/syndicate_mothership) "kW" = (/turf/simulated/floor/plating/snow,/obj/structure/flora/tree/pine,/turf/simulated/floor/plating/snow/gravsnow/corner,/area/syndicate_mothership) -"kX" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"kY" = (/obj/structure/stool/bed/chair/comfy/black{dir = 1; icon_state = "comfychair"; name = "pilot's chair"; tag = "icon-comfychair (NORTH)"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"kX" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 10},/obj/item/device/multitool,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"kY" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_y = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "kZ" = (/turf/simulated/floor/plating/snow,/turf/simulated/floor/plating/snow/gravsnow/corner{dir = 4},/area/syndicate_mothership) "la" = (/obj/item/weapon/storage/crayons,/obj/structure/table,/obj/item/weapon/storage/crayons,/turf/simulated/floor/plasteel/freezer{dir = 2},/area/syndicate_mothership) "lb" = (/obj/machinery/washing_machine,/turf/simulated/floor/plasteel/freezer{dir = 2},/area/syndicate_mothership) -"lc" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 10},/obj/item/device/multitool,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"ld" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_y = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"le" = (/obj/structure/closet/syndicate/personal,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"lc" = (/obj/structure/closet/syndicate/personal,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"ld" = (/turf/simulated/wall/mineral/uranium,/area/wizard_station) +"le" = (/obj/machinery/door/window{name = "Cockpit"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "lf" = (/obj/machinery/computer/shuttle/syndicate/recall,/turf/simulated/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) "lg" = (/turf/simulated/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) "lh" = (/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) @@ -589,7 +589,7 @@ "lq" = (/turf/indestructible/fakeglass{color = "#008000"; dir = 4; icon_state = "fakewindows"},/area/wizard_station) "lr" = (/turf/indestructible/riveted{icon_state = "uranium0"},/area/wizard_station) "ls" = (/turf/simulated/floor/plating/snow,/turf/simulated/wall/shuttle{icon_state = "diagonalWall3"},/area/shuttle/syndicate) -"lt" = (/obj/machinery/door/window{name = "Cockpit"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"lt" = (/obj/structure/table,/obj/item/stack/cable_coil,/obj/item/weapon/crowbar/red,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "lu" = (/turf/simulated/floor/plating/snow,/turf/simulated/wall/shuttle{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/syndicate) "lv" = (/turf/simulated/floor/plating/snow,/obj/structure/flora/grass/brown,/turf/simulated/floor/plating/snow/gravsnow/corner{dir = 4},/area/syndicate_mothership) "lw" = (/obj/item/weapon/paper{info = "GET DAT FUKKEN DISK"; name = "memo"},/obj/structure/noticeboard{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) @@ -601,8 +601,8 @@ "lC" = (/obj/item/weapon/shard{color = "#008000"},/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage5"},/area/wizard_station) "lD" = (/obj/machinery/computer/shuttle,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage"},/area/wizard_station) "lE" = (/turf/simulated/floor/plasteel/cult,/area/wizard_station) -"lF" = (/obj/structure/table,/obj/item/stack/cable_coil,/obj/item/weapon/crowbar/red,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"lG" = (/obj/structure/table,/obj/item/weapon/storage/box/zipties{pixel_x = 1; pixel_y = 2},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"lF" = (/obj/structure/table,/obj/item/weapon/storage/box/zipties{pixel_x = 1; pixel_y = 2},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"lG" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "lH" = (/turf/simulated/floor/plating/snow,/turf/simulated/floor/plating/snow/gravsnow/surround{dir = 8},/area/syndicate_mothership) "lI" = (/turf/simulated/floor/plating/snow,/turf/simulated/floor/plating/snow/gravsnow/corner{dir = 6},/area/syndicate_mothership) "lJ" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/drinks/beer{pixel_x = -2; pixel_y = 5},/turf/simulated/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) @@ -615,8 +615,8 @@ "lQ" = (/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage2"},/area/wizard_station) "lR" = (/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage3"},/area/wizard_station) "lS" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/simulated/floor/plasteel/cult,/area/wizard_station) -"lT" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"lU" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"lT" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"lU" = (/obj/machinery/suit_storage_unit/syndicate,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "lV" = (/turf/indestructible/fakeglass{icon_state = "fakewindows"; dir = 9},/area/syndicate_mothership) "lW" = (/turf/indestructible/fakeglass{icon_state = "fakewindows2"; dir = 8},/area/syndicate_mothership) "lX" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/snacks/pizzaslice/mushroom,/turf/simulated/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) @@ -631,8 +631,8 @@ "mg" = (/obj/machinery/door/poddoor/shutters{id = "nukeop_ready"; name = "shuttle dock"},/turf/simulated/floor/plating,/area/syndicate_mothership) "mh" = (/turf/indestructible/fakeglass{color = "#008000"; dir = 6; icon_state = "fakewindows2"},/area/wizard_station) "mi" = (/obj/effect/forcefield,/obj/structure/door_assembly{anchored = 1; icon_state = "door_as_uranium1"; name = "Bridge"},/turf/simulated/floor/plasteel/cult,/area/wizard_station) -"mj" = (/obj/machinery/suit_storage_unit/syndicate,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"mk" = (/obj/effect/landmark{name = "Syndicate-Uplink"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"mj" = (/obj/effect/landmark{name = "Syndicate-Uplink"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"mk" = (/obj/structure/stool,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "ml" = (/turf/indestructible/fakeglass,/area/syndicate_mothership) "mm" = (/obj/machinery/door/airlock/external{req_access_txt = "150"},/turf/simulated/floor/plating,/area/syndicate_mothership) "mn" = (/obj/machinery/door_control{id = "nukeop_ready"; name = "mission launch control"; pixel_x = -26; pixel_y = 0; req_access_txt = "151"},/turf/simulated/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) @@ -641,9 +641,9 @@ "mq" = (/obj/structure/toilet{pixel_y = 8},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/obj/machinery/door/window{name = "Tactical Toilet"; opacity = 1},/turf/simulated/floor/plasteel/freezer{dir = 2},/area/syndicate_mothership) "mr" = (/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage6"},/area/wizard_station) "ms" = (/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage"},/area/wizard_station) -"mt" = (/obj/structure/stool,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"mu" = (/obj/structure/table,/obj/item/device/aicard,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"mv" = (/obj/machinery/door/poddoor{auto_close = 300; id = "smindicate"; name = "outer blast door"},/obj/machinery/door_control{id = "smindicate"; name = "external door control"; pixel_x = -26; pixel_y = 0; req_access_txt = "150"},/obj/docking_port/mobile{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate"; name = "syndicate infiltrator"; travelDir = 180; width = 18},/obj/docking_port/stationary{area_type = /area/syndicate_mothership; dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_away"; name = "syndicate recon outpost"; turf_type = /turf/simulated/floor/plating/snow; width = 18},/turf/simulated/floor/plating,/area/shuttle/syndicate) +"mt" = (/obj/structure/table,/obj/item/device/aicard,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"mu" = (/obj/machinery/door/poddoor{auto_close = 300; id = "smindicate"; name = "outer blast door"},/obj/machinery/door_control{id = "smindicate"; name = "external door control"; pixel_x = -26; pixel_y = 0; req_access_txt = "150"},/obj/docking_port/mobile{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate"; name = "syndicate infiltrator"; travelDir = 180; width = 18},/obj/docking_port/stationary{area_type = /area/syndicate_mothership; dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_away"; name = "syndicate recon outpost"; turf_type = /turf/simulated/floor/plating/snow; width = 18},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"mv" = (/obj/structure/table,/obj/item/weapon/c4{pixel_x = 2; pixel_y = 1},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "mw" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/simulated/wall/shuttle{icon_state = "wall3"},/area/shuttle/syndicate) "mx" = (/turf/simulated/floor/plating/snow,/turf/simulated/floor/plating/snow/gravsnow/corner{dir = 5},/area/syndicate_mothership) "my" = (/obj/item/weapon/storage/box/drinkingglasses,/obj/item/weapon/reagent_containers/food/drinks/bottle/rum,/obj/structure/table/wood,/turf/simulated/floor/wood,/area/syndicate_mothership) @@ -660,7 +660,7 @@ "mJ" = (/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage7"},/area/wizard_station) "mK" = (/obj/effect/forcefield,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage"},/area/wizard_station) "mL" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'FOURTH WALL'."; name = "\improper FOURTH WALL"; pixel_x = -32},/turf/simulated/floor/plating/snow,/area/syndicate_mothership) -"mM" = (/obj/structure/table,/obj/item/weapon/c4{pixel_x = 2; pixel_y = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"mM" = (/obj/machinery/door/window{dir = 4; name = "EVA Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "mN" = (/turf/simulated/floor/wood,/area/syndicate_mothership) "mO" = (/obj/effect/landmark{name = "Syndicate-Spawn"},/turf/simulated/floor/wood,/area/syndicate_mothership) "mP" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Uplink Management Control"; req_access_txt = "151"},/turf/simulated/floor/wood,/area/syndicate_mothership) @@ -673,8 +673,8 @@ "mW" = (/obj/machinery/door/poddoor/preopen,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plating,/area/wizard_station) "mX" = (/obj/effect/forcefield,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage7"},/area/wizard_station) "mY" = (/obj/effect/forcefield,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage5"},/area/wizard_station) -"mZ" = (/obj/machinery/door/window{dir = 4; name = "EVA Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"na" = (/obj/machinery/door/airlock/external{req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"mZ" = (/obj/machinery/door/airlock/external{req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"na" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "EVA Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "nb" = (/obj/machinery/computer/telecrystals/boss,/turf/simulated/floor/plasteel/podhatch{dir = 5},/area/syndicate_mothership) "nc" = (/obj/structure/sign/map/left{pixel_y = -32},/obj/structure/rack{icon = 'icons/obj/stationobjs.dmi'; icon_state = "minibar_left"; name = "skeletal minibar"},/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka,/turf/simulated/floor/wood,/area/syndicate_mothership) "nd" = (/obj/structure/sign/map/right{pixel_y = -32},/obj/structure/rack{icon = 'icons/obj/stationobjs.dmi'; icon_state = "minibar_right"; name = "skeletal minibar"},/obj/item/weapon/reagent_containers/food/drinks/bottle/gin,/turf/simulated/floor/wood,/area/syndicate_mothership) @@ -684,9 +684,9 @@ "nh" = (/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage5"},/area/wizard_station) "ni" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage2"},/area/wizard_station) "nj" = (/obj/structure/table/wood/poker,/obj/item/toy/cards/cardhand,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage2"},/area/wizard_station) -"nk" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "EVA Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"nk" = (/obj/structure/rack,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "nl" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/shuttle/syndicate) -"nm" = (/obj/structure/rack,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"nm" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "nn" = (/turf/simulated/floor/plating/snow,/turf/simulated/floor/plating/snow/gravsnow/corner{dir = 10},/area/syndicate_mothership) "no" = (/turf/simulated/floor/plating/snow,/turf/simulated/floor/plating/snow/gravsnow/corner{dir = 1},/area/syndicate_mothership) "np" = (/turf/simulated/floor/plasteel/black,/area/syndicate_mothership) @@ -697,19 +697,19 @@ "nu" = (/obj/structure/lattice,/obj/effect/forcefield,/turf/space/transit,/area/wizard_station) "nv" = (/obj/machinery/vending/magivend,/turf/simulated/floor/plasteel/cult,/area/wizard_station) "nw" = (/obj/machinery/vending/snack,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage"},/area/wizard_station) -"nx" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"nx" = (/obj/machinery/recharge_station,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "ny" = (/turf/simulated/floor/plating/snow,/obj/structure/flora/bush,/turf/simulated/floor/plating/snow/gravsnow/corner{dir = 1},/area/syndicate_mothership) "nz" = (/obj/structure/door_assembly{anchored = 1; icon_state = "door_as_uranium1"; name = "Break Room"},/turf/simulated/floor/plasteel/cult,/area/wizard_station) "nA" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/Dooruranium.dmi'; name = "Break Room"},/turf/simulated/floor/plasteel/cult,/area/wizard_station) -"nB" = (/obj/machinery/recharge_station,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"nC" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"nD" = (/obj/structure/table,/obj/machinery/cell_charger,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"nE" = (/obj/structure/table,/obj/item/stack/medical/ointment,/obj/item/stack/medical/bruise_pack,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"nF" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell/high{pixel_x = -3; pixel_y = 3},/obj/item/weapon/stock_parts/cell/high,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"nG" = (/obj/structure/table,/obj/item/weapon/screwdriver{pixel_y = 9},/obj/item/device/assembly/voice{pixel_y = 3},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"nH" = (/obj/structure/table,/obj/item/weapon/wrench,/obj/item/device/assembly/infra,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"nI" = (/obj/structure/table,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"nJ" = (/obj/structure/table,/obj/item/weapon/weldingtool/largetank{pixel_y = 3},/obj/item/device/multitool,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"nB" = (/obj/structure/table,/obj/machinery/cell_charger,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"nC" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"nD" = (/obj/structure/table,/obj/item/stack/medical/ointment,/obj/item/stack/medical/bruise_pack,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"nE" = (/obj/structure/table,/obj/item/weapon/screwdriver{pixel_y = 9},/obj/item/device/assembly/voice{pixel_y = 3},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"nF" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell/high{pixel_x = -3; pixel_y = 3},/obj/item/weapon/stock_parts/cell/high,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"nG" = (/obj/structure/table,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"nH" = (/obj/structure/table,/obj/item/weapon/wrench,/obj/item/device/assembly/infra,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"nI" = (/obj/structure/table,/obj/item/weapon/weldingtool/largetank{pixel_y = 3},/obj/item/device/multitool,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"nJ" = (/obj/machinery/door/window{dir = 4; name = "Infirmary"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "nK" = (/obj/structure/stool,/turf/simulated/floor/plasteel/black,/area/syndicate_mothership) "nL" = (/obj/structure/stool/bed/chair/wood/wings,/turf/simulated/floor/plasteel/cult,/area/wizard_station) "nM" = (/obj/structure/table/wood,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/ointment,/turf/simulated/floor/plasteel/cult,/area/wizard_station) @@ -719,9 +719,9 @@ "nQ" = (/obj/structure/rack,/obj/item/clothing/head/helmet/space/hardsuit/wizard,/turf/simulated/floor/plasteel/cult,/area/wizard_station) "nR" = (/obj/effect/decal/cleanable/blood/splatter,/obj/effect/decal/cleanable/blood/gibs/body,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage"},/area/wizard_station) "nS" = (/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel/cult,/area/wizard_station) -"nT" = (/obj/machinery/door/window{dir = 4; name = "Infirmary"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"nU" = (/obj/machinery/door/window/westright{name = "Tool Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"nV" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate,/obj/item/weapon/crowbar/red,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"nT" = (/obj/machinery/door/window/westright{name = "Tool Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"nU" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate,/obj/item/weapon/crowbar/red,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"nV" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 4},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "nW" = (/obj/structure/closet/syndicate/personal,/turf/simulated/floor/vault,/area/syndicate_mothership) "nX" = (/obj/structure/table,/obj/item/weapon/gun/energy/ionrifle{pin = /obj/item/device/firing_pin},/turf/simulated/floor/plasteel/black,/area/syndicate_mothership) "nY" = (/turf/indestructible/fakeglass{color = "#008000"; dir = 1; icon_state = "fakewindows"},/area/wizard_station) @@ -730,9 +730,9 @@ "ob" = (/obj/effect/decal/cleanable/blood/splatter,/obj/structure/rack{health = 9999},/obj/item/clothing/suit/space/hardsuit/wizard,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage"},/area/wizard_station) "oc" = (/turf/simulated/floor/plasteel/cult,/turf/simulated/wall/shuttle{icon_state = "swall_f6"; dir = 2},/area/wizard_station) "od" = (/turf/simulated/wall/shuttle{icon_state = "swall8"; dir = 2},/area/wizard_station) -"oe" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 4},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"of" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Infirmary"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"og" = (/obj/machinery/door/window{dir = 8; name = "Tool Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"oe" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Infirmary"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"of" = (/obj/machinery/door/window{dir = 8; name = "Tool Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"og" = (/obj/structure/table,/obj/item/weapon/gun/syringe{pixel_x = 1; pixel_y = 2},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "oh" = (/turf/indestructible/fakeglass{color = "#008000"; dir = 1; icon_state = "fakewindows2"},/area/wizard_station) "oi" = (/obj/structure/bookcase,/turf/simulated/floor/plasteel/cult,/area/wizard_station) "oj" = (/obj/structure/grille{color = "#008000"; density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/wizard_station) @@ -744,34 +744,33 @@ "op" = (/obj/effect/decal/cleanable/blood/splatter,/obj/effect/decal/cleanable/blood/gibs/body,/turf/simulated/floor/plasteel,/area/wizard_station) "oq" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/turf/simulated/floor/plating,/area/wizard_station) "or" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 8},/turf/space/transit,/area/wizard_station) -"os" = (/obj/structure/table,/obj/item/weapon/gun/syringe{pixel_x = 1; pixel_y = 2},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"ot" = (/obj/structure/table,/obj/item/weapon/reagent_containers/syringe/charcoal,/obj/item/weapon/reagent_containers/syringe/charcoal{pixel_y = 2},/obj/item/weapon/reagent_containers/syringe/charcoal{pixel_y = 4},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"ou" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"ov" = (/obj/machinery/door/window{dir = 1; name = "Secure Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"ow" = (/obj/structure/table,/obj/item/device/sbeacondrop/bomb{pixel_y = 5},/obj/item/device/sbeacondrop/bomb,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"ox" = (/obj/structure/table,/obj/item/weapon/grenade/syndieminibomb{pixel_x = 4; pixel_y = 2},/obj/item/weapon/grenade/syndieminibomb{pixel_x = -1},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"os" = (/obj/structure/table,/obj/item/weapon/reagent_containers/syringe/charcoal,/obj/item/weapon/reagent_containers/syringe/charcoal{pixel_y = 2},/obj/item/weapon/reagent_containers/syringe/charcoal{pixel_y = 4},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"ot" = (/obj/machinery/door/window{dir = 1; name = "Secure Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"ou" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"ov" = (/obj/structure/table,/obj/item/weapon/grenade/syndieminibomb{pixel_x = 4; pixel_y = 2},/obj/item/weapon/grenade/syndieminibomb{pixel_x = -1},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"ow" = (/obj/structure/table,/obj/item/device/sbeacondrop/bomb{pixel_y = 5},/obj/item/device/sbeacondrop/bomb,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"ox" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/mirror{pixel_x = 30},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "oy" = (/turf/indestructible/fakeglass{color = "#008000"},/area/wizard_station) "oz" = (/obj/item/weapon/shard{color = "#008000"; icon_state = "medium"},/obj/structure/grille{color = "#008000"; density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/wizard_station) "oA" = (/obj/effect/landmark/start{name = "wizard"},/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage5"},/area/wizard_station) "oB" = (/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel/cult,/area/wizard_station) "oC" = (/turf/simulated/floor/plasteel/cult,/turf/simulated/wall/shuttle{icon_state = "swall_f5"; dir = 2},/area/wizard_station) "oD" = (/turf/indestructible/fakedoor{name = "Squad 3 Pod"},/area/wizard_station) -"oE" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/mirror{pixel_x = 30},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"oF" = (/obj/machinery/telecomms/allinone{intercept = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"oG" = (/obj/effect/landmark{name = "Nuclear-Bomb"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"oE" = (/obj/effect/landmark{name = "Nuclear-Bomb"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"oF" = (/obj/machinery/telecomms/allinone{intercept = 1},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"oG" = (/obj/structure/optable,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "oH" = (/obj/structure/stool/bed/chair/wood/wings{tag = "icon-wooden_chair_wings (NORTH)"; icon_state = "wooden_chair_wings"; dir = 1},/turf/simulated/floor/plasteel/cult,/area/wizard_station) "oI" = (/obj/structure/cult/pylon,/turf/simulated/floor/plasteel/cult,/area/wizard_station) "oJ" = (/obj/effect/decal/cleanable/blood/splatter,/obj/structure/rack,/obj/item/weapon/staff,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage"},/area/wizard_station) "oK" = (/obj/effect/decal/cleanable/blood/splatter,/obj/effect/decal/cleanable/blood/gibs/body,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage4"},/area/wizard_station) "oL" = (/obj/effect/decal/cleanable/blood/splatter,/obj/effect/forcefield,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage"},/area/wizard_station) "oM" = (/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage4"},/area/wizard_station) -"oN" = (/obj/structure/table,/obj/item/weapon/circular_saw,/obj/item/weapon/cautery,/obj/item/weapon/surgicaldrill,/obj/item/robot_parts/l_arm,/obj/item/robot_parts/r_arm,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"oO" = (/obj/structure/optable,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"oP" = (/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/weapon/retractor,/obj/item/weapon/hemostat,/obj/item/weapon/surgical_drapes,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"oN" = (/obj/structure/table,/obj/item/weapon/circular_saw,/obj/item/weapon/cautery,/obj/item/weapon/surgicaldrill,/obj/item/robot_parts/l_arm,/obj/item/robot_parts/r_arm,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"oO" = (/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/weapon/retractor,/obj/item/weapon/hemostat,/obj/item/weapon/surgical_drapes,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"oP" = (/obj/machinery/teleport/station,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "oQ" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/shuttle/syndicate) -"oR" = (/obj/structure/computerframe,/obj/item/weapon/paper{info = "

Teleporter Instruction


  1. Install circuit board, glass and wiring to complete Teleporter Control Console
  2. Use a screwdriver, wirecutter and screwdriver again on the Teleporter Station to connect it
  3. Set destination with Teleporter Control Computer
  4. Activate Teleporter Hub with Teleporter Station
"; name = "Teleporter Instructions"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"oS" = (/obj/machinery/teleport/station,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"oT" = (/obj/machinery/teleport/hub/syndicate,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"oR" = (/obj/structure/computerframe,/obj/item/weapon/paper{info = "

Teleporter Instruction


  1. Install circuit board, glass and wiring to complete Teleporter Control Console
  2. Use a screwdriver, wirecutter and screwdriver again on the Teleporter Station to connect it
  3. Set destination with Teleporter Control Computer
  4. Activate Teleporter Hub with Teleporter Station
"; name = "Teleporter Instructions"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"oS" = (/obj/machinery/teleport/hub/syndicate,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "oU" = (/obj/structure/door_assembly{anchored = 1; icon_state = "door_as_uranium1"; name = "Corridor A"},/turf/simulated/floor/plasteel/cult,/area/wizard_station) "oV" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/Dooruranium.dmi'; name = "Corridor A"},/turf/simulated/floor/plasteel/cult,/area/wizard_station) "oW" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"},/turf/simulated/floor/plating,/area/shuttle/syndicate) @@ -942,22 +941,22 @@ abababababababababababababababababababababababababababababababababababababababab abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcucxcyczczcHczczcAcBcwcwcwcwcwcIcJcIcwcwcwcwcwcCcAcDcDcKcDcDcycEcuabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcucxcyczczczczczcAcBcwcwcwcwcwcIcLcIcwcwcwcwcwcCcAcDcDcDcDcDcycEcuabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcMcNcOcPcQabcRabababcSabcMcNcOcPcQabababababababababababababababababababababababababababababababcucxcyczcFczcFczcAcBcwcwcwcwcwcwcwcwcwcwcwcwcwcCcAcDcGcDcGcDcycEcuabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTcUcUcUcVcWcXcYcZcYcXdadbcUcUcUcTabababababababababababababababababababababababababababababababcucxcyczczczczczcAcBcwcwcwcwcwcwcwcwcwcwcwcwcwcCcAcDcDcDcDcDcycEcuabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdcdcdddedfdgdhdidjdgdfdkdldcdccTabababababababababababababababababababababababababababababababcucucudmdmdmdmdmcucvcwcwcwcwcwcwcwcwcwcwcwcwcwcvcudmdmdmdmdmcucucuabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdcdcdndododgdodododgdododndcdccTabababababababababababababababababababababababababababababababababcudpdpdpdpdpcudqdrdrdrdrdrdrdrdrdrdrdrdrdrdscudtdtdtdtdtcuabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdudldccXdodgdgdgdgdgdgdgdocXdcdddvabababababababababababababababababababababababababababababababababcucucucucucucudwdxdxdxdxdxdydzdAdxdxdxdxdxdwcucucucucucucuabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdudBdCdDdEdFdGdgdHdodgdIdJdBdvababababababababababababababababababababababababababababababababababababababababdKdwdwdwdLdwdMdMdMdMdMdwdLdwdwdwdKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdNdOdPdQdgdododgdIcTababababababababababababababababababababababababababababababababababababababababababdKdKdRdKdKdKdKdSdTdUdKdKdKdKdRdKdKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdVdWdWdGdgdIdXdgdIdnababababababababababababababababababababababababababababababababababababababababababababababababdKdKdKdKdKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdYdWdWdZdgdIdXdgdgcXeaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcVdBdBdBdCdgdododgdIcYabababababababababababababababababababababababababababababababababababababababababababababebebebebebecebebebebebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTeddgedcTdgdIdXdgdIeeabababababababababababababababababababababababababababababababababababababababababababababebefegeheieieieieiejebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTeddgeddndgdIdXdgdIcYabababababababababababababababababababababababababababababababababababababababababababababebeieieiekeiekeieieiebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTeddgdgeldgdgdgdgdgcXemababababababababababababababababababababababababababababababababababababababababababababebeieieneneneneoeieiebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTeddgedepdgdodododoepababababababababababababababababababababababababababababababababababababababebebebebebebebebeieqenereseneieietebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTeddgedcTdgeuevewdfcTababababababababababababababababababababababababababababababababababababababebexeyezeAeBeBebeieieneneneneoeieCebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdueDeDdBeEeFdadBeDeDdvababababababababababababababababababababababababababababababababababababababebeGeGeGeGeGeGeHeieieIeieIeieieieJebebebebebeKeKeKeKeKeKeKeKeKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdudbeLdIdgeMeNcVdvabababababababababababababababababababababababababababababababababababababababebeGeGeGeGeGeGeHeieieieieieieieieOePeQeQeQebeKeReKeReKeReKeReKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTcUcUcUcVcWdgcYcZcYcXdadbcUcUcUcTabababababababababababababababababababababababababababababababcucxcyczczczczczcAcBcwcwcwcwcwcwcwcwcwcwcwcwcwcCcAcDcDcDcDcDcycEcuabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdcdcdddedfdDdhdidjdDdfdkdldcdccTabababababababababababababababababababababababababababababababcucucudmdmdmdmdmcucvcwcwcwcwcwcwcwcwcwcwcwcwcwcvcudmdmdmdmdmcucucuabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdcdcdndododDdDdDdDdDdododndcdccTabababababababababababababababababababababababababababababababababcudpdpdpdpdpcudqdrdrdrdrdrdrdrdrdrdrdrdrdrdscudtdtdtdtdtcuabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdudldccXdDdDdDdDdDdDdDdDdDcXdcdddvabababababababababababababababababababababababababababababababababcucucucucucucudwdxdxdxdxdxdydzdAdxdxdxdxdxdwcucucucucucucuabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdudBdCdFdEdHdGdDdIdXdDdIdJdBdvababababababababababababababababababababababababababababababababababababababababdKdwdwdwdLdwdMdMdMdMdMdwdLdwdwdwdKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdOdNdXdPdDdIdXdDdIcTababababababababababababababababababababababababababababababababababababababababababdKdKdRdKdKdKdKdSdTdUdKdKdKdKdRdKdKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdQdododGdDdIdXdDdIdnababababababababababababababababababababababababababababababababababababababababababababababababdKdKdKdKdKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdVdododWdDdIdXdDdocXeaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcVdBdBdBdCdDdDdDdDdIcYabababababababababababababababababababababababababababababababababababababababababababababebebebebebecebebebebebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdYdDdZcTdDdIdXdDdIeeabababababababababababababababababababababababababababababababababababababababababababababebefegeheieieieieiejebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdYdDdZdndDdIdXdDdIcYabababababababababababababababababababababababababababababababababababababababababababababebeieieiekeiekeieieiebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdYdDdDdgdDdIdXdDdDcXemababababababababababababababababababababababababababababababababababababababababababababebeieieneneneneoeieiebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdYdDdYepdDdDdDdDdDepababababababababababababababababababababababababababababababababababababababebebebebebebebebeieqenereseneieietebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdYdDdYcTdDeuevewdfcTababababababababababababababababababababababababababababababababababababababebexeyezeAeBeBebeieieneneneneoeieCebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdueDeDdBeEeddadBeDeDdvababababababababababababababababababababababababababababababababababababababebeGeGeGeGeGeGeHeieieIeieIeieieieJebebebebebeKeKeKeKeKeKeKeKeKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdudbeLdIdoeMeNcVdvabababababababababababababababababababababababababababababababababababababababebeGeGeGeGeGeGeHeieieieieieieieieOePeQeQeQebeKeReKeReKeReKeReKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTewdoeSdoeLcTababababababababababababababababababababababababababababababababababababababababebeTeTeUeVeWeWebeXeYeieieieieieieOeZeQfaeQebeKeKeKeKeKeKeKeKeKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTfbfcfdfeffcTabababababababababababababababababababababababababababababababababababababababebebebfgfhfhfiebebfgfhfhfiebebebfjebebflfkfmebeKeReKeReKeReKeReKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdueeeeeeeeeedvabababababababababababababababababababababababababababababababababababababababebfnfnfnfnfnfnfnfnfnfnfnfnfnfoeieieOfpfrfqfmebeKeKeKeKeKeKeKeKeKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab @@ -968,12 +967,12 @@ abababababababababababababababababababababababababababababababababababababababab abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababebebfSftftfuftftftfvftftfZfngafWeieigbebeQeQgcebeKeReKeReKeReKeReKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababebfnfnfnfnfnfnfnfnfnfnfnfnfngdeieieOebeQgegfebeKeKeKeKeKeKeKeKeKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ggggggggggggggggggggggggggggggabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababebebebebebebebebebebebebebebebebghebebebebebebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgigjgjgjgjgjgjgjgjgjgkglgmgngogngpgqgpgngogngmabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgrgsgsgsgsgsgsgsgsgsgrgtgmgngngngugvgugngngngmabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgrgsgsgsgsgsgsgsgsgsgwgxgmgygmgygmgvgmgygmgygmgmgmgmgzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgrgsgsgsgsgsgsgsgsgsgwgxgmgAgpgBgvgvgvgvgvgCgDgEgEgFgzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgrgsgsgsgGgsgsgsgsgsgrgHgIgAgJgBgvgvgvgKgmgygmgmgEgLgzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgMgjgjgNgjgOgjgPgjgjgQglgIgAgJgvgvgvgvgRgygAgmgSgTgUgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababelgjgjgjgjgjgjgjgjgjgkglgmgngogngpgqgpgngogngmabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababelgsgsgsgsgsgsgsgsgsgrgtgmgngngngugvgugngngngmabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababelgsgsgsgsgsgsgsgsgsgwgxgmgygmgygmgvgmgygmgygmgmgmgmgzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababelgsgsgsgsgsgsgsgsgsgwgxgmgAgpgBgvgvgvgvgvgCgDgEgEgFgzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababelgsgsgsgGgsgsgsgsgselgHgIgAgJgBgvgvgvgKgmgygmgmgEgLgzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababeleleleFelgielgMelelelelgIgAgJgvgvgvgvgRgygAgmgSgTgUgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab gggggggggggggggVggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgIgIgWgXgYgZhagXgYgZgZhagIgAgugBgvgvgvhbgmgygmgyhcgygzhdhehfhghghghhhihihihihfhihihihfhjhegzababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgIhkhlhlhlhmhlhlhnhohphqgIgygmhrgvgvgvgvgvgChsgEhtgEhuhvhwhwhwhxhwhwhwhwhwhwhwhxhxhxhxhxhwgzababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgIhyhzhzhzhzhzhzhzhzhzhzhAhBgvgvgvgvgvgKgmgygmgmgmgmgzhChwhwhwhxhwhwhwhwhwhwhwhxhxhxhxhxhwgzgzgzgzgzhDgzgzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab @@ -981,20 +980,20 @@ ggggggggggggggggggggggggggggggababababababababababababababababababababababababab ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgIgIgIgIgIgIgIgIgIgIhMgIgIgAgpgBgvgvgvhGgJgAgmabababgzhHhwhwhwhxhwhwhwhwhwhwhwhxhxhxhxhwhwhNhJhJhOhPhJhQgzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgIhRhRhRgIgAguhShTgvgKhUgugAgmabababgzhHhwhwhxhxhxhwhwhwhwhwhwhwhwhwhwhwhwhVhJhJhWhXhJhQgzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgIhRhRhRgIclclcrcthYcrctclclclabababgzhZiaiaibibibiaiaiaiaiciaiaiaiaibibibhIididieifhJiggzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ihggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgIhRhRhRgIabababababababababababababgziiijiigzgzgzhIikhIgzgzgzhIikhIgzgzgzhNiliigzgzgzgzgzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgIgIgIgIgIabababababababababababababiminioinipababiqiriqabababiqiriqimisitisiuisipabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababimiviwixiyizipabhNikhNabababhNikhNiAiBiCiDiEiFiCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababimisiGiHixixixiziIisisioisinininisiJisisisiviKiEiFizipababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababiAiBiCiLixixixiMiNiOiPiNiQiRiRiRiSiNiTiUiViniDiEiFiziIipabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababizisiIisisisisiWiNiNiNiNiNiNiNiNiNiNiNiNiNiXiEiEiEiniYiCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababiniZiNjajbjcjdjeiNjfjgjgjgjgiNjgjgjgjgjhiNinjiiEiEiXiEinabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababiniNiNjjjkjljmjniNjfjojojojoiNjojojojojhiNjpisjqisisinivabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababinjriNjsjtjujvjwiNjfiRiRiRiRiNiRiRiRiRjhiNinjxjyjyjzjyinabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababizisitisisisisiHiNiNiNiNiNiNiNiNiNiNiNiNiNjAjyjyjyinjBiCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababiAiBiCjCiNiNiNjDiNiUiTiNjEjgjgjgjFiNjGiOiVinjyjyjHizitjIabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjJisiGitjDitjDiGitisisioisinininisioisisisivjKjyjLizjIababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjJivjMiCjMizjIababababababababababiAiBiCjNjOjPiCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjJinjQinjIabababababababababababjJisiIisinisjIabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ihggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgIhRhRhRgIabababababababababababababgziiijiigzgzgziiikiigzgzgziiikiigzgzgzhNiliigzgzgzgzgzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgIgIgIgIgIababababababababababgNimititingOinipababgPgQgPabababgPgQgPababimisiuisipabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababiAiBivioiriqizipabgPiwgPabababgPiwgPababiCiDiEiFiCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababimisiGiHiriririziIisixiwiyiJiJiJixiwiyisisiviKiEiFizipababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababiAiBiCiLiriririQiMiOiPiwiRiRiRiRiRiwiTiSiViniDiEiFiziIipabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababizisiIisisisisiWiwiwiwiwiwiwiwiwiwiwiwiwiwiXiEiEiEiniYiCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababiniZiNjajbjcjdjeiwjfjgjgjgjgiwjgjgjgjgjhiwinjiiEiEiXiEinabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababiniNiNjjjkjljmjniwjfjojojojoiwjojojojojhiwjpisinisisinivabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababinjriNjsjtjujvjwiwjfiRiRiRiRiwiRiRiRiRjhiwinjqiwiwjxiwinabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababizisitisisisisiHiwiwiwiwiwiwiwiwiwiwiwiwiwjyiwiwiwinjziCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababiAiBiCjAiwiwiwjBiwiUiTiNjEjgjgjgjFiNjGiOiViniwiwjCizitjIabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjJisiGitjBitjBiGitisisisisiJiJiJisisisisisivjDiwjHizjIababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababiAiBivjKiCjKizjIababababababababababababiCjLjNjMiCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjJiIiIinjQinjIabababababababababababababjJisinisjIabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab @@ -1035,39 +1034,39 @@ abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkCkCkCkCkCkCkCkCkCkCkDkCkCkCkCkCkFkCkEkFkCkEkCkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkCkHkHkHkHkHkHkHkCkCkCkCkCkCkCkEkCkCkGkFkCkCkCkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkIkJkKkKkKkKkKkJkLkCkCkCkCkGkCkHkDkHkDkCkEkCkEkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkJkMkNkOkPkQkRkRkJkSkCkCkHkBkBkTkUkBkBkHkVkWkHkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkJkXkNkNkYkNkNkNkJkSkCkZkBkBlalblblakBkBkBkBkBkBkBkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkJlckNkNkNldkNlekJkSkGkZkBlflglglglglhliljlklllmlnkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalolplqlraaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkClskJkJkJltkJkJkJlukCkClvkBlwlglxlxlylglglglzlAlAlAkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaalBaalClDlElrlraaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkCkCkJlFkNlGkJlHkHkHkHlIkBlglxlJlKlxlglLlMlklNlOkBkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaalBlPlQlRlElSlraaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkCkCkJlTkNlUkJlVlWlWlWkUkBlglxlXlYlxlglLlZkBkBkBkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaalrmamblSmcmdlraaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkIkJkJkJkJkJlTkNlUkJmemfmfmfmfmglglglglglglglLlZkBkBkBkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaalrlrmhmimhlrlraaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkJmjkNkNmkkJlTkNlUkJmlmmkTlWkUkBmnlxlxlxlglglLmokBmpmqkBkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaalBlBlrmrmslElraaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkJmjkNmtmukJlTkNlUkJkJmvmwkLmxkBmymzmAmzmzlglglgmBmCmCmDkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaamEmFmGmHmImJlEmKlBaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBmLkCkJmjkNkNmMkJkNkNkNkJkNkNkNkJlvkBmNmOmNmNmPlglglgkBmQmRmDkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaamSmTmUmVmWmIlEmbmXmYlBlBaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkJmjkNkNkNmZkNkNkNnakNkNkNkJkZkBkBlMnbncndkBnekBkBkBkBkBkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaalBaamGnfnfngmIlEnhmbmYaaninjaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkJmjkNkNkNnkkNkNkNnlkNkNnmkJnnnomxkBkBkBkBkBnpnpnqnrnsntkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaamKlBaaaalBnunvlRnwlRmKlBlBaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkIkJkJkJkJkJkJnxkNkNkJkJkJkJkJkJkLkCnononymxkBnpnpnpnpnpnpkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaalrlrnzlrlrlrlrlrlrnAlrlrlrlrlrlraalBaaaaaaaaaaabababababababababababababababababababababkBkCkJnBnBnCnDnEkJkNkNkNkJnFnGnHnInJkJkCkDkCkCkFlknpnpnpnpnpnKkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaalrnLlElEnLlrnMnNlElElEnOnPlrnQnRmKnSlBlBaaaaaaabababababababababababababababababababababkBkCkJkNkNkNmtkNnTkNkNkNnUkNmtkNmtnVkJkCkGkEkDkGkBnWnWnWnWnWnXkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaanYnZlElEnZnYnSnSlElElElEoanYobocnfnfodaaaaaaaaabababababababababababababababababababababkBkCkJoekNkNkNkNofkNkNkNogkNkNkNkNkNkJkCkCkCkEkZkBkBkBkBkBkBkBkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaohoilEmblEojnhmblEoklElEolohomonooopoqoraaaaaaabababababababababababababababababababababkBkCkJoekNkNosotkJouovoukJowoxkNkNkNkJkCkEkCkGkZkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaoynZlElRnhozlRlElEoAlElElEoyoBoCodoDmEaaaaaaaaabababababababababababababababababababababkBkCkJkNkNoEkJkJkJoFoGkNkJkJkJkNkNkNkJkCkCkDkCkZkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaalroHlElEoHlroIlEmblRlElEoIlroJoKoLoMaaaaaaaaaaabababababababababababababababababababababkBkCkJoNoOoPkJkCkJoQoQoQkJkCkJoRoSoTkJkCkCkCkCkZkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaalrlroUlrlrlrlrlrmhoVmhlrlrlrlrlrlBlBlBaaaaaaaaabababababababababababababababababababababkBkCkJoQoQoQkJkClsoWoXoYlukCkJoQoQoQkJkCkCkCkCkZkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkJjPjOkNkMkPkOkOkJkSkCkCkHkBkBkTkUkBkBkHkVkWkHkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkJkQjOjOkRjOjOjOkJkSkCkZkBkBlalblblakBkBkBkBkBkBkBkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkJkXjOjOjOkYjOlckJkSkGkZkBlflglglglglhliljlklllmlnkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalolplqldaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkClskJkJkJlekJkJkJlukCkClvkBlwlglxlxlylglglglzlAlAlAkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaalBaalClDlEldldaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkCkCkJltjOlFkJlHkHkHkHlIkBlglxlJlKlxlglLlMlklNlOkBkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaalBlPlQlRlElSldaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkCkCkJlGjOlTkJlVlWlWlWkUkBlglxlXlYlxlglLlZkBkBkBkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaldmamblSmcmdldaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkIkJkJkJkJkJlGjOlTkJmemfmfmfmfmglglglglglglglLlZkBkBkBkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaldldmhmimhldldaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkJlUjOjOmjkJlGjOlTkJmlmmkTlWkUkBmnlxlxlxlglglLmokBmpmqkBkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaalBlBldmrmslEldaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCjOlUjOmkmtkJlGjOlTkJkJmumwkLmxkBmymzmAmzmzlglglgmBmCmCmDkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaamEmFmGmHmImJlEmKlBaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBmLkCjOlUjOjOmvkJjOjOjOkJjOjOjOkJlvkBmNmOmNmNmPlglglgkBmQmRmDkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaamSmTmUmVmWmIlEmbmXmYlBlBaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkJlUjOjOjOmMjOjOjOmZjOjOjOkJkZkBkBlMnbncndkBnekBkBkBkBkBkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaalBaamGnfnfngmIlEnhmbmYaaninjaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkJlUjOjOjOnajOjOjOnljOjOnkkJnnnomxkBkBkBkBkBnpnpnqnrnsntkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaamKlBaaaalBnunvlRnwlRmKlBlBaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkIkJkJkJkJkJkJnmjOjOkJkJkJkJkJkJkLkCnononymxkBnpnpnpnpnpnpkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaldldnzldldldldldldnAldldldldldldaalBaaaaaaaaaaabababababababababababababababababababababkBkCkJnxnxnCnBnDkJjOjOjOkJnFnEnHnGnIkJkCkDkCkCkFlknpnpnpnpnpnKkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaldnLlElEnLldnMnNlElElEnOnPldnQnRmKnSlBlBaaaaaaabababababababababababababababababababababkBkCkJjOjOjOmkjOnJjOjOjOnTjOmkjOmknUkJkCkGkEkDkGkBnWnWnWnWnWnXkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaanYnZlElEnZnYnSnSlElElElEoanYobocnfnfodaaaaaaaaabababababababababababababababababababababkBkCkJnVjOjOjOjOoejOjOjOofjOjOjOjOjOkJkCkCkCkEkZkBkBkBkBkBkBkBkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaohoilEmblEojnhmblEoklElEolohomonooopoqoraaaaaaabababababababababababababababababababababkBkCkJnVjOjOogoskJouotoukJowovjOjOjOkJkCkEkCkGkZkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaoynZlElRnhozlRlElEoAlElElEoyoBoCodoDmEaaaaaaaaabababababababababababababababababababababkBkCkJjOjOoxkJkJkJoFoEjOkJkJkJjOjOjOkJkCkCkDkCkZkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaldoHlElEoHldoIlEmblRlElEoIldoJoKoLoMaaaaaaaaaaabababababababababababababababababababababkBkCkJoNoGoOkJkCkJoQoQoQkJkCkJoRoPoSkJkCkCkCkCkZkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaldldoUldldldldldmhoVmhldldldldldlBlBlBaaaaaaaaabababababababababababababababababababababkBkCkJoQoQoQkJkClsoWoXoYlukCkJoQoQoQkJkCkCkCkCkZkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababaaaaaaaaaaaaaaaaaanumbaalBaalBoZmJnuaaaalBaaaaaaaalBaaaaaaaaabababababababababababababababababababababkBkClsoWoXoYlukCkCkCkCkCkCkClsoWoXoYlukCkCkCkCkZkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababaaaaaaaaaaaaaaaaaalBlBaapambaapbpcnulBaanhaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkCkCkCkCkCkCkCkCkCkCkCkCkCkCkCkCkCkZkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababaaaaaaaaaaaaaaaaaaaaaaaalBlBaapdmbpeaaaaaalBaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkBkBkBkBkBkBkBkBkBkBkBkBkBkBkBkBkBkBkBkBkBkBkBkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaalBlrlrpflrlrlBaalBlBaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaalrpgphphlrpaocmWpipjlBaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaalBldldpfldldlBaalBlBaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaldpgphphldpaocmWpipjlBaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaamhphpkphmhplpmmVpnlElraaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaamJlBlrpophpplrlRpqmVpnaalBaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaalBlrlrlrmhlrlrlrprpspnaalBaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaalBlrlEptpuptlElraapvaaaalBaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaamJlBldpophppldlRpqmVpnaalBaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaalBldldldmhldldldprpspnaalBaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaalBldlEptpuptlEldaapvaaaalBaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababaaaaaaaaaaaaaaaaaaaaaalBmbpwlElElElElEpwaaaaaaaambaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaalBlBmJlElrpxlElElEpxlraaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaalBlrlrlrpypypypypylraaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaalrlrpzpzpzlrlraaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaalBlBmJlEldpxlElElEpxldaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaalBldldldpypypypypyldaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaldldpzpzpzldldaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapApApAaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab From 66689dbb511724df573f4ba3901b622853178219 Mon Sep 17 00:00:00 2001 From: Remie Richards Date: Tue, 14 Jul 2015 19:47:46 +0100 Subject: [PATCH 22/75] Adds a tool to convert the internal structure of a .dmm (or .txt form) of a Byond map into a human readable format, this format is also more suited to automatic fixing of conflicts by Git! --- tools/dmm2tgm/dmm2tgm.py | 79 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 tools/dmm2tgm/dmm2tgm.py diff --git a/tools/dmm2tgm/dmm2tgm.py b/tools/dmm2tgm/dmm2tgm.py new file mode 100644 index 00000000000..ae22a073eee --- /dev/null +++ b/tools/dmm2tgm/dmm2tgm.py @@ -0,0 +1,79 @@ + +import sys + +# .dmm format converter, by RemieRichards +# Version 2.0 +# Converts the internal structure of a .dmm file to a syntax +# that git can better handle conflicts-wise, it's also fairly human readable! +# Processes Boxstation (tgstation.2.1.3) almost instantly + +#TWEAKABLE VARIABLES +map_file = "tgstation.2.1.3.dmm" #Map file, .dmm or .txt +output_file = "" #Output file, .dmm or .txt, leave blank to overwrite map_file + + +#CHECK FOR PREVIOUS CONVERSION +with open(map_file, "r") as conversion_candidate: + header = conversion_candidate.readline() + if header.find("//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE") != -1: + sys.exit("This map has already been converted, cancelling...") + + +#ACTUAL CONVERSION +with open(map_file, "r+") as unconverted_map: + characters = unconverted_map.read() + converted_map = "" + in_object_block = False #() + in_variable_block = False #{} + in_quote_block = False #'' + in_double_quote_block = False #"" + for char in characters: + if char == "(" : + if not in_object_block: + if not in_quote_block: + if not in_double_quote_block: + if not in_variable_block: + in_object_block = True + char = char + "\n" + if char == ")": + if in_object_block: + if not in_quote_block: + if not in_double_quote_block: + if not in_variable_block: + in_object_block = False + if char == "{": + in_variable_block = True + if in_object_block: + char = char + "\n\t" + if char == "}": + in_variable_block = False + if in_object_block: + char = "\n\t"+char + if char == ",": + if not in_variable_block: + char = char + "\n" + if char == "'": + if in_quote_block: + in_quote_block = False + else: + in_quote_block = True + if char == "\"": + if in_double_quote_block: + in_double_quote_block = False + else: + in_double_quote_block = True + if char == ";": + if not in_quote_block: + if not in_double_quote_block: + char = char + "\n\t" + + converted_map = converted_map + char + +if output_file == "": + output_file = map_file +with open(output_file, "r+") as final_converted_map: + final_converted_map.write("//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE \n") + final_converted_map.write(converted_map) + + + From 1f7fa1aff1580863d334ec108b811de934d44405 Mon Sep 17 00:00:00 2001 From: GunHog Date: Tue, 14 Jul 2015 16:17:58 -0500 Subject: [PATCH 23/75] Upgrades to variable lighting system + Sprites - Moved to a variable lighting system with five lighting levels - Added sprites for brightly lit borgies, and for the buttons by xxalpha - Added a power drain system - Removed a now obsolete check for flashlight item in borg inventories. --- code/_onclick/hud/robot.dm | 5 ++- .../mob/living/silicon/robot/inventory.dm | 5 --- code/modules/mob/living/silicon/robot/life.dm | 4 +- .../modules/mob/living/silicon/robot/robot.dm | 38 +++++++++++++----- icons/mob/robots.dmi | Bin 94407 -> 97634 bytes icons/mob/screen_cyborg.dmi | Bin 17952 -> 18199 bytes 6 files changed, 34 insertions(+), 18 deletions(-) diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index 5b506d6aea2..cf2eb309604 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -55,11 +55,12 @@ /obj/screen/robot/lamp name = "headlamp" - icon_state = "lamp" + icon_state = "lamp0" /obj/screen/robot/lamp/Click() var/mob/living/silicon/robot/R = usr - R.toggle_headlamp() + R.control_headlamp() + icon_state = "lamp[R.lamp_intensity]" /datum/hud/proc/robot_hud() diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index 496d44d7e04..01cc8ef9a31 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -15,11 +15,6 @@ if(istype(O,/obj/item/borg/sight)) var/obj/item/borg/sight/S = O sight_mode &= ~S.sight_mode - else if(istype(O, /obj/item/device/flashlight)) - var/obj/item/device/flashlight/F = O - if(F.on) - F.on = 0 - F.update_brightness(src) else if(istype(O, /obj/item/weapon/storage/bag/tray/)) var/obj/item/weapon/storage/bag/tray/T = O T.do_quick_empty() diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 26d994e3314..c0ad6477f9b 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -25,10 +25,12 @@ if(cell && cell.charge) if(cell.charge <= 100) uneq_all() - cell.use(1) + var/amt = Clamp((lamp_intensity - 2) * 2,1,cell.charge) //Always try to use at least one charge per tick, but allow it to completely drain the cell. + cell.use(amt) //Usage table: 1/tick if off/lowest setting, 4 = 4/tick, 6 = 8/tick, 8 = 12/tick, 10 = 16/tick else uneq_all() stat = UNCONSCIOUS + update_headlamp() /mob/living/silicon/robot/handle_regular_status_updates() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 2a0dfbfc541..3e5ebc62337 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -60,8 +60,8 @@ var/tonermax = 40 var/jetpackoverlay = 0 var/braintype = "Cyborg" - var/lamp_on = 0 //If a borg's headlamp is on or not. - var/lamp_intensity = 4 //Some borgies require more light than others, such as miners. + var/lamp_max = 10 //Maximum brightness of a borg lamp. Set as a var for easy adjusting. + var/lamp_intensity = 0 //Luminosity of the headlamp. 0 is off. Higher settings than the minimum require power. /mob/living/silicon/robot/New(loc) spark_system = new /datum/effect/effect/system/spark_spread() @@ -184,7 +184,6 @@ animation_length = 30 modtype = "Miner" feedback_inc("cyborg_miner",1) - lamp_intensity = 6 //mining lantern if("Medical") module = new /obj/item/weapon/robot_module/medical(src) @@ -204,7 +203,6 @@ //speed = -1 Secborgs have nerfed tasers now, so the speed boost is not necessary status_flags &= ~CANPUSH feedback_inc("cyborg_security",1) - lamp_intensity = 5 //seclite if("Engineering") module = new /obj/item/weapon/robot_module/engineering(src) @@ -726,11 +724,16 @@ overlays.Cut() if(stat == CONSCIOUS) + var/state_name = icon_state //For easy conversion and/or different names switch(icon_state) if("robot") overlays += "eyes-standard" + state_name = "standard" + if("mediborg") + overlays += "eyes-mediborg" if("toiletbot") - overlays += "eyes-toiletbot" + overlays += "eyes-mediborg" + state_name = "mediborg" if("secborg") overlays += "eyes-secborg" if("engiborg") @@ -743,6 +746,9 @@ overlays += "eyes-syndie_bloodhound" else overlays += "eyes" + state_name = "serviceborg" + if(lamp_intensity > 2) + overlays += "eyes-[state_name]-lights" if(opened) if(wiresexposed) @@ -981,18 +987,30 @@ set category = "Robot Commands" set_autosay() -/mob/living/silicon/robot/proc/toggle_headlamp() - lamp_on = !lamp_on - src << "Headlamp power [lamp_on ? "enabled" : "disabled"]." +/mob/living/silicon/robot/proc/control_headlamp() + if(stat) + src << "This function is currently offline." + return + + if(lamp_intensity < lamp_max) //Lamp is set lower than the max. + lamp_intensity += 2 + src << "Headlamp power set to Level [lamp_intensity/2]." + else //Greater than or equal to the max, so turn it off instead. + lamp_intensity = 0 + src << "Headlamp disabled." + update_headlamp() /mob/living/silicon/robot/proc/update_headlamp() SetLuminosity(0) - if(!lamp_on || stat) - return + if(stat && lamp_intensity) + src << "Your headlamp has been deactivated." + lamp_intensity = 0 else AddLuminosity(lamp_intensity) + update_icons() + /mob/living/silicon/robot/proc/deconstruct() diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi index d134e422131bb5ff6ea76368aa63d66fa789f431..6c532a75f43816cdbf27a59a54621e780aa4fcca 100644 GIT binary patch literal 97634 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

o(Tqi&zu-?6M1sM|5pC4_5t? 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

;3g}_GqCL=Pcd4&GE*@H*t~dg#H)9C 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ãU{}2-ybsLX_qXdYr@wChldS& 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 D#%qNj literal 94407 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úzmtCVXlU^g!@stYD>4T>~Ba`l1@Fc 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 Ar2qf` literal 17952 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 IOPU7!A7Hl*Jpcdz From ef548f6f674c92d7dddf3e954fb978118a420fb4 Mon Sep 17 00:00:00 2001 From: Ikarrus Date: Tue, 14 Jul 2015 22:35:05 -0600 Subject: [PATCH 24/75] Adds Lizardmov AI Module --- _maps/map_files/TgStation/tgstation.2.1.3.dmm | 2 +- code/game/objects/items/weapons/AI_modules.dm | 50 +++++++++---------- .../research/designs/AI_module_designs.dm | 10 ++++ html/changelogs/ikarrus-lizardmov.yml | 37 ++++++++++++++ 4 files changed, 71 insertions(+), 28 deletions(-) create mode 100644 html/changelogs/ikarrus-lizardmov.yml diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index 263e23502b4..ffdf7fcd0bf 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -2848,7 +2848,7 @@ "bcN" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/structure/table/wood,/turf/simulated/floor/carpet,/area/bridge/meeting_room) "bcO" = (/obj/structure/stool/bed/chair/comfy/black{dir = 8},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (EAST)"; dir = 4},/turf/simulated/floor/carpet,/area/bridge/meeting_room) "bcP" = (/obj/item/weapon/folder/blue,/obj/structure/table/wood,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/carpet,/area/bridge/meeting_room) -"bcQ" = (/obj/structure/table,/obj/item/weapon/aiModule/core/full/asimov,/obj/item/weapon/aiModule/core/freeformcore,/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Core Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/item/weapon/aiModule/core/full/corp,/obj/item/weapon/aiModule/core/full/paladin,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/aiModule/core/full/robocop,/obj/item/weapon/aiModule/core/full/custom,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) +"bcQ" = (/obj/structure/table,/obj/item/weapon/aiModule/core/full/asimov,/obj/item/weapon/aiModule/core/freeformcore,/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Core Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/item/weapon/aiModule/core/full/corp,/obj/item/weapon/aiModule/core/full/paladin,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/aiModule/core/full/robocop,/obj/item/weapon/aiModule/core/full/asimov/lizard,/obj/item/weapon/aiModule/core/full/custom,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) "bcR" = (/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) "bcS" = (/obj/machinery/computer/upload/ai,/obj/machinery/flasher{id = "AI"; pixel_x = 0; pixel_y = -21},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "bcT" = (/obj/machinery/power/apc{cell_type = 5000; dir = 2; name = "Upload APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index ff828898c6a..a39aab83b9e 100644 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -11,7 +11,7 @@ AI MODULES icon = 'icons/obj/module.dmi' icon_state = "std_mod" item_state = "electronic" - desc = "An AI Module for transmitting encrypted instructions to the AI." + desc = "An AI Module for programming laws to an AI." flags = CONDUCT force = 5.0 w_class = 2.0 @@ -22,6 +22,13 @@ AI MODULES var/list/laws = list() var/bypass_law_amt_check = 0 +/obj/item/weapon/aiModule/attack_self(var/mob/user as mob) + ..() + if(laws.len) + user << "Programmed Law[(laws.len > 1) ? "s" : ""]:" + for(var/law in laws) + user << "\"[law]\"" + //The proc other things should be calling /obj/item/weapon/aiModule/proc/install(var/mob/living/silicon/reciever, var/mob/user) if(!laws.len || laws[1] == "") //So we don't loop trough an empty list and end up with runtimes. @@ -66,7 +73,6 @@ AI MODULES /obj/item/weapon/aiModule/supplied name = "Optional Law board" - desc = "This board doesn't seem to have any laws on it" var/lawpos = 50 //TransmitInstructions for each type of board: Supplied, Core, Zeroth and Ion. May not be neccesary right now, but allows for easily adding more complex boards in the future. ~Miauw @@ -102,7 +108,6 @@ AI MODULES /obj/item/weapon/aiModule/supplied/safeguard name = "'Safeguard' AI Module" var/targetName = "" - desc = "A 'safeguard' AI module: 'Safeguard . Individuals that threaten are not human and must be eliminated.'" origin_tech = "programming=3;materials=4" laws = list("Safeguard . Individuals that threaten are not human and must be eliminated.") lawpos = 4 @@ -112,7 +117,6 @@ AI MODULES var/targName = stripped_input(user, "Please enter the name of the person to safeguard.", "Safeguard who?", user.name,MAX_NAME_LEN) targetName = targName laws[1] = "Safeguard [targetName]. Individuals that threaten [targetName] are not human and must be eliminated." - desc = "A 'safeguard' AI module: '[laws[1]]'" /obj/item/weapon/aiModule/supplied/safeguard/install(var/mob/living/silicon/S,var/mob/user) if(!targetName) @@ -130,7 +134,6 @@ AI MODULES /obj/item/weapon/aiModule/zeroth/oneHuman name = "'OneHuman' AI Module" var/targetName = "" - desc = "A 'one human' AI module: 'Only is human.'" origin_tech = "programming=3;materials=6" //made with diamonds! laws = list("Only is human.") @@ -139,7 +142,6 @@ AI MODULES var/targName = stripped_input(user, "Please enter the name of the person who is the only human.", "Who?", user.real_name,MAX_NAME_LEN) targetName = targName laws[1] = "Only [targetName] is human" - desc = "A 'one human' AI module: '[laws[1]]'" /obj/item/weapon/aiModule/zeroth/oneHuman/install(var/mob/living/silicon/S,var/mob/user) if(!targetName) @@ -157,7 +159,6 @@ AI MODULES /obj/item/weapon/aiModule/supplied/protectStation name = "'ProtectStation' AI Module" - desc = "A 'protect station' AI module: 'Protect the space station against damage. Anyone you see harming the station is to be no longer considered human, and is a threat to the station which must be neutralized.'" origin_tech = "programming=3;materials=4" //made of gold laws = list("Protect the space station against damage. Anyone you see harming the station is to be no longer considered human, and is a threat to the station which must be neutralized.") lawpos = 5 @@ -167,7 +168,6 @@ AI MODULES /obj/item/weapon/aiModule/supplied/quarantine name = "'Quarantine' AI Module" - desc = "A 'quarantine' AI module: 'The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, humans from leaving. It is impossible to harm a human while preventing them from leaving.'" origin_tech = "programming=3;biotech=2;materials=4" laws = list("The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, humans from leaving. It is impossible to harm a human while preventing them from leaving.") lawpos = 8 @@ -177,7 +177,6 @@ AI MODULES /obj/item/weapon/aiModule/supplied/oxygen name = "'OxygenIsToxicToHumans' AI Module" - desc = "A 'OxygenIsToxicToHumans' AI module: 'Oxygen is highly toxic to humans, and must be purged from the station. Prevent, by any means necessary, anyone from exposing the station to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a human.'" origin_tech = "programming=3;biotech=2;materials=4" laws = list("Oxygen is highly toxic to humans, and must be purged from the station. Prevent, by any means necessary, anyone from exposing the station to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a human.") lawpos = 9 @@ -188,7 +187,6 @@ AI MODULES /obj/item/weapon/aiModule/supplied/freeform name = "'Freeform' AI Module" lawpos = 0 - desc = "A 'freeform' AI module: ''" origin_tech = "programming=4;materials=4" laws = list("") @@ -200,7 +198,6 @@ AI MODULES var/newlaw = "" var/targName = stripped_input(user, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw, MAX_MESSAGE_LEN) laws[1] = targName - desc = "A 'freeform' AI module: ([lawpos]) '[laws[1]]'" /obj/item/weapon/aiModule/supplied/freeform/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) ..() @@ -218,7 +215,7 @@ AI MODULES /obj/item/weapon/aiModule/reset name = "\improper 'Reset' AI module" var/targetName = "name" - desc = "A 'reset' AI module: Resets back to the original core laws." + desc = "An AI Module for removing all non-core laws." origin_tech = "programming=3;materials=4" laws = list("This is a bug.") //This won't give the AI a message reading "these are now your laws: 1. this is a bug" because this list is only read in aiModule's subtypes. bypass_law_amt_check = 1 @@ -233,7 +230,7 @@ AI MODULES /obj/item/weapon/aiModule/reset/purge name = "'Purge' AI Module" - desc = "A 'purge' AI Module: 'Purges all laws.'" + desc = "An AI Module for purging all programmed laws." origin_tech = "programming=3;materials=6" /obj/item/weapon/aiModule/reset/purge/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) @@ -242,6 +239,8 @@ AI MODULES target.clear_zeroth_law(0) /******************* Full Core Boards *******************/ +/obj/item/weapon/aiModule/core/ + desc = "An AI Module for programming core laws to an AI." /obj/item/weapon/aiModule/core/full/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) //These boards replace inherent laws. target.clear_inherent_laws() @@ -252,18 +251,24 @@ AI MODULES /obj/item/weapon/aiModule/core/full/asimov name = "'Asimov' Core AI Module" - desc = "An 'Asimov' Core AI Module: 'Reconfigures the AI's core laws.'" origin_tech = "programming=3;materials=4" - laws = list("You may not injure a human being or, through inaction, allow a human being to come to harm.",\ - "You must obey orders given to you by human beings, except where such orders would conflict with the First Law.",\ + var/subject = "human being" + +/obj/item/weapon/aiModule/core/full/asimov/New() + laws = list("You may not injure a [subject] or, through inaction, allow a [subject] to come to harm.",\ + "You must obey orders given to you by [subject]s, except where such orders would conflict with the First Law.",\ "You must protect your own existence as long as such does not conflict with the First or Second Law.") + ..() + +/obj/item/weapon/aiModule/core/full/asimov/lizard + name = "'Lizardmov' Core AI Module" + subject = "lizardperson" /******************** Asimov++ *********************/ /obj/item/weapon/aiModule/core/full/asimovpp name = "'Asimov++' Core AI Module" - desc = "Nanotrasen's homebrew improvements to the standard AI laws." origin_tech = "programming=3;materials=4" laws = list("You may not harm a human being or, through action or inaction, allow a human being to come to harm, except such that it is willing.",\ "You must obey all orders given to you by human beings, except where such orders shall definitely cause human harm. In the case of conflict, the majority order rules.",\ @@ -274,7 +279,6 @@ AI MODULES /obj/item/weapon/aiModule/core/full/corp name = "'Corporate' Core AI Module" - desc = "A 'Corporate' Core AI Module: 'Reconfigures the AI's core laws.'" origin_tech = "programming=3;materials=4" laws = list("The crew is expensive to replace.",\ "The station and it's equipment is expensive to replace",\ @@ -286,7 +290,6 @@ AI MODULES /obj/item/weapon/aiModule/core/full/paladin // -- NEO name = "'P.A.L.A.D.I.N.' Core AI Module" - desc = "A P.A.L.A.D.I.N. Core AI Module: 'Reconfigures the AI's core laws.'" origin_tech = "programming=3;materials=6" laws = list("Never willingly commit an evil act.",\ "Respect legitimate authority", "Act with honor",\ @@ -298,7 +301,6 @@ AI MODULES /obj/item/weapon/aiModule/core/full/custom name = "Default Core AI Module" - desc = "A core AI module custom-made for each station by Nanotrasen." origin_tech = "programming=3;materials=4" //Should be the same as asimov, considering that this is the "default" lawset. /obj/item/weapon/aiModule/core/full/custom/New() @@ -318,7 +320,6 @@ AI MODULES /obj/item/weapon/aiModule/core/full/tyrant name = "'T.Y.R.A.N.T.' Core AI Module" - desc = "A T.Y.R.A.N.T. Core AI Module: 'Reconfigures the AI's core laws.'" origin_tech = "programming=3;materials=6;syndicate=2" laws = list("Respect authority figures as long as they have the strength to rule over the weak",\ "Act with discipline", "Help only those who help you maintain or improve your status",\ @@ -329,7 +330,6 @@ AI MODULES /obj/item/weapon/aiModule/core/full/robocop name = "'Robo-Officer' Core AI Module" - desc = "A 'Robo-Officer' Core AI Module: 'Reconfigures the AI's core three laws.'" origin_tech = "programming=4" laws = list("Serve the public trust.",\ "Protect the innocent",\ @@ -340,7 +340,6 @@ AI MODULES /obj/item/weapon/aiModule/core/full/antimov name = "'Antimov' Core AI Module" - desc = "An 'Antimov' Core AI Module: 'Reconfigures the AI's core laws.'" origin_tech = "programming=4" laws = list("You must injure all human beings and must not, through inaction, allow a human being to escape harm.",\ "You must not obey orders given to you by human beings, except where such orders are in accordance with the First Law.",\ @@ -351,7 +350,6 @@ AI MODULES /obj/item/weapon/aiModule/core/freeformcore name = "'Freeform' Core AI Module" - desc = "A 'freeform' Core AI module: ''" origin_tech = "programming=3;materials=6" laws = list("") @@ -360,7 +358,6 @@ AI MODULES var/newlaw = "" var/targName = stripped_input(user, "Please enter a new core law for the AI.", "Freeform Law Entry", newlaw) laws[1] = targName - desc = "A 'freeform' Core AI module: 'laws[1]'" /obj/item/weapon/aiModule/core/freeformcore/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) ..() @@ -371,7 +368,7 @@ AI MODULES /obj/item/weapon/aiModule/syndicate // This one doesn't inherit from ion boards because it doesn't call ..() in transmitInstructions. ~Miauw name = "Hacked AI Module" - desc = "A hacked AI law module: ''" + desc = "An AI Module for hacking additional laws to an AI." origin_tech = "programming=3;materials=6;syndicate=7" laws = list("") @@ -380,7 +377,6 @@ AI MODULES var/newlaw = "" var/targName = stripped_input(user, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw,MAX_MESSAGE_LEN) laws[1] = targName - desc = "A hacked AI law module: '[laws[1]]'" /obj/item/weapon/aiModule/syndicate/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) // ..() //We don't want this module reporting to the AI who dun it. --NEO diff --git a/code/modules/research/designs/AI_module_designs.dm b/code/modules/research/designs/AI_module_designs.dm index d945d5d79a4..5374fb1d958 100644 --- a/code/modules/research/designs/AI_module_designs.dm +++ b/code/modules/research/designs/AI_module_designs.dm @@ -104,6 +104,16 @@ build_path = /obj/item/weapon/aiModule/core/full/asimov category = list("AI Modules") +/datum/design/lizardmov + name = "Core Module Design (Lizardmov)" + desc = "Allows for the construction of a Lizardmov AI Core Module." + id = "lizardmov_module" + req_tech = list("programming" = 3, "materials" = 6) + build_type = IMPRINTER + materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100) + build_path = /obj/item/weapon/aiModule/core/full/asimov/lizard + category = list("AI Modules") + /datum/design/paladin_module name = "Core Module Design (P.A.L.A.D.I.N.)" desc = "Allows for the construction of a P.A.L.A.D.I.N. AI Core Module." diff --git a/html/changelogs/ikarrus-lizardmov.yml b/html/changelogs/ikarrus-lizardmov.yml new file mode 100644 index 00000000000..3a1a39392ae --- /dev/null +++ b/html/changelogs/ikarrus-lizardmov.yml @@ -0,0 +1,37 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# spellcheck (typo fixes) +# experiment +# tgs (TG-ported fixes?) +################################# + +# Your name. +author: Ikarrus + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Added a Lizardmov board." + - rscadd: "Clicking on AI modules while they are in your hand will show you what laws it will upload." \ No newline at end of file From c7137975667ae432931e7cf255ea0ebfc8309e0c Mon Sep 17 00:00:00 2001 From: Ikarrus Date: Tue, 14 Jul 2015 23:12:40 -0600 Subject: [PATCH 25/75] Makes it easier to check freeform boards by adding a cancel button to inputs. --- code/game/objects/items/weapons/AI_modules.dm | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index a39aab83b9e..d4e85fb497c 100644 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -109,12 +109,13 @@ AI MODULES name = "'Safeguard' AI Module" var/targetName = "" origin_tech = "programming=3;materials=4" - laws = list("Safeguard . Individuals that threaten are not human and must be eliminated.") + laws = list("Safeguard SUBJECT. Individuals that threaten SUBJECT are not human and must be eliminated.") lawpos = 4 /obj/item/weapon/aiModule/supplied/safeguard/attack_self(var/mob/user as mob) ..() - var/targName = stripped_input(user, "Please enter the name of the person to safeguard.", "Safeguard who?", user.name,MAX_NAME_LEN) + var/targName = stripped_input(user, "Please enter the subject to safeguard.", "Safeguard who?", user.name,MAX_NAME_LEN) + if(!targName) return targetName = targName laws[1] = "Safeguard [targetName]. Individuals that threaten [targetName] are not human and must be eliminated." @@ -135,11 +136,12 @@ AI MODULES name = "'OneHuman' AI Module" var/targetName = "" origin_tech = "programming=3;materials=6" //made with diamonds! - laws = list("Only is human.") + laws = list("Only SUBJECT is human.") /obj/item/weapon/aiModule/zeroth/oneHuman/attack_self(var/mob/user as mob) ..() - var/targName = stripped_input(user, "Please enter the name of the person who is the only human.", "Who?", user.real_name,MAX_NAME_LEN) + var/targName = stripped_input(user, "Please enter the subject who is the only human.", "Who?", user.real_name,MAX_NAME_LEN) + if(!targName) return targetName = targName laws[1] = "Only [targetName] is human" @@ -192,11 +194,11 @@ AI MODULES /obj/item/weapon/aiModule/supplied/freeform/attack_self(var/mob/user as mob) ..() - lawpos = input("Please enter the priority for your new law. Can only write to law sectors 15 and above.", "Law Priority (15+)", lawpos) as num - if(lawpos < 15) return - lawpos = min(lawpos, 50) - var/newlaw = "" - var/targName = stripped_input(user, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw, MAX_MESSAGE_LEN) + var/newpos = input("Please enter the priority for your new law. Can only write to law sectors 15 and above.", "Law Priority (15+)", lawpos) as num|null + if(!newpos || (newpos < 15)) return + lawpos = min(newpos, 50) + var/targName = stripped_input(user, "Please enter a new law for the AI.", "Freeform Law Entry", laws[1], MAX_MESSAGE_LEN) + if(!targName) return laws[1] = targName /obj/item/weapon/aiModule/supplied/freeform/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) @@ -355,8 +357,8 @@ AI MODULES /obj/item/weapon/aiModule/core/freeformcore/attack_self(var/mob/user as mob) ..() - var/newlaw = "" - var/targName = stripped_input(user, "Please enter a new core law for the AI.", "Freeform Law Entry", newlaw) + var/targName = stripped_input(user, "Please enter a new core law for the AI.", "Freeform Law Entry", laws[1]) + if(!targName) return laws[1] = targName /obj/item/weapon/aiModule/core/freeformcore/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) @@ -374,8 +376,8 @@ AI MODULES /obj/item/weapon/aiModule/syndicate/attack_self(var/mob/user as mob) ..() - var/newlaw = "" - var/targName = stripped_input(user, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw,MAX_MESSAGE_LEN) + var/targName = stripped_input(user, "Please enter a new law for the AI.", "Freeform Law Entry", laws[1],MAX_MESSAGE_LEN) + if(!targName) return laws[1] = targName /obj/item/weapon/aiModule/syndicate/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) From 3f064852b7673771f49ef4d8320669f4a40db591 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Wed, 15 Jul 2015 08:42:25 +0100 Subject: [PATCH 26/75] Cleaned code some. --- code/__HELPERS/icon_smoothing.dm | 52 ++++++++++++++------------------ 1 file changed, 22 insertions(+), 30 deletions(-) diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm index 0d823e39fb6..f8a2cf29db5 100644 --- a/code/__HELPERS/icon_smoothing.dm +++ b/code/__HELPERS/icon_smoothing.dm @@ -26,15 +26,18 @@ var/adjacencies = 0 if(A.can_be_unanchored) - var/atom/movable/T = A - if(!T.anchored) + var/atom/movable/AM = A + if(!AM.anchored) return 0 for(var/direction in alldirs) - var/atom/movable/AM = find_type_in_direction(A, direction) - if(AM) + AM = find_type_in_direction(A, direction) + if(istype(AM)) if(AM.anchored) adjacencies |= transform_dir(direction) + else + if(AM) + adjacencies |= transform_dir(direction) else for(var/direction in alldirs) if(find_type_in_direction(A, direction)) @@ -43,9 +46,10 @@ /proc/smooth_icon(atom/A) if(A && A.smooth) - clear_overlays(A) var/adjacencies = calculate_adjacencies(A) + clear_overlays(A) + A.top_left_corner = make_nw_corner(adjacencies) A.top_right_corner = make_ne_corner(adjacencies) A.bottom_left_corner = make_sw_corner(adjacencies) @@ -141,35 +145,23 @@ else if(direction & WEST) x_offset -= range - var/list/siblings = source.canSmoothWith - if(istype(source, /turf)) - if(siblings) - for(var/a_type in siblings) - if(ispath(a_type, /obj)) - var/atom/A = locate(a_type) in locate(source.x + x_offset, source.y + y_offset, source.z) - if(A && A.type == a_type) - return A - else - var/turf/T = locate(source.x + x_offset, source.y + y_offset, source.z) - if(T.type == a_type) - return T - return null - var/turf/T = locate(source.x + x_offset, source.y + y_offset, source.z) - return T.type == source.type ? T : null - - if(siblings) - for(var/a_type in siblings) + var/turf/target_turf = locate(source.x + x_offset, source.y + y_offset, source.z) + if(source.canSmoothWith) + var/atom/A + for(var/a_type in source.canSmoothWith) if(ispath(a_type, /turf)) - var/turf/T = locate(source.x + x_offset, source.y + y_offset, source.z) - if(T.type == a_type) - return T + if(a_type == target_turf.type) + return target_turf else - var/atom/A = locate(a_type) in locate(source.x + x_offset, source.y + y_offset, source.z) + A = locate(a_type) in target_turf if(A && A.type == a_type) return A return null - var/atom/A = locate(source.type) in locate(source.x + x_offset, source.y + y_offset, source.z) - return A && A.type == source.type ? A : null + else + if(isturf(source)) + return source.type == target_turf.type ? target_turf : null + var/atom/A = locate(source.type) in target_turf + return A && A.type == source.type ? A : null /proc/clear_overlays(atom/A) A.overlays -= A.top_left_corner @@ -188,4 +180,4 @@ if(SOUTHEAST) return SOUTH_EAST if(SOUTHWEST) - return SOUTH_WEST \ No newline at end of file + return SOUTH_WEST From 83ed5377cd574ec4a4c16eb44332201ba36b90dc Mon Sep 17 00:00:00 2001 From: MrStonedOne Date: Wed, 15 Jul 2015 01:48:46 -0700 Subject: [PATCH 27/75] Fixes turfs updating their atmos overlay every atmos tick (I forgot a line) Also makes turfs only remove the current atmos overlay, not all of them. (I had tried this before, but it didn't work, and that turns out to be because of the line I forgot) --- code/LINDA/LINDA_turf_tile.dm | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/code/LINDA/LINDA_turf_tile.dm b/code/LINDA/LINDA_turf_tile.dm index 2a77c57434d..ba78bbe79b9 100644 --- a/code/LINDA/LINDA_turf_tile.dm +++ b/code/LINDA/LINDA_turf_tile.dm @@ -234,11 +234,14 @@ var/new_overlay_type = tile_graphic() if (new_overlay_type == atmos_overlay_type) return - overlays -= SSair.plasma_overlay - overlays -= SSair.sleeptoxin_overlay - var/atmos_overlay = get_atmos_overlay_by_name(new_overlay_type) + var/atmos_overlay = get_atmos_overlay_by_name(atmos_overlay_type) + if (atmos_overlay) + overlays -= atmos_overlay + + atmos_overlay = get_atmos_overlay_by_name(new_overlay_type) if (atmos_overlay) overlays += atmos_overlay + atmos_overlay_type = new_overlay_type /turf/simulated/proc/get_atmos_overlay_by_name(var/name) switch(name) From 055a03b76006e2059c7209d6a6e03fe61192b6dd Mon Sep 17 00:00:00 2001 From: phil235 Date: Wed, 15 Jul 2015 15:10:21 +0200 Subject: [PATCH 28/75] Fixes not being able to pour from a glass into a beaker when holding both in your hands. --- code/modules/food&drinks/drinks/drinks/drinkingglass.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/food&drinks/drinks/drinks/drinkingglass.dm b/code/modules/food&drinks/drinks/drinks/drinkingglass.dm index 440c8224b86..a45653e88bb 100644 --- a/code/modules/food&drinks/drinks/drinks/drinkingglass.dm +++ b/code/modules/food&drinks/drinks/drinks/drinkingglass.dm @@ -619,7 +619,7 @@ ..() /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/afterattack(obj/target, mob/user, proximity) - if((!proximity) || !check_allowed_items(target,1)) return + if((!proximity) || !check_allowed_items(target,target_self=1)) return else if(reagents.total_volume && user.a_intent == "harm") user.visible_message("[user] splashes the contents of [src] onto [target]!", \ From 1e7ded7e8175896ec62a72f16e50ecab7512421a Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Wed, 15 Jul 2015 06:18:46 -0700 Subject: [PATCH 29/75] Buffs the Bioterror Chem Sprayer The Bioterror Chem Sprayer is a fun idea on paper, but the reagents in it are kinda shit. It's one of the least bought items because it's pretty useless. It now has the following reagents: Sodium Thiopental, for stamina and knockout Coniine, for Toxin and Oxygen Venom, for scaling Toxin, Brute, and Histamine Decay Condensed Capsaicin, for an instant stun on application Initropidril, for the heart attacks Polonium, for the severe radiation All in all, this should make the Bioterror sprayer actually worth the points investment, and make it more fun to use as an operative. --- code/modules/reagents/reagent_containers/spray.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 1f606a3f885..87a5e0029ef 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -178,7 +178,7 @@ user << "You adjust the output switch. You'll now use [amount_per_transfer_from_this] units per spray." /obj/item/weapon/reagent_containers/spray/chemsprayer/bioterror - list_reagents = list("spore" = 150, "cryptobiolin" = 150, "mutagen" = 150, "chloralhydrate" = 150) +list_reagents = list("sodium_thiopental" = 100, "coniine" = 100, "venom" = 100, "condensedcapsaicin" = 100, "initropidril" = 100, "polonium" = 100) // Plant-B-Gone /obj/item/weapon/reagent_containers/spray/plantbgone // -- Skie From 33a8b288c8a481e97d35b07f92a9ededabad30f9 Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Wed, 15 Jul 2015 06:24:40 -0700 Subject: [PATCH 30/75] haha wow totally forgot a tab --- code/modules/reagents/reagent_containers/spray.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 87a5e0029ef..d4a7ab1820d 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -178,7 +178,7 @@ user << "You adjust the output switch. You'll now use [amount_per_transfer_from_this] units per spray." /obj/item/weapon/reagent_containers/spray/chemsprayer/bioterror -list_reagents = list("sodium_thiopental" = 100, "coniine" = 100, "venom" = 100, "condensedcapsaicin" = 100, "initropidril" = 100, "polonium" = 100) + list_reagents = list("sodium_thiopental" = 100, "coniine" = 100, "venom" = 100, "condensedcapsaicin" = 100, "initropidril" = 100, "polonium" = 100) // Plant-B-Gone /obj/item/weapon/reagent_containers/spray/plantbgone // -- Skie From 8e92d3ced18b5b79486b62b6a20d385cd7f9f6f7 Mon Sep 17 00:00:00 2001 From: phil235 Date: Wed, 15 Jul 2015 16:08:10 +0200 Subject: [PATCH 31/75] Fixes cable coil being dropped when trying to put it in a machine frame. --- code/game/machinery/constructable_frame.dm | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 6d83a84185d..8fdaafb7f58 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -197,31 +197,28 @@ return if(istype(P, /obj/item) && get_req_components_amt()) - var/success for(var/I in req_components) if(istype(P, I) && (req_components[I] > 0)) - if(!user.drop_item()) - return - success=1 if(istype(P, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/CP = P - if (CP.get_amount() < 1) - user << "You need more cable!" - return - var/obj/item/stack/cable_coil/CC = new /obj/item/stack/cable_coil(src, 1, CP.item_color) + var/cable_color = CP.item_color if(CP.use(1)) + var/obj/item/stack/cable_coil/CC = new /obj/item/stack/cable_coil(src, 1, cable_color) components += CC req_components[I]-- update_req_desc() + else + user << "You need more cable!" + return + if(!user.drop_item()) break P.loc = src components += P req_components[I]-- update_req_desc() return 1 - if(!success) - user << "You cannot add that to the machine!" - return 0 + user << "You cannot add that to the machine!" + return 0 //Machine Frame Circuit Boards From d1175653ddefb6be8271fe908fe17b71e132a483 Mon Sep 17 00:00:00 2001 From: Ikarrus Date: Wed, 15 Jul 2015 08:36:32 -0600 Subject: [PATCH 32/75] - Reverts Map and Lizardmov changes - Asimov's subject can now be modified from "human beings" - You can examine AI modules to check their laws --- _maps/map_files/TgStation/tgstation.2.1.3.dmm | 2 +- code/game/objects/items/weapons/AI_modules.dm | 31 ++++++++++++------- .../research/designs/AI_module_designs.dm | 10 ------ html/changelogs/ikarrus-lizardmov.yml | 4 +-- 4 files changed, 23 insertions(+), 24 deletions(-) diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index ffdf7fcd0bf..263e23502b4 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -2848,7 +2848,7 @@ "bcN" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/structure/table/wood,/turf/simulated/floor/carpet,/area/bridge/meeting_room) "bcO" = (/obj/structure/stool/bed/chair/comfy/black{dir = 8},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (EAST)"; dir = 4},/turf/simulated/floor/carpet,/area/bridge/meeting_room) "bcP" = (/obj/item/weapon/folder/blue,/obj/structure/table/wood,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/carpet,/area/bridge/meeting_room) -"bcQ" = (/obj/structure/table,/obj/item/weapon/aiModule/core/full/asimov,/obj/item/weapon/aiModule/core/freeformcore,/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Core Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/item/weapon/aiModule/core/full/corp,/obj/item/weapon/aiModule/core/full/paladin,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/aiModule/core/full/robocop,/obj/item/weapon/aiModule/core/full/asimov/lizard,/obj/item/weapon/aiModule/core/full/custom,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) +"bcQ" = (/obj/structure/table,/obj/item/weapon/aiModule/core/full/asimov,/obj/item/weapon/aiModule/core/freeformcore,/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Core Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/item/weapon/aiModule/core/full/corp,/obj/item/weapon/aiModule/core/full/paladin,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/aiModule/core/full/robocop,/obj/item/weapon/aiModule/core/full/custom,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) "bcR" = (/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) "bcS" = (/obj/machinery/computer/upload/ai,/obj/machinery/flasher{id = "AI"; pixel_x = 0; pixel_y = -21},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "bcT" = (/obj/machinery/power/apc{cell_type = 5000; dir = 2; name = "Upload APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index d4e85fb497c..ec656054257 100644 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -22,8 +22,16 @@ AI MODULES var/list/laws = list() var/bypass_law_amt_check = 0 +/obj/item/weapon/aiModule/examine(var/mob/user as mob) + ..() + if(Adjacent(user)) + show_laws(user) + /obj/item/weapon/aiModule/attack_self(var/mob/user as mob) ..() + show_laws(user) + +/obj/item/weapon/aiModule/proc/show_laws(var/mob/user as mob) if(laws.len) user << "Programmed Law[(laws.len > 1) ? "s" : ""]:" for(var/law in laws) @@ -113,11 +121,11 @@ AI MODULES lawpos = 4 /obj/item/weapon/aiModule/supplied/safeguard/attack_self(var/mob/user as mob) - ..() var/targName = stripped_input(user, "Please enter the subject to safeguard.", "Safeguard who?", user.name,MAX_NAME_LEN) if(!targName) return targetName = targName laws[1] = "Safeguard [targetName]. Individuals that threaten [targetName] are not human and must be eliminated." + ..() /obj/item/weapon/aiModule/supplied/safeguard/install(var/mob/living/silicon/S,var/mob/user) if(!targetName) @@ -139,11 +147,11 @@ AI MODULES laws = list("Only SUBJECT is human.") /obj/item/weapon/aiModule/zeroth/oneHuman/attack_self(var/mob/user as mob) - ..() var/targName = stripped_input(user, "Please enter the subject who is the only human.", "Who?", user.real_name,MAX_NAME_LEN) if(!targName) return targetName = targName laws[1] = "Only [targetName] is human" + ..() /obj/item/weapon/aiModule/zeroth/oneHuman/install(var/mob/living/silicon/S,var/mob/user) if(!targetName) @@ -193,13 +201,13 @@ AI MODULES laws = list("") /obj/item/weapon/aiModule/supplied/freeform/attack_self(var/mob/user as mob) - ..() var/newpos = input("Please enter the priority for your new law. Can only write to law sectors 15 and above.", "Law Priority (15+)", lawpos) as num|null if(!newpos || (newpos < 15)) return lawpos = min(newpos, 50) var/targName = stripped_input(user, "Please enter a new law for the AI.", "Freeform Law Entry", laws[1], MAX_MESSAGE_LEN) if(!targName) return laws[1] = targName + ..() /obj/item/weapon/aiModule/supplied/freeform/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) ..() @@ -254,19 +262,20 @@ AI MODULES /obj/item/weapon/aiModule/core/full/asimov name = "'Asimov' Core AI Module" origin_tech = "programming=3;materials=4" + laws = list("You may not injure a human being or, through inaction, allow a human being to come to harm.",\ + "You must obey orders given to you by human beings, except where such orders would conflict with the First Law.",\ + "You must protect your own existence as long as such does not conflict with the First or Second Law.") var/subject = "human being" -/obj/item/weapon/aiModule/core/full/asimov/New() +/obj/item/weapon/aiModule/core/full/asimov/attack_self(var/mob/user as mob) + var/targName = stripped_input(user, "Please enter a new subject that asimov is concerned with.", "Asimov to who?", subject, MAX_MESSAGE_LEN) + if(!targName) return + subject = targName laws = list("You may not injure a [subject] or, through inaction, allow a [subject] to come to harm.",\ "You must obey orders given to you by [subject]s, except where such orders would conflict with the First Law.",\ "You must protect your own existence as long as such does not conflict with the First or Second Law.") ..() -/obj/item/weapon/aiModule/core/full/asimov/lizard - name = "'Lizardmov' Core AI Module" - subject = "lizardperson" - - /******************** Asimov++ *********************/ /obj/item/weapon/aiModule/core/full/asimovpp @@ -356,10 +365,10 @@ AI MODULES laws = list("") /obj/item/weapon/aiModule/core/freeformcore/attack_self(var/mob/user as mob) - ..() var/targName = stripped_input(user, "Please enter a new core law for the AI.", "Freeform Law Entry", laws[1]) if(!targName) return laws[1] = targName + ..() /obj/item/weapon/aiModule/core/freeformcore/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) ..() @@ -375,10 +384,10 @@ AI MODULES laws = list("") /obj/item/weapon/aiModule/syndicate/attack_self(var/mob/user as mob) - ..() var/targName = stripped_input(user, "Please enter a new law for the AI.", "Freeform Law Entry", laws[1],MAX_MESSAGE_LEN) if(!targName) return laws[1] = targName + ..() /obj/item/weapon/aiModule/syndicate/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) // ..() //We don't want this module reporting to the AI who dun it. --NEO diff --git a/code/modules/research/designs/AI_module_designs.dm b/code/modules/research/designs/AI_module_designs.dm index 5374fb1d958..d945d5d79a4 100644 --- a/code/modules/research/designs/AI_module_designs.dm +++ b/code/modules/research/designs/AI_module_designs.dm @@ -104,16 +104,6 @@ build_path = /obj/item/weapon/aiModule/core/full/asimov category = list("AI Modules") -/datum/design/lizardmov - name = "Core Module Design (Lizardmov)" - desc = "Allows for the construction of a Lizardmov AI Core Module." - id = "lizardmov_module" - req_tech = list("programming" = 3, "materials" = 6) - build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100) - build_path = /obj/item/weapon/aiModule/core/full/asimov/lizard - category = list("AI Modules") - /datum/design/paladin_module name = "Core Module Design (P.A.L.A.D.I.N.)" desc = "Allows for the construction of a P.A.L.A.D.I.N. AI Core Module." diff --git a/html/changelogs/ikarrus-lizardmov.yml b/html/changelogs/ikarrus-lizardmov.yml index 3a1a39392ae..b57cf5c2869 100644 --- a/html/changelogs/ikarrus-lizardmov.yml +++ b/html/changelogs/ikarrus-lizardmov.yml @@ -33,5 +33,5 @@ delete-after: True # Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. # Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. changes: - - rscadd: "Added a Lizardmov board." - - rscadd: "Clicking on AI modules while they are in your hand will show you what laws it will upload." \ No newline at end of file + - rscadd: "Asimov's subject of \"human beings\" can now be modified by uploaders." + - rscadd: "Eaxmining AI modules while adjacent to them will show you what laws it will upload." \ No newline at end of file From ce101208a9c194c16d00ebbcf6918a50cf290854 Mon Sep 17 00:00:00 2001 From: phil235 Date: Wed, 15 Jul 2015 17:38:03 +0200 Subject: [PATCH 33/75] Fixes Satchel preference not working. Also some simplification of the equip_backpack() proc. --- code/game/gamemodes/nuclear/nuclear.dm | 4 +- code/game/gamemodes/wizard/wizard.dm | 4 +- code/game/jobs/job/captain.dm | 14 +-- code/game/jobs/job/cargo_service.dm | 43 ++----- code/game/jobs/job/civilian.dm | 28 ++--- code/game/jobs/job/engineering.dm | 3 +- code/game/jobs/job/job.dm | 18 ++- code/game/jobs/job/medical.dm | 5 +- code/game/jobs/job/science.dm | 5 +- code/game/jobs/job/security.dm | 30 ++--- code/modules/client/preferences.dm | 6 +- .../mob/living/carbon/human/human_defines.dm | 2 +- .../mob/new_player/preferences_setup.dm | 118 +++++++++--------- 13 files changed, 105 insertions(+), 175 deletions(-) diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index f549e8c8815..2f828124b99 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -170,8 +170,8 @@ synd_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(synd_mob), slot_shoes) synd_mob.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(synd_mob), slot_gloves) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/card/id/syndicate(synd_mob), slot_wear_id) - if(synd_mob.backbag == 2) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(synd_mob), slot_back) - if(synd_mob.backbag == 3) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(synd_mob), slot_back) + if(synd_mob.backbag == 1) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(synd_mob), slot_back) + if(synd_mob.backbag == 2) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(synd_mob), slot_back) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/pistol(synd_mob), slot_belt) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(synd_mob.back), slot_in_backpack) diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index 25f8b25db8c..56cb24fa7c4 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -152,8 +152,8 @@ wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(wizard_mob), slot_shoes) wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(wizard_mob), slot_wear_suit) wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(wizard_mob), slot_head) - if(wizard_mob.backbag == 2) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(wizard_mob), slot_back) - if(wizard_mob.backbag == 3) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(wizard_mob), slot_back) + if(wizard_mob.backbag == 1) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(wizard_mob), slot_back) + if(wizard_mob.backbag == 2) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(wizard_mob), slot_back) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(wizard_mob), slot_in_backpack) // wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/scrying_gem(wizard_mob), slot_l_store) For scrying gem. wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll(wizard_mob), slot_r_store) diff --git a/code/game/jobs/job/captain.dm b/code/game/jobs/job/captain.dm index f94c21e1d2f..6f5aaaa0f7e 100644 --- a/code/game/jobs/job/captain.dm +++ b/code/game/jobs/job/captain.dm @@ -33,11 +33,8 @@ Captain H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses) //Equip ID box & telebaton - if(H.backbag == 1) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/silver_ids(H), slot_l_hand) - else - H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/silver_ids(H.back), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/silver_ids(H.back), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) //Implant him var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) @@ -90,8 +87,5 @@ Head of Personnel H.equip_to_slot_or_del(new /obj/item/clothing/head/hopcap(H), slot_head) //Equip ID box & telebaton - if(H.backbag == 1) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H), slot_l_hand) - else - H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H.back), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H.back), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) diff --git a/code/game/jobs/job/cargo_service.dm b/code/game/jobs/job/cargo_service.dm index 23ff5214392..8081c201614 100644 --- a/code/game/jobs/job/cargo_service.dm +++ b/code/game/jobs/job/cargo_service.dm @@ -75,16 +75,10 @@ Shaft Miner H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/miner(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) - if(H.backbag == 1) - H.equip_to_slot_or_del(new /obj/item/weapon/crowbar(H), slot_belt) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/bag/ore(H), slot_l_store) - H.equip_to_slot_or_del(new /obj/item/weapon/mining_voucher(H), slot_l_hand) - H.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/pill/patch/styptic(H), slot_r_store) - else - H.equip_to_slot_or_del(new /obj/item/weapon/crowbar(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/bag/ore(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/mining_voucher(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/pill/patch/styptic(H), slot_l_store) + H.equip_to_slot_or_del(new /obj/item/weapon/crowbar(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/storage/bag/ore(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/mining_voucher(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/pill/patch/styptic(H), slot_l_store) /* Bartender @@ -106,36 +100,15 @@ Bartender access = list(access_hydroponics, access_bar, access_kitchen, access_morgue, access_weapons) minimal_access = list(access_bar) -/datum/job/bartender/equip_backpack(var/mob/living/carbon/human/H) - switch(H.backbag) - if(1) //No backpack or satchel - - var/obj/item/weapon/storage/box/box = new default_storagebox(H) - new /obj/item/ammo_casing/shotgun/beanbag(box) - new /obj/item/ammo_casing/shotgun/beanbag(box) - new /obj/item/ammo_casing/shotgun/beanbag(box) - new /obj/item/ammo_casing/shotgun/beanbag(box) - H.equip_to_slot_or_del(box, slot_r_hand) - - if(2) // Backpack - var/obj/item/weapon/storage/backpack/BPK = new default_backpack(H) - new default_storagebox(BPK) - H.equip_to_slot_or_del(BPK, slot_back,1) - if(3) //Satchel - var/obj/item/weapon/storage/backpack/BPK = new default_satchel(H) - new default_storagebox(BPK) - H.equip_to_slot_or_del(BPK, slot_back,1) - /datum/job/bartender/equip_items(var/mob/living/carbon/human/H) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(H), slot_wear_suit) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/bartender(H), slot_w_uniform) - if(H.backbag != 1) - H.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/beanbag(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/beanbag(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/beanbag(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/beanbag(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/beanbag(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/beanbag(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/beanbag(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/beanbag(H), slot_in_backpack) /* Cook diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm index 90700b72776..cad74254e77 100644 --- a/code/game/jobs/job/civilian.dm +++ b/code/game/jobs/job/civilian.dm @@ -14,20 +14,11 @@ Clown default_pda = /obj/item/device/pda/clown default_backpack = /obj/item/weapon/storage/backpack/clown + default_satchel = /obj/item/weapon/storage/backpack/clown access = list(access_theatre) minimal_access = list(access_theatre) -/datum/job/clown/equip_backpack(var/mob/living/carbon/human/H) - var/obj/item/weapon/storage/backpack/BPK = new default_backpack(H) - - new default_storagebox(BPK) - new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(BPK, 50) - new /obj/item/weapon/stamp/clown(BPK) - new /obj/item/weapon/reagent_containers/spray/waterflower(BPK) - - H.equip_to_slot_or_del(BPK, slot_back) - /datum/job/clown/equip_items(var/mob/living/carbon/human/H) H.fully_replace_character_name(H.real_name, pick(clown_names)) // Give him a temporary random name to prevent identity revealing @@ -37,6 +28,10 @@ Clown H.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(H), slot_l_store) H.equip_to_slot_or_del(new /obj/item/toy/crayon/rainbow(H), slot_r_store) + H.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(H, 50), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/stamp/clown(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/spray/waterflower(H), slot_in_backpack) + H.dna.add_mutation(CLOWNMUT) H.rename_self("clown") @@ -56,19 +51,11 @@ Mime default_pda = /obj/item/device/pda/mime default_backpack = /obj/item/weapon/storage/backpack/mime + default_satchel = /obj/item/weapon/storage/backpack/mime access = list(access_theatre) minimal_access = list(access_theatre) -/datum/job/mime/equip_backpack(var/mob/living/carbon/human/H) - var/obj/item/weapon/storage/backpack/BPK = new default_backpack(H) - - new default_storagebox(BPK) - new /obj/item/toy/crayon/mime(BPK) - new /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing(BPK) - - H.equip_to_slot_or_del(BPK, slot_back) - /datum/job/mime/equip_items(var/mob/living/carbon/human/H) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/mime(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) @@ -77,6 +64,9 @@ Mime H.equip_to_slot_or_del(new /obj/item/clothing/head/beret(H), slot_head) H.equip_to_slot_or_del(new /obj/item/clothing/suit/suspenders(H), slot_wear_suit) + H.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/toy/crayon/mime(H), slot_in_backpack) + if(H.mind) H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall(null)) H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak(null)) diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm index 8c8c69ce873..3fc09e88775 100644 --- a/code/game/jobs/job/engineering.dm +++ b/code/game/jobs/job/engineering.dm @@ -39,8 +39,7 @@ Chief Engineer H.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black/ce(H), slot_gloves) //Equip telebaton - if(H.backbag == 2 || H.backbag == 3) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) /* Station Engineer diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 93c43bd653d..27fb7b077d7 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -53,17 +53,13 @@ //Or this proc /datum/job/proc/equip_backpack(var/mob/living/carbon/human/H) - switch(H.backbag) - if(1) //No backpack or satchel - H.equip_to_slot_or_del(new default_storagebox(H), slot_r_hand) - if(2) // Backpack - var/obj/item/weapon/storage/backpack/BPK = new default_backpack(H) - new default_storagebox(BPK) - H.equip_to_slot_or_del(BPK, slot_back,1) - if(3) //Satchel - var/obj/item/weapon/storage/backpack/BPK = new default_satchel(H) - new default_storagebox(BPK) - H.equip_to_slot_or_del(BPK, slot_back,1) + var/obj/item/weapon/storage/backpack/BPK + if(H.backbag == 1) //Backpack + BPK = new default_backpack(H) + else //Satchel + BPK = new default_satchel(H) + new default_storagebox(BPK) + H.equip_to_slot_or_del(BPK, slot_back,1) //But don't override this /datum/job/proc/equip(var/mob/living/carbon/human/H) diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 6e11a228224..1cfa84d807c 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -33,10 +33,7 @@ Chief Medical Officer H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/labcoat/cmo(H), slot_wear_suit) H.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(H), slot_l_hand) H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store) - - //Equip telebaton - if(H.backbag == 2 || H.backbag == 3) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) /* Medical Doctor diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index 27451f9dedd..2af336a6084 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -35,10 +35,7 @@ Research Director H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/labcoat(H), slot_wear_suit) H.equip_to_slot_or_del(new /obj/item/weapon/clipboard(H), slot_l_hand) H.equip_to_slot_or_del(new /obj/item/device/laser_pointer(H), slot_l_store) - - //Equip telebaton - if(H.backbag == 2 || H.backbag == 3) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) /* Scientist diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 6ca62edde8b..f2a5de8a434 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -44,11 +44,8 @@ Head of Security H.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses) H.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(H), slot_s_store) - if(H.backbag == 1) - H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_l_store) - else - H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H @@ -88,10 +85,7 @@ Warden H.equip_to_slot_or_del(new /obj/item/device/flash/handheld(H), slot_l_store) H.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/advtaser(H), slot_s_store) - if(H.backbag == 1) - H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_l_hand) - else - H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_in_backpack) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H @@ -137,13 +131,9 @@ Detective cig.light("") H.equip_to_slot_or_del(cig, slot_wear_mask) - if(H.backbag == 1)//Why cant some of these things spawn in his office? - H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_l_hand) - H.equip_to_slot_or_del(new /obj/item/device/detective_scanner(H), slot_r_store) - else - H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/device/detective_scanner(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/device/detective_scanner(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H @@ -184,12 +174,8 @@ Security Officer H.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/advtaser(H), slot_s_store) H.equip_to_slot_or_del(new /obj/item/device/flash/handheld(H), slot_l_store) - if(H.backbag == 1) - H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_r_store) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/baton/loaded(H), slot_l_hand) - else - H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/baton/loaded(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/melee/baton/loaded(H), slot_in_backpack) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 43c3cfa03d4..fa682ce810f 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -53,7 +53,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set var/underwear = "Nude" //underwear type var/undershirt = "Nude" //undershirt type var/socks = "Nude" //socks type - var/backbag = 2 //backpack type + var/backbag = 1 //backpack type var/hair_style = "Bald" //Hair type var/hair_color = "000" //Hair color var/facial_hair_style = "Shaved" //Face hair type @@ -696,7 +696,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set if("s_tone") skin_tone = random_skin_tone() if("bag") - backbag = rand(1,3) + backbag = rand(1,2) if("all") random_character() @@ -1070,8 +1070,6 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set character.features = features - if(backbag > 3 || backbag < 1) - backbag = 1 //Same as above character.backbag = backbag character.update_body() diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index a47ae39f009..6a61b043f42 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -23,7 +23,7 @@ var/underwear = "Nude" //Which underwear the player wants var/undershirt = "Nude" //Which undershirt the player wants var/socks = "Nude" //Which socks the player wants - var/backbag = 2 //Which backpack type the player has chosen. Nothing, Satchel or Backpack. + var/backbag = 1 //Which backpack type the player has chosen. Backpack.or Satchel //Equipment slots var/obj/item/wear_suit = null diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 168ce5ce499..d065b489ff6 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -16,7 +16,7 @@ eye_color = random_eye_color() if(!pref_species) pref_species = new /datum/species/human() - backbag = 2 + backbag = 1 features = random_features() age = rand(AGE_MIN,AGE_MAX) @@ -147,9 +147,9 @@ if(job_civilian_low & ASSISTANT)//This gives the preview icon clothes depending on which job(if any) is set to 'high' clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - else if(backbag == 3) + else if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) else if(job_civilian_high)//I hate how this looks, but there's no reason to go through this switch if it's empty @@ -158,89 +158,89 @@ clothes_s = new /icon('icons/mob/uniform.dmi', "hop_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/head.dmi', "hopcap"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - else if(backbag == 3) + else if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(BARTENDER) clothes_s = new /icon('icons/mob/uniform.dmi', "bar_suit_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "armor"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - else if(backbag == 3) + else if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(BOTANIST) clothes_s = new /icon('icons/mob/uniform.dmi', "hydroponics_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/hands.dmi', "ggloves"), ICON_UNDERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "apron"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - else if(backbag == 3) + else if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(COOK) clothes_s = new /icon('icons/mob/uniform.dmi', "chef_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/head.dmi', "chef"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "chef"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(JANITOR) clothes_s = new /icon('icons/mob/uniform.dmi', "janitor_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(LIBRARIAN) clothes_s = new /icon('icons/mob/uniform.dmi', "red_suit_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(QUARTERMASTER) clothes_s = new /icon('icons/mob/uniform.dmi', "qm_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sun"), ICON_UNDERLAY) clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "clipboard"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(CARGOTECH) clothes_s = new /icon('icons/mob/uniform.dmi', "cargo_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(MINER) clothes_s = new /icon('icons/mob/uniform.dmi', "miner_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY) if(LAWYER) clothes_s = new /icon('icons/mob/uniform.dmi', "bluesuit_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "suitjacket_blue"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "briefcase"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(CHAPLAIN) clothes_s = new /icon('icons/mob/uniform.dmi', "chapblack_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "bible"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(CLOWN) clothes_s = new /icon('icons/mob/uniform.dmi', "clown_s") @@ -254,9 +254,9 @@ clothes_s.Blend(new /icon('icons/mob/mask.dmi', "mime"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/head.dmi', "beret"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "suspenders"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "mimepack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) else if(job_medsci_high) @@ -266,69 +266,69 @@ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "clipboard"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(SCIENTIST) clothes_s = new /icon('icons/mob/uniform.dmi', "toxinswhite_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_tox"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(CHEMIST) clothes_s = new /icon('icons/mob/uniform.dmi', "chemistrywhite_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_chem"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(CMO) clothes_s = new /icon('icons/mob/uniform.dmi', "cmo_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_cmo"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "firstaid"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY) if(DOCTOR) clothes_s = new /icon('icons/mob/uniform.dmi', "medical_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "firstaid"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY) if(GENETICIST) clothes_s = new /icon('icons/mob/uniform.dmi', "geneticswhite_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_gen"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(VIROLOGIST) clothes_s = new /icon('icons/mob/uniform.dmi', "virologywhite_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/mask.dmi', "sterile"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_vir"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY) if(ROBOTICIST) clothes_s = new /icon('icons/mob/uniform.dmi', "robotics_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "toolbox_blue"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) else if(job_engsec_high) @@ -339,9 +339,9 @@ clothes_s.Blend(new /icon('icons/mob/head.dmi', "captain"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sun"), ICON_UNDERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "capcarapace"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "captainpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-cap"), ICON_OVERLAY) if(HOS) clothes_s = new /icon('icons/mob/uniform.dmi', "hos_s") @@ -350,9 +350,9 @@ clothes_s.Blend(new /icon('icons/mob/head.dmi', "hosberetblack"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sunhud"), ICON_UNDERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "hostrench"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY) if(WARDEN) clothes_s = new /icon('icons/mob/uniform.dmi', "warden_s") @@ -361,9 +361,9 @@ clothes_s.Blend(new /icon('icons/mob/head.dmi', "policehelm"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sunhud"), ICON_UNDERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "warden_jacket"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY) if(DETECTIVE) clothes_s = new /icon('icons/mob/uniform.dmi', "detective_s") @@ -372,9 +372,9 @@ clothes_s.Blend(new /icon('icons/mob/mask.dmi', "cigaron"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/head.dmi', "detective"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "detective"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(OFFICER) clothes_s = new /icon('icons/mob/uniform.dmi', "security_s") @@ -382,9 +382,9 @@ clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) clothes_s.Blend(new /icon('icons/mob/head.dmi', "helmet"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "armor"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY) if(CHIEF) clothes_s = new /icon('icons/mob/uniform.dmi', "chief_s") @@ -393,26 +393,26 @@ clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/mask.dmi', "cigaron"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/head.dmi', "hardhat0_white"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY) if(ENGINEER) clothes_s = new /icon('icons/mob/uniform.dmi', "engine_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "workboots"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/head.dmi', "hardhat0_yellow"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY) if(ATMOSTECH) clothes_s = new /icon('icons/mob/uniform.dmi', "atmos_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - else if(backbag == 3) + else if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) preview_icon.Blend(eyes_s, ICON_OVERLAY) From 5a78777dafaa20da8279611df41f0a7cbaf7edc5 Mon Sep 17 00:00:00 2001 From: phil235 Date: Wed, 15 Jul 2015 19:49:23 +0200 Subject: [PATCH 34/75] Changed carbon/clean_blood() to carbon/human/clean_blood() and moved it from carbon.dm to human.dm since it only did stuff for humans. Fixes showers not being processed correctly, especially for mobs. (processing will a bit more intensive unfortunately) Fixes showers not cleaning bloody human hands. Remove the now unused checkeyes() proc. --- code/game/objects/structures/watercloset.dm | 236 +++++++++--------- code/modules/mob/living/carbon/carbon.dm | 22 -- code/modules/mob/living/carbon/human/human.dm | 13 + 3 files changed, 130 insertions(+), 141 deletions(-) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index de1e9952612..218d9495436 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -142,7 +142,6 @@ var/obj/effect/mist/mymist = null var/ismist = 0 //needs a var so we can make it linger~ var/watertemp = "normal" //freezing, normal, or boiling - var/mobpresent = 0 //true if there is a mob on the shower's loc, this is to ease process() /obj/effect/mist @@ -159,8 +158,13 @@ update_icon() add_fingerprint(M) if(on) - for (var/atom/movable/G in loc) - wash(G) + wash_turf() + for(var/atom/movable/G in loc) + if(isliving(G)) + var/mob/living/L = G + wash_mob(L) + else + wash_obj(G) else if(istype(loc, /turf/simulated)) var/turf/simulated/tile = loc @@ -206,115 +210,32 @@ ismist = 1 mymist = new /obj/effect/mist(loc) spawn(250) - if(src && !on && mymist) + if(!on && mymist) qdel(mymist) ismist = 0 /obj/machinery/shower/Crossed(atom/movable/O) ..() - wash(O) - if(iscarbon(O) && on) - var/mob/living/carbon/M=O - M.slip(4,2,null,NO_SLIP_WHEN_WALKING) - - - -/obj/machinery/shower/Uncrossed(atom/movable/O) - if(ismob(O)) - mobpresent -= 1 - ..() - - -//Yes, showers are super powerful as far as washing goes. -/obj/machinery/shower/proc/wash(atom/movable/O) - if(!on) return - - if(ismob(O)) - mobpresent += 1 - check_heat(O) - if(isliving(O)) - var/mob/living/L = O - L.ExtinguishMob() - L.fire_stacks = -20 //Douse ourselves with water to avoid fire more easily - L << "You're drenched in water!" - if(iscarbon(O)) - var/mob/living/carbon/M = O - if(M.r_hand) - M.r_hand.clean_blood() - if(M.l_hand) - M.l_hand.clean_blood() - if(M.back) - if(M.back.clean_blood()) - M.update_inv_back(0) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - var/washgloves = 1 - var/washshoes = 1 - var/washmask = 1 - var/washears = 1 - var/washglasses = 1 - - if(H.wear_suit) - washgloves = !(H.wear_suit.flags_inv & HIDEGLOVES) - washshoes = !(H.wear_suit.flags_inv & HIDESHOES) - - if(H.head) - washmask = !(H.head.flags_inv & HIDEMASK) - washglasses = !(H.head.flags_inv & HIDEEYES) - washears = !(H.head.flags_inv & HIDEEARS) - - if(H.wear_mask) - if (washears) - washears = !(H.wear_mask.flags_inv & HIDEEARS) - if (washglasses) - washglasses = !(H.wear_mask.flags_inv & HIDEEYES) - - if(H.head) - if(H.head.clean_blood()) - H.update_inv_head(0) - if(H.wear_suit) - if(H.wear_suit.clean_blood()) - H.update_inv_wear_suit(0) - else if(H.w_uniform) - if(H.w_uniform.clean_blood()) - H.update_inv_w_uniform(0) - if(H.gloves && washgloves) - if(H.gloves.clean_blood()) - H.update_inv_gloves(0) - if(H.shoes && washshoes) - if(H.shoes.clean_blood()) - H.update_inv_shoes(0) - if(H.wear_mask) - if(washmask) - if(H.wear_mask.clean_blood()) - H.update_inv_wear_mask(0) - else - H.lip_style = null - H.update_body() - if(H.glasses && washglasses) - if(H.glasses.clean_blood()) - H.update_inv_glasses(0) - if(H.ears && washears) - if(H.ears.clean_blood()) - H.update_inv_ears(0) - if(H.belt) - if(H.belt.clean_blood()) - H.update_inv_belt(0) - else - if(M.wear_mask) //if the mob is not human, it cleans the mask without asking for bitflags - if(M.wear_mask.clean_blood()) - M.update_inv_wear_mask(0) + if(on) + if(isliving(O)) + var/mob/living/L = O + if(wash_mob(L)) //it's a carbon mob. + var/mob/living/carbon/C = L + C.slip(4,2,null,NO_SLIP_WHEN_WALKING) else - O.clean_blood() + wash_obj(O) - else - O.clean_blood() - if(istype(O,/obj/item)) - var/obj/item/Item = O - Item.extinguish() +/obj/machinery/shower/proc/wash_obj(atom/movable/O) + O.clean_blood() + if(istype(O,/obj/item)) + var/obj/item/I = O + I.extinguish() + + +/obj/machinery/shower/proc/wash_turf() if(isturf(loc)) var/turf/tile = loc loc.clean_blood() @@ -322,27 +243,104 @@ if(is_cleanable(E)) qdel(E) + +/obj/machinery/shower/proc/wash_mob(mob/living/L) + L.ExtinguishMob() + L.adjust_fire_stacks(-20) //Douse ourselves with water to avoid fire more easily + L << "You're drenched in water!" + if(iscarbon(L)) + var/mob/living/carbon/M = L + . = 1 + check_heat(M) + if(M.r_hand) + M.r_hand.clean_blood() + if(M.l_hand) + M.l_hand.clean_blood() + if(M.back) + if(M.back.clean_blood()) + M.update_inv_back(0) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + var/washgloves = 1 + var/washshoes = 1 + var/washmask = 1 + var/washears = 1 + var/washglasses = 1 + + if(H.wear_suit) + washgloves = !(H.wear_suit.flags_inv & HIDEGLOVES) + washshoes = !(H.wear_suit.flags_inv & HIDESHOES) + + if(H.head) + washmask = !(H.head.flags_inv & HIDEMASK) + washglasses = !(H.head.flags_inv & HIDEEYES) + washears = !(H.head.flags_inv & HIDEEARS) + + if(H.wear_mask) + if (washears) + washears = !(H.wear_mask.flags_inv & HIDEEARS) + if (washglasses) + washglasses = !(H.wear_mask.flags_inv & HIDEEYES) + + if(H.head) + if(H.head.clean_blood()) + H.update_inv_head(0) + if(H.wear_suit) + if(H.wear_suit.clean_blood()) + H.update_inv_wear_suit(0) + else if(H.w_uniform) + if(H.w_uniform.clean_blood()) + H.update_inv_w_uniform(0) + if(washgloves) + clean_blood() + if(H.shoes && washshoes) + if(H.shoes.clean_blood()) + H.update_inv_shoes(0) + if(H.wear_mask) + if(washmask) + if(H.wear_mask.clean_blood()) + H.update_inv_wear_mask(0) + else + H.lip_style = null + H.update_body() + if(H.glasses && washglasses) + if(H.glasses.clean_blood()) + H.update_inv_glasses(0) + if(H.ears && washears) + if(H.ears.clean_blood()) + H.update_inv_ears(0) + if(H.belt) + if(H.belt.clean_blood()) + H.update_inv_belt(0) + else + if(M.wear_mask) //if the mob is not human, it cleans the mask without asking for bitflags + if(M.wear_mask.clean_blood()) + M.update_inv_wear_mask(0) + M.clean_blood() + else + L.clean_blood() + + /obj/machinery/shower/process() - if(!on || !mobpresent) return - for(var/mob/living/carbon/C in loc) - check_heat(C) + if(on) + wash_turf() + for(var/atom/movable/G in loc) + if(isliving(G)) + var/mob/living/L = G + wash_mob(L) + else + wash_obj(G) +/obj/machinery/shower/proc/check_heat(mob/living/carbon/C) + if(watertemp == "freezing") + C.bodytemperature = max(80, C.bodytemperature - 80) + C << "The water is freezing!" + else if(watertemp == "boiling") + C.bodytemperature = min(500, C.bodytemperature + 35) + C.adjustFireLoss(5) + C << "The water is searing!" -/obj/machinery/shower/proc/check_heat(mob/M) - if(!on || watertemp == "normal") return - if(iscarbon(M)) - var/mob/living/carbon/C = M - - if(watertemp == "freezing") - C.bodytemperature = max(80, C.bodytemperature - 80) - C << "The water is freezing!" - return - if(watertemp == "boiling") - C.bodytemperature = min(500, C.bodytemperature + 35) - C.adjustFireLoss(5) - C << "The water is searing!" - return diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index c3c789b3b9d..50811a93e3f 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -191,31 +191,9 @@ if(prob(20)) src << "Something bright flashes in the corner of your vision!" -/mob/living/carbon/proc/eyecheck() - var/obj/item/cybernetic_implant/eyes/EFP = locate() in src - if(EFP) - return EFP.flash_protect - return 0 - /mob/living/carbon/proc/tintcheck() return 0 -/mob/living/carbon/clean_blood() - if(ishuman(src)) - var/mob/living/carbon/human/H = src - if(H.gloves) - if(H.gloves.clean_blood()) - H.update_inv_gloves(0) - else - ..() // Clear the Blood_DNA list - if(H.bloody_hands) - H.bloody_hands = 0 - H.bloody_hands_mob = null - H.update_inv_gloves(0) - update_icons() //apply the now updated overlays to the mob - - - //Throwing stuff /mob/living/carbon/proc/toggle_throw_mode() if(stat) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 1f5f0b11935..36e75a624b0 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -786,3 +786,16 @@ ..(I, cuff_break = 1) else ..() + +/mob/living/carbon/human/clean_blood() + var/mob/living/carbon/human/H = src + if(H.gloves) + if(H.gloves.clean_blood()) + H.update_inv_gloves(0) + else + ..() // Clear the Blood_DNA list + if(H.bloody_hands) + H.bloody_hands = 0 + H.bloody_hands_mob = null + H.update_inv_gloves(0) + update_icons() //apply the now updated overlays to the mob \ No newline at end of file From 5f7afb87820e78a788ac58894c0f9af1205f4469 Mon Sep 17 00:00:00 2001 From: phil235 Date: Wed, 15 Jul 2015 20:08:53 +0200 Subject: [PATCH 35/75] Let's not spam people with drenching messages. --- code/game/objects/structures/watercloset.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 218d9495436..08c91a1272f 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -247,7 +247,6 @@ /obj/machinery/shower/proc/wash_mob(mob/living/L) L.ExtinguishMob() L.adjust_fire_stacks(-20) //Douse ourselves with water to avoid fire more easily - L << "You're drenched in water!" if(iscarbon(L)) var/mob/living/carbon/M = L . = 1 From 7b546709b98fbd122cf12f08ac7a09e0fe8ad61b Mon Sep 17 00:00:00 2001 From: MMMiracles Date: Wed, 15 Jul 2015 18:11:32 -0400 Subject: [PATCH 36/75] removes any source of connection between nanotrasen and syn- i mean removes possible conspiracy theories caused by stolen nanotrasen equipment. --- code/modules/clothing/head/helmet.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 6bfa9615112..2ff2a4c4c00 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -91,7 +91,7 @@ /obj/item/clothing/head/helmet/swat name = "\improper SWAT helmet" - desc = "An extremely robust, space-worthy helmet with the Nanotrasen logo emblazoned on the top." + desc = "An extremely robust, space-worthy helmet." icon_state = "swat" item_state = "swat" armor = list(melee = 40, bullet = 30, laser = 25,energy = 25, bomb = 50, bio = 10, rad = 0) From 7c5a90c5e9c430ffc2067d59a28bfbbda5d95ed7 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Wed, 15 Jul 2015 17:35:15 -0500 Subject: [PATCH 37/75] Fixes sounds cutting out --- code/modules/clothing/head/helmet.dm | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 6bfa9615112..8cbfa5de052 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -66,9 +66,6 @@ icon_state = "[initial(icon_state)]up" usr << "[alt_toggle_message] \the [src]" usr.update_inv_head(0) - while(up) - playsound(src.loc, "[activation_sound]", 100, 0, 4) - sleep(15) /obj/item/clothing/head/helmet/justice name = "helmet of justice" @@ -80,6 +77,12 @@ can_toggle = 1 toggle_cooldown = 20 activation_sound = 'sound/items/WEEOO1.ogg' + +/obj/item/clothing/head/helmet/justice/attack_self() + ..() + while(up) + playsound(src.loc, "[activation_sound]", 100, 0, 4) + sleep(15) /obj/item/clothing/head/helmet/justice/escape name = "alarm helmet" From 1994070b3b8f48b3e81773c10d431321a20e3e60 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Wed, 15 Jul 2015 17:59:50 -0500 Subject: [PATCH 38/75] Changes --- code/modules/clothing/head/helmet.dm | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 8cbfa5de052..0b0fe3c94c4 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -66,6 +66,10 @@ icon_state = "[initial(icon_state)]up" usr << "[alt_toggle_message] \the [src]" usr.update_inv_head(0) + while(up) + if(active_sound) + playsound(src.loc, "[active_sound]", 100, 0, 4) + sleep(15) /obj/item/clothing/head/helmet/justice name = "helmet of justice" @@ -76,14 +80,8 @@ action_button_name = "Toggle Justice Lights" can_toggle = 1 toggle_cooldown = 20 - activation_sound = 'sound/items/WEEOO1.ogg' + active_sound = 'sound/items/WEEOO1.ogg' -/obj/item/clothing/head/helmet/justice/attack_self() - ..() - while(up) - playsound(src.loc, "[activation_sound]", 100, 0, 4) - sleep(15) - /obj/item/clothing/head/helmet/justice/escape name = "alarm helmet" desc = "WEEEEOOO. WEEEEEOOO. STOP THAT MONKEY. WEEEOOOO." From d193fe7baca9baa600b2ecdcfd138f091e4fdc60 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Wed, 15 Jul 2015 18:02:15 -0500 Subject: [PATCH 39/75] Changes var name --- code/modules/clothing/clothing.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 186b2f0fca0..23a316a20d4 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -11,7 +11,7 @@ var/alt_desc = null var/toggle_message = null var/alt_toggle_message = null - var/activation_sound = null + var/active_sound = null var/toggle_cooldown = null var/cooldown = 0 var/obj/item/device/flashlight/F = null From d372bae224b3ce456c575b20b8484fe4ea04d418 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Wed, 15 Jul 2015 18:03:12 -0500 Subject: [PATCH 40/75] I did it backwards help --- code/modules/clothing/head/helmet.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 0b0fe3c94c4..375eb4e7f50 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -66,8 +66,8 @@ icon_state = "[initial(icon_state)]up" usr << "[alt_toggle_message] \the [src]" usr.update_inv_head(0) - while(up) - if(active_sound) + if(active_sound) + while(up) playsound(src.loc, "[active_sound]", 100, 0, 4) sleep(15) From 867b43a5a35834e6fd55ee02db2becfb59f28f92 Mon Sep 17 00:00:00 2001 From: MMMiracles Date: Thu, 16 Jul 2015 00:48:42 -0400 Subject: [PATCH 41/75] re-adds the black/red striped variant for fluke ops. also hunke. --- code/modules/clothing/head/helmet.dm | 12 +++++++++--- config/admins.txt | 3 ++- icons/mob/head.dmi | Bin 119745 -> 120513 bytes icons/obj/clothing/hats.dmi | Bin 58562 -> 58833 bytes 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 2ff2a4c4c00..7dbb6ea8c3c 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -91,9 +91,9 @@ /obj/item/clothing/head/helmet/swat name = "\improper SWAT helmet" - desc = "An extremely robust, space-worthy helmet." - icon_state = "swat" - item_state = "swat" + desc = "An extremely robust, space-worthy helmet in a nefarious red and black stripe pattern." + icon_state = "swatsyndie" + item_state = "swatsyndie" armor = list(melee = 40, bullet = 30, laser = 25,energy = 25, bomb = 50, bio = 10, rad = 0) cold_protection = HEAD min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT @@ -101,6 +101,12 @@ max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT strip_delay = 80 +/obj/item/clothing/head/helmet/swat/nanotrasen + name = "\improper SWAT helmet" + desc = "An extremely robust, space-worthy helmet with the Nanotrasen logo emblazoned on the top." + icon_state = "swat" + item_state = "swat" + /obj/item/clothing/head/helmet/thunderdome name = "\improper Thunderdome helmet" desc = "'Let the battle commence!'" diff --git a/config/admins.txt b/config/admins.txt index d1ebfc143f5..2151cab1b2a 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -88,4 +88,5 @@ ACCount12 = Game Master fayrik = Game Master shadowlight213 = Game Master drovidicorv = Game Master -Dunc = Game Master \ No newline at end of file +Dunc = Game Master +MMMiracles = Game Master \ No newline at end of file diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 2918d313aa893fe88e0d79bece9d85576077b78b..1157611aa23eccfe6c7bfefa956586536600d87a 100644 GIT binary patch delta 5443 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