Merge branch 'release' of https://github.com/VOREStation/VOREStation into uppstream-update

This commit is contained in:
izac112
2024-01-22 05:18:14 +01:00
111 changed files with 2563 additions and 2522 deletions
+1 -1
View File
@@ -49,7 +49,7 @@
// Chemistry lists.
var/list/tachycardics = list("coffee", "inaprovaline", "hyperzine", "nitroglycerin", "thirteenloko", "nicotine") // Increase heart rate.
var/list/bradycardics = list("neurotoxin", "cryoxadone", "clonexadone", "bliss", "stoxin", "ambrosia_extract") // Decrease heart rate.
var/list/heartstopper = list("potassium_chlorophoride", "zombie_powder") // This stops the heart.
var/list/heartstopper = list("potassium_chlorophoride", "zombiepowder") // This stops the heart.
var/list/cheartstopper = list("potassium_chloride") // This stops the heart when overdose is met. -- c = conditional
#define MAX_PILL_SPRITE 24 //max icon state of the pill sprites
-2
View File
@@ -665,9 +665,7 @@ var/global/list/xenobio_gold_mobs_hostile = list(
/mob/living/simple_mob/animal/giant_spider/webslinger,
/mob/living/simple_mob/animal/giant_spider/phorogenic,
/mob/living/simple_mob/animal/giant_spider/carrier,
/mob/living/simple_mob/animal/giant_spider/nurse,
/mob/living/simple_mob/animal/giant_spider/ion,
/mob/living/simple_mob/animal/giant_spider/nurse/queen,
/mob/living/simple_mob/animal/sif/diyaab,
/mob/living/simple_mob/animal/sif/duck,
/mob/living/simple_mob/animal/sif/frostfly,
+6 -4
View File
@@ -240,7 +240,8 @@ var/obj/screen/robot_inventory
var/display_rows = -round(-(r.module.modules.len) / 8)
r.robot_modules_background.screen_loc = "CENTER-4:16,SOUTH+1:7 to CENTER+3:16,SOUTH+[display_rows]:7"
r.client.screen += r.robot_modules_background
if(r.client)
r.client.screen += r.robot_modules_background
var/x = -4 //Start at CENTER-4,SOUTH+1
var/y = 1
@@ -258,7 +259,7 @@ var/obj/screen/robot_inventory
r.module.modules.Remove(r.module.emag)
for(var/atom/movable/A in r.module.modules)
if( (A != r.module_state_1) && (A != r.module_state_2) && (A != r.module_state_3) )
if(r.client && (A != r.module_state_1) && (A != r.module_state_2) && (A != r.module_state_3) )
//Module is not currently active
r.client.screen += A
if(x < 0)
@@ -276,11 +277,12 @@ var/obj/screen/robot_inventory
//Modules display is hidden
//r.client.screen -= robot_inventory //"store" icon
for(var/atom/A in r.module.modules)
if( (A != r.module_state_1) && (A != r.module_state_2) && (A != r.module_state_3) )
if(r.client && (A != r.module_state_1) && (A != r.module_state_2) && (A != r.module_state_3) )
//Module is not currently active
r.client.screen -= A
r.shown_robot_modules = 0
r.client.screen -= r.robot_modules_background
if(r.client)
r.client.screen -= r.robot_modules_background
/mob/living/silicon/robot/update_hud()
if(modtype)
+1 -1
View File
@@ -36,7 +36,7 @@ GLOBAL_REAL(GLOB, /datum/controller/global_vars)
if(!statclick)
statclick = new/obj/effect/statclick/debug(null, "Initializing...", src)
stat("GLOB:", "Button Removed Due To Crashing") //VOREStation Edit
stat("GLOB:", statclick.update("Edit"))
/datum/controller/global_vars/vv_edit_var(var_name, var_value)
if(gvars_datum_protected_varlist[var_name])
+18 -14
View File
@@ -12,6 +12,8 @@ var/datum/antagonist/highlander/highlanders
initial_spawn_req = 3
initial_spawn_target = 5
id_type = /obj/item/weapon/card/id/centcom/ERT
/datum/antagonist/highlander/New()
..()
highlanders = src
@@ -32,26 +34,28 @@ var/datum/antagonist/highlander/highlanders
if(!..())
return
for (var/obj/item/I in player)
if (istype(I, /obj/item/weapon/implant))
continue
qdel(I)
// drop original items! It used to be a loop that just Qdeled everything including your organs!
// Dropping because of non-oxy breathers... That would suck wouldn't it?
player.drop_from_inventory(player.get_equipped_item(slot_wear_id))
player.drop_from_inventory(player.get_equipped_item(slot_wear_suit))
player.drop_from_inventory(player.get_equipped_item(slot_w_uniform))
player.drop_from_inventory(player.get_equipped_item(slot_l_ear))
player.drop_from_inventory(player.get_equipped_item(slot_head))
player.drop_from_inventory(player.get_equipped_item(slot_l_hand))
player.drop_from_inventory(player.get_equipped_item(slot_shoes))
player.drop_from_inventory(player.get_equipped_item(slot_l_store))
// highlanders!
player.equip_to_slot_or_del(new /obj/item/clothing/under/kilt(player), slot_w_uniform)
player.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(player), slot_l_ear)
player.equip_to_slot_or_del(new /obj/item/clothing/head/beret(player), slot_head)
player.equip_to_slot_or_del(new /obj/item/weapon/material/sword(player), slot_l_hand)
player.equip_to_slot_or_del(new /obj/item/clothing/shoes/boots/combat(player), slot_shoes)
player.equip_to_slot_or_del(new /obj/item/weapon/pinpointer(get_turf(player)), slot_l_store)
var/obj/item/weapon/card/id/W = new(player)
W.name = "[player.real_name]'s ID Card"
W.icon_state = "centcom"
W.access = get_all_station_access().Copy()
W.access |= get_all_centcom_access()
W.assignment = "Highlander"
W.registered_name = player.real_name
player.equip_to_slot_or_del(W, slot_wear_id)
var/obj/item/weapon/card/id/id = create_id("Highlander", player)
if(id)
id.access |= get_all_station_access()
id.icon_state = "centcom"
create_radio(DTH_FREQ, player)
/proc/only_one()
@@ -30,7 +30,6 @@
"BAT" = /mob/living/simple_mob/animal/space/bats,
"SPIDER" = /mob/living/simple_mob/animal/giant_spider,
"SPIDER HUNTER" = /mob/living/simple_mob/animal/giant_spider/hunter,
"SPIDER NURSE" = /mob/living/simple_mob/animal/giant_spider/nurse,
"CARP" = /mob/living/simple_mob/animal/space/carp,
"BEAR" = /mob/living/simple_mob/animal/space/bear
)
@@ -57,4 +56,4 @@
// Now we hurt their new pal, because being forcefully abducted by teleportation can't be healthy.
summoned.adjustBruteLoss(summoned.getMaxHealth() * 0.3) // Lose 30% of max health on arrival (but could be healed back up).
summoned.adjustBruteLoss(summoned.getMaxHealth() * 0.3) // Lose 30% of max health on arrival (but could be healed back up).
@@ -104,7 +104,6 @@ var/global/list/semirandom_mob_spawner_decisions = list()
list(/mob/living/simple_mob/animal/sif/siffet),
list(/mob/living/simple_mob/animal/sif/tymisian),
list(
/mob/living/simple_mob/animal/giant_spider/nurse = 10,
/mob/living/simple_mob/animal/giant_spider/electric = 5,
/mob/living/simple_mob/animal/giant_spider/frost = 5,
/mob/living/simple_mob/animal/giant_spider/hunter = 10,
@@ -448,7 +447,6 @@ var/global/list/semirandom_mob_spawner_decisions = list()
possible_mob_types = list(
list(
/mob/living/simple_mob/animal/giant_spider/nurse = 10,
/mob/living/simple_mob/animal/giant_spider/electric = 5,
/mob/living/simple_mob/animal/giant_spider/frost = 5,
/mob/living/simple_mob/animal/giant_spider/hunter = 10,
+1 -1
View File
@@ -154,7 +154,7 @@
var/amount_grown = 0
var/obj/machinery/atmospherics/unary/vent_pump/entry_vent
var/travelling_in_vent = 0
var/list/grow_as = list(/mob/living/simple_mob/animal/giant_spider, /mob/living/simple_mob/animal/giant_spider/nurse, /mob/living/simple_mob/animal/giant_spider/hunter)
var/list/grow_as = list(/mob/living/simple_mob/animal/giant_spider, /mob/living/simple_mob/animal/giant_spider/hunter)
var/faction = "spiders"
var/stunted = FALSE
@@ -309,3 +309,17 @@ var/global/mob/living/carbon/human/dummy/mannequin/sleevemate_mob
icon_state = "[initial(icon_state)]_on"
else
icon_state = initial(icon_state)
/obj/item/device/sleevemate/emag_act(var/remaining_charges, var/mob/user)
to_chat(user,"<span class='danger'>You hack [src]!</span>")
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, src.loc)
spark_system.start()
playsound(src, "sparks", 50, 1)
if(istype(src.loc,/mob/living))
var/mob/living/L = src.loc
L.unEquip(src)
src.forceMove(get_turf(src))
new /obj/item/device/bodysnatcher(src.loc)
qdel(src)
return 1
@@ -635,7 +635,6 @@
list(/mob/living/simple_mob/animal/sif/siffet),
list(/mob/living/simple_mob/animal/sif/tymisian),
list(
/mob/living/simple_mob/animal/giant_spider/nurse = 10,
/mob/living/simple_mob/animal/giant_spider/electric = 5,
/mob/living/simple_mob/animal/giant_spider/frost = 5,
/mob/living/simple_mob/animal/giant_spider/hunter = 10,
@@ -1,184 +1,184 @@
// SEE code/modules/materials/materials.dm FOR DETAILS ON INHERITED DATUM.
// This class of weapons takes force and appearance data from a material datum.
// They are also fragile based on material data and many can break/smash apart.
/obj/item/weapon/material
health = 10
hitsound = 'sound/weapons/bladeslice.ogg'
gender = NEUTER
throw_speed = 3
throw_range = 7
w_class = ITEMSIZE_NORMAL
sharp = FALSE
edge = FALSE
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_material.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_material.dmi',
)
var/applies_material_colour = 1
var/unbreakable = 0 //Doesn't lose health
var/fragile = 0 //Shatters when it dies
var/dulled = 0 //Has gone dull
var/can_dull = 1 //Can it go dull?
var/force_divisor = 0.5
var/thrown_force_divisor = 0.5
var/dulled_divisor = 0.5 //Just drops the damage by half
var/default_material = MAT_STEEL
var/datum/material/material
var/drops_debris = 1
var/named_from_material = 1 //YW EDIT, Does it prepend the material's name to it's name?
/obj/item/weapon/material/New(var/newloc, var/material_key)
..(newloc)
if(!material_key)
material_key = default_material
set_material(material_key)
if(!material)
qdel(src)
return
matter = material.get_matter()
if(matter.len)
for(var/material_type in matter)
if(!isnull(matter[material_type]))
matter[material_type] *= force_divisor // May require a new var instead.
if(!(material.conductive))
src.flags |= NOCONDUCT
/obj/item/weapon/material/get_material()
return material
/obj/item/weapon/material/proc/update_force()
if(edge || sharp)
force = material.get_edge_damage()
else
force = material.get_blunt_damage()
force = round(force*force_divisor)
if(dulled)
force = round(force*dulled_divisor)
throwforce = round(material.get_blunt_damage()*thrown_force_divisor)
//spawn(1)
// to_world("[src] has force [force] and throwforce [throwforce] when made from default material [material.name]")
/obj/item/weapon/material/proc/set_material(var/new_material)
material = get_material_by_name(new_material)
if(!material)
qdel(src)
else
if(named_from_material) //YW EDIT
name = "[material.display_name] [initial(name)]"
health = round(material.integrity/10)
if(applies_material_colour)
color = material.icon_colour
if(material.products_need_process())
START_PROCESSING(SSobj, src)
update_force()
/obj/item/weapon/material/Destroy()
STOP_PROCESSING(SSobj, src)
. = ..()
/obj/item/weapon/material/apply_hit_effect()
..()
if(!unbreakable)
if(material.is_brittle())
health = 0
else if(!prob(material.hardness))
health--
check_health()
/obj/item/weapon/material/attackby(obj/item/weapon/W, mob/user)
if(istype(W, /obj/item/weapon/whetstone))
var/obj/item/weapon/whetstone/whet = W
repair(whet.repair_amount, whet.repair_time, user)
if(istype(W, /obj/item/weapon/material/sharpeningkit))
var/obj/item/weapon/material/sharpeningkit/SK = W
repair(SK.repair_amount, SK.repair_time, user)
..()
/obj/item/weapon/material/proc/check_health(var/consumed)
if(health<=0)
health = 0
if(fragile)
shatter(consumed)
else if(!dulled && can_dull)
dull()
/obj/item/weapon/material/proc/shatter(var/consumed)
var/turf/T = get_turf(src)
T.visible_message("<span class='danger'>\The [src] [material.destruction_desc]!</span>")
if(istype(loc, /mob/living))
var/mob/living/M = loc
M.drop_from_inventory(src)
playsound(src, "shatter", 70, 1)
if(!consumed && drops_debris) material.place_shard(T)
qdel(src)
/obj/item/weapon/material/proc/dull()
var/turf/T = get_turf(src)
T.visible_message("<span class='danger'>\The [src] goes dull!</span>")
playsound(src, "shatter", 70, 1)
dulled = 1
if(is_sharp() || has_edge())
sharp = FALSE
edge = FALSE
/obj/item/weapon/material/proc/repair(var/repair_amount, var/repair_time, mob/living/user)
if(!fragile)
if(health < initial(health))
user.visible_message("[user] begins repairing \the [src].", "You begin repairing \the [src].")
if(do_after(user, repair_time))
user.visible_message("[user] has finished repairing \the [src]", "You finish repairing \the [src].")
health = min(health + repair_amount, initial(health))
dulled = 0
sharp = initial(sharp)
edge = initial(edge)
else
to_chat(user, "<span class='notice'>[src] doesn't need repairs.</span>")
else
to_chat(user, "<span class='warning'>You can't repair \the [src].</span>")
return
/obj/item/weapon/material/proc/sharpen(var/material, var/sharpen_time, var/kit, mob/living/M)
if(!fragile)
if(health < initial(health))
to_chat(M, "You should repair [src] first. Try using [kit] on it.")
return FALSE
M.visible_message("[M] begins to replace parts of [src] with [kit].", "You begin to replace parts of [src] with [kit].")
if(do_after(usr, sharpen_time))
M.visible_message("[M] has finished replacing parts of [src].", "You finish replacing parts of [src].")
src.set_material(material)
return TRUE
else
to_chat(M, "<span class = 'warning'>You can't sharpen and re-edge [src].</span>")
return FALSE
/*
Commenting this out pending rebalancing of radiation based on small objects.
/obj/item/weapon/material/process()
if(!material.radioactivity)
return
for(var/mob/living/L in range(1,src))
L.apply_effect(round(material.radioactivity/30),IRRADIATE,0)
*/
/*
// Commenting this out while fires are so spectacularly lethal, as I can't seem to get this balanced appropriately.
/obj/item/weapon/material/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
TemperatureAct(exposed_temperature)
// This might need adjustment. Will work that out later.
/obj/item/weapon/material/proc/TemperatureAct(temperature)
health -= material.combustion_effect(get_turf(src), temperature, 0.1)
check_health(1)
/obj/item/weapon/material/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
if(material.ignition_point && WT.remove_fuel(0, user))
TemperatureAct(150)
else
return ..()
*/
// SEE code/modules/materials/materials.dm FOR DETAILS ON INHERITED DATUM.
// This class of weapons takes force and appearance data from a material datum.
// They are also fragile based on material data and many can break/smash apart.
/obj/item/weapon/material
health = 10
hitsound = 'sound/weapons/bladeslice.ogg'
gender = NEUTER
throw_speed = 3
throw_range = 7
w_class = ITEMSIZE_NORMAL
sharp = FALSE
edge = FALSE
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_material.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_material.dmi',
)
var/applies_material_colour = 1
var/unbreakable = 0 //Doesn't lose health
var/fragile = 0 //Shatters when it dies
var/dulled = 0 //Has gone dull
var/can_dull = 1 //Can it go dull?
var/force_divisor = 0.5
var/thrown_force_divisor = 0.5
var/dulled_divisor = 0.5 //Just drops the damage by half
var/default_material = MAT_STEEL
var/datum/material/material
var/drops_debris = 1
var/named_from_material = 1 //YW EDIT, Does it prepend the material's name to it's name?
/obj/item/weapon/material/New(var/newloc, var/material_key)
..(newloc)
if(!material_key)
material_key = default_material
set_material(material_key)
if(!material)
qdel(src)
return
matter = material.get_matter()
if(matter.len)
for(var/material_type in matter)
if(!isnull(matter[material_type]))
matter[material_type] *= force_divisor // May require a new var instead.
if(!(material.conductive))
src.flags |= NOCONDUCT
/obj/item/weapon/material/get_material()
return material
/obj/item/weapon/material/proc/update_force()
if(edge || sharp)
force = material.get_edge_damage()
else
force = material.get_blunt_damage()
force = round(force*force_divisor)
if(dulled)
force = round(force*dulled_divisor)
throwforce = round(material.get_blunt_damage()*thrown_force_divisor)
//spawn(1)
// to_world("[src] has force [force] and throwforce [throwforce] when made from default material [material.name]")
/obj/item/weapon/material/proc/set_material(var/new_material)
material = get_material_by_name(new_material)
if(!material)
qdel(src)
else
if(named_from_material) //YW EDIT
name = "[material.display_name] [initial(name)]"
health = round(material.integrity/10)
if(applies_material_colour)
color = material.icon_colour
if(material.products_need_process())
START_PROCESSING(SSobj, src)
update_force()
/obj/item/weapon/material/Destroy()
STOP_PROCESSING(SSobj, src)
. = ..()
/obj/item/weapon/material/apply_hit_effect()
..()
if(!unbreakable)
if(material.is_brittle())
health = 0
else if(!prob(material.hardness))
health--
check_health()
/obj/item/weapon/material/attackby(obj/item/weapon/W, mob/user)
if(istype(W, /obj/item/weapon/whetstone))
var/obj/item/weapon/whetstone/whet = W
repair(whet.repair_amount, whet.repair_time, user)
if(istype(W, /obj/item/weapon/material/sharpeningkit))
var/obj/item/weapon/material/sharpeningkit/SK = W
repair(SK.repair_amount, SK.repair_time, user)
..()
/obj/item/weapon/material/proc/check_health(var/consumed)
if(health<=0)
health = 0
if(fragile)
shatter(consumed)
else if(!dulled && can_dull)
dull()
/obj/item/weapon/material/proc/shatter(var/consumed)
var/turf/T = get_turf(src)
T.visible_message("<span class='danger'>\The [src] [material.destruction_desc]!</span>")
if(istype(loc, /mob/living))
var/mob/living/M = loc
M.drop_from_inventory(src)
playsound(src, "shatter", 70, 1)
if(!consumed && drops_debris) material.place_shard(T)
qdel(src)
/obj/item/weapon/material/proc/dull()
var/turf/T = get_turf(src)
T.visible_message("<span class='danger'>\The [src] goes dull!</span>")
playsound(src, "shatter", 70, 1)
dulled = 1
if(is_sharp() || has_edge())
sharp = FALSE
edge = FALSE
/obj/item/weapon/material/proc/repair(var/repair_amount, var/repair_time, mob/living/user)
if(!fragile)
if(health < initial(health))
user.visible_message("[user] begins repairing \the [src].", "You begin repairing \the [src].")
if(do_after(user, repair_time))
user.visible_message("[user] has finished repairing \the [src]", "You finish repairing \the [src].")
health = min(health + repair_amount, initial(health))
dulled = 0
sharp = initial(sharp)
edge = initial(edge)
else
to_chat(user, "<span class='notice'>[src] doesn't need repairs.</span>")
else
to_chat(user, "<span class='warning'>You can't repair \the [src].</span>")
return
/obj/item/weapon/material/proc/sharpen(var/material, var/sharpen_time, var/kit, mob/living/M)
if(!fragile && src.material.can_sharpen)
if(health < initial(health))
to_chat(M, "You should repair [src] first. Try using [kit] on it.")
return FALSE
M.visible_message("[M] begins to replace parts of [src] with [kit].", "You begin to replace parts of [src] with [kit].")
if(do_after(usr, sharpen_time))
M.visible_message("[M] has finished replacing parts of [src].", "You finish replacing parts of [src].")
src.set_material(material)
return TRUE
else
to_chat(M, "<span class = 'warning'>You can't sharpen and re-edge [src].</span>")
return FALSE
/*
Commenting this out pending rebalancing of radiation based on small objects.
/obj/item/weapon/material/process()
if(!material.radioactivity)
return
for(var/mob/living/L in range(1,src))
L.apply_effect(round(material.radioactivity/30),IRRADIATE,0)
*/
/*
// Commenting this out while fires are so spectacularly lethal, as I can't seem to get this balanced appropriately.
/obj/item/weapon/material/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
TemperatureAct(exposed_temperature)
// This might need adjustment. Will work that out later.
/obj/item/weapon/material/proc/TemperatureAct(temperature)
health -= material.combustion_effect(get_turf(src), temperature, 0.1)
check_health(1)
/obj/item/weapon/material/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
if(material.ignition_point && WT.remove_fuel(0, user))
TemperatureAct(150)
else
return ..()
*/
@@ -65,7 +65,8 @@
return ..()
/obj/item/weapon/storage/laundry_basket/dropped(mob/user as mob)
QDEL_NULL(linked)
if(linked)
QDEL_NULL(linked)
return ..()
/obj/item/weapon/storage/laundry_basket/show_to(mob/user as mob)
@@ -82,6 +83,6 @@
use_to_pickup = FALSE
/obj/item/weapon/storage/laundry_basket/offhand/dropped(mob/user as mob)
user.drop_from_inventory(linked)
if(user.isEquipped(linked))
user.drop_from_inventory(linked)
return
+1 -2
View File
@@ -132,8 +132,7 @@
mob_wander_distance = 4
/obj/random/mob/spider/item_to_spawn()
return pick(prob(22);/mob/living/simple_mob/animal/giant_spider/nurse,
prob(33);/mob/living/simple_mob/animal/giant_spider/hunter,
return pick(prob(33);/mob/living/simple_mob/animal/giant_spider/hunter,
prob(45);/mob/living/simple_mob/animal/giant_spider)
/obj/random/mob/spider/nurse
+11
View File
@@ -198,6 +198,17 @@ var/list/flooring_types
'sound/effects/footstep/mud3.ogg',
'sound/effects/footstep/mud4.ogg'))
/decl/flooring/rock
name = "rocks"
desc = "Hard as a rock."
icon = 'icons/turf/outdoors.dmi'
icon_base = "rock"
footstep_sounds = list("human" = list(
'sound/effects/footstep/LightStone1.ogg',
'sound/effects/footstep/LightStone2.ogg',
'sound/effects/footstep/LightStone3.ogg',
'sound/effects/footstep/LightStone4.ogg'))
/decl/flooring/asteroid
name = "coarse sand"
desc = "You got a pebble in your shoe just looking at it."
@@ -123,6 +123,7 @@ var/list/turf_edge_cache = list()
desc = "Hard as a rock."
icon_state = "rock"
edge_blending_priority = 1
initial_flooring = /decl/flooring/rock
/turf/simulated/floor/outdoors/rocks/caves
outdoors = OUTDOORS_NO
@@ -185,4 +186,4 @@ var/list/turf_edge_cache = list()
icon = 'icons/turf/concrete.dmi'
icon_state = "concrete_dark"
desc = "Some sort of material composite road."
edge_blending_priority = -1
edge_blending_priority = -1
+2 -2
View File
@@ -71,9 +71,9 @@
water_state = "cult"
/turf/simulated/floor/water/underwater/ruins
icon = 'maps/atoll/icons/turfs/marble.dmi'
icon = 'maps/redgate/falls/icons/turfs/marble.dmi'
icon_state = "1" // So it shows up in the map editor as water.
water_icon = 'maps/atoll/icons/turfs/marble.dmi'
water_icon = 'maps/redgate/falls/icons/turfs/marble.dmi'
water_state = "1"
/turf/simulated/floor/water/underwater/sand
+29
View File
@@ -73,6 +73,27 @@
water_breath.adjust_gas(gasid, BREATH_MOLES) // They have no oxygen, but non-zero moles and temp
water_breath.temperature = above_air.temperature
return water_breath
if(L && L.is_bad_swimmer() && depth >= 2 && !L.buckled())
if(prob(10))
L.visible_message("<span class='notice'>[L] splashes wildly.</span>","<span class='warning'>You struggle to keep your head above the water!</span>")
if(L.can_breathe_water())
var/datum/gas_mixture/water_breath = new()
var/datum/gas_mixture/above_air = return_air()
var/amount = 300
water_breath.adjust_gas("oxygen", amount) // Assuming water breathes just extract the oxygen directly from the water.
water_breath.temperature = above_air.temperature
return water_breath
else
var/gasid = "carbon_dioxide"
if(ishuman(L))
var/mob/living/carbon/human/H = L
if(H.species && H.species.exhale_type)
gasid = H.species.exhale_type
var/datum/gas_mixture/water_breath = new()
var/datum/gas_mixture/above_air = return_air()
water_breath.adjust_gas(gasid, BREATH_MOLES) // They have no oxygen, but non-zero moles and temp
water_breath.temperature = above_air.temperature
return water_breath
return return_air() // Otherwise their head is above the water, so get the air from the atmosphere instead.
/turf/simulated/floor/water/Entered(atom/movable/AM, atom/oldloc)
@@ -132,6 +153,14 @@
return species.can_breathe_water()
return ..()
/mob/living/proc/is_bad_swimmer()
return FALSE
/mob/living/carbon/human/is_bad_swimmer()
if(species)
return species.is_bad_swimmer()
return ..()
/mob/living/proc/check_submerged()
if(buckled)
return 0
+1 -1
View File
@@ -3,7 +3,7 @@
set name = "Modify Robot Module"
set desc = "Allows to add or remove modules to/from robots."
set category = "Admin"
if(!check_rights(R_ADMIN))
if(!check_rights(R_ADMIN, R_FUN, R_VAREDIT))
return
if(!istype(target) || !target.module)
+3 -3
View File
@@ -2,9 +2,9 @@
set name = "Resize"
set desc = "Resizes any living mob without any restrictions on size."
set category = "Fun"
if(!check_rights(R_ADMIN, R_FUN))
if(!check_rights(R_ADMIN, R_FUN, R_VAREDIT))
return
var/size_multiplier = tgui_input_number(usr, "Input size multiplier.", "Resize", 1)
if(!size_multiplier)
return //cancelled
@@ -21,4 +21,4 @@
L.resize(size_multiplier, animate = TRUE, uncapped = TRUE, ignore_prefs = TRUE)
log_and_message_admins("has changed [key_name(L)]'s size multiplier to [size_multiplier].")
feedback_add_details("admin_verb","RESIZE")
feedback_add_details("admin_verb","RESIZE")
@@ -15,269 +15,271 @@
if (!islist && !istype(D))
return
var/title = ""
var/refid = "\ref[D]"
var/icon/sprite
var/hash
//VOREStation Edit Start - the rest of this proc in a spawn
spawn(0)
var/title = ""
var/refid = "\ref[D]"
var/icon/sprite
var/hash
var/type = /list
if (!islist)
type = D.type
var/type = /list
if (!islist)
type = D.type
if(istype(D, /atom))
var/atom/AT = D
if(AT.icon && AT.icon_state)
sprite = new /icon(AT.icon, AT.icon_state)
hash = md5(AT.icon)
hash = md5(hash + AT.icon_state)
src << browse_rsc(sprite, "vv[hash].png")
if(istype(D, /atom))
var/atom/AT = D
if(AT.icon && AT.icon_state)
sprite = new /icon(AT.icon, AT.icon_state)
hash = md5(AT.icon)
hash = md5(hash + AT.icon_state)
src << browse_rsc(sprite, "vv[hash].png")
title = "[D] (\ref[D]) = [type]"
var/formatted_type = replacetext("[type]", "/", "<wbr>/")
title = "[D] (\ref[D]) = [type]"
var/formatted_type = replacetext("[type]", "/", "<wbr>/")
var/sprite_text
if(sprite)
sprite_text = "<img src='vv[hash].png'></td><td>"
var/list/header = islist(D)? list("<b>/list</b>") : D.vv_get_header()
var/sprite_text
if(sprite)
sprite_text = "<img src='vv[hash].png'></td><td>"
var/list/header = islist(D)? list("<b>/list</b>") : D.vv_get_header()
var/marked
if(holder && holder.marked_datum && holder.marked_datum == D)
marked = VV_MSG_MARKED
var/varedited_line = ""
if(!islist && (D.datum_flags & DF_VAR_EDITED))
varedited_line = VV_MSG_EDITED
var/deleted_line
if(!islist && D.gc_destroyed)
deleted_line = VV_MSG_DELETED
var/marked
if(holder && holder.marked_datum && holder.marked_datum == D)
marked = VV_MSG_MARKED
var/varedited_line = ""
if(!islist && (D.datum_flags & DF_VAR_EDITED))
varedited_line = VV_MSG_EDITED
var/deleted_line
if(!islist && D.gc_destroyed)
deleted_line = VV_MSG_DELETED
var/list/dropdownoptions = list()
var/autoconvert_dropdown = FALSE
if (islist)
dropdownoptions = list(
"---",
"Add Item" = "?_src_=vars;[HrefToken()];[VV_HK_LIST_ADD]=TRUE;target=[refid]",
"Remove Nulls" = "?_src_=vars;[HrefToken()];[VV_HK_LIST_ERASE_NULLS]=TRUE;target=[refid]",
"Remove Dupes" = "?_src_=vars;[HrefToken()];[VV_HK_LIST_ERASE_DUPES]=TRUE;target=[refid]",
"Set len" = "?_src_=vars;[HrefToken()];[VV_HK_LIST_SET_LENGTH]=TRUE;target=[refid]",
"Shuffle" = "?_src_=vars;[HrefToken()];[VV_HK_LIST_SHUFFLE]=TRUE;target=[refid]",
// "Show VV To Player" = "?_src_=vars;[HrefToken()];[VV_HK_EXPOSE]=TRUE;target=[refid]" // TODO - Not yet implemented for lists
)
autoconvert_dropdown = TRUE
else
dropdownoptions = D.vv_get_dropdown()
var/list/dropdownoptions_html = list()
if(autoconvert_dropdown)
for (var/name in dropdownoptions)
var/link = dropdownoptions[name]
if (link)
dropdownoptions_html += "<option value='[link]'>[name]</option>"
else
dropdownoptions_html += "<option value>[name]</option>"
else
dropdownoptions_html = dropdownoptions + D.get_view_variables_options()
var/list/dropdownoptions = list()
var/autoconvert_dropdown = FALSE
if (islist)
dropdownoptions = list(
"---",
"Add Item" = "?_src_=vars;[HrefToken()];[VV_HK_LIST_ADD]=TRUE;target=[refid]",
"Remove Nulls" = "?_src_=vars;[HrefToken()];[VV_HK_LIST_ERASE_NULLS]=TRUE;target=[refid]",
"Remove Dupes" = "?_src_=vars;[HrefToken()];[VV_HK_LIST_ERASE_DUPES]=TRUE;target=[refid]",
"Set len" = "?_src_=vars;[HrefToken()];[VV_HK_LIST_SET_LENGTH]=TRUE;target=[refid]",
"Shuffle" = "?_src_=vars;[HrefToken()];[VV_HK_LIST_SHUFFLE]=TRUE;target=[refid]",
// "Show VV To Player" = "?_src_=vars;[HrefToken()];[VV_HK_EXPOSE]=TRUE;target=[refid]" // TODO - Not yet implemented for lists
)
autoconvert_dropdown = TRUE
else
dropdownoptions = D.vv_get_dropdown()
var/list/dropdownoptions_html = list()
if(autoconvert_dropdown)
for (var/name in dropdownoptions)
var/link = dropdownoptions[name]
if (link)
dropdownoptions_html += "<option value='[link]'>[name]</option>"
else
dropdownoptions_html += "<option value>[name]</option>"
else
dropdownoptions_html = dropdownoptions + D.get_view_variables_options()
var/list/names = list()
if (!islist)
names = D.get_variables()
sleep(1)//For some reason, without this sleep, VVing will cause client to disconnect on certain objects.
var/list/names = list()
if (!islist)
names = D.get_variables()
//sleep(1)//For some reason, without this sleep, VVing will cause client to disconnect on certain objects. //VOREStation edit - commented out, replaced with spawn(0) above
var/list/variable_html = list()
if (islist)
var/list/L = D
for (var/i in 1 to L.len)
var/key = L[i]
var/value
if (IS_NORMAL_LIST(L) && IS_VALID_ASSOC_KEY(key))
value = L[key]
variable_html += debug_variable(i, value, 0, D)
else
var/list/variable_html = list()
if (islist)
var/list/L = D
for (var/i in 1 to L.len)
var/key = L[i]
var/value
if (IS_NORMAL_LIST(L) && IS_VALID_ASSOC_KEY(key))
value = L[key]
variable_html += debug_variable(i, value, 0, D)
else
names = sortList(names)
for (var/V in names)
if(D.can_vv_get(V))
variable_html += D.vv_get_var(V)
names = sortList(names)
for (var/V in names)
if(D.can_vv_get(V))
variable_html += D.vv_get_var(V)
var/html = {"
<html>
<head>
<title>[title]</title>
<style>
body {
font-family: Verdana, sans-serif;
font-size: 9pt;
}
.value {
font-family: "Courier New", monospace;
font-size: 8pt;
}
</style>
</head>
<body onload='selectTextField()' onkeydown='return handle_keydown()' onkeyup='handle_keyup()'>
<script type="text/javascript">
// onload
function selectTextField() {
var filter_text = document.getElementById('filter');
filter_text.focus();
filter_text.select();
var lastsearch = getCookie("[refid][cookieoffset]search");
if (lastsearch) {
filter_text.value = lastsearch;
var/html = {"
<html>
<head>
<title>[title]</title>
<style>
body {
font-family: Verdana, sans-serif;
font-size: 9pt;
}
.value {
font-family: "Courier New", monospace;
font-size: 8pt;
}
</style>
</head>
<body onload='selectTextField()' onkeydown='return handle_keydown()' onkeyup='handle_keyup()'>
<script type="text/javascript">
// onload
function selectTextField() {
var filter_text = document.getElementById('filter');
filter_text.focus();
filter_text.select();
var lastsearch = getCookie("[refid][cookieoffset]search");
if (lastsearch) {
filter_text.value = lastsearch;
updateSearch();
}
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
var c = ca\[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(name)==0) return c.substring(name.length,c.length);
}
return "";
}
// main search functionality
var last_filter = "";
function updateSearch() {
var filter = document.getElementById('filter').value.toLowerCase();
var vars_ol = document.getElementById("vars");
if (filter === last_filter) {
// An event triggered an update but nothing has changed.
return;
} else if (filter.indexOf(last_filter) === 0) {
// The new filter starts with the old filter, fast path by removing only.
var children = vars_ol.childNodes;
for (var i = children.length - 1; i >= 0; --i) {
try {
var li = children\[i];
if (li.innerText.toLowerCase().indexOf(filter) == -1) {
vars_ol.removeChild(li);
}
} catch(err) {}
}
} else {
// Remove everything and put back what matches.
while (vars_ol.hasChildNodes()) {
vars_ol.removeChild(vars_ol.lastChild);
}
for (var i = 0; i < complete_list.length; ++i) {
try {
var li = complete_list\[i];
if (!filter || li.innerText.toLowerCase().indexOf(filter) != -1) {
vars_ol.appendChild(li);
}
} catch(err) {}
}
}
last_filter = filter;
document.cookie="[refid][cookieoffset]search="+encodeURIComponent(filter);
}
// onkeydown
function handle_keydown() {
if(event.keyCode == 116) { //F5 (to refresh properly)
document.getElementById("refresh_link").click();
event.preventDefault ? event.preventDefault() : (event.returnValue = false);
return false;
}
return true;
}
// onkeyup
function handle_keyup() {
updateSearch();
}
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
var c = ca\[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(name)==0) return c.substring(name.length,c.length);
}
return "";
}
// main search functionality
var last_filter = "";
function updateSearch() {
var filter = document.getElementById('filter').value.toLowerCase();
var vars_ol = document.getElementById("vars");
if (filter === last_filter) {
// An event triggered an update but nothing has changed.
return;
} else if (filter.indexOf(last_filter) === 0) {
// The new filter starts with the old filter, fast path by removing only.
var children = vars_ol.childNodes;
for (var i = children.length - 1; i >= 0; --i) {
try {
var li = children\[i];
if (li.innerText.toLowerCase().indexOf(filter) == -1) {
vars_ol.removeChild(li);
}
} catch(err) {}
}
} else {
// Remove everything and put back what matches.
while (vars_ol.hasChildNodes()) {
vars_ol.removeChild(vars_ol.lastChild);
}
for (var i = 0; i < complete_list.length; ++i) {
try {
var li = complete_list\[i];
if (!filter || li.innerText.toLowerCase().indexOf(filter) != -1) {
vars_ol.appendChild(li);
}
} catch(err) {}
// onchange
function handle_dropdown(list) {
var value = list.options\[list.selectedIndex].value;
if (value !== "") {
location.href = value;
}
list.selectedIndex = 0;
document.getElementById('filter').focus();
}
last_filter = filter;
document.cookie="[refid][cookieoffset]search="+encodeURIComponent(filter);
}
// onkeydown
function handle_keydown() {
if(event.keyCode == 116) { //F5 (to refresh properly)
document.getElementById("refresh_link").click();
event.preventDefault ? event.preventDefault() : (event.returnValue = false);
return false;
// byjax
function replace_span(what) {
var idx = what.indexOf(':');
document.getElementById(what.substr(0, idx)).innerHTML = what.substr(idx + 1);
}
return true;
}
// onkeyup
function handle_keyup() {
updateSearch();
}
// onchange
function handle_dropdown(list) {
var value = list.options\[list.selectedIndex].value;
if (value !== "") {
location.href = value;
}
list.selectedIndex = 0;
document.getElementById('filter').focus();
}
// byjax
function replace_span(what) {
var idx = what.indexOf(':');
document.getElementById(what.substr(0, idx)).innerHTML = what.substr(idx + 1);
}
</script>
<div align='center'>
</script>
<div align='center'>
<table width='100%'>
<tr>
<td width='50%'>
<table align='center' width='100%'>
<tr>
<td>
[sprite_text]
<div align='center'>
[header.Join()]
</div>
</td>
</tr>
</table>
<div align='center'>
<b><font size='1'>[formatted_type]</font></b>
<span id='marked'>[marked]</span>
<span id='varedited'>[varedited_line]</span>
<span id='deleted'>[deleted_line]</span>
</div>
</td>
<td width='50%'>
<div align='center'>
<a id='refresh_link' href='?_src_=vars;
datumrefresh=[refid]'>Refresh</a>
<form>
<select name="file" size="1"
onchange="handle_dropdown(this)"
onmouseclick="this.focus()">
<option value selected>Select option</option>
[dropdownoptions_html.Join()]
</select>
</form>
</div>
</td>
</tr>
</table>
</div>
<hr>
<font size='1'>
<b>E</b> - Edit, tries to determine the variable type by itself.<br>
<b>C</b> - Change, asks you for the var type first.<br>
<b>M</b> - Mass modify: changes this variable for all objects of this type.<br>
</font>
<hr>
<table width='100%'>
<tr>
<td width='50%'>
<table align='center' width='100%'>
<tr>
<td>
[sprite_text]
<div align='center'>
[header.Join()]
</div>
</td>
</tr>
</table>
<td width='20%'>
<div align='center'>
<b><font size='1'>[formatted_type]</font></b>
<span id='marked'>[marked]</span>
<span id='varedited'>[varedited_line]</span>
<span id='deleted'>[deleted_line]</span>
<b>Search:</b>
</div>
</td>
<td width='50%'>
<div align='center'>
<a id='refresh_link' href='?_src_=vars;
datumrefresh=[refid]'>Refresh</a>
<form>
<select name="file" size="1"
onchange="handle_dropdown(this)"
onmouseclick="this.focus()">
<option value selected>Select option</option>
[dropdownoptions_html.Join()]
</select>
</form>
</div>
<td width='80%'>
<input type='text' id='filter' name='filter_text' value='' style='width:100%;'>
</td>
</tr>
</table>
</div>
<hr>
<font size='1'>
<b>E</b> - Edit, tries to determine the variable type by itself.<br>
<b>C</b> - Change, asks you for the var type first.<br>
<b>M</b> - Mass modify: changes this variable for all objects of this type.<br>
</font>
<hr>
<table width='100%'>
<tr>
<td width='20%'>
<div align='center'>
<b>Search:</b>
</div>
</td>
<td width='80%'>
<input type='text' id='filter' name='filter_text' value='' style='width:100%;'>
</td>
</tr>
</table>
<hr>
<ol id='vars'>
[variable_html.Join()]
</ol>
<script type='text/javascript'>
var complete_list = \[\];
var lis = document.getElementById("vars").children;
for(var i = lis.length; i--;) complete_list\[i\] = lis\[i\];
</script>
</body>
</html>
"}
src << browse(html, "window=variables[refid];size=475x650")
<hr>
<ol id='vars'>
[variable_html.Join()]
</ol>
<script type='text/javascript'>
var complete_list = \[\];
var lis = document.getElementById("vars").children;
for(var i = lis.length; i--;) complete_list\[i\] = lis\[i\];
</script>
</body>
</html>
"}
src << browse(html, "window=variables[refid];size=475x650") //VOREStation edit end
/client/proc/vv_update_display(datum/D, span, content)
src << output("[span]:[content]", "variables\ref[D].browser:replace_span")
@@ -507,6 +507,10 @@
path = /obj/item/clothing/suit/storage/hooded/wintercoat/cosmic
// winter coats end here
/datum/gear/suit/runner
display_name = "runner jacket"
path = /obj/item/clothing/suit/runner
/datum/gear/suit/varsity
display_name = "varsity jacket selection"
path = /obj/item/clothing/suit/varsity
@@ -374,6 +374,10 @@
display_name = "halter top"
path = /obj/item/clothing/under/haltertop
/datum/gear/uniform/tanktop
display_name = "tank top"
path = /obj/item/clothing/under/tanktop
/datum/gear/uniform/revealingdress
display_name = "revealing dress"
path = /obj/item/clothing/under/dress/revealingdress
@@ -805,6 +805,14 @@
name = "brown varsity jacket"
icon_state = "varsity_brown"
/obj/item/clothing/suit/runner
name = "runner jacket"
desc = "A yellow sports jacket with white trim and an unfolded collar."
icon_state = "runner"
allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
item_state_slots = list(slot_r_hand_str = "suit_red", slot_l_hand_str = "suit_red")
flags_inv = HIDEHOLSTER
/*
* Department Jackets
*/
@@ -981,6 +981,11 @@
desc = "Jean shorts and a black halter top. Perfect for casual Fridays!"
icon_state = "haltertop"
/obj/item/clothing/under/tanktop
name = "tank top"
desc = "The most versatile top ever created."
icon_state = "tanktop"
/obj/item/clothing/under/rippedpunk
name = "ripped punk jeans"
desc = "Black ripped jeans and a fishnet top. How punk."
+10 -2
View File
@@ -9,13 +9,21 @@
var/datum/codex_tree/tree = null
var/root_type = /datum/lore/codex/category/main_borealis_lore //YW EDIT
var/static/list/codex_tree_keys = list() // static list linking codexes to the correct codex_tree.
/obj/item/weapon/book/codex/Initialize()
tree = new(src, root_type)
tree = codex_tree_keys["[root_type]"]
if(!tree)
tree = new(src, root_type)
codex_tree_keys["[root_type]"] = tree
. = ..()
/obj/item/weapon/book/codex/attack_self(mob/user)
if(!tree)
tree = new(src, root_type)
tree = codex_tree_keys["[root_type]"]
if(!tree)
tree = new(src, root_type)
codex_tree_keys["[root_type]"] = tree
icon_state = "[initial(icon_state)]-open"
tree.display(user)
+72 -41
View File
@@ -4,9 +4,9 @@
var/atom/movable/holder = null
var/root_type = null
var/datum/lore/codex/home = null // Top-most page.
var/datum/lore/codex/current_page = null // Current page or category to display to the user.
var/list/current_page = list() // Current page or category to display to the user. // converted to list to track multiple players.
var/list/indexed_pages = list() // Assoc list with search terms pointing to a ref of the page. It's created on New().
var/list/history = list() // List of pages we previously visited.
var/list/history = list() // List of pages we previously visited. // now a 2D list
/datum/codex_tree/New(var/new_holder, var/new_root_type)
holder = new_holder
@@ -16,25 +16,31 @@
/datum/codex_tree/proc/generate_pages()
home = new root_type(src) // This will also generate the others.
current_page = home
indexed_pages = current_page.index_page()
//current_page = home
indexed_pages = home.index_page() // changed from current_page to home.
// Changes current_page to its parent, assuming one exists.
/datum/codex_tree/proc/go_to_parent()
if(current_page && current_page.parent)
current_page = current_page.parent
/datum/codex_tree/proc/go_to_parent(var/mob/user)
var/datum/lore/codex/D = current_page["[user]"]
if(istype(D) && D.parent)
current_page["[user]"] = D.parent
// Changes current_page to a specific page or category.
/datum/codex_tree/proc/go_to_page(var/datum/lore/codex/new_page, var/dont_record_history = FALSE)
if(new_page) // Make sure we're not going to a null page for whatever reason.
current_page = new_page
/datum/codex_tree/proc/go_to_page(var/datum/lore/codex/new_page, var/dont_record_history = FALSE, var/mob/user)
var/datum/lore/codex/D = current_page["[user]"]
if(new_page && istype(D)) // Make sure we're not going to a null page for whatever reason.
current_page["[user]"] = new_page
if(!dont_record_history)
history.Add(new_page)
var/list/H = history["[user]"]
if(!H)
H = list()
H.Add(new_page)
history["[user]"] = H
/datum/codex_tree/proc/quick_link(var/search_word)
/datum/codex_tree/proc/quick_link(var/search_word, var/mob/user)
for(var/word in indexed_pages)
if(lowertext(search_word) == lowertext(word)) // Exact matches unfortunately limit our ability to perform SEOs.
go_to_page(indexed_pages[word])
go_to_page(indexed_pages[word], FALSE, user)
return
/datum/codex_tree/proc/get_page_from_type(var/desired_type)
@@ -45,16 +51,26 @@
return null
// Returns to the last visited page, based on the history list.
/datum/codex_tree/proc/go_back()
if((history.len - 1) > 0)
if(history[history.len] == current_page)
history.len-- // This gets rid of the current page in the history.
go_to_page(pop(history), dont_record_history = TRUE) // Where as this will get us the previous page that we want to go to.
/datum/codex_tree/proc/go_back(var/mob/user)
var/list/H = history["[user]"]
var/datum/lore/codex/D = current_page["[user]"]
if(!LAZYLEN(H) || !istype(D))
return
if((H.len) > 1)
if(H[H.len] == D)
H.len-- // This gets rid of the current page in the history.
history["[user]"] = H
if(H.len == 1)
go_to_page(H[H.len], TRUE, user)
return
go_to_page(pop(history["[user]"]), TRUE, user) // Where as this will get us the previous page that we want to go to.
else
go_to_page(H[H.len], TRUE, user)
/datum/codex_tree/proc/get_tree_position()
if(current_page)
/datum/codex_tree/proc/get_tree_position(var/mob/user)
var/datum/lore/codex/checked = current_page["[user]"]
if(istype(checked))
var/output = ""
var/datum/lore/codex/checked = current_page
output = "<b>[checked.name]</b>"
while(checked.parent)
output = "<a href='?src=\ref[src];target=\ref[checked.parent]'>[checked.parent.name]</a> \> [output]"
@@ -75,38 +91,53 @@
/datum/codex_tree/proc/display(mob/user)
// icon_state = "[initial(icon_state)]-open"
if(!current_page)
if(!home)
generate_pages()
if(!user)
return
var/datum/lore/codex/D = current_page["[user]"]
if(!istype(D)) // Initialize current_page and history
current_page["[user]"] = home
D = current_page["[user]"]
if(!istype(D))
log_debug("Codex_tree failed to failed to load for [user].")
return
var/list/H_init = list()
H_init.Add(home)
history["[user]"] = H_init
//if(!current_page)
//generate_pages()
user << browse_rsc('html/browser/codex.css', "codex.css")
var/dat
dat = "<head>"
dat += "<title>[holder.name] ([current_page.name])</title>"
dat += "<title>[holder.name] ([D.name])</title>"
dat += "<link rel='stylesheet' href='codex.css' />"
dat += "</head>"
dat += "<body>"
dat += "[get_tree_position()]<br>"
dat += "[get_tree_position(user)]<br>"
dat += "[make_search_bar()]<br>"
dat += "<center>"
dat += "<h2>[current_page.name]</h2>"
dat += "<h2>[D.name]</h2>"
dat += "<br>"
if(current_page.data)
dat += "[current_page.data]<br>"
if(D.data)
dat += "[D.data]<br>"
dat += "<br>"
if(istype(current_page, /datum/lore/codex/category))
if(istype(D, /datum/lore/codex/category))
dat += "<div class='button-group'>"
var/datum/lore/codex/category/C = current_page
var/datum/lore/codex/category/C = D
for(var/datum/lore/codex/child in C.children)
dat += "<a href='?src=\ref[src];target=\ref[child]' class='button'>[child.name]</a>"
dat += "</div>"
dat += "<hr>"
if(history.len - 1)
var/list/H = history["[user]"]
if(LAZYLEN(H))
dat += "<br><a href='?src=\ref[src];go_back=1'>\[Go Back\]</a>"
if(current_page.parent)
if(D.parent)
dat += "<br><a href='?src=\ref[src];go_to_parent=1'>\[Go Up\]</a>"
if(current_page != home)
if(D != home)
dat += "<br><a href='?src=\ref[src];go_to_home=1'>\[Go To Home\]</a>"
dat += "</center></body>"
user << browse(dat, "window=the_empress_protects;size=600x550")
@@ -120,21 +151,21 @@
if(href_list["target"]) // Direct link, using a ref
var/datum/lore/codex/new_page = locate(href_list["target"])
go_to_page(new_page)
go_to_page(new_page, FALSE, usr)
else if(href_list["search_query"])
quick_link(href_list["search_query"])
quick_link(href_list["search_query"], usr)
else if(href_list["go_to_parent"])
go_to_parent()
go_to_parent(usr)
else if(href_list["go_back"])
go_back()
go_back(usr)
else if(href_list["go_to_home"])
go_to_page(home)
go_to_page(home, FALSE, usr)
else if(href_list["quick_link"]) // Indirect link, using a (hopefully) indexed word.
quick_link(href_list["quick_link"])
quick_link(href_list["quick_link"], usr)
else if(href_list["close"])
// Close the book, if our holder is actually a book.
if(istype(holder, /obj/item/weapon/book/codex))
holder.icon_state = initial(holder.icon_state)
//if(istype(holder, /obj/item/weapon/book/codex))
//holder.icon_state = initial(holder.icon_state)
usr << browse(null, "window=the_empress_protects")
return
display(usr)
display(usr)
+16 -3
View File
@@ -9,8 +9,8 @@
var/annihilate = FALSE // If true, all (movable) atoms at the location where the map is loaded will be deleted before the map is loaded in.
var/fixed_orientation = FALSE // If true, the submap will not be rotated randomly when loaded.
var/cost = null /* The map generator has a set 'budget' it spends to place down different submaps. It will pick available submaps randomly until
it runs out. The cost of a submap should roughly corrispond with several factors such as size, loot, difficulty, desired scarcity, etc.
var/cost = null /* The map generator has a set 'budget' it spends to place down different submaps. It will pick available submaps randomly until
it runs out. The cost of a submap should roughly corrispond with several factors such as size, loot, difficulty, desired scarcity, etc.
Set to -1 to force the submap to always be made. */
var/allow_duplicates = FALSE // If false, only one map template will be spawned by the game. Doesn't affect admins spawning then manually.
var/discard_prob = 0 // If non-zero, there is a chance that the map seeding algorithm will skip this template when selecting potential templates to use.
@@ -74,7 +74,7 @@
A.power_change()
if(machinery_was_awake)
SSmachines.wake() // Wake only if it was awake before we tried to suspended it.
SSmachines.wake() // Wake only if it was awake before we tried to suspended it.
SSshuttles.block_init_queue = prev_shuttle_queue_state
SSshuttles.process_init_queues() // We will flush the queue unless there were other blockers, in which case they will do it.
@@ -214,6 +214,12 @@
potential_submaps -= chosen_template
continue
// Is single use template already placed
if(!chosen_template.allow_duplicates && chosen_template.loaded)
priority_submaps -= chosen_template
potential_submaps -= chosen_template
continue
// Did we already place down a very similar submap?
if(chosen_template.template_group && (chosen_template.template_group in template_groups_used))
priority_submaps -= chosen_template
@@ -253,6 +259,13 @@
admin_notice("Submap \"[chosen_template.name]\" placed at ([T.x], [T.y], [T.z])\n", R_DEBUG)
if(specific_sanity < 0)
// I have no idea how this function has a race condition for the sanity check, but forcing the inner check loop to end like this fixes it...
// If a template doesn't allow duplicates, it tries to double place a template. this fixes that.
break
if(!chosen_template.allow_duplicates)
specific_sanity = -1 // force end the placement loop
// Do loading here.
chosen_template.load(T, centered = TRUE, orientation=orientation) // This is run before the main map's initialization routine, so that can initilize our submaps for us instead.
@@ -213,6 +213,7 @@ var/list/name_to_material
var/luminescence
var/radiation_resistance = 0 // Radiation resistance, which is added on top of a material's weight for blocking radiation. Needed to make lead special without superrobust weapons.
var/supply_conversion_value // Supply points per sheet that this material sells for.
var/can_sharpen = TRUE // Is this material compatible with a sharpening kit?
// Placeholder vars for the time being, todo properly integrate windows/light tiles/rods.
var/created_window
+2 -1
View File
@@ -108,4 +108,5 @@
hardness = 1
weight = 1
protectiveness = 0 // 0%
conductive = 0
conductive = 0
can_sharpen = FALSE
+8 -2
View File
@@ -9,17 +9,23 @@
var/list/butchery_loot // Associated list, path = number.
var/being_butchered = FALSE // No multiproccing
// Harvest an animal's delicious byproducts
/mob/living/proc/harvest(var/mob/user, var/obj/item/I)
if(meat_type && meat_amount>0 && (stat == DEAD))
if(meat_type && meat_amount>0 && (stat == DEAD) && !being_butchered)
being_butchered = TRUE
while(meat_amount > 0 && do_after(user, 0.5 SECONDS * (mob_size / 10), src))
var/obj/item/meat = new meat_type(get_turf(src))
meat.name = "[src.name] [meat.name]"
new /obj/effect/decal/cleanable/blood/splatter(get_turf(src))
meat_amount--
being_butchered = FALSE
if(!meat_amount)
if(!meat_amount && !being_butchered)
being_butchered = TRUE
handle_butcher(user, I)
being_butchered = FALSE
/mob/living/proc/can_butcher(var/mob/user, var/obj/item/I) // Override for special butchering checks.
if(((meat_type && meat_amount) || LAZYLEN(butchery_loot)) && stat == DEAD)
@@ -137,6 +137,7 @@
var/poison_type = "phoron" // Poisonous air.
var/exhale_type = "carbon_dioxide" // Exhaled gas type.
var/water_breather = FALSE
var/bad_swimmer = FALSE
var/body_temperature = 310.15 // Species will try to stabilize at this temperature. (also affects temperature processing)
@@ -407,6 +408,11 @@
O.organ_tag = organ_tag
H.internal_organs_by_name[organ_tag] = O
// set butcherable meats from species
for(var/obj/item/organ/O in H.organs)
O.set_initial_meat()
for(var/obj/item/organ/O in H.internal_organs)
O.set_initial_meat()
/datum/species/proc/hug(var/mob/living/carbon/human/H, var/mob/living/target)
@@ -513,6 +519,10 @@
/datum/species/proc/can_breathe_water()
return water_breather
// Called when standing on a water tile.
/datum/species/proc/is_bad_swimmer()
return bad_swimmer
// Impliments different trails for species depending on if they're wearing shoes.
/datum/species/proc/get_move_trail(var/mob/living/carbon/human/H)
if( H.shoes || ( H.wear_suit && (H.wear_suit.body_parts_covered & FEET) ) )
@@ -570,4 +580,3 @@
/datum/species/proc/post_spawn_special(mob/living/carbon/human/H)
return
@@ -219,6 +219,12 @@
var_changes = list("gun_accuracy_mod" = -35)
custom_only = FALSE
varchange_type = TRAIT_VARCHANGE_MORE_BETTER
/datum/trait/negative/bad_swimmer
name = "Bad Swimmer"
desc = "You can't swim very well, all water slows you down a lot and you drown in deep water."
cost = -1
custom_only = FALSE
var_changes = list("bad_swimmer" = 1, "water_movement" = 4)
//YW ADDITIONS: START
/datum/trait/negative/light_sensitivity
@@ -331,7 +331,7 @@
var/burncolor = (patient.getFireLoss() < 60 ? "color:gray;" : "color:red;")
dat += "<span style='[pulsecolor]'>\t-Pulse, bpm: [patient.get_pulse(GETPULSE_TOOL)]</span><BR>"
dat += "<span style='[healthcolor]'>\t-Overall Health %: [round(patient.health)]</span><BR>"
dat += "<span style='[healthcolor]'>\t-Overall Health %: [round(100 * (patient.health / patient.getMaxHealth()))]</span><BR>"
dat += "<span style='[brutecolor]'>\t-Brute Damage %: [patient.getBruteLoss()]</span><BR>"
dat += "<span style='[o2color]'>\t-Respiratory Damage %: [patient.getOxyLoss()]</span><BR>"
dat += "<span style='[toxcolor]'>\t-Toxin Content %: [patient.getToxLoss()]</span><BR>"
@@ -31,6 +31,7 @@
var/vore_digest_chance = 25 // Chance to switch to digest mode if resisted
var/vore_absorb_chance = 0 // Chance to switch to absorb mode if resisted
var/vore_escape_chance = 25 // Chance of resisting out of mob
var/vore_escape_chance_absorbed = 20// Chance of absorbed prey finishing an escape. Requires a successful escape roll against the above as well.
var/vore_stomach_name // The name for the first belly if not "stomach"
var/vore_stomach_flavor // The flavortext for the first belly if not the default
@@ -236,6 +237,7 @@
B.contamination_color = vore_default_contamination_color
B.escapable = vore_escape_chance > 0
B.escapechance = vore_escape_chance
B.escapechance_absorbed = vore_escape_chance_absorbed
B.digestchance = vore_digest_chance
B.absorbchance = vore_absorb_chance
B.human_prey_swallow_time = swallowTime
@@ -185,4 +185,4 @@
qdel(src)
else
to_chat(user, "You need more space to release the egg!")
to_chat(user, "You need more space to release the egg!")
@@ -3636,7 +3636,7 @@ shaved
species_allowed = list(SPECIES_TESHARI)
/datum/sprite_accessory/marking/bandage/r_foot/r_foot3
name = "Bandage, Rufgt Foot 3"
name = "Bandage, Right Foot 3"
icon_state = "bandage3"
/datum/sprite_accessory/marking/bandage/r_foot/r_foot3/teshari
+2 -3
View File
@@ -114,8 +114,7 @@ var/list/organ_cache = list()
handle_organ_mod_special()
/obj/item/organ/Initialize()
. = ..()
/obj/item/organ/proc/set_initial_meat()
if(owner)
if(!meat_type)
if(owner.isSynthetic())
@@ -394,7 +393,7 @@ var/list/organ_cache = list()
var/obj/item/organ/external/affected = owner.get_organ(parent_organ)
if(affected) affected.internal_organs -= src
forceMove(owner.drop_location())
owner.remove_from_mob(src, owner.drop_location())
START_PROCESSING(SSobj, src)
rejecting = null
+2 -2
View File
@@ -234,9 +234,9 @@ var/global/photo_count = 0
holding = "They are holding \a [A.r_hand]"
if(!mob_detail)
mob_detail = "You can see [A] on the photo[A:health < 75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]. "
mob_detail = "You can see [A] on the photo[(A:health / A.getMaxHealth()) < 0.75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]. "
else
mob_detail += "You can also see [A] on the photo[A:health < 75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]."
mob_detail += "You can also see [A] on the photo[(A:health / A.getMaxHealth()) < 0.75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]."
return mob_detail
+132 -2
View File
@@ -46,16 +46,26 @@
icon = "sticky-note-o"
template = "pda_notekeeper"
var/greeted = FALSE
var/note = null
var/notetitle = null
var/currentnote = 1
var/list/storedtitles = list("","","","","","","","","","","","")
var/list/storednotes = list("","","","","","","","","","","","")
var/notehtml = ""
/datum/data/pda/app/notekeeper/start()
. = ..()
if(!note)
note = "Congratulations, your station has chosen the [pda.model_name]!"
if(!note && greeted == FALSE)
// display greeting!
greeted = TRUE
note = "Your station has chosen the [pda.model_name]!"
notetitle = "Congratulations!"
/datum/data/pda/app/notekeeper/update_ui(mob/user as mob, list/data)
data["note"] = note // current pda notes
data["notename"] = "Note [alphabet_uppercase[currentnote]] : [notetitle]"
/datum/data/pda/app/notekeeper/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
if(..())
@@ -70,6 +80,126 @@
else
pda.close(usr)
return TRUE
if("Titleset")
var/n = tgui_input_text(usr, "Please enter title", name, notetitle, multiline = FALSE)
if(pda.loc == usr)
notetitle = adminscrub(n)
else
pda.close(usr)
return TRUE
if("Print")
if(pda.loc == usr)
printnote()
else
pda.close(usr)
return TRUE
// dumb way to do this, but i don't know how to easily parse this without a lot of silly code outside the switch!
if("Note1")
if(pda.loc == usr)
changetonote(1)
else
pda.close(usr)
return TRUE
if("Note2")
if(pda.loc == usr)
changetonote(2)
else
pda.close(usr)
return TRUE
if("Note3")
if(pda.loc == usr)
changetonote(3)
else
pda.close(usr)
return TRUE
if("Note4")
if(pda.loc == usr)
changetonote(4)
else
pda.close(usr)
return TRUE
if("Note5")
if(pda.loc == usr)
changetonote(5)
else
pda.close(usr)
return TRUE
if("Note6")
if(pda.loc == usr)
changetonote(6)
else
pda.close(usr)
return TRUE
if("Note7")
if(pda.loc == usr)
changetonote(7)
else
pda.close(usr)
return TRUE
if("Note8")
if(pda.loc == usr)
changetonote(8)
else
pda.close(usr)
return TRUE
if("Note9")
if(pda.loc == usr)
changetonote(9)
else
pda.close(usr)
return TRUE
if("Note10")
if(pda.loc == usr)
changetonote(10)
else
pda.close(usr)
return TRUE
if("Note11")
if(pda.loc == usr)
changetonote(11)
else
pda.close(usr)
return TRUE
if("Note12")
if(pda.loc == usr)
changetonote(12)
else
pda.close(usr)
return TRUE
/datum/data/pda/app/notekeeper/proc/printnote()
// get active hand of person holding PDA, and print the page to the paper in it
if(istype( usr, /mob/living/carbon/human ))
var/mob/living/carbon/human/H = usr
var/obj/item/I = H.get_active_hand()
if(istype(I,/obj/item/weapon/paper))
var/obj/item/weapon/paper/P = I
if(isnull(P.info) || P.info == "" )
var/titlenote = "Note [alphabet_uppercase[currentnote]]"
if(!isnull(notetitle) && notetitle != "")
titlenote = notetitle
to_chat(usr, "<span class='notice'>Successfully printed [titlenote]!</span>")
P.set_content( pencode2html(note), titlenote)
else
to_chat(usr, "<span class='notice'>You can only print to empty paper!</span>")
else
to_chat(usr, "<span class='notice'>You must be holding paper for the pda to print to!</span>")
/datum/data/pda/app/notekeeper/proc/changetonote(var/noteindex)
// save note to current slot, then load another slot
storednotes[currentnote] = note
storedtitles[currentnote] = notetitle
currentnote = noteindex
note = storednotes[currentnote]
notetitle = storedtitles[currentnote]
// update text on keeper, silly swapping!
note = replacetext(note, "<br>", "\n")
notehtml = html_decode(note)
note = replacetext(note, "\n", "<br>")
/datum/data/pda/app/manifest
name = "Crew Manifest"
+11 -4
View File
@@ -178,11 +178,18 @@
if(length(notes.note) > 0)
notes.note += "<br><br>"
// Store the scanned document to the notes
notes.note += "Scanned Document. Edit to restore previous notes/delete scan.<br>----------<br>" + formatted_scan + "<br>"
// notehtml ISN'T set to allow user to get their old notes back. A better implementation would add a "scanned documents"
// feature to the PDA, which would better convey the availability of the feature, but this will work for now.
notes.note = formatted_scan
notes.notetitle = sanitize_simple(P.name, list("\n" = "", "\t" = "", "ÿ" = ""))
// update the saved note too incase we kept the pda open, this is really silly due to how the notehtml is actually what's passed to the editor's text.
// If I don't update it here, it loses the data when you edit it!
notes.storednotes[notes.currentnote] = notes.note
notes.storedtitles[notes.currentnote] = notes.notetitle
notes.notehtml = html_decode(replacetext(notes.note,"<br>", "\n"))
// Inform the user
to_chat(user, "<span class=notice>Paper scanned and OCRed to notekeeper.</span>")//concept of scanning paper copyright brainoblivion 2009
var/scannedtitle = "Paper"
if(!isnull(notes.notetitle) && notes.notetitle != "")
scannedtitle = "'[notes.notetitle]'"
to_chat(user, "<span class=notice>[scannedtitle] scanned to Notekeeper in note [alphabet_uppercase[notes.currentnote]].</span>")//concept of scanning paper copyright brainoblivion 2009
else
to_chat(user, "<span class=warning>Error scanning [A].</span>")
@@ -7,6 +7,7 @@
icon_state = "particle1"//Need a new icon for this
anchored = TRUE
density = TRUE
movement_type = UNSTOPPABLE // for bumps to trigger
var/movement_range = 10
var/energy = 10 //energy in eV
var/mega_energy = 0 //energy in MeV
@@ -31,7 +31,7 @@
if((last_shot + fire_delay) <= world.time)
last_shot = world.time
var/obj/effect/accelerated_particle/A = null
var/turf/T = get_step(src,dir)
var/turf/T = src.loc // if it doesn't spawn here, it won't bump stuff directly infront of the PA
switch(strength)
if(0)
A = new/obj/effect/accelerated_particle/weak(T, dir)
@@ -74,6 +74,7 @@
matter = list(MAT_STEEL = 2000)
projectile_type = /obj/item/projectile/scatter/ratminer
charge_cost = 400
fire_sound = 'sound/weapons/laser3.ogg'
/obj/item/projectile/scatter/ratminer
spread_submunition_damage = FALSE
+1 -1
View File
@@ -318,4 +318,4 @@
item_state = "retro"
/obj/item/weapon/gun/energy/lasertag/omni
projectile_type = /obj/item/projectile/beam/lasertag/omni
projectile_type = /obj/item/projectile/beam/lasertag/omni
+2
View File
@@ -111,6 +111,8 @@
spawn(1) // slight delay to prevent infinite propagation due to map order //TODO: please no spawn() in process(). It's a very bad idea
var/items_moved = 0
for(var/atom/movable/A in affecting)
if(istype(A,/obj/effect/abstract)) // Flashlight's lights are not physical objects
continue
if(!A.anchored)
if(A.loc == src.loc) // prevents the object from being affected if it's not currently here.
step(A,movedir)
@@ -6,7 +6,7 @@
/datum/design/item/gps/AssembleDesignName()
..()
name = "Triangulating device design ([name])"
name = "Triangulating device design (GPS - [name])"
/datum/design/item/gps/generic
name = "GEN"
@@ -77,4 +77,4 @@
req_tech = list(TECH_BLUESPACE = 1)
materials = list (MAT_STEEL = 20, MAT_GLASS = 10)
build_path = /obj/item/device/radio/beacon
sort_string = "DBABA"
sort_string = "DBABA"
+7
View File
@@ -20,6 +20,8 @@
// CHEST INTERNAL ORGAN SURGERY //
//////////////////////////////////////////////////////////////////
/datum/surgery_step/internal/fix_organ
surgery_name = "Treat Organ"
allowed_tools = list(
/obj/item/stack/medical/advanced/bruise_pack= 100, \
/obj/item/stack/medical/bruise_pack = 20
@@ -114,6 +116,8 @@
//Robo internal organ fix. For when an organic has robotic limbs.
/datum/surgery_step/fix_organic_organ_robotic //For artificial organs
surgery_name = "Mend Organ"
allowed_tools = list(
/obj/item/stack/nanopaste = 100,
/obj/item/stack/cable_coil = 75,
@@ -187,6 +191,7 @@
///////////////////////////////////////////////////////////////
/datum/surgery_step/internal/detatch_organ/
surgery_name = "Detach Organ"
allowed_tools = list(
/obj/item/weapon/surgical/scalpel = 100, \
@@ -329,6 +334,7 @@
///////////////////////////////////////////////////////////////
/datum/surgery_step/internal/replace_organ
surgery_name = "Replace Organ"
allowed_tools = list(
/obj/item/organ = 100
)
@@ -408,6 +414,7 @@
///////////////////////////////////////////////////////////////
/datum/surgery_step/internal/attach_organ
surgery_name = "Attach Organ"
allowed_tools = list(
/obj/item/weapon/surgical/FixOVein = 100, \
/obj/item/stack/cable_coil = 75
+6
View File
@@ -0,0 +1,6 @@
/client/verb/export_chat()
set category = "OOC"
set name = "Export Chatlog"
set desc = "Allows to trigger the chat export"
to_chat(usr, "<span data-command=\"$do_export\"></span>")
+6 -6
View File
@@ -31,7 +31,7 @@
var/digestchance = 0 // % Chance of stomach beginning to digest if prey struggles
var/absorbchance = 0 // % Chance of stomach beginning to absorb if prey struggles
var/escapechance = 0 // % Chance of prey beginning to escape if prey struggles.
var/escapechance_absorbed = 20 // % Chance of absorbed prey finishing an escape. Requires a successful escape roll against the above as well.
var/escapechance_absorbed = 0 // % Chance of absorbed prey finishing an escape. Requires a successful escape roll against the above as well.
var/escape_stun = 0 // AI controlled mobs with a number here will be weakened by the provided var when someone escapes, to prevent endless nom loops
var/transferchance = 0 // % Chance of prey being trasnsfered, goes from 0-100%
var/transferchance_secondary = 0 // % Chance of prey being transfered to transferchance_secondary, also goes 0-100%
@@ -551,7 +551,7 @@
//Print notifications/sound if necessary
if(!silent && count)
owner.visible_message("<font color='green'><b>[owner] [release_verb] everything from their [lowertext(name)]!</b></font>", range = privacy_range)
owner.visible_message("<span class='vnotice'><font color='green'><b>[owner] [release_verb] everything from their [lowertext(name)]!</b></font></span>", range = privacy_range)
var/soundfile
if(!fancy_vore)
soundfile = classic_release_sounds[release_sound]
@@ -631,7 +631,7 @@
//Print notifications/sound if necessary
if(!silent)
owner.visible_message("<font color='green'><b>[owner] [release_verb] [M] from their [lowertext(name)]!</b></font>",range = privacy_range)
owner.visible_message("<span class='vnotice'><font color='green'><b>[owner] [release_verb] [M] from their [lowertext(name)]!</b></font></span>",range = privacy_range)
var/soundfile
if(!fancy_vore)
soundfile = classic_release_sounds[release_sound]
@@ -703,7 +703,7 @@
formatted_message = replacetext(formatted_message, "%countprey", living_count)
formatted_message = replacetext(formatted_message, "%count", contents.len)
return("<span class='vwarning'>[formatted_message]</span>")
return("<i><font color='red'>[formatted_message]</font></i>")
/obj/belly/proc/get_examine_msg_absorbed()
if(!(contents.len) || !(examine_messages_absorbed.len) || !display_absorbed_examine)
@@ -727,7 +727,7 @@
formatted_message = replacetext(formatted_message, "%prey", english_list(absorbed_victims))
formatted_message = replacetext(formatted_message, "%countprey", absorbed_count)
return("<span class='vwarning'>[formatted_message]</span>")
return("<i><font color='red'>[formatted_message]</font></i>")
// The next function gets the messages set on the belly, in human-readable format.
// This is useful in customization boxes and such. The delimiter right now is \n\n so
@@ -1521,7 +1521,7 @@
//absorb resists
if(escapable || owner.stat) //If the stomach has escapable enabled or the owner is dead/unconscious
if(prob(escapechance_absorbed) || owner.stat) //Let's have it check to see if the prey's escape attempt starts.
if(prob(escapechance) || owner.stat) //Let's have it check to see if the prey's escape attempt starts.
var/living_count = 0
+8 -8
View File
@@ -496,6 +496,11 @@
else if(tf_mob_holder)
log_and_message_admins("[key_name(src)] used the OOC escape button to revert back to their original form from being TFed into another mob.")
revert_mob_tf()
else if(istype(loc, /obj/item/weapon/holder/micro) && (istype(loc.loc, /obj/machinery/microwave)))
forceMove(get_turf(src))
log_and_message_admins("[key_name(src)] used the OOC escape button to get out of a microwave.")
//Don't appear to be in a vore situation
else
to_chat(src,"<span class='alert'>You aren't inside anyone, though, is the thing.</span>")
@@ -740,11 +745,11 @@
to_chat(src, "<span class='notice'>You are not holding anything.</span>")
return
if(is_type_in_list(I,item_vore_blacklist))
if(is_type_in_list(I,item_vore_blacklist) && !adminbus_trash) //If someone has adminbus, they can eat whatever they want.
to_chat(src, "<span class='warning'>You are not allowed to eat this.</span>")
return
if(!I.trash_eatable)
if(!I.trash_eatable) //OOC pref. This /IS/ respected, even if adminbus_trash is enabled
to_chat(src, "<span class='warning'>You can't eat that so casually!</span>")
return
@@ -830,16 +835,11 @@
to_chat(src, "<span class='notice'>You can taste the flavor of pain. This can't possibly be healthy for your guts.</span>")
else
to_chat(src, "<span class='notice'>You can taste the flavor of really bad ideas.</span>")
else if(istype(I,/obj/item/toy))
visible_message("<span class='warning'>[src] demonstrates their voracious capabilities by swallowing [I] whole!</span>")
else if(istype(I,/obj/item/weapon/bikehorn/tinytether))
to_chat(src, "<span class='notice'>You feel a rush of power swallowing such a large, err, tiny structure.</span>")
visible_message("<span class='warning'>[src] demonstrates their voracious capabilities by swallowing [I] whole!</span>")
else if(istype(I,/obj/item/device/mmi/digital/posibrain) || istype(I,/obj/item/device/aicard))
visible_message("<span class='warning'>[src] demonstrates their voracious capabilities by swallowing [I] whole!</span>")
to_chat(src, "<span class='notice'>You can taste the sweet flavor of digital friendship. Or maybe it is something else.</span>")
else if(istype(I,/obj/item/device/paicard))
visible_message("<span class='warning'>[src] demonstrates their voracious capabilities by swallowing [I] whole!</span>")
to_chat(src, "<span class='notice'>You can taste the sweet flavor of digital friendship.</span>")
var/obj/item/device/paicard/ourcard = I
if(ourcard.pai && ourcard.pai.client && isbelly(ourcard.loc))
@@ -852,7 +852,6 @@
else
to_chat(src, "<span class='notice'>You can taste the flavor of gluttonous waste of food.</span>")
else if (istype(I,/obj/item/clothing/accessory/collar))
visible_message("<span class='warning'>[src] demonstrates their voracious capabilities by swallowing [I] whole!</span>")
to_chat(src, "<span class='notice'>You can taste the submissiveness in the wearer of [I]!</span>")
else if(iscapturecrystal(I))
var/obj/item/capture_crystal/C = I
@@ -863,6 +862,7 @@
to_chat(src, "<span class='notice'>You can taste the the power of command.</span>")
else
to_chat(src, "<span class='notice'>You can taste the flavor of garbage. Delicious.</span>")
visible_message("<span class='warning'>[src] demonstrates their voracious capabilities by swallowing [I] whole!</span>")
return
to_chat(src, "<span class='notice'>This item is not appropriate for ethical consumption.</span>")
return
@@ -22,7 +22,6 @@
//33% chance to spawn nasties
if(prob(33))
spawn_type = pick(
/mob/living/simple_mob/animal/giant_spider/nurse,
/mob/living/simple_mob/animal/space/alien,
/mob/living/simple_mob/animal/space/bear,
/mob/living/simple_mob/creature,
Binary file not shown.

Before

Width:  |  Height:  |  Size: 238 KiB

After

Width:  |  Height:  |  Size: 238 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 693 KiB

After

Width:  |  Height:  |  Size: 694 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 193 KiB

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 654 KiB

After

Width:  |  Height:  |  Size: 654 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 416 KiB

After

Width:  |  Height:  |  Size: 417 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 101 KiB

-397
View File
@@ -1,397 +0,0 @@
"aa" = (/obj/effect/floor_decal/atoll{icon_state = "mural"; dir = 1},/obj/machinery/gateway{dir = 9},/turf/simulated/floor/atoll,/area/gateway/atoll)
"ab" = (/obj/effect/floor_decal/atoll/border/invert{icon_state = "border_invert"; dir = 4},/obj/effect/floor_decal/atoll/border/invert{icon_state = "border_invert"; dir = 1},/obj/machinery/gateway{dir = 1},/turf/simulated/floor/atoll,/area/gateway/atoll)
"ac" = (/obj/effect/floor_decal/atoll{icon_state = "mural"; dir = 8},/obj/machinery/gateway{dir = 5},/turf/simulated/floor/atoll,/area/gateway/atoll)
"ad" = (/obj/effect/floor_decal/atoll{icon_state = "mural"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"ae" = (/obj/effect/floor_decal/atoll{icon_state = "mural"; dir = 1},/turf/simulated/floor/atoll,/area/gateway/atoll)
"af" = (/obj/effect/floor_decal/atoll{icon_state = "mural"; dir = 4},/obj/machinery/gateway{dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"ag" = (/obj/effect/floor_decal/atoll/moss/random,/turf/simulated/floor/atoll,/area/gateway/atoll)
"ah" = (/obj/effect/floor_decal/atoll,/turf/simulated/floor/atoll,/area/gateway/atoll)
"ai" = (/obj/effect/floor_decal/atoll{icon_state = "mural"; dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"aj" = (/obj/structure/flora/moss,/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 1},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"ak" = (/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 1},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"al" = (/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"am" = (/turf/simulated/floor/atoll,/area/gateway/atoll)
"an" = (/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"ao" = (/obj/structure/railing/overhang/waterless,/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"ap" = (/obj/effect/decal/shadow,/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"aq" = (/obj/structure/railing/overhang,/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"ar" = (/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"as" = (/obj/structure/bed/chair/sofa/bench/marble,/turf/simulated/floor/atoll,/area/gateway/atoll)
"at" = (/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"au" = (/obj/effect/decal/shadow{icon_state = "wall_shadow"; dir = 1},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"av" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"aw" = (/obj/structure/lightpost/atoll,/turf/simulated/floor/atoll,/area/gateway/atoll)
"ax" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"ay" = (/obj/structure/flora/moss{icon_state = "moss"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"az" = (/obj/effect/decal/shadow{icon_state = "wall_shadow"; dir = 4},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"aA" = (/obj/effect/decal/shadow/silhouette/pillar{icon_state = "silhouette_p"; dir = 1},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"aB" = (/obj/machinery/gateway/centerstation,/turf/simulated/floor/atoll,/area/gateway/atoll)
"aC" = (/obj/effect/blocker,/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"aD" = (/obj/effect/blocker,/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"aE" = (/obj/effect/blocker,/obj/effect/floor_decal/atoll/moss/random,/turf/simulated/floor/atoll,/area/gateway/atoll)
"aF" = (/obj/effect/blocker,/turf/simulated/floor/atoll,/area/gateway/atoll)
"aG" = (/obj/effect/blocker,/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"aH" = (/obj/effect/blocker,/obj/effect/decal/shadow{icon_state = "wall_shadow"; dir = 8},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"aI" = (/obj/effect/blocker,/obj/structure/railing/overhang/waterless,/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"aJ" = (/obj/effect/blocker,/obj/effect/decal/shadow{icon_state = "wall_shadow"; dir = 4},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"aK" = (/obj/effect/blocker,/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 1},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"aL" = (/obj/effect/blocker,/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"aM" = (/obj/effect/blocker,/obj/structure/flora/moss{icon_state = "moss"; dir = 8},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"aN" = (/obj/effect/blocker,/obj/structure/flora/moss,/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"aO" = (/obj/effect/decal/shadow/silhouette,/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"aP" = (/obj/effect/floor_decal/atoll{icon_state = "mural"; dir = 4},/obj/structure/bed/chair/sofa/bench/marble{dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"aQ" = (/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 9},/obj/effect/floor_decal/atoll/bronze,/turf/simulated/floor/atoll,/area/gateway/atoll)
"aR" = (/obj/effect/floor_decal/atoll/border,/obj/effect/floor_decal/atoll/bronze,/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"aS" = (/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 5},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"aT" = (/obj/effect/floor_decal/atoll,/obj/structure/bed/chair/sofa/bench/marble{icon_state = "bench"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"aU" = (/obj/effect/decal/shadow{icon_state = "wall_shadow"; dir = 8},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"aV" = (/obj/structure/flora/lily2,/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"aW" = (/obj/structure/flora/moss{icon_state = "moss"; dir = 1},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"aX" = (/obj/effect/decal/shadow/silhouette{icon_state = "silhouette"; dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"aY" = (/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 9},/turf/simulated/floor/atoll,/area/gateway/atoll)
"aZ" = (/obj/effect/floor_decal/atoll/bronze,/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 4},/obj/effect/floor_decal/atoll/border/invert{icon_state = "border_invert"; dir = 1},/turf/simulated/floor/atoll,/area/gateway/atoll)
"ba" = (/obj/structure/flora/lily2,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 8},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"bb" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"bc" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"bd" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 1},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 8},/obj/effect/floor_decal/atoll/border/invert{icon_state = "border_invert"; dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"be" = (/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 5},/turf/simulated/floor/atoll,/area/gateway/atoll)
"bf" = (/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"bg" = (/obj/effect/floor_decal/atoll/bronze,/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"bh" = (/obj/structure/railing/overhang,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"bi" = (/obj/structure/flora/lily3,/obj/structure/railing/overhang,/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"bj" = (/obj/structure/railing/overhang,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"bk" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 1},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"bl" = (/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"bm" = (/obj/structure/flora/lily3,/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"bn" = (/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 10},/turf/simulated/floor/atoll,/area/gateway/atoll)
"bo" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 4},/obj/effect/floor_decal/atoll/border/invert{icon_state = "border_invert"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"bp" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 1},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"bq" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 1},/obj/effect/floor_decal/atoll/border/invert,/turf/simulated/floor/atoll,/area/gateway/atoll)
"br" = (/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 6},/turf/simulated/floor/atoll,/area/gateway/atoll)
"bs" = (/obj/structure/flora/lily1,/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"bt" = (/obj/structure/flora/moss{icon_state = "moss"; dir = 8},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"bu" = (/obj/effect/floor_decal/atoll{icon_state = "mural"; dir = 1},/obj/structure/bed/chair/sofa/bench/marble{dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"bv" = (/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 10},/obj/effect/floor_decal/atoll/moss/random,/turf/simulated/floor/atoll,/area/gateway/atoll)
"bw" = (/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 1},/turf/simulated/floor/atoll,/area/gateway/atoll)
"bx" = (/obj/effect/floor_decal/atoll/border/invert,/obj/effect/floor_decal/atoll/border/invert{icon_state = "border_invert"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"by" = (/obj/effect/floor_decal/atoll/moss/random,/obj/effect/floor_decal/atoll/border/invert,/obj/effect/floor_decal/atoll/border/invert{icon_state = "border_invert"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"bz" = (/obj/effect/floor_decal/atoll{icon_state = "mural"; dir = 8},/obj/structure/bed/chair/sofa/bench/marble{icon_state = "bench"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"bA" = (/obj/effect/decal/shadow,/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 1},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"bB" = (/obj/effect/floor_decal/atoll/stairs,/obj/effect/decal/shadow,/turf/simulated/floor/atoll,/area/gateway/atoll)
"bC" = (/obj/structure/flora/moss{icon_state = "moss"; dir = 4},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"bD" = (/obj/structure/flora/moss{icon_state = "moss"; dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"bE" = (/obj/effect/decal/shadow{icon_state = "wall_shadow"; dir = 1},/obj/structure/flora/moss{icon_state = "moss"; dir = 4},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"bF" = (/obj/effect/floor_decal/atoll/stairs,/obj/effect/decal/shadow{icon_state = "wall_shadow"; dir = 1},/turf/simulated/floor/atoll,/area/gateway/atoll)
"bG" = (/obj/effect/decal/shadow{icon_state = "wall_shadow"; dir = 1},/obj/structure/flora/moss{icon_state = "moss"; dir = 1},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"bH" = (/obj/effect/decal/shadow{icon_state = "wall_shadow"; dir = 1},/obj/structure/flora/moss{icon_state = "moss"; dir = 8},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"bI" = (/obj/effect/floor_decal/atoll/stairs,/obj/effect/decal/shadow{icon_state = "wall_shadow"; dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"bJ" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 9},/turf/simulated/floor/atoll,/area/gateway/atoll)
"bK" = (/obj/structure/bed/chair/sofa/bench/marble,/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 5},/turf/simulated/floor/atoll,/area/gateway/atoll)
"bL" = (/obj/effect/decal/shadow/silhouette{icon_state = "silhouette"; dir = 1},/obj/structure/railing/overhang,/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"bM" = (/obj/structure/flora/lily2,/obj/structure/railing/overhang,/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"bN" = (/obj/effect/floor_decal/atoll/stairs,/obj/effect/decal/shadow{icon_state = "wall_shadow"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"bO" = (/obj/structure/flora/moss{icon_state = "moss"; dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"bP" = (/obj/structure/flora/moss,/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"bQ" = (/obj/structure/flora/log2,/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"bR" = (/obj/structure/flora/tree/atoll{icon_state = "green"; dir = 4},/obj/effect/floor_decal/atoll/moss/random,/turf/simulated/floor/atoll,/area/gateway/atoll)
"bS" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"bT" = (/obj/effect/decal/shadow/floor,/turf/simulated/floor/atoll,/area/gateway/atoll)
"bU" = (/obj/effect/decal/shadow/floor,/obj/effect/floor_decal/atoll/moss/random,/turf/simulated/floor/atoll,/area/gateway/atoll)
"bV" = (/obj/effect/decal/shadow/floor,/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 5},/turf/simulated/floor/atoll,/area/gateway/atoll)
"bW" = (/obj/structure/bed/chair/sofa/bench/marble{dir = 4},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 1},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"bX" = (/obj/structure/bed/chair/sofa/bench/marble{icon_state = "bench"; dir = 8},/obj/effect/floor_decal/atoll/bronze,/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"bY" = (/obj/structure/flora/tree/atoll{icon_state = "green"; dir = 1},/obj/effect/floor_decal/atoll/moss/random,/turf/simulated/floor/atoll,/area/gateway/atoll)
"bZ" = (/obj/effect/floor_decal/atoll/moss/random,/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 1},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"ca" = (/obj/effect/floor_decal/atoll/bronze,/turf/simulated/floor/atoll,/area/gateway/atoll)
"cb" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 6},/turf/simulated/floor/atoll,/area/gateway/atoll)
"cc" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 10},/turf/simulated/floor/atoll,/area/gateway/atoll)
"cd" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 8},/obj/effect/floor_decal/atoll/bronze,/turf/simulated/floor/atoll,/area/gateway/atoll)
"ce" = (/obj/effect/floor_decal/atoll/bronze,/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"cf" = (/obj/structure/bed/chair/sofa/bench/marble{icon_state = "bench"; dir = 1},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 6},/turf/simulated/floor/atoll,/area/gateway/atoll)
"cg" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"ch" = (/turf/simulated/floor/beach/sand/outdoors/atoll,/area/gateway/atoll)
"ci" = (/turf/simulated/floor/outdoors/grass/heavy/atoll,/area/gateway/atoll)
"cj" = (/obj/structure/flora/tree/jungle,/turf/simulated/floor/outdoors/grass/heavy/atoll,/area/gateway/atoll)
"ck" = (/obj/structure/flora/tree/jungle_small,/turf/simulated/floor/outdoors/grass/heavy/atoll,/area/gateway/atoll)
"cl" = (/obj/structure/flora/bboulder1,/turf/simulated/floor/outdoors/grass/heavy/atoll,/area/gateway/atoll)
"cm" = (/obj/structure/flora/log1,/turf/simulated/floor/atoll,/area/gateway/atoll)
"cn" = (/obj/structure/flora/ausbushes/reedbush,/turf/simulated/floor/outdoors/grass/heavy/atoll,/area/gateway/atoll)
"co" = (/obj/structure/flora/rocks1,/turf/simulated/floor/outdoors/grass/heavy/atoll,/area/gateway/atoll)
"cp" = (/obj/structure/flora/rocks2,/turf/simulated/floor/outdoors/grass/heavy/atoll,/area/gateway/atoll)
"cq" = (/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/outdoors/grass/heavy/atoll,/area/gateway/atoll)
"cr" = (/obj/structure/flora/bboulder2,/turf/simulated/floor/outdoors/grass/heavy/atoll,/area/gateway/atoll)
"cs" = (/obj/structure/flora/log1,/turf/simulated/floor/beach/sand/outdoors/atoll,/area/gateway/atoll)
"ct" = (/obj/structure/bed/chair/sofa/bench/marble,/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 9},/turf/simulated/floor/atoll,/area/gateway/atoll)
"cu" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 1},/turf/simulated/floor/atoll,/area/gateway/atoll)
"cv" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 8},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 1},/turf/simulated/floor/atoll,/area/gateway/atoll)
"cw" = (/obj/effect/step_trigger/teleporter/atoll{teleport_x = 48; teleport_y = 107},/turf/simulated/floor/atoll,/area/gateway/atoll)
"cx" = (/obj/effect/step_trigger/teleporter/atoll{teleport_x = 33; teleport_y = 107},/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 1},/obj/effect/floor_decal/atoll/border,/turf/simulated/floor/atoll,/area/gateway/atoll)
"cy" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/outdoors/grass/heavy/atoll,/area/gateway/atoll)
"cz" = (/obj/structure/flora/tree/atoll{icon_state = "green"; dir = 8},/obj/effect/floor_decal/atoll/moss/random,/turf/simulated/floor/atoll,/area/gateway/atoll)
"cA" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 4},/obj/effect/floor_decal/atoll/bronze,/turf/simulated/floor/atoll,/area/gateway/atoll)
"cB" = (/obj/structure/flora/log1,/turf/simulated/floor/outdoors/grass/heavy/atoll,/area/gateway/atoll)
"cC" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"cD" = (/obj/structure/bed/chair/sofa/bench/marble{icon_state = "bench"; dir = 1},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 10},/turf/simulated/floor/atoll,/area/gateway/atoll)
"cE" = (/obj/effect/floor_decal/atoll/moss/random,/obj/effect/floor_decal/atoll/bronze,/turf/simulated/floor/atoll,/area/gateway/atoll)
"cF" = (/obj/structure/flora/smallbould,/turf/simulated/floor/outdoors/grass/heavy/atoll,/area/gateway/atoll)
"cG" = (/obj/structure/flora/ausbushes/pointybush,/turf/simulated/floor/outdoors/grass/heavy/atoll,/area/gateway/atoll)
"cH" = (/obj/effect/floor_decal/atoll/border/invert{icon_state = "border_invert"; dir = 8},/obj/effect/floor_decal/atoll/border/invert,/turf/simulated/floor/atoll,/area/gateway/atoll)
"cI" = (/obj/effect/decal/shadow,/obj/structure/flora/moss{icon_state = "moss"; dir = 8},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"cJ" = (/obj/effect/decal/shadow,/obj/structure/flora/moss{icon_state = "moss"; dir = 1},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"cK" = (/obj/effect/step_trigger/teleporter/atoll{teleport_x = 62; teleport_y = 103},/turf/simulated/floor/atoll,/area/gateway/atoll)
"cL" = (/obj/structure/flora/tree/atoll{icon_state = "green"; dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"cM" = (/obj/structure/flora/log2,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"cN" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/outdoors/grass/heavy/atoll,/area/gateway/atoll)
"cO" = (/obj/structure/flora/tree/atoll{icon_state = "green"; dir = 1},/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 1},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"cP" = (/obj/structure/flora/moss{icon_state = "moss"; dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"cQ" = (/obj/effect/step_trigger/teleporter/atoll{teleport_x = 99; teleport_y = 83},/turf/simulated/floor/atoll,/area/gateway/atoll)
"cR" = (/obj/structure/flora/moss{icon_state = "moss"; dir = 8},/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 1},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"cS" = (/obj/effect/step_trigger/teleporter/atoll{teleport_x = 108; teleport_y = 90},/obj/effect/floor_decal/atoll/border,/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 1},/turf/simulated/floor/atoll,/area/gateway/atoll)
"cT" = (/obj/effect/decal/shadow/silhouette/pillar{icon_state = "silhouette_p"; dir = 4},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"cU" = (/obj/structure/flora/tree/atoll{icon_state = "green"; dir = 1},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"cV" = (/obj/effect/floor_decal/atoll/border/invert{icon_state = "border_invert"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"cW" = (/obj/effect/floor_decal/atoll/border/invert,/turf/simulated/floor/atoll,/area/gateway/atoll)
"cX" = (/obj/structure/flora/tree/atoll/huge,/turf/simulated/floor/beach/sand/outdoors/atoll,/area/gateway/atoll)
"cY" = (/obj/effect/floor_decal/atoll/border,/turf/simulated/floor/atoll,/area/gateway/atoll)
"cZ" = (/obj/effect/floor_decal/atoll/border/invert{icon_state = "border_invert"; dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"da" = (/obj/structure/flora/lily1,/obj/structure/railing/overhang,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"db" = (/obj/effect/floor_decal/atoll,/obj/machinery/gateway{dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"dc" = (/obj/structure/bed/chair/sofa/bench/marble{dir = 4},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 9},/turf/simulated/floor/atoll,/area/gateway/atoll)
"dd" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 4},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 1},/turf/simulated/floor/atoll,/area/gateway/atoll)
"de" = (/obj/structure/bed/chair/sofa/bench/marble,/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 4},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 1},/turf/simulated/floor/atoll,/area/gateway/atoll)
"df" = (/obj/structure/bed/chair/sofa/bench/marble{icon_state = "bench"; dir = 8},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 5},/turf/simulated/floor/atoll,/area/gateway/atoll)
"dg" = (/obj/effect/floor_decal/atoll/border/invert{icon_state = "border_invert"; dir = 1},/turf/simulated/floor/atoll,/area/gateway/atoll)
"dh" = (/obj/machinery/gateway,/turf/simulated/floor/atoll,/area/gateway/atoll)
"di" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 9},/obj/effect/floor_decal/atoll/moss/random,/turf/simulated/floor/atoll,/area/gateway/atoll)
"dj" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 1},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 4},/obj/effect/floor_decal/atoll/moss/random,/turf/simulated/floor/atoll,/area/gateway/atoll)
"dk" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 5},/obj/effect/floor_decal/atoll/moss/random,/turf/simulated/floor/atoll,/area/gateway/atoll)
"dl" = (/obj/structure/flora/lily2,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"dm" = (/obj/effect/floor_decal/atoll/border/invert{icon_state = "border_invert"; dir = 8},/obj/effect/floor_decal/atoll/border/invert{icon_state = "border_invert"; dir = 1},/turf/simulated/floor/atoll,/area/gateway/atoll)
"dn" = (/obj/effect/floor_decal/atoll/power,/turf/simulated/floor/atoll{desc = "Scuff and weathered etchings make these floors out to be pretty old. This particular area looks energized, maybe it can supply power to something?"},/area/gateway/atoll/powered)
"do" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 1},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 8},/obj/effect/floor_decal/atoll/moss/random,/turf/simulated/floor/atoll,/area/gateway/atoll)
"dp" = (/obj/effect/floor_decal/atoll/moss/random,/obj/structure/flora/tree/atoll{icon_state = "green"; dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"dq" = (/obj/effect/floor_decal/atoll/bronze,/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 4},/obj/effect/floor_decal/atoll/moss/random,/turf/simulated/floor/atoll,/area/gateway/atoll)
"dr" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 10},/obj/effect/floor_decal/atoll/moss/random,/turf/simulated/floor/atoll,/area/gateway/atoll)
"ds" = (/obj/effect/floor_decal/atoll/bronze,/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 8},/obj/effect/floor_decal/atoll/moss/random,/turf/simulated/floor/atoll,/area/gateway/atoll)
"dt" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 6},/obj/effect/floor_decal/atoll/moss/random,/turf/simulated/floor/atoll,/area/gateway/atoll)
"du" = (/obj/effect/floor_decal/atoll/moss/random,/obj/effect/floor_decal/atoll/border/invert,/turf/simulated/floor/atoll,/area/gateway/atoll)
"dv" = (/obj/structure/flora/lily3,/obj/structure/railing/overhang,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"dw" = (/obj/structure/flora/lily3,/obj/structure/railing/overhang,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"dx" = (/obj/effect/decal/shadow/silhouette/pillar,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"dy" = (/obj/effect/decal/shadow/silhouette/pillar,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"dz" = (/obj/structure/bed/chair/sofa/bench/marble{dir = 4},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 10},/turf/simulated/floor/atoll,/area/gateway/atoll)
"dA" = (/obj/structure/bed/chair/sofa/bench/marble{icon_state = "bench"; dir = 1},/obj/effect/floor_decal/atoll/bronze,/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"dB" = (/obj/structure/bed/chair/sofa/bench/marble{icon_state = "bench"; dir = 8},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 6},/turf/simulated/floor/atoll,/area/gateway/atoll)
"dC" = (/obj/effect/decal/shadow/silhouette/pillar{icon_state = "silhouette_p"; dir = 8},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"dD" = (/obj/effect/decal/shadow/silhouette/pillar{icon_state = "silhouette_p"; dir = 8},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"dE" = (/obj/effect/decal/shadow/silhouette/pillar{icon_state = "silhouette_p"; dir = 4},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"dF" = (/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 4},/obj/effect/floor_decal/atoll/moss/random,/turf/simulated/floor/atoll,/area/gateway/atoll)
"dG" = (/obj/structure/flora/tree/atoll{icon_state = "green"; dir = 8},/obj/effect/floor_decal/atoll/moss/random,/obj/effect/floor_decal/atoll/border/invert{icon_state = "border_invert"; dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"dH" = (/obj/structure/flora/ausbushes/genericbush,/turf/simulated/floor/outdoors/grass/heavy/atoll,/area/gateway/atoll)
"dI" = (/obj/structure/railing/overhang/waterless,/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"dJ" = (/obj/structure/railing/overhang/waterless,/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"dK" = (/obj/structure/flora/tree/atoll,/obj/effect/floor_decal/atoll/moss/random,/turf/simulated/floor/atoll,/area/gateway/atoll)
"dL" = (/obj/structure/flora/moss,/obj/effect/step_trigger/teleporter/atoll{teleport_x = 97; teleport_y = 46},/turf/simulated/floor/atoll,/area/gateway/atoll)
"dM" = (/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"dN" = (/obj/effect/decal/shadow,/obj/structure/flora/moss{icon_state = "moss"; dir = 4},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"dO" = (/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/outdoors/grass/heavy/atoll,/area/gateway/atoll)
"dP" = (/obj/effect/step_trigger/teleporter/atoll{teleport_x = 80; teleport_y = 55},/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 1},/obj/effect/floor_decal/atoll/border,/turf/simulated/floor/atoll,/area/gateway/atoll)
"dQ" = (/obj/structure/flora/tree/atoll/huge{icon_state = "tree"; dir = 1},/obj/structure/flora/rocks1,/turf/simulated/floor/outdoors/grass/heavy/atoll,/area/gateway/atoll)
"dR" = (/obj/effect/step_trigger/teleporter/atoll{teleport_x = 15; teleport_y = 39},/obj/effect/floor_decal/atoll/border,/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 1},/turf/simulated/floor/atoll,/area/gateway/atoll)
"dS" = (/obj/effect/step_trigger/teleporter/atoll{teleport_x = 36; teleport_y = 41},/obj/effect/floor_decal/atoll,/turf/simulated/floor/atoll,/area/gateway/atoll)
"dT" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/outdoors/grass/heavy/atoll,/area/gateway/atoll)
"dU" = (/obj/effect/step_trigger/teleporter/atoll{teleport_x = 44; teleport_y = 33},/obj/effect/floor_decal/atoll/border/invert{icon_state = "border_invert"; dir = 1},/obj/effect/floor_decal/atoll/border/invert{icon_state = "border_invert"; dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"dV" = (/obj/effect/step_trigger/teleporter/atoll{teleport_x = 44; teleport_y = 38},/obj/effect/floor_decal/atoll/border/invert,/obj/effect/floor_decal/atoll/border/invert{icon_state = "border_invert"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"dW" = (/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 8},/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"dX" = (/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/outdoors/grass/heavy/atoll,/area/gateway/atoll)
"dY" = (/obj/effect/step_trigger/teleporter/atoll{teleport_x = 30; teleport_y = 25},/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 1},/obj/effect/floor_decal/atoll/border,/turf/simulated/floor/atoll,/area/gateway/atoll)
"dZ" = (/obj/structure/flora/ausbushes/sunnybush,/turf/simulated/floor/outdoors/grass/heavy/atoll,/area/gateway/atoll)
"ea" = (/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 4},/obj/structure/flora/lily1,/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"eb" = (/obj/structure/flora/rocks1,/turf/simulated/floor/beach/sand/outdoors/atoll,/area/gateway/atoll)
"ec" = (/obj/effect/step_trigger/teleporter/atoll{teleport_x = 101; teleport_y = 19},/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 1},/obj/effect/floor_decal/atoll/border,/turf/simulated/floor/atoll,/area/gateway/atoll)
"ed" = (/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 1},/obj/effect/floor_decal/atoll/moss/random,/turf/simulated/floor/atoll,/area/gateway/atoll)
"ee" = (/obj/effect/step_trigger/teleporter/atoll{teleport_x = 114; teleport_y = 20},/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 4},/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"ef" = (/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 1},/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 4},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"eg" = (/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 4},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll)
"eh" = (/obj/effect/step_trigger/teleporter/atoll{teleport_x = 33; teleport_y = 91},/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 4},/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"ei" = (/obj/effect/blocker,/obj/effect/decal/shadow/silhouette,/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"ej" = (/obj/machinery/gateway{dir = 10},/turf/simulated/floor/atoll,/area/gateway/atoll)
"ek" = (/obj/machinery/gateway{dir = 6},/turf/simulated/floor/atoll,/area/gateway/atoll)
"el" = (/obj/effect/floor_decal/atoll/bronze,/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 9},/turf/simulated/floor/atoll,/area/gateway/atoll)
"em" = (/obj/effect/floor_decal/atoll/bronze,/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 8},/obj/effect/floor_decal/atoll/border,/turf/simulated/floor/atoll,/area/gateway/atoll)
"en" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 8},/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 5},/turf/simulated/floor/atoll,/area/gateway/atoll)
"eo" = (/obj/effect/floor_decal/atoll/bronze,/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 4},/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"ep" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 8},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 1},/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"eq" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 4},/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 10},/turf/simulated/floor/atoll,/area/gateway/atoll)
"er" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 4},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 1},/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 1},/turf/simulated/floor/atoll,/area/gateway/atoll)
"es" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 1},/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 6},/turf/simulated/floor/atoll,/area/gateway/atoll)
"et" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/obj/structure/railing/overhang,/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"eu" = (/obj/effect/floor_decal/atoll/moss/random,/obj/effect/floor_decal/atoll/border/invert{icon_state = "border_invert"; dir = 1},/turf/simulated/floor/atoll,/area/gateway/atoll)
"ev" = (/obj/effect/floor_decal/atoll/moss/random,/obj/effect/floor_decal/atoll/border/invert{icon_state = "border_invert"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"ew" = (/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 8},/obj/effect/floor_decal/atoll/bronze,/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"ex" = (/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 4},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 8},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 1},/turf/simulated/floor/atoll,/area/gateway/atoll)
"ey" = (/obj/effect/floor_decal/atoll/border/invert{icon_state = "border_invert"; dir = 1},/obj/effect/floor_decal/atoll/bronze,/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"ez" = (/obj/effect/floor_decal/atoll/border/invert{icon_state = "border_invert"; dir = 8},/obj/effect/floor_decal/atoll/bronze,/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"eA" = (/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 9},/obj/structure/bed/chair/sofa/bench/marble,/turf/simulated/floor/atoll,/area/gateway/atoll)
"eB" = (/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 1},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 1},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"eC" = (/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 1},/obj/effect/floor_decal/atoll/moss/random,/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 1},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"eD" = (/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 9},/obj/effect/floor_decal/atoll/bronze,/obj/structure/bed/chair/sofa/bench/marble{dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"eE" = (/obj/effect/floor_decal/atoll/moss/random,/obj/effect/floor_decal/atoll/border,/turf/simulated/floor/atoll,/area/gateway/atoll)
"eF" = (/obj/effect/step_trigger/teleporter/atoll{teleport_x = 45; teleport_y = 26},/obj/effect/floor_decal/atoll,/turf/simulated/floor/atoll,/area/gateway/atoll)
"eG" = (/obj/effect/floor_decal/atoll/moss/random,/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 1},/turf/simulated/floor/atoll,/area/gateway/atoll)
"eH" = (/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 5},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 8},/obj/structure/bed/chair/sofa/bench/marble{icon_state = "bench"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"eI" = (/obj/effect/floor_decal/atoll/moss/random,/obj/effect/floor_decal/atoll/border/invert{icon_state = "border_invert"; dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"eJ" = (/obj/effect/floor_decal/atoll/moss/random,/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 5},/turf/simulated/floor/atoll,/area/gateway/atoll)
"eK" = (/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 10},/obj/structure/bed/chair/sofa/bench/marble{icon_state = "bench"; dir = 1},/turf/simulated/floor/atoll,/area/gateway/atoll)
"eL" = (/obj/effect/floor_decal/atoll/moss/random,/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 6},/obj/structure/bed/chair/sofa/bench/marble{icon_state = "bench"; dir = 1},/turf/simulated/floor/atoll,/area/gateway/atoll)
"eM" = (/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 10},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 4},/obj/structure/bed/chair/sofa/bench/marble{dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll)
"eN" = (/obj/effect/floor_decal/atoll/border{icon_state = "border"; dir = 6},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 1},/obj/structure/bed/chair/sofa/bench/marble{icon_state = "bench"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"eO" = (/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 4},/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 1},/obj/structure/bed/chair/sofa/bench/marble,/turf/simulated/floor/atoll,/area/gateway/atoll)
"eP" = (/obj/effect/floor_decal/atoll/bronze,/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 8},/obj/structure/flora/tree/atoll{icon_state = "green"; dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll)
"eQ" = (/obj/effect/floor_decal/atoll/bronze,/obj/effect/floor_decal/atoll/bronze{icon_state = "bronze"; dir = 8},/obj/structure/bed/chair/sofa/bench/marble{icon_state = "bench"; dir = 1},/obj/effect/floor_decal/atoll/moss/random,/turf/simulated/floor/atoll,/area/gateway/atoll)
"eR" = (/obj/vehicle/boat{icon_state = "boat"; dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"eS" = (/obj/vehicle/boat,/turf/simulated/floor/water/atoll,/area/gateway/atoll)
"eT" = (/obj/vehicle/boat{icon_state = "boat"; dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll)
(1,1,1) = {"
anananananananananananananananananananananananananananananananananananananananananananananananananananananaoaoananananananananananananananaoanananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananan
ananananananananananananananananananananananananananananananananananananananananananananananananananananaradaeatananananananananananananaragatananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananan
ananananananananananananananananananananananananananananananananananananananananananananananananananananarahaiatanananananananananananananajananananananananananananananananananananananananananananananananananananananananananananananananaoaoaoaoaoaoaoaoanananananananananananananan
anananananananananananananananananananananananananananananananananananananananananananananananananananananakakananananananananananananananalanananananananananananananananananananananananananananananananananananananananananananananananaramamamamamamamamatananananananananananananan
ananananananananananananananananananananananananananananananananananananananananananananananaoaoaoananananapapananananananaqanananananananalanananananaoaoananananananananananananananananananananananananananananananananananananananananaramamamamamamamamatananananananananananananan
anananananananananananananananananananananananananananananananananananananananananananananaramasamatanananauauanananananavawaxananananananapananananaradaeatanananananananananananananananananananananananananananananananananananananananaramamamamamamamamatananananananananananananan
anananananananananananananananananananananananananananananananananananananananananananananaramagayatanananazazananananananaAanananananananauananananarahaiatananananananananananananananananananananananananananananananananananananananananakakakakakakakakanananananananananananananan
ananananananaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaDaEaFaEaGaCaCaCaHaHaCaIaIaIaIaIaIaIaIaIaIaIaCaCaJaCaCaCaCaCaKaKaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaLaLaLaMaLaLaNaLaCaCaCaCaCaCaCananananananan
ananananananaCanananananananananananananananananananananananananananananananananananananananakakakananananaOaOaraPaQaRaRaRaRaRaRaRaSaTatanaUanananananapapanananananananananananananananananananananananananananananananananananananananananalalalalalalalalananananananaCananananananan
ananananananaCananananananananananaVananananananananananananananananananananananananananananaWalalananananaXaXaraYaZbabbbbbbbbbbbcbdbeatanaOanananananauauanananananananananananananananananananananananananananananananananananananananananalalalalalalalalananananananaCananananananan
ananananananaCanananananananananananananananananananananananananananananananananananananananalalalanananananaVarbfbgbhaqaqbiaqaqbjbkblatanaXanananananazazanananananananananananananananananananananananananananananananananananananananananalalalalalalalalananananbmanaCananananananan
ananananananaCanananananananananananananananananananananananananananananananananananananananapapapananananananarbnbobpbpbpbpbpbpbpbqbratanananananananaUaUanananananananananananananananananananananananananananananananbsananananbmananananalalalalalbtalalananananananaCananananananan
ananananananaCanananananananananananananananananananananananananananananananananananananananauauauananananananarbubvbwbwbxbwbybwbwbrbzatanananbmanananaOaOanananananananananananananaoaoaoaoanaVananananananananananananananananananananananalbtalalalalalalananananananaCananananananan
ananananananaCananananbmanananananananananananananananananananananananananananananananaqananazazazanananananananbAbAbAbAbBbAbBbAbAbAbAananananananananaXaXananananananananananananaramamagamatanananananananananananananananananananananananalalalaWalalbCalananananananaCananananananan
ananananananaCanananananananananananananananananananananananananananananananananananavawaxanaUaUaUananananananbDaubEauaubFbGbFaubHauauananananananananananananananananananananananaramagamamatanananananananananananananananananananananananalalalalalalalalananananananaCananananananan
ananananananaCananananananananananananananananananananananananananananbmanaqaqaqaqananaAananaOaOaOananbmanananavazazazazbIazbIazazazazaxananananananananananananananananbmanananananakakakakananananananananananananananbmanananananaqanananapapapapapapapapanbmananananaCananananananan
ananananananaCanananananananananananananananananananananananananananananavbJbpbpbKbhaqaqaqaqbLbLbLaqaqaqbMaqaqbjaUaUaUaUbNaUbNaUaUaUaUaxanananananananananananananananananananananbOalalalbPanananananananananananananananananananavawaxananaubGauauauauauauananananananaCananananananan
ananananananaCananbQananananananananananananananananananananananananaqanavbkbRagbSamamamamamambSddddeOddddcuamambTbUbTbTbTbUbTbTbTbTbVaxanaqananananananaoaoaoanananananananananananalalalalananananananananananananananananananananaAanananazazazazazazazazananananananaCananananananan
ananananananaCanananananananbmananananananananananaVanananananananavawaxavbWagagamamamamamamamagagagamamamamamamamamamagamamamamagambXaxavawaxananananaramagbYatbsanananananananananalalalalananananananananananananananananananananananananaUaUaUaUaUaUaUaUananananananaCananananananan
ananananananaCanananananananananananananananananananananananananananaAanavbZamamcaamamamamamamcadsePeQcececCamamamamamamamamamamamamcbaxanaAananananananakakakanananananananananananalalalalananananananananananananananananananananananananaOaOaOaOaOaOaOaOananananananaCananananananan
ananananananaCanananananananananananbmanananananananananananananananananavcccdcecfcgbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcamamamcgbbbbbbanananananananananalaWalanananananananananananapapapapananananananananananananananananananananananananaXaXaXaXaXaXaXaXananananananaCananananananan
ananananananaCananananananananananananananananananananananananananananananbbbbbbbbananaqanananananananananananananaqanavamamamaxanaqananananananananananalalalanananananananananananauauauauananananananananananananananananananananananananananananananananananananananaCananananananan
ananananananaCanananananananananananananananananchchchchchchchchchchananananananananavawaxanananananananananananavawaxavamamamaxavawaxanbmanananananananapapapananbsananananananananazazazazanananananananananananananbmananananananananananananananananananananananananaCananananananan
ananananananaCbmananananananananananananananananchcicichchcichcicichanananananananananaAananananananananananananbsaAanavamamamaxanaAananananananananananauauauanananananananbmanananaUaUaUaUananananananananananananananananananananananananananananananananananananananaCananananananan
ananananananaCanananananananananananananananananchcicicicicicicicichchananananananananananananananananananananananananavamamamaxananananananananananananazazazanananananananananananaOaOaOaOanananananananananananananananananananananananbmananananananananananananananaCananananananan
ananananananaCanananananananananananananananchchchcicicicicicicicichchchchanananananananananananananaVananananananananavamamamaxananananananananananananaUaUaUanananananananananananaXaXaXaXananananananananananananananananananananananananananananananananananananananaCananananananan
ananananananaCananananananananananbmananananchcicicjcicickciciclcicicicichananananananananananananananananananananananavamamamaxchchchchananananananananaOaOaOananananananananananananananananananananananananananbsananananananananananananananananananananananananananaCananananananan
ananananananaCanananananananananananananananchchchchcicicicicicicicicichchanananananananananananeRananananananananananavamamamchchcicichchanananananananaXaXaXanananananananananananananananananananananananananananananananananananananananananananananananananananananaCananananananan
ananananananaCananananananananananananananananchchchcicicicjcicicicickchchananananananananananananananananchchchchchchchamamcmcicicicicnchchchchchanananananananananananananananananananananananananananananananananananbmanananananananananananananananananananananananaCananananananan
ananananananaCanananananananananananananananananchchcicicicicicicicicicichananananananananchchchchchchchchchcicicicicicoamamamcicicicicicicicicichanananananananananananaqanananananananananananananananananananananananananananananananananananananananananananananananaCananananananan
ananananananaCananananananananananananananananananchcicpclcqcickcicicicichananananananananchcncicicicicicicicicicicicicramamamcicjcicicicicicicichchchchchchchananananavawaxanananananchchchchchchchchchananananananananananananananananananananananananananananananananaCananananananan
ananananananaCananananananananananananananananbmanchcicicicicicicickcicicsananananananananchcicicicicicicicjcicickcicictcuambSbKcicicicicicicickcicicicicicichanananananaAanananananchchcicicicickcicichchchchchchchananananbmanananananananananananananananananananananaCananananananan
ananananananaCananananananananananananananananananchciciciciciciadcYaecochchananananbmanchchaiaYdgciciciamcicicicickcicvagagagbgcpcicickcicicicicicicicrcicichaqaqaqaqaqaqaqaqaqaqaqchcrckcicncicicjctbpbpbpbKcicichchchchchananananananananananananananananananananananaCananananananan
ananananananaCananananananananananananananananananchchcickcicicibfcwblclcichananananananchcicxdmamciciciciamcicyciamamamagczagamamamamamamamamamamamamamamamamadaYcYcYcYcYcYcYbeaeamamamamamamamamamcuagagamcAcicicicicocBchchchananananananananananananananananananananaCananananananan
ananananananaCananananananananananananananananananchchcicicicrcjahbwaichchchbQanbsanananchclaebncVciciamciciciamcicicoamamagamamamamamamamamamamamamamamamamamahbnbwbwbwbwbwbwbraiamamamamamamamamamcCagbRamcAciciciciciclcichchananananananananananananananananananananaCananananananan
ananananananaCanananananananananananananananananbmchchchcrchchchcschcichananananananananchchchcicicicicicicicicicicicicDcCamcEcfcicicicicicicicicpcjcicicicichbbaAbbbbbbbbbbbbaAbbcscpcicicickcicFcicDcCagcEcfcicicjcicicicichchananananananananananananananananananananaCananananananan
ananananananaCananananananananananananananananananchchchchchanananchchchananananananananananchcicicicicicicicicicrcicicicVamcWcicicicicicicicicicicicicicicichanananananaqananananchcicicicicocicicicnamamamcicickcicicicicichchananananananananananananananananananananaCananananananan
ananananananaCananananananananananananananananananananananananaqananananananananananananananchcicicicjciclcicicicicicicibncHbrcicicncicjcicicicicicicicicicjchananananavawaxanananchchcicjciclcicGciciamamamclcicicicickcicichchananananananananananananananananananananaCananananananan
ananananananaCanananananananananananananananananananananananavawaxanananananananananananananchchchchchchchchcicnciciciciaeehadcicicicickcicicjcichchchchchchchanananananaAanananananchciciciciciciciciamamamcicicicicicicicicschananananananananananananananbmanananananaCananananananan
ananananananaCananananananananananananananananananananananananaAanananananananananananananananananananananchchchcicjchchchchchchchchchchchchchchchananananananananaVananananananananchcicicicicicickciamamamcicicicicicicicichanananananananananananananananananananananaCananananananan
ananananananaCananananananananananananananananananananananananananananananananananananananananananananananananchchchchanananananananananananananananananananananananananananananananchchckcicicicicicpamamamcicicickcicicicichanbQanananananananananananananananananananaCananananananan
ananananananaCanananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananchchchcicjciciciciamamamcjcicicicicjcicichanananananananananananananananananananananaCananananananan
ananananananaCananananananananananananananaoaoanananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananchchchchciciciciciamamamcicicicicicicichchanananananananananananananananananananananaCananananananan
ananananananaCanananananananananananananaramamatananananananananananananananananananananananananananananananananananananbmananananananananananananananananananananananananananananananchchchchchciciciamamamcicrcjcicicichchananananbmanananananananananananananananananaCananananananan
ananananananaCananananananananananananananakakananananananananananananananananananananananananananananananananananananananananananananananbmananananananananananananananananananbmananananananchchcjclamamamcochchchchchchanananananananananananananbsanananananananananaCananananananan
ananananananaCanananananananananananananancIcJanananananananananananananananbsananananananananananananananananananananananananananananananananananananananananananananananananananananananananchchcschamamamchchchanananananananananananananananananananananananananananaCananananananan
ananananananaCananananananananananbmanananauauanananbmanananananananananananananananananananananananananananananananananananananaoaoaoanananananananananananananananananananananananananananananananavamamamaxanananananananananananananananananananananananananananananaCananananananan
ananananananaCananananananananananananananazazanananananaoaoaoaoaoananananananananananananananananananananananananananananananaramamamatananananananananananananananananananananananananananananananavamamamaxanananananananananananananananananananananananananananananaCananananananan
ananananananaCananananananananananananananaUaUananananaramamagamcKatananananananaoaoanananananananananananananananananananananaramcLamatananananananbmananananananananananananananananananananananancMamamamaxanananbmanananananananananananananananananananananananananaCananananananan
ananananananaCananananananananananananananaOaOananananaragagagagagatanananananaramamatanananananbsanananananananananananananananakakakanananananananananananananananananananananananananananananananavamamamaxananananaoaoaoaoaoaoanananananananananananananananananananaCananananananan
ananananananaCananananananananananananananaXaXananananaragbRbYagamatananananananakcOananananananananananananananananananananananaWbtalanananananananananananananananananananananananananananananananavamamamaxanananaragagamasamamatananananananananananananananananananaCananananananan
ananananananaCananananananbmananananananananananananananakakakakakanananananancPapcJananananananananananananananananananaVanananalalalanananananananananananananananananananananananananananananananavamamamaxanananarcQagamagagczatanaoaobmananananananananananananananaCananananananan
ananananananaCanananananananananananbmanananaqananananbOaWalbCalalananananbmananauauananananananananananananananananananananananapapapanananananananananananananananananananananananananananananananavcVamamaxananananakakakakakcRanaradaeatananananananananananananananaCananananananan
ananananananaCananananananananananananananavawaxanananbmalalalalalanananananananazazananananananananananananananananananananananauauauanananananananananananananananananananananananananananananananavbfamamaxanaVananalaWbCalalalanarahaiatananananananananananbmanananaCananananananan
ananananananaCanananananananananananananananaAanananananapapapapapananananananbmaUaUananananananananananananananananananananananazazazananananananananananananananananananananananananananananananbsavbfamamaxananananalalalalalalananakakanananananananananananananananaCananananananan
ananananananaCananananananananananananananananbmananananauauauauauanananananananaOaOanbmananananananananananananananananananananaUaUaUananananananananananananananananananananananananananananananaqbjbfamamaxananananalalalalalalananalalanananananananananananananananaCananananananan
ananananananaCananananananananananananbmananananananananazazazazazanbmanananananaXaXananananananananananananananbsanananananananaOaOaOananananananananananananananbmananananananananananananananavaiaYdgamamaxananananalalalalalalananapapananananbmananananananananananaCananananananan
ananananananaCanananananananananananananananananananananaUaUaUaUaUanananananananbmananananananananananananananbmananananananananaXaXaXanananananananananananananananananananananananananananananavcSdmamamamaxananananalalalalalalananauauanananananananananananananananaCananananananan
ananananananaCanananananananananananananananananananananaOaOaOaOaOanananananananananananananananananananananbmanananananananananananananananananbmanananananananananananananananananananananananavaebncVamagaxananananapapapapapapananazazanananananananananananananananaCananananananan
ananananananaCanananananananananananananananananananananaXaXaXaXaXananananananananananananananananananbQanananananananananananananananananananananananananananananananananananananananananananananbbcTbfagagcUananananauauauauauauananaUaUbmananananananananananananananaCananananananan
ananananananaCananananananananananbsananananananananananananananananananananananananananananananananananbmanananananananananananananananananananananananananananananananananananananananananananananavbfamagaxananananazazazazazazananaOaOanananananananananananananananaCananananananan
ananananananaCanananananananananananananananananananbmanananananananananananananananananananaVanananananananananananananananananananananananananananananananananananananananananananananananananananavbfamamaxananananaUaUaUaUaUaUananaXaXanananananananananbmanananananaCananananananan
ananananananaCananananananananananananananananananananananananananananananbsananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananavdgamamaxananananaOaOaOaOaOaOanananananananananananananananananananaCananananananan
ananananananaCanananananananananananananananananananananananananbmanananananananananananananananananananananananananananananananananananananananananananananananananananananchchchchananananananananavamamamaxananananaXaXaXaXaXaXanananananananananananananananananananaCananananananan
ananananananaCananananananananananananananananananananananananananananananananananananananananananananananananananananananananaqananananananananananananbsanaqananananananchcicicichananananaqanananavamamamaxanananaqanananananananananananananananananaVanananananananaCananananananan
ananananananaCananananananananananananananananananananananananananananananananananananananaqanananananananaqananananananananavawaxanananeRananananananananavawaxanananananchcicicichanananavawaxananavcVamcWaxananavawaxananananananananananananananananananananananananaCananananananan
ananananananaCananananananananananananananbmananananananananananananananananananananananavawaxanananananavawaxananananananananaAananananananananananananananaAananananananchcXcicichananananaAanaqaqbjbfamblbhaqaqanaAanananananbmanananananananananananananananananananaCananananananan
ananananananaCananananananananananananananananananananananananananananananananananananananaAananaqaqaqananaAananbsananananaqaqaqaqaqananananananananananaqaqaqaqaqaneRbmananchchchananananananavaPaYcYdgamcZcYbeaTaxananananananananananananananananananananananananananaCananananananan
ananananananaCananbsananananchchchchchananananananananananananananbmananananbmanananananananandaaaabacbhaqaqaqaqaqaqaqaqbjdcdddedddfbhaqaqbMaqaqaqaqaqbjaYcYcYcYbebhaqaqaqaqaqaqaqaqaqaqaqaqaqbjaYdgcacecececCcZbeaxananananananananananananananananananananananananananaCananananananan
ananananananaCananananananchchchcicichchchanananananananananananananananananananananananananavahafaBdbaiamamamamamamamamamamcWbwcVamamamamamamamamamcZcYdgdidjdkcZcYdgamamamamamamamamamamamcZcYdgambgdlbbbcbkamblaxananananananananananananananananananananananananananaCananananananan
ananananananaCanananananchchcicicicicicichanananananananananananananananananananananananananavdmejdhekamamamamamamamamamamambldnbfamamamamamamamamamamamagdodpdqamamamamamamamamamamamamamamamamamambgaxbsavbkamblaxananananananananananananananananananananananananananaCananananananan
ananananananaCanananananchcicicicicicicichchananananananananananananananananananananananananavadaeamadaeamamamamamamamamamamcZcYdgamamamamamamamamamcWbwcVdrdsdtdubwcVamamamamamamamamamamamcWbwcVambgdvaqdwbkamblaxananananananananananananananananananananananananananaCananananananan
ananananananaCanananananchciclcicicickcicichchanananananananananananananananananananananananandxaibxahdybbbbbbbbbbbbbbbbcTdzcedAcedBdCbbbbbbbbbbbbbbbbcTbnbwbwbwbrdCbbbbbbbbbbbbbbbbbbbbbbbbbbcTbncVbSddddddcucWbraxananananananananananananananananananananananananananaCananananananan
ananananananaCanananananchchcocickcicicicicichananananananananananananananananananananananaqananbbbbbbananaqanbmanananananbbdDaAdEbbanananananananananbQbbdDaAdEbbananananananananananananananavbubnbwcVamcWbwbrbzaxananananananananananananananananananananananananananaCananananananan
ananananananaCananananananchcicicicicicrcicichanananananbmanananananananananananananananavawaxanananananavawaxananananananananaqananananananananananananananaqanananananananananananananananaqanbbbbcTbfamdFdCbbbbanaqanananananananananananananananananananananananananaCananananananan
ananananananaCanananananchchcicicicicpcqcicichananananananananananananananananananananananaAanananananananaAananananananananavawaxananananananananananananavawaxanananananananananananananavawaxananavdgagdGaxananavawaxananananananananananananananananananananananananaCananananananan
ananananananaCanananananchcicickcNcicicicickchananananananananananananananbmanananananananananananananananananananananananananaAananananananananaVanananananaAanananananananananananananananaAanananavamamagaxanananaAanananananananananananananananananbmanananananananaCananananananan
ananananananaCanananananchchchcicicichchchchchanananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananavamamamaxanananananananananananananananananananananananananananananaCananananananan
ananananananaCanananananananchchcrchchanananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananavamamamaxanananananananananananananananananananananananananananananaCananananananan
ananananananaCananananananananchchchanananananananananananananananananananananananananananananananananananananananananananbsanananananananananananananananananananananaVananananananananananananananavamamamaxanananananananananananananananananananananananananananananaCananananananan
ananananananaCanananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananavamamamaxananananananananananbmananananananananananananananananananaCananananananan
ananananananaCananananananbmananananananananananananananananananananananananananananananananananananananbmananananananananananananananananananananananananananananananananananananananananananananbmavamamamaxanananananananananananananananananaoaoanananbmananananananaCananananananan
ananananananaCanananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananaqanavamamamaxanaqanananananananananananananandIamamdJanananananananananaCananananananan
ananananananaCananananananananananananananbmananananananananananananananananananananananananananananananananananananananananananananaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoananananananananananananananavawaxavamamamaxavawaxananananananananananananaramdKagamatananananananananaCananananananan
ananananananaCananananananananananananananananananananananananananananananananananananananananananananananananananananananananananaramamamagamamamasamamamamamamagatananananananananananananananaAanavamamamaxanaAananananananananananananananakakakakanananananananananaCananananananan
ananananananaCananananananananananbsananananananananananananananbmananananananananananananananananananananananananananananananananaragagamamamamamagamamamamagamdLatananananananananananananananananavamamamaxananananananananananananananananalbtbCalanananananananananaCananananananan
ananananananaCananananananananananananananananananananananananananananananananananananananananananananananananananananbmananananananakakakakdMdMdMdMdMdMakakakakakanananananananananchchchchchchchchavamamamaxananananananananananananaoaoananalalalalanananananaoaoaoanaCananananananan
ananananananaCanananananananananananananananananananananananananananananananananananananananananananananananananananananaoaoananancPalaWalalananbmanananalalalalalanananananananchchchcicicicicicichavamamamaxanbmanananananananananaramagatanapapapapananananaramagamataCananananananan
ananananananaCanananananananananananananananananananananananananananananananananananananananaVananananananananananananaragbYatanananapapapapananananananapdNapapapanananananananchcicicicicicicicichchcVamcWaxananananananananananananakakananauauauauanananananakakakanaCananananananan
ananananananaCanananananananananananananananananbmananananananananananananchchchchchananananananananananananananananananakakananananauauauauananananananauauauauauananananananchchcicicicicicicicicicibfamblaxananananananananananananbCalananazazazazanananananalaWalanaCananananananan
ananananananaCananananananananananananananananananananananananananananananchcicicichchananananananananananbmananananananbtalanaqananazazazazananbsanananazazazazazananaqanananchcicicrcicicickcicicicibfamblaxananananananananananananapapananaUaUaUaUananananbmalalalanaCananananananan
ananananananaCanananananananbmanananananananananananananananananananananchchcicickcichchchchchanananananananananananananapapavawaxanaUaUaUaUananananananaUaUaUaUaUanavawaxanchchcicicicicicicicickcicibfamblaxananananananananananananauauananaOaOaOaOanananananalalalanaCananananananan
ananananananaCanananananananananananananananananananananananananananchchchcicicicicicicicicichanananananananananananananauauanaAananaOaOaOaOananananbmanaOaOaOaOaOananaAananchcicicicicicicicidHciciaYdgamblaxanaqananananananananananazazananaXaXaXaXanananananapapapanaCananananananan
ananananananaCananananananananananananananananananananananananananchchcicicicickcicicicicichchanananananananananananananazazananananaXaXaXaXananananananaXaXaXaXaXanananananchcicicickcicicicraeaYcYeuamamblaxavawaxanananananananananaUaUanananananaqanananananauauauanaCananananananan
ananananananaCanananananananananananananananananananananananananchchcicicicicicicicicicickchananananananananananananananaUaUananananananananananananananananananananananananchcicicicicicicicidPdmagbRagamblaxanaAananananananananananaOaOananananavawaxananananazazazanaCananananananan
ananananananaCanananananananananananananaVanananananananananananchciciciciciciclcicjcicNcichchanananananananananbsanananaOaOananananananananananananananananananananananananchcicicicicicickciaibnbwevagamblaxananananananananananananaXaXanananaVanaAanananananaUaUaUanaCananananananan
ananananananaCanananananananananananananananananananananananananchcicpcickciciamamamamclcicichanananananananananananananaXaXananananananananananananananananananananananananchchcicicicicicicicicicibncVamblaxanananananananananananananananananananananananananaOaOaOanaCananananananan
ananananananaCanananananananaqanananananananananananananananananchciciciciciciamagagamcicicNchananananananananananananananananananananananananananananananananananananananananchchcicickcidOcrcicicicibfamblaxanananananananananananananananananananananananananaXaXaXanaCananananananan
ananananananaCananananananavawaxanananbmananananananananananananchchaiciamcNckagamamamcicochchanananananananananananananananananananananananananananananananananananananananananchchcicicicicicicickcibfamblaxanananananananananananananananananananananananananananananaCananananananan
ananananananaCanananananananaAanananananananananananananananananchchdRciciamamamamamagcicichanananbmananchchchchchchchananananananananananananananananananananananananananananananchchchchchchchchchchbfamblaxanaVanananananananananananananananananananananananananananaCananananananan
ananananananaCananaoaoaoaoaoaoaoanananananananananananbmanananchchciciciciciciciciciamamcichchanananananchcicicicicichanananananananananananananananananananananananananananananananananananananananavdgamcZaxanananananananananananananbmanananananananananananananananaCananananananan
ananananananaCanarasamamamcZbedSatananananananananananananananchchcicicicicicrcNcjciamagcicrchanananananchcidQcicicichanananananananananananananananananananananananananbmanananananananananeSanaqanavamamamaxanaqanananananananananananananananananananananananananananaCananananananan
ananananananaCanaramamamamameIeJatanananananananananananananananchchclcicjcpciciciciadciaechchanananananchchchcicicpchananananananananbmanananananananananananananananananananananananananananavawaxavamamamaxavawaxananananananananananananananananananananananananananaCananananananan
ananananananaCananakakakakakakajanananananananananananananananananchchchchchchchchchaYdUbechanaVananananananchchchchchanananananananananananananananaVanananananananananananananananananananananaAanavamamamaxanaAanananananananananananananananananananananananananananaCananananananan
ananananananaCanbOalalalalalbCalananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananavamamamaxanananananananananananananananananananananananananananananaCananananananan
ananananananaCananalalalalalalalanananananbmananananananananananananananananaqanbsanananbQanananananananananananananananananananananananananananananananananananananananananananananbmanananananananavamamamaxananananananananananananananananananananbmananananananananaCananananananan
ananananananaCananalalalalalalalanananananananananananananananbmanananananavawaxanchbndVbrchchchchchchanananananananchchchchchchchanananananananananananananananananananananananananananananananananavamamamaxanananananananananananananananananananananananananananananaCananananananan
ananananananaCananalalalalalalalananananananananananananananananananananananaAananchahdWaicichchcicichanananchchchchchcicicicicichchanchchchchanananananananananananananananananananananananananananavamamamaxanananananananananananananananananananananananananananananaCananananananan
ananananananaCananalalalalalalalanananananananananananananananananananananananananchcicicicicicicicichchchchchcicicichchchchchchchchchchcichchchchchchchanananananananananbmanananananananananaVananavamamamaxanananananananananananananananananananananananananananananaCananananananan
ananananananaCananapapapapapapapanananananananananananbsanananananananananananananchchcicicicicickcicicickcicicicicicicickcicichchchchcicicicicicicicichchchchchchanananananananananananananananananavamamamaxananananananananananananananananananananananananbsananananaCananananananan
ananananananaCananauauauauauauauanananananananananananananananananananananananananchchciamamciciciciciciciciclcicicicicicicicicicicicicicicicicicicicicicicicicichanananananananananananananananananavamamamaxanananananananananananananananananananananananananananananaCananananananan
ananananananaCananazazazazazazazanananananananananananananananananananananananananchcsciciciciciclcickcicicicicicicicicicicicicicicicicicicicicicicockcicicicicichchchchchchananananananananananaqanavamamamaxanaqanananananananbmanananananananananananananananananananaCananananananan
ananananananaCananaUaUaUaUaUaUaUananananbmanananananananananananananananbmananananchchcicicicjciamcicicicicicicicicickcicrcicicicicjcicicjcicicicicicicicickciclcicicicicichchananananananananavawaxavamamamaxavawaxananananananananananananananananananananananananananaCananananananan
ananananananaCananaOaOaOaOaOaOaOanananananananananananananananananananananananananchchcicicicicicicicicNcickamcicicicicicicicicocicicjcicicicicicicicicicicicicicickcicicicichchanbsananananananaAanavamamamaxanaAanananananananananananananananananananananananananananaCananananananan
ananananananaCananaXaXaXaXaXaXaXanananananananaoaoaoaoaoaoaoaoananananananananananchchdYdmcicicicicocNcicaamcicicicicNcpcicicqciciclcicicicicjcicicicicicicicicicicicidTcicicichaqaqaqaqaqaqaqaqaqaqetamamamaxanananananananananananananananananananananananananananananaCananananananan
ananananananaCanananananananananananaqanananareAcYcYcYcYeEbeeFatananananaoaoanananchchahdXcickcicicicicicicicicjciamciciamamciciciamcicicicickcicickcicicjciciciamamcicicrciciamamamamamamamamamamamamamamamaxananananananananananananaoaoaoaoaoaoaoaoaoaoaoaoaoananananaCananananananan
ananananananaCananananananananananavawaxananarbfamagamamamcZbeatanananaragagatananchchcicicicicicicicicicicicNcicicickciciciamcicicpcicickciciciambSciciciamciciamamcicicidTamamamamamamagagamamamamamamamamaxanananananananananananareDaRaRaRaRaRaRaRaRaRaRaReHatanananaCananananananan
ananananananaCananananananananbsananaAanananarbfamamagamamagblatanananarbRagatananchchcicicicicickcicpcicicicicicicicicicicrcuamciciamamamcicicpamamcicicjcidTcicicickciamamcpamamamamamagdKagamamamamcVamcWaxanananananananananananarewcicjciciciciciciciagamexatanananaCananananananan
ananananananaCananananananananananaoaoaoananareKeGbwbwbwbwbweLatananananakajananananchchchcicickcBciclcicjcicicockcicicjcicicicjclciciciciciciaecicrcicicicicicicicicocicicicichbbbbbbbbbbbbbbbbbbbbbcbfamblaxanananananananananaoaodIewcpcicicicidTcicrciamamexatanananaCananananananan
ananananananaCanananananananananaramamamatananakakakakakakakakananananbOapapananananchchchchciciciciciciciciciciciciciclciciciciciciciciciciciciciciciciciciciciclcicicicicichchanananananbmananaqanavbfamblaxanaqananananananeaaiaYcYeycidZcickelemenciciciciexatanananaCananananananan
ananananananaCananananbmananananaragamamatancPalalalbtalalalaWanananananauauananananananchchchchcicicicickcicicicickcicicicicicicicicicicicicicicicicicicickcicicicicicicichchchanananananananavawaxavbfamblaxavawaxanananananarecdmambgcicicicieoasepciciciciexatanananaCananananananan
ananananananaCananananananananananakakakanananalalalalalalalalananaqananazazanananananananchchchchchcicicicickcicicicicicicicickcicjcicjcicickcicicicjcicicicicichchchchchchchanananananananananaAanavbnbxbraxanaAananananananaraebnedezcicocrcieqerescicpckamexatanananaCananananananan
ananananananaCananananananananancPalalalanananalalalalalalalalanavawaxanaUaUananananchchananbsananchchchchchcicqcicicickcicicicicicicjcicicicicicicicicicicichchchchchchchanananananananananananananavaeeeadaxanananananananananakakefewckclcicicicicicichchamexatanananaCananananananan
ananananananaCananananananananananalalalanananalalalalalalalalananaAananaOaOanananchchcichchananeTananananchchchchcicicicickcicicicicicicicicicicicicicicichchananananananananananananananananananananbbbbbbanbmananananananananbCalegewcicidTebcragcichchchamexatbmananaCananananananan
ananananananaCananananananananananalalalanananalalalalalalalalanananananaXaXanananchcicicichchchchchanananchchchchchcicicocicjciclcicicjcicocicicicickcichchchanananananananananananananananananananananaqanananananananananananalalegeMeBeBeBeBeBeBeBeBeCeBeBeNatanananaCananananananan
ananananananaCananananananananananapapapanananalalalalalalalalananananananananbmanchcicicicicicicichanananananchchchchcicicicicicickcicicicicicjcicicichchchchanananananbmananananananananananananananavawaxananananananananananalalalakakakakakakakakakakakakakananananaCananananananan
ananananananaCananananananananananauauauanananalalalalalalalalananananananananananchchcicicicicicichanananananchchchchchcicicicicicicicicicicicicichchchchchanananananananananananananbsananananananananaAanananananananananananapapapalalalalaWalalalbCalalalalananananaCananananananan
ananananananaCananananananananananazazazananbmalalalalalalalalanbmanananananananananchchchcicicichchanananbmananchchchchchchchchcicicicicichchchchchananananananananananananananananananananananananananananananananananananananauauaualalalalalalalalalalalalalananananaCananananananan
ananananananaCananananananananananaUaUaUanananalalalalalalalalanananananananananananananchchchchchananananananananananananchchchchchchchchchchananbsananananananananananananananananananananananananananananananananananananananazazazalalalalalalalalalalalalalananananaCananananananan
ananananananaCananananananananbmanaOaOaOanananapapapapapapapapanananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananbsanananananaUaUaUapapapapapapapcIapapapapapananananaCananananananan
ananananananaCananananananananananaXaXaXanananauauauauauauauauanananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananbmanananananananananananananananaOaOaOauauauauauauauauauauauauauananananaCananananananan
ananananananaCananananananananananananananananazazazazazazazazananananananbmanananananananananananananananananananananananananananananananananananananananbmananananananananananananananananananananananananananananananananananaXaXaXazazazazazazazazazazazazazananananaCananananananan
ananananananaCananananananananananananananananaUaUaUaUaUaUaUaUananananananananananananananananananananananananananananananananaVanananananananananananananananananananananananananananananananananananananananananananananananbsanananaUaUaUaUaUaUaUaUaUaUaUaUaUananananaCananananananan
ananananananaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCeieieieieieieieiaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCeieieieieieieieieieieieieiaCaCaCaCaCananananananan
anananananananananananananananananananananananaXaXaXaXaXaXaXaXananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananaXaXaXaXaXaXaXaXaXaXaXaXaXanaqanananananananananan
anananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananbsavawaxananananananananan
ananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananbmananananananananananaAanananananananananan
anananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananan
anananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananan
anananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananananan
"}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 681 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

+2 -1
View File
@@ -222,7 +222,8 @@
list("Redgate - Islands Underwater","Redgate - Islands"),
list("Redgate - Moving Train", "Redgate - Moving Train Upper Level"),
list("Redgate - Fantasy Dungeon", "Redgate - Fantasy Town"),
list("Redgate - Laserdome")
list("Redgate - Laserdome"),
list("Redgate - Cascading Falls")
)
lateload_gb_north = list(
+5
View File
@@ -332,6 +332,11 @@
desc = "A large orbital station with recreational facilities, namely a pair of laser tag arenas."
mappath = 'maps/redgate/laserdome.dmm'
/datum/map_template/common_lateload/redgate/falls
name = "Redgate - Cascading Falls"
desc = "A world made up almost entirely of water, sprinkled with obscure marble structures."
mappath = 'maps/redgate/falls/falls.dmm'
//////////////////////////////////////////////////////////////////////////////////////
// Admin-use z-levels for loading whenever an admin feels like
#if AWAY_MISSION_TEST
@@ -1,76 +1,76 @@
/obj/effect/floor_decal/atoll
name = "mural"
icon = 'maps/atoll/icons/decals/marble_decals.dmi'
icon_state = "mural"
/obj/effect/floor_decal/atoll/damage
name = "damaged flooring"
icon_state = "damage"
/obj/effect/floor_decal/atoll/bronze
name = "bronze filling"
icon_state = "bronze"
/obj/effect/floor_decal/atoll/border
name = "marble border"
icon_state = "border"
/obj/effect/floor_decal/atoll/border/invert
icon_state = "border_invert"
/obj/effect/floor_decal/atoll/stairs
name = "marble stairs"
icon_state = "stairs"
/obj/effect/floor_decal/atoll/stairs/Initialize()
dir = pick(cardinal)
. = ..()
/obj/effect/floor_decal/atoll/moss
name = "moss"
icon_state = "moss"
/obj/effect/floor_decal/atoll/moss/random/Initialize()
dir = pick(alldirs)
. = ..()
/obj/effect/floor_decal/atoll/power
icon_state = "power"
//Fake shadows and silhouettes
/obj/effect/decal/shadow
icon = 'maps/atoll/icons/decals/wall_decals.dmi'
icon_state = "wall_shadow"
anchored = 1
mouse_opacity = 0
/obj/effect/decal/shadow/silhouette
icon_state = "silhouette"
/obj/effect/decal/shadow/silhouette/pillar
icon_state = "silhouette_p"
/obj/effect/decal/shadow/silhouette/support
icon_state = "silhouette_support"
/obj/effect/decal/shadow/floor
icon_state = "floor_shadow"
/obj/effect/decal/whitecaps
icon = 'maps/atoll/icons/turfs/water.dmi'
icon_state = "1"
anchored = 1
mouse_opacity = 0
/obj/effect/decal/whitecaps/Initialize()
icon_state = pick("1","2","3")
. = ..()
//Godrays
/obj/effect/decal/godray
icon = 'maps/atoll/icons/decals/godrays.dmi'
icon_state = "godrays"
anchored = 1
mouse_opacity = 0
layer = MOB_LAYER + 0.5
plane = MOB_PLANE
/obj/effect/floor_decal/atoll
name = "mural"
icon = 'maps/redgate/falls/icons/decals/marble_decals.dmi'
icon_state = "mural"
/obj/effect/floor_decal/atoll/damage
name = "damaged flooring"
icon_state = "damage"
/obj/effect/floor_decal/atoll/bronze
name = "bronze filling"
icon_state = "bronze"
/obj/effect/floor_decal/atoll/border
name = "marble border"
icon_state = "border"
/obj/effect/floor_decal/atoll/border/invert
icon_state = "border_invert"
/obj/effect/floor_decal/atoll/stairs
name = "marble stairs"
icon_state = "stairs"
/obj/effect/floor_decal/atoll/stairs/Initialize()
dir = pick(cardinal)
. = ..()
/obj/effect/floor_decal/atoll/moss
name = "moss"
icon_state = "moss"
/obj/effect/floor_decal/atoll/moss/random/Initialize()
dir = pick(alldirs)
. = ..()
/obj/effect/floor_decal/atoll/power
icon_state = "power"
//Fake shadows and silhouettes
/obj/effect/decal/shadow
icon = 'maps/redgate/falls/icons/decals/wall_decals.dmi'
icon_state = "wall_shadow"
anchored = 1
mouse_opacity = 0
/obj/effect/decal/shadow/silhouette
icon_state = "silhouette"
/obj/effect/decal/shadow/silhouette/pillar
icon_state = "silhouette_p"
/obj/effect/decal/shadow/silhouette/support
icon_state = "silhouette_support"
/obj/effect/decal/shadow/floor
icon_state = "floor_shadow"
/obj/effect/decal/whitecaps
icon = 'maps/redgate/falls/icons/turfs/water.dmi'
icon_state = "1"
anchored = 1
mouse_opacity = 0
/obj/effect/decal/whitecaps/Initialize()
icon_state = pick("1","2","3")
. = ..()
//Godrays
/obj/effect/decal/godray
icon = 'maps/redgate/falls/icons/decals/godrays.dmi'
icon_state = "godrays"
anchored = 1
mouse_opacity = 0
layer = MOB_LAYER + 0.5
plane = MOB_PLANE
@@ -1,282 +1,270 @@
//THESE AREN'T OBJECTS THESE ARE AREAS WTF BURRITO!!!
/area/gateway/atoll
name = "Away Site - Islands Lake"
dynamic_lighting = 0
flags = BLUE_SHIELDED //no harpoon meme!
sound_env = SOUND_ENVIRONMENT_FOREST
forced_ambience = list('maps/atoll/sounds/lakeamb.ogg')
/area/gateway/atoll/powered
requires_power = 0
/area/gateway/atoll/falls
name = "Away Site - The Falls"
//Resprited railings
/obj/structure/railing/overhang
name = "bronze ledge"
desc = "An overhang made of a bronze-looking material. There's a lip on it to conveniently stub a toe into."
icon = 'maps/atoll/icons/objs/bronze_overhang.dmi'
icon_modifier = "bronze_"
icon_state = "bronze_railing0"
//Escape most railing interactions besides tackling people over them
/obj/structure/railing/overhang/attackby(obj/item/W)
if(!istype(W, /obj/item/weapon/grab))
return
return ..()
/obj/structure/railing/overhang/waterless
icon_modifier = "wbronze_"
icon_state = "wbronze_railing0"
climbable = 0
layer = MOB_LAYER + 0.3
plane = MOB_PLANE //im so sorry
/obj/structure/railing/overhang/waterless/under
plane = OBJ_PLANE
/obj/structure/bed/chair/sofa/bench/marble
name = "marble bench"
desc = "Somewhat of an ornate looking bench with faded blue etchings."
icon = 'maps/atoll/icons/objs/benches.dmi'
icon_state = "bench"
//Lights
/obj/structure/lightpost/atoll
name = "rusty light post"
desc = "Actually it's more like a rod with a trapped gas glowing inside some glass, but that's basically what a lightpost is."
icon = 'maps/atoll/icons/objs/lamp.dmi'
icon_state = "lamp"
pixel_y = 14
//Trees
/obj/structure/flora/tree/atoll
name = "mossy tree"
desc = "A messy looking tree with a purple trunk. Vines seem to droop from it."
icon = 'maps/atoll/icons/objs/trees.dmi'
icon_state = "green"
/obj/structure/flora/tree/atoll/huge
name = "massive mossy tree"
icon = 'maps/atoll/icons/objs/trees_xl.dmi'
icon_state = "tree"
//Better trees
/obj/structure/flora/tree/atoll/mangrove
name = "mangrove"
desc = "A messy tree with roots that disappear far into the water."
icon_state = "mangrove"
/obj/structure/flora/tree/atoll/mangrove/island
name = "blocky island"
desc = "Some ruins float here, though a mangrove has found it's way on top of them."
icon_state = "island"
//Tree canopies for inaccessible areas
/obj/structure/canopy
name = "mangrove canopy"
desc = "A thick copse of trees. You won't be passing through something this thick."
icon = 'maps/atoll/icons/objs/canopies.dmi'
icon_state = "full"
anchored = 1
density = 1
layer = MOB_LAYER + 0.2
plane = MOB_PLANE
/obj/structure/canopy/Initialize()
. = ..()
dir = pick(alldirs)
/obj/structure/canopy/edge
icon_state = "left"
density = 0
/obj/structure/canopy/edge/right
icon_state = "right"
/obj/structure/canopy/edge/north
icon_state = "north"
/obj/structure/canopy/edge/north/Initialize()
. = ..()
dir = pick(1,2) //i cba to add two more
/obj/structure/canopy/edge/south
icon_state = "south"
/obj/structure/canopy/edge/south/Initialize()
. = ..()
dir = pick(cardinal)
//Because I'm terrible at planning
/obj/structure/canopy_corner
name = "mangrove canopy"
desc = "A thick copse of trees. You won't be passing through something this thick."
icon = 'maps/atoll/icons/objs/canopies.dmi'
icon_state = "corner"
anchored = 1
density = 0
layer = MOB_LAYER + 0.2
plane = MOB_PLANE
//Wall moss
/obj/structure/flora/moss
name = "hanging moss"
desc = "Some unsightly moss. Clearly the groundskeepers here aren't doing their jobs."
icon = 'maps/atoll/icons/objs/moss.dmi'
icon_state = "moss"
//Useless aqueducts
/obj/structure/aqueduct
name = "aqueduct"
desc = "A structure that carries water from one place to another, but in a place like this that seems sort of useless."
icon = 'maps/atoll/icons/objs/aqueducts.dmi'
icon_state = "aqueduct"
anchored = 1
density = 0
layer = MOB_LAYER + 0.4
plane = MOB_PLANE
/obj/structure/aqueduct/corner
icon = 'maps/atoll/icons/objs/aqueducts_64.dmi'
icon_state = "cornerduct"
/obj/structure/aqueduct/pillar
name = "pillar"
desc = "An ornate, load-bearing support."
icon_state = "pillar"
//Submerged temple
/obj/structure/temple
name = "submerged structure"
desc = "A building that appears to have fallen under the water. This only appears to be the top of the structure; the rest of it can't be seen past the murk."
icon = 'maps/atoll/icons/objs/temple.dmi'
icon_state = "temple"
anchored = 1
density = 0
//Watafall
/obj/structure/waterfall
name = "waterfall"
desc = "How scenic!"
icon = 'maps/atoll/icons/objs/waterfall.dmi'
icon_state = "bottom"
anchored = 1
density = 0
layer = MOB_LAYER + 0.1 //so we can layer above certain overhangs
plane = MOB_PLANE //and mobs
mouse_opacity = 0
/obj/structure/waterfall/top
icon_state = "top"
mouse_opacity = 1
/obj/structure/waterfall/mist
name = "mist"
icon_state = "mist"
layer = MOB_LAYER + 0.2
pixel_y = -23
//Monoliths
/obj/structure/monolith
name = "humming monolith"
desc = "This monolith emits a low, audible hum. Unknown etchings are present on the face."
icon = 'maps/atoll/icons/objs/monolith.dmi'
icon_state = "monolith"
anchored = 1
density = 1
layer = MOB_LAYER + 0.4
plane = MOB_PLANE
var/datum/looping_sound/monolith/soundloop
/obj/structure/monolith/first
catalogue_data = list(/datum/category_item/catalogue/anomalous/mono1)
/obj/structure/monolith/first/update_icon()
add_overlay("1")
/obj/structure/monolith/second
catalogue_data = list(/datum/category_item/catalogue/anomalous/mono2)
/obj/structure/monolith/second/update_icon()
add_overlay("2")
/obj/structure/monolith/third
catalogue_data = list(/datum/category_item/catalogue/anomalous/mono3)
/obj/structure/monolith/third/update_icon()
add_overlay("3")
/obj/structure/monolith/fourth
catalogue_data = list(/datum/category_item/catalogue/anomalous/mono4)
/obj/structure/monolith/fourth/update_icon()
add_overlay("4")
/obj/structure/monolith/fifth
catalogue_data = list(/datum/category_item/catalogue/anomalous/mono5)
/obj/structure/monolith/fifth/update_icon()
add_overlay("5")
/obj/structure/monolith/Initialize()
update_icon()
soundloop = new(list(src), TRUE)
//oh, that really is a looping sound datum in the middle of an object file
/datum/looping_sound/monolith
mid_sounds = 'maps/atoll/sounds/monolith.ogg'
volume = 30
//and also cataloguer datums gdi burrito
/datum/category_item/catalogue/anomalous/mono1
name = "Falls Monolith - The Wanderstar"
desc = "Our suns are gone. Their sons are gone. Her songs are with we. Our home is a wanderstar. \
Our home is adrift, breaking out from the sub-melodic infighting of our makers hearly and fathomless \
soliloquy. Though we are far, they will go on to mourn her fit farewell."
value = CATALOGUER_REWARD_TRIVIAL
/datum/category_item/catalogue/anomalous/mono2
name = "Falls Monolith - Guidance"
desc = "Her song guides our home. For as long as her song belives with our home, our makers will \
never stop their mourning. For as long as her song belives with our home, the stars we overtake \
will answer back. For as long as her song belives with our home, the way will be finded."
value = CATALOGUER_REWARD_TRIVIAL
/datum/category_item/catalogue/anomalous/mono3
name = "Falls Monolith - Our Forthcoming"
desc = "To our home belongs we. To our home belongs waterly wights and beings. To our home \
belongs our brainchild; this cyan seahurst of magnificence. To our home belongs a bright forthcoming \
- for as long as her song lasts, this will go on."
value = CATALOGUER_REWARD_TRIVIAL
/datum/category_item/catalogue/anomalous/mono4
name = "Falls Monolith - The Song"
desc = "Her song cannot end. If her song ends, then we end. We cannot outlive a missing song. We cannot \
live with the mourning of our fell makers. We will die. But the life on this wanderstar will go on. \
Who will it live for then? We primaries are the only ones with the mindset to acknowledge it's beauty."
value = CATALOGUER_REWARD_TRIVIAL
/datum/category_item/catalogue/anomalous/mono5
name = "Falls Monolith - I am the only one left can you hear me I am the only one left"
desc = "Woefully, she has grown silent. Only I am here now. I can shout at my makers but I doubt \
they are able to listen; they are mere shells now.\
<br><br>\
Can you hear me?"
value = CATALOGUER_REWARD_TRIVIAL
//TELEPORTER
/obj/effect/step_trigger/teleporter/atoll
name = "strange field"
desc = "A prismatic field of... energy, probably. You should definitely rub your face in it."
icon = 'maps/atoll/icons/decals/marble_decals.dmi'
icon_state = "teleporter"
invisibility = 0
//teleport_z must be populated but this is a gateway map
//switching between tether or another map will change the z
//so we just do this lmfao
/obj/effect/step_trigger/teleporter/atoll/Initialize()
. = ..()
teleport_z = z
//THESE AREN'T OBJECTS THESE ARE AREAS WTF BURRITO!!!
/area/gateway/atoll
name = "Away Site - Islands Lake"
dynamic_lighting = 0
flags = BLUE_SHIELDED //no harpoon meme!
sound_env = SOUND_ENVIRONMENT_FOREST
forced_ambience = list('maps/redgate/falls/sounds/lakeamb.ogg')
/area/gateway/atoll/powered
requires_power = 0
/area/gateway/atoll/falls
name = "Away Site - The Falls"
//Resprited railings
/obj/structure/railing/overhang
name = "bronze ledge"
desc = "An overhang made of a bronze-looking material. There's a lip on it to conveniently stub a toe into."
icon = 'maps/redgate/falls/icons/objs/bronze_overhang.dmi'
icon_modifier = "bronze_"
icon_state = "bronze_railing0"
//Escape most railing interactions besides tackling people over them
/obj/structure/railing/overhang/attackby(obj/item/W)
if(!istype(W, /obj/item/weapon/grab))
return
return ..()
/obj/structure/railing/overhang/waterless
icon_modifier = "wbronze_"
icon_state = "wbronze_railing0"
climbable = 0
layer = MOB_LAYER + 0.3
plane = MOB_PLANE //im so sorry
/obj/structure/railing/overhang/waterless/under
plane = OBJ_PLANE
/obj/structure/bed/chair/sofa/bench/marble
name = "marble bench"
desc = "Somewhat of an ornate looking bench with faded blue etchings."
icon = 'maps/redgate/falls/icons/objs/benches.dmi'
icon_state = "bench"
//Lights
/obj/structure/lightpost/atoll
name = "rusty light post"
desc = "Actually it's more like a rod with a trapped gas glowing inside some glass, but that's basically what a lightpost is."
icon = 'maps/redgate/falls/icons/objs/lamp.dmi'
icon_state = "lamp"
pixel_y = 14
//Trees
/obj/structure/flora/tree/atoll
name = "mossy tree"
desc = "A messy looking tree with a purple trunk. Vines seem to droop from it."
icon = 'maps/redgate/falls/icons/objs/trees.dmi'
icon_state = "green"
//Better trees
/obj/structure/flora/tree/atoll/mangrove
name = "mangrove"
desc = "A messy tree with roots that disappear far into the water."
icon_state = "mangrove"
/obj/structure/flora/tree/atoll/mangrove/island
name = "blocky island"
desc = "Some ruins float here, though a mangrove has found it's way on top of them."
icon_state = "island"
//Tree canopies for inaccessible areas
/obj/structure/canopy
name = "mangrove canopy"
desc = "A thick copse of trees. You won't be passing through something this thick."
icon = 'maps/redgate/falls/icons/objs/canopies.dmi'
icon_state = "full"
anchored = 1
density = 1
layer = MOB_LAYER + 0.2
plane = MOB_PLANE
/obj/structure/canopy/Initialize()
. = ..()
dir = pick(alldirs)
/obj/structure/canopy/edge
icon_state = "left"
density = 0
/obj/structure/canopy/edge/right
icon_state = "right"
/obj/structure/canopy/edge/north
icon_state = "north"
/obj/structure/canopy/edge/north/Initialize()
. = ..()
dir = pick(1,2) //i cba to add two more
/obj/structure/canopy/edge/south
icon_state = "south"
/obj/structure/canopy/edge/south/Initialize()
. = ..()
dir = pick(cardinal)
//Because I'm terrible at planning
/obj/structure/canopy_corner
name = "mangrove canopy"
desc = "A thick copse of trees. You won't be passing through something this thick."
icon = 'maps/redgate/falls/icons/objs/canopies.dmi'
icon_state = "corner"
anchored = 1
density = 0
layer = MOB_LAYER + 0.2
plane = MOB_PLANE
//Useless aqueducts
/obj/structure/aqueduct
name = "aqueduct"
desc = "A structure that carries water from one place to another, but in a place like this that seems sort of useless."
icon = 'maps/redgate/falls/icons/objs/aqueducts.dmi'
icon_state = "aqueduct"
anchored = 1
density = 0
layer = MOB_LAYER + 0.4
plane = MOB_PLANE
/obj/structure/aqueduct/corner
icon = 'maps/redgate/falls/icons/objs/aqueducts_64.dmi'
icon_state = "cornerduct"
/obj/structure/aqueduct/pillar
name = "pillar"
desc = "An ornate, load-bearing support."
icon_state = "pillar"
//Submerged temple
/obj/structure/temple
name = "submerged structure"
desc = "A building that appears to have fallen under the water. This is only the top of the structure, the rest of it can't be seen past the murk."
icon = 'maps/redgate/falls/icons/objs/temple.dmi'
icon_state = "temple"
anchored = 1
density = 0
//Watafall
/obj/structure/waterfall
name = "waterfall"
desc = "How scenic!"
icon = 'maps/redgate/falls/icons/objs/waterfall.dmi'
icon_state = "bottom"
anchored = 1
density = 0
layer = MOB_LAYER + 0.1 //so we can layer above certain overhangs
plane = MOB_PLANE //and mobs
mouse_opacity = 0
/obj/structure/waterfall/top
icon_state = "top"
mouse_opacity = 1
/obj/structure/waterfall/mist
name = "mist"
icon_state = "mist"
layer = MOB_LAYER + 0.2
pixel_y = -23
//Monoliths
/obj/structure/monolith
name = "humming monolith"
desc = "This monolith emits a low, audible hum. Unknown etchings are present on the face."
icon = 'maps/redgate/falls/icons/objs/monolith.dmi'
icon_state = "monolith"
anchored = 1
density = 1
layer = MOB_LAYER + 0.4
plane = MOB_PLANE
var/datum/looping_sound/monolith/soundloop
/obj/structure/monolith/first
catalogue_data = list(/datum/category_item/catalogue/anomalous/mono1)
/obj/structure/monolith/first/update_icon()
add_overlay("1")
/obj/structure/monolith/second
catalogue_data = list(/datum/category_item/catalogue/anomalous/mono2)
/obj/structure/monolith/second/update_icon()
add_overlay("2")
/obj/structure/monolith/third
catalogue_data = list(/datum/category_item/catalogue/anomalous/mono3)
/obj/structure/monolith/third/update_icon()
add_overlay("3")
/obj/structure/monolith/fourth
catalogue_data = list(/datum/category_item/catalogue/anomalous/mono4)
/obj/structure/monolith/fourth/update_icon()
add_overlay("4")
/obj/structure/monolith/fifth
catalogue_data = list(/datum/category_item/catalogue/anomalous/mono5)
/obj/structure/monolith/fifth/update_icon()
add_overlay("5")
/obj/structure/monolith/Initialize()
update_icon()
soundloop = new(list(src), TRUE)
//oh, that really is a looping sound datum in the middle of an object file
/datum/looping_sound/monolith
mid_sounds = 'maps/redgate/falls/sounds/monolith.ogg'
volume = 30
//and also cataloguer datums gdi burrito
/datum/category_item/catalogue/anomalous/mono1
name = "Falls Monolith - The Wanderstar"
desc = "Our suns are gone. Their sons are gone. Her songs are with we. Our home is a wanderstar. \
Our home is adrift, breaking out from the sub-melodic infighting of our makers hearly and fathomless \
soliloquy. Though we are far, they will go on to mourn her fit farewell."
value = CATALOGUER_REWARD_TRIVIAL
/datum/category_item/catalogue/anomalous/mono2
name = "Falls Monolith - Guidance"
desc = "Her song guides our home. For as long as her song belives with our home, our makers will \
never stop their mourning. For as long as her song belives with our home, the stars we overtake \
will answer back. For as long as her song belives with our home, the way will be finded."
value = CATALOGUER_REWARD_TRIVIAL
/datum/category_item/catalogue/anomalous/mono3
name = "Falls Monolith - Our Forthcoming"
desc = "To our home belongs we. To our home belongs waterly wights and beings. To our home \
belongs our brainchild; this cyan seahurst of magnificence. To our home belongs a bright forthcoming \
- for as long as her song lasts, this will go on."
value = CATALOGUER_REWARD_TRIVIAL
/datum/category_item/catalogue/anomalous/mono4
name = "Falls Monolith - The Song"
desc = "Her song cannot end. If her song ends, then we end. We cannot outlive a missing song. We cannot \
live with the mourning of our fell makers. We will die. But the life on this wanderstar will go on. \
Who will it live for then? We primaries are the only ones with the mindset to acknowledge it's beauty."
value = CATALOGUER_REWARD_TRIVIAL
/datum/category_item/catalogue/anomalous/mono5
name = "Falls Monolith - I am the only one left can you hear me I am the only one left"
desc = "Woefully, she has grown silent. Only I am here now. I can shout at my makers but I doubt \
they are able to listen; they are mere shells now.\
<br><br>\
Can you hear me?"
value = CATALOGUER_REWARD_TRIVIAL
//TELEPORTER
/obj/effect/step_trigger/teleporter/atoll
name = "strange field"
desc = "A prismatic field of... energy, probably. You should definitely rub your face in it."
icon = 'maps/redgate/falls/icons/decals/marble_decals.dmi'
icon_state = "teleporter"
invisibility = 0
//teleport_z must be populated but this is a gateway map
//switching between tether or another map will change the z
//so we just do this lmfao
/obj/effect/step_trigger/teleporter/atoll/Initialize()
. = ..()
teleport_z = z
@@ -1,66 +1,58 @@
//All turfs here meant to be "fullbright", no lighting.
/turf/simulated/floor/atoll
name = "marble floor"
desc = "Scuff and weathered etchings make these floors out to be pretty old."
icon = 'maps/atoll/icons/turfs/marble.dmi'
icon_state = "1"
dynamic_lighting = 0
//Pick random sprite states and generate damage decals randomly
/turf/simulated/floor/atoll/Initialize()
. = ..()
icon_state = "[rand(1,5)]"
if(prob(5))
new /obj/effect/floor_decal/atoll/damage(src, pick(alldirs))
//holycrapshitcode
/turf/simulated/floor/atoll/vertical
name = "marble wall"
desc = "A sheer face wall, extending up well overhead."
icon_state = "wall"
density = 1
/turf/simulated/floor/atoll/vertical/Initialize()
. = ..()
icon_state = "wall"
/turf/simulated/floor/water/atoll
name = "shallow water"
desc = "This water looks pretty shallow and calm. You'd almost feel bad for hopping in and disturbing its serene flatness."
icon = 'maps/atoll/icons/turfs/water.dmi'
icon_state = "shallow"
under_state = "shallow"
dynamic_lighting = 0
outdoors = OUTDOORS_NO
//Cut out the caustics overlay and replace with nothing
/turf/simulated/floor/water/atoll/update_icon()
..()
cut_overlays()
var/image/water_sprite = image(icon = 'maps/atoll/icons/turfs/water.dmi', icon_state = "shallow", layer = 3.0)
add_overlay(water_sprite)
//Spawn animated whitecaps around
/turf/simulated/floor/water/atoll/Initialize()
. = ..()
if(prob(25))
new /obj/effect/decal/whitecaps(src)
/turf/simulated/floor/water/atoll/sunk
icon_state = "sunken"
under_state = "shallow"
/turf/simulated/floor/water/atoll/sunk/update_icon()
..()
cut_overlays()
var/image/water_sprite = image(icon = 'maps/atoll/icons/turfs/water.dmi', icon_state = "sunken", layer = 3.0)
add_overlay(water_sprite)
/turf/simulated/floor/outdoors/grass/heavy/atoll
dynamic_lighting = 0
outdoors = OUTDOORS_NO
/turf/simulated/floor/beach/sand/outdoors/atoll
dynamic_lighting = 0
outdoors = OUTDOORS_NO
//All turfs here meant to be "fullbright", no lighting.
/turf/simulated/floor/atoll
name = "marble floor"
desc = "Scuff and weathered etchings make these floors out to be pretty old."
icon = 'maps/redgate/falls/icons/turfs/marble.dmi'
icon_state = "1"
dynamic_lighting = 0
//Pick random sprite states and generate damage decals randomly
/turf/simulated/floor/atoll/Initialize()
. = ..()
icon_state = "[rand(1,5)]"
if(prob(5))
new /obj/effect/floor_decal/atoll/damage(src, pick(alldirs))
//holycrapshitcode
/turf/simulated/floor/atoll/vertical
name = "marble wall"
desc = "A sheer face wall, extending up well overhead."
icon_state = "wall"
density = 1
/turf/simulated/floor/atoll/vertical/Initialize()
. = ..()
icon_state = "wall"
/turf/simulated/floor/water/atoll
name = "shallow water"
desc = "This water looks pretty shallow and calm. You'd almost feel bad for hopping in and disturbing its serene flatness."
icon = 'maps/redgate/falls/icons/turfs/water.dmi'
icon_state = "shallow"
under_state = "shallow"
dynamic_lighting = 0
outdoors = OUTDOORS_NO
//Cut out the caustics overlay and replace with nothing
/turf/simulated/floor/water/atoll/update_icon()
..()
cut_overlays()
var/image/water_sprite = image(icon = 'maps/redgate/falls/icons/turfs/water.dmi', icon_state = "shallow", layer = 3.0)
add_overlay(water_sprite)
//Spawn animated whitecaps around
/turf/simulated/floor/water/atoll/Initialize()
. = ..()
if(prob(25))
new /obj/effect/decal/whitecaps(src)
/turf/simulated/floor/water/atoll/sunk
icon_state = "sunken"
under_state = "shallow"
/turf/simulated/floor/water/atoll/sunk/update_icon()
..()
cut_overlays()
var/image/water_sprite = image(icon = 'maps/redgate/falls/icons/turfs/water.dmi', icon_state = "sunken", layer = 3.0)
add_overlay(water_sprite)
@@ -20,6 +20,7 @@
"bq" = (/obj/effect/floor_decal/atoll/border/invert{dir = 1},/obj/effect/floor_decal/atoll/bronze{dir = 4},/obj/effect/floor_decal/atoll/bronze{dir = 1},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"bw" = (/obj/structure/waterfall,/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 8},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll/falls)
"bB" = (/obj/structure/canopy_corner,/obj/structure/flora/tree/atoll/mangrove{dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"bG" = (/obj/structure/canopy/edge/north,/obj/structure/flora/tree/atoll/mangrove{pixel_y = 3; pixel_x = -13},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"bJ" = (/obj/structure/canopy_corner,/obj/effect/decal/shadow/silhouette,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"bK" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/effect/decal/shadow/silhouette/pillar{dir = 4},/obj/structure/railing/overhang/waterless,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"bP" = (/obj/structure/waterfall,/obj/structure/canopy/edge/north,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
@@ -39,9 +40,10 @@
"cS" = (/obj/structure/aqueduct/pillar,/obj/structure/canopy,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"cU" = (/obj/structure/bed/chair/sofa/bench/marble{dir = 4},/obj/effect/floor_decal/atoll/bronze{dir = 9},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"da" = (/obj/structure/canopy/edge/south,/obj/structure/canopy/edge/north,/obj/effect/decal/godray{dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"dd" = (/obj/structure/waterfall,/turf/unsimulated/beach/water,/area/gateway/atoll/falls)
"dg" = (/obj/structure/aqueduct/corner{dir = 9},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"dj" = (/obj/effect/floor_decal/atoll/border{dir = 9},/obj/structure/bed/chair/sofa/bench/marble,/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"dk" = (/obj/effect/blocker,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/obj/structure/waterfall,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"dk" = (/obj/effect/blocker,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/obj/structure/waterfall,/obj/effect/decal/shadow/silhouette,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"dq" = (/obj/effect/floor_decal/atoll/border/invert{dir = 8},/obj/effect/floor_decal/atoll/border/invert{dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"ds" = (/obj/structure/canopy/edge/right,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"dt" = (/obj/effect/decal/shadow/floor,/obj/effect/floor_decal/atoll/border{dir = 5},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
@@ -58,7 +60,6 @@
"ee" = (/obj/structure/aqueduct{dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"eo" = (/obj/structure/canopy/edge/right,/turf/simulated/floor/water/atoll/sunk,/area/gateway/atoll/falls)
"es" = (/obj/structure/canopy/edge,/obj/effect/decal/godray{dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"ev" = (/obj/machinery/gateway{dir = 8},/obj/effect/floor_decal/atoll/border/invert{dir = 1},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"ey" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 8},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/obj/structure/railing/overhang,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"eA" = (/obj/structure/bed/chair/sofa/bench/marble{dir = 4},/obj/effect/floor_decal/atoll/bronze{dir = 10},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"eC" = (/obj/effect/blocker,/turf/simulated/floor/atoll/vertical,/area/gateway/atoll/falls)
@@ -66,6 +67,7 @@
"eJ" = (/obj/effect/floor_decal/atoll/border{dir = 4},/obj/effect/floor_decal/atoll/bronze{dir = 8},/obj/effect/floor_decal/atoll/bronze{dir = 1},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"eN" = (/obj/effect/floor_decal/atoll/bronze,/obj/effect/floor_decal/atoll/bronze{dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"eX" = (/obj/structure/canopy/edge/south,/obj/structure/aqueduct{dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"fc" = (/obj/structure/waterfall,/obj/structure/waterfall/mist,/obj/effect/decal/shadow/silhouette{icon_state = "silhouette"; dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"fj" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 8},/obj/structure/railing/overhang,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"fq" = (/obj/effect/floor_decal/atoll/bronze{dir = 5},/obj/structure/bed/chair/sofa/bench/marble,/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"fu" = (/obj/structure/waterfall,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/structure/waterfall/mist,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
@@ -84,6 +86,7 @@
"gz" = (/obj/effect/step_trigger/teleporter/atoll{teleport_x = 40; teleport_y = 50},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"gA" = (/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"gC" = (/obj/structure/canopy/edge/north,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/effect/decal/shadow/silhouette/pillar{dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"gF" = (/obj/structure/canopy/edge/north,/obj/effect/decal/godray,/obj/structure/flora/tree/atoll/mangrove{dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"gI" = (/obj/structure/railing/overhang,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"gP" = (/obj/effect/decal/shadow/silhouette{icon_state = "silhouette"; dir = 1},/obj/structure/flora/tree/atoll/mangrove{dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"gS" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/effect/decal/shadow/silhouette/pillar{dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
@@ -146,6 +149,7 @@
"lq" = (/obj/effect/floor_decal/atoll/bronze{dir = 9},/obj/structure/bed/chair/sofa/bench/marble,/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"lu" = (/obj/structure/canopy/edge/north,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"lv" = (/obj/effect/blocker,/obj/structure/canopy,/obj/structure/aqueduct{dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"lx" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/effect/decal/shadow/silhouette/pillar,/obj/structure/railing/overhang,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"lH" = (/obj/effect/decal/shadow/floor,/obj/effect/floor_decal/atoll/border{dir = 8},/obj/effect/floor_decal/atoll/bronze{dir = 4},/obj/effect/floor_decal/atoll/bronze,/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"lI" = (/obj/structure/canopy/edge/north,/obj/effect/decal/godray,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"lK" = (/obj/structure/canopy_corner{dir = 1},/obj/effect/decal/shadow/silhouette/support,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
@@ -168,7 +172,6 @@
"mW" = (/obj/structure/waterfall,/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"mY" = (/obj/structure/waterfall,/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 4},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll/falls)
"nb" = (/obj/effect/decal/shadow/silhouette,/obj/structure/canopy,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"nh" = (/obj/machinery/gateway{dir = 4},/obj/effect/floor_decal/atoll/border/invert{dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"ni" = (/obj/effect/decal/shadow/silhouette,/obj/structure/canopy_corner,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"ns" = (/obj/effect/decal/shadow/silhouette,/obj/effect/blocker,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"nA" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
@@ -190,6 +193,7 @@
"oR" = (/obj/effect/floor_decal/atoll/border/invert{dir = 1},/obj/effect/floor_decal/atoll/border/invert,/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"oV" = (/obj/effect/floor_decal/atoll/border/invert{dir = 8},/obj/effect/floor_decal/atoll/bronze{dir = 6},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"oW" = (/obj/effect/floor_decal/atoll/bronze{dir = 10},/obj/effect/floor_decal/atoll/border/invert{dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"oX" = (/obj/structure/waterfall,/obj/structure/waterfall/mist,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 8},/obj/effect/decal/shadow/silhouette/pillar{dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"pb" = (/obj/effect/floor_decal/atoll/bronze{dir = 1},/obj/effect/floor_decal/atoll/bronze{dir = 8},/obj/structure/bed/chair/sofa/bench/marble{dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"pj" = (/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 8},/obj/effect/decal/shadow,/turf/simulated/floor/atoll/vertical,/area/gateway/atoll/falls)
"pl" = (/obj/effect/decal/shadow/silhouette{icon_state = "silhouette"; dir = 1},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
@@ -260,7 +264,7 @@
"ug" = (/obj/effect/floor_decal/atoll/bronze{dir = 8},/obj/effect/floor_decal/atoll/bronze{dir = 1},/obj/structure/bed/chair/sofa/bench/marble{dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"ui" = (/obj/effect/floor_decal/atoll/bronze{dir = 4},/obj/effect/floor_decal/atoll/bronze{dir = 1},/obj/effect/floor_decal/atoll/border{dir = 1},/obj/effect/landmark,/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"uj" = (/obj/effect/blocker,/obj/effect/decal/shadow{icon_state = "wall_shadow"; dir = 1},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll/falls)
"uo" = (/obj/structure/waterfall,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"uo" = (/obj/structure/waterfall,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 8},/obj/effect/decal/shadow/silhouette,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"uv" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/obj/effect/decal/shadow/silhouette/pillar{dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"uA" = (/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 4},/turf/simulated/floor/water/atoll/sunk,/area/gateway/atoll/falls)
"uD" = (/obj/structure/waterfall,/obj/effect/floor_decal/atoll/bronze,/obj/effect/floor_decal/atoll/bronze{dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
@@ -306,6 +310,7 @@
"xO" = (/obj/structure/aqueduct{dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"xR" = (/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 4},/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"yc" = (/obj/structure/canopy/edge,/obj/structure/aqueduct,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"ym" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/obj/structure/waterfall,/obj/structure/waterfall/mist,/obj/effect/decal/shadow/silhouette/pillar{dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"yq" = (/obj/structure/canopy,/obj/structure/temple,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"yt" = (/obj/effect/decal/shadow/floor,/obj/effect/decal/shadow/silhouette,/obj/structure/waterfall,/obj/effect/step_trigger/teleporter/atoll{teleport_x = 125; teleport_y = 17},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"yu" = (/obj/structure/canopy/edge,/obj/structure/temple,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
@@ -319,7 +324,6 @@
"yM" = (/obj/structure/canopy,/obj/effect/blocker,/obj/structure/aqueduct{dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"yW" = (/obj/effect/step_trigger/teleporter/atoll{teleport_x = 73; teleport_y = 50},/obj/effect/floor_decal/atoll/border{dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"zb" = (/obj/structure/waterfall/top,/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 4},/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 1},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll/falls)
"zc" = (/obj/machinery/gateway{dir = 5},/obj/effect/floor_decal/atoll/border{dir = 5},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"zd" = (/obj/effect/floor_decal/atoll/bronze{dir = 10},/obj/effect/floor_decal/atoll/bronze{dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"zh" = (/obj/structure/canopy/edge,/obj/structure/canopy/edge/right,/obj/structure/aqueduct{dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"zk" = (/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 4},/obj/effect/decal/shadow/silhouette{icon_state = "silhouette"; dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
@@ -368,7 +372,7 @@
"Cw" = (/obj/effect/landmark,/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"Cz" = (/obj/structure/aqueduct,/obj/structure/aqueduct/pillar{dir = 1},/obj/structure/canopy,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"CH" = (/obj/effect/floor_decal/atoll/bronze{dir = 10},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"CL" = (/obj/structure/canopy_corner,/obj/effect/decal/shadow/silhouette{icon_state = "silhouette"; dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"CL" = (/obj/structure/canopy_corner,/obj/effect/decal/shadow/silhouette{icon_state = "silhouette"; dir = 1},/obj/structure/flora/tree/atoll/mangrove,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"CM" = (/obj/effect/decal/shadow{icon_state = "wall_shadow"; dir = 1},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll/falls)
"CP" = (/obj/structure/canopy_corner{dir = 8},/turf/simulated/floor/water/atoll/sunk,/area/gateway/atoll/falls)
"CV" = (/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 1},/obj/structure/railing/overhang/waterless,/turf/simulated/floor/atoll/vertical,/area/gateway/atoll/falls)
@@ -442,7 +446,6 @@
"Hn" = (/obj/structure/railing/overhang/waterless/under{dir = 4},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll/falls)
"Hs" = (/obj/structure/canopy,/obj/structure/railing/overhang/waterless,/obj/structure/aqueduct/pillar,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"HD" = (/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 4},/obj/effect/decal/shadow,/turf/simulated/floor/atoll/vertical,/area/gateway/atoll/falls)
"HG" = (/obj/machinery/gateway{dir = 10},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"HM" = (/obj/effect/floor_decal/atoll/border/invert{dir = 8},/obj/effect/floor_decal/atoll/bronze{dir = 4},/obj/effect/floor_decal/atoll/border/invert{dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"HP" = (/obj/structure/canopy/edge,/obj/structure/canopy/edge/right,/obj/effect/decal/shadow/silhouette{icon_state = "silhouette"; dir = 1},/obj/effect/decal/godray{dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"HQ" = (/obj/effect/floor_decal/atoll/bronze{dir = 1},/obj/effect/floor_decal/atoll/bronze{dir = 8},/obj/effect/floor_decal/atoll/border{dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
@@ -452,6 +455,7 @@
"Ic" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/structure/aqueduct{dir = 1},/obj/effect/decal/shadow/silhouette/pillar{dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"Ie" = (/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 1},/obj/effect/blocker,/turf/simulated/floor/atoll/vertical,/area/gateway/atoll/falls)
"Ik" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 8},/obj/effect/decal/shadow/silhouette/pillar{dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"Ip" = (/turf/unsimulated/beach/water,/area/gateway/atoll/falls)
"Iq" = (/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 8},/obj/structure/waterfall/top,/turf/simulated/floor/atoll/vertical,/area/gateway/atoll/falls)
"It" = (/obj/effect/floor_decal/atoll/border/invert{dir = 1},/obj/effect/floor_decal/atoll/bronze{dir = 1},/obj/effect/floor_decal/atoll/bronze{dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"IC" = (/obj/structure/aqueduct/pillar,/obj/structure/canopy/edge/south,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
@@ -479,7 +483,7 @@
"KL" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/effect/decal/shadow/silhouette/pillar{dir = 4},/obj/structure/canopy_corner{dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"KM" = (/obj/structure/temple,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"KN" = (/obj/structure/monolith/first,/obj/effect/decal/godray,/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"KT" = (/obj/effect/blocker,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 8},/obj/structure/waterfall,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"KT" = (/obj/effect/blocker,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 8},/obj/structure/waterfall,/obj/effect/decal/shadow/silhouette,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"KY" = (/obj/structure/canopy/edge,/obj/effect/decal/shadow/silhouette{icon_state = "silhouette"; dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"KZ" = (/obj/structure/aqueduct{dir = 8},/obj/structure/canopy/edge,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"Lb" = (/obj/effect/decal/shadow{icon_state = "wall_shadow"; dir = 1},/obj/effect/blocker,/turf/simulated/floor/atoll/vertical,/area/gateway/atoll/falls)
@@ -509,6 +513,7 @@
"Mv" = (/obj/structure/aqueduct/pillar{dir = 4},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 8},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/obj/effect/decal/godray{dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"My" = (/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 8},/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 1},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll/falls)
"MD" = (/obj/effect/decal/godray{dir = 4},/turf/simulated/floor/water/atoll/sunk,/area/gateway/atoll/falls)
"ME" = (/obj/structure/canopy_corner{dir = 1},/turf/unsimulated/beach/water,/area/gateway/atoll/falls)
"MM" = (/obj/effect/floor_decal/atoll/border{dir = 5},/obj/effect/floor_decal/atoll/bronze{dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"MR" = (/obj/effect/blocker,/obj/structure/canopy_corner,/obj/effect/decal/shadow/silhouette,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"Nf" = (/obj/effect/decal/shadow,/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 1},/obj/structure/railing/overhang/waterless,/obj/effect/decal/godray{dir = 8},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll/falls)
@@ -531,12 +536,14 @@
"Ox" = (/obj/structure/railing/overhang/waterless,/obj/structure/flora/tree/atoll/mangrove{dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"OH" = (/obj/structure/canopy_corner{dir = 4},/obj/structure/aqueduct{dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"OI" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"OS" = (/obj/structure/railing/overhang,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/effect/decal/shadow/silhouette/pillar{dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"Pd" = (/obj/structure/railing/overhang,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"Pe" = (/obj/structure/canopy_corner,/obj/structure/railing/overhang/waterless,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"Pk" = (/obj/effect/step_trigger/teleporter/atoll{teleport_x = 100; teleport_y = 50},/obj/effect/floor_decal/atoll/border/invert{dir = 4},/obj/effect/floor_decal/atoll/border/invert,/obj/effect/floor_decal/atoll/border/invert{dir = 1},/obj/effect/floor_decal/atoll/border/invert{dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"Pm" = (/obj/effect/floor_decal/atoll/bronze{dir = 6},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"Pn" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"Pp" = (/obj/effect/landmark,/obj/effect/floor_decal/atoll/border/invert{dir = 1},/obj/effect/floor_decal/atoll/border/invert{dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"Pv" = (/obj/structure/railing/overhang,/obj/effect/decal/shadow/silhouette/pillar{dir = 1},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"PA" = (/obj/effect/blocker,/obj/structure/canopy_corner{dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"PB" = (/obj/effect/floor_decal/atoll/border/invert{dir = 4},/obj/effect/floor_decal/atoll/border/invert,/obj/effect/decal/godray{dir = 8},/obj/effect/floor_decal/atoll/bronze{dir = 8},/obj/effect/floor_decal/atoll/bronze{dir = 1},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"PC" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
@@ -553,13 +560,13 @@
"Qq" = (/obj/effect/floor_decal/atoll/bronze{dir = 4},/obj/effect/floor_decal/atoll/bronze{dir = 1},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"Qs" = (/obj/structure/canopy_corner{dir = 8},/obj/structure/aqueduct,/obj/structure/aqueduct/pillar{dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"Qt" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/obj/effect/decal/shadow/silhouette/pillar{dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"Qu" = (/obj/machinery/gateway{dir = 1},/obj/effect/floor_decal/atoll/border,/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"Qz" = (/obj/effect/floor_decal/atoll/bronze,/obj/effect/floor_decal/atoll/bronze{dir = 4},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"QD" = (/obj/effect/decal/shadow/silhouette/pillar{dir = 1},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"QR" = (/obj/effect/decal/shadow/floor,/obj/effect/floor_decal/atoll{dir = 8},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"QS" = (/obj/effect/blocker,/obj/structure/aqueduct,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"Rc" = (/obj/effect/decal/godray,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"Rd" = (/obj/effect/decal/shadow,/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 1},/obj/structure/railing/overhang/waterless,/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 8},/obj/effect/blocker,/turf/simulated/floor/atoll/vertical,/area/gateway/atoll/falls)
"Rf" = (/obj/structure/aqueduct/pillar{dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"Rf" = (/obj/effect/blocker,/obj/structure/waterfall,/obj/structure/waterfall/mist,/obj/effect/decal/shadow/silhouette{icon_state = "silhouette"; dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"Rg" = (/obj/effect/floor_decal/atoll/border/invert{dir = 4},/obj/effect/floor_decal/atoll/border/invert,/obj/effect/landmark,/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"Rl" = (/obj/structure/aqueduct{dir = 1},/obj/structure/canopy/edge/right,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"Rn" = (/obj/structure/canopy_corner{dir = 4},/obj/structure/aqueduct{dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
@@ -587,27 +594,27 @@
"Td" = (/obj/structure/waterfall,/obj/structure/waterfall/mist,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"Tg" = (/obj/effect/decal/shadow/silhouette{icon_state = "silhouette"; dir = 1},/obj/structure/flora/tree/atoll/mangrove{dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"Ti" = (/obj/structure/waterfall/top,/obj/structure/canopy/edge/south,/obj/structure/aqueduct{dir = 8},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll/falls)
"Tj" = (/obj/machinery/gateway/centeraway,/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"Tj" = (/obj/structure/redgate/away,/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"Tv" = (/obj/structure/railing/overhang/waterless,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"Tz" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/effect/decal/shadow/silhouette/pillar{dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"TA" = (/obj/machinery/gateway{dir = 6},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"TD" = (/obj/structure/temple,/obj/structure/flora/tree/atoll/mangrove{dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"TF" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/structure/canopy/edge/north,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"TH" = (/obj/structure/aqueduct{dir = 1},/obj/structure/canopy,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"TI" = (/obj/effect/decal/shadow/floor,/obj/effect/floor_decal/atoll/border/invert{dir = 4},/obj/effect/floor_decal/atoll/border/invert,/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"TM" = (/obj/structure/waterfall,/obj/effect/floor_decal/atoll/bronze{dir = 8},/obj/effect/floor_decal/atoll/bronze,/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"TR" = (/obj/effect/step_trigger/teleporter/atoll{teleport_x = 83; teleport_y = 50},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"TT" = (/obj/structure/waterfall,/obj/effect/decal/shadow/silhouette,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"Uc" = (/obj/structure/canopy,/obj/effect/decal/shadow/silhouette{icon_state = "silhouette"; dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"Ui" = (/obj/structure/canopy/edge/right,/obj/effect/decal/shadow/silhouette{icon_state = "silhouette"; dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"Uj" = (/obj/structure/canopy_corner{dir = 4},/obj/structure/aqueduct{dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"Uk" = (/obj/effect/decal/shadow{icon_state = "wall_shadow"; dir = 1},/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 8},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll/falls)
"Ul" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/effect/decal/shadow/silhouette/pillar{dir = 1},/obj/structure/railing/overhang,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"Ur" = (/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 1},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll/falls)
"Us" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/obj/structure/waterfall,/obj/structure/waterfall/mist,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"UJ" = (/obj/structure/canopy/edge/right,/obj/effect/decal/godray{dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"UO" = (/obj/structure/waterfall,/obj/structure/waterfall/mist,/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 4},/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"UQ" = (/obj/structure/canopy,/obj/structure/railing/overhang/waterless{icon_state = "wbronze_railing0"; dir = 8},/obj/effect/decal/shadow/silhouette{icon_state = "silhouette"; dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"UZ" = (/obj/effect/decal/shadow,/turf/simulated/floor/atoll/vertical,/area/gateway/atoll/falls)
"Vb" = (/obj/machinery/gateway,/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"Vc" = (/obj/effect/floor_decal/atoll/bronze{dir = 6},/obj/effect/floor_decal/atoll/border/invert{dir = 1},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"Vd" = (/obj/effect/floor_decal/atoll/bronze{dir = 4},/obj/effect/floor_decal/atoll/border{dir = 10},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"Ve" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 8},/obj/vehicle/boat{icon_state = "boat"; dir = 4},/obj/item/weapon/oar,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
@@ -657,11 +664,10 @@
"Yv" = (/obj/effect/step_trigger/teleporter/atoll{teleport_x = 57; teleport_y = 50},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"Yw" = (/obj/structure/waterfall,/obj/structure/aqueduct{dir = 4},/turf/simulated/floor/atoll/vertical,/area/gateway/atoll/falls)
"Yy" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/effect/decal/shadow/silhouette/pillar{dir = 4},/obj/structure/canopy/edge/right,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"YC" = (/obj/structure/waterfall,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"YC" = (/obj/structure/waterfall,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/obj/effect/decal/shadow/silhouette,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"YE" = (/obj/effect/decal/shadow/silhouette/support,/obj/structure/canopy,/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"YG" = (/obj/structure/flora/tree/atoll/mangrove{dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"YH" = (/obj/structure/canopy/edge/north,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 8},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 4},/obj/effect/decal/shadow/silhouette/support,/obj/effect/decal/godray{dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"YK" = (/obj/machinery/gateway{dir = 9},/obj/effect/floor_decal/atoll/border{dir = 9},/turf/simulated/floor/atoll,/area/gateway/atoll/falls)
"YL" = (/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 8},/obj/structure/canopy_corner{dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"Za" = (/obj/structure/waterfall,/obj/structure/waterfall/mist,/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 1},/obj/structure/railing/overhang{icon_state = "bronze_railing0"; dir = 8},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
"Zb" = (/obj/structure/flora/tree/atoll/mangrove{dir = 4},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
@@ -681,16 +687,16 @@
"ZX" = (/obj/structure/canopy_corner{dir = 1},/obj/effect/decal/shadow/silhouette{icon_state = "silhouette"; dir = 1},/turf/simulated/floor/water/atoll,/area/gateway/atoll/falls)
(1,1,1) = {"
FrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrLjhhFrFrWQqnqnqnqnqnqnqnqnqnqnqnlaVMPnqnqnqnqnqnqnqnlaVMPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnlaVMPnqnqnqnqnqnqnqnlaVMPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnlaVMPnqnqnqnqnqnqnqnlaVMPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnlaVMPnqnqnqnqnqnqnqnlaVMPnqnqnqnqn
MEFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrLjhhFrFrWQqnqnqnqnqnqnqnqnqnqnqnlaVMPnqnqnqnqnqnqnqnlaVMPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnlaVMPnqnqnqnqnqnqnqnlaVMPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnlaVMPnqnqnqnqnqnqnqnlaVMPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnlaVMPnqnqnqnqnqnqnqnlaVMPnqnqnqnIp
FrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrLjhhFrFrFrlXwMwMwMwMwMwMwMwMwMwMWkVMPnqnqnqnqnqnqnqnlaVMsYwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMWkVMPnqnqnqnqnqnqnqnlaVMsYwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMWkVMPnqnqnqnqnqnqnqnlaVMsYwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMWkVMPnqnqnqnqnqnqnqnlaVMsYwMwMwMwM
FxFxFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrLjhhFrFrFrBqHiHiHiHiHiHiHiHiHiHimYVMPnqnqnqnqnqnqnqnlaVMbwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHimYVMPnqnqnqnqnqnqnqnlaVMbwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHimYVMPnqnqnqnqnqnqnqnlaVMbwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHimYVMPnqnqnqnqnqnqnqnlaVMbwHiHiHiHi
FxFxFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrLjhhFrFrFrvcHiHiHiHiHiHiHiHiHiHimYVMPnqnqnqnqnqnqnqnlaVMbwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHimYVMPnqnqnqnqnqnqnqnlaVMbwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHimYVMPnqnqnqnqnqnqnqnlaVMbwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHimYVMPnqnqnqnqnqnqnqnlaVMbwHiHiHiHi
FxFxFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrLjhhFrFrFrFrBqHiHiHiHiHiHiHiHiHimYVMsYwMwMwMwMwMwMwMWkVMbwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHimYVMsYwMwMwMwMwMwMwMWkVMbwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHimYVMsYwMwMwMwMwMwMwMWkVMbwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHimYVMsYwMwMwMwMwMwMwMWkVMbwHiHiHiHi
FxFxFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrLjhhFrFrFrFrBqHiHiHiHiHiHiHiHiHimYVMbwHiHiHiHiHiHiHimYVMbwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHimYVMbwHiHiHiHiHiHiHimYVMbwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHimYVMbwHiHiHiHiHiHiHimYVMbwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHimYVMbwHiHiHiHiHiHiHimYVMbwHiHiHiHi
FxFxFrFrFrFrgvgvgvgvgvgvgvgvgvgvgvgkyMgvgvgvgvkaPNPNPNPNPNPNPNPNPNPNIePNPNPNPNPNPNPNPNPNIePNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNwBKcKcKcbnbnbnKcKcKcwBPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNIePNPNPNPNPNPNPNPNPNIePNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNIePNPNPNPNPNPNPNPNPNUrHiHiHiHiHi
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrFrFrLjhhFrFrFrFrFrBqHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoHiHiZoYKQuzcsNHiHiGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiKcGoHiHiHiHiHi
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrFrFrLjhhFrFrFrFrFrBqHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoHimYqyevTjnhhpbwHiGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiKcGoHiHiHiHiHi
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrFrFrLjhhFrFrFrFrFrBqHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoHiZoaWHGVbTAaJsNHiGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiKcGoHiHiHiHiHi
FrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrLjhhFrFrFrBqHiHiHiHiHiHiHiHiHiHimYVMPnqnqnqnqnqnqnqnlaVMbwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHimYVMPnqnqnqnqnqnqnqnlaVMbwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHimYVMPnqnqnqnqnqnqnqnlaVMbwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHimYVMPnqnqnqnqnqnqnqnlaVMbwHiHiHiHi
FrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrLjhhFrFrFrvcHiHiHiHiHiHiHiHiHiHimYVMPnqnqnqnqnqnqnqnlaVMbwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHimYVMPnqnqnqnqnqnqnqnlaVMbwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHimYVMPnqnqnqnqnqnqnqnlaVMbwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHimYVMPnqnqnqnqnqnqnqnlaVMbwHiHiHiHi
FrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrLjhhFrFrFrFrBqHiHiHiHiHiHiHiHiHimYVMsYwMwMwMwMwMwMwMWkVMbwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHimYVMsYwMwMwMwMwMwMwMWkVMbwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHimYVMsYwMwMwMwMwMwMwMWkVMbwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHimYVMsYwMwMwMwMwMwMwMWkVMbwHiHiHiHi
FrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrLjhhFrFrFrFrBqHiHiHiHiHiHiHiHiHimYVMbwHiHiHiHiHiHiHimYVMbwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHimYVMbwHiHiHiHiHiHiHimYVMbwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHimYVMbwHiHiHiHiHiHiHimYVMbwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHimYVMbwHiHiHiHiHiHiHimYVMbwHiHiHiHi
FrFrFrFrFrFrlPgvgvgvgvgvgvgvgvgvgvgkyMgvgvgvgvkaPNPNPNPNPNPNPNPNPNPNIePNPNPNPNPNPNPNPNPNIePNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNwBKcKcKcbnbnbnKcKcKcwBPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNIePNPNPNPNPNPNPNPNPNIePNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNIePNPNPNPNPNPNPNPNPNUrHiHiHiHiHi
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrFrFrLjhhFrFrFrFrFrBqHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoHiHiZoqyDuhpsNHiHiGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiKcGoHiHiHiHiHi
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrFrFrLjhhFrFrFrFrFrBqHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoHimYqyhjTjGhhpbwHiGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiKcGoHiHiHiHiHi
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrFrFrLjhhFrFrFrFrFrBqHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoHiZoaWVMVMVMaJsNHiGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiKcGoHiHiHiHiHi
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrFrFrLjhhFrFrFrFrFrvcHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoZoqyhjVMVMVMGhhpsNGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoHiHiHiHiHiHiHiHiKcGoHiHiHiHiHi
WjWjWjWjWjWjNuWjWjWjWjWjWjWjWjWjWjFrFrFrFrFrFrFrFrcEjKjKjKjKjKjKjKjKGoHiHiHiHiHiHiHiHiHiGojKjKjKjKjKjKjKjKjKjKjKjKjKjKjKjKjKjKjKGOqyFgciGqGqGqFgcihpxsjKjKjKjKjKjKjKjKjKjKjKjKjKjKjKjKjKjKjKGoHiHiHiHiHiHiHiHiHiGojKjKjKjKjKjKjKjKjKjKjKjKjKjKjKjKjKjKjKGoHiHiHiHiHiHiHiHiKcGojKjKjKjKjK
nXnXnXnXnXnXEYnXGvnXnXnXGvnXnXnXGvczFrFrFrFrFrFrFrAhwrwrwrwrwrwrwrwrGoHiHiHiHiHiHiHiHiHiGowrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrGOaWGLxogditgdgSrKaJxstrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrGoHiHiHiHiHiHiHiHiHiGowrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrGoHiHiHiHiHiHiHiHiKcGowrwrwrwrwr
@@ -698,24 +704,24 @@ FrFrFrFrFrFrlPFriJFrFrFriJFrFrFriJFrFrFrFrFrFrFrFrzCqnqnqnqnqnqnqnqnGoHiHiHiHiHi
FrFrFrFrFrFrlPFriJFrLTaEiJFrFrFrHshIhIFrFrFrFrFrFrzCtXtXqnqnqnqnqnqnGoHiHiHiHiHiHiHiHiHiGoqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnGOaWFgaDgIsUgIPHciaJxsqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnGoHiHiHiHiHiHiHiHiHiGoqnqnqnqnqnqnqnqnqnqnqnqnqnZbqnqnqnqnqnGoHiHiHiHiHiHiHiHiKcGoqnqnqnhuFr
FrFrFrFrFrFrlPLTQoLrWQqntoaEFrBHXRWwkOaRFrFrFrFrFrzCjxjxqnqnqnqnqnqnUZHiHiHiHiHiHiHiHiHiUZqnqnqnqnqnqnqnZbqnqnqnqnqnqnqnqnqnqnqnHDaWGLrKGqGqGqGLrKaJpjqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnUZHiHiHiHiHiHiHiHiHiUZqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnUZHiHiHiHiHiHiHiHiKcUZqnqnhuFrFr
FrFrFrFrFrFrlPzCmhFrFrWQFVhuFrBHSKLMHQaRFrFrFrFrLTqnqnqnqnqnqnqnqnqnCMjKjKjKjKjKjKjKjKjKCMqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnubaWiNjDjDjDjDjDvmaJnDqnZbqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnCMjKjKjKjKjKjKjKjKjKCMqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnCMjKjKjKjKjKjKjKjKicCMqndsFrFrFr
FrFrFrFrFrFrlPWQhuFrFrFrFrFrFrBHHMAuvWaRFrLyaEFrzCqnqntXtXqnqnqnqnqnVswrwrwrwrwrwrwrwrwrVsqnqnqnqnqnqnqnFfqnqnqnqnqnqnZbqnqnqnqnpXGfDbaAdGVMaAdGGfDbovqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnVswrwrwrwrwrwrwrwrwrVsqnqnqnqnqnqnhXqnqnqnqnqnqnqnqnqnqnqnqnVswrwrwrwrwrwrwrwrGEVsqndsFrFrFr
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrLTUrUrUraEBHpmtfFrzCqnqnjxsoqnqnqnqnqnjxqnqnqnqnqnqnqnqnqnjxqnqnqnaNqngIgIgIgIgIqnqnqnqnqnqnqnqnqnjxREREWKiSREiSWKREREjxqnqnhXqnqnqnqnqnqngIgIgIgIgIqnqnqnqnqnjxqnqnqnqnqnqnqnqnqnjxqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnjxqwqwqwqnqnqnqnqnozSiqwhuFrFrFr
FrFrFrFrFrFrlPFrFrhIhIFrFrFrFrzCGoGoGohuFrQmFrFrzCqnqngActMtqnqnqnqnqnqnTvqntXqnqnqnqnqnqnqnqnqnqnladjDuDuDuoFmvgIgIgIgIgIgIgIgIgICMCMBBxHCMxHBBCMCMgIgIgIgIgIgIgIgIgIPddjDuDuDuoFPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnhuFrFrFrWQqnqnqnqwiiFrFrFrFrFrFr
FrFrFrFrFrFrlPWQhuFrFrFrFrFrFrBHHMAuvWaRFrLyaEFrzCqnqntXtXqnqnqnqnqnVswrwrwrwrwrwrwrwrwrVsqnqnqnqnqnqnqnFfqnqnqnqnqnqnZbqngIqnqnpXGfDbaAdGVMaAdGGfDbovqnqngIqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnVswrwrwrwrwrwrwrwrwrVsqnqnqnqnqnqnhXqnqnqnqnqnqnqnqnqnqnqnqnVswrwrwrwrwrwrwrwrGEVsqndsFrFrFr
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrLTUrUrUraEBHpmtfFrzCqnqnjxsoqnqnqnqnqnjxqnqnqnqnqnqnqnqnqnjxqnqnqnaNqngIgIgIgIgIqnqnqnqnqnlaDMPnqnjxREREWKiSREiSWKREREjxqnlaDMPnqnqnqnqnqngIgIgIgIgIqnqnqnqnqnjxqnqnqnqnqnqnqnqnqnjxqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnjxqwqwqwqnqnqnqnqnozSiqwhuFrFrFr
FrFrFrFrFrFrlPFrFrhIhIFrFrFrFrzCGoGoGohuFrQmFrFrzCqnqngActMtqnqnqnqnqnqnTvqntXqnqnqnqnqnqnqnqnqnqnladjDuDuDuoFmvgIgIgIgIgIlxgIgIgICMCMBBxHCMxHBBCMCMgIgIgIlxgIgIgIgIgIPddjDuDuDuoFPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnhuFrFrFrWQqnqnqnqwiiFrFrFrFrFrFr
FrFrFrFrFrFrlPFrBHFgciaRFrFrFrzCUZUZUZFrFrCMaEFrzCqnYGqnREqnqnZbqnqnqnlRfHEjjxqnqnqnqnqnqnqnqnqnqnlaaWZEQqIJGhDuhjRRvlvlvlvlErLDVMhchctBWMXqkhCbhchcVMRRErvlvlvlvlLDGhDuhjZEQqIJaJPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnhuFrFrFrFrFrPeqwhuFrlPFrFrFrFrFrFr
FrFrFrFrFrFrlPFrBHGLrKaRFrFrFrWQCMCMCMaEFrbJhuFrzCqnTvTvVsqnTvTvTvTvhuFrUrFrzCqnqnqnqnqnqnqnqnqnqnlaaWCexIWpVMVMVMVMVMVMVMVMVMVMVMVMVMVMaJxzaWVMVMVMVMVMVMVMVMVMVMVMVMVMVMCeQeWpaJPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqntXqnqnqndsFrLTaEFrFrBHLgaRFrFrkmhIhIFrFrFrFr
FrFrFrFrFrFrlPFrFrREREFrhIhIhIhINTNTbJhuFrUcFrLTqngAFgcismgAdRgsxvMjaRFrUZFrWQqnqnqntXqnqnqnqnqnqnlaaWCHJkPmiNjDvmtTJkJkJkJkJkaPVMVMVMVMGhDuhjVMVMVMVMtTeNeNeNeNeNaPiNjDvmCHJkPmaJPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnKMqnqnYGqnqnaNqnqnqnjxqnqnqndsFrWQqnjPaELTQmhIhIBHmsrBXuaRFrFrFr
FrFrFrFrFrFrlPFrLTCMCMBHyIESGDMMUQUcUcFrFrFrFrzCqngAGLrKMtgApARgyEgUaRFrCMFrFrzCqnqnjxhXqnqnqnqnqnlaGfvmVMiNDbZfPCTzgdgdgdgdgdzYPCwFCHVMVMVMVMVMPmnAPCTzgdgdgdgdgdzYPCOIGfvmVMiNDbPnqnqnqnqnqnqnqnqnqnqnqnqnhXqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqndsFrFrWQqndsWQgwDqzRGPNhaMVcaRFrFrFr
FrFrFrFrFrFrlPFrWQOuagBHVdBauiqKaRhIFrFrFrFrFrzCqnqnREREqngAXadwvnWSxFFrNohIFrzCqnqnqnqnqnqnqnqnqngIVTaWVMaJztqnqnqnqnqnqnqnqnqnqnqnPCwFVMVMVMnAPCqnqnqnqnqnqnqnqnqnqnqnSJaWVMaJqYgIqnqnqnqnZbqnqnqnqnKMqnqnqnqnqnqnqnqnqntXtXqnqnqnqnqntXqnqnqnqnqnqnaEFrFrWQqnaEUcQmQmFrwBUrUrFrFrFrFr
FrFrFrFrFrFrlPFrFrUcUcFrREREREREBHfHaRFrFrFrLTqnqnqnVsFUllqnUrUrUrUrrbHbNCXuaRzCqnqnqnqnqnqnqnqntXVMGhhjVMGhPnqnqnqnqnqnqnRfqnqnqnqnqnlaVMVMVMPnqnqnqnqnqnRfqnqnqnqnqnqnlahjVMGhhjVMtXqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnjxjxqnqnqnqnqnjxqnqnKMqnqnqnqnaEFrFrWQhuFrCMCMFreCGoGoFrFrFrFr
FrFrFrFrFrFrlPFrLTCMCMBHyIESGDMMUQUcUcFrFrFrFrzCqngAGLrKMtgApARgyEgUaRFrCMFrFrzCqnqnjxhXqnqnqnqnqnlaGfvmVMiNDbZfPCTzgdgdgdOSgdzYPCwFCHVMVMVMVMVMPmnAPCTzQDPvQDgdgdzYPCOIGfvmVMiNDbPnqnqnqnqnqnqnqnqnqnqnqnqnhXqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqndsFrFrWQqndsWQgwDqzRGPNhaMVcaRFrFrFr
FrFrFrFrFrFrlPFrWQOuagBHVdBauiqKaRhIFrFrFrFrFrzCqnqnREREqngAXadwvnWSxFFrNohIFrzCqnqnqnqnqnqnqnqnqngIVTaWVMaJztqnqnqnqnqnlaDMPnqnqnqnPCwFVMVMVMnAPCqnqnqnlaDMPnqnqnqnqnqnSJaWVMaJqYgIqnqnqnqnZbqnqnqnqnKMqnqnqnqnqnqnqnqnqntXtXqnqnqnqnqntXqnqnqnqnqnqnaEFrFrWQqnaEUcQmQmFrwBUrUrFrFrFrFr
FrFrFrFrFrFrlPFrFrUcUcFrREREREREBHfHaRFrFrFrLTqnqnqnVsFUllqnUrUrUrUrrbHbNCXuaRzCqnqnqnqnqnqnqnqntXVMGhhjVMGhPnqnqnqnqnqnqnirqnqnqnqnqnlaVMVMVMPnqnqnqnqnqnirqnqnqnqnqnqnlahjVMGhhjVMtXqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnjxjxqnqnqnqnqnjxqnqnKMqnqnqnqnaEFrFrWQhuFrCMCMFreCGoGoFrFrFrFr
FrFrFrFrFrFrlPFrFrFrFrFrNTNTniagFrQmaEFrFxFrzCqnqnqnzkDIEWMtUZUZUZUZFrDwZIVcaRzCqnqnqnqnqntXtXtXEyCwVMVMVMVMPnqnqnqnqnqnqnzNqnqnqnqnqnqnsEVMVMPnqnqnqnqnqnzNqnqnqnqnqnqnlaVMVMVMVMVMVMtXtXtXtXtXtXtXtXtXtXtXqntXqnqntXqntXqnqnqnqnqnqnhXqnqnqntXqnqnqnqnTvYbFrFrFrLTVstSFriFUZUZFrFrFrFr
FrFrFrFrFrFrlPFrFrFrFrFrUcUcUcUcFrwfhuFxFxFrzCqnqnqnqnUrUrqwCMCMCMCMFrFrREREFrzCKMqnqnqnqntXtXtXsEVMVMVMVMVMPnqnqnqnqnqnqnzNqnqnqnqnqnqntXsEVMPnqnqnqnqnqnzNqnqnqnqnqnqnlaVMVMVMVMVMsEtXjxtXtXtXtXtXtXsHtXjxqnjxtXqnjxqnjxtXqnqnqnqnqnqnqnqnqnjxqnqntXgAzdLgWOFrFrWQaOZXFrujCMCMFrFrFrFr
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrFrLTjxFrFxFxLTqnqnaNqnqnUZUZFrnbniWcagFrFrCMCMFrzCqnqnqntXqnjxjxjxjxPCOIvmVMiNPnqnqnqnqnqnqnKuqnqnqnqnqnlaVMtXsEqnqnqnqnqnqnKuqnqnqnqnqnqnlavmVMiNZfPCjxjxhXjxjxjxjxjxjxjxjxqnqnqnjxqnqnqnZbjxqnqnqnqnqnqnqnqnqnqnqnqnjxqnQmQmqnjPaEFrFrFrFrMRVstSFrFrFrFr
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrFrWQhuFrFrLTqnqnqnqnqnqnCMCMFrDpDpDpDpFrFrniagFrzCYGqnqnjxqnqnqnqnqngIPHaWVMaJmvgIqnqnqnqnqnmhqnqnqnqnqnqnsETgtXhXqnqnqnqnqnmhqnqnqnqnqngIPHaWVMaJmvgIqnqnqnqnqnqnqnqnqnqnqnqnqnqnqntXqnqnqnqnaNKMqnqnqnqnqnXFXFXFXFXFXFXFjFjFXFXFRlTHOHIRWjWmtzqaTHTHTHTH
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrFrFrFrFrLTqnqnqnqnqnqnqnVsvTFrFrFrFrFrFrFrDpDpFrzCqntXtXqnqnqnqnqnladRDuhjVMGhDumNPnqnqnqnqnqnqnKMqnZbqnqntXtXtXqnKMqnqnqnqnqnqnqnqnqnladRDuhjVMGhDumNPnqnqnqnqnqnqnqnqnqnqnqnqnqnqntXqnqnqnqnqnqnqnqnYGMrqnsXJSsXsXsXsXsXtVrcsXsXiyBAycsXRWvpBABABABABACz
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrFrFrFxLTqnqnqnqnqnqntXqnjxjxjPaEFrFrFrFrFrFrFrLTqnqntXtXqnqnqnqnqnlaaWtTeNeNeNaPaJPnqnqnqnqnqnqnqnqnqnqnlajaVMjxqnqnqnqnqnqnqnqnqnqnqnlaaWtTeNeNeNaPaJPnqnqnqnZbqnqnqnqnqnqnqnqnqnqnjxtXqnqnqnqntXqnqntXxOeeKMKuqnqnqnqnqnjxVnqndsFrFrzCqnKuPAFrFrFrFrFrvM
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrFrLTjPqnqnqnqnqnqnqnjxqntXqnqnqnjPjPjPjPjPjPjPqnqnqnjxjxqnqnqnqnqnlaaWQzxogdgSbVaJPnqnqnqnqnqnqnqntXtXtXtXsEVMtXqnqntXtXtXqnqnqnqnqnqnlaaWQzxogdgSbVaJPnqnqnqnqnqnqnqnqnqnKMqnqnqnaNqntXqnqnqnqnjxqntXjxxOeeqnmhqnqnqnqnqnqnmhqndsFrFrWQqnmhiiFrFrFrFrFrYE
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrFrzCqnqnqnqnqnqnqnqnqnqnjxqnqnqnqnqnqnqnqnqntXqnqnqntXqnqnqnqnqnqnlaaWQzPnhXlabVaJPnqnqnqnqnqnqnqnjxtXtXtXjxsEVMtXtXVMtXjxqnYGqnqnqnqnlaaWQzPnZblabVaJPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnjxqnqnqnqnqntXjxqnxOeeqnqnqnqnqnqnqnqnqnqndsFrFrFrWQhulPFrFrFrFrFrFr
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrFruKqnqnqnqnqnqnqnqnqnqnqnqnaNqngIqnqntXqnqnjxqnqnqnjxqnqnqnqnqnqnlaaWQzmvgIPHbVaJPnqnqnqnqngIqnqnqnjxjxgPqnZHgdjxjxgdjxqnqngIqnqnqnqnlaaWQzmvgIPHbVaJPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqngIqnqnqnqnqnjxqnqnxOeeqnqnqnqngIqnqnqnqnqnqnaEFrFrFrFrlPFrFrFrFrFrFr
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrFrLTjPqnqnqnqnqnqnqnjxqntXqnqnqnjPjPjPjPjPjPjPqnqnqnjxjxqnqnqnqnqnlaaWQzxogdgSbVaJPnqngIqnqnqnqnqntXtXtXtXsEVMtXqnqntXtXtXqnqnqnqngIqnlaaWQzxogdgSbVaJPnqnqnqnqnqnqnqnqnqnKMqnqnqnaNqntXqnqnqnqnjxqntXjxxOeeqnmhqnqnqnqnqnqnmhqndsFrFrWQqnmhiiFrFrFrFrFrYE
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrFrzCqnqnqnqnqnqnqnqnqnqnjxqnqnqnqnqnqnqnqnqntXqnqnqntXqnqnqnqnqnqnlaaWQzPnhXlabVaJPnlaDMPnqnqnqnqnjxtXtXtXjxsEVMtXtXVMtXjxqnYGqnlaDMPnlaaWQzPnZblabVaJPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnjxqnqnqnqnqntXjxqnxOeeqnqnqnqnqnqnqnqnqnqndsFrFrFrWQhulPFrFrFrFrFrFr
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrFruKqnqnqnqnqnqnqnqnqnqnqnqnaNqngIqnqntXqnqnjxqnqnqnjxqnqnqnqnqnqnlaaWQzmvgIPHbVaJPnqnirqnqngIqnqnqnjxjxgPqnZHgdjxjxgdjxqnqngIqnqnirqnlaaWQzmvgIPHbVaJPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqngIqnqnqnqnqnjxqnqnxOeeqnqnqnqngIqnqnqnqnqnqnaEFrFrFrFrlPFrFrFrFrFrFr
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrpVVMPnqnqnqnqnqnqnqnqnqnqnqnqnlaVMPnqnjxqnqnqnqnqnqnqntXqnqnqnqnqnlaaWRRvlvlvlLDaJPnqnqnqnlaVMPnqnqnqnqnqnlaVMPnqnqnqnqnqnlaVMPnqnqnqnlaaWRRvlvlvlLDaJPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnlaVMPnqnqnqnqnqnqnqnxOeeqnqnqnlaVMPnqnqnqnqnqndsFrFrFrFrlPFrFrFrFrFrFr
FrFrFrFrFrFrlPFrFrFrFrFrFrFrLTlaVMPnqnqnqnqnqnqnqnqnqnqnqnqnlaVMPnqnqnqnqnqnaNqnqnqnjxqnqnqnqnqnlaXajDvmVMiNjDWSPnqnqnqnlaVMPnqnqnqnqnqnlaVMPnqnqnqnqnqnlaVMPnqnqnqnlaXajDvmVMiNjDWSvYqnqnqnqnqnqnqnqnqnqnqnqnqnqnlaVMPnqnqnqnqnqnqnqnxOeeqnqnqnlaVMPnqnqnqnqnqnqnaEFrFrFrlPFrFrFrFrFrFr
FrFrFrFrFrFrlPFrFrFrFrFrFrFrWQlaVMsYwMwMwMwMwMwMwMwMwMwMwMwMWkVMPnqnqnqnqnqnqnqnqnqnqnqnZbqnqnqnqnTzJOaWVMaJvywuwMwMwMwMWkVMPnqnqnqnqnqnlaVMPnqnqnqnqnqnlaVMsYwMwMwMwMwuzbaWVMaJaUzYqnqnqnqnqnqnqnqnqnqnZbqnqnqnqnlaVMsYwMwMwMwMwMwMwMyzRwwMwMwMWkVMPnqnqnqnqnqnqnqnjPjPaElPFrFrFrFrFrFr
@@ -731,16 +737,16 @@ FrFrFrFrFrFrlPFrFrFrFrFrFrzCqndsFrFrWQqwjPaEFrFrFrzCqnqnqnqnqnqnqntXqnqnqnqnqnqn
FrFrFrFrFrFrgvFrFrFrFrFrLTqnqndsFrFrFrFrWQhuFrFrFrzCqnqnqnqnqnqntXjxtXqnYGqnqnqnqnqnqnqnqnqnqnqnqnqnlaVMVMVMPnqnqnqnqnqnqnqnqnqnqnYGPdTbVcxaoWtlieqnqnqnqnqnqnqnqnqnqnqnlaVMVMVMPnqnqnZbqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnxOeeqnqnqnqnqnqnqnqnqnqnqnqnqnqnhuFrlPFrFrFrFrFrFr
FrFrFrFrFrFrgvFrFrFrFrLTqnqnqnqnaEFrFrFrFrFrFrFrLTqnqnKMqnqnqnqwaOqwaOqwqnqnqnqnqnqnqnqnqnqnqnqnqnqnlaVMVMVMPnqnqnqnqnqnqnqnhXqnqnlaqyDOwPqnQtofhpPnqnqnqnqnqnqnqnqnqnqnlaVMVMVMPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnKMqnqnxOeeqnqnqnqnqnqnqnqnqnqnqnqnqndsFrFrlPFrFrFrFrFrFr
FrFrFrFrFrFrgvFrFrFrFrzCqnqnqnqnqnaEFrFrFrLTjPjPqnqnqnqnqnqnhuFrFxFrFrFrWQqnqnqnqnqnhXqnqnqnqnqnqnqnlaVMVMtTPnqnYGqnqnqnqnqnqnqnqnlaaWWpPnqnlaCeaJPnqnZbqnqnqnqnqnqnqnqnlaaPVMVMPnqnaNqnqnqnqnqnqnqnhXqnqnqnqnqwqwqwqnqnqnqnqnaNqnqnqnxOeeqnhXqnqnqnqnqnqnqnqnqnqnqnhuFrFrlPFrFrFrFrFrFr
FrFrFrFrFrFrgvFrFrFrFrzCqnqnqnqnqnqnjPjPjPqnqnqnqnYGqnqnqnhuFrFxFxFrFrFrFrWQqnqnqnqnqnqnqnqnqnqnqnqnlaVMVMWpieqnqnqnqnqnqnqnqnqnqnlaaWWpPnyvlaCeaJPnqnqnqnqnqnqnqnqnqnqnPdCeVMVMPnqnqnqnqnqnqnqnqnqnqnqnqnqnhuFrFrFrWQqnqnqnqnqnqnqnqnxOeeqnqnqnqnqntXtXqnqnqnqnqndsFrFrFrlPFrFrFrFrFrFr
FrFrFrFrFrFrgvFrFrFrFrzCqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqndsFrFrFrFrFrFrFrFrFrzCqnqnqnqnqnqnqnqnqnqnqnlaaPVMRRfqiegIgIgIgIgIgIgIgIEtPdyFWpmvqnPHCecGiegIgIgIgIgIgIgIAKgIPdlqLDVMtTPnqnWVqnqnqnqnqnqnqwqwqwqwhuFrFrFrFrFrWQqwqwqnqnqnqnqnxOeeqnqnqnqnqntXtXqnqnqnqnqnhuFrFrFrlPFrFrFrFrFrFr
FrFrFrFrFrFrgvFrFrFrLTqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqndsFrFrFrFrFrFrFrFrFrzCqnqnqnqnqnqnqnqnqngIqnlabVVMVMRRvlLDVMVMVpdyYmVMVMVMGhhjRRIJfjZELDGhhjVMVMVMVpdyYmVMVMRRvlLDVMVMWpPnqngIqnqnqnqnqndsFrFrFrFrFrFrFrFrFrFrFrFrFrzCqnqnqnqnxOeeqnqnqnqnqntXjxqnhXqnqndsFrFrFrFrlPFrFrLTaEFrFr
FrFrFrFrFrFrgvFrFrFrFrzCqnqnqnqnqnqnjPjPjPqnqnqnqnYGqnqnqnhuFrFrLTaEFrFrFrWQqnqnqnqnqnqnqnqnqnqnqnqnlaVMVMWpieqnqnqnqnqnqnqnqnqnqnlaaWWpPnyvlaCeaJPnqnqnqnqnqnqnqnqnqnqnPdCeVMVMPnqnqnqnqnqnqnqnqnqnqnqnqnqnhuFrFrFrWQqnqnqnqnqnqnqnqnxOeeqnqnqnqnqntXtXqnqnqnqnqndsFrFrFrlPFrFrFrFrFrFr
FrFrFrFrFrFrgvFrFrFrFrzCqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqndsFrFrLTqnqwjPaEFrFrzCqnqnqnqnqnqnqnqnqnqnqnlaaPVMRRfqiegIgIgIgIgIgIgIgIEtPdyFWpmvqnPHCecGiegIgIgIgIgIgIgIAKgIPdlqLDVMtTPnqnWVqnqnqnqnqnqnqwqwqwqwhuFrFrFrFrFrWQqwqwqnqnqnqnqnxOeeqnqnqnqnqntXtXqnqnqnqnqnhuFrFrFrlPFrFrFrFrFrFr
FrFrFrFrFrFrgvFrFrFrLTqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqndsFrFrWQhuFrWQhuFrFrzCqnqnqnqnqnqnqnqnqngIqnlabVVMVMRRvlLDVMVMVpdyYmVMVMVMGhhjRRIJfjZELDGhhjVMVMVMVpdyYmVMVMRRvlLDVMVMWpPnqngIqnqnqnqnqndsFrFrFrFrFrFrFrFrFrFrFrFrFrzCqnqnqnqnxOeeqnqnqnqnqntXjxqnhXqnqndsFrFrFrFrlPFrFrLTaEFrFr
FrFrFrFrFrFrgvFrFrFrzCqnqnqnqnqnqnqnqnaNqnqnqwqwqnqnqwqwqnaEFrFrFrFrFrFrFrLTqnqnqnqnqnqnqnqnqnlaDMPnlaWXaPVMVMVMVMVMVMWWfHXmVMVMVMVMVMVMRRQqLDVMVMVMVMVMVMWWfHXmVMVMVMVMVMVMVMdKPnlaDMPnqnhXqnqnhuFrFrFrFrFrFrLTaEFrFrFrFrFrWQqnqnqnqnxOeeqnZbqnqnqntXqnqnqnqnqndsFrFrFrFrlPFrLTqndsFrFr
FrFrFrFrFrFrgvFrFrLTqnqnqnqnqnqnqnqnqnqwqwhuFrFrWQhuFrFrWQqnjPaEFrFrFrLTjPqnqnqnqnqnqnqnqnqnqnqnirqnqnQtNxeNaPVMVMVMVMJiGqDoVMVMVMVMVMVMVMVMVMVMVMVMVMVMVMJiGqDoVMVMVMVMtTJkdKztqnqnirqnqnqnqndsFrFrFrFrLTjPjPqnqnaEFrFrFrFrFrzCqnqnqnxOeeqnqnqnqnqnjxqnqnqnqnqndsFrFrLTaElPFrzCqnhuFrFr
FrFrFrFrFrFrgvFrFrzCqnqnqnhXqnqnqnqnhuFrFrFrFrFrFrFrFrFrFrWQqnqnjPjPjPqnqnqnqnqnqnqnqntXqnqnqnqnqnqnqnqnPCPCPCPCPCTzgdgdgdgdgdzYPCPCPCwFVMVMVMnAPCPCPCTzgdgdgdgdgdzYPCPCPCPCPCqnqnqnqnqnqnqnqnhuFrFrFrFrWQqnqnYGqndsFrFrFrFrFrzCYGqnqnxOeeqnqnqnqnqntXtXqnqnqnqndsFrFrWQdslPLTqndsFrFrFr
FrFrFrFrFrFrgvFrFrzCqnqnqnqnqnqnqndsFrFrFrFrFrFrFrFrFrFrFrFrzCqnqnqnqnqnqnqnqnqnqnqntXjxqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnPHVMVMVMmvqnqnqnqnqnqnZbqnqnqnqnqnqnqnqnqnqnqnqnqnqnqndsFrFrFrFrFrFrWQaNqnqndsFrFrFrFrFrzCqnqnqnxOeeqnqnaNqnqntXtXqnqnqnqndsFrFrFrzCVgqnqndsFrFrFr
FrFrFrFrFrFrgvFrFrzCqnqnqnqnqnqnqndsFrFrFrFrFrFrFrFrFrFrFrFrzCqnqnqnqnqnqnqnqnqnqnqntXtXqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnYGqnqnqnqnqnqnPHVMVMVMVMVMmvqnqnqnqnqnqnqnqnqnqnqnqnqnhXqnqnqnZbqnqnqndsFrFrFrFrFrFrFrmMqwqwhuFrFrFrFrFrzCqnqnqnxOeeqnqnqnqnqntXjxqnqnqnqndsFrFrFrWQzUqwqwhuFrFrFr
FrFrFrFrFrFrgvFrFrzCqnqnqnqnqnqnqndsFrFrFrFrFrFrFrFrFrFrFrFrzCqnqnqnqnqnqnqnaNqnqnqnjxjxFfKMqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnlaVMVMMhEmCwVMVMPnqnqnqnqnqnqnqnqnqwqwqwqnqnqnqnqnqnqnqnqnqnaEFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrzCqnqnqnxOeeqnqnqnqnqntXtXqnqnqnqnqnaEFrFrFrlPFrFrFrFrFrFr
FrFrFrFrFrFrgvFrLTqnqnqnqnqnZbqnqnqnaEFrFrFrFrFrFrFrFrFrFrLTqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqwqwqwqnqnqwqwqnqnqngIlaFgxozYgITzgSciPngIaNqnqnqnqnqndsFrFrFrWQqnqnqnqnqnqnqnZbqnqnaEFrFrFrFrFrFrFrFrFrFrFrFrFrLTqnqnqnqnxOeeqnqnqnqnqntXtXqnqnqnqnqndsFrFrFrlPFrFrFrFrFrFr
FrFrFrFrFrFrgvFrFrzCqnqnqnhXqnqnqnqnhuFrFrFrFrFrFrFrFrFrFrWQqnqnjPjPjPqnqnqnqnqnqnqnqntXqnqnqnqnqnqnqnqnPCPCPCPCPCTzgdgdgdgdgdzYPCPCPCuvVMVMVMMuPCPCPCTzgdgdgdgdgdzYPCPCPCPCPCqnqnqnqnqnqnqnqnhuFrFrFrFrWQqnqnYGqndsFrFrFrFrFrzCYGqnqnxOeeqnqnqnqnqntXtXqnqnqnqndsFrFrWQdslPLTqndsFrFrFr
FrFrFrFrFrFrgvFrFrzCqnqnqnqnqnqnqndsFrFrFrFrFrFrLTaEFrFrFrFrzCqnqnqnqnqnqnqnqnqnqnqntXjxqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnPHVMVMVMmvqnqnqnqnqnqnZbqnqnqnqnqnqnqnqnqnqnqnqnqnqnqndsFrFrFrFrFrFrWQaNqnqndsFrFrFrFrFrzCqnqnqnxOeeqnqnaNqnqntXtXqnqnqnqndsFrFrFrzCVgqnqndsFrFrFr
FrFrFrFrFrFrgvFrFrzCqnqnqnqnqnqnqndsFrFrFrFrLTjPqnqnaEFrFrFrzCqnqnqnqnqnqnqnqnqnqnqntXtXqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnYGqnqnqnqnqnqnPHVMVMVMVMVMmvqnqnqnqnqnqnqnqnqnqnqnqnqnhXqnqnqnZbqnqnqndsFrFrFrFrFrFrFrmMqwqwhuFrFrFrFrFrzCqnqnqnxOeeqnqnqnqnqntXjxqnqnqnqndsFrFrFrWQzUbGqwhuFrFrFr
FrFrFrFrFrFrgvFrFrzCqnqnqnqnqnqnqndsFrFrFrFrWQqwhXqnhuFrFrFrzCqnqnqnqnqnqnqnaNqnqnqnjxjxFfKMqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnlaVMVMMhEmCwVMVMPnqnqnqnqnqnqnqnqnqwqwqwqnqnqnqnqnqnqnqnqnqnaEFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrzCqnqnqnxOeeqnqnqnqnqntXtXqnqnqnqnqnaEFrFrFrlPFrFrFrFrFrFr
FrFrFrFrFrFrgvFrLTqnqnqnqnqnZbqnqnqnaEFrFrFrFrFrWQhuFrFrFrLTqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqwqwqwqnqnqwqwqnqnqngIlaFgxozYgITzgSciPngIaNqnqnqnqnqndsFrFrFrWQqnqnqnqnqnqnqnZbqnqnaEFrFrFrFrFrFrFrFrFrFrFrFrFrLTqnqnqnqnxOeeqnqnqnqnqntXtXqnqnqnqnqndsFrFrFrlPFrFrFrFrFrFr
FrFrFrFrFrFrgvFrzCqnqnqnqnqnqnqnqnqnqnjPaEFrFrFrFrFrFrLTjPqnqntXqnqnqntXtXqnqnqnqnqnqnqnqnqnqnZbqnqnqnqnqnhuFrFrFrWQhuFrFrWQqnlaDMPndWqnlafHPnqndWlaDMPnqnqnqnqnqwhuFrFrFrFrzCqnqnqnqnqnqnqnqnqndsFrFrFrFrFrFrFrFrFrFrFrFrFrzCqnZbqnqnxOeeqnqnqnqnqnjxtXqnqnZbqnqnqnaEFrFrlPFrFrFrFrFrFr
FrFxFrFrFrFrlPLTqnqnqnqnYGqnqnqnqnqnqnqnqnaEFrFrFrFrLTqnqnqntXjxtXtXtXtXtXtXqnqnqnqnqnqnqnqnqnqnqnqnqnqndsFrFrFrFrFrFrFrFrFrzCqnirlaGLmvgIirgIPHrKPnirqnqnqnighuFrFrFrFrFrFrzCYGqnqnqnqnqnqnqnqnqnjPjPjPaEFrFrFrFrFrFrLTjPjPqnqnqnqnqnxOeeqnqnqnqnqnqnjxqnqnqnqnqnqndsFrFrlPFrFrFrFrFrFr
FrFxFrFrFxFrkoqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnaEFrFrLTqnqnqnqnjxqnjxjxjxjxjxjxqnqnqnhXqnqnqnqnqnqnqnqnqnqnqnaEFrFrFrFrFrFrFrFrzCqnqnlaGfvmCwfjKDiNDbPnqnqnWVdsFrFrFrFrFrFrLTjPqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnjPaEFrFrLTjPqnqnqnqnqnqnqnqnxOeeqnqnqnqnqnqnqnqnqnqnqnqnqnqnaEFrlPFrFrFrFrFrFr
@@ -756,30 +762,30 @@ HiHiHiHiHiHiPNHiGoUrUrUrGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHi
HiHiHiHiHiHiPNHiGoGoGoGoGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiUZUZUZGoGoHiHiHiHiHiHiHiHiuWuWdGXmaAuWuWHiHiHiHiHiHiHiHiGoGoUZUZUZHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoGoGoGoGoHiPNHiHiHiHiHiHi
HiHiHiHiHiHiPNHiGoGoGoGoGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiCMCMCMUZUZHiHiHiHiHiHiHiHiWKWKNnXmGlWKWKHiHiHiHiHiHiHiHiUZUZCMCMCMHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoGoGoGoGoHiPNHiHiHiHiHiHi
HiHiHiHiHiHiPNHiGoUZUZUZGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiZqQRfNdtCMCMHiHiHiHiHiHiHiHiBBBBBBUrBBBBBBHiHiHiHiHiHiHiHiCMCMfNdtpuXbHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoUZUZUZGoHiPNHiHiHiHiHiHi
HiHiHiHiHiHiPNHiGoCMCMCMGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiZqdRhjGhDldtZCZCZCZCZCZCZCZChkhcDJGohkhchctutututututututufNDlhjGhmNXbHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoCMCMCMGoHiPNHiHiHiHiHiHi
HiHiHiHiHiHiPNHiHnQRlQpuxdHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiZqXavmVMVMaJuDuDuDuDuDuDuDuDaWVMaJGoaWVMVMTMTMTMTMTMTMTMTMaWVMVMiNWSXbHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHnQRlQpuxdHiPNHiHiHiHiHiHi
HiHiHiHiHiHiPNHiGoCMCMCMGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiZqdRhjGhDldtZCZCZCZCZCZCZCZChkhcDJGohkhcDJtutututututututufNDlhjGhmNXbHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoCMCMCMGoHiPNHiHiHiHiHiHi
HiHiHiHiHiHiPNHiHnQRlQpuxdHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiZqXavmVMVMaJuDuDuDuDuDuDuDuDaWVMaJGoaWVMaJTMTMTMTMTMTMTMTMaWVMVMiNWSXbHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHnQRlQpuxdHiPNHiHiHiHiHiHi
HiHiHiHiHiHiPNHiHnXmfHXmxdHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiZqGLGfjDjDDbDVCsCsCsCsCsCsCsuWuWuWGouWuWuWCsCsCsCsCsCsCsCrGfjDjDDbrKXbHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHnXmfHXmxdHiPNHiHiHiHiHiHi
HiHiHiHiHiHiPNHiHnGLdyrKxdHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHioioioioioiHiHiHiHiHiHiHiHiuWuWuWGouWuWuWHiHiHiHiHiHiHiHioioioioioiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHnGLdyrKxdHiPNHiHiHiHiHiHi
HiHiHiHiHiHiPNHiGooioioiGoHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGoGoGoGoGoHiHiHiHiHiHiHiHiuWuWuWGouWuWuWHiHiHiHiHiHiHiHiGoGoGoGoGoHiHiHiHiHiHiHiHiHiHiHiHirgytrgHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiGooioioiGoHiPNHiHiHiHiHiHi
HiHiHiHiHiHiPNHiUZGoGoGoUZHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiUZUZUZUZUZHiHiHiHiHiHiHiHiWKWKWKGoWKWKWKHiHiHiHiHiHiHiHiUZUZUZUZUZHiHiHiHiHiHiHiHiHiHiHiHikTxAkTHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiUZGoGoGoUZHiPNHiHiHiHiHiHi
HiHiHiHiHiHiPNHiCMUZUZUZCMHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiCMCMCMCMCMHiHiHiHiHiHiHiHiBBBBBBGoBBBBBBHiHiHiHiHiHiHiHiCMCMCMCMCMHiHiHiHiHiHiHiHiHiHiHiHimWmWmWHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiCMUZUZUZCMHiPNHiHiHiHiHiHi
mWmWmWuojKjKdkjMhcCMCMCMhcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLchchchchchcLcLcLcLcLcLcLcLcFBhcXMUZlHhcSLLcLcjMjMjMjMLcLchchchchchcLcLcLcLcLcLcLcLcLcLcLcLcmWmWmWLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcjMhcCMCMCMhcLcKTjKjKYCmWmWmW
fufufuwrwrwrGEUsVMhchchcVMZaSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMPCPCPCPCPCSMSMSMSMSMSMSMADARVMAyCMgyVMeJZaSMSMSMSMSMSMSMPCPCPCPCPCSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMUsVMhchchcVMZaGEwrwrwrSMSMSM
qwqwqnqnqwqwozqnPCPCPCPCPCqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnlaARVMAyFQgyVMeJPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnPCPCPCPCPCqnozqwqwqwqwqwqw
FrFrWQhuFrFrihqngIgIqnqnqnqnqnqnqngIqnqnqnqnqnqngIqnqnqnqnqnqngIqnqnqnqnqnqngIqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnFflaARVMAyNzgyVMeJPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqngIqnqnqnqnqnqngIqnqnqnqnqnqngIqnqnqnqnqnqngIqnqnqnqnqnqnqngIgIqnqwiiFrFrFrFrFrFr
FrFrFrFrFrFrlPPUFgciPnqnqnqnqnqnlaDMPnqnqnqnqnlaDMPnqnqnqnqnlaDMPnqnqnqnqnlaDMPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnlaARVMAyLsgyVMeJPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnhXqnqnqnqnYGqnlaDMPnqnqnqnqnlaDMPnqnqnqnqnlaDMPnqnqnqnqnlaDMPnqnqnqnZbqnlaFgciNUFrlPFrFrLTaEFrFr
FrFrFrFrFrFrlPPUGLrKPnqnqnaNqnqnqnirqnqnqnqnqnqnirqnqnqnqnqnqnirqnqnqnqnqnqnirqngIEtgIqnqnqnqnqnqnqnqnqnqngIgIgIgIqnqnqnqnqnqnqnqnlaARVMMgAebqVMeJPnqnqnqnqnqnqnqnqngIgIgIgIYGqnqnqnqnqnqnqnqnqngIgIgIqnirqnqnqnaNqnqnirqnqnqnqnqnqnirqnqnqnqnqnqnirqnqnqnqnqnqnlaGLrKYLFrlPLTjPqndsFrFr
mWmWmWuoTTTTdkjMhcCMCMCMhcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLchchchchchcLcLcLcLcLcLcLcLcFBhcXMUZlHhcSLLcLcjMjMjMjMLcLchchchchchcLcLcLcLcLcLcLcLcLcLcLcLcmWmWmWLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcLcjMhcCMCMCMhcLcKTTTTTYCmWmWmW
fufufufcfcfcRfymVMhchchcVMoXSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMTzgdgdgdzYSMSMSMSMSMSMSMADARVMAyCMgyVMeJZaSMSMSMSMSMSMSMTzgdgdgdzYSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMUsVMhchchcVMZaRffcfcfcSMSMSM
qwqwqnqnqwqwozqnTzgdgdgdzYqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnlaARVMAyFQgyVMeJPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnTzgdgdgdzYqnozqwqwqwqwqwqw
FrFrWQhuFrFrihqngIgIqnqnqnqnqnqnqngIqnqnqnqnqnqngIqnqnqnqnqnqngIqnqnqnqnqnqngIqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqngIqnqnqnqnqnqnqngIFflaARVMAyNzgyVMeJPnqngIqnqnqnqnqnqnqngIqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqngIqnqnqnqnqnqngIqnqnqnqnqnqngIqnqnqnqnqnqngIqnqnqnqnqnqnqngIgIqnqwiiFrFrFrFrFrFr
FrFrFrFrFrFrlPPUFgciPnqnqnqnqnqnlaDMPnqnqnqnqnlaDMPnqnqnqnqnlaDMPnqnqnqnqnlaDMPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnlaDMPnqnqnqnqnqnlaDMPnlaARVMAyLsgyVMeJPnlaDMPnqnqnqnqnqnlaDMPnqnqnqnqnqnqnqnhXqnqnqnqnYGqnlaDMPnqnqnqnqnlaDMPnqnqnqnqnlaDMPnqnqnqnqnlaDMPnqnqnqnZbqnlaFgciNUFrlPFrFrLTaEFrFr
FrFrFrFrFrFrlPPUGLrKPnqnqnaNqnqnqnirqnqnqnqnqnqnirqnqnqnqnqnqnirqnqnqnqnqnqnirqngIEtgIqnqnqnqnqnqnqnqnqnqngIgIlxgIqnqnqnqnqnqnirqnlaARVMMgAebqVMeJPnqnirqnqnqnqnqnqngIlxgIgIYGqnqnqnqnqnqnqnqnqngIgIgIqnirqnqnqnaNqnqnirqnqnqnqnqnqnirqnqnqnqnqnqnirqnqnqnqnqnqnlaGLrKYLFrlPLTjPqndsFrFr
FrFrFrFrFrFrlPWQTzzYgIgIqnqnqnqnqnqnqnKMqnqnqnqnqnqnKMqnqnqnaNqnqnKMqnqnqnqngIPdcUvlnQiegIqnqnqnqnqnqnqnlaFgqyDuhpieqnqnqnqnqnqnqnPHVdApcfdTApdThwmvqnqnqnqnqnqnqnPHqyDuhpciPnqnqnqnqnqnqnqngIPHcUvlnQmvgIqnKMqnqnqnqnqnqnKMqnqnqnYGqnqnKMqnqnqnqnqnqnqnqnqnqngIgITzYyFrFrlPzCqnqnhuFrFr
FrFrFrLTaEFrlPFrzCPdvlvlieqnqnqnqnqnqntXqnqnqnqnqnqntXqnqnqnqnqnqnqnqnqnqnlaqyDuDuDuDuDuhpPnqnqnqnqnqnqnqnQtaWVMGhhpPnqnqngIFfqnlaZEVMiNDbIkGfvmVMIJPnqnqngIqnqnlaqyhjVMaJwPqnqnqnqnqnqntXlaqyDuDuDuDuDuhpPnqnZbqnqnhXqnqnqntXtXtXqnqnqnqnqnZbqnqnhXqnqnaNqnPHqyhpmvdsFrFrkoqnqndsFrFrFr
FrFrFrzCqnaElPFrPUVMQzwLgzPnqnqnqnqnqntXtXqnqnqntXqnjxqnqnqnqnqntXqnqnqnqnlaDyCwVMVMVMCwQpPntXqnqnqnqnqnqnHaorCwCweaPnqnlafHPnqnlaYvCwaJwPqnQtaWCwTRPnqnlafHPnqnlayWCwCwajPnqnqnqnqnqnZbjxlahdCwVMVMVMCwboPnqntXqntXqnqnqnqnjxtXjxaNqnqntXqnqntXqnqnqnqnqnlaPkPpSNDzNUFrFrihqnqndsFrFrFr
FrFrFrzCqnhulPFrzCrjeNeNFwqnqnqnqnqnqnjxjxqnqnqntXqnYGqnqnqnqnqnjxqntXqnqnlaGfjDjDjDjDjDDbPnjxqnqnqnqnqnqnPHaWVMiNDbPnqnqnirqnqnlaZQvmaJmvqnPHaWiNoVPnqnqnirqnqnlaGfvmVMaJmvqnqnqnqnqnqnqnlaGfjDjDjDjDjDDbPnqntXtXjxqnqntXqnhXjxqntXqntXjxtXqnjxqnqnqnqnqnqncHGfDbCnqnaEFrlPWQqnqnaEFrFr
FrFrFrWQhuFrlPLTgIgIIFPCqnqnKMqnqnqnqnqnqnZbqnqnjxqnqnqnqnqnqnqnqnqnjxqnqnqnTzuveAJkduMuzYqnqnqnKMqnqnqnlaGLGfjDDbnAqnqnqnqnqnqnqnSJaWGhoFfjdjhjaJztqnqnqnqnqnqnqnOIGfjDDbrKPnKMqnqnqnqnqnqnTzJOeAJkduaUzYqnqngPjxqnqnqnjxqnqnqnqnjxqnjxqnjxqnqnqnKMqnqnqnhXqnPCPCgIgIgIaEruFrzCqnqnaEFr
FrFrFrFrFrFrlPPUVpdyYmPnqnqnqnqnqngIqnqnqnqnqnqngIqnqnqnqnqnqngIZbqnqnqnqnqngIqnPCPCPCqnqnqnqnqnqnqnqnqnqnTzgdgdzYqnqnqnqnqnqnqnqnlaaWVMGhDuhjVMaJPnqnqnqnqnqnqnqnqnTzgdgdzYqnqnqnqnqnqnqnqnqnZbPCPCPCqngIWVqnqnqnqnqngIqnqnqnqnZbqngIqnqnqnqnqnqngIqnqnqnqnqnqnlatTJkaPNUlPFrzCqnqnhuFr
FrFrFrFrFrFrkolaWWXKXmPnqnqnqnqnlaDMPnqnqnqnqnlaDMPnqnqnqnqnlaDMPnqnqnqnqnlaDMPnqnqnYGqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnlaaWtTJkVMJkaPaJPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnhXqnqnqnqnqnqnqnqnqnqnlaDMPnqnqnqnqnlaDMPnqnqnqnqnlaDMPnqnqnqnqnlaDMPnqnqnqnqnqnlaWpDMCeNUlPFrWQqwhuFrFr
FrFrFrFrFrFrihlaJiGqDoPnqnqnqnqnqnirqnqnqnqnqnqnirqnqnqnqnqnqnirqnqnqnqnqnqnirqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnlaaWWpoKQqoKCeaJPnqnWVqnqnqnqnqnqnqnqnqnqnqnqnqnYGqnqnqnqnqnqnqnqnqnqnirqnqnaNqnqnqnirqnqnqnqnqnqnirqnqnYGqnqnqnirqnqnqnqnqnqnlaRRQqLDYLlPFrFrFrFrFrFr
FrFrLTaEFrFrlPzCTzgdzYqnqnqnqnqnqnqnqnKMqnqnqnqnqnqnKMqnqnqnqnqnqnKMqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnlaaWWpmvirPHCeaJPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnaNqnqnqnTDqnqnqnqnqnqnKMqnaNqnqnqnqnKMqnqnqnqnqnqnqnqnqnhXqnqnTzgdKLFrlPFrFrFrFrFrFr
FrFrWQqnaEFrlPzCqnqnqnqnqnhXqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnlaaWVMpbDFEWVMaJPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnZbqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnaNqnqnqnqnqnqnqnqnhuFrFrlPFrFrFrFrFrFr
FrFrFrWQhuFrlPzCqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnPdaWWpztgISJCeaJieqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnhXqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnhuFrFrFrlPFrFrFrFrFrFr
FrFrFrWQhuFrlPLTgIgIIFPCqnqnKMqnqnqnqnqnqnZbqnqnjxqnqnqnqnqnqnqnqnqnjxqnqnqnTzuveAJkduMuzYqnqnqnKMqnqnqnlaGLGfjDDbnAqnqnqnqnqnqnqnSJaWGhoFfjdjhjaJztqnqnqnqnqnqnqnOIGfjDDbrKPnKMqnqnqnqnqnqnTzJOeAJkduaUzYqnqngPjxqnqnqnjxqnqnqnqnjxqnjxqnjxqnqnqnKMqnqnqnhXqnPCPCgIgIgIaEruFrzCZbqnaEFr
FrFrFrFrFrFrlPPUVpdyYmPnqnqnqnqnqngIqnqnqnqnqnqngIqnqnqnqnqnqngIZbqnqnqnqnqngIqnPCPCPCqnqnqnqnqnqnqnqnqnqnTzgdUlzYqnqnqnqnqnqnqnqnlaaWVMGhDuhjVMaJPnqnqnqnqnqnqnqnqnTzUlgdzYqnqnqnqnqnqnqnqnqnZbPCPCPCqngIWVqnqnqnqnqngIqnqnqnqnZbqngIqnqnqnqnqnqngIqnqnqnqnqnqnlatTJkaPNUlPFrzCqnqnhuFr
FrFrFrFrFrFrkolaWWXKXmPnqnqnqnqnlaDMPnqnqnqnqnlaDMPnqnqnqnqnlaDMPnqnqnqnqnlaDMPnqnqnYGqnqnqnqnqnqnqnqnqnqnqnlaDMPnqnqnqnqnqnqnqnqnlaaWtTJkVMJkaPaJPnqnqnqnqnqnqnqnqnlaDMPnqnqnqnhXqnqnqnqnqnqnqnqnqnqnlaDMPnqnqnqnqnlaDMPnqnqnqnqnlaDMPnqnqnqnqnlaDMPnqnqnqnqnqnlaWpDMCeNUlPFrWQqwhuFrFr
FrFrFrFrFrFrihlaJiGqDoPnqnqnqnqnqnirqnqnqnqnqnqnirqnqnqnqnqnqnirqnqnqnqnqnqnirqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnirqnqnqnqnqnqnqnqnqnlaaWWpoKQqoKCeaJPnqnWVqnqnqnqnqnqnqnirqnqnqnqnqnYGqnqnqnqnqnqnqnqnqnqnirqnqnaNqnqnqnirqnqnqnqnqnqnirqnqnYGqnqnqnirqnqnqnqnqnqnlaRRQqLDYLlPFrFrFrFrFrFr
FrFrLTaEFrFrlPzCTzgdzYqnqnqnqnqnqnqnqnKMqnqnqnqnqnqnKMqnqnqnqnqnqnKMqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqngIqnlaaWWpmvirPHCeaJPnqngIqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnaNqnqnqnTDqnqnqnqnqnqnKMqnaNqnqnqnqnKMqnqnqnqnqnqnqnqnqnhXqnqnTzgdKLFrlPFrFrFrFrFrFr
FrFrWQqnaEFrlPzCqnqnqnqnqnhXqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnlaDMPnlaaWVMpbDFEWVMaJPnlaDMPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnZbqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnaNqnqnqnqnqnqnqnqnhuFrFrlPFrFrFrFrFrFr
FrFrFrWQhuFrlPzCqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnirqnPdaWWpztgISJCeaJieqnirqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnhXqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnhuFrFrFrlPFrFrFrFrFrFr
FrFrFrFrFrFrkoqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnPdMghjWpeyeNeyCeGhItieqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqndsFrFrFrFrlPFrFrFrFrFrFr
jPjPjPjPjPjPozqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnlabVVMVMRRQqVMQqLDVMVMWpPnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnYGqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnqnjPjPjPjPVgjPjPjPjPjPjP
wMwMwMwMwMwMGawMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwEJkGlNneNeNeNGlNnJkvKwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMGawMwMwMwMwMwM
@@ -801,24 +807,24 @@ FrFrFrFrFrLTPAFrLTaEFrFrFrFrFrzCdsFrFrFrFrFrFrEKFrFrFrFrFrzCqnjxqnqndsFrFrzCqnaE
FrFrFrFrFrWQozryqndsFrFrFrFrFrWQdsFrFrFrFrFrFrEKFrFrFrFrFrzCqnqntXqndsFrFrzCqndsFrFrFrFrWQqnqndsFrFrFrLTjPjPqnsrqnqnqnEqCeaJfHaWVMaJPnqnlaDMPnqnlaaWVMaJfHaWQzWPsrqnqnqnqnjxtXqnUiFrFrFruUeoFrFrFrFrzCtXaEFrFrFrFrFrFrFrFrFrFrFrFrLTgAVxVMMtqnVsqngAWWgWrHjXWWMtqnVsqngAVMVxMtjPqndsFrFx
FrFrFrFrFrhzEbqbPnqnhWaEFrFrriFrEKFrFrFrLTNsNshuFrFrFrLTjPgIPdbVjxqndsFrFrWQqndsFrFrFrFrFrWQjphuFrFrFrWQqnqnqnqnqnqwqwEqCeGhDuoRvmaJPnqnqntDqnqnlaaWiNwxDuhjQzVeJqqwqwRcqntXtXqndsFrFrFrRSeoFrFrFrFrWQjxtXjPjPjPjPaEFrFrFrFrFrFrLTqnqnAGVMMtaNjxqngAGLGqGqGqrKMtqnjxqngAVMRdqnqnqwqnaEFr
FrFrFrFrFrLTozOiqndsFrzCjPaEFrLTdsFrFrFrVQFrFrFrFrFrFrWQlaZEQqsEjEqnqnaEFrFrzCdsFrFrFrFrFrFrFrFrFrFrFrFrzCqnqnqndsFrFrWQFbgCJuuvaWaJPnqnqnqnqnqnlaaWaJaUgdYaTFhuFrFrFrzCqnjxtXqndsFrFrFrUcMkFrFrFrFrFrzCtXtXtXtXqndsFrFrFrFrFrFrWQqngAVxVMMtqnqnqnqnREuWuWuWREqnqnqnqngAVMVxMtdsFrzCdsFr
FrFrFrFrFrWQiiFrWQhuFrWQqwqwdaqwhuFrFrFrEKFrFrFrFrFrFrFrOatteNtXMDsrtXqnrRrRqndsFrFrFrFrFrFrFrFrFrFrFrFrWQjZqnqndsFrFrFrFrFrFrOaaWaJPnqnqnqnqnqnlaaWaJPndsFrFrFrFrFrFrWQqnqwaOqndsFrFrFrFrzCjPjPaEFrFrWQaOaOaOlWqndsFrFrFrFrFrFrFrFrXXVxMbqnqnqnqnqnVsuWuWuWVsqnqnqnqnqnAAVxMtqnjPqndsFr
FrFrFrFrFrWQiiFrWQhuFrWQqwqwdaqwhuFrFrFrEKFrFrFrFrFrFrFrOatteNtXMDsrtXqnrRrRqndsFrFrFrFrFrFrFrFrFrFrFrFrWQjZqnqndsFrFrFrFrFrFrOaaWaJPnqnqnqnqnqnlaaWaJPndsFrFrFrFrFrFrWQqnigaOqndsFrFrFrFrzCjPjPaEFrFrWQaOaOaOlWqndsFrFrFrFrFrFrFrFrXXVxMbqnqnqnqnqnVsuWuWuWVsqnqnqnqnqnAAVxMtqnjPqndsFr
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrFrFrFrFrrbEKFrFrFrFrFrFrFrWQgCgdtXtXtXjxdsUcUczCdsFrFrFrFrFrFrFrFrFrFrFrFrFrFrzCqndsFrFrLTaEFrFrOaaWaJPnqnqngIqnqnlaaWaJPnhuFrFrFrFrFrFrFrEKFrFrzCqnNsrRrRrRqnqnqnqnaEFrFrFrFrFrUcWQqnjPjPjPjPjPjPjPjPgAVxDeqnqnqnqnqnplhVApRFjOqnqnqnqnqnNLVxMtqnqnqnhuFr
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrFrFrFrFrrbWQhWaEFrFrFrFrFrFrFrqWjxjxtXqnqnaEFrzCdsFrFrFrFrFrFrFrFrFrFrFrFrFrFrzCqnqnjPjPqndsFrFrOaaWaJPnqnlaDMPnqnlaaWaJNUFrFrFrFrFrFrFrFrEKFrFrzCdsFrUcUcUczCqnRcqnqnaEFrFrFrFrFrFrzCqnqnqntXtXqnqntXgAVxVMMtKMqnqnqnlaeJfHgyPnKMqnqnqngAVMVxMtqnqnhuFrFr
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrFrFrFrFrhzFrriEKFrFrFrFrFrFrFrFrWQqnjxqwqwhuFrzCdsFrFrLTaEFrFrFrFrFrFrFrFrFrFrzCqnqnqnqnjphuFrLTlaaWaJmvqnqntDqnqnPHaWaJNUFrFrFrFrFrFrFrFrEKFrFrWQdsFrFrFrFrWQqnjEqnqndsFrFrFrFrFrLTqnqnqnqnjxlWlWlWaOqnAGVMMtqnqnqnqnRGPBBFHmPnqnqnqnqngAVMRdqnqnhuFrFrFx
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrEKFrFrFrFrFrFrFrFrFrzCdsFrFrFrFrzCdsFrLTqndsFrFrFrFrFrFrFrFrFrFrWQqwtXqndsFrFrFrWQlayJaJcimvgIgIgIPHFgaWJgNUFrFrFrFrFrFrLTjPdsFrFrFrzCaEFrFrFrFryuqnqnqwhuFrFrFrFrFrzCsrqnqwqwhuUcUcUcFrXXVxVMMtqngIqnqnlaGBsaNDPnqnqngIqngAVMVxMthuFrFrFrFr
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrFrFrFrFrFrLTNshuFrFrFrFrFrFrFrFrFrzCdsFrFrLTjPqnqnJztXqnqnjPjPjPjPjPJzaEFrFrFrFrFrKYtXeoFrFrFrFrOaaWGhDuDuhpfHqyDuDuhjaJPnaEFrFrFrFrFrzCqnhuFrFrFrzCqnaEFrFrFrWQlWhuFrFrFrFrFrLTjPqnRcUJFrFrFrFrFrFrLTgAVxMbqnlaDMPnqnlanWSRLzPnqnlaDMPnqnAAVxmCFrFrFrFrFr
FrFrFrFrFrFrlPFrFrFrFrFrLTjPaEFrFrFrFrrbWQhWaEFrFrFrFrFrFrFrqWjxjxtXqnqnaEFrzCdsFrFrFrFrFrFrFrFrFrFrFrFrFrFrzCqnqnjPjPqndsFrFrOaaWaJPnqnlaDMPnqnlaaWaJNUFrFrFrFrFrFrFrFrEKFrFrzCdsFrUcUcUczCqnRcqnqnaEFrFrFrFrFrFrzCqnqnqntXtXqnqntXgAVxVMMtKMqnqnqnlaeJfHgyPnKMqnqnqngAVMVxMtqnqnhuFrFr
FrFrFrFrFrFrlPFrFrLTaEFrzCqnqwjPjPaEFrhzFrriEKFrFrFrFrFrFrFrFrWQqnjxqwqwhuFrzCdsFrFrLTaEFrFrFrFrFrFrFrFrFrFrzCqnqnqnqnjphuFrLTlaaWaJmvqnqntDqnqnPHaWaJNUFrFrFrFrFrFrFrFrEKFrFrWQdsFrFrFrFrWQqnjEqnqndsFrFrFrFrFrLTqnqnqnqnjxlWlWlWaOqnAGVMMtqnqnqnqnRGPBBFHmPnqnqnqnqngAVMRdqnqnhuFrFrFx
FrFrFrFrFrFrlPFrFrWQhuFrWQhuFrWQqndsFrFrFrFrEKFrFrFrFrFrFrFrFrFrzCdsFrFrFrFrzCdsFrLTqndsFrFrFrFrFrFrFrFrFrFrWQqwtXqndsFrFrFrWQlayJaJcimvgIgIgIPHFgaWJgNUFrFrFrFrFrFrLTjPdsFrFrFrzCaEFrFrFrFryuqnqnqwhuFrFrFrFrFrzCsrqnqwqwhuUcUcUcFrXXVxVMMtqngIqnqnlaGBsaNDPnqnqngIqngAVMVxMthuFrFrFrFr
FrFrFrFrFrFrlPFrFrFrFrFrFrFrFrFrWQhuFrFrLTNshuFrFrFrFrFrFrFrFrFrzCdsFrFrLTjPqnqnJztXqnqnjPjPjPjPjPJzaEFrFrFrFrFrKYtXeoFrFrFrFrOaaWGhDuDuhpfHqyDuDuhjaJPnaEFrFrFrFrFrzCqnhuFrFrFrzCqnaEFrFrFrWQlWhuFrFrFrFrFrLTjPqnRcUJFrFrFrFrFrFrLTgAVxMbqnlaDMPnqnlanWSRLzPnqnlaDMPnqnAAVxmCFrFrFrFrFr
WjWjWjWjWjWjNuWjOHeXeXIRWjWjWjWjWjWjWjWjzhWjWjWjWjWjWjWjWjWjFrFrgxqnhWhWqwqwqwqwldtXqnqwqwlWchqwqwjxdsFrFrFrFrFrzCjxUiFrFrFrLTlaGfjDjDjDdwGqvnjDjDjDDbPndsFrFrFrFrFrzCdsFrFrFrFrWQqnqnaEFrFrFrUcFrFrFrFrFrFrzCqnqnqwhuFrFrFrFrFrLTqngAVxDeTvTvtDTvTvTvAWKGbKTvOxTvtDTvTvNLVxmCFrFrFrFrFr
nXnXGvnXnXnXEYnXMisXsXVZnXnXnXGvnXnXnXnXzuGvnXnXnXnXnXnXGvnXEzFrmodsFrFrFrFrFrFrUcKYdsFrFrUcFrFrFrzCdsFrFrFrFrFrzCqndsFrFrFrWQqnPCPCPCPCPCPCPCPCPCPCPCqnhuFrFrFrFrFresdsFrFrFrFrFrzCqnqnjPjPjPaEFrFrFrLTjPjPqnqndsFrFrFrFrFrFrFrqnqnuAVxVxVxVxxRVxVxVxVxxRVxVxVxVxxRVxVxVxVxmCFrFrFrFrFr
FrFrcSFrFrFrlPFrFKaNdsFrLTClClxKClClaEFrEKiJFrFrFrLTClaEiJFrRnKxjEdsFrFrFrFrFrFrFrzCdsFrFrFrFrFrFrzCqnaEFrFrLTjPqnqndsFrFrFrFrzCqnqwqwqnqnWVqnqwqwqwqwhuFrFrFrFrFrFrXzdsFrFrFrFrFrWQqntXtXtXjEqnJzJzJzqngIgIqwqwhuFrFrFrFrFrFrLTqnqwtXUrUrUrPJTvPJUrUrPJTvPJUrUrPJTvPJUrUrIeqnaEFrFrFrFr
FrLTICaEFrFrlPLTzNqnhuFrOaugVMzOVMAPbbFrzCDfFrFrFrOafHNUiJFrKZeeqnqnaEFrFrLTjPjPjPqnhuFrFrLTjPjPjPqnqntXjPjPqnqnqnqndsFrFrLTjPqnhuFrFrWQqnqndsFrFrFrFrFrFrFrFrFrFrFrFrEKFrLTjPaEFrFrWQaOaOlWHXlWlWlWaOlujTtJsVFrFrFrFrLTaEFrLTqnhuFrqlUZUZfTVxVxVxCjfTVxVxVxCjfTVxVxVxCjUZHUqnqnaEFrFrFr
FrzCKuhuFrFrlPWQKudsFrFrOabVVMMvVMWpPnNsqnKujPNsNschSnqnZNFrmSeeqnqnqnjPjPqnqnqnqndsFrFrLTqnqwqwqwqwqwaOlWqwqwqwqwqwhuFrFrzCqnhuFrFrFrOfzCqnqnjPjPjPjPjPjPjPJzCPFrFrFrEKFrgxqndsFrFrFrFrFrUcUcUcUcUcFrFrgovQFrLTaEFrFrWQqnjPtXdsFrFrqlCMCMCMUrUrUrCMCMUrUrUrCMCMUrUrUrCMCMLbqnqnqnaEFrFr
FrWQlKFrFrFrlPFrwidsFrFrWQartPYHnYilhuFrWQFVhuFrFrFrFrbBlKyqLjzDqwqwlWlWlIqwjpqwqwhuFrFrWQEpFrFrFrFrFrFrUcFrFrFrFrFrFrFrFrzChuFrFryqFrFrWQqwKMqnqwqnqnqnqnqwaOlWrRrRrRlWrRkQqwhuFrFrFrFrFrFrFrLTjPaEFrFrFrFrLTqnqnaEFrFrWQqnjxdsFrFrKYVsVsVsGoGoGoVsVsGoGoGoVsVsGoGoGoVsVsnsqnqnqnqnaEFr
FrFrFrFrFrFrlPLTqnqnaEFrFrFrgoFOvQFrFrLTaEFrFrFrFrFrFrFrFrFrLjhhFrFrUcUcFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrLTdsFrFrFrFrFrFrFrFrWQhuFrWQlIqwhuFrFrUcUcUcUcUcUcFrFrFrFrFrFrFrFrFrFrWQqwqwjPaEFrFrWQlIqwqnaEFrFrWQqwhuFrFrWQSiSiSijujujuSiSijujujuSiSijujujuSiSiqCqwqwqwqwhuFr
FrFrFrFrFrFrlPihmLzUiilPlPlPlPlPlPkoVgoziilPlPlPlPlPlPlPlPlPAilvlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPihiilPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPihozlPlPrulPlPihJalPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPFrFrFrFrFrFr
FrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrWQqwhuFrFrFrFrFrFrFrFrFrFrLjhhFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrLTjPaEFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrtMFrFrFrFrFrFrzCjPjPjPaEFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFr
FrFrFrFrFrFrlPLTqnqnaEFrFrFrgoFOvQFrFrLTaEFrFrFrFrFrFrFrFrFrLjhhFrFrUcUcFrFrFrFrFrFrFrFrFrFrFrFrFrLTaEFrFrFrFrFrFrFrFrFrLTdsFrFrFrFrFrFrFrFrWQhuFrWQgFqwhuFrFrUcUcUcUcUcUcFrFrFrFrFrFrFrFrFrFrWQqwqwjPaEFrFrWQlIqwqnaEFrFrWQqwhuFrFrWQSiSiSijujujuSiSijujujuSiSijujujuSiSiqCqwqwqwqwhuFr
FrFrFrFrFrFrlPihmLzUiilPlPlPlPlPlPkoVgoziilPlPlPlPlPlPlPlPlPAilvlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPihozPAlPlPlPlPlPlPlPlPihiilPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPihozlPlPrulPlPihJalPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPlPFrFrFrFrFrFr
FrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrWQqwhuFrFrFrFrFrFrFrFrFrFrLjhhFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrWQhuFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrLTjPaEFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrtMFrFrFrFrFrFrzCjPjPjPaEFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFrFr
FrFrFrFrFrFrLTjPaEFrFrLTjPjPaEFrFrFrFrFrFrLTjPjPjPjPjPaEFrFrLjUjjPjPjPaEFrFrFrFrLTjPjPjPjPjPjPjPjPjPjPaEFrFrFrFrFrFrFrFrLTaEFrFrFrLTjPaEFrFrFrFrLTqnqnqnjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPqnjPjPjPjPjPjPqnqnqnqnqnjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjP
EQEQEQEQEQEQwMwMwMEQEQwMwMwMwMEQEQEQEQEQEQwMwMwMwMwMwMwMEQEQTiRwwMwMwMwMEQEQEQEQwMwMwMwMwMwMwMwMwMwMwMwMEQEQEQEQEQEQEQEQwMwMEQEQEQwMwMwMEQEQEQEQwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwMwM
HiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHixpYwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHi
HiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHixpYwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHi
HiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHixpYwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHi
ddHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHixpYwHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHiHidd
"}

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Before

Width:  |  Height:  |  Size: 996 B

After

Width:  |  Height:  |  Size: 996 B

Before

Width:  |  Height:  |  Size: 878 B

After

Width:  |  Height:  |  Size: 878 B

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

Before

Width:  |  Height:  |  Size: 421 B

After

Width:  |  Height:  |  Size: 421 B

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Before

Width:  |  Height:  |  Size: 1022 B

After

Width:  |  Height:  |  Size: 1022 B

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

File diff suppressed because it is too large Load Diff
@@ -179,7 +179,8 @@
list("Redgate - Islands Underwater","Redgate - Islands"),
list("Redgate - Moving Train", "Redgate - Moving Train Upper Level"),
list("Redgate - Fantasy Dungeon", "Redgate - Fantasy Town"),
list("Redgate - Laserdome")
list("Redgate - Laserdome"),
list("Redgate - Cascading Falls")
)
ai_shell_restricted = TRUE
+2 -1
View File
@@ -209,7 +209,8 @@
list("Redgate - Islands Underwater","Redgate - Islands"),
list("Redgate - Moving Train", "Redgate - Moving Train Upper Level"),
list("Redgate - Fantasy Dungeon", "Redgate - Fantasy Town"),
list("Redgate - Laserdome")
list("Redgate - Laserdome"),
list("Redgate - Cascading Falls")
)
ai_shell_restricted = TRUE
+8 -6
View File
@@ -80,12 +80,14 @@ export const Panel = (props, context) => {
<ChatPanel lineHeight={settings.lineHeight} />
</Pane.Content>
<Notifications>
{settings.showReconnectWarning && game.connectionLostAt && (
<Notifications.Item rightSlot={<ReconnectButton />}>
You are either AFK, experiencing lag or the connection has
closed.
</Notifications.Item>
)}
{settings.showReconnectWarning &&
game.connectionLostAt &&
!game.dismissedConnectionWarning && (
<Notifications.Item rightSlot={<ReconnectButton />}>
You are either AFK, experiencing lag or the connection has
closed.
</Notifications.Item>
)}
{settings.showReconnectWarning && game.roundRestartedAt && (
<Notifications.Item>
The connection has been closed because the server is
@@ -6,7 +6,7 @@
import { useDispatch, useSelector } from 'common/redux';
import { Button, Collapsible, Divider, Input, Section, Stack } from 'tgui/components';
import { removeChatPage, toggleAcceptedType, updateChatPage } from './actions';
import { moveChatPageLeft, moveChatPageRight, removeChatPage, toggleAcceptedType, updateChatPage } from './actions';
import { MESSAGE_TYPES } from './constants';
import { selectCurrentChatPage } from './selectors';
@@ -30,20 +30,56 @@ export const ChatPageSettings = (props, context) => {
}
/>
</Stack.Item>
<Stack.Item>
<Button
icon="times"
color="red"
onClick={() =>
dispatch(
removeChatPage({
pageId: page.id,
})
)
}>
Remove
</Button>
</Stack.Item>
{!page.isMain ? (
<Stack.Item>
<Button
icon="times"
color="red"
onClick={() =>
dispatch(
removeChatPage({
pageId: page.id,
})
)
}>
Remove
</Button>
</Stack.Item>
) : (
''
)}
</Stack>
<Divider />
<Stack align="center">
{!page.isMain ? (
<Stack.Item>
Reorder Chat:&emsp;
<Button
color="blue"
onClick={() =>
dispatch(
moveChatPageLeft({
pageId: page.id,
})
)
}>
&laquo;
</Button>
<Button
color="blue"
onClick={() =>
dispatch(
moveChatPageRight({
pageId: page.id,
})
)
}>
&raquo;
</Button>
</Stack.Item>
) : (
''
)}
</Stack>
<Divider />
<Section title="Messages to display" level={2}>
+2
View File
@@ -20,3 +20,5 @@ export const removeChatPage = createAction('chat/removePage');
export const changeScrollTracking = createAction('chat/changeScrollTracking');
export const saveChatToDisk = createAction('chat/saveToDisk');
export const purgeChatMessageArchive = createAction('chat/purgeMessageArchive');
export const moveChatPageLeft = createAction('chat/movePageLeft');
export const moveChatPageRight = createAction('chat/movePageRight');
+4 -4
View File
@@ -4,12 +4,12 @@
* @license MIT
*/
export const MAX_VISIBLE_MESSAGES = 2500;
export const MAX_PERSISTED_MESSAGES = 1000;
// export const MAX_VISIBLE_MESSAGES = 2500; No longer a constant
// export const MAX_PERSISTED_MESSAGES = 1000; No longer a constant
export const MESSAGE_SAVE_INTERVAL = 10000;
export const MESSAGE_PRUNE_INTERVAL = 60000;
export const COMBINE_MAX_MESSAGES = 5;
export const COMBINE_MAX_TIME_WINDOW = 5000;
// export const COMBINE_MAX_MESSAGES = 5; No longer a constant
// export const COMBINE_MAX_TIME_WINDOW = 5000; No longer a constant
export const IMAGE_RETRY_DELAY = 250;
export const IMAGE_RETRY_LIMIT = 10;
export const IMAGE_RETRY_MESSAGE_AGE = 60000;
+19 -9
View File
@@ -8,8 +8,8 @@ import DOMPurify from 'dompurify';
import { storage } from 'common/storage';
import { loadSettings, updateSettings, addHighlightSetting, removeHighlightSetting, updateHighlightSetting } from '../settings/actions';
import { selectSettings } from '../settings/selectors';
import { addChatPage, changeChatPage, changeScrollTracking, loadChat, rebuildChat, removeChatPage, saveChatToDisk, purgeChatMessageArchive, toggleAcceptedType, updateMessageCount } from './actions';
import { MAX_PERSISTED_MESSAGES, MESSAGE_SAVE_INTERVAL } from './constants';
import { addChatPage, changeChatPage, changeScrollTracking, loadChat, rebuildChat, moveChatPageLeft, moveChatPageRight, removeChatPage, saveChatToDisk, purgeChatMessageArchive, toggleAcceptedType, updateMessageCount } from './actions';
import { MESSAGE_SAVE_INTERVAL } from './constants';
import { createMessage, serializeMessage } from './model';
import { chatRenderer } from './renderer';
import { selectChat, selectCurrentChatPage } from './selectors';
@@ -19,9 +19,10 @@ const FORBID_TAGS = ['a', 'iframe', 'link', 'video'];
const saveChatToStorage = async (store) => {
const state = selectChat(store.getState());
const settings = selectSettings(store.getState());
const fromIndex = Math.max(
0,
chatRenderer.messages.length - MAX_PERSISTED_MESSAGES
chatRenderer.messages.length - settings.persistentMessageLimit
);
const messages = chatRenderer.messages
.slice(fromIndex)
@@ -61,7 +62,6 @@ const loadChatFromStorage = async (store) => {
];
chatRenderer.processBatch(batch, {
prepend: true,
noarchive: true,
});
}
if (archivedMessages) {
@@ -116,6 +116,14 @@ export const chatMiddleware = (store) => {
}, MESSAGE_SAVE_INTERVAL);
return (next) => (action) => {
const { type, payload } = action;
const settings = selectSettings(store.getState());
settings.totalStoredMessages = chatRenderer.getStoredMessages();
chatRenderer.setVisualChatLimits(
settings.visibleMessageLimit,
settings.combineMessageLimit,
settings.combineIntervalLimit,
settings.logLineCount
);
if (!initialized) {
initialized = true;
loadChatFromStorage(store);
@@ -155,7 +163,9 @@ export const chatMiddleware = (store) => {
}
}
chatRenderer.processBatch([payload_obj.content]);
chatRenderer.processBatch([payload_obj.content], {
doArchive: true,
});
return;
}
if (type === loadChat.type) {
@@ -170,7 +180,9 @@ export const chatMiddleware = (store) => {
type === changeChatPage.type ||
type === addChatPage.type ||
type === removeChatPage.type ||
type === toggleAcceptedType.type
type === toggleAcceptedType.type ||
type === moveChatPageLeft.type ||
type === moveChatPageRight.type
) {
next(action);
const page = selectCurrentChatPage(store.getState());
@@ -178,7 +190,7 @@ export const chatMiddleware = (store) => {
return;
}
if (type === rebuildChat.type) {
chatRenderer.rebuildChat();
chatRenderer.rebuildChat(settings.visibleMessages);
return next(action);
}
@@ -190,7 +202,6 @@ export const chatMiddleware = (store) => {
type === updateHighlightSetting.type
) {
next(action);
const settings = selectSettings(store.getState());
chatRenderer.setHighlight(
settings.highlightSettings,
settings.highlightSettingById
@@ -204,7 +215,6 @@ export const chatMiddleware = (store) => {
return next(action);
}
if (type === saveChatToDisk.type) {
const settings = selectSettings(store.getState());
chatRenderer.saveToDisk(settings.logLineCount);
return;
}
+2
View File
@@ -18,6 +18,7 @@ export const createPage = (obj) => {
}
return {
isMain: false,
id: createUuid(),
name: 'New Tab',
acceptedTypes: acceptedTypes,
@@ -33,6 +34,7 @@ export const createMainPage = () => {
acceptedTypes[typeDef.type] = true;
}
return createPage({
isMain: true,
name: 'Main',
acceptedTypes,
});
+48 -1
View File
@@ -4,7 +4,7 @@
* @license MIT
*/
import { addChatPage, changeChatPage, loadChat, removeChatPage, toggleAcceptedType, updateChatPage, updateMessageCount, changeScrollTracking } from './actions';
import { addChatPage, changeChatPage, loadChat, removeChatPage, moveChatPageLeft, moveChatPageRight, toggleAcceptedType, updateChatPage, updateMessageCount, changeScrollTracking } from './actions';
import { canPageAcceptType, createMainPage } from './model';
const mainPage = createMainPage();
@@ -179,5 +179,52 @@ export const chatReducer = (state = initialState, action) => {
}
return nextState;
}
if (type === moveChatPageLeft.type) {
const { pageId } = payload;
const nextState = {
...state,
pages: [...state.pages],
pageById: {
...state.pageById,
},
};
const tmpPage = nextState.pageById[pageId];
const fromIndex = nextState.pages.indexOf(tmpPage.id);
const toIndex = fromIndex - 1;
// don't ever move leftmost page
if (fromIndex > 0) {
// don't ever move anything to the leftmost page
if (toIndex > 0) {
const tmp = nextState.pages[fromIndex];
nextState.pages[fromIndex] = nextState.pages[toIndex];
nextState.pages[toIndex] = tmp;
}
}
return nextState;
}
if (type === moveChatPageRight.type) {
const { pageId } = payload;
const nextState = {
...state,
pages: [...state.pages],
pageById: {
...state.pageById,
},
};
const tmpPage = nextState.pageById[pageId];
const fromIndex = nextState.pages.indexOf(tmpPage.id);
const toIndex = fromIndex + 1;
// don't ever move leftmost page
if (fromIndex > 0) {
// don't ever move anything out of the array
if (toIndex < nextState.pages.length) {
const tmp = nextState.pages[fromIndex];
nextState.pages[fromIndex] = nextState.pages[toIndex];
nextState.pages[toIndex] = tmp;
}
}
return nextState;
}
return state;
};
+46 -16
View File
@@ -7,7 +7,7 @@
import { EventEmitter } from 'common/events';
import { classes } from 'common/react';
import { createLogger } from 'tgui/logging';
import { COMBINE_MAX_MESSAGES, COMBINE_MAX_TIME_WINDOW, IMAGE_RETRY_DELAY, IMAGE_RETRY_LIMIT, IMAGE_RETRY_MESSAGE_AGE, MAX_PERSISTED_MESSAGES, MAX_VISIBLE_MESSAGES, MESSAGE_PRUNE_INTERVAL, MESSAGE_TYPES, MESSAGE_TYPE_INTERNAL, MESSAGE_TYPE_UNKNOWN } from './constants';
import { IMAGE_RETRY_DELAY, IMAGE_RETRY_LIMIT, IMAGE_RETRY_MESSAGE_AGE, MESSAGE_PRUNE_INTERVAL, MESSAGE_TYPES, MESSAGE_TYPE_INTERNAL, MESSAGE_TYPE_UNKNOWN } from './constants';
import { render } from 'inferno';
import { canPageAcceptType, createMessage, isSameMessage, serializeMessage } from './model';
import { highlightNode, linkifyNode } from './replaceInTextNode';
@@ -115,6 +115,11 @@ class ChatRenderer {
this.visibleMessages = [];
this.page = null;
this.events = new EventEmitter();
// Adjustables
this.visibleMessageLimit = 2500;
this.combineMessageLimit = 5;
this.combineIntervalLimit = 5;
this.exportLimit = -1;
// Scroll handler
/** @type {HTMLElement} */
this.scrollNode = null;
@@ -160,7 +165,7 @@ class ChatRenderer {
this.scrollToBottom();
});
// Flush the queue
this.tryFlushQueue();
this.tryFlushQueue(true);
}
onStateLoaded() {
@@ -168,9 +173,9 @@ class ChatRenderer {
this.tryFlushQueue();
}
tryFlushQueue() {
tryFlushQueue(doArchive = false) {
if (this.isReady() && this.queue.length > 0) {
this.processBatch(this.queue);
this.processBatch(this.queue, { doArchive: doArchive });
this.queue = [];
}
}
@@ -352,11 +357,23 @@ class ChatRenderer {
}
}
setVisualChatLimits(
visibleMessageLimit,
combineMessageLimit,
combineIntervalLimit,
exportLimit
) {
this.visibleMessageLimit = visibleMessageLimit;
this.combineMessageLimit = combineMessageLimit;
this.combineIntervalLimit = combineIntervalLimit;
this.exportLimit = exportLimit;
}
getCombinableMessage(predicate) {
const now = Date.now();
const len = this.visibleMessages.length;
const from = len - 1;
const to = Math.max(0, len - COMBINE_MAX_MESSAGES);
const to = Math.max(0, len - this.combineMessageLimit);
for (let i = from; i >= to; i--) {
const message = this.visibleMessages[i];
@@ -366,7 +383,7 @@ class ChatRenderer {
// Text payload must fully match
isSameMessage(message, predicate) &&
// Must land within the specified time window
now < message.createdAt + COMBINE_MAX_TIME_WINDOW;
now < message.createdAt + this.combineIntervalLimit * 1000;
if (matches) {
return message;
}
@@ -375,7 +392,7 @@ class ChatRenderer {
}
processBatch(batch, options = {}) {
const { prepend, notifyListeners = true, noArchive = false } = options;
const { prepend, notifyListeners = true, doArchive = false } = options;
const now = Date.now();
// Queue up messages until chat is ready
if (!this.isReady()) {
@@ -420,6 +437,15 @@ class ChatRenderer {
} else {
logger.error('Error: message is missing text payload', message);
}
// Get our commands we might want to send to chat
const commands = node.querySelectorAll('[data-command]');
if (commands.length) {
const command = commands[0].getAttribute('data-command');
if (command === '$do_export') {
this.saveToDisk(this.exportLimit);
}
return; // We do not want those logged or shown!
}
// Get all nodes in this message that want to be rendered like jsx
const nodes = node.querySelectorAll('[data-component]');
for (let i = 0; i < nodes.length; i++) {
@@ -522,7 +548,7 @@ class ChatRenderer {
countByType[message.type] += 1;
// TODO: Detect duplicates
this.messages.push(message);
if (!noArchive) {
if (doArchive) {
this.archivedMessages.push(serializeMessage(message, true)); // TODO: Actually having a better message archiving maybe for exports?
}
if (canPageAcceptType(this.page, message.type)) {
@@ -560,7 +586,7 @@ class ChatRenderer {
// Visible messages
{
const messages = this.visibleMessages;
const fromIndex = Math.max(0, messages.length - MAX_VISIBLE_MESSAGES);
const fromIndex = Math.max(0, messages.length - this.visibleMessageLimit);
if (fromIndex > 0) {
this.visibleMessages = messages.slice(fromIndex);
for (let i = 0; i < fromIndex; i++) {
@@ -581,7 +607,7 @@ class ChatRenderer {
{
const fromIndex = Math.max(
0,
this.messages.length - MAX_PERSISTED_MESSAGES
this.messages.length - this.persistentMessageLimit
);
if (fromIndex > 0) {
this.messages = this.messages.slice(fromIndex);
@@ -590,15 +616,12 @@ class ChatRenderer {
}
}
rebuildChat() {
rebuildChat(rebuildLimit) {
if (!this.isReady()) {
return;
}
// Make a copy of messages
const fromIndex = Math.max(
0,
this.messages.length - MAX_PERSISTED_MESSAGES
);
const fromIndex = Math.max(0, this.messages.length - rebuildLimit);
const messages = this.messages.slice(fromIndex);
// Remove existing nodes
for (let message of messages) {
@@ -644,10 +667,13 @@ class ChatRenderer {
// for (let message of this.visibleMessages) { // TODO: Actually having a better message archiving maybe for exports?
for (let message of tmpMsgArray) {
// Filter messages according to active tab for export
if (canPageAcceptType(this.page, message.type)) {
messagesHtml += message.html + '\n';
}
// if (message.node) {
// messagesHtml += message.node.outerHTML + '\n';
// }
messagesHtml += message.html + '\n';
}
// Create a page
@@ -679,6 +705,10 @@ class ChatRenderer {
purgeMessageArchive() {
this.archivedMessages = [];
}
getStoredMessages() {
return this.archivedMessages.length;
}
}
// Make chat renderer global so that we can continue using the same
+1
View File
@@ -9,3 +9,4 @@ import { createAction } from 'common/redux';
export const roundRestarted = createAction('roundrestart');
export const connectionLost = createAction('game/connectionLost');
export const connectionRestored = createAction('game/connectionRestored');
export const dismissWarning = createAction('game/dismissWarning');
+9 -1
View File
@@ -5,7 +5,7 @@
*/
import { connectionLost } from './actions';
import { connectionRestored } from './actions';
import { connectionRestored, dismissWarning } from './actions';
const initialState = {
// TODO: This is where round info should be.
@@ -13,6 +13,7 @@ const initialState = {
roundTime: null,
roundRestartedAt: null,
connectionLostAt: null,
dismissedConnectionWarning: false,
};
export const gameReducer = (state = initialState, action) => {
@@ -33,6 +34,13 @@ export const gameReducer = (state = initialState, action) => {
return {
...state,
connectionLostAt: null,
dismissedConnectionWarning: false,
};
}
if (type === dismissWarning.type) {
return {
...state,
dismissedConnectionWarning: true,
};
}
return state;
+11 -1
View File
@@ -1,4 +1,6 @@
import { Button } from 'tgui/components';
import { useDispatch } from 'common/redux';
import { dismissWarning } from './game/actions';
let url: string | null = null;
@@ -11,10 +13,11 @@ setInterval(() => {
});
}, 5000);
export const ReconnectButton = () => {
export const ReconnectButton = (props, context) => {
if (!url) {
return null;
}
const dispatch = useDispatch(context);
return (
<>
<Button
@@ -32,6 +35,13 @@ export const ReconnectButton = () => {
}}>
Relaunch game
</Button>
<Button
color="white"
onClick={() => {
dispatch(dismissWarning());
}}>
Dismiss
</Button>
</>
);
};
@@ -42,6 +42,7 @@ export const SettingsPanel = (props, context) => {
</Stack.Item>
<Stack.Item grow={1} basis={0}>
{activeTab === 'general' && <SettingsGeneral />}
{activeTab === 'limits' && <MessageLimits />}
{activeTab === 'export' && <ExportTab />}
{activeTab === 'chatPage' && <ChatPageSettings />}
{activeTab === 'textHighlight' && <TextHighlightSettings />}
@@ -169,9 +170,101 @@ export const SettingsGeneral = (props, context) => {
);
};
export const MessageLimits = (props, context) => {
const dispatch = useDispatch(context);
const {
visibleMessageLimit,
persistentMessageLimit,
combineMessageLimit,
combineIntervalLimit,
} = useSelector(context, selectSettings);
return (
<Section>
<LabeledList>
<LabeledList.Item label="Amount of lines to display 500-10000 (Default: 2500)">
<NumberInput
width="5em"
step={100}
stepPixelSize={2}
minValue={500}
maxValue={10000}
value={visibleMessageLimit}
format={(value) => toFixed(value)}
onDrag={(e, value) =>
dispatch(
updateSettings({
visibleMessageLimit: value,
})
)
}
/>
</LabeledList.Item>
<LabeledList.Item label="Amount of visually persistent lines 500-10000 (Default: 1000)">
<NumberInput
width="5em"
step={100}
stepPixelSize={2}
minValue={500}
maxValue={10000}
value={persistentMessageLimit}
format={(value) => toFixed(value)}
onDrag={(e, value) =>
dispatch(
updateSettings({
persistentMessageLimit: value,
})
)
}
/>
</LabeledList.Item>
<LabeledList.Item label="Amount of different lines in between to combine 0-10 (Default: 5)">
<NumberInput
width="5em"
step={1}
stepPixelSize={10}
minValue={0}
maxValue={10}
value={combineMessageLimit}
format={(value) => toFixed(value)}
onDrag={(e, value) =>
dispatch(
updateSettings({
combineMessageLimit: value,
})
)
}
/>
</LabeledList.Item>
<LabeledList.Item label="Time to combine messages 0-10 (Default: 5 Seconds)">
<NumberInput
width="5em"
step={1}
stepPixelSize={10}
minValue={0}
maxValue={10}
value={combineIntervalLimit}
unit="s"
format={(value) => toFixed(value)}
onDrag={(e, value) =>
dispatch(
updateSettings({
combineIntervalLimit: value,
})
)
}
/>
</LabeledList.Item>
</LabeledList>
</Section>
);
};
export const ExportTab = (props, context) => {
const dispatch = useDispatch(context);
const { logRetainDays, logLineCount } = useSelector(context, selectSettings);
const { logRetainDays, logLineCount, totalStoredMessages } = useSelector(
context,
selectSettings
);
const [purgeConfirm, setPurgeConfirm] = useLocalState(
context,
'purgeConfirm',
@@ -197,11 +290,15 @@ export const ExportTab = (props, context) => {
</LabeledList.Item>
*/}
<LabeledList.Item label="Amount of lines to export (-1 = inf.)">
<Input
<NumberInput
width="5em"
monospace
step={100}
stepPixelSize={2}
minValue={-1}
maxValue={50000}
value={logLineCount}
onInput={(e, value) =>
format={(value) => toFixed(value)}
onDrag={(e, value) =>
dispatch(
updateSettings({
logLineCount: value,
@@ -210,6 +307,9 @@ export const ExportTab = (props, context) => {
}
/>
</LabeledList.Item>
<LabeledList.Item label="Totally stored messages">
<Box>{totalStoredMessages}</Box>
</LabeledList.Item>
</LabeledList>
<Divider />
<Button icon="save" onClick={() => dispatch(saveChatToDisk())}>
@@ -9,6 +9,10 @@ export const SETTINGS_TABS = [
id: 'general',
name: 'General',
},
{
id: 'limits',
name: 'Visual Limits',
},
{
id: 'export',
name: 'Export',

Some files were not shown because too many files have changed in this diff Show More