96 lines
6.4 KiB
Markdown
96 lines
6.4 KiB
Markdown
# RPG World — camina por un mapa de tiles, habla, abre, lucha
|
|
|
|
RPG World convierte un juego en un RPG de mapas de tiles al estilo de los rol clásicos en 2D: avanzas por una cuadrícula con el teclado, hablas con la gente, abres cofres, cruzas puertas y luchas contra monstruos, y tras el combate vuelves al mismo punto. El mapa es una escena cualquiera del juego, así que el cuadro de diálogo, los escenarios, el guardado, la música y la hora del día funcionan en los mapas igual que en una novela visual.
|
|
|
|
Este mod da vida a la aldea, el bosque y el desierto de **RPG Plus**. Los mapas y sus habitantes vienen de mods de contenido como RPG Demo; este aporta las reglas.
|
|
|
|

|
|
|
|
## Cómo jugar en un mapa
|
|
|
|
- **Camina** con WASD o las flechas; mantén pulsado **Shift** para correr.
|
|
- **Actúa** con **E** o **F**: habla con quien tengas delante, abre el cofre, lee el cartel.
|
|
- **Pisa** una puerta o el borde del mapa para pasar al siguiente.
|
|
- En algunos sitios, como el bosque, los **combates aleatorios** pueden empezar mientras caminas.
|
|
- Tras un combate vuelves a la misma casilla del mismo mapa.
|
|
- El juego guarda tu posición; al cargar reapareces exactamente ahí.
|
|
|
|
La casilla con la que puedes interactuar se enmarca, y la ayuda de abajo a la izquierda cambia a **E / F · Interact**.
|
|
|
|
## Ejemplo: un cofre que sigue abierto
|
|
|
|
El cofre de la casa del anciano son dos eventos en la misma casilla. El cerrado se muestra mientras la bandera de historia `rpg_house_chest` no esté activa; su escenario entrega tres monedas y activa la bandera. A partir de entonces se muestra en su lugar el cofre abierto.
|
|
|
|

|
|
|
|

|
|
|
|

|
|
|
|
```json
|
|
{ "Id": "chest", "X": 9, "Y": 7, "Tile": 14,
|
|
"Scenario": "rpg_demo/events/house_chest",
|
|
"Condition": "rpg_house_chest != 1" },
|
|
{ "Id": "chest_open", "X": 9, "Y": 7, "Tile": 15,
|
|
"Scenario": "rpg_demo/events/chest_empty",
|
|
"Condition": "rpg_house_chest == 1" }
|
|
```
|
|
|
|
```scenario
|
|
ptext "En el cofre: calcetines viejos y una nota que dice "No tocar". Demasiado tarde. Debajo de los calcetines: tres monedas." key=rpg_demo/chest/house
|
|
action item.add id=money/coin count=3
|
|
flag rpg_house_chest 1
|
|
end
|
|
```
|
|
|
|
## Para autores: mapas
|
|
|
|
Un mapa es un archivo JSON en la carpeta `maps/` de un mod, más una escena con el mismo nombre en `scenes/` para su fondo en los combates y su ambiente sonoro.
|
|
|
|
- **Tres capas dibujadas**, cada una una lista de filas con números de tile (`.` para vacío): `Back` — suelo, interiores, agua; `Main` — objetos a la altura de los personajes: muros, troncos, vallas; `Front` — se dibuja sobre los personajes: copas de los árboles, aleros, arcos.
|
|
- **Colisiones** — una capa de filas que sustituye la transitabilidad de los tiles donde hace falta: un muro invisible al borde de un acantilado o un hueco en un seto.
|
|
- **Tileset** — el atlas de tiles y las propiedades de cada uno (sólido o no, superficies, objetos).
|
|
- **Spawn** — dónde aparece quien llega nuevo; **Zoom**; el color **Ambient** opcional para interiores (si no, la hora del día ilumina el mapa) y **Atmosphere** (`woodland` añade hojas, luciérnagas y ondas en el agua).
|
|
- **Encounters** — combates aleatorios: de media uno cada `Steps` pasos contra uno de los `Groups`.
|
|
|
|
```json
|
|
"Encounters": { "Steps": 48, "Groups": ["rpg_slime", "rpg_slime,rpg_slime"] }
|
|
```
|
|
|
|
## Para autores: eventos
|
|
|
|
Los eventos viven en `map_events/<id del mapa>/*.json` de cualquier mod. Un evento tiene un **aspecto** y un **efecto**, elegidos por separado:
|
|
|
|
- aspecto: un `Sprite` de personaje, un `Tile` suelto del atlas, el `Icon` de un objeto tirado en el suelo o nada (un desencadenante invisible);
|
|
- efecto: un `Teleport` a una casilla de este u otro mapa, o un `Scenario` seguido de `Commands` en línea opcionales — el lenguaje de escenarios completo, con `action rpg.battle`, banderas y misiones incluidas;
|
|
- `Trigger`: `Action` (E/F estando de cara) o `Touch` (al pisarlo);
|
|
- `Solid`: si bloquea el paso (por defecto, los eventos dibujados sí lo hacen);
|
|
- `Condition`: oculta el evento mientras no se cumpla la condición;
|
|
- `Pages`: aspectos y efectos alternativos, cada uno con su condición; se usa la última página cuya condición se cumpla;
|
|
- `Route`: movimiento autónomo como `{"Steps": ["left", "wait", "right"], "Every": 0.8}`, con `up`/`down`/`left`/`right`, `random`, `toward`/`away` (hacia el jugador o alejándose), `wait` y `face_…`;
|
|
- `Light`: un brillo alrededor del evento, `{"Radius": 3, "Color": "#ffd8a0"}`, visible al anochecer y de noche.
|
|
|
|
**Añade o cambia el mapa de otro mod.** Los archivos de eventos se combinan en orden de carga: un `Id` nuevo añade un evento al mapa, y el mismo `Id` de un mod que dependa del dueño lo sustituye. Así da RPG Plus nuevos diálogos al anciano de la demo.
|
|
|
|
## Acciones de escenario
|
|
|
|
```scenario
|
|
action rpg.battle enemies=rpg_wolf,rpg_slime win_flag=rpg_wolf_dead
|
|
action rpg.teleport map=rpg_forest x=1 y=8 dir=right
|
|
```
|
|
|
|
- `rpg.battle` inicia un combate con el núcleo de combate del juego y vuelve a la misma casilla; al ganar, `win_flag` pasa a 1, así que el monstruo del mapa cuya condición comprueba esa bandera desaparece. Termina el escenario después de esta acción.
|
|
- `rpg.teleport` mueve al jugador a una casilla de este mapa o de otro.
|
|
|
|
## Ajustes del juego
|
|
|
|
- **Apariencia** (`rpg.player_charset`) — el sprite del héroe en los mapas, elegido entre los charsets del juego.
|
|
- **Proyección del mapa** (`tile.renderer`) — vista superior o isométrica; ver Tile Rendering.
|
|
|
|
## Si algo falla
|
|
|
|
1. **Un personaje o un cofre no reacciona.** Colócate de frente y pulsa E o F; un evento `Touch` solo responde al pisarlo.
|
|
2. **Un monstruo o un cofre vuelve a aparecer.** Su `Condition` debe comprobar la bandera que activa su propio escenario o `win_flag`.
|
|
3. **No puedes pasar por un sitio que parece libre.** Esa casilla la bloquea un tile sólido o la capa de colisiones del mapa.
|
|
4. **No hay fondo de combate.** La escena del mapa en `scenes/<map>.json` necesita un `defaultBackground`.
|