This commit is contained in:
guymakinggames 2026-04-23 08:31:57 +00:00 committed by GitHub
commit 4e7ffff815
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 134 additions and 16 deletions

View file

@ -16988,75 +16988,75 @@ Boss/Koopa/KoopaHintHolder.o:
label:
- _ZN24KoopaBombHintRequestInfoC1Ev
- _ZN24KoopaBombHintRequestInfoC2Ev
status: NotDecompiled
status: Matching
- offset: 0x094280
size: 104
label:
- _ZN15KoopaHintHolderC1EPN2al14SceneObjHolderE
- _ZN15KoopaHintHolderC2EPN2al14SceneObjHolderE
status: NotDecompiled
status: Matching
- offset: 0x0942e8
size: 4
label: _ZN15KoopaHintHolder6updateEv
status: NotDecompiled
status: Matching
- offset: 0x0942ec
size: 52
label: _ZN15KoopaHintHolder23tryAppearHintCapReflectEv
status: NotDecompiled
status: Matching
- offset: 0x094320
size: 152
label: _ZN15KoopaHintHolder22tryAppearMessageDamageEi
status: NotDecompiled
status: Matching
- offset: 0x0943b8
size: 28
label: _ZN15KoopaHintHolder7exeWaitEv
status: NotDecompiled
status: Matching
- offset: 0x0943d4
size: 76
label: _ZN15KoopaHintHolder17exeHintCapReflectEv
status: NotDecompiled
status: Matching
- offset: 0x094420
size: 148
label: _ZN15KoopaHintHolder20exeHintCapAttachBombEv
status: NotDecompiled
status: Matching
- offset: 0x0944b4
size: 16
label: _ZN15KoopaHintHolder16exeMessageDamageEv
status: NotDecompiled
status: Matching
- offset: 0x0944c4
size: 36
label: _ZN15KoopaHintHolderD0Ev
status: NotDecompiled
status: Matching
lazy: true
- offset: 0x0944e8
size: 8
label: _ZNK15KoopaHintHolder17getSceneObjHolderEv
status: NotDecompiled
status: Matching
lazy: true
- offset: 0x0944f0
size: 8
label: _ZThn16_NK15KoopaHintHolder17getSceneObjHolderEv
status: NotDecompiled
status: Matching
lazy: true
- offset: 0x0944f8
size: 32
label: _ZNK12_GLOBAL__N_122KoopaHintHolderNrvWait7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x094518
size: 80
label: _ZNK12_GLOBAL__N_132KoopaHintHolderNrvHintCapReflect7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x094568
size: 20
label: _ZNK12_GLOBAL__N_131KoopaHintHolderNrvMessageDamage7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x09457c
size: 152
label: _ZNK12_GLOBAL__N_135KoopaHintHolderNrvHintCapAttachBomb7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
Boss/Koopa/KoopaItemHolder.o:
'.text':

View file

@ -0,0 +1,77 @@
#include "Boss/Koopa/KoopaHintHolder.h"
#include "Library/Base/StringUtil.h"
#include "Library/Math/MathUtil.h"
#include "Library/Nerve/NerveSetupUtil.h"
#include "Library/Nerve/NerveUtil.h"
#include "MapObj/CapMessageShowInfo.h"
namespace {
NERVE_IMPL(KoopaHintHolder, Wait)
NERVE_IMPL(KoopaHintHolder, HintCapReflect)
NERVE_IMPL(KoopaHintHolder, MessageDamage)
NERVE_IMPL(KoopaHintHolder, HintCapAttachBomb)
NERVES_MAKE_NOSTRUCT(KoopaHintHolder, HintCapReflect, HintCapAttachBomb, Wait, MessageDamage)
} // namespace
KoopaBombHintRequestInfo::KoopaBombHintRequestInfo() : isRequested(false) {}
KoopaHintHolder::KoopaHintHolder(al::SceneObjHolder* sceneObjHolder)
: al::NerveExecutor("クッパヒント保持"), mSceneObjHolder(sceneObjHolder),
mIsHintCapAttachBombRequested(false), mIsHintCapReflectEnabled(true), mBombHeadHintIndex(-1) {
initNerve(&Wait, 0);
}
void KoopaHintHolder::update() {
updateNerve();
}
bool KoopaHintHolder::tryAppearHintCapReflect() {
if (!mIsHintCapReflectEnabled)
return false;
mIsHintCapReflectEnabled = false;
al::setNerve(this, &HintCapReflect);
return true;
}
bool KoopaHintHolder::tryAppearMessageDamage(s32 damageType) {
if (!al::isNerve(this, &Wait))
return false;
rs::showCapMessageBossDamage(this, al::StringTmp<64>("Koopa_Damage_%d", damageType).cstr(), 30,
30);
al::setNerve(this, &MessageDamage);
return true;
}
void KoopaHintHolder::exeWait() {
if (!mIsHintCapAttachBombRequested)
return;
mIsHintCapAttachBombRequested = false;
al::setNerve(this, &HintCapAttachBomb);
}
void KoopaHintHolder::exeHintCapReflect() {
if (al::isFirstStep(this))
rs::showCapMessage(this, "KoopaHintCapReflect", 60, 30);
al::setNerveAtGreaterEqualStep(this, &Wait, 60);
}
void KoopaHintHolder::exeHintCapAttachBomb() {
if (al::isFirstStep(this)) {
mBombHeadHintIndex = al::modi(mBombHeadHintIndex + 4, 3);
al::StringTmp<64> label("KoopaHintCapAttachBombHead_%02d", mBombHeadHintIndex);
rs::showCapMessage(this, label.cstr(), 60, 0);
}
al::setNerveAtGreaterEqualStep(this, &Wait, 60);
}
void KoopaHintHolder::exeMessageDamage() {
al::setNerveAtGreaterEqualStep(this, &Wait, 30);
}

View file

@ -0,0 +1,41 @@
#pragma once
#include <basis/seadTypes.h>
#include "Library/Nerve/NerveExecutor.h"
#include "Library/Scene/IUseSceneObjHolder.h"
namespace al {
class SceneObjHolder;
} // namespace al
struct KoopaBombHintRequestInfo {
KoopaBombHintRequestInfo();
bool isRequested = false;
};
static_assert(sizeof(KoopaBombHintRequestInfo) == 0x1);
class KoopaHintHolder : public al::NerveExecutor, public al::IUseSceneObjHolder {
public:
KoopaHintHolder(al::SceneObjHolder* sceneObjHolder);
void update();
bool tryAppearHintCapReflect();
bool tryAppearMessageDamage(s32 damageType);
void exeWait();
void exeHintCapReflect();
void exeHintCapAttachBomb();
void exeMessageDamage();
al::SceneObjHolder* getSceneObjHolder() const override { return mSceneObjHolder; }
private:
al::SceneObjHolder* mSceneObjHolder = nullptr;
bool mIsHintCapAttachBombRequested = false;
bool mIsHintCapReflectEnabled = true;
s32 mBombHeadHintIndex = -1;
};
static_assert(sizeof(KoopaHintHolder) == 0x28);