From 5077f3390f39de60fd589afd8074242f2e09656a Mon Sep 17 00:00:00 2001 From: Juan Date: Tue, 26 Aug 2025 17:53:17 -0400 Subject: [PATCH] new animations + images --- assets/images/cleaver/cleaver-charged-1.png | Bin 0 -> 619 bytes assets/images/cleaver/cleaver-charged-2.png | Bin 0 -> 475 bytes assets/images/cleaver/cleaver-charged-3.png | Bin 0 -> 657 bytes assets/images/cleaver/cleaver-charged.png | Bin 229 -> 0 bytes assets/images/cleaver/cleaver-chop-2.png | Bin 0 -> 486 bytes assets/images/cleaver/cleaver-chop-3.png | Bin 0 -> 486 bytes assets/images/cleaver/cleaver-chop.png | Bin 281 -> 777 bytes assets/images/cleaver/cleaver-idle.png | Bin 253 -> 734 bytes assets/images/cleaver/cleaver-retract.png | Bin 0 -> 678 bytes assets/images/cleaver/cleaver-windup-1.png | Bin 0 -> 748 bytes assets/images/cleaver/cleaver-windup-2.png | Bin 0 -> 942 bytes assets/images/cleaver/cleaver-windup.png | Bin 283 -> 0 bytes assets/images/meats/chicken.png | Bin 475 -> 650 bytes assets/images/meats/cow.png | Bin 677 -> 851 bytes assets/images/meats/meat-spawn-1.png | Bin 0 -> 380 bytes assets/images/meats/meat-spawn-2.png | Bin 0 -> 677 bytes assets/images/meats/meat-spawn-3.png | Bin 0 -> 623 bytes assets/images/meats/meat-spawn-4.png | Bin 0 -> 598 bytes assets/images/meats/meat-spawn-5.png | Bin 0 -> 490 bytes assets/images/meats/meat-spawn-6.png | Bin 0 -> 345 bytes assets/images/meats/pig.png | Bin 489 -> 627 bytes assets/images/meats/pig_.png | Bin 0 -> 627 bytes main.lua | 5 +- src/cleaver.lua | 106 +++++++++++++------- src/meat.lua | 44 ++++++-- src/meat_factory.lua | 13 ++- src/upgrade_table.lua | 0 27 files changed, 117 insertions(+), 51 deletions(-) create mode 100644 assets/images/cleaver/cleaver-charged-1.png create mode 100644 assets/images/cleaver/cleaver-charged-2.png create mode 100644 assets/images/cleaver/cleaver-charged-3.png delete mode 100644 assets/images/cleaver/cleaver-charged.png create mode 100644 assets/images/cleaver/cleaver-chop-2.png create mode 100644 assets/images/cleaver/cleaver-chop-3.png create mode 100644 assets/images/cleaver/cleaver-retract.png create mode 100644 assets/images/cleaver/cleaver-windup-1.png create mode 100644 assets/images/cleaver/cleaver-windup-2.png delete mode 100644 assets/images/cleaver/cleaver-windup.png create mode 100644 assets/images/meats/meat-spawn-1.png create mode 100644 assets/images/meats/meat-spawn-2.png create mode 100644 assets/images/meats/meat-spawn-3.png create mode 100644 assets/images/meats/meat-spawn-4.png create mode 100644 assets/images/meats/meat-spawn-5.png create mode 100644 assets/images/meats/meat-spawn-6.png create mode 100644 assets/images/meats/pig_.png create mode 100644 src/upgrade_table.lua diff --git a/assets/images/cleaver/cleaver-charged-1.png b/assets/images/cleaver/cleaver-charged-1.png new file mode 100644 index 0000000000000000000000000000000000000000..641a3a45b43067b8d4351a5b6b8121c019393cef GIT binary patch literal 619 zcmeAS@N?(olHy`uVBq!ia0y~yV8~!#Uq`Q zUM=h0Q}Ces7t}B&)f8OTRBwc&xEvNl(xxp7`(ULxfl* z-5uX+1o|jzoUq{ffx3*0EIl^N%l2Z2lXBuVv&i(%aQEOYhir1N-=wH62Yo z-OCmnzIM{(RAf}ln$HFzDX}KkoBuSG?a!N9^?%dRKR>NcSo^aP^K2F2?Ms5|-juBm9=eYjPRs-D>(5ebw@| z_7vkyBJW;thHPQ|c}zon^NdyHlYVKO*ztnv*8hEP*W9wR|1(*IS1(R(d)c>7aaI$P zYD7|EOjv(DT~mKk=U343Im@~~22LnEDE?%6aY2cWr&P?Jb9er~Dw^PN>D8|4ziF4A zF3~u#BZ2$VY0uOtkIxuxzplS}=Vkf7ZpT8!SS7_{995smET8l5=X$r}rg~gPdNZ0X z75(`Z~&ums9#r85BJUmXX@vtFP$U8$_S4=1_qZGl6Rb&;(9Lhdx1nf MUHx3vIVCg!0L3R1jsO4v literal 0 HcmV?d00001 diff --git a/assets/images/cleaver/cleaver-charged-2.png b/assets/images/cleaver/cleaver-charged-2.png new file mode 100644 index 0000000000000000000000000000000000000000..8549b6d475433b18b37e9107d8ceef2ccdcdd5ba GIT binary patch literal 475 zcmeAS@N?(olHy`uVBq!ia0y~yV8~!#U~XV<^8 zDrYq@&x1ZyqJL?_4 z)lcV0+xz~5&SRT9_am+SP8jmBb{5B9xc$0&=1keX<=vB>efs)$@~(gPKRR{`uyz*j z@9x&!yW0A&-Z|y(*#YgY*OX3|lrK^!+^zj0Cw%(rNqd)mSS|OwEIfd1?ol6I)z+pX zZb6$#CyGLbn^O|o zd&M=PcNv>-YjbdNvN+8>bRp`k?WSbwjgN)zzu)e%_05e{pPt4nU&+FN00H}#yyaeT zI>8|0>z~CJGxE$-Cz;6b8Go1WKfZKcdG^xPPLK1p)iTajTRg?)^Xb3h(?VLB<}6;o zB-)k9!fNU6=yv;PgvgVaFRWK%&+PyF`N4DP=+&kUj^|v%11=wp*uHIh_%8WH3eOj5 zzIgDVLig#NdpB2pHW7IeYcfCWcGEBa?^?F?SCf{-r&T`pRMGT2_4k$LiJci~6V~0+ zeRk^QGM)td`=rj@QFV4}KFp z6&b;G|JBPC8QhzuX{c|Wk?MWY8RYg0tDo;pxLWr9y}9S5H(wqVzCU_;kMs4Q9#_Y6 zuE7&@)4yMwys4e-sYxtIq;#J`^tspO?vs|>eEIy$-~IJ-RVRH(F#q%W?5@+EffI`7 z>YkW3`ILtG48#3(F>9XP+c(>!C^i%%p}ivG*_U6xJ5}cT`ZqmRleb&@^w+9I3eT;A z1ETu&?%()yN!8z4&$s`}D+IZU))})t-S~9L=Hsu=Y}7ch^PEUZdcW@TTVW?*1gnDoq&fq_9Nz$e7jy};-H|Nq~9 z{J44Y;E5|YcPyJzlJs~20|NtNNswPKgTu2MX$%Yujh-%!Ar_~XUcSiNV8Fq0A^Krh zLhHH%TzBh5bFX%sOf>xTv#7Cc+ky2;r_V&1s=fBP_S0>%sJqEy>*_1jX~*O)>ihrr zvbtHnf@iC@*H|WLL#tI!`y? lNuinOIZ645e^FE4ko4b*(0GIV>P3FjeKM zp~XATOGgvWovMm)ckDCPJF%rh!>?BJMZfxjT42(zAw1DHC6hx$C`g@D_1X8Knk^n`WMVv#c7|E4ko4b*(0GIV>P3FjeKM zp~XATOGgvWovMm)ckDCPJF%rh!>?BJMZfxjT42(zAw1DHC6hx$C`g@D_1X8Knk^n`WMVv#c7|WlrEYdSRu&M_!Gt9U51}KUk>r?|uGI@B8xdm>)Z@&BV-K0yuzg5oTp2~m# zCl^)jUubyj$bIXsXa5AHo*pTzXE;-~>7Dt9Zbw5AksY_*y;@TwQT=J*f&-y-((-M} zkM|x~vzCR6D@Jy+Mg5zP-bMW9BE)Y_pT5-wB*to~dgR!WnN@!qgN0r%=j7swdCGe9 z)W^%7I*YE$Td?QmzW*^j=G7z(je@1zpSU|OEss2xqn9{W#PgiQl(Ky)nc3CHJuXE( zzZE3n>e#qCiD%R1btjLREQzZZ@C@31ch*iltth`~?B?sGJa5%}PgLYuyx_o8y%T+w z|Eg5WmOq!8eCfyQMSK1f&59FYWnH%^GDa-AWp1rxa?#X~smrFhI5w`%5liQOxh=YE z|IBygeA|+z?2o^hd^x6@o0XOI-3ivxcXlR|O0vK1`X6-B`ktmiSj3~B-)7!jKK(pb z?f)w#A|g9Z%}cv|^X9FR+vh&*dK-2xJ-7AUp9sron`=}5ZnRx@BDLAsv2pbqPp9-M z_V4kzZj-(|J|FLS>0O5YMjq>HHNSs)PcpgnKjzzFi(~QX*QM=iLr#9}lV)XI_hHqq z-|v}~J)fVS*Z1gl7p3^`^|b$IU!6M2{q7^L_Az(I#?^oSH`mlzMjl-v`+WMB z|2r}b>pXp39UEs?JGw3v{r2o_wP$^~)n^9@d%F6$taD0e0svYXaLNDx literal 281 zcmeAS@N?(olHy`uVBq!ia0y~yU@!w=7G?$phPv$XcMJ>+(g8jpuI>ds%eU;h{pjic z|Njd+Cg%h?dne}D8tFWF_vv%1mpB6h17k^$UoeBivm0p)3=C^LT^vI!POrUiTJW#| z2TMTI4Y4~+x+_?>J8I zRNl0hwn2FQyON$oJ&cET`%9?yVpQ7F|EX*nF^%^9IIqb%skQTY}B9b}$#SI)EZd{=b+N6e=>-Mv%P${&7uR$ac+ zivbB7UENdFdU|#C+;^q-cT`ngnH`|j{_i{6g8j_;D^^Q*2K{}+>KU|Y9vRM9Y61;h_x69c(Gwn?a;gU@ zv(8AX@-n_0%=|xZoz?4*%~!MDujYCg81Td>zFWG)Zpzmc=j>-Ci|y3VC_4ORL03@> z>-Y4aO&f2<^4f@q>|E%bAlA#q>Z<4OxNXKOskxrfK?!=kDV`!CJMVl~c{0~E?SiRw zpg>ZHi{rK#*Yb=N|9w?GDAaauF1er+6%li43-A8>`(Almx+#48w_X07bU{|vbswrX|NXqk!SZ0~ zzM5MFa@Vs%pO@y{uU65lC^5gL8W`||Z;^uMr9+P<*>}$={dx4qtF5ba+0vsD%z9J7 zPJHfYXRW`>s9yc*nwP4X+f+QiMwwRVe_tA1u4-v~^5^~Qg^rFBwa+eJd)?<#dSG(u zUX%Blyj)!|nPmZ&a&E?)Dh&_3IVFwVch#jjq3W|smfX~OTg|ml0V$C*aDHLmS@--v Sk8wyZNZ8ZW&t;ucLK6Tk8co0e literal 253 zcmeAS@N?(olHy`uVBq!ia0y~yV9*0$7G?$phNaWZSQr=>Bm#UwT-^(NmT%d0`_a?F zj>$QJ&fbYRwnjQn-hGc_UF1Eiz{3)- zzCe3JQ+NXF`U6~X`zHv@3YrtMj!n0@nKPWtv~$(MaL{zVfR z(17Qw7P*Al;%p16Ykzl_JMmivp8NA&*kNA+Yoz7LwX-KJIry9Z+>9w9Jglzoa$YdX z*~ArXi?^w^nzH2US>4;NftDH?MF;;o8ea~cJM-nr2dj^Ix;jo=oy#Y+^WH?2y;XnR zCQZ2$F+qj5?E4y}=ii^{pS}58)lhtCV89ct^Sohajvr1=|Nr&f(>vd9mQH;5OGBR3 zbzPBTy#GFa)y($~HZQrXDj6TRuQ;nZP()TRnv}w$9gmr- z&*V~_8MgKt$R+R6mUDZGr`{F~t6b~kIB|7Qz%yIZ%>`e(mRw$KC4YZTYT320_DNq} z+{=Al^Go{n(qq|NTwQnK>-~dELe2dyzFs(#>c0>-;f7-I?E{+pdzl~(PACpp}8floh|J!}b+x+uwrcbdpxBMl2ySGNK zsYyxvO>pQojq0|jy*~G#^+CRd3jge zz4JJJx54Y2V1X>rKR4g({QO+SQdQJw-Ha^n-zPP7 zU;!Ksn(t*zqF?V_QLB6A{Ik8Uoh&}>=XdyJZS_k1&uR&VSJ&4wUbuJb9pfCELYwbd z-7c)Gc`w3?H*bA+|Eb8ACpU}JAD{Z9#PD`)E`!*!^w1D_EsX-^^9$Jf=P`X)_*=BW z>t{)fWmw1NyAh36tGkyqF-`yR@4n@WU*%sJ%HsAjKDc_%I{oq0SC!Ad_s_SR&Tvb= zoFO7IuEgutx4-V34?gYm`n7nTf|f=>WLm%z9#5m%Z$9rod~JNn*W{1xt-dlxQuokdJyE; z=sm~LIQXfM#p{J3#wS(Is%an7_vBl-;K0(l`To%p&MHkVQ#*QA>A!?}?%X9!Oy-~b zLu&t7ofI#xKl1B@&y|~VxwvAUg+E@f`NZ_ny(wnl)4dpaxAyMq*X9xx*>T1=BW)Fr z!}A5NuRj+lefo$sJvk`wSiFAjI=!F#GgoAnX=xNV@8@ct>-lecUCq?_zdhRnUd#kp zbE?T_*(9ZXf0++#yuY8}$EN+anRl4fYP}4YvtQpUP)nmg*;?4ky8GRoz4yOI#M$Io zlwZpZef~4=ZZ(I?yt|g?laK9H5f#~S=bF$z^^Jm0Eq;GHZTL0nYF&?x@yZp)ZXJtQ zKRqPiL6LsOg`!6)qEF|)U8!&~G;cop&2q_SdH4G6%-bq+`QBaT1#zpt{axR=D8Nw( d4G6#B@3wvLy1m$^m4ShQ!PC{xWt~$(695{dW<&r0 literal 0 HcmV?d00001 diff --git a/assets/images/cleaver/cleaver-windup-2.png b/assets/images/cleaver/cleaver-windup-2.png new file mode 100644 index 0000000000000000000000000000000000000000..cfd2702dc96bd5a8b26a7339f5dd78bb1c5bd861 GIT binary patch literal 942 zcmeAS@N?(olHy`uVBq!ia0y~yV8~!#Uhi2dtrn|l3+kjM-(ULN1jEgZ)zO51$EZ2c#H1gpU@EH zsc>JxRVQisl$BEo8bg#8B^|hS?wOzdb~C?sX`Avlmv8@k|MO4N^6K5zn~(l`_uq(F zz==b#1xze)eQJ8~?#q|^-o@vdG%?zCF*Q^h8~d5>y?amY!k4@$d(LML(f+GKoq&I)sD&E1!u<<$KWtorxsrzeBMPL>G|un+^S}1VBdOr<~w;26Az1>(oZ%xaUFP}V{tZlc5-^5?Q2Jd zhP{67jCa?S?Y>+%D?j3b!owdOj?8bP)IdG1j4=Hdl~hfg-jJ=x-XW$Mabml`!2 z^K`n5R>o*)D%9RR9BZpG#U?4>mMzE3AGCDYzzhOK59R<(%idE zC1XOtk+m!M7+4v$mxuSfdH4B~F~fn*>~awXnY|Cn=c?P>dW~yYFxFNl>O!-FR#!!jiU;O z=e)nakD=r2GcHDufFujUjQYQP4%>?_WSNRGglL7<^Iv5*@vu-%zi{mGY=&JM-Dd}H zdE@Kc++u9Rb~GiMk-=tvy=pN3IZ#NpntPOQbbd9@>D#@Wj0pu?`2s>!1+LweW+olr hl#WU~v45gJdz##<5Bz)IGB7YOc)I$ztaD0e0ssr$tf~M2 literal 0 HcmV?d00001 diff --git a/assets/images/cleaver/cleaver-windup.png b/assets/images/cleaver/cleaver-windup.png deleted file mode 100644 index 43bfeacf3441039cbed1bfbe62600c793f7e5f72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 283 zcmeAS@N?(olHy`uVBq!ia0y~yU@&4}V6b9gW?*1oa1wvdz`!6H;1lBNUf}cp|Nl?l ze{MQ==X77*s%+27btmrM{?y07z`$4%u2~E2+ZIujnC&%2*@8wSIPU4T8?`%9! ob4;vWFKJzrTDEmvTVBfgx@{@0|BuW)5CQVEr>mdKI;Vst0Pak9!~g&Q diff --git a/assets/images/meats/chicken.png b/assets/images/meats/chicken.png index a89825587d33a111df1bdbb209c3247d9352516d..41ffed4f88296d214d00ec72e61bc5743d71ff70 100644 GIT binary patch literal 650 zcmeAS@N?(olHy`uVBq!ia0y~yU`SzLU~uDLV_;ygYBS7aU|?V@4sv&5Sa(k5B?AMK zi>HfYNX4ADx9l^76J^>zK6g^rY+{^#O)2V1tjMb+v+v3r5t`oA(H*d{n?r0l-(4k< zT^-$gYzv*Y@7Vg_!IO}KN`)FNO03GJ)iS3RzCRsXm09)v_vSkL+p+iV{SJD!bN3%c zK^)-cbk&V&aeFIwK7Z?VebUbV-+ucqU4OF4>kVti=^#Z{+1E)S9foOKGox0f_x=7+ zVE102);n{%S(n%hh93VoeTzLYT1RF~>?l@e2-g1UlwRcKXxs4Z!|NONe%XgzG_{V* z$oM|ti&XsX-wX}MZck6ib$>AB)AhX?9*$Z^X1r)!a!T)U>|;{~JwUP zGVO}Ge#HD|IMD4U-f(=m+uYp4OIJ+z@43aPCev`=p7IaP^IpFEF@Zypb;;TbaJ&yuR}JckjNlJh*;Oj^Xq9 zIN74qqbmfG7l}TK&er+4yKl)1$K3pN*0FUL@#ocFv{*`MTnK9%3N_my{(|a7Bt?i3vT5$U&XO(E6;;|Wf+m{&4+t+vG z+p{YE1y*H-j1p^i&0l$Um91{-z2+4H$!Elaraf(ac_#kmd0jK*HP84(lX{*mUlTBA p`Oc@UFIOyGAs{F?G5L|X*p%syO>dR3GB7YOc)I$ztaD0e0stKgDgXcg literal 475 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|U{K;|7YyNlowGa+UpagrgJ&V57;nF)hN`U2vAnto zi@KQ;44dSFk2EF5^KV?hec%(1caj8`ua1Jqqn1w`KJzDS((3xLclY+rP4zd93LKpF z=9s8#%GZR8j2jhuD&`3{xzDZH;xM2OwRmr&U=TKX^Fv`q>KxVCr#!47e3`rIzopr07TZcasU7T diff --git a/assets/images/meats/cow.png b/assets/images/meats/cow.png index 7a450b60d439c9dec0359a4c0dbb89e66bc0d429..be203d25deb1acd6b42ce40b1992f7f1542a6799 100644 GIT binary patch literal 851 zcmeAS@N?(olHy`uVBq!ia0y~yU`SzLU~uDLV_;ygYBS7aU|?V@4sv&5Sa(k5B?AL9 zucwP+NX4ADx9l@S93@ykY)^9dz&}ID%uMOyq{l7Xnn&E$zIn^Cb%XJYCmRG5Tj!Pu zo%QrdOk5Zdv1F>S%X&^mXFiwrep>>igEcgg1QT^jK9m`4Hr{MqZT{kS=*fF$%}*NU z@1MJuwF4W_UEXqDjdA=#@_Aevu$kTHK z?sCQND7~BYCns0$YiY1-<({{Du-;+jHjSGL&CoyE0 zP1~#1%E{SN%D>UKZO^9C=f9Z3)&$4KfBtr6`pZ=T$68p9Ep1o1WD-5QyK$}dy)U~p z9V36PGS2YvNLVARbgp;N^pv-XM)y5mZl8DF@ym^v@K~_Srl9re<o#Rux|4#5f@h+CMTRV*v8w>Z{)}B1sc*)LRr@XH-vt6CcazDHjY-Q3b zSy#ig4tKw+xf-jM)&5mwSWxzKRdB4Dih&uYV0hB0za4Yttl9h6_qi#Eua4h#QlrabMcYJcZc zls}whRC+g0ed3&;%rm90d~(9SZNJL@>f_P#^MCA_G2y_Ix?gv%J?(zJN9D+s;u7tk z=?s$>PMj;q@W#SmPUfC-kKKeBK76}d%~1cI%UH4TWbJnI)p^^Q87e+~Y5nw7_;|ky zLx5(#+N4w~_51sZ<0GFx_z=f%;QV=eA^-L-6Z(%cY}olxmchWbUb!?be#V3YJUWVM z=jW|wV$gaTs9&1*&(i(;{GAg#jxA;PKK1xTa{b$*EiB9Ca|W*4QLDWF{M-3v`!v`) s;~r<*P2{-!`0ue60YSmP%5{uCUh+G1T-~Y5z`(%Z>FVdQ&MBb@0Qn1%LI3~& literal 677 zcmeAS@N?(olHy`uVBq!ia0y~yV2EO1U{K>=V_;x#@#xvXz`(#*9OUlAuiDg-sW&Fd{rvw+z{9(OUxu{q}BRR+a zc8%lO4O@$jYR!{4>r%Eg>@+A0?d#qiyT6*K_wZ9s#T>RYe_2#S4*B4&p9J%r&V1?*X=d=A)eXsft zYCHF&HQkX+D%qJ?pKhF1r8m8N?qtzrYIS>SRKD}u?6VRUTs(7w*)6f#cif+r#M;c= zD6;Kpvv!h+@WCEAK6VC%4<8GBW+hV@B|NQ#7Jb^p!Ow0U#_hhfc*(3ahfh_a?TWl?2U|`@& fjqptK^<~gvU|`^2fPhQElR*qmS3j3^P6-p*S~c4s=)H8I<<4vRNO$aM%S;rpZjFHUFZAKPv(k-Gh?sSe}A#= zTnpGDu!(;x+hfX|_jy~Kk9t3yvvcNO-8<3!bw+(vd^f9>8Yn{D)T3ayxm>{gu5Rd# zWpxIt-)}r`=jeT27itU04QW5>jrw=J{?uK>a6rlaQmDu6=bYZ4aAxpy^>bP0l+XkK Dt`wvD literal 0 HcmV?d00001 diff --git a/assets/images/meats/meat-spawn-2.png b/assets/images/meats/meat-spawn-2.png new file mode 100644 index 0000000000000000000000000000000000000000..6c71daddffd9fee6317ae1d4c669eee165e307f3 GIT binary patch literal 677 zcmeAS@N?(olHy`uVBq!ia0y~yU`SzLU~uDLV_;ygYBS7aU|?V@4sv&5Sa(k5B?ALf zyr+v}NX4ADvuyp27znh^6`jMN(jvgCzG&g{#S0!YY4dGl4XI{S@pEauz{Tm;uw@~G zvf;%C8*L-^w|w9F@z}Y(`+sgK3OJSQx+8yQ@0{5 zpH-B}ElANY-~Z>c=Eav2B+aMwUw_rSar3%M^J4zY1-Y~>nrCKJ*=4SqUza)^Sl|dk z1*a{N%)~aY71?U&elGbeQ}FAJeVZp$FY;(@n7C!0Y5(_K*PrZlj{dx1@6XSc=dT9qmX?g*Q2|QU`>#LGHpPF<+JcL6cuhe6m{?~6$;~r;kyrzH4Q%RKRm_JYFsSiO6n$28{iz8(x z9r~SfcQ<=lEPMW39~mhY9yl^(&X}6pTU)$w+q_TbR;h$=D7FX~3EMF?yDM(3I;+FU Qz`(%Z>FVdQ&MBb@00iMIHvj+t literal 0 HcmV?d00001 diff --git a/assets/images/meats/meat-spawn-3.png b/assets/images/meats/meat-spawn-3.png new file mode 100644 index 0000000000000000000000000000000000000000..fb09203cc7705a4d822715349afeafa7bca1a7bc GIT binary patch literal 623 zcmeAS@N?(olHy`uVBq!ia0y~yU`SzLU~uDLV_;ygYBS7aU|?V@4sv&5Sa(k5B?AMK zrl*TzNX4ADvu*R33sDb3^WZo%X%#gV#1a zem-B)*q0$7ZSxoAHLb7De=nW2?B(mvwoCT^{rKm@-F)Y&b_0$M2^JR~CM7mT!RCez zM~5RBcI``Qf398pHaj%F@^@gx{L@wQF8y3wGH=62rAcXiOzOO(!0E8>xa7!zr24QXlb~*9;`xBuvYtV zcn4%f;7b1l?_|>d-iP z@q$%&l=6Y3EsA?Z_g?&)+#zwrS*)q*gx3yZm8$u?r3oDp56#6VCtkB%9wuC!zx~U< z^{V;v_xImBrPu`NIJraO$)+O*1PtFj+a2c|_5JC+ zZ(E=2G~K%UxTS>Bv0UE7w-*?kkL+M=(OJ(Xq2%^;ua1rscUwndTD4(PoB<0%*b)7w Xh1@Qgg-t#T3=9mOu6{1-oD!M<&QcvP literal 0 HcmV?d00001 diff --git a/assets/images/meats/meat-spawn-4.png b/assets/images/meats/meat-spawn-4.png new file mode 100644 index 0000000000000000000000000000000000000000..d3962a1e94db0bc467632109b0c5aad4c471bb02 GIT binary patch literal 598 zcmeAS@N?(olHy`uVBq!ia0y~yU`SzLU~uDLV_;ygYBS7aU|?V@4sv&5Sa(k5B?AMK zfTxRNNX4ADcO3l=8wj*M+}0%A&=RrX;lK1(ZLX~$egP{JQy2DG^&Fq8rvIUSx7P~8 z8|S~N@Xh9B$mwhUTVnHO`O@2hH+Ana#4K_?azQakZjt5Dm0=l|sO z=f{see}4V@Lh1FkmJUu~Bk|cCX)jY;PRh+Sv{7;KnIVw>5yFK{H9~`{KbOpuRS_u z6vTbG))QD9{w(zT#pp-x_livtFf8eiuyXPFuJ`)dR_0odjv1exE5`l(7%%)R^xeI@ z-j)tcZ;#N_xY|>Puh|yQe}8t{^p=jDmWpd6EidvoI31btev`+s(!J+XJvwG=n%sR) z*uXUI_q*D*?cbNEaSBe3bKVmyle_(D^vu3%%r}dJ_FnHyW6I~Ebv(~%|j zgSX#Ww`lvN-ghrU!heO{fBv_wOzlPOzeB=@r)pT=?v_$<@%feWer>t!?KxK8V;{b; v-LP~5#H%T}%RXoB`fmN`hoch%6li?s_4>>E^V;Jh2S6g8u6{1-oD!MFS$kcv5PZ+Yh(G7xD^ba=@XwenSi=lA_;YCNmF-f~UgQ06z-bz|Sh$0~pB3v^6Q znEzwyUA~4~`(I2|GuKc5dGq`4!?!R0S1PT^v(#)?WnaASs*1|?)+*iHn_DLc7>0C6 zXu0$pDc;<^bn%)vkB%9cUs$(@P5Su1`rNO%OT(KyK=M4IO3QZee>^wCd;YQ`1wk`oeAU$Dh>iJS4Xs7{HqRZS7|kN?-_6#RUF z>+!T-|0>UDd!#J8-L;)x)79xnfMU`L0mGA(CsyoJEDyQFogJy46=n5)#oDj;c3KH3 zrF}ZLCOUZUx@#UC5<72x4ZF4_XwB7BA*Ew`m*11qMa94EUjOsxnDHuq z?uxS;m{&h-yZR<>^-fI{m!3P-k$c@k6)m+q6%~`(RF6otFBb~B)pWShiD}I~m6~~0 z^)+|zsk9b7`aDs<@ZIwzTfgURow4@ZfxX{Td)+)cW~8kR(G^_m=D%m>jv`Pfu_T|l letJ*a-zp&{24rw!i}dsPN9MC7M*IK?d%F6$taD0e0ss?(-faK? literal 0 HcmV?d00001 diff --git a/assets/images/meats/meat-spawn-6.png b/assets/images/meats/meat-spawn-6.png new file mode 100644 index 0000000000000000000000000000000000000000..7712dd959cf1c07176af313b785bc5e4f06418e5 GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0y~yU`SzLU~uDLV_;ygYBS7aU|?V@4sv&5Sa(k5B?AMa zu&0Y-NX4ADx4iQX8Hlh3uy@LqT*~~uUrmiCKy??B%AG(fho2@74zQk+WP7P8`2JSk z+;tl~Z0Ena@HKDq+o&t|w`e$7Z~p%()qTq=mNrk18LM~i_4kWPx+eGdx|(9*zq_U@ zi#=b}#(Fzly7GBtU+?Za^IKXvrSs)Y)t9U}r=sHH;}mp1J8!GWMRpl5YYfci zulz4swb6Ek`@{(b-MfF?EK7av=X`mdv(up?CCBgN&-5(>L&$#wn sZtv1k)t2uD-}m0W@m`3D0T~E95NEm96w0(qvFVdQ&MBb@0Fk+uivR!s literal 0 HcmV?d00001 diff --git a/assets/images/meats/pig.png b/assets/images/meats/pig.png index c97258f227512f7ffc2e7698002516efcebca025..feec022fd1e5dadb3ea687607d9b62f8f80aa745 100644 GIT binary patch literal 627 zcmeAS@N?(olHy`uVBq!ia0y~yU`SzLU~uDLV_;ygYBS7aU|?V@4sv&5Sa(k5B?AMK zuBVG*NX4ADxAgs$9U0m_rgJj2Dw|5Ma6aMj=jOnox- zQ7czx&-eXBR@^7G59_I~Uvgpd+C|AHW4F&{__K4zi8-lDP1<}U^ILDcmw!A(Hu=+( z8Maf4DvKxA{4u%q+BU_@Qhd_1iFTil+ul}}bygDlQXi+KVx)M_nWxOMj5Bm<;8lso zUac<2+!Z+wMD2~sm=?PA#%Yh06Hff7;olhU8r#EscGJGe3HPmjx*cWsu==XewEFq; zr~kUUYQhPYYW|J$H(o!xtnm1j+uz*`U%$3@iuJlWXP%XoiqXOQSAxq7)uVTZ&aDda zEB_X>mhC|D`sXErS}I0UMUDJ+*YY2@yFWeo@3B`|OdB@suqc|AcD|_Xn|6upuV;%S z>^4t0lm6|`8ySZB|N9vWzJ6dhaQbrg!pF;gzm<{S9h3Ytq@$zb#FPs5WBu#$6z8}v RWnf@n@O1TaS?83{1OPUt7?S`1 literal 489 zcmeAS@N?(olHy`uVBq!ia0y~yU~pq#U{K&-V_;xd-^_QIfq{XsILO_JVcj{ImkbPy zot`d^AsLNtXBzq)b`Wqqeu7o}gkaD`g{7SA4@68f7kczL9Aup^sflgL9L2T#4zoN& z0+ufK^mJyw>V9kE{<7=Y>zz&3f37euD!YHK=ZzDG|K^+i!GH4h>fM+V{3z!IyG2;m z?)APq=lHm|Jjvaj{fF_+^%oy=V!~t2KA$@)=a@j&>OZ@pERQXjC1kZ;_xa+99UV3D ze13BzOKjz=|F6IGUi$b*-nr`2lvfvnmdx7kb1zR)`U^xFJ&zxnn)$ICBWe_iI`=&8J!!zF0k z_ULWRf9`Lwn!H{Y%6=s5BF`f}mpGrxwK#)=x`Yn+jA+7^2;)Q9=jOnox- zQ7czx&-eXBR@^7G59_I~Uvgpd+C|AHW4F&{__K4zi8-lDP1<}U^ILDcmw!A(Hu=+( z8Maf4DvKxA{4u%q+BU_@Qhd_1iFTil+ul}}bygDlQXi+KVx)M_nWxOMj5Bm<;8lso zUac<2+!Z+wMD2~sm=?PA#%Yh06Hff7;olhU8r#EscGJGe3HPmjx*cWsu==XewEFq; zr~kUUYQhPYYW|J$H(o!xtnm1j+uz*`U%$3@iuJlWXP%XoiqXOQSAxq7)uVTZ&aDda zEB_X>mhC|D`sXErS}I0UMUDJ+*YY2@yFWeo@3B`|OdB@suqc|AcD|_Xn|6upuV;%S z>^4t0lm6|`8ySZB|N9vWzJ6dhaQbrg!pF;gzm<{S9h3Ytq@$zb#FPs5WBu#$6z8}v RWnf@n@O1TaS?83{1OPUt7?S`1 literal 0 HcmV?d00001 diff --git a/main.lua b/main.lua index 59a41b4..55d2c1b 100644 --- a/main.lua +++ b/main.lua @@ -25,7 +25,7 @@ function love.load() cursor = Cursor:new() -- Create a MeatFactory instance - meatFactory = MeatFactory:new(5, {"chicken", "cow", "pig"}) + meatFactory = MeatFactory:new(5, {"chicken"}) instances = {} instances.meats = {} @@ -37,6 +37,9 @@ end function love.update(dt) cursor:update(dt) meatFactory:update(dt) + for _, meat in ipairs(instances.meats) do + meat:update(dt) + end end function love.draw() diff --git a/src/cleaver.lua b/src/cleaver.lua index 7ff586b..22d1f95 100644 --- a/src/cleaver.lua +++ b/src/cleaver.lua @@ -8,75 +8,111 @@ function Cleaver:new() instance.timer = 0 instance.score = 0 instance.images = {} + instance.frame = 1 Cleaver.loadImages(instance) return instance end function Cleaver:loadImages() - self.images.idle = love.graphics.newImage("assets/images/cleaver/cleaver-idle.png") - self.images.windup = love.graphics.newImage("assets/images/cleaver/cleaver-windup.png") - self.images.charged = love.graphics.newImage("assets/images/cleaver/cleaver-charged.png") - self.images.chop = love.graphics.newImage("assets/images/cleaver/cleaver-chop.png") - self.currentImage = self.images.idle + self.images.idle = {love.graphics.newImage("assets/images/cleaver/cleaver-idle.png")} + self.images.windup = { + love.graphics.newImage("assets/images/cleaver/cleaver-windup-1.png"), + love.graphics.newImage("assets/images/cleaver/cleaver-windup-2.png"), + } + self.images.charged = { + love.graphics.newImage("assets/images/cleaver/cleaver-charged-1.png"), + love.graphics.newImage("assets/images/cleaver/cleaver-charged-2.png"), + love.graphics.newImage("assets/images/cleaver/cleaver-charged-3.png"), + } + self.images.chop = { + love.graphics.newImage("assets/images/cleaver/cleaver-chop.png"), + love.graphics.newImage("assets/images/cleaver/cleaver-chop-2.png"), + love.graphics.newImage("assets/images/cleaver/cleaver-chop-3.png"), + love.graphics.newImage("assets/images/cleaver/cleaver-retract.png"), + } + self.currentImage = self.images.idle[1] end function Cleaver:update(dt) if self.state == "windup" then self.timer = self.timer + dt - if self.timer >= 0.2 then - self.state = "charged" - self.currentImage = self.images.charged + if self.timer >= 0.1 then + self.frame = self.frame + 1 + if self.frame > #self.images.windup then + self.state = "charged" + self.frame = 1 + self.currentImage = self.images.charged[self.frame] + else + self.currentImage = self.images.windup[self.frame] + end + self.timer = 0 end elseif self.state == "charged" then - -- Stay in charged state until mouse is released + self.timer = self.timer + dt + if self.timer >= 0.1 then + self.frame = self.frame + 1 + if self.frame > #self.images.charged then + self.frame = 1 + end + self.currentImage = self.images.charged[self.frame] + self.timer = 0 + end elseif self.state == "chop" then self.timer = self.timer + dt if self.timer >= 0.1 then + self.frame = self.frame + 1 + if self.frame > #self.images.chop then self.state = "idle" - self.currentImage = self.images.idle - self.timer = 0 + self.frame = 1 + self.currentImage = self.images.idle[self.frame] + else + self.currentImage = self.images.chop[self.frame] end + self.timer = 0 end end - -function Cleaver:draw(x,y) - love.graphics.draw(self.currentImage, x - self.currentImage:getWidth() / 2, y - self.currentImage:getHeight() / 2) end +function Cleaver:draw(x, y) + love.graphics.draw(self.currentImage, x - self.currentImage:getWidth() / 2, y - self.currentImage:getHeight() / 2) +end function Cleaver:mousepressed(button) if button == 1 then -- Left mouse button self.state = "windup" - self.currentImage = self.images.windup + self.frame = 1 + self.currentImage = self.images.windup[self.frame] self.timer = 0 end end function Cleaver:mousereleased(button) - if button == 1 then -- Left mouse button - if self.state == "charged" then - self.state = "chop" - self.currentImage = self.images.chop - self.timer = 0 - -- Check if the cleaver is hovering over a meat instance - local x, y = love.mouse.getPosition() - for i, meat in ipairs(instances.meats) do - if x >= meat.x and x <= meat.x + meat.currentImage:getWidth() and y >= meat.y and y <= meat.y + meat.currentImage:getHeight() then - -- Remove the meat instance from the table - table.remove(instances.meats, i) - self.score = self.score + 1 - break + if button == 1 then -- Left mouse button + if self.state == "charged" then + self.state = "chop" + self.frame = 1 + self.currentImage = self.images.chop[self.frame] + self.timer = 0 + -- Check if the cleaver is hovering over a meat instance + local x, y = love.mouse.getPosition() + for i, meat in ipairs(instances.meats) do + if x >= meat.x and x <= meat.x + meat.currentImage:getWidth() and y >= meat.y and y <= meat.y + meat.currentImage:getHeight() then + -- Remove the meat instance from the table + meat.meatFactory.hasMeat = false + table.remove(instances.meats, i) + self.score = self.score + 1 + break + end + end + elseif self.state == "windup" then + self.state = "idle" + self.frame = 1 + self.currentImage = self.images.idle[self.frame] + self.timer = 0 end - end - elseif self.state == "windup" then - self.state = "idle" - self.currentImage = self.images.idle - self.timer = 0 end - end end - function Cleaver:getScore() return self.score end diff --git a/src/meat.lua b/src/meat.lua index beae489..adeb202 100644 --- a/src/meat.lua +++ b/src/meat.lua @@ -2,16 +2,21 @@ Meat = {} Meat.__index = Meat -function Meat:new(x , y, meatType) +function Meat:new(x, y, meatType, meatFactory) local instance = setmetatable({}, Meat) + instance.meatFactory = meatFactory instance.meatType = meatType instance.images = {} + instance.spawnImages = {} instance.currentImage = "" instance.scorePending = false instance.value = 1 instance.x = x instance.y = y + instance.spawnFrame = 1 + instance.spawnTimer = 0 Meat.loadImages(instance) + instance.currentImage = instance.spawnImages[instance.spawnFrame] return instance end @@ -19,22 +24,41 @@ function Meat:loadImages() self.images.chicken = love.graphics.newImage("assets/images/meats/chicken.png") self.images.pig = love.graphics.newImage("assets/images/meats/pig.png") self.images.cow = love.graphics.newImage("assets/images/meats/cow.png") - if self.meatType == "chicken" then - self.currentImage = self.images.chicken + for i = 1, 6 do + table.insert(self.spawnImages, love.graphics.newImage("assets/images/meats/meat-spawn-" .. i .. ".png")) end - if self.meatType == "pig" then - self.currentImage = self.images.pig - end - if self.meatType == "cow" then - self.currentImage = self.images.cow +end + +function Meat:update(dt) + self.spawnTimer = self.spawnTimer + dt + if self.spawnTimer >= 0.1 then + self.spawnFrame = self.spawnFrame + 1 + if self.spawnFrame == 2 then + if self.meatType == "chicken" then + self.baseImage = self.images.chicken + elseif self.meatType == "pig" then + self.baseImage = self.images.pig + elseif self.meatType == "cow" then + self.baseImage = self.images.cow + end + self.currentImage = self.spawnImages[self.spawnFrame] + elseif self.spawnFrame > 2 and self.spawnFrame <= #self.spawnImages then + self.currentImage = self.spawnImages[self.spawnFrame] + end + self.spawnTimer = 0 end end function Meat:draw() local tableImage = love.graphics.newImage("assets/images/env/newer_table.png") - local x = self.x + (tableImage:getWidth() - self.currentImage:getWidth()) - 15 + local x = self.x + (tableImage:getWidth() - self.currentImage:getWidth()) local y = self.y + (tableImage:getHeight() - self.currentImage:getHeight()) - 30 - love.graphics.draw(self.currentImage, x, y) + if self.baseImage then + love.graphics.draw(self.baseImage, x, y) + end + if self.spawnFrame > 1 and self.spawnFrame <= #self.spawnImages then + love.graphics.draw(self.currentImage, x, y) + end end return Meat \ No newline at end of file diff --git a/src/meat_factory.lua b/src/meat_factory.lua index 4d30e99..496bfd9 100644 --- a/src/meat_factory.lua +++ b/src/meat_factory.lua @@ -11,7 +11,8 @@ function MeatFactory:new(spawnRate, meatTypes) instance.spawnTimer = 0 instance.image = love.graphics.newImage("assets/images/env/newer_table.png") instance.x = (love.graphics.getWidth() - instance.image:getWidth()) / 2; - instance.y = (love.graphics.getHeight() - instance.image:getHeight()) / 2; + instance.y = (love.graphics.getHeight() - instance.image:getHeight()) / 2; + instance.hasMeat = false return instance end @@ -32,10 +33,12 @@ end function MeatFactory:spawnMeat() - local meatType = self.meatTypes[math.random(#self.meatTypes)] - local meat = Meat:new(self.x , self.y, meatType) - table.insert(instances.meats, meat) - + if not self.hasMeat then + local meatType = self.meatTypes[math.random(#self.meatTypes)] + local meat = Meat:new(self.x , self.y, meatType, self) + table.insert(instances.meats, meat) + self.hasMeat = true + end end function MeatFactory:getMeatValue(meatType) diff --git a/src/upgrade_table.lua b/src/upgrade_table.lua new file mode 100644 index 0000000..e69de29