mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-14 02:27:21 -07:00
Merge 7f717693b8
into 237dcfec74
This commit is contained in:
commit
681298cfa7
2 changed files with 51 additions and 44 deletions
51
soh/soh/Enhancements/BonkDamage.cpp
Normal file
51
soh/soh/Enhancements/BonkDamage.cpp
Normal file
|
@ -0,0 +1,51 @@
|
|||
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||
#include "soh/ShipInit.hpp"
|
||||
#include "./enhancementTypes.h"
|
||||
|
||||
extern "C" {
|
||||
#include "functions.h"
|
||||
#include "macros.h"
|
||||
extern PlayState* gPlayState;
|
||||
extern SaveContext gSaveContext;
|
||||
}
|
||||
|
||||
void RegisterBonkDamage() {
|
||||
COND_HOOK(OnPlayerBonk, CVarGetInteger(CVAR_ENHANCEMENT("BonkDamageMult"), BONK_DAMAGE_NONE) != BONK_DAMAGE_NONE,
|
||||
[] {
|
||||
uint16_t bonkDamage = 0;
|
||||
switch (CVarGetInteger(CVAR_ENHANCEMENT("BonkDamageMult"), BONK_DAMAGE_NONE)) {
|
||||
case BONK_DAMAGE_NONE:
|
||||
return;
|
||||
case BONK_DAMAGE_OHKO:
|
||||
gSaveContext.health = 0;
|
||||
return;
|
||||
case BONK_DAMAGE_QUARTER_HEART:
|
||||
bonkDamage = 4;
|
||||
break;
|
||||
case BONK_DAMAGE_HALF_HEART:
|
||||
bonkDamage = 8;
|
||||
break;
|
||||
case BONK_DAMAGE_1_HEART:
|
||||
bonkDamage = 16;
|
||||
break;
|
||||
case BONK_DAMAGE_2_HEARTS:
|
||||
bonkDamage = 32;
|
||||
break;
|
||||
case BONK_DAMAGE_4_HEARTS:
|
||||
bonkDamage = 64;
|
||||
break;
|
||||
case BONK_DAMAGE_8_HEARTS:
|
||||
bonkDamage = 128;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Health_ChangeBy(gPlayState, -bonkDamage);
|
||||
// Set invincibility to make Link flash red as a visual damage indicator.
|
||||
Player* player = GET_PLAYER(gPlayState);
|
||||
player->invincibilityTimer = 28;
|
||||
});
|
||||
}
|
||||
|
||||
static RegisterShipInitFunc initFunc(RegisterBonkDamage, { CVAR_ENHANCEMENT("BonkDamageMult") });
|
|
@ -283,49 +283,6 @@ void UpdateHyperEnemiesState() {
|
|||
}
|
||||
}
|
||||
|
||||
void RegisterBonkDamage() {
|
||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnPlayerBonk>([]() {
|
||||
uint8_t bonkOption = CVarGetInteger(CVAR_ENHANCEMENT("BonkDamageMult"), BONK_DAMAGE_NONE);
|
||||
if (bonkOption == BONK_DAMAGE_NONE) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (bonkOption == BONK_DAMAGE_OHKO) {
|
||||
gSaveContext.health = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
uint16_t bonkDamage = 0;
|
||||
switch (bonkOption) {
|
||||
case BONK_DAMAGE_QUARTER_HEART:
|
||||
bonkDamage = 4;
|
||||
break;
|
||||
case BONK_DAMAGE_HALF_HEART:
|
||||
bonkDamage = 8;
|
||||
break;
|
||||
case BONK_DAMAGE_1_HEART:
|
||||
bonkDamage = 16;
|
||||
break;
|
||||
case BONK_DAMAGE_2_HEARTS:
|
||||
bonkDamage = 32;
|
||||
break;
|
||||
case BONK_DAMAGE_4_HEARTS:
|
||||
bonkDamage = 64;
|
||||
break;
|
||||
case BONK_DAMAGE_8_HEARTS:
|
||||
bonkDamage = 128;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Health_ChangeBy(gPlayState, -bonkDamage);
|
||||
// Set invincibility to make Link flash red as a visual damage indicator.
|
||||
Player* player = GET_PLAYER(gPlayState);
|
||||
player->invincibilityTimer = 28;
|
||||
});
|
||||
}
|
||||
|
||||
void UpdateDirtPathFixState(int32_t sceneNum) {
|
||||
switch (sceneNum) {
|
||||
case SCENE_HYRULE_FIELD:
|
||||
|
@ -966,7 +923,6 @@ void InitMods() {
|
|||
RegisterDeleteFileOnDeath();
|
||||
RegisterHyperBosses();
|
||||
UpdateHyperEnemiesState();
|
||||
RegisterBonkDamage();
|
||||
RegisterMenuPathFix();
|
||||
RegisterMirrorModeHandler();
|
||||
RegisterResetNaviTimer();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue