2 * Copyright (C) 2003 Robert Kooima
4 * NEVERBALL is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published
6 * by the Free Software Foundation; either version 2 of the License,
7 * or (at your option) any later version.
9 * This program is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * General Public License for more details.
19 #include "st_shared.h"
24 /*---------------------------------------------------------------------------*/
32 struct state st_help_rules;
33 struct state st_help_controls;
34 struct state st_help_modes;
35 struct state st_help_secrets;
37 static int help_action(int i)
39 audio_play(AUD_MENU, 1.0f);
43 case HELP_BACK: return goto_state(&st_title);
44 case HELP_RULE: return goto_state(&st_help_rules);
45 case HELP_CONT: return goto_state(&st_help_controls);
46 case HELP_MODE: return goto_state(&st_help_modes);
47 case HELP_SECR: return goto_state(&st_help_secrets);
52 static int help_button(int id, const char *text, int token, int atoken)
54 int kd = gui_state(id, text, GUI_SML, token, token == atoken);
62 static int help_menu(int id, int i)
67 if ((jd = gui_harray(id)))
69 help_button(jd, _("Secrets"), HELP_SECR, i);
70 help_button(jd, _("Modes"), HELP_MODE, i);
71 help_button(jd, _("Controls"), HELP_CONT, i);
72 help_button(jd, _("Rules"), HELP_RULE, i);
73 help_button(jd, _("Back"), HELP_BACK, i);
79 static int help_enter(void)
81 goto_state(&st_help_rules);
85 static int help_rules_enter(void)
88 "Move the mouse or joystick\\"
89 "or use keyboard arrows to\\"
90 "tilt the floor causing the\\"
93 "Roll over coins to collect\\"
94 "them. Collect coins to\\"
95 "unlock the goal and finish\\"
98 int w = config_get_d(CONFIG_WIDTH);
99 int h = config_get_d(CONFIG_HEIGHT);
103 if ((id = gui_vstack(0)))
105 help_menu(id, HELP_RULE);
107 if ((jd = gui_hstack(id)))
109 gui_image(jd, "gui/help1.jpg", 6 * w / 16, 6 * h / 16);
110 gui_multi(jd, s0, GUI_SML, GUI_ALL, gui_wht, gui_wht);
114 if ((jd = gui_hstack(id)))
117 gui_multi(jd, s1, GUI_SML, GUI_ALL, gui_wht, gui_wht);
118 gui_image(jd, "gui/help2.jpg", 6 * w / 16, 6 * h / 16);
120 gui_layout(id, 0, +1);
125 static int help_controls_enter(void)
127 const char *s4 = _("Left and right mouse buttons rotate the view.");
128 const char *s5 = _("Hold Shift for faster view rotation.");
129 const char *s6 = _("Pause / Release Pointer");
130 const char *s7 = _("Exit / Cancel Menu");
131 const char *s8 = _("Chase View");
132 const char *s9 = _("Lazy View");
133 const char *sA = _("Manual View");
134 const char *sB = _("Show FPS");
135 const char *sC = _("Screenshot");
136 const char *sD = _("Toggle Fullscreen");
138 const char *k0 = _("Spacebar");
139 const char *k1 = _("Escape");
140 const char *k2 = SDL_GetKeyName(config_get_d(CONFIG_KEY_CAMERA_1));
141 const char *k3 = SDL_GetKeyName(config_get_d(CONFIG_KEY_CAMERA_2));
142 const char *k4 = SDL_GetKeyName(config_get_d(CONFIG_KEY_CAMERA_3));
143 const char *k5 = SDL_GetKeyName(SDLK_F9);
144 const char *k6 = SDL_GetKeyName(SDLK_F10);
145 const char *k7 = SDL_GetKeyName(SDLK_F11);
149 if ((id = gui_vstack(0)))
151 help_menu(id, HELP_CONT);
153 if ((jd = gui_harray(id)))
155 gui_label(jd, s6, GUI_SML, GUI_NE, gui_wht, gui_wht);
156 gui_label(jd, k0, GUI_SML, GUI_NW, gui_yel, gui_yel);
158 if ((jd = gui_harray(id)))
160 gui_label(jd, s7, GUI_SML, 0, gui_wht, gui_wht);
161 gui_label(jd, k1, GUI_SML, 0, gui_yel, gui_yel);
163 if ((jd = gui_harray(id)))
165 gui_label(jd, s8, GUI_SML, 0, gui_wht, gui_wht);
166 gui_label(jd, k2, GUI_SML, 0, gui_yel, gui_yel);
168 if ((jd = gui_harray(id)))
170 gui_label(jd, s9, GUI_SML, 0, gui_wht, gui_wht);
171 gui_label(jd, k3, GUI_SML, 0, gui_yel, gui_yel);
173 if ((jd = gui_harray(id)))
175 gui_label(jd, sA, GUI_SML, GUI_SE, gui_wht, gui_wht);
176 gui_label(jd, k4, GUI_SML, GUI_SW, gui_yel, gui_yel);
178 if ((jd = gui_harray(id)))
180 gui_label(jd, sB, GUI_SML, GUI_SE, gui_wht, gui_wht);
181 gui_label(jd, k5, GUI_SML, GUI_SW, gui_yel, gui_yel);
183 if ((jd = gui_harray(id)))
185 gui_label(jd, sC, GUI_SML, GUI_SE, gui_wht, gui_wht);
186 gui_label(jd, k6, GUI_SML, GUI_SW, gui_yel, gui_yel);
188 if ((jd = gui_harray(id)))
190 gui_label(jd, sD, GUI_SML, GUI_SE, gui_wht, gui_wht);
191 gui_label(jd, k7, GUI_SML, GUI_SW, gui_yel, gui_yel);
195 gui_label(id, s4, GUI_SML, GUI_TOP, gui_wht, gui_wht);
196 gui_label(id, s5, GUI_SML, GUI_BOT, gui_wht, gui_wht);
198 gui_layout(id, 0, +1);
203 static int help_modes_enter(void)
207 if ((id = gui_vstack(0)))
209 help_menu(id, HELP_MODE);
211 gui_label(id, _("Normal"), GUI_SML, GUI_TOP, 0, 0);
213 "Finish a level before the time run out.\\"
214 "You need to collect coins in order to open the goal.",
215 GUI_SML, GUI_BOT, gui_wht, gui_wht);
219 gui_label(id, _("Practice"), GUI_SML, GUI_TOP, 0, 0);
220 gui_multi(id, "Play a level without time or coin constraint.",
221 GUI_SML, GUI_BOT, gui_wht, gui_wht);
225 gui_label(id, _("Challenge"), GUI_SML, GUI_TOP, 0, 0);
227 "Start playing from the first level of the level set.\\"
228 "You start with only four balls, do not lose them.\\"
229 "Earn an extra ball for each 100 coins collected.",
230 GUI_SML, GUI_BOT, gui_wht, gui_wht);
232 gui_layout(id, 0, +1);
238 static int help_secrets_enter(void)
241 "Such goals will transport\\"
242 "you to either a secret level\\"
243 "or a level further in the set.\\"
244 "You'll have to find them.\\");
246 "Angled acceleration works \\"
247 "in Neverball like in\\"
248 "some Doom-like games.\\"
249 "Best use with the manual view.\\ ");
251 int w = config_get_d(CONFIG_WIDTH);
252 int h = config_get_d(CONFIG_HEIGHT);
256 if ((id = gui_vstack(0)))
258 help_menu(id, HELP_SECR);
260 if ((jd = gui_hstack(id)))
263 gui_multi(jd, s0, GUI_SML, GUI_ALL, gui_wht, gui_wht);
264 gui_image(jd, "gui/help3.jpg", 6 * w / 16, 6 * h / 16);
267 if ((jd = gui_hstack(id)))
269 gui_image(jd, "gui/help4.jpg", 6 * w / 16, 6 * h / 16);
270 gui_multi(jd, s1, GUI_SML, GUI_ALL, gui_wht, gui_wht);
273 gui_layout(id, 0, +1);
278 static int help_buttn(int b, int d)
282 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_A, b))
283 return help_action(gui_token(gui_click()));
284 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_EXIT, b))
285 return help_action(HELP_BACK);
290 /*---------------------------------------------------------------------------*/
292 struct state st_help = {
305 struct state st_help_rules = {
318 struct state st_help_controls = {
331 struct state st_help_modes = {
344 struct state st_help_secrets = {