# @name Clawd # @desc Virtual pet crab - feed, play, clean and raise it # @author Blueforcer # @version 1.1 # @config name text "Pet name" default=Clawd maxlen=12 # @config sound bool "Sound" default=false # @config notif bool "Notifications" default=false import math class Clawd var s,A,B,W,H,X,Y,P,F,R,V,C,D,M,N,L,T,S,K var u,m,w,r,k,e,a,h,p,t,b,c,n,o,q,v,j,g,l,y,z,d def init() self.n=store.get("name") self.o=store.get("sound") self.q=store.get("notif") self.V=[0xD97757,0xE58963,0xA8553C,0xA94F38,0xF0906B,0xC4694D,0xFFFFFF,0xE05540,0xF2E3C8,0xC96F4A,0xFFD34D,0x8B5A2B,0x93A7C4,0x9AA0A6] var l=store.get("s") self._f(1) if isinstance(l,map) for k:self.s.keys() var v=l.find(k) if type(v)=="int" self.s[k]=v end end end self.P=self._d(".m.|mmm") self.F=self._d(".yy.|mmmm|.ee.") self.R=self._d("r.r|rrr|.r.") self.S=[3,0,8,1,13,0,1,2,15,2] self.K=[0xD97757,0xE8C33F,0x3FB4E8,0x4FC96F] self.L=["EXIT","FEED","PLAY","CLEAN","MED","SLEEP","STATS"] self.T=[0,1500,1200,2200,2200,900,700,600,1500,1500] self.u=0 self.k=0 self.e=0 self.v=120 self.j=10 self.g=-1800000 self.d=0 self._s() end def _f(g) self.s={"s":0,"v":0,"u":1,"h":10000,"a":10000,"e":10000,"c":10000,"x":10000,"l":0,"o":0,"k":0,"g":0,"w":0,"z":0,"n":g,"p":0,"t":0,"y":0,"f":0,"m":0} end def _c(v) return clamp(v,0,10000) end def _x() self.u=0 rotation.resume() end def _d(a) var m={"o":0,"O":1,"q":2,"d":3,"c":4,"x":5,"w":6,"r":7,"e":8,"s":9,"y":10,"m":11,"g":12,"t":13} var o=[] var x=0 var y=0 var i=0 var n=size(a) while i>7),oy+((v>>4)&7),oc!=0?oc:self.V[v&15]) i+=1 end end def _s() var t=self.s if t["s"]==2 self.A=self._d(".gggg.|gwggwg|gggggg|gggggg|g.g.g.") self.B=self._d(".ttt.|ttttt|tt.tt|tt.tt|ttttt|ttttt") return end var a,b var e=t["v"] if t["s"]==0 a=".eee.|eeeee|esees|eeeee|eseee|.eee." elif e==1 a="c...c|.ooo.|owowo|.d.d." b=".....|coooc|owowo|d...d" elif e==2 a="c....c|.oooo.|owoowo|.oooo.|.d..d." b="......|cooooc|owoowo|.oooo.|d....d" elif e==3 a="c.....c|c.ooo.c|.ooooo.|owooowo|.ooooo.|.d.d.d." b=".......|c.ooo.c|coooooc|owooowo|.ooooo.|d.d.d.d" elif t["u"]==0 a=".y.yy.y.|c.OOOO.c|.OOOOOO.|OOwOOwOO|.OOOOOO.|..OOOO..|.d.d.d.d" b="..y..y..|ccOOOOcc|.OOOOOO.|OOwOOwOO|.OOOOOO.|..OOOO..|d.d.d.d." elif t["u"]==2 a="xx....xx|x.qqqq.x|.qqqqqq.|qqrqqrqq|.qqqqqq.|..dddd..|.d.d.d.d" b="........|xxqqqqxx|.qqqqqq.|qqrqqrqq|.qqqqqq.|..dddd..|d.d.d.d." else a="cc....cc|c.oooo.c|.oooooo.|oowoowoo|.oooooo.|..oooo..|.d.d.d.d" b="........|ccoooocc|.oooooo.|oowoowoo|.oooooo.|..oooo..|d.d.d.d." end self.A=self._d(a) self.W=self.X self.H=self.Y self.B=b==nil?self.A:self._d(b) end def _g(i) return self._d([".r....r.|..r..r..|...rr...|...rr...|..r..r..|.r....r.","........|..yyyy..|.yyyyyy.|.mmmmmm.|.rrrrrr.|.eeeeee.","...y....|..yyy...|yyyyyyy.|.yyyyy..|..y.y...|.y...y..","......ee|.....ee.|....ee..|.yee....|yyy.....|yy......","...rr...|...rr...|.rrrrrr.|.rrrrrr.|...rr...|...rr...","..eee...|.ee.....|.ee.....|.ee.....|.ee.....|..eee...","......w.|......w.|...w..w.|...w..w.|w..w..w.|w..w..w.",".y.y.y..|..yyy...|yyyyyyy.|..yyy...|.y.y.y.."][i]) end def _n(x) if self.o&&settings.get("soundEnabled")!=false sound.rtttl(x)end end def _w() if epoch_ms()>0 self.s["y"]=epoch_ms()/1000 end store.set("s",self.s) end def _e(n) var t=self.s t["v"]=n if n==1 t["s"]=1 self.k=4 self._n("h:d=16,o=6,b=180:c,e,g,c7") else if n==4 var v=1 if t["z"]>=200 v=0 elif t["z"]<=-100 v=2 end t["u"]=v end self.k=3 self._n("e:d=16,o=5,b=140:c,e,g,8c6,16p,8e6") end self.e=now_ms() self._s() self._w() end def loop() var now=now_ms() var ep=epoch_ms() var t=self.s self.y=ep>0 if!self.z&&self.y self.z=true if t["y"]>0 var el=ep/1000-t["y"] if el>60 if el>43200 el=43200 end t["g"]+=el if t["s"]==1 var d=el*3/10 t["h"]=self._c(t["h"]-d*7/10) t["a"]=self._c(t["a"]-d/2) t["e"]=self._c(t["e"]+d/4) t["c"]=self._c(t["c"]-d/5) if t["t"]>0 t["t"]-=d if t["t"]<=0 t["t"]=0 t["p"]=min(t["p"]+1,3) t["c"]=self._c(t["c"]-1500) end end end end end end if t["s"]==0 t["g"]+=1 if t["g"]+t["w"]>=1800 self._e(1)end elif t["s"]==1 t["g"]+=1 if self.y var au=hour()>=22||hour()<8 if self.l==nil self.l=au elif au!=self.l self.l=au t["o"]=0 end if t["o"]==0 t["l"]=au?1:0 end end var sl=t["l"]==1 if t["t"]>0&&!sl t["t"]-=1 if t["t"]<=0 t["t"]=0 t["p"]=min(t["p"]+1,3) t["c"]=self._c(t["c"]-1500) end end self.j-=1 if self.j<=0 self.j=10 var xt=(t["p"]>=2||t["k"]==1)?5:0 t["h"]=self._c(t["h"]-(sl?3:7)) t["a"]=self._c(t["a"]-(sl?0:5)-xt) t["e"]=self._c(t["e"]+(sl?12:-4)) t["c"]=self._c(t["c"]-2-4*t["p"]) var cf=t["f"] var vl=[t["h"],t["a"],t["e"],t["c"]] var i=0 while i<4 var b=1<3000&&(cf&b)!=0 cf^=b end i+=1 end t["f"]=cf if t["k"]==0&&!sl if(t["h"]<2000||t["a"]<2000||t["c"]<2000||t["p"]>=2)&&math.rand()%100<2 t["k"]=1 t["z"]-=25 self._n("s:d=8,o=5,b=160:e,p,e") end end var dm=0 if t["h"]==0 dm+=12 end if t["c"]==0 dm+=6 end if t["k"]==1 dm+=8 end t["x"]=self._c(t["x"]+(dm>0?-dm:5)) if t["x"]<=0 t["s"]=2 self.k=9 self.e=now self.u=0 self._s() rotation.resume() self._n("d:d=4,o=4,b=70:8e,8d,c") self._w() end if self.q&&t["s"]==1&&!sl&&now-self.g>1800000 if t["h"]<1500||t["a"]<1500||t["c"]<1500||t["k"]==1 var ok=true if self.y var es=ep/1000 if es-t["m"]<=1800 ok=false else t["m"]=es end end if ok self.g=now var m={"text":self.n+" needs you!","textColor":0xD97757} if self.o m["soundRtttl"]="s:d=8,o=5,b=160:e,p,e" end notify(m) end end end end if t["s"]==1 var ag=t["g"] var e=t["v"] if e==1&&ag>=43200 self._e(2) elif e==2&&ag>=129600 self._e(3) elif e==3&&ag>=259200 self._e(4) end end end self.v-=1 if self.v<=0 self.v=120 if t["s"]!=2 self._w()end end end def _a(id) var t=self.s self.u=0 if id==1 if t["l"]==1||t["s"]!=1 self.k=6 else if t["h"]>9000 t["a"]=self._c(t["a"]-500) elif t["h"]<7000 t["z"]+=10 end t["h"]=self._c(t["h"]+4000) t["t"]=2700+math.rand()%2700 self.k=1 self._n("m:d=16,o=5,b=200:g,p,g,p,g") end elif id==2 if t["l"]==1||t["s"]!=1||t["e"]<1500 self.k=6 else if self.C==nil self.C=self._d("c....c|.oooo.|owoowo|.oooo.|.d..d.") self.D=self._d("......|cooooc|owoowo|.oooo.|d....d") end self.u=2 self.a=1 self.h=0 self.p=0 self.t=now_ms() end elif id==3 if t["l"]==1 self.k=6 else if t["p"]>0 t["z"]+=10 end t["p"]=0 t["c"]=10000 self.k=2 self._n("c:d=32,o=6,b=220:e,g") end elif id==4 if t["k"]==1 t["k"]=0 t["z"]+=10 t["a"]=self._c(t["a"]-500) self.k=5 self._n("c:d=32,o=6,b=220:e,g") else self.k=6 self._n("x:d=16,o=4,b=200:c") end elif id==5 if t["l"]==1 t["o"]=1 t["l"]=0 else t["o"]=2 t["l"]=1 end elif id==6 var a=t["g"] self.b=self.n+" AGE "+str(a/86400)+"d"+str(a%86400/3600)+"h GEN "+str(t["n"])+" CARE "+str(t["z"])+" HP "+str(t["x"]/100)+"%" self.c=-1 self.u=3 end self.e=now_ms() if self.u==0 rotation.resume()end if id!=0 self._w()end end def on_button(b) var now=now_ms() if b!="select" if self.u!=0 self._x()end return end var st=self.s["s"] if st==0 self.s["w"]=min(self.s["w"]+60,900) self.k=7 self.e=now self._n("c:d=32,o=6,b=220:e,g") elif st==2 if self.u==5 if self.r==0 self.r=1 self.w=now rotation.pause() else self._x() end else self.u=5 self.r=0 self.w=now rotation.pause() end elif self.u==0 self.u=1 self.m=0 self.M=self._g(0) self.N=nil self.w=now rotation.pause() elif self.u==1 self.m=(self.m+1)%7 self.M=self._g(self.m) self.N=self.m==5?self._g(7):nil self.w=now rotation.pause() elif self.u==2 if self.p==0 var p=1500-self.a*250 var cy=(now-self.t)%(2*p) var x=cy=3&&x<=8)?1:2 if self.p==1 self.h+=1 self._n("c:d=32,o=6,b=220:e,g") else self._n("x:d=16,o=4,b=200:c") end self.t=now end rotation.pause() elif self.u==3 self._x() end end def on_hide() self._x() end def duration() return 15000 end def draw() clear() var now=now_ms() var t=self.s if self.u!=0&&self.u!=3&&self.d>0&&now-self.d>400 self._x()end self.d=now if self.u==1 var wk=self.m==5&&t["l"]==1 self._b(wk?self.N:self.M,0,1,0) text(11,6,wk?"WAKE":self.L[self.m],0xF0E6D8) rect_fill(0,7,32,1,0x1A1A1A) var fw=(now-self.w)*32/2000 if fw>32 fw=32 end if fw>0 rect_fill(0,7,fw,1,0xD97757)end if now-self.w>=2000 self._a(self.m)end return end if self.u==3 var c=scroll_text(self.b,0xF0E6D8) if self.c<0 self.c=c elif c>self.c self._x() end return end if self.u==5 rect_fill(0,7,32,1,0x1A1A1A) var rx=(width()-text_ink_width("NEW EGG?"))/2 if self.r==0 text(rx,6,"NEW EGG?",0x8A8178) if now-self.w>=6000 self._x()end return end text(rx,6,"NEW EGG?",0xF0E6D8) var fw=(now-self.w)*32/3000 if fw>32 fw=32 end if fw>0 rect_fill(0,7,fw,1,0xD97757)end if now-self.w>=3000 self._f(t["n"]+1) self.k=7 self.e=now self.u=0 self._s() rotation.resume() self._w() end return end if self.u==2 line(0,7,16,7,0x1E4D1E) self._b((now/300)%2==0?self.C:self.D,2,2,0) pixel(2,0,0xD97757) pixel(2,1,0xD97757) pixel(9,0,0xD97757) pixel(9,1,0xD97757) var i=0 while i<3 pixel(26+i*2,0,i6000 self.p=2 self.t=now end else if self.p==1 self._b(self.R,5,1,0) else line(4,0,8,2,0xE05540) line(8,0,4,2,0xE05540) end if now-self.t>600 self.a+=1 self.p=0 self.t=now if self.a>3 t["a"]=self._c(t["a"]+1000*self.h+(self.h==3?500:0)) t["e"]=self._c(t["e"]-800) if self.h>=2 t["z"]+=10 end self._n(self.h>0?"w:d=16,o=6,b=180:c,e,g,8c7":"x:d=16,o=4,b=200:c") self.k=8 self.e=now self.u=0 rotation.resume() self._w() end end end return end var ed=now-self.e if self.k>0&&ed>=self.T[self.k]self.k=0 end if t["s"]==2 line(0,7,16,7,0x1E2430) self._b(self.B,4,1,0) self._b(self.A,11,(now/800)%2==0?1:2,0) return end var h=hour() var ni=t["l"]==1||(self.y&&(h>=20||h<6)) line(0,7,16,7,ni?0x14203A:0x1E4D1E) if ni rect_fill(1,0,2,2,0x8C8655) var i=0 while i<10 if((now/400+i)%5)!=0 pixel(self.S[i],self.S[i+1],0x383838)end i+=2 end else rect_fill(1,0,2,2,0x9A8430) var cx=(now/900)%46-6 if cx>=-2&&cx<=14 pixel(cx,1,0x2A2A2A) if cx<=13 pixel(cx+1,1,0x2A2A2A)end if cx<=12 pixel(cx+2,1,0x2A2A2A)end end end if t["s"]==0 self._b(self.A,(now/700)%2==0?5:6,1,0) var pr=(t["g"]+t["w"])*17/1800 if pr>17 pr=17 end if pr>0 rect_fill(0,7,pr,1,0xD97757)end else var ox=(17-self.W)/2 var oy=7-self.H var i=0 while i0 w=1 end if w>0&&(v>=2500||bl)rect_fill(18,i*2,w,1,self.K[i])end i+=1 end end end return Clawd()