object PieceUnit {
section object {
BlockTypes
}
section module {
std
}
section data {
int rax = 0
int rbx = 0
int rcx = 0
int rdx = 0
int rsi = 0
int rdi = 0
int r8 = 0
int r9 = 0
int piece_x = 0
int piece_y = 0
int piece_c1 = 0
int piece_c2 = 0
int piece_c3 = 0
int next_c1 = 0
int next_c2 = 0
int next_c3 = 0
int piece_x1 = 0
int piece_y1 = 0
int piece_x2 = 0
int piece_y2 = 0
int piece_x3 = 0
int piece_y3 = 0
int piece_shape = 0
int PieceShiftUp_tmp = 0
int PieceShiftDown_tmp = 0
int __funcret_RandColor = 0
}
section code {
function PROC_UNIT_INIT:
ret
function PROC_PieceInit:
call FUNC_RandColor
mov rbx, rax
mov next_c1, rbx
push rbx
call FUNC_RandColor
pop rbx
mov rcx, rax
mov next_c2, rcx
push rbx
push rcx
call FUNC_RandColor
pop rcx
pop rbx
mov rdx, rax
mov next_c3, rdx
WHILE_0:
cmp next_c1, next_c2
jne ENDWHILE_1
cmp next_c2, next_c3
jne ENDWHILE_1
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
call FUNC_RandColor
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, rax
mov next_c3, r9
jmp WHILE_0
ENDWHILE_1:
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
call PROC_PieceSpawn
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
PROC_END_PieceInit:
ret
function PROC_PieceSpawn:
mov piece_x, 3
mov piece_y, 0
mov piece_shape, 0
mov piece_c1, next_c1
mov piece_c2, next_c2
mov piece_c3, next_c3
call FUNC_RandColor
mov rbx, rax
mov next_c1, rbx
push rbx
call FUNC_RandColor
pop rbx
mov rcx, rax
mov next_c2, rcx
push rbx
push rcx
call FUNC_RandColor
pop rcx
pop rbx
mov rdx, rax
mov next_c3, rdx
WHILE_8:
cmp next_c1, next_c2
jne ENDWHILE_9
cmp next_c2, next_c3
jne ENDWHILE_9
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
call FUNC_RandColor
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, rax
mov next_c3, r9
jmp WHILE_8
ENDWHILE_9:
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
call PROC_PieceUpdatePositions
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
PROC_END_PieceSpawn:
ret
function PROC_PieceUpdatePositions:
cmp piece_shape, 0
jne ELSE_16
mov piece_x1, piece_x
mov piece_y1, piece_y
mov piece_x2, piece_x
mov piece_y2, piece_y
add piece_y2, 1
mov piece_x3, piece_x
mov piece_y3, piece_y
add piece_y3, 2
jmp ENDIF_17
ELSE_16:
mov piece_x1, piece_x
mov piece_y1, piece_y
mov piece_x2, piece_x
add piece_x2, 1
mov piece_y2, piece_y
mov piece_x3, piece_x
add piece_x3, 2
mov piece_y3, piece_y
ENDIF_17:
PROC_END_PieceUpdatePositions:
ret
function PROC_PieceRotate:
cmp piece_shape, 0
jne ELSE_20
mov piece_shape, 1
jmp ENDIF_21
ELSE_20:
mov piece_shape, 0
ENDIF_21:
push rbx
call PROC_PieceUpdatePositions
pop rbx
PROC_END_PieceRotate:
ret
function PROC_PieceShiftUp:
mov PieceShiftUp_tmp, piece_c1
mov piece_c1, piece_c3
mov piece_c3, piece_c2
mov piece_c2, PieceShiftUp_tmp
PROC_END_PieceShiftUp:
ret
function PROC_PieceShiftDown:
mov PieceShiftDown_tmp, piece_c1
mov piece_c1, piece_c2
mov piece_c2, piece_c3
mov piece_c3, PieceShiftDown_tmp
PROC_END_PieceShiftDown:
ret
function PROC_PieceMoveLeft:
cmp piece_x, 0
jle ELSE_24
mov rcx, piece_x
sub rcx, 1
mov piece_x, rcx
push rbx
push rcx
call PROC_PieceUpdatePositions
pop rcx
pop rbx
ELSE_24:
PROC_END_PieceMoveLeft:
ret
function PROC_PieceMoveRight:
cmp piece_x3, 7
jge ELSE_28
mov rcx, piece_x
add rcx, 1
mov piece_x, rcx
push rbx
push rcx
call PROC_PieceUpdatePositions
pop rcx
pop rbx
ELSE_28:
PROC_END_PieceMoveRight:
ret
function PROC_PieceMoveDown:
cmp piece_y3, 16
jge ELSE_32
mov rcx, piece_y
add rcx, 1
mov piece_y, rcx
push rbx
push rcx
call PROC_PieceUpdatePositions
pop rcx
pop rbx
ELSE_32:
PROC_END_PieceMoveDown:
ret
function FUNC_RandColor:
invoke rand
return rbx
mov __funcret_RandColor, rbx
mod __funcret_RandColor, 9
add __funcret_RandColor, 1
FUNC_END_RandColor:
mov rax, __funcret_RandColor
ret
}
}