D DTLDDDEDeDD D D4LDDDCD#DD D DLDDDADDD M4 D DLDDDKDDD D D$LDDDBDDD D DLDDDIDDDLDDU Dd 3 eD3633LDD3 D$ 3 #D3233LDD D 3 ́D3833D = 4LDD D 3 ̫D3:33LDD" D 3 D3133LDD D 3 ̉D3833 " " " " " "" "" """ 0 0 0 330 C403DD3D3 " " "" """ "" """" """" """"" ""  # 2,  "  <" ̪ " " " " " " "" "" "" C40 330 C40 330 C40 330 03CDC33DC33D3 " "" " "  "" """ "  # 2,  2,#  ̪ """""""""""""""""" """"""3"3"3""3""3""3""3""3333333333333333303333333DDDDDD3DD3DD3DD3DD3DDPUUUPUUUUUUUUUUUUUUUUUUUUUUUUU """" """"""""""""""""""""""3""3""3"3"3333333033333333333333333303333DD3DDDDDDDDDD3DD3DDUUUUUUUPUUUUPUUUUUUUUUPUUUU """"""""""""""""3333333333333333333333333DD3DD3DD3DD3DD3DD3DD3DDUUUUUUUUUUUUUUUUUUPUUUUUUUUUU     ̈ ʫ Pu7PDPEPePPWsDTVffVefVefVUUeVUUefVefVeffPu7PDPEPePPWsDTVUfPu7PDPEPeUfWsDTVPuGPDPEPePPWtDTVD ̙C`Vle`fU`fPfDfffUfffCggg@ 4 ̪@4̜  Uf``f@`UlVfUU4vfgfg`UPPeUUf@4`fhfhUflffU`fPfDfffUfffCggg//,, //  "" 3324C#24C# 33 ""  ,,      2,#  !"23!CD2!C!C!C"3#D4@#444!C!C!C2!CD23!"444@#D43#"  @00@@0  0@  ! <333<"""<"""̬3333""""""""̪3333""""""""̪3333""""""""̪3333""""""""̪3333""""""""̪3333""""""""̪3333""""""""̪3333""""""""̪3333""""""""̪3333""""""""̪3333""""""""̪3333""""""""̪ 333""""""̪ʙə" "" "33C4C433̜ ɈȈ ̙ ̬ ʙə 0PP0 #24 M  0000000000  {pP0 a p@ ::;<=>????????????????????????<=>???????????????????????????  p p p ppp 000/0?0O0_0o00000000123456789:;<=>?h>""""3333DDPUUUU """""33333DDUUUUU """""33333DDPUUUUU """"""333333DDUUUUUU"" ""33033DDUU""""3333DDUU """"3333DDUU """"3333DDUU""""3333DDUU"" ""33033DDUU """"""33333DDUUUU """""33333DDPUUUU"""""33333DDUUUU""""33333DDPUUUU ""33033DDPUU ""3333DDUU""3333DDUU""3333DDUU ""3333DDUU""3333DDPUU""3333DDUUUUUU""3333DDUUUUU""3333DDUUUUU""3333DDUUUU ɐɐ̐ ɐ̜ ̜̐̐ ɐɐɐɐ ɐɐɐɜɐɐɐɐɐ ɐ ̐ ɐɐ ,0,]']>S}Wup8d%qy)6o;]AsVl3S}Wup8d%qy)6o;]AsVl3S}Wup8d%qy)6o;]AsVl3S}Wup8d%qy)6o;]AsVl3S}Wup8d%qy)6o;]AsVl3S}Wup8d%qy)6o;]AsVl3S}Wup8d%qy)6o;]AsVl32 then player.b=2 end end if btn(0) then if player.y>8 then player.y=player.y-1 end elseif btn(1) then if player.y<128 then player.y=player.y+1 end end if btn(2) then if player.x>65 then player.x=player.x-1 player.dir=-1 end elseif btn(3) then if player.x<175 then player.x=player.x+1 player.dir=1 end end if player.ct==0 then if btn(4) then local b={ x=player.x,y=player.y,f=0,vx=0,vy=-4 } playSound(4) table.insert(pBullets,b) player.ct=player.cd end else player.ct=player.ct-1 end if player.b>1 then if btnp(5) then player.b=player.b-1 burst={x=player.x-8,y=player.y-8,f=1} playSound(8) --counter-burst if player.inv>=105 then player.inv=0 player.l=player.l+1 incAchievement(5) end for k,v in pairs(enemies) do if v.hp>50 then v.hp=v.hp-50 else killEnemy(k,v) end end clearBullets() end end end function clearBullets() for k,v in pairs(eBullets) do addScore(10) instantiateFx(3,v.x,v.y) end eBullets={} end function bossCtrl() if btnp(4) then nextSpeech() end end function movement() --fx processFX() --player if player.inv>0 then player.inv=player.inv-1 end if burst.f>0 then burst.f=burst.f+1 if burst.f>136 then burst.f=0 end end --enemies for k,v in pairs(enemies) do move(v) if boss then bossXY.x=v.x bossXY.y=v.y if v.inv~=nil and v.inv>0 then --move back towards center v.vx=(120-v.x)/v.inv v.vy=(32-v.y)/v.inv v.inv=v.inv-1 elseif v.inv==0 and not speaking then --set boss move pattern v.inv=-1 local boss=bosses[curLevel][bossPhase] v.vx=boss.vx or 0 v.vy=boss.vy or 0 end if speaking then v.vx=v.vx*0.97 v.vy=v.vy*0.97 if math.floor(v.x)==120 then v.vx=0 v.vy=0 end else --bounce off the walls if v.x<65 or v.x>175 then v.vx=-v.vx end end end if alive and not speaking then if v.inv==nil or v.inv<=0 then v.cd=v.cd-1 if v.cd==0 then shoot(v.pt,v.x,v.y) v.cd=patterns[v.pt][1].cd end end end end for k,v in pairs(cores) do move(v) if v.y>150 or v.y<-8 or v.x>190 or v.x<50 then table.remove(cores,k) end if not alive then break end --attract cores to player if math.abs(player.x-v.x)<16 and math.abs(player.y-v.y)<16 then v.vx=v.vx+((player.x-v.x)/60) v.vy=v.vy+((player.y-v.y)/60) end if math.abs(player.x-v.x)<=4 and math.abs(player.y-v.y)<=8 then coreBonus=coreBonus+1 player.tk=player.tk+1 incAchievement(3) playSound(7) table.remove(cores,k) end end --player bullets for k,v in pairs(pBullets) do move(v) if v.y<-8 then table.remove(pBullets,k) else local bCol={ {x=v.x-2,y=v.y-2}, {x=v.x-2,y=v.y+1}, {x=v.x+1,y=v.y-2}, {x=v.x+1,y=v.y+1} } for j,w in pairs(enemies) do local eCol={ xa=w.x-w.w*4, xb=w.x-1+w.w*4, ya=w.y-w.h*4, yb=w.y-1+w.h*4 } for l,u in pairs(bCol) do if eCol.xa<=u.x and eCol.xb>=u.x and eCol.ya<=u.y and eCol.yb>=u.y and (w.inv==nil or w.inv<=0) then w.hp=w.hp-1 table.remove(pBullets,k) if w.hp==0 then killEnemy(j,w) if not boss then incAchievement(2) playSound(5) end else playSound(6) end break end end end end end --enemy bullets for k,v in pairs(eBullets) do move(v) v.f=v.f+1 --lifespan if v.f==v.l then if v.pt>0 then shoot(v.pt,v.x,v.y) end table.remove(eBullets,k) end if v.x<-8 or v.x>248 or v.y<-8 or v.y>144 then table.remove(eBullets,k) end if not alive then break end --basic collision detection if math.abs(player.x-v.x)<=4 and math.abs(player.y-v.y)<=8 then if not v.g then v.g=true player.gr=player.gr+1 grazeBonus=grazeBonus+1 end --advanced collision detection if not speaking then local xa,ya=v.x-v.w/2,v.y-v.h/2 local xb,yb=v.x+v.w/2,v.y+v.h/2 if player.x>=xa and player.x<=xb and player.y>=ya and player.y<=yb then table.remove(eBullets,k) if player.inv==0 then --die incAchievement(4) player.l=player.l-1 player.inv=120 perfBonus=0 if player.l==0 then alive=false end end end end end end end function killEnemy(k,v) local x,y=v.x-(v.w*4),v.y-(v.h*2) local f=1 addScore(v.s,x,y) if v.dpt>0 then shoot(v.dpt,v.x,v.y) f=2 end if v.c~=nil then for i=1,v.c do local cx=v.x+math.random(-8,8) local cy=v.y+math.random(-8,8) table.insert(cores,{x=cx,y=cy,vx=0,vy=0.5}) end end instantiateFx(f,v.x,v.y) table.remove(enemies,k) end function spawnBoss(x,y) --clear previous phase enemies={} local bossData=bosses[curLevel][bossPhase] local pattern=patterns[bossData.pt] local i=120 if bossPhase==1 then i=0 end local newBoss={ sp=259, w=2, h=2, hp=bossData.hp, hpMax=bossData.hp, wvMax=bossData.t, pt=bossData.pt, cd=pattern[1].cd, dpt=0, s=bossData.s, x=x, y=y, inv=i, vx=0, vy=0 } table.insert(enemies,newBoss) waveTimer=bossData.t end function startWave() enemies={} local wave=waves[curLevel][curWave] waveTimer=wave[1] --create enemies for i=2,#wave do local w=wave[i] if w.b~=nil then local enemyData=bestiary[w.b] local n=1 local notSolo=i<#wave and wave[i+1].b==nil if notSolo then n=wave[i+1][3] end local cooldown=0 if enemyData.pt>0 then local pattern=patterns[enemyData.pt] cooldown=pattern[1].cd end for j=1,n do local moveX,moveY=0,0 if notSolo then moveX=wave[i+1][1]*j-1 moveY=wave[i+1][2]*j-1 end local enemy={ sp=enemyData.sp, w=enemyData.w, h=enemyData.h, hp=enemyData.hp, pt=enemyData.pt, cd=cooldown, dpt=enemyData.dpt, c=enemyData.c, s=enemyData.s, x=w.x+moveX, y=w.y+moveY, vx=w.vx, vy=w.vy } table.insert(enemies,enemy) end end end end function move(obj) obj.x=obj.x+obj.vx obj.y=obj.y+obj.vy end function shoot(patternId,x,y) local pattern=patterns[patternId] for k,v in pairs(pattern) do local b=danmaku[v.b] local r=v.r if v.vr~=nil then r=r+v.vr*pattern[1].s elseif v.r2~=nil then r=math.random(v.r,v.r2) end local rot=math.rad(r) local vel=v.v if v.v2~=nil then --math.random only generates integers --have to divide by 10 to get a fraction vel=math.random(v.v,v.v2)/10 end local vx=math.sin(rot)*vel local vy=-math.cos(rot)*vel table.insert(eBullets,{ sp=b.sp, x=x, y=y, w=b.w, h=b.h, vx=vx, vy=vy, f=0, l=b.l or -1, pt=b.sub or 0, g=false }) end if pattern[1].s~=nil then pattern[1].s=pattern[1].s+1 end end function instantiateFx(i,x,y,d) d=d or 0 local f=fxLibrary[i] table.insert(fx,{ x=x, y=y, vx=f.vx or 0, vy=f.vy or 0, w=f.w or 1, h=f.w or 1, ss=f.s, cs=f.s, as=f.as, l=f.l, sl=f.l, r=f.r, delay=d, }) end function processFX() for k,e in pairs(fx) do move(e) if e.delay~=nil and e.delay>0 then e.delay=e.delay-1 else e.l=e.l-1 if e.l==0 then if e.r~=nil and e.r>1 then table.insert(fx,{ ss=e.ss, cs=e.ss, x=e.x, y=e.y, w=e.w, h=e.h, vx=e.vx, vy=e.vy, as=e.as, l=e.sl, sl=e.sl, r=e.r-1 }) end table.remove(fx,k) elseif e.l%e.as==0 then e.cs=e.cs+1 end end end end function clearCtrl() if btnp(5) then if curLevel==1 then --demo exitGame() else nextLevel() end end end function nextLevel() resetProgress(1) end function resetProgress(type) --clear achievement progress for k,v in pairs(achievements) do if v.type==type and v.prog15 then local s=256 if player.dir==-1 then s=262 elseif player.dir==1 then s=264 end if player.inv>105 then s=s+64 end spr(s,player.x-8,player.y-8,0,1,0,0,2,2) end --cores for k,v in pairs(cores) do spr(497,v.x-4,v.y-4,0) end --player bullets for k,v in pairs(pBullets) do local f=0 if v.f%16>=8 then f=1 end spr(258,v.x-4,v.y-4,0,1,f) end --enemies for k,v in pairs(enemies) do if v.inv==nil or v.inv%30<15 or v.inv==-1 then local s=v.sp if boss then if v.vx>0 then s=268 elseif v.vx<0 then s=266 end end spr(s,v.x-(v.w*4),v.y-(v.h*4),0,1,0,0,v.w,v.h) end end --enemy bullets for k,v in pairs(eBullets) do local f=0 if v.f%16>=8 then f=1 end spr(v.sp,v.x-4,v.y-4,0,1,f) end --burst ring if burst.f>0 then circb(burst.x,burst.y,burst.f,9) circb(burst.x,burst.y,burst.f+1,10) circb(burst.x,burst.y,burst.f+2,12) end --FX for k,v in pairs(fx) do if v.txt~=nil then printShadow(v.txt,v.x,v.y,true) else spr(v.cs,v.x-(v.w*4),v.y-(v.h*4),0,1,0,0,v.w,v.h) end end --base UI rect(0,0,60,136,10) rect(180,0,60,136,10) printShadow("Hi-Score",182,2) printShadow(highScoreDsp,182,9,true) printShadow("Score",182,20) printShadow(scoreDsp,182,27,true) printShadow("Lives:",182,38,true) if isPrismMode() then spr(504,205,39,0) else for i=1,player.l do spr(496,199+6*i,39,0) end end printShadow("Burst:",182,45,true) local barWidth=player.b*15 spr(498,205,45,0,1,0,0,4,1) rect(206+barWidth,46,30-barWidth,3,0) line(220,46,220,48,12) if player.b>1 then spr(502,205,45,0,1,0,0,2,1) end if player.b==2 then spr(502,220,45,0,1,0,0,2,1) end printShadow("Cores:",182,56,true) printShadow(player.tk,205,56,true) printShadow("Graze:",182,63,true) printShadow(player.gr,205,63,true) printShadow("FPS: "..FPS:getValue(),215,129,true) --speech windows if speaking then rect(0,118,180,18,winClr()) rectb(0,118,180,18,12) print(speech[1],2,120,12,false,1,true) print(speech[2],2,128,12,false,1,true) if speech[3]>0 then local n=names[speech[3]] local l=print(n,0,-9)+3 rect(0,110,l,9,winClr()) rectb(0,110,l,9,12) print(n,2,112,12) end if speech[4]~=nil then spr(480,171,125,0) else spr(481,171,125,0) end end --boss UI if boss and not speaking and #enemies>0 then local b=enemies[1] rect(60,0,120,9,winClr()) rectb(60,0,120,9,12) line(68,0,68,8,12) line(68,4,179,4,12) spr(482,68,0,0,1,0,0,14,1) local hpDrain=110-(b.hp/b.hpMax*110) local waveDrain=110-(waveTimer/b.wvMax*110) rect(math.ceil(179-hpDrain),1,hpDrain,3,0) rect(math.ceil(179-waveDrain),5,waveDrain,3,0) print(#bosses[curLevel]-bossPhase,62,2,12) spr(511,enemies[1].x-2,128,0) end --'game over' window if not alive then rect(80,50,80,40,winClr()) rectb(80,50,80,40,12) print("GAME OVER",82,52,12) print("X: Continue",82,83,12,false,1,true) end --level clear window if levelClear and not speaking then rect(80,40,80,60,winClr()) rectb(80,40,80,60,12) print("LEVEL "..curLevel.." CLEAR",82,42,12) print("Cores:",82,52,12,false,1,true) print(coreBonus,116,52,12,false,1,true) print("Graze:",82,59,12,false,1,true) print(grazeBonus,116,59,12,false,1,true) print("Speed:",82,66,12,false,1,true) print(speedBonus,116,66,12,false,1,true) print("Perfect:",82,73,12,false,1,true) print(perfBonus,116,73,12,false,1,true) print("Total:",82,83,12,false,1,true) print(totalBonus,116,83,4,false,1,true) print("X: Continue",82,93,12,false,1,true) end end function menuDraw() --main screen if menuScr==0 then spr(160,12,12,0,1,0,0,9,3) print("INDIGO",14,39,12,false,2) print("INDIGO",13,38,9,false,2) spr(169,13,60+menuSel*7) spr(170,76,60+menuSel*7) print("Start Game",24,60,12,false,1,true) print("High Scores",24,67,12,false,1,true) print("Options",24,74,12,false,1,true) print("Achievements",24,81,12,false,1,true) print("(demo version)",13,130,12,false,1,true) elseif menuScr==1 then print("HIGH-SCORES",60,2,12,false,2) print("HIGH-SCORES",59,1,9,false,2) print("(Scores in blue were achieved in Prism Mode)",46,16,12,false,1,true) for i=1,10 do local score=highScores[i] local clr=12 if score[2]==1 then clr=10 end local scoreText=formatScore(score[1]) print(i..".",92,32+7*i,clr,false,1,true) print(scoreText,107,32+7*i,clr,false,1,true) end print("X: Back",215,130,12,false,1,true) elseif menuScr==2 then print("OPTIONS",80,2,12,false,2) print("OPTIONS",79,1,9,false,2) spr(170,1,20+subSel*10) spr(169,230,20+subSel*10) print("HUD Theme",11,20,12,false,1,true) rect(70+30*settings[1],18,30,9,winClr()) rectb(70+30*settings[1],18,30,9,12) print("Indigo",72,20,12,false,1,true) print("Black",104,20,12,false,1,true) print("Music",11,30,12,false,1,true) rect(70+30*settings[2],28,30,9,winClr()) rectb(70+30*settings[2],28,30,9,12) print("On",72,30,12,false,1,true) print("Off",104,30,12,false,1,true) print("SFX",11,40,12,false,1,true) rect(70+30*settings[3],38,30,9,winClr()) rectb(70+30*settings[3],38,30,9,12) print("On",72,40,12,false,1,true) print("Off",104,40,12,false,1,true) print("Prism Mode",11,50,12,false,1,true) rect(70+30*settings[4],48,30,9,winClr()) rectb(70+30*settings[4],48,30,9,12) print("Off",72,50,12,false,1,true) print("On",104,50,12,false,1,true) print("Clear All Data",11,60,12,false,1,true) local exp="Set the in-game HUD theme." if subSel==1 then exp="Turn the music on or off." elseif subSel==2 then exp="Turn SFX on or off." elseif subSel==3 then exp="Gives you infinite lives. Disables achievements." elseif subSel==4 then exp="Clears all score and achievement data." end print(exp,1,130,12,false,1,true) print("X: Back",215,130,12,false,1,true) elseif menuScr==3 then print("ACHIEVEMENTS",55,2,12,false,2) print("ACHIEVEMENTS",54,1,9,false,2) for k,v in pairs(achievements) do local s=v.sp if v.prog0 then playSound(1) menuSel=menuSel-1 elseif menuScr==2 and subSel>0 then playSound(1) subSel=subSel-1 elseif menuScr==3 and subSel>8 then playSound(1) subSel=subSel-8 end end if btnp(1) then if menuScr==0 and menuSel<3 then playSound(1) menuSel=menuSel+1 elseif menuScr==2 and subSel<#settings then playSound(1) subSel=subSel+1 elseif menuScr==3 and #achievements-subSel>=8 then playSound(1) subSel=subSel+8 end end if btnp(2) then if menuScr==2 and subSel<#settings and settings[subSel+1]>0 then settings[subSel+1]=settings[subSel+1]-1 playSound(2) save() elseif menuScr==3 and subSel>0 then playSound(1) subSel=subSel-1 end end if btnp(3) then if menuScr==2 and subSel<#settings and settings[subSel+1]0 then playSound(2) menuScr=0 subSel=0 end end end function startGame() menu=false playing=true alive=true boss=false bossPhase=0 bossXY={x=0,y=0} levelClear=false score=0 scoreDsp="0000000000" highScoreDsp=formatScore(highScores[1][1]) curLevel=1 curWave=1 waveTimer=0 speedBonus=0 coreBonus=0 grazeBonus=0 perfBonus=1 totalBonus=0 player={ x=120, y=120, l=3, b=0, cd=6, ct=0, gr=0, tk=0, inv=0 } if isPrismMode() then player.l=intMax end pBullets={} cores={} enemies={} eBullets={} fx={} for k,v in pairs(patterns) do if v[1].s~=nil then v[1].s=0 end end startWave() end function printShadow(s,x,y,smol) print(s,x+1,y+1,8,false,1,smol) print(s,x,y,12,false,1,smol) end function load() for i=0,18,2 do local sc=pmem(i) local pm=pmem(i+1) table.insert(highScores,{sc,pm}) end for k,v in pairs(settingsMax) do table.insert(settings,pmem(19+k)) end for k,v in pairs(achievements) do v.prog=pmem(31+k) end end function save() for i=1,10 do local s=i*2-1 pmem(s-1,highScores[i][1]) pmem(s,highScores[i][2]) end for i=20,23 do pmem(i,settings[i-19]) end for k,v in pairs(achievements) do pmem(31+k,v.prog) end end function addScore(pts,x,y,noMulti) x=x or nil y=y or nil noMulti=noMulti or 0 if noMulti==0 then local multi=1+roundToTenth(player.b) pts=pts*multi end score=score+pts scoreDsp=formatScore(score) if x~=nil then table.insert(fx,{ sp=0, txt=math.floor(pts), x=x, y=y-16, vx=0, vy=-0.3, as=61, l=60 }) end end function clearData() for i=0,255 do pmem(i,nil) end highScores={} settings={} load() end function addHighScore() local newScore={score,0} if isPrismMode() then newScore[2]=1 end table.insert(highScores,newScore) table.sort(highScores,function(k1,k2) return k1[1]>k2[1] end) table.remove(highScores,11) end function formatScore(pts) local p=math.floor(pts) local pad=string.sub("000000000",string.len(p)) return pad..p end function roundToTenth(num) return math.floor(num*10^1+0.5)/10^1 end init() --credit to Al Rado FPS={value=0,frames=0,lastTime=-1000} function FPS:getValue() if (time()-self.lastTime <= 1000) then self.frames=self.frames+1 else self.value=self.frames self.frames=0 self.lastTime=time() end return self.value end --speech names={ "Prism Indigo", "Prism Chartreuse", "Prism Amber", "Prism Violet", "Prism Saffron", "Prism Aqua", "Prism Scarlet", "Prince Onyx" } bossDialog={ { {"No wonder Scarlet called an emergency.", "There are so many Shades about tonight.", 1, "Speaking of which, where is she?", "Looks like Chartreuse is the only one here.", 1, "I thought I was late,", "but maybe I'm early instead?", 1,"enter", "Evening, Chartreuse!", "Where are the others?", 1, "Oh, they already left.", "They had other business to take care of.", 2, "I'm guessing you mean the Shades", "swarming all over the city?", 1, "Yes.", "Something of the sort.", 2, "What about you?", "Shouldn't you be helping out?", 1, "I am helping them.", "By getting rid of you.", 2, "...what?!", "What do you mean, 'getting rid of me'?", 1, "I'm sorry, Indigo-san,", "but could you please die?", 2 }, {"Snap out of it, Chartreuse!", "This isn't like you!", 1, "It is now.", "You see, we have been shown our true purpose.", 2, "'We'?", "So the others are like this too?", 1, "Yes, indeed.", "We have all been born anew.", 2, "It is a shame you could not join us,", "for now I must dispose of you.", 2 }, {"Nngh... huh?!", "Am I... free?", 2, "Seems like it.", "Are you okay, Chartreuse? What happened?", 1, "I don't know. We all arrived at", "the meeting point, and then suddenly...", 2, "It was like something took hold of me.", "I couldn't control myself anymore.", 2, "It took control of the others, too.", "Please, you must stop them!", 2, "I'll do my best, but...", "What about you?", 1, "I need to recover, and then", "help anyone the Shades have injured.", 2, "Besides, I'm a healer. There's only", "so much I can do against the others.", 2, "You can do it, Indigo-san.", "I believe in you.", 2 } } } function say(s) for i=1,#s do table.insert(speech,s[i]) end speaking=true end function nextSpeech() for i=1,3 do table.remove(speech,1) end if #speech==0 then speaking=false if levelClear then calcBonuses() end elseif speech[1]=="enter" then table.remove(speech,1) --the boss enters enemies[1].vx=2.4 enemies[1].vy=0.4 end end function logo() ic=ic+1 local l,tc=216,0 if (ic>=10 and ic<20) or (ic>=240 and ic<250) then l=214 tc=15 elseif (ic>=20 and ic<30) or (ic>=230 and ic<240) then l=212 tc=14 elseif (ic>=30 and ic<40) or (ic>=220 and ic<230) then l=210 tc=13 elseif ic>=40 and ic<220 then l=208 tc=12 end if ic==300 then logo=false menu=true end spr(l,112,44,0,1,0,0,2,3) print("ALTRIX",108,71,tc,false,1,true) end