Scene files referenced assets by UIDs that no longer matched the
importer records. Rewrote 13 ext_resource references to the current
UIDs from the .import sidecars, and gave wow_style.tres the UID that
nine UI scenes were already referencing (its header had none).
Headless load is now warning-free.
Escalation (EnemySpawner exports, all tunable):
- Wave size grows +1 enemy per wave, capped at 20
- Enemy health +15% and damage +10% per wave, applied identically on
every peer via the spawn RPC before _ready (so hitbox stats and
current_health pick them up)
Boss milestone every 5th wave: the Snippest - the basic lobster at
5x scale and 5x combat stats (50 HP, 25 damage, 5x knockback and
reach). Movement deliberately not 5x (1.2x - it lumbers). Pays 250
gold and always drops a health orb. Wave escalation multipliers stack
on top, so later bosses keep scaling.
Boss scene instances basic_enemy.tscn with the BossLobster script;
visual/collision children are scaled uniformly in code (not the
CharacterBody3D root, not shared shape resources).
- Clients now handle the host closing the arena: bank winnings if
still alive (retire), reset the HUD, and return to the camp menu
instead of being stranded in a dead world
- Death in co-op offers Spectate when a teammate is still fighting:
closes the results overlay and watches the run; the escape menu
gains a "Back to Camp" option for dead spectators to leave later
- Late joiners receive the current wave number on connect so their
HUD doesn't sit on "Prepare..." until the next wave starts
- HUD arena status (top center): live wave number and run gold,
driven by GameState signals, torn down cleanly on HUD.reset()
- Free floor weapons removed: the initial sword/shield spawn is gone
and manually placed level.tscn weapons are deleted server-side at
init. Gear now only enters play via the armory or enemy drops.
- Retire to Camp: new escape-menu button (shown only while alive in
an active run) banks 100% of run gold and keeps all gear - the
counterweight to death's 10% settlement. Exit Game and window close
also bank winnings before quitting.
- CLAUDE.md rewritten for the gladiator arena era: core loop,
autoloads, economy API, RPC patterns, verification workflow.
Turns the sandbox into a survival roguelike loop: outfit your gladiator
with banked gold, enter the arena, earn gold from kills and wave clears,
die, keep 10% of your total value (floored at the 500 fresh-start).
Economy (GameState autoload):
- banked_gold, owned items, and loadout persist to user://save.cfg
- Kill gold (basic 10g, armed 25g) credited server-side to the killer
- Wave-clear bonus (25 + 5/wave) for all players; wave synced to peers
- Death settlement liquidates gear, guarded against double-fire
Character creation / shop:
- Menu reframed: armory shop + live Character Sheet loadout preview
- Character Sheet gains preview mode (renders from loadout, no player)
- Buy/Equip with hand rules; two-handers and off-hands displace each
other symmetrically (shop and in-game pickups)
- Chosen loadout auto-equips on spawn via existing RPC path
Combat feel:
- Attacks snap to camera facing and lock direction for the swing
- Dash commits to its direction for the full duration
- Weapon slots show name text when no icon is set
- Hitbox/hurtbox debug meshes hidden by default (H toggles)
Death is final: players no longer respawn; a results screen shows waves,
time, kills, and the settlement, then returns to camp. Armed enemies no
longer respawn (were an infinite gold farm and respawned invisible).
- Changed level.tscn back to player.tscn instead of Player_Lilguy.tscn
- This ensures the Character script is properly attached
- Lilguy character integration will be done properly later in Godot editor
- Game now runs without type errors
- Changed from player.nickname.text to get_node_or_null approach
- @onready variables aren't available immediately after instantiation
- Prevents 'Invalid access to property or key nickname' error
- Escape Menu:
- Opens with Escape key from base game screen
- Resume button to return to game
- Exit Game button to quit application
- Character sheet closes with Escape if open (takes priority)
- Mouse capture/release handled by UI components
- Weapon Slot System:
- Visual weapon boxes (80x80) in character sheet
- Display weapon icons from WeaponData
- Empty slots appear dimmed
- Hover tooltips show weapon stats (not clipped by containers)
- Tooltips display: slot name, weapon name, damage, range, cooldown, knockback, block percentage
- Tooltips positioned globally to avoid ScrollContainer clipping
- Bug Fixes:
- Fixed typo in lilguy_body.gd (dwextends -> extends)
- Removed manual mouse toggle from player (now handled by UI)
- Updated character_sheet.gd to use weapon slot components instead of text labels
- Added weapon_tooltip.tscn as separate scene for unclipped tooltips
- Created UI system in level/ui/ folder
- Action bar with 12 ability slots (Attack, Block, Dash, Jump + 8 expansion slots)
- Unit frame showing player portrait with health bar
- Character sheet/spellbook (toggle with Tab) displaying stats, weapons, and abilities
- Tab hint indicator showing how to open character sheet
- Custom theme with golden borders and dark backgrounds
- UI Components:
- HUD Manager autoload handles all UI initialization and player connections
- Ability buttons with cooldown overlay and keybind display
- Real-time health and cooldown tracking via signals
- Scrollable character sheet with two-page layout
- Player Integration:
- Added UI signals: dash_cooldown_updated, attack_cooldown_updated, weapon_equipped_changed
- Mouse capture system (Escape to toggle, click to recapture)
- Synced attack cooldown from weapons to player for UI tracking
- Updated level.gd to connect local player to HUD Manager
- Updated CLAUDE.md with git commit guidelines