From 445f80226a22f608d9644602f43d5a25ef71ba6b Mon Sep 17 00:00:00 2001 From: Vawlpe Date: Mon, 6 Sep 2021 18:50:05 +0300 Subject: [PATCH 1/9] prologue map by sheeb --- prologue.p8 | 1717 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1717 insertions(+) create mode 100644 prologue.p8 diff --git a/prologue.p8 b/prologue.p8 new file mode 100644 index 0000000..ed6b3b4 --- /dev/null +++ b/prologue.p8 @@ -0,0 +1,1717 @@ +pico-8 cartridge // http://www.pico-8.com +version 32 +__lua__ +--newleste.p8 base cart + +--original game by: +--maddy thorson + noel berry + +-- based on evercore v2.0.2 +--with major project contributions by +--taco360, meep, gonengazit, and akliant + +-- [data structures] + +function vector(x,y) + return {x=x,y=y} +end + +function rectangle(x,y,w,h) + return {x=x,y=y,w=w,h=h} +end + +-- [globals] + +--tables +objects,got_fruit={},{} +--timers +freeze,delay_restart,sfx_timer,music_timer,ui_timer=0,0,0,0,-99 +--camera values +---- +cam_x,cam_y,cam_spdx,cam_spdy,cam_gain,cam_offx,cam_offy=0,0,0,0,0.25,0,0 +---- +_pal=pal --for outlining + +-- [entry point] + +function _init() + max_djump,deaths,frames,seconds,minutes,music_timer,time_ticking,berry_count=1,0,0,0,0,0,true,0 + music(0,0,7) + load_level(1) +end + + +-- [effects] + +function rnd128() + return rnd(128) +end + +clouds={} +for i=0,16 do + add(clouds,{ + x=rnd128(), + y=rnd128(), + spd=1+rnd(4), + w=32+rnd(32) + }) +end + +particles={} +for i=0,24 do + add(particles,{ + x=rnd128(), + y=rnd128(), + s=flr(rnd(1.25)), + spd=0.25+rnd(5), + off=rnd(), + c=6+rnd(2), + }) +end + +dead_particles={} + +-- [player entity] + +player={ + layer=2, + init=function(this) + this.grace,this.jbuffer=0,0 + this.djump=max_djump + this.dash_time,this.dash_effect_time=0,0 + this.dash_target_x,this.dash_target_y=0,0 + this.dash_accel_x,this.dash_accel_y=0,0 + this.hitbox=rectangle(1,3,6,5) + this.spr_off=0 + this.collides=true + create_hair(this) + -- -- + this.berry_timer=0 + this.berry_count=0 + -- -- + end, + update=function(this) + if pause_player then + return + end + + -- horizontal input + local h_input=btn(โžก๏ธ) and 1 or btn(โฌ…๏ธ) and -1 or 0 + + -- spike collision / bottom death + if this.is_flag(0,0,-1) or + this.y>lvl_ph then + kill_player(this) + end + + -- on ground checks + local on_ground=this.is_solid(0,1) + + -- -- + if on_ground then + this.berry_timer+=1 + else + this.berry_timer=0 + this.berry_count=0 + end + + for f in all(fruitrain) do + if f.type==fruit and not f.golden and this.berry_timer>5 and f then + -- to be implemented: + -- save berry + -- save golden + this.berry_timer=-5 + this.berry_count+=1 + berry_count+=1 + got_fruit[f.fruit_id]=true + init_object(lifeup, f.x, f.y,this.berry_count) + del(fruitrain, f) + destroy_object(f) + if (fruitrain[1]) fruitrain[1].target=this + end + end + -- -- + + -- landing smoke + if on_ground and not this.was_on_ground then + this.init_smoke(0,4) + end + + -- jump and dash input + local jump,dash=btn(๐Ÿ…พ๏ธ) and not this.p_jump,btn(โŽ) and not this.p_dash + this.p_jump,this.p_dash=btn(๐Ÿ…พ๏ธ),btn(โŽ) + + -- jump buffer + if jump then + this.jbuffer=4 + elseif this.jbuffer>0 then + this.jbuffer-=1 + end + + -- grace frames and dash restoration + if on_ground then + this.grace=6 + if this.djump0 then + this.grace-=1 + end + + -- dash effect timer (for dash-triggered events, e.g., berry blocks) + this.dash_effect_time-=1 + + -- dash startup period, accel toward dash target speed + if this.dash_time>0 then + this.init_smoke() + this.dash_time-=1 + this.spd=vector( + appr(this.spd.x,this.dash_target_x,this.dash_accel_x), + appr(this.spd.y,this.dash_target_y,this.dash_accel_y) + ) + else + -- x movement + local maxrun=1 + local accel=on_ground and 0.6 or 0.4 + local deccel=0.15 + + -- set x speed + this.spd.x=abs(this.spd.x)<=1 and + appr(this.spd.x,h_input*maxrun,accel) or + appr(this.spd.x,sign(this.spd.x)*maxrun,deccel) + + -- facing direction + if this.spd.x~=0 then + this.flip.x=this.spd.x<0 + end + + -- y movement + local maxfall=2 + + -- wall slide + if h_input~=0 and this.is_solid(h_input,0) then + maxfall=0.4 + -- wall slide smoke + if rnd(10)<2 then + this.init_smoke(h_input*6) + end + end + + -- apply gravity + if not on_ground then + this.spd.y=appr(this.spd.y,maxfall,abs(this.spd.y)>0.15 and 0.21 or 0.105) + end + + -- jump + if this.jbuffer>0 then + if this.grace>0 then + -- normal jump + psfx(18) + this.jbuffer=0 + this.grace=0 + this.spd.y=-2 + this.init_smoke(0,4) + else + -- wall jump + local wall_dir=(this.is_solid(-3,0) and -1 or this.is_solid(3,0) and 1 or 0) + if wall_dir~=0 then + psfx(19) + this.jbuffer=0 + this.spd=vector(wall_dir*(-1-maxrun),-2) + -- wall jump smoke + this.init_smoke(wall_dir*6) + end + end + end + + -- dash + local d_full=5 + local d_half=3.5355339059 -- 5 * sqrt(2) + + if this.djump>0 and dash then + this.init_smoke() + this.djump-=1 + this.dash_time=4 + has_dashed=true + this.dash_effect_time=10 + -- vertical input + local v_input=btn(โฌ†๏ธ) and -1 or btn(โฌ‡๏ธ) and 1 or 0 + -- calculate dash speeds + this.spd=vector(h_input~=0 and + h_input*(v_input~=0 and d_half or d_full) or + (v_input~=0 and 0 or this.flip.x and -1 or 1) + ,v_input~=0 and v_input*(h_input~=0 and d_half or d_full) or 0) + -- effects + psfx(20) + freeze=2 + -- dash target speeds and accels + this.dash_target_x=2*sign(this.spd.x) + this.dash_target_y=(this.spd.y>=0 and 2 or 1.5)*sign(this.spd.y) + this.dash_accel_x=this.spd.y==0 and 1.5 or 1.06066017177 -- 1.5 * sqrt() + this.dash_accel_y=this.spd.x==0 and 1.5 or 1.06066017177 + elseif this.djump<=0 and dash then + -- failed dash smoke + psfx(21) + this.init_smoke() + end + end + + -- animation + this.spr_off+=0.25 + this.spr = not on_ground and (this.is_solid(h_input,0) and 5 or 3) or -- wall slide or mid air + btn(โฌ‡๏ธ) and 6 or -- crouch + btn(โฌ†๏ธ) and 7 or -- look up + this.spd.x~=0 and h_input~=0 and 1+this.spr_off%4 or 1 -- walk or stand + update_hair(this) + -- exit level off the top (except summit) + if this.y<-4 and levels[lvl_id+1] then + next_level() + end + + -- was on the ground + this.was_on_ground=on_ground + end, + + draw=function(this) + -- clamp in screen + local clamped=mid(this.x,-1,lvl_pw-7) + if this.x~=clamped then + this.x=clamped + this.spd.x=0 + end + -- draw player hair and sprite + set_hair_color(this.djump) + draw_hair(this) + draw_obj_sprite(this) + pal() + end +} + +function create_hair(obj) + obj.hair={} + for i=1,5 do + add(obj.hair,vector(obj.x,obj.y)) + end +end + +function set_hair_color(djump) + pal(8,djump==1 and 8 or 12) +end + +function update_hair(obj) + local last=vector(obj.x+4-(obj.flip.x and-2 or 3),obj.y+(btn(โฌ‡๏ธ) and 4 or 2.9)) + for h in all(obj.hair) do + h.x+=(last.x-h.x)/1.5 + h.y+=(last.y+0.5-h.y)/1.5 + last=h + end +end + +function draw_hair(obj) + for i,h in pairs(obj.hair) do + circfill(round(h.x),round(h.y),mid(4-i,1,2),8) + end +end + +-- [other entities] + +player_spawn={ + layer=2, + init=function(this) + sfx(15) + this.spr=3 + this.target=this.y + this.y=min(this.y+48,lvl_ph) + cam_x,cam_y=mid(this.x,64,lvl_pw-64),mid(this.y,64,lvl_ph-64) + this.spd.y=-4 + this.state=0 + this.delay=0 + create_hair(this) + this.djump=max_djump + --- --- + for i=1,#fruitrain do + local f=init_object(fruit,this.x,this.y,fruitrain[i].spr) + f.follow=true + f.target=i==1 and this or fruitrain[i-1] + f.r=fruitrain[i].r + f.fruit_id=fruitrain[i].fruit_id + fruitrain[i]=f + end + --- --- + end, + update=function(this) + -- jumping up + if this.state==0 and this.y0 then + if this.delay>0 then + -- stall at peak + this.spd.y=0 + this.delay-=1 + elseif this.y>this.target then + -- clamp at target y + this.y=this.target + this.spd=vector(0,0) + this.state=2 + this.delay=5 + this.init_smoke(0,4) + sfx(16) + end + end + -- landing and spawning player object + elseif this.state==2 then + this.delay-=1 + this.spr=6 + if this.delay<0 then + destroy_object(this) + local p=init_object(player,this.x,this.y) + --- --- + if (fruitrain[1]) fruitrain[1].target=p + --- --- + end + end + update_hair(this) + end, + draw=player.draw + -- draw=function(this) + -- set_hair_color(max_djump) + -- draw_hair(this,1) + -- draw_obj_sprite(this) + -- unset_hair_color() + -- end +} + +---- +camera_trigger={ + update=function(this) + if this.timer and this.timer>0 then + this.timer-=1 + if this.timer==0 then + cam_offx=this.offx + cam_offy=this.offy + else + cam_offx+=cam_gain*(this.offx-cam_offx) + cam_offy+=cam_gain*(this.offy-cam_offy) + end + elseif this.player_here() then + this.timer=5 + end + end +} +---- + +spring={ + init=function(this) + this.dy,this.delay=0,0 + end, + update=function(this) + local hit=this.player_here() + if this.delay>0 then + this.delay-=1 + elseif hit then + hit.y,hit.spd.y,hit.dash_time,hit.dash_effect_time,this.dy,this.delay,hit.djump=this.y-4,-3,0,0,4,10,max_djump + hit.spd.x*=0.2 + psfx(14) + end + this.dy*=0.75 + end, + draw=function(this) + sspr(72,0,8,8-flr(this.dy),this.x,this.y+this.dy) + end +} + +side_spring={ + init=function(this) + this.dx,this.dir=0,this.is_solid(-1,0) and 1 or -1 + end, + update=function(this) + local hit=this.player_here() + if hit then + hit.x,hit.spd.x,hit.spd.y,hit.dash_time,hit.dash_effect_time,this.dx,hit.djump=this.x+this.dir*4,this.dir*3,-1.5,0,0,4,max_djump + psfx(14) + end + this.dx*=0.75 + end, + draw=function(this) + local dx=flr(this.dx) + sspr(64,0,8-dx,8,this.x+dx*(this.dir-1)/-2,this.y,8-dx,8,this.dir==1) + end +} + + +refill={ + init=function(this) + this.offset=rnd(1) + this.timer=0 + this.hitbox=rectangle(-1,-1,10,10) + this.active=true + end, + update=function(this) + if this.active then + this.offset+=0.02 + local hit=this.player_here() + if hit and hit.djump0 then + this.timer-=1 + else + psfx(12) + this.init_smoke() + this.active=true + end + end, + draw=function(this) + local x,y=this.x,this.y + if this.active then + spr(15,x,y+sin(this.offset)+0.5) + else + -- color(7) + -- line(x,y+4,x+3,y+7) + -- line(x+4,y+7,x+7,y+4) + -- line(x+7,y+3,x+4,y) + -- line(x+3,y,x,y+3) + foreach(split( + [[0,4,3,7 + 4,7,7,4 + 7,3,4,0 + 3,0,0,3]],"\n"),function(t) + local o1,o2,o3,o4=unpack(split(t)) + line(x+o1,y+o2,x+o3,y+o4,7) + end + ) + end + end +} + +fall_floor={ + init=function(this) + this.solid_obj=true + this.state=0 + end, + update=function(this) + -- idling + if this.state==0 then + for i=0,2 do + if this.check(player,i-1,-(i%2)) then + psfx(13) + this.state,this.delay=1,15 + this.init_smoke() + break + end + end + -- shaking + elseif this.state==1 then + this.delay-=1 + if this.delay<=0 then + this.state=2 + this.delay=60--how long it hides for + this.collideable=false + end + -- invisible, waiting to reset + elseif this.state==2 then + this.delay-=1 + if this.delay<=0 and not this.player_here() then + psfx(12) + this.state=0 + this.collideable=true + this.init_smoke() + end + end + end, + draw=function(this) + spr(this.state==1 and 26-this.delay/5 or this.state==0 and 23,this.x,this.y) --add an if statement if you use sprite 0 + end +} + +fall_plat={ + init=function(this) + while this.right()0 then + this.timer-=1 + if this.timer==0 then + this.state=this.finished and 2 or 1 + this.spd.y=0.4 + end + elseif this.state==1 then + if this.spd.y==0 then + this.state=0 + for i=0,this.hitbox.w-1,8 do + this.init_smoke(i,this.hitbox.h-2) + end + this.timer=6 + this.finished=true + end + this.spd.y=appr(this.spd.y,4,0.4) + end + end, + draw=function(this) + local x,y=this.x,this.y + if this.state==0 then + x+=rnd(2)-1 + y+=rnd(2)-1 + end + local r,d=x+this.hitbox.w-8,y+this.hitbox.h-8 + for i=x,r,r-x do + for j=y,d,d-y do + spr(80,i,j,1.0,1.0,i~=x,j~=y) + end + end + for i=x+8,r-8,8 do + spr(81,i,y) + spr(81,i,d,1,1,false,true) + end + for i=y+8,d-8,8 do + spr(83,x,i) + spr(83,r,i,1,1,true) + end + for i=x+8,r-8,8 do + for j=y+8,d-8,8 do + spr((i+j-x-y)%16==0 and 84 or 85,i,j) + end + end + end + +} + +smoke={ + layer=3, + init=function(this) + this.spd=vector(0.3+rnd(0.2),-0.1) + this.x+=-1+rnd(2) + this.y+=-1+rnd(2) + this.flip=vector(maybe(),maybe()) + end, + update=function(this) + this.spr+=0.2 + if this.spr>=29 then + destroy_object(this) + end + end +} + +--- --- +fruitrain={} +fruit={ + check_fruit=true, + init=function(this) + this.y_=this.y + this.off=0 + this.follow=false + this.tx=this.x + this.ty=this.y + this.golden=this.spr==11 + if this.golden and deaths>0 then + destroy_object(this) + end + end, + update=function(this) + if not this.follow then + local hit=this.player_here() + if hit then + hit.berry_timer=0 + this.follow=true + this.target=#fruitrain==0 and hit or fruitrain[#fruitrain] + this.r=#fruitrain==0 and 12 or 8 + add(fruitrain,this) + end + else + if this.target then + this.tx+=0.2*(this.target.x-this.tx) + this.ty+=0.2*(this.target.y-this.ty) + local a=atan2(this.x-this.tx,this.y_-this.ty) + local k=(this.x-this.tx)^2+(this.y_-this.ty)^2 > this.r^2 and 0.2 or 0.1 + this.x+=k*(this.tx+this.r*cos(a)-this.x) + this.y_+=k*(this.ty+this.r*sin(a)-this.y_) + end + end + this.off+=0.025 + this.y=this.y_+sin(this.off)*2.5 + end +} +--- --- + +fly_fruit={ + check_fruit=true, + init=function(this) + this.start=this.y + this.step=0.5 + this.sfx_delay=8 + end, + update=function(this) + --fly away + if has_dashed then + if this.sfx_delay>0 then + this.sfx_delay-=1 + if this.sfx_delay<=0 then + sfx_timer=20 + sfx(10) + end + end + this.spd.y=appr(this.spd.y,-3.5,0.25) + if this.y<-16 then + destroy_object(this) + end + -- wait + else + this.step+=0.05 + this.spd.y=sin(this.step)*0.5 + end + -- collect + if this.player_here() then + --- --- + this.init_smoke(-6) + this.init_smoke(6) + + local f=init_object(fruit,this.x,this.y,10) --if this happens to be in the exact location of a different fruit that has already been collected, this'll cause a crash + --TODO: fix this if needed + f.fruit_id=this.fruit_id + fruit.update(f) + --- --- + destroy_object(this) + end + end, + draw=function(this) + spr(10,this.x,this.y) + for ox=-6,6,12 do + spr((has_dashed or sin(this.step)>=0) and 12 or this.y>this.start and 14 or 13,this.x+ox,this.y-2,1,1,ox==-6) + end + end +} + +lifeup={ + init=function(this) + this.spd.y=-0.25 + this.duration=30 + this.flash=0 + this.outline=false + sfx_timer=20 + sfx(9) + end, + update=function(this) + this.duration-=1 + if this.duration<=0 then + destroy_object(this) + end + end, + draw=function(this) + this.flash+=0.5 + ---- + ?this.spr<=5 and this.spr.."000" or "1UP",this.x-4,this.y-4,7+this.flash%2 + ---- + end +} + + +psfx=function(num) + if sfx_timer<=0 then + sfx(num) + end +end + +-- [tile dict] +tiles={ + [1]=player_spawn, + [8]=side_spring, + [9]=spring, + [10]=fruit, + [11]=fruit, + [12]=fly_fruit, + [15]=refill, + [23]=fall_floor, + [66]=fall_plat +} + +-- [object functions] + +function init_object(type,x,y,tile) + --generate and check berry id + local id=x..","..y..","..lvl_id + if type.check_fruit and got_fruit[id] then + return + end + + local obj={ + type=type, + collideable=true, + spr=tile, + flip=vector(), + x=x, + y=y, + hitbox=rectangle(0,0,8,8), + spd=vector(0,0), + rem=vector(0,0), + fruit_id=id, + outline=true, + draw_seed=rnd() + } + function obj.left() return obj.x+obj.hitbox.x end + function obj.right() return obj.left()+obj.hitbox.w-1 end + function obj.top() return obj.y+obj.hitbox.y end + function obj.bottom() return obj.top()+obj.hitbox.h-1 end + + function obj.is_solid(ox,oy) + for o in all(objects) do + if o!=obj and (o.solid_obj or o.semisolid_obj and not obj.objcollide(o,ox,0) and oy>0) and obj.objcollide(o,ox,oy) then + return true + end + end + return (oy>0 and not obj.is_flag(ox,0,3) and obj.is_flag(ox,oy,3)) or -- one way platform or + obj.is_flag(ox,oy,0) -- solid terrain + end + + function obj.is_flag(ox,oy,flag) + local x1,x2,y1,y2=obj.left(),obj.right(),obj.top(),obj.bottom() + for i=mid(0,lvl_w-1,(x1+ox)\8),mid(0,lvl_w-1,(x2+ox)/8) do + for j=mid(0,lvl_h-1,(y1+oy)\8),mid(0,lvl_h-1,(y2+oy)/8) do + local tile=tile_at(i,j) + if flag>=0 then + if fget(tile,flag) and (flag~=3 or j*8>y2) then + return true + end + else + if ({obj.spd.y>=0 and y2%8>=6, + obj.spd.y<=0 and y1%8<=2, + obj.spd.x<=0 and x1%8<=2, + obj.spd.x>=0 and x2%8>=6})[tile-15] then + return true + end + end + end + end + end + + function obj.objcollide(other,ox,oy) + return other.collideable and + other.right()>=obj.left()+ox and + other.bottom()>=obj.top()+oy and + other.left()<=obj.right()+ox and + other.top()<=obj.bottom()+oy + end + function obj.check(type,ox,oy) + for other in all(objects) do + if other and other.type==type and other~=obj and obj.objcollide(other,ox,oy) then + return other + end + end + end + + function obj.player_here() + return obj.check(player,0,0) + end + + function obj.move(ox,oy,start) + for axis in all{"x","y"} do + obj.rem[axis]+=axis=="x" and ox or oy + local amt=round(obj.rem[axis]) + obj.rem[axis]-=amt + local upmoving=axis=="y" and amt<0 + local riding=not obj.player_here() and obj.check(player,0,upmoving and amt or -1) + local movamt + if obj.collides then + local step=sign(amt) + local d=axis=="x" and step or 0 + local p=obj[axis] + for i=start,abs(amt) do + if not obj.is_solid(d,step-d) then + obj[axis]+=step + else + obj.spd[axis],obj.rem[axis]=0,0 + break + end + end + movamt=obj[axis]-p --save how many px moved to use later for solids + else + movamt=amt + if (obj.solid_obj or obj.semisolid_obj) and upmoving and riding then + movamt+=obj.top()-riding.bottom()-1 + local hamt=round(riding.spd.y+riding.rem.y) + hamt+=sign(hamt) + if movamt0 and obj.right()+1-hit.left() or amt<0 and obj.left()-hit.right()-1) or 0, + axis=="y" and (amt>0 and obj.bottom()+1-hit.top() or amt<0 and obj.top()-hit.bottom()-1) or 0, + 1) + if obj.player_here() then + kill_player(hit) + end + elseif riding then + riding.move(axis=="x" and movamt or 0, axis=="y" and movamt or 0,1) + end + obj.collideable=true + end + end + end + + function obj.init_smoke(ox,oy) + init_object(smoke,obj.x+(ox or 0),obj.y+(oy or 0),26) + end + + add(objects,obj); + + (obj.type.init or time)(obj) + + return obj +end + +function destroy_object(obj) + del(objects,obj) +end + +function kill_player(obj) + sfx_timer=12 + sfx(17) + deaths+=1 + destroy_object(obj) + --dead_particles={} + for dir=0,0.875,0.125 do + add(dead_particles,{ + x=obj.x+4, + y=obj.y+4, + t=2, + dx=sin(dir)*3, + dy=cos(dir)*3 + }) + end + -- --- + for f in all(fruitrain) do + if (f.golden) full_restart=true + del(fruitrain,f) + end + --- --- + delay_restart=15 + -- + tstate=0 + -- +end + +-- [room functions] + + +function next_level() + local next_lvl=lvl_id+1 + load_level(next_lvl) +end + +function load_level(id) + has_dashed=false + + --remove existing objects + foreach(objects,destroy_object) + + --reset camera speed + cam_spdx,cam_spdy=0,0 + + local diff_level=lvl_id~=id + + --set level index + lvl_id=id + + --set level globals + local tbl=split(levels[lvl_id]) + lvl_x,lvl_y,lvl_w,lvl_h=tbl[1]*16,tbl[2]*16,tbl[3]*16,tbl[4]*16 + lvl_pw=lvl_w*8 + lvl_ph=lvl_h*8 + + + --drawing timer setup + ui_timer=5 + + --reload map + if diff_level then + reload() + --chcek for mapdata strings + if mapdata[lvl_id] then + replace_mapdata(lvl_x,lvl_y,lvl_w,lvl_h,mapdata[lvl_id]) + end + end + + -- entities + for tx=0,lvl_w-1 do + for ty=0,lvl_h-1 do + local tile=tile_at(tx,ty) + if tiles[tile] then + init_object(tiles[tile],tx*8,ty*8,tile) + end + end + end + foreach(objects,function(o) + (o.type.end_init or time)(o) + end) + + ---- + --generate camera triggers + cam_offx,cam_offy=0,0 + for s in all(camera_offsets[lvl_id]) do + local tx,ty,tw,th,offx,offy=unpack(split(s)) + local t=init_object(camera_trigger,tx*8,ty*8) + t.hitbox,t.offx,t.offy=rectangle(0,0,tw*8,th*8),offx,offy + end + ---- +end + +-- [main update loop] + +function _update() + frames+=1 + if time_ticking then + seconds+=frames\30 + minutes+=seconds\60 + seconds%=60 + end + frames%=30 + + if music_timer>0 then + music_timer-=1 + if music_timer<=0 then + music(10,0,7) + end + end + + if sfx_timer>0 then + sfx_timer-=1 + end + + -- cancel if freeze + if freeze>0 then + freeze-=1 + return + end + + -- restart (soon) + if delay_restart>0 then + cam_spdx,cam_spdy=0,0 + delay_restart-=1 + if delay_restart==0 then + -- -- + if full_restart then + full_restart=false + _init() + -- -- + else + load_level(lvl_id) + end + end + end + + -- update each object + foreach(objects,function(obj) + obj.move(obj.spd.x,obj.spd.y,obj.type==player and 0 or 1); + (obj.type.update or time)(obj) + obj.draw_seed=rnd() + end) + + --move camera to player + foreach(objects,function(obj) + if obj.type==player or obj.type==player_spawn then + move_camera(obj) + return + end + end) + +end + +-- [drawing functions] + +function _draw() + if freeze>0 then + return + end + + -- reset all palette values + pal() + + --set cam draw position + draw_x=round(cam_x)-64 + draw_y=round(cam_y)-64 + camera(draw_x,draw_y) + + -- draw bg color + cls() + + -- bg clouds effect + foreach(clouds,function(c) + c.x+=c.spd-cam_spdx + rectfill(c.x+draw_x,c.y+draw_y,c.x+c.w+draw_x,c.y+16-c.w*0.1875+draw_y,1) + if c.x>128 then + c.x=-c.w + c.y=rnd(120) + end + end) + + -- draw bg terrain + palt(0,false) + palt(8,true) + map(lvl_x,lvl_y,0,0,lvl_w,lvl_h,4) + palt() + + -- draw outlines + for i=0,15 do pal(i,1) end + pal=time + foreach(objects,function(o) + if o.outline then + for dx=-1,1 do for dy=-1,1 do if dx==0 or dy==0 then + camera(draw_x+dx,draw_y+dy) draw_object(o) + end end end + end + end) + pal=_pal + camera(draw_x,draw_y) + pal() + + --set draw layering + --0: background layer + --1: default layer + --2: player layer + --3: foreground layer + local layers={{},{},{}} + foreach(objects,function(o) + if o.type.layer==0 then + draw_object(o) --draw below terrain + else + add(layers[o.type.layer or 1],o) --add object to layer, default draw below player + end + end) + -- draw terrain + palt(0,false) + palt(8,true) + map(lvl_x,lvl_y,0,0,lvl_w,lvl_h,2) + palt() + + -- draw objects + foreach(layers,function(l) + foreach(l,draw_object) + end) + + -- draw platforms + map(lvl_x,lvl_y,0,0,lvl_w,lvl_h,8) + -- particles + foreach(particles,function(p) + p.x+=p.spd-cam_spdx + p.y+=sin(p.off)-cam_spdy + p.y%=128 + p.off+=min(0.05,p.spd/32) + rectfill(p.x+draw_x,p.y+draw_y,p.x+p.s+draw_x,p.y+p.s+draw_y,p.c) + if p.x>132 then + p.x=-4 + p.y=rnd128() + elseif p.x<-4 then + p.x=128 + p.y=rnd128() + end + end) + + -- dead particles + foreach(dead_particles,function(p) + p.x+=p.dx + p.y+=p.dy + p.t-=0.2 + if p.t<=0 then + del(dead_particles,p) + end + rectfill(p.x-p.t,p.y-p.t,p.x+p.t,p.y+p.t,14+5*p.t%2) + end) + + -- draw time + if ui_timer>=-30 then + if ui_timer<0 then + draw_time(draw_x+4,draw_y+4) + end + ui_timer-=1 + end + + -- + camera() + color(0) + if tstate>=0 then + local t20=tpos+20 + if tstate==0 then + po1tri(tpos,0,t20,0,tpos,127) + if(tpos>0) rectfill(0,0,tpos,127) + if(tpos>148) then + tstate=1 + tpos=-20 + end + else + po1tri(t20,0,t20,127,tpos,127) + if(tpos<108) rectfill(t20,0,127,127) + if(tpos>148) then + tstate=-1 + tpos=-20 + end + end + tpos+=14 + end + -- +end + +function draw_object(obj) + srand(obj.draw_seed); + (obj.type.draw or draw_obj_sprite)(obj) +end + +function draw_obj_sprite(obj) + spr(obj.spr,obj.x,obj.y,1,1,obj.flip.x,obj.flip.y) +end + +function draw_time(x,y) + rectfill(x,y,x+32,y+6,0) + ?two_digit_str(minutes\60)..":"..two_digit_str(minutes%60)..":"..two_digit_str(seconds),x+1,y+1,7 +end + + +function two_digit_str(x) + return x<10 and "0"..x or x +end + +-- [helper functions] + +function round(x) + return flr(x+0.5) +end + +function appr(val,target,amount) + return val>target and max(val-amount,target) or min(val+amount,target) +end + +function sign(v) + return v~=0 and sgn(v) or 0 +end + +function maybe() + return rnd()<0.5 +end + +function tile_at(x,y) + return mget(lvl_x+x,lvl_y+y) +end + +---- + +-- transition globals +tstate=-1 +tpos=-20 + +-- triangle functions +function po1tri(x0,y0,x1,y1,x2,y2) + local c=x0+(x2-x0)/(y2-y0)*(y1-y0) + p01traph(x0,x0,x1,c,y0,y1) + p01traph(x1,c,x2,x2,y1,y2) +end + +function p01traph(l,r,lt,rt,y0,y1) + lt,rt=(lt-l)/(y1-y0),(rt-r)/(y1-y0) + for y0=y0,y1 do + rectfill(l,y0,r,y0) + l+=lt + r+=rt + end +end +-- -- +-->8 +--[map metadata] + +--level table +--"x,y,w,h" +levels={ + "0,0,8,1", +} + +---- +--camera trigger hitboxes +--"x,y,w,h,off_x,off_y" +camera_offsets={ +} +---- + +--mapdata string table +--assigned levels will load from here instead of the map +mapdata={ +} + + +function move_camera(obj) + ---- + cam_spdx=cam_gain*(4+obj.x-cam_x+cam_offx) + cam_spdy=cam_gain*(4+obj.y-cam_y+cam_offy) + ---- + + cam_x+=cam_spdx + cam_y+=cam_spdy + + --clamp camera to level boundaries + local clamped=mid(cam_x,64,lvl_pw-64) + if cam_x~=clamped then + cam_spdx=0 + cam_x=clamped + end + clamped=mid(cam_y,64,lvl_ph-64) + if cam_y~=clamped then + cam_spdy=0 + cam_y=clamped + end +end + + +--replace mapdata with hex +function replace_mapdata(x,y,w,h,data) + for y_=0,h*2-1,2 do + local offset=y*2+y_<64 and 8192 or 0 + for x_=1,w*2,2 do + local i=x_+y_*w + poke(offset+x+y*128+y_*64+x_/2,"0x"..sub(data,i,i+1)) + end + end +end + +--[[ + +short on tokens? +everything below this comment +is just for grabbing data +rather than loading it +and can be safely removed! + +--]] + +--copy mapdata string to clipboard +function get_mapdata(x,y,w,h) + local reserve="" + for y_=0,h*2-1,2 do + local offset=y*2+y_<64 and 8192 or 0 + for x_=1,w*2,2 do + reserve=reserve..num2hex(peek(offset+x+y*128+y_*64+x_/2)) + end + end + printh(reserve,"@clip") +end + +--convert mapdata to memory data +function num2hex(v) + return sub(tostr(v,true),5,6) +end +__gfx__ +000000000000000000000000088888800000000000000000000000000000000000000000000000000300b0b00a0aa0a000000000000000000000000000077000 +00000000088888800888888088888888088888800888880000000000088888800004000000000000003b33000aa88aa0000777770000000000000000007bb700 +000000008888888888888888888ffff888888888888888800888888088f1ff180009505000000000028888200299992000776670000000000000000007bbb370 +00000000888ffff8888ffff888f1ff18888ffff88ffff8808888888888fffff800090505049999400898888009a999900767770000000000000000007bbb3bb7 +0000000088f1ff1888f1ff1808fffff088f1ff1881ff1f80888ffff888fffff800090505005005000888898009999a9007766000077777000000000073b33bb7 +0000000008fffff008fffff00033330008fffff00fffff8088fffff808333380000950500005500008898880099a999007777000077776700770000007333370 +00000000003333000033330007000070073333000033337008f1ff10003333000004000000500500028888200299992007000000070000770777777000733700 +00000000007007000070007000000000000007000000700007733370007007000000000000055000002882000029920000000000000000000007777700077000 +888888886665666555888888888886664fff4fff4fff4fff4fff4fffd666666dd666666dd666066d000000000000000070000000d666666d0ff40ff077777770 +888888886765676566788888888777764444444444444444444444446dddddd56ddd5dd56dd50dd50077000007700700070000076dddddd54ff44ff477777777 +88888888677867786777788888888766000450000000000000054000666ddd55666d6d5556500555007770700777000000000000666ddd554fff444477777777 +8878887887888788666888888888885500450000000000000000540066ddd5d5656505d50000005507777770077000000000000066ddd5d50440044467776777 +887888788788878855888888888886660450000000000000000005406ddd5dd56dd50655650000000777777000007000000000006ddd5dd54444444066667770 +867786778888888866788888888777764500000000000000000000546ddd6d656ddd7d656d5005650777777000000770000000006ddd6d654ff44f446dccc766 +5676567688888888677778888888876650000000000000000000000505ddd65005d5d6500550565007077700000707700700007085ddd6584fff4ff4ccccccc6 +56665666888888886668888888888855000000000000000000000000000000000000000000000000000000007000000000000000888888880ff40ff4c6111660 +7ccccccc0777777777777777777777700ff45ff4fff04ff04ff04ff00ff40000cc00000000000000000004448888888888888888077777770777777700000000 +77ccccc07777777777677767777777774fff4ff44ff4fff44ffffff4ffff40001c00cc0000000000044044448888888888888888777777777777777700000000 +76ccccc07677667777766677777777774ff44f444f44ff444fff4ffffff444000000ccc000000000444444448888888888888838777777777777777700000000 +667cccc07766677777776d6767776777444444404444f4400fff4ff44444000000001ccc000000004444044088888888888888b8777677767776777600000000 +6ccccccc77d67777dd77dcd76666777004400440440444400444044004ff40000cc01ccc00000000444400008888b88888888b38077766667777666600000000 +7ccccccc7dcd667dccddcccd6d677766fff400000000440000444ff4fff444001ccc11c10000000004440000888b888883888b88667cccd6667cccd600000000 +7ccccccc7cccd66cccccccccccc66d66ff4404000000000004404fffff4440001ccc01110000000000440044838b883888b8b3886ccccccc6ccccccc00000000 +77cccccc7ccccccc0ccc00cccccd6dd64440000000000000000004ff0440000011c00000000000000040004483833838883833880661116c1661116c00000000 +ccccccc777cccccc00cccccccccccc7744400000000000000000044400004ff00ccc10000cccccc0044440004400044000000005000000000000000000000000 +cccccc7777cccccccccccccccccccc77ff44040000000440004044ff0004ffff1cc11000cccccccc444440000444444000000055000000000000000000000000 +cccc777767c7cccccccccccccccc7c67fff400000440444000004fff00444fff111100001ccccccc444400004444444000000555000000000000000000000000 +00ccccc76ccccccccccccc6cccccccc60440044044444f400440044000044ff40011cc101cc1ccc1004444404444444400005555000000000000000000000000 +0ccccc776ccccccccc6cccccccccccc6444444404ff4440004444444004f4440001cccc01cc11c10004444404444444055555555000000000000000000000000 +ccccc67766ccccc6cccccccc6ccccc664ff44f444fff4f4444f44ff4004444ff0111cc1011111100044444404444444055555555000000000000000000000000 +ccccc6676ccc66c6666ccc666c66ccc64fff4ff4ffff4ff44ff4fff400044fff1c11110001101000044444004444440055555555000000000000000000000000 +cccccc670666666606666666666666660ff40ff444ff0ff44ff04ff0000044ffcc10000000000000044000000440400055555555000000000000000000000000 +00000000000000000777777777777777888888880000000000000000888558888885b38888888888888888888888888811111111111111111155111151111115 +00000000000000007777777777677767888888880000000000000000885dd588885dd38888888888888888888888888815118811111111111555885151111155 +0000000000000000767766777776667788888888000000000000000085d66d5885d66b3888888888888888888888888811188881115111115888888585111158 +00000000000000007766677777776d678888888800000000000000005d6666d53d66663588888888888888888888888811188881111111111888888555111155 +000000000000000077d67777dd77dcd7888888880000000000000000165555613655553188888888888888888888888811158881111155111888888551151115 +00000000000000007dcd667dccddcccd888877880000000000000000165aa561b653856188885555555555558888888815515551111155111888885185111158 +00000000000000007cccd66ccccccccc877766780000000000000000816aa618316b861888855151cc5c551c5888888815511111151111111588855185515588 +00000000000000007ccccccc0ccc00cc766776770000000000000000816aa618816388888855c1511c51c551c588888811111111111111111155511188855588 +0777777777777777777777707ccccccccc0000000cccccc088144188816aa618816888888551115111511c551158888888855585555555555588555888855888 +77777777776777677777777777ccccc01c00cc00cccccccc88114188816556188165588855555555555555555555555588555551551155115155155588511558 +76776677777666777777777776ccccc00000ccc01ccccccc8814118881d66d1881d66d889ddddddddd5dddddd577dd7585155155155115511111111585511118 +7766677777776d6767776777667cccc000001ccc1cc1ccc18813413881555518815555189d000dd55d555dd00077557555111155155115511151111555111115 +77d67777dd77dcd7666677706ccccccc0cc01ccc1cc11c1088b4438888144188881441886000006666566600000dddd555111111111511151111555555155111 +7dcd667dccddcccd6d6777667ccccccc1ccc11c11111110088343b888814418888114188d00600dddd5ddd00600dddd511111115115511111511555581155158 +7cccd66cccccccccccc66d667ccccccc1ccc01110110100088134188881411888814118850000055555555000005555851888111111115111111155885111158 +7ccccccc0ccc00cccccd6dd677cccccc11c00000000000003814b138881441888814418888000888000888800080008851888111111111111111115885111155 +d666666dd666666dd666666dd666666d881441144114418883133138881441880000000088888814418888880000000085111111111111115111115888555588 +6dddddd56dddddd56dddddd56ddddd55888144144144188888b4b388881441880000000088888814418888880000000055511111111111111115515555115555 +666ddd55666ddd5d6ddddd556dddd5d5888814441441888888144338881141880000000088888811418888880000000055111111111111111115511511115515 +66ddd5d566ddd5ddddddd5d56ddd5dd5888881444418888888134b38881411880000000088888814118888880000000055111111111111111111111511111158 +6ddd5dd56ddd5ddddddd5dd56ddddd65888888144188888888344388881441880000000088888811418888880000000085111151111111111111155511151158 +6ddd6d65dd5ddddd5ddddd65666dd65588888814118888888813b388881441880000000088888814418888880000000085111111111111111151155811111155 +85ddd658d5ddddd5ddddd65566dddd658888881141888888881b3188881441880000000088888814418888880000000081111111111111111111155815551155 +88888888dddddd5dddddddd56ddddd55888888144188888888334188881441880000000088888811418888880000000011111111111111111111155855885588 +00000000d66ddddddddddd656dddd5d588888814418888888b314188881441888814418888888814418888880000000055111111111111111111115888558555 +000000006dddddddddddddd56ddd5dd5888888114188888883141188881441888811418888888814418888880000000051551111111111111111115855115111 +00000000666ddd5ddddddd556dddddd5888888144188888883143188881141888814418888888814418888880000000011551511511111151111115555115511 +0000000066ddd5ddddddd5d56ddd6d6d8888881441888888881b4138881441888814418888888814118888880000000051111111111111151111111551111111 +000000006ddd5ddddddd5dd585ddd658888888144188888888344138881441888814418888888811418888880000000011111111111115511111115551111111 +000000006ddd6d6d6ddd6d65888888888888881141888888881313b8881441888811118888888814418888880000000085511551111115511111155851111551 +000000006d6dd66dd66dd6d588888888888888141188888881663618881411888166661888888814418888880000000085551551111511111115888885511511 +0000000085dddddddddddd5888888888888888144188888816636661881141881666666188888814418888880000000088855555558885551588888888855855 +88888888888888888888888888888888888888888888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 +88888888888888888888888888888888888888888788877888888888888888881200000000000000000000000000000000000000000000000000000000000000 +88888888888888888888888888888888888888887777777788888888888888880000000000000000000000000000000000000000000000000000000000000000 +88888888888888888888888888888888888888887ffff77788888888888888881200000000000000000000000000000000000000000000000000000000000000 +888888888888888888888888877888888888888881ff1f7888888888888888880000000000000000000000000000000000000000000000000000000000000000 +88888888888888888888888877678888888888888fffff8888888888888888881200000000000000000000000000000000000000000000000000000000000000 +8888888888888888888888886776778888888888f833338888888888888888880000000000000000000000000000000000000000000000000000000000000000 +88888888888888888888888877777678888888884868868888888888888888881200000000000000000000000000000000000000000000000000000000000000 +88888888888888888977999992992777866688882191142988888888888888880000000000000000000000000000000000000000000000000000000000000000 +88888888888888877767292222992267755588882791177988888888888888881200000000000000000000000000000000000000000000000000000000000000 +888888888888877777769221129921777ddd88887777777788888888888888880000000000000000000000000000000000000000000000000000000000000000 +88888888888876776229221112222177975588887ffff77788888888888888881200000000000000000000000000000000000000000000000000000000000000 +888888888888776222922114444444474292888821ff1f7988888888888888880000000000000000000000000000000000000000000000000000000000000000 +88888888888722222922144444444447441928881fffff2988888888888888881200000000000000000000000000000000000000000000000000000000000000 +8888888888727222922144477774444744412288f433332988888888888888880000000000000000000000000000000000000000000000000000000000000000 +88888888822262292214447777677444444411284767462988888888888888881200000000000000000000000000000000000000000000000000000000000000 +88888888999999991111111171111111111111198888888821911129888888880000000000000000000000000000000000000000000000000000000000000000 +88888888899142921444444444444444444444198888888821111119888888881200000000000000000000000000000000000000000000000000000000000000 +88888888829112921111111111111111111111198888888821171719888888880000000000000000000000000000000000000000000000000000000000000000 +88888888829142921144444414444444111444298888888811119911888888881200000000000000000000000000000000000000000000000000000000000000 +88888888829142921444444444444444444444298888888811177711888888880000000000000000000000000000000000000000000000000000000000000000 +88888888829142921449999444444444499994298888888811177719888888881200000000000000000000000000000000000000000000000000000000000000 +88888888829142921121911111111111219111298888888841177719888888880000000000000000000000000000000000000000000000000000000000000000 +8888888882914292142191144999944421911429888888881199d999888888881200000000000000000000000000000000000000000000000000000000000000 +88888899999999921421911441111944219114298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 +88889922222992221421911441444944219114298888888888888888888888881200000000000000000000000000000000000000000000000000000000000000 +88992222299221121121911111444244219114298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 +99999999922914421421911441444944219114298888888888888888888888881200000000000000000000000000000000000000000000000000000000000000 +82911111192914421429999441444944299994298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 +82914444192914421411111441444944111114298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 +82914114192914421444777741444944444444298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 +82914444192914421447677677744944477744298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 +__label__ +cccccccccccccccccccccccccccccccccccccc775500000000000000000000000000000000070000000000000000000000000000000000000000000000000000 +cccccccccccccccccccccccccccccccccccccc776670000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +ccccccccccccccccccccccccccccccccc77ccc776777700000000000000000000000000000000000000000000000000000000000000000000000000000000000 +ccccccccccccccccccccccccccccccccc77ccc776660000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +cccccccccccccccccccc7cccccc6ccccccccc7775500000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +cccccccccccccccccccccccccccccccccccc77776670000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +cccccccccccccccccccccccccccccccc777777776777700000000000000000000000000000000000000000000011111111111111111111111111111111111111 +cccccccccccccccccccccccccccccccc777777756661111111111111111111111111111111111100000000000011111111111111111111111111111111111111 +cccccccccccccccccccccccccccccc77011111111111111111111111111111111111111111111100000000000011111111111111111111111111111111111111 +ccccccccccccccccccccccccccccc777011111111111111111111111111111111111111111111100000000000011111111111111111111111111111111111111 +ccccccccccccccccccccccccccccc777011111111111111111111111111111111111111111111100000000000011111111111111111111111111111111111111 +cccccccccccccccccccccccccccc7777011111111111111111111111111111111111111111111100000000000011111111111111111111111111111111111111 +cccccccccccccccccccccccccccc7777011111111111111111111111111111111111111111111100000000000011111111111111111111111111111111111111 +ccccccccccccccccccccccccccccc777011111111111111111111111111111111111111111111100000000000011111111111111111111111111111111111111 +ccccccccccccccccccccccccccccc777011111111311b1b111111111111111111111111111111100000000000011111111111111111111111111111111111111 +cccccccccccccccccccccccccccccc7700000000003b330000000000000000000000000000000000000000000011111111111111111111111111111111111111 +cccccccccccccccccccccccccccccc77000000000288882000000000000000000000000000000000000070000000000000000000000000000000000000000000 +cccccccc66cccccccccccccccccccc77000000000898888000000000000000000000000000000000000000000000000000000000000000000000000000000000 +cccccccc66ccccccccccccccc77ccc77000000000888898000000000000000000000000000000000000000000000000000000000000000000000000000000000 +ccccccccccccccccccccccccc77ccc77000000000889888000000000000000000000000000000000000000000000000000000000000000000000000000000000 +ccccccccccccccccccc77cccccccc777000000000288882000000000000000000000000000000000000000000000000000000000000000000000006600000000 +ccccccccccccccccc777777ccccc7777000000000028820000000000000000000000000000000000000000000000000000000000000000000000006600000000 +cccccccccccccccc7777777777777777000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +6ccccccccccccccc7777777777777775111111111111111111111000000000000000000000000000000000000000000000000001111111111111111111111111 +cccccccccccccc776665666566656665111111111111111111111000000000000000000000000000000000000000000000000001111111111111111111111111 +ccccccccccccc7776765676567656765111111111111111111111000000000000000000000000000000000000000000000000001111111111111111111111111 +ccccccccccccc7776771677167716771111111111111111111111111111111111111111111111111111111110000000000000001111111111111111111111111 +cccccccccccc77771711171117111711111111111111111111111111111111111111111111111111111111110000000000000001111111111111111111111111 +cccccccccccc77771711171117111711111111111111111111111111111111111111111111111111111111110000000000000001111111111111111111111111 +ccccccccccccc7770000000000000011111111111111111111111111111111171111111111111111111111110000000000000001161111111111111111111111 +ccccccccccccc7770000000000000011111111111111111111111111111111111111111111111111111111110000000000000001111111111111111111111111 +cccccccccccccc770000000000000011111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000 +cccccccccccccc770000000000000011111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000 +ccccccccccccc7770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +ccccccccccccc7770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +cccccccccccc77770000000000000000000000000111111111111111111111111111111111111111111111100000000000000000000000000000000000000000 +cccccccccccc77770000000000000000000000000111111111111111111111111111111111111111111111100000000000000000000000000000000000000000 +ccccccccccccc7770000000000000000000000000111111111111111111111111111111111111111111111100000000000000000000000000000000000000000 +ccccccccccccc7770000000000000000000000000111111111111111111111111111111111111111111111100060000000000000000000000000000000000000 +cccccccccccccc770000000000000000000000000111111111111111111111111111111111111111111111100000000000000000000000000000000000000000 +cccccccccccccc770000000000000000000000000111111111111111111111111111111111111111111111100000000000000000000000000000000000000000 +cccccccccccccc770000000000000000000000000111111111111111111111111111111111111111111111100000000000000000000000000000000000000000 +ccccccccc77ccc770000000000000000000000000111111111111111111111111111111111111111111111100000000000000000000000000000000000000000 +ccccccccc77ccc770000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000000000000000 +ccccccccccccc7770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +cccccccccccc77770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +cccccccc777777770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +cccccccc777777750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +cccccc77550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +cccccc77667000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +c77ccc77677770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011 +c77ccc77666000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000770000000000011 +ccccc777550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000770000000000011 +cccc7777667000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011 +77777777677770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011 +77777775666000000000000000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000011 +55555555000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000077777700000000000000000 +55555555000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000777777770000000000000000 +55555555000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000777777770000000000000000 +55555555000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000777733770000000000000000 +55555555000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000777733770000000000000000 +55555555000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000737733370000001111111111 +555555550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007333bb370000001111111111 +555555550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000333bb300000001111111111 +55555555500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033333300000001111111111 +50555555550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ee0ee003b333300000001111111111 +55550055555000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeee0033333300000001111111111 +555500555555000000000000000000000000000000000000000000000000000000111111111111111111111111111111111e8e111333b3300000001111111111 +55555555555550000000000000000000000000000000000000000000000000000011111111111111111111111111b11111eeeee1113333000000001111111111 +5505555555555500000000000000000000000000000000000000000000000000001111111111111111111111111b111111ee3ee1110440000000001111111111 +5555555555555550000000000000000000000000000000000000000000000000001111111117111111111111131b11311111b111110440000000000000000111 +5555555555555555000000000000000000000000000000000000000000000000001111111111111111111111131331311111b111119999000000000000000111 +55555555555555550000000000000000077777700000000000000000000000000011111111111111511111115777777777777777777777755000000000000005 +55555555555555500000000000000000777777770000000000000000000000000011111111111111551111117777777777777777777777775500000000000055 +55555555555555000000000000000000777777770000000000000000000000000011111111111111555111117777ccccc777777ccccc77775550000000000555 +5555555555555000000000000000000077773377111111111111111111111111111111111111111155551111777cccccccc77cccccccc7775555000000005555 +555555555555000000000000000000007777337711111111111111111111111111111111111111115555511177cccccccccccccccccccc775555500000055555 +555555555550000000000000000000007377333711111111111111111111111111111111111110005555550077cc77ccccccccccccc7cc775555550000555555 +555555555500000000000000000000007333bb3711111111111111111111111111111111111110005555555077cc77cccccccccccccccc775555555005555555 +555555555000000000000000000000000333bb3111111111111111111111111111111111111110005555555577cccccccccccccccccc66775555555555555555 +555555555555555555555555000000000333333111111111111111111111111111111111111110055555555577ccccccccccccccc6cc66775555555555555555 +5555555555555555555555500000000003b3333111111111111111111111111111111111111110555055555577cccccccccccccccccccc775555555550555555 +555555555555555555555500000000300333333111111111111111111111111111111111111115555555005577cc7cccccccccccc77ccc775555555555550055 +555555555555555555555000000000b00333b33111111111111111111111111111111111111155555555005577ccccccccccccccc77ccc775555555555550055 +55555555555555555555000000000b3000333311111111111111111111111111111111111115555555555555777cccccccc77cccccccc7775555555555555555 +55555555555555555550000003000b00000440000000000000000000000000000000000000555555550555557777ccccc777777ccccc77775555555555055555 +55555555555555555500000000b0b300000440000000000000000000000000000000000005555555555555557777777777777777777777775555555555555555 +55555555555555555000000000303300009999000000000000000000000000000000000055555555555555555777777777777777777777755555555555555555 +55555555555555555777777777777777777777750000000000000000000000000000000555555555555555555555555500000000555555555555555555555555 +55555555505555557777777777777777777777770000000088888880000000000000005550555555555555555555555000000000055555550555555555555555 +55555555555500557777ccccc777777ccccc77770000000888888888000000300000055555550055555555555555550000000000005555550055555555555555 +5555555555550055777cccccccc77cccccccc77700000008888ffff8000000b00000555555550055555555555555500000000000000555550005555555555555 +555555555555555577cccccccccccccccccccc770000b00888f1ff1800000b300005555555555555555555555555000000000000000055550000555555555555 +555555555505555577cc77ccccccccccccc7cc77000b000088fffff003000b000055555555055555555555555550000000000000000005550000055555555555 +555555555555555577cc77cccccccccccccccc77131b11311833331000b0b3000555555555555555555555555500000000888800000000550000005555555555 +555555555555575577cccccccccccccccccccc771313313111711710703033005555555555555555555555555000000008888880000000050000000555555555 +7777777777777777cccccccccccccccccccccccc7777777777777777777777755555555555555555555555550000000008788880000000000000000055555555 +7777777777777777cccccccccccccccccccccccc7777777777777777777777775555555555555555555555550000000008888880000000000000000055555550 +c777777cc777777cccccccccccccccccccccccccc777777cc777777ccccc77775555555555555555555555550000000008888880000000000000000055555500 +ccc77cccccc77cccccccccccccccccccccccccccccc77cccccc77cccccccc7775555555555555555555555550000000008888880000000000000000055555000 +cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc775555555555555555555555550000000000888800000000000000000055550000 +ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7cc775555555555555555555555550000000000006000000000000000000055500000 +cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc775555555555555555555555550000000000060000000000000000000055000000 +cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc775555555555555555555555550000000000060001111111111111111151111111 +cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc775555555555555555555555550000000000060001111111111111111111111111 +cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc775555555555555550555555500000000000060001111111111111111111111111 +ccccccccccccccccccccccccccccccccccccccccccccccccccccccccc77ccc775500005555555500555555600000000000006001111111111111111111111111 +ccccccccccccccccccccccccccccccccccccccccccccccccccccccccc77ccc775500005555555000555550000000000000006001111111111111111111111111 +ccccccccccccccccccccccccccccccccccccccccccccccccccc77cccccccc7775500005555550000555500000000000000000001111111111111111111111111 +cccccccccccccc7cccccccccccccccccccccccccccccccccc777777ccccc77775500005555500000555000000000000000000000000000000000000000000000 +cccccccccccccccccccccccccccccccccccccccccccccccc77777777777777775555555555000000550000000000000000000000000000000000000000000000 +cccccccccccccccccccccccccccccccccccccccccccccccc77777777777777755555555550000000500000000000000000000000007700000000000000000000 +ccccccccccccccccccccccccccccccccccccccccc77ccc7700000000555555555555555500000000000000000000000000000000007700000000000000000000 +ccccccccccccccccccccccccccccccccccccccccc77cc77700000000055555555555555000000000000000000000000000000000000000000000000000000000 +ccccccccccccccccccccccccccccccccccccccccccccc77700000000005555555555550000000000000000000000000000000000000000000000000000000000 +cccccccccccccccccccccccccccccccccccccccccccc777770000000000555555555500000000000000000000000000000000000000000000000000000000000 +cccccccccccccccccccccccccccccccccccccccccccc777700000000000055555555000000000000000000000000000000000000000000000111111111111111 +ccccccccccccccccccccccccccccccccccccccccccccc77700000000000005555550000000000000000000000000000000000000000000000111111111111111 +ccccccccccccccccccccccccccccccccccccccccccccc77700000000000000555500000000000000000000000000000000000000000000000111111111111111 +cccccccccccccccccccccccccccccccccccccccccccccc7700000000000000055000000000000000000000000000000000000000000000000111111111111111 +cccccccccccccccccccccccccccccccccccccccccccccc7700000000000000000000000000000000000000000000000000000000000000000111111111111111 +ccccccccccccccccccccccccccccccccccccccccccccc77700000000000000000000000000000000000000000000000000000000000000000111111111111111 +ccccccccccccccccccccccccccccccccccccccccccccc77700000000000000000000000000000000000000000000000000006000000000000111111111111111 +cccccccccccccccccccccccccccccccccccccccccccc777700000000000000000000000000000000000000000000000000000000000007000111111111111111 +cccccccccccccccccccccccccccccccccccccccccccc777700000000000000000000000000000000000000000000000000000000000000000000000000000000 +ccccccccccccccccccccccccccccccccccccccccccccc77700000000000000000000000000000000000000000000000000000000000000000000000000000000 +ccccccccccccccccccccccccccccccccccccccccccccc77700000000000000000000000000000000000000000000000000000000000000000000000000000000 +cccccccccccccccccccccccccccccccccccccccccccccc7700000000000000000000000000000000000000000000000000000000000000000000000000000000 + +__gff__ +0000000000000000000000000000000002020202080808000000000000030303030303030303030303030302020303000303030303030303030303030400000000000000040404040404040404040404000000000303040404040404040404040303030304040404010404040404040403030303040404040404040404040404 +0404040404040404000000000000000004040404040404040000000000000000040404040404040400000000000000000404040404040404000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +__map__ +00000000000000000000000000272a2929292929292a37000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083000000000000000000000000000000000000000000000000000000000000000000000000000000004800 +00000000000000000000000000273b352a292929292936000000000000000000000000000000000000000000000000000000000000000000000000000000000000002122230000000000000000000000000000919293940000000000000000000000000000000000000000000000000000000000000000000000000000005800 +0000000000000000000000000034366d202829293a3700000000000000000000000000000000000000000000000000000000000000000000000000000000000000002028370000000000000000470000000000a1a2a3a40000000000000000000000000000000000000000000000000000000000000000000000000000005600 +00000000000000000000000000007c6d3139382928370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000203b3600000000000000005700004400b0b1b2b3952c00000000000000000000000000000000000000000000000000000000000000000000000000006624 +000000000000000000005f2b0000007c7d3132323233000000000000000000000000000000000000000000000000000000000000000000162123000047000000000020370000000000000000006700002122222222222225265e0000000000000000000000000000000000000000000000000000000000000000000000007627 +0000000000000000002425265e0000000042434343430000000000000000000000000000000000000000000000000000000000000000000020300000570000000000203700000000000000000077005c20382838282a3a3b376d5d5e4400002b00000044000000004400000000000000440000000000000000000000445c242a +00000000000000005c3435366e000000004300000000000000000000004800000000000000000000000000000044000000000000000000002028230067000000000020370000000000002c002b785c2138292929292929292a252522222225252222221f61626360606063616263000060636162000000000000002422253a29 +0000000047005c5d6d7d7e006c5d5e00004300000000000000000000005800000000000000000000000000000021222300000000000015162038300077000000000031330000000000002425252222282929292929292929293a2a283839282928393000717273000000737172730000007371720000000000000027392a2929 +0000000057006c6d7e0000007c6d6e0000000000000000000000000000560000000000480000000000000000002039300000000000000000203930447800000000000000000000000000273b2a283829292929292929292929292929292929292938330064650000000000646500000000006465000000000000003435292929 +00000000675c6d7e00000000006c6d5e00000000000000000000000000660000000000580000000000000015162028330000000044000000002028222223000000000000000000001516273a292929292929292929292929292929292929292928306e007475000000000074750000000000747500000000000000006c342a29 +494a4b00776c6e44000000002b6c6d7e0000000000000000000000002b76000000000056000000000000000000203000000021222223005c5d203838393000000000000021221f5d5e2b272a29292929292929292929292929292929292929293b366e00696a0000000000696a0000000000696a00000000000000007c6d273a +595a5b01782422230000000024267e0000002b2c002b0000000000002426000000000066000000000000002b0020305e000031383930006c6d20382928305e000000004420306d7d6d242a29292929292929292929292929292929292929293a376d6e00797a0000000000797a0000000000797a0000000000000000006c343a +25252525222228330000000027372b00001e25252526000000002c0027375e002b2c2b760044000000001e252238306d5d5e00202833006c6d20392938306d5d5e00212239376e0a6c342a2a292929292929292929292929292929292929292a376d7e00696a0000000000696a00005e0000696a0000000000000000007c6d27 +2a3a3b2a2839300000002c00273a26000000273b2a365e00001624223a376e001e25252222221f00005c6d273828336d6d6d5d273000007c6d342a2929306d6d2d22393838377c5d6d342a3a2929292929292929292929292929292929292929376e0000797a0000000000797a005c6e0000797a000000000000000000007c27 +2929292929383000000024252a3b3700005c272a376d6d5e0000342a3a366d5d6d272a3a283000005c6d6d273a376d6d7d6d7d27370000007c7d273a38307d6d6d2028292a36007c6d6d272a292929292929292929292929292929292929293a377e0000696a00005c0000696a006c6d5e00696a000000000000000000000027 +29292929292830000000273a292a37005c6d273a376d6d6e00000027376d6d6d6d273a29383000006c6d6d272a376d6e007c7e27370000000000272a2830006c6d272a3b370000006c6d273b292929292929292929292929292929292929292a37000000797a005c6e0000797a5c6d6d6e00797a000000000000000000000027 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000 +__sfx__ +010100000f0001e000120002200017000260001b0002c000210003100027000360002b0003a000300003e00035000000000000000000000000000000000000000000000000000000000000000000000000000000 +010100000970009700097000970008700077000670005700357003470034700347003470034700347003570035700357003570035700347003470034700337003370033700337000070000700007000070000700 +0101000036300234002f3001d4002a30017400273001340023300114001e3000e4001a3000c40016300084001230005400196001960019600196003f6003f6003f6003f6003f6003f6003f6003f6003f6003f600 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000001f37518375273752730027300243001d300263002a3001c30019300003000030000300003000030000300003000030000300003000030000300003000030000300003000030000300003000030000300 +000400000c5501c5601057023570195702c5702157037570285703b5702c5703e560315503e540315303e530315203f520315203f520315103f510315103f510315103f510315103f50000500005000050000500 +000400002f7402b760267701d7701577015770197701c750177300170015700007000070000700007000070000700007000070000700007000070000700007000070000700007000070000700007000070000700 +010100000c0633c6003c6603c6603c6603c6603065030650306403064030660306403063030630306503063030630306303062030620306202462024610246101861018610186100c6100c615006000060000600 +00020000101101211014110161101a120201202613032140321403410000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100 +00030000096450e655066550a6550d6550565511655076550c655046550965511645086350d615006050060500605006050060500605006050060500605006050060500605006050060500605006050060500605 +00030000070700a0700e0701007016070220702f0702f0602c0602c0502f0502f0402c0402c0302f0202f0102c000000000000000000000000000000000000000000000000000000000000000000000000000000 +000400000f0701e070120702207017070260701b0602c060210503105027040360402b0303a030300203e02035010000000000000000000000000000000000000000000000000000000000000000000000000000 +000300000977009770097600975008740077300672005715357003470034700347003470034700347003570035700357003570035700347003470034700337003370033700337000070000700007000070000700 +0102000036370234702f3701d4702a37017470273701347023370114701e3700e4701a3600c46016350084401233005420196001960019600196003f6003f6003f6003f6003f6003f6003f6003f6003f6003f600 +0002000011070130701a0702407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000300000d07010070160702207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000200000642008420094200b420224402a4503c6503b6503b6503965036650326502d6502865024640216401d6401a64016630116300e6300b62007620056100361010600106000060000600006000060000600 +0003000005110071303f6403f6403f6303f6203f6103f6153f6003f6003f600006000060000600006000060000600006000060000600006000060000600006000060000600006000060000600006000060000600 +000300001f3302b33022530295301f3202b32022520295201f3102b31022510295101f3002b300225002950000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +__music__ +00 40404040 +00 40404040 +00 40404040 +00 40404040 +00 40404040 +00 40404040 +00 40404040 +00 40404040 +00 41425253 +00 41425253 +00 40404040 +00 40404040 +00 40404040 +00 40404040 +00 40404040 +00 40404040 +00 40404040 +00 40404040 +00 41425253 +00 41425253 +00 40404040 +00 40404040 +00 40404040 +00 40404040 +00 40404040 +00 40404040 +00 40404040 +00 40404040 +00 40404040 +00 41425253 +00 40404040 +00 40404040 +00 40404040 +00 40404040 +00 41425253 +00 41425253 +00 41425253 +00 41425253 +00 41425253 +00 41425253 +00 40404040 +00 40404040 +00 41425253 +00 41425253 +00 41425253 +00 41425253 +00 41425253 +00 41425253 +00 41425253 +00 41425253 +00 41425253 +00 41425253 +00 41425253 +00 41425253 +00 41425253 +00 41425253 +00 41425253 +00 41425253 +00 41425253 +00 41425253 +00 41425253 +00 41425253 +00 41425253 +00 41425253 + From a75eb7cd2e126133b79a72f92e4611d489304e39 Mon Sep 17 00:00:00 2001 From: Vawlpe Date: Mon, 6 Sep 2021 18:51:43 +0300 Subject: [PATCH 2/9] epilogue loading from prologue cart --- prologue.p8 | 43 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/prologue.p8 b/prologue.p8 index ed6b3b4..65359eb 100644 --- a/prologue.p8 +++ b/prologue.p8 @@ -35,9 +35,9 @@ _pal=pal --for outlining -- [entry point] function _init() - max_djump,deaths,frames,seconds,minutes,music_timer,time_ticking,berry_count=1,0,0,0,0,0,true,0 + max_djump,deaths,frames,seconds,minutes,music_timer,time_ticking,berry_count=stat(6) == "epilogue" and 2 or 0,0,0,0,0,0,true,0 music(0,0,7) - load_level(1) + load_level(stat(6) == "epilogue" and 2 or 1) end @@ -296,7 +296,7 @@ function create_hair(obj) end function set_hair_color(djump) - pal(8,djump==1 and 8 or 12) + pal(8,djump==1 and 8 or djump==2 and 14 or 12) end function update_hair(obj) @@ -686,7 +686,7 @@ fly_fruit={ this.init_smoke(6) local f=init_object(fruit,this.x,this.y,10) --if this happens to be in the exact location of a different fruit that has already been collected, this'll cause a crash - --TODO: fix this if needed + --todo: fix this if needed f.fruit_id=this.fruit_id fruit.update(f) --- --- @@ -719,7 +719,7 @@ lifeup={ draw=function(this) this.flash+=0.5 ---- - ?this.spr<=5 and this.spr.."000" or "1UP",this.x-4,this.y-4,7+this.flash%2 + ?this.spr<=5 and this.spr.."000" or "1up",this.x-4,this.y-4,7+this.flash%2 ---- end } @@ -1247,6 +1247,7 @@ end --"x,y,w,h" levels={ "0,0,8,1", + "5,3,3,1" } ---- @@ -1419,6 +1420,38 @@ d666666dd666666dd666666dd666666d881441144114418883133138881441880000000088888814 82914444192914421411111441444944111114298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 82914114192914421444777741444944444444298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 82914444192914421447677677744944477744298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000000000000000000000008400 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000192939490000000000000000000000000000000000000000000000000000000000000000000000000000008500 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000001a2a3a4a0000000000000000000000000000000000000000000000000000000000000000000000000000006500 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000044000b1b2b3b59c200000000000000000000000000000000000000000000000000000000000000000000000000006642 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000122222222222225262e50000000000000000000000000000000000000000000000000000000000000000000000006772 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000283828382a2a3b373d6d5e5440000b20000004400000000440000000000000044000000000000000000001044c542a2 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000008392929292929292a252522222225252222222f11626360606063616263600000636162600000000000000422252a392 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000929292929292929292a3a282839382928293030017273700000037172737000000371727000000000000007293a29292 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000929292929292929292929292929292929283330046560000000000465600000000004656000000000000004353929292 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000929292929292929292929292929292928203e600475700000000004757000000000047570000000000000000c643a292 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000092929292929292929292929292929292b363e60096a6000000000096a6000000000096a60000000000000000c7d672a3 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000929292929292929292929292929292a373d6e60097a7000000000097a7000000000097a7000000000000000000c643a3 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000929292929292929292929292929292a273d6e70096a6000000000096a60000e5000096a6000000000000000000c7d672 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000009292929292929292929292929292929273e6000097a7000000000097a700c5e6000097a700000000000000000000c772 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000929292929292929292929292929292a373e7000096a60000c5000096a600c6d6e50096a6000000000000000000000072 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000929292929292929292929292929292a27300000097a700c5e6000097a7c5d6d6e60097a7000000000000000000000072 __label__ cccccccccccccccccccccccccccccccccccccc775500000000000000000000000000000000070000000000000000000000000000000000000000000000000000 cccccccccccccccccccccccccccccccccccccc776670000000000000000000000000000000000000000000000000000000000000000000000000000000000000 From c03f04c8259e8a344340ee84e94eefe2ac4cc309 Mon Sep 17 00:00:00 2001 From: Vawlpe Date: Tue, 7 Sep 2021 04:34:35 +0300 Subject: [PATCH 3/9] - port prologue.p8 to new _ENV base cart - fix mistakes from previous commits - Make falling platform in prologue trigger when you're under it --- prologue.p8 | 1195 +++++++++++++++++++++++++-------------------------- 1 file changed, 585 insertions(+), 610 deletions(-) diff --git a/prologue.p8 b/prologue.p8 index 65359eb..5f3279d 100644 --- a/prologue.p8 +++ b/prologue.p8 @@ -32,6 +32,8 @@ cam_x,cam_y,cam_spdx,cam_spdy,cam_gain,cam_offx,cam_offy=0,0,0,0,0.25,0,0 ---- _pal=pal --for outlining +local _g=_ENV --for writing to global vars + -- [entry point] function _init() @@ -75,223 +77,223 @@ dead_particles={} player={ layer=2, - init=function(this) - this.grace,this.jbuffer=0,0 - this.djump=max_djump - this.dash_time,this.dash_effect_time=0,0 - this.dash_target_x,this.dash_target_y=0,0 - this.dash_accel_x,this.dash_accel_y=0,0 - this.hitbox=rectangle(1,3,6,5) - this.spr_off=0 - this.collides=true - create_hair(this) + init=function(_ENV) + grace,jbuffer=0,0 + djump=max_djump + dash_time,dash_effect_time=0,0 + dash_target_x,dash_target_y=0,0 + dash_accel_x,dash_accel_y=0,0 + hitbox=rectangle(1,3,6,5) + spr_off=0 + collides=true + create_hair(_ENV) -- -- - this.berry_timer=0 - this.berry_count=0 + berry_timer=0 + berry_count=0 -- -- end, - update=function(this) + update=function(_ENV) if pause_player then return end -- horizontal input local h_input=btn(โžก๏ธ) and 1 or btn(โฌ…๏ธ) and -1 or 0 - + -- spike collision / bottom death - if this.is_flag(0,0,-1) or - this.y>lvl_ph then - kill_player(this) + if is_flag(0,0,-1) or + y>lvl_ph then + kill_player(_ENV) end -- on ground checks - local on_ground=this.is_solid(0,1) + local on_ground=is_solid(0,1) -- -- if on_ground then - this.berry_timer+=1 + berry_timer+=1 else - this.berry_timer=0 - this.berry_count=0 + berry_timer=0 + berry_count=0 end for f in all(fruitrain) do - if f.type==fruit and not f.golden and this.berry_timer>5 and f then + if f.type==fruit and not f.golden and berry_timer>5 and f then -- to be implemented: -- save berry -- save golden - this.berry_timer=-5 - this.berry_count+=1 + berry_timer=-5 berry_count+=1 + _g.berry_count+=1 got_fruit[f.fruit_id]=true - init_object(lifeup, f.x, f.y,this.berry_count) + init_object(lifeup, f.x, f.y,berry_count) del(fruitrain, f) destroy_object(f) - if (fruitrain[1]) fruitrain[1].target=this + if (fruitrain[1]) fruitrain[1].target=_ENV end end -- -- - + -- landing smoke - if on_ground and not this.was_on_ground then - this.init_smoke(0,4) + if on_ground and not was_on_ground then + init_smoke(0,4) end -- jump and dash input - local jump,dash=btn(๐Ÿ…พ๏ธ) and not this.p_jump,btn(โŽ) and not this.p_dash - this.p_jump,this.p_dash=btn(๐Ÿ…พ๏ธ),btn(โŽ) + local jump,dash=btn(๐Ÿ…พ๏ธ) and not p_jump,btn(โŽ) and not p_dash + p_jump,p_dash=btn(๐Ÿ…พ๏ธ),btn(โŽ) -- jump buffer if jump then - this.jbuffer=4 - elseif this.jbuffer>0 then - this.jbuffer-=1 + jbuffer=4 + elseif jbuffer>0 then + jbuffer-=1 end - + -- grace frames and dash restoration if on_ground then - this.grace=6 - if this.djump0 then - this.grace-=1 + elseif grace>0 then + grace-=1 end -- dash effect timer (for dash-triggered events, e.g., berry blocks) - this.dash_effect_time-=1 + dash_effect_time-=1 -- dash startup period, accel toward dash target speed - if this.dash_time>0 then - this.init_smoke() - this.dash_time-=1 - this.spd=vector( - appr(this.spd.x,this.dash_target_x,this.dash_accel_x), - appr(this.spd.y,this.dash_target_y,this.dash_accel_y) + if dash_time>0 then + init_smoke() + dash_time-=1 + spd=vector( + appr(spd.x,dash_target_x,dash_accel_x), + appr(spd.y,dash_target_y,dash_accel_y) ) else -- x movement local maxrun=1 local accel=on_ground and 0.6 or 0.4 local deccel=0.15 - + -- set x speed - this.spd.x=abs(this.spd.x)<=1 and - appr(this.spd.x,h_input*maxrun,accel) or - appr(this.spd.x,sign(this.spd.x)*maxrun,deccel) - + spd.x=abs(spd.x)<=1 and + appr(spd.x,h_input*maxrun,accel) or + appr(spd.x,sign(spd.x)*maxrun,deccel) + -- facing direction - if this.spd.x~=0 then - this.flip.x=this.spd.x<0 + if spd.x~=0 then + flip.x=spd.x<0 end -- y movement local maxfall=2 - + -- wall slide - if h_input~=0 and this.is_solid(h_input,0) then + if h_input~=0 and is_solid(h_input,0) then maxfall=0.4 -- wall slide smoke if rnd(10)<2 then - this.init_smoke(h_input*6) + init_smoke(h_input*6) end end -- apply gravity if not on_ground then - this.spd.y=appr(this.spd.y,maxfall,abs(this.spd.y)>0.15 and 0.21 or 0.105) + spd.y=appr(spd.y,maxfall,abs(spd.y)>0.15 and 0.21 or 0.105) end -- jump - if this.jbuffer>0 then - if this.grace>0 then + if jbuffer>0 then + if grace>0 then -- normal jump psfx(18) - this.jbuffer=0 - this.grace=0 - this.spd.y=-2 - this.init_smoke(0,4) + jbuffer=0 + grace=0 + spd.y=-2 + init_smoke(0,4) else -- wall jump - local wall_dir=(this.is_solid(-3,0) and -1 or this.is_solid(3,0) and 1 or 0) + local wall_dir=(is_solid(-3,0) and -1 or is_solid(3,0) and 1 or 0) if wall_dir~=0 then psfx(19) - this.jbuffer=0 - this.spd=vector(wall_dir*(-1-maxrun),-2) + jbuffer=0 + spd=vector(wall_dir*(-1-maxrun),-2) -- wall jump smoke - this.init_smoke(wall_dir*6) + init_smoke(wall_dir*6) end end end - + -- dash local d_full=5 local d_half=3.5355339059 -- 5 * sqrt(2) - - if this.djump>0 and dash then - this.init_smoke() - this.djump-=1 - this.dash_time=4 - has_dashed=true - this.dash_effect_time=10 + + if djump>0 and dash then + init_smoke() + djump-=1 + dash_time=4 + _g.has_dashed=true + dash_effect_time=10 -- vertical input local v_input=btn(โฌ†๏ธ) and -1 or btn(โฌ‡๏ธ) and 1 or 0 -- calculate dash speeds - this.spd=vector(h_input~=0 and - h_input*(v_input~=0 and d_half or d_full) or - (v_input~=0 and 0 or this.flip.x and -1 or 1) + spd=vector(h_input~=0 and + h_input*(v_input~=0 and d_half or d_full) or + (v_input~=0 and 0 or flip.x and -1 or 1) ,v_input~=0 and v_input*(h_input~=0 and d_half or d_full) or 0) -- effects psfx(20) - freeze=2 + _g.freeze=2 -- dash target speeds and accels - this.dash_target_x=2*sign(this.spd.x) - this.dash_target_y=(this.spd.y>=0 and 2 or 1.5)*sign(this.spd.y) - this.dash_accel_x=this.spd.y==0 and 1.5 or 1.06066017177 -- 1.5 * sqrt() - this.dash_accel_y=this.spd.x==0 and 1.5 or 1.06066017177 - elseif this.djump<=0 and dash then + dash_target_x=2*sign(spd.x) + dash_target_y=(spd.y>=0 and 2 or 1.5)*sign(spd.y) + dash_accel_x=spd.y==0 and 1.5 or 1.06066017177 -- 1.5 * sqrt() + dash_accel_y=spd.x==0 and 1.5 or 1.06066017177 + elseif djump<=0 and dash then -- failed dash smoke psfx(21) - this.init_smoke() + init_smoke() end end - + -- animation - this.spr_off+=0.25 - this.spr = not on_ground and (this.is_solid(h_input,0) and 5 or 3) or -- wall slide or mid air + spr_off+=0.25 + sprite = not on_ground and (is_solid(h_input,0) and 5 or 3) or -- wall slide or mid air btn(โฌ‡๏ธ) and 6 or -- crouch btn(โฌ†๏ธ) and 7 or -- look up - this.spd.x~=0 and h_input~=0 and 1+this.spr_off%4 or 1 -- walk or stand - update_hair(this) + spd.x~=0 and h_input~=0 and 1+spr_off%4 or 1 -- walk or stand + update_hair(_ENV) -- exit level off the top (except summit) - if this.y<-4 and levels[lvl_id+1] then + if y<-4 and levels[lvl_id+1] then next_level() end - + -- was on the ground - this.was_on_ground=on_ground + was_on_ground=on_ground end, - - draw=function(this) + + draw=function(_ENV) -- clamp in screen - local clamped=mid(this.x,-1,lvl_pw-7) - if this.x~=clamped then - this.x=clamped - this.spd.x=0 + local clamped=mid(x,-1,lvl_pw-7) + if x~=clamped then + x=clamped + spd.x=0 end -- draw player hair and sprite - set_hair_color(this.djump) - draw_hair(this) - draw_obj_sprite(this) + set_hair_color(djump) + draw_hair(_ENV) + draw_obj_sprite(_ENV) pal() end } -function create_hair(obj) - obj.hair={} +function create_hair(_ENV) + hair={} for i=1,5 do - add(obj.hair,vector(obj.x,obj.y)) + add(hair,vector(x,y)) end end @@ -299,17 +301,17 @@ function set_hair_color(djump) pal(8,djump==1 and 8 or djump==2 and 14 or 12) end -function update_hair(obj) - local last=vector(obj.x+4-(obj.flip.x and-2 or 3),obj.y+(btn(โฌ‡๏ธ) and 4 or 2.9)) - for h in all(obj.hair) do +function update_hair(_ENV) + local last=vector(x+4-(flip.x and-2 or 3),y+(btn(โฌ‡๏ธ) and 4 or 2.9)) + for h in all(hair) do h.x+=(last.x-h.x)/1.5 h.y+=(last.y+0.5-h.y)/1.5 last=h end end -function draw_hair(obj) - for i,h in pairs(obj.hair) do +function draw_hair(_ENV) + for i,h in pairs(hair) do circfill(round(h.x),round(h.y),mid(4-i,1,2),8) end end @@ -318,64 +320,64 @@ end player_spawn={ layer=2, - init=function(this) + init=function(_ENV) sfx(15) - this.spr=3 - this.target=this.y - this.y=min(this.y+48,lvl_ph) - cam_x,cam_y=mid(this.x,64,lvl_pw-64),mid(this.y,64,lvl_ph-64) - this.spd.y=-4 - this.state=0 - this.delay=0 - create_hair(this) - this.djump=max_djump + sprite=3 + target=y + y=min(y+48,lvl_ph) + _g.cam_x,_g.cam_y=mid(x,64,lvl_pw-64),mid(y,64,lvl_ph-64) + spd.y=-4 + state=0 + delay=0 + create_hair(_ENV) + djump=max_djump --- --- for i=1,#fruitrain do - local f=init_object(fruit,this.x,this.y,fruitrain[i].spr) + local f=init_object(fruit,x,y,fruitrain[i].sprite) f.follow=true - f.target=i==1 and this or fruitrain[i-1] + f.target=i==1 and _ENV or fruitrain[i-1] f.r=fruitrain[i].r f.fruit_id=fruitrain[i].fruit_id fruitrain[i]=f end --- --- end, - update=function(this) + update=function(_ENV) -- jumping up - if this.state==0 and this.y0 then - if this.delay>0 then + elseif state==1 then + spd.y+=0.5 + if spd.y>0 then + if delay>0 then -- stall at peak - this.spd.y=0 - this.delay-=1 - elseif this.y>this.target then + spd.y=0 + delay-=1 + elseif y>target then -- clamp at target y - this.y=this.target - this.spd=vector(0,0) - this.state=2 - this.delay=5 - this.init_smoke(0,4) + y=target + spd=vector(0,0) + state=2 + delay=5 + init_smoke(0,4) sfx(16) end end -- landing and spawning player object - elseif this.state==2 then - this.delay-=1 - this.spr=6 - if this.delay<0 then - destroy_object(this) - local p=init_object(player,this.x,this.y) + elseif state==2 then + delay-=1 + sprite=6 + if delay<0 then + destroy_object(_ENV) + local p=init_object(player,x,y) --- --- if (fruitrain[1]) fruitrain[1].target=p --- --- end end - update_hair(this) + update_hair(_ENV) end, draw=player.draw -- draw=function(this) @@ -388,93 +390,92 @@ player_spawn={ ---- camera_trigger={ - update=function(this) - if this.timer and this.timer>0 then - this.timer-=1 - if this.timer==0 then - cam_offx=this.offx - cam_offy=this.offy - else - cam_offx+=cam_gain*(this.offx-cam_offx) - cam_offy+=cam_gain*(this.offy-cam_offy) + update=function(_ENV) + if timer and timer>0 then + timer-=1 + if timer==0 then + _g.cam_offx=offx + _g.cam_offy=offy + else + _g.cam_offx+=cam_gain*(offx-cam_offx) + _g.cam_offy+=cam_gain*(offy-cam_offy) end - elseif this.player_here() then - this.timer=5 + elseif player_here() then + timer=5 end end } ---- spring={ - init=function(this) - this.dy,this.delay=0,0 - end, - update=function(this) - local hit=this.player_here() - if this.delay>0 then - this.delay-=1 - elseif hit then - hit.y,hit.spd.y,hit.dash_time,hit.dash_effect_time,this.dy,this.delay,hit.djump=this.y-4,-3,0,0,4,10,max_djump - hit.spd.x*=0.2 - psfx(14) - end - this.dy*=0.75 - end, - draw=function(this) - sspr(72,0,8,8-flr(this.dy),this.x,this.y+this.dy) - end + init=function(_ENV) + dy,delay=0,0 + end, + update=function(_ENV) + local hit=player_here() + if delay>0 then + delay-=1 + elseif hit then + hit.y,hit.spd.y,hit.dash_time,hit.dash_effect_time,dy,delay,hit.djump=y-4,-3,0,0,4,10,max_djump + hit.spd.x*=0.2 + psfx(14) + end + dy*=0.75 + end, + draw=function(_ENV) + sspr(72,0,8,8-flr(dy),x,y+dy) + end } side_spring={ - init=function(this) - this.dx,this.dir=0,this.is_solid(-1,0) and 1 or -1 - end, - update=function(this) - local hit=this.player_here() - if hit then - hit.x,hit.spd.x,hit.spd.y,hit.dash_time,hit.dash_effect_time,this.dx,hit.djump=this.x+this.dir*4,this.dir*3,-1.5,0,0,4,max_djump - psfx(14) - end - this.dx*=0.75 - end, - draw=function(this) - local dx=flr(this.dx) - sspr(64,0,8-dx,8,this.x+dx*(this.dir-1)/-2,this.y,8-dx,8,this.dir==1) - end + init=function(_ENV) + dx,dir=0,is_solid(-1,0) and 1 or -1 + end, + update=function(_ENV) + local hit=player_here() + if hit then + hit.x,hit.spd.x,hit.spd.y,hit.dash_time,hit.dash_effect_time,dx,hit.djump=x+dir*4,dir*3,-1.5,0,0,4,max_djump + psfx(14) + end + dx*=0.75 + end, + draw=function(_ENV) + local dx=flr(dx) + sspr(64,0,8-dx,8,x+dx*(dir-1)/-2,y,8-dx,8,dir==1) + end } refill={ - init=function(this) - this.offset=rnd(1) - this.timer=0 - this.hitbox=rectangle(-1,-1,10,10) - this.active=true + init=function(_ENV) + offset=rnd() + timer=0 + hitbox=rectangle(-1,-1,10,10) + active=true end, - update=function(this) - if this.active then - this.offset+=0.02 - local hit=this.player_here() + update=function(_ENV) + if active then + offset+=0.02 + local hit=player_here() if hit and hit.djump0 then - this.timer-=1 - else + elseif timer>0 then + timer-=1 + else psfx(12) - this.init_smoke() - this.active=true + init_smoke() + active=true end end, - draw=function(this) - local x,y=this.x,this.y - if this.active then - spr(15,x,y+sin(this.offset)+0.5) - else + draw=function(_ENV) + if active then + spr(15,x,y+sin(offset)+0.5) + else -- color(7) -- line(x,y+4,x+3,y+7) -- line(x+4,y+7,x+7,y+4) @@ -485,129 +486,135 @@ refill={ 4,7,7,4 7,3,4,0 3,0,0,3]],"\n"),function(t) - local o1,o2,o3,o4=unpack(split(t)) - line(x+o1,y+o2,x+o3,y+o4,7) - end + local o1,o2,o3,o4=unpack(split(t)) + line(x+o1,y+o2,x+o3,y+o4,7) + end ) end end } fall_floor={ - init=function(this) - this.solid_obj=true - this.state=0 + init=function(_ENV) + solid_obj=true + state=0 end, - update=function(this) + update=function(_ENV) -- idling - if this.state==0 then + if state==0 then for i=0,2 do - if this.check(player,i-1,-(i%2)) then + if check(player,i-1,-(i%2)) then psfx(13) - this.state,this.delay=1,15 - this.init_smoke() + state,delay=1,15 + init_smoke() break end end -- shaking - elseif this.state==1 then - this.delay-=1 - if this.delay<=0 then - this.state=2 - this.delay=60--how long it hides for - this.collideable=false + elseif state==1 then + delay-=1 + if delay<=0 then + state=2 + delay=60--how long it hides for + collideable=false end -- invisible, waiting to reset - elseif this.state==2 then - this.delay-=1 - if this.delay<=0 and not this.player_here() then + elseif state==2 then + delay-=1 + if delay<=0 and not player_here() then psfx(12) - this.state=0 - this.collideable=true - this.init_smoke() + state=0 + collideable=true + init_smoke() end end end, - draw=function(this) - spr(this.state==1 and 26-this.delay/5 or this.state==0 and 23,this.x,this.y) --add an if statement if you use sprite 0 + draw=function(_ENV) + spr(state==1 and 26-delay/5 or state==0 and 23,x,y) --add an if statement if you use sprite 0 end } fall_plat={ - init=function(this) - while this.right()0 then - this.timer-=1 - if this.timer==0 then - this.state=this.finished and 2 or 1 - this.spd.y=0.4 - end - elseif this.state==1 then - if this.spd.y==0 then - this.state=0 - for i=0,this.hitbox.w-1,8 do - this.init_smoke(i,this.hitbox.h-2) + update=function(_ENV) + if not state then + hitbox.w+=40 + hitbox.h+=32 + if player_here() then + state = 0 -- shake + timer = 12 + end + hitbox.w-=40 + hitbox.h-=32 + elseif timer>0 then + timer-=1 + if timer==0 then + state=finished and 2 or 1 + spd.y=0.4 + end + elseif state==1 then + if spd.y==0 then + state=0 + for i=0,hitbox.w-1,8 do + init_smoke(i,hitbox.h-2) end - this.timer=6 - this.finished=true + timer=6 + finished=true end - this.spd.y=appr(this.spd.y,4,0.4) - end + spd.y=appr(spd.y,4,0.4) + end end, - draw=function(this) - local x,y=this.x,this.y - if this.state==0 then - x+=rnd(2)-1 - y+=rnd(2)-1 + draw=function(_ENV) + local _x,_y=x,y + if state==0 then + _x+=rnd(2)-1 + _y+=rnd(2)-1 end - local r,d=x+this.hitbox.w-8,y+this.hitbox.h-8 - for i=x,r,r-x do - for j=y,d,d-y do - spr(80,i,j,1.0,1.0,i~=x,j~=y) - end - end - for i=x+8,r-8,8 do - spr(81,i,y) + local r,d=_x+hitbox.w-8,_y+hitbox.h-8 + for i=_x,r,r-_x do + for j=_y,d,d-_y do + spr(80,i,j,1.0,1.0,i~=_x,j~=_y) + end + end + for i=_x+8,r-8,8 do + spr(81,i,_y) spr(81,i,d,1,1,false,true) end - for i=y+8,d-8,8 do - spr(83,x,i) + for i=_y+8,d-8,8 do + spr(83,_x,i) spr(83,r,i,1,1,true) end - for i=x+8,r-8,8 do - for j=y+8,d-8,8 do - spr((i+j-x-y)%16==0 and 84 or 85,i,j) - end - end + for i=_x+8,r-8,8 do + for j=_y+8,d-8,8 do + spr((i+j-_x-_y)%16==0 and 84 or 85,i,j) + end + end end - } + smoke={ layer=3, - init=function(this) - this.spd=vector(0.3+rnd(0.2),-0.1) - this.x+=-1+rnd(2) - this.y+=-1+rnd(2) - this.flip=vector(maybe(),maybe()) + init=function(_ENV) + spd=vector(0.3+rnd(0.2),-0.1) + x+=-1+rnd(2) + y+=-1+rnd(2) + flip=vector(maybe(),maybe()) end, - update=function(this) - this.spr+=0.2 - if this.spr>=29 then - destroy_object(this) + update=function(_ENV) + sprite+=0.2 + if sprite>=29 then + destroy_object(_ENV) end end } @@ -616,110 +623,110 @@ smoke={ fruitrain={} fruit={ check_fruit=true, - init=function(this) - this.y_=this.y - this.off=0 - this.follow=false - this.tx=this.x - this.ty=this.y - this.golden=this.spr==11 - if this.golden and deaths>0 then - destroy_object(this) + init=function(_ENV) + y_=y + off=0 + follow=false + tx=x + ty=y + golden=sprite==11 + if golden and deaths>0 then + destroy_object(_ENV) end end, - update=function(this) - if not this.follow then - local hit=this.player_here() + update=function(_ENV) + if not follow then + local hit=player_here() if hit then hit.berry_timer=0 - this.follow=true - this.target=#fruitrain==0 and hit or fruitrain[#fruitrain] - this.r=#fruitrain==0 and 12 or 8 - add(fruitrain,this) + follow=true + target=#fruitrain==0 and hit or fruitrain[#fruitrain] + r=#fruitrain==0 and 12 or 8 + add(fruitrain,_ENV) end else - if this.target then - this.tx+=0.2*(this.target.x-this.tx) - this.ty+=0.2*(this.target.y-this.ty) - local a=atan2(this.x-this.tx,this.y_-this.ty) - local k=(this.x-this.tx)^2+(this.y_-this.ty)^2 > this.r^2 and 0.2 or 0.1 - this.x+=k*(this.tx+this.r*cos(a)-this.x) - this.y_+=k*(this.ty+this.r*sin(a)-this.y_) + if target then + tx+=0.2*(target.x-tx) + ty+=0.2*(target.y-ty) + local a=atan2(x-tx,y_-ty) + local k=(x-tx)^2+(y_-ty)^2 > r^2 and 0.2 or 0.1 + x+=k*(tx+r*cos(a)-x) + y_+=k*(ty+r*sin(a)-y_) end end - this.off+=0.025 - this.y=this.y_+sin(this.off)*2.5 + off+=0.025 + y=y_+sin(off)*2.5 end } --- --- fly_fruit={ check_fruit=true, - init=function(this) - this.start=this.y - this.step=0.5 - this.sfx_delay=8 + init=function(_ENV) + start=y + step=0.5 + sfx_delay=8 end, - update=function(this) + update=function(_ENV) --fly away if has_dashed then - if this.sfx_delay>0 then - this.sfx_delay-=1 - if this.sfx_delay<=0 then - sfx_timer=20 + if sfx_delay>0 then + sfx_delay-=1 + if sfx_delay<=0 then + _g.sfx_timer=20 sfx(10) end end - this.spd.y=appr(this.spd.y,-3.5,0.25) - if this.y<-16 then - destroy_object(this) + spd.y=appr(spd.y,-3.5,0.25) + if y<-16 then + destroy_object(_ENV) end -- wait else - this.step+=0.05 - this.spd.y=sin(this.step)*0.5 + step+=0.05 + spd.y=sin(step)*0.5 end -- collect - if this.player_here() then + if player_here() then --- --- - this.init_smoke(-6) - this.init_smoke(6) + init_smoke(-6) + init_smoke(6) - local f=init_object(fruit,this.x,this.y,10) --if this happens to be in the exact location of a different fruit that has already been collected, this'll cause a crash - --todo: fix this if needed - f.fruit_id=this.fruit_id + local f=init_object(fruit,x,y,10) --if this happens to be in the exact location of a different fruit that has already been collected, this'll cause a crash + --TODO: fix this if needed + f.fruit_id=fruit_id fruit.update(f) --- --- - destroy_object(this) + destroy_object(_ENV) end end, - draw=function(this) - spr(10,this.x,this.y) + draw=function(_ENV) + spr(10,x,y) for ox=-6,6,12 do - spr((has_dashed or sin(this.step)>=0) and 12 or this.y>this.start and 14 or 13,this.x+ox,this.y-2,1,1,ox==-6) + spr((has_dashed or sin(step)>=0) and 12 or y>start and 14 or 13,x+ox,y-2,1,1,ox==-6) end end } lifeup={ - init=function(this) - this.spd.y=-0.25 - this.duration=30 - this.flash=0 - this.outline=false - sfx_timer=20 + init=function(_ENV) + spd.y=-0.25 + duration=30 + flash=0 + outline=false + _g.sfx_timer=20 sfx(9) end, - update=function(this) - this.duration-=1 - if this.duration<=0 then - destroy_object(this) + update=function(_ENV) + duration-=1 + if duration<=0 then + destroy_object(_ENV) end end, - draw=function(this) - this.flash+=0.5 + draw=function(_ENV) + flash+=0.5 ---- - ?this.spr<=5 and this.spr.."000" or "1up",this.x-4,this.y-4,7+this.flash%2 + ?sprite<=5 and sprite.."000" or "1UP",x-4,y-4,7+flash%2 ---- end } @@ -746,20 +753,20 @@ tiles={ -- [object functions] -function init_object(type,x,y,tile) +function init_object(type,sx,sy,tile) --generate and check berry id - local id=x..","..y..","..lvl_id - if type.check_fruit and got_fruit[id] then - return + local id=sx..","..sy..","..lvl_id + if type.check_fruit and got_fruit[id] then + return end - - local obj={ + --local _g=_g + local _ENV={ type=type, collideable=true, - spr=tile, + sprite=tile, flip=vector(), - x=x, - y=y, + x=sx, + y=sy, hitbox=rectangle(0,0,8,8), spd=vector(0,0), rem=vector(0,0), @@ -767,123 +774,124 @@ function init_object(type,x,y,tile) outline=true, draw_seed=rnd() } - function obj.left() return obj.x+obj.hitbox.x end - function obj.right() return obj.left()+obj.hitbox.w-1 end - function obj.top() return obj.y+obj.hitbox.y end - function obj.bottom() return obj.top()+obj.hitbox.h-1 end - - function obj.is_solid(ox,oy) - for o in all(objects) do - if o!=obj and (o.solid_obj or o.semisolid_obj and not obj.objcollide(o,ox,0) and oy>0) and obj.objcollide(o,ox,oy) then - return true - end - end - return (oy>0 and not obj.is_flag(ox,0,3) and obj.is_flag(ox,oy,3)) or -- one way platform or - obj.is_flag(ox,oy,0) -- solid terrain + _g.setmetatable(_ENV,{__index=_g}) + function left() return x+hitbox.x end + function right() return left()+hitbox.w-1 end + function top() return y+hitbox.y end + function bottom() return top()+hitbox.h-1 end + + function is_solid(ox,oy) + for o in all(objects) do + if o!=_ENV and (o.solid_obj or o.semisolid_obj and not objcollide(o,ox,0) and oy>0) and objcollide(o,ox,oy) then + return true + end + end + return (oy>0 and not is_flag(ox,0,3) and is_flag(ox,oy,3)) or -- one way platform or + is_flag(ox,oy,0) -- solid terrain end - - function obj.is_flag(ox,oy,flag) - local x1,x2,y1,y2=obj.left(),obj.right(),obj.top(),obj.bottom() - for i=mid(0,lvl_w-1,(x1+ox)\8),mid(0,lvl_w-1,(x2+ox)/8) do - for j=mid(0,lvl_h-1,(y1+oy)\8),mid(0,lvl_h-1,(y2+oy)/8) do + + function is_flag(ox,oy,flag) + for i=mid(0,lvl_w-1,(left()+ox)\8),mid(0,lvl_w-1,(right()+ox)/8) do + for j=mid(0,lvl_h-1,(top()+oy)\8),mid(0,lvl_h-1,(bottom()+oy)/8) do local tile=tile_at(i,j) if flag>=0 then - if fget(tile,flag) and (flag~=3 or j*8>y2) then + if fget(tile,flag) and (flag~=3 or j*8>bottom()) then return true end else - if ({obj.spd.y>=0 and y2%8>=6, - obj.spd.y<=0 and y1%8<=2, - obj.spd.x<=0 and x1%8<=2, - obj.spd.x>=0 and x2%8>=6})[tile-15] then + if ({spd.y>=0 and bottom()%8>=6, + spd.y<=0 and top()%8<=2, + spd.x<=0 and left()%8<=2, + spd.x>=0 and right()%8>=6})[tile-15] then return true end end end end end - - function obj.objcollide(other,ox,oy) + function objcollide(other,ox,oy) return other.collideable and - other.right()>=obj.left()+ox and - other.bottom()>=obj.top()+oy and - other.left()<=obj.right()+ox and - other.top()<=obj.bottom()+oy + other.right()>=left()+ox and + other.bottom()>=top()+oy and + other.left()<=right()+ox and + other.top()<=bottom()+oy end - function obj.check(type,ox,oy) + function check(type,ox,oy) for other in all(objects) do - if other and other.type==type and other~=obj and obj.objcollide(other,ox,oy) then + if other and other.type==type and other~=_ENV and objcollide(other,ox,oy) then return other end end end - function obj.player_here() - return obj.check(player,0,0) + function player_here() + return check(player,0,0) end - - function obj.move(ox,oy,start) + + function move(ox,oy,start) for axis in all{"x","y"} do - obj.rem[axis]+=axis=="x" and ox or oy - local amt=round(obj.rem[axis]) - obj.rem[axis]-=amt + rem[axis]+=axis=="x" and ox or oy + local amt=round(rem[axis]) + rem[axis]-=amt local upmoving=axis=="y" and amt<0 - local riding=not obj.player_here() and obj.check(player,0,upmoving and amt or -1) + local riding=not player_here() and check(player,0,upmoving and amt or -1) local movamt - if obj.collides then + if collides then local step=sign(amt) local d=axis=="x" and step or 0 - local p=obj[axis] + local p=_ENV[axis] for i=start,abs(amt) do - if not obj.is_solid(d,step-d) then - obj[axis]+=step + if not is_solid(d,step-d) then + _ENV[axis]+=step else - obj.spd[axis],obj.rem[axis]=0,0 + spd[axis],rem[axis]=0,0 break end end - movamt=obj[axis]-p --save how many px moved to use later for solids + movamt=_ENV[axis]-p --save how many px moved to use later for solids else - movamt=amt - if (obj.solid_obj or obj.semisolid_obj) and upmoving and riding then - movamt+=obj.top()-riding.bottom()-1 + movamt=amt + if (solid_obj or semisolid_obj) and upmoving and riding then + movamt+=top()-bottom()-1 local hamt=round(riding.spd.y+riding.rem.y) hamt+=sign(hamt) - if movamt0 and obj.right()+1-hit.left() or amt<0 and obj.left()-hit.right()-1) or 0, - axis=="y" and (amt>0 and obj.bottom()+1-hit.top() or amt<0 and obj.top()-hit.bottom()-1) or 0, + if (solid_obj or semisolid_obj) and collideable then + collideable=false + local hit=player_here() + if hit and solid_obj then + hit.move(axis=="x" and (amt>0 and right()+1-hit.left() or amt<0 and left()-hit.right()-1) or 0, + axis=="y" and (amt>0 and bottom()+1-hit.top() or amt<0 and top()-hit.bottom()-1) or 0, 1) - if obj.player_here() then + if player_here() then kill_player(hit) - end - elseif riding then + end + elseif riding then riding.move(axis=="x" and movamt or 0, axis=="y" and movamt or 0,1) end - obj.collideable=true + collideable=true end end end - function obj.init_smoke(ox,oy) - init_object(smoke,obj.x+(ox or 0),obj.y+(oy or 0),26) + function init_smoke(ox,oy) + init_object(smoke,x+(ox or 0),y+(oy or 0),26) end - add(objects,obj); - (obj.type.init or time)(obj) - return obj + add(objects,_ENV); + + (type.init or time)(_ENV) + + return _ENV end function destroy_object(obj) @@ -927,37 +935,37 @@ end function load_level(id) has_dashed=false - + --remove existing objects foreach(objects,destroy_object) - + --reset camera speed cam_spdx,cam_spdy=0,0 - + local diff_level=lvl_id~=id - - --set level index + + --set level index lvl_id=id - + --set level globals local tbl=split(levels[lvl_id]) lvl_x,lvl_y,lvl_w,lvl_h=tbl[1]*16,tbl[2]*16,tbl[3]*16,tbl[4]*16 lvl_pw=lvl_w*8 lvl_ph=lvl_h*8 - - + + --drawing timer setup ui_timer=5 --reload map - if diff_level then + if diff_level then reload() --chcek for mapdata strings if mapdata[lvl_id] then replace_mapdata(lvl_x,lvl_y,lvl_w,lvl_h,mapdata[lvl_id]) end - end - + end + -- entities for tx=0,lvl_w-1 do for ty=0,lvl_h-1 do @@ -967,8 +975,8 @@ function load_level(id) end end end - foreach(objects,function(o) - (o.type.end_init or time)(o) + foreach(objects,function(_ENV) + (type.end_init or time)(_ENV) end) ---- @@ -992,27 +1000,27 @@ function _update() seconds%=60 end frames%=30 - + if music_timer>0 then music_timer-=1 if music_timer<=0 then music(10,0,7) end end - + if sfx_timer>0 then sfx_timer-=1 end - + -- cancel if freeze - if freeze>0 then + if freeze>0 then freeze-=1 return end - + -- restart (soon) if delay_restart>0 then - cam_spdx,cam_spdy=0,0 + cam_spdx,cam_spdy=0,0 delay_restart-=1 if delay_restart==0 then -- -- @@ -1022,21 +1030,21 @@ function _update() -- -- else load_level(lvl_id) - end + end end end -- update each object - foreach(objects,function(obj) - obj.move(obj.spd.x,obj.spd.y,obj.type==player and 0 or 1); - (obj.type.update or time)(obj) - obj.draw_seed=rnd() + foreach(objects,function(_ENV) + move(spd.x,spd.y,type==player and 0 or 1); + (type.update or time)(_ENV) + draw_seed=rnd() end) --move camera to player - foreach(objects,function(obj) - if obj.type==player or obj.type==player_spawn then - move_camera(obj) + foreach(objects,function(_ENV) + if type==player or type==player_spawn then + move_camera(_ENV) return end end) @@ -1049,11 +1057,11 @@ function _draw() if freeze>0 then return end - + -- reset all palette values pal() - - --set cam draw position + + --set cam draw position draw_x=round(cam_x)-64 draw_y=round(cam_y)-64 camera(draw_x,draw_y) @@ -1071,37 +1079,37 @@ function _draw() end end) - -- draw bg terrain + -- draw bg terrain palt(0,false) palt(8,true) map(lvl_x,lvl_y,0,0,lvl_w,lvl_h,4) palt() - + -- draw outlines for i=0,15 do pal(i,1) end pal=time - foreach(objects,function(o) - if o.outline then - for dx=-1,1 do for dy=-1,1 do if dx==0 or dy==0 then - camera(draw_x+dx,draw_y+dy) draw_object(o) + foreach(objects,function(_ENV) + if outline then + for dx=-1,1 do for dy=-1,1 do if dx&dy==0 then + camera(draw_x+dx,draw_y+dy) draw_object(_ENV) end end end end end) pal=_pal camera(draw_x,draw_y) pal() - + --set draw layering --0: background layer --1: default layer --2: player layer --3: foreground layer local layers={{},{},{}} - foreach(objects,function(o) - if o.type.layer==0 then - draw_object(o) --draw below terrain + foreach(objects,function(_ENV) + if type.layer==0 then + draw_object(_ENV) --draw below terrain else - add(layers[o.type.layer or 1],o) --add object to layer, default draw below player + add(layers[type.layer or 1],_ENV) --add object to layer, default draw below player end end) -- draw terrain @@ -1109,7 +1117,7 @@ function _draw() palt(8,true) map(lvl_x,lvl_y,0,0,lvl_w,lvl_h,2) palt() - + -- draw objects foreach(layers,function(l) foreach(l,draw_object) @@ -1118,38 +1126,37 @@ function _draw() -- draw platforms map(lvl_x,lvl_y,0,0,lvl_w,lvl_h,8) -- particles - foreach(particles,function(p) - p.x+=p.spd-cam_spdx - p.y+=sin(p.off)-cam_spdy - p.y%=128 - p.off+=min(0.05,p.spd/32) - rectfill(p.x+draw_x,p.y+draw_y,p.x+p.s+draw_x,p.y+p.s+draw_y,p.c) - if p.x>132 then - p.x=-4 - p.y=rnd128() - elseif p.x<-4 then - p.x=128 - p.y=rnd128() + foreach(particles,function(_ENV) + x+=spd-_g.cam_spdx + y+=_g.sin(off)-_g.cam_spdy + y%=128 + off+=_g.min(0.05,spd/32) + _g.rectfill(x+_g.draw_x,y+_g.draw_y,x+s+_g.draw_x,y+s+_g.draw_y,c) + if x>132 then + x=-4 + y=_g.rnd128() + elseif x<-4 then + x=128 + y=_g.rnd128() end end) - + -- dead particles - foreach(dead_particles,function(p) - p.x+=p.dx - p.y+=p.dy - p.t-=0.2 - if p.t<=0 then - del(dead_particles,p) + foreach(dead_particles,function(_ENV) + x+=dx + y+=dy + t-=0.2 + if t<=0 then + _g.del(_g.dead_particles,_ENV) end - rectfill(p.x-p.t,p.y-p.t,p.x+p.t,p.y+p.t,14+5*p.t%2) + rectfill(x-t,y-t,x+t,y+t,14+5*t%2) end) - -- draw time if ui_timer>=-30 then - if ui_timer<0 then - draw_time(draw_x+4,draw_y+4) - end - ui_timer-=1 + if ui_timer<0 then + draw_time(draw_x+4,draw_y+4) + end + ui_timer-=1 end -- @@ -1177,13 +1184,13 @@ function _draw() -- end -function draw_object(obj) - srand(obj.draw_seed); - (obj.type.draw or draw_obj_sprite)(obj) +function draw_object(_ENV) + srand(draw_seed); + (type.draw or draw_obj_sprite)(_ENV) end -function draw_obj_sprite(obj) - spr(obj.spr,obj.x,obj.y,1,1,obj.flip.x,obj.flip.y) +function draw_obj_sprite(_ENV) + spr(sprite,x,y,1,1,flip.x,flip.y) end function draw_time(x,y) @@ -1246,8 +1253,8 @@ end --level table --"x,y,w,h" levels={ - "0,0,8,1", - "5,3,3,1" + "0,0,8,1", + "0,1,3,1" } ---- @@ -1356,14 +1363,14 @@ cccc777767c7cccccccccccccccc7c67fff400000440444000004fff00444fff111100001ccccccc ccccc67766ccccc6cccccccc6ccccc664ff44f444fff4f4444f44ff4004444ff0111cc1011111100044444404444444055555555000000000000000000000000 ccccc6676ccc66c6666ccc666c66ccc64fff4ff4ffff4ff44ff4fff400044fff1c11110001101000044444004444440055555555000000000000000000000000 cccccc670666666606666666666666660ff40ff444ff0ff44ff04ff0000044ffcc10000000000000044000000440400055555555000000000000000000000000 -00000000000000000777777777777777888888880000000000000000888558888885b38888888888888888888888888811111111111111111155111151111115 -00000000000000007777777777677767888888880000000000000000885dd588885dd38888888888888888888888888815118811111111111555885151111155 -0000000000000000767766777776667788888888000000000000000085d66d5885d66b3888888888888888888888888811188881115111115888888585111158 -00000000000000007766677777776d678888888800000000000000005d6666d53d66663588888888888888888888888811188881111111111888888555111155 -000000000000000077d67777dd77dcd7888888880000000000000000165555613655553188888888888888888888888811158881111155111888888551151115 -00000000000000007dcd667dccddcccd888877880000000000000000165aa561b653856188885555555555558888888815515551111155111888885185111158 -00000000000000007cccd66ccccccccc877766780000000000000000816aa618316b861888855151cc5c551c5888888815511111151111111588855185515588 -00000000000000007ccccccc0ccc00cc766776770000000000000000816aa618816388888855c1511c51c551c588888811111111111111111155511188855588 +00000000000000000777777777777777888888881444144444414441888558888885b38888888888888888888888888811111111111111111155111151111115 +00000000000000007777777777677767888888881111111111111111885dd588885dd38888888888888888888888888815118811111111111555885151111155 +0000000000000000767766777776667788888888888144188144188885d66d5885d66b3888888888888888888888888811188881115111115888888585111158 +00000000000000007766677777776d678888888888144188881441885d6666d53d66663588888888888888888888888811188881111111111888888555111155 +000000000000000077d67777dd77dcd7888888888144188888814418165555613655553188888888888888888888888811158881111155111888888551151115 +00000000000000007dcd667dccddcccd888877881441888888881441165aa561b653856188885555555555558888888815515551111155111888885185111158 +00000000000000007cccd66ccccccccc877766784418888888888144816aa618316b861888855151cc5c551c5888888815511111151111111588855185515588 +00000000000000007ccccccc0ccc00cc766776771188888888888814816aa618816388888855c1511c51c551c588888811111111111111111155511188855588 0777777777777777777777707ccccccccc0000000cccccc088144188816aa618816888888551115111511c551158888888855585555555555588555888855888 77777777776777677777777777ccccc01c00cc00cccccccc88114188816556188165588855555555555555555555555588555551551155115155155588511558 76776677777666777777777776ccccc00000ccc01ccccccc8814118881d66d1881d66d889ddddddddd5dddddd577dd7585155155155115511111111585511118 @@ -1372,86 +1379,54 @@ cccccc670666666606666666666666660ff40ff444ff0ff44ff04ff0000044ffcc10000000000000 7dcd667dccddcccd6d6777667ccccccc1ccc11c11111110088343b888814418888114188d00600dddd5ddd00600dddd511111115115511111511555581155158 7cccd66cccccccccccc66d667ccccccc1ccc01110110100088134188881411888814118850000055555555000005555851888111111115111111155885111158 7ccccccc0ccc00cccccd6dd677cccccc11c00000000000003814b138881441888814418888000888000888800080008851888111111111111111115885111155 -d666666dd666666dd666666dd666666d881441144114418883133138881441880000000088888814418888880000000085111111111111115111115888555588 -6dddddd56dddddd56dddddd56ddddd55888144144144188888b4b388881441880000000088888814418888880000000055511111111111111115515555115555 -666ddd55666ddd5d6ddddd556dddd5d5888814441441888888144338881141880000000088888811418888880000000055111111111111111115511511115515 -66ddd5d566ddd5ddddddd5d56ddd5dd5888881444418888888134b38881411880000000088888814118888880000000055111111111111111111111511111158 -6ddd5dd56ddd5ddddddd5dd56ddddd65888888144188888888344388881441880000000088888811418888880000000085111151111111111111155511151158 -6ddd6d65dd5ddddd5ddddd65666dd65588888814118888888813b388881441880000000088888814418888880000000085111111111111111151155811111155 -85ddd658d5ddddd5ddddd65566dddd658888881141888888881b3188881441880000000088888814418888880000000081111111111111111111155815551155 -88888888dddddd5dddddddd56ddddd55888888144188888888334188881441880000000088888811418888880000000011111111111111111111155855885588 -00000000d66ddddddddddd656dddd5d588888814418888888b314188881441888814418888888814418888880000000055111111111111111111115888558555 -000000006dddddddddddddd56ddd5dd5888888114188888883141188881441888811418888888814418888880000000051551111111111111111115855115111 -00000000666ddd5ddddddd556dddddd5888888144188888883143188881141888814418888888814418888880000000011551511511111151111115555115511 -0000000066ddd5ddddddd5d56ddd6d6d8888881441888888881b4138881441888814418888888814118888880000000051111111111111151111111551111111 -000000006ddd5ddddddd5dd585ddd658888888144188888888344138881441888814418888888811418888880000000011111111111115511111115551111111 -000000006ddd6d6d6ddd6d65888888888888881141888888881313b8881441888811118888888814418888880000000085511551111115511111155851111551 -000000006d6dd66dd66dd6d588888888888888141188888881663618881411888166661888888814418888880000000085551551111511111115888885511511 -0000000085dddddddddddd5888888888888888144188888816636661881141881666666188888814418888880000000088855555558885551588888888855855 -88888888888888888888888888888888888888888888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 -88888888888888888888888888888888888888888788877888888888888888881200000000000000000000000000000000000000000000000000000000000000 -88888888888888888888888888888888888888887777777788888888888888880000000000000000000000000000000000000000000000000000000000000000 -88888888888888888888888888888888888888887ffff77788888888888888881200000000000000000000000000000000000000000000000000000000000000 -888888888888888888888888877888888888888881ff1f7888888888888888880000000000000000000000000000000000000000000000000000000000000000 -88888888888888888888888877678888888888888fffff8888888888888888881200000000000000000000000000000000000000000000000000000000000000 -8888888888888888888888886776778888888888f833338888888888888888880000000000000000000000000000000000000000000000000000000000000000 -88888888888888888888888877777678888888884868868888888888888888881200000000000000000000000000000000000000000000000000000000000000 -88888888888888888977999992992777866688882191142988888888888888880000000000000000000000000000000000000000000000000000000000000000 -88888888888888877767292222992267755588882791177988888888888888881200000000000000000000000000000000000000000000000000000000000000 -888888888888877777769221129921777ddd88887777777788888888888888880000000000000000000000000000000000000000000000000000000000000000 -88888888888876776229221112222177975588887ffff77788888888888888881200000000000000000000000000000000000000000000000000000000000000 -888888888888776222922114444444474292888821ff1f7988888888888888880000000000000000000000000000000000000000000000000000000000000000 -88888888888722222922144444444447441928881fffff2988888888888888881200000000000000000000000000000000000000000000000000000000000000 -8888888888727222922144477774444744412288f433332988888888888888880000000000000000000000000000000000000000000000000000000000000000 -88888888822262292214447777677444444411284767462988888888888888881200000000000000000000000000000000000000000000000000000000000000 +d666666dd666666dd666666dd666666d881441144114418883133138881441884188888888888814d666666dd666666d85111111111111115111115888555588 +6dddddd56dddddd56dddddd56ddddd55888144144144188888b4b3888814418841888888888888146dddddd56ddddd5555511111111111111115515555115555 +666ddd55666ddd5d6ddddd556dddd5d58888144414418888881443388811418841888888888888116ddddd55611dd5d555111111111111111115511511115515 +66ddd5d566ddd5ddddddd5d56ddd5dd5888881444418888888134b38881411881188888888888814ddddd5d51671ddd555111111111111111111111511111158 +6ddd5dd56ddd5ddddddd5dd56ddddd65888888144188888888344388881441884188888888888811dddd5dd11661dd6585111151111111111111155511151158 +6ddd6d65dd5ddddd5ddddd65666dd65588888814118888888813b3888814418841888888888888145ddddd14111dd65585111111111111111151155811111155 +85ddd658d5ddddd5ddddd65566dddd658888881141888888881b3188881441884188888888888814ddddd11441dddd6581111111111111111111155815551155 +88888888dddddd5dddddddd56ddddd55888888144188888888334188881441884188888888888811dddd11441ddddd5511111111111111111111155855885588 +00000000d66ddddddddddd656dddd5d514441444144414448b314188881441888814418888888814ddd167110000000055111111111111111111115888558555 +000000006dddddddddddddd56ddd5dd5111111111111111183141188881441888811418888888814ddd166150000000051551111111111111111115855115111 +00000000666ddd5ddddddd556dddddd5888888888114411883143188881141888814418888888814dddd11550000000011551511511111151111115555115511 +0000000066ddd5ddddddd5d56ddd6d6d8888888888144188881b4138881441888814418888888814ddddd5d50000000051111111111111151111111551111111 +000000006ddd5ddddddd5dd585ddd658888888888811418888344138881441888814418888888811dddd5dd50000000011111111111115511111115551111111 +000000006ddd6d6d6ddd6d65888888888888888888141188881313b88814418888111188888888146ddd6d650000000085511551111115511111155851111551 +000000006d6dd66dd66dd6d588888888888888888814418881663618881411888166661888888814d66dd6d50000000085551551111511111115888885511511 +0000000085dddddddddddd5888888888888888888814418816636661881141881666666188888814dddddd580000000088855555558885551588888888855855 +8888888888888888888888888888888888888888888888888888888888888888d666666dd666666dd666666dd666666dd666666dd666666dd666666dd666666d +88888888888888888888888888888888888888888788877888888888888888886dddddd56ddddd556dddddd56dddddd56ddddd556dddddd56dddddd56dddddd5 +8888888888888888888888888888888888888888777777778888888888888888666dd11111111111111ddd5d6111111111ddd5d566611111111111111111dd55 +88888888888888888888888888888888888888887ffff777888888888888888866dd1671444144441671d5dd1671441167115dd56611671444444444416715d5 +888888888888888888888888877888888888888881ff1f7888888888888888886ddd1661444414441661dddd1661414166141165114166144444444441661dd5 +88888888888888888888888877678888888888888fffff8888888888888888886ddd611444144441411ddddd5111111111144411414411111111111111116d65 +8888888888888888888888886776778888888888f8333388888888888888888885ddd6111111111111ddddd5ddddd6556dd141671411d65885ddd65885ddd658 +8888888888888888888888887777767888888888486886888888888888888888888888886ddd11111111dd5ddddd111111111166118888888888888888888888 +8888888888888888897799999299277786668888219114298888888888888888000000006dd1671441671dddddd1671441671411000000000000000000000000 +8888888888888887776729222299226775558888279117798888888888888888000000006dd1661141661dddddd16614416611d5000000000000000000000000 +888888888888877777769221129921777ddd8888777777778888888888888888000000006ddd11111111dd5ddddd11444411ddd5000000000000000000000000 +88888888888876776229221112222177975588887ffff7778888888888888888000000006ddd6d6d66ddd5ddddddd111111d6d6d000000000000000000000000 +888888888888776222922114444444474292888821ff1f7988888888888888880000000085ddd6586ddd5ddddddd5dd585ddd658000000000000000000000000 +88888888888722222922144444444447441928881fffff29888888888888888800000000888888886ddd6d6d6ddd6d6588888888000000000000000000000000 +8888888888727222922144477774444744412288f4333329888888888888888800000000888888886d6dd66dd66dd6d588888888000000000000000000000000 +8888888882226229221444777767744444441128476746298888888888888888000000008888888885dddddddddddd5888888888000000000000000000000000 88888888999999991111111171111111111111198888888821911129888888880000000000000000000000000000000000000000000000000000000000000000 -88888888899142921444444444444444444444198888888821111119888888881200000000000000000000000000000000000000000000000000000000000000 +88888888899142921444444444444444444444198888888821111119888888880000000000000000000000000000000000000000000000000000000000000000 88888888829112921111111111111111111111198888888821171719888888880000000000000000000000000000000000000000000000000000000000000000 -88888888829142921144444414444444111444298888888811119911888888881200000000000000000000000000000000000000000000000000000000000000 +88888888829142921144444414444444111444298888888811119911888888880000000000000000000000000000000000000000000000000000000000000000 88888888829142921444444444444444444444298888888811177711888888880000000000000000000000000000000000000000000000000000000000000000 -88888888829142921449999444444444499994298888888811177719888888881200000000000000000000000000000000000000000000000000000000000000 +88888888829142921449999444444444499994298888888811177719888888880000000000000000000000000000000000000000000000000000000000000000 88888888829142921121911111111111219111298888888841177719888888880000000000000000000000000000000000000000000000000000000000000000 -8888888882914292142191144999944421911429888888881199d999888888881200000000000000000000000000000000000000000000000000000000000000 +8888888882914292142191144999944421911429888888881199d999888888880000000000000000000000000000000000000000000000000000000000000000 88888899999999921421911441111944219114298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 -88889922222992221421911441444944219114298888888888888888888888881200000000000000000000000000000000000000000000000000000000000000 +88889922222992221421911441444944219114298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 88992222299221121121911111444244219114298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 -99999999922914421421911441444944219114298888888888888888888888881200000000000000000000000000000000000000000000000000000000000000 +99999999922914421421911441444944219114298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 82911111192914421429999441444944299994298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 82914444192914421411111441444944111114298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 82914114192914421444777741444944444444298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 82914444192914421447677677744944477744298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000000000000000000000008400 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000192939490000000000000000000000000000000000000000000000000000000000000000000000000000008500 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000001a2a3a4a0000000000000000000000000000000000000000000000000000000000000000000000000000006500 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000044000b1b2b3b59c200000000000000000000000000000000000000000000000000000000000000000000000000006642 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000122222222222225262e50000000000000000000000000000000000000000000000000000000000000000000000006772 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000283828382a2a3b373d6d5e5440000b20000004400000000440000000000000044000000000000000000001044c542a2 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000008392929292929292a252522222225252222222f11626360606063616263600000636162600000000000000422252a392 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000929292929292929292a3a282839382928293030017273700000037172737000000371727000000000000007293a29292 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000929292929292929292929292929292929283330046560000000000465600000000004656000000000000004353929292 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000929292929292929292929292929292928203e600475700000000004757000000000047570000000000000000c643a292 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000092929292929292929292929292929292b363e60096a6000000000096a6000000000096a60000000000000000c7d672a3 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000929292929292929292929292929292a373d6e60097a7000000000097a7000000000097a7000000000000000000c643a3 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000929292929292929292929292929292a273d6e70096a6000000000096a60000e5000096a6000000000000000000c7d672 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000009292929292929292929292929292929273e6000097a7000000000097a700c5e6000097a700000000000000000000c772 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000929292929292929292929292929292a373e7000096a60000c5000096a600c6d6e50096a6000000000000000000000072 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000929292929292929292929292929292a27300000097a700c5e6000097a7c5d6d6e60097a7000000000000000000000072 __label__ cccccccccccccccccccccccccccccccccccccc775500000000000000000000000000000000070000000000000000000000000000000000000000000000000000 cccccccccccccccccccccccccccccccccccccc776670000000000000000000000000000000000000000000000000000000000000000000000000000000000000 @@ -1583,8 +1558,8 @@ ccccccccccccccccccccccccccccccccccccccccccccc77700000000000000000000000000000000 cccccccccccccccccccccccccccccccccccccccccccccc7700000000000000000000000000000000000000000000000000000000000000000000000000000000 __gff__ -0000000000000000000000000000000002020202080808000000000000030303030303030303030303030302020303000303030303030303030303030400000000000000040404040404040404040404000000000303040404040404040404040303030304040404010404040404040403030303040404040404040404040404 -0404040404040404000000000000000004040404040404040000000000000000040404040404040400000000000000000404040404040404000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000002020202080808000000000000030303030303030303030303030302020303000303030303030303030303030400000004040000040303040404040404040404000000000303040404040404040404040303030304040404040403030404040404030303030304040404030404040404 +0404040404040404030303030303030304040404040404040403030303040000040404040404040400000000000000000404040404040404000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 __map__ 00000000000000000000000000272a2929292929292a37000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083000000000000000000000000000000000000000000000000000000000000000000000000000000004800 00000000000000000000000000273b352a292929292936000000000000000000000000000000000000000000000000000000000000000000000000000000000000002122230000000000000000000000000000919293940000000000000000000000000000000000000000000000000000000000000000000000000000005800 @@ -1595,29 +1570,29 @@ __map__ 00000000000000005c3435366e000000004300000000000000000000004800000000000000000000000000000044000000000000000000002028230067000000000020370000000000002c002b785c2138292929292929292a252522222225252222221f61626360606063616263000060636162000000000000002422253a29 0000000047005c5d6d7d7e006c5d5e00004300000000000000000000005800000000000000000000000000000021222300000000000015162038300077000000000031330000000000002425252222282929292929292929293a2a283839282928393000717273000000737172730000007371720000000000000027392a2929 0000000057006c6d7e0000007c6d6e0000000000000000000000000000560000000000480000000000000000002039300000000000000000203930447800000000000000000000000000273b2a283829292929292929292929292929292929292938330064650000000000646500000000006465000000000000003435292929 -00000000675c6d7e00000000006c6d5e00000000000000000000000000660000000000580000000000000015162028330000000044000000002028222223000000000000000000001516273a292929292929292929292929292929292929292928306e007475000000000074750000000000747500000000000000006c342a29 -494a4b00776c6e44000000002b6c6d7e0000000000000000000000002b76000000000056000000000000000000203000000021222223005c5d203838393000000000000021221f5d5e2b272a29292929292929292929292929292929292929293b366e00696a0000000000696a0000000000696a00000000000000007c6d273a -595a5b01782422230000000024267e0000002b2c002b0000000000002426000000000066000000000000002b0020305e000031383930006c6d20382928305e000000004420306d7d6d242a29292929292929292929292929292929292929293a376d6e00797a0000000000797a0000000000797a0000000000000000006c343a -25252525222228330000000027372b00001e25252526000000002c0027375e002b2c2b760044000000001e252238306d5d5e00202833006c6d20392938306d5d5e00212239376e0a6c342a2a292929292929292929292929292929292929292a376d7e00696a0000000000696a00005e0000696a0000000000000000007c6d27 -2a3a3b2a2839300000002c00273a26000000273b2a365e00001624223a376e001e25252222221f00005c6d273828336d6d6d5d273000007c6d342a2929306d6d2d22393838377c5d6d342a3a2929292929292929292929292929292929292929376e0000797a0000000000797a005c6e0000797a000000000000000000007c27 -2929292929383000000024252a3b3700005c272a376d6d5e0000342a3a366d5d6d272a3a283000005c6d6d273a376d6d7d6d7d27370000007c7d273a38307d6d6d2028292a36007c6d6d272a292929292929292929292929292929292929293a377e0000696a00005c0000696a006c6d5e00696a000000000000000000000027 -29292929292830000000273a292a37005c6d273a376d6d6e00000027376d6d6d6d273a29383000006c6d6d272a376d6e007c7e27370000000000272a2830006c6d272a3b370000006c6d273b292929292929292929292929292929292929292a37000000797a005c6e0000797a5c6d6d6e00797a000000000000000000000027 -0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000 +00000000675c6d7e00000000006c6d5e00000000000000000000000000660000000000580000000000000015162028330000000044000000002028222223000000000000000000001516273a292929292929292929292929292929292929292928306e006968000000000079680000000000696800000000000000006c342a29 +494a4b00776c6e44000000002b6c6d7e0000000000000000000000002b76000000000056000000000000000000203000000021222223005c5d203838393000000000000021221f5d5e2b272a29292929292929292929292929292929292929293b366e006968000000000069680000000000696800000000000000007c6d273a +595a5b01782422230000000024267e0000002b2c002b0000000000002426000000000066000000000000002b0020305e000031383930006c6d20382928305e000000004420306d7d6d242a29292929292929292929292929292929292929293a376d6e00796800000000007968000000000079680000000000000000006c343a +25252525222228330000000027372b00001e25252526000000002c0027375e002b2c2b760044000000001e252238306d5d5e00202833006c6d20392938306d5d5e00212239376e0a6c342a2a292929292929292929292929292929292929292a376d7e0069680000000000696800005e000069680000000000000000007c6d27 +2a3a3b2a2839300000002c00273a26000000273b2a365e00001624223a376e001e25252222221f00005c6d273828336d6d6d5d273000007c6d342a2929306d6d2d22393838377c5d6d342a3a2929292929292929292929292929292929292929376e0000796800000000007968005c6e00007968000000000000000000007c27 +2929292929383000000024252a3b3700005c272a376d6d5e0000342a3a366d5d6d272a3a283000005c6d6d273a376d6d7d6d7d27370000007c7d273a38307d6d6d2028292a36007c6d6d272a292929292929292929292929292929292929293a377e0000696800005c00006968006c6d5e006968000000000000000000000027 +29292929292830000000273a292a37005c6d273a376d6d6e00000027376d6d6d6d273a29383000006c6d6d272a376d6e007c7e27370000000000272a2830006c6d272a3b370000006c6d273b292929292929292929292929292929292929292a370000007968005c6e000079685c6d6d6e007968000000000000000000000027 +0000000000830000000000000000000000000000000000000000000000000000000000000000000000000000000048000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000009192939400000000000000000000000000000000000000000000000000000000000000000000000000000058000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000a1a2a3a400000000000000000000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +4400b0b1b2b3b42c000000000000000000000000000000000000000000000000000000000000000000000000000066240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2122222222222225265e00000000000000000000000000000000000000000000000000000000000000000000000076270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +20382838282a3a3b376d5d5e4400002b00010044000000004400000000000000440000000000000000000000445c242a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +38292929292929292a252522222225252222221f618b8c8d8e8f63616a6b454688898a62457474757474462422253a290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929293a2a283839282928393000719b9c00000073717a73000000999a720000007700000027392a29290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929292929292929292929383300696500000000006465000000000064650000007700000034352929290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929292929292929292928306e006968000000000069680000000000696800000067000000006c342a290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +292929292929292929292929292929293b366e007968000000000069680000000000696800000077000000007c6d273a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929292929292929293a376d6e9d696800000000007968000000000079680000006700000000006c343a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929292929292929292a376d7e4179680000000000696800005e000069680000007700000000007c6d270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +29292929292929292929292929292929376e0000696800000000007968005c6e00007968000000670000000000007c270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929292929292929293a377e0000796800005c00006968006c6d5e0069680000007700000000000000270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929292929292929292a370000006968005c6e000079685c6d6d6e0079680000006700000000000000270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 __sfx__ 010100000f0001e000120002200017000260001b0002c000210003100027000360002b0003a000300003e00035000000000000000000000000000000000000000000000000000000000000000000000000000000 010100000970009700097000970008700077000670005700357003470034700347003470034700347003570035700357003570035700347003470034700337003370033700337000070000700007000070000700 From 64082d9b20ca8dc142e9ce06384349285759f6d4 Mon Sep 17 00:00:00 2001 From: Vawlpe Date: Tue, 7 Sep 2021 06:08:55 +0300 Subject: [PATCH 4/9] - Port to level-exits base - Non-linear exit for birdnest secret - Loading now takes comma-separated string for parameters instead of an arbitrary string --- prologue.p8 | 61 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 24 deletions(-) diff --git a/prologue.p8 b/prologue.p8 index 5f3279d..1bf5a93 100644 --- a/prologue.p8 +++ b/prologue.p8 @@ -37,9 +37,11 @@ local _g=_ENV --for writing to global vars -- [entry point] function _init() - max_djump,deaths,frames,seconds,minutes,music_timer,time_ticking,berry_count=stat(6) == "epilogue" and 2 or 0,0,0,0,0,0,true,0 + -- load string: lvl_id, max_djump, etc... (further parameters unknown as of writing this) + load_params = stat(6) == "" and {1,0} or split(stat(6)) + max_djump,deaths,frames,seconds,minutes,music_timer,time_ticking,berry_count=load_params[2],0,0,0,0,0,true,0 music(0,0,7) - load_level(stat(6) == "epilogue" and 2 or 1) + load_level(load_params[1]) end @@ -102,7 +104,7 @@ player={ -- spike collision / bottom death if is_flag(0,0,-1) or - y>lvl_ph then + y>lvl_ph and not exit_bottom then kill_player(_ENV) end @@ -252,6 +254,12 @@ player={ dash_target_y=(spd.y>=0 and 2 or 1.5)*sign(spd.y) dash_accel_x=spd.y==0 and 1.5 or 1.06066017177 -- 1.5 * sqrt() dash_accel_y=spd.x==0 and 1.5 or 1.06066017177 + + -- emulate soft dashes + if h_input~=0 and ph_input==-h_input and oob(ph_input,0) then + spd.x=0 + end + elseif djump<=0 and dash then -- failed dash smoke psfx(21) @@ -266,22 +274,18 @@ player={ btn(โฌ†๏ธ) and 7 or -- look up spd.x~=0 and h_input~=0 and 1+spr_off%4 or 1 -- walk or stand update_hair(_ENV) - -- exit level off the top (except summit) - if y<-4 and levels[lvl_id+1] then + -- exit level (except summit) + if (exit_right and left()>=lvl_pw or exit_top and y<-4 or exit_left and right()<0 or exit_bottom and top()>=lvl_ph) then next_level() end -- was on the ground was_on_ground=on_ground + --previous horizontal input (for soft dashes) + ph_input=h_input end, draw=function(_ENV) - -- clamp in screen - local clamped=mid(x,-1,lvl_pw-7) - if x~=clamped then - x=clamped - spd.x=0 - end -- draw player hair and sprite set_hair_color(djump) draw_hair(_ENV) @@ -602,7 +606,6 @@ fall_plat={ end } - smoke={ layer=3, init=function(_ENV) @@ -789,6 +792,12 @@ function init_object(type,sx,sy,tile) return (oy>0 and not is_flag(ox,0,3) and is_flag(ox,oy,3)) or -- one way platform or is_flag(ox,oy,0) -- solid terrain end + function oob(ox,oy) + return not exit_left and left()+ox<0 or not exit_right and right()+ox>=lvl_pw or top()+oy<=-8 + end + function place_free(ox,oy) + return not (is_solid(ox,oy) or oob(ox,oy)) + end function is_flag(ox,oy,flag) for i=mid(0,lvl_w-1,(left()+ox)\8),mid(0,lvl_w-1,(right()+ox)/8) do @@ -841,7 +850,7 @@ function init_object(type,sx,sy,tile) local d=axis=="x" and step or 0 local p=_ENV[axis] for i=start,abs(amt) do - if not is_solid(d,step-d) then + if place_free(d,step-d) then _ENV[axis]+=step else spd[axis],rem[axis]=0,0 @@ -929,7 +938,7 @@ end function next_level() - local next_lvl=lvl_id+1 + local next_lvl= lvl_id == 3 and 2 or lvl_id+1 load_level(next_lvl) end @@ -952,9 +961,11 @@ function load_level(id) lvl_x,lvl_y,lvl_w,lvl_h=tbl[1]*16,tbl[2]*16,tbl[3]*16,tbl[4]*16 lvl_pw=lvl_w*8 lvl_ph=lvl_h*8 - - - --drawing timer setup + + local exits=tonum(tbl[5]) or 0b0001 + exit_top,exit_right,exit_bottom,exit_left=exits&1!=0,exits&2!=0,exits&4!=0, exits&8!=0 + + --drawing timer setup ui_timer=5 --reload map @@ -1251,10 +1262,12 @@ end --[map metadata] --level table ---"x,y,w,h" +--"x,y,w,h,exit_dirs" +--exit directions "0b"+"exit_left"+"exit_bottom"+"exit_right"+"exit_top" (default top- 0b0001) levels={ "0,0,8,1", - "0,1,3,1" + "0,1,3,1,0b0010", + "3,1,1,1,0b1000" -- todo: birdnest secret } ---- @@ -1578,11 +1591,11 @@ __map__ 2929292929383000000024252a3b3700005c272a376d6d5e0000342a3a366d5d6d272a3a283000005c6d6d273a376d6d7d6d7d27370000007c7d273a38307d6d6d2028292a36007c6d6d272a292929292929292929292929292929292929293a377e0000696800005c00006968006c6d5e006968000000000000000000000027 29292929292830000000273a292a37005c6d273a376d6d6e00000027376d6d6d6d273a29383000006c6d6d272a376d6e007c7e27370000000000272a2830006c6d272a3b370000006c6d273b292929292929292929292929292929292929292a370000007968005c6e000079685c6d6d6e007968000000000000000000000027 0000000000830000000000000000000000000000000000000000000000000000000000000000000000000000000048000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -0000009192939400000000000000000000000000000000000000000000000000000000000000000000000000000058000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000a1a2a3a400000000000000000000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -4400b0b1b2b3b42c000000000000000000000000000000000000000000000000000000000000000000000000000066240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2122222222222225265e00000000000000000000000000000000000000000000000000000000000000000000000076270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -20382838282a3a3b376d5d5e4400002b00010044000000004400000000000000440000000000000000000000445c242a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000009192939400000000000000000000000000000000000000000000000000000000000000000000000000000058000000000f0f0f000f0f0f00000f00000f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000a1a2a3a40000000000000000000000000000000000000000000000000000000000000000000000000000005600000100000f00000f00000f000f000f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +4400b0b1b2b3b42c00000000000000000000000000000000000000000000000000000000000000000000000000006624261415000f00000f00000f000f0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2122222222222225265e0000000000000000000000000000000000000000000000000000000000000000000000007627000000000f00000f00000f000f000f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +20382838282a3a3b376d5d5e4400002b00000044000000004400000000000000440000000000000000000001445c242a0000000f0f0f000f0f0f00000f00000f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 38292929292929292a252522222225252222221f618b8c8d8e8f63616a6b454688898a62457474757474462422253a290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 2929292929292929293a2a283839282928393000719b9c00000073717a73000000999a720000007700000027392a29290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 2929292929292929292929292929292929383300696500000000006465000000000064650000007700000034352929290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 From a66c05245dc329c9fc8751a033213e2e3ab5c6a3 Mon Sep 17 00:00:00 2001 From: Vawlpe Date: Fri, 10 Sep 2021 22:12:03 +0300 Subject: [PATCH 5/9] - [Prologue] Fixed bridge gap - [Epilogue] Same bridge gap - [Epilogue] Birb room outline - [p8 version bump] 32 -> 33 --- prologue.p8 | 76 ++++++++++++++++++++++++++--------------------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/prologue.p8 b/prologue.p8 index 1bf5a93..42ef15e 100644 --- a/prologue.p8 +++ b/prologue.p8 @@ -1,5 +1,5 @@ pico-8 cartridge // http://www.pico-8.com -version 32 +version 33 __lua__ --newleste.p8 base cart @@ -1378,12 +1378,12 @@ ccccc6676ccc66c6666ccc666c66ccc64fff4ff4ffff4ff44ff4fff400044fff1c11110001101000 cccccc670666666606666666666666660ff40ff444ff0ff44ff04ff0000044ffcc10000000000000044000000440400055555555000000000000000000000000 00000000000000000777777777777777888888881444144444414441888558888885b38888888888888888888888888811111111111111111155111151111115 00000000000000007777777777677767888888881111111111111111885dd588885dd38888888888888888888888888815118811111111111555885151111155 -0000000000000000767766777776667788888888888144188144188885d66d5885d66b3888888888888888888888888811188881115111115888888585111158 -00000000000000007766677777776d678888888888144188881441885d6666d53d66663588888888888888888888888811188881111111111888888555111155 -000000000000000077d67777dd77dcd7888888888144188888814418165555613655553188888888888888888888888811158881111155111888888551151115 -00000000000000007dcd667dccddcccd888877881441888888881441165aa561b653856188885555555555558888888815515551111155111888885185111158 -00000000000000007cccd66ccccccccc877766784418888888888144816aa618316b861888855151cc5c551c5888888815511111151111111588855185515588 -00000000000000007ccccccc0ccc00cc766776771188888888888814816aa618816388888855c1511c51c551c588888811111111111111111155511188855588 +0000000000000000767766777776667788888888888144188814418885d66d5885d66b3888888888888888888888888811188881115111115888888585111158 +00000000000000007766677777776d678888888888144188888144185d6666d53d66663588888888888888888888888811188881111111111888888555111155 +000000000000000077d67777dd77dcd7888888888144188888881441165555613655553188888888888888888888888811158881111155111888888551151115 +00000000000000007dcd667dccddcccd888877881441888888888144165aa561b653856188885555555555558888888815515551111155111888885185111158 +00000000000000007cccd66ccccccccc877766784418888888888811816aa618316b861888855151cc5c551c5888888815511111151111111588855185515588 +00000000000000007ccccccc0ccc00cc766776771188888888888888816aa618816388888855c1511c51c551c588888811111111111111111155511188855588 0777777777777777777777707ccccccccc0000000cccccc088144188816aa618816888888551115111511c551158888888855585555555555588555888855888 77777777776777677777777777ccccc01c00cc00cccccccc88114188816556188165588855555555555555555555555588555551551155115155155588511558 76776677777666777777777776ccccc00000ccc01ccccccc8814118881d66d1881d66d889ddddddddd5dddddd577dd7585155155155115511111111585511118 @@ -1575,37 +1575,37 @@ __gff__ 0404040404040404030303030303030304040404040404040403030303040000040404040404040400000000000000000404040404040404000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 __map__ 00000000000000000000000000272a2929292929292a37000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083000000000000000000000000000000000000000000000000000000000000000000000000000000004800 -00000000000000000000000000273b352a292929292936000000000000000000000000000000000000000000000000000000000000000000000000000000000000002122230000000000000000000000000000919293940000000000000000000000000000000000000000000000000000000000000000000000000000005800 -0000000000000000000000000034366d202829293a3700000000000000000000000000000000000000000000000000000000000000000000000000000000000000002028370000000000000000470000000000a1a2a3a40000000000000000000000000000000000000000000000000000000000000000000000000000005600 -00000000000000000000000000007c6d3139382928370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000203b3600000000000000005700004400b0b1b2b3952c00000000000000000000000000000000000000000000000000000000000000000000000000006624 -000000000000000000005f2b0000007c7d3132323233000000000000000000000000000000000000000000000000000000000000000000162123000047000000000020370000000000000000006700002122222222222225265e0000000000000000000000000000000000000000000000000000000000000000000000007627 -0000000000000000002425265e0000000042434343430000000000000000000000000000000000000000000000000000000000000000000020300000570000000000203700000000000000000077005c20382838282a3a3b376d5d5e4400002b00000044000000004400000000000000440000000000000000000000445c242a -00000000000000005c3435366e000000004300000000000000000000004800000000000000000000000000000044000000000000000000002028230067000000000020370000000000002c002b785c2138292929292929292a252522222225252222221f61626360606063616263000060636162000000000000002422253a29 -0000000047005c5d6d7d7e006c5d5e00004300000000000000000000005800000000000000000000000000000021222300000000000015162038300077000000000031330000000000002425252222282929292929292929293a2a283839282928393000717273000000737172730000007371720000000000000027392a2929 -0000000057006c6d7e0000007c6d6e0000000000000000000000000000560000000000480000000000000000002039300000000000000000203930447800000000000000000000000000273b2a283829292929292929292929292929292929292938330064650000000000646500000000006465000000000000003435292929 -00000000675c6d7e00000000006c6d5e00000000000000000000000000660000000000580000000000000015162028330000000044000000002028222223000000000000000000001516273a292929292929292929292929292929292929292928306e006968000000000079680000000000696800000000000000006c342a29 -494a4b00776c6e44000000002b6c6d7e0000000000000000000000002b76000000000056000000000000000000203000000021222223005c5d203838393000000000000021221f5d5e2b272a29292929292929292929292929292929292929293b366e006968000000000069680000000000696800000000000000007c6d273a -595a5b01782422230000000024267e0000002b2c002b0000000000002426000000000066000000000000002b0020305e000031383930006c6d20382928305e000000004420306d7d6d242a29292929292929292929292929292929292929293a376d6e00796800000000007968000000000079680000000000000000006c343a -25252525222228330000000027372b00001e25252526000000002c0027375e002b2c2b760044000000001e252238306d5d5e00202833006c6d20392938306d5d5e00212239376e0a6c342a2a292929292929292929292929292929292929292a376d7e0069680000000000696800005e000069680000000000000000007c6d27 -2a3a3b2a2839300000002c00273a26000000273b2a365e00001624223a376e001e25252222221f00005c6d273828336d6d6d5d273000007c6d342a2929306d6d2d22393838377c5d6d342a3a2929292929292929292929292929292929292929376e0000796800000000007968005c6e00007968000000000000000000007c27 -2929292929383000000024252a3b3700005c272a376d6d5e0000342a3a366d5d6d272a3a283000005c6d6d273a376d6d7d6d7d27370000007c7d273a38307d6d6d2028292a36007c6d6d272a292929292929292929292929292929292929293a377e0000696800005c00006968006c6d5e006968000000000000000000000027 -29292929292830000000273a292a37005c6d273a376d6d6e00000027376d6d6d6d273a29383000006c6d6d272a376d6e007c7e27370000000000272a2830006c6d272a3b370000006c6d273b292929292929292929292929292929292929292a370000007968005c6e000079685c6d6d6e007968000000000000000000000027 -0000000000830000000000000000000000000000000000000000000000000000000000000000000000000000000048000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -0000009192939400000000000000000000000000000000000000000000000000000000000000000000000000000058000000000f0f0f000f0f0f00000f00000f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000a1a2a3a40000000000000000000000000000000000000000000000000000000000000000000000000000005600000100000f00000f00000f000f000f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -4400b0b1b2b3b42c00000000000000000000000000000000000000000000000000000000000000000000000000006624261415000f00000f00000f000f0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2122222222222225265e0000000000000000000000000000000000000000000000000000000000000000000000007627000000000f00000f00000f000f000f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -20382838282a3a3b376d5d5e4400002b00000044000000004400000000000000440000000000000000000001445c242a0000000f0f0f000f0f0f00000f00000f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -38292929292929292a252522222225252222221f618b8c8d8e8f63616a6b454688898a62457474757474462422253a290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929293a2a283839282928393000719b9c00000073717a73000000999a720000007700000027392a29290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929292929292929292929383300696500000000006465000000000064650000007700000034352929290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929292929292929292928306e006968000000000069680000000000696800000067000000006c342a290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -292929292929292929292929292929293b366e007968000000000069680000000000696800000077000000007c6d273a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929292929292929293a376d6e9d696800000000007968000000000079680000006700000000006c343a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929292929292929292a376d7e4179680000000000696800005e000069680000007700000000007c6d270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -29292929292929292929292929292929376e0000696800000000007968005c6e00007968000000670000000000007c270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929292929292929293a377e0000796800005c00006968006c6d5e0069680000007700000000000000270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929292929292929292a370000006968005c6e000079685c6d6d6e0079680000006700000000000000270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000273b352a292929292936000000000000000000000000000000000000000000000000000000000000000000000000000000000000002122230000000000000000000000000000919293940000000000000000470000000000000000000000000000000000000000000000000000000000005800 +0000000000000000000000000034366d202829293a3700000000000000000000000000000000000000000000000000000000000000000000000000000000000000002028370000000000000000470000000000a1a2a3a40000000000000000570000000000000000000000000000000000000000000000000000000000005600 +00000000000000000000000000007c6d3139382928370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000203b3600000000000000005700004400b0b1b2b3952c00000000000000560000000000000000000000000000000000000000000000000000000000006624 +000000000000000000005f2b0000007c7d3132323233000000000000000000000000000000000000000000000000000000000000000000162123000047000000000020370000000000000000005600002122222222222225265e0000000000660000000000000000000000000000000000000000000000000000000000007627 +0000000000000000002425265e0000000042434343430000000000000000000000000000000000000000000000000000000000000000000020308300570000000000203700000000000000000066005c20382838282a3a3b376d5d5e00442c7800440000000044000000000000004400000000000000000000000000445c242a +00000000000000005c3435366e000000004300000000000000000000004800000000000000000000000000000044000000000000000000002028230067000000000020370000000000002c002b765c2138292929292929292a25252222222222221f616263606060636162630000606361620000000000000000242422223a29 +0000000047005c5d6d7d7e006c5d5e00004300000000000000000000005800000000000000000000000000000021222300000000000015162038300077000000000031330000000000002425252222282929292929292929293a2a28282828393000717273000000737172730000007371720000000000000000343b39392929 +0000000057006c6d7e0000007c6d6e0000000000000000000000000000560000000000480000000000000000002039300000000000000000313930837800000000000000000000000000273b2a283829292929292929292929292929292929383300646500000000006465000000000064650000000000000000003435292929 +00000000675c6d7e00000000006c6d5e00000000000000000000000000660000000000580000000000000015162028330000000044000000002028222223000000000000000000001516273a29292929292929292929292929292929292928306e0069680000000000796800000000006968000000000000000000006c342a29 +494a4b00776c6e44000000002b6c6d7e0000000000000000000000002b76000000000056000000000000000000203000000021222223005c5d203838393000000000000021221f5d5e2b272a2929292929292929292929292929292929293b366e0069680000000000696800000000006968000000000000000000007c6d273a +595a5b01782422230000000024267e0000002b2c002b0000000000002426000000000066000000000000002b0020305e000031383930006c6d20382928305e000000004420306d7d6d242a29292929292929292929292929292929292929376d6e007968000000000079680000000000796800000000000000000000006c343a +25252525222228330000000027372b00001e25252526000000002c0027375e002b2c2b760044000000001e252238306d5d5e00202833006c6d20392938306d5d5e00212239376e0a6c342a2a292929292929292929292929292929292929376d7e0069680000000000696800005e0000696800000000000000000000007c6d27 +2a3a3b2a2839300000002c00273a26000000273b2a365e00001624223a376e001e25252222221f00005c6d273828336d6d6d5d273000007c6d342a2929306d6d2d22393838377c5d6d342a3a292929292929292929292929292929292929376e0000796800000000007968005c6e000079680000000000000000000000007c27 +2929292929383000000024252a3b3700005c272a376d6d5e0000342a3a366d5d6d272a3a283000005c6d6d273a376d6d7d6d7d27370000007c7d273a38307d6d6d2028292a36007c6d6d272a292929292929292929292929292929292929377e0000696800005c00006968006c6d5e0069680000000000000000000000000027 +29292929292830000000273a292a37005c6d273a376d6d6e00000027376d6d6d6d273a29383000006c6d6d272a376d6e007c7e27370000000000272a2830006c6d272a3b370000006c6d273b292929292929292929292929292929292929370000007968005c6e000079685c6d6d6e0079680000000000000000000000000027 +0000000000830000000000000000000000000000000000000000000000000000000000000000000000000000000048000000001700000000000000001700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000009192939400000000000000004700000000000000000000000000000000000000000000000000000000000058000000001717000017000017001717000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000a1a2a3a400000000000000005700000000000000000000000000000000000000000000000000000000000056010001001700170017001700001700170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +4400b0b1b2b3b42c000000000000005600000000000000000000000000000000000000000000000000000000000066241e1e1e1717000017001700001717001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2122222222222225265e00000000006600000000000000000000000000000000000000000000000000000000000076270000001e00000000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +20382838282a3a3b376d5d5e00442c7800440000000044000000000000004400000000000000000000000000445c242a0000001e00000000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +38292929292929292a25252222222222221f618b8c8d8e8f63616263454688898a624574747475747446242422223a29000000001e000000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929293a2a28282828393000719b9c00000073717273000000999a720000000067000000343b3939292900000000001e0000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +29292929292929292929292929292938330064650000000000646500000000006465000000007700000000343529292900000000001e00000f0f0f0f0000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +292929292929292929292929292928306e0069680000000000796800000000006968000000006700000000006c342a290000001e1e0000000f0f0f0f0000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +29292929292929292929292929293b366e0069680000000000696800000000006968000000007700000000007c6d273a00001e00000000000f0f0f0f00001e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929292929292929376d6e007968000000000079680000000000796800000000670000000000006c343a001e0000000000001e1e1e1e00001e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929292929292929376d7e0069680000000000696800005e0000696800000000770000000000007c6d2700001e000000001e000000001e1e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929292929292929376e0000796800000000007968005c6e000079680000000067000000000000007c270000001e1e1e1e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929292929292929377e0000696800005c00006968006c6d5e00696800000000770000000000000000270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929292929292929370000007968005c6e000079685c6d6d6e00796800000000670000000000000000270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 __sfx__ 010100000f0001e000120002200017000260001b0002c000210003100027000360002b0003a000300003e00035000000000000000000000000000000000000000000000000000000000000000000000000000000 010100000970009700097000970008700077000670005700357003470034700347003470034700347003570035700357003570035700347003470034700337003370033700337000070000700007000070000700 From 7c786852f207b9147baa464acfb2a5605eb924cd Mon Sep 17 00:00:00 2001 From: Vawlpe Date: Fri, 10 Sep 2021 23:13:32 +0300 Subject: [PATCH 6/9] - [Epilogue] imrpoved birb room outline --- prologue.p8 | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/prologue.p8 b/prologue.p8 index 42ef15e..e4b08cd 100644 --- a/prologue.p8 +++ b/prologue.p8 @@ -1590,22 +1590,22 @@ __map__ 2a3a3b2a2839300000002c00273a26000000273b2a365e00001624223a376e001e25252222221f00005c6d273828336d6d6d5d273000007c6d342a2929306d6d2d22393838377c5d6d342a3a292929292929292929292929292929292929376e0000796800000000007968005c6e000079680000000000000000000000007c27 2929292929383000000024252a3b3700005c272a376d6d5e0000342a3a366d5d6d272a3a283000005c6d6d273a376d6d7d6d7d27370000007c7d273a38307d6d6d2028292a36007c6d6d272a292929292929292929292929292929292929377e0000696800005c00006968006c6d5e0069680000000000000000000000000027 29292929292830000000273a292a37005c6d273a376d6d6e00000027376d6d6d6d273a29383000006c6d6d272a376d6e007c7e27370000000000272a2830006c6d272a3b370000006c6d273b292929292929292929292929292929292929370000007968005c6e000079685c6d6d6e0079680000000000000000000000000027 -0000000000830000000000000000000000000000000000000000000000000000000000000000000000000000000048000000001700000000000000001700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -0000009192939400000000000000004700000000000000000000000000000000000000000000000000000000000058000000001717000017000017001717000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000a1a2a3a400000000000000005700000000000000000000000000000000000000000000000000000000000056010001001700170017001700001700170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -4400b0b1b2b3b42c000000000000005600000000000000000000000000000000000000000000000000000000000066241e1e1e1717000017001700001717001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2122222222222225265e00000000006600000000000000000000000000000000000000000000000000000000000076270000001e00000000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -20382838282a3a3b376d5d5e00442c7800440000000044000000000000004400000000000000000000000000445c242a0000001e00000000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -38292929292929292a25252222222222221f618b8c8d8e8f63616263454688898a624574747475747446242422223a29000000001e000000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929293a2a28282828393000719b9c00000073717273000000999a720000000067000000343b3939292900000000001e0000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -29292929292929292929292929292938330064650000000000646500000000006465000000007700000000343529292900000000001e00000f0f0f0f0000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -292929292929292929292929292928306e0069680000000000796800000000006968000000006700000000006c342a290000001e1e0000000f0f0f0f0000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -29292929292929292929292929293b366e0069680000000000696800000000006968000000007700000000007c6d273a00001e00000000000f0f0f0f00001e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929292929292929376d6e007968000000000079680000000000796800000000670000000000006c343a001e0000000000001e1e1e1e00001e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929292929292929376d7e0069680000000000696800005e0000696800000000770000000000007c6d2700001e000000001e000000001e1e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929292929292929376e0000796800000000007968005c6e000079680000000067000000000000007c270000001e1e1e1e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929292929292929377e0000696800005c00006968006c6d5e00696800000000770000000000000000270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929292929292929370000007968005c6e000079685c6d6d6e00796800000000670000000000000000270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000830000000000000000000000000000000000000000000000000000000000000000000000000000000048001700000000000000001700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000091929394000000000000000047000000000000000000000000000000000000000000000000000000000000580017170000170000170017170000001e1e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000a1a2a3a400000000000000005700000000000000000000000000000000000000000000000000000000000056011700170017001700001700171e1e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +4400b0b1b2b3b42c0000000000000056000000000000000000000000000000000000000000000000000000000000662417170000170017000017171e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2122222222222225265e00000000006600000000000000000000000000000000000000000000000000000000000076270000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +20382838282a3a3b376d5d5e00442c7800440000000044000000000000004400000000000000000000000000445c242a0001000000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +38292929292929292a25252222222222221f618b8c8d8e8f63616263454688898a624574747475747446242422223a291e1e1e000000000000000000001e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929293a2a28282828393000719b9c00000073717273000000999a720000000067000000343b393929290000001e000000000000000000001e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +292929292929292929292929292929383300646500000000006465000000000064650000000077000000003435292929000000001e1e00000000000000001e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +292929292929292929292929292928306e0069680000000000796800000000006968000000006700000000006c342a2900000000001e0000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +29292929292929292929292929293b366e0069680000000000696800000000006968000000007700000000007c6d273a0000001e1e000000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929292929292929376d6e007968000000000079680000000000796800000000670000000000006c343a001e1e00000000000f0f0f0f0000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929292929292929376d7e0069680000000000696800005e0000696800000000770000000000007c6d271e000000000000000f0f0f0f0000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929292929292929376e0000796800000000007968005c6e000079680000000067000000000000007c271e000000000000000f0f0f0f00001e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929292929292929377e0000696800005c00006968006c6d5e0069680000000077000000000000000027001e1e1e000000001e1e1e1e00001e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929292929292929370000007968005c6e000079685c6d6d6e0079680000000067000000000000000027000000001e1e1e1e000000001e1e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 __sfx__ 010100000f0001e000120002200017000260001b0002c000210003100027000360002b0003a000300003e00035000000000000000000000000000000000000000000000000000000000000000000000000000000 010100000970009700097000970008700077000670005700357003470034700347003470034700347003570035700357003570035700347003470034700337003370033700337000070000700007000070000700 From af90e4483a648a03e426c02b7f4db2594489143b Mon Sep 17 00:00:00 2001 From: Vawlpe Date: Sun, 14 Jan 2024 01:09:14 +0200 Subject: [PATCH 7/9] Port old prologue/epilogue levels to latest base --- prologue.p8 => interludes.p8 | 844 +++++++++++++++++------------------ 1 file changed, 403 insertions(+), 441 deletions(-) rename prologue.p8 => interludes.p8 (79%) diff --git a/prologue.p8 b/interludes.p8 similarity index 79% rename from prologue.p8 rename to interludes.p8 index e4b08cd..55e44f6 100644 --- a/prologue.p8 +++ b/interludes.p8 @@ -1,5 +1,5 @@ pico-8 cartridge // http://www.pico-8.com -version 33 +version 41 __lua__ --newleste.p8 base cart @@ -22,54 +22,52 @@ end -- [globals] ---tables -objects,got_fruit={},{} ---timers -freeze,delay_restart,sfx_timer,music_timer,ui_timer=0,0,0,0,-99 ---camera values ----- -cam_x,cam_y,cam_spdx,cam_spdy,cam_gain,cam_offx,cam_offy=0,0,0,0,0.25,0,0 ----- -_pal=pal --for outlining + +objects,got_fruit, --tables +freeze,delay_restart,sfx_timer,ui_timer, --timers +cam_x,cam_y,cam_spdx,cam_spdy,cam_gain,cam_offx,cam_offy, --camera values +_pal, --for outlining +shake,screenshake += +{},{}, +0,0,0,-99, +0,0,0,0,0.1,0,0, +pal, +0,false + local _g=_ENV --for writing to global vars -- [entry point] function _init() - -- load string: lvl_id, max_djump, etc... (further parameters unknown as of writing this) - load_params = stat(6) == "" and {1,0} or split(stat(6)) - max_djump,deaths,frames,seconds,minutes,music_timer,time_ticking,berry_count=load_params[2],0,0,0,0,0,true,0 + max_djump,deaths,frames,seconds,minutes,time_ticking,berry_count=0,0,0,0,0,true,0 music(0,0,7) - load_level(load_params[1]) + load_level(1) end -- [effects] -function rnd128() - return rnd(128) -end - clouds={} for i=0,16 do add(clouds,{ - x=rnd128(), - y=rnd128(), - spd=1+rnd(4), - w=32+rnd(32) + x=rnd"128", + y=rnd"128", + spd=1+rnd"4", + w=32+rnd"32" }) end particles={} for i=0,24 do add(particles,{ - x=rnd128(), - y=rnd128(), - s=flr(rnd(1.25)), - spd=0.25+rnd(5), + x=rnd"128", + y=rnd"128", + s=flr(rnd"1.25"), + spd=0.25+rnd"5", off=rnd(), - c=6+rnd(2), + c=6+rnd"2", }) end @@ -78,60 +76,52 @@ dead_particles={} -- [player entity] player={ - layer=2, - init=function(_ENV) - grace,jbuffer=0,0 - djump=max_djump - dash_time,dash_effect_time=0,0 - dash_target_x,dash_target_y=0,0 - dash_accel_x,dash_accel_y=0,0 - hitbox=rectangle(1,3,6,5) - spr_off=0 - collides=true + init=function(_ENV) + djump, hitbox, collides,layer = max_djump, rectangle(1,3,6,5), true,2 + + ---- + -- ^ refers to setting berry_timer and berry_count to 0 + foreach(split"grace,jbuffer,dash_time,dash_effect_time,dash_target_x,dash_target_y,dash_accel_x,dash_accel_y,spr_off,berry_timer,berry_count", function(var) + _ENV[var]=0 + end) create_hair(_ENV) - -- -- - berry_timer=0 - berry_count=0 - -- -- end, update=function(_ENV) if pause_player then return end - + -- horizontal input - local h_input=btn(โžก๏ธ) and 1 or btn(โฌ…๏ธ) and -1 or 0 + local h_input=split"0,-1,1,1"[btn()%4+1] -- spike collision / bottom death if is_flag(0,0,-1) or - y>lvl_ph and not exit_bottom then - kill_player(_ENV) + y>lvl_ph and not exit_bottom then + kill_player(_ENV) end -- on ground checks local on_ground=is_solid(0,1) -- -- - if on_ground then + if is_solid(0,1,true) then berry_timer+=1 else - berry_timer=0 - berry_count=0 + berry_timer, berry_count=0, 0 end - for f in all(fruitrain) do - if f.type==fruit and not f.golden and berry_timer>5 and f then + for i,f in inext,fruitrain do + if f.type==fruit and not f.golden and berry_timer>5 then -- to be implemented: -- save berry -- save golden - berry_timer=-5 berry_count+=1 _g.berry_count+=1 - got_fruit[f.fruit_id]=true + berry_timer, got_fruit[f.fruit_id]=-5, true init_object(lifeup, f.x, f.y,berry_count) del(fruitrain, f) - destroy_object(f) - if (fruitrain[1]) fruitrain[1].target=_ENV + destroy_object(f); + (fruitrain[i] or {}).target=f.target end end -- -- @@ -147,21 +137,19 @@ player={ -- jump buffer if jump then - jbuffer=4 - elseif jbuffer>0 then - jbuffer-=1 + jbuffer=5 end + jbuffer=max(jbuffer-1) -- grace frames and dash restoration if on_ground then - grace=6 + grace=7 if djump0 then - grace-=1 end + grace=max(grace-1) -- dash effect timer (for dash-triggered events, e.g., berry blocks) dash_effect_time-=1 @@ -176,14 +164,12 @@ player={ ) else -- x movement - local maxrun=1 local accel=on_ground and 0.6 or 0.4 - local deccel=0.15 -- set x speed spd.x=abs(spd.x)<=1 and - appr(spd.x,h_input*maxrun,accel) or - appr(spd.x,sign(spd.x)*maxrun,deccel) + appr(spd.x,h_input,accel) or + appr(spd.x,sign(spd.x),0.15) -- facing direction if spd.x~=0 then @@ -194,10 +180,10 @@ player={ local maxfall=2 -- wall slide - if h_input~=0 and is_solid(h_input,0) then + if is_solid(h_input,0) then maxfall=0.4 -- wall slide smoke - if rnd(10)<2 then + if rnd()<0.2 then init_smoke(h_input*6) end end @@ -211,18 +197,15 @@ player={ if jbuffer>0 then if grace>0 then -- normal jump - psfx(18) - jbuffer=0 - grace=0 - spd.y=-2 + psfx"18" + jbuffer,grace,spd.y=0,0,-2 init_smoke(0,4) else -- wall jump - local wall_dir=(is_solid(-3,0) and -1 or is_solid(3,0) and 1 or 0) - if wall_dir~=0 then - psfx(19) - jbuffer=0 - spd=vector(wall_dir*(-1-maxrun),-2) + local wall_dir=is_solid(-3,0) and -1 or is_solid(3,0) and 1 + if wall_dir then + psfx"19" + jbuffer,spd=0,vector(wall_dir*-2,-2) -- wall jump smoke init_smoke(wall_dir*6) end @@ -230,64 +213,65 @@ player={ end -- dash - local d_full=5 - local d_half=3.5355339059 -- 5 * sqrt(2) + if dash then + if djump>0 then + init_smoke() + djump-=1 + dash_time,_g.has_dashed,dash_effect_time=4, true, 10 + -- vertical input + local v_input=btn(โฌ†๏ธ) and -1 or btn(โฌ‡๏ธ) and 1 or 0 + -- calculate dash speeds + local dspd=h_input&v_input==0 and 5 or 3.5355339059 + spd=vector(h_input~=0 and h_input*dspd or + v_input~=0 and 0 or flip.x and -1 or 1, + v_input*dspd) + -- effects + psfx"20" + _g.freeze,_g.shake=2,5 + -- dash target speeds and accels + dash_target_x,dash_target_y,dash_accel_x,dash_accel_y= + 2*sign(spd.x), split"-1.5,0,2"[v_input+2], + v_input==0 and 1.5 or 1.06066017177 , spd.x==0 and 1.5 or 1.06066017177 -- 1.5 * sqrt() + + + -- emulate soft dashes + if ph_input==-h_input and oob(ph_input,0) then + spd.x=0 + end - if djump>0 and dash then - init_smoke() - djump-=1 - dash_time=4 - _g.has_dashed=true - dash_effect_time=10 - -- vertical input - local v_input=btn(โฌ†๏ธ) and -1 or btn(โฌ‡๏ธ) and 1 or 0 - -- calculate dash speeds - spd=vector(h_input~=0 and - h_input*(v_input~=0 and d_half or d_full) or - (v_input~=0 and 0 or flip.x and -1 or 1) - ,v_input~=0 and v_input*(h_input~=0 and d_half or d_full) or 0) - -- effects - psfx(20) - _g.freeze=2 - -- dash target speeds and accels - dash_target_x=2*sign(spd.x) - dash_target_y=(spd.y>=0 and 2 or 1.5)*sign(spd.y) - dash_accel_x=spd.y==0 and 1.5 or 1.06066017177 -- 1.5 * sqrt() - dash_accel_y=spd.x==0 and 1.5 or 1.06066017177 - - -- emulate soft dashes - if h_input~=0 and ph_input==-h_input and oob(ph_input,0) then - spd.x=0 - end - - elseif djump<=0 and dash then - -- failed dash smoke - psfx(21) - init_smoke() + else + -- failed dash smoke + psfx"21" + init_smoke() + end end end -- animation spr_off+=0.25 - sprite = not on_ground and (is_solid(h_input,0) and 5 or 3) or -- wall slide or mid air + sprite = on_ground and ( btn(โฌ‡๏ธ) and 6 or -- crouch btn(โฌ†๏ธ) and 7 or -- look up - spd.x~=0 and h_input~=0 and 1+spr_off%4 or 1 -- walk or stand + spd.x*h_input~=0 and 1+spr_off%4 or 1) -- walk or stand + or is_solid(h_input,0) and 5 or 3 -- wall slide or mid air + update_hair(_ENV) + -- exit level (except summit) - if (exit_right and left()>=lvl_pw or exit_top and y<-4 or exit_left and right()<0 or exit_bottom and top()>=lvl_ph) then + if (exit_right and left()>=lvl_pw or + exit_top and y<-4 or + exit_left and right()<0 or + exit_bottom and top()>=lvl_ph) and levels[lvl_id+1] then next_level() end - -- was on the ground - was_on_ground=on_ground - --previous horizontal input (for soft dashes) - ph_input=h_input + -- was on the ground, previous horizontal input (for soft dashes) + was_on_ground,ph_input=on_ground, h_input end, draw=function(_ENV) -- draw player hair and sprite - set_hair_color(djump) + pal(8,(djump==1 and 8) or (djump==2 and 14) or 12) draw_hair(_ENV) draw_obj_sprite(_ENV) pal() @@ -301,56 +285,52 @@ function create_hair(_ENV) end end -function set_hair_color(djump) - pal(8,djump==1 and 8 or djump==2 and 14 or 12) -end function update_hair(_ENV) - local last=vector(x+4-(flip.x and-2 or 3),y+(btn(โฌ‡๏ธ) and 4 or 2.9)) - for h in all(hair) do + local last=vector(x+(flip.x and 6 or 1),y+(btn(โฌ‡๏ธ) and 4 or 2.9)) + foreach(hair, function(h) h.x+=(last.x-h.x)/1.5 h.y+=(last.y+0.5-h.y)/1.5 last=h - end + end) end function draw_hair(_ENV) - for i,h in pairs(hair) do - circfill(round(h.x),round(h.y),mid(4-i,1,2),8) + for i,h in inext,hair do + circfill(round(h.x),round(h.y),split"2,2,1,1,1"[i],8) end end -- [other entities] player_spawn={ - layer=2, init=function(_ENV) - sfx(15) + layer=2 + sfx"15" sprite=3 target=y y=min(y+48,lvl_ph) - _g.cam_x,_g.cam_y=mid(x,64,lvl_pw-64),mid(y,64,lvl_ph-64) + _g.cam_x,_g.cam_y=mid(x,64,lvl_pw-64),mid(y,64,lvl_ph-64) spd.y=-4 state=0 delay=0 create_hair(_ENV) djump=max_djump --- --- - for i=1,#fruitrain do - local f=init_object(fruit,x,y,fruitrain[i].sprite) - f.follow=true - f.target=i==1 and _ENV or fruitrain[i-1] - f.r=fruitrain[i].r - f.fruit_id=fruitrain[i].fruit_id - fruitrain[i]=f - end + foreach(fruitrain, function(f) + --this gets called many times but saves tokens for checking if fruitrain is empty + fruitrain[1].target=_ENV + + add(objects,f) + f.x,f.y=x,y + fruit.init(f) + end) --- --- end, update=function(_ENV) -- jumping up if state==0 and ytarget then -- clamp at target y - y=target - spd=vector(0,0) - state=2 - delay=5 + y,spd,state,delay,_g.shake=target,vector(0,0),2,5,4 init_smoke(0,4) - sfx(16) + sfx"16" end end -- landing and spawning player object @@ -375,9 +352,9 @@ player_spawn={ sprite=6 if delay<0 then destroy_object(_ENV) - local p=init_object(player,x,y) + local p=init_object(player,x,y); --- --- - if (fruitrain[1]) fruitrain[1].target=p + (fruitrain[1] or {}).target=p --- --- end end @@ -398,12 +375,11 @@ camera_trigger={ if timer and timer>0 then timer-=1 if timer==0 then - _g.cam_offx=offx - _g.cam_offy=offy + _g.cam_offx,_g.cam_offy=offx,offy else _g.cam_offx+=cam_gain*(offx-cam_offx) _g.cam_offy+=cam_gain*(offy-cam_offy) - end + end elseif player_here() then timer=5 end @@ -411,76 +387,64 @@ camera_trigger={ } ---- -spring={ - init=function(_ENV) - dy,delay=0,0 - end, - update=function(_ENV) - local hit=player_here() - if delay>0 then - delay-=1 - elseif hit then - hit.y,hit.spd.y,hit.dash_time,hit.dash_effect_time,dy,delay,hit.djump=y-4,-3,0,0,4,10,max_djump - hit.spd.x*=0.2 - psfx(14) - end - dy*=0.75 - end, - draw=function(_ENV) - sspr(72,0,8,8-flr(dy),x,y+dy) - end -} -side_spring={ - init=function(_ENV) - dx,dir=0,is_solid(-1,0) and 1 or -1 - end, - update=function(_ENV) - local hit=player_here() - if hit then - hit.x,hit.spd.x,hit.spd.y,hit.dash_time,hit.dash_effect_time,dx,hit.djump=x+dir*4,dir*3,-1.5,0,0,4,max_djump - psfx(14) +spring={ + init=function(_ENV) + delta,dir=0,sprite==9 and 0 or is_solid(-1,0) and 1 or -1 + end, + update=function(_ENV) + delta*=0.75 + --can save tokens by setting hit as _ENV + --but i'm not desperate enough yet + local hit=player_here() + if hit then + if dir==0 then + hit.move(0,y-hit.y-4,1) + hit.spd.x*=0.2 + hit.spd.y=-3 + else + hit.move(x+dir*4-hit.x,0,1) + hit.spd=vector(dir*3,-1.5) + end + hit.dash_time,hit.dash_effect_time,delta,hit.djump=0,0,4,max_djump + end + end, + draw=function(_ENV) + local delta=flr(delta) + if dir==0 then + sspr(72,0,8,8-delta,x,y+delta) + else + spr(8,dir==-1 and x+delta or x,y,1-delta/8,1,dir==1) + end end - dx*=0.75 - end, - draw=function(_ENV) - local dx=flr(dx) - sspr(64,0,8-dx,8,x+dx*(dir-1)/-2,y,8-dx,8,dir==1) - end } - refill={ init=function(_ENV) - offset=rnd() - timer=0 - hitbox=rectangle(-1,-1,10,10) - active=true + offset,timer,hitbox=rnd(),0,rectangle(-1,-1,10,10) end, update=function(_ENV) - if active then + if timer>0 then + timer-=1 + if timer==0 then + psfx"12" + init_smoke() + end + else offset+=0.02 local hit=player_here() if hit and hit.djump0 then - timer-=1 - else - psfx(12) - init_smoke() - active=true end end, draw=function(_ENV) - if active then + if timer==0 then spr(15,x,y+sin(offset)+0.5) else - -- color(7) + -- color"7" -- line(x,y+4,x+3,y+7) -- line(x+4,y+7,x+7,y+4) -- line(x+7,y+3,x+4,y) @@ -490,9 +454,9 @@ refill={ 4,7,7,4 7,3,4,0 3,0,0,3]],"\n"),function(t) - local o1,o2,o3,o4=unpack(split(t)) - line(x+o1,y+o2,x+o3,y+o4,7) - end + local o1,o2,o3,o4=unpack(split(t)) + line(x+o1,y+o2,x+o3,y+o4,7) + end ) end end @@ -500,41 +464,36 @@ refill={ fall_floor={ init=function(_ENV) - solid_obj=true - state=0 + solid_obj,state,unsafe_ground,delay=true,0,true,0 end, update=function(_ENV) + --it looks like weird stuff goes on here with the decimal constants (mostly to ensure rounding correctly), but it should be equivalent to vanilla + --(and if i made an error, probably no one cares) -- idling - if state==0 then - for i=0,2 do - if check(player,i-1,-(i%2)) then - psfx(13) - state,delay=1,15 + if delay>0 then + delay-=0.2 + elseif state==0 then + for i=-1,1 do + if check(player,i,abs(i)-1) then + psfx"13" + state,delay=1,2.79 init_smoke() break end end -- shaking elseif state==1 then - delay-=1 - if delay<=0 then - state=2 - delay=60--how long it hides for - collideable=false - end + state,delay,collideable=2,11.79--,false -- invisible, waiting to reset - elseif state==2 then - delay-=1 - if delay<=0 and not player_here() then - psfx(12) - state=0 - collideable=true + else + if not player_here() then + psfx"12" + state,collideable=0,true init_smoke() end end - end, - draw=function(_ENV) - spr(state==1 and 26-delay/5 or state==0 and 23,x,y) --add an if statement if you use sprite 0 + --if sprite 0 is not empty, need to fixup this + sprite=state==1 and 25.8-delay or state==0 and 23 end } @@ -607,12 +566,10 @@ fall_plat={ } smoke={ - layer=3, init=function(_ENV) - spd=vector(0.3+rnd(0.2),-0.1) - x+=-1+rnd(2) - y+=-1+rnd(2) - flip=vector(maybe(),maybe()) + layer,spd,flip=3,vector(0.3+rnd"0.2",-0.1),vector(rnd()<0.5,rnd()<0.5) + x+=-1+rnd"2" + y+=-1+rnd"2" end, update=function(_ENV) sprite+=0.2 @@ -627,35 +584,26 @@ fruitrain={} fruit={ check_fruit=true, init=function(_ENV) - y_=y - off=0 - follow=false - tx=x - ty=y - golden=sprite==11 + y_,off,tx,ty,golden=y,0,x,y,sprite==11 if golden and deaths>0 then destroy_object(_ENV) end end, update=function(_ENV) - if not follow then + if target then + tx+=0.2*(target.x-tx) + ty+=0.2*(target.y-ty) + local dtx,dty=x-tx,y_-ty + local a,k=atan2(dtx,dty),dtx^2+dty^2 > r^2 and 0.2 or 0.1 + x+=k*(r*cos(a)-dtx) + y_+=k*(r*sin(a)-dty) + else local hit=player_here() if hit then - hit.berry_timer=0 - follow=true - target=#fruitrain==0 and hit or fruitrain[#fruitrain] - r=#fruitrain==0 and 12 or 8 + hit.berry_timer,target,r= + 0,fruitrain[#fruitrain] or hit,fruitrain[1] and 8 or 12 add(fruitrain,_ENV) end - else - if target then - tx+=0.2*(target.x-tx) - ty+=0.2*(target.y-ty) - local a=atan2(x-tx,y_-ty) - local k=(x-tx)^2+(y_-ty)^2 > r^2 and 0.2 or 0.1 - x+=k*(tx+r*cos(a)-x) - y_+=k*(ty+r*sin(a)-y_) - end end off+=0.025 y=y_+sin(off)*2.5 @@ -666,20 +614,16 @@ fruit={ fly_fruit={ check_fruit=true, init=function(_ENV) - start=y - step=0.5 - sfx_delay=8 + start,step,sfx_delay=y,0.5,8 end, update=function(_ENV) --fly away if has_dashed then - if sfx_delay>0 then sfx_delay-=1 - if sfx_delay<=0 then + if sfx_delay==0 then _g.sfx_timer=20 - sfx(10) + sfx"10" end - end spd.y=appr(spd.y,-3.5,0.25) if y<-16 then destroy_object(_ENV) @@ -713,23 +657,19 @@ fly_fruit={ lifeup={ init=function(_ENV) - spd.y=-0.25 - duration=30 - flash=0 - outline=false - _g.sfx_timer=20 - sfx(9) + spd.y,duration,flash,_g.sfx_timer,outline=-0.25,30,0,20--,false + sfx"9" end, update=function(_ENV) duration-=1 if duration<=0 then destroy_object(_ENV) end + flash+=0.5 end, draw=function(_ENV) - flash+=0.5 ---- - ?sprite<=5 and sprite.."000" or "1UP",x-4,y-4,7+flash%2 + ?split"1000,2000,3000,4000,5000,1up"[min(sprite,6)],x-4,y-4,7+flash%2 ---- end } @@ -742,62 +682,51 @@ psfx=function(num) end -- [tile dict] -tiles={ - [1]=player_spawn, - [8]=side_spring, - [9]=spring, - [10]=fruit, - [11]=fruit, - [12]=fly_fruit, - [15]=refill, - [23]=fall_floor, - [66]=fall_plat -} - +tiles={} +foreach(split([[ +1,player_spawn +8,spring +9,spring +10,fruit +11,fruit +12,fly_fruit +15,refill +23,fall_floor +66,fall_plat +]],"\n"),function(t) + local tile,obj=unpack(split(t)) + tiles[tile]=_ENV[obj] +end) -- [object functions] -function init_object(type,sx,sy,tile) +function init_object(_type,sx,sy,tile) --generate and check berry id local id=sx..","..sy..","..lvl_id - if type.check_fruit and got_fruit[id] then + if _type.check_fruit and got_fruit[id] then return end --local _g=_g - local _ENV={ - type=type, - collideable=true, - sprite=tile, - flip=vector(), - x=sx, - y=sy, - hitbox=rectangle(0,0,8,8), - spd=vector(0,0), - rem=vector(0,0), - fruit_id=id, - outline=true, - draw_seed=rnd() - } - _g.setmetatable(_ENV,{__index=_g}) + local _ENV=setmetatable({},{__index=_g}) + type, collideable, sprite, flip, x, y, hitbox, spd, rem, fruit_id, outline, draw_seed= + _type, true, tile, vector(), sx, sy, rectangle(0,0,8,8), vector(0,0), vector(0,0), id, true, rnd() + function left() return x+hitbox.x end function right() return left()+hitbox.w-1 end function top() return y+hitbox.y end function bottom() return top()+hitbox.h-1 end - function is_solid(ox,oy) + function is_solid(ox,oy,require_safe_ground) for o in all(objects) do - if o!=_ENV and (o.solid_obj or o.semisolid_obj and not objcollide(o,ox,0) and oy>0) and objcollide(o,ox,oy) then + if o!=_ENV and (o.solid_obj or o.semisolid_obj and not objcollide(o,ox,0) and oy>0) and objcollide(o,ox,oy) and not (require_safe_ground and o.unsafe_ground) then return true end end - return (oy>0 and not is_flag(ox,0,3) and is_flag(ox,oy,3)) or -- one way platform or + return oy>0 and not is_flag(ox,0,3) and is_flag(ox,oy,3) or -- one way platform or is_flag(ox,oy,0) -- solid terrain end function oob(ox,oy) return not exit_left and left()+ox<0 or not exit_right and right()+ox>=lvl_pw or top()+oy<=-8 end - function place_free(ox,oy) - return not (is_solid(ox,oy) or oob(ox,oy)) - end function is_flag(ox,oy,flag) for i=mid(0,lvl_w-1,(left()+ox)\8),mid(0,lvl_w-1,(right()+ox)/8) do @@ -807,13 +736,11 @@ function init_object(type,sx,sy,tile) if fget(tile,flag) and (flag~=3 or j*8>bottom()) then return true end - else - if ({spd.y>=0 and bottom()%8>=6, - spd.y<=0 and top()%8<=2, - spd.x<=0 and left()%8<=2, - spd.x>=0 and right()%8>=6})[tile-15] then + elseif ({spd.y>=0 and bottom()%8>=6, + spd.y<=0 and top()%8<=2, + spd.x<=0 and left()%8<=2, + spd.x>=0 and right()%8>=6})[tile-15] then return true - end end end end @@ -827,7 +754,7 @@ function init_object(type,sx,sy,tile) end function check(type,ox,oy) for other in all(objects) do - if other and other.type==type and other~=_ENV and objcollide(other,ox,oy) then + if other.type==type and other~=_ENV and objcollide(other,ox,oy) then return other end end @@ -839,22 +766,21 @@ function init_object(type,sx,sy,tile) function move(ox,oy,start) for axis in all{"x","y"} do - rem[axis]+=axis=="x" and ox or oy + rem[axis]+=vector(ox,oy)[axis] local amt=round(rem[axis]) rem[axis]-=amt + local upmoving=axis=="y" and amt<0 - local riding=not player_here() and check(player,0,upmoving and amt or -1) - local movamt + local riding,movamt=not player_here() and check(player,0,upmoving and amt or -1)--,nil if collides then - local step=sign(amt) + local step,p=sign(amt),_ENV[axis] local d=axis=="x" and step or 0 - local p=_ENV[axis] for i=start,abs(amt) do - if place_free(d,step-d) then - _ENV[axis]+=step - else + if is_solid(d,step-d) or oob(d,step-d) then spd[axis],rem[axis]=0,0 break + else + _ENV[axis]+=step end end movamt=_ENV[axis]-p --save how many px moved to use later for solids @@ -876,14 +802,14 @@ function init_object(type,sx,sy,tile) collideable=false local hit=player_here() if hit and solid_obj then - hit.move(axis=="x" and (amt>0 and right()+1-hit.left() or amt<0 and left()-hit.right()-1) or 0, - axis=="y" and (amt>0 and bottom()+1-hit.top() or amt<0 and top()-hit.bottom()-1) or 0, + hit.move(axis~="x" and 0 or amt>0 and right()+1-hit.left() or amt<0 and left()-hit.right()-1, + axis~="y" and 0 or amt>0 and bottom()+1-hit.top() or amt<0 and top()-hit.bottom()-1, 1) if player_here() then kill_player(hit) end elseif riding then - riding.move(axis=="x" and movamt or 0, axis=="y" and movamt or 0,1) + riding.move(vector(movamt,0)[axis],vector(0,movamt)[axis],1) end collideable=true end @@ -908,8 +834,8 @@ function destroy_object(obj) end function kill_player(obj) - sfx_timer=12 - sfx(17) + sfx_timer,shake=12,9 + sfx"17" deaths+=1 destroy_object(obj) --dead_particles={} @@ -923,10 +849,10 @@ function kill_player(obj) }) end -- --- - for f in all(fruitrain) do - if (f.golden) full_restart=true - del(fruitrain,f) - end + foreach(fruitrain,function(f) + full_restart = full_restart or f.golden + end) + fruitrain={} --- --- delay_restart=15 -- @@ -938,18 +864,15 @@ end function next_level() - local next_lvl= lvl_id == 3 and 2 or lvl_id+1 - load_level(next_lvl) + load_level((lvl_id==3 and 2) or lvl_id+1) end function load_level(id) - has_dashed=false - --remove existing objects foreach(objects,destroy_object) - --reset camera speed - cam_spdx,cam_spdy=0,0 + --reset camera speed, drawing timer setup + ui_timer,cam_spdx,cam_spdy,has_dashed=5,0,0--,false local diff_level=lvl_id~=id @@ -958,22 +881,34 @@ function load_level(id) --set level globals local tbl=split(levels[lvl_id]) - lvl_x,lvl_y,lvl_w,lvl_h=tbl[1]*16,tbl[2]*16,tbl[3]*16,tbl[4]*16 - lvl_pw=lvl_w*8 - lvl_ph=lvl_h*8 - - local exits=tonum(tbl[5]) or 0b0001 - exit_top,exit_right,exit_bottom,exit_left=exits&1!=0,exits&2!=0,exits&4!=0, exits&8!=0 - - --drawing timer setup - ui_timer=5 + for i=1,4 do + _ENV[split"lvl_x,lvl_y,lvl_w,lvl_h"[i]]=tbl[i]*16 + end + + lvl_pw,lvl_ph=lvl_w*8,lvl_h*8 + + local exits=tonum(tbl[5]) or 0b0001 + + -- exit_top,exit_right,exit_bottom,exit_left=exits&1!=0,exits&2!=0,exits&4!=0, exits&8!=0 + for i,v in inext,split"exit_top,exit_right,exit_bottom,exit_left" do + _ENV[v]=exits&(0.5<-- + + -- dash inventory changes + max_djump = (id == 1 and 0) or 2 end -- [main update loop] @@ -1012,16 +951,7 @@ function _update() end frames%=30 - if music_timer>0 then - music_timer-=1 - if music_timer<=0 then - music(10,0,7) - end - end - - if sfx_timer>0 then - sfx_timer-=1 - end + sfx_timer=max(sfx_timer-1) -- cancel if freeze if freeze>0 then @@ -1029,12 +959,17 @@ function _update() return end + -- screenshake toggle + if btnp(โฌ†๏ธ,1) then + screenshake=not screenshake + end + -- restart (soon) if delay_restart>0 then - cam_spdx,cam_spdy=0,0 + cam_spdx,cam_spdy=0,0 delay_restart-=1 if delay_restart==0 then - -- -- + -- -- if full_restart then full_restart=false _init() @@ -1056,7 +991,6 @@ function _update() foreach(objects,function(_ENV) if type==player or type==player_spawn then move_camera(_ENV) - return end end) @@ -1072,38 +1006,44 @@ function _draw() -- reset all palette values pal() - --set cam draw position - draw_x=round(cam_x)-64 - draw_y=round(cam_y)-64 + --set cam draw position + draw_x,draw_y=round(cam_x)-64,round(cam_y)-64 + + if shake>0 then + shake-=1 + if screenshake then + draw_x+=-2+rnd"5" + draw_y+=-2+rnd"5" + end + end camera(draw_x,draw_y) -- draw bg color cls() -- bg clouds effect - foreach(clouds,function(c) - c.x+=c.spd-cam_spdx - rectfill(c.x+draw_x,c.y+draw_y,c.x+c.w+draw_x,c.y+16-c.w*0.1875+draw_y,1) - if c.x>128 then - c.x=-c.w - c.y=rnd(120) + foreach(clouds,function(_ENV) + x+=spd-_g.cam_spdx + _g.rectfill(x+_g.draw_x,y+_g.draw_y,x+w+_g.draw_x,y+16-w*0.1875+_g.draw_y,1) + if x>128 then + x,y=-w,_g.rnd"120" end end) - -- draw bg terrain - palt(0,false) - palt(8,true) + -- draw bg terrain + palt(0, false) + palt(8, true) map(lvl_x,lvl_y,0,0,lvl_w,lvl_h,4) palt() -- draw outlines - for i=0,15 do pal(i,1) end + pal(split"1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1") pal=time foreach(objects,function(_ENV) if outline then - for dx=-1,1 do for dy=-1,1 do if dx&dy==0 then - camera(draw_x+dx,draw_y+dy) draw_object(_ENV) - end end end + for i=1,4 do + camera(draw_x+split"-1,0,0,1"[i],draw_y+split"0,-1,1,0"[i]) draw_object(_ENV) + end end end) pal=_pal @@ -1117,10 +1057,10 @@ function _draw() --3: foreground layer local layers={{},{},{}} foreach(objects,function(_ENV) - if type.layer==0 then + if layer==0 then draw_object(_ENV) --draw below terrain else - add(layers[type.layer or 1],_ENV) --add object to layer, default draw below player + add(layers[layer or 1],_ENV) --add object to layer, default draw below player end end) -- draw terrain @@ -1144,11 +1084,9 @@ function _draw() off+=_g.min(0.05,spd/32) _g.rectfill(x+_g.draw_x,y+_g.draw_y,x+s+_g.draw_x,y+s+_g.draw_y,c) if x>132 then - x=-4 - y=_g.rnd128() + x,y=-4,_g.rnd"128" elseif x<-4 then - x=128 - y=_g.rnd128() + x,y=128,_g.rnd"128" end end) @@ -1164,15 +1102,15 @@ function _draw() end) -- draw time if ui_timer>=-30 then - if ui_timer<0 then - draw_time(draw_x+4,draw_y+4) - end - ui_timer-=1 + if ui_timer<0 then + draw_time(draw_x+4,draw_y+4) + end + ui_timer-=1 end -- camera() - color(0) + color"0" if tstate>=0 then local t20=tpos+20 if tstate==0 then @@ -1211,7 +1149,7 @@ end function two_digit_str(x) - return x<10 and "0"..x or x + return sub("0"..x,-2) end -- [helper functions] @@ -1221,17 +1159,13 @@ function round(x) end function appr(val,target,amount) - return val>target and max(val-amount,target) or min(val+amount,target) + return mid(val-amount,val+amount,target) end function sign(v) return v~=0 and sgn(v) or 0 end -function maybe() - return rnd()<0.5 -end - function tile_at(x,y) return mget(lvl_x+x,lvl_y+y) end @@ -1261,19 +1195,31 @@ end -->8 --[map metadata] +--@conf +--[[ +param_names={} +composite_shapes={} +autotiles={{45, 31, 46, 33, 33, 35, 34, 49, 49, 51, 50, 32, 32, 48, 41, [0] = 46}, {36, 38, 37, 36, 36, 38, 37, 52, 52, 54, 53, 39, 39, 55, 41, [0] = 30}} +]] +--@begin --level table --"x,y,w,h,exit_dirs" --exit directions "0b"+"exit_left"+"exit_bottom"+"exit_right"+"exit_top" (default top- 0b0001) levels={ - "0,0,8,1", - "0,1,3,1,0b0010", - "3,1,1,1,0b1000" -- todo: birdnest secret + "0,0,8,1,0b0000", + "0,1,3,1,0b0010", + "3,1,1,1,0b1000", + "4,1,1,1,0b0000", } ---- --camera trigger hitboxes --"x,y,w,h,off_x,off_y" camera_offsets={ + {}, + {}, + {}, + {} } ---- @@ -1281,41 +1227,28 @@ camera_offsets={ --assigned levels will load from here instead of the map mapdata={ } +--@end function move_camera(obj) ---- - cam_spdx=cam_gain*(4+obj.x-cam_x+cam_offx) - cam_spdy=cam_gain*(4+obj.y-cam_y+cam_offy) + cam_spdx,cam_spdy=cam_gain*(4+obj.x-cam_x+cam_offx),cam_gain*(4+obj.y-cam_y+cam_offy) ---- cam_x+=cam_spdx cam_y+=cam_spdy --clamp camera to level boundaries - local clamped=mid(cam_x,64,lvl_pw-64) - if cam_x~=clamped then - cam_spdx=0 - cam_x=clamped + local clampx,clampy=mid(cam_x,64,lvl_pw-64),mid(cam_y,64,lvl_ph-64) + if cam_x~=clampx then + cam_spdx,cam_x=0,clampx end - clamped=mid(cam_y,64,lvl_ph-64) - if cam_y~=clamped then - cam_spdy=0 - cam_y=clamped + if cam_y~=clampy then + cam_spdy,cam_y=0,clampy end end ---replace mapdata with hex -function replace_mapdata(x,y,w,h,data) - for y_=0,h*2-1,2 do - local offset=y*2+y_<64 and 8192 or 0 - for x_=1,w*2,2 do - local i=x_+y_*w - poke(offset+x+y*128+y_*64+x_/2,"0x"..sub(data,i,i+1)) - end - end -end --[[ @@ -1330,19 +1263,16 @@ and can be safely removed! --copy mapdata string to clipboard function get_mapdata(x,y,w,h) local reserve="" - for y_=0,h*2-1,2 do - local offset=y*2+y_<64 and 8192 or 0 - for x_=1,w*2,2 do - reserve=reserve..num2hex(peek(offset+x+y*128+y_*64+x_/2)) - end + for i=0,w*h-1 do + reserve..=num2base256(mget(i%w,i\w)+1) end printh(reserve,"@clip") end --convert mapdata to memory data -function num2hex(v) - return sub(tostr(v,true),5,6) -end +function num2base256(number) + return number%256==0 and "\\000" or number==10 and "\\n" or number==13 and "\\r" or number==34 and [[\"]] or number==92 and [[\\]] or chr(number) +end __gfx__ 000000000000000000000000088888800000000000000000000000000000000000000000000000000300b0b00a0aa0a000000000000000000000000000077000 00000000088888800888888088888888088888800888880000000000088888800004000000000000003b33000aa88aa0000777770000000000000000007bb700 @@ -1440,6 +1370,38 @@ d666666dd666666dd666666dd666666d881441144114418883133138881441884188888888888814 82914444192914421411111441444944111114298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 82914114192914421444777741444944444444298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 82914444192914421447677677744944477744298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 __label__ cccccccccccccccccccccccccccccccccccccc775500000000000000000000000000000000070000000000000000000000000000000000000000000000000000 cccccccccccccccccccccccccccccccccccccc776670000000000000000000000000000000000000000000000000000000000000000000000000000000000000 @@ -1571,7 +1533,7 @@ ccccccccccccccccccccccccccccccccccccccccccccc77700000000000000000000000000000000 cccccccccccccccccccccccccccccccccccccccccccccc7700000000000000000000000000000000000000000000000000000000000000000000000000000000 __gff__ -0000000000000000000000000000000002020202080808000000000000030303030303030303030303030302020303000303030303030303030303030400000004040000040303040404040404040404000000000303040404040404040404040303030304040404040403030404040404030303030304040404030404040404 +0000000000000000000000000000000002020202080808000000000000030303030303030303030303030304040303000303030303030303030303030400000000000000040403040404040404040404000000000303040404040404040404040303030304040404040403030404040400030303030304040404000004040404 0404040404040404030303030303030304040404040404040403030303040000040404040404040400000000000000000404040404040404000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 __map__ 00000000000000000000000000272a2929292929292a37000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083000000000000000000000000000000000000000000000000000000000000000000000000000000004800 @@ -1585,27 +1547,27 @@ __map__ 0000000057006c6d7e0000007c6d6e0000000000000000000000000000560000000000480000000000000000002039300000000000000000313930837800000000000000000000000000273b2a283829292929292929292929292929292929383300646500000000006465000000000064650000000000000000003435292929 00000000675c6d7e00000000006c6d5e00000000000000000000000000660000000000580000000000000015162028330000000044000000002028222223000000000000000000001516273a29292929292929292929292929292929292928306e0069680000000000796800000000006968000000000000000000006c342a29 494a4b00776c6e44000000002b6c6d7e0000000000000000000000002b76000000000056000000000000000000203000000021222223005c5d203838393000000000000021221f5d5e2b272a2929292929292929292929292929292929293b366e0069680000000000696800000000006968000000000000000000007c6d273a -595a5b01782422230000000024267e0000002b2c002b0000000000002426000000000066000000000000002b0020305e000031383930006c6d20382928305e000000004420306d7d6d242a29292929292929292929292929292929292929376d6e007968000000000079680000000000796800000000000000000000006c343a -25252525222228330000000027372b00001e25252526000000002c0027375e002b2c2b760044000000001e252238306d5d5e00202833006c6d20392938306d5d5e00212239376e0a6c342a2a292929292929292929292929292929292929376d7e0069680000000000696800005e0000696800000000000000000000007c6d27 -2a3a3b2a2839300000002c00273a26000000273b2a365e00001624223a376e001e25252222221f00005c6d273828336d6d6d5d273000007c6d342a2929306d6d2d22393838377c5d6d342a3a292929292929292929292929292929292929376e0000796800000000007968005c6e000079680000000000000000000000007c27 +595a5b01782422230000000024267e0000002b2c002b0000000000002426000000000066000000000000002b0020305e000031383930006c6d20382928305e000000004420306d6d6d242a29292929292929292929292929292929292929376d6e007968000000000079680000000000796800000000000000000000006c343a +25252525222228330000000027372b00001e25252526000000002c0027375e002b2c2b760044000000001e252238306d5d5e00202833006c6d20392938306d5d5e00212239376d6d6d342a2a292929292929292929292929292929292929376d7e0069680000000000696800005e0000696800000000000000000000007c6d27 +2a3a3b2a2839300000002c00273a26000000273b2a365e00001624223a376e001e25252222221f00005c6d273828336d6d6d5d273000007c6d342a2929306d6d2d22393838377c6d6d342a3a292929292929292929292929292929292929376e0000796800000000007968005c6e000079680000000000000000000000007c27 2929292929383000000024252a3b3700005c272a376d6d5e0000342a3a366d5d6d272a3a283000005c6d6d273a376d6d7d6d7d27370000007c7d273a38307d6d6d2028292a36007c6d6d272a292929292929292929292929292929292929377e0000696800005c00006968006c6d5e0069680000000000000000000000000027 29292929292830000000273a292a37005c6d273a376d6d6e00000027376d6d6d6d273a29383000006c6d6d272a376d6e007c7e27370000000000272a2830006c6d272a3b370000006c6d273b292929292929292929292929292929292929370000007968005c6e000079685c6d6d6e0079680000000000000000000000000027 -0000000000830000000000000000000000000000000000000000000000000000000000000000000000000000000048001700000000000000001700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000091929394000000000000000047000000000000000000000000000000000000000000000000000000000000580017170000170000170017170000001e1e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000a1a2a3a400000000000000005700000000000000000000000000000000000000000000000000000000000056011700170017001700001700171e1e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -4400b0b1b2b3b42c0000000000000056000000000000000000000000000000000000000000000000000000000000662417170000170017000017171e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2122222222222225265e00000000006600000000000000000000000000000000000000000000000000000000000076270000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -20382838282a3a3b376d5d5e00442c7800440000000044000000000000004400000000000000000000000000445c242a0001000000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -38292929292929292a25252222222222221f618b8c8d8e8f63616263454688898a624574747475747446242422223a291e1e1e000000000000000000001e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929293a2a28282828393000719b9c00000073717273000000999a720000000067000000343b393929290000001e000000000000000000001e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -292929292929292929292929292929383300646500000000006465000000000064650000000077000000003435292929000000001e1e00000000000000001e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -292929292929292929292929292928306e0069680000000000796800000000006968000000006700000000006c342a2900000000001e0000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -29292929292929292929292929293b366e0069680000000000696800000000006968000000007700000000007c6d273a0000001e1e000000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929292929292929376d6e007968000000000079680000000000796800000000670000000000006c343a001e1e00000000000f0f0f0f0000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929292929292929376d7e0069680000000000696800005e0000696800000000770000000000007c6d271e000000000000000f0f0f0f0000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929292929292929376e0000796800000000007968005c6e000079680000000067000000000000007c271e000000000000000f0f0f0f00001e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929292929292929377e0000696800005c00006968006c6d5e0069680000000077000000000000000027001e1e1e000000001e1e1e1e00001e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929292929292929370000007968005c6e000079685c6d6d6e0079680000000067000000000000000027000000001e1e1e1e000000001e1e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000830000000000000000000000000000000000000000000000000000000000000000000000000000000048000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000091929394000000000000000047000000000000000000000000000000000000000000000000000000000000580000001e0000001e00000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000a1a2a3a4000000000000000057000000000000000000000000000000000000000000000000000000000000560100001e1e00000000001e1e001e1e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +4400b0b1b2b3b42c0000000000000056000000000000000000000000000000000000000000000000000000000000662400001e001e001e001e0000001e001e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2122222222222225265e000000000066000000000000000000000000000000000000000000000000000000000000762700001e1e00001e001e0000001e1e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +20382838282a3a3b376d5d5e00442c7800440000000044000000000000004400000000000000000000000000445c242a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +38292929292929292a25252222222222221f618b8c8d8e8f63616263454688898a624574747475747446242422223a290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929293a2a28282828393000719b9c00000073717273000000999a720000000067000000343b393929290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929292929292929293833006465000000000064650000000000646500000000770000000034352929290001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +292929292929292929292929292928306e0069680000000000796800000000006968000000006700000000006c342a292526000000000000000000000021222200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +29292929292929292929292929293b366e0069680000000000696800000000006968000000007700000000007c6d273a3b2a260000000000000000000020283900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929292929292929376d6e007968000000000079680000000000796800000000670000000000006c343a293a370000000000000000002138292900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929292929292929376d7e0069680000000000696800005e0000696800000000770000000000007c6d2729293b2300000000000000002039292900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929292929292929376e0000796800000000007968005c6e000079680000000067000000000000007c272929293822230000000000242a29292900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929292929292929377e0000696800005c00006968006c6d5e006968000000007700000000000000002729292929283822222525253a2929292900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292929292929292929292929370000007968005c6e000079685c6d6d6e00796800000000670000000000000000272929292929392828383b2a292929292900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 __sfx__ 010100000f0001e000120002200017000260001b0002c000210003100027000360002b0003a000300003e00035000000000000000000000000000000000000000000000000000000000000000000000000000000 010100000970009700097000970008700077000670005700357003470034700347003470034700347003570035700357003570035700347003470034700337003370033700337000070000700007000070000700 From 9c594c3ec83b4be0387b3d91142175943cc510f1 Mon Sep 17 00:00:00 2001 From: Vawlpe Date: Sun, 14 Jan 2024 02:17:36 +0200 Subject: [PATCH 8/9] Prepare map for classic levels... TODO: - Port classic gfx - Port classic chest, big_chest, orb, flag - Port classic levels --- interludes.p8 | 174 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 137 insertions(+), 37 deletions(-) diff --git a/interludes.p8 b/interludes.p8 index 55e44f6..381879a 100644 --- a/interludes.p8 +++ b/interludes.p8 @@ -1197,25 +1197,89 @@ end --@conf --[[ -param_names={} composite_shapes={} autotiles={{45, 31, 46, 33, 33, 35, 34, 49, 49, 51, 50, 32, 32, 48, 41, [0] = 46}, {36, 38, 37, 36, 36, 38, 37, 52, 52, 54, 53, 39, 39, 55, 41, [0] = 30}} +param_names={} ]] --@begin --level table --"x,y,w,h,exit_dirs" --exit directions "0b"+"exit_left"+"exit_bottom"+"exit_right"+"exit_top" (default top- 0b0001) levels={ - "0,0,8,1,0b0000", - "0,1,3,1,0b0010", - "3,1,1,1,0b1000", - "4,1,1,1,0b0000", + "0,-3,8,1,0b0000", + "0,-2,3,1,0b0010", + "3,-2,1,1,0b1000", + "0,-1,1,1,0b0000", + "0,0,1,1,0b0001", + "1,0,1,1,0b0001", + "2,0,1,1,0b0001", + "3,0,1,1,0b0001", + "4,0,1,1,0b0001", + "5,0,1,1,0b0001", + "6,0,1,1,0b0001", + "7,0,1,1,0b0001", + "0,1,1,1,0b0001", + "1,1,1,1,0b0001", + "2,1,1,1,0b0001", + "3,1,1,1,0b0001", + "4,1,1,1,0b0001", + "5,1,1,1,0b0001", + "6,1,1,1,0b0001", + "7,1,1,1,0b0001", + "0,4,1,1,0b0001", + "1,4,1,1,0b0001", + "2,4,1,1,0b0001", + "3,4,1,1,0b0001", + "4,4,1,1,0b0001", + "5,4,1,1,0b0001", + "6,4,1,1,0b0001", + "7,4,1,1,0b0001", + "0,5,1,1,0b0001", + "1,5,1,1,0b0001", + "2,5,1,1,0b0001", + "3,5,1,1,0b0001", + "4,5,1,1,0b0001", + "5,5,1,1,0b0001", + "6,5,1,1,0b0001", + "7,5,1,1,0b0001" } ---- --camera trigger hitboxes --"x,y,w,h,off_x,off_y" camera_offsets={ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, {}, {}, {}, @@ -1226,6 +1290,42 @@ camera_offsets={ --mapdata string table --assigned levels will load from here instead of the map mapdata={ + "ยนยนยนยนยนยนยนยนยนยนยนยนยน(+******+8ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนโ–‘ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนIยนยนยนยนยนยนยนยนยนยนยนยนยนยน(<6+*****7ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน\"#$ยนยนยนยนยนยนยนยนยนยนยนยนยนยนโ˜…โง—โฌ†๏ธห‡ยนยนยนยนยนยนยนยนHยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนYยนยนยนยนยนยนยนยนยนยนยนยนยนยน57n!)**;8ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน!)8ยนยนยนยนยนยนยนยนHยนยนยนยนยนใ‘ใ“ใ•ใ—ยนยนยนยนยนยนยนยนXยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนWยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน}n2:9*)8ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน!<7ยนยนยนยนยนยนยนยนXยนยนEยนใญใฎใฏใฒโˆง-ยนยนยนยนยนยนยนWยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนg%ยนยนยนยนยนยนยนยนยนยน`,ยนยนยน}~23334ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนโ–ถ\"$ยนยนHยนยนยนยนยน!8ยนยนยนยนยนยนยนยนยนWยนยน\"######&'_ยนยนยนยนยนgยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนw(ยนยนยนยนยนยนยนยนยน%&'_ยนยนยนยนCDDDDยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน!1โ–‘ยนXยนยนยนยนยน!8ยนยนยนยนยนยนยนยนยนgยน]!9)9)+;<8n^_ยนE-yยนEยนยนยนยนEยนยนยนยนยนยนยนEยนยนยนยนยนยนยนยนยนยนยนยนยนE]%+ยนยนยนยนยนยนยนยน]567oยนยนยนยนDยนยนยนยนยนยนยนยนยนยนยนIยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนEยนยนยนยนยนยนยนยนยนยน!)$ยนhยนยนยนยนยน!8ยนยนยนยนยนยน-ยน,w]\"9*******+&&###### bcdaaadbcdยนยนadbcยนยนยนยนยนยนยนยน%%##;*ยนยนยนยนHยน]^n~โ—‹ยนm^_ยนยนDยนยนยนยนยนยนยนยนยนยนยนYยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน\"#$ยนยนยนยนยนยนโ—€โ–ถ!91ยนxยนยนยนยนยน24ยนยนยนยนยนยน%&&##)*********;+)))):1ยนrstยนยนยนtrstยนยนยนtrsยนยนยนยนยนยนยนยน5<::**ยนยนยนยนXยนmnโ—‹ยนยนยน}noยนยนยนยนยนยนยนยนยนยนยนยนยนยนWยนยนยนยนยนIยนยนยนยนยนยนยนยนยน!:1ยนยนยนยนยนยนยนยน2:1โ–‘yยนยนยนยนยนยนยนยนยนยนยนยนยน(<+)9****************94ยนefยนยนยนยนยนefยนยนยนยนยนefยนยนยนยนยนยนยนยนยน56***ยนยนยนยนh]nโ—‹ยนยนยนยนยนmn_ยนยนยนยนยนยนยนยนยนยนยนยนยนgยนยนยนยนยนYยนยนยนยนยนยนยนโ—€โ–ถ!)4ยนยนยนยนEยนยนยนยน!)##$ยนยนยนยนยนยนยนยนยนยนโ—€โ–ถ(;******************)1oยนjiยนยนยนยนยนziยนยนยนยนยนjiยนยนยนยนยนยนยนยนยนยนm5+*JKLยนxmoEยนยนยนยน,mnโ—‹ยนยนยนยนยนยนยนยนยนยนยนยน,wยนยนยนยนยนWยนยนยนยนยนยนยนยนยน!1ยนยนยน\"##$ยน]^!99:1ยนยนยนยนยนยน\"# ^_,(+******************<7oยนjiยนยนยนยนยนjiยนยนยนยนยนjiยนยนยนยนยนยนยนยนยนยน}n(;Z[\\ยฒy%#$ยนยนยนยน%'โ—‹ยนยนยน,-ยน,ยนยนยนยนยนยน%'ยนยนยนยนยนgยนยนยนยนยนยนยน,ยน!1_ยนยน29:1ยนmn!9*)1_ยนยนยนยนE!1nnn%+*******************8noยนziยนยนยนยนยนziยนยนยนยนยนziยนยนยนยนยนยนยนยนยนยนยนm5;&&&&##)4ยนยนยนยน(8,ยนยนใ‚œ&&&'ยนยนยนยน-ยน(8_ยน,-,wยนEยนยนยนยนใ‚œ[n^_ยน!)4ยนmn!:*91n^_ยน\"#:8nnn5++******************8nโ—‹ยนjiยนยนยนยนยนjiยนยน_ยนยนjiยนยนยนยนยนยนยนยนยนยนยน}n(+;<+):1ยนยนยน-ยน(;'ยนยนยน(<+7_ยนยนโ–ถ%#;8oยนใ‚œ&&### ยนยน]n(9)4nnn^(1ยนยน}n5+**1nn.#:998}nn5+;******************8oยนยนziยนยนยนยนยนziยน]oยนยนziยนยนยนยนยนยนยนยนยนยนยนยน}(*****91ยนยนยน%&+<8ยนยน](+8nn_ยนยน5+;7n^n(+;)1ยนยน]nn(;8nn~n~(8ยนยนยน}~(;91~nn!)*+7ยน}nn(+******************8โ—‹ยนยนjiยนยน]ยนยนjiยนmn_ยนjiยนยนยนยนยนยนยนยนยนยนยนยนยน(*****)1ยนยนยน(;*+8ยน]n(;8nnoยนยนยน(8nnnn(;*91ยนยนmnn(+8noยน}โ—‹(8ยนยนยนยนยน(+)1ยนmn(+<8ยนยนยนmn(<******************8ยนยนยนziยน]oยนยนzi]nnoยนziยนยนยนยนยนยนยนยนยนยนยนยนยน(", + "ยนยนยนยนยนโ–‘ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนIยนยนยนยนโ˜…โง—โฌ†๏ธห‡ยนยนยนยนยนยนยนยนHยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนYยนยนยนยนใ‘ใ“ใ•ใ—ยนยนยนยนยนยนยนยนXยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนWยฒEยนใญใฎใฏใฒใต-ยนยนยนยนยนยนยนWยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนg%\"######&'_ยนยนยนยนยนgยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนw(!9)9)+;<8n^_ยนE-yยนEยนยนยนยนEยนยนยนยนยนยนยนEยนยนยนยนยนยนยนยนยนยนยนยนยนE]%+9*******+&&###### b๐Ÿ˜โ™ช๐Ÿ…พ๏ธโ—†โ€ฆdbcdFG์›ƒโŒ‚โฌ…๏ธcFuuuvuuG%%##;**********;+)))):1ยนrใ†ใˆยนยนยนtrstยนยนยนใ‚ใ„sยนยนยนยนhยนยนยน5<::*****************94ยนefยนยนยนยนยนefยนยนยนยนยนefยนยนยนยนxยนยนยนยน56*****************)1oยนjiยนยนยนยนยนziยนยนยนยนยนjiยนยนยนยนhยนยนยนยนยนm5+***************<7oยนjiยนยนยนยนยนjiยนยนยนยนยนjiยนยนยนยนxยนยนยนยนยน}n(;**************8noยนziยนยนยนยนยนziยนยนยนยนยนziยนยนยนยนhยนยนยนยนยนยนm5;**************8nโ—‹ยนjiยนยนยนยนยนjiยนยน_ยนยนjiยนยนยนยนxยนยนยนยนยนยน}n(**************8oยนยนziยนยนยนยนยนziยน]oยนยนziยนยนยนยนhยนยนยนยนยนยนยน}(**************8โ—‹ยนยนjiยนยน]ยนยนjiยนmn_ยนjiยนยนยนยนxยนยนยนยนยนยนยนยน(**************8ยนยนยนziยน]oยนยนzi]nnoยนziยนยนยนยนhยนยนยนยนยนยนยนยน(", + "ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนใ‚œยนยนยนใ‚œยนยนยนยนยนใ‚œยนยนยนยนยนใ‚œใ‚œยนยนยนยนยนใ‚œใ‚œยนใ‚œใ‚œยนยนยนยนใ‚œยนใ‚œยนใ‚œยนใ‚œยนยนยนใ‚œยนใ‚œยนยนยนใ‚œใ‚œยนยนใ‚œยนใ‚œยนยนยนใ‚œใ‚œยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยฒยนยนยนยนยนยนยนยนยนยนยนยนยนยน&'ยนยนยนยนยนยนยนยนยนยนยน\"##<+'ยนยนยนยนยนยนยนยนยนยน!):*;8ยนยนยนยนยนยนยนยนยน\"9****<$ยนยนยนยนยนยนยนยน!:*****9#$ยนยนยนยนยน%+*******)9##&&&;*********:))9<+*****", + "ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน", + nil, + nil, + nil, + nil, + nil, + nil, + nil, + nil, + nil, + nil, + nil, + nil, + nil, + nil, + nil, + nil, + "ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน", + "ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน", + "ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน", + "ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน", + "ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน", + "ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน", + "ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน", + "ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน", + "ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน", + "ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน", + "ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน", + "ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน", + "ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน", + "ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน", + "ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน", + "ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน" } --@end @@ -1536,38 +1636,38 @@ __gff__ 0000000000000000000000000000000002020202080808000000000000030303030303030303030303030304040303000303030303030303030303030400000000000000040403040404040404040404000000000303040404040404040404040303030304040404040403030404040400030303030304040404000004040404 0404040404040404030303030303030304040404040404040403030303040000040404040404040400000000000000000404040404040404000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 __map__ -00000000000000000000000000272a2929292929292a37000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083000000000000000000000000000000000000000000000000000000000000000000000000000000004800 -00000000000000000000000000273b352a292929292936000000000000000000000000000000000000000000000000000000000000000000000000000000000000002122230000000000000000000000000000919293940000000000000000470000000000000000000000000000000000000000000000000000000000005800 -0000000000000000000000000034366d202829293a3700000000000000000000000000000000000000000000000000000000000000000000000000000000000000002028370000000000000000470000000000a1a2a3a40000000000000000570000000000000000000000000000000000000000000000000000000000005600 -00000000000000000000000000007c6d3139382928370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000203b3600000000000000005700004400b0b1b2b3952c00000000000000560000000000000000000000000000000000000000000000000000000000006624 -000000000000000000005f2b0000007c7d3132323233000000000000000000000000000000000000000000000000000000000000000000162123000047000000000020370000000000000000005600002122222222222225265e0000000000660000000000000000000000000000000000000000000000000000000000007627 -0000000000000000002425265e0000000042434343430000000000000000000000000000000000000000000000000000000000000000000020308300570000000000203700000000000000000066005c20382838282a3a3b376d5d5e00442c7800440000000044000000000000004400000000000000000000000000445c242a -00000000000000005c3435366e000000004300000000000000000000004800000000000000000000000000000044000000000000000000002028230067000000000020370000000000002c002b765c2138292929292929292a25252222222222221f616263606060636162630000606361620000000000000000242422223a29 -0000000047005c5d6d7d7e006c5d5e00004300000000000000000000005800000000000000000000000000000021222300000000000015162038300077000000000031330000000000002425252222282929292929292929293a2a28282828393000717273000000737172730000007371720000000000000000343b39392929 -0000000057006c6d7e0000007c6d6e0000000000000000000000000000560000000000480000000000000000002039300000000000000000313930837800000000000000000000000000273b2a283829292929292929292929292929292929383300646500000000006465000000000064650000000000000000003435292929 -00000000675c6d7e00000000006c6d5e00000000000000000000000000660000000000580000000000000015162028330000000044000000002028222223000000000000000000001516273a29292929292929292929292929292929292928306e0069680000000000796800000000006968000000000000000000006c342a29 -494a4b00776c6e44000000002b6c6d7e0000000000000000000000002b76000000000056000000000000000000203000000021222223005c5d203838393000000000000021221f5d5e2b272a2929292929292929292929292929292929293b366e0069680000000000696800000000006968000000000000000000007c6d273a -595a5b01782422230000000024267e0000002b2c002b0000000000002426000000000066000000000000002b0020305e000031383930006c6d20382928305e000000004420306d6d6d242a29292929292929292929292929292929292929376d6e007968000000000079680000000000796800000000000000000000006c343a -25252525222228330000000027372b00001e25252526000000002c0027375e002b2c2b760044000000001e252238306d5d5e00202833006c6d20392938306d5d5e00212239376d6d6d342a2a292929292929292929292929292929292929376d7e0069680000000000696800005e0000696800000000000000000000007c6d27 -2a3a3b2a2839300000002c00273a26000000273b2a365e00001624223a376e001e25252222221f00005c6d273828336d6d6d5d273000007c6d342a2929306d6d2d22393838377c6d6d342a3a292929292929292929292929292929292929376e0000796800000000007968005c6e000079680000000000000000000000007c27 -2929292929383000000024252a3b3700005c272a376d6d5e0000342a3a366d5d6d272a3a283000005c6d6d273a376d6d7d6d7d27370000007c7d273a38307d6d6d2028292a36007c6d6d272a292929292929292929292929292929292929377e0000696800005c00006968006c6d5e0069680000000000000000000000000027 -29292929292830000000273a292a37005c6d273a376d6d6e00000027376d6d6d6d273a29383000006c6d6d272a376d6e007c7e27370000000000272a2830006c6d272a3b370000006c6d273b292929292929292929292929292929292929370000007968005c6e000079685c6d6d6e0079680000000000000000000000000027 -0000000000830000000000000000000000000000000000000000000000000000000000000000000000000000000048000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000091929394000000000000000047000000000000000000000000000000000000000000000000000000000000580000001e0000001e00000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000a1a2a3a4000000000000000057000000000000000000000000000000000000000000000000000000000000560100001e1e00000000001e1e001e1e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -4400b0b1b2b3b42c0000000000000056000000000000000000000000000000000000000000000000000000000000662400001e001e001e001e0000001e001e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2122222222222225265e000000000066000000000000000000000000000000000000000000000000000000000000762700001e1e00001e001e0000001e1e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -20382838282a3a3b376d5d5e00442c7800440000000044000000000000004400000000000000000000000000445c242a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -38292929292929292a25252222222222221f618b8c8d8e8f63616263454688898a624574747475747446242422223a290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929293a2a28282828393000719b9c00000073717273000000999a720000000067000000343b393929290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929292929292929293833006465000000000064650000000000646500000000770000000034352929290001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -292929292929292929292929292928306e0069680000000000796800000000006968000000006700000000006c342a292526000000000000000000000021222200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -29292929292929292929292929293b366e0069680000000000696800000000006968000000007700000000007c6d273a3b2a260000000000000000000020283900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929292929292929376d6e007968000000000079680000000000796800000000670000000000006c343a293a370000000000000000002138292900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929292929292929376d7e0069680000000000696800005e0000696800000000770000000000007c6d2729293b2300000000000000002039292900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929292929292929376e0000796800000000007968005c6e000079680000000067000000000000007c272929293822230000000000242a29292900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929292929292929377e0000696800005c00006968006c6d5e006968000000007700000000000000002729292929283822222525253a2929292900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292929292929292929292929370000007968005c6e000079685c6d6d6e00796800000000670000000000000000272929292929392828383b2a292929292900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929293828383932323232323300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929393232323300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2928301e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +39323300000000000000000000002b2100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +231e000000000000000000002c1e1e2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +3000000000000000000000002d2e223900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +39222e1f00000000000000000000312800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2833000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +3000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +3300000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000001e00000000002d223800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000021230000000000202800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0001002123000020300000101010203800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2222222830000020301010212222382900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +3938283830101020392222283828292900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2929292939222239383838292929292900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 __sfx__ 010100000f0001e000120002200017000260001b0002c000210003100027000360002b0003a000300003e00035000000000000000000000000000000000000000000000000000000000000000000000000000000 010100000970009700097000970008700077000670005700357003470034700347003470034700347003570035700357003570035700347003470034700337003370033700337000070000700007000070000700 From 86424930fcd42f28b9199d1734f8912157ea5891 Mon Sep 17 00:00:00 2001 From: Vawlpe Date: Sun, 14 Jan 2024 20:35:26 +0200 Subject: [PATCH 9/9] Port classic gfx to interludes cart, need to port mechanics and levels --- interludes.p8 | 218 +++++++++++++++++++++++++------------------------- 1 file changed, 110 insertions(+), 108 deletions(-) diff --git a/interludes.p8 b/interludes.p8 index 381879a..29921a2 100644 --- a/interludes.p8 +++ b/interludes.p8 @@ -271,7 +271,7 @@ player={ draw=function(_ENV) -- draw player hair and sprite - pal(8,(djump==1 and 8) or (djump==2 and 14) or 12) + pal(8,((djump==1 or lvl_id==1) and 8) or (djump==2 and 14) or 12) draw_hair(_ENV) draw_obj_sprite(_ENV) pal() @@ -937,7 +937,7 @@ function load_level(id) ---- -- dash inventory changes - max_djump = (id == 1 and 0) or 2 + max_djump = (id == 1 and 0) or (id <=4 and 2) or 1 end -- [main update loop] @@ -1037,18 +1037,20 @@ function _draw() palt() -- draw outlines - pal(split"1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1") - pal=time - foreach(objects,function(_ENV) - if outline then - for i=1,4 do - camera(draw_x+split"-1,0,0,1"[i],draw_y+split"0,-1,1,0"[i]) draw_object(_ENV) + if lvl_id<=4 then + pal(split"1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1") + pal=time + foreach(objects,function(_ENV) + if outline then + for i=1,4 do + camera(draw_x+split"-1,0,0,1"[i],draw_y+split"0,-1,1,0"[i]) draw_object(_ENV) + end end - end - end) - pal=_pal - camera(draw_x,draw_y) - pal() + end) + pal=_pal + camera(draw_x,draw_y) + pal() + end --set draw layering --0: background layer @@ -1197,9 +1199,9 @@ end --@conf --[[ -composite_shapes={} -autotiles={{45, 31, 46, 33, 33, 35, 34, 49, 49, 51, 50, 32, 32, 48, 41, [0] = 46}, {36, 38, 37, 36, 36, 38, 37, 52, 52, 54, 53, 39, 39, 55, 41, [0] = 30}} param_names={} +composite_shapes={} +autotiles={{45, 31, 46, 33, 33, 35, 34, 49, 49, 51, 50, 32, 32, 48, 41, [0] = 46}, {36, 38, 37, 36, 36, 38, 37, 52, 52, 54, 53, 39, 39, 55, 41, [0] = 30}, {140, 142, 141, 143, 156, 159, 157, 175, 189, 191, 190, 159, 173, 175, 174, [0] = 191, [42] = 211}, {197, 199, 198, 216, 213, 215, 214, 248, 245, 247, 246, 232, 229, 231, 230, [0] = 200}} ]] --@begin --level table @@ -1290,9 +1292,9 @@ camera_offsets={ --mapdata string table --assigned levels will load from here instead of the map mapdata={ - "ยนยนยนยนยนยนยนยนยนยนยนยนยน(+******+8ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนโ–‘ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนIยนยนยนยนยนยนยนยนยนยนยนยนยนยน(<6+*****7ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน\"#$ยนยนยนยนยนยนยนยนยนยนยนยนยนยนโ˜…โง—โฌ†๏ธห‡ยนยนยนยนยนยนยนยนHยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนYยนยนยนยนยนยนยนยนยนยนยนยนยนยน57n!)**;8ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน!)8ยนยนยนยนยนยนยนยนHยนยนยนยนยนใ‘ใ“ใ•ใ—ยนยนยนยนยนยนยนยนXยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนWยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน}n2:9*)8ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน!<7ยนยนยนยนยนยนยนยนXยนยนEยนใญใฎใฏใฒโˆง-ยนยนยนยนยนยนยนWยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนg%ยนยนยนยนยนยนยนยนยนยน`,ยนยนยน}~23334ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนโ–ถ\"$ยนยนHยนยนยนยนยน!8ยนยนยนยนยนยนยนยนยนWยนยน\"######&'_ยนยนยนยนยนgยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนw(ยนยนยนยนยนยนยนยนยน%&'_ยนยนยนยนCDDDDยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน!1โ–‘ยนXยนยนยนยนยน!8ยนยนยนยนยนยนยนยนยนgยน]!9)9)+;<8n^_ยนE-yยนEยนยนยนยนEยนยนยนยนยนยนยนEยนยนยนยนยนยนยนยนยนยนยนยนยนE]%+ยนยนยนยนยนยนยนยน]567oยนยนยนยนDยนยนยนยนยนยนยนยนยนยนยนIยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนEยนยนยนยนยนยนยนยนยนยน!)$ยนhยนยนยนยนยน!8ยนยนยนยนยนยน-ยน,w]\"9*******+&&###### bcdaaadbcdยนยนadbcยนยนยนยนยนยนยนยน%%##;*ยนยนยนยนHยน]^n~โ—‹ยนm^_ยนยนDยนยนยนยนยนยนยนยนยนยนยนYยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน\"#$ยนยนยนยนยนยนโ—€โ–ถ!91ยนxยนยนยนยนยน24ยนยนยนยนยนยน%&&##)*********;+)))):1ยนrstยนยนยนtrstยนยนยนtrsยนยนยนยนยนยนยนยน5<::**ยนยนยนยนXยนmnโ—‹ยนยนยน}noยนยนยนยนยนยนยนยนยนยนยนยนยนยนWยนยนยนยนยนIยนยนยนยนยนยนยนยนยน!:1ยนยนยนยนยนยนยนยน2:1โ–‘yยนยนยนยนยนยนยนยนยนยนยนยนยน(<+)9****************94ยนefยนยนยนยนยนefยนยนยนยนยนefยนยนยนยนยนยนยนยนยน56***ยนยนยนยนh]nโ—‹ยนยนยนยนยนmn_ยนยนยนยนยนยนยนยนยนยนยนยนยนgยนยนยนยนยนYยนยนยนยนยนยนยนโ—€โ–ถ!)4ยนยนยนยนEยนยนยนยน!)##$ยนยนยนยนยนยนยนยนยนยนโ—€โ–ถ(;******************)1oยนjiยนยนยนยนยนziยนยนยนยนยนjiยนยนยนยนยนยนยนยนยนยนm5+*JKLยนxmoEยนยนยนยน,mnโ—‹ยนยนยนยนยนยนยนยนยนยนยนยน,wยนยนยนยนยนWยนยนยนยนยนยนยนยนยน!1ยนยนยน\"##$ยน]^!99:1ยนยนยนยนยนยน\"# ^_,(+******************<7oยนjiยนยนยนยนยนjiยนยนยนยนยนjiยนยนยนยนยนยนยนยนยนยน}n(;Z[\\ยฒy%#$ยนยนยนยน%'โ—‹ยนยนยน,-ยน,ยนยนยนยนยนยน%'ยนยนยนยนยนgยนยนยนยนยนยนยน,ยน!1_ยนยน29:1ยนmn!9*)1_ยนยนยนยนE!1nnn%+*******************8noยนziยนยนยนยนยนziยนยนยนยนยนziยนยนยนยนยนยนยนยนยนยนยนm5;&&&&##)4ยนยนยนยน(8,ยนยนใ‚œ&&&'ยนยนยนยน-ยน(8_ยน,-,wยนEยนยนยนยนใ‚œ[n^_ยน!)4ยนmn!:*91n^_ยน\"#:8nnn5++******************8nโ—‹ยนjiยนยนยนยนยนjiยนยน_ยนยนjiยนยนยนยนยนยนยนยนยนยนยน}n(+;<+):1ยนยนยน-ยน(;'ยนยนยน(<+7_ยนยนโ–ถ%#;8oยนใ‚œ&&### ยนยน]n(9)4nnn^(1ยนยน}n5+**1nn.#:998}nn5+;******************8oยนยนziยนยนยนยนยนziยน]oยนยนziยนยนยนยนยนยนยนยนยนยนยนยน}(*****91ยนยนยน%&+<8ยนยน](+8nn_ยนยน5+;7n^n(+;)1ยนยน]nn(;8nn~n~(8ยนยนยน}~(;91~nn!)*+7ยน}nn(+******************8โ—‹ยนยนjiยนยน]ยนยนjiยนmn_ยนjiยนยนยนยนยนยนยนยนยนยนยนยนยน(*****)1ยนยนยน(;*+8ยน]n(;8nnoยนยนยน(8nnnn(;*91ยนยนmnn(+8noยน}โ—‹(8ยนยนยนยนยน(+)1ยนmn(+<8ยนยนยนmn(<******************8ยนยนยนziยน]oยนยนzi]nnoยนziยนยนยนยนยนยนยนยนยนยนยนยนยน(", - "ยนยนยนยนยนโ–‘ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนIยนยนยนยนโ˜…โง—โฌ†๏ธห‡ยนยนยนยนยนยนยนยนHยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนYยนยนยนยนใ‘ใ“ใ•ใ—ยนยนยนยนยนยนยนยนXยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนWยฒEยนใญใฎใฏใฒใต-ยนยนยนยนยนยนยนWยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนg%\"######&'_ยนยนยนยนยนgยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนw(!9)9)+;<8n^_ยนE-yยนEยนยนยนยนEยนยนยนยนยนยนยนEยนยนยนยนยนยนยนยนยนยนยนยนยนE]%+9*******+&&###### b๐Ÿ˜โ™ช๐Ÿ…พ๏ธโ—†โ€ฆdbcdFG์›ƒโŒ‚โฌ…๏ธcFuuuvuuG%%##;**********;+)))):1ยนrใ†ใˆยนยนยนtrstยนยนยนใ‚ใ„sยนยนยนยนhยนยนยน5<::*****************94ยนefยนยนยนยนยนefยนยนยนยนยนefยนยนยนยนxยนยนยนยน56*****************)1oยนjiยนยนยนยนยนziยนยนยนยนยนjiยนยนยนยนhยนยนยนยนยนm5+***************<7oยนjiยนยนยนยนยนjiยนยนยนยนยนjiยนยนยนยนxยนยนยนยนยน}n(;**************8noยนziยนยนยนยนยนziยนยนยนยนยนziยนยนยนยนhยนยนยนยนยนยนm5;**************8nโ—‹ยนjiยนยนยนยนยนjiยนยน_ยนยนjiยนยนยนยนxยนยนยนยนยนยน}n(**************8oยนยนziยนยนยนยนยนziยน]oยนยนziยนยนยนยนhยนยนยนยนยนยนยน}(**************8โ—‹ยนยนjiยนยน]ยนยนjiยนmn_ยนjiยนยนยนยนxยนยนยนยนยนยนยนยน(**************8ยนยนยนziยน]oยนยนzi]nnoยนziยนยนยนยนhยนยนยนยนยนยนยนยน(", - "ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนใ‚œยนยนยนใ‚œยนยนยนยนยนใ‚œยนยนยนยนยนใ‚œใ‚œยนยนยนยนยนใ‚œใ‚œยนใ‚œใ‚œยนยนยนยนใ‚œยนใ‚œยนใ‚œยนใ‚œยนยนยนใ‚œยนใ‚œยนยนยนใ‚œใ‚œยนยนใ‚œยนใ‚œยนยนยนใ‚œใ‚œยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยฒยนยนยนยนยนยนยนยนยนยนยนยนยนยน&'ยนยนยนยนยนยนยนยนยนยนยน\"##<+'ยนยนยนยนยนยนยนยนยนยน!):*;8ยนยนยนยนยนยนยนยนยน\"9****<$ยนยนยนยนยนยนยนยน!:*****9#$ยนยนยนยนยน%+*******)9##&&&;*********:))9<+*****", + "ยนยนยนยนยนยนยนยนยนยนยนยนยน(+******+8ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนโ–‘ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนIยนยนยนยนยนยนยนยนยนยนยนยนยนยน(<6+*****7ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน\"#$ยนยนยนยนยนยนยนยนยนยนยนยนยนยนโ˜…โง—โฌ†๏ธห‡ยนยนยนยนยนยนยนยนHยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนYยนยนยนยนยนยนยนยนยนยนยนยนยนยน57n!)**;8ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน!)8ยนยนยนยนยนยนยนยนHยนยนยนยนยนใ‘ใ“ใ•ใ—ยนยนยนยนยนยนยนยนXยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนWยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน}n2:9*)8ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน!<7ยนยนยนยนยนยนยนยนXยนยนEยนใญใฎใฏใฒโžก๏ธ-ยนยนยนยนยนยนยนWยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนg%ยนยนยนยนยนยนยนยนยนยน`,ยนยนยน}~23334ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนโ–ถ\"$ยนยนHยนยนยนยนยน!8ยนยนยนยนยนยนยนยนยนWยนยน\"######&'_ยนยนยนยนยนgยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนw(ยนยนยนยนยนยนยนยนยน%&'_ยนยนยนยนCDDDDยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน!1โ–‘ยนXยนยนยนยนยน!8ยนยนยนยนยนยนยนยนยนgยน]!9)9)+;<8n^_ยนE-yยนEยนยนยนยนEยนยนยนยนยนยนยนEยนยนยนยนยนยนยนยนยนยนยนยนยนE]%+ยนยนยนยนยนยนยนยน]567oยนยนยนยนDยนยนยนยนยนยนยนยนยนยนยนIยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนEยนยนยนยนยนยนยนยนยนยน!)$ยนhยนยนยนยนยน!8ยนยนยนยนยนยน-ยน,w]\"9*******+&&###### bcdaaadbcdยนยนadbcยนยนยนยนยนยนยนยน%%##;*ยนยนยนยนHยน]^n~โ—‹ยนm^_ยนยนDยนยนยนยนยนยนยนยนยนยนยนYยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน\"#$ยนยนยนยนยนยนโ—€โ–ถ!91ยนxยนยนยนยนยน24ยนยนยนยนยนยน%&&##)*********;+)))):1ยนrstยนยนยนtrstยนยนยนtrsยนยนยนยนยนยนยนยน5<::**ยนยนยนยนXยนmnโ—‹ยนยนยน}noยนยนยนยนยนยนยนยนยนยนยนยนยนยนWยนยนยนยนยนIยนยนยนยนยนยนยนยนยน!:1ยนยนยนยนยนยนยนยน2:1โ–‘yยนยนยนยนยนยนยนยนยนยนยนยนยน(<+)9****************94ยนefยนยนยนยนยนefยนยนยนยนยนefยนยนยนยนยนยนยนยนยน56***ยนยนยนยนh]nโ—‹ยนยนยนยนยนmn_ยนยนยนยนยนยนยนยนยนยนยนยนยนgยนยนยนยนยนYยนยนยนยนยนยนยนโ—€โ–ถ!)4ยนยนยนยนEยนยนยนยน!)##$ยนยนยนยนยนยนยนยนยนยนโ—€โ–ถ(;******************)1oยนjiยนยนยนยนยนziยนยนยนยนยนjiยนยนยนยนยนยนยนยนยนยนm5+*JKLยนxmoEยนยนยนยน,mnโ—‹ยนยนยนยนยนยนยนยนยนยนยนยน,wยนยนยนยนยนWยนยนยนยนยนยนยนยนยน!1ยนยนยน\"##$ยน]^!99:1ยนยนยนยนยนยน\"# ^_,(+******************<7oยนjiยนยนยนยนยนjiยนยนยนยนยนjiยนยนยนยนยนยนยนยนยนยน}n(;Z[\\ยฒy%#$ยนยนยนยน%'โ—‹ยนยนยน,-ยน,ยนยนยนยนยนยน%'ยนยนยนยนยนgยนยนยนยนยนยนยน,ยน!1_ยนยน29:1ยนmn!9*)1_ยนยนยนยนE!1nnn%+*******************8noยนziยนยนยนยนยนziยนยนยนยนยนziยนยนยนยนยนยนยนยนยนยนยนm5;&&&&##)4ยนยนยนยน(8,ยนยนใ‚œ&&&'ยนยนยนยน-ยน(8_ยน,-,wยนEยนยนยนยนใ‚œ[n^_ยน!)4ยนmn!:*91n^_ยน\"#:8nnn5++******************8nโ—‹ยนjiยนยนยนยนยนjiยนยน_ยนยนjiยนยนยนยนยนยนยนยนยนยนยน}n(+;<+):1ยนยนยน-ยน(;'ยนยนยน(<+7_ยนยนโ–ถ%#;8oยนใ‚œ&&### ยนยน]n(9)4nnn^(1ยนยน}n5+**1nn.#:998}nn5+;******************8oยนยนziยนยนยนยนยนziยน]oยนยนziยนยนยนยนยนยนยนยนยนยนยนยน}(*****91ยนยนยน%&+<8ยนยน](+8nn_ยนยน5+;7n^n(+;)1ยนยน]nn(;8nn~n~(8ยนยนยน}~(;91~nn!)*+7ยน}nn(+******************8โ—‹ยนยนjiยนยน]ยนยนjiยนmn_ยนjiยนยนยนยนยนยนยนยนยนยนยนยนยน(*****)1ยนยนยน(;*+8ยน]n(;8nnoยนยนยน(8nnnn(;*91ยนยนmnn(+8noยน}โ—‹(8ยนยนยนยนยน(+)1ยนmn(+<8ยนยนยนmn(<******************8ยนยนยนziยน]oยนยนzi]nnoยนziยนยนยนยนยนยนยนยนยนยนยนยนยน(", + "ยนยนยนยนยนโ–‘ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนIยนยนยนยนโ˜…โง—โฌ†๏ธห‡ยนยนยนยนยนยนยนยนHยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนYยนยนยนยนใ‘ใ“ใ•ใ—ยนยนยนยนยนยนยนยนXยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนWยนEยนใญใฎใฏใฒใต-ยนยนยนยนยนยนยนWยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนg%\"######&'_ยนยนยนยนยนgยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนw(!9)9)+;<8n^_ยนE-yยนEยนยนยนยนEยนยนยนยนยนยนยนEยนยนยนยนยนยนยนยนยนยนยนยนยฒE]%+9*******+&&###### bโ˜‰์›ƒโŒ‚โฌ…๏ธ๐Ÿ˜dbcdFGโœฝโ—โ™ฅcFuuuvuuG%%##;**********;+)))):1ยนrโ–คโ–ฅยนยนยนtrstยนยนยนโˆงโŽsยนยนยนยนhยนยนยน5<::*****************94ยนefยนยนยนยนยนefยนยนยนยนยนefยนยนยนยนxยนยนยนยน56*****************)1oยนjiยนยนยนยนยนziยนยนยนยนยนjiยนยนยนยนhยนยนยนยนยนm5+***************<7oยนjiยนยนยนยนยนjiยนยนยนยนยนjiยนยนยนยนxยนยนยนยนยน}n(;**************8noยนziยนยนยนยนยนziยนยนยนยนยนziยนยนยนยนhยนยนยนยนยนยนm5;**************8nโ—‹ยนjiยนยนยนยนยนjiยนยน_ยนยนjiยนยนยนยนxยนยนยนยนยนยน}n(**************8oยนยนziยนยนยนยนยนziยน]oยนยนziยนยนยนยนhยนยนยนยนยนยนยน}(**************8โ—‹ยนยนjiยนยน]ยนยนjiยนmn_ยนjiยนยนยนยนxยนยนยนยนยนยนยนยน(**************8ยนยนยนziยน]oยนยนzi]nnoยนziยนยนยนยนhยนยนยนยนยนยนยนยน(", + "ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยฒยนยนยนยนยนยนยนยนยนยนยนยน%&&'ยนยนยนยนยนยนยนยนยนยนยนยน5;+<#$ยนยนยนยนยนยนยนยนยน%<***:)$ยนยนยนยนยนยน\"#:+****91ยนยนยนยนยนยน2:9****9)4ยนยนยนยนยนยนยน2)9**)34ยนยนยนยนยนยนยนยนยน23)91ยนยนยนยนยนยนยนยนยนยนยนยนยน!91ยนยนยนยนยนยนยนยนยนยนยนยนยน!*)$ยนยนยนยนยน๐Ÿฑโฌ‡๏ธยนยนยนยนยน!**9#$ยน\"###$ยนยน\"#:***)9#:9)9:##:99", "ยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยนยน", nil, nil, @@ -1398,14 +1400,14 @@ __gfx__ 7ccccccc7dcd667dccddcccd6d677766fff400000000440000444ff4fff444001ccc11c10000000004440000888b888883888b88667cccd6667cccd600000000 7ccccccc7cccd66cccccccccccc66d66ff4404000000000004404fffff4440001ccc01110000000000440044838b883888b8b3886ccccccc6ccccccc00000000 77cccccc7ccccccc0ccc00cccccd6dd64440000000000000000004ff0440000011c00000000000000040004483833838883833880661116c1661116c00000000 -ccccccc777cccccc00cccccccccccc7744400000000000000000044400004ff00ccc10000cccccc0044440004400044000000005000000000000000000000000 -cccccc7777cccccccccccccccccccc77ff44040000000440004044ff0004ffff1cc11000cccccccc444440000444444000000055000000000000000000000000 -cccc777767c7cccccccccccccccc7c67fff400000440444000004fff00444fff111100001ccccccc444400004444444000000555000000000000000000000000 -00ccccc76ccccccccccccc6cccccccc60440044044444f400440044000044ff40011cc101cc1ccc1004444404444444400005555000000000000000000000000 -0ccccc776ccccccccc6cccccccccccc6444444404ff4440004444444004f4440001cccc01cc11c10004444404444444055555555000000000000000000000000 -ccccc67766ccccc6cccccccc6ccccc664ff44f444fff4f4444f44ff4004444ff0111cc1011111100044444404444444055555555000000000000000000000000 -ccccc6676ccc66c6666ccc666c66ccc64fff4ff4ffff4ff44ff4fff400044fff1c11110001101000044444004444440055555555000000000000000000000000 -cccccc670666666606666666666666660ff40ff444ff0ff44ff04ff0000044ffcc10000000000000044000000440400055555555000000000000000000000000 +ccccccc777cccccc00cccccccccccc7744400000000000000000044400004ff00ccc10000cccccc0044440004400044000000000000000000000000000000000 +cccccc7777cccccccccccccccccccc77ff44040000000440004044ff0004ffff1cc11000cccccccc444440000444444000000000000000000000000000000000 +cccc777767c7cccccccccccccccc7c67fff400000440444000004fff00444fff111100001ccccccc444400004444444000000000000000000000000000000000 +00ccccc76ccccccccccccc6cccccccc60440044044444f400440044000044ff40011cc101cc1ccc1004444404444444400000000000000000000000000000000 +0ccccc776ccccccccc6cccccccccccc6444444404ff4440004444444004f4440001cccc01cc11c10004444404444444000000000000000000000000000000000 +ccccc67766ccccc6cccccccc6ccccc664ff44f444fff4f4444f44ff4004444ff0111cc1011111100044444404444444000000000000000000000000000000000 +ccccc6676ccc66c6666ccc666c66ccc64fff4ff4ffff4ff44ff4fff400044fff1c11110001101000044444004444440000000000000000000000000000000000 +cccccc670666666606666666666666660ff40ff444ff0ff44ff04ff0000044ffcc10000000000000044000000440400000000000000000000000000000000000 00000000000000000777777777777777888888881444144444414441888558888885b38888888888888888888888888811111111111111111155111151111115 00000000000000007777777777677767888888881111111111111111885dd588885dd38888888888888888888888888815118811111111111555885151111155 0000000000000000767766777776667788888888888144188814418885d66d5885d66b3888888888888888888888888811188881115111115888888585111158 @@ -1438,70 +1440,70 @@ d666666dd666666dd666666dd666666d881441144114418883133138881441884188888888888814 000000006ddd6d6d6ddd6d65888888888888888888141188881313b88814418888111188888888146ddd6d650000000085511551111115511111155851111551 000000006d6dd66dd66dd6d588888888888888888814418881663618881411888166661888888814d66dd6d50000000085551551111511111115888885511511 0000000085dddddddddddd5888888888888888888814418816636661881141881666666188888814dddddd580000000088855555558885551588888888855855 -8888888888888888888888888888888888888888888888888888888888888888d666666dd666666dd666666dd666666dd666666dd666666dd666666dd666666d -88888888888888888888888888888888888888888788877888888888888888886dddddd56ddddd556dddddd56dddddd56ddddd556dddddd56dddddd56dddddd5 -8888888888888888888888888888888888888888777777778888888888888888666dd11111111111111ddd5d6111111111ddd5d566611111111111111111dd55 -88888888888888888888888888888888888888887ffff777888888888888888866dd1671444144441671d5dd1671441167115dd56611671444444444416715d5 -888888888888888888888888877888888888888881ff1f7888888888888888886ddd1661444414441661dddd1661414166141165114166144444444441661dd5 -88888888888888888888888877678888888888888fffff8888888888888888886ddd611444144441411ddddd5111111111144411414411111111111111116d65 -8888888888888888888888886776778888888888f8333388888888888888888885ddd6111111111111ddddd5ddddd6556dd141671411d65885ddd65885ddd658 -8888888888888888888888887777767888888888486886888888888888888888888888886ddd11111111dd5ddddd111111111166118888888888888888888888 -8888888888888888897799999299277786668888219114298888888888888888000000006dd1671441671dddddd1671441671411000000000000000000000000 -8888888888888887776729222299226775558888279117798888888888888888000000006dd1661141661dddddd16614416611d5000000000000000000000000 -888888888888877777769221129921777ddd8888777777778888888888888888000000006ddd11111111dd5ddddd11444411ddd5000000000000000000000000 -88888888888876776229221112222177975588887ffff7778888888888888888000000006ddd6d6d66ddd5ddddddd111111d6d6d000000000000000000000000 -888888888888776222922114444444474292888821ff1f7988888888888888880000000085ddd6586ddd5ddddddd5dd585ddd658000000000000000000000000 -88888888888722222922144444444447441928881fffff29888888888888888800000000888888886ddd6d6d6ddd6d6588888888000000000000000000000000 -8888888888727222922144477774444744412288f4333329888888888888888800000000888888886d6dd66dd66dd6d588888888000000000000000000000000 -8888888882226229221444777767744444441128476746298888888888888888000000008888888885dddddddddddd5888888888000000000000000000000000 -88888888999999991111111171111111111111198888888821911129888888880000000000000000000000000000000000000000000000000000000000000000 -88888888899142921444444444444444444444198888888821111119888888880000000000000000000000000000000000000000000000000000000000000000 -88888888829112921111111111111111111111198888888821171719888888880000000000000000000000000000000000000000000000000000000000000000 -88888888829142921144444414444444111444298888888811119911888888880000000000000000000000000000000000000000000000000000000000000000 -88888888829142921444444444444444444444298888888811177711888888880000000000000000000000000000000000000000000000000000000000000000 -88888888829142921449999444444444499994298888888811177719888888880000000000000000000000000000000000000000000000000000000000000000 -88888888829142921121911111111111219111298888888841177719888888880000000000000000000000000000000000000000000000000000000000000000 -8888888882914292142191144999944421911429888888881199d999888888880000000000000000000000000000000000000000000000000000000000000000 -88888899999999921421911441111944219114298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 -88889922222992221421911441444944219114298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 -88992222299221121121911111444244219114298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 -99999999922914421421911441444944219114298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 -82911111192914421429999441444944299994298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 -82914444192914421411111441444944111114298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 -82914114192914421444777741444944444444298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 -82914444192914421447677677744944477744298888888888888888888888880000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +88888888888888888888888888888888d666666dd666666dd666666dd666666dd666666dd666666dd666666dd666666d57777777777777777777777557777775 +878887788948ff8888888498888888886dddddd56ddddd556dddddd56dddddd56ddddd556dddddd56dddddd56dddddd577777777777777777777777777777777 +777777772292fff22ff2292288888888666dd11111111111111ddd5d6111111111ddd5d566611111111111111111dd557777ccc7777777777ccc777777777777 +7ffff77742249ff22ff942248888888866dd1671444144441671d5dd1671441167115dd56611671444444444416715d5777ccccc7c7777ccccccc777777cc777 +81ff1f782444222424224442877888886ddd1661444414441661dddd1661414166141165114166144444444441661dd5777ccccccc7777c7ccccc77777cccc77 +8fffff888222444444442228776788886ddd611444144441411ddddd5111111111144411414411111111111111116d657777ccc7777777777ccc777777cccc77 +f833338888822222222288886776778885ddd6111111111111ddddd5ddddd6556dd141671411d65885ddd65885ddd65877777777777777777777777777c7cc77 +48688688888888888888888877777678888888886ddd11111111dd5ddddd11111111116611888888888888888888888857777777777777777777777577cccc77 +21911429888888888977999992992777866688886dd1671441671dddddd167144167141188888888588888888888888557777777777777777777777577cccc77 +27911779888888877767292222992267755588886dd1661141661dddddd16614416611d5888888885588888888888855777777777777777777777777777ccc77 +777777778888877777769221129921777ddd88886ddd11111111dd5ddddd11444411ddd58888888855588888888885557777ccccc777777ccccc7777777ccc77 +7ffff777888876776229221112222177975588886ddd6d6d66ddd5ddddddd111111d6d6d888888885555888888885555777cccccccc77cccccccc77777ccc777 +21ff1f798888776222922114444444474292888885ddd6586ddd5ddddddd5dd585ddd65855555555555555555555555577cccccccccccccccccccc7777ccc777 +1fffff2988872222292214444444444744192888888888886ddd6d6d6ddd6d658888888855555555555555555555555577cc77ccccccccccccc7cc77777cc777 +f433332988727222922144477774444744412288888888886d6dd66dd66dd6d58888888855555555555555555555555577cc77cccccccccccccccc77777cc777 +47674629822262292214447777677444444411288888888885dddddddddddd588888888855555555555555555555555577cccccccccccccccccccc7777cccc77 +21911129999999991111111171111111111111190088880003333330077777705555555555555555555555555555555577cccccccccccccccccccc77777ccc77 +21111119899142921444444444444444444444190888888003b333307777777755555555555555555555555885555555777cccccccccccccccccc777777cc777 +211717198291129211111111111111111111111908788880033333307777777755888855555555555555558888555555777cccccccccccccccccc777777cc777 +1111991182914292114444441444444411144429088888800333b33077773377558888555555555555555888888555557777cccccccccccccccc777777ccc777 +1117771182914292144444444444444444444429088888800033330077773377558888555555555555558888888855557777cccccccccccccccc777777cccc77 +111777198291429214499994444444444999942908888880000440007377333755888855555555555558888888888555777cccccccccccccccccc77777cccc77 +411777198291429211219111111111112191112900888800000440007333bb3755555555555555555588888888888855777cccccccccccccccccc777777cc777 +1199d9998291429214219114499994442191142900000000009999000333bb305555555555555555588888888888888577cccccccccccccccccccc7757777775 +88888899999999921421911441111944219114290000600000060000000600000000000055555555588888888888888577cccccccccccccccccccc7757777775 +888899222229922214219114414449442191142900006000000600000006000000ee0ee058555555558888888888885577cccccccccccccccccccc7777777777 +889922222992211211219111114442442191142900060000000600000006000000eeeee055558855555888888888855577cc7cccccccccccc77ccc77777c7777 +9999999992291442142191144144494421911429000600000006000000060000000e2e0055558855555588888888555577ccccccccccccccc77ccc7777cccc77 +829111111929144214299994414449442999942900060000000060000000600000eeeee0555555555555588888855555777cccccccc77cccccccc77777cccc77 +829144441929144214111114414449441111142900060000000060000000600000ee3ee05585555555555588885555557777ccccc777777ccccc7777777cc777 +82914114192914421444777741444944444444290000600000006000000060000000b00055555555555555588555555577777777777777777777777777777777 +82914444192914421447677677744944477744290000600000006000000060000000b00055555555555555555555555557777777777777777777777557777775 +00aaaaa0000aaa000000a00000077077700777000777777777777777777777700777777000000d0550d000008888888888888888888888888888888888888888 +00a000a0000a0a000000a00007777776777777707000777000007770000077777000777700000501105000008888888888888888888888888888888888888888 +00a909a0000a0a000000a000776666666776777770c777ccccc777ccccc7770770c7770700666d666d6d66008888888888888888888888888888888888888888 +009aaa900009a9000000a000767776667666667770777ccccc777ccccc777c0770777c0706dddddddddddd608888888888888888888888888888888888888888 +0000a0000000a0000000a000000000000000000077770000077700000777000777770007dddddd5555dddddd8888888888888888888888888888888888888888 +0099a0000009a0000000a000000000000000000077700000777000007770000777700c07dddd5d5dd5d5dddd8888888888888888888888888888888888888888 +0009a0000000a0000000a000000000000000000070000000000000000000000770000007dddddd5555dddddd8888888888888888888888888888888888888888 +00aaa0000009a0000000a000000000000000000007777777777777777777777007777770dddddddddddddddd8888888888888888888888888888888888888888 +499999944999999449990994cccccccc0077770007777777777777777777777007777770dd555555555555dd8888888888888888888888888888888888888888 +911111199111411991140919c77ccccc0700007070000777000077700000777770007777dddddddddddddddd8888888888888888888888888888888888888888 +911111199111911949400419c77cc7cc7077000770cc777cccc777ccccc7770770c777075dd5555d555d5ddd8888888888888888888888888888888888888888 +911111199494041900000044cccccccc7077bb0770c777cccc777ccccc777c0770777c07dddddddddddddddd8888888888888888888888888888888888888888 +911111199114094994000000cccccccc700bbb07707770000777000007770007777700075ddd55d5d55dddd58888888888888888888888888888888888888888 +911111199111911991400499cc7ccccc700bbb0777770000777000007770000777700007dddddddddddddddd8888888888888888888888888888888888888888 +911111199114111991404119ccccc7cc070000707000000000000000000c000770000c07ddd55555d5555ddd8888888888888888888888888888888888888888 +499999944999999444004994cccccccc0077770070000000000000000000000770000007dddddddddddddddd8888888888888888888888888888888888888888 +004bbb00004b000000400bbb577775570000000070000000000000000000000770000007dd555555555555dd8888888888888888888888888888888888888888 +004bbbbb004bb000004bbbbb7777777700aaaaaa7000000c000000000000000770cc00075ddddddddddddddd8888888888888888888888888888888888888888 +04200bbb042bbbbb042bbb007777cc770a99999970000000000cc0000000000770cc000755dddd5555ddddd58888888888888888888888888888888888888888 +040000000400bbb004000000777ccccca99aaaaa70c00000000cc00000000c0770000c07d55ddd5dd5dddd5d8888888888888888888888888888888888888888 +04000000040000000400000077cccccca9aaaaaa700000000000000000000007700000075ddddd5555dddddd8888888888888888888888888888888888888888 +42000000420000004200000057cc77cca999999970000000000000000000000770c000075ddddddddddddddd8888888888888888888888888888888888888888 +400000004000000040000000577c77cca999999970000000c0000000000000077000000755dd5dd55dddddd58888888888888888888888888888888888888888 +400000004000000040000000777ccccca99999997000000000000000000000077000c007555dd5dddddd5d558888888888888888888888888888888888888888 +888888888888888888888888777cccccaaaaaaaa7000000000000000000000077000000788888888888888888888888888888888888888888888888888888888 +888888888888888888888888577ccccca49494a1700000000000000000000007700c000788888888888888888888888888888888888888888888888888888888 +88888888888888888888888857cc7ccca494a4a1700000000000c000000000077000000788888888888888888888888888888888888888888888888888888888 +88888888888888888888888877cccccca49444aa7000000cc0000000000000077000cc0788888888888888888888888888888888888888888888888888888888 +888888888888888888888888777ccccca49999aa7000000cc0000000000c00077000cc0788888888888888888888888888888888888888888888888888888888 +8888888888888888888888887777cc77a494449970c00000000000000000000770c0000788888888888888888888888888888888888888888888888888888888 +88888888888888888888888877777777a494a4447000000000000000000000077000000788888888888888888888888888888888888888888888888888888888 +88888888888888888888888857777577a49499990777777777777777777777700777777088888888888888888888888888888888888888888888888888888888 __label__ cccccccccccccccccccccccccccccccccccccc775500000000000000000000000000000000070000000000000000000000000000000000000000000000000000 cccccccccccccccccccccccccccccccccccccc776670000000000000000000000000000000000000000000000000000000000000000000000000000000000000 @@ -1633,25 +1635,25 @@ ccccccccccccccccccccccccccccccccccccccccccccc77700000000000000000000000000000000 cccccccccccccccccccccccccccccccccccccccccccccc7700000000000000000000000000000000000000000000000000000000000000000000000000000000 __gff__ -0000000000000000000000000000000002020202080808000000000000030303030303030303030303030304040303000303030303030303030303030400000000000000040403040404040404040404000000000303040404040404040404040303030304040404040403030404040400030303030304040404000004040404 -0404040404040404030303030303030304040404040404040403030303040000040404040404040400000000000000000404040404040404000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000002020202080808000000000000030303030303030303030303030304040303000303030303030303030303030000000000000000040303040404040404040404000000000303040404040404040404040303030304040404040403030404040400030303030304040404030000000000 +0404040003030303030303030303030304040404040303030304040403030303040404040400040404040404030303030404040404000000040404040303030300000000001313131304040000000000000000030013131313040400000000000000000000131313130404000000000000000000001313131000000000000000 __map__ -2929293828383932323232323300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929393232323300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2928301e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -39323300000000000000000000002b2100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -231e000000000000000000002c1e1e2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -3000000000000000000000002d2e223900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -39222e1f00000000000000000000312800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2833000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -3000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -3300000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000001e00000000002d223800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000021230000000000202800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -0001002123000020300000101010203800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2222222830000020301010212222382900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -3938283830101020392222283828292900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2929292939222239383838292929292900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +9ebcadadd3adadbdbdbdbdbdbe0000ac00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +ad9ebcbdbdbdbeaa0000a9aa000000ac00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +adad9ebfa8a9b9000000ab0000002bac00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +bdbdbea9a9a9aa00000000002cbfbfac00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +9ee3a9b9a9aabba9ba0000008c8d9dad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +aebba9a9a9a8a9aa000000000000bcad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +ad9d8d8d8ea9a9000000000000bba9ac00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +adbeb9a9a9aa00000000000000a9b9ac00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +ae0000aba900000000bba9bba9a9a9ac00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +be000000a9ba000000a9a8a9a98c9dad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000bba9a9b9b8bba9a9a9b9a9acad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000a9b9a9a99c9ea90000aba9acad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0001bb9c9ea9abacaeaa00101010acad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +9d9d9dadaeaa00acae10109c9d9dadad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +adadadadae1010acad9d9dadadadadad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +adadadadad9d9dadadadadadadadadad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000