mirror of
https://github.com/SMGCommunity/Petari.git
synced 2024-11-27 15:30:44 +00:00
SkeletalFishBossBattleDirector.o
100%
This commit is contained in:
parent
437bfaeaa9
commit
7ae59725b3
28
csv/Boss.csv
28
csv/Boss.csv
@ -3115,20 +3115,20 @@ clone__Q22MR59FunctorV0M<P16SkeletalFishBoss,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,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"label": "Game",
|
||||
"message": "12.745%",
|
||||
"message": "12.784%",
|
||||
"color": "blue"
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"label": "Boss",
|
||||
"message": "1.697%",
|
||||
"message": "2.109%",
|
||||
"color": "orange"
|
||||
}
|
@ -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% |
|
||||
|
@ -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:
|
||||
|
@ -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: |
|
||||
|
34
include/Game/Boss/SkeletalFishBossBattleDirector.hpp
Normal file
34
include/Game/Boss/SkeletalFishBossBattleDirector.hpp
Normal 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
|
||||
};
|
@ -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);
|
||||
|
23
include/Game/MapObj/SubmarineVolcanoBigColumn.hpp
Normal file
23
include/Game/MapObj/SubmarineVolcanoBigColumn.hpp
Normal 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;
|
||||
};
|
@ -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 *);
|
||||
|
@ -328,4 +328,6 @@ namespace MR {
|
||||
|
||||
ResTIMG* getTexFromArc(const char *, const LiveActor *);
|
||||
PartsModel* createBloomModel(LiveActor *, MtxPtr);
|
||||
|
||||
CollisionParts* getCollisionParts(const LiveActor *);
|
||||
};
|
||||
|
134
source/Game/Boss/SkeletalFishBossBattleDirector.cpp
Normal file
134
source/Game/Boss/SkeletalFishBossBattleDirector.cpp
Normal 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() {
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user