-
Notifications
You must be signed in to change notification settings - Fork 0
/
harbinger.p8
1051 lines (937 loc) · 40.5 KB
/
harbinger.p8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
pico-8 cartridge // http://www.pico-8.com
version 33
__lua__
-- init
--[[
ideas for later:
* make enemies randomly spawn.
should they spawn anywhere?
or only where placed on map?
maybe they should only spawn
when you reveal them on the
map? unclear.
* energy bar on banner right.
apples/etc increase energy.
what uses energy up? maybe
running? throwing swords?
we'd also need to have apples
respawn so you don't run out
of energy for basic needs.
* turn the blue treasure chest
into a cape since sarah thinks
it looks like one when the guy
walks over it.
what can it do? maybe fly over
solid objects for 400 ticks?
--]]
hero = {
hp=3,
strength=1,
enemies=0,
keys=0,
x=0,
y=0,
mx=0,
my=0,
dx=0,
dy=1,
vx=0,
vy=0,
maxv=1,
maxv1=1,
maxv2=2,
movv=0.5,
boat=false,
moving=false,
blinkmode=0,
invincible=false,
}
key=nil
fairie=nil
items={}
anims={}
debug=true
heartanim=0
t=0
shot=nil
message = nil
signs = {
{14,7,'hai how are you doing sarah girl?'},
{11,11,'hi'},
{23,10,'this is a super long message with lots of really long words and things'},
{21,22,'😐 < wanted: link the wanted soldier!'},
{105,61,"🐱 castle of fire 🐱"},
{123,56,"🐱 destroy the roaming enemies 🐱"},
{112,43,"🐱 arsenal 🐱"},
{125,38,"🐱 view point 🐱"},
{118,44,"🐱 castle garden 🐱"},
{79,45,"🐱 hint 🐱 you can go in some walls"},
}
function _init()
get_initial()
load_items()
music()
end
function get_initial()
for x = 0, 127 do
for y = 0, 63 do
local s = mget(x,y)
if s == 1 then
local rs = mget(x+1,y)
mset(x,y,rs)
hero.x = x * 8
hero.y = y * 8
return
end
end
end
end
function load_items()
for x = 0, 127 do
for y = 0, 63 do
local s = mget(x,y)
if fget(s, 2) then
local rs = mget(x+1,y)
mset(x,y,rs)
add(items,{
x=x*8,
y=y*8,
t='heart',
s1=s,
s2=s+1,
})
elseif fget(s, 3) then
local rs = mget(x+1,y)
mset(x,y,rs)
add(items,{
x=x*8,
y=y*8,
mx=0,
my=0,
dx=0,
dy=1,
vx=0,
vy=0,
maxv=2,
movv=0.5,
t='enemy',
hp=3,
s1=s,
s2=s+1,
})
elseif fget(s, 4) then
local rs = mget(x+1,y)
mset(x,y,rs)
add(items,{
x=x*8,
y=y*8,
t='powerup',
s1=s,
s2=s+1,
})
elseif fget(s, 5) then
local rs = mget(x+1,y)
mset(x,y,rs)
add(items,{
x=x*8,
y=y*8,
t='boat',
s1=s,
s2=s+1,
})
elseif fget(s, 7) then
local rs = mget(x+1,y)
mset(x,y,rs)
add(items,{
x=x*8,
y=y*8,
t='portal',
s1=s,
s2=s+1,
})
end
end
end
end
-->8
-- draw
function _draw()
local mx = mid(0, hero.x-60, (128-16)*8)
local my = mid(-8, hero.y-60, (64 -16)*8)
camera(mx,my)
cls(3)
map(0,0,0,0,128,64)
for i=1,#items do
local s = items[i]
local sp = s.s1
if time() % 1 < .5 then sp=s.s2 end
for i=1,15 do pal(i,1) end
spr(sp, s.x+1, s.y+1)
pal()
spr(sp, s.x, s.y)
if s.hp then
for i=1,3 do
color(10)
if (i > s.hp) color(1)
local i2=(i-1)*2
local x1=s.x+i2+1
local x2=s.x+i2+2
local y=s.y-2
line(x1,y,x2,y)
end
end
end
if shot then
spr(4,shot.x,shot.y)
end
drawguy()
drawfairie()
foreach(anims,drawanim)
if key and key.ready then
local i2=(30-key.t)/2
local x=key.x+sin(key.t/30)*i2
local y=key.y+cos(key.t/30)*i2
spr(63,x,y)
end
camera()
drawbanner()
drawmessage()
spr(63,95,0)
print(tostr(hero.enemies),124,2,7)
spr(21,115,-1)
print(tostr(hero.keys),104,2,7)
end
function drawanim(a)
local s = flr((16-a.t) / 4)
spr(a.s+s,a.x,a.y)
a.t-=1
if (a.t==0) del(anims,a)
end
function drawfairie()
if fairie then
local x1 = fairie.x+sin(fairie.t/30)*fairie.t/2
local y1 = fairie.y+cos(fairie.t/20)*fairie.t/2
local x2 = fairie.x+sin(fairie.t/(30*1.05))*fairie.t/2
local y2 = fairie.y+cos(fairie.t/(20*1.05))*fairie.t/2
for i=1,15 do pal(i,1) end
spr(fairie.s+2, x2+1, y2+1)
spr(fairie.s, x1+1, y1+1)
pal()
spr(fairie.s+2, x2, y2)
spr(fairie.s, x1, y1)
end
end
function drawbanner()
color(0)
rectfill(0,0,127,7)
for i = 1,hero.hp do
local s = 10
local p = false
if heartanim>0 and i==hero.hp then
pal(8, 2)
p = true
if heartanim % 2 == 0 then
s = 9
end
end
spr(s,(i-1)*7,0)
if p then pal() end
end
end
function drawguy()
_drawguy(true)
_drawguy(false)
if hero.boat then
for i=1,15 do pal(i,1) end
drawboat(hero.x, hero.y+1)
pal()
drawboat(hero.x, hero.y)
end
end
function drawboat(x,y)
local s = 57
if t < 15 then s=58 end
spr(s,x,y+1)
end
function _drawguy(shadow)
local fl=false
local s = 1
if (hero.dx==-1) fl=true
if hero.moving then
s=32
if (hero.dy==-1) s=48
if (t%15<8) s+=1
else
if (hero.dy==-1) s=17
end
if shadow then
for i=1,15 do pal(i,1) end
local j = 1
spr(s,hero.x+j,hero.y+j,1,1,fl)
pal()
else
if hero.invincible then
if t % 15 < 5 then
for i=1,15 do
pal(i,(i+3)%3+10)
end
end
spr(s,hero.x,hero.y,1,1,fl)
pal()
elseif hero.blinkmode > 0 then
if t % 3 < 1 then
spr(s,hero.x,hero.y,1,1,fl)
end
else
spr(s,hero.x,hero.y,1,1,fl)
end
end
end
function drawmessage()
if (not message) return
local x1=20
local y1=20
local x2=108
local w = x2-x1-4
local h = 8
local lines = {""}
local words = split(message," ")
for i=1,#words do
local word = words[i]
local newline = lines[#lines] .. " " .. word
if #newline * 4 <= w then
lines[#lines] = newline
else
add(lines, word)
end
end
lines[1] = sub(lines[1], 2)
local y2=y1+(h*#lines)+2
rectfill(x1,y1,x2,y2,1)
rect(x1,y1,x2,y2,6)
for i=1,#lines do
local msg = lines[i]
local y = h*(i-1)
print(msg,x1+3,y1+3+y,7)
end
end
-->8
-- update
function _update()
t+=1
if t == 30 then t = 0 end
handlecontrols()
handlemoving(hero)
moveenemies()
docollide()
checkshot()
if key and #anims==0 then
if not key.ready then
key.ready = true
sfx(14)
end
key.t -= 1
if (key.t==0) key=nil
end
if shot then
handlemoving(shot)
shot.t -= 1
if shot.t == 0 then
shot = nil
end
end
if heartanim > 0 then
if t % 3 == 0 then
heartanim-=1
end
end
if hero.blinkmode > 0 then
hero.blinkmode -= 1
if hero.blinkmode==0 and hero.invincible then
hero.invincible=false
hero.strength=1
music()
end
end
end
function moveenemies()
for i=1,#items do
local e = items[i]
if e.t == 'enemy' then
if t == 0 then
-- pick direction
e.mx=0
e.my=0
if rnd() < .5 then
e.mx=-1
if (rnd()<0.5) e.mx=1
else
e.my=-1
if (rnd()<0.5) e.my=1
end
elseif t == 5 then
e.mx=0
e.my=0
end
handlemoving(e)
end
end
end
function handlecontrols()
hero.maxv=hero.maxv1
if btn(❎) then
hero.maxv=hero.maxv2
end
if btnp(🅾️) and shot==nil then
shot = {
strength=hero.strength,
x=hero.x,
y=hero.y,
mx=hero.dx,
my=hero.dy,
dx=hero.dx,
dy=hero.dy,
vx=0,
vy=0,
maxv=5,
movv=2,
t=10,
}
if shot.strength > 2 then
shot.t = 20
end
end
if btn(⬅️) then hero.mx=-1
elseif btn(➡️) then hero.mx=1
else hero.mx=0 end
if btn(⬆️) then hero.my=-1
elseif btn(⬇️) then hero.my=1
else hero.my=0 end
end
-->8
-- util
function getitem(e)
for i = 1, #items do
local item = items[i]
local x1 = item.x-4
local y1 = item.y-4
local x2 = item.x+4
local y2 = item.y+4
if e.x>=x1 and e.x<=x2 and
e.y>=y1 and e.y<=y2 then
return item, i
end
end
end
function sprat(x,y,e)
local tx = flr((e.x+x) / 8)
local ty = flr((e.y+y) / 8)
return mget(tx,ty), tx, ty
end
function slowarea(e)
return slow(sprat(0,0,e))
or slow(sprat(7,0,e))
or slow(sprat(0,7,e))
or slow(sprat(7,7,e))
end
function notwater()
return not water(sprat(0,0,hero))
and not water(sprat(7,0,hero))
and not water(sprat(0,7,hero))
and not water(sprat(7,7,hero))
end
function onsign()
return issign(sprat(3,3,hero))
or issign(sprat(4,3,hero))
or issign(sprat(3,4,hero))
or issign(sprat(4,4,hero))
end
function issign(s, x, y)
if s == 14 then
return {x, y}
end
end
function slow(s)
return fget(s,1)
end
function water(s)
return (s>=26 and s<=31)
or (s>=41 and s<=47)
end
function air(s)
return not fget(s,0)
end
function heart(s)
return fget(s,2)
end
-->8
-- collide
function checkshot()
if not shot then return end
local f, fi = getitem(shot)
if not f then return end
if f.t == 'enemy' then
f.hp -= shot.strength
if f.hp <= 0 then
sfx(13)
del(items, f)
add(anims, {
s=59,
x=f.x,
y=f.y,
t=16,
})
hero.enemies+=1
if hero.enemies==3 then
hero.enemies=0
hero.keys+=1
key={
x=f.x,
y=f.y,
t=60,
}
end
else
sfx(12)
f.vx = shot.dx * shot.strength*4
f.vy = shot.dy * shot.strength*4
end
if shot.strength < 4 then
shot=nil
end
end
end
function docollide()
local f, fi = getitem(hero)
if f then
if f.t == 'heart' then
if not hero.invincible then
hero.hp += 1
del(items, f)
sfx(0)
heartanim=7
end
elseif f.t == 'powerup' then
music(1)
if not hero.invincible then
hero.blinkmode = 400
hero.invincible=true
end
hero.strength+=1
del(items, f)
sfx(0)
elseif f.t == 'boat' then
if hero.blinkmode==0 then
hero.boat = true
del(items, f)
end
elseif f.t == 'portal' then
if hero.blinkmode==0 then
if hero.keys < 1 then
message = "sorry, you need a key to go here"
else
hero.keys -= 1
local i = fi
local nxt
repeat
i+=1
if (i > #items) i = 1
nxt=items[i]
until nxt.t=='portal'
sfx(5)
--[[
for i=0,3 do
for j=1,4 do
pal(i*4+j,0)
_draw()
flip()
end
end
pal()
--]]
for i=1,90 do
circ(64,64,90-i,1)
if (i%5==0) flip()
end
hero.x=nxt.x+8
hero.y=nxt.y
for i=1,90 do
_draw()
for j=i,90 do
circ(64,64,j,1)
end
if (i%5==0) flip()
end
hero.blinkmode=30
end
end
elseif f.t == 'enemy' then
if hero.blinkmode == 0 then
hero.hp -= 1
if hero.hp == 0 then
music(-1)
sfx(10)
for i=1,2 do
for x=-1,1 do
for y=-1,0 do
hero.dx=x
hero.dy=y
_draw()
flip()
flip()
flip()
end
end
end
for i=1,15 do flip() end
fairie={
x=hero.x,
y=hero.y,
t=0,
s=53,
}
for i=1,7 do
sfx(9)
hero.hp+=1
for j=1,10 do
heartanim=0
if (j<=5) heartanim=2
_draw()
fairie.t += 1
fairie.s = 53
if (j<5) fairie.s=54
flip()
end
end
fairie=nil
heartanim=0
hero.blinkmode=30
music()
else
hero.blinkmode=15
sfx(4)
local x = 0
if(hero.x<f.x-2) x=-1
if(hero.x>f.x+2) x=1
local y = 0
if(hero.y<f.y-2) y=-1
if(hero.y>f.y+2) y=1
hero.vx = x*4
hero.vy = y*4
end
end
end
end
end
-->8
-- moving
function handlemoving(e)
if e==shot and e.strength>=5 then
if e.cx == nil then
e.cx=e.x
e.cy=e.y
e.t1 = 0
e.t = 60
end
e.t1+=1
e.x = e.cx+sin(e.t1/10)*e.t1/2
e.y = e.cy+cos(e.t1/10)*e.t1/2
return
end
e.moving=false
if e.mx != 0 or
e.my != 0 then
e.dx = e.mx
e.dy = e.my
end
if e.mx < 0 then
e.vx -= e.movv
if (e.vx<-e.maxv) e.vx=-e.maxv
elseif e.mx > 0 then
e.vx += e.movv
if (e.vx>e.maxv) e.vx=e.maxv
else
if e.vx != 0 then
e.vx -= e.movv * sgn(e.vx)
end
end
local canskirt = e.my==0
if e.vx < 0 then
for i = 1,ceil(-e.vx) do
local s1 = sprat(-1,0,e)
local s2 = sprat(-1,7,e)
trymove(e,s1,s2,-1,0,canskirt)
end
elseif e.vx > 0 then
for i = 1,flr(e.vx) do
local s1 = sprat(8,0,e)
local s2 = sprat(8,7,e)
trymove(e,s1,s2,1,0,canskirt)
end
end
if e.my < 0 then
e.vy -= e.movv
if (e.vy<-e.maxv) e.vy=-e.maxv
elseif e.my > 0 then
e.vy += e.movv
if (e.vy>e.maxv) e.vy=e.maxv
else
if e.vy != 0 then
e.vy -= e.movv * sgn(e.vy)
end
end
local canskirt = e.mx==0
if e.vy < 0 then
for i = 1, ceil(-e.vy) do
local s1 = sprat(0,-1,e)
local s2 = sprat(7,-1,e)
trymove(e,s1,s2,0,-1,canskirt)
end
elseif e.vy > 0 then
for i = 1, flr(e.vy) do
local s1 = sprat(0,8,e)
local s2 = sprat(7,8,e)
trymove(e,s1,s2,0,1,canskirt)
end
end
end
function trymove(e,s1,s2,x,y,canskirt)
local moved = false
if slowarea(e) then
x/=2
y/=2
end
if e==hero then
if hero.boat and notwater() then
hero.boat=false
add(items,{
x=hero.x,
y=hero.y+1,
t='boat',
s1=57,
s2=58,
})
hero.blinkmode=15
end
local gotsign = onsign()
if gotsign then
local sx, sy =
gotsign[1], gotsign[2]
for i = 1,#signs do
local x1,y1,msg = unpack(signs[i])
if sx==x1 and sy==y1 then
message = msg
break
end
end
else
message = nil
end
end
if e.boat or air(s1) and air(s2) then
moved = true
e.x += x
e.y += y
else
if e==shot then
shot.t=1
elseif canskirt then
if air(s1) then
moved=true
if x==0 then e.x-=1
elseif y==0 then e.y-=1 end
elseif air(s2) then
moved=true
if x==0 then e.x+=1
elseif y==0 then e.y+=1 end
end
end
end
if moved then
e.moving=true
end
end
__gfx__
0000000000888800666666610000000076600000222222225555555500bab00000000000088008800000000000000000000bb0000000b0005555555500000000
0000000008f1f18067777761065000007766000022222222544444450a9bab00000000008ee88e880080080000000000000400000000bb00544f4f4500000000
007007000ffffff067666661055006500776600022222222544444450abb9b90000000008e88888808ee8e80000aaa0000888000000040005f4444f500000000
0007700000f88f0067666661000005500077661022222222544444450bbb9ab0000000008888888808e888800000baa008ee880000088800544ff44500000000
0007700000cccc006766666100000000000771102222222254455445009bbb000000000088888888088888800090b11008e88800008ee8805555555500000000
0070070000fccf00676666610060065000001140222222225444444500045000000000000888888000888800000b100008888800008e88800005500000000000
0000000000044000666666610550055000000444222222225444444500045000000000000088880000088000000b100000888000008888800005500000000000
00000000000505001111111100000000000000442222222254444445004445000000000000088000000000000000b10000000000000888000005500000000000
00000000008888009900000017711771000000000000000000000000000ba9a0000000000000000000000ccccc000000cc111c11cccccccccc111111111111cc
000000000888888099ddd0001651177100000000000000000000000009ab9b9bbabbb00000000000000cccccccccc000c1111c11cc111cccc11111111111111c
000000000f8888f055e8ed00155116510000000008188180088888800bbabab8a9abab000088800000c1111111cccc00c1111c11111111111111111111111111
0000000000ffff00558e8d001771155100cccc0008788780081881800abaa9a9ba99bb00088b10000c1111111111ccc0c11c1c11111111111111111111111111
0000000000cccc0055ddd000177117710cc77cc0088cc8800878878009b99b9b99baa900001b0ee0cc111cc111111cccc11c1c11c1cccccc1111111111111111
0000000000fccf0055000000176116510c6666c008888880088cc8800bab8ba9aa9b9b000000b1e0cc11cccccc1111cccc1c1111111111111111111111111111
000000000004400055000000155115510c6776c008dddd8008dddd800a99baba9b8abb000000b010c111cc111ccc111cc1111c111ccccc111111111111111111
000000000005050055000000111111110c6666c008888880088888800baba9b9b9abb000000b1000c111cc11111cc11ccc111111111111111111111111111111
0088880000000000000000000007000000600000000000000000000000b99bababab000011111111c1111c111111c1cc11111111111111cc1111111111111111
08f1f180008888000000000000600000000600000000000000000000000bbb9abbbb000011111111cc111c11111cc1cccc1ccc111111c1cc1111111111111111
0ffffff008f1f1800000000000060000005550000088800000000000000000445000000011111111cc111cc111cc11cc1111111111c1c11c1111111111111111
00f88f000ffffff0000000000055500005ddd500088b0000008880000000004450000000111111110c1111ccccc11ccccccc1cc111c1c11c1111111111111111
0fcccc0000f88f000000000005ddd5005ddddd50000b0ee0088b00000000004450000000111111110cc1111111111cc01111111111c1111c1111111111111111
000ccf0000ccccf0000000005ddddd505d1dd1500000b0e0000b0ee0000004445000000011111111000c11111111cc001111111111c1c11c1111111111111111
0054400000f44500000000005d1dd1505dcccc500000b0000000b0e0000044444500000011111111000cccccccccc00011cccc111111c1ccc11111111111111c
0000500000050000000000005dcccc5000000000000b0000000b000000004444445000001111111100000ccccc000000cccccccc1111c1cccc111111111111cc
00888800000000000000000000222200002222000044444000444440000a00000000900000000000000000000000000000000000000000000088880000000000
088888800088880000000000021111200211112000fcfcf000fcfcf0a0000a0000000009000000000000000000000000000000000008800008aaaa8000000000
0f8888f0088888800000000021ccc11221cc1112664fff46004fff400000000a9090900000000000000999000000000000088000008aa8008aa88aa800000000
00ffff000f8888f00000000021c1111221c11112664f8f46064f8f40000a000000000000000000000009990000088000008aa80008a88a808a8008a80aaaaaaa
0fcccc0000ffff00000000002111111221c1111206fcccf666fcccf6000000a009000009000000000000900000088000008aa80008a88a808a8008a80a0a0a0a
000ccf0000ccccf0000000002111111221111112000fcf00666fcf660a0000000009000044449444444494440000000000088000008aa8008aa88aa800000aaa
0054400000f44500000000000211112002111120000ccc00000ccc000000a00a90000900044494400444944000000000000000000008800008aaaa8000000000
000050000005000000000000002222000022220000ccccc000ccccc0a00000000009000000499900004444000000000000000000000000000088880000000000
0550055005500550000000000000000003b333b0d1111d11eeeee8ee0000000000000000dddddddd00dddd0000dddd0000333300003333000000000000000000
55555555555555550cccccc00cccccc03333b33311111c11eeeee8ee00000000001111001dd1cc110d1111d00dccccd003545430034545300090000000900000
515555155c5555c50c8d8dc00cd8d8c0b33b333b1111ccc1eeeee8ee0111111001cccc10111cccc1dc1ccc1dd11111cd055555500555555009d9e00009d9e000
55555555555555550cddddc00cddddc03b3333b3dddccccd888888881ddccdd101d11d10dddccccddc1c1c1dd1ccc1cd005dd500005dd5000dddeed00dddeed0
5555555555d55d550cd8ddc00cdd8dc0033b333011d11111ee8eeeee1cd11d1101d11d10d1d1111ddc111c1dd1c1c1cd05111100001111500ccceddd0ccceddd
555dd555555dd5550cddddc00cddddc00044440011c11111ee8eeeee1c11111101c1111011c11d11dccccc1dd1c111cd00011500005110000ffffff004444440
05555550055555500cccccc00cccccc0004444001ccc111dee8eeeee11111111011111101cccc1dd0d1111d00dccccd000d4400000044d0000ffff0000444400
0055550000555500000000000000000004444440dccccddd888888880111111000111100dccccddd00dddd0000dddd000000d000000d0000000ff00000044000
0000000000000000a8888a882222212200888800008888006999999600e88e0000e88e0000066000aaaaaaaa000c00000000a00002302003000000000e2002e0
0000000000bbbb00888889882222212208aaaa8008aaaa809aa99aa90ee8eee00ee8eee0000686008aa8998800acca000c0aa0c00bb2b3200e2002e00e2ee2e0
0bbbbbb00b3333b0888899982222212289a999a8899999a89a9aa9a90eeeeee00eeeeee066668860888999980acccca000cc9c0023b2b2320e2002e0ee2ee2ee
b223322b0b2bb2b0aaa9999a1111111189a9a9a889aaa9a899a61a910eeee4000efefe0069aa8aa6aaa9999a0cca9cccaa9aaca00b233b220e2002e0eceeeece
b32bb2bb0b2bb2b088a888882212222289aaa9a889a9a9a899a11a9100fe4f00004f4f00699aa896a8a8888accc9acc00acaa9aab2bb2bb00e2ee2e0ecceecce
b3bbbbbb0b3bbbb08898888822122222899999a889a999a89a9aa9a10004f0000004f0006666886088988a880acccca000c9cc0003b23b20ecceeccedee88eed
bbbbbbbb0bbbbbb08999888a2212222208aaaa8008aaaa809aa99aa1000f4000000f400000068600899998aa00acca000c0aa0c02b2bb32beee88eeed22ee22d
0bbbbbb000bbbb00a9999aaa111111110088880000888800699111110000f0000000f00000066000a9999aaa0000c000000a0000003030b0d222222d02200220
888888889999999977777777ccccccccffffffffffffffff6666666cbbbbbbbb0003300000033000ffffffff0000000000000000000000000000000000000000
888888889999999977777777cccccccc99f999ffbbfbbbff6777776cb3bbbb3b0033330000333300ffffffff0000000000000000000000000000000000000000
888888889999999977777777ccccccccffffffffffffffff6766666cbbbbbbbb03b88b3003b88b30ffffffff0000000000000000000000000000000000000000
888888889999999977777777cccccccc9999f99fbbbbfbbf6766666cbbbbbbbb038bb830038bb830ffffffff0000000000000000000000000000000000000000
888888889999999977777777ccccccccffffffffffffffff6766666cbbbbbbbb3bb33bb33bb33bb3ffffffff0000000000000000000000000000000000000000
888888889999999977777777ccccccccffffffffffffffff6766666cbbbb33bba333333aa333333affffffff0000000000000000000000000000000000000000
888888889999999977777777ccccccccff9999ffffbbbbff6666666cb3bbbb3b0800008008000080ffffffff0000000000000000000000000000000000000000
888888889999999977777777cccccccc99999999bbbbbbbbccccccccbbbbbbbb0880080000800880ffffffff0000000000000000000000000000000000000000
099009900990099000000000000000000d5ddd5075555755bbbbbabb000000000000000022222222000000000000000027777277aaaaa1aa00aaaa0000000000
99999999999999990666666006666660dddd5ddd55555155bbbbbabb0000000000666600922911990000000000ffff0077777977aaaaa1aa0a6666a000bbbb00
929999299599995906959560068585605dd5ddd555551115bbbbbabb0222222006dddd60999111190aaaaaa00f5555f077779997aaaaa1aaa969996a000000b0
99999999999999990655556006888860d5dddd5d77711117aaaaaaaa2bb22bb20646646022211112a771177a0fcffcf02229999211111111a969696a00bbb0b0
999999999999999906595560068858600dd5ddd055755555bbabbbbb22b22b220646646029299992a17aa7aa0fcffcf077277777aa1aaaaaa966696a00b0b0b0
9996699999999999065555600688886000aaaa0055155555bbabbbbb2222222206d6666099199299a1aaaaaa0f5ffff077977777aa1aaaaaa999996a00b000b0
0999999009999990066666600666666000aaaa0051115557bbabbbbb222222220666666091111922aaaaaaaa0ffffff079997772aa1aaaaa0a6666a000bbbb00
009999000099990000000000000000000aaaaaa071111777aaaaaaaa0222222000666600211112220aaaaaa000ffff00299992221111111100aaaa0000000000
70700000000000000000007000000000707070707070707070707070707070700000000000000000000000000000003030303066808080500616508080808030
545454545454949494945454545454545494949494549494949454545454545425253535353535353535353570d5d5d525718171817181718171817070707025
70000000000000000000000070707070700000000000000000000000000000700000000000000000000000000000003030808080162616500616502606803230
545454545454945454945454545454545494545494549454549454545454545425253535353535353570d5d5d52525252572827282728272827282d571817025
70000000000000000000000000000000000000000000000000000000000070700000000000000000000000000000003080263676500616165050501650068030
5454646464646464540000546464646464646454000000546464646464640054252535252525252525252525257181d5d5d5d5d5d5d5d5d5d5d5d5d572827025
70000000000000000000000000000000000000000000000000000000000070700000000000000000000000000000003030805050065006500606505006160680
545464646464646454000054646464646464645400000054646464646464005425253525c1929292929292d2357282009105b0009100b00000000000b0b07025
7000000000474747474747476747474747474747000000000000000000007070000000000000000000000000000000303080a646500650161606501650505080
54546486646464645400005464646464646464540000005464646464646400542525352525252525a5252525357181d5d5d5d5d5d5d5d5d500000000b0b07025
7000b700004767676767676767676767676767470000000000000000000070700000000000000000000000000000003080a6a646501650261650501626168030
545464646464646454000054646464646464645400000054646464246464005425253525353535353535352535728200b0009100b00091000000006565656565
700000000047676767676767a7a7676727e767470000000000000000000000700000000000000000000000000000003080a64606501650160650565006168030
5454646464646464540000540464646464646454000000546464646464640054252535a535d5d5d535353591910000d5d5d5d5d5d5d5d5d50000d56500e02565
70000000004767676767676767676767676767470000000000000000000000700000000000000000000000000000003030808080500650165026265650068030
5454545454545454540000545454545454545454000000545454545454545454252535a535d5353535353525910000009100b0005200b0000000d56535006525
70000000004767676727a7676767676767676747000000000000000000000070000000000000008600000000000000308046a6a6505050504646465050068030
5454000000000000000000000000000000000000000000000000000000000054252591a535d5d5d535252525917181d5d5d5d5d5d5d5d5d50000d56535352565
700027b70047676767676767276767276767e7470000000000000000000000700000000000000000000000000000003080a6a646465026924650922650803030
549400000000000000000000000000000000000000000000545454545454545425253525353535353525e1d291728200b0009100c00091000000d56535353525
7000000000476767676767676767676767676747000000000000000000000070000000860000000000000000000000303080a60606502692a6a6922692468030
54945454545454545454000000000000000000000000000054a5a5a5a5a5a5542525b02525252525252592252525252525252525d5d5d5d50000d5d525253525
7000002700474747474747474747474747474747000000000000000000000070000000000000000000000000000000303080500606469246a6a6469206068030
54940000000000000054000000000000000000000000000054a5040000c4005425253525c19292929292f22500253525e0253525d59191b0000000d525253565
700000000000000000b7000000000000000000000000000000000033000000700000000000000000000086000000933030805006a64606929292921616068030
5494000000c400000054000000000064000000000000000054a50000000000542525352525252525252525250025353535353525d591e0b0000000d525253525
70000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000003030800650a646060692c2c29292803030
545400000000000000540000450064e0640000000000000054a57500e40000542525000000000000000000000025353535353525d5b0b091000000d525653525
700000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000030303080805006060692c236c2c2803030
545400c4000000c40054000000000064000000000000000054a500000000005425252525a5a5a5252525656525252525a5252525252525252564252525253525
700000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000030303030303080929292c23636c2803030
54940000000000000054000000000000000000000000000054a52400004444542525000000a50000002525252535353535353535353535353535353535353525
70000000777700770000000000000051000000000000000000000000000000705100000000000000000000000000003030303030308036c292c23633c2803030
54945454545454949454000000000000000000000000000054a5000000000094252500a500e500a5006565656535353535353535353535353535353535352525
7000000077000000000000570000000000000000000000000000000000000070000000000000000000000000000000303030303030308036c2c2c2c280303030
5494e400e400e4000054000000000000000000000000000054a5a5a5a5a5a5942525250000a500002565d5d56535353535353535353535353535353535352525
7000000077000000000000000000000000000000000000000000000000000070000000000000000000000000000000303030303030308092c2c292c280303030
5494e400e400e4000054000000000000000000000000000054545454545454942525352500000025353565653535353535350000003535353535353535352525
700000007777770077770000770057000000000000000000000000000000007000000000000000000000000000000030303030303080360616929292c2803030
5454e400e400e40000600000000000000000000000000000000000000000009425253535252525353500000000353535350000b5000035356565656565652525
7000000000000000000057000000000000000000000000000000000000000070000000000000008600000000000000303030303080363692c292c2c2c2803030
5454e400e400e4000060000000000000000000000000000000000000000000542525353535353535000000000000353500003535350000356535353535352525
700000000000000077000000000000000000000000000000000032000000007000000000000000000000000000000030303030805680369236c2c23692c28030
5454e400e400e4000054000000000000000000000000000000000000000000542525252525353525000025250000256525656525652525252535353535352525
70000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000003030308026265692923636369256929230
54545454545454545454000000000000000000000000000000000000000000542525353565350065000000000000250000003535353535352535350035352525
7000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000303030802656569292c236922626568030
54540000000000000054545454545454545454545454545454545454000000542525353565000065350000000035250075000035353535353535000000352525
700000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000030303030809292065080c2922626568030
5454000000000000005475000000005475000000005486000000005400000054252565652500002565652525652525000000353535353500350000e000002525
70000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000003030308016160606803080920650508080
54540000000000000054000000000054000000000054000000000054000000542525653535353535009500353535256565652565653500003535000000352525
70000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000003030308006060680803080061616060680
54540000000000000054000400000054000000000054000000000054000000542525653535353500009500003535353535353535350000352535350035352525
70000000000000000000000000000000000000000000000000000000000000703200000000000000000000000000003030303080808080303030800616068030
545400000000000000540000000000540000b500005400000000005400000054252565354535352565656500b500353535353535000035352535353535352525
70000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000003030303030303030303080060616160680
54540000000000000054000000000054000000000054750000000054000000542525653535353565353535000035256565656565656525252535353535352525
70000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000003030303030303030303080061616261680
5454545454545494949494545454949494545454949494545454949494545454252565656565656535e000003565253535353535353535256535353535352525
70707000000000000000000000000000000000000070707070707070000070700000000000000000000000000000003030303030303030303030808006168030
54545454545454545454545454545454545454545454545454545454545454542525252525252525256525252525252525252525252525252525252525252525
70707070707070707070707070707070707070707070707070000070707070707070707070707070707070707070707070707070707070707070707070707070
70707070707070707070707070707070707070707070000000007070707070702525252525252525256525252525252525252525252525252525252525252525
__gff__
0000010200000001000400000400000000000001000800010100020202020303000000080010000101030202020203030000008000000000002000000000000008000800010102080000800008080400080001028000011000000008000108000000000002020100080000000000000008000800010102080000080001028000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
__map__
0707070707070707070707070707070707070707070707070707070707070707070700070707070707070000000007070707070707070000000000000707070700070707070707070707070707070707070707000000000000000007070707070707070707070707070707070707070707070707070707070707070707070707