From 1a75e30affa0eecaf17386022b287bcd4f6d8776 Mon Sep 17 00:00:00 2001 From: "brandon.skewes@outlook.com" Date: Sun, 4 Jan 2026 20:05:27 +1100 Subject: [PATCH] init --- .gitignore | 2 +- .../Animated objects/Door/door open 41x48.png | Bin 0 -> 1456 bytes assets/Animated objects/Door/door.aseprite | Bin 0 -> 3220 bytes .../Animated objects/Flower/Flower.aseprite | Bin 0 -> 2034 bytes .../Flower/flower glow 16x16.png | Bin 0 -> 934 bytes assets/Animated objects/Portal/idle 28x41.png | Bin 0 -> 459 bytes .../Animated objects/Portal/portal.aseprite | Bin 0 -> 2104 bytes assets/Animated objects/Portal/warp 28x41.png | Bin 0 -> 300 bytes assets/Animated objects/Save/down 16x19.png | Bin 0 -> 434 bytes assets/Animated objects/Save/idle 16x19.png | Bin 0 -> 568 bytes assets/Animated objects/Save/save.aseprite | Bin 0 -> 2936 bytes .../Animated objects/Save/start up16x19.png | Bin 0 -> 463 bytes assets/Animated objects/Torch/Torch 16x16.png | Bin 0 -> 500 bytes assets/Animated objects/Torch/Torch.aseprite | Bin 0 -> 1108 bytes .../Blinding Spider/Blinding Spider.aseprite | Bin 0 -> 4260 bytes .../Blinding Spider/Blinding Spider.gif | Bin 0 -> 4177 bytes .../Blinding Spider/blind attack 16x16.png | Bin 0 -> 308 bytes .../Sprites/Blinding Spider/damaged 16x16.png | Bin 0 -> 233 bytes assets/Sprites/Blinding Spider/deah 16x16.png | Bin 0 -> 311 bytes .../prep blind attack 16x16.png | Bin 0 -> 377 bytes .../Sprites/Blinding Spider/static idle.png | Bin 0 -> 159 bytes assets/Sprites/Blinding Spider/walk 16x16.png | Bin 0 -> 361 bytes .../Flower Enemy/Flower Enemy.aseprite | Bin 0 -> 6855 bytes assets/Sprites/Flower Enemy/Flower Enemy.gif | Bin 0 -> 8227 bytes assets/Sprites/Flower Enemy/attack 32x32.png | Bin 0 -> 1327 bytes assets/Sprites/Flower Enemy/death 32x32.png | Bin 0 -> 523 bytes assets/Sprites/Flower Enemy/hit 32x32.png | Bin 0 -> 412 bytes assets/Sprites/Flower Enemy/move 32x32.png | Bin 0 -> 568 bytes assets/Sprites/Flower Enemy/viking.png | Bin 0 -> 103159 bytes .../Hell Bot DARK/Hell Bot Dark.aseprite | Bin 0 -> 21946 bytes assets/Sprites/Hell Bot DARK/attack 92x36.png | Bin 0 -> 2608 bytes assets/Sprites/Hell Bot DARK/death 92x36.png | Bin 0 -> 4497 bytes assets/Sprites/Hell Bot DARK/hit 92x36.png | Bin 0 -> 896 bytes assets/Sprites/Hell Bot DARK/idle 92x36.png | Bin 0 -> 1784 bytes assets/Sprites/Hell Bot DARK/run 92x36.png | Bin 0 -> 2397 bytes assets/Sprites/Hell Bot DARK/shoot 92x36.png | Bin 0 -> 2603 bytes assets/Sprites/Wheel Bot/charge 112x26.png | Bin 0 -> 941 bytes assets/Sprites/Wheel Bot/damaged 112x26.png | Bin 0 -> 763 bytes assets/Sprites/Wheel Bot/death 112x26.png | Bin 0 -> 1420 bytes assets/Sprites/Wheel Bot/fire dash 112x26.png | Bin 0 -> 2574 bytes .../Sprites/Wheel Bot/hot wheel dark.aseprite | Bin 0 -> 14161 bytes assets/Sprites/Wheel Bot/hot wheel dark.gif | Bin 0 -> 14772 bytes assets/Sprites/Wheel Bot/idle 112x26.png | Bin 0 -> 314 bytes assets/Sprites/Wheel Bot/move 112x26.png | Bin 0 -> 2292 bytes assets/Sprites/Wheel Bot/shoot 112x26.png | Bin 0 -> 1473 bytes assets/Sprites/Wheel Bot/wake 112x26.png | Bin 0 -> 1426 bytes assets/Sprites/flame dude dark.aseprite | Bin 0 -> 20881 bytes assets/Sprites/flame_dude_dark_94x64.png | Bin 0 -> 17525 bytes .../DARK Edition Tileset No background.png | Bin 0 -> 13595 bytes .../DARK Edition Tileset with background.png | Bin 0 -> 11456 bytes assets/Tileset/DARK Edition Tileset.aseprite | Bin 0 -> 10020 bytes conf.lua | 4 + libraries/anim8.lua | 305 +++ libraries/breezefield | 1 + libraries/sti/atlas.lua | 159 ++ libraries/sti/graphics.lua | 132 ++ libraries/sti/init.lua | 1748 +++++++++++++++++ libraries/sti/plugins/box2d.lua | 323 +++ libraries/sti/plugins/bump.lua | 193 ++ libraries/sti/utils.lua | 217 ++ main.lua | 61 + player/player.lua | 38 + tile_sets/test/test.lua | 131 ++ tile_sets/test/test.tmx | 50 + tile_sets/test/test_set.tsx | 4 + 65 files changed, 3367 insertions(+), 1 deletion(-) create mode 100644 assets/Animated objects/Door/door open 41x48.png create mode 100644 assets/Animated objects/Door/door.aseprite create mode 100644 assets/Animated objects/Flower/Flower.aseprite create mode 100644 assets/Animated objects/Flower/flower glow 16x16.png create mode 100644 assets/Animated objects/Portal/idle 28x41.png create mode 100644 assets/Animated objects/Portal/portal.aseprite create mode 100644 assets/Animated objects/Portal/warp 28x41.png create mode 100644 assets/Animated objects/Save/down 16x19.png create mode 100644 assets/Animated objects/Save/idle 16x19.png create mode 100644 assets/Animated objects/Save/save.aseprite create mode 100644 assets/Animated objects/Save/start up16x19.png create mode 100644 assets/Animated objects/Torch/Torch 16x16.png create mode 100644 assets/Animated objects/Torch/Torch.aseprite create mode 100644 assets/Sprites/Blinding Spider/Blinding Spider.aseprite create mode 100644 assets/Sprites/Blinding Spider/Blinding Spider.gif create mode 100644 assets/Sprites/Blinding Spider/blind attack 16x16.png create mode 100644 assets/Sprites/Blinding Spider/damaged 16x16.png create mode 100644 assets/Sprites/Blinding Spider/deah 16x16.png create mode 100644 assets/Sprites/Blinding Spider/prep blind attack 16x16.png create mode 100644 assets/Sprites/Blinding Spider/static idle.png create mode 100644 assets/Sprites/Blinding Spider/walk 16x16.png create mode 100644 assets/Sprites/Flower Enemy/Flower Enemy.aseprite create mode 100644 assets/Sprites/Flower Enemy/Flower Enemy.gif create mode 100644 assets/Sprites/Flower Enemy/attack 32x32.png create mode 100644 assets/Sprites/Flower Enemy/death 32x32.png create mode 100644 assets/Sprites/Flower Enemy/hit 32x32.png create mode 100644 assets/Sprites/Flower Enemy/move 32x32.png create mode 100644 assets/Sprites/Flower Enemy/viking.png create mode 100644 assets/Sprites/Hell Bot DARK/Hell Bot Dark.aseprite create mode 100644 assets/Sprites/Hell Bot DARK/attack 92x36.png create mode 100644 assets/Sprites/Hell Bot DARK/death 92x36.png create mode 100644 assets/Sprites/Hell Bot DARK/hit 92x36.png create mode 100644 assets/Sprites/Hell Bot DARK/idle 92x36.png create mode 100644 assets/Sprites/Hell Bot DARK/run 92x36.png create mode 100644 assets/Sprites/Hell Bot DARK/shoot 92x36.png create mode 100644 assets/Sprites/Wheel Bot/charge 112x26.png create mode 100644 assets/Sprites/Wheel Bot/damaged 112x26.png create mode 100644 assets/Sprites/Wheel Bot/death 112x26.png create mode 100644 assets/Sprites/Wheel Bot/fire dash 112x26.png create mode 100644 assets/Sprites/Wheel Bot/hot wheel dark.aseprite create mode 100644 assets/Sprites/Wheel Bot/hot wheel dark.gif create mode 100644 assets/Sprites/Wheel Bot/idle 112x26.png create mode 100644 assets/Sprites/Wheel Bot/move 112x26.png create mode 100644 assets/Sprites/Wheel Bot/shoot 112x26.png create mode 100644 assets/Sprites/Wheel Bot/wake 112x26.png create mode 100644 assets/Sprites/flame dude dark.aseprite create mode 100644 assets/Sprites/flame_dude_dark_94x64.png create mode 100644 assets/Tileset/DARK Edition Tileset No background.png create mode 100644 assets/Tileset/DARK Edition Tileset with background.png create mode 100644 assets/Tileset/DARK Edition Tileset.aseprite create mode 100644 conf.lua create mode 100644 libraries/anim8.lua create mode 160000 libraries/breezefield create mode 100644 libraries/sti/atlas.lua create mode 100644 libraries/sti/graphics.lua create mode 100644 libraries/sti/init.lua create mode 100644 libraries/sti/plugins/box2d.lua create mode 100644 libraries/sti/plugins/bump.lua create mode 100644 libraries/sti/utils.lua create mode 100644 main.lua create mode 100644 player/player.lua create mode 100644 tile_sets/test/test.lua create mode 100644 tile_sets/test/test.tmx create mode 100644 tile_sets/test/test_set.tsx diff --git a/.gitignore b/.gitignore index 0667445..96a3c81 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ # ---> Lua # Compiled Lua sources luac.out - +repos/ # luarocks build files *.src.rock *.zip diff --git a/assets/Animated objects/Door/door open 41x48.png b/assets/Animated objects/Door/door open 41x48.png new file mode 100644 index 0000000000000000000000000000000000000000..c706e42e0d1c3e836a88788b1d0cc5f12e0a9793 GIT binary patch literal 1456 zcmXYxdpOg39LIm7mfMn3%4RsFj!Pbgvq@red9YmK%;j-p8**DKk=UplD~sZcTo#FQ zDwkXi6`5-y6Sr5D+RT6#xJb zF2^0c06-xEtj(0*;OSE~!T>+83tj{Vpr#is1Ay%`7e{-a_`>NC`*TC2Jt<=$$Dg-j zj@)D))DD{RZ|KfPgdP&xl{lUX+AfjbJ>;;7&{{TKLeJs7`i*Ht4du;v^EQv*17ZI3 zr=FVf->12f$k*~YD`B~PF`SLcLhVccXVcq>EDFa`Sk4HPg;x!(E@1PUI9ZUbOSuYl zsI9{t?<2#L)>ki z|0U$%+_UgiHldFu?zyIUE&XsN;q`Z8QPt;FhW-4YNQ7mtd4L}M*M;RIy&SUsRCCRp zSK%8=A>=KuhjU->xq-H}wlgU8fw;()kqo{zq>&Mm=$`Q5Z)yR5VlJWb=kpjyXdg)=8H`ZStJ&T{3>~F|07t_jsev%d1z4_ zS%f|Dbz`H*`hy{)rqpK`ptli~2yP_)#}_GegrRQ*KWu4jW1@3E7sr-PM@1}M--0wE zymcux?TUI7G={!INbLggqCh-Gr+ZqC>)!v)ZJ{+1ZibPZYiQct3w78^>~Pszf;e9^ z>K`1=C7JrB=0PYCsD)3>Ty7*e3J#bdj6{TIm%Ly>tW5~1AX8M_;$s&{q6OE<-Bh;IWZ04tm&!!DEazIPRkgYLIB!}bBa_Ga#Jqc zdBw-$@i7ss$@#cHX6wceU=`X+Y}TU}S62(H$4UlhVNp?0O_BpvFW&=37K z^U+-K*%*Vudhyw*jSU>bIleUmU>aucj39BE$t=E7ybcT?cBj;B@&;`v929MyZgJ>T zF+l_Lwj&t{uJs*`NWE7z&_kh6av`w#L(GYVxNX35&L@(gB%z*U+Vbwr^AVh18nnTl zTJ*XN8;}O}%(?gJUDgeTJs>9YtJLt)g&EBUPSkC{KA*|ksqdbLTy}m$gT7o)%5k9PP)`6d18hMcqn3gfkmI}SumHW<99GCj%k&_**fJH zyJWWT5=`CwN@F-ydS#aT6F@3waL&wHotaE&(Cz1so(cECh+)tQ| z2wy^*uJU^GI}9e36Xo^D%Ti4qk|~^NDvtd(fP<@q$ttUel$uR+4=#T?feK_~MJoMf zvUi3--+CZ|$u_eld2VM4_(R-!ZlpI>$AYeP>}~v~#|K4fNeyaFB5WDW%6TMTfsFzK zBIDF42^_al#%o%1^|Aa*(87&evn?baK^LNOop%zuP&+aiGF(93aAp}5J^sigohb69>7PBfwGcorw?7cia_x9iYqt86&ea`pHIrDzKKl6RQ=a5wq zq%U_lf<+7wG$Mx}NC0f}1?OZZ5jFVyKMMCZ1QCxb&blgsfd*_!=vm7Jc3p713XT5j z3~IqQvxiayS&udWwcE4fZEuc0W~~w4%92;C8$3|3hK)p1a0d61S*9>5DKFVG%5Z9=m{bb z)WgjMG~6~Bv|!sdP`6=ESWxUhv;aw5fnHP7rd8==HmBLkBfm^G$ z{9S79Qw${`=T$tkER);m7bDtdG;K4fs}F*9IY{-{ZA2wK_|Da^hU zjomkC7ZdUJj;W@x8^M_&3R%79^!b3qn)aGm()&W80Kdr2Q zQZi=hAAZJP@+JQCKa^|Gs!8vC?M`FOPpfN^O0Io_G2^%p=(cK~?ng#x`Rg*55&zMv z`I_o==+f!hDp8#<%i|3iXo^iy+?A)=*#k$^yw$j32q$BwWn%j;1#-C~4;R5`s%2j0b#(ytv{XTFhH+ zJt~l!ZW3xxFhyfL<*#|&Uh0*dZ#ojd6q6(Ha*K2(hQI!H7k$=l`j^_BE|9hRCr;U> zXlaDNFw7+4)T!b$bRz2Y_=QY!YrJXM_!GZNSFgGlY|Y)RUbZ!9r$tc12OO?w+TnI~ z*GgS+%&o&dcaFWc3|5k_aQLWMK)?KU_tVJ>lX=YXNqpn=qCgBSG{!zcU@Y9@99#F# znLwXVT-oGZxSXVZp}V73Udp!B7FeCI_yMcWC$LEWF z)LxtD>*--c8fZ6pL1Zjhx#C>vs>iqQDoC~;Cg?;KYI5JJTHMr)I0u!G+&MHX}`v{pO+2Xv0>ZxJ6Wxduu+A@RXdDQo2zV!~V1Z>mx32EyS2P+dDg$x&U z_bs`4c~*he+v5h$tOm!qn);<9t8wN~^s|Z|W}J%rgLzR39kW~Y3n3?g3f_gxY;_S<$qsL+0;Xy6pdJ#QSsq#T(0Sh zC9bRO~yEv48RJx#XOT(#tmLHDs8MRp~nugoKx6tIj=gtXGaQ~d@43ZB&pSTiG}QnTuybW z(H@JTuz|N^dq>(UZB|vOsuCDNNeEc|YWy!FZHWmiNy0QrCmKH@6#Bk6=ybz!m(6*& zVj*ofjAgX{?LBLhj9*q`xOf-;W3r_8>iNxgx;D@(H5}LddF5>5&sxt%#%fz$pXobq zWW1MOfAH^SQ2`-=ODLk=&|4Q5?^X~yEqP|+ihACW>oV-Sdb(XQ+Ny|~K2suJ*>21Ih~ODl2|1-)>zl#G%rJuY{P zj$u?XP1D(#(J~`FBvi*VZ40d}tZZcI#9k!d%6uvI6K%Qu(H}eRchCLs@Z6X0_sjF+ z-fj{?%|-7Z%(@W}LTg}uQy3x)Pa+y@|3_8YAT-cLwyKgrU^46^%qlrX?hcGyF>G{( zKIVvZXhFyW`xF>DEda=8Gl8<`Ilz1I9|Lb6;{(lAM}dRgvw=tcTm%&Ae1I(ZW?+QC z8_0?H2jJf}jRc^kF5;7Wlfr0wSTW;*!@UV7_lZ%$y46 zx{O&D0wTV?&B&)6+9XO^>knUu*vO0pmUg5tNViSdQAMC2WN(-Md1H{#&=Pf8vt;Sg zn-86+3teK>a3T?IPeJdZH`m!CDqNQ>yY4`oNDD0{csL)oA#U8-eDA%Y_W6YO7u6)S zbY!b3kF~8|M*6VDz9GGVresbyMOru_&IAvGyp*eZZa+NDFRwChgce6z_I+;Fj%4 z(s_sGeS;|?EqAEJF)$9#{)q_7Hqd2b?cL$5|24dJG(7nq;T^5v_Z^6JxQx+4ub@H# zbJ{#~iD220>KuR}+uDm?mn-Cadb(F#-8@NsC#IpR{K6UeWvN#ZuqQ6v&Rzi*r}c!RwQrQ;vv&{ zQk^z7Ex59Mz`cDPo-cChvnxwwxnMz$*xWW!g-Jpz849XIj#0{rhhTm@euVtDbU?bS zgAy{u9+mC#Ft_@@x)F8vlAl}ErW@h{*$u_HRL_(Z!5-Z>yZEf3_NvyPF<#7kS!|T} z5k12h3H=Y0i-oM{d!c$)E)TyWxv=3R8!Os6Sj@+}9(pUpZac_RY7?cu;$eBe^}KjO zh(1kk{-Ls-yYhRfm!#6PxTmDJntD)lK>li+f}R@}^HhgMIlx3)U5L9mNl zy^%P*Ayvwi7m$eS=ecUSo?rE>&AR(d*}5k)uIq#aFZZr%T75=Jn_V+%UZK5a;Ntq1g|VkHz5(Npl3Fq{Goq^^C7l%eUmtx_C@lnGu>s z>&-2f2GiT-%oHBpx$?xm8Tj0nOT#&C-Q@2LrhP} zwo;mn-yt~%*X3_nrRZ~?5xaqH3h3_<)v{U3??*5`X=1l7B2is=C#swFuWs-zORF|E z2r7s+o+*_-EAQ$Cyv-3(b{ze{qy1mBj#EnIXi5sa&&EE^Ccql+97(z0Unv(Z@#;NQ z7m?lg<9FtE?P3P;NR&xw`mo_!ZK?Xu()oMklN|DJCT>ihEuO?nt2atcsm<=2oM^$f zbiHQ{ky1@XhArLSwEp)-eWy000mO1^@s6kp*;E00001b5ch_0Itp) z=>Px&U`a$lRA_4ZG3SvMCr9*03XarqMTSEdun|9DgdhT#-Y3secd4Y7vS=yZR*XNLvo-_f1 z2qK6ef(RmrAc6=Yh#)2%k|be&e;<-0(bCcqB9VwAuc|7JkB_0MDy^)nIQFJ#;_U1U zrfE_<9(U|5%R(lTfn`}F2!dlzM7X-T0uj;b>Z%wi9~2)W22X|Id@Wpi_LjB}3l^>xSo=;(;e&(AZ?IW{*p9s7fW1GccRz&PjF-rjcXQ>heNTwG+F zbL{T!`d)uJoo2JMvy5|&wY4?J-fRE-@)!kN^$Iom3{PLqGAOV137)*-rnAjNF-eO$Hzyi*Xs}j!IiI8t5mPo5sSrK`PbK1(liaxXmld= z-`w1guIor9ldini{!POF8rx%m0I)2JU0hta_N`Wnou8k3 z^67NiwQn|??BwLc)B0ZOZ@1elo6WlRUi&u*KQsZu;V>9uAR_vH1!I3cLPYF;k1+xt zc&GlyO~@er-tNB-hr?qF2z=n3`oG?U{NsVEoo7LT54yO??~ufInb!LLe+Lj&zA{NcUakXT_`BiyT-%mBd2na>%@1_1NvoK z;!gGfjlvBYW(Rn62A%TOT>3re-<(33WSQgB3uUVHpX%9ujXRKkuLV!0swcPCoL4a~RyW>W^6>ow zO&iyw;FL5~zf!#`FOO80oiE*g`26?x9Xs-Z?sp$qd9JlD{>R;e1-ovA|9`pUp|$Aa zM0LIY=KFticU;jvH2+Sq^O56f^G!9~Y8zzyzfPa0s`4n8)<}WS=3Qtd0KbLh*2~7Ym^UqEI literal 0 HcmV?d00001 diff --git a/assets/Animated objects/Portal/portal.aseprite b/assets/Animated objects/Portal/portal.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..7563a82e67b4a3fb1451b8cbaca0092806cb7577 GIT binary patch literal 2104 zcmchYdrVVT9LG<&^feysU@;J-y~R$zB~TvW5t+2GjYnZJ6xdXtj274G5S1a*sm!5n zjHTUXLUO44Xo$ci&d*dMo_7o#uXf&bhgt z@Av%9>217#kl#P?BdbUlp$Uf&qQ&)Z!<>DRi1GO^+6oUs7G`-4R~`&j;NsH`OBcHl z^aE*naYpKL$I)d738rJ9&xa;LOA{iY#=LdVv0ZDR!>y&z+r5oY>z!C=!+18-(5-;R z9WR5b^%2kmqhoM`_EYOlB23j<51A6(I4a%Sq()9UhXwAW6P`$wb zeI+jkTA5r6JrxxN9nLR-{<8lp)L5SZt=*|$3|N4tz3wzRSOivp_{fgnNR7zIi?B$F zn8=8LNQY?1g-}R@IQA?IgA|AWf0)A=w(x`@++ZcOJJA&MQ9}g6Cz-`>>UPtS>oEwR zu^Y~Yli}JtiC()yCnQh0PTIroE#6(e0h3(XeupNE6S9g3NmX-+rgeRM)eJ3Q_(O9f z+Zr&T8`JRS1YX*8rt6I(0hhX&xgNT!rl#hBXqz|b8@*Mb188BE<2V(l4avpz5HDrn zpIF47*>lrZFv!CDdbJlYdcD-#Vw!4;eZf4P^sJ&kTqZlo^afJo#X9aY%bQ48CSHps z_iXdgg8J&$_L24j-g9Q-Q_7vERZ|N|SEkzZRl(O(>N@S%p?w-tL2`03b1a%i0xyT; zz3jGx750QYaMOmwq2W_|JKb zZE@qOo!q51K*=pSe~@co=tc=KNU3v^E4jz18}V&VyVs?Q;`(dc(AiG(QpHztjioGNf5XF16N zR$v(dPYp!+5QX?+M{l|9Qlfb}$2(|k>UWd!hK2*X$`U2UzU#A9_Am9w?Lq0F{}Jo* zvAHa`+yTEJB(%4uYI_ ziyLC+_Hu+o;Z1dHZ$A{B+u0TWmfY0&W2y*`%p8$_HP21>waJ*{226GWIV@nP1Bm+4 zVoya(^B(z$C`FHr(tq6fThLiNLnI$Hw-l|eHvYAIMEozfyadA@MYI#6x2CieM!haG z?&#?3GKPa!&9MWorq_-qVC4GR3&Z%~YcGTa^Z?M`&u<|jrY@4`SEe-l{}28H7OpIn literal 0 HcmV?d00001 diff --git a/assets/Animated objects/Portal/warp 28x41.png b/assets/Animated objects/Portal/warp 28x41.png new file mode 100644 index 0000000000000000000000000000000000000000..8302a9f2049e4e6ae8de5cc83848041fb666caa2 GIT binary patch literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^e}Gt%gAGUuM!5V2QjEnx?oJHr&dIz4a-Mm*IEGZr zd3*OD?;!^s*Mls9j#5RsAr2t4j;C*q;Df0@jCn1BK0OI7I` zX0?99`I7IsSz)2E%hNteH~ruAuFmJ|Dy{GR+yDG!R(7bcT)U4U;ap|af?n>|J?!?r zUp_qY;CDQC+pPS|w%kNrX}Km280x8?_W2RtwT%xIJ04I6ov4#Jeq#Ni#;-XQ9G_UC X?4{W|s`pI>`k2Af)z4*}Q$iB}@{)mv literal 0 HcmV?d00001 diff --git a/assets/Animated objects/Save/down 16x19.png b/assets/Animated objects/Save/down 16x19.png new file mode 100644 index 0000000000000000000000000000000000000000..3fe64e8c0deb196e9994cfacd50394c326273f4f GIT binary patch literal 434 zcmV;j0ZsmiP)Px$Y)M2xR9J=WmNBw|Fcd{^LL54np(1;*Vi|U9f<;l&)3FU2_W%_gg#*4={Eq_( zM$xYW{ zlj}DA8O?Qos_Pn26afIFlqkz`SbOBNP{7Ya9}Wi;MKNA`n9s5dP1B$#ipemxfxkg1 zO9|5hoESc1uyy|3e}UEO>jN-m01>gS>x?$q?RJdw`+04RH-?Ju`*0k`FzC9D5fR$9 zwQgW*yb+1xIJ3q?q+lN~o8%_}c%BC$nl%tYFxPdhH{T-9wIVhCe)2q@6rWBf>jrdQ z*BW`Q7YHG)b0Lo7>zYz`yU*aqS}SiIt9l14)vNp`q@M&85i!oW5m(>$?0i0}wry`7 cN4Lmd0DO8eftL|wcmMzZ07*qoM6N<$g6S%@&Hw-a literal 0 HcmV?d00001 diff --git a/assets/Animated objects/Save/idle 16x19.png b/assets/Animated objects/Save/idle 16x19.png new file mode 100644 index 0000000000000000000000000000000000000000..42ad12a612d897d29dde4c2d4bcaf7f50cb356dd GIT binary patch literal 568 zcmV-80>}M{P)Px$@<~KNR9J=WmcgomKp2J3sF7hAw1^fhTNngALJ!p|v}oUJ1npV|Jwgx`81x1% zv?0YD@8Xh-=}g|Zo4MSx8vdEjKhF6_BjB{(@1M&IWf1_F&1Mx_-#VYqZ+XXYgnSr= zZ~0EABjk_A<6C|*nG}jf#lh@(xMp2xzRCaq#iY5(s4YHeZZc|%Pnw&I+TxSuCZiCJ;sq^|IbzYyO&P$d$uPOrwBrlN~Qi?Aauv)D!8ja9wHi>0fd7V;MR zB^Miw2GO+leyPTnUJBiA7rL&O9*`snVT^%ND*XYf@g+-iUC-B>%_d(n#xlt7my z0&LrcrfJYLt#mL=Q=;p7=KH?zQ=}qam;l2tGXDPX4gx?N$D-cK@&z|6%gPMHAXRth z@pzClO*2ZVFaZ^L>1*}X!JkS6{`HSg#uy`2cc@MRD)L|C8@6j{)8L~30000;GK2#UBT*oPRZA?GL_h`9)=C40SGfBNZ7F7U{iCxp_RQSRoSZvz zzn}BFznq(6hakP;1qdE-L`Vn*L6BIuejBi6T7>)f-xmLmv#s+GWMbHACe;d_`wCoG z(oE!>lpdHnkx0L+xX!sVGer@^o#YGLu)-f0NAm&-cD@C?oAw5<`;$1}6L}SI@+Uu_ z@Ie?b>1!%*O?e71B+(Pd2w4X7_NM`Zf--^B-TA=Cls+KqBnph~xDRZrl1LqAP9D#23{ZqMxbMIK~b;(1;~eRNQPL*gg{7xC|6SwX+H4R0SX8f z3605Rr<1&x@Pqi=ZPV+RGpvz}%$W2{QdTM!v7NIHQwt<9_5-#Z;$XfU%h{L0fkjIa zg3O036yEmF!v?`2IU*TgH3z4GTD;N~MOV)&{ji?RAKYEP&@v3}a>* z%G5>~aQ*N25L3LR_K2&_=vh`K{)*wYmvv&X#f`K@A0m~mlrdpz=+>_B&}X!G`c*YM zP7@$}vTI!P{_4RaOk?anU09mR^eptLg3ksGB_tG@DP+D-;nxcIevby- zYiE4%t-IvmxqQ-E{yaSLm~0v3ld*Yg*QiOM@xbFHtW-nnBUwqKa6~AKQk|%qXw7!< ze%ND_zqWK+Kx@6uSf<3-v?gU8Fmp(Lp~IXq{8;tV`of!6Z|<;Mm+1_JQ-s*&#d&Yr zp5kGaPm_hRuPlO-Lb$?4-& z1ENQr1jnK9&kUQzi@0`N4Y`swa;BkQa`%woTvOM;?TFfY1g4`98 z#DcXauT|Q)6n!LZFmn^nx?!GkTWE4S_E*~$60R`bbGmoOSEb3)eqCg)x9hg5g+1@B z@Q(>wUc*|142VvNGjqJR8&xNH4QS=Repo)pW7tL{56M`(G^OTNyz$#J4T1D%AI}Mo zGDdzzigrUy7N1xvd>|X_er)X5b7EKJx><;X0_W;2>NYnrvnem9xMj#WrcpOaRxVgF z)_Fo^CM}tjhBI)^zuFO`#mCz1=eyzP+~9-s#hS#TJ&kE~9^nHC=W{mr)gQjFk&M$5 zBdI>aZp@OgTXjYEBRU`3=xcBPpcF4U)4)hRy8p+zR7Jp)$S1qoCU4W>J-qX`o^phJ zXiFjfI*}aS=Mq?9$P=<9EqB)V8041|B)KZu5@9qgBk;Q&4#bY0jsh2tIMr6G(G(Z< zuEoNscP^XBOJ5|<*V@aW;zs@$fmM&R*EI}=*#g-Lw~Qnsrpn00j_!N_r2VgqkrzK&BD`W%~LtsJoBFG ze8S98(h5fj&cYb%dx7;j|%jeOze9U-z@xP;7MIU)SkZ}s} zD-;_kV!u5dvdxzJ&>}o=dleGk*;^;^&eFA zUU*WL-tt|T{YWh~*f+3q<46Jz$@U?sTEAR5y8}z+Lr8xBse?`>agSqUN_>ue%k^Czw literal 0 HcmV?d00001 diff --git a/assets/Animated objects/Save/start up16x19.png b/assets/Animated objects/Save/start up16x19.png new file mode 100644 index 0000000000000000000000000000000000000000..4e53db67094e6d73abd1e0173c351983a282f1af GIT binary patch literal 463 zcmV;=0WkiFP)Px$iAh93RA_{o{&66K>G8hwu)rrYT^OXDjT&hS zGR{zj%==bQ`jwZwzSjc8qG59fKy*2u&yPpV1Fbcxs)E)!@TI>1x|#Q3?*jPG{v8JZMN!~#xu7h|QI+&SYweU$ zsH(~zkNVU?C!{RP$vwJ-E*whW!UD@u( zr}qc1Mg9)>E_3@oW$yUL_?>L#dG4&WEY^d^>>%>f`(K1GHv)6fn{WUC002ovPDHLk FV1hRY-gN)~ literal 0 HcmV?d00001 diff --git a/assets/Animated objects/Torch/Torch 16x16.png b/assets/Animated objects/Torch/Torch 16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..7d6a7b6b6a4d84c3a97c9dfc19060dde37f54834 GIT binary patch literal 500 zcmVPx$u1Q2eR9J=WSV4}1Fbp)Sm3p$&15e=4U-SbAAs&NxLe+=xiT1)TION0^IB`JP z!vab+c4As>)m>#Iq!65moy5j5Kt%Ghqw6}o_Mgw^Ai)RIucaD%O0@EU74EujYx_(g zO)v%rP2twS9PA}=2oMq4whc|Z!C3=DbY>mLkzFgF2_kR=3Db^v3HrX*ecy}ascn4i zws~hWO*x%TqzrqMjlmi`9vSk5$KnC83vzEnL};4En*DyihZM015K)^?S(dE4D4+m9 zGL9oj5aU4vfMAcOX#)5@SjpjVaK7*PGm)N2B^VS~P00_7+8Zd@X{(wsw|fL4v0%7!<)a*wkhZ!D^P4kT?Xl z+s)FZuIn{}m!YaE=f2=0i1&qv_W)PX1OP~$sc4E%AEkjKw7Vd=z+1Us36@%-bzkri qIQhXa43Ot}XyOgOR*?Kd@!$()sGX{}BL}Vk0000Pvbh5u%=7p+o zt{GSk1}@nRgI>R8Nbec<9++&==hSmf$PV&;8K_c1rEB)lLvzErjFkiW=xM1XC85u1 zYV15V@lZSCuS+&hcN1l6f{yuc9ewfZJ`Umh<8y^C#{yqCkJTHjdhk^JtvifAwN%-} z^K~u}7rYwzeCciG@0vVKT4bX!C4WBfjb!%FfX|E7q%rk2$AwMD&RtWh!b{C1blE}) zH%`R8MvUGu@{Tj{Zh?DRUA)@c+QbV>ORLfS&CSi8SHi8NFW@dYG8o5az6i%L2 zWaqXOS?}3jOq0x3Ae${%{plHSb+%kkFA%;T&vWiPC6`WoHTS*jx;3XO%o>))^95yN z5fL-9DoF-k$xq&9irF-A9X53(&TeVr6Tg;Uw9@x^8f$< literal 0 HcmV?d00001 diff --git a/assets/Sprites/Blinding Spider/Blinding Spider.aseprite b/assets/Sprites/Blinding Spider/Blinding Spider.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..8e806bfa12f39d51ae3b56d0817cadd4abc2c402 GIT binary patch literal 4260 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 literal 0 HcmV?d00001 diff --git a/assets/Sprites/Blinding Spider/blind attack 16x16.png b/assets/Sprites/Blinding Spider/blind attack 16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..e244c311897aeb2bc8ad3bc633f04761bb71d36d GIT binary patch literal 308 zcmV-40n7f0P)Px#?ny*JR9J=WmOT!GFbstqmJHrF1v|$o$7zq1ol~%7$dnEU6o~C4v{H-YH}MmH zu}yfg0YURTKep>(7+%yGQwV-0k0uI20*GK1k^zKZ64IUDj^ii=XF327F*@g_%K(7A z+Z=@N0U}24{eIv470!SJl4iyW5u><(QPzW28E*G;IZYWj=c+R}0IapuftyU<_c4TU z0E7_0S_{jv6wBxU)_T47W(%mT|0^o_0RYH{sMZh2V@v{C%mm<0eo*cK;|D2J*3W)t z^@D%#1973w2X)fPx#qe(KlsgW@APhvu(Mm4pI0g5=2R)~tbK#0DvPcA(kCZKWQiO2uc&r2i zhXX+E#yMB|10q6w%*0Bb#VglJIL0`APopZk)=dYiszU*0-cGEL_r9p=LqJu*%*Z(} z+qi(cUlF02u>I){haZ$uYWLRFr4YhU;L{~rf8Zz%U}GMvs18cEqNzH)7q1=sMPM{E jr^B>&K+OXz`fm9GAg3;`1V<6X00000NkvXXu0mjfV<25M literal 0 HcmV?d00001 diff --git a/assets/Sprites/Blinding Spider/deah 16x16.png b/assets/Sprites/Blinding Spider/deah 16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..e552813c2968c3a777c45cc6bd16a5243d35ad6e GIT binary patch literal 311 zcmV-70m%M|P)Px#@kvBMR9J=Wm$43mAP|O6Q^UZbFWT;#nMH}18QjpHc3i_SS0wrwM0 z3~{^fI}O7?^E}tRNatKQy9VGsq=|J#{MPfdWuaJWgCv)?bY{HwF|{=_JxVufm4EvO}q8la>wV@y?m=>A-)%d)f;ngDJhM$W(d;I_a002ov JPDHLkV1lGOg*E^H literal 0 HcmV?d00001 diff --git a/assets/Sprites/Blinding Spider/prep blind attack 16x16.png b/assets/Sprites/Blinding Spider/prep blind attack 16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..48125ab8a81b351987c26a8ea49538a617d0885a GIT binary patch literal 377 zcmV-<0fzpGP)Px$Gf6~2R7i>KRWWYFAP`)vNECELc|&-EzjS`i3S5en;bp6FpGNnbpE2&xH`aB*7cs z%*z=SSd6hEQT^b4@)f9_ILW|I;}r=uLO?^wHr7R8tt~!`<9H>aNvxl$J3xMr$7NYe z>n~LG-|Gju&rz8JngW#o{Kg59K!T$jkR)1PK%3!wMbJtj8A3sT+FJ`+2r_}%1b;bQ zRdA0Jsi@|8c6~{HMJaAxKYn1`j{r1l$jvQjk(IDJ7FP^yI@Y X+pVa(B{LPxaYeVKSbv|aF79P9mZ#r?6ZZX>gUYD%VQ%KS7 z;%;ea`S<_N&&iE*=gwtx`~UCn?8d26r#`&9yPPGKkzwf)8L>UbixhyCFnGH9xvXPx$BS}O-R9J=Wm^}`IFbstsSv+KO)id+}-2Vn;XR3MvwhV}Y4wX?z1NkX!RmtBH zk;Jhx*nR|1lmlq|4{PllZg9>u;arrM@!q^(QU`Zkx4YhKdC3hu8bQkIDgtJn$8iJ^ zLB?sCa6Vnk?S9?8KLCK4=h&zyC2Xd1b{fZwFEc(DdKy<<|49RO4;CWx? zTq6d>C0$VtC2X=qjkZWkcq9u-iuVgjti4zLFNiTvRu5MA(Wp*PzDiPH0GWxkW&H7i z@_T`?L?G`60E%kCq7P(LZJ_)o`hwwkVdknA3;<6pP^%3dPVv3`Nydoc00000NkvXX Hu0mjfpbMPK literal 0 HcmV?d00001 diff --git a/assets/Sprites/Flower Enemy/Flower Enemy.aseprite b/assets/Sprites/Flower Enemy/Flower Enemy.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..cf20010a26245bcce2f96e49b9a14e5fddc40bfd GIT binary patch literal 6855 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 literal 0 HcmV?d00001 diff --git a/assets/Sprites/Flower Enemy/Flower Enemy.gif b/assets/Sprites/Flower Enemy/Flower Enemy.gif new file mode 100644 index 0000000000000000000000000000000000000000..1dca58f2f54ac69eb89fd4717c59abae3b04a279 GIT binary patch literal 8227 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

