# Tema de la UI: índexs de paleta, timings, fonts i flags visuals. Tota # clau absent cau al valor compilat a Defaults::UI (veure defaults.hpp). colors: render_info_text: 58 render_info_shadow: 16 canvas_bg: 72 notification_text: 232 notification_bg: 64 exit_text: 71 exit_bg: 2 menu_bg: 2 menu_border: 232 menu_title: 237 menu_label: 58 menu_value: 232 menu_cursor: 71 menu_disabled: 16 hud_bg: 9 hud_label: 58 hud_value: 187 hud_flash: 237 # Rètol de transició de sala (ROOM_INTRO i ROOM_OUTRO). Independents # de notification_* perquè la fase i les notificacions són dos canals # visuals distints: ací pots canviar el color del rètol sense tocar # els missatges del HUD. room_text: 160 room_text_outline: 253 timings: notification_ms: 4000 exit_ms: 4000 fonts: hud: name: "8bithud" gif: "data/fonts/8bithud.gif" fnt: "data/fonts/8bithud.fnt" kerning: 1 placeholder: name: "ari-w9500-condensed-display" gif: "data/fonts/ari-w9500-condensed-display.gif" fnt: "data/fonts/ari-w9500-condensed-display.fnt" kerning: 1 # Font del rètol de transició de sala (ROOM_INTRO i ROOM_OUTRO). room_text: name: "CaesarDressing-Regular" gif: "data/fonts/CaesarDressing-Regular.gif" fnt: "data/fonts/CaesarDressing-Regular.fnt" kerning: 1 menu_title: name: "ari-w9500-display" gif: "data/fonts/ari-w9500-display.gif" fnt: "data/fonts/ari-w9500-display.fnt" kerning: 0 menu_items: name: "ari-w9500-condensed-display" gif: "data/fonts/ari-w9500-condensed-display.gif" fnt: "data/fonts/ari-w9500-condensed-display.fnt" kerning: 0 # Copyright de la TITLE: pixel-art estricte (Tiny5-Regular size 5, # caixa 3×6 px) generat amb font-gen. Diferenciada de la `placeholder` # que pinta el "press start" — així la jerarquia tipogràfica del peu # queda neta. copyright: name: "Tiny5-Regular" gif: "data/fonts/Tiny5-Regular.gif" fnt: "data/fonts/Tiny5-Regular.fnt" kerning: 1 hud: bg_enabled: false entry_ms: 800 # durada de l'animació d'entrada dels tres blocs flash_ms: 250 # durada del flash quan un jugador rep un hit shake_ms: 300 # durada del shake que acompanya el flash # Geometria del popup superior (Notifier). En píxels del canvas, llevat de # slide_ms (durada en ms de l'animació d'entrada i d'eixida; constant # independentment de la mida de la caixa). El padding vertical és asimètric a # propòsit: padding_top > padding_bottom puja una mica el text dins la caixa. # Corbes disponibles: linear, outQuad, inQuad, inOutQuad, outCubic, inCubic. notifier: padding_h: 6 padding_top: 4 padding_bottom: 3 line_gap: 1 margin_top: 3 border_px: 1 slide_ms: 300 slide_in_curve: outCubic slide_out_curve: inCubic # Pausa graduada de la GameScene: el món no para d'un colp, s'atura amb # easing i torna a arrancar amb una altra corba. Els timings es poden # afinar independentment, i les corbes permeten estils diferents entrant # i sortint (p.ex. frenar suau i arrancar seca). Corbes disponibles: # linear, outQuad, inQuad, inOutQuad, outCubic, inCubic. pause: enter_ms: 400 exit_ms: 250 enter_curve: outCubic exit_curve: inCubic # Sons del menú de servei. Els fitxers viuen a data/sounds/. SELECT # acompanya navegació (amunt/avall) i back; ACCEPT acompanya modificació # d'opció (esquerra/dreta/retorn) o entrada a un submenú. sounds: menu_select: "menu_select.wav" menu_accept: "menu_accept.wav" # Disparat quan un jugador prem START a la TITLE (primera pulsació o # la del segon jugador dins de la finestra de STARTING). player_start: "player_start.wav" # Soroll/scratch sincronitzat amb la fase SCAN de LogoScene (scanline # reveal). Es dispara al constructor de l'escena. logo_glitch: "glitch.wav" # Escena TITLE (placeholder visual mentre no hi haja artwork). # `bg_color` i `text_color` són índexs sobre la paleta "ui" (uzebox.pal): # 1 = (36,0,0) gairebé negre amb un mínim de càlid; 31 = (255,109,0) # taronja pur. `duration_ms` és el timeout abans de saltar a la # següent escena (skipable amb tecla no reservada). Els dos # `blink_*_ms` defineixen el cicle del prompt "press start": el text # es veu durant `visible_ms` i s'amaga durant `hidden_ms` repetint-se. title: duration_ms: 30000 bg_color: 1 text_color: 31 # Color del text del © de copyright (peu de la TITLE). Off-white càlid: # índex 183 = (255,218,170), tipus crema/peach, ~90% blanc amb tint càlid. copyright_color: 183 # Color de l'outline del prompt "PRESS START". Marró fosc càlid (índex # 19 = 109,72,0), coherent amb la paleta del logo. Es manté separat de # `copyright_color` perquè l'outline i el text del © tenen rols visuals # diferents (contrast vs. peu informatiu). press_start_outline_color: 19 # Posicions Y dels tres elements verticals de la TITLE, en percentatge # sobre l'alçada del canvas (240 px). El logo s'ancora pel seu top # (la imatge cau cap avall des d'aquest Y); el prompt i el copyright # es centren verticalment sobre la línia. logo_y_percent: 15 prompt_y_percent: 68 copyright_y_percent: 92 # Separació vertical en píxels entre el minilogo i el text del © al peu. mini_logo_gap_px: 2 blink_visible_ms: 800 blink_hidden_ms: 200 # Fase STARTING (entre la primera pulsació de START i el salt a la # següent escena). `starting_ms` és la durada fixa; durant aquesta # fase el parpadeig accelera per `starting_blink_speedup` (2.0 = doble # de freqüència). Si l'altre jugador prem START dins d'aquesta # finestra, el comptador es reseteja i s'arrenca amb BOTH. starting_ms: 3000 # Durant STARTING el prompt commuta a un cicle simètric 50/50 # (visible/ocult) amb aquest període total. 200 ms = 5 Hz, prou # ràpid per llegir-se com a "pulsació confirmada". starting_blink_period_ms: 200 # Fade-out estil "mosaic dissolve" durant l'última part de STARTING. # `fade_out_ms` ha de ser <= starting_ms (els últims X ms del STARTING # es fan amb el dissolve actiu fins a quedar negre). `fade_out_max_block` # és la mida màxima de bloc en píxels al final del fade. fade_out_ms: 800 fade_out_max_block: 32 # Fade-out de `title.ogg` en entrar a STARTING. Independent del visual: # la música pot acabar abans o després del mosaic dissolve. music_fade_out_ms: 3000 # Fade-to-black per a la sortida d'attract (timeout cap a LOGO). NO és # mosaic — capa negra lineal damunt del canvas. La música no es toca: # `title.ogg` continua sonant cap a LOGO, que ja veurà què en fa. attract_fade_to_black_ms: 800 # Seqüència d'aparició dels elements de la TITLE en fase IDLE. Tots # els temps són absoluts des de l'entrada a l'escena. `fade_in_ms` és # la capa negra inicial que s'esvaeix cap al fons; els altres marquen # quan apareix cada element. Si l'usuari prem START en qualsevol # moment, la seqüència es completa instantàniament. intro: fade_in_ms: 500 # fade-in negre inicial sobre el fons game_logo_at_ms: 1500 # visibilitat binària del game_logo mini_logo_at_ms: 2000 # inici del slide-in del mini-logo mini_logo_slide_ms: 500 # durada del slide copyright_at_ms: 2200 # inici del slide-in del copyright copyright_slide_ms: 500 # durada del slide slide_curve: outCubic # corba compartida per mini_logo i copyright press_start_at_ms: 3000 # quan apareix PRESS START amb parpadeig # Distorsió sinusoidal del fons (efecte de calor del desert). # `amplitude_px`: desplaçament màxim de cada fila en píxels. # `wavelength_px`: distància vertical entre dos pics de l'ona. # `speed_hz`: velocitat amb què avança la fase (cicles per segon). # Si `enabled` és false, el fons es pinta sense distorsió. heat_haze: enabled: true amplitude_px: 1.5 wavelength_px: 32.0 speed_hz: 0.6 # Escena LOGO (logotip de l'editora). El revelat del logo a la fase SCAN # imita un escaneig CRT: una banda lluminosa baixa de dalt a baix; per # damunt es veu la imatge ja "impressa", per sota encara és negre. Al # voltant de la banda hi ha glitch (offset horitzontal de files amb # falloff per distància) i ocasionalment apareixen bursts VHS (franges # desplaçades) damunt la part ja revelada. Quan la banda toca el peu del # logo, un flash blanc tanca l'efecte i s'entra a MIDDLE (logo estable). logo: scan: duration_ms: 1500 # durada total del scan top→bottom band_height_px: 4 # alçada (px) de la banda lluminosa band_alpha: 200 # opacitat (0..255) de la capa blanca de la banda band_pulse_hz: 20.0 # freqüència del pulse de brillantor (Hz) band_pulse_depth: 0.45 # profunditat del pulse (0..1; 0 = sense pulse) # Glitch d'impacte (files al voltant de la banda) glitch_amplitude_px: 6 # offset horitzontal màxim a la banda glitch_band_radius_px: 12 # files damunt/sota la banda amb glitch (falloff lineal) # Bursts VHS sobre la part ja revelada vhs_burst_per_sec: 3 # bursts/segon mitjà vhs_burst_duration_ms: 80 # durada de cada burst vhs_burst_height_px: 8 # alçada de la franja afectada vhs_burst_amplitude_px: 8 # offset horitzontal del burst flash_ms: 100 # flash blanc final quan acaba el scan