From d5c0dfddeb23f97a13a96b152d8226c352423aae Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Sun, 22 Mar 2026 10:24:13 +0100 Subject: [PATCH] -[NEW] Rata acabada --- data/gfx/rata.gif | Bin 0 -> 187 bytes data/gfx/sprites.gif | Bin 3016 -> 3027 bytes data/maps/rooms_foreground.gif | Bin 2068 -> 2066 bytes data/maps/rooms_items.gif | Bin 1057 -> 1054 bytes data/modules/animations.lua | 10 ++++++++++ data/modules/ia/rata.lua | 28 ++++++++++++++++++++++++++++ data/modules/items.lua | 1 + data/modules/templates.lua | 16 ++++++++++++++++ 8 files changed, 55 insertions(+) create mode 100644 data/gfx/rata.gif create mode 100644 data/modules/ia/rata.lua diff --git a/data/gfx/rata.gif b/data/gfx/rata.gif new file mode 100644 index 0000000000000000000000000000000000000000..94c46d00dbb6bed3ac96f39f8122a5c25e835039 GIT binary patch literal 187 zcmZ?wbh9u|RAJy?IKlu036{eC+A3Pgp0ySZM#1sL$>IMQ7@DFDyHc$e)dn8SiLTz{ z_xr5W%(l`Q?d3-&hMb*O@M321hrQ*F4GT)v?%ub1)A0@Se&3&c?9k!=KcD>j57Z3> zia%L6xqxgP5FcbG1FMCCLSIVeyo^=ra$fH%(AnO!XvWvrXFGKLgc}x26Zq5Ok}R-N cV^W*%<9rWU7WFF+85quRt-1R~frY^u0K%C`x&QzG literal 0 HcmV?d00001 diff --git a/data/gfx/sprites.gif b/data/gfx/sprites.gif index 61de319a9a8c084ed08c8837eff7832d5622e9bb..b7937721f1bbebab5e29eed1eb7a47276cef727a 100644 GIT binary patch delta 1366 zcmV-c1*!VT7tGS#N`^q0e5{VJVc4XZf^KqritYKGfe z;104%Q%?C)kpLaZBlk&AOCFSvF&#!*LAllFakP}D6r(Cd`pSQj%2Jvs#VbXm8jJvB zag4XKfF&(Z%uy2cl*&9RB$N8gSTc2*w^Zz)j`ML>%N%vJWZu>U6g zY+{S6gvMUciY$N0fMcUFOIfmnvXm97Ws!+lqaxLrOO>WmL(5$soQbQv^J=hQ%U^T$ z)qPXM@8?>Y22tp$z}TcJkV;6b1e3}UfbgUsj>iLXH1)z5&aj3v3?`P`t#oH)nI*&^ z;^W0h2OCbYiZ9$@JP|F#&qxt7^pJ}!toX(o9+Znm2Gf6W<>MYztj9WVAr1>;*plT% z>0xD=VjWvkS_r^EKB>BqfRHwf5wS8ZOvr)^%lD+84Rek=%sAqa3RX**3QHE}lChZN z$~N#aVzt{;`Hq>)FAd$S(5w~9oaV$z>GNJ@QfDwTbl|~muuN*+lqHq_ryvOfU^w5jAIqklEnC8 zVg}B|?)Y%|;uro@n)m&t@~jXLkHGlFU)9qYPB%TL0Q#42mGU9>=>DCJ_;Nn9rw#3P zgnqK6)fmF5FEQ#wpY;9Nx8w9@1py`kgA*D?>|w=kXUwya!5Z@@2@`Gq;L~MFhHiiG z7fnkxc!Za3|My|%2T1L-ZCQb4OK!B1m2as?Gw;Qw8f7pk2V1xs%w{~{( z9JC>VF3@%u#%zoScRo~AbaDbxrh;}uLuz$>@?`-)2!yqibpK`mK`4Z^bc7awc1HAb zAH#eFI4Yk7gp;*|`X+8cSV=-ig<5~OggSRbC-8k$^@KWT7gH!%N4RlEXM|`NglyP` zUPyxhmMUwu?UX+?@=*o!#Ed!Yi2(I}19 Yc#YVYjoP@4+}MrY_>JIrjUfO4JET67M*si- delta 1355 zcmV-R1+@Cp7swZ|j|P8rRsJR@JRLODq49i^B6}48U;>i_u8d>>SVBxWFr2!7Qs{U!voi2E(Hnpd}9RBK8>CCED%~{Rt&~Sk}kZMdh`5 zCqXUAR6@RU7-Iz`RinqzQl3(bsubxfODaogrqrzzQGlUdki~y7-p&G+v_LUO8ProM zlcN8`R)M?%lu!B0z3;Iz4&MqMU6)-_)$+^|irW3Q74F)w>auhs*mL&x(Xg}?F z)@r16pwKL6TT#mdgxtZio?YT8M*G?lD0QPi9pzn>xk{bx)ufgED{qyc+ACU-CI1-+ zKz2zmOIfl+v5J5FDPxi8*r68HnMjr9QZGAQADpSGyt`_!OiN#`QumWngzx84)rCpG zDh;BbB8*sK$W!6L5}-Qp@pwQEr8@Y*5RNc}!9?I(md;eG@I-)pz%m5KNe2=Rv4|Z^ zVLTBH!^|KAMN*6lsHR}VFqZJ3Ogyrdjw>JcsA4_VfeU|eH2A@m>@G_CD$5Yh*qYKp z00#1jDuR4uB39W*KoBAhP(fI|C#|fOWlUkl5sy@`TFO*dvN)HF#Uz>qF_8TlU8Sm* z%Uxz^=w=mWtytzXA6AN;_c9YVXE~{CM(L0Xs#H0ZK#66Z2{!L?n6+3(I@Ejrfnpxx z;umW<$VGn+@|GPeO+&YKyD7UTelkND|6GC8o0&kGZLsMWhnSXPI2#0*n1OSdkRpl{ zSALRHpAhwh*UJ%?mQSNpVv88oSLhnIV0Y^~_)^qjxKM}oE1wNvsM0H_Y?jJofGjCIN_CP+ORH znIujndRP478BeMwZ`f>z-KpRt9~6^tE^LUqoaN$JxyADxb7V*AkL?9QW&c-BB?B;B z97BKCH^v>HaY)5V-AUInv6Q-XaF0aXlDaz9r`u{*N7(2f7biT&&Rap7{nfP$dkOeC z&ZMV&(6PuWa7hDs00^S@Va7r z9|CoAMc?hhnDF`KF-$s^t^xUuZ`J6>h3NjBjrUhRX`ugHc;&mk$<-Lbb}w;d zacdvY(YGVgNi}N+0D}`}A2j;8|M)tVkXRp&+p@vO0zaF7{@oQ#dly^(g=T-BhhKky zbZ%;fWo)*6WhY^sW`Mf~C@FIQ0S9oqAp;KxeLyyDUxWjtmw#XL9JG;vF0g^MWNd_o zc0J@&baDbqCW1DECt&qr>SX~qh=VB@bl+wGIjDoR^n(@vc1DyV&F56#BZEp(SvZ(j zL)dcMmV=d~gH1SvLnw1cbOP6hg#Le{gm%G%i1mXLCv;6HhEkY=RVQHi0#Y#~dy)c% zPB?Kc=YwTPg>`s^ESO(wND|pqgPH<|V(4uW_k$H+hhYeWd6-{8(|)yvfSdw|X!vvo zK!;X1gjHCGc<6!lmoG}=g&(42LdbQ)qEw+6gkqS6Y?NUeHYzB{fkmjeMjb;Ja07=b zZs&^er-}9la2*F4ZrFHuH-Nwhj0I?b(?LS1VvF@Rd!2%eF{X^p_>9mPjnX)c)L4zy Nc#YVYjVTZU06TasgD3z1 diff --git a/data/maps/rooms_foreground.gif b/data/maps/rooms_foreground.gif index 15740ed8cb2fa8cc306767b8c48d80e01eba4cc8..b5893e687286ee7c5b983808192514aafadd3320 100644 GIT binary patch delta 939 zcmV;c162H!5RwqE3IhQEvkL=q0e=O6gi77l5Q96$_#cZDQ6<3y4uN1K2tC?HpbSd3 z2+>R;jNnj!ITkpBiVY#CqeVs*h-HsoG8CqDHC_ZGiIYL#rH>!&H)eHjs@Wr5>N&Wk zgm^ZnCxZd#S)iDE2AU_I6QVF^phF&tV{c#9WGI_w*%Sc^Lt+$Vr59m}8-JA&aSB$B zQF0XOMWf=jWso#!`sALfTGZ-9ufqR^B@8z~Ddm(tR#j?6L+(nEud^{3m8TJfKq--= zju2}^%d$3u3{?UUYod@wL@Tfo^?IvC*uECS3=d%&WtlggimRx~BI~NUw-Ni$Od%*K z>6^Sx&@Dvwu4ZnhGSj|N4xj90RuS42ey6tT+%r)3{kX1^r zqJc)qF^{^130bI*LXfba6Rug&W_(tq<;N()Jm|@XG6sUY5^Z)PraEhQAi)g{2{c1O z6WMdN>;eWfgQFh3>cb612{l7fOX)Pe69e|J#pS+?a+L@U9a7O_ihsS;OnT9!5Rw3J zt&qn1KAm+-RRempLQ`|aRX5CY%0y4LW05ht5B-Xj2e zwXKW|$#_E`KydJgSzekntb>o9(NYYdh4@n*R}1k35s>J2+YZkyQQal=-1Fq%Mc|>@ zZ3Dkhlrp%DD&eIMoPT_z3-!FZQxV93;zWzj1cKrhjR*tpxN}?i+`3b3J6zXW1ljDV z&jh2%GRN$G`;3hV8G^J1>NVQ;)9n6pV$Uz({rAC22r9L?92M<=r9+?s6Ue{?B9Lee zjG(F<7(oakFmDC?R0w1cstf|4VpR*__e4m-5t^`sA`~AAO@FAu6S}a4Rg2rFH1ok3 zzyMkvEL^6R=NBEWD+Fw#$Y%G%#-JI1Kue300R<`$Fz$U%YfnrTmY6nznbhxi6R;xM zW@3vzgF*rZl5Dq$6U)R&FcRuHf}AWOZ(Z;B;X)#~dlna+33$RdgLh1~>tn1v6<^ N#O19b>6?H606XsUr*Z%Q delta 941 zcmV;e15*5w5R?$G3IhREvkL=q0e?kNfHpN4BLFIX$Ks7NNicy!AQTBgLo?Y%pbSd3 z2+>R;jNlNCITkoWj|?Gr-$g|hh$TZ*PV}X9HC_ZGiIYL#<&GciH)eHjK6I0oQ$|oB zffDAaqn}*U%)hR?F zR669TBhVU=v#iY^gHl=1x~QZP-8!s9!0Kwzwy(u7!$aFfS*ED|#i5gKYXfF##@U&;rDEc2i=Qw1}jjDbL}M4_^}Y^WL@cyL2P z4$V-}Ljuih!G8_?v93yc8gWBWPR&r&Qbw(B#ehYOv8Y<=Ni6^f8h;%U(qo#vRi7AR zd?eXK4;gQuR)>UjpjxlX^B3<;z*07zq0_@odG4%G}H_+6)K58pR2vvun| ztk$_QCZyvHfdGNR2ck(AyM|Ao_^v>sb-Gg^V=M6l5s)}Hf|UbscS)&Vy|-U8c}Umq zaO*C^*Cq~rxVy6EzJJi_L`5J2iW4%C~YaryF2t!E15t^`s+OypWSAXa$6s}NrA?#OMDg%QV zz+hS(bfCcw2pApSD+F(&$Y%M>#-JI1Kue920R<{Buskp)^J&>5y)_l=nB#VnzE@)RmF1=fI%Ub z$;^x8XoAp;pfsaN&1qV*nnF4vMsh_wRQU>k0b7>mTpmbH7Mio1=sc%7)7iR=1aJa7 PD`vsuM@L{XCm;Yjt7xL5 diff --git a/data/maps/rooms_items.gif b/data/maps/rooms_items.gif index 4149f4a9563efa7c0fd2a2e21b33edd61a51faf0..10dc6f7f85e5b283685aef778eb65b285c716374 100644 GIT binary patch delta 118 zcmV-+0Ez#h2%ZSA3IhWG005H>1FL4S~T5#{(zzhGh{5!buoxwGf2nmz%3v#(qt^Hh|f-8{*DAkaS?*yn|QVjT19);mDIKpBgA3@#WB?yFCuQ bc|z-)p9`cey}S4Cq8ES$A5Xsg(trRvLOMEW diff --git a/data/modules/animations.lua b/data/modules/animations.lua index 5f81ee7..fd5b18f 100644 --- a/data/modules/animations.lua +++ b/data/modules/animations.lua @@ -194,4 +194,14 @@ animations = { { frame={x=0,y=0,w=16,h=16}, wait=100 } } }, + ["rata"] = { + cycle = {1,2,3,4,2}, + loop = true, + frames = { + { frame={x=0,y=0,w=9,h=8}, wait=2 }, + { frame={x=9,y=0,w=9,h=8}, wait=2 }, + { frame={x=18,y=0,w=9,h=8}, wait=2 }, + { frame={x=27,y=0,w=9,h=8}, wait=2 } + } + }, } \ No newline at end of file diff --git a/data/modules/ia/rata.lua b/data/modules/ia/rata.lua new file mode 100644 index 0000000..f4ff14d --- /dev/null +++ b/data/modules/ia/rata.lua @@ -0,0 +1,28 @@ + +function ia.update_rata(spr) + map.surf(rooms.surf_foreground) + if sprites.hero.state == templates.ALIVE then + local x1,y1,w1,h1 = util.aabb(spr) -- El meu aabb + local x2,y2,w2,h2 = util.aabb(sprites.hero) -- el aabb del heroi + -- Si toca al heroi... + if util.check_aabb_collision(x1,y1,w1,h1, x2,y2,w2,h2) then + sprites.hero.hit() + end + end + + if spr.flipped then + local tx, ty = (spr.pos.x-1)>>3, (spr.pos.y+7)>>3 + if map.tile(tx,ty) < 16 and map.tile(tx,ty-1) < 16 and map.tile(tx,ty+1) > 0 then + spr.pos.x = spr.pos.x - 1 + else + spr.flipped = not spr.flipped + end + else + local tx, ty = (spr.pos.x+9)>>3, (spr.pos.y+7)>>3 + if map.tile(tx,ty) < 16 and map.tile(tx,ty-1) < 16 and map.tile(tx,ty+1) > 0 then + spr.pos.x = spr.pos.x + 1 + else + spr.flipped = not spr.flipped + end + end +end diff --git a/data/modules/items.lua b/data/modules/items.lua index 4be19a1..2c42335 100644 --- a/data/modules/items.lua +++ b/data/modules/items.lua @@ -15,4 +15,5 @@ items = { { name="sucubo 50", label="sucubo50", visual={x=0, y=64, w=16, h=16} }, { name="sucubo 75", label="sucubo75", visual={x=0, y=64, w=16, h=16} }, { name="nemesio", label="nemesio", visual={x=16, y=80, w=16, h=16} }, + { name="rata", label="rata", visual={x=80, y=48, w=9, h=8} }, } diff --git a/data/modules/templates.lua b/data/modules/templates.lua index 9aebf06..32cc6fb 100644 --- a/data/modules/templates.lua +++ b/data/modules/templates.lua @@ -176,6 +176,22 @@ function me.create(type, options) room = options.room, ia = ia.update_nemesio } + elseif key == "rata" then + sprite = { + type = key, + pos = options.pos,--{ x=100, y=4*12*8+71 }, + size = { w=9,h=8 }, + bbo = { left=0, top=5, right=0, bottom=0 }, + current_frame = 1, + current_wait = 1, + flipped = options.flipped, + surf = surf.load("gfx/rata.gif"), + animation = "rata", + state = me.ALIVE, + enemy = true, + room = options.room, + ia = ia.update_rata + } else error("Template not recognized") end