122 lines
4.2 KiB
Markdown
122 lines
4.2 KiB
Markdown
# 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. |