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 /*---------------------------------------------------------------------------*/
27 struct state st_help_demo;
29 /*---------------------------------------------------------------------------*/
39 static int tab = HELP_RULE;
41 /*---------------------------------------------------------------------------*/
43 static int help_action(int t)
45 audio_play(AUD_MENU, 1.0f);
51 return goto_state(&st_title);
55 demo_replay_init(config_data("gui/demo1.nbr"), NULL);
56 return goto_state(&st_help_demo);
60 demo_replay_init(config_data("gui/demo2.nbr"), NULL);
61 return goto_state(&st_help_demo);
66 return goto_state(&st_help);
72 /* -------------------------------------------------------------------------- */
74 static int help_button(int id, const char *text, int token)
76 int jd = gui_state(id, text, GUI_SML, token, (token == tab));
84 static int help_menu(int id)
90 if ((jd = gui_harray(id)))
92 help_button(jd, _("Techniques"), HELP_TECH);
93 help_button(jd, _("Modes"), HELP_MODE);
94 help_button(jd, _("Controls"), HELP_CONT);
95 help_button(jd, _("Rules"), HELP_RULE);
96 help_button(jd, _("Back"), HELP_BACK);
101 /* -------------------------------------------------------------------------- */
103 static int help_rules(int id)
106 "Move the mouse or joystick\\"
107 "or use keyboard arrows to\\"
108 "tilt the floor causing the\\"
111 "Roll over coins to collect\\"
112 "them. Collect coins to\\"
113 "unlock the goal and finish\\"
116 int w = config_get_d(CONFIG_WIDTH);
117 int h = config_get_d(CONFIG_HEIGHT);
121 if ((jd = gui_hstack(id)))
125 if ((kd = gui_varray(jd)))
127 if ((ld = gui_vstack(kd)))
130 gui_multi(ld, s0, GUI_SML, GUI_ALL, gui_wht, gui_wht);
134 if ((ld = gui_vstack(kd)))
137 gui_multi(ld, s1, GUI_SML, GUI_ALL, gui_wht, gui_wht);
144 if ((kd = gui_varray(jd)))
146 if ((ld = gui_vstack(kd)))
149 gui_image(ld, "gui/help1.jpg", 5 * w / 16, 5 * h / 16);
153 if ((ld = gui_vstack(kd)))
156 gui_image(ld, "gui/help2.jpg", 5 * w / 16, 5 * h / 16);
166 static int help_controls(int id)
168 const char *s4 = _("Left and right mouse buttons rotate the view.");
169 const char *s5 = _("Hold Shift for faster view rotation.");
170 const char *s6 = _("Pause / Release Pointer");
171 const char *s7 = _("Exit / Cancel Menu");
172 const char *s8 = _("Chase View");
173 const char *s9 = _("Lazy View");
174 const char *sA = _("Manual View");
175 const char *sC = _("Screenshot");
177 const char *k0 = _(SDL_GetKeyName((SDLKey) config_get_d(CONFIG_KEY_PAUSE)));
178 const char *k1 = _("Escape");
179 const char *k2 = SDL_GetKeyName((SDLKey) config_get_d(CONFIG_KEY_CAMERA_1));
180 const char *k3 = SDL_GetKeyName((SDLKey) config_get_d(CONFIG_KEY_CAMERA_2));
181 const char *k4 = SDL_GetKeyName((SDLKey) config_get_d(CONFIG_KEY_CAMERA_3));
182 const char *k6 = SDL_GetKeyName(SDLK_F10);
188 if ((jd = gui_harray(id)))
190 gui_label(jd, s6, GUI_SML, GUI_NE, gui_wht, gui_wht);
191 gui_label(jd, k0, GUI_SML, GUI_NW, gui_yel, gui_yel);
193 if ((jd = gui_harray(id)))
195 gui_label(jd, s7, GUI_SML, 0, gui_wht, gui_wht);
196 gui_label(jd, k1, GUI_SML, 0, gui_yel, gui_yel);
198 if ((jd = gui_harray(id)))
200 gui_label(jd, s8, GUI_SML, 0, gui_wht, gui_wht);
201 gui_label(jd, k2, GUI_SML, 0, gui_yel, gui_yel);
203 if ((jd = gui_harray(id)))
205 gui_label(jd, s9, GUI_SML, 0, gui_wht, gui_wht);
206 gui_label(jd, k3, GUI_SML, 0, gui_yel, gui_yel);
208 if ((jd = gui_harray(id)))
210 gui_label(jd, sA, GUI_SML, 0, gui_wht, gui_wht);
211 gui_label(jd, k4, GUI_SML, 0, gui_yel, gui_yel);
213 if ((jd = gui_harray(id)))
215 gui_label(jd, sC, GUI_SML, 0, gui_wht, gui_wht);
216 gui_label(jd, k6, GUI_SML, 0, gui_yel, gui_yel);
221 gui_label(id, s4, GUI_SML, GUI_TOP, gui_wht, gui_wht);
222 gui_label(id, s5, GUI_SML, GUI_BOT, gui_wht, gui_wht);
227 static int help_modes(int id)
233 if ((jd = gui_hstack(id)))
237 if ((kd = gui_vstack(jd)))
239 gui_label(kd, _("Normal Mode"), GUI_SML, GUI_TOP, 0, 0);
241 _("Finish a level before the time runs out.\\"
242 "You need to collect coins in order to open the goal."),
243 GUI_SML, GUI_BOT, gui_wht, gui_wht);
247 gui_label(kd, _("Practice Mode"), GUI_SML, GUI_TOP, 0, 0);
249 _("Play without time limit or coin constraint.\\"
250 "Levels cannot be unlocked in this mode."),
251 GUI_SML, GUI_BOT, gui_wht, gui_wht);
255 gui_label(kd, _("Challenge Mode"), GUI_SML, GUI_TOP, 0, 0);
257 _("Start playing from the first level of the set.\\"
258 "You start with only four balls, do not lose them.\\"
259 "Earn an extra ball for each 100 coins collected."),
260 GUI_SML, GUI_BOT, gui_wht, gui_wht);
268 static int help_techniques(int id)
271 "Corners can be used to jump.\\"
272 "Get rolling and take aim\\"
273 "at the angle. You may be able\\"
274 "to reach new places.\\");
276 "Tilting in 2 directions increases\\"
277 "the slope. Use the manual view\\"
278 "and turn the camera by 45\\"
279 "degrees for best results.\\");
281 int w = config_get_d(CONFIG_WIDTH);
282 int h = config_get_d(CONFIG_HEIGHT);
286 if ((jd = gui_hstack(id)))
290 if ((kd = gui_varray(jd)))
292 if ((ld = gui_vstack(kd)))
295 gui_image(ld, "gui/help3.jpg", w / 4, h / 4);
296 gui_state(ld, _("Watch demo"), GUI_SML, 0, 0);
299 gui_active(ld, HELP_DEMO_1, 0);
302 if ((ld = gui_vstack(kd)))
305 gui_image(ld, "gui/help4.jpg", w / 4, h / 4);
306 gui_state(ld, _("Watch demo"), GUI_SML, 0, 0);
309 gui_active(ld, HELP_DEMO_2, 0);
315 if ((kd = gui_varray(jd)))
317 if ((ld = gui_vstack(kd)))
320 gui_multi(ld, s0, GUI_SML, GUI_ALL, gui_wht, gui_wht);
324 if ((ld = gui_vstack(kd)))
327 gui_multi(ld, s1, GUI_SML, GUI_ALL, gui_wht, gui_wht);
337 /* -------------------------------------------------------------------------- */
339 static int help_enter(void)
343 if ((id = gui_vstack(0)))
349 case HELP_RULE: help_rules(id); break;
350 case HELP_CONT: help_controls(id); break;
351 case HELP_MODE: help_modes(id); break;
352 case HELP_TECH: help_techniques(id); break;
358 gui_layout(id, 0, +1);
363 static int help_buttn(int b, int d)
367 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_A, b))
368 return help_action(gui_token(gui_click()));
369 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_EXIT, b))
370 return help_action(HELP_BACK);
375 /*---------------------------------------------------------------------------*/
377 static int help_demo_enter(void)
384 static void help_demo_leave(int id)
389 static void help_demo_paint(int id, float st)
394 static void help_demo_timer(int id, float dt)
398 if (!demo_replay_step(dt))
399 goto_state(&st_help);
402 static int help_demo_buttn(int b, int d)
406 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_EXIT, b))
407 return goto_state(&st_help);
411 /*---------------------------------------------------------------------------*/
413 struct state st_help = {
427 struct state st_help_demo = {