From 8aa6631a8aa219aad1870f2587335f1f10cf1acd Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Fri, 7 Nov 2025 18:16:25 +0100 Subject: [PATCH] - [NEW] Batman ja dispara batarangs --- data/batarang.lua | 39 +++++++++++++++++++++++++++++++++++++++ data/batman.gif | Bin 1451 -> 1468 bytes data/batman.lua | 25 ++++++++++++++++++++++++- data/game.lua | 3 +++ 4 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 data/batarang.lua diff --git a/data/batarang.lua b/data/batarang.lua new file mode 100644 index 0000000..91c0e64 --- /dev/null +++ b/data/batarang.lua @@ -0,0 +1,39 @@ +require "mapa" + +batarang = { + items = {}, + cooldown = 0, + dx = 8, + + draw = function() + surf.source(batman.surface) + for i, k in pairs(batarang.items) do + local flip_h, flip_v = false, false + if k.s==1 or k.s==2 then flip_v = true end + if k.s==2 or k.s==3 then flip_h = true end + draw.surf(123,27,5,5,k.x,k.y,5,5, flip_h, flip_v) + end + end, + + update = function() + if batarang.cooldown > 0 then batarang.cooldown = batarang.cooldown - 1 end + for i, k in pairs(batarang.items) do + local tx, ty = ((k.x+2)//8), ((k.y+2)//8) + if (mapa.isSolid(tx,ty)) then + batarang.items[i] = nil + else + k.x = k.x + k.dx + k.s = k.s + 1 + if (k.s==4) then k.s = 0 end + end + end + end, + + new = function(x,y,flip) + --if batarang.cooldown == 0 then + table.insert(batarang.items, {x=x, y=y, s=0, dx=flip and -8 or 8}) + -- batarang.cooldown = 5 + --end + end, + +} \ No newline at end of file diff --git a/data/batman.gif b/data/batman.gif index 63029e3f23a951cc1d533e4b74390f19494575dc..7e691c5fc1dc4bb391caa0e060530072c7cff904 100644 GIT binary patch delta 333 zcmV-T0kZz93%m=kAOwFx8iX zqB_vpS*(*(MSyH>xFj>}wuv;yE4Sc&T8fM?(io$;xrEDQLcnOkZjYhB8?TS*28moZ z&Q!&VIFIN%8+4V`iz9LxNd}R@C?z|Rz>*N0aK9dLg3!AVFU)^%|DF>g{IJ9k=aTWo zlMw81YWJK&a>@57T#(5iH(XFoFB@!B%qq{EkW>}h99GMWK;u_x$^7hJ&~7oP7g;># z`NGmnzaUG~Og{~^)0#|8b<#bfhHb!GYuoj|SZe~?$oxjr3`6|pGPcQSt9^D=VW%>- zbj_4KH{H<~boV6O&g{)&+`O6Gn!^dnLO74S2oAX1b+_G!be)d!`|!sv|NQh95(of0_)M-` delta 316 zcmV-C0mJ^h3#$vTAOwHLs%ES61XHW5xT-WKTiFEaORp^A>gk2OTFFkYCaR;Xox*-P zTW*~;EA6z@ep-r*Fwz*Kwz*VGWJ17b0&b6?kXx>g-sXs0H_lYWi#U(C`)s@kL6h!{ z$Y~@QMEjytibwZKlCQt?j+6^R;}%SCz>ExR5_ASTd``a$Gn{|Q|2-4;J8)_fPy8>& z_gD;NK{=7UuTds{oKVRttBi8XBIlWmU#ZQk7lV3{b&Jhf#hm90KnMMTEJ6oObkRd= zf^^b8%ZwY&_Cgyq)blo73Tzw08%;9|!J7-#6MOwN*Hu}43D(jzqcz%TM`IA%XgdQp zk7k#bac&IB;xHtSyxd)PD{ObVwb+dW4!AU1NBj5Uj5qH19feZ+_!}00280%b9op diff --git a/data/batman.lua b/data/batman.lua index 7994bd7..8f0a360 100644 --- a/data/batman.lua +++ b/data/batman.lua @@ -1,6 +1,8 @@ +require "batarang" + batman = { - states = {IDLE=1, WALK=2, JUMP=3, FALL=4, STAIRS=5, GRAPPLING=6, PROPELLED=7}, + states = {IDLE=1, WALK=2, JUMP=3, FALL=4, STAIRS=5, GRAPPLING=6, PROPELLED=7, SHOOT=8}, x = 7*8, y = 14*8, surface = nil, @@ -35,6 +37,15 @@ batman = { batman.frame = batman.frame + 1 if batman.frame > #batman.frames then batman.frame = 1 end + if batman.state == batman.states.SHOOT then + if batman.frame == 3 then + batarang.new(batman.x+8, batman.y+8, batman.flip) + elseif batman.frame == 5 then + batman.state = batman.states.IDLE + batman.frames = {0} + batman.frame = 1 + end + end -- Si està IDLE if batman.state == batman.states.IDLE then -- Mirem si comença a caminar @@ -79,6 +90,12 @@ batman = { batman.frames = {6} batman.frame = 1 end + elseif key.down(key.Z) then + --if batarang.cooldown==0 then + batman.state = batman.states.SHOOT + batman.frames = {5,6,7,7,7} + batman.frame = 1 + --end end -- Mirem si ha de caure local tx1, tx2, ty = ((batman.x+4)//8), ((batman.x+10)//8), ((batman.y+16)//8) @@ -119,6 +136,12 @@ batman = { if key.down(key.X) then batman.state = batman.states.JUMP batman.jump_counter = 0 + elseif key.down(key.Z) then + --if batarang.cooldown==0 then + batman.state = batman.states.SHOOT + batman.frames = {5,6,7,7,7} + batman.frame = 1 + -- end end end diff --git a/data/game.lua b/data/game.lua index 1e74169..6d2b7b2 100644 --- a/data/game.lua +++ b/data/game.lua @@ -1,5 +1,6 @@ require "mapa" require "batman" +require "batarang" game = { num = 1, @@ -20,12 +21,14 @@ game = { surf.cls(66) mapa.draw(1) + batarang.draw() if batman.layer==1 then batman.draw() end mapa.draw(2) if batman.layer==2 then batman.draw() end if sys.beat() then batman.update() + batarang.update() end --view.origin(0,0)