'api,app: prevent paysage 'api,app: orientation changed? '''FIXME_&_TODO 'make peon act at end of path 'make farmer farm 'show a resource counter 'handle resource counter 'pal#0 peon for player 'pal#1 peon for opponent 'pal#2 btn 'pal#3 text ' 'bg#2,3 map 'bg#0,1 ui 'spr#30..99 (70) player 0, peon sprite 'spr#100..169 (70) player 1, peon sprite 'rom#4 map data 'idea buttons to control ratio, drag up to increase 'double tap to boost? 'i have to separate movement and hit detection because, it can lead to the last peon trigger the fight and its too late for the first to attack 'walking, cannot attack or harvest 'attack in close combat change target if a peon engage him 'harvest, do not engage but can get engaged by a peon 'distant attack 'Farmer 'Timber 'Miner 'Sworder 'Archer 'Blocker 'farmer produce food 'miner produce metal 'timber produce wood 'archer > sworder at ranged combat 'sworder > archer at closed combat 'blocker > sworder 'blocker > archer 'archer boosted by food and food 'sworder boosted by food and metal 'blocker boosted by food and wood and metal '======gesture: global pressed,tapped,released,pressedt,pressedx,pressedy,justed tapped=0 released=-1 sub gesture tapped=0 justed=0 if tap then pressedt=timer pressed=-1 released=0 justed=-1 pressedx=touch.x pressedy=touch.y else if not touch and pressed and timer-pressedt<=12 then tapped=-1 pressed=0 else if pressed and not touch and not released then pressed=0 released=-1 justed=-1 end if end sub global shownw,shownh,resized shownw=0 :shownh=0 :resized=0 sub check_resize resized=(shownw<>shown.w or shownh<>shown.h) shownw=shown.w :shownh=shown.h end sub ''' STATES 'player and opponent game data '(0-1,)= player, opponent '(,0-2)= ratio weight per spawner '(,3)= total weight, distributed to (0-2) '(,4)= total available ratio '(,5)= spawner first id '(,6)= wood stored '(,7)= metal stored '(,8)= food stored dim global player(1,8) 'damage deal per class dim global classd(0) classd(0)=2 klassidle: data 182 :'timber data 180 :'miner data 178 :'farmer data 176 :'sworder data 184 :'archer data 187 :'blocker data 7 :'timber with wood data 7 :'miner with metal data 7 :'farmer with food classwork: 'starting frame, frame count, anim speed data 182,2,0.125 :'timber data 180,2,0.125 :'miner data 178,2,0.125 :'farmer data 176,2,0.125 :'sworder data 184,3,0.0625 :'archer data 187,2,0.0625 :'blocker '''PEONS 'peons data: '(i)= index of the peon: ' 0..69 for player 0, ' 70..139 for player 1 'peon()= peon state ' =0 is free ' =1 is walking ' =2 in close combat ' =3 was killed ' =4 playing death anim ' =5 will spawn ' =6 is working (farming) 'peonx(),peony()= position 'peona(),peons()= direction angle and speed 'peont()= fight target opponent index 'peonc()= peon class: ' =0 timber ' =1 miner ' =2 farmer ' =3 sworder ' =4 archer ' =5 blocker 'peonk()= peon class link ' =0 peon timber at spawn ' =1 peon miner at spawn ' =2 peon farmer at spawn ' =3 peon sworder at spawn ' =4 peon archer at spawn ' =5 peon blocker at spawn ' =6 peon timber at forest ' =7 peon miner at mine ' =8 peon farmer at farm ' =9 opponent timber at spawn ' =10 opponent miner at spawn ' =11 opponent farmer at spawn ' =12 opponent sworder at spawn ' =13 opponent archer at spawn ' =14 opponent blocker at spawn ' =15 opponent timber at forest ' =16 opponent miner at mine ' =17 opponent farmer at field 'peonl()= progress link <> map data link 'peond()= action delay, used for attack cooldown, targeting update repeat 'peonp()= action progress dim global peon(139), peonx(ubound(peon)), peony(ubound(peon)), peonl(ubound(peon)), peona(ubound(peon)), peons(ubound(peon)), peont(ubound(peon)), peonc(ubound(peon)), peond(ubound(peon)), peonp(ubound(peon)), peonk(ubound(peon)) 'peons spawner data: '(i)= index of the player, =0 human, =1 computer 'peonf= number of free peon 'peonn= next index to look dim global peonf(1), peonn(1) sub peon_clear peonf(0)=70 :peonn(0)=0 peonf(1)=70 :peonn(1)=70 sprite off 30 to 169 end sub sub peon_spawn(pla,x,y,s,c) 'spawn a peon '(in) pla= player index '(in) x,y= peon spawn position '(in) s= movement speed '(in) c= peon class if peonf(pla)<=0 then exit sub dec peonf(pla) lb=0+pla*70 :ub=69+pla*70 while peon(peonn(pla))>0 add peonn(pla),1,lb to ub wend if pla=0 then trace c p=peonn(pla) peon(p)=5 peons(p)=s peonc(p)=c peonx(p)=x peony(p)=y call act_spawn(p,c) end sub sub peon_update(mx,my) '(in) mapx,mapy map offset l=ubound(peon) p=-1 pu_loop: inc p if p>l then exit sub j=p+30 on peon(p) goto pu_loop, pu_walk, pu_close, pu_killed, pu_death, pu_loop, pu_work '''PEON_UPDATE pu_walk: 'walking, update position a=peona(p) add peonx(p),cos(a)*peons(p) add peony(p),sin(a)*peons(p) sprite j,peonx(p)+mx,peony(p)+my, 'check collision with opponent 'engage close combat pla=int(p/70) :o=(pla+1)mod 2 'opponent sprites bounds lb=30+o*70 :ub=99+o*70 'check collision if sprite hit(j,lb to ub) then o=hit-30 'trace "hit",p,o,peon(o),peon(p) if (peon(o)=1 or peon(o)=2) and (peon(p)=1 or peon(p)=2) then 'make the two colliding peon fight against each other call act_close(p,o) call act_close(o,p) end if else dec peond(p) 'time to update path if peond(p)<=0 then 'distance with target area if len(classx(peonk(p),peonl(p))-peonx(p),classy(peonk(p),peonl(p))-peony(p))>10 then 're aim at area call act_aim(p) else 'reach area call act_commit(p) end if end if end if goto pu_loop pu_close: 'attacking in close combat if peond(p)>0 then dec peond(p) else o=peont(p) if peon(o)=1 or peon(o)=2 then call act_damage(p,peont(p)) else call act_restart(p) end if peond(p)=30 end if goto pu_loop pu_killed: 'peon get killed, show a death animation if peon(p)=3 then call act_death(p) else trace "cannot kill" end if goto pu_loop pu_death: 'play the death anim if peond(p)>0 then dec peond(p) else if peonp(p)<=1 then add peonp(p),1/60 c=1+int(6*ease(0,0,peonp(p))) sprite j,,,c end if if peonp(p)>=1 then call act_recycle(p) goto pu_loop pu_work: 'stay in place a bit if peond(p)>0 then 'todo: play an animation 'need starting frame, frame quantity, playing speed restore classwork skip peonc(p)*3 read b,q,s c=b+((peond(p)*s) mod q) sprite j,,,c dec peond(p) else on peonk(p) goto timber_after_work, miner_after_work, farmer_after_work, pu_loop,pu_loop,pu_loop,pu_loop,pu_loop,pu_loop,pu_loop,pu_loop,pu_loop,pu_loop,pu_loop,pu_loop,pu_loop,pu_loop,pu_loop end if goto pu_loop '''RESTORE timber_after_work: call act_walk(p,6) goto pu_loop miner_after_work: call act_walk(p,7) goto pu_loop farmer_after_work: call act_walk(p,8) goto pu_loop end sub '''ACTIONS 'list of actions deals by peon to other peon or the world, during last frame '(i)= index of the action 'act= action type ' =0 peon attack opponent in close combat ' =1 peon engage close combat ' =2 peon get killed ' =3 peon will be freed ' =4 peon will be spawn ' =5 peon will start walk, work ' =6 ' =7 peon will aim at target area ' =8 peon has arrive at target area ' =9 peon will walk again, (go home) 'actp= peon index that act 'actt= peon target 'acta= action argument dim global act(ubound(peon)), actp(ubound(act)), actt(ubound(act)), acta(ubound(act)) 'number of actions deals this frame global actions actions=0 '(in) p peon index '(in) o opponent index sub act_damage(p,o) 'a peon deal damage to an opponent act(actions)=0 actp(actions)=p actt(actions)=o acta(actions)=2 inc actions end sub sub act_close(p,o) 'a peon is engaging an opponent in close combat act(actions)=1 actp(actions)=p actt(actions)=o inc actions end sub sub act_death(p) 'a peon will play death anim act(actions)=2 actp(actions)=p inc actions end sub sub act_recycle(p) 'a peon will be freed act(actions)=3 actp(actions)=p inc actions end sub sub act_spawn(p,k) 'a peon need be spawn '(in) k class link act(actions)=4 actp(actions)=p acta(actions)=k inc actions end sub sub act_aim(p) '(in) a peon will update peon angle to aim destination act(actions)=7 actp(actions)=p inc actions end sub sub act_commit(p) '(in) a peon arrive at area act(actions)=8 actp(actions)=p inc actions end sub sub act_restart(p) 'a peon will restart working act(actions)=5 actp(actions)=p inc actions end sub sub act_walk(p,k) 'a peon will start walking after work (go home) '(in) k class link act(actions)=9 actp(actions)=p acta(actions)=k inc actions end sub sub act_update(mx,my) '(in) mx,my map offset a=-1 au_loop: inc a if a>=actions then goto au_clear p=actp(a) o=actt(a) arg=acta(a) on act(a) goto au_attack, au_engage, au_death, au_free, au_spawn, au_restart, au_loop, au_aim, au_commit, au_walk '''ACTION_UPDATE au_attack: 'a peon attack an opponent peon peon(o)=3 goto au_loop au_engage: 'a peon get engaged in close combat with an opponent peon(p)=2 peon(p)=2 'peon(o)=2 peont(p)=o if peond(p)<=0 then peond(p)=1 goto au_loop au_death: 'play death anim for peon peon(p)=4 peond(p)=10 peonp(p)=0 'end if goto au_loop au_free: 'recycle peon peon(p)=0 inc peonf(int(p/70)) sprite off p+30 goto au_loop au_spawn: 'spawn peon if peon(p)=5 then peon(p)=1 peonk(p)=arg peonl(p)=0 j=p+30 restore klassidle skip arg mod 9 read c sprite j,peonx(p)+mx,peony(p)+my,c sprite j pal int(p/70) end if goto au_loop au_restart: 'restart walk, work peon(p)=1 goto au_loop au_aim: 'update map area target destination if peon(p)=1 then goto au_upd_aim end if goto au_loop au_commit: 'at target area, what to do 'check for next link into path if peonl(p)+1=1 'spawnc= class spawned dim global spawn(5), spawnx(ubound(spawn)), spawny(ubound(spawn)), spawnr(ubound(spawn)), spawnn(ubound(spawn)), spawnc(ubound(spawn)) sub spawn_update 'make spawner spawn a peon according to their rate for i=0 to ubound(spawn) pla=spawn(i) 'compute how many to spawn accoding to rate and boost on spawnc(i)mod 9 gosub su_farmer, su_miner, su_timber, su_sworder, su_archer, su_blocker add spawnn(i),spawnr(i) while spawnn(i)>=1 dec spawnn(i) call peon_spawn(spawn(i), spawnx(i), spawny(i), 1/4, spawnc(i)) wend next i exit sub su_farmer: 'farmer boosted by food add spawnn(i),spawnr(i) return su_miner: add spawnn(i),spawnr(i) return su_timber: add spawnn(i),spawnr(i) return su_sworder: add spawnn(i),spawnr(i) return su_archer: add spawnn(i),spawnr(i) return su_blocker: add spawnn(i),spawnr(i) return end sub 'cleanp= clean peon that are oob global cleanp cleanp=0 sub clean_update r=shown.w+8 b=shown.h+8 for i=0 to i st=peon(cleanp) if st=1 or st=2 then s=cleanp+30 if sprite.x(s)<=-16 or sprite.x(s)>r or sprite.y(s)<=-16 or sprite.y(s)>b then call act_recycle(cleanp) end if end if add cleanp,1,0 to ubound(peon) next i end sub '''PATH '''INTERFACE ui_class_name: 'bg copy arguments for text data 12,1,3,1 :'timber data 15,0,3,1 :'miner data 12,0,3,1 :'farmer ui_ressource_name: 'bg copy arguments for text data 18,0,2,1 :'food data 0,0,0,0 :'metal data 15,1,3,1 :'wood sub btn_draw(b,c,r,p) 'draw spawner ratio button '(in) b button index '(in) c class index '(in) r ratio '(in) p pressed 0/-1 dx=b*6 :dy=3 bg 1 if p then bg copy 6,0,6,5 to dx,dy else bg copy 0,0,6,5 to dx,dy end if bg 0 bg fill dx+1,dy+1 to dx+4,dy+3 char 0 restore ui_class_name :skip c*4 :read x,y,w,h bg copy x,y,w,h to dx+1,dy+1-p s=r*60 s=floor(s*100+0.5)/100 if s>=10 then s=floor(s+0.5) s$=left$(str$(s),3) pal 3 font 32 text dx+1,dy+2-p,s$+"/" end sub sub ctn_draw(b,c) 'draw resource counter '(in) b button index '(in) c class index dx=b*6 :dy=3 bg 0 restore ui_ressource_name :skip c*4 :read x,y,w,h bg copy x,y,w,h to dx+1,dy-1 end sub '''MAP 'load map data 'map data 'bytes purpose '? spawners '? area '? link '? class link 'spawner data '6x2 spawner 'for each spawner ' 1 position x ' 1 position y 'area data '1 area count '?x2 area 'for each area ' 1 position x ' 1 position y 'link data '1 link count '?x2 link 'for ech link ' 1 area ' 1 next link index 'class link data '18x1 link index 'classc()= number of position for this path 'classx(),classx()= next position in path '(17,) 18 available path '(,3) number of max step in the path dim global classc(17),classx(17,3),classy(17,3) sub setup_map(life) 'load map data a prepare path for peon from spawner to final area a=rom(life) for i=0 to 5 spawnx(i)=peek(a) :inc a spawny(i)=peek(a)+72 :inc a next i areaa=a+1 a=areaa+peek(a)*2 linka=a+1 a=linka+peek(a)*2 classa=a for class=0 to 17 link=peek(classa+class*1) i=0 classc(class)=0 sm_loop: area=peek(linka+link*2) inc classc(class) classx(class,i)=peek(areaa+area*2) classy(class,i)=peek(areaa+area*2+1)+72 inc i if peek(linka+link*2+1)<>link then link=peek(linka+link*2+1) goto sm_loop end if next class end sub '''GAME '(in) pla= 0=player or 1=opponent data sub compute_ratio(pla) i=player(pla,5) r=player(pla,4)/player(pla,3) spawnr(i+0)=r*player(pla,0) spawnr(i+1)=r*player(pla,1) spawnr(i+2)=r*player(pla,2) end sub sub set_ini(pla,w,r) 'set initial ratio '(in) w total weight '(in) r total ratio per frame player(pla,0)=w/3 player(pla,1)=w/3 player(pla,2)=w/3 player(pla,3)=w player(pla,4)=r call compute_ratio(pla) end sub sub inc_ratio(pla,b) 'increase ratio of button, decrease the other '(in) b button id b1=(b+1)mod 3 :b2=(b+2)mod 3 if player(pla,b1)>0 then inc player(pla,b) :dec player(pla,b1) end if if player(pla,b2)>0 then inc player(pla,b) :dec player(pla,b2) end if call compute_ratio(pla) end sub sub inc_ressource(pla,r) inc player(pla,r) end sub 'global dbg 'dbg=0 global fast fast=0 dim global as(6) dbg_state: data "free" data "walking" data "close" data "killed" data "death" data "spawn" data "work" sub dbg_peon for i=0 to 6 as(i)=0 next i for i=0 to 69 inc as(peon(i)) next i for i=0 to 5 text 19,36+i,str$(as(i)) next i for i=0 to 5 as(i)=0 next i for i=70 to 139 inc as(peon(i)) next i for i=0 to 5 text 19,6+i,str$(as(i)) next i end sub sub dbg_ini(b,x,y) bg b font $c0 pal 4 text x,y,"insp" end sub sub dbg_upd(b,x,y,mx,my) fast=0 if touch and touch.y<54 and touch.x>=140 then fast=-1 if tap and touch.y<54 and touch.x<140 then wait vbl p=0 dg=0 px=0 do bg b cls b font $c0 pal 4 text x,y+2,"p="+str$(p) text x,y+3,"=="+str$(peon(p)) restore dbg_state skip peon(p) read pt$ text x+4,y+3,pt$ text x,y+4,"x="+str$(peonx(p)) text x,y+5,"y="+str$(peony(p)) text x,y+6,"a="+str$(peona(p)) text x,y+7,"s="+str$(peons(p)) text x,y+8,"t="+str$(peont(p)) text x,y+9,"c="+str$(peonc(p)) text x,y+10,"d="+str$(peond(p)) text x,y+11,"p="+str$(peonp(p)) j=p+30 text x,y+13,"j="+str$(j) text x,y+14,"x="+str$(sprite.x(j)) text x,y+15,"y="+str$(sprite.y(j)) call dbg_peon sprite 0,sprite.x(j)-8,sprite.y(j)-8,15 if tap and touch.y>=300 then call peon_update(mx,my) call act_update(mx,my) call spawn_update call clean_update else if tap then px=touch.x pp=p if touch.y<54 then sprite off 0 cls b call dbg_ini(b,x,y) exit sub end if else if touch and touch.y>=54 and touch.y<300 then dx=touch.x-px p=pp+int(dx/10) if p<0 then add p,140 if p>=140 then add p,-140 end if wait vbl loop end if end sub '''MAIN gosub setup gosub battle end setup: 'button/spawner 0..2 = top side, opponent 'button/spawner 3..5 = bottom side, player call setup_map(4) 'first spawner player(1,5)=0 call set_ini(1,3*6,2/60) 'first spawner player(0,5)=3 call set_ini(0,3*6,2/60) spawn(0)=1 spawn(1)=1 spawn(2)=1 'temp: set class spawnc(0)=9 spawnc(1)=10 spawnc(2)=11 spawnc(3)=0 :'timber spawnc(4)=1 :'miner spawnc(5)=2 :'farmer spawnc(3)=3 :' call peon_clear return '''BATTLE battle: 'mapx,mapy= map offset 'bl,br,bt,bb= buttons rectangle in pixels for touch detection 'bi= button id 'bp()= button pressed duration list 'ci()= class list per button dim bp(2),ci(2) ci(0)=0 ci(1)=1 ci(2)=2 'call dbg_ini(2,1,6) 'bg#3 is opaque system 4,1 do call check_resize if resized then gosub btl_layout gosub btl_redraw gosub btl_reui end if 'call dbg_upd(2,1,6,mapx,mapy) bg 2 font $c0 pal 4 text 1,3,"pla"+str$(peonf(0))+" " text 1,4,"cpu"+str$(peonf(1))+" " 'call dbg_peon '''UPDATE gosub btl_input call peon_update(mapx,mapy) call act_update(mapx,mapy) call spawn_update call clean_update if not fast then wait vbl loop btl_reui: 'ratio buttons bg source rom(3) bg 1 call btn_draw(0,0,spawnr(3),bp(0)>1) call btn_draw(1,1,spawnr(4),bp(1)>1) call btn_draw(2,2,spawnr(5),bp(2)>1) call ctn_draw(0,0) call ctn_draw(1,1) call ctn_draw(2,2) return btl_redraw: 'map bg 3 bg source rom(5) bg copy 0,0,$1C,$30 to 0,0 return btl_resized: btl_layout: 'compute height needed h=max(8,max(safe.b,keyboard)) 'place ui button at the bottom l=(shown.w-safe.l-safe.r-3*6*8)/2 t=(shown.h-max(8,max(safe.b,keyboard))-7*8) scroll 1,-l,-t scroll 0,-l,-t bl=l :br=bl+3*6*8 bt=t+3*8 :bb=bt+4*8 'place map at the center, remove height for the button mapx=(shown.w-22*8)/2 mapy=(shown.h-30*8-5*8)/2 'displacement because of map border. a part of the map is used for decoration oly add mapx,-3*8 add mapy,-9*8 scroll 3,-mapx,-mapy return btl_input: call gesture bi=-1 if touch and touch.px>=bl and touch.px
=bt and touch.py0 then dec bp(i) if bp(i)=5 or bp(i)=1 then gosub btl_reui if bp(i)=1 then haptic 6 next i return #1:MAIN PALETTES 0A2A2D2E0A243B3F0A2E2D2C0A020001 1018131210030905101D1C2010001311 #2:MAIN CHARACTERS 00000000000000000000000000000000 00C0C0C0C0C00000C0000000C0C00000 00303070E0C0000030000000C0C00000 00000C18F8F0000018100000C0C00000 00000000FCFC000000180800C0C00000 00000000E0FC000000000008D8C00000 00000000F8E4000000000000C0D80000 00F0F0E0C0C00000C0383800C0C00000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 FFFEFCF8FCEEC783FFFEFCF8FCEEC783 0000000000000000000000001F3F3F3F 000000000000000000000000FFFFFFFF 00000000000000003F3F3F3F3F3F3F3F 0000203F3F3F3F3F3F3F1F0000000000 000000FFFFFFFFFFFFFFFF0000000000 0000000000000000FFFFFFFFFFFFFFFF 3F3F3F3F3F1F00000000000000000000 FFFFFFFFFFFF00000000000000000000 0000203F3F1F00003F3F1F0000000000 000000FFFFFF0000FFFFFF0000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 70C6E1C3C5C70000003006200200C700 002D4A4A4A4A00000000250000004A00 0011AABAA29A00000000110018009A00 45ECD5C5C5C40000000128100001C400 00312A2B2AA90000000011000102A900 0010A0A0202000000000100080002000 F4606464646200000094000000046200 02D2ABAAAAAB0000000050010000AB00 00112ABAA21200000000110018A01200 44C4D5D5D56800000000000000956800 00885555558800000000880000558800 40C0404040C00000000080000000C000 70C2E5C5C5C20000003002200005C200 01235555552300000000220000542300 00000000003030000000000000000030 0020264844828C00000000260844028C 78CCCCCCCCCC78000030000000008478 3878D81818181800000020C000000018 78CC0C183060FC000030C004081000FC 78CC0C380CCC78000030C00430008478 40C0D8D8FC1818000000000000E40018 FCC0F80C0CCC7800003C00F000008478 78C0C0F8CCCC78000038000030008478 FC0C18183030300000F0040008000030 78CCCC78CCCC78000030008430008478 78CCCC7C0C0C38000030008070000438 00000000003030000000000000000030 44ECD5C5C5C40000000028100001C400 109B50D1128B000000008B00C1108B00 2020A0A0A09000000000000000209000 00000000000000000000000000000000 00000000000000000000000000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000000000000000 0000000000000000FFFFFFFFFFFFFFFF 00004040020000100000000000000000 0205030B1703284F0306060C1E1F3778 27301F070020301C7C6F707C3F3F3F1F 0790CFC7E0C010F0FC7F703C7FFFEF9F C008F0E0000000007FFF0F3FFFFFFFFF 0080C0C0E0C010E0FFFF7F3F3F7FFF1F 000004030F1F3F7F0000070E18306060 000020C0F0F8FCFE0000E030180C1E66 FFFFFFFFFF5F0D00F0DCC0E090400000 FFFFFFFFFFFAF00003030307F9320000 FFFFFCF3EFDFBFFF030307FC18306060 FFFF3FCFF7FBFDFFF0DCE030180C1E66 000000000000241800000000183C3C18 EFFDBFEEFFD75FFD100240110028A002 DFF77DEFAAAAAAAA2008821055FFFFFF 000000181824BC5A00001824247EC2E7 663C81423C000000BDC3FF7E3C000000 001818A53C42BD42182424DBE7FFC37E 000100010E1F5F3F0001010E11206050 8070F4F8F872308DF0880C0424FECE73 BF3F3F3737A70707FAFDFFFFFFFF1F07 9E9EBEBEBA3A1C00E16161777DFEFCE0 9E9EBE37AF1F9F3FE1E1E1FEF1E0E0D0 1F7FF7FBFB71328DFA8D0A47AFFFFF73 00BC7E7E3E3C00003FC3A1CDCB7E0000 00000007170F0F07000007081811191F FDFCFC7C000000000397F7FE00000000 000000008080807C000000804060FCC6 0000081C1C1C000000001C223E1C0000 A291A08080008000FFFFFFFFFFFFFFFF BF1F2F1F0F15020DFAFDFFFFFFFFFFF3 0070F0F8F870308CFF8F0F47AFFFFF73 1E1E3E372F1F1F3FE1E1E1FEF1E0E0D0 20202020202020200000000000000000 A0607F7FFFBFBFBFE0C0E0E07F7F7F7F A0607F7F7F3F3F7FE0C0C0C0DFDFDFDF 0000FFFFFDFDF9E100000101FFFFFFFF 0000FFFFFF3F3F3F0000C0C0FFDFFFFF A060606060202060E0C0C0C0C0C0C0E0 80808080808080800000000000000000 7677777703030000FFFFFFFF0F0F0000 DDFDFDFC3D3D0101FBFBFBFBF3F30303 C0C0C0C0C0C0C0C08080808080808080 000F0F1F77F776771F1F1FE0FF0FFFFF 01FFFFFFFCFCDBFFFEFEFE00FEFFFFFC 000000000000E0C00000000000C0C000 00000000003030000000000030483000 00010101010101000303030707070703 F3F3F3F1B9B99999FFFFFFFFFFFFFFFF F3F3B3B3B3373737FFFFFFFFFFFFFFFF 07070300000000000C0C0F0703030303 FFFFFF000093F7E70000C3FFFFFFFFFF FFFFFF3C0082B3B30001C3E7FFFFFFFF E0E0E0E0E0E0E0E03030101010103030 E0E0E0E0F0F0F0F03030301008081878 000000000000C0E00000000000C0E030 000000000000FFFF0000000000FFC300 00000000003CFFFF000000003CE78100 FFFFFFFEFEF8E3E700000303473F3F3F FFFFFF000083B3B30000C3FFFFFFFFFF FFFFFF3C0083F7E7000183E7FFFFFFFF E7E7E7E3F3F3F3F33F3F3F1F0F0F1F7F E0E0F0FCFEFEFFFF30303C4603010100 B7B7B3B89C9C9C9CFCFCFFFFFFFFFFFF 00000426173F1D1A00000426173F1F1F 0004ADFFFFBA55AA0004ADFFFFFFFFFF 00111BBFFFEE55AA00111BBFFFFFFFFF 70301870301848707F3F1F7F3F1F4F7F 30107830104838103F1F7F3F1F4F3F1F 1C24081E020700001F270F1F03070000 0000000020DF8D00FFFFFFFFFFDF8D00 0000000028D78200FFFFFFFFFFD78200 000000000003040AFFFFFFFFFFFFFCFA 080D0F0F05020402F8FDFFFFFFFFFFFF 55AA548A448A0400FFFFFFFFFFFFFFFF 55AA540810081000FFFFFFFFFFFFFFFF 10B0F0E050A040201FBFFFFFFFFFFFFF 351A7532114A39103F1F7F3F1F4F3F1F 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 10D0F8F0C0C00000D0103800D0C00000 00C4E8F0D8C00000C0042810E8C00000 28E8D0F0D0C00000E8281000D0D00000 00C0C0E6B8C60000C0000006D8C60000 38C4C0F0C0C00000F8541000D0C00000 18C4C2E2D0C00000D8040A12E0C00000 10F8D0E0C0C00000D0783000E0C00000 08FCC8F0C0C00000C83C1800D0C00000 10D0F8F0D0C00000D0107C00D0C00000 20D0F8D0E0C00000E0307C20E0C00000 10D0D0F0D0C00000D0101000D0C00000 00E0D0A8D0C00000C0307878F0C00000 00D0E8D4C8C00000C0183C3CD8C00000 #3:BACKGROUND 0000141E10021102110211021102100A 00020002000200020002000220032103 22032303240325032C032D0312021502 150215021502120A1002110211021102 1102100A26032703280329032A032B03 0003000012021502150215021502120A 12021502150215021502120A3B033C03 3D030000000300030003000013021402 140214021402130A1202150215021502 1502120A000000000000000000030003 0003000016021702170217021702160A 18021902190219021902180A00000000 00000003000300030003000000020002 00020002000200020000000000000003 00000000000000000000000300030003 00030000000000000000000000000002 00020002000300020000000000000000 00000003000300030000000000000000 00000000000000000002000300030002 00000000000000000000000300030003 00000000000000030000000300030003 00030003000200020000000000000000 00030003000300000000000000030003 00000003000300030003000300030000 00030003000300000003000300030000 00000000000300030003000300030003 00030003000300030003000300030003 00030003000300000000000000030003 00030003000300030003000000030003 00030003000300000003000300000000 00000000000300030003000300030003 00030003000300030003000300000003 00030003000000000000000000000000 00030003000300030000000300030003 00030000000000030003000300000000 00000000000000000000000000000000 00030003000300030000000000000000 00030003000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000200000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000300030003000300000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000 #4:path 68106810681071E271E271E21370E568 0D57988FB1B09766D741CA269374806B 3A6C245E6BB76A4B3B3D5D2B611A7071 AC72C024020003020402050406050705 0807010708090909080B0A0B000C030E 000E0610001009120B120C130D150E16 0F17101708190019081B111B081D121D 091F011F0F210E220D23012300010306 080A0C0D0F111314181A1C1E0720 #5:map 00001C30410D410D410D410D410D410D 410D410D410D410D410D410D410D410D 410D410D410578050005520445044704 420442044204420442044204410D410D 410D410D410D410D410D410D410D410D 410D410D410D410D410D410D410D7905 0000530444044804420442044204480C 48044204410D410D410D410D410D410D 410D410D410D410D410D410D410D410D 410D410D410D7805540444044604460C 4804480C4804470C47044204410D410D 410D410D410D410D410D410D410D410D 410D410D410D410D410D410D410D7905 00004504450C450C450C450447044204 42044204410D410D410D410541054105 4105410D410D410D410D410D410D410D 410D410D7D05750D0000540400000005 520444044804420442044204410D4105 410541057D057E057D0D410D410D7D05 7F0576057E0D7F0D76057E05820D720D 000000005204000053044504460C4804 42044204410D41057D057605820D7405 820576057605820D740D74057405740D 7405740D720D00000000000053040000 000052044504460C48044204410D4105 800573057405740573057305740D720D 00006525672568256725692500000000 00000000000000005404530400004504 47044204410D41057805000000005C05 5E0500005C055E0500006A256E056F05 700564055C055E050000000000000000 000000005204440448044204410D4105 7905550556055B055D0543045B055D05 43046A056B056C056D0564055B055D05 43044304430443044304430453044504 47044204410D41057905570558054304 43045505560543044304660567056805 6705690543045F054304430443044304 430443045404440448044204410D4105 780543045F0555055605570558054304 43044304430443044304430443044304 43044304430443044304430444044604 47044204410D41057905430443045705 58054304430C43044304430443044304 43044304430443044304430443044304 43044304450447044204480C410D4105 78055505560543044304430443045F05 43044304430443044304430443044304 43044304430443044304520444044804 42044204410D41057905570558054304 43045505560543044304430443044304 43044304430443044304430443044304 430453044504460C48044204410D4105 81057B057C057A054304570558054304 43044304430443044304430443044304 43044304430443044304540444044604 47044204410D41054105410541058105 7B057A05430443045505560543044304 43044304430443044304430443044304 430443044504460C48044204410D4105 41054105410541054105790543044304 57055805430443044304430443044304 43044304430443044304430454044504 460C4804410D410541057D0576057705 7605750D430443044304430443044304 43044304430443044304430443044304 43044304430452044504460C410D4105 41058005730D7405740D720D43044304 43044304430443044304430443044304 43044304430443044304430443045304 440446047E0D7F0D7E0D750D43044304 43044304430443044304430443044304 43044304430443044304430443044304 5F054304430400004504460C740D730D 7405720D430443044304520443044F06 540443044F0643044304430443044304 430443044304430471055F0571050000 54044504500650160000430443044304 540453044404440C4404440C43044304 4304430443044304430449054A057105 49054A0549054A0549054A05501E500E 5006500650065006430444044604460C 4604450C430443044304430443044304 43044B054C0549054E054D054E054D05 4E054D055006500650065006501E5006 44044604460C4604460C440C54044304 430443044304430449054A0543044B05 4C054B054D054E054D054E05500E5016 50165006500650064504460C4604460C 4604450C520443044304430443044304 4B054D054A054304430449054E054D05 4E054D05501E500E501650065006501E 50064504460C4604460C440C53044304 430443044304430443044B054D054A05 49054E054D054E054D054E0550065006 500E500651065106510652044504450C 4504450C430443044304430443044304 430443044B054C054B054C054B054C05 4B054C05501650065106510643044304 43045304540443044F06540443044304 43044304430443044304430443047105 5F054304710500000000000451065106 000043044304430443044F0643044304 43044304430443044304430443044304 4304430443045F054304430455055605 00000004000000000000430443044304 43044304430443044304430443044304 43044304430443044304430443045C05 5E054304570558050000000400000000 5C055E05430443044304430443044304 43044304430443044304430443044304 4304550556055B055D05430443040000 00005C05000000005B055D0543044304 43044304430455055605430443044304 43044304430443044304570558054304 550556054304000000005B0555055605 00004304430443044304430443045705 58054304430443044304430443044304 43044304430443045705580543040000 5C055E0559055A055605430443044304 43044304430443044304430443044304 43044304430443044304430443044304 43044304430400005B055D055A055905 5A055605430443044304430443044304 43044304430443044304430443044304 430443045C055E054304430443045505 5605000459055A0559055A0543045C05 5E054304430443044304430443044304 4304430443044304430443045B055D05 5505560543045705580500045A056005 6105590556055B055D05430443044304 43044304652567256825672569254304 43044304430443045705580543040000 000000046005420563055A0559055505 5605430443044304430443046A256E05 6F057005640543045C055E0543044304 43044304430483048504850442054205 5A0559055A055A055905560500000000 000000006A056B056C056D0564050000 5B055D05000000000000000000009004 8D048E044205420563055A0559055905 5A05580500005C055E05000066056705 68056705690500008304850484048404 8504850484048F044204420442054205 5A0559055A055A055A05000500005B05 5D050000000000000000000000000000 90048E048D048E0442048D048E044204 420442044205420563055A0560056105 5A05560500050005000000005C055E05 00008304840485048F04420442044204 42044204420442044204420442054205 5A055905620563055905590556055505 560500005B055D05000090048D048E04 42044204420442044204420442044204 420442044205420563055A0559055905 5A055A05590559055805000000000000 00008604420442044204420442044204 42044204420442044204420442054205 5A0559055A055A05590559055A055A05 56050000000000000000870442044204 42044204420442044204420442044204 420442044205420563055A0559055905 5A055A05590559055805000000005C05 5E058704420442044204420442044204 42044204420442044204420442054205 5A0559055A055A05590559055A055A05 5605000400045B055D05860442044204 42044204420442044204420442044204 42044204