SkeletalFishBossBattleDirector.o 100%

This commit is contained in:
shibbo 2024-02-21 10:34:59 -05:00
parent 437bfaeaa9
commit 7ae59725b3
12 changed files with 229 additions and 34 deletions

View File

@ -3115,20 +3115,20 @@ clone__Q22MR59FunctorV0M<P16SkeletalFishBoss&#44;M16SkeletalFishBossFPCvPv_v>CFP
__dt__16SkeletalFishBossFv,SkeletalFishBoss.o,Boss.a,true
__dt__20SkeletalFishBossHeadFv,SkeletalFishBoss.o,Boss.a,true
__dt__25SkeletalFishBossScarFlashFv,SkeletalFishBoss.o,Boss.a,true
__ct__30SkeletalFishBossBattleDirectorFP16SkeletalFishBoss,SkeletalFishBossBattleDirector.o,Boss.a,false
initiate__30SkeletalFishBossBattleDirectorFv,SkeletalFishBossBattleDirector.o,Boss.a,false
startPowerUpDemo1__30SkeletalFishBossBattleDirectorFv,SkeletalFishBossBattleDirector.o,Boss.a,false
startPowerUpDemo2__30SkeletalFishBossBattleDirectorFv,SkeletalFishBossBattleDirector.o,Boss.a,false
playGuardAnim__30SkeletalFishBossBattleDirectorFPCcl,SkeletalFishBossBattleDirector.o,Boss.a,false
movement__30SkeletalFishBossBattleDirectorFv,SkeletalFishBossBattleDirector.o,Boss.a,false
tryColumnCollision__30SkeletalFishBossBattleDirectorFP9HitSensor,SkeletalFishBossBattleDirector.o,Boss.a,false
pauseOffCast__30SkeletalFishBossBattleDirectorFv,SkeletalFishBossBattleDirector.o,Boss.a,false
endPowerUpDemo1__30SkeletalFishBossBattleDirectorFv,SkeletalFishBossBattleDirector.o,Boss.a,false
endPowerUpDemo2__30SkeletalFishBossBattleDirectorFv,SkeletalFishBossBattleDirector.o,Boss.a,false
killGuard__30SkeletalFishBossBattleDirectorFv,SkeletalFishBossBattleDirector.o,Boss.a,false
appearBirdLouse__30SkeletalFishBossBattleDirectorFv,SkeletalFishBossBattleDirector.o,Boss.a,false
killBirdLouse__30SkeletalFishBossBattleDirectorFv,SkeletalFishBossBattleDirector.o,Boss.a,false
__dt__30SkeletalFishBossBattleDirectorFv,SkeletalFishBossBattleDirector.o,Boss.a,false
__ct__30SkeletalFishBossBattleDirectorFP16SkeletalFishBoss,SkeletalFishBossBattleDirector.o,Boss.a,true
initiate__30SkeletalFishBossBattleDirectorFv,SkeletalFishBossBattleDirector.o,Boss.a,true
startPowerUpDemo1__30SkeletalFishBossBattleDirectorFv,SkeletalFishBossBattleDirector.o,Boss.a,true
startPowerUpDemo2__30SkeletalFishBossBattleDirectorFv,SkeletalFishBossBattleDirector.o,Boss.a,true
playGuardAnim__30SkeletalFishBossBattleDirectorFPCcl,SkeletalFishBossBattleDirector.o,Boss.a,true
movement__30SkeletalFishBossBattleDirectorFv,SkeletalFishBossBattleDirector.o,Boss.a,true
tryColumnCollision__30SkeletalFishBossBattleDirectorFP9HitSensor,SkeletalFishBossBattleDirector.o,Boss.a,true
pauseOffCast__30SkeletalFishBossBattleDirectorFv,SkeletalFishBossBattleDirector.o,Boss.a,true
endPowerUpDemo1__30SkeletalFishBossBattleDirectorFv,SkeletalFishBossBattleDirector.o,Boss.a,true
endPowerUpDemo2__30SkeletalFishBossBattleDirectorFv,SkeletalFishBossBattleDirector.o,Boss.a,true
killGuard__30SkeletalFishBossBattleDirectorFv,SkeletalFishBossBattleDirector.o,Boss.a,true
appearBirdLouse__30SkeletalFishBossBattleDirectorFv,SkeletalFishBossBattleDirector.o,Boss.a,true
killBirdLouse__30SkeletalFishBossBattleDirectorFv,SkeletalFishBossBattleDirector.o,Boss.a,true
__dt__30SkeletalFishBossBattleDirectorFv,SkeletalFishBossBattleDirector.o,Boss.a,true
getNearestGuardPosID__20SkeletalFishBossFuncFRCQ29JGeometry8TVec3<f>,SkeletalFishBossFunc.o,Boss.a,true
copyGuardPos__20SkeletalFishBossFuncFPQ29JGeometry8TVec3<f>l,SkeletalFishBossFunc.o,Boss.a,true
__ct__20SkeletalFishBossInfoFP16SkeletalFishBossllPCc,SkeletalFishBossInfo.o,Boss.a,true