IO$ekE=af25R37Z$g8xg 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%0A9Kid%S@Hi8hyz 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 I?tlyb59W@mL;wH) literal 0 HcmV?d00001 diff --git a/assets/Sprites/Hell Bot DARK/Hell Bot Dark.aseprite b/assets/Sprites/Hell Bot DARK/Hell Bot Dark.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..cf33f3d5fa411855c93638e51253256d64b0445f GIT binary patch literal 21946 zcmeHvcT`i$7cPj13WADK6oQI^NbfCyizpy13Mw6>ONU^jgGiGuy@N=T7Nms^(n}~x z3%!#70RjXFJuiBF_jm7mzjgn6YrVyLCo5mhIwvc$=X~FunZ0K+)h|d$X0q;+=#tze zxkW-sLPBCfeE;XTO+xzfBFSaq>;J@Y`78;^!RGm2rJg4iKu3I2-1=4I--??do-^LM z{rk$T-=BYd5J*Vw+!7+<4PzoA-KvQg9;ZmeAiJNXH#RmBY=~7k z`}67ltRk^0#Ci}bL97AMe4_0{!--ZCO(xn)G?r*7(M+O^L<5P|5lti7_0uRAjA#wf z7NQ|UD~Ki#%O@62ESXp=u}ort#L{m3EbP{qzn&hk62$W}Bu3_dUw6pL zjl?;5ty$(02?-V1?Z;??DYFb3g)clW{;xWqb7X-xt%uJM=_e;D{~`$m$$#oVM|>2{ z$#p~g)INMv{@IY`}a6(0&l1k_G-SIU*dpd|-oIy|I?hA?aLMu928N>tS7?qTv?jrYB+S!ScZbf; z<;KBu+uPUG@rAJAW-IQ2#GT=jSx*vsgAl?P@hKc^p83@t{3P=KGkaQ?T{wlzUj8?q z9hAA~`_pG@Ug}nE2=UZbvk&a|EAC}K8Do^&ql!meu}Lx9C~{z;W&b{G?TIm)e?C!) zWRq1wPOK^qY-b`16WSdn8n#^S01htq*^J6=KSKMJV{0&q>W(q^n~9=xiZ$(e$nv)^ zeRHmrrbn@+{FAygSRDs$7Q7;8u7tye5k_=gVPvpq>F&{(yKoYo1qrta90oOxf$P}$ zX#0Y?aqjIU&!RAjTawOIriH_-&6uUhYTGrgit3W~1F6eBCZc=H2tf}lcpSqJFleA}P%du5IbadK<5!jk?j{ORC9)I@} z-JsK-iW2w8icszVuNAOuTu$5;RH0?|AIY{*RJ$~;FX*-SvaQe_s}FzmdZkMTf^zX3 zM3l!Pp)u^z;FczUT1$`ByaN+!>c@8XC_5{=N4i<{MOBCONuY04+`?=;@mhGe%}cxM zriA98b!uzADj})i8Jyg+q$6%wMS(rAYNef?1o$1zfXSgpzDcmD*$03 zfqH$5$8PoYG~BwHrvAF(23O)jc8f5Hx4OcI-Qvp{+VOo8GzP+v?W3oVck+MXy>+nh zBC$U{_sR|KyfHK2yp)gcWQs8JT?HpCiTJVjt4LdhBxP?3_c``ESi3DeG_P~hN7Nbz zA5-v!=fee_Ht}phda;itv@tRkJVF+ARWPa2_6CqG$GwGM_V}96~DfN}1^+N!)1gA8igv;Djq_9(B-(yF)OkNHd zSkD%2)#JbTS!xNCkw6Q5QuQPad2`IlgLM_IwQ`L1jPEBeb(^xvMwmto9HLr);jW2e z-CmQ|k11>HXBpg2j?4=zZFIIuOmA2!+-?z~mXzqTRgNt&J41i)OJL(lxe(X;*NVAIqnm6c!dMs7XyjW$ zyOnn8aJ$vx@J4jz?)YM)MOD8(Qh0l!Oy{usll!p;auN@U=z*b2Io5mLaO9|1AinPp zcfVF$`1DF6jdRQ=ujW0G=ZIT^=_#mW>DkffC@2$@LYfEp8NgVrx&~j?Hisc&KvUw` ze`LR{Bit0QvRg`itb(YX-}30{`;u=yhi#;ubdpS%up4r&8s4G7lOOr|^3I(?lBs`_ zO!1GPiSbv^G#T}Sy6G0xV^M>Ojc;TI&CQ-31|n5v!YUdU&ju@0i zl!Ue2L1h5X;&87I6I^mVzAnr`1pfD|M?z43AuLpH`bNvsW4s4@Tf3t-#q;J7cwvI~ zLCxV;hAv<=!)@OQz$L?PEL&6N;@@4Sxfm;2_NPiR*6F`a2w$Gv3?O z-F>8C%# z;&cC7SUfZ+L+x|xGWpXry16C>)#ms4ZUPv)c>fs|rZOIh&gpBY80s;@*Kv-vCgK)? zL+a}d(IVrLrS}g+jchg6x?U~6O+eQXQ2t6iP`%c*R6$p6TgA@R&sZe-dQ_E3{iN-A znHmCuN7*FRd`NDqx-*nNY!2@3&W0)1=~c@Uxi?bdW$v^EV(twh4%nX{+O(^{O})X> z58SlC39bfK@Oa}ogBsbM9#qHrO828Kmk7xW*uAmR##FzY2|!JI*;u@mCs=k zNb0!Vr-T_6Mj@WN`xa_#8WMjRtIR(+w2{T^OxB+_W?g^VUc?luBqAt# zo}gQdgie;I=yjXd}v&KCklQ`f&UH-wOP4kfTGWteTiW;Q#akhn;$61^a za}NBCPTK9st8jDfn=;2(H)xJ&__W+Dpj{^YHp8#smz%z{dcWS?etUG-G5NR%XH=j*n+5{D&smI-H3k!7pT-7*cGcAnsa*!^^CQqoge<;9cFLJu&9UEgm z(Lul9CDgFZ97EBlhQ8xMgXL4m^!2}({(I)~=I>5eh1!?zydM;PgPsQ%8mwQ(j)@M8 zr{@}ZAef-AWfa}SF1=PQa??LO&Qf{P>1E#X1t{o8nU+f*6>ib|j9lai@7K33C3}Qt z^J41|vwNY}jg|EsGjw&NqOL!zZ2b&u_!2CBgVM!G6H~q0tsR@yA(KiGESBk#sxpOY z=)S{`FzOfGH85PPB%^S-ziek{!xRI}R_+EFAC&X>FSI|J@pzc8hi>Pis>^<;bAJj&u+prtD`xHO=xeEbg1WiM3tAjV z)}0sAxBLdCBZ!4goer&2&_!!mooZjDi{W%@i??D)QY_vw;8 z3CCcs5;v@}lC@S&av_4ZvqoubGO#4$=!5*FLl}j}&8ppuVx5gRQ~pu#{!$;Hl@Q)G zymD9a2B1cyUX(Spdi@mAd*e5~|Lm3jXN&!3rfbcbljjjIl(J~OGufqIA;e;U-1XzXvCSkXw8fq&T-@sCM?+}s#uGY?KTc@l8Es!C_RZm;>!F%~ z8gB}TJ>#8TT90CO^h1MCE3MdXFqhO9GzV%bF~JPc4otyPWAbUpRzL{Kght+R)}tfK z<-2@3u3fOo*x{AG;a=842B=_O({&c#iWa7p8`e5(Jd6mLsGV@Iz}YWGKvT6Ujf{l+ zTU!Ou4xM)21kkISl^ay|9D=9e!1*1fBXA(EE7g)v^%>Jdwo>_JetZLgJ}*lmuK}YN z5*0UIH0zeytWF@Wo`Ne`5oe!H+eB2{Z_3a8gYp+7%s;0|M-j01e3#F?(vsEu`buf! z>+GfTl=|}1k?i@(P4Ny(elooluKQ7eDzCqLhFss-{Fudsc&O1du<+GnAUXMs(U?5W zjiCJ{saK$;tGNeW{CVC$nb=xCb*k-s`nhzB+2VLGCpW>U()h)Tv}$7ml|ln2-a-yB zE(E0W8ngOVCZ;?=@i1B^+eitCT2T+oMF^T{XljhZxAi+m^37HHT>Z7#RbC7TQ7Ek| zs-Rswvn^L3a#HnyehygOnV{BJ z4SO+-f2kpM&hZsbNO8$>F}U$Or5@BTRWo-ziwA6bu@(QEOA6c|+m5x|;M&sork&X(wWKSwUYu2@ zP-;Ijia*2l|0=bSXJN#!{oKr$Mkr02GX-t5GS8+{ygV#@Bj|O5*fuqcR_r2pRQHG6p&#tA`M7UrK!4*p3+FEC`&E zyR3bE;9C2KnlaSTGjx#+m-=BUyHmLyAvgbET2Vo{K@`O#H3zs>thGKVzZ^78_I+bM zUvlcGG#`W?M{xkNvN7;s^9QD^!qxpZ@*Q8K0ojf{`||yfh~Wk(j7{ltB^#ZB*` zk_UBXZHTGk+q#xxk>CaY;CqV+5;qgXo)l-4zn7K=lxi8#?5!Q11m8w4H#8Y5qt7JLD8fGWEA4{~30v{VB;2CF)<@HioY0{bkk0E1KVah%*X| zMLtQ9dKZ>e?j^uq{CHN$;J|rA{YA{DE(fg(5p&K2E<{ONeL$p;k@n5L?lmuFrx8mx zy@=_&3P%$Lf3ArO?RDF`S0yYbX7ezvyo2mtjBOpKQRn-*9L{z1TuznO)?&`FFajyH zX|hycsU+Ac+cP@vN2lDNtUrF(OMavk%?jU!cANI?ToPG5JVAgfTKoxSrooW2vR~jf zg|Q`dN5iqtj4hbtNn^Wype|r@-$ohRx?v-h{70@{v=+fOUq7t!WMoihlmC)!F=bln zD>8vyl~O3I*bpbq$rO85QgN{Ax;A{r$2Dn_VpvVjW75}+$J{EJ)jQ10-n7WUK}`7h z>b{z^;`{P(j6CC0$N75&o#|dRGYYZ}tsB%~#k5Tk%^T~Entj*hUEsb}Y03Eb_Z*OG z>`af5&;tM5vqyuNXY!TQT;c8p7t!BJWnxzd?UR8)`E?7lEE#i4s$A{S=p)Lv?PF5F zQ>eJt|5b4^e=06kCM zEK#nqoP{qyBr6?v_IBUr7f^JG>&Z7sjjiRj&A#HP0ky`XRXF=_RSGQp6wQ1gYJ_`N zdP&<759&$edO9VR4yCjytWeRDNcXrz3Y&2`;Re|z@lOCXJxc!u7>4)lIN73IBFbfZ zBtjC_n~r|b8%Cp|te%r)q@s&97LljvJ;M;;*&>793HkPDVj=AP>}fJ$j(&!1hx z&H+D#?h4)$Zu9Ccyyr>J!d)|6)XvGgO2Ok<;FZ)<0ZyH4Y{5YP*sm;ozblz&uB1yH z>ulj*-op5Ke+Y1*$>h751e3Z-Z8S3-1)|=rAzKIS911vm5)pg);zdd#3u#T&4VrXn zdln#*(kcGUh|JH&Mpm*tXduhZYLt$iV|101#I+Q|{rWM9s&qF3URoWov54>Scm?Ol|h-5teR zU7CNz-B858?lSNI0pS)vMNns3Bnq!l&djcBss3mb3wyw{=b*aoN^?*T?hRjf=lZ>j z?lqIwINWQso}z0SIw`s9)xc>_;`v+;`I%x|V+TOh{OSu?C;57nX9sBoGW&8`n(H6l zRu0fgBgeH%siqyId3kwuPXOOD=5<@mBqO;!!@^^wc|`htypo>TD?agnf0s(A_VE*4 zdbjn&oSd0H39T$fp;KFyDR{?E)6>yUT2di6O)?)Q_H~*%K4}{-;P6USj8A3YZcq5T zNxhVSI%+-|z}(ddT6E*diQz)Y5b`6)ebk$Wf@R((n)(aziJrDlbnw@T-T%JYb!Z4g z{q7dkxu=q)jx1rlokCRc2c!Mkuf9GpUO(Ofl*h+f7M}ucy8w+6Iz<*N4tGp(EO1h3BJQvumOH;aQ zsgXBXN^|GL(lMY0!|Xmv!J-TdXcC?WcthpfbqB8v^A_hLhIY4>bZO$lwb>`zy@n1N z%9n5s1%s)M*|CwFJzl~R2L+n5`V@~?Hs?yhkh3l%tgcd8o1IJlv*q_DO6aXmKUgV?*f7|4$@-7+K;>LI#3Y<=-dZZ${N zA0pMUMGGo%ki_M{;ciWxU8iGLn+f*yMpvgi5RO&G>|?1~3q#SD(dcH0uo9mDM7cJN ze*tZcP4#dJ23p)MkQ@6@a8d8|F?*)gdiQ+lY=J&~k6`t>En;yh5h2p|sv9beoT@Uz z{cr_U8C0@R7y1pJ=0qUXKPF=VB!Hh;p?;;G3(wDf&(_hr-D06>4^@?uR0|2QlH_mT z(N@a1{J1ke2?+2MR*5RR22W9&hInNa)YNS?pv)WE{ak`|iwa#*|MA<}A_nRCSxK2qgq%@$e?*qp~S+k1Abbt!Pbh?~pw{dD7 zBI#w^MBmN!zVL<;lJM#PX-MwgEZpfWJ1eez!ZLK^eNLGMT9 zS}#!@3C)Cbt*^-etz_aD^qJMiu<6BgF{Xt1KMEX}D$2w*a7J(&H!(a2mqCHAQ( z$cG+sTn%hoZ5X_HJ?>MpkP1768LNS7X73p!Y@2j+f)FqJA#MI0;I_!Fs${Tcfw1LU z2LIV$Zje1n*mD}6Jjd%Ey#qAqM%Iu>PLPSIT<_H9aI4?um-nkJx};<0sW zy61pQrHSNsDZB9FgO=}i%Ga-m?+|)s$;=M#2HrV^+ED#BZNy9xqfIKgl#0td=VvV{ zXNFt^GJPY%tEI=pLsf2sI!c=B#eo1&W3AY7ff5BFm3jAlO2An85|?Ef#n#=!n|0}i z{;o1^04L^;r5>A6>sv-K#_rZ7l-<w(IrjF=eDQm$ zw=fZyKX4t*EAIg9_=Ry}mm~{z$i|+3Ing(tiQlj>| zMf}$TvlWw=J;-)4X1_M@-ld}0{`VplN1t}jUiMFy%C@+Hd*ja5>cC{aaIAmD;fcq! zwHyVYOFd+>I&zUxBNsK!rjL;zBn4M$826(}bJk$ISr+=UHPLhpsLo3`U{1?UJvJ{; zM@W5Hia8DVxoRW=Z^uf&gS-rF;|_+&VgaUDUo9mLU7dn{Zpul=f72P{vWDf{gpGAB&y=)Fyd*+ zx#Cxi7Qb>-G55}0YP;a=t}Psy1^?s7KDo?dPJSG&+V0a%fM^Qu%jvm?jRAVi87*D! zh<&R=|SaEb7B^3jhOPqO3 zAS`1vKhGd&=K|Nf6*@mYgN)&t#*vxIVB|gYPzGh_yxOqFaxQ;-aP+W+)?W%*eD5EQ6@4YH? zYuTZ&j{$Bvk_+M@-@FMRvGo-bm&~}4jNK}{M>%UWzPIU+60quIGmGCTR8plJR$lj! zMJ9tdsNpk`Oq#r~9Zxv}$V$CJacvdqCP%74$pRC97|nT#ZmG+sP$$6OI{D}S9Pj+8 zlVM^+L5%!ffvkYeGZw(T6)8qU+6J$R2E&hGZV`(T@^jPoKQ(WFh%E^8?a^w4VPWee z=9%Dx#TA@s^G9sS7x6+WCrw-*?xm{ET3zWO+K$AAKr?g8o1q#E&uMYtNOz!4yx+5;y84h zyC4*5P{sveaU1kEPjm7$ZJdgr^T^Q^ejWa{!|@TNZrAKdL1R2O1;)2t=#kiEp$*AP z1reThL2r^Rto%IN_haS@S_R*57dn&T7owPu#AkQfG67`2^+5TLcH`RbMMX-~&9|r? z$-+Nzm2_B?%&a7bv^`7KRv-8MQmCDIWe(5aW5{rH)tKr_TV&C-9%Pa8VL(aB(Cd`h zY}Wv%!JY4&b8jgqk?V>aLz2J^Xo;qP6VR3;t3(K}gWrPfA;d*pB8TRR+c|4ZwN`+A zyqk)s7-uB(Qj3w6azDRFTU$~rFj&b3fOEc~B%mdhz4@hY-lYU+$#3b&mF+}74Ep3; z-*j=QFd&e>A-KI8jLWu=Ao#5T-#$5qcc6CJyc+DM41QU!0BB<)2u{!vqEg+{_aO$y zJ5mV{=GqK4EGhrALG9Ejr1j#z(n?$_MqK{c%H85eiJf7ttYtS|@{N=(zkb(DKz56a z^zbOUNk~r=TNh>N>z-v%@7X#oU6!0b+BK^H2-G;BWydd5s|Tux)g#Dw+H&T_rXK3^ zB8^B(gV}*pxIIaP!TI!(*AvYdp5r1Fu>1k%F91Mskm})MvlD}+gF$D0xeDx|GS|z% z!^=G}JBTqegTxPwkybatQCu&>@2cZicZZ`}OL`whwUyO|@}(_oYDqUnVMovNBCQH< z7g9%5aVgd1UqfCUf~g_Gw75E3@Q*!>Cn8pgVgym??7@K!U3!WTmZzNSEYBY`##zbj4ZM0MsImdT00~5pN z`KH{OYoAHG0*z9-B6Ii`4}UUB`*0+%^??*8Phra8WJOQC&=ntYw+G?F+658XfO3iJ z(kg6b6o+vw=W*o+zk2*5=RVAaXOLRYg=J)2_=Qcyh`Va8t<~Cczx!Zz27amlWBHL=&@w7% zYk+o{1$iQsQ6gGiY?E~1cJ~4#GQ!VO2{Vbkf((8LkS`Rr(dMlx+#U>bC0*eFNq+C94?ve>b`W1oOD7@?62L*i0KDC=8-?#lKg^KAgk)P+lgO` ze72R9PRM~rfDff;jFJg6r_gDsemBYg9C`hwI7;TH(>}gg@sM86Ibf<0fj0?bRKAcf zlDWjkJj+_Rxxe3LS}Y%OC6j5~Q$(l%j6W)x7YkD>y;RpN?nLJdh-gXdY})}KBin0Y{pLy$4PDxU)sJ@0(PyG1kMea_Tp3I#`b9@l zYqm?QVrzM8oH*Rv^pLpY+s#*ZssofF-A_=amo}HFMCdy!1lZvH*zfaOC&R89CBjm} zbtE6QQOv8SkY9%X%J22xBdKRUUHFloK`4u-GX-{L5yYrOYgs-2+&DmyTD3{r|-gF%9_sA83D)B3Qjs6 zty5~M`s@##!YGQASf`)s>&S>3_xxumzC3XQA!5=#Ud8t3t_0rPS1IXq-`&%A)%-(T zE0_~lqMu?A*?D&@s$joS8CPGNqFmEkhyykN`%f}YMwfzS=N!R3wH9l&Czo03tF~}f z&o4?H*5d^pN@E60aROn+;WGOjkK{P5A9}=BZXD_c>&gl%l|=NZ>^ww%B$cu(SJ&a5 zt=&wJ765M*_oT!pyi`k+r@vW1SsUP6_neZ3<0gGQY|_}s*w~&)9vp#CQXI9E8x9q* z8-_BM>Fy_Ly?)kTQKajBpNE&ZBprVX-CpXR`d;Niw)XTML}2G*AlVjfXCGEAOP8&M zI1xSv|Ku9!S(bRv@{vl{F}A8@BiAn=G+YIoFxbJKiGO$yw97f5uTREez|-v?&xPpk z!&z^KIQp}A+rfpUcNkf>9_g-sg;b4PN%F?OMUFYT$6@E1ysXCI-j(*3$wCnx$Ix~D zLjLOk{d2BA-aFfWD>r}|tB2}#qy+|ZmepITXtKu{6sm@}D;7z|z2-evq~Exog-lZt zjRRP*`GOH1(EXc$5=Jpawfrvdrs`eEv;CGR zn!;k^<;RgKNbd1tPp^XbUG!?2(p0VPa4+G})LiL<5_oH}Q#p46lV319HJI7s4(l#* zi||I`UTny;ZAF<`xC4{qAbSEn1r@)L+NfM>Z8;48s;evjXVWOqZqyXAyJJ=yn&%%V z%wyd2==lnB_t`Z1Wl^`Uo4XSVuo)>G{4AZWrAK#b;<(p=WS~A&q`WI`B0*v&QVMDC zwa-5JtJC{p--|5_ddRy5@!|Fnn@r(`46duf4>(Wm$KA-L^GTG5+}n}dzJQTo4CJTx z5JA0KNRj0l+8=&^ZV}?~w2S2JdMv$pxTJRw1AkLgZh3jyDJ&3mt&byla#=50lC`ju zELu$U*z07qioUpDqA)jW_+_;yU$_=?dz)@$SXo7_RgZHh<{a)GQiF?UqkwJy)nbw` zQv2qPc_si+Zak<^gceJkjCYzEIpgV8S%u{lvzsz6c6!CbsJoY-^}<`rLXNNv<3v3P z3|*vH+qud{7krCely+Sv)<7qzT%MH&+(355dZONqy9wAtKJ14h?=7B7ojS@b^wW;2 zY2R_Z4tf-a@bi*B>2Ct{UbkAVsdN6M0(4zy;!=zhhNL|kIw%pPEThwX>*y&PY@e`# zb%QCa*kc*se5<^lar;LDl6Oz;^Aj{QL{j&o1ES>pxw!)K zDZ!aE{6eJ&_;#-L{0IHc8$yA!hcjZ=!{v3y;m6|HlZw)82IWQ$^lhm?Y}1_WL7iI~ zF~OGkgMfAc08cR0BIU7L^cl`JP zecI1b2eibxnOV3zp(|=23n9m>ST|`J)EPzB`D~F=ZhiH2H=3)9q|Ge=^D-}M8Ok_> z9d&%xldX(hUh*An~|UMlsahVRbp2uC6TR zAzEwpiV3$H#f1a;iqfY_6Xqs7@lFNQt)&N&T!L_G!i2V7%!$>IPn+zxMye?1)S#wL zL3+VHHpMmMI31gZ(RNAR(d~3vUL-joo8qMNk>l5xra_jkYr05%)94jHx~XDg=&=F1 zHg7aCJN-cWeBZ^bkID~2S~RiIK_){1W^|O|!;(2yvo^lf$`-hypMQQ12pg+*pIwlDZ)FF%U;&)z>?u0snv5x>bznap`_sxyTNat&dGWyMhO z!#V(#!y61hQIC0y- zzYD<2(S=uhZNajX{m`Ruu9MW~9(9#>us>#9QlD)cx;v*VY@aN5qVIghEklfEUGlvZ ze-LQkJ3v;~zCM0rFP;Ig8M{6<5SzbdEJZeXnwA5M`Ym@f?5eUVLo(F=*urJ ze2;G@%R-{Qx>w&1S3mT{>jKJ~$RMoTwXPI#9s4I$JNTX;Jy5lBu`79998(`u=@~SAtd4qq>52vpv znfuy>G5z3^Se4t2U34oVD5T8U{-O8yxJKK39-)+{z0y`E*f%9Y<6oqE>Qp3(NqWDO zA3pL)yif*rdcV2!=wQ;_Qu`z)gI~!RaUpK9_b{MUeCSMSvO?bzn`2R4X9DGy(AeSs E0f0W(t^fc4 literal 0 HcmV?d00001 diff --git a/assets/Sprites/Hell Bot DARK/attack 92x36.png b/assets/Sprites/Hell Bot DARK/attack 92x36.png new file mode 100644 index 0000000000000000000000000000000000000000..433bd960f3c59f86c233116f4b6d069b6d668104 GIT binary patch literal 2608 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 ZQ~LVmt*00P(BFHpzP2&EO!HpkzW_TT%J%>O literal 0 HcmV?d00001 diff --git a/assets/Sprites/Hell Bot DARK/hit 92x36.png b/assets/Sprites/Hell Bot DARK/hit 92x36.png new file mode 100644 index 0000000000000000000000000000000000000000..286ef646204fa67afddd9225db5ddf32e660ba99 GIT binary patch literal 896 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 literal 0 HcmV?d00001 diff --git a/assets/Sprites/Hell Bot DARK/run 92x36.png b/assets/Sprites/Hell Bot DARK/run 92x36.png new file mode 100644 index 0000000000000000000000000000000000000000..2ff3b0a21d716c42e2a4a3dd29365f101e8598d5 GIT binary patch literal 2397 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 TwcnmGy;%%rt+B{*D^L30Um<}z literal 0 HcmV?d00001 diff --git a/assets/Sprites/Hell Bot DARK/shoot 92x36.png b/assets/Sprites/Hell Bot DARK/shoot 92x36.png new file mode 100644 index 0000000000000000000000000000000000000000..ebec76029e562019dd46efb90aa4a821869ef1f4 GIT binary patch literal 2603 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 KiyiGm0O3E*8|;Aq literal 0 HcmV?d00001 diff --git a/assets/Sprites/Wheel Bot/charge 112x26.png b/assets/Sprites/Wheel Bot/charge 112x26.png new file mode 100644 index 0000000000000000000000000000000000000000..94bf154e96c856a3eda7e8f8099a2481f3c42acc GIT binary patch literal 941 zcmeAS@N?(olHy`uVBq!ia0vp^1wfp^!3HEXQ%m*&DaPU;cPEB*=VV?oFfgZkx;TbZ z%z1mq(Cc@C%(0K^nQaYvk9b-1A6_`CYEk-;MV95Da0R#ElK;jQyPgZ!Hgr$E>U!|t zFRL3F$&>$merD=h|KYEL;x@(S*PE>e;-}4I{JBz+2mrsNotdh zEtOmp=HJa#cwkfL!_d3?W$vjw_!)3e`+&{)sn2)z_4i*tS6))0@-lmg==Rpaw@w*L zKkm~x|2gTB=cNpjRde2d`xbWi;f9Y@H|Mr_+B`3xwCMHg*GW;A!ZRk7)Yq>+eAs#A z&viv_<|rRwuv5Mu`g#7GIWHbRUi>AlytH&_b2IaLb$Pz_|0=zl8*JY<&$yVe#6nL$ zOf+s<>Zwg@PHI_h;C!%^d#>N|uE!CclXj^5jQsNFPt2r}@^W?0r4Kgg{NA^JgGA*I z<~T+>8yk(j_wQ$?nYg)YC?_b}B|Rb2vl{8pu&p5ByYEAQRA z*R^}m-Mg`S_wCzu$7PN1C&#!+QP=3w6ELGKD)<^qps;b^F@6olRk!CWrxQ#`+Fx8>lJmc zzjeKH-mXnC zHvadsg@4KY_$}X1tH!`^qr-3Z%@_C7X5D-dpnmqv@#F56&!5bht&A}t~!ZAl5XJk%3`)1dHu)4i1&$ca`xmKf#W5d$ij5Oi6 zhJCYdwurA-pZ2Z1pe9|SEp1z&$>!e0GjnCm<~+_wlXhQw!2;$D5ZCy&#jKmhE}j9V zP_>I^%+_sA`}Y1*-r3%y`~`mNXRf`f_rmL@c%oV5**8xQc!h6TE`BR6{`wg`Ir;9a z#0fwfi_gAcxP9S_8w1!Bvp!PoyPTaCZnC+4`xedbY_E3B)Lkn!{T0`~j6|USUhzIC ziJq`;)=gHoga!9z-~6Me!~^lf^=f13L}b^4?Y+VUiW?5F|B#)rz<<7(sQ2%kF0=Ln P^B;q!tDnm{r-UW|x?|XQ literal 0 HcmV?d00001 diff --git a/assets/Sprites/Wheel Bot/damaged 112x26.png b/assets/Sprites/Wheel Bot/damaged 112x26.png new file mode 100644 index 0000000000000000000000000000000000000000..a01efa658529be74a2ffd08d40b04a122bd82fe1 GIT binary patch literal 763 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 literal 0 HcmV?d00001 diff --git a/assets/Sprites/Wheel Bot/hot wheel dark.aseprite b/assets/Sprites/Wheel Bot/hot wheel dark.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..0208a52739907507523dbb81f419788c88cedb5a GIT binary patch literal 14161 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 I-wDnC0BWG&A^-pY literal 0 HcmV?d00001 diff --git a/assets/Sprites/Wheel Bot/hot wheel dark.gif b/assets/Sprites/Wheel Bot/hot wheel dark.gif new file mode 100644 index 0000000000000000000000000000000000000000..203a775d4ff404d3bf664228159639258b412d4a GIT binary patch literal 14772 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 literal 0 HcmV?d00001 diff --git a/assets/Sprites/flame dude dark.aseprite b/assets/Sprites/flame dude dark.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..043b9db1c55f98db8763148c167c63533bec4566 GIT binary patch literal 20881 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�fACx6#a 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 z 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 self.width or y < 1 or y > self.height then + error(("There is no frame for x=%d, y=%d"):format(x, y)) + end + local key = self._key + _frames[key] = _frames[key] or {} + _frames[key][x] = _frames[key][x] or {} + _frames[key][x][y] = _frames[key][x][y] or createFrame(self, x, y) + return _frames[key][x][y] +end + +local function parseInterval(str) + if type(str) == "number" then return str, str, 1 end + str = str:gsub('%s', '') -- remove spaces + local min, max = str:match("^(%d+)-(%d+)$") + assert(min and max, ("Could not parse interval from %q"):format(str)) + min, max = tonumber(min), tonumber(max) + local step = min <= max and 1 or -1 + return min, max, step +end + +function Grid:getFrames(...) + local result, args = {}, { ... } + local minx, maxx, stepx, miny, maxy, stepy + + for i = 1, #args, 2 do + minx, maxx, stepx = parseInterval(args[i]) + miny, maxy, stepy = parseInterval(args[i + 1]) + for y = miny, maxy, stepy do + for x = minx, maxx, stepx do + result[#result + 1] = getOrCreateFrame(self, x, y) + end + end + end + + return result +end + +local Gridmt = { + __index = Grid, + __call = Grid.getFrames +} + +local function newGrid(frameWidth, frameHeight, imageWidth, imageHeight, left, top, border) + assertPositiveInteger(frameWidth, "frameWidth") + assertPositiveInteger(frameHeight, "frameHeight") + assertPositiveInteger(imageWidth, "imageWidth") + assertPositiveInteger(imageHeight, "imageHeight") + + left = left or 0 + top = top or 0 + border = border or 0 + + local key = getGridKey(frameWidth, frameHeight, imageWidth, imageHeight, left, top, border) + + local grid = setmetatable( + { + frameWidth = frameWidth, + frameHeight = frameHeight, + imageWidth = imageWidth, + imageHeight = imageHeight, + left = left, + top = top, + border = border, + width = math.floor(imageWidth / frameWidth), + height = math.floor(imageHeight / frameHeight), + _key = key + }, + Gridmt + ) + return grid +end + +----------------------------------------------------------- + +local Animation = {} + +local function cloneArray(arr) + local result = {} + for i = 1, #arr do result[i] = arr[i] end + return result +end + +local function parseDurations(durations, frameCount) + local result = {} + if type(durations) == 'number' then + for i = 1, frameCount do result[i] = durations end + else + local min, max, step + for key, duration in pairs(durations) do + assert(type(duration) == 'number', "The value [" .. tostring(duration) .. "] should be a number") + min, max, step = parseInterval(key) + for i = min, max, step do result[i] = duration end + end + end + + if #result < frameCount then + error("The durations table has length of " .. tostring(#result) .. ", but it should be >= " .. tostring(frameCount)) + end + + return result +end + +local function parseIntervals(durations) + local result, time = { 0 }, 0 + for i = 1, #durations do + time = time + durations[i] + result[i + 1] = time + end + return result, time +end + +local Animationmt = { __index = Animation } +local nop = function() end + +local function newAnimation(frames, durations, onLoop) + local td = type(durations); + if (td ~= 'number' or durations <= 0) and td ~= 'table' then + error("durations must be a positive number. Was " .. tostring(durations)) + end + onLoop = onLoop or nop + durations = parseDurations(durations, #frames) + local intervals, totalDuration = parseIntervals(durations) + return setmetatable({ + frames = cloneArray(frames), + durations = durations, + intervals = intervals, + totalDuration = totalDuration, + onLoop = onLoop, + timer = 0, + position = 1, + status = "playing", + flippedH = false, + flippedV = false + }, + Animationmt + ) +end + +function Animation:clone() + local newAnim = newAnimation(self.frames, self.durations, self.onLoop) + newAnim.flippedH, newAnim.flippedV = self.flippedH, self.flippedV + return newAnim +end + +function Animation:flipH() + self.flippedH = not self.flippedH + return self +end + +function Animation:flipV() + self.flippedV = not self.flippedV + return self +end + +local function seekFrameIndex(intervals, timer) + local high, low, i = #intervals - 1, 1, 1 + + while (low <= high) do + i = math.floor((low + high) / 2) + if timer >= intervals[i + 1] then + low = i + 1 + elseif timer < intervals[i] then + high = i - 1 + else + return i + end + end + + return i +end + +function Animation:update(dt) + if self.status ~= "playing" then return end + + self.timer = self.timer + dt + local loops = math.floor(self.timer / self.totalDuration) + if loops ~= 0 then + self.timer = self.timer - self.totalDuration * loops + local f = type(self.onLoop) == 'function' and self.onLoop or self[self.onLoop] + f(self, loops) + end + + self.position = seekFrameIndex(self.intervals, self.timer) +end + +function Animation:pause() + self.status = "paused" +end + +function Animation:gotoFrame(position) + self.position = position + self.timer = self.intervals[self.position] +end + +function Animation:pauseAtEnd() + self.position = #self.frames + self.timer = self.totalDuration + self:pause() +end + +function Animation:pauseAtStart() + self.position = 1 + self.timer = 0 + self:pause() +end + +function Animation:resume() + self.status = "playing" +end + +function Animation:draw(image, x, y, r, sx, sy, ox, oy, kx, ky) + love.graphics.draw(image, self:getFrameInfo(x, y, r, sx, sy, ox, oy, kx, ky)) +end + +function Animation:getFrameInfo(x, y, r, sx, sy, ox, oy, kx, ky) + local frame = self.frames[self.position] + if self.flippedH or self.flippedV then + r, sx, sy, ox, oy, kx, ky = r or 0, sx or 1, sy or 1, ox or 0, oy or 0, kx or 0, ky or 0 + local _, _, w, h = frame:getViewport() + + if self.flippedH then + sx = sx * -1 + ox = w - ox + kx = kx * -1 + ky = ky * -1 + end + + if self.flippedV then + sy = sy * -1 + oy = h - oy + kx = kx * -1 + ky = ky * -1 + end + end + return frame, x, y, r, sx, sy, ox, oy, kx, ky +end + +function Animation:getDimensions() + local _, _, w, h = self.frames[self.position]:getViewport() + return w, h +end + +----------------------------------------------------------- + +anim8.newGrid = newGrid +anim8.newAnimation = newAnimation + +return anim8 diff --git a/libraries/breezefield b/libraries/breezefield new file mode 160000 index 0000000..01faa2d --- /dev/null +++ b/libraries/breezefield @@ -0,0 +1 @@ +Subproject commit 01faa2dd8def34aecc7018492f93f5a8e224237a diff --git a/libraries/sti/atlas.lua b/libraries/sti/atlas.lua new file mode 100644 index 0000000..302b332 --- /dev/null +++ b/libraries/sti/atlas.lua @@ -0,0 +1,159 @@ +---- Texture atlas complement for the Simple Tiled Implementation +-- @copyright 2022 +-- @author Eduardo Hernández coz.eduardo.hernandez@gmail.com +-- @license MIT/X11 + +local module = {} + +--- Create a texture atlas +-- @param files Array with filenames +-- @param sort If "size" will sort by size, or if "id" will sort by id +-- @param ids Array with ids of each file +-- @param pow2 If true, will force a power of 2 size +function module.Atlas( files, sort, ids, pow2 ) + + local function Node(x, y, w, h) + return {x = x, y = y, w = w, h = h} + end + + local function nextpow2( n ) + local res = 1 + while res <= n do + res = res * 2 + end + return res + end + + local function loadImgs() + local images = {} + for i = 1, #files do + images[i] = {} + --images[i].name = files[i] + if ids then images[i].id = ids[i] end + images[i].img = love.graphics.newImage( files[i] ) + images[i].w = images[i].img:getWidth() + images[i].h = images[i].img:getHeight() + images[i].area = images[i].w * images[i].h + end + if sort == "size" or sort == "id" then + table.sort( images, function( a, b ) return ( a.area > b.area ) end ) + end + return images + end + + --TODO: understand this func + local function add(root, id, w, h) + if root.left or root.right then + if root.left then + local node = add(root.left, id, w, h) + if node then return node end + end + if root.right then + local node = add(root.right, id, w, h) + if node then return node end + end + return nil + end + + if w > root.w or h > root.h then return nil end + + local _w, _h = root.w - w, root.h - h + + if _w <= _h then + root.left = Node(root.x + w, root.y, _w, h) + root.right = Node(root.x, root.y + h, root.w, _h) + else + root.left = Node(root.x, root.y + h, w, _h) + root.right = Node(root.x + w, root.y, _w, root.h) + end + + root.w = w + root.h = h + root.id = id + + return root + end + + local function unmap(root) + if not root then return {} end + + local tree = {} + if root.id then + tree[root.id] = {} + tree[root.id].x, tree[root.id].y = root.x, root.y + end + + local left = unmap(root.left) + local right = unmap(root.right) + + for k, v in pairs(left) do + tree[k] = {} + tree[k].x, tree[k].y = v.x, v.y + end + for k, v in pairs(right) do + tree[k] = {} + tree[k].x, tree[k].y = v.x, v.y + end + + return tree + end + + local function bake() + local images = loadImgs() + + local root = {} + local w, h = images[1].w, images[1].h + + if pow2 then + if w % 1 == 0 then w = nextpow2(w) end + if h % 1 == 0 then h = nextpow2(h) end + end + + repeat + local node + + root = Node(0, 0, w, h) + + for i = 1, #images do + node = add(root, i, images[i].w, images[i].h) + if not node then break end + end + + if not node then + if h <= w then + if pow2 then h = h * 2 else h = h + 1 end + else + if pow2 then w = w * 2 else w = w + 1 end + end + else + break + end + until false + + local limits = love.graphics.getSystemLimits() + if w > limits.texturesize or h > limits.texturesize then + return "Resulting texture is too large for this system" + end + + local coords = unmap(root) + local map = love.graphics.newCanvas(w, h) + love.graphics.setCanvas( map ) +-- love.graphics.clear() + + for i = 1, #images do + love.graphics.draw(images[i].img, coords[i].x, coords[i].y) + if ids then coords[i].id = images[i].id end + end + love.graphics.setCanvas() + + if sort == "ids" then + table.sort( coords, function( a, b ) return ( a.id < b.id ) end ) + end + + return { image = map, coords = coords } + end + + return bake() +end + +return module diff --git a/libraries/sti/graphics.lua b/libraries/sti/graphics.lua new file mode 100644 index 0000000..6acf8d6 --- /dev/null +++ b/libraries/sti/graphics.lua @@ -0,0 +1,132 @@ +local lg = _G.love.graphics +local graphics = { isCreated = lg and true or false } + +function graphics.newSpriteBatch(...) + if graphics.isCreated then + return lg.newSpriteBatch(...) + end +end + +function graphics.newCanvas(...) + if graphics.isCreated then + return lg.newCanvas(...) + end +end + +function graphics.newImage(...) + if graphics.isCreated then + return lg.newImage(...) + end +end + +function graphics.newQuad(...) + if graphics.isCreated then + return lg.newQuad(...) + end +end + +function graphics.getCanvas(...) + if graphics.isCreated then + return lg.getCanvas(...) + end +end + +function graphics.setCanvas(...) + if graphics.isCreated then + return lg.setCanvas(...) + end +end + +function graphics.clear(...) + if graphics.isCreated then + return lg.clear(...) + end +end + +function graphics.push(...) + if graphics.isCreated then + return lg.push(...) + end +end + +function graphics.origin(...) + if graphics.isCreated then + return lg.origin(...) + end +end + +function graphics.scale(...) + if graphics.isCreated then + return lg.scale(...) + end +end + +function graphics.translate(...) + if graphics.isCreated then + return lg.translate(...) + end +end + +function graphics.pop(...) + if graphics.isCreated then + return lg.pop(...) + end +end + +function graphics.draw(...) + if graphics.isCreated then + return lg.draw(...) + end +end + +function graphics.rectangle(...) + if graphics.isCreated then + return lg.rectangle(...) + end +end + +function graphics.getColor(...) + if graphics.isCreated then + return lg.getColor(...) + end +end + +function graphics.setColor(...) + if graphics.isCreated then + return lg.setColor(...) + end +end + +function graphics.line(...) + if graphics.isCreated then + return lg.line(...) + end +end + +function graphics.polygon(...) + if graphics.isCreated then + return lg.polygon(...) + end +end + +function graphics.points(...) + if graphics.isCreated then + return lg.points(...) + end +end + +function graphics.getWidth() + if graphics.isCreated then + return lg.getWidth() + end + return 0 +end + +function graphics.getHeight() + if graphics.isCreated then + return lg.getHeight() + end + return 0 +end + +return graphics diff --git a/libraries/sti/init.lua b/libraries/sti/init.lua new file mode 100644 index 0000000..646a224 --- /dev/null +++ b/libraries/sti/init.lua @@ -0,0 +1,1748 @@ +--- Simple and fast Tiled map loader and renderer. +-- @module sti +-- @author Landon Manning +-- @copyright 2019 +-- @license MIT/X11 + +local STI = { + _LICENSE = "MIT/X11", + _URL = "https://github.com/karai17/Simple-Tiled-Implementation", + _VERSION = "1.2.3.0", + _DESCRIPTION = "Simple Tiled Implementation is a Tiled Map Editor library designed for the *awesome* LÖVE framework.", + cache = {} +} +STI.__index = STI + +local love = _G.love +local cwd = (...):gsub('%.init$', '') .. "." +local utils = require(cwd .. "utils") +local ceil = math.ceil +local floor = math.floor +local lg = require(cwd .. "graphics") +local atlas = require(cwd .. "atlas") +local Map = {} +Map.__index = Map + +local function new(map, plugins, ox, oy) + local dir = "" + + if type(map) == "table" then + map = setmetatable(map, Map) + else + -- Check for valid map type + local ext = map:sub(-4, -1) + assert(ext == ".lua", string.format( + "Invalid file type: %s. File must be of type: lua.", + ext + )) + + -- Get directory of map + dir = map:reverse():find("[/\\]") or "" + if dir ~= "" then + dir = map:sub(1, 1 + (#map - dir)) + end + + -- Load map + map = setmetatable(assert(love.filesystem.load(map))(), Map) + end + + map:init(dir, plugins, ox, oy) + + return map +end + +--- Instance a new map. +-- @param map Path to the map file or the map table itself +-- @param plugins A list of plugins to load +-- @param ox Offset of map on the X axis (in pixels) +-- @param oy Offset of map on the Y axis (in pixels) +-- @return table The loaded Map +function STI.__call(_, map, plugins, ox, oy) + return new(map, plugins, ox, oy) +end + +--- Flush image cache. +function STI:flush() + self.cache = {} +end + +--- Map object + +--- Instance a new map +-- @param path Path to the map file +-- @param plugins A list of plugins to load +-- @param ox Offset of map on the X axis (in pixels) +-- @param oy Offset of map on the Y axis (in pixels) +function Map:init(path, plugins, ox, oy) + if type(plugins) == "table" then + self:loadPlugins(plugins) + end + + self:resize() + self.objects = {} + self.tiles = {} + self.tileInstances = {} + self.offsetx = ox or 0 + self.offsety = oy or 0 + + self.freeBatchSprites = {} + setmetatable(self.freeBatchSprites, { __mode = 'k' }) + + -- Set tiles, images + local gid = 1 + for i, tileset in ipairs(self.tilesets) do + assert(not tileset.filename, "STI does not support external Tilesets.\nYou need to embed all Tilesets.") + + if tileset.image then + -- Cache images + if lg.isCreated then + local formatted_path = utils.format_path(path .. tileset.image) + + if not STI.cache[formatted_path] then + utils.fix_transparent_color(tileset, formatted_path) + utils.cache_image(STI, formatted_path, tileset.image) + else + tileset.image = STI.cache[formatted_path] + end + end + + gid = self:setTiles(i, tileset, gid) + elseif tileset.tilecount > 0 then + -- Build atlas for image collection + local files, ids = {}, {} + for j = 1, #tileset.tiles do + files[ j ] = utils.format_path(path .. tileset.tiles[j].image) + ids[ j ] = tileset.tiles[j].id + end + + local map = atlas.Atlas( files, "ids", ids ) + + if lg.isCreated then + local formatted_path = utils.format_path(path .. tileset.name) + + if not STI.cache[formatted_path] then + -- No need to fix transparency color for collections + utils.cache_image(STI, formatted_path, map.image) + tileset.image = map.image + else + tileset.image = STI.cache[formatted_path] + end + end + + gid = self:setAtlasTiles(i, tileset, map.coords, gid) + end + end + + local layers = {} + for _, layer in ipairs(self.layers) do + self:groupAppendToList(layers, layer) + end + self.layers = layers + + -- Set layers + for _, layer in ipairs(self.layers) do + self:setLayer(layer, path) + end +end + +--- Layers from the group are added to the list +-- @param layers List of layers +-- @param layer Layer data +function Map:groupAppendToList(layers, layer) + if layer.type == "group" then + for _, groupLayer in pairs(layer.layers) do + groupLayer.name = layer.name .. "." .. groupLayer.name + groupLayer.visible = layer.visible + groupLayer.opacity = layer.opacity * groupLayer.opacity + groupLayer.offsetx = layer.offsetx + groupLayer.offsetx + groupLayer.offsety = layer.offsety + groupLayer.offsety + + for key, property in pairs(layer.properties) do + if groupLayer.properties[key] == nil then + groupLayer.properties[key] = property + end + end + + self:groupAppendToList(layers, groupLayer) + end + else + table.insert(layers, layer) + end +end + +--- Load plugins +-- @param plugins A list of plugins to load +function Map:loadPlugins(plugins) + for _, plugin in ipairs(plugins) do + local pluginModulePath = cwd .. 'plugins.' .. plugin + local ok, pluginModule = pcall(require, pluginModulePath) + if ok then + for k, func in pairs(pluginModule) do + if not self[k] then + self[k] = func + end + end + end + end +end + +--- Create Tiles based on a single tileset image +-- @param index Index of the Tileset +-- @param tileset Tileset data +-- @param gid First Global ID in Tileset +-- @return number Next Tileset's first Global ID +function Map:setTiles(index, tileset, gid) + local quad = lg.newQuad + local imageW = tileset.imagewidth + local imageH = tileset.imageheight + local tileW = tileset.tilewidth + local tileH = tileset.tileheight + local margin = tileset.margin + local spacing = tileset.spacing + local w = utils.get_tiles(imageW, tileW, margin, spacing) + local h = utils.get_tiles(imageH, tileH, margin, spacing) + + for y = 1, h do + for x = 1, w do + local id = gid - tileset.firstgid + local quadX = (x - 1) * tileW + margin + (x - 1) * spacing + local quadY = (y - 1) * tileH + margin + (y - 1) * spacing + local type = "" + local properties, terrain, animation, objectGroup + + for _, tile in pairs(tileset.tiles) do + if tile.id == id then + properties = tile.properties + animation = tile.animation + objectGroup = tile.objectGroup + type = tile.type + + if tile.terrain then + terrain = {} + + for i = 1, #tile.terrain do + terrain[i] = tileset.terrains[tile.terrain[i] + 1] + end + end + end + end + + local tile = { + id = id, + gid = gid, + tileset = index, + type = type, + quad = quad( + quadX, quadY, + tileW, tileH, + imageW, imageH + ), + properties = properties or {}, + terrain = terrain, + animation = animation, + objectGroup = objectGroup, + frame = 1, + time = 0, + width = tileW, + height = tileH, + sx = 1, + sy = 1, + r = 0, + offset = tileset.tileoffset, + } + + self.tiles[gid] = tile + gid = gid + 1 + end + end + + return gid +end + +--- Create Tiles based on a texture atlas +-- @param index Index of the Tileset +-- @param tileset Tileset data +-- @param coords Tile XY location in the atlas +-- @param gid First Global ID in Tileset +-- @return number Next Tileset's first Global ID +function Map:setAtlasTiles(index, tileset, coords, gid) + local quad = lg.newQuad + local imageW = tileset.image:getWidth() + local imageH = tileset.image:getHeight() + + local firstgid = tileset.firstgid + for i = 1, #tileset.tiles do + local tile = tileset.tiles[i] + if tile.terrain then + terrain = {} + + for j = 1, #tile.terrain do + terrain[j] = tileset.terrains[tile.terrain[j] + 1] + end + end + + local tile = { + id = tile.id, + gid = firstgid + tile.id, + tileset = index, + class = tile.class, + quad = quad( + coords[i].x, coords[i].y, + tile.width, tile.height, + imageW, imageH + ), + properties = tile.properties or {}, + terrain = terrain, + animation = tile.animation, + objectGroup = tile.objectGroup, + frame = 1, + time = 0, + width = tile.width, + height = tile.height, + sx = 1, + sy = 1, + r = 0, + offset = tileset.tileoffset, + } + + -- Be aware that in collections self.tiles can be a sparse array + self.tiles[tile.gid] = tile + end + + return gid + #tileset.tiles +end + +--- Create Layers +-- @param layer Layer data +-- @param path (Optional) Path to an Image Layer's image +function Map:setLayer(layer, path) + if layer.encoding then + if layer.encoding == "base64" then + assert(require "ffi", "Compressed maps require LuaJIT FFI.\nPlease Switch your interperator to LuaJIT or your Tile Layer Format to \"CSV\".") + local fd = love.data.decode("string", "base64", layer.data) + + if not layer.compression then + layer.data = utils.get_decompressed_data(fd) + else + assert(love.data.decompress, "zlib and gzip compression require LOVE 11.0+.\nPlease set your Tile Layer Format to \"Base64 (uncompressed)\" or \"CSV\".") + + if layer.compression == "zlib" then + local data = love.data.decompress("string", "zlib", fd) + layer.data = utils.get_decompressed_data(data) + end + + if layer.compression == "gzip" then + local data = love.data.decompress("string", "gzip", fd) + layer.data = utils.get_decompressed_data(data) + end + end + end + end + + layer.x = (layer.x or 0) + layer.offsetx + self.offsetx + layer.y = (layer.y or 0) + layer.offsety + self.offsety + layer.update = function() end + + if layer.type == "tilelayer" then + self:setTileData(layer) + self:setSpriteBatches(layer) + layer.draw = function() self:drawTileLayer(layer) end + elseif layer.type == "objectgroup" then + self:setObjectData(layer) + self:setObjectCoordinates(layer) + self:setObjectSpriteBatches(layer) + layer.draw = function() self:drawObjectLayer(layer) end + elseif layer.type == "imagelayer" then + layer.draw = function() self:drawImageLayer(layer) end + + if layer.image ~= "" then + local formatted_path = utils.format_path(path .. layer.image) + if not STI.cache[formatted_path] then + utils.cache_image(STI, formatted_path) + end + + layer.image = STI.cache[formatted_path] + layer.width = layer.image:getWidth() + layer.height = layer.image:getHeight() + end + end + + self.layers[layer.name] = layer +end + +--- Add Tiles to Tile Layer +-- @param layer The Tile Layer +function Map:setTileData(layer) + if layer.chunks then + for _, chunk in ipairs(layer.chunks) do + self:setTileData(chunk) + end + return + end + + local i = 1 + local map = {} + + for y = 1, layer.height do + map[y] = {} + for x = 1, layer.width do + local gid = layer.data[i] + + -- NOTE: Empty tiles have a GID of 0 + if gid > 0 then + map[y][x] = self.tiles[gid] or self:setFlippedGID(gid) + end + + i = i + 1 + end + end + + layer.data = map +end + +--- Add Objects to Layer +-- @param layer The Object Layer +function Map:setObjectData(layer) + for _, object in ipairs(layer.objects) do + object.layer = layer + self.objects[object.id] = object + end +end + +--- Correct position and orientation of Objects in an Object Layer +-- @param layer The Object Layer +function Map:setObjectCoordinates(layer) + for _, object in ipairs(layer.objects) do + local x = layer.x + object.x + local y = layer.y + object.y + local w = object.width + local h = object.height + local cos = math.cos(math.rad(object.rotation)) + local sin = math.sin(math.rad(object.rotation)) + + if object.shape == "rectangle" and not object.gid then + object.rectangle = {} + + local vertices = { + { x=x, y=y }, + { x=x + w, y=y }, + { x=x + w, y=y + h }, + { x=x, y=y + h }, + } + + for _, vertex in ipairs(vertices) do + vertex.x, vertex.y = utils.rotate_vertex(self, vertex, x, y, cos, sin) + table.insert(object.rectangle, { x = vertex.x, y = vertex.y }) + end + elseif object.shape == "ellipse" then + object.ellipse = {} + local vertices = utils.convert_ellipse_to_polygon(x, y, w, h) + + for _, vertex in ipairs(vertices) do + vertex.x, vertex.y = utils.rotate_vertex(self, vertex, x, y, cos, sin) + table.insert(object.ellipse, { x = vertex.x, y = vertex.y }) + end + elseif object.shape == "polygon" then + for _, vertex in ipairs(object.polygon) do + vertex.x = vertex.x + x + vertex.y = vertex.y + y + vertex.x, vertex.y = utils.rotate_vertex(self, vertex, x, y, cos, sin) + end + elseif object.shape == "polyline" then + for _, vertex in ipairs(object.polyline) do + vertex.x = vertex.x + x + vertex.y = vertex.y + y + vertex.x, vertex.y = utils.rotate_vertex(self, vertex, x, y, cos, sin) + end + end + end +end + +--- Convert tile location to tile instance location +-- @param layer Tile layer +-- @param tile Tile +-- @param x Tile location on X axis (in tiles) +-- @param y Tile location on Y axis (in tiles) +-- @return number Tile instance location on X axis (in pixels) +-- @return number Tile instance location on Y axis (in pixels) +function Map:getLayerTilePosition(layer, tile, x, y) + local tileW = self.tilewidth + local tileH = self.tileheight + local tileX, tileY + + if self.orientation == "orthogonal" then + tileX = (x - 1) * tileW + tile.offset.x + tileY = (y - 0) * tileH + tile.offset.y - tile.height + tileX, tileY = utils.compensate(tile, tileX, tileY, tileW, tileH) + elseif self.orientation == "isometric" then + tileX = (x - y) * (tileW / 2) + tile.offset.x + layer.width * tileW / 2 - self.tilewidth / 2 + tileY = (x + y - 2) * (tileH / 2) + tile.offset.y + else + local sideLen = self.hexsidelength or 0 + if self.staggeraxis == "y" then + if self.staggerindex == "odd" then + if y % 2 == 0 then + tileX = (x - 1) * tileW + tileW / 2 + tile.offset.x + else + tileX = (x - 1) * tileW + tile.offset.x + end + else + if y % 2 == 0 then + tileX = (x - 1) * tileW + tile.offset.x + else + tileX = (x - 1) * tileW + tileW / 2 + tile.offset.x + end + end + + local rowH = tileH - (tileH - sideLen) / 2 + tileY = (y - 1) * rowH + tile.offset.y + else + if self.staggerindex == "odd" then + if x % 2 == 0 then + tileY = (y - 1) * tileH + tileH / 2 + tile.offset.y + else + tileY = (y - 1) * tileH + tile.offset.y + end + else + if x % 2 == 0 then + tileY = (y - 1) * tileH + tile.offset.y + else + tileY = (y - 1) * tileH + tileH / 2 + tile.offset.y + end + end + + local colW = tileW - (tileW - sideLen) / 2 + tileX = (x - 1) * colW + tile.offset.x + end + end + + return tileX, tileY +end + +--- Place new tile instance +-- @param layer Tile layer +-- @param chunk Layer chunk +-- @param tile Tile +-- @param number Tile location on X axis (in tiles) +-- @param number Tile location on Y axis (in tiles) +function Map:addNewLayerTile(layer, chunk, tile, x, y) + local tileset = tile.tileset + local image = self.tilesets[tile.tileset].image + local batches + local size + + if chunk then + batches = chunk.batches + size = chunk.width * chunk.height + else + batches = layer.batches + size = layer.width * layer.height + end + + batches[tileset] = batches[tileset] or lg.newSpriteBatch(image, size) + + local batch = batches[tileset] + local tileX, tileY = self:getLayerTilePosition(layer, tile, x, y) + + local instance = { + layer = layer, + chunk = chunk, + gid = tile.gid, + x = tileX, + y = tileY, + r = tile.r, + oy = 0 + } + + -- NOTE: STI can run headless so it is not guaranteed that a batch exists. + if batch then + instance.batch = batch + instance.id = batch:add(tile.quad, tileX, tileY, tile.r, tile.sx, tile.sy) + end + + self.tileInstances[tile.gid] = self.tileInstances[tile.gid] or {} + table.insert(self.tileInstances[tile.gid], instance) +end + +function Map:set_batches(layer, chunk) + if chunk then + chunk.batches = {} + else + layer.batches = {} + end + + if self.orientation == "orthogonal" or self.orientation == "isometric" then + local offsetX = chunk and chunk.x or 0 + local offsetY = chunk and chunk.y or 0 + + local startX = 1 + local startY = 1 + local endX = chunk and chunk.width or layer.width + local endY = chunk and chunk.height or layer.height + local incrementX = 1 + local incrementY = 1 + + -- Determine order to add tiles to sprite batch + -- Defaults to right-down + if self.renderorder == "right-up" then + startY, endY, incrementY = endY, startY, -1 + elseif self.renderorder == "left-down" then + startX, endX, incrementX = endX, startX, -1 + elseif self.renderorder == "left-up" then + startX, endX, incrementX = endX, startX, -1 + startY, endY, incrementY = endY, startY, -1 + end + + for y = startY, endY, incrementY do + for x = startX, endX, incrementX do + -- NOTE: Cannot short circuit this since it is valid for tile to be assigned nil + local tile + if chunk then + tile = chunk.data[y][x] + else + tile = layer.data[y][x] + end + + if tile then + self:addNewLayerTile(layer, chunk, tile, x + offsetX, y + offsetY) + end + end + end + else + if self.staggeraxis == "y" then + for y = 1, (chunk and chunk.height or layer.height) do + for x = 1, (chunk and chunk.width or layer.width) do + -- NOTE: Cannot short circuit this since it is valid for tile to be assigned nil + local tile + if chunk then + tile = chunk.data[y][x] + else + tile = layer.data[y][x] + end + + if tile then + self:addNewLayerTile(layer, chunk, tile, x, y) + end + end + end + else + local i = 0 + local _x + + if self.staggerindex == "odd" then + _x = 1 + else + _x = 2 + end + + while i < (chunk and chunk.width * chunk.height or layer.width * layer.height) do + for _y = 1, (chunk and chunk.height or layer.height) + 0.5, 0.5 do + local y = floor(_y) + + for x = _x, (chunk and chunk.width or layer.width), 2 do + i = i + 1 + + -- NOTE: Cannot short circuit this since it is valid for tile to be assigned nil + local tile + if chunk then + tile = chunk.data[y][x] + else + tile = layer.data[y][x] + end + + if tile then + self:addNewLayerTile(layer, chunk, tile, x, y) + end + end + + if _x == 1 then + _x = 2 + else + _x = 1 + end + end + end + end + end +end + +--- Batch Tiles in Tile Layer for improved draw speed +-- @param layer The Tile Layer +function Map:setSpriteBatches(layer) + if layer.chunks then + for _, chunk in ipairs(layer.chunks) do + self:set_batches(layer, chunk) + end + return + end + + self:set_batches(layer) +end + +--- Batch Tiles in Object Layer for improved draw speed +-- @param layer The Object Layer +function Map:setObjectSpriteBatches(layer) + local newBatch = lg.newSpriteBatch + local batches = {} + + if layer.draworder == "topdown" then + table.sort(layer.objects, function(a, b) + return a.y + a.height < b.y + b.height + end) + end + + for _, object in ipairs(layer.objects) do + if object.gid then + local tile = self.tiles[object.gid] or self:setFlippedGID(object.gid) + local tileset = tile.tileset + local image = self.tilesets[tileset].image + + batches[tileset] = batches[tileset] or newBatch(image) + + local sx = object.width / tile.width + local sy = object.height / tile.height + + -- Tiled rotates around bottom left corner, where love2D rotates around top left corner + local ox = 0 + local oy = tile.height + + local batch = batches[tileset] + local tileX = object.x + tile.offset.x + local tileY = object.y + tile.offset.y + local tileR = math.rad(object.rotation) + + -- Compensation for scale/rotation shift + if tile.sx == -1 then + tileX = tileX + object.width + + if tileR ~= 0 then + tileX = tileX - object.width + ox = ox + tile.width + end + end + + if tile.sy == -1 then + tileY = tileY - object.height + + if tileR ~= 0 then + tileY = tileY + object.width + oy = oy - tile.width + end + end + + local instance = { + id = batch:add(tile.quad, tileX, tileY, tileR, tile.sx * sx, tile.sy * sy, ox, oy), + batch = batch, + layer = layer, + gid = tile.gid, + x = tileX, + y = tileY - oy, + r = tileR, + oy = oy + } + + self.tileInstances[tile.gid] = self.tileInstances[tile.gid] or {} + table.insert(self.tileInstances[tile.gid], instance) + end + end + + layer.batches = batches +end + +--- Create a Custom Layer to place userdata in (such as player sprites) +-- @param name Name of Custom Layer +-- @param index Draw order within Layer stack +-- @return table Custom Layer +function Map:addCustomLayer(name, index) + index = index or #self.layers + 1 + local layer = { + type = "customlayer", + name = name, + visible = true, + opacity = 1, + properties = {}, + } + + function layer.draw() end + function layer.update() end + + table.insert(self.layers, index, layer) + self.layers[name] = self.layers[index] + + return layer +end + +--- Convert another Layer into a Custom Layer +-- @param index Index or name of Layer to convert +-- @return table Custom Layer +function Map:convertToCustomLayer(index) + local layer = assert(self.layers[index], "Layer not found: " .. index) + + layer.type = "customlayer" + layer.x = nil + layer.y = nil + layer.width = nil + layer.height = nil + layer.encoding = nil + layer.data = nil + layer.chunks = nil + layer.objects = nil + layer.image = nil + + function layer.draw() end + function layer.update() end + + return layer +end + +--- Remove a Layer from the Layer stack +-- @param index Index or name of Layer to remove +function Map:removeLayer(index) + local layer = assert(self.layers[index], "Layer not found: " .. index) + + if type(index) == "string" then + for i, l in ipairs(self.layers) do + if l.name == index then + table.remove(self.layers, i) + self.layers[index] = nil + break + end + end + else + local name = self.layers[index].name + table.remove(self.layers, index) + self.layers[name] = nil + end + + -- Remove layer batches + if layer.batches then + for _, batch in pairs(layer.batches) do + self.freeBatchSprites[batch] = nil + end + end + + -- Remove chunk batches + if layer.chunks then + for _, chunk in ipairs(layer.chunks) do + for _, batch in pairs(chunk.batches) do + self.freeBatchSprites[batch] = nil + end + end + end + + -- Remove tile instances + if layer.type == "tilelayer" then + for _, tiles in pairs(self.tileInstances) do + for i = #tiles, 1, -1 do + local tile = tiles[i] + if tile.layer == layer then + table.remove(tiles, i) + end + end + end + end + + -- Remove objects + if layer.objects then + for i, object in pairs(self.objects) do + if object.layer == layer then + self.objects[i] = nil + end + end + end +end + +--- Animate Tiles and update every Layer +-- @param dt Delta Time +function Map:update(dt) + for _, tile in pairs(self.tiles) do + local update = false + + if tile.animation then + tile.time = tile.time + dt * 1000 + + while tile.time > tonumber(tile.animation[tile.frame].duration) do + update = true + tile.time = tile.time - tonumber(tile.animation[tile.frame].duration) + tile.frame = tile.frame + 1 + + if tile.frame > #tile.animation then tile.frame = 1 end + end + + if update and self.tileInstances[tile.gid] then + for _, j in pairs(self.tileInstances[tile.gid]) do + local t = self.tiles[tonumber(tile.animation[tile.frame].tileid) + self.tilesets[tile.tileset].firstgid] + j.batch:set(j.id, t.quad, j.x, j.y, j.r, tile.sx, tile.sy, 0, j.oy) + end + end + end + end + + for _, layer in ipairs(self.layers) do + layer:update(dt) + end +end + +--- Draw every Layer +-- @param tx Translate on X +-- @param ty Translate on Y +-- @param sx Scale on X +-- @param sy Scale on Y +function Map:draw(tx, ty, sx, sy) + local current_canvas = lg.getCanvas() + lg.setCanvas(self.canvas) + lg.clear() + + -- Scale map to 1.0 to draw onto canvas, this fixes tearing issues + -- Map is translated to correct position so the right section is drawn + lg.push() + lg.origin() + + --[[ + This snippet comes from 'monolifed' on the Love2D forums, + however it was more or less exactly the same code I was already writing + to implement the same parallax scrolling. I found his before + testing and polishing mine + https://love2d.org/forums/viewtopic.php?p=238378#p238378 + + previous code commented below the new. + + ]] + + tx, ty = tx or 0, ty or 0 + + for _, layer in ipairs(self.layers) do + if layer.visible and layer.opacity > 0 then + local px, py = layer.parallaxx or 1, layer.parallaxy or 1 + px, py = math.floor(tx * px), math.floor(ty * py) + lg.translate(px, py) + self:drawLayer(layer) + lg.translate(-px, -py) + end + end + + --[[ + lg.translate(math.floor(tx or 0), math.floor(ty or 0)) + + for _, layer in ipairs(self.layers) do + if layer.visible and layer.opacity > 0 then + self:drawLayer(layer) + end + end + ]] + + lg.pop() + + -- Draw canvas at 0,0; this fixes scissoring issues + -- Map is scaled to correct scale so the right section is shown + lg.push() + lg.origin() + lg.scale(sx or 1, sy or sx or 1) + + lg.setCanvas(current_canvas) + lg.draw(self.canvas) + + lg.pop() +end + +--- Draw an individual Layer +-- @param layer The Layer to draw +function Map.drawLayer(_, layer) + local r,g,b,a = lg.getColor() + -- if the layer has a tintcolor set + if layer.tintcolor then + r, g, b, a = unpack(layer.tintcolor) + a = a or 255 -- alpha may not be specified + lg.setColor(r/255, g/255, b/255, a/255) -- Tiled uses 0-255 + -- if a tintcolor is not given just use the current color + else + lg.setColor(r, g, b, a * layer.opacity) + end + layer:draw() + lg.setColor(r,g,b,a) +end + +--- Default draw function for Tile Layers +-- @param layer The Tile Layer to draw +function Map:drawTileLayer(layer) + if type(layer) == "string" or type(layer) == "number" then + layer = self.layers[layer] + end + + assert(layer.type == "tilelayer", "Invalid layer type: " .. layer.type .. ". Layer must be of type: tilelayer") + + -- NOTE: This does not take into account any sort of draw range clipping and will always draw every chunk + if layer.chunks then + for _, chunk in ipairs(layer.chunks) do + for _, batch in pairs(chunk.batches) do + lg.draw(batch, 0, 0) + end + end + + return + end + + for _, batch in pairs(layer.batches) do + lg.draw(batch, floor(layer.x), floor(layer.y)) + end +end + +--- Default draw function for Object Layers +-- @param layer The Object Layer to draw +function Map:drawObjectLayer(layer) + if type(layer) == "string" or type(layer) == "number" then + layer = self.layers[layer] + end + + assert(layer.type == "objectgroup", "Invalid layer type: " .. layer.type .. ". Layer must be of type: objectgroup") + + local line = { 160, 160, 160, 255 * layer.opacity } + local fill = { 160, 160, 160, 255 * layer.opacity * 0.5 } + local r,g,b,a = lg.getColor() + local reset = { r, g, b, a * layer.opacity } + + local function sortVertices(obj) + local vertex = {} + + for _, v in ipairs(obj) do + table.insert(vertex, v.x) + table.insert(vertex, v.y) + end + + return vertex + end + + local function drawShape(obj, shape) + local vertex = sortVertices(obj) + + if shape == "polyline" then + lg.setColor(line) + lg.line(vertex) + return + elseif shape == "polygon" then + lg.setColor(fill) + if not love.math.isConvex(vertex) then + local triangles = love.math.triangulate(vertex) + for _, triangle in ipairs(triangles) do + lg.polygon("fill", triangle) + end + else + lg.polygon("fill", vertex) + end + else + lg.setColor(fill) + lg.polygon("fill", vertex) + end + + lg.setColor(line) + lg.polygon("line", vertex) + end + + for _, object in ipairs(layer.objects) do + if object.visible then + if object.shape == "rectangle" and not object.gid then + drawShape(object.rectangle, "rectangle") + elseif object.shape == "ellipse" then + drawShape(object.ellipse, "ellipse") + elseif object.shape == "polygon" then + drawShape(object.polygon, "polygon") + elseif object.shape == "polyline" then + drawShape(object.polyline, "polyline") + elseif object.shape == "point" then + lg.points(object.x, object.y) + end + end + end + + lg.setColor(reset) + for _, batch in pairs(layer.batches) do + lg.draw(batch, 0, 0) + end + lg.setColor(r,g,b,a) +end + +--- Default draw function for Image Layers +-- @param layer The Image Layer to draw +function Map:drawImageLayer(layer) + if type(layer) == "string" or type(layer) == "number" then + layer = self.layers[layer] + end + + assert(layer.type == "imagelayer", "Invalid layer type: " .. layer.type .. ". Layer must be of type: imagelayer") + + if layer.image ~= "" then + lg.draw(layer.image, layer.x, layer.y) + -- we need pixel sizes for drawing + local imagewidth, imageheight = layer.image:getDimensions() + -- if we're repeating on the Y axis... + if layer.repeaty then + local x = imagewidth + local y = imageheight + while y < self.height * self.tileheight do + lg.draw(layer.image, x, y) + -- if we are *also* repeating on X + if layer.repeatx then + x = x + imagewidth + while x < self.width * self.tilewidth do + lg.draw(layer.image, x, y) + x = x + imagewidth + end + end + y = y + imageheight + end + -- if we're repeating on X alone... + elseif layer.repeatx then + local x = imagewidth + while x < self.width * self.tilewidth do + lg.draw(layer.image, x, layer.y) + x = x + imagewidth + end + end + end +end + +--- Resize the drawable area of the Map +-- @param w The new width of the drawable area (in pixels) +-- @param h The new Height of the drawable area (in pixels) +function Map:resize(w, h) + if lg.isCreated then + w = w or lg.getWidth() + h = h or lg.getHeight() + + self.canvas = lg.newCanvas(w, h) + self.canvas:setFilter("nearest", "nearest") + end +end + +--- Create flipped or rotated Tiles based on bitop flags +-- @param gid The flagged Global ID +-- @return table Flipped Tile +function Map:setFlippedGID(gid) + local bit31 = 2147483648 + local bit30 = 1073741824 + local bit29 = 536870912 + local flipX = false + local flipY = false + local flipD = false + local realgid = gid + + if realgid >= bit31 then + realgid = realgid - bit31 + flipX = not flipX + end + + if realgid >= bit30 then + realgid = realgid - bit30 + flipY = not flipY + end + + if realgid >= bit29 then + realgid = realgid - bit29 + flipD = not flipD + end + + local tile = self.tiles[realgid] + local data = { + id = tile.id, + gid = gid, + tileset = tile.tileset, + frame = tile.frame, + time = tile.time, + width = tile.width, + height = tile.height, + offset = tile.offset, + quad = tile.quad, + properties = tile.properties, + terrain = tile.terrain, + animation = tile.animation, + sx = tile.sx, + sy = tile.sy, + r = tile.r, + } + + if flipX then + if flipY and flipD then + data.r = math.rad(-90) + data.sy = -1 + elseif flipY then + data.sx = -1 + data.sy = -1 + elseif flipD then + data.r = math.rad(90) + else + data.sx = -1 + end + elseif flipY then + if flipD then + data.r = math.rad(-90) + else + data.sy = -1 + end + elseif flipD then + data.r = math.rad(90) + data.sy = -1 + end + + self.tiles[gid] = data + + return self.tiles[gid] +end + +--- Get custom properties from Layer +-- @param layer The Layer +-- @return table List of properties +function Map:getLayerProperties(layer) + local l = self.layers[layer] + + if not l then + return {} + end + + return l.properties +end + +--- Get custom properties from Tile +-- @param layer The Layer that the Tile belongs to +-- @param x The X axis location of the Tile (in tiles) +-- @param y The Y axis location of the Tile (in tiles) +-- @return table List of properties +function Map:getTileProperties(layer, x, y) + local tile = self.layers[layer].data[y][x] + + if not tile then + return {} + end + + return tile.properties +end + +--- Get custom properties from Object +-- @param layer The Layer that the Object belongs to +-- @param object The index or name of the Object +-- @return table List of properties +function Map:getObjectProperties(layer, object) + local o = self.layers[layer].objects + + if type(object) == "number" then + o = o[object] + else + for _, v in ipairs(o) do + if v.name == object then + o = v + break + end + end + end + + if not o then + return {} + end + + return o.properties +end + +--- Change a tile in a layer to another tile +-- @param layer The Layer that the Tile belongs to +-- @param x The X axis location of the Tile (in tiles) +-- @param y The Y axis location of the Tile (in tiles) +-- @param gid The gid of the new tile +function Map:setLayerTile(layer, x, y, gid) + layer = self.layers[layer] + + layer.data[y] = layer.data[y] or {} + local tile = layer.data[y][x] + local instance + if tile then + local tileX, tileY = self:getLayerTilePosition(layer, tile, x, y) + for _, inst in pairs(self.tileInstances[tile.gid]) do + if inst.x == tileX and inst.y == tileY then + instance = inst + break + end + end + end + + if tile == self.tiles[gid] then + return + end + + tile = self.tiles[gid] + + if instance then + self:swapTile(instance, tile) + else + self:addNewLayerTile(layer, tile, x, y) + end + layer.data[y][x] = tile +end + +--- Swap a tile in a spritebatch +-- @param instance The current Instance object we want to replace +-- @param tile The Tile object we want to use +-- @return none +function Map:swapTile(instance, tile) + -- Update sprite batch + if instance.batch then + if tile then + instance.batch:set( + instance.id, + tile.quad, + instance.x, + instance.y, + tile.r, + tile.sx, + tile.sy + ) + else + instance.batch:set( + instance.id, + instance.x, + instance.y, + 0, + 0) + + self.freeBatchSprites[instance.batch] = self.freeBatchSprites[instance.batch] or {} + table.insert(self.freeBatchSprites[instance.batch], instance) + end + end + + -- Remove old tile instance + for i, ins in ipairs(self.tileInstances[instance.gid]) do + if ins.batch == instance.batch and ins.id == instance.id then + table.remove(self.tileInstances[instance.gid], i) + break + end + end + + -- Add new tile instance + if tile then + self.tileInstances[tile.gid] = self.tileInstances[tile.gid] or {} + + local freeBatchSprites = self.freeBatchSprites[instance.batch] + local newInstance + if freeBatchSprites and #freeBatchSprites > 0 then + newInstance = freeBatchSprites[#freeBatchSprites] + freeBatchSprites[#freeBatchSprites] = nil + else + newInstance = {} + end + + newInstance.layer = instance.layer + newInstance.batch = instance.batch + newInstance.id = instance.id + newInstance.gid = tile.gid or 0 + newInstance.x = instance.x + newInstance.y = instance.y + newInstance.r = tile.r or 0 + newInstance.oy = tile.r ~= 0 and tile.height or 0 + table.insert(self.tileInstances[tile.gid], newInstance) + end +end + +--- Convert tile location to pixel location +-- @param x The X axis location of the point (in tiles) +-- @param y The Y axis location of the point (in tiles) +-- @return number The X axis location of the point (in pixels) +-- @return number The Y axis location of the point (in pixels) +function Map:convertTileToPixel(x,y) + if self.orientation == "orthogonal" then + local tileW = self.tilewidth + local tileH = self.tileheight + return + x * tileW, + y * tileH + elseif self.orientation == "isometric" then + local mapH = self.height + local tileW = self.tilewidth + local tileH = self.tileheight + local offsetX = mapH * tileW / 2 + return + (x - y) * tileW / 2 + offsetX, + (x + y) * tileH / 2 + elseif self.orientation == "staggered" or + self.orientation == "hexagonal" then + local tileW = self.tilewidth + local tileH = self.tileheight + local sideLen = self.hexsidelength or 0 + + if self.staggeraxis == "x" then + return + x * tileW, + ceil(y) * (tileH + sideLen) + (ceil(y) % 2 == 0 and tileH or 0) + else + return + ceil(x) * (tileW + sideLen) + (ceil(x) % 2 == 0 and tileW or 0), + y * tileH + end + end +end + +--- Convert pixel location to tile location +-- @param x The X axis location of the point (in pixels) +-- @param y The Y axis location of the point (in pixels) +-- @return number The X axis location of the point (in tiles) +-- @return number The Y axis location of the point (in tiles) +function Map:convertPixelToTile(x, y) + if self.orientation == "orthogonal" then + local tileW = self.tilewidth + local tileH = self.tileheight + return + x / tileW, + y / tileH + elseif self.orientation == "isometric" then + local mapH = self.height + local tileW = self.tilewidth + local tileH = self.tileheight + local offsetX = mapH * tileW / 2 + return + y / tileH + (x - offsetX) / tileW, + y / tileH - (x - offsetX) / tileW + elseif self.orientation == "staggered" then + local staggerX = self.staggeraxis == "x" + local even = self.staggerindex == "even" + + local function topLeft(x, y) + if staggerX then + if ceil(x) % 2 == 1 and even then + return x - 1, y + else + return x - 1, y - 1 + end + else + if ceil(y) % 2 == 1 and even then + return x, y - 1 + else + return x - 1, y - 1 + end + end + end + + local function topRight(x, y) + if staggerX then + if ceil(x) % 2 == 1 and even then + return x + 1, y + else + return x + 1, y - 1 + end + else + if ceil(y) % 2 == 1 and even then + return x + 1, y - 1 + else + return x, y - 1 + end + end + end + + local function bottomLeft(x, y) + if staggerX then + if ceil(x) % 2 == 1 and even then + return x - 1, y + 1 + else + return x - 1, y + end + else + if ceil(y) % 2 == 1 and even then + return x, y + 1 + else + return x - 1, y + 1 + end + end + end + + local function bottomRight(x, y) + if staggerX then + if ceil(x) % 2 == 1 and even then + return x + 1, y + 1 + else + return x + 1, y + end + else + if ceil(y) % 2 == 1 and even then + return x + 1, y + 1 + else + return x, y + 1 + end + end + end + + local tileW = self.tilewidth + local tileH = self.tileheight + + if staggerX then + x = x - (even and tileW / 2 or 0) + else + y = y - (even and tileH / 2 or 0) + end + + local halfH = tileH / 2 + local ratio = tileH / tileW + local referenceX = ceil(x / tileW) + local referenceY = ceil(y / tileH) + local relativeX = x - referenceX * tileW + local relativeY = y - referenceY * tileH + + if (halfH - relativeX * ratio > relativeY) then + return topLeft(referenceX, referenceY) + elseif (-halfH + relativeX * ratio > relativeY) then + return topRight(referenceX, referenceY) + elseif (halfH + relativeX * ratio < relativeY) then + return bottomLeft(referenceX, referenceY) + elseif (halfH * 3 - relativeX * ratio < relativeY) then + return bottomRight(referenceX, referenceY) + end + + return referenceX, referenceY + elseif self.orientation == "hexagonal" then + local staggerX = self.staggeraxis == "x" + local even = self.staggerindex == "even" + local tileW = self.tilewidth + local tileH = self.tileheight + local sideLenX = 0 + local sideLenY = 0 + + local colW = tileW / 2 + local rowH = tileH / 2 + if staggerX then + sideLenX = self.hexsidelength + x = x - (even and tileW or (tileW - sideLenX) / 2) + colW = colW - (colW - sideLenX / 2) / 2 + else + sideLenY = self.hexsidelength + y = y - (even and tileH or (tileH - sideLenY) / 2) + rowH = rowH - (rowH - sideLenY / 2) / 2 + end + + local referenceX = ceil(x) / (colW * 2) + local referenceY = ceil(y) / (rowH * 2) + + -- If in staggered line, then shift reference by 0.5 of other axes + if staggerX then + if (floor(referenceX) % 2 == 0) == even then + referenceY = referenceY - 0.5 + end + else + if (floor(referenceY) % 2 == 0) == even then + referenceX = referenceX - 0.5 + end + end + + local relativeX = x - referenceX * colW * 2 + local relativeY = y - referenceY * rowH * 2 + local centers + + if staggerX then + local left = sideLenX / 2 + local centerX = left + colW + local centerY = tileH / 2 + + centers = { + { x = left, y = centerY }, + { x = centerX, y = centerY - rowH }, + { x = centerX, y = centerY + rowH }, + { x = centerX + colW, y = centerY }, + } + else + local top = sideLenY / 2 + local centerX = tileW / 2 + local centerY = top + rowH + + centers = { + { x = centerX, y = top }, + { x = centerX - colW, y = centerY }, + { x = centerX + colW, y = centerY }, + { x = centerX, y = centerY + rowH } + } + end + + local nearest = 0 + local minDist = math.huge + + local function len2(ax, ay) + return ax * ax + ay * ay + end + + for i = 1, 4 do + local dc = len2(centers[i].x - relativeX, centers[i].y - relativeY) + + if dc < minDist then + minDist = dc + nearest = i + end + end + + local offsetsStaggerX = { + { x = 1, y = 1 }, + { x = 2, y = 0 }, + { x = 2, y = 1 }, + { x = 3, y = 1 }, + } + + local offsetsStaggerY = { + { x = 1, y = 1 }, + { x = 0, y = 2 }, + { x = 1, y = 2 }, + { x = 1, y = 3 }, + } + + local offsets = staggerX and offsetsStaggerX or offsetsStaggerY + + return + referenceX + offsets[nearest].x, + referenceY + offsets[nearest].y + end +end + +--- A list of individual layers indexed both by draw order and name +-- @table Map.layers +-- @see TileLayer +-- @see ObjectLayer +-- @see ImageLayer +-- @see CustomLayer + +--- A list of individual tiles indexed by Global ID +-- @table Map.tiles +-- @see Tile +-- @see Map.tileInstances + +--- A list of tile instances indexed by Global ID +-- @table Map.tileInstances +-- @see TileInstance +-- @see Tile +-- @see Map.tiles + +--- A list of no-longer-used batch sprites, indexed by batch +--@table Map.freeBatchSprites + +--- A list of individual objects indexed by Global ID +-- @table Map.objects +-- @see Object + +--- @table TileLayer +-- @field name The name of the layer +-- @field x Position on the X axis (in pixels) +-- @field y Position on the Y axis (in pixels) +-- @field width Width of layer (in tiles) +-- @field height Height of layer (in tiles) +-- @field visible Toggle if layer is visible or hidden +-- @field opacity Opacity of layer +-- @field properties Custom properties +-- @field data A tileWo dimensional table filled with individual tiles indexed by [y][x] (in tiles) +-- @field update Update function +-- @field draw Draw function +-- @see Map.layers +-- @see Tile + +--- @table ObjectLayer +-- @field name The name of the layer +-- @field x Position on the X axis (in pixels) +-- @field y Position on the Y axis (in pixels) +-- @field visible Toggle if layer is visible or hidden +-- @field opacity Opacity of layer +-- @field properties Custom properties +-- @field objects List of objects indexed by draw order +-- @field update Update function +-- @field draw Draw function +-- @see Map.layers +-- @see Object + +--- @table ImageLayer +-- @field name The name of the layer +-- @field x Position on the X axis (in pixels) +-- @field y Position on the Y axis (in pixels) +-- @field visible Toggle if layer is visible or hidden +-- @field opacity Opacity of layer +-- @field properties Custom properties +-- @field image Image to be drawn +-- @field update Update function +-- @field draw Draw function +-- @see Map.layers + +--- Custom Layers are used to place userdata such as sprites within the draw order of the map. +-- @table CustomLayer +-- @field name The name of the layer +-- @field x Position on the X axis (in pixels) +-- @field y Position on the Y axis (in pixels) +-- @field visible Toggle if layer is visible or hidden +-- @field opacity Opacity of layer +-- @field properties Custom properties +-- @field update Update function +-- @field draw Draw function +-- @see Map.layers +-- @usage +-- -- Create a Custom Layer +-- local spriteLayer = map:addCustomLayer("Sprite Layer", 3) +-- +-- -- Add data to Custom Layer +-- spriteLayer.sprites = { +-- player = { +-- image = lg.newImage("assets/sprites/player.png"), +-- x = 64, +-- y = 64, +-- r = 0, +-- } +-- } +-- +-- -- Update callback for Custom Layer +-- function spriteLayer:update(dt) +-- for _, sprite in pairs(self.sprites) do +-- sprite.r = sprite.r + math.rad(90 * dt) +-- end +-- end +-- +-- -- Draw callback for Custom Layer +-- function spriteLayer:draw() +-- for _, sprite in pairs(self.sprites) do +-- local x = math.floor(sprite.x) +-- local y = math.floor(sprite.y) +-- local r = sprite.r +-- lg.draw(sprite.image, x, y, r) +-- end +-- end + +--- @table Tile +-- @field id Local ID within Tileset +-- @field gid Global ID +-- @field tileset Tileset ID +-- @field quad Quad object +-- @field properties Custom properties +-- @field terrain Terrain data +-- @field animation Animation data +-- @field frame Current animation frame +-- @field time Time spent on current animation frame +-- @field width Width of tile +-- @field height Height of tile +-- @field sx Scale value on the X axis +-- @field sy Scale value on the Y axis +-- @field r Rotation of tile (in radians) +-- @field offset Offset drawing position +-- @field offset.x Offset value on the X axis +-- @field offset.y Offset value on the Y axis +-- @see Map.tiles + +--- @table TileInstance +-- @field batch Spritebatch the Tile Instance belongs to +-- @field id ID within the spritebatch +-- @field gid Global ID +-- @field x Position on the X axis (in pixels) +-- @field y Position on the Y axis (in pixels) +-- @see Map.tileInstances +-- @see Tile + +--- @table Object +-- @field id Global ID +-- @field name Name of object (non-unique) +-- @field shape Shape of object +-- @field x Position of object on X axis (in pixels) +-- @field y Position of object on Y axis (in pixels) +-- @field width Width of object (in pixels) +-- @field height Heigh tof object (in pixels) +-- @field rotation Rotation of object (in radians) +-- @field visible Toggle if object is visible or hidden +-- @field properties Custom properties +-- @field ellipse List of verticies of specific shape +-- @field rectangle List of verticies of specific shape +-- @field polygon List of verticies of specific shape +-- @field polyline List of verticies of specific shape +-- @see Map.objects + +return setmetatable({}, STI) diff --git a/libraries/sti/plugins/box2d.lua b/libraries/sti/plugins/box2d.lua new file mode 100644 index 0000000..c6d4148 --- /dev/null +++ b/libraries/sti/plugins/box2d.lua @@ -0,0 +1,323 @@ +--- Box2D plugin for STI +-- @module box2d +-- @author Landon Manning +-- @copyright 2019 +-- @license MIT/X11 + +local love = _G.love +local utils = require((...):gsub('plugins.box2d', 'utils')) +local lg = require((...):gsub('plugins.box2d', 'graphics')) + +return { + box2d_LICENSE = "MIT/X11", + box2d_URL = "https://github.com/karai17/Simple-Tiled-Implementation", + box2d_VERSION = "2.3.2.7", + box2d_DESCRIPTION = "Box2D hooks for STI.", + + --- Initialize Box2D physics world. + -- @param world The Box2D world to add objects to. + box2d_init = function(map, world) + assert(love.physics, "To use the Box2D plugin, please enable the love.physics module.") + + local body = love.physics.newBody(world, map.offsetx, map.offsety) + local collision = { + body = body, + } + + local function addObjectToWorld(objshape, vertices, userdata, object) + local shape + + if objshape == "polyline" then + if #vertices == 4 then + shape = love.physics.newEdgeShape(unpack(vertices)) + else + shape = love.physics.newChainShape(false, unpack(vertices)) + end + else + shape = love.physics.newPolygonShape(unpack(vertices)) + end + + local currentBody = body + --dynamic are objects/players etc. + if userdata.properties.dynamic == true then + currentBody = love.physics.newBody(world, map.offsetx, map.offsety, 'dynamic') + -- static means it shouldn't move. Things like walls/ground. + elseif userdata.properties.static == true then + currentBody = love.physics.newBody(world, map.offsetx, map.offsety, 'static') + -- kinematic means that the object is static in the game world but effects other bodies + elseif userdata.properties.kinematic == true then + currentBody = love.physics.newBody(world, map.offsetx, map.offsety, 'kinematic') + end + + local fixture = love.physics.newFixture(currentBody, shape) + fixture:setUserData(userdata) + + -- Set some custom properties from userdata (or use default set by box2d) + fixture:setFriction(userdata.properties.friction or 0.2) + fixture:setRestitution(userdata.properties.restitution or 0.0) + fixture:setSensor(userdata.properties.sensor or false) + fixture:setFilterData( + userdata.properties.categories or 1, + userdata.properties.mask or 65535, + userdata.properties.group or 0 + ) + + local obj = { + object = object, + body = currentBody, + shape = shape, + fixture = fixture, + } + + table.insert(collision, obj) + end + + local function getPolygonVertices(object) + local vertices = {} + for _, vertex in ipairs(object.polygon) do + table.insert(vertices, vertex.x) + table.insert(vertices, vertex.y) + end + + return vertices + end + + local function calculateObjectPosition(object, tile) + local o = { + shape = object.shape, + x = (object.dx or object.x) + map.offsetx, + y = (object.dy or object.y) + map.offsety, + w = object.width, + h = object.height, + polygon = object.polygon or object.polyline or object.ellipse or object.rectangle + } + + local userdata = { + object = o, + properties = object.properties + } + + o.r = object.rotation or 0 + if o.shape == "rectangle" then + local cos = math.cos(math.rad(o.r)) + local sin = math.sin(math.rad(o.r)) + local oy = 0 + + if object.gid then + local tileset = map.tilesets[map.tiles[object.gid].tileset] + local lid = object.gid - tileset.firstgid + local t = {} + + -- This fixes a height issue + o.y = o.y + map.tiles[object.gid].offset.y + oy = o.h + + for _, tt in ipairs(tileset.tiles) do + if tt.id == lid then + t = tt + break + end + end + + if t.objectGroup then + for _, obj in ipairs(t.objectGroup.objects) do + -- Every object in the tile + calculateObjectPosition(obj, object) + end + + return + else + o.w = map.tiles[object.gid].width + o.h = map.tiles[object.gid].height + end + end + + o.polygon = { + { x=o.x+0, y=o.y+0 }, + { x=o.x+o.w, y=o.y+0 }, + { x=o.x+o.w, y=o.y+o.h }, + { x=o.x+0, y=o.y+o.h } + } + + for _, vertex in ipairs(o.polygon) do + vertex.x, vertex.y = utils.rotate_vertex(map, vertex, o.x, o.y, cos, sin, oy) + end + + local vertices = getPolygonVertices(o) + addObjectToWorld(o.shape, vertices, userdata, tile or object) + elseif o.shape == "ellipse" then + if not o.polygon then + o.polygon = utils.convert_ellipse_to_polygon(o.x, o.y, o.w, o.h) + end + local vertices = getPolygonVertices(o) + local triangles = love.math.triangulate(vertices) + + for _, triangle in ipairs(triangles) do + addObjectToWorld(o.shape, triangle, userdata, tile or object) + end + elseif o.shape == "polygon" then + -- Recalculate collision polygons inside tiles + if tile then + local cos = math.cos(math.rad(o.r)) + local sin = math.sin(math.rad(o.r)) + for _, vertex in ipairs(o.polygon) do + vertex.x = vertex.x + o.x + vertex.y = vertex.y + o.y + vertex.x, vertex.y = utils.rotate_vertex(map, vertex, o.x, o.y, cos, sin) + end + end + + local vertices = getPolygonVertices(o) + local triangles = love.math.triangulate(vertices) + + for _, triangle in ipairs(triangles) do + addObjectToWorld(o.shape, triangle, userdata, tile or object) + end + elseif o.shape == "polyline" then + local vertices = getPolygonVertices(o) + addObjectToWorld(o.shape, vertices, userdata, tile or object) + end + end + + for _, tile in pairs(map.tiles) do + if map.tileInstances[tile.gid] then + for _, instance in ipairs(map.tileInstances[tile.gid]) do + -- Every object in every instance of a tile + if tile.objectGroup then + for _, object in ipairs(tile.objectGroup.objects) do + if object.properties.collidable == true then + object = utils.deepCopy(object) + object.dx = instance.x + object.x + object.dy = instance.y + object.y + calculateObjectPosition(object, instance) + end + end + end + + -- Every instance of a tile + if tile.properties.collidable == true then + local object = { + shape = "rectangle", + x = instance.x, + y = instance.y, + width = map.tilewidth, + height = map.tileheight, + properties = tile.properties + } + + calculateObjectPosition(object, instance) + end + end + end + end + + for _, layer in ipairs(map.layers) do + -- Entire layer + if layer.properties.collidable == true then + if layer.type == "tilelayer" then + for gid, tiles in pairs(map.tileInstances) do + local tile = map.tiles[gid] + local tileset = map.tilesets[tile.tileset] + + for _, instance in ipairs(tiles) do + if instance.layer == layer then + local object = { + shape = "rectangle", + x = instance.x, + y = instance.y, + width = tileset.tilewidth, + height = tileset.tileheight, + properties = tile.properties + } + + calculateObjectPosition(object, instance) + end + end + end + elseif layer.type == "objectgroup" then + for _, object in ipairs(layer.objects) do + calculateObjectPosition(object) + end + elseif layer.type == "imagelayer" then + local object = { + shape = "rectangle", + x = layer.x or 0, + y = layer.y or 0, + width = layer.width, + height = layer.height, + properties = layer.properties + } + + calculateObjectPosition(object) + end + end + + -- Individual objects + if layer.type == "objectgroup" then + for _, object in ipairs(layer.objects) do + if object.properties.collidable == true then + calculateObjectPosition(object) + end + end + end + end + + map.box2d_collision = collision + end, + + --- Remove Box2D fixtures and shapes from world. + -- @param index The index or name of the layer being removed + box2d_removeLayer = function(map, index) + local layer = assert(map.layers[index], "Layer not found: " .. index) + local collision = map.box2d_collision + + -- Remove collision objects + for i = #collision, 1, -1 do + local obj = collision[i] + + if obj.object.layer == layer then + obj.fixture:destroy() + table.remove(collision, i) + end + end + end, + + --- Draw Box2D physics world. + -- @param tx Translate on X + -- @param ty Translate on Y + -- @param sx Scale on X + -- @param sy Scale on Y + box2d_draw = function(map, tx, ty, sx, sy) + local collision = map.box2d_collision + + lg.push() + lg.scale(sx or 1, sy or sx or 1) + lg.translate(math.floor(tx or 0), math.floor(ty or 0)) + + for _, obj in ipairs(collision) do + local points = {obj.body:getWorldPoints(obj.shape:getPoints())} + local shape_type = obj.shape:getType() + + if shape_type == "edge" or shape_type == "chain" then + love.graphics.line(points) + elseif shape_type == "polygon" then + love.graphics.polygon("line", points) + else + error("sti box2d plugin does not support "..shape_type.." shapes") + end + end + + lg.pop() + end +} + +--- Custom Properties in Tiled are used to tell this plugin what to do. +-- @table Properties +-- @field collidable set to true, can be used on any Layer, Tile, or Object +-- @field sensor set to true, can be used on any Tile or Object that is also collidable +-- @field dynamic set to true, can be used on any Tile or Object +-- @field friction can be used to define the friction of any Object +-- @field restitution can be used to define the restitution of any Object +-- @field categories can be used to set the filter Category of any Object +-- @field mask can be used to set the filter Mask of any Object +-- @field group can be used to set the filter Group of any Object diff --git a/libraries/sti/plugins/bump.lua b/libraries/sti/plugins/bump.lua new file mode 100644 index 0000000..1d4b828 --- /dev/null +++ b/libraries/sti/plugins/bump.lua @@ -0,0 +1,193 @@ +--- Bump.lua plugin for STI +-- @module bump.lua +-- @author David Serrano (BobbyJones|FrenchFryLord) +-- @copyright 2019 +-- @license MIT/X11 + +local lg = require((...):gsub('plugins.bump', 'graphics')) + +return { + bump_LICENSE = "MIT/X11", + bump_URL = "https://github.com/karai17/Simple-Tiled-Implementation", + bump_VERSION = "3.1.7.1", + bump_DESCRIPTION = "Bump hooks for STI.", + + --- Adds each collidable tile to the Bump world. + -- @param world The Bump world to add objects to. + -- @return collidables table containing the handles to the objects in the Bump world. + bump_init = function(map, world) + local collidables = {} + + for _, tileset in ipairs(map.tilesets) do + for _, tile in ipairs(tileset.tiles) do + local gid = tileset.firstgid + tile.id + + if map.tileInstances[gid] then + for _, instance in ipairs(map.tileInstances[gid]) do + -- Every object in every instance of a tile + if tile.objectGroup then + for _, object in ipairs(tile.objectGroup.objects) do + if object.properties.collidable == true then + local t = { + name = object.name, + type = object.type, + x = instance.x + map.offsetx + object.x, + y = instance.y + map.offsety + object.y, + width = object.width, + height = object.height, + layer = instance.layer, + properties = object.properties + + } + + world:add(t, t.x, t.y, t.width, t.height) + table.insert(collidables, t) + end + end + end + + -- Every instance of a tile + if tile.properties and tile.properties.collidable == true then + local t = { + x = instance.x + map.offsetx, + y = instance.y + map.offsety, + width = map.tilewidth, + height = map.tileheight, + layer = instance.layer, + type = tile.type, + properties = tile.properties + } + + world:add(t, t.x, t.y, t.width, t.height) + table.insert(collidables, t) + end + end + end + end + end + + for _, layer in ipairs(map.layers) do + -- Entire layer + if layer.properties.collidable == true then + if layer.type == "tilelayer" then + for y, tiles in ipairs(layer.data) do + for x, tile in pairs(tiles) do + + if tile.objectGroup then + for _, object in ipairs(tile.objectGroup.objects) do + if object.properties.collidable == true then + local t = { + name = object.name, + type = object.type, + x = ((x-1) * map.tilewidth + tile.offset.x + map.offsetx) + object.x, + y = ((y-1) * map.tileheight + tile.offset.y + map.offsety) + object.y, + width = object.width, + height = object.height, + layer = layer, + properties = object.properties + } + + world:add(t, t.x, t.y, t.width, t.height) + table.insert(collidables, t) + end + end + end + + + local t = { + x = (x-1) * map.tilewidth + tile.offset.x + map.offsetx, + y = (y-1) * map.tileheight + tile.offset.y + map.offsety, + width = tile.width, + height = tile.height, + layer = layer, + type = tile.type, + properties = tile.properties + } + + world:add(t, t.x, t.y, t.width, t.height) + table.insert(collidables, t) + end + end + elseif layer.type == "imagelayer" then + world:add(layer, layer.x, layer.y, layer.width, layer.height) + table.insert(collidables, layer) + end + end + + -- individual collidable objects in a layer that is not "collidable" + -- or whole collidable objects layer + if layer.type == "objectgroup" then + for _, obj in ipairs(layer.objects) do + if layer.properties.collidable == true or obj.properties.collidable == true then + if obj.shape == "rectangle" then + local t = { + name = obj.name, + type = obj.type, + x = obj.x + map.offsetx, + y = obj.y + map.offsety, + width = obj.width, + height = obj.height, + layer = layer, + properties = obj.properties + } + + if obj.gid then + t.y = t.y - obj.height + end + + world:add(t, t.x, t.y, t.width, t.height) + table.insert(collidables, t) + end -- TODO implement other object shapes? + end + end + end + end + + map.bump_world = world + map.bump_collidables = collidables + end, + + --- Remove layer + -- @param index to layer to be removed + bump_removeLayer = function(map, index) + local layer = assert(map.layers[index], "Layer not found: " .. index) + local collidables = map.bump_collidables + + -- Remove collision objects + for i = #collidables, 1, -1 do + local obj = collidables[i] + + if obj.layer == layer + and ( + layer.properties.collidable == true + or obj.properties.collidable == true + ) then + map.bump_world:remove(obj) + table.remove(collidables, i) + end + end + end, + + --- Draw bump collisions world. + -- @param world bump world holding the tiles geometry + -- @param tx Translate on X + -- @param ty Translate on Y + -- @param sx Scale on X + -- @param sy Scale on Y + bump_draw = function(map, tx, ty, sx, sy) + lg.push() + lg.scale(sx or 1, sy or sx or 1) + lg.translate(math.floor(tx or 0), math.floor(ty or 0)) + + local items = map.bump_world:getItems() + for _, item in ipairs(items) do + lg.rectangle("line", map.bump_world:getRect(item)) + end + + lg.pop() + end +} + +--- Custom Properties in Tiled are used to tell this plugin what to do. +-- @table Properties +-- @field collidable set to true, can be used on any Layer, Tile, or Object diff --git a/libraries/sti/utils.lua b/libraries/sti/utils.lua new file mode 100644 index 0000000..95e857a --- /dev/null +++ b/libraries/sti/utils.lua @@ -0,0 +1,217 @@ +-- Some utility functions that shouldn't be exposed. +local utils = {} + +-- https://github.com/stevedonovan/Penlight/blob/master/lua/pl/path.lua#L286 +function utils.format_path(path) + local np_gen1,np_gen2 = '[^SEP]+SEP%.%.SEP?','SEP+%.?SEP' + local np_pat1, np_pat2 = np_gen1:gsub('SEP','/'), np_gen2:gsub('SEP','/') + local k + + repeat -- /./ -> / + path,k = path:gsub(np_pat2,'/',1) + until k == 0 + + repeat -- A/../ -> (empty) + path,k = path:gsub(np_pat1,'',1) + until k == 0 + + if path == '' then path = '.' end + + return path +end + +-- Compensation for scale/rotation shift +function utils.compensate(tile, tileX, tileY, tileW, tileH) + local compx = 0 + local compy = 0 + + if tile.sx < 0 then compx = tileW end + if tile.sy < 0 then compy = tileH end + + if tile.r > 0 then + tileX = tileX + tileH - compy + tileY = tileY + tileH + compx - tileW + elseif tile.r < 0 then + tileX = tileX + compy + tileY = tileY - compx + tileH + else + tileX = tileX + compx + tileY = tileY + compy + end + + return tileX, tileY +end + +-- Cache images in main STI module +function utils.cache_image(sti, path, image) + image = image or love.graphics.newImage(path) + image:setFilter("nearest", "nearest") + sti.cache[path] = image +end + +-- We just don't know. +function utils.get_tiles(imageW, tileW, margin, spacing) + imageW = imageW - margin + local n = 0 + + while imageW >= tileW do + imageW = imageW - tileW + if n ~= 0 then imageW = imageW - spacing end + if imageW >= 0 then n = n + 1 end + end + + return n +end + +-- Decompress tile layer data +function utils.get_decompressed_data(data) + local ffi = require "ffi" + local d = {} + local decoded = ffi.cast("uint32_t*", data) + + for i = 0, data:len() / ffi.sizeof("uint32_t") do + table.insert(d, tonumber(decoded[i])) + end + + return d +end + +-- Convert a Tiled ellipse object to a LOVE polygon +function utils.convert_ellipse_to_polygon(x, y, w, h, max_segments) + local ceil = math.ceil + local cos = math.cos + local sin = math.sin + + local function calc_segments(segments) + local function vdist(a, b) + local c = { + x = a.x - b.x, + y = a.y - b.y, + } + + return c.x * c.x + c.y * c.y + end + + segments = segments or 64 + local vertices = {} + + local v = { 1, 2, ceil(segments/4-1), ceil(segments/4) } + + local m + if love and love.physics then + m = love.physics.getMeter() + else + m = 32 + end + + for _, i in ipairs(v) do + local angle = (i / segments) * math.pi * 2 + local px = x + w / 2 + cos(angle) * w / 2 + local py = y + h / 2 + sin(angle) * h / 2 + + table.insert(vertices, { x = px / m, y = py / m }) + end + + local dist1 = vdist(vertices[1], vertices[2]) + local dist2 = vdist(vertices[3], vertices[4]) + + -- Box2D threshold + if dist1 < 0.0025 or dist2 < 0.0025 then + return calc_segments(segments-2) + end + + return segments + end + + local segments = calc_segments(max_segments) + local vertices = {} + + table.insert(vertices, { x = x + w / 2, y = y + h / 2 }) + + for i = 0, segments do + local angle = (i / segments) * math.pi * 2 + local px = x + w / 2 + cos(angle) * w / 2 + local py = y + h / 2 + sin(angle) * h / 2 + + table.insert(vertices, { x = px, y = py }) + end + + return vertices +end + +function utils.rotate_vertex(map, vertex, x, y, cos, sin, oy) + if map.orientation == "isometric" then + x, y = utils.convert_isometric_to_screen(map, x, y) + vertex.x, vertex.y = utils.convert_isometric_to_screen(map, vertex.x, vertex.y) + end + + vertex.x = vertex.x - x + vertex.y = vertex.y - y + + return + x + cos * vertex.x - sin * vertex.y, + y + sin * vertex.x + cos * vertex.y - (oy or 0) +end + +--- Project isometric position to cartesian position +function utils.convert_isometric_to_screen(map, x, y) + local mapW = map.width + local tileW = map.tilewidth + local tileH = map.tileheight + local tileX = x / tileH + local tileY = y / tileH + local offsetX = mapW * tileW / 2 + + return + (tileX - tileY) * tileW / 2 + offsetX, + (tileX + tileY) * tileH / 2 +end + +function utils.hex_to_color(hex) + if hex:sub(1, 1) == "#" then + hex = hex:sub(2) + end + + return { + r = tonumber(hex:sub(1, 2), 16) / 255, + g = tonumber(hex:sub(3, 4), 16) / 255, + b = tonumber(hex:sub(5, 6), 16) / 255 + } +end + +function utils.pixel_function(_, _, r, g, b, a) + local mask = utils._TC + + if r == mask.r and + g == mask.g and + b == mask.b then + return r, g, b, 0 + end + + return r, g, b, a +end + +function utils.fix_transparent_color(tileset, path) + local image_data = love.image.newImageData(path) + tileset.image = love.graphics.newImage(image_data) + + if tileset.transparentcolor then + utils._TC = utils.hex_to_color(tileset.transparentcolor) + + image_data:mapPixel(utils.pixel_function) + tileset.image = love.graphics.newImage(image_data) + end +end + +function utils.deepCopy(t) + local copy = {} + for k,v in pairs(t) do + if type(v) == "table" then + v = utils.deepCopy(v) + end + copy[k] = v + end + return copy +end + +return utils diff --git a/main.lua b/main.lua new file mode 100644 index 0000000..813ca73 --- /dev/null +++ b/main.lua @@ -0,0 +1,61 @@ +function love.load() + Breezefield = require("libraries.breezefield") + Sti = require("libraries.sti") + + GameMap = Sti("tile_sets/test/test.lua") + World = Breezefield.newWorld(0, 90.81, true) + + + love.graphics.setDefaultFilter("nearest", "nearest") + Anim8 = require("libraries.anim8") + Player = require("player.player") + + Grounds = {} + if GameMap.layers["ground"] then + for _, obj in pairs(GameMap.layers["ground"].objects) do + local ground = World:newCollider("Polygon", + { obj.x, obj.y, obj.x + obj.width, obj.y, obj.x + obj.width, obj.y + obj.height, obj.x, obj.y + + obj.height }) + ground:setType("static") + table.insert(Grounds, ground) + end + end +end + +function love.update(dt) + local px, py = Player.collider:getLinearVelocity() + Player_state = 0 + if love.keyboard.isDown("right") then + Player_state = 1 + if px < 300 then + Player.collider:applyForce(7000, 0) + end + end + + if love.keyboard.isDown("left") then + Player_state = 1 + if px > -300 then + Player.collider:applyForce(-7000, 0) + end + end + + if love.keyboard.isDown("space") and Player.collider:enter() then + Player.collider:applyLinearImpulse(0, -5000) + print("collide") + end + + if Player.collider.contact then + print("hello") + end + + World:update(dt) + Player.x = Player.collider:getX() + Player.y = Player.collider:getY() + Player:update(dt, Player_state) +end + +function love.draw() + GameMap:draw() + Player:draw(Player_state) + World:draw() +end diff --git a/player/player.lua b/player/player.lua new file mode 100644 index 0000000..a5c7bf7 --- /dev/null +++ b/player/player.lua @@ -0,0 +1,38 @@ +local Player = {} + + + +Player.x = (1920 / 2) - 500 +Player.y = (1080 / 2) +Player.scale = 5 +Player.offset_x = 0 +Player.offset_y = 25 + +Player.direction = 0 + +Player.spriteSheet = love.graphics.newImage("assets/Sprites/flame_dude_dark_94x64.png") +Player.grid = Anim8.newGrid(94, 64, Player.spriteSheet:getWidth(), Player.spriteSheet:getHeight()) +Player.animations = {} +Player.animations.idle = Anim8.newAnimation(Player.grid("1-6", 1), 0.2) +Player.animations.right = Anim8.newAnimation(Player.grid("1-6", 2), 0.1) +Player.collider = World:newCollider("Polygon", { 100, 100, 100 + 40, 80, 100 + 40, 100 + 80, 100, 100 + 80 }) +Player.collider:setFixedRotation(true) + + +function Player:update(dt, state) + if state == 0 then + self.animations.idle:update(dt) + else + self.animations.right:update(dt) + end +end + +function Player:draw(state) + if state == 0 then + self.animations.idle:draw(self.spriteSheet, self.x, self.y, nil, self.scale, nil, self.offset_x, self.offset_y) + else + self.animations.right:draw(self.spriteSheet, self.x, self.y, nil, self.scale, nil, self.offset_x, self.offset_y) + end +end + +return Player diff --git a/tile_sets/test/test.lua b/tile_sets/test/test.lua new file mode 100644 index 0000000..481e0d8 --- /dev/null +++ b/tile_sets/test/test.lua @@ -0,0 +1,131 @@ +return { + version = "1.10", + luaversion = "5.1", + tiledversion = "1.11.2", + class = "", + orientation = "orthogonal", + renderorder = "right-down", + width = 64, + height = 34, + tilewidth = 32, + tileheight = 32, + nextlayerid = 4, + nextobjectid = 2, + properties = {}, + tilesets = { + { + name = "new_test_tileset", + firstgid = 1, + class = "", + tilewidth = 32, + tileheight = 32, + spacing = 0, + margin = 0, + columns = 9, + image = "../../assets/Tileset/DARK Edition Tileset with background.png", + imagewidth = 288, + imageheight = 256, + objectalignment = "unspecified", + tilerendersize = "tile", + fillmode = "stretch", + tileoffset = { + x = 0, + y = 0 + }, + grid = { + orientation = "orthogonal", + width = 32, + height = 32 + }, + properties = {}, + wangsets = {}, + tilecount = 72, + tiles = {} + } + }, + layers = { + { + type = "objectgroup", + draworder = "topdown", + id = 3, + name = "ground", + class = "", + visible = true, + opacity = 1, + offsetx = 0, + offsety = 0, + parallaxx = 1, + parallaxy = 1, + properties = {}, + objects = { + { + id = 1, + name = "", + type = "", + shape = "rectangle", + x = 0, + y = 672, + width = 2038, + height = 398, + rotation = 0, + visible = true, + properties = {} + } + } + }, + { + type = "tilelayer", + x = 0, + y = 0, + width = 64, + height = 34, + id = 2, + name = "Tile Layer 1", + class = "", + visible = true, + opacity = 1, + offsetx = 0, + offsety = 0, + parallaxx = 1, + parallaxy = 1, + properties = {}, + encoding = "lua", + data = { + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 + } + } + } +} diff --git a/tile_sets/test/test.tmx b/tile_sets/test/test.tmx new file mode 100644 index 0000000..432ee5a --- /dev/null +++ b/tile_sets/test/test.tmx @@ -0,0 +1,50 @@ + + + + + + + + + + + + + +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, +57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, +47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47, +47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47, +47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47, +47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47, +47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47, +47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47, +47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47, +47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47, +47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47, +47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47, +47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47, +47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47, +47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + + + diff --git a/tile_sets/test/test_set.tsx b/tile_sets/test/test_set.tsx new file mode 100644 index 0000000..1115169 --- /dev/null +++ b/tile_sets/test/test_set.tsx @@ -0,0 +1,4 @@ + + + +