Files
lolero/docs/ARCHITECTURE.md

4.2 KiB
Raw Permalink Blame History

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)

{
  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.