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.
28 /*---------------------------------------------------------------------------*/
40 static float replay_time;
41 static float global_time;
43 /*---------------------------------------------------------------------------*/
45 static int demo_action(int i)
47 audio_play(AUD_MENU, 1.0f);
52 return goto_state(&st_title);
56 return goto_state(&st_demo);
61 return goto_state(&st_demo);
65 if (level_replay(demo_name(i)))
66 return goto_state(&st_demo_play);
71 static void demo_replay(int id, int i)
73 int w = config_get_d(CONFIG_WIDTH);
74 int h = config_get_d(CONFIG_HEIGHT);
77 if ((jd = gui_vstack(id)))
81 gui_image(jd, demo_shot(i), w / 6, h / 6);
82 gui_state(jd, demo_name(i), GUI_SML, i, 0);
95 static void demo_status(int i)
101 case MODE_CHALLENGE: ms = _("Challenge"); break;
102 case MODE_NORMAL: ms = _("Normal"); break;
103 case MODE_PRACTICE: ms = _("Practice"); break;
106 gui_set_label(name_id, demo_name(i));
107 gui_set_label(date_id, demo_str_date(i));
108 gui_set_label(player_id, demo_player(i));
109 gui_set_label(mode_id, ms);
110 gui_set_count(coin_id, demo_coins(i));
111 gui_set_clock(time_id, demo_clock(i));
114 static int demo_enter(void)
121 if ((id = gui_vstack(0)))
125 gui_label(id, _("No Replay"), GUI_MED, GUI_ALL, 0,0);
127 gui_multi(id, _("You can save replay of you games.\\Currently, there is no replay saved."), GUI_SML, GUI_ALL, gui_wht, gui_wht);
129 gui_start(id, _("Back"), GUI_SML, DEMO_BACK, 0);
133 if ((jd = gui_hstack(id)))
136 ld = gui_label(jd, _("Select Replay"), GUI_SML, GUI_ALL, 0,0);
141 if (first + DEMO_STEP < total)
142 gui_state(jd, _("Next"), GUI_SML, DEMO_NEXT, 0);
144 gui_label(jd, _("Next"), GUI_SML, GUI_ALL, gui_blk, gui_blk);
147 gui_state(jd, _("Prev"), GUI_SML, DEMO_PREV, 0);
149 gui_label(jd, _("Prev"), GUI_SML, GUI_ALL, gui_blk, gui_blk);
151 gui_start(jd, _("Back"), GUI_SML, DEMO_BACK, 0);
153 if ((jd = gui_varray(id)))
154 for (i = first; i < first + DEMO_STEP ; i += DEMO_LINE)
155 if ((kd = gui_harray(jd)))
157 for (j = i + DEMO_LINE - 1; j >= i; j--)
164 if ((jd = gui_hstack(id)))
166 if((kd = gui_vstack(jd)))
168 if ((ld = gui_harray(kd)))
170 coin_id = gui_count(ld, 100, GUI_SML, GUI_RGT);
171 gui_label(ld, _("Coins"), GUI_SML, GUI_LFT, gui_wht, gui_wht);
172 time_id = gui_clock(ld, 35000, GUI_SML, GUI_RGT);
173 gui_label(ld, _("Time"), GUI_SML, GUI_LFT, gui_wht, gui_wht);
174 name_id = gui_label(ld, demo_name(0), GUI_SML, GUI_RGT, 0, 0);
176 if ((ld = gui_harray(kd)))
178 mode_id = gui_label(ld, "..............", GUI_SML, GUI_RGT, 0, 0);
179 gui_label(ld, _("Mode"), GUI_SML, GUI_LFT, gui_wht, gui_wht);
180 player_id = gui_label(ld, demo_player(0), GUI_SML, GUI_RGT, 0, 0);
182 date_id = gui_label(kd, demo_str_date(0), GUI_SML, GUI_RGT, 0, 0);
184 if((kd = gui_vstack(jd)))
186 gui_label(kd, _("Name"), GUI_SML, GUI_LFT, gui_wht, gui_wht);
187 gui_label(kd, _("Player"), GUI_SML, GUI_LFT, gui_wht, gui_wht);
188 gui_label(kd, _("Date"), GUI_SML, GUI_LFT, gui_wht, gui_wht);
194 gui_layout(id, 0, 0);
197 audio_music_fade_to(0.5f, "bgm/inter.ogg");
202 static void demo_leave(int id)
207 static void demo_paint(int id, float st)
214 static void demo_timer(int id, float dt)
220 static void demo_point(int id, int x, int y, int dx, int dy)
222 int jd = gui_point(id, x, y);
223 int i = gui_token(jd);
229 static void demo_stick(int id, int a, int v)
231 if (config_tst_d(CONFIG_JOYSTICK_AXIS_X, a))
232 gui_pulse(gui_stick(id, v, 0), 1.2f);
233 if (config_tst_d(CONFIG_JOYSTICK_AXIS_Y, a))
234 gui_pulse(gui_stick(id, 0, v), 1.2f);
237 static int demo_click(int b, int d)
239 if (b <= 0 && d == 1)
240 return demo_action(gui_token(gui_click()));
244 static int demo_buttn(int b, int d)
248 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_A, b))
249 return demo_click(0, 1);
250 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_EXIT, b))
251 return demo_action(DEMO_BACK);
256 /*---------------------------------------------------------------------------*/
258 static int demo_play_enter(void)
262 if ((id = gui_label(0, _("Replay"), GUI_LRG, GUI_ALL, gui_blu, gui_grn)))
264 gui_layout(id, 0, 0);
276 static void demo_play_leave(int id)
281 static void demo_play_paint(int id, float st)
286 if (time_state() < 1.f)
290 static void demo_play_timer(int id, float dt)
301 /* Spin or skip depending on how fast the demo wants to run. */
303 while (replay_time < global_time)
304 if (demo_replay_step(&t))
310 goto_state(&st_demo_end);
315 static int demo_play_buttn(int b, int d)
319 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_EXIT, b))
320 return goto_state(&st_demo_end);
325 /*---------------------------------------------------------------------------*/
330 static int demo_end_action(int i)
332 audio_play(AUD_MENU, 1.0f);
335 return goto_state(&st_demo_del);
340 return goto_state(&st_demo);
344 static int demo_end_enter(void)
348 if ((id = gui_vstack(0)))
350 kd = gui_label(id, _("Replay Ends"), GUI_MED, GUI_ALL, gui_gry, gui_red);
352 if ((jd = gui_harray(id)))
354 gui_state(jd, _("Delete"), GUI_SML, DEMO_DEL, 0);
355 gui_start(jd, _("Keep"), GUI_SML, DEMO_KEEP, 1);
359 gui_layout(id, 0, 0);
361 audio_music_fade_out(2.0f);
366 static void demo_end_leave(int id)
371 static void demo_end_paint(int id, float st)
377 static void demo_end_timer(int id, float dt)
379 float g[3] = { 0.0f, -9.8f, 0.0f };
381 if (time_state() < 2.f)
388 static void demo_end_point(int id, int x, int y, int dx, int dy)
390 gui_pulse(gui_point(id, x, y), 1.2f);
393 static void demo_end_stick(int id, int a, int v)
395 if (config_tst_d(CONFIG_JOYSTICK_AXIS_X, a))
396 gui_pulse(gui_stick(id, v, 0), 1.2f);
397 if (config_tst_d(CONFIG_JOYSTICK_AXIS_Y, a))
398 gui_pulse(gui_stick(id, 0, v), 1.2f);
401 static int demo_end_click(int b, int d)
404 return demo_end_action(gui_token(gui_click()));
408 static int demo_end_buttn(int b, int d)
412 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_A, b))
413 return demo_end_action(gui_token(gui_click()));
414 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_EXIT, b))
415 return demo_end_action(DEMO_KEEP);
420 /*---------------------------------------------------------------------------*/
422 static int demo_del_action(int i)
424 audio_play(AUD_MENU, 1.0f);
426 demo_replay_stop(i == DEMO_DEL);
427 return goto_state(&st_demo);
430 static int demo_del_enter(void)
434 if ((id = gui_vstack(0)))
436 kd = gui_label(id, _("Delete Replay?"), GUI_MED, GUI_ALL, gui_red, gui_red);
438 if ((jd = gui_harray(id)))
440 gui_state(jd, _("Yes"), GUI_SML, DEMO_DEL, 0);
441 gui_start(jd, _("No"), GUI_SML, DEMO_KEEP, 1);
445 gui_layout(id, 0, 0);
447 audio_music_fade_out(2.0f);
452 static void demo_del_leave(int id)
457 static void demo_del_paint(int id, float st)
463 static void demo_del_timer(int id, float dt)
469 static void demo_del_point(int id, int x, int y, int dx, int dy)
471 gui_pulse(gui_point(id, x, y), 1.2f);
474 static void demo_del_stick(int id, int a, int v)
476 if (config_tst_d(CONFIG_JOYSTICK_AXIS_X, a))
477 gui_pulse(gui_stick(id, v, 0), 1.2f);
478 if (config_tst_d(CONFIG_JOYSTICK_AXIS_Y, a))
479 gui_pulse(gui_stick(id, 0, v), 1.2f);
482 static int demo_del_click(int b, int d)
485 return demo_del_action(gui_token(gui_click()));
489 static int demo_del_buttn(int b, int d)
493 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_A, b))
494 return demo_del_action(gui_token(gui_click()));
495 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_EXIT, b))
496 return demo_del_action(DEMO_KEEP);
501 /*---------------------------------------------------------------------------*/
503 struct state st_demo = {
516 struct state st_demo_play = {
529 struct state st_demo_end = {
542 struct state st_demo_del = {