Files

13 KiB
Raw Permalink Blame History

Roadmap — Ajedrez Purgatorio

Last Updated: 2026-08-24 Current Stage: Vertical Slice — completo en código y escenas; pendiente playtest manual Current Milestone: Vertical Slice (5 sprints implementados, 200/200 tests, todo commiteado)

Timeline

Apr 2026                                              Jun 2026
│ Sprint 1  │ Sprint 2  │ Sprint 3  │Sprint 4│Sprint 5│
│ Foundation│ Chess+AI  │ Purgatorio│Narrative│Meta+UI │
│ 23Mar-4Abr│ 07-25 Abr │ 10-23 May │26May-6J │10-12May│
│           │           │           │        │        │
│ Scenes    │ En Passant│ DiceSystem│Campaign│DeadKing│
│ States    │ Draws     │ DiceUI    │Dialogue│Save    │
│ PieceID   │ Promotion │ Muerte    │Content │Menu    │
│ Campaign  │ AI x3     │ Purgatory │Flow    │HUD     │
│ State     │           │ Flow      │        │Polish  │
│           │           │           │        │   ◆ VS │

Nota: El deadline del Vertical Slice (2026-06-07) fue superado pero el hito está completo: los 5 sprints implementados, 4 escenas en Build Settings, IA/Dead Kings/HUD cableados y EditMode 206/206. Pendiente: playtest manual y planificar Alpha/Beta/Release.

Milestones

Milestone Target Sprints Status
Vertical Slice 2026-06-07 (superado) 5 Completo (código + escenas + tests)
Alpha TBD TBD Not Planned
Beta TBD TBD Not Planned
Release TBD TBD Not Planned

Vertical Slice Feature Checklist

Leyenda: implementado · código listo, falta integración en escena · pendiente

Ajedrez Core

  • Tablero 8x8 con casillas clickeables
  • 6 tipos de piezas con movimiento correcto
  • Selección y movimiento por click
  • Turnos alternados blancas/negras
  • Detección de jaque y jaque mate
  • Enroque (corto y largo)
  • Promoción de peón (auto-queen)
  • En Passant
  • Detección de tablas (ahogado, material insuficiente, 50 movs, repetición triple)
  • Promoción con elección de pieza

Mecánicas Purgatorio

  • Piece Identity System (16 piezas con nombre)
  • Dice System (2d6 + modificadores vs Muerte)
  • Purgatory flow (oferta → dados → resultado) — cableado en Chapter1
  • La Muerte como personaje con diálogos — retrato + arte del Jefe (088d70d); habla en los finales de acto g8/g16/g24 y cierra el juego en g30 (0f0b3dd)

Campaña y Narrativa

  • Campaign System (3 capítulos) — CampaignManager + CampaignState cableados
  • Dialogue System (typewriter, branching básico) — cableado en Chapter1
  • Contenido narrativo (6 JSON, ch1/2/3 intro+outro)
  • IA escalada (Easy → Medium → Hard) — AIController presente y habilitado en Ch1/2/3; dificultad aplicada por CampaignManager en runtime (auditoría 2026-08-22)

Meta / Social

  • Dead Kings (input al perder → pool local → spawn) — UIs cableadas (CampaignManager las localiza con FindObjectOfType(true))
  • Save/Load (entre capítulos) — suite EditMode incluida

UI

  • Main Menu — MainMenuController + MainMenu.unity cableados y commiteados
  • HUD (turno, capturadas) — GameHUD suscripto a OnPieceCaptured/OnCheckResolved con CapturedPieceIcon.prefab en las 3 escenas
  • Dialogue UI — portrait/speakerDatabase asignados; SpeakerDatabaseSetup batch mantiene Ch2/3 sincronizadas
  • Dice UI (oferta, tirada, resultado) — cableada
  • Dead King Input UI — cableada en flujo de campaña
  • Scene transitions (fade) — ⚠️ duplicado Core/UI; Chapter1 usa versión sin fade

Infraestructura

  • Scene Management (5 escenas) — MainMenu + Ch1/2/3 en Build Settings
  • Game State Manager — instanciado en escenas
  • Campaign State persistence (ScriptableObject + SaveSystem JSON)

Pendientes actuales (post-auditorías 2026-08-22/24)

Ítem Tipo Detalle
Playtest manual completo QA Campaña 30 niveles → duelo → Dead Kings, solo validable jugando
Alpha/Beta/Release Proceso Milestones TBD

Barks de La Muerte ( ver sesión III), música BGM por acto ( sesión III) y dedup de paneles Purgatory UI ( verificado: 0 duplicados en Ch1/2/3) ya resueltos.


Actualización 2026-08-22 — Auditoría de bloqueantes

Verificación de los 7 bloqueantes listados arriba:

