Files
lolero/docs/ARCHITECTURE.md
T

122 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Arquitectura — 1v9: Convertite en Leyenda
## Visión general
Es un **juego de decisiones** (historia interactiva) en un **único archivo** `index.html`
(HTML + CSS + JS inline, sin dependencias externas para jugar). Todo el estado vive en memoria
durante la partida; no hay persistencia obligatoria (un `localStorage` opcional guarda el
"Salón de la fama" con las mejores carreras).
```
Landing → Creación → Oferta de academia → Loop de carrera (N splits) → Resumen final (compartible)
```
---
## Flujo de pantallas
| Pantalla | Rol |
|----------|-----|
| **Landing** | Presentación + botón "Convertite en leyenda" + Salón de la fama |
| **Creación** | Nick, nº de invocador, mano, región, rol |
| **Oferta de academia** | 3 equipos aleatorios de tu liga para elegir |
| **Carrera (Screen A)** | Panel de jugador + decisión + timeline, 2 columnas |
| **Resumen (Screen B)** | 3 paneles + grid de orgs + botón "Jugar de nuevo" |
---
## Datos del juego
### REGIONES
`LCK / LPL / LEC / LCS / LTA / VCS`, cada una con:
- `code` (KR/CN/EU/NA/AM/VN), `flag`, `country`, `flavor`.
- `threshold`: umbral de ELO para competir en su primera división (LCK=68…VCS=50).
### TEAMS (68 equipos reales)
`{ id, name, div }``div: 1` = primera división, `div: 2` = segunda/academia.
Los logos se resuelven con `LOGO_EXT[id]``logos/<id>.<ext>`.
### ROLES
`{ em, fl, kill, ast, death, pentaW }` — coeficientes de farmeo/perf de cada rol.
### EVENTS (26 eventos de decisión)
Cada evento: `{ cat, title, ctx, opts[] }`.
Cada opción: `{ t, d, risk, pos, neg, x? }`
- `d`: deltas a stats (`mecanica, vision, farmeo, sinergia, marca`).
- `risk`: probabilidad de fracaso (0-1).
- `pos`/`neg`: textos de resultado (éxito/fracaso).
- `x`: efectos extra (`rolChange`, `transfer`).
### COMPETITIONS (5 internacionales)
`{ split, ic, flavor }` — First Stand (2), MSI (4), EWC (6), Asian Games (8), Worlds (último).
---
## Estado de partida (`G`)
```js
{
nick, num, hand, region, role,
teamId, div,
stats: { mecanica, vision, farmeo, sinergia, marca },
split, totalSplits,
kills, assists, deaths, games, penta,
value, maxValue, salary, ratingMax,
teamTitles, indTitles, intl,
teams, events, history,
regSelect: { games, kills, ast, apps },
retired, retiring, finalRating
}
```
---
## Mecánicas clave
### Rating / ELO
Media ponderada de las 5 stats (mecánica 1.15, farmeo 1.05, sinergia 1.0, visión 0.95, marca 0.85),
clamp `[40, 99]`.
### Market value
`50000 * 10^((rating-40)*0.055)` × bonus por títulos, redondeado a `10k`.
### Crecimiento pasivo
Cada split suma `+0.48 + rand*0.2` (+ bonus por winRate) a cada stat; rendimiento malo reduce.
### Decisiones
`ok = Math.random() >= (risk + 0.03)`. Éxito: `+delta*2.6`. Fracaso: `-delta*2.6*0.9`.
### Fichajes
Solo desde **split 4**, con ~22% de chance por split y `rating >= threshold-4`.
Ofertas de otros equipos (misma región o extranjeros de primera si el rating alcanza).
### Competencias internacionales
**Solo equipos de primera división** (un equipo de 2ª no va a MSI/Worlds). Bracket de 4 rondas
con probabilidad por rating: grupos → cuartos → semis → final.
### Títulos
- **Regional**: cada split par, si `rating >= threshold-X` (primera o segunda división).
- **Individuales**: Guante de Oro (ELO≥62), Rey del Farmeo (farmeo≥60), Carry Definitivo (penta≥1), Community Darling (marca≥58), MVP del Split.
---
## UI (estilo Copero)
Design tokens en `:root`:
```
--bg-base:#0a0a0c --bg-card:#18181b --bg-card-alt:#1f1f23 --bg-row-active:#0e3a3f
--accent-ovr:#d9730a --accent-role:#7c3aed
--success:#22c55e --danger:#ef4444 --border-subtle:#27272a
```
- **Screen A**: 2 columnas (3fr/2fr). Izquierda: badge ELO + panel jugador + stats + logros + decisión.
Derecha: timeline de carrera (SPLIT/ORG/ELO/GAM/KIL/AST) con fila activa teal y filas futuras grises.
- **Screen B**: 3 paneles (identidad, selección regional, premios) + grid de orgs + botón "Jugar de nuevo".
- **Responsive**: <768px colapsa la timeline (default cerrada) y apila a 1 columna.
---
## Export de imagen
Un `<canvas>` 1080×1920 dibuja el resumen completo (dark bg, badges ELO, stats, títulos, orgs)
y se descarga como PNG. Es el mecanismo de viralidad del juego.