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