pikiState progress + MoviePlayer cleanup

This commit is contained in:
HeartPiece 2022-10-14 17:34:48 +11:00
parent 9ff7c24741
commit 67504acc63
14 changed files with 455 additions and 1162 deletions

View File

@ -29,11 +29,11 @@ struct IPikiAnims {
GAKKARI, // disappointed
GATTU, // agree
GETUP,
GFURI1, // shake1
GFURI2, // shake2
GNUKE, // evade?
GROWUP1,
GROWUP2,
GFURI1, // shake1
GFURI2, // shake2
GNUKE, // evade?
GROWUP1, // nectar (high jump)
GROWUP2, // nectar (low jump)
HNOBORU, // climb
IRAIRA, // frustrated
JHIT,

View File

@ -9,20 +9,12 @@
#include "DvdThreadCommand.h"
#include "IDelegate.h"
#include "Vector3.h"
#include "TagParm.h"
struct JKRHeap;
struct JPAResourceManager;
struct Pikmin_TCreateObject_JAudio;
struct Viewport;
namespace Game {
struct Creature;
struct MovieConfig;
struct Navi;
struct PlayCamera;
namespace P2JST {
struct ObjectSystem;
}
} // namespace Game
namespace JStudio {
struct TControl;
struct TFactory;
@ -43,52 +35,76 @@ struct Demo;
}
namespace Game {
struct Creature;
struct MovieConfig;
struct Navi;
struct PlayCamera;
namespace P2JST {
struct ObjectSystem;
}
struct MovieConfig : public CNode {
virtual ~MovieConfig() { } // _08 (weak)
struct TParms : public TagParameters {
virtual ~TParms(); // _08 (weak)
};
MovieConfig() { }
virtual ~MovieConfig() { } // _08 (weak)
void dump();
void isSkippable();
void isNeverSkippable();
void is(char*);
void read(Stream&);
// _00 = VTBL
// _00-_18 = CNode
u8 _18[0xBE - 0x18]; // _18
u16 m_drawFlags; // _BE
};
struct MoviePlayArg {
inline MoviePlayArg(); // not in callmap
MoviePlayArg(char* p1, char* p2, IDelegate3<MovieConfig*, unsigned long, unsigned long>* p3, u32 p4);
// inline MoviePlayArg(char* movieName, char* IDelegate3<MovieConfig*, u32, u32>* p2, IDelegate3<MovieConfig*, void*, u32>* p3)
// : _0C(p2)
// , m_movieName(movieName)
// , m_courseName(nullptr)
// , m_origin(zero)
// , m_angle(0.0f)
// , m_naviID(0)
// , _10(p3)
// , _08(nullptr)
// , streamID(0)
char* m_movieName; // _00
char* m_courseName; // _04
char* _08; // _08
IDelegate3<MovieConfig*, unsigned long, unsigned long>* _0C; // _0C
IDelegate3<MovieConfig*, unkptr, unsigned long>* _10; // _10 /* Second type is unknown. */
u32 _14; // _14
Vector3f m_origin; // _18 /* previously called m_itemPosition */
float m_angle; // _24 /* previously called m_itemFaceDirection */
u32 m_naviID; // _28
u32 m_streamID; // _2C
Vector3f* m_soundPosition; // _30
inline MoviePlayArg(char* movieName, char* courseName, IDelegate3<MovieConfig*, u32, u32>* p3, u32 naviID)
{
m_movieName = movieName;
m_courseName = courseName;
_0C = p3;
m_origin = Vector3f(0.0f);
m_angle = 0.0f;
m_naviID = naviID;
_10 = nullptr;
_08 = nullptr;
m_streamID = 0;
_14 = 0;
m_soundPosition = nullptr;
}
char* m_movieName; // _00
char* m_courseName; // _04
char* _08; // _08
IDelegate3<MovieConfig*, u32, u32>* _0C; // _0C
IDelegate3<MovieConfig*, unkptr, u32>* _10; // _10 /* Second type is unknown. */
u32 _14; // _14
Vector3f m_origin; // _18 /* previously called m_itemPosition */
float m_angle; // _24 /* previously called m_itemFaceDirection */
u32 m_naviID; // _28
u32 m_streamID; // _2C
Vector3f* m_soundPosition; // _30
};
// Size: 0x5C
struct MovieContext : public CNode {
virtual MovieContext* getChild(); // _08
virtual MovieContext* getNext(); // _0C
MovieContext();
virtual ~MovieContext(); // _08 (weak)
virtual MovieContext* getChild(); // _10 (weak)
virtual MovieContext* getNext(); // _14 (weak)
// _00 = VTBL
// _00-_18 = CNode
MoviePlayArg m_arg; // _18
MovieConfig* m_config; // _4C
Navi* m_navi; // _50
@ -96,19 +112,33 @@ struct MovieContext : public CNode {
PlayCamera* m_camera; // _58
};
struct MovieList : public CNode {
MovieList();
virtual ~MovieList(); // _08 (weak)
void construct();
void findConfig(char*, char*);
void read(Stream&);
// _00 = VTBL
// _00-_18 = CNode
MovieConfig m_config; // _18
};
// Size: 0x1F8
struct MoviePlayer : JKRDisposer {
struct MoviePlayer : public JKRDisposer {
MoviePlayer();
virtual ~MoviePlayer(); // _00
virtual ~MoviePlayer(); // _08
void allocContexts();
void allocMovieHeap(unsigned long);
void allocMovieHeap(u32);
void clearContexts();
void clearPauseAndDraw();
void clearSuspendedDemo();
void draw(struct Graphics&);
void drawLoading(struct Graphics&);
void draw(Graphics&);
void drawLoading(Graphics&);
MovieConfig* findConfig(char*, char*);
PlayCamera* getActiveGameCamera();
Navi* getActiveOrima();
@ -123,61 +153,64 @@ struct MoviePlayer : JKRDisposer {
void setCamera(Camera*);
void setContext(MovieContext*, MovieConfig*, MoviePlayArg&);
void setPauseAndDraw(MovieConfig*);
void setTransform(Vector3f&, float);
void setTransform(Vector3f&, f32);
void skip();
unknown start(Camera*);
bool stop();
void unsuspend(long, bool);
unknown update(Controller*, Controller*);
int m_demoState; // _18
DvdThreadCommand m_threadCommand;
u8 m_isPaused;
// _00 = VTBL
// _00-_18 = JKRDisposer
int m_demoState; // _18
DvdThreadCommand m_threadCommand; // _1C
u8 m_isPaused; // _88
// TODO: Is this a quat?
Vector3f m_cameraPosition;
float m_cameraAngle;
u8 _09C[4];
float _0A0;
bool m_canFinish;
Vector3f m_offset;
PSM::Demo* m_demoPSM;
MovieConfig* m_currentConfig;
IDelegate3<MovieConfig*, u32, u32>* _0B4;
u32 m_naviID;
IDelegate3<MovieConfig*, void*, u32>* _0BC;
char* _0C0;
u32 m_streamID;
MovieContext* m_contexts;
MovieContext _0CC;
MovieContext _128;
int m_suspend;
int m_contextsCount;
Navi* _18C;
PlayCamera* _190;
Creature* m_targetObject;
Viewport* m_viewport;
Navi* _19C;
PlayCamera* _1A0;
IDelegate1<MoviePlayer>* _1A4;
JKRHeap* m_movieHeap;
u32 m_movieHeapFreeSize;
int m_messageEndCount;
Vector3f m_cameraPosition; // _8C
float m_cameraAngle; // _98
u8 _09C[4]; // _9C
float _0A0; // _A0
bool m_canFinish; // _A4
Vector3f* m_offset; // _A8
PSM::Demo* m_demoPSM; // _AC
MovieConfig* m_currentConfig; // _B0
IDelegate3<MovieConfig*, u32, u32>* _0BC; // _B4
u32 m_naviID; // _B8
IDelegate3<MovieConfig*, void*, u32>* _0C4; // _BC
char* _0C0; // _C0
u32 m_streamID; // _C4
MovieContext* m_contexts; // _C8
MovieContext _0CC; // _CC
MovieContext _128; // _128
int m_suspend; // _184
int m_contextsCount; // _188
Navi* _18C; // _18C
PlayCamera* _190; // _190
Creature* m_targetObject; // _194
Viewport* m_viewport; // _198
Navi* _19C; // _19C
PlayCamera* _1A0; // _1A0
IDelegate1<MoviePlayer>* _1A4; // _1A4
u8 _1A8[0x8]; // _1A8, unknown
JKRHeap* m_movieHeap; // _1B0
u32 m_movieHeapFreeSize; // _1B4
int m_messageEndCount; // _1B8
// TODO: Is this a quat?
Vector3f m_transform;
float m_transformAngle;
P2JST::ObjectSystem* m_objectSystem;
JStudio::TControl* m_studioControl;
JStudio::TFactory* m_studioFactory;
JStudio_JStage::TCreateObject* m_studioStageCreateObject;
JStudio_JParticle::TCreateObject* m_studioParticleCreateObject;
Pikmin_TCreateObject_JAudio* m_pikminCreateObjectAudio;
P2JME::Movie::TControl* m_movieControl;
u32 m_counter;
void* m_stbFile;
Vector3f m_transform; // _1BC
float m_transformAngle; // _1C8
P2JST::ObjectSystem* m_objectSystem; // _1CC
JStudio::TControl* m_studioControl; // _1D0
JStudio::TFactory* m_studioFactory; // _1D4
JStudio_JStage::TCreateObject* m_studioStageCreateObject; // _1D8
JStudio_JParticle::TCreateObject* m_studioParticleCreateObject; // _1DC
Pikmin_TCreateObject_JAudio* m_pikminCreateObjectAudio; // _1E0
P2JME::Movie::TControl* m_movieControl; // _1E4
u32 m_counter; // _1E8
void* m_stbFile; // _1EC
// TODO: This might be a BitFlag<u32> object
enum { IS_ACTIVE = 1, _1F0_UNKNOWN_2 = 2, _FORCE_INT = 0xFFFFFFFF } m_flags; // _1F0
// u32 m_isActive : 1, m_1F0_Unknown : 1;
JPAResourceManager* m_resourceManager;
JPAResourceManager* m_resourceManager; // _1F4
};
extern MoviePlayer* moviePlayer;

View File

@ -36,6 +36,7 @@ struct ShadowParam;
struct Interaction;
struct Piki;
struct PikiState;
struct PikiParms;
typedef enum EPikiColor {
Blue = 0,
@ -191,12 +192,14 @@ struct Piki : public FakePiki {
void updateDope();
void updateColor();
inline PikiParms* getParms() { return static_cast<PikiParms*>(m_parms); }
// _000 = VTBL
// _000-_24C = FakePiki
u32 _24C; // _24C
PSM::Piki* m_soundObj; // _250
f32 m_targetLookAngle; // _254
::efx::TPkEffect* m_effectsObj; // _258
efx::TPkEffect* m_effectsObj; // _258
Vector3f _25C; // _25C
SysShape::Joint* m_happaJoint3; // _268
Vector3f _26C; // _26C

View File

@ -10,48 +10,59 @@
#include "Sys/Triangle.h"
#include "Vector3.h"
// panic types:
#define PIKIPANIC_Fire (0)
#define PIKIPANIC_Water (1)
#define PIKIPANIC_Gas (2)
#define PIKIPANIC_Panic (3)
#define PIKIPANIC_Other (4)
namespace Game {
struct Piki;
struct Navi;
struct Creature;
enum PikiStateID {
PIKISTATE_Walk = 0,
PIKISTATE_DemoWait = 1,
PIKISTATE_LookAt = 2,
PIKISTATE_Walk = 0, // 'default' walk/follow
PIKISTATE_DemoWait = 1, // during cutscenes
PIKISTATE_LookAt = 2, // look at target (whistled, cutscenes)
PIKISTATE_GoHang = 3,
PIKISTATE_Hanged = 4,
PIKISTATE_WaterHanged = 5,
PIKISTATE_Flying = 6,
PIKISTATE_Flying = 6, // thrown
PIKISTATE_KokeDamage = 7,
PIKISTATE_Blow = 8,
PIKISTATE_Flick = 9,
PIKISTATE_Drown = 10,
PIKISTATE_Swallowed = 11,
PIKISTATE_Nukare = 12,
PIKISTATE_Flick = 9, // knockback from enemy
PIKISTATE_Drown = 10, // drowning
PIKISTATE_Swallowed = 11, // being eaten
PIKISTATE_Nukare = 12, // being plucked (by hand)
PIKISTATE_Absorb = 13,
PIKISTATE_Growup = 14,
PIKISTATE_Tane = 15,
PIKISTATE_Dope = 16,
PIKISTATE_AutoNuki = 17,
PIKISTATE_HipDrop = 18,
PIKISTATE_Growup = 14, // nectared
PIKISTATE_Tane = 15, // abducted by snitchbug
PIKISTATE_Dope = 16, // spicy spray
PIKISTATE_AutoNuki = 17, // being plucked (by pluckaphone)
PIKISTATE_HipDrop = 18, // purple pound
PIKISTATE_Emotion = 19,
PIKISTATE_Pressed = 20,
PIKISTATE_Panic = 21,
PIKISTATE_DenkiDying = 22,
PIKISTATE_Pressed = 20, // squashed
PIKISTATE_Panic = 21, // panicking
PIKISTATE_DenkiDying = 22, // electricity zap
PIKISTATE_FallMeck = 23,
PIKISTATE_Dying = 24,
PIKISTATE_Dead = 25,
PIKISTATE_Dying = 24, // dying
PIKISTATE_Dead = 25, // dead
PIKISTATE_Suikomi = 26,
PIKISTATE_Holein = 27,
PIKISTATE_Fountainon = 28,
PIKISTATE_Holein = 27, // enter cave hole
PIKISTATE_Fountainon = 28, // enter geyser
// no 29?
PIKISTATE_Koke = 30,
PIKISTATE_Escape = 31,
PIKISTATE_Carrot = 32,
PIKISTATE_Carrot = 32, // pikipedia carrot
PIKISTATE_Count,
};
struct DopeStateArg : public StateArg {
int _00; // _00
};
struct FountainonStateArg : public StateArg {
Vector3f m_position; // _00
};
@ -65,6 +76,10 @@ struct NukareStateArg : public StateArg {
Navi* m_navi; // _04
};
struct PanicStateArg : public StateArg {
u16 m_panicType; // _00
};
struct SwallowedStateArg : public StateArg {
int m_animIdx; // _00
};
@ -248,11 +263,11 @@ struct PikiDopeState : public PikiState {
// _00 = VTBL
// _00-_10 = PikiState
u8 _10[0x4]; // _10, unknown
f32 _14; // _14, dope timer?
s16 _18; // _18
s16 _1A; // _1A
Navi* m_navi; // _1C
bool _10; // _10
f32 _14; // _14, dope timer?
s16 _18; // _18, spray type?
s16 m_animIdx; // _1A
Navi* m_navi; // _1C
};
struct PikiDrownState : public PikiState {
@ -599,9 +614,19 @@ struct PikiPanicState : public PikiState {
void panicRun(Piki*);
void panicLobster(Piki*);
void checkDemo(Piki*);
// _00 = VTBL
// _00-_10 = PikiState
u8 _10[0x1C]; // _10, unknown
f32 _10; // _10
f32 _14; // _14
f32 _18; // _18
f32 _1C; // _1C
bool _20; // _20
u8 _21; // _21
u8 _22; // _22
u16 m_panicType; // _24
f32 _28; // _28
};
struct PikiPressedState : public PikiState {

View File

@ -23,7 +23,7 @@ struct SetSe {
struct SeMgr {
enum SetSeId {
UNK_7 = 7, // unknown, used in PikiPanicState::init
};
SeMgr();

View File

@ -11,21 +11,23 @@ struct TagParm;
struct TagParameters : public CNode {
TagParameters(char*);
virtual ~TagParameters() { } // _00
virtual ~TagParameters() { } // _08 (weak)
void read(Stream&);
// Unused/inlined:
bool isEndToken(char* token)
{
// UNUSED FUNCTION
int strLen = strlen("end");
return (strncmp("end", token, strLen)) == 0;
}
void add(TagParm*);
void write(Stream&);
void dump();
// _00 = VTBL
// _00-_18 = CNode
TagParm* m_head; // _18
};

View File

@ -5,6 +5,11 @@
namespace efx {
struct TEnemyDive : public TSimple2 {
inline TEnemyDive()
: TSimple2(PID_EnemyDive_1, PID_EnemyDive_2)
{
}
virtual bool create(Arg*); // _08
// _00 = VTBL

View File

@ -4,8 +4,11 @@
#include "efx/TSimple.h"
#include "efx/TChasePos.h"
#include "efx/TChaseMtx.h"
#include "efx/Toe.h"
namespace efx {
void createSimplePkAp(Vector3f&);
struct TPkAp : public TSimple2 {
inline TPkAp()
: TSimple2(PID_PkAp_1, PID_PkAp_2)
@ -137,6 +140,69 @@ struct TPkOneEmitterSimple : public JPAEmitterCallBack {
// _04-_08 = JPAEmitterCallBack
};
struct TPkEffectTane {
int _00; // _00
u32 _04; // _04, unknown
u32 _08; // _08, unknown
u32 _0C; // _0C, unknown
u32 _10; // _10, unknown
};
struct TPkEffect {
TPkEffect();
void init();
void update();
void updateMoeSmoke_();
void updateHamon_();
void createKourin_(Vector3f*);
void killKourin_();
void createDoping_(Vector3f*);
void killDoping_();
void createNage_(Vector3f*, Mtx);
void killNage_();
void createMoe_(Vector3f*);
void killMoe_();
void createChudoku_(Vector3f*);
void killChudoku_();
void createMoeSmoke_(Vector3f*);
void killMoeSmoke_();
void createBlackDown_(Vector3f*);
void killBlackDown();
void createWater_(Vector3f*);
void killWater_();
void createHamonA_(Vector3f*);
void killHamonA_();
void createHamonB_(Vector3f*);
void killHamonB_();
u32 _00; // _00, bitfield?
u8 _04[4]; // _04, unknown
int _08; // _08, kourin color?
Vector3f* _0C; // _0C, kourin position?
Vector3f* _10; // _10
Vector3f* _14; // _14
Matrixf* _18; // _18
Matrixf* _1C; // _1C
u32 _20; // _20, unknown
u32 _24; // _24, unknown
Vector3f _28; // _28, dive vector?
TPkNageBlur m_nageBlur; // _34
TPkMoeA m_moeA; // _48
TPkBlackDown m_blackDown; // _5C
ToeKourin m_oeKourin; // _70
u8 _8C[4]; // _8C, unknown
ToeDoping m_oeDoping; // _90
ToeNagekira m_oeNagekira; // _AC
ToeMoeBC m_oeMoeBC[2]; // _C8
ToeChudoku m_oeChudoku; // _100
ToeWater m_oeWater[2]; // _11C
ToeHamonA m_oeHamonA; // _154
ToeHamonB m_oeHamonB; // _170
ToeMoeSmoke m_oeMoeSmoke; // _18C
};
struct TPkEffectMgr {
TPkEffectMgr();
@ -147,6 +213,7 @@ struct TPkEffectMgr {
void Instance();
void startMgr();
void exitMgr();
void resetContextS();
void createS_Dead(Vector3f&, long);
void createS_Chinka(Vector3f&);

File diff suppressed because it is too large Load Diff

View File

@ -1,31 +0,0 @@
#ifndef _GAME_MOVIECONFIG_H
#define _GAME_MOVIECONFIG_H
/*
__vt__Q24Game11MovieConfig:
.4byte 0
.4byte 0
.4byte __dt__Q24Game11MovieConfigFv
.4byte getChildCount__5CNodeFv
.4byte 0
*/
struct CNode {
virtual ~CNode(); // _08 (weak)
virtual void getChildCount(); // _0C
};
namespace Game {
struct MovieConfig : public CNode {
virtual ~MovieConfig(); // _08 (weak)
virtual void _10() = 0; // _10
void dump();
void isSkippable();
void isNeverSkippable();
void is(char*);
void read(Stream&);
};
} // namespace Game
#endif

View File

@ -1,25 +0,0 @@
#ifndef _GAME_MOVIECONFIG_TPARMS_H
#define _GAME_MOVIECONFIG_TPARMS_H
/*
__vt__Q34Game11MovieConfig6TParms:
.4byte 0
.4byte 0
.4byte __dt__Q34Game11MovieConfig6TParmsFv
.4byte getChildCount__5CNodeFv
*/
struct CNode {
virtual ~CNode(); // _08 (weak)
virtual void getChildCount(); // _0C
};
namespace Game {
namespace MovieConfig {
struct TParms : public CNode {
virtual ~TParms(); // _08 (weak)
};
} // namespace MovieConfig
} // namespace Game
#endif

View File

@ -1,29 +0,0 @@
#ifndef _GAME_MOVIECONTEXT_H
#define _GAME_MOVIECONTEXT_H
/*
__vt__Q24Game12MovieContext:
.4byte 0
.4byte 0
.4byte __dt__Q24Game12MovieContextFv
.4byte getChildCount__5CNodeFv
.4byte getChild__Q24Game12MovieContextFv
.4byte getNext__Q24Game12MovieContextFv
*/
struct CNode {
virtual ~CNode(); // _08 (weak)
virtual void getChildCount(); // _0C
};
namespace Game {
struct MovieContext : public CNode {
virtual ~MovieContext(); // _08 (weak)
virtual void getChild(); // _10 (weak)
virtual void getNext(); // _14 (weak)
MovieContext();
};
} // namespace Game
#endif

View File

@ -1,28 +0,0 @@
#ifndef _GAME_MOVIELIST_H
#define _GAME_MOVIELIST_H
/*
__vt__Q24Game9MovieList:
.4byte 0
.4byte 0
.4byte __dt__Q24Game9MovieListFv
.4byte getChildCount__5CNodeFv
*/
struct CNode {
virtual ~CNode(); // _08 (weak)
virtual void getChildCount(); // _0C
};
namespace Game {
struct MovieList : public CNode {
virtual ~MovieList(); // _08 (weak)
void construct();
MovieList();
void findConfig(char*, char*);
void read(Stream&);
};
} // namespace Game
#endif

View File

@ -1,46 +0,0 @@
#ifndef _GAME_MOVIEPLAYER_H
#define _GAME_MOVIEPLAYER_H
/*
__vt__Q24Game11MoviePlayer:
.4byte 0
.4byte 0
.4byte __dt__Q24Game11MoviePlayerFv
*/
namespace Game {
struct MoviePlayer {
virtual ~MoviePlayer(); // _08 (weak)
MoviePlayer();
void reset();
void getActiveOrima();
void getActiveGameCamera();
void allocMovieHeap(unsigned long);
void play(Game::MoviePlayArg&);
void play(Game::MovieConfig*, Game::MoviePlayArg&, bool);
void findConfig(char*, char*);
void allocContexts();
void clearContexts();
void clearSuspendedDemo();
void getNewContext();
void setContext(Game::MovieContext*, Game::MovieConfig*, Game::MoviePlayArg&);
void loadResource();
void parse(bool);
void update(Controller*, Controller*);
void draw(Graphics&);
void start(Camera*);
void stop();
void setCamera(Camera*);
void unsuspend(long, bool);
void resetFrame();
void setTransform(Vector3<float>&, float);
void isPlaying(char*);
void drawLoading(Graphics&);
void skip();
void setPauseAndDraw(Game::MovieConfig*);
void clearPauseAndDraw();
};
} // namespace Game
#endif