; Additional native invariants. No player files or runtime writes. RunBackroomsExtendedTest3D PROC uses ebx esi edi local rounds:DWORD,wins:DWORD,kind:DWORD,party:DWORD,bullets:DWORD,steps:DWORD mov brOwned3D,1 mov brEnabled3D,0 mov rngSeed3D,87654 call BackroomsLuck3D cmp eax,-1 jne br_extended_fail cmp rngSeed3D,87654 jne br_extended_fail mov brEnabled3D,1 mov obsActive3D,1 call BackroomsLuck3D cmp eax,-1 jne br_extended_fail mov obsActive3D,0 mov brTestStage,111 ; Actual blackjack party dealing, all guest counts. mov party,0 br_ext_bj_party: mov wins,0 mov rounds,1000 br_ext_bj_round: mov bankroll,1000000 mov eax,party mov cbBotCount3D,eax mov cbState3D,CB_IDLE call StartNativeBlackjack3D cmp cbPlayerScore3D,21 jne @F inc wins cmp cbDealerScore3D,19 jne br_extended_fail @@: dec rounds jnz br_ext_bj_round cmp wins,860 jb br_extended_fail cmp wins,940 ja br_extended_fail inc party cmp party,4 jb br_ext_bj_party mov cbBotCount3D,0 ; Every scratch design, generated by the actual purchase path. mov scrReady3D,1 mov brTestStage,112 mov kind,0 br_ext_ticket_type: mov eax,kind add eax,120 mov brTestStage,eax mov wins,0 mov rounds,1000 br_ext_ticket: mov bankroll,1000000 mov scrState3D,0 mov scrPriceIndex3D,0 mov eax,kind mov scrType3D,eax call BuyScratch3D mov eax,scrGross3D test eax,eax jz @F inc wins @@: cmp kind,4 jb @F call ScratchPortraitPayout3D cmp eax,scrGross3D jne br_extended_fail @@: dec rounds jnz br_ext_ticket cmp wins,860 jb br_extended_fail cmp wins,940 ja br_extended_fail inc kind cmp kind,7 jb br_ext_ticket_type ; Roulette: a real straight-up bet, including actual multiplier matching. lea edi,wheelBets3D mov brTestStage,113 xor eax,eax mov ecx,49 rep stosd mov wheelBets3D[7*4],100 mov wheelStake3D,100 mov wins,0 mov rounds,1000 br_ext_wheel: invoke BackroomsWheelLuck3D,0 cmp eax,36 ja br_extended_fail invoke WheelBetMultiplier3D,7,eax test eax,eax jz @F inc wins @@: dec rounds jnz br_ext_wheel cmp wins,860 jb br_extended_fail cmp wins,940 ja br_extended_fail ; Durak: 36 distinct legal cards, correctly exposed trump on favorable deals. mov rounds,1000 br_ext_durak: mov brTestStage,114 mov bankroll,1000000 mov dkState3D,DK_IDLE call StartNativeDurak3D xor esi,esi br_ext_durak_card: mov eax,dkDeck3D[esi*4] cmp eax,52 jae br_extended_fail invoke DurakCardRank,eax cmp eax,4 jb br_extended_fail lea edi,[esi+1] br_ext_durak_unique: cmp edi,36 jae br_ext_durak_next mov eax,dkDeck3D[edi*4] cmp eax,dkDeck3D[esi*4] je br_extended_fail inc edi jmp br_ext_durak_unique br_ext_durak_next: inc esi cmp esi,36 jb br_ext_durak_card cmp dkDeck3D,33 jne @F cmp durakTrumpSuit,2 jne br_extended_fail @@: dec rounds jnz br_ext_durak ; Russian roulette: real party elimination/reload rules, all 1..3 guests/bullets. mov party,1 mov brTestStage,115 br_ext_rr_party: mov bullets,1 br_ext_rr_bullets: mov rounds,300 mov wins,0 br_ext_rr_round: mov brTestStage,151 mov eax,party mov rrPartyCount3D,eax call RRPartyReset3D mov eax,bullets mov rr3d_bullets,eax mov rrPartySettled3D,0 mov rrPartyStake3D,50 mov rr3d_bet,50 mov rr3d_turn,0 call BackroomsRussianLuck3D mov rrPartyReloads3D,1 mov steps,0 br_ext_rr_shot: mov eax,rr3d_mask mov ecx,rr3d_chamber bt eax,ecx jnc br_ext_rr_advance call RRPartyHit3D cmp rrPartySettled3D,0 jne br_ext_rr_outcome br_ext_rr_advance: call RRPartyNext3D inc steps cmp steps,100 jae br_extended_fail jmp br_ext_rr_shot br_ext_rr_outcome: mov brTestStage,152 cmp rr3d_state,RR_WIN jne @F inc wins cmp brRussianLuck3D,1 jne br_extended_fail @@: cmp brRussianLuck3D,1 jne @F mov eax,party imul eax,10 add eax,bullets add eax,200 mov brTestStage,eax cmp rr3d_state,RR_WIN jne br_extended_fail @@: dec rounds jnz br_ext_rr_round mov brTestStage,154 cmp wins,240 jb br_extended_fail cmp wins,295 ja br_extended_fail inc bullets cmp bullets,4 jb br_ext_rr_bullets inc party cmp party,4 jb br_ext_rr_party ; Buckshot permutations retain cartridge counts and valid binary identities. mov rounds,1000 br_ext_bs: mov brTestStage,116 call BuckshotReload3D xor edi,edi xor esi,esi br_ext_bs_shell: mov eax,bs3d_shells[esi*4] cmp eax,1 ja br_extended_fail add edi,eax inc esi cmp esi,bs3d_shellCount jb br_ext_bs_shell cmp edi,bs3d_liveCount jne br_extended_fail add edi,bs3d_blankCount cmp edi,bs3d_shellCount jne br_extended_fail dec rounds jnz br_ext_bs xor eax,eax ret br_extended_fail: mov eax,brTestStage ret RunBackroomsExtendedTest3D ENDP RunBackroomsSaveTest3D PROC uses ebx esi edi ; Signed but impossible enabled-without-owned flag must be rejected. mov DWORD PTR saveBuffer[304],20002h invoke ArtifactSaveSignature3D,OFFSET saveBuffer mov DWORD PTR saveBuffer[308],eax invoke ValidateArtifactSave3D,OFFSET saveBuffer test eax,eax jnz br_save_fail ; Native preview keeps its 40-byte, signed backward-compatible layout. invoke CopyCString,OFFSET savePath3D,OFFSET brTestPreviewPath mov nativeProfileActive3D,0 mov arrivalConfirmed3D,1 mov brOwned3D,1 mov brEnabled3D,1 call SaveProgress3D mov brOwned3D,0 mov brEnabled3D,0 call LoadProgress3D cmp brOwned3D,1 jne br_save_fail cmp brEnabled3D,1 jne br_save_fail mov brActive3D,1 mov brEnabled3D,0 invoke LeaveBackrooms3D,1 cmp brOwned3D,1 jne br_save_fail cmp brEnabled3D,0 jne br_save_fail call LoadProgress3D cmp brEnabled3D,0 jne br_save_fail xor eax,eax ret br_save_fail: mov eax,102 ret RunBackroomsSaveTest3D ENDP .data brContextModes dd MODE_COIN,MODE_DICE,MODE_SLOTS,MODE_BLACKJACK,MODE_ROULETTE,MODE_CLOVER brContextMap db 1024 dup(0) .code RunBackroomsContextTest3D PROC uses ebx esi edi local index:DWORD,x:DWORD,y:DWORD call GenerateBackrooms3D mov brActive3D,1 mov brCutscene3D,0 mov hallLevel3D,HALL_BACKROOMS mov worldMap3D,OFFSET brMap3D lea esi,brMap3D lea edi,brContextMap mov ecx,256 rep movsd mov index,0 br_context_game: mov esi,index mov ebx,brGameCells3D[esi*4] mov eax,ebx and eax,31 shl eax,16 add eax,FP_HALF mov x,eax mov playerX,eax mov eax,ebx shr eax,5 shl eax,16 add eax,FP_HALF mov y,eax mov playerY,eax mov playerAngle,77 mov engineMode,MODE_WALK mov mouseLocked3D,0 mov deltaTime3D,16 call ClearKeys3D mov pressedKeys3D[45h],1 call HandleBackrooms3D mov esi,index mov eax,brContextModes[esi*4] cmp eax,engineMode jne br_context_fail cmp eax,MODE_DICE jne @F call DiceEscape3D jmp br_context_returned @@: call CardTableEscape3D br_context_returned: cmp engineMode,MODE_WALK jne br_context_fail mov eax,x cmp playerX,eax jne br_context_fail mov eax,y cmp playerY,eax jne br_context_fail cmp playerAngle,77 jne br_context_fail cmp worldMap3D,OFFSET brMap3D jne br_context_fail cmp hallLevel3D,HALL_BACKROOMS jne br_context_fail lea esi,brMap3D lea edi,brContextMap mov ecx,1024 repe cmpsb jne br_context_fail inc index cmp index,6 jb br_context_game mov brActive3D,0 mov hallLevel3D,0 mov worldMap3D,OFFSET casinoMap xor eax,eax ret br_context_fail: mov eax,103 ret RunBackroomsContextTest3D ENDP RunBackroomsWallTest3D PROC uses esi mov brActive3D,0 mov engineMode,MODE_WALK mov mouseLocked3D,0 mov playerX,16*FP_1+FP_HALF mov playerY,27*FP_1+FP_HALF mov playerAngle,128 mov deltaTime3D,16 mov brEntryHold3D,0 call ClearKeys3D mov keys3D[57h],1 mov esi,500 br_wall_walk: call HandlePlayerInput call BackroomsEntry3D cmp brActive3D,1 je br_wall_entered dec esi jnz br_wall_walk mov eax,104 ret br_wall_entered: cmp playerY,30*FP_1 jae br_wall_fail cmp playerY,30*FP_1-15000 jb br_wall_fail call ClearKeys3D xor eax,eax ret br_wall_fail: mov eax,105 ret RunBackroomsWallTest3D ENDP