From 2900f98ad7c594151af472e886f727a1b7f161c5 Mon Sep 17 00:00:00 2001 From: JailGamer Date: Fri, 20 Mar 2026 20:59:00 +0100 Subject: [PATCH] Viewport es mou a l'abad --- data/abad.lua | 382 ++++++++++++++++++++++++++++++++++++++++++++++ data/dead.lua | 46 ++++++ data/game.lua | 87 +++++++++-- data/mapa.lua | 44 ++++++ data/tiles.gif | Bin 11715 -> 11755 bytes data/viewport.lua | 8 +- 6 files changed, 555 insertions(+), 12 deletions(-) create mode 100644 data/abad.lua create mode 100644 data/dead.lua diff --git a/data/abad.lua b/data/abad.lua new file mode 100644 index 0000000..2cb2622 --- /dev/null +++ b/data/abad.lua @@ -0,0 +1,382 @@ +local arcade_config = require("arcade_config") +o2aX = arcade_config.org2arc_escala +cxr = arcade_config.character_per_row-1 +cxr2 = arcade_config.character_per_row_base2 +cw = arcade_config.character_width +ch = arcade_config.character_height + +require "dead" + +abad={ x=40, y=24, + flip=false, + frame=1, + wait=0, + respawning=0, + hab=10, + vides=3, + energia=40, + falling=0, + step=0, + mustep=1, + hurting=0, + update=nil, + jumpfwd=false, + anim={0,1,0,2}, + bb={x=4,y=0,w=8,h=16}, + safe={hab=10,x=40,y=24} } + +function abad_nop() +end + +function abad_init() + abad={ x=40, y=24, + flip=false, + frame=1, + wait=0, + respawning=0, + hab=10, + vides=3, + energia=40, + falling=0, + step=0, + mustep=1, + draw=abad.draw, + hurting=0, + update=nil, + jumpfwd=false, + anim={0,1,0,2}, + bb={x=4,y=0,w=8,h=16}, + safe={hab=10,x=40,y=24}, + move=abad.move } + abad.update=abad_state_normal + abad.objects={} +end + +function abad:move( x, y ) + self.x = x + self.y = y +end + +function abad:draw() + local flip=abad.flip + if abad.update==abad_state_stairs then + flip=(((abad.x>>1)+(abad.y>>1))%2)==0 + end + if (abad.respawning==0) or (math.floor(abad.respawning/15)%2==0) then + -- draw.surf(abad.frame*16,0,16,16,abad.x,abad.y,16,16,flip) + local x, y = viewp:screen_coords(self.x, self.y) + -- draw.surf(abad.frame*cw,0,cw,ch,abad.x*o2aX,abad.y*o2aX,cw,ch,flip) + draw.surf(abad.frame*cw,0,cw,ch,x,y,cw,ch,flip) + end + + if abad.respawning > 0 then + abad.respawning=abad.respawning-1 + end +end + +function abad_make_safe() + if abad.safe.hab~=abad.hab then + abad.safe.hab=abad.hab + abad.safe.x=abad.x + abad.safe.y=abad.y + end +end + +function abad_hurt(howmuch) + if abad.hurting == 0 and abad.respawning==0 then + sound.play(audio_abad_hit) + abad.energia=abad.energia-howmuch + -- abad.energia=abad.energia + if abad.energia<=0 then + abad.vides=abad.vides-1 + if abad.vides==0 then + --final de la partida + dead.start() + music.play(audio_game_over,0) + else + music.play(audio_life_lost,0) + abad.energia=40 + abad.hab=abad.safe.hab + abad.x=abad.safe.x + abad.y=abad.safe.y + abad.hurting=60 + abad.update=abad_state_normal + abad.bb.y=0 + abad.bb.h=16 + abad.respawning=240 + surf.cls(3) + end + else + surf.cls(3) + end + end +end + +function abad_state_normal() + abad.frame=0 + abad.wait=0 + abad.step=0 + abad.jumpfwd=false + if abad.hurting > 0 then + abad.hurting=abad.hurting-1 + return + end + + if abad.falling>0 then + if abad.falling>12 then + abad_hurt(abad.falling-12) + end + abad.falling=0 + end + abad_make_safe() + + if key.down(keyRight) or pad.down(btnRight) then + abad.update=abad_state_walking + abad.flip=false + elseif key.down(keyLeft) or pad.down(btnLeft) then + abad.update=abad_state_walking + abad.flip=true + elseif key.down(keyJump) or pad.down(btnJump) then + abad.update=abad_state_jumping + abad.step=0 + abad.jumpfwd=false + if abad.jump then + sound.stop(abad.jump) + abad.jump=nil + end + sound.play(audio_abad_jump) + elseif key.down(keyDown) or pad.down(btnDown) then + abad.update=abad_state_crouch + --elseif btn(KEY_Z) then + -- abad.respawning=240 + elseif key.down(keyShoot) or pad.down(btnShoot) and cacau.hab==-1 then + sound.play(audio_abad_shot) + abad.update=abad_state_fire + abad.wait=0 + cacau.init(abad.hab,abad.x+8,abad.y+8,abad.flip) + end +end + +function abad_state_crouch() + abad.bb.y=8 + abad.bb.h=8 + abad.frame=5 + abad.wait=0 + abad.step=0 + abad.jumpfwd=false + + if not (key.down(keyDown) or pad.down(btnDown)) then + abad.update=abad_state_normal + abad.bb.y=0 + abad.bb.h=16 + end +end + +function abad_state_fire() + abad.frame=6 + + abad.wait=abad.wait+1 + + if abad.wait==6 then + abad.wait=0 + abad.update=abad_state_normal + end +end + +function abad_advance() + local inc=12 if abad.flip then inc=2 end + local limit=tiletype.block + if abad.update~=abad_state_walking then limit=tiletype.half end + if not abad.flip and abad.x==84 then + abad.hab=abad.hab+1 + -- imp.reset() + abad.x=-4 + elseif arc_check_tile(abad.x+inc,abad.y+14)0 then + if check_tile(abad.hab,abad.x+4,abad.y-2)~=tiletype.block then + if (abad.x+4)&7==0 or check_tile(abad.hab,abad.x+12,abad.y-2)~=tiletype.block then + + if check_tile(abad.hab,abad.x+4,abad.y-2)==tiletype.switch then + -- Executar el switch + local xx=math.min(11,math.max(0,math.floor((abad.x+4)/8))) + local yy=math.min(5,math.max(0,math.floor((abad.y-2)/8))) + switches.start(abad.hab,1+xx+yy*12) + --cls(4) + elseif (abad.x+4)&7~=0 and check_tile(abad.hab,abad.x+12,abad.y-2)==tiletype.switch then + -- Executar el switch + local xx=math.min(11,math.max(0,math.floor((abad.x+12)/8))) + local yy=math.min(5,math.max(0,math.floor((abad.y-2)/8))) + switches.start(abad.hab,1+xx+yy*12) + --cls(4) + else + abad.y=abad.y-2 + end + end + end + else + abad.hab=abad.hab-10 + imp.reset() + abad.y=32 + end + elseif abad.step>6 then + abad.update=abad_state_falling + abad.jump=sound.play(audio_abad_fall) + end + abad.step=abad.step+1 + end + +end + +function abad_state_falling() + abad.frame=3 + abad.wait=abad.wait+1 + + if abad.wait==6 then + abad.wait=0 + + if abad.jumpfwd then abad_advance() end + + local xx=math.floor((abad.x+4)/8) + local yy=math.floor((abad.y+16)/8) + + if abad.y<32 then + if (abad.y+16)&7==0 and (check_tile(abad.hab,abad.x+4,abad.y+16)>=tiletype.half or ((abad.x+4)&7~=0 and check_tile(abad.hab,abad.x+12,abad.y+16)>=tiletype.half)) then + abad.update=abad_state_normal + return + end + abad.y=abad.y+2 + abad.falling=abad.falling+1 + else + abad.hab=abad.hab+10 + -- imp.reset() + abad.y=0 + end + end +end + +function abad_state_stairs() + abad.frame=4 + abad.wait=abad.wait+1 + + if abad.wait==6 then + abad.wait=0 + + if key.down(keyRight) or pad.down(btnRight) then + abad.flip=false + abad_advance() + sound.play(audio_low) + elseif key.down(keyLeft) or pad.down(btnLeft) then + abad.flip=true + abad_advance() + sound.play(audio_low) + elseif key.down(keyUp) or pad.down(btnUp) then + if abad.y>0 then + if check_tile(abad.hab,abad.x+4,abad.y+8)==tiletype.stair or (abad.x+4)&7~=0 and check_tile(abad.hab,abad.x+12,abad.y+8)==tiletype.stair then + abad.y=abad.y-2 + sound.play(audio_low) + end + else + abad.hab=abad.hab-10 + imp.reset() + abad.y=32 + end + elseif key.down(keyDown) or pad.down(btnDown) then + if abad.y<32 then + if check_tile(abad.hab,abad.x+4,abad.y+16)==tiletype.stair or (abad.x+4)&7~=0 and check_tile(abad.hab,abad.x+12,abad.y+16)==tiletype.stair then + abad.y=abad.y+2 + sound.play(audio_low) + end + else + abad.hab=abad.hab+10 + imp.reset() + abad.y=0 + end + end + end +end \ No newline at end of file diff --git a/data/dead.lua b/data/dead.lua new file mode 100644 index 0000000..3037e20 --- /dev/null +++ b/data/dead.lua @@ -0,0 +1,46 @@ +dead={} + +function dead.start() + dead.count=0 + dead.pos={} + dead.vel={} + for i=1,128 do + dead.pos[i]=0 + dead.vel[i]=(200+math.random(0,399))/400 + end + game_update=dead.update +end + +function dead.update() + dead.count=dead.count+1 + for i=1,128 do + if dead.pos[i]<96 then + dead.pos[i]=dead.pos[i]+dead.vel[i] + draw.vline(i-1,0,dead.pos[i],16) + end + end + if dead.count>50 then + if dead.count>130 then + draw.text("GAME OVER",44,40,2) + elseif dead.count>120 then + draw.text("GAME OVE",44,40,2) + elseif dead.count>110 then + draw.text("GAME OV",44,40,2) + elseif dead.count>100 then + draw.text("GAME O",44,40,2) + elseif dead.count>90 then + draw.text("GAME",44,40,2) + elseif dead.count>80 then + draw.text("GAM",44,40,2) + elseif dead.count>70 then + draw.text("GA",44,40,2) + elseif dead.count>60 then + draw.text("G",44,40,2) + end + end + + if (dead.count>250 and (key.press(keyShoot) or pad.press(btnShoot))) or dead.count>500 then + game_exit() + game_init(true) + end +end \ No newline at end of file diff --git a/data/game.lua b/data/game.lua index dbf468d..68c98c9 100644 --- a/data/game.lua +++ b/data/game.lua @@ -1,5 +1,7 @@ require "fps" require "mapa" +require "abad" + local viewport= require("viewport") local arcade_config = require("arcade_config") @@ -8,9 +10,20 @@ local tile_h = arcade_config.tiles_height local res_w = arcade_config.resolucion.width local res_h = arcade_config.resolucion.height -local viewp = viewport.new() +viewp = viewport.new() +viewp:position(0,0) + +actors={} function game_init(menu) + + abad_init() + table.insert(actors,abad) + local abad_x, abad_y = arc_mapa_get_coords ( 10, 4, 3 ) + print(abad_x..", "..abad_y) + abad:move(abad_x, abad_y) + local scr_ax, scr_ay = viewp:screen_coords(abad_x, abad_y) + game_update=update_game end @@ -59,19 +72,71 @@ function update_game() --- --- mapa_update(abad.hab,cameras[current_camera].hab) - local vp_x, vp_y = viewp:position() - if key.down(keyRight) then - if vp_x+1<=(tile_w*mapa_room_cols*(mapa_rooms_per_piso))-(res_w) then vp_x = vp_x+1 end - elseif key.down(keyLeft) then - if vp_x>0 then vp_x = vp_x-1 end - elseif key.down(keyUp) then - if vp_y>0 then vp_y = vp_y -1 end - elseif key.down(keyDown) then - if vp_y+1<=(tile_h*mapa_room_rows*mapa_pisos)-(res_h) then vp_y = vp_y+1 end - end + --local vp_x, vp_y = viewp:position() + --if key.down(keyRight) then + -- if vp_x+1<=(tile_w*mapa_room_cols*(mapa_rooms_per_piso))-(res_w) then vp_x = vp_x+1 end + --elseif key.down(keyLeft) then + -- if vp_x>0 then vp_x = vp_x-1 end + --elseif key.down(keyUp) then + -- if vp_y>0 then vp_y = vp_y -1 end + --elseif key.down(keyDown) then + -- if vp_y+1<=(tile_h*mapa_room_rows*mapa_pisos)-(res_h) then vp_y = vp_y+1 end + --end + + if key.press(key.N1) then + local hab = math.random(0, 79) + local abad_x, abad_y = arc_mapa_get_coords ( hab, 4, 3 ) + print(abad_x..", "..abad_y) + abad:move(abad_x, abad_y) + local scr_ax, scr_ay = viewp:screen_coords(abad_x, abad_y) + end + if key.press(key.N0) then + local abad_x, abad_y = arc_mapa_get_coords ( 10, 4, 3 ) + print(abad_x..", "..abad_y) + abad:move(abad_x, abad_y) + local scr_ax, scr_ay = viewp:screen_coords(abad_x, abad_y) + end + for key,actor in pairs(actors) do + actor:update() + --if actor.hab==cacau.hab and actor~=abad then + -- if aabb(actor,cacau) then + -- if actor.hit~=nil then + -- actor:hit() + -- cacau.hab=-1 + -- end + -- end + --end + end + local vp_x = viewp.x + local vp_y = viewp.y + --viewp:position(vp_x, vp_y) + + local vp_center_offset_x = (viewp.width >> 1) + local vp_center_offset_y = (viewp.height >> 1) + + vp_x = abad.x - vp_center_offset_x + if vp_x < 0 then vp_x = 0 end + + vp_y = abad.y - vp_center_offset_y + if vp_y < 0 then vp_y = 0 end + viewp:position(vp_x, vp_y) render_map(sf_mapa, tiles, vp_x, vp_y) + for key,actor in pairs(actors) do + -- if actor.hab==hab then + if true then + actor:draw() + end + end + fps_print() viewp:print() + msg_print(0,14,"ABAD= "..abad.x..", "..abad.y) + msg_print(0,21,"VIEW= "..vp_x..", "..vp_y) end + +function msg_print(x, y, msg ) + draw.rectf(x,y,45,14,16) + draw.text(msg,x+1,y+1,2) +end \ No newline at end of file diff --git a/data/mapa.lua b/data/mapa.lua index 0af1d94..9aa63ac 100644 --- a/data/mapa.lua +++ b/data/mapa.lua @@ -153,6 +153,50 @@ function check_tile(hab,x,y) end end +function arc_mapa_get_coords ( hab, tile_x , tile_y ) + -- La primera habitació es la 0 + -- El primer tile es 0 + x = ((hab % 10)*mapa_room_cols + tile_x)*arcade_config.tiles_width + y = (math.floor(hab/10)*mapa_room_rows + tile_y)*arcade_config.tiles_height + + return x, y +end + +function arc_mapa_get_map_coords ( x, y ) + local tw = arcade_config.tiles_width + local th = arcade_config.tiles_height + local cols = mapa_room_cols + local rows = mapa_room_rows + local rooms_per_floor = mapa_rooms_per_piso + + local calc_col = math.floor(x / tw) % cols + local calc_row = math.floor(y / th) % rows + local calc_room = math.floor(y / (th * rows))*rooms_per_floor+math.floor(x / (tw * cols)) + + return calc_room, calc_col, calc_row +end + +function arc_check_tile(x,y) + -- local xx=math.min(11,math.max(0,math.floor(x/8))) + -- local yy=math.min(5,math.max(0,math.floor(y/8))) + --rect(xx*8,yy*8,xx*8+8,yy*8+8,3) + local hab, xx, yy = arc_mapa_get_map_coords(x, y) + local tile=mapa_get_tile(hab,xx,yy) + if tile<8 then + return tiletype.half + elseif tile<15 then + return tiletype.stair + elseif tile==15 then + return tiletype.switch + elseif tile<64 then + return tiletype.block + elseif tile==111 then + return tiletype.nonpc + else + return tiletype.void + end +end + pix={14,10,7,1,0,0,0,0,4,4,4,4,0,0,0,8,14,14,14,14,14,14,0,0,10,10,10,10,10,10,10,10,7,7,7,7,7,7,2,2,1,1,1,1,1,1,12,12,1,1,1,9,9,9,10,10,10,0,0,0,0,0,0,0} function mapa_create_minimap() diff --git a/data/tiles.gif b/data/tiles.gif index 1ba5b25e0f0b26801d146dc8158ce843244448e7..8a6bf5c9c1da15e4c87526209caff0586919b5d1 100644 GIT binary patch delta 10960 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 delta 10920 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