`+"2G7Y#$3_o! BHI^qsóȆbsrgǯah)}+u@ (g>7wo**Mq 02TvͫgE#2Tv2Tv  ffffvwggffffgwwwfffffffgwgffffgfffffvwggfffffwwwvfffffgfwgffffvf ̙̙̀̀PUPPPUUPUP w fv`ffPff UU  UPUPPPUUPPPPPPPUUUTDDDDUTUUUTUUDDDEUUTUUUTUDDDDwfv`ffPffUU UPUPPPUPUPPPPPPPPUUUUPPݪݪݭݪݭݭݭݭݪݭݭͪܪwwgfgfzffwwwwffffffffffff٪ͩݬfvfvfvffݪݪݭݪݭݭݭݪݭݭgfzgfffzffgfgfgfzgffvfvfffffvfvfvfvݪڪݭݭݪݭݭݪݭݭݭݭgfzgfffzffgfgfgfgffffffffffvfvfvfvfffffefffffeffffVfffffffffffffffgfzgfffzffwwyyffffffffffffffffffffwwwwyyfvfvffffww33333333333333333333333333333333 UUUUUTUUUUUTUUUUEUUUUUUUUUUUUUUUffffffffffffffffffffffffffffffff V`uPw VW uU uU uUwwwwwwwwwww eW fW wu We gv uWiuUffwwwwwwwwwwwwwwwwfvfffjfgfzfffgfjzzzfffffgfffffffgvfffffwzwzffffffvfvffffvzzffffvjfffzfvfgfjzzzvffffffgffffvfvfffffwzwzffgfgfffggfffvzz ݪݠݠ ݪ ܪ ̪ ̪ ̪ɪݠ ̠̐̐ww@DDDDDDDDD0033303"2 33333333333333f`ff f` `f ffffff fW @DD DDD DDD D 0033303"2DDDDD@DD33@33 #"3 @DD DDD DDD D 0033303"2DDDDD@DD33@33 #"3 @DD DDD DDD D 0033303"2DDDDD@DD33@33 #"3 @DD DDD DDD@DD@3@ 0"033DDDDDDDD "D0# @DD DDD DDD@DD@3@ 0"033DDDDDDDD "D0# @D DDD DDD DDD DDD @DD0DDDDDDDDDDDDDDDDDDDD0 @D DDD DDD DDD DDD @DD0DDDDDDDDDDDDDDDDDDDD0 @D DDD DDD DDD DDD @DD0DDDDDDDDDDDDDDDDDDDD00333 033*"3#230303 3333323" 3# 33 033303303#0̪ 3333323" 333033303303# "030303 33333230  033 23 33 3#33"3#33ݠ033 23 33 3#33"3#33 03@D 0 33000 D0033000 0@D0033 ̪ D30330 33303@D 0033030303 D0033 ݠ         zwwwwwzwwwzwwwzwwwzwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwjfffffjfffjfffjfffjfffffffffoffffffffffffffffffffffZUUUUUZUUUZUUUZUUUZUUUUUUUUU_UUUUUUUUUUUUUUUUUUUUUUJDDDDDJDDDJDDDJDDDJDDDDDDDDDODDDDDDDDDDDDDDDDDDDDDDwwwwzwwwzwwwwwwwwwwwwwwzwwwzwwwwwwwwwwwwwwwwwwwwwwwwwzwffffjfffjffffffffffffffjfffjffffffffofffffffffffffffffjfUUUUZUUUZUUUUUUUUUUUUUUZUUUZUUUUUUUU_UUUUUUUUUUUUUUUUUZUDDDDJDDDJDDDDDDDDDDDDDDJDDDJDDDDDDDDODDDDDDDDDDDDDDDDDJD Р ࠪ   wwwwwwpwwpwfpwfpwfpgfpffwwwwfwfgffffff`fU`fU`fU`fU`VU`UUPUUUfUVUUUUUUUUDUPDDPDDPDDPDD@DD@DD@DDDEDDDDDDDDDD@DD@DD@DD@DD@DD@DDHPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPaAAAAAAAAAAAAAPPPPPPPPPPPPaAAAAAA@AAAAAAA@AAAAAAAAAAAAaAAABEFFFFFFFFFFFFFFGAAAEaA@ABCDA@AAAAAAAAAA@AaAAAAAAA@AAAAAAAAt@A@A@AAAAAt@@Aa@A@RU WAAUaAAAAARSTAAAAʑAA@AAAAAAA@A@@AAtAAAA@AAAAAAAAAAAAAAAAaAARU WAAUa@A@AAbcdAAAAAAA@@AAAAAaAA@AAa@AA@aARU WAUaAAA@AAAAAA@AA@@@@AAAAAAAAAPPPPPqAA@AaAAaA@ARU WAUaAAA@AAA@A@AAAAAAA`AAAaAtAAAAaAAAAa@AARU WAAUaAAA`AAAAA@AAAAAA`A@Aa@@A@@AAAAAa@AAaA@ARU WAAUaAAAA`AAAAA@@@@AA```AAaA@AA@AAaAAAaAARuvvvvvvvvvvvvvvwAAuaA@AA```AAAAAAAAAAA@AAAAAAAAAAAAA11!"2aAAAbccccccccccccccccdbca@AAAAA`AAAA@AAAA@ABCCCaA@AAAA@aґAaAAA@@A@AAA@AA@A@@AaAAAAAAA`AAAAAAAAAAARSSPPPqA@AAAAaA@AaAAA@@AA@@AAAAAAAA@AAAAa`@AA```@AAAAAA@AAARSSTaAAAAa@AaAAA@AAa`AA@AAAABCCCCCCCCCCCScda@AAa@AA@AA@a```AA@AAAARSSSSSSTAAa@A@aA@A@@AAaAAAAAAAAAARSSSSSSSSSSSTAAaAAAaAAAAAAAaAAAAAAAAARSSSSSSSSSDAPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP@AA@APPPPPaA@A@AAaA@AA@AAAAbccccccccccccSDAAAAAAAAAAAA@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAaAA@AAaAA`AA@AAAAAAAAAAAAAARSTA@@@@A@AAAAAAsA@@AA@A@AAAA@AAA@@AAAAAAA@AA@AAABAAAAaAAA@AAAAA@AAAAAAA@AAaAAAA@AaA`AA`A@AA@AAAA@ARTAAA@@AAA@@A@A@AA@AAA@AAAA@A@A@sAAsAAs@AAAAAAAA@AAAbCDAAaAAAAAAsAA@AA@AAAAAaAA@AAAaAA```AA`AA@AAA@AAAAAARSTAAA@AA@AAAA@AAAAAsAAAAA@AAAsAAAAAAAAA@sAARTAAPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPAAAAsAAAAAAAAAAAAAAAaA@A PPPPPa`AAAA```AAAAAA@AAAbcdAAAAAAAAsAAAAAA@AAA@AAAAA@AAAAAA@AAAEFFFFFFFFGAAAbdAAAAAAAAAA@AAAAAAAAAAAAAAAAAAAAAA@Aa@A@AAAPqAAAAAPPa`AA@AAA@@AAAAAAAA@AU WAAA@@AAt@@AAAtAA@AAAAAAAAAAAAAAAAaAAAAAPqAAAAA@AAAPPa```AAAAAAAA@pAA@AAU WAAAAAAAAAAAAA@AAAA@AAAA@AAsAAAAAAAAs@AAa @AAAAAPqAAAAAAAAAAaAA`AAA@AAAAAAaAAAAAU WAAAAAAA@A@AAA@@@AAAAA@@AAA@AAAAAAAAA@AAAAAaAAAA@@AqAAAAAAAA@ @AAAPPaA```AA@AAAA@AAAaAAU WAAAAsAAAAsAAAAAAAAAAAAsAAAAAAAAAA@AAAaAAA@AAPAAA@AA AAAAAAAAAAAaAAAAAAAAAAAAAAAPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPqAAAAA@U WAAAAA@AAAAAAAAAAAAAAAAAAAAAAAAAAAAA@AaA@A@AAPPPPPPPPPPPPPq PPPPqAAAAA@AAAAA@@AAPPaAA@@AAAAAAAAAaAAAAAAAAAAtAAAAA@AAAA@@AAAAAtAA@AAAtAAAAAAuvvvvvvvvwAAAA@AAA@AA@PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPAAAAAAA@A AA@AAAA@AAAAA@AAAAAA@@AAAAAAAA@@AAAAAaA@AAAA@AAAA@AAaA@A@A@A@A@AA@A@AA@A@AAAAA@@@A@AAA@A@@A@tbCCCCCCCdA@@AAApAA@AAAA@AA@AAAA@AAAAAAAAAAAAAAA@AAAAAAAAAAA@AAAAAAA@A@AAAAAAAAAAAAA@AAAAAAAAAA@AA@AAAAAPPPPaAAAAAAAAAAAAAAAaAAA@AAAAtAAAAAAAAAAAtAAAAAA@AAAAAAAAAAbcccdAtA@AAAAAAAaAAsAsAAA@AAAAAAA@AAA@AA@A@AA@AAAA@AA@AAA@@AAAAAAA@A@AA@AAA@@AAAA@A@A@AA@AAAAAAAAA@AAAAAA@AAAAAAAAAAAaaA@AAAAA@AAAAsAAAAAAAAAAAA@A@AAAAAA@AAAAA@AAAAAAAAAAAAAAA@AAAAAAAAAAAAAAA@AAAAAAAAAAAA AA@AAAAaAAAAAAAAAAAAAAAAAAAAAAA@AJ99999999999999999999999aAApAAA@AAA@AAAA@AAA A@A@AAAAA-----------------------aAAA@AAAA@@AAAAAAAAAAA@AAAAA999999999999999999999aAApAAAAAAA@AAAAAAAAA@AAAAA;---------------------rrrrrrrrrrrrrrrrrrrrra@AAAAAAAAA@AAAAAAAAAAA-rrrrrrrr:999999999999999a@ApAAAAAAA@AAAAAAAAA@AAArrrrrrrrrrrrrrrrrr----------------aAAAA@AAAAA@@AAAAAArrr*+r*+rrrrrrrrra@AAAAAAAAAAAAAAAAArrrrr:;r:;r:999999999;rrrrrrrrrrrraAA@AAAAA@AAAAArrr--r--rr-----------rrrrrrr*<<<<<+r*<<<<<<<a@ApAAAAAAAAArrrrrrrrrrrrrrra@AaA@AA@AAAAA+rrrrrrrrrrrrrrrrrrrrrrrrrraAaAAAA@AAAAA<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+rrrraAaAAAAAAArrra@AaAAA@AA@AAArrrrrrrrPPPPPPPPPPPPPPPPqAAPPPPPPPpABCCCCCCDAArrrrrrrra@A@@A@@A@A@A@AA@AAAAA@aARSSSSSTAArrrrrrrrrrrrrrrrraA@AAA@@AA@AA@AA@AAAApAARSSSSDA<<<<<<<<<<<<<<<<<<<<<<<raAA@A@A@AA@AA@@AA@AAAA@AaABSSSSSSSTA<rraA@AA@@AAAA@@AAAAACSSSSSSSSSSCa@A@AA@AAAAAA@@AAAAAA@AAASSSSSSSSSSSSSSSSSSSSSSSaA@A@AAAA@@AA@AA@AA@ASSSSSSSSSSSSSSSSSSSSSSSSSSaAʑA@AA@AAAA@A@AAASSSSSSSSSSSSSSSSSSSSSaAA@AAA@AA@AA@AAAAAAA@ASSSSSSSSSSSSSSSSSSSSSSSSSaAAA@AA@AAAAAA@A@A@@AAASSSSSSSSSSSSSSSSSSSSSSSSSaAAAAAAAAAA@AAAAAAAAA@ASSSSSSSSSSSSSSSSSSSSSSaAEFFFFFFFFFFFFFFFFFFFFFFGAASSSSSSSSSSSSSSSSSSSSaU W@SSSSSSSSSSSSSSSSSSSaAU WAASSSSSSSSSSSSSSaU WASSSSSSSSSaAU W@@SSSSaAU BCCCD W@AaAU RSccST WAaU bdbd W@aAU WAAU FFFFFFFF W >'10?"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""/"""""""""""""""""""""""""""""""""""""/"""""""""""""""""""""""""""""/""""""""""""""""""""""""""""""""""""""""""""""""""""/"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""/""/""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""/"/""/"/""""/""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""/"""/""//"/""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""'-- title: Osore -- author: @ATS_xp -- desc: < .- --. .- -- . > -- script: lua t=0 debug=true sx,sy=240,136 ex,ey,evy=0,0,0 -- for "effetMenu()" lx=0 state="menu" sin=math.sin cos=math.cos min=math.min max=math.max rand=math.random del=table.remove to=table.insert U,D,L,R,A,B,X,Y=0,1,2,3,4,5,6,7 textbox={ x=5, y=136/2, text="", textX=0, textY=0, Text={ [1]="City close to 10 hours, here it rains\na lot.", [2]="Careful, deep lake", [3]="Millennial Worship Statue", [4]="Lunar Cave", [5]="Locked", [6]="*Unlocked*", }, w=230, h=60, active=false, } textbox.textX=textbox.x+4 textbox.textY=textbox.y+4 inv={ x=0, y=136/2, w=240, h=68, On=false, } ------------- VARIABLES ---------------- ------------- FUNCTIONS ---------------- function Collide(x,y) return fget(mget((x//8),(y//8)),0) end function CollideEnt(e,v) if e.x0 then spr(384,self.x+6,self.y+2,10,2) print("Key: "..p.keys.."x",self.x+4,self.y+20,15,false,1,true) end playerCanMove=false else playerCanMove=true end end function Mob(x,y) local s={ name=name or "unnamed", spr=spr, anims={}, x=x or 0, y=y or 0, w=w, h=h, f=0, c=0, vx=0, vy=0, } function s.Draw() spr(s.spr,s.x-mx,s.y-my,s.c,1,s.f,0,2,2) end function s.Update() if s.vy<0 then s.spr=anim({300,302}) elseif s.vy>0 then s.spr=anim({290,292}) end if s.vx<0 then s.spr=anim({294,296}) s.f=0 elseif s.vx>0 then s.spr=anim({294,296}) s.f=1 end if not Coll(s)then Move(s) end end return s end function Player(x,y) local s=Mob(x,y) s.name="player" s.spr=256 s.keys=0 s.anims={ walkD={258,260}, walkU={268,270}, walkL={262,264}, idle={266,256,262,262}, } s.w=16 s.h=16 s.f=0 s.dir=D s.speed=1 s.vx=0 s.vy=0 function s.Draw() spr(s.spr,s.x-mx,s.y-my,10,1,s.f,0,2,2) end function s.Update() if playerCanMove and not inv.On then if btn(U)then s.vy=-s.speed elseif btn(D)then s.vy=s.speed else s.vy=0 end if btn(L)then s.vx=-s.speed elseif btn(R)then s.vx=s.speed else s.vx=0 end if btn(X)then s.speed=1.5 else s.speed=1 end if s.vy>0 then s.spr=anim(s.anims.walkD) s.dir=D elseif s.vy<0 then s.spr=anim(s.anims.walkU) s.dir=U elseif s.vx>0 then s.spr=anim(s.anims.walkL) s.dir=R s.f=1 elseif s.vx<0 then s.spr=anim(s.anims.walkL) s.dir=L s.f=0 else s.spr=s.anims.idle[s.dir+1] end Coll(s) Move(s) end end return s end function Board(x,y) local s=Mob(x,y) s.name="board" s.spr=65 s.x=x or 0 s.y=y or 0 s.w=16 s.h=4 s.c=10 function s.Draw() spr(s.spr,s.x-mx,s.y-my,s.c) --rectb(s.x-mx,s.y-my,s.w,s.h,15) end function s.Update() if btnp(A)then if CollideEnt(s,p)then textbox.active=not textbox.active end end end return s end function Osore(x,y) local s=Mob(x,y) s.name="?" s.spr=288 s.x=x or 0 s.y=y or 0 s.w=16 s.h=16 s.f=0 s.c=10 s.vx=0 s.vy=0 return s end function Key() for i,v in ipairs(items)do if v.name=="key" then local y=(v.y-5)-sin((t/10))*4 spr(496,v.x-mx,(v.y+1)-my,0,1) spr(v.spr,v.x-mx,y-my,v.c,1) if CollideEnt(v,p)then del(items,i) p.keys=p.keys+1 end end end end function ballon() if not playerCanMove and p.f==1 then spr(497,(p.x+18)-mx,p.y-my,10,1) elseif not playerCanMove and p.f==0 then spr(497,(p.x-18)-mx,p.y-my,10,1) end end function makeRain(x,y,c) timeToMakeRain=timeToMakeRain-1 if timeToMakeRain<0 then canRain=true end if canRain then to(rain,{x=rand(0,300),y=0}) canRain=false timeToMakeRain=rainDelay end for i,r in ipairs(rain)do pix(r.x,r.y,c) r.y=r.y+y r.x=r.x-x if r.y>136 or r.x<0 then del(rain,i) end end end function effectMenu() for i=0,10 do for j=0,10 do rectb(24*i+(j%2)*12,16*j+0,25,17,2) end end spr(320,ex,ey,10,2,0,0,2,2) spr(320,ex+205,ey,10,2,0,0,2,2) if ey+(16*3)<136 then evy=evy+0.2 else evy=-evy end ey=ey+evy end function textbox:Draw() if self.active then rect(self.x,self.y,self.w,self.h,0) rectb(self.x,self.y,self.w,self.h,15) --[[spr(464,-5+self.w,75+self.h,0) spr(anim({480,481},16),-5+self.w,80+self.h,0)]] print(self.text,self.textX,self.textY,15) playerCanMove=false else playerCanMove=true end if p.y>136/2 then self.y=0 self.textY=self.y+4 else self.y=68 self.textY=self.y+4 end end function textbox:addText() for _,s in ipairs(ents)do if s.name=="board" then if mx==0 and my==0 then self.text=self.Text[1] elseif mx==480 and my==136 then self.text=self.Text[2] elseif mx==960 and my==408 then self.text=self.Text[3] elseif mx==720 and my==0 then self.text=self.Text[4] elseif mx==960 and my==0 and p.keys>0 then self.text=self.Text[5] elseif mx==960 and my==0 and p.keys==0 then self.text=self.Text[6] end --end end end end function specialEvents() for _,s in ipairs(ents)do if s.name=="?"then if mx==240 and my==136 then if p.x>(31*8) then s.vx=2 end if s.x>(60*8) then s.x=143*8 s.y=20*8 s.spr=288 s.vx=0 end elseif mx==960 and my==136 then if p.x>(128*8)and p.y<(22*8)then s.vy=-2 end if s.y<(16*8)then s.x=107*8 s.y=8*8 s.spr=288 s.vy=0 end elseif mx==720 and my==0 then if p.x<(116*8) then makeRain(1,2,7) makeRain(1,2,7) s.vx=-1 end if s.x<(105*8)then mset(104,8,161) mset(104,9,177) s.x=47*8 s.y=43*8 s.spr=288 s.vx=0 end if collideTile(161,p)or collideTile(177,p)then p.x=6*8 p.y=41*8 rainOn=false end elseif mx==960 and my==272 or mx==960 and my==408 then makeRain(1,2,7) makeRain(1,2,7) end end end if (mx==1680 and my==136) and p.x>216*8 then mset(210,29,32) mset(210,30,32) mset(210,31,32) mset(210,32,32) mset(210,33,32) rainOn=false end if (btnp(A)and p.keys>0)then if mget((p.x)//8,p.y//8)==33 or mget((p.x)//8,p.y//8)==49 then mset((p.x-8)//8,p.y//8,65) mset(p.x//8,p.y//8,65) mset((p.x+8)//8,p.y//8,65) mset((p.x+16)//8,p.y//8,65) p.keys=p.keys-1 end end end function menuBar() if bar==0 then spr(498,100,92,0,1) if btnp(A)then state="loading" elseif btnp(D)then bar=1 end elseif bar==1 then spr(498,100,102,0,1) if btnp(A)then exit() elseif btnp(U)then bar=0 end end end function stateLoading() cls() load=load-1 spr(anim({354,356}),220,120,10,1,0,0,2,2) if load<0 then state="game" end end function stateIntro() cls() spr(457,(148-(16*3))+lx,15,0,3,0,0,2,4) local width=print("ATS",0,115,0) if time()>2000 then lx=rand(-1,1) if time()>3000 then lx=0 print("@ATS_xp",width+88,115,5) end end if time()>4000 then state="menu" end end function stateMenu() cls() local a,b,c,d=-1,-1 effectMenu() spr(anim({320,352}),100+rand(a,a+2),18+rand(b,b+2),10,3,0,0,2,2) print("Osore",95,24+(16*3),15,true,2) print("Made in: TIC-80",10,130,15) print("Play",113,92,15) print("Exit",113,102,15) menuBar() end function stateGame() cls() map(mx//8,my//8,31,18,0,0,0,1,remap) if p.x//240*240~=mx or p.y//136*136~=my then mx=p.x//240*240 my=p.y//136*136 end p.Update() for _,s in ipairs(ents)do s.Update() end textbox:addText() specialEvents() Key() p.Draw() for _,s in ipairs(ents)do s.Draw() end if rainOn then makeRain(1,2,7) makeRain(1,2,7) end inv:Draw() if btnp(Y)then inv.On=not inv.On end textbox:Draw() if debug then print("mx: "..mx.." ".."my: "..my) print("px: "..p.x.." ".."py: "..p.y,0,10) print("keys: "..p.keys,0,20) print("entities: "..#ents,0,30) print("items: "..#items,0,40) end end function init() playerCanMove=true bar=0 rainOn=true load=200 p=Player() ents={} spawns={} items={} --[[solid={[69]=true,[70]=true,[71]=true,[85]=true,[87]=true,[101]=true,[103]=true,[117]=true,[118]=true,[119]=true,[184]=true,[185]=true,[200]=true,[201]=true,[186]=true,[187]=true,[202]=true,[203]=true} for i=1,63 do solid[i]=true end]] for i=208,223 do spawns[i]=true end rainDelay=0.5 timeToMakeRain=rainDelay canRain=false rain={} mx,my=p.x//240*240,p.y//136*136 addEnts() end init() function TIC() t=t+1 if keyp(18)then reset() end if state=="intro" then stateIntro() elseif state=="menu"then stateMenu() elseif state=="loading"then stateLoading() elseif state=="game"then stateGame() end end