program Tetris {
section module {
io,
sdl,
std,
string
}
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
int r12 = 0
int r13 = 0
int r14 = 0
ptr _tmpptr0 = null
ptr _tmpptr1 = null
string str_0 = "MXVM Blocks"
string str_1 = "blocks.bmp"
string str_2 = "Could not load: blocks.bmp"
string str_3 = "font.ttf"
string str_4 = "Could not open font.."
string str_5 = "Score: "
string fmt_str = "%s "
string newline = "\n"
int window_id = 0
int renderer_id = 0
ptr board = null
ptr pieces = null
int piece_id = 0
int rotation = 0
int piece_x = 0
int piece_y = 0
int score = 0
int game_over = 0
int show_start = 0
int last_drop = 0
int font_id = 0
int start_texture = 0
int running = 0
int ev = 0
int col_result = 0
int frame_start = 0
int frame_time = 0
int delay_time = 0
int tick = 0
ptr score_text = null
int AllocClearBoard_ci = 0
int LockPiece_li = 0
int LockPiece_lidx = 0
int LockPiece_lv = 0
int LockPiece_lpx = 0
int LockPiece_lpy = 0
int LockPiece_lx = 0
int LockPiece_ly = 0
int LockPiece_lbi = 0
int ClearLines_cy = 0
int ClearLines_cx = 0
int ClearLines_cidx2 = 0
int ClearLines_cv2 = 0
int ClearLines_cj = 0
int ClearLines_cbi = 0
int ClearLines_cbi2 = 0
int ClearLines_is_full = 0
int DrawCell_dx = 0
int DrawCell_dy = 0
int DrawCell_color = 0
int DrawCell_dr = 0
int DrawCell_dg = 0
int DrawCell_db = 0
int DrawCell_dtx = 0
int DrawCell_dty = 0
int DrawCell_dts = 0
int DrawCell_dm = 0
int DrawEmpty_dx = 0
int DrawEmpty_dy = 0
int DrawEmpty_dtx = 0
int DrawEmpty_dty = 0
int DrawEmpty_dts = 0
int Render_ri = 0
int Render_ridx = 0
int Render_rv = 0
int Render_rpx = 0
int Render_rpy = 0
int Render_rx = 0
int Render_ry = 0
int HandleInput_ev_type = 0
int HandleInput_kc = 0
int HandleInput_old_rot = 0
int CheckCollision_cx = 0
int CheckCollision_cy = 0
int CheckCollision_ci = 0
int CheckCollision_cidx = 0
int CheckCollision_cv = 0
int CheckCollision_cpx = 0
int CheckCollision_cpy = 0
int CheckCollision_ccx = 0
int CheckCollision_ccy = 0
int CheckCollision_bidx = 0
int __funcret_CheckCollision = 0
}
section code {
start:
alloc board, 8, 200
alloc pieces, 8, 112
invoke init
mov rcx, 100
mov rdx, 100
mov rsi, 400
mov rdi, 800
mov r8, 0
invoke create_window, str_0, rcx, rdx, rsi, rdi, r8
return rbx
mov window_id, rbx
mov rcx, 0
sub rcx, 1
mov rsi, 0
invoke create_renderer, window_id, rcx, rsi
return rdx
mov renderer_id, rdx
invoke load_texture, renderer_id, str_1
return rcx
mov start_texture, rcx
mov rsi, 0
sub rsi, 1
cmp start_texture, rsi
jne ELSE_0
print fmt_str, str_2
print newline
invoke destroy_renderer, renderer_id
invoke destroy_window, window_id
invoke quit
exit 1
ELSE_0:
invoke init_text
mov r9, 20
invoke load_font, str_3, r9
return r8
mov font_id, r8
mov r9, 0
sub r9, 1
cmp font_id, r9
jne ELSE_4
print fmt_str, str_4
print newline
invoke destroy_renderer, renderer_id
invoke destroy_window, window_id
invoke quit
exit 1
ELSE_4:
invoke seed_random
mov score, 0
mov game_over, 0
mov show_start, 1
mov running, 1
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
call PROC_AllocClearBoard
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 PROC_InitPieces
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
invoke get_ticks
return r9
mov last_drop, r9
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
call PROC_Render
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 PROC_SpawnPiece
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
WHILE_8:
cmp running, 1
jne ENDWHILE_9
invoke get_ticks
return r9
mov frame_start, r9
cmp game_over, 1
jne ELSE_12
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
call PROC_GameReset
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
ELSE_12:
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
call PROC_HandleInput
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
cmp running, 1
jne ELSE_16
cmp show_start, 0
jne ELSE_16
mov r9, frame_start
sub r9, last_drop
mov tick, r9
cmp tick, 800
jl ELSE_24
mov last_drop, frame_start
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
call PROC_MoveDown
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
ELSE_24:
ELSE_16:
cmp running, 1
jne ELSE_28
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
call PROC_Render
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
ELSE_28:
invoke get_ticks
return r9
sub r9, frame_start
mov frame_time, r9
mov r9, 16
sub r9, frame_time
mov delay_time, r9
cmp delay_time, 0
jle ELSE_32
invoke delay, delay_time
ELSE_32:
jmp WHILE_8
ENDWHILE_9:
invoke quit_text
invoke destroy_renderer, renderer_id
invoke destroy_window, window_id
invoke quit
free board
free pieces
done
function PROC_InitPieces:
cmp 0, 0
jl IDX_OOB_37
cmp 0, 111
jg IDX_OOB_37
jmp IDX_OK_36
IDX_OOB_37:
exit 1
IDX_OK_36:
mov rbx, 0
store 4, pieces, rbx, 8
cmp 1, 0
jl IDX_OOB_39
cmp 1, 111
jg IDX_OOB_39
jmp IDX_OK_38
IDX_OOB_39:
exit 1
IDX_OK_38:
mov rbx, 1
store 5, pieces, rbx, 8
cmp 2, 0
jl IDX_OOB_41
cmp 2, 111
jg IDX_OOB_41
jmp IDX_OK_40
IDX_OOB_41:
exit 1
IDX_OK_40:
mov rbx, 2
store 6, pieces, rbx, 8
cmp 3, 0
jl IDX_OOB_43
cmp 3, 111
jg IDX_OOB_43
jmp IDX_OK_42
IDX_OOB_43:
exit 1
IDX_OK_42:
mov rbx, 3
store 7, pieces, rbx, 8
cmp 4, 0
jl IDX_OOB_45
cmp 4, 111
jg IDX_OOB_45
jmp IDX_OK_44
IDX_OOB_45:
exit 1
IDX_OK_44:
mov rbx, 4
store 2, pieces, rbx, 8
cmp 5, 0
jl IDX_OOB_47
cmp 5, 111
jg IDX_OOB_47
jmp IDX_OK_46
IDX_OOB_47:
exit 1
IDX_OK_46:
mov rbx, 5
store 6, pieces, rbx, 8
cmp 6, 0
jl IDX_OOB_49
cmp 6, 111
jg IDX_OOB_49
jmp IDX_OK_48
IDX_OOB_49:
exit 1
IDX_OK_48:
mov rbx, 6
store 10, pieces, rbx, 8
cmp 7, 0
jl IDX_OOB_51
cmp 7, 111
jg IDX_OOB_51
jmp IDX_OK_50
IDX_OOB_51:
exit 1
IDX_OK_50:
mov rbx, 7
store 14, pieces, rbx, 8
cmp 8, 0
jl IDX_OOB_53
cmp 8, 111
jg IDX_OOB_53
jmp IDX_OK_52
IDX_OOB_53:
exit 1
IDX_OK_52:
mov rbx, 8
store 8, pieces, rbx, 8
cmp 9, 0
jl IDX_OOB_55
cmp 9, 111
jg IDX_OOB_55
jmp IDX_OK_54
IDX_OOB_55:
exit 1
IDX_OK_54:
mov rbx, 9
store 9, pieces, rbx, 8
cmp 10, 0
jl IDX_OOB_57
cmp 10, 111
jg IDX_OOB_57
jmp IDX_OK_56
IDX_OOB_57:
exit 1
IDX_OK_56:
mov rbx, 10
store 10, pieces, rbx, 8
cmp 11, 0
jl IDX_OOB_59
cmp 11, 111
jg IDX_OOB_59
jmp IDX_OK_58
IDX_OOB_59:
exit 1
IDX_OK_58:
mov rbx, 11
store 11, pieces, rbx, 8
cmp 12, 0
jl IDX_OOB_61
cmp 12, 111
jg IDX_OOB_61
jmp IDX_OK_60
IDX_OOB_61:
exit 1
IDX_OK_60:
mov rbx, 12
store 1, pieces, rbx, 8
cmp 13, 0
jl IDX_OOB_63
cmp 13, 111
jg IDX_OOB_63
jmp IDX_OK_62
IDX_OOB_63:
exit 1
IDX_OK_62:
mov rbx, 13
store 5, pieces, rbx, 8
cmp 14, 0
jl IDX_OOB_65
cmp 14, 111
jg IDX_OOB_65
jmp IDX_OK_64
IDX_OOB_65:
exit 1
IDX_OK_64:
mov rbx, 14
store 9, pieces, rbx, 8
cmp 15, 0
jl IDX_OOB_67
cmp 15, 111
jg IDX_OOB_67
jmp IDX_OK_66
IDX_OOB_67:
exit 1
IDX_OK_66:
mov rbx, 15
store 13, pieces, rbx, 8
cmp 16, 0
jl IDX_OOB_69
cmp 16, 111
jg IDX_OOB_69
jmp IDX_OK_68
IDX_OOB_69:
exit 1
IDX_OK_68:
mov rbx, 16
store 1, pieces, rbx, 8
cmp 17, 0
jl IDX_OOB_71
cmp 17, 111
jg IDX_OOB_71
jmp IDX_OK_70
IDX_OOB_71:
exit 1
IDX_OK_70:
mov rbx, 17
store 5, pieces, rbx, 8
cmp 18, 0
jl IDX_OOB_73
cmp 18, 111
jg IDX_OOB_73
jmp IDX_OK_72
IDX_OOB_73:
exit 1
IDX_OK_72:
mov rbx, 18
store 6, pieces, rbx, 8
cmp 19, 0
jl IDX_OOB_75
cmp 19, 111
jg IDX_OOB_75
jmp IDX_OK_74
IDX_OOB_75:
exit 1
IDX_OK_74:
mov rbx, 19
store 7, pieces, rbx, 8
cmp 20, 0
jl IDX_OOB_77
cmp 20, 111
jg IDX_OOB_77
jmp IDX_OK_76
IDX_OOB_77:
exit 1
IDX_OK_76:
mov rbx, 20
store 2, pieces, rbx, 8
cmp 21, 0
jl IDX_OOB_79
cmp 21, 111
jg IDX_OOB_79
jmp IDX_OK_78
IDX_OOB_79:
exit 1
IDX_OK_78:
mov rbx, 21
store 3, pieces, rbx, 8
cmp 22, 0
jl IDX_OOB_81
cmp 22, 111
jg IDX_OOB_81
jmp IDX_OK_80
IDX_OOB_81:
exit 1
IDX_OK_80:
mov rbx, 22
store 6, pieces, rbx, 8
cmp 23, 0
jl IDX_OOB_83
cmp 23, 111
jg IDX_OOB_83
jmp IDX_OK_82
IDX_OOB_83:
exit 1
IDX_OK_82:
mov rbx, 23
store 10, pieces, rbx, 8
cmp 24, 0
jl IDX_OOB_85
cmp 24, 111
jg IDX_OOB_85
jmp IDX_OK_84
IDX_OOB_85:
exit 1
IDX_OK_84:
mov rbx, 24
store 5, pieces, rbx, 8
cmp 25, 0
jl IDX_OOB_87
cmp 25, 111
jg IDX_OOB_87
jmp IDX_OK_86
IDX_OOB_87:
exit 1
IDX_OK_86:
mov rbx, 25
store 6, pieces, rbx, 8
cmp 26, 0
jl IDX_OOB_89
cmp 26, 111
jg IDX_OOB_89
jmp IDX_OK_88
IDX_OOB_89:
exit 1
IDX_OK_88:
mov rbx, 26
store 7, pieces, rbx, 8
cmp 27, 0
jl IDX_OOB_91
cmp 27, 111
jg IDX_OOB_91
jmp IDX_OK_90
IDX_OOB_91:
exit 1
IDX_OK_90:
mov rbx, 27
store 11, pieces, rbx, 8
cmp 28, 0
jl IDX_OOB_93
cmp 28, 111
jg IDX_OOB_93
jmp IDX_OK_92
IDX_OOB_93:
exit 1
IDX_OK_92:
mov rbx, 28
store 2, pieces, rbx, 8
cmp 29, 0
jl IDX_OOB_95
cmp 29, 111
jg IDX_OOB_95
jmp IDX_OK_94
IDX_OOB_95:
exit 1
IDX_OK_94:
mov rbx, 29
store 6, pieces, rbx, 8
cmp 30, 0
jl IDX_OOB_97
cmp 30, 111
jg IDX_OOB_97
jmp IDX_OK_96
IDX_OOB_97:
exit 1
IDX_OK_96:
mov rbx, 30
store 10, pieces, rbx, 8
cmp 31, 0
jl IDX_OOB_99
cmp 31, 111
jg IDX_OOB_99
jmp IDX_OK_98
IDX_OOB_99:
exit 1
IDX_OK_98:
mov rbx, 31
store 9, pieces, rbx, 8
cmp 32, 0
jl IDX_OOB_101
cmp 32, 111
jg IDX_OOB_101
jmp IDX_OK_100
IDX_OOB_101:
exit 1
IDX_OK_100:
mov rbx, 32
store 3, pieces, rbx, 8
cmp 33, 0
jl IDX_OOB_103
cmp 33, 111
jg IDX_OOB_103
jmp IDX_OK_102
IDX_OOB_103:
exit 1
IDX_OK_102:
mov rbx, 33
store 5, pieces, rbx, 8
cmp 34, 0
jl IDX_OOB_105
cmp 34, 111
jg IDX_OOB_105
jmp IDX_OK_104
IDX_OOB_105:
exit 1
IDX_OK_104:
mov rbx, 34
store 6, pieces, rbx, 8
cmp 35, 0
jl IDX_OOB_107
cmp 35, 111
jg IDX_OOB_107
jmp IDX_OK_106
IDX_OOB_107:
exit 1
IDX_OK_106:
mov rbx, 35
store 7, pieces, rbx, 8
cmp 36, 0
jl IDX_OOB_109
cmp 36, 111
jg IDX_OOB_109
jmp IDX_OK_108
IDX_OOB_109:
exit 1
IDX_OK_108:
mov rbx, 36
store 2, pieces, rbx, 8
cmp 37, 0
jl IDX_OOB_111
cmp 37, 111
jg IDX_OOB_111
jmp IDX_OK_110
IDX_OOB_111:
exit 1
IDX_OK_110:
mov rbx, 37
store 6, pieces, rbx, 8
cmp 38, 0
jl IDX_OOB_113
cmp 38, 111
jg IDX_OOB_113
jmp IDX_OK_112
IDX_OOB_113:
exit 1
IDX_OK_112:
mov rbx, 38
store 10, pieces, rbx, 8
cmp 39, 0
jl IDX_OOB_115
cmp 39, 111
jg IDX_OOB_115
jmp IDX_OK_114
IDX_OOB_115:
exit 1
IDX_OK_114:
mov rbx, 39
store 11, pieces, rbx, 8
cmp 40, 0
jl IDX_OOB_117
cmp 40, 111
jg IDX_OOB_117
jmp IDX_OK_116
IDX_OOB_117:
exit 1
IDX_OK_116:
mov rbx, 40
store 5, pieces, rbx, 8
cmp 41, 0
jl IDX_OOB_119
cmp 41, 111
jg IDX_OOB_119
jmp IDX_OK_118
IDX_OOB_119:
exit 1
IDX_OK_118:
mov rbx, 41
store 6, pieces, rbx, 8
cmp 42, 0
jl IDX_OOB_121
cmp 42, 111
jg IDX_OOB_121
jmp IDX_OK_120
IDX_OOB_121:
exit 1
IDX_OK_120:
mov rbx, 42
store 7, pieces, rbx, 8
cmp 43, 0
jl IDX_OOB_123
cmp 43, 111
jg IDX_OOB_123
jmp IDX_OK_122
IDX_OOB_123:
exit 1
IDX_OK_122:
mov rbx, 43
store 9, pieces, rbx, 8
cmp 44, 0
jl IDX_OOB_125
cmp 44, 111
jg IDX_OOB_125
jmp IDX_OK_124
IDX_OOB_125:
exit 1
IDX_OK_124:
mov rbx, 44
store 1, pieces, rbx, 8
cmp 45, 0
jl IDX_OOB_127
cmp 45, 111
jg IDX_OOB_127
jmp IDX_OK_126
IDX_OOB_127:
exit 1
IDX_OK_126:
mov rbx, 45
store 2, pieces, rbx, 8
cmp 46, 0
jl IDX_OOB_129
cmp 46, 111
jg IDX_OOB_129
jmp IDX_OK_128
IDX_OOB_129:
exit 1
IDX_OK_128:
mov rbx, 46
store 6, pieces, rbx, 8
cmp 47, 0
jl IDX_OOB_131
cmp 47, 111
jg IDX_OOB_131
jmp IDX_OK_130
IDX_OOB_131:
exit 1
IDX_OK_130:
mov rbx, 47
store 10, pieces, rbx, 8
cmp 48, 0
jl IDX_OOB_133
cmp 48, 111
jg IDX_OOB_133
jmp IDX_OK_132
IDX_OOB_133:
exit 1
IDX_OK_132:
mov rbx, 48
store 5, pieces, rbx, 8
cmp 49, 0
jl IDX_OOB_135
cmp 49, 111
jg IDX_OOB_135
jmp IDX_OK_134
IDX_OOB_135:
exit 1
IDX_OK_134:
mov rbx, 49
store 6, pieces, rbx, 8
cmp 50, 0
jl IDX_OOB_137
cmp 50, 111
jg IDX_OOB_137
jmp IDX_OK_136
IDX_OOB_137:
exit 1
IDX_OK_136:
mov rbx, 50
store 9, pieces, rbx, 8
cmp 51, 0
jl IDX_OOB_139
cmp 51, 111
jg IDX_OOB_139
jmp IDX_OK_138
IDX_OOB_139:
exit 1
IDX_OK_138:
mov rbx, 51
store 10, pieces, rbx, 8
cmp 52, 0
jl IDX_OOB_141
cmp 52, 111
jg IDX_OOB_141
jmp IDX_OK_140
IDX_OOB_141:
exit 1
IDX_OK_140:
mov rbx, 52
store 5, pieces, rbx, 8
cmp 53, 0
jl IDX_OOB_143
cmp 53, 111
jg IDX_OOB_143
jmp IDX_OK_142
IDX_OOB_143:
exit 1
IDX_OK_142:
mov rbx, 53
store 6, pieces, rbx, 8
cmp 54, 0
jl IDX_OOB_145
cmp 54, 111
jg IDX_OOB_145
jmp IDX_OK_144
IDX_OOB_145:
exit 1
IDX_OK_144:
mov rbx, 54
store 9, pieces, rbx, 8
cmp 55, 0
jl IDX_OOB_147
cmp 55, 111
jg IDX_OOB_147
jmp IDX_OK_146
IDX_OOB_147:
exit 1
IDX_OK_146:
mov rbx, 55
store 10, pieces, rbx, 8
cmp 56, 0
jl IDX_OOB_149
cmp 56, 111
jg IDX_OOB_149
jmp IDX_OK_148
IDX_OOB_149:
exit 1
IDX_OK_148:
mov rbx, 56
store 5, pieces, rbx, 8
cmp 57, 0
jl IDX_OOB_151
cmp 57, 111
jg IDX_OOB_151
jmp IDX_OK_150
IDX_OOB_151:
exit 1
IDX_OK_150:
mov rbx, 57
store 6, pieces, rbx, 8
cmp 58, 0
jl IDX_OOB_153
cmp 58, 111
jg IDX_OOB_153
jmp IDX_OK_152
IDX_OOB_153:
exit 1
IDX_OK_152:
mov rbx, 58
store 9, pieces, rbx, 8
cmp 59, 0
jl IDX_OOB_155
cmp 59, 111
jg IDX_OOB_155
jmp IDX_OK_154
IDX_OOB_155:
exit 1
IDX_OK_154:
mov rbx, 59
store 10, pieces, rbx, 8
cmp 60, 0
jl IDX_OOB_157
cmp 60, 111
jg IDX_OOB_157
jmp IDX_OK_156
IDX_OOB_157:
exit 1
IDX_OK_156:
mov rbx, 60
store 5, pieces, rbx, 8
cmp 61, 0
jl IDX_OOB_159
cmp 61, 111
jg IDX_OOB_159
jmp IDX_OK_158
IDX_OOB_159:
exit 1
IDX_OK_158:
mov rbx, 61
store 6, pieces, rbx, 8
cmp 62, 0
jl IDX_OOB_161
cmp 62, 111
jg IDX_OOB_161
jmp IDX_OK_160
IDX_OOB_161:
exit 1
IDX_OK_160:
mov rbx, 62
store 9, pieces, rbx, 8
cmp 63, 0
jl IDX_OOB_163
cmp 63, 111
jg IDX_OOB_163
jmp IDX_OK_162
IDX_OOB_163:
exit 1
IDX_OK_162:
mov rbx, 63
store 10, pieces, rbx, 8
cmp 64, 0
jl IDX_OOB_165
cmp 64, 111
jg IDX_OOB_165
jmp IDX_OK_164
IDX_OOB_165:
exit 1
IDX_OK_164:
mov rbx, 64
store 2, pieces, rbx, 8
cmp 65, 0
jl IDX_OOB_167
cmp 65, 111
jg IDX_OOB_167
jmp IDX_OK_166
IDX_OOB_167:
exit 1
IDX_OK_166:
mov rbx, 65
store 3, pieces, rbx, 8
cmp 66, 0
jl IDX_OOB_169
cmp 66, 111
jg IDX_OOB_169
jmp IDX_OK_168
IDX_OOB_169:
exit 1
IDX_OK_168:
mov rbx, 66
store 5, pieces, rbx, 8
cmp 67, 0
jl IDX_OOB_171
cmp 67, 111
jg IDX_OOB_171
jmp IDX_OK_170
IDX_OOB_171:
exit 1
IDX_OK_170:
mov rbx, 67
store 6, pieces, rbx, 8
cmp 68, 0
jl IDX_OOB_173
cmp 68, 111
jg IDX_OOB_173
jmp IDX_OK_172
IDX_OOB_173:
exit 1
IDX_OK_172:
mov rbx, 68
store 1, pieces, rbx, 8
cmp 69, 0
jl IDX_OOB_175
cmp 69, 111
jg IDX_OOB_175
jmp IDX_OK_174
IDX_OOB_175:
exit 1
IDX_OK_174:
mov rbx, 69
store 5, pieces, rbx, 8
cmp 70, 0
jl IDX_OOB_177
cmp 70, 111
jg IDX_OOB_177
jmp IDX_OK_176
IDX_OOB_177:
exit 1
IDX_OK_176:
mov rbx, 70
store 6, pieces, rbx, 8
cmp 71, 0
jl IDX_OOB_179
cmp 71, 111
jg IDX_OOB_179
jmp IDX_OK_178
IDX_OOB_179:
exit 1
IDX_OK_178:
mov rbx, 71
store 10, pieces, rbx, 8
cmp 72, 0
jl IDX_OOB_181
cmp 72, 111
jg IDX_OOB_181
jmp IDX_OK_180
IDX_OOB_181:
exit 1
IDX_OK_180:
mov rbx, 72
store 6, pieces, rbx, 8
cmp 73, 0
jl IDX_OOB_183
cmp 73, 111
jg IDX_OOB_183
jmp IDX_OK_182
IDX_OOB_183:
exit 1
IDX_OK_182:
mov rbx, 73
store 7, pieces, rbx, 8
cmp 74, 0
jl IDX_OOB_185
cmp 74, 111
jg IDX_OOB_185
jmp IDX_OK_184
IDX_OOB_185:
exit 1
IDX_OK_184:
mov rbx, 74
store 9, pieces, rbx, 8
cmp 75, 0
jl IDX_OOB_187
cmp 75, 111
jg IDX_OOB_187
jmp IDX_OK_186
IDX_OOB_187:
exit 1
IDX_OK_186:
mov rbx, 75
store 10, pieces, rbx, 8
cmp 76, 0
jl IDX_OOB_189
cmp 76, 111
jg IDX_OOB_189
jmp IDX_OK_188
IDX_OOB_189:
exit 1
IDX_OK_188:
mov rbx, 76
store 2, pieces, rbx, 8
cmp 77, 0
jl IDX_OOB_191
cmp 77, 111
jg IDX_OOB_191
jmp IDX_OK_190
IDX_OOB_191:
exit 1
IDX_OK_190:
mov rbx, 77
store 6, pieces, rbx, 8
cmp 78, 0
jl IDX_OOB_193
cmp 78, 111
jg IDX_OOB_193
jmp IDX_OK_192
IDX_OOB_193:
exit 1
IDX_OK_192:
mov rbx, 78
store 7, pieces, rbx, 8
cmp 79, 0
jl IDX_OOB_195
cmp 79, 111
jg IDX_OOB_195
jmp IDX_OK_194
IDX_OOB_195:
exit 1
IDX_OK_194:
mov rbx, 79
store 11, pieces, rbx, 8
cmp 80, 0
jl IDX_OOB_197
cmp 80, 111
jg IDX_OOB_197
jmp IDX_OK_196
IDX_OOB_197:
exit 1
IDX_OK_196:
mov rbx, 80
store 2, pieces, rbx, 8
cmp 81, 0
jl IDX_OOB_199
cmp 81, 111
jg IDX_OOB_199
jmp IDX_OK_198
IDX_OOB_199:
exit 1
IDX_OK_198:
mov rbx, 81
store 5, pieces, rbx, 8
cmp 82, 0
jl IDX_OOB_201
cmp 82, 111
jg IDX_OOB_201
jmp IDX_OK_200
IDX_OOB_201:
exit 1
IDX_OK_200:
mov rbx, 82
store 6, pieces, rbx, 8
cmp 83, 0
jl IDX_OOB_203
cmp 83, 111
jg IDX_OOB_203
jmp IDX_OK_202
IDX_OOB_203:
exit 1
IDX_OK_202:
mov rbx, 83
store 7, pieces, rbx, 8
cmp 84, 0
jl IDX_OOB_205
cmp 84, 111
jg IDX_OOB_205
jmp IDX_OK_204
IDX_OOB_205:
exit 1
IDX_OK_204:
mov rbx, 84
store 2, pieces, rbx, 8
cmp 85, 0
jl IDX_OOB_207
cmp 85, 111
jg IDX_OOB_207
jmp IDX_OK_206
IDX_OOB_207:
exit 1
IDX_OK_206:
mov rbx, 85
store 6, pieces, rbx, 8
cmp 86, 0
jl IDX_OOB_209
cmp 86, 111
jg IDX_OOB_209
jmp IDX_OK_208
IDX_OOB_209:
exit 1
IDX_OK_208:
mov rbx, 86
store 7, pieces, rbx, 8
cmp 87, 0
jl IDX_OOB_211
cmp 87, 111
jg IDX_OOB_211
jmp IDX_OK_210
IDX_OOB_211:
exit 1
IDX_OK_210:
mov rbx, 87
store 10, pieces, rbx, 8
cmp 88, 0
jl IDX_OOB_213
cmp 88, 111
jg IDX_OOB_213
jmp IDX_OK_212
IDX_OOB_213:
exit 1
IDX_OK_212:
mov rbx, 88
store 5, pieces, rbx, 8
cmp 89, 0
jl IDX_OOB_215
cmp 89, 111
jg IDX_OOB_215
jmp IDX_OK_214
IDX_OOB_215:
exit 1
IDX_OK_214:
mov rbx, 89
store 6, pieces, rbx, 8
cmp 90, 0
jl IDX_OOB_217
cmp 90, 111
jg IDX_OOB_217
jmp IDX_OK_216
IDX_OOB_217:
exit 1
IDX_OK_216:
mov rbx, 90
store 7, pieces, rbx, 8
cmp 91, 0
jl IDX_OOB_219
cmp 91, 111
jg IDX_OOB_219
jmp IDX_OK_218
IDX_OOB_219:
exit 1
IDX_OK_218:
mov rbx, 91
store 10, pieces, rbx, 8
cmp 92, 0
jl IDX_OOB_221
cmp 92, 111
jg IDX_OOB_221
jmp IDX_OK_220
IDX_OOB_221:
exit 1
IDX_OK_220:
mov rbx, 92
store 2, pieces, rbx, 8
cmp 93, 0
jl IDX_OOB_223
cmp 93, 111
jg IDX_OOB_223
jmp IDX_OK_222
IDX_OOB_223:
exit 1
IDX_OK_222:
mov rbx, 93
store 5, pieces, rbx, 8
cmp 94, 0
jl IDX_OOB_225
cmp 94, 111
jg IDX_OOB_225
jmp IDX_OK_224
IDX_OOB_225:
exit 1
IDX_OK_224:
mov rbx, 94
store 6, pieces, rbx, 8
cmp 95, 0
jl IDX_OOB_227
cmp 95, 111
jg IDX_OOB_227
jmp IDX_OK_226
IDX_OOB_227:
exit 1
IDX_OK_226:
mov rbx, 95
store 10, pieces, rbx, 8
cmp 96, 0
jl IDX_OOB_229
cmp 96, 111
jg IDX_OOB_229
jmp IDX_OK_228
IDX_OOB_229:
exit 1
IDX_OK_228:
mov rbx, 96
store 1, pieces, rbx, 8
cmp 97, 0
jl IDX_OOB_231
cmp 97, 111
jg IDX_OOB_231
jmp IDX_OK_230
IDX_OOB_231:
exit 1
IDX_OK_230:
mov rbx, 97
store 2, pieces, rbx, 8
cmp 98, 0
jl IDX_OOB_233
cmp 98, 111
jg IDX_OOB_233
jmp IDX_OK_232
IDX_OOB_233:
exit 1
IDX_OK_232:
mov rbx, 98
store 6, pieces, rbx, 8
cmp 99, 0
jl IDX_OOB_235
cmp 99, 111
jg IDX_OOB_235
jmp IDX_OK_234
IDX_OOB_235:
exit 1
IDX_OK_234:
mov rbx, 99
store 7, pieces, rbx, 8
cmp 100, 0
jl IDX_OOB_237
cmp 100, 111
jg IDX_OOB_237
jmp IDX_OK_236
IDX_OOB_237:
exit 1
IDX_OK_236:
mov rbx, 100
store 3, pieces, rbx, 8
cmp 101, 0
jl IDX_OOB_239
cmp 101, 111
jg IDX_OOB_239
jmp IDX_OK_238
IDX_OOB_239:
exit 1
IDX_OK_238:
mov rbx, 101
store 6, pieces, rbx, 8
cmp 102, 0
jl IDX_OOB_241
cmp 102, 111
jg IDX_OOB_241
jmp IDX_OK_240
IDX_OOB_241:
exit 1
IDX_OK_240:
mov rbx, 102
store 7, pieces, rbx, 8
cmp 103, 0
jl IDX_OOB_243
cmp 103, 111
jg IDX_OOB_243
jmp IDX_OK_242
IDX_OOB_243:
exit 1
IDX_OK_242:
mov rbx, 103
store 10, pieces, rbx, 8
cmp 104, 0
jl IDX_OOB_245
cmp 104, 111
jg IDX_OOB_245
jmp IDX_OK_244
IDX_OOB_245:
exit 1
IDX_OK_244:
mov rbx, 104
store 5, pieces, rbx, 8
cmp 105, 0
jl IDX_OOB_247
cmp 105, 111
jg IDX_OOB_247
jmp IDX_OK_246
IDX_OOB_247:
exit 1
IDX_OK_246:
mov rbx, 105
store 6, pieces, rbx, 8
cmp 106, 0
jl IDX_OOB_249
cmp 106, 111
jg IDX_OOB_249
jmp IDX_OK_248
IDX_OOB_249:
exit 1
IDX_OK_248:
mov rbx, 106
store 10, pieces, rbx, 8
cmp 107, 0
jl IDX_OOB_251
cmp 107, 111
jg IDX_OOB_251
jmp IDX_OK_250
IDX_OOB_251:
exit 1
IDX_OK_250:
mov rbx, 107
store 11, pieces, rbx, 8
cmp 108, 0
jl IDX_OOB_253
cmp 108, 111
jg IDX_OOB_253
jmp IDX_OK_252
IDX_OOB_253:
exit 1
IDX_OK_252:
mov rbx, 108
store 2, pieces, rbx, 8
cmp 109, 0
jl IDX_OOB_255
cmp 109, 111
jg IDX_OOB_255
jmp IDX_OK_254
IDX_OOB_255:
exit 1
IDX_OK_254:
mov rbx, 109
store 5, pieces, rbx, 8
cmp 110, 0
jl IDX_OOB_257
cmp 110, 111
jg IDX_OOB_257
jmp IDX_OK_256
IDX_OOB_257:
exit 1
IDX_OK_256:
mov rbx, 110
store 6, pieces, rbx, 8
cmp 111, 0
jl IDX_OOB_259
cmp 111, 111
jg IDX_OOB_259
jmp IDX_OK_258
IDX_OOB_259:
exit 1
IDX_OK_258:
mov rbx, 111
store 9, pieces, rbx, 8
PROC_END_InitPieces:
ret
function PROC_AllocClearBoard:
mov AllocClearBoard_ci, 0
FOR_260:
cmp AllocClearBoard_ci, 199
jg ENDFOR_261
cmp AllocClearBoard_ci, 0
jl IDX_OOB_264
cmp AllocClearBoard_ci, 199
jg IDX_OOB_264
jmp IDX_OK_263
IDX_OOB_264:
exit 1
IDX_OK_263:
mov rbx, AllocClearBoard_ci
store 0, board, rbx, 8
FOR_CONTINUE_262:
add AllocClearBoard_ci, 1
jmp FOR_260
ENDFOR_261:
PROC_END_AllocClearBoard:
ret
function PROC_LockPiece:
mov LockPiece_li, 0
FOR_265:
cmp LockPiece_li, 3
jg ENDFOR_266
mov rbx, piece_id
mul rbx, 16
mov rcx, rotation
mul rcx, 4
mov LockPiece_lidx, rbx
add LockPiece_lidx, rcx
add LockPiece_lidx, LockPiece_li
mov rdi, LockPiece_lidx
load r8, pieces, rdi, 8
mov LockPiece_lv, r8
mov LockPiece_lpy, LockPiece_lv
div LockPiece_lpy, 4
mov r9, LockPiece_lv
mod r9, 4
mov LockPiece_lpx, r9
mov r9, piece_x
add r9, LockPiece_lpx
mov LockPiece_lx, r9
mov r9, piece_y
add r9, LockPiece_lpy
mov LockPiece_ly, r9
cmp LockPiece_ly, 0
jl ELSE_268
cmp LockPiece_ly, 20
jge ELSE_268
mov r9, LockPiece_ly
mul r9, 10
add r9, LockPiece_lx
mov LockPiece_lbi, r9
mov r9, piece_id
add r9, 1
cmp LockPiece_lbi, 0
jl IDX_OOB_277
cmp LockPiece_lbi, 199
jg IDX_OOB_277
jmp IDX_OK_276
IDX_OOB_277:
exit 1
IDX_OK_276:
mov r10, LockPiece_lbi
store r9, board, r10, 8
ELSE_268:
FOR_CONTINUE_267:
add LockPiece_li, 1
jmp FOR_265
ENDFOR_266:
PROC_END_LockPiece:
ret
function PROC_ClearLines:
mov ClearLines_cy, 19
WHILE_278:
cmp ClearLines_cy, 0
jl ENDWHILE_279
mov ClearLines_is_full, 1
mov ClearLines_cx, 0
FOR_282:
cmp ClearLines_cx, 9
jg ENDFOR_283
mov ClearLines_cidx2, ClearLines_cy
mul ClearLines_cidx2, 10
add ClearLines_cidx2, ClearLines_cx
mov rsi, ClearLines_cidx2
load rdi, board, rsi, 8
cmp rdi, 0
jne ELSE_285
mov ClearLines_is_full, 0
ELSE_285:
FOR_CONTINUE_284:
add ClearLines_cx, 1
jmp FOR_282
ENDFOR_283:
cmp ClearLines_is_full, 1
jne ELSE_289
mov r9, score
add r9, 10
mov score, r9
mov ClearLines_cj, ClearLines_cy
WHILE_293:
cmp ClearLines_cj, 0
jle ENDWHILE_294
mov ClearLines_cx, 0
FOR_297:
cmp ClearLines_cx, 9
jg ENDFOR_298
mov r9, ClearLines_cj
sub r9, 1
mul r9, 10
add r9, ClearLines_cx
mov ClearLines_cbi2, r9
load r10, board, r9, 8
mov ClearLines_cv2, r10
mov r9, ClearLines_cj
mul r9, 10
add r9, ClearLines_cx
mov ClearLines_cbi, r9
cmp ClearLines_cbi, 0
jl IDX_OOB_301
cmp ClearLines_cbi, 199
jg IDX_OOB_301
jmp IDX_OK_300
IDX_OOB_301:
exit 1
IDX_OK_300:
mov r9, ClearLines_cbi
store ClearLines_cv2, board, r9, 8
FOR_CONTINUE_299:
add ClearLines_cx, 1
jmp FOR_297
ENDFOR_298:
mov r9, ClearLines_cj
sub r9, 1
mov ClearLines_cj, r9
jmp WHILE_293
ENDWHILE_294:
mov ClearLines_cx, 0
FOR_302:
cmp ClearLines_cx, 9
jg ENDFOR_303
cmp ClearLines_cx, 0
jl IDX_OOB_306
cmp ClearLines_cx, 199
jg IDX_OOB_306
jmp IDX_OK_305
IDX_OOB_306:
exit 1
IDX_OK_305:
mov r9, ClearLines_cx
store 0, board, r9, 8
FOR_CONTINUE_304:
add ClearLines_cx, 1
jmp FOR_302
ENDFOR_303:
add ClearLines_cy, 1
ELSE_289:
sub ClearLines_cy, 1
jmp WHILE_278
ENDWHILE_279:
PROC_END_ClearLines:
ret
function PROC_DrawCell:
mov DrawCell_dx, rbx
mov DrawCell_dy, rcx
mov DrawCell_color, rdx
mov DrawCell_dm, DrawCell_color
mul DrawCell_dm, 35
mov DrawCell_dr, DrawCell_dm
mov DrawCell_dg, 255
sub DrawCell_dg, DrawCell_dm
mov DrawCell_db, 128
add DrawCell_db, DrawCell_dm
mov DrawCell_dtx, DrawCell_dx
mul DrawCell_dtx, 40
mov DrawCell_dty, DrawCell_dy
mul DrawCell_dty, 40
mov DrawCell_dts, 39
mov r8, 255
invoke set_draw_color, renderer_id, DrawCell_dr, DrawCell_dg, DrawCell_db, r8
invoke fill_rect, renderer_id, DrawCell_dtx, DrawCell_dty, DrawCell_dts, DrawCell_dts
PROC_END_DrawCell:
ret
function PROC_DrawEmpty:
mov DrawEmpty_dx, rbx
mov DrawEmpty_dy, rcx
mov DrawEmpty_dtx, DrawEmpty_dx
mul DrawEmpty_dtx, 40
mov DrawEmpty_dty, DrawEmpty_dy
mul DrawEmpty_dty, 40
mov DrawEmpty_dts, 39
mov rdx, 30
mov rsi, 30
mov rdi, 30
mov r8, 255
invoke set_draw_color, renderer_id, rdx, rsi, rdi, r8
invoke fill_rect, renderer_id, DrawEmpty_dtx, DrawEmpty_dty, DrawEmpty_dts, DrawEmpty_dts
PROC_END_DrawEmpty:
ret
function PROC_SpawnPiece:
invoke rand
return rbx
mov rcx, rbx
mod rcx, 7
mov piece_id, rcx
cmp piece_id, 0
jge ELSE_307
mov rsi, piece_id
add rsi, 7
mov piece_id, rsi
ELSE_307:
mov rotation, 0
mov piece_x, 3
mov piece_y, 0
push rbx
push rcx
push rdx
push rsi
mov rbx, piece_x
mov rcx, piece_y
call FUNC_CheckCollision
pop rsi
pop rdx
pop rcx
pop rbx
mov rdi, rax
mov col_result, rdi
cmp col_result, 1
jne ELSE_311
mov game_over, 1
ELSE_311:
PROC_END_SpawnPiece:
ret
function PROC_MoveDown:
mov rbx, piece_y
add rbx, 1
mov rcx, rbx
push rbx
mov rbx, piece_x
call FUNC_CheckCollision
pop rbx
mov rdx, rax
mov col_result, rdx
cmp col_result, 0
je ELSE_315
push rbx
push rcx
push rdx
push rsi
call PROC_LockPiece
pop rsi
pop rdx
pop rcx
pop rbx
push rbx
push rcx
push rdx
push rsi
call PROC_ClearLines
pop rsi
pop rdx
pop rcx
pop rbx
push rbx
push rcx
push rdx
push rsi
call PROC_SpawnPiece
pop rsi
pop rdx
pop rcx
pop rbx
jmp ENDIF_316
ELSE_315:
add piece_y, 1
ENDIF_316:
PROC_END_MoveDown:
ret
function PROC_Render:
cmp show_start, 1
jne ELSE_319
mov rcx, 0
mov rdx, 0
mov rsi, 0
mov rdi, 255
invoke set_draw_color, renderer_id, rcx, rdx, rsi, rdi
invoke clear, renderer_id
mov rcx, 0
mov rdx, 0
mov rsi, 400
mov rdi, 800
mov r8, 0
mov r9, 0
mov r10, 400
mov r11, 800
invoke render_texture, renderer_id, start_texture, rcx, rdx, rsi, rdi, r8, r9, r10, r11
invoke present, renderer_id
jmp PROC_END_Render
ELSE_319:
mov rcx, 0
mov rdx, 0
mov rsi, 0
mov rdi, 255
invoke set_draw_color, renderer_id, rcx, rdx, rsi, rdi
invoke clear, renderer_id
mov rcx, 0
mov rdx, 0
mov rsi, 400
mov rdi, 800
invoke fill_rect, renderer_id, rcx, rdx, rsi, rdi
invoke inttostr, score
return _tmpptr0
invoke strlen, str_5
return rcx
invoke strlen, _tmpptr0
return rdx
mov rsi, rcx
add rsi, rdx
add rsi, 1
alloc _tmpptr1, 1, rsi
invoke strncpy, _tmpptr1, str_5, rcx
invoke strncat, _tmpptr1, _tmpptr0, rdx
mov score_text, _tmpptr1
free _tmpptr0
mov Render_ry, 0
FOR_323:
cmp Render_ry, 19
jg ENDFOR_324
mov Render_rx, 0
FOR_326:
cmp Render_rx, 9
jg ENDFOR_327
mov rcx, Render_ry
mul rcx, 10
mov rdx, rcx
add rdx, Render_rx
mov Render_ridx, rdx
mov rsi, Render_ridx
load rdi, board, rsi, 8
mov Render_rv, rdi
cmp Render_rv, 0
jne ELSE_329
push rbx
push rcx
push rdx
push rsi
push rdi
mov rbx, Render_rx
mov rcx, Render_ry
push Render_ri
push Render_ridx
push Render_rv
push Render_rpx
push Render_rpy
push Render_rx
push Render_ry
call PROC_DrawEmpty
pop Render_ry
pop Render_rx
pop Render_rpy
pop Render_rpx
pop Render_rv
pop Render_ridx
pop Render_ri
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
jmp ENDIF_330
ELSE_329:
push rbx
push rcx
push rdx
push rsi
push rdi
mov rbx, Render_rx
mov rcx, Render_ry
mov rdx, Render_rv
push Render_ri
push Render_ridx
push Render_rv
push Render_rpx
push Render_rpy
push Render_rx
push Render_ry
call PROC_DrawCell
pop Render_ry
pop Render_rx
pop Render_rpy
pop Render_rpx
pop Render_rv
pop Render_ridx
pop Render_ri
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
ENDIF_330:
FOR_CONTINUE_328:
add Render_rx, 1
jmp FOR_326
ENDFOR_327:
FOR_CONTINUE_325:
add Render_ry, 1
jmp FOR_323
ENDFOR_324:
mov Render_ri, 0
FOR_333:
cmp Render_ri, 3
jg ENDFOR_334
mov r8, piece_id
mul r8, 16
mov r9, rotation
mul r9, 4
mov r10, r8
add r10, r9
add r10, Render_ri
mov Render_ridx, r10
mov r9, Render_ridx
load r10, pieces, r9, 8
mov Render_rv, r10
mov r9, Render_rv
div r9, 4
mov Render_rpy, r9
mov r9, Render_rv
mod r9, 4
mov Render_rpx, r9
mov r9, piece_x
add r9, Render_rpx
mov Render_rx, r9
mov r9, piece_y
add r9, Render_rpy
mov Render_ry, r9
cmp Render_ry, 0
jl ELSE_336
mov r9, piece_id
add r9, 1
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, Render_rx
mov rcx, Render_ry
mov rdx, r9
push Render_ri
push Render_ridx
push Render_rv
push Render_rpx
push Render_rpy
push Render_rx
push Render_ry
call PROC_DrawCell
pop Render_ry
pop Render_rx
pop Render_rpy
pop Render_rpx
pop Render_rv
pop Render_ridx
pop Render_ri
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
ELSE_336:
FOR_CONTINUE_335:
add Render_ri, 1
jmp FOR_333
ENDFOR_334:
mov r9, 15
mov r10, 15
mov r11, 255
mov r12, 255
mov r13, 255
mov r14, 255
invoke draw_text, renderer_id, font_id, score_text, r9, r10, r11, r12, r13, r14
invoke present, renderer_id
PROC_END_Render:
ret
function PROC_GameReset:
mov score, 0
mov game_over, 0
mov piece_x, 3
mov piece_y, 0
mov rotation, 0
invoke get_ticks
return rbx
mov last_drop, rbx
push rbx
call PROC_AllocClearBoard
pop rbx
push rbx
call PROC_SpawnPiece
pop rbx
PROC_END_GameReset:
ret
function PROC_HandleInput:
invoke poll_event
return rbx
mov ev, rbx
WHILE_340:
cmp ev, 0
je ENDWHILE_341
invoke get_event_type
return rdx
mov HandleInput_ev_type, rdx
cmp HandleInput_ev_type, 256
jne ELSE_344
mov running, 0
jmp PROC_END_HandleInput
ELSE_344:
cmp HandleInput_ev_type, 768
jne ELSE_348
invoke get_key_code
return r8
mov HandleInput_kc, r8
cmp HandleInput_kc, 27
jne ELSE_352
cmp show_start, 1
jne ELSE_356
mov running, 0
jmp PROC_END_HandleInput
jmp ENDIF_357
ELSE_356:
mov show_start, 1
ENDIF_357:
jmp ENDIF_353
ELSE_352:
cmp show_start, 1
jne ELSE_360
cmp HandleInput_kc, 13
jne ELSE_364
mov show_start, 0
ELSE_364:
jmp ENDIF_361
ELSE_360:
cmp HandleInput_kc, 1073741904
jne ELSE_368
mov r9, piece_x
sub r9, 1
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, piece_y
push HandleInput_ev_type
push HandleInput_kc
push HandleInput_old_rot
call FUNC_CheckCollision
pop HandleInput_old_rot
pop HandleInput_kc
pop HandleInput_ev_type
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r10, rax
mov col_result, r10
cmp col_result, 0
jne ELSE_372
mov r9, piece_x
sub r9, 1
mov piece_x, r9
ELSE_372:
jmp ENDIF_369
ELSE_368:
cmp HandleInput_kc, 1073741903
jne ELSE_376
mov r9, piece_x
add r9, 1
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, r9
mov rcx, piece_y
push HandleInput_ev_type
push HandleInput_kc
push HandleInput_old_rot
call FUNC_CheckCollision
pop HandleInput_old_rot
pop HandleInput_kc
pop HandleInput_ev_type
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r10, rax
mov col_result, r10
cmp col_result, 0
jne ELSE_380
mov r9, piece_x
add r9, 1
mov piece_x, r9
ELSE_380:
jmp ENDIF_377
ELSE_376:
cmp HandleInput_kc, 1073741905
jne ELSE_384
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
push HandleInput_ev_type
push HandleInput_kc
push HandleInput_old_rot
call PROC_MoveDown
pop HandleInput_old_rot
pop HandleInput_kc
pop HandleInput_ev_type
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
jmp ENDIF_385
ELSE_384:
cmp HandleInput_kc, 1073741906
jne ELSE_388
mov HandleInput_old_rot, rotation
mov r9, rotation
add r9, 1
mod r9, 4
mov rotation, r9
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, piece_x
mov rcx, piece_y
push HandleInput_ev_type
push HandleInput_kc
push HandleInput_old_rot
call FUNC_CheckCollision
pop HandleInput_old_rot
pop HandleInput_kc
pop HandleInput_ev_type
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, rax
mov col_result, r9
cmp col_result, 0
je ELSE_392
mov rotation, HandleInput_old_rot
ELSE_392:
ELSE_388:
ENDIF_385:
ENDIF_377:
ENDIF_369:
ENDIF_361:
ENDIF_353:
ELSE_348:
invoke poll_event
return r9
mov ev, r9
jmp WHILE_340
ENDWHILE_341:
PROC_END_HandleInput:
ret
function FUNC_CheckCollision:
mov CheckCollision_cx, rbx
mov CheckCollision_cy, rcx
mov CheckCollision_ci, 0
FOR_396:
cmp CheckCollision_ci, 3
jg ENDFOR_397
mov rbx, piece_id
mul rbx, 16
mov rcx, rotation
mul rcx, 4
mov CheckCollision_cidx, rbx
add CheckCollision_cidx, rcx
add CheckCollision_cidx, CheckCollision_ci
mov rdi, CheckCollision_cidx
load r8, pieces, rdi, 8
mov CheckCollision_cv, r8
mov CheckCollision_cpy, CheckCollision_cv
div CheckCollision_cpy, 4
mov r9, CheckCollision_cv
mod r9, 4
mov CheckCollision_cpx, r9
mov r9, CheckCollision_cx
add r9, CheckCollision_cpx
mov CheckCollision_ccx, r9
mov r9, CheckCollision_cy
add r9, CheckCollision_cpy
mov CheckCollision_ccy, r9
cmp CheckCollision_ccx, 0
jge ELSE_399
mov __funcret_CheckCollision, 1
jmp FUNC_END_CheckCollision
ELSE_399:
cmp CheckCollision_ccx, 10
jl ELSE_403
mov __funcret_CheckCollision, 1
jmp FUNC_END_CheckCollision
ELSE_403:
cmp CheckCollision_ccy, 20
jl ELSE_407
mov __funcret_CheckCollision, 1
jmp FUNC_END_CheckCollision
ELSE_407:
cmp CheckCollision_ccy, 0
jl ELSE_411
mov r9, CheckCollision_ccy
mul r9, 10
add r9, CheckCollision_ccx
mov CheckCollision_bidx, r9
load r10, board, r9, 8
cmp r10, 0
je ELSE_415
mov __funcret_CheckCollision, 1
jmp FUNC_END_CheckCollision
ELSE_415:
ELSE_411:
FOR_CONTINUE_398:
add CheckCollision_ci, 1
jmp FOR_396
ENDFOR_397:
mov __funcret_CheckCollision, 0
FUNC_END_CheckCollision:
mov rax, __funcret_CheckCollision
ret
}
}