# Bloqueante Estado
1 Commit del trabajo sin commitear RESUELTO — commit 9fdafe8 (+ TestResults*.xml a .gitignore)
2 Chapter2/3 en Build Settings RESUELTO — 4 escenas habilitadas, GUIDs verificados
3 Instanciar GameStateManager y AIController YA ESTABA — presente y habilitado en Ch1/2/3; dificultad aplicada por CampaignManager en runtime
4 Cablear DeadKingInputUI/RevealUI CABLEADO OK (CampaignManager usa FindObjectOfType(true)) — PENDIENTE usuario: correr Tools > Purgatory UI para dedup (8-9 copias por escena) y copiar Victory/Defeat/MemorialPanel a Ch1/2
5 Eventos OnPieceCaptured/OnCheckResolved + HUD RESUELTO — eventos declarados e invocados; GameHUD suscripto con CapturedPieceIcon.prefab asignado en las 3 escenas
6 Tests pendientes RESUELTO — suites migradas de ests/ (invisible para Unity) a Assets/Tests/EditMode/: CampaignState, DiceSystem, DeadKingPool, SaveSystem, DialogueBranching + 3 chess actualizadas a versiones más completas. Nuevas: TypewriterTests (8 tests), CampaignManagerConfigTests (11 tests)
7 Duplicación BoardManager/ClassicBoardManager CERRADO POR DISEÑO — nombres ya normalizados (sin colisión); la duplicación de lógica es consecuencia aceptada de ADR-0001 (arquitectura por modo)

Pendiente tras esta auditoría: correr los menús Tools > Purgatory UI en Unity (Ch1, Ch2, Ch3), guardar escenas, verificar consola sin errores de compilación, y commitear.


Actualización 2026-08-24 — Duelo del Purgatorio + La Muerte como personaje

Commit base: f7d5606 (Duelo del Purgatorio completo + SFX cableados + menú de opciones + migración de tests). Sobre esa base:

Ítem Estado
Commit del trabajo pendiente RESUELTO — f7d5606
La Muerte como speaker RESUELTO — retrato Portraits/muerte.png (256×256, flat) cableado en SpeakerDatabase.asset con GUID/fileID deterministas; PortraitRegistry ahora rellena portraits null de speakers existentes; frases data-driven en Dialogues/muerte_quotes.json con fallback embebido
Arte del Jefe (La Muerte) RESUELTO — sprite propio Resources/Pieces/la_muerte.png (1024×1024, PPU 100); SpawnBoss lo intercambia con fallback al Rey tintado
Limpieza menor RESUELTO — TODO obsoleto en CampaignState.StartChapter eliminado (SyncFromBoard ya cubre), /TestResults/ a .gitignore, duplicado Assets/Game/Audio/ (metas YAML corruptos, sin referencias) eliminado

Verificación: Unity 6000.3.13f1 batch mode — assets importados, SpeakerDatabaseSetup OK (12 speakers, DialogueUIs actualizados en Ch2/Ch3), EditMode 200/200 pasados.


Actualización 2026-08-24 (II) — Ricardo + La Muerte en campaña

Commits 088d70d y 0f0b3dd:

Ítem Estado
Retrato de Ricardo RESUELTO — Portraits/ricardo.png (corona flat sobre dorado oscuro) cableado con GUID/fileID deterministas; ya no queda ningún speaker sin arte
La Muerte habla en campaña RESUELTO — nodo encadenado en los finales de acto (g8/g16/g24_outro) y apertura/cierre del Final (g30_intro/outro, esta última da agencia al jugador: levantarse del trono vacío); su retrato renderiza gracias al fix de PortraitRegistry

Verificación: import limpio, cadenas next validadas, EditMode 200/200 pasados.


Actualización 2026-08-24 (III) — La Muerte presente en partida + BGM

Ítem Estado
Barks runtime de La Muerte RESUELTO — DeathPresenceController (nuevo, Mono/Core/): con deathPresent spawnea el sprite observador (bob suave); con deathCommentary inyecta triggers runtime (on_piece_lost, on_check_received, on_first_capture) que disparan 6 barks nuevos (muerte_bark_{lost,check,capture}_{a,b}.json, variante por hash del chapterId, sin pisar diálogos manuales). Flags deathPresent/deathCommentary activados en jefes (n8/n16/n24/n30) y aperturas de acto (n9/n17/n25)
Música BGM por acto RESUELTO — 4 loops seamless de 24s generados (22050Hz mono 16-bit: Dm drone / Am tritono / viento + campanas / Em oscuro) en Resources/Music/bgm_acto{1..4}.wav; AudioManager.PlayTheme() resuelve prefijo de chapter.theme (acto2_irabgm_acto2), no reinicia si ya suena; CampaignManager lo invoca tras aplicar la paleta
Dedup paneles Purgatory UI VERIFICADO — BatchProcessChapterScenes headless: 0 duplicados, 0 copias necesarias en Ch1/2/3 (ya estaban limpias)
Test flaky SaveSystem CORREGIDO — SaveSystemTests.SetUp limpia save_slot_*.json huérfanos en persistentDataPath (contaminación entre sesiones/tests hacía fallar DeleteSave_NonexistentSave)

