mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-06-05 10:47:27 -04:00
various Z2Audio / JAudio debug cleanup (#2876)
* some JAudio work * audio cleanup checkpoint * checkpoint more audio cleanup * fix symbols * more z2 cleanup * fix regression * fix build * some fixes
This commit is contained in:
+137
-123
@@ -1,8 +1,3 @@
|
||||
//
|
||||
// Generated By: dol2asm
|
||||
// Translation Unit: Z2SoundObjMgr
|
||||
//
|
||||
|
||||
#include "Z2AudioLib/Z2SoundObjMgr.h"
|
||||
#include "Z2AudioLib/Z2Creature.h"
|
||||
#include "Z2AudioLib/Z2SeqMgr.h"
|
||||
@@ -11,9 +6,9 @@
|
||||
#include "Z2AudioLib/Z2LinkMgr.h"
|
||||
|
||||
/* 802BF920-802BF980 2BA260 0060+00 0/0 1/1 0/0 .text __ct__13Z2SoundObjMgrFv */
|
||||
Z2SoundObjMgr::Z2SoundObjMgr() : JASGlobalInstance<Z2SoundObjMgr>(this) {
|
||||
mGhostEnemyState = 0;
|
||||
mTwilightBattle = 0;
|
||||
Z2SoundObjMgr::Z2SoundObjMgr() : JASGlobalInstance<Z2SoundObjMgr>(true) {
|
||||
ghostEnemyState_ = 0;
|
||||
twilightBattle_ = 0;
|
||||
setBattleInit();
|
||||
setForceBattleArea(false, 700, 1100, 1500);
|
||||
}
|
||||
@@ -21,10 +16,10 @@ Z2SoundObjMgr::Z2SoundObjMgr() : JASGlobalInstance<Z2SoundObjMgr>(this) {
|
||||
/* 802BF980-802BF994 2BA2C0 0014+00 1/1 3/3 3/3 .text setForceBattleArea__13Z2SoundObjMgrFbUsUsUs
|
||||
*/
|
||||
void Z2SoundObjMgr::setForceBattleArea(bool forceBattle, u16 param_1, u16 param_2, u16 param_3) {
|
||||
mForceBattle = forceBattle;
|
||||
mEnemyArea.field_0x2 = param_1;
|
||||
mEnemyArea.field_0x4 = param_2;
|
||||
mEnemyArea.field_0x6 = param_3;
|
||||
forceBattle_ = forceBattle;
|
||||
enemyArea_.field_0x2 = param_1;
|
||||
enemyArea_.field_0x4 = param_2;
|
||||
enemyArea_.field_0x6 = param_3;
|
||||
}
|
||||
|
||||
/* 80455B80-80455B84 004180 0004+00 1/1 0/0 0/0 .sdata2 sAreaDefault */
|
||||
@@ -45,13 +40,13 @@ static Z2EnemyArea const sAreaSmall = {true, 300, 700, 1000};
|
||||
/* 80455BA8-80455BAC 0041A8 0004+00 1/1 0/0 0/0 .sdata2 sAreaSmallFloating */
|
||||
static Z2EnemyArea const sAreaSmallFloating = {false, 500, 800, 1200};
|
||||
|
||||
struct EnemyInfo {
|
||||
struct Z2EnemyInfo {
|
||||
char mName[8];
|
||||
Z2EnemyArea mEnemyArea;
|
||||
};
|
||||
|
||||
/* 803CAD70-803CB170 027E90 0400+00 3/3 0/0 0/0 .data mEnemyInfo */
|
||||
static EnemyInfo mEnemyInfo[64] = {
|
||||
static Z2EnemyInfo mEnemyInfo[64] = {
|
||||
{"Dummy", sAreaDefault},
|
||||
{"E_s1", {true, 700, 1200, 2000}},
|
||||
{"E_yk", sAreaSmallFloating},
|
||||
@@ -120,72 +115,80 @@ static EnemyInfo mEnemyInfo[64] = {
|
||||
|
||||
/* 802BF994-802BFFEC 2BA2D4 0658+00 1/0 1/1 0/0 .text searchEnemy__13Z2SoundObjMgrFv */
|
||||
void Z2SoundObjMgr::searchEnemy() {
|
||||
mTwilightBattle = 0;
|
||||
Z2CreatureLink* link = Z2GetLink();
|
||||
if (link == 0) {
|
||||
twilightBattle_ = 0;
|
||||
|
||||
if (!Z2GetLink()) {
|
||||
Z2GetSeqMgr()->stopBattleBgm(1, 1);
|
||||
return;
|
||||
}
|
||||
|
||||
bool bVar7 = false;
|
||||
bool local_96 = false;
|
||||
bool iVar8 = false;
|
||||
|
||||
bool isHolyForestBgm = false;
|
||||
if (Z2GetSeqMgr()->getMainBgmID() == Z2BGM_HOLY_FOREST) {
|
||||
iVar8 = true;
|
||||
isHolyForestBgm = true;
|
||||
}
|
||||
u8 iVar16 = 0;
|
||||
|
||||
u8 subBgmType = 0;
|
||||
if (Z2GetSeqMgr()->getSubBgmID() == Z2BGM_HORSE_BATTLE) {
|
||||
iVar16 = 1;
|
||||
subBgmType = 1;
|
||||
} else if (Z2GetSeqMgr()->getSubBgmID() == Z2BGM_FACE_OFF_BATTLE2) {
|
||||
iVar16 = 2;
|
||||
subBgmType = 2;
|
||||
}
|
||||
|
||||
field_0x14 = 0;
|
||||
mEnemyNumNear = 0;
|
||||
enemuNumNear_ = 0;
|
||||
field_0x16 = 0;
|
||||
mEnemyNumVeryFar = 0;
|
||||
enemuNumVeryFar_ = 0;
|
||||
field_0x1a = false;
|
||||
field_0x18 = 0;
|
||||
f32 dVar18 = Z2Calc::getParamByExp(
|
||||
|
||||
f32 linkDistScale = Z2Calc::getParamByExp(
|
||||
Z2GetLink()->getMoveSpeed(),
|
||||
0.0f,
|
||||
100.0f,
|
||||
0.3f,
|
||||
1.0f,
|
||||
2.5f,
|
||||
Z2Calc::CURVE_SIGN_1);
|
||||
f32 dVar19 = 5000.0f;
|
||||
Z2Calc::CURVE_POSITIVE);
|
||||
f32 veryFarDist = 5000.0f;
|
||||
|
||||
for (JSULink<Z2CreatureEnemy>* local_8c = getFirst(); local_8c != NULL; local_8c = local_8c->getNext()) {
|
||||
Z2CreatureEnemy* this_00 = local_8c->getObject();
|
||||
if (this_00 == NULL) {
|
||||
for (JSULink<Z2CreatureEnemy>* i = getFirst(); i != NULL; i = i->getNext()) {
|
||||
Z2CreatureEnemy* enemy = i->getObject();
|
||||
if (enemy == NULL) {
|
||||
JUT_WARN_DEVICE(100, 1, "%s", "[Z2SoundObjMgr::searchEnemy] remain remove enemy\n");
|
||||
continue;
|
||||
}
|
||||
if (this_00->field_0xa1 < 1) {
|
||||
|
||||
if (enemy->field_0xa1 < 1) {
|
||||
continue;
|
||||
}
|
||||
bool bVar6 = false;
|
||||
u8 enemyId = this_00->mEnemyID;
|
||||
|
||||
bool isGhostEnemy = false;
|
||||
|
||||
u8 enemyId = enemy->mEnemyID;
|
||||
switch (enemyId) {
|
||||
case Z2_ENEMY_SW:
|
||||
if (Z2GetSceneMgr()->getCurrentSceneNum() == 0x1c)
|
||||
if (Z2GetSceneMgr()->getCurrentSceneNum() == Z2SCENE_GERUDO_DESERT)
|
||||
continue;
|
||||
break;
|
||||
case Z2_ENEMY_CR:
|
||||
if (Z2GetSceneMgr()->getCurrentSceneNum() == 0x1e)
|
||||
if (Z2GetSceneMgr()->getCurrentSceneNum() == Z2SCENE_HYRULE_FIELD)
|
||||
continue;
|
||||
break;
|
||||
case Z2_ENEMY_NZ:
|
||||
case Z2_ENEMY_PO:
|
||||
case Z2_ENEMY_HP:
|
||||
bVar6 = true;
|
||||
isGhostEnemy = true;
|
||||
break;
|
||||
case Z2_ENEMY_RDB:
|
||||
if (iVar16 == 0)
|
||||
if (subBgmType == 0)
|
||||
continue;
|
||||
break;
|
||||
case Z2_ENEMY_WB:
|
||||
case Z2_ENEMY_RD:
|
||||
if (iVar16 != 0)
|
||||
if (subBgmType != 0)
|
||||
continue;
|
||||
#if VERSION == VERSION_GCN_JPN
|
||||
}
|
||||
@@ -208,77 +211,86 @@ void Z2SoundObjMgr::searchEnemy() {
|
||||
#endif
|
||||
if (!Z2GetLink()->isRiding())
|
||||
break;
|
||||
if (Z2GetLink()->getMoveSpeed() <= 0x26)
|
||||
if (Z2GetLink()->getMoveSpeed() <= 38)
|
||||
break;
|
||||
continue;
|
||||
}
|
||||
Vec* iVar10 = this_00->getCurrentPos();
|
||||
if (iVar10 != NULL) {
|
||||
Vec* iVar14 = Z2GetLink()->getCurrentPos();
|
||||
if (iVar14 != NULL) {
|
||||
Z2EnemyArea local_88 = mEnemyInfo[enemyId].mEnemyArea;
|
||||
if (mForceBattle) {
|
||||
local_88 = mEnemyArea;
|
||||
|
||||
Vec* enemyPos = enemy->getCurrentPos();
|
||||
if (enemyPos != NULL) {
|
||||
Vec* linkPos = Z2GetLink()->getCurrentPos();
|
||||
if (linkPos != NULL) {
|
||||
Z2EnemyArea enemyArea = mEnemyInfo[enemyId].mEnemyArea;
|
||||
if (forceBattle_) {
|
||||
enemyArea = enemyArea_;
|
||||
}
|
||||
f32 fVar2 = 2.0f;
|
||||
if (local_88.field_0x0 == true) {
|
||||
fVar2 = 4.0f;
|
||||
|
||||
f32 y_scale = 2.0f;
|
||||
if (enemyArea.field_0x0 == true) {
|
||||
y_scale = 4.0f;
|
||||
}
|
||||
Vec local_80 = {0.0f, 0.0f, 0.0f};
|
||||
VECSubtract(iVar10, iVar14, &local_80);
|
||||
local_80.y *= fVar2;
|
||||
f32 dVar20 = VECMag(&local_80);
|
||||
if (dVar20 < local_88.field_0x6 * dVar18) {
|
||||
if (bVar6) {
|
||||
|
||||
Vec enemy_linkVec = {0.0f, 0.0f, 0.0f};
|
||||
VECSubtract(enemyPos, linkPos, &enemy_linkVec);
|
||||
enemy_linkVec.y *= y_scale;
|
||||
|
||||
f32 enemyDist = VECMag(&enemy_linkVec);
|
||||
if (enemyDist < enemyArea.field_0x6 * linkDistScale) {
|
||||
if (isGhostEnemy) {
|
||||
field_0x1a++;
|
||||
|
||||
if (dVar20 < local_88.field_0x4 * dVar18) {
|
||||
mGhostEnemyState |= 1;
|
||||
if (mGhostEnemyState >= 0x10) {
|
||||
mEnemyNumNear++;
|
||||
if (dVar20 < local_88.field_0x2 * dVar18) {
|
||||
if (enemyDist < enemyArea.field_0x4 * linkDistScale) {
|
||||
ghostEnemyState_ |= (u8)1;
|
||||
if (ghostEnemyState_ >= 16) {
|
||||
enemuNumNear_++;
|
||||
if (enemyDist < enemyArea.field_0x2 * linkDistScale) {
|
||||
field_0x14++;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (mGhostEnemyState >= 0x11) {
|
||||
|
||||
if (ghostEnemyState_ >= 17) {
|
||||
field_0x16++;
|
||||
if (this_00->mLinkSearch) {
|
||||
if (enemy->mLinkSearch) {
|
||||
local_96 = true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
field_0x16++;
|
||||
if (enemyId != 0 && enemyId < 9) {
|
||||
if (mTwilightBattle == 0) {
|
||||
mTwilightBattle = 1;
|
||||
if (twilightBattle_ == 0) {
|
||||
twilightBattle_ = 1;
|
||||
}
|
||||
if (enemyId == 0x1 || enemyId == 0x5) {
|
||||
mTwilightBattle = 2;
|
||||
|
||||
if (enemyId == Z2_ENEMY_S1 || enemyId == Z2_ENEMY_YC) {
|
||||
twilightBattle_ = 2;
|
||||
}
|
||||
if (enemyId == 0x8) {
|
||||
mTwilightBattle = 2;
|
||||
|
||||
if (enemyId == Z2_ENEMY_YMB) {
|
||||
twilightBattle_ = 2;
|
||||
} else {
|
||||
Z2GetSeqMgr()->changeSubBgmStatus(mTwilightBattle);
|
||||
Z2GetSeqMgr()->changeSubBgmStatus(twilightBattle_);
|
||||
}
|
||||
}
|
||||
if (enemyId != 0x2c && this_00->mLinkSearch) {
|
||||
|
||||
if (enemyId != Z2_ENEMY_GB && enemy->mLinkSearch) {
|
||||
local_96 = true;
|
||||
}
|
||||
if (dVar20 < local_88.field_0x4 * dVar18)
|
||||
{
|
||||
mEnemyNumNear++;
|
||||
if (dVar20 < local_88.field_0x2 * dVar18)
|
||||
{
|
||||
|
||||
if (enemyDist < enemyArea.field_0x4 * linkDistScale) {
|
||||
enemuNumNear_++;
|
||||
if (enemyDist < enemyArea.field_0x2 * linkDistScale) {
|
||||
field_0x14++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (dVar20 < dVar19 * dVar18) {
|
||||
mEnemyNumVeryFar++;
|
||||
|
||||
if (enemyDist < veryFarDist * linkDistScale) {
|
||||
enemuNumVeryFar_++;
|
||||
}
|
||||
if (this_00->field_0xa3 != 0) {
|
||||
|
||||
if (enemy->field_0xa3 != 0) {
|
||||
bVar7 = true;
|
||||
field_0x18++;
|
||||
}
|
||||
@@ -286,108 +298,108 @@ void Z2SoundObjMgr::searchEnemy() {
|
||||
}
|
||||
}
|
||||
|
||||
if (mGhostEnemyState == 0x11) {
|
||||
if (ghostEnemyState_ == 17) {
|
||||
if (field_0x1a >= field_0x16) {
|
||||
Z2GetSeqMgr()->setBattleGhostMute(false);
|
||||
} else {
|
||||
Z2GetSeqMgr()->setBattleGhostMute(true);
|
||||
}
|
||||
} else if (mGhostEnemyState < 0x20 && field_0x1a == 0x0) {
|
||||
} else if (ghostEnemyState_ < 32 && field_0x1a == 0) {
|
||||
setGhostEnemyState(0);
|
||||
}
|
||||
if (iVar16 == 1) {
|
||||
if (field_0x14 != 0x0) {
|
||||
|
||||
if (subBgmType == 1) {
|
||||
if (field_0x14 != 0) {
|
||||
Z2GetSeqMgr()->changeSubBgmStatus(1);
|
||||
} else {
|
||||
Z2GetSeqMgr()->changeSubBgmStatus(0);
|
||||
}
|
||||
} else if (iVar16 == 2) {
|
||||
if (mEnemyNumNear != 0x0) {
|
||||
} else if (subBgmType == 2) {
|
||||
if (enemuNumNear_ != 0) {
|
||||
Z2GetSeqMgr()->changeSubBgmStatus(1);
|
||||
} else {
|
||||
Z2GetSeqMgr()->changeSubBgmStatus(0);
|
||||
}
|
||||
} else if (iVar8) {
|
||||
if (field_0x16 != 0x0) {
|
||||
} else if (isHolyForestBgm) {
|
||||
if (field_0x16 != 0) {
|
||||
Z2GetSeqMgr()->changeBgmStatus(1);
|
||||
} else {
|
||||
Z2GetSeqMgr()->changeBgmStatus(0);
|
||||
}
|
||||
} else if (!bVar7) {
|
||||
Z2GetSeqMgr()->setBattleSearched(local_96);
|
||||
if (field_0x14 != 0x0) {
|
||||
|
||||
if (field_0x14 != 0) {
|
||||
Z2GetSeqMgr()->setBattleDistState(0);
|
||||
} else if (enemuNumNear_ != 0) {
|
||||
Z2GetSeqMgr()->setBattleDistState(1);
|
||||
} else if (field_0x16 != 0) {
|
||||
Z2GetSeqMgr()->setBattleDistState(2);
|
||||
} else {
|
||||
if (mEnemyNumNear != 0x0) {
|
||||
Z2GetSeqMgr()->setBattleDistState(1);
|
||||
} else {
|
||||
if (field_0x16 != 0x0) {
|
||||
Z2GetSeqMgr()->setBattleDistState(2);
|
||||
} else {
|
||||
Z2GetSeqMgr()->setBattleDistState(3);
|
||||
}
|
||||
}
|
||||
Z2GetSeqMgr()->setBattleDistState(3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Z2SoundObjMgr::setGhostEnemyState(u8 p1) {
|
||||
if (p1 == 0x20) {
|
||||
void Z2SoundObjMgr::setGhostEnemyState(u8 state) {
|
||||
if (state == 32) {
|
||||
if (field_0x1a >= field_0x16) {
|
||||
JASGlobalInstance<Z2SeqMgr>::getInstance()->setBattleGhostMute(true);
|
||||
Z2GetSeqMgr()->setBattleGhostMute(true);
|
||||
}
|
||||
} else {
|
||||
if (field_0x1a == false) {
|
||||
mGhostEnemyState = 0;
|
||||
ghostEnemyState_ = 0;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
mGhostEnemyState = p1 + (mGhostEnemyState & 1);
|
||||
ghostEnemyState_ = state + (ghostEnemyState_ & 1);
|
||||
}
|
||||
|
||||
/* 802C0074-802C0100 2BA9B4 008C+00 0/0 1/1 0/0 .text
|
||||
* getEnemyID__13Z2SoundObjMgrFPCcP26JSULink<15Z2CreatureEnemy> */
|
||||
u8 Z2SoundObjMgr::getEnemyID(char const* param_0, JSULink<Z2CreatureEnemy>* param_1) {
|
||||
if (param_0 != NULL) {
|
||||
for (u8 uVar2 = 0; uVar2 < ARRAY_SIZEU(mEnemyInfo); uVar2++) {
|
||||
if (strcmp(param_0, mEnemyInfo[(u32)uVar2].mName) == 0) {
|
||||
append(param_1);
|
||||
return uVar2;
|
||||
u8 Z2SoundObjMgr::getEnemyID(const char* enemyName, JSULink<Z2CreatureEnemy>* enemyLink) {
|
||||
if (enemyName != NULL) {
|
||||
for (u8 i = 0; i < ARRAY_SIZEU(mEnemyInfo); i++) {
|
||||
if (strcmp(enemyName, mEnemyInfo[(u32)i].mName) == 0) {
|
||||
append(enemyLink);
|
||||
return i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Z2_ENEMY_NULL;
|
||||
}
|
||||
|
||||
/* 802C0100-802C0120 2BAA40 0020+00 1/1 1/1 0/0 .text setBattleInit__13Z2SoundObjMgrFv */
|
||||
void Z2SoundObjMgr::setBattleInit() {
|
||||
field_0x14 = 0;
|
||||
mEnemyNumNear = 0;
|
||||
enemuNumNear_ = 0;
|
||||
field_0x16 = 0;
|
||||
mEnemyNumVeryFar = 0;
|
||||
enemuNumVeryFar_ = 0;
|
||||
field_0x18 = 0;
|
||||
field_0x1a = false;
|
||||
}
|
||||
|
||||
/* 802C0120-802C013C 2BAA60 001C+00 0/0 1/1 0/0 .text checkBattleFinish__13Z2SoundObjMgrFv */
|
||||
bool Z2SoundObjMgr::checkBattleFinish() {
|
||||
return mEnemyNumVeryFar - field_0x18 <= 0;
|
||||
if (enemuNumVeryFar_ - field_0x18 > 0) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/* 802C013C-802C0190 2BAA7C 0054+00 0/0 1/1 0/0 .text deleteEnemyAll__13Z2SoundObjMgrFv
|
||||
*/
|
||||
void Z2SoundObjMgr::deleteEnemyAll() {
|
||||
JSULink<Z2CreatureEnemy>* link;
|
||||
JSULink<Z2CreatureEnemy>* i;
|
||||
|
||||
// not moving the link pointer forward looks like a bug, but deleteObject() actually unlinks the
|
||||
// enemy from its owning list
|
||||
while (link = this->getFirst(), link != NULL) {
|
||||
Z2CreatureEnemy* enemy = link->getObject();
|
||||
// not moving the pointer forward looks like a bug, but deleteObject() actually unlinks the enemy from its owning list
|
||||
while (i = getFirst(), i != NULL) {
|
||||
Z2CreatureEnemy* enemy = i->getObject();
|
||||
if (enemy == NULL) {
|
||||
// setWarningMessage_f((JUTAssertion *)0x1,(ulong)"Z2SoundObjMgr.cpp",(char
|
||||
// *)0x16f,(int)&*fill*,
|
||||
// "[Z2SoundObjMgr::searchEnemy] remain remove enemy\n",in_r8);
|
||||
JUT_WARN_DEVICE(367, 1, "%s", "[Z2SoundObjMgr::searchEnemy] remain remove enemy\n");
|
||||
} else {
|
||||
enemy->deleteObject();
|
||||
}
|
||||
@@ -396,20 +408,22 @@ void Z2SoundObjMgr::deleteEnemyAll() {
|
||||
|
||||
/* 802C0190-802C01E4 2BAAD0 0054+00 0/0 2/2 0/0 .text
|
||||
* removeEnemy__13Z2SoundObjMgrFP26JSULink<15Z2CreatureEnemy> */
|
||||
bool Z2SoundObjMgr::removeEnemy(JSULink<Z2CreatureEnemy>* param_0) {
|
||||
if (param_0 == NULL) {
|
||||
bool Z2SoundObjMgr::removeEnemy(JSULink<Z2CreatureEnemy>* enemyLink) {
|
||||
if (enemyLink == NULL) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Z2CreatureEnemy* enemy = param_0->getObject();
|
||||
Z2CreatureEnemy* enemy = enemyLink->getObject();
|
||||
if (enemy->field_0xa3 != 0 && field_0x18 != 0) {
|
||||
field_0x18--;
|
||||
}
|
||||
return remove(param_0);
|
||||
|
||||
bool result = remove(enemyLink);
|
||||
return result;
|
||||
}
|
||||
|
||||
/* 802C01E4-802C01EC 2BAB24 0008+00 0/0 4/4 0/0 .text isTwilightBattle__13Z2SoundObjMgrFv
|
||||
*/
|
||||
u8 Z2SoundObjMgr::isTwilightBattle() {
|
||||
return mTwilightBattle;
|
||||
return twilightBattle_;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user