From 53aea812657a9785363d965312f68b88bc523097 Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Mon, 23 Mar 2026 08:14:37 +0100 Subject: [PATCH] - [NEW] Gota --- data/gfx/gota.gif | Bin 0 -> 279 bytes data/gfx/sprites.gif | Bin 3027 -> 3136 bytes data/maps/rooms_background.gif | Bin 1322 -> 1322 bytes data/maps/rooms_foreground.gif | Bin 2066 -> 2066 bytes data/maps/rooms_items.gif | Bin 1054 -> 1061 bytes data/modules/animations.lua | 28 +++++++++++++++ data/modules/ia/gota.lua | 62 +++++++++++++++++++++++++++++++++ data/modules/items.lua | 1 + data/modules/templates.lua | 50 ++++++++++++++++++++++++++ 9 files changed, 141 insertions(+) create mode 100644 data/gfx/gota.gif create mode 100644 data/modules/ia/gota.lua diff --git a/data/gfx/gota.gif b/data/gfx/gota.gif new file mode 100644 index 0000000000000000000000000000000000000000..1f02ed018a8c1ed1399ee939ce54f37d57ed9300 GIT binary patch literal 279 zcmZ?wbh9u|bYS3MIKlu036{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%L6xqxgP5FcbG18aZ+1IrQ(HeabZnY;Ved73SanXSC;{e8cE%MUzdW8T!WJl5}I z&aWD0SuV@ksJRhpUl&a(%-oSBF-JGK{-M6WRo>b6KL`fi=)3(sQK{~HdK&`+7EAOM z92s~O`W#lR%Xz)8pk`Ka&V7rTcNy>gTg~I}&{@{vyx6Gyjqd#QY9+5G1+8Bxz+epk DI7)3! literal 0 HcmV?d00001 diff --git a/data/gfx/sprites.gif b/data/gfx/sprites.gif index b7937721f1bbebab5e29eed1eb7a47276cef727a..784d1e9b53035ce21a62883becb89c1396661cb1 100644 GIT binary patch delta 1678 zcmV;9266e*7r+>>#|3}nAb=(Vpvg`WzyzKQfFe2hNkt}-lSgCNOb{T390JP)i9A39 z-qL^%41o zmcXA&2mk_1Fwh=6@}LM!s6rKbOi?-$nx{wF0g5b<64V3* zNNNmX8O~bX(u#jf++{D5iU44)lbA3S!Gr{01A5XFr(jLy++grA&-@gq9DS1_dj-w5 zlAxE7EC5Tq=}i%U6FcLCY6Q$V)ugIZn8Y*yCIyfH1Q@WRtY#5906JlW1&j@?SZzqd1@1tyY2_436{&yHkvy`bF12J#drC#g_5rf> ziXKyGX-hHYQmVeJYB1TERUQ!X4u%az0J1p7+gZSp7Wk$t@oGzQ?iG^%eN87Y0ozVv z8uz$95WsO>(2o+7H=q?TL3$0k+4e4!2Ob6Q3&g8jEgmI`0Z8u*Ui#9Lg0!{Ocx_A7 z`BF@Z@|1t_WdcI(aNhGS@f7RLuL%OX)Vs>Ex8&4iT!U*>?q(ID@l9~`?r=pbvLpk` zjfyaX$&%#ko2 zz`#gRMUan7#3~yJ2tvdGsz(R*s@zR=pvBBM;*kngOPLBwl6;k(jMvRwrZlQ?jN?_a zdV+tYOBt-SVwuylSt-Qc%S=vIKXrcKqpmrI>3yG z)S@Ws3OiG;k<}f|PLziu=vsP!0jiOJY9QSzOV5wfY5S-gd3{TU8k7LuE~qW|yi9*z zr_#^GPIj{cwv{*3IK=LRrn;k@NrjL54(<;0m4ChONB_H|{wQLu6BF-LG63eqF?I(O zz3dJ+d!%Aj^U4Dt)x-*H>RUdNmye$GY(K8P_nq#fL+S)2Exm}5PWv~j`}G2iq(F7Q z`)Kp`_{f(wF(+RF;SWFdvhV%AC)Iy^N%oTXMZ*uSCMEspGe7u}#6IE*b>%6W9+1~o zLZAqb?Yjm0{Mt`{y$FTW0u9K3t3r8DM>@c^1{c_Ut)hPrV{QF&HVgP@SM_Yp27-SXSb$Vk z4MWgwmtbm0mx3!OeSM^XvjT7q01TY)WyCdHE7)t^$3`VYEYNoY&BHGFCTY-SgX=VD z$)|j_w?=59K}nbhGKXut_G~KHY=8E9MhHNFk}?O-bWFD!GBA4|2!vI5L^wcyNjN6Y zK^to50&K`-6DNKB28RWv=qBO1eA%_@?mp3edC5iJ0kIQI;Tc|2|*oIt| zjYdctP4{%(xR3lOhIJGGOs96B0gT*dd{g+44>@giRESa6j;_d$MJRxxf{_`ikskSx YAQ_S(Ig%t%>V!Z delta 1568 zcmV+*2H*L>7}FQ9#|3}6LKDMgf&ek(5LhlqonQ^CIR`)|jF@VM+gsocvPx4< z`BRYq9mym2Nl;53l#nqUMq5F-)#!1wl&2JWO0nQvw$Tn zP|Q&h^_0pyDkPKo%vdsYnzvN!ppNr`ew4tpO9(&(Ot61ia*Fk}=@ji~8>_{mL{YUY zDQH3aY0tP;W3B^*WN+ZQ0@4yZ-#5>L@u+?JrJ8y)H>1FOtc_O!77CjD$;i>rjj zUeSsy$$(>{GD}&qgtC+ss%4RhS)(G=nM;+XQ$x#LADoG+yz^?XV9Q@~_SJn;#P8=? zng&tms=$BPq$-d~NUQ{t$`OF@q#%yR19CL=!Who5hBFK%mfWp$XJwfs#3171#YqPn zPO*wF++jQsEyT}A5i|6Vi!H49#v2}#i$@02apmJ4RjkK4a3Ky0W7v}AMd@K>nPMGV zQ(6eXKt8Fuk${jkj1jRiE=Yf@G@ex z+f@0EnanQ@-K@~870aCF#7gP&US?8fFf(<|C{=Pnn<}RgD3Q%GN&m26QsNcsNQZha zP|Rbls)9r-I?3flw3lnyXxoZ+R`yIE3A4m6M(Y}#EfGV(~`vaVqyl)#pP`# zQe1!eNltx2)E8kdM_ge(O;eR^YXeZEYutieuespMREyz49U8EFHiRKgcUhWQDw6@S z^pskXq|VO10tT4Wh7DrM+i4+Yw?So?&~)1~pQX}h#x0J1KfnOPNPxhHk!Vlehyw`c z0CZZ4rWp~bMKGc_b{t-#h!Yyz;?NSmwe)}QY9yc<1sB7?^P_MFlL|{2FO#4|E`V@{ zW92}|x4*-&aeo6m;2>wJCvQ0IOXVo7FlRZ?4Ha{Ymx<=&rn$%ebAD?{{jt79ujSFH zWPquQHr8cv6?z|bB_ewPWQUW2}$c(Z@B4Q7biTwUSChU{q29G zj+ETPIZm+0T+zA>yxLF~0F>KRiDjd;&&M z#E^>DRpt8-s5{9@le!H3e*xTGLP=hFsaJiiAbo={u|Cqd)LqYIuTR?7OYgZf!tVHR z`QjJ;RGRnwrt+*15Rbt4#b4Fa8BTvUJ*NQrmv5EwA@=D0osIZ%KD4I|?RJEIvZd7+ z!l^GY>O`OP{n@wU^k)SDCIW*K8b<74#cyZKvys6X^C$@uZU5lYWlDx_@E1)>Hh6@W zZvXdT=Lbmbws>DQXNX3AD<)0y2S9+5G6#@w2)7%v)_>TCcVL7AuD5n}^BjM)A%ZT@ zb{NKNj0bl0YC_ZwUl)KW&lAbgtc^p7Jzm}^m8A>d<8fv zp9O@IwS@X6Zb4W{LP&*LxP&@)L?`flRrQ2AXcto`Sx2~WM`wg+7=&!thF(a60hTWy z6+^ohDQ8%PHHU>%=!RM7hF^bpf^i?sMzgcJY>M{=NXhmulg40w#lC|`Y4LTN>cX4s23#(SXxjnNn=jn;UL*qDvl SxQ*P{jo$c;;CPK80027>R_C(- diff --git a/data/maps/rooms_background.gif b/data/maps/rooms_background.gif index 4165345ba2a2c47d0c21ac195152983e9b47caf9..3f2282dbcffd670743d02fd7be3f28e6893ceed6 100644 GIT binary patch delta 14 VcmZ3*wTf#47c(QnW^QJACIB6e0|@{C delta 14 VcmZ3*wTf#47c*o1W^QJACIBFb1Bd_s diff --git a/data/maps/rooms_foreground.gif b/data/maps/rooms_foreground.gif index b5893e687286ee7c5b983808192514aafadd3320..dc5ea188fd5da7a0a3d03a6a3f98c35dd8ab7bcd 100644 GIT binary patch delta 16 YcmbOvFiBto7c=wkKYup!GPAM*05n1c#Q*>R delta 16 XcmbOvFiBto7c(;h1H)!sW>!`JAD#lz diff --git a/data/maps/rooms_items.gif b/data/maps/rooms_items.gif index 10dc6f7f85e5b283685aef778eb65b285c716374..fc1a2d836b7210b927d316af5a790bfcf57f871a 100644 GIT binary patch delta 138 zcmV;50CoSK2&D+H3IhZC{QQ#*1D<-jl^|GUfWizTEF7SaG2+J@2}7Ptxw2dVmN_1# zj5)LC&!9tl?JT+?Y08cX9*DTPwCmTfV*_n1khbjGxCz?M?Ql15f~Nxq|4sa&Z=9Ql s7hlf2`PD!Pk2{}EJ+5-<&=Y0{EnVRC>fpnR3YWcLy!rF!p9TZ~JBdU?xBvhE delta 131 zcmV-}0DS+Y2%ZSA3IhWG005H>1D(Aq$AS(Xivm5h!ck z%(*kx$(}2Me!Q6Afryqvt6t5z_0H4+VY{A98-VQE4R7NfI9hP;-M|a~wER1`@#Dy; l21=+qx%205i$7nUkoxB4yrFB~&b{`6?%>0V178{t06Tv%LZ$!! diff --git a/data/modules/animations.lua b/data/modules/animations.lua index fd5b18f..8afe30c 100644 --- a/data/modules/animations.lua +++ b/data/modules/animations.lua @@ -204,4 +204,32 @@ animations = { { frame={x=27,y=0,w=9,h=8}, wait=2 } } }, + ["gota_generador"] = { + cycle = {1,2,3,4,5,6,7,8}, + loop = false, + frames = { + { frame={x=0,y=0,w=8,h=8}, wait=2 }, + { frame={x=8,y=0,w=8,h=8}, wait=2 }, + { frame={x=16,y=0,w=8,h=8}, wait=2 }, + { frame={x=24,y=0,w=8,h=8}, wait=2 }, + { frame={x=32,y=0,w=8,h=8}, wait=2 }, + { frame={x=40,y=0,w=8,h=8}, wait=2 }, + { frame={x=48,y=0,w=8,h=8}, wait=50 }, + { frame={x=48,y=0,w=8,h=8}, wait=1 } + } + }, + ["gota"] = { + cycle = {1}, + loop = false, + frames = { + { frame={x=48,y=0,w=8,h=8}, wait=100 } + } + }, + ["esguit"] = { + cycle = {1}, + loop = false, + frames = { + { frame={x=56,y=0,w=8,h=8}, wait=100 } + } + }, } \ No newline at end of file diff --git a/data/modules/ia/gota.lua b/data/modules/ia/gota.lua new file mode 100644 index 0000000..21c2753 --- /dev/null +++ b/data/modules/ia/gota.lua @@ -0,0 +1,62 @@ + +function ia.update_gota(spr) + if spr.timer > 0 then + spr.invisible = true + spr.timer = spr.timer-1 + if spr.timer == 1 then + spr.animation_finished = nil + spr.current_frame = 1 + spr.current_wait = 1 + end + else + spr.invisible = nil; + if spr.animation_finished then + local gota = templates.create("gota_caiguent", {pos={x=spr.pos.x, y=spr.pos.y}, flipped=spr.flipped}) + table.insert(sprites.list, gota) + spr.animation_finished = nil + spr.current_frame = 1 + spr.current_wait = 1 + end + end +end + +function gota_esguita(spr) + sprites.remove(spr) + table.insert(sprites.list, templates.create("gota_esguit", {pos={x=spr.pos.x, y=spr.pos.y}, dir={x= 1,y= math.random(3,5)}, flipped=spr.flipped})) + table.insert(sprites.list, templates.create("gota_esguit", {pos={x=spr.pos.x, y=spr.pos.y}, dir={x=-1,y= math.random(3,5)}, flipped=spr.flipped})) + table.insert(sprites.list, templates.create("gota_esguit", {pos={x=spr.pos.x, y=spr.pos.y}, dir={x=-1,y=-math.random(3,5)}, flipped=spr.flipped})) + table.insert(sprites.list, templates.create("gota_esguit", {pos={x=spr.pos.x, y=spr.pos.y}, dir={x= 1,y=-math.random(3,5)}, flipped=spr.flipped})) +end + +function ia.update_gota_caiguent(spr) + local tx, ty = (spr.pos.x+4)>>3, (spr.pos.y+4)>>3 + + if rooms.is_outside(tx,ty) then sprites.remove(spr) return end + + if map.tile(tx,ty) >= 16 then + gota_esguita(spr) + end + + 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() + gota_esguita(spr) + end + end + + spr.pos.y = spr.pos.y + 1 +end + +function ia.update_gota_esguit(spr) + local tx, ty = (spr.pos.x+4)>>3, (spr.pos.y+4)>>3 + + if rooms.is_outside(tx,ty) then sprites.remove(spr) return end + + spr.dir.y = spr.dir.y + 1; + spr.pos.y = spr.pos.y + spr.dir.y + spr.pos.x = spr.pos.x + spr.dir.x +end + diff --git a/data/modules/items.lua b/data/modules/items.lua index 2c42335..80bb304 100644 --- a/data/modules/items.lua +++ b/data/modules/items.lua @@ -16,4 +16,5 @@ items = { { 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} }, + { name="gota", label="gota", visual={x=80, y=56, w=8, h=8} }, } diff --git a/data/modules/templates.lua b/data/modules/templates.lua index 32cc6fb..aa7a977 100644 --- a/data/modules/templates.lua +++ b/data/modules/templates.lua @@ -192,6 +192,56 @@ function me.create(type, options) room = options.room, ia = ia.update_rata } + elseif key == "gota" then + sprite = { + type = key, + pos = options.pos,--{ x=100, y=4*12*8+71 }, + size = { w=8,h=8 }, + bbo = { left=2, top=3, right=3, bottom=1 }, + current_frame = 1, + current_wait = 1, + flipped = options.flipped, + surf = surf.load("gfx/gota.gif"), + animation = "gota_generador", + state = me.ALIVE, + enemy = true, + timer = 0, + room = options.room, + ia = ia.update_gota + } + elseif key == "gota_caiguent" then + sprite = { + type = key, + pos = options.pos,--{ x=100, y=4*12*8+71 }, + size = { w=8,h=8 }, + bbo = { left=2, top=3, right=3, bottom=1 }, + current_frame = 1, + current_wait = 1, + flipped = options.flipped, + surf = surf.load("gfx/gota.gif"), + animation = "gota", + state = me.ALIVE, + enemy = true, + room = options.room, + ia = ia.update_gota_caiguent + } + elseif key == "gota_esguit" then + sprite = { + type = key, + pos = options.pos,--{ x=100, y=4*12*8+71 }, + dir = options.dir, + size = { w=8,h=8 }, + bbo = { left=2, top=3, right=3, bottom=1 }, + current_frame = 1, + current_wait = 1, + flipped = options.flipped, + surf = surf.load("gfx/gota.gif"), + animation = "esguit", + state = me.ALIVE, + enemy = true, + room = options.room, + ia = ia.update_gota_esguit + } else error("Template not recognized") end