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.
153 lines
3.6 KiB
PHP
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
|