261 lines
5.6 KiB
PHP
261 lines
5.6 KiB
PHP
RRPartyReset3D PROC
|
|
cmp rrPartyCount3D,1
|
|
jb rr_party_default
|
|
cmp rrPartyCount3D,3
|
|
jbe @F
|
|
rr_party_default:
|
|
mov rrPartyCount3D,1
|
|
@@:
|
|
mov ecx,rrPartyCount3D
|
|
inc ecx
|
|
mov rrPartySize3D,ecx
|
|
mov eax,1
|
|
shl eax,cl
|
|
dec eax
|
|
mov rrPartyAlive3D,eax
|
|
mov rrPartyStake3D,0
|
|
mov rrPartySettled3D,1
|
|
mov rrPartyReloads3D,0
|
|
ret
|
|
RRPartyReset3D ENDP
|
|
|
|
RRPartyInit3D PROC
|
|
call RRPartyReset3D
|
|
invoke LoadAnimPack3D,OFFSET rrPartyArt3D,OFFSET rrPartyPath3D
|
|
cmp rrPartyArt3D.frames,6
|
|
jne rr_party_bad_art
|
|
cmp rrPartyArt3D.imageWidth,192
|
|
jne rr_party_bad_art
|
|
cmp rrPartyArt3D.height,192
|
|
je rr_party_init_done
|
|
rr_party_bad_art:
|
|
invoke FreeAnimPack3D,OFFSET rrPartyArt3D
|
|
rr_party_init_done:
|
|
mov eax,1
|
|
ret
|
|
RRPartyInit3D ENDP
|
|
|
|
RRPartySetCount3D PROC count:DWORD
|
|
cmp count,1
|
|
jb rr_party_count_done
|
|
cmp count,3
|
|
ja rr_party_count_done
|
|
cmp rr3d_state,RR_READY
|
|
je @F
|
|
cmp rr3d_state,RR_WIN
|
|
jne rr_party_count_done
|
|
@@:
|
|
mov eax,count
|
|
mov rrPartyCount3D,eax
|
|
mov rr3d_state,RR_READY
|
|
mov rr3d_timer,0
|
|
call RRPartyReset3D
|
|
call ClearKeys3D
|
|
rr_party_count_done:
|
|
ret
|
|
RRPartySetCount3D ENDP
|
|
|
|
; Called once at the initial deal, and later only when all loaded rounds are spent.
|
|
RRLoadCylinder3D PROC uses esi
|
|
mov rr3d_mask,0
|
|
xor esi,esi
|
|
rr_party_cartridge:
|
|
invoke RandomRange3D,6
|
|
bt rr3d_mask,eax
|
|
jc rr_party_cartridge
|
|
bts rr3d_mask,eax
|
|
inc esi
|
|
cmp esi,rr3d_bullets
|
|
jb rr_party_cartridge
|
|
invoke RandomRange3D,6
|
|
mov rr3d_chamber,eax
|
|
cmp rrPartyReloads3D,0
|
|
je @F
|
|
call BackroomsRussianCylinder3D
|
|
@@:
|
|
inc rrPartyReloads3D
|
|
ret
|
|
RRLoadCylinder3D ENDP
|
|
|
|
RRPartyWin3D PROC
|
|
cmp rrPartySettled3D,0
|
|
jne rr_party_win_done
|
|
mov rrPartySettled3D,1
|
|
mov eax,rrPartyStake3D
|
|
imul eax,rrPartySize3D
|
|
mov rr3d_payout,eax
|
|
add bankroll,eax
|
|
sub eax,rrPartyStake3D
|
|
invoke TriggerCharmWinBonus,eax
|
|
mov rr3d_state,RR_WIN
|
|
invoke PlayCasinoSound3D,OFFSET soundRoundWin,0,20003h
|
|
invoke NpcRecordRound3D,6,1
|
|
call SaveProgress3D
|
|
rr_party_win_done:
|
|
ret
|
|
RRPartyWin3D ENDP
|
|
|
|
RRPartyLose3D PROC
|
|
cmp rrPartySettled3D,0
|
|
jne rr_party_lose_done
|
|
mov rrPartySettled3D,1
|
|
invoke TriggerCharmLossProtection,rrPartyStake3D
|
|
mov rr3d_state,RR_GLITCH
|
|
invoke NpcRecordRound3D,6,0
|
|
call SaveProgress3D
|
|
rr_party_lose_done:
|
|
ret
|
|
RRPartyLose3D ENDP
|
|
|
|
; No selectable target: every participant takes their own turn with the same cylinder.
|
|
RRPartyHit3D PROC
|
|
cmp rrPartySettled3D,0
|
|
jne rr_party_hit_done
|
|
mov ecx,rr3d_chamber
|
|
btr rr3d_mask,ecx
|
|
mov ecx,rr3d_turn
|
|
cmp ecx,rrPartySize3D
|
|
jae rr_party_hit_done
|
|
btr rrPartyAlive3D,ecx
|
|
test ecx,ecx
|
|
jz rr_party_player_out
|
|
cmp rrPartyAlive3D,1
|
|
je rr_party_last_player
|
|
mov rr3d_state,RR_DRY
|
|
ret
|
|
rr_party_player_out:
|
|
call RRPartyLose3D
|
|
ret
|
|
rr_party_last_player:
|
|
call RRPartyWin3D
|
|
rr_party_hit_done:
|
|
ret
|
|
RRPartyHit3D ENDP
|
|
|
|
RRPartyNext3D PROC uses ebx
|
|
mov ebx,rrPartySize3D
|
|
rr_party_next_seat:
|
|
inc rr3d_turn
|
|
mov eax,rr3d_turn
|
|
cmp eax,rrPartySize3D
|
|
jb @F
|
|
mov rr3d_turn,0
|
|
xor eax,eax
|
|
@@:
|
|
bt rrPartyAlive3D,eax
|
|
jc rr_party_next_found
|
|
dec ebx
|
|
jnz rr_party_next_seat
|
|
call RRPartyLose3D
|
|
ret
|
|
rr_party_next_found:
|
|
cmp rr3d_mask,0
|
|
jne rr_party_same_cylinder
|
|
call RRLoadCylinder3D
|
|
mov rr3d_state,RR_LOAD
|
|
invoke PlayCasinoSound3D,OFFSET rrLoadSound3D,0,20003h
|
|
ret
|
|
rr_party_same_cylinder:
|
|
inc rr3d_chamber
|
|
cmp rr3d_chamber,6
|
|
jb @F
|
|
mov rr3d_chamber,0
|
|
@@:
|
|
mov rr3d_state,RR_PLAYER
|
|
cmp rr3d_turn,0
|
|
je @F
|
|
mov rr3d_state,RR_RAISE
|
|
@@:
|
|
ret
|
|
RRPartyNext3D ENDP
|
|
|
|
AbortRussianRound3D PROC
|
|
cmp rrPartySettled3D,0
|
|
jne @F
|
|
mov rrPartySettled3D,1
|
|
invoke NpcRecordRound3D,6,0
|
|
call SaveProgress3D
|
|
@@:
|
|
mov rr3d_state,RR_READY
|
|
mov rr3d_timer,0
|
|
ret
|
|
AbortRussianRound3D ENDP
|
|
|
|
RRPartyInput3D PROC uses ebx
|
|
cmp rr3d_state,RR_READY
|
|
je rr_party_ready_keys
|
|
cmp rr3d_state,RR_WIN
|
|
je rr_party_mouse
|
|
cmp rr3d_state,RR_PLAYER
|
|
je rr_party_mouse
|
|
jmp rr_party_mouse_exit
|
|
rr_party_ready_keys:
|
|
invoke Pressed3D,25h
|
|
test eax,eax
|
|
jz @F
|
|
mov eax,rrPartyCount3D
|
|
dec eax
|
|
invoke RRPartySetCount3D,eax
|
|
@@:
|
|
invoke Pressed3D,27h
|
|
test eax,eax
|
|
jz rr_party_mouse
|
|
mov eax,rrPartyCount3D
|
|
inc eax
|
|
invoke RRPartySetCount3D,eax
|
|
rr_party_mouse:
|
|
cmp mouseClick3D,0
|
|
je rr_party_input_done
|
|
cmp rr3d_state,RR_READY
|
|
jne rr_party_mouse_start
|
|
cmp mouseY3D,226
|
|
jb rr_party_mouse_start
|
|
cmp mouseY3D,239
|
|
jae rr_party_mouse_start
|
|
mov eax,mouseX3D
|
|
sub eax,188
|
|
jc rr_party_mouse_start
|
|
cmp eax,58
|
|
jae rr_party_mouse_start
|
|
xor edx,edx
|
|
mov ecx,20
|
|
div ecx
|
|
cmp edx,18
|
|
jae rr_party_mouse_start
|
|
inc eax
|
|
invoke RRPartySetCount3D,eax
|
|
mov mouseClick3D,0
|
|
ret
|
|
rr_party_mouse_start:
|
|
cmp mouseY3D,225
|
|
jb rr_party_mouse_exit
|
|
cmp mouseY3D,239
|
|
jae rr_party_mouse_exit
|
|
cmp mouseX3D,8
|
|
jb rr_party_mouse_exit
|
|
cmp mouseX3D,150
|
|
jae rr_party_mouse_exit
|
|
mov pressedKeys3D[20h],1
|
|
mov mouseClick3D,0
|
|
ret
|
|
rr_party_mouse_exit:
|
|
cmp mouseClick3D,0
|
|
je rr_party_input_done
|
|
cmp mouseY3D,3
|
|
jb rr_party_clear_mouse
|
|
cmp mouseY3D,17
|
|
jae rr_party_clear_mouse
|
|
cmp mouseX3D,252
|
|
jb rr_party_clear_mouse
|
|
cmp mouseX3D,312
|
|
jae rr_party_clear_mouse
|
|
mov mouseClick3D,0
|
|
call RequestCardExit3D
|
|
ret
|
|
rr_party_clear_mouse:
|
|
mov mouseClick3D,0
|
|
rr_party_input_done:
|
|
ret
|
|
RRPartyInput3D ENDP
|
|
|
|
include src_graphics\russian_party_render.inc
|