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