From 4c2c8dc84f6cdfd244083994846f3798d74d4b95 Mon Sep 17 00:00:00 2001 From: JailGamer Date: Sun, 5 Apr 2026 16:17:24 +0200 Subject: [PATCH] =?UTF-8?q?[NEW]=20Switchs=20i=20triggers=20dependents=20e?= =?UTF-8?q?nlla=C3=A7ats=20[NEW]=20Visi=C3=B3=20remota=20al=20obrir-se=20u?= =?UTF-8?q?na=20porta?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/game.lua | 20 ++++++++++++++++---- data/helpers.lua | 25 +++++++++++++++++++++++++ data/remote_view.lua | 36 ++++++++++++++++++++++++++++++++++++ data/stage1.lua | 24 +++++++++++++----------- data/trigger.lua | 19 ++++++++++++++----- 5 files changed, 104 insertions(+), 20 deletions(-) create mode 100644 data/remote_view.lua diff --git a/data/game.lua b/data/game.lua index fa21cb8..3dae50f 100644 --- a/data/game.lua +++ b/data/game.lua @@ -17,6 +17,7 @@ require "trigger" require "imp" require "stage1" +require "remote_view" local DEBUG = true @@ -106,16 +107,17 @@ function game_init(menu) table.insert(actors,abad) score.create() - -- game_update=update_game flow:next() end -function render_map( sf_map, sf_tiles, x, y ) + +function render_map( sf_map, sf_tiles, x, y, target ) + target = target or 0 map.surf(sf_map) map.cell(16, 16) surf.source(sf_tiles) - surf.target(0) + surf.target(target) view.origin(-x,-y) map.draw() view.origin(0,0) @@ -196,6 +198,8 @@ function world_draw() end cacau:draw() + + remote_view_draw() end function update_game() @@ -314,9 +318,16 @@ function special_keys() mapa_restore_backup() viewp:free_move() end + if key.press(key.N8) then + -- abad go to room + local abad_x, abad_y = coords.room_to_world ( 31, 8, 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 -- abad go to room - local abad_x, abad_y = coords.room_to_world ( 54, 6, 3 ) + local abad_x, abad_y = coords.room_to_world ( 34, 3, 3 ) print(abad_x..", "..abad_y) abad:move(abad_x, abad_y) local scr_ax, scr_ay = viewp:screen_coords(abad_x, abad_y) @@ -324,6 +335,7 @@ function special_keys() end function debug_info() + if true then return end font.current(font_default) viewp:print() msg_print(0,14,"ABAD= "..abad.x..", "..abad.y, true) diff --git a/data/helpers.lua b/data/helpers.lua index c20bced..4b4244a 100644 --- a/data/helpers.lua +++ b/data/helpers.lua @@ -18,6 +18,31 @@ function remove_actor(actor) end end +function disable_actor_by_id( remove_set ) + local id_list = {} + local ok = false + -- Construir llista per a eliminar + if type(remove_set) == "string" then + id_list[remove_set] = true + ok = true + elseif type(remove_set) == "table" then + for _, v in ipairs(remove_set) do + ok = true + id_list[v] = true + end + end + + -- eliminar + if ok then + for index, actor in pairs(actors) do + if id_list[actor.id] then + -- actors[index]=nil + actor.enabled=false + end + end + end +end + function draw_shiny_rect(x, y, w, h, color, shine_color) draw.rect(x,y,w,h,color) diff --git a/data/remote_view.lua b/data/remote_view.lua new file mode 100644 index 0000000..16e97df --- /dev/null +++ b/data/remote_view.lua @@ -0,0 +1,36 @@ +remote_view_wait = 0 +remote_view_hab = "" +remote_sf_w = mapa_room_cols*arcade_config.tiles_width +remote_sf_h = mapa_room_rows*arcade_config.tiles_height + +function remote_view_init () + sf_remote=surf.new(remote_sf_w, remote_sf_h) +end + +function remote_view(hab) + remote_view_hab = hab + remote_view_wait = 200 +end + +function remote_view_draw() + if remote_view_wait>0 then + local x,y = coords.room_to_coord ( remote_view_hab ) + + local curr_source = surf.source() + local curr_target = surf.target() + + surf.target(sf_remote) + surf.cls(16) + render_map(sf_mapa, tiles, x, y, sf_remote ) + + surf.source(curr_source) + surf.target(curr_target) + + local curr_source = surf.source() + surf.source(sf_remote) + draw.surf(0,0,remote_sf_w,remote_sf_h,11,11,(remote_sf_w/2)-2,(remote_sf_h/2)-2) + draw.rect(10,10,(remote_sf_w/2),(remote_sf_h/2),2) + surf.source(curr_source) + remote_view_wait = remote_view_wait-1 + end +end \ No newline at end of file diff --git a/data/stage1.lua b/data/stage1.lua index 5fa403a..9cb385b 100644 --- a/data/stage1.lua +++ b/data/stage1.lua @@ -70,26 +70,26 @@ function stages.stage1_init() -- TRIGGERS -- if not menu then table.insert(actors,trigger.new(10,57,32,triggers.escena_abad_inici)) end - table.insert( actors, trigger.new(10,7,3,triggers.escena_abad_inici,"inici")) - table.insert( actors, trigger.new(11,2,3,triggers.escena_abad_corfes,"corfes")) + table.insert( actors, trigger.new(10,7,3,triggers.escena_abad_inici,"inici","TR01") ) + table.insert( actors, trigger.new(11,2,3,triggers.escena_abad_corfes,"corfes","TR02") ) - table.insert( actors, trigger.new(31,1,3,triggers.escena_abad_portes,"portes")) - table.insert( actors, trigger.new(31,6,3,triggers.escena_abad_portes,"portes")) - table.insert( actors, trigger.new(71,7,3,triggers.escena_abad_portes,"portes")) + table.insert( actors, trigger.new(31,1,3,triggers.escena_abad_portes,"portes","TR03") ) + table.insert( actors, trigger.new(31,6,3,triggers.escena_abad_portes,"portes","TR04") ) + table.insert( actors, trigger.new(71,7,3,triggers.escena_abad_portes,"portes","TR05") ) - table.insert( actors, trigger.new(53,5,3,triggers.escena_abad_porta_casa,"porta casa")) - table.insert( actors, trigger.new(56,4,3,triggers.escena_abad_porta_batman,"porta batman")) + table.insert( actors, trigger.new(53,5,3,triggers.escena_abad_porta_casa,"porta casa","TR06")) + table.insert( actors, trigger.new(56,4,3,triggers.escena_abad_porta_batman,"porta batman","TR07")) table.insert( actors, trigger.new(19,32,32,triggers.escena_habitacio_batman,"habitacio batman")) -- table.insert( actors, trigger.new(55,1,3,triggers.escena_lluita_imp,"lluita imp")) table.insert( actors, trigger.new(10,8,1,triggers.open_door,"","primera porta","switch",{11, 57,45}) ) - table.insert( actors, trigger.new(34,1,1,triggers.open_door,"","dos portes casa abad","switch",{32, 50,38,26,53,41,29}) ) - table.insert( actors, trigger.new(52,1,1,triggers.open_door,"","porta casa abad","switch",{72, 42,30}) ) - table.insert( actors, trigger.new(60,1,1,triggers.open_door,"","altillo","switch",{54, 54,42}) ) + table.insert( actors, trigger.new(34,1,1,triggers.open_door,"","dos portes casa abad","switch",{32, 50,38,26,53,41,29},{"TR03","TR04"}) ) + table.insert( actors, trigger.new(52,1,1,triggers.open_door,"","porta casa abad","switch",{72, 42,30},{"TR05"}) ) + table.insert( actors, trigger.new(60,1,1,triggers.open_door,"","altillo","switch",{54, 54,42},{"TR06"}) ) table.insert( actors, trigger.new(75,6,1,triggers.open_door,"","pasillo inf","switch",{77, 50,38,26}) ) - table.insert( actors, trigger.new(75,9,1,triggers.open_door,"","acces inf casa batman","switch",{57, 53,41}) ) + table.insert( actors, trigger.new(75,9,1,triggers.open_door,"","acces inf casa batman","switch",{57, 53,41},{"TR07"}) ) table.insert( actors, trigger.new(79,5,1,triggers.open_door,"","sotan casa batman","switch",{36, 56,44}) ) table.insert( actors, trigger.new(38,2,2,triggers.open_door,"","","switch",{39, 62,63}) ) @@ -105,6 +105,8 @@ function stages.stage1_init() local scr_ax, scr_ay = viewp:screen_coords(abad_x, abad_y) + remote_view_init() + viewp:free_move() end diff --git a/data/trigger.lua b/data/trigger.lua index b85d9b4..9ff0397 100644 --- a/data/trigger.lua +++ b/data/trigger.lua @@ -1,11 +1,12 @@ trigger={} -function trigger.new(_hab,_x,_y,_action,_escena,_id,_type,_doors) +function trigger.new(_hab,_x,_y,_action,_escena,_id,_type,_doors,_linked_id) local world_x, world_y = coords.room_to_world(_hab,_x,_y) _bb={x=0,y=0,w=16,h=16} --default - if _type=="switch" then _bb={x=0,y=0,w=16,h=17} end + -- 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, @@ -20,17 +21,21 @@ function trigger.new(_hab,_x,_y,_action,_escena,_id,_type,_doors) doors=_doors, update=trigger.update, draw=trigger.draw, + linked_id=_linked_id, enabled=true, bb=_bb } end function trigger:update() - + if not self.enabled then return end if self.hab==abad.hab then if collision(abad,self) then if self.type=="switch" and self.enabled then sound.play(audio_switch) - self.enabled=false + self.enabled=false + if self.linked_id then + disable_actor_by_id(self.linked_id) + end end self:fun() end @@ -38,6 +43,7 @@ function trigger:update() end function trigger:draw() + if self.type~="switch" and not self.enabled then return end local scr_x, scr_y = viewp:screen_coords( self.x, self.y ) if self.type=="switch" then if self.enabled then @@ -63,6 +69,9 @@ triggers={} function triggers:open_door() local hab= self.doors[1]-1 + if hab~=abad.hab then + remote_view(hab) + end for i=2,#self.doors do local tile_idx= self.doors[i]+1 arc_set_tile_by_index(hab,tile_idx,mapa_empty_tile)