initial commit with finisshed game
This commit is contained in:
commit
25240b53e4
101
art.lua
Normal file
101
art.lua
Normal file
@ -0,0 +1,101 @@
|
||||
paper_color = 15
|
||||
highlight_text_color = 0
|
||||
base_text_color = 5
|
||||
blank_ingredient_outline_color = 6
|
||||
light_text_color = 7
|
||||
|
||||
phoebe_portrait = 72
|
||||
lenore_portrait = 76
|
||||
seller_portrait = 136
|
||||
neighbor_portrait = 140
|
||||
witch_portrait = 200
|
||||
librarian_portrait = 204
|
||||
door_portrait = 196
|
||||
|
||||
toast_str=""
|
||||
toast_timer=0
|
||||
|
||||
function toast(text)
|
||||
toast_str = text
|
||||
toast_timer = 4
|
||||
end
|
||||
|
||||
function draw_workbench()
|
||||
-- workbench surface
|
||||
rectfill(0,0,140,140, 4)
|
||||
-- seams on the workbench
|
||||
for i=1,20 do
|
||||
line(0, i*16, 140, i*16-50, 5)
|
||||
end
|
||||
end
|
||||
|
||||
function draw_background()
|
||||
draw_workbench()
|
||||
|
||||
-- watch
|
||||
pal(1,0) -- replace one color with black for the hands
|
||||
spr(64, -2,0, 4,4)
|
||||
pal()
|
||||
|
||||
-- pen
|
||||
spr(68, 4, 90, 4,4)
|
||||
end
|
||||
|
||||
function draw_paper(x,y,w,h)
|
||||
draw_paper_with_color(x,y,w,h,paper_color)
|
||||
end
|
||||
|
||||
function draw_paper_with_color(x,y, w, h, color)
|
||||
-- paper
|
||||
rectfill(x,y, x+w,y+h, color)
|
||||
-- ragged borders
|
||||
sspr(72,0, 2,8, x-1,y, 2,h+1) -- west
|
||||
sspr(72,0, 8,2, x,y-1, w+1,2) -- north
|
||||
sspr(72,0, 2,8, x+w,y, 2,h+1) -- east
|
||||
sspr(72,0, 8,2, x,y+h, w+1,2) -- south
|
||||
end
|
||||
|
||||
function draw_recipe_on_paper(recipe, x, y)
|
||||
color(highlight_text_color)
|
||||
print(recipe.title, x+2, y+2)
|
||||
|
||||
|
||||
-- description
|
||||
color(base_text_color)
|
||||
print(library.item_blueprints[recipe.result].description, x+44, y+12)
|
||||
|
||||
for i=1,3 do
|
||||
rect(x+42, y+2+26*i, x+93, y+26*i+24, blank_ingredient_outline_color)
|
||||
end
|
||||
|
||||
-- list of selected active traits
|
||||
color(highlight_text_color)
|
||||
print("traits:", x+2, y+78)
|
||||
end
|
||||
|
||||
function decorate_recipe_unfinished(recipe, x, y)
|
||||
color(blank_ingredient_outline_color)
|
||||
for i, ing in ipairs(recipe.ingredients) do
|
||||
print(ing, x+46, y+2+26*i+9)
|
||||
end
|
||||
end
|
||||
|
||||
function draw_ingredient_listing(ing, x, y)
|
||||
color(highlight_text_color)
|
||||
print(ing.title,x+4,y+4)
|
||||
|
||||
print_quality(ing.quality, x+54, y+14)
|
||||
|
||||
color(base_text_color)
|
||||
for i, trait in ipairs(ing.traits) do
|
||||
print(library.traits[trait][1], x+6, 5+y+i*6)
|
||||
end
|
||||
end
|
||||
|
||||
function print_quality(quality, x, y)
|
||||
the_str = tostring(quality)
|
||||
color(highlight_text_color)
|
||||
print(the_str, x - 5*(#the_str), y)
|
||||
color()
|
||||
spr(1, x - 5*(#the_str)-8, y-2)
|
||||
end
|
1128
ateli8.html
Normal file
1128
ateli8.html
Normal file
File diff suppressed because one or more lines are too long
365
ateli8.p8
Normal file
365
ateli8.p8
Normal file
@ -0,0 +1,365 @@
|
||||
pico-8 cartridge // http://www.pico-8.com
|
||||
version 41
|
||||
__lua__
|
||||
#include utils.lua
|
||||
#include library.lua
|
||||
|
||||
#include script_lenore.lua
|
||||
#include script_library.lua
|
||||
#include script_charcoal_seller.lua
|
||||
#include script_neighbor.lua
|
||||
#include script_witch.lua
|
||||
|
||||
#include art.lua
|
||||
|
||||
#include conversation.lua
|
||||
#include screen_inventory.lua
|
||||
#include screen_letters.lua
|
||||
#include screen_workbench.lua
|
||||
#include screen_recipe_list.lua
|
||||
#include screen_walkaround.lua
|
||||
#include screen_crafting.lua
|
||||
#include screen_title.lua
|
||||
|
||||
current_screen = nil
|
||||
animations = {}
|
||||
change_screen(screen_title)
|
||||
function _update()
|
||||
|
||||
for animation in all(animations) do
|
||||
animation.timer += 1/30.
|
||||
animation.update(animation)
|
||||
end
|
||||
|
||||
animations = filter_list(animations, function(anim) return anim.active end)
|
||||
|
||||
current_screen.update()
|
||||
end
|
||||
|
||||
function _draw()
|
||||
if conversation_active then
|
||||
prev_screen.draw()
|
||||
else
|
||||
current_screen.draw()
|
||||
end
|
||||
|
||||
for animation in all(animations) do
|
||||
animation.draw(animation)
|
||||
end
|
||||
|
||||
if conversation_active then
|
||||
current_screen.draw()
|
||||
end
|
||||
|
||||
if toast_str ~= "" and toast_timer > 0 then
|
||||
rectfill(0,120,128,128,5)
|
||||
print(toast_str, 1, 121, 0)
|
||||
toast_timer -= 1/30.
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
-- ❎ 🅾️ are the buttons
|
||||
__gfx__
|
||||
0000000000000000055555550000000005555555000000000000000990000000000000009090909033333b330000000011111000000011113333333333333333
|
||||
0000000000000000560606065000000000000000000000000000009aa9000000000000000909090933333b3300000000b11110000000011b3333b33333333b33
|
||||
007007000000000050606060500000000000000000000000000009aaaa90000000000a00909090901111111100000000b11100000000111b3333b33333333b33
|
||||
00077000000555505606060650000000000000000dddddd000009aaaaaa900000000a9a00909090910111101111010103111000000001111333333333b333333
|
||||
000770000005005050606060500000000000000000d00d0000009aaaaaa900000000a9a0909090900000000011111111111100000000011b333333333b333333
|
||||
0070070000050550560606065000000000000000000dd000000009aaaa90000000000a00090909090000000011111111b11110000000111b333b3333333333b3
|
||||
0000000000055550506060605000000000000000000000000000009aa900000000000000909090900000000011b33311b111100000000113333b3333333333b3
|
||||
00000000000000055606060650000000000000000000000000000009900000000000000009090909000000003333333331110000000001133333333333333333
|
||||
0000000000000000000000000000000054555545000999990099990033333333333333333333333300000113000000003111000000000000000000000001116c
|
||||
00000000000000000000000000000000545555450009444409999990333333333f33fff333333333000011130000000031111000000000000b00b00b6711176c
|
||||
0088888000ccccc000bbbbb00022222054555545009444449999aa993333ffffffffffffffff11330000011100000000111000000000000000b0b0b066616667
|
||||
0088888000ccccc000bbbbb000222220545555450094444499999a991111ffffffffffffffff111100000111010000001100000000000101b0b0b0b016676661
|
||||
0088888000ccccc000bbbbb000222220545555450944444499999999111ffffccffccffcfffff11100000011110000000010000000001011b0b0b0b016676633
|
||||
0088888000ccccc000bbbbb000222220545555450944444499999999ffffffcccccccccccfffffff00000000111100000000000000000111b0b0b0b033663333
|
||||
0088888000ccccc000bbbbb0002222205455554594444444099999900fffcccccccccccccccffff00000000011100000000000000001111100b000b033333333
|
||||
0000000000000000000000000000000054555545999999990099990000fccccccccccccccccccf00000000003111000000000000000011130000000033333333
|
||||
000000000066660000000000000700000066660005555550000000000000000000000000055555500000000000000000009999a000000b000000000000000000
|
||||
00000000000660000000000000007000066886605cccccc5670006c00009c000000000005555555500000000000000000999999a00000b000000000000000000
|
||||
00000000000660000003033000555500068668605555555566606670009cc8000000000088888844000000000000000099999999a00000000000000000000000
|
||||
00066000006cc6000303b0000555655006666860544444450667660009ccccc00000000088448888000000000000000099999999a22222220009900000000000
|
||||
00d6660006cc7760030b3300055555500068866005444450066670000cc9ccc000000000888888880008800000dddd0056666666222222220009900000000110
|
||||
7d66666706cccc6003b00000055555500066660005444450006600000099cb0000000000448dd888008888000dddddd0566dd6665555555500999a0000011110
|
||||
07766770006cc6000b333000005555000068600005444450006600000009900000000000888dd44808888880dddddddd566dd66666666665099999a001111111
|
||||
007770000006600000000000000000000066600000555500000000000000000000000000888dd88888888888dddddddd566dd666666666659999999a11111111
|
||||
00044800000448000444444004444440004444000044440000000000555555555555555554444445566444455446648500228800024244907777777750000006
|
||||
00448800004488000488ff400488ff400444444004444440000000005444444444444444544664455664444554466445022288802442449077b7766755066066
|
||||
044f7f00044f7f0004f7f74004f7f7400244a4400244a4400000000054c4c4c4c4c4c4c454466445544446655444444522200888555555557bbb766755556666
|
||||
04ffff0004ffff0000ffff0000ffff0000244400002444000000000054c4c4c4c4c4c4c4544444455484466558448445400000042424444977b7777755566666
|
||||
0082200000822000008228000082280000822800008228000000000054444444499999445444444558444445544444454dddddd4242444497777777755556666
|
||||
0802200008022000080220800802208008022080080220800000000054c4c4c4c9ddd9c45dd46465544dd44554866445dccc111d5555555576677dd7555dd666
|
||||
0002020000022000000202000002200000020200000220000000000054c4c4c4c9ddd9c45dd46465544dd44558466445dddddddd2442449076677dd7555dd666
|
||||
002002000002200000200200000220000020020000022000000000005444444449ddd9445dd44445544dd445544444455dddddd50242449077777dd7055dd660
|
||||
00000000000000000000000000000900000666000000000000000000000000006666666666666664444444666666666622222222222222222222222222222222
|
||||
00000000000000000000000000000009000666000000000000000000000000006666666666665444444555444466666622222222222211511551122222222222
|
||||
00000000000000000000000000000000000666600000000000000000000000006666666666544444445aaa544446666622222222225111111111111222222222
|
||||
00000000000000544444400000009090000666700000000000000000000000006666666665444444445a6a544456666622222222111111111151111122222222
|
||||
00000000000549999999944400990000000566760000000000000000000000006666666544444444445aaa544446666622222215111115555111151151111112
|
||||
00000000044999777777999994999000000066670000000000000000000000006666666444444444444555444556666622222211111511111111111151111111
|
||||
0000000049997777757777779999000000005667600000000000000000000000666666544444a4444444444455a66666222229fff11111111111111151111111
|
||||
0000000499977777757777777799000000000666600000000000000000000000666664444444a4444888888888a6666622222ffffff111555515551151111111
|
||||
0000004997777577757777577779400000000566760000000000000000000000666654444454a448888888888866666622229fffffff11111111111121111111
|
||||
0000059977777757757775777779940000000066760000000000000000000000666644444544448888488f888486666622229fffffffff111111511121111111
|
||||
000059977577777777777777777799400000005667600000000000000000000066654444544448888488fff888486666222211fff111fff11555111121111111
|
||||
000049977757777777777777775779400000000667600000000000000000000066644445444488899998ff999984666622229ffffffffff11111115111111111
|
||||
00049977777777777777777775777994000000056111000000000000000000006665444544488898888fffffff986666222229fff999ffff1111151111111111
|
||||
000599777777777777777777777777940000000011c1000000000000000000006644445444488888887ff9777ff6666622222179f7177ffff111511122111111
|
||||
0004997777777777777777777777779400000000511c100000000000000000006654445444848848717ff9717ff6666622222179f7177fffff11111522211112
|
||||
0005997555577777777777777555579400000000511c10000000000000000000664444544848848f717ff9717f66666622222f9ffffffffffff9911122211112
|
||||
0005997777777771115777777777779400000000051111000000000000000000665444a4488848ff777ff9777f66666622222f9fffffffffffff911122211112
|
||||
00059977777777177111777777777794000000000511c1000000000000000000665544a448888fffffffff9fff666666222229fff9fffffff9ff9f5222221112
|
||||
000599777777771717171177777777940000000000511c100000000000000000665555a5489f9fffff9fff9fff666666222229fff9fffffff9a9f91222221112
|
||||
000599777577771177177711757779950000000000511c1000000000000000006666688559f9fffffff999ffff66666622222299ffffffffffaf9f1222222112
|
||||
0005497757777111117777777757794000000000000511c00000000000000000666668282f9f9fffffffffffff666666222222fffffffffffff9f92222222212
|
||||
0005499777711117777777777777995000000000000511c100000000000000006666688288f9f9fffefffffef66666662222222feeeeefffff9f9f2222222222
|
||||
000054997777117775777577777994000000000000001111000000000000000066666828266f9fffffeeeeeff66666662222222ffffffffffff9f22222222222
|
||||
00000549977151777577775777994000000000000000111c0000000000000000666682828666f9ffffffffff6666666622222222ffffffffff99922222222222
|
||||
00000054991777777577777799945000000000000000011110000000000000006666882866669f9ffffffff6666666662222222229999999999f227672222222
|
||||
0000000549977777757777799945000000000000000001111000000000000000666882866666ff9999992866666666662226766677777999ffffff7766766222
|
||||
000000005449999777779999445000000000000000000011c10000000000000066682826666fffffffff286666666666226767775655fffffff5577767677672
|
||||
000000000554449999999444550000000000000000000011110000000000000066688286666fffffffff886dd2666666267767755655ffffff55677767777776
|
||||
00000000000555444444455500000000000000000000000119000000000000002222222222ddddfffff9dd2222226666267677755565fffff556777767777777
|
||||
000000000000005555555000000000000000000000000000199000000000000021122222222222dddddd2222222112662776775555655fff5565777677777767
|
||||
0000000000000000000000000000000000000000000000000900000000000000211222222222222ddddd22222221122267677755556655f55655777677777776
|
||||
0000000000000000000000000000000000000000000000000200000000000000222222222211122ddddd22211222222277677755555655556557777677777777
|
||||
000000000ccc09999990ccc000000000000000000000000000000009000000005555555555550005500055555555555511111111111113331111111111111111
|
||||
0000000cc99909000090999cc0000000000000000000000000000090900000005555555550000000005000005555555511111133113333333333333311111111
|
||||
000000c990000090090000099c000000009990000000000000000900090000005555555550500000005555000555555511133333333333333333333333311111
|
||||
00000c9000cc00900900cc0009c00000009900000009990000009009009000005555555550000000000000500005555511133333333333333333333333331111
|
||||
0000c900cc990009900099cc009c0000009090900000990000009009009000005555555550004040400000500005555511133333333333333333333333333111
|
||||
000c900c9900000990000099c009c00000000900000909000000900900900000555555555000444044004050005555551113b333333333333333333333333111
|
||||
00c900c900000000000000009c009c000000909999900000000009900090000055555555504444444400405000055555111bb33b33333333b333333333333311
|
||||
0c900c90000000000000000009c009c000000090009000000000090009000000555555555500444004004000000055551111b333f3b33333b333333333333331
|
||||
0c90c9000000000000000000009c09c0000000900090000000009000990000005555555555444444444444000505555511113f33f33b3333b333333333333331
|
||||
c900c9000000000000000000009c009c000000900090000000009009009000005555555555076440744444040005555511113ff3ff33f333f333333333333331
|
||||
c90c900000000000000000000009c09c000000099900000000009009009000005555555555076440744444040005555511111ffffff3ff33f333333333333311
|
||||
90c9000000000000000000000009c09c000000009000000000009009009000005555555555446444444444440005555511111ffffffffff3f333333333333311
|
||||
00000000000000000000000000000000000000009000000000000900090000005555555555464444444444640555555511111333ff3333ffff33333333333311
|
||||
00009900000000000000000000990000000000099900000000000090900000005555555555564a444444466a5555555511111ffffffffffffff3333333333331
|
||||
00990900000000000000000000909900000000009000000000000009000000005555555555566664444464655555555511111777fff777fffff3333333333331
|
||||
99000900000000000000000000909099000000000000000000000000000000005555555555544444444446655555555511111007dff007fffff33333b333b331
|
||||
9900090000000000000000000090909900000000000000000000000000000000555555555554ddd4444464655555555511111fffdffffffffff33333b333b331
|
||||
0099090000000000000000000090990000000000000000000000000000000000555555555555444d444446455555555511111ffdffffffffeff33b33b333b331
|
||||
00009900000000000000000000990000000000999999000000000900090000005555555555554444444644655555555511111efdfffffffeffe33b33d3333331
|
||||
00000000000000000000000000000000000009000009000000009000009000005555555555555444466444455555555511111fdfffdfffeffef33b33f3333331
|
||||
c90c900000000000000000000009c09c00009099999900000000900000900000555555555555555544444465555555551111ffdffffdfffffff33333d3333331
|
||||
c90c900000000000000000000009c09c00090090000900000000099999000000555555555555555544444445555555551111ffddddfffffffff3333df3333311
|
||||
c900c9000000000000000000009c009c00090099999900000000900000900000555555555555555544444465555555551111ffffffffffffff33f33fdfd33311
|
||||
0c90c9000000000000000000009c09c00009000000090000000090000090000055555555ccccddd44444464cccdddd551111fffefffffefffffffffdfdf33111
|
||||
0c900c90000000000000000009c009c0000900000009000000009000009000005555555cccccccc4444ccaaacccccdd51111ffffeeeeefffffffffdfdf111111
|
||||
00c900c900000000000000009c009c0000090000000900000000099999000000555555ccccccccca44aaaacccccccccd11111ffffffffffffffffdfdfd111111
|
||||
000c900c9900000990000099c009c0000009000000090000000000090000000055555cccccccccccaaaccccccccccccd11111fffffffffffffffdfdfdff11111
|
||||
0000c900cc990009900099cc009c00000009099999090000000000090000000055555ccccdccccccaccccccccccccccc111111fffffffffffffdfdddfff11111
|
||||
00000c9000cc00900900cc0009c00000000909000909000000000099900000005555ccccdacccccaacccccaccdcccccc1111111fffffffffdfddddfffff11111
|
||||
000000c990000099990000099c000000000909000909000000000009000000005555cccdacaccccacccccacacdcccccc111111111dddddddddddffffffff1111
|
||||
0000000cc99909000090999cc000000000099900099900000000000000000000555cccdaccaccccaccccaccacddccccc1111111111111fffffffffffffff1111
|
||||
000000000ccc09999990ccc00000000000000000000000000000000000000000555cccdccccccccccccccccccddccccc1111111111111ffffffffffffffff111
|
||||
00000000000000000000000000000000000000005555555555555555500000002222222221111211111111112222222233333333333000000050003003333333
|
||||
00000000009999999999990000000000888888855555555555555555558888882222222112111110000000011122222233333330000000500000000003333333
|
||||
00000009999000000099099900000000000055555555444444555555555000002222111111110000022200000112222233333330000000000000000000033333
|
||||
00000099000000000990000990000000000555555554844444844455555500002211111110000000000020000011221133333000050000000500005000003333
|
||||
00000990000000009900000099000000888555555544844444844445555588881211111000000000000000000001111133333500000000000000000000050333
|
||||
00009900000000009000000009000000005555544444844444844444555550001111110000000200000000000000011133330005000000000000000000003333
|
||||
0000900999000009000000000900000905555548444484444484444445555000111112000f000020000200000000002133330000000000000000000000000333
|
||||
000090000900000900000000090000098555554844448499998844444555558811111200fff00002000020000000002233333000000000000000000000500333
|
||||
00009000090000900000000009000090055554484444994444994444445555002111120ffffff000000002000000000233330000000005000000000000003333
|
||||
00009000990009900000000009000090055544484444944444894444845555002211120ffffffff0000000000020000033330000000000000000000000000333
|
||||
000099999000090000000000990009900555444844498444448494448445555012111203fff333ff000000000002000033333304444400444444500000500333
|
||||
00000000000099000000000990000900555544484449844444849444844555502121112ffffffffff00000000002000033333334666444446664400000003333
|
||||
000000000000900000000990000099005555444844498444448494448444555521221123fff333ffff0000000000000033333334074444440744450000000333
|
||||
00000000000900000099990000009000555544484449844444849444844455552111112173f7177ffff000020000000033333334074444440744450000005333
|
||||
00000000000999999990000000009000555444484444944444894444844455552212112173fffff3ff3f00002002000033333334444466444444450000503333
|
||||
00000000009000000000000000099000555444484444994444994444844445552222112f3ffffffffff3f0002002000033333334444644444444556400033333
|
||||
000000000990000000000000000900995555444844448499998444448444455511211123ffffffffffff30000002000033333334444644444444556440033333
|
||||
000000000900000000000000009999995555444844448444448444448444455511111123fff3fffffffff0000000000033333334444644444444556460333333
|
||||
000000009900000000000000009090005555444844448444448444448444455521111123fff3ffffffff30000000000033333334444644464444554660333333
|
||||
00000000900000000000000000990000555444484444844444844444844445552222211233fffffffffff3000000020033333334444666644444556466333333
|
||||
000000099000000000000000099000005554444844448444448444448444455522222112ffffffffffffff000000020033333334444444444444444646333333
|
||||
000000090000000000000000099000005554444844448444448444448444455511111122ffeeeff3fffff300200002003333333344444444e444446463333333
|
||||
000000990000000000000000090000005554448844448444448444448444455511111122fefffef3ffffff400200000033333333444eeeee4444464633333333
|
||||
0000099000000000000000009900000055544484444484444484444484444555111121223ffffff3fffff4400022000033333333344444444444646633333333
|
||||
00000900000000000000000090000000555444844444844444844444484445552211221213333fff333333330000000033333333334444444446666463333333
|
||||
00000900000000000000000090000000555444844444844444844444aaa4455522122999999993334443f3339999999033333333333366666666444663333333
|
||||
0000090000000000000000009000000055544484444484444484444aaaaa455522299999999995ffff3f45599999999933333333333334444444446466333333
|
||||
0000099000000000000000000000000055544484444484444484444aaaaa455522999999999995fffff459999999999933333333333334444444444646333333
|
||||
0000009900000000000000000000000055544484444484444484444aaaaa455529999999999995ffff45599999999999333d11111111144444444464111d3333
|
||||
00000000999000000000000000000000555444844444844444844444aaa445559999999999999954f455999999999999dd111111111111444441111111111ddd
|
||||
00000000009999999999999999999999555444844444844444844444484445559999999999999955455999999999999911111111111111111111111111111111
|
||||
0000000000000000000000000000000055544484444484444484444448444555999999999999995555999999999999991d111d111d111d11d11d111d11d11111
|
||||
__label__
|
||||
44444444444444444444444444494444444444444444555444444444444444444444444444444444444444444554444444444444444444444444444444444444
|
||||
44444444444444444444444444444944444444444555444444444444444444444444444444444444444444555444444444444444444444444444444444444444
|
||||
44444444444444444444444444444444444444555444444444444444444444444444444444444444444555444444444444444444444444444444444444444444
|
||||
44444444444454444444444444949444444555444444444444444444444444444444444444444444555444444444444444444444444444444444444444444555
|
||||
44444444454999999994444499444444455444444444444444444444444444444444444444444555444444444444444444444444444444444444444444555444
|
||||
44444444499977777799999499944455544444444444444444444444444444444444444444455444444444444444444444444444444444444444444555444444
|
||||
44444449997777757777779999455544444444444444444444444444444444444444444455544444444444444444444444444444444444444444455444444444
|
||||
44444499977777757777777799544499999999999999999944444444444444444999999999999999999444444444444444444999999999999999994444444444
|
||||
444449977775777577775777794449ffffffffffffffffff99999999999999999ffffffffffffffffff999999999999999999fffffffffffffffff9999999999
|
||||
444599777777577577757777799449ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
445997757777777777777777779949ff0f0f000f000f0fff000f00fff00ffffff00f000f000f000f0f0fffffffffffffffffffffffffffffffffffffffffffff
|
||||
444997775777777777777777577949ff0f0f0fff0f0f0ffff0ff0f0f0fffffff0fff0f0f0f0f0f0f0f0fffffffffffffffffffffffffffffffffffffffffffff
|
||||
449977777777777777777775777999ff000f00ff000f0ffff0ff0f0f0fffffff000f000f00ff000f000fffffffffffffffffffffffffffffffffffffffffffff
|
||||
459977777777777777777777777799ff0f0f0fff0f0f0ffff0ff0f0f0f0fffffff0f0fff0f0f0f0fff0fffffffffffffffffffffffffffffffffffffffffffff
|
||||
449977777777777777777777777799ff0f0f000f0f0f000f000f0f0f000fffff00ff0fff0f0f0f0f000fffffffffffffffffffffffffffffffffffffffffffff
|
||||
459975555777777777777775555799ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
559977777777700057777777777799ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
459977777777077000777777777799ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
459977777777070707007777777799ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
459977757777007707770075777999ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
454977577770000077777777577949fff5ff5f5f555f5fff555f555f5f5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
454997777000077777777777779959ff5f5f5f5f5f5f5ffff5fff5ff5f5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
445499777700777577757777799459ff5f5f5f5f555f5ffff5fff5ff555fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
444549977050777577775777994449ff55ff5f5f5f5f5ffff5fff5ffff5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
444454990777777577777799945449fff55ff55f5f5f555f555ff5ff555fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
444445499777777577777999454449ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
4444445449999777779999445444449ffffffffffffffffffffffffffff00ff000f000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
4444444554449999999444554444449fffffffffffffffffffffff5555ff0ff0fff0f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
4444444445554444444555444444449fffffffffffffffffffffff5ff5ff0ff000f000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
4444444555445555555444444444449fffffffffffffffffffffff5f55ff0ffff0f0f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
4444455444444444444444444444449fffffffffffffffffffffff5555f000f000f000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
4455544444444444444444444444449fffffffffffffffffffffffffff5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
5544444444444444444444444444449fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
4444444444444444444444444444449fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
44444444444444455555554555555595555555f5555555f5555555f5555555ffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaff
|
||||
44444444444444564646465646464656f6f6f656f6f6f656f6f6f656f6f6f65fffffffaffffffffffffffffffffffffffffffffffffffffffffffffffffffaff
|
||||
4444444444444454646464546464645f6f6f6f5f6f6f6f5f6f6f6f5f6f6f6f5fffffffaf6666666666666666666666666666666666666666666666666666faff
|
||||
44444444444444564646465646464656f6f6f656f6f6f656f6f6f656f6f6f65fffffffaf6ffffffffffffffffffffffffffffffffffffffffffffffffff6faff
|
||||
4444444444444454646464546465655f6f6f6f5f6f6f6f5f6f6f6f5f6f6f6f5fffffffaf6ffffffffffffffffffffffffffffffffffffffffffffffffff6faff
|
||||
44444444444444564646465656564656f6f6f656f6f6f656f6f6f656f6f6f65fffffffaf6ffffffffffffffffffffffffffffffffffffffffffffffffff6faff
|
||||
4444444444444454646465556464645f6f6f6f5f6f6f6f5f6f6f6f5f6f6f6f5fffffffaf6ffffffffffffffffffffffffffffffffffffffffffffffffff6faff
|
||||
44444444444444564646565646464656f6f6f656f6f6f656f6f6f656f6f6f65fffffffaf6ffffffffffffffffffffffffffffffffffffffffffffffffff6faff
|
||||
44444444444444455555554555555595555555f5555555f5555555f5555555ffffffffaf6ffffffffffffffffffffffffffffffffffffffffffffffffff6faff
|
||||
44444444444445564646465646464656f6f6f656f6f6f656f6f6f656f6f6f65fffffffaf6ffffffffffffffffffffffffffffffffffffffffffffffffff6faff
|
||||
4444444444555454646464546464695f6f6f6f5f6f6f6f5f6f6f6f5f6f6f6f5ffffff9af6ffffffffffffffffffffffffffffffffffffffffffffffffff6fa9f
|
||||
44444445554444564646465646464656f6f6f656f6f6f656f6f6f656f6f6f65fffff9aaf6ffffffffffffffffffffffffffffffffffffffffffffffffff6faa9
|
||||
4444455444444454646464546464695f6f6f6f5f6f6f6f5f6f6f6f5f6f6f6f5ffff9aaaf6ffffffffffffffffffffffffffffffffffffffffffffffffff6faaa
|
||||
44555444444444564646465646464656f6f6f656f6f6f656f6f6f656f6f6f65fff9aaaaf6ffffffffffffffffffffffffffffffffffffffffffffffffff6faaa
|
||||
5544444444444454646464546464695f6f6f6f5f6f6f6f5f6f6f6f5f6f6f6f5fff9aaaaf6ffffffffffffffffffffffffffffffffffffffffffffffffff6faaa
|
||||
44444444444444564646465646464656f6f6f656f6f6f656f6f6f656f6f6f65ffff9aaaf6ffffffffffffffffffffffffffffffffffffffffffffffffff6faaa
|
||||
444444444444444555555545555555f5555555f5555555f5555555f5555555ffffff9aaf6ffffffffffffffffffffffffffffffffffffffffffffffffff6faa9
|
||||
44444444444444564646465646464656f6f6f656f6f6f656f6f6f656f6f6f65ffffff9af6ffffffffffffffffffffffffffffffffffffffffffffffffff6fa9f
|
||||
4444444444444454646464546464695f6f6f6f5f6f6f6f5f6f6f6f5f6f6f6f5fffffffaf6ffffffffffffffffffffffffffffffffffffffffffffffffff6faff
|
||||
44444444444444564646465646464656f6f6f656f6f6f656f6f6f656f6f6f65fffffffaf6ffffffffffffffffffffffffffffffffffffffffffffffffff6faff
|
||||
4444444444444454646464546465695f6f6f6f5f6f6f6f5f6f6f6f5f6f6f6f5fffffffaf6ffffffffffffffffffffffffffffffffffffffffffffffffff6faff
|
||||
44444444444444564646465656564656f6f6f656f6f6f656f6f6f656f6f6f65fffffffaf6ffffffffffffffffffffffffffffffffffffffffffffffffff6faff
|
||||
4444444444444454646465556464695f6f6f6f5f6f6f6f5f6f6f6f5f6f6f6f5fffffffaf6ffffffffffffffffffffffffffffffffffffffffffffffffff6faff
|
||||
44444444444444564646565646464656f6f6f656f6f6f656f6f6f656f6f6f65fffffffaf6ffffffffffffffffffffffffffffffffffffffffffffffffff6faff
|
||||
444444444444444555555545555555f5555555f5555555f5555555f5555555ffffffffaf6666666666666666666666666666666666666666666666666666faff
|
||||
44444444444445564646465646464656f6f6f656f6f6f656f6f6f656f6f6f65fffffffaffffffffffffffffffffffffffffffffffffffffffffffffffffffaff
|
||||
4444444444555454646464546464695f6f6f6f5f6f6f6f5f6f6f6f5f6f6f6f5fffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaff
|
||||
44444445554444564646465646464656f6f6f656f6f6f656f6f6f656f6f6f65fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
4444455444444454646464546464645f6f6f6f5f6f6f6f5f6f6f6f5f6f6f6f5fffffffff6666666666666666666666666666666666666666666666666666ffff
|
||||
44555444444444564646465646464656f6f6f656f6f6f656f6f6f656f6f6f65fffffffff6ffffffffffffffffffffffffffffffffffffffffffffffffff6ffff
|
||||
5544444444444454646464546464645f6f6f6f5f6f6f6f5f6f6f6f5f6f6f6f5fffffffff6ffffffffffffffffffffffffffffffffffffffffffffffffff6ffff
|
||||
44444444444444564646465646464656f6f6f656f6f6f656f6f6f656f6f6f65fffffffff6ffffffffffffffffffffffffffffffffffffffffffffffffff6ffff
|
||||
44444444444444455555554555555595555555f5555555f5555555f5555555ffffffffff6ffffffffffffffffffffffffffffffffffffffffffffffffff6ffff
|
||||
44444444444444564646465646464656f6f6f656f6f6f656f6f6f656f6f6f65fffffffff6ffffffffffffffffffffffffffffffffffffffffffffffffff6ffff
|
||||
4444444444444454646464546464645f6f6f6f5f6f6f6f5f6f6f6f5f6f6f6f5fffffffff6ffffffffffffffffffffffffffffffffffffffffffffffffff6ffff
|
||||
44444444444444564646465646464656f6f6f656f6f6f656f6f6f656f6f6f65fffffffff6ffffffffffffffffffffffffffffffffffffffffffffffffff6ffff
|
||||
4444444444444454646464546465655f6f6f6f5f6f6f6f5f6f6f6f5f6f6f6f5fffffffff6ffffffffffffffffffffffffffffffffffffffffffffffffff6ffff
|
||||
44444444444444564646465656564656f6f6f656f6f6f656f6f6f656f6f6f65fffffffff6fff6f6f666f666f6fff666f66fff66ffffffffffffffffffff6ffff
|
||||
4444444444444454646465556464645f6f6f6f5f6f6f6f5f6f6f6f5f6f6f6f5fffffffff6fff6f6f6fff6f6f6ffff6ff6f6f6ffffffffffffffffffffff6ffff
|
||||
44444444444444564646565646464656f6f6f656f6f6f656f6f6f656f6f6f65fffffffff6fff666f66ff666f6ffff6ff6f6f6ffffffffffffffffffffff6ffff
|
||||
44444444444444455555554555555595555555f5555555f5555555f5555555ffffffffff6fff6f6f6fff6f6f6ffff6ff6f6f6f6ffffffffffffffffffff6ffff
|
||||
44444444444445564646465646464656f6f6f656f6f6f656f6f6f656f6f6f65fffffffff6fff6f6f666f6f6f666f666f6f6f666ffffffffffffffffffff6ffff
|
||||
4444444444555454646464546464645f6f6f6f5f6f6f6f5f6f6f6f5f6f6f6f5fffffffff6ffffffffffffffffffffffffffffffffffffffffffffffffff6ffff
|
||||
44444445554444564646465646464656f6f6f656f6f6f656f6f6f656f6f6f65fffffffff6ffffffffffffffffffffffffffffffffffffffffffffffffff6ffff
|
||||
4444455444444454646464546464645f6f6f6f5f6f6f6f5f6f6f6f5f6f6f6f5fffffffff6ffffffffffffffffffffffffffffffffffffffffffffffffff6ffff
|
||||
44555444449999564649999646499996f6f69999f6f6f69999999996f6f6f659999999996ffffffff99999999fffffffff99999999fffffffffffffffff6ffff
|
||||
5544444449666699999666699996666999996666999969666666666999999996666666669999999996666666699999999966666666999999999ffffffff6ffff
|
||||
44444444496666666666666666444444466666666669f9666666666666666666666666666666666666666666666666666666666666666666669ffffffff6ffff
|
||||
4444444449666666666666654444445554444666666959665556556656566666555655565556555655566556666666666666666666666666669ffffffff6ffff
|
||||
444444444966666666666544444445aaa54444666669f9665656565656566666656656565656656665665666666666666666666666666666669ffffffff6ffff
|
||||
444444444496666666665444444445a6a544456666669f965556565655566666656655665556656665665556666666666666666666666666666966666666ffff
|
||||
444444444496666666544444444445aaa544446666669f9656565656665666666566565656566566656666566666666666666666666666666669ffffffffffff
|
||||
44444444449666666644444444444455544455666666909656565656555666666566565656565556656655666666666666666666666666666669ffffffffffff
|
||||
44444444449666666544444a4444444444455a666666909666666666666666666666666666666666666666666666666666666666666666666669ffffffffffff
|
||||
44444444449666664444444a4444888888888a66666690966556555655565666566666665556556666665556565655566666655655565556556966666666ffff
|
||||
44444444496666654444454a44888888888886666669f9665666656665665666566666666566565666666566565656666666566656566566565ffffffff6ffff
|
||||
44444446696666644444544448888488f8884866666909665556656665665666566666666566565666666566555655666666566655666566565ffffffff6ffff
|
||||
4444444669666654444544448888488fff8884866669f9666656656665665666566666666566565666666566565656666666565656566566565ffffffff6ffff
|
||||
4444444669666644445444488899998ff99998466669f9665566656655565556555666665556565666666566565655566666555656565556555ffffffff6ffff
|
||||
444444466696665444544488898888fffffff98666669f9666666666666666666666666666666666666666666666666666666666666666666669fffffff6ffff
|
||||
444445556696644445444488888887ff9777ff6666669f9655565556666655565656555666665556556655666666655655565566666655565559fffffff6ffff
|
||||
445554446696654445444848848717ff9717ff6666669f9656566566666665665656566666665666565656566666566656565656666656565669fffffff6ffff
|
||||
55444444569664444544848848f717ff9717f66666669f9655566566666665665556556666665566565656566666566655565656666655665569fffffff6ffff
|
||||
44444444496665444a4488848ff777ff9777f6666669f9665656656666666566565656666666566656565656666656665656565666665656569ffffffff6ffff
|
||||
44444444496665544a448888fffffffff9fff6666669f9665656656666666566565655566666555656565556666665565656565666665556555ffffffff6ffff
|
||||
44444444496665555a5489f9fffff9fff9fff6666669f9666666666666666666666666666666666666666666666666666666666666666666669ffffffff6ffff
|
||||
444444444966666688559f9fffffff999ffff6666669f9665556556655665556556666665556655666665556565655566666666666666666669ffffffff6ffff
|
||||
44444444449666668282f9f9fffffffffffff66666669f9656565656565656665656666665665656666665665656566666666666666666666669fffffff6ffff
|
||||
444444444496666688288f9f9fffefffffef666666669f9655565656565655665656666665665656666665665556556666666666666666666669fffffff6ffff
|
||||
4444444444966666828266f9fffffeeeeeff666666669f9656565656565656665656666665665656666665665656566666666666666666666669fffffff6ffff
|
||||
44444444449666682828666f9ffffffffff6666666669f9656565556555655565556666665665566666665665656555666666666666666666669fffffff6ffff
|
||||
444444444496666882866669f9ffffffff66666666669f9666666666666666666666666666666666666666666666666666666666666666666669fffffff6ffff
|
||||
44444444496666882866666ff9999992866666666669f9665556555655665556566666665556555665565566565665565556656666666666669ffffffff6ffff
|
||||
4444444449666682826666fffffffff2866666666669f9665666656656565656566666665656565656565656565656666566656666666666669ffffffff6ffff
|
||||
4444444449666688286666fffffffff886dd26666669f9665566656656565556566666665556556656565656565656666566656666666666669ffffffff6ffff
|
||||
444444455962222222222ddddfffff9dd22222266669f9665666656656565656566666665666565656565656565656666566666666666666669ffffffff6ffff
|
||||
4444455444921122222222222dddddd22222221126669f965666555656565656555666665666565655665556655665566566656666666666666966666666ffff
|
||||
44555444449211222222222222ddddd22222221122269f9666666666666666666666666666666666666666666666666666666666666666666669ffffffffffff
|
||||
55444444449222222222211122ddddd22211222222269f9666666666666666666666666666666666666666666666666666666666666666666669ffffffffffff
|
||||
444444444499996666699996666999966666999966669f9999999996666666699999999966666666699999999666666666999999996666666669ffffffffffff
|
||||
444444444444449999911449999449f99999ffff9999fffffffffff99999999fffffffff999999999ffffffff999999999ffffffff999999999fffffffffffff
|
||||
444444444444444441111444444449ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
44444444444444444411c144444449ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
444444444444444444111144444449ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
444444444444444444411944444559ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
444444444444444444441994555449ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
444444444444444444444955444449ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
444444444444444444455244444449ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
444444444444444455544444444449ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
444444444444455544444444444449ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
444444444455544444444444444449ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
444444455544444444444444444449ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
444445544444444444444444444449ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
445554444444444444444444444449ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
|
||||
__gff__
|
||||
0000000000000000000080808080000000000000000000808080808000000080000000000000000000814040818040400000000000000080808080808181808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
__map__
|
||||
0202020202020311110010101000130000000000121200000000000000001010100000000000000011110000000000000000131300000000000000000012120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0202020202020300110000101000131313000000001200000000000000001000000000000000000011110000000000000000131300000000000000001212000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0202020202020300111100001000131300000000001212000000000000001000000000000000000000000000000000000000001300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0202020202020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0404040404040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
1d0b0b0b0b1f1f0b0b0b0b0b0b0b0b1b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0d0e3d2c2d0e0e0e0e00000e3c0e0f0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0d0f0f0e0e0e0e000000000e0e0e0e0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0d00002a2b2f2a0f00000000000e000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0d00003b3b3b3b00002e2b2a2b0e000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0d00003a3a3a3900003e3a393b0e000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0d000000000e2a0f00000e2f2b0e000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0d00002b2f2a3b0028282b3a3900000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0d0f003a393a3a0037383b00000e0e0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0d0f000000000f002a2b0f000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0d0000290f002a003a393d000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0d0f0000000f3b000000000000000e0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0d000000000f0000000f0f0f00001e0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0d00000000000000000f003f001e1e0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0d0e0e000000000000000000001e000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
1a0a0a17181818190a0a0a0a0a0a0a1c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
__sfx__
|
||||
000100001f0701907014070100700e0700e0700e0700f07011070150601a06021060280601a6701767014670116700f6700c6700b670076700666005660046600365003640036400263002630026200160001600
|
||||
0003000019050190501905019050190501905019050190501d0501d0501d0501d0501d0501d0501d0502505025050250502505025050250502505025050250502005020050200502005020050200502005020050
|
||||
0001000003600036000360001600016000160002600036100462005620076200a6200e6201462019620246202f6203562036620316202d6102a610276102460021600206001d6001860017600156001360012600
|
||||
000100000c62000620220000000000000220002100000000000002200021000000002300000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000000000
|
||||
000200000145001450014500144001440024500245002450034500345004450044400444005440054400744008440094200b4100e42014220182301c2302022024220282202a2202d2102e210302103121031250
|
||||
00030000063500b3500e350123501535018350263500a3500f35015350193501e350213502a3500f35013350173501c35020350243502d3501f6501d6401b630196301762015620136201261010610106000e600
|
82
conversation.lua
Normal file
82
conversation.lua
Normal file
@ -0,0 +1,82 @@
|
||||
prev_screen = screen_workbench
|
||||
message_idx = 1
|
||||
conversation_active = false
|
||||
|
||||
function phoebe_say(face_sprite, words, ...)
|
||||
x,y=10,80
|
||||
|
||||
--background color
|
||||
local c = sget((face_sprite*8) % 128, flr((face_sprite*8)/128)*8)
|
||||
-- facebox
|
||||
draw_paper_with_color(x,y, 4*8+1, 4*8+1, c)
|
||||
spr(face_sprite, x+1,y+1, 4,4)
|
||||
-- textbox
|
||||
draw_paper_with_color(x+4*8+4, y, 68, 4*8+1, c)
|
||||
color(base_text_color)
|
||||
print(wrap(words, 16), x+4*8+4+2, y+2)
|
||||
end
|
||||
|
||||
function draw_chatbox(face_sprite, words, ...)
|
||||
x,y=10,80
|
||||
--background color
|
||||
local c = sget((face_sprite*8) % 128, flr((face_sprite*8)/128)*8)
|
||||
-- textbox
|
||||
draw_paper_with_color(x, y, 68, 4*8+1, c)
|
||||
color(light_text_color)
|
||||
print(wrap(words, 16), x+2, y+2)
|
||||
-- facebox
|
||||
draw_paper_with_color(x+68+3, y, 4*8+1,4*8+1, 0)
|
||||
spr(face_sprite, x+69+3,y+1, 4,4)
|
||||
end
|
||||
|
||||
function conversation_draw(screen)
|
||||
--prev_screen.draw()
|
||||
message = messages[message_idx]
|
||||
|
||||
if message[1] == phoebe_portrait then
|
||||
phoebe_say(unpack(message))
|
||||
else
|
||||
draw_chatbox(unpack(message))
|
||||
end
|
||||
end
|
||||
|
||||
function conversation_update(after)
|
||||
return function()
|
||||
conversation_active = true
|
||||
if btnp(4) or btnp(5) then
|
||||
callback = messages[message_idx][3]
|
||||
if callback ~= nil then callback() end
|
||||
|
||||
if message_idx == #messages then
|
||||
if after ~= nil then
|
||||
after()
|
||||
else
|
||||
change_screen(prev_screen)
|
||||
end
|
||||
|
||||
conversation_active = false
|
||||
else
|
||||
message_idx += 1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- base holds the screen to display under the conversation. nil if you want to simply use the existing screen.
|
||||
-- convo holds a list of {headsprite, message} pairs to display as a conversation
|
||||
-- after holds a callback for what to do after the screen is displayed. usually you'll call change_screen().
|
||||
function screen_conversation(convo, after, base)
|
||||
return {
|
||||
before=function()
|
||||
if base ~= nil then
|
||||
prev_screen=base
|
||||
end
|
||||
messages=convo
|
||||
message_idx=1
|
||||
conversation_active = true
|
||||
toast("conversation!")
|
||||
end,
|
||||
update=conversation_update(after),
|
||||
draw=conversation_draw
|
||||
}
|
||||
end
|
171
library.lua
Normal file
171
library.lua
Normal file
@ -0,0 +1,171 @@
|
||||
--tags represent what the object *is*
|
||||
--traitss represent *special qualities* *beyoond* the default for that object.
|
||||
testing = true
|
||||
story = {
|
||||
main=1,
|
||||
branch_lenore=1,
|
||||
branch_hans=1,
|
||||
branch_brigitte=1,
|
||||
hans_talked=false,
|
||||
got_gunpowder_book=false,
|
||||
got_crystal_book=false,
|
||||
}
|
||||
story.main = 1
|
||||
|
||||
library={}
|
||||
|
||||
library.traits={
|
||||
large={"large", 10,0, 3,3},
|
||||
shiny={"shiny", 14,0, 3,3},
|
||||
fine={"fine", 27,0, 3,2},
|
||||
red={"red", 29,0, 3,3},
|
||||
blue={"blue", 7,0, 3,3},
|
||||
green={"green", 17,0, 3,3},
|
||||
}
|
||||
|
||||
library.item_blueprints = {
|
||||
charcoal = {
|
||||
title="charcoal", tags={"black", "fuel"},
|
||||
quality_base=40, quality_range=20,
|
||||
trait_pool={"fine", "shiny"}, trait_chance=10,
|
||||
description="basket of \ncharcoal",
|
||||
sprite=37, sprite_recolor={[12]=0},
|
||||
},
|
||||
well_water = {
|
||||
title="well water", tags={"water"},
|
||||
quality_base=30, quality_range=20,
|
||||
trait_pool={"blue", "shiny"}, trait_chance=20,
|
||||
description="water from\na well",
|
||||
sprite=37,
|
||||
},
|
||||
herb = {
|
||||
title="herb", tags={},
|
||||
quality_base = 40, quality_range=30,
|
||||
trait_pool={"green"}, trait_chance=30,
|
||||
description="healing herb",
|
||||
sprite=34,
|
||||
},
|
||||
crystal = {
|
||||
title="crystal", tags={},
|
||||
quality_base=40, quality_range=60,
|
||||
trait_pool={"shiny", "large", "blue"}, trait_chance=50,
|
||||
description="cliff \ncrystals",
|
||||
sprite=38,
|
||||
},
|
||||
sand = {
|
||||
title="sand", tags={},
|
||||
quality_base=30, quality_range=40,
|
||||
trait_pool={"fine"}, trait_chance=40,
|
||||
description="beach sand",
|
||||
sprite=32, sprite_recolor={[6]=15}
|
||||
},
|
||||
|
||||
distilled_water={
|
||||
title="pure water",tags={"water", "pure"},
|
||||
quality_base=50, quality_range=20, --this should only be crafted, so this will be mostly irrelevant
|
||||
trait_pool={}, trait_chance=0, -- again no use
|
||||
description="filtered \npure water",
|
||||
sprite=33,
|
||||
},
|
||||
reagent = {
|
||||
title="reagent", tags={"red"},
|
||||
quality_base = 50, quality_range=10,
|
||||
trait_pool={"shiny"}, trait_chance=20,
|
||||
description="red reagent",
|
||||
sprite=33, sprite_recolor={[12]=8},
|
||||
},
|
||||
bomb = {
|
||||
title="bomb", tags={"explosive"},
|
||||
quality_base=60, quality_range=30,
|
||||
trait_pool={}, trait_chance=0,
|
||||
description="explodes for \nfun & profit",
|
||||
sprite=35,
|
||||
},
|
||||
gunpowder={
|
||||
title="gunpowder", tags={"explosive"},
|
||||
quality_base=30, quality_range=10,
|
||||
trait_pool={"fine"}, trait_chance=30,
|
||||
description="be careful!",
|
||||
sprite=32, sprite_recolor={[6]=5},
|
||||
},
|
||||
potion = {
|
||||
title="potion", tags={},
|
||||
quality_base = 50, quality_range=10,
|
||||
trait_pool={"red", "shiny", "curing"}, trait_chance=10,
|
||||
description="a healing\npotion",
|
||||
sprite=33, sprite_recolor={[12]=11}
|
||||
},
|
||||
polishing_powder = {
|
||||
title="polish", tags={},
|
||||
quality_base=70, quality_range=30,
|
||||
trait_pool={"shiny", "fine"}, trait_chance=30,
|
||||
description="polishing \npowder",
|
||||
sprite=32,
|
||||
},
|
||||
starshine_gem={
|
||||
title="starshine", tags={},
|
||||
quality_base=100, quality_range=50,
|
||||
trait_pool={"shiny","large"}, trait_chance=40,
|
||||
description="starshine \ngem!~",
|
||||
sprite=39,
|
||||
}
|
||||
}
|
||||
|
||||
library.recipes={
|
||||
distilled_water={
|
||||
title="pure water",
|
||||
ingredients={"well water", "charcoal"},
|
||||
result="distilled_water"
|
||||
},
|
||||
reagent={
|
||||
title="reagent",
|
||||
ingredients={"pure water", "charcoal", "herb"},
|
||||
result="reagent"
|
||||
},
|
||||
bomb={
|
||||
title="small bomb",
|
||||
ingredients={"gunpowder", "fuel"},
|
||||
result="bomb"
|
||||
},
|
||||
gunpowder={
|
||||
title="gunpowder",
|
||||
ingredients={"crystal", "charcoal", "reagent"},
|
||||
result="gunpowder"
|
||||
},
|
||||
potion={
|
||||
title="potion",
|
||||
ingredients={"pure water", "herb", "reagent"},
|
||||
result="potion"
|
||||
},
|
||||
polishing_powder={
|
||||
title="polish",
|
||||
ingredients={"crystals","sand","charcoal"},
|
||||
result="polishing_powder"
|
||||
},
|
||||
starshine_gem={
|
||||
title="starshine",
|
||||
ingredients={"crystals", "polish", "reagent"},
|
||||
result="starshine_gem"
|
||||
}
|
||||
}
|
||||
|
||||
if testing then
|
||||
inventory = {}
|
||||
|
||||
for i=1,4 do
|
||||
local c = make_item(library.item_blueprints.charcoal)
|
||||
c.traits = {"fine", "red"}
|
||||
add(inventory, c)
|
||||
end
|
||||
|
||||
for i=1,4 do
|
||||
local w = make_item(library.item_blueprints.well_water)
|
||||
w.traits = {"shiny", "blue"}
|
||||
add(inventory, w)
|
||||
end
|
||||
|
||||
else
|
||||
inventory = {}
|
||||
end
|
||||
|
||||
grimoire = {library.recipes.distilled_water, library.recipes.potion}
|
202
notes.md
Normal file
202
notes.md
Normal file
@ -0,0 +1,202 @@
|
||||
# story states:
|
||||
|
||||
story state: 1
|
||||
lenore requesting water: 1
|
||||
lenore requesting potion for patient: 2
|
||||
patient requesting bomb for farm: 3
|
||||
witch turns us down: 4
|
||||
librarian gives explosives book: 5
|
||||
farmer prods to talk to witch again: 6
|
||||
witch turns aroundd: 7
|
||||
librarian gives gem book: 8
|
||||
witch unsatisfied: 9
|
||||
witch satisfied: 10
|
||||
|
||||
fireworks festival: 11
|
||||
|
||||
|
||||
# larger ssscale:
|
||||
|
||||
fireworks festival, father's recipes are gone? someone's recipes are gone? evereyone is preemptively sad that it won't happen
|
||||
|
||||
gotta learn firewworks to make firewsorks for the festival
|
||||
|
||||
charcoal seller is grumpy and doesn't believe it's ever going to happen
|
||||
|
||||
|
||||
# in depth:
|
||||
there are five people to talk to - lenore (hospital), hans (charcoal seller), stef (librarian), brigitte (farmer), agnes (witch)
|
||||
|
||||
|
||||
intro: hi! i'm phoebe! welcome to pilton! i would tell you about our fireworks festival, which was the pride of our town, but since my grandfather passed away after not being able to run it for a few years, it looks like it won't be happening anymore. everyone's broken up about it. it was really the pride of the town. i wish i could help but i barely know any alchemy - grandfather just kept all his knowledge in his head, and now i'm left without anything more than purifying water and picking herbs!
|
||||
(send letter to phoebe about needing pure water)
|
||||
(send letter to phoebe about charcoal)
|
||||
|
||||
|
||||
1.
|
||||
hospital:
|
||||
if not has water:
|
||||
lenore: hey phoebe. did you get my letter?
|
||||
if has water:
|
||||
lenore: thanks for the water. can you makee a potion for my patient neextdoor?
|
||||
(takes water)
|
||||
(gives reagent)
|
||||
(gives recipe)
|
||||
(goes to 2)
|
||||
|
||||
charcoal seller:
|
||||
if not talk_charcoal_1
|
||||
hans: hey phoebe. if your family's not putting on the festival this year, you won't need the whole bulk order of charcoal, right? you can take as much as you want.
|
||||
(set talk_charcoal_1 true)
|
||||
(gives charcoal)
|
||||
if talk_charcoal_1
|
||||
hans: hey phoebe. charcoal's out back.
|
||||
(gives charcoal)
|
||||
|
||||
farmer:
|
||||
door: you hear groaning from inside.
|
||||
|
||||
librarian:
|
||||
stef: hey phoebe. looking for any book in particular?
|
||||
phoebe: just browsing today!
|
||||
|
||||
witch:
|
||||
door: there is no answer to your knocking.
|
||||
|
||||
|
||||
2.
|
||||
hospital:
|
||||
lenore: you get that potion to my brigitte yet? she's got a red roof to the east of here.
|
||||
|
||||
charcoal seller: as above
|
||||
|
||||
farmer:
|
||||
if not has potion:
|
||||
door: you hear grooaning from inside.
|
||||
if has potion:
|
||||
brigitte: oof oww my back. thanks for healing it. do you know how to make bombs?
|
||||
phoebe: i'm sorry but no, my grandfather hadn't taught me when he passed, because they're dangerous.
|
||||
brigitte: i used to get them from the witch but she won't make them for me anymore. maybe you could ask her?
|
||||
(goes to 3)
|
||||
|
||||
librarian:
|
||||
stef: hey phoebe. looking for any book in particular?
|
||||
phoebe: just browsing today!
|
||||
|
||||
witch:
|
||||
door: there is no answer to your knocking.
|
||||
|
||||
3.
|
||||
hospital:
|
||||
lenore: thanks for helping out my patient.
|
||||
|
||||
charcoal sseller: as above
|
||||
|
||||
farmer:
|
||||
brigitte: did she give you the recipe?
|
||||
phoebe: not yet!
|
||||
|
||||
witch tower:
|
||||
agnes: this town is dead. i can make no more explosions becauses there is no more gifted alchemist in this town. phoebe dear, you're lovely but yoou're noot your grandfather. this town is a husk of what it once was. i am done teaching. if you want to learn alchemy, there's a library in the middle of town. i have no time for this.
|
||||
(goes to 4)
|
||||
|
||||
4.
|
||||
hospital:
|
||||
lenore: wow, that witch is rude.
|
||||
|
||||
charcoal seller:
|
||||
as abovoe
|
||||
|
||||
farmer:
|
||||
brigitte:
|
||||
|
||||
librarian: you say you're looking for a book about explosives? well, i don't have much but i found this in the reference area. maybe you can get something from it?
|
||||
phoebe: this is a chemistry manual but... black powder... yes, i think i could do this and... yes, i think i can use this to make gunpowder! maybe i can improvise this!
|
||||
(set flag got_chemistry_book)
|
||||
|
||||
farmer:
|
||||
if not has gunpowder:
|
||||
farmer: any idea what to do about that boulder?
|
||||
if has gunpowder:
|
||||
(take gunpowder)
|
||||
farmer: hmm, yeah, i think if i poured this into the crack in the rock this would take it apart. did you convince the witch?
|
||||
phoebe: no, that old hag basically told me to fuck off! so rude!
|
||||
farmer: huh. i wonder what's up her bonnet.
|
||||
phoebe: she kept talking about how there's no great alchemy left in this town.
|
||||
farmer: maybe she needs someone to impress her.
|
||||
(goes to 5)
|
||||
|
||||
5.
|
||||
hospital:
|
||||
lenore: hey phoebe. any aches today?
|
||||
phoebe: i'm in tip top shape!
|
||||
|
||||
charcoal seller:
|
||||
as above
|
||||
|
||||
witch:
|
||||
agnes: this town is dead. our greatest alchemists are lost. you are a baby. yoour grandfather never taught you his ways. your parents forsook the craft. there is nothing for it.
|
||||
phoebe: there's you! you could teach us!
|
||||
agnes: maybe if you showed any promise i would teach you. you have forgotten the ways of old.
|
||||
phoebe: grrrrr, you old hag! give me a test and i'll best it!!
|
||||
agnes: construct a starshine gem which carries red energy and shininess. then i might consider you to have potential.
|
||||
(goes to 6)
|
||||
|
||||
6.
|
||||
hospital:
|
||||
lenore: hey phoebe. any aches today?
|
||||
phoebe: i'm in tip top shape!
|
||||
|
||||
charcoal seller:
|
||||
as above
|
||||
|
||||
librarian: yeah i think i do have some bookss about gems... let me check.
|
||||
librarian: here, does this help?
|
||||
phoebe: yes, this is perfect! hmm... hmmm... hmm... okay i think i need some raw crystal, polishing powder, and reagent. and it's got a recipe for the polishing powder! i should be able to gather sand at the beach... at the location...
|
||||
librarian: good luck!
|
||||
(set flag got_crystal_book)
|
||||
|
||||
(take crystal)
|
||||
witch: hm. this is... passable. it's passable enough that I will give you the recipe. my bones are too tired to keep up this fight.
|
||||
phoebe: i'll show you up! i'll make the best fireworks festival!
|
||||
witch: hm. it'll suck.
|
||||
(door close)
|
||||
(give recipe)
|
||||
phoebe: okay. i can make this happen. charcoal seller was the one who set up the show, and i need to talk to lenore about safety!
|
||||
(goes to 7)
|
||||
|
||||
7.
|
||||
A:
|
||||
charcoal seller: look, if you get me the fireworks, i can set up a show, but it'll need some space. maybe the farmer's field?
|
||||
|
||||
farmer: suure! harvest is over so i'm not doing much with the field, and i'd love to repay you for getting rid of that boulder.
|
||||
|
||||
charcoal seller: i'm all ready to go. when all the preparations are done, i'll meet you at the library.
|
||||
(goes to 8 if A and B)
|
||||
|
||||
B:
|
||||
|
||||
lenore: whoa, you can't just set off fireworks willy-nilly. get me 3 clean bandages and a distilled water. you can't do something as dangerous as fireworks without being prepared for injuries.
|
||||
phoebe: you got it!!
|
||||
|
||||
lenore: thanks. this looks good. i'll meet you at the library when you're ready.
|
||||
(goes to 8 if A and B)
|
||||
|
||||
8.
|
||||
librarian: i heard there's going to be a fireworks festival after all!
|
||||
farmer: i thought it was done for since the old alchemist passed away, rest his soul.
|
||||
charcoal seller: well it looks like phoebe took up the reins!
|
||||
phoebe: aw shucks!
|
||||
lenore: thanks for making this happen, phoebs.
|
||||
farmer: thanks, phoebe!
|
||||
charcoal seller: thanks, phoebe.
|
||||
phoebe: thank you all for helping out so much. i couldn't have done it without you.
|
||||
phoebe: and thank you for playing my game!
|
||||
(goes to 9)
|
||||
|
||||
9.
|
||||
atelier door: thank you for completing atelier phoebe! this was a labor of love and bafflement. why did i make an atelier fangame in pico-8? i couldn't tell you. but i hope you enjoyed it! you can find me online as shoofle in most places, most frequently @shoofle@beach.city. gimme a shout and tell me if you got to the end of this game! i hope you enjoyed it!
|
||||
|
||||
|
||||
# sound effects to add
|
||||
1. sounds for every gatherable
|
426
screen_crafting.lua
Normal file
426
screen_crafting.lua
Normal file
@ -0,0 +1,426 @@
|
||||
grid_size = 8
|
||||
grid_width = 6
|
||||
grid_height = 6
|
||||
grid_x = 14
|
||||
grid_y = 34
|
||||
|
||||
c = {
|
||||
ing_slot=1, -- the slot in the recipe currently being modified, whether sselecting trait or ingredient
|
||||
ing_idx=1, -- the index into filtered ingredients of the current ingredient selection
|
||||
trait_slot=0, -- the trait sslot of the recipe we're modifying.
|
||||
x=0, y=0 -- x y coordinates in the puzzle grid for the current trait
|
||||
}
|
||||
|
||||
center_glyph = 132
|
||||
ingredients = {}
|
||||
-- traits which have been placed
|
||||
traits = {}
|
||||
|
||||
choosing_ingredient = true
|
||||
placing_trait = false
|
||||
finalizing = false
|
||||
big_button = false
|
||||
final_trait_options = {}
|
||||
final_selected_traits = {}
|
||||
|
||||
function crafting_before()
|
||||
center_glyph = rnd({132, 134, 164, 166})
|
||||
c.x = 0
|
||||
c.y = 0
|
||||
c.ing_slot = 1
|
||||
c.ing_idx = 1
|
||||
c.trait_slot = 0
|
||||
|
||||
ingredients = {}
|
||||
traits = {}
|
||||
final_trait_options = {}
|
||||
|
||||
choosing_ingredient = true
|
||||
placing_trait = false
|
||||
finalizing = false
|
||||
big_button = false
|
||||
end
|
||||
|
||||
function crafting_update()
|
||||
if choosing_ingredient then
|
||||
crafting_choice_update()
|
||||
elseif placing_trait then
|
||||
crafting_place_update()
|
||||
elseif finalizing then
|
||||
crafting_finalize_update()
|
||||
end
|
||||
end
|
||||
|
||||
function crafting_choice_update()
|
||||
requirement = current_recipe.ingredients[c.ing_slot]
|
||||
filtered_ingredients = filter_list(
|
||||
inventory,
|
||||
function(ing) return requirement == ing.title or contains(ing.tags, requirement) end
|
||||
)
|
||||
current_ingredient = filtered_ingredients[c.ing_idx]
|
||||
|
||||
|
||||
if btnp(0) and c.ing_idx>1 then
|
||||
sfx(3)
|
||||
c.ing_idx -= 1
|
||||
end
|
||||
if btnp(1) and c.ing_idx<#filtered_ingredients then
|
||||
sfx(3)
|
||||
c.ing_idx += 1
|
||||
end
|
||||
|
||||
if btnp(4) and current_ingredient ~= nil then
|
||||
-- lock in this ingredient and move on to moving traits arund
|
||||
add(ingredients, current_ingredient)
|
||||
if #current_ingredient.traits ~= 0 then
|
||||
-- if there are traits on tihs ingredient, move on to setting traits.
|
||||
choosing_ingredient = false
|
||||
placing_trait = true
|
||||
finalizing = false
|
||||
c.trait_slot = 1
|
||||
c.ing_idx = 1
|
||||
elseif #ingredients < #current_recipe.ingredients then
|
||||
-- if there are remaining ingredients to set, then we move to the next ingredient slot.
|
||||
choosing_ingredient = true
|
||||
placing_trait = false
|
||||
finalizing = false
|
||||
c.trait_slot = 0
|
||||
c.ing_idx = 1
|
||||
c.ing_slot += 1
|
||||
else
|
||||
-- if there are no more ingredients to set, then we finalize.
|
||||
sfx(2)
|
||||
c.x, c.y = 0, 0
|
||||
final_trait_options = filter_list(traits, function(x) return x.active end)
|
||||
choosing_ingredient = false
|
||||
placing_trait = false
|
||||
finalizing = true
|
||||
c.trait_slot = 0
|
||||
c.ing_idx = 1
|
||||
c.ing_slot = 1
|
||||
end
|
||||
end
|
||||
|
||||
if (btnp(5)) then
|
||||
-- delete the last ingredient from the ingredients list
|
||||
if #ingredients == 0 then
|
||||
change_screen(screen_recipe_list)
|
||||
else
|
||||
traits = filter_list(
|
||||
traits,
|
||||
function(set_trait) return set_trait.from_ingredient_slot ~= #ingredients end
|
||||
)
|
||||
|
||||
deli(ingredients)
|
||||
c.trait_slot = 0
|
||||
if choosing_ingredient and c.ing_slot > 1 then c.ing_slot -= 1 end
|
||||
choosing_ingredient = true
|
||||
placing_trait = false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function crafting_place_update()
|
||||
current_ingredient = ingredients[c.ing_slot]
|
||||
current_trait = library.traits[current_ingredient.traits[c.trait_slot]]
|
||||
|
||||
width = current_trait[4]
|
||||
height = current_trait[5]
|
||||
|
||||
if btnp(0) and c.x>0 then c.x -= 1 end
|
||||
if btnp(1) and c.x+width < grid_width then c.x += 1 end
|
||||
if btnp(2) and c.y>0 then c.y -= 1 end
|
||||
if btnp(3) and c.y+height < grid_height then c.y += 1 end
|
||||
|
||||
if btnp(4) then
|
||||
new_trait = {trait=current_trait, x=c.x, y=c.y, active=true, from_ingredient_slot=c.ing_slot}
|
||||
|
||||
for idx, trait in ipairs(traits) do
|
||||
if overlaps(trait, new_trait) then
|
||||
traits[idx].active = false
|
||||
end
|
||||
end
|
||||
|
||||
add(traits, new_trait)
|
||||
|
||||
|
||||
if c.trait_slot < #current_ingredient.traits then
|
||||
-- if there's more traits to set, then we should keep setting traits.
|
||||
choosing_ingredient = false
|
||||
placing_trait = true
|
||||
finalizing = false
|
||||
c.trait_slot += 1
|
||||
elseif c.ing_slot < #current_recipe.ingredients then
|
||||
-- if there's more ingredients to set, then we move on to setting ingredients.
|
||||
choosing_ingredient = true
|
||||
placing_trait = false
|
||||
finalizing = false
|
||||
c.trait_slot = 0
|
||||
c.ing_slot += 1
|
||||
else
|
||||
-- if there's no more ingredients to set, then we move on to finalizing.
|
||||
sfx(2)
|
||||
c.x, c.y = 0, 0
|
||||
final_trait_options = filter_list(traits, function(x) return x.active end)
|
||||
choosing_ingredient = false
|
||||
placing_trait = false
|
||||
finalizing = true
|
||||
c.trait_slot = 0
|
||||
c.ing_slot = 1
|
||||
end
|
||||
end
|
||||
if (btnp(5)) then
|
||||
undo_ingredient()
|
||||
end
|
||||
end
|
||||
|
||||
function crafting_finalize_update()
|
||||
if #final_trait_options < 3 then big_button = true end
|
||||
|
||||
if not big_button then
|
||||
newx, newy = c.x, c.y
|
||||
if btnp(0) then newx -= 1 end
|
||||
if btnp(1) then newx += 1 end
|
||||
if btnp(2) then newy -= 1 end
|
||||
if btnp(3) then newy += 1 end
|
||||
|
||||
if (final_trait_options[2*newy + newx + 1] ~= nil) and newx <= 1 and newx >= 0 then
|
||||
c.x, c.y = newx, newy
|
||||
elseif btnp(3) and not (btnp(0) or btnp(1) or btnp(2)) then
|
||||
big_button = true
|
||||
end
|
||||
local i = 2*c.y + c.x + 1
|
||||
|
||||
if btnp(4) and not big_button and #final_selected_traits < 2 then
|
||||
if not contains(final_selected_traits, i) then
|
||||
add(final_selected_traits, i)
|
||||
end
|
||||
end
|
||||
--todo: go back (btnp5)
|
||||
else
|
||||
if btnp(2) and #final_trait_options > 2 then big_button = false end
|
||||
if btnp(4) then
|
||||
make_the_product()
|
||||
big_button = false
|
||||
end
|
||||
if btnp(5) and #final_trait_options < 3 then
|
||||
-- go back a step
|
||||
undo_ingredient()
|
||||
finalizing = false
|
||||
elseif btnp(5) then
|
||||
big_button = false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function make_the_product()
|
||||
local product = make_item(library.item_blueprints[current_recipe.result])
|
||||
product.quality = quality()
|
||||
add(inventory, product)
|
||||
for x in all(ingredients) do
|
||||
del(inventory, x)
|
||||
end
|
||||
product.traits = {}
|
||||
if #final_trait_options < 3 then
|
||||
for t in all(final_trait_options) do
|
||||
add(product.traits, t.trait[1])
|
||||
end
|
||||
else
|
||||
for i in all(final_selected_traits) do
|
||||
add(product.traits, final_trait_options[i].trait[1])
|
||||
end
|
||||
end
|
||||
sfx(5)
|
||||
change_screen(screen_recipe_list)
|
||||
end
|
||||
|
||||
function undo_ingredient()
|
||||
if #ingredients == 0 then
|
||||
change_screen(screen_recipe_list)
|
||||
else
|
||||
traits = filter_list(
|
||||
traits,
|
||||
function(set_trait) return set_trait.from_ingredient_slot ~= #ingredients end
|
||||
)
|
||||
|
||||
deli(ingredients)
|
||||
c.trait_slot = 0
|
||||
if choosing_ingredient and c.ing_slot > 1 then c.ing_slot -= 1 end
|
||||
choosing_ingredient = true
|
||||
placing_trait = false
|
||||
end
|
||||
end
|
||||
|
||||
function crafting_draw()
|
||||
cls()
|
||||
|
||||
draw_background()
|
||||
|
||||
draw_paper(30,8,140,140)
|
||||
draw_recipe_on_paper(current_recipe, 30, 8)
|
||||
draw_recipe_in_progress_on_paper(30, 8)
|
||||
|
||||
-- puzzle grid including pieces
|
||||
draw_grid()
|
||||
|
||||
if finalizing then
|
||||
if #final_trait_options > 2 then
|
||||
draw_paper(24, 10, 128-24-24, 128-10-10)
|
||||
color(highlight_text_color)
|
||||
print("pick two traits\nto keep!",32, 20)
|
||||
|
||||
for i, trait in ipairs(final_trait_options) do
|
||||
xi, yi = (i-1)%2, (i+i%2-2)/2
|
||||
x, y = 64-32+xi*32, 34+yi*8
|
||||
if contains(final_selected_traits, i) then
|
||||
rect(x-2, y-2, x+30, y+6, 10)
|
||||
end
|
||||
if not big_button and xi == c.x and yi == c.y then
|
||||
rect(x-2, y-2, x+30, y+6, 0)
|
||||
end
|
||||
if contains(final_selected_traits, i) then
|
||||
color(highlight_text_color)
|
||||
else
|
||||
color(base_text_color)
|
||||
end
|
||||
print(trait.trait[1], x, y )
|
||||
end
|
||||
|
||||
--draw_paper(40, 76, 128-40-40, 12)
|
||||
color(highlight_text_color)
|
||||
if big_button then
|
||||
pal(9,0)
|
||||
else
|
||||
palt(12, true)
|
||||
end
|
||||
spr(128, 64-16, 72, 4,4)
|
||||
spr(center_glyph, 64-8, 80, 2, 2)
|
||||
pal()
|
||||
palt()
|
||||
if big_button then
|
||||
color(12)
|
||||
else
|
||||
color(highlight_text_color)
|
||||
end
|
||||
print("create!", 64-12, 108)
|
||||
else
|
||||
draw_paper(30, 30, 128-30-30, 128-30-30)
|
||||
pal(9,0)
|
||||
spr(128, 64-16, 60-16, 4,4)
|
||||
spr(center_glyph, 64-8, 60-8, 2, 2)
|
||||
pal()
|
||||
palt()
|
||||
if big_button then
|
||||
color(12)
|
||||
else
|
||||
color(highlight_text_color)
|
||||
end
|
||||
print("create!", 64-12, 80)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function draw_grid()
|
||||
map(0,0, grid_x,grid_y, grid_width+1,grid_height+1)
|
||||
for trait in all(traits) do
|
||||
if trait.active then
|
||||
map(trait.trait[2], trait.trait[3],
|
||||
(trait.x*grid_size)+grid_x, (trait.y*grid_size)+grid_y,
|
||||
trait.trait[4], trait.trait[5])
|
||||
end
|
||||
end
|
||||
|
||||
if (placing_trait) then
|
||||
trait = library.traits[ingredients[c.ing_slot].traits[c.trait_slot]]
|
||||
|
||||
-- draw the currently selected trait into the grid
|
||||
map(trait[2], trait[3],
|
||||
(c.x*grid_size)+grid_x, (c.y*grid_size)+grid_y,
|
||||
trait[4], trait[5])
|
||||
end
|
||||
end
|
||||
|
||||
function draw_recipe_in_progress_on_paper(x, y)
|
||||
-- selected ingredients
|
||||
for i, ing in ipairs(ingredients) do
|
||||
draw_ingredient_listing(ing, x+40, y + 26*i)
|
||||
end
|
||||
color(blank_ingredient_outline_color)
|
||||
|
||||
for i=(c.ing_slot+1),#current_recipe.ingredients do
|
||||
print(current_recipe.ingredients[i], x+46, y+2+26*i+9)
|
||||
end
|
||||
|
||||
|
||||
-- quality listing
|
||||
color(base_text_color)
|
||||
print("quality", x+2, y+12)
|
||||
print_quality(quality(), x+44, y+18)
|
||||
|
||||
|
||||
if (choosing_ingredient and c.ing_slot < #current_recipe.ingredients + 1) then
|
||||
-- draw a box around the ingredient we're choosing
|
||||
yc = y + 26*c.ing_slot
|
||||
xc = x+40
|
||||
rect(xc, yc, xc+55, yc+26,10)
|
||||
spr(6, xc-8, yc+10)
|
||||
spr(7, xc+56, yc+10)
|
||||
|
||||
if current_ingredient == nil then
|
||||
color(blank_ingredient_outline_color)
|
||||
print(current_recipe.ingredients[c.ing_slot], x+46, y+2+26*c.ing_slot+9)
|
||||
else
|
||||
-- draw the ingredient listing for the selected ingredient
|
||||
draw_ingredient_listing(current_ingredient, xc, yc)
|
||||
end
|
||||
elseif (placing_trait) then
|
||||
-- draw a marker for the trait we're picking
|
||||
yc = y + 26*c.ing_slot
|
||||
yc = 3+yc+c.trait_slot*6
|
||||
xc = x+38
|
||||
spr(8, xc, yc)
|
||||
end
|
||||
|
||||
for i, t in ipairs(filter_list(traits, function(trait) return trait.active end)) do
|
||||
color(base_text_color)
|
||||
print(t.trait[1], x+5, y+78 + 8*i)
|
||||
end
|
||||
end
|
||||
|
||||
function quality()
|
||||
local quality_sum = 0
|
||||
|
||||
for ing in all(ingredients) do
|
||||
quality_sum += ing.quality
|
||||
end
|
||||
|
||||
if #ingredients > 1 then
|
||||
quality_sum = flr(quality_sum/#ingredients)
|
||||
else
|
||||
quality_sum = flr(quality_sum)
|
||||
end
|
||||
|
||||
for trait in all(traits) do
|
||||
if trait.active then quality_sum += 5 end
|
||||
end
|
||||
|
||||
return quality_sum
|
||||
end
|
||||
|
||||
screen_crafting_raw = {before=crafting_before, draw=crafting_draw, update=crafting_update}
|
||||
screen_crafting = screen_crafting_raw
|
||||
if not testing then
|
||||
screen_crafting = screen_conversation({
|
||||
{phoebe_portrait, [[when i craft, i pick ingredients one by one with left and right]]},
|
||||
{phoebe_portrait, [[and press 🅾️ to lock them in before picking what traits to use]]},
|
||||
{phoebe_portrait, [[trying to fit them into the grid, which increases the quality. ]]},
|
||||
{phoebe_portrait, [[two traits from those still in the grid at the end are added to the product!]]},
|
||||
{phoebe_portrait, [[but if you overlap a trait, it will be removed.]]},
|
||||
{phoebe_portrait, [[i've even heard of some traits that combine to form others!]]}
|
||||
},
|
||||
function()
|
||||
screen_crafting = screen_crafting_raw
|
||||
change_screen(screen_crafting)
|
||||
end,
|
||||
screen_crafting_raw)
|
||||
end
|
120
screen_inventory.lua
Normal file
120
screen_inventory.lua
Normal file
@ -0,0 +1,120 @@
|
||||
inventory_drawer_height=0
|
||||
inventory_drawer_height_max=106
|
||||
|
||||
inventory_cursor = {
|
||||
x=0, y=0,
|
||||
}
|
||||
|
||||
function inventory_slide(x1, x2)
|
||||
return {
|
||||
timer = 0,
|
||||
active=true,
|
||||
|
||||
before=function(s)
|
||||
inventory_drawer_height = x1
|
||||
end,
|
||||
|
||||
update=function(s)
|
||||
inventory_drawer_height = x1 + (s.timer/0.2)*(x2-x1)
|
||||
if s.timer > 0.2 then
|
||||
inventory_drawer_height = x2
|
||||
s.active=false
|
||||
end
|
||||
end,
|
||||
draw=function(s)
|
||||
draw_drawer()
|
||||
draw_item_sheet()
|
||||
end,
|
||||
}
|
||||
end
|
||||
|
||||
function inventory_before()
|
||||
end
|
||||
|
||||
function inventory_update()
|
||||
cx, cy = inventory_cursor.x, inventory_cursor.y
|
||||
if btnp(0) then cx -= 1 end
|
||||
if btnp(1) then cx += 1 end
|
||||
if btnp(2) then cy -= 1 end
|
||||
if btnp(3) then cy += 1 end
|
||||
if cy >= 0 and cy < flr(#inventory/5) then
|
||||
if cx >= 0 and cx < 5 then
|
||||
inventory_cursor.x = cx
|
||||
inventory_cursor.y = cy
|
||||
end
|
||||
elseif cy == flr(#inventory / 5) then
|
||||
if cx >= 0 and cx < #inventory % 5 then
|
||||
inventory_cursor.x = cx
|
||||
inventory_cursor.y = cy
|
||||
end
|
||||
end
|
||||
|
||||
if btnp(5) then
|
||||
animate(inventory_slide(inventory_drawer_height_max,0))
|
||||
change_screen(screen_workbench)
|
||||
end
|
||||
end
|
||||
|
||||
function inventory_draw()
|
||||
bench_draw()
|
||||
draw_drawer()
|
||||
draw_item_sheet()
|
||||
end
|
||||
|
||||
function draw_drawer()
|
||||
rectfill(14, 0, 114, inventory_drawer_height, 4)
|
||||
for y=0,(inventory_drawer_height_max / 8) do
|
||||
yval = y*8 + inventory_drawer_height - inventory_drawer_height_max
|
||||
line(10, yval, 110, yval, 5)
|
||||
for x=1,(4 - (y%2)) do
|
||||
xval = x*32 + (y%2)*16
|
||||
line(xval, yval, xval, yval+8, 5)
|
||||
end
|
||||
spr(20, 10, yval)
|
||||
spr(20, 110, yval)
|
||||
end
|
||||
rectfill(6, inventory_drawer_height, 120, inventory_drawer_height+7, 4)
|
||||
line(6, inventory_drawer_height, 120, inventory_drawer_height, 9)
|
||||
line(6, inventory_drawer_height+7, 120, inventory_drawer_height+7, 9)
|
||||
spr(21, 2, inventory_drawer_height)
|
||||
spr(21, 118, inventory_drawer_height, 1, 1, true, false)
|
||||
spr(22, 60, inventory_drawer_height+8)
|
||||
draw_drawer_contents()
|
||||
|
||||
end
|
||||
|
||||
function draw_drawer_contents()
|
||||
for i, val in ipairs(inventory) do
|
||||
x, y = 20+20*((i-1)%5), 10+20*flr((i-1)/5) + inventory_drawer_height - inventory_drawer_height_max
|
||||
if inventory_cursor.x + 5*inventory_cursor.y == i-1 then
|
||||
rect(x-2,y-2,x+9,y+9, 10)
|
||||
end
|
||||
sprite = val.sprite
|
||||
if sprite == nil then sprite = 36 end
|
||||
if val.sprite_recolor ~= nil then
|
||||
pal(val.sprite_recolor)
|
||||
end
|
||||
spr(sprite, x, y)
|
||||
pal()
|
||||
end
|
||||
end
|
||||
|
||||
function draw_item_sheet()
|
||||
if #inventory ~= 0 then
|
||||
draw_paper(35,94, 128-2*35,28)
|
||||
draw_ingredient_listing(inventory[1 + 5*inventory_cursor.y + inventory_cursor.x], 35, 94)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
screen_inventory_raw = {before=inventory_before, draw=inventory_draw, update=inventory_update}
|
||||
screen_inventory = screen_inventory_raw
|
||||
if not testing then
|
||||
screen_inventory = screen_conversation({
|
||||
{phoebe_portrait, [[oh right, this is the drawer where i keep my stuff!]]},},
|
||||
function()
|
||||
screen_inventory = screen_inventory_raw
|
||||
change_screen(screen_inventory)
|
||||
end,
|
||||
screen_inventory_raw)
|
||||
end
|
141
screen_letters.lua
Normal file
141
screen_letters.lua
Normal file
@ -0,0 +1,141 @@
|
||||
letters = {
|
||||
{[[
|
||||
phoebe,
|
||||
|
||||
i know you looked
|
||||
forward to the
|
||||
fireworks festival
|
||||
every year but our
|
||||
travels are going
|
||||
to keep us away again
|
||||
this year. i'm so
|
||||
sorry.
|
||||
|
||||
mom & dad]]},
|
||||
{[[
|
||||
phoebe,
|
||||
|
||||
i need purified water.
|
||||
bring it to the hospital.
|
||||
i'll give you reagent
|
||||
in return.
|
||||
|
||||
-- lenore
|
||||
]],}
|
||||
}
|
||||
letter_idx = 2
|
||||
letters_offset_x = -10
|
||||
letters_offset_y = 8
|
||||
|
||||
function letters_move_to(x1, y1, x2, y2)
|
||||
return {
|
||||
timer = 0,
|
||||
active=true,
|
||||
|
||||
before=function(s)
|
||||
letters_offset_x = x1
|
||||
letters_offset_y = y1
|
||||
sfx(2)
|
||||
end,
|
||||
|
||||
update=function(s)
|
||||
letters_offset_x = x1 + (s.timer/0.2)*(x2-x1)
|
||||
letters_offset_y = y1 + (s.timer/0.2)*(y2-y1)
|
||||
if s.timer > 0.2 then
|
||||
letters_offset_x = x2
|
||||
letters_offset_y = y2
|
||||
s.active=false
|
||||
end
|
||||
end,
|
||||
draw=function(s)
|
||||
end,
|
||||
}
|
||||
end
|
||||
|
||||
function letters_move_out(x1, y1, x2, y2)
|
||||
new = letters_move_to(x1, y1, x2, y2)
|
||||
new.draw = function(s)
|
||||
draw_paper(letters_offset_x, letters_offset_y, 128, 128)
|
||||
draw_letter_on_paper(letters[letter_idx], letters_offset_x+14, letters_offset_y+4)
|
||||
end
|
||||
return new
|
||||
end
|
||||
|
||||
function flip_away_letter(page)
|
||||
return {
|
||||
prev_page_idx = page,
|
||||
|
||||
timer = 0,
|
||||
t2 = 0,
|
||||
active=true,
|
||||
|
||||
before=function(s)
|
||||
sfx(2)
|
||||
end,
|
||||
|
||||
update=function(s)
|
||||
if s.timer > 0.2 then s.active=false end
|
||||
s.t2 = s.timer
|
||||
end,
|
||||
|
||||
draw=function(s)
|
||||
local page_flip = 600*s.t2
|
||||
local x = letters_offset_x + page_flip
|
||||
local y = letters_offset_y + 0.1*page_flip
|
||||
draw_paper(x, y, 128, 128)
|
||||
draw_letter_on_paper(letters[s.prev_page_idx], x+14, y+4)
|
||||
end,
|
||||
}
|
||||
end
|
||||
|
||||
function flip_in_letter(page, new_page)
|
||||
o = flip_away_letter(new_page)
|
||||
f = o.draw
|
||||
o.other_page_idx = page
|
||||
o.draw = function(s)
|
||||
s.t2 = 0.2-s.timer
|
||||
draw_paper(letters_offset_x, letters_offset_y, 128, 128)
|
||||
draw_letter_on_paper(letters[s.other_page_idx], letters_offset_x+14, letters_offset_y+4)
|
||||
f(s)
|
||||
end
|
||||
return o
|
||||
end
|
||||
|
||||
function letters_update()
|
||||
if btnp(0) and letter_idx > 1 then
|
||||
animate(flip_away_letter(letter_idx))
|
||||
letter_idx -= 1
|
||||
end
|
||||
|
||||
if btnp(1) and letter_idx < #letters then
|
||||
animate(flip_in_letter(letter_idx, letter_idx+1))
|
||||
letter_idx = letter_idx + 1
|
||||
end
|
||||
|
||||
if btnp(5) then
|
||||
animate(letters_move_out(-10, 8, -10-80, 8+8))
|
||||
change_screen(screen_workbench)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function letters_draw()
|
||||
cls()
|
||||
|
||||
draw_background()
|
||||
draw_paper(letters_offset_x, letters_offset_y, 128, 128)
|
||||
draw_letter_on_paper(letters[letter_idx], letters_offset_x+14, letters_offset_y+4)
|
||||
end
|
||||
|
||||
function draw_letter_on_paper(letter, x, y)
|
||||
color(base_text_color)
|
||||
print(letter[1], x, y)
|
||||
end
|
||||
|
||||
screen_letters = {draw=letters_draw, update=letters_update}
|
||||
screen_letters = screen_conversation({{phoebe_portrait, [[oh jeez my pile of letters!]]}},
|
||||
function()
|
||||
screen_letters = {draw=letters_draw, update=letters_update}
|
||||
change_screen(screen_letters)
|
||||
end,
|
||||
screen_letters)
|
150
screen_recipe_list.lua
Normal file
150
screen_recipe_list.lua
Normal file
@ -0,0 +1,150 @@
|
||||
timer = 0
|
||||
pages = grimoire
|
||||
page_idx = 1
|
||||
prev_page_idx = 1
|
||||
animations={}
|
||||
|
||||
current_recipe = pages[page_idx]
|
||||
|
||||
recipe_list_offset_x=30
|
||||
recipe_list_offset_y=8
|
||||
|
||||
function recipe_list_move_to(x1, y1, x2, y2)
|
||||
return {
|
||||
timer = 0,
|
||||
active=true,
|
||||
|
||||
before=function(s)
|
||||
recipe_list_offset_x = x1
|
||||
recipe_list_offset_y = y1
|
||||
sfx(2)
|
||||
end,
|
||||
|
||||
update=function(s)
|
||||
recipe_list_offset_x = x1 + (s.timer/0.2)*(x2-x1)
|
||||
recipe_list_offset_y = y1 + (s.timer/0.2)*(y2-y1)
|
||||
if s.timer > 0.2 then
|
||||
recipe_list_offset_x = x2
|
||||
recipe_list_offset_y = y2
|
||||
s.active=false
|
||||
end
|
||||
end,
|
||||
draw=function(s)
|
||||
end,
|
||||
}
|
||||
end
|
||||
|
||||
function recipe_list_move_out(x1, y1, x2, y2)
|
||||
new = recipe_list_move_to(x1, y1, x2, y2)
|
||||
new.draw = function(s)
|
||||
draw_paper(recipe_list_offset_x, recipe_list_offset_y, 140, 140)
|
||||
draw_recipe_on_paper(current_recipe, recipe_list_offset_x, recipe_list_offset_y)
|
||||
decorate_recipe_unfinished(current_recipe, recipe_list_offset_x, recipe_list_offset_y)
|
||||
end
|
||||
return new
|
||||
end
|
||||
|
||||
function flip_away(page)
|
||||
return {
|
||||
prev_page_idx = page,
|
||||
|
||||
timer = 0,
|
||||
active=true,
|
||||
|
||||
before=function(s)
|
||||
sfx(2)
|
||||
end,
|
||||
|
||||
update=function(s)
|
||||
if s.timer > 0.2 then s.active=false end
|
||||
end,
|
||||
draw=function(s)
|
||||
local page_flip = 600*s.timer
|
||||
local x = 30 + page_flip
|
||||
local y = 8 + 0.1*page_flip
|
||||
draw_paper(x,y, 140, 140)
|
||||
draw_recipe_on_paper(pages[s.prev_page_idx], x,y)
|
||||
decorate_recipe_unfinished(pages[s.prev_page_idx], x, y)
|
||||
end,
|
||||
}
|
||||
end
|
||||
|
||||
function flip_in(page, new_page)
|
||||
return {
|
||||
prev_page_idx = page,
|
||||
new_page_idx = new_page,
|
||||
|
||||
timer = 0,
|
||||
active=true,
|
||||
|
||||
before=function(s)
|
||||
sfx(2)
|
||||
end,
|
||||
|
||||
update=function(s)
|
||||
if s.timer >= 0.2 then s.active=false end
|
||||
end,
|
||||
draw=function(s)
|
||||
|
||||
draw_paper(30, 8, 140, 140)
|
||||
draw_recipe_on_paper(pages[s.prev_page_idx], 30, 8)
|
||||
decorate_recipe_unfinished(pages[s.prev_page_idx], 30, 8)
|
||||
|
||||
local page_flip = 600*(0.2-s.timer)
|
||||
local x = 30 + page_flip
|
||||
local y = 8 + 0.1*page_flip
|
||||
|
||||
draw_paper(x,y, 140, 140)
|
||||
draw_recipe_on_paper(pages[s.new_page_idx], x,y)
|
||||
decorate_recipe_unfinished(pages[s.new_page_idx], x, y)
|
||||
end
|
||||
}
|
||||
end
|
||||
|
||||
function pages_update()
|
||||
if btnp(0) and page_idx ~= 1 then
|
||||
animate(flip_away(page_idx))
|
||||
page_idx = page_idx - 1
|
||||
end
|
||||
|
||||
if btnp(1) and page_idx ~= #pages then
|
||||
animate(flip_in(page_idx, page_idx+1))
|
||||
page_idx = page_idx + 1
|
||||
end
|
||||
|
||||
if btnp(4) then
|
||||
change_screen(screen_crafting)
|
||||
current_recipe = pages[page_idx]
|
||||
end
|
||||
if btnp(5) then
|
||||
animate(recipe_list_move_out(30, 8, 30+80, 8+8))
|
||||
change_screen(screen_workbench)
|
||||
end
|
||||
|
||||
current_recipe = pages[page_idx]
|
||||
end
|
||||
|
||||
function pages_draw()
|
||||
cls()
|
||||
|
||||
draw_background()
|
||||
|
||||
draw_paper(recipe_list_offset_x, recipe_list_offset_y, 140, 140)
|
||||
draw_recipe_on_paper(current_recipe, recipe_list_offset_x, recipe_list_offset_y)
|
||||
decorate_recipe_unfinished(current_recipe, recipe_list_offset_x, recipe_list_offset_y)
|
||||
end
|
||||
|
||||
recipe_tutorial = {
|
||||
{phoebe_portrait, [[this is all my recipes. they each list what they need for ingredients.]]},
|
||||
{phoebe_portrait, [[go through them with left and right, or]]},
|
||||
{phoebe_portrait, [[press ❎ to back out to the workbench. 🅾️ will start crafting!!]]},
|
||||
}
|
||||
screen_recipe_list = {draw=pages_draw, update=pages_update}
|
||||
if not testing then
|
||||
screen_recipe_list = screen_conversation(recipe_tutorial,
|
||||
function()
|
||||
screen_recipe_list = {draw=pages_draw, update=pages_update}
|
||||
change_screen(screen_recipe_list)
|
||||
end,
|
||||
screen_recipe_list)
|
||||
end
|
34
screen_title.lua
Normal file
34
screen_title.lua
Normal file
@ -0,0 +1,34 @@
|
||||
function title_update()
|
||||
if btnp(4) then
|
||||
change_screen(screen_conversation({
|
||||
{phoebe_portrait, "hi! i'm phoebe! welcome to pilton!"},
|
||||
{phoebe_portrait, "this is a small town known for our fireworks festival."},
|
||||
{phoebe_portrait, "or we would be. my grandfather, the town's best alchemist, died suddenly and"},
|
||||
{phoebe_portrait, "hadn't taught me about fireworks. my mother is an adventurer instead"},
|
||||
{phoebe_portrait, "of learning alchemy, so now there's no one to carry on the tradition."},
|
||||
{phoebe_portrait, "the town's pretty broken up about it but i'm doing my best to carry on."},
|
||||
{phoebe_portrait, "but i just know the basics of picking herbs and purifying water."},
|
||||
},
|
||||
function() change_screen(screen_workbench) end,
|
||||
{update=walkaround_update, draw=walkaround_draw}))
|
||||
end
|
||||
end
|
||||
|
||||
r1, r2 = 0,0
|
||||
function title_draw()
|
||||
cls()
|
||||
local big = "\^t\^w"
|
||||
local t = "atelier phoebe"
|
||||
local co = 0
|
||||
local x = 10
|
||||
for i=1,#t do
|
||||
local c = sub(t, i, i)
|
||||
col = 9
|
||||
if (time()*2 + x/128) % 8 < 0.25 then
|
||||
col = 10
|
||||
end
|
||||
x = print(big .. c, x, 30 + sin(x/128+time()/4)*2, col)
|
||||
end
|
||||
end
|
||||
|
||||
screen_title = {update=title_update, draw=title_draw}
|
225
screen_walkaround.lua
Normal file
225
screen_walkaround.lua
Normal file
@ -0,0 +1,225 @@
|
||||
player_sprite_number = 48
|
||||
player_x, player_y = 24,16
|
||||
step_timer, stride_length = 0, 4
|
||||
|
||||
locations = {}
|
||||
|
||||
function crystals(story_state)
|
||||
add(inventory, make_item(library.item_blueprints.crystal))
|
||||
change_screen(screen_conversation({{phoebe_portrait, "my family makes things out of these crystals! i'll take one."}}))
|
||||
end
|
||||
locations["5,0"]=crystals
|
||||
locations["6,0"]=crystals
|
||||
|
||||
|
||||
function barrel(story_state)
|
||||
sfx(1)
|
||||
change_screen(screen_conversation({{phoebe_portrait, "it's a barrel!"}}))
|
||||
end
|
||||
locations["2,1"]=barrel
|
||||
locations["10,10"]=barrel
|
||||
|
||||
locations["3,1"]=function() -- the atelier!
|
||||
sfx(4)
|
||||
change_screen(screen_workbench)
|
||||
end
|
||||
locations["12,1"]=function() --at the well. give us ssome water
|
||||
add(inventory, make_item(library.item_blueprints.well_water))
|
||||
change_screen(screen_conversation({{phoebe_portrait, "slurp!"}}))
|
||||
toast("received water!")
|
||||
sfx(0)
|
||||
end
|
||||
|
||||
locations["3,10"] = script_charcoal_seller
|
||||
locations["11,5"] = script_neighbor
|
||||
locations["9,5"] = script_lenore
|
||||
locations["9,8"] = script_library
|
||||
locations["11,13"] = script_witch
|
||||
|
||||
function herbs(story_state)
|
||||
add(inventory, make_item(library.item_blueprints.herb))
|
||||
change_screen(screen_conversation({
|
||||
{phoebe_portrait, "ooh, healing herbs! i'll take some. not more than 1/3 the patch though!"}
|
||||
}))
|
||||
toast("received herbs!")
|
||||
end
|
||||
|
||||
locations["14,12"] = herbs
|
||||
locations["14,13"] = herbs
|
||||
locations["13,13"] = herbs
|
||||
locations["13,14"] = herbs
|
||||
|
||||
function beach(story_state)
|
||||
add(inventory, make_item(library.item_blueprints.sand))
|
||||
change_screen(screen_conversation({
|
||||
{phoebe_portrait, "how many grains of sand does it take before it becomes a pile?"}
|
||||
}))
|
||||
toast("received sand!")
|
||||
end
|
||||
|
||||
locations["3,15"] = beach
|
||||
locations["4,15"] = beach
|
||||
locations["5,15"] = beach
|
||||
locations["6,15"] = beach
|
||||
locations["7,15"] = beach
|
||||
|
||||
function interact(x, y)
|
||||
if testing then
|
||||
toast(x .. "," .. y)
|
||||
end
|
||||
result = locations[flr(x) .. "," .. flr(y)]
|
||||
if result ~= nil then result(story) end
|
||||
end
|
||||
|
||||
|
||||
function flags_from_xy(x, y)
|
||||
return fget(mget(x/8, 16+y/8))
|
||||
end
|
||||
|
||||
function walkaround_update()
|
||||
moved=false
|
||||
dx, dy = 0, 0
|
||||
if btn(0) then dx = -1 end
|
||||
if btn(1) then dx = 1 end
|
||||
if btn(2) then dy = -1 end
|
||||
if btn(3) then dy = 1 end
|
||||
|
||||
|
||||
if dx == -1 then flip_x, up, down = true, false, false end
|
||||
if dx == 1 then flip_x, up, down = false, false, false end
|
||||
if dy == -1 then up, down = true, false end
|
||||
if dy == 1 then up, down = false, true end
|
||||
if dx ~= 0 or dy ~= 0 then moved = true end
|
||||
|
||||
if testing then dx, dy = 2*dx, 2*dy end
|
||||
if flags_from_xy(player_x + dx, player_y + dy) & 0x80 == 0 then player_x, player_y = player_x + dx, player_y + dy end
|
||||
if testing then dx, dy = dx/2, dy/2 end
|
||||
|
||||
if moved then
|
||||
test_x, test_y = player_x + 8*dx, player_y + 8*dy
|
||||
elseif up then
|
||||
test_x, test_y = player_x, player_y - 8
|
||||
elseif down then
|
||||
test_x, test_y = player_x, player_y + 8
|
||||
elseif flip_x then
|
||||
test_x, test_y = player_x - 8, player_y
|
||||
else
|
||||
test_x, test_y = player_x + 8, player_y
|
||||
end
|
||||
|
||||
if btnp(4) then interact(test_x/8, test_y/8) end
|
||||
|
||||
end
|
||||
function walkaround_draw()
|
||||
cls()
|
||||
rectfill(8,8,120,120,3)
|
||||
map(0,16,0,0,16,16) -- draw the town map
|
||||
update_player_sprite()
|
||||
|
||||
spr(player_sprite_number, player_x-4, player_y-8, 1,1, flip_x)
|
||||
map(0,16,0,0,16,16, 0x40) -- redraw the tiles which are supposed to appear over the player! (flag 6)
|
||||
end
|
||||
function update_player_sprite()
|
||||
if up then player_sprite_number = 52 + (player_sprite_number % 2)
|
||||
elseif down then player_sprite_number = 50 + (player_sprite_number % 2)
|
||||
else player_sprite_number = 48 + (player_sprite_number % 2) end
|
||||
|
||||
if moved then
|
||||
step_timer += 1
|
||||
if step_timer > stride_length then
|
||||
step_timer = 0
|
||||
if player_sprite_number % 2 == 0 then player_sprite_number += 1
|
||||
elseif player_sprite_number % 2 ~= 0 then player_sprite_number -= 1 end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
screen_walkaround = {update=walkaround_update, draw=walkaround_draw}
|
||||
if not testing then
|
||||
screen_walkaround = screen_conversation({
|
||||
{phoebe_portrait, [[oh, and this is the town! all sorts of things to do here.]]},
|
||||
{phoebe_portrait, [[like i could go get water from the well to the east,]]},
|
||||
{phoebe_portrait, [[or go pick up some charcoal from the red house to the southwest!]]},
|
||||
{phoebe_portrait, [[just face a building and press ❎!]]}
|
||||
},
|
||||
function()
|
||||
screen_walkaround = {draw=walkaround_draw, update=walkaround_update}
|
||||
change_screen(screen_walkaround)
|
||||
end,
|
||||
screen_walkaround)
|
||||
end
|
||||
|
||||
fireworks = {}
|
||||
stars = {}
|
||||
drag = 0.1
|
||||
fireworks_frequency = 8
|
||||
function fireworks_update()
|
||||
walkaround_update()
|
||||
|
||||
new_fireworks = {}
|
||||
new_stars = {}
|
||||
|
||||
if rnd(100) < fireworks_frequency then add(new_fireworks, new_firework()) end
|
||||
|
||||
for f in all(fireworks) do
|
||||
velocity = sqrt(f.vx*f.vx + f.vy*f.vy)
|
||||
f.x = f.x + f.vx
|
||||
f.y = f.y + f.vy
|
||||
f.vx = f.vx*(1-drag*velocity)
|
||||
f.vy = f.vy*(1-drag*velocity)
|
||||
if velocity < 0.2 then
|
||||
for i=1,10 do
|
||||
add(new_stars,new_star(f))
|
||||
end
|
||||
else
|
||||
add(new_fireworks, f)
|
||||
end
|
||||
end
|
||||
|
||||
for s in all(stars) do
|
||||
velocity = sqrt(s.vx*s.vx + s.vy*s.vy)
|
||||
s.x = s.x + s.vx
|
||||
s.y = s.y + s.vy
|
||||
s.vx = s.vx*(1-drag*velocity)
|
||||
s.vy = s.vy*(1-drag*velocity)
|
||||
if velocity > 0.2 then
|
||||
add(new_stars, s)
|
||||
end
|
||||
end
|
||||
|
||||
fireworks = new_fireworks
|
||||
stars = new_stars
|
||||
end
|
||||
|
||||
function new_firework()
|
||||
return {
|
||||
alive=true,
|
||||
x=rnd(128),
|
||||
y=rnd(112)+16,
|
||||
vx=rnd(0.4)-0.2,
|
||||
vy=-5+rnd(1),
|
||||
c=rnd({10, 8, 7})
|
||||
}
|
||||
end
|
||||
function new_star(t)
|
||||
z = rnd(2)
|
||||
return {
|
||||
alive=true,
|
||||
x=t.x,
|
||||
y=t.y,
|
||||
vx = sin(z)*2,
|
||||
vy = cos(z)*2,
|
||||
c=t.c
|
||||
}
|
||||
end
|
||||
|
||||
function fireworks_draw()
|
||||
walkaround_draw()
|
||||
|
||||
for f in all(fireworks) do
|
||||
circfill(f.x, f.y, 1, f.c)
|
||||
end
|
||||
for s in all(stars) do
|
||||
circfill(s.x, s.y, 1, s.c)
|
||||
end
|
||||
end
|
55
screen_workbench.lua
Normal file
55
screen_workbench.lua
Normal file
@ -0,0 +1,55 @@
|
||||
page_flip = 0
|
||||
timer = 0
|
||||
|
||||
function bench_update()
|
||||
if btnp(0) then
|
||||
animate(letters_move_to(-10-80, 8+8, -10, 8))
|
||||
change_screen(screen_letters)
|
||||
end
|
||||
if btnp(1) then
|
||||
animate(recipe_list_move_to(30+80, 8+8, 30, 8))
|
||||
change_screen(screen_recipe_list)
|
||||
end
|
||||
if btnp(2) then
|
||||
animate(inventory_slide(0, inventory_drawer_height_max))
|
||||
change_screen(screen_inventory)
|
||||
end
|
||||
if btnp(5) then
|
||||
sfx(4)
|
||||
change_screen(screen_walkaround)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function bench_draw()
|
||||
cls()
|
||||
|
||||
draw_background()
|
||||
|
||||
current_recipe = pages[page_idx]
|
||||
|
||||
outwards_x = 80
|
||||
outwards_y = outwards_x/10
|
||||
draw_paper(30+outwards_x, 8+outwards_y, 128, 128)
|
||||
draw_recipe_on_paper(current_recipe, 30+outwards_x, 8+outwards_y)
|
||||
decorate_recipe_unfinished(current_recipe, 30+outwards_x, 8+outwards_y)
|
||||
|
||||
draw_paper(-10-outwards_x, 8+outwards_y, 128, 128)
|
||||
draw_letter_on_paper(letters[letter_idx], 4-outwards_x, 12+outwards_y)
|
||||
|
||||
draw_drawer()
|
||||
end
|
||||
|
||||
screen_workbench = {draw=bench_draw, update=bench_update}
|
||||
if not testing then
|
||||
screen_workbench = screen_conversation({
|
||||
{phoebe_portrait, [[this is my workbench.]]},
|
||||
{phoebe_portrait, [[if you press left or right you can see my letters or recipes.]]},
|
||||
{phoebe_portrait, [[then press ❎ to get back to the workbench.]]},
|
||||
},
|
||||
function()
|
||||
screen_workbench = {draw=bench_draw, update=bench_update}
|
||||
change_screen(screen_workbench)
|
||||
end,
|
||||
screen_workbench)
|
||||
end
|
58
script_charcoal_seller.lua
Normal file
58
script_charcoal_seller.lua
Normal file
@ -0,0 +1,58 @@
|
||||
function script_charcoal_seller(s) -- the brick house!
|
||||
if s.main == 1 or s.main == 2 or s.main == 3 or s.main == 4 or s.main == 5 or s.main == 6 then
|
||||
if not s.hans_talked then
|
||||
change_screen(screen_conversation({
|
||||
{seller_portrait, "hey phoebe. if your family's not doing the festival this year"},
|
||||
{seller_portrait, "you don't need the whole bulk order of charcoal, right?"},
|
||||
{phoebe_portrait, "yeah."},
|
||||
{seller_portrait, "well, you can take as much as you need.", function()
|
||||
add(inventory, make_item(library.item_blueprints.charcoal))
|
||||
toast("received charcoal!")
|
||||
end},
|
||||
}))
|
||||
s.hans_talked = true
|
||||
else
|
||||
change_screen(screen_conversation({
|
||||
{seller_portrait, "hey phoebe. charcoal's out back.", function()
|
||||
add(inventory, make_item(library.item_blueprints.charcoal))
|
||||
toast("received charcoal!")
|
||||
end},
|
||||
}))
|
||||
end
|
||||
elseif s.main == 7 then
|
||||
if s.branch_hans == 1 then
|
||||
change_screen(screen_conversation({
|
||||
{seller_portrait, "look, if you get me the fireworks, i can set up a show. three boxes should do it."}
|
||||
}))
|
||||
s.branch_hans = 2
|
||||
elseif s.branch_hans == 2 then
|
||||
fireworks = player_has("fireworks", 3)
|
||||
if fireworks == nil then
|
||||
change_screen(screen_conversation({
|
||||
{seller_portrait, "i need three boxes of fireworks if we're gonna do a show."}
|
||||
}))
|
||||
else
|
||||
change_screen(screen_conversation({
|
||||
{seller_portrait, "this looks good. fantastic quality."},
|
||||
{seller_portrait, "i'll set up the show and meet you at the library for viewing!"},
|
||||
}))
|
||||
|
||||
for x in all(fireworks) do del(inventory, x) end
|
||||
s.branch_hans = 3
|
||||
if s.branch_hans == 3 and s.branch_lenore == 3 and s.branch_brigitte == 2 then
|
||||
s.main = 8
|
||||
end
|
||||
end
|
||||
elseif s.branch_hans == 3 then
|
||||
change_screen(screen_conversation({
|
||||
{seller_portrait, "i'll meet you at the library for viewing when you're ready."},
|
||||
}))
|
||||
end -- end hans branch
|
||||
elseif story_state.main == 8 then
|
||||
change_screen(screen_conversation({
|
||||
{seller_portrait, "i'll meet you at the library for watching the fireworks!"},
|
||||
}))
|
||||
elseif story_state.main == 9 then
|
||||
change_screen(screen_conversation({{door_portrait, "[no one is here.]"}}))
|
||||
end
|
||||
end
|
76
script_lenore.lua
Normal file
76
script_lenore.lua
Normal file
@ -0,0 +1,76 @@
|
||||
function script_lenore(story_state)
|
||||
if story_state.main == 1 then
|
||||
water = player_has(library.recipes.distilled_water.title)
|
||||
if water == nil then
|
||||
change_screen(screen_conversation({
|
||||
{phoebe_portrait, [[hi lenore!]]},
|
||||
{lenore_portrait, [[hey alchemist. did you get my letter?]]},
|
||||
{phoebe_portrait, [[ah! i haven't gotten around to it but i'll get right on it!]]},
|
||||
{lenore_portrait, [[thanks, kid.]]}
|
||||
}))
|
||||
else
|
||||
change_screen(screen_conversation({
|
||||
{phoebe_portrait, [[hey lenore! here's the clean water you requested!]]},
|
||||
{lenore_portrait, [[thanks, kid. there's one other thing.]]},
|
||||
{lenore_portrait, [[my usual pharmacist is on vacation.]]},
|
||||
{lenore_portrait, [[think you could take this recipe and make a potion for a patient?]]},
|
||||
{lenore_portrait, [[she lives in the house with a red roof just to the east of here.]]},
|
||||
{lenore_portrait, [[there should be healing herbs southeast of here.]]},
|
||||
{lenore_portrait, [[oh, and by the way -- here's that reagent i promised you.]]},
|
||||
{phoebe_portrait, [[do you have a recipe for reagent? i'd love to learn to make it!]]},
|
||||
{lenore_portrait, [[yeah, sure. you start by doing this...]], function()
|
||||
del(inventory, water)
|
||||
add(inventory, make_item(library.item_blueprints.reagent))
|
||||
add(grimoire, library.recipes.reagent)
|
||||
toast("received reagent recipe!")
|
||||
end}
|
||||
}))
|
||||
story_state.main = 2
|
||||
end
|
||||
elseif story_state.main == 2 then
|
||||
change_screen(screen_conversation({
|
||||
{lenore_portrait, [[you get that potion to my patient? red roof to the east.]]}
|
||||
}))
|
||||
elseif story_state.main == 3 then
|
||||
change_screen(screen_conversation({{lenore_portrait, [[thanks for helping out my patient.]]}}))
|
||||
elseif story_state.main == 4 or story_state.main == 5 or story_state.main == 6 then
|
||||
change_screen(screen_conversation({
|
||||
{lenore_portrait, [[hey phoebe. any aches or pains?]]},
|
||||
{phoebe_portrait, [[i'm in tip-top shape!]]},
|
||||
}))
|
||||
elseif story_state.main == 7 then
|
||||
if story_state.branch_lenore == 1 then
|
||||
change_screen(screen_conversation({
|
||||
{lenore_portrait, [[whoa, you can't just set off fireworks willy-nilly. get me 3 clean bandages and a distilled water.]]},
|
||||
{lenore_portrait, [[you can't do something as dangerous as fireworks without being prepared for the worst.]]},
|
||||
{phoebe_portrait, [[you got it!!]]},
|
||||
}))
|
||||
story_state.branch_lenore = 2
|
||||
elseif story_state.branch_lenore == 2 then
|
||||
local bandages = player_has("bandages", 3)
|
||||
local water = player_has("distilled water")
|
||||
if bandages == nil or water == nil then
|
||||
change_screen(screen_conversation({
|
||||
{lenore_portrait, [[i need 3 clean bandages and a distilled water.]]}
|
||||
}))
|
||||
else
|
||||
change_screen(screen_conversation({
|
||||
{lenore_portrait, [[thanks. this looks good. i'll meet you at the library for viewing when you're ready.]]}
|
||||
}))
|
||||
for x in all(bandages) do del(inventory, x) end
|
||||
del(inventory, water)
|
||||
|
||||
story_state.branch_lenore = 3
|
||||
if story_state.branch_hans == 3 and story_state.branch_lenore == 3 and story_state.branch_brigitte == 2 then
|
||||
story_state.main = 8
|
||||
end
|
||||
end
|
||||
elseif story_state.branch_lenore == 3 then
|
||||
change_screen(screen_conversation({{lenore_portrait, [[i'll meet you at the library for viewing when you're ready.]]}}))
|
||||
end -- lenore branch finished
|
||||
elseif story_state.main == 8 then
|
||||
change_screen(screen_conversation({{lenore_portrait, [[i'll see you at the library for viewing the festival!]]}}))
|
||||
elseif story_state.main == 9 then
|
||||
change_screen(screen_conversation({{door_portrait, "[no one is here.]"}}))
|
||||
end
|
||||
end
|
85
script_library.lua
Normal file
85
script_library.lua
Normal file
@ -0,0 +1,85 @@
|
||||
function script_library(s)
|
||||
if s.main == 1 or s.main == 2 or s.main == 3 then
|
||||
change_screen(screen_conversation({
|
||||
{librarian_portrait, [[hey phoebe. looking for any book in particular today?]]},
|
||||
{phoebe_portrait, [[just browsing!]]}
|
||||
}))
|
||||
elseif s.main == 4 then
|
||||
if not s.got_gunpowder_book then
|
||||
change_screen(screen_conversation({
|
||||
{librarian_portrait, [[explosives, huh. well, this might help you out?]]},
|
||||
{phoebe_portrait, [[oh, a chemistry manual? hmm... black powder...]]},
|
||||
{phoebe_portrait, [[and i could... yes, i think i can use this to make gunpowder! maybe more!]]},
|
||||
{phoebe_portrait, [[thank you so much stef!!!]]}
|
||||
}))
|
||||
add(grimoire, library.recipes.gunpowder)
|
||||
add(grimoire, library.recipes.bomb)
|
||||
toast("received recipes!")
|
||||
s.got_gunpowder_book = true
|
||||
else
|
||||
change_screen(screen_conversation({
|
||||
{librarian_portrait, [[did that book help?]]},
|
||||
{phoebe_portrait, [[you betcha!]]}
|
||||
}))
|
||||
end
|
||||
elseif s.main == 5 then
|
||||
change_screen(screen_conversation({
|
||||
{librarian_portrait, [[hey phoebe. looking for any book in particular today?]]},
|
||||
{phoebe_portrait, [[just browsing!]]}
|
||||
}))
|
||||
elseif s.main == 6 then
|
||||
if not s.got_crystal_book then
|
||||
change_screen(screen_conversation({
|
||||
{phoebe_portrait, [[stef! i need books about crystals! how to make them!]]},
|
||||
{librarian_portrait, [[gems, huh? let me check...]]},
|
||||
{librarian_portrait, [[here, does this help?]]},
|
||||
{phoebe_portrait, [[yes, this is perfect! let's see...]]},
|
||||
{phoebe_portrait, "hmm..."},
|
||||
{phoebe_portrait, "hmm... \nhmm..."},
|
||||
{phoebe_portrait, "hmm... \nhmm... \nhmm..."},
|
||||
{phoebe_portrait, [[okay so i need raw crystal, polishing powder, and reagent.]], function()
|
||||
add(grimoire, library.recipes.starshine_crystal)
|
||||
add(grimoire, library.recipes.polishing_powder)
|
||||
end},
|
||||
{phoebe_portrait, [[i can get crystal from the cliffs, sand from the beach, it's got a recipe for]]},
|
||||
{phoebe_portrait, [[polishing powder...]]},
|
||||
}))
|
||||
s.got_crystal_book = true
|
||||
else
|
||||
change_screen(screen_conversation({
|
||||
{phoebe_portrait, "thanks for the book, \nstef!"},
|
||||
{librarian_portrait, [[that's my job!]]},
|
||||
}))
|
||||
end
|
||||
elseif s.main == 7 then
|
||||
change_screen(screen_conversation({
|
||||
{librarian_portrait, "fireworks festival,\nhuh? well, the library\nwill be a great\nplace to watch from!"}
|
||||
}))
|
||||
elseif s.main == 8 or s.main == 9 then
|
||||
change_screen(screen_conversation({
|
||||
{librarian_portrait, [[a fireworks festival after all, huh?]]},
|
||||
{neighbor_portrait, [[i thought it was done for after the old alchemist passed away, rest his soul.]]},
|
||||
{seller_portrait, [[well it looks like phoebe took up the reins!]]},
|
||||
{phoebe_portrait, [[aw shucks!]]},
|
||||
{lenore_portrait, [[thanks for making this happen, lil alchemist.]]},
|
||||
{neighbor_portrait, [[thanks, phoebe!]]},
|
||||
{seller_portrait, [[thanks, phoebe.]]},
|
||||
{phoebe_portrait, [[thank you all for helping out so much. i couldn't have done it without you.]]},
|
||||
{phoebe_portrait, [[and thank you, player, for playing my game!~]]}
|
||||
}, nil, {update=fireworks_update, draw=fireworks_draw}))
|
||||
screen_walkaround = {update=fireworks_update, draw=fireworks_draw}
|
||||
screen_workbench = screen_conversation({
|
||||
{phoebe_portrait, "thank you for completing atelier phoebe!"},
|
||||
{phoebe_portrait, "this was a labor of love and bafflement."},
|
||||
{phoebe_portrait, "why did i make an atelier fangame in pico-8? i couldn't tell you."},
|
||||
{phoebe_portrait, "but i hope you enjoyed it! you can find me online as shoofle"},
|
||||
{phoebe_portrait, "lately i spend my time @shoofle@beach.city."},
|
||||
{phoebe_portrait, "gimme a shout if you enjoyed atelier phoebe!"},
|
||||
},
|
||||
function()
|
||||
screen_workbench = {update=workbench_update, draw=workbench_draw}
|
||||
change_screen(screen_workbench)
|
||||
end,
|
||||
screen_workbench)
|
||||
end
|
||||
end
|
86
script_neighbor.lua
Normal file
86
script_neighbor.lua
Normal file
@ -0,0 +1,86 @@
|
||||
function script_neighbor(s)
|
||||
if s.main == 1 then
|
||||
change_screen(screen_conversation({{door_portrait, "[you hear the sound of groaning from inside.]"}}))
|
||||
end
|
||||
if s.main == 2 then
|
||||
potion = player_has("potion")
|
||||
if potion == nil then
|
||||
change_screen(screen_conversation({{door_portrait, "[you hear the sound of groaning from inside.]"}}))
|
||||
else
|
||||
change_screen(screen_conversation({
|
||||
{phoebe_portrait, [[hello! i was asked to bring you a potion!]]},
|
||||
{neighbor_portrait, [[oh my goodness! that's so kind. i injured my back trying to get a rock out]]},
|
||||
{neighbor_portrait, [[of my farm. this potion will fix me right up.]]},
|
||||
{neighbor_portrait, [[... hey, you're an alchemist, right?]]},
|
||||
{phoebe_portrait, [[of course!]]},
|
||||
{neighbor_portrait, [[i've heard that alchemists can make explosives. a bomb could get rid of]]},
|
||||
{neighbor_portrait, [[that boulder in my field. do you think you could bring me one?]]},
|
||||
{phoebe_portrait, [[my grandfather never taught me to make explosives,]]},
|
||||
{phoebe_portrait, "because they're dangerous."},
|
||||
{neighbor_portrait, [[damn. maybe the witch knows how to make them? she knows all sorts of things.]]},
|
||||
{phoebe_portrait, [[i'll have to ask!]]},
|
||||
{neighbor_portrait, [[she lives in the tower southeast of town, i think!]]},
|
||||
}))
|
||||
del(inventory, potion)
|
||||
s.main = 3
|
||||
end
|
||||
elseif s.main == 3 then
|
||||
change_screen(screen_conversation({
|
||||
{neighbor_portrait, [[did the witch give you the recipe?]]},
|
||||
{phoebe_portrait, [[not yet!]]}
|
||||
}))
|
||||
elseif s.main == 4 then
|
||||
local bomb = player_has("bomb")
|
||||
if bomb == nil then
|
||||
change_screen(screen_conversation({
|
||||
{neighbor_portrait, [[did the witch give you the recipe?]]},
|
||||
{phoebe_portrait, [[no and actually she was really rude about it!]]},
|
||||
}))
|
||||
else
|
||||
change_screen(screen_conversation({
|
||||
{phoebe_portrait, [[this bomb should break up a rock! be very safe with it.]]},
|
||||
{neighbor_portrait, [[oh wow, thank you so much! i will be far away when it goes off.]]},
|
||||
{neighbor_portrait, [[so how did you convince the witch to give you the recipe?]]},
|
||||
{phoebe_portrait, [[i didn't! she was incredibly rude and basically told me to fuck off!]]},
|
||||
{neighbor_portrait, [[huh, i wonder what bee's in her bonnet.]]},
|
||||
{phoebe_portrait, [[she kept talking about how there's no great alchemy left in pilton.]]},
|
||||
{neighbor_portrait, [[maybe what she needs is someone to impress her.]]}
|
||||
}))
|
||||
del(inventory, bomb)
|
||||
s.main = 5
|
||||
end
|
||||
elseif s.main == 5 then
|
||||
change_screen(screen_conversation({
|
||||
{neighbor_portrait, [[that witch soften up yet?]]},
|
||||
{phoebe_portrait, [[grrrr!]]}
|
||||
}))
|
||||
elseif s.main == 6 then
|
||||
change_screen(screen_conversation({
|
||||
{neighbor_portrait, [[that bomb worked a treat on my boulder problem!]]},
|
||||
{phoebe_portrait, [[hooray!]]}
|
||||
}))
|
||||
elseif s.main == 7 then
|
||||
if s.branch_brigitte == 1 then
|
||||
change_screen(screen_conversation({
|
||||
{neighbor_portrait, [[the fireworks festival? on my farm? you betcha!]]},
|
||||
{neighbor_portrait, [[since harvest is over it's totally free!]]},
|
||||
{phoebe_portrait, [[yippee!]]},
|
||||
}))
|
||||
s.branch_brigitte = 2
|
||||
if s.branch_brigitte == 2 and s.branch_lenore == 3 and s.branch_hans == 3 then
|
||||
s.branch_main = 8
|
||||
end
|
||||
elseif s.branch_brigitte == 2 then
|
||||
change_screen(screen_conversation({
|
||||
{neighbor_portrait, [[meet up at the library for viewing, right?]]}
|
||||
}))
|
||||
|
||||
end
|
||||
elseif s.main == 8 then
|
||||
change_screen(screen_conversation({
|
||||
{neighbor_portrait, [[meetchya at the library for watching the fireworks!]]}
|
||||
}))
|
||||
elseif s.main == 9 then
|
||||
change_screen(screen_conversation({{door_portrait, "[no one is here.]"}}))
|
||||
end
|
||||
end
|
74
script_witch.lua
Normal file
74
script_witch.lua
Normal file
@ -0,0 +1,74 @@
|
||||
function script_witch(s)
|
||||
if s.main == 1 or s.main == 2 then
|
||||
change_screen(screen_conversation({{door_portrait, "[there is no answer to your knocking.]"}}))
|
||||
elseif s.main == 3 then
|
||||
change_screen(screen_conversation({
|
||||
{phoebe_portrait, "excuse me! i would like to know how to make explosives!"},
|
||||
{witch_portrait, [[this town is dead. i can make no explosions. the alchemy of pilton has died.]]},
|
||||
{witch_portrait, [[try as you might, phoebe, you aren't your grandfather.]]},
|
||||
{witch_portrait, [[this town is a husk of what it once was. ]]},
|
||||
{witch_portrait, [[i am done teaching.]]},
|
||||
{witch_portrait, [[if you want alchemy, go read at the library in the middle of town.]]},
|
||||
{witch_portrait, [[i have no time for this.]], function()
|
||||
sfx(4)
|
||||
end},
|
||||
{door_portrait, "i have no time for this."},
|
||||
{phoebe_portrait, "... huh!"},
|
||||
}))
|
||||
s.main = 4
|
||||
elseif s.main == 4 then
|
||||
change_screen(screen_conversation({{door_portrait, "[there is no answer to your knocking.]"}}))
|
||||
elseif s.main == 5 then
|
||||
change_screen(screen_conversation({
|
||||
{phoebe_portrait, "hey! witch!"},
|
||||
{door_portrait, "my name is agnes."},
|
||||
{phoebe_portrait, "i figured out how to make gunpowder. suck on that."},
|
||||
{witch_portrait, "big whoop. you still know nothing."},
|
||||
{witch_portrait, "no one in this town knows the art of alchemy."},
|
||||
{phoebe_portrait, "there's you! you know it!"},
|
||||
{witch_portrait, "pah. no one of your generation knows the ways."},
|
||||
{phoebe_portrait, "well maybe if someone would teach us-"},
|
||||
{witch_portrait, "maybe if you showed any promise i could teach you."},
|
||||
{witch_portrait, "your generation has forgotten the ways of old."},
|
||||
{phoebe_portrait, "grrrr, you old hag!"},
|
||||
{witch_portrait, "hm."},
|
||||
{witch_portrait, "..."},
|
||||
{witch_portrait, "bring me a starshine gem. it must carry the red and shiny traits."},
|
||||
{witch_portrait, "if you can do this, i might consider you to have potential."},
|
||||
}))
|
||||
s.main = 6
|
||||
elseif s.main == 6 then
|
||||
local crystal = player_has("starshine")
|
||||
if crystal == nil then
|
||||
change_screen(screen_conversation({
|
||||
{door_portrait, "[there is no answer to your knocking.]"}
|
||||
}))
|
||||
else
|
||||
change_screen(screen_conversation({
|
||||
{witch_portrait, "hm. this is... passable. it's passable enough that I will help you."},
|
||||
{witch_portrait, "my bones are too tired to keep up this fight."},
|
||||
{witch_portrait, "i can teach you to make fireworks."},
|
||||
{phoebe_portrait, "fireworks! the festival?!"},
|
||||
{witch_portrait, "a festival is more than just a box of fireworks."},
|
||||
{witch_portrait, "hm. this is a bad idea.", function()
|
||||
sfx(4)
|
||||
add(grimoire, library.recipes.fireworks)
|
||||
toast("received recipe!")
|
||||
end},
|
||||
{door_portrait, "hm. this is a bad idea."},
|
||||
{phoebe_portrait, "wow, she's so awful!"},
|
||||
{door_portrait, "i can hear you out there."},
|
||||
{phoebe_portrait, "keep it down, i'm thinking."},
|
||||
{phoebe_portrait, "a fireworks festival! that would be so incredible!"},
|
||||
{phoebe_portrait, "but she's right. i'll have to call in favors."},
|
||||
{phoebe_portrait, "okay. i can make this happen."},
|
||||
{phoebe_portrait, "hans the charcoal seller used to set up the show."},
|
||||
{phoebe_portrait, "i have to talk to lenore about safety."},
|
||||
{phoebe_portrait, "and i should ask brigitte if we can use her farm!"},
|
||||
}))
|
||||
s.main = 7
|
||||
end
|
||||
elseif s.main == 8 or s.main == 9 then
|
||||
change_screen(screen_conversation({witch_portrait, "thank you."}))
|
||||
end
|
||||
end
|
145
utils.lua
Normal file
145
utils.lua
Normal file
@ -0,0 +1,145 @@
|
||||
|
||||
function animate(animation)
|
||||
add(animations, animation, 1)
|
||||
animation.before()
|
||||
end
|
||||
|
||||
function contains(haystack, needle)
|
||||
for h in all(haystack) do
|
||||
if needle == h then return true end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function deepcopy(orig)
|
||||
local orig_type = type(orig)
|
||||
local copy
|
||||
if orig_type == 'table' then
|
||||
copy = {}
|
||||
for orig_key, orig_value in next, orig, nil do
|
||||
copy[deepcopy(orig_key)] = deepcopy(orig_value)
|
||||
end
|
||||
setmetatable(copy, deepcopy(getmetatable(orig)))
|
||||
else -- number, string, boolean, etc
|
||||
copy = orig
|
||||
end
|
||||
return copy
|
||||
end
|
||||
|
||||
function filter_list(arr, func)
|
||||
new = {}
|
||||
|
||||
for old_index, v in ipairs(arr) do
|
||||
if func(v, old_index) then add(new, v) end
|
||||
end
|
||||
|
||||
return new
|
||||
end
|
||||
|
||||
function player_has(requirement, count)
|
||||
if count == nil then count = 1 end
|
||||
output = {}
|
||||
for x in all(inventory) do
|
||||
if x.title == requirement or contains(x.tags, requirement) then
|
||||
if count == 1 then return x end
|
||||
add(output, x)
|
||||
end
|
||||
end
|
||||
if #output >= count then
|
||||
return filter_list(output, function(x,i) return i<=count end)
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
function make_item(blueprint)
|
||||
--if blueprint.description == nil then
|
||||
-- blueprint = library.item_blueprints[blueprint]
|
||||
--end
|
||||
|
||||
item = deepcopy(blueprint)
|
||||
--item.sprite_recolor = blueprint.sprite_recolor
|
||||
--item.sprite = blueprint.sprite
|
||||
--item.title = blueprint.title
|
||||
--item.description = blueprint.description
|
||||
item.quality = flr(blueprint.quality_base + rnd(blueprint.quality_range))
|
||||
item.tags = deepcopy(blueprint.tags)
|
||||
item.traits = {}
|
||||
if rnd(100) < blueprint.trait_chance then
|
||||
add(item.traits, rnd(blueprint.trait_pool))
|
||||
end
|
||||
if rnd(100) < blueprint.trait_chance then
|
||||
add(item.traits, rnd(blueprint.trait_pool))
|
||||
end
|
||||
return item
|
||||
end
|
||||
|
||||
function at(trait, x,y)
|
||||
if (x < 0) return false
|
||||
if (x > trait[4]) return false
|
||||
if (y < 0) return false
|
||||
if (y > trait[4]) return false
|
||||
return mget(trait[2]+x, trait[3]+y) ~= 0
|
||||
end
|
||||
|
||||
function at_absolute(trait, x,y)
|
||||
return at(trait.trait, x-trait.x, y-trait.y)
|
||||
end
|
||||
|
||||
function overlaps(trait1, trait2)
|
||||
t1_width = trait1.trait[4]
|
||||
t1_height = trait1.trait[5]
|
||||
for i=0,(t1_width-1) do
|
||||
for j=0,(t1_height-1) do
|
||||
x = trait1.x + i
|
||||
y = trait1.y + j
|
||||
if at_absolute(trait1, x, y) and at_absolute(trait2, x, y) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function change_screen(new_screen)
|
||||
prev_screen = current_screen
|
||||
if new_screen.before ~= nil then
|
||||
new_screen.before()
|
||||
end
|
||||
current_screen = new_screen
|
||||
end
|
||||
|
||||
-- add newlines to a string to fit it into lines.
|
||||
function wrap(str, line_length)
|
||||
-- thanks to https://stackoverflow.com/questions/17586/best-word-wrap-algorithm, i did not feel like thinking this out myself
|
||||
words = split(str, " ", false)
|
||||
output = ""
|
||||
|
||||
local current_line_length = 0
|
||||
for w in all(words) do
|
||||
while sub(w, 1, 1) == "\n" do
|
||||
output = output .. "\n"
|
||||
current_line_length = 0
|
||||
w = sub(w, 2)
|
||||
end
|
||||
if current_line_length + #w > line_length then
|
||||
if current_line_length > 0 then
|
||||
output = output .. "\n"
|
||||
current_line_length = 0
|
||||
end
|
||||
|
||||
while #w > line_length do
|
||||
output = output .. sub(w, 1, line_length) .. "-\n"
|
||||
w = sub(w, line_length)
|
||||
current_line_length = 0
|
||||
end
|
||||
|
||||
while w[1] == " " do
|
||||
w = sub(w, 2)
|
||||
end
|
||||
end
|
||||
|
||||
output = output .. w .. " "
|
||||
current_line_length += #w + 1
|
||||
end
|
||||
return output
|
||||
end
|
Loading…
Reference in New Issue
Block a user