Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
1e3a155
fix: reduce Shogun RTP - lower wild multipliers and increase reel len…
ricini343 Mar 30, 2026
a93c9d9
fix: add Shogun game with reduced RTP multipliers
ricini343 Mar 30, 2026
3a7c354
fix: update workflow to use run.py directly
ricini343 Mar 30, 2026
b51eed9
fix: add PYTHONPATH to workflow for SDK imports
ricini343 Mar 30, 2026
30a639b
fix: add toml dependency to workflow
ricini343 Mar 30, 2026
8ac6cbb
fix: handle both construct_paths signatures
ricini343 Mar 30, 2026
e61b24f
Reduce sims to 10k per mode for faster CI iteration
ricini343 Mar 30, 2026
f75af7c
Reduce threads to 2 for CI runners
ricini343 Mar 30, 2026
e76d958
Reduce sims to 1000 for fast iteration
ricini343 Mar 30, 2026
0e4363a
Tune RTP: shorter reels (BR0=100, FR0=80) + moderate multiplier pool …
ricini343 Mar 30, 2026
a5ac65d
Boost multiplier pool: avg ~25x for free game, ~150x for wincap
ricini343 Mar 30, 2026
56eaea7
FR0: 3 wilds per reel on 60-symbol strip (5% wild freq)
ricini343 Mar 30, 2026
52de60d
Fix RTP: match reference 0_0_expwilds config exactly
ricini343 Mar 30, 2026
f3208a9
Fix RTP target to 0.97 to match optimizer params
ricini343 Mar 30, 2026
7554897
Wincap 5000x (matches reference), 10k sims for first test
ricini343 Mar 30, 2026
465a422
Disable sims, run optimizer only
ricini343 Mar 30, 2026
5f53256
Add standalone optimizer script for SHOGUN (correct paths)
ricini343 Mar 30, 2026
012eecc
Add all-in-one fix + optimize script
ricini343 Mar 30, 2026
e9a3328
Add bias field patch to fix script
ricini343 Mar 30, 2026
b8bcdd1
Generate full math_config.json with fences/dresses/bias
ricini343 Mar 30, 2026
702633b
Fix math_config: wincap=15000 matching sim data, correct field types,…
ricini343 Mar 30, 2026
3a4db6d
Set wincap to 15000x, re-enable sims for re-run
ricini343 Mar 30, 2026
7b16744
Reduce sims to 5k for Codespace performance
ricini343 Mar 30, 2026
e95e071
Reduce sims to 1000, single thread for Codespace speed
ricini343 Mar 30, 2026
684a5fd
Add patch_and_run.sh: fix deepcopy bottleneck + run sims
ricini343 Mar 30, 2026
47a4675
Fix freegame fence search: kind=scatter not symbol=scatter
ricini343 Mar 30, 2026
e4900ab
Fix end-round race condition: await endRound before next spin
ricini343 Mar 30, 2026
3159961
Fix all Stake Engine review issues + increase sims to 100k
ricini343 Mar 31, 2026
42a6f37
Fix FR0.csv: remove 264 rows of J padding from free spin reel strip
ricini343 Apr 1, 2026
b439683
Disable Rust optimizer in run.py for CI compatibility
ricini343 Apr 1, 2026
5c3772f
Remove broken RTP check step from sim workflow
ricini343 Apr 1, 2026
e99ee85
Fix RTP validation: divide payoutMultiplier by 100 in lookup CSV
ricini343 Apr 2, 2026
e6e88f2
Enable Rust optimizer for RTP validation + fix frontend bugs
ricini343 Apr 2, 2026
bba846b
Print Rust optimizer stderr on failure for debugging
ricini343 Apr 2, 2026
af86cad
Fix optimizer: search_conditions key mismatch (symbol→kind)
ricini343 Apr 2, 2026
7b90e49
Add base game wild multipliers (Zeus/Hades style) + frontend fixes
ricini343 Apr 2, 2026
1e7e7c5
Fix RTP payout bug: add missing round() in apply_combined_mult
ricini343 Apr 4, 2026
2c24a3e
Add Fight Club (Game 2) — 6x5 cascade cluster with KO Reels mechanic
ricini343 Apr 6, 2026
46d78d6
Fix betmode AttributeError during GameState init
ricini343 Apr 6, 2026
e9f550a
Fix Shogun replay window — fetch round data from RGS instead of local…
ricini343 Apr 7, 2026
199a34a
Add Sugar Stack 500k simulation workflow
ricini343 Apr 10, 2026
b91b466
Add Sugar Stack game source files for simulation
ricini343 Apr 10, 2026
8373901
Fix Sugar Stack sim path — use game_id folder (1_2_sugar_stack)
ricini343 Apr 10, 2026
4cf580a
Disable optimization step for Sugar Stack sim
ricini343 Apr 10, 2026
1f89d1a
Quick 1k test sim for Sugar Stack
ricini343 Apr 10, 2026
7103d41
fix(sugar-stack): reduce FR0 wild frequency from 5.4% to 1.4% per reel
ricini343 Apr 11, 2026
5e39422
feat(sugar-stack): enable optimization + 500k sims
ricini343 Apr 11, 2026
0e9b754
feat(sugar-stack): pro-level reel easing, texture atlas, Graphics poo…
ricini343 Apr 11, 2026
dc3fc34
test(sugar-stack): 10k quick sim to verify RTP before full run
ricini343 Apr 11, 2026
7d542ad
fix(sugar-stack): RTP mismatch in all 3 bet modes (0.97→0.96)
ricini343 Apr 11, 2026
f616440
fix(sugar-stack): reduce demo mode wild frequency to match real reel …
ricini343 Apr 11, 2026
f818aac
fix(sugar-stack): sticky reels show land→expand instead of all-wild b…
ricini343 Apr 11, 2026
86413e6
feat(sugar-stack): add double_chance bet mode, disable retriggers, fi…
ricini343 Apr 12, 2026
b90a502
fix(ci): point sugar-stack workflow to games/fruits directory
ricini343 Apr 12, 2026
3903648
fix(sugar-stack): optimization RTP sums must equal 0.96
ricini343 Apr 12, 2026
70a8fd8
chore(sugar-stack): reduce sims to 50K for initial validation run
ricini343 Apr 12, 2026
a511fd4
fix(ci): artifact path uses game_id (1_2_sugar_stack), not folder name
ricini343 Apr 12, 2026
3137a65
chore(sugar-stack): 500K sims, 6h timeout for full production run
ricini343 Apr 12, 2026
3e718f0
fix(ci): include configs/ folder in math artifacts for RGS
ricini343 Apr 12, 2026
c3a7b22
fix(sugar-stack): remove multiplier from board symbol serialization
ricini343 Apr 13, 2026
e6c8313
Sugar Stack: 4 math engine upgrades + restricted words fix
ricini343 Apr 13, 2026
e4c5d6d
fix(sugar-stack): 4 Stake Engine review fixes — bet persist, UI overl…
ricini343 Apr 17, 2026
f01fb96
feat(ci): add recompress workflow for single-frame zstd books
ricini343 Apr 19, 2026
98f5752
fix(ci): use gh CLI for cross-workflow artifact download
ricini343 Apr 19, 2026
6c4d5bf
fix(sugar-stack): rename buy modes for Stake.us PF compliance + reduc…
ricini343 May 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 77 additions & 0 deletions .github/workflows/recompress-books.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
name: Recompress Books (Single Frame)

