-/*
+/*
* Copyright (C) 2003 Robert Kooima
*
* NEVERBALL is free software; you can redistribute it and/or modify
#include "hud.h"
#include "game.h"
#include "demo.h"
-#include "level.h"
+#include "levels.h"
#include "audio.h"
#include "config.h"
#include "st_shared.h"
#include "st_play.h"
-#include "st_fail.h"
-#include "st_goal.h"
+#include "st_play_end.h"
#include "st_over.h"
/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
+static int abort_play(void)
+{
+ if (curr_lg()->mode == MODE_SINGLE)
+ return 0;
+ else
+ return goto_state(&st_over);
+}
+
static int play_ready_enter(void)
{
int id;
if (config_tst_d(CONFIG_JOYSTICK_BUTTON_A, b))
return goto_state(&st_play_loop);
if (config_tst_d(CONFIG_JOYSTICK_BUTTON_EXIT, b))
- return goto_state(&st_over);
+ return abort_play();
}
return 1;
}
if (config_tst_d(CONFIG_JOYSTICK_BUTTON_A, b))
return goto_state(&st_play_loop);
if (config_tst_d(CONFIG_JOYSTICK_BUTTON_EXIT, b))
- return goto_state(&st_over);
+ return abort_play();
}
return 1;
}
/*---------------------------------------------------------------------------*/
+static int nohud = 0;
+
static int play_loop_enter(void)
{
int id;
game_set_fly(0.f);
view_rotate = 0;
+ hud_view_pulse(config_get_d(CONFIG_CAMERA));
+
+ nohud = 0;
+
hud_update(0);
return id;
static void play_loop_paint(int id, float st)
{
game_draw(0, st);
- hud_paint();
+ if (!nohud)
+ hud_paint();
if (time_state() < 1.f)
gui_paint(id);
float g[3] = { 0.0f, -9.8f, 0.0f };
+ int state, state_value;
+
at = (7 * at + dt) / 8;
gui_timer(id, at);
hud_timer(at);
game_set_rot(view_rotate * k);
- switch (game_step(g, at, 1))
+ state = game_step(g, at, &state_value);
+ if (state)
{
- case GAME_TIME: level_stop(GAME_TIME); goto_state(&st_time_out); break;
- case GAME_FALL: level_stop(GAME_FALL); goto_state(&st_fall_out); break;
- case GAME_GOAL: level_stop(GAME_GOAL); goto_state(&st_goal); break;
+ level_stop(state, state_value, curr_clock(), curr_coins());
+ goto_state(&st_play_end);
}
game_step_fade(dt);
if (d && c == SDLK_F12)
return goto_state(&st_look);
-
+
+ if (d && c == SDLK_F6)
+ nohud = !nohud;
+
/* Cheat */
if (d && c == SDLK_c && config_get_d(CONFIG_CHEAT))
{
- level_stop(GAME_GOAL);
- return goto_state(&st_goal);
+ level_stop(GAME_GOAL, 0, curr_clock(), curr_coins());
+ return goto_state(&st_play_end);
}
return 1;
}
if (d == 1)
{
if (config_tst_d(CONFIG_JOYSTICK_BUTTON_EXIT, b))
- {
- level_stop(GAME_NONE);
- return goto_state(&st_over);
- }
+ {
+ level_stop(GAME_NONE, 0, curr_clock(), curr_coins());
+ return abort_play();
+ }
if (config_tst_d(CONFIG_JOYSTICK_BUTTON_R, b))
view_rotate = +1;
static int look_keybd(int c, int d)
{
if (d && c == SDLK_F12)
- return goto_state(&st_play_loop);
+ return goto_state(&st_play_loop);
return 1;
}
static int look_buttn(int b, int d)
{
if (d && config_tst_d(CONFIG_JOYSTICK_BUTTON_EXIT, b))
- return goto_state(&st_play_loop);
+ return goto_state(&st_play_loop);
return 1;
}