local gc=love.graphics local rnd=math.random local int,max=math.floor,math.max local perfect={"Perfect!","Excellent!","Nice!","Good!","Great!","Just!","300"} local great={"Pay attention!","Be carefully!","Teacher behind you!","Feel tired?","You are in danger!","Do your homework!","A good game!","Minecraft!","y=ax^2+bx+c!","No music?","Internet unavailable.","It's raining!","Too hard!","Shorter?","Higher!","English messages!","Hi!","^_^","Drop!","Colorful!",":)","100$","~~~wave~~~","★★★","中文!","NOW!!!!!","Also try the TEN!","I'm a programer!","Also try minesweeperZ!","This si Dropper!","Hold your calculatoor!","Look! UFO!","Bonjour!","[string]","Author:MrZ","Boom!","PvZ!","China!","TI-nspire!","I love LUA!"} local miss={"Oops!","Uh-oh","Ouch!","Oh no."} local scene={} local highScore,highFloor=0,0 local move,base local state,message local speed local score,floor,camY local color1,color2={},{} local function restart() move={x=0,y=260,l=500} base={x=40,y=690,l=1200} message="Welcome" speed=10 score=0 floor=0 camY=0 for i=1,3 do color1[i]=rnd() color2[i]=rnd() end end function scene.sceneInit() restart() state='menu' BGM.play('hang out') BG.set('space') love.keyboard.setKeyRepeat(false) end function scene.sceneBack() love.keyboard.setKeyRepeat(true) end function scene.keyDown(key) if key=="space"or key=="return"then if state=='move'then if floor>0 then if move.xbase.x then move.x=move.x-10 end end SFX.play('swipe') state='drop' elseif state=='dead'then move.x,move.y,move.l=1e99,0,0 base.x,base.y,base.l=1e99,0,0 state='scroll' elseif state=='menu'then restart() state='move' end elseif key=="escape"then SCN.back() end end function scene.mouseDown(_,_,k) if k==1 then scene.keyDown("space") end end function scene.touchDown() scene.keyDown("space") end function scene.update() if state=='move'then move.x=move.x+speed if speed<0 and move.x<=0 or speed>0 and move.x+move.l>=1280 then SFX.play('lock') speed=-speed end elseif state=='drop'then move.y=move.y+18 if move.y>=660 then if move.x>base.x+base.l or move.x+move.l0 and move.x==base.x then SFX.play('ren_mega') end state='shorten' end end elseif state=='shorten'then if move.x>base.x+base.l or move.x+move.lbase.x+base.l then move.l=move.l-5 else state='climb' end elseif state=='climb'then if base.y<720 then move.y=move.y+3 base.y=base.y+3 camY=camY+3 else if move.x==base.x and move.x+move.l==base.x+base.l and floor~=0 then score=score+2 message=perfect[rnd(1,3)] else score=score+1 message=great[rnd(1,table.maxn(great))] end for i=1,3 do color2[i]=color1[i] color1[i]=rnd() end base.x=move.x base.y=690 base.l=move.l floor=floor+1 if rnd()<.5 then move.x=-move.l speed=10 else move.x=1280 speed=-10 end move.y=rnd(max(260-floor*4,60),max(420-floor*5,100)) state='move' end elseif state=='die'then move.y=move.y+18 if move.y>1000 then highScore=max(score,highScore) highFloor=max(floor,floor) state='dead' end elseif state=='scroll'then camY=camY-floor/4 if camY<1000 then camY=camY-1 end if camY<500 then camY=camY-1 end if camY<0 then restart() state='move' end end end local backColor={ {.71,1,.71}, {.47,.86,1}, {.63,.78,1}, {.71,.71,.71}, {.59,.55,.55}, {.43,.43,.43,.9}, {.34,.34,.34,.8}, {.26,.26,.26,.7}, } backColor.__index=function(t,lv) local a=backColor[#backColor][4]-.1 t[lv]={.26,.26,.26,a} return t[lv] end setmetatable(backColor,backColor) function scene.draw() --Background local lv,height=int(camY/700),camY%700 gc.setColor(backColor[lv+1]or COLOR.D) gc.rectangle('fill',0,720,1280,height-700) gc.setColor(backColor[lv+2]or COLOR.D) gc.rectangle('fill',0,height+20,1280,-height-20) if height-680>0 then gc.setColor(backColor[lv+3]or COLOR.D) gc.rectangle('fill',0,height-680,1280,680-height) end if state=='menu'or state=='dead'then setFont(100) gc.setColor(COLOR.rainbow_light(TIME()*2.6)) mStr("DROPPER",640,120) gc.setColor(COLOR.rainbow_gray(TIME()*1.626)) setFont(55) mStr("Score - "..score,640,290) mStr("High Score - "..highScore,640,370) mStr("High Floor - "..highFloor,640,450) gc.setColor(0,0,0) setFont(35) mStr(MOBILE and"Touch to Start"or"Press space to Start",640,570) setFont(20) gc.print("Original CX-CAS version by MrZ",740,235) gc.print("Ported / Rewritten / Balanced by MrZ",740,260) end if state~='menu'then --High floor gc.setColor(1,1,1) gc.setLineWidth(2) local y=690+camY-30*highFloor gc.line(0,y,1280,y) gc.setLineWidth(6) gc.rectangle('line',move.x-3,move.y-3,move.l+6,36) gc.rectangle('line',base.x-3,base.y-3,base.l+6,36) setFont(45) gc.print(floor+1,move.x+move.l+15,move.y-18) gc.print(floor,base.x+base.l+15,base.y-18) gc.setColor(1,1,1) mStr(message,640,0) gc.setColor(0,0,0) mStr(message,643,2) setFont(70) gc.setColor(1,1,1) gc.print(score,60,40) gc.setColor(0,0,0) gc.print(score,64,43) gc.setColor(color1)gc.rectangle('fill',move.x,move.y,move.l,30) gc.setColor(color2)gc.rectangle('fill',base.x,base.y,base.l,30) end end scene.widgetList={ WIDGET.newButton{name="back",x=1140,y=60,w=170,h=80,font=40,code=pressKey"escape"}, } return scene