KAZIK/src_graphics/startup_sequence.inc
Artvasil09 3ad5bf4c9d Develop assembly-only casino scenes and native games
Add native Durak, poker, blackjack, roulette, Buckshot and billiards scenes with animation assets and regression tests. Improve arrival, city, hall, profiles, shops, audio and exit handling; remove the portable C game core and refresh shipping executables.
2026-10-08 22:39:19 +03:00

153 lines
3.6 KiB
PHP

; Compiled from the original 100-frame Eblan Games intro. No terminal rendering.
FreeStartupSequence3D PROC
cmp startupSequence3D, 0
je @F
invoke HeapFree, startupSequenceHeap3D, 0, startupSequence3D
mov startupSequence3D, 0
@@:
ret
FreeStartupSequence3D ENDP
LoadStartupSequence3D PROC uses ebx esi
local count:DWORD
cmp startupSequence3D, 0
jne sequence_ready
invoke CreateFileA, OFFSET startupSequencePath3D, 80000000h, 1, 0, 3, 80h, 0
cmp eax, -1
je sequence_failed
mov ebx, eax
invoke ReadFile, ebx, OFFSET startupSequenceHeader3D, 36, ADDR count, 0
test eax, eax
jz sequence_close
cmp count, 36
jne sequence_close
cmp startupSequenceHeader3D, 41474245h
jne sequence_close
cmp startupSequenceHeader3D[4], 72
jne sequence_close
cmp startupSequenceHeader3D[8], 21
jne sequence_close
mov eax, startupSequenceHeader3D[12]
test eax, eax
jz sequence_close
cmp eax, 400
ja sequence_close
mov edx, startupSequenceHeader3D[16]
cmp edx, eax
jae sequence_close
cmp startupSequenceHeader3D[20], 45
jne sequence_close
cmp startupSequenceHeader3D[24], 256
ja sequence_close
cmp startupSequenceHeader3D[32], 1
jne sequence_close
imul eax, 72 * 21 * 2
add eax, 5120
cmp eax, startupSequenceHeader3D[28]
jne sequence_close
mov esi, eax
invoke GetProcessHeap
mov startupSequenceHeap3D, eax
invoke HeapAlloc, eax, 0, esi
mov startupSequence3D, eax
test eax, eax
jz sequence_close
invoke ReadFile, ebx, startupSequence3D, esi, ADDR count, 0
test eax, eax
jz sequence_close
cmp count, esi
jne sequence_close
invoke CloseHandle, ebx
sequence_ready:
mov eax, 1
ret
sequence_close:
invoke CloseHandle, ebx
call FreeStartupSequence3D
sequence_failed:
xor eax, eax
ret
LoadStartupSequence3D ENDP
ResolveStartupFrame3D PROC
mov eax, startupElapsed3D
xor edx, edx
mov ecx, 45
div ecx
cmp eax, startupSequenceHeader3D[12]
jb sequence_frame_ready
sub eax, startupSequenceHeader3D[16]
mov ecx, startupSequenceHeader3D[12]
sub ecx, startupSequenceHeader3D[16]
xor edx, edx
div ecx
mov eax, edx
add eax, startupSequenceHeader3D[16]
sequence_frame_ready:
ret
ResolveStartupFrame3D ENDP
RenderStartupSequence3D PROC uses ebx esi edi
local cell:DWORD, cellX:DWORD, cellY:DWORD, maskRow:DWORD, bits:DWORD, ink:DWORD
lea edi, screenBuffer
mov eax, 00050809h
mov ecx, SCREEN_SIZE
rep stosd
call ResolveStartupFrame3D
imul eax, 72 * 21 * 2
add eax, 5120
add eax, startupSequence3D
mov esi, eax
mov cell, 0
sequence_cell:
movzx eax, WORD PTR [esi]
add esi, 2
movzx edx, al
test edx, edx
jz sequence_next_cell
movzx eax, ah
mov ecx, startupSequence3D
mov eax, [ecx+eax*4]
mov ink, eax
shl edx, 4
lea ebx, [ecx+edx+1024]
mov eax, cell
xor edx, edx
mov ecx, 72
div ecx
shl eax, 4
add eax, 72
mov cellY, eax
shl edx, 3
add edx, 32
mov cellX, edx
mov maskRow, 0
sequence_glyph_row:
mov ecx, maskRow
movzx eax, BYTE PTR [ebx+ecx]
mov bits, eax
mov eax, cellY
add eax, ecx
imul eax, SCREEN_W
add eax, cellX
lea edi, [screenBuffer+eax*4]
mov ecx, 8
sequence_glyph_pixel:
test bits, 80h
jz @F
mov eax, ink
mov [edi], eax
@@:
shl bits, 1
add edi, 4
dec ecx
jnz sequence_glyph_pixel
inc maskRow
cmp maskRow, 16
jb sequence_glyph_row
sequence_next_cell:
inc cell
cmp cell, 72 * 21
jb sequence_cell
ret
RenderStartupSequence3D ENDP