Exercise equipment changes/refactor

This commit is contained in:
Isaac Erwin
2018-01-31 07:30:40 -05:00
parent 378c0bcd06
commit 35c4a8030e
4 changed files with 70 additions and 111 deletions

View File

@@ -1,14 +1,60 @@
/obj/machinery/workout
name = "fitness lifter"
icon = 'icons/obj/machines/fitness_machines_vr.dmi'
icon_state = "fitnesslifter" //Sprites ripped from goon.
/obj/machinery/fitness
name = "workout equipment"
desc = "A utility often used to lose weight."
icon = 'icons/obj/machines/fitness_machines_vr.dmi'
anchored = 1
use_power = 0
idle_power_usage = 0
active_power_usage = 0
var/messages
var/workout_sounds
var/cooldown = 10
var/weightloss_power = 1
/obj/machinery/workout/attackby(obj/item/W, var/mob/living/user)
/obj/machinery/fitness/attack_hand(var/mob/living/user)
if(user.nutrition < 70)
user << "<span class='notice'>You need more energy to workout with the [src]!</span>"
else if(user.weight < 70)
user << "<span class='notice'>You're too skinny to risk losing any more weight!</span>"
else //If they have enough nutrition and body weight, they can exercise.
user.setClickCooldown(cooldown)
user.nutrition -= 10 * weightloss_power
user.weight -= 0.025 * weightloss_power * (0.01*user.weight_loss)
flick("[icon_state]2",src)
var/message = pick(messages)
user << "<span class='notice'>[message].</span>"
for(var/s in workout_sounds)
playsound(src.loc, s, 50, 1)
/obj/machinery/fitness/punching_bag
name = "punching bag"
desc = "A bag often used to relieve stress and burn fat."
icon_state = "punchingbag"
anchored = 0
density = 1
workout_sounds = list(
"punch")
messages = list(
"You slam your fist into the punching bag",
"You jab the punching bag with your elbow")
/obj/machinery/fitness/punching_bag/clown
name = "clown punching bag"
desc = "A bag often used to releive stress and burn fat. It has a clown on the front of it."
icon_state = "bopbag"
workout_sounds = list(
"punch",
"clownstep",
"sound/items/bikehorn.ogg")
messages = list(
"You slam your fist into the punching bag",
"You jab the punching bag with your elbow",
"You hammer the clown right in it's face with your fist",
"A honk emits from the punching bag as you hit it")
/obj/machinery/fitness/heavy/attackby(obj/item/W, var/mob/living/user)
if(istype(W, /obj/item/weapon/wrench))
src.add_fingerprint(user)
user.visible_message("<span class='warning'>[user] has [anchored ? "un" : ""]secured \the [src].</span>", "<span class='notice'>You [anchored ? "un" : ""]secure \the [src].</span>")
@@ -16,109 +62,24 @@
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
return
/obj/machinery/workout/attack_hand(var/mob/living/user)
/obj/machinery/fitness/heavy/attack_hand(var/mob/living/user)
if(!anchored)
user << "<span class='notice'>For safety reasons, you are required to have this equipment wrenched down before using it!</span>"
return
else if(user.loc != src.loc)
user << "<span class='notice'>For safety reasons, you need to be sitting in the fitness lifter for it to work!</span>"
user << "<span class='notice'>For safety reasons, you need to be sitting in the [src] for it to work!</span>"
return
else if(user.nutrition > 70 && user.weight > 70) //If they have enough nutrition and body weight, they can exercise.
user.setClickCooldown(40)
user.dir = src.dir
user.nutrition = user.nutrition - 20 //Working out burns a lot of calories!
user.weight = user.weight - 0.05 //Burn a bit of weight. Not much, but quite a bit. This can't be spammed, as they'll need nutrition to be able to work out.
flick("fitnesslifter2",src)
user << "<span class='notice'>You lift some weights.</span>"
else if(user.nutrition < 70)
user << "<span class='notice'>You need more energy to workout on the mat!</span>"
else if(user.weight < 70)
user << "<span class='notice'>You're too skinny to risk losing any more weight!</span>"
else
user << "<span class='notice'>You're unable to use the fitness lifter.</span>"
return //Something went wrong. They shouldn't see this.
..()
/obj/machinery/workout/shipped
anchored = 0 // For cargo.
/obj/machinery/punching_bag
name = "punching bag"
icon = 'icons/obj/machines/fitness_machines_vr.dmi'
icon_state = "punchingbag"
desc = "A bag often used to releive stress and burn fat."
anchored = 1
density = 1
use_power = 0
idle_power_usage = 0
active_power_usage = 0
/obj/machinery/punching_bag/attack_hand(var/mob/living/user)
if(user.nutrition > 35 && user.weight > 70) //If they have enough nutrition and body weight, they can exercise.
user.setClickCooldown(10)
user.nutrition = user.nutrition - 10 //A punching bag uses less calories.
user.weight = user.weight - 0.025 //And burns less weight.
flick("punchingbag2",src)
var/message = pick(
"<span class='notice'>You slam your fist into the punching bag.</span>",
"<span class='notice'>You jab the punching bag with your elbow.</span>")
user << message
playsound(src.loc, "punch", 50, 1)
else if(user.nutrition < 35)
user << "<span class='notice'>You need more energy to workout on the mat!</span>"
else if(user.weight < 70)
user << "<span class='notice'>You're too skinny to risk losing any more weight!</span>"
else
user << "<span class='notice'>You're unable to use the punching bag.</span>"
return //Something went wrong. They shouldn't see this.
/obj/machinery/punching_clown
name = "clown punching bag"
icon = 'icons/obj/machines/fitness_machines_vr.dmi'
icon_state = "bopbag"
desc = "A bag often used to releive stress and burn fat. It has a clown on the front of it."
anchored = 0
density = 1
use_power = 0
idle_power_usage = 0
active_power_usage = 0
/obj/machinery/punching_clown/attack_hand(var/mob/living/user)
if(user.nutrition > 35 && user.weight > 70) //If they have enough nutrition and body weight, they can exercise.
user.setClickCooldown(10)
user.nutrition = user.nutrition - 10
user.weight = user.weight - 0.025
flick("bopbag2",src)
var/message = pick(
"<span class='notice'>You slam your fist into the punching bag.</span>",
"<span class='notice'>You jab the punching bag with your elbow.</span>",
"<span class='notice'>You hammer the clown right in it's face with your fist.</span>",
"<span class='notice'>A honk emits from the punching bag as you hit it.</span>")
user << message
playsound(src.loc, 'sound/items/bikehorn.ogg', 50, 1)
playsound(src.loc, "clownstep", 50, 1)
playsound(src.loc, "punch", 50, 1)
else if(user.nutrition < 35)
user << "<span class='notice'>You need more energy to workout on the mat!</span>"
else if(user.weight < 70)
user << "<span class='notice'>You're too skinny to risk losing any more weight!</span>"
else
user << "<span class='notice'>You're unable to use the punching bag.</span>"
return //Something went wrong. They shouldn't see this.
/obj/machinery/fitness/heavy/lifter
name = "fitness lifter"
desc = "A specialized machine that can be used for an assortment of excercises involving moving some weight repeatedly. Often used with the goal of losing weight."
icon_state = "fitnesslifter" //Sprites ripped from goon.
messages = list("You lift some weights")
weightloss_power = 2
/obj/machinery/scale
name = "scale"
@@ -129,13 +90,11 @@
use_power = 0
idle_power_usage = 0
active_power_usage = 0
var/kilograms
/obj/machinery/scale/attack_hand(var/mob/living/user)
if(user.loc != src.loc)
user << "<span class='notice'>You need to be standing on top of the scale for it to work!</span>"
return
if(user.weight) //Just in case.
kilograms = round(text2num(user.weight),4) / 2.20463
user << "<span class='notice'>Your relative weight is [user.weight]lb / [kilograms]kg.</span>"
user.visible_message("<span class='warning'>[user]'s relative weight is [user.weight]lb / [kilograms]kg.</span>")
var/kilograms = round(text2num(user.weight),4) / 2.20463
src.visible_message("<span class='notice'>[src] displays a reading of [user.weight]lb / [kilograms]kg when [user] stands on it.</span>")

