1 /*
2 * xtrojka (c) 1994,1995,1996 Maarten Los
3 *
4 * #include "COPYRIGHT"
5 *
6 * created: 26.xi.1995
7 * modified:
8 *
9 * This module is the main menu handler
10 */
11
12 #include "debug.h"
13 #include "tr_core.h"
14 #include "xtrojka.h"
15 #include "menu.h"
16 #include "game.h"
17 #include "sh_main.h"
18
19 extern flag is_wizard;
20 extern flag is_slick;
21
22 extern int starting_speed;
23 extern int speed;
24
25 extern GAME_STATE game_state;
26
27
handle_trojkamenu(item)28 void handle_trojkamenu(item)
29 int item;
30 {
31 DEBUG("menu.c","handle_trojkamenu")
32
33 switch(item) {
34 case trojka_Mnewgame:
35 new_game();
36 break;
37
38 case trojka_Mabortgame:
39 gameover();
40 break;
41
42 case trojka_Mwizardmode:
43 toggle_wizard();
44 break;
45
46 case trojka_Mslick:
47 toggle_slick();
48 break;
49
50 case trojka_Mquit:
51 quit_appl();
52 break;
53 }
54 }
55
56
handle_speedmenu(item)57 void handle_speedmenu(item)
58 int item;
59 {
60 tt_command CMD_SETSPEED;
61
62 DEBUG("menu.c", "handle_speedmenu")
63
64 speed = item + 1;
65
66 CMD_SETSPEED.command = tc_c_setspeed;
67 CMD_SETSPEED.param1 = speed;
68 trojka_api(&CMD_SETSPEED);
69
70 set_speed_item(speed);
71
72 starting_speed = speed;
73 }
74
75
enable_speedmenu(void)76 void enable_speedmenu(void)
77 {
78 int i;
79
80 DEBUG("menu.c", "enable_speedmenu")
81
82 for(i = 0; i < SPEEDMENU_ITEMS; i++)
83 enable(speed_M, i, 1);
84 }
85
86
disable_speedmenu(speed_item)87 void disable_speedmenu(speed_item)
88 int speed_item;
89 {
90 int i;
91
92 DEBUG("menu.c", "disable_speedmenu")
93
94 for(i = 0; i < speed_item; i++) {
95 enable(speed_M, i, 0);
96 }
97 for(i = speed_item; i < SPEEDMENU_ITEMS; i++) {
98 enable(speed_M, i, 1);
99 }
100 }
101
102
set_speed_item(the_speed)103 void set_speed_item(the_speed)
104 int the_speed;
105 {
106 int i;
107 int item;
108
109 DEBUG("menu.c", "set_speed_item")
110
111 item = the_speed - 1;
112
113 for(i = 0; i < SPEEDMENU_ITEMS; i++)
114 check_speed_item(i,0);
115
116 check_speed_item(item,1);
117
118 if(game_state == st_playing)
119 disable_speedmenu(item);
120
121 show_speed(the_speed);
122 }
123
124
125
126
set_menus(gs)127 void set_menus(gs)
128 GAME_STATE gs;
129 {
130 /*
131 * enables/disables menus depending on game state.
132 * TrojkaMenu:
133 * abort game disabled if idle
134 * new game disabled if playing
135 * others always enabled
136 * SpeedMenu:
137 * everything enabled if idle
138 * everything up to currentspeed disabled in playing
139 */
140 DEBUG("menu.c", "set_menus")
141
142 if(gs == st_playing) {
143 enable(trojka_M, trojka_Mnewgame, 0);
144 enable(trojka_M, trojka_Mabortgame, 1);
145 if(is_wizard)
146 enable(trojka_M, trojka_Mwizardmode, 0);
147 #ifdef XPM
148 enable(trojka_M, trojka_Mslick, 1);
149 #else
150 enable(trojka_M, trojka_Mslick, 0);
151 #endif
152 disable_speedmenu(speed-1);
153 } else
154 if(gs == st_idle) {
155 speed = starting_speed;
156 enable(trojka_M, trojka_Mnewgame, 1);
157 enable(trojka_M, trojka_Mabortgame, 0);
158 enable(trojka_M, trojka_Mwizardmode, 1);
159 enable(trojka_M, trojka_Mslick, 0);
160
161 enable_speedmenu();
162 }
163 }
164
165
toggle_wizard(void)166 void toggle_wizard(void)
167 {
168 tt_command SET_WIZARD;
169
170 DEBUG("menu.c", "toggle_wizard");
171
172 if((is_wizard) && (game_state == st_playing))
173 return;
174
175 is_wizard = !is_wizard;
176 check_wizard_item(is_wizard);
177
178 if((is_wizard) && (game_state == st_playing)) {
179
180 SET_WIZARD.command = tc_c_setwizard;
181 trojka_api(&SET_WIZARD);
182 enable(trojka_M, trojka_Mwizardmode, 0);
183 }
184 }
185
186
toggle_slick(void)187 void toggle_slick(void)
188 {
189 DEBUG("menu.c", "toggle_slick");
190
191 is_slick = !is_slick;
192 check_slick_item(is_slick);
193
194 if(game_state == st_playing)
195 draw_field();
196 }
197
198
199