; One first-person table/camera shared in style with Buckshot, with revolver-only poses. .code RenderRussianTable3D PROC uses ebx esi edi local pose:DWORD,angle:DWORD mov animOpacity3D,255 cmp rr3d_room.pixels,0 je rr_table_missing mov esi,rr3d_room.pixels lea edi,screenBuffer mov ecx,SCREEN_SIZE rep movsd cmp rrPartyCount3D,1 jbe rr_table_original_dealer call RenderRRPartyCharacters3D jmp rr_table_actions rr_table_original_dealer: mov eax,0 cmp rr3d_turn,1 jne @F cmp rr3d_state,RR_RAISE je rr_table_dealer_active cmp rr3d_state,RR_FIRE je rr_table_dealer_active cmp rr3d_state,RR_DRY jne @F rr_table_dealer_active: mov eax,2 @@: invoke DrawAnimSprite3D,OFFSET rr3d_dealer,eax,192,2,256,224 rr_table_actions: mov eax,rr3d_state cmp eax,RR_LOAD je rr_table_load cmp eax,RR_SPIN je rr_table_spin cmp eax,RR_RAISE je rr_table_raise cmp eax,RR_FIRE je rr_table_fire cmp eax,RR_DRY je rr_table_dry cmp eax,RR_GLITCH je rr_table_glitch invoke DrawRouletteSprite3D,0,160,151,156,82,0 jmp rr_table_hud rr_table_load: mov eax,rr3d_timer xor edx,edx mov ecx,450 div ecx cmp eax,rr3d_bullets jae rr_table_close_cylinder mov eax,edx xor edx,edx mov ecx,150 div ecx inc eax cmp rr3d_timer,150 jae rr_table_load_draw xor eax,eax jmp rr_table_load_draw rr_table_close_cylinder: mov eax,6 cmp rr3d_timer,1600 jb rr_table_load_draw inc eax rr_table_load_draw: invoke DrawAnimSprite3D,OFFSET rr3d_hands,eax,140,144,384,256 jmp rr_table_hud rr_table_spin: mov eax,1400 sub eax,rr3d_timer imul eax,eax shl eax,1 xor edx,edx mov ecx,1400 div ecx invoke DrawRouletteSprite3D,0,160,151,144,82,eax jmp rr_table_hud rr_table_raise: mov eax,rr3d_timer imul eax,128 xor edx,edx mov ecx,750 div ecx mov angle,eax mov pose,4 jmp rr_table_raised rr_table_fire: mov pose,4 cmp rr3d_shot,0 je @F mov pose,5 @@: mov angle,128 jmp rr_table_raised rr_table_dry: mov pose,4 mov angle,128 rr_table_raised: cmp rrPartyCount3D,1 jbe @F cmp rr3d_turn,0 je @F call RenderRRPartyGun3D jmp rr_table_hud @@: cmp rr3d_turn,1 je rr_table_dealer_gun ; Only the player's hands/gun are visible, never a portrait of the player. invoke DrawRouletteSprite3D,pose,270,137,154,112,angle jmp rr_table_hud rr_table_dealer_gun: ; Weapon-only silhouette avoids overlaying a second pair of arms on the dealer. invoke DrawRouletteSprite3D,0,204,59,80,51,0 jmp rr_table_hud rr_table_glitch: invoke RenderRussianGlitch3D,190 ret rr_table_hud: invoke DrawBuckshotPanel3D,0,0,640,32,00111116h invoke DrawBuckshotText3D,14,12,OFFSET rrTitleText3D,00E9C47Ah invoke DrawBuckshotText3D,360,12,OFFSET bs3d_textBank,00BCBCBCh invoke DrawBuckshotNumber3D,412,12,bankroll,00F3E4BAh invoke DrawBuckshotPanel3D,0,400,640,80,00111617h invoke DrawBuckshotText3D,16,414,OFFSET rrCartridgeText3D,00EBD5A0h mov ebx,rr3d_bullets cmp rrPartyCount3D,1 jbe @F cmp rr3d_state,RR_READY je @F xor ebx,ebx mov edx,rr3d_mask rr_table_remaining_rounds: shr edx,1 adc ebx,0 test edx,edx jnz rr_table_remaining_rounds @@: invoke DrawBuckshotNumber3D,160,414,ebx,00FFFFFFh invoke DrawBuckshotText3D,456,414,OFFSET bs3d_textBet,00EBD5A0h mov eax,rrPartyStake3D cmp rr3d_state,RR_READY je rr_table_selected_stake test eax,eax jnz rr_table_stake rr_table_selected_stake: mov eax,rr3d_bet rr_table_stake: invoke DrawBuckshotNumber3D,528,414,eax,00FFFFFFh mov ebx,OFFSET rrPlayerText3D cmp rr3d_turn,0 je @F mov ebx,OFFSET rrDealerText3D cmp rrPartyCount3D,1 jbe @F mov eax,rr3d_turn dec eax cmp eax,3 jae @F mov ebx,rrPartyNames3D[eax*4] @@: cmp rr3d_state,RR_LOAD jne @F mov ebx,OFFSET rrLoadText3D @@: cmp rr3d_state,RR_SPIN jne @F mov ebx,OFFSET rrSpinText3D @@: cmp rr3d_state,RR_DRY jne @F mov ebx,OFFSET rrClickText3D @@: cmp rr3d_state,RR_READY je @F invoke DrawBuckshotText3D,16,440,ebx,00E9C47Ah @@: cmp rr3d_state,RR_READY jne rr_table_not_ready invoke DrawBuckshotText3D,16,440,OFFSET rrBulletKeys3D,00EBD5A0h invoke DrawBuckshotText3D,360,440,OFFSET rrBetKeys3D,00EBD5A0h invoke DrawBuckshotText3D,16,462,OFFSET rrStartText3D,00FFFFFFh cmp rr3d_error,0 je rr_table_exit_hint invoke DrawBuckshotPanel3D,200,342,240,24,002B1616h invoke DrawBuckshotText3D,208,350,OFFSET rrEmptyBank3D,00DD7768h jmp rr_table_exit_hint rr_table_not_ready: cmp rr3d_state,RR_PLAYER jne @F invoke DrawBuckshotText3D,16,462,OFFSET rrFireText3D,00FFFFFFh @@: cmp rr3d_state,RR_WIN jne rr_table_exit_hint invoke DrawBuckshotPanel3D,0,434,640,46,00111617h invoke DrawBuckshotText3D,16,440,OFFSET rrVictoryText3D,007FE395h invoke DrawBuckshotNumber3D,184,440,rr3d_payout,007FE395h invoke DrawBuckshotText3D,16,462,OFFSET rrRoundText3D,00FFFFFFh rr_table_exit_hint: mov ebx,OFFSET bs3d_textExit invoke DrawBuckshotText3D,530,462,ebx,00AFAFAFh call RenderRRPartyControls3D ret rr_table_missing: invoke DrawBuckshotPanel3D,0,0,640,480,00111719h invoke DrawBuckshotText3D,184,230,OFFSET bs3d_textAssets,00E1C67Bh ret RenderRussianTable3D ENDP