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)
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");
174 const char *sD = _("Toggle Fullscreen");
176 const char *k0 = _("Spacebar");
177 const char *k1 = _("Escape");
178 const char *k2 = SDL_GetKeyName(config_get_d(CONFIG_KEY_CAMERA_1));
179 const char *k3 = SDL_GetKeyName(config_get_d(CONFIG_KEY_CAMERA_2));
180 const char *k4 = SDL_GetKeyName(config_get_d(CONFIG_KEY_CAMERA_3));
181 const char *k6 = SDL_GetKeyName(SDLK_F10);
182 const char *k7 = SDL_GetKeyName(SDLK_F11);
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);
218 if ((jd = gui_harray(id)))
220 gui_label(jd, sD, GUI_SML, GUI_SE, gui_wht, gui_wht);
221 gui_label(jd, k7, GUI_SML, GUI_SW, gui_yel, gui_yel);
226 gui_label(id, s4, GUI_SML, GUI_TOP, gui_wht, gui_wht);
227 gui_label(id, s5, GUI_SML, GUI_BOT, gui_wht, gui_wht);
232 static int help_modes(int id)
238 if ((jd = gui_hstack(id)))
242 if ((kd = gui_vstack(jd)))
244 gui_label(kd, _("Normal Mode"), GUI_SML, GUI_TOP, 0, 0);
246 _("Finish a level before the time runs out.\\"
247 "You need to collect coins in order to open the goal."),
248 GUI_SML, GUI_BOT, gui_wht, gui_wht);
252 gui_label(kd, _("Practice Mode"), GUI_SML, GUI_TOP, 0, 0);
254 _("Play without time limit or coin constraint.\\"
255 "Levels cannot be unlocked in this mode."),
256 GUI_SML, GUI_BOT, gui_wht, gui_wht);
260 gui_label(kd, _("Challenge Mode"), GUI_SML, GUI_TOP, 0, 0);
262 _("Start playing from the first level of the set.\\"
263 "You start with only four balls, do not lose them.\\"
264 "Earn an extra ball for each 100 coins collected."),
265 GUI_SML, GUI_BOT, gui_wht, gui_wht);
273 static int help_techniques(int id)
276 "Corners can be used to jump.\\"
277 "Get rolling and take aim\\"
278 "at the angle. You may be able\\"
279 "to reach new places.\\");
281 "Tilting in 2 directions increases\\"
282 "the slope. Use the manual view\\"
283 "and turn the camera by 45\\"
284 "degrees for best results.\\");
286 int w = config_get_d(CONFIG_WIDTH);
287 int h = config_get_d(CONFIG_HEIGHT);
291 if ((jd = gui_hstack(id)))
295 if ((kd = gui_varray(jd)))
297 if ((ld = gui_vstack(kd)))
300 gui_multi(ld, s0, GUI_SML, GUI_ALL, gui_wht, gui_wht);
304 if ((ld = gui_vstack(kd)))
307 gui_multi(ld, s1, GUI_SML, GUI_ALL, gui_wht, gui_wht);
314 if ((kd = gui_varray(jd)))
316 if ((ld = gui_vstack(kd)))
319 gui_image(ld, "gui/help3.jpg", w / 4, h / 4);
320 gui_state(ld, _("Watch demo"), GUI_SML, 0, 0);
323 gui_active(ld, HELP_DEMO_1, 0);
326 if ((ld = gui_vstack(kd)))
329 gui_image(ld, "gui/help4.jpg", w / 4, h / 4);
330 gui_state(ld, _("Watch demo"), GUI_SML, 0, 0);
333 gui_active(ld, HELP_DEMO_2, 0);
342 /* -------------------------------------------------------------------------- */
344 static int help_enter(void)
348 if ((id = gui_vstack(0)))
373 gui_layout(id, 0, +1);
378 static int help_buttn(int b, int d)
382 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_A, b))
383 return help_action(gui_token(gui_click()));
384 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_EXIT, b))
385 return help_action(HELP_BACK);
390 /*---------------------------------------------------------------------------*/
392 static float real_time;
393 static float demo_time;
395 static int help_demo_enter(void)
405 static void help_demo_leave(int id)
410 static void help_demo_paint(int id, float st)
415 static void help_demo_timer(int id, float dt)
423 while (demo_time < real_time)
424 if (demo_replay_step(&t))
428 goto_state(&st_help);
433 static int help_demo_buttn(int b, int d)
437 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_EXIT, b))
438 return goto_state(&st_help);
442 /*---------------------------------------------------------------------------*/
444 struct state st_help = {
457 struct state st_help_demo = {