Relics + Events + Rewards: 30 event generators, boss relic skip#7
Relics + Events + Rewards: 30 event generators, boss relic skip#7JackSwitzer wants to merge 1 commit intomainfrom
Conversation
- Fix conftest.py path issue causing imports from main repo instead of worktree
- Add ~30 event choice generators for previously missing events:
- Act 1: Sssserpent, Mushrooms, ShiningLight, DeadAdventurer, WingStatue
- Act 2: Addict, Augmenter, BackToBasics, Beggar, CursedTome, ForgottenAltar,
Ghosts, Nest, Vampires
- Act 3: Falling, MoaiHead, MysteriousSphere, SecretPortal, SensoryStone,
TombOfLordRedMask, WindingHalls
- Special: AccursedBlacksmith, BonfireElementals, Designer, FaceTrader,
FountainOfCleansing, TheJoust, TheLab, Nloth, WeMeetAgain, WomanInBlue
- Add SkipBossRelicAction for explicit boss relic skip
- Add execute_action alias for API compatibility with handle_action
- Extend BossRelicChoices with is_skipped property for skip tracking
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.
PR #7 Code Review: Events + Rewards - Java Parity AuditCritical Issues1. Vampires Event - Missing Blood Vial Choice
Medium Issues
Verified Correct
Review by Claude Opus 4.5 |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 2 potential issues.
Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.
This PR is being reviewed by Cursor Bugbot
Details
You are on the Bugbot Free tier. On this plan, Bugbot will review limited PRs each billing cycle.
To receive Bugbot reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial.
| run_state: 'RunState' | ||
| ) -> List[EventChoice]: | ||
| """Fountain of Cleansing: Drink or Leave.""" | ||
| has_curses = any(c.id in handler.CURSE_CARDS or c.id in handler.UNREMOVABLE_CURSES for c in run_state.deck) |
There was a problem hiding this comment.
Fountain event shows wrong text for unremovable curses
Medium Severity
The _get_fountain_of_cleansing_choices function uses or to check for curses: c.id in handler.CURSE_CARDS or c.id in handler.UNREMOVABLE_CURSES. This makes has_curses true even when the player only has unremovable curses (like AscendersBane). However, the actual handler at line 2584 only removes curses that are in CURSE_CARDS AND NOT in UNREMOVABLE_CURSES. This means the choice text will say "[Drink] Remove a curse" when the player has only unremovable curses, but drinking will remove nothing. The check should use and c.id not in handler.UNREMOVABLE_CURSES or simply check only CURSE_CARDS.
| EventChoice(index=0, name="help", text="[Help] Give gold for relic"), | ||
| EventChoice(index=1, name="steal", text="[Steal] Gain Shame curse"), | ||
| EventChoice(index=2, name="leave", text="[Leave]"), | ||
| ] |
There was a problem hiding this comment.
Addict event choices have incorrect indices and labels
High Severity
The _get_addict_choices function has choices that don't match the handler behavior. The handler at _handle_addict expects: index 0 = pay gold for relic, index 1 = refuse (gain Shame curse only), index 2 = rob (get relic + Shame). But the choice generator provides: index 0 = "help" (matches), index 1 = "steal" with text about gaining Shame (but handler just refuses, no stealing), index 2 = "leave" (but handler actually robs/steals). The "[Leave]" choice will actually steal a relic and give a curse, which is completely misleading and potentially game-breaking.
Correction: PR #7 Events Review - Retracted ClaimsAfter deeper audit against Java source: ❌ RETRACTED: Sensory StoneMy review claimed Python has "2 choices with different logic" - this is INCORRECT. Python correctly implements all 3 choices:
New finding: Python documents A15+ damage modifiers (5/8, 10/15) but Java uses fixed 5/10 values with no ascension scaling. ❌ RETRACTED: Winding HallsMy review claimed "only exposes 2 of 3 choices" - this is INCORRECT. Python correctly exposes all 3 choices:
✅ CONFIRMED CORRECT:
Correction by Claude Opus 4.5 |


Summary
Event Generators Added
Test Results
4193 tests passing
Files Changed
🤖 Generated with Claude Code
Note
Medium Risk
Adds a new boss-reward action (
SkipBossRelicAction) and sentinelchosen_index=-1, which could affect downstream logic that assumes a boss relic is always selected. Event choice generation is largely additive but touches many event IDs and availability rules.Overview
Expands event choice coverage by adding ~30 new
EVENT_CHOICE_GENERATORSentries across Acts 1–3 and special one-time events, making more events return structured choices (including deck-dependent options forFalling).Updates boss reward flow to support explicitly skipping boss relic selection via
SkipBossRelicAction, tracking skips withBossRelicChoices.chosen_index = -1(plusis_skipped/__repr__updates) and exposingexecute_actionas an alias ofhandle_action.Fixes test setup portability by deriving the repo root dynamically in
tests/conftest.pyinstead of using a hardcoded absolute path.Written by Cursor Bugbot for commit f902c0f. This will update automatically on new commits. Configure here.