added some drawer fucntionality

main
Shoofle 6 months ago
parent e85a4ef7b1
commit e1c821c26f
  1. 730
      atelier2.p64

@ -4,186 +4,8 @@ version 2
:: gfx/ :: gfx/
:: map/ :: map/
:: sfx/ :: sfx/
:: story.txt
--[[pod_format="raw",created="2024-03-30 15:58:22",modified="2024-04-11 01:41:32",revision=208]]
ATELIER HESTER
welcome to atelier phoebe 2! this is my document for
recording story ideas! please don't read this; it is
all the spoilers! if you want to know what happens
i recommend playing the game, that is the proper
way to experience this :)
--------------
main gameplay interface, you're shown a gridd of
cubbiess which contain various ingredients
you look at the things in the cubbies and label them?
labeling could be hard with just o/x
you have twwo books, one of recipes and one of
ingredients?
drag a label from the book to the drawer/plant?
--------------
plot ddetails follow!!!
main character amnesia from alchemy gone wrong.
main character badly in debt to loan shark
everyone in town has some debt and don't talk about it
most people don't like main character
mc has to mend relationships with everyone in order
to gather everyone together to defeat loan shark
player controls a fairy assistant for alchemy
possibly fairy is new to the atelier?
early dialog esstablishes it's common knowledge that
fairies can blink white (o) to confirm things or
red (x) to be uncertain / ask a question
maybe other colors at other timess but you get it,
those are our two verbs - ask about something and
suggest something
interface is an apothecary cabinet you can open
the drawerss of and ask about. you have to suggest
ingredients to mix together for the cauldron
at the beginning MC is unsure and doesn't know about
your suggestions - "i guess i can look that up?",
"maybe i'll try this?" because the player is guiding
them. towards the end MC responds as though teaching
the player fairy, like "that's right, that'll work!"
and "good job, yeah!" to communicate that the MC
is more confident and getting their mlemory of
alchemy back
the town generally ddoesn't like the alchemisst just
because she's been kindda nasty and rude at times,
just petty disagreements that have boiled over.
she's known to be a decent alchemist though i guesss
endgame is that you rally the town together to break
free of the loan shark; it's hard too convince
townsfolk both because they don't like you at first
and also because the loans ARE legitimate. but it
turnss out that the rest of the town also has debt
to the shark and if you convince everyone you can both
1. achieve independence from the supplies he sells
(maybe he's the intermediary with the trader? or buys
and ressells everything at a markup?)
2. convince people to just reject the loanss/debt;
quesstion here of whether they do this by force,
whether cops exist, idk, this is explicitly passtoral
fantasy. maybe at the end the player will muse about
whether it's good to have mob rule, "no one in toown
liked me, what if they threatened to burn down my
shop?" "yeah, that would suck. maybe we could build
something. but right now rule by mob is better than
rule by loan shark!" idk this feels overly didactic
but you get the idea
this is really getting into the weeds of how we view
the justice system but maybe he threatens to say
"i'll send for the king's knights!" and the crowd is
like "you can do that if you want, but by the time
they get here your house will be burned down.
alternately, you can keep your house and try to
be friendly. maybe even contribute to the town. it's
up to you. burn down your storehouse or genuinely
connect with people?"
definitely overly preachy but i like that
------------------
script!!!!!!!!!!!!
------------------
title screen
new game or load?
new game ->
hester with her back to cauldrron holding a little fairy doll in pieces
fairy shakes and then comes to life
hester: "ahhh, the synthesis wworked! ... i think"
hester: "a fairy like you should be a good help around the shop."
hester: "you might noot be able to speak but you can flash white for yes and red for not sure"
the whole time there's more and more bubbling in the cauldron
hester: "you can be my hands across the atelier!"
explosion!
soot-covered hester stands up
"what just happened."
"wait a second. who am i."
"alchemy books? a cauldron?"
outside view of shop, Atelier Hester on the sign
"Hester..."
back inside
"i must be an alchemist..."
loan shark arrives
"hester! you got the latest payment for me, girlie?"
"i'm afraid i don't knwo who i am - can you help me?"
"nice try. remember you owe me 4000Z by the end of the month. have a nice day!!!"
loan shark leaves
(SAVE POINT)
"am i... in debt?"
"i don't know hwo to do alchemy... but maybe these books..."
(player opens books)
"it looks like this one has recipes... this one has infoormation about ingredients... my head..."
(when quit uot of both books, old man comes in)
"hey, hester. can i get that purified water?"
"i don't knwo who i am"
"sorry, i can't hear so good these days - purified water? my usual order?"
(moves on when you've crafted purified water)
"thank you, hester. this will help me out. here's your payment."
(old man leaves)
"i guess i'll just try to... be an alchemist and pay off my debts..."
(SAVE POINT)
at the beginning MC is unsure and doesn't know about
your suggestions - "i guess i can look that up?",
"maybe i'll try this?" because the player is guiding
them. towards the end MC responds as though teaching
the player fairy, like "that's right, that'll work!"
and "good job, yeah!" to communicate that the MC
is more confident and getting their mlemory of
alchemy back
the town generally ddoesn't like the alchemisst just
because she's been kindda nasty and rude at times,
just petty disagreements that have boiled over.
she's known to be a decent alchemist though i guesss
endgame is that you rally the town together to break
free of the loan shark; it's hard too convince
townsfolk both because they don't like you at first
and also because the loans ARE legitimate. but it
turnss out that the rest of the town also has debt
to the shark and if you convince everyone you can both
1. achieve independence from the supplies he sells
(maybe he's the intermediary with the trader? or buys
and ressells everything at a markup?)
2. convince people to just reject the loanss/debt;
quesstion here of whether they do this by force,
whether cops exist, idk, this is explicitly passtoral
fantasy. maybe at the end the player will muse about
whether it's good to have mob rule, "no one in toown
liked me, what if they threatened to burn down my
shop?" "yeah, that would suck. maybe we could build
something. but right now rule by mob is better than
rule by loan shark!" idk this feels overly didactic
but you get the idea
this is really getting into the weeds of how we view
the justice system but maybe he threatens to say
"i'll send for the king's knights!" and the crowd is
like "you can do that if you want, but by the time
they get here your house will be burned down.
alternately, you can keep your house and try to
be friendly. maybe even contribute to the town. it's
up to you. burn down your storehouse or genuinely
connect with people?"
definitely overly preachy but i like that
:: art.lua :: art.lua
--[[pod_format="raw",created="2024-03-31 01:52:08",modified="2024-04-17 14:41:47",revision=674]] --[[pod_format="raw",created="2024-03-31 01:52:08",modified="2024-04-23 02:42:09",revision=695]]
function bob(s, x, y, w, h, t) function bob(s, x, y, w, h, t)
sspr(s, 0, 0, w, h, x+t/2, y-t/2, w-t, h+t) sspr(s, 0, 0, w, h, x+t/2, y-t/2, w-t, h+t)
end end
@ -248,10 +70,13 @@ function wrap(str, line_length)
end end
function collides(position, object) function collides(position, object)
if DEBUG then
rect(object.left, object.top, object.right, object.bottom, 8)
end
return position.x < object.right and position.x > object.left and position.y > object.top and position.y < object.bottom return position.x < object.right and position.x > object.left and position.y > object.top and position.y < object.bottom
end end
:: cabinet.lua :: cabinet.lua
--[[pod_format="raw",created="2024-04-03 19:46:51",modified="2024-04-17 14:41:47",revision=671]] --[[pod_format="raw",created="2024-04-03 19:46:51",modified="2024-04-23 02:36:18",revision=694]]
Cabinet = {} Cabinet = {}
function Cabinet:new(x, y, gaps) function Cabinet:new(x, y, gaps)
local c = { local c = {
@ -262,6 +87,7 @@ function Cabinet:new(x, y, gaps)
hover_plant = nil, hover_plant = nil,
height = 4*(gaps+16) height = 4*(gaps+16)
} }
-- populate the big drawers -- populate the big drawers
local xoff = x local xoff = x
for i=0,0 do for i=0,0 do
@ -426,7 +252,7 @@ function Conversation:after()
--change_scene(self.behind) --change_scene(self.behind)
end end
:: fairy.lua :: fairy.lua
--[[pod_format="raw",created="2024-04-03 17:32:32",modified="2024-04-10 01:58:59",revision=384]] --[[pod_format="raw",created="2024-04-03 17:32:32",modified="2024-04-23 03:08:39",revision=432]]
Fairy = { Fairy = {
velocity = 1, velocity = 1,
accel_frames = 20, accel_frames = 20,
@ -444,14 +270,14 @@ function Fairy:new(ff)
end end
function Fairy:draw() function Fairy:draw()
if flr(30*t()) % 2 == 0 then if flr(10*t()) % 2 == 0 then
spr(5, self.x-8, self.y-8, self.f) spr(5, self.x-8, self.y-8, self.f)
else else
spr(6, self.x-8, self.y-8, self.f) spr(6, self.x-8, self.y-8, self.f)
end end
end end
function Fairy:move() function Fairy:update()
if self.velocity < self.max_velocity then if self.velocity < self.max_velocity then
self.velocity += (self.max_velocity - self.min_velocity) / self.accel_frames self.velocity += (self.max_velocity - self.min_velocity) / self.accel_frames
end end
@ -467,6 +293,18 @@ function Fairy:move()
if btn(1) then self.f = false end if btn(1) then self.f = false end
if btn(0) then self.f = true end if btn(0) then self.f = true end
if btnp(4) then
local glow = Glow:new(self.x, self.y)
glow.start_color = 7
glow.end_color = 12
add(animations, glow)
end
if btnp(5) then
local glow = Glow:new(self.x, self.y)
add(animations, glow)
end
end end
Glow = {} Glow = {}
@ -499,7 +337,7 @@ function Glow:update()
end end
:: gfx/0.gfx :: gfx/0.gfx
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTAzLTI5IDAxOjE0OjUxIixtb2RpZmllZD0iMjAyNC0w b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTAzLTI5IDAxOjE0OjUxIixtb2RpZmllZD0iMjAyNC0w
NC0xNyAxNDo0MTo0NyIscmV2aXNpb249MTE4N11dbHo0AOIcAAASZAAA8Rp7WzBdPXtibXA9cHh1 NC0yMyAwMzoxOTo0NSIscmV2aXNpb249MTI2NF1dbHo0ANMdAAAZZwAA8Rp7WzBdPXtibXA9cHh1
AEMgEBAE8PAsZmxhZ3M9MCxwYW5feD0wLjM3NQwA_wJ5PS0wLjEyNSx6b29tPTV9LDoAkCR6cAoP AEMgEBAE8PAsZmxhZ3M9MCxwYW5feD0wLjM3NQwA_wJ5PS0wLjEyNSx6b29tPTV9LDoAkCR6cAoP
HU8eCgcAcD8ODx4KYBoJAP8CDRpQCh8dPw4dClAKDx1fDg0IAAT-Aw8eClAKDl8ODgpQCn4KUJrw HU8eCgcAcD8ODx4KYBoJAP8CDRpQCh8dPw4dClAKDx1fDg0IAAT-Aw8eClAKDl8ODgpQCn4KUJrw
A4sAJqUGOrAKHxMKsAoeBADwAKAaHhqQCgMOEQqQCgMPEgcAPQ4dAQYArw4KkAo_CpBa8AV9ACYQ A4sAJqUGOrAKHxMKsAoeBADwAKAaHhqQCgMOEQqQCgMPEgcAPQ4dAQYArw4KkAo_CpBa8AV9ACYQ
@ -528,118 +366,125 @@ D20HBQImAQ9tBwcBIAAPbQcKTwOQA31tBw1PA5ADjW0HCE8DkAOdbQcDAKkEGVBtBwASABJ_bQcA
CwAwlo7NBwAQrAUA8B6qE6AD-VTzAv0U8wOtE8AD7fMmTfMK8AJTrfMD8AOj8AAjPXPwJkPwIqPw CwAwlo7NBwAQrAUA8B6qE6AD-VTzAv0U8wOtE8AD7fMmTfMK8AJTrfMD8AOj8AAjPXPwJkPwIqPw
NDOGByv-ln4FKC0zhwcWMn8FHDLPBfAK8P_iKvANCgMK8AwaAwrwCEoDAArwCAoDIAgAIwU6CABQ NDOGByv-ln4FKC0zhwcWMn8FHDLPBfAK8P_iKvANCgMK8AwaAwrwCEoDAArwCAoDIAgAIwU6CABQ
CgMQAwACAGQa8AQKAAMCAB8KDgAKRAE6AAMCAPAOSsAK-xIBCsAqzirgCs4K8AEarhrwAgquCvAD CgMQAwACAGQa8AQKAAMCAB8KDgAKRAE6AAMCAPAOSsAK-xIBCsAqzirgCs4K8AEarhrwAgquCvAD
Go5VAG_OCvAFqqCVBiXg8P8AOvAMCh8TGvAIOi7BAPAiHgAuOvAFCi4AThrwAiouJD4K8AIKFA4A Go5VAGyOCvAFqqDHAGQ1LjE1ODMBAATQAFcxNC44MBcAAdoAHjPaAMAAOvAMCh8TGvAIOi7VAPAi
DgQQHgAa4DoALgAEDxQzCvAACi4AHiQNPgoAUQAuEAMkCgDgICQQFBAq8AAKHhQANCOwAKBeJBAa HgAuOvAFCi4AThrwAiouJD4K8AIKFA4ADgQQHgAa4DoALgAEDxQzCvAACi4AHiQNPgoAUQAuEAMk
8AEKfhQeSgAhLkAIANIaYBQQSuAK7xgK4ArsBAChGswa8AAKzArwAQUAfxqsGvACypDZACfwDl1K CgDgICQQFBAq8AAKHhQANCPEAKBeJBAa8AEKfhQeSgAhLkAIANIaYBQQSuAK7xgK4ArsBAChGswa
8AZaLxMK8AYKTgQeCvAGGh4TBBMq8AUKIA5DOgHwByAeBD4a8AMKLhAELgAOCvADCkMkEwCdABAw 8AAKzArwAQUAfxqsGvACypDtADvwDl1K8AZaLxMK8AYKTgQeCvAGGh4TBBMq8AUKIA5DYgHwByAe
ugBAAgoOQ7sAsAIKDgMODxQuFA4AdQEwEB0QwgDTBAogDRAUEDrwAQrGCgUAIBqmLgAQpiYAEIZh BD4a8AMKLhAELgAOCvADCkMkEwCxABAwzgBAAgoOQ88AsAIKDgMODxQuFA4AnQEwEB0Q1gDTBAog
ABCGAQIfhqABJ-1iYGAE-x4P-xUS-x4j-xUo-x4R-xU2-x4G-xU_3x7-FUZ-Hv8VSj8e-xUM8Bj_ DRAUEDrwAQrGCgUAIBqmLgAQpiYAEIZhABCGKQIfhsgBQD----NRADbwJ0BABPD-WiIfGPAmQl7w
Cg8e-gHwMP4FBT7wPD4FnhUO8EAOFZ518DZ1rvUE8Bz1BM71Qv4A9T7_BPU6-gv1MP4c9Rj_Ch3_ IEKu8BtC-gHwFjL_AiIe8BBC-gFCXvAKQv4CMq7wBUL_AkL_APABIggA8D0G4P4BQn54vtDOMk6I
Th3_Ti3_TE3_Sl0DAE9N-kw9AwAEES05AAUDACAN-k8DNP81DREABVkABTIAAmIAQW3_SH0DAPtY Xhi_wH5CTkjuGK7ATiJ_KD74Ab6w3pi_GA4YvqAeAp447kgeGM6QHgIHjggeGK44XgjugB4CB34Y
jf5Gnf5Grf5Ezf5C3f5C7f5A-QH_Pv0C-j79A-48-QX_Ov0H-jj9Cf42-Qv_NP0N-jL9D-4w-RH_ Lhh_KH4YDQDQDw8HbghOGE4ofij_AB0AYA1_CE4YHg8A8BoCgB4CHQduCF44bjj_A6AeDQcNbhhe
Lv0T-iz9Ff4q-Rj_Jv0b-iT9Hv4g-SH_Hv0k-hr9Kf4U-S7_EP00-gj9Pd79GXoBdC01LjE1ODMB GC5Y-gIHHcAeHQduyP4DBz0XwBoA8gT_FActNx3ALh0H-g8HPTcNGhcOGABwDS1HHUousBkAkQgf
AASEAVcxNC44MBcAAY4BGTOOAfAnQEAE8P9aIh8Y8CZCXvAgQq7wG0L_AfAWMv4CIh7wEEL_AUJe Dh1HLWoe0BkA8AgFbBctJw5KDvABHh0H-gA9XC0XTirwBBwA8AXOLTcsLRd_8AcuHX4HPVctJ37w
8ApC-gIyrvAFQv4CQv4A8AEiCADwPQbg-gFCfni_0M4yToheGL7AfkJOSO4YrsBOIn4oPvgBvrDe CxgAYD4HLQcbNw8AEA4PAEAHPQdbDQDxHRIeLSd7J37wFR4NR3t_8BguDScdW17wGz4HHRcrXvAf
mL4YDhi_oB4CnjjuSB4YzpAeAgeOCB4YrjheCO6AHgIHfhguGH4ofhgNANAPDwduCE4YTih_KP4A LheO8CKu8CZu8CseqQQf5CcKCRYxqAQfNLUBHTBu8Am1ATHO8AO1ASEC4LQB8iIIwP4BQv4OsM4y
HQBgDX4IThgeDwDwGgKAHgIdB24IXjhuOP4DoB4NBw1uGF4YLlj_AgcdwB4dB27I-gMHPRfAGgDy zri_kH5CfpheWL6ATiKeOG6oDhjOcO44HnheGC4Y3nAeAp54rig_tAEApwFRnihOKN4NAKMIXghu
BP4UBy03HcAuHQf_Dwc9Nw0aFw4YAHANLUcdSi6wGQCRCB8OHUctah7QGQDwCAVsFy0nDkoO8AEe GE44zhegtQGQbhgeKC5IzkegtQHwAwdeOF6I3negHgIdF46I-gKXsCEBsxf_EMfAHh0n-gunpwFC
HQf_AD1cLRdOKvAEHADwBc4tNywtF37wBy4dfgc9Vy0nfvALGABgPgctBxs3DwAQDg8AQAc9B1sN F-4Ht6gBhif_AycfDmctqwFUJ943XBeuAUY3jmdsrQFGN06nfK4BKPcBrQEWx60BF4esARlHqwEv
APEdEh4tJ3snfvAVHg1He37wGC4NJx1bXvAbPgcdFyte8B8uF47wIq7wJm7wKx6qBR-kQwMJFjFD Fy2rAV7wJtlvG-AZ-gjwEv4O8A3_FPAI-hjwBv4Mem7wBO7a-gDwA35q-g7wAv4f8AD_IeAOCv4H
Ax80tQEdMG7wCbUBMc7wA7UBIQLgtAHyIgjA-gFC-g6wzjLOuL6QfkJ_mF5YvoBOIp44bqgOGM5w ev4ACADxIABqXgr_AtAOCv4BGn4a-gPQCv4EGk4K-gbACv4GGh4K-giwCv4IGv4JsAoOCv4hBgD2
7jgeeF4YLhjecB4CnniuKD60AQCnAVGeKE4o3g0AowheCG4YTjjOF6C1AZBuGB4oLkjOR6C1AfAD CiKgHgr_EXqOoA4K-gPq-gGgDgquev4QoA4jACAgwAYAQBoHHgdlAPAHDvcC4AoOCk73A-8PB9AK
B144Xojed6AeAh0Xjoj_ApewIQGzF-4Qx8AeHSf_C6enAUIX-ge3qAGGJ-4DJx8OZy2rAVQn3jdc Dgoe-Qb3BhMAcA73Bv0I0BoQABAH5wUg9x0GAPEK-R7gCi73Gx7wAF6H-gHXLuD_IfAA-gKA-poE
F64BRjeOZ2ytAUY3Tqd8rgEo9wGtARbHrQEXh6wBGUerAS8XLasBXvAm2W8b8Bn_CPAS-g7wDf4U T----30pASbwLxc-G-ApfvAj3vAe-gPwGP4AKl7wEv4BOo7wDv4BOt7wCu5K-gPwB846-gnwBZ46
8Aj_GPAG-gx6bvAE7tr_APADfmr_DvAC-h-wAP4h4A4K-gd6-gAIAPEgAGpeCv4C0A4K-gEafhr_ -g3wBW4q-gAq7vAD-gVaJwFh8AH_AjpuCQDwAw4KziqeCv4D8AAOCu46Xgr_BAoAgf4DOh4K-gXg
A9AK-gQaTgr_BsAK-gYaHgr_CLAK-gga-gmwCg4K-iEGAPYKIqAeCv4Reo6gDgr_A_r_AaAOCq56 OAHQBuAK-hYqftAK-hFKrvsAUf4LOv4BHgHwBQZK-gXAHgr_AUr_CdAOCt46-gg3QABhrir_Bqfg
-hCgDiMAICDABgBAGgceB2UA8AcO9wLgCg4KTvcD-w8H0AoOCh79BvcGEwBwDvcG-QjQGhAAEAf8 TQFRDPcB8AAsACD3CC8Br-4A9w7gDgqu9xVQAXEjYBBAABv1PwAnLTQMCTQxLjSREB8zPwB4DucG
BiD3HQYA8Qv9HuAKLvcbHvAAXof_Adcu4P4h8AD_AoD_BCcBP---fSkBJvAvFz8b8Cl_8CPe8B7_ Dz0ACh81uwAsDz8A-3UPbxsaDzoA---------wf9YmBgBP8eD-8VEv8eI-8VKP8eEf8VNv8eBv8V
A-AY-gAqXvAS-gE6jvAO-gE63vAK7kr_A-AHzjr_CfAFnjr_DfAFbir_ACru8AP_BVonAWHwAf4C Pt8e-xVGfx7-FUo-Hv8VDPAY-goPHv4B8DD_BQU_8Dw_BZ4VDvBADhWedfA2da71BPAc9QTO9UL_
Om4JAPADDgrOKp4K-gPwAA4K7jpeCv4ECgCB-gM6Hgr_BeA4AdAG4Ar_Fip_0Ar_EUqu_wBR-gs6 APU_-gT1Ov4L9TD_HPUY-god-k4d-k4t-kxN-kpdAwBPTf5MPQMABBEtOQAFAwAhDf4pCCQ1DREA
-gEeAfAFBkr_BcAeCv4BSv4J0A4K3jr_CDdAAGGuKv4Gp_BNAVEM9wHwACwAIPcILwGv-gD3DuAO BVkABTIAAmIAQW3_SH0DAP9Yjf5Gnf5Grf5Ezf5C3f5C7f5A-QH_Pv0C-j79A-48-QX_Ov0H-jj9
Cq73FVABcSFgEEAA_wtw-xIY8Bz_MPAK-jzwAv5A8AX_NvAX-hzwaVYAJy00JAo0MS40qREfM1YA Cf42-Qv_NP0N-jL9D-4w-RH_Lv0T-iz9Ff4q-Rj_Jv0b-iT9Hv4g-SH_Hv0k-hr9Kf4U-S7_EP00
B-8F7j8d-h3wCv4FPf4TPb7wAv4uPd5gADPwBhIPHQAeAA7gXx7wM-8SBn8enxIADgIA-x3wFk0P -gj9Pd79GXoBIw75CA8-AP9VDi4DD3kAHP8LcP8SGPAc-jDwCv488AL_QPAF-jbwF-4c8GlWAC--
Hm0OLQ4dDs0OXA79BvAKjUx9Dv0CXq0OHR4dDp3wAv1A8AX9NvAX-YQAKvEPpw8e8E8OIA7wRw4g Be4-Hf4d8Ar_BT3_Ez2_8AL_Lj3eYAAz8AYSDx0AHgAO4F8e8DP-EgZ-Hp8SAA4CAP8d8BZNDx5t
DhAO8EkOcA7wKD7wEg7wKF4g-wD-Fi1e-SfwCp0_rW59cv0M8AL9ATL9BXJdUv0C8AX9InK98Bf9 Di0OHQ7NDlwO-QbwCo1MfQ79Al6tDh0eHQ6d8AL9QPAF-TbwF-2EACrxD6cPHvBPDiAO8EcOIA4Q
FlKEACkRJoQA8DUQDvBPDvBIDhAPEiAO8EgeDXAO8EMNQB0gDgANwE3wNB4dAA0gjS79DBBN8BVN DvBJDnAO8Cg_8BIO8CheIP8A-xYtXv0n8AqdPq1ufXL9DPAC-QEy-QVyXVL9AvAF-SJyvfAX-RZS
AA7NTv0X8AqdDg0ePRJdTo2SbRL9AZ0A-woi-QSSTXL9AfAFnRL9FRIeAi4SrfAX-RViowAp8Ar- hAApESaEAPA1EA7wTw7wSA4QDxIgDvBIHg1wDvBDDUAdIA4ADcBN8DQeHQANII0u-QwQTfAVTQAO
WC8e8BEW8ClO8EMPElAeBz5N8D1tbv0KjQDxGi0yHRKNTk1CLUJtHr3wCn3CXS5NMg3SHR4CDUKt zU79F-AKnQ4NHj0SXU6Nkm0S-QGdAP8KIv0Ekk1y-QHwBZ0S-RUSHgIuEq3wF-0VYqMAKfAK-1gv
8ALNgl1CbZJNIh4ilQCPIv0HQi1yPiKVAC7wSHMfHnAe8EYO8BQm8B0u8B0m8B8O8AMO8Ew_8AkW HvARFvApTvBDDxJQHgc_TfA9bW79Co0A8RotMh0SjU5NQi1CbR698Ap9wl0uTTIN0h0eAg1CrfAC
8CIeUC7wRh4wLxIODZAe8AMW8CINUA4tDg0OTfA9zQ4dIk1iXT4ATfAVog0ijQ6yDWItXiJtICLw zYJdQm2STSIeIpUAjyL9B0Itcj4ilQAu8EhzHx5wHvBGDvAUJvAdLvAdJvAfDvADDvBMPvAJFvAi
BL8A8xESLQ7yAl6CHULwAo2yLj1yDS6STQJeUr3wBZ0yXQK9csAAfz0yTVIdgm3FACmhmibwTSbw HlAu8EYeMC8SDg2QHvADFvAiDVAOLQ4NDk3wPc0OHSJNYl0_AE3wFaINIo0Osg1iLV4ibSAi8AS-
rhbwRgUC8UtAFvAqMg8S8AkO8CkNANItAFIwIg4wQtAy8BN9ok1iHQ4CHTIAHS6AIvAAElCyDiIt APMREi0O8gJegh1C8AKNsi49cg0ukk0CXlK98AWdMl0CvXLAAH89Mk1SHYJtxQApoZom8E0m8K4W
0h4iDfIDLj0QQvAB8gFOQj8TIi0SPlI_8gnwAo3yCzxiPD1yDjIdUj27AP8CEq1yLSI_Ag5SPR5N 8EYFAvFLQBbwKjIPEvAJDvApDQDSLQBSMCIOMELQMvATfaJNYh0OAh0yAB0ugCLwABJQsg4iLdIe
8Bc98gq8ACrwSPovFvBNLvCtBgXwIgaABmA-HjAG8A0y8BtCQF1gMoAFBpBCwBLwBA8SANIcXfID Ig3yAy49EELwAfIBTkI-EyItEj5SPvIJ8AKN8gs8Yjw9cg4yHVI9uwD-AhKtci0iPgIOUj0eTfAX
sFLAMvAALQzyAF1yDBIccgwyMELwAFIQoi0SDOI9EgxPEy1SK3IMYskA-x5NQjsSK_I98gjwAQwi PfIKvAAq8Ej6LxbwTS7wrQYF8CIGgAZgPx4wBvANMvAbQkBdYDKABQaQQsAS8AQPEgDSHF3yA7BS
DBIc4jtyWyJbPbJbYvAFPPIXDPIBHDIs8BcSHPIKHLLDACjzExpPHpAe8LsuAC8W8CFeoA7wAy4w wDLwAC0M8gBdcgwSHHIMMjBC8ABSEKItEgziPRIMTxMtUityDGLJAP8eTUI7EiviPfII8AEMIgwS
LfA2HhAO8EQegA4ATrDdAPQHMB4ADhAOMAZe8AcywDLQXlBCYA4AHuYA8Q9CsH6iLgIOMg5CflKw HOI7clsiWz2yW2LwBTzyFwzyARwyLPAXEhzyChyywwAo8xMaTx6QHvC7LgAvFvAhXqAO8AMuMC3w
UsCyMB4HXgJe8gMOB25iDxLoAMDijgxiPxOiK44SazLkACDibuMA8RJiKyJ_8gbwAXIbUk4iW1Jb Nh4QDvBEHoAOAE6w3QD0BzAeAA4QDjAGXvAHMsAy0F5QQmAOAB7mAPEPQrB_oi4CDjIOQn5SsFLA
Ijtegoti8AVSO-ICe-ICC1LnAB-y4wQp8Tk4BTAF8Es18EtF8Hs-HvAeFfAarjAG8AoG8AgfE5BN sjAeB14CXvIDDgduYg8S6ADA4o4MYj8ToiuOEmsy5AAg4m7jAPESYisifvIG8AFyG1JOIltSWyI7
oC4XbmAG4F6gFaAtAg2wMoAuB54gQsCOMD7AQsBCcB4HroIuAg4iXgfaAOCCLQD_A_IeB54CDTI_ XoKLYvAFUjvyAnvyAgtS5wAf8uMEKfE5OAUwBfBLNfBLRfB7Px7wHhXwGq4wBvAKBvAIHxOQTaAu
EtgA8B3CzlI9Em0C3gJtMg1i8AESLXKubRItYi0CnlJNovABch0yfgJtUl0iPV6CjdkA-wE9DvIB F25gBuBeoBWgLQINsDKALgeeIELAjjA_wELAQnAeB66CLgIOIl4H2gDggi0A-gPiHgeeAg0yPhLY
3bINQp3wF3JN8gRNOgUlD7UgGg86AP---------------------------------------------- APAdws5SPRJtAt4CbTINYvABEi1yrm0SLWItAp5STaLwAXIdMn4CbVJdIj1ego3ZAP4BPQ7yAd2y
-yTwI2CABPD-JL8U8ED_AvA8-gbwOT8V-gTwNz3_BfA1Tf4H8DNN-gjwMk3_CvAwTf4L8C9dBQD4 DUKd8BdyTfIETToFDzIHGA86AP------------8kAY4d-wAeFzbwCgcwBvALBhAG8AwFAA-wFwsG
AE3_DPAuXf4N8C1N-g3wLgUAMwzwLwUAMQsPDwcAEDwmAPAMCTzwLBxN-gg88C4cPf4HLA8X8DFN MAbwCBZQFvAFBx8ccAbwAwcvGi8cED4G8AEHbxoeTQbwAAfdBQBzHQutBvAABgcA-wgtC50G8AEG
-gULHAsMCQDwrAQMCwwLDPAzTb4tLg8ZHAsc8DNdjj0uGjzwNV1ObR4qPPA2-QFKPPA3zXos8DkK vQbwAwadBvAFFl0W8AhWwBIVJQK8Id-2MPAPBv8aMAbwDgb_BgD-LlEwnxjwAAkAUw0GUAYNDAAS
Tdoc8Dv6AwzwO5oMivA7amx68DpafHrwOVofHAxpavA4WqlaOfA0WslKOfA0SgDpKknwMyogmS8Q nQgAEGD8ARkDCgASthAAE5AYAE_gBvACCAAII2ZAEAA-UAYwCgAdUFbwA-Yw8gEfYy8CFB8yXQMn
KQpZ8DQKSEn4BPAw_BHwLmgPCvgM8CtoFygn_AfwKfgDNzgXqPAoJ-gMB7jwIgf4EieI8CH4FgeI DzoA-----------------9nwI2CABPD-JL8U8ED_AvA8-gbwOT8V-gTwNz3_BfA1Tf4H8DNN-gjw
8CD4GAd48CD4GSc48B-4IfAf_CLwHfggBxgGAPEHFxjwHPghByjwG-gl8Bv4JvAaKAn4IgYA8CMO Mk3_CvAwTf4L8C9dBQD4AE3_DPAuXf4N8C1N-g3wLgUAMwzwLwUAMQsPDwcAEDwmAPAMCTzwLBxN
CfgE8BoYCfgOGSgJ_ADwGRgJ_A8ZGAmYB1jwGAgZ_BAJKAmIB1jwGQn4ERkoCRgJWBkAVAn4Eik4 -gg88C4cPf4HLA8X8DFN-gULHAsMCQDwrAQMCwwLDPAzTb4tLg8ZHAsc8DNdjj0uGjzwNV1ObR4q
CwDxAhQZGBlYF1jwFwn4FRkIGWgHCwCBGBno8BYJ_Bk_AGQUGfgVGRgLAFAUCTgZ6AkAEBpyAIIT PPA2-QFKPPA3zXos8DkKTdoc8Dv6AwzwO5oMivA7amx68DpafHrwOVofHAxpavA4WqlaOfA0WslK
GfgaGYgXOAkARvgA8BIIABEbiACBEQn4HAmoB0gJACQZmAkAsPgB8BAZ_BspqAc4CQCmHBm4Bzjw OfA0SgDpKknwMyogmS8QKQpZ8DQKSEn4BPAw_BHwLmgPCvgM8CtoFygn_AfwKfgDNzgXqPAoJ-gM
Dwn4HQkAocgHGPAQCfgcKdhOACApyGUAMBOpuH0A8AEPSXgZqPAVGfgOGbgZiPAXQgDyAQggGPAa B7jwIgf4EieI8CH4FgeI8CD4GAd48CD4GSc48B-4IfAf_CLwHfggBxgGAPEHFxjwHPghByjwG-gl
KfgbGQjwHyn4HAkHABAZBgDwJBo5DwzwHin4GFkG8B8Z_BdpLfAdGfgUaQYJTfAcGfgReQZt8B4J 8Bv4JvAaKAn4IgYA8CMOCfgE8BoYCfgOGSgJ_ADwGRgJ_A8ZGAmYB1jwGAgZ_BAJKAmIB1jwGQn4
_A6ZbRXwHhn4CpmNJQgAUAapFm1VCQDyQgK5Fn2F8B4ZyMkGjcXwHgmYuc3V8B8JWKnd9QLwH8kG ERkoCRgJWBkAVAn4Eik4CwDxAhQZGBlYF1jwFwn4FRkIGWgHCwCBGBno8BYJ_Bk_AGQUGfgVGRgL
zfUFAAXwHpkVjfUN8B5prfUPAAXwHQ0ZvfUV8Bvd9RjwGY0FDfUc8Bkt9STwGT0FDQIAovUc8Bgt AFAUCTgZ6AkAEBpyAIITGfgaGYgXOAkARvgA8BIIABEbiACBEQn4HAmoB0gJACQZmAkAsPgB8BAZ
9SbwFy0QAEMFDfUdEgAGJACkHvAVPfUo8BQtFRIAhiDwFC31KvASJACFIvASLfUs8BASAAEUAIUQ _BspqAc4CQCmHBm4BzjwDwn4HQkAocgHGPAQCfgcKdhOACApyGUAMBOpuH0A8AEPSXgZqPAVGfgO
LfUsAAXwD14AABYAmQ8G8A899SoAFRgAA1gAiw8t9S0ABfAM7wNuLTI5LjEwFTVIMzguNyw1D49A GbgZiPAXQgDyAQggGPAaKfgbGQjwHyn4HAkHABAZBgDwJBo5DwzwHin4GFkG8B8Z_BdpLfAdGfgU
AAEEBPEt---DbxTwRe7wPD8Vfile8Dhdjile8Dc9DkluCW7wNj0OWe7wNT0OaW4KbvA0HT5p7vA0 aQYJTfAcGfgReQZt8B4J_A6ZbRXwHhn4CpmNJQgAUAapFm1VCQDyQgK5Fn2F8B4ZyMkGjcXwHgmY
DU5Z-gDwNG5JBgDwhClurxnwNN7c8DQZjvwB8DQZbvwDEB8P8DAZXvwDEBvwMRle-AILACvwMW6c uc3V8B8JWKnd9QLwH8kGzfUFAAXwHpkVjfUN8B5prfUPAAXwHQ0ZvfUV8Bvd9RjwGY0FDfUc8Bkt
2-Axbozb8DJejJsfHyvwMl58iyg78DJebEsIGygnG-AzXlwrOEsfDgcL8DReLB8XGyhLCBsfDivw 9STwGT0FDQIAovUc8Bgt9SbwFy0QAEMFDfUdEgAGJACkHvAVPfUo8BQtFRIAhiDwFC31KvASJACF
Mx57HxcYCxcPDisYW-AzDpsPFwsnHw47GEvwMx5LHxdLFx8OSwhL8DM_Ky8XuxYA8CcNTgwLFrsI IvASLfUs8BASAAEUAIUQLfUsAAXwD14AABYAmQ8G8A899SoAFRgAA1gAiw8t9S0ABfAM7wNuLTI5
W-AzPR4s6xgr8DM9DhwALKsoO-AzLQ5siyhLHxzwNYxrGFsGDxAfHPA0jADLBi8KAPJJMqyrFgU- LjEwHTlIMzguNzQ5D5ZDAAEEBPEt---DbxTwRe7wPD8Vfile8Dhdjile8Dc9DkluCW7wNj0OWe7w
EBXwMQwAfKsGG0Ql8DCc20QVFPAvrMtEJZTwJ4xFixUkRaTwJIwFNBV7JQQF9AHwInwVRCV7JfQB NT0OaW4KbvA0HT5p7vA0DU5Z-gDwNG5JBgDwhClurxnwNN7c8DQZjvwB8DQZbvwDEB8P8DAZXvwD
FfAgfAWEBWsl9AMF8CBsBZQFaxr0BfAgXAoA8UEG8B9cBZQVawoF9AbwHkwABZQVWw8MCgX0B-Ae EBvwMRle-AILACvwMW6c2-Axbozb8DJejJsfHyvwMl58iyg78DJebEsIGygnG-AzXlwrOEsfDgcL
LAAldAUEFTsTGvQH8CEVBBVkBRQFSgUapAW08B8VChQlRAUUGlQKpAXE8BwVAwpEJSQFpA4A8AYa 8DReLB8XGyhLCBsfDivwMx57HxcYCxcPDisYW-AzDpsPFwsnHw47GEvwMx5LHxdLFx8OSwhL8DM_
FQQKdCUEBbQKlAXU8BgVxCXECoQKAFAFAwrEFQwA8Ark8BYFAwr0FwX0APAVBQr0GBX0APATFfQa Ky8XuxYA8CcNTgwLFrsIW-AzPR4s6xgr8DM9DhwALKsoO-AzLQ5siyhLHxzwNYxrGFsGDxAfHPA0
CABgEgX0EgqECgDzABEF9BMKdAAF9ALwDwX0FAsAcA4F9BUKZBALABANCwARdAsAQQwF9BYhADQD jADLBi8KAPJJMqyrFgU-EBXwMQwAfKsGG0Ql8DCc20QVFPAvrMtEJZTwJ4xFixUkRaTwJIwFNBV7
8AsLAKEE8AoF9B8AFfQDCQAQEB0AMgr0IAgAUNQV9BAQGwDyAQgF5AX0CApkIBX0AvAI9AANADIl JQQF9AHwInwVRCV7JfQBFfAgfAWEBWsl9AMF8CBsBZQFaxr0BfAgXAoA8UEG8B9cBZQVawoF9Abw
9AENAIUJCkQQFRQl5A4AQQAVRAUOAGAV9AgKRAA6ATAI9AEbAB80DQACwRX0DQAF9AXwCPQDBQsA HkwABZQVWw8MCgX0B-AeLAAldAUEFTsTGvQH8CEVBBVkBRQFSgUapAW08B8VChQlRAUUGlQKpAXE
MwTwCQsAUAQq1PALDACADCAaBBq08AwMAMAICiQQCjQalPAN9AJjAKAkAApUCoTwDvQCVwAADgBA 8BwVAwpEJSQFpA4A8AYaFQQKdCUEBbQKlAXU8BgVxCXECoQKAFAFAwrEFQwA8Ark8BYFAwr0FwX0
GmTwDw4AkgoKJBVUClTwEA0AYTQFVBo0BQ4A8QQEdfQBCjQFZAokBfAR5FVkBfQADwCBFAXwEvQN APAVBQr0GBX0APATFfQaCABgEgX0EgqECgDzABEF9BMKdAAF9ALwDwX0FAsAcA4F9BUKZBALABAN
BeQNAHAEBfATBfQMHACzJAVkCgXwFAX0CxUOAMHwFQX0DBrkCiQFClQNAHALOvQCevAXaQBgFFpE CwARdAsAQQwF9BYhADQD8AsLAKEE8AoF9B8AFfQDCQAQEB0AMgr0IAgAUNQV9BAQGwDyAQgF5AX0
6-AYCgBSZBoU6xYLAIB0CgTbBivwGaUAVIQK6xYbFwBBywYrBg0AUQkKdArbDQASFyUAAA0AMQvw CApkIBX0AvAI9AANADIl9AENAIUJCkQQFRQl5A4AQQAVRAUOAGAV9AgKRAA6ATAI9AEbAB80DQAC
GAwAhGs-BTsGGwYLKQAxS2IrDwABUABEVBorgg8AUdS1WuIbDABiGgVkdfIOGADyEhtlbfIOOwYL wRX0DQAF9AXwCPQDBQsAMwTwCQsAUAQq1PALDACADCAaBBq08AwMAMAICiQQCjQalPAN9AJjAKAk
AhvwGo0CDfISKwYLQvAZLfIcC2LwGT0CDQIAEPJIBVLyJfAYLRAAgAIN8h7wFy3ySAUCEAABEgAw AApUCoTwDvQCVwAADgBAGmTwDw4AkgoKJBVUClTwEA0AYTQFVBo0BQ4A8QQEdfQBCjQFZAokBfAR
FT3ySAUUEhIAAEgFEPJIBQIQADACDfJIBRDySAUnAg0UAGUQLfIu8A9cAJ8CDfIk8A498i4oBSwP 5FVkBfQADwCBFAXwEvQNBeQNAHAEBfATBfQMHACzJAVkCgXwFAX0CxUOAMHwFQX0DBrkCiQFClQN
oAknD4gK-yAg-xT-NfEBfPQ--gEE-xU9BP4BBP08DgcAIDseBwBBLfQ3LggATwT_NQQKAP80BFIB AHALOvQCevAXaQBgFFpE6-AYCgBSZBoU6xYLAIB0CgTbBivwGaUAVIQK6xYbFwBBywYrBg0AUQkK
IfQ4YgExHfQ6cQFyDfQ9-gH0Pw8_Mf--6JQBH-2TAf92H1xiAxQfMuYJAfIrGN8W8EAuvw8e8D0u dArbDQASFyUAAA0AMQvwGAwAhGs-BTsGGwYLKQAxS2IrDwABUABEVBorgg8AUdS1WuIbDABiGgVk
7R7wOx79Ag7wOh79Ax7wOQ79Ax8RDg3wNRwezXwOHPAxHAAcDt0MDRwNXPAxTAoA9gYcDQwODPAx dfIOGADyEhtlbfIOOwYLAhvwGo0CDfISKwYLQvAZLfIcC2LwGT0CDQIAEPJIBVLyJfAYLRAAgAIN
DCAe-QEMPQwO8DYO-QgGAGAtTh1ObS4PALAFHg0O8DcOXQ79AAgAQE0e-QEhAFE9Hj0OzSoAUB5N 8h7wFy3ySAUCEAABEgAwFT3ySAUUEhIAAEgFEPJIBQIQADACDfJIBRDySAUnAg0UAGUQLfIu8A9c
Dr0eCQBQDl0OnQotAPANHh0_LQ6NCi7wOA5NTp0KDvA5Hv0EDvA6Dk0_rQcA8YAtDm0ObR7wOw4d AJ8CDfIk8A498i4oBSwPoAknD4gK-yAg-xTEGvEBfPQ--gEE-xU9BP4BBP08DgcAIDseBwBBLfQ3
Hk0eXT7wOh4dfk0eHS7wOT5Afk0e8EEezQ4NAvA-Hs0PGGLwOi6tC3Ib8DkOnRtiO-A0Cz6dC2Ib LggATwT_NQQKAP80BFIBIfQ4YgExHfQ6cQFyDfQ9-gH0P70wMf--6JQBH-2TAf92H1z2GyID5gny
DSvwMgILDR6dG1IbPQIL8DASC70bUhtdAgvwLA0LIhutC1IbfQIL8CodCzIbfStCG50CCwLwKB0L KxjfFvBALr8PHvA9Lu0e8Dse-QIO8Doe-QMe8DkO-QMfEQ4N8DUcHs18DhzwMRwAHA7dDA0cDVzw
Uis9G2ILvRsC8CcdC3JbYhvNCwsA8gDyBBvdG-AmLQvyAxvtAgsKALAL-QAb8CU9C-ICGwoA8AQC MUwKAPYGHA0MDgzwMQwgHv0BDD0MDvA2Dv0IBgBgLU4dTm0uDwCwBR4NDvA3Dl0O-QAIAEBNHv0B
CBfwED0L8gEb-QIL8AIIN-AODgDxAAv9AwvwAwg38A09C-IAGw4AQBhH8AsOAFAL-QIODR4AYAcY IQBRPR49Ds0qAFAeTQ69HgkAUA5dDp0KLQDwDR4dPi0OjQou8DgOTU6dCg7wOR79BA7wOg5NPq0H
N-AJTRIAMU0OvRMATBgHGCcTAEgAV-AIEgBhBAgQV-AHEgAjPR4SAHIgRwAvFfADFQAiDs0VADkw APGALQ5tDm0e8DsOHR5NHl0_8DoeHX5NHh0u8Dk_QH5NHvBBHs0ODQLwPx7NDxhi8DourQtyG-A5
RykTALAC8AMIMDcpDfACXZQAFS0VAHBAB0kd8AFdtwBQHR7NDhs8AEFZrSC9EQAhDt0RAEkgSf0M Dp0bYjvwNAs_nQtiGw0r8DICCw0enRtSGz0CC-AwEgu9G1IbXQIL8CwNCyIbrQtSG30CC-AqHQsy
EAAwKf0OEADSEg7dDgIL8Ar9DwvyBAwAOgv9DgwAEQULAFQMjSD9AQ0A9AoNbfAEG-IFzR4CC-AO G30rQhudAgsC8CgdC1IrPRtiC70bAvAnHQtyW2IbzQsLAPIA8gQb3RvwJi0L8gMb7QILCgCwC-0A
TfAFC-IGzQ4SC-AoCQBwHQ698gW9HgoA8AJeEE5tws0OIgvwIA0Abr1y3QsA8QwaZW4L-REeIgvw G-AlPQvyAhsKAPAEAggX8BA9C-IBG-0CC-ACCDfwDg4A8QAL-QML8AMIN-ANPQvyABsOAEAYR-AL
FhUORU4QLgv9EQ4yC-AVhZ4KAPBN8BaFTgAeEAv9EB4i8BeFbi0L-Q8eMgAL8BXVHRD9EQ5CK-AU DgBQC-0CDg0eAGAHGDfwCU0SADFNDr0TAEwYBxgnEwBIAFfwCBIAYQQIEFfwBxIAIz0eEgByIEcA
tWAL-Q0uMkvwE2UQJWALEv0JLpIr8BKFgAsy-QQ_0hvwEVWwC2LdPvICG-AQVbAL8gI_8gYr8A4L LxXwAxUAIg7NFQA5MEcpEwCwAvADCDA3KQ3wAl2UABUtFQBwQAdJHfABXbcAUB0ezQ4bPABBWa0g
ACIdGwgAQB4b8A0IACAfCwgApvIgG-AMVaDyIgsHAGCw8iEb8AskAGcgG-ALZaAIAD8L8AwIAAEA vREAIQ7dEQBJIEn9DBAAMCn9DhAA0hIO3Q4CC-AK-Q8L8gQMADoL-Q4MABEFCwBUDI0g-QENAPQK
TAAACABhHgvwD1WgbAABCAAQHIcA8ACgC-IbG-ARRcAL8hkb8BIIAEAYG-ATCABAFxvwFAgAQRUr DW3wBBvyBc0eAgvwDk3wBQvyBs0OEgvwKAkAcB0OvfIFvR4KAPACXhBObcLNDiIL8CANAG69ct0L
8BUIAD8L8BcIAA0hNdAIAG8WReAL8hQIABQjExsIAE8LEvAVCQANHxtEAABi8ADyFPAXBwAfA-IE APEMGmVuC-0RHiIL8BYVDkVOEC4L-REOMgvwFYWeCgDwTfAWhU4AHhAL-RAeIvAXhW4tC-0PHjIA
FQ-ICCcPOgD---------------dQbT01fX0= C-AV1R0Q-REOQivwFLVgC-0NLjJL8BNlECVgCxL9CS6SK-AShYALMv0EPtIb8BFVsAti3T7yAhvw
EFWwC-ICPvIGK-AOCwAiHRsIAEAeG-ANCAAgHwsIAKbyIBvwDFWg8iILBwBgsPIhG-ALJABnIBvw
C2WgCAA-C-AMCAABAEwAAAgAYR4L8A9VoGwAAQgAEByHAPAAoAvyGxvwEUXAC-IZG-ASCABAGBvw
EwgAQBcb8BQIAEEVK-AVCAA-C-AXCAANITXQCABvFkXgC-IUCAAUIxMbCABPCxLwFQkADR8bRAAA
YvAA8hTwFwcAHwPyBBUPyAgnDzoA---------------3UG09NX19
:: gfx/.info.pod :: gfx/.info.pod
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTAzLTI5IDAxOjE0OjUxIixzdG9yZWQ9IjIwMjQtMDMt b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTAzLTI5IDAxOjE0OjUxIixzdG9yZWQ9IjIwMjQtMDMt
MjkgMDE6MTQ6NTEiXV1sejQABAAAAAMAAAAwbmls MjkgMDE6MTQ6NTEiXV1sejQABAAAAAMAAAAwbmls
:: library.lua :: library.lua
--[[pod_format="raw",created="2024-04-10 00:24:20",modified="2024-04-17 14:41:47",revision=104]] --[[pod_format="raw",created="2024-04-10 00:24:20",modified="2024-04-23 03:19:45",revision=180]]
plant_descriptions = { plant_descriptions = {
[-1]={{"i don't know what that is. where did you find this?"}}, [-1]={{"i don't know what that is. where did you find this?"}},
[13]={{"these are chives. are we sure this is for alchemy?"}}, [13]={{"these are chives. are we sure this is for alchemy?"}},
[14]={{"this is foxglove"}}, [14]={{"this is foxglove"}},
} }
ingredient_descriptions = {
["reagent green"]={{"blah blah reagent green blah blah"}}
}
function get_conversation(plant) function get_conversation(plant)
local id = plant[1] local id = plant[1]
return plant_descriptions[id] or plant_descriptions[-1] return plant_descriptions[id] or plant_descriptions[-1]
@ -657,7 +502,7 @@ book_pages = {
} }
:: main.lua :: main.lua
--[[pod_format="raw",created="2024-04-02 02:59:37",modified="2024-04-17 14:41:47",revision=1056]] --[[pod_format="raw",created="2024-04-02 02:59:37",modified="2024-04-23 03:19:45",revision=1131]]
-- this is atelier hester! -- this is atelier hester!
-- except for the one line in _init that does change_screen(shop_screen) -- except for the one line in _init that does change_screen(shop_screen)
@ -751,7 +596,7 @@ CADSeT0wLHRpbGVfaD0xNgoAEHcKAIB6b29tPTF9fQ==
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTAzLTI5IDAxOjE0OjUxIixzdG9yZWQ9IjIwMjQtMDMt b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTAzLTI5IDAxOjE0OjUxIixzdG9yZWQ9IjIwMjQtMDMt
MjkgMDE6MTQ6NTEiXV1sejQABAAAAAMAAAAwbmls MjkgMDE6MTQ6NTEiXV1sejQABAAAAAMAAAAwbmls
:: s_book.lua :: s_book.lua
--[[pod_format="raw",created="2024-04-14 02:34:41",modified="2024-04-17 14:41:47",revision=92]] --[[pod_format="raw",created="2024-04-14 02:34:41",modified="2024-04-23 02:42:38",revision=126]]
BookScene = { BookScene = {
extension = 0, extension = 0,
behind = nil, behind = nil,
@ -793,11 +638,11 @@ end
function BookScene:draw() function BookScene:draw()
self.behind:draw(true) self.behind:draw(true)
if self.fairy ~= nil then self.fairy:draw() end
spr(self.background, 20, 135-self.height) spr(self.background, 20, 135-self.height)
print(wrap(self.pages[self.index],80), 36, 135-self.height+10, 20) print(wrap(self.pages[self.index],80), 36, 135-self.height+10, 20)
print(wrap(self.pages[self.index+1],80), 130, 135-self.height+10, 20) print(wrap(self.pages[self.index+1],80), 130, 135-self.height+10, 20)
if self.fairy ~= nil then self.fairy:draw() end
end end
:: s_conversation.lua :: s_conversation.lua
--[[pod_format="raw",created="2024-04-05 14:55:45",modified="2024-04-14 02:34:19",revision=129]] --[[pod_format="raw",created="2024-04-05 14:55:45",modified="2024-04-14 02:34:19",revision=129]]
@ -846,19 +691,37 @@ function Conversation:after()
change_scene(self.behind) change_scene(self.behind)
end end
:: s_drawer.lua :: s_drawer.lua
--[[pod_format="raw",created="2024-04-05 00:59:36",modified="2024-04-14 20:06:16",revision=296]] --[[pod_format="raw",created="2024-04-05 00:59:36",modified="2024-04-23 03:19:45",revision=358]]
DrawerScene = { DrawerScene = {
extension = 0, extension = 0,
behind = nil, behind = nil,
inset = 60, inset = 60,
contents = {
title = "reagent green",
small_graphic = 128,
large_graphic = 129,
},
fairy = nil,
interior_collider = {},
contents_collider = {}
} }
function DrawerScene:new(drawer) function DrawerScene:new(drawer)
c = {extension=0, behind=nil, inset=60} c = {extension=0, behind=nil, inset=60}
if drawer.size > 16 then c.inset=30 end if drawer.size > 16 then c.inset=30 end
setmetatable(c, self) setmetatable(c, self)
self.__index = self self.__index = self
c.interior_collider = {left=c.inset, top=0, right=240-c.inset, bottom=c.extension}
c.contents_collider = {
left=120-96/2,
top=10,
right=120+96/2,
bottom=10+96,
}
return c return c
end end
@ -870,20 +733,42 @@ function DrawerScene:before()
end, 0.5) end, 0.5)
}) })
self.before = function() end self.before = function() end
self.fairy = self.behind.fairy
end end
function DrawerScene:update() function DrawerScene:update()
if btnp(5) then play_script({ self.interior_collider.bottom = self.extension
if (btnp(5) or btnp(4)) and not collides(self.fairy, self.interior_collider) then
play_script({
Script.len(function(s) Script.len(function(s)
self.extension = 115*(1-easeAccelerate(s.timer/s.length)) self.extension = 115*(1-easeAccelerate(s.timer/s.length))
end, 0.5), end, 0.5),
Script.once(function(s) change_scene(self.behind) end) Script.once(function(s) change_scene(self.behind) end)
}) end })
end
if collides(self.fairy, self.contents_collider) then
if btnp(4) then
add(self.behind.tray, {self.contents.small_graphic})
end
if btnp(5) then
change_scene(Conversation:new(ingredient_descriptions[self.contents.title]))
end
end
self.fairy:update()
end end
function DrawerScene:draw() function DrawerScene:draw()
self.behind:draw() self.behind:draw()
draw_drawer(self.extension, self.inset) draw_drawer(self.extension, self.inset)
spr(self.contents.large_graphic,
self.contents_collider.left,
self.extension - 115 + self.contents_collider.top)
self.fairy:draw()
end end
function draw_drawer(distance, inset) function draw_drawer(distance, inset)
@ -905,7 +790,7 @@ function draw_drawer(distance, inset)
spr(11, 120-16, distance+10+1) spr(11, 120-16, distance+10+1)
end end
:: s_shop.lua :: s_shop.lua
--[[pod_format="raw",created="2024-04-05 14:55:27",modified="2024-04-17 14:41:47",revision=279]] --[[pod_format="raw",created="2024-04-05 14:55:27",modified="2024-04-23 03:19:45",revision=394]]
-- this manages the main shop interface, where you look at the cupboard and plantss -- this manages the main shop interface, where you look at the cupboard and plantss
-- and sstuff. -- and sstuff.
include("art.lua") include("art.lua")
@ -925,7 +810,21 @@ door_open = 0
book_1 = {left=10, right=74, top=100, bottom=164} book_1 = {left=10, right=74, top=100, bottom=164}
book_2 = {left=70, right=134, top=100, bottom=164} book_2 = {left=70, right=134, top=100, bottom=164}
shop_screen = {} shop_screen = {
fairy = Fairy:new(),
tray = {}, -- list of selected ingredients, up to 3?
tray_slots = {}
}
for i=1,3 do
shop_screen.tray_slots[i] = {
left=108+i*32,
right=108+i*32+32,
top=135-4-32,
bottom=135-4
}
end
function shop_screen:draw(hide_fairy) function shop_screen:draw(hide_fairy)
cls() cls()
@ -936,27 +835,38 @@ function shop_screen:draw(hide_fairy)
palt(30, true) palt(30, true)
palt(0, false) palt(0, false)
spr(16, 240-100, 135-49) spr(64, 240-100, 135-49)
palt(30, false) palt(30, false)
palt(0, true) palt(0, true)
spr(21+flr(2*t()%11), 240-100, 135-52) spr(72+flr(2*t()%11), 240-100, 135-52)
-- countertop! -- countertop!
draw_counter(20) draw_counter(20)
if collides(fairy, book_1) then spr(18, book_1.left, book_1.top) if collides(self.fairy, book_1) then spr(18, book_1.left, book_1.top)
else spr(17, book_1.left, book_1.top) end else spr(17, book_1.left, book_1.top) end
if collides(fairy, book_2) then spr(20, book_2.left, book_2.top) if collides(self.fairy, book_2) then spr(20, book_2.left, book_2.top)
else spr(19, book_2.left, book_2.top) end else spr(19, book_2.left, book_2.top) end
for idx, box in ipairs(self.tray_slots) do
local ingredient = self.tray[idx]
if ingredient ~= nil then
spr(ingredient[1], box.left, box.top)
end
end
if customer_visible then if customer_visible then
bob(customer_sprite, 240-96, 7, 96, 128, customer_bob) bob(customer_sprite, 240-96, 7, 96, 128, customer_bob)
end end
if not hides_fairy then fairy:draw() end if not hides_fairy then self.fairy:draw() end
draw_door(door_open) draw_door(door_open)
for idx, box in ipairs(self.tray_slots) do
if collides(self.fairy, box) then end
end
end end
function draw_counter(height) function draw_counter(height)
@ -969,26 +879,31 @@ function draw_counter(height)
end end
function shop_screen:update() function shop_screen:update()
fairy:move() self.fairy:update()
cabinet:update(fairy.x, fairy.y) cabinet:update(self.fairy.x, self.fairy.y)
if btnp(4) then if btnp(4) then
local glow = Glow:new(fairy.x, fairy.y) local drawer = cabinet:drawer_at(self.fairy.x, self.fairy.y)
glow.start_color = 7
glow.end_color = 12
add(animations, glow)
local drawer = cabinet:drawer_at(fairy.x, fairy.y)
if drawer then change_scene(DrawerScene:new(drawer)) end if drawer then change_scene(DrawerScene:new(drawer)) end
if collides(fairy, book_1) then change_scene(BookScene:new(007, book_pages[1])) end if collides(self.fairy, book_1) then change_scene(BookScene:new(007, book_pages[1])) end
if collides(fairy, book_2) then change_scene(BookScene:new(012, book_pages[2])) end if collides(self.fairy, book_2) then change_scene(BookScene:new(012, book_pages[2])) end
if cabinet.hover_plant ~= nil and #self.tray < #self.tray_slots then
add(self.tray, cabinet.hover_plant)
end
end end
if btnp(5) then if btnp(5) then
add(animations, Glow:new(fairy.x, fairy.y)) add(animations, Glow:new(self.fairy.x, self.fairy.y))
if cabinet.hover_plant ~= nil then if cabinet.hover_plant ~= nil then
change_scene(Conversation:new(get_conversation(cabinet.hover_plant))) change_scene(Conversation:new(get_conversation(cabinet.hover_plant)))
end end
for idx, box in ipairs(self.tray_slots) do
if collides(self.fairy, box) then
deli(self.tray, idx)
end
end
end end
end end
@ -1153,7 +1068,7 @@ v-gPQAANQP--sPBwCgD--2Qf-wEAl1D-----Hw==
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTAzLTI5IDAxOjE0OjUxIixzdG9yZWQ9IjIwMjQtMDMt b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTAzLTI5IDAxOjE0OjUxIixzdG9yZWQ9IjIwMjQtMDMt
MjkgMDE6MTQ6NTEiXV1sejQABAAAAAMAAAAwbmls MjkgMDE6MTQ6NTEiXV1sejQABAAAAAMAAAAwbmls
:: shop.lua :: shop.lua
--[[pod_format="raw",created="2024-03-29 01:14:51",modified="2024-04-05 14:54:05",revision=1117]] --[[pod_format="raw",created="2024-04-23 01:22:37",modified="2024-04-23 01:22:37",revision=0]]
-- this manages the main shop interface, where you look at the cupboard and plantss -- this manages the main shop interface, where you look at the cupboard and plantss
-- and sstuff. -- and sstuff.
include("art.lua") include("art.lua")
@ -1178,7 +1093,7 @@ function shop_screen.draw()
-- alchemist! -- alchemist!
bob(alchemist_sprite, 0, 7, 96, 128, alchemist_bob) bob(alchemist_sprite, 0, 7, 96, 128, alchemist_bob)
fairy:draw() spr(64, 240-96, 135-96)
-- countertop! -- countertop!
draw_counter(14) draw_counter(14)
@ -1188,6 +1103,8 @@ function shop_screen.draw()
end end
draw_door(door_open) draw_door(door_open)
fairy:draw()
end end
function draw_counter(height) function draw_counter(height)
@ -1220,4 +1137,189 @@ function draw_door(open)
palt() palt()
fillp() fillp()
end end
:: story.txt
--[[pod_format="raw",created="2024-03-30 15:58:22",modified="2024-04-11 01:41:32",revision=208]]
ATELIER HESTER
welcome to atelier phoebe 2! this is my document for
recording story ideas! please don't read this; it is
all the spoilers! if you want to know what happens
i recommend playing the game, that is the proper
way to experience this :)
--------------
main gameplay interface, you're shown a gridd of
cubbiess which contain various ingredients
you look at the things in the cubbies and label them?
labeling could be hard with just o/x
you have twwo books, one of recipes and one of
ingredients?
drag a label from the book to the drawer/plant?
--------------
plot ddetails follow!!!
main character amnesia from alchemy gone wrong.
main character badly in debt to loan shark
everyone in town has some debt and don't talk about it
most people don't like main character
mc has to mend relationships with everyone in order
to gather everyone together to defeat loan shark
player controls a fairy assistant for alchemy
possibly fairy is new to the atelier?
early dialog esstablishes it's common knowledge that
fairies can blink white (o) to confirm things or
red (x) to be uncertain / ask a question
maybe other colors at other timess but you get it,
those are our two verbs - ask about something and
suggest something
interface is an apothecary cabinet you can open
the drawerss of and ask about. you have to suggest
ingredients to mix together for the cauldron
at the beginning MC is unsure and doesn't know about
your suggestions - "i guess i can look that up?",
"maybe i'll try this?" because the player is guiding
them. towards the end MC responds as though teaching
the player fairy, like "that's right, that'll work!"
and "good job, yeah!" to communicate that the MC
is more confident and getting their mlemory of
alchemy back
the town generally ddoesn't like the alchemisst just
because she's been kindda nasty and rude at times,
just petty disagreements that have boiled over.
she's known to be a decent alchemist though i guesss
endgame is that you rally the town together to break
free of the loan shark; it's hard too convince
townsfolk both because they don't like you at first
and also because the loans ARE legitimate. but it
turnss out that the rest of the town also has debt
to the shark and if you convince everyone you can both
1. achieve independence from the supplies he sells
(maybe he's the intermediary with the trader? or buys
and ressells everything at a markup?)
2. convince people to just reject the loanss/debt;
quesstion here of whether they do this by force,
whether cops exist, idk, this is explicitly passtoral
fantasy. maybe at the end the player will muse about
whether it's good to have mob rule, "no one in toown
liked me, what if they threatened to burn down my
shop?" "yeah, that would suck. maybe we could build
something. but right now rule by mob is better than
rule by loan shark!" idk this feels overly didactic
but you get the idea
this is really getting into the weeds of how we view
the justice system but maybe he threatens to say
"i'll send for the king's knights!" and the crowd is
like "you can do that if you want, but by the time
they get here your house will be burned down.
alternately, you can keep your house and try to
be friendly. maybe even contribute to the town. it's
up to you. burn down your storehouse or genuinely
connect with people?"
definitely overly preachy but i like that
------------------
script!!!!!!!!!!!!
------------------
title screen
new game or load?
new game ->
hester with her back to cauldrron holding a little fairy doll in pieces
fairy shakes and then comes to life
hester: "ahhh, the synthesis wworked! ... i think"
hester: "a fairy like you should be a good help around the shop."
hester: "you might noot be able to speak but you can flash white for yes and red for not sure"
the whole time there's more and more bubbling in the cauldron
hester: "you can be my hands across the atelier!"
explosion!
soot-covered hester stands up
"what just happened."
"wait a second. who am i."
"alchemy books? a cauldron?"
outside view of shop, Atelier Hester on the sign
"Hester..."
back inside
"i must be an alchemist..."
loan shark arrives
"hester! you got the latest payment for me, girlie?"
"i'm afraid i don't knwo who i am - can you help me?"
"nice try. remember you owe me 4000Z by the end of the month. have a nice day!!!"
loan shark leaves
(SAVE POINT)
"am i... in debt?"
"i don't know hwo to do alchemy... but maybe these books..."
(player opens books)
"it looks like this one has recipes... this one has infoormation about ingredients... my head..."
(when quit uot of both books, old man comes in)
"hey, hester. can i get that purified water?"
"i don't knwo who i am"
"sorry, i can't hear so good these days - purified water? my usual order?"
(moves on when you've crafted purified water)
"thank you, hester. this will help me out. here's your payment."
(old man leaves)
"i guess i'll just try to... be an alchemist and pay off my debts..."
(SAVE POINT)
at the beginning MC is unsure and doesn't know about
your suggestions - "i guess i can look that up?",
"maybe i'll try this?" because the player is guiding
them. towards the end MC responds as though teaching
the player fairy, like "that's right, that'll work!"
and "good job, yeah!" to communicate that the MC
is more confident and getting their mlemory of
alchemy back
the town generally ddoesn't like the alchemisst just
because she's been kindda nasty and rude at times,
just petty disagreements that have boiled over.
she's known to be a decent alchemist though i guesss
endgame is that you rally the town together to break
free of the loan shark; it's hard too convince
townsfolk both because they don't like you at first
and also because the loans ARE legitimate. but it
turnss out that the rest of the town also has debt
to the shark and if you convince everyone you can both
1. achieve independence from the supplies he sells
(maybe he's the intermediary with the trader? or buys
and ressells everything at a markup?)
2. convince people to just reject the loanss/debt;
quesstion here of whether they do this by force,
whether cops exist, idk, this is explicitly passtoral
fantasy. maybe at the end the player will muse about
whether it's good to have mob rule, "no one in toown
liked me, what if they threatened to burn down my
shop?" "yeah, that would suck. maybe we could build
something. but right now rule by mob is better than
rule by loan shark!" idk this feels overly didactic
but you get the idea
this is really getting into the weeds of how we view
the justice system but maybe he threatens to say
"i'll send for the king's knights!" and the crowd is
like "you can do that if you want, but by the time
they get here your house will be burned down.
alternately, you can keep your house and try to
be friendly. maybe even contribute to the town. it's
up to you. burn down your storehouse or genuinely
connect with people?"
definitely overly preachy but i like that
:: .info.pod
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTIzIDAxOjEzOjI4IixydW50aW1lPTUsc3RvcmVk
PSIyMDI0LTA0LTIzIDAzOjE5OjQ1Iix3b3Jrc3BhY2VzPXt7bG9jYXRpb249Im1haW4ubHVhIzUy
Iix3b3Jrc3BhY2VfaW5kZXg9MX0se2xvY2F0aW9uPSJsaWJyYXJ5Lmx1YSM2Iix3b3Jrc3BhY2Vf
aW5kZXg9MX0se2xvY2F0aW9uPSJzX3Nob3AubHVhIzMwIix3b3Jrc3BhY2VfaW5kZXg9MX0se2xv
Y2F0aW9uPSJzX2RyYXdlci5sdWEjNjQiLHdvcmtzcGFjZV9pbmRleD0xfSx7bG9jYXRpb249Imdm
eC8wLmdmeCIsd29ya3NwYWNlX2luZGV4PTJ9fV1dbHo0AAQAAAADAAAAMG5pbA==
:: [eoc] :: [eoc]

Loading…
Cancel
Save