Compare commits
7 commits
881a0061dc
...
4a27ea0f44
| Author | SHA1 | Date | |
|---|---|---|---|
| 4a27ea0f44 | |||
| 342eb16e04 | |||
| 4c89864afb | |||
| 5997849f75 | |||
| 36016cc828 | |||
| 9d504622ca | |||
| 3403696642 |
9 changed files with 1722 additions and 4308 deletions
Binary file not shown.
550
casino3d.inc
550
casino3d.inc
|
|
@ -34,6 +34,17 @@ CopyFileA PROTO :DWORD,:DWORD,:DWORD
|
|||
lstrcmpiA PROTO :DWORD,:DWORD
|
||||
GetFileSize PROTO :DWORD,:DWORD
|
||||
Sleep PROTO :DWORD
|
||||
CreateThread PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
|
||||
CreateEventA PROTO :DWORD,:DWORD,:DWORD,:DWORD
|
||||
SetEvent PROTO :DWORD
|
||||
WaitForSingleObject PROTO :DWORD,:DWORD
|
||||
timeBeginPeriod PROTO :DWORD
|
||||
timeEndPeriod PROTO :DWORD
|
||||
timeGetTime PROTO
|
||||
GetCursorPos PROTO :DWORD
|
||||
SetCursorPos PROTO :DWORD,:DWORD
|
||||
ShowCursor PROTO :DWORD
|
||||
ClientToScreen PROTO :DWORD,:DWORD
|
||||
|
||||
C3D_POINT STRUCT
|
||||
x dd ?
|
||||
|
|
@ -164,6 +175,16 @@ h3DWnd dd 0
|
|||
h3DDC dd 0
|
||||
hCasinoConsole dd 0
|
||||
|
||||
ALIGN 4
|
||||
hRaycastThread dd 0
|
||||
hRaycastStartEvent dd 0
|
||||
hRaycastDoneEvent dd 0
|
||||
bRaycastQuit dd 0
|
||||
raycastThreadId dd 0
|
||||
|
||||
ALIGN 4
|
||||
mouseLocked3D dd 0
|
||||
|
||||
bmi3D C3D_BITMAPINFO <>
|
||||
msg3D C3D_MSG <>
|
||||
wc3D C3D_WNDCLASSEX <>
|
||||
|
|
@ -696,7 +717,7 @@ DrawString8x8 ENDP
|
|||
; --- True 3D Perspective Floor & Ceiling Rendering ---
|
||||
|
||||
; --- DDA Raycasting Walls ---
|
||||
RenderWalls PROC
|
||||
RenderWallsRange PROC colStart:DWORD, colLimit:DWORD
|
||||
local col:DWORD
|
||||
local originalStart:DWORD
|
||||
local camX:DWORD
|
||||
|
|
@ -746,9 +767,11 @@ RenderWalls PROC
|
|||
idiv ecx
|
||||
mov playerPlaneY, eax
|
||||
|
||||
mov col, 0
|
||||
mov eax, colStart
|
||||
mov col, eax
|
||||
col_loop:
|
||||
cmp col, SCREEN_W
|
||||
mov eax, colLimit
|
||||
cmp col, eax
|
||||
jge walls_done
|
||||
|
||||
mov eax, col
|
||||
|
|
@ -1231,6 +1254,69 @@ walls_done:
|
|||
pop esi
|
||||
pop ebx
|
||||
ret
|
||||
RenderWallsRange ENDP
|
||||
|
||||
; --- Raycasting Background Worker Thread ---
|
||||
RaycastWorkerProc PROC uses ebx esi edi lpParam:DWORD
|
||||
worker_loop:
|
||||
invoke WaitForSingleObject, hRaycastStartEvent, 0FFFFFFFFh
|
||||
cmp bRaycastQuit, 1
|
||||
je worker_exit
|
||||
invoke RenderWallsRange, 320, 640
|
||||
invoke SetEvent, hRaycastDoneEvent
|
||||
jmp worker_loop
|
||||
worker_exit:
|
||||
xor eax, eax
|
||||
ret
|
||||
RaycastWorkerProc ENDP
|
||||
|
||||
; --- Multi-Threaded DDA Raycasting Walls Dispatcher ---
|
||||
RenderWalls PROC
|
||||
push ebx
|
||||
push esi
|
||||
push edi
|
||||
|
||||
mov eax, playerAngle
|
||||
and eax, 511
|
||||
mov ebx, [tableCos + eax*4]
|
||||
mov playerDirX, ebx
|
||||
mov ebx, [tableSin + eax*4]
|
||||
mov playerDirY, ebx
|
||||
|
||||
mov eax, ebx
|
||||
imul eax, -66
|
||||
cdq
|
||||
mov ecx, 100
|
||||
idiv ecx
|
||||
mov playerPlaneX, eax
|
||||
|
||||
mov eax, playerDirX
|
||||
imul eax, 66
|
||||
cdq
|
||||
idiv ecx
|
||||
mov playerPlaneY, eax
|
||||
|
||||
cmp hRaycastStartEvent, 0
|
||||
je single_thread_fallback
|
||||
|
||||
; Signal background worker to render columns [320..640)
|
||||
invoke SetEvent, hRaycastStartEvent
|
||||
|
||||
; Main thread processes columns [0..320) in parallel
|
||||
invoke RenderWallsRange, 0, 320
|
||||
|
||||
; Synchronize with worker completion
|
||||
invoke WaitForSingleObject, hRaycastDoneEvent, 0FFFFFFFFh
|
||||
jmp walls_finished
|
||||
|
||||
single_thread_fallback:
|
||||
invoke RenderWallsRange, 0, SCREEN_W
|
||||
|
||||
walls_finished:
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
ret
|
||||
RenderWalls ENDP
|
||||
|
||||
; --- Render 3D Billboard Sprites ---
|
||||
|
|
@ -4310,10 +4396,101 @@ skill_render_keys:
|
|||
ret
|
||||
RenderSkillGame ENDP
|
||||
|
||||
; --- Mouse Lock & Unlock Routines for Free Camera Look ---
|
||||
LockMouse3D PROC
|
||||
LOCAL rcClient[16]:BYTE
|
||||
LOCAL ptCenter:C3D_POINT
|
||||
cmp mouseLocked3D, 1
|
||||
je lock_done
|
||||
mov mouseLocked3D, 1
|
||||
invoke ShowCursor, 0
|
||||
lea eax, rcClient
|
||||
invoke GetClientRect, h3DWnd, eax
|
||||
mov eax, dword ptr rcClient[8]
|
||||
shr eax, 1
|
||||
mov ptCenter.x, eax
|
||||
mov eax, dword ptr rcClient[12]
|
||||
shr eax, 1
|
||||
mov ptCenter.y, eax
|
||||
lea eax, ptCenter
|
||||
invoke ClientToScreen, h3DWnd, eax
|
||||
invoke SetCursorPos, ptCenter.x, ptCenter.y
|
||||
lock_done:
|
||||
ret
|
||||
LockMouse3D ENDP
|
||||
|
||||
UnlockMouse3D PROC
|
||||
cmp mouseLocked3D, 0
|
||||
je unlock_done
|
||||
mov mouseLocked3D, 0
|
||||
invoke ShowCursor, 1
|
||||
unlock_done:
|
||||
ret
|
||||
UnlockMouse3D ENDP
|
||||
|
||||
UpdateMouseLockState PROC
|
||||
cmp engineMode, MODE_WALK
|
||||
jne unlock_it
|
||||
cmp paused3D, 0
|
||||
jne unlock_it
|
||||
invoke GetForegroundWindow
|
||||
cmp eax, h3DWnd
|
||||
jne unlock_it
|
||||
invoke IsIconic, h3DWnd
|
||||
test eax, eax
|
||||
jnz unlock_it
|
||||
call LockMouse3D
|
||||
ret
|
||||
unlock_it:
|
||||
call UnlockMouse3D
|
||||
ret
|
||||
UpdateMouseLockState ENDP
|
||||
|
||||
HandlePlayerInput PROC uses ebx esi edi
|
||||
local speed:DWORD
|
||||
local nextX:DWORD
|
||||
local nextY:DWORD
|
||||
local fwdDir:DWORD
|
||||
local strafeDir:DWORD
|
||||
local deltaMoveX:DWORD
|
||||
local deltaMoveY:DWORD
|
||||
local rcClient[16]:BYTE
|
||||
local ptCenter:C3D_POINT
|
||||
local ptCursor:C3D_POINT
|
||||
|
||||
; --- Mouse Look Camera Rotation ---
|
||||
cmp mouseLocked3D, 1
|
||||
jne skip_mouse_look
|
||||
lea eax, rcClient
|
||||
invoke GetClientRect, h3DWnd, eax
|
||||
mov eax, dword ptr rcClient[8]
|
||||
shr eax, 1
|
||||
mov ptCenter.x, eax
|
||||
mov eax, dword ptr rcClient[12]
|
||||
shr eax, 1
|
||||
mov ptCenter.y, eax
|
||||
lea eax, ptCenter
|
||||
invoke ClientToScreen, h3DWnd, eax
|
||||
lea eax, ptCursor
|
||||
invoke GetCursorPos, eax
|
||||
mov eax, ptCursor.x
|
||||
sub eax, ptCenter.x
|
||||
test eax, eax
|
||||
jz mouse_recenter
|
||||
cmp eax, 64
|
||||
jle @F
|
||||
mov eax, 64
|
||||
@@:
|
||||
cmp eax, -64
|
||||
jge @F
|
||||
mov eax, -64
|
||||
@@:
|
||||
add playerAngle, eax
|
||||
mouse_recenter:
|
||||
invoke SetCursorPos, ptCenter.x, ptCenter.y
|
||||
skip_mouse_look:
|
||||
|
||||
; Movement speed with sprint (Shift = 10h)
|
||||
mov eax, deltaTime3D
|
||||
imul eax, 200
|
||||
mov speed, eax
|
||||
|
|
@ -4321,53 +4498,101 @@ HandlePlayerInput PROC uses ebx esi edi
|
|||
je @F
|
||||
shl speed, 1
|
||||
@@:
|
||||
|
||||
; --- Keyboard Arrow Turning (VK_LEFT = 25h, VK_RIGHT = 27h) ---
|
||||
mov eax, deltaTime3D
|
||||
shr eax, 2
|
||||
inc eax
|
||||
cmp keys3D[41h], 0
|
||||
jne input_turn_left
|
||||
cmp keys3D[25h], 0
|
||||
je input_right
|
||||
input_turn_left:
|
||||
je @F
|
||||
sub playerAngle, eax
|
||||
input_right:
|
||||
cmp keys3D[44h], 0
|
||||
jne input_turn_right
|
||||
@@:
|
||||
cmp keys3D[27h], 0
|
||||
je input_forward
|
||||
input_turn_right:
|
||||
je @F
|
||||
add playerAngle, eax
|
||||
input_forward:
|
||||
@@:
|
||||
and playerAngle, 511
|
||||
call UpdateCamera3D
|
||||
xor edi, edi
|
||||
|
||||
; --- Forward / Backward Direction (W / Up / S / Down) ---
|
||||
mov fwdDir, 0
|
||||
cmp keys3D[57h], 0
|
||||
jne input_go_forward
|
||||
jne @F
|
||||
cmp keys3D[26h], 0
|
||||
je input_back
|
||||
input_go_forward:
|
||||
inc edi
|
||||
input_back:
|
||||
je check_back_key
|
||||
@@:
|
||||
inc fwdDir
|
||||
check_back_key:
|
||||
cmp keys3D[53h], 0
|
||||
jne input_go_back
|
||||
jne @F
|
||||
cmp keys3D[28h], 0
|
||||
je input_move
|
||||
input_go_back:
|
||||
dec edi
|
||||
input_move:
|
||||
je check_strafe_keys
|
||||
@@:
|
||||
dec fwdDir
|
||||
|
||||
check_strafe_keys:
|
||||
; --- Strafe Direction (A = Left, D = Right) ---
|
||||
mov strafeDir, 0
|
||||
cmp keys3D[44h], 0
|
||||
je @F
|
||||
inc strafeDir
|
||||
@@:
|
||||
cmp keys3D[41h], 0
|
||||
je @F
|
||||
dec strafeDir
|
||||
@@:
|
||||
|
||||
; --- Movement Calculation ---
|
||||
mov deltaMoveX, 0
|
||||
mov deltaMoveY, 0
|
||||
|
||||
; Forward / Backward component
|
||||
mov edi, fwdDir
|
||||
test edi, edi
|
||||
jz input_action
|
||||
jz calc_strafe_comp
|
||||
|
||||
imul edi, speed
|
||||
mov eax, playerDirX
|
||||
imul edi
|
||||
shrd eax, edx, 16
|
||||
add eax, playerX
|
||||
mov nextX, eax
|
||||
add deltaMoveX, eax
|
||||
|
||||
mov eax, playerDirY
|
||||
imul edi
|
||||
shrd eax, edx, 16
|
||||
add eax, playerY
|
||||
add deltaMoveY, eax
|
||||
|
||||
calc_strafe_comp:
|
||||
; Strafe Left / Right component: Right vector is (-playerDirY, playerDirX)
|
||||
mov edi, strafeDir
|
||||
test edi, edi
|
||||
jz check_total_movement
|
||||
|
||||
imul edi, speed
|
||||
mov eax, playerDirY
|
||||
neg eax
|
||||
imul edi
|
||||
shrd eax, edx, 16
|
||||
add deltaMoveX, eax
|
||||
|
||||
mov eax, playerDirX
|
||||
imul edi
|
||||
shrd eax, edx, 16
|
||||
add deltaMoveY, eax
|
||||
|
||||
check_total_movement:
|
||||
mov eax, deltaMoveX
|
||||
or eax, deltaMoveY
|
||||
jz input_action
|
||||
|
||||
mov eax, playerX
|
||||
add eax, deltaMoveX
|
||||
mov nextX, eax
|
||||
|
||||
mov eax, playerY
|
||||
add eax, deltaMoveY
|
||||
mov nextY, eax
|
||||
|
||||
invoke CanWalk3D, nextX, playerY
|
||||
test eax, eax
|
||||
jz @F
|
||||
|
|
@ -4379,6 +4604,7 @@ input_move:
|
|||
jz input_action
|
||||
mov eax, nextY
|
||||
mov playerY, eax
|
||||
|
||||
input_action:
|
||||
invoke Pressed3D, 45h
|
||||
test eax, eax
|
||||
|
|
@ -4437,238 +4663,7 @@ interaction_done:
|
|||
ret
|
||||
CheckInteractions ENDP
|
||||
|
||||
; --- RenderCabinetBezel: Îòðèñîâêà àðêàäíîãî áåçåëÿ òåðìèíàëà íà 3D ýêðàíå ---
|
||||
RenderCabinetBezel PROC uses ebx esi edi, pTitle:DWORD
|
||||
; Çàòåìíÿåì 3D-çàë â áóôåðå êàäðà (äåëèì ÿðêîñòü ïîïîëàì)
|
||||
mov ecx, SCREEN_SIZE
|
||||
xor esi, esi
|
||||
dim_bezel_loop:
|
||||
mov eax, [screenBuffer + esi*4]
|
||||
shr eax, 1
|
||||
and eax, 007F7F7Fh
|
||||
mov [screenBuffer + esi*4], eax
|
||||
inc esi
|
||||
loop dim_bezel_loop
|
||||
|
||||
; Âíåøíÿÿ çîëîòàÿ ðàìêà òåðìèíàëà
|
||||
invoke DrawBoxBorder, 10, 14, 300, 212, 000C0E14h, 00D8BC6Ah, 2
|
||||
|
||||
; Øàïêà òåðìèíàëà ñ íàçâàíèåì èãðû
|
||||
invoke DrawBox, 12, 16, 296, 16, 00221A10h
|
||||
invoke DrawString8x8, 20, 20, pTitle, 00F5E2B0h
|
||||
|
||||
; Ïîäâàëüíàÿ ïëàøêà ñ ïîäñêàçêîé ïî âûõîäó
|
||||
invoke DrawBox, 12, 210, 296, 14, 00141416h
|
||||
invoke DrawString8x8, 20, 213, OFFSET textCabinetFooter, 00AAAAAAh
|
||||
|
||||
; Âûâîäèì êàäð áåçåëÿ â îêíî
|
||||
call Present3D
|
||||
ret
|
||||
RenderCabinetBezel ENDP
|
||||
|
||||
; --- LaunchClassicGame: Âñòðàèâàíèå èãðû â UI òåðìèíàëà êàçèíî ---
|
||||
LaunchClassicGame PROC uses ebx esi edi, pGameProc:DWORD, gameId:DWORD, pTitle:DWORD
|
||||
LOCAL rcClient[16]:BYTE
|
||||
LOCAL ptScreen[8]:BYTE
|
||||
LOCAL fontInfo[84]:BYTE
|
||||
LOCAL conWnd:DWORD
|
||||
LOCAL conW:DWORD, conH:DWORD, conX:DWORD, conY:DWORD
|
||||
LOCAL viewW:DWORD, viewH:DWORD
|
||||
LOCAL offsetX:DWORD, offsetY:DWORD
|
||||
|
||||
mov eax, gameId
|
||||
mov currentGameId, eax
|
||||
|
||||
; 1. Ðèñóåì çîëîòîé áåçåëü òåðìèíàëà íà 3D ýêðàíå
|
||||
cmp pTitle, 0
|
||||
je @F
|
||||
invoke RenderCabinetBezel, pTitle
|
||||
@@:
|
||||
|
||||
; 2. Âûäåëÿåì êîíñîëü
|
||||
invoke AllocConsole
|
||||
test eax, eax
|
||||
jz launch_ret
|
||||
|
||||
invoke GetStdHandle, STD_OUTPUT_HANDLE
|
||||
mov hOut, eax
|
||||
invoke GetStdHandle, STD_INPUT_HANDLE
|
||||
mov hIn, eax
|
||||
|
||||
invoke SetConsoleCP, 1251
|
||||
invoke SetConsoleOutputCP, 1251
|
||||
|
||||
cmp pTitle, 0
|
||||
je @F
|
||||
invoke SetConsoleTitleA, pTitle
|
||||
@@:
|
||||
call EnableAnsi
|
||||
call ConfigureConsoleSize
|
||||
|
||||
; 3. Íàñòðàèâàåì øðèôò Consolas Bold 16pt
|
||||
lea edi, fontInfo
|
||||
xor eax, eax
|
||||
mov ecx, 21
|
||||
rep stosd
|
||||
mov dword ptr fontInfo[0], 84 ; cbSize
|
||||
mov word ptr fontInfo[8], 0 ; dwFontSize.X
|
||||
mov word ptr fontInfo[10], 16 ; dwFontSize.Y
|
||||
mov dword ptr fontInfo[16], 700 ; FontWeight = FW_BOLD
|
||||
mov word ptr fontInfo[20], 'C'
|
||||
mov word ptr fontInfo[22], 'o'
|
||||
mov word ptr fontInfo[24], 'n'
|
||||
mov word ptr fontInfo[26], 's'
|
||||
mov word ptr fontInfo[28], 'o'
|
||||
mov word ptr fontInfo[30], 'l'
|
||||
mov word ptr fontInfo[32], 'a'
|
||||
mov word ptr fontInfo[34], 's'
|
||||
mov word ptr fontInfo[36], 0
|
||||
lea eax, fontInfo
|
||||
invoke SetCurrentConsoleFontEx, hOut, 0, eax
|
||||
|
||||
; 4. Ïîëó÷àåì äåñêðèïòîð îêíà êîíñîëè
|
||||
invoke GetConsoleWindow
|
||||
mov conWnd, eax
|
||||
test eax, eax
|
||||
jz run_game_body
|
||||
|
||||
; 5. Ñíèìàåì ñèñòåìíóþ ðàìêó Windows è çàãîëîâîê ñ êíîïêàìè çàêðûòèÿ/ñâîðà÷èâàíèÿ
|
||||
invoke GetWindowLongA, conWnd, -16 ; GWL_STYLE
|
||||
and eax, NOT (00C00000h or 00040000h or 00080000h or 00010000h or 00020000h)
|
||||
or eax, 80000000h ; WS_POPUP
|
||||
invoke SetWindowLongA, conWnd, -16, eax
|
||||
|
||||
; Ñâÿçûâàåì êàê äî÷åðíåå/ïðèíàäëåæàùåå îêíî ê îêíó èãðû
|
||||
cmp h3DWnd, 0
|
||||
je show_con_fallback
|
||||
invoke SetWindowLongA, conWnd, -8, h3DWnd ; GWL_HWNDPARENT
|
||||
|
||||
; 6. Âû÷èñëÿåì òî÷íûå êîîðäèíàòû äëÿ ïîñàäêè ýêðàíà âíóòðü áåçåëÿ
|
||||
lea eax, rcClient
|
||||
invoke GetClientRect, h3DWnd, eax
|
||||
mov esi, dword ptr rcClient[8] ; øèðèíà êëèåíòñêîé îáëàñòè
|
||||
mov edi, dword ptr rcClient[12] ; âûñîòà êëèåíòñêîé îáëàñòè
|
||||
test esi, esi
|
||||
jz show_con_fallback
|
||||
test edi, edi
|
||||
jz show_con_fallback
|
||||
|
||||
; Ðàñ÷åò âüþïîðòà 4:3 òî÷íî êàê â Present3D
|
||||
mov viewW, esi
|
||||
mov eax, esi
|
||||
imul eax, 3
|
||||
shr eax, 2
|
||||
cmp eax, edi
|
||||
jle calc_view_h
|
||||
mov eax, edi
|
||||
imul eax, 4
|
||||
xor edx, edx
|
||||
mov ecx, 3
|
||||
div ecx
|
||||
mov viewW, eax
|
||||
mov eax, edi
|
||||
calc_view_h:
|
||||
mov viewH, eax
|
||||
|
||||
mov ebx, esi
|
||||
sub ebx, viewW
|
||||
shr ebx, 1
|
||||
mov offsetX, ebx
|
||||
|
||||
mov ebx, edi
|
||||
sub ebx, viewH
|
||||
shr ebx, 1
|
||||
mov offsetY, ebx
|
||||
|
||||
; Ýêðàííûå êîîðäèíàòû ëåâîãî âåðõíåãî óãëà êëèåíòñêîé îáëàñòè
|
||||
mov dword ptr ptScreen[0], 0
|
||||
mov dword ptr ptScreen[4], 0
|
||||
lea eax, ptScreen
|
||||
invoke ClientToScreen, h3DWnd, eax
|
||||
|
||||
; conW = viewW * 280 / 320 (âíóòðåííåå îêíî áåçåëÿ)
|
||||
mov eax, viewW
|
||||
imul eax, 280
|
||||
xor edx, edx
|
||||
mov ecx, 320
|
||||
div ecx
|
||||
mov conW, eax
|
||||
|
||||
; conH = viewH * 168 / 240
|
||||
mov eax, viewH
|
||||
imul eax, 168
|
||||
xor edx, edx
|
||||
mov ecx, 240
|
||||
div ecx
|
||||
mov conH, eax
|
||||
|
||||
; conX = ptScreen.x + offsetX + (viewW * 20 / 320)
|
||||
mov eax, viewW
|
||||
imul eax, 20
|
||||
xor edx, edx
|
||||
mov ecx, 320
|
||||
div ecx
|
||||
add eax, offsetX
|
||||
add eax, dword ptr ptScreen[0]
|
||||
mov conX, eax
|
||||
|
||||
; conY = ptScreen.y + offsetY + (viewH * 38 / 240)
|
||||
mov eax, viewH
|
||||
imul eax, 38
|
||||
xor edx, edx
|
||||
mov ecx, 240
|
||||
div ecx
|
||||
add eax, offsetY
|
||||
add eax, dword ptr ptScreen[4]
|
||||
mov conY, eax
|
||||
|
||||
; Ïîçèöèîíèðóåì áåçðàìî÷íûé ýêðàí òî÷íî âíóòðü çîëîòîé ðàìêè áåçåëÿ
|
||||
invoke SetWindowPos, conWnd, 0, conX, conY, conW, conH, 20h or 40h ; SWP_FRAMECHANGED | SWP_SHOWWINDOW
|
||||
jmp set_con_focus
|
||||
|
||||
show_con_fallback:
|
||||
invoke ShowWindow, conWnd, 5 ; SW_SHOW
|
||||
set_con_focus:
|
||||
invoke SetForegroundWindow, conWnd
|
||||
invoke SetFocus, conWnd
|
||||
|
||||
run_game_body:
|
||||
invoke PlayCasinoSound3D, 0, 0, 0
|
||||
call InitSounds
|
||||
; Çàïóñê îðèãèíàëüíîé èãðû!
|
||||
call pGameProc
|
||||
call CloseLegacySounds3D
|
||||
|
||||
; Çàêðûâàåì êîíñîëü
|
||||
invoke FreeConsole
|
||||
mov hOut, 0
|
||||
mov hIn, 0
|
||||
|
||||
; Âîçâðàùàåì ôîêóñ â îêíî 3D èãðû
|
||||
cmp h3DWnd, 0
|
||||
je cleanup_game_input
|
||||
invoke SetForegroundWindow, h3DWnd
|
||||
invoke SetFocus, h3DWnd
|
||||
|
||||
cleanup_game_input:
|
||||
mov ecx, 256
|
||||
xor eax, eax
|
||||
lea edi, keys3D
|
||||
rep stosb
|
||||
mov ecx, 256
|
||||
lea edi, pressedKeys3D
|
||||
rep stosb
|
||||
|
||||
invoke GetTickCount
|
||||
mov previousTick3D, eax
|
||||
mov frameStart3D, eax
|
||||
mov deltaTime3D, 0
|
||||
|
||||
call SaveProgress3D
|
||||
|
||||
launch_ret:
|
||||
ret
|
||||
LaunchClassicGame ENDP
|
||||
; (Legacy console arcade bezel bridge removed)
|
||||
|
||||
Trigger3DInteraction PROC
|
||||
call TriggerHallInteraction3D
|
||||
|
|
@ -4846,6 +4841,7 @@ Init3DEngine PROC
|
|||
push esi
|
||||
push edi
|
||||
|
||||
invoke timeBeginPeriod, 1
|
||||
call LoadDisplaySettings3D
|
||||
call Create3DWindow
|
||||
test eax, eax
|
||||
|
|
@ -4856,6 +4852,15 @@ Init3DEngine PROC
|
|||
|
||||
call InitializeCasinoSprites3D
|
||||
|
||||
; Initialize raycasting worker thread and sync events
|
||||
invoke CreateEventA, 0, 0, 0, 0
|
||||
mov hRaycastStartEvent, eax
|
||||
invoke CreateEventA, 0, 0, 0, 0
|
||||
mov hRaycastDoneEvent, eax
|
||||
mov bRaycastQuit, 0
|
||||
invoke CreateThread, 0, 65536, OFFSET RaycastWorkerProc, 0, 0, ADDR raycastThreadId
|
||||
mov hRaycastThread, eax
|
||||
|
||||
call InitHall3D
|
||||
call BeginStartup3D
|
||||
call RenderStartup3D
|
||||
|
|
@ -5154,7 +5159,7 @@ StartCasino3D PROC uses ebx esi edi
|
|||
call Init3DEngine
|
||||
test eax, eax
|
||||
jz engine_shutdown
|
||||
invoke GetTickCount
|
||||
invoke timeGetTime
|
||||
mov rngSeed3D, eax
|
||||
mov previousTick3D, eax
|
||||
engine_loop:
|
||||
|
|
@ -5168,7 +5173,7 @@ engine_loop:
|
|||
jmp engine_loop
|
||||
|
||||
dispatch_frame:
|
||||
invoke GetTickCount
|
||||
invoke timeGetTime
|
||||
mov frameStart3D, eax
|
||||
sub eax, previousTick3D
|
||||
cmp eax, 50
|
||||
|
|
@ -5222,6 +5227,7 @@ leave_idle_table:
|
|||
call ClearKeys3D
|
||||
invoke PlayCasinoSound3D, 0, 0, 0
|
||||
engine_tick:
|
||||
call UpdateMouseLockState
|
||||
cmp paused3D, 0
|
||||
jne draw_pause
|
||||
mov eax, deltaTime3D
|
||||
|
|
@ -5467,7 +5473,7 @@ present_frame:
|
|||
xor eax, eax
|
||||
mov ecx, 64
|
||||
rep stosd
|
||||
invoke GetTickCount
|
||||
invoke timeGetTime
|
||||
sub eax, frameStart3D
|
||||
mov ecx, 16
|
||||
cmp settingsLowSpec, 1
|
||||
|
|
@ -5484,9 +5490,23 @@ present_frame:
|
|||
invoke Sleep, ecx
|
||||
jmp engine_loop
|
||||
engine_idle:
|
||||
call UnlockMouse3D
|
||||
invoke Sleep, 50
|
||||
jmp engine_loop
|
||||
engine_shutdown:
|
||||
call UnlockMouse3D
|
||||
cmp hRaycastThread, 0
|
||||
je @F
|
||||
mov bRaycastQuit, 1
|
||||
invoke SetEvent, hRaycastStartEvent
|
||||
invoke WaitForSingleObject, hRaycastThread, 1000
|
||||
invoke CloseHandle, hRaycastThread
|
||||
invoke CloseHandle, hRaycastStartEvent
|
||||
invoke CloseHandle, hRaycastDoneEvent
|
||||
mov hRaycastThread, 0
|
||||
mov hRaycastStartEvent, 0
|
||||
mov hRaycastDoneEvent, 0
|
||||
@@:
|
||||
call SaveProgress3D
|
||||
invoke PlayCasinoSound3D, 0, 0, 0
|
||||
call FreeRussianAssets3D
|
||||
|
|
@ -5495,7 +5515,7 @@ engine_shutdown:
|
|||
call FreeBuckshotAssets3D
|
||||
call FreeNativeSlots3D
|
||||
call FreeNativeClover3D
|
||||
call FreePyramidAssets3D
|
||||
call FreePyramidAssets3D
|
||||
call FreeArrivalAssets3D
|
||||
cmp h3DDC, 0
|
||||
je @F
|
||||
|
|
@ -5507,6 +5527,7 @@ engine_shutdown:
|
|||
invoke DestroyWindow, h3DWnd
|
||||
mov h3DWnd, 0
|
||||
@@:
|
||||
invoke timeEndPeriod, 1
|
||||
ret
|
||||
StartCasino3D ENDP
|
||||
|
||||
|
|
@ -5515,3 +5536,4 @@ include src_graphics\platform_code.inc
|
|||
IFDEF CASINO_ACTION_TEST
|
||||
include tools\tests\casino_actions_test.inc
|
||||
ENDIF
|
||||
|
||||
|
|
|
|||
BIN
poker.exe
BIN
poker.exe
Binary file not shown.
BIN
poker.obj
BIN
poker.obj
Binary file not shown.
Binary file not shown.
|
|
@ -118,7 +118,7 @@ ProjectCityPoint3D ENDP
|
|||
|
||||
DrawCityObject3D PROC uses ebx esi edi object:DWORD,firstSourceRow:DWORD
|
||||
local depth:DWORD,left:DWORD,top:DWORD,widthPx:DWORD,heightPx:DWORD
|
||||
local xEnd:DWORD,yEnd:DWORD,xStart:DWORD,yStart:DWORD
|
||||
local xRight:DWORD,yEnd:DWORD,xStart:DWORD,yStart:DWORD
|
||||
local xStep:DWORD,yStep:DWORD,texColumn:DWORD,source:DWORD,row:DWORD,asset:DWORD
|
||||
local sourceWidth:DWORD,sourceHeight:DWORD,sourcePitch:DWORD,cropX:DWORD,cropY:DWORD
|
||||
IFDEF CASINO_ACTION_TEST
|
||||
|
|
@ -224,7 +224,7 @@ city_object_project:
|
|||
jle @F
|
||||
mov eax, SCREEN_W
|
||||
@@:
|
||||
mov xEnd, eax
|
||||
mov xRight, eax
|
||||
cmp xStart, 0
|
||||
jge @F
|
||||
mov xStart, 0
|
||||
|
|
@ -242,7 +242,7 @@ city_object_project:
|
|||
mov yStart, 0
|
||||
@@:
|
||||
mov eax, xStart
|
||||
cmp eax, xEnd
|
||||
cmp eax, xRight
|
||||
jge city_object_done
|
||||
mov eax, yStart
|
||||
cmp eax, yEnd
|
||||
|
|
@ -334,7 +334,7 @@ city_object_next_row:
|
|||
jb city_object_row
|
||||
city_object_next_column:
|
||||
inc ebx
|
||||
cmp ebx, xEnd
|
||||
cmp ebx, xRight
|
||||
jb city_object_column
|
||||
city_object_done:
|
||||
ret
|
||||
|
|
|
|||
|
|
@ -25,6 +25,9 @@ RenderPatrons3D PROTO
|
|||
ResolveWorldSurface3D PROTO :DWORD
|
||||
include src_graphics\hall_layout.inc
|
||||
.data
|
||||
ALIGN 4
|
||||
tableInvDelta3D dd 241 dup(0)
|
||||
tableStepRatio3D dd 241 dup(0)
|
||||
hallSign3D AnimPack3D <>
|
||||
hallSignPath3D db "assets\animations\hall\sign.bin",0
|
||||
hallCityDetail3D AnimPack3D <>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
Loading…
Add table
Reference in a new issue