object GridUnit {
section object {
BlockTypes, PieceUnit
}
section module {
}
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 r10 = 0
int r11 = 0
ptr grid = null
ptr grid_clear = null
ptr grid_flash = null
ptr grid_original = null
int score = 0
int lines = 0
int speed = 0
int line_count = 0
int game_over = 0
int drop_timer = 0
int lines_per_speed = 0
int clearing_active = 0
int GridSet_col = 0
int GridSet_row = 0
int GridSet_val = 0
int GridClearAll_i = 0
int ClearBlock_col = 0
int ClearBlock_row = 0
int ClearBlock_original = 0
int ClearBlock_idx = 0
int ProcessGravity_c = 0
int ProcessGravity_r = 0
int ProcessGravity_val = 0
int ProcessFlash_c = 0
int ProcessFlash_r = 0
int ProcessFlash_idx = 0
int ProcessFlash_cv = 0
int UpdateGame_matched = 0
int GridIndex_col = 0
int GridIndex_row = 0
int __funcret_GridIndex = 0
int GridInBounds_col = 0
int GridInBounds_row = 0
int __funcret_GridInBounds = 0
int GridGet_col = 0
int GridGet_row = 0
int __funcret_GridGet = 0
int GridGetClear_col = 0
int GridGetClear_row = 0
int __funcret_GridGetClear = 0
int GridGetFlash_col = 0
int GridGetFlash_row = 0
int __funcret_GridGetFlash = 0
int GridGetOriginal_col = 0
int GridGetOriginal_row = 0
int __funcret_GridGetOriginal = 0
int __funcret_CanMoveLeft = 0
int __funcret_CanMoveRight = 0
int __funcret_CanMoveDown = 0
int CanRotate_nx2 = 0
int CanRotate_ny2 = 0
int CanRotate_nx3 = 0
int CanRotate_ny3 = 0
int __funcret_CanRotate = 0
int __funcret_CheckGameOver = 0
int CheckHorizontal_r = 0
int CheckHorizontal_c = 0
int CheckHorizontal_cur = 0
int CheckHorizontal_found = 0
int __funcret_CheckHorizontal = 0
int CheckVertical_r = 0
int CheckVertical_c = 0
int CheckVertical_cur = 0
int CheckVertical_found = 0
int __funcret_CheckVertical = 0
int CheckDiagonal_r = 0
int CheckDiagonal_c = 0
int CheckDiagonal_cur = 0
int CheckDiagonal_found = 0
int __funcret_CheckDiagonal = 0
int CheckAndClearMatches_found = 0
int __funcret_CheckAndClearMatches = 0
int __funcret_IsClearing = 0
}
section code {
function PROC_UNIT_INIT:
alloc grid, 8, 136
alloc grid_clear, 8, 136
alloc grid_flash, 8, 136
alloc grid_original, 8, 136
ret
function PROC_GridSet:
mov GridSet_col, rbx
mov GridSet_row, rcx
mov GridSet_val, rdx
mov rbx, GridSet_col
mov rcx, GridSet_row
push GridSet_col
push GridSet_row
push GridSet_val
call FUNC_GridInBounds
pop GridSet_val
pop GridSet_row
pop GridSet_col
mov rbx, rax
cmp rbx, 1
je CMP_TRUE_2
mov rcx, 0
jmp CMP_END_3
CMP_TRUE_2:
mov rcx, 1
CMP_END_3:
cmp rcx, 0
je ELSE_0
push rbx
push rcx
mov rbx, GridSet_col
mov rcx, GridSet_row
push GridSet_col
push GridSet_row
push GridSet_val
call FUNC_GridIndex
pop GridSet_val
pop GridSet_row
pop GridSet_col
pop rcx
pop rbx
mov rdx, rax
cmp rdx, 0
jl IDX_OOB_5
cmp rdx, 135
jg IDX_OOB_5
jmp IDX_OK_4
IDX_OOB_5:
exit 1
IDX_OK_4:
mov rsi, rdx
store GridSet_val, grid, rsi, 8
ELSE_0:
PROC_END_GridSet:
ret
function PROC_GridClearAll:
mov GridClearAll_i, 0
FOR_6:
cmp GridClearAll_i, 135
jg ENDFOR_7
cmp GridClearAll_i, 0
jl IDX_OOB_10
cmp GridClearAll_i, 135
jg IDX_OOB_10
jmp IDX_OK_9
IDX_OOB_10:
exit 1
IDX_OK_9:
mov rbx, GridClearAll_i
store 0, grid, rbx, 8
cmp GridClearAll_i, 0
jl IDX_OOB_12
cmp GridClearAll_i, 135
jg IDX_OOB_12
jmp IDX_OK_11
IDX_OOB_12:
exit 1
IDX_OK_11:
mov rbx, GridClearAll_i
store 0, grid_clear, rbx, 8
cmp GridClearAll_i, 0
jl IDX_OOB_14
cmp GridClearAll_i, 135
jg IDX_OOB_14
jmp IDX_OK_13
IDX_OOB_14:
exit 1
IDX_OK_13:
mov rbx, GridClearAll_i
store 0, grid_flash, rbx, 8
cmp GridClearAll_i, 0
jl IDX_OOB_16
cmp GridClearAll_i, 135
jg IDX_OOB_16
jmp IDX_OK_15
IDX_OOB_16:
exit 1
IDX_OK_15:
mov rbx, GridClearAll_i
store 0, grid_original, rbx, 8
FOR_CONTINUE_8:
add GridClearAll_i, 1
jmp FOR_6
ENDFOR_7:
mov clearing_active, 0
PROC_END_GridClearAll:
ret
function PROC_ClearBlock:
mov ClearBlock_col, rbx
mov ClearBlock_row, rcx
mov ClearBlock_original, rdx
mov rbx, ClearBlock_col
mov rcx, ClearBlock_row
push ClearBlock_col
push ClearBlock_row
push ClearBlock_original
push ClearBlock_idx
call FUNC_GridInBounds
pop ClearBlock_idx
pop ClearBlock_original
pop ClearBlock_row
pop ClearBlock_col
mov rbx, rax
cmp rbx, 1
jne ELSE_17
push rbx
push rcx
mov rbx, ClearBlock_col
mov rcx, ClearBlock_row
push ClearBlock_col
push ClearBlock_row
push ClearBlock_original
push ClearBlock_idx
call FUNC_GridIndex
pop ClearBlock_idx
pop ClearBlock_original
pop ClearBlock_row
pop ClearBlock_col
pop rcx
pop rbx
mov rdx, rax
mov ClearBlock_idx, rdx
cmp ClearBlock_idx, 0
jl IDX_OOB_22
cmp ClearBlock_idx, 135
jg IDX_OOB_22
jmp IDX_OK_21
IDX_OOB_22:
exit 1
IDX_OK_21:
mov rsi, ClearBlock_idx
store ClearBlock_original, grid_original, rsi, 8
cmp ClearBlock_idx, 0
jl IDX_OOB_24
cmp ClearBlock_idx, 135
jg IDX_OOB_24
jmp IDX_OK_23
IDX_OOB_24:
exit 1
IDX_OK_23:
mov rsi, ClearBlock_idx
store 10, grid, rsi, 8
cmp ClearBlock_idx, 0
jl IDX_OOB_26
cmp ClearBlock_idx, 135
jg IDX_OOB_26
jmp IDX_OK_25
IDX_OOB_26:
exit 1
IDX_OK_25:
mov rsi, ClearBlock_idx
store 1, grid_clear, rsi, 8
cmp ClearBlock_idx, 0
jl IDX_OOB_28
cmp ClearBlock_idx, 135
jg IDX_OOB_28
jmp IDX_OK_27
IDX_OOB_28:
exit 1
IDX_OK_27:
mov rsi, ClearBlock_idx
store 0, grid_flash, rsi, 8
mov clearing_active, 1
ELSE_17:
PROC_END_ClearBlock:
ret
function PROC_PlacePiece:
mov rbx, PieceUnit.piece_y
cmp rbx, 0
jg ELSE_29
mov game_over, 1
jmp PROC_END_PlacePiece
ELSE_29:
mov rdx, PieceUnit.piece_x1
mov rsi, PieceUnit.piece_y1
mov rdi, PieceUnit.piece_c1
mov r8, rdx
push rbx
push rcx
push rdx
mov rbx, r8
mov rcx, rsi
mov rdx, rdi
call PROC_GridSet
pop rdx
pop rcx
pop rbx
mov r9, PieceUnit.piece_x2
mov r10, PieceUnit.piece_y2
mov r11, PieceUnit.piece_c2
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, r10
mov rdx, r11
call PROC_GridSet
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, PieceUnit.piece_x3
mov r10, PieceUnit.piece_y3
mov r11, PieceUnit.piece_c3
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, r10
mov rdx, r11
call PROC_GridSet
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
call PieceUnit.PROC_PieceSpawn
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
PROC_END_PlacePiece:
ret
function PROC_AddLine:
add lines, 1
add score, 6
add line_count, 1
cmp line_count, lines_per_speed
jl ELSE_33
mov line_count, 0
sub speed, 4
cmp speed, 6
jge ELSE_37
mov speed, 6
ELSE_37:
ELSE_33:
PROC_END_AddLine:
ret
function PROC_ProcessGravity:
mov ProcessGravity_c, 0
FOR_41:
cmp ProcessGravity_c, 7
jg ENDFOR_42
mov ProcessGravity_r, 15
FOR_44:
cmp ProcessGravity_r, 0
jl ENDFOR_45
mov rbx, ProcessGravity_c
mov rcx, ProcessGravity_r
push ProcessGravity_c
push ProcessGravity_r
push ProcessGravity_val
call FUNC_GridGet
pop ProcessGravity_val
pop ProcessGravity_r
pop ProcessGravity_c
mov rbx, rax
mov ProcessGravity_val, rbx
cmp ProcessGravity_val, 0
je AND_ZERO_53
cmp ProcessGravity_val, 10
je AND_ZERO_53
mov rsi, 1
jmp AND_END_54
AND_ZERO_53:
mov rsi, 0
AND_END_54:
mov rdi, ProcessGravity_r
add rdi, 1
push rbx
push rcx
push rdx
push rsi
mov rbx, ProcessGravity_c
mov rcx, rdi
push ProcessGravity_c
push ProcessGravity_r
push ProcessGravity_val
call FUNC_GridGet
pop ProcessGravity_val
pop ProcessGravity_r
pop ProcessGravity_c
pop rsi
pop rdx
pop rcx
pop rbx
mov r8, rax
cmp r8, 0
jne ELSE_47
cmp rsi, 0
je ELSE_47
mov r9, ProcessGravity_r
add r9, 1
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, ProcessGravity_c
mov rcx, r9
mov rdx, ProcessGravity_val
push ProcessGravity_c
push ProcessGravity_r
push ProcessGravity_val
call PROC_GridSet
pop ProcessGravity_val
pop ProcessGravity_r
pop ProcessGravity_c
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, ProcessGravity_c
mov rcx, ProcessGravity_r
mov rdx, 0
push ProcessGravity_c
push ProcessGravity_r
push ProcessGravity_val
call PROC_GridSet
pop ProcessGravity_val
pop ProcessGravity_r
pop ProcessGravity_c
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
ELSE_47:
FOR_CONTINUE_46:
sub ProcessGravity_r, 1
jmp FOR_44
ENDFOR_45:
FOR_CONTINUE_43:
add ProcessGravity_c, 1
jmp FOR_41
ENDFOR_42:
PROC_END_ProcessGravity:
ret
function PROC_ProcessFlash:
mov clearing_active, 0
mov ProcessFlash_r, 0
FOR_59:
cmp ProcessFlash_r, 16
jg ENDFOR_60
mov ProcessFlash_c, 0
FOR_62:
cmp ProcessFlash_c, 7
jg ENDFOR_63
mov rbx, ProcessFlash_c
mov rcx, ProcessFlash_r
push ProcessFlash_c
push ProcessFlash_r
push ProcessFlash_idx
push ProcessFlash_cv
call FUNC_GridGet
pop ProcessFlash_cv
pop ProcessFlash_idx
pop ProcessFlash_r
pop ProcessFlash_c
mov rbx, rax
cmp rbx, 10
jne ELSE_65
push rbx
push rcx
mov rbx, ProcessFlash_c
mov rcx, ProcessFlash_r
push ProcessFlash_c
push ProcessFlash_r
push ProcessFlash_idx
push ProcessFlash_cv
call FUNC_GridIndex
pop ProcessFlash_cv
pop ProcessFlash_idx
pop ProcessFlash_r
pop ProcessFlash_c
pop rcx
pop rbx
mov rdx, rax
mov ProcessFlash_idx, rdx
mov rsi, ProcessFlash_idx
load rdi, grid_clear, rsi, 8
mov ProcessFlash_cv, rdi
add ProcessFlash_cv, 1
cmp ProcessFlash_idx, 0
jl IDX_OOB_70
cmp ProcessFlash_idx, 135
jg IDX_OOB_70
jmp IDX_OK_69
IDX_OOB_70:
exit 1
IDX_OK_69:
mov r8, ProcessFlash_idx
store ProcessFlash_cv, grid_clear, r8, 8
mov r8, ProcessFlash_idx
load r9, grid_flash, r8, 8
add r9, 1
cmp ProcessFlash_idx, 0
jl IDX_OOB_72
cmp ProcessFlash_idx, 135
jg IDX_OOB_72
jmp IDX_OK_71
IDX_OOB_72:
exit 1
IDX_OK_71:
mov r8, ProcessFlash_idx
store r9, grid_flash, r8, 8
cmp ProcessFlash_cv, 50
jle ELSE_73
cmp ProcessFlash_idx, 0
jl IDX_OOB_78
cmp ProcessFlash_idx, 135
jg IDX_OOB_78
jmp IDX_OK_77
IDX_OOB_78:
exit 1
IDX_OK_77:
mov r9, ProcessFlash_idx
store 0, grid, r9, 8
cmp ProcessFlash_idx, 0
jl IDX_OOB_80
cmp ProcessFlash_idx, 135
jg IDX_OOB_80
jmp IDX_OK_79
IDX_OOB_80:
exit 1
IDX_OK_79:
mov r9, ProcessFlash_idx
store 0, grid_clear, r9, 8
cmp ProcessFlash_idx, 0
jl IDX_OOB_82
cmp ProcessFlash_idx, 135
jg IDX_OOB_82
jmp IDX_OK_81
IDX_OOB_82:
exit 1
IDX_OK_81:
mov r9, ProcessFlash_idx
store 0, grid_flash, r9, 8
cmp ProcessFlash_idx, 0
jl IDX_OOB_84
cmp ProcessFlash_idx, 135
jg IDX_OOB_84
jmp IDX_OK_83
IDX_OOB_84:
exit 1
IDX_OK_83:
mov r9, ProcessFlash_idx
store 0, grid_original, r9, 8
jmp ENDIF_74
ELSE_73:
mov clearing_active, 1
ENDIF_74:
ELSE_65:
FOR_CONTINUE_64:
add ProcessFlash_c, 1
jmp FOR_62
ENDFOR_63:
FOR_CONTINUE_61:
add ProcessFlash_r, 1
jmp FOR_59
ENDFOR_60:
PROC_END_ProcessFlash:
ret
function PROC_DropPiece:
call FUNC_CanMoveDown
mov rbx, rax
cmp rbx, 1
jne ELSE_85
push rbx
push rcx
call PieceUnit.PROC_PieceMoveDown
pop rcx
pop rbx
jmp ENDIF_86
ELSE_85:
push rbx
push rcx
call PROC_PlacePiece
pop rcx
pop rbx
ENDIF_86:
PROC_END_DropPiece:
ret
function PROC_HardDrop:
WHILE_89:
call FUNC_CanMoveDown
mov rbx, rax
cmp rbx, 1
jne ENDWHILE_90
push rbx
push rcx
call PieceUnit.PROC_PieceMoveDown
pop rcx
pop rbx
jmp WHILE_89
ENDWHILE_90:
push rbx
push rcx
call PROC_PlacePiece
pop rcx
pop rbx
PROC_END_HardDrop:
ret
function PROC_ResetGame:
call PROC_GridClearAll
mov score, 0
mov lines, 0
mov speed, 80
mov line_count, 0
mov lines_per_speed, 10
mov game_over, 0
mov drop_timer, 0
call PieceUnit.PROC_PieceInit
PROC_END_ResetGame:
ret
function PROC_UpdateGame:
cmp game_over, 1
jne ELSE_93
jmp PROC_END_UpdateGame
ELSE_93:
push rbx
push UpdateGame_matched
call PROC_ProcessFlash
pop UpdateGame_matched
pop rbx
push rbx
push UpdateGame_matched
call FUNC_IsClearing
pop UpdateGame_matched
pop rbx
mov rcx, rax
cmp rcx, 0
jne ELSE_97
push rbx
push rcx
push rdx
push UpdateGame_matched
call PROC_ProcessGravity
pop UpdateGame_matched
pop rdx
pop rcx
pop rbx
push rbx
push rcx
push rdx
push UpdateGame_matched
call FUNC_CheckAndClearMatches
pop UpdateGame_matched
pop rdx
pop rcx
pop rbx
mov rsi, rax
mov UpdateGame_matched, rsi
cmp UpdateGame_matched, 0
jne ELSE_101
mov r8, drop_timer
add r8, 1
mov drop_timer, r8
cmp drop_timer, speed
jl ELSE_105
mov drop_timer, 0
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
push UpdateGame_matched
call PROC_DropPiece
pop UpdateGame_matched
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
ELSE_105:
ELSE_101:
ELSE_97:
PROC_END_UpdateGame:
ret
function FUNC_GridIndex:
mov GridIndex_col, rbx
mov GridIndex_row, rcx
mov __funcret_GridIndex, GridIndex_row
mul __funcret_GridIndex, 8
add __funcret_GridIndex, GridIndex_col
FUNC_END_GridIndex:
mov rax, __funcret_GridIndex
ret
function FUNC_GridInBounds:
mov GridInBounds_col, rbx
mov GridInBounds_row, rcx
cmp GridInBounds_col, 0
jl AND_ZERO_115
cmp GridInBounds_col, 8
jge AND_ZERO_115
mov rdx, 1
jmp AND_END_116
AND_ZERO_115:
mov rdx, 0
AND_END_116:
cmp GridInBounds_row, 0
jl AND_ZERO_119
cmp rdx, 0
je AND_ZERO_119
mov rdi, 1
jmp AND_END_120
AND_ZERO_119:
mov rdi, 0
AND_END_120:
cmp GridInBounds_row, 17
jge ELSE_109
cmp rdi, 0
je ELSE_109
mov __funcret_GridInBounds, 1
jmp ENDIF_110
ELSE_109:
mov __funcret_GridInBounds, 0
ENDIF_110:
FUNC_END_GridInBounds:
mov rax, __funcret_GridInBounds
ret
function FUNC_GridGet:
mov GridGet_col, rbx
mov GridGet_row, rcx
mov rbx, GridGet_col
mov rcx, GridGet_row
push GridGet_col
push GridGet_row
call FUNC_GridInBounds
pop GridGet_row
pop GridGet_col
mov rbx, rax
cmp rbx, 1
jne ELSE_125
push rbx
push rcx
mov rbx, GridGet_col
mov rcx, GridGet_row
push GridGet_col
push GridGet_row
call FUNC_GridIndex
pop GridGet_row
pop GridGet_col
pop rcx
pop rbx
mov rdx, rax
mov rsi, rdx
load rdi, grid, rsi, 8
mov __funcret_GridGet, rdi
jmp ENDIF_126
ELSE_125:
mov __funcret_GridGet, 0
sub __funcret_GridGet, 1
ENDIF_126:
FUNC_END_GridGet:
mov rax, __funcret_GridGet
ret
function FUNC_GridGetClear:
mov GridGetClear_col, rbx
mov GridGetClear_row, rcx
mov rbx, GridGetClear_col
mov rcx, GridGetClear_row
push GridGetClear_col
push GridGetClear_row
call FUNC_GridInBounds
pop GridGetClear_row
pop GridGetClear_col
mov rbx, rax
cmp rbx, 1
jne ELSE_129
push rbx
push rcx
mov rbx, GridGetClear_col
mov rcx, GridGetClear_row
push GridGetClear_col
push GridGetClear_row
call FUNC_GridIndex
pop GridGetClear_row
pop GridGetClear_col
pop rcx
pop rbx
mov rdx, rax
mov rsi, rdx
load rdi, grid_clear, rsi, 8
mov __funcret_GridGetClear, rdi
jmp ENDIF_130
ELSE_129:
mov __funcret_GridGetClear, 0
ENDIF_130:
FUNC_END_GridGetClear:
mov rax, __funcret_GridGetClear
ret
function FUNC_GridGetFlash:
mov GridGetFlash_col, rbx
mov GridGetFlash_row, rcx
mov rbx, GridGetFlash_col
mov rcx, GridGetFlash_row
push GridGetFlash_col
push GridGetFlash_row
call FUNC_GridInBounds
pop GridGetFlash_row
pop GridGetFlash_col
mov rbx, rax
cmp rbx, 1
jne ELSE_133
push rbx
push rcx
mov rbx, GridGetFlash_col
mov rcx, GridGetFlash_row
push GridGetFlash_col
push GridGetFlash_row
call FUNC_GridIndex
pop GridGetFlash_row
pop GridGetFlash_col
pop rcx
pop rbx
mov rdx, rax
mov rsi, rdx
load rdi, grid_flash, rsi, 8
mov __funcret_GridGetFlash, rdi
jmp ENDIF_134
ELSE_133:
mov __funcret_GridGetFlash, 0
ENDIF_134:
FUNC_END_GridGetFlash:
mov rax, __funcret_GridGetFlash
ret
function FUNC_GridGetOriginal:
mov GridGetOriginal_col, rbx
mov GridGetOriginal_row, rcx
mov rbx, GridGetOriginal_col
mov rcx, GridGetOriginal_row
push GridGetOriginal_col
push GridGetOriginal_row
call FUNC_GridInBounds
pop GridGetOriginal_row
pop GridGetOriginal_col
mov rbx, rax
cmp rbx, 1
jne ELSE_137
push rbx
push rcx
mov rbx, GridGetOriginal_col
mov rcx, GridGetOriginal_row
push GridGetOriginal_col
push GridGetOriginal_row
call FUNC_GridIndex
pop GridGetOriginal_row
pop GridGetOriginal_col
pop rcx
pop rbx
mov rdx, rax
mov rsi, rdx
load rdi, grid_original, rsi, 8
mov __funcret_GridGetOriginal, rdi
jmp ENDIF_138
ELSE_137:
mov __funcret_GridGetOriginal, 0
ENDIF_138:
FUNC_END_GridGetOriginal:
mov rax, __funcret_GridGetOriginal
ret
function FUNC_CanMoveLeft:
mov __funcret_CanMoveLeft, 1
mov rbx, PieceUnit.piece_x1
cmp rbx, 0
jle OR_ONE_147
mov rdx, PieceUnit.piece_x2
cmp rdx, 0
jle OR_ONE_147
mov rdi, 0
jmp OR_END_148
OR_ONE_147:
mov rdi, 1
OR_END_148:
mov r8, PieceUnit.piece_x3
cmp r8, 0
jg ELSE_141
cmp rdi, 0
jne OR_ONE_151
OR_ONE_151:
mov __funcret_CanMoveLeft, 0
jmp FUNC_END_CanMoveLeft
ELSE_141:
mov r9, PieceUnit.piece_x1
sub r9, 1
mov r10, PieceUnit.piece_y1
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, r10
call FUNC_GridGet
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
cmp rax, 0
je ELSE_153
mov __funcret_CanMoveLeft, 0
jmp ENDIF_154
ELSE_153:
mov r9, PieceUnit.piece_x2
sub r9, 1
mov r10, PieceUnit.piece_y2
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, r10
call FUNC_GridGet
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
cmp rax, 0
je ELSE_157
mov __funcret_CanMoveLeft, 0
jmp ENDIF_158
ELSE_157:
mov r9, PieceUnit.piece_x3
sub r9, 1
mov r10, PieceUnit.piece_y3
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, r10
call FUNC_GridGet
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
cmp rax, 0
je ELSE_161
mov __funcret_CanMoveLeft, 0
ELSE_161:
ENDIF_158:
ENDIF_154:
FUNC_END_CanMoveLeft:
mov rax, __funcret_CanMoveLeft
ret
function FUNC_CanMoveRight:
mov __funcret_CanMoveRight, 1
mov rbx, PieceUnit.piece_x1
cmp rbx, 7
jge OR_ONE_171
mov rdx, PieceUnit.piece_x2
cmp rdx, 7
jge OR_ONE_171
mov rdi, 0
jmp OR_END_172
OR_ONE_171:
mov rdi, 1
OR_END_172:
mov r8, PieceUnit.piece_x3
cmp r8, 7
jl ELSE_165
cmp rdi, 0
jne OR_ONE_175
OR_ONE_175:
mov __funcret_CanMoveRight, 0
jmp FUNC_END_CanMoveRight
ELSE_165:
mov r9, PieceUnit.piece_x1
add r9, 1
mov r10, PieceUnit.piece_y1
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, r10
call FUNC_GridGet
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
cmp rax, 0
je ELSE_177
mov __funcret_CanMoveRight, 0
jmp ENDIF_178
ELSE_177:
mov r9, PieceUnit.piece_x2
add r9, 1
mov r10, PieceUnit.piece_y2
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, r10
call FUNC_GridGet
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
cmp rax, 0
je ELSE_181
mov __funcret_CanMoveRight, 0
jmp ENDIF_182
ELSE_181:
mov r9, PieceUnit.piece_x3
add r9, 1
mov r10, PieceUnit.piece_y3
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, r10
call FUNC_GridGet
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
cmp rax, 0
je ELSE_185
mov __funcret_CanMoveRight, 0
ELSE_185:
ENDIF_182:
ENDIF_178:
FUNC_END_CanMoveRight:
mov rax, __funcret_CanMoveRight
ret
function FUNC_CanMoveDown:
mov __funcret_CanMoveDown, 1
mov rbx, PieceUnit.piece_y1
mov rcx, rbx
add rcx, 1
cmp rcx, 16
jg OR_ONE_195
mov rsi, PieceUnit.piece_y2
mov rdi, rsi
add rdi, 1
cmp rdi, 16
jg OR_ONE_195
mov r9, 0
jmp OR_END_196
OR_ONE_195:
mov r9, 1
OR_END_196:
mov r10, PieceUnit.piece_y3
add r10, 1
cmp r10, 16
jle ELSE_189
cmp r9, 0
jne OR_ONE_199
OR_ONE_199:
mov __funcret_CanMoveDown, 0
jmp FUNC_END_CanMoveDown
ELSE_189:
mov r9, PieceUnit.piece_x1
mov r10, PieceUnit.piece_y1
add r10, 1
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, r10
call FUNC_GridGet
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
cmp rax, 0
je ELSE_201
mov __funcret_CanMoveDown, 0
jmp FUNC_END_CanMoveDown
ELSE_201:
mov r9, PieceUnit.piece_x2
mov r10, PieceUnit.piece_y2
add r10, 1
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, r10
call FUNC_GridGet
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
cmp rax, 0
je ELSE_205
mov __funcret_CanMoveDown, 0
jmp FUNC_END_CanMoveDown
ELSE_205:
mov r9, PieceUnit.piece_x3
mov r10, PieceUnit.piece_y3
add r10, 1
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, r10
call FUNC_GridGet
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
cmp rax, 0
je ELSE_209
mov __funcret_CanMoveDown, 0
ELSE_209:
FUNC_END_CanMoveDown:
mov rax, __funcret_CanMoveDown
ret
function FUNC_CanRotate:
mov __funcret_CanRotate, 1
mov rbx, PieceUnit.piece_shape
cmp rbx, 0
jne ELSE_213
mov rdx, PieceUnit.piece_x
mov rsi, rdx
add rsi, 1
mov CanRotate_nx2, rsi
mov rdi, PieceUnit.piece_y
mov CanRotate_ny2, rdi
mov r8, PieceUnit.piece_x
mov r9, r8
add r9, 2
mov CanRotate_nx3, r9
mov r9, PieceUnit.piece_y
mov CanRotate_ny3, r9
cmp CanRotate_nx3, 8
jl ELSE_217
mov __funcret_CanRotate, 0
jmp FUNC_END_CanRotate
ELSE_217:
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, CanRotate_nx2
mov rcx, CanRotate_ny2
push CanRotate_nx2
push CanRotate_ny2
push CanRotate_nx3
push CanRotate_ny3
call FUNC_GridGet
pop CanRotate_ny3
pop CanRotate_nx3
pop CanRotate_ny2
pop CanRotate_nx2
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, rax
cmp r9, 0
je ELSE_221
mov __funcret_CanRotate, 0
jmp ENDIF_222
ELSE_221:
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, CanRotate_nx3
mov rcx, CanRotate_ny3
push CanRotate_nx2
push CanRotate_ny2
push CanRotate_nx3
push CanRotate_ny3
call FUNC_GridGet
pop CanRotate_ny3
pop CanRotate_nx3
pop CanRotate_ny2
pop CanRotate_nx2
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, rax
cmp r9, 0
je ELSE_225
mov __funcret_CanRotate, 0
ELSE_225:
ENDIF_222:
jmp ENDIF_214
ELSE_213:
mov r9, PieceUnit.piece_x
mov CanRotate_nx2, r9
mov r9, PieceUnit.piece_y
add r9, 1
mov CanRotate_ny2, r9
mov r9, PieceUnit.piece_x
mov CanRotate_nx3, r9
mov r9, PieceUnit.piece_y
add r9, 2
mov CanRotate_ny3, r9
cmp CanRotate_ny3, 17
jl ELSE_229
mov __funcret_CanRotate, 0
jmp FUNC_END_CanRotate
ELSE_229:
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, CanRotate_nx2
mov rcx, CanRotate_ny2
push CanRotate_nx2
push CanRotate_ny2
push CanRotate_nx3
push CanRotate_ny3
call FUNC_GridGet
pop CanRotate_ny3
pop CanRotate_nx3
pop CanRotate_ny2
pop CanRotate_nx2
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
cmp rax, 0
je ELSE_233
mov __funcret_CanRotate, 0
jmp ENDIF_234
ELSE_233:
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, CanRotate_nx3
mov rcx, CanRotate_ny3
push CanRotate_nx2
push CanRotate_ny2
push CanRotate_nx3
push CanRotate_ny3
call FUNC_GridGet
pop CanRotate_ny3
pop CanRotate_nx3
pop CanRotate_ny2
pop CanRotate_nx2
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
cmp rax, 0
je ELSE_237
mov __funcret_CanRotate, 0
ELSE_237:
ENDIF_234:
ENDIF_214:
FUNC_END_CanRotate:
mov rax, __funcret_CanRotate
ret
function FUNC_CheckGameOver:
mov rbx, PieceUnit.piece_x1
mov rcx, PieceUnit.piece_y1
call FUNC_GridGet
cmp rax, 0
je ELSE_241
mov __funcret_CheckGameOver, 1
jmp ENDIF_242
ELSE_241:
mov __funcret_CheckGameOver, 0
ENDIF_242:
FUNC_END_CheckGameOver:
mov rax, __funcret_CheckGameOver
ret
function FUNC_CheckHorizontal:
mov CheckHorizontal_found, 0
mov CheckHorizontal_r, 0
FOR_245:
cmp CheckHorizontal_r, 16
jg ENDFOR_246
mov CheckHorizontal_c, 0
FOR_248:
cmp CheckHorizontal_c, 5
jg ENDFOR_249
mov rbx, CheckHorizontal_c
mov rcx, CheckHorizontal_r
push CheckHorizontal_r
push CheckHorizontal_c
push CheckHorizontal_cur
push CheckHorizontal_found
call FUNC_GridGet
pop CheckHorizontal_found
pop CheckHorizontal_cur
pop CheckHorizontal_c
pop CheckHorizontal_r
mov rbx, rax
mov CheckHorizontal_cur, rbx
cmp CheckHorizontal_cur, 0
je ELSE_251
cmp CheckHorizontal_cur, 10
je ELSE_251
mov rdi, CheckHorizontal_c
add rdi, 1
push rbx
push rcx
push rdx
push rsi
mov rbx, rdi
mov rcx, CheckHorizontal_r
push CheckHorizontal_r
push CheckHorizontal_c
push CheckHorizontal_cur
push CheckHorizontal_found
call FUNC_GridGet
pop CheckHorizontal_found
pop CheckHorizontal_cur
pop CheckHorizontal_c
pop CheckHorizontal_r
pop rsi
pop rdx
pop rcx
pop rbx
mov r8, rax
cmp r8, CheckHorizontal_cur
je CMP_TRUE_261
mov r9, 0
jmp CMP_END_262
CMP_TRUE_261:
mov r9, 1
CMP_END_262:
mov r10, CheckHorizontal_c
add r10, 2
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
push r9
mov rbx, r10
mov rcx, CheckHorizontal_r
push CheckHorizontal_r
push CheckHorizontal_c
push CheckHorizontal_cur
push CheckHorizontal_found
call FUNC_GridGet
pop CheckHorizontal_found
pop CheckHorizontal_cur
pop CheckHorizontal_c
pop CheckHorizontal_r
pop r9
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
cmp rax, CheckHorizontal_cur
jne ELSE_259
cmp r9, 0
je ELSE_259
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, CheckHorizontal_c
mov rcx, CheckHorizontal_r
mov rdx, CheckHorizontal_cur
push CheckHorizontal_r
push CheckHorizontal_c
push CheckHorizontal_cur
push CheckHorizontal_found
call PROC_ClearBlock
pop CheckHorizontal_found
pop CheckHorizontal_cur
pop CheckHorizontal_c
pop CheckHorizontal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, CheckHorizontal_c
add r9, 1
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, CheckHorizontal_r
mov rdx, CheckHorizontal_cur
push CheckHorizontal_r
push CheckHorizontal_c
push CheckHorizontal_cur
push CheckHorizontal_found
call PROC_ClearBlock
pop CheckHorizontal_found
pop CheckHorizontal_cur
pop CheckHorizontal_c
pop CheckHorizontal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, CheckHorizontal_c
add r9, 2
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, CheckHorizontal_r
mov rdx, CheckHorizontal_cur
push CheckHorizontal_r
push CheckHorizontal_c
push CheckHorizontal_cur
push CheckHorizontal_found
call PROC_ClearBlock
pop CheckHorizontal_found
pop CheckHorizontal_cur
pop CheckHorizontal_c
pop CheckHorizontal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
push CheckHorizontal_r
push CheckHorizontal_c
push CheckHorizontal_cur
push CheckHorizontal_found
call PROC_AddLine
pop CheckHorizontal_found
pop CheckHorizontal_cur
pop CheckHorizontal_c
pop CheckHorizontal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov CheckHorizontal_found, 1
ELSE_259:
ELSE_251:
FOR_CONTINUE_250:
add CheckHorizontal_c, 1
jmp FOR_248
ENDFOR_249:
FOR_CONTINUE_247:
add CheckHorizontal_r, 1
jmp FOR_245
ENDFOR_246:
mov __funcret_CheckHorizontal, CheckHorizontal_found
FUNC_END_CheckHorizontal:
mov rax, __funcret_CheckHorizontal
ret
function FUNC_CheckVertical:
mov CheckVertical_found, 0
mov CheckVertical_c, 0
FOR_267:
cmp CheckVertical_c, 7
jg ENDFOR_268
mov CheckVertical_r, 0
FOR_270:
cmp CheckVertical_r, 14
jg ENDFOR_271
mov rbx, CheckVertical_c
mov rcx, CheckVertical_r
push CheckVertical_r
push CheckVertical_c
push CheckVertical_cur
push CheckVertical_found
call FUNC_GridGet
pop CheckVertical_found
pop CheckVertical_cur
pop CheckVertical_c
pop CheckVertical_r
mov rbx, rax
mov CheckVertical_cur, rbx
cmp CheckVertical_cur, 0
je ELSE_273
cmp CheckVertical_cur, 10
je ELSE_273
mov rdi, CheckVertical_r
add rdi, 1
push rbx
push rcx
push rdx
push rsi
mov rbx, CheckVertical_c
mov rcx, rdi
push CheckVertical_r
push CheckVertical_c
push CheckVertical_cur
push CheckVertical_found
call FUNC_GridGet
pop CheckVertical_found
pop CheckVertical_cur
pop CheckVertical_c
pop CheckVertical_r
pop rsi
pop rdx
pop rcx
pop rbx
mov r8, rax
cmp r8, CheckVertical_cur
je CMP_TRUE_283
mov r9, 0
jmp CMP_END_284
CMP_TRUE_283:
mov r9, 1
CMP_END_284:
mov r10, CheckVertical_r
add r10, 2
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
push r9
mov rbx, CheckVertical_c
mov rcx, r10
push CheckVertical_r
push CheckVertical_c
push CheckVertical_cur
push CheckVertical_found
call FUNC_GridGet
pop CheckVertical_found
pop CheckVertical_cur
pop CheckVertical_c
pop CheckVertical_r
pop r9
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
cmp rax, CheckVertical_cur
jne ELSE_281
cmp r9, 0
je ELSE_281
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, CheckVertical_c
mov rcx, CheckVertical_r
mov rdx, CheckVertical_cur
push CheckVertical_r
push CheckVertical_c
push CheckVertical_cur
push CheckVertical_found
call PROC_ClearBlock
pop CheckVertical_found
pop CheckVertical_cur
pop CheckVertical_c
pop CheckVertical_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, CheckVertical_r
add r9, 1
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, CheckVertical_c
mov rcx, r9
mov rdx, CheckVertical_cur
push CheckVertical_r
push CheckVertical_c
push CheckVertical_cur
push CheckVertical_found
call PROC_ClearBlock
pop CheckVertical_found
pop CheckVertical_cur
pop CheckVertical_c
pop CheckVertical_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, CheckVertical_r
add r9, 2
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, CheckVertical_c
mov rcx, r9
mov rdx, CheckVertical_cur
push CheckVertical_r
push CheckVertical_c
push CheckVertical_cur
push CheckVertical_found
call PROC_ClearBlock
pop CheckVertical_found
pop CheckVertical_cur
pop CheckVertical_c
pop CheckVertical_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
push CheckVertical_r
push CheckVertical_c
push CheckVertical_cur
push CheckVertical_found
call PROC_AddLine
pop CheckVertical_found
pop CheckVertical_cur
pop CheckVertical_c
pop CheckVertical_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov CheckVertical_found, 1
ELSE_281:
ELSE_273:
FOR_CONTINUE_272:
add CheckVertical_r, 1
jmp FOR_270
ENDFOR_271:
FOR_CONTINUE_269:
add CheckVertical_c, 1
jmp FOR_267
ENDFOR_268:
mov __funcret_CheckVertical, CheckVertical_found
FUNC_END_CheckVertical:
mov rax, __funcret_CheckVertical
ret
function FUNC_CheckDiagonal:
mov CheckDiagonal_found, 0
mov CheckDiagonal_r, 0
FOR_289:
cmp CheckDiagonal_r, 14
jg ENDFOR_290
mov CheckDiagonal_c, 0
FOR_292:
cmp CheckDiagonal_c, 5
jg ENDFOR_293
mov rbx, CheckDiagonal_c
mov rcx, CheckDiagonal_r
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call FUNC_GridGet
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
mov rbx, rax
mov CheckDiagonal_cur, rbx
cmp CheckDiagonal_cur, 0
je ELSE_295
cmp CheckDiagonal_cur, 10
je ELSE_295
mov rdi, CheckDiagonal_c
add rdi, 1
mov r8, CheckDiagonal_r
add r8, 1
push rbx
push rcx
push rdx
push rsi
mov rbx, rdi
mov rcx, r8
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call FUNC_GridGet
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, rax
cmp r9, CheckDiagonal_cur
je CMP_TRUE_305
mov r10, 0
jmp CMP_END_306
CMP_TRUE_305:
mov r10, 1
CMP_END_306:
mov r9, CheckDiagonal_c
add r9, 2
mov r11, CheckDiagonal_r
add r11, 2
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
push r10
mov rbx, r9
mov rcx, r11
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call FUNC_GridGet
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r10
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
cmp rax, CheckDiagonal_cur
jne ELSE_303
cmp r10, 0
je ELSE_303
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, CheckDiagonal_c
mov rcx, CheckDiagonal_r
mov rdx, CheckDiagonal_cur
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call PROC_ClearBlock
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, CheckDiagonal_c
add r9, 1
mov r10, CheckDiagonal_r
add r10, 1
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, r10
mov rdx, CheckDiagonal_cur
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call PROC_ClearBlock
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, CheckDiagonal_c
add r9, 2
mov r10, CheckDiagonal_r
add r10, 2
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, r10
mov rdx, CheckDiagonal_cur
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call PROC_ClearBlock
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call PROC_AddLine
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov CheckDiagonal_found, 1
ELSE_303:
ELSE_295:
FOR_CONTINUE_294:
add CheckDiagonal_c, 1
jmp FOR_292
ENDFOR_293:
FOR_CONTINUE_291:
add CheckDiagonal_r, 1
jmp FOR_289
ENDFOR_290:
mov CheckDiagonal_r, 0
FOR_311:
cmp CheckDiagonal_r, 14
jg ENDFOR_312
mov CheckDiagonal_c, 2
FOR_314:
cmp CheckDiagonal_c, 7
jg ENDFOR_315
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, CheckDiagonal_c
mov rcx, CheckDiagonal_r
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call FUNC_GridGet
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, rax
mov CheckDiagonal_cur, r9
cmp CheckDiagonal_cur, 0
je ELSE_317
cmp CheckDiagonal_cur, 10
je ELSE_317
mov r9, CheckDiagonal_c
sub r9, 1
mov r10, CheckDiagonal_r
add r10, 1
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, r10
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call FUNC_GridGet
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r11, rax
cmp r11, CheckDiagonal_cur
je CMP_TRUE_327
mov r9, 0
jmp CMP_END_328
CMP_TRUE_327:
mov r9, 1
CMP_END_328:
mov r10, CheckDiagonal_c
sub r10, 2
mov r11, CheckDiagonal_r
add r11, 2
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
push r9
mov rbx, r10
mov rcx, r11
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call FUNC_GridGet
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r9
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
cmp rax, CheckDiagonal_cur
jne ELSE_325
cmp r9, 0
je ELSE_325
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, CheckDiagonal_c
mov rcx, CheckDiagonal_r
mov rdx, CheckDiagonal_cur
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call PROC_ClearBlock
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, CheckDiagonal_c
sub r9, 1
mov r10, CheckDiagonal_r
add r10, 1
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, r10
mov rdx, CheckDiagonal_cur
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call PROC_ClearBlock
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, CheckDiagonal_c
sub r9, 2
mov r10, CheckDiagonal_r
add r10, 2
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, r10
mov rdx, CheckDiagonal_cur
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call PROC_ClearBlock
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call PROC_AddLine
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov CheckDiagonal_found, 1
ELSE_325:
ELSE_317:
FOR_CONTINUE_316:
add CheckDiagonal_c, 1
jmp FOR_314
ENDFOR_315:
FOR_CONTINUE_313:
add CheckDiagonal_r, 1
jmp FOR_311
ENDFOR_312:
mov CheckDiagonal_r, 2
FOR_333:
cmp CheckDiagonal_r, 16
jg ENDFOR_334
mov CheckDiagonal_c, 0
FOR_336:
cmp CheckDiagonal_c, 5
jg ENDFOR_337
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, CheckDiagonal_c
mov rcx, CheckDiagonal_r
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call FUNC_GridGet
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, rax
mov CheckDiagonal_cur, r9
cmp CheckDiagonal_cur, 0
je ELSE_339
cmp CheckDiagonal_cur, 10
je ELSE_339
mov r9, CheckDiagonal_c
add r9, 1
mov r10, CheckDiagonal_r
sub r10, 1
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, r10
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call FUNC_GridGet
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r11, rax
cmp r11, CheckDiagonal_cur
je CMP_TRUE_349
mov r9, 0
jmp CMP_END_350
CMP_TRUE_349:
mov r9, 1
CMP_END_350:
mov r10, CheckDiagonal_c
add r10, 2
mov r11, CheckDiagonal_r
sub r11, 2
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
push r9
mov rbx, r10
mov rcx, r11
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call FUNC_GridGet
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r9
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
cmp rax, CheckDiagonal_cur
jne ELSE_347
cmp r9, 0
je ELSE_347
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, CheckDiagonal_c
mov rcx, CheckDiagonal_r
mov rdx, CheckDiagonal_cur
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call PROC_ClearBlock
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, CheckDiagonal_c
add r9, 1
mov r10, CheckDiagonal_r
sub r10, 1
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, r10
mov rdx, CheckDiagonal_cur
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call PROC_ClearBlock
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, CheckDiagonal_c
add r9, 2
mov r10, CheckDiagonal_r
sub r10, 2
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, r10
mov rdx, CheckDiagonal_cur
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call PROC_ClearBlock
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call PROC_AddLine
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov CheckDiagonal_found, 1
ELSE_347:
ELSE_339:
FOR_CONTINUE_338:
add CheckDiagonal_c, 1
jmp FOR_336
ENDFOR_337:
FOR_CONTINUE_335:
add CheckDiagonal_r, 1
jmp FOR_333
ENDFOR_334:
mov CheckDiagonal_r, 2
FOR_355:
cmp CheckDiagonal_r, 16
jg ENDFOR_356
mov CheckDiagonal_c, 2
FOR_358:
cmp CheckDiagonal_c, 7
jg ENDFOR_359
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, CheckDiagonal_c
mov rcx, CheckDiagonal_r
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call FUNC_GridGet
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, rax
mov CheckDiagonal_cur, r9
cmp CheckDiagonal_cur, 0
je ELSE_361
cmp CheckDiagonal_cur, 10
je ELSE_361
mov r9, CheckDiagonal_c
sub r9, 1
mov r10, CheckDiagonal_r
sub r10, 1
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, r10
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call FUNC_GridGet
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r11, rax
cmp r11, CheckDiagonal_cur
je CMP_TRUE_371
mov r9, 0
jmp CMP_END_372
CMP_TRUE_371:
mov r9, 1
CMP_END_372:
mov r10, CheckDiagonal_c
sub r10, 2
mov r11, CheckDiagonal_r
sub r11, 2
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
push r9
mov rbx, r10
mov rcx, r11
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call FUNC_GridGet
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r9
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
cmp rax, CheckDiagonal_cur
jne ELSE_369
cmp r9, 0
je ELSE_369
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, CheckDiagonal_c
mov rcx, CheckDiagonal_r
mov rdx, CheckDiagonal_cur
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call PROC_ClearBlock
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, CheckDiagonal_c
sub r9, 1
mov r10, CheckDiagonal_r
sub r10, 1
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, r10
mov rdx, CheckDiagonal_cur
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call PROC_ClearBlock
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, CheckDiagonal_c
sub r9, 2
mov r10, CheckDiagonal_r
sub r10, 2
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, r10
mov rdx, CheckDiagonal_cur
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call PROC_ClearBlock
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
push CheckDiagonal_r
push CheckDiagonal_c
push CheckDiagonal_cur
push CheckDiagonal_found
call PROC_AddLine
pop CheckDiagonal_found
pop CheckDiagonal_cur
pop CheckDiagonal_c
pop CheckDiagonal_r
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov CheckDiagonal_found, 1
ELSE_369:
ELSE_361:
FOR_CONTINUE_360:
add CheckDiagonal_c, 1
jmp FOR_358
ENDFOR_359:
FOR_CONTINUE_357:
add CheckDiagonal_r, 1
jmp FOR_355
ENDFOR_356:
mov __funcret_CheckDiagonal, CheckDiagonal_found
FUNC_END_CheckDiagonal:
mov rax, __funcret_CheckDiagonal
ret
function FUNC_CheckAndClearMatches:
mov CheckAndClearMatches_found, 0
push CheckAndClearMatches_found
call FUNC_CheckHorizontal
pop CheckAndClearMatches_found
mov rbx, rax
cmp rbx, 1
jne ELSE_377
mov CheckAndClearMatches_found, 1
ELSE_377:
push rbx
push rcx
push CheckAndClearMatches_found
call FUNC_CheckVertical
pop CheckAndClearMatches_found
pop rcx
pop rbx
mov rdx, rax
cmp rdx, 1
jne ELSE_381
mov CheckAndClearMatches_found, 1
ELSE_381:
push rbx
push rcx
push rdx
push rsi
push CheckAndClearMatches_found
call FUNC_CheckDiagonal
pop CheckAndClearMatches_found
pop rsi
pop rdx
pop rcx
pop rbx
cmp rax, 1
jne ELSE_385
mov CheckAndClearMatches_found, 1
ELSE_385:
mov __funcret_CheckAndClearMatches, CheckAndClearMatches_found
FUNC_END_CheckAndClearMatches:
mov rax, __funcret_CheckAndClearMatches
ret
function FUNC_IsClearing:
mov __funcret_IsClearing, clearing_active
FUNC_END_IsClearing:
mov rax, __funcret_IsClearing
ret
}
}