-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgame.asm
More file actions
139 lines (120 loc) · 3.17 KB
/
Copy pathgame.asm
File metadata and controls
139 lines (120 loc) · 3.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
%define green(a) 0x1B, "[32m", a, 0x1B, "[0m"
%define item(a) 0x1B, "[94m", a, 0x1B, "[0m"
%define fish item("🐟 fish")
%define bait item("🪱 bait")
%define start_txt "start"
%define load_txt "load"
%define exit_txt "exit"
section .data
; Main menu
_title_screen db "Main Menu:", 10,
db " [", green(start_txt), "] Start New Game", 10
db " [", green(load_txt), "] Load Game", 10
db " [", green(exit_txt), "] Exit Game", 10, "> "
db 0
_main_menu_start_text db start_txt, 10, 0
_main_menu_load_text db load_txt, 10, 0
_main_menu_exit_text db exit_txt, 10, 0
_main_menu_colon_q_text db ":q", 10, 0
_main_menu_data dq _main_menu_start_text, _main_menu_start
dq _main_menu_load_text, _main_menu_load
dq _main_menu_exit_text, _main_menu_exit
dq _main_menu_colon_q_text, _main_menu_exit
dq 0
; Game data
; Messages
_game_started db "Staring game...", 10, 0
_loading_game db "Loading game...", 10, 0
; Menus
_game_menu_exit db "exit", 10, 0
_game_menu_data dq _game_menu_exit, _game_done, 0
; Rooms
_rooms dq room_docks, room_harbor_plaza
room_offset_docks EQU 0
room_offset_harbor_plaza EQU 1
; Inventory item names
_item_count_name_divider db ' '
_fish_name dq _fish_name_sg, _fish_name_sg
_fish_name_sg db fish, 0
_bait_name dq _bait_name_sg, _bait_name_sg
_bait_name_sg db bait, 0
_item_inventory_name_map dq fish_count, _fish_name
dq bait_count, _bait_name
dq 0
global bootstrap_game
global room_offset_docks
global room_offset_harbor_plaza
; game_state.asm
extern game_state_beginning
extern fish_count
extern bait_count
extern room
extern game_state_size
; imgdata.asm
extern img_welcome_screen
; input.asm
extern read_line
; menu.asm
extern initialize_meta_menu
extern run_basic_menu
; printing.asm
extern print_c_string
extern print_newline
; room_docks.asm
extern room_docks
; room_harbor_plaza.asm
extern room_harbor_plaza
; savegame.asm
extern load_game
; tui.asm
extern clear_screen
section .text
bootstrap_game:
mov rdi, _item_inventory_name_map
mov rsi, game_state_beginning
mov rdx, game_state_size
call initialize_meta_menu
_main_menu:
call clear_screen
mov rdi, img_welcome_screen
call print_c_string
mov rdi, _title_screen
call print_c_string
call read_line
mov rsi, rax
mov rdi, _main_menu_data
call run_basic_menu
cmp rax, 0
jz _main_menu
jmp rax
_main_menu_start:
call _game
ret
_main_menu_load:
mov rdi, _loading_game
call print_c_string
mov rdi, game_state_beginning
mov rsi, game_state_size
call load_game
cmp rax, 0
jz _error_on_load
call _game
_error_on_load:
jmp _main_menu
_main_menu_exit:
ret
_game:
call print_newline
mov rdi, _game_started
call print_c_string
call print_newline
_game_loop:
xor rax, rax
mov al, [room]
call [_rooms + rax * 8]
cmp al, 0xFF
je _game_done
mov [room], al
jmp _game_loop
_game_done:
ret