program PuzzleDrop {
section object {
BlockTypes, PieceUnit, GridUnit
}
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
int r15 = 0
int _ir0 = 0
int _ir1 = 0
ptr _tmpptr0 = null
ptr _tmpptr1 = null
ptr _tmpptr10 = null
ptr _tmpptr11 = null
ptr _tmpptr12 = null
ptr _tmpptr13 = null
ptr _tmpptr14 = null
ptr _tmpptr15 = null
ptr _tmpptr16 = null
ptr _tmpptr17 = null
ptr _tmpptr2 = null
ptr _tmpptr3 = null
ptr _tmpptr4 = null
ptr _tmpptr5 = null
ptr _tmpptr6 = null
ptr _tmpptr7 = null
ptr _tmpptr8 = null
ptr _tmpptr9 = null
string str_0 = "font.ttf"
string str_1 = "img/red1.bmp"
string str_2 = "img/red2.bmp"
string str_3 = "img/red3.bmp"
string str_4 = "img/green1.bmp"
string str_5 = "img/green2.bmp"
string str_6 = "img/green3.bmp"
string str_7 = "img/blue1.bmp"
string str_8 = "img/blue2.bmp"
string str_9 = "img/blue3.bmp"
string str_10 = "Failed to load block texture "
string str_11 = "img/level1.bmp"
string str_12 = "img/level2.bmp"
string str_13 = "img/level3.bmp"
string str_14 = "img/level4.bmp"
string str_15 = "img/level5.bmp"
string str_16 = "img/level6.bmp"
string str_17 = "img/level7.bmp"
string str_18 = "img/level8.bmp"
string str_19 = "Failed to load background texture "
string str_20 = "Puzzle Drop"
string str_21 = "Press N to Start"
string str_22 = "Level: "
string str_23 = " Lines: "
string str_24 = "GAME OVER"
string str_25 = "Press N for New Game"
string str_26 = "Failed to init SDL"
string str_27 = "PuzzleDrop"
string str_28 = "Could not create window"
string str_29 = "Could not create renderer"
string str_30 = "Font subsystem failed to load"
string str_31 = "Failed to load font: "
string str_32 = "img/logo.bmp"
string str_33 = "Failed to load logo texture"
string fmt_int = "%lld "
string fmt_str = "%s "
string newline = "\n"
ptr FONT_FILE = null
int window_id = 0
int renderer = 0
int font_id = 0
int logo_tex = 0
int running = 0
int game_started = 0
int event_type_result = 0
int key_code = 0
ptr block_tex = null
ptr bg_tex = null
int last_drop_tick = 0
int last_proc_tick = 0
int last_render_tick = 0
int last_key_tick = 0
int cur_tick = 0
int drop_speed = 0
int LoadTextures_i = 0
int DestroyTextures_i = 0
int Render_x = 0
int Render_y = 0
int Render_idx = 0
int Render_btype = 0
int Render_image = 0
int Render_flash_phase = 0
int Render_b1 = 0
int Render_b2 = 0
int Render_b3 = 0
int HandleKey_k = 0
int Init_result = 0
int __funcret_Init = 0
}
section code {
start:
call BlockTypes.PROC_UNIT_INIT
call PieceUnit.PROC_UNIT_INIT
call GridUnit.PROC_UNIT_INIT
mov FONT_FILE, str_0
alloc block_tex, 8, 9
alloc bg_tex, 8, 8
call PROC_Init
invoke get_ticks
return rbx
mov cur_tick, rbx
mov last_render_tick, cur_tick
WHILE_0:
invoke get_ticks
return rcx
mov rdx, rcx
sub rdx, cur_tick
cmp rdx, 2500
jge ENDWHILE_1
WHILE_4:
invoke poll_event
return rdi
cmp rdi, 0
je ENDWHILE_5
invoke get_event_type
return r9
mov event_type_result, r9
cmp event_type_result, 256
jne ELSE_8
mov running, 0
invoke get_ticks
return r9
sub r9, 2500
mov cur_tick, r9
ELSE_8:
cmp event_type_result, 768
jne ELSE_12
invoke get_key_code
return r9
mov key_code, r9
cmp key_code, 27
jne ELSE_16
mov running, 0
invoke get_ticks
return r9
sub r9, 2500
mov cur_tick, r9
ELSE_16:
ELSE_12:
jmp WHILE_4
ENDWHILE_5:
mov r9, 0
mov r10, 0
mov r11, 0
mov r12, 255
invoke set_draw_color, renderer, r9, r10, r11, r12
invoke clear, renderer
mov r9, 0
sub r9, 1
mov r10, 0
sub r10, 1
mov r11, 0
sub r11, 1
mov r12, 0
sub r12, 1
mov r13, 0
mov r14, 0
mov r15, 1280
mov _ir0, 720
invoke render_texture, renderer, logo_tex, r9, r10, r11, r12, r13, r14, r15, _ir0
invoke present, renderer
mov r9, 33
invoke delay, r9
jmp WHILE_0
ENDWHILE_1:
WHILE_20:
cmp running, 1
jne ENDWHILE_21
mov key_code, 0
WHILE_24:
invoke poll_event
return r9
cmp r9, 0
je ENDWHILE_25
invoke get_event_type
return r9
mov event_type_result, r9
cmp event_type_result, 256
jne ELSE_28
mov running, 0
ELSE_28:
cmp event_type_result, 768
jne ELSE_32
invoke get_key_code
return r9
mov key_code, r9
cmp key_code, 27
jne ELSE_36
mov running, 0
ELSE_36:
ELSE_32:
jmp WHILE_24
ENDWHILE_25:
cmp key_code, 0
je ELSE_40
cmp key_code, 27
je ELSE_40
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
mov rbx, key_code
call PROC_HandleKey
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
ELSE_40:
invoke get_ticks
return r9
mov cur_tick, r9
cmp game_started, 1
jne ELSE_48
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
push r9
call GridUnit.FUNC_IsGameOver
pop r9
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r10, GridUnit.rax
cmp r10, 0
jne ELSE_48
mov r9, cur_tick
sub r9, last_key_tick
cmp r9, 100
jl ELSE_56
mov r10, 80
invoke is_key_pressed, r10
return r9
cmp r9, 0
je ELSE_60
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
call GridUnit.PROC_GridKeyLeft
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov last_key_tick, cur_tick
jmp ENDIF_61
ELSE_60:
mov r10, 79
invoke is_key_pressed, r10
return r9
cmp r9, 0
je ELSE_64
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
call GridUnit.PROC_GridKeyRight
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov last_key_tick, cur_tick
jmp ENDIF_65
ELSE_64:
mov r10, 81
invoke is_key_pressed, r10
return r9
cmp r9, 0
je ELSE_68
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
call GridUnit.PROC_GridKeyDown
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov last_key_tick, cur_tick
jmp ENDIF_69
ELSE_68:
mov r10, 29
invoke is_key_pressed, r10
return r9
cmp r9, 0
je ELSE_72
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
call GridUnit.PROC_GridKeyRotateLeft
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov last_key_tick, cur_tick
jmp ENDIF_73
ELSE_72:
mov r10, 27
invoke is_key_pressed, r10
return r9
cmp r9, 0
je ELSE_76
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
call GridUnit.PROC_GridKeyRotateRight
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov last_key_tick, cur_tick
ELSE_76:
ENDIF_73:
ENDIF_69:
ENDIF_65:
ENDIF_61:
ELSE_56:
ELSE_48:
cmp game_started, 1
jne ELSE_80
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
push r9
call GridUnit.FUNC_IsGameOver
pop r9
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
cmp GridUnit.rax, 0
jne ELSE_80
mov r9, cur_tick
sub r9, last_drop_tick
cmp r9, drop_speed
jl ELSE_88
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
call GridUnit.PROC_GridKeyDown
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov last_drop_tick, cur_tick
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
call GridUnit.FUNC_IsGameOver
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, GridUnit.rax
cmp r9, 1
jne ELSE_92
mov game_started, 0
ELSE_92:
ELSE_88:
mov r9, cur_tick
sub r9, last_proc_tick
cmp r9, 2
jl ELSE_96
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
call GridUnit.FUNC_ProcBlocks
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 GridUnit.FUNC_ProcMoveDown
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov last_proc_tick, cur_tick
ELSE_96:
ELSE_80:
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
invoke present, renderer
mov last_render_tick, cur_tick
mov r9, 16
invoke delay, r9
jmp WHILE_20
ENDWHILE_21:
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
call PROC_Cleanup
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
free block_tex
free bg_tex
done
function PROC_LoadTextures:
invoke load_texture, renderer, str_1
return rbx
cmp 0, 0
jl IDX_OOB_101
cmp 0, 8
jg IDX_OOB_101
jmp IDX_OK_100
IDX_OOB_101:
exit 1
IDX_OK_100:
mov rcx, 0
store rbx, block_tex, rcx, 8
invoke load_texture, renderer, str_2
return rcx
cmp 1, 0
jl IDX_OOB_103
cmp 1, 8
jg IDX_OOB_103
jmp IDX_OK_102
IDX_OOB_103:
exit 1
IDX_OK_102:
mov rdx, 1
store rcx, block_tex, rdx, 8
invoke load_texture, renderer, str_3
return rdx
cmp 2, 0
jl IDX_OOB_105
cmp 2, 8
jg IDX_OOB_105
jmp IDX_OK_104
IDX_OOB_105:
exit 1
IDX_OK_104:
mov rsi, 2
store rdx, block_tex, rsi, 8
invoke load_texture, renderer, str_4
return rsi
cmp 3, 0
jl IDX_OOB_107
cmp 3, 8
jg IDX_OOB_107
jmp IDX_OK_106
IDX_OOB_107:
exit 1
IDX_OK_106:
mov rdi, 3
store rsi, block_tex, rdi, 8
invoke load_texture, renderer, str_5
return rdi
cmp 4, 0
jl IDX_OOB_109
cmp 4, 8
jg IDX_OOB_109
jmp IDX_OK_108
IDX_OOB_109:
exit 1
IDX_OK_108:
mov r8, 4
store rdi, block_tex, r8, 8
invoke load_texture, renderer, str_6
return r8
cmp 5, 0
jl IDX_OOB_111
cmp 5, 8
jg IDX_OOB_111
jmp IDX_OK_110
IDX_OOB_111:
exit 1
IDX_OK_110:
mov r9, 5
store r8, block_tex, r9, 8
invoke load_texture, renderer, str_7
return r9
cmp 6, 0
jl IDX_OOB_113
cmp 6, 8
jg IDX_OOB_113
jmp IDX_OK_112
IDX_OOB_113:
exit 1
IDX_OK_112:
mov r10, 6
store r9, block_tex, r10, 8
invoke load_texture, renderer, str_8
return r9
cmp 7, 0
jl IDX_OOB_115
cmp 7, 8
jg IDX_OOB_115
jmp IDX_OK_114
IDX_OOB_115:
exit 1
IDX_OK_114:
mov r10, 7
store r9, block_tex, r10, 8
invoke load_texture, renderer, str_9
return r9
cmp 8, 0
jl IDX_OOB_117
cmp 8, 8
jg IDX_OOB_117
jmp IDX_OK_116
IDX_OOB_117:
exit 1
IDX_OK_116:
mov r10, 8
store r9, block_tex, r10, 8
mov LoadTextures_i, 0
FOR_118:
cmp LoadTextures_i, 8
jg ENDFOR_119
mov r9, LoadTextures_i
load r10, block_tex, r9, 8
mov r9, 0
sub r9, 1
cmp r10, r9
jne ELSE_121
print fmt_str, str_10
print fmt_int, LoadTextures_i
print newline
exit 1
ELSE_121:
FOR_CONTINUE_120:
add LoadTextures_i, 1
jmp FOR_118
ENDFOR_119:
invoke load_texture, renderer, str_11
return r9
cmp 0, 0
jl IDX_OOB_126
cmp 0, 7
jg IDX_OOB_126
jmp IDX_OK_125
IDX_OOB_126:
exit 1
IDX_OK_125:
mov r10, 0
store r9, bg_tex, r10, 8
invoke load_texture, renderer, str_12
return r9
cmp 1, 0
jl IDX_OOB_128
cmp 1, 7
jg IDX_OOB_128
jmp IDX_OK_127
IDX_OOB_128:
exit 1
IDX_OK_127:
mov r10, 1
store r9, bg_tex, r10, 8
invoke load_texture, renderer, str_13
return r9
cmp 2, 0
jl IDX_OOB_130
cmp 2, 7
jg IDX_OOB_130
jmp IDX_OK_129
IDX_OOB_130:
exit 1
IDX_OK_129:
mov r10, 2
store r9, bg_tex, r10, 8
invoke load_texture, renderer, str_14
return r9
cmp 3, 0
jl IDX_OOB_132
cmp 3, 7
jg IDX_OOB_132
jmp IDX_OK_131
IDX_OOB_132:
exit 1
IDX_OK_131:
mov r10, 3
store r9, bg_tex, r10, 8
invoke load_texture, renderer, str_15
return r9
cmp 4, 0
jl IDX_OOB_134
cmp 4, 7
jg IDX_OOB_134
jmp IDX_OK_133
IDX_OOB_134:
exit 1
IDX_OK_133:
mov r10, 4
store r9, bg_tex, r10, 8
invoke load_texture, renderer, str_16
return r9
cmp 5, 0
jl IDX_OOB_136
cmp 5, 7
jg IDX_OOB_136
jmp IDX_OK_135
IDX_OOB_136:
exit 1
IDX_OK_135:
mov r10, 5
store r9, bg_tex, r10, 8
invoke load_texture, renderer, str_17
return r9
cmp 6, 0
jl IDX_OOB_138
cmp 6, 7
jg IDX_OOB_138
jmp IDX_OK_137
IDX_OOB_138:
exit 1
IDX_OK_137:
mov r10, 6
store r9, bg_tex, r10, 8
invoke load_texture, renderer, str_18
return r9
cmp 7, 0
jl IDX_OOB_140
cmp 7, 7
jg IDX_OOB_140
jmp IDX_OK_139
IDX_OOB_140:
exit 1
IDX_OK_139:
mov r10, 7
store r9, bg_tex, r10, 8
mov LoadTextures_i, 0
FOR_141:
cmp LoadTextures_i, 7
jg ENDFOR_142
mov r9, LoadTextures_i
load r10, bg_tex, r9, 8
mov r9, 0
sub r9, 1
cmp r10, r9
jne ELSE_144
print fmt_str, str_19
print fmt_int, LoadTextures_i
print newline
exit 1
ELSE_144:
FOR_CONTINUE_143:
add LoadTextures_i, 1
jmp FOR_141
ENDFOR_142:
PROC_END_LoadTextures:
ret
function PROC_DestroyTextures:
mov DestroyTextures_i, 0
FOR_148:
cmp DestroyTextures_i, 8
jg ENDFOR_149
mov rbx, DestroyTextures_i
load rcx, block_tex, rbx, 8
invoke destroy_texture, rcx
FOR_CONTINUE_150:
add DestroyTextures_i, 1
jmp FOR_148
ENDFOR_149:
mov DestroyTextures_i, 0
FOR_151:
cmp DestroyTextures_i, 7
jg ENDFOR_152
mov rbx, DestroyTextures_i
load rcx, bg_tex, rbx, 8
invoke destroy_texture, rcx
FOR_CONTINUE_153:
add DestroyTextures_i, 1
jmp FOR_151
ENDFOR_152:
invoke destroy_texture, logo_tex
PROC_END_DestroyTextures:
ret
function PROC_Render:
mov rbx, 0
mov rcx, 0
mov rdx, 0
mov rsi, 255
invoke set_draw_color, renderer, rbx, rcx, rdx, rsi
invoke clear, renderer
push Render_x
push Render_y
push Render_idx
push Render_btype
push Render_image
push Render_flash_phase
push Render_b1
push Render_b2
push Render_b3
call GridUnit.FUNC_GetLevel
pop Render_b3
pop Render_b2
pop Render_b1
pop Render_flash_phase
pop Render_image
pop Render_btype
pop Render_idx
pop Render_y
pop Render_x
mov rbx, GridUnit.rax
mov rcx, rbx
sub rcx, 1
mov rdx, rcx
load rsi, bg_tex, rdx, 8
mov rdx, 0
sub rdx, 1
mov rdi, 0
sub rdi, 1
mov r8, 0
sub r8, 1
mov r9, 0
sub r9, 1
mov r10, 0
mov r11, 0
mov r12, 1280
mov r13, 720
invoke render_texture, renderer, rsi, rdx, rdi, r8, r9, r10, r11, r12, r13
mov Render_x, 0
FOR_154:
cmp Render_x, 19
jg ENDFOR_155
mov Render_y, 0
FOR_157:
cmp Render_y, 21
jg ENDFOR_158
mov rdx, Render_y
mul rdx, 20
mov rsi, rdx
add rsi, Render_x
mov Render_idx, rsi
mov rdi, Render_idx
mov _tmpptr0, GridUnit.grid_blocks
load r8, _tmpptr0, rdi, 8
mov Render_btype, r8
cmp Render_btype, 0
jne ELSE_160
mov r9, 0
mov r10, 0
mov r11, 0
mov r12, 255
invoke set_draw_color, renderer, r9, r10, r11, r12
mov r9, Render_x
mul r9, 64
add r9, 1
mov r10, Render_y
mul r10, 32
add r10, 1
mov r11, 63
mov r12, 31
invoke fill_rect, renderer, r9, r10, r11, r12
jmp ENDIF_161
ELSE_160:
cmp Render_btype, 1
jne ELSE_164
mov r9, Render_idx
mov _tmpptr1, GridUnit.grid_flash
load r10, _tmpptr1, r9, 8
mod r10, 6
mov Render_flash_phase, r10
cmp Render_flash_phase, 3
jge ELSE_168
mov r9, Render_idx
mov _tmpptr2, GridUnit.grid_original
load r10, _tmpptr2, r9, 8
sub r10, 2
mov Render_image, r10
cmp Render_image, 0
jl ELSE_172
cmp Render_image, 8
jg ELSE_172
mov r9, Render_image
load r10, block_tex, r9, 8
mov r9, 0
sub r9, 1
mov r11, 0
sub r11, 1
mov r12, 0
sub r12, 1
mov r13, 0
sub r13, 1
mov r14, Render_x
mul r14, 64
mov r15, Render_y
mul r15, 32
mov _ir0, 64
mov _ir1, 32
invoke render_texture, renderer, r10, r9, r11, r12, r13, r14, r15, _ir0, _ir1
jmp ENDIF_173
ELSE_172:
mov r9, 255
mov r10, 255
mov r11, 255
mov r12, 255
invoke set_draw_color, renderer, r9, r10, r11, r12
mov r9, Render_x
mul r9, 64
mov r10, Render_y
mul r10, 32
mov r11, 64
mov r12, 32
invoke fill_rect, renderer, r9, r10, r11, r12
ENDIF_173:
jmp ENDIF_169
ELSE_168:
invoke rand
return r9
mod r9, 256
invoke rand
return r10
mod r10, 256
invoke rand
return r11
mod r11, 256
mov r12, 255
invoke set_draw_color, renderer, r9, r10, r11, r12
mov r9, Render_x
mul r9, 64
mov r10, Render_y
mul r10, 32
mov r11, 64
mov r12, 32
invoke fill_rect, renderer, r9, r10, r11, r12
ENDIF_169:
jmp ENDIF_165
ELSE_164:
cmp Render_btype, 2
jl ELSE_180
cmp Render_btype, 10
jg ELSE_180
mov r9, Render_btype
sub r9, 2
mov Render_image, r9
load r10, block_tex, r9, 8
mov r9, 0
sub r9, 1
mov r11, 0
sub r11, 1
mov r12, 0
sub r12, 1
mov r13, 0
sub r13, 1
mov r14, Render_x
mul r14, 64
mov r15, Render_y
mul r15, 32
mov _ir0, 64
mov _ir1, 32
invoke render_texture, renderer, r10, r9, r11, r12, r13, r14, r15, _ir0, _ir1
jmp ENDIF_181
ELSE_180:
cmp Render_btype, 11
jne ELSE_188
invoke rand
return r9
mod r9, 9
mov Render_image, r9
load r10, block_tex, r9, 8
mov r9, 0
sub r9, 1
mov r11, 0
sub r11, 1
mov r12, 0
sub r12, 1
mov r13, 0
sub r13, 1
mov r14, Render_x
mul r14, 64
mov r15, Render_y
mul r15, 32
mov _ir0, 64
mov _ir1, 32
invoke render_texture, renderer, r10, r9, r11, r12, r13, r14, r15, _ir0, _ir1
ELSE_188:
ENDIF_181:
ENDIF_165:
ENDIF_161:
FOR_CONTINUE_159:
add Render_y, 1
jmp FOR_157
ENDFOR_158:
FOR_CONTINUE_156:
add Render_x, 1
jmp FOR_154
ENDFOR_155:
mov r9, 0
mov _tmpptr3, PieceUnit.piece_type
load r10, _tmpptr3, r9, 8
sub r10, 2
mov Render_b1, r10
mov r9, 1
mov _tmpptr4, PieceUnit.piece_type
load r10, _tmpptr4, r9, 8
sub r10, 2
mov Render_b2, r10
mov r9, 2
mov _tmpptr5, PieceUnit.piece_type
load r10, _tmpptr5, r9, 8
sub r10, 2
mov Render_b3, r10
mov r9, 0
mov _tmpptr6, PieceUnit.piece_type
load r10, _tmpptr6, r9, 8
cmp r10, 11
jne ELSE_192
invoke rand
return r9
mod r9, 9
mov Render_b1, r9
ELSE_192:
mov r9, 1
mov _tmpptr7, PieceUnit.piece_type
load r10, _tmpptr7, r9, 8
cmp r10, 11
jne ELSE_196
invoke rand
return r9
mod r9, 9
mov Render_b2, r9
ELSE_196:
mov r9, 2
mov _tmpptr8, PieceUnit.piece_type
load r10, _tmpptr8, r9, 8
cmp r10, 11
jne ELSE_200
invoke rand
return r9
mod r9, 9
mov Render_b3, r9
ELSE_200:
mov r9, Render_b1
load r10, block_tex, r9, 8
mov r9, 0
sub r9, 1
mov r11, 0
sub r11, 1
mov r12, 0
sub r12, 1
mov r13, 0
sub r13, 1
mov r14, 0
mov _tmpptr9, PieceUnit.piece_x
load r15, _tmpptr9, r14, 8
mul r15, 64
mov r14, 0
mov _tmpptr10, PieceUnit.piece_y
load _ir0, _tmpptr10, r14, 8
mul _ir0, 32
mov r14, 64
mov _ir1, 32
invoke render_texture, renderer, r10, r9, r11, r12, r13, r15, _ir0, r14, _ir1
mov r9, Render_b2
load r10, block_tex, r9, 8
mov r9, 0
sub r9, 1
mov r11, 0
sub r11, 1
mov r12, 0
sub r12, 1
mov r13, 0
sub r13, 1
mov r14, 1
mov _tmpptr11, PieceUnit.piece_x
load r15, _tmpptr11, r14, 8
mul r15, 64
mov r14, 1
mov _tmpptr12, PieceUnit.piece_y
load _ir0, _tmpptr12, r14, 8
mul _ir0, 32
mov r14, 64
mov _ir1, 32
invoke render_texture, renderer, r10, r9, r11, r12, r13, r15, _ir0, r14, _ir1
mov r9, Render_b3
load r10, block_tex, r9, 8
mov r9, 0
sub r9, 1
mov r11, 0
sub r11, 1
mov r12, 0
sub r12, 1
mov r13, 0
sub r13, 1
mov r14, 2
mov _tmpptr13, PieceUnit.piece_x
load r15, _tmpptr13, r14, 8
mul r15, 64
mov r14, 2
mov _tmpptr14, PieceUnit.piece_y
load _ir0, _tmpptr14, r14, 8
mul _ir0, 32
mov r14, 64
mov _ir1, 32
invoke render_texture, renderer, r10, r9, r11, r12, r13, r15, _ir0, r14, _ir1
cmp game_started, 0
jne ELSE_204
mov r9, 520
mov r10, 240
mov r11, 255
mov r12, 255
mov r13, 255
mov r14, 255
invoke draw_text, renderer, font_id, str_20, r9, r10, r11, r12, r13, r14
mov r9, 480
mov r10, 288
mov r11, 255
mov r12, 255
mov r13, 255
mov r14, 255
invoke draw_text, renderer, font_id, str_21, r9, r10, r11, r12, r13, r14
jmp ENDIF_205
ELSE_204:
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
push Render_x
push Render_y
push Render_idx
push Render_btype
push Render_image
push Render_flash_phase
push Render_b1
push Render_b2
push Render_b3
call GridUnit.FUNC_GetLevel
pop Render_b3
pop Render_b2
pop Render_b1
pop Render_flash_phase
pop Render_image
pop Render_btype
pop Render_idx
pop Render_y
pop Render_x
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, GridUnit.rax
invoke inttostr, r9
return _tmpptr15
invoke strlen, str_22
return r9
invoke strlen, _tmpptr15
return r10
mov r11, r9
add r11, r10
add r11, 1
alloc _tmpptr16, 1, r11
invoke strncpy, _tmpptr16, str_22, r9
invoke strncat, _tmpptr16, _tmpptr15, r10
invoke strlen, _tmpptr16
return r9
invoke strlen, str_23
return r10
mov r11, r9
add r11, r10
add r11, 1
alloc _tmpptr15, 1, r11
invoke strncpy, _tmpptr15, _tmpptr16, r9
invoke strncat, _tmpptr15, str_23, r10
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
push Render_x
push Render_y
push Render_idx
push Render_btype
push Render_image
push Render_flash_phase
push Render_b1
push Render_b2
push Render_b3
call GridUnit.FUNC_GetLines
pop Render_b3
pop Render_b2
pop Render_b1
pop Render_flash_phase
pop Render_image
pop Render_btype
pop Render_idx
pop Render_y
pop Render_x
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, GridUnit.rax
invoke inttostr, r9
return _tmpptr16
invoke strlen, _tmpptr15
return r9
invoke strlen, _tmpptr16
return r10
mov r11, r9
add r11, r10
add r11, 1
alloc _tmpptr17, 1, r11
invoke strncpy, _tmpptr17, _tmpptr15, r9
invoke strncat, _tmpptr17, _tmpptr16, r10
mov r9, 16
mov r10, 8
mov r11, 255
mov r12, 255
mov r13, 255
mov r14, 255
invoke draw_text, renderer, font_id, _tmpptr17, r9, r10, r11, r12, r13, r14
free _tmpptr17
free _tmpptr16
free _tmpptr15
ENDIF_205:
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
push Render_x
push Render_y
push Render_idx
push Render_btype
push Render_image
push Render_flash_phase
push Render_b1
push Render_b2
push Render_b3
call GridUnit.FUNC_IsGameOver
pop Render_b3
pop Render_b2
pop Render_b1
pop Render_flash_phase
pop Render_image
pop Render_btype
pop Render_idx
pop Render_y
pop Render_x
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov r9, GridUnit.rax
cmp r9, 1
jne ELSE_208
mov r9, 540
mov r10, 360
mov r11, 255
mov r12, 80
mov r13, 80
mov r14, 255
invoke draw_text, renderer, font_id, str_24, r9, r10, r11, r12, r13, r14
mov r9, 460
mov r10, 408
mov r11, 255
mov r12, 255
mov r13, 255
mov r14, 255
invoke draw_text, renderer, font_id, str_25, r9, r10, r11, r12, r13, r14
ELSE_208:
PROC_END_Render:
ret
function PROC_NewGame:
call GridUnit.PROC_GridClearAll
mov game_started, 1
mov drop_speed, 1000
invoke get_ticks
return rbx
mov last_drop_tick, rbx
invoke get_ticks
return rcx
mov last_proc_tick, rcx
invoke get_ticks
return rdx
mov last_render_tick, rdx
invoke get_ticks
return rsi
mov last_key_tick, rsi
PROC_END_NewGame:
ret
function PROC_HandleKey:
mov HandleKey_k, rbx
cmp HandleKey_k, 110
jne ELSE_212
push rbx
push HandleKey_k
call PROC_NewGame
pop HandleKey_k
pop rbx
jmp PROC_END_HandleKey
ELSE_212:
cmp game_started, 0
jne ELSE_216
jmp PROC_END_HandleKey
ELSE_216:
push rbx
push rcx
push HandleKey_k
call GridUnit.FUNC_IsGameOver
pop HandleKey_k
pop rcx
pop rbx
mov rdx, GridUnit.rax
cmp rdx, 1
jne ELSE_220
jmp PROC_END_HandleKey
ELSE_220:
cmp HandleKey_k, 97
je OR_ONE_230
cmp HandleKey_k, 1073741906
jne ELSE_224
OR_ONE_230:
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
push HandleKey_k
call GridUnit.PROC_GridKeyShiftUp
pop HandleKey_k
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
jmp ENDIF_225
ELSE_224:
cmp HandleKey_k, 115
jne ELSE_232
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
push HandleKey_k
call GridUnit.PROC_GridKeyShiftDown
pop HandleKey_k
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
ELSE_232:
ENDIF_225:
PROC_END_HandleKey:
ret
function PROC_Init:
invoke init
return rbx
mov __funcret_Init, rbx
cmp __funcret_Init, 0
je ELSE_236
print fmt_str, str_26
print newline
exit 1
ELSE_236:
mov rsi, 100
mov rdi, 100
mov r8, 1280
mov r9, 720
mov r10, 4
invoke create_window, str_27, rsi, rdi, r8, r9, r10
return rdx
mov window_id, rdx
mov rsi, 0
sub rsi, 1
cmp window_id, rsi
jne ELSE_240
print fmt_str, str_28
print newline
invoke quit
exit 1
ELSE_240:
mov r8, 0
sub r8, 1
mov r10, 2
invoke create_renderer, window_id, r8, r10
return r9
mov renderer, r9
mov r8, 0
sub r8, 1
cmp renderer, r8
jne ELSE_244
print fmt_str, str_29
print newline
invoke destroy_window, window_id
invoke quit
exit 1
ELSE_244:
invoke init_text
return r9
cmp r9, 1
je ELSE_248
print fmt_str, str_30
print newline
exit 1
ELSE_248:
mov r10, 28
invoke load_font, FONT_FILE, r10
return r9
mov font_id, r9
mov r9, 0
sub r9, 1
cmp font_id, r9
jne ELSE_252
print fmt_str, str_31
print fmt_str, FONT_FILE
print newline
exit 1
ELSE_252:
invoke seed_random
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
push Init_result
call PROC_LoadTextures
pop Init_result
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
invoke load_texture, renderer, str_32
return r9
mov logo_tex, r9
mov r9, 0
sub r9, 1
cmp logo_tex, r9
jne ELSE_256
print fmt_str, str_33
print newline
exit 1
ELSE_256:
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
push Init_result
call GridUnit.PROC_GridClearAll
pop Init_result
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
mov game_started, 0
mov running, 1
mov drop_speed, 1000
invoke get_ticks
return r9
mov last_drop_tick, r9
invoke get_ticks
return r9
mov last_proc_tick, r9
invoke get_ticks
return r9
mov last_render_tick, r9
invoke get_ticks
return r9
mov last_key_tick, r9
PROC_END_Init:
ret
function PROC_Cleanup:
call PROC_DestroyTextures
invoke destroy_renderer, renderer
invoke destroy_window, window_id
invoke quit_text
invoke quit
PROC_END_Cleanup:
ret
}
}