Verificación: import limpio (0 warnings GUID — metas WAV regenerados por Unity), 0 errores de compilación, EditMode 206/206 (6 tests nuevos en DeathPresenceTriggerTests: inyección completa, skip de eventos manuales, determinismo de variantes, ids únicos).


Actualizacin 2026-08-25 (IV) - Cadena derrotaMemorial jugable, dilogos y pausa

Sesin de bugfixing guiada por Editor.log tras playtesting del usuario. Commits 97677fb (fixes), cc590f (features), 43f15eb (escenas).

tem Estado
Derrota no abra inscripcin RESUELTO - carrera en DefeatUI: el fade-out haca SetActive(false) antes de que la coroutina invocara el callback del botn Continuar (la mataba en silencio). Ahora el callback se invoca sncronamente en OnContinueClick; logs incondicionales en Show/clicks
Dilogos vacos en primera partida RESUELTO - DialogueUI solo se suscriba si DialogueSystem.Instance ya exista en su OnEnable (perda la carrera de Awakes) y nunca reintentaba. Fix: [DefaultExecutionOrder(-100)] en DialogueSystem + suscripcin resiliente diferida que sincroniza el nodo activo
No se poda escribir en el Memorial RESUELTO doble: (1) los 18 TMP_InputField de las escenas estn huecos (m_TextViewport/m_TextComponent = {fileID: 0}); (2) el EventSystem usa InputSystemUIInputModule, que no alimenta el pipeline legacy Input.inputString que usa TMP para tipear. Fix: validacin profunda + panel fallback runtime + swap temporal a StandaloneInputModule mientras el panel est abierto (restaurado en OnDestroy)
Botn Inscribir muerto RESUELTO - WaitForSeconds escalado con imeScale=0 congelaba la coroutina para siempre; ahora WaitForSecondsRealtime. Adems Show() activa el GO del componente si qued inactivo (error "Coroutine couldn't be started... 'DeadKingInputPanel' is inactive")
Panel de inscripcin gigante / corrido RESUELTO - CanvasScaler a referencia 19201080 (convencin de todos los canvases del proyecto) + layout centrado: ttulo arriba, nombre, mensaje, botn sin solapes
Pausa in-game muerta RESUELTO - haba 2 PauseMenuController por escena (uno sobre canvas desactivado), panel de escena sin servir y botn HUD PauseButton con onClick: []. Ahora Show() construye panel runtime (orden 420): Continuar / Reiniciar captulo / Opciones (OptionsMenuController.Toggle()) / Salir al men principal; cablea el botn HUD en Awake y limpia overlays hurfanos acumulados
Texto encimado con retrato en dilogos RESUELTO - re-layout runtime en DialogueUI.OnEnable: retrato 240300 anclado a la izquierda, texto estirado ocupando el resto (TopLeft), nombre alineado con el inicio del texto. Idempotente, aplica en las 3 escenas
Error ruido "[CampaignConfig] No se asign archivo JSON" RESUELTO - CreateInstance() dispara OnEnable antes de que CampaignManager llame SetJsonSource(); OnEnable ahora es silencioso sin fuente (el LogError se mantiene en LoadFromJson() explcito)
Feature: Mi Memorial NUEVO - botn "Mi Memorial" en men principal: lista scrolleable newest-first de partidas perdidas desde DeadKingPool (persistente dead_kings.json) con mensaje en dorado + autor/captulo; estado vaco si no hay registros; toggle por segundo clic
Campaas default vs Gambito de Sombras DOC - "Nueva Campaa" = config del Inspector en el CampaignManager de escena (campaa default, Lnea I, 3 captulos); "Gambito de Sombras" = Resources/Campaigns/gambito_campaign.json (30 captulos, 4 actos). Mismo motor, escenas y reglas

Verificacin: juego manual del usuario (Editor.log como fuente de diagnstico): cadena completa derrotamemorialmen post-envo, pausa con ESC y botn HUD, los 4 botones de pausa, dilogos con texto desde primera partida, Mi Memorial funcional.

Pendientes menores conocidos: VictoryUI.OnContinueClick tiene la misma carrera latente que DefeatUI (fix ofrecido, no aplicado an); limpieza opcional de paneles duplicados/huecos en escenas (9 DeadKingInputPanel por escena, 2 PauseMenuController, 18 input fields vacos) hoy mitigada por los fallbacks runtime.