Modularize enemy defeat count hook & fix counting bugs (#5885)
This commit is contained in:
223
soh/soh/Enhancements/GameplayStats/EnemyDefeatCounts.cpp
Normal file
223
soh/soh/Enhancements/GameplayStats/EnemyDefeatCounts.cpp
Normal file
@@ -0,0 +1,223 @@
|
|||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||||
|
#include "soh/ShipInit.hpp"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include "src/overlays/actors/ovl_En_Bb/z_en_bb.h"
|
||||||
|
#include "src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.h"
|
||||||
|
#include "src/overlays/actors/ovl_En_Mb/z_en_mb.h"
|
||||||
|
#include "src/overlays/actors/ovl_En_Tite/z_en_tite.h"
|
||||||
|
#include "src/overlays/actors/ovl_En_Zf/z_en_zf.h"
|
||||||
|
#include "src/overlays/actors/ovl_En_Wf/z_en_wf.h"
|
||||||
|
#include "src/overlays/actors/ovl_En_Reeba/z_en_reeba.h"
|
||||||
|
#include "src/overlays/actors/ovl_En_Peehat/z_en_peehat.h"
|
||||||
|
#include "src/overlays/actors/ovl_En_Po_Field/z_en_po_field.h"
|
||||||
|
#include "src/overlays/actors/ovl_En_Poh/z_en_poh.h"
|
||||||
|
#include "src/overlays/actors/ovl_En_Tp/z_en_tp.h"
|
||||||
|
#include "src/overlays/actors/ovl_En_Firefly/z_en_firefly.h"
|
||||||
|
|
||||||
|
extern SaveContext gSaveContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void IncrementEnemyDefeatCount(GameplayStatCount countType) {
|
||||||
|
gSaveContext.ship.stats.count[countType]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define ENEMY_DEFEAT_COUNT(actorID, func) \
|
||||||
|
COND_ID_HOOK(OnEnemyDefeat, actorID, true, [](void* refActor) { func(static_cast<Actor*>(refActor)); });
|
||||||
|
|
||||||
|
#define ENEMY_DEFEAT_COUNT_UNIQUE(actorID, countType) \
|
||||||
|
COND_ID_HOOK(OnEnemyDefeat, actorID, true, [](void*) { IncrementEnemyDefeatCount(countType); });
|
||||||
|
|
||||||
|
static void EnemyDefeatCounts_EnBb(Actor* actor) {
|
||||||
|
GameplayStatCount countType;
|
||||||
|
switch (actor->params) {
|
||||||
|
case ENBB_GREEN:
|
||||||
|
case ENBB_GREEN_BIG:
|
||||||
|
countType = COUNT_ENEMIES_DEFEATED_BUBBLE_GREEN;
|
||||||
|
break;
|
||||||
|
case ENBB_BLUE:
|
||||||
|
countType = COUNT_ENEMIES_DEFEATED_BUBBLE_BLUE;
|
||||||
|
break;
|
||||||
|
case ENBB_WHITE:
|
||||||
|
countType = COUNT_ENEMIES_DEFEATED_BUBBLE_WHITE;
|
||||||
|
break;
|
||||||
|
case ENBB_RED:
|
||||||
|
countType = COUNT_ENEMIES_DEFEATED_BUBBLE_RED;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
IncrementEnemyDefeatCount(countType);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void EnemyDefeatCounts_EnDekubaba(Actor* actor) {
|
||||||
|
GameplayStatCount countType =
|
||||||
|
(actor->params == DEKUBABA_BIG) ? COUNT_ENEMIES_DEFEATED_DEKU_BABA_BIG : COUNT_ENEMIES_DEFEATED_DEKU_BABA;
|
||||||
|
IncrementEnemyDefeatCount(countType);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void EnemyDefeatCounts_EnZf(Actor* actor) {
|
||||||
|
GameplayStatCount countType =
|
||||||
|
(actor->params == ENZF_TYPE_DINOLFOS) ? COUNT_ENEMIES_DEFEATED_DINOLFOS : COUNT_ENEMIES_DEFEATED_LIZALFOS;
|
||||||
|
IncrementEnemyDefeatCount(countType);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void EnemyDefeatCounts_EnRd(Actor* actor) {
|
||||||
|
GameplayStatCount countType = (actor->params >= -1) ? COUNT_ENEMIES_DEFEATED_REDEAD : COUNT_ENEMIES_DEFEATED_GIBDO;
|
||||||
|
IncrementEnemyDefeatCount(countType);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void EnemyDefeatCounts_EnIk(Actor* actor) {
|
||||||
|
GameplayStatCount countType =
|
||||||
|
(actor->params == 0) ? COUNT_ENEMIES_DEFEATED_IRON_KNUCKLE_NABOORU : COUNT_ENEMIES_DEFEATED_IRON_KNUCKLE;
|
||||||
|
IncrementEnemyDefeatCount(countType);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void EnemyDefeatCounts_EnFirefly(Actor* actor) {
|
||||||
|
GameplayStatCount countType;
|
||||||
|
switch (actor->params) {
|
||||||
|
case KEESE_NORMAL_FLY:
|
||||||
|
case KEESE_NORMAL_PERCH:
|
||||||
|
countType = COUNT_ENEMIES_DEFEATED_KEESE;
|
||||||
|
break;
|
||||||
|
case KEESE_FIRE_FLY:
|
||||||
|
case KEESE_FIRE_PERCH:
|
||||||
|
countType = COUNT_ENEMIES_DEFEATED_KEESE_FIRE;
|
||||||
|
break;
|
||||||
|
case KEESE_ICE_FLY:
|
||||||
|
countType = COUNT_ENEMIES_DEFEATED_KEESE_ICE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
IncrementEnemyDefeatCount(countType);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void EnemyDefeatCounts_EnTp(Actor* actor) {
|
||||||
|
// Only count the head, otherwise each body segment will increment
|
||||||
|
if (actor->params == TAILPASARAN_HEAD) {
|
||||||
|
IncrementEnemyDefeatCount(COUNT_ENEMIES_DEFEATED_TAILPASARAN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void EnemyDefeatCounts_EnReeba(Actor* actor) {
|
||||||
|
EnReeba* reeba = (EnReeba*)actor;
|
||||||
|
GameplayStatCount countType = reeba->isBig ? COUNT_ENEMIES_DEFEATED_LEEVER_BIG : COUNT_ENEMIES_DEFEATED_LEEVER;
|
||||||
|
IncrementEnemyDefeatCount(countType);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void EnemyDefeatCounts_EnMb(Actor* actor) {
|
||||||
|
GameplayStatCount countType =
|
||||||
|
(actor->params == 0) ? COUNT_ENEMIES_DEFEATED_MOBLIN_CLUB : COUNT_ENEMIES_DEFEATED_MOBLIN;
|
||||||
|
IncrementEnemyDefeatCount(countType);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void EnemyDefeatCounts_EnPeehat(Actor* actor) {
|
||||||
|
GameplayStatCount countType =
|
||||||
|
(actor->params == PEAHAT_TYPE_LARVA) ? COUNT_ENEMIES_DEFEATED_PEAHAT_LARVA : COUNT_ENEMIES_DEFEATED_PEAHAT;
|
||||||
|
IncrementEnemyDefeatCount(countType);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void EnemyDefeatCounts_EnPoh(Actor* actor) {
|
||||||
|
GameplayStatCount countType = (actor->params == EN_POH_FLAT || actor->params == EN_POH_SHARP)
|
||||||
|
? COUNT_ENEMIES_DEFEATED_POE_COMPOSER
|
||||||
|
: COUNT_ENEMIES_DEFEATED_POE;
|
||||||
|
IncrementEnemyDefeatCount(countType);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void EnemyDefeatCounts_EnPoField(Actor* actor) {
|
||||||
|
GameplayStatCount countType =
|
||||||
|
(actor->params == EN_PO_FIELD_BIG) ? COUNT_ENEMIES_DEFEATED_POE_BIG : COUNT_ENEMIES_DEFEATED_POE;
|
||||||
|
IncrementEnemyDefeatCount(countType);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void EnemyDefeatCounts_EnSt(Actor* actor) {
|
||||||
|
GameplayStatCount countType =
|
||||||
|
(actor->params == 1) ? COUNT_ENEMIES_DEFEATED_SKULLTULA_BIG : COUNT_ENEMIES_DEFEATED_SKULLTULA;
|
||||||
|
IncrementEnemyDefeatCount(countType);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void EnemyDefeatCounts_EnSw(Actor* actor) {
|
||||||
|
GameplayStatCount countType;
|
||||||
|
if (((actor->params & 0xE000) >> 0xD) != 0) {
|
||||||
|
countType = COUNT_ENEMIES_DEFEATED_SKULLTULA_GOLD;
|
||||||
|
} else {
|
||||||
|
countType = COUNT_ENEMIES_DEFEATED_SKULLWALLTULA;
|
||||||
|
}
|
||||||
|
|
||||||
|
IncrementEnemyDefeatCount(countType);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void EnemyDefeatCounts_EnTite(Actor* actor) {
|
||||||
|
GameplayStatCount countType =
|
||||||
|
(actor->params == TEKTITE_BLUE) ? COUNT_ENEMIES_DEFEATED_TEKTITE_BLUE : COUNT_ENEMIES_DEFEATED_TEKTITE_RED;
|
||||||
|
IncrementEnemyDefeatCount(countType);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void EnemyDefeatCounts_EnWf(Actor* actor) {
|
||||||
|
GameplayStatCount countType =
|
||||||
|
(actor->params == WOLFOS_WHITE) ? COUNT_ENEMIES_DEFEATED_WOLFOS_WHITE : COUNT_ENEMIES_DEFEATED_WOLFOS;
|
||||||
|
IncrementEnemyDefeatCount(countType);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void RegisterEnemyDefeatCounts() {
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_ANUBICE, COUNT_ENEMIES_DEFEATED_ANUBIS);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_AM, COUNT_ENEMIES_DEFEATED_ARMOS);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_CLEAR_TAG, COUNT_ENEMIES_DEFEATED_ARWING);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_VALI, COUNT_ENEMIES_DEFEATED_BARI);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_VM, COUNT_ENEMIES_DEFEATED_BEAMOS);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_BIGOKUTA, COUNT_ENEMIES_DEFEATED_BIG_OCTO);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_BILI, COUNT_ENEMIES_DEFEATED_BIRI);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_DNS, COUNT_ENEMIES_DEFEATED_BUSINESS_SCRUB);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_TORCH2, COUNT_ENEMIES_DEFEATED_DARK_LINK);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_DH, COUNT_ENEMIES_DEFEATED_DEAD_HAND);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_HINTNUTS, COUNT_ENEMIES_DEFEATED_DEKU_SCRUB);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_DODONGO, COUNT_ENEMIES_DEFEATED_DODONGO);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_DODOJR, COUNT_ENEMIES_DEFEATED_DODONGO_BABY);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_DOOR_KILLER, COUNT_ENEMIES_DEFEATED_DOOR_TRAP);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_FD, COUNT_ENEMIES_DEFEATED_FLARE_DANCER);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_FLOORMAS, COUNT_ENEMIES_DEFEATED_FLOORMASTER);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_TUBO_TRAP, COUNT_ENEMIES_DEFEATED_FLYING_POT);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_YUKABYUN, COUNT_ENEMIES_DEFEATED_FLOOR_TILE);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_FZ, COUNT_ENEMIES_DEFEATED_FREEZARD);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_GELDB, COUNT_ENEMIES_DEFEATED_GERUDO_THIEF);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_GOMA, COUNT_ENEMIES_DEFEATED_GOHMA_LARVA);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_CROW, COUNT_ENEMIES_DEFEATED_GUAY);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_RR, COUNT_ENEMIES_DEFEATED_LIKE_LIKE);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_DEKUNUTS, COUNT_ENEMIES_DEFEATED_MAD_SCRUB);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_OKUTA, COUNT_ENEMIES_DEFEATED_OCTOROK);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_BA, COUNT_ENEMIES_DEFEATED_PARASITIC_TENTACLE);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_PO_SISTERS, COUNT_ENEMIES_DEFEATED_POE_SISTERS);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_BUBBLE, COUNT_ENEMIES_DEFEATED_SHABOM);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_SB, COUNT_ENEMIES_DEFEATED_SHELLBLADE);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_SKJ, COUNT_ENEMIES_DEFEATED_SKULL_KID);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_NY, COUNT_ENEMIES_DEFEATED_SPIKE);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_SKB, COUNT_ENEMIES_DEFEATED_STALCHILD);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_TEST, COUNT_ENEMIES_DEFEATED_STALFOS);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_EIYER, COUNT_ENEMIES_DEFEATED_STINGER);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_WEIYER, COUNT_ENEMIES_DEFEATED_STINGER);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_BW, COUNT_ENEMIES_DEFEATED_TORCH_SLUG);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_WALLMAS, COUNT_ENEMIES_DEFEATED_WALLMASTER);
|
||||||
|
ENEMY_DEFEAT_COUNT_UNIQUE(ACTOR_EN_KAREBABA, COUNT_ENEMIES_DEFEATED_WITHERED_DEKU_BABA);
|
||||||
|
|
||||||
|
ENEMY_DEFEAT_COUNT(ACTOR_EN_BB, EnemyDefeatCounts_EnBb);
|
||||||
|
ENEMY_DEFEAT_COUNT(ACTOR_EN_DEKUBABA, EnemyDefeatCounts_EnDekubaba);
|
||||||
|
ENEMY_DEFEAT_COUNT(ACTOR_EN_ZF, EnemyDefeatCounts_EnZf);
|
||||||
|
ENEMY_DEFEAT_COUNT(ACTOR_EN_RD, EnemyDefeatCounts_EnRd);
|
||||||
|
ENEMY_DEFEAT_COUNT(ACTOR_EN_IK, EnemyDefeatCounts_EnIk);
|
||||||
|
ENEMY_DEFEAT_COUNT(ACTOR_EN_FIREFLY, EnemyDefeatCounts_EnFirefly);
|
||||||
|
ENEMY_DEFEAT_COUNT(ACTOR_EN_TP, EnemyDefeatCounts_EnTp);
|
||||||
|
ENEMY_DEFEAT_COUNT(ACTOR_EN_REEBA, EnemyDefeatCounts_EnReeba);
|
||||||
|
ENEMY_DEFEAT_COUNT(ACTOR_EN_MB, EnemyDefeatCounts_EnMb);
|
||||||
|
ENEMY_DEFEAT_COUNT(ACTOR_EN_PEEHAT, EnemyDefeatCounts_EnPeehat);
|
||||||
|
ENEMY_DEFEAT_COUNT(ACTOR_EN_POH, EnemyDefeatCounts_EnPoh);
|
||||||
|
ENEMY_DEFEAT_COUNT(ACTOR_EN_PO_FIELD, EnemyDefeatCounts_EnPoField);
|
||||||
|
ENEMY_DEFEAT_COUNT(ACTOR_EN_ST, EnemyDefeatCounts_EnSt);
|
||||||
|
ENEMY_DEFEAT_COUNT(ACTOR_EN_SW, EnemyDefeatCounts_EnSw);
|
||||||
|
ENEMY_DEFEAT_COUNT(ACTOR_EN_TITE, EnemyDefeatCounts_EnTite);
|
||||||
|
ENEMY_DEFEAT_COUNT(ACTOR_EN_WF, EnemyDefeatCounts_EnWf);
|
||||||
|
}
|
||||||
|
|
||||||
|
static RegisterShipInitFunc initFunc(RegisterEnemyDefeatCounts);
|
||||||
@@ -137,97 +137,97 @@ const char* const sceneMappings[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const char* const countMappings[] = {
|
const char* const countMappings[] = {
|
||||||
"Anubis:",
|
"Anubis:", // COUNT_ENEMIES_DEFEATED_ANUBIS
|
||||||
"Armos:",
|
"Armos:", // COUNT_ENEMIES_DEFEATED_ARMOS
|
||||||
"Arwing:",
|
"Arwing:", // COUNT_ENEMIES_DEFEATED_ARWING
|
||||||
"Bari:",
|
"Bari:", // COUNT_ENEMIES_DEFEATED_BARI
|
||||||
"Biri:",
|
"Beamos:", // COUNT_ENEMIES_DEFEATED_BEAMOS
|
||||||
"Beamos:",
|
"Big Octo:", // COUNT_ENEMIES_DEFEATED_BIG_OCTO
|
||||||
"Big Octo:",
|
"Biri:", // COUNT_ENEMIES_DEFEATED_BIRI
|
||||||
"Bubble (Blue):",
|
"Bubble (Green):", // COUNT_ENEMIES_DEFEATED_BUBBLE_GREEN
|
||||||
"Bubble (Green):",
|
"Bubble (Blue):", // COUNT_ENEMIES_DEFEATED_BUBBLE_BLUE
|
||||||
"Bubble (Red):",
|
"Bubble (White):", // COUNT_ENEMIES_DEFEATED_BUBBLE_WHITE
|
||||||
"Bubble (White):",
|
"Bubble (Red):", // COUNT_ENEMIES_DEFEATED_BUBBLE_RED
|
||||||
"Business Scrub:",
|
"Business Scrub:", // COUNT_ENEMIES_DEFEATED_BUSINESS_SCRUB
|
||||||
"Dark Link:",
|
"Dark Link:", // COUNT_ENEMIES_DEFEATED_DARK_LINK
|
||||||
"Dead Hand:",
|
"Dead Hand:", // COUNT_ENEMIES_DEFEATED_DEAD_HAND
|
||||||
"Deku Baba:",
|
"Deku Baba:", // COUNT_ENEMIES_DEFEATED_DEKU_BABA
|
||||||
"Deku Baba (Big):",
|
"Deku Baba (Big):", // COUNT_ENEMIES_DEFEATED_DEKU_BABA_BIG
|
||||||
"Deku Scrub:",
|
"Deku Scrub:", // COUNT_ENEMIES_DEFEATED_DEKU_SCRUB
|
||||||
"Dinolfos:",
|
"Dinolfos:", // COUNT_ENEMIES_DEFEATED_DINOLFOS
|
||||||
"Dodongo:",
|
"Dodongo:", // COUNT_ENEMIES_DEFEATED_DODONGO
|
||||||
"Dodongo (Baby):",
|
"Dodongo (Baby):", // COUNT_ENEMIES_DEFEATED_DODONGO_BABY
|
||||||
"Door Mimic:",
|
"Door Mimic:", // COUNT_ENEMIES_DEFEATED_DOOR_TRAP
|
||||||
"Flare Dancer:",
|
"Flare Dancer:", // COUNT_ENEMIES_DEFEATED_FLARE_DANCER
|
||||||
"Floormaster:",
|
"Floormaster:", // COUNT_ENEMIES_DEFEATED_FLOORMASTER
|
||||||
"Flying Floor Tile:",
|
"Flying Pot:", // COUNT_ENEMIES_DEFEATED_FLYING_POT
|
||||||
"Flying Pot:",
|
"Flying Floor Tile:", // COUNT_ENEMIES_DEFEATED_FLOOR_TILE
|
||||||
"Freezard:",
|
"Freezard:", // COUNT_ENEMIES_DEFEATED_FREEZARD
|
||||||
"Gerudo Thief:",
|
"Gerudo Thief:", // COUNT_ENEMIES_DEFEATED_GERUDO_THIEF
|
||||||
"Gibdo:",
|
"Gibdo:", // COUNT_ENEMIES_DEFEATED_GIBDO
|
||||||
"Gohma Larva:",
|
"Gohma Larva:", // COUNT_ENEMIES_DEFEATED_GOHMA_LARVA
|
||||||
"Guay:",
|
"Guay:", // COUNT_ENEMIES_DEFEATED_GUAY
|
||||||
"Iron Knuckle:",
|
"Iron Knuckle:", // COUNT_ENEMIES_DEFEATED_IRON_KNUCKLE
|
||||||
"Iron Knuckle (Nab):",
|
"Iron Knuckle (Nab):", // COUNT_ENEMIES_DEFEATED_IRON_KNUCKLE_NABOORU
|
||||||
"Keese:",
|
"Keese:", // COUNT_ENEMIES_DEFEATED_KEESE
|
||||||
"Keese (Fire):",
|
"Keese (Fire):", // COUNT_ENEMIES_DEFEATED_KEESE_FIRE
|
||||||
"Keese (Ice):",
|
"Keese (Ice):", // COUNT_ENEMIES_DEFEATED_KEESE_ICE
|
||||||
"Leever:",
|
"Leever:", // COUNT_ENEMIES_DEFEATED_LEEVER
|
||||||
"Leever (Big):",
|
"Leever (Big):", // COUNT_ENEMIES_DEFEATED_LEEVER_BIG
|
||||||
"Like-Like:",
|
"Like-Like:", // COUNT_ENEMIES_DEFEATED_LIKE_LIKE
|
||||||
"Lizalfos:",
|
"Lizalfos:", // COUNT_ENEMIES_DEFEATED_LIZALFOS
|
||||||
"Mad Scrub:",
|
"Mad Scrub:", // COUNT_ENEMIES_DEFEATED_MAD_SCRUB
|
||||||
"Moblin:",
|
"Moblin:", // COUNT_ENEMIES_DEFEATED_MOBLIN
|
||||||
"Moblin (Club):",
|
"Moblin (Club):", // COUNT_ENEMIES_DEFEATED_MOBLIN_CLUB
|
||||||
"Octorok:",
|
"Octorok:", // COUNT_ENEMIES_DEFEATED_OCTOROK
|
||||||
"Parasitic Tentacle:",
|
"Parasitic Tentacle:", // COUNT_ENEMIES_DEFEATED_PARASITIC_TENTACLE
|
||||||
"Peahat:",
|
"Peahat:", // COUNT_ENEMIES_DEFEATED_PEAHAT
|
||||||
"Peahat Larva:",
|
"Peahat Larva:", // COUNT_ENEMIES_DEFEATED_PEAHAT_LARVA
|
||||||
"Poe:",
|
"Poe:", // COUNT_ENEMIES_DEFEATED_POE
|
||||||
"Poe (Big):",
|
"Poe (Big):", // COUNT_ENEMIES_DEFEATED_POE_BIG
|
||||||
"Poe (Composer):",
|
"Poe (Composer):", // COUNT_ENEMIES_DEFEATED_POE_COMPOSER
|
||||||
"Poe Sisters:",
|
"Poe Sisters:", // COUNT_ENEMIES_DEFEATED_POE_SISTERS
|
||||||
"Redead:",
|
"Redead:", // COUNT_ENEMIES_DEFEATED_REDEAD
|
||||||
"Shabom:",
|
"Shabom:", // COUNT_ENEMIES_DEFEATED_SHABOM
|
||||||
"Shell Blade:",
|
"Shell Blade:", // COUNT_ENEMIES_DEFEATED_SHELLBLADE
|
||||||
"Skull Kid:",
|
"Skulltula:", // COUNT_ENEMIES_DEFEATED_SKULLTULA
|
||||||
"Skulltula:",
|
"Skulltula (Big):", // COUNT_ENEMIES_DEFEATED_SKULLTULA_BIG
|
||||||
"Skulltula (Big):",
|
"Skulltula (Gold):", // COUNT_ENEMIES_DEFEATED_SKULLTULA_GOLD
|
||||||
"Skulltula (Gold):",
|
"Skullwalltula:", // COUNT_ENEMIES_DEFEATED_SKULLWALLTULA
|
||||||
"Skullwalltula:",
|
"Skull Kid:", // COUNT_ENEMIES_DEFEATED_SKULL_KID
|
||||||
"Spike:",
|
"Spike:", // COUNT_ENEMIES_DEFEATED_SPIKE
|
||||||
"Stalchild:",
|
"Stalchild:", // COUNT_ENEMIES_DEFEATED_STALCHILD
|
||||||
"Stalfos:",
|
"Stalfos:", // COUNT_ENEMIES_DEFEATED_STALFOS
|
||||||
"Stinger:",
|
"Stinger:", // COUNT_ENEMIES_DEFEATED_STINGER
|
||||||
"Tailpasaran:",
|
"Tailpasaran:", // COUNT_ENEMIES_DEFEATED_TAILPASARAN
|
||||||
"Tektite (Blue):",
|
"Tektite (Blue):", // COUNT_ENEMIES_DEFEATED_TEKTITE_BLUE
|
||||||
"Tektite (Red):",
|
"Tektite (Red):", // COUNT_ENEMIES_DEFEATED_TEKTITE_RED
|
||||||
"Torch Slug:",
|
"Torch Slug:", // COUNT_ENEMIES_DEFEATED_TORCH_SLUG
|
||||||
"Wallmaster:",
|
"Wallmaster:", // COUNT_ENEMIES_DEFEATED_WALLMASTER
|
||||||
"Withered Deku Baba:",
|
"Withered Deku Baba:", // COUNT_ENEMIES_DEFEATED_WITHERED_DEKU_BABA
|
||||||
"Wolfos:",
|
"Wolfos:", // COUNT_ENEMIES_DEFEATED_WOLFOS
|
||||||
"Wolfos (White):",
|
"Wolfos (White):", // COUNT_ENEMIES_DEFEATED_WOLFOS_WHITE
|
||||||
"Deku Sticks:",
|
"Deku Sticks:", // COUNT_AMMO_USED_STICK
|
||||||
"Deku Nuts:",
|
"Deku Nuts:", // COUNT_AMMO_USED_NUT
|
||||||
"Bombs:",
|
"Bombs:", // COUNT_AMMO_USED_BOMB
|
||||||
"Arrows:",
|
"Arrows:", // COUNT_AMMO_USED_ARROW
|
||||||
"Deku Seeds:",
|
"Deku Seeds:", // COUNT_AMMO_USED_SEED
|
||||||
"Bombchus:",
|
"Bombchus:", // COUNT_AMMO_USED_BOMBCHU
|
||||||
"Beans:",
|
"Beans:", // COUNT_AMMO_USED_BEAN
|
||||||
"A:",
|
"A:", // COUNT_BUTTON_PRESSES_A
|
||||||
"B:",
|
"B:", // COUNT_BUTTON_PRESSES_B
|
||||||
"L:",
|
"L:", // COUNT_BUTTON_PRESSES_L
|
||||||
"R:",
|
"R:", // COUNT_BUTTON_PRESSES_R
|
||||||
"Z:",
|
"Z:", // COUNT_BUTTON_PRESSES_Z
|
||||||
"C-Up:",
|
"C-Up:", // COUNT_BUTTON_PRESSES_CUP
|
||||||
"C-Right:",
|
"C-Right:", // COUNT_BUTTON_PRESSES_CRIGHT
|
||||||
"C-Down:",
|
"C-Down:", // COUNT_BUTTON_PRESSES_CDOWN
|
||||||
"C-Left:",
|
"C-Left:", // COUNT_BUTTON_PRESSES_CLEFT
|
||||||
"D-Up:",
|
"D-Up:", // COUNT_BUTTON_PRESSES_DUP
|
||||||
"D-Right:",
|
"D-Right:", // COUNT_BUTTON_PRESSES_DRIGHT
|
||||||
"D-Down:",
|
"D-Down:", // COUNT_BUTTON_PRESSES_DDOWN
|
||||||
"D-Left:",
|
"D-Left:", // COUNT_BUTTON_PRESSES_DLEFT
|
||||||
"Start:",
|
"Start:", // COUNT_BUTTON_PRESSES_START
|
||||||
};
|
};
|
||||||
|
|
||||||
#define COLOR_WHITE ImVec4(1.00f, 1.00f, 1.00f, 1.00f)
|
#define COLOR_WHITE ImVec4(1.00f, 1.00f, 1.00f, 1.00f)
|
||||||
|
|||||||
@@ -14,24 +14,7 @@
|
|||||||
#include "soh/Enhancements/timesaver_hook_handlers.h"
|
#include "soh/Enhancements/timesaver_hook_handlers.h"
|
||||||
#include "soh/Enhancements/randomizer/hook_handlers.h"
|
#include "soh/Enhancements/randomizer/hook_handlers.h"
|
||||||
|
|
||||||
#include "src/overlays/actors/ovl_En_Bb/z_en_bb.h"
|
|
||||||
#include "src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.h"
|
|
||||||
#include "src/overlays/actors/ovl_En_Mb/z_en_mb.h"
|
|
||||||
#include "src/overlays/actors/ovl_En_Tite/z_en_tite.h"
|
|
||||||
#include "src/overlays/actors/ovl_En_Zf/z_en_zf.h"
|
|
||||||
#include "src/overlays/actors/ovl_En_Wf/z_en_wf.h"
|
|
||||||
#include "src/overlays/actors/ovl_En_Reeba/z_en_reeba.h"
|
|
||||||
#include "src/overlays/actors/ovl_En_Peehat/z_en_peehat.h"
|
|
||||||
#include "src/overlays/actors/ovl_En_Po_Field/z_en_po_field.h"
|
|
||||||
#include "src/overlays/actors/ovl_En_Poh/z_en_poh.h"
|
|
||||||
#include "src/overlays/actors/ovl_En_Tp/z_en_tp.h"
|
|
||||||
#include "src/overlays/actors/ovl_En_Firefly/z_en_firefly.h"
|
|
||||||
#include "src/overlays/actors/ovl_En_Xc/z_en_xc.h"
|
|
||||||
#include "src/overlays/actors/ovl_Fishing/z_fishing.h"
|
|
||||||
#include "src/overlays/actors/ovl_Obj_Switch/z_obj_switch.h"
|
#include "src/overlays/actors/ovl_Obj_Switch/z_obj_switch.h"
|
||||||
#include "src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h"
|
|
||||||
#include "src/overlays/actors/ovl_Door_Gerudo/z_door_gerudo.h"
|
|
||||||
#include "src/overlays/actors/ovl_En_Elf/z_en_elf.h"
|
|
||||||
#include "objects/object_link_boy/object_link_boy.h"
|
#include "objects/object_link_boy/object_link_boy.h"
|
||||||
#include "objects/object_link_child/object_link_child.h"
|
#include "objects/object_link_child/object_link_child.h"
|
||||||
#include "soh_assets.h"
|
#include "soh_assets.h"
|
||||||
@@ -426,196 +409,6 @@ void RegisterResetNaviTimer() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// this map is used for enemies that can be uniquely identified by their id
|
|
||||||
// and that are always counted
|
|
||||||
// enemies that can't be uniquely identified by their id
|
|
||||||
// or only sometimes count (like ACTOR_EN_TP)
|
|
||||||
// have to be manually handled in RegisterEnemyDefeatCounts
|
|
||||||
static std::unordered_map<u16, u16> uniqueEnemyIdToStatCount = {
|
|
||||||
{ ACTOR_EN_ANUBICE, COUNT_ENEMIES_DEFEATED_ANUBIS },
|
|
||||||
{ ACTOR_EN_AM, COUNT_ENEMIES_DEFEATED_ARMOS },
|
|
||||||
{ ACTOR_EN_CLEAR_TAG, COUNT_ENEMIES_DEFEATED_ARWING },
|
|
||||||
{ ACTOR_EN_VALI, COUNT_ENEMIES_DEFEATED_BARI },
|
|
||||||
{ ACTOR_EN_VM, COUNT_ENEMIES_DEFEATED_BEAMOS },
|
|
||||||
{ ACTOR_EN_BIGOKUTA, COUNT_ENEMIES_DEFEATED_BIG_OCTO },
|
|
||||||
{ ACTOR_EN_BILI, COUNT_ENEMIES_DEFEATED_BIRI },
|
|
||||||
{ ACTOR_EN_DNS, COUNT_ENEMIES_DEFEATED_BUSINESS_SCRUB },
|
|
||||||
{ ACTOR_EN_TORCH, COUNT_ENEMIES_DEFEATED_DARK_LINK },
|
|
||||||
{ ACTOR_EN_DH, COUNT_ENEMIES_DEFEATED_DEAD_HAND },
|
|
||||||
{ ACTOR_EN_HINTNUTS, COUNT_ENEMIES_DEFEATED_DEKU_SCRUB },
|
|
||||||
{ ACTOR_EN_DODONGO, COUNT_ENEMIES_DEFEATED_DODONGO },
|
|
||||||
{ ACTOR_EN_DODOJR, COUNT_ENEMIES_DEFEATED_DODONGO_BABY },
|
|
||||||
{ ACTOR_DOOR_KILLER, COUNT_ENEMIES_DEFEATED_DOOR_TRAP },
|
|
||||||
{ ACTOR_EN_FD, COUNT_ENEMIES_DEFEATED_FLARE_DANCER },
|
|
||||||
{ ACTOR_EN_FLOORMAS, COUNT_ENEMIES_DEFEATED_FLOORMASTER },
|
|
||||||
{ ACTOR_EN_TUBO_TRAP, COUNT_ENEMIES_DEFEATED_FLYING_POT },
|
|
||||||
{ ACTOR_EN_YUKABYUN, COUNT_ENEMIES_DEFEATED_FLOOR_TILE },
|
|
||||||
{ ACTOR_EN_FZ, COUNT_ENEMIES_DEFEATED_FREEZARD },
|
|
||||||
{ ACTOR_EN_GELDB, COUNT_ENEMIES_DEFEATED_GERUDO_THIEF },
|
|
||||||
{ ACTOR_EN_GOMA, COUNT_ENEMIES_DEFEATED_GOHMA_LARVA },
|
|
||||||
{ ACTOR_EN_CROW, COUNT_ENEMIES_DEFEATED_GUAY },
|
|
||||||
{ ACTOR_EN_RR, COUNT_ENEMIES_DEFEATED_LIKE_LIKE },
|
|
||||||
{ ACTOR_EN_DEKUNUTS, COUNT_ENEMIES_DEFEATED_MAD_SCRUB },
|
|
||||||
{ ACTOR_EN_OKUTA, COUNT_ENEMIES_DEFEATED_OCTOROK },
|
|
||||||
{ ACTOR_EN_BA, COUNT_ENEMIES_DEFEATED_PARASITIC_TENTACLE },
|
|
||||||
{ ACTOR_EN_PO_SISTERS, COUNT_ENEMIES_DEFEATED_POE_SISTERS },
|
|
||||||
{ ACTOR_EN_BUBBLE, COUNT_ENEMIES_DEFEATED_SHABOM },
|
|
||||||
{ ACTOR_EN_SB, COUNT_ENEMIES_DEFEATED_SHELLBLADE },
|
|
||||||
{ ACTOR_EN_SKJ, COUNT_ENEMIES_DEFEATED_SKULL_KID },
|
|
||||||
{ ACTOR_EN_NY, COUNT_ENEMIES_DEFEATED_SPIKE },
|
|
||||||
{ ACTOR_EN_SKB, COUNT_ENEMIES_DEFEATED_STALCHILD },
|
|
||||||
{ ACTOR_EN_TEST, COUNT_ENEMIES_DEFEATED_STALFOS },
|
|
||||||
{ ACTOR_EN_WEIYER, COUNT_ENEMIES_DEFEATED_STINGER },
|
|
||||||
{ ACTOR_EN_BW, COUNT_ENEMIES_DEFEATED_TORCH_SLUG },
|
|
||||||
{ ACTOR_EN_WALLMAS, COUNT_ENEMIES_DEFEATED_WALLMASTER },
|
|
||||||
{ ACTOR_EN_KAREBABA, COUNT_ENEMIES_DEFEATED_WITHERED_DEKU_BABA },
|
|
||||||
};
|
|
||||||
|
|
||||||
void RegisterEnemyDefeatCounts() {
|
|
||||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnEnemyDefeat>([](void* refActor) {
|
|
||||||
Actor* actor = static_cast<Actor*>(refActor);
|
|
||||||
if (uniqueEnemyIdToStatCount.contains(actor->id)) {
|
|
||||||
gSaveContext.ship.stats.count[uniqueEnemyIdToStatCount[actor->id]]++;
|
|
||||||
} else {
|
|
||||||
switch (actor->id) {
|
|
||||||
case ACTOR_EN_BB:
|
|
||||||
if (actor->params == ENBB_GREEN || actor->params == ENBB_GREEN_BIG) {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_BUBBLE_GREEN]++;
|
|
||||||
} else if (actor->params == ENBB_BLUE) {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_BUBBLE_BLUE]++;
|
|
||||||
} else if (actor->params == ENBB_WHITE) {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_BUBBLE_WHITE]++;
|
|
||||||
} else if (actor->params == ENBB_RED) {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_BUBBLE_RED]++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ACTOR_EN_DEKUBABA:
|
|
||||||
if (actor->params == DEKUBABA_BIG) {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_DEKU_BABA_BIG]++;
|
|
||||||
} else {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_DEKU_BABA]++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ACTOR_EN_ZF:
|
|
||||||
if (actor->params == ENZF_TYPE_DINOLFOS) {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_DINOLFOS]++;
|
|
||||||
} else {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_LIZALFOS]++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ACTOR_EN_RD:
|
|
||||||
if (actor->params >= -1) {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_REDEAD]++;
|
|
||||||
} else {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_GIBDO]++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ACTOR_EN_IK:
|
|
||||||
if (actor->params == 0) {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_IRON_KNUCKLE_NABOORU]++;
|
|
||||||
} else {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_IRON_KNUCKLE]++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ACTOR_EN_FIREFLY:
|
|
||||||
if (actor->params == KEESE_NORMAL_FLY || actor->params == KEESE_NORMAL_PERCH) {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_KEESE]++;
|
|
||||||
} else if (actor->params == KEESE_FIRE_FLY || actor->params == KEESE_FIRE_PERCH) {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_KEESE_FIRE]++;
|
|
||||||
} else if (actor->params == KEESE_ICE_FLY) {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_KEESE_ICE]++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ACTOR_EN_REEBA: {
|
|
||||||
EnReeba* reeba = (EnReeba*)actor;
|
|
||||||
if (reeba->isBig) {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_LEEVER_BIG]++;
|
|
||||||
} else {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_LEEVER]++;
|
|
||||||
}
|
|
||||||
} break;
|
|
||||||
|
|
||||||
case ACTOR_EN_MB:
|
|
||||||
if (actor->params == 0) {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_MOBLIN_CLUB]++;
|
|
||||||
} else {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_MOBLIN]++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ACTOR_EN_PEEHAT:
|
|
||||||
if (actor->params == PEAHAT_TYPE_LARVA) {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_PEAHAT_LARVA]++;
|
|
||||||
} else {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_PEAHAT]++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ACTOR_EN_POH:
|
|
||||||
if (actor->params == EN_POH_FLAT || actor->params == EN_POH_SHARP) {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_POE_COMPOSER]++;
|
|
||||||
} else {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_POE]++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ACTOR_EN_PO_FIELD:
|
|
||||||
if (actor->params == EN_PO_FIELD_BIG) {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_POE_BIG]++;
|
|
||||||
} else {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_POE]++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ACTOR_EN_ST:
|
|
||||||
if (actor->params == 1) {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_SKULLTULA_BIG]++;
|
|
||||||
} else {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_SKULLTULA]++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ACTOR_EN_SW:
|
|
||||||
if (((actor->params & 0xE000) >> 0xD) != 0) {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_SKULLTULA_GOLD]++;
|
|
||||||
} else {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_SKULLWALLTULA]++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ACTOR_EN_TP:
|
|
||||||
// Only count the head, otherwise each body segment will increment
|
|
||||||
if (actor->params == TAILPASARAN_HEAD) {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_TAILPASARAN]++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ACTOR_EN_TITE:
|
|
||||||
if (actor->params == TEKTITE_BLUE) {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_TEKTITE_BLUE]++;
|
|
||||||
} else {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_TEKTITE_RED]++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ACTOR_EN_WF:
|
|
||||||
if (actor->params == WOLFOS_WHITE) {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_WOLFOS_WHITE]++;
|
|
||||||
} else {
|
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_WOLFOS]++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void RegisterBossDefeatTimestamps() {
|
void RegisterBossDefeatTimestamps() {
|
||||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnBossDefeat>([](void* refActor) {
|
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnBossDefeat>([](void* refActor) {
|
||||||
Actor* actor = static_cast<Actor*>(refActor);
|
Actor* actor = static_cast<Actor*>(refActor);
|
||||||
@@ -728,7 +521,6 @@ void InitMods() {
|
|||||||
RegisterMenuPathFix();
|
RegisterMenuPathFix();
|
||||||
RegisterMirrorModeHandler();
|
RegisterMirrorModeHandler();
|
||||||
RegisterResetNaviTimer();
|
RegisterResetNaviTimer();
|
||||||
RegisterEnemyDefeatCounts();
|
|
||||||
RegisterBossDefeatTimestamps();
|
RegisterBossDefeatTimestamps();
|
||||||
RegisterFloorSwitchesHook();
|
RegisterFloorSwitchesHook();
|
||||||
RegisterPatchHandHandler();
|
RegisterPatchHandHandler();
|
||||||
|
|||||||
Reference in New Issue
Block a user