on:
workflow_dispatch:
inputs:
run_id:
description: 'Run ID of the sim workflow to download artifacts from'
required: true

jobs:
recompress:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Install zstandard
run: pip install zstandard

- name: Download original artifacts
env:
GH_TOKEN: ${{ github.token }}
run: gh run download ${{ github.event.inputs.run_id }} -n sugar-stack-math -D original -R ${{ github.repository }}

- name: Recompress books as single-frame zstd
run: |
python3 - <<'PYEOF'
import zstandard as zstd
import os, glob

os.makedirs("output/publish_files", exist_ok=True)
os.makedirs("output/configs", exist_ok=True)

for src in glob.glob("original/publish_files/*.jsonl.zst"):
name = os.path.basename(src)
dst = f"output/publish_files/{name}"
print(f"Recompressing {name}...")
raw_path = dst + ".raw"
with open(raw_path, "wb") as raw_out:
dctx = zstd.ZstdDecompressor()
with open(src, "rb") as f_in:
reader = dctx.stream_reader(f_in)
while True:
chunk = reader.read(65536)
if not chunk:
break
raw_out.write(chunk)
cctx = zstd.ZstdCompressor(level=3)
with open(raw_path, "rb") as f_in, open(dst, "wb") as f_out:
cctx.copy_stream(f_in, f_out)
os.remove(raw_path)
print(f" Done: {os.path.getsize(dst)//1024//1024} MB")

# Copy non-zst files as-is
for src in glob.glob("original/publish_files/*"):
if not src.endswith(".jsonl.zst"):
name = os.path.basename(src)
import shutil
shutil.copy2(src, f"output/publish_files/{name}")

for src in glob.glob("original/configs/*"):
import shutil
shutil.copy2(src, f"output/configs/{os.path.basename(src)}")

print("All done!")
PYEOF

- name: Upload recompressed artifacts
uses: actions/upload-artifact@v4
with:
name: sugar-stack-math-singleframe
path: |
output/publish_files/
output/configs/
retention-days: 30
34 changes: 34 additions & 0 deletions .github/workflows/run-fight-club-sim.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: Run Fight Club Simulation

on:
workflow_dispatch:

jobs:
simulate:
runs-on: ubuntu-latest
timeout-minutes: 120
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable

- name: Install dependencies
run: pip install numpy zstandard xlsxwriter matplotlib toml

- name: Run Fight Club simulation
working-directory: games/fight_club
env:
PYTHONPATH: ${{ github.workspace }}
run: python3 run.py

- name: Upload math artifacts
uses: actions/upload-artifact@v4
with:
name: fight-club-math
path: games/fight_club/library/publish_files/
retention-days: 30
34 changes: 34 additions & 0 deletions .github/workflows/run-shogun-sim.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: Run Shogun Simulation

on:
workflow_dispatch:

jobs:
simulate:
runs-on: ubuntu-latest
timeout-minutes: 120
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable

- name: Install dependencies
run: pip install numpy zstandard xlsxwriter matplotlib toml

- name: Run Shogun simulation
working-directory: games/shogun
env:
PYTHONPATH: ${{ github.workspace }}
run: python3 run.py

- name: Upload math artifacts
uses: actions/upload-artifact@v4
with:
name: shogun-math
path: games/1_1_shogun/library/publish_files/
retention-days: 30
36 changes: 36 additions & 0 deletions .github/workflows/run-sugar-stack-sim.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: Run Sugar Stack Simulation

on:
workflow_dispatch:

jobs:
simulate:
runs-on: ubuntu-latest
timeout-minutes: 360
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable

- name: Install dependencies
run: pip install numpy zstandard xlsxwriter matplotlib toml

- name: Run Sugar Stack simulation
working-directory: games/fruits
env:
PYTHONPATH: ${{ github.workspace }}
run: python3 run.py