View File

@@ -4260,9 +4260,9 @@
"bDV" = (/obj/item/weapon/storage/fancy/cigar/havana,/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/hostile/mimic/crate,/turf/simulated/floor/plating,/area/maintenance/lower/rnd)
"bDW" = (/obj/machinery/vending/fitness,/turf/simulated/floor/tiled,/area/crew_quarters/pool)
"bDX" = (/obj/structure/closet/athletic_mixed,/obj/machinery/status_display{pixel_y = 30},/turf/simulated/floor/wood,/area/crew_quarters/recreation_area)
"bDY" = (/obj/machinery/punching_clown,/turf/simulated/floor/wood,/area/crew_quarters/recreation_area)
"bDY" = (/obj/machinery/fitness/punching_bag/clown,/turf/simulated/floor/wood,/area/crew_quarters/recreation_area)
"bDZ" = (/obj/machinery/camera/network/civilian,/turf/simulated/floor/wood,/area/crew_quarters/recreation_area)
"bEa" = (/obj/machinery/workout,/turf/simulated/floor/wood,/area/crew_quarters/recreation_area)
"bEa" = (/obj/machinery/fitness/heavy/lifter,/turf/simulated/floor/wood,/area/crew_quarters/recreation_area)
"bEb" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/mauve/border{dir = 1},/obj/structure/closet/firecloset/full,/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
"bEc" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/tether/surfacebase/atrium_three)
"bEd" = (/obj/machinery/computer/security/mining{name = "xenobiology camera monitor"; network = list("Xenobiology")},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)

