mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-20 21:33:40 -07:00
shipinit bonk damage
This commit is contained in:
parent
237dcfec74
commit
7f717693b8
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) {
|
void UpdateDirtPathFixState(int32_t sceneNum) {
|
||||||
switch (sceneNum) {
|
switch (sceneNum) {
|
||||||
case SCENE_HYRULE_FIELD:
|
case SCENE_HYRULE_FIELD:
|
||||||
|
@ -966,7 +923,6 @@ void InitMods() {
|
||||||
RegisterDeleteFileOnDeath();
|
RegisterDeleteFileOnDeath();
|
||||||
RegisterHyperBosses();
|
RegisterHyperBosses();
|
||||||
UpdateHyperEnemiesState();
|
UpdateHyperEnemiesState();
|
||||||
RegisterBonkDamage();
|
|
||||||
RegisterMenuPathFix();
|
RegisterMenuPathFix();
|
||||||
RegisterMirrorModeHandler();
|
RegisterMirrorModeHandler();
|
||||||
RegisterResetNaviTimer();
|
RegisterResetNaviTimer();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue