Skip to main content

F047 — Fast Play

FieldValue
IDF047
Phase3 — UI
JiraHEDGE-175
StatusTS ✅ · JS ⬜ · UMA ✅

Business Rule

When the Fast Play setting is enabled, all card animation durations are halved — cards fly faster, flip faster, and the stagger delays between successive card launches are shorter. The game plays at 2× speed. The setting defaults to off (normal speed). Sound effects are identical at both speeds — no alternate audio assets.

V5 Implementation

Setting key: userDisableCustomSetting5 in GAMELOGIC UI label: “Fast Play” (g_fast_play) UI element: switchCustom5 checkbox toggle Event: EVENT.UI.CUSTOMSETTING5_TOGGLE PLAY_SPEED is recalculated from the setting each deal:
// baseGameScene.js lines 279-280, 410
GAMEVIEW.FAST_PLAY  = !GAMELOGIC.userDisableCustomSetting5;
GAMEVIEW.PLAY_SPEED = GAMEVIEW.FAST_PLAY ? 0.5 : 1;
Default: GAMEVIEW.FAST_PLAY = falsePLAY_SPEED = 1 (gameView.js line 11).

Where PLAY_SPEED is applied (v5)

AnimationFormulaFile / Line
Per-card stagger delaydelay × CARD_FLY_STEP × PLAY_SPEEDcardDesktop.js:48
Hole card flight durationpath / (2 / PLAY_SPEED) = path × PLAY_SPEED / 2cardDesktop.js:79
Shoe launch animation100 × PLAY_SPEED mscardDesktop.js:120
Card flip (device)200 × PLAY_SPEED mscardDevice.js:55
Card gather animation500 × PLAY_SPEED mscardDesktop.js:148
Win displayCARD_SHOW_WIN_TIME × PLAY_SPEEDcardDesktop.js:207+

V6 Implementation

A _playSpeed getter on GameScene returns 0.5 (fast) or 1 (normal) based on cfgFastPlay:
private get _playSpeed(): number { return this.cfgFastPlay ? 0.5 : 1; }
Applied in three places:

1. Hole card stagger delay

this.time.delayedCall((c + 1) * CARD_FLY_STEP * this._playSpeed, () => { ... });
Normal: cards launch at 300 / 600 / 900 / 1200 / 1500 / 1800 ms Fast: cards launch at 150 / 300 / 450 / 600 / 750 / 900 ms

2. Hole card flight duration

duration: Math.sqrt(dx * dx + dy * dy) * this._playSpeed / 2
Normal: ~350–500 ms per card Fast: ~175–250 ms per card

3. Community card flip duration

const flipHalf = 140 * this._playSpeed;
// shrink to 0 in flipHalf ms, expand back in flipHalf ms
Normal: 140 ms each half (280 ms total) Fast: 70 ms each half (140 ms total)

Config overlay

cfgFastPlay defaults to false. The config overlay toggle sets it live — no page reload required. The next deal picks up the new speed automatically (flag is read at deal time).

Mathematics

Normal speed (PLAY_SPEED = 1):
  • Total deal time (3 hands, 6 cards): last card launches at 1800 ms + ~500 ms flight = ~2.3 s
Fast speed (PLAY_SPEED = 0.5):
  • Total deal time: last card launches at 900 ms + ~250 ms flight = ~1.15 s
  • ~2× faster end-to-end

Acceptance Criteria

IDCriterion
AC-F047-01Fast Play toggle in config overlay enables/disables immediately (no reload)
AC-F047-02Default state is off (normal speed)
AC-F047-03With Fast Play on, all 6 hole cards complete their deal in ≤ 1.2 s
AC-F047-04With Fast Play off, all 6 hole cards complete their deal in ≥ 2.0 s
AC-F047-05Community card flip duration is ~140 ms (fast) vs ~280 ms (normal)
AC-F047-06Sound effects are identical at both speeds

Version Parity

VersionStatusNotes
JS (v4)⬜ Not yet auditedLikely same PLAY_SPEED pattern
TypeScript (v6)✅ Implemented_playSpeed getter; config toggle un-stubbed
UMA (v5)✅ ImplementedPLAY_SPEED = 0.5/1 via userDisableCustomSetting5

V5 Source References

FileLinesPurpose
source/client_source/src/js/Game/gameView.js11, 51–54FAST_PLAY = false default; timing constants
source/client_source/src/js/Game/gameTypes/baseGameScene.js279–280, 410PLAY_SPEED recalculation from setting
source/client_source/src/js/Game/gameTypes/cardDesktop.js48, 79, 120Stagger, flight, launch durations
source/client_source/src/js/Engine/modules/baseLogic.js1430–1445Toggle handler + saveSettings()