- Darts: native 500-point match against Max with sway/fatigue mouse aim, parabolic throw camera, raster arm animations, and 16 camera-relative flying dart views - AI Observer: autonomous spectator mode for Hold'em, Blackjack, Durak, and Billiards with profile isolation and playback controls - Fortune Session: raster sprite packs, mist/orb animations, tarot divination spreads, and pack tools - Hall Integration: wall dartboard in lounge, observer terminal dispatch, and bot turn hooks - Packaging & Verification: updated installer streaming hash, synchronized launcher, passing check suites and release smoke checks
243 lines
8.2 KiB
PHP
243 lines
8.2 KiB
PHP
.data
|
|
fortuneSessionBank dd 0
|
|
fortuneSessionPlayer dd 0
|
|
fortuneSessionMotion db "build\hall-expansion\fortune-session-motion-"
|
|
fortuneSessionDigits db "00.bmp",0
|
|
fortuneSessionQuestion db 193,243,228,229,242,32,235,232,32,231,224,226,242,240,224,32,228,238,230,228,252,63,0
|
|
fortuneSessionShot0 db "build\hall-expansion\fortune-session-input.bmp",0
|
|
fortuneSessionShot1 db "build\hall-expansion\fortune-session-shuffle.bmp",0
|
|
fortuneSessionShot2 db "build\hall-expansion\fortune-session-deal-one.bmp",0
|
|
fortuneSessionShot3 db "build\hall-expansion\fortune-session-deal-two.bmp",0
|
|
fortuneSessionShot4 db "build\hall-expansion\fortune-session-deal-three.bmp",0
|
|
fortuneSessionShot5 db "build\hall-expansion\fortune-session-flip-one.bmp",0
|
|
fortuneSessionShot6 db "build\hall-expansion\fortune-session-explain-one.bmp",0
|
|
fortuneSessionShot7 db "build\hall-expansion\fortune-session-flip-two.bmp",0
|
|
fortuneSessionShot8 db "build\hall-expansion\fortune-session-explain-two.bmp",0
|
|
fortuneSessionShot9 db "build\hall-expansion\fortune-session-flip-three.bmp",0
|
|
fortuneSessionShot10 db "build\hall-expansion\fortune-session-explain-three.bmp",0
|
|
fortuneSessionShot11 db "build\hall-expansion\fortune-session-summary.bmp",0
|
|
fortuneSessionShot12 db "build\hall-expansion\fortune-session-done.bmp",0
|
|
fortuneSessionShot13 db "build\hall-expansion\fortune-session-orb-rise.bmp",0
|
|
fortuneSessionShot14 db "build\hall-expansion\fortune-session-orb-mist.bmp",0
|
|
fortuneSessionShot15 db "build\hall-expansion\fortune-session-orb-final.bmp",0
|
|
fortuneSessionShots dd OFFSET fortuneSessionShot0,OFFSET fortuneSessionShot1,OFFSET fortuneSessionShot2,OFFSET fortuneSessionShot3
|
|
dd OFFSET fortuneSessionShot4,OFFSET fortuneSessionShot5,OFFSET fortuneSessionShot6,OFFSET fortuneSessionShot7
|
|
dd OFFSET fortuneSessionShot8,OFFSET fortuneSessionShot9,OFFSET fortuneSessionShot10,OFFSET fortuneSessionShot11
|
|
dd OFFSET fortuneSessionShot12
|
|
.code
|
|
FortuneSessionStepTest PROC
|
|
add animationClock3D,100
|
|
call UpdateFortuneSession3D
|
|
ret
|
|
FortuneSessionStepTest ENDP
|
|
FortuneDialogNativeTests PROC uses ebx esi edi
|
|
mov expansionStage,80
|
|
mov eax,bankroll
|
|
mov fortuneSessionBank,eax
|
|
mov eax,playerX
|
|
mov fortuneSessionPlayer,eax
|
|
call BeginFortuneDialog3D
|
|
cmp fortuneSessionShuffle3D.frames,64
|
|
jne fortune_session_fail
|
|
cmp fortuneSessionDeal3D.frames,32
|
|
jne fortune_session_fail
|
|
cmp fortuneSessionCards3D.frames,45
|
|
jne fortune_session_fail
|
|
cmp fortuneProcess3D,0
|
|
jne fortune_session_fail
|
|
cmp fortuneRead3D,0
|
|
jne fortune_session_fail
|
|
invoke WindowEvents3D,0,102h,'1',0
|
|
cmp fortuneSubMode3D,FORTUNE_SUBMODE_TAROT
|
|
jne fortune_session_fail
|
|
; Lower edge of the question box is not an Exit-button hit target.
|
|
mov mouseX3D,260
|
|
mov mouseY3D,222
|
|
mov mouseClick3D,1
|
|
call HandleFortuneDialog3D
|
|
cmp engineMode,MODE_FORTUNE
|
|
jne fortune_session_fail
|
|
call SubmitFortuneQuestion3D
|
|
cmp fortunePhase3D,0
|
|
jne fortune_session_fail
|
|
mov esi,250
|
|
fortune_session_input_limit:
|
|
invoke WindowEvents3D,0,102h,'a',0
|
|
dec esi
|
|
jnz fortune_session_input_limit
|
|
cmp fortuneQuestionLength3D,240
|
|
jne fortune_session_fail
|
|
cmp fortuneQuestion3D[240],0
|
|
jne fortune_session_fail
|
|
invoke WindowEvents3D,0,102h,8,0
|
|
cmp fortuneQuestionLength3D,239
|
|
jne fortune_session_fail
|
|
mov fortuneQuestionLength3D,0
|
|
mov fortuneQuestion3D,0
|
|
mov esi,OFFSET fortuneSessionQuestion
|
|
fortune_session_input:
|
|
movzx eax,BYTE PTR [esi]
|
|
test eax,eax
|
|
jz fortune_session_input_done
|
|
invoke WindowEvents3D,0,102h,eax,0
|
|
inc esi
|
|
jmp fortune_session_input
|
|
fortune_session_input_done:
|
|
mov fortuneSpeechTime3D,3000
|
|
call RenderFortuneDialog3D
|
|
invoke ExpansionSnapshot,OFFSET fortuneSessionShot0
|
|
call SubmitFortuneQuestion3D
|
|
cmp fortunePhase3D,1
|
|
jne fortune_session_fail
|
|
cmp fortuneDealt3D,0
|
|
jne fortune_session_fail
|
|
invoke WindowEvents3D,0,102h,'X',0
|
|
cmp fortuneQuestionLength3D,22
|
|
jne fortune_session_fail
|
|
call SubmitFortuneQuestion3D
|
|
cmp fortunePhase3D,1
|
|
jne fortune_session_fail
|
|
mov fortunePhaseTime3D,700
|
|
mov fortuneSpeechTime3D,1000
|
|
call RenderFortuneDialog3D
|
|
invoke ExpansionSnapshot,OFFSET fortuneSessionShot1
|
|
cmp fortunePhaseTime3D,700
|
|
jne fortune_session_fail
|
|
xor edi,edi
|
|
fortune_session_motion:
|
|
mov eax,edi
|
|
xor edx,edx
|
|
mov ecx,10
|
|
div ecx
|
|
add al,'0'
|
|
add dl,'0'
|
|
mov fortuneSessionDigits[0],al
|
|
mov fortuneSessionDigits[1],dl
|
|
mov eax,edi
|
|
imul eax,25
|
|
mov fortunePhaseTime3D,eax
|
|
call RenderFortuneDialog3D
|
|
invoke ExpansionSnapshot,OFFSET fortuneSessionMotion
|
|
inc edi
|
|
cmp edi,64
|
|
jb fortune_session_motion
|
|
mov ebx,1
|
|
fortune_session_phases:
|
|
mov eax,fortuneDurations3D[ebx*4]
|
|
mov fortunePhaseTime3D,eax
|
|
call FortuneSessionStepTest
|
|
inc ebx
|
|
cmp fortunePhase3D,ebx
|
|
jne fortune_session_fail
|
|
mov fortunePhaseTime3D,600
|
|
mov fortuneSpeechTime3D,3000
|
|
call RenderFortuneDialog3D
|
|
invoke ExpansionSnapshot,fortuneSessionShots[ebx*4]
|
|
cmp ebx,12
|
|
jb fortune_session_phases
|
|
cmp fortuneDealt3D,3
|
|
jne fortune_session_fail
|
|
cmp fortuneRevealed3D,3
|
|
jne fortune_session_fail
|
|
cmp fortuneQuestionLength3D,22
|
|
jne fortune_session_fail
|
|
mov eax,fortuneSpeechLength3D
|
|
cmp fortuneSpeechVisible3D,eax
|
|
jne fortune_session_fail
|
|
; Distinct underlying cards even when orientation differs.
|
|
xor esi,esi
|
|
fortune_session_unique_outer:
|
|
mov eax,fortuneDrawCards3D[esi*4]
|
|
xor edx,edx
|
|
mov ecx,22
|
|
div ecx
|
|
mov edi,edx
|
|
lea ebx,[esi+1]
|
|
fortune_session_unique_inner:
|
|
cmp ebx,3
|
|
jae fortune_session_unique_next
|
|
mov eax,fortuneDrawCards3D[ebx*4]
|
|
xor edx,edx
|
|
div ecx
|
|
cmp edx,edi
|
|
je fortune_session_fail
|
|
inc ebx
|
|
jmp fortune_session_unique_inner
|
|
fortune_session_unique_next:
|
|
inc esi
|
|
cmp esi,2
|
|
jb fortune_session_unique_outer
|
|
mov expansionStage,81
|
|
; Bubble grows as glyphs appear and cannot exceed the scene edge.
|
|
invoke SetFortuneSpeech3D,OFFSET fortuneSummary3D
|
|
mov fortuneSpeechTime3D,280
|
|
call RenderFortuneDialog3D
|
|
mov esi,fortuneSpeechWidth3D
|
|
mov fortuneSpeechTime3D,3000
|
|
call RenderFortuneDialog3D
|
|
cmp fortuneSpeechWidth3D,esi
|
|
jbe fortune_session_fail
|
|
cmp fortuneSpeechWidth3D,204
|
|
ja fortune_session_fail
|
|
cmp fortuneSpeechHeight3D,140
|
|
ja fortune_session_fail
|
|
; Return to selection, then display the neutral, non-grading orb sequence.
|
|
mov mouseX3D,200
|
|
mov mouseY3D,232
|
|
mov mouseClick3D,1
|
|
call HandleFortuneDialog3D
|
|
cmp fortuneSubMode3D,0
|
|
jne fortune_session_fail
|
|
invoke WindowEvents3D,0,102h,'2',0
|
|
cmp fortuneSubMode3D,FORTUNE_SUBMODE_ORB
|
|
jne fortune_session_fail
|
|
mov fortunePhaseTime3D,700
|
|
call RenderFortuneDialog3D
|
|
invoke ExpansionSnapshot,OFFSET fortuneSessionShot13
|
|
mov fortunePhaseTime3D,1400
|
|
call FortuneSessionStepTest
|
|
cmp fortunePhase3D,2
|
|
jne fortune_session_fail
|
|
mov fortunePhaseTime3D,1500
|
|
mov fortuneSpeechTime3D,3000
|
|
call RenderFortuneDialog3D
|
|
invoke ExpansionSnapshot,OFFSET fortuneSessionShot14
|
|
mov fortunePhaseTime3D,5000
|
|
call FortuneSessionStepTest
|
|
cmp fortunePhase3D,3
|
|
jne fortune_session_fail
|
|
mov fortuneSpeechTime3D,3000
|
|
call RenderFortuneDialog3D
|
|
invoke ExpansionSnapshot,OFFSET fortuneSessionShot15
|
|
; Exit in the middle of an animation as well as after completion.
|
|
mov mouseX3D,260
|
|
mov mouseY3D,232
|
|
mov mouseClick3D,1
|
|
call HandleFortuneDialog3D
|
|
cmp engineMode,MODE_WALK
|
|
jne fortune_session_fail
|
|
cmp fortuneSessionRoom3D.pixels,0
|
|
jne fortune_session_fail
|
|
call BeginFortuneDialog3D
|
|
invoke FortuneChar3D,'1'
|
|
invoke FortuneChar3D,'a'
|
|
call SubmitFortuneQuestion3D
|
|
mov mouseX3D,260
|
|
mov mouseY3D,232
|
|
mov mouseClick3D,1
|
|
call HandleFortuneDialog3D
|
|
cmp engineMode,MODE_WALK
|
|
jne fortune_session_fail
|
|
cmp fortuneSessionShuffle3D.pixels,0
|
|
jne fortune_session_fail
|
|
mov eax,bankroll
|
|
cmp eax,fortuneSessionBank
|
|
jne fortune_session_fail
|
|
mov eax,playerX
|
|
cmp eax,fortuneSessionPlayer
|
|
jne fortune_session_fail
|
|
ret
|
|
fortune_session_fail:
|
|
invoke ExitProcess,expansionStage
|
|
ret
|
|
FortuneDialogNativeTests ENDP
|