mirror of
https://github.com/mariiaan/Bugtris.git
synced 2026-05-14 10:11:20 +02:00
make it suck less
This commit is contained in:
@@ -74,18 +74,22 @@ RECT ends
|
|||||||
SND_ASYNC EQU 1
|
SND_ASYNC EQU 1
|
||||||
|
|
||||||
; Tetromino shape definitions
|
; Tetromino shape definitions
|
||||||
TETRO_0 db 2, 4, "x x x xx" ; L
|
TETRO_0 db 2, 4, 1, "x x x xx" ; L
|
||||||
TETRO_1 db 2, 4, " x x xxx" ; Reverse L
|
TETRO_1 db 2, 4, 2, " x x xxx" ; Reverse L
|
||||||
TETRO_2 db 2, 2, "xxxx" ; Block
|
TETRO_2 db 2, 2, 3, "xxxx" ; Block
|
||||||
TETRO_3 db 4, 1, "xxxx" ; Line
|
TETRO_3 db 4, 1, 4, "xxxx" ; Line
|
||||||
TETRO_4 db 3, 2, " xxxx " ; snake from BL to TR
|
TETRO_4 db 3, 2, 5, " xxxx " ; snake from BL to TR
|
||||||
TETRO_5 db 3, 2, "xx xx" ; snake from TR to BL
|
TETRO_5 db 3, 2, 6, "xx xx" ; snake from TR to BL
|
||||||
TETRO_6 db 3, 2, " x xxx" ; penith
|
TETRO_6 db 3, 2, 7, " x xxx" ; penith
|
||||||
|
|
||||||
poolStart:
|
shapePoolStart:
|
||||||
TETRO_SHAPE_POOL dq TETRO_0, TETRO_1, TETRO_2, TETRO_3, TETRO_4, TETRO_5, TETRO_6
|
TETRO_SHAPE_POOL dq TETRO_0, TETRO_1, TETRO_2, TETRO_3, TETRO_4, TETRO_5, TETRO_6
|
||||||
; Tetromino shape pool
|
; Tetromino shape pool
|
||||||
TETRO_SHAPE_POOL_SIZE EQU ($-poolStart)/8
|
TETRO_SHAPE_POOL_SIZE EQU ($-shapePoolStart) / 8
|
||||||
|
colorPoolStart:
|
||||||
|
COLOR_POOL dq 0H, 0000F0A0H, 00FF0000H, 00F000F0H, 00F0F000H, 0000FF00H, 000000FFH, 0000F0A0H
|
||||||
|
COLOR_POOL_SIZE EQU ($-colorPoolStart) / 8
|
||||||
|
|
||||||
TETRO_MAX_WIDTH EQU 4
|
TETRO_MAX_WIDTH EQU 4
|
||||||
TETRO_MAX_HEIGHT EQU 4
|
TETRO_MAX_HEIGHT EQU 4
|
||||||
TETRO_BUFFER_SIZE EQU TETRO_MAX_WIDTH * TETRO_MAX_HEIGHT
|
TETRO_BUFFER_SIZE EQU TETRO_MAX_WIDTH * TETRO_MAX_HEIGHT
|
||||||
@@ -99,6 +103,7 @@ RECT ends
|
|||||||
tetroBufferRotateTmp db TETRO_BUFFER_SIZE dup(?)
|
tetroBufferRotateTmp db TETRO_BUFFER_SIZE dup(?)
|
||||||
tetroBufferCurrentWidth db ?
|
tetroBufferCurrentWidth db ?
|
||||||
tetroBufferCurrentHeight db ?
|
tetroBufferCurrentHeight db ?
|
||||||
|
tetroBufferCurrentState db ?
|
||||||
playerPosX db ?
|
playerPosX db ?
|
||||||
playerPosY db ?
|
playerPosY db ?
|
||||||
hdc dq ?
|
hdc dq ?
|
||||||
@@ -107,6 +112,24 @@ RECT ends
|
|||||||
|
|
||||||
.code ; --------------------------
|
.code ; --------------------------
|
||||||
|
|
||||||
|
; (in) rcx state
|
||||||
|
; (out) rax color
|
||||||
|
GetColor PROC
|
||||||
|
push r8
|
||||||
|
push rdx
|
||||||
|
mov rax, rcx
|
||||||
|
mov r8, 8
|
||||||
|
mul r8
|
||||||
|
|
||||||
|
lea r8, COLOR_POOL
|
||||||
|
add r8, rax
|
||||||
|
|
||||||
|
mov rax, [r8]
|
||||||
|
pop rdx
|
||||||
|
pop r8
|
||||||
|
ret
|
||||||
|
GetColor ENDP
|
||||||
|
|
||||||
main PROC
|
main PROC
|
||||||
call InitRandom
|
call InitRandom
|
||||||
|
|
||||||
@@ -158,10 +181,11 @@ main PROC
|
|||||||
mov rax, GRID_SIZE_X
|
mov rax, GRID_SIZE_X
|
||||||
mul r11
|
mul r11
|
||||||
mov r12, rax
|
mov r12, rax
|
||||||
|
add r12, 16
|
||||||
mov rax, GRID_SIZE_Y
|
mov rax, GRID_SIZE_Y
|
||||||
mul r11
|
mul r11
|
||||||
mov r13, rax
|
mov r13, rax
|
||||||
add r13, 12
|
add r13, 24 + 12
|
||||||
|
|
||||||
; Create Window
|
; Create Window
|
||||||
xor ecx, ecx ; dwExStyle
|
xor ecx, ecx ; dwExStyle
|
||||||
@@ -322,15 +346,20 @@ LoadTetromino PROC
|
|||||||
|
|
||||||
; r8 -> [0] tetro width
|
; r8 -> [0] tetro width
|
||||||
mov al, byte ptr [r8]
|
mov al, byte ptr [r8]
|
||||||
mov [tetroBufferCurrentWidth], al
|
mov byte ptr [tetroBufferCurrentWidth], al
|
||||||
inc r8
|
inc r8
|
||||||
|
|
||||||
; r8 -> [1] tetro height
|
; r8 -> [1] tetro height
|
||||||
mov al, byte ptr [r8]
|
mov al, byte ptr [r8]
|
||||||
mov [tetroBufferCurrentHeight], al
|
mov byte ptr [tetroBufferCurrentHeight], al
|
||||||
inc r8
|
inc r8
|
||||||
|
|
||||||
; r8 -> [2] tetromino data
|
; r8 -> [2] tetro color
|
||||||
|
mov al, byte ptr [r8]
|
||||||
|
mov byte ptr [tetroBufferCurrentState], al
|
||||||
|
inc r8
|
||||||
|
|
||||||
|
; r8 -> [3] tetromino data
|
||||||
|
|
||||||
push r10 ; x = 0
|
push r10 ; x = 0
|
||||||
push r11 ; y = 0
|
push r11 ; y = 0
|
||||||
@@ -663,8 +692,7 @@ SetTetroTmpState ENDP
|
|||||||
GetFieldState PROC
|
GetFieldState PROC
|
||||||
push r8
|
push r8
|
||||||
push rdx
|
push rdx
|
||||||
mov r8, GRID_SIZE_Y
|
cmp rdx, GRID_SIZE_Y
|
||||||
cmp rdx, r8
|
|
||||||
jge false_oob
|
jge false_oob
|
||||||
mov r8, GRID_SIZE_X
|
mov r8, GRID_SIZE_X
|
||||||
cmp rcx, r8
|
cmp rcx, r8
|
||||||
@@ -776,58 +804,6 @@ RenderBlock PROC
|
|||||||
ret
|
ret
|
||||||
RenderBlock ENDP
|
RenderBlock ENDP
|
||||||
|
|
||||||
; (in) rcx row index
|
|
||||||
CheckIfRowFull PROC
|
|
||||||
push rdx
|
|
||||||
xor rdx, rdx
|
|
||||||
push r8
|
|
||||||
xor r8, r8
|
|
||||||
mov r8b, byte ptr [GRID_SIZE_X]
|
|
||||||
|
|
||||||
_loop:
|
|
||||||
cmp rdx, r8
|
|
||||||
je _loop_break_true
|
|
||||||
|
|
||||||
push rcx
|
|
||||||
push rdx
|
|
||||||
mov rdx, rcx
|
|
||||||
mov rcx, r8
|
|
||||||
call GetFieldState
|
|
||||||
pop rdx
|
|
||||||
pop rcx
|
|
||||||
test rax, rax
|
|
||||||
jz _loop_break_false
|
|
||||||
|
|
||||||
jmp _loop
|
|
||||||
|
|
||||||
_loop_break_false:
|
|
||||||
mov rax, 0
|
|
||||||
jmp _loop_break
|
|
||||||
|
|
||||||
_loop_break_true:
|
|
||||||
mov rax, 1
|
|
||||||
_loop_break:
|
|
||||||
pop r8
|
|
||||||
pop rdx
|
|
||||||
|
|
||||||
ret
|
|
||||||
CheckIfRowFull ENDP
|
|
||||||
|
|
||||||
; (in) rcx row to clear
|
|
||||||
ClearAndMoveDown PROC
|
|
||||||
|
|
||||||
ret
|
|
||||||
ClearAndMoveDown ENDP
|
|
||||||
|
|
||||||
CheckRowClear PROC
|
|
||||||
push rcx
|
|
||||||
mov rcx, GRID_SIZE_Y - 1 ; row index
|
|
||||||
|
|
||||||
|
|
||||||
pop rdx
|
|
||||||
ret
|
|
||||||
CheckRowClear ENDP
|
|
||||||
|
|
||||||
RenderPlayerField PROC
|
RenderPlayerField PROC
|
||||||
push rcx
|
push rcx
|
||||||
push rdx
|
push rdx
|
||||||
@@ -852,14 +828,19 @@ loop_x:
|
|||||||
je loop_x_break
|
je loop_x_break
|
||||||
|
|
||||||
call GetFieldState
|
call GetFieldState
|
||||||
cmp al, 1 ; Set field;
|
test al, al
|
||||||
je draw_single_block
|
jnz draw_single_block
|
||||||
|
|
||||||
jmp loop_x_continue
|
jmp loop_x_continue
|
||||||
|
|
||||||
draw_single_block:
|
draw_single_block:
|
||||||
push r8
|
push r8
|
||||||
mov r8, 00FF0000h
|
push rcx
|
||||||
|
;mov r8, 00FF0000h
|
||||||
|
mov cl, al
|
||||||
|
call GetColor
|
||||||
|
mov r8, rax
|
||||||
|
pop rcx
|
||||||
call RenderBlock
|
call RenderBlock
|
||||||
pop r8
|
pop r8
|
||||||
jmp loop_x_continue
|
jmp loop_x_continue
|
||||||
@@ -935,8 +916,16 @@ _loopX:
|
|||||||
mov rdx, rbx
|
mov rdx, rbx
|
||||||
add rdx, r9
|
add rdx, r9
|
||||||
push r8
|
push r8
|
||||||
mov r8, 000000FFh ; Todo state to color
|
|
||||||
push rax
|
push rax
|
||||||
|
push rcx
|
||||||
|
mov cl, byte ptr [tetroBufferCurrentState]
|
||||||
|
call GetColor
|
||||||
|
pop rcx
|
||||||
|
mov r8, rax ; Todo state to color
|
||||||
|
;pop rax
|
||||||
|
|
||||||
|
;push rax
|
||||||
call RenderBlock
|
call RenderBlock
|
||||||
pop rax
|
pop rax
|
||||||
pop r8
|
pop r8
|
||||||
@@ -966,6 +955,108 @@ _loopY_break:
|
|||||||
ret
|
ret
|
||||||
RenderPlayer ENDP
|
RenderPlayer ENDP
|
||||||
|
|
||||||
|
; (in) rcx row index
|
||||||
|
CheckIfRowFull PROC
|
||||||
|
push rdx
|
||||||
|
xor rdx, rdx
|
||||||
|
push r8
|
||||||
|
xor r8, r8
|
||||||
|
mov r8b, GRID_SIZE_X
|
||||||
|
|
||||||
|
_loop:
|
||||||
|
cmp rdx, r8
|
||||||
|
je _loop_break_true
|
||||||
|
|
||||||
|
push rcx
|
||||||
|
push rdx
|
||||||
|
xchg rcx, rdx
|
||||||
|
call GetFieldState
|
||||||
|
pop rdx
|
||||||
|
pop rcx
|
||||||
|
test rax, rax
|
||||||
|
jz _loop_break_false
|
||||||
|
|
||||||
|
inc rdx
|
||||||
|
jmp _loop
|
||||||
|
|
||||||
|
_loop_break_false:
|
||||||
|
mov rax, 0
|
||||||
|
jmp _loop_break
|
||||||
|
|
||||||
|
_loop_break_true:
|
||||||
|
mov rax, 1
|
||||||
|
_loop_break:
|
||||||
|
pop r8
|
||||||
|
pop rdx
|
||||||
|
|
||||||
|
ret
|
||||||
|
CheckIfRowFull ENDP
|
||||||
|
|
||||||
|
; (in) rcx: base row
|
||||||
|
MoveRowDown PROC
|
||||||
|
|
||||||
|
ret
|
||||||
|
MoveRowDown ENDP
|
||||||
|
|
||||||
|
; (in) rcx row to clear
|
||||||
|
ClearRow PROC
|
||||||
|
push r8
|
||||||
|
xor r8, r8
|
||||||
|
_loop:
|
||||||
|
cmp r8, GRID_SIZE_X
|
||||||
|
je _loop_break
|
||||||
|
|
||||||
|
push rcx
|
||||||
|
push rdx
|
||||||
|
push r8
|
||||||
|
mov rdx, rcx
|
||||||
|
mov rcx, r8
|
||||||
|
mov r8, 0
|
||||||
|
call SetFieldState
|
||||||
|
pop r8
|
||||||
|
pop rdx
|
||||||
|
pop rcx
|
||||||
|
|
||||||
|
inc r8
|
||||||
|
jmp _loop
|
||||||
|
|
||||||
|
_loop_break:
|
||||||
|
pop r8
|
||||||
|
|
||||||
|
ret
|
||||||
|
ClearRow ENDP
|
||||||
|
|
||||||
|
CheckRowClear PROC
|
||||||
|
push rcx
|
||||||
|
mov rcx, GRID_SIZE_Y - 1 ; row index
|
||||||
|
push r8
|
||||||
|
|
||||||
|
_loop:
|
||||||
|
cmp rcx, 0
|
||||||
|
jl loop_break
|
||||||
|
xor r8, r8
|
||||||
|
|
||||||
|
innerloop:
|
||||||
|
call CheckIfRowFull
|
||||||
|
test rax, rax
|
||||||
|
jz loop_continue
|
||||||
|
inc r8
|
||||||
|
call ClearRow
|
||||||
|
call MoveRowDown
|
||||||
|
jmp innerloop
|
||||||
|
|
||||||
|
loop_continue:
|
||||||
|
; todo attrib points with combo in r8
|
||||||
|
dec rcx
|
||||||
|
jmp _loop
|
||||||
|
|
||||||
|
loop_break:
|
||||||
|
|
||||||
|
pop r8
|
||||||
|
pop rdx
|
||||||
|
ret
|
||||||
|
CheckRowClear ENDP
|
||||||
|
|
||||||
GameUpdate PROC
|
GameUpdate PROC
|
||||||
call MovePlayerDown
|
call MovePlayerDown
|
||||||
ret
|
ret
|
||||||
@@ -1077,12 +1168,14 @@ IsPlayerJammedInBounds PROC
|
|||||||
|
|
||||||
mov rcx, GRID_SIZE_X
|
mov rcx, GRID_SIZE_X
|
||||||
sub cl, byte ptr [tetroBufferCurrentWidth]
|
sub cl, byte ptr [tetroBufferCurrentWidth]
|
||||||
|
inc cl
|
||||||
cmp bl, cl
|
cmp bl, cl
|
||||||
jge return_true
|
jge return_true
|
||||||
|
|
||||||
mov bl, byte ptr [playerPosY]
|
mov bl, byte ptr [playerPosY]
|
||||||
mov rcx, GRID_SIZE_Y
|
mov rcx, GRID_SIZE_Y
|
||||||
sub cl, byte ptr [tetroBufferCurrentHeight]
|
sub cl, byte ptr [tetroBufferCurrentHeight]
|
||||||
|
inc cl
|
||||||
cmp bl, cl
|
cmp bl, cl
|
||||||
jge return_true
|
jge return_true
|
||||||
|
|
||||||
@@ -1139,7 +1232,7 @@ loopX:
|
|||||||
add cl, byte ptr [playerPosX]
|
add cl, byte ptr [playerPosX]
|
||||||
add dl, byte ptr [playerPosY]
|
add dl, byte ptr [playerPosY]
|
||||||
push r8
|
push r8
|
||||||
mov r8, 1
|
mov r8b, [tetroBufferCurrentState]
|
||||||
call SetFieldState
|
call SetFieldState
|
||||||
pop r8
|
pop r8
|
||||||
sub dl, byte ptr [playerPosY]
|
sub dl, byte ptr [playerPosY]
|
||||||
|
|||||||
Reference in New Issue
Block a user