Added P_Spawn which solely resets player's position to start of level. Added level select using number keys. Added W_ResetLevel which hard resets current level from original state. Added collision with tiles that kill, which for now simply respawns player to start of level.

This commit is contained in:
slipyx 2018-07-18 01:13:29 -04:00
parent 1e2e2f59ca
commit 352b6f481a
1 changed files with 26 additions and 2 deletions

28
game.c
View File

@ -42,12 +42,14 @@ static void G_InitAssets( SDL_Renderer* r ) {
Util_FreeTileSurfaces();
}
// sets new beginning state based on current level
void W_StartLevel() {
// sets player position to current level's player start
void P_Spawn() {
// reset view
gs->view_x = 0;
gs->view_y = 0;
gs->scroll_x = 0;
// reset player jump
gs->ps.jump_timer = 0;
gs->ps.on_ground = 0;
gs->ps.do_jump = 0;
@ -65,6 +67,12 @@ void W_StartLevel() {
gs->ps.px = gs->ps.tx * TILE_SIZE;
gs->ps.py = gs->ps.ty * TILE_SIZE;
}
// sets new beginning state for current level
void W_StartLevel() {
P_Spawn();
// reset items
gs->ps.gun = 0;
gs->ps.jetpack = 0;
@ -72,6 +80,12 @@ void W_StartLevel() {
gs->ps.check_door = 0;
}
// hard reset current level from original data
void W_ResetLevel() {
Util_GetLevel( gs->current_level, &gs->levels[gs->current_level] );
W_StartLevel();
}
// poll input
static void G_CheckInput() {
SDL_Event ev;
@ -90,6 +104,11 @@ static void G_CheckInput() {
if ( key == SDLK_AC_BACK ) { gs->quit = 1; }
// jump event
if ( key == SDLK_UP || key == SDLK_z ) { gs->ps.try_jump = 1; }
// level select
if ( key >= SDLK_0 && key <= SDLK_9 ) {
gs->current_level = key - SDLK_0;
W_ResetLevel();
}
} break;
default: break;
@ -155,6 +174,11 @@ uint8_t W_IsClear( uint16_t px, uint16_t py ) {
if ( til >= 21 && til <= 24 ) return 0;
if ( til >= 29 && til <= 30 ) return 0;
// kill tiles
if ( til == 6 || til == 25 || til == 36 ) {
P_Spawn();
}
// pickups
if ( til == 10 || til == 4 || til == 20 || (til >= 47 && til <= 52) ) {
gs->ps.check_pickup_x = tx;