1 Symbol Name Object File Library Archive Matching
3115 __dt__16SkeletalFishBossFv SkeletalFishBoss.o Boss.a true
3116 __dt__20SkeletalFishBossHeadFv SkeletalFishBoss.o Boss.a true
3117 __dt__25SkeletalFishBossScarFlashFv SkeletalFishBoss.o Boss.a true
3118 __ct__30SkeletalFishBossBattleDirectorFP16SkeletalFishBoss SkeletalFishBossBattleDirector.o Boss.a false true
3119 initiate__30SkeletalFishBossBattleDirectorFv SkeletalFishBossBattleDirector.o Boss.a false true
3120 startPowerUpDemo1__30SkeletalFishBossBattleDirectorFv SkeletalFishBossBattleDirector.o Boss.a false true
3121 startPowerUpDemo2__30SkeletalFishBossBattleDirectorFv SkeletalFishBossBattleDirector.o Boss.a false true
3122 playGuardAnim__30SkeletalFishBossBattleDirectorFPCcl SkeletalFishBossBattleDirector.o Boss.a false true
3123 movement__30SkeletalFishBossBattleDirectorFv SkeletalFishBossBattleDirector.o Boss.a false true
3124 tryColumnCollision__30SkeletalFishBossBattleDirectorFP9HitSensor SkeletalFishBossBattleDirector.o Boss.a false true
3125 pauseOffCast__30SkeletalFishBossBattleDirectorFv SkeletalFishBossBattleDirector.o Boss.a false true
3126 endPowerUpDemo1__30SkeletalFishBossBattleDirectorFv SkeletalFishBossBattleDirector.o Boss.a false true
3127 endPowerUpDemo2__30SkeletalFishBossBattleDirectorFv SkeletalFishBossBattleDirector.o Boss.a false true
3128 killGuard__30SkeletalFishBossBattleDirectorFv SkeletalFishBossBattleDirector.o Boss.a false true
3129 appearBirdLouse__30SkeletalFishBossBattleDirectorFv SkeletalFishBossBattleDirector.o Boss.a false true
3130 killBirdLouse__30SkeletalFishBossBattleDirectorFv SkeletalFishBossBattleDirector.o Boss.a false true
3131 __dt__30SkeletalFishBossBattleDirectorFv SkeletalFishBossBattleDirector.o Boss.a false true
3132 getNearestGuardPosID__20SkeletalFishBossFuncFRCQ29JGeometry8TVec3<f> SkeletalFishBossFunc.o Boss.a true
3133 copyGuardPos__20SkeletalFishBossFuncFPQ29JGeometry8TVec3<f>l SkeletalFishBossFunc.o Boss.a true
3134 __ct__20SkeletalFishBossInfoFP16SkeletalFishBossllPCc SkeletalFishBossInfo.o Boss.a true

View File

@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"label": "Game",
"message": "12.745%",
"message": "12.784%",
"color": "blue"
}

View File

@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"label": "Boss",
"message": "1.697%",
"message": "2.109%",
"color": "orange"
}

View File

