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.
21 #include "st_shared.h"
25 /*---------------------------------------------------------------------------*/
35 static int tab = HELP_RULE;
37 /*---------------------------------------------------------------------------*/
39 static int help_action(int t)
41 audio_play(AUD_MENU, 1.0f);
47 return goto_state(&st_title);
51 if (demo_replay_init(config_data("gui/demo1.nbr"),
52 NULL, NULL, NULL, NULL, NULL))
53 return goto_state(&st_help_demo);
57 if (demo_replay_init(config_data("gui/demo2.nbr"),
58 NULL, NULL, NULL, NULL, NULL))
59 return goto_state(&st_help_demo);
64 return goto_state(&st_help);
70 /* -------------------------------------------------------------------------- */
72 static int help_button(int id, const char *text, int token)
74 int jd = gui_state(id, text, GUI_SML, token, (token == tab));
82 static int help_menu(int id)
88 if ((jd = gui_harray(id)))
90 help_button(jd, _("Techniques"), HELP_TECH);
91 help_button(jd, _("Modes"), HELP_MODE);
92 help_button(jd, _("Controls"), HELP_CONT);
93 help_button(jd, _("Rules"), HELP_RULE);
94 help_button(jd, _("Back"), HELP_BACK);
99 /* -------------------------------------------------------------------------- */
101 static int help_rules(int id)
104 "Move the mouse or joystick\\"
105 "or use keyboard arrows to\\"
106 "tilt the floor causing the\\"
109 "Roll over coins to collect\\"
110 "them. Collect coins to\\"
111 "unlock the goal and finish\\"
114 int w = config_get_d(CONFIG_WIDTH);
115 int h = config_get_d(CONFIG_HEIGHT);
119 if ((jd = gui_hstack(id)))
123 if ((kd = gui_varray(jd)))
125 if ((ld = gui_vstack(kd)))
128 gui_multi(ld, s0, GUI_SML, GUI_ALL, gui_wht, gui_wht);
132 if ((ld = gui_vstack(kd)))
135 gui_multi(ld, s1, GUI_SML, GUI_ALL, gui_wht, gui_wht);
142 if ((kd = gui_varray(jd)))
144 if ((ld = gui_vstack(kd)))
147 gui_image(ld, "gui/help1.jpg", 5 * w / 16, 5 * h / 16);
151 if ((ld = gui_vstack(kd)))
154 gui_image(ld, "gui/help2.jpg", 5 * w / 16, 5 * h / 16);
164 static int help_controls(int id)
166 const char *s4 = _("Left and right mouse buttons rotate the view.");
167 const char *s5 = _("Hold Shift for faster view rotation.");
168 const char *s6 = _("Pause / Release Pointer");
169 const char *s7 = _("Exit / Cancel Menu");
170 const char *s8 = _("Chase View");
171 const char *s9 = _("Lazy View");
172 const char *sA = _("Manual View");
173 const char *sC = _("Screenshot");
175 const char *k0 = _(SDL_GetKeyName((SDLKey) config_get_d(CONFIG_KEY_PAUSE)));
176 const char *k1 = _("Escape");
177 const char *k2 = SDL_GetKeyName((SDLKey) config_get_d(CONFIG_KEY_CAMERA_1));
178 const char *k3 = SDL_GetKeyName((SDLKey) config_get_d(CONFIG_KEY_CAMERA_2));
179 const char *k4 = SDL_GetKeyName((SDLKey) config_get_d(CONFIG_KEY_CAMERA_3));
180 const char *k6 = SDL_GetKeyName(SDLK_F10);
186 if ((jd = gui_harray(id)))
188 gui_label(jd, s6, GUI_SML, GUI_NE, gui_wht, gui_wht);
189 gui_label(jd, k0, GUI_SML, GUI_NW, gui_yel, gui_yel);
191 if ((jd = gui_harray(id)))
193 gui_label(jd, s7, GUI_SML, 0, gui_wht, gui_wht);
194 gui_label(jd, k1, GUI_SML, 0, gui_yel, gui_yel);
196 if ((jd = gui_harray(id)))
198 gui_label(jd, s8, GUI_SML, 0, gui_wht, gui_wht);
199 gui_label(jd, k2, GUI_SML, 0, gui_yel, gui_yel);
201 if ((jd = gui_harray(id)))
203 gui_label(jd, s9, GUI_SML, 0, gui_wht, gui_wht);
204 gui_label(jd, k3, GUI_SML, 0, gui_yel, gui_yel);
206 if ((jd = gui_harray(id)))
208 gui_label(jd, sA, GUI_SML, 0, gui_wht, gui_wht);
209 gui_label(jd, k4, GUI_SML, 0, gui_yel, gui_yel);
211 if ((jd = gui_harray(id)))
213 gui_label(jd, sC, GUI_SML, 0, gui_wht, gui_wht);
214 gui_label(jd, k6, GUI_SML, 0, gui_yel, gui_yel);
219 gui_label(id, s4, GUI_SML, GUI_TOP, gui_wht, gui_wht);
220 gui_label(id, s5, GUI_SML, GUI_BOT, gui_wht, gui_wht);
225 static int help_modes(int id)
231 if ((jd = gui_hstack(id)))
235 if ((kd = gui_vstack(jd)))
237 gui_label(kd, _("Normal Mode"), GUI_SML, GUI_TOP, 0, 0);
239 _("Finish a level before the time runs out.\\"
240 "You need to collect coins in order to open the goal."),
241 GUI_SML, GUI_BOT, gui_wht, gui_wht);
245 gui_label(kd, _("Challenge Mode"), GUI_SML, GUI_TOP, 0, 0);
247 _("Start playing from the first level of the set.\\"
248 "You start with only four balls, do not lose them.\\"
249 "Earn an extra ball for each 100 coins collected."),
250 GUI_SML, GUI_BOT, gui_wht, gui_wht);
258 static int help_techniques(int id)
261 "Corners can be used to jump.\\"
262 "Get rolling and take aim\\"
263 "at the angle. You may be able\\"
264 "to reach new places.\\");
266 "Tilting in 2 directions increases\\"
267 "the slope. Use the manual view\\"
268 "and turn the camera by 45\\"
269 "degrees for best results.\\");
271 int w = config_get_d(CONFIG_WIDTH);
272 int h = config_get_d(CONFIG_HEIGHT);
276 if ((jd = gui_hstack(id)))
280 if ((kd = gui_varray(jd)))
282 if ((ld = gui_vstack(kd)))
285 gui_image(ld, "gui/help3.jpg", w / 4, h / 4);
286 gui_state(ld, _("Watch demo"), GUI_SML, 0, 0);
289 gui_active(ld, HELP_DEMO_1, 0);
292 if ((ld = gui_vstack(kd)))
295 gui_image(ld, "gui/help4.jpg", w / 4, h / 4);
296 gui_state(ld, _("Watch demo"), GUI_SML, 0, 0);
299 gui_active(ld, HELP_DEMO_2, 0);
305 if ((kd = gui_varray(jd)))
307 if ((ld = gui_vstack(kd)))
310 gui_multi(ld, s0, GUI_SML, GUI_ALL, gui_wht, gui_wht);
314 if ((ld = gui_vstack(kd)))
317 gui_multi(ld, s1, GUI_SML, GUI_ALL, gui_wht, gui_wht);
327 /* -------------------------------------------------------------------------- */
329 static int help_enter(void)
333 if ((id = gui_vstack(0)))
339 case HELP_RULE: help_rules(id); break;
340 case HELP_CONT: help_controls(id); break;
341 case HELP_MODE: help_modes(id); break;
342 case HELP_TECH: help_techniques(id); break;
348 gui_layout(id, 0, +1);
353 static int help_buttn(int b, int d)
357 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_A, b))
358 return help_action(gui_token(gui_click()));
359 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_EXIT, b))
360 return help_action(HELP_BACK);
365 /*---------------------------------------------------------------------------*/
367 static int help_demo_enter(void)
374 static void help_demo_leave(int id)
379 static void help_demo_paint(int id, float t)
384 static void help_demo_timer(int id, float dt)
388 if (!demo_replay_step(dt))
389 goto_state(&st_help);
392 static int help_demo_buttn(int b, int d)
396 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_EXIT, b))
397 return goto_state(&st_help);
401 /*---------------------------------------------------------------------------*/
403 struct state st_help = {
417 struct state st_help_demo = {