Bug fixes
- Lair loot duplication, Minotaur/Dragon no longer drop kill rewards (they already grant lair loot); was doubling loot on boss kills
- Phantom sprites in UI views, Multiple PlayerAvatar instances (ghosts, leaderboard cards, death screen) were bleeding into each other's draw calls, rendering extra sprites in the bottom-left corner of every non-gameplay view. Fixed via a per-instance _draw_at_list for draw_at() vs. global SpriteLists for the batch draw() path
Performance improvements
- PlayerAvatar texture cache, Shared _TEXTURE_CACHE dict eliminates redundant arcade.load_texture calls across multiple instances (10 ghosts no longer load the same 100 textures 10 times each)
- Ghost rendering, 12 draw calls instead of 120+, 12 global SpriteList layers now batch render all player avatars simultaneously
- Floor tile batch rendering, _draw_map in GameView now pre-builds SpriteList objects and issues 2 GL draw calls per frame instead of N individual draw_texture_rect calls
- System polling throttle, steam_manager.update() runs every 4 frames, controller.update() every 2 frames; eliminates micro-hitches and Proton segfaults on Steam Deck
Ghost system
- Removed per-frame alpha/color save-restore loop from ghosts (was expensive and unnecessary)
- Removed ghost tinting (GHOST_TINTS color array removed); ghost transparency is now baked once at avatar creation
Music
- Intro track ("against_evil") plays once on session open, then is permanently dropped from the rotation, it won't loop with the other tracks
- Playlist folder caching added to prevent a filesystem-scan stutter on every on_show_view