@ -3,7 +3,7 @@
| [Animation](https://github.com/shibbo/Petari/blob/master/docs/lib/Animation.md) | 4.860149543062863% |
| [AreaObj](https://github.com/shibbo/Petari/blob/master/docs/lib/AreaObj.md) | 57.68352365415987% |
| [AudioLib](https://github.com/shibbo/Petari/blob/master/docs/lib/AudioLib.md) | 0.0% |
| [Boss](https://github.com/shibbo/Petari/blob/master/docs/lib/Boss.md) | 1.6976303909126844% |
| [Boss](https://github.com/shibbo/Petari/blob/master/docs/lib/Boss.md) | 2.109555412237086% |
| [Camera](https://github.com/shibbo/Petari/blob/master/docs/lib/Camera.md) | 34.12644987572494% |
| [Demo](https://github.com/shibbo/Petari/blob/master/docs/lib/Demo.md) | 3.7442572741194486% |
| [Effect](https://github.com/shibbo/Petari/blob/master/docs/lib/Effect.md) | 1.855215360664245% |

View File

@ -132,7 +132,7 @@
| [SkeletalFishBabyRail.o](https://github.com/shibbo/Petari/blob/master/docs/lib/Boss/SkeletalFishBabyRail.md) | 100.0% | 3 / 3 | 100.0% | :white_check_mark:
| [SkeletalFishBabyRailHolder.o](https://github.com/shibbo/Petari/blob/master/docs/lib/Boss/SkeletalFishBabyRailHolder.md) | 100.0% | 12 / 12 | 100.0% | :white_check_mark:
| [SkeletalFishBoss.o](https://github.com/shibbo/Petari/blob/master/docs/lib/Boss/SkeletalFishBoss.md) | 5.522345573583831% | 34 / 114 | 29.82456140350877% | :eight_pointed_black_star:
| [SkeletalFishBossBattleDirector.o](https://github.com/shibbo/Petari/blob/master/docs/lib/Boss/SkeletalFishBossBattleDirector.md) | 0.0% | 0 / 14 | 0.0% | :x:
| [SkeletalFishBossBattleDirector.o](https://github.com/shibbo/Petari/blob/master/docs/lib/Boss/SkeletalFishBossBattleDirector.md) | 100.0% | 14 / 14 | 100.0% | :white_check_mark:
| [SkeletalFishBossFunc.o](https://github.com/shibbo/Petari/blob/master/docs/lib/Boss/SkeletalFishBossFunc.md) | 100.0% | 2 / 2 | 100.0% | :white_check_mark:
| [SkeletalFishBossInfo.o](https://github.com/shibbo/Petari/blob/master/docs/lib/Boss/SkeletalFishBossInfo.md) | 100.0% | 8 / 8 | 100.0% | :white_check_mark:
| [SkeletalFishBossRail.o](https://github.com/shibbo/Petari/blob/master/docs/lib/Boss/SkeletalFishBossRail.md) | 100.0% | 9 / 9 | 100.0% | :white_check_mark:

View File

@ -5,21 +5,21 @@
| :white_check_mark: | Function is completed.
# 0 / 14 Completed -- (0.0%)
# 14 / 14 Completed -- (100.0%)
# SkeletalFishBossBattleDirector.o
| Symbol | Decompiled? |
| ------------- | ------------- |
| `__ct__30SkeletalFishBossBattleDirectorFP16SkeletalFishBoss` | :x: |
| `initiate__30SkeletalFishBossBattleDirectorFv` | :x: |
| `startPowerUpDemo1__30SkeletalFishBossBattleDirectorFv` | :x: |
| `startPowerUpDemo2__30SkeletalFishBossBattleDirectorFv` | :x: |
| `playGuardAnim__30SkeletalFishBossBattleDirectorFPCcl` | :x: |
| `movement__30SkeletalFishBossBattleDirectorFv` | :x: |
| `tryColumnCollision__30SkeletalFishBossBattleDirectorFP9HitSensor` | :x: |
| `pauseOffCast__30SkeletalFishBossBattleDirectorFv` | :x: |
| `endPowerUpDemo1__30SkeletalFishBossBattleDirectorFv` | :x: |
| `endPowerUpDemo2__30SkeletalFishBossBattleDirectorFv` | :x: |
| `killGuard__30SkeletalFishBossBattleDirectorFv` | :x: |
| `appearBirdLouse__30SkeletalFishBossBattleDirectorFv` | :x: |
| `killBirdLouse__30SkeletalFishBossBattleDirectorFv` | :x: |
| `__dt__30SkeletalFishBossBattleDirectorFv` | :x: |
| `__ct__30SkeletalFishBossBattleDirectorFP16SkeletalFishBoss` | :white_check_mark: |
| `initiate__30SkeletalFishBossBattleDirectorFv` | :white_check_mark: |
| `startPowerUpDemo1__30SkeletalFishBossBattleDirectorFv` | :white_check_mark: |
| `startPowerUpDemo2__30SkeletalFishBossBattleDirectorFv` | :white_check_mark: |
| `playGuardAnim__30SkeletalFishBossBattleDirectorFPCcl` | :white_check_mark: |
| `movement__30SkeletalFishBossBattleDirectorFv` | :white_check_mark: |
| `tryColumnCollision__30SkeletalFishBossBattleDirectorFP9HitSensor` | :white_check_mark: |
| `pauseOffCast__30SkeletalFishBossBattleDirectorFv` | :white_check_mark: |
| `endPowerUpDemo1__30SkeletalFishBossBattleDirectorFv` | :white_check_mark: |
| `endPowerUpDemo2__30SkeletalFishBossBattleDirectorFv` | :white_check_mark: |
| `killGuard__30SkeletalFishBossBattleDirectorFv` | :white_check_mark: |
| `appearBirdLouse__30SkeletalFishBossBattleDirectorFv` | :white_check_mark: |
| `killBirdLouse__30SkeletalFishBossBattleDirectorFv` | :white_check_mark: |
| `__dt__30SkeletalFishBossBattleDirectorFv` | :white_check_mark: |

View File

@ -0,0 +1,34 @@
#pragma once
#include "Game/NameObj/NameObj.hpp"
#include "Game/LiveActor/ModelObj.hpp"
class SkeletalFishBoss;
class SubmarineVolcanoBigColumn;
class SkeletalFishBossBattleDirector : public NameObj {
public:
SkeletalFishBossBattleDirector(SkeletalFishBoss *);
virtual ~SkeletalFishBossBattleDirector();
virtual void movement();
void initiate();
void startPowerUpDemo1();
void startPowerUpDemo2();
void playGuardAnim(const char *, s32);
void tryColumnCollision(HitSensor *);
void pauseOffCast();
void endPowerUpDemo1();
void endPowerUpDemo2();
void killGuard();
void appearBirdLouse();
void killBirdLouse();
SkeletalFishBoss* mFishBoss; // _C
SubmarineVolcanoBigColumn* mColumns[0x20]; // _10
s32 _90;
LiveActor* _94[0x10];
s32 _D4;
ModelObj* mGuardModels[4]; // _D8
};

View File

@ -35,7 +35,7 @@ public:
const char *getHostName() const;
s32 getPlacementZoneID() const;
void checkStrikePoint(HitInfo *, const TVec3f &);
void checkStrikeBall(HitInfo *, unsigned long, const TVec3f &, float, bool, const TriangleFilterBase *);
bool checkStrikeBall(HitInfo *, unsigned long, const TVec3f &, float, bool, const TriangleFilterBase *);
void checkStrikeBallCore(HitInfo *, unsigned long, const TVec3f &, const TVec3f &, float, float, float, KC_PrismData **, float *, unsigned char *, const TriangleFilterBase *, const TVec3f *);
void checkStrikeBallWithThickness(HitInfo *, unsigned long, const TVec3f &, float, float, const TriangleFilterBase *);
void calcCollidePosition(TVec3f *, const KC_PrismData &, unsigned char);

View File

@ -0,0 +1,23 @@
#pragma once
#include "Game/LiveActor/LiveActor.hpp"
class ModelObj;
class SubmarineVolcanoBigColumn : public LiveActor {
public:
SubmarineVolcanoBigColumn(const char *);
virtual ~SubmarineVolcanoBigColumn();
virtual void init(const JMapInfoIter &);
virtual void kill();
virtual bool receiveMsgEnemyAttack(u32, HitSensor *, HitSensor *);
void exeWait();
void exeBreak();
void pauseOff();
void initBreakModel(const char *);
ModelObj* mBreakModel; // _8C
u8 _90;
};

View File

@ -23,6 +23,8 @@ namespace MR {
bool isEffectValid(const LiveActor *, const char *);
void deleteEffect(LiveActor *, const char *);
void pauseOffEffectAll(LiveActor *);
void deleteEffectAll(LiveActor *);
void emitEffect(LiveActor *, const char *);

View File

@ -328,4 +328,6 @@ namespace MR {
ResTIMG* getTexFromArc(const char *, const LiveActor *);
PartsModel* createBloomModel(LiveActor *, MtxPtr);
CollisionParts* getCollisionParts(const LiveActor *);
};

View File

@ -0,0 +1,134 @@
#include "Game/Boss/SkeletalFishBossBattleDirector.hpp"
#include "Game/Boss/SkeletalFishBoss.hpp"
#include "Game/LiveActor/LiveActorGroup.hpp"
#include "Game/MapObj/SubmarineVolcanoBigColumn.hpp"
#include "Game/Map/CollisionParts.hpp"
#include "Game/Map/HitInfo.hpp"
#include <cstdio>
SkeletalFishBossBattleDirector::SkeletalFishBossBattleDirector(SkeletalFishBoss *pBoss) : NameObj("スカルシャークボス戦指揮") {
mFishBoss = pBoss;
_90 = 0;
_D4 = 0;
MR::connectToSceneEnemyMovement(this);
for (s32 i = 0; i < 0x20; i++) {
mColumns[i] = nullptr;
}
for (s32 i = 0; i < 4; i++) {
ModelObj* guardMdl = new ModelObj("デモ用スカルシャークガード", "SkeletalFishGuard", nullptr, 18, -2, -2, false);
mGuardModels[i] = guardMdl;
mGuardModels[i]->initWithoutIter();
MR::initLightCtrl(mGuardModels[i]);
MR::invalidateClipping(mGuardModels[i]);
mGuardModels[i]->makeActorDead();
}
}
void SkeletalFishBossBattleDirector::initiate() {
LiveActorGroup* grp = MR::getGroupFromArray(mFishBoss);
for (s32 i = 0; i < grp->mObjectCount; i++) {
if (!strcmp(grp->getActor(i)->mName, "海底火山巨大石柱") || (!strcmp(grp->getActor(i)->mName, "海底火山石柱(小)"))) {
mColumns[_90] = static_cast<SubmarineVolcanoBigColumn*>(grp->getActor(i));
_90++;
}
if (strcmp(grp->getActor(i)->mName, "羽虫S")) {
if (strcmp(grp->getActor(i)->mName, "羽虫L")) {
continue;
}
}
_94[_D4] = grp->getActor(i);
MR::invalidateClipping(_94[_D4]);
_D4++;
}
killBirdLouse();
}
void SkeletalFishBossBattleDirector::startPowerUpDemo1() {
playGuardAnim("PowerUp1", 2);
}
void SkeletalFishBossBattleDirector::startPowerUpDemo2() {
playGuardAnim("PowerUp2", 4);
}
void SkeletalFishBossBattleDirector::playGuardAnim(const char *pAnimName, s32 numGuards) {
for (s32 i = 0; i < numGuards; i++) {
char buf[0x80];
snprintf(buf, sizeof(buf), "%s%c", pAnimName, i + 0x41);
mGuardModels[i]->makeActorAppeared();
MR::requestMovementOn(mGuardModels[i]);
MR::startBck(mGuardModels[i], buf, nullptr);
MR::startSound(mGuardModels[i], "SE_BM_SKL_GUARD_APPEAR", -1, -1);
}
}
void SkeletalFishBossBattleDirector::movement() {
}
void SkeletalFishBossBattleDirector::tryColumnCollision(HitSensor *pSensor) {
for (s32 i = 0; i < _90; i++) {
CollisionParts* parts = MR::getCollisionParts(mColumns[i]);
if (parts != nullptr) {
HitInfo hitInfo;
if (parts->checkStrikeBall(&hitInfo, 1, pSensor->mPosition, pSensor->mRadius, false, nullptr)) {
if (hitInfo.mParentTriangle.mSensor != nullptr) {
MR::sendMsgEnemyAttack(hitInfo.mParentTriangle.mSensor, pSensor);
return;
}
}
}
}
}
void SkeletalFishBossBattleDirector::pauseOffCast() {
LiveActorGroup* group = MR::getGroupFromArray(mFishBoss);
for (s32 i = 0; i < group->mObjectCount; i++) {
MR::requestMovementOn(group->getActor(i));
if (MR::isExistEffectKeeper(group->getActor(i))) {
MR::pauseOffEffectAll(group->getActor(i));
}
}
for (s32 i = 0; i < _90; i++) {
mColumns[i]->pauseOff();
}
}
void SkeletalFishBossBattleDirector::endPowerUpDemo1() {
killGuard();
}
void SkeletalFishBossBattleDirector::endPowerUpDemo2() {
killGuard();
}
void SkeletalFishBossBattleDirector::killGuard() {
for (s32 i = 0; i < 4; i++) {
mGuardModels[i]->makeActorDead();
}
}
void SkeletalFishBossBattleDirector::appearBirdLouse() {
for (s32 i = 0; i < _D4; i++) {
_94[i]->endClipped();
}
}
void SkeletalFishBossBattleDirector::killBirdLouse() {
for (s32 i = 0; i < _D4; i++) {
_94[i]->startClipped();
}
}
SkeletalFishBossBattleDirector::~SkeletalFishBossBattleDirector() {
}