- April 10-11, 2026
- ---
- ADDED
- New Hero: Drose (Private)
- - Human fused with a rose. 7 passives + 1 ultimate
- - Thorn Armor: 15% chance to reflect 10 damage back to attacker
- - Poison Thorns: 12% chance to poison enemy for 3 DPS over 8s (green damage numbers)
- - Life Drain: Heal 15% of all damage dealt (green heal numbers)
- - Rose Bloom: +20% max HP
- - Petal Shield: 12% damage reduction
- - Thorn Whip: +20% damage boost
- - Fragrance: Enemies within 150u deal reduced damage
- - Ultimate — Garden of Thorns: Thorn field at cursor, 8 DPS + 40% slow, 500u radius, 8s duration, 25s cooldown
- - Custom model support with SwapModel system
- - Full skill progression integration (all 7 passives scale with Power)
- - Customizable sounds, prefabs, and models for all proc abilities
- New System: Skill Progression
- - Each skill has 3 levels: 33% / 66% / 100% power
- - Skill points are per-hero: hero level = available points minus spent
- - Ultimate abilities locked until hero level 10
- - Negative skills (penalties) always at full power, not upgradable
- - Save/load to skills.json
- - Reset per-hero or all skills
- New UI: Skill Upgrade Menu (F key)
- - Full upgrade interface with skill names, descriptions, level indicators
- - Power percentage preview with upgrade projection
- - UPGRADE button for available skills
- - ULT shows LOCKED/UNLOCKED status
- - Close button (X) with cursor support
- - Cannot open simultaneously with TAB menu
- New UI: Level Up Notification
- - Right-side notification: "LEVEL UP! / NEW SKILLS AVAILABLE / PRESS F TO UPGRADE"
- - Pulsing animation, yellow border, auto-hides after 5 seconds
- New System: Admin System
- - 3 admin levels: Lvl 1 (Kick), Lvl 2 (+Ban), Lvl 3 (Full access)
- - VIP role — special status assignable by Lvl 3 admins
- - Time-limited access: admins, VIP, private heroes — grant for 1/7/30 days
- - Ban system: custom duration (minutes to days), ban reason, permanent bans
- - Admin action log with timestamps (up to 200 entries)
- - Banned players list with remaining time and reason
- - Save/load to admin_access.json
- - Console commands: admin_grant, admin_revoke, admin_ban, admin_unban, admin_vip, admin_setadmin, reset_all_levels
- (admin-only)
- New UI: Admin Menu (key 5)
- - 3 tabs: PLAYERS, BANS, LOG
- - Player selection with full info (name, Steam ID, hero, level, admin level)
- - Action buttons filtered by admin level
- - Private hero management: grant/revoke with 1D/7D/30D buttons
- - z-index 999 (renders above crosshair)
- New System: Private Heroes
- - HeroInfo.IsPrivate flag for exclusive heroes
- - PRIVATE HEROES button (yellow border) in TAB menu
- - Separate panel for private heroes with access status and remaining days
- - Access granted via admin menu or console commands
- - Time-limited access with automatic expiration
- New Effect: Poison Effect
- - PoisonEffect.cs — DOT component with green damage numbers
- - Customizable prefab, model, DPS, duration
- - Green tint on poisoned targets
- New Effect: Damage Number Colors
- - White: normal damage
- - Red: marked target bonus (Marksman)
- - Yellow: Divine Strike (Healer)
- - Blue: Gravity Slam
- - Green: poison DOT, life drain heal
- - Orange-red: burn DOT (Inferno)
- Healer — Reworked Abilities
- - Resilience replaced with Divine Strike: 12% chance to deal 12 bonus holy damage (yellow numbers)
- - Heavy Rounds replaced with Divine Armor: up to 50% damage reduction
- - Customizable sound, model, and prefab for Divine Strike
- - Updated hero description and all ability texts
- Gravity Man — Full Rework
- - Gravity Launch replaced with Gravity Slam: launch up, slam down, 20 damage (blue numbers)
- - Zero Gravity replaced with Black Hole: spawns at cursor, 1500u radius, pulls all objects for 5s, 30s cooldown
- - Black Hole pulls: Rigidbody objects, PlayerControllers, mobs (via WorldPosition)
- - Customizable sounds for slam proc and hit, prefab/model/sound for Black Hole
- Marksman — Aim Assist
- - Mark Target now includes aim-assist: bullets magnetize to marked target's chest (8 degree angle)
- - Damage bonus (+50%) moved to Projectile.cs for reliable application
- - Marked target damage numbers shown in red
- - AimAssistAngle and AimAssistHeightOffset configurable in inspector
- Mob AI — Ranged Behavior
- - Mobs throw rocks from range when they have line of sight (no longer run directly under player)
- - Line of sight check prevents rocks through walls/obstacles
- - Fast transition to ranged when target is elevated (>60u height difference)
- - Return to chase when target is reachable for melee
- - AttackSpin animation during rock throw
- - Removed impact particles from rock projectiles
- Scoreboard (V key)
- - Steam display name instead of GameObject name
- - Steam avatar (38x38) next to player name
- - Role badges: [ADM3], [ADM2], [ADM1], [VIP] in blue
- - Name truncated to 6 characters with ellipsis
- - 20% size increase: 1200px width, 22px row font, 34px title
- - Column headers: 16px blue (#55aadd)
- - KILL command damage excluded from received damage stats
- TAB Menu (Hero Select)
- - Static layout — no dynamic resizing
- - Hero name on top, buttons below
- - INFO panel on left — compact, no empty space
- - Ability descriptions in blue, 12-13px font
- - Standardized tags: PAS (blue), ULT (orange), NEG (red)
- - Description line-height fixed (no text overlap)
- - PRIVATE HEROES button with yellow border
- - KILL button enlarged and centered
- - Removed UNLOCK ALL and RESET buttons
- - Pagination system for 10+ heroes (both normal and private)
- XP/Level System
- - Linear formula: 500 + (level-1) * 200 XP per level
- - Level 1→2: 500 XP, Level 49→50: 10,300 XP
- - BaseXPPerLevel and XPPerLevelIncrease configurable in inspector
- Multiplayer — Visual Sync
- - All hero ultimates now broadcast visual effects to all clients
- - Inferno Eruption: [Broadcast] for particles and sound
- - Cryomancer Blizzard: [Broadcast] for ice shards and sound
- - Healer Healing Pulse: [Broadcast] for pulse effect and sound
- - Gravity Black Hole: [Broadcast] for spawn/destroy visuals
- - Drose Garden of Thorns: [Broadcast] for spawn/destroy visuals
- - Drose abilities: [Broadcast] for poison, drain, and thorn reflect sounds
- - Tank Shield: [Broadcast] for activate/deactivate sounds
- - Speedster Dash: [Broadcast] for dash sound
- - Phantom Cloak: [Broadcast] for cloak/uncloak sounds
- Multiplayer — Weapon Sync
- - WeaponLoadout.ActiveSlot now [Sync] — all clients know active weapon
- - BroadcastSwitchWeapon — all clients see weapon switching
- - ApplyHoldType on switch — all clients see correct hold animation (rifle vs shotgun)
- - BroadcastWeaponRefresh on respawn — fixes stale weapon viewmodels
- - Phantom cloak now hides/shows weapon viewmodel via SetViewModelAlpha
- Multiplayer — Player Models
- - Steam clothing/skins loaded via ClothingContainer for all players
- - Clothing hidden when using custom model heroes (Fimozik, Drose)
- - Citizen model cached in OnAwake (before any SwapModel) to prevent model corruption
- - SwapModel validates saved model is not another hero's model
- Durability
- - Hit sound cooldown (80ms) — fixes loud shotgun pellet spam
- - InstantKill() method — death without damage stats (for KILL button)
- Weapon System
- - Both weapons firing simultaneously — EnforceActiveWeapon every frame
- - Missing weapon selection HUD — expanded WeaponLoadout search (self, children, parent)
- - Duplicate SlotIndex auto-fix — weapons with same slot get reassigned
- - Disabled WeaponLoadout auto-enable — weapons detect and enable loadout
- - Weapon.IsActiveWeapon() — each weapon self-checks against loadout
- - HeroFimozik.SetGunsEnabled — proper weapon restore after hero switch
- Razor Compilation
- - SkillUpgradeMenu.razor rewritten — removed button tag (not supported in s&box UI)
- - Fixed onclick syntax (removed quotes around @() expressions)
- - Removed special Unicode characters that could break Razor parser
- - Simplified template structure using foreach over data structs
- Hero Model Swapping
- - Fixed Fimozik model persisting on other heroes after switch
- - _citizenModel saved in OnAwake before any OnEnabled fires
- - SwapModel validates model before saving (won't save Fimozik/Drose as citizen)
- - Static citizen model cache shared between all hero swap systems
- Phantom Invisibility
- - Removed duplicate cloak logic from HeroController (now only in HeroPhantom)
- - Weapon viewmodel becomes transparent during cloak
- - Cloak/uncloak sounds broadcast to all clients
- Gravity Man
- - Black Hole tick logic moved inside IsProxy check — no more duplicate damage
- - BlackHole timer reset in BroadcastBlackHoleSpawn — prevents instant despawn on proxy
- - Visual rotation separated from logic tick
- Drose
- - Garden of Thorns timer reset in BroadcastGardenSpawn — prevents instant despawn
- - Garden tick (damage/slow) restricted to owner only — no duplicate damage
- - Garden visual rotation runs on all clients
- Speedster
- - Fixed missing braces in DashDamage — sound no longer plays for all enemies in scene
- Scoreboard
- - SteamId type cast fix (CS0172 conditional expression error)
- CSS
- - overflow-y: auto replaced with overflow: scroll (s&box UI compatibility)
- - SkillUpgradeMenu pointer-events: none on root (fixed cursor stuck on screen)
- - UNLOCK ALL button from TAB menu
- - RESET LEVELS button from TAB menu
- - Patrol spam logs from MobEnemy
- - Debug logs: [MARK-DEBUG], [PATROL], [LOADOUT], [BONE], [WEAPON]
- - Duplicate Phantom visual logic from HeroController
- - Exponential XP scaling formula (replaced with linear)
- - Drose custom model weapon bone offset may require manual adjustment in Blender per model
- - Phantom cloak visual may have 1-frame delay on proxy clients due to [Sync] propagation
- - Mob NavMeshAgent speed not fully restored if mob dies during Drose Garden of Thorns slow
- - Admin system saves locally — not shared across server restarts without persistent storage
- - Private hero access timer uses UTC — may show incorrect remaining days in different timezones
- - Clothing visibility toggle runs every frame on custom model heroes (minor performance cost)