- name: Upload math artifacts
uses: actions/upload-artifact@v4
with:
name: sugar-stack-math
path: |
games/1_2_sugar_stack/library/publish_files/
games/1_2_sugar_stack/library/configs/
retention-days: 30
200 changes: 200 additions & 0 deletions games/1_1_shogun/reels/BR0.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
J,10,K,oni,oni
J,A,oni,A,10
A,geisha,Q,K,10
geisha,J,Q,J,J
J,Q,K,oni,K
samurai,Q,oni,10,Q
dragon,K,10,Q,oni
samurai,10,10,A,A
J,geisha,J,10,geisha
10,Q,Q,J,samurai
J,10,10,10,geisha
geisha,10,Q,Q,10
J,K,J,J,A
geisha,A,J,W,K
10,Q,K,geisha,dragon
geisha,oni,geisha,K,10
K,J,A,J,oni
10,K,oni,dragon,10
10,10,geisha,geisha,samurai
oni,K,K,10,oni
K,A,10,Q,10
K,Q,K,oni,10
SC,J,10,geisha,J
oni,J,K,Q,10
dragon,A,10,geisha,oni
Q,J,oni,samurai,A
J,A,Q,10,geisha
oni,10,dragon,geisha,Q
Q,Q,oni,10,K
A,Q,10,Q,oni
Q,J,10,K,K
J,geisha,K,oni,10
10,J,Q,A,10
oni,10,J,dragon,samurai
10,Q,geisha,dragon,A
Q,geisha,A,10,Q
Q,oni,K,K,samurai
J,10,Q,A,K
A,geisha,J,J,J
10,J,10,Q,oni
10,10,A,J,10
K,Q,Q,J,geisha
K,J,J,K,J
oni,J,dragon,A,10
Q,geisha,A,K,J
J,10,K,10,J
A,J,geisha,oni,Q
geisha,A,A,geisha,J
10,A,K,oni,K
J,K,Q,10,A
Q,J,oni,J,J
SC,K,J,J,K
Q,Q,10,K,A
A,K,10,J,10
10,10,A,K,Q
K,dragon,10,10,J
J,A,dragon,J,Q
10,K,J,10,J
A,10,J,Q,10
J,J,10,Q,K
Q,K,J,samurai,Q
K,10,K,K,J
K,samurai,A,J,dragon
J,A,J,10,10
J,dragon,K,A,Q
samurai,J,10,K,oni
J,Q,geisha,10,J
10,geisha,samurai,K,K
oni,K,J,geisha,Q
J,10,A,K,A
W,10,10,oni,oni
A,Q,J,Q,geisha
10,samurai,A,J,K
K,Q,J,Q,K
samurai,10,10,10,A
K,oni,10,J,10
A,A,J,Q,K
J,samurai,A,10,J
10,10,dragon,samurai,10
geisha,oni,Q,oni,oni
oni,K,oni,geisha,A
10,oni,Q,10,J
Q,10,Q,oni,10
K,dragon,J,A,A
A,A,A,10,A
samurai,oni,K,A,Q
10,10,J,J,10
samurai,K,samurai,J,10
W,Q,oni,Q,A
A,geisha,10,10,SC
oni,A,W,oni,Q
oni,10,J,oni,J
J,10,J,K,K
A,K,Q,K,10
oni,Q,K,A,dragon
K,J,Q,A,K
Q,K,A,10,dragon
geisha,K,oni,10,10
J,oni,K,Q,J
J,geisha,samurai,dragon,Q
A,10,K,A,K
geisha,geisha,A,10,Q
10,Q,A,samurai,Q
oni,J,J,A,samurai
10,K,J,A,10
A,samurai,Q,J,K
geisha,geisha,10,geisha,Q
J,A,10,10,A
A,oni,A,Q,J
oni,samurai,10,J,dragon
Q,A,oni,Q,A
J,samurai,K,10,K
K,10,W,samurai,W
samurai,dragon,K,10,K
oni,W,Q,J,oni
10,geisha,A,Q,K
Q,W,K,K,K
K,oni,samurai,Q,samurai
10,dragon,geisha,10,Q
K,10,Q,Q,10
Q,10,J,A,K
Q,samurai,geisha,oni,geisha
10,J,A,10,geisha
10,oni,samurai,J,oni
J,A,Q,geisha,A
A,10,geisha,10,10
J,Q,oni,A,K
K,Q,Q,geisha,geisha
Q,J,SC,10,A
K,10,K,oni,A
A,samurai,10,geisha,Q
geisha,K,K,A,A
10,10,geisha,oni,A
oni,oni,Q,geisha,10
10,J,oni,Q,J
Q,oni,10,A,K
oni,oni,A,J,Q
Q,A,oni,Q,J
Q,K,geisha,10,oni
A,J,Q,K,geisha
samurai,Q,K,10,A
10,Q,oni,A,oni
K,K,oni,J,10
Q,J,J,A,geisha
10,J,dragon,K,samurai
geisha,A,10,K,J
10,10,K,Q,Q
K,A,samurai,oni,dragon
oni,J,geisha,Q,Q
K,K,J,K,oni
10,geisha,J,J,Q
dragon,J,oni,K,SC
geisha,A,J,A,J
J,10,geisha,Q,Q
Q,10,10,J,Q
10,geisha,J,dragon,A
Q,oni,A,10,Q
10,K,10,samurai,10
A,J,samurai,A,K
oni,oni,Q,J,10
A,Q,oni,Q,J
A,oni,K,J,Q
K,K,10,dragon,J
J,oni,Q,A,samurai
10,J,A,J,geisha
A,A,samurai,10,oni
dragon,A,Q,10,10
Q,J,K,samurai,J
Q,A,A,geisha,10
K,Q,J,10,J
10,Q,J,oni,geisha
A,K,A,oni,K
K,K,samurai,10,samurai
K,samurai,K,Q,J
A,10,geisha,K,Q
K,K,Q,J,K
geisha,10,SC,K,J
J,J,10,10,oni
dragon,10,10,J,10
samurai,Q,A,samurai,oni
K,K,10,W,A
K,Q,10,J,10
geisha,10,J,K,Q
Q,J,K,K,K
10,K,10,samurai,J
10,A,J,K,A
J,10,10,J,geisha
Q,J,A,Q,10
samurai,Q,samurai,J,J
10,K,Q,oni,K
Q,J,Q,A,10
J,Q,geisha,10,samurai
dragon,10,10,samurai,W
oni,A,K,Q,geisha
10,oni,10,Q,J
K,10,Q,K,10
J,dragon,10,K,Q
J,J,dragon,10,A
A,Q,oni,K,J
Q,samurai,J,A,J
Loading