From 065b7aa21cd611250777537a8fa752d65f1d7923 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miloslav=20=C4=8C=C3=AD=C5=BE?= Date: Mon, 5 Oct 2020 16:18:19 +0200 Subject: [PATCH] Simplify player health --- assets/level8.gif | Bin 4801 -> 4838 bytes game.h | 45 ++++++++++++++++++++------------------------- 2 files changed, 20 insertions(+), 25 deletions(-) diff --git a/assets/level8.gif b/assets/level8.gif index 302feb2cf618dc5ec372d2ac379e7cae5975c258..fd491c4340c84b07fac180c156168422d73fd046 100644 GIT binary patch delta 3692 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 ZDPa=`>=GYQ5;_dTLcGLG3=shV06VT|DI5R* diff --git a/game.h b/game.h index 136a0b3..6cd36c6 100755 --- a/game.h +++ b/game.h @@ -1891,34 +1891,32 @@ RCL_Vector2D SFG_resolveCollisionWithElement( } /** - Adds or substracts player's health, which either hurts him (negative value) - or heals him (positive value). + Adds or substracts player's health during the playing state due to taking + damage (negative value) or getting healed. Negative value will be corrected by + SFG_PLAYER_DAMAGE_MULTIPLIER in this function. */ void SFG_playerChangeHealth(int8_t healthAdd) -{ - int16_t health = SFG_player.health; - health += healthAdd; - health = RCL_clamp(health,0,SFG_PLAYER_MAX_HEALTH); - - SFG_player.health = health; +{ + if (SFG_game.state != SFG_GAME_STATE_PLAYING) + return; // don't hurt during level starting phase if (healthAdd < 0) { - SFG_player.lastHurtFrame = SFG_game.frame; - SFG_processEvent(SFG_EVENT_VIBRATE,0); - SFG_processEvent(SFG_EVENT_PLAYER_HURT,-1 * healthAdd); - } -} - -void SFG_playerChangeHealthWithMiltiplier(int8_t healthAdd) -{ - if (healthAdd < 0) healthAdd = RCL_min(-1, (((RCL_Unit) healthAdd) * SFG_PLAYER_DAMAGE_MULTIPLIER) / RCL_UNITS_PER_SQUARE); - SFG_playerChangeHealth(healthAdd); + SFG_player.lastHurtFrame = SFG_game.frame; + SFG_processEvent(SFG_EVENT_VIBRATE,0); + SFG_processEvent(SFG_EVENT_PLAYER_HURT,-1 * healthAdd); + } + + int16_t health = SFG_player.health; + health += healthAdd; + health = RCL_clamp(health,0,SFG_PLAYER_MAX_HEALTH); + + SFG_player.health = health; } uint8_t SFG_distantSoundVolume(RCL_Unit x, RCL_Unit y, RCL_Unit z) @@ -2034,7 +2032,7 @@ void SFG_createExplosion(RCL_Unit x, RCL_Unit y, RCL_Unit z) uint8_t damage = SFG_getDamageValue(SFG_WEAPON_FIRE_TYPE_FIREBALL); if (SFG_pushPlayerAway(x,y,SFG_EXPLOSION_PUSH_AWAY_DISTANCE)) - SFG_playerChangeHealthWithMiltiplier(-1 * damage); + SFG_playerChangeHealth(-1 * damage); for (uint16_t i = 0; i < SFG_currentLevel.monsterRecordCount; ++i) { @@ -2290,9 +2288,8 @@ void SFG_monsterPerformAI(SFG_MonsterRecord *monster) state = SFG_MONSTER_STATE_ATTACKING; - if (SFG_game.state == SFG_GAME_STATE_PLAYING) - SFG_playerChangeHealthWithMiltiplier( - -1 * SFG_getDamageValue(SFG_WEAPON_FIRE_TYPE_MELEE)); + SFG_playerChangeHealth( + -1 * SFG_getDamageValue(SFG_WEAPON_FIRE_TYPE_MELEE)); SFG_playGameSound(3,255); } @@ -2522,9 +2519,7 @@ void SFG_updateLevel() { eliminate = 1; - if (SFG_game.state == SFG_GAME_STATE_PLAYING) // don't hurt at start - SFG_playerChangeHealthWithMiltiplier( - -1 * SFG_getDamageValue(attackType)); + SFG_playerChangeHealth(-1 * SFG_getDamageValue(attackType)); } /* Check collision with the map (we don't use SFG_floorCollisionHeightAt