From 8fe888b8708c6ee8a331a5a5bbadfdcd7532f1be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miloslav=20=C4=8C=C3=AD=C5=BE?= Date: Fri, 2 Oct 2020 17:40:36 +0200 Subject: [PATCH] Fix player update --- game.h | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/game.h b/game.h index 9bac128..640410d 100755 --- a/game.h +++ b/game.h @@ -1331,6 +1331,12 @@ void SFG_initPlayer() SFG_player.camera.position.y = RCL_UNITS_PER_SQUARE / 2 + SFG_currentLevel.levelPointer->playerStart[1] * RCL_UNITS_PER_SQUARE; + SFG_player.squarePosition[0] = + SFG_player.camera.position.x / RCL_UNITS_PER_SQUARE; + + SFG_player.squarePosition[1] = + SFG_player.camera.position.y / RCL_UNITS_PER_SQUARE; + SFG_player.camera.height = SFG_floorHeightAt( SFG_currentLevel.levelPointer->playerStart[0], @@ -3000,6 +3006,17 @@ void SFG_drawLevelStartOverlay() SFG_FONT_SIZE_MEDIUM,7,255,0); } +/** + Sets player's height to match the floor height below him. +*/ +void SFG_updatePlayerHeight() +{ + SFG_player.camera.height = + SFG_floorCollisionHeightAt( + SFG_player.squarePosition[0],SFG_player.squarePosition[1]) + + RCL_CAMERA_COLL_HEIGHT_BELOW; +} + /** Part of SFG_gameStep() for SFG_GAME_STATE_PLAYING. */ @@ -3010,6 +3027,7 @@ void SFG_gameStepPlaying() SFG_keyIsDown(SFG_KEY_MENU)) { SFG_setGameState(SFG_GAME_STATE_MENU); + SFG_playGameSound(3,SFG_MENU_CLICK_VOLUME); return; } @@ -3823,7 +3841,8 @@ void SFG_gameStep() // player die animation (lose) SFG_updateLevel(); // let monsters and other things continue moving - + SFG_updatePlayerHeight(); // in case player is on elevator + int32_t t = SFG_game.frameTime - SFG_game.stateChangeTime; RCL_Unit h = SFG_floorHeightAt(SFG_player.squarePosition[0], @@ -3902,13 +3921,17 @@ void SFG_gameStep() if (((SFG_game.frameTime - SFG_game.stateChangeTime) > SFG_STORYTEXT_DURATION) && (SFG_keyIsDown(SFG_KEY_A) || SFG_keyIsDown(SFG_KEY_B))) + { SFG_setGameState(SFG_GAME_STATE_MENU); + SFG_playGameSound(3,SFG_MENU_CLICK_VOLUME); + } break; case SFG_GAME_STATE_LEVEL_START: { SFG_updateLevel(); + SFG_updatePlayerHeight(); // in case player is on elevator if (SFG_currentLevel.levelNumber > (SFG_game.save[0] & 0x0f)) {