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.
24 #include "st_shared.h"
32 /*---------------------------------------------------------------------------*/
34 static float real_time = 0.0f;
35 static float demo_time = 0.0f;
44 static int title_action(int i)
47 audio_play(AUD_MENU, 1.0f);
52 config_get_s(CONFIG_PLAYER, player, MAXNAM);
53 if (player[0] == '\0')
54 return goto_name(&st_set, &st_title);
56 return goto_state(&st_set);
57 case TITLE_HELP: return goto_state(&st_help);
58 case TITLE_DEMO: return goto_state(&st_demo);
59 case TITLE_CONF: return goto_state(&st_conf);
60 case TITLE_EXIT: return 0;
65 static struct level title_level;
67 static int title_enter(void)
71 /* Build the title GUI. */
73 if ((id = gui_vstack(0)))
75 gui_label(id, _("Neverball"), GUI_LRG, GUI_ALL, 0, 0);
78 if ((jd = gui_harray(id)))
82 if ((kd = gui_varray(jd)))
84 gui_start(kd, sgettext("menu^Play"), GUI_MED, TITLE_PLAY, 1);
85 gui_state(kd, sgettext("menu^Replay"), GUI_MED, TITLE_DEMO, 0);
86 gui_state(kd, sgettext("menu^Help"), GUI_MED, TITLE_HELP, 0);
87 gui_state(kd, sgettext("menu^Options"), GUI_MED, TITLE_CONF, 0);
88 gui_state(kd, sgettext("menu^Exit"), GUI_MED, TITLE_EXIT, 0);
96 /* Start the title screen music. */
98 audio_music_fade_to(0.5f, "bgm/title.ogg");
100 /* Initialize the first level of the first set for display. */
101 strcpy(title_level.file, config_data("map-rlk/title.sol"));
102 strcpy(title_level.back, "map-back/jupiter.sol");
103 strcpy(title_level.grad, "png/space.png");
105 game_init(&title_level, 0, 0);
114 static void title_leave(int id)
120 static void title_timer(int id, float dt)
122 static const char *demo = NULL;
129 case 0: /* Mode 0: Pan across title level. */
131 if (real_time <= 20.0f)
132 game_set_fly(fcosf(V_PI * real_time / 20.0f));
141 case 1: /* Mode 1: Fade out. Load demo level. */
143 if (real_time > 1.0f)
145 if ((demo = demo_pick()))
147 demo_replay_init(demo, NULL, NULL, NULL, NULL);
161 case 2: /* Mode 2: Run demo. */
163 while (demo_time < real_time)
164 if (demo_replay_step(&t))
175 case 3: /* Mode 3: Fade out. Load title level. */
177 if (real_time > 1.0f)
179 game_init(&title_level, 0, 0);
191 static int title_keybd(int c, int d)
193 if (d && c == SDLK_c && ALLOW_CHEAT)
194 config_tgl_d(CONFIG_CHEAT);
198 static int title_buttn(int b, int d)
202 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_A, b))
203 return title_action(gui_token(gui_click()));
204 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_EXIT, b))
210 /*---------------------------------------------------------------------------*/
212 static int help_enter(void)
215 _("Move the mouse or joystick to tilt the floor\\"
216 "causing the ball to roll. Roll over coins to\\"
217 "collect them. Collect coins to unlock the goal\\"
218 "and finish the level. Earn an extra ball for\\"
219 "each 100 coins collected.\\");
221 const char *s4 = _("Left and right mouse buttons rotate the view.");
222 const char *s5 = _("Hold Shift for faster view rotation.");
223 const char *s6 = _("Pause / Release Pointer");
224 const char *s7 = _("Exit / Cancel Menu");
225 const char *s8 = _("Chase View");
226 const char *s9 = _("Lazy View");
227 const char *sA = _("Manual View");
228 const char *sB = _("Comments? Problems? robert.kooima@gmail.com");
230 const char *k0 = _("Spacebar");
231 const char *k1 = _("Escape");
232 const char *k2 = SDL_GetKeyName(config_get_d(CONFIG_KEY_CAMERA_1));
233 const char *k3 = SDL_GetKeyName(config_get_d(CONFIG_KEY_CAMERA_2));
234 const char *k4 = SDL_GetKeyName(config_get_d(CONFIG_KEY_CAMERA_3));
238 if ((id = gui_vstack(0)))
240 gui_multi(id, s0, GUI_SML, GUI_ALL, gui_wht, gui_wht);
243 if ((jd = gui_harray(id)))
245 gui_label(jd, s6, GUI_SML, GUI_NE, gui_wht, gui_wht);
246 gui_label(jd, k0, GUI_SML, GUI_NW, gui_yel, gui_yel);
248 if ((jd = gui_harray(id)))
250 gui_label(jd, s7, GUI_SML, 0, gui_wht, gui_wht);
251 gui_label(jd, k1, GUI_SML, 0, gui_yel, gui_yel);
253 if ((jd = gui_harray(id)))
255 gui_label(jd, s8, GUI_SML, 0, gui_wht, gui_wht);
256 gui_label(jd, k2, GUI_SML, 0, gui_yel, gui_yel);
258 if ((jd = gui_harray(id)))
260 gui_label(jd, s9, GUI_SML, 0, gui_wht, gui_wht);
261 gui_label(jd, k3, GUI_SML, 0, gui_yel, gui_yel);
263 if ((jd = gui_harray(id)))
265 gui_label(jd, sA, GUI_SML, GUI_SE, gui_wht, gui_wht);
266 gui_label(jd, k4, GUI_SML, GUI_SW, gui_yel, gui_yel);
270 gui_label(id, s4, GUI_SML, GUI_TOP, gui_wht, gui_wht);
271 gui_label(id, s5, GUI_SML, GUI_BOT, gui_wht, gui_wht);
273 gui_label(id, sB, GUI_SML, GUI_ALL, gui_wht, gui_wht);
275 gui_layout(id, 0, 0);
280 static int help_click(int b, int d)
282 return d ? goto_state(&st_title) : 1;
285 static int help_keybd(int c, int d)
287 return d ? goto_state(&st_title) : 1;
290 static int help_buttn(int b, int d)
292 return d ? goto_state(&st_title) : 1;
295 /*---------------------------------------------------------------------------*/
297 struct state st_title = {
310 struct state st_help = {