diff --git a/code/ZAS/Airflow.dm b/code/ZAS/Airflow.dm
index 9f555235c64..0b153c75809 100644
--- a/code/ZAS/Airflow.dm
+++ b/code/ZAS/Airflow.dm
@@ -8,11 +8,13 @@ mob/proc/airflow_stun()
if(stat == 2)
return 0
if(last_airflow_stun > world.time - vsc.airflow_stun_cooldown) return 0
+
if(!(status_flags & CANSTUN) && !(status_flags & CANWEAKEN))
- src << "\blue You stay upright as the air rushes past you."
+ src << "You stay upright as the air rushes past you."
return 0
- if(weakened <= 0) src << "\red The sudden rush of air knocks you over!"
- weakened = max(weakened,5)
+ if(!lying)
+ src << "The sudden rush of air knocks you over!"
+ Weaken(5)
last_airflow_stun = world.time
mob/living/silicon/airflow_stun()
@@ -22,16 +24,9 @@ mob/living/carbon/metroid/airflow_stun()
return
mob/living/carbon/human/airflow_stun()
- if(last_airflow_stun > world.time - vsc.airflow_stun_cooldown) return 0
- if(buckled) return 0
if(shoes)
if(shoes.flags & NOSLIP) return 0
- if(!(status_flags & CANSTUN) && !(status_flags & CANWEAKEN))
- src << "\blue You stay upright as the air rushes past you."
- return 0
- if(weakened <= 0) src << "\red The sudden rush of air knocks you over!"
- weakened = max(weakened,rand(1,5))
- last_airflow_stun = world.time
+ ..()
atom/movable/proc/check_airflow_movable(n)
@@ -84,10 +79,8 @@ obj/item/check_airflow_movable(n)
if(istype(src, /mob/living/carbon/human))
if(src:buckled)
return
- if(src:shoes)
- if(istype(src:shoes, /obj/item/clothing/shoes/magboots))
- if(src:shoes.flags & NOSLIP)
- return
+ if(src:shoes && src:shoes.flags & NOSLIP)
+ return
src << "\red You are sucked away by airflow!"
var/airflow_falloff = 9 - ul_FalloffAmount(airflow_dest) //It's a fast falloff calc. Very useful.
if(airflow_falloff < 1)
@@ -148,10 +141,8 @@ obj/item/check_airflow_movable(n)
if(istype(src, /mob/living/carbon/human))
if(src:buckled)
return
- if(src:shoes)
- if(istype(src:shoes, /obj/item/clothing/shoes/magboots))
- if(src:shoes.flags & NOSLIP)
- return
+ if(src:shoes && src:shoes.flags & NOSLIP)
+ return
src << "\red You are pushed away by airflow!"
last_airflow = world.time
var/airflow_falloff = 9 - ul_FalloffAmount(airflow_dest) //It's a fast falloff calc. Very useful.
@@ -207,9 +198,8 @@ mob/airflow_hit(atom/A)
for(var/mob/M in hearers(src))
M.show_message("\red \The [src] slams into \a [A]!",1,"\red You hear a loud slam!",2)
playsound(src.loc, "smash.ogg", 25, 1, -1)
- if(!(status_flags & CANSTUN) && !(status_flags & CANWEAKEN))
- return 0
- weakened = max(weakened, (istype(A,/obj/item) ? A:w_class : rand(1,5))) //Heheheh
+ var/weak_amt = istype(A,/obj/item) ? A:w_class : rand(1,5) //Heheheh
+ Weaken(weak_amt)
. = ..()
obj/airflow_hit(atom/A)
@@ -240,14 +230,11 @@ mob/living/carbon/human/airflow_hit(atom/A)
blocked = run_armor_check("groin","melee")
apply_damage(b_loss/3, BRUTE, "groin", blocked, 0, "Airflow")
- if(!(status_flags & CANSTUN) && !(status_flags & CANWEAKEN))
- return 0
-
if(airflow_speed > 10)
- paralysis += round(airflow_speed * vsc.airflow_stun)
- stunned = max(stunned,paralysis + 3)
+ Paralyse(round(airflow_speed * vsc.airflow_stun))
+ Stun(paralysis + 3)
else
- stunned += round(airflow_speed * vsc.airflow_stun/2)
+ Stun(round(airflow_speed * vsc.airflow_stun/2))
. = ..()
zone/proc/movables()
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 905d47d36b8..1d99edc4c80 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -466,7 +466,7 @@ datum/mind
if(!def_value)//If it's a custom objective, it will be an empty string.
def_value = "custom"
- var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "blood", "debrain", "protect", "prevent", "harm", "speciesist", "brig", "hijack", "escape", "survive", "steal", "download", "nuclear", "capture", "absorb", "destroy", "maroon", "identity theft", "custom")
+ var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "blood", "debrain", "protect", "prevent", "harm", "speciesist", "brig", "hijack", "escape", "survive", "steal", "download", "nuclear", "capture", "absorb", "escape_with_identity", "destroy", "maroon", "identity theft", "custom")
if (!new_obj_type) return
var/datum/objective/new_objective = null
diff --git a/code/game/gamemodes/blob/blob.dm b/code/game/gamemodes/blob/blob.dm
index bbfafa046f1..886ab3b5863 100644
--- a/code/game/gamemodes/blob/blob.dm
+++ b/code/game/gamemodes/blob/blob.dm
@@ -179,14 +179,13 @@ var/list/blob_nodes = list()
return
if (2)
- command_announcement.Announce("The biohazard has grown out of control and will soon reach critical mass. Activate the nuclear failsafe to maintain quarantine. The Nuclear Authentication Code is [get_nuke_code()] ", "Biohazard Alert", new_sound = 'sound/AI/blob_confirmed.ogg')
+ command_announcement.Announce("The biohazard has grown out of control and will soon reach critical mass. Activate the nuclear failsafe to maintain quarantine. The Nuclear Authentication Code is [get_nuke_code()] ", "Biohazard Alert", new_sound = 'sound/effects/siren.ogg')
set_security_level("gamma")
var/obj/machinery/door/airlock/vault/V = locate(/obj/machinery/door/airlock/vault) in world
if(V && (V.z in config.station_levels))
V.locked = 0
V.update_icon()
send_intercept(2)
- spawn(10) world << sound('sound/effects/siren.ogg')
return
return
diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm
index 9b3bf73845c..4ff968b7b64 100644
--- a/code/game/gamemodes/changeling/changeling.dm
+++ b/code/game/gamemodes/changeling/changeling.dm
@@ -122,9 +122,11 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
identity_theft.target = kill_objective.target
identity_theft.target_real_name = kill_objective.target.current.real_name //Whoops, forgot this.
if(identity_theft.target && identity_theft.target.current)
- identity_theft.explanation_text = "Escape on the shuttle or an escape pod with the identity of [identity_theft.target_real_name], the [identity_theft.target.assigned_role] while wearing their identification card."
- else
- identity_theft.explanation_text = "Free objective"
+ var/mob/living/carbon/human/H = identity_theft.target.current
+ if(H.species && H.species.flags && H.species.flags & NO_SCAN) // For species that can't be absorbed - should default to an escape objective instead
+ return
+ else
+ identity_theft.explanation_text = "Escape on the shuttle or an escape pod with the identity of [identity_theft.target_real_name], the [identity_theft.target.assigned_role] while wearing their identification card."
changeling.objectives += identity_theft
if (!(locate(/datum/objective/escape) in changeling.objectives))
diff --git a/code/game/gamemodes/malfunction/malfunction.dm b/code/game/gamemodes/malfunction/malfunction.dm
index 64656fb1a7e..4684d94410d 100644
--- a/code/game/gamemodes/malfunction/malfunction.dm
+++ b/code/game/gamemodes/malfunction/malfunction.dm
@@ -15,7 +15,7 @@
var/const/waittime_l = 600
var/const/waittime_h = 1800 // started at 1800
- var/AI_win_timeleft = 2000 //started at 2000, in case I change this for testing round end.
+ var/AI_win_timeleft = 1500 //started at 1500, in case I change this for testing round end.
var/malf_mode_declared = 0
var/station_captured = 0
var/to_nuke_or_not_to_nuke = 0
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index d79a7f8b6ae..4c1e4ac1bd9 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -733,7 +733,7 @@ datum/objective/absorb
n_p ++
else if (ticker.current_state == GAME_STATE_PLAYING)
for(var/mob/living/carbon/human/P in player_list)
- if((P.species.flags & IS_SYNTHETIC) || (P.species.flags & NO_SCAN))
+ if(P.species.flags & NO_SCAN)
continue
if(P.client && !(P.mind in ticker.mode.changelings) && P.mind!=owner)
n_p ++
diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm
index d4da0df2e54..7831bfc8f87 100644
--- a/code/game/machinery/computer/arcade.dm
+++ b/code/game/machinery/computer/arcade.dm
@@ -31,6 +31,8 @@
/obj/item/toy/carpplushie = 2,
/obj/item/toy/minimeteor = 2,
/obj/item/toy/redbutton = 2,
+ /obj/item/toy/owl = 2,
+ /obj/item/toy/griffin = 2,
/obj/item/clothing/head/blob = 2,
/obj/item/weapon/id_decal/gold = 2,
/obj/item/weapon/id_decal/silver = 2,
@@ -145,7 +147,7 @@
/obj/machinery/computer/arcade/battle/Topic(href, href_list)
if(..())
return 1
-
+
if(usr.machine != src)
return 0
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index ebf00444022..30122e4d4b7 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -20,6 +20,7 @@
var/heat_proof = 0 // For glass airlocks/opacity firedoors
var/emergency = 0
var/air_properties_vary_with_direction = 0
+ var/block_air_zones = 1 //If set, air zones cannot merge across the door even when it is opened.
//Multi-tile doors
dir = EAST
@@ -96,7 +97,7 @@
/obj/machinery/door/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
- if(air_group) return 0
+ if(air_group) return !block_air_zones
if(istype(mover) && mover.checkpass(PASSGLASS))
return !opacity
return !density
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index e0c1cc4588a..968f5b8575e 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -60,6 +60,10 @@
opacity = 0
density = 0
+ //These are frequenly used with windows, so make sure zones can pass.
+ //Generally if a firedoor is at a place where there should be a zone boundery then there will be a regular door underneath it.
+ block_air_zones = 0
+
var/blocked = 0
var/lockdown = 0 // When the door has detected a problem, it locks.
var/pdiff_alert = 0
@@ -106,7 +110,7 @@
/obj/machinery/door/firedoor/examine()
set src in view()
. = ..()
-
+
if(pdiff >= FIREDOOR_MAX_PRESSURE_DIFF)
usr << "WARNING: Current pressure differential is [pdiff]kPa! Opening door may result in injury!"
@@ -287,7 +291,7 @@
/obj/machinery/door/firedoor/attack_ai(mob/user as mob)
if(operating)
- return //Already doing something.
+ return //Already doing something.
if(blocked)
user << "\red \The [src] is welded solid!"
@@ -295,11 +299,11 @@
var/area/A = get_area_master(src)
ASSERT(istype(A)) // This worries me.
- var/alarmed = A.air_doors_activated || A.fire
+ var/alarmed = A.air_doors_activated || A.fire
var/access_granted = 0
if(isAI(user) || isrobot(user))
- access_granted = 1
+ access_granted = 1
if(access_granted == 1)
user.visible_message("\blue \The [src] [density ? "open" : "close"]s for \the [user].",\
@@ -320,7 +324,7 @@
spawn(50)
if(alarmed)
nextstate = CLOSED
-
+
// CHECK PRESSURE
/obj/machinery/door/firedoor/process()
..()
diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm
index 3ff3c66408d..8de93482907 100644
--- a/code/game/mecha/mech_bay.dm
+++ b/code/game/mecha/mech_bay.dm
@@ -37,7 +37,7 @@
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
component_parts += new /obj/item/stack/cable_coil(src, 1)
RefreshParts()
- recharging_turf = get_step(loc, dir)
+ locate_recharge_turf()
/obj/machinery/mech_bay_recharge_port/upgraded/New()
..()
@@ -51,6 +51,9 @@
component_parts += new /obj/item/stack/cable_coil(src, 1)
RefreshParts()
+/obj/machinery/mech_bay_recharge_port/proc/locate_recharge_turf()
+ recharging_turf = get_step(loc, dir)
+
/obj/machinery/mech_bay_recharge_port/RefreshParts()
var/MC
for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts)
@@ -81,7 +84,7 @@
return
if(default_change_direction_wrench(user, I))
- recharging_turf = get_step(loc, dir)
+ locate_recharge_turf()
return
if(exchange_parts(user, I))
diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm
index a5b6c4c8d6a..985b3bca9ba 100644
--- a/code/game/objects/effects/aliens.dm
+++ b/code/game/objects/effects/aliens.dm
@@ -207,6 +207,7 @@
/obj/structure/alien/weeds/attackby(obj/item/I, mob/user, params)
+ user.changeNext_move(CLICK_CD_MELEE)
if(I.attack_verb.len)
visible_message("[user] has [pick(I.attack_verb)] [src] with [I]!")
else
@@ -360,6 +361,7 @@
/obj/structure/alien/egg/attackby(obj/item/I, mob/user, params)
+ user.changeNext_move(CLICK_CD_MELEE)
if(I.attack_verb.len)
visible_message("[user] has [pick(I.attack_verb)] [src] with [I]!")
else
diff --git a/code/game/objects/effects/decals/posters/tgposters.dm b/code/game/objects/effects/decals/posters/tgposters.dm
index 2605bfaf20f..6fa936d4ca6 100644
--- a/code/game/objects/effects/decals/posters/tgposters.dm
+++ b/code/game/objects/effects/decals/posters/tgposters.dm
@@ -103,3 +103,13 @@
name = "Borg Fancy v2"
desc = "Borg Fancy, Now only taking the most fancy."
icon_state="poster21"
+
+/datum/poster/tg_22
+ name = "The Griffin"
+ desc = " The Griffin commands you to be the worst you can be. Will you?"
+ icon_state="poster22"
+
+/datum/poster/tg_23
+ name = "The Owl"
+ desc = " The Owl would do his best to protect the station. Will you?"
+ icon_state="poster23"
\ No newline at end of file
diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm
index e4924825b13..3d6ce2459ec 100644
--- a/code/game/objects/items/stacks/rods.dm
+++ b/code/game/objects/items/stacks/rods.dm
@@ -13,6 +13,16 @@
max_amount = 60
attack_verb = list("hit", "bludgeoned", "whacked")
+/obj/item/stack/rods/New(var/loc, var/amount=null)
+ update_icon()
+ return ..()
+
+/obj/item/stack/rods/update_icon()
+ if(get_amount() <= 5)
+ icon_state = "rods-[get_amount()]"
+ else
+ icon_state = "rods"
+
/obj/item/stack/rods/attackby(obj/item/W as obj, mob/user as mob, params)
..()
if (istype(W, /obj/item/weapon/weldingtool))
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index 45b483d602d..15aa4938875 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -169,6 +169,7 @@
if(usr)
usr.unEquip(src, 1)
qdel(src)
+ update_icon()
return 1
/obj/item/stack/proc/add_to_stacks(mob/usr as mob)
@@ -185,6 +186,7 @@
usr << "You add new [item.singular_name] to the stack. It now contains [item.amount] [item.singular_name]\s."
if(!oldsrc)
break
+ update_icon()
/obj/item/stack/proc/get_amount()
return amount
@@ -201,6 +203,7 @@
spawn(0) src.interact(usr)
else
..()
+ update_icon()
return
/obj/item/stack/attackby(obj/item/W as obj, mob/user as mob, params)
@@ -220,6 +223,7 @@
src.use(to_transfer)
if (src && usr.machine==src)
spawn(0) src.interact(usr)
+ S.update_icon()
else return ..()
/obj/item/stack/proc/copy_evidences(obj/item/stack/from as obj)
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 983278dd71c..dda1a4942c0 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -1124,4 +1124,43 @@ obj/item/toy/cards/deck/syndicate/black
shake_camera(M, 2, 1) // Shakes player camera 2 squares for 1 second.
else
- user << "Nothing happens."
\ No newline at end of file
+ user << "Nothing happens."
+
+
+/obj/item/toy/owl
+ name = "owl action figure"
+ desc = "An action figure modeled after 'The Owl', defender of justice."
+ icon = 'icons/obj/toy.dmi'
+ icon_state = "owlprize"
+ w_class = 2.0
+ var/cooldown = 0
+
+/obj/item/toy/owl/attack_self(mob/user)
+ if(!cooldown) //for the sanity of everyone
+ var/message = pick("You won't get away this time, Griffin!", "Stop right there, criminal!", "Hoot! Hoot!", "I am the night!")
+ user << "You pull the string on the [src]."
+ playsound(user, 'sound/machines/click.ogg', 20, 1)
+ src.loc.visible_message("\icon[src] [message]")
+ cooldown = 1
+ spawn(30) cooldown = 0
+ return
+ ..()
+
+/obj/item/toy/griffin
+ name = "griffin action figure"
+ desc = "An action figure modeled after 'The Griffin', criminal mastermind."
+ icon = 'icons/obj/toy.dmi'
+ icon_state = "griffinprize"
+ w_class = 2.0
+ var/cooldown = 0
+
+/obj/item/toy/griffin/attack_self(mob/user)
+ if(!cooldown) //for the sanity of everyone
+ var/message = pick("You can't stop me, Owl!", "My plan is flawless! The vault is mine!", "Caaaawwww!", "You will never catch me!")
+ user << "You pull the string on the [src]."
+ playsound(user, 'sound/machines/click.ogg', 20, 1)
+ src.loc.visible_message("\icon[src] [message]")
+ cooldown = 1
+ spawn(30) cooldown = 0
+ return
+ ..()
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm
index 303d0bc73a6..c2f37d4a455 100644
--- a/code/game/objects/items/weapons/RCD.dm
+++ b/code/game/objects/items/weapons/RCD.dm
@@ -30,7 +30,7 @@ RCD
New()
- desc = "A RCD. It currently holds [matter]/100 matter-units."
+ desc = "A RCD. It currently holds [matter]/[max_matter] matter-units."
src.spark_system = new /datum/effect/effect/system/spark_spread
spark_system.set_up(5, 0, src)
spark_system.attach(src)
@@ -44,9 +44,9 @@ RCD
if((matter + R.ammoamt) > max_matter)
user << "The RCD cant hold any more matter-units."
return
+ matter += R.ammoamt
user.drop_item()
del(W)
- matter += R.ammoamt
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
user << "The RCD now holds [matter]/[max_matter] matter-units."
desc = "A RCD. It currently holds [matter]/[max_matter] matter-units."
@@ -168,7 +168,7 @@ RCD
if(matter < amount)
return 0
matter -= amount
- desc = "A RCD. It currently holds [matter]/100 matter-units."
+ desc = "A RCD. It currently holds [matter]/[max_matter] matter-units."
return 1
/obj/item/weapon/rcd/proc/checkResource(var/amount, var/mob/user)
diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm
index 931d6e09f84..760e0633f56 100644
--- a/code/game/objects/items/weapons/shields.dm
+++ b/code/game/objects/items/weapons/shields.dm
@@ -6,30 +6,29 @@
desc = "A shield adept at blocking blunt objects from connecting with the torso of the shield wielder."
icon = 'icons/obj/weapons.dmi'
icon_state = "riot"
- flags = CONDUCT
slot_flags = SLOT_BACK
- force = 5.0
- throwforce = 5.0
- throw_speed = 1
- throw_range = 4
- w_class = 4.0
+ force = 8
+ throwforce = 5
+ throw_speed = 2
+ throw_range = 3
+ w_class = 4
g_amt = 7500
m_amt = 1000
origin_tech = "materials=2"
attack_verb = list("shoved", "bashed")
var/cooldown = 0 //shield bash cooldown. based on world.time
- IsShield()
- return 1
+/obj/item/weapon/shield/riot/IsShield()
+ return 1
- attackby(obj/item/weapon/W as obj, mob/user as mob, params)
- if(istype(W, /obj/item/weapon/melee/baton))
- if(cooldown < world.time - 25)
- user.visible_message("[user] bashes [src] with [W]!")
- playsound(user.loc, 'sound/effects/shieldbash.ogg', 50, 1)
- cooldown = world.time
- else
- ..()
+/obj/item/weapon/shield/riot/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
+ if(istype(W, /obj/item/weapon/melee/baton))
+ if(cooldown < world.time - 25)
+ user.visible_message("[user] bashes [src] with [W]!")
+ playsound(user.loc, 'sound/effects/shieldbash.ogg', 50, 1)
+ cooldown = world.time
+ else
+ ..()
/obj/item/weapon/shield/riot/roman
name = "roman shield"
@@ -42,16 +41,93 @@
desc = "A shield capable of stopping most melee attacks. Protects user from almost all energy projectiles. It can be retracted, expanded, and stored anywhere."
icon = 'icons/obj/weapons.dmi'
icon_state = "eshield0" // eshield1 for expanded
- flags = CONDUCT
- force = 3.0
- throwforce = 5.0
- throw_speed = 1
- throw_range = 4
+ force = 3
+ throwforce = 3
+ throw_speed = 3
+ throw_range = 5
w_class = 1
origin_tech = "materials=4;magnets=3;syndicate=4"
attack_verb = list("shoved", "bashed")
var/active = 0
+/obj/item/weapon/shield/energy/IsShield()
+ return (active)
+
+/obj/item/weapon/shield/energy/IsReflect()
+ return (active)
+
+/obj/item/weapon/shield/energy/attack_self(mob/living/carbon/human/user)
+ if(user.disabilities & CLUMSY && prob(50))
+ user << "You beat yourself in the head with [src]."
+ user.take_organ_damage(5)
+ active = !active
+ icon_state = "eshield[active]"
+
+ if(active)
+ force = 10
+ throwforce = 8
+ throw_speed = 2
+ w_class = 4
+ playsound(user, 'sound/weapons/saberon.ogg', 35, 1)
+ user << "[src] is now active."
+ else
+ force = 3
+ throwforce = 3
+ throw_speed = 3
+ w_class = 1
+ playsound(user, 'sound/weapons/saberoff.ogg', 35, 1)
+ user << "[src] can now be concealed."
+ if(istype(user,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = user
+ H.update_inv_l_hand()
+ H.update_inv_r_hand()
+ add_fingerprint(user)
+ return
+
+/obj/item/weapon/shield/riot/tele
+ name = "telescopic shield"
+ desc = "An advanced riot shield made of lightweight materials that collapses for easy storage."
+ icon = 'icons/obj/weapons.dmi'
+ icon_state = "teleriot0"
+ icon_override = 'icons/mob/in-hand/tools.dmi'
+ slot_flags = null
+ force = 3
+ throwforce = 3
+ throw_speed = 3
+ throw_range = 4
+ w_class = 3
+ var/active = 0
+
+/obj/item/weapon/shield/riot/tele/IsShield()
+ return (active)
+
+/obj/item/weapon/shield/riot/tele/attack_self(mob/living/user)
+ active = !active
+ icon_state = "teleriot[active]"
+ playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, 1)
+
+ if(active)
+ force = 8
+ throwforce = 5
+ throw_speed = 2
+ w_class = 4
+ slot_flags = SLOT_BACK
+ user << "You extend \the [src]."
+ else
+ force = 3
+ throwforce = 3
+ throw_speed = 3
+ w_class = 3
+ slot_flags = null
+ user << "[src] can now be concealed."
+ if(istype(user,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = user
+ H.update_inv_l_hand()
+ H.update_inv_r_hand()
+ add_fingerprint(user)
+ return
+
+
/obj/item/weapon/cloaking_device
name = "cloaking device"
desc = "Use this to become invisible to the human eyesocket."
diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm
index c0228d3c725..41902f61084 100644
--- a/code/game/objects/items/weapons/swords_axes_etc.dm
+++ b/code/game/objects/items/weapons/swords_axes_etc.dm
@@ -282,40 +282,4 @@
src.w_class = 5
hitsound = "swing_hit"
src.add_fingerprint(user)
- return
-
-
-/*
- * Energy Shield
- */
-/obj/item/weapon/shield/energy/IsShield()
- if(active)
- return 1
- else
- return 0
-
-/obj/item/weapon/shield/energy/attack_self(mob/living/user as mob)
- if ((CLUMSY in user.mutations) && prob(50))
- user << "\red You beat yourself in the head with [src]."
- user.take_organ_damage(5)
- active = !active
- if (active)
- force = 10
- reflect_chance = 100
- icon_state = "eshield[active]"
- w_class = 4
- playsound(user, 'sound/weapons/saberon.ogg', 50, 1)
- user << "\blue [src] is now active."
- else
- force = 3
- icon_state = "eshield[active]"
- w_class = 1
- reflect_chance = 0
- playsound(user, 'sound/weapons/saberoff.ogg', 50, 1)
- user << "\blue [src] can now be concealed."
- if(istype(user,/mob/living/carbon/human))
- var/mob/living/carbon/human/H = user
- H.update_inv_l_hand()
- H.update_inv_r_hand()
- add_fingerprint(user)
- return
+ return
\ No newline at end of file
diff --git a/code/game/objects/structures/barsign.dm b/code/game/objects/structures/barsign.dm
index f6298edf7be..532454b445f 100644
--- a/code/game/objects/structures/barsign.dm
+++ b/code/game/objects/structures/barsign.dm
@@ -3,7 +3,7 @@
icon_state = "empty"
anchored = 1
New()
- ChangeSign(pick("pinkflamingo", "magmasea", "limbo", "rustyaxe", "armokbar", "brokendrum", "meadbay", "thedamnwall", "thecavern", "cindikate", "theorchard", "thesaucyclown", "theclownshead","lv426", "zocalo", "4theemprah", "ishimura", "tardis", "quarks", "tenforward", "thepranicngpony", "vault13", "solaris", "thehive", "cantina", "theouterspess", "milliways42", "thetimeofeve", "spaceasshole", "dwarffortress"))
+ ChangeSign(pick("magmasea", "limbo", "rustyaxe", "armokbar", "brokendrum", "meadbay", "thecavern", "cindikate", "theorchard", "lv426", "zocalo", "4theemprah", "ishimura", "tardis", "quarks", "tenforward", "thepranicngpony", "vault13", "solaris", "thehive", "cantina", "theouterspess", "milliways42", "thetimeofeve", "spaceasshole", "dwarffortress", "thebark", "thedrunkcarp", "theharmbaton", "thenest", "officerbeersky", "thesingulo"))
return
proc/ChangeSign(var/Text)
src.icon_state = "[Text]"
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index e76f9a778b1..f7971852067 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -113,7 +113,7 @@
new /obj/item/weapon/storage/lockbox/loyalty(src)
new /obj/item/weapon/storage/box/flashbangs(src)
new /obj/item/clothing/mask/gas/sechailer/hos(src)
- new /obj/item/weapon/shield/riot(src)
+ new /obj/item/weapon/shield/riot/tele(src)
new /obj/item/weapon/melee/baton/loaded(src)
new /obj/item/weapon/storage/belt/security(src)
new /obj/item/taperoll/police(src)
diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm
index f153035fede..ff47eec90fa 100644
--- a/code/game/objects/structures/displaycase.dm
+++ b/code/game/objects/structures/displaycase.dm
@@ -72,10 +72,11 @@
desc = "A display case for the captain's antique laser gun. It taunts you to kick it."
/obj/structure/displaycase/captains_laser/New()
- req_access = list(access_captain)
- occupant = new /obj/item/weapon/gun/energy/laser/captain(src)
+ req_access = list(access_captain)
locked = 1
- update_icon()
+ spawn(5)
+ occupant = new /obj/item/weapon/gun/energy/laser/captain(src)
+ update_icon()
/obj/structure/proc/getPrint(mob/user as mob)
return md5(user:dna:uni_identity)
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index da7e049ef65..61dbe8e5e5c 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -422,8 +422,12 @@
W.Move(loc)
var/list/click_params = params2list(params)
//Center the icon where the user clicked.
- W.pixel_x = (text2num(click_params["icon-x"]) - 16)
- W.pixel_y = (text2num(click_params["icon-y"]) - 16)
+ if(!click_params || !click_params["icon-x"] || !click_params["icon-y"])
+ return
+ //Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf)
+ W.pixel_x = Clamp(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2)
+ W.pixel_y = Clamp(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2)
+
return
/obj/structure/table/proc/straight_table_check(var/direction)
@@ -591,9 +595,12 @@
I.Move(loc)
var/list/click_params = params2list(params)
//Center the icon where the user clicked.
- I.pixel_x = (text2num(click_params["icon-x"]) - 16)
- I.pixel_y = (text2num(click_params["icon-y"]) - 16)
- //if(W && W.loc) W.loc = src.loc
+ if(!click_params || !click_params["icon-x"] || !click_params["icon-y"])
+ return
+ //Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf)
+ I.pixel_x = Clamp(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2)
+ I.pixel_y = Clamp(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2)
+
return 1
/obj/structure/table/woodentable/poker //No specialties, Just a mapping object.
@@ -649,8 +656,12 @@
W.Move(loc)
var/list/click_params = params2list(params)
//Center the icon where the user clicked.
- W.pixel_x = (text2num(click_params["icon-x"]) - 16)
- W.pixel_y = (text2num(click_params["icon-y"]) - 16)
+ if(!click_params || !click_params["icon-x"] || !click_params["icon-y"])
+ return
+ //Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf)
+ W.pixel_x = Clamp(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2)
+ W.pixel_y = Clamp(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2)
+
return 1
diff --git a/code/game/vehicles/spacepods/spacepod.dm b/code/game/vehicles/spacepods/spacepod.dm
index a1195a22868..4b1bba60671 100644
--- a/code/game/vehicles/spacepods/spacepod.dm
+++ b/code/game/vehicles/spacepods/spacepod.dm
@@ -50,9 +50,9 @@
pr_int_temp_processor = new /datum/global_iterator/pod_preserve_temp(list(src))
pr_give_air = new /datum/global_iterator/pod_tank_give_air(list(src))
equipment_system = new(src)
- spacepods_list += src
-
-/obj/spacepod/Destroy()
+ spacepods_list += src
+
+/obj/spacepod/Destroy()
spacepods_list -= src
..()
@@ -61,9 +61,9 @@
pod_overlays = new/list(2)
pod_overlays[DAMAGE] = image(icon, icon_state="pod_damage")
pod_overlays[FIRE] = image(icon, icon_state="pod_fire")
-
+
overlays.Cut()
-
+
if(health <= round(initial(health)/2))
overlays += pod_overlays[DAMAGE]
if(health <= round(initial(health)/4))
@@ -72,11 +72,11 @@
/obj/spacepod/bullet_act(var/obj/item/projectile/P)
if(P.damage && !P.nodamage)
deal_damage(P.damage)
-
+
/obj/spacepod/blob_act()
deal_damage(30)
return
-
+
/obj/spacepod/attack_animal(mob/living/simple_animal/user as mob)
if(user.melee_damage_upper == 0)
user.emote("[user.friendly] [src]")
@@ -86,7 +86,7 @@
visible_message("\red [user] [user.attacktext] [src]!")
user.attack_log += text("\[[time_stamp()]\] attacked [src.name]")
return
-
+
/obj/spacepod/attack_alien(mob/user as mob)
deal_damage(15)
playsound(src.loc, 'sound/weapons/slash.ogg', 50, 1, -1)
@@ -211,8 +211,8 @@
user << "\blue \The [src] is fully repaired!"
/obj/spacepod/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
+ return src.attack_hand(user)
+
/obj/spacepod/attack_hand(mob/user as mob)
if(!hatch_open)
return ..()
@@ -371,7 +371,11 @@
return
if(H && H.client && H in range(1))
- if(src.occupant)
+ if(src.occupant && src.occupant2)
+ H << "[src.name] is full."
+ return
+
+ if(src.occupant && !src.occupant2)
if(src.occupant.ckey == H.ckey)
H.visible_message("You climb over the console and drop down into the secondary seat.")
H.reset_view(src)
@@ -404,30 +408,36 @@
return 1
else
- H.reset_view(src)
- /*
- H.client.perspective = EYE_PERSPECTIVE
- H.client.eye = src
- */
- H.stop_pulling()
- H.forceMove(src)
- src.occupant = H
- src.add_fingerprint(H)
- src.forceMove(src.loc)
- //dir = dir_in
- playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
- return 1
+ if(!src.occupant)
+ H.reset_view(src)
+ /*
+ H.client.perspective = EYE_PERSPECTIVE
+ H.client.eye = src
+ */
+ H.stop_pulling()
+ H.forceMove(src)
+ src.occupant = H
+ src.add_fingerprint(H)
+ src.forceMove(src.loc)
+ //dir = dir_in
+ playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
+ return 1
+ else
+ return
else
return 0
/obj/spacepod/proc/moved_other_inside(var/mob/living/carbon/human/H as mob)
- H.reset_view(src)
- H.stop_pulling()
- H.forceMove(src)
- src.occupant2 = H
- src.forceMove(src.loc)
- playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
- return 1
+ if(!src.occupant2)
+ H.reset_view(src)
+ H.stop_pulling()
+ H.forceMove(src)
+ src.occupant2 = H
+ src.forceMove(src.loc)
+ playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
+ return 1
+ else
+ return
@@ -436,7 +446,15 @@
if(M != user)
if(M.stat != 0)
if(allow2enter)
- moved_other_inside(M)
+ if(!src.occupant2)
+ visible_message("\red [user.name] starts loading [M.name] into the pod!")
+ sleep(10)
+ moved_other_inside(M)
+ else if(src.occupant2 && !src.occupant)
+ usr << "\red You can't put a corpse into the driver's seat!"
+ return
+ else
+ return
else
return
else
@@ -445,6 +463,68 @@
move_inside(M, user)
+/obj/spacepod/verb/move_inside()
+ set category = "Object"
+ set name = "Enter Pod"
+ set src in oview(1)
+ var/fukkendisk = usr.GetTypeInAllContents(/obj/item/weapon/disk/nuclear)
+
+ if(usr.restrained() || usr.stat || usr.weakened || usr.stunned || usr.paralysis || usr.resting) //are you cuffed, dying, lying, stunned or other
+ return
+
+ if (usr.stat || !ishuman(usr))
+ return
+
+ if(fukkendisk)
+ usr << "\red The nuke-disk is locking the door every time you try to open it. You get the feeling that it doesn't want to go into the spacepod."
+ return
+
+ for(var/mob/living/carbon/slime/M in range(1,usr))
+ if(M.Victim == usr)
+ usr << "You're too busy getting your life sucked out of you."
+ return
+
+ if(src.occupant)
+ if(allow2enter)
+ if(!src.occupant2)
+ usr << "\blue You start climbing into the secondary seat."
+ visible_message("\blue [usr] starts to climb into [src.name].")
+ if(enter_after(40,usr))
+ moved_inside(usr)
+ else
+ usr << "You stop entering the spacepod."
+ return
+ else
+ usr << "\red You can't fit!"
+ else
+ usr << "\red The door is locked!"
+
+ else if(!src.occupant && src.occupant2)
+ if(allow2enter)
+ usr << "\blue You start climbing into the primary seat."
+ visible_message("\blue [usr] starts to climb into [src.name].")
+ if(enter_after(40,usr))
+ moved_inside(usr)
+ else
+ usr << "You stop entering the spacepod."
+ return
+ else
+ usr << "\red The door is locked!"
+
+ else if(!src.occupant && !src.occupant2)
+ visible_message("\blue [usr] starts to climb into [src.name].")
+ if(enter_after(40,usr))
+ if(!src.occupant)
+ moved_inside(usr)
+ else if(src.occupant!=usr)
+ usr << "[src.occupant] was faster. Try better next time, loser."
+ else
+ usr << "You stop entering the spacepod."
+ return
+
+
+/* !!OLD BROKEN SYSTEM!! - tiger
+
/obj/spacepod/verb/move_inside()
set category = "Object"
set name = "Enter Pod"
@@ -459,8 +539,12 @@
return
if (usr.stat || !ishuman(usr))
return
+
if (src.occupant)
if(allow2enter)
+ if(src.occupant2)
+ usr << "\blue You can't fit!You starts climbing into the secondary seat."
visible_message("\blue [usr] starts to climb into [src.name]")
if(enter_after(40,usr))
@@ -515,46 +599,55 @@
usr << "You stop entering the exosuit."
return
+*/
+
/obj/spacepod/verb/exit_pod()
set name = "Exit pod"
set category = "Spacepod"
set src = usr.loc
+
if(usr != src.occupant)
if(src.occupant2)
if(usr != src.occupant2)
return
else
+ if(src.occupant)
+ src.occupant.visible_message("[src.occupant2.name] climbs out of the pod!") //Inform the remaining occupant that someone ejected.
inertia_dir = 0 // engage reverse thruster and power down pod
src.occupant2.loc = src.loc
src.occupant2 = null
- usr << "You climb out of the pod"
+ usr << "You climb out of the pod."
+
else
return
else
+ if(src.occupant2)
+ src.occupant2.visible_message("[src.occupant2.name] climbs out of the pod!") //Inform the remaining occupant that someone ejected.
inertia_dir = 0 // engage reverse thruster and power down pod
src.occupant.loc = src.loc
src.occupant = null
- usr << "You climb out of the pod"
+ usr << "You climb out of the pod."
return
/obj/spacepod/verb/exit_pod2()
if(!src.occupant2)
set hidden = 1
return
+
else
set name = "Eject Secondary Seat"
set category = "Spacepod"
set src = usr.loc
set hidden = 0
- if(usr.ckey == src.occupant2.ckey)
+ if(usr == src.occupant2)
usr << "Use 'Exit Pod'"
return
else
usr << "You eject [src.occupant2.name]."
- src.occupant2.visible_message("You were ejected from the pod!")
+ src.occupant2.visible_message("You were ejected from the pod!")
inertia_dir = 0 // engage reverse thruster and power down pod
src.occupant2.loc = src.loc
src.occupant2 = null
@@ -565,7 +658,7 @@
set category = "Spacepod"
set src = usr.loc
- if(occupant2 == src)
+ if(occupant2 == usr)
if(!allow2enter)
usr << "You can't unlock the doors from your seat."
return
diff --git a/code/modules/admin/NewBan.dm b/code/modules/admin/NewBan.dm
index 035b2d23096..ecc2a812bf0 100644
--- a/code/modules/admin/NewBan.dm
+++ b/code/modules/admin/NewBan.dm
@@ -119,6 +119,10 @@ var/savefile/Banlist
Banlist["temp"] << temp
if (temp)
Banlist["minutes"] << bantimestamp
+ if(!temp)
+ notes_add(ckey, "Permanently banned - [reason]")
+ else
+ notes_add(ckey, "Banned for [minutes] minutes - [reason]")
return 1
/proc/RemoveBan(foldername)
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index a5dc3d6ef4d..c6fb5508ea0 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -956,6 +956,16 @@ proc/move_gamma_ship()
fromArea = locate(/area/shuttle/gamma/station)
toArea = locate(/area/shuttle/gamma/space)
fromArea.move_contents_to(toArea)
+
+ for(var/obj/machinery/mech_bay_recharge_port/P in toArea)
+ P.locate_recharge_turf()
+
+ for(var/obj/machinery/power/apc/A in toArea)
+ A.init()
+
+ for(var/obj/machinery/alarm/A in toArea)
+ A.first_run()
+
if (gamma_ship_location)
gamma_ship_location = 0
else
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index e21f3c11dc5..627d9182db6 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -221,7 +221,7 @@ datum/preferences
dat += "
"
dat += "Species: [species]
"
if(species == "Vox")//oldvox code, sucks I know
- dat += "Old vox? [speciesprefs ? "Yes(Big N2 tank)" : "No(Vox-special N2 tank)"]
"
+ dat += "Old Vox? [speciesprefs ? "Yes (Large N2 tank)" : "No(Vox-special N2 tank)"]
"
dat += "Secondary Language:
[language]
"
dat += "Blood Type: [b_type]
"
if(species == "Human")
@@ -327,7 +327,10 @@ datum/preferences
dat += "[copytext(flavor_text, 1, 37)]...
"
dat += "
"
- dat += "
Hair
"
+ var/hairname = "Hair"
+ if(species == "Machine")
+ hairname = "Frame Color"
+ dat += "
[hairname]
"
dat += "Change Color
"
dat += " Style: [h_style]__
"
@@ -1101,7 +1104,10 @@ datum/preferences
if("hair")
if(species == "Human" || species == "Unathi" || species == "Tajaran" || species == "Skrell" || species == "Machine")
- var/new_hair = input(user, "Choose your character's hair colour:", "Character Preference") as color|null
+ var/input = "Choose your character's hair colour:"
+ if(species == "Machine")
+ input = "Choose your character's frame colour:"
+ var/new_hair = input(user, input, "Character Preference") as color|null
if(new_hair)
r_hair = hex2num(copytext(new_hair, 2, 4))
g_hair = hex2num(copytext(new_hair, 4, 6))
diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm
index c8a94029e1a..e0741ed1ac7 100644
--- a/code/modules/clothing/head/misc.dm
+++ b/code/modules/clothing/head/misc.dm
@@ -343,4 +343,10 @@
icon_state = "griffinhat"
item_state = "griffinhat"
flags = BLOCKHAIR|NODROP
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
\ No newline at end of file
+ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
+
+/obj/item/clothing/head/lordadmiralhat
+ name = "Lord Admiral's Hat"
+ desc = "A hat suitable for any man of high and exalted rank."
+ icon_state = "lordadmiralhat"
+ item_state = "lordadmiralhat"
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm
index 3b85dd5299b..d367671e34f 100644
--- a/code/modules/clothing/spacesuits/alien.dm
+++ b/code/modules/clothing/spacesuits/alien.dm
@@ -256,54 +256,3 @@
"Vox" = 'icons/mob/species/vox/head.dmi',
"Vox Armalis" = 'icons/mob/species/armalis/head.dmi',
)
-
-/obj/item/clothing/suit/space/plasmaman
- w_class = 3
- allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box/magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank)
- slowdown = 2
- armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 0)
- heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
- max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
- species_restricted = list("Plasmaman")
- flags = STOPSPRESSUREDMAGE | PLASMAGUARD
-
- icon_state = "plasmaman_suit"
- item_state = "plasmaman_suit"
-
-/obj/item/clothing/head/helmet/space/plasmaman
- flags = HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE | PLASMAGUARD
- species_restricted = list("Plasmaman")
-
- icon_state = "plasmaman_helmet0"
- item_state = "plasmaman_helmet0"
- var/brightness_on = 4 //luminosity when on
- var/on = 0
- var/no_light=0 // Disable the light on the atmos suit
- action_button_name = "Toggle Helmet Light"
-
- attack_self(mob/user)
- if(!isturf(user.loc))
- user << "You cannot turn the light on while in this [user.loc]" //To prevent some lighting anomalities.
- return
- if(no_light)
- return
- on = !on
- icon_state = "plasmaman_helmet[on]"
-// item_state = "rig[on]-[_color]"
-
- if(on) user.SetLuminosity(user.luminosity + brightness_on)
- else user.SetLuminosity(user.luminosity - brightness_on)
-
- pickup(mob/user)
- if(on)
- user.SetLuminosity(user.luminosity + brightness_on)
-// user.UpdateLuminosity()
- SetLuminosity(0)
-
- dropped(mob/user)
- if(on)
- user.SetLuminosity(user.luminosity - brightness_on)
-// user.UpdateLuminosity()
- SetLuminosity(brightness_on)
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm
new file mode 100644
index 00000000000..6c20fbae7ee
--- /dev/null
+++ b/code/modules/clothing/spacesuits/plasmamen.dm
@@ -0,0 +1,170 @@
+// PLASMEN SHIT
+// CAN'T WEAR UNLESS YOU'RE A PINK SKELLINGTON
+/obj/item/clothing/suit/space/eva/plasmaman
+ w_class = 3
+ allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank)
+ slowdown = 2
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 0)
+ heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
+ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
+ max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
+ species_restricted = list("Plasmaman")
+ flags = STOPSPRESSUREDMAGE | PLASMAGUARD
+
+ icon_state = "plasmaman_suit"
+ item_state = "plasmaman_suit"
+
+ var/next_extinguish=0
+ var/extinguish_cooldown=10 SECONDS
+ var/extinguishes_left=10 // Yeah yeah, reagents, blah blah blah. This should be simple.
+
+/obj/item/clothing/suit/space/eva/plasmaman/examine()
+ set src in view()
+ ..()
+ usr << "There are [extinguishes_left] extinguisher canisters left in this suit."
+/obj/item/clothing/suit/space/eva/plasmaman/proc/Extinguish(var/mob/user)
+ var/mob/living/carbon/human/H=user
+ if(extinguishes_left)
+ if(next_extinguish > world.time)
+ return
+
+ next_extinguish = world.time + extinguish_cooldown
+ extinguishes_left--
+ H << "Your suit automatically extinguishes the fire."
+ H.ExtinguishMob()
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman
+ flags = HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE | PLASMAGUARD
+ species_restricted = list("Plasmaman")
+
+ icon_state = "plasmaman_helmet0"
+ item_state = "plasmaman_helmet0"
+ var/base_state = "plasmaman_helmet"
+ var/brightness_on = 4 //luminosity when on
+ var/on = 0
+ var/no_light=0 // Disable the light on the atmos suit
+ action_button_name = "Toggle Helmet Light"
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/attack_self(mob/user)
+ if(!isturf(user.loc))
+ user << "You cannot turn the light on while in this [user.loc]" //To prevent some lighting anomalities.
+ return
+ if(no_light)
+ return
+ on = !on
+ icon_state = "[base_state][on]"
+// item_state = "rig[on]-[_color]"
+ if(on) user.SetLuminosity(user.luminosity + brightness_on)
+ else user.SetLuminosity(user.luminosity - brightness_on)
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/pickup(mob/user)
+ if(on)
+ user.SetLuminosity(user.luminosity + brightness_on)
+// user.UpdateLuminosity()
+ SetLuminosity(0)
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/dropped(mob/user)
+ if(on)
+ user.SetLuminosity(user.luminosity - brightness_on)
+// user.UpdateLuminosity()
+ SetLuminosity(brightness_on)
+
+
+
+// ENGINEERING
+/obj/item/clothing/suit/space/eva/plasmaman/assistant
+ icon_state = "plasmamanAssistant_suit"
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/assistant
+ icon_state = "plasmamanAssistant_helmet0"
+ base_state = "plasmamanAssistant_helmet"
+
+/obj/item/clothing/suit/space/eva/plasmaman/atmostech
+ icon_state = "plasmamanAtmos_suit"
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/atmostech
+ icon_state = "plasmamanAtmos_helmet0"
+ base_state = "plasmamanAtmos_helmet"
+
+/obj/item/clothing/suit/space/eva/plasmaman/engineer
+ icon_state = "plasmamanEngineer_suit"
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/engineer
+ icon_state = "plasmamanEngineer_helmet0"
+ base_state = "plasmamanEngineer_helmet"
+
+
+//SERVICE
+
+/obj/item/clothing/suit/space/eva/plasmaman/botanist
+ icon_state = "plasmamanBotanist_suit"
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/botanist
+ icon_state = "plasmamanBotanist_helmet0"
+ base_state = "plasmamanBotanist_helmet"
+
+/obj/item/clothing/suit/space/eva/plasmaman/chaplain
+ icon_state = "plasmamanChaplain_suit"
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/chaplain
+ icon_state = "plasmamanChaplain_helmet0"
+ base_state = "plasmamanChaplain_helmet"
+
+/obj/item/clothing/suit/space/eva/plasmaman/service
+ icon_state = "plasmamanService_suit"
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/service
+ icon_state = "plasmamanService_helmet0"
+ base_state = "plasmamanService_helmet"
+
+/obj/item/clothing/suit/space/eva/plasmaman/janitor
+ icon_state = "plasmamanJanitor_suit"
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/janitor
+ icon_state = "plasmamanJanitor_helmet0"
+ base_state = "plasmamanJanitor_helmet"
+
+
+//CARGO
+
+/obj/item/clothing/suit/space/eva/plasmaman/cargo
+ icon_state = "plasmamanCargo_suit"
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/cargo
+ icon_state = "plasmamanCargo_helmet0"
+ base_state = "plasmamanCargo_helmet"
+
+/obj/item/clothing/suit/space/eva/plasmaman/miner
+ icon_state = "plasmamanMiner_suit"
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/miner
+ icon_state = "plasmamanMiner_helmet0"
+ base_state = "plasmamanMiner_helmet"
+
+
+// MEDSCI
+
+/obj/item/clothing/suit/space/eva/plasmaman/medical
+ icon_state = "plasmamanMedical_suit"
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/medical
+ icon_state = "plasmamanMedical_helmet0"
+ base_state = "plasmamanMedical_helmet"
+
+/obj/item/clothing/suit/space/eva/plasmaman/science
+ icon_state = "plasmamanScience_suit"
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/science
+ icon_state = "plasmamanScience_helmet0"
+ base_state = "plasmamanScience_helmet"
+
+
+//SECURITY
+
+/obj/item/clothing/suit/space/eva/plasmaman/security
+ icon_state = "plasmamanSecurity_suit"
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/security
+ icon_state = "plasmamanSecurity_helmet0"
+ base_state = "plasmamanSecurity_helmet"
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm
index 127cc7c3bf6..06b61fc94e9 100644
--- a/code/modules/clothing/spacesuits/rig.dm
+++ b/code/modules/clothing/spacesuits/rig.dm
@@ -220,6 +220,7 @@
H.equip_to_slot(helmet, slot_head)
helmet.flags |= NODROP
H << "\blue You deploy your hardsuit helmet, sealing you off from the world."
+ H.update_inv_head()
/obj/item/clothing/suit/space/rig/attackby(obj/item/W as obj, mob/user as mob, params)
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 0c9ac105043..1655618eb8f 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -470,4 +470,11 @@
else
icon_state = initial(icon_state)
item_state = initial(item_state)
- usr.update_inv_wear_suit()
\ No newline at end of file
+ usr.update_inv_wear_suit()
+
+/obj/item/clothing/suit/lordadmiral
+ name = "Lord Admiral's Coat"
+ desc = "You'll be the Ruler of the King's Navy in no time."
+ icon_state = "lordadmiral"
+ item_state = "lordadmiral"
+ allowed = list (/obj/item/weapon/gun)
\ No newline at end of file
diff --git a/code/modules/clothing/under/pants.dm b/code/modules/clothing/under/pants.dm
index 052eb50dd6f..0a1d3c49aba 100644
--- a/code/modules/clothing/under/pants.dm
+++ b/code/modules/clothing/under/pants.dm
@@ -78,4 +78,11 @@
name = "camo pants"
desc = "A pair of woodland camouflage pants. Probably not the best choice for a space station."
icon_state = "camopants"
- _color = "camopants"
\ No newline at end of file
+ _color = "camopants"
+
+/obj/item/clothing/under/pants/chaps
+ name = "black leather assless chaps"
+ desc = "For those brave enough to weather the breeze."
+ icon_state = "chaps"
+ _color = "chaps"
+ flags = ONESIZEFITSALL
\ No newline at end of file
diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm
index effa2845d01..d2a37d3ac4b 100644
--- a/code/modules/events/event_container.dm
+++ b/code/modules/events/event_container.dm
@@ -123,13 +123,13 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
severity = EVENT_LEVEL_MUNDANE
available_events = list(
// Severity level, event name, even type, base weight, role weights, one shot, min weight, max weight. Last two only used if set and non-zero
- new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Nothing", /datum/event/nothing, 100),
+ new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Nothing", /datum/event/nothing, 1100),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "PDA Spam", /datum/event/pda_spam, 0, list(ASSIGNMENT_ANY = 4), 0, 25, 50),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Lotto", /datum/event/money_lotto, 0, list(ASSIGNMENT_ANY = 1), 1, 5, 15),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Hacker", /datum/event/money_hacker, 0, list(ASSIGNMENT_ANY = 4), 1, 10, 25),
- new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Economic News", /datum/event/economic_event, 300),
- new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Trivial News", /datum/event/trivial_news, 400),
- new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Mundane News", /datum/event/mundane_news, 300),
+// new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Economic News", /datum/event/economic_event, 300),
+// new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Trivial News", /datum/event/trivial_news, 400),
+// new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Mundane News", /datum/event/mundane_news, 300),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lost Carp", /datum/event/carp_migration, 20, list(ASSIGNMENT_SECURITY = 10), 1),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Brand Intelligence",/datum/event/brand_intelligence,20, list(ASSIGNMENT_JANITOR = 25), 1),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Vermin Infestation",/datum/event/infestation, 100, list(ASSIGNMENT_JANITOR = 100)),
@@ -155,7 +155,7 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Viral Infection", /datum/event/viral_infection, 0, list(ASSIGNMENT_MEDICAL = 150)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, 100, list(ASSIGNMENT_SECURITY = 30), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Ion Storm", /datum/event/ionstorm, 0, list(ASSIGNMENT_AI = 50, ASSIGNMENT_CYBORG = 50, ASSIGNMENT_ENGINEER = 15, ASSIGNMENT_SCIENTIST = 5)),
- new /datum/event_meta/alien(EVENT_LEVEL_MODERATE, "Alien Infestation", /datum/event/alien_infestation, 0, list(ASSIGNMENT_SECURITY = 20), 1),
+ new /datum/event_meta/alien(EVENT_LEVEL_MODERATE, "Alien Infestation", /datum/event/alien_infestation, 0, list(ASSIGNMENT_SECURITY = 15), 1),
new /datum/event_meta/ninja(EVENT_LEVEL_MODERATE, "Space Ninja", /datum/event/space_ninja, 0, list(ASSIGNMENT_SECURITY = 15), 1),
// NON-BAY EVENTS
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Mass Hallucination", /datum/event/mass_hallucination, 300),
diff --git a/code/modules/events/event_dynamic.dm b/code/modules/events/event_dynamic.dm
index 1dd1956c7ab..0a2203eedcd 100644
--- a/code/modules/events/event_dynamic.dm
+++ b/code/modules/events/event_dynamic.dm
@@ -46,8 +46,8 @@ var/global/list/possibleEvents = list()
// Code/WorkInProgress/Cael_Aislinn/Economy/Economy_Events_Mundane.dm
possibleEvents[/datum/event/economic_event] = 300
- possibleEvents[/datum/event/trivial_news] = 400
- possibleEvents[/datum/event/mundane_news] = 300
+ //possibleEvents[/datum/event/trivial_news] = 400
+ //possibleEvents[/datum/event/mundane_news] = 300
possibleEvents[/datum/event/cargo_bonus] = 150
diff --git a/code/modules/events/event_manager.dm b/code/modules/events/event_manager.dm
index 604a4007ab9..08614d68c9c 100644
--- a/code/modules/events/event_manager.dm
+++ b/code/modules/events/event_manager.dm
@@ -293,12 +293,12 @@
/client/proc/event_manager_panel()
set name = "Event Manager Panel"
- set category = "Admin"
+ set category = "Event"
if(event_manager)
event_manager.Interact(usr)
feedback_add_details("admin_verb","EMP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return
-
+
/datum/event/proc/findEventArea() //Here's a nice proc to use to find an area for your event to land in!
var/area/candidate = null
@@ -343,7 +343,7 @@
break
return candidate
-
+
/datum/event/proc/num_players()
var/players = 0
for(var/mob/living/carbon/human/P in player_list)
diff --git a/code/modules/media/mediamanager.dm b/code/modules/media/mediamanager.dm
index 46103722c68..aa52f5c80a2 100644
--- a/code/modules/media/mediamanager.dm
+++ b/code/modules/media/mediamanager.dm
@@ -6,8 +6,36 @@
* Rewritten (except for player HTML) by N3X15
***********************/
-// Open up WMP and play musique.
-// TODO: Convert to VLC for cross-platform and ogg support. - N3X
+// Open up VLC and play musique.
+// Converted to VLC for cross-platform and ogg support. - N3X
+var/const/PLAYER_HTML={"
+
+
+
+"}
+
+/* OLD, DO NOT USE. CONTROLS.CURRENTPOSITION IS BROKEN.
var/const/PLAYER_HTML={"
"}
+*/
// Hook into the events we desire.
/hook_handler/soundmanager
diff --git a/code/modules/mob/living/carbon/_defines.dm b/code/modules/mob/living/carbon/_defines.dm
index aa8fa28c131..2abbbf91cbc 100644
--- a/code/modules/mob/living/carbon/_defines.dm
+++ b/code/modules/mob/living/carbon/_defines.dm
@@ -1,6 +1,6 @@
//NOTE: Breathing happens once per FOUR TICKS, unless the last breath fails. In which case it happens once per ONE TICK! So oxyloss healing is done once per 4 ticks while oxyloss damage is applied once per tick!
#define HUMAN_MAX_OXYLOSS 3 //Defines how much oxyloss humans can get per tick. A tile with no air at all (such as space) applies this value, otherwise it's a percentage of it.
-#define HUMAN_CRIT_MAX_OXYLOSS ( (last_tick_duration) /5) //The amount of damage you'll get when in critical condition. We want this to be a 5 minute deal = 300s. There are 100HP to get through, so (1/3)*last_tick_duration per second. Breaths however only happen every 4 ticks.
+#define HUMAN_CRIT_MAX_OXYLOSS ( (tickerProcess.getLastTickerTimeDuration()) / 3) //The amount of damage you'll get when in critical condition. We want this to be a 5 minute deal = 300s. There are 100HP to get through, so (1/3)*last_tick_duration per second. Breaths however only happen every 4 ticks.
#define HEAT_DAMAGE_LEVEL_1 2 //Amount of damage applied when your body temperature just passes the 360.15k safety point
#define HEAT_DAMAGE_LEVEL_2 3 //Amount of damage applied when your body temperature passes the 400K point
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
index 0adc5d9d775..7a607c72e77 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
@@ -1,8 +1,8 @@
/mob/living/carbon/alien/humanoid/hunter
name = "alien hunter"
caste = "h"
- maxHealth = 150
- health = 150
+ maxHealth = 125
+ health = 125
storedPlasma = 100
max_plasma = 150
icon_state = "alienh_s"
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
index a06482242c2..5870ca062d8 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
@@ -1,8 +1,8 @@
/mob/living/carbon/alien/humanoid/sentinel
name = "alien sentinel"
caste = "s"
- maxHealth = 125
- health = 125
+ maxHealth = 150
+ health = 150
storedPlasma = 100
max_plasma = 250
icon_state = "aliens_s"
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index b8c50d3a362..90ff4d4841f 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -449,10 +449,6 @@
item.throw_at(target, item.throw_range, item.throw_speed, src)
-/mob/living/carbon/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
- ..()
- bodytemperature = max(bodytemperature, BODYTEMP_HEAT_DAMAGE_LIMIT+10)
-
/mob/living/carbon/can_use_hands()
if(handcuffed)
return 0
diff --git a/code/modules/mob/living/carbon/give.dm b/code/modules/mob/living/carbon/give.dm
index 12673d50549..63dbfac240c 100644
--- a/code/modules/mob/living/carbon/give.dm
+++ b/code/modules/mob/living/carbon/give.dm
@@ -1,18 +1,15 @@
-/mob/living/carbon/verb/give()
+/mob/living/carbon/verb/give(var/mob/living/carbon/target in oview(1))
set category = "IC"
set name = "Give"
- set src in view(1)
- if(src.stat == 2 || usr.stat == 2 || src.client == null)
- return
- if(src == usr)
- usr << "\red I feel stupider, suddenly."
+
+ if(target.stat == 2 || usr.stat == 2|| target.client == null)
return
var/obj/item/I
if(!usr.hand && usr.r_hand == null)
- usr << "\red You don't have anything in your right hand to give to [src.name]"
+ usr << " You don't have anything in your right hand to give to [target.name]"
return
if(usr.hand && usr.l_hand == null)
- usr << "\red You don't have anything in your left hand to give to [src.name]"
+ usr << " You don't have anything in your left hand to give to [target.name]"
return
if(usr.hand)
I = usr.l_hand
@@ -23,38 +20,38 @@
if((I.flags & NODROP) || (I.flags & ABSTRACT))
usr << "That's not exactly something you can give."
return
- if(src.r_hand == null || src.l_hand == null)
- switch(alert(src,"[usr] wants to give you \a [I]?",,"Yes","No"))
+ if(target.r_hand == null || target.l_hand == null)
+ switch(alert(target,"[usr] wants to give you \a [I]?",,"Yes","No"))
if("Yes")
if(!I)
return
if(!Adjacent(usr))
- usr << "\red You need to stay in reaching distance while giving an object."
- src << "\red [usr.name] moved too far away."
+ usr << " You need to stay in reaching distance while giving an object."
+ target << " [usr.name] moved too far away."
return
if((usr.hand && usr.l_hand != I) || (!usr.hand && usr.r_hand != I))
- usr << "\red You need to keep the item in your active hand."
- src << "\red [usr.name] seem to have given up on giving \the [I.name] to you."
+ usr << " You need to keep the item in your active hand."
+ target << " [usr.name] seem to have given up on giving \the [I.name] to you."
return
- if(src.r_hand != null && src.l_hand != null)
- src << "\red Your hands are full."
- usr << "\red Their hands are full."
+ if(target.r_hand != null && target.l_hand != null)
+ target << " Your hands are full."
+ usr << " Their hands are full."
return
else
usr.drop_item()
- if(src.r_hand == null)
- src.r_hand = I
+ if(target.r_hand == null)
+ target.r_hand = I
else
- src.l_hand = I
- I.loc = src
+ target.l_hand = I
+ I.loc = target
I.layer = 20
- I.add_fingerprint(src)
+ I.add_fingerprint(target)
src.update_inv_l_hand()
src.update_inv_r_hand()
usr.update_inv_l_hand()
usr.update_inv_r_hand()
- src.visible_message("\blue [usr.name] handed \the [I.name] to [src.name].")
+ target.visible_message(" [usr.name] handed \the [I.name] to [target.name].")
if("No")
- src.visible_message("\red [usr.name] tried to hand [I.name] to [src.name] but [src.name] didn't want it.")
+ target.visible_message(" [usr.name] tried to hand [I.name] to [target.name] but [target.name] didn't want it.")
else
- usr << "\red [src.name]'s hands are full."
\ No newline at end of file
+ usr << " [target.name]'s hands are full."
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index 5808034d020..f56ee3a3cc7 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -11,8 +11,10 @@
return
if(istype(I, /obj/item/clothing/head/helmet/space/rig)) // If the item to be equipped is a rigid suit helmet
- src << "\red You must fasten the helmet to a hardsuit first. (Target the head and use on a hardsuit)" // Stop eva helms equipping.
- return 0
+ var/obj/item/clothing/head/helmet/space/rig/C = I
+ if(C.rig_restrict_helmet)
+ src << "\red You must fasten the helmet to a hardsuit first. (Target the head and use on a hardsuit)" // Stop eva helms equipping.
+ return 0
if(H.equip_to_appropriate_slot(I))
if(hand)
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 95dee276004..3877fa52634 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -466,7 +466,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
if(species.name=="Plasmaman")
// Check if we're wearing our biosuit and mask.
- if (!istype(wear_suit,/obj/item/clothing/suit/space/plasmaman) || !istype(head,/obj/item/clothing/head/helmet/space/plasmaman))
+ if (!istype(wear_suit,/obj/item/clothing/suit/space/eva/plasmaman) || !istype(head,/obj/item/clothing/head/helmet/space/eva/plasmaman))
//testing("Plasmaman [src] leakin'. coverflags=[cover_flags]")
// OH FUCK HE LEAKIN'.
// This was OP.
@@ -576,32 +576,34 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
//Body temperature is too hot.
fire_alert = max(fire_alert, 1)
if(status_flags & GODMODE) return 1 //godmode
- switch(bodytemperature)
- if(species.heat_level_1 to species.heat_level_2)
- take_overall_damage(burn=HEAT_DAMAGE_LEVEL_1, used_weapon = "High Body Temperature")
+ if(bodytemperature >= species.heat_level_1 && bodytemperature <= species.heat_level_2)
+ take_overall_damage(burn=HEAT_DAMAGE_LEVEL_1, used_weapon = "High Body Temperature")
+ fire_alert = max(fire_alert, 2)
+ if(bodytemperature > species.heat_level_2 && bodytemperature <= species.heat_level_3)
+ take_overall_damage(burn=HEAT_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature")
+ fire_alert = max(fire_alert, 2)
+ if(bodytemperature > species.heat_level_3 && bodytemperature < INFINITY)
+ if(on_fire)
+ take_overall_damage(burn=HEAT_DAMAGE_LEVEL_3, used_weapon = "Fire")
fire_alert = max(fire_alert, 2)
- if(species.heat_level_2 to species.heat_level_3)
+ else
take_overall_damage(burn=HEAT_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature")
fire_alert = max(fire_alert, 2)
- if(species.heat_level_3 to INFINITY)
- take_overall_damage(burn=HEAT_DAMAGE_LEVEL_3, used_weapon = "High Body Temperature")
- fire_alert = max(fire_alert, 2)
else if(bodytemperature < species.cold_level_1)
fire_alert = max(fire_alert, 1)
if(status_flags & GODMODE) return 1 //godmode
if(stat == DEAD) return 1 //ZomgPonies -- No need for cold burn damage if dead
if(!istype(loc, /obj/machinery/atmospherics/unary/cryo_cell))
- switch(bodytemperature)
- if(species.cold_level_2 to species.cold_level_1)
- take_overall_damage(burn=COLD_DAMAGE_LEVEL_1, used_weapon = "High Body Temperature")
- fire_alert = max(fire_alert, 1)
- if(species.cold_level_3 to species.cold_level_2)
- take_overall_damage(burn=COLD_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature")
- fire_alert = max(fire_alert, 1)
- if(-INFINITY to species.cold_level_3)
- take_overall_damage(burn=COLD_DAMAGE_LEVEL_3, used_weapon = "High Body Temperature")
- fire_alert = max(fire_alert, 1)
+ if(bodytemperature >= species.cold_level_2 && bodytemperature <= species.cold_level_1)
+ take_overall_damage(burn=COLD_DAMAGE_LEVEL_1, used_weapon = "Low Body Temperature")
+ fire_alert = max(fire_alert, 1)
+ if(bodytemperature >= species.cold_level_3 && bodytemperature < species.cold_level_2)
+ take_overall_damage(burn=COLD_DAMAGE_LEVEL_2, used_weapon = "Low Body Temperature")
+ fire_alert = max(fire_alert, 1)
+ if(bodytemperature > -INFINITY && bodytemperature < species.cold_level_3)
+ take_overall_damage(burn=COLD_DAMAGE_LEVEL_3, used_weapon = "Low Body Temperature")
+ fire_alert = max(fire_alert, 1)
// Account for massive pressure differences. Done by Polymorph
// Made it possible to actually have something that can protect against high pressure... Done by Errorage. Polymorph now has an axe sticking from his head for his previous hardcoded nonsense!
diff --git a/code/modules/mob/living/carbon/human/plasmaman/species.dm b/code/modules/mob/living/carbon/human/plasmaman/species.dm
index edb0a7c8539..29e54e8ab8f 100644
--- a/code/modules/mob/living/carbon/human/plasmaman/species.dm
+++ b/code/modules/mob/living/carbon/human/plasmaman/species.dm
@@ -30,26 +30,48 @@
H.unEquip(H.wear_mask)
H.equip_or_collect(new /obj/item/clothing/mask/breath(H), slot_wear_mask)
- var/suit=/obj/item/clothing/suit/space/plasmaman
- var/helm=/obj/item/clothing/head/helmet/space/plasmaman
+ var/suit=/obj/item/clothing/suit/space/eva/plasmaman
+ var/helm=/obj/item/clothing/head/helmet/space/eva/plasmaman
var/tank_slot = slot_s_store
var/tank_slot_name = "suit storage"
switch(H.mind.assigned_role)
- /*
if("Research Director","Scientist","Geneticist","Roboticist")
- suit=/obj/item/clothing/suit/space/vox/casual/science
- helm=/obj/item/clothing/head/helmet/space/vox/casual/science
- if("Chief Engineer","Station Engineer","Atmospheric Technician")
- suit=/obj/item/clothing/suit/space/vox/casual/engineer
- helm=/obj/item/clothing/head/helmet/space/vox/casual/engineer
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/science
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/science
+ if("Chief Engineer","Station Engineer")
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/engineer
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/engineer
+ if("Atmospheric Technician")
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/atmostech
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/atmostech
if("Head of Security","Warden","Detective","Security Officer")
- suit=/obj/item/clothing/suit/space/vox/casual/security
- helm=/obj/item/clothing/head/helmet/space/vox/casual/security
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/security
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/security
if("Chief Medical Officer","Medical Doctor","Paramedic","Chemist")
- suit=/obj/item/clothing/suit/space/vox/casual/medical
- helm=/obj/item/clothing/head/helmet/space/vox/casual/medical
- */ // For now.
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/medical
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/medical
+ if("Bartender", "Chef")
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/service
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/service
+ if("Cargo Technician", "Quartermaster")
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/cargo
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/cargo
+ if("Shaft Miner")
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/miner
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/miner
+ if("Botanist")
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/botanist
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/botanist
+ if("Chaplain")
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/chaplain
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/chaplain
+ if("Janitor")
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/janitor
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/janitor
+ if("Assistant")
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/assistant
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/assistant
if("Clown","Mime")
tank_slot=slot_r_hand
tank_slot_name = "hand"
diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm
index 26d57d9d4cc..12c5548f51c 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone.dm
@@ -25,7 +25,7 @@
//Used for self-mailing.
var/mail_destination = 0
- var/sprite[0]
+// var/sprite[0]
/mob/living/silicon/robot/drone/New()
@@ -275,6 +275,7 @@
src << "Don't invade their worksites, don't steal their resources, don't tell them about the changeling in the toilets."
src << "If a crewmember has noticed you, you are probably breaking your first law."
+/*
sprite["Default"] = "repairbot"
sprite["Mk2 Mousedrone"] = "mk2"
sprite["Mk3 Monkeydrone"] = "mk3"
@@ -284,6 +285,8 @@
updateicon()
choose_icon(6,sprite)
+*/
+
/mob/living/silicon/robot/drone/Bump(atom/movable/AM as mob|obj, yes)
if (!yes || ( \
diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm
index 12ef687c696..2c5e2b417c6 100644
--- a/code/modules/mob/new_player/sprite_accessories.dm
+++ b/code/modules/mob/new_player/sprite_accessories.dm
@@ -598,6 +598,32 @@
icon_state = "vox_shortquills"
species_allowed = list("Vox")
+ vox_crestedquills
+ name = "Crested Vox Quills"
+ icon_state = "vox_crestedquills"
+ species_allowed = list("Vox")
+
+ vox_tielquills
+ name = "Vox Tiel Quills"
+ icon_state = "vox_tielquills"
+ species_allowed = list("Vox")
+
+ vox_emperorquills
+ name = "Vox Emperor Quills"
+ icon_state = "vox_emperorquills"
+ species_allowed = list("Vox")
+
+ vox_keelquills
+ name = "Vox Keel Quills"
+ icon_state = "vox_keelquills"
+ species_allowed = list("Vox")
+
+ vox_keetquills
+ name = "Vox Keet Quills"
+ icon_state = "vox_keetquills"
+ species_allowed = list("Vox")
+
+
/datum/sprite_accessory/facial_hair
taj_sideburns
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index e01dbaa775b..bd72edb6955 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -86,7 +86,7 @@
M << "[src] blows up in your face."
M.take_organ_damage(0,20)
M.drop_item()
- del(src)
+ qdel(src)
return
if (!user.IsAdvancedToolUser() || istype(user, /mob/living/carbon/monkey/diona))
@@ -127,7 +127,7 @@
in_chamber.def_zone = user.zone_sel.selecting
if(targloc == curloc)
user.bullet_act(in_chamber)
- del(in_chamber)
+ qdel(in_chamber)
update_icon()
return
diff --git a/code/modules/projectiles/guns/energy/hos.dm b/code/modules/projectiles/guns/energy/hos.dm
index 99019e1cd74..b1b932c38d9 100644
--- a/code/modules/projectiles/guns/energy/hos.dm
+++ b/code/modules/projectiles/guns/energy/hos.dm
@@ -1,6 +1,6 @@
/obj/item/weapon/gun/energy/hos
name = "HoS Energy Gun"
- desc = "This is a modern recreation of the antique laser gun. This gun has several unique firemodes, but lacks the ability to recharge over time, its also expensive."
+ desc = "This is a modern recreation of the captain's antique laser gun. This gun has several unique firemodes, but lacks the ability to recharge over time."
icon_state = "hoslaser"
item_state = null //so the human update icon uses the icon_state instead.
icon_override = 'icons/mob/in-hand/guns.dmi'
diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm
index d3c160d0216..4b070675231 100644
--- a/code/modules/reagents/reagent_containers/glass.dm
+++ b/code/modules/reagents/reagent_containers/glass.dm
@@ -299,7 +299,9 @@
del(D)
user.put_in_hands(new /obj/item/weapon/bucket_sensor)
user.unEquip(src)
-
del(src)
+
qdel(src)
+
+ ..()
/obj/item/weapon/reagent_containers/glass/beaker/vial
name = "vial"
diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm
index a6a2e459116..60c4fdd6c37 100644
--- a/code/modules/research/designs/weapon_designs.dm
+++ b/code/modules/research/designs/weapon_designs.dm
@@ -68,6 +68,17 @@
build_path = /obj/item/weapon/grenade/chem_grenade/large
category = list("Weapons")
+/datum/design/tele_shield
+ name = "Telescopic Riot Shield"
+ desc = "An advanced riot shield made of lightweight materials that collapses for easy storage."
+ id = "tele_shield"
+ req_tech = list("combat" = 4, "materials" = 3, "engineering" = 3)
+ build_type = PROTOLATHE
+ materials = list("$metal" = 4000, "$glass" = 5000, "$silver" = 300)
+ build_path = /obj/item/weapon/shield/riot/tele
+ locked = 1
+ category = list("Weapons")
+
/datum/design/lasercannon
name = "Laser Cannon"
desc = "A heavy duty laser cannon."
diff --git a/code/modules/shuttles/shuttle_emergency.dm b/code/modules/shuttles/shuttle_emergency.dm
index 2e7e39d9fea..4350591c548 100644
--- a/code/modules/shuttles/shuttle_emergency.dm
+++ b/code/modules/shuttles/shuttle_emergency.dm
@@ -6,7 +6,7 @@
if (istype(in_use, /obj/machinery/computer/shuttle_control/emergency))
var/obj/machinery/computer/shuttle_control/emergency/C = in_use
C.reset_authorization()
-
+
emergency_shuttle.shuttle_arrived()
/datum/shuttle/ferry/emergency/long_jump(var/area/departing, var/area/destination, var/area/interim, var/travel_time, var/direction)
@@ -37,7 +37,7 @@
var/obj/machinery/computer/shuttle_control/emergency/C = user
if (!C.has_authorization())
return 0
-
+
if(moving_status == SHUTTLE_STRANDED && C.has_authorization())
return 1
return ..()
@@ -45,12 +45,12 @@
/datum/shuttle/ferry/emergency/can_force(var/mob/user)
if (istype(user, /obj/machinery/computer/shuttle_control/emergency))
var/obj/machinery/computer/shuttle_control/emergency/C = user
-
+
//initiating or cancelling a launch ALWAYS requires authorization, but if we are already set to launch anyways than forcing does not.
//this is so that people can force launch if the docking controller cannot safely undock without needing X heads to swipe.
if (process_state != WAIT_LAUNCH && !C.has_authorization())
return 0
-
+
return ..()
/datum/shuttle/ferry/emergency/can_cancel(var/mob/user)
@@ -62,7 +62,7 @@
/datum/shuttle/ferry/emergency/launch(var/user)
if (!can_launch(user)) return
-
+
if(emergency_shuttle.no_escape)
user << "The emergency shuttle has been disabled by Centcom."
return
@@ -155,7 +155,7 @@
/obj/machinery/computer/shuttle_control/emergency/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
read_authorization(W)
..()
-
+
/obj/machinery/computer/shuttle_control/emergency/emag_act(user as mob)
if (!emagged)
user << "\blue You short out the [src]'s authorization protocols."
@@ -214,7 +214,7 @@
"docking_status" = shuttle.docking_controller? shuttle.docking_controller.get_docking_status() : null,
"docking_override" = shuttle.docking_controller? shuttle.docking_controller.override_enabled : null,
"can_launch" = shuttle.can_launch(src),
- "can_cancel" = shuttle.can_cancel(src),
+ //"can_cancel" = shuttle.can_cancel(src),
"can_force" = shuttle.can_force(src),
"auth_list" = auth_list,
"has_auth" = has_auth,
@@ -236,7 +236,7 @@
if(href_list["removeid"])
var/dna_hash = href_list["removeid"]
authorized -= dna_hash
-
+
if(!emagged && href_list["scanid"])
//They selected an empty entry. Try to scan their id.
if (ishuman(usr))
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 9eea53339be..7597231249e 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi
index 7ed0f6e3f79..a7f9adf1844 100644
Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ
diff --git a/icons/mob/in-hand/tools.dmi b/icons/mob/in-hand/tools.dmi
index 61aba754e1b..c589f2402ce 100644
Binary files a/icons/mob/in-hand/tools.dmi and b/icons/mob/in-hand/tools.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index ca5e197734d..3457e915399 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi
index 6156fab8b26..3d93fb8aef7 100644
Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ
diff --git a/icons/mob/uniform_fat.dmi b/icons/mob/uniform_fat.dmi
index 7e93cf3901b..21824ea5389 100644
Binary files a/icons/mob/uniform_fat.dmi and b/icons/mob/uniform_fat.dmi differ
diff --git a/icons/obj/barsigns.dmi b/icons/obj/barsigns.dmi
index a8d57e8fddc..cacaf71b156 100644
Binary files a/icons/obj/barsigns.dmi and b/icons/obj/barsigns.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index 1fdf5bbc625..fa5a45504c7 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index 4d796bb41b7..4a318be3e75 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index 6bed53895d6..880b5346d1e 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/obj/contraband.dmi b/icons/obj/contraband.dmi
index cbf6e94c3f4..40a73329541 100644
Binary files a/icons/obj/contraband.dmi and b/icons/obj/contraband.dmi differ
diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi
index 3aa0cded108..7cee746fc5d 100644
Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index b85721bcc27..3b53aeb7927 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ
diff --git a/icons/obj/library.dmi b/icons/obj/library.dmi
index 3dc1bcadfe8..d576f993bef 100644
Binary files a/icons/obj/library.dmi and b/icons/obj/library.dmi differ
diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi
index 84a99f103c8..cfde5ba0c1b 100644
Binary files a/icons/obj/toy.dmi and b/icons/obj/toy.dmi differ
diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi
index f441c3d5ac4..5a2601f5283 100644
Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ
diff --git a/interface/interface.dm b/interface/interface.dm
index 4362cad34d2..267dfdfaca8 100644
--- a/interface/interface.dm
+++ b/interface/interface.dm
@@ -13,7 +13,7 @@
src << "The wiki URL is not set in the server configuration."
return
-#define CHANGELOG "https://github.com/ParadiseSS13/Paradise/commits/master"
+#define CHANGELOG "https://github.com/ParadiseSS13/Paradise/issues?q=is%3Apr+is%3Aclosed"
/client/verb/changes()
set name = "Changelog"
set desc = "Visit Github to check out the commits."
diff --git a/maps/cyberiad.dmm b/maps/cyberiad.dmm
index d48772168a7..ef48214d023 100644
--- a/maps/cyberiad.dmm
+++ b/maps/cyberiad.dmm
@@ -8542,6 +8542,9 @@
"din" = (/obj/machinery/computer/card/centcom,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
"dio" = (/obj/machinery/computer/card,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
"dip" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/flashbangs{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/flashbangs,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"diq" = (/turf/unsimulated/floor{name = "plating"},/area)
+"dir" = (/turf/unsimulated/floor{name = "plating"},/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/specops/centcom)
+"dis" = (/turf/unsimulated/floor{name = "plating"},/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/specops/centcom)
"diu" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (WEST)"; icon_state = "fakewindows"; dir = 8},/area/centcom/specops)
"div" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows2 (WEST)"; icon_state = "fakewindows2"; dir = 8},/area/centcom/specops)
"diw" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (EAST)"; icon_state = "fakewindows"; dir = 4},/area/centcom/specops)
@@ -8638,7 +8641,6 @@
"dkN" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l"; dir = 4},/turf/space,/area/shuttle/specops/centcom)
"dkO" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/specops/centcom)
"dkP" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "specops_shuttle_fore_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = null; req_access_txt = "13"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
-"dkQ" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/specops/centcom)
"dkR" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "CentComPort"; name = "Security Doors"; opacity = 0},/turf/unsimulated/floor{icon_state = "green"; dir = 8},/area/centcom/evac)
"dkS" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor,/area/centcom/evac)
"dkT" = (/obj/structure/table,/obj/machinery/door_control{desc = "A remote control switch for port-side blast doors."; icon_state = "doorctrl0"; id = "CentComPort"; name = "Security Doors"; pixel_y = -4; req_access_txt = "101"},/obj/machinery/door/window/southleft{dir = 1; name = "security checkpoint"; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/evac)
@@ -8673,7 +8675,6 @@
"dlw" = (/turf/space,/area/shuttle/escape_pod1/centcom)
"dlx" = (/turf/space,/area/shuttle/escape_pod2/centcom)
"dly" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
-"dlz" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/specops/centcom)
"dlA" = (/obj/machinery/door/poddoor{id = "CentComPort"; name = "Security Doors"},/turf/unsimulated/floor{icon_state = "green"; dir = 8},/area/centcom/evac)
"dlB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/evac)
"dlC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/evac)
@@ -12618,7 +12619,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuaabasqasqasqasqasqaabasraabasqasqasqasqasqaabacuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiassamyarLaaiastapfapgaphapiapjasuaplasvaswasxasyaszasAapjasBasCasDasEasFasFasGasHaaqasIasJasKasLaaqasMasNasOaqFaqEasPamfasgaqHashashashasQannasRasSasTaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakqaabapQapQapQapQapQaabapRaabapQapQapQapQapQaabakqaaaaaaajFajFajFajFaaaaaaajFajFajFajFajFajFajFaaaaaaajFajFajFajFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuaaaaaaaaaaabaaaaaaaabasraaaaaaaaaaabaaaaaaaaaacuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiasUamyasVaaiaqcasWasXasYasZataatbatcatdateatfatgathatiatjatkatlatlatmatlatlatnatoatpatqatratsattaaqatuatvatwatxatyatzamfasgatAatBatBatBatCatDatEatFatGaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatHaaaaaaaaaaabaaaaaaaaaapRaaaaaaaaaaabaaaaaaaaaacuaaaaaaaaaaaaaaaaaaaaaaaaajFajFajFajFajFajFajFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuaabaqLaqLaqLaqLaqLaabasraabaqLaqLaqLaqLaqLaabacuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiatIamyatJaaiaqUatKatLatMatNaqZaraatOatPatQatRatPatSarhaqZatTatUatVatUatUatVatUatWaaqarXatXatsatYaaqatZauaaubaucaudaudaueaufaugaaqaaqaaqaaJaaqabmaaiaaiaaiaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaakqaabaohaohaohaohaohaabapRaabaohaohaohaohaohaabakqaaaaaaaaaaaaaaaaaaaaaaaaajFajFajFajFajFajFajFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuaabarzarAarAarAarAarBarCarDarEarEarEarEarFaabacuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaiaaiaaiaaiaaiaaiaaiauhaaiaaiaaiaaiauiacFaujacFacFaujacFaujacFacFabtaaiaaiaukaulaumaunaulaumaunauoaaiaaiaaiaaiaaiaaqaupauqauraurausaurautauuaaqauvauwauxaaJauyauzauAauBaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuaabaoLaoMaoMaoMaoMaoNaoOaoPaoQaoQaoQaoQaoRaabakqaaaaaaaaaaaaaaaaaaaaaaaaajFajFajFajFajFajFajFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuaabarzarAarAarAarAarBarCarDarEarEarEarEarFaabacuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqaaqaaqaaqaaqaaqaaiaaiauhaaiaaiaaiaaiauiacFaujacFacFaujacFaujacFacFabtaaiaaiaukaulaumaunaulaumaunauoaaiaaiaaiaaiaaiaaqaupauqauraurausaurautauuaaqauvauwauxaaJauyauzauAauBaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuaabaoLaoMaoMaoMaoMaoNaoOaoPaoQaoQaoQaoQaoRaabakqaaaaaaaaaaaaaaaaaaaaaaaaajFajFajFajFajFajFajFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuaabasqasqasqasqasqaabasraabasqasqasqasqasqaabacuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqauCauDauEauFauGauHauIauJauIauKauIauIauLauMauMauMauMauMauNauOauPauMauMauMauMauQauMauMauMauMauRauSauTauUauVauWauXauYaaqauZavaavbavcavdaveavfavgaaqavhaviavjaaJavkavlavkavmaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuaaaapQapQapQapQapQaabapRaabapQapQapQapQapQaaaakUaaaaaaaaaaaaaaaaaaaaaaaaajFajFajFajFajFajFajFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatHaaaaaaaaaaabaaaaaaaaaasraaaaaaaaaaabaaaaaaaabacuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqavnavoavpavqavqavravsavtavuauRauRauRavvauRauRauRauRauRavwauRauRauRauRauRauRavxauRauRauRauRavyauRavzauRavAauRauRavBaaqavCavDavEavFavbavGavfavHaaqavIavJavKavLavMavNavOauBaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuaaaaabaaaaaaaaaaaaaabapRaaaaaaaaaaaaaaaaabaaaakqaaaaaaaaaaaaaaaaaaaaaaaaajFajFajFajFajFajFajFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuaabaqLaqLaqLaqLaqLaabasraabaqLaqLaqLaqLaqLaabacuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqavPavQavRavSavTaaqavUavVavWavXavYavZawaawbavVavXavXavXawcavXavXavXavXavXavXawdaweawfawfawfawgawhawiawhawjawkawhawlaaqaaiaaiaaiaaiaaiaaiavfavgaaqawmaviawnaaJavkawoavkavmaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuacuakqaaaaaaaaaaabaabapRaabaaaaaaaaaaaaakqakqakqaaaaaaaaaaaaaaaaaaaaaaaaaaaajFajFajFajFajFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -12931,14 +12932,14 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfTdfTdfTdfTdfTdfTdhUdfTdfTdgTdjodhJdhRdhJdgTdfTdjedjHdjIdjJdjKdfTdiAdhkdhAdhodhoeHydhodhodhpdfydfydgYdgXdgXdgXdhadfydfydhndhodhpdfyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfTdgTdgTdgTdfTdgTdgTdgTdgTdjWdgTdfTdjedjPdjQdjRdjSdfTdiKdhodhodhodhpdiYdhndhodhBdhkdhkdhkdhkdhkdhkdhkdhkdhkdhAdhodhpdfyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfTdicdgfdibdfTdfTdfTdkgdkgdfTdfTdfTdjedjYdjZdkadjedfTdpFdhodhodhodtBdihdhndhodhodhodhodhodhodhodhodhodhodhodhodhodhpdfyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkbdkcdkdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfTdipdiddiedfTaaadktdkudkvdktaaadfTdkhdtCdkidkjdkkdfTduadhNdhNdhNeHxdiydkldhNdhNdhNdhNdhNdhOdhodhMdhNdhNdhNdhNdhNdkmdfyaaaaaaaaaaaaaaaaaaaaaaaaaaadkbdkndkodkpdkdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfTdfTdfTdfTdfTaaadkAdkBdkCdkAaaadfTdfTdfTdfTdfTdfTdfTdfydfydfydfydfydfydfydfydfydfydfydfydfydkwdfydfydfydfydfydfydfydfyaaaaaaaaaaaaaaaaaaaaaaaadkbdkndkxdkydkzdkpdkdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkNdkOdkOdkOdkOdkPdkPdkOdkOdkQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkDdkEdkFdkGdkHdkIdkDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkcdkJdkKdkLdkKdkMdkcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkXdkYdkZdladlbdlcdlcdlddledkOdkQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkDdkRdkSdkTdkSdkUdkDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkbdkndkVdkLdkLdkLdkWdkpdkdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkXdkYdlmdlcdlcdlcdlcdlcdlcdlndlodfTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkDdlfdlgdkGdlhdkUdkDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlidljdlkdkLdkLdkLdlldkLdliaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkXdkYdlcdlydlydlydlydlydlydkOdlzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkDdlpdlqdlrdlBdlPdkDdkDdkDdkDdkDdkDdkDdkDdkDaaaaaadkbdlsdltdlsdlsdlsdludlsdlvdlsdltdlsdkdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlwdlwdlwaaadlxdlxdlxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlKdkOdkOdkOdkOdkOdkOdkOdkOdlzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkDdkDdlAdlCdlDdlCdkEdkIdlqdlEdlEdlFdlEdlEdlFdkDaaaaaadlidlGdlHdlIdlJdlGdkLdlIdlJdlGdlHdlIdliaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlwdlwdlwaaadlxdlxdlxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlLdkEdlMdlMdlMdlMdkFdkUdlTdlEdkDdlNdlOdlOdlPdkDaaaaaadlidlQdkLdlIdlRdlGdkLdlIdlRdlGdkLdlSdliaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlwdlwdlwaaadlxdlxdlxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfTdipdiddiedfTdiqdktdkudkvdktdiqdfTdkhdtCdkidkjdkkdfTduadhNdhNdhNeHxdiydkldhNdhNdhNdhNdhNdhOdhodhMdhNdhNdhNdhNdhNdkmdfyaaaaaaaaaaaaaaaaaaaaaaaaaaadkbdkndkodkpdkdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfTdfTdfTdfTdfTdiqdkAdkBdkCdkAdiqdfTdfTdfTdfTdfTdfTdfTdfydfydfydfydfydfydfydfydfydfydfydfydfydkwdfydfydfydfydfydfydfydfyaaaaaaaaaaaaaaaaaaaaaaaadkbdkndkxdkydkzdkpdkdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQgdkNdkOdkOdkOdkOdkPdkPdkOdkOdirdiqcQgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkDdkEdkFdkGdkHdkIdkDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkcdkJdkKdkLdkKdkMdkcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQgdkXdkYdkZdladlbdlcdlcdlddledkOdircQgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkDdkRdkSdkTdkSdkUdkDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkbdkndkVdkLdkLdkLdkWdkpdkdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQgdkXdkYdlmdlcdlcdlcdlcdlcdlcdlndlodfTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkDdlfdlgdkGdlhdkUdkDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlidljdlkdkLdkLdkLdlldkLdliaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQgdkXdkYdlcdlydlydlydlydlydlydkOdiscQgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkDdlpdlqdlrdlBdlPdkDdkDdkDdkDdkDdkDdkDdkDdkDaaaaaadkbdlsdltdlsdlsdlsdludlsdlvdlsdltdlsdkdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlwdlwdlwaaadlxdlxdlxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQgdlKdkOdkOdkOdkOdkOdkOdkOdkOdisdiqcQgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkDdkDdlAdlCdlDdlCdkEdkIdlqdlEdlEdlFdlEdlEdlFdkDaaaaaadlidlGdlHdlIdlJdlGdkLdlIdlJdlGdlHdlIdliaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlwdlwdlwaaadlxdlxdlxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQgcQgcQgcQgcQgcQgcQgcQgcQgcQgcQgcQgcQgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlLdkEdlMdlMdlMdlMdkFdkUdlTdlEdkDdlNdlOdlOdlPdkDaaaaaadlidlQdkLdlIdlRdlGdkLdlIdlRdlGdkLdlSdliaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlwdlwdlwaaadlxdlxdlxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlTdlfdlUdlVdkGdlUdlVdkUdlTdlEdkDdlWdlWdlWdlWdkDaaaaaadkcdlGdkLdlIdlRdlGdkLdlIdlRdlGdkLdlIdkcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlXdlYdlZdmadmbdlwdlwdlwaaadlxdlxdlxdlXdlYdlZdmadmbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlTdlfdlUdlVdkGdlUdlVdkUdlCdlEdkDdkGdkGdkGdmcdmddlOdlPdlidlGdkLdlIdmedlGdkLdlIdmedlGdkLdlIdliaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmfdmgdmgdmgdmhdmidmjdmidmidmidmkdmidmldmgdmgdmgdmfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlTdlfdlUdlVdkGdlUdlVdkUdmmdkSdkDdmndkGdkGdmodmpdmqdmpdmrdkLdkLdkLdkLdkLdkLdkLdkLdkLdkLdlIdliaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmfdmsdmsdmtdmudmvdmwdmxdmydmzdmAdmvdmBdmCdmsdmsdmfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/nano/templates/escape_shuttle_control_console.tmpl b/nano/templates/escape_shuttle_control_console.tmpl
index f3331313ad0..61627f558a9 100644
--- a/nano/templates/escape_shuttle_control_console.tmpl
+++ b/nano/templates/escape_shuttle_control_console.tmpl
@@ -77,7 +77,7 @@