Fix Shogun replay window — Event ID 65739#98
Open
ricini343 wants to merge 64 commits intoStakeEngine:mainfrom
Open
Fix Shogun replay window — Event ID 65739#98ricini343 wants to merge 64 commits intoStakeEngine:mainfrom
ricini343 wants to merge 64 commits intoStakeEngine:mainfrom
Conversation
…gths - Set all multipliers to 1 (no effect) to test floor RTP - BR0 reel length 70->200, FR0 70->400 (lower wild frequency) - Add GitHub Actions workflow for simulation - Fix f-string syntax in get_file_hash.py Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- All wild multipliers set to 1 (no effect) to test floor RTP - BR0 reel length 70->200, FR0 70->400 (lower wild frequency) - Full game files: gamestate, config, events, executables Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Multiplier pool: {2:300, 3:100, 4:30, 5:20, 10:5, 20:5, 50:1} (avg ~3.5x)
- Reel strips: BR0=628, FR0=620 (matching reference lengths)
- BR0: 4 wilds/reel, FR0: 3 wilds/reel
- Distribution quotas: wincap 0.1%, freegame 10%, zero 40%, base 49.9%
- Enable Rust optimizer (run_optimization=True)
- 100k sims per mode
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… proper win_ranges
The RGS end-round request was fire-and-forget, causing the next play request to fire before the previous round closed. This made the RGS reject with ERR_VAL. Now endRound() is awaited in both base game and free spins exit paths. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Frontend fixes: - End-round: prevent 400 by guarding double calls, demo no-op, failed play check - RTP display: 96% → 97% across all Game Info pages - Bet levels: currency-specific defaults (JPY=100, MXN=10, USD=1) - Portrait mode: removed rotation requirement, scales to fit - Auth fallback: gracefully falls back to demo mode instead of CONNECTION ERROR - Social mode: works via auth fallback fix Sims: increased from 1k to 100k per mode, 4 threads, batch 5000 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Rows 137-400 were all J,J,J,J,J — 66% of free spin board positions would be J. Truncated to 136 rows of real balanced data. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Cargo not available on GitHub Actions runner. Sims + config gen still work. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Wild multiplier pools: base game now has 2×-100× multipliers - Free spins pool updated with 100× option - Wincap pool rebalanced with higher multipliers - Frontend: hide multiplier badge text for 1× wilds, show for 2×+ - Frontend: socLabel wrapping on game info page titles - Frontend: buy bonus sends base bet (RGS applies cost multiplier) - Frontend: replay mode includes language parameter - Requires math re-run to rebalance RTP with new pools Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
multiplier_strategy.py line 49 was missing round(, 2) causing floating-point drift in all combined-multiplier wins. This affected Q symbol payouts and L19 payline calculations flagged by Stake Engine review. Also includes all frontend fixes from Stake Engine review: - Game Info max win values corrected to 15,000× - FREE SPINS COMPLETE text overflow fix for portrait - Balance deduction timing (immediate on spin start) - Mobile font size improvements - Portrait control bar with all buttons visible Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Underground fight tournament slot: 6x5 grid, cluster pays, 15000x wincap, 97% RTP. KO Reels multiplier grows per cascade. 4 bet modes: base (1x), exhibition (75x), title_fight (150x), death_match (300x). Death Match converts random fighter to WILD. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
reset_ko_mult() was called during __init__ via reset_book() before betmode is set by the simulation runner. Guard with hasattr check. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… books The replay system was trying to load local book_base.json files which don't exist in production. Root cause: IS_REPLAY set IS_DEMO=true, which made authenticate() skip the RGS call entirely, so round data was never fetched. - authenticate() now calls RGS even in replay mode - Store RGS round data from authenticate response for replay use - fetchReplayData() uses RGS round state events as primary source, local book files as fallback for dev/demo only Reported by Stake Engine: Event ID 65739, Front v105, Math v6 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
GitHub Actions workflow for running Sugar Stack (fruits) simulations with 500k entries per mode (base, buy_bonus, super_buy_bonus). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Python game logic, config, reel strips needed by the simulation workflow. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
SDK construct_paths() resolves paths from game_id, not the dev folder name. Copied game source + reels to games/1_2_sugar_stack/ and updated workflow. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
RTP mismatch in optimization config — skip for now, just need book generation. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Small run to verify book generation and frontend integration before full 500k. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Reduced wilds from ~19 total to 5 (one per reel) on the free spins reel strip. The previous strip had 3-4 wilds per reel which, combined with expanding sticky wilds and multiplier stacking, produced ~850% RTP instead of the target 96%. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Enable Rust optimizer to adjust probability weights and hit 96% target RTP. Previous runs showed ~9000% RTP with unoptimized reel strips. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…l + RTP fix - Backward lurch (16px up) before spin + elastic overshoot (10px) on stop - Symbol texture atlas: 13 symbols in single 4096x4096 spritesheet (1 GPU bind vs 13) - Graphics object pool: reuse PIXI.Graphics across spins instead of create/abandon - Proper cleanup: pooled Graphics released, Text objects destroyed with texture:false - RTP fix: optimization basegame 0.56→0.55 so params sum to 0.96 (was 0.97, mismatched target) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Base: basegame 0.56→0.55, buy_bonus: freegame 0.96→0.95, super: 0.96→0.95 All modes now sum to 0.96 matching game_config.rtp target. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…strips FS wild rate 45%→12%, buy bonus extra wild 25%→8%, on-the-fly FS 20%→8%, base game 30%→18%. Prevents all-wild boards during free spins in demo mode. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…oard makeBoard() was filling ALL cells on sticky reels with WILD, making them appear fully wild before expansion. Now places ONE wild at random row, letting the expansion overlay handle the visual fill-up animation. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…x startup lag - Add double_chance bet mode (1.5x cost, 2x freegame quota) to math config, optimization, and run.py - Remove freegame retrigger from freespin_triggers (base game only) - Remove scatter symbols from FR0.csv (no retriggers possible) - Add GPU texture pre-upload (renderer.prepare.upload) after asset load + after scene build - Add document.fonts.ready gate before scene construction - Pre-decode bg_base.png during splash for instant swap on dismiss Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- base: basegame 0.56→0.55 (0.01+0+0.40+0.55=0.96) - double_chance: basegame 0.46→0.45 (0.01+0+0.50+0.45=0.96) - buy_bonus: freegame 0.96→0.95 (0.01+0.95=0.96) - super_buy_bonus: freegame 0.96→0.95 (0.01+0.95=0.96) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
RGS parser rejects books with "multiplier" field on individual board symbols. Multiplier data is already emitted via expandingWild events — no need to duplicate it on every W symbol in the reveal board. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1. Wild mult re-roll: sticky wilds now get fresh multiplier each FS spin 2. Multiplier escalation: early/mid/late pools (small→big as FS progresses) 3. Dead spin protection: 1 re-draw if zero win with sticky wilds in FS 4. Base game bait: higher weights for 50x/100x (visual bait, rarely connects) 5. Frontend: added PAYOUTS→PRIZES to socLabel, wrapped PAYTABLE/PAYLINES titles Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ap, social mode, freeze - Restore bet from localStorage after RGS auth to survive base game refresh - Call _hideSideUI() during FS recovery to prevent Buy Bonus overlapping spins counter - Remove socialCasino guards hiding Buy Bonus + Double Chance in social mode - Add _unlockGameUI() when _makeFSScreen cleans up stale overlay to prevent freeze Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Platform parser rejects multi-frame zstd files. This workflow downloads existing sim artifacts and recompresses as single-frame. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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
book_base.jsonfiles that don't existIS_REPLAYsetIS_DEMO=true, which skipped the RGSauthenticate()call entirelyauthenticate()now calls the RGS in replay mode, stores the round state, andfetchReplayData()uses itDetails
Changes
authenticate()— no longer short-circuits with demo data whenIS_REPLAYis trueRGS._replayRoundfrom authenticate responsefetchReplayData()uses RGS round state events as primary source, local books as dev fallbackTest plan
🤖 Generated with Claude Code