Conversation
Debug Item Texture: - Add PSX-style 64x64 sprite for debug_item (malfunctioning containment device) - Purple/magenta energy core with orange warning lights - Generator script at _claude_scripts/textures/debug_item/generate.py Debug Spawn Flag: - Add Utilities.DEBUG_SPAWN_ALL_ITEMS constant (currently true) - When enabled, spawns one of each permitted item in first chunk (0,0) - Items spawn in grid pattern for easy testing - Set to false for release builds 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…support New Items: - Brass Knuckles (BODY, COMMON): +1 extra attack per level, changes attack to "Punch" - Baseball Bat (BODY, COMMON): 1.25x damage multiplier per level, changes attack to "Swing Bat" UI Improvements: - ActionPreviewUI now shows multi-attack count: "2x 1 target for 7 dmg" - Item billboards doubled in size (0.5 → 1.0) for better visibility - Billboard height increased (1.0 → 1.25) to match larger size Bug Fixes: - Items no longer spawn on top of each other - _is_area_clear now checks for existing items in chunk subchunks - Debug spawn mode tracks occupied positions during batch spawning Technical: - Added extra_attacks field to PoolAttack and AttackPreviewAction - Attack executor passes extra_attacks through preview data - Item spawner validates spawn locations against existing items Texture Generation: - Added 64x64 PSX-style textures for both items - Python generators in _claude_scripts/textures/ 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
New Item: - Wheatie-O's (BODY, COMMON): +2 BODY stat per level (double normal bonus) - Pure stat booster - increases max HP and strength scaling - "Breakfast of champions" themed item Texture: - 64x64 PSX-style cereal box with warm orange/red colors - Python generator in _claude_scripts/textures/wheatie_os/ 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
New Item: - Trail Mix (BODY, RARE): +0.5% HP regen per turn per level - Rarest BODY pool item - provides sustained survivability - Glass jar filled with peanuts, raisins, M&Ms, and sunflower seeds Texture: - 64x64 PSX-style glass jar with colorful trail mix contents - Python generator in _claude_scripts/textures/trail_mix/ 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…range New Item: - Binoculars (MIND, UNCOMMON): +5 PERCEPTION per level - Dramatically increases minimap detection range - Military surplus olive drab design Minimap Perception: - Increased base range: 10 → 15 tiles - Increased per-PERCEPTION bonus: 3 → 5 tiles - Formula: 15 + (PERCEPTION × 5) tiles Texture: - 64x64 PSX-style binoculars with rubber coating and blue lenses - Python generator in _claude_scripts/textures/binoculars/ 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Implements tag-based attack modification system: - Add BASE_ATTACK_TAGS to AttackTypes (physical/melee, sound/psychic, anomaly/ranged) - Add tags array to PoolAttack for runtime tag tracking - Add tag manipulation in AttackExecutor: - add_tags: Items can add tags to attacks (e.g., Siren's Lungs adds "sound") - remove_tags: Items can remove tags (for transformative effects) - tag_damage_multiply: Multipliers apply to ANY attack with matching tag - Tags work across pools enabling powerful combos Coach's Whistle item (MIND pool, UNCOMMON): - 1.5x damage multiplier per level to "sound" tagged attacks - Stacks exponentially (1.5^level): L1=1.5x, L2=2.25x, L3=3.375x - Synergizes with base MIND "Whistle" attack (has "sound" tag) - Future synergy: Siren's Lungs + Brass Knuckles + Coach's Whistle Files: - scripts/combat/attack_types.gd: BASE_ATTACK_TAGS constant - scripts/combat/pool_attack.gd: tags array with typed assignment - scripts/combat/attack_executor.gd: Tag manipulation in _build_attack() - scripts/items/item.gd: Updated get_attack_modifiers() documentation - scripts/items/coachs_whistle.gd: New item implementation - docs/USER_ITEM_DESCRIPTIONS.md: Added Siren's Lungs spec 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Lucky Rabbit's Foot (NULL pool, UNCOMMON): - Costs 2 mana, 3-turn internal cooldown - 15% + 5% per level chance to reset a random cooldown - Can reset item cooldowns OR attack pool cooldowns (BODY/MIND/NULL) - Only activates when something is actually on cooldown (saves mana) - Cannot reset its own cooldown (would be too powerful) Cooldown interface added to base Item class: - has_cooldown(): Returns true if item has internal cooldown - get_cooldown_remaining(): Returns turns until ready - reset_cooldown(): Resets cooldown to 0 - Enables items like Lucky Rabbit's Foot to manipulate other items Also includes: - Brass Knuckles rarity changed from COMMON to RARE - Creepy matted rabbit's foot texture (64x64 PSX style) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Roman Coin (NULL pool, COMMON): - +5% mana regen per level (% of max mana per turn) - Standard NULL stat bonus (+N NULL) - Stacks with base regen (NULL/2 per turn) - Simple, reliable mana sustain for NULL builds - Ancient bronze coin texture with verdigris patina - "The faded visage of the emperor seems to be crying out in pain" Note: Added venv/.gdignore locally to prevent Godot from importing numpy's test CSV files as translation resources (not tracked in git). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
… improvements Antigonous Notebook (NULL pool, LEGENDARY): - On equip: Permanently increases corruption by 0.1 × level - Passive: +3×N NULL stat bonus (in addition to base +N) - Reactive shield: When hit, if cooldown ready and mana sufficient, spend mana to block damage completely - 5-turn cooldown between shield activations - High-risk, high-reward item that synergizes with mana builds New damage interception system in StatBlock: - damage_interceptors array for reactive damage prevention - Interceptors are called when damage is received (before shields) - Callback signature: func(amount: float) -> bool - Returns true to block damage (handles own resource costs) - Separate from proactive damage_shields (pre-activated) Item status display in action preview UI: - New ItemStatusAction class for showing item ready/cooldown states - Items can implement get_status_display() to show status - Shows "🛡 READY (5 mana)" when shield is available - Shows "🕐 3 → 2" when on cooldown - Added to both idle_state and look_mode_state for parity Wait action UI improvements: - Changed icon from ⏸ to 🖱️ (control hint style) - Shows "[RT/LMB]" as target instead of coordinates - Consistent with other control hints in the UI Corruption enemy spawning fix: - Increased ENTITIES_PER_CORRUPTION from 2 to 14 - Changed int() to roundi() for smoother scaling - At 0.5 corruption: now 10 enemies/chunk (was 4) - At 1.0 corruption: now 17 enemies/chunk (was 5) - Players will actually feel "swarmed" at high corruption 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Siren's Cords (BODY pool, EPIC rarity): - Transforms BODY attack into "Siren Scream" (sound-based AOE) - Adds "sound" tag, removes "melee" tag - Changes attack pattern to AOE_AROUND (hits all enemies in range) - +0.5 range per level - Synergizes with Coach's Whistle for sound damage multiplier Cross-pool tag_damage_multiply fix: - Fixed bug where tag_damage_multiply only collected from attack's own pool - Now collects from ALL pools, enabling cross-pool synergies - Example: Coach's Whistle (MIND) now correctly boosts Siren's Cords (BODY) when Siren's Cords adds the "sound" tag to BODY attacks Also updated USER_ITEM_DESCRIPTIONS.md with Shovel and Drinking Bird specs. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…onus Shovel (BODY pool, UNCOMMON rarity): - Changes BODY attack to "Shovel Hit" with new SWEEP area pattern - SWEEP targeting: hits nearest enemy + enemies on perpendicular tiles - Item spawn rate bonus: +5% base, +1% per level after first - Standard +N BODY stat bonus New systems: - AttackTypes.Area.SWEEP enum for sweeping melee attacks - _filter_sweep_targets() in attack_executor for sweep targeting logic - get_passive_modifiers() in Item base class for non-attack bonuses - _get_player_spawn_rate_bonus() in ItemSpawner collects bonuses from items - ItemSpawner now accepts optional player reference for spawn rate modifiers 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add new MIND pool item that reduces ALL cooldowns (attack pools AND item internal cooldowns). The effect uses an asymptotic formula that approaches 50% reduction at level 20. Changes: - New Drinking Bird item (COMMON rarity, MIND pool) - Passive cooldown_multiply modifier via get_passive_modifiers() - Asymptotic scaling: ~7% at L1, ~24% at L5, ~39% at L10, ~48% at L20 - Global cooldown system updates: - Player3D.get_cooldown_multiply() calculates total from all equipped items - AttackExecutor collects cooldown_multiply from passive modifiers - LuckyRabbitsFoot and AntigonousNotebook now apply global cooldown reduction - Added drinking_bird texture (32x32 pixel art) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Almond Water is a MIND pool item that provides passive sanity recovery, essential for long exploration runs where environmental sanity drain accumulates. This parallels Trail Mix for BODY (HP regen). Properties (scale with level N): - +0.5% Sanity regen per turn per level - Standard MIND stat bonus (+N MIND) Example scaling: - Level 1: +0.5% Sanity regen/turn, +1 MIND - Level 5: +2.5% Sanity regen/turn, +5 MIND Design rationale: - Core MIND sustain item (counterpart to Trail Mix for BODY) - Classic Backrooms lore item (safe liquid in the Backrooms) - RARE rarity (2% spawn chance) makes it a valuable find - Passive regen counters constant sanity drain from isolation horror Files added: - scripts/items/almond_water.gd - Item implementation - assets/textures/items/almond_water.png - 32x32 pixel art sprite - _claude_scripts/textures/almond_water/ - Texture generation script 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Adds PauseManager.set_pause(bool) as an idempotent alternative to toggle_pause() for use by popup panels. This prevents issues where popups could accidentally unpause the game by calling toggle when already paused. Changes: - PauseManager: Add set_pause() method that only changes state if needed - PauseManager: Fix toggle_pause() to call _enter/_exit_hud_mode() - LevelUpPanel: Use set_pause() instead of toggle_pause() - LevelUpPanel: Fix queue by setting visible=true before any awaits - LevelUpPanel: Re-update panel position after frame wait for sizing - ItemSlotSelectionPanel: Use set_pause() for consistency - GameOverPanel: Use set_pause() for consistency - AntigonousNotebook: Increase shield cooldown from 5 to 15 turns The level-up queue fix ensures that when multiple level-ups occur on the same frame, subsequent ones properly queue instead of racing. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Implements environmental sanity pressure that occurs every 13th turn: Sanity damage formula (corruption-scaled): - Base damage = corruption * 10 (0.01 → 0, 0.1 → 1) - Per-enemy damage = 0.2 + corruption * 6 (weighted by threat level) - At 0.01 corruption with 3 enemies: 0.6 damage - At 0.1 corruption with 3 enemies: 3.4 damage Threat level weights for sanity calculation: - Gimel (0): 0, Daleth (1): 1, Epsilon (2): 3 - Keter (3): 5, Aleph (4): 13, Boss (5): 25 Sanity restoration on enemy kill: - Restores sanity equal to enemy's threat weight - Primary way to maintain sanity during combat Base sanity regeneration: - 0.025% of max sanity per turn (quarter of HP regen rate) Action preview UI: - Shows upcoming sanity drain within 4 turns - "NEXT TURN" indicator when damage imminent - Displays in both idle and look mode states 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Move entity-specific AI logic from match statements in EntityAI to individual behavior classes. This follows the Open/Closed principle - adding new entities no longer requires modifying existing code. Architecture: - EntityBehavior: Base class with shared utilities (pathfinding, attack) - BehaviorRegistry: Maps entity_type → behavior instance (singleton) - WorldEntity.take_damage() now delegates to EntityAI.apply_damage() New behavior classes: - DebugEnemyBehavior: Stationary punching bag - BacteriaSpawnBehavior: Swarming melee enemy (80 tile sense, 1 move) - BacteriaMotherloadBehavior: Spawner (32 tile sense, 2 moves when aware) - SmilerBehavior: Stalker with sound vulnerability (instant kill) Benefits: - Each entity's behavior is self-contained in one file - Easy to see all behaviors for a specific entity type - Damage handling (immunities/vulnerabilities) per-entity - Chunk serialization unchanged - WorldEntity stays as data container 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…tion distance Add the Smiler - a classic Backrooms entity with glowing eyes and an unnerving smile. Smilers deal sanity damage when in line of sight and are vulnerable to sound-based attacks. - Add Smiler texture (64x64, glowing eyes + toothy smile) - Add Smiler to Level 0 spawn table with sanity-drain-only mechanics - Add extra sanity contribution for Smiler in sanity_damage_action.gd - Add DEBUG_SPAWN_ENTITY flag for spawning test entities near player - Fix entity height override bug in _on_entity_moved (was using constant) - Double examination raycast distance from 5 to 10 tiles 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
New support enemy for Level 0 that buffs bacterial swarms: - Passive healing aura: heals nearby bacteria [DAMAGE]% max HP each turn - AOE attack: 3 base damage in 3x3 area - Can attack AND move on the same turn - Healing scales with corruption (via damage_scale) - Threat level 2 (Epsilon) - moderate priority target Implementation: - BacteriaSpreaderBehavior class with polymorphic behavior system - Generated texture with perlin noise spore cloud effect - Progressive revelation descriptions for examination system - Added to Level 0 spawn table with corruption scaling 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Owner
Author
Code Review ResultsCritical Issues (3) - Will Fix
Important Issues - Will Fix
Important Issues - Won't Fix (Acceptable)
Minor Issues (6) - Will Fix
Architecture Review ResultsGrade: A- (Excellent)Strengths identified:
Will Address
Won't Address (By Design)
Fixes incoming in follow-up commits. |
Critical fixes: - Add public get_cooldown/reset_cooldown methods to AttackExecutor (LuckyRabbitsFoot was accessing private _cooldowns field) - Add is_instance_valid check in AntigonousNotebook damage interceptor - Add array bounds checks in ItemSpawner before index access Important improvements: - Centralize THREAT_WEIGHTS constant in EntityRegistry (was duplicated in sanity_damage_action.gd and player_3d.gd) - Add null check for get_passive_modifiers() return value - Improve sanity damage turn calculation comment with formula example - Add corruption scaling documentation with formula example Minor fixes: - Add clarifying comment for ItemRarity.Tier naming (vs Type) - Add unit comments to SmilerBehavior constants - Fix DrinkingBird description (said RARE, is actually COMMON) - Make ItemStatusAction match exhaustive with explicit wildcard branch - Create centralized AttackTypes.Tags class for tag constants - Update sirens_cords, coachs_whistle, smiler_behavior to use Tags 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Owner
Author
Review Fixes Applied ✅All requested code review issues have been addressed in commit 913fdd6. Critical (3/3)
Important (4/4 requested)
Minor (6/6)
Architecture Review
Not Addressed (by request)
|
Owner
Author
Code Review (Round 2) 🔍Critical Issues
Important Issues
Acknowledged (No Action)
Architecture Review (Round 2) 🏗️Grade: A- Strengths
Acknowledged (Deferred)
Verdict: Ready to merge after critical fixes |
- Fix EntityRegistry.THREAT_WEIGHTS access outside null check (moved return inside if block, added fallback) - Add callable validation to damage interceptor (prevents crash if item unequipped during damage frame) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Owner
Author
Round 2 Fixes Applied ✅Commit f8bfd81 addresses:
Issues Verified as Non-Issues:
Ready for merge! 🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR completes the core item and entity systems for Level 0 of the Backrooms Power Crawl:
Items (14 new items across all pools):
Entities (2 new enemies):
Systems:
Test plan
🤖 Generated with Claude Code