.data ; Tower, terminals and observer now have native scenes, not placeholder modals. unavailableTestIds3D dd INTERACT_ONLINE_RR,INTERACT_UMAMUSUME unavailableTestCount3D equ ($-unavailableTestIds3D)/4 unavailableTestPath3D db "build\actions\unavailable.bmp",0 .code RunUnavailableTest3D PROC uses ebx esi edi local oldBank:DWORD,oldMode:DWORD,oldX:DWORD,oldY:DWORD,oldAngle:DWORD mov eax,bankroll mov oldBank,eax mov eax,engineMode mov oldMode,eax mov eax,playerX mov oldX,eax mov eax,playerY mov oldY,eax mov eax,playerAngle mov oldAngle,eax xor esi,esi unavailable_test_next: mov engineMode,MODE_WALK mov eax,unavailableTestIds3D[esi*4] mov interactTargetId,eax call Trigger3DInteraction cmp engineMode,MODE_UNAVAILABLE jne unavailable_test_fail call TableBusy3D test eax,eax jnz unavailable_test_fail ; No input: stay open, without blocking the frame loop. call HandleUnavailable3D cmp engineMode,MODE_UNAVAILABLE jne unavailable_test_fail call RenderUnavailable3D cmp esi,0 jne @F invoke WriteActionSnapshot3D,OFFSET unavailableTestPath3D test eax,eax jz unavailable_test_fail @@: mov eax,esi and eax,3 cmp eax,3 je unavailable_test_click mov ebx,20h cmp eax,0 jne @F mov ebx,45h @@: cmp eax,2 jne @F mov ebx,0Dh @@: mov pressedKeys3D[ebx],1 jmp unavailable_test_close unavailable_test_click: mov mouseX3D,160 mov mouseY3D,145 mov mouseClick3D,1 unavailable_test_close: call HandleUnavailable3D cmp engineMode,MODE_WALK jne unavailable_test_fail mov eax,oldBank cmp bankroll,eax jne unavailable_test_fail mov eax,oldX cmp playerX,eax jne unavailable_test_fail mov eax,oldY cmp playerY,eax jne unavailable_test_fail mov eax,oldAngle cmp playerAngle,eax jne unavailable_test_fail inc esi cmp esi,unavailableTestCount3D jb unavailable_test_next mov eax,oldMode mov engineMode,eax xor eax,eax ret unavailable_test_fail: mov eax,270 ret RunUnavailableTest3D ENDP