From 5aa9dd5051e5c98151df7d078ac7a75d484fca75 Mon Sep 17 00:00:00 2001 From: JailGamer Date: Sun, 5 Apr 2026 17:32:08 +0200 Subject: [PATCH] [WIP] Lluita contra jefes. Eliminats actors de la zona de combat --- data/caco.lua | 8 +++++++- data/game.lua | 1 + data/helpers.lua | 46 ++++++++++++++++++++++++++++++++++++++++++++++ data/stage1.lua | 4 +++- data/trigger.lua | 2 +- data/zombie.lua | 12 ++++++++---- 6 files changed, 66 insertions(+), 7 deletions(-) diff --git a/data/caco.lua b/data/caco.lua index 1ceb7ec..fd9a55d 100644 --- a/data/caco.lua +++ b/data/caco.lua @@ -29,10 +29,13 @@ function caco.new(_hab,_x,_y,_flip) dying=false, death_time=40, anim={19,19,20,21}, - bb={x=4,y=4,w=24,h=16} } + bb={x=4,y=4,w=24,h=16}, + enabled= true, + disable_reason="" } end function caco:draw() + if not self.enabled then return end -- if self.frame>0 then draw.surf((self.frame&7)*16,(self.frame>>3)*16,16,16,self.x,self.y,16,16,self.flip) end if self.warping then @@ -62,6 +65,7 @@ function caco:draw() end function caco:update_normal() + if not self.enabled then return end self.wait=self.wait+1 if self.wait==6 then @@ -116,6 +120,7 @@ function caco:update_normal() end function caco:update_hit() + if not self.enabled then return end local step_time = self.death_time if self.can_warp then step_time = self.death_time/3; -- warp, wait, appear @@ -181,6 +186,7 @@ function caco:update_hit() end function caco:hit() + if not self.enabled then return end self.update=caco.update_hit if self.can_warp then self.warping=true end diff --git a/data/game.lua b/data/game.lua index 3dae50f..e2bdad7 100644 --- a/data/game.lua +++ b/data/game.lua @@ -316,6 +316,7 @@ function special_keys() end if key.press(key.N9) then mapa_restore_backup() + set_actors_enabled_by_room(true, "boss", 44, 55) viewp:free_move() end if key.press(key.N8) then diff --git a/data/helpers.lua b/data/helpers.lua index 4b4244a..3865e12 100644 --- a/data/helpers.lua +++ b/data/helpers.lua @@ -2,6 +2,7 @@ local shine_step = 1 local shine_wait = 0 local shine_pos = 0 local map_backup = {} +local actors_backup = {} function collision(a, b) return (a.x+a.bb.x+a.bb.w >= b.x+b.bb.x) @@ -18,6 +19,51 @@ function remove_actor(actor) end end +function set_actors_enabled_by_room(_enabled, _reason, room0, room1) +print("set_actors_enabled_by_room") +print(" hab_list") + room1 = room1 or room0 + local rw=(room1-room0)%mapa_rooms_per_piso + local hab_list = {} + y = room0 + while y<=room1 do + for x=y, y+rw do + hab_list[x]=true + print(" "..x) + end + y = y+mapa_rooms_per_piso + end + + for index, actor in pairs(actors) do + if hab_list[actor.hab] and actor~=abad then + if actor.name then print(" "..actor.name) end + if actor.disable_reason then print(" "..actor.disable_reason) end + if actor.enabled then print("ENABLED") end + + if not _enabled then + print("DISABLE ACTORS") + -- disable + if actor.enabled then + -- Si el actor està actiu -> deshabilitar amb motiu + actor.enabled=_enabled + actor.disable_reason = _reason + print("-> ".._reason) + end + else + -- enable + if actor.disable_reason and actor.disable_reason==_reason then + -- Si l'actor te un motiu per haver estat deshabilitat -> habilitar i borrar motiu + actor.enabled=_enabled + actor.disable_reason = "" + else + -- Habilitar l'actor si no te atribut disable_reason + actor.enabled=_enabled + end + end + end + end +end + function disable_actor_by_id( remove_set ) local id_list = {} local ok = false diff --git a/data/stage1.lua b/data/stage1.lua index 9cb385b..bfc81ea 100644 --- a/data/stage1.lua +++ b/data/stage1.lua @@ -99,7 +99,7 @@ function stages.stage1_init() -- table.insert(actors,trigger.new(61,8,32,triggers.teleport_d)) local abad_x, abad_y = coords.room_to_world ( 10, 4, 3 ) - -- local abad_x, abad_y = coords.room_to_world ( 54, 8, 3 ) + local abad_x, abad_y = coords.room_to_world ( 54, 8, 3 ) abad:move(abad_x, abad_y) abad_make_safe( true ) @@ -116,6 +116,8 @@ end function stage1_boss() load_tilemap( sf_mapa, stage1_boss_mapa ) + -- actors_in_room_backup_and_remove(stage1_boss_mapa.r0.r,stage1_boss_mapa.r1.r) + set_actors_enabled_by_room(false, "boss", stage1_boss_mapa.r0.r, stage1_boss_mapa.r1.r) viewp:fixed({l=8,r=44,u=0,d=0}) end diff --git a/data/trigger.lua b/data/trigger.lua index 9ff0397..b206d4a 100644 --- a/data/trigger.lua +++ b/data/trigger.lua @@ -6,7 +6,6 @@ function trigger.new(_hab,_x,_y,_action,_escena,_id,_type,_doors,_linked_id) -- if _type=="switch" then _bb={x=0,y=0,w=16,h=17} end if _id then print("NEW => ".._id) end _type = _type or "invisible" -if _linked_id then print("LINKED => ".._id.." -> ".._linked_id[1].." +") end return { name="trigger", type=_type, @@ -23,6 +22,7 @@ if _linked_id then print("LINKED => ".._id.." -> ".._linked_id[1].." +") end draw=trigger.draw, linked_id=_linked_id, enabled=true, + disable_reason="", bb=_bb } end diff --git a/data/zombie.lua b/data/zombie.lua index 39d9b78..99e821c 100644 --- a/data/zombie.lua +++ b/data/zombie.lua @@ -29,10 +29,13 @@ function zombie.new(_hab,_x,_y,_flip) angle=0, d_angle=15, dying=false, - death_time=40} + death_time=40, + enabled=true, + disable_reason=""} end function zombie:draw() + if not self.enabled then return end -- if self.frame>0 then draw.surf((self.frame&7)*16,(self.frame>>3)*16,16,16,self.x,self.y,16,16,self.flip) end -- if self.frame>0 then draw.surf((self.frame&7)*cw,(self.frame>>cxr2)*ch,cw,ch,self.x*o2aX,self.y*o2aX,cw,ch,self.flip) end if self.warping then @@ -46,6 +49,7 @@ function zombie:draw() end function zombie:update_normal() + if not self.enabled then return end self.wait=self.wait+1 if self.wait==18 then @@ -91,7 +95,8 @@ function zombie:update_normal() --end end -function zombie:update_hit() +function zombie:update_hit() + if not self.enabled then return end self.wait=self.wait+1 if self.wait>=6 then @@ -116,11 +121,10 @@ function zombie:update_hit() end end end - - end function zombie:hit() + if not self.enabled then return end self.update=zombie.update_hit if self.can_warp then self.warping=true end