Spaces:
Sleeping
Sleeping
| import os | |
| import sys | |
| sys.path.append(os.getcwd()) | |
| from engine.game.data_loader import CardDataLoader | |
| from engine.game.enums import Phase | |
| from engine.game.game_state import GameState | |
| def reproduce_loop(): | |
| print("Initializing GameState...") | |
| # Load data | |
| json_path = os.path.join(os.getcwd(), "data", "cards.json") | |
| loader = CardDataLoader(json_path) | |
| # Assuming loader defaults work, or we point to data/cards_compiled.json | |
| # We might need to handle paths if CWD is wrong, but we set CWD in run_command. | |
| members, lives, energy = loader.load() | |
| GameState.initialize_class_db(members, lives) | |
| gs = GameState() | |
| # gs.reset_game() # Does not exist | |
| p0 = gs.players[0] | |
| # Setup state matching the report | |
| # Player 0 Stage: Miyashita Ai (Nijigasaki) | |
| # ID: 3146176 | |
| # Note: Using compiled IDs requires checking logic consistency | |
| # Assuming standard loading handles IDs correctly | |
| # Clear decks/hands for clarity | |
| p0.hand = [] | |
| p0.stage = [-1] * 3 | |
| p0.stage_energy = [[], [], []] | |
| p0.live_zone = [] | |
| # Add Miyashita Ai to Stage 0 | |
| p0.stage[0] = 3146176 # PL!N-sd1-017-SD (Nijigasaki) | |
| p0.tapped_members[0] = False | |
| # Add Love wing bell to Live Zone | |
| # ID: 1049587 | |
| p0.live_zone.append(1049587) | |
| # Set Phase to PERFORMANCE_P1 | |
| gs.phase = Phase.PERFORMANCE_P1 | |
| gs.current_player = 0 | |
| gs.first_player = 0 | |
| # Ensure performance_abilities_processed is False | |
| p0.performance_abilities_processed = False | |
| print(f"Initial Phase: {gs.phase}") | |
| print(f"P0 Stage: {p0.stage}") | |
| print(f"P0 Live Zone: {p0.live_zone}") | |
| # Step 1: Should trigger ability and queue it | |
| print("\n--- Executing Step(0) #1 ---") | |
| gs = gs.step(0) | |
| print(f"Phase after #1: {gs.phase}") | |
| # Check if ability triggered | |
| # (can't check internal triggered_abilities easily from outside without inspection, but phase shouldn't change yet if it returned early) | |
| if gs.phase == Phase.PERFORMANCE_P1: | |
| print("Phase stayed P1 (Expected: Ability Triggered)") | |
| else: | |
| print(f"Phase changed unexpectedly! {gs.phase}") | |
| # Step 2: Should process ability and advance | |
| print("\n--- Executing Step(0) #2 ---") | |
| gs = gs.step(0) | |
| print(f"Phase after #2: {gs.phase}") | |
| if gs.phase != Phase.PERFORMANCE_P1: | |
| print("SUCCESS: Phase advanced!") | |
| else: | |
| print("FAILURE: Phase stuck in PERFORMANCE_P1 (Infinite Loop detected)") | |
| # Inspection | |
| print(f"Pending Choices: {gs.pending_choices}") | |
| print(f"Triggered Abilities: {gs.triggered_abilities}") | |
| print(f"Pending Effects: {gs.pending_effects}") | |
| print(f"Processed Flag: {getattr(p0, 'performance_abilities_processed', 'Missing')}") | |
| if __name__ == "__main__": | |
| reproduce_loop() | |