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_image(ld, "gui/help3.jpg", w / 4, h / 4);
301 gui_state(ld, _("Watch demo"), GUI_SML, 0, 0);
304 gui_active(ld, HELP_DEMO_1, 0);
307 if ((ld = gui_vstack(kd)))
310 gui_image(ld, "gui/help4.jpg", w / 4, h / 4);
311 gui_state(ld, _("Watch demo"), GUI_SML, 0, 0);
314 gui_active(ld, HELP_DEMO_2, 0);
320 if ((kd = gui_varray(jd)))
322 if ((ld = gui_vstack(kd)))
325 gui_multi(ld, s0, GUI_SML, GUI_ALL, gui_wht, gui_wht);
329 if ((ld = gui_vstack(kd)))
332 gui_multi(ld, s1, GUI_SML, GUI_ALL, gui_wht, gui_wht);
342 /* -------------------------------------------------------------------------- */
344 static int help_enter(void)
348 if ((id = gui_vstack(0)))
375 gui_layout(id, 0, +1);
380 static int help_buttn(int b, int d)
384 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_A, b))
385 return help_action(gui_token(gui_click()));
386 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_EXIT, b))
387 return help_action(HELP_BACK);
392 /*---------------------------------------------------------------------------*/
394 static float real_time;
395 static float demo_time;
397 static int help_demo_enter(void)
407 static void help_demo_leave(int id)
412 static void help_demo_paint(int id, float st)
417 static void help_demo_timer(int id, float dt)
425 while (demo_time < real_time)
426 if (demo_replay_step(&t))
430 goto_state(&st_help);
435 static int help_demo_buttn(int b, int d)
439 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_EXIT, b))
440 return goto_state(&st_help);
444 /*---------------------------------------------------------------------------*/
446 struct state st_help = {
459 struct state st_help_demo = {