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
	}
}