Added low health warning visuals and sound effect. Release Build 8145.
This commit is contained in:
parent
0484908b37
commit
9133ab9e94
@ -1696,12 +1696,21 @@ void AiL::RenderHud(){
|
|||||||
RenderCastbar(CastInfo{"Exiting Level...",GetPlayer()->GetEndZoneStandTime(),"Player.End Zone Wait Time"_F});
|
RenderCastbar(CastInfo{"Exiting Level...",GetPlayer()->GetEndZoneStandTime(),"Player.End Zone Wait Time"_F});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Pixel healthOutlineCol=BLACK;
|
||||||
|
if(player->GetHealth()/player->GetMaxHealth()<="Player.Health Warning Pct"_F/100.f){
|
||||||
|
float runTimeAmt=fmod(GetRuntime(),"Player.Health Warning Flicker Time"_F*2);
|
||||||
|
if(runTimeAmt<"Player.Health Warning Flicker Time"_F){
|
||||||
|
healthOutlineCol="Player.Health Warning Outline Color"_Pixel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DrawDecal({2,2},GFX["heart_outline.png"].Decal(),{1.f,1.f},healthOutlineCol);
|
||||||
DrawDecal({2,2},GFX["heart.png"].Decal());
|
DrawDecal({2,2},GFX["heart.png"].Decal());
|
||||||
DrawDecal({2,20},GFX["mana.png"].Decal());
|
DrawDecal({2,20},GFX["mana.png"].Decal());
|
||||||
std::string text=player->GetHealth()>0?std::to_string(healthCounter.GetDisplayValue()):"X";
|
std::string text=player->GetHealth()>0?std::to_string(healthCounter.GetDisplayValue()):"X";
|
||||||
std::string text_mana=std::to_string(manaCounter.GetDisplayValue());
|
std::string text_mana=std::to_string(manaCounter.GetDisplayValue());
|
||||||
|
|
||||||
DrawShadowStringPropDecal({20,3},text,healthCounter.GetDisplayColor(),BLACK,{2,2},INFINITE);
|
DrawShadowStringPropDecal({20,3},text,healthCounter.GetDisplayColor(),healthOutlineCol,{2,2},INFINITE);
|
||||||
DrawShadowStringPropDecal({24,23},text_mana,manaCounter.GetDisplayColor(),BLACK,{1.5f,1.5f},INFINITE);
|
DrawShadowStringPropDecal({24,23},text_mana,manaCounter.GetDisplayColor(),BLACK,{1.5f,1.5f},INFINITE);
|
||||||
|
|
||||||
#pragma region Show Max Health/Max Mana
|
#pragma region Show Max Health/Max Mana
|
||||||
@ -1710,7 +1719,7 @@ void AiL::RenderHud(){
|
|||||||
|
|
||||||
std::string maxHealthText="/"+std::to_string(int(player->GetMaxHealth()));
|
std::string maxHealthText="/"+std::to_string(int(player->GetMaxHealth()));
|
||||||
float maxHealthTextHeight=GetTextSizeProp(maxHealthText).y;
|
float maxHealthTextHeight=GetTextSizeProp(maxHealthText).y;
|
||||||
DrawShadowStringPropDecal(vf2d{20,3}+healthTextSize+vf2d{1.f,-maxHealthTextHeight},maxHealthText,{200,200,200,255},BLACK,{1.f,1.f},INFINITE);
|
DrawShadowStringPropDecal(vf2d{20,3}+healthTextSize+vf2d{1.f,-maxHealthTextHeight},maxHealthText,{200,200,200,255},healthOutlineCol,{1.f,1.f},INFINITE);
|
||||||
}
|
}
|
||||||
if(GameSettings::ShowMaxMana()){
|
if(GameSettings::ShowMaxMana()){
|
||||||
vf2d manaTextSize=GetTextSizeProp(text_mana)*vf2d{1.5f,1.5f};
|
vf2d manaTextSize=GetTextSizeProp(text_mana)*vf2d{1.5f,1.5f};
|
||||||
|
@ -293,6 +293,7 @@ void Player::Update(float fElapsedTime){
|
|||||||
notificationDisplay.second=std::max(0.f,notificationDisplay.second-fElapsedTime);
|
notificationDisplay.second=std::max(0.f,notificationDisplay.second-fElapsedTime);
|
||||||
lastHitTimer=std::max(0.f,lastHitTimer-fElapsedTime);
|
lastHitTimer=std::max(0.f,lastHitTimer-fElapsedTime);
|
||||||
lastPathfindingCooldown=std::max(0.f,lastPathfindingCooldown-fElapsedTime);
|
lastPathfindingCooldown=std::max(0.f,lastPathfindingCooldown-fElapsedTime);
|
||||||
|
lowHealthSoundPlayedTimer=std::max(0.f,lowHealthSoundPlayedTimer-fElapsedTime);
|
||||||
if(hurtRumbleTime>0.f){
|
if(hurtRumbleTime>0.f){
|
||||||
hurtRumbleTime=std::max(0.f,hurtRumbleTime-fElapsedTime);
|
hurtRumbleTime=std::max(0.f,hurtRumbleTime-fElapsedTime);
|
||||||
if(hurtRumbleTime==0.f){
|
if(hurtRumbleTime==0.f){
|
||||||
@ -755,6 +756,12 @@ bool Player::Hurt(int damage,bool onUpperLevel,float z){
|
|||||||
}
|
}
|
||||||
lastHitTimer=0.05f;
|
lastHitTimer=0.05f;
|
||||||
|
|
||||||
|
if(!lowHealthSoundPlayed&&lowHealthSoundPlayedTimer==0.f&&GetHealth()/GetMaxHealth()<="Player.Health Warning Pct"_F/100.f){
|
||||||
|
SoundEffect::PlaySFX("Health Warning",SoundEffect::CENTERED);
|
||||||
|
lowHealthSoundPlayed=true;
|
||||||
|
lowHealthSoundPlayedTimer="Player.Health Warning Cooldown"_F;
|
||||||
|
}
|
||||||
|
|
||||||
if(game->GetPlayer()->GetHealth()<game->GetPlayer()->GetMaxHealth()*0.5f&&!Tutorial::TaskIsComplete(TutorialTaskName::USE_RECOVERY_ITEMS)){
|
if(game->GetPlayer()->GetHealth()<game->GetPlayer()->GetMaxHealth()*0.5f&&!Tutorial::TaskIsComplete(TutorialTaskName::USE_RECOVERY_ITEMS)){
|
||||||
Tutorial::SetNextTask(TutorialTaskName::USE_RECOVERY_ITEMS);
|
Tutorial::SetNextTask(TutorialTaskName::USE_RECOVERY_ITEMS);
|
||||||
}
|
}
|
||||||
@ -1269,6 +1276,10 @@ void Player::PerformHPRecovery(){
|
|||||||
if(GetHealth()<GetMaxHealth()){
|
if(GetHealth()<GetMaxHealth()){
|
||||||
Heal(hpRecoveryAmt);
|
Heal(hpRecoveryAmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(GetHealth()/GetMaxHealth()>"Player.Health Warning Pct"_F/100.f){
|
||||||
|
lowHealthSoundPlayed=false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const float Player::GetDamageReductionPct()const{
|
const float Player::GetDamageReductionPct()const{
|
||||||
|
@ -313,6 +313,8 @@ private:
|
|||||||
//Typical usage is playerInvoked is true on first call, and playerInvoked is false on all subsequent chained calls.
|
//Typical usage is playerInvoked is true on first call, and playerInvoked is false on all subsequent chained calls.
|
||||||
bool _SetY(float y,const bool playerInvoked=true);
|
bool _SetY(float y,const bool playerInvoked=true);
|
||||||
const bool UsingAutoAim()const;
|
const bool UsingAutoAim()const;
|
||||||
|
bool lowHealthSoundPlayed=false;
|
||||||
|
float lowHealthSoundPlayedTimer=0.f;
|
||||||
protected:
|
protected:
|
||||||
const float ATTACK_COOLDOWN="Warrior.Auto Attack.Cooldown"_F;
|
const float ATTACK_COOLDOWN="Warrior.Auto Attack.Cooldown"_F;
|
||||||
const float MAGIC_ATTACK_COOLDOWN="Wizard.Auto Attack.Cooldown"_F;
|
const float MAGIC_ATTACK_COOLDOWN="Wizard.Auto Attack.Cooldown"_F;
|
||||||
|
@ -9,7 +9,3 @@ do we need a minimap? (maybe with fog of war?) Maybe polling that once testing w
|
|||||||
should gemstones dropp from boss stages aswell? (Maybe lower droprate?)
|
should gemstones dropp from boss stages aswell? (Maybe lower droprate?)
|
||||||
|
|
||||||
Toggle for displaying error messages
|
Toggle for displaying error messages
|
||||||
|
|
||||||
Low health warning
|
|
||||||
|
|
||||||
I think thats your easiest bet, option to display as is, full numbers (which may/will get super small), and scientific notation as a middle ground if the full one does get crazy. That should please most people looking for information on those stats
|
|
@ -39,7 +39,7 @@ All rights reserved.
|
|||||||
#define VERSION_MAJOR 0
|
#define VERSION_MAJOR 0
|
||||||
#define VERSION_MINOR 5
|
#define VERSION_MINOR 5
|
||||||
#define VERSION_PATCH 1
|
#define VERSION_PATCH 1
|
||||||
#define VERSION_BUILD 8142
|
#define VERSION_BUILD 8145
|
||||||
|
|
||||||
#define stringify(a) stringify_(a)
|
#define stringify(a) stringify_(a)
|
||||||
#define stringify_(a) #a
|
#define stringify_(a) #a
|
||||||
|
@ -44,6 +44,17 @@ Player
|
|||||||
# How long the rumble lasts when getting hit by a monster.
|
# How long the rumble lasts when getting hit by a monster.
|
||||||
Hurt Rumble Time = 0.1s
|
Hurt Rumble Time = 0.1s
|
||||||
|
|
||||||
|
# Warning sound percentage threshold
|
||||||
|
Health Warning Pct = 30%
|
||||||
|
|
||||||
|
# Warning sound cooldown
|
||||||
|
Health Warning Cooldown = 8.0s
|
||||||
|
|
||||||
|
# Health Warning Flicker On/Off
|
||||||
|
Health Warning Flicker Time = 0.5s
|
||||||
|
|
||||||
|
Health Warning Outline Color = 255,0,0,255
|
||||||
|
|
||||||
# Each attack will have _N,_E,_S,_W appended to them once read in-game.
|
# Each attack will have _N,_E,_S,_W appended to them once read in-game.
|
||||||
PLAYER_ANIMATION[0] = WARRIOR_WALK
|
PLAYER_ANIMATION[0] = WARRIOR_WALK
|
||||||
PLAYER_ANIMATION[1] = WARRIOR_IDLE
|
PLAYER_ANIMATION[1] = WARRIOR_IDLE
|
||||||
|
@ -69,6 +69,11 @@ Events
|
|||||||
# Specify file names, followed by volume %. Optional min and max pitch adjustment (Defaults are 90%,110%)
|
# Specify file names, followed by volume %. Optional min and max pitch adjustment (Defaults are 90%,110%)
|
||||||
File[0] = footsteps_wet.ogg, 100%
|
File[0] = footsteps_wet.ogg, 100%
|
||||||
}
|
}
|
||||||
|
Health Warning
|
||||||
|
{
|
||||||
|
# Specify file names, followed by volume %. Optional min and max pitch adjustment (Defaults are 90%,110%)
|
||||||
|
File[0] = health_warning.ogg, 80%
|
||||||
|
}
|
||||||
Buy Item
|
Buy Item
|
||||||
{
|
{
|
||||||
# Specify file names, followed by volume %. Optional min and max pitch adjustment (Defaults are 90%,110%)
|
# Specify file names, followed by volume %. Optional min and max pitch adjustment (Defaults are 90%,110%)
|
||||||
|
@ -20,6 +20,7 @@ Images
|
|||||||
GFX_FireRing3 = fire_ring3.png
|
GFX_FireRing3 = fire_ring3.png
|
||||||
GFX_FireRing4 = fire_ring4.png
|
GFX_FireRing4 = fire_ring4.png
|
||||||
GFX_Heart = heart.png
|
GFX_Heart = heart.png
|
||||||
|
GFX_Heart_Outline = heart_outline.png
|
||||||
GFX_Laser = laser.png
|
GFX_Laser = laser.png
|
||||||
GFX_LightningBolt = lightning_bolt.png
|
GFX_LightningBolt = lightning_bolt.png
|
||||||
GFX_LightningBoltParticle1 = lightning_bolt_part1.png
|
GFX_LightningBoltParticle1 = lightning_bolt_part1.png
|
||||||
|
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 689 B After Width: | Height: | Size: 4.2 KiB |
BIN
Adventures in Lestoria/assets/heart_outline.png
Normal file
BIN
Adventures in Lestoria/assets/heart_outline.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 654 B |
BIN
Adventures in Lestoria/assets/sounds/health_warning.ogg
Normal file
BIN
Adventures in Lestoria/assets/sounds/health_warning.ogg
Normal file
Binary file not shown.
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user