Skip to content

Etapa 0: capa de persistencia de ediciones de mapa #3

Description

@leocagli

Parte de #2 (modo construcción). Esta issue desbloquea todas las demás.

Problema

Los mapas son archivos estáticos en disco. api/src/lib/mapNpcStorage.ts sólo expone lectura:

listAvailableMapIds()      // fs.readdir
loadMapNpcPlacements()     // fs.readFile
loadAllMapNpcPlacements()

No hay ninguna ruta de escritura de mapas en todo el repo. Sin una capa de persistencia, cualquier editor visual no tiene dónde guardar.

Enfoque propuesto

No inventar un mecanismo nuevo. Extender el que ya funciona para el resto del game data:

  • Tabla game_data_revisions con columnas kind, entity_id, action, checksum
  • Repositorios en api/src/repositories/ (ver gameObjects.ts, gameNpcs.ts como referencia)
  • El server hidrata desde la DB al arrancar y reporta versión aplicada

Los mapas serían un kind más dentro de ese esquema.

Alcance

  1. Tablas nuevas para mapas editados. Sugerencia de punto de partida:
    • game_maps (metadata por mapa: id, nombre, terreno, zona, pk, etc.)
    • game_map_tiles (grilla: mapa, x, y, entrada de paleta, bloqueado)
    • game_map_palette (paleta por mapa: clave, capas de gráficos, bloqueado)
  2. Importador que cargue los 294 mapas de api/src/mapas_source/ a la DB, idempotente (se puede correr de nuevo sin duplicar).
  3. Lectura con precedencia: si el mapa existe en DB se usa esa versión, si no se cae al archivo. Así nada se rompe mientras la migración es parcial.
  4. Registrar cada edición en game_data_revisions.

Criterios de aceptación

  • Los 294 mapas se importan a la DB y el juego sigue funcionando igual que antes
  • Correr el importador dos veces no duplica ni corrompe datos
  • Un mapa editado en DB se sirve desde DB; uno no editado se sigue sirviendo desde archivo
  • Cada edición deja registro en game_data_revisions con su checksum
  • Tests de integración en api/src/tests/ (ya hay 11 ahí como referencia de estilo)

Archivos relevantes

  • api/src/lib/mapNpcStorage.ts (hoy sólo lectura)
  • api/src/mapas_source/mapa_<n>/ (294 mapas: meta.json, terrain.json, npcs.json, specials.json)
  • api/src/repositories/gameObjects.ts, gameNpcs.ts (patrón a seguir)
  • api/schema.sql

Notas

Vale la pena decidir temprano si la grilla se guarda fila por fila o como documento JSON por mapa. Son 100x100 = 10.000 tiles por mapa y 294 mapas: 2,9 millones de filas si se hace tile por tile. Medir antes de comprometerse.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

GrantFox OSSIssue tracked in GrantFox OSSMaybe RewardedIssue may be eligible for a GrantFox rewardThird CampaignCampaign: Third CampaignbountyIssue con recompensa asignadaenhancementNew feature or requestetapa-0-baseEtapa 0 - persistencia y permisos (desbloquea el resto)grantfoxPublicada en la campana de GrantFoxmodo-construccionModo construccion in-game: editor de mapas en el navegadorreward-100-usdRecompensa 100 USD - complejidad alta o fundacional

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions