Skip to main content

Changelog - v1.6.0 - Path of Mastery

A major progression update introducing Gladiator Disciplines — per-gladiator skill trees with combat, rest and training effects — plus a redesigned Achievements page, senator-run elite training schools, and a long list of bug fixes and security hardenings.

Gladiator Disciplines — New Skill System

  • Three discipline lines per gladiator: Martial, Endurance, Spectacle, with 24 seeded skills across Tier 1–3 and capstones
  • Discipline points awarded on level-up (level-based formula); points persist across the run
  • New Discipline Tree modal on the Roster with locked/unlocked tiers, effect descriptions, and rank-up previews
  • Secure server-side allocation via allocate_discipline_point RPC (ownership, dead-gladiator and unlock-rule checks)
  • Combat effects active in fights: initiative bonuses, max-HP bonuses, conditioned-body and measured-blows handlers, asymptotic-safe damage scaling
  • Reward & morale effects active end-of-fight: bonus fame/gold/morale handlers with full effect logging
  • Management effects active outside combat: Disciplined Rest (extra healing when low HP) and Iron Routine (reduced training morale cost)
  • "Unspent Discipline Points" priority surfaces on the Dashboard and deep-links into the roster
  • Admin tools: discipline manager, debug panel, and DB-validated effect-config schema
  • Existing gladiators auto-backfilled with the correct point budget for their level

Achievements — Hall of Deeds Redesign

  • New unified two-column Hall of Deeds layout (list + detail panel) with category and status filters
  • Mobile layout collapses the detail panel inline under the selected entry
  • Achievement progress is now persisted server-side and visible even for already-claimed achievements (e.g. "0/200 Fame" backfill bug fixed)
  • New achievement Arcane Reflexes: reach Day 50 with ≥90% QTE success rate (min. 10 QTEs) → unlocks the animated Legendary Electric (Arcane) card frame
  • Four achievements now grant final portrait rewards instead of placeholders — Lanista portraits and exclusive gladiator portraits selectable from a new Roster portrait picker
  • AssetManager extended with English labels for the new portrait reward keys

Senate & Prestige

  • Prestige bar with three Elite Training milestones (105 / 110 / 115 stat caps) shown directly under the bar — same visual language as the Act I Fame milestones
  • Senator Schools: each senator now offers their own elite training path, gated by per-senator favor, with custom backgrounds and tooltips on the audience page
  • Sidebar / mobile header now show three independent Seal counters per senator
  • Bug fix: Prestige bar no longer renders empty when prestige > 0; bar heights harmonized with the Fame bar

Featured Duels — Scaling Overhaul

  • Opponent stats now scale from the best gladiator in the player's roster instead of the average — no more trivial duels for mixed-strength rosters
  • New Champion Profile system adds controlled stat variance per opponent for replayability
  • Multiple duel-scaling bug fixes and config-driven multipliers

Staff Overhaul

  • Trainer now displays an estimated win chance % on fight contracts
  • Scout auto-reveals opponent stats — no more per-fight scouting action
  • All trainer/scout level descriptions and tooltips updated to match the new behaviour
  • All bonus values exposed via game_config keys for tuning
  • Staff cards on the Roster page redesigned to a compact horizontal layout (~85px instead of ~300px), artwork on hover

Combat & Replays

  • Combat ambience now fades in over 2 seconds on combat-screen load instead of starting abruptly
  • Replay viewer initializes health bars with the actual start HP and shows a "Wounded — X/Y HP" label for gladiators entering wounded
  • Cross-row replay linking: defender mirror rows for Shadow Duels now resolve to the attacker's replay
  • 20 new keyboard-safe QTE prompts (avoiding Q/W/A/Z/M for AZERTY/QWERTZ compatibility), split between Act 1 short words and Act 2 Featured Duel phrases

Onboarding & Auth

  • New Confirm Email banner after sign-up with a resend button (cooldown) and an option to change the email — replaces the silent failed-login experience
  • Tutorial / onboarding flow stabilized (regression pass after the Discipline rollout)

Vita & History

  • New tooltip on Shadow Duel entries in the Vita Fight Record with purse, gold, fame and timestamp
  • Shadow Duel mirror rows backfilled for defenders so both gladiators see the fight in their history
  • Fight history correctly explains "combat log unavailable" for replay-less defender mirror rows

Public Arena (Spectare)

  • Praeco card and "Last Champion Fight" panel rebuilt for mobile (responsive stacking, scaled portrait)
  • "Recent Shadow Duels" capped to the last 3 entries; Victory/Defeat badges removed (they made no sense for shadow PvP)
  • Mirror rows now stored with difficulty = 'medium' to satisfy the DB constraint while remaining identifiable via is_shadow_contract

My Ludus Navigation

  • "My Ludus" tab bar is now horizontally swipeable on mobile with hidden scrollbar, no more overlapping tab labels
  • Mobile labels shortened where they collided with the icons

Soft-Disabled Features

  • Challenges are soft-hidden from the player UI (admin-only access preserved); code and data remain for a future Season v2

Balance & Self-Healing

  • "Market Now Open" (50 Fame) milestone now triggers reliably and is auto-self-healed on page load if missed
  • Champion fights for Act 2-eligible players no longer expire after one day in the bulk-expiry routine
  • Featured Duel and Champion fight expiry edge cases hardened

Security

  • AI-generation edge functions (generate-market-portraits, generate-equipment-image, generate-changelog-image) now require authentication — closes the cost-abuse vector
  • senator_favor no longer publicly readable; race board uses a dedicated server-side path
  • market_* tables: removed user INSERT/UPDATE/DELETE policies — only server-side generation and SECURITY DEFINER purchase RPCs may write
  • Multiple SECURITY DEFINER functions hardened with explicit ownership checks, including reset_ludus and get_inbox_summary

Bug Fixes

  • Market refresh: fixed boot crash in refresh-market edge function caused by a duplicate currentDay declaration
  • Duplicate market items: race condition that generated 18 items instead of 9 fixed via a sync useRef lock
  • Gold-cost events: events that require gold (e.g. "A Champion's Due") can no longer be approved when the player can't afford them — server returns insufficient_funds and the client disables the Accept button with a clear hint
  • Gladiator portraits: deterministic DD-style fallback restored across Spectare feed, Discipline Tree, Equipment Loadout, Event Resolution, Vita Biography, Roster gladiator picker — and the expanded Spectare row now uses the correct DD variant via a new avatarUrlDD prop