ß3333#""2#""2#""2#""2#""2#""23333ÌÌìÌÀÀî̬ÀÌÀ¬ÀÀÀ¬ÀÀÀ¬ÀÀÎÌÌÌ̈ˆˆ¬ªªª¬ˆˆˆ¬ÌÌ̬ÌÌ̬ÌÀ̬ÌÀÌÌÌìÌÀÀî̬ÀÌ̬ÀÀÀ¬ÀÀÀ¬ÀÀ""""""""""""""""""""""""""!!!!!!UUUU%URR""""""""""""""""""""̬̪ªÀ쬪ÀÀÀÌîÀìîÌÌîî""""333#333#333#""""3#333#333#33""""""""""""""""""""""!!!""""!!!"""" """""""" """""""" """" UUUUffffffffffffwwwwwgfwgfwgfUUUUffffffffffffwwwwfffffffffwgfwgfwgfwgfwgfwgfwgfwgfffffffffffffffffffffffffCDD4D4CDDC4DDD4DD4CDDDDDD4CDCDD4#""2"2#""#2"""2""2#""""""2#"#""21111111@DD CDDÄCC4ÄCC4DCC4DCDDDCDDD033!!!!!!!@ 4Ä4Ä4D4C@Â" Ì" À"ÂÐ Ð @@4C4C@@PPPPPPpWvpp0 0 3D3D 3C 3C"33D"23DDÌ@CD @CD @CD@33DD@ 4Ä4Ä4D4C@@ @ 0 00@"2 "323"233 ##""""2#3#2333#3""" ""!!!!!! ""30334D" """ "" """ "" """" "" " """" """""""""" ""ÐÝÝ ÐÝÝ àÞÝ 0000"""""""@ôD@DDBô ""3333" """""""@ôD@DDBô033 """""""@ôD@DDBô ""33" """"OôDDÿÿ""33 """"OôDD""33 "" ""@ôD@DD@ô """"""""""""""@ôD033 '""p ""@ôD@DD@ô "03'p11!""0012!13"3"0$"B03 "     €#ST#€€€#ST#€€€€€€€€€€€#STAAA#€€€€€#ST#€€€#ST#€€€€€òSTAAA#€€AAA€€€€€€òST#òST#€€òSTAAA#€€€#ST#€€òST#€€€ò!!!!STAAAò€€ò!!!!STòò!!!!!!!STò€€€ò!!!!!!!!!!!!STAAAò„„#!!!!!!!!!!!!!!!!STò#!!!!!!!!!!!!!!!!ST#STññññññññññññññññññññññññññññññSTññSTññSTññSTññSTññSTññ!!!!STññ!!!!!STññ€STññpSTññ!!!!STññ!STññ!p!p!CD!!!!!!STññCDST!STññCDSTST!STññ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!STñññññññññññññññññññññññññññññ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""ãã""""""""ãã""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""ããóóóóóóóóãã""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""ããóóóóóóóóãã""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""óóóóóóóó""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"""""""óó"""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"""""""óó"""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"óóóóóóóóóóóóóó"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"ã""""""""""""ã"€!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"ã""""""""""""ã"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!€!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!€€##!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!€!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!€!!!!€CDSTSTSTSTSTSTSTSTSTç€STAAAASTæäåCDSTôõæSTSTAAAAAAAAAAAãAASTSTãCDSTSTæãSTSTSTAãAAAAAAAAAAAAppppppppSTöãppppSTãæ€óóóóóóóóóóóóóóóóóóóóóóóópSTAAAAAAAAAAãAAAAAó"AA"ó"AA"ñòpppSTãñññòòppSTãæñññòòppppSTAAAAAAAAAAAAAAAAAAñññòòpppppSTAAAAAAAAAAAAAAñòòSTñAAAAAASTAAAñSTñSTAAAñóóóóóóóóóóóóóóóóóóóóóSTAAA# >¾?""""333333333333!#""2#""2#""2DÌDÌDÌ@DDD@@D!#""2#""2#""2@CD @CD @CD D@DDDD@D@!#""2#""2#""2@CD @CD @CD D@DD@DD""""#""2#""2#""2@CD@CD@CDDDD@D@D!#""2#""2#""2@33@33@33@D@D@DDD@@D!#""2#""2#""2DDDDDD!333333333333""""3333!DÌDÌ#""2DÌDÌDÌÌÌÀ ÌÀÌ Ì Ì !@CD @CD #""2@CD @CD @CD À ÌÀÀÌÌÌÀ ÀÀ À!@CD @CD #""2@CD @CD @CD À À ÌÌ ÌÀ Ì Ì ÌÌ""""@CD@CD#""2@CD@CD@CDÀ À Ì ÌÀ À ÀÀ!@33@33#""2@33@33@33À À ÀÌÌÀÌÌÌ Ì !DDDD#""2DDDDDD!3333""""3333""""""""""""!DÌDÌ#""2DÌDÌDÌDÌDÌD!@CD @CD #""2 @CD @CD @CD @CD @CD @C!@CD @CD #""2@CD @CD @CD @CD @CD @C""""@CD@CD#""2""""""""""""@CD@CD@CD@CD@CD@C!@33@33#""2@33@33@33@33@33@3!DDDD#""2DDDDDDDDDDD!3333""""333333333333333333333333333333!#""2#""2#""2#""2#""2#""2#""2#"!#""2#""2#""2#""2#""2#""2#""2#"!#""2#""2#""2#""2#""2#""2#""2#"""""#""2#""2#""2#""2#""2#""2#""2#"!#""2#""2#""2#""2#""2#""2#""2#"!#""2#""2#""2#""2#""2#""2#""2#"!333333333333333333333333333333""""!DÌDÌ!@CD @CD !@CD @CD """"@CD@CD!@33@33!DDDD!""""!DÌDÌDÌ!@CD @CD @CD !@CD @CD @CD """"@CD@CD@CD!@33@33@33!DDDDDD!""""33333333!#""2#""2DÌDÌ!#""2#""2@CD @CD !#""2#""2@CD @CD """"#""2#""2@CD@CD!#""2#""2@33@33!#""2#""2DDDD!33333333DÌDÌDÌ@CD @CD @CD @CD @CD @CD @CD@CD@CD@33@33@33DDDDDD"""UUUUUUUU""""DÌDÌ%URR%URR@ôD@CD @CD """"""""@DD@CD @CD """"""Bô@CD@CD"""""" ""@33@33""""""""3333DDDD""""""" """"""33333333333333333333UUUUUUUU""""""""#""2#""2#""2#""2#""2%URR%URR""""""#""2#""2#""2#""2#""2""""""""""""""#""2#""2#""2#""2#""2""""""""""""#""2#""2#""2#""2#""2""""""""""""#""2#""2#""2#""2#""2""""""""""""""""#""2#""2#""2#""2#""2""""""""""""33333333333333333333""""""""""""""""""""""""""""""""""""""""DÌDÌDÌ"""""""""""" @CD @CD @CD """"""""""""@CD @CD @CD """"""""""""""""""""""""@CD@CD@CD""""""""""""@33@33@33""""""""""""""""DDDDDD""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""3333333333333333333333333333333333333333333333333333333333333333""""""""33333333333333333333""""""""33!#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2""""""#""2#""2#""2#""2#""2""""""#"!#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2""""""#""2#""2#""2#""2#""2""""""#"!#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2""""""#""2#""2#""2#""2#""2""""""#"""""#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2""""""#""2#""2#""2#""2#""2""""""#"!#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2""""""""#""2#""2#""2#""2#""2""""""""#"!#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2#""2""""""#""2#""2#""2#""2#""2""""""#"!3333333333333333333333333333333333333333333333333333333333333333""""""33333333333333333333""""""33""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""¾)-- title: Plumber World -- author: Madadog -- desc: Scour the map for coins -- script: lua function smw_init() -- physics vars rt=0 t=0 pause=false debug=false slowmo=false inc=false rinc=10 -- controller vars c={x=0, y=0,} -- camera vars cam={x=0, y=0, xt=0, yt=0, xo=0, yo=0, center=true, follow=true, s=1, } -- player vars p={s=256, sf=0, x=80, y=40, xv=0, yv=0, xa=0, ya=0, jt=0, jb=false, og=true, at=0, hp=1, movestyle="walk"} -- score vars sc={g=0, } player_accel=player_modernwalk init_map(0,0) main=smw end function smw() debug_keys() if not pause or inc then inc=false c.x=0 c.y=0 if btn(0) then c.y=-1 end if btn(1) then c.y=1 end if btn(2) then c.x=-1 end if btn(3) then c.x=1 end if btnp(5) and (p.og or p.at<6) then p.og=false p.jb=false end --player_accel() player_accel() player_move_modulo() player_hitbox() player_animate() camera_move() cls(0) draw_map() spr(p.s,math.floor(p.x-cam.x)*cam.s,math.floor(p.y-cam.y)*cam.s,0,cam.s,p.sf,0,1,1) if debug then local pog=0 local pjb=0 if p.og then pog=1 end if p.jb then pjb=1 end print("x="..p.x .."\ny="..p.y .."\nxv="..p.xv .."\nyv="..p.yv .."\nxa="..p.xa .."\nya="..p.ya .."\njt="..p.jt .."\njb="..pjb .."\nog="..pog .."\nat="..p.at .."\nmove="..p.movestyle ,0,0,12,false,1,true) end print("Gold: "..sc.g,188,1,4) print("Time: "..rt,188,9,12) if pause then print("Paused!",50,40,11) end t=t+1 end if sc.g<50 then rt=rt+1 end --804 hs end main=smw_init function TIC() main() end function player_fly() p.xa=c.x p.ya=c.y local f=0.4 p.xa=p.xa*f p.ya=p.ya*f local s=0.5 p.xv=p.xv+p.xa*s p.yv=p.yv+p.ya*s p.xv=p.xv*0.9 p.yv=p.yv*0.9 end function player_walk() local f=0.1 -- friction -- preserve air momentum if not p.og then f=0 -- air control if c.x*c.x>0.1 then p.xa=lerp(p.xa,c.x*1.2,0.3) p.xa=lerp(p.xa,0,0.01) end else -- land control p.xa=lerp(p.xa,c.x*1.2,0.6) if c.x*c.x>0.1 then f=0.01 end end if btn(4) then f=0.2 end -- apply friction p.xa=lerp(p.xa,0,f) -- jump, control jump height, defy gravity if p.og then p.ya=0 elseif (btn(5) and p.jt<25 and not p.jb) then p.ya=0 p.yv=(-(2.5+p.xv*p.xv*0.2)+p.jt*0.1)*1.2 p.jt=p.jt+1 else p.jb=true if p.yv<3 then p.ya=p.ya+0.08 end end -- land movement if p.og then p.xv=lerp(p.xv,p.xa,f+0.03) else -- change air momentum ONLY when left/right pressed if c.x*c.x>0.1 then p.xv=lerp(p.xv,p.xa,f+0.03) end end -- game breaks if this lerp isn't 0.3, don't ask why p.yv=lerp(p.yv,p.ya,0.3) end function player_modernwalk() if btn(4) then c.x=c.x*0.5 end --if btnp(4) then p.xa=c.x*40 end if p.og then p.xa=c.x*1.16 elseif c.x*c.x>0.1 then p.xa=lerp(p.xa,c.x*1.16,0.99) else p.xa=lerp(p.xa,c.x*1.16,0.25) end --if btn(4) then p.xa=p.xa*0.5 end -- jump, control jump height, defy gravity if p.og then p.yv=0 elseif (btn(5) and p.jt<25 and not p.jb) then p.yv=0 p.yv=(-2.5+p.jt*0.1)*0.83 p.jt=p.jt+1 else p.jb=true if p.yv<3 then p.yv=lerp(p.yv,0.07*(p.at-p.jt),0.2) end end local s=0.25 local fric=1 p.xv=p.xv*(1-fric)+p.xa*fric --p.yv=p.yv+p.ya*s end function player_move() -- increment airtime if not p.og then p.at=p.at+1 end -- collision points local w=7 local h=7 local NW={x=p.x,y=p.y} local NE={x=p.x+w,y=p.y} local SW={x=p.x,y=p.y+h} local SE={x=p.x+w,y=p.y+h} -- collision points moved local xm=p.x+p.xv local ym=p.y+p.yv local NWm={x=xm,y=ym} local NEm={x=xm+w,y=ym} local SWm={x=xm,y=ym+h} local SEm={x=xm+w,y=ym+h} local coltile=127 -- test x collision if mcol(NWm.x//8,NW.y//8) or mcol(NEm.x//8,NE.y//8) or mcol(SWm.x//8,SW.y//8) or mcol(SEm.x//8,SE.y//8) then p.xv=0 p.xa=0 end -- test y collision if mcol(NW.x//8,NWm.y//8) or mcol(NE.x//8,NEm.y//8) or mcol(SW.x//8,SWm.y//8) or mcol(SE.x//8,SEm.y//8) then --raycast downwards collision if p.yv>1 then for i=p.yv,1,-0.5 do if not(mcol(SW.x//8,(SW.y+i)//8) or mcol(SE.x//8,(SE.y+i)//8)) then p.y=p.y+i break end end p.ya=0 else p.jb=true end p.yv=0 end -- test diag collision -- update collision points local xm=p.x+p.xv local ym=p.y+p.yv local NWm={x=xm,y=ym} local NEm={x=xm+w,y=ym} local SWm={x=xm,y=ym+h} local SEm={x=xm+w,y=ym+h} if mcol(NWm.x//8,NWm.y//8) or mcol(NEm.x//8,NEm.y//8) or mcol(SWm.x//8,SWm.y//8) or mcol(SEm.x//8,SEm.y//8) then p.yv=0 end -- test if falling if p.og and not (mcol(SW.x//8,(SWm.y+1)//8) or mcol(SE.x//8,(SEm.y+1)//8)) then p.og=false end -- test if landing if not p.og and p.yv>=0 and (mcol(SW.x//8,(SWm.y+1)//8) or mcol(SE.x//8,(SEm.y+1)//8)) then p.og=true p.jt=0 p.at=0 end -- move if there's no reason not to p.x=p.x+p.xv p.y=p.y+p.yv end function player_move_modulo() -- increment airtime if not p.og then p.at=p.at+1 end -- collision points local mapw=240*8 local maph=136*8 local w=7 local h=7 local NW={x=p.x%mapw,y=p.y%maph} local NE={x=(p.x+w)%mapw,y=p.y%maph} local SW={x=p.x%mapw,y=(p.y+h)%maph} local SE={x=(p.x+w)%mapw,y=(p.y+h)%maph} -- collision points moved local xm=(p.x+p.xv)%mapw local ym=(p.y+p.yv)%maph local NWm={x=xm%mapw,y=ym%maph} local NEm={x=(xm+w)%mapw,y=ym%maph} local SWm={x=xm%mapw,y=(ym+h)%maph} local SEm={x=(xm+w)%mapw,y=(ym+h)%maph} local coltile=127 -- test x collision if mcol(NWm.x//8,NW.y//8) or mcol(NEm.x//8,NE.y//8) or mcol(SWm.x//8,SW.y//8) or mcol(SEm.x//8,SE.y//8) then p.xv=0 p.xa=0 end -- test y collision if mcol(NW.x//8,NWm.y//8) or mcol(NE.x//8,NEm.y//8) or mcol(SW.x//8,SWm.y//8) or mcol(SE.x//8,SEm.y//8) then --raycast downwards collision if p.yv>1 then for i=p.yv,1,-0.5 do if not(mcol(SW.x//8,(SW.y+i)//8) or mcol(SE.x//8,(SE.y+i)//8)) then p.y=p.y+i break end end p.ya=0 else p.jb=true end p.yv=0 end -- test diag collision -- update collision points local xm=(p.x+p.xv)%mapw local ym=(p.y+p.yv)%maph local NWm={x=xm%mapw,y=ym%maph} local NEm={x=(xm+w)%mapw,y=ym%maph} local SWm={x=xm%mapw,y=(ym+h)%maph} local SEm={x=(xm+w)%mapw,y=(ym+h)%maph} if mcol(NWm.x//8,NWm.y//8) or mcol(NEm.x//8,NEm.y//8) or mcol(SWm.x//8,SWm.y//8) or mcol(SEm.x//8,SEm.y//8) then p.yv=0 end -- test if falling if p.og and not (mcol(SW.x//8,(SWm.y+1)//8) or mcol(SE.x//8,(SEm.y+1)//8)) then p.og=false end -- test if landing if not p.og and p.yv>=0 and (mcol(SW.x//8,(SWm.y+1)//8) or mcol(SE.x//8,(SEm.y+1)//8)) then p.og=true p.jt=0 p.at=0 end -- move if there's no reason not to p.x=p.x+p.xv p.y=p.y+p.yv end function player_animate() if c.x>0.5 then p.sf=0 elseif c.x<-0.5 then p.sf=1 end --if p.anim==0 then p.s=256 end if c.x*c.x>0.1 then p.s=256+(t//(8/c.x))%3 elseif c.y>0.5 then p.s=273 else p.s=256 end if p.hp<1 then p.s=259 end end -- check if you're intersecting anything, interact. function player_hitbox() -- initialise points local mapw=240*8 local maph=136*8 local w=7 local h=7 local NW={x=p.x%mapw,y=p.y%maph} local NE={x=(p.x+w)%mapw,y=p.y%maph} local SW={x=p.x%mapw,y=(p.y+h)%maph} local SE={x=(p.x+w)%mapw,y=(p.y+h)%maph} -- collect coins coincol(NW.x//8,NW.y//8) coincol(NE.x//8,NE.y//8) coincol(SW.x//8,SW.y//8) coincol(SE.x//8,SE.y//8) end function mcol(x,y) local tile=mget(x,y) if tile<128 and tile>0 then return true else return false end end function coincol(x,y) if mget(x,y)==128 then sc.g=sc.g+1 mset(x,y,0) if sc.g>999 then main=gold_over end end if mget(x,y)==132 then player_damage() end end function player_damage() if p.hp>0 then p.hp=p.hp-1 if p.hp==0 then cam.follow=false player_accel=player_dying p.movestyle="dying" p.jt=0 p.yv=0 p.xv=0 end end end function player_dying() if p.hp<-15 then p.y=p.y+(-1.5+0.05*-(p.hp+20)) p.x=p.x+0.1*(-p.sf*2+1) else p.x=p.x+math.sin(p.hp)*0.8 p.y=p.y+math.sin(p.hp*8)*0.3 end p.hp=p.hp-1 if p.hp<-140 then main=game_over end end function game_over() cls(0) spr(259,110,50,-1,2,0,1) print("Gold: "..sc.g,188,1,4) print("Time: "..rt,188,9,12) print("PLUMBER FELL OVER.\n ...play again?",80,80,12) if sc.g==60 then print("You feel like a real plumber",0,0,4) elseif sc.g>49 then print("There's still some\nmore gold left...",0,0,4) end if btnp(1) or btnp(2) or btnp(3) or btnp(4) or btnp(5) or btnp(6) then reset() end end function gold_over() cls(0) spr(259,110,50,-1,2,0,1) print("Gold: "..sc.g,188,1,4) print("Time: "..rt,188,9,12) print("Mario ate too much\ngold and died.\n ...play again?",80,80,12) print("Too greedily, too deep.",0,0,4) if btnp(1) or btnp(2) or btnp(3) or btnp(4) or btnp(5) or btnp(6) then reset() end end -- camera management function camera_move() if cam.center then p.xo=(120-4*cam.s)/cam.s p.yo=(68-4*cam.s)/cam.s else p.xo=0 p.yo=0 end if cam.follow then cam.tx=p.x-p.xo cam.ty=p.y-p.yo end cam.x=math.floor(lerp(cam.x,cam.tx,1)) --cam.y=0 cam.y=math.floor(lerp(cam.y,cam.ty,1)) end -- add enemies function init_map(mx,my) for i=0,30 do for j=0, 17 do local x=i+mx*30 local y=j+my*30 local tile=mget(x,y) if tile==128 then --mset(x,y,0) end end end end function draw_map() --top left map((cam.x//240)*30, (cam.y//136)*17, 30,17, -(cam.x%240)*cam.s, -(cam.y%136)*cam.s,-1,cam.s,animate_coins) --top right map(((cam.x+240)//240)*30, (cam.y//136)*17, 30,17, (-(cam.x%240)+240)*cam.s, -(cam.y%136)*cam.s,-1,cam.s,animate_coins) --bottom left map((cam.x//240)*30, ((cam.y+136)//136)*17, 30,17, -(cam.x%240)*cam.s, (-(cam.y%136)+136)*cam.s,-1,cam.s,animate_coins) --bottom right map(((cam.x+240)//240)*30, ((cam.y+136)//136)*17, 30,17, (-(cam.x%240)+240)*cam.s, (-(cam.y%136)+136)*cam.s,-1,cam.s,animate_coins) end function animate_coins(tile,x,y) local outtile=tile if tile==128 then outtile=144+math.floor(t//10)%4-((math.floor(t//10)%4)//3)*2 end return outtile end -- debug stuff function debug_keys() if keyp(28) then player_accel=player_walk p.movestyle="slidey" end if keyp(29) then player_accel=player_fly p.movestyle="fly" end if keyp(30) then player_accel=player_modernwalk p.movestyle="walk" p.at=0 end if keyp(37) and cam.s>1 then cam.s=cam.s-1 end if keyp(38) then cam.s=cam.s+1 end if keyp(50) then pause=not pause print("Paused!",50,40,11) end if keyp(39) and rinc>1 then rinc=rinc-1 end if keyp(40) then rinc=rinc+1 end if keyp(41) then slowmo=not slowmo end if pause and keyp(1) or (slowmo and rt%rinc==0) then inc=true end if keyp(4) then debug=not debug end end -- helper functions function lerp(a,b,n) return a+(b-a)*n end