Simplify player health

This commit is contained in:
Miloslav Číž 2020-10-05 16:18:19 +02:00
parent 2fb4b67c1d
commit 065b7aa21c
2 changed files with 20 additions and 25 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

45
game.h
View File

@ -1891,34 +1891,32 @@ RCL_Vector2D SFG_resolveCollisionWithElement(
} }
/** /**
Adds or substracts player's health, which either hurts him (negative value) Adds or substracts player's health during the playing state due to taking
or heals him (positive value). 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) void SFG_playerChangeHealth(int8_t healthAdd)
{ {
int16_t health = SFG_player.health; if (SFG_game.state != SFG_GAME_STATE_PLAYING)
health += healthAdd; return; // don't hurt during level starting phase
health = RCL_clamp(health,0,SFG_PLAYER_MAX_HEALTH);
SFG_player.health = health;
if (healthAdd < 0) 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 = healthAdd =
RCL_min(-1, RCL_min(-1,
(((RCL_Unit) healthAdd) * SFG_PLAYER_DAMAGE_MULTIPLIER) / (((RCL_Unit) healthAdd) * SFG_PLAYER_DAMAGE_MULTIPLIER) /
RCL_UNITS_PER_SQUARE); 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) 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); uint8_t damage = SFG_getDamageValue(SFG_WEAPON_FIRE_TYPE_FIREBALL);
if (SFG_pushPlayerAway(x,y,SFG_EXPLOSION_PUSH_AWAY_DISTANCE)) 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) 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; state = SFG_MONSTER_STATE_ATTACKING;
if (SFG_game.state == SFG_GAME_STATE_PLAYING) SFG_playerChangeHealth(
SFG_playerChangeHealthWithMiltiplier( -1 * SFG_getDamageValue(SFG_WEAPON_FIRE_TYPE_MELEE));
-1 * SFG_getDamageValue(SFG_WEAPON_FIRE_TYPE_MELEE));
SFG_playGameSound(3,255); SFG_playGameSound(3,255);
} }
@ -2522,9 +2519,7 @@ void SFG_updateLevel()
{ {
eliminate = 1; eliminate = 1;
if (SFG_game.state == SFG_GAME_STATE_PLAYING) // don't hurt at start SFG_playerChangeHealth(-1 * SFG_getDamageValue(attackType));
SFG_playerChangeHealthWithMiltiplier(
-1 * SFG_getDamageValue(attackType));
} }
/* Check collision with the map (we don't use SFG_floorCollisionHeightAt /* Check collision with the map (we don't use SFG_floorCollisionHeightAt