InitNativeWheel3D PROC uses edi lea edi, wheelBets3D xor eax, eax mov ecx, 49 rep stosd mov roulState, 0 mov wheelStake3D, 0 mov wheelReturn3D, 0 mov wheelTime3D, 0 ret InitNativeWheel3D ENDP WheelAddBet3D PROC index:DWORD cmp roulState, 1 je wheel_add_done mov ecx, index cmp ecx, 48 ja wheel_add_done mov eax, wheelStake3D add eax, wheelChip3D jc wheel_add_done cmp eax, bankroll ja wheel_add_done mov wheelStake3D, eax mov eax, wheelChip3D add wheelBets3D[ecx*4], eax wheel_add_done: ret WheelAddBet3D ENDP ; Gross returns include the stake, so zero is a loss for every outside bet. WheelBetMultiplier3D PROC uses ebx index:DWORD,result:DWORD mov ecx, index mov ebx, result xor eax, eax cmp ecx, 37 jae wheel_outside cmp ecx, ebx jne wheel_multiplier_done mov eax, 36 ret wheel_outside: test ebx, ebx jz wheel_multiplier_done cmp ecx, 39 jae wheel_parity bt wheelRedMask3D, ebx setc al cmp ecx, 37 je @F xor eax, 1 @@: shl eax, 1 ret wheel_parity: cmp ecx, 41 jae wheel_halves mov eax, ebx and eax, 1 cmp ecx, 40 je @F xor eax, 1 @@: shl eax, 1 ret wheel_halves: cmp ecx, 43 jae wheel_dozen_column cmp ebx, 18 seta al cmp ecx, 42 je @F xor eax, 1 @@: shl eax, 1 ret wheel_dozen_column: mov eax, ebx dec eax xor edx, edx cmp ecx, 46 jae wheel_column mov ebx, 12 div ebx sub ecx, 43 cmp eax, ecx jne wheel_multiplier_zero mov eax, 3 ret wheel_column: mov ebx, 3 div ebx sub ecx, 46 cmp edx, ecx jne wheel_multiplier_zero mov eax, 3 ret wheel_multiplier_zero: xor eax, eax wheel_multiplier_done: ret WheelBetMultiplier3D ENDP WheelSettle3D PROC uses ebx esi cmp roulState, 1 jne wheel_settle_done mov wheelReturn3D, 0 xor esi, esi wheel_settle_loop: invoke WheelBetMultiplier3D, esi,wheelResult3D mul wheelBets3D[esi*4] test edx, edx jnz wheel_settle_cap add wheelReturn3D, eax jc wheel_settle_cap cmp wheelReturn3D, 1000000000 jbe wheel_settle_next wheel_settle_cap: mov wheelReturn3D, 1000000000 wheel_settle_next: inc esi cmp esi, 49 jb wheel_settle_loop mov eax, wheelReturn3D add bankroll, eax jc wheel_bank_cap cmp bankroll, 1000000000 jbe @F wheel_bank_cap: mov bankroll, 1000000000 @@: mov roulState, 2 call SaveProgress3D wheel_settle_done: ret WheelSettle3D ENDP HandleNativeWheel3D PROC uses ebx esi edi cmp roulState, 1 jne wheel_draft_input mov eax, deltaTime3D add wheelTime3D, eax cmp wheelTime3D, 4200 jb wheel_handle_done call WheelSettle3D ret wheel_draft_input: cmp roulState, 2 jne @F ; Keep last winnings visible, but a new spin begins with an empty layout. lea edi, wheelBets3D xor eax, eax mov ecx, 49 rep stosd mov wheelStake3D, 0 mov roulState, 0 @@: invoke Pressed3D, 57h test eax, eax jz @F cmp wheelChip3D, 1000000 jae @F add wheelChip3D, 50 @@: invoke Pressed3D, 53h test eax, eax jz @F cmp wheelChip3D, 50 jbe @F sub wheelChip3D, 50 @@: invoke Pressed3D, 08h test eax, eax jz wheel_mouse call InitNativeWheel3D wheel_mouse: cmp mouseClick3D, 0 je wheel_spin_input cmp mouseY3D, 123 jb wheel_button cmp mouseY3D, 183 jae wheel_mouse_outside cmp mouseX3D, 60 jae wheel_mouse_number cmp mouseX3D, 24 jb wheel_spin_input invoke WheelAddBet3D, 0 jmp wheel_spin_input wheel_mouse_number: cmp mouseX3D, 300 jae wheel_spin_input mov eax, mouseX3D sub eax, 60 xor edx, edx mov ecx, 20 div ecx imul ebx, eax, 3 mov eax, mouseY3D sub eax, 123 xor edx, edx div ecx add eax, ebx inc eax invoke WheelAddBet3D, eax jmp wheel_spin_input wheel_mouse_outside: cmp mouseY3D, 223 jae wheel_button cmp mouseX3D, 24 jb wheel_spin_input cmp mouseX3D, 300 jae wheel_spin_input mov eax, mouseX3D sub eax, 24 xor edx, edx mov ecx, 46 div ecx mov ebx, eax mov eax, mouseY3D sub eax, 183 xor edx, edx mov ecx, 20 div ecx imul eax, 6 add eax, ebx add eax, 37 invoke WheelAddBet3D, eax jmp wheel_spin_input wheel_button: cmp mouseY3D, 105 jb wheel_spin_input cmp mouseY3D, 121 jae wheel_spin_input cmp mouseX3D, 230 jb wheel_spin_input mov pressedKeys3D[20h], 1 wheel_spin_input: invoke Pressed3D, 20h test eax, eax jz wheel_handle_done mov eax, wheelStake3D test eax, eax jz wheel_handle_done cmp eax, bankroll ja wheel_handle_done sub bankroll, eax mov roulState, 1 mov wheelTime3D, 0 invoke RandomRange3D, 37 mov wheelResult3D, eax call SaveProgress3D invoke PlayCasinoSound3D, OFFSET soundRoulette,0,1 wheel_handle_done: ret HandleNativeWheel3D ENDP RenderNativeWheel3D PROC uses ebx esi edi local x:DWORD,y:DWORD,ink:DWORD,angle:DWORD invoke DrawBox,0,0,320,240,00142D22h invoke DrawString8x8,16,12,OFFSET wheelTitle3D,00E5D29Eh invoke DrawNumber,206,12,bankroll,00F4E7C8h invoke DrawCircle,160,66,42,00886E42h invoke DrawCircle,160,66,38,00232C29h invoke DrawCircle,160,66,24,005E422Bh xor esi, esi wheel_result_slot: mov eax, wheelOrder3D[esi*4] cmp eax, wheelResult3D je wheel_slot_found inc esi cmp esi, 37 jb wheel_result_slot wheel_slot_found: mov eax, esi imul eax, 512 xor edx, edx mov ecx, 37 div ecx cmp roulState, 1 jne @F mov ecx, 4200 sub ecx, wheelTime3D imul ecx, 3 add eax, ecx @@: and eax, 511 mov angle, eax mov ebx, tableCos[eax*4] imul ebx, 34 sar ebx, 16 add ebx, 160 mov edx, tableSin[eax*4] imul edx, 34 sar edx, 16 add edx, 66 invoke DrawCircle,ebx,edx,3,00F4EAD8h invoke DrawNumber,153,60,wheelResult3D,00FFFFFFh invoke DrawString8x8,18,104,OFFSET wheelAmountText3D,00DEDACAh invoke DrawNumber,74,104,wheelChip3D,00FFFFFFh invoke DrawString8x8,116,104,OFFSET wheelStakedText3D,00DEDACAh invoke DrawNumber,180,104,wheelStake3D,00FFFFFFh invoke DrawBoxBorder,230,104,70,16,00423929h,00C6AA66h,1 invoke DrawString8x8,250,108,OFFSET wheelSpin3D,00FFFFFFh invoke DrawBoxBorder,24,123,34,60,00174A33h,009C9A76h,1 invoke DrawNumber,36,147,0,00FFFFFFh cmp wheelBets3D, 0 je @F invoke DrawCircle,49,174,3,00DCC671h @@: mov esi, 1 wheel_render_numbers: mov eax, esi dec eax xor edx, edx mov ecx, 3 div ecx imul eax, 20 add eax, 60 mov x, eax imul edx, 20 add edx, 123 mov y, edx mov ink, 001E2523h bt wheelRedMask3D, esi jnc @F mov ink, 00822C32h @@: invoke DrawBoxBorder,x,y,20,20,ink,009C9A76h,1 mov ebx, x add ebx, 2 mov edi, y add edi, 4 invoke DrawNumber,ebx,edi,esi,00FFFFFFh cmp wheelBets3D[esi*4], 0 je @F add ebx, 12 add edi, 11 invoke DrawCircle,ebx,edi,2,00EAD47Eh @@: inc esi cmp esi, 37 jb wheel_render_numbers xor esi, esi wheel_render_outside: mov eax, esi xor edx, edx mov ecx, 6 div ecx imul eax, 20 add eax, 183 mov y, eax imul edx, 46 add edx, 24 mov x, edx invoke DrawBoxBorder,x,y,46,20,0022392Ah,009C9A76h,1 mov ebx, x add ebx, 3 mov edi, y add edi, 5 invoke DrawString8x8,ebx,edi,wheelLabels3D[esi*4],00E4D7B4h lea eax, [esi+37] cmp wheelBets3D[eax*4], 0 je @F add ebx, 35 add edi, 10 invoke DrawCircle,ebx,edi,2,00EAD47Eh @@: inc esi cmp esi, 12 jb wheel_render_outside invoke DrawString8x8,24,228,OFFSET wheelPaidText3D,00D3C08Fh invoke DrawNumber,88,228,wheelReturn3D,00FFFFFFh ret RenderNativeWheel3D ENDP DrawNumber PROC x:DWORD,y:DWORD,value:DWORD,ink:DWORD invoke FormatNumber,value,OFFSET hudNumBuffer invoke DrawString8x8,x,y,OFFSET hudNumBuffer,ink ret DrawNumber ENDP