# 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/.`. ### 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 `` 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.