diff --git a/.gitignore b/.gitignore
index d282eb9540..be057acf24 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,9 +22,6 @@ cfg/
!/.vscode/settings.json
!/.vscode/tasks.json
-code/game/gamemodes/technomancer/spells/projectile/overload.dm
-code/game/gamemodes/technomancer/spells/projectile/overload.dm
-code/modules/client/preference_setup/loadout/loadout_xeno.dm
temp.dmi
node_modules/
package-lock.json
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000000..2b7500b231
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,5 @@
+# We don't want prettier to run on anything outside of the TGUI folder, so we have to do this.
+/*
+
+# We want it to run into the TGUI folder, however.
+!/tgui
diff --git a/code/_helpers/logging.dm b/code/_helpers/logging.dm
index 5d68dc9a8c..5dc784d1b3 100644
--- a/code/_helpers/logging.dm
+++ b/code/_helpers/logging.dm
@@ -37,7 +37,7 @@
/proc/log_debug(text)
if (config.log_debug)
- WRITE_LOG(debug_log, "DEBUG: [text]")
+ WRITE_LOG(debug_log, "DEBUG: [sanitize(text)]")
for(var/client/C in GLOB.admins)
if(C.is_preference_enabled(/datum/client_preference/debug/show_debug_logs))
diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm
index abc7ade225..194341a106 100644
--- a/code/datums/helper_datums/teleport.dm
+++ b/code/datums/helper_datums/teleport.dm
@@ -1,3 +1,10 @@
+var/bluespace_item_types = newlist(/obj/item/weapon/storage/backpack/holding,
+/obj/item/weapon/storage/bag/trash/holding,
+/obj/item/weapon/storage/pouch/holding,
+/obj/item/weapon/storage/belt/utility/holding,
+/obj/item/weapon/storage/belt/medical/holding
+)
+
//wrapper
/proc/do_teleport(ateleatom, adestination, aprecision=0, afteleport=1, aeffectin=null, aeffectout=null, asoundin=null, asoundout=null, local=TRUE) //VOREStation Edit
new /datum/teleport/instant/science(arglist(args))
@@ -151,19 +158,25 @@
/datum/teleport/instant/science/setPrecision(aprecision)
..()
- if(istype(teleatom, /obj/item/weapon/storage/backpack/holding))
- precision = rand(1,100)
- var/list/bagholding = teleatom.search_contents_for(/obj/item/weapon/storage/backpack/holding)
+ var/list/bluespace_things = newlist()
+
+ for (var/item in bluespace_item_types)
+ if (istype(teleatom, item))
+ precision = rand(1, 100)
+ bluespace_things |= teleatom.search_contents_for(item)
+
//VOREStation Addition Start: Prevent taurriding abuse
if(istype(teleatom, /mob/living))
var/mob/living/L = teleatom
if(LAZYLEN(L.buckled_mobs))
for(var/mob/rider in L.buckled_mobs)
- bagholding += rider.search_contents_for(/obj/item/weapon/storage/backpack/holding)
+ for (var/item in bluespace_item_types)
+ bluespace_things |= rider.search_contents_for(item)
//VOREStation Addition End: Prevent taurriding abuse
- if(bagholding.len)
- precision = max(rand(1,100)*bagholding.len,100)
+
+ if(bluespace_things.len)
+ precision = max(rand(1,100)*bluespace_things.len,100)
if(istype(teleatom, /mob/living))
var/mob/living/MM = teleatom
to_chat(MM, "The Bluespace interface on your [teleatom] interferes with the teleport! ")
diff --git a/code/datums/supplypacks/vending_refills_vr.dm b/code/datums/supplypacks/vending_refills_vr.dm
index 47ee538d7e..348193a1bf 100644
--- a/code/datums/supplypacks/vending_refills_vr.dm
+++ b/code/datums/supplypacks/vending_refills_vr.dm
@@ -48,6 +48,11 @@
name = "Ration Station Vendor Refill Cartridge"
cost = 10
+/datum/supply_pack/vending_refills/altevian
+ contains = list(/obj/item/weapon/refill_cartridge/autoname/food/altevian)
+ name = "Altevian Vendor Refill Cartridge"
+ cost = 10
+
/datum/supply_pack/vending_refills/coffee
contains = list(/obj/item/weapon/refill_cartridge/autoname/drink/coffee)
name = "Hot Drinks Vendor Refill Cartridge"
diff --git a/code/datums/uplink/tools.dm b/code/datums/uplink/tools.dm
index eee41e9699..9c1a46d632 100644
--- a/code/datums/uplink/tools.dm
+++ b/code/datums/uplink/tools.dm
@@ -6,22 +6,22 @@
/datum/uplink_item/item/tools/binoculars
name = "Binoculars"
- item_cost = 5
+ item_cost = 3
path = /obj/item/device/binoculars
/datum/uplink_item/item/tools/toolbox // Leaving the basic as an option since powertools are loud.
name = "Fully Loaded Toolbox"
- item_cost = 5
+ item_cost = 3
path = /obj/item/weapon/storage/toolbox/syndicate
/datum/uplink_item/item/tools/powertoolbox
name = "Fully Loaded Powertool Box"
- item_cost = 10
+ item_cost = 5
path = /obj/item/weapon/storage/toolbox/syndicate/powertools
/datum/uplink_item/item/tools/clerical
name = "Morphic Clerical Kit"
- item_cost = 10
+ item_cost = 5
path = /obj/item/weapon/storage/box/syndie_kit/clerical
/datum/uplink_item/item/tools/encryptionkey_radio
@@ -42,7 +42,7 @@
/datum/uplink_item/item/tools/duffle
name = "Black Duffle Bag"
- item_cost = 10
+ item_cost = 5
path = /obj/item/weapon/storage/backpack/dufflebag/syndie
/datum/uplink_item/item/tools/duffle/med
@@ -61,7 +61,7 @@
/datum/uplink_item/item/tools/space_suit
name = "Space Suit"
- item_cost = 15
+ item_cost = 10
path = /obj/item/weapon/storage/box/syndie_kit/space
/datum/uplink_item/item/tools/encryptionkey_binary
@@ -71,7 +71,7 @@
/datum/uplink_item/item/tools/hacking_tool
name = "Door Hacking Tool"
- item_cost = 20
+ item_cost = 15
path = /obj/item/device/multitool/hacktool
desc = "Appears and functions as a standard multitool until the mode is toggled by applying a screwdriver appropriately. \
When in hacking mode this device will grant full access to any standard airlock within 20 to 40 seconds. \
@@ -79,7 +79,7 @@
/datum/uplink_item/item/tools/ai_detector
name = "Anti-Surveillance Tool"
- item_cost = 20
+ item_cost = 15
path = /obj/item/device/multitool/ai_detector
desc = "This functions like a normal multitool, but includes an integrated camera network sensor that will warn the holder if they are being \
watched, by changing color and beeping. It is able to detect both AI visual surveillance and security camera utilization from terminals, and \
@@ -87,20 +87,20 @@
/datum/uplink_item/item/tools/radio_jammer
name = "Subspace Jammer"
- item_cost = 25
+ item_cost = 20
path = /obj/item/device/radio_jammer
desc = "A device which is capable of disrupting subspace communications, preventing the use of headsets, PDAs, and communicators within \
a radius of seven meters. It runs off weapon cells, which can be replaced as needed. One cell will last for approximately ten minutes."
/datum/uplink_item/item/tools/wall_elecrtifier
name = "Wall Electrifier"
- item_cost = 10
+ item_cost = 5
path = /obj/item/weapon/cell/spike
desc = "A modified powercell which will electrify walls and reinforced floors in a 3x3 tile range around it. Always active."
/datum/uplink_item/item/tools/emag
name = "Cryptographic Sequencer"
- item_cost = 30
+ item_cost = 20
path = /obj/item/weapon/card/emag
/datum/uplink_item/item/tools/graviton
@@ -111,7 +111,7 @@
/datum/uplink_item/item/tools/thermal
name = "Thermal Imaging Glasses"
- item_cost = 30
+ item_cost = 25
path = /obj/item/clothing/glasses/thermal/syndi
/datum/uplink_item/item/tools/packagebomb
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index f3f8b5c982..eff6d34848 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -126,7 +126,11 @@
if(H.species.vision_organ)
vision = H.internal_organs_by_name[H.species.vision_organ]
if(!vision)
+ user.visible_message("\The [user] directs [src] at [M]'s face.", \
+ "You direct [src] at [M]'s face. ")
to_chat(user, "You can't find any [H.species.vision_organ ? H.species.vision_organ : "eyes"] on [H]! ")
+ user.setClickCooldown(user.get_attack_speed(src))
+ return
user.visible_message("\The [user] directs [src] to [M]'s eyes.", \
"You direct [src] to [M]'s eyes. ")
diff --git a/code/game/objects/items/trash_vr.dm b/code/game/objects/items/trash_vr.dm
index 7619130ed0..bb18141f4f 100644
--- a/code/game/objects/items/trash_vr.dm
+++ b/code/game/objects/items/trash_vr.dm
@@ -30,3 +30,18 @@
name = "dirty fancy plate"
icon = 'icons/obj/trash_vr.dmi'
icon_state = "fancyplate"
+
+/obj/item/trash/ratcheese
+ name = "\improper Flavor Unit package"
+ icon = 'icons/obj/trash_vr.dmi'
+ icon_state = "altevian_cheese_block-trash"
+
+/obj/item/trash/ratveg
+ name = "\improper Premium Ration packet"
+ icon = 'icons/obj/trash_vr.dmi'
+ icon_state = "altevian_veggies-trash"
+
+/obj/item/trash/ratjuice
+ name = "\improper Space-Safe Meal package"
+ icon = 'icons/obj/trash_vr.dmi'
+ icon_state = "altevian_juice-trash"
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/inducer_vr.dm b/code/game/objects/items/weapons/inducer_vr.dm
index 998447b5fa..0c39599071 100644
--- a/code/game/objects/items/weapons/inducer_vr.dm
+++ b/code/game/objects/items/weapons/inducer_vr.dm
@@ -9,7 +9,7 @@
slot_r_hand_str = 'icons/mob/items/righthand_vr.dmi',
)
force = 7
-
+
var/powertransfer = 1000 //Transfer per time when charging something
var/cell_type = /obj/item/weapon/cell/high //Type of cell to spawn in it
var/charge_guns = FALSE //Can it charge guns?
@@ -117,9 +117,10 @@
return TRUE
else
recharging = TRUE
-
+
if(istype(A, /obj/item/weapon/gun/energy) && !charge_guns)
- to_chat(user, "Error unable to interface with device. ")
+ to_chat(user, "Error: Device is unable to interface with weapons. ")
+ recharging = FALSE
return FALSE
//The cell we hopefully eventually find
@@ -138,7 +139,7 @@
//Can set different coefficients per item if you want
var/coefficient = 1
-
+
//Last ditch effort
var/obj/O //For updating icons, just in case they have a battery meter icon
if(!C && isobj(A))
@@ -147,17 +148,17 @@
if(C)
var/done_any = FALSE
-
+
if(C.charge >= C.maxcharge)
to_chat(user, "[A] is fully charged ([round(C.charge)] / [C.maxcharge])! ")
recharging = FALSE
return TRUE
user.visible_message("[user] starts recharging [A] with [src]. ", "You start recharging [A] with [src]. ")
-
+
var/datum/beam/charge_beam = user.Beam(A, icon_state = "rped_upgrade", time = 20 SECONDS)
var/filter = filter(type = "outline", size = 1, color = "#22AAFF")
A.filters += filter
-
+
spark_system = new /datum/effect/effect/system/spark_spread
spark_system.set_up(5, 0, get_turf(A))
spark_system.attach(A)
@@ -171,20 +172,20 @@
O.update_icon()
else
break
-
+
QDEL_NULL(charge_beam)
QDEL_NULL(spark_system)
if(A)
A.filters -= filter
-
+
if(done_any) // Only show a message if we succeeded at least once
user.visible_message("[user] recharged [A]! ", "You recharged [A]! ")
-
+
recharging = FALSE
return TRUE
else //Couldn't find a cell
to_chat(user, "Error unable to interface with device. ")
-
+
recharging = FALSE
/obj/item/weapon/inducer/attack_self(mob/user)
@@ -206,7 +207,7 @@
/obj/item/weapon/inducer/update_icon()
..()
- cut_overlays()
+ cut_overlays()
if(opened)
if(!cell)
add_overlay("inducer-nobat")
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index 28d5f6bcde..b451e2ccbd 100644
--- a/code/game/objects/items/weapons/storage/bags.dm
+++ b/code/game/objects/items/weapons/storage/bags.dm
@@ -383,7 +383,7 @@
max_storage_space = ITEMSIZE_COST_NORMAL * 25
max_w_class = ITEMSIZE_NORMAL
w_class = ITEMSIZE_SMALL
- can_hold = list(/obj/item/weapon/coin,/obj/item/weapon/spacecash)
+ can_hold = list(/obj/item/weapon/coin,/obj/item/weapon/spacecash,/obj/item/weapon/spacecasinocash)
// -----------------------------
// Chemistry Bag
diff --git a/code/game/objects/items/weapons/storage/boxes_vr.dm b/code/game/objects/items/weapons/storage/boxes_vr.dm
index e234f22d4a..5b93d14456 100644
--- a/code/game/objects/items/weapons/storage/boxes_vr.dm
+++ b/code/game/objects/items/weapons/storage/boxes_vr.dm
@@ -35,4 +35,7 @@
starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/canned/brainzsnax = 6)
/obj/item/weapon/storage/box/brainzsnax/red
- starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/canned/brainzsnax/red = 6)
\ No newline at end of file
+ starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/canned/brainzsnax/red = 6)
+
+/obj/item/weapon/storage/box/freezer
+ can_hold = list(/obj/item/organ, /obj/item/weapon/reagent_containers/blood, /obj/item/weapon/reagent_containers/glass, /obj/item/weapon/reagent_containers/food)
\ No newline at end of file
diff --git a/code/game/objects/random/mapping.dm b/code/game/objects/random/mapping.dm
index 09f2d1897d..a7f719ebc9 100644
--- a/code/game/objects/random/mapping.dm
+++ b/code/game/objects/random/mapping.dm
@@ -97,7 +97,8 @@
/obj/machinery/vending/weeb,
/obj/machinery/vending/sol,
/obj/machinery/vending/snix,
- /obj/machinery/vending/snlvend)
+ /obj/machinery/vending/snlvend,
+ /obj/machinery/vending/altevian)
/obj/random/vendordrink //Random drink vendors for station use
name = "random drink vending machine"
diff --git a/code/game/objects/random/misc.dm b/code/game/objects/random/misc.dm
index 1357015304..ed6ca794cc 100644
--- a/code/game/objects/random/misc.dm
+++ b/code/game/objects/random/misc.dm
@@ -323,7 +323,7 @@
name = "random drink"
desc = "This is a random drink."
icon = 'icons/obj/drinks.dmi'
- icon_state = "whiskeybottle"
+ icon_state = "whiskeybottle1"
/obj/random/drinkbottle/item_to_spawn()
return pick(/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey,
diff --git a/code/modules/casino/casino.dm b/code/modules/casino/casino.dm
index 364ab817f7..d866a4d119 100644
--- a/code/modules/casino/casino.dm
+++ b/code/modules/casino/casino.dm
@@ -534,27 +534,27 @@
return
//
-//Slave Terminal
+//Sentient Prize Terminal
//
-/obj/machinery/casinoslave_handler
+/obj/machinery/casinosentientprize_handler
name = "Sentient Prize Automated Sales Machinery"
desc = "The Sentient Prize Automated Sales Machinery, also known as SPASM! Here one can see who is on sale as sentinet prizes, as well as selling self and also buying prizes."
icon = 'icons/obj/casino.dmi'
icon_state = "casinoslave_hub_off"
- density = 1
+ density = 0
anchored = 1
- req_access = list(300)
+ req_access = list(101)
- var/casinoslave_sale = "disabled"
- var/casinoslave_price = 100
+ var/casinosentientprize_sale = "disabled"
+ var/casinosentientprize_price = 500
var/collar_list = list()
- var/slaves_ckeys_list = list() //Same trick as lottery, to keep life simple
- var/obj/item/clothing/accessory/collar/casinoslave/selected_collar = null
+ var/sentientprizes_ckeys_list = list() //Same trick as lottery, to keep life simple
+ var/obj/item/clothing/accessory/collar/casinosentientprize/selected_collar = null
-/obj/machinery/casinoslave_handler/attack_hand(mob/living/user as mob)
+/obj/machinery/casinosentientprize_handler/attack_hand(mob/living/user as mob)
if(usr.incapacitated())
return
- if(casinoslave_sale == "disabled")
+ if(casinosentientprize_sale == "disabled")
to_chat(user,"The SPASM is disabled. ")
return
@@ -565,14 +565,14 @@
if("Show selected Prize")
if(QDELETED(selected_collar))
collar_list -= selected_collar
- slaves_ckeys_list -= selected_collar.slaveckey
+ sentientprizes_ckeys_list -= selected_collar.sentientprizeckey
to_chat(user, "No collar is currently selected or the currently selected one has been destroyed or disabled. ")
selected_collar = null
return
to_chat(user, "Sentient Prize information ")
- to_chat(user, "Name: [selected_collar.slavename] ")
- to_chat(user, "Description: [selected_collar.slaveflavor] ")
- to_chat(user, "OOC: [selected_collar.slaveooc] ")
+ to_chat(user, "Name: [selected_collar.sentientprizename] ")
+ to_chat(user, "Description: [selected_collar.sentientprizeflavor] ")
+ to_chat(user, "OOC: [selected_collar.sentientprizeooc] ")
if(selected_collar.ownername != null)
to_chat(user, "This prize is already owned by [selected_collar.ownername] ")
@@ -580,47 +580,50 @@
selected_collar = tgui_input_list(user, "Select a prize", "Chose a collar", collar_list)
if(QDELETED(selected_collar))
collar_list -= selected_collar
- slaves_ckeys_list -= selected_collar.slaveckey
+ sentientprizes_ckeys_list -= selected_collar.sentientprizeckey
to_chat(user, "No collars to chose, or selected collar has been destroyed or deactived, selection has been removed from list. ")
selected_collar = null
return
if("Become Prize (Please examine yourself first)") //Its awkward, but no easy way to obtain flavor_text due to server not loading text of mob until its been examined at least once.
var/safety_ckey = user.client.ckey
- if(safety_ckey in slaves_ckeys_list)
+ if(safety_ckey in sentientprizes_ckeys_list)
to_chat(user, "The SPASM beeps in an upset manner, you already have a collar! ")
return
var/confirm = tgui_alert(usr, "Are you sure you want to become a sentient prize?", "Confirm Sentient Prize", list("Yes", "No"))
if(confirm == "Yes")
to_chat(user, "You are now a prize! ")
- if(safety_ckey in slaves_ckeys_list)
+ if(safety_ckey in sentientprizes_ckeys_list)
to_chat(user, "The SPASM beeps in an upset manner, you already have a collar! ")
return
- slaves_ckeys_list += user.ckey
- var/obj/item/clothing/accessory/collar/casinoslave/C = new(src.loc)
- C.slavename = "[user.name]"
- C.slaveckey = "[user.ckey]"
- C.slaveflavor = user.flavor_text
- C.slaveooc = user.ooc_notes
+ sentientprizes_ckeys_list += user.ckey
+ var/obj/item/clothing/accessory/collar/casinosentientprize/C = new(src.loc)
+ C.sentientprizename = "[user.name]"
+ C.sentientprizeckey = "[user.ckey]"
+ C.sentientprizeflavor = user.flavor_text
+ C.sentientprizeooc = user.ooc_notes
C.name = "Sentient Prize Collar: Available! [user.name] purchaseable at the SPASM!"
C.desc = "SPASM collar. The tags shows in flashy colorful text the wearer is [user.name] and is currently available to buy at the Sentient Prize Automated Sales Machinery!"
C.icon_state = "casinoslave_available"
C.update_icon()
collar_list += C
- spawn_casinochips(casinoslave_price, src.loc)
+ spawn_casinochips(casinosentientprize_price, src.loc)
-/obj/machinery/casinoslave_handler/attackby(obj/item/weapon/W as obj, mob/user as mob)
+/obj/machinery/casinosentientprize_handler/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(usr.incapacitated())
return
if(istype(W, /obj/item/weapon/spacecasinocash))
- if(casinoslave_sale == "disabled")
+ if(casinosentientprize_sale == "disabled")
to_chat(user, "Sentient Prize sales are currently disabled. ")
return
+ if(!selected_collar)
+ to_chat(user, "Select a prize first. ")
+ return
if(!selected_collar.ownername)
var/obj/item/weapon/spacecasinocash/C = W
- if(user.client.ckey == selected_collar.slaveckey)
+ if(user.client.ckey == selected_collar.sentientprizeckey)
insert_chip(C, user, "selfbuy")
return
else
@@ -630,12 +633,12 @@
to_chat(user, "This Sentient Prize is already owned! If you are the owner you can release the prize by swiping the collar on the SPASM! ")
return
- if(istype(W, /obj/item/clothing/accessory/collar/casinoslave))
- var/obj/item/clothing/accessory/collar/casinoslave/C = W
- if(user.name != C.slavename && user.name != C.ownername)
+ if(istype(W, /obj/item/clothing/accessory/collar/casinosentientprize))
+ var/obj/item/clothing/accessory/collar/casinosentientprize/C = W
+ if(user.name != C.sentientprizename && user.name != C.ownername)
to_chat(user, "This Sentient Prize collar isn't yours, please give it to the one it tagged for, belongs to, or a casino staff member! ")
return
- if(user.name == C.slavename)
+ if(user.name == C.sentientprizename)
if(!C.ownername)
to_chat(user,"If collar isn't disabled and entry removed, please select your entry and insert chips. Or contact staff if you need assistance. ")
return
@@ -643,15 +646,15 @@
to_chat(user,"If collar isn't disabled and entry removed, please ask your owner to free you with collar swipe on the SPASM, or contact staff if you need assistance. ")
return
if(user.name == C.ownername)
- var/confirm = tgui_alert(usr, "Are you sure you want to wipe [C.slavename] entry?", "Confirm Sentient Prize Release", list("Yes", "No"))
+ var/confirm = tgui_alert(usr, "Are you sure you want to wipe [C.sentientprizename] entry?", "Confirm Sentient Prize Release", list("Yes", "No"))
if(confirm == "Yes")
- to_chat(user, "[C.slavename] collar has been deleted from registry! ")
+ to_chat(user, "[C.sentientprizename] collar has been deleted from registry! ")
C.icon_state = "casinoslave"
C.update_icon()
- C.name = "a disabled Sentient Prize Collar: [C.slavename]"
- C.desc = "A collar worn by sentient prizes registered to a SPASM. The tag says its registered to [C.slavename], but harsh red text informs you its been disabled."
- slaves_ckeys_list -= C.slaveckey
- C.slaveckey = null
+ C.name = "disabled Sentient Prize Collar: [C.sentientprizename]"
+ C.desc = "A collar worn by sentient prizes registered to a SPASM. The tag says its registered to [C.sentientprizename], but harsh red text informs you its been disabled."
+ sentientprizes_ckeys_list -= C.sentientprizeckey
+ C.sentientprizeckey = null
collar_list -= C
if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
@@ -666,13 +669,13 @@
return
if("Toggle Sentient Prize Sales")
- if(casinoslave_sale == "disabled")
- casinoslave_sale = "enabled"
+ if(casinosentientprize_sale == "disabled")
+ casinosentientprize_sale = "enabled"
icon_state = "casinoslave_hub_on"
update_icon()
to_chat(user,"Prize sale has been enabled. ")
else
- casinoslave_sale = "disabled"
+ casinosentientprize_sale = "disabled"
icon_state = "casinoslave_hub_off"
update_icon()
to_chat(user,"Prize sale has been disabled. ")
@@ -683,21 +686,21 @@
return
if(QDELETED(selected_collar))
collar_list -= selected_collar
- slaves_ckeys_list -= selected_collar.slaveckey
+ sentientprizes_ckeys_list -= selected_collar.sentientprizeckey
to_chat(user, "Collar has been destroyed! ")
selected_collar = null
return
- var/safety_ckey = selected_collar.slaveckey
- var/confirm = tgui_alert(usr, "Are you sure you want to wipe [selected_collar.slavename] entry?", "Confirm Sentient Prize", list("Yes", "No"))
+ var/safety_ckey = selected_collar.sentientprizeckey
+ var/confirm = tgui_alert(usr, "Are you sure you want to wipe [selected_collar.sentientprizename] entry?", "Confirm Sentient Prize", list("Yes", "No"))
if(confirm == "Yes")
- if(safety_ckey == selected_collar.slaveckey)
- to_chat(user, "[selected_collar.slavename] collar has been deleted from registry! ")
+ if(safety_ckey == selected_collar.sentientprizeckey)
+ to_chat(user, "[selected_collar.sentientprizename] collar has been deleted from registry! ")
selected_collar.icon_state = "casinoslave"
selected_collar.update_icon()
- selected_collar.name = "a disabled Sentient Prize Collar: [selected_collar.slavename]"
- selected_collar.desc = "A collar worn by sentient prizes registered to a SPASM. The tag says its registered to [selected_collar.slavename], but harsh red text informs you its been disabled."
- slaves_ckeys_list -= selected_collar.slaveckey
- selected_collar.slaveckey = null
+ selected_collar.name = "disabled Sentient Prize Collar: [selected_collar.sentientprizename]"
+ selected_collar.desc = "A collar worn by sentient prizes registered to a SPASM. The tag says its registered to [selected_collar.sentientprizename], but harsh red text informs you its been disabled."
+ sentientprizes_ckeys_list -= selected_collar.sentientprizeckey
+ selected_collar.sentientprizeckey = null
collar_list -= selected_collar
selected_collar = null
else
@@ -707,12 +710,12 @@
if("Change Prize Value")
setprice(user)
-/obj/machinery/casinoslave_handler/proc/insert_chip(var/obj/item/weapon/spacecasinocash/cashmoney, mob/user, var/buystate)
- if(cashmoney.worth < casinoslave_price)
+/obj/machinery/casinosentientprize_handler/proc/insert_chip(var/obj/item/weapon/spacecasinocash/cashmoney, mob/user, var/buystate)
+ if(cashmoney.worth < casinosentientprize_price)
to_chat(user,"You dont have enough chips to pay for the sentient prize! ")
return
- cashmoney.worth -= casinoslave_price
+ cashmoney.worth -= casinosentientprize_price
cashmoney.update_icon()
if(cashmoney.worth <= 0)
@@ -721,31 +724,31 @@
cashmoney.update_icon()
if(buystate == "selfbuy")
- to_chat(user,"You put [casinoslave_price] credits worth of chips into the SPASM and nullify your collar! ")
+ to_chat(user,"You put [casinosentientprize_price] credits worth of chips into the SPASM and nullify your collar! ")
selected_collar.icon_state = "casinoslave"
selected_collar.update_icon()
- selected_collar.name = "a disabled Sentient Prize Collar: [selected_collar.slavename]"
- selected_collar.desc = "A collar worn by sentient prizes registered to a SPASM. The tag says its registered to [selected_collar.slavename], but harsh red text informs you its been disabled."
- slaves_ckeys_list -= selected_collar.slaveckey
- selected_collar.slaveckey = null
+ selected_collar.name = "disabled Sentient Prize Collar: [selected_collar.sentientprizename]"
+ selected_collar.desc = "A collar worn by sentient prizes registered to a SPASM. The tag says its registered to [selected_collar.sentientprizename], but harsh red text informs you its been disabled."
+ sentientprizes_ckeys_list -= selected_collar.sentientprizeckey
+ selected_collar.sentientprizeckey = null
collar_list -= selected_collar
selected_collar = null
if(buystate == "buy")
- to_chat(user,"You put [casinoslave_price] credits worth of chips into the SPASM and it pings to inform you bought [selected_collar.slavename]! ")
+ to_chat(user,"You put [casinosentientprize_price] credits worth of chips into the SPASM and it pings to inform you bought [selected_collar.sentientprizename]! ")
selected_collar.icon_state = "casinoslave_owned"
selected_collar.update_icon()
selected_collar.ownername = user.name
- selected_collar.name = "Sentient Prize Collar: [selected_collar.slavename] owned by [selected_collar.ownername]!"
- selected_collar.desc = "A collar worn by sentient prizes registered to a SPASM. The tag says its registered to [selected_collar.slavename] and they are owned by [selected_collar.ownername]."
+ selected_collar.name = "Sentient Prize Collar: [selected_collar.sentientprizename] owned by [selected_collar.ownername]!"
+ selected_collar.desc = "A collar worn by sentient prizes registered to a SPASM. The tag says its registered to [selected_collar.sentientprizename] and they are owned by [selected_collar.ownername]."
selected_collar = null
-/obj/machinery/casinoslave_handler/proc/setprice(mob/living/user as mob)
+/obj/machinery/casinosentientprize_handler/proc/setprice(mob/living/user as mob)
if(usr.incapacitated())
return
if(ishuman(usr) || istype(usr, /mob/living/silicon/robot))
- casinoslave_price = tgui_input_number(usr, "Select the desired price (1-1000)", "Set Price", null, null, 1000, 1)
- if(casinoslave_price>1000 || casinoslave_price<1)
+ casinosentientprize_price = tgui_input_number(usr, "Select the desired price (1-1000)", "Set Price", null, null, 1000, 1)
+ if(casinosentientprize_price>1000 || casinosentientprize_price<1)
to_chat(user,"Invalid price. ")
return
- to_chat(user,"You set the price to [casinoslave_price] ")
+ to_chat(user,"You set the price to [casinosentientprize_price] ")
diff --git a/code/modules/casino/casino_book.dm b/code/modules/casino/casino_book.dm
index 1b3ee5163e..f02a53abd0 100644
--- a/code/modules/casino/casino_book.dm
+++ b/code/modules/casino/casino_book.dm
@@ -120,141 +120,12 @@
EXCHANGE RATE
FROM = TO
- 5 Thalers = 1 casino chip
- 1 casino chip = 5 Thalers
+ 1 Thaler = 1 casino chip
+ 1 casino chip = 1 Thaler
- The special sentient prize is 100 chips! More about it in section below!
+ The special sentient prize is 200 chips! More about it in section below!
- Melee weapons
-
- scepter 500
- chain of command 250
-
- Guns and 'guns' ((disclaimer, giving out guns will mean you get a weapons license as well with the shifts you have it, abusing these weapons will quickly get them removed!))
-
- sizegun 100
- advanced anti particle rifle 500
- temperature gun 250
- alien pistol 1000
- floral somatoray 250
- net gun 500
-
- Gear
-
- experimental welder 500
- alien belt 750
- alien enhancement vest 750
- The monocoole 1000
- chameleon black tie 250
- cryostasis beaker 200
- bluespace beaker 200
- chem sprayer 250
-
- Masks and hats - EVERYTHING IS 50 except chameleon!
-
- assistant hat
- Shark mask
- Pig mask
- Luchador mask
- Horse mask
- Goblin mask
- Fake moustache
- Dolphin mask
- Demon mask
- Chameleon gas mask 250
-
- Costumes - All costumes are 100 except the hoodies which are 50!
-
- Black bunny girl outfit (black suit and rabbit ears)
- White bunny girl outfit (white suit and rabbit ears)
- Corgi hoodie
- Sexy clown
- nyan girl
- Wizard
- Chicken
- Carp hoodie
- Sexy mime
- Pirate
- Commie
- Plague doctor
- Imperium monk
- Cute witch
- Gladiator
-
- Toys and misc - ALL THESE ARE 50
-
- Toy sword
- Water flower
- Stick horse
- Replica katana
- Magic conch
- Magic 8-ball
- Foam sword
- Foam crossbow (with 5 bolts)
- Bosun's whistle
- Golden cup
- Havana cigar case
- Casino wallet (to keep after shift)
- Casino card deck (to keep after shift)
-
- Booze - ALL BOOZE IS 50
-
- Redeemer brew
- Warlock velvet
- Wrapp artiste patron
- Flask of holy water
- College girl goldschlager
- Gilthari luxury champagne
- Bottle of nothing
- Special blend whiskey
- Akvavit
-
- Pets
-
- Armadillo 150
- Cat 150
- Goat 150
- Fox 150
- Lizard 150
- Penguin 150
- Goose 200
- Chicken 200
- Cow 200
- Corgi 200
- Snake 200
- Yithian 200
- Tindalos 200
- Fennec 300
- Red Panda 300
- Horse 300
- Otie 500
- Chonker Otie 500
- Zorgoia 500
-
- Mechs
-
- Mining Ripley 1000
- Firefighter Ripley 750
- Serenity 1500
- Odysseus 1250
- Phazon Scuttlebug 2000
- Phazon Janus 3500
- Scarab 500
- Shuttlepod 250
- ´Shuttlecraft 500
-
- Implants
-
- Implanter 100 (A basic empty implanter, you are going to need this to implant yourself with cyberntic augments)
- Implant: Tazer 1000 (A cybernetic implant that allows one to spawn a personal defense taser)
- Implant: Medkit 500 (A cybernetic implant that allows you to spawn all the tools needed for surgery)
- Implant: Shades 750 (A cybernetic implant that will spawn protective thermoshades upon your eyes, AR included!)
- Implant: Sprinter 1500 (A cybernetic implant that will give you that extra kick of energy to run faster!)
- Implant: Toolkit 500 (A cybernetic implant that allows you to spawn all the tools needed for engineering)
- Implant: Language 1000 (A cybernetic implant that allows you to understand almost all languages)
- Implant: Analyzer 500 (A cybernetic implant that allows one to spawn a Portable Resonant Analyzer for any science needs)
- Implant: Size Control 500 (A cybernetic implant that allows one to change the size of others via specific voice commands)
-
+ This section was outdated, someone better write it.
Thats it for prizes!
diff --git a/code/modules/casino/casino_prize_vendor.dm b/code/modules/casino/casino_prize_vendor.dm
index 17adc4bf5f..8d53b8952f 100644
--- a/code/modules/casino/casino_prize_vendor.dm
+++ b/code/modules/casino/casino_prize_vendor.dm
@@ -48,11 +48,11 @@
var/datum/data/casino_prize/currently_vending = null // What we're requesting payment for right now
var/list/log = list() //Log only SS13 staff is allowed to look at, CKEYS are listed here for record keeping of prizes and players for events!
- var/category_weapons = 1 //For listing categories, if false then prizes of this categories cant be obtained nor bought for post-shift enjoyment
- var/category_gear = 1 //If 1 prizes will be only logged
- var/category_clothing = 1 //If 2 prizes will both be logged and spawned
- var/category_misc = 1
- var/category_drinks = 1
+ var/category_weapons = 2 //For listing categories, if false then prizes of this categories cant be obtained nor bought for post-shift enjoyment
+ var/category_gear = 2 //If 1 prizes will be only logged
+ var/category_clothing = 2 //If 2 prizes will both be logged and spawned
+ var/category_misc = 2
+ var/category_drinks = 2
var/category_implants = 1
var/category_event = 1 //For special events, holidays, etc
@@ -62,138 +62,120 @@
item_list = list()
item_list["Weapons"] = list(
- CASINO_PRIZE("Scepter", /obj/item/weapon/scepter, 1, 500, "weapons"),
- CASINO_PRIZE("Chain of Command", /obj/item/weapon/melee/chainofcommand, 1, 250, "weapons"),
- CASINO_PRIZE("Size Gun", /obj/item/weapon/gun/energy/sizegun, 1, 100, "weapons"),
- CASINO_PRIZE("Advanced Particle Rifle", /obj/item/weapon/gun/energy/particle/advanced, 1, 500, "weapons"),
- CASINO_PRIZE("Temperature Gun", /obj/item/weapon/gun/energy/temperature, 1, 250, "weapons"),
- CASINO_PRIZE("Alien Pistol", /obj/item/weapon/gun/energy/alien, 1, 1000, "weapons"),
- CASINO_PRIZE("Floral Gun", /obj/item/weapon/gun/energy/floragun, 1, 250, "weapons"),
- CASINO_PRIZE("Net Gun", /obj/item/weapon/gun/energy/netgun, 1, 500, "weapons"),
+ CASINO_PRIZE("Scepter", /obj/item/weapon/scepter, 1, 2500, "weapons"),
+ CASINO_PRIZE("Rapier", /obj/item/weapon/melee/rapier, 1, 3000, "weapons"),
+ CASINO_PRIZE("Chain of Command", /obj/item/weapon/melee/chainofcommand, 1, 1250, "weapons"),
+ CASINO_PRIZE("Golden Bat", /obj/item/weapon/material/twohanded/baseballbat/gold, 1, 1000, "weapons"),
+ CASINO_PRIZE("Size Gun", /obj/item/weapon/gun/energy/sizegun, 1, 1500, "weapons"),
+ CASINO_PRIZE("Gradual Size Gun", /obj/item/device/slow_sizegun, 1, 1500, "weapons"),
+ CASINO_PRIZE("Metamorphosis Ray", /obj/item/weapon/gun/energy/mouseray/metamorphosis, 1, 6000, "weapons"),
+ CASINO_PRIZE("Net Gun", /obj/item/weapon/gun/energy/netgun, 1, 3000, "weapons"),
)
item_list["Gear"] = list(
CASINO_PRIZE("Experimental Welder", /obj/item/weapon/weldingtool/experimental, 1, 500, "gear"),
- CASINO_PRIZE("Chameleon Tie", /obj/item/clothing/accessory/chameleon, 1, 250, "gear"),
- CASINO_PRIZE("Chemsprayer", /obj/item/weapon/reagent_containers/spray/chemsprayer, 1, 250, "gear"),
- CASINO_PRIZE("Bluespace Beaker", /obj/item/weapon/reagent_containers/glass/beaker/bluespace, 1, 200, "gear"),
- CASINO_PRIZE("Cryo Beaker", /obj/item/weapon/reagent_containers/glass/beaker/noreact, 1, 200, "gear"),
+ CASINO_PRIZE("Chemsprayer", /obj/item/weapon/reagent_containers/spray/chemsprayer, 1, 1250, "gear"),
+ CASINO_PRIZE("Bluespace Beaker", /obj/item/weapon/reagent_containers/glass/beaker/bluespace, 1, 1000, "gear"),
+ CASINO_PRIZE("Cryo Beaker", /obj/item/weapon/reagent_containers/glass/beaker/noreact, 1, 1000, "gear"),
+ CASINO_PRIZE("Golden Pickaxe", /obj/item/weapon/pickaxe/gold, 1, 1000, "gear"),
)
item_list["Clothing"] = list(
- CASINO_PRIZE("Shark mask", /obj/item/clothing/mask/shark, 1, 50, "clothing"),
- CASINO_PRIZE("Pig mask", /obj/item/clothing/mask/pig, 1, 50, "clothing"),
- CASINO_PRIZE("Luchador mask", /obj/item/clothing/mask/luchador, 1, 50, "clothing"),
- CASINO_PRIZE("Horse mask", /obj/item/clothing/mask/horsehead, 1, 50, "clothing"),
- CASINO_PRIZE("Goblin mask", /obj/item/clothing/mask/goblin, 1, 50, "clothing"),
- CASINO_PRIZE("Fake moustache", /obj/item/clothing/mask/fakemoustache, 1, 50, "clothing"),
- CASINO_PRIZE("Dolphin mask", /obj/item/clothing/mask/dolphin, 1, 50, "clothing"),
- CASINO_PRIZE("Demon mask", /obj/item/clothing/mask/demon, 1, 50, "clothing"),
- CASINO_PRIZE("Chameleon mask", /obj/item/clothing/under/chameleon, 1, 250, "clothing"),
- CASINO_PRIZE("Ian costume", /obj/item/clothing/suit/storage/hooded/costume/ian, 1, 50, "clothing"),
- CASINO_PRIZE("Carp costume", /obj/item/clothing/suit/storage/hooded/costume/carp, 1, 50, "clothing"),
- CASINO_PRIZE("Plague doctor costume", /obj/item/weapon/storage/box/casino/costume_plaguedoctor, 1, 100, "clothing"),
- CASINO_PRIZE("Wizard costume", /obj/item/weapon/storage/box/casino/costume_wizard, 1, 100, "clothing"),
- CASINO_PRIZE("Pirate costume", /obj/item/weapon/storage/box/casino/costume_pirate, 1, 100, "clothing"),
- CASINO_PRIZE("Commie costume", /obj/item/weapon/storage/box/casino/costume_commie, 1, 100, "clothing"),
- CASINO_PRIZE("Marine costume", /obj/item/weapon/storage/box/casino/costume_marine, 1, 100, "clothing"),
- CASINO_PRIZE("Cowboy costume", /obj/item/weapon/storage/box/casino/costume_cowboy, 1, 100, "clothing"),
+ CASINO_PRIZE("Shark mask", /obj/item/clothing/mask/shark, 1, 250, "clothing"),
+ CASINO_PRIZE("Pig mask", /obj/item/clothing/mask/pig, 1, 250, "clothing"),
+ CASINO_PRIZE("Luchador mask", /obj/item/clothing/mask/luchador, 1, 250, "clothing"),
+ CASINO_PRIZE("Horse mask", /obj/item/clothing/mask/horsehead, 1, 250, "clothing"),
+ CASINO_PRIZE("Goblin mask", /obj/item/clothing/mask/goblin, 1, 250, "clothing"),
+ CASINO_PRIZE("Fake moustache", /obj/item/clothing/mask/fakemoustache, 1, 250, "clothing"),
+ CASINO_PRIZE("Dolphin mask", /obj/item/clothing/mask/dolphin, 1, 250, "clothing"),
+ CASINO_PRIZE("Demon mask", /obj/item/clothing/mask/demon, 1, 250, "clothing"),
+ CASINO_PRIZE("Chameleon mask", /obj/item/clothing/under/chameleon, 1, 1000, "clothing"),
+ CASINO_PRIZE("Chameleon tie", /obj/item/clothing/accessory/chameleon, 1, 750, "clothing"),
+ CASINO_PRIZE("Ian costume", /obj/item/clothing/suit/storage/hooded/costume/ian, 1, 250, "clothing"),
+ CASINO_PRIZE("Carp costume", /obj/item/clothing/suit/storage/hooded/costume/carp, 1, 250, "clothing"),
+ CASINO_PRIZE("Plague doctor costume", /obj/item/weapon/storage/box/casino/costume_plaguedoctor, 1, 500, "clothing"),
+ CASINO_PRIZE("Wizard costume", /obj/item/weapon/storage/box/casino/costume_wizard, 1, 500, "clothing"),
+ CASINO_PRIZE("Pirate costume", /obj/item/weapon/storage/box/casino/costume_pirate, 1, 500, "clothing"),
+ CASINO_PRIZE("Commie costume", /obj/item/weapon/storage/box/casino/costume_commie, 1, 500, "clothing"),
+ CASINO_PRIZE("Marine costume", /obj/item/weapon/storage/box/casino/costume_marine, 1, 500, "clothing"),
+ CASINO_PRIZE("Cowboy costume", /obj/item/weapon/storage/box/casino/costume_cowboy, 1, 500, "clothing"),
+ CASINO_PRIZE("Golden Collar", /obj/item/clothing/accessory/collar/gold, 1, 250, "clothing"),
+ CASINO_PRIZE("Decorative Casino Sentient Prize Collar", /obj/item/clothing/accessory/collar/casinosentientprize_fake, 1, 100, "clothing"),
)
item_list["Donk Soft"] = list(
- CASINO_PRIZE("Donk-Soft shotgun", /obj/item/weapon/gun/projectile/shotgun/pump/toy, 1, 250, "misc"),
- CASINO_PRIZE("Donk-Soft mosin-nagant", /obj/item/weapon/gun/projectile/shotgun/pump/toy/moistnugget, 1, 250, "misc"),
- CASINO_PRIZE("Donk-Soft pistol", /obj/item/weapon/gun/projectile/pistol/toy, 1, 150, "misc"),
- CASINO_PRIZE("Donk-Soft levergun", /obj/item/weapon/gun/projectile/shotgun/pump/toy/levergun, 1, 250, "misc"),
- CASINO_PRIZE("Donk-Soft commemorative pistol", /obj/item/weapon/gun/projectile/pistol/toy/n99, 1, 150, "misc"),
- CASINO_PRIZE("Donk-Soft revolver", /obj/item/weapon/gun/projectile/revolver/toy, 1, 150, "misc"),
- CASINO_PRIZE("Donk-Soft big-iron", /obj/item/weapon/gun/projectile/revolver/toy/big_iron, 1, 150, "misc"),
- CASINO_PRIZE("Donk-Soft crossbow", /obj/item/weapon/gun/projectile/revolver/toy/crossbow, 1, 100, "misc"),
- CASINO_PRIZE("Donk-Soft sawn off shotgun", /obj/item/weapon/gun/projectile/revolver/toy/sawnoff, 1, 200, "misc"),
- CASINO_PRIZE("Donk-Soft SMG", /obj/item/weapon/gun/projectile/automatic/toy, 1, 300, "misc"),
- CASINO_PRIZE("Foam Darts", /obj/item/ammo_magazine/ammo_box/foam, 1, 50, "misc"),
- CASINO_PRIZE("Riot Darts", /obj/item/ammo_magazine/ammo_box/foam/riot, 1, 100, "misc"),
+ CASINO_PRIZE("Donk-Soft shotgun", /obj/item/weapon/gun/projectile/shotgun/pump/toy, 1, 1000, "misc"),
+ CASINO_PRIZE("Donk-Soft mosin-nagant", /obj/item/weapon/gun/projectile/shotgun/pump/toy/moistnugget, 1, 1000, "misc"),
+ CASINO_PRIZE("Donk-Soft pistol", /obj/item/weapon/gun/projectile/pistol/toy, 1, 800, "misc"),
+ CASINO_PRIZE("Donk-Soft levergun", /obj/item/weapon/gun/projectile/shotgun/pump/toy/levergun, 1, 1000, "misc"),
+ CASINO_PRIZE("Donk-Soft commemorative pistol", /obj/item/weapon/gun/projectile/pistol/toy/n99, 1, 750, "misc"),
+ CASINO_PRIZE("Donk-Soft revolver", /obj/item/weapon/gun/projectile/revolver/toy, 1, 750, "misc"),
+ CASINO_PRIZE("Donk-Soft big-iron", /obj/item/weapon/gun/projectile/revolver/toy/big_iron, 1, 750, "misc"),
+ CASINO_PRIZE("Donk-Soft crossbow", /obj/item/weapon/gun/projectile/revolver/toy/crossbow, 1, 600, "misc"),
+ CASINO_PRIZE("Donk-Soft sawn off shotgun", /obj/item/weapon/gun/projectile/revolver/toy/sawnoff, 1, 800, "misc"),
+ CASINO_PRIZE("Donk-Soft SMG", /obj/item/weapon/gun/projectile/automatic/toy, 1, 1200, "misc"),
+ CASINO_PRIZE("Foam Darts", /obj/item/ammo_magazine/ammo_box/foam, 1, 100, "misc"),
+ CASINO_PRIZE("Riot Darts", /obj/item/ammo_magazine/ammo_box/foam/riot, 1, 200, "misc"),
)
item_list["Miscellaneous"] = list(
- CASINO_PRIZE("Toy sword", /obj/item/toy/sword, 1, 50, "misc"),
- CASINO_PRIZE("Waterflower", /obj/item/weapon/reagent_containers/spray/waterflower, 1, 50, "misc"),
- CASINO_PRIZE("Horse stick", /obj/item/toy/stickhorse, 1, 50, "misc"),
- CASINO_PRIZE("Katana", /obj/item/toy/katana, 1, 50, "misc"),
- CASINO_PRIZE("Conch", /obj/item/toy/eight_ball/conch, 1, 50, "misc"),
- CASINO_PRIZE("Eight ball", /obj/item/toy/eight_ball, 1, 50, "misc"),
- CASINO_PRIZE("Foam sword", /obj/item/weapon/material/sword/foam, 1, 50, "misc"),
- CASINO_PRIZE("Whistle", /obj/item/toy/bosunwhistle, 1, 50, "misc"),
- CASINO_PRIZE("Golden cup", /obj/item/weapon/reagent_containers/food/drinks/golden_cup, 1, 50, "misc"),
- CASINO_PRIZE("Quality cigars", /obj/item/weapon/storage/fancy/cigar/havana, 1, 50, "misc"),
- CASINO_PRIZE("Casino wallet", /obj/item/weapon/storage/wallet/casino, 1, 50, "misc"),
- CASINO_PRIZE("Casino cards", /obj/item/weapon/deck/cards/casino, 1, 50, "misc"),
- CASINO_PRIZE("Casino Sentient Prize Collar", /obj/item/clothing/accessory/collar/casinoslave_fake, 1, 50, "misc"),
- CASINO_PRIZE("Instrument: Accordion", /obj/item/instrument/accordion, 1, 100, "misc"),
- CASINO_PRIZE("Instrument: Banjo", /obj/item/instrument/banjo, 1, 100, "misc"),
- CASINO_PRIZE("Instrument: Musical bikehorn", /obj/item/instrument/bikehorn, 1, 100, "misc"),
- CASINO_PRIZE("Instrument: Electric guitar", /obj/item/instrument/eguitar, 1, 100, "misc"),
- CASINO_PRIZE("Instrument: Glockenspiel", /obj/item/instrument/glockenspiel, 1, 100, "misc"),
- CASINO_PRIZE("Instrument: Guitar", /obj/item/instrument/guitar, 1, 100, "misc"),
- CASINO_PRIZE("Instrument: Harmonica", /obj/item/instrument/harmonica, 1, 100, "misc"),
- CASINO_PRIZE("Instrument: Synthethic Piano", /obj/item/instrument/piano_synth, 1, 100, "misc"),
- CASINO_PRIZE("Instrument: Recorder", /obj/item/instrument/recorder, 1, 100, "misc"),
- CASINO_PRIZE("Instrument: Saxophone", /obj/item/instrument/saxophone, 1, 100, "misc"),
- CASINO_PRIZE("Instrument: Trombone", /obj/item/instrument/trombone, 1, 100, "misc"),
- CASINO_PRIZE("Instrument: Trumpet", /obj/item/instrument/trumpet, 1, 100, "misc"),
- CASINO_PRIZE("Instrument: Violin", /obj/item/instrument/violin, 1, 100, "misc"),
- CASINO_PRIZE("Instrument: Xylophone", /obj/item/instrument/xylophone, 1, 100, "misc"),
- CASINO_PRIZE("Instrument: Golden fiddle", /obj/item/instrument/violin/golden, 1, 250, "misc"),
- CASINO_PRIZE("Instrument: Trumpet (warning: spooky)", /obj/item/instrument/trumpet/spectral, 1, 200, "misc"),
- CASINO_PRIZE("Instrument: Trombone (warning: spooky)", /obj/item/instrument/trombone/spectral, 1, 200, "misc"),
- CASINO_PRIZE("Instrument: Saxophone (warning: spooky)", /obj/item/instrument/saxophone/spectral, 1, 200, "misc"),
- CASINO_PRIZE("Instrument: Musical Moth (you monster)", /obj/item/instrument/musicalmoth, 1, 100, "misc"),
+ CASINO_PRIZE("Winner's Medal", /obj/item/clothing/accessory/medal/gold/casino, 1, 30000, "misc"),
+ CASINO_PRIZE("Golden ID card", /obj/item/weapon/card/id/gold, 1, 1000, "misc"),
+ CASINO_PRIZE("Gold-trimmed pen", /obj/item/weapon/pen/fountain5, 1, 50, "misc"),
+ CASINO_PRIZE("Golden pen", /obj/item/weapon/pen/fountain7, 1, 350, "misc"),
+ CASINO_PRIZE("Toy sword", /obj/item/toy/sword, 1, 200, "misc"),
+ CASINO_PRIZE("Waterflower", /obj/item/weapon/reagent_containers/spray/waterflower, 1, 100, "misc"),
+ CASINO_PRIZE("Horse stick", /obj/item/toy/stickhorse, 1, 100, "misc"),
+ CASINO_PRIZE("Toy katana", /obj/item/toy/katana, 1, 200, "misc"),
+ CASINO_PRIZE("Magic conch", /obj/item/toy/eight_ball/conch, 1, 100, "misc"),
+ CASINO_PRIZE("Magic eight ball", /obj/item/toy/eight_ball, 1, 100, "misc"),
+ CASINO_PRIZE("Foam sword", /obj/item/weapon/material/sword/foam, 1, 200, "misc"),
+ CASINO_PRIZE("Whistle", /obj/item/toy/bosunwhistle, 1, 100, "misc"),
+ CASINO_PRIZE("Golden cup", /obj/item/weapon/reagent_containers/food/drinks/golden_cup, 1, 250, "misc"),
+ CASINO_PRIZE("Quality cigars", /obj/item/weapon/storage/fancy/cigar/havana, 1, 100, "misc"),
+ CASINO_PRIZE("Golden zippo lighter", /obj/item/weapon/flame/lighter/zippo/gold, 1, 100, "misc"),
+ CASINO_PRIZE("Candelabra", /obj/item/weapon/flame/candle/candelabra/everburn, 1, 400, "misc"),
+ CASINO_PRIZE("Casino wallet", /obj/item/weapon/storage/wallet/casino, 1, 200, "misc"),
+ CASINO_PRIZE("Casino cards", /obj/item/weapon/deck/cards/casino, 1, 200, "misc"),
+ CASINO_PRIZE("Instrument: Accordion", /obj/item/instrument/accordion, 1, 500, "misc"),
+ CASINO_PRIZE("Instrument: Banjo", /obj/item/instrument/banjo, 1, 500, "misc"),
+ CASINO_PRIZE("Instrument: Musical bikehorn", /obj/item/instrument/bikehorn, 1, 500, "misc"),
+ CASINO_PRIZE("Instrument: Electric guitar", /obj/item/instrument/eguitar, 1, 500, "misc"),
+ CASINO_PRIZE("Instrument: Glockenspiel", /obj/item/instrument/glockenspiel, 1, 500, "misc"),
+ CASINO_PRIZE("Instrument: Guitar", /obj/item/instrument/guitar, 1, 500, "misc"),
+ CASINO_PRIZE("Instrument: Harmonica", /obj/item/instrument/harmonica, 1, 500, "misc"),
+ CASINO_PRIZE("Instrument: Synthethic Piano", /obj/item/instrument/piano_synth, 1, 500, "misc"),
+ CASINO_PRIZE("Instrument: Recorder", /obj/item/instrument/recorder, 1, 500, "misc"),
+ CASINO_PRIZE("Instrument: Saxophone", /obj/item/instrument/saxophone, 1, 500, "misc"),
+ CASINO_PRIZE("Instrument: Trombone", /obj/item/instrument/trombone, 1, 500, "misc"),
+ CASINO_PRIZE("Instrument: Trumpet", /obj/item/instrument/trumpet, 1, 500, "misc"),
+ CASINO_PRIZE("Instrument: Violin", /obj/item/instrument/violin, 1, 500, "misc"),
+ CASINO_PRIZE("Instrument: Xylophone", /obj/item/instrument/xylophone, 1, 500, "misc"),
+ CASINO_PRIZE("Instrument: Golden fiddle", /obj/item/instrument/violin/golden, 1, 1500, "misc"),
+ CASINO_PRIZE("Instrument: Trumpet (warning: spooky)", /obj/item/instrument/trumpet/spectral, 1, 1000, "misc"),
+ CASINO_PRIZE("Instrument: Trombone (warning: spooky)", /obj/item/instrument/trombone/spectral, 1, 1000, "misc"),
+ CASINO_PRIZE("Instrument: Saxophone (warning: spooky)", /obj/item/instrument/saxophone/spectral, 1, 1000, "misc"),
+ CASINO_PRIZE("Instrument: Musical Moth (you monster)", /obj/item/instrument/musicalmoth, 1, 500, "misc"),
)
item_list["Drinks"] = list(
- CASINO_PRIZE("Redeemer's brew", /obj/item/weapon/reagent_containers/food/drinks/bottle/redeemersbrew, 1, 50, "drinks"),
- CASINO_PRIZE("Poison wine", /obj/item/weapon/reagent_containers/food/drinks/bottle/pwine, 1, 50, "drinks"),
- CASINO_PRIZE("Patron", /obj/item/weapon/reagent_containers/food/drinks/bottle/patron, 1, 50, "drinks"),
- CASINO_PRIZE("Holy water", /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, 1, 50, "drinks"),
- CASINO_PRIZE("Goldschlager", /obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager, 1, 50, "drinks"),
- CASINO_PRIZE("Champagne", /obj/item/weapon/reagent_containers/food/drinks/bottle/champagne, 1, 50, "drinks"),
- CASINO_PRIZE("Bottle of Nothing", /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing, 1, 50, "drinks"),
- CASINO_PRIZE("Whiskey bliss", /obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey, 1, 50, "drinks"),
+ CASINO_PRIZE("Redeemer's brew", /obj/item/weapon/reagent_containers/food/drinks/bottle/redeemersbrew, 1, 150, "drinks"),
+ CASINO_PRIZE("Poison wine", /obj/item/weapon/reagent_containers/food/drinks/bottle/pwine, 1, 150, "drinks"),
+ CASINO_PRIZE("Patron", /obj/item/weapon/reagent_containers/food/drinks/bottle/patron, 1, 150, "drinks"),
+ CASINO_PRIZE("Holy water", /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, 1, 150, "drinks"),
+ CASINO_PRIZE("Goldschlager", /obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager, 1, 150, "drinks"),
+ CASINO_PRIZE("Champagne", /obj/item/weapon/reagent_containers/food/drinks/bottle/champagne, 1, 150, "drinks"),
+ CASINO_PRIZE("Bottle of Nothing", /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing, 1, 150, "drinks"),
+ CASINO_PRIZE("Whiskey bliss", /obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey, 1, 150, "drinks"),
)
item_list["Pets"] = list(
- CASINO_PRIZE("Cat", /obj/item/weapon/grenade/spawnergrenade/casino, 1, 150, "pets"),
- CASINO_PRIZE("Chicken", /obj/item/weapon/grenade/spawnergrenade/casino/chicken, 1, 200, "pets"),
- CASINO_PRIZE("Cow", /obj/item/weapon/grenade/spawnergrenade/casino/cow, 1, 200, "pets"),
- CASINO_PRIZE("Corgi", /obj/item/weapon/grenade/spawnergrenade/casino/corgi, 1, 200, "pets"),
- CASINO_PRIZE("Fox", /obj/item/weapon/grenade/spawnergrenade/casino/fox, 1, 150, "pets"),
- CASINO_PRIZE("Red panda", /obj/item/weapon/grenade/spawnergrenade/casino/redpanda, 1, 300, "pets"),
- CASINO_PRIZE("Otie", /obj/item/weapon/grenade/spawnergrenade/casino/otie, 1, 500, "pets"),
- CASINO_PRIZE("Snake", /obj/item/weapon/grenade/spawnergrenade/casino/snake, 1, 200, "pets"),
- CASINO_PRIZE("Penguin", /obj/item/weapon/grenade/spawnergrenade/casino/penguin, 1, 150, "pets"),
- CASINO_PRIZE("Fennec", /obj/item/weapon/grenade/spawnergrenade/casino/fennec, 1, 300, "pets"),
- )
- item_list["Mechs and Rigs"] = list(
- CASINO_PRIZE("Mech:Mining Ripley", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/mining, 1, 1000, "mechs"),
- CASINO_PRIZE("Mech:Firefighter Ripley", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/firefighter, 1, 750, "mechs"),
- CASINO_PRIZE("Mech:Odysseus", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/Odysseus, 1, 1250, "mechs"),
- CASINO_PRIZE("Mech:Shuttlepod", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/shuttlepod, 1, 250, "mechs"),
- CASINO_PRIZE("Rig: Solgov engineering hardsuit control module", /obj/item/weapon/rig/bayeng, 1, 500, "mechs"),
- CASINO_PRIZE("Rig: Solgov medical hardsuit control module", /obj/item/weapon/rig/baymed, 1, 500, "mechs"),
- CASINO_PRIZE("Rig: Advanced voidsuit control module", /obj/item/weapon/rig/ce, 1, 500, "mechs"),
- CASINO_PRIZE("Rig: Combat hardsuit control module", /obj/item/weapon/rig/combat, 1, 750, "mechs"),
- CASINO_PRIZE("Rig: ERT-J suit control module (Elite Janitor NT approved)", /obj/item/weapon/rig/ert/janitor, 1, 250, "mechs"),
- CASINO_PRIZE("Rig: Augmented tie (Elite Paper-Pusher NT approved)", /obj/item/weapon/rig/internalaffairs, 1, 250, "mechs"),
- CASINO_PRIZE("Rig: Industrial suit control module", /obj/item/weapon/rig/industrial, 1, 300, "mechs"),
- CASINO_PRIZE("Rig: Rescue suit control module", /obj/item/weapon/rig/medical, 1, 300, "mechs"),
- )
- item_list["Implants"] = list(
- CASINO_PRIZE("Implanter (Remember to get one unless you want to borrow from station!)", /obj/item/weapon/implanter, 1, 100, "implants"),
- CASINO_PRIZE("Implant: Tazer", /obj/item/weapon/implantcase/taser, 1, 1000, "implants"),
- CASINO_PRIZE("Implant: Medkit", /obj/item/weapon/implantcase/medkit, 1, 500, "implants"),
- CASINO_PRIZE("Implant: Shades", /obj/item/weapon/implantcase/shades, 1, 750, "implants"),
- CASINO_PRIZE("Implant: Sprinter", /obj/item/weapon/implantcase/sprinter, 1, 1500, "implants"),
- CASINO_PRIZE("Implant: Toolkit", /obj/item/weapon/implantcase/toolkit, 1, 500, "implants"),
- CASINO_PRIZE("Implant: Language", /obj/item/weapon/implantcase/vrlanguage, 1, 1000, "implants"),
- CASINO_PRIZE("Implant: Analyzer", /obj/item/weapon/implantcase/analyzer, 1, 500, "implants"),
- CASINO_PRIZE("Implant: Size control", /obj/item/weapon/implant/sizecontrol , 1, 500, "implants"),
- )
-
- item_list["Event"] = list(
+ CASINO_PRIZE("Cat", /obj/item/weapon/grenade/spawnergrenade/casino, 1, 700, "pets"),
+ CASINO_PRIZE("Chicken", /obj/item/weapon/grenade/spawnergrenade/casino/chicken, 1, 700, "pets"),
+ CASINO_PRIZE("Cow", /obj/item/weapon/grenade/spawnergrenade/casino/cow, 1, 700, "pets"),
+ CASINO_PRIZE("Corgi", /obj/item/weapon/grenade/spawnergrenade/casino/corgi, 1, 900, "pets"),
+ CASINO_PRIZE("Fox", /obj/item/weapon/grenade/spawnergrenade/casino/fox, 1, 700, "pets"),
+ CASINO_PRIZE("Red panda", /obj/item/weapon/grenade/spawnergrenade/casino/redpanda, 1, 1200, "pets"),
+ CASINO_PRIZE("Otie", /obj/item/weapon/grenade/spawnergrenade/casino/otie, 1, 1500, "pets"),
+ CASINO_PRIZE("Snake", /obj/item/weapon/grenade/spawnergrenade/casino/snake, 1, 900, "pets"),
+ CASINO_PRIZE("Penguin", /obj/item/weapon/grenade/spawnergrenade/casino/penguin, 1, 900, "pets"),
+ CASINO_PRIZE("Fennec", /obj/item/weapon/grenade/spawnergrenade/casino/fennec, 1, 1200, "pets"),
+ CASINO_PRIZE("Bird", /obj/item/weapon/grenade/spawnergrenade/casino/goldcrest, 1, 1500, "pets"),
+ CASINO_PRIZE("Capture Crystal", /obj/item/capture_crystal, 1, 3000, "pets"),
)
/obj/machinery/casino_prize_dispenser/power_change()
diff --git a/code/modules/casino/slots.dm b/code/modules/casino/slots.dm
index 773c1d15e0..40c7e5af61 100644
--- a/code/modules/casino/slots.dm
+++ b/code/modules/casino/slots.dm
@@ -199,7 +199,7 @@
if (symbol1 == "platinum coin" && symbol2 == "platinum coin" && symbol3 == "platinum coin")
output = "Three platinum coins! The slot machine deposits a platinum chip! "
- platinumwin = TRUE;
+ platinumwin = TRUE
celebrate = 1
icon_state = initial(icon_state) // Set it back to the original iconstate.
diff --git a/code/modules/casino/spawnergrenade_casino.dm b/code/modules/casino/spawnergrenade_casino.dm
index c7a8611b86..4a3cf8e535 100644
--- a/code/modules/casino/spawnergrenade_casino.dm
+++ b/code/modules/casino/spawnergrenade_casino.dm
@@ -2,7 +2,7 @@
name = "Casino Creature Container (Cat)"
desc = "It is set to detonate in 5 seconds. It will release a cat won from the casino prize vendor!"
icon = 'icons/obj/casino.dmi'
- icon_state = "casino"
+ icon_state = "casino_delivery"
item_state = "flashbang"
origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 2)
spawner_type = /mob/living/simple_mob/animal/passive/cat
@@ -75,6 +75,11 @@
name = "Casino Creature Container (Otie)"
spawner_type = /mob/living/simple_mob/otie/friendly
+/obj/item/weapon/grenade/spawnergrenade/casino/goldcrest
+ desc = "It is set to detonate in 5 seconds. It will release a bird won from the casino prize vendor!"
+ name = "Casino Creature Container (Bird)"
+ spawner_type = /mob/living/simple_mob/animal/passive/bird/goldcrest
+
//
// Mecha
//
diff --git a/code/modules/client/preference_setup/general/02_language.dm b/code/modules/client/preference_setup/general/02_language.dm
index 4a6bf5810f..ed7ec1adf2 100644
--- a/code/modules/client/preference_setup/general/02_language.dm
+++ b/code/modules/client/preference_setup/general/02_language.dm
@@ -11,12 +11,14 @@
S["extra_languages"] >> pref.extra_languages
testing("LANGSANI: Loaded from [pref.client]'s character [pref.real_name || "-name not yet loaded-"] savefile: [english_list(pref.alternate_languages || list())]")
S["language_prefixes"] >> pref.language_prefixes
+ S["language_custom_keys"] >> pref.language_custom_keys
/datum/category_item/player_setup_item/general/language/save_character(var/savefile/S)
S["language"] << pref.alternate_languages
S["extra_languages"] << pref.extra_languages
testing("LANGSANI: Saved to [pref.client]'s character [pref.real_name || "-name not yet loaded-"] savefile: [english_list(pref.alternate_languages || list())]")
S["language_prefixes"] << pref.language_prefixes
+ S["language_custom_keys"] << pref.language_custom_keys
/datum/category_item/player_setup_item/general/language/sanitize_character()
if(!islist(pref.alternate_languages))
@@ -44,6 +46,14 @@
for(var/prefix in pref.language_prefixes)
if(prefix in forbidden_prefixes)
pref.language_prefixes -= prefix
+ if(isnull(pref.language_custom_keys))
+ pref.language_custom_keys = list()
+ var/datum/species/S = GLOB.all_species[pref.species]
+ for(var/key in pref.language_custom_keys)
+ if(!pref.language_custom_keys[key])
+ pref.language_custom_keys.Remove(key)
+ if(!((pref.language_custom_keys[key] == S.language) || (pref.language_custom_keys[key] == S.default_language && S.default_language != S.language) || (pref.language_custom_keys[key] in pref.alternate_languages)))
+ pref.language_custom_keys.Remove(key)
/datum/category_item/player_setup_item/general/language/content()
. += "Languages "
@@ -52,14 +62,14 @@
testing("LANGSANI: Truncated [pref.client]'s character [pref.real_name || "-name not yet loaded-"] language list because it was too long (len: [pref.alternate_languages.len], allowed: [S.num_alternate_languages])")
pref.alternate_languages.len = (S.num_alternate_languages + pref.extra_languages) // Truncate to allowed length
if(S.language)
- . += "- [S.language] "
+ . += "- [S.language] - Set Custom Key "
if(S.default_language && S.default_language != S.language)
- . += "- [S.default_language] "
+ . += "- [S.default_language] - Set Custom Key "
if(S.num_alternate_languages + pref.extra_languages)
if(pref.alternate_languages.len)
for(var/i = 1 to pref.alternate_languages.len)
var/lang = pref.alternate_languages[i]
- . += "- [lang] - remove "
+ . += "- [lang] - remove - Set Custom Key "
if(pref.alternate_languages.len < (S.num_alternate_languages + pref.extra_languages))
. += "- add ([(S.num_alternate_languages + pref.extra_languages) - pref.alternate_languages.len] remaining) "
@@ -127,4 +137,32 @@
pref.language_prefixes = config.language_prefixes.Copy()
return TOPIC_REFRESH
+ else if(href_list["set_custom_key"])
+ var/lang = href_list["set_custom_key"]
+ if(!(lang in GLOB.all_languages))
+ return TOPIC_REFRESH
+
+ var/oldkey = ""
+ for(var/key in pref.language_custom_keys)
+ if(pref.language_custom_keys[key] == lang)
+ oldkey = key
+ break
+
+ var/char = tgui_input_text(user, "Input a language key for [lang]. Input a single space to reset.", "Language Custom Key", oldkey)
+ if(length(char) != 1)
+ return TOPIC_REFRESH
+ else if(char == " ")
+ for(var/key in pref.language_custom_keys)
+ if(pref.language_custom_keys[key] == lang)
+ pref.language_custom_keys -= key
+ break
+ else if(contains_az09(char))
+ if(!(char in pref.language_custom_keys))
+ pref.language_custom_keys += char
+ pref.language_custom_keys[char] = lang
+ else
+ tgui_alert_async(user, "Improper language key. Rejected.", "Error")
+
+ return TOPIC_REFRESH
+
return ..()
diff --git a/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm b/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm
index 184bce83f3..c875a1d322 100644
--- a/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm
@@ -326,6 +326,13 @@
ckeywhitelist = list("coolcrow420")
character_name = list("Jade Davis")
+/datum/gear/fluff/m4il_hdd
+ path = /obj/item/weapon/implant/language/fluff/m41l
+ display_name = "dusty hard drive"
+ slot = "implant"
+ ckeywhitelist = list("coolcrow420")
+ character_name = list("M41L")
+
// D CKEYS
/datum/gear/fluff/dhaeleena_medal
path = /obj/item/clothing/accessory/medal/silver/security/fluff/dhael
diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform_vr.dm b/code/modules/client/preference_setup/loadout/loadout_uniform_vr.dm
index 809add95e0..34d9ff281f 100644
--- a/code/modules/client/preference_setup/loadout/loadout_uniform_vr.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_uniform_vr.dm
@@ -282,36 +282,13 @@ Talon jumpsuit
path = /obj/item/clothing/under/undersuit/command
//Altevian Uniforms
-/datum/gear/uniform/job_altevian/cmd
- display_name = "altevian uniform, cmd"
- path = /obj/item/clothing/under/pants/altevian/command
- allowed_roles = list("Head of Security","Site Manager","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer")
+/datum/gear/uniform/altevian
+ description = "An extremely comfortable set of clothing that's made to help people handle their day to day work around the fleets with little to no discomfort."
+ display_name = "altevian uniform selection"
-/datum/gear/uniform/job_altevian/sec
- display_name = "altevian uniform, sec"
- path = /obj/item/clothing/under/pants/altevian/security
- allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
-
-/datum/gear/uniform/job_altevian/med
- display_name = "altevian uniform, med"
- path = /obj/item/clothing/under/pants/altevian/medical
- allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Paramedic","Geneticist","Field Medic","Psychiatrist")
-
-/datum/gear/uniform/job_altevian/eng
- display_name = "altevian uniform, eng"
- path = /obj/item/clothing/under/pants/altevian/engineering
- allowed_roles = list("Chief Engineer","Atmospheric Technician","Engineer")
-
-/datum/gear/uniform/job_altevian/sci
- display_name = "altevian uniform, sci"
- path = /obj/item/clothing/under/pants/altevian/science
- allowed_roles = list("Research Director", "Scientist", "Roboticist", "Xenobiologist", "Xenobotanist")
-
-/datum/gear/uniform/job_altevian/crg
- display_name = "altevian uniform, cargo"
- path = /obj/item/clothing/under/pants/altevian/cargo
- allowed_roles = list("Quartermaster", "Cargo Technician", "Shaft Miner")
-
-/datum/gear/uniform/job_altevian/civ
- display_name = "altevian uniform, civ"
- path = /obj/item/clothing/under/pants/altevian
+/datum/gear/uniform/altevian/New()
+ ..()
+ var/list/pants = list()
+ for(var/obj/item/clothing/under/pants/altevian/pants_type as anything in typesof(/obj/item/clothing/under/pants/altevian))
+ pants[initial(pants_type.name)] = pants_type
+ gear_tweaks += new/datum/gear_tweak/path(sortAssoc(pants))
\ No newline at end of file
diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno.dm b/code/modules/client/preference_setup/loadout/loadout_xeno.dm
index 4194ab5370..41cc5aa037 100644
--- a/code/modules/client/preference_setup/loadout/loadout_xeno.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_xeno.dm
@@ -167,9 +167,9 @@
sort_category = "Xenowear"
/datum/gear/uniform/dept/undercoat/cap
- display_name = "facility director undercoat (Teshari)"
+ display_name = "site manager undercoat (Teshari)"
path = /obj/item/clothing/under/teshari/undercoat/jobs/cap
- allowed_roles = list("Facility Director")
+ allowed_roles = list("Site Manager")
/datum/gear/uniform/dept/undercoat/hop
display_name = "head of personnel undercoat (Teshari)"
@@ -276,9 +276,9 @@
sort_category = "Xenowear"
/datum/gear/suit/dept/cloak/cap
- display_name = "facility director cloak (Teshari)"
+ display_name = "site manager cloak (Teshari)"
path = /obj/item/clothing/suit/storage/teshari/cloak/jobs
- allowed_roles = list("Facility Director")
+ allowed_roles = list("Site Manager")
/datum/gear/suit/dept/cloak/hop
display_name = "head of personnel cloak (Teshari)"
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index f49d7c040b..d965e3bf71 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -63,7 +63,8 @@ var/list/preferences_datums = list()
var/species = SPECIES_HUMAN //Species datum to use.
var/species_preview //Used for the species selection window.
var/list/alternate_languages = list() //Secondary language(s)
- var/list/language_prefixes = list() //Kanguage prefix keys
+ var/list/language_prefixes = list() //Language prefix keys
+ var/list/language_custom_keys = list() //Language custom call keys
var/list/gear //Left in for Legacy reasons, will no longer save.
var/list/gear_list = list() //Custom/fluff item loadouts.
var/gear_slot = 1 //The current gear save slot
@@ -429,12 +430,12 @@ var/list/preferences_datums = list()
selecting_slots = FALSE
if(!choice)
return
-
+
var/slotnum = charlist[choice]
if(!slotnum)
error("Player picked [choice] slot to load, but that wasn't one we sent.")
return
-
+
load_character(slotnum)
attempt_vr(user.client?.prefs_vr,"load_vore","") //VOREStation Edit
sanitize_preferences()
@@ -469,12 +470,12 @@ var/list/preferences_datums = list()
selecting_slots = FALSE
if(!choice)
return
-
+
var/slotnum = charlist[choice]
if(!slotnum)
error("Player picked [choice] slot to copy to, but that wasn't one we sent.")
return
-
+
overwrite_character(slotnum)
sanitize_preferences()
ShowChoices(user)
diff --git a/code/modules/client/stored_item.dm b/code/modules/client/stored_item.dm
index fbc384e5a1..6f2ff849ac 100644
--- a/code/modules/client/stored_item.dm
+++ b/code/modules/client/stored_item.dm
@@ -35,7 +35,7 @@
var/savefile/F = new /savefile(path)
- if(!F) return 0
+ if(!F) return 0
var/persist_item
F["persist item"] >> persist_item
@@ -224,8 +224,6 @@
persist_storable = FALSE
/obj/item/weapon/gun/energy/sizegun/admin
persist_storable = FALSE
-/obj/item/weapon/gun/energy/sizegun/abductor
- persist_storable = FALSE
/obj/item/stack
persist_storable = FALSE
/obj/item/weapon/book
@@ -251,4 +249,8 @@
/obj/item/weapon/stock_parts
persist_storable = FALSE
/obj/item/weapon/rcd
+ persist_storable = FALSE
+/obj/item/weapon/spacecash
+ persist_storable = FALSE
+/obj/item/weapon/spacecasinocash
persist_storable = FALSE
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/rig/suits/station.dm b/code/modules/clothing/spacesuits/rig/suits/station.dm
index 141bf4270b..ef63907362 100644
--- a/code/modules/clothing/spacesuits/rig/suits/station.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/station.dm
@@ -261,6 +261,7 @@
slowdown = 0.5
offline_vision_restriction = 1
siemens_coefficient= 0.75
+ seal_delay = 5
helm_type = /obj/item/clothing/head/helmet/space/rig/medical
diff --git a/code/modules/clothing/suits/aliens/teshari.dm b/code/modules/clothing/suits/aliens/teshari.dm
index a8d8ec7102..e17ef0e85e 100644
--- a/code/modules/clothing/suits/aliens/teshari.dm
+++ b/code/modules/clothing/suits/aliens/teshari.dm
@@ -106,8 +106,8 @@
// Job Cloaks
/obj/item/clothing/suit/storage/teshari/cloak/jobs/cap
- name = "facility director cloak"
- desc = "A soft Teshari cloak made for the Facility Director"
+ name = "site manager cloak"
+ desc = "A soft Teshari cloak made for the Site Manager"
icon_state = "tesh_cloak_cap"
//Cargo
diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm
index ef18e9d55e..ec41db2b1a 100644
--- a/code/modules/clothing/under/accessories/accessory.dm
+++ b/code/modules/clothing/under/accessories/accessory.dm
@@ -295,6 +295,10 @@
name = "medal of exceptional heroism"
desc = "An extremely rare golden medal awarded only by high ranking officials. To recieve such a medal is the highest honor and as such, very few exist. This medal is almost never awarded to anybody but distinguished veteran staff."
+/obj/item/clothing/accessory/medal/gold/casino
+ name = "medal of true lucky winner"
+ desc = "A gaudy golden medal with a logo of a casino engraved on top. The only achievement you had to earn this was great luck or great richness, neither of which is an achievement. Still, it instills a feeling of hope and smell of fresh bagels."
+
// Base type for 'medals' found in a "dungeon" submap, as a sort of trophy to celebrate the player's conquest.
/obj/item/clothing/accessory/medal/dungeon
diff --git a/code/modules/clothing/under/accessories/accessory_vr.dm b/code/modules/clothing/under/accessories/accessory_vr.dm
index 4c68c2be59..13b42366de 100644
--- a/code/modules/clothing/under/accessories/accessory_vr.dm
+++ b/code/modules/clothing/under/accessories/accessory_vr.dm
@@ -391,27 +391,27 @@
item_state = "talonpin"
overlay_state = "talonpin"
-//Casino Slave Collar
+//Casino Sentient Prize Collar
-/obj/item/clothing/accessory/collar/casinoslave
- name = "a disabled Sentient Prize Collar"
+/obj/item/clothing/accessory/collar/casinosentientprize
+ name = "disabled Sentient Prize Collar"
desc = "A collar worn by sentient prizes registered to a SPASM. Although the red text on it shows its disconnected and nonfunctional."
icon_state = "casinoslave"
item_state = "casinoslave"
overlay_state = "casinoslave"
- var/slavename = null //Name for system to put on collar description
+ var/sentientprizename = null //Name for system to put on collar description
var/ownername = null //Name for system to put on collar description
- var/slaveckey = null //Ckey for system to check who is the person and ensure no abuse of system or errors
- var/slaveflavor = null //Description to show on the SPASM
- var/slaveooc = null //OOC text to show on the SPASM
+ var/sentientprizeckey = null //Ckey for system to check who is the person and ensure no abuse of system or errors
+ var/sentientprizeflavor = null //Description to show on the SPASM
+ var/sentientprizeooc = null //OOC text to show on the SPASM
-/obj/item/clothing/accessory/collar/casinoslave/attack_self(mob/user as mob)
+/obj/item/clothing/accessory/collar/casinosentientprize/attack_self(mob/user as mob)
//keeping it blank so people don't tag and reset collar status
-/obj/item/clothing/accessory/collar/casinoslave_fake
- name = "a Sentient Prize Collar"
+/obj/item/clothing/accessory/collar/casinosentientprize_fake
+ name = "Sentient Prize Collar"
desc = "A collar worn by sentient prizes registered to a SPASM. This one has been disconnected from the system and is now an accessory!"
icon_state = "casinoslave_owned"
diff --git a/code/modules/clothing/under/accessories/badges_vr.dm b/code/modules/clothing/under/accessories/badges_vr.dm
index 2bdb5fa60e..a3fa5e1fd5 100644
--- a/code/modules/clothing/under/accessories/badges_vr.dm
+++ b/code/modules/clothing/under/accessories/badges_vr.dm
@@ -3,16 +3,12 @@
desc = "A small device used to measure body radiation and warning one after a certain threshold. \
Read manual before use! Can be held, attached to the uniform or worn around the neck."
w_class = ITEMSIZE_SMALL
-
icon = 'icons/inventory/accessory/item_vr.dmi'
icon_override = 'icons/inventory/accessory/item_vr.dmi'
-
icon_state = "dosimeter"
item_state = "dosimeter"
overlay_state = "dosimeter"
-
slot_flags = SLOT_TIE
-
var/obj/item/weapon/dosimeter_film/current_film = null
/obj/item/clothing/accessory/dosimeter/New()
@@ -80,19 +76,15 @@
current_film.icon_state = "dosimeter_film[tostate]"
else
icon_state = "[initial(icon_state)]-empty"
-
update_icon()
/obj/item/weapon/dosimeter_film
name = "dosimeter film"
desc = "These films can be inserted into dosimeters. It turns from white to black, depending on how much radiation it endured."
w_class = ITEMSIZE_SMALL
-
icon = 'icons/inventory/accessory/item_vr.dmi'
icon_override = 'icons/inventory/accessory/item_vr.dmi'
-
icon_state = "dosimeter_film0"
-
var/state = 0 //0 - White, 1 - Darker, 2 - Black (same as iconstates)
/obj/item/weapon/dosimeter_film/proc/update_state(var/tostate)
@@ -117,10 +109,13 @@
/obj/item/weapon/storage/box/dosimeter
name = "dosimeter case"
desc = "This case can only hold the Dosimeter, a few films and a manual."
+ icon = 'icons/inventory/accessory/item_vr.dmi'
+ icon_override = 'icons/inventory/accessory/item_vr.dmi'
+ icon_state = "dosimeter_case"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
storage_slots = 5
can_hold = list(/obj/item/weapon/paper/dosimeter_manual, /obj/item/clothing/accessory/dosimeter, /obj/item/weapon/dosimeter_film)
- max_storage_space = (ITEMSIZE_COST_SMALL * 2) + (ITEMSIZE_COST_TINY * 3)
+ max_storage_space = (ITEMSIZE_COST_SMALL * 4) + (ITEMSIZE_COST_TINY * 1)
w_class = ITEMSIZE_SMALL
/obj/item/weapon/storage/box/dosimeter/New()
diff --git a/code/modules/clothing/under/xenos/teshari.dm b/code/modules/clothing/under/xenos/teshari.dm
index a0797f8df6..d7254524f7 100644
--- a/code/modules/clothing/under/xenos/teshari.dm
+++ b/code/modules/clothing/under/xenos/teshari.dm
@@ -221,8 +221,8 @@
//Job Undercoats
/obj/item/clothing/under/teshari/undercoat/jobs/cap
- name = "facility director undercoat"
- desc = "A traditional Teshari garb made for the Facility Director"
+ name = "site manager undercoat"
+ desc = "A traditional Teshari garb made for the Site Manager"
icon_state = "tesh_uniform_cap"
/obj/item/clothing/under/teshari/undercoat/jobs/hop
diff --git a/code/modules/economy/casinocash.dm b/code/modules/economy/casinocash.dm
index 201c6147db..e74b89d42b 100644
--- a/code/modules/economy/casinocash.dm
+++ b/code/modules/economy/casinocash.dm
@@ -10,7 +10,7 @@
anchored = 1
/obj/machinery/chipmachine/attackby(obj/item/I as obj, mob/user as mob)
- if(istype(I,/obj/item/weapon/spacecash))
+ if(istype(I,/obj/item/weapon/spacecash) && (I:worth >= 5))
//consume the money
if(prob(50))
playsound(loc, 'sound/items/polaroid1.ogg', 50, 1)
@@ -30,7 +30,7 @@
playsound(loc, 'sound/items/polaroid2.ogg', 50, 1)
user << "You insert [I] into [src]. "
- spawn_money(round(I:worth/5), src.loc)
+ spawn_money(round(I:worth*5), src.loc)
src.attack_hand(user)
qdel(I)
@@ -64,7 +64,7 @@
h_user.drop_from_inventory(src)
h_user.drop_from_inventory(SC)
h_user.put_in_hands(SC)
- user << "You combine the casino chips to a stack of [SC.worth] of credits. "
+ user << "You combine the casino chips to a stack of [SC.worth] casino credits. "
qdel(src)
/obj/item/weapon/spacecasinocash/update_icon()
@@ -72,7 +72,7 @@
name = "[worth] casino credit\s"
if(worth in list(1000,500,200,100,50,20,10,1))
icon_state = "spacecasinocash[worth]"
- desc = "It's a stack of casino chips with a combined value of [worth] credits."
+ desc = "It's a stack of casino chips with a combined value of [worth] casino credits."
return
var/sum = src.worth
var/num = 0
@@ -93,7 +93,7 @@
M.Turn(pick(-45, -27.5, 0, 0, 0, 0, 0, 0, 0, 27.5, 45))
banknote.transform = M
src.overlays += banknote
- src.desc = "They are worth [worth] of credits."
+ src.desc = "They are worth [worth] casino credits."
/obj/item/weapon/spacecasinocash/proc/adjust_worth(var/adjust_worth = 0, var/update = 1)
worth += adjust_worth
@@ -176,7 +176,7 @@
/proc/spawn_casinochips(var/sum, spawnloc, mob/living/carbon/human/human_user as mob)
var/obj/item/weapon/spacecasinocash/SC = new (spawnloc)
- SC.set_worth(sum)
+ SC.set_worth(sum, TRUE)
if (ishuman(human_user) && !human_user.get_active_hand())
human_user.put_in_hands(SC)
return
diff --git a/code/modules/economy/vending_machines_vr.dm b/code/modules/economy/vending_machines_vr.dm
index 2ef744509b..8aa8f1631d 100644
--- a/code/modules/economy/vending_machines_vr.dm
+++ b/code/modules/economy/vending_machines_vr.dm
@@ -638,7 +638,7 @@
/obj/item/clothing/mask/surgical = 5,
/obj/item/clothing/accessory/pride/bi = 5,
/obj/item/clothing/accessory/pride/trans = 5,
- /obj/item/clothing/accessory/pride/ace = 5,
+ /obj/item/clothing/accessory/pride/ace = 5,
/obj/item/clothing/accessory/pride/enby = 5,
/obj/item/clothing/accessory/pride/pan = 5,
/obj/item/clothing/accessory/pride/lesbian = 5,
@@ -763,7 +763,7 @@
/obj/item/clothing/mask/surgical = 50,
/obj/item/clothing/accessory/pride/bi = 50,
/obj/item/clothing/accessory/pride/trans = 50,
- /obj/item/clothing/accessory/pride/ace = 50,
+ /obj/item/clothing/accessory/pride/ace = 50,
/obj/item/clothing/accessory/pride/enby = 50,
/obj/item/clothing/accessory/pride/pan = 50,
/obj/item/clothing/accessory/pride/lesbian = 50,
@@ -3440,3 +3440,18 @@
/obj/item/weapon/reagent_containers/food/drinks/cans/root_beer = 1)
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
vending_sound = "machines/vending/vending_cans.ogg"
+
+/obj/machinery/vending/altevian
+ name = "Altevian Imported Meals"
+ desc = "A vending machine containing imported foods from Altevian Hegemony. Delicious and nutritious. No natural ingridients guaranteed!"
+ icon = 'icons/obj/vending_vr.dmi'
+ icon_state = "rattevendor"
+ product_slogans = "Spacer's choice!;Voidborn food for voidborn people!;Most processed foods ever!"
+ product_ads = "Perfectly edible!;Squeaky clean foods!;Cheesed to meet you!;Made for spacers, by spacers, of spacers!"
+ products = list(/obj/item/weapon/reagent_containers/food/snacks/ratprotein = 15,
+ /obj/item/weapon/reagent_containers/food/snacks/ratveggies = 15,
+ /obj/item/weapon/reagent_containers/food/snacks/ratliquid = 15)
+
+ prices = list(/obj/item/weapon/reagent_containers/food/snacks/ratprotein = 8,
+ /obj/item/weapon/reagent_containers/food/snacks/ratveggies = 8,
+ /obj/item/weapon/reagent_containers/food/snacks/ratliquid = 8)
diff --git a/code/modules/economy/vending_refills.dm b/code/modules/economy/vending_refills.dm
index b2c0188ef9..7e8547ca19 100644
--- a/code/modules/economy/vending_refills.dm
+++ b/code/modules/economy/vending_refills.dm
@@ -54,7 +54,8 @@
/obj/machinery/vending/sol,
/obj/machinery/vending/snix,
/obj/machinery/vending/snlvend,
- /obj/machinery/vending/sovietvend)
+ /obj/machinery/vending/sovietvend,
+ /obj/machinery/vending/altevian)
/obj/item/weapon/refill_cartridge/multitype/drink
name = "drinks vendor refill cartridge"
@@ -121,6 +122,9 @@
/obj/item/weapon/refill_cartridge/autoname/food/sovietvend
refill_type = /obj/machinery/vending/sovietvend
+/obj/item/weapon/refill_cartridge/autoname/food/altevian
+ refill_type = /obj/machinery/vending/altevian
+
/obj/item/weapon/refill_cartridge/autoname/drink
icon_state = "rc_drink"
diff --git a/code/modules/food/food/snacks_vr.dm b/code/modules/food/food/snacks_vr.dm
index 77eeef4c01..23935f6207 100644
--- a/code/modules/food/food/snacks_vr.dm
+++ b/code/modules/food/food/snacks_vr.dm
@@ -773,4 +773,56 @@
/obj/item/weapon/reagent_containers/food/snacks/donkpocket/ascended/Initialize()
. = ..()
reagents.add_reagent("uranium", 3)
- reagents.add_reagent("pyrotoxin", 3)
\ No newline at end of file
+ reagents.add_reagent("pyrotoxin", 3)
+
+// Altevian Foobs
+
+/obj/item/weapon/reagent_containers/food/snacks/ratprotein
+ name = "AN Flavor Unit C"
+ desc = "A snack made from a group of space-faring rodents that is packed with the maximized potential of caloric intake to cubic inch. This one seems to be flavored of smoked cheddar and salami."
+ icon = 'icons/obj/food_vr.dmi'
+ icon_state = "altevian_cheese_block"
+ package_open_state = "altevian_cheese_block-open"
+ package = TRUE
+ trash = /obj/item/trash/ratcheese
+ nutriment_amt = 5
+ nutriment_desc = list("smoked cheese" = 4)
+
+/obj/item/weapon/reagent_containers/food/snacks/ratveggies
+ name = "Premium Ration Packet - VEG"
+ desc = "A package of a mixture of somehow still fresh from day 1 greens with a light hint of vinegar dressing to add extra kick."
+ icon = 'icons/obj/food_vr.dmi'
+ icon_state = "altevian_veggies"
+ package_open_state = "altevian_veggies-open"
+ package = TRUE
+ trash = /obj/item/trash/ratveg
+ nutriment_amt = 3
+ nutriment_desc = list("fresh mixed veggies" = 3, "vinegar" = 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/ratliquid
+ name = "Admiral's Choice Space-Safe Meal"
+ desc = "A vacuum sealed pouch of a liquid meal. This one seems to be flavored with the accent of steak."
+ icon = 'icons/obj/food_vr.dmi'
+ icon_state = "altevian_juice"
+ package_open_state = "altevian_juice-open"
+ package = TRUE
+ trash = /obj/item/trash/ratjuice
+ nutriment_amt = 2
+ nutriment_desc = list("essence of steak" = 6)
+
+/obj/item/weapon/reagent_containers/food/snacks/ratliquid/Initialize()
+ . = ..()
+ reagents.add_reagent("protein", 4)
+
+/obj/item/weapon/reagent_containers/food/snacks/ratsteak
+ name = "altevian traditional steak"
+ desc = "This abomination of processed foods resembles a steak plate. Probably contains nothing a normal steak does, but mimics its flavor and nutrition well-enough."
+ icon = 'icons/obj/food_vr.dmi'
+ icon_state = "altevian_steak"
+ trash = /obj/item/trash/plate
+ nutriment_amt = 8
+ nutriment_desc = list("steak" = 5, "smoked cheese" = 2, "veggies" = 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/ratsteak/Initialize()
+ . = ..()
+ reagents.add_reagent("protein", 3)
diff --git a/code/modules/food/recipes_microwave_vr.dm b/code/modules/food/recipes_microwave_vr.dm
index 03c96d8296..1ecfb5fd8e 100644
--- a/code/modules/food/recipes_microwave_vr.dm
+++ b/code/modules/food/recipes_microwave_vr.dm
@@ -185,3 +185,11 @@
reagents = list("sugar" = 5, "nutriment" = 5)
items = list()
result = /obj/item/weapon/reagent_containers/food/snacks/honey_candy
+
+/datum/recipe/altevian_steak
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/ratprotein,
+ /obj/item/weapon/reagent_containers/food/snacks/ratveggies,
+ /obj/item/weapon/reagent_containers/food/snacks/ratliquid
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/ratsteak
diff --git a/code/modules/lore_codex/robutt_data/bybrand.dm b/code/modules/lore_codex/robutt_data/bybrand.dm
index c7d7bf3da7..6997f01448 100644
--- a/code/modules/lore_codex/robutt_data/bybrand.dm
+++ b/code/modules/lore_codex/robutt_data/bybrand.dm
@@ -41,7 +41,7 @@
/datum/lore/codex/page/robo_heph
name = "Hephaestus Industries"
- data = "Hephaestus joined the civilian prosthetic market in earnest after the First Contact War. Wartime amputees and fully-prosthetic Mechanized Division veterans found themselves looking for the Hephaestus parts that they had access to during the conflict. Hephaestus responded by producing the first civilian model of their rugged green prosthetics, leveraging their ties with SolGov to offer discounts to many of those returning from war. HI-Civilian is not quite as durable or easily maintained as the military model, to conform with most systems' legal restrictions on the capacities of prosthetic limbs, but maintains an unmatched reputation for resilience to damage and ease of repair.\
+ data = "Hephaestus joined the civilian prosthetic market in earnest after the Hegemony War. Wartime amputees and fully-prosthetic Mechanized Division veterans found themselves looking for the Hephaestus parts that they had access to during the conflict. Hephaestus responded by producing the first civilian model of their rugged green prosthetics, leveraging their ties with SolGov to offer discounts to many of those returning from war. HI-Civilian is not quite as durable or easily maintained as the military model, to conform with most systems' legal restrictions on the capacities of prosthetic limbs, but maintains an unmatched reputation for resilience to damage and ease of repair.\
\
Hephaestus prosthetics are somewhat expensive, but are a reasonable investment for many of average or above economic status. It has sufficient manual dexterity for most tasks, without sacrificing the rugged durability that made the brand popular."
diff --git a/code/modules/lore_codex/robutt_data/main_robutts.dm b/code/modules/lore_codex/robutt_data/main_robutts.dm
index 396a04883c..b9d4b75b2a 100644
--- a/code/modules/lore_codex/robutt_data/main_robutts.dm
+++ b/code/modules/lore_codex/robutt_data/main_robutts.dm
@@ -1,7 +1,7 @@
/datum/lore/codex/category/main_robutts // The top-level categories for the robot guide
name = "Index"
- data = "Temporary death, emancipation, and even basic body migration can be a stressful period in anyone's life. The prosthetics market is complicated, and many corporations view misleading or outright decieving potential clients as \"part of the game\". This Buyer's Guide was compiled in 2542 to serve as an easy reference to the most popular prosthetics available, with consideration paid to every use-case and price point. This is our 12th edition, and much has changed in the field of prosthetics since we first set out. We hope you find the information in this guide helpful."
+ data = "Temporary death, emancipation, and even basic body migration can be a stressful period in anyone's life. The prosthetics market is complicated, and many corporations view misleading or outright decieving potential clients as \"part of the game\". This Buyer's Guide was compiled in 2302 to serve as an easy reference to the most popular prosthetics available, with consideration paid to every use-case and price point. This is our 12th edition, and much has changed in the field of prosthetics since we first set out. We hope you find the information in this guide helpful."
children = list(
/datum/lore/codex/category/pros_by_brand,
/datum/lore/codex/category/other_information,
- )
\ No newline at end of file
+ )
diff --git a/code/modules/mentor/mentor.dm b/code/modules/mentor/mentor.dm
index bf3259d61a..28f4225485 100644
--- a/code/modules/mentor/mentor.dm
+++ b/code/modules/mentor/mentor.dm
@@ -159,6 +159,24 @@ var/list/mentor_verbs_default = list(
/proc/has_mentor_powers(client/C)
return C.holder || C.mentorholder
+// This not really a great place to put it, but this verb replaces adminhelp in hotkeys so that people requesting help can select the type they need
+// You can still directly adminhelp if necessary, this ONLY replaces the inbuilt hotkeys
+
+/client/verb/requesthelp()
+ set category = "Admin"
+ set name = "Request help"
+ set hidden = 1
+
+ var/mhelp = tgui_alert(usr, "Select the help you need.","Request for Help",list("Adminhelp","Mentorhelp")) == "Mentorhelp"
+ var/msg = tgui_input_text(usr, "Input your request for help.", "Request for Help")
+
+ if (mhelp)
+ mentorhelp(msg)
+ return
+
+ adminhelp(msg)
+
+
/client/proc/cmd_mentor_pm(whom, msg, datum/mentor_help/MH)
set category = "Admin"
set name = "Mentor-PM"
diff --git a/code/modules/mob/_modifiers/modifiers_vr.dm b/code/modules/mob/_modifiers/modifiers_vr.dm
new file mode 100644
index 0000000000..a56bc5d2e0
--- /dev/null
+++ b/code/modules/mob/_modifiers/modifiers_vr.dm
@@ -0,0 +1,33 @@
+/datum/modifier/underwater_stealth
+ name = "underwater stealth"
+ desc = "You are currently underwater, rendering it more difficult to see you and enabling you to move quicker, thanks to your aquatic nature."
+
+ on_created_text = "You sink under the water. "
+ on_expired_text = "You come out from the water. "
+
+ stacks = MODIFIER_STACK_FORBID
+
+ slowdown = -1.5 //A bit faster when actually submerged fully in water, as you're not waddling through it.
+ siemens_coefficient = 1.5 //You are, however, underwater. Getting shocked will hurt.
+
+ outgoing_melee_damage_percent = 0.75 //You are swinging a sword under water...Good luck.
+ accuracy = -50 //You're underwater. Good luck shooting a gun. (Makes shots as if you were 3.33 tiles further.)
+ evasion = 30 //You're underwater and a bit harder to hit.
+
+/datum/modifier/underwater_stealth/on_applied()
+ holder.alpha = 50
+ return
+
+/datum/modifier/underwater_stealth/on_expire()
+ holder.alpha = 255
+ return
+
+/datum/modifier/underwater_stealth/tick()
+ if(holder.stat == DEAD)
+ expire(silent = TRUE) //If you're dead you float to the top.
+ if(istype(holder.loc, /turf/simulated/floor/water))
+ var/turf/simulated/floor/water/water_floor = holder.loc
+ if(water_floor.depth < 1) //You're not in deep enough water anymore.
+ expire(silent = FALSE)
+ else
+ expire(silent = FALSE)
\ No newline at end of file
diff --git a/code/modules/mob/_modifiers/unholy.dm b/code/modules/mob/_modifiers/unholy.dm
index 64d7a99d38..034c3b455b 100644
--- a/code/modules/mob/_modifiers/unholy.dm
+++ b/code/modules/mob/_modifiers/unholy.dm
@@ -185,16 +185,14 @@
var/mob/living/carbon/human/H = holder
var/starting_nutrition = H.nutrition
H.adjust_nutrition(-10)
- var/healing_amount = starting_nutrition - H.nutrition
- if(healing_amount < 0) // If you are eating enough to somehow outpace this, congratulations, you are gluttonous enough to gain a boon.
- healing_amount *= -2
+ var/healing_amount = starting_nutrition - H.nutrition //Anything above 9 nutrition will return 10. Anything below will give 0-9. Nutrition is capped at 0.
+ if(healing_amount)
+ H.adjustBruteLoss(-healing_amount * 0.25)
- H.adjustBruteLoss(-healing_amount * 0.25)
+ H.adjustFireLoss(-healing_amount * 0.25)
- H.adjustFireLoss(-healing_amount * 0.25)
+ H.adjustOxyLoss(-healing_amount * 0.25)
- H.adjustOxyLoss(-healing_amount * 0.25)
-
- H.adjustToxLoss(-healing_amount * 0.25)
+ H.adjustToxLoss(-healing_amount * 0.25)
..()
\ No newline at end of file
diff --git a/code/modules/mob/language/language.dm b/code/modules/mob/language/language.dm
index 4cb01b981f..4fa749f41e 100644
--- a/code/modules/mob/language/language.dm
+++ b/code/modules/mob/language/language.dm
@@ -192,6 +192,9 @@
/mob/proc/remove_language(var/rem_language)
var/datum/language/L = GLOB.all_languages[rem_language]
. = (L in languages)
+ var/prefix = get_custom_prefix_by_lang(src, L)
+ if(prefix)
+ language_keys.Remove(prefix)
languages.Remove(L)
/mob/living/remove_language(rem_language)
@@ -240,7 +243,8 @@
for(var/datum/language/L in languages)
if(!(L.flags & NONGLOBAL))
- . += "[L.name] ([get_language_prefix()][L.key]) [L.desc] "
+ var/lang_key = get_custom_prefix_by_lang(src, L)
+ . += "[L.name] ([get_language_prefix()][L.key][lang_key ? " [get_language_prefix()][lang_key]" : ""]) [L.desc] "
/mob/living/check_lang_data()
. = ""
@@ -250,12 +254,13 @@
for(var/datum/language/L in languages)
if(!(L.flags & NONGLOBAL))
+ var/lang_key = get_custom_prefix_by_lang(src, L)
if(L == default_language)
- . += "[L.name] ([get_language_prefix()][L.key]) - default - reset [L.desc] "
+ . += "[L.name] ([get_language_prefix()][L.key][lang_key ? " [get_language_prefix()][lang_key]" : ""]) Edit Custom Key - default - reset [L.desc] "
else if (can_speak(L))
- . += "[L.name] ([get_language_prefix()][L.key]) - set default [L.desc] "
+ . += "[L.name] ([get_language_prefix()][L.key][lang_key ? " [get_language_prefix()][lang_key]" : ""]) Edit Custom Key - set default [L.desc] "
else
- . += "[L.name] ([get_language_prefix()][L.key]) - cannot speak! [L.desc] "
+ . += "[L.name] ([get_language_prefix()][L.key][lang_key ? " [get_language_prefix()][lang_key]" : ""]) Edit Custom Key - cannot speak! [L.desc] "
/mob/verb/check_languages()
set name = "Check Known Languages"
@@ -279,6 +284,22 @@
set_default_language(L)
check_languages()
return 1
+ else if(href_list["set_lang_key"])
+ var/datum/language/L = locate(href_list["set_lang_key"])
+ if(L && (L in languages))
+ var/old_key = get_custom_prefix_by_lang(src, L)
+ var/custom_key = tgui_input_text(src, "Input a new key for [L.name]", "Language Key", old_key)
+ if(custom_key && length(custom_key) == 1)
+ if(contains_az09(custom_key))
+ language_keys[custom_key] = L
+ if(old_key && old_key != custom_key)
+ language_keys.Remove(old_key)
+ else if(custom_key == " ")
+ if(old_key && old_key != custom_key)
+ language_keys.Remove(old_key)
+ else
+ tgui_alert_async(src, "Improper language key. Rejected.", "Error")
+ check_languages()
else
return ..()
@@ -287,5 +308,17 @@
if(L.flags & except_flags)
continue
target.add_language(L.name)
+ for(var/key in source.language_keys)
+ if(L == source.language_keys[key])
+ if(!(key in target.language_keys))
+ target.language_keys[key] = L
+
+/proc/get_custom_prefix_by_lang(var/mob/our_mob, var/language)
+ if(!our_mob || !our_mob.language_keys.len || !language)
+ return
+
+ for(var/key in our_mob.language_keys)
+ if(our_mob.language_keys[key] == language)
+ return key
#undef SCRAMBLE_CACHE_LEN
diff --git a/code/modules/mob/living/carbon/human/emote_vr.dm b/code/modules/mob/living/carbon/human/emote_vr.dm
index 82e43fa68e..aa21381bbc 100644
--- a/code/modules/mob/living/carbon/human/emote_vr.dm
+++ b/code/modules/mob/living/carbon/human/emote_vr.dm
@@ -61,3 +61,26 @@
else
message = "hides their wings."
visible_message("[src] [message]")
+
+/mob/living/carbon/human/verb/hide_tail_vr()
+ set name = "Show/Hide tail"
+ set category = "IC"
+ set desc = "Hide your tail, or show it if you already hid it."
+ if(!tail_style) //Just some checks.
+ to_chat(src,"You have no tail to hide! ")
+ return
+ else //They got a tail. Let's make sure it ain't hiding stuff!
+ var/datum/sprite_accessory/tail/current_tail = tail_style
+ if((current_tail.hide_body_parts && current_tail.hide_body_parts.len) || current_tail.clip_mask_state || current_tail.clip_mask)
+ to_chat(src,"Your current tail is too considerable to hide! ")
+ return
+ if(species.tail) //If they're using this verb, they already have a custom tail. This prevents their species tail from showing.
+ species.tail = null //Honestly, this should probably be done when a custom tail is chosen, but this is the only time it'd ever matter.
+ tail_hidden = !tail_hidden
+ update_tail_showing()
+ var/message = ""
+ if(!tail_hidden)
+ message = "reveals their tail!"
+ else
+ message = "hides their tail."
+ visible_message("[src] [message]")
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/human_defines_vr.dm b/code/modules/mob/living/carbon/human/human_defines_vr.dm
index 494f16fa42..69a008029c 100644
--- a/code/modules/mob/living/carbon/human/human_defines_vr.dm
+++ b/code/modules/mob/living/carbon/human/human_defines_vr.dm
@@ -8,6 +8,7 @@
var/ability_flags = 0 //Shadekin abilities/potentially other species-based?
var/sensorpref = 5 //Suit sensor loadout pref
var/wings_hidden = FALSE
+ var/tail_hidden = FALSE
/mob/living/carbon/human/proc/shadekin_get_energy()
var/datum/species/shadekin/SK = species
diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm
index 0f8b69cb31..e52f051de8 100644
--- a/code/modules/mob/living/carbon/human/human_movement.dm
+++ b/code/modules/mob/living/carbon/human/human_movement.dm
@@ -20,7 +20,11 @@
. += M.slowdown
var/health_deficiency = (getMaxHealth() - health)
- if(health_deficiency >= 40) . += (health_deficiency / 25)
+ if(health_deficiency >= 40) //VOREStation Edit Start
+ if(chem_effects[CE_PAINKILLER]) //On painkillers? Reduce pain! On anti-painkillers? Increase pain!
+ health_deficiency = max(0, health_deficiency - src.chem_effects[CE_PAINKILLER])
+ if(health_deficiency >= 40) //Still in enough pain for it to be significant?
+ . += (health_deficiency / 25) //VOREStation Edit End
if(can_feel_pain())
if(halloss >= 10) . += (halloss / 10) //halloss shouldn't slow you down if you can't even feel it
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index fd483fdeec..91cdbc6b5d 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -1528,7 +1528,7 @@
return
// Puke if toxloss is too high
- if(!stat)
+ if(!stat && !isbelly(loc))
if (getToxLoss() >= 30 && isSynthetic())
if(!confused)
if(prob(5))
diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm
index 3ee68e62db..3b942ed365 100644
--- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm
+++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm
@@ -483,3 +483,20 @@ var/global/list/disallowed_protean_accessories = list(
//Return ourselves in case someone wants it
return src
+
+/mob/living/simple_mob/protean_blob/CanStumbleVore(mob/living/target)
+ if(target == humanform)
+ return FALSE
+ return ..()
+
+/mob/living/simple_mob/protean_blob/CanStumbleVore(mob/living/target)
+ if(target == humanform)
+ return FALSE
+ return ..()
+
+/mob/living/carbon/human/CanStumbleVore(mob/living/target)
+ if(istype(target, /mob/living/simple_mob/protean_blob))
+ var/mob/living/simple_mob/protean_blob/PB = target
+ if(PB.humanform == src)
+ return FALSE
+ return ..()
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm
index a4333760a8..ac55ff5f46 100644
--- a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm
+++ b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm
@@ -1064,4 +1064,92 @@
C.icon_scale_y = 0.25 * C.w_class
C.update_transform()
//egg_contents -= src
- C.contents -= src
\ No newline at end of file
+ C.contents -= src
+
+/mob/living/carbon/human/proc/water_stealth()
+ set name = "Dive under water / Resurface"
+ set desc = "Dive under water, allowing for you to be stealthy and move faster."
+ set category = "Abilities"
+
+ if(last_special > world.time)
+ return
+ last_special = world.time + 50 //No spamming!
+
+ if(has_modifier_of_type(/datum/modifier/underwater_stealth))
+ to_chat(src, "You resurface!")
+ remove_modifiers_of_type(/datum/modifier/underwater_stealth)
+ return
+
+ if(!isturf(loc)) //We have no turf.
+ to_chat(src, "There is no water for you to dive into!")
+ return
+
+ if(istype(src.loc, /turf/simulated/floor/water))
+ var/turf/simulated/floor/water/water_floor = src.loc
+ if(water_floor.depth >= 1) //Is it deep enough?
+ add_modifier(/datum/modifier/underwater_stealth) //No duration. It'll remove itself when they exit the water!
+ to_chat(src, "You dive into the water!")
+ visible_message("[src] dives into the water!")
+ else
+ to_chat(src, "The water here is not deep enough to dive into!")
+ return
+
+ else
+ to_chat(src, "There is no water for you to dive into!")
+ return
+
+/mob/living/carbon/human/proc/underwater_devour()
+ set name = "Devour From Water"
+ set desc = "Grab something in the water with you and devour them with your selected stomach."
+ set category = "Abilities"
+
+ if(last_special > world.time)
+ return
+ last_special = world.time + 50 //No spamming!
+
+ if(stat == DEAD || paralysis || weakened || stunned)
+ to_chat(src, "You cannot do that while in your current state. ")
+ return
+
+ if(!(src.vore_selected))
+ to_chat(src, "No selected belly found. ")
+ return
+
+
+ if(!has_modifier_of_type(/datum/modifier/underwater_stealth))
+ to_chat(src, "You must be underwater to do this!!")
+ return
+
+ var/list/targets = list() //Shameless copy and paste. If it ain't broke don't fix it!
+
+ for(var/turf/T in range(1, src))
+ if(istype(T, /turf/simulated/floor/water))
+ for(var/mob/living/L in T)
+ if(L == src) //no eating yourself. 1984.
+ continue
+ if(L.devourable)
+ targets += L
+
+ if(!(targets.len))
+ to_chat(src, "No eligible targets found. ")
+ return
+
+ var/mob/living/target = tgui_input_list(src, "Please select a target.", "Victim", targets)
+
+ if(!target)
+ return
+
+ to_chat(target, "Something begins to circle around you in the water! ") //Dun dun...
+ var/starting_loc = target.loc
+
+ if(do_after(src, 50))
+ if(target.loc != starting_loc)
+ to_chat(target, "You got away from whatever that was... ")
+ to_chat(src, "They got away. ")
+ return
+ if(target.buckled) //how are you buckled in the water?!
+ target.buckled.unbuckle_mob()
+ target.visible_message("\The [target] suddenly disappears, being dragged into the water! ",\
+ "You are dragged below the water and feel yourself slipping directly into \the [src]'s [vore_selected]! ")
+ to_chat(src, "You successfully drag \the [target] into the water, slipping them into your [vore_selected]. ")
+ target.forceMove(src.vore_selected)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm
index 26ced96f0a..70dff2c81e 100644
--- a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm
+++ b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm
@@ -25,10 +25,7 @@
inherent_verbs = list(
/mob/living/carbon/human/proc/reconstitute_form,
/mob/living/carbon/human/proc/sonar_ping,
- /mob/living/carbon/human/proc/tie_hair,
- /mob/living/proc/flying_toggle,
- /mob/living/proc/flying_vore_toggle,
- /mob/living/proc/start_wings_hovering) //Xenochimera get all the special verbs since they can't select traits.
+ /mob/living/carbon/human/proc/tie_hair)
virus_immune = 1 // They practically ARE one.
min_age = 18
diff --git a/code/modules/mob/living/carbon/human/species/station/station_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_vr.dm
index 345216ef10..bc64f2a7f1 100644
--- a/code/modules/mob/living/carbon/human/species/station/station_vr.dm
+++ b/code/modules/mob/living/carbon/human/species/station/station_vr.dm
@@ -81,7 +81,7 @@
name_language = LANGUAGE_SKRELLIAN
color_mult = 1
assisted_langs = list(LANGUAGE_EAL, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX)
- inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair)
+ inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair, /mob/living/carbon/human/proc/water_stealth, /mob/living/carbon/human/proc/underwater_devour)
min_age = 18
max_age = 110
@@ -105,6 +105,7 @@
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
water_breather = TRUE
+ water_movement = -4 //Negates shallow. Halves deep.
flesh_color = "#AFA59E"
base_color = "#777777"
@@ -284,13 +285,16 @@
deform = 'icons/mob/human_races/r_def_skrell_vr.dmi'
color_mult = 1
min_age = 18
- inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair)
+ inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair, /mob/living/carbon/human/proc/water_stealth, /mob/living/carbon/human/proc/underwater_devour)
reagent_tag = null
allergens = null
assisted_langs = list(LANGUAGE_EAL, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX)
genders = list(MALE, FEMALE, PLURAL, NEUTER)
wikilink="https://yawn.izac.live/Skrell"
+ water_breather = TRUE
+ water_movement = -4 //Negates shallow. Halves deep.
+
/datum/species/zaddat
spawn_flags = SPECIES_CAN_JOIN
min_age = 18
diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm
index 7c44c25702..f3cbc7534f 100644
--- a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm
+++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm
@@ -195,13 +195,6 @@
desc = "You breathe nitrogen instead of oxygen (which is poisonous to you). Incidentally, phoron isn't poisonous to breathe to you."
var_changes = list("breath_type" = "nitrogen", "poison_type" = "oxygen")
-/datum/trait/negative/monolingual
- name = "Monolingual"
- desc = "You are not good at learning languages."
- cost = -3
- var_changes = list("num_alternate_languages" = 0)
- varchange_type = TRAIT_VARCHANGE_MORE_BETTER
-
/datum/trait/negative/monolingual
name = "Monolingual"
desc = "You are not good at learning languages."
diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm
index fff6638ff1..25ff425723 100644
--- a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm
+++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm
@@ -291,11 +291,16 @@
H.verbs |= /mob/living/carbon/human/proc/weave_item
H.verbs |= /mob/living/carbon/human/proc/set_silk_color
-/datum/trait/positive/water_breather
- name = "Water Breather"
- desc = "You can breathe under water."
+/datum/trait/positive/aquatic
+ name = "Aquatic"
+ desc = "You can breathe under water and can traverse water more efficiently. Additionally, you can eat others in the water."
cost = 1
- var_changes = list("water_breather" = 1)
+ var_changes = list("water_breather" = 1, "water_movement" = -4) //Negate shallow water. Half the speed in deep water.
+
+/datum/trait/positive/aquatic/apply(var/datum/species/S,var/mob/living/carbon/human/H)
+ ..(S,H)
+ H.verbs |= /mob/living/carbon/human/proc/water_stealth
+ H.verbs |= /mob/living/carbon/human/proc/underwater_devour
/datum/trait/positive/cocoon_tf
name = "Cocoon Spinner"
diff --git a/code/modules/mob/living/carbon/human/species/station/xenochimera_trait_vr.dm b/code/modules/mob/living/carbon/human/species/station/xenochimera_trait_vr.dm
index 152851d8c2..e3e8e5ff2a 100644
--- a/code/modules/mob/living/carbon/human/species/station/xenochimera_trait_vr.dm
+++ b/code/modules/mob/living/carbon/human/species/station/xenochimera_trait_vr.dm
@@ -53,15 +53,23 @@
category = 0
custom_only = FALSE
-/datum/trait/positive/water_breather/xenochimera
+/datum/trait/positive/aquatic/xenochimera
sort = TRAIT_SORT_SPECIES
allowed_species = list(SPECIES_XENOCHIMERA)
- name = "Xenochimera: Water Breather"
- desc = "You can breathe under water."
+ name = "Xenochimera: Aquatic"
+ desc = "You can breathe under water and can traverse water more efficiently. Additionally, you can eat others in the water."
cost = 0
category = 0
+ excludes = list(/datum/trait/positive/winged_flight/xenochimera)
custom_only = FALSE
-
+
+/datum/trait/positive/winged_flight/xenochimera
+ name = "Xenochhimera: Winged Flight"
+ desc = "Allows you to fly by using your wings. Don't forget to bring them!"
+ cost = 0
+ excludes = list(/datum/trait/positive/aquatic/xenochimera)
+ custom_only = FALSE
+
/* // Commented out in lieu of finding a better solution.
/datum/trait/neutral/coldadapt/xenochimera
sort = TRAIT_SORT_SPECIES
diff --git a/code/modules/mob/living/carbon/human/species/virtual_reality/avatar.dm b/code/modules/mob/living/carbon/human/species/virtual_reality/avatar.dm
index 17b31ffecc..55ba92b58c 100644
--- a/code/modules/mob/living/carbon/human/species/virtual_reality/avatar.dm
+++ b/code/modules/mob/living/carbon/human/species/virtual_reality/avatar.dm
@@ -34,8 +34,12 @@
/mob/living/carbon/human/proc/shapeshifter_select_hair,
/mob/living/carbon/human/proc/shapeshifter_select_hair_colors,
/mob/living/carbon/human/proc/shapeshifter_select_gender,
+ /mob/living/carbon/human/proc/shapeshifter_select_wings,
+ /mob/living/carbon/human/proc/shapeshifter_select_tail,
+ /mob/living/carbon/human/proc/shapeshifter_select_ears,
+ /mob/living/proc/set_size,
/mob/living/carbon/human/proc/regenerate,
- /mob/living/carbon/human/proc/shapeshifter_change_opacity,
+ /mob/living/carbon/human/proc/promethean_select_opaqueness,
/mob/living/carbon/human/proc/exit_vr
)
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index f008f661fd..1b96fbad8a 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -1239,13 +1239,13 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
/mob/living/carbon/human/proc/get_tail_image()
//If you are FBP with tail style and didn't set a custom one
var/datum/robolimb/model = isSynthetic()
- if(istype(model) && model.includes_tail && !tail_style)
+ if(istype(model) && model.includes_tail && !tail_style && !tail_hidden)
var/icon/tail_s = new/icon("icon" = synthetic.icon, "icon_state" = "tail")
tail_s.Blend(rgb(src.r_skin, src.g_skin, src.b_skin), species.color_mult ? ICON_MULTIPLY : ICON_ADD)
return image(tail_s)
//If you have a custom tail selected
- if(tail_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL && !istaurtail(tail_style)))
+ if(tail_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL && !istaurtail(tail_style)) && !tail_hidden)
var/icon/tail_s = new/icon("icon" = tail_style.icon, "icon_state" = (tail_style.can_loaf && resting) ? "[tail_style.icon_state]_loaf" : (wagging && tail_style.ani_state ? tail_style.ani_state : tail_style.icon_state)) // VOREStation Edit: Taur Loafing
if(tail_style.can_loaf && !is_shifted)
pixel_y = (resting) ? -tail_style.loaf_offset : 0 //move player down, then taur up, to fit the overlays correctly // VOREStation Edit: Taur Loafing
diff --git a/code/modules/mob/living/silicon/pai/software_modules.dm b/code/modules/mob/living/silicon/pai/software_modules.dm
index 139fc3831c..a5553f350b 100644
--- a/code/modules/mob/living/silicon/pai/software_modules.dm
+++ b/code/modules/mob/living/silicon/pai/software_modules.dm
@@ -420,6 +420,7 @@
user.add_language(LANGUAGE_ALAI)
user.add_language(LANGUAGE_PROMETHEAN)
user.add_language(LANGUAGE_GIBBERISH)
+ user.add_language("Mouse")
user.add_language("Animal")
user.add_language("Teppi")
else
@@ -446,6 +447,7 @@
user.remove_language(LANGUAGE_ALAI)
user.remove_language(LANGUAGE_PROMETHEAN)
user.remove_language(LANGUAGE_GIBBERISH)
+ user.remove_language("Mouse")
user.remove_language("Animal")
user.remove_language("Teppi")
diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm
index e832207bb9..a2a8376ec7 100644
--- a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm
+++ b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm
@@ -219,7 +219,7 @@
/obj/item/weapon/reagent_containers/borghypo/hound/trauma
name = "Hound hypospray"
desc = "An advanced chemical synthesizer and injection system utilizing carrier's reserves."
- reagent_ids = list("inaprovaline", "dexalin", "bicaridine", "anti_toxin", "spaceacillin", "paracetamol")
+ reagent_ids = list("tricordrazine", "inaprovaline", "oxycodone", "dexalin" ,"spaceacillin")
//Tongue stuff
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
index 57309dd427..5b257804d7 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
@@ -99,7 +99,8 @@
/obj/item/weapon/storage/pill_bottle,
/obj/item/weapon/reagent_containers/pill,
/obj/item/weapon/reagent_containers/blood,
- /obj/item/stack/material/phoron
+ /obj/item/stack/material/phoron,
+ /obj/item/weapon/disk/body_record //Vorestation Edit: this lets you get an empty sleeve or help someone else
)
/obj/item/weapon/gripper/research //A general usage gripper, used for toxins/robotics/xenobio/etc
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm
index ad800ed257..c9e89fc620 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm
@@ -277,14 +277,19 @@ var/global/list/robot_modules = list(
var/obj/item/stack/nanopaste/N = new /obj/item/stack/nanopaste(src)
var/obj/item/stack/medical/advanced/bruise_pack/B = new /obj/item/stack/medical/advanced/bruise_pack(src)
+ var/obj/item/stack/medical/advanced/ointment/O = new /obj/item/stack/medical/advanced/ointment(src) //VoreStation edit: we have burn surgeries so they should be able to do them
N.uses_charge = 1
N.charge_costs = list(1000)
N.synths = list(medicine)
B.uses_charge = 1
B.charge_costs = list(1000)
B.synths = list(medicine)
+ O.uses_charge = 1
+ O.charge_costs = list(1000)
+ O.synths = list(medicine)
src.modules += N
src.modules += B
+ src.modules += O
/obj/item/weapon/robot_module/robot/medical/surgeon/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm
index 666e78edc7..abac156d97 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm
@@ -340,12 +340,14 @@
can_be_pushed = 0
sprites = list(
"Traumahound" = "traumavale",
+ "Drake" = "draketrauma"
)
/obj/item/weapon/robot_module/robot/medical/trauma/New(var/mob/living/silicon/robot/R)
src.modules += new /obj/item/device/healthanalyzer(src)
src.modules += new /obj/item/weapon/dogborg/jaws/small(src)
src.modules += new /obj/item/device/dogborg/boop_module(src)
+ src.modules += new /obj/item/weapon/autopsy_scanner(src)
src.modules += new /obj/item/weapon/surgical/scalpel/cyborg(src)
src.modules += new /obj/item/weapon/surgical/hemostat/cyborg(src)
src.modules += new /obj/item/weapon/surgical/retractor/cyborg(src)
@@ -354,14 +356,14 @@
src.modules += new /obj/item/weapon/surgical/FixOVein/cyborg(src)
src.modules += new /obj/item/weapon/surgical/bonesetter/cyborg(src)
src.modules += new /obj/item/weapon/surgical/circular_saw/cyborg(src)
+ src.modules += new /obj/item/weapon/surgical/surgicaldrill/cyborg(src)
+ src.modules += new /obj/item/weapon/surgical/bioregen/cyborg(src) //let them succ
src.modules += new /obj/item/weapon/gripper/no_use/organ(src)
src.modules += new /obj/item/weapon/gripper/medical(src)
- src.modules += new /obj/item/weapon/shockpaddles/robot(src)
+ src.modules += new /obj/item/weapon/shockpaddles/robot/hound(src) //Paws of life
src.modules += new /obj/item/weapon/reagent_containers/dropper(src) // Allows surgeon borg to fix necrosis
src.modules += new /obj/item/weapon/reagent_containers/syringe(src)
- src.emag = new /obj/item/weapon/reagent_containers/spray(src)
- src.emag.reagents.add_reagent("pacid", 250)
- src.emag.name = "Polyacid spray"
+ src.emag = new /obj/item/weapon/dogborg/pounce(src) //Pounce, also, lets not give them polyacid spray
var/datum/matter_synth/water = new /datum/matter_synth(500)
water.name = "Water reserves"
@@ -373,7 +375,7 @@
T.water = water
src.modules += T
- var/obj/item/weapon/reagent_containers/borghypo/hound/H = new /obj/item/weapon/reagent_containers/borghypo/hound/trauma(src)
+ var/obj/item/weapon/reagent_containers/borghypo/hound/trauma/H = new /obj/item/weapon/reagent_containers/borghypo/hound/trauma(src) //surgeon chems
H.water = water
src.modules += H
@@ -381,6 +383,25 @@
B.water = water
src.modules += B
+ var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(10000) //this is so they can do brute/burn surgeries and fix assisted/prosthetic organs
+ synths += medicine
+
+ var/obj/item/stack/nanopaste/N = new /obj/item/stack/nanopaste(src)
+ var/obj/item/stack/medical/advanced/bruise_pack/S = new /obj/item/stack/medical/advanced/bruise_pack(src)
+ var/obj/item/stack/medical/advanced/ointment/O = new /obj/item/stack/medical/advanced/ointment(src)
+ N.uses_charge = 1
+ N.charge_costs = list(1000)
+ N.synths = list(medicine)
+ S.uses_charge = 1
+ S.charge_costs = list(1000)
+ S.synths = list(medicine)
+ O.uses_charge = 1
+ O.charge_costs = list(1000)
+ O.synths = list(medicine)
+ src.modules += N
+ src.modules += S
+ src.modules += O
+
R.icon = 'icons/mob/widerobot_trauma_vr.dmi'
R.wideborg_dept = 'icons/mob/widerobot_trauma_vr.dmi'
R.hands.icon = 'icons/mob/screen1_robot_vr.dmi'
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm
index df0984878e..82c3cfaaa6 100644
--- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm
@@ -8,7 +8,7 @@
In modern times, this exosuit has been dethroned from that title, yet it remains one of the more well built and armored \
exosuits, despite its age.\
\
- During the First Contact War against the Unathi, there was a need for various new technologies to be developed \
+ During the Hegemony War against the Unathi, there was a need for various new technologies to be developed \
to counter the Unathi war machine. One of many solutions created was the Durand, which was made to be heavy and \
well-armored, and be capable of powering the various weapons that could be mounted onto it. Presently, the \
Durand now generally serves as corporate asset protection hardware, due to modern militaries moving on to newer, \
@@ -17,7 +17,7 @@
/mob/living/simple_mob/mechanical/mecha/combat/durand
name = "durand"
- desc = "An aging combat exosuit utilized by many corporations. It was originally developed to fight in the First Contact War."
+ desc = "An aging combat exosuit utilized by many corporations. It was originally developed to fight in the Hegemony War."
catalogue_data = list(/datum/category_item/catalogue/technology/durand)
icon_state = "durand"
movement_cooldown = 10
@@ -70,7 +70,7 @@
return ..()
/mob/living/simple_mob/mechanical/mecha/combat/durand/defensive/mercenary
- desc = "An aging combat exosuit utilized by many corporations. It was originally developed to fight in the First Contact War.\
+ desc = "An aging combat exosuit utilized by many corporations. It was originally developed to fight in the Hegemony War.\
This one has been retrofitted into a turret."
projectiletype = /obj/item/projectile/beam/heavylaser/fakeemitter
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index dc1f1fc219..19476f2460 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -94,6 +94,7 @@
var/list/pinned = list() // List of things pinning this creature to walls (see living_defense.dm)
var/list/embedded = list() // Embedded items, since simple mobs don't have organs.
var/list/languages = list() // For speaking/listening.
+ var/list/language_keys = list() // List of language keys indexing languages
var/species_language = null // For species who want reset to use a specified default.
var/only_species_language = 0 // For species who can only speak their default and no other languages. Does not affect understanding.
var/list/speak_emote = list("says") // Verbs used when speaking. Defaults to 'say' if speak_emote is null.
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index efe2531616..3d9cd13a51 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -604,6 +604,11 @@
if(chosen_language)
if(is_lang_whitelisted(src,chosen_language) || (new_character.species && (chosen_language.name in new_character.species.secondary_langs)))
new_character.add_language(lang)
+ for(var/key in client.prefs.language_custom_keys)
+ if(client.prefs.language_custom_keys[key])
+ var/datum/language/keylang = GLOB.all_languages[client.prefs.language_custom_keys[key]]
+ if(keylang)
+ new_character.language_keys[key] = keylang
// And uncomment this, too.
//new_character.dna.UpdateSE()
diff --git a/code/modules/mob/new_player/sprite_accessories_ear_vr.dm b/code/modules/mob/new_player/sprite_accessories_ear_vr.dm
index f11edd8192..e5f8a6be17 100644
--- a/code/modules/mob/new_player/sprite_accessories_ear_vr.dm
+++ b/code/modules/mob/new_player/sprite_accessories_ear_vr.dm
@@ -9,7 +9,7 @@
name = "You should not see this..."
icon = 'icons/mob/vore/ears_vr.dmi'
do_colouration = 0 // Set to 1 to blend (ICON_ADD) hair color
- species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_GREY_YW, SPECIES_SHADEKIN_YW) //This lets all races use //YW EDIT
+ species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_GREY_YW, SPECIES_SHADEKIN_YW) //This lets all races use //YW EDIT
color_blend_mode = ICON_ADD // Only appliciable if do_coloration = 1
// Species-unique ears
@@ -34,11 +34,11 @@
/datum/sprite_accessory/ears/taj_ears
name = "tajaran, colorable (old)"
- species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use
+ species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This lets all races use
/datum/sprite_accessory/ears/taj_ears_tall
name = "tajaran tall, colorable (old)"
- species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use
+ species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This lets all races use
/datum/sprite_accessory/ears/alt_ram_horns
name = "Solid ram horns"
@@ -389,19 +389,19 @@
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/elfs1
- species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use
+ species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This lets all races use
/datum/sprite_accessory/ears/elfs2
- species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use
+ species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This lets all races use
/datum/sprite_accessory/ears/elfs3
- species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use
+ species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This lets all races use
/datum/sprite_accessory/ears/elfs4
- species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use
+ species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This lets all races use
/datum/sprite_accessory/ears/elfs5
- species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use
+ species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This lets all races use
/datum/sprite_accessory/ears/sleek
name = "sleek ears"
@@ -859,4 +859,4 @@
icon_state = "altevian"
extra_overlay = "altevian-inner"
do_colouration = 1
- color_blend_mode = ICON_MULTIPLY
\ No newline at end of file
+ color_blend_mode = ICON_MULTIPLY
diff --git a/code/modules/mob/new_player/sprite_accessories_tail_vr.dm b/code/modules/mob/new_player/sprite_accessories_tail_vr.dm
index cf9632ccda..80379dd74c 100644
--- a/code/modules/mob/new_player/sprite_accessories_tail_vr.dm
+++ b/code/modules/mob/new_player/sprite_accessories_tail_vr.dm
@@ -9,7 +9,7 @@
name = "You should not see this..."
icon = 'icons/mob/vore/tails_vr.dmi'
do_colouration = 0 //Set to 1 to enable coloration using the tail color.
- species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use
+ species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This lets all races use
var/list/lower_layer_dirs = list(SOUTH)
diff --git a/code/modules/mob/new_player/sprite_accessories_wing_vr.dm b/code/modules/mob/new_player/sprite_accessories_wing_vr.dm
index e96a72bf7f..bb39bc8ce3 100644
--- a/code/modules/mob/new_player/sprite_accessories_wing_vr.dm
+++ b/code/modules/mob/new_player/sprite_accessories_wing_vr.dm
@@ -9,7 +9,7 @@
name = "You should not see this..."
icon = 'icons/mob/vore/wings_vr.dmi'
do_colouration = 0 //Set to 1 to enable coloration using the tail color.
- species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use
+ species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This lets all races use
color_blend_mode = ICON_ADD // Only appliciable if do_coloration = 1
/datum/sprite_accessory/wing/shock //Unable to split the tail from the wings in the sprite, so let's just classify it as wings.
diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm
index 646c82a168..a603ee36f0 100644
--- a/code/modules/mob/say.dm
+++ b/code/modules/mob/say.dm
@@ -180,6 +180,8 @@
// Okay, we're definitely now trying to invoke a language (probably)
// This "[]" is probably unnecessary but BYOND will runtime if a number is used
var/datum/language/L = GLOB.language_keys["[language_key]"]
+ if((language_key in language_keys) && language_keys[language_key])
+ L = language_keys[language_key]
// MULTILINGUAL_SPACE enforces a space after the language key
if(client && (client.prefs.multilingual_mode == MULTILINGUAL_SPACE) && (text2ascii(copytext(selection, 3, 4)) != 32)) // If we're looking for a space and we don't find one
diff --git a/code/modules/nifsoft/nifsoft.dm b/code/modules/nifsoft/nifsoft.dm
index a684c696d7..f4f3135b8e 100644
--- a/code/modules/nifsoft/nifsoft.dm
+++ b/code/modules/nifsoft/nifsoft.dm
@@ -377,32 +377,3 @@
..()
for(var/i = 0 to 7)
new /obj/item/weapon/disk/nifsoft/mining(src)
-
-// Pilot Disk //
-/obj/item/weapon/disk/nifsoft/pilot
- name = "NIFSoft Uploader - Pilot"
- desc = "Contains free NIFSofts useful for pilot members.\n\
- It has a small label: \n\
- \"Portable NIFSoft Installation Media. \n\
- Align ocular port with eye socket and depress red plunger.\""
-
- icon_state = "pilot"
- stored_organic = /datum/nifsoft/package/pilot
- stored_synthetic = /datum/nifsoft/package/pilot_synth
-
-/datum/nifsoft/package/pilot
- software = list(/datum/nifsoft/spare_breath)
-
-/datum/nifsoft/package/pilot_synth
- software = list(/datum/nifsoft/pressure,/datum/nifsoft/heatsinks)
-
-/obj/item/weapon/storage/box/nifsofts_pilot
- name = "pilot nifsoft uploaders"
- desc = "A box of free nifsofts for pilot employees."
- icon = 'icons/obj/boxes.dmi'
- icon_state = "nifsoft_kit_pilot"
-
-/obj/item/weapon/storage/box/nifsofts_pilot/New()
- ..()
- for(var/i = 0 to 7)
- new /obj/item/weapon/disk/nifsoft/pilot(src)
\ No newline at end of file
diff --git a/code/modules/nifsoft/nifsoft_vr.dm b/code/modules/nifsoft/nifsoft_vr.dm
new file mode 100644
index 0000000000..0ea055d35a
--- /dev/null
+++ b/code/modules/nifsoft/nifsoft_vr.dm
@@ -0,0 +1,28 @@
+// Pilot Disk //
+/obj/item/weapon/disk/nifsoft/pilot
+ name = "NIFSoft Uploader - Pilot"
+ desc = "Contains free NIFSofts useful for pilot members.\n\
+ It has a small label: \n\
+ \"Portable NIFSoft Installation Media. \n\
+ Align ocular port with eye socket and depress red plunger.\""
+ icon = 'icons/obj/nanomods_vr.dmi'
+ icon_state = "pilot"
+ stored_organic = /datum/nifsoft/package/pilot
+ stored_synthetic = /datum/nifsoft/package/pilot_synth
+
+/datum/nifsoft/package/pilot
+ software = list(/datum/nifsoft/spare_breath)
+
+/datum/nifsoft/package/pilot_synth
+ software = list(/datum/nifsoft/pressure,/datum/nifsoft/heatsinks)
+
+/obj/item/weapon/storage/box/nifsofts_pilot
+ name = "pilot nifsoft uploaders"
+ desc = "A box of free nifsofts for pilot employees."
+ icon = 'icons/obj/boxes_vr.dmi'
+ icon_state = "nifsoft_kit_pilot"
+
+/obj/item/weapon/storage/box/nifsofts_pilot/New()
+ ..()
+ for(var/i = 0 to 7)
+ new /obj/item/weapon/disk/nifsoft/pilot(src)
\ No newline at end of file
diff --git a/code/modules/power/breaker_box.dm b/code/modules/power/breaker_box.dm
index f8915e08af..e666ba6f57 100644
--- a/code/modules/power/breaker_box.dm
+++ b/code/modules/power/breaker_box.dm
@@ -39,6 +39,9 @@
// Enabled on server startup. Used in substations to keep them in bypass mode.
/obj/machinery/power/breakerbox/activated/Initialize()
. = ..()
+ return INITIALIZE_HINT_LATELOAD
+
+/obj/machinery/power/breakerbox/activated/LateInitialize()
set_state(1)
/obj/machinery/power/breakerbox/examine(mob/user)
diff --git a/code/modules/reagents/reagents/_reagents.dm b/code/modules/reagents/reagents/_reagents.dm
index a2db264456..4e537d69d4 100644
--- a/code/modules/reagents/reagents/_reagents.dm
+++ b/code/modules/reagents/reagents/_reagents.dm
@@ -168,7 +168,7 @@
affect_ingest(M, alien, removed * ingest_abs_mult)
if(CHEM_TOUCH)
affect_touch(M, alien, removed)
- if(overdose && (volume > overdose * M?.species.chemOD_threshold) && (active_metab.metabolism_class != CHEM_TOUCH && !can_overdose_touch))
+ if(overdose && (volume > overdose * M?.species.chemOD_threshold) && (active_metab.metabolism_class != CHEM_TOUCH || can_overdose_touch))
overdose(M, alien, removed)
if(M.species.allergens & allergen_type) //uhoh, we can't handle this!
M.add_chemical_effect(CE_ALLERGEN, allergen_factor * removed)
diff --git a/code/modules/resleeving/autoresleever.dm b/code/modules/resleeving/autoresleever.dm
index b84c978522..63490d0e16 100644
--- a/code/modules/resleeving/autoresleever.dm
+++ b/code/modules/resleeving/autoresleever.dm
@@ -74,21 +74,21 @@
return
var/client/ghost_client = ghost.client
-
+
if(!is_alien_whitelisted(ghost, GLOB.all_species[ghost_client?.prefs?.species]) && !check_rights(R_ADMIN, 0)) // Prevents a ghost ghosting in on a slot and spawning via a resleever with race they're not whitelisted for, getting around normal join restrictions.
to_chat(ghost, "You are not whitelisted to spawn as this species! ")
return
-
+
// Comments out NO_SCAN restriction, as per headmin/maintainer request. // YW EDIT start un-comments
var/datum/species/chosen_species
if(ghost.client.prefs.species) // In case we somehow don't have a species set here.
chosen_species = GLOB.all_species[ghost_client.prefs.species]
-
+
if(chosen_species.flags && NO_SCAN) // Sanity. Prevents species like Xenochimera, Proteans, etc from rejoining the round via resleeve, as they should have their own methods of doing so already, as agreed to when you whitelist as them.
to_chat(ghost, "This species cannot be resleeved! ")
return
// YW EDIT end
-
+
//Name matching is ugly but mind doesn't persist to look at.
var/charjob
var/datum/data/record/record_found
@@ -132,7 +132,7 @@
else
spawn_slots --
return
-
+
if(tgui_alert(ghost, "Would you like to be resleeved?", "Resleeve", list("No","Yes")) == "No")
return
var/mob/living/carbon/human/new_character
@@ -152,7 +152,7 @@
ghost.mind.transfer_to(new_character)
new_character.key = player_key
-
+
//Were they any particular special role? If so, copy.
if(new_character.mind)
new_character.mind.loaded_from_ckey = picked_ckey
@@ -167,6 +167,11 @@
if(chosen_language)
if(is_lang_whitelisted(src,chosen_language) || (new_character.species && (chosen_language.name in new_character.species.secondary_langs)))
new_character.add_language(lang)
+ for(var/key in ghost_client.prefs.language_custom_keys)
+ if(ghost_client.prefs.language_custom_keys[key])
+ var/datum/language/keylang = GLOB.all_languages[ghost_client.prefs.language_custom_keys[key]]
+ if(keylang)
+ new_character.language_keys[key] = keylang
//If desired, apply equipment.
if(equip_body)
diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm
index 4f494192cd..ee11c505b5 100644
--- a/code/modules/vore/eating/belly_obj_vr.dm
+++ b/code/modules/vore/eating/belly_obj_vr.dm
@@ -23,6 +23,8 @@
var/digest_brute = 0.5 // Brute damage per tick in digestion mode
var/digest_burn = 0.5 // Burn damage per tick in digestion mode
var/digest_oxy = 0 // Oxy damage per tick in digestion mode
+ var/digest_tox = 0 // Toxins damage per tick in digestion mode
+ var/digest_clone = 0 // Clone damage per tick in digestion mode
var/immutable = FALSE // Prevents this belly from being deleted
var/escapable = FALSE // Belly can be resisted out of at any time
var/escapetime = 20 SECONDS // Deciseconds, how long to escape this belly
@@ -174,6 +176,8 @@
"digest_brute",
"digest_burn",
"digest_oxy",
+ "digest_tox",
+ "digest_clone",
"immutable",
"can_taste",
"escapable",
@@ -1106,6 +1110,8 @@
dupe.digest_brute = digest_brute
dupe.digest_burn = digest_burn
dupe.digest_oxy = digest_oxy
+ dupe.digest_tox = digest_tox
+ dupe.digest_clone = digest_clone
dupe.immutable = immutable
dupe.can_taste = can_taste
dupe.escapable = escapable
diff --git a/code/modules/vore/eating/bellymodes_datum_vr.dm b/code/modules/vore/eating/bellymodes_datum_vr.dm
index 6eb115e044..80b7830539 100644
--- a/code/modules/vore/eating/bellymodes_datum_vr.dm
+++ b/code/modules/vore/eating/bellymodes_datum_vr.dm
@@ -43,13 +43,19 @@ GLOBAL_LIST_INIT(digest_modes, list())
var/old_brute = L.getBruteLoss()
var/old_burn = L.getFireLoss()
var/old_oxy = L.getOxyLoss()
+ var/old_tox = L.getToxLoss()
+ var/old_clone = L.getCloneLoss()
L.adjustBruteLoss(B.digest_brute)
L.adjustFireLoss(B.digest_burn)
L.adjustOxyLoss(B.digest_oxy)
+ L.adjustToxLoss(B.digest_tox)
+ L.adjustCloneLoss(B.digest_clone)
var/actual_brute = L.getBruteLoss() - old_brute
var/actual_burn = L.getFireLoss() - old_burn
var/actual_oxy = L.getOxyLoss() - old_oxy
- var/damage_gain = (actual_brute + actual_burn + actual_oxy/2)*(B.nutrition_percent / 100)
+ var/actual_tox = L.getToxLoss() - old_tox
+ var/actual_clone = L.getCloneLoss() - old_clone
+ var/damage_gain = (actual_brute + actual_burn + actual_oxy/2 + actual_tox + actual_clone*2)*(B.nutrition_percent / 100)
var/offset = (1 + ((L.weight - 137) / 137)) // 130 pounds = .95 140 pounds = 1.02
var/difference = B.owner.size_multiplier / L.size_multiplier
diff --git a/code/modules/vore/eating/inbelly_spawn.dm b/code/modules/vore/eating/inbelly_spawn.dm
index 39c09554e0..207f3ca4e0 100644
--- a/code/modules/vore/eating/inbelly_spawn.dm
+++ b/code/modules/vore/eating/inbelly_spawn.dm
@@ -161,6 +161,11 @@ Please do not abuse this ability.
if(chosen_language)
if(is_lang_whitelisted(prey,chosen_language) || (new_character.species && (chosen_language.name in new_character.species.secondary_langs)))
new_character.add_language(lang)
+ for(var/key in prey.prefs.language_custom_keys)
+ if(prey.prefs.language_custom_keys[key])
+ var/datum/language/keylang = GLOB.all_languages[prey.prefs.language_custom_keys[key]]
+ if(keylang)
+ new_character.language_keys[key] = keylang
new_character.regenerate_icons()
diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm
index 1512552107..ce078a7384 100644
--- a/code/modules/vore/eating/vorepanel_vr.dm
+++ b/code/modules/vore/eating/vorepanel_vr.dm
@@ -176,6 +176,8 @@
"digest_brute" = selected.digest_brute,
"digest_burn" = selected.digest_burn,
"digest_oxy" = selected.digest_oxy,
+ "digest_tox" = selected.digest_tox,
+ "digest_clone" = selected.digest_clone,
"bulge_size" = selected.bulge_size,
"save_digest_mode" = selected.save_digest_mode,
"display_absorbed_examine" = selected.display_absorbed_examine,
@@ -1095,6 +1097,20 @@
var/new_new_damage = CLAMP(new_damage, 0, 12)
host.vore_selected.digest_oxy = new_new_damage
. = TRUE
+ if("b_tox_dmg")
+ var/new_damage = tgui_input_number(user, "Choose the amount of toxins damage prey will take per tick. Ranges from 0 to 6", "Set Belly Toxins Damage.", host.vore_selected.digest_tox, 6, 0)
+ if(new_damage == null)
+ return FALSE
+ var/new_new_damage = CLAMP(new_damage, 0, 6)
+ host.vore_selected.digest_tox = new_new_damage
+ . = TRUE
+ if("b_clone_dmg")
+ var/new_damage = tgui_input_number(user, "Choose the amount of brute DNA damage (clone) prey will take per tick. Ranges from 0 to 6", "Set Belly Clone Damage.", host.vore_selected.digest_clone, 6, 0)
+ if(new_damage == null)
+ return FALSE
+ var/new_new_damage = CLAMP(new_damage, 0, 6)
+ host.vore_selected.digest_clone = new_new_damage
+ . = TRUE
if("b_emoteactive")
host.vore_selected.emote_active = !host.vore_selected.emote_active
. = TRUE
diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm
index cc16c796c9..ca67610a31 100644
--- a/code/modules/vore/fluffstuff/custom_items_vr.dm
+++ b/code/modules/vore/fluffstuff/custom_items_vr.dm
@@ -1422,6 +1422,31 @@
icon_state = "stamp-midhorror"
stamptext = "This paper has been certified by The Council of Mid Horror"
+//Coolcrow420 - M41l
+/obj/item/weapon/implant/language/fluff/m41l
+ name = "dusty hard drive"
+ desc = "A hard drive containing knowledge of various languages."
+
+/obj/item/weapon/implant/language/fluff/m41l/post_implant(mob/M)
+ to_chat(M,"LANGUAGES - LOADING ")
+ M.add_language(LANGUAGE_SKRELLIAN)
+ M.add_language(LANGUAGE_UNATHI)
+ M.add_language(LANGUAGE_SIIK)
+ M.add_language(LANGUAGE_EAL)
+ M.add_language(LANGUAGE_SCHECHI)
+ M.add_language(LANGUAGE_ZADDAT)
+ M.add_language(LANGUAGE_BIRDSONG)
+ M.add_language(LANGUAGE_SAGARU)
+ M.add_language(LANGUAGE_DAEMON)
+ M.add_language(LANGUAGE_ENOCHIAN)
+ M.add_language(LANGUAGE_VESPINAE)
+// M.add_language(LANGUAGE_SLAVIC)
+ M.add_language(LANGUAGE_DRUDAKAR)
+ M.add_language(LANGUAGE_SPACER)
+ M.add_language(LANGUAGE_TAVAN)
+ M.add_language(LANGUAGE_ECHOSONG)
+ to_chat(M,"LANGUAGES - INITIALISED ")
+
//thedavestdave Lucky
///I know this is pretty bodgey but if it stupid and it works it isn't stupid
/obj/item/clothing/suit/armor/combat/crusader_costume/lucky
diff --git a/code/modules/vore/resizing/sizegun_vr.dm b/code/modules/vore/resizing/sizegun_vr.dm
index 5714234771..f09077ee4b 100644
--- a/code/modules/vore/resizing/sizegun_vr.dm
+++ b/code/modules/vore/resizing/sizegun_vr.dm
@@ -5,8 +5,9 @@
name = "size gun" //I have no idea why this was called shrink ray when this increased and decreased size.
desc = "A highly advanced ray gun with a knob on the side to adjust the size you desire. Warning: Do not insert into mouth."
icon = 'icons/obj/gun_vr.dmi'
- icon_state = "sizegun"
+ icon_state = "sizegun-shrink100"
item_state = "sizegun"
+ var/initial_icon_state = "sizegun"
item_icons = list(slot_l_hand_str = 'icons/mob/items/lefthand_guns_vr.dmi', slot_r_hand_str = 'icons/mob/items/righthand_guns_vr.dmi')
fire_sound = 'sound/weapons/wave.ogg'
charge_cost = 240
@@ -64,8 +65,8 @@
else
ratio = max(round(ratio, 0.25) * 100, 25)
- icon_state = "[initial(icon_state)]-[grow_mode][ratio]"
- item_state = "[initial(icon_state)]-[grow_mode]"
+ icon_state = "[initial_icon_state]-[grow_mode][ratio]"
+ item_state = "[initial_icon_state]-[grow_mode]"
if(!ignore_inhands) update_held_icon()
@@ -82,8 +83,9 @@
creature well beyond any conceivable size. Only a handfull of these \
exist in the known universe and they are \
exclusively owned by NanoTrasen for research purposes."
- icon_state = "sizegun_admin"
+ icon_state = "sizegun_admin-shrink100"
item_state = "sizegun_admin"
+ initial_icon_state = "sizegun_admin"
charge_cost = 0
projectile_type = /obj/item/projectile/beam/sizelaser/admin
@@ -105,8 +107,9 @@
name = "alien size gun"
desc = "A strange looking ray gun weapon with an adjustor knob on the side. The design is alien, but it bares a striking resemblence to the older model size guns that NT uses for research."
catalogue_data = list(/datum/category_item/catalogue/anomalous/precursor_a/alien_sizegun)
- icon_state = "sizegun-abductor"
+ icon_state = "sizegun-abductor-shrink100"
item_state = "sizegun-abductor"
+ initial_icon_state = "sizegun-abductor"
charge_cost = 0
projectile_type = /obj/item/projectile/beam/sizelaser/admin/alien
diff --git a/code/modules/xenoarcheaology/effects/gravitational_waves.dm b/code/modules/xenoarcheaology/effects/gravitational_waves.dm
index d34b352ea0..c22eb87167 100644
--- a/code/modules/xenoarcheaology/effects/gravitational_waves.dm
+++ b/code/modules/xenoarcheaology/effects/gravitational_waves.dm
@@ -1,30 +1,42 @@
-
-/datum/artifact_effect/gravity_wave
+/datum/artifact_effect/extreme/gravity_wave
name = "gravity wave"
effect_type = EFFECT_ENERGY
var/last_wave_pull = 0
+ var/pull_power
effect_state = "gravisphere"
effect_color = "#d8c3ff"
-/datum/artifact_effect/gravity_wave/DoEffectTouch(var/mob/user)
- gravwave(user, effectrange, STAGE_TWO)
+/datum/artifact_effect/extreme/gravity_wave/New()
+ ..()
+ effect_type = pick(EFFECT_ENERGY, EFFECT_BLUESPACE, EFFECT_PSIONIC)
+ switch(pick(100;1, 50;2, 25;3))
+ if(1) //short range
+ effectrange = rand(2, 4)
+ if(2) //medium range
+ effectrange = rand(5, 9)
+ if(3) //large range
+ effectrange = rand(9, 14)
+ pull_power = rand(STAGE_ONE, STAGE_FOUR)
-/datum/artifact_effect/gravity_wave/DoEffectAura()
+/datum/artifact_effect/extreme/gravity_wave/DoEffectTouch(var/mob/user)
+ gravwave(user, effectrange, pull_power)
+
+/datum/artifact_effect/extreme/gravity_wave/DoEffectAura()
var/atom/holder = get_master_holder()
var/seconds_since_last_pull = max(0, round((last_wave_pull - world.time) / 10))
if(prob(10 + seconds_since_last_pull))
holder.visible_message("\The [holder] distorts as local gravity intensifies, and shifts toward it. ")
last_wave_pull = world.time
- gravwave(get_turf(holder), effectrange, STAGE_TWO)
+ gravwave(get_turf(holder), effectrange, pull_power)
-/datum/artifact_effect/gravity_wave/DoEffectPulse()
+/datum/artifact_effect/extreme/gravity_wave/DoEffectPulse()
var/atom/holder = get_master_holder()
holder.visible_message("\The [holder] distorts as local gravity intensifies, and shifts toward it. ")
- gravwave(get_turf(holder), effectrange, STAGE_TWO)
+ gravwave(get_turf(holder), effectrange, pull_power)
-/proc/gravwave(var/atom/target, var/pull_range = 7, var/pull_power = STAGE_TWO)
+/datum/artifact_effect/extreme/gravity_wave/proc/gravwave(var/atom/target, var/pull_range = 7, var/pull_power = STAGE_TWO)
for(var/atom/A in oview(pull_range, target))
A.singularity_pull(target, pull_power)
diff --git a/icons/inventory/accessory/item_vr.dmi b/icons/inventory/accessory/item_vr.dmi
index 91e3c4e7d6..a21b81c2b4 100644
Binary files a/icons/inventory/accessory/item_vr.dmi and b/icons/inventory/accessory/item_vr.dmi differ
diff --git a/icons/inventory/uniform/mob.dmi b/icons/inventory/uniform/mob.dmi
index d368c3a4d7..8d89071753 100644
Binary files a/icons/inventory/uniform/mob.dmi and b/icons/inventory/uniform/mob.dmi differ
diff --git a/icons/mob/drakeborg/drakeborg_vr.dmi b/icons/mob/drakeborg/drakeborg_vr.dmi
index 1be714814b..56a79ce19c 100644
Binary files a/icons/mob/drakeborg/drakeborg_vr.dmi and b/icons/mob/drakeborg/drakeborg_vr.dmi differ
diff --git a/icons/mob/human_races/r_skrell_vr.dmi b/icons/mob/human_races/r_skrell_vr.dmi
index ef6688b026..de1775db3a 100644
Binary files a/icons/mob/human_races/r_skrell_vr.dmi and b/icons/mob/human_races/r_skrell_vr.dmi differ
diff --git a/icons/obj/boxes.dmi b/icons/obj/boxes.dmi
index 948cb472da..4cfbd48c04 100644
Binary files a/icons/obj/boxes.dmi and b/icons/obj/boxes.dmi differ
diff --git a/icons/obj/boxes_vr.dmi b/icons/obj/boxes_vr.dmi
new file mode 100644
index 0000000000..c64a7e5017
Binary files /dev/null and b/icons/obj/boxes_vr.dmi differ
diff --git a/icons/obj/food_vr.dmi b/icons/obj/food_vr.dmi
index 64b55a6b26..f40c7061f9 100644
Binary files a/icons/obj/food_vr.dmi and b/icons/obj/food_vr.dmi differ
diff --git a/icons/obj/nanomods.dmi b/icons/obj/nanomods.dmi
index f957c63983..c3e5216602 100644
Binary files a/icons/obj/nanomods.dmi and b/icons/obj/nanomods.dmi differ
diff --git a/icons/obj/nanomods_vr.dmi b/icons/obj/nanomods_vr.dmi
new file mode 100644
index 0000000000..95221599a7
Binary files /dev/null and b/icons/obj/nanomods_vr.dmi differ
diff --git a/icons/obj/trash_vr.dmi b/icons/obj/trash_vr.dmi
index 2c7fed4c7a..5df83d142b 100644
Binary files a/icons/obj/trash_vr.dmi and b/icons/obj/trash_vr.dmi differ
diff --git a/icons/obj/vending_vr.dmi b/icons/obj/vending_vr.dmi
index f540d4d55b..a11ef2b241 100644
Binary files a/icons/obj/vending_vr.dmi and b/icons/obj/vending_vr.dmi differ
diff --git a/interface/skin.dmf b/interface/skin.dmf
index b0819019ca..caa41f8567 100644
--- a/interface/skin.dmf
+++ b/interface/skin.dmf
@@ -1,1528 +1,1528 @@
-macro "borghotkeymode"
- elem
- name = "TAB"
- command = ".winset \"mainwindow.macro=borgmacro hotkey_toggle.is-checked=false input.focus=true input.background-color=#D3B5B5\""
- elem
- name = "Shift"
- command = "KeyDown Shift"
- elem
- name = "Shift+UP"
- command = "KeyUp Shift"
- elem
- name = "Ctrl"
- command = "KeyDown Ctrl"
- elem
- name = "Ctrl+UP"
- command = "KeyUp Ctrl"
- elem
- name = "Alt"
- command = "KeyDown Alt"
- elem
- name = "Alt+UP"
- command = "KeyUp Alt"
- elem
- name = "NORTHEAST"
- command = ".northeast"
- elem
- name = "SOUTHEAST"
- command = ".southeast"
- elem
- name = "SOUTHWEST"
- command = ".southwest"
- elem
- name = "NORTHWEST"
- command = ".northwest"
- elem
- name = "ALT+WEST"
- command = "westfaceperm"
- elem
- name = "CTRL+WEST"
- command = "westface"
- elem
- name = "West"
- command = "KeyDown West"
- elem
- name = "West+UP"
- command = "KeyUp West"
- elem
- name = "ALT+NORTH"
- command = "northfaceperm"
- elem
- name = "CTRL+NORTH"
- command = "northface"
- elem
- name = "North"
- command = "KeyDown North"
- elem
- name = "North+UP"
- command = "KeyUp North"
- elem
- name = "ALT+EAST"
- command = "eastfaceperm"
- elem
- name = "CTRL+EAST"
- command = "eastface"
- elem
- name = "East"
- command = "KeyDown East"
- elem
- name = "East+UP"
- command = "KeyUp East"
- elem
- name = "ALT+SOUTH"
- command = "southfaceperm"
- elem
- name = "CTRL+SOUTH"
- command = "southface"
- elem
- name = "South"
- command = "KeyDown South"
- elem
- name = "South+UP"
- command = "KeyUp South"
- elem
- name = "CTRL+SHIFT+NORTH"
- command = "shiftnorth"
- elem
- name = "CTRL+SHIFT+SOUTH"
- command = "shiftsouth"
- elem
- name = "CTRL+SHIFT+WEST"
- command = "shiftwest"
- elem
- name = "CTRL+SHIFT+EAST"
- command = "shifteast"
- elem
- name = "INSERT"
- command = "a-intent right"
- elem
- name = "DELETE"
- command = "delete-key-pressed"
- elem
- name = "1"
- command = "toggle-module 1"
- elem
- name = "CTRL+1"
- command = "toggle-module 1"
- elem
- name = "2"
- command = "toggle-module 2"
- elem
- name = "CTRL+2"
- command = "toggle-module 2"
- elem
- name = "3"
- command = "toggle-module 3"
- elem
- name = "CTRL+3"
- command = "toggle-module 3"
- elem
- name = "4"
- command = "a-intent left"
- elem
- name = "CTRL+4"
- command = "a-intent left"
- elem
- name = "5"
- command = ".me"
- elem
- name = "6"
- command = ".Subtle"
- elem
- name = "A"
- command = "KeyDown A"
- elem
- name = "A+UP"
- command = "KeyUp A"
- elem
- name = "D"
- command = "KeyDown D"
- elem
- name = "D+UP"
- command = "KeyUp D"
- elem
- name = "F"
- command = "a-intent left"
- elem
- name = "CTRL+F"
- command = "a-intent left"
- elem
- name = "G"
- command = "a-intent right"
- elem
- name = "CTRL+G"
- command = "a-intent right"
- elem
- name = "J"
- command = "toggle-gun-mode"
- elem
- name = "CTRL+J"
- command = "toggle-gun-mode"
- elem
- name = "Q"
- command = "unequip-module"
- elem
- name = "CTRL+Q"
- command = "unequip-module"
- elem
- name = "R"
- command = ".southwest"
- elem
- name = "CTRL+R"
- command = ".southwest"
- elem "s_key"
- name = "S"
- command = "KeyDown S"
- elem
- name = "S+UP"
- command = "KeyUp S"
- elem
- name = "T"
- command = ".say"
- elem "w_key"
- name = "W"
- command = "KeyDown W"
- elem
- name = "W+UP"
- command = "KeyUp W"
- elem
- name = "X"
- command = ".northeast"
- elem
- name = "CTRL+X"
- command = ".northeast"
- elem
- name = "Y"
- command = ".Whisper"
- elem
- name = "CTRL+Y"
- command = ".Whisper"
- elem
- name = "Z"
- command = "Activate-Held-Object"
- elem
- name = "CTRL+Z"
- command = "Activate-Held-Object"
- elem
- name = "U"
- command = "Rest"
- elem
- name = "NUMPAD1"
- command = "body-r-leg"
- elem
- name = "NUMPAD2"
- command = "body-groin"
- elem
- name = "NUMPAD3"
- command = "body-l-leg"
- elem
- name = "NUMPAD4"
- command = "body-r-arm"
- elem
- name = "NUMPAD5"
- command = "body-chest"
- elem
- name = "NUMPAD6"
- command = "body-l-arm"
- elem
- name = "NUMPAD8"
- command = "body-toggle-head"
- elem
- name = "F1"
- command = "adminhelp"
- elem
- name = "CTRL+SHIFT+F1+REP"
- command = ".options"
- elem
- name = "F2"
- command = "ooc"
- elem
- name = "F2+REP"
- command = ".screenshot auto"
- elem
- name = "SHIFT+F2+REP"
- command = ".screenshot"
- elem
- name = "F3"
- command = ".say"
- elem
- name = "F4"
- command = ".me"
- elem
- name = "F5"
- command = "asay"
- elem
- name = "F6"
- command = "Player-Panel-New"
- elem
- name = "F7"
- command = "Admin-PM"
- elem
- name = "F8"
- command = "Invisimin"
- elem
- name = "F12"
- command = "F12"
-
-macro "macro"
- elem
- name = "TAB"
- command = ".winset \"mainwindow.macro=hotkeymode hotkey_toggle.is-checked=true mapwindow.map.focus=true\""
- elem
- name = "Shift"
- command = "KeyDown Shift"
- elem
- name = "Shift+UP"
- command = "KeyUp Shift"
- elem
- name = "Ctrl"
- command = "KeyDown Ctrl"
- elem
- name = "Ctrl+UP"
- command = "KeyUp Ctrl"
- elem
- name = "Alt"
- command = "KeyDown Alt"
- elem
- name = "Alt+UP"
- command = "KeyUp Alt"
- elem
- name = "NORTHEAST"
- command = ".northeast"
- elem
- name = "SOUTHEAST"
- command = ".southeast"
- elem
- name = "SOUTHWEST"
- command = ".southwest"
- elem
- name = "NORTHWEST"
- command = ".northwest"
- elem
- name = "ALT+WEST"
- command = "westfaceperm"
- elem
- name = "CTRL+WEST"
- command = "westface"
- elem
- name = "West"
- command = "KeyDown West"
- elem
- name = "West+UP"
- command = "KeyUp West"
- elem
- name = "ALT+NORTH"
- command = "northfaceperm"
- elem
- name = "CTRL+NORTH"
- command = "northface"
- elem
- name = "North"
- command = "KeyDown North"
- elem
- name = "North+UP"
- command = "KeyUp North"
- elem
- name = "ALT+EAST"
- command = "eastfaceperm"
- elem
- name = "CTRL+EAST"
- command = "eastface"
- elem
- name = "East"
- command = "KeyDown East"
- elem
- name = "East+UP"
- command = "KeyUp East"
- elem
- name = "ALT+SOUTH"
- command = "southfaceperm"
- elem
- name = "CTRL+SOUTH"
- command = "southface"
- elem
- name = "South"
- command = "KeyDown South"
- elem
- name = "South+UP"
- command = "KeyUp South"
- elem
- name = "CTRL+SHIFT+NORTH"
- command = "shiftnorth"
- elem
- name = "CTRL+SHIFT+SOUTH"
- command = "shiftsouth"
- elem
- name = "CTRL+SHIFT+WEST"
- command = "shiftwest"
- elem
- name = "CTRL+SHIFT+EAST"
- command = "shifteast"
- elem
- name = "INSERT"
- command = "a-intent right"
- elem
- name = "DELETE"
- command = "delete-key-pressed"
- elem
- name = "CTRL+1"
- command = "a-intent help"
- elem
- name = "CTRL+2"
- command = "a-intent disarm"
- elem
- name = "CTRL+3"
- command = "a-intent grab"
- elem
- name = "CTRL+4"
- command = "a-intent harm"
- elem
- name = "CTRL+A"
- command = "KeyDown A"
- elem
- name = "CTRL+A+UP"
- command = "KeyUp A"
- elem
- name = "CTRL+D"
- command = "KeyDown D"
- elem
- name = "CTRL+D+UP"
- command = "KeyUp D"
- elem
- name = "CTRL+E"
- command = "quick-equip"
- elem
- name = "CTRL+F"
- command = "a-intent left"
- elem
- name = "CTRL+G"
- command = "a-intent right"
- elem
- name = "CTRL+Q"
- command = ".northwest"
- elem
- name = "CTRL+R"
- command = ".southwest"
- elem
- name = "CTRL+S"
- command = "KeyDown S"
- elem
- name = "CTRL+S+UP"
- command = "KeyUp S"
- elem
- name = "CTRL+W"
- command = "KeyDown W"
- elem
- name = "CTRL+W+UP"
- command = "KeyUp W"
- elem
- name = "CTRL+X"
- command = ".northeast"
- elem
- name = "CTRL+Y"
- command = "Activate-Held-Object"
- elem
- name = "CTRL+Z"
- command = "Activate-Held-Object"
- elem
- name = "CTRL+U"
- command = "Rest"
- elem
- name = "CTRL+B"
- command = "Resist"
- elem
- name = "CTRL+NUMPAD1"
- command = "body-r-leg"
- elem
- name = "CTRL+NUMPAD2"
- command = "body-groin"
- elem
- name = "CTRL+NUMPAD3"
- command = "body-l-leg"
- elem
- name = "CTRL+NUMPAD4"
- command = "body-r-arm"
- elem
- name = "CTRL+NUMPAD5"
- command = "body-chest"
- elem
- name = "CTRL+NUMPAD6"
- command = "body-l-arm"
- elem
- name = "CTRL+NUMPAD8"
- command = "body-toggle-head"
- elem
- name = "F1"
- command = "adminhelp"
- elem
- name = "CTRL+SHIFT+F1+REP"
- command = ".options"
- elem
- name = "F2"
- command = "ooc"
- elem
- name = "F2+REP"
- command = ".screenshot auto"
- elem
- name = "SHIFT+F2+REP"
- command = ".screenshot"
- elem
- name = "F3"
- command = ".say"
- elem
- name = "F4"
- command = ".me"
- elem
- name = "F5"
- command = "asay"
- elem
- name = "F6"
- command = "Player-Panel-New"
- elem
- name = "F7"
- command = "Admin-PM"
- elem
- name = "F8"
- command = "Invisimin"
- elem
- name = "F12"
- command = "F12"
-
-macro "hotkeymode"
- elem
- name = "TAB"
- command = ".winset \"mainwindow.macro=macro hotkey_toggle.is-checked=false input.focus=true\""
- elem
- name = "Shift"
- command = "KeyDown Shift"
- elem
- name = "Shift+UP"
- command = "KeyUp Shift"
- elem
- name = "Ctrl"
- command = "KeyDown Ctrl"
- elem
- name = "Ctrl+UP"
- command = "KeyUp Ctrl"
- elem
- name = "Alt"
- command = "KeyDown Alt"
- elem
- name = "Alt+UP"
- command = "KeyUp Alt"
- elem
- name = "NORTHEAST"
- command = ".northeast"
- elem
- name = "SOUTHEAST"
- command = ".southeast"
- elem
- name = "SOUTHWEST"
- command = ".southwest"
- elem
- name = "NORTHWEST"
- command = ".northwest"
- elem
- name = "ALT+WEST"
- command = "westfaceperm"
- elem
- name = "CTRL+WEST"
- command = "westface"
- elem
- name = "West"
- command = "KeyDown West"
- elem
- name = "West+UP"
- command = "KeyUp West"
- elem
- name = "ALT+NORTH"
- command = "northfaceperm"
- elem
- name = "CTRL+NORTH"
- command = "northface"
- elem
- name = "North"
- command = "KeyDown North"
- elem
- name = "North+UP"
- command = "KeyUp North"
- elem
- name = "ALT+EAST"
- command = "eastfaceperm"
- elem
- name = "CTRL+EAST"
- command = "eastface"
- elem
- name = "East"
- command = "KeyDown East"
- elem
- name = "East+UP"
- command = "KeyUp East"
- elem
- name = "ALT+SOUTH"
- command = "southfaceperm"
- elem
- name = "CTRL+SOUTH"
- command = "southface"
- elem
- name = "South"
- command = "KeyDown South"
- elem
- name = "South+UP"
- command = "KeyUp South"
- elem
- name = "CTRL+SHIFT+NORTH"
- command = "shiftnorth"
- elem
- name = "CTRL+SHIFT+SOUTH"
- command = "shiftsouth"
- elem
- name = "CTRL+SHIFT+WEST"
- command = "shiftwest"
- elem
- name = "CTRL+SHIFT+EAST"
- command = "shifteast"
- elem
- name = "INSERT"
- command = "a-intent right"
- elem
- name = "DELETE"
- command = "delete-key-pressed"
- elem
- name = "1"
- command = "a-intent help"
- elem
- name = "CTRL+1"
- command = "a-intent help"
- elem
- name = "2"
- command = "a-intent disarm"
- elem
- name = "CTRL+2"
- command = "a-intent disarm"
- elem
- name = "3"
- command = "a-intent grab"
- elem
- name = "CTRL+3"
- command = "a-intent grab"
- elem
- name = "4"
- command = "a-intent harm"
- elem
- name = "CTRL+4"
- command = "a-intent harm"
- elem
- name = "5"
- command = ".me"
- elem
- name = "6"
- command = ".Subtle"
- elem
- name = "A"
- command = "KeyDown A"
- elem
- name = "A+UP"
- command = "KeyUp A"
- elem
- name = "D"
- command = "KeyDown D"
- elem
- name = "D+UP"
- command = "KeyUp D"
- elem
- name = "E"
- command = "quick-equip"
- elem
- name = "CTRL+E"
- command = "quick-equip"
- elem
- name = "F"
- command = "a-intent left"
- elem
- name = "CTRL+F"
- command = "a-intent left"
- elem
- name = "G"
- command = "a-intent right"
- elem
- name = "CTRL+G"
- command = "a-intent right"
- elem
- name = "H"
- command = "holster"
- elem
- name = "CTRL+H"
- command = "holster"
- elem
- name = "J"
- command = "toggle-gun-mode"
- elem
- name = "CTRL+J"
- command = "toggle-gun-mode"
- elem
- name = "Q"
- command = ".northwest"
- elem
- name = "CTRL+Q"
- command = ".northwest"
- elem
- name = "R"
- command = ".southwest"
- elem
- name = "CTRL+R"
- command = ".southwest"
- elem "s_key"
- name = "S"
- command = "KeyDown S"
- elem
- name = "S+UP"
- command = "KeyUp S"
- elem
- name = "T"
- command = ".say"
- elem "w_key"
- name = "W"
- command = "KeyDown W"
- elem
- name = "W+UP"
- command = "KeyUp W"
- elem
- name = "X"
- command = ".northeast"
- elem
- name = "CTRL+X"
- command = ".northeast"
- elem
- name = "Y"
- command = ".Whisper"
- elem
- name = "CTRL+Y"
- command = ".Whisper"
- elem
- name = "Z"
- command = "Activate-Held-Object"
- elem
- name = "CTRL+Z"
- command = "Activate-Held-Object"
- elem
- name = "U"
- command = "Rest"
- elem
- name = "B"
- command = "Resist"
- elem
- name = "NUMPAD1"
- command = "body-r-leg"
- elem
- name = "NUMPAD2"
- command = "body-groin"
- elem
- name = "NUMPAD3"
- command = "body-l-leg"
- elem
- name = "NUMPAD4"
- command = "body-r-arm"
- elem
- name = "NUMPAD5"
- command = "body-chest"
- elem
- name = "NUMPAD6"
- command = "body-l-arm"
- elem
- name = "NUMPAD8"
- command = "body-toggle-head"
- elem
- name = "F1"
- command = "adminhelp"
- elem
- name = "CTRL+SHIFT+F1+REP"
- command = ".options"
- elem
- name = "F2"
- command = "ooc"
- elem
- name = "F2+REP"
- command = ".screenshot auto"
- elem
- name = "SHIFT+F2+REP"
- command = ".screenshot"
- elem
- name = "F3"
- command = ".say"
- elem
- name = "F4"
- command = ".me"
- elem
- name = "F5"
- command = "asay"
- elem
- name = "F6"
- command = "Player-Panel-New"
- elem
- name = "F7"
- command = "Admin-PM"
- elem
- name = "F8"
- command = "Invisimin"
- elem
- name = "F12"
- command = "F12"
-
-macro "borgmacro"
- elem
- name = "TAB"
- command = ".winset \"mainwindow.macro=borghotkeymode hotkey_toggle.is-checked=true mapwindow.map.focus=true input.background-color=#F0F0F0\""
- elem
- name = "Shift"
- command = "KeyDown Shift"
- elem
- name = "Shift+UP"
- command = "KeyUp Shift"
- elem
- name = "Ctrl"
- command = "KeyDown Ctrl"
- elem
- name = "Ctrl+UP"
- command = "KeyUp Ctrl"
- elem
- name = "Alt"
- command = "KeyDown Alt"
- elem
- name = "Alt+UP"
- command = "KeyUp Alt"
- elem
- name = "NORTHEAST"
- command = ".northeast"
- elem
- name = "SOUTHEAST"
- command = ".southeast"
- elem
- name = "SOUTHWEST"
- command = ".southwest"
- elem
- name = "NORTHWEST"
- command = ".northwest"
- elem
- name = "ALT+WEST"
- command = "westfaceperm"
- elem
- name = "CTRL+WEST"
- command = "westface"
- elem
- name = "West"
- command = "KeyDown West"
- elem
- name = "West+UP"
- command = "KeyUp West"
- elem
- name = "ALT+NORTH"
- command = "northfaceperm"
- elem
- name = "CTRL+NORTH"
- command = "northface"
- elem
- name = "North"
- command = "KeyDown North"
- elem
- name = "North+UP"
- command = "KeyUp North"
- elem
- name = "ALT+EAST"
- command = "eastfaceperm"
- elem
- name = "CTRL+EAST"
- command = "eastface"
- elem
- name = "East"
- command = "KeyDown East"
- elem
- name = "East+UP"
- command = "KeyUp East"
- elem
- name = "ALT+SOUTH"
- command = "southfaceperm"
- elem
- name = "CTRL+SOUTH"
- command = "southface"
- elem
- name = "South"
- command = "KeyDown South"
- elem
- name = "South+UP"
- command = "KeyUp South"
- elem
- name = "CTRL+SHIFT+NORTH"
- command = "shiftnorth"
- elem
- name = "CTRL+SHIFT+SOUTH"
- command = "shiftsouth"
- elem
- name = "CTRL+SHIFT+WEST"
- command = "shiftwest"
- elem
- name = "CTRL+SHIFT+EAST"
- command = "shifteast"
- elem
- name = "INSERT"
- command = "a-intent right"
- elem
- name = "DELETE"
- command = "delete-key-pressed"
- elem
- name = "CTRL+1"
- command = "toggle-module 1"
- elem
- name = "CTRL+2"
- command = "toggle-module 2"
- elem
- name = "CTRL+3"
- command = "toggle-module 3"
- elem
- name = "CTRL+4"
- command = "a-intent left"
- elem
- name = "CTRL+A"
- command = "KeyDown A"
- elem
- name = "CTRL+A+UP"
- command = "KeyUp A"
- elem
- name = "CTRL+D"
- command = "KeyDown D"
- elem
- name = "CTRL+D+UP"
- command = "KeyUp D"
- elem
- name = "CTRL+F"
- command = "a-intent left"
- elem
- name = "CTRL+G"
- command = "a-intent right"
- elem
- name = "CTRL+Q"
- command = ".northwest"
- elem
- name = "CTRL+R"
- command = ".southwest"
- elem
- name = "CTRL+S"
- command = "KeyDown S"
- elem
- name = "CTRL+S+UP"
- command = "KeyUp S"
- elem
- name = "CTRL+W"
- command = "KeyDown W"
- elem
- name = "CTRL+W+UP"
- command = "KeyUp W"
- elem
- name = "CTRL+X"
- command = ".northeast"
- elem
- name = "CTRL+Y"
- command = "Activate-Held-Object"
- elem
- name = "CTRL+Z"
- command = "Activate-Held-Object"
- elem
- name = "CTRL+U"
- command = "Rest"
- elem
- name = "CTRL+NUMPAD1"
- command = "body-r-leg"
- elem
- name = "CTRL+NUMPAD2"
- command = "body-groin"
- elem
- name = "CTRL+NUMPAD3"
- command = "body-l-leg"
- elem
- name = "CTRL+NUMPAD4"
- command = "body-r-arm"
- elem
- name = "CTRL+NUMPAD5"
- command = "body-chest"
- elem
- name = "CTRL+NUMPAD6"
- command = "body-l-arm"
- elem
- name = "CTRL+NUMPAD8"
- command = "body-toggle-head"
- elem
- name = "F1"
- command = "adminhelp"
- elem
- name = "CTRL+SHIFT+F1+REP"
- command = ".options"
- elem
- name = "F2"
- command = "ooc"
- elem
- name = "F2+REP"
- command = ".screenshot auto"
- elem
- name = "SHIFT+F2+REP"
- command = ".screenshot"
- elem
- name = "F3"
- command = ".say"
- elem
- name = "F4"
- command = ".me"
- elem
- name = "F5"
- command = "asay"
- elem
- name = "F6"
- command = "Player-Panel-New"
- elem
- name = "F7"
- command = "Admin-PM"
- elem
- name = "F8"
- command = "Invisimin"
- elem
- name = "F12"
- command = "F12"
-
-
-menu "menu"
- elem
- name = "&File"
- command = ""
- saved-params = "is-checked"
- elem
- name = "&Quick screenshot\tF2"
- command = ".screenshot auto"
- category = "&File"
- saved-params = "is-checked"
- elem
- name = "&Save screenshot as...\tShift+F2"
- command = ".screenshot"
- category = "&File"
- saved-params = "is-checked"
- elem
- name = "&Reconnect"
- command = ".reconnect"
- category = "&File"
- saved-params = "is-checked"
- elem
- name = "&Check ping"
- command = ".ping"
- category = "&File"
- saved-params = "is-checked"
- elem
- name = ""
- command = ""
- category = "&File"
- saved-params = "is-checked"
- elem
- name = "&Quit"
- command = ".quit"
- category = "&File"
- saved-params = "is-checked"
- elem
- name = "&Icons"
- command = ""
- saved-params = "is-checked"
- elem "stretch"
- name = "&Stretch to fit"
- command = ".winset \"mapwindow.map.icon-size=0\""
- category = "&Icons"
- is-checked = true
- can-check = true
- group = "size"
- saved-params = "is-checked"
- elem "icon128"
- name = "&128x128"
- command = ".winset \"mapwindow.map.icon-size=128\""
- category = "&Icons"
- can-check = true
- group = "size"
- saved-params = "is-checked"
- elem "icon96"
- name = "&96x96"
- command = ".winset \"mapwindow.map.icon-size=96\""
- category = "&Icons"
- can-check = true
- group = "size"
- saved-params = "is-checked"
- elem "icon64"
- name = "&64x64"
- command = ".winset \"mapwindow.map.icon-size=64\""
- category = "&Icons"
- can-check = true
- group = "size"
- saved-params = "is-checked"
- elem "icon48"
- name = "&48x48"
- command = ".winset \"mapwindow.map.icon-size=48\""
- category = "&Icons"
- can-check = true
- group = "size"
- saved-params = "is-checked"
- elem "icon32"
- name = "&32x32"
- command = ".winset \"mapwindow.map.icon-size=32\""
- category = "&Icons"
- can-check = true
- group = "size"
- saved-params = "is-checked"
- elem
- name = ""
- command = ""
- category = "&Icons"
- saved-params = "is-checked"
- elem "textmode"
- name = "&Text"
- command = ".winset \"menu.textmode.is-checked=true?mapwindow.map.text-mode=true:mapwindow.map.text-mode=false\""
- category = "&Icons"
- can-check = true
- saved-params = "is-checked"
- elem
- name = "&Scaling"
- command = ""
- saved-params = "is-checked"
- elem "nearest-neighbor"
- name = "&Nearest Neighbor"
- command = ".winset \"mapwindow.map.zoom-mode=distort\""
- category = "&Scaling"
- can-check = true
- group = "scale"
- saved-params = "is-checked"
- elem "point-sample"
- name = "&Point Sampling"
- command = ".winset \"mapwindow.map.zoom-mode=normal\""
- category = "&Scaling"
- can-check = true
- group = "scale"
- saved-params = "is-checked"
- elem "blur"
- name = "&Blur"
- command = ".winset \"mapwindow.map.zoom-mode=blur\""
- category = "&Scaling"
- can-check = true
- group = "scale"
- saved-params = "is-checked"
- elem
- name = "&Help"
- command = ""
- saved-params = "is-checked"
- elem
- name = "&Admin help\tF1"
- command = "adminhelp"
- category = "&Help"
- saved-params = "is-checked"
- elem
- name = "&Hotkeys"
- command = "hotkeys-help"
- category = "&Help"
- saved-params = "is-checked"
-
-window "mainwindow"
- elem "mainwindow"
- type = MAIN
- pos = 281,0
- size = 640x440
- anchor1 = -1,-1
- anchor2 = -1,-1
- is-default = true
- saved-params = "pos;size;is-minimized;is-maximized"
- title = "Yawn Wider Station" //YW EDIT
- is-maximized = true
- icon = 'icons\\ywicon.png' //YW EDIT
- macro = "macro"
- menu = "menu"
- elem "asset_cache_browser"
- type = BROWSER
- pos = 0,0
- size = 200x200
- anchor1 = -1,-1
- anchor2 = -1,-1
- is-visible = false
- saved-params = ""
- elem "hotkey_toggle"
- type = BUTTON
- pos = 560,420
- size = 80x20
- anchor1 = 100,100
- anchor2 = -1,-1
- saved-params = ""
- text = "Hotkey Toggle"
- command = ".winset \"mainwindow.macro!=macro ? mainwindow.macro=macro hotkey_toggle.is-checked=false input.focus=true : mainwindow.macro=hotkeymode hotkey_toggle.is-checked=true mapwindow.map.focus=true\""
- button-type = pushbox
- elem "mainvsplit"
- type = CHILD
- pos = 3,0
- size = 634x416
- anchor1 = 0,0
- anchor2 = 100,100
- saved-params = "splitter"
- right = "rpane"
- is-vert = true
- elem "input"
- type = INPUT
- pos = 3,420
- size = 517x20
- anchor1 = 0,100
- anchor2 = 100,100
- background-color = #d3b5b5
- is-default = true
- border = sunken
- saved-params = "command"
- elem "saybutton"
- type = BUTTON
- pos = 520,420
- size = 40x20
- anchor1 = 100,100
- anchor2 = -1,-1
- saved-params = "is-checked"
- text = "Chat"
- command = ".winset \"saybutton.is-checked=true?input.command=\"!say \\\"\" macrobutton.is-checked=false:input.command=\""
- button-type = pushbox
- elem "tooltip"
- type = BROWSER
- pos = 0,0
- size = 999x999
- anchor1 = -1,-1
- anchor2 = -1,-1
- is-visible = false
- saved-params = ""
-
-window "mapwindow"
- elem "mapwindow"
- type = MAIN
- pos = 281,0
- size = 640x480
- anchor1 = -1,-1
- anchor2 = -1,-1
- saved-params = "pos;size;is-minimized;is-maximized"
- titlebar = false
- statusbar = false
- can-close = false
- can-minimize = false
- can-resize = false
- is-pane = true
- elem "map"
- type = MAP
- pos = 0,0
- size = 640x480
- anchor1 = 0,0
- anchor2 = 100,100
- font-family = "Arial Rounded MT Bold,Arial Black,Arial,sans-serif"
- font-size = 7
- text-color = none
- is-default = true
- saved-params = "icon-size"
- on-show = ".winset\"mainwindow.mainvsplit.left=mapwindow\""
- on-hide = ".winset\"mainwindow.mainvsplit.left=\""
- style = ".center { text-align: center; } .runechatdiv {background-color: #20202070} .black_outline { -dm-text-outline: 1px black } .boldtext { font-weight: bold; } .maptext { font-family: 'Small Fonts'; font-size: 7px; color: white; line-height: 1.1; } .command_headset { font-weight: bold;\tfont-size: 8px; } .small { font-size: 6px; } .very_small { font-size: 5px;} .big { font-size: 8px; } .reallybig { font-size: 8px; } .extremelybig { font-size: 8px; } .greentext { color: #00FF00; font-size: 7px; } .redtext { color: #FF0000; font-size: 7px; } .clown { color: #FF69Bf; font-size: 7px; font-weight: bold; } .his_grace { color: #15D512; } .hypnophrase { color: #0d0d0d; font-weight: bold; } .yell { font-weight: bold; } .italics { font-size: 7px; font-style: italic; }"
-
-window "outputwindow"
- elem "outputwindow"
- type = MAIN
- pos = 281,0
- size = 640x480
- anchor1 = -1,-1
- anchor2 = -1,-1
- saved-params = "pos;size;is-minimized;is-maximized"
- titlebar = false
- statusbar = false
- can-close = false
- can-minimize = false
- can-resize = false
- is-pane = true
- elem "chatloadlabel"
- type = LABEL
- pos = 0,0
- size = 640x480
- anchor1 = 0,0
- anchor2 = 100,100
- font-family = "sans-serif"
- font-size = 24
- font-style = "bold"
- text-color = #ffffff
- background-color = #222222
- saved-params = ""
- text = "Chat is loading.\nIf nothing happens after 20s,\nuse OOC > \"Reload VChat\"."
- elem "htmloutput"
- type = BROWSER
- pos = 0,0
- size = 640x480
- anchor1 = 0,0
- anchor2 = 100,100
- is-visible = false
- saved-params = ""
- elem "oldoutput"
- type = OUTPUT
- pos = 0,0
- size = 640x480
- anchor1 = 0,0
- anchor2 = 100,100
- is-visible = false
- is-default = true
- saved-params = ""
- style = ".system {color:#FF0000;}"
- enable-http-images = true
- max-lines = 0
-
-window "rpane"
- elem "rpane"
- type = MAIN
- pos = 281,0
- size = 640x480
- anchor1 = -1,-1
- anchor2 = -1,-1
- background-color = none
- saved-params = "pos;size;is-minimized;is-maximized"
- is-pane = true
- outer-size = 656x538
- inner-size = 640x499
- elem "rpanewindow"
- type = CHILD
- pos = 0,-3
- size = 640x499
- anchor1 = 0,0
- anchor2 = 100,100
- background-color = none
- saved-params = "splitter"
- right = "outputwindow"
- is-vert = false
- elem "discord"
- type = BUTTON
- pos = 428,0
- size = 60x16
- anchor1 = -1,-1
- anchor2 = -1,-1
- background-color = none
- saved-params = "is-checked"
- text = "Discord"
- command = "discord"
- group = "rpanemode"
- elem "github"
- type = BUTTON
- pos = 368,0
- size = 60x16
- anchor1 = -1,-1
- anchor2 = -1,-1
- background-color = none
- saved-params = "is-checked"
- text = "GitHub"
- command = "github"
- group = "rpanemode"
- elem "mapb"
- type = BUTTON
- pos = 308,0
- size = 60x16
- anchor1 = -1,-1
- anchor2 = -1,-1
- background-color = none
- saved-params = "is-checked"
- text = "Map"
- command = "map"
- group = "rpanemode"
- elem "rulesb"
- type = BUTTON
- pos = 248,0
- size = 60x16
- anchor1 = -1,-1
- anchor2 = -1,-1
- background-color = none
- saved-params = "is-checked"
- text = "Rules"
- command = "rules"
- group = "rpanemode"
- elem "forumb"
- type = BUTTON
- pos = 188,0
- size = 60x16
- anchor1 = -1,-1
- anchor2 = -1,-1
- background-color = none
- saved-params = "is-checked"
- text = "Forum"
- command = "forum"
- group = "rpanemode"
- elem "wikib"
- type = BUTTON
- pos = 128,0
- size = 60x16
- anchor1 = -1,-1
- anchor2 = -1,-1
- background-color = none
- saved-params = "is-checked"
- text = "Wiki"
- command = "wiki"
- group = "rpanemode"
- elem "textb"
- type = BUTTON
- pos = 0,0
- size = 60x16
- anchor1 = -1,-1
- anchor2 = -1,-1
- background-color = none
- is-visible = false
- saved-params = "is-checked"
- text = "Text"
- command = ".winset \"rpanewindow.left=;\""
- is-checked = true
- group = "rpanemode"
- button-type = pushbox
- elem "browseb"
- type = BUTTON
- pos = 580,0
- size = 60x16
- anchor1 = 100,0
- anchor2 = 100,0
- background-color = none
- is-visible = false
- saved-params = "is-checked"
- text = "Browser"
- command = ".winset \"rpanewindow.left=browserwindow\""
- group = "rpanemode"
- button-type = pushbox
- elem "infob"
- type = BUTTON
- pos = 60,0
- size = 60x16
- anchor1 = -1,-1
- anchor2 = -1,-1
- background-color = none
- is-visible = false
- saved-params = "is-checked"
- text = "Info"
- command = ".winset \"rpanewindow.left=infowindow\""
- group = "rpanemode"
- button-type = pushbox
- elem "mediapanel"
- type = BROWSER
- pos = 392,25
- size = 1x1
- anchor1 = -1,-1
- anchor2 = -1,-1
- background-color = none
- is-visible = false
- saved-params = ""
-
-window "browserwindow"
- elem "browserwindow"
- type = MAIN
- pos = 281,0
- size = 640x480
- anchor1 = -1,-1
- anchor2 = -1,-1
- saved-params = "pos;size;is-minimized;is-maximized"
- title = "Browser"
- is-pane = true
- elem "browser"
- type = BROWSER
- pos = 0,0
- size = 640x499
- anchor1 = 0,0
- anchor2 = 100,100
- background-color = #ffffff
- is-default = true
- saved-params = ""
- on-show = ".winset\"rpane.infob.is-visible=true?rpane.infob.pos=130,0;rpane.textb.is-visible=true;rpane.browseb.is-visible=true;rpane.browseb.is-checked=true;rpane.rpanewindow.pos=0,30;rpane.rpanewindow.size=0x0;rpane.rpanewindow.left=browserwindow\""
- on-hide = ".winset\"rpane.infob.is-visible=true?rpane.infob.is-checked=true rpane.infob.pos=65,0 rpane.rpanewindow.left=infowindow:rpane.rpanewindow.left=textwindow rpane.textb.is-visible=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0\""
-
-window "preferences_window"
- elem "preferences_window"
- type = MAIN
- pos = 281,0
- size = 1000x800
- anchor1 = -1,-1
- anchor2 = -1,-1
- is-visible = false
- saved-params = "pos;size;is-minimized;is-maximized"
- statusbar = false
- elem "preferences_browser"
- type = BROWSER
- pos = 0,0
- size = 800x800
- anchor1 = 0,0
- anchor2 = 80,100
- saved-params = ""
- elem "character_preview_map"
- type = MAP
- pos = 800,0
- size = 200x800
- anchor1 = 80,0
- anchor2 = 100,100
- right-click = true
- saved-params = "zoom;letterbox;zoom-mode"
-
-window "infowindow"
- elem "infowindow"
- type = MAIN
- pos = 281,0
- size = 640x480
- anchor1 = -1,-1
- anchor2 = -1,-1
- saved-params = "pos;size;is-minimized;is-maximized"
- title = "Info"
- is-pane = true
- elem "info"
- type = INFO
- pos = 0,0
- size = 638x477
- anchor1 = 0,0
- anchor2 = 100,100
- is-default = true
- saved-params = ""
- highlight-color = #00aa00
- on-show = ".winset\"rpane.infob.is-visible=true;rpane.browseb.is-visible=true?rpane.infob.pos=130,0:rpane.infob.pos=65,0 rpane.textb.is-visible=true rpane.infob.is-checked=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0 rpane.rpanewindow.left=infowindow\""
- on-hide = ".winset\"rpane.infob.is-visible=false;rpane.browseb.is-visible=true?rpane.browseb.is-checked=true rpane.rpanewindow.left=browserwindow:rpane.textb.is-visible=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0 rpane.rpanewindow.left=\""
-
-window "text_editor"
- elem "text_editor"
- type = MAIN
- pos = 281,0
- size = 360x488
- anchor1 = -1,-1
- anchor2 = -1,-1
- is-visible = false
- border = sunken
- saved-params = "pos;size;is-minimized;is-maximized"
- title = "Text Editor"
- can-minimize = false
- can-resize = false
- elem "exit"
- type = BUTTON
- pos = 248,456
- size = 104x24
- anchor1 = -1,-1
- anchor2 = -1,-1
- saved-params = "is-checked"
- text = "Exit without saving"
- command = ""
- elem "save"
- type = BUTTON
- pos = 128,456
- size = 104x24
- anchor1 = -1,-1
- anchor2 = -1,-1
- saved-params = "is-checked"
- text = "Save"
- command = ""
- elem "saveexit"
- type = BUTTON
- pos = 8,456
- size = 104x24
- anchor1 = -1,-1
- anchor2 = -1,-1
- saved-params = "is-checked"
- text = "Save + Exit"
- command = ""
- elem "textedit"
- type = INPUT
- pos = 0,0
- size = 360x448
- anchor1 = -1,-1
- anchor2 = -1,-1
- border = line
- saved-params = ""
- multi-line = true
-
+macro "borghotkeymode"
+ elem
+ name = "TAB"
+ command = ".winset \"mainwindow.macro=borgmacro hotkey_toggle.is-checked=false input.focus=true input.background-color=#D3B5B5\""
+ elem
+ name = "Shift"
+ command = "KeyDown Shift"
+ elem
+ name = "Shift+UP"
+ command = "KeyUp Shift"
+ elem
+ name = "Ctrl"
+ command = "KeyDown Ctrl"
+ elem
+ name = "Ctrl+UP"
+ command = "KeyUp Ctrl"
+ elem
+ name = "Alt"
+ command = "KeyDown Alt"
+ elem
+ name = "Alt+UP"
+ command = "KeyUp Alt"
+ elem
+ name = "NORTHEAST"
+ command = ".northeast"
+ elem
+ name = "SOUTHEAST"
+ command = ".southeast"
+ elem
+ name = "SOUTHWEST"
+ command = ".southwest"
+ elem
+ name = "NORTHWEST"
+ command = ".northwest"
+ elem
+ name = "ALT+WEST"
+ command = "westfaceperm"
+ elem
+ name = "CTRL+WEST"
+ command = "westface"
+ elem
+ name = "West"
+ command = "KeyDown West"
+ elem
+ name = "West+UP"
+ command = "KeyUp West"
+ elem
+ name = "ALT+NORTH"
+ command = "northfaceperm"
+ elem
+ name = "CTRL+NORTH"
+ command = "northface"
+ elem
+ name = "North"
+ command = "KeyDown North"
+ elem
+ name = "North+UP"
+ command = "KeyUp North"
+ elem
+ name = "ALT+EAST"
+ command = "eastfaceperm"
+ elem
+ name = "CTRL+EAST"
+ command = "eastface"
+ elem
+ name = "East"
+ command = "KeyDown East"
+ elem
+ name = "East+UP"
+ command = "KeyUp East"
+ elem
+ name = "ALT+SOUTH"
+ command = "southfaceperm"
+ elem
+ name = "CTRL+SOUTH"
+ command = "southface"
+ elem
+ name = "South"
+ command = "KeyDown South"
+ elem
+ name = "South+UP"
+ command = "KeyUp South"
+ elem
+ name = "CTRL+SHIFT+NORTH"
+ command = "shiftnorth"
+ elem
+ name = "CTRL+SHIFT+SOUTH"
+ command = "shiftsouth"
+ elem
+ name = "CTRL+SHIFT+WEST"
+ command = "shiftwest"
+ elem
+ name = "CTRL+SHIFT+EAST"
+ command = "shifteast"
+ elem
+ name = "INSERT"
+ command = "a-intent right"
+ elem
+ name = "DELETE"
+ command = "delete-key-pressed"
+ elem
+ name = "1"
+ command = "toggle-module 1"
+ elem
+ name = "CTRL+1"
+ command = "toggle-module 1"
+ elem
+ name = "2"
+ command = "toggle-module 2"
+ elem
+ name = "CTRL+2"
+ command = "toggle-module 2"
+ elem
+ name = "3"
+ command = "toggle-module 3"
+ elem
+ name = "CTRL+3"
+ command = "toggle-module 3"
+ elem
+ name = "4"
+ command = "a-intent left"
+ elem
+ name = "CTRL+4"
+ command = "a-intent left"
+ elem
+ name = "5"
+ command = ".me"
+ elem
+ name = "6"
+ command = ".Subtle"
+ elem
+ name = "A"
+ command = "KeyDown A"
+ elem
+ name = "A+UP"
+ command = "KeyUp A"
+ elem
+ name = "D"
+ command = "KeyDown D"
+ elem
+ name = "D+UP"
+ command = "KeyUp D"
+ elem
+ name = "F"
+ command = "a-intent left"
+ elem
+ name = "CTRL+F"
+ command = "a-intent left"
+ elem
+ name = "G"
+ command = "a-intent right"
+ elem
+ name = "CTRL+G"
+ command = "a-intent right"
+ elem
+ name = "J"
+ command = "toggle-gun-mode"
+ elem
+ name = "CTRL+J"
+ command = "toggle-gun-mode"
+ elem
+ name = "Q"
+ command = "unequip-module"
+ elem
+ name = "CTRL+Q"
+ command = "unequip-module"
+ elem
+ name = "R"
+ command = ".southwest"
+ elem
+ name = "CTRL+R"
+ command = ".southwest"
+ elem "s_key"
+ name = "S"
+ command = "KeyDown S"
+ elem
+ name = "S+UP"
+ command = "KeyUp S"
+ elem
+ name = "T"
+ command = ".say"
+ elem "w_key"
+ name = "W"
+ command = "KeyDown W"
+ elem
+ name = "W+UP"
+ command = "KeyUp W"
+ elem
+ name = "X"
+ command = ".northeast"
+ elem
+ name = "CTRL+X"
+ command = ".northeast"
+ elem
+ name = "Y"
+ command = ".Whisper"
+ elem
+ name = "CTRL+Y"
+ command = ".Whisper"
+ elem
+ name = "Z"
+ command = "Activate-Held-Object"
+ elem
+ name = "CTRL+Z"
+ command = "Activate-Held-Object"
+ elem
+ name = "U"
+ command = "Rest"
+ elem
+ name = "NUMPAD1"
+ command = "body-r-leg"
+ elem
+ name = "NUMPAD2"
+ command = "body-groin"
+ elem
+ name = "NUMPAD3"
+ command = "body-l-leg"
+ elem
+ name = "NUMPAD4"
+ command = "body-r-arm"
+ elem
+ name = "NUMPAD5"
+ command = "body-chest"
+ elem
+ name = "NUMPAD6"
+ command = "body-l-arm"
+ elem
+ name = "NUMPAD8"
+ command = "body-toggle-head"
+ elem
+ name = "F1"
+ command = "request-help"
+ elem
+ name = "CTRL+SHIFT+F1+REP"
+ command = ".options"
+ elem
+ name = "F2"
+ command = "ooc"
+ elem
+ name = "F2+REP"
+ command = ".screenshot auto"
+ elem
+ name = "SHIFT+F2+REP"
+ command = ".screenshot"
+ elem
+ name = "F3"
+ command = ".say"
+ elem
+ name = "F4"
+ command = ".me"
+ elem
+ name = "F5"
+ command = "asay"
+ elem
+ name = "F6"
+ command = "Player-Panel-New"
+ elem
+ name = "F7"
+ command = "Admin-PM"
+ elem
+ name = "F8"
+ command = "Invisimin"
+ elem
+ name = "F12"
+ command = "F12"
+
+macro "macro"
+ elem
+ name = "TAB"
+ command = ".winset \"mainwindow.macro=hotkeymode hotkey_toggle.is-checked=true mapwindow.map.focus=true\""
+ elem
+ name = "Shift"
+ command = "KeyDown Shift"
+ elem
+ name = "Shift+UP"
+ command = "KeyUp Shift"
+ elem
+ name = "Ctrl"
+ command = "KeyDown Ctrl"
+ elem
+ name = "Ctrl+UP"
+ command = "KeyUp Ctrl"
+ elem
+ name = "Alt"
+ command = "KeyDown Alt"
+ elem
+ name = "Alt+UP"
+ command = "KeyUp Alt"
+ elem
+ name = "NORTHEAST"
+ command = ".northeast"
+ elem
+ name = "SOUTHEAST"
+ command = ".southeast"
+ elem
+ name = "SOUTHWEST"
+ command = ".southwest"
+ elem
+ name = "NORTHWEST"
+ command = ".northwest"
+ elem
+ name = "ALT+WEST"
+ command = "westfaceperm"
+ elem
+ name = "CTRL+WEST"
+ command = "westface"
+ elem
+ name = "West"
+ command = "KeyDown West"
+ elem
+ name = "West+UP"
+ command = "KeyUp West"
+ elem
+ name = "ALT+NORTH"
+ command = "northfaceperm"
+ elem
+ name = "CTRL+NORTH"
+ command = "northface"
+ elem
+ name = "North"
+ command = "KeyDown North"
+ elem
+ name = "North+UP"
+ command = "KeyUp North"
+ elem
+ name = "ALT+EAST"
+ command = "eastfaceperm"
+ elem
+ name = "CTRL+EAST"
+ command = "eastface"
+ elem
+ name = "East"
+ command = "KeyDown East"
+ elem
+ name = "East+UP"
+ command = "KeyUp East"
+ elem
+ name = "ALT+SOUTH"
+ command = "southfaceperm"
+ elem
+ name = "CTRL+SOUTH"
+ command = "southface"
+ elem
+ name = "South"
+ command = "KeyDown South"
+ elem
+ name = "South+UP"
+ command = "KeyUp South"
+ elem
+ name = "CTRL+SHIFT+NORTH"
+ command = "shiftnorth"
+ elem
+ name = "CTRL+SHIFT+SOUTH"
+ command = "shiftsouth"
+ elem
+ name = "CTRL+SHIFT+WEST"
+ command = "shiftwest"
+ elem
+ name = "CTRL+SHIFT+EAST"
+ command = "shifteast"
+ elem
+ name = "INSERT"
+ command = "a-intent right"
+ elem
+ name = "DELETE"
+ command = "delete-key-pressed"
+ elem
+ name = "CTRL+1"
+ command = "a-intent help"
+ elem
+ name = "CTRL+2"
+ command = "a-intent disarm"
+ elem
+ name = "CTRL+3"
+ command = "a-intent grab"
+ elem
+ name = "CTRL+4"
+ command = "a-intent harm"
+ elem
+ name = "CTRL+A"
+ command = "KeyDown A"
+ elem
+ name = "CTRL+A+UP"
+ command = "KeyUp A"
+ elem
+ name = "CTRL+D"
+ command = "KeyDown D"
+ elem
+ name = "CTRL+D+UP"
+ command = "KeyUp D"
+ elem
+ name = "CTRL+E"
+ command = "quick-equip"
+ elem
+ name = "CTRL+F"
+ command = "a-intent left"
+ elem
+ name = "CTRL+G"
+ command = "a-intent right"
+ elem
+ name = "CTRL+Q"
+ command = ".northwest"
+ elem
+ name = "CTRL+R"
+ command = ".southwest"
+ elem
+ name = "CTRL+S"
+ command = "KeyDown S"
+ elem
+ name = "CTRL+S+UP"
+ command = "KeyUp S"
+ elem
+ name = "CTRL+W"
+ command = "KeyDown W"
+ elem
+ name = "CTRL+W+UP"
+ command = "KeyUp W"
+ elem
+ name = "CTRL+X"
+ command = ".northeast"
+ elem
+ name = "CTRL+Y"
+ command = "Activate-Held-Object"
+ elem
+ name = "CTRL+Z"
+ command = "Activate-Held-Object"
+ elem
+ name = "CTRL+U"
+ command = "Rest"
+ elem
+ name = "CTRL+B"
+ command = "Resist"
+ elem
+ name = "CTRL+NUMPAD1"
+ command = "body-r-leg"
+ elem
+ name = "CTRL+NUMPAD2"
+ command = "body-groin"
+ elem
+ name = "CTRL+NUMPAD3"
+ command = "body-l-leg"
+ elem
+ name = "CTRL+NUMPAD4"
+ command = "body-r-arm"
+ elem
+ name = "CTRL+NUMPAD5"
+ command = "body-chest"
+ elem
+ name = "CTRL+NUMPAD6"
+ command = "body-l-arm"
+ elem
+ name = "CTRL+NUMPAD8"
+ command = "body-toggle-head"
+ elem
+ name = "F1"
+ command = "request-help"
+ elem
+ name = "CTRL+SHIFT+F1+REP"
+ command = ".options"
+ elem
+ name = "F2"
+ command = "ooc"
+ elem
+ name = "F2+REP"
+ command = ".screenshot auto"
+ elem
+ name = "SHIFT+F2+REP"
+ command = ".screenshot"
+ elem
+ name = "F3"
+ command = ".say"
+ elem
+ name = "F4"
+ command = ".me"
+ elem
+ name = "F5"
+ command = "asay"
+ elem
+ name = "F6"
+ command = "Player-Panel-New"
+ elem
+ name = "F7"
+ command = "Admin-PM"
+ elem
+ name = "F8"
+ command = "Invisimin"
+ elem
+ name = "F12"
+ command = "F12"
+
+macro "hotkeymode"
+ elem
+ name = "TAB"
+ command = ".winset \"mainwindow.macro=macro hotkey_toggle.is-checked=false input.focus=true\""
+ elem
+ name = "Shift"
+ command = "KeyDown Shift"
+ elem
+ name = "Shift+UP"
+ command = "KeyUp Shift"
+ elem
+ name = "Ctrl"
+ command = "KeyDown Ctrl"
+ elem
+ name = "Ctrl+UP"
+ command = "KeyUp Ctrl"
+ elem
+ name = "Alt"
+ command = "KeyDown Alt"
+ elem
+ name = "Alt+UP"
+ command = "KeyUp Alt"
+ elem
+ name = "NORTHEAST"
+ command = ".northeast"
+ elem
+ name = "SOUTHEAST"
+ command = ".southeast"
+ elem
+ name = "SOUTHWEST"
+ command = ".southwest"
+ elem
+ name = "NORTHWEST"
+ command = ".northwest"
+ elem
+ name = "ALT+WEST"
+ command = "westfaceperm"
+ elem
+ name = "CTRL+WEST"
+ command = "westface"
+ elem
+ name = "West"
+ command = "KeyDown West"
+ elem
+ name = "West+UP"
+ command = "KeyUp West"
+ elem
+ name = "ALT+NORTH"
+ command = "northfaceperm"
+ elem
+ name = "CTRL+NORTH"
+ command = "northface"
+ elem
+ name = "North"
+ command = "KeyDown North"
+ elem
+ name = "North+UP"
+ command = "KeyUp North"
+ elem
+ name = "ALT+EAST"
+ command = "eastfaceperm"
+ elem
+ name = "CTRL+EAST"
+ command = "eastface"
+ elem
+ name = "East"
+ command = "KeyDown East"
+ elem
+ name = "East+UP"
+ command = "KeyUp East"
+ elem
+ name = "ALT+SOUTH"
+ command = "southfaceperm"
+ elem
+ name = "CTRL+SOUTH"
+ command = "southface"
+ elem
+ name = "South"
+ command = "KeyDown South"
+ elem
+ name = "South+UP"
+ command = "KeyUp South"
+ elem
+ name = "CTRL+SHIFT+NORTH"
+ command = "shiftnorth"
+ elem
+ name = "CTRL+SHIFT+SOUTH"
+ command = "shiftsouth"
+ elem
+ name = "CTRL+SHIFT+WEST"
+ command = "shiftwest"
+ elem
+ name = "CTRL+SHIFT+EAST"
+ command = "shifteast"
+ elem
+ name = "INSERT"
+ command = "a-intent right"
+ elem
+ name = "DELETE"
+ command = "delete-key-pressed"
+ elem
+ name = "1"
+ command = "a-intent help"
+ elem
+ name = "CTRL+1"
+ command = "a-intent help"
+ elem
+ name = "2"
+ command = "a-intent disarm"
+ elem
+ name = "CTRL+2"
+ command = "a-intent disarm"
+ elem
+ name = "3"
+ command = "a-intent grab"
+ elem
+ name = "CTRL+3"
+ command = "a-intent grab"
+ elem
+ name = "4"
+ command = "a-intent harm"
+ elem
+ name = "CTRL+4"
+ command = "a-intent harm"
+ elem
+ name = "5"
+ command = ".me"
+ elem
+ name = "6"
+ command = ".Subtle"
+ elem
+ name = "A"
+ command = "KeyDown A"
+ elem
+ name = "A+UP"
+ command = "KeyUp A"
+ elem
+ name = "D"
+ command = "KeyDown D"
+ elem
+ name = "D+UP"
+ command = "KeyUp D"
+ elem
+ name = "E"
+ command = "quick-equip"
+ elem
+ name = "CTRL+E"
+ command = "quick-equip"
+ elem
+ name = "F"
+ command = "a-intent left"
+ elem
+ name = "CTRL+F"
+ command = "a-intent left"
+ elem
+ name = "G"
+ command = "a-intent right"
+ elem
+ name = "CTRL+G"
+ command = "a-intent right"
+ elem
+ name = "H"
+ command = "holster"
+ elem
+ name = "CTRL+H"
+ command = "holster"
+ elem
+ name = "J"
+ command = "toggle-gun-mode"
+ elem
+ name = "CTRL+J"
+ command = "toggle-gun-mode"
+ elem
+ name = "Q"
+ command = ".northwest"
+ elem
+ name = "CTRL+Q"
+ command = ".northwest"
+ elem
+ name = "R"
+ command = ".southwest"
+ elem
+ name = "CTRL+R"
+ command = ".southwest"
+ elem "s_key"
+ name = "S"
+ command = "KeyDown S"
+ elem
+ name = "S+UP"
+ command = "KeyUp S"
+ elem
+ name = "T"
+ command = ".say"
+ elem "w_key"
+ name = "W"
+ command = "KeyDown W"
+ elem
+ name = "W+UP"
+ command = "KeyUp W"
+ elem
+ name = "X"
+ command = ".northeast"
+ elem
+ name = "CTRL+X"
+ command = ".northeast"
+ elem
+ name = "Y"
+ command = ".Whisper"
+ elem
+ name = "CTRL+Y"
+ command = ".Whisper"
+ elem
+ name = "Z"
+ command = "Activate-Held-Object"
+ elem
+ name = "CTRL+Z"
+ command = "Activate-Held-Object"
+ elem
+ name = "U"
+ command = "Rest"
+ elem
+ name = "B"
+ command = "Resist"
+ elem
+ name = "NUMPAD1"
+ command = "body-r-leg"
+ elem
+ name = "NUMPAD2"
+ command = "body-groin"
+ elem
+ name = "NUMPAD3"
+ command = "body-l-leg"
+ elem
+ name = "NUMPAD4"
+ command = "body-r-arm"
+ elem
+ name = "NUMPAD5"
+ command = "body-chest"
+ elem
+ name = "NUMPAD6"
+ command = "body-l-arm"
+ elem
+ name = "NUMPAD8"
+ command = "body-toggle-head"
+ elem
+ name = "F1"
+ command = "request-help"
+ elem
+ name = "CTRL+SHIFT+F1+REP"
+ command = ".options"
+ elem
+ name = "F2"
+ command = "ooc"
+ elem
+ name = "F2+REP"
+ command = ".screenshot auto"
+ elem
+ name = "SHIFT+F2+REP"
+ command = ".screenshot"
+ elem
+ name = "F3"
+ command = ".say"
+ elem
+ name = "F4"
+ command = ".me"
+ elem
+ name = "F5"
+ command = "asay"
+ elem
+ name = "F6"
+ command = "Player-Panel-New"
+ elem
+ name = "F7"
+ command = "Admin-PM"
+ elem
+ name = "F8"
+ command = "Invisimin"
+ elem
+ name = "F12"
+ command = "F12"
+
+macro "borgmacro"
+ elem
+ name = "TAB"
+ command = ".winset \"mainwindow.macro=borghotkeymode hotkey_toggle.is-checked=true mapwindow.map.focus=true input.background-color=#F0F0F0\""
+ elem
+ name = "Shift"
+ command = "KeyDown Shift"
+ elem
+ name = "Shift+UP"
+ command = "KeyUp Shift"
+ elem
+ name = "Ctrl"
+ command = "KeyDown Ctrl"
+ elem
+ name = "Ctrl+UP"
+ command = "KeyUp Ctrl"
+ elem
+ name = "Alt"
+ command = "KeyDown Alt"
+ elem
+ name = "Alt+UP"
+ command = "KeyUp Alt"
+ elem
+ name = "NORTHEAST"
+ command = ".northeast"
+ elem
+ name = "SOUTHEAST"
+ command = ".southeast"
+ elem
+ name = "SOUTHWEST"
+ command = ".southwest"
+ elem
+ name = "NORTHWEST"
+ command = ".northwest"
+ elem
+ name = "ALT+WEST"
+ command = "westfaceperm"
+ elem
+ name = "CTRL+WEST"
+ command = "westface"
+ elem
+ name = "West"
+ command = "KeyDown West"
+ elem
+ name = "West+UP"
+ command = "KeyUp West"
+ elem
+ name = "ALT+NORTH"
+ command = "northfaceperm"
+ elem
+ name = "CTRL+NORTH"
+ command = "northface"
+ elem
+ name = "North"
+ command = "KeyDown North"
+ elem
+ name = "North+UP"
+ command = "KeyUp North"
+ elem
+ name = "ALT+EAST"
+ command = "eastfaceperm"
+ elem
+ name = "CTRL+EAST"
+ command = "eastface"
+ elem
+ name = "East"
+ command = "KeyDown East"
+ elem
+ name = "East+UP"
+ command = "KeyUp East"
+ elem
+ name = "ALT+SOUTH"
+ command = "southfaceperm"
+ elem
+ name = "CTRL+SOUTH"
+ command = "southface"
+ elem
+ name = "South"
+ command = "KeyDown South"
+ elem
+ name = "South+UP"
+ command = "KeyUp South"
+ elem
+ name = "CTRL+SHIFT+NORTH"
+ command = "shiftnorth"
+ elem
+ name = "CTRL+SHIFT+SOUTH"
+ command = "shiftsouth"
+ elem
+ name = "CTRL+SHIFT+WEST"
+ command = "shiftwest"
+ elem
+ name = "CTRL+SHIFT+EAST"
+ command = "shifteast"
+ elem
+ name = "INSERT"
+ command = "a-intent right"
+ elem
+ name = "DELETE"
+ command = "delete-key-pressed"
+ elem
+ name = "CTRL+1"
+ command = "toggle-module 1"
+ elem
+ name = "CTRL+2"
+ command = "toggle-module 2"
+ elem
+ name = "CTRL+3"
+ command = "toggle-module 3"
+ elem
+ name = "CTRL+4"
+ command = "a-intent left"
+ elem
+ name = "CTRL+A"
+ command = "KeyDown A"
+ elem
+ name = "CTRL+A+UP"
+ command = "KeyUp A"
+ elem
+ name = "CTRL+D"
+ command = "KeyDown D"
+ elem
+ name = "CTRL+D+UP"
+ command = "KeyUp D"
+ elem
+ name = "CTRL+F"
+ command = "a-intent left"
+ elem
+ name = "CTRL+G"
+ command = "a-intent right"
+ elem
+ name = "CTRL+Q"
+ command = ".northwest"
+ elem
+ name = "CTRL+R"
+ command = ".southwest"
+ elem
+ name = "CTRL+S"
+ command = "KeyDown S"
+ elem
+ name = "CTRL+S+UP"
+ command = "KeyUp S"
+ elem
+ name = "CTRL+W"
+ command = "KeyDown W"
+ elem
+ name = "CTRL+W+UP"
+ command = "KeyUp W"
+ elem
+ name = "CTRL+X"
+ command = ".northeast"
+ elem
+ name = "CTRL+Y"
+ command = "Activate-Held-Object"
+ elem
+ name = "CTRL+Z"
+ command = "Activate-Held-Object"
+ elem
+ name = "CTRL+U"
+ command = "Rest"
+ elem
+ name = "CTRL+NUMPAD1"
+ command = "body-r-leg"
+ elem
+ name = "CTRL+NUMPAD2"
+ command = "body-groin"
+ elem
+ name = "CTRL+NUMPAD3"
+ command = "body-l-leg"
+ elem
+ name = "CTRL+NUMPAD4"
+ command = "body-r-arm"
+ elem
+ name = "CTRL+NUMPAD5"
+ command = "body-chest"
+ elem
+ name = "CTRL+NUMPAD6"
+ command = "body-l-arm"
+ elem
+ name = "CTRL+NUMPAD8"
+ command = "body-toggle-head"
+ elem
+ name = "F1"
+ command = "request-help"
+ elem
+ name = "CTRL+SHIFT+F1+REP"
+ command = ".options"
+ elem
+ name = "F2"
+ command = "ooc"
+ elem
+ name = "F2+REP"
+ command = ".screenshot auto"
+ elem
+ name = "SHIFT+F2+REP"
+ command = ".screenshot"
+ elem
+ name = "F3"
+ command = ".say"
+ elem
+ name = "F4"
+ command = ".me"
+ elem
+ name = "F5"
+ command = "asay"
+ elem
+ name = "F6"
+ command = "Player-Panel-New"
+ elem
+ name = "F7"
+ command = "Admin-PM"
+ elem
+ name = "F8"
+ command = "Invisimin"
+ elem
+ name = "F12"
+ command = "F12"
+
+
+menu "menu"
+ elem
+ name = "&File"
+ command = ""
+ saved-params = "is-checked"
+ elem
+ name = "&Quick screenshot\tF2"
+ command = ".screenshot auto"
+ category = "&File"
+ saved-params = "is-checked"
+ elem
+ name = "&Save screenshot as...\tShift+F2"
+ command = ".screenshot"
+ category = "&File"
+ saved-params = "is-checked"
+ elem
+ name = "&Reconnect"
+ command = ".reconnect"
+ category = "&File"
+ saved-params = "is-checked"
+ elem
+ name = "&Check ping"
+ command = ".ping"
+ category = "&File"
+ saved-params = "is-checked"
+ elem
+ name = ""
+ command = ""
+ category = "&File"
+ saved-params = "is-checked"
+ elem
+ name = "&Quit"
+ command = ".quit"
+ category = "&File"
+ saved-params = "is-checked"
+ elem
+ name = "&Icons"
+ command = ""
+ saved-params = "is-checked"
+ elem "stretch"
+ name = "&Stretch to fit"
+ command = ".winset \"mapwindow.map.icon-size=0\""
+ category = "&Icons"
+ is-checked = true
+ can-check = true
+ group = "size"
+ saved-params = "is-checked"
+ elem "icon128"
+ name = "&128x128"
+ command = ".winset \"mapwindow.map.icon-size=128\""
+ category = "&Icons"
+ can-check = true
+ group = "size"
+ saved-params = "is-checked"
+ elem "icon96"
+ name = "&96x96"
+ command = ".winset \"mapwindow.map.icon-size=96\""
+ category = "&Icons"
+ can-check = true
+ group = "size"
+ saved-params = "is-checked"
+ elem "icon64"
+ name = "&64x64"
+ command = ".winset \"mapwindow.map.icon-size=64\""
+ category = "&Icons"
+ can-check = true
+ group = "size"
+ saved-params = "is-checked"
+ elem "icon48"
+ name = "&48x48"
+ command = ".winset \"mapwindow.map.icon-size=48\""
+ category = "&Icons"
+ can-check = true
+ group = "size"
+ saved-params = "is-checked"
+ elem "icon32"
+ name = "&32x32"
+ command = ".winset \"mapwindow.map.icon-size=32\""
+ category = "&Icons"
+ can-check = true
+ group = "size"
+ saved-params = "is-checked"
+ elem
+ name = ""
+ command = ""
+ category = "&Icons"
+ saved-params = "is-checked"
+ elem "textmode"
+ name = "&Text"
+ command = ".winset \"menu.textmode.is-checked=true?mapwindow.map.text-mode=true:mapwindow.map.text-mode=false\""
+ category = "&Icons"
+ can-check = true
+ saved-params = "is-checked"
+ elem
+ name = "&Scaling"
+ command = ""
+ saved-params = "is-checked"
+ elem "nearest-neighbor"
+ name = "&Nearest Neighbor"
+ command = ".winset \"mapwindow.map.zoom-mode=distort\""
+ category = "&Scaling"
+ can-check = true
+ group = "scale"
+ saved-params = "is-checked"
+ elem "point-sample"
+ name = "&Point Sampling"
+ command = ".winset \"mapwindow.map.zoom-mode=normal\""
+ category = "&Scaling"
+ can-check = true
+ group = "scale"
+ saved-params = "is-checked"
+ elem "blur"
+ name = "&Blur"
+ command = ".winset \"mapwindow.map.zoom-mode=blur\""
+ category = "&Scaling"
+ can-check = true
+ group = "scale"
+ saved-params = "is-checked"
+ elem
+ name = "&Help"
+ command = ""
+ saved-params = "is-checked"
+ elem
+ name = "&Admin help\tF1"
+ command = "request-help"
+ category = "&Help"
+ saved-params = "is-checked"
+ elem
+ name = "&Hotkeys"
+ command = "hotkeys-help"
+ category = "&Help"
+ saved-params = "is-checked"
+
+window "mainwindow"
+ elem "mainwindow"
+ type = MAIN
+ pos = 281,0
+ size = 640x440
+ anchor1 = -1,-1
+ anchor2 = -1,-1
+ is-default = true
+ saved-params = "pos;size;is-minimized;is-maximized"
+ title = "Yawn Wider Station" //YW EDIT
+ is-maximized = true
+ icon = 'icons\\ywicon.png' //YW EDIT
+ macro = "macro"
+ menu = "menu"
+ elem "asset_cache_browser"
+ type = BROWSER
+ pos = 0,0
+ size = 200x200
+ anchor1 = -1,-1
+ anchor2 = -1,-1
+ is-visible = false
+ saved-params = ""
+ elem "hotkey_toggle"
+ type = BUTTON
+ pos = 560,420
+ size = 80x20
+ anchor1 = 100,100
+ anchor2 = -1,-1
+ saved-params = ""
+ text = "Hotkey Toggle"
+ command = ".winset \"mainwindow.macro!=macro ? mainwindow.macro=macro hotkey_toggle.is-checked=false input.focus=true : mainwindow.macro=hotkeymode hotkey_toggle.is-checked=true mapwindow.map.focus=true\""
+ button-type = pushbox
+ elem "mainvsplit"
+ type = CHILD
+ pos = 3,0
+ size = 634x416
+ anchor1 = 0,0
+ anchor2 = 100,100
+ saved-params = "splitter"
+ right = "rpane"
+ is-vert = true
+ elem "input"
+ type = INPUT
+ pos = 3,420
+ size = 517x20
+ anchor1 = 0,100
+ anchor2 = 100,100
+ background-color = #d3b5b5
+ is-default = true
+ border = sunken
+ saved-params = "command"
+ elem "saybutton"
+ type = BUTTON
+ pos = 520,420
+ size = 40x20
+ anchor1 = 100,100
+ anchor2 = -1,-1
+ saved-params = "is-checked"
+ text = "Chat"
+ command = ".winset \"saybutton.is-checked=true?input.command=\"!say \\\"\" macrobutton.is-checked=false:input.command=\""
+ button-type = pushbox
+ elem "tooltip"
+ type = BROWSER
+ pos = 0,0
+ size = 999x999
+ anchor1 = -1,-1
+ anchor2 = -1,-1
+ is-visible = false
+ saved-params = ""
+
+window "mapwindow"
+ elem "mapwindow"
+ type = MAIN
+ pos = 281,0
+ size = 640x480
+ anchor1 = -1,-1
+ anchor2 = -1,-1
+ saved-params = "pos;size;is-minimized;is-maximized"
+ titlebar = false
+ statusbar = false
+ can-close = false
+ can-minimize = false
+ can-resize = false
+ is-pane = true
+ elem "map"
+ type = MAP
+ pos = 0,0
+ size = 640x480
+ anchor1 = 0,0
+ anchor2 = 100,100
+ font-family = "Arial Rounded MT Bold,Arial Black,Arial,sans-serif"
+ font-size = 7
+ text-color = none
+ is-default = true
+ saved-params = "icon-size"
+ on-show = ".winset\"mainwindow.mainvsplit.left=mapwindow\""
+ on-hide = ".winset\"mainwindow.mainvsplit.left=\""
+ style = ".center { text-align: center; } .runechatdiv {background-color: #20202070} .black_outline { -dm-text-outline: 1px black } .boldtext { font-weight: bold; } .maptext { font-family: 'Small Fonts'; font-size: 7px; color: white; line-height: 1.1; } .command_headset { font-weight: bold;\tfont-size: 8px; } .small { font-size: 6px; } .very_small { font-size: 5px;} .big { font-size: 8px; } .reallybig { font-size: 8px; } .extremelybig { font-size: 8px; } .greentext { color: #00FF00; font-size: 7px; } .redtext { color: #FF0000; font-size: 7px; } .clown { color: #FF69Bf; font-size: 7px; font-weight: bold; } .his_grace { color: #15D512; } .hypnophrase { color: #0d0d0d; font-weight: bold; } .yell { font-weight: bold; } .italics { font-size: 7px; font-style: italic; }"
+
+window "outputwindow"
+ elem "outputwindow"
+ type = MAIN
+ pos = 281,0
+ size = 640x480
+ anchor1 = -1,-1
+ anchor2 = -1,-1
+ saved-params = "pos;size;is-minimized;is-maximized"
+ titlebar = false
+ statusbar = false
+ can-close = false
+ can-minimize = false
+ can-resize = false
+ is-pane = true
+ elem "chatloadlabel"
+ type = LABEL
+ pos = 0,0
+ size = 640x480
+ anchor1 = 0,0
+ anchor2 = 100,100
+ font-family = "sans-serif"
+ font-size = 24
+ font-style = "bold"
+ text-color = #ffffff
+ background-color = #222222
+ saved-params = ""
+ text = "Chat is loading.\nIf nothing happens after 20s,\nuse OOC > \"Reload VChat\"."
+ elem "htmloutput"
+ type = BROWSER
+ pos = 0,0
+ size = 640x480
+ anchor1 = 0,0
+ anchor2 = 100,100
+ is-visible = false
+ saved-params = ""
+ elem "oldoutput"
+ type = OUTPUT
+ pos = 0,0
+ size = 640x480
+ anchor1 = 0,0
+ anchor2 = 100,100
+ is-visible = false
+ is-default = true
+ saved-params = ""
+ style = ".system {color:#FF0000;}"
+ enable-http-images = true
+ max-lines = 0
+
+window "rpane"
+ elem "rpane"
+ type = MAIN
+ pos = 281,0
+ size = 640x480
+ anchor1 = -1,-1
+ anchor2 = -1,-1
+ background-color = none
+ saved-params = "pos;size;is-minimized;is-maximized"
+ is-pane = true
+ outer-size = 656x538
+ inner-size = 640x499
+ elem "rpanewindow"
+ type = CHILD
+ pos = 0,-3
+ size = 640x499
+ anchor1 = 0,0
+ anchor2 = 100,100
+ background-color = none
+ saved-params = "splitter"
+ right = "outputwindow"
+ is-vert = false
+ elem "discord"
+ type = BUTTON
+ pos = 428,0
+ size = 60x16
+ anchor1 = -1,-1
+ anchor2 = -1,-1
+ background-color = none
+ saved-params = "is-checked"
+ text = "Discord"
+ command = "discord"
+ group = "rpanemode"
+ elem "github"
+ type = BUTTON
+ pos = 368,0
+ size = 60x16
+ anchor1 = -1,-1
+ anchor2 = -1,-1
+ background-color = none
+ saved-params = "is-checked"
+ text = "GitHub"
+ command = "github"
+ group = "rpanemode"
+ elem "mapb"
+ type = BUTTON
+ pos = 308,0
+ size = 60x16
+ anchor1 = -1,-1
+ anchor2 = -1,-1
+ background-color = none
+ saved-params = "is-checked"
+ text = "Map"
+ command = "map"
+ group = "rpanemode"
+ elem "rulesb"
+ type = BUTTON
+ pos = 248,0
+ size = 60x16
+ anchor1 = -1,-1
+ anchor2 = -1,-1
+ background-color = none
+ saved-params = "is-checked"
+ text = "Rules"
+ command = "rules"
+ group = "rpanemode"
+ elem "forumb"
+ type = BUTTON
+ pos = 188,0
+ size = 60x16
+ anchor1 = -1,-1
+ anchor2 = -1,-1
+ background-color = none
+ saved-params = "is-checked"
+ text = "Forum"
+ command = "forum"
+ group = "rpanemode"
+ elem "wikib"
+ type = BUTTON
+ pos = 128,0
+ size = 60x16
+ anchor1 = -1,-1
+ anchor2 = -1,-1
+ background-color = none
+ saved-params = "is-checked"
+ text = "Wiki"
+ command = "wiki"
+ group = "rpanemode"
+ elem "textb"
+ type = BUTTON
+ pos = 0,0
+ size = 60x16
+ anchor1 = -1,-1
+ anchor2 = -1,-1
+ background-color = none
+ is-visible = false
+ saved-params = "is-checked"
+ text = "Text"
+ command = ".winset \"rpanewindow.left=;\""
+ is-checked = true
+ group = "rpanemode"
+ button-type = pushbox
+ elem "browseb"
+ type = BUTTON
+ pos = 580,0
+ size = 60x16
+ anchor1 = 100,0
+ anchor2 = 100,0
+ background-color = none
+ is-visible = false
+ saved-params = "is-checked"
+ text = "Browser"
+ command = ".winset \"rpanewindow.left=browserwindow\""
+ group = "rpanemode"
+ button-type = pushbox
+ elem "infob"
+ type = BUTTON
+ pos = 60,0
+ size = 60x16
+ anchor1 = -1,-1
+ anchor2 = -1,-1
+ background-color = none
+ is-visible = false
+ saved-params = "is-checked"
+ text = "Info"
+ command = ".winset \"rpanewindow.left=infowindow\""
+ group = "rpanemode"
+ button-type = pushbox
+ elem "mediapanel"
+ type = BROWSER
+ pos = 392,25
+ size = 1x1
+ anchor1 = -1,-1
+ anchor2 = -1,-1
+ background-color = none
+ is-visible = false
+ saved-params = ""
+
+window "browserwindow"
+ elem "browserwindow"
+ type = MAIN
+ pos = 281,0
+ size = 640x480
+ anchor1 = -1,-1
+ anchor2 = -1,-1
+ saved-params = "pos;size;is-minimized;is-maximized"
+ title = "Browser"
+ is-pane = true
+ elem "browser"
+ type = BROWSER
+ pos = 0,0
+ size = 640x499
+ anchor1 = 0,0
+ anchor2 = 100,100
+ background-color = #ffffff
+ is-default = true
+ saved-params = ""
+ on-show = ".winset\"rpane.infob.is-visible=true?rpane.infob.pos=130,0;rpane.textb.is-visible=true;rpane.browseb.is-visible=true;rpane.browseb.is-checked=true;rpane.rpanewindow.pos=0,30;rpane.rpanewindow.size=0x0;rpane.rpanewindow.left=browserwindow\""
+ on-hide = ".winset\"rpane.infob.is-visible=true?rpane.infob.is-checked=true rpane.infob.pos=65,0 rpane.rpanewindow.left=infowindow:rpane.rpanewindow.left=textwindow rpane.textb.is-visible=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0\""
+
+window "preferences_window"
+ elem "preferences_window"
+ type = MAIN
+ pos = 281,0
+ size = 1000x800
+ anchor1 = -1,-1
+ anchor2 = -1,-1
+ is-visible = false
+ saved-params = "pos;size;is-minimized;is-maximized"
+ statusbar = false
+ elem "preferences_browser"
+ type = BROWSER
+ pos = 0,0
+ size = 800x800
+ anchor1 = 0,0
+ anchor2 = 80,100
+ saved-params = ""
+ elem "character_preview_map"
+ type = MAP
+ pos = 800,0
+ size = 200x800
+ anchor1 = 80,0
+ anchor2 = 100,100
+ right-click = true
+ saved-params = "zoom;letterbox;zoom-mode"
+
+window "infowindow"
+ elem "infowindow"
+ type = MAIN
+ pos = 281,0
+ size = 640x480
+ anchor1 = -1,-1
+ anchor2 = -1,-1
+ saved-params = "pos;size;is-minimized;is-maximized"
+ title = "Info"
+ is-pane = true
+ elem "info"
+ type = INFO
+ pos = 0,0
+ size = 638x477
+ anchor1 = 0,0
+ anchor2 = 100,100
+ is-default = true
+ saved-params = ""
+ highlight-color = #00aa00
+ on-show = ".winset\"rpane.infob.is-visible=true;rpane.browseb.is-visible=true?rpane.infob.pos=130,0:rpane.infob.pos=65,0 rpane.textb.is-visible=true rpane.infob.is-checked=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0 rpane.rpanewindow.left=infowindow\""
+ on-hide = ".winset\"rpane.infob.is-visible=false;rpane.browseb.is-visible=true?rpane.browseb.is-checked=true rpane.rpanewindow.left=browserwindow:rpane.textb.is-visible=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0 rpane.rpanewindow.left=\""
+
+window "text_editor"
+ elem "text_editor"
+ type = MAIN
+ pos = 281,0
+ size = 360x488
+ anchor1 = -1,-1
+ anchor2 = -1,-1
+ is-visible = false
+ border = sunken
+ saved-params = "pos;size;is-minimized;is-maximized"
+ title = "Text Editor"
+ can-minimize = false
+ can-resize = false
+ elem "exit"
+ type = BUTTON
+ pos = 248,456
+ size = 104x24
+ anchor1 = -1,-1
+ anchor2 = -1,-1
+ saved-params = "is-checked"
+ text = "Exit without saving"
+ command = ""
+ elem "save"
+ type = BUTTON
+ pos = 128,456
+ size = 104x24
+ anchor1 = -1,-1
+ anchor2 = -1,-1
+ saved-params = "is-checked"
+ text = "Save"
+ command = ""
+ elem "saveexit"
+ type = BUTTON
+ pos = 8,456
+ size = 104x24
+ anchor1 = -1,-1
+ anchor2 = -1,-1
+ saved-params = "is-checked"
+ text = "Save + Exit"
+ command = ""
+ elem "textedit"
+ type = INPUT
+ pos = 0,0
+ size = 360x448
+ anchor1 = -1,-1
+ anchor2 = -1,-1
+ border = line
+ saved-params = ""
+ multi-line = true
+
diff --git a/maps/groundbase/gb-z1.dmm b/maps/groundbase/gb-z1.dmm
index 869d267d54..eb43eaa733 100644
--- a/maps/groundbase/gb-z1.dmm
+++ b/maps/groundbase/gb-z1.dmm
@@ -5709,6 +5709,10 @@
/obj/machinery/meter,
/turf/simulated/floor/tiled,
/area/groundbase/engineering/atmos)
+"mA" = (
+/obj/machinery/vending/altevian,
+/turf/simulated/floor/tiled,
+/area/groundbase/civilian/foodplace)
"mC" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
@@ -36432,7 +36436,7 @@ Lt
Lt
Uf
Uf
-Aq
+mA
pA
Aq
Uf
diff --git a/maps/stellar_delight/stellar_delight3.dmm b/maps/stellar_delight/stellar_delight3.dmm
index 96c4712459..bef6e689e0 100644
--- a/maps/stellar_delight/stellar_delight3.dmm
+++ b/maps/stellar_delight/stellar_delight3.dmm
@@ -122,6 +122,10 @@
},
/turf/simulated/floor/tiled,
/area/holodeck_control)
+"ap" = (
+/obj/machinery/vending/altevian,
+/turf/simulated/floor,
+/area/maintenance/stellardelight/deck3/forestarroomb)
"at" = (
/obj/structure/table/darkglass,
/turf/simulated/floor/tiled/dark,
@@ -7045,7 +7049,7 @@
/obj/machinery/power/apc{
pixel_y = -28;
req_access = null;
- req_one_access = list(11, 67)
+ req_one_access = list(11,67)
},
/obj/structure/cable/green,
/obj/effect/floor_decal/fancy_shuttle{
@@ -9990,7 +9994,7 @@
/obj/machinery/power/apc{
pixel_y = -28;
req_access = null;
- req_one_access = list(11, 67)
+ req_one_access = list(11,67)
},
/obj/structure/cable/green{
icon_state = "0-4"
@@ -26150,7 +26154,7 @@ tF
Sb
Nz
Jx
-FE
+ap
sR
FE
Ef
diff --git a/maps/submaps/admin_use_vr/fun.dm b/maps/submaps/admin_use_vr/fun.dm
index 05df720d4e..6702e32122 100644
--- a/maps/submaps/admin_use_vr/fun.dm
+++ b/maps/submaps/admin_use_vr/fun.dm
@@ -3,8 +3,15 @@
requires_power = 0
dynamic_lighting = 0
+/area/submap/casino_event
+ name = "\improper Space Casino"
+ requires_power = 0
+ dynamic_lighting = 0
-
+/datum/map_template/admin_use/casino
+ name = "Lucky 7 Casino"
+ desc = "A casino to gamble your life away."
+ mappath = 'maps/submaps/admin_use_vr/lucky_7.dmm'
// NEVER EVER use these on an actual included map.
// These are for admins to use when they make quick maps and upload the .dmm files for loading
diff --git a/maps/submaps/admin_use_vr/lucky_7.dmm b/maps/submaps/admin_use_vr/lucky_7.dmm
new file mode 100644
index 0000000000..356e3cb461
--- /dev/null
+++ b/maps/submaps/admin_use_vr/lucky_7.dmm
@@ -0,0 +1,631 @@
+"aa" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/submap/casino_event)
+"ab" = (/obj/structure/table/borosilicate,/turf/simulated/floor/tiled/eris/steel/bar_dance,/area/submap/casino_event)
+"ac" = (/obj/structure/table/borosilicate,/obj/structure/dancepole,/turf/simulated/floor/tiled/eris/steel/bar_dance,/area/submap/casino_event)
+"ad" = (/obj/structure/table/borosilicate,/turf/simulated/floor/tiled/eris/steel/bar_light,/area/submap/casino_event)
+"ae" = (/turf/simulated/wall,/area/submap/casino_event)
+"af" = (/obj/structure/table/bench/padded,/obj/effect/floor_decal/spline/plain,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/eris/steel/bar_dance,/area/submap/casino_event)
+"ag" = (/obj/structure/table/bench/padded,/obj/effect/floor_decal/spline/plain,/turf/simulated/floor/tiled/eris/steel/bar_dance,/area/submap/casino_event)
+"ah" = (/obj/structure/table/bench/padded,/obj/effect/floor_decal/spline/plain,/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled/eris/steel/bar_dance,/area/submap/casino_event)
+"ai" = (/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"aj" = (/obj/structure/bed/chair/bay/comfy/blue,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"ak" = (/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"al" = (/obj/structure/table/darkglass,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"am" = (/obj/structure/bed/chair/bay/comfy/blue{dir = 1},/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"an" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"ao" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"ap" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"aq" = (/turf/simulated/floor/carpet/retro,/area/submap/casino_event)
+"ar" = (/obj/machinery/computer/arcade/orion_trail,/turf/simulated/floor/carpet/retro,/area/submap/casino_event)
+"as" = (/obj/machinery/computer/arcade/battle,/turf/simulated/floor/carpet/retro,/area/submap/casino_event)
+"at" = (/obj/machinery/atm{pixel_y = 30},/turf/simulated/floor/carpet/retro,/area/submap/casino_event)
+"au" = (/obj/structure/flora/pottedplant/largebush,/turf/simulated/floor/carpet/retro,/area/submap/casino_event)
+"av" = (/obj/machinery/door/morgue{dir = 2; name = "Private Room"; req_access = null},/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"aw" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/retro,/area/submap/casino_event)
+"ax" = (/obj/item/weapon/stool/baystool/padded{dir = 1},/turf/simulated/floor/carpet/retro,/area/submap/casino_event)
+"ay" = (/obj/structure/flora/pottedplant/tall,/obj/effect/floor_decal/spline/plain{dir = 4},/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"az" = (/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"aA" = (/obj/structure/table/woodentable,/obj/machinery/light{dir = 8},/obj/effect/floor_decal/spline/plain{dir = 4},/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"aB" = (/obj/machinery/door/airlock{name = "Arcade"},/turf/simulated/floor/carpet/retro,/area/submap/casino_event)
+"aC" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/carpet/retro,/area/submap/casino_event)
+"aD" = (/obj/structure/table/gamblingtable,/turf/simulated/floor/carpet/retro,/area/submap/casino_event)
+"aE" = (/obj/structure/bed/chair/comfy/black{dir = 8},/turf/simulated/floor/carpet/retro,/area/submap/casino_event)
+"aF" = (/obj/machinery/clawmachine,/turf/simulated/floor/carpet/retro,/area/submap/casino_event)
+"aG" = (/obj/structure/table/woodentable,/obj/machinery/light,/turf/simulated/floor/carpet/retro,/area/submap/casino_event)
+"aH" = (/obj/structure/table/gamblingtable,/obj/item/weapon/storage/pill_bottle/dice_nerd,/obj/machinery/light,/turf/simulated/floor/carpet/retro,/area/submap/casino_event)
+"aI" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"aJ" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"aK" = (/obj/structure/flora/pottedplant/tall,/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"aL" = (/obj/structure/closet,/obj/random/junk,/obj/random/junk,/obj/random/maintenance,/turf/simulated/floor/plating,/area/submap/casino_event)
+"aM" = (/obj/structure/closet,/obj/random/junk,/obj/random/junk,/obj/random/maintenance,/obj/random/maintenance,/turf/simulated/floor/plating,/area/submap/casino_event)
+"aN" = (/obj/structure/table/steel,/obj/random/junk,/obj/random/maintenance,/turf/simulated/floor/plating,/area/submap/casino_event)
+"aO" = (/turf/simulated/floor/plating,/area/submap/casino_event)
+"aP" = (/obj/random/junk,/turf/simulated/floor/plating,/area/submap/casino_event)
+"aQ" = (/obj/structure/bed/chair/wood,/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"aR" = (/obj/structure/table/woodentable,/obj/machinery/light{dir = 4},/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"aS" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating,/area/submap/casino_event)
+"aT" = (/obj/structure/catwalk,/turf/simulated/floor/plating,/area/submap/casino_event)
+"aU" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"aV" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/submap/casino_event)
+"aW" = (/obj/random/trash,/obj/structure/railing{dir = 8},/obj/structure/railing{dir = 1},/obj/random/junk,/turf/simulated/floor/plating,/area/submap/casino_event)
+"aX" = (/obj/random/trash,/obj/random/trash,/turf/simulated/floor/plating,/area/submap/casino_event)
+"aY" = (/obj/random/trash,/obj/machinery/light/small{dir = 4},/obj/random/junk,/turf/simulated/floor/plating,/area/submap/casino_event)
+"aZ" = (/obj/structure/bed/chair/wood{dir = 1},/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"ba" = (/obj/structure/window/basic,/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"bb" = (/obj/machinery/door/airlock{id_tag = "L7 PGR 1"; name = "Private Game Room 1"},/turf/simulated/floor/carpet/purple,/area/submap/casino_event)
+"bc" = (/obj/machinery/door/airlock{id_tag = "L7 PGR 2"; name = "Private Game Room 2"},/turf/simulated/floor/carpet/green,/area/submap/casino_event)
+"bd" = (/obj/machinery/door/airlock{id_tag = "L7 PGR 3"; name = "Private Game Room 3"},/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"be" = (/obj/random/trash,/obj/random/trash,/obj/machinery/light/small,/obj/structure/railing{dir = 8},/obj/random/junk,/turf/simulated/floor/plating,/area/submap/casino_event)
+"bf" = (/obj/random/trash,/obj/random/trash,/obj/random/junk,/obj/random/junk,/turf/simulated/floor/plating,/area/submap/casino_event)
+"bg" = (/obj/random/trash_pile,/obj/random/trash,/obj/random/trash,/obj/random/junk,/turf/simulated/floor/plating,/area/submap/casino_event)
+"bh" = (/obj/machinery/slot_machine,/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"bi" = (/obj/machinery/slot_machine,/obj/machinery/light{dir = 4},/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"bj" = (/obj/structure/closet/walllocker_double{dir = 8; name = "Game Cabinet"; pixel_x = -28},/obj/item/weapon/book/manual/wizzoffguide,/obj/item/weapon/deck/wizoff,/obj/item/weapon/storage/pill_bottle/dice_nerd,/obj/item/weapon/storage/pill_bottle/dice,/obj/item/weapon/deck/cards/casino,/obj/item/weapon/deck/cah,/obj/item/weapon/deck/cah/black,/obj/item/weapon/storage/dicecup,/turf/simulated/floor/carpet/purple,/area/submap/casino_event)
+"bk" = (/turf/simulated/floor/carpet/purple,/area/submap/casino_event)
+"bl" = (/obj/machinery/button/remote/airlock{id = "L7 PGR 1"; name = "Door Lock"; pixel_x = 24; pixel_y = 26; specialfunctions = 4},/turf/simulated/floor/carpet/purple,/area/submap/casino_event)
+"bm" = (/obj/structure/closet/walllocker_double{dir = 8; name = "Game Cabinet"; pixel_x = -28},/obj/item/weapon/book/manual/wizzoffguide,/obj/item/weapon/deck/wizoff,/obj/item/weapon/storage/pill_bottle/dice_nerd,/obj/item/weapon/storage/pill_bottle/dice,/obj/item/weapon/deck/cards/casino,/obj/item/weapon/deck/cah,/obj/item/weapon/deck/cah/black,/obj/item/weapon/storage/dicecup,/turf/simulated/floor/carpet/green,/area/submap/casino_event)
+"bn" = (/turf/simulated/floor/carpet/green,/area/submap/casino_event)
+"bo" = (/obj/machinery/button/remote/airlock{id = "L7 PGR 2"; name = "Door Lock"; pixel_x = 24; pixel_y = 26; specialfunctions = 4},/turf/simulated/floor/carpet/green,/area/submap/casino_event)
+"bp" = (/obj/structure/closet/walllocker_double{dir = 8; name = "Game Cabinet"; pixel_x = -28},/obj/item/weapon/book/manual/wizzoffguide,/obj/item/weapon/deck/wizoff,/obj/item/weapon/storage/pill_bottle/dice_nerd,/obj/item/weapon/storage/pill_bottle/dice,/obj/item/weapon/deck/cards/casino,/obj/item/weapon/deck/cah,/obj/item/weapon/deck/cah/black,/obj/item/weapon/storage/dicecup,/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"bq" = (/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"br" = (/obj/machinery/button/remote/airlock{id = "L7 PGR 3"; name = "Door Lock"; pixel_x = 24; pixel_y = 26; specialfunctions = 4},/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"bs" = (/obj/structure/railing{dir = 1},/obj/random/trash_pile,/turf/simulated/floor/plating,/area/submap/casino_event)
+"bt" = (/obj/random/trash_pile,/obj/random/trash,/obj/random/junk,/obj/random/junk,/turf/simulated/floor/plating,/area/submap/casino_event)
+"bu" = (/obj/random/trash,/obj/random/junk,/turf/simulated/floor/plating,/area/submap/casino_event)
+"bv" = (/obj/item/weapon/stool/baystool/padded{dir = 1},/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"bw" = (/obj/structure/bed/chair/comfy/beige,/turf/simulated/floor/carpet/purple,/area/submap/casino_event)
+"bx" = (/obj/structure/bed/chair/comfy/beige,/turf/simulated/floor/carpet/green,/area/submap/casino_event)
+"by" = (/obj/structure/bed/chair/comfy/beige,/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"bz" = (/obj/machinery/door/airlock/maintenance/common{name = "Trash Collection"},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/submap/casino_event)
+"bA" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/carpet/purple,/area/submap/casino_event)
+"bB" = (/obj/structure/table/gamblingtable,/turf/simulated/floor/carpet/purple,/area/submap/casino_event)
+"bC" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor/carpet/purple,/area/submap/casino_event)
+"bD" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/carpet/green,/area/submap/casino_event)
+"bE" = (/obj/structure/table/gamblingtable,/turf/simulated/floor/carpet/green,/area/submap/casino_event)
+"bF" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor/carpet/green,/area/submap/casino_event)
+"bG" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"bH" = (/obj/structure/table/gamblingtable,/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"bI" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"bJ" = (/obj/random/trash_pile,/turf/simulated/floor/plating,/area/submap/casino_event)
+"bK" = (/obj/random/trash_pile,/obj/effect/floor_decal/rust,/obj/random/junk,/turf/simulated/floor/plating,/area/submap/casino_event)
+"bL" = (/obj/effect/floor_decal/rust,/turf/simulated/floor/plating,/area/submap/casino_event)
+"bM" = (/obj/effect/floor_decal/rust,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/submap/casino_event)
+"bN" = (/obj/effect/floor_decal/rust,/obj/random/trash_pile,/turf/simulated/floor/plating,/area/submap/casino_event)
+"bO" = (/obj/effect/floor_decal/rust,/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/submap/casino_event)
+"bP" = (/obj/effect/floor_decal/rust,/obj/structure/closet/firecloset,/turf/simulated/floor/plating,/area/submap/casino_event)
+"bQ" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"bR" = (/obj/structure/bed/chair/sofa/left/black{dir = 4},/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"bS" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/casino,/obj/item/weapon/pen,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"bT" = (/obj/structure/bed/chair/sofa/right/black{dir = 8},/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"bU" = (/obj/structure/mirror{pixel_y = 38},/obj/structure/sink{pixel_y = 20},/turf/simulated/floor/tiled/white,/area/submap/casino_event)
+"bV" = (/obj/structure/toilet{pixel_y = 10},/turf/simulated/floor/tiled/white,/area/submap/casino_event)
+"bW" = (/obj/structure/table/woodentable,/obj/item/trash/asian_bowl,/obj/item/weapon/material/kitchen/utensil/fork/plastic,/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"bX" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/purple,/area/submap/casino_event)
+"bY" = (/obj/structure/bed/chair/wood{dir = 1},/turf/simulated/floor/carpet/purple,/area/submap/casino_event)
+"bZ" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/floor/carpet/purple,/area/submap/casino_event)
+"ca" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/green,/area/submap/casino_event)
+"cb" = (/obj/structure/bed/chair/wood{dir = 1},/turf/simulated/floor/carpet/green,/area/submap/casino_event)
+"cc" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/floor/carpet/green,/area/submap/casino_event)
+"cd" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"ce" = (/obj/structure/bed/chair/wood{dir = 1},/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"cf" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"cg" = (/obj/structure/closet,/obj/random/junk,/obj/random/junk,/obj/random/maintenance,/obj/random/maintenance,/obj/effect/floor_decal/rust,/obj/random/contraband,/turf/simulated/floor/plating,/area/submap/casino_event)
+"ch" = (/obj/machinery/door/airlock/maintenance/common,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/submap/casino_event)
+"ci" = (/obj/machinery/door/airlock/maintenance/common,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"cj" = (/obj/structure/bed/chair/sofa/black{dir = 4},/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"ck" = (/obj/structure/table/woodentable,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"cl" = (/obj/structure/bed/chair/sofa/black{dir = 8},/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"cm" = (/obj/machinery/door/airlock{id_tag = "br bathroom"; name = "Bathroom"},/turf/simulated/floor/tiled/white,/area/submap/casino_event)
+"cn" = (/turf/simulated/floor/tiled/white,/area/submap/casino_event)
+"co" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled/white,/area/submap/casino_event)
+"cp" = (/obj/structure/closet,/obj/random/junk,/obj/random/junk,/obj/random/junk,/obj/random/maintenance,/obj/effect/floor_decal/rust,/turf/simulated/floor/plating,/area/submap/casino_event)
+"cq" = (/obj/structure/railing{dir = 1},/turf/simulated/floor/plating,/area/submap/casino_event)
+"cr" = (/obj/structure/catwalk,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/submap/casino_event)
+"cs" = (/obj/structure/bed/chair/sofa/right/black{dir = 4},/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"ct" = (/obj/structure/bed/chair/sofa/left/black{dir = 8},/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"cu" = (/obj/structure/table/standard,/obj/machinery/button/remote/airlock{id = "br bathroom"; name = "Bathroom Lock"; pixel_x = -20; pixel_y = 10; specialfunctions = 4},/turf/simulated/floor/tiled/white,/area/submap/casino_event)
+"cv" = (/obj/machinery/vending/wallmed1/public{pixel_x = 28},/turf/simulated/floor/tiled/white,/area/submap/casino_event)
+"cw" = (/obj/structure/bed/chair/comfy/beige{dir = 1; icon_state = "comfychair_preview"},/turf/simulated/floor/carpet/purple,/area/submap/casino_event)
+"cx" = (/obj/structure/bed/chair/comfy/beige{dir = 1; icon_state = "comfychair_preview"},/obj/machinery/light,/turf/simulated/floor/carpet/purple,/area/submap/casino_event)
+"cy" = (/obj/structure/bed/chair/comfy/beige{dir = 1; icon_state = "comfychair_preview"},/turf/simulated/floor/carpet/green,/area/submap/casino_event)
+"cz" = (/obj/structure/bed/chair/comfy/beige{dir = 1; icon_state = "comfychair_preview"},/obj/machinery/light,/turf/simulated/floor/carpet/green,/area/submap/casino_event)
+"cA" = (/obj/structure/bed/chair/comfy/beige{dir = 1},/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"cB" = (/obj/structure/bed/chair/comfy/beige{dir = 1},/obj/machinery/light,/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"cC" = (/obj/machinery/door/airlock/maintenance/common,/turf/simulated/floor/plating,/area/submap/casino_event)
+"cD" = (/turf/simulated/wall/r_wall,/area/submap/casino_event)
+"cE" = (/obj/structure/table/steel,/obj/effect/floor_decal/rust,/obj/effect/decal/cleanable/blood/oil,/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/submap/casino_event)
+"cF" = (/obj/structure/table/rack/steel,/obj/random/maintenance,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/turf/simulated/floor/plating,/area/submap/casino_event)
+"cG" = (/turf/simulated/floor/tiled,/area/submap/casino_event)
+"cH" = (/obj/effect/floor_decal/corner/lightorange{dir = 5},/obj/effect/floor_decal/borderfloor/shifted{dir = 1},/obj/effect/floor_decal/corner/lightorange/border/shifted{dir = 1},/obj/structure/closet/secure_closet/brig{id = "Cell 2"},/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"cI" = (/obj/effect/floor_decal/borderfloor/shifted{dir = 1},/obj/effect/floor_decal/corner/lightorange/border/shifted{dir = 1},/obj/effect/floor_decal/corner/lightorange{dir = 5},/obj/machinery/light/small{dir = 1},/obj/structure/bed/padded,/obj/item/weapon/bedsheet,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"cJ" = (/obj/effect/floor_decal/corner/lightorange{dir = 5},/obj/effect/floor_decal/borderfloor/shifted{dir = 1},/obj/effect/floor_decal/corner/lightorange/border/shifted{dir = 1},/obj/structure/table/steel,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"cK" = (/obj/structure/table/steel,/obj/random/maintenance/engineering,/obj/random/junk,/obj/effect/floor_decal/rust,/obj/random/maintenance/engineering,/turf/simulated/floor/plating,/area/submap/casino_event)
+"cL" = (/obj/effect/floor_decal/rust,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/submap/casino_event)
+"cM" = (/obj/structure/table/rack/steel,/obj/random/maintenance,/obj/random/junk,/obj/random/junk,/obj/effect/floor_decal/rust,/obj/effect/decal/cleanable/blood/oil,/obj/random/contraband,/turf/simulated/floor/plating,/area/submap/casino_event)
+"cN" = (/obj/structure/table/rack/shelf,/obj/item/device/slow_sizegun,/obj/item/device/slow_sizegun,/obj/item/device/slow_sizegun,/obj/item/weapon/gun/energy/sizegun,/obj/item/weapon/gun/energy/sizegun,/obj/item/weapon/gun/energy/sizegun,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"cO" = (/obj/machinery/atm{pixel_y = 30},/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"cP" = (/obj/machinery/casino_prize_dispenser,/obj/effect/floor_decal/spline/plain{dir = 10},/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"cQ" = (/obj/effect/floor_decal/spline/plain,/obj/structure/table/woodentable,/obj/item/weapon/material/ashtray/glass,/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"cR" = (/obj/machinery/casino_prize_dispenser,/obj/effect/floor_decal/spline/plain{dir = 6},/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"cS" = (/obj/machinery/casinosentientprize_handler{casinosentientprize_sale = "enabled"; pixel_y = 32},/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"cT" = (/obj/machinery/chipmachine{pixel_y = 32},/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"cU" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/security,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"cV" = (/obj/structure/table/rack/shelf,/obj/item/weapon/storage/box/roulette_balls_cheat,/obj/item/weapon/storage/box/roulette_balls_cheat,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"cW" = (/obj/structure/table/rack/shelf,/obj/item/weapon/deck/cards/casino,/obj/item/weapon/deck/cards/casino,/obj/item/weapon/deck/cards/casino,/obj/item/weapon/deck/cards/casino,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"cX" = (/obj/structure/table/rack/shelf,/obj/item/weapon/deck/cah,/obj/item/weapon/deck/cah,/obj/item/weapon/deck/cah/black,/obj/item/weapon/deck/schnapsen,/obj/item/weapon/deck/wizoff,/obj/item/weapon/deck/tarot,/obj/item/weapon/deck/egy,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"cY" = (/obj/structure/table/rack/shelf,/obj/item/weapon/gun/energy/mouseray/metamorphosis/advanced,/obj/item/weapon/gun/energy/mouseray/metamorphosis/advanced,/obj/item/weapon/gun/energy/mouseray/metamorphosis/advanced,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"cZ" = (/obj/effect/floor_decal/spline/plain{dir = 9},/obj/structure/flora/pottedplant/stoutbush,/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"da" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"db" = (/obj/structure/table/steel,/obj/item/weapon/spacecasinocash/c1000{pixel_x = -3; pixel_y = -3},/obj/item/weapon/spacecasinocash/c1000,/obj/item/weapon/spacecasinocash/c1000{pixel_x = 3; pixel_y = 3},/obj/item/weapon/spacecasinocash/c1000,/obj/item/weapon/spacecasinocash/c1000,/obj/item/weapon/spacecasinocash/c1000,/obj/item/weapon/spacecasinocash/c1000,/obj/item/weapon/spacecasinocash/c1000,/obj/item/weapon/spacecasinocash/c1000,/obj/item/weapon/spacecasinocash/c1000,/obj/item/weapon/spacecasinocash/c1000,/obj/item/weapon/spacecasinocash/c1000,/obj/item/weapon/spacecasinocash/c1000,/obj/item/weapon/spacecasinocash/c1000,/obj/item/weapon/spacecasinocash/c1000,/obj/item/weapon/spacecasinocash/c1000,/obj/item/weapon/spacecasinocash/c1000,/turf/simulated/floor/tiled/techfloor,/area/submap/casino_event)
+"dc" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/submap/casino_event)
+"dd" = (/obj/structure/table/rack/steel,/obj/item/weapon/spacecash/c1000{pixel_x = 6; pixel_y = 6},/obj/item/weapon/spacecash/c1000{pixel_x = 3; pixel_y = 3},/obj/item/weapon/spacecash/c1000,/turf/simulated/floor/tiled/techfloor,/area/submap/casino_event)
+"de" = (/obj/structure/closet,/obj/random/junk,/obj/random/junk,/obj/random/maintenance,/obj/random/maintenance/engineering,/obj/item/device/flashlight/color,/obj/structure/railing{dir = 4},/turf/simulated/floor/plating,/area/submap/casino_event)
+"df" = (/obj/structure/table/rack/shelf,/obj/item/weapon/spacecasinocash/c1000,/obj/item/weapon/spacecasinocash/c1000,/obj/item/weapon/spacecasinocash/c1000,/obj/item/weapon/spacecasinocash/c1000,/obj/item/weapon/spacecasinocash/c1000,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"dg" = (/obj/structure/table/rack/shelf,/obj/item/device/bodysnatcher,/obj/item/device/bodysnatcher,/obj/item/device/sleevemate,/obj/item/device/sleevemate,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"dh" = (/obj/structure/flora/pottedplant/unusual,/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"di" = (/obj/structure/bed/chair/wood{dir = 4},/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"dj" = (/obj/structure/bed/chair/wood{dir = 8},/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"dk" = (/obj/machinery/light/floortube{dir = 8},/obj/structure/casino_table/roulette_chart,/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"dl" = (/obj/structure/casino_table/roulette_table,/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"dm" = (/obj/structure/casino_table/craps,/obj/item/weapon/dice{pixel_x = 4; pixel_y = 6},/obj/machinery/light/floortube{dir = 8},/obj/item/weapon/dice{pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/dicecup,/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"dn" = (/obj/structure/casino_table/craps{dir = 1},/obj/item/weapon/dice{pixel_x = 4; pixel_y = 6},/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"do" = (/obj/structure/table/woodentable,/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"dp" = (/obj/machinery/shower{pixel_y = 20},/obj/structure/curtain/open/shower,/obj/effect/floor_decal/steeldecal/steel_decals5,/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 6},/obj/random/soap,/turf/simulated/floor/tiled,/area/submap/casino_event)
+"dq" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet/green,/area/submap/casino_event)
+"dr" = (/obj/machinery/chipmachine{pixel_y = 32},/obj/machinery/atm{pixel_x = 32},/turf/simulated/floor/carpet/green,/area/submap/casino_event)
+"ds" = (/obj/structure/toilet{pixel_y = 10},/turf/simulated/floor/tiled/kafel_full,/area/submap/casino_event)
+"dt" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet/purple,/area/submap/casino_event)
+"du" = (/obj/machinery/chipmachine{pixel_y = 32},/obj/machinery/atm{pixel_x = 32},/turf/simulated/floor/carpet/purple,/area/submap/casino_event)
+"dv" = (/obj/structure/sink{dir = 8; pixel_x = -13; pixel_y = -4},/obj/structure/mirror{pixel_x = -24},/turf/simulated/floor/tiled/kafel_full,/area/submap/casino_event)
+"dw" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"dx" = (/obj/machinery/chipmachine{pixel_y = 32},/obj/machinery/atm{pixel_x = 32},/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"dy" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled/kafel_full,/area/submap/casino_event)
+"dz" = (/turf/simulated/floor/carpet/sblucarpet,/area/submap/casino_event)
+"dA" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet/sblucarpet,/area/submap/casino_event)
+"dB" = (/obj/machinery/chipmachine{pixel_y = 32},/obj/machinery/atm{pixel_x = 32},/turf/simulated/floor/carpet/sblucarpet,/area/submap/casino_event)
+"dC" = (/obj/machinery/door/airlock{id_tag = "br bathroom"; name = "Bathroom"},/turf/simulated/floor/tiled/kafel_full,/area/submap/casino_event)
+"dD" = (/turf/simulated/floor/carpet/purcarpet,/area/submap/casino_event)
+"dE" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet/purcarpet,/area/submap/casino_event)
+"dF" = (/obj/machinery/chipmachine{pixel_y = 32},/obj/machinery/atm{pixel_x = 32},/turf/simulated/floor/carpet/purcarpet,/area/submap/casino_event)
+"dG" = (/obj/effect/floor_decal/corner/lightorange{dir = 5},/obj/effect/floor_decal/borderfloor/shifted{dir = 1},/obj/effect/floor_decal/corner/lightorange/border/shifted{dir = 1},/obj/structure/closet/secure_closet/brig{id = "Cell 1"},/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"dH" = (/obj/structure/table/steel,/obj/item/stack/material/diamond{amount = 50; pixel_x = -5; pixel_y = -5},/obj/item/stack/material/diamond{amount = 50},/obj/item/stack/material/diamond{amount = 50; pixel_x = 5; pixel_y = 5},/turf/simulated/floor/tiled/techfloor,/area/submap/casino_event)
+"dI" = (/turf/simulated/floor/tiled/techfloor,/area/submap/casino_event)
+"dJ" = (/obj/random/junk,/obj/random/junk,/obj/random/junk,/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance/engineering,/obj/structure/table/rack/steel,/obj/random/contraband,/obj/structure/railing,/obj/structure/railing{dir = 4},/turf/simulated/floor/plating,/area/submap/casino_event)
+"dK" = (/obj/structure/table/rack/shelf,/obj/item/weapon/storage/box/roulette_balls_fancy,/obj/item/weapon/storage/box/roulette_balls_fancy,/obj/item/weapon/storage/box/roulette_balls_fancy,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"dL" = (/obj/structure/table/rack/shelf,/obj/item/weapon/storage/pill_bottle/dice,/obj/item/weapon/storage/pill_bottle/dice,/obj/item/weapon/storage/pill_bottle/dice,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"dM" = (/obj/structure/table/woodentable,/obj/item/trash/asian_bowl,/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"dN" = (/obj/structure/table/woodentable,/obj/item/weapon/material/kitchen/utensil/fork/plastic,/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"dO" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"dP" = (/obj/structure/casino_table/blackjack_r{dir = 4},/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"dQ" = (/obj/item/weapon/stool/padded{dir = 8},/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"dR" = (/obj/effect/floor_decal/spline/plain{dir = 10},/obj/structure/flora/pottedplant/stoutbush,/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"dS" = (/obj/structure/casino_table/roulette_chart,/turf/simulated/floor/carpet/green,/area/submap/casino_event)
+"dT" = (/obj/structure/casino_table/roulette_table,/turf/simulated/floor/carpet/green,/area/submap/casino_event)
+"dU" = (/obj/structure/casino_table/roulette_chart,/turf/simulated/floor/carpet/purple,/area/submap/casino_event)
+"dV" = (/obj/structure/casino_table/roulette_table,/turf/simulated/floor/carpet/purple,/area/submap/casino_event)
+"dW" = (/obj/structure/casino_table/roulette_chart,/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"dX" = (/obj/structure/casino_table/roulette_table,/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"dY" = (/obj/structure/casino_table/craps,/obj/item/weapon/dice{pixel_x = 4; pixel_y = 6},/turf/simulated/floor/carpet/sblucarpet,/area/submap/casino_event)
+"dZ" = (/obj/structure/casino_table/craps{dir = 1},/obj/item/weapon/dice{pixel_x = 4; pixel_y = 6},/obj/item/weapon/dice{pixel_x = 4; pixel_y = 6},/turf/simulated/floor/carpet/sblucarpet,/area/submap/casino_event)
+"ea" = (/obj/structure/casino_table/craps,/obj/item/weapon/dice{pixel_x = 4; pixel_y = 6},/turf/simulated/floor/carpet/purcarpet,/area/submap/casino_event)
+"eb" = (/obj/structure/casino_table/craps{dir = 1},/obj/item/weapon/dice{pixel_x = 4; pixel_y = 6},/obj/item/weapon/dice{pixel_x = 4; pixel_y = 6},/turf/simulated/floor/carpet/purcarpet,/area/submap/casino_event)
+"ec" = (/obj/structure/table/steel,/obj/random/cash/huge{pixel_y = 8},/obj/random/cash/huge,/obj/item/weapon/bikehorn{pixel_x = -7; pixel_y = 7},/turf/simulated/floor/tiled/techfloor,/area/submap/casino_event)
+"ed" = (/obj/structure/table/rack/shelf,/obj/item/weapon/storage/pill_bottle/dice_nerd,/obj/item/weapon/storage/pill_bottle/dice_nerd,/obj/item/weapon/storage/pill_bottle/dice_nerd,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"ee" = (/obj/machinery/door/airlock{name = "Breakroom"; req_access = list(101)},/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"ef" = (/obj/item/weapon/stool/padded{dir = 4},/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"eg" = (/obj/structure/casino_table/blackjack_m{dir = 4},/obj/item/weapon/deck/cards/casino,/obj/machinery/light/floortube{dir = 8},/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"eh" = (/obj/machinery/button/remote/airlock{id = "roulette_1"; name = "Door Lock"; pixel_x = 24; pixel_y = -26; specialfunctions = 4},/turf/simulated/floor/carpet/green,/area/submap/casino_event)
+"ei" = (/obj/machinery/button/remote/airlock{id = "roulette_2"; name = "Door Lock"; pixel_x = 24; pixel_y = -26; specialfunctions = 4},/turf/simulated/floor/carpet/purple,/area/submap/casino_event)
+"ej" = (/obj/machinery/button/remote/airlock{id = "roulette_3"; name = "Door Lock"; pixel_x = 24; pixel_y = -26; specialfunctions = 4},/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"ek" = (/obj/machinery/button/remote/airlock{id = "craps_1"; name = "Door Lock"; pixel_x = 24; pixel_y = -26; specialfunctions = 4},/turf/simulated/floor/carpet/sblucarpet,/area/submap/casino_event)
+"el" = (/obj/machinery/button/remote/airlock{id = "craps_2"; name = "Door Lock"; pixel_x = 24; pixel_y = -26; specialfunctions = 4},/turf/simulated/floor/carpet/purcarpet,/area/submap/casino_event)
+"em" = (/obj/machinery/door/airlock/highsecurity{locked = 1; name = "Safe"; req_access = list(101); req_one_access = null},/turf/simulated/floor/tiled/techfloor,/area/submap/casino_event)
+"en" = (/obj/structure/table/rack/shelf,/obj/item/weapon/storage/box/roulette_balls_normal,/obj/item/weapon/storage/box/roulette_balls_normal,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"eo" = (/obj/structure/table/rack/shelf,/obj/item/weapon/storage/dicecup,/obj/item/weapon/storage/dicecup,/obj/item/weapon/storage/dicecup,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"ep" = (/obj/structure/table/rack/shelf,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c1000,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"eq" = (/obj/structure/table/woodentable,/obj/random/drinkbottle,/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"er" = (/obj/structure/casino_table/blackjack_l{dir = 4},/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"es" = (/obj/structure/closet/walllocker_double{dir = 8; name = "Game Cabinet"; pixel_x = -28},/obj/item/weapon/storage/box/roulette_balls_normal,/obj/item/weapon/storage/box/roulette_balls_fancy,/obj/item/weapon/storage/box/roulette_balls_cheat,/turf/simulated/floor/carpet/green,/area/submap/casino_event)
+"et" = (/obj/structure/casino_table/craps{dir = 1},/obj/item/weapon/dice,/obj/item/weapon/dice{pixel_x = 4; pixel_y = 6},/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"eu" = (/obj/machinery/door/airlock{id_tag = "roulette_1"; name = "Private Roulette Room 1"},/turf/simulated/floor/carpet/green,/area/submap/casino_event)
+"ev" = (/obj/machinery/door/airlock{id_tag = "roulette_2"; name = "Private Roulette Room 2"},/turf/simulated/floor/carpet/purple,/area/submap/casino_event)
+"ew" = (/obj/machinery/door/airlock{id_tag = "roulette_3"; name = "Private Roulette Room 3"},/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"ex" = (/obj/machinery/door/airlock{id_tag = "craps_1"; name = "Private Craps Room 1"},/turf/simulated/floor/carpet/sblucarpet,/area/submap/casino_event)
+"ey" = (/obj/machinery/door/airlock{id_tag = "craps_2"; name = "Private Craps Room 2"},/turf/simulated/floor/carpet/purcarpet,/area/submap/casino_event)
+"ez" = (/obj/machinery/door/airlock/glass_security{req_access = list(101); req_one_access = null},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"eA" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 4},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 4},/obj/structure/flora/pottedplant/unusual,/turf/simulated/floor/tiled,/area/submap/casino_event)
+"eB" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 1},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 1},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"eC" = (/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/red/border{dir = 5},/obj/effect/floor_decal/borderfloor/corner2{dir = 4},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 4},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"eD" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/obj/machinery/vending/security{dir = 8; req_access = list(101)},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"eE" = (/obj/structure/table/woodentable,/obj/random/maintenance/foodstuff,/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"eF" = (/obj/structure/flora/pottedplant/tropical,/turf/simulated/floor/tiled,/area/submap/casino_event)
+"eG" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"eH" = (/obj/machinery/door/airlock/maintenance/common,/obj/effect/floor_decal/rust,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/submap/casino_event)
+"eI" = (/obj/structure/coatrack,/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"eJ" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 8},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 8},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"eK" = (/obj/structure/table/reinforced,/obj/item/device/radio/headset/casino,/obj/item/device/radio/headset/casino,/obj/item/device/radio/headset/casino,/obj/item/device/radio/headset/casino,/obj/item/device/radio/headset/casino/bowman,/obj/item/device/radio/headset/casino/bowman,/turf/simulated/floor/tiled,/area/submap/casino_event)
+"eL" = (/obj/structure/table/glass,/obj/machinery/vending/wallmed1/public{pixel_y = -32},/obj/item/weapon/backup_implanter,/obj/item/weapon/backup_implanter,/obj/item/weapon/backup_implanter,/obj/item/weapon/backup_implanter,/obj/item/weapon/backup_implanter,/turf/simulated/floor/tiled/white,/area/submap/casino_event)
+"eM" = (/obj/random/trash_pile,/obj/random/maintenance,/obj/effect/floor_decal/rust,/obj/structure/railing{dir = 4},/turf/simulated/floor/plating,/area/submap/casino_event)
+"eN" = (/turf/simulated/floor/lino,/area/submap/casino_event)
+"eO" = (/obj/structure/casino_table/craps{dir = 1},/obj/item/weapon/dice{pixel_x = 4; pixel_y = 6},/obj/item/weapon/dice{pixel_x = 4; pixel_y = 6},/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"eP" = (/obj/structure/closet,/turf/simulated/floor/tiled/white,/area/submap/casino_event)
+"eQ" = (/obj/machinery/light{dir = 1},/obj/machinery/vending/loadout/uniform,/turf/simulated/floor/tiled/white,/area/submap/casino_event)
+"eR" = (/obj/machinery/transhuman/autoresleever,/turf/simulated/floor/tiled/white,/area/submap/casino_event)
+"eS" = (/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/red/border{dir = 9},/obj/effect/floor_decal/borderfloor/corner2{dir = 1},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 1},/obj/machinery/vending/wallmed1/public{pixel_y = 28},/obj/structure/table/rack,/obj/item/weapon/spacecasinocash/c500,/obj/item/weapon/spacecasinocash/c500,/obj/item/weapon/spacecasinocash/c500,/turf/simulated/floor/tiled,/area/submap/casino_event)
+"eT" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 4},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"eU" = (/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/red/border{dir = 5},/obj/structure/closet/firecloset,/turf/simulated/floor/tiled,/area/submap/casino_event)
+"eV" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"eW" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/regular,/obj/item/device/radio,/turf/simulated/floor/tiled,/area/submap/casino_event)
+"eX" = (/obj/structure/bed/chair/office/light{dir = 4},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"eY" = (/obj/item/modular_computer/console{dir = 8},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"eZ" = (/obj/random/trash_pile,/obj/effect/floor_decal/rust,/obj/structure/railing{dir = 4},/turf/simulated/floor/plating,/area/submap/casino_event)
+"fa" = (/obj/machinery/door/airlock/maintenance/common,/turf/simulated/floor/wood,/area/submap/casino_event)
+"fb" = (/obj/structure/table/woodentable,/obj/item/trash/bowl,/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"fc" = (/obj/machinery/door/airlock{id_tag = "blackjack_1"; name = "Private Blackjack Room 1"},/turf/simulated/floor/carpet/bcarpet,/area/submap/casino_event)
+"fd" = (/obj/machinery/door/airlock{id_tag = "blackjack_2"; name = "Private Blackjack Room 2"},/turf/simulated/floor/carpet/gaycarpet,/area/submap/casino_event)
+"fe" = (/obj/machinery/door/airlock{id_tag = "blackjack_3"; name = "Private Blackjack Room 3"},/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"ff" = (/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "casino_check"},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"fg" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"fh" = (/obj/structure/table/reinforced,/obj/item/ammo_magazine/m45{pixel_x = -5; pixel_y = -3},/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45{pixel_x = 5; pixel_y = 3},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"fi" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/obj/structure/table/reinforced,/obj/item/weapon/handcuffs{pixel_y = -5},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs{pixel_y = 5},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"fj" = (/obj/structure/casino_table/blackjack_m{dir = 4},/obj/machinery/light/floortube{dir = 8},/obj/item/weapon/deck/cards/casino,/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"fk" = (/obj/machinery/chipmachine{pixel_x = -32},/obj/machinery/atm{pixel_y = 30},/turf/simulated/floor/carpet/bcarpet,/area/submap/casino_event)
+"fl" = (/turf/simulated/floor/carpet/bcarpet,/area/submap/casino_event)
+"fm" = (/obj/machinery/button/remote/airlock{id = "blackjack_1"; name = "Door Lock"; pixel_x = 24; pixel_y = 26; specialfunctions = 4},/turf/simulated/floor/carpet/bcarpet,/area/submap/casino_event)
+"fn" = (/obj/structure/closet/walllocker_double{dir = 8; name = "Game Cabinet"; pixel_x = -28},/obj/item/weapon/storage/box/roulette_balls_normal,/obj/item/weapon/storage/box/roulette_balls_fancy,/obj/item/weapon/storage/box/roulette_balls_cheat,/turf/simulated/floor/carpet/purple,/area/submap/casino_event)
+"fo" = (/obj/machinery/chipmachine{pixel_x = -32},/obj/machinery/atm{pixel_y = 30},/turf/simulated/floor/carpet/gaycarpet,/area/submap/casino_event)
+"fp" = (/turf/simulated/floor/carpet/gaycarpet,/area/submap/casino_event)
+"fq" = (/obj/machinery/button/remote/airlock{id = "blackjack_2"; name = "Door Lock"; pixel_x = 24; pixel_y = 26; specialfunctions = 4},/turf/simulated/floor/carpet/gaycarpet,/area/submap/casino_event)
+"fr" = (/obj/structure/closet/walllocker_double{dir = 8; name = "Game Cabinet"; pixel_x = -28},/obj/item/weapon/storage/box/roulette_balls_normal,/obj/item/weapon/storage/box/roulette_balls_fancy,/obj/item/weapon/storage/box/roulette_balls_cheat,/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"fs" = (/obj/machinery/chipmachine{pixel_x = -32},/obj/machinery/atm{pixel_y = 30},/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"ft" = (/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"fu" = (/obj/machinery/button/remote/airlock{id = "blackjack_3"; name = "Door Lock"; pixel_x = 24; pixel_y = 26; specialfunctions = 4},/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"fv" = (/obj/structure/closet/walllocker_double{dir = 8; name = "Game Cabinet"; pixel_x = -28},/obj/item/weapon/storage/pill_bottle/dice,/obj/item/weapon/storage/pill_bottle/dice_nerd,/obj/item/weapon/storage/dicecup,/turf/simulated/floor/carpet/sblucarpet,/area/submap/casino_event)
+"fw" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/reddouble,/turf/simulated/floor/wood,/area/submap/casino_event)
+"fx" = (/obj/item/weapon/stool/baystool/padded,/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"fy" = (/obj/item/modular_computer/console{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/red/border{dir = 10},/obj/effect/floor_decal/borderfloor/corner2{dir = 9},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 9},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"fz" = (/obj/structure/bed/chair/office/light,/turf/simulated/floor/tiled,/area/submap/casino_event)
+"fA" = (/obj/structure/table/reinforced,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/ammo_casing/spent,/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/red/border{dir = 6},/obj/effect/floor_decal/borderfloor/corner2,/obj/effect/floor_decal/corner/red/bordercorner2,/turf/simulated/floor/tiled,/area/submap/casino_event)
+"fB" = (/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/red/border{dir = 10},/obj/effect/floor_decal/borderfloor/corner2{dir = 9},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 9},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"fC" = (/obj/item/weapon/gun/projectile/shotgun/pump{ammo_type = /obj/item/ammo_casing/a12g/pellet; pixel_x = 1; pixel_y = 4},/obj/item/weapon/gun/projectile/shotgun/pump{ammo_type = /obj/item/ammo_casing/a12g/pellet; pixel_x = 2; pixel_y = -6},/obj/structure/table/rack/gun_rack,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/red/border,/obj/effect/floor_decal/borderfloor/corner2,/obj/effect/floor_decal/corner/red/bordercorner2,/turf/simulated/floor/tiled,/area/submap/casino_event)
+"fD" = (/obj/structure/table/rack,/obj/item/ammo_magazine/ammo_box/b12g/pellet{pixel_x = 3; pixel_y = -3},/obj/item/ammo_magazine/ammo_box/b12g/pellet{pixel_x = -5; pixel_y = -3},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/red/border,/obj/item/ammo_magazine/ammo_box/b12g/pellet{pixel_x = 3; pixel_y = 3},/obj/item/ammo_magazine/ammo_box/b12g/pellet{pixel_x = -5; pixel_y = 3},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"fE" = (/obj/structure/table/rack,/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/red/border{dir = 6},/obj/item/clothing/suit/armor/bulletproof/alt{pixel_x = -6},/obj/item/clothing/suit/armor/bulletproof/alt{pixel_x = 6},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"fF" = (/obj/structure/table/rack/shelf,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"fG" = (/obj/structure/table/rack/shelf,/obj/item/device/radio/headset/casino,/obj/item/device/radio/headset/casino,/obj/item/device/radio/headset/casino,/obj/item/device/radio/headset/casino,/obj/item/device/radio/headset/casino,/obj/item/device/radio/headset/casino,/obj/item/device/radio/headset/casino/bowman,/obj/item/device/radio/headset/casino/bowman,/obj/item/device/radio/headset/casino/bowman,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"fH" = (/obj/machinery/telecomms/allinone/casino,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"fI" = (/obj/structure/table/woodentable,/obj/item/trash/plate,/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"fJ" = (/obj/structure/casino_table/blackjack_l{dir = 8},/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"fK" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/carpet/bcarpet,/area/submap/casino_event)
+"fL" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/floor/carpet/bcarpet,/area/submap/casino_event)
+"fM" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/carpet/gaycarpet,/area/submap/casino_event)
+"fN" = (/obj/structure/bed/chair/comfy/red,/turf/simulated/floor/carpet/gaycarpet,/area/submap/casino_event)
+"fO" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"fP" = (/obj/structure/bed/chair/comfy/green,/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"fQ" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"fR" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled/white,/area/submap/casino_event)
+"fS" = (/obj/structure/table/reinforced,/obj/machinery/door/window/brigdoor/eastleft{dir = 2},/obj/item/weapon/pen,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "casino_check"; opacity = 0},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"fT" = (/obj/structure/table/reinforced,/obj/machinery/door/window/brigdoor/eastright{dir = 2},/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "casino_check"; opacity = 0},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"fU" = (/obj/structure/table/woodentable,/obj/item/trash/plate,/obj/item/weapon/material/kitchen/utensil/fork/plastic,/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"fV" = (/obj/structure/casino_table/blackjack_m{dir = 8},/obj/machinery/light/floortube{dir = 4},/obj/item/weapon/deck/cards/casino,/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"fW" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/bcarpet,/area/submap/casino_event)
+"fX" = (/obj/structure/casino_table/blackjack_l{dir = 1},/turf/simulated/floor/carpet/bcarpet,/area/submap/casino_event)
+"fY" = (/obj/item/weapon/stool/padded{dir = 4},/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"fZ" = (/obj/structure/casino_table/blackjack_r{dir = 1},/turf/simulated/floor/carpet/bcarpet,/area/submap/casino_event)
+"ga" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/carpet/bcarpet,/area/submap/casino_event)
+"gb" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/gaycarpet,/area/submap/casino_event)
+"gc" = (/obj/structure/casino_table/blackjack_l{dir = 1},/turf/simulated/floor/carpet/gaycarpet,/area/submap/casino_event)
+"gd" = (/obj/structure/casino_table/blackjack_l,/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"ge" = (/obj/structure/casino_table/blackjack_r{dir = 1},/turf/simulated/floor/carpet/gaycarpet,/area/submap/casino_event)
+"gf" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/carpet/gaycarpet,/area/submap/casino_event)
+"gg" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"gh" = (/obj/structure/casino_table/blackjack_l{dir = 1},/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"gi" = (/obj/structure/casino_table/blackjack_m,/obj/machinery/light/floortube{dir = 1},/obj/item/weapon/deck/cards/casino,/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"gj" = (/obj/structure/casino_table/blackjack_r{dir = 1},/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"gk" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"gl" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled,/area/submap/casino_event)
+"gm" = (/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/industrial/danger/corner{dir = 4},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"gn" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/industrial/danger{dir = 1},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"go" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/industrial/danger/corner{dir = 8},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"gp" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"gq" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 1},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 1},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"gr" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 4},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 4},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"gs" = (/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/lightgrey/bordercorner{dir = 1},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"gt" = (/turf/simulated/floor/wood,/area/submap/casino_event)
+"gu" = (/obj/structure/flora/pottedplant/stoutbush,/obj/effect/floor_decal/spline/plain{dir = 10},/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"gv" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/fancy/cigar/havana{pixel_x = -2; pixel_y = 2},/obj/item/weapon/storage/fancy/cigar{pixel_x = 2; pixel_y = 3},/obj/effect/floor_decal/spline/plain,/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"gw" = (/obj/structure/flora/pottedplant/stoutbush,/obj/effect/floor_decal/spline/plain{dir = 6},/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"gx" = (/obj/structure/casino_table/blackjack_r{dir = 8},/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"gy" = (/obj/item/weapon/stool/baystool/padded{dir = 1},/turf/simulated/floor/carpet/bcarpet,/area/submap/casino_event)
+"gz" = (/obj/item/weapon/stool/baystool/padded{dir = 1},/turf/simulated/floor/carpet/gaycarpet,/area/submap/casino_event)
+"gA" = (/obj/item/weapon/stool/baystool/padded{dir = 1},/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"gB" = (/obj/effect/floor_decal/spline/plain{dir = 4},/turf/simulated/floor/wood,/area/submap/casino_event)
+"gC" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"gD" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/submap/casino_event)
+"gE" = (/obj/effect/floor_decal/borderfloor/corner,/obj/effect/floor_decal/corner/lightgrey/bordercorner,/turf/simulated/floor/tiled,/area/submap/casino_event)
+"gF" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lightgrey/border,/turf/simulated/floor/tiled,/area/submap/casino_event)
+"gG" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lightgrey/border,/obj/machinery/light,/turf/simulated/floor/tiled,/area/submap/casino_event)
+"gH" = (/obj/effect/floor_decal/borderfloor/corner{dir = 8},/obj/effect/floor_decal/corner/lightgrey/bordercorner{dir = 8},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"gI" = (/obj/structure/casino_table/blackjack_l,/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"gJ" = (/obj/structure/casino_table/blackjack_m,/obj/machinery/light/floortube{dir = 1},/obj/item/weapon/deck/cards/casino,/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"gK" = (/obj/structure/casino_table/blackjack_r,/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"gL" = (/obj/structure/bed/chair/wood,/turf/simulated/floor/wood,/area/submap/casino_event)
+"gM" = (/obj/item/weapon/stool/padded{dir = 1},/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"gN" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/submap/casino_event)
+"gO" = (/obj/structure/table/woodentable,/obj/item/pizzabox/margherita,/turf/simulated/floor/wood,/area/submap/casino_event)
+"gP" = (/obj/structure/table/woodentable,/obj/item/weapon/flame/candle,/turf/simulated/floor/wood,/area/submap/casino_event)
+"gQ" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/submap/casino_event)
+"gR" = (/obj/structure/table/woodentable,/obj/item/weapon/material/ashtray/glass,/turf/simulated/floor/wood,/area/submap/casino_event)
+"gS" = (/obj/structure/table/woodentable,/obj/random/maintenance/foodstuff,/turf/simulated/floor/wood,/area/submap/casino_event)
+"gT" = (/obj/structure/table/woodentable,/obj/random/drinkbottle,/turf/simulated/floor/wood,/area/submap/casino_event)
+"gU" = (/obj/structure/table/woodentable,/obj/effect/floor_decal/spline/plain{dir = 8},/obj/item/clothing/mask/smokable/pipe,/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"gV" = (/obj/structure/bed/chair/wood{dir = 1},/turf/simulated/floor/wood,/area/submap/casino_event)
+"gW" = (/obj/machinery/light,/turf/simulated/floor/wood,/area/submap/casino_event)
+"gX" = (/obj/machinery/light,/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"gY" = (/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/grey/border{dir = 9},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"gZ" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/grey/border{dir = 1},/obj/machinery/vending/wallmed1/public{pixel_y = 28},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"ha" = (/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/grey/border{dir = 5},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"hb" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/grey/border{dir = 8},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"hc" = (/obj/machinery/washing_machine,/turf/simulated/floor/tiled,/area/submap/casino_event)
+"hd" = (/obj/structure/table/standard,/obj/item/weapon/towel/random,/obj/item/weapon/towel/random,/turf/simulated/floor/tiled,/area/submap/casino_event)
+"he" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/grey/border{dir = 4},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"hf" = (/obj/machinery/washing_machine,/obj/item/clothing/under/modjump3,/turf/simulated/floor/tiled,/area/submap/casino_event)
+"hg" = (/obj/structure/table/standard,/obj/item/clothing/under/suit_jacket/really_black{pixel_x = 5; pixel_y = 10},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"hh" = (/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/grey/border{dir = 10},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"hi" = (/obj/effect/floor_decal/borderfloor/corner{dir = 8},/obj/effect/floor_decal/corner/grey/bordercorner{dir = 8},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"hj" = (/obj/effect/floor_decal/borderfloor/corner,/obj/effect/floor_decal/corner/grey/bordercorner,/turf/simulated/floor/tiled,/area/submap/casino_event)
+"hk" = (/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/grey/border{dir = 6},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"hl" = (/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/grey/border{dir = 10},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"hm" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/grey/border,/turf/simulated/floor/tiled,/area/submap/casino_event)
+"hn" = (/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/grey/border{dir = 6},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"ho" = (/obj/effect/floor_decal/corner/lightgrey{dir = 10},/obj/effect/floor_decal/corner/lightgrey{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/machinery/vending/bepis,/turf/simulated/floor/tiled/monotile,/area/submap/casino_event)
+"hp" = (/obj/effect/floor_decal/corner/lightgrey{dir = 10},/obj/effect/floor_decal/corner/lightgrey{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/machinery/vending/sol,/turf/simulated/floor/tiled/monotile,/area/submap/casino_event)
+"hq" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"hr" = (/obj/machinery/door/airlock{id_tag = "L7 Room 1"; name = "Private Room 1"},/turf/simulated/floor/wood,/area/submap/casino_event)
+"hs" = (/obj/machinery/door/airlock{id_tag = "L7 Room 2"; name = "Private Room 2"},/turf/simulated/floor/wood,/area/submap/casino_event)
+"ht" = (/obj/machinery/door/airlock{id_tag = "L7 Room 3"; name = "Private Room 3"},/turf/simulated/floor/wood,/area/submap/casino_event)
+"hu" = (/obj/machinery/door/airlock{id_tag = "L7 Room 4"; name = "Private Room 4"},/turf/simulated/floor/wood,/area/submap/casino_event)
+"hv" = (/obj/machinery/door/airlock{id_tag = "L7 VIP Room"; name = "VIP Room"},/turf/simulated/floor/wood,/area/submap/casino_event)
+"hw" = (/obj/structure/toilet{dir = 4},/obj/machinery/button/remote/airlock{id = "casino_stall_1"; name = "Door Lock"; pixel_x = 24; pixel_y = 26; specialfunctions = 4},/turf/simulated/floor/tiled/white,/area/submap/casino_event)
+"hx" = (/obj/structure/closet/secure_closet/personal/cabinet,/obj/item/weapon/towel/random,/turf/simulated/floor/wood,/area/submap/casino_event)
+"hy" = (/obj/structure/toilet{dir = 4},/obj/machinery/button/remote/airlock{id = "casino_stall_2"; name = "Door Lock"; pixel_x = 24; pixel_y = 26; specialfunctions = 4},/turf/simulated/floor/tiled/white,/area/submap/casino_event)
+"hz" = (/obj/machinery/button/remote/airlock{id = "L7 Room 1"; name = "Door Lock"; pixel_x = 24; pixel_y = 26; specialfunctions = 4},/turf/simulated/floor/wood,/area/submap/casino_event)
+"hA" = (/obj/machinery/button/remote/airlock{id = "L7 Room 2"; name = "Door Lock"; pixel_x = 24; pixel_y = 26; specialfunctions = 4},/turf/simulated/floor/wood,/area/submap/casino_event)
+"hB" = (/obj/machinery/button/remote/airlock{id = "L7 Room 3"; name = "Door Lock"; pixel_x = 24; pixel_y = 26; specialfunctions = 4},/turf/simulated/floor/wood,/area/submap/casino_event)
+"hC" = (/obj/machinery/button/remote/airlock{id = "L7 Room 4"; name = "Door Lock"; pixel_x = 24; pixel_y = 26; specialfunctions = 4},/turf/simulated/floor/wood,/area/submap/casino_event)
+"hD" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/wood,/area/submap/casino_event)
+"hE" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/floor/wood,/area/submap/casino_event)
+"hF" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/wood,/area/submap/casino_event)
+"hG" = (/obj/structure/closet/secure_closet/personal/cabinet,/obj/item/weapon/storage/pill_bottle/happy,/obj/item/clothing/under/bathrobe,/obj/item/clothing/under/bathrobe,/turf/simulated/floor/wood,/area/submap/casino_event)
+"hH" = (/obj/structure/bed/chair/sofa/right/purp,/turf/simulated/floor/wood,/area/submap/casino_event)
+"hI" = (/obj/structure/bed/chair/sofa/left/purp,/turf/simulated/floor/wood,/area/submap/casino_event)
+"hJ" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet/purcarpet,/area/submap/casino_event)
+"hK" = (/obj/structure/table/woodentable,/obj/random/drinkbottle,/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/submap/casino_event)
+"hL" = (/obj/structure/undies_wardrobe,/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/submap/casino_event)
+"hM" = (/obj/item/weapon/flame/candle/candelabra/everburn,/obj/structure/table/fancyblack,/turf/simulated/floor/wood,/area/submap/casino_event)
+"hN" = (/obj/random/drinkbottle,/obj/structure/table/fancyblack,/turf/simulated/floor/wood,/area/submap/casino_event)
+"hO" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/captaindouble,/obj/structure/curtain/open/bed,/turf/simulated/floor/carpet/purcarpet,/area/submap/casino_event)
+"hP" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/wood,/area/submap/casino_event)
+"hQ" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/yellowdouble,/turf/simulated/floor/wood,/area/submap/casino_event)
+"hR" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/purpledouble,/turf/simulated/floor/wood,/area/submap/casino_event)
+"hS" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/orangedouble,/turf/simulated/floor/wood,/area/submap/casino_event)
+"hT" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/greendouble,/turf/simulated/floor/wood,/area/submap/casino_event)
+"hU" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/bluedouble,/turf/simulated/floor/wood,/area/submap/casino_event)
+"hV" = (/obj/structure/bed/chair/sofa/left/purp{dir = 1},/turf/simulated/floor/wood,/area/submap/casino_event)
+"hW" = (/obj/structure/bed/chair/sofa/right/purp{dir = 1},/turf/simulated/floor/wood,/area/submap/casino_event)
+"hX" = (/obj/structure/table/rack/shelf,/obj/item/weapon/deck/cards,/obj/item/weapon/deck/cards,/obj/item/weapon/deck/cards,/obj/item/weapon/deck/cards,/turf/simulated/floor/tiled/dark,/area/submap/casino_event)
+"hY" = (/obj/effect/floor_decal/steeldecal/steel_decals10,/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 4},/turf/simulated/floor/tiled/freezer,/area/submap/casino_event)
+"hZ" = (/obj/effect/floor_decal/spline/plain{dir = 9},/turf/simulated/floor/water/pool,/area/submap/casino_event)
+"ia" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/water/pool,/area/submap/casino_event)
+"ib" = (/obj/effect/floor_decal/spline/plain{dir = 5},/turf/simulated/floor/water/pool,/area/submap/casino_event)
+"ic" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/submap/casino_event)
+"id" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled/white,/area/submap/casino_event)
+"ie" = (/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/water/pool,/area/submap/casino_event)
+"if" = (/obj/item/weapon/bikehorn/rubberducky,/turf/simulated/floor/water/pool,/area/submap/casino_event)
+"ig" = (/obj/effect/floor_decal/spline/plain{dir = 4},/turf/simulated/floor/water/pool,/area/submap/casino_event)
+"ih" = (/obj/random/soap,/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/submap/casino_event)
+"ii" = (/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/obj/effect/floor_decal/steeldecal/steel_decals5{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 10},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"ij" = (/obj/structure/table/glass,/obj/random/soap,/obj/item/weapon/towel/random,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/submap/casino_event)
+"ik" = (/turf/simulated/floor/water/pool,/area/submap/casino_event)
+"il" = (/obj/effect/floor_decal/spline/plain{dir = 4},/obj/machinery/light{dir = 4},/turf/simulated/floor/water/pool,/area/submap/casino_event)
+"im" = (/obj/machinery/holoplant,/turf/simulated/floor/tiled/white,/area/submap/casino_event)
+"in" = (/obj/effect/floor_decal/spline/plain{dir = 10},/turf/simulated/floor/water/pool,/area/submap/casino_event)
+"io" = (/obj/effect/floor_decal/spline/plain,/turf/simulated/floor/water/pool,/area/submap/casino_event)
+"ip" = (/obj/effect/floor_decal/spline/plain{dir = 6},/turf/simulated/floor/water/pool,/area/submap/casino_event)
+"iq" = (/obj/structure/casino_table/blackjack_r,/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"ir" = (/obj/machinery/door/airlock{id_tag = "br bathroom"; name = "Bathroom"},/turf/simulated/floor/wood,/area/submap/casino_event)
+"is" = (/obj/item/weapon/stool/padded{dir = 8},/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"it" = (/obj/item/weapon/stool/padded{dir = 1},/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"iu" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"iv" = (/obj/structure/casino_table/blackjack_l{dir = 8},/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"iw" = (/obj/structure/casino_table/blackjack_m{dir = 8},/obj/machinery/light/floortube{dir = 4},/obj/item/weapon/deck/cards/casino,/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"ix" = (/obj/item/weapon/stool/baystool/padded{dir = 8},/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"iy" = (/obj/structure/casino_table/blackjack_r{dir = 8},/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"iz" = (/obj/structure/casino_table/blackjack_l{dir = 1},/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"iA" = (/obj/structure/casino_table/blackjack_m{dir = 1},/obj/item/weapon/deck/cards/casino,/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"iB" = (/obj/structure/casino_table/blackjack_r{dir = 1},/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"iC" = (/obj/item/weapon/stool/baystool/padded{dir = 1},/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"iD" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/browndouble,/turf/simulated/floor/wood,/area/submap/casino_event)
+"iE" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/double,/turf/simulated/floor/wood,/area/submap/casino_event)
+"iF" = (/obj/machinery/button/remote/airlock{id = "L7 Room 5"; name = "Door Lock"; pixel_x = 24; pixel_y = 26; specialfunctions = 4},/turf/simulated/floor/wood,/area/submap/casino_event)
+"iG" = (/obj/machinery/door/airlock{id_tag = "casino_stall_1"; name = "Stall 1"},/turf/simulated/floor/tiled/white,/area/submap/casino_event)
+"iH" = (/obj/machinery/door/airlock{name = "Backroom"},/turf/simulated/floor/wood,/area/submap/casino_event)
+"iI" = (/obj/structure/closet/walllocker_double{dir = 8; name = "Game Cabinet"; pixel_x = -28},/obj/item/weapon/storage/pill_bottle/dice,/obj/item/weapon/storage/pill_bottle/dice_nerd,/obj/item/weapon/storage/dicecup,/turf/simulated/floor/carpet/purcarpet,/area/submap/casino_event)
+"iJ" = (/obj/machinery/computer/timeclock/premade/north,/turf/simulated/floor/tiled,/area/submap/casino_event)
+"iK" = (/obj/machinery/item_bank{pixel_y = 28},/turf/simulated/floor/tiled,/area/submap/casino_event)
+"iL" = (/turf/space,/area/submap/casino_event)
+"iM" = (/obj/structure/casino_table/craps,/obj/machinery/light/floortube{dir = 8},/obj/item/weapon/dice{pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/dicecup,/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"iN" = (/obj/structure/sink{pixel_y = 20},/obj/structure/mirror{pixel_y = 38},/turf/simulated/floor/tiled/white,/area/submap/casino_event)
+"iO" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/wood,/area/submap/casino_event)
+"iP" = (/obj/structure/casino_table/blackjack_m{dir = 1},/obj/item/weapon/deck/cards/casino,/turf/simulated/floor/carpet/bcarpet,/area/submap/casino_event)
+"iQ" = (/obj/structure/casino_table/blackjack_m{dir = 1},/obj/item/weapon/deck/cards/casino,/turf/simulated/floor/carpet/gaycarpet,/area/submap/casino_event)
+"iR" = (/obj/structure/casino_table/blackjack_m{dir = 1},/obj/item/weapon/deck/cards/casino,/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"iS" = (/obj/structure/sink{pixel_y = 20},/obj/structure/mirror{pixel_y = 38},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled/white,/area/submap/casino_event)
+"iT" = (/obj/machinery/door/airlock{id_tag = "casino_stall_2"; name = "Stall 2"},/turf/simulated/floor/tiled/white,/area/submap/casino_event)
+"iU" = (/obj/structure/toilet{dir = 8},/turf/simulated/floor/tiled/kafel_full,/area/submap/casino_event)
+"iV" = (/obj/machinery/recharge_station,/turf/simulated/floor/tiled/white,/area/submap/casino_event)
+"iW" = (/obj/machinery/door/airlock{id_tag = "casino_stall_3"; name = "Stall 3"},/turf/simulated/floor/tiled/white,/area/submap/casino_event)
+"iX" = (/obj/machinery/button/remote/airlock{id = "L7 VIP Room"; name = "Door Lock"; pixel_x = 24; pixel_y = 26; specialfunctions = 4},/turf/simulated/floor/wood,/area/submap/casino_event)
+"iY" = (/obj/effect/overmap/visitable/sector/common_gateway/lucky7,/turf/space,/area/submap/casino_event)
+"iZ" = (/obj/effect/landmark/hidden_level,/turf/space,/area/submap/casino_event)
+"ja" = (/obj/structure/closet/walllocker_double{dir = 8; name = "Game Cabinet"; pixel_x = -28},/obj/item/weapon/deck/cards/casino,/obj/item/weapon/deck/cards,/turf/simulated/floor/carpet/bcarpet,/area/submap/casino_event)
+"jb" = (/obj/structure/closet/walllocker_double{dir = 8; name = "Game Cabinet"; pixel_x = -28},/obj/item/weapon/deck/cards/casino,/obj/item/weapon/deck/cards,/turf/simulated/floor/carpet/gaycarpet,/area/submap/casino_event)
+"jc" = (/obj/structure/closet/walllocker_double{dir = 8; name = "Game Cabinet"; pixel_x = -28},/obj/item/weapon/deck/cards/casino,/obj/item/weapon/deck/cards,/turf/simulated/floor/carpet/turcarpet,/area/submap/casino_event)
+"jd" = (/obj/effect/floor_decal/spline/plain{dir = 5},/turf/simulated/floor/wood,/area/submap/casino_event)
+"je" = (/obj/machinery/door/airlock{id_tag = "L7 Room 5"; name = "Private Room 5"},/turf/simulated/floor/wood,/area/submap/casino_event)
+"jn" = (/obj/machinery/door/airlock{name = "Tournament Room"},/turf/simulated/floor/carpet/blue2,/area/submap/casino_event)
+"jq" = (/obj/structure/flora/pottedplant/tall,/turf/simulated/floor/carpet/brown,/area/submap/casino_event)
+"jx" = (/obj/machinery/vending/foodasian,/turf/simulated/floor/lino,/area/submap/casino_event)
+"jy" = (/obj/machinery/vending/fooditalian,/turf/simulated/floor/lino,/area/submap/casino_event)
+"jz" = (/obj/machinery/vending/foodfast,/turf/simulated/floor/lino,/area/submap/casino_event)
+"jA" = (/obj/machinery/vending/fooddessert{dir = 1},/turf/simulated/floor/lino,/area/submap/casino_event)
+"jB" = (/obj/machinery/vending/foodstuffing{dir = 1},/turf/simulated/floor/lino,/area/submap/casino_event)
+"jC" = (/obj/machinery/vending/foodfish,/turf/simulated/floor/lino,/area/submap/casino_event)
+"jD" = (/obj/machinery/vending/foodveggie,/turf/simulated/floor/lino,/area/submap/casino_event)
+"jE" = (/obj/machinery/vending/foodmeat,/turf/simulated/floor/lino,/area/submap/casino_event)
+"jG" = (/obj/machinery/vending/foodfish{dir = 1},/turf/simulated/floor/lino,/area/submap/casino_event)
+"jH" = (/obj/machinery/vending/foodmeat{dir = 1},/turf/simulated/floor/lino,/area/submap/casino_event)
+"jI" = (/obj/machinery/vending/deluxe_boozeomat/open,/turf/simulated/floor/lino,/area/submap/casino_event)
+"jJ" = (/obj/machinery/vending/deluxe_cigs/open,/turf/simulated/floor/lino,/area/submap/casino_event)
+"jK" = (/obj/machinery/vending/deluxe_dinner/open,/turf/simulated/floor/lino,/area/submap/casino_event)
+
+(1,1,1) = {"
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaaaaaaaaaaiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaaaaabacabaaaaiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaaabadabadabaaiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaeafagagagahaeaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaiaiaiaiaiaiaiaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeajajaiakaiajajaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaealalaiaeaialalaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeamamaianaiamamaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaiaiaiaiaiaiaiaeaeaaaaaaaeaaaaaaaeaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaeaoaiaiaiapaeaeaqarasaratasarasauaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaeaeavavavaeaeaeawaxaxaxaqaxaxaxaqaaiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeayazazazazazazaeaqaqaqaqaqaqaqaqaqaaiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaAazazazazazazaBaqaqaqaqaqaCaDaEaqaaiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeayazazazazazazaeaqaFaGaFaqaCaHaEaqaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaeaeazazazaeaeaeaeaeaeaeaeaeaeaeaeaeaeaaaaaaaeaeaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaeaeaeaeaeaeaeiLiLiLiLiLiLiLiLaeaIazazazazazazazazazaJazazazazazaJazazazazazazaKaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaLaMaNaOaOaPaeiLiLiLiLiLiLiLiLaaaQaQazazazazazazazazazazazazazazazazazazazazazaRaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaSaTaTaTaOaOaeiLiLiLiLiLiLiLiLaaaUaUazazazazazazazazazazazazazazazazazazazazazaKaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaVaTaPaWaXaYaeiLiLiLiLiLiLiLiLaaaZaZazazazbabaaeaeaebbaeaeaeaeaebcaeaeaeaeaebdaeaeaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaOaTaSbebfbgaeiLiLiLiLiLiLiLiLaeazazazazazbhbiaebjbkblbkbkaebmbnbobnbnaebpbqbrbqbqaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaOaTbsaebtbuaeiLiLiLiLiLiLiLiLaeazazazazazbvbvaebkbwbwbwbkaebnbxbxbxbnaebqbybybybqaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaeaeaeaeaeaeaeaebzaeaeaeaeaeaeaaaaaaaeaeaeaeaeaQaQazazazbabaaebAbBbBbBbCaebDbEbEbEbFaebGbHbHbHbIaeaeaeaeiLaeaeaeaeiLaeaeaeaeiLaeaeaeaeiLaeaeaeaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaOaOaSbJbKbLaOaObMbNaebObPaebQbRbSbTaiaebUbVaebWaUazazazbhbiaebXbBbYbBbZaecabEcbbEccaecdbHcebHcfaedpdsaeiLaedpdsaeiLaedpdsaeiLaedpdsaeiLaedpdsaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaecgaTaTaTaTbMbMaTaTbMchaTaTciaicjckclaicmcncoaeaZaZazazazbvbvaebAbBbBbBbCaebDbEbEbEbFaebGbHbHbHbIaedvdyaeiLaedvdyaeiLaedvdyaeiLaedvdyaeiLaedvdyaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaecpaTaOaPaObJaScqcqcqaeaOcraeaicsckctaiaecucvaeazazazazazazazaebkcwcxcwbkaebncyczcybnaebqcAcBcAbqaeaedCaeaeaeaedCaeaeaeaedCaeaeaeaedCaeaeaeaedCaeaeaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLcDcDcDcDcDaecCcDcDcDcDcDcEaOcFaeaOaTaeaiaiaiaiaiaeaeaeaeaeaeazazazaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaehxgthEhTaehxgthEhRaehxgthEhUaehxgthEhSaehxgthEfwaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLcDcHcIcJcDcGcGcDcHcIcJcDcKcLcMaeaSbMaeaiaiaiaiaiaiaicNaeazazazazazaJazcOcScPcQcRazcTazaJazazazazazazaJazazaehFgtgWgtaehFgtgWgtaehFgtgWgtaehFgtgWgtaehFgtgWgtaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLcDaiaiaicUcGcGcUaiaiaicDcDcDcDcDaObMaecVaiaicWcXaiaicYaeazazazazazazazazazazazazazazazazazazazazazazazazcZaeaeiHaeaeaeaeiHaeaeaeaeiHaeaeaeaeiHaeaeaeaeiHaeaeaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLcDcDcDcDcDcGdacDcDcDcDcDdbdcddcDdebMaecVaiaihXdfaiaidgaedhazdiaUaUdjazazazazazazazazazazdkdlazazdmdnazazdoaeesbndqdraefnbkdtduaefrbqdwdxaefvdzdAdBaeiIdDdEdFaeaeaeaeaeaeaeaeaeaeaeaeaeaeiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLcDdGcIcJcDcGcGcDdGcIcJcDdHdIddcDdJaTaedKaiaidLdfaiaiaiaeazazdidMdNdjdOaeaIazdPdQdOaeaIazazazazazazazazazdRaebndSdTbnaebkdUdVbkaebqdWdXbqaedzdYdZdzaedDeaebdDaebqbqfxbqbqbqbqfxbqbqbqbqaeiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLcDaiaiaicUcGcGcUaiaiaicDecdIddcDaOaTaedKaiaieddfaiaiaieeazazazazazazazazazefegdQazazazazazazazazazazazazazaebnbnehbnaebkbkeibkaebqbqejbqaedzdzekdzaedDdDeldDaefYgdgiiqisfYgdgiiqisbqbqaeiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLcDcDcDcDcDcGdacDcDcDcDcDcDemcDcDbNaTaeenaiaieoepaiaiaiaeazazdiaUeqdjazazazazerdQazazazazdkdlazaziMetazazdOaeaeaeeuaeaeaeaeevaeaeaeaeewaeaeaeaeexaeaeaeaeeyaeaebqitititbqbqitititbqiubqaeiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaecGcGcGcGezcGeAeBcGeCcCbLaTaeaiaiaiaiaiaiaiaiaeaIazdiaUeEdjazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazaebqbqbqbqbqbqbqbqbqfYivbqaeiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeeFcGcGcGezcGcGcGcGeGaeaeeHaeaiaiaiaeaeaeaeaeaeeIazazazazazdOaeaIazazazdOaeaIazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazjnbqbqbqbqbqbqbqbqbqfYiwixaeiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaeaeaeaeaeaeezaeaeaeeJcGeKcGeDaeeMbMaeaiaiaiaejxjyjxjzjyjzazdieEaUdjazazazazazazazazazazdkdlazaziMeOazazazazazazazazazazazazazazazazazazazazazazazazazazazjqaebqbqbqbqbqbqbqbqbqfYiybqaeiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeePeQePeRaeeScGeTeUaeeVcGeWeXeYaeeZaTfaaiaiaiaeeNeNeNeNeNeNazdiaUfbdjazazazazdPdQazazazazazazazazazazazazazaeaeaefcaeaeaeaeaefdaeaeaeaeaefeaeaeaeaeaeaeaeaeaeaebqiuiuiubqbqiuiuiubqitbqaeiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaecncncncnaeeVcGcGffaefgcGfhcGfiaeaSaOaeaiaiaiaejAjGjBjAjBjHazazazazazazazazeffjdQazazazazazazazazazazazazdOaefkflfmflflaefofpfqfpfpaefsftfuftftaeiLiLiLiLiLiLaefYiziAiBisfYiziAiBisbqbqaeiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaeaeaeaeaeaeeLeLcncnaefyfzcGfAaefBcGfCfDfEaeaPaOaefFfGfHaejCjDjEjIjJjKazdiaUfIdjdOaeaIazerdQdOaeaIazazeffJazazazdPdQazaeflfKfLfKflaefpfMfNfMfpaeftfOfPfOftaeiLiLiLiLiLiLaebqbqiCbqbqbqbqiCbqbqbqbqaeiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaecGcGfQiKiJaeaeaefRaeaeaefSfTaeaeaeezaeaeaeaeaeaeaeaeaeaeaeeNeNeNeNeNeNazdifUaUdjazcOazazazazazcTazazazeffVdQazeffjdQazaefWfXiPfZgaaegbgciQgegfaeggghiRgjgkaeiLiLiLiLiLiLaeaeaeaeaeaeaeaeaeaeaeaeaeaeiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaecGcGcGcGcGcGcGcGcGcGglgmgngngogpgqcGgrgpgsglgtgtgtgugvgwgTiOiOiOiOiOjdazazazazazazazazazazazazazazazazefgxazazazerdQazaejaflgyflflaejbfpgzfpfpaejcftgAftftaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaecGcGcGcGcGcGcGcGcGcGglcGcGcGcGcGcGcGcGcGcGglgtgtgtgtgtgtgtgtgtgtgtgtgBazbababababaazazgCazazbababababaazazazgCazazazazaeaeiHaeaeaeaeaeiHaeaeaeaeaeiHaeaeaeaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaecGcGcGcGcGcGcGgDcGcGglgEgFgGgFgFgFgFgGgFgHglgtgtgtgtgtgtgtgtgtgtgtgtgBazbhbhbhbhbhazgIgJgKazbhbhbhbhbhazazgIgJgKazazdOaehxgtgthEhQaehxgtgthEiDaehxgtgthEiEaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaecGcGgDcGcGaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegtgLgLgLgtgLgLgLgtgLgLgLgBazbvbvbvbvbvazgMgMgMazbvbvbvbvbvazazgMgMgMazazcZaehFgtgWgtgtaehFgtgWgtgtaehFgtgWgtgtaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaeaeaeaeaeaeiLiLiLiLiLiLiLiLiLaehwiGiNiNiSaegNgOgPgQgtgQgRgSgtgQgPgTgBazbababababaazazazazazbababababaazazbababaazazgUaeaedCaeaeaeaeaedCaeaeaeaeaedCaeaeaeaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaeaecncncnirgtgVgVgVgtgVgVgVgtgVgVgVgBazbhbhbhbhbhazazazazazbhbhbhbhbhazazbhbhbhazazdRaedpdyaeiLiLaedpdyaeiLiLaedpdyaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaehyiTcncncnaegtgtgtgtgWgtgtgtgWgtgtgtgBgXbvbvbvbvbvgXazazazgXbvbvbvbvbvgXazbvbvbvgXazazaedviUaeiLiLaedviUaeiLiLaedviUaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaeaecncncnaeaeaaaaaaaeaaaaaaaeaaaaaaaeaeaeaeaeaeaeaeazazazaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeiLiLaeaeaeaeiLiLaeaeaeaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeiViWcncncoaeiLiLiLiLiLiLiLiLiLiLiLiLiLaegYgZgZgZhaaeazazazaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaeaeaeaeaeaeiLiLiLiLiLiLiLiLiLiLiLiLiLaahbhccGhdheaeazazazaaiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaahbhfcGhgheaeazazazaaiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaahbhccGcGheaeazazazaaiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaehhhicGhjhkaeazazazaeiLiLiLiLiLiLiLaeaeaeaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaeaeaeaeaehlhmhnaeaeazazazaeaeaeaeaeaeaeaeaehohpaeaeaeaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeayazazazazhqhqhqazaJazazazaJazazazazazazazazhqhqaJazaKaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaAazazazazazazazazazazazazazazazazazazazazazazazazazaRaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeayazazgXazazazazazazazgXazazazazazazazgXazazazazazazaKaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaehraeaeaehsaeaeaehtaeaeaehuaeaeaejeaeaeaehvaeaeaeaeaeaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaegthzhxaegthAhxaegthBhxaegthChxaegtiFhxaegtiXgtgtgthDgtaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaehEgthFaehEgthFaehEgthFaehEgthFaehEgthFaehGgthHhIdDdDhJaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaehKgtgtaehKgtgtaehKgtgtaehKgtgtaehKgtgtaehLgthMhNdDdDhOaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaehPgthQaehPgthRaehPgthSaehPgthTaehPgthUaegtgthVhWdDdDhJaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaegtgtgtaegtgtgtaegtgtgtaegtgtgtaegtgtgtaegtgtgtgtgtgWgtaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaecmaeaeaecmaeaeaecmaeaeaecmaeaeaecmaeaeaecmaeaeaeaeaeaeaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaecnbUbVaecnbUbVaecnbUbVaecnbUbVaecnbUbVaecnbUbVhYhZiaibaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeiccncnaeiccncnaeiccncnaeiccncnaeiccncnaeidcncnhYieifigaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaecnihiiaecnihiiaecnihiiaecnihiiaecnihiiaeijcncnhYieikilaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeidcncnhYieikigaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeiicnimhYinioipaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLaeaeaeaeaeaeaeaeaeiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiYiZiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+iLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiLiL
+"}
diff --git a/maps/tether/tether-02-surface2.dmm b/maps/tether/tether-02-surface2.dmm
index 660a826ec6..d5e6270bc0 100644
--- a/maps/tether/tether-02-surface2.dmm
+++ b/maps/tether/tether-02-surface2.dmm
@@ -25415,6 +25415,10 @@
},
/turf/simulated/floor/plating,
/area/maintenance/engineering/pumpstation)
+"aSZ" = (
+/obj/machinery/vending/altevian,
+/turf/simulated/floor/plating,
+/area/maintenance/lower/south)
"aTa" = (
/obj/effect/floor_decal/borderfloor{
dir = 8
@@ -48094,7 +48098,7 @@ aVp
aWl
aXg
aVP
-aZr
+aSZ
ayY
aZr
aZr
diff --git a/tgui/packages/tgui/interfaces/VorePanel.js b/tgui/packages/tgui/interfaces/VorePanel.js
index 3d34716800..4adc1850e0 100644
--- a/tgui/packages/tgui/interfaces/VorePanel.js
+++ b/tgui/packages/tgui/interfaces/VorePanel.js
@@ -495,6 +495,8 @@ const VoreSelectedBellyOptions = (props, context) => {
digest_brute,
digest_burn,
digest_oxy,
+ digest_tox,
+ digest_clone,
bulge_size,
display_absorbed_examine,
shrink_grow_size,
@@ -603,6 +605,12 @@ const VoreSelectedBellyOptions = (props, context) => {
act('set_attribute', { attribute: 'b_oxy_dmg' })} content={digest_oxy} />
+
+ act('set_attribute', { attribute: 'b_tox_dmg' })} content={digest_tox} />
+
+
+ act('set_attribute', { attribute: 'b_clone_dmg' })} content={digest_clone} />
+
act('set_attribute', { attribute: 'b_grow_shrink' })}
diff --git a/tgui/public/tgui.bundle.js b/tgui/public/tgui.bundle.js
index 2fb806b1c7..29adec21a1 100644
--- a/tgui/public/tgui.bundle.js
+++ b/tgui/public/tgui.bundle.js
@@ -1 +1 @@
-!function(){var e={21926:function(e,t,n){"use strict";t.__esModule=!0,t.createPopper=void 0,t.popperGenerator=h;var o=m(n(48764)),r=m(n(68349)),a=m(n(3671)),i=m(n(55490)),c=(m(n(40755)),m(n(69282))),l=m(n(27672)),d=(m(n(30752)),m(n(12459)),m(n(27629)),m(n(54220))),u=m(n(75949));t.detectOverflow=u["default"];var s=n(79388);n(15954);function m(e){return e&&e.__esModule?e:{"default":e}}var p={placement:"bottom",modifiers:[],strategy:"absolute"};function f(){for(var e=arguments.length,t=new Array(e),n=0;n0&&(a=(0,r.round)(n.width)/l||1),c>0&&(i=(0,r.round)(n.height)/c||1)}return{width:n.width/a,height:n.height/i,top:n.top/i,right:n.right/a,bottom:n.bottom/i,left:n.left/a,x:n.left/a,y:n.top/i}};var o=n(79388),r=n(36291)},65647:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t,n){var o="clippingParents"===t?function(e){var t=(0,i["default"])((0,m["default"])(e)),n=["absolute","fixed"].indexOf((0,d["default"])(e).position)>=0&&(0,u.isHTMLElement)(e)?(0,c["default"])(e):e;if(!(0,u.isElement)(n))return[];return t.filter((function(e){return(0,u.isElement)(e)&&(0,p["default"])(e,n)&&"body"!==(0,f["default"])(e)}))}(e):[].concat(t),r=[].concat(o,[n]),a=r[0],l=r.reduce((function(t,n){var o=b(e,n);return t.top=(0,C.max)(o.top,t.top),t.right=(0,C.min)(o.right,t.right),t.bottom=(0,C.min)(o.bottom,t.bottom),t.left=(0,C.max)(o.left,t.left),t}),b(e,a));return l.width=l.right-l.left,l.height=l.bottom-l.top,l.x=l.left,l.y=l.top,l};var o=n(15954),r=N(n(8204)),a=N(n(40015)),i=N(n(3671)),c=N(n(55490)),l=N(n(25890)),d=N(n(40755)),u=n(79388),s=N(n(11100)),m=N(n(95136)),p=N(n(62215)),f=N(n(38569)),h=N(n(73060)),C=n(36291);function N(e){return e&&e.__esModule?e:{"default":e}}function b(e,t){return t===o.viewport?(0,h["default"])((0,r["default"])(e)):(0,u.isElement)(t)?function(e){var t=(0,s["default"])(e);return t.top=t.top+e.clientTop,t.left=t.left+e.clientLeft,t.bottom=t.top+e.clientHeight,t.right=t.left+e.clientWidth,t.width=e.clientWidth,t.height=e.clientHeight,t.x=t.left,t.y=t.top,t}(t):(0,h["default"])((0,a["default"])((0,l["default"])(e)))}},48764:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t,n){void 0===n&&(n=!1);var s=(0,i.isHTMLElement)(t),m=(0,i.isHTMLElement)(t)&&function(e){var t=e.getBoundingClientRect(),n=(0,u.round)(t.width)/e.offsetWidth||1,o=(0,u.round)(t.height)/e.offsetHeight||1;return 1!==n||1!==o}(t),p=(0,l["default"])(t),f=(0,o["default"])(e,m),h={scrollLeft:0,scrollTop:0},C={x:0,y:0};(s||!s&&!n)&&(("body"!==(0,a["default"])(t)||(0,d["default"])(p))&&(h=(0,r["default"])(t)),(0,i.isHTMLElement)(t)?((C=(0,o["default"])(t,!0)).x+=t.clientLeft,C.y+=t.clientTop):p&&(C.x=(0,c["default"])(p)));return{x:f.left+h.scrollLeft-C.x,y:f.top+h.scrollTop-C.y,width:f.width,height:f.height}};var o=s(n(11100)),r=s(n(3514)),a=s(n(38569)),i=n(79388),c=s(n(36056)),l=s(n(25890)),d=s(n(57360)),u=n(36291);function s(e){return e&&e.__esModule?e:{"default":e}}},40755:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return(0,r["default"])(e).getComputedStyle(e)};var o,r=(o=n(96904))&&o.__esModule?o:{"default":o}},25890:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return(((0,o.isElement)(e)?e.ownerDocument:e.document)||window.document).documentElement};var o=n(79388)},40015:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t,n=(0,o["default"])(e),l=(0,i["default"])(e),d=null==(t=e.ownerDocument)?void 0:t.body,u=(0,c.max)(n.scrollWidth,n.clientWidth,d?d.scrollWidth:0,d?d.clientWidth:0),s=(0,c.max)(n.scrollHeight,n.clientHeight,d?d.scrollHeight:0,d?d.clientHeight:0),m=-l.scrollLeft+(0,a["default"])(e),p=-l.scrollTop;"rtl"===(0,r["default"])(d||n).direction&&(m+=(0,c.max)(n.clientWidth,d?d.clientWidth:0)-u);return{width:u,height:s,x:m,y:p}};var o=l(n(25890)),r=l(n(40755)),a=l(n(36056)),i=l(n(69211)),c=n(36291);function l(e){return e&&e.__esModule?e:{"default":e}}},41829:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}},68349:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,r["default"])(e),n=e.offsetWidth,o=e.offsetHeight;Math.abs(t.width-n)<=1&&(n=t.width);Math.abs(t.height-o)<=1&&(o=t.height);return{x:e.offsetLeft,y:e.offsetTop,width:n,height:o}};var o,r=(o=n(11100))&&o.__esModule?o:{"default":o}},38569:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e?(e.nodeName||"").toLowerCase():null}},3514:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return e!==(0,r["default"])(e)&&(0,a.isHTMLElement)(e)?(0,i["default"])(e):(0,o["default"])(e)};var o=c(n(69211)),r=c(n(96904)),a=n(79388),i=c(n(41829));function c(e){return e&&e.__esModule?e:{"default":e}}},55490:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,o["default"])(e),n=u(e);for(;n&&(0,c["default"])(n)&&"static"===(0,a["default"])(n).position;)n=u(n);if(n&&("html"===(0,r["default"])(n)||"body"===(0,r["default"])(n)&&"static"===(0,a["default"])(n).position))return t;return n||function(e){var t=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&(0,i.isHTMLElement)(e)){if("fixed"===(0,a["default"])(e).position)return null}var n=(0,l["default"])(e);(0,i.isShadowRoot)(n)&&(n=n.host);for(;(0,i.isHTMLElement)(n)&&["html","body"].indexOf((0,r["default"])(n))<0;){var o=(0,a["default"])(n);if("none"!==o.transform||"none"!==o.perspective||"paint"===o.contain||-1!==["transform","perspective"].indexOf(o.willChange)||t&&"filter"===o.willChange||t&&o.filter&&"none"!==o.filter)return n;n=n.parentNode}return null}(e)||t};var o=d(n(96904)),r=d(n(38569)),a=d(n(40755)),i=n(79388),c=d(n(94437)),l=d(n(95136));function d(e){return e&&e.__esModule?e:{"default":e}}function u(e){return(0,i.isHTMLElement)(e)&&"fixed"!==(0,a["default"])(e).position?e.offsetParent:null}},95136:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){if("html"===(0,o["default"])(e))return e;return e.assignedSlot||e.parentNode||((0,a.isShadowRoot)(e)?e.host:null)||(0,r["default"])(e)};var o=i(n(38569)),r=i(n(25890)),a=n(79388);function i(e){return e&&e.__esModule?e:{"default":e}}},43367:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function l(e){if(["html","body","#document"].indexOf((0,a["default"])(e))>=0)return e.ownerDocument.body;if((0,i.isHTMLElement)(e)&&(0,r["default"])(e))return e;return l((0,o["default"])(e))};var o=c(n(95136)),r=c(n(57360)),a=c(n(38569)),i=n(79388);function c(e){return e&&e.__esModule?e:{"default":e}}},8204:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,o["default"])(e),n=(0,r["default"])(e),i=t.visualViewport,c=n.clientWidth,l=n.clientHeight,d=0,u=0;i&&(c=i.width,l=i.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(d=i.offsetLeft,u=i.offsetTop));return{width:c,height:l,x:d+(0,a["default"])(e),y:u}};var o=i(n(96904)),r=i(n(25890)),a=i(n(36056));function i(e){return e&&e.__esModule?e:{"default":e}}},96904:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}},69211:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,r["default"])(e),n=t.pageXOffset,o=t.pageYOffset;return{scrollLeft:n,scrollTop:o}};var o,r=(o=n(96904))&&o.__esModule?o:{"default":o}},36056:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return(0,o["default"])((0,r["default"])(e)).left+(0,a["default"])(e).scrollLeft};var o=i(n(11100)),r=i(n(25890)),a=i(n(69211));function i(e){return e&&e.__esModule?e:{"default":e}}},79388:function(e,t,n){"use strict";t.__esModule=!0,t.isElement=function(e){var t=(0,r["default"])(e).Element;return e instanceof t||e instanceof Element},t.isHTMLElement=function(e){var t=(0,r["default"])(e).HTMLElement;return e instanceof t||e instanceof HTMLElement},t.isShadowRoot=function(e){if("undefined"==typeof ShadowRoot)return!1;var t=(0,r["default"])(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot};var o,r=(o=n(96904))&&o.__esModule?o:{"default":o}},57360:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,r["default"])(e),n=t.overflow,o=t.overflowX,a=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+a+o)};var o,r=(o=n(40755))&&o.__esModule?o:{"default":o}},94437:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return["table","td","th"].indexOf((0,r["default"])(e))>=0};var o,r=(o=n(38569))&&o.__esModule?o:{"default":o}},3671:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function l(e,t){var n;void 0===t&&(t=[]);var c=(0,o["default"])(e),d=c===(null==(n=e.ownerDocument)?void 0:n.body),u=(0,a["default"])(c),s=d?[u].concat(u.visualViewport||[],(0,i["default"])(c)?c:[]):c,m=t.concat(s);return d?m:m.concat(l((0,r["default"])(s)))};var o=c(n(43367)),r=c(n(95136)),a=c(n(96904)),i=c(n(57360));function c(e){return e&&e.__esModule?e:{"default":e}}},15954:function(e,t){"use strict";t.__esModule=!0,t.write=t.viewport=t.variationPlacements=t.top=t.start=t.right=t.reference=t.read=t.popper=t.placements=t.modifierPhases=t.main=t.left=t.end=t.clippingParents=t.bottom=t.beforeWrite=t.beforeRead=t.beforeMain=t.basePlacements=t.auto=t.afterWrite=t.afterRead=t.afterMain=void 0;t.top="top";var n="bottom";t.bottom=n;var o="right";t.right=o;var r="left";t.left=r;var a="auto";t.auto=a;var i=["top",n,o,r];t.basePlacements=i;var c="start";t.start=c;var l="end";t.end=l;t.clippingParents="clippingParents";t.viewport="viewport";t.popper="popper";t.reference="reference";var d=i.reduce((function(e,t){return e.concat([t+"-"+c,t+"-"+l])}),[]);t.variationPlacements=d;var u=[].concat(i,[a]).reduce((function(e,t){return e.concat([t,t+"-"+c,t+"-"+l])}),[]);t.placements=u;var s="beforeRead";t.beforeRead=s;var m="read";t.read=m;var p="afterRead";t.afterRead=p;var f="beforeMain";t.beforeMain=f;var h="main";t.main=h;var C="afterMain";t.afterMain=C;var N="beforeWrite";t.beforeWrite=N;var b="write";t.write=b;var V="afterWrite";t.afterWrite=V;var g=[s,m,p,f,h,C,N,b,V];t.modifierPhases=g},37809:function(e,t,n){"use strict";t.__esModule=!0;var o={popperGenerator:!0,detectOverflow:!0,createPopperBase:!0,createPopper:!0,createPopperLite:!0};t.popperGenerator=t.detectOverflow=t.createPopperLite=t.createPopperBase=t.createPopper=void 0;var r=n(15954);Object.keys(r).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===r[e]||(t[e]=r[e]))}));var a=n(4207);Object.keys(a).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===a[e]||(t[e]=a[e]))}));var i=n(21926);t.popperGenerator=i.popperGenerator,t.detectOverflow=i.detectOverflow,t.createPopperBase=i.createPopper;var c=n(17827);t.createPopper=c.createPopper;var l=n(47952);t.createPopperLite=l.createPopper},89290:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o,r=(o=n(38569))&&o.__esModule?o:{"default":o},a=n(79388);var i={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},o=t.attributes[e]||{},i=t.elements[e];(0,a.isHTMLElement)(i)&&(0,r["default"])(i)&&(Object.assign(i.style,n),Object.keys(o).forEach((function(e){var t=o[e];!1===t?i.removeAttribute(e):i.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var o=t.elements[e],i=t.attributes[e]||{},c=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{});(0,a.isHTMLElement)(o)&&(0,r["default"])(o)&&(Object.assign(o.style,c),Object.keys(i).forEach((function(e){o.removeAttribute(e)})))}))}},requires:["computeStyles"]};t["default"]=i},71313:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o=m(n(27629)),r=m(n(68349)),a=m(n(62215)),i=m(n(55490)),c=m(n(78772)),l=n(54444),d=m(n(11277)),u=m(n(45674)),s=n(15954);n(79388);function m(e){return e&&e.__esModule?e:{"default":e}}var p=function(e,t){return e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e,(0,d["default"])("number"!=typeof e?e:(0,u["default"])(e,s.basePlacements))};var f={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,a=e.name,d=e.options,u=n.elements.arrow,m=n.modifiersData.popperOffsets,f=(0,o["default"])(n.placement),h=(0,c["default"])(f),C=[s.left,s.right].indexOf(f)>=0?"height":"width";if(u&&m){var N=p(d.padding,n),b=(0,r["default"])(u),V="y"===h?s.top:s.left,g="y"===h?s.bottom:s.right,v=n.rects.reference[C]+n.rects.reference[h]-m[h]-n.rects.popper[C],_=m[h]-n.rects.reference[h],k=(0,i["default"])(u),y=k?"y"===h?k.clientHeight||0:k.clientWidth||0:0,x=v/2-_/2,w=N[V],B=y-b[C]-N[g],L=y/2-b[C]/2+x,S=(0,l.within)(w,L,B),I=h;n.modifiersData[a]=((t={})[I]=S,t.centerOffset=S-L,t)}},effect:function(e){var t=e.state,n=e.options.element,o=void 0===n?"[data-popper-arrow]":n;null!=o&&("string"!=typeof o||(o=t.elements.popper.querySelector(o)))&&(0,a["default"])(t.elements.popper,o)&&(t.elements.arrow=o)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};t["default"]=f},54680:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0,t.mapToStyles=p;var o=n(15954),r=s(n(55490)),a=s(n(96904)),i=s(n(25890)),c=s(n(40755)),l=s(n(27629)),d=s(n(31686)),u=n(36291);function s(e){return e&&e.__esModule?e:{"default":e}}var m={top:"auto",right:"auto",bottom:"auto",left:"auto"};function p(e){var t,n=e.popper,l=e.popperRect,d=e.placement,s=e.variation,p=e.offsets,f=e.position,h=e.gpuAcceleration,C=e.adaptive,N=e.roundOffsets,b=e.isFixed,V=p.x,g=void 0===V?0:V,v=p.y,_=void 0===v?0:v,k="function"==typeof N?N({x:g,y:_}):{x:g,y:_};g=k.x,_=k.y;var y=p.hasOwnProperty("x"),x=p.hasOwnProperty("y"),w=o.left,B=o.top,L=window;if(C){var S=(0,r["default"])(n),I="clientHeight",T="clientWidth";if(S===(0,a["default"])(n)&&(S=(0,i["default"])(n),"static"!==(0,c["default"])(S).position&&"absolute"===f&&(I="scrollHeight",T="scrollWidth")),d===o.top||(d===o.left||d===o.right)&&s===o.end)B=o.bottom,_-=(b&&S===L&&L.visualViewport?L.visualViewport.height:S[I])-l.height,_*=h?1:-1;if(d===o.left||(d===o.top||d===o.bottom)&&s===o.end)w=o.right,g-=(b&&S===L&&L.visualViewport?L.visualViewport.width:S[T])-l.width,g*=h?1:-1}var A,M=Object.assign({position:f},C&&m),E=!0===N?function(e){var t=e.x,n=e.y,o=window.devicePixelRatio||1;return{x:(0,u.round)(t*o)/o||0,y:(0,u.round)(n*o)/o||0}}({x:g,y:_}):{x:g,y:_};return g=E.x,_=E.y,h?Object.assign({},M,((A={})[B]=x?"0":"",A[w]=y?"0":"",A.transform=(L.devicePixelRatio||1)<=1?"translate("+g+"px, "+_+"px)":"translate3d("+g+"px, "+_+"px, 0)",A)):Object.assign({},M,((t={})[B]=x?_+"px":"",t[w]=y?g+"px":"",t.transform="",t))}var f={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,o=n.gpuAcceleration,r=void 0===o||o,a=n.adaptive,i=void 0===a||a,c=n.roundOffsets,u=void 0===c||c,s={placement:(0,l["default"])(t.placement),variation:(0,d["default"])(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:r,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,p(Object.assign({},s,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:i,roundOffsets:u})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,p(Object.assign({},s,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:u})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}};t["default"]=f},53887:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o,r=(o=n(96904))&&o.__esModule?o:{"default":o};var a={passive:!0};var i={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,o=e.options,i=o.scroll,c=void 0===i||i,l=o.resize,d=void 0===l||l,u=(0,r["default"])(t.elements.popper),s=[].concat(t.scrollParents.reference,t.scrollParents.popper);return c&&s.forEach((function(e){e.addEventListener("scroll",n.update,a)})),d&&u.addEventListener("resize",n.update,a),function(){c&&s.forEach((function(e){e.removeEventListener("scroll",n.update,a)})),d&&u.removeEventListener("resize",n.update,a)}},data:{}};t["default"]=i},82566:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o=u(n(31477)),r=u(n(27629)),a=u(n(44214)),i=u(n(75949)),c=u(n(2894)),l=n(15954),d=u(n(31686));function u(e){return e&&e.__esModule?e:{"default":e}}var s={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,u=e.name;if(!t.modifiersData[u]._skip){for(var s=n.mainAxis,m=void 0===s||s,p=n.altAxis,f=void 0===p||p,h=n.fallbackPlacements,C=n.padding,N=n.boundary,b=n.rootBoundary,V=n.altBoundary,g=n.flipVariations,v=void 0===g||g,_=n.allowedAutoPlacements,k=t.options.placement,y=(0,r["default"])(k),x=h||(y===k||!v?[(0,o["default"])(k)]:function(e){if((0,r["default"])(e)===l.auto)return[];var t=(0,o["default"])(e);return[(0,a["default"])(e),t,(0,a["default"])(t)]}(k)),w=[k].concat(x).reduce((function(e,n){return e.concat((0,r["default"])(n)===l.auto?(0,c["default"])(t,{placement:n,boundary:N,rootBoundary:b,padding:C,flipVariations:v,allowedAutoPlacements:_}):n)}),[]),B=t.rects.reference,L=t.rects.popper,S=new Map,I=!0,T=w[0],A=0;A=0,F=O?"width":"height",D=(0,i["default"])(t,{placement:M,boundary:N,rootBoundary:b,altBoundary:V,padding:C}),R=O?P?l.right:l.left:P?l.bottom:l.top;B[F]>L[F]&&(R=(0,o["default"])(R));var j=(0,o["default"])(R),W=[];if(m&&W.push(D[E]<=0),f&&W.push(D[R]<=0,D[j]<=0),W.every((function(e){return e}))){T=M,I=!1;break}S.set(M,W)}if(I)for(var z=function(e){var t=w.find((function(t){var n=S.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return T=t,"break"},U=v?3:1;U>0;U--){if("break"===z(U))break}t.placement!==T&&(t.modifiersData[u]._skip=!0,t.placement=T,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};t["default"]=s},27353:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o,r=n(15954),a=(o=n(75949))&&o.__esModule?o:{"default":o};function i(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function c(e){return[r.top,r.right,r.bottom,r.left].some((function(t){return e[t]>=0}))}var l={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,o=t.rects.reference,r=t.rects.popper,l=t.modifiersData.preventOverflow,d=(0,a["default"])(t,{elementContext:"reference"}),u=(0,a["default"])(t,{altBoundary:!0}),s=i(d,o),m=i(u,r,l),p=c(s),f=c(m);t.modifiersData[n]={referenceClippingOffsets:s,popperEscapeOffsets:m,isReferenceHidden:p,hasPopperEscaped:f},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":p,"data-popper-escaped":f})}};t["default"]=l},4207:function(e,t,n){"use strict";t.__esModule=!0,t.preventOverflow=t.popperOffsets=t.offset=t.hide=t.flip=t.eventListeners=t.computeStyles=t.arrow=t.applyStyles=void 0;var o=m(n(89290));t.applyStyles=o["default"];var r=m(n(71313));t.arrow=r["default"];var a=m(n(54680));t.computeStyles=a["default"];var i=m(n(53887));t.eventListeners=i["default"];var c=m(n(82566));t.flip=c["default"];var l=m(n(27353));t.hide=l["default"];var d=m(n(99873));t.offset=d["default"];var u=m(n(83662));t.popperOffsets=u["default"];var s=m(n(21031));function m(e){return e&&e.__esModule?e:{"default":e}}t.preventOverflow=s["default"]},99873:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0,t.distanceAndSkiddingToXY=i;var o,r=(o=n(27629))&&o.__esModule?o:{"default":o},a=n(15954);function i(e,t,n){var o=(0,r["default"])(e),i=[a.left,a.top].indexOf(o)>=0?-1:1,c="function"==typeof n?n(Object.assign({},t,{placement:e})):n,l=c[0],d=c[1];return l=l||0,d=(d||0)*i,[a.left,a.right].indexOf(o)>=0?{x:d,y:l}:{x:l,y:d}}var c={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,o=e.name,r=n.offset,c=void 0===r?[0,0]:r,l=a.placements.reduce((function(e,n){return e[n]=i(n,t.rects,c),e}),{}),d=l[t.placement],u=d.x,s=d.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=u,t.modifiersData.popperOffsets.y+=s),t.modifiersData[o]=l}};t["default"]=c},83662:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o,r=(o=n(2002))&&o.__esModule?o:{"default":o};var a={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=(0,r["default"])({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}};t["default"]=a},21031:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o=n(15954),r=f(n(27629)),a=f(n(78772)),i=f(n(16696)),c=n(54444),l=f(n(68349)),d=f(n(55490)),u=f(n(75949)),s=f(n(31686)),m=f(n(22710)),p=n(36291);function f(e){return e&&e.__esModule?e:{"default":e}}var h={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,f=e.name,h=n.mainAxis,C=void 0===h||h,N=n.altAxis,b=void 0!==N&&N,V=n.boundary,g=n.rootBoundary,v=n.altBoundary,_=n.padding,k=n.tether,y=void 0===k||k,x=n.tetherOffset,w=void 0===x?0:x,B=(0,u["default"])(t,{boundary:V,rootBoundary:g,padding:_,altBoundary:v}),L=(0,r["default"])(t.placement),S=(0,s["default"])(t.placement),I=!S,T=(0,a["default"])(L),A=(0,i["default"])(T),M=t.modifiersData.popperOffsets,E=t.rects.reference,P=t.rects.popper,O="function"==typeof w?w(Object.assign({},t.rects,{placement:t.placement})):w,F="number"==typeof O?{mainAxis:O,altAxis:O}:Object.assign({mainAxis:0,altAxis:0},O),D=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,R={x:0,y:0};if(M){if(C){var j,W="y"===T?o.top:o.left,z="y"===T?o.bottom:o.right,U="y"===T?"height":"width",H=M[T],G=H+B[W],K=H-B[z],Y=y?-P[U]/2:0,q=S===o.start?E[U]:P[U],$=S===o.start?-P[U]:-E[U],X=t.elements.arrow,Q=y&&X?(0,l["default"])(X):{width:0,height:0},J=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:(0,m["default"])(),Z=J[W],ee=J[z],te=(0,c.within)(0,E[U],Q[U]),ne=I?E[U]/2-Y-te-Z-F.mainAxis:q-te-Z-F.mainAxis,oe=I?-E[U]/2+Y+te+ee+F.mainAxis:$+te+ee+F.mainAxis,re=t.elements.arrow&&(0,d["default"])(t.elements.arrow),ae=re?"y"===T?re.clientTop||0:re.clientLeft||0:0,ie=null!=(j=null==D?void 0:D[T])?j:0,ce=H+ne-ie-ae,le=H+oe-ie,de=(0,c.within)(y?(0,p.min)(G,ce):G,H,y?(0,p.max)(K,le):K);M[T]=de,R[T]=de-H}if(b){var ue,se="x"===T?o.top:o.left,me="x"===T?o.bottom:o.right,pe=M[A],fe="y"===A?"height":"width",he=pe+B[se],Ce=pe-B[me],Ne=-1!==[o.top,o.left].indexOf(L),be=null!=(ue=null==D?void 0:D[A])?ue:0,Ve=Ne?he:pe-E[fe]-P[fe]-be+F.altAxis,ge=Ne?pe+E[fe]+P[fe]-be-F.altAxis:Ce,ve=y&&Ne?(0,c.withinMaxClamp)(Ve,pe,ge):(0,c.within)(y?Ve:he,pe,y?ge:Ce);M[A]=ve,R[A]=ve-pe}t.modifiersData[f]=R}},requiresIfExists:["offset"]};t["default"]=h},47952:function(e,t,n){"use strict";t.__esModule=!0,t.defaultModifiers=t.createPopper=void 0;var o=n(21926);t.popperGenerator=o.popperGenerator,t.detectOverflow=o.detectOverflow;var r=l(n(53887)),a=l(n(83662)),i=l(n(54680)),c=l(n(89290));function l(e){return e&&e.__esModule?e:{"default":e}}var d=[r["default"],a["default"],i["default"],c["default"]];t.defaultModifiers=d;var u=(0,o.popperGenerator)({defaultModifiers:d});t.createPopper=u},17827:function(e,t,n){"use strict";t.__esModule=!0;var o={createPopper:!0,createPopperLite:!0,defaultModifiers:!0,popperGenerator:!0,detectOverflow:!0};t.defaultModifiers=t.createPopperLite=t.createPopper=void 0;var r=n(21926);t.popperGenerator=r.popperGenerator,t.detectOverflow=r.detectOverflow;var a=C(n(53887)),i=C(n(83662)),c=C(n(54680)),l=C(n(89290)),d=C(n(99873)),u=C(n(82566)),s=C(n(21031)),m=C(n(71313)),p=C(n(27353)),f=n(47952);t.createPopperLite=f.createPopper;var h=n(4207);function C(e){return e&&e.__esModule?e:{"default":e}}Object.keys(h).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===h[e]||(t[e]=h[e]))}));var N=[a["default"],i["default"],c["default"],l["default"],d["default"],u["default"],s["default"],m["default"],p["default"]];t.defaultModifiers=N;var b=(0,r.popperGenerator)({defaultModifiers:N});t.createPopperLite=t.createPopper=b},2894:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t){void 0===t&&(t={});var n=t,c=n.placement,l=n.boundary,d=n.rootBoundary,u=n.padding,s=n.flipVariations,m=n.allowedAutoPlacements,p=void 0===m?r.placements:m,f=(0,o["default"])(c),h=f?s?r.variationPlacements:r.variationPlacements.filter((function(e){return(0,o["default"])(e)===f})):r.basePlacements,C=h.filter((function(e){return p.indexOf(e)>=0}));0===C.length&&(C=h);var N=C.reduce((function(t,n){return t[n]=(0,a["default"])(e,{placement:n,boundary:l,rootBoundary:d,padding:u})[(0,i["default"])(n)],t}),{});return Object.keys(N).sort((function(e,t){return N[e]-N[t]}))};var o=c(n(31686)),r=n(15954),a=c(n(75949)),i=c(n(27629));function c(e){return e&&e.__esModule?e:{"default":e}}},2002:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t,n=e.reference,c=e.element,l=e.placement,d=l?(0,o["default"])(l):null,u=l?(0,r["default"])(l):null,s=n.x+n.width/2-c.width/2,m=n.y+n.height/2-c.height/2;switch(d){case i.top:t={x:s,y:n.y-c.height};break;case i.bottom:t={x:s,y:n.y+n.height};break;case i.right:t={x:n.x+n.width,y:m};break;case i.left:t={x:n.x-c.width,y:m};break;default:t={x:n.x,y:n.y}}var p=d?(0,a["default"])(d):null;if(null!=p){var f="y"===p?"height":"width";switch(u){case i.start:t[p]=t[p]-(n[f]/2-c[f]/2);break;case i.end:t[p]=t[p]+(n[f]/2-c[f]/2)}}return t};var o=c(n(27629)),r=c(n(31686)),a=c(n(78772)),i=n(15954);function c(e){return e&&e.__esModule?e:{"default":e}}},27672:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){var t;return function(){return t||(t=new Promise((function(n){Promise.resolve().then((function(){t=undefined,n(e())}))}))),t}}},75949:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t){void 0===t&&(t={});var n=t,m=n.placement,p=void 0===m?e.placement:m,f=n.boundary,h=void 0===f?l.clippingParents:f,C=n.rootBoundary,N=void 0===C?l.viewport:C,b=n.elementContext,V=void 0===b?l.popper:b,g=n.altBoundary,v=void 0!==g&&g,_=n.padding,k=void 0===_?0:_,y=(0,u["default"])("number"!=typeof k?k:(0,s["default"])(k,l.basePlacements)),x=V===l.popper?l.reference:l.popper,w=e.rects.popper,B=e.elements[v?x:V],L=(0,o["default"])((0,d.isElement)(B)?B:B.contextElement||(0,r["default"])(e.elements.popper),h,N),S=(0,a["default"])(e.elements.reference),I=(0,i["default"])({reference:S,element:w,strategy:"absolute",placement:p}),T=(0,c["default"])(Object.assign({},w,I)),A=V===l.popper?T:S,M={top:L.top-A.top+y.top,bottom:A.bottom-L.bottom+y.bottom,left:L.left-A.left+y.left,right:A.right-L.right+y.right},E=e.modifiersData.offset;if(V===l.popper&&E){var P=E[p];Object.keys(M).forEach((function(e){var t=[l.right,l.bottom].indexOf(e)>=0?1:-1,n=[l.top,l.bottom].indexOf(e)>=0?"y":"x";M[e]+=P[n]*t}))}return M};var o=m(n(65647)),r=m(n(25890)),a=m(n(11100)),i=m(n(2002)),c=m(n(73060)),l=n(15954),d=n(79388),u=m(n(11277)),s=m(n(45674));function m(e){return e&&e.__esModule?e:{"default":e}}},45674:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}},80885:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o=0?"x":"y"}},31477:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e.replace(/left|right|bottom|top/g,(function(e){return n[e]}))};var n={left:"right",right:"left",bottom:"top",top:"bottom"}},44214:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e.replace(/start|end/g,(function(e){return n[e]}))};var n={start:"end",end:"start"}},31686:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e.split("-")[1]}},36291:function(e,t){"use strict";t.__esModule=!0,t.round=t.min=t.max=void 0;var n=Math.max;t.max=n;var o=Math.min;t.min=o;var r=Math.round;t.round=r},54220:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){var t=e.reduce((function(e,t){var n=e[t.name];return e[t.name]=n?Object.assign({},n,t,{options:Object.assign({},n.options,t.options),data:Object.assign({},n.data,t.data)}):t,e}),{});return Object.keys(t).map((function(e){return t[e]}))}},11277:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return Object.assign({},(0,r["default"])(),e)};var o,r=(o=n(22710))&&o.__esModule?o:{"default":o}},69282:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=function(e){var t=new Map,n=new Set,o=[];function r(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var o=t.get(e);o&&r(o)}})),o.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||r(e)})),o}(e);return o.modifierPhases.reduce((function(e,n){return e.concat(t.filter((function(e){return e.phase===n})))}),[])};var o=n(15954)},73060:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}},12459:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e,t){var n=new Set;return e.filter((function(e){var o=t(e);if(!n.has(o))return n.add(o),!0}))}},30752:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){e.forEach((function(t){[].concat(Object.keys(t),a).filter((function(e,t,n){return n.indexOf(e)===t})).forEach((function(n){switch(n){case"name":t.name;break;case"enabled":t.enabled;break;case"phase":r.modifierPhases.indexOf(t.phase);break;case"fn":t.fn;break;case"effect":null!=t.effect&&t.effect;break;case"requires":null!=t.requires&&Array.isArray(t.requires);break;case"requiresIfExists":Array.isArray(t.requiresIfExists)}t.requires&&t.requires.forEach((function(t){e.find((function(e){return e.name===t}))}))}))}))};(o=n(80885))&&o.__esModule;var o,r=n(15954);var a=["name","enabled","phase","fn","effect","requires","options"]},54444:function(e,t,n){"use strict";t.__esModule=!0,t.within=r,t.withinMaxClamp=function(e,t,n){var o=r(e,t,n);return o>n?n:o};var o=n(36291);function r(e,t,n){return(0,o.max)(e,(0,o.min)(t,n))}},7696:function(e,t,n){"use strict";var o=n(45744),r=n(56279),a=TypeError;e.exports=function(e){if(o(e))return e;throw a(r(e)+" is not a function")}},99079:function(e,t,n){"use strict";var o=n(49332),r=n(56279),a=TypeError;e.exports=function(e){if(o(e))return e;throw a(r(e)+" is not a constructor")}},3760:function(e,t,n){"use strict";var o=n(45744),r=String,a=TypeError;e.exports=function(e){if("object"==typeof e||o(e))return e;throw a("Can't set "+r(e)+" as a prototype")}},48144:function(e,t,n){"use strict";var o=n(43741),r=n(48525),a=n(92723).f,i=o("unscopables"),c=Array.prototype;c[i]==undefined&&a(c,i,{configurable:!0,value:r(null)}),e.exports=function(e){c[i][e]=!0}},21679:function(e,t,n){"use strict";var o=n(59529).charAt;e.exports=function(e,t,n){return t+(n?o(e,t).length:1)}},41706:function(e,t,n){"use strict";var o=n(76469),r=TypeError;e.exports=function(e,t){if(o(t,e))return e;throw r("Incorrect invocation")}},65522:function(e,t,n){"use strict";var o=n(5484),r=String,a=TypeError;e.exports=function(e){if(o(e))return e;throw a(r(e)+" is not an object")}},65167:function(e){"use strict";e.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},26974:function(e,t,n){"use strict";var o=n(39125);e.exports=o((function(){if("function"==typeof ArrayBuffer){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,"a",{value:8})}}))},92574:function(e,t,n){"use strict";var o,r,a,i=n(65167),c=n(77849),l=n(61770),d=n(45744),u=n(5484),s=n(77807),m=n(10374),p=n(56279),f=n(87229),h=n(73e3),C=n(92723).f,N=n(76469),b=n(56997),V=n(44958),g=n(43741),v=n(8220),_=n(48797),k=_.enforce,y=_.get,x=l.Int8Array,w=x&&x.prototype,B=l.Uint8ClampedArray,L=B&&B.prototype,S=x&&b(x),I=w&&b(w),T=Object.prototype,A=l.TypeError,M=g("toStringTag"),E=v("TYPED_ARRAY_TAG"),P="TypedArrayConstructor",O=i&&!!V&&"Opera"!==m(l.opera),F=!1,D={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},R={BigInt64Array:8,BigUint64Array:8},j=function(e){if(!u(e))return!1;var t=m(e);return"DataView"===t||s(D,t)||s(R,t)},W=function(e){if(!u(e))return!1;var t=m(e);return s(D,t)||s(R,t)};for(o in D)(a=(r=l[o])&&r.prototype)?k(a).TypedArrayConstructor=r:O=!1;for(o in R)(a=(r=l[o])&&r.prototype)&&(k(a).TypedArrayConstructor=r);if((!O||!d(S)||S===Function.prototype)&&(S=function(){throw A("Incorrect invocation")},O))for(o in D)l[o]&&V(l[o],S);if((!O||!I||I===T)&&(I=S.prototype,O))for(o in D)l[o]&&V(l[o].prototype,I);if(O&&b(L)!==I&&V(L,I),c&&!s(I,M))for(o in F=!0,C(I,M,{get:function(){return u(this)?this[E]:undefined}}),D)l[o]&&f(l[o],E,o);e.exports={NATIVE_ARRAY_BUFFER_VIEWS:O,TYPED_ARRAY_TAG:F&&E,aTypedArray:function(e){if(W(e))return e;throw A("Target is not a typed array")},aTypedArrayConstructor:function(e){if(d(e)&&(!V||N(S,e)))return e;throw A(p(e)+" is not a typed array constructor")},exportTypedArrayMethod:function(e,t,n,o){if(c){if(n)for(var r in D){var a=l[r];if(a&&s(a.prototype,e))try{delete a.prototype[e]}catch(i){try{a.prototype[e]=t}catch(d){}}}I[e]&&!n||h(I,e,n?t:O&&w[e]||t,o)}},exportTypedArrayStaticMethod:function(e,t,n){var o,r;if(c){if(V){if(n)for(o in D)if((r=l[o])&&s(r,e))try{delete r[e]}catch(a){}if(S[e]&&!n)return;try{return h(S,e,n?t:O&&S[e]||t)}catch(a){}}for(o in D)!(r=l[o])||r[e]&&!n||h(r,e,t)}},getTypedArrayConstructor:function z(e){var t=b(e);if(u(t)){var n=y(t);return n&&s(n,P)?n.TypedArrayConstructor:z(t)}},isView:j,isTypedArray:W,TypedArray:S,TypedArrayPrototype:I}},10377:function(e,t,n){"use strict";var o=n(61770),r=n(90655),a=n(77849),i=n(65167),c=n(82429),l=n(87229),d=n(60495),u=n(39125),s=n(41706),m=n(94868),p=n(87543),f=n(76124),h=n(29209),C=n(56997),N=n(44958),b=n(94600).f,V=n(92723).f,g=n(8093),v=n(74337),_=n(93182),k=n(48797),y=c.PROPER,x=c.CONFIGURABLE,w=k.get,B=k.set,L="ArrayBuffer",S="DataView",I="Wrong index",T=o.ArrayBuffer,A=T,M=A&&A.prototype,E=o.DataView,P=E&&E.prototype,O=Object.prototype,F=o.Array,D=o.RangeError,R=r(g),j=r([].reverse),W=h.pack,z=h.unpack,U=function(e){return[255&e]},H=function(e){return[255&e,e>>8&255]},G=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},K=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},Y=function(e){return W(e,23,4)},q=function(e){return W(e,52,8)},$=function(e,t){V(e.prototype,t,{get:function(){return w(this)[t]}})},X=function(e,t,n,o){var r=f(n),a=w(e);if(r+t>a.byteLength)throw D(I);var i=w(a.buffer).bytes,c=r+a.byteOffset,l=v(i,c,c+t);return o?l:j(l)},Q=function(e,t,n,o,r,a){var i=f(n),c=w(e);if(i+t>c.byteLength)throw D(I);for(var l=w(c.buffer).bytes,d=i+c.byteOffset,u=o(+r),s=0;ste;)(Z=ee[te++])in A||l(A,Z,T[Z]);M.constructor=A}N&&C(P)!==O&&N(P,O);var ne=new E(new A(2)),oe=r(P.setInt8);ne.setInt8(0,2147483648),ne.setInt8(1,2147483649),!ne.getInt8(0)&&ne.getInt8(1)||d(P,{setInt8:function(e,t){oe(this,e,t<<24>>24)},setUint8:function(e,t){oe(this,e,t<<24>>24)}},{unsafe:!0})}else M=(A=function(e){s(this,M);var t=f(e);B(this,{bytes:R(F(t),0),byteLength:t}),a||(this.byteLength=t)}).prototype,P=(E=function(e,t,n){s(this,P),s(e,M);var o=w(e).byteLength,r=m(t);if(r<0||r>o)throw D("Wrong offset");if(r+(n=n===undefined?o-r:p(n))>o)throw D("Wrong length");B(this,{buffer:e,byteLength:n,byteOffset:r}),a||(this.buffer=e,this.byteLength=n,this.byteOffset=r)}).prototype,a&&($(A,"byteLength"),$(E,"buffer"),$(E,"byteLength"),$(E,"byteOffset")),d(P,{getInt8:function(e){return X(this,1,e)[0]<<24>>24},getUint8:function(e){return X(this,1,e)[0]},getInt16:function(e){var t=X(this,2,e,arguments.length>1?arguments[1]:undefined);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=X(this,2,e,arguments.length>1?arguments[1]:undefined);return t[1]<<8|t[0]},getInt32:function(e){return K(X(this,4,e,arguments.length>1?arguments[1]:undefined))},getUint32:function(e){return K(X(this,4,e,arguments.length>1?arguments[1]:undefined))>>>0},getFloat32:function(e){return z(X(this,4,e,arguments.length>1?arguments[1]:undefined),23)},getFloat64:function(e){return z(X(this,8,e,arguments.length>1?arguments[1]:undefined),52)},setInt8:function(e,t){Q(this,1,e,U,t)},setUint8:function(e,t){Q(this,1,e,U,t)},setInt16:function(e,t){Q(this,2,e,H,t,arguments.length>2?arguments[2]:undefined)},setUint16:function(e,t){Q(this,2,e,H,t,arguments.length>2?arguments[2]:undefined)},setInt32:function(e,t){Q(this,4,e,G,t,arguments.length>2?arguments[2]:undefined)},setUint32:function(e,t){Q(this,4,e,G,t,arguments.length>2?arguments[2]:undefined)},setFloat32:function(e,t){Q(this,4,e,Y,t,arguments.length>2?arguments[2]:undefined)},setFloat64:function(e,t){Q(this,8,e,q,t,arguments.length>2?arguments[2]:undefined)}});_(A,L),_(E,S),e.exports={ArrayBuffer:A,DataView:E}},21497:function(e,t,n){"use strict";var o=n(73502),r=n(312),a=n(10950),i=n(33099),c=Math.min;e.exports=[].copyWithin||function(e,t){var n=o(this),l=a(n),d=r(e,l),u=r(t,l),s=arguments.length>2?arguments[2]:undefined,m=c((s===undefined?l:r(s,l))-u,l-d),p=1;for(u0;)u in n?n[d]=n[u]:i(n,d),d+=p,u+=p;return n}},8093:function(e,t,n){"use strict";var o=n(73502),r=n(312),a=n(10950);e.exports=function(e){for(var t=o(this),n=a(t),i=arguments.length,c=r(i>1?arguments[1]:undefined,n),l=i>2?arguments[2]:undefined,d=l===undefined?n:r(l,n);d>c;)t[c++]=e;return t}},29074:function(e,t,n){"use strict";var o=n(36249).forEach,r=n(74640)("forEach");e.exports=r?[].forEach:function(e){return o(this,e,arguments.length>1?arguments[1]:undefined)}},15993:function(e,t,n){"use strict";var o=n(10950);e.exports=function(e,t){for(var n=0,r=o(t),a=new e(r);r>n;)a[n]=t[n++];return a}},49981:function(e,t,n){"use strict";var o=n(9341),r=n(76348),a=n(73502),i=n(63635),c=n(94535),l=n(49332),d=n(10950),u=n(61154),s=n(93247),m=n(52522),p=Array;e.exports=function(e){var t=a(e),n=l(this),f=arguments.length,h=f>1?arguments[1]:undefined,C=h!==undefined;C&&(h=o(h,f>2?arguments[2]:undefined));var N,b,V,g,v,_,k=m(t),y=0;if(!k||this===p&&c(k))for(N=d(t),b=n?new this(N):p(N);N>y;y++)_=C?h(t[y],y):t[y],u(b,y,_);else for(v=(g=s(t,k)).next,b=n?new this:[];!(V=r(v,g)).done;y++)_=C?i(g,h,[V.value,y],!0):V.value,u(b,y,_);return b.length=y,b}},89344:function(e,t,n){"use strict";var o=n(4254),r=n(312),a=n(10950),i=function(e){return function(t,n,i){var c,l=o(t),d=a(l),u=r(i,d);if(e&&n!=n){for(;d>u;)if((c=l[u++])!=c)return!0}else for(;d>u;u++)if((e||u in l)&&l[u]===n)return e||u||0;return!e&&-1}};e.exports={includes:i(!0),indexOf:i(!1)}},36249:function(e,t,n){"use strict";var o=n(9341),r=n(90655),a=n(83609),i=n(73502),c=n(10950),l=n(64711),d=r([].push),u=function(e){var t=1==e,n=2==e,r=3==e,u=4==e,s=6==e,m=7==e,p=5==e||s;return function(f,h,C,N){for(var b,V,g=i(f),v=a(g),_=o(h,C),k=c(v),y=0,x=N||l,w=t?x(f,k):n||m?x(f,0):undefined;k>y;y++)if((p||y in v)&&(V=_(b=v[y],y,g),e))if(t)w[y]=V;else if(V)switch(e){case 3:return!0;case 5:return b;case 6:return y;case 2:d(w,b)}else switch(e){case 4:return!1;case 7:d(w,b)}return s?-1:r||u?u:w}};e.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6),filterReject:u(7)}},93881:function(e,t,n){"use strict";var o=n(10261),r=n(4254),a=n(94868),i=n(10950),c=n(74640),l=Math.min,d=[].lastIndexOf,u=!!d&&1/[1].lastIndexOf(1,-0)<0,s=c("lastIndexOf"),m=u||!s;e.exports=m?function(e){if(u)return o(d,this,arguments)||0;var t=r(this),n=i(t),c=n-1;for(arguments.length>1&&(c=l(c,a(arguments[1]))),c<0&&(c=n+c);c>=0;c--)if(c in t&&t[c]===e)return c||0;return-1}:d},10112:function(e,t,n){"use strict";var o=n(39125),r=n(43741),a=n(64279),i=r("species");e.exports=function(e){return a>=51||!o((function(){var t=[];return(t.constructor={})[i]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},74640:function(e,t,n){"use strict";var o=n(39125);e.exports=function(e,t){var n=[][e];return!!n&&o((function(){n.call(null,t||function(){return 1},1)}))}},21038:function(e,t,n){"use strict";var o=n(7696),r=n(73502),a=n(83609),i=n(10950),c=TypeError,l=function(e){return function(t,n,l,d){o(n);var u=r(t),s=a(u),m=i(u),p=e?m-1:0,f=e?-1:1;if(l<2)for(;;){if(p in s){d=s[p],p+=f;break}if(p+=f,e?p<0:m<=p)throw c("Reduce of empty array with no initial value")}for(;e?p>=0:m>p;p+=f)p in s&&(d=n(d,s[p],p,u));return d}};e.exports={left:l(!1),right:l(!0)}},74337:function(e,t,n){"use strict";var o=n(312),r=n(10950),a=n(61154),i=Array,c=Math.max;e.exports=function(e,t,n){for(var l=r(e),d=o(t,l),u=o(n===undefined?l:n,l),s=i(c(u-d,0)),m=0;d0;)e[o]=e[--o];o!==a++&&(e[o]=n)}return e},i=function(e,t,n,o){for(var r=t.length,a=n.length,i=0,c=0;i1?arguments[1]:undefined);t=t?t.next:n.first;)for(o(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!b(this,e)}}),a(p,n?{get:function(e){var t=b(this,e);return t&&t.value},set:function(e,t){return N(this,0===e?0:e,t)}}:{add:function(e){return N(this,e=0===e?0:e,e)}}),s&&o(p,"size",{get:function(){return C(this).size}}),u},setStrong:function(e,t,n){var o=t+" Iterator",r=h(t),a=h(o);d(e,t,(function(e,t){f(this,{type:o,target:e,state:r(e),kind:t,last:undefined})}),(function(){for(var e=a(this),t=e.kind,n=e.last;n&&n.removed;)n=n.previous;return e.target&&(e.last=n=n?n.next:e.state.first)?"keys"==t?{value:n.key,done:!1}:"values"==t?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(e.target=undefined,{value:undefined,done:!0})}),n?"entries":"values",!n,!0),u(t)}}},81995:function(e,t,n){"use strict";var o=n(90655),r=n(60495),a=n(49632).getWeakData,i=n(65522),c=n(5484),l=n(41706),d=n(47916),u=n(36249),s=n(77807),m=n(48797),p=m.set,f=m.getterFor,h=u.find,C=u.findIndex,N=o([].splice),b=0,V=function(e){return e.frozen||(e.frozen=new g)},g=function(){this.entries=[]},v=function(e,t){return h(e.entries,(function(e){return e[0]===t}))};g.prototype={get:function(e){var t=v(this,e);if(t)return t[1]},has:function(e){return!!v(this,e)},set:function(e,t){var n=v(this,e);n?n[1]=t:this.entries.push([e,t])},"delete":function(e){var t=C(this.entries,(function(t){return t[0]===e}));return~t&&N(this.entries,t,1),!!~t}},e.exports={getConstructor:function(e,t,n,o){var u=e((function(e,r){l(e,m),p(e,{type:t,id:b++,frozen:undefined}),r!=undefined&&d(r,e[o],{that:e,AS_ENTRIES:n})})),m=u.prototype,h=f(t),C=function(e,t,n){var o=h(e),r=a(i(t),!0);return!0===r?V(o).set(t,n):r[o.id]=n,e};return r(m,{"delete":function(e){var t=h(this);if(!c(e))return!1;var n=a(e);return!0===n?V(t)["delete"](e):n&&s(n,t.id)&&delete n[t.id]},has:function(e){var t=h(this);if(!c(e))return!1;var n=a(e);return!0===n?V(t).has(e):n&&s(n,t.id)}}),r(m,n?{get:function(e){var t=h(this);if(c(e)){var n=a(e);return!0===n?V(t).get(e):n?n[t.id]:undefined}},set:function(e,t){return C(this,e,t)}}:{add:function(e){return C(this,e,!0)}}),u}}},18291:function(e,t,n){"use strict";var o=n(59450),r=n(61770),a=n(90655),i=n(16851),c=n(73e3),l=n(49632),d=n(47916),u=n(41706),s=n(45744),m=n(5484),p=n(39125),f=n(98994),h=n(93182),C=n(75121);e.exports=function(e,t,n){var N=-1!==e.indexOf("Map"),b=-1!==e.indexOf("Weak"),V=N?"set":"add",g=r[e],v=g&&g.prototype,_=g,k={},y=function(e){var t=a(v[e]);c(v,e,"add"==e?function(e){return t(this,0===e?0:e),this}:"delete"==e?function(e){return!(b&&!m(e))&&t(this,0===e?0:e)}:"get"==e?function(e){return b&&!m(e)?undefined:t(this,0===e?0:e)}:"has"==e?function(e){return!(b&&!m(e))&&t(this,0===e?0:e)}:function(e,n){return t(this,0===e?0:e,n),this})};if(i(e,!s(g)||!(b||v.forEach&&!p((function(){(new g).entries().next()})))))_=n.getConstructor(t,e,N,V),l.enable();else if(i(e,!0)){var x=new _,w=x[V](b?{}:-0,1)!=x,B=p((function(){x.has(1)})),L=f((function(e){new g(e)})),S=!b&&p((function(){for(var e=new g,t=5;t--;)e[V](t,t);return!e.has(-0)}));L||((_=t((function(e,t){u(e,v);var n=C(new g,e,_);return t!=undefined&&d(t,n[V],{that:n,AS_ENTRIES:N}),n}))).prototype=v,v.constructor=_),(B||S)&&(y("delete"),y("has"),N&&y("get")),(S||w)&&y(V),b&&v.clear&&delete v.clear}return k[e]=_,o({global:!0,constructor:!0,forced:_!=g},k),h(_,e),b||n.setStrong(_,e,N),_}},35155:function(e,t,n){"use strict";var o=n(77807),r=n(75379),a=n(12488),i=n(92723);e.exports=function(e,t,n){for(var c=r(t),l=i.f,d=a.f,u=0;u"+l+""+t+">"}},92413:function(e,t,n){"use strict";var o=n(80936).IteratorPrototype,r=n(48525),a=n(20471),i=n(93182),c=n(53481),l=function(){return this};e.exports=function(e,t,n,d){var u=t+" Iterator";return e.prototype=r(o,{next:a(+!d,n)}),i(e,u,!1,!0),c[u]=l,e}},87229:function(e,t,n){"use strict";var o=n(77849),r=n(92723),a=n(20471);e.exports=o?function(e,t,n){return r.f(e,t,a(1,n))}:function(e,t,n){return e[t]=n,e}},20471:function(e){"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},61154:function(e,t,n){"use strict";var o=n(23986),r=n(92723),a=n(20471);e.exports=function(e,t,n){var i=o(t);i in e?r.f(e,i,a(0,n)):e[i]=n}},36849:function(e,t,n){"use strict";var o=n(90655),r=n(39125),a=n(79408).start,i=RangeError,c=Math.abs,l=Date.prototype,d=l.toISOString,u=o(l.getTime),s=o(l.getUTCDate),m=o(l.getUTCFullYear),p=o(l.getUTCHours),f=o(l.getUTCMilliseconds),h=o(l.getUTCMinutes),C=o(l.getUTCMonth),N=o(l.getUTCSeconds);e.exports=r((function(){return"0385-07-25T07:06:39.999Z"!=d.call(new Date(-50000000000001))}))||!r((function(){d.call(new Date(NaN))}))?function(){if(!isFinite(u(this)))throw i("Invalid time value");var e=this,t=m(e),n=f(e),o=t<0?"-":t>9999?"+":"";return o+a(c(t),o?6:4,0)+"-"+a(C(e)+1,2,0)+"-"+a(s(e),2,0)+"T"+a(p(e),2,0)+":"+a(h(e),2,0)+":"+a(N(e),2,0)+"."+a(n,3,0)+"Z"}:d},81990:function(e,t,n){"use strict";var o=n(65522),r=n(2118),a=TypeError;e.exports=function(e){if(o(this),"string"===e||"default"===e)e="string";else if("number"!==e)throw a("Incorrect hint");return r(this,e)}},66384:function(e,t,n){"use strict";var o=n(28859),r=n(92723);e.exports=function(e,t,n){return n.get&&o(n.get,t,{getter:!0}),n.set&&o(n.set,t,{setter:!0}),r.f(e,t,n)}},73e3:function(e,t,n){"use strict";var o=n(45744),r=n(92723),a=n(28859),i=n(58962);e.exports=function(e,t,n,c){c||(c={});var l=c.enumerable,d=c.name!==undefined?c.name:t;return o(n)&&a(n,d,c),c.global?l?e[t]=n:i(t,n):(c.unsafe?e[t]&&(l=!0):delete e[t],l?e[t]=n:r.f(e,t,{value:n,enumerable:!1,configurable:!c.nonConfigurable,writable:!c.nonWritable})),e}},60495:function(e,t,n){"use strict";var o=n(73e3);e.exports=function(e,t,n){for(var r in t)o(e,r,t[r],n);return e}},58962:function(e,t,n){"use strict";var o=n(61770),r=Object.defineProperty;e.exports=function(e,t){try{r(o,e,{value:t,configurable:!0,writable:!0})}catch(n){o[e]=t}return t}},11335:function(e,t,n){"use strict";var o=n(59450),r=n(76348),a=n(37249),i=n(82429),c=n(45744),l=n(92413),d=n(56997),u=n(44958),s=n(93182),m=n(87229),p=n(73e3),f=n(43741),h=n(53481),C=n(80936),N=i.PROPER,b=i.CONFIGURABLE,V=C.IteratorPrototype,g=C.BUGGY_SAFARI_ITERATORS,v=f("iterator"),_="keys",k="values",y="entries",x=function(){return this};e.exports=function(e,t,n,i,f,C,w){l(n,t,i);var B,L,S,I=function(e){if(e===f&&P)return P;if(!g&&e in M)return M[e];switch(e){case _:case k:case y:return function(){return new n(this,e)}}return function(){return new n(this)}},T=t+" Iterator",A=!1,M=e.prototype,E=M[v]||M["@@iterator"]||f&&M[f],P=!g&&E||I(f),O="Array"==t&&M.entries||E;if(O&&(B=d(O.call(new e)))!==Object.prototype&&B.next&&(a||d(B)===V||(u?u(B,V):c(B[v])||p(B,v,x)),s(B,T,!0,!0),a&&(h[T]=x)),N&&f==k&&E&&E.name!==k&&(!a&&b?m(M,"name",k):(A=!0,P=function(){return r(E,this)})),f)if(L={values:I(k),keys:C?P:I(_),entries:I(y)},w)for(S in L)(g||A||!(S in M))&&p(M,S,L[S]);else o({target:t,proto:!0,forced:g||A},L);return a&&!w||M[v]===P||p(M,v,P,{name:f}),h[t]=P,L}},89604:function(e,t,n){"use strict";var o=n(62660),r=n(77807),a=n(68438),i=n(92723).f;e.exports=function(e){var t=o.Symbol||(o.Symbol={});r(t,e)||i(t,e,{value:a.f(e)})}},33099:function(e,t,n){"use strict";var o=n(56279),r=TypeError;e.exports=function(e,t){if(!delete e[t])throw r("Cannot delete property "+o(t)+" of "+o(e))}},77849:function(e,t,n){"use strict";var o=n(39125);e.exports=!o((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},50842:function(e,t,n){"use strict";var o=n(61770),r=n(5484),a=o.document,i=r(a)&&r(a.createElement);e.exports=function(e){return i?a.createElement(e):{}}},97989:function(e){"use strict";var t=TypeError;e.exports=function(e){if(e>9007199254740991)throw t("Maximum allowed index exceeded");return e}},13811:function(e,t,n){"use strict";var o=n(42630).match(/firefox\/(\d+)/i);e.exports=!!o&&+o[1]},15904:function(e){"use strict";e.exports="object"==typeof window&&"object"!=typeof Deno},86936:function(e,t,n){"use strict";var o=n(42630);e.exports=/MSIE|Trident/.test(o)},48715:function(e,t,n){"use strict";var o=n(42630),r=n(61770);e.exports=/ipad|iphone|ipod/i.test(o)&&r.Pebble!==undefined},25515:function(e,t,n){"use strict";var o=n(42630);e.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(o)},67745:function(e,t,n){"use strict";var o=n(61496),r=n(61770);e.exports="process"==o(r.process)},35016:function(e,t,n){"use strict";var o=n(42630);e.exports=/web0s(?!.*chrome)/i.test(o)},42630:function(e,t,n){"use strict";var o=n(54965);e.exports=o("navigator","userAgent")||""},64279:function(e,t,n){"use strict";var o,r,a=n(61770),i=n(42630),c=a.process,l=a.Deno,d=c&&c.versions||l&&l.version,u=d&&d.v8;u&&(r=(o=u.split("."))[0]>0&&o[0]<4?1:+(o[0]+o[1])),!r&&i&&(!(o=i.match(/Edge\/(\d+)/))||o[1]>=74)&&(o=i.match(/Chrome\/(\d+)/))&&(r=+o[1]),e.exports=r},86778:function(e,t,n){"use strict";var o=n(42630).match(/AppleWebKit\/(\d+)\./);e.exports=!!o&&+o[1]},59096:function(e){"use strict";e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},59450:function(e,t,n){"use strict";var o=n(61770),r=n(12488).f,a=n(87229),i=n(73e3),c=n(58962),l=n(35155),d=n(16851);e.exports=function(e,t){var n,u,s,m,p,f=e.target,h=e.global,C=e.stat;if(n=h?o:C?o[f]||c(f,{}):(o[f]||{}).prototype)for(u in t){if(m=t[u],s=e.dontCallGetSet?(p=r(n,u))&&p.value:n[u],!d(h?u:f+(C?".":"#")+u,e.forced)&&s!==undefined){if(typeof m==typeof s)continue;l(m,s)}(e.sham||s&&s.sham)&&a(m,"sham",!0),i(n,u,m,e)}}},39125:function(e){"use strict";e.exports=function(e){try{return!!e()}catch(t){return!0}}},6531:function(e,t,n){"use strict";n(50044);var o=n(90655),r=n(73e3),a=n(50174),i=n(39125),c=n(43741),l=n(87229),d=c("species"),u=RegExp.prototype;e.exports=function(e,t,n,s){var m=c(e),p=!i((function(){var t={};return t[m]=function(){return 7},7!=""[e](t)})),f=p&&!i((function(){var t=!1,n=/a/;return"split"===e&&((n={}).constructor={},n.constructor[d]=function(){return n},n.flags="",n[m]=/./[m]),n.exec=function(){return t=!0,null},n[m](""),!t}));if(!p||!f||n){var h=o(/./[m]),C=t(m,""[e],(function(e,t,n,r,i){var c=o(e),l=t.exec;return l===a||l===u.exec?p&&!i?{done:!0,value:h(t,n,r)}:{done:!0,value:c(n,t,r)}:{done:!1}}));r(String.prototype,e,C[0]),r(u,m,C[1])}s&&l(u[m],"sham",!0)}},23507:function(e,t,n){"use strict";var o=n(98037),r=n(10950),a=n(97989),i=n(9341);e.exports=function c(e,t,n,l,d,u,s,m){for(var p,f=d,h=0,C=!!s&&i(s,m);h0&&o(p)?f=c(e,t,p,r(p),f,u-1)-1:(a(f+1),e[f]=p),f++),h++;return f}},57724:function(e,t,n){"use strict";var o=n(39125);e.exports=!o((function(){return Object.isExtensible(Object.preventExtensions({}))}))},10261:function(e,t,n){"use strict";var o=n(14687),r=Function.prototype,a=r.apply,i=r.call;e.exports="object"==typeof Reflect&&Reflect.apply||(o?i.bind(a):function(){return i.apply(a,arguments)})},9341:function(e,t,n){"use strict";var o=n(90655),r=n(7696),a=n(14687),i=o(o.bind);e.exports=function(e,t){return r(e),t===undefined?e:a?i(e,t):function(){return e.apply(t,arguments)}}},14687:function(e,t,n){"use strict";var o=n(39125);e.exports=!o((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},38349:function(e,t,n){"use strict";var o=n(90655),r=n(7696),a=n(5484),i=n(77807),c=n(53898),l=n(14687),d=Function,u=o([].concat),s=o([].join),m={},p=function(e,t,n){if(!i(m,t)){for(var o=[],r=0;r]*>)/g,u=/\$([$&'`]|\d{1,2})/g;e.exports=function(e,t,n,o,s,m){var p=n+e.length,f=o.length,h=u;return s!==undefined&&(s=r(s),h=d),c(m,h,(function(r,c){var d;switch(i(c,0)){case"$":return"$";case"&":return e;case"`":return l(t,0,n);case"'":return l(t,p);case"<":d=s[l(c,1,-1)];break;default:var u=+c;if(0===u)return r;if(u>f){var m=a(u/10);return 0===m?r:m<=f?o[m-1]===undefined?i(c,1):o[m-1]+i(c,1):r}d=o[u-1]}return d===undefined?"":d}))}},61770:function(e,t,n){"use strict";var o=function(e){return e&&e.Math==Math&&e};e.exports=o("object"==typeof globalThis&&globalThis)||o("object"==typeof window&&window)||o("object"==typeof self&&self)||o("object"==typeof n.g&&n.g)||function(){return this}()||Function("return this")()},77807:function(e,t,n){"use strict";var o=n(90655),r=n(73502),a=o({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return a(r(e),t)}},31645:function(e){"use strict";e.exports={}},66791:function(e,t,n){"use strict";var o=n(61770);e.exports=function(e,t){var n=o.console;n&&n.error&&(1==arguments.length?n.error(e):n.error(e,t))}},29093:function(e,t,n){"use strict";var o=n(54965);e.exports=o("document","documentElement")},17041:function(e,t,n){"use strict";var o=n(77849),r=n(39125),a=n(50842);e.exports=!o&&!r((function(){return 7!=Object.defineProperty(a("div"),"a",{get:function(){return 7}}).a}))},29209:function(e){"use strict";var t=Array,n=Math.abs,o=Math.pow,r=Math.floor,a=Math.log,i=Math.LN2;e.exports={pack:function(e,c,l){var d,u,s,m=t(l),p=8*l-c-1,f=(1<>1,C=23===c?o(2,-24)-o(2,-77):0,N=e<0||0===e&&1/e<0?1:0,b=0;for((e=n(e))!=e||e===Infinity?(u=e!=e?1:0,d=f):(d=r(a(e)/i),e*(s=o(2,-d))<1&&(d--,s*=2),(e+=d+h>=1?C/s:C*o(2,1-h))*s>=2&&(d++,s/=2),d+h>=f?(u=0,d=f):d+h>=1?(u=(e*s-1)*o(2,c),d+=h):(u=e*o(2,h-1)*o(2,c),d=0));c>=8;)m[b++]=255&u,u/=256,c-=8;for(d=d<0;)m[b++]=255&d,d/=256,p-=8;return m[--b]|=128*N,m},unpack:function(e,t){var n,r=e.length,a=8*r-t-1,i=(1<>1,l=a-7,d=r-1,u=e[d--],s=127&u;for(u>>=7;l>0;)s=256*s+e[d--],l-=8;for(n=s&(1<<-l)-1,s>>=-l,l+=t;l>0;)n=256*n+e[d--],l-=8;if(0===s)s=1-c;else{if(s===i)return n?NaN:u?-Infinity:Infinity;n+=o(2,t),s-=c}return(u?-1:1)*n*o(2,s-t)}}},83609:function(e,t,n){"use strict";var o=n(90655),r=n(39125),a=n(61496),i=Object,c=o("".split);e.exports=r((function(){return!i("z").propertyIsEnumerable(0)}))?function(e){return"String"==a(e)?c(e,""):i(e)}:i},75121:function(e,t,n){"use strict";var o=n(45744),r=n(5484),a=n(44958);e.exports=function(e,t,n){var i,c;return a&&o(i=t.constructor)&&i!==n&&r(c=i.prototype)&&c!==n.prototype&&a(e,c),e}},44790:function(e,t,n){"use strict";var o=n(90655),r=n(45744),a=n(42878),i=o(Function.toString);r(a.inspectSource)||(a.inspectSource=function(e){return i(e)}),e.exports=a.inspectSource},49632:function(e,t,n){"use strict";var o=n(59450),r=n(90655),a=n(31645),i=n(5484),c=n(77807),l=n(92723).f,d=n(94600),u=n(25586),s=n(65067),m=n(8220),p=n(57724),f=!1,h=m("meta"),C=0,N=function(e){l(e,h,{value:{objectID:"O"+C++,weakData:{}}})},b=e.exports={enable:function(){b.enable=function(){},f=!0;var e=d.f,t=r([].splice),n={};n[h]=1,e(n).length&&(d.f=function(n){for(var o=e(n),r=0,a=o.length;r b;b++)if((g=S(e[b]))&&d(h,g))return g;return new f(!1)}C=u(e,N)}for(v=C.next;!(_=r(v,C)).done;){try{g=S(_.value)}catch(I){m(C,"throw",I)}if("object"==typeof g&&g&&d(h,g))return g}return new f(!1)}},80261:function(e,t,n){"use strict";var o=n(76348),r=n(65522),a=n(36750);e.exports=function(e,t,n){var i,c;r(e);try{if(!(i=a(e,"return"))){if("throw"===t)throw n;return n}i=o(i,e)}catch(l){c=!0,i=l}if("throw"===t)throw n;if(c)throw i;return r(i),n}},80936:function(e,t,n){"use strict";var o,r,a,i=n(39125),c=n(45744),l=n(48525),d=n(56997),u=n(73e3),s=n(43741),m=n(37249),p=s("iterator"),f=!1;[].keys&&("next"in(a=[].keys())?(r=d(d(a)))!==Object.prototype&&(o=r):f=!0),o==undefined||i((function(){var e={};return o[p].call(e)!==e}))?o={}:m&&(o=l(o)),c(o[p])||u(o,p,(function(){return this})),e.exports={IteratorPrototype:o,BUGGY_SAFARI_ITERATORS:f}},53481:function(e){"use strict";e.exports={}},10950:function(e,t,n){"use strict";var o=n(87543);e.exports=function(e){return o(e.length)}},28859:function(e,t,n){"use strict";var o=n(39125),r=n(45744),a=n(77807),i=n(77849),c=n(82429).CONFIGURABLE,l=n(44790),d=n(48797),u=d.enforce,s=d.get,m=Object.defineProperty,p=i&&!o((function(){return 8!==m((function(){}),"length",{value:8}).length})),f=String(String).split("String"),h=e.exports=function(e,t,n){"Symbol("===String(t).slice(0,7)&&(t="["+String(t).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),n&&n.getter&&(t="get "+t),n&&n.setter&&(t="set "+t),(!a(e,"name")||c&&e.name!==t)&&m(e,"name",{value:t,configurable:!0}),p&&n&&a(n,"arity")&&e.length!==n.arity&&m(e,"length",{value:n.arity});try{n&&a(n,"constructor")&&n.constructor?i&&m(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=undefined)}catch(r){}var o=u(e);return a(o,"source")||(o.source=f.join("string"==typeof t?t:"")),e};Function.prototype.toString=h((function(){return r(this)&&s(this).source||l(this)}),"toString")},73346:function(e){"use strict";var t=Math.expm1,n=Math.exp;e.exports=!t||t(10)>22025.465794806718||t(10)<22025.465794806718||-2e-17!=t(-2e-17)?function(e){var t=+e;return 0==t?t:t>-1e-6&&t<1e-6?t+t*t/2:n(t)-1}:t},92647:function(e,t,n){"use strict";var o=n(61303),r=Math.abs,a=Math.pow,i=a(2,-52),c=a(2,-23),l=a(2,127)*(2-c),d=a(2,-126);e.exports=Math.fround||function(e){var t,n,a=+e,u=r(a),s=o(a);return ul||n!=n?s*Infinity:s*n}},12153:function(e){"use strict";var t=Math.log,n=Math.LOG10E;e.exports=Math.log10||function(e){return t(e)*n}},28010:function(e){"use strict";var t=Math.log;e.exports=Math.log1p||function(e){var n=+e;return n>-1e-8&&n<1e-8?n-n*n/2:t(1+n)}},61303:function(e){"use strict";e.exports=Math.sign||function(e){var t=+e;return 0==t||t!=t?t:t<0?-1:1}},9275:function(e){"use strict";var t=Math.ceil,n=Math.floor;e.exports=Math.trunc||function(e){var o=+e;return(o>0?n:t)(o)}},34063:function(e,t,n){"use strict";var o,r,a,i,c,l,d,u,s=n(61770),m=n(9341),p=n(12488).f,f=n(61777).set,h=n(25515),C=n(48715),N=n(35016),b=n(67745),V=s.MutationObserver||s.WebKitMutationObserver,g=s.document,v=s.process,_=s.Promise,k=p(s,"queueMicrotask"),y=k&&k.value;y||(o=function(){var e,t;for(b&&(e=v.domain)&&e.exit();r;){t=r.fn,r=r.next;try{t()}catch(n){throw r?i():a=undefined,n}}a=undefined,e&&e.enter()},h||b||N||!V||!g?!C&&_&&_.resolve?((d=_.resolve(undefined)).constructor=_,u=m(d.then,d),i=function(){u(o)}):b?i=function(){v.nextTick(o)}:(f=m(f,s),i=function(){f(o)}):(c=!0,l=g.createTextNode(""),new V(o).observe(l,{characterData:!0}),i=function(){l.data=c=!c})),e.exports=y||function(e){var t={fn:e,next:undefined};a&&(a.next=t),r||(r=t,i()),a=t}},58822:function(e,t,n){"use strict";var o=n(67581);e.exports=o&&!!Symbol["for"]&&!!Symbol.keyFor},67581:function(e,t,n){"use strict";var o=n(64279),r=n(39125);e.exports=!!Object.getOwnPropertySymbols&&!r((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&o&&o<41}))},37494:function(e,t,n){"use strict";var o=n(61770),r=n(45744),a=n(44790),i=o.WeakMap;e.exports=r(i)&&/native code/.test(a(i))},16002:function(e,t,n){"use strict";var o=n(7696),r=function(e){var t,n;this.promise=new e((function(e,o){if(t!==undefined||n!==undefined)throw TypeError("Bad Promise constructor");t=e,n=o})),this.resolve=o(t),this.reject=o(n)};e.exports.f=function(e){return new r(e)}},96794:function(e,t,n){"use strict";var o=n(71857),r=TypeError;e.exports=function(e){if(o(e))throw r("The method doesn't accept regular expressions");return e}},46329:function(e,t,n){"use strict";var o=n(61770).isFinite;e.exports=Number.isFinite||function(e){return"number"==typeof e&&o(e)}},90119:function(e,t,n){"use strict";var o=n(61770),r=n(39125),a=n(90655),i=n(95372),c=n(56404).trim,l=n(93966),d=a("".charAt),u=o.parseFloat,s=o.Symbol,m=s&&s.iterator,p=1/u(l+"-0")!=-Infinity||m&&!r((function(){u(Object(m))}));e.exports=p?function(e){var t=c(i(e)),n=u(t);return 0===n&&"-"==d(t,0)?-0:n}:u},80280:function(e,t,n){"use strict";var o=n(61770),r=n(39125),a=n(90655),i=n(95372),c=n(56404).trim,l=n(93966),d=o.parseInt,u=o.Symbol,s=u&&u.iterator,m=/^[+-]?0x/i,p=a(m.exec),f=8!==d(l+"08")||22!==d(l+"0x16")||s&&!r((function(){d(Object(s))}));e.exports=f?function(e,t){var n=c(i(e));return d(n,t>>>0||(p(m,n)?16:10))}:d},35350:function(e,t,n){"use strict";var o=n(77849),r=n(90655),a=n(76348),i=n(39125),c=n(21417),l=n(41543),d=n(89328),u=n(73502),s=n(83609),m=Object.assign,p=Object.defineProperty,f=r([].concat);e.exports=!m||i((function(){if(o&&1!==m({b:1},m(p({},"a",{enumerable:!0,get:function(){p(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach((function(e){t[e]=e})),7!=m({},e)[n]||c(m({},t)).join("")!=r}))?function(e,t){for(var n=u(e),r=arguments.length,i=1,m=l.f,p=d.f;r>i;)for(var h,C=s(arguments[i++]),N=m?f(c(C),m(C)):c(C),b=N.length,V=0;b>V;)h=N[V++],o&&!a(p,C,h)||(n[h]=C[h]);return n}:m},48525:function(e,t,n){"use strict";var o,r=n(65522),a=n(86328),i=n(59096),c=n(31645),l=n(29093),d=n(50842),u=n(95541),s=u("IE_PROTO"),m=function(){},p=function(e){return"