Now that I am finally writing music in Pico-8, I would like to request from @zep that you can play beyond 32-notes with SFX().
Already the LOOP marker will count past this but it does not start to play the next SFX, instead it is silent before restarting.
So it would be a single flag that appears before LOOP to show this SOUND has 64-notes instead of 32. And if THAT SFX had the flag set it would be 96 instead of 64.
You can see it here as a PINK button to select just before LOOP.
Hi!
I am working on a 3D raycaster game. It's largely working; see the gif below:
I am basically using zep's cast demo as a starter - if you look through my code you will see his draw_3d() function, albeit pretty heavily hacked at this point. I use tline() to draw my walls, and i apply a fillp() based on distance from the camera to get a (currently ugly) dithered lighting effect.
I would like to do the same thing for my floors! Except, I am drawing my floors vertically. See the next gif:
I only draw a floor (vertical line() downward) if my casted ray hits a wall OR a new tile type (thats how i get different floor colors).
Anyone have a cpu-conservative tip for how I could get a gradient similar to my walls on the floor? I COULD draw the floors first as a flood-fill, but this would ignore different colors and elevations. I can't think of any way to apply a smart horizontal-fill strategy, which would allow me to apply fillp() based on distance from the camera.
Ever wondered what it would be like if pong went to the next level?
I think I may have found the answer. Try it out and tell me what you think.
Special thanks to dw817 for play-testing.
Note: Feels WAY better in full screen.
Controls
P1:
Use Z or X to accept/continue/etc.
Up and down arrows to move/select.
Left and right arrows to select difficulty. (Only at menu)
P2:
Use up and down arrows to move.
Rules
Try to get the ball past your opponent to score a goal(edge of screen) by moving your paddle into the
Something I noticed today, browsing the PICO-8 forums on my iPhone 6: when I opened the Tell me about how you compose music thread, it would always crash the browser. Safari and Chrome would report that the tab had repeated errors, Opera would crash out entirely.
I'm guessing here when I suggest the embedded SFX music player is related to this, but I wonder if all the scripts are overloading the limitations of the device. Granted, this is a device that will sometimes struggle to run a PICO-8 cart at all, but it makes me wonder if some kind of click-to-activate option for SFX previews might be worth implementing.
Edit: It seems like this has been largely addressed by the new SFX preview system; closing.
FOUR ELEMENTS 🥵🤢🥶😵
Play as Empedocles, master of the four elements, as he defeats foes and climbs to the top of Tower Etna! Collect and craft potions that transform you into the different elements, and bend the laws of nature to your will!
Made over three days during the 7 Day Roguelike Challenge.
RULES
This chart, known as the 'Laws of Nature,' describes how much health will be gained or lost by a character in each elemental reaction. In this example, when YELLOW interacts with BLUE or vice versa, BLUE gets +1 health and YELLOW does not gain or lose health.
I need some help creating an absolute value function that utilizes bits to work.
My current understanding is pico8 is either 32 or 16 places. I don't quite understand which value I would use here.
If someone can clarify that would be good. For the sake of explanation, lets say its 6 bit.
v=2 000 010 --binary form of 2 in 6 bit v=-2 111 101 --binary form of -2 in 6 bit |
So my understanding is the formula is something like:
mask=v>>number_of_bits_in_v -1 v=(v+mask)^mask |
where number_of_bits_in_v=6 and v=2
And the idea is in the case of v=-2 we are adding one to it..cause all the bits to shift over. So given the above formula is subracting one....I have to know whether the number is positive or negative ahead of time and use either -1 or +1? Not sure if that'll be an issue or not.
This leads to a function like:
function absolute(v,ttl_bits) local mask=v>>ttl_bits-1 return (v+mask)^mask end [ [size=16][color=#ffaabb] [ Continue Reading.. ] [/color][/size] ](/bbs/?pid=108221#p) |
Umbrellaglitch [Parasolglitch]
Description
Moded version of basic Umbrelaless version.
Your mission
Survive in glitch!
Modes
Singleplayer [Friendless]
Yep, you don't have any friends and only way to play the game is to play by yourself.
Multiplayer [Singleless]
Woooah, you have friends? That's awesome! Play with them in competitive mode. One player uses arrows and the other "E" and "D"
Controls
Control your character by going up or down. You can use arrows, "Z", "X".
My channel with weird films
Umbrellahell [Parasolhell]
Description
Moded version of basic Umbrelaless version.
Your mission
Survive in hell :)
Modes
Singleplayer [Friendless]
Yep, you don't have any friends and only way to play the game is to play by yourself.
Multiplayer [Singleless]
Woooah, you have friends? That's awesome! Play with them in competitive mode. One player uses arrows and the other "E" and "D"
Controls
Control your character by going up or down. You can use arrows, "Z", "X".
My channel with weird films
Hello anybody who is reading this. I made a celeste cart through a celeste editor, but then realized that I do not have pico-8. If you have pico-8 and you are reading this, could you please try to make this celeste cart a reality? Here is the code:
pico-8 cartridge // http://www.pico-8.com version 18 __lua__ -- ~celeste~ -- matt thorson + noel berry -- globals -- ------------- room = { x=0, y=0 } objects = {} types = {} freeze=0 shake=0 will_restart=false delay_restart=0 got_fruit={} has_dashed=false sfx_timer=0 has_key=false pause_player=false flash_bg=false music_timer=0 k_left=0 k_right=1 k_up=2 k_down=3 k_jump=4 k_dash=5 -- entry point -- ----------------- function _init() title_screen() end function title_screen() got_fruit = {} for i=0,29 do add(got_fruit,false) end frames=0 deaths=0 max_djump=1 start_game=false start_game_flash=0 music(40,0,7) load_room(7,3) end function begin_game() frames=0 seconds=0 minutes=0 music_timer=0 start_game=false music(0,0,7) load_room(0,0) end function level_index() return room.x%8+room.y*8 end function is_title() return level_index()==31 end -- effects -- ------------- clouds = {} for i=0,16 do add(clouds,{ x=rnd(128), y=rnd(128), spd=1+rnd(4), w=32+rnd(32) }) end particles = {} for i=0,24 do add(particles,{ x=rnd(128), y=rnd(128), s=0+flr(rnd(5)/4), spd=0.25+rnd(5), off=rnd(1), c=6+flr(0.5+rnd(1)) }) end dead_particles = {} -- player entity -- ------------------- player = { init=function(this) this.p_jump=false this.p_dash=false this.grace=0 this.jbuffer=0 this.djump=max_djump this.dash_time=0 this.dash_effect_time=0 this.dash_target={x=0,y=0} this.dash_accel={x=0,y=0} this.hitbox = {x=1,y=3,w=6,h=5} this.spr_off=0 this.was_on_ground=false create_hair(this) end, update=function(this) if (pause_player) return local input = btn(k_right) and 1 or (btn(k_left) and -1 or 0) -- spikes collide if spikes_at(this.x+this.hitbox.x,this.y+this.hitbox.y,this.hitbox.w,this.hitbox.h,this.spd.x,this.spd.y) then kill_player(this) end -- bottom death if this.y>128 then kill_player(this) end local on_ground=this.is_solid(0,1) local on_ice=this.is_ice(0,1) -- smoke particles if on_ground and not this.was_on_ground then init_object(smoke,this.x,this.y+4) end local jump = btn(k_jump) and not this.p_jump this.p_jump = btn(k_jump) if (jump) then this.jbuffer=4 elseif this.jbuffer>0 then this.jbuffer-=1 end local dash = btn(k_dash) and not this.p_dash this.p_dash = btn(k_dash) if on_ground then this.grace=6 if this.djump<max_djump then psfx(54) this.djump=max_djump end elseif this.grace > 0 then this.grace-=1 end this.dash_effect_time -=1 if this.dash_time > 0 then init_object(smoke,this.x,this.y) this.dash_time-=1 this.spd.x=appr(this.spd.x,this.dash_target.x,this.dash_accel.x) this.spd.y=appr(this.spd.y,this.dash_target.y,this.dash_accel.y) else -- move local maxrun=1 local accel=0.6 local deccel=0.15 if not on_ground then accel=0.4 elseif on_ice then accel=0.05 if input==(this.flip.x and -1 or 1) then accel=0.05 end end if abs(this.spd.x) > maxrun then this.spd.x=appr(this.spd.x,sign(this.spd.x)*maxrun,deccel) else this.spd.x=appr(this.spd.x,input*maxrun,accel) end --facing if this.spd.x!=0 then this.flip.x=(this.spd.x<0) end -- gravity local maxfall=2 local gravity=0.21 if abs(this.spd.y) <= 0.15 then gravity*=0.5 end -- wall slide if input!=0 and this.is_solid(input,0) and not this.is_ice(input,0) then maxfall=0.4 if rnd(10)<2 then init_object(smoke,this.x+input*6,this.y) end end if not on_ground then this.spd.y=appr(this.spd.y,maxfall,gravity) end -- jump if this.jbuffer>0 then if this.grace>0 then -- normal jump psfx(1) this.jbuffer=0 this.grace=0 this.spd.y=-2 init_object(smoke,this.x,this.y+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(2) this.jbuffer=0 this.spd.y=-2 this.spd.x=-wall_dir*(maxrun+1) if not this.is_ice(wall_dir*3,0) then init_object(smoke,this.x+wall_dir*6,this.y) end end end end -- dash local d_full=5 local d_half=d_full*0.70710678118 if this.djump>0 and dash then init_object(smoke,this.x,this.y) this.djump-=1 this.dash_time=4 has_dashed=true this.dash_effect_time=10 local v_input=(btn(k_up) and -1 or (btn(k_down) and 1 or 0)) if input!=0 then if v_input!=0 then this.spd.x=input*d_half this.spd.y=v_input*d_half else this.spd.x=input*d_full this.spd.y=0 end elseif v_input!=0 then this.spd.x=0 this.spd.y=v_input*d_full else this.spd.x=(this.flip.x and -1 or 1) this.spd.y=0 end psfx(3) freeze=2 shake=6 this.dash_target.x=2*sign(this.spd.x) this.dash_target.y=2*sign(this.spd.y) this.dash_accel.x=1.5 this.dash_accel.y=1.5 if this.spd.y<0 then this.dash_target.y*=.75 end if this.spd.y!=0 then this.dash_accel.x*=0.70710678118 end if this.spd.x!=0 then this.dash_accel.y*=0.70710678118 end elseif dash and this.djump<=0 then psfx(9) init_object(smoke,this.x,this.y) end end -- animation this.spr_off+=0.25 if not on_ground then if this.is_solid(input,0) then this.spr=5 else this.spr=3 end elseif btn(k_down) then this.spr=6 elseif btn(k_up) then this.spr=7 elseif (this.spd.x==0) or (not btn(k_left) and not btn(k_right)) then this.spr=1 else this.spr=1+this.spr_off%4 end -- next level if this.y<-4 and level_index()<30 then next_room() end -- was on the ground this.was_on_ground=on_ground end, --<end update loop draw=function(this) -- clamp in screen if this.x<-1 or this.x>121 then this.x=clamp(this.x,-1,121) this.spd.x=0 end set_hair_color(this.djump) draw_hair(this,this.flip.x and -1 or 1) spr(this.spr,this.x,this.y,1,1,this.flip.x,this.flip.y) unset_hair_color() end } psfx=function(num) if sfx_timer<=0 then sfx(num) end end create_hair=function(obj) obj.hair={} for i=0,4 do add(obj.hair,{x=obj.x,y=obj.y,size=max(1,min(2,3-i))}) end end set_hair_color=function(djump) pal(8,(djump==1 and 8 or djump==2 and (7+flr((frames/3)%2)*4) or 12)) end draw_hair=function(obj,facing) local last={x=obj.x+4-facing*2,y=obj.y+(btn(k_down) and 4 or 3)} foreach(obj.hair,function(h) h.x+=(last.x-h.x)/1.5 h.y+=(last.y+0.5-h.y)/1.5 circfill(h.x,h.y,h.size,8) last=h end) end unset_hair_color=function() pal(8,8) end player_spawn = { tile=1, init=function(this) sfx(4) this.spr=3 this.target= {x=this.x,y=this.y} this.y=128 this.spd.y=-4 this.state=0 this.delay=0 this.solids=false create_hair(this) end, update=function(this) -- jumping up if this.state==0 then if this.y < this.target.y+16 then this.state=1 this.delay=3 end -- falling elseif this.state==1 then this.spd.y+=0.5 if this.spd.y>0 and this.delay>0 then this.spd.y=0 this.delay-=1 end if this.spd.y>0 and this.y > this.target.y then this.y=this.target.y this.spd = {x=0,y=0} this.state=2 this.delay=5 shake=5 init_object(smoke,this.x,this.y+4) sfx(5) end -- landing elseif this.state==2 then this.delay-=1 this.spr=6 if this.delay<0 then destroy_object(this) init_object(player,this.x,this.y) end end end, draw=function(this) set_hair_color(max_djump) draw_hair(this,1) spr(this.spr,this.x,this.y,1,1,this.flip.x,this.flip.y) unset_hair_color() end } add(types,player_spawn) spring = { tile=18, init=function(this) this.hide_in=0 this.hide_for=0 end, update=function(this) if this.hide_for>0 then this.hide_for-=1 if this.hide_for<=0 then this.spr=18 this.delay=0 end elseif this.spr==18 then local hit = this.collide(player,0,0) if hit ~=nil and hit.spd.y>=0 then this.spr=19 hit.y=this.y-4 hit.spd.x*=0.2 hit.spd.y=-3 hit.djump=max_djump this.delay=10 init_object(smoke,this.x,this.y) -- breakable below us local below=this.collide(fall_floor,0,1) if below~=nil then break_fall_floor(below) end psfx(8) end elseif this.delay>0 then this.delay-=1 if this.delay<=0 then this.spr=18 end end -- begin hiding if this.hide_in>0 then this.hide_in-=1 if this.hide_in<=0 then this.hide_for=60 this.spr=0 end end end } add(types,spring) function break_spring(obj) obj.hide_in=15 end balloon = { tile=22, init=function(this) this.offset=rnd(1) this.start=this.y this.timer=0 this.hitbox={x=-1,y=-1,w=10,h=10} end, update=function(this) if this.spr==22 then this.offset+=0.01 this.y=this.start+sin(this.offset)*2 local hit = this.collide(player,0,0) if hit~=nil and hit.djump<max_djump then psfx(6) init_object(smoke,this.x,this.y) hit.djump=max_djump this.spr=0 this.timer=60 end elseif this.timer>0 then this.timer-=1 else psfx(7) init_object(smoke,this.x,this.y) this.spr=22 end end, draw=function(this) if this.spr==22 then spr(13+(this.offset*8)%3,this.x,this.y+6) spr(this.spr,this.x,this.y) end end } add(types,balloon) fall_floor = { tile=23, init=function(this) this.state=0 this.solid=true end, update=function(this) -- idling if this.state == 0 then if this.check(player,0,-1) or this.check(player,-1,0) or this.check(player,1,0) then break_fall_floor(this) 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.check(player,0,0) then psfx(7) this.state=0 this.collideable=true init_object(smoke,this.x,this.y) end end end, draw=function(this) if this.state!=2 then if this.state!=1 then spr(23,this.x,this.y) else spr(23+(15-this.delay)/5,this.x,this.y) end end end } add(types,fall_floor) function break_fall_floor(obj) if obj.state==0 then psfx(15) obj.state=1 obj.delay=15--how long until it falls init_object(smoke,obj.x,obj.y) local hit=obj.collide(spring,0,-1) if hit~=nil then break_spring(hit) end end end smoke={ init=function(this) this.spr=29 this.spd.y=-0.1 this.spd.x=0.3+rnd(0.2) this.x+=-1+rnd(2) this.y+=-1+rnd(2) this.flip.x=maybe() this.flip.y=maybe() this.solids=false end, update=function(this) this.spr+=0.2 if this.spr>=32 then destroy_object(this) end end } fruit={ tile=26, if_not_fruit=true, init=function(this) this.start=this.y this.off=0 end, update=function(this) local hit=this.collide(player,0,0) if hit~=nil then hit.djump=max_djump sfx_timer=20 sfx(13) got_fruit[1+level_index()] = true init_object(lifeup,this.x,this.y) destroy_object(this) end this.off+=1 this.y=this.start+sin(this.off/40)*2.5 end } add(types,fruit) fly_fruit={ tile=28, if_not_fruit=true, init=function(this) this.start=this.y this.fly=false this.step=0.5 this.solids=false this.sfx_delay=8 end, update=function(this) --fly away if this.fly then if this.sfx_delay>0 then this.sfx_delay-=1 if this.sfx_delay<=0 then sfx_timer=20 sfx(14) end end this.spd.y=appr(this.spd.y,-3.5,0.25) if this.y<-16 then destroy_object(this) end -- wait else if has_dashed then this.fly=true end this.step+=0.05 this.spd.y=sin(this.step)*0.5 end -- collect local hit=this.collide(player,0,0) if hit~=nil then hit.djump=max_djump sfx_timer=20 sfx(13) got_fruit[1+level_index()] = true init_object(lifeup,this.x,this.y) destroy_object(this) end end, draw=function(this) local off=0 if not this.fly then local dir=sin(this.step) if dir<0 then off=1+max(0,sign(this.y-this.start)) end else off=(off+0.25)%3 end spr(45+off,this.x-6,this.y-2,1,1,true,false) spr(this.spr,this.x,this.y) spr(45+off,this.x+6,this.y-2) end } add(types,fly_fruit) lifeup = { init=function(this) this.spd.y=-0.25 this.duration=30 this.x-=2 this.y-=4 this.flash=0 this.solids=false end, update=function(this) this.duration-=1 if this.duration<= 0 then destroy_object(this) end end, draw=function(this) this.flash+=0.5 print("1000",this.x-2,this.y,7+this.flash%2) end } fake_wall = { tile=64, if_not_fruit=true, update=function(this) this.hitbox={x=-1,y=-1,w=18,h=18} local hit = this.collide(player,0,0) if hit~=nil and hit.dash_effect_time>0 then hit.spd.x=-sign(hit.spd.x)*1.5 hit.spd.y=-1.5 hit.dash_time=-1 sfx_timer=20 sfx(16) destroy_object(this) init_object(smoke,this.x,this.y) init_object(smoke,this.x+8,this.y) init_object(smoke,this.x,this.y+8) init_object(smoke,this.x+8,this.y+8) init_object(fruit,this.x+4,this.y+4) end this.hitbox={x=0,y=0,w=16,h=16} end, draw=function(this) spr(64,this.x,this.y) spr(65,this.x+8,this.y) spr(80,this.x,this.y+8) spr(81,this.x+8,this.y+8) end } add(types,fake_wall) key={ tile=8, if_not_fruit=true, update=function(this) local was=flr(this.spr) this.spr=9+(sin(frames/30)+0.5)*1 local is=flr(this.spr) if is==10 and is!=was then this.flip.x=not this.flip.x end if this.check(player,0,0) then sfx(23) sfx_timer=10 destroy_object(this) has_key=true end end } add(types,key) chest={ tile=20, if_not_fruit=true, init=function(this) this.x-=4 this.start=this.x this.timer=20 end, update=function(this) if has_key then this.timer-=1 this.x=this.start-1+rnd(3) if this.timer<=0 then sfx_timer=20 sfx(16) init_object(fruit,this.x,this.y-4) destroy_object(this) end end end } add(types,chest) platform={ init=function(this) this.x-=4 this.solids=false this.hitbox.w=16 this.last=this.x end, update=function(this) this.spd.x=this.dir*0.65 if this.x<-16 then this.x=128 elseif this.x>128 then this.x=-16 end if not this.check(player,0,0) then local hit=this.collide(player,0,-1) if hit~=nil then hit.move_x(this.x-this.last,1) end end this.last=this.x end, draw=function(this) spr(11,this.x,this.y-1) spr(12,this.x+8,this.y-1) end } message={ tile=86, last=0, draw=function(this) this.text="-- celeste mountain --#this memorial to those# perished on the climb" if this.check(player,4,0) then if this.index<#this.text then this.index+=0.5 if this.index>=this.last+1 then this.last+=1 sfx(35) end end this.off={x=8,y=96} for i=1,this.index do if sub(this.text,i,i)~="#" then rectfill(this.off.x-2,this.off.y-2,this.off.x+7,this.off.y+6 ,7) print(sub(this.text,i,i),this.off.x,this.off.y,0) this.off.x+=5 else this.off.x=8 this.off.y+=7 end end else this.index=0 this.last=0 end end } add(types,message) big_chest={ tile=96, init=function(this) this.state=0 this.hitbox.w=16 end, draw=function(this) if this.state==0 then local hit=this.collide(player,0,8) if hit~=nil and hit.is_solid(0,1) then music(-1,500,7) sfx(37) pause_player=true hit.spd.x=0 hit.spd.y=0 this.state=1 init_object(smoke,this.x,this.y) init_object(smoke,this.x+8,this.y) this.timer=60 this.particles={} end spr(96,this.x,this.y) spr(97,this.x+8,this.y) elseif this.state==1 then this.timer-=1 shake=5 flash_bg=true if this.timer<=45 and count(this.particles)<50 then add(this.particles,{ x=1+rnd(14), y=0, h=32+rnd(32), spd=8+rnd(8) }) end if this.timer<0 then this.state=2 this.particles={} flash_bg=false new_bg=true init_object(orb,this.x+4,this.y+4) pause_player=false end foreach(this.particles,function(p) p.y+=p.spd line(this.x+p.x,this.y+8-p.y,this.x+p.x,min(this.y+8-p.y+p.h,this.y+8),7) end) end spr(112,this.x,this.y+8) spr(113,this.x+8,this.y+8) end } add(types,big_chest) orb={ init=function(this) this.spd.y=-4 this.solids=false this.particles={} end, draw=function(this) this.spd.y=appr(this.spd.y,0,0.5) local hit=this.collide(player,0,0) if this.spd.y==0 and hit~=nil then music_timer=45 sfx(51) freeze=10 shake=10 destroy_object(this) max_djump=2 hit.djump=2 end spr(102,this.x,this.y) local off=frames/30 for i=0,7 do circfill(this.x+4+cos(off+i/8)*8,this.y+4+sin(off+i/8)*8,1,7) end end } flag = { tile=118, init=function(this) this.x+=5 this.score=0 this.show=false for i=1,count(got_fruit) do if got_fruit[i] then this.score+=1 end end end, draw=function(this) this.spr=118+(frames/5)%3 spr(this.spr,this.x,this.y) if this.show then rectfill(32,2,96,31,0) spr(26,55,6) print("x"..this.score,64,9,7) draw_time(49,16) print("deaths:"..deaths,48,24,7) elseif this.check(player,0,0) then sfx(55) sfx_timer=30 this.show=true end end } add(types,flag) room_title = { init=function(this) this.delay=5 end, draw=function(this) this.delay-=1 if this.delay<-30 then destroy_object(this) elseif this.delay<0 then rectfill(24,58,104,70,0) --rect(26,64-10,102,64+10,7) --print("---",31,64-2,13) if room.x==3 and room.y==1 then print("old site",48,62,7) elseif level_index()==30 then print("summit",52,62,7) else local level=(1+level_index())*100 print(level.." m",52+(level<1000 and 2 or 0),62,7) end --print("---",86,64-2,13) draw_time(4,4) end end } -- object functions -- ----------------------- function init_object(type,x,y) if type.if_not_fruit~=nil and got_fruit[1+level_index()] then return end local obj = {} obj.type = type obj.collideable=true obj.solids=true obj.spr = type.tile obj.flip = {x=false,y=false} obj.x = x obj.y = y obj.hitbox = { x=0,y=0,w=8,h=8 } obj.spd = {x=0,y=0} obj.rem = {x=0,y=0} obj.is_solid=function(ox,oy) if oy>0 and not obj.check(platform,ox,0) and obj.check(platform,ox,oy) then return true end return solid_at(obj.x+obj.hitbox.x+ox,obj.y+obj.hitbox.y+oy,obj.hitbox.w,obj.hitbox.h) or obj.check(fall_floor,ox,oy) or obj.check(fake_wall,ox,oy) end obj.is_ice=function(ox,oy) return ice_at(obj.x+obj.hitbox.x+ox,obj.y+obj.hitbox.y+oy,obj.hitbox.w,obj.hitbox.h) end obj.collide=function(type,ox,oy) local other for i=1,count(objects) do other=objects[i] if other ~=nil and other.type == type and other != obj and other.collideable and other.x+other.hitbox.x+other.hitbox.w > obj.x+obj.hitbox.x+ox and other.y+other.hitbox.y+other.hitbox.h > obj.y+obj.hitbox.y+oy and other.x+other.hitbox.x < obj.x+obj.hitbox.x+obj.hitbox.w+ox and other.y+other.hitbox.y < obj.y+obj.hitbox.y+obj.hitbox.h+oy then return other end end return nil end obj.check=function(type,ox,oy) return obj.collide(type,ox,oy) ~=nil end obj.move=function(ox,oy) local amount -- [x] get move amount obj.rem.x += ox amount = flr(obj.rem.x + 0.5) obj.rem.x -= amount obj.move_x(amount,0) -- [y] get move amount obj.rem.y += oy amount = flr(obj.rem.y + 0.5) obj.rem.y -= amount obj.move_y(amount) end obj.move_x=function(amount,start) if obj.solids then local step = sign(amount) for i=start,abs(amount) do if not obj.is_solid(step,0) then obj.x += step else obj.spd.x = 0 obj.rem.x = 0 break end end else obj.x += amount end end obj.move_y=function(amount) if obj.solids then local step = sign(amount) for i=0,abs(amount) do if not obj.is_solid(0,step) then obj.y += step else obj.spd.y = 0 obj.rem.y = 0 break end end else obj.y += amount end end add(objects,obj) if obj.type.init~=nil then obj.type.init(obj) end return obj end function destroy_object(obj) del(objects,obj) end function kill_player(obj) sfx_timer=12 sfx(0) deaths+=1 shake=10 destroy_object(obj) dead_particles={} for dir=0,7 do local angle=(dir/8) add(dead_particles,{ x=obj.x+4, y=obj.y+4, t=10, spd={ x=sin(angle)*3, y=cos(angle)*3 } }) restart_room() end end -- room functions -- -------------------- function restart_room() will_restart=true delay_restart=15 end function next_room() if room.x==2 and room.y==1 then music(30,500,7) elseif room.x==3 and room.y==1 then music(20,500,7) elseif room.x==4 and room.y==2 then music(30,500,7) elseif room.x==5 and room.y==3 then music(30,500,7) end if room.x==7 then load_room(0,room.y+1) else load_room(room.x+1,room.y) end end function load_room(x,y) has_dashed=false has_key=false --remove existing objects foreach(objects,destroy_object) --current room room.x = x room.y = y -- entities for tx=0,15 do for ty=0,15 do local tile = mget(room.x*16+tx,room.y*16+ty); if tile==11 then init_object(platform,tx*8,ty*8).dir=-1 elseif tile==12 then init_object(platform,tx*8,ty*8).dir=1 else foreach(types, function(type) if type.tile == tile then init_object(type,tx*8,ty*8) end end) end end end if not is_title() then init_object(room_title,0,0) end end -- update function -- ----------------------- function _update() frames=((frames+1)%30) if frames==0 and level_index()<30 then seconds=((seconds+1)%60) if seconds==0 then minutes+=1 end end 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 -- screenshake if shake>0 then shake-=1 camera() if shake>0 then camera(-2+rnd(5),-2+rnd(5)) end end -- restart (soon) if will_restart and delay_restart>0 then delay_restart-=1 if delay_restart<=0 then will_restart=false load_room(room.x,room.y) end end -- update each object foreach(objects,function(obj) obj.move(obj.spd.x,obj.spd.y) if obj.type.update~=nil then obj.type.update(obj) end end) -- start game if is_title() then if not start_game and (btn(k_jump) or btn(k_dash)) then music(-1) start_game_flash=50 start_game=true sfx(38) end if start_game then start_game_flash-=1 if start_game_flash<=-30 then begin_game() end end end end -- drawing functions -- ----------------------- function _draw() if freeze>0 then return end -- reset all palette values pal() -- start game flash if start_game then local c=10 if start_game_flash>10 then if frames%10<5 then c=7 end elseif start_game_flash>5 then c=2 elseif start_game_flash>0 then c=1 else c=0 end if c<10 then pal(6,c) pal(12,c) pal(13,c) pal(5,c) pal(1,c) pal(7,c) end end -- clear screen local bg_col = 0 if flash_bg then bg_col = frames/5 elseif new_bg~=nil then bg_col=2 end rectfill(0,0,128,128,bg_col) -- clouds if not is_title() then foreach(clouds, function(c) c.x += c.spd rectfill(c.x,c.y,c.x+c.w,c.y+4+(1-c.w/64)*12,new_bg~=nil and 14 or 1) if c.x > 128 then c.x = -c.w c.y=rnd(128-8) end end) end -- draw bg terrain map(room.x * 16,room.y * 16,0,0,16,16,4) -- platforms/big chest foreach(objects, function(o) if o.type==platform or o.type==big_chest then draw_object(o) end end) -- draw terrain local off=is_title() and -4 or 0 map(room.x*16,room.y * 16,off,0,16,16,2) -- draw objects foreach(objects, function(o) if o.type~=platform and o.type~=big_chest then draw_object(o) end end) -- draw fg terrain map(room.x * 16,room.y * 16,0,0,16,16,8) -- particles foreach(particles, function(p) p.x += p.spd p.y += sin(p.off) p.off+= min(0.05,p.spd/32) rectfill(p.x,p.y,p.x+p.s,p.y+p.s,p.c) if p.x>128+4 then p.x=-4 p.y=rnd(128) end end) -- dead particles foreach(dead_particles, function(p) p.x += p.spd.x p.y += p.spd.y p.t -=1 if p.t <= 0 then del(dead_particles,p) end rectfill(p.x-p.t/5,p.y-p.t/5,p.x+p.t/5,p.y+p.t/5,14+p.t%2) end) -- draw outside of the screen for screenshake rectfill(-5,-5,-1,133,0) rectfill(-5,-5,133,-1,0) rectfill(-5,128,133,133,0) rectfill(128,-5,133,133,0) -- credits if is_title() then print("x+c",58,80,5) print("matt thorson",42,96,5) print("noel berry",46,102,5) end if level_index()==30 then local p for i=1,count(objects) do if objects[i].type==player then p = objects[i] break end end if p~=nil then local diff=min(24,40-abs(p.x+4-64)) rectfill(0,0,diff,128,0) rectfill(128-diff,0,128,128,0) end end end function draw_object(obj) if obj.type.draw ~=nil then obj.type.draw(obj) elseif obj.spr > 0 then spr(obj.spr,obj.x,obj.y,1,1,obj.flip.x,obj.flip.y) end end function draw_time(x,y) local s=seconds local m=minutes%60 local h=flr(minutes/60) rectfill(x,y,x+32,y+6,0) print((h<10 and "0"..h or h)..":"..(m<10 and "0"..m or m)..":"..(s<10 and "0"..s or s),x+1,y+1,7) end -- helper functions -- ---------------------- function clamp(val,a,b) return max(a, min(b, val)) 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 1 or v<0 and -1 or 0 end function maybe() return rnd(1)<0.5 end function solid_at(x,y,w,h) return tile_flag_at(x,y,w,h,0) end function ice_at(x,y,w,h) return tile_flag_at(x,y,w,h,4) end function tile_flag_at(x,y,w,h,flag) for i=max(0,flr(x/8)),min(15,(x+w-1)/8) do for j=max(0,flr(y/8)),min(15,(y+h-1)/8) do if fget(tile_at(i,j),flag) then return true end end end return false end function tile_at(x,y) return mget(room.x * 16 + x, room.y * 16 + y) end function spikes_at(x,y,w,h,xspd,yspd) for i=max(0,flr(x/8)),min(15,(x+w-1)/8) do for j=max(0,flr(y/8)),min(15,(y+h-1)/8) do local tile=tile_at(i,j) if tile==17 and ((y+h-1)%8>=6 or y+h==j*8+8) and yspd>=0 then return true elseif tile==27 and y%8<=2 and yspd<=0 then return true elseif tile==43 and x%8<=2 and xspd<=0 then return true elseif tile==59 and ((x+w-1)%8>=6 or x+w==i*8+8) and xspd>=0 then return true end end end return false end __gfx__ 000000000000000000000000088888800000000000000000000000000000000000aaaaa0000aaa000000a0000007707770077700000060000000600000060000 000000000888888008888880888888880888888008888800000000000888888000a000a0000a0a000000a0000777777677777770000060000000600000060000 000000008888888888888888888ffff888888888888888800888888088f1ff1800a909a0000a0a000000a0007766666667767777000600000000600000060000 00000000888ffff8888ffff888f1ff18888ffff88ffff8808888888888fffff8009aaa900009a9000000a0007677766676666677000600000000600000060000 0000000088f1ff1888f1ff1808fffff088f1ff1881ff1f80888ffff888fffff80000a0000000a0000000a0000000000000000000000600000006000000006000 0000000008fffff008fffff00033330008fffff00fffff8088fffff8083333800099a0000009a0000000a0000000000000000000000600000006000000006000 00000000003333000033330007000070073333000033337008f1ff10003333000009a0000000a0000000a0000000000000000000000060000006000000006000 000000000070070000700070000000000000070000007000077333700070070000aaa0000009a0000000a0000000000000000000000060000006000000006000 555555550000000000000000000000000000000000000000008888004999999449999994499909940300b0b0666566650300b0b0000000000000000070000000 55555555000000000000000000000000000000000000000008888880911111199111411991140919003b330067656765003b3300007700000770070007000007 550000550000000000000000000000000aaaaaa00000000008788880911111199111911949400419028888206770677002888820007770700777000000000000 55000055007000700499994000000000a998888a1111111108888880911111199494041900000044089888800700070078988887077777700770000000000000 55000055007000700050050000000000a988888a1000000108888880911111199114094994000000088889800700070078888987077777700000700000000000 55000055067706770005500000000000aaaaaaaa1111111108888880911111199111911991400499088988800000000008898880077777700000077000000000 55555555567656760050050000000000a980088a1444444100888800911111199114111991404119028888200000000002888820070777000007077007000070 55555555566656660005500004999940a988888a1444444100000000499999944999999444004994002882000000000000288200000000007000000000000000 5777777557777777777777777777777577cccccccccccccccccccc77577777755555555555555555555555555500000007777770000000000000000000000000 77777777777777777777777777777777777cccccccccccccccccc777777777775555555555555550055555556670000077777777000777770000000000000000 777c77777777ccccc777777ccccc7777777cccccccccccccccccc777777777775555555555555500005555556777700077777777007766700000000000000000 77cccc77777cccccccc77cccccccc7777777cccccccccccccccc7777777cc7775555555555555000000555556660000077773377076777000000000000000000 77cccc7777cccccccccccccccccccc777777cccccccccccccccc777777cccc775555555555550000000055555500000077773377077660000777770000000000 777cc77777cc77ccccccccccccc7cc77777cccccccccccccccccc77777cccc775555555555500000000005556670000073773337077770000777767007700000 7777777777cc77cccccccccccccccc77777cccccccccccccccccc77777c7cc77555555555500000000000055677770007333bb37000000000000007700777770 5777777577cccccccccccccccccccc7777cccccccccccccccccccc7777cccc77555555555000000000000005666000000333bb30000000000000000000077777 77cccc7777cccccccccccccccccccc77577777777777777777777775777ccc775555555550000000000000050000066603333330000000000000000000000000 777ccc7777cccccccccccccccccccc77777777777777777777777777777cc7775055555555000000000000550007777603b333300000000000ee0ee000000000 777ccc7777cc7cccccccccccc77ccc777777ccc7777777777ccc7777777cc77755550055555000000000055500000766033333300000000000eeeee000000030 77ccc77777ccccccccccccccc77ccc77777ccccc7c7777ccccccc77777ccc777555500555555000000005555000000550333b33000000000000e8e00000000b0 77ccc777777cccccccc77cccccccc777777ccccccc7777c7ccccc77777cccc7755555555555550000005555500000666003333000000b00000eeeee000000b30 777cc7777777ccccc777777ccccc77777777ccc7777777777ccc777777cccc775505555555555500005555550007777600044000000b000000ee3ee003000b00 777cc777777777777777777777777777777777777777777777777777777cc7775555555555555550055555550000076600044000030b00300000b00000b0b300 77cccc77577777777777777777777775577777777777777777777775577777755555555555555555555555550000005500999900030330300000b00000303300 5777755777577775077777777777777777777770077777700000000000000000cccccccc00000000000000000000000000000000000000000000000000000000 7777777777777777700007770000777000007777700077770000000000000000c77ccccc00000000000000000000000000000000000000000000000000000000 7777cc7777cc777770cc777cccc777ccccc7770770c777070000000000000000c77cc7cc00000000000000000000000000000000000000000000000000000000 777cccccccccc77770c777cccc777ccccc777c0770777c070000000000000000cccccccc00000000000000000000000000006000000000000000000000000000 77cccccccccccc77707770000777000007770007777700070002eeeeeeee2000cccccccc00000000000000000000000000060600000000000000000000000000 57cc77ccccc7cc7577770000777000007770000777700007002eeeeeeeeee200cc7ccccc00000000000000000000000000d00060000000000000000000000000 577c77ccccccc7757000000000000000000c000770000c0700eeeeeeeeeeee00ccccc7cc0000000000000000000000000d00000c000000000000000000000000 777cccccccccc7777000000000000000000000077000000700e22222e2e22e00cccccccc000000000000000000000000d000000c000000000000000000000000 777cccccccccc7777000000000000000000000077000000700eeeeeeeeeeee000000000000000000000000000000000c0000000c000600000000000000000000 577cccccccccc7777000000c000000000000000770cc000700e22e2222e22e00000000000000000000000000000000d000000000c060d0000000000000000000 57cc7cccc77ccc7570000000000cc0000000000770cc000700eeeeeeeeeeee0000000000000000000000000000000c00000000000d000d000000000000000000 77ccccccc77ccc7770c00000000cc00000000c0770000c0700eee222e22eee0000000000000000000000000000000c0000000000000000000000000000000000 777cccccccccc7777000000000000000000000077000000700eeeeeeeeeeee005555555506666600666666006600c00066666600066666006666660066666600 7777cc7777cc777770000000000000000000000770c0000700eeeeeeeeeeee00555555556666666066666660660c000066666660666666606666666066666660 777777777777777770000000c0000000000000077000000700ee77eee7777e005555555566000660660000006600000066000000660000000066000066000000 57777577775577757000000000000000000000077000c007077777777777777055555555dd000000dddd0000dd000000dddd0000ddddddd000dd0000dddd0000 000000000000000070000000000000000000000770000007007777005000000000000005dd000dd0dd000000dd0000d0dd000000000000d000dd0000dd000000 00aaaaaaaaaaaa00700000000000000000000007700c0007070000705500000000000055ddddddd0dddddd00ddddddd0dddddd00ddddddd000dd0000dddddd00 0a999999999999a0700000000000c00000000007700000077077000755500000000005550ddddd00ddddddd0ddddddd0ddddddd00ddddd0000dd0000ddddddd0 a99aaaaaaaaaa99a7000000cc0000000000000077000cc077077bb07555500000000555500000000000000000000000000000000000000000000000000000000 a9aaaaaaaaaaaa9a7000000cc0000000000c00077000cc07700bbb0755555555555555550000000000000c000000000000000000000000000000c00000000000 a99999999999999a70c00000000000000000000770c00007700bbb075555555555555555000000000000c00000000000000000000000000000000c0000000000 a99999999999999a700000000000000000000007700000070700007055555555555555550000000000cc0000000000000000000000000000000000c000000000 a99999999999999a07777777777777777777777007777770007777005555555555555555000000000c000000000000000000000000000000000000c000000000 aaaaaaaaaaaaaaaa07777777777777777777777007777770004bbb00004b000000400bbb00000000c0000000000000000000000000000000000000c000000000 a49494a11a49494a70007770000077700000777770007777004bbbbb004bb000004bbbbb0000000100000000000000000000000000000000000000c00c000000 a494a4a11a4a494a70c777ccccc777ccccc7770770c7770704200bbb042bbbbb042bbb00000000c0000000000000000000000000000000000000001010c00000 a49444aaaa44494a70777ccccc777ccccc777c0770777c07040000000400bbb004000000000001000000000000000000000000000000000000000001000c0000 a49999aaaa99994a7777000007770000077700077777000704000000040000000400000000000100000000000000000000000000000000000000000000010000 a49444999944494a77700000777000007770000777700c0742000000420000004200000000000100000000000000000000000000000000000000000000001000 a494a444444a494a7000000000000000000000077000000740000000400000004000000000000000000000000000000000000000000000000000000000000000 a49499999999494a0777777777777777777777700777777040000000400000004000000000010000000000000000000000000000000000000000000000000010 00000000000000008242525252528452339200001323232352232323232352230000000000000000b302000013232352526200a2828342525223232323232323 00000000000000a20182920013232352363636462535353545550000005525355284525262b20000000000004252525262828282425284525252845252525252 00000000000085868242845252525252b1006100b1b1b1b103b1b1b1b1b103b100000000000000111102000000a282425233000000a213233300009200008392 000000000000110000a2000000a28213000000002636363646550000005525355252528462b2a300000000004252845262828382132323232323232352528452 000000000000a201825757243434344400000000000000003500000000003500000000000000b327374700410000015637b2000000000000000000000000a200 0000000000b357b2002100000000a282000000000000000000560000005526365555555656b28292001111575555555555019200829200000000a28237373737 0000000000000000a2828225353535450000000000000000b10000000000b1000000000000000000b3273747930000b137273737373737373737374711000061 000000110000b100b357b20000006182000000000000000000000000005600005555468282828201a35555555555555555820000a20011111100008283373737 0000000000000093a382822535353545000061000011000000000011000000001100000000000000000000560182001137373737373737373737373737b20000 0000b357b200000000b10000000000a200000000000000009300000000000000555582828283828282565656555555555592000000112434440000a282373737 00000000000000a2828382253535354500000000b335b2936100b335b20061005493a30000000000000000b1a282935437373737373737373737373737b20000 000000b10000001100000000000000000000000093000086820000a3000000005555828201a200a282829200565656565511111111243535450000b337373737 00000000000000008282822636363646820000a300b1a382930000b100000000568283931100000000000011a382825637373737373737829200a20137b20061 000000000000b357b2000061000000000000a385828286828282828293000000555583829200000000a20000000000005555555555263636460000b337373737 00000011111111a3828201b1b1b1b1b182938282930082820000000000000000b100a282541100000000b354828283b137373737373737610000869200000000 00100000000000b1000000000000000086938282828201920000a20182a37686555582829300000000000000000000005555555555558283920000b337373737 00008624442444828382829300000000828282828283829200000000000061001100a382565400000000b356a2829211373737378382a2000000a20000000000 00571111111111111111111111110061828282a28382820000000000828282825555829200000000000000000000000055555555555501a2000000b337373737 00000126462545373737374700000000828300a282828201939300001100000054828292b1559300000000b100a282543737373792000000000000a300000000 0027373737373737373737373757b2008282920082829200061600a3828382a25555000000000000000000000000000055555555555592000011111137373737 0000a28282264655b1b1b1b1000000009200000000a28282828293b354b2000056820100115582a3000000110082825637103737610000000000008293000000 0057828382828257828282828254b20083820000a282d3000717f38282920000555500000000000093000000000000005555555555550000b337373737373737 000000828392b35500000000002100000000000000000082828282b355b20000b1a282835455820193000054a38292b137710000000000009300008382000000 00b1a282820182b1a28283a28256b20054829300008224343434344482000054565600000000000082920000000000005656565656560000b337373737373737 000000a28200b35600000000a35400000010000000111111118283b356b200a30000828256559200828300568283001137930000000000008200008282920000 0000009261a28200008261008282000055920000005725353535354582243434000000000000000082000085860000008382829200000000b337373737373737 0000100082000082000000a2825500003535351111273737470182829200008300009200b1550000a28200008282005437829200000000a38292008282000000 00858600008282a3828293008292610055001000002535353535353544253535000000f3100000a3820000a2010000008292000000009300b337373737373737 5700243444b200839321008683559300353535353535c000a28282820000a38210000000a3568000008293008292005637820000000000828300a38201000000 00a282828292a2828283828282000000343434344425353535353535452535350000005454000083829300008200c1008210d3e300a38200b337373737373737 2444253545b28682825482820155820035353535353500000082829200008282540000008382930000a28201820000b137839300000000828200828282930000 0000008382000000a28201820000000035353535452535353535353545253535000000552444008282820000829300005454545401828393b337373737373737 525252525262b2b1b1b1132323526200845223232323232352522323233382825252525252525252525284522333b2822323232323526282820000b342525252 52845252525252848452525262838242528452522333828292425223232352520000000000000000000000000000000000000000000000000000000000000000 525252845262b2000000b1b1b142620023338276000000824233b2a282018283525252845252232323235262b1b10083921000a382426283920000b342232323 2323232323232323232323526201821352522333b1b1018241133383828242840000000000000000000000000000000000000000000000000000000000000000 555555555555b20000000000a255557682828392000011a256b200a382549200243434344456b1b1b1b12646000000823737374782373782410000b33782a2a2 a1829200a2828382820182244400a2832444b1b10000832444b2000080012444000000000000a300000000000000000000000000000000000000000000000000 555555555555b20000001100825555928201a20000b3540092000000835500002535353545b200000000b3550000a382828283838237373737b200b337928000 000100110092a2829211a2264600a3822545b2000000a22646b20000868225450000000000000100009300000000000000000000000000000000000000000000 373737373755b200a37655b2a25555838292000000b35500000000a3825500002535353545b200000000b355829300a2838292019237373737b2000000000000 00a2b357b2a36182b357b200110000822545b200000000b1b10000a283a2254500000000a30082000083000000000000000000000094a4b4c4d4e4f400000000 373737373755b200a28355b2215555928300000000b3550000000000a255e3412535353545b200000000b35592000000829200000037373737b2000000000000 000000b100a2828200b100b357b211a22545b200000000000000000092b32545000000008276820000010093000000000000000000b595f5c5d5e5f500000000 373737373755b221008255b2715656008293858693b3551111111111115524442535353545b200001100b355b2000000821111111137373737b2000000000000 000000000000110176851100b1b3576126461111111100000061000000b32646000000008283826777827682000000000000000000e696f6c6d6e6f600000000 82000000a255115400a255b200010193828283825737373737373737374625452535353545b200b35400b355b2000000823737373737373737b2000011000000 0000000000b35782828354b26100b100373737373737b200000000000000b15500000000a282a3555593839200000000000000000097a7b7c7d7e7f700000000 9200110000565655b2002637373737379200a2000001828282829200b33425452636363646b261b35500b3550000000092b1b1b1b1b1b33737b200b337b20000 001100000000b1a2828256b200000000373737373737b200001111000000b355000000868382555555558293a300000000000000002737472737473500000000 00b354b200a28355b2000000a28293b3000000000000a2828382827655552545b1b1b1b156b200b35593b35561000000000000000000b33737b271b337b20000 b357b211000000110092b100000000a3b1b1b1b1b1b10011112444110000b355000000a28255555555555555838600000000000000b1b1b1b1b1b10000000000 80b355b20000825511111111008283b311111111110000829200928255552545000000a3820000b35582b35600000000000000000000b3373711111137b20000 00b1b357b200b354b200000000000082b21000000000b32434353646b200b3568585868292555555555555558282860000000000000000000000000000000000 00b356b20000a25656565656008292b35555555555111157b20000a25555254500000001839200b3558282820000000011111111930011373737373737b20000 100000b10000b355b200000000858682b27100000000b3253546b1b1000000b182018283005555555555555500a2820000000000000000000000000000000000 9300b100000000b1b1b1b1b100a200b355555555555555b100000000b1b1264500000000820000b35582839200000000373737378283373737373737b2000000 549300000000b356b200000000a20182111111110000b32646b100a30061000000a28293f3555555555555550000820000000000000000000000000000000000 829200001000410000000000000000b39310d30000a28200000000000000824500000086827600b35500a282760000003737373700828200a30182a2006100a3 55820000000000b100000093a382838224343444b20000b1b1000083000000860000555555555555555555551111111100000000000000000000000000000000 017685a35555551111111111002100b355555593000182930000000080a301461000a383829200b356000083920000003737373700a282828283920000000082 55839321000000000000a3828282820125353545b261000093000082a300a3821000555555555555555555555555555500000000000000000000000000000000 828382825555555555555555007100b355555582a38283820000000000838282320001828200000083000082010000003737373771718283820000000000a382 558201549300000000a282828382828225353545b20000a38300a382018283825555555555555555555555555555555500000000000000000000000000000000 __label__ 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000f000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000f00000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000770000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000770000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f00000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000f00000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000f00000000000000000000000000000000000000000 00000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000070000000000000000006000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000f00000000000060600000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000d000600000000000000660000000000000000000000000000000f0000000000000 0000000000000000000000000000000000000000000000000000000000000d00000c00f000000000066000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000d000000c000000000000000000000000000000000000000000000000060000000000 00000000000000000000000000000000000000000000000000000000000c0000000c000600000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000d000000000c060d0000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000c00000000000d000d000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000006666600666666006600c00066666600066666006666660066666600000000000000000000000000000000000000 0000000000000000000000000000000000006666666066666660660c000066666660666666606666666066666660000000000000000000000000000000000000 00000000000000000000000000000000000066000660660000006600000066000000660000000066000066000000000000000000000000000000000000000000 000000000000000000000000000000000000dd000000dddd0000dd000000dddd0000ddddddd000dd0000dddd0000000000000000000000000000000000000000 000000000000000000000000000000000000dd000dd0dd000000dd0000d0dd000000000000d000dd0000dd000000000000000000000000000000000000000000 000000000000000000000000000000000000ddddddd0dddddd00ddddddd0dddddd00ddddddd000dd0000dddddd00000000000000000000000000000000000000 0000000000000000000000000000000000000ddddd00ddddddd0ddddddd0ddddddd00ddddd0000dd0000ddddddd000000f000000000000000f00000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000c000000000000000000000000000000c00000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000c00000000000000000000000000000000c0000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000cc0000000000000000000000000000000000c000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000c000000000000000000000000000000000000c000000000000000000000000000000000000000000000 0000000000000000000000000000f0f0f0f0f0f0f0f0c0f00000000000000000000000000000000000c000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000100000000000000000000000000000000000000c00c000000000000000000000000000000000000000000 000000000000000000000000000000000000000000c0000000000000000000000000000000000000001010c0f000000000000000000000000000000000000000 000000000000000000000000000000000000000001000000000000000000000000000000000000000001000c00000000000000000000000000000000f0f0f0f0 00000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000600000000000000000000000000000000 000000000000000000000000000000000000000001000000000000000000000000000000000000000000000010000000000000f000f000f000f000f000f00000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000010000000000000000000000000000000000000000000000000010000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000f0000000f00000000000f00000000000f0f0f000f00000000000f0000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000f0f00000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000f00000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000f000f0000000f000f000f000f000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000f000f000f000f0000000f000f0000000000000000000000000 00f000f000f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000005050000005500000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000005050050050006000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000500555050000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000005050050050000000000000600000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000005050000005500000000000f00000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000 0000000000000000000000000000000000000000000000000f00000000000000000000000000000000000000000000000000000000000000000000000f000000 00000000000000000000000f000000000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000 000000f000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000000000000000 00f000f000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000007f0000000006600000000000000000f0000000000000000000f000f0000000000000000 00000000000000000f00000000000000000000000000000000000000000000000000660000000000000000000000000000000000000000000000000000000000 0000000000000000000000000f00000000000000000000000f00000f000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000f00000000000000000000000000000000000000000000000000000f000f0000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000f0000000000000555055505550555000f0555050500550555005500550550000000000000000000000000000000000000000 00000000000f000000000000000000000000f0000055505050050005000000050050505050505050005050505000000000000000000000000000000000000000 00000000000000000000000000000000000000000050505550050005000000050055505050550055505050505000000000000000000000000000000000000000 0000000000000000000000f00000000000000000005050505005000500000005005050505050500050505050500000000000000000000000000f0000f0000000 00000000000000000000000000000000000000000050505050050005000000050f50505500505055005500505000000000000000000000000000000000000000 00000000000000000000000000f00000000000000000000f0000000000000000000000000000000000000000000000000000000f000000000000000000000000 00000000000000000000000000000000000f00000000605500055055505000f00055505550555055505050000000000000000000000000000000000000000000 000000000000000000000000000000000000000f000000505050505000500000005050500050505050505000000000000000000000000000000000000000f000 00000000000000000000000000000000000000000000005050505055005000000055005500550055005550000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000005050505050005000000050505000505050500050000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000f0505055005550555000005550555050505f505550000000000000000000000000000000000000000000 00000000000000000000000000000000000000f00000000000000000000000f0000000000000000000000000000000000000f000000000000000000000000000 0000000000000000f000000000f0000000000000f0f0f0f000f0f0f0f0f000000000000000000000000000000000000000000000000000000f00000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000f000000000 000000000000f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f00000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000 000000000006000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000f000000000000000000000000600000000000000000000000000000000000000000 00000000000000000000000000000f0000000000000000000000000000000000000000000000000000000000000000000000000000000f000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000f0000000000000000000000000000000000000000000000000f00000000f00000000000000000000000000000000000 00000f00000f0000000f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000000f0000000000000000000 0f0000000000000000000000000000000000000f00000000000f000000f000000000000000000000000000000000000000000000000000000000000000000000 00000000000000f0000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000f000000000000000f0000000000000f00000000000000000000000000000000000000000000000000000000f 0000000000000000f00000000000000000f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000f00000000000000f00000000000000000000000000000000000000000000000f0f0000000000000000000000000 00000000000000000000000000f000f00f0f00f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 __gff__ 0000000000000000000000000000000004020000000000000000000200000000030303030303030304040402020000000303030303030303040404020202020200001313131302020302020202020002000013131313020204020202020202020000131313130004040202020202020200001313131300000002020202020202 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 __map__ 2331252548252532323232323300002425262425252631323232252628282824252525252525323328382828312525253232323233000000313232323232323232330000002432323233313232322525252525482525252525252526282824252548252525262828282824254825252526282828283132323225482525252525 252331323232332900002829000000242526313232332828002824262a102824254825252526002a2828292810244825282828290000000028282900000000002810000000372829000000002a2831482525252525482525323232332828242525254825323338282a283132252548252628382828282a2a2831323232322525 252523201028380000002a0000003d24737373731028292900284545003a387555555555555500002900002a0065555528382900003a676838280000000000003828393e003a280000000000002800555353535353535353535353532828535355556565294a4a4a00004a2a6565555553282828282900002a28282838285353 3232330828282900000000003f7272727373732828290000002a556500002a7555555555550000000000000000006555290000000045454528280000000000002a2828555555290000000000002839555353535353535353535353532828535355552b000000000000001c00003b555553282828000000000028282828285353 7373283828293a28390000007272727273737329000000000000550000000075651b6555553d3f00000000000000006500001c3a3a65656575283900000000000010282828290000000011113a2828555353535353105353532828282838535355552b000000000000000000003b5555532a2828670016002a28283828285353 7311111128102829000000000000727273424200000000110000650000003e751b001b65454545000000000000000000395868282828656528290000000000002a2828290000000000005555283828292828535353282829002a002a2828535355652b0c00000011110000000c3b655553112810000000006828282828285353 737373731728280000000000003a287273003d003a393b452b00000000007573001a001b55555511111111000000002c28382828283855552800000017170000002a000000001111000055551028290028281b1b1b282800002800002a53535355294a0000003b53532b000000002a55535328283a67003a28282829002a5353 73733828282900000000000000283872737373451029005539000000005875730000003a72737373737374675800003c282828281028555529000000000000000000000000005555003a5555282800003828390000002a290000000000535353554a4a000000004a4a4a000000004a5553532828283800282828390000001700 7300002a28000000003a283a2828117273737365283900552858390068287573000000282828282872742828283945452829002a28285555000000000000000000000000000055382828555555000000282828290028282800163a676828280065674a0b00492828282800000b00006553282828282868282828280000001700 730000002867580000281028287272727373736528286755282828382828757300003a28382810291b1b2a28382855552a0000002838555500000017170000000000000000005528282a285555390000282900000000280000002a2828282900294a4a00492828284a4a28000000002a28282838282828282828290000000000 0000003a28283800112828283828727273737365002a285529002a28287573730000002a282828000000002810285555000000002a285555000000000000000000000000000055280000002a2828390028000000392828000028000028280000004a4a00002a494a4a00002a2a0000002a282828281028282828675800000000 0000004647282817552800002a28727273737365003a2855000000002a28287500000000002a281111111128282855550000003a28286565000000000000171700013f0000005529000000003828000028013a28282828580000003a28290000004a4a0c002a2a2a4a0c00002a28000c00002a2828282828292828290000003a 0001105657282a555529001111117272002873653a382955001a000000002a750000000000002872737374292a0055553e013a3828292a00000000000000000055555555000055000000003d2a28671453535328282828283900582838283d00004a4a000000492a2a00000000002a0000002a28282a29000058100012002a28 55555555551400555511117272727272002a3865282900551111110000003a2800013f0000002a285555290000005555737373742900000000000000171700002a285539003a5500003a005555555555535353535353532828282810282853530b4a292a00000b4a2a0028000b0000002c00002838000000002a283917000028 5555555555551155555572727272727200012a2828673f757575750000003828727374000012002a55550000001255557373737400000000171700000000000000385528392855080028676855282828535353535353532a28285353535353534a29012a0000002828280000000028003c0168282800171717003a2800003a28 55555555555555555555727272727272727373737373737573737467586828285555550000450000555500000045656573737374171700000000000000000000002a5528102855003a282828552828285353535353535300002a5353535353534a5353534a4a4a4a4a2828284a284a4a53535353286700000000282839002838 2532330000002432323232323232252525252628282828242532323232254825253232323232323225262828282448252525253300000000000000000000005225253232323233313232323233282900262829286700000000002828313232322525253233282800312525482525254825254826283828313232323232322548 26282800000030402a282828282824252548262838282831333828290031322526280000163a28283133282838242525482526000000000000000000000000522526000016000000002a10282838390026281a3820393d000000002a3828282825252628282829003b2425323232323232323233282828282828102828203125 6528390000006500002a3828002a5555737373282828287528292a0000002a656528111611282828000028002a535353535353000000000000000000000000535555000000001111000000292a28290055283a2875107511111155555528281073737328382800003b73732b002a2a38282828282829002a2800282838282862 28281029000000000000282839005555737373282900287567000000000000003810555555283829003a1029002a535353535367000000000000000000005353555539000000454500000000007373735555555555555555555555555528282873737328282800003b73732b00000028102829000000000029002a2828282900 2828280016000000162a2828280055557373734500002a7529000000000000002872737374292a0000002a00111153535353282800002c46472c00000053535355552800003a555500001600007373735555555555555555555555555575283873737328292867000028290000000000283800111100001200000028292a1600 283828000000000000003a28290055557373736500000029000000000000003a293b5555283900000000003b535353535353382867003c56573c5353535353536565283900285565111111111173737355555555751b1b1b1b1b55555528282873737300002a28143a2900000000000028293b42440000170000112867000000 2828286758000000586828380000656573737375000000000000000000452828003b5555290000000000003b535353535353282828395353535353535353000029002a28382872737373737373737373555555555500000000005555552810287373731111117573751111111100000000003b6264111111111145282900003b 2828282810290000002a28286700002873737375111100000000000011552838003b6565000000000000002a28535353532a282810285353535353535353000000160028282829000000000073737373555555555567580000007500002a28287373737373737373737373737439000000003b72737373737374553800000017 282900002a0000000000382a29003a282828287575750000000000007555282800002a29000011110000000028282853530029002a285353535353000000000039003a282900000000000000002873735555555555382900000017000058682873731028293b7373737373282828000000003b751b1b1b1b1b1b552800000017 283a0000000000000000280000002828283810292a000000000000002a6510281111111111115353000000002a28380b5300000000535353535353001c0000002828281000000000001100002a382829555555555528000000001700002a424328282908003b737373737328282912000000001b00000000000055290000003b 3829000000000000003a102900002838282828000000000000000000002a2828535353535353530000000000002828395300000000535353535353000000000028382829000000003b752b00682828005555555555290000000000000000625328280000003b7373737373382800170000000000000000110000650000000000 290000000000000000002a000000282928292a0000000000000000000000282a532838282829000000000000001028280000000053535353535328390000000028002a0000110000001b002a7510292c1b1b1b1b0000000000000000000010622829160000001b1b1b737328106700000000001100003a4500001b0000000000 00000100000011111100000000002a3a2a0000000000000000000000002a2800282829002a000000000000000028282800000000535353535353282800000000290000003b752b39000000002900003c000000000000000000000000000028282800000000000000001b1b2a2829000001000045390038550000000000000000 1111431111114573450000001212002a00010000000000000000000000002900290000000000000000002a6768282900003f01005353535353532810673a3900013f0000002a3829001100000000007301000000000000003a67000000002a382867586800000100000000682800000042440055282928550000000000000000 53535353535373737311111175751111004539000017170000001717000000000001000000001717000000282838393a0053535353535353535328282838290073732b00000828393b73000000001473450000001200000028290000000000282828102867001717171717282839000062643955101228550000000000000000 636363636363657365727373737373733a553800000000000000000000000000001717000000000000003a28282828280053535353535353532828282828283973732b00003a28103b73000000737373550000004500003a28000000000000282838282828390000005868283828000042443855281728550000000000000000 __sfx__ 0002000036370234702f3701d4702a37017470273701347023370114701e3700e4701a3600c46016350084401233005420196001960019600196003f6003f6003f6003f6003f6003f6003f6003f6003f6003f600 0002000011070130701a0702407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000300000d07010070160702207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000200000642008420094200b420224402a4503c6503b6503b6503965036650326502d6502865024640216401d6401a64016630116300e6300b62007620056100361010600106000060000600006000060000600 000400000f0701e070120702207017070260701b0602c060210503105027040360402b0303a030300203e02035010000000000000000000000000000000000000000000000000000000000000000000000000000 000300000977009770097600975008740077300672005715357003470034700347003470034700347003570035700357003570035700347003470034700337003370033700337000070000700007000070000700 00030000241700e1702d1701617034170201603b160281503f1402f120281101d1101011003110001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100 00020000101101211014110161101a120201202613032140321403410000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100 00030000070700a0700e0701007016070220702f0702f0602c0602c0502f0502f0402c0402c0302f0202f0102c000000000000000000000000000000000000000000000000000000000000000000000000000000 0003000005110071303f6403f6403f6303f6203f6103f6153f6003f6003f600006000060000600006000060000600006000060000600006000060000600006000060000600006000060000600006000060000600 011000200177500605017750170523655017750160500605017750060501705076052365500605017750060501775017050177500605236550177501605006050177500605256050160523655256050177523655 002000001d0401d0401d0301d020180401804018030180201b0301b02022040220461f0351f03016040160401d0401d0401d002130611803018030180021f061240502202016040130201d0401b0221804018040 00100000070700706007050110000707007060030510f0700a0700a0600a0500a0000a0700a0600505005040030700306003000030500c0700c0601105016070160600f071050500a07005050030510a0700a060 000400000c5501c5601057023570195702c5702157037570285703b5702c5703e560315503e540315303e530315203f520315203f520315103f510315103f510315103f510315103f50000500005000050000500 000400002f7402b760267701d7701577015770197701c750177300170015700007000070000700007000070000700007000070000700007000070000700007000070000700007000070000700007000070000700 00030000096450e655066550a6550d6550565511655076550c655046550965511645086350d615006050060500605006050060500605006050060500605006050060500605006050060500605006050060500605 011000001f37518375273752730027300243001d300263002a3001c30019300003000030000300003000030000300003000030000300003000030000300003000030000300003000030000300003000030000300 011000002953429554295741d540225702256018570185701856018500185701856000500165701657216562275142753427554275741f5701f5601f500135201b55135530305602454029570295602257022560 011000200a0700a0500f0710f0500a0600a040110701105007000070001107011050070600704000000000000a0700a0500f0700f0500a0600a0401307113050000000000013070130500f0700f0500000000000 002000002204022030220201b0112404024030270501f0202b0402202027050220202904029030290201601022040220302b0401b030240422403227040180301d0401d0301f0521f0421f0301d0211d0401d030 0108002001770017753f6253b6003c6003b6003f6253160023650236553c600000003f62500000017750170001770017753f6003f6003f625000003f62500000236502365500000000003f625000000000000000 002000200a1400a1300a1201113011120111101b1401b13018152181421813213140131401313013120131100f1400f1300f12011130111201111016142161321315013140131301312013110131101311013100 001000202e750377502e730377302e720377202e71037710227502b750227302b7301d750247501d730247301f750277501f730277301f7202772029750307502973030730297203072029710307102971030710 000600001877035770357703576035750357403573035720357103570000700007000070000700007000070000700007000070000700007000070000700007000070000700007000070000700007000070000700 001800202945035710294403571029430377102942037710224503571022440274503c710274403c710274202e450357102e440357102e430377102e420377102e410244402b45035710294503c710294403c710 0018002005570055700557005570055700000005570075700a5700a5700a570000000a570000000a5700357005570055700557000000055700557005570000000a570075700c5700c5700f570000000a57007570 010c00103b6352e6003b625000003b61500000000003360033640336303362033610336103f6003f6150000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000c002024450307102b4503071024440307002b44037700244203a7102b4203a71024410357102b410357101d45033710244503c7101d4403771024440337001d42035700244202e7101d4102e7102441037700 011800200c5700c5600c550000001157011560115500c5000c5700c5600f5710f56013570135600a5700a5600c5700c5600c550000000f5700f5600f550000000a5700a5600a5500f50011570115600a5700a560 001800200c5700c5600c55000000115701156011550000000c5700c5600f5710f56013570135600f5700f5600c5700c5700c5600c5600c5500c5300c5000c5000c5000a5000a5000a50011500115000a5000a500 000c0020247712477024762247523a0103a010187523a0103501035010187523501018750370003700037000227712277222762227001f7711f7721f762247002277122772227620070027771277722776200700 000c0020247712477024762247523a0103a010187503a01035010350101875035010187501870018700007001f7711f7701f7621f7521870000700187511b7002277122770227622275237012370123701237002 000c0000247712477024772247722476224752247422473224722247120070000700007000070000700007002e0002e0002e0102e010350103501033011330102b0102b0102b0102b00030010300123001230012 000c00200c3320c3320c3220c3220c3120c3120c3120c3020c3320c3320c3220c3220c3120c3120c3120c30207332073320732207322073120731207312073020a3320a3320a3220a3220a3120a3120a3120a302 000c00000c3300c3300c3200c3200c3100c3100c3103a0000c3300c3300c3200c3200c3100c3100c3103f0000a3300a3201333013320073300732007310113000a3300a3200a3103c0000f3300f3200f3103a000 00040000336251a605000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005 000c00000c3300c3300c3300c3200c3200c3200c3100c3100c3100c31000000000000000000000000000000000000000000000000000000000000000000000000a3000a3000a3000a3000a3310a3300332103320 001000000c3500c3400c3300c3200f3500f3400f3300f320183501834013350133401835013350163401d36022370223702236022350223402232013300133001830018300133001330016300163001d3001d300 000c0000242752b27530275242652b26530265242552b25530255242452b24530245242352b23530235242252b22530225242152b21530215242052b20530205242052b205302053a2052e205002050020500205 001000102f65501075010753f615010753f6152f65501075010753f615010753f6152f6553f615010753f61500005000050000500005000050000500005000050000500005000050000500005000050000500005 0010000016270162701f2711f2701f2701f270182711827013271132701d2711d270162711627016270162701b2711b2701b2701b270000001b200000001b2000000000000000000000000000000000000000000 00080020245753057524545305451b565275651f5752b5751f5452b5451f5352b5351f5252b5251f5152b5151b575275751b545275451b535275351d575295751d545295451d535295351f5752b5751f5452b545 002000200c2650c2650c2550c2550c2450c2450c2350a2310f2650f2650f2550f2550f2450f2450f2351623113265132651325513255132451324513235132351322507240162701326113250132420f2600f250 00100000072750726507255072450f2650f2550c2750c2650c2550c2450c2350c22507275072650725507245072750726507255072450c2650c25511275112651125511245132651325516275162651625516245 000800201f5702b5701f5402b54018550245501b570275701b540275401857024570185402454018530245301b570275701b540275401d530295301d520295201f5702b5701f5402b5401f5302b5301b55027550 00100020112751126511255112451326513255182751826518255182451d2651d2550f2651824513275162550f2750f2650f2550f2451126511255162751626516255162451b2651b255222751f2451826513235 00100010010752f655010753f6152f6553f615010753f615010753f6152f655010752f6553f615010753f61500005000050000500005000050000500005000050000500005000050000500005000050000500005 001000100107501075010753f6152f6553f6153f61501075010753f615010753f6152f6553f6152f6553f61500005000050000500005000050000500005000050000500005000050000500005000050000500005 002000002904029040290302b031290242b021290142b01133044300412e0442e03030044300302b0412b0302e0442e0402e030300312e024300212e024300212b0442e0412b0342e0212b0442b0402903129022 000800202451524515245252452524535245352454524545245552455524565245652457500505245750050524565005052456500505245550050524555005052454500505245350050524525005052451500505 000800201f5151f5151f5251f5251f5351f5351f5451f5451f5551f5551f5651f5651f575000051f575000051f565000051f565000051f555000051f555000051f545000051f535000051f525000051f51500005 000500000373005731077410c741137511b7612437030371275702e5712437030371275702e5712436030361275602e5612435030351275502e5512434030341275402e5412433030331275202e5212431030311 002000200c2750c2650c2550c2450c2350a2650a2550a2450f2750f2650f2550f2450f2350c2650c2550c2450c2750c2650c2550c2450c2350a2650a2550a2450f2750f2650f2550f2450f235112651125511245 002000001327513265132551324513235112651125511245162751626516255162451623513265132551324513275132651325513245132350f2650f2550f2450c25011231162650f24516272162520c2700c255 000300001f3302b33022530295301f3202b32022520295201f3102b31022510295101f3002b300225002950000000000000000000000000000000000000000000000000000000000000000000000000000000000 000b00002935500300293453037030360303551330524300243050030013305243002430500300003002430024305003000030000300003000030000300003000030000300003000030000300003000030000300 001000003c5753c5453c5353c5253c5153c51537555375453a5753a5553a5453a5353a5253a5253a5153a51535575355553554535545355353553535525355253551535515335753355533545335353352533515 00100000355753555535545355353552535525355153551537555375353357533555335453353533525335253a5753a5453a5353a5253a5153a51533575335553354533545335353353533525335253351533515 001000200c0600c0300c0500c0300c0500c0300c0100c0000c0600c0300c0500c0300c0500c0300c0100f0001106011030110501103011010110000a0600a0300a0500a0300a0500a0300a0500a0300a01000000 001000000506005030050500503005010050000706007030070500703007010000000f0600f0300f010000000c0600c0300c0500c0300c0500c0300c0500c0300c0500c0300c010000000c0600c0300c0100c000 0010000003625246150060503615246251b61522625036150060503615116253361522625006051d6250a61537625186152e6251d615006053761537625186152e6251d61511625036150060503615246251d615 00100020326103261032610326103161031610306102e6102a610256101b610136100f6100d6100c6100c6100c6100c6100c6100f610146101d610246102a6102e61030610316103361033610346103461034610 00400000302453020530235332252b23530205302253020530205302253020530205302153020530205302152b2452b2052b23527225292352b2052b2252b2052b2052b2252b2052b2052b2152b2052b2052b215 __music__ 01 150a5644 00 0a160c44 00 0a160c44 00 0a0b0c44 00 14131244 00 0a160c44 00 0a160c44 02 0a111244 00 41424344 00 41424344 01 18191a44 00 18191a44 00 1c1b1a44 00 1d1b1a44 00 1f211a44 00 1f1a2144 00 1e1a2244 02 201a2444 00 41424344 00 41424344 01 2a272944 00 2a272944 00 2f2b2944 00 2f2b2c44 00 2f2b2944 00 2f2b2c44 00 2e2d3044 00 34312744 02 35322744 00 41424344 01 3d7e4344 00 3d7e4344 00 3d4a4344 02 3d3e4344 00 41424344 00 41424344 00 41424344 00 41424344 00 41424344 00 41424344 01 383a3c44 02 393b3c44 |
TO LOAD THIS CART in immediate mode, type:
load #psychedelic_flappy
Having taken a look at @taxicomics excellent 280-character Flappy Bird:
https://www.lexaloffle.com/bbs/?tid=46858
I went about to see if I could write my own, where the game increases in speed depending upon your score, and managed to do so.
It's called "psychedelic" because the walls all use an interesting pattern depending upon your score.
Use the 🅾️ key to flap. I also tried to make it very much like the original FLAPPY game where you just tap the key and already the bird is bouncing up - that and the opening size. It also only has one set of walls you must pass so there is no chance for the game to be impossible with two openings too close to each other for the player to navigate.
I've not had much time lately but thought I'd throw up a WIP that I've been playing with for a few days as a bit of a distraction from...everything. It's one of the longer pieces I've done so far at just a bit under three minutes and probably one of the first that feels like a whole piece rather than just a section or an experiment.
There's a couple rather clunky key changes which stick out like sore thumbs. Still figuring those out. Sometimes they work for me and sometimes they don't and I haven't quite figured out how to turn one that's not working into one that does. But I'm getting there. So far I'm only using 3 of the four channels so I'll probably add some percussion-y and/or other decorations in on that fourth channel at some point. Which might actually help with the key changes? Maybe? Don't know.
PEKA in dungeon
by Speder Cat Studios and Wotesi
about
This is Zelda style game with randomly generated dungeons, mobs and items. There are unlimited floors and randomly generated secret floor, where additional items can be found. Every 10th level is boss level. Boss level can be escaped when boss HP is <50. Every second boss HP adds +1. When boss HP exceeds 50, exit stairs disappears. Boss hits with random ATK 3-5. In boss level every 3rd second some item for player is dropped. At some level dirt spots are randomly generated. When players steps on dirt, speed is reduced. AT some level fire traps are randomly generated. When player steps on fire traps, its HP is deducted by -1. During the play items for player are randomly generated and put in vases, small chests or big chests. Items are weapons, armor, throw items and food. Each weapon and throw item have MAX hit points. During attack hit points are randomly generated between predefined MIN and MAX. Each weapon and armor have limited number of uses, after which player looses that item. Armor gives player additional protection. After armor is lost, player HP points are deducted. Food gives additional HP. All this information is visible in inventory menu.
Dragon Castle
・ Action RPG
・ Play time is about 60 minutes
Control
・Direction key: Move the player
About the game
・ You are a brave warrior. The game is over when you defeat the dragon and get the crown.
・ Let's find out the hidden tools
・ Defeat enemies, gain experience points, and level up.
・ There is no attack button, let's hit the body
・ HP recovers if not moving
・ Auto save
This game was inspired by the hydride of PC-88.
Work in progress to begin my semester
So I'm learning all this stuff about programing right. And I find it really boring to do yet another variation on foobar. So I said, I want to make games.
So I did. I present to you...
UNTITLED SHIP GAME!!!!
*waaa waaa
So I've been coming back to this project, after my midterms, and added some new features to make the game more... gamey.
I want to try my hand in making some animated enemies, that shoot their own bullets etc.
After that, add a level system, and maybe a win condition.
Changelog: Update 1 (030822): Added bullets, collisions, and asteroids to dodge and destroy. Update 2 (300522): Added game over screen, sfx, changed some values for gameplay. Update 3 (010622): -Added simple UI. -Added feedback animation and sound for getting hit. -Disabled collisions for a few seconds after getting hit. |