KAZIK/src_graphics/russian_party.inc
Artvasil09 881a0061dc Add native NPC visitors with contracts, Clover slots, Pyramid, and party table scenes
Implement 32x32 BFS visitor navigation and daily contracts system with companion .npc journals; add native assembly scenes for Clover slots, Pyramid cards, Blackjack Party and Russian Party; package animation and sprite packs; add comprehensive offline test suites and rebuild shipping binaries.
2026-10-13 09:47:33 +03:00

254 lines
5.4 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
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
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
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