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 "Levels cannot be unlocked in this mode.",
222 GUI_SML, GUI_BOT, gui_wht, gui_wht);
226 gui_label(id, _("Challenge"), GUI_SML, GUI_TOP, 0, 0);
228 "Start playing from the first level of the level set.\\"
229 "You start with only four balls, do not lose them.\\"
230 "Earn an extra ball for each 100 coins collected.",
231 GUI_SML, GUI_BOT, gui_wht, gui_wht);
233 gui_layout(id, 0, +1);
239 static int help_secrets_enter(void)
242 "In challenge mode, such goals\\"
243 "will transport you to\\"
244 "somewhere... unusual.\\"
245 "You'll have to find them.\\");
247 "Angled acceleration works \\"
248 "in Neverball like in\\"
249 "some Doom-like games.\\"
250 "Best use with the manual view.\\ ");
252 int w = config_get_d(CONFIG_WIDTH);
253 int h = config_get_d(CONFIG_HEIGHT);
257 if ((id = gui_vstack(0)))
259 help_menu(id, HELP_SECR);
261 if ((jd = gui_hstack(id)))
264 gui_multi(jd, s0, GUI_SML, GUI_ALL, gui_wht, gui_wht);
265 gui_image(jd, "gui/help3.jpg", 6 * w / 16, 6 * h / 16);
268 if ((jd = gui_hstack(id)))
270 gui_image(jd, "gui/help4.jpg", 6 * w / 16, 6 * h / 16);
271 gui_multi(jd, s1, GUI_SML, GUI_ALL, gui_wht, gui_wht);
274 gui_layout(id, 0, +1);
279 static int help_buttn(int b, int d)
283 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_A, b))
284 return help_action(gui_token(gui_click()));
285 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_EXIT, b))
286 return help_action(HELP_BACK);
291 /*---------------------------------------------------------------------------*/
293 struct state st_help = {
306 struct state st_help_rules = {
319 struct state st_help_controls = {
332 struct state st_help_modes = {
345 struct state st_help_secrets = {