View File

@@ -938,7 +938,7 @@
"sb" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bathroom)
"sc" = (/obj/structure/closet/athletic_mixed,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bathroom)
"sd" = (/obj/machinery/scale,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom)
"se" = (/obj/machinery/workout,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom)
"se" = (/obj/machinery/fitness/heavy/lifter,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom)
"sf" = (/obj/structure/flora/pottedplant{icon_state = "plant-21"},/obj/machinery/camera/network/crescent,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom)
"sg" = (/obj/structure/curtain/open/shower,/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"},/obj/machinery/shower{pixel_y = 13},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom)
"sh" = (/obj/machinery/door/airlock/security{name = "Security"},/turf/unsimulated/floor/steel,/area/centcom/security)
@@ -1000,7 +1000,7 @@
"tl" = (/obj/structure/bed/chair/shuttle{dir = 1},/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid})
"tm" = (/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/obj/structure/closet/crate/bin,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical)
"tn" = (/obj/structure/flora/pottedplant{icon_state = "plant-22"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bathroom)
"to" = (/obj/machinery/punching_clown,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom)
"to" = (/obj/machinery/fitness/punching_bag/clown,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom)
"tp" = (/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom)
"tq" = (/obj/structure/table/reinforced,/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/blue/border{dir = 8},/turf/unsimulated/floor/steel,/area/centcom/security)
"tr" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/turf/unsimulated/floor/steel,/area/centcom/security)
@@ -1292,9 +1292,9 @@
"yR" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/machinery/computer/skills,/obj/effect/floor_decal/borderfloorblack{dir = 9},/obj/effect/floor_decal/corner/blue/border{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"yS" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 26},/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/blue/border{dir = 1},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 1},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"yT" = (/obj/machinery/vending/hydronutrients,/obj/effect/floor_decal/borderfloorblack{dir = 9},/obj/effect/floor_decal/corner/orange/border{dir = 9},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 10},/obj/effect/floor_decal/corner/orange/bordercorner2{dir = 10},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"yU" = (/obj/machinery/punching_clown,/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/orange/border{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"yU" = (/obj/machinery/fitness/punching_bag/clown,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"yV" = (/obj/machinery/vending/hydroseeds,/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/orange/border{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"yW" = (/obj/machinery/workout,/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/orange/border{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"yW" = (/obj/machinery/fitness/heavy/lifter,/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/orange/border{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"yX" = (/obj/structure/table/reinforced,/obj/item/weapon/material/minihoe,/obj/item/device/analyzer/plant_analyzer,/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/orange/border{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"yY" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/orange/border{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"yZ" = (/obj/structure/table/reinforced,/obj/item/clothing/head/greenbandana,/obj/effect/floor_decal/borderfloorblack{dir = 5},/obj/effect/floor_decal/corner/orange/border{dir = 5},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)

View File

@@ -8,6 +8,7 @@
"ah" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 4},/turf/simulated/shuttle/plating/airless/carry,/area/syndicate_station/start)
"ai" = (/turf/space,/obj/structure/shuttle/engine/propulsion{dir = 4},/turf/simulated/shuttle/plating/airless/carry,/area/syndicate_station/start)
"aj" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 4},/turf/simulated/shuttle/plating/airless/carry,/area/syndicate_station/start)
"ak" = (/obj/machinery/fitness/heavy/lifter,/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 5},/turf/unsimulated/floor{icon_state = "steel"},/area/antag/antag_base)
"am" = (/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "trade_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"},/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "trade_shuttle"; pixel_x = -25; pixel_y = 0; req_one_access = list(101); tag_door = "trade_shuttle_hatch"},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"an" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/red{dir = 5},/obj/item/ammo_magazine/m545,/obj/item/ammo_magazine/m545,/obj/item/ammo_magazine/m545,/obj/item/ammo_magazine/m545,/obj/item/ammo_magazine/m545,/obj/item/ammo_magazine/m545,/obj/item/ammo_magazine/m545/ap,/obj/item/ammo_magazine/m545/ap,/obj/item/ammo_magazine/m545/ap,/obj/item/ammo_magazine/m545/ap,/obj/item/weapon/gun/projectile/automatic/sts35,/obj/item/weapon/gun/projectile/automatic/sts35,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base)
"ao" = (/obj/effect/floor_decal/corner/red{dir = 5},/obj/effect/floor_decal/corner/red{dir = 5},/obj/structure/table/rack,/obj/item/weapon/storage/box/frags,/obj/item/weapon/storage/box/frags,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base)
@@ -787,7 +788,6 @@
"pt" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/shuttle/floor{tag = "icon-floor_white"; icon_state = "floor_white"},/area/syndicate_station/start)
"pu" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/sniperrifle,/obj/item/weapon/gun/energy/sniperrifle,/obj/effect/floor_decal/corner/red{dir = 10},/obj/effect/floor_decal/corner/red{dir = 6},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base)
"pv" = (/obj/structure/closet/athletic_mixed,/turf/unsimulated/floor{icon_state = "steel"},/area/antag/antag_base)
"pw" = (/obj/machinery/workout,/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 5},/turf/unsimulated/floor{icon_state = "steel"},/area/antag/antag_base)
"px" = (/obj/structure/table/woodentable,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/weapon/melee/telebaton,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_w = 0; pixel_x = 0; pixel_y = 32},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 5},/turf/unsimulated/floor{icon_state = "steel"},/area/antag/antag_base)
"py" = (/obj/structure/reagent_dispensers/water_cooler/full,/turf/unsimulated/floor{icon_state = "steel"},/area/antag/antag_base)
"pz" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"; name = "Clothing Storage"},/obj/item/clothing/shoes/boots/combat,/obj/item/clothing/shoes/boots/combat,/obj/item/clothing/shoes/boots/combat,/obj/item/clothing/shoes/boots/combat,/obj/item/clothing/shoes/boots/combat,/obj/item/clothing/shoes/boots/combat,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/gloves/combat,/obj/item/clothing/gloves/combat,/obj/item/clothing/gloves/combat,/obj/item/clothing/gloves/combat,/obj/item/clothing/gloves/combat,/obj/item/clothing/gloves/combat,/turf/unsimulated/floor{icon_state = "lino"},/area/antag/antag_base)
@@ -1129,7 +1129,7 @@ mvapapapapapapapapmwmxmwmwmymzmAmwmwmxmwapapapapapapapapmvapapapapapapapapapapap
mvapapapapapapmwmwmwmBmCmwmDmEmEmwmFmGmwmwmwapapapapapapmvapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapaBaBaBaBoXoXoXoXoXoXoXoXpdoXoXpdoXoXpdoXoYoYoYpboYoXaBaBaBaBaBaBaBaBaBaBaBaBaBaBaB
mvapapapapapmwmwmHmImJmJmwmKmEmEmwmLmMmNmOmwmwapapapapapmvapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapaBaBaBaBaBoXanpgphpeaoatoXpkpkpkpkplpkpkoXoYoYoYoYoYoXaBaBaBaBaBaBaBaBaBaBaBaBaBaBaB
mvapapapapmwmwmPmQmRmJmJmwmSmEmEmwmTmTmTmTmUmwmwapapapapmvapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapaBaBaBaBaBoXpkpkpkpkpkpmoXoXoXoXoXoXoXpkoXoXpnpoppoXoXaBaBaBaBaBaBaBaBaBaBaBaBaBaBaB
mvapapapapmwmVmWmXmRmJmJmYmTmTmTmZmTmTmTnamTnbmwapapapapmvapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapaBaBaBaBaBaBoXpkavauaxawpuoXpvpwpxpwpyoXpkoXpzpApBpCpDoXaBaBaBaBaBaBaBaBaBaBaBaBaBaBaB
mvapapapapmwmVmWmXmRmJmJmYmTmTmTmZmTmTmTnamTnbmwapapapapmvapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapaBaBaBaBaBaBoXpkavauaxawpuoXpvakpxakpyoXpkoXpzpApBpCpDoXaBaBaBaBaBaBaBaBaBaBaBaBaBaBaB
mvapapapmwmwmJncncmJmJmJmwndmTnemwnfmTngmTmTnhmwmwapapapmvapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapaBaBaBaBaBaBoXpIoXoXoXoXoXoXpJpJpJpJpJoXpkoXpKpKpKpKcHoXaBaBaBaBaBaBaBaBaBaBaBaBaBaBaB
mvapapapmxnimJmJmJmJmJnjmwndmTnkmwnlmTmTnmmTmTnnmxapapapmvapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapaBaBaBaBaBaBaBoXpkpSpTpUpVpWoXpXpYpZpYqaqbpkqcpKpKpKpKdpoXaBaBaBaBaBaBaBaBaBaBaBaBaBaBaB
mvapapmwmwmwnonpmJnqnpmwmwmwmZmwmwmwnrnsmTntnumwmwmwapapmvapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapaBaBaBaBaBaBaBoXpkpkpkqgqhpkoXoXoXoXoXoXoXoXoXqipKpKpKcHoXaBoXoXoXoXoXoXoXoXoXoXoXoXoXaB