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 mov wheelExitQueued3D, 0 call LoadNativeWheelArt3D ret InitNativeWheel3D ENDP WheelAddBet3D PROC index:DWORD cmp roulState, 0 jne 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 xor eax,eax mov ecx,wheelReturn3D cmp ecx,wheelStake3D seta al invoke NpcRecordRound3D,3,eax call SaveProgress3D wheel_settle_done: ret WheelSettle3D ENDP HandleNativeWheel3D PROC uses ebx esi edi cmp mouseClick3D,0 je wheel_header_done cmp mouseY3D,3 jb wheel_header_done cmp mouseY3D,17 jae wheel_header_done cmp mouseX3D,252 jb wheel_header_done cmp mouseX3D,312 jae wheel_header_done mov mouseClick3D,0 call WheelEscape3D cmp engineMode,MODE_WALK je wheel_handle_done wheel_header_done: cmp roulState, 1 jne wheel_draft_input mov eax, deltaTime3D add wheelTime3D, eax cmp wheelTime3D, 4200 jb wheel_handle_done call WheelSettle3D cmp wheelExitQueued3D,0 je wheel_handle_done call WheelEscape3D ret wheel_draft_input: cmp roulState, 2 jne @F ; Keep the landed ball and payout visible until an explicit next-round command. invoke Pressed3D,20h test eax,eax jnz wheel_next_layout invoke Pressed3D,0Dh test eax,eax jnz wheel_next_layout cmp mouseClick3D,0 je wheel_handle_done cmp mouseY3D,219 jb wheel_handle_done cmp mouseY3D,237 jae wheel_handle_done cmp mouseX3D,120 jb wheel_handle_done cmp mouseX3D,200 jae wheel_handle_done wheel_next_layout: mov mouseClick3D,0 call InitNativeWheel3D ret @@: 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 neg eax add eax,2 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,145 jb wheel_spin_input cmp mouseX3D,159 jb wheel_mouse_more cmp mouseX3D,162 jb wheel_spin_input cmp mouseX3D,176 jb wheel_mouse_less cmp mouseX3D,180 jb wheel_spin_input cmp mouseX3D,226 jb wheel_mouse_clear cmp mouseX3D, 230 jb wheel_spin_input cmp mouseX3D,300 jae wheel_spin_input mov pressedKeys3D[20h], 1 jmp wheel_spin_input wheel_mouse_more: cmp wheelChip3D,1000000 jae wheel_handle_done add wheelChip3D,50 ret wheel_mouse_less: cmp wheelChip3D,50 jbe wheel_handle_done sub wheelChip3D,50 ret wheel_mouse_clear: call InitNativeWheel3D ret wheel_spin_input: invoke Pressed3D, 20h test eax, eax jz wheel_handle_done cmp wheelArtReady3D,1 jne 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 call RenderWheelScene3D cmp wheelArtReady3D,1 jne wheel_render_missing invoke DrawBox,0,0,320,20,0014191Dh invoke DrawString8x8,16,12,OFFSET wheelTitle3D,00E5D29Eh invoke DrawBoxBorder,252,3,60,14,00252D2Ah,0086754Eh,1 invoke DrawString8x8,266,6,OFFSET wheelExitText3D,00E5D29Eh cmp roulState,1 je wheel_render_spin_hud cmp roulState,2 je wheel_render_result_hud invoke DrawBox,8,101,304,123,00142D22h invoke DrawString8x8,18,104,OFFSET wheelAmountText3D,00DEDACAh invoke DrawNumber,78,104,wheelChip3D,00FFFFFFh invoke DrawBoxBorder,145,104,14,16,003B3024h,00C6AA66h,1 invoke DrawString8x8,148,108,OFFSET wheelPlusText3D,00FFFFFFh invoke DrawBoxBorder,162,104,14,16,003B3024h,00C6AA66h,1 invoke DrawString8x8,165,108,OFFSET wheelMinusText3D,00FFFFFFh invoke DrawBoxBorder,180,104,46,16,003B3024h,00C6AA66h,1 invoke DrawString8x8,183,108,OFFSET wheelClear3D,00FFFFFFh invoke DrawBoxBorder,230,104,70,16,00423929h,00C6AA66h,1 invoke DrawString8x8,237,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 neg edx add edx,2 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 wheelStakedText3D,00D3C08Fh invoke DrawNumber,88,228,wheelStake3D,00FFFFFFh invoke DrawNumber,206,26,bankroll,00F4E7C8h ret wheel_render_spin_hud: invoke DrawBox,0,220,320,20,0014191Dh mov eax,OFFSET wheelSpinningText3D cmp wheelExitQueued3D,0 je @F mov eax,OFFSET wheelLeavingText3D @@: invoke DrawString8x8,76,226,eax,00E5D29Eh ret wheel_render_result_hud: invoke DrawBox,0,219,320,21,0014191Dh invoke DrawString8x8,8,225,OFFSET wheelResultText3D,00E5D29Eh invoke DrawNumber,61,225,wheelResult3D,00FFFFFFh invoke DrawBoxBorder,120,220,80,17,003B3024h,00BA9955h,1 invoke DrawString8x8,144,225,OFFSET wheelBetView3D,00FFFFFFh invoke DrawString8x8,208,223,OFFSET wheelPaidText3D,00E5D29Eh invoke DrawNumber,208,232,wheelReturn3D,00FFFFFFh ret wheel_render_missing: invoke DrawBox,0,0,320,240,0014191Dh invoke DrawString8x8,64,108,OFFSET wheelMissingArt3D,00E5D29Eh ret RenderNativeWheel3D ENDP LoadNativeWheelArt3D PROC cmp wheelArtReady3D,1 je wheel_art_loaded invoke LoadAnimPack3D,OFFSET wheelTableArt3D,OFFSET wheelTablePath3D invoke LoadAnimPack3D,OFFSET wheelCloseArt3D,OFFSET wheelClosePath3D invoke LoadAnimPack3D,OFFSET wheelRotorArt3D,OFFSET wheelRotorPath3D invoke ValidateCityPack3D,OFFSET wheelTableArt3D,640,480,1 invoke ValidateCityPack3D,OFFSET wheelCloseArt3D,640,480,1 invoke ValidateCityPack3D,OFFSET wheelRotorArt3D,480,480,1 cmp wheelTableArt3D.pixels,0 je wheel_art_failed cmp wheelCloseArt3D.pixels,0 je wheel_art_failed cmp wheelRotorArt3D.pixels,0 je wheel_art_failed mov wheelArtReady3D,1 wheel_art_loaded: mov eax,1 ret wheel_art_failed: call FreeNativeWheelArt3D xor eax,eax ret LoadNativeWheelArt3D ENDP FreeNativeWheelArt3D PROC invoke FreeAnimPack3D,OFFSET wheelTableArt3D invoke FreeAnimPack3D,OFFSET wheelCloseArt3D invoke FreeAnimPack3D,OFFSET wheelRotorArt3D mov wheelArtReady3D,0 ret FreeNativeWheelArt3D ENDP WheelEscape3D PROC mov paused3D,0 cmp roulState,1 jne wheel_leave_hall mov wheelExitQueued3D,1 call ClearKeys3D ret wheel_leave_hall: mov wheelExitQueued3D,0 mov engineMode,MODE_WALK call ClearKeys3D invoke PlayCasinoSound3D,0,0,0 ret WheelEscape3D ENDP ; Integer quadratic easing, preserving the 64-bit product until division. WheelTravel3D PROC uses ebx timeMs:DWORD,durationMs:DWORD,total:DWORD mov eax,timeMs cmp eax,durationMs jae wheel_travel_end mov eax,durationMs sub eax,timeMs mul eax mul total mov ebx,durationMs imul ebx,ebx div ebx neg eax add eax,total ret wheel_travel_end: mov eax,total ret WheelTravel3D ENDP ; Rotate the exact numbered rotor by inverse sampling, then project onto the bowl ellipse. ; Physical framebuffer coordinates; rendering cannot change the selected outcome or bank. DrawNativeWheelDisc3D PROC uses ebx esi edi centerX:DWORD,centerY:DWORD,radiusX:DWORD,radiusY:DWORD,rotorAngle:DWORD local row:DWORD,column:DWORD,minX:DWORD,maxX:DWORD,maxY:DWORD local circleX:DWORD,circleY:DWORD,cosine:DWORD,sine:DWORD,sourceX:DWORD mov eax,rotorAngle and eax,511 mov ecx,tableCos[eax*4] mov cosine,ecx mov ecx,tableSin[eax*4] mov sine,ecx mov eax,centerX sub eax,radiusX jns @F xor eax,eax @@: mov minX,eax mov eax,centerX add eax,radiusX cmp eax,SCREEN_W jl @F mov eax,SCREEN_W-1 @@: mov maxX,eax mov eax,centerY add eax,radiusY cmp eax,SCREEN_H jl @F mov eax,SCREEN_H-1 @@: mov maxY,eax mov eax,centerY sub eax,radiusY jns @F xor eax,eax @@: mov row,eax wheel_disc_row: mov eax,row sub eax,centerY imul eax,224 cdq idiv radiusY mov circleY,eax mov eax,row imul eax,SCREEN_W*4 add eax,OFFSET screenBuffer mov ecx,minX lea edi,[eax+ecx*4] mov column,ecx wheel_disc_pixel: mov eax,column sub eax,centerX imul eax,224 cdq idiv radiusX mov circleX,eax imul eax,eax mov ecx,circleY imul ecx,ecx add eax,ecx cmp eax,224*224 ja wheel_disc_next mov eax,circleX imul eax,cosine mov ecx,circleY imul ecx,sine add eax,ecx sar eax,16 add eax,240 mov sourceX,eax mov eax,circleY imul eax,cosine mov ecx,circleX imul ecx,sine sub eax,ecx sar eax,16 add eax,240 imul eax,480 add eax,sourceX mov esi,wheelRotorArt3D.pixels mov eax,[esi+eax*4] cmp eax,80000000h jb wheel_disc_next and eax,00FFFFFFh mov [edi],eax wheel_disc_next: add edi,4 inc column mov eax,column cmp eax,maxX jle wheel_disc_pixel inc row mov eax,row cmp eax,maxY jle wheel_disc_row ret DrawNativeWheelDisc3D ENDP RenderWheelScene3D PROC uses ebx esi edi local centerX:DWORD,centerY:DWORD,radiusX:DWORD,radiusY:DWORD local cameraPhase:DWORD,ballRadius:DWORD,ballAngle:DWORD,oldOpacity:DWORD cmp wheelArtReady3D,1 jne wheel_scene_done mov esi,wheelTableArt3D.pixels lea edi,screenBuffer mov ecx,SCREEN_SIZE rep movsd mov centerX,206 mov centerY,170 mov radiusX,142 mov radiusY,46 mov cameraPhase,0 cmp roulState,0 je wheel_scene_geometry mov cameraPhase,FP_1 cmp roulState,1 jne wheel_scene_close invoke CityEase3D,wheelTime3D,600 mov cameraPhase,eax wheel_scene_close: mov eax,animOpacity3D mov oldOpacity,eax mov eax,cameraPhase imul eax,255 shr eax,16 mov animOpacity3D,eax invoke DrawAnimSprite3D,OFFSET wheelCloseArt3D,0,0,0,640,480 mov eax,oldOpacity mov animOpacity3D,eax mov eax,cameraPhase imul eax,114 shr eax,16 add centerX,eax mov eax,cameraPhase imul eax,108 shr eax,16 add centerY,eax mov eax,cameraPhase imul eax,63 shr eax,16 add radiusX,eax mov eax,cameraPhase imul eax,42 shr eax,16 add radiusY,eax wheel_scene_geometry: mov wheelRotorAngle3D,0 cmp roulState,1 jne @F invoke WheelTravel3D,wheelTime3D,4200,4096 and eax,511 mov wheelRotorAngle3D,eax @@: invoke DrawNativeWheelDisc3D,centerX,centerY,radiusX,radiusY,wheelRotorAngle3D cmp roulState,2 je @F invoke DrawWheelLabels3D,centerX,centerY,radiusX,radiusY,wheelRotorAngle3D @@: cmp roulState,0 je wheel_scene_done xor esi,esi wheel_find_pocket: mov eax,wheelOrder3D[esi*4] cmp eax,wheelResult3D je wheel_found_pocket inc esi cmp esi,37 jb wheel_find_pocket jmp wheel_scene_done wheel_found_pocket: mov wheelResultSlot3D,esi imul eax,esi,512 xor edx,edx mov ecx,37 div ecx add eax,wheelRotorAngle3D mov ballAngle,eax mov ballRadius,170 cmp roulState,1 jne wheel_ball_place invoke WheelTravel3D,wheelTime3D,4200,6144 sub eax,6144 add ballAngle,eax mov ballRadius,216 cmp wheelTime3D,2600 jb wheel_ball_place mov eax,wheelTime3D sub eax,2600 cmp eax,1600 jbe @F mov eax,1600 @@: imul eax,46 xor edx,edx mov ecx,1600 div ecx sub ballRadius,eax wheel_ball_place: mov eax,ballAngle and eax,511 mov wheelBallAngle3D,eax mov ebx,tableCos[eax*4] imul ebx,ballRadius sar ebx,16 imul ebx,radiusX mov eax,ebx cdq mov ecx,224 idiv ecx add eax,centerX mov wheelBallX3D,eax mov eax,wheelBallAngle3D mov ebx,tableSin[eax*4] imul ebx,ballRadius sar ebx,16 imul ebx,radiusY mov eax,ebx cdq idiv ecx add eax,centerY mov wheelBallY3D,eax sar eax,1 mov edi,eax mov ebx,wheelBallX3D sar ebx,1 invoke DrawCircle,ebx,edi,3,003C3026h invoke DrawCircle,ebx,edi,2,00F6EFE0h cmp roulState,2 jne wheel_scene_done invoke DrawWheelLabels3D,centerX,centerY,radiusX,radiusY,wheelRotorAngle3D invoke DrawWheelBox3D,278,245,84,61,002D211Bh invoke DrawBuckshotText3D,296,253,OFFSET wheelLandedText3D,00E5D29Eh mov ecx,00F4E7C8h cmp wheelResult3D,0 je @F mov eax,wheelResult3D bt wheelRedMask3D,eax jnc @F mov ecx,00FFB4ADh @@: invoke DrawWheelValue3D,320,268,wheelResult3D,6,ecx wheel_scene_done: ret RenderWheelScene3D ENDP ; Exact framebuffer rectangles avoid the two-pixel rounding of the logical UI grid. DrawWheelBox3D PROC uses ebx esi edi x:DWORD,y:DWORD,w:DWORD,h:DWORD,ink:DWORD local bottom:DWORD mov esi,x test esi,esi jns @F xor esi,esi @@: mov eax,x add eax,w cmp eax,SCREEN_W jle @F mov eax,SCREEN_W @@: sub eax,esi jle wheel_box_done mov ebx,eax mov edx,y test edx,edx jns @F xor edx,edx @@: mov eax,y add eax,h cmp eax,SCREEN_H jle @F mov eax,SCREEN_H @@: cmp eax,edx jle wheel_box_done mov bottom,eax wheel_box_row: imul edi,edx,SCREEN_W add edi,esi lea edi,screenBuffer[edi*4] mov eax,ink mov ecx,ebx rep stosd inc edx cmp edx,bottom jl wheel_box_row wheel_box_done: ret DrawWheelBox3D ENDP ; Upright screen-space digits retain their shape when the wheel is projected. DrawWheelDigit3D PROC uses ebx esi edi x:DWORD,y:DWORD,digit:DWORD,scale:DWORD,ink:DWORD local row:DWORD,column:DWORD,bits:DWORD,px:DWORD,py:DWORD cmp scale,0 je wheel_digit_done cmp digit,9 ja wheel_digit_done mov eax,digit imul eax,5 lea esi,wheelDigitMasks3D[eax] mov row,0 wheel_digit_row: mov eax,row movzx eax,BYTE PTR [esi+eax] mov bits,eax mov column,0 wheel_digit_column: test bits,4 jz wheel_digit_next mov eax,column imul eax,scale add eax,x mov px,eax mov eax,row imul eax,scale add eax,y mov py,eax invoke DrawWheelBox3D,px,py,scale,scale,ink wheel_digit_next: shl bits,1 inc column cmp column,3 jb wheel_digit_column inc row cmp row,5 jb wheel_digit_row wheel_digit_done: ret DrawWheelDigit3D ENDP DrawWheelValue3D PROC uses ebx centerX:DWORD,y:DWORD,value:DWORD,scale:DWORD,ink:DWORD local x:DWORD,ones:DWORD mov eax,scale imul eax,3 cmp value,10 jb @F mov eax,scale imul eax,7 @@: shr eax,1 neg eax add eax,centerX mov x,eax mov eax,value cmp eax,10 jb wheel_value_single xor edx,edx mov ecx,10 div ecx mov ones,edx invoke DrawWheelDigit3D,x,y,eax,scale,ink mov eax,scale shl eax,2 add x,eax mov eax,ones wheel_value_single: invoke DrawWheelDigit3D,x,y,eax,scale,ink ret DrawWheelValue3D ENDP DrawWheelLabels3D PROC uses ebx esi edi centerX:DWORD,centerY:DWORD,radiusX:DWORD,radiusY:DWORD,angle:DWORD local phase:DWORD,x:DWORD,y:DWORD mov wheelNumberScale3D,1 cmp radiusY,80 jb @F mov wheelNumberScale3D,2 @@: xor esi,esi wheel_label_pocket: mov eax,esi imul eax,512 xor edx,edx mov ecx,37 div ecx add eax,angle and eax,511 mov phase,eax mov eax,tableCos[eax*4] imul eax,195 sar eax,16 imul eax,radiusX cdq mov ecx,224 idiv ecx add eax,centerX mov x,eax mov wheelNumberX3D[esi*4],eax mov eax,phase mov eax,tableSin[eax*4] imul eax,195 sar eax,16 imul eax,radiusY cdq idiv ecx add eax,centerY mov wheelNumberY3D[esi*4],eax mov ebx,wheelNumberScale3D imul ebx,5 shr ebx,1 sub eax,ebx mov y,eax invoke DrawWheelValue3D,x,y,wheelOrder3D[esi*4],wheelNumberScale3D,00FFF8DEh inc esi cmp esi,37 jb wheel_label_pocket cmp roulState,2 jne wheel_labels_done ; Highlight the actual winning label after drawing the ball, preserving every digit. xor esi,esi wheel_label_find_result: mov eax,wheelOrder3D[esi*4] cmp eax,wheelResult3D je wheel_label_highlight inc esi cmp esi,37 jb wheel_label_find_result jmp wheel_labels_done wheel_label_highlight: mov ebx,wheelNumberX3D[esi*4] mov edi,wheelNumberY3D[esi*4] sub ebx,9 sub edi,6 invoke DrawWheelBox3D,ebx,edi,18,12,00E5C978h inc ebx inc edi invoke DrawWheelBox3D,ebx,edi,16,10,00121916h mov eax,wheelNumberY3D[esi*4] sub eax,5 invoke DrawWheelValue3D,wheelNumberX3D[esi*4],eax,wheelResult3D,2,00FFF8DEh wheel_labels_done: ret DrawWheelLabels3D 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