From 4e638ce7f5e4716a4c4b22704eba793d679443aa Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Fri, 15 May 2026 10:07:54 +0200 Subject: [PATCH] =?UTF-8?q?fase=201:=20render=20est=C3=A0tic=20del=20mapa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- maps/0.map | Bin 0 -> 1000 bytes maps/1.map | Bin 0 -> 1000 bytes maps/10.map | Bin 0 -> 1000 bytes maps/2.map | Bin 0 -> 1000 bytes maps/3.map | Bin 0 -> 1000 bytes maps/4.map | Bin 0 -> 1000 bytes maps/5.map | Bin 0 -> 1000 bytes maps/6.map | Bin 0 -> 1000 bytes maps/7.map | Bin 0 -> 1000 bytes maps/8.map | Bin 0 -> 1000 bytes maps/9.map | Bin 0 -> 1000 bytes pepe_runner.lua | 106 ++++++++++++++++++++++++++++++++++++++++++++++++ 12 files changed, 106 insertions(+) create mode 100644 maps/0.map create mode 100644 maps/1.map create mode 100644 maps/10.map create mode 100644 maps/2.map create mode 100644 maps/3.map create mode 100644 maps/4.map create mode 100644 maps/5.map create mode 100644 maps/6.map create mode 100644 maps/7.map create mode 100644 maps/8.map create mode 100644 maps/9.map create mode 100644 pepe_runner.lua diff --git a/maps/0.map b/maps/0.map new file mode 100644 index 0000000000000000000000000000000000000000..a62348175c7d24f1b15b5c9a0fbff9f6a4bc7ac5 GIT binary patch literal 1000 zcmd5&K@!9u4D$b9>}MKCWQf|HO{cpN62OjeO+6?}!!sZ}Uf%?!I2$XzQ<#fnpHkRD z87~5u6E@R{+(2BEjfpUfEr#MfY)qoxLVi?tixI#H;({pJo(0I<8tkBS7AT~Le%Lnph8pv zm%&CQZfpYRCuIOXLUux<4aoGYh;p z0&UKynt5PXKpymw*WO2u$z|ON87w=M+Uye8n zQ66MR0jH$XrxdH4eQewU&Py&TX6U3{UmB&Pd43?K=Hvp{eg$U>n(5+FegJg6m9fX+q65D#Mb0pzbi?GLQM4)Pdk nB!N5&^aoA}Ok;+o&++;LIljRmF$AL)Jz61ra2CXpZEphrI`oo# literal 0 HcmV?d00001 diff --git a/maps/4.map b/maps/4.map new file mode 100644 index 0000000000000000000000000000000000000000..3e4462878473aa83f163545f3aacc01b30d97fc4 GIT binary patch literal 1000 zcmcIjK@Pwm2;(vP|0{Og3;fKW42#5>Wr-XNT3RY@A{xyW#--s$1+eW0;2^CtPROr- zhcz(zMg%bUCY1o@3Z&MlXa$g-Wmi4CZe};8qZKCLvqDB+1;Ey7D`OkrR$LzQoHT#6 z3#VAhJ+=UR8&1O;_4nTgUmvlWY0$1!f4;aC0|T&EkIJx0^Gnxka)b*#dJM$tBbQ^!WN;neI`Ee+ZagRGIh(GlC#Dh7AuOXzQm^n&(fJ~sYA`1UU6RCM5da%?8 z`^wyOU0=5z9!eA@<>IUQ`5O^&KDh_>o+#cCh?*g;kMcYNNP0M7CB^IjP7_|$veuV3 gxF^&VXWtYea!B39E;BA*gpd`pG?y<|`B^W@zXRN}{sa4MeU32dEi{t^x25fmT$d zSM2~V9VO-Dq2&qyBcWa{S;qkAt$=1M?UluFxO!YL5H(*#m)Vr#GGO@_TwW;Oy{jJ# V_AJ7&o0=Hd(Z_L7IS14DlwV>VLiqpy literal 0 HcmV?d00001 diff --git a/pepe_runner.lua b/pepe_runner.lua new file mode 100644 index 0000000..fbefe8c --- /dev/null +++ b/pepe_runner.lua @@ -0,0 +1,106 @@ +-- Pepe Runner — port a ascii/Lua del joc original en Turbo Pascal (JailDesigner, 2000) +-- Fase 1: render estatic d'un mapa + +-- Codis CP437 dels sprites del joc original (de TIPOS.PAS) +BUIT = 0 +DINERS = 36 -- $ +PEDRA = 219 -- bloc solid +ESCALA = 205 -- ═ (linia doble horitzontal, formant graons d'escala) +CORDA = 196 -- ─ (linia simple horitzontal) +BLOC1 = 176 -- ░ +BLOC2 = 177 -- ▒ +BLOC3 = 178 -- ▓ +PEPE_C = 2 -- sprite del Pepe +MALO_C = 88 -- 'X' enemics + +-- Colors (de TIPOS.PAS, paleta CGA — coincideix amb la d'ascii) +COL_PEDRA = COLOR_BROWN -- 6 +COL_DINERS = COLOR_YELLOW -- 14 +COL_ESCALA = COLOR_LIGHT_GRAY -- 7 +COL_CORDA = COLOR_LIGHT_GRAY -- 7 +COL_BUIT = COLOR_BLACK -- 0 + +-- Mida del mapa (del joc original) +MAP_W = 40 +MAP_H = 25 + +-- Estat +mapa = {} -- mapa[x][y] = { tipo=, color=, temps= } +level = 1 + +function definir_glifs() + -- Cel·la buida (sobreescrivim el glif 0 del ROM, que no es buit) + setchar(BUIT, 0,0,0,0,0,0,0,0) + + -- Pedra (█) — bloc solid + setchar(PEDRA, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF) + + -- Diners ($) — signe dolar classic + setchar(DINERS, 0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00) + + -- Escala (═) — doble linia horitzontal + setchar(ESCALA, 0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00) + + -- Corda (─) — linia horitzontal simple + setchar(CORDA, 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00) + + -- Blocs degradats (per al fade dels forats) + setchar(BLOC1, 0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11) -- ░ light + setchar(BLOC2, 0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55) -- ▒ medium + setchar(BLOC3, 0xBB,0xEE,0xBB,0xEE,0xBB,0xEE,0xBB,0xEE) -- ▓ dark + + -- Pepe (cara feliç tipus CP437 char 2 ☻) + setchar(PEPE_C, 0x7E,0x81,0xA5,0x81,0xBD,0x99,0x81,0x7E) + + -- Enemic — una 'X' marcada + setchar(MALO_C, 0x00,0xC3,0x66,0x3C,0x18,0x3C,0x66,0xC3) +end + +-- Retorna el color associat a un tipus de cel·la +function color_de(tipo) + if tipo == PEDRA then return COL_PEDRA end + if tipo == DINERS then return COL_DINERS end + if tipo == ESCALA then return COL_ESCALA end + if tipo == CORDA then return COL_CORDA end + return COL_BUIT +end + +-- Carrega un mapa des d'un fitxer .map (1000 bytes, column-major: byte[x*25+y]) +-- Estrategia: filein() a l'adreca 0 (sobreescriu char_screen), llegim amb peek() +-- a una taula Lua, i despres fem cls() per netejar la pantalla. +function carregar_mapa(num) + filein("maps/"..tostr(num)..".map", 0, MAP_W*MAP_H) + for x = 0, MAP_W-1 do + mapa[x] = {} + for y = 0, MAP_H-1 do + local tipo = peek(x*MAP_H + y) + mapa[x][y] = { tipo=tipo, color=color_de(tipo), temps=-1 } + end + end +end + +function pintar_mapa() + for x = 0, MAP_W-1 do + for y = 0, MAP_H-1 do + local c = mapa[x][y] + if c.tipo ~= BUIT then + color(c.color, COL_BUIT) + print(chr(c.tipo), x, y) + end + end + end +end + +function init() + mode(1) -- 40x30 chars, color per cel·la + border(COLOR_BLUE) + color(COLOR_LIGHT_GRAY, COLOR_BLACK) + definir_glifs() + carregar_mapa(level) + cls() -- neteja despres del filein (que ha escrit a char_screen) + pintar_mapa() +end + +function update() + -- Fase 1: nomes render estatic, res que actualitzar encara +end