program CardGame {
	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
		ptr _tmpptr2 = null
		ptr arg0 = null
		string str_0 = "Intuition Builder"
		string str_1 = "font.ttf"
		string str_2 = "Game Over Your Score: "
		string str_3 = "/"
		string str_4 = " - [Press Enter for New Game]"
		string str_5 = "Guess 1-3 by pressing 1-3 keys "
		string str_6 = "Correct! Your Mental Intuition was correct."
		string str_7 = "Incorrect! Your Mental Intuition was incorrect."
		string str_8 = ""
		string str_9 = "failed to init SDL"
		string str_10 = "Could not create window"
		string str_11 = "could not create renderer"
		string str_12 = "could not create render target"
		string str_13 = "Font subsystem failed to load"
		string str_14 = "failed to open: "
		string str_15 = "cardback.bmp"
		string str_16 = "card1.bmp"
		string str_17 = "card2.bmp"
		string str_18 = "card3.bmp"
		string str_19 = "failed to load card textures"
		string str_20 = "You either have bad luck or things just are not going your way to score zero."
		string str_21 = "You are an average player with little psychic abilities."
		string str_22 = "You are above average with some mild psychic abilities."
		string str_23 = "You are experienced and know what you are doing."
		string str_24 = "You are Psychic."
		string fmt_str = "%s "
		string newline = "\n"
		ptr title = null
		ptr fontfile = null
		int running = 0
		int event_type_result = 0
		int window_id = 0
		int renderer = 0
		int target_id = 0
		int font_id = 0
		int key = 0
		ptr deck = null
		int deck_index = 0
		int game_over = 0
		int next_input = 0
		int correct = 0
		int draw_card = 0
		ptr game_string = null
		ptr psychic_string = null
		int card_back = 0
		int card1 = 0
		int card2 = 0
		int card3 = 0
		int delay_timer = 0
		int delay_active = 0
		int init_deck_i = 0
		int handle_guess_guess = 0
		int handle_guess_card = 0
		int handle_key_k = 0
		int draw_background_row = 0
		int draw_background_col = 0
		int render_i = 0
		int render_x_pos = 0
		int render_card_tex = 0
		int render_card_w = 0
		int render_card_h = 0
		int setup_result = 0
		int __funcret_setup = 0
		int __funcret_cur_card = 0
		ptr __funcret_gen_rating = null
	}
	section code {
	start:
		mov title, str_0
		mov fontfile, str_1
		alloc deck, 8, 10
		call PROC_setup
		mov running, 1
	WHILE_0:
		cmp running, 1
		jne ENDWHILE_1
	WHILE_4:
		invoke poll_event
		return rcx
		cmp rcx, 0
		je ENDWHILE_5
		invoke get_event_type
		return rsi
		mov event_type_result, rsi
		cmp event_type_result, 256
		jne ELSE_8
		mov running, 0
	ELSE_8:
		cmp event_type_result, 768
		jne ELSE_12
		invoke get_key_code
		return r9
		mov key, r9
		cmp key, 27
		jne ELSE_16
		mov running, 0
		jmp ENDIF_17
	ELSE_16:
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, key
		call PROC_handle_key
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
	ENDIF_17:
	ELSE_12:
		jmp WHILE_4
	ENDWHILE_5:
		cmp delay_active, 1
		jne ELSE_20
		invoke get_ticks
		return r9
		sub r9, delay_timer
		cmp r9, 3000
		jl ELSE_24
		mov delay_active, 0
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		call PROC_advance_card
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
	ELSE_24:
	ELSE_20:
		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
		mov r9, 1280
		mov r10, 720
		invoke present_scaled, renderer, target_id, r9, r10
		mov r9, 16
		invoke delay, r9
		jmp WHILE_0
	ENDWHILE_1:
		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 deck
		done
	function PROC_init_deck:
		mov init_deck_i, 0
	FOR_28:
		cmp init_deck_i, 9
		jg ENDFOR_29
		invoke rand
		return rbx
		mov rcx, rbx
		mod rcx, 3
		mov rdx, rcx
		add rdx, 1
		cmp init_deck_i, 0
		jl IDX_OOB_32
		cmp init_deck_i, 9
		jg IDX_OOB_32
		jmp IDX_OK_31
	IDX_OOB_32:
		exit 1
	IDX_OK_31:
		mov rsi, init_deck_i
		store rdx, deck, rsi, 8
	FOR_CONTINUE_30:
		add init_deck_i, 1
		jmp FOR_28
	ENDFOR_29:
		mov deck_index, 0
	PROC_END_init_deck:
		ret
	function PROC_advance_card:
		mov draw_card, 0
		mov next_input, 1
		mov rbx, deck_index
		add rbx, 1
		mov deck_index, rbx
		cmp deck_index, 9
		jle ELSE_33
		invoke inttostr, correct
		return _tmpptr0
		invoke strlen, str_2
		return rdx
		invoke strlen, _tmpptr0
		return rsi
		mov rdi, rdx
		add rdi, rsi
		add rdi, 1
		alloc _tmpptr1, 1, rdi
		invoke strncpy, _tmpptr1, str_2, rdx
		invoke strncat, _tmpptr1, _tmpptr0, rsi
		invoke strlen, _tmpptr1
		return rdx
		invoke strlen, str_3
		return rsi
		mov rdi, rdx
		add rdi, rsi
		add rdi, 1
		alloc _tmpptr0, 1, rdi
		invoke strncpy, _tmpptr0, _tmpptr1, rdx
		invoke strncat, _tmpptr0, str_3, rsi
		mov rdx, 10
		invoke inttostr, rdx
		return _tmpptr1
		invoke strlen, _tmpptr0
		return rdx
		invoke strlen, _tmpptr1
		return rsi
		mov rdi, rdx
		add rdi, rsi
		add rdi, 1
		alloc _tmpptr2, 1, rdi
		invoke strncpy, _tmpptr2, _tmpptr0, rdx
		invoke strncat, _tmpptr2, _tmpptr1, rsi
		invoke strlen, _tmpptr2
		return rdx
		invoke strlen, str_4
		return rsi
		mov rdi, rdx
		add rdi, rsi
		add rdi, 1
		alloc _tmpptr0, 1, rdi
		invoke strncpy, _tmpptr0, _tmpptr2, rdx
		invoke strncat, _tmpptr0, str_4, rsi
		mov game_string, _tmpptr0
		free _tmpptr1
		free _tmpptr2
		mov game_over, 1
		push rbx
		push rcx
		call FUNC_gen_rating
		pop rcx
		pop rbx
		mov _tmpptr0, arg0
		mov psychic_string, _tmpptr0
		jmp ENDIF_34
	ELSE_33:
		mov rdx, deck_index
		add rdx, 1
		invoke inttostr, rdx
		return _tmpptr0
		invoke strlen, str_5
		return rsi
		invoke strlen, _tmpptr0
		return rdi
		mov r8, rsi
		add r8, rdi
		add r8, 1
		alloc _tmpptr1, 1, r8
		invoke strncpy, _tmpptr1, str_5, rsi
		invoke strncat, _tmpptr1, _tmpptr0, rdi
		invoke strlen, _tmpptr1
		return rsi
		invoke strlen, str_3
		return rdi
		mov r8, rsi
		add r8, rdi
		add r8, 1
		alloc _tmpptr0, 1, r8
		invoke strncpy, _tmpptr0, _tmpptr1, rsi
		invoke strncat, _tmpptr0, str_3, rdi
		mov rsi, 10
		invoke inttostr, rsi
		return _tmpptr1
		invoke strlen, _tmpptr0
		return rsi
		invoke strlen, _tmpptr1
		return rdi
		mov r8, rsi
		add r8, rdi
		add r8, 1
		alloc _tmpptr2, 1, r8
		invoke strncpy, _tmpptr2, _tmpptr0, rsi
		invoke strncat, _tmpptr2, _tmpptr1, rdi
		mov game_string, _tmpptr2
	ENDIF_34:
		free _tmpptr1
	PROC_END_advance_card:
		ret
	function PROC_handle_guess:
		mov handle_guess_guess, rbx
		push handle_guess_guess
		push handle_guess_card
		call FUNC_cur_card
		pop handle_guess_card
		pop handle_guess_guess
		mov rbx, rax
		mov handle_guess_card, rbx
		cmp handle_guess_card, handle_guess_guess
		jne ELSE_37
		add correct, 1
		mov game_string, str_6
		jmp ENDIF_38
	ELSE_37:
		mov game_string, str_7
	ENDIF_38:
		mov draw_card, handle_guess_card
		mov next_input, 0
		mov delay_active, 1
		invoke get_ticks
		return rsi
		mov delay_timer, rsi
	PROC_END_handle_guess:
		ret
	function PROC_handle_key:
		mov handle_key_k, rbx
		cmp next_input, 0
		jne ELSE_41
		jmp PROC_END_handle_key
	ELSE_41:
		cmp game_over, 1
		jne ELSE_45
		cmp handle_key_k, 13
		jne ELSE_49
		mov game_over, 0
		push rbx
		push rcx
		push rdx
		push handle_key_k
		call PROC_init_deck
		pop handle_key_k
		pop rdx
		pop rcx
		pop rbx
		mov correct, 0
		mov draw_card, 0
		mov psychic_string, str_8
		mov rsi, deck_index
		add rsi, 1
		invoke inttostr, rsi
		return _tmpptr0
		invoke strlen, str_5
		return rdi
		invoke strlen, _tmpptr0
		return r8
		mov r9, rdi
		add r9, r8
		add r9, 1
		alloc _tmpptr1, 1, r9
		invoke strncpy, _tmpptr1, str_5, rdi
		invoke strncat, _tmpptr1, _tmpptr0, r8
		invoke strlen, _tmpptr1
		return rdi
		invoke strlen, str_3
		return r8
		mov r9, rdi
		add r9, r8
		add r9, 1
		alloc _tmpptr0, 1, r9
		invoke strncpy, _tmpptr0, _tmpptr1, rdi
		invoke strncat, _tmpptr0, str_3, r8
		mov rdi, 10
		invoke inttostr, rdi
		return _tmpptr1
		invoke strlen, _tmpptr0
		return rdi
		invoke strlen, _tmpptr1
		return r8
		mov r9, rdi
		add r9, r8
		add r9, 1
		alloc _tmpptr2, 1, r9
		invoke strncpy, _tmpptr2, _tmpptr0, rdi
		invoke strncat, _tmpptr2, _tmpptr1, r8
		mov game_string, _tmpptr2
		free _tmpptr1
		free _tmpptr0
	ELSE_49:
		jmp ENDIF_46
	ELSE_45:
		cmp handle_key_k, 49
		jne ELSE_53
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		mov rbx, 1
		push handle_key_k
		call PROC_handle_guess
		pop handle_key_k
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		jmp ENDIF_54
	ELSE_53:
		cmp handle_key_k, 50
		jne ELSE_57
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, 2
		push handle_key_k
		call PROC_handle_guess
		pop handle_key_k
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		jmp ENDIF_58
	ELSE_57:
		cmp handle_key_k, 51
		jne ELSE_61
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, 3
		push handle_key_k
		call PROC_handle_guess
		pop handle_key_k
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
	ELSE_61:
	ENDIF_58:
	ENDIF_54:
	ENDIF_46:
	PROC_END_handle_key:
		ret
	function PROC_draw_background:
		mov rbx, 20
		mov rcx, 70
		mov rdx, 35
		mov rsi, 255
		invoke set_draw_color, renderer, rbx, rcx, rdx, rsi
		mov rbx, 0
		mov rcx, 0
		mov rdx, 1280
		mov rsi, 720
		invoke fill_rect, renderer, rbx, rcx, rdx, rsi
		mov rbx, 25
		mov rcx, 80
		mov rdx, 40
		mov rsi, 255
		invoke set_draw_color, renderer, rbx, rcx, rdx, rsi
		mov draw_background_row, 0
	WHILE_65:
		cmp draw_background_row, 720
		jge ENDWHILE_66
		mov draw_background_col, 0
		mov rcx, draw_background_row
		mod rcx, 64
		cmp rcx, 32
		jne ELSE_69
		mov draw_background_col, 32
	ELSE_69:
	WHILE_73:
		cmp draw_background_col, 1280
		jge ENDWHILE_74
		mov rdi, 30
		mov r8, 30
		invoke fill_rect, renderer, draw_background_col, draw_background_row, rdi, r8
		add draw_background_col, 64
		jmp WHILE_73
	ENDWHILE_74:
		add draw_background_row, 32
		jmp WHILE_65
	ENDWHILE_66:
		mov r9, 40
		mov r10, 25
		mov r11, 15
		mov r12, 255
		invoke set_draw_color, renderer, r9, r10, r11, r12
		mov r9, 0
		mov r10, 0
		mov r11, 1280
		mov r12, 55
		invoke fill_rect, renderer, r9, r10, r11, r12
		mov r9, 40
		mov r10, 25
		mov r11, 15
		mov r12, 255
		invoke set_draw_color, renderer, r9, r10, r11, r12
		mov r9, 0
		mov r10, 690
		mov r11, 1280
		mov r12, 30
		invoke fill_rect, renderer, r9, r10, r11, r12
		mov r9, 180
		mov r10, 140
		mov r11, 60
		mov r12, 255
		invoke set_draw_color, renderer, r9, r10, r11, r12
		mov r9, 0
		mov r10, 55
		mov r11, 1280
		mov r12, 2
		invoke fill_rect, renderer, r9, r10, r11, r12
		mov r9, 0
		mov r10, 690
		mov r11, 1280
		mov r12, 2
		invoke fill_rect, renderer, r9, r10, r11, r12
	PROC_END_draw_background:
		ret
	function PROC_render:
		mov render_card_w, 160
		mov render_card_h, 240
		invoke set_render_target, renderer, target_id
		push render_i
		push render_x_pos
		push render_card_tex
		push render_card_w
		push render_card_h
		call PROC_draw_background
		pop render_card_h
		pop render_card_w
		pop render_card_tex
		pop render_x_pos
		pop render_i
		mov rbx, 25
		mov rcx, 15
		mov rdx, 220
		mov rsi, 190
		mov rdi, 120
		mov r8, 255
		invoke draw_text, renderer, font_id, str_0, rbx, rcx, rdx, rsi, rdi, r8
		mov rbx, 280
		mov rcx, 15
		mov rdx, 255
		mov rsi, 255
		mov rdi, 255
		mov r8, 255
		invoke draw_text, renderer, font_id, game_string, rbx, rcx, rdx, rsi, rdi, r8
		mov render_x_pos, 80
		mov rbx, 10
		sub rbx, deck_index
		mov rcx, rbx
		sub rcx, 1
		mov render_i, 0
	FOR_77:
		cmp render_i, rcx
		jg ENDFOR_78
		mov rdx, 0
		sub rdx, 1
		mov rsi, 0
		sub rsi, 1
		mov rdi, 0
		sub rdi, 1
		mov r8, 0
		sub r8, 1
		mov r9, 100
		invoke render_texture, renderer, card_back, rdx, rsi, rdi, r8, render_x_pos, r9, render_card_w, render_card_h
		add render_x_pos, 18
	FOR_CONTINUE_79:
		add render_i, 1
		jmp FOR_77
	ENDFOR_78:
		cmp draw_card, 0
		je ELSE_80
		cmp draw_card, 1
		jne ELSE_84
		mov render_card_tex, card1
		jmp ENDIF_85
	ELSE_84:
		cmp draw_card, 2
		jne ELSE_88
		mov render_card_tex, card2
		jmp ENDIF_89
	ELSE_88:
		mov render_card_tex, card3
	ENDIF_89:
	ENDIF_85:
		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, 800
		mov r14, 100
		invoke render_texture, renderer, render_card_tex, r9, r10, r11, r12, r13, r14, render_card_w, render_card_h
	ELSE_80:
		cmp game_over, 1
		jne ELSE_92
		mov r9, 0
		mov r10, 0
		mov r11, 0
		mov r12, 160
		invoke set_draw_color, renderer, r9, r10, r11, r12
		mov r9, 100
		mov r10, 400
		mov r11, 1080
		mov r12, 60
		invoke fill_rect, renderer, r9, r10, r11, r12
		mov r9, 130
		mov r10, 415
		mov r11, 255
		mov r12, 80
		mov r13, 80
		mov r14, 255
		invoke draw_text, renderer, font_id, psychic_string, r9, r10, r11, r12, r13, r14
	ELSE_92:
	PROC_END_render:
		ret
	function PROC_setup:
		invoke init
		return rbx
		mov __funcret_setup, rbx
		cmp __funcret_setup, 0
		je ELSE_96
		print fmt_str, str_9
		print newline
		exit 1
	ELSE_96:
		mov rsi, 100
		mov rdi, 100
		mov r8, 1280
		mov r9, 720
		mov r10, 4
		invoke create_window, title, rsi, rdi, r8, r9, r10
		return rdx
		mov window_id, rdx
		mov rsi, 0
		sub rsi, 1
		cmp window_id, rsi
		jne ELSE_100
		print fmt_str, str_10
		print newline
		invoke quit
		exit 1
	ELSE_100:
		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_104
		print fmt_str, str_11
		print newline
		invoke destroy_window, window_id
		invoke quit
		exit 1
	ELSE_104:
		mov r10, 1280
		mov r11, 720
		invoke create_render_target, renderer, r10, r11
		return r9
		mov target_id, r9
		mov r9, 0
		sub r9, 1
		cmp target_id, r9
		jne ELSE_108
		print fmt_str, str_12
		print newline
		invoke destroy_renderer, renderer
		invoke destroy_window, window_id
		invoke quit
		exit 1
	ELSE_108:
		invoke init_text
		return r9
		cmp r9, 1
		je ELSE_112
		print fmt_str, str_13
		print newline
		exit 1
	ELSE_112:
		mov r10, 24
		invoke load_font, fontfile, r10
		return r9
		mov font_id, r9
		mov r9, 0
		sub r9, 1
		cmp font_id, r9
		jne ELSE_116
		print fmt_str, str_14
		print fmt_str, fontfile
		print newline
		exit 1
	ELSE_116:
		invoke load_texture, renderer, str_15
		return r9
		mov card_back, r9
		invoke load_texture, renderer, str_16
		return r9
		mov card1, r9
		invoke load_texture, renderer, str_17
		return r9
		mov card2, r9
		invoke load_texture, renderer, str_18
		return r9
		mov card3, r9
		mov r9, 0
		sub r9, 1
		cmp card_back, r9
		je OR_ONE_126
		mov r9, 0
		sub r9, 1
		cmp card1, r9
		je OR_ONE_126
		mov r9, 0
		jmp OR_END_127
	OR_ONE_126:
		mov r9, 1
	OR_END_127:
		mov r10, 0
		sub r10, 1
		cmp card2, r10
		je OR_ONE_130
		cmp r9, 0
		jne OR_ONE_130
		mov r10, 0
		jmp OR_END_131
	OR_ONE_130:
		mov r10, 1
	OR_END_131:
		mov r9, 0
		sub r9, 1
		cmp card3, r9
		jne ELSE_120
		cmp r10, 0
		jne OR_ONE_134
	OR_ONE_134:
		print fmt_str, str_19
		print newline
		exit 1
	ELSE_120:
		invoke seed_random
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		push setup_result
		call PROC_init_deck
		pop setup_result
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov correct, 0
		mov draw_card, 0
		mov next_input, 1
		mov game_over, 0
		mov delay_active, 0
		mov psychic_string, str_8
		mov r9, deck_index
		add r9, 1
		invoke inttostr, r9
		return _tmpptr0
		invoke strlen, str_5
		return r9
		invoke strlen, _tmpptr0
		return r10
		mov r11, r9
		add r11, r10
		add r11, 1
		alloc _tmpptr1, 1, r11
		invoke strncpy, _tmpptr1, str_5, r9
		invoke strncat, _tmpptr1, _tmpptr0, r10
		invoke strlen, _tmpptr1
		return r9
		invoke strlen, str_3
		return r10
		mov r11, r9
		add r11, r10
		add r11, 1
		alloc _tmpptr0, 1, r11
		invoke strncpy, _tmpptr0, _tmpptr1, r9
		invoke strncat, _tmpptr0, str_3, r10
		mov r9, 10
		invoke inttostr, r9
		return _tmpptr1
		invoke strlen, _tmpptr0
		return r9
		invoke strlen, _tmpptr1
		return r10
		mov r11, r9
		add r11, r10
		add r11, 1
		alloc _tmpptr2, 1, r11
		invoke strncpy, _tmpptr2, _tmpptr0, r9
		invoke strncat, _tmpptr2, _tmpptr1, r10
		mov game_string, _tmpptr2
		free _tmpptr1
		free _tmpptr0
	PROC_END_setup:
		ret
	function PROC_cleanup:
		invoke destroy_texture, card_back
		invoke destroy_texture, card1
		invoke destroy_texture, card2
		invoke destroy_texture, card3
		invoke destroy_render_target, target_id
		invoke destroy_renderer, renderer
		invoke destroy_window, window_id
		invoke quit_text
		invoke quit
	PROC_END_cleanup:
		ret
	function FUNC_cur_card:
		cmp deck_index, 10
		jge ELSE_136
		mov rcx, deck_index
		load rdx, deck, rcx, 8
		mov __funcret_cur_card, rdx
		jmp ENDIF_137
	ELSE_136:
		mov __funcret_cur_card, 0
	ENDIF_137:
	FUNC_END_cur_card:
		mov rax, __funcret_cur_card
		ret
	function FUNC_gen_rating:
		cmp correct, 0
		jne ELSE_140
		mov __funcret_gen_rating, str_20
		jmp ENDIF_141
	ELSE_140:
		cmp correct, 3
		jg ELSE_144
		mov __funcret_gen_rating, str_21
		jmp ENDIF_145
	ELSE_144:
		cmp correct, 6
		jg ELSE_148
		mov __funcret_gen_rating, str_22
		jmp ENDIF_149
	ELSE_148:
		cmp correct, 8
		jg ELSE_152
		mov __funcret_gen_rating, str_23
		jmp ENDIF_153
	ELSE_152:
		mov __funcret_gen_rating, str_24
	ENDIF_153:
	ENDIF_149:
	ENDIF_145:
	ENDIF_141:
	FUNC_END_gen_rating:
		mov arg0, __funcret_gen_rating
		ret
	}
}