DX: paleta configurable i fons unificat darrere dels glifs
This commit is contained in:
+26
@@ -20,3 +20,29 @@
|
||||
-- (En els dos casos el char 0 es reescriu a zeros, perque el ROM d'ascii
|
||||
-- hi te una caixa hueca que taparia tot el mapa.)
|
||||
skin = "native"
|
||||
|
||||
-- ====================================================================
|
||||
-- PALETA DE COLORS
|
||||
-- ====================================================================
|
||||
-- Constants disponibles:
|
||||
-- COLOR_BLACK=0 COLOR_BLUE=1 COLOR_GREEN=2 COLOR_CYAN=3
|
||||
-- COLOR_RED=4 COLOR_MAGENTA=5 COLOR_BROWN=6 COLOR_LIGHT_GRAY=7
|
||||
-- COLOR_DARK_GRAY=8 COLOR_LIGHT_BLUE=9 COLOR_LIGHT_GREEN=10
|
||||
-- COLOR_LIGHT_CYAN=11 COLOR_LIGHT_RED=12 COLOR_LIGHT_MAGENTA=13
|
||||
-- COLOR_YELLOW=14 COLOR_WHITE=15
|
||||
--
|
||||
-- Pots sobreescriure nomes les que vulgues. Comenta una linia
|
||||
-- per a deixar el valor per defecte.
|
||||
|
||||
-- colors.bg = COLOR_BLUE -- fons del nivell
|
||||
-- colors.pedra = COLOR_BROWN -- murs i blocs degradats
|
||||
-- colors.diners = COLOR_YELLOW -- $ monedes
|
||||
-- colors.escala = COLOR_LIGHT_CYAN -- ═ escales
|
||||
-- colors.corda = COLOR_LIGHT_GRAY -- ─ cordes
|
||||
-- colors.pepe = COLOR_WHITE -- el protagonista
|
||||
-- colors.malo = COLOR_LIGHT_RED -- enemics
|
||||
-- colors.malo_carrega = COLOR_LIGHT_MAGENTA -- enemic portant diners
|
||||
-- colors.hud_text = COLOR_WHITE -- text del rotul inferior
|
||||
-- colors.hud_bg = COLOR_BLACK -- fons del rotul inferior
|
||||
-- colors.border = COLOR_BLUE -- vora exterior de la finestra
|
||||
-- colors.title = COLOR_LIGHT_RED -- GAME OVER / NOU RECORD
|
||||
|
||||
+66
-39
@@ -39,12 +39,24 @@ SKINS = {
|
||||
}
|
||||
glif = SKINS.custom -- s'actualitza a init() segons la config
|
||||
|
||||
-- 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
|
||||
-- Paleta — tots els colors son sobreescriuibles per config.lua.
|
||||
-- bg es el color del fons del nivell (pintat tant a les cel·les buides com
|
||||
-- darrere de cada glif), per a que tot quede integrat en lloc de tindre
|
||||
-- negre darrere dels caracters.
|
||||
colors = {
|
||||
bg = COLOR_BLUE, -- fons del nivell
|
||||
pedra = COLOR_BROWN,
|
||||
diners = COLOR_YELLOW,
|
||||
escala = COLOR_LIGHT_CYAN,
|
||||
corda = COLOR_LIGHT_GRAY,
|
||||
pepe = COLOR_WHITE,
|
||||
malo = COLOR_LIGHT_RED,
|
||||
malo_carrega = COLOR_LIGHT_MAGENTA, -- enemic portant diners
|
||||
hud_text = COLOR_WHITE,
|
||||
hud_bg = COLOR_BLACK,
|
||||
border = COLOR_BLUE,
|
||||
title = COLOR_LIGHT_RED,
|
||||
}
|
||||
|
||||
-- Estats (de TIPOS.PAS — son bitflags per a SelectEstat dels enemics)
|
||||
NORMAL = 0
|
||||
@@ -74,7 +86,7 @@ ESTAT_ENTERNAME = "entername"
|
||||
-- Estat global
|
||||
mapa = {} -- mapa[x][y] = { tipo=, color=, temps= }
|
||||
level = 1
|
||||
pepe = { x=19, y=23, dibuix=PEPE_C, color=COLOR_WHITE, vides=VIDES_INI, estat=NORMAL }
|
||||
pepe = { x=19, y=23, dibuix=PEPE_C, color=colors.pepe, vides=VIDES_INI, estat=NORMAL }
|
||||
malos = {}
|
||||
score = 0
|
||||
diners_pantalla = 0
|
||||
@@ -114,12 +126,19 @@ function sfx_malo_die() play("l0o3ao4c") end
|
||||
function sfx_level() play("l1o4ceg") end
|
||||
function sfx_gameover() play("l1o3bal0gfedco2c") end
|
||||
|
||||
-- Neteja la pantalla amb el color de fons configurat (en lloc de negre).
|
||||
function neteja_fons()
|
||||
color(colors.bg, colors.bg)
|
||||
cls()
|
||||
end
|
||||
|
||||
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
|
||||
if tipo == PEDRA then return colors.pedra end
|
||||
if tipo == DINERS then return colors.diners end
|
||||
if tipo == ESCALA then return colors.escala end
|
||||
if tipo == CORDA then return colors.corda end
|
||||
if tipo == BLOC1 or tipo == BLOC2 or tipo == BLOC3 then return colors.pedra end
|
||||
return colors.bg
|
||||
end
|
||||
|
||||
-- Helper segur per llegir el tipus d'una cel·la (fora de mapa = pedra virtual)
|
||||
@@ -146,7 +165,7 @@ function pintar_mapa()
|
||||
for y = 0, MAP_H-1 do
|
||||
local c = mapa[x][y]
|
||||
if c.tipo ~= BUIT then
|
||||
color(c.color, COL_BUIT)
|
||||
color(c.color, colors.bg)
|
||||
print(chr(glif[c.tipo]), x, y)
|
||||
end
|
||||
end
|
||||
@@ -154,7 +173,7 @@ function pintar_mapa()
|
||||
end
|
||||
|
||||
function pintar_pepe()
|
||||
color(pepe.color, COL_BUIT)
|
||||
color(pepe.color, colors.bg)
|
||||
print(chr(glif[pepe.dibuix]), pepe.x, pepe.y)
|
||||
end
|
||||
|
||||
@@ -337,12 +356,12 @@ function update_title()
|
||||
return
|
||||
end
|
||||
|
||||
cls()
|
||||
neteja_fons()
|
||||
pintar_mapa()
|
||||
|
||||
-- "PRESS SPACE TO PLAY" parpadejant
|
||||
if flr(cnt() / 30) % 2 == 0 then
|
||||
color(COLOR_WHITE, COLOR_BLACK)
|
||||
color(COLOR_WHITE, colors.bg)
|
||||
print("PRESS SPACE TO PLAY", 10, 22)
|
||||
end
|
||||
|
||||
@@ -352,12 +371,12 @@ end
|
||||
-- ----- GAME OVER -----
|
||||
function update_gameover()
|
||||
-- Render congelat: ultim estat del joc + overlay "GAME OVER"
|
||||
cls()
|
||||
neteja_fons()
|
||||
pintar_mapa()
|
||||
pintar_malos()
|
||||
pintar_pepe()
|
||||
|
||||
color(COLOR_LIGHT_RED, COLOR_BLACK)
|
||||
color(colors.title, colors.bg)
|
||||
print("G A M E O V E R", 11, 12)
|
||||
|
||||
pintar_hud()
|
||||
@@ -378,12 +397,12 @@ end
|
||||
|
||||
-- ----- ENTER NAME -----
|
||||
function update_entername()
|
||||
cls()
|
||||
color(COLOR_LIGHT_RED, COLOR_BLACK)
|
||||
neteja_fons()
|
||||
color(colors.title, colors.bg)
|
||||
print("NOU RECORD!", 14, 10)
|
||||
color(COLOR_YELLOW, COLOR_BLACK)
|
||||
color(colors.diners, colors.bg)
|
||||
print("SCORE "..string.format("%03d", hi_score), 15, 12)
|
||||
color(COLOR_WHITE, COLOR_BLACK)
|
||||
color(COLOR_WHITE, colors.bg)
|
||||
print("NOM: "..nom_hi_score, 16, 15)
|
||||
print("(A-Z)", 17, 17)
|
||||
|
||||
@@ -429,7 +448,7 @@ function update_playing()
|
||||
end
|
||||
|
||||
-- Render
|
||||
cls()
|
||||
neteja_fons()
|
||||
pintar_mapa()
|
||||
pintar_malos()
|
||||
pintar_pepe()
|
||||
@@ -442,16 +461,16 @@ end
|
||||
|
||||
function init_malos()
|
||||
malos = {
|
||||
{ x= 9, y=2, color=COLOR_CYAN, estat=ESQUERRA, iaclock=0, carrega={ok=false, x=0, y=0} },
|
||||
{ x=20, y=2, color=COLOR_CYAN, estat=ESQUERRA, iaclock=0, carrega={ok=false, x=0, y=0} },
|
||||
{ x=39, y=2, color=COLOR_CYAN, estat=ESQUERRA, iaclock=0, carrega={ok=false, x=0, y=0} },
|
||||
{ x= 9, y=2, color=colors.malo, estat=ESQUERRA, iaclock=0, carrega={ok=false, x=0, y=0} },
|
||||
{ x=20, y=2, color=colors.malo, estat=ESQUERRA, iaclock=0, carrega={ok=false, x=0, y=0} },
|
||||
{ x=39, y=2, color=colors.malo, estat=ESQUERRA, iaclock=0, carrega={ok=false, x=0, y=0} },
|
||||
}
|
||||
end
|
||||
|
||||
function pintar_malos()
|
||||
for i = 1, NUM_MALOS do
|
||||
local m = malos[i]
|
||||
color(m.color, COL_BUIT)
|
||||
color(m.color, colors.bg)
|
||||
print(chr(glif[MALO_C]), m.x, m.y)
|
||||
end
|
||||
end
|
||||
@@ -515,10 +534,10 @@ function mort_malo(m)
|
||||
if m.carrega.ok then
|
||||
local c = mapa[m.carrega.x][m.carrega.y]
|
||||
c.tipo = DINERS
|
||||
c.color = COL_DINERS
|
||||
c.color = colors.diners
|
||||
end
|
||||
m.x = 39; m.y = 1
|
||||
m.color = COLOR_CYAN
|
||||
m.color = colors.malo
|
||||
m.estat = CAENT
|
||||
m.iaclock = 0
|
||||
m.carrega.ok = false
|
||||
@@ -572,7 +591,7 @@ function tic_malos()
|
||||
-- agafar diners
|
||||
if tipo_a(m.x, m.y) == DINERS and not m.carrega.ok then
|
||||
mapa[m.x][m.y].tipo = BUIT
|
||||
m.color = COLOR_LIGHT_CYAN
|
||||
m.color = colors.malo_carrega
|
||||
m.carrega.ok = true
|
||||
m.carrega.x = m.x
|
||||
m.carrega.y = m.y
|
||||
@@ -604,7 +623,7 @@ function check_mapa_complet()
|
||||
for j = 1, MAP_H-2 do
|
||||
if mapa[0][j].tipo == PEDRA then break end
|
||||
mapa[0][j].tipo = ESCALA
|
||||
mapa[0][j].color = COL_ESCALA
|
||||
mapa[0][j].color = colors.escala
|
||||
end
|
||||
end
|
||||
|
||||
@@ -618,15 +637,15 @@ function check_mapa()
|
||||
if t == 0 then
|
||||
c.temps = -1
|
||||
c.tipo = PEDRA
|
||||
c.color = COL_PEDRA
|
||||
c.color = colors.pedra
|
||||
elseif t == 1 or t == BLOC_OUT-1 then
|
||||
c.tipo = BLOC3; c.color = COL_PEDRA; c.temps = t - 1
|
||||
c.tipo = BLOC3; c.color = colors.pedra; c.temps = t - 1
|
||||
elseif t == 2 or t == BLOC_OUT-2 then
|
||||
c.tipo = BLOC2; c.color = COL_PEDRA; c.temps = t - 1
|
||||
c.tipo = BLOC2; c.color = colors.pedra; c.temps = t - 1
|
||||
elseif t == 3 or t == BLOC_OUT-3 then
|
||||
c.tipo = BLOC1; c.color = COL_PEDRA; c.temps = t - 1
|
||||
c.tipo = BLOC1; c.color = colors.pedra; c.temps = t - 1
|
||||
elseif t == 4 or t == BLOC_OUT-4 then
|
||||
c.tipo = BUIT; c.color = COL_BUIT; c.temps = t - 1
|
||||
c.tipo = BUIT; c.color = colors.bg; c.temps = t - 1
|
||||
elseif t > 0 then
|
||||
c.temps = t - 1
|
||||
end
|
||||
@@ -638,7 +657,7 @@ end
|
||||
|
||||
-- HUD: rotul inferior amb level/score/vides/hi-score sobre banda blava
|
||||
function pintar_hud()
|
||||
color(COLOR_LIGHT_GRAY, COLOR_BLUE)
|
||||
color(colors.hud_text, colors.hud_bg)
|
||||
local blank = " "
|
||||
print(blank, 0, 25)
|
||||
print(blank, 0, 26)
|
||||
@@ -650,16 +669,24 @@ function pintar_hud()
|
||||
end
|
||||
|
||||
-- Carrega config.lua si existeix. Si falta o te errors, queden els defaults.
|
||||
-- Despres del dofile, si l'usuari ha fet "colors = {bg=X}" en lloc d'assignar
|
||||
-- camp a camp, hi haura claus que falten. Fem un merge amb les defaults
|
||||
-- guardades per a que no quede res a nil.
|
||||
function carregar_config()
|
||||
local saved = {}
|
||||
for k, v in pairs(colors) do saved[k] = v end
|
||||
pcall(dofile, "config.lua")
|
||||
for k, v in pairs(saved) do
|
||||
if colors[k] == nil then colors[k] = v end
|
||||
end
|
||||
end
|
||||
|
||||
function init()
|
||||
carregar_config()
|
||||
glif = SKINS[skin] or SKINS.custom
|
||||
mode(1)
|
||||
border(COLOR_BLUE)
|
||||
color(COLOR_LIGHT_GRAY, COLOR_BLACK)
|
||||
border(colors.border)
|
||||
color(colors.bg, colors.bg) -- ink no importa, paper=bg perque el cls() final empleni amb bg
|
||||
definir_glifs()
|
||||
carregar_records()
|
||||
init_title()
|
||||
|
||||
Reference in New Issue
Block a user