diff options
Diffstat (limited to '')
| -rw-r--r-- | NewerProject.yaml | 2 | ||||
| -rw-r--r-- | include/g3dhax.h | 268 | ||||
| -rwxr-xr-x | include/game.h | 23 | ||||
| -rw-r--r-- | kamek_ntsc.x | 6 | ||||
| -rw-r--r-- | kamek_ntsc2.x | 6 | ||||
| -rw-r--r-- | kamek_pal.x | 6 | ||||
| -rw-r--r-- | kamek_pal2.x | 6 | ||||
| -rw-r--r-- | mrsun.yaml | 21 | ||||
| -rwxr-xr-x | src/mrsun.cpp | 27 | 
9 files changed, 231 insertions, 134 deletions
| diff --git a/NewerProject.yaml b/NewerProject.yaml index 8a27c54..af9ab90 100644 --- a/NewerProject.yaml +++ b/NewerProject.yaml @@ -6,6 +6,7 @@ modules:    - processed/worldmap.yaml    - processed/levelnames.yaml    - processed/animtiles.yaml +  - processed/levelspecial.yaml    - processed/mrsun.yaml    - processed/spritetex.yaml  #  - processed/gakenoko.yaml @@ -20,7 +21,6 @@ modules:  #  - processed/msgbox.yaml  #  - processed/replay.yaml    - processed/growup.yaml -  #- processed/levelspecial.yaml    - processed/eventlooper.yaml    - processed/spritespawner.yaml    - processed/spriteswapper.yaml diff --git a/include/g3dhax.h b/include/g3dhax.h index c3aeaef..ac5ba80 100644 --- a/include/g3dhax.h +++ b/include/g3dhax.h @@ -1,159 +1,209 @@ +#ifndef __KAMEK_G3DHAX_H +#define __KAMEK_G3DHAX_H +  // nw4r::g3d wrapper  namespace nw4r { -namespace g3d { +	namespace g3d { -class ResName { -public: -	const char *name; +		class ResName { +			public: +				const char *name; + +				ResName(const char *p = NULL) { +					name = p; +				} +		}; -	ResName(const char *p = NULL) { -		name = p; -	} -}; +		class ResMdl { +			public: +				void * /*ResMdlData*/ data; -class ResFile { -public: -	void * /*ResFileData*/ data; +				ResMdl(void *p = NULL) { +					data = p; +				} -	ResFile(void *p = NULL) { -		data = p; -	} +				void * /*ResMat*/ GetResMat(const char *str) const; +		}; -	void Init(); -	bool CheckRevision() const; - -	void * /*ResMdl*/ GetResMdl(const char *str) const; -	void * /*ResPltt*/ GetResPltt(const ResName n) const; -	void * /*ResTex*/ GetResTex(const char *str) const; -	void * /*ResTex*/ GetResTex(const ResName n) const; -	void * /*ResTex*/ GetResTex(u32 idx) const; -	void * /*ResAnmChr*/ GetResAnmChr(const char *str) const; -	void * /*ResAnmVis*/ GetResAnmVis(const char *str) const; -	void * /*ResAnmClr*/ GetResAnmClr(const char *str) const; -	void * /*ResAnmTexPat*/ GetResAnmTexPat(const char *str) const; -	void * /*ResAnmTexSrt*/ GetResAnmTexSrt(const char *str) const; -	void * /*ResAnmScn*/ GetResAnmScn(const char *str) const; - -	bool Bind(ResFile rhs); -}; +		class ResFile { +			public: +				void * /*ResFileData*/ data; -void *__ScnMdlSimple__Construct( -	void * /*MEMAllocator*/ pHeap, -	u32 *pSize, -	void * /*ResMdl*/ mdl, -	int nView = 1); +				ResFile(void *p = NULL) { +					data = p; +				} +				void Init(); +				bool CheckRevision() const; -void *__ScnMdl__Construct( -	void * /*MEMAllocator*/ pHeap, -	u32 *pSize, -	void * /*ResMdl*/ mdl, -	u32 bufferOption, -	int nView = 1); +				ResMdl GetResMdl(const char *str) const; +				void * /*ResPltt*/ GetResPltt(const ResName n) const; +				void * /*ResTex*/ GetResTex(const char *str) const; +				void * /*ResTex*/ GetResTex(const ResName n) const; +				void * /*ResTex*/ GetResTex(u32 idx) const; +				void * /*ResAnmChr*/ GetResAnmChr(const char *str) const; +				void * /*ResAnmVis*/ GetResAnmVis(const char *str) const; +				void * /*ResAnmClr*/ GetResAnmClr(const char *str) const; +				void * /*ResAnmTexPat*/ GetResAnmTexPat(const char *str) const; +				void * /*ResAnmTexSrt*/ GetResAnmTexSrt(const char *str) const; +				void * /*ResAnmScn*/ GetResAnmScn(const char *str) const; +				bool Bind(ResFile rhs); +		}; -void *__AnmObjChrRes__Construct( -	void * /*MEMAllocator*/ pHeap, -	u32 *pSize, -	void * /*ResAnmChr*/ resAnm, -	void * /*ResMdl*/ resMdl, -	bool bHasCache); +		void *__ScnMdlSimple__Construct( +				void * /*MEMAllocator*/ pHeap, +				u32 *pSize, +				void * /*ResMdl*/ mdl, +				int nView = 1); -void *__AnmObjVisRes__Construct( -	void * /*MEMAllocator*/ pHeap, -	u32 *pSize, -	void * /*ResAnmVis*/ resAnm, -	void * /*ResMdl*/ resMdl); +		void *__ScnMdl__Construct( +				void * /*MEMAllocator*/ pHeap, +				u32 *pSize, +				void * /*ResMdl*/ mdl, +				u32 bufferOption, +				int nView = 1); -void *__AnmObjTexPatRes__Construct( -	void * /*MEMAllocator*/ pHeap, -	u32 *pSize, -	void * /*ResAnmTexPat*/ resAnm, -	void * /*ResMdl*/ resMdl, -	bool bHasCache); +		void *__AnmObjChrRes__Construct( +				void * /*MEMAllocator*/ pHeap, +				u32 *pSize, +				void * /*ResAnmChr*/ resAnm, +				void * /*ResMdl*/ resMdl, +				bool bHasCache); -void *__AnmObjTexSrtRes__Construct( -	void * /*MEMAllocator*/ pHeap, -	u32 *pSize, -	void * /*ResAnmTexSrt*/ resAnm, -	void * /*ResMdl*/ resMdl, -	bool bHasCache); +		void *__AnmObjVisRes__Construct( +				void * /*MEMAllocator*/ pHeap, +				u32 *pSize, +				void * /*ResAnmVis*/ resAnm, +				void * /*ResMdl*/ resMdl); -void *__AnmObjMatClrRes__Construct( -	void * /*MEMAllocator*/ pHeap, -	u32 *pSize, -	void * /*ResAnmMatClr*/ resAnm, -	void * /*ResMdl*/ resMdl, -	bool bHasCache); +		void *__AnmObjTexPatRes__Construct( +				void * /*MEMAllocator*/ pHeap, +				u32 *pSize, +				void * /*ResAnmTexPat*/ resAnm, +				void * /*ResMdl*/ resMdl, +				bool bHasCache); -void *__AnmObjShpRes__Construct( -	void * /*MEMAllocator*/ pHeap, -	u32 *pSize, -	void * /*ResAnmShp*/ resAnm, -	void * /*ResMdl*/ resMdl, -	bool bHasCache); +		void *__AnmObjTexSrtRes__Construct( +				void * /*MEMAllocator*/ pHeap, +				u32 *pSize, +				void * /*ResAnmTexSrt*/ resAnm, +				void * /*ResMdl*/ resMdl, +				bool bHasCache); +		void *__AnmObjMatClrRes__Construct( +				void * /*MEMAllocator*/ pHeap, +				u32 *pSize, +				void * /*ResAnmMatClr*/ resAnm, +				void * /*ResMdl*/ resMdl, +				bool bHasCache); -bool InsertIntoScene(void *scnObj); // 80164F90 -extern void *g3dMemAllocator; // 8042A6A8 +		void *__AnmObjShpRes__Construct( +				void * /*MEMAllocator*/ pHeap, +				u32 *pSize, +				void * /*ResAnmShp*/ resAnm, +				void * /*ResMdl*/ resMdl, +				bool bHasCache); -inline void *ConstructScnMdlSimple(void *mdl, int nView = 1) { -	return __ScnMdlSimple__Construct(g3dMemAllocator, 0, mdl, nView); -} -inline void *ConstructScnMdl(void *mdl, u32 bufferOption, int nView = 1) { -	return __ScnMdl__Construct(g3dMemAllocator, 0, mdl, bufferOption, nView); -} +		bool InsertIntoScene(void *scnObj); // 80164F90 +		extern void *g3dMemAllocator; // 8042A6A8 -} +		inline void *ConstructScnMdlSimple(void *mdl, int nView = 1) { +			return __ScnMdlSimple__Construct(g3dMemAllocator, 0, mdl, nView); +		} + +		inline void *ConstructScnMdl(void *mdl, u32 bufferOption, int nView = 1) { +			return __ScnMdl__Construct(g3dMemAllocator, 0, mdl, bufferOption, nView); +		} + + + +	}  }  class mHeapAllocator_c { // Actually that weird subclass. INCOMPLETE!! -public: -	char data1[0x10]; +	public: +		char data1[0x10]; -	mHeapAllocator_c(); -	virtual ~mHeapAllocator_c(); -	virtual void *alloc(u32 size); -	virtual void free(void *block); +		mHeapAllocator_c(); +		virtual ~mHeapAllocator_c(); +		virtual void *alloc(u32 size); +		virtual void free(void *block); -	bool link(s32 size, void *heap, const char *name, int align); -	u32 unlink(); +		bool link(s32 size, void *heap, const char *name, int align); +		u32 unlink(); -	char data2[8]; +		char data2[8];  };  namespace m3d { +	// random, just dumped it here because I dunno where else +	void DisableIndirectTexturing(); +	void InitTexObjWithResTex(GXTexObj *obj, /* ResTex */ void *resTex, GXTexWrapMode wrapS, GXTexWrapMode wrapT, GXTexFilter minFilt, GXTexFilter magFilt);  + +	// I need to do scnLeaf_c some time... + +	class proc_c { +		public: +			proc_c(); +			virtual ~proc_c(); + +			void setup(void *allocator = 0, u32 *size = 0); +			virtual int returnUnknown(); +			virtual void free(); +			virtual bool scheduleForDrawing(); +			virtual void drawOpa(); +			virtual void drawXlu(); + +			void setScnObjOption(ulong, ulong); +			bool getScnObjOption(ulong, ulong*); + +			void setScale(float x, float y, float z); +			void setScale(Vec vec); + +			void setDrawMatrix(Mtx *mtx); +			void getLocalMatrix(Mtx *mtx); +			void getViewMatrix(Mtx *mtx); + +			void calcWorld(bool); +			void calcView(bool); + +			void setDrawPriorities(int opa, int xlu); + +			void *scnObj; +	}; +  	class mdl_c { -	public: -		mdl_c(); -		virtual ~mdl_c(); +		public: +			mdl_c(); +			virtual ~mdl_c(); -		virtual void _vf0C(); -		virtual void _vf10(); -		virtual bool scheduleForDrawing(); -		virtual void bindAnim(void *anim, float boo); -		virtual void _vf1C(); +			virtual void _vf0C(); +			virtual void _vf10(); +			virtual bool scheduleForDrawing(); +			virtual void bindAnim(void *anim, float boo); +			virtual void _vf1C(); -		bool setup(void *model, void *allocator, u32 bufferOption, int nView, u32 *size); -		void oneSetupType(); -		void sub_80064BF0(); +			bool setup(nw4r::g3d::ResMdl model, void *allocator, u32 bufferOption, int nView, u32 *size); +			void oneSetupType(); +			void sub_80064BF0(); -		void setDrawMatrix(const Mtx matrix); +			void setDrawMatrix(const Mtx matrix); -		char data[0x3C]; +			char data[0x3C];  	};  }; @@ -166,3 +216,5 @@ void SetupTextures_Enemy(m3d::mdl_c *model, int sceneID); // 800B4170  void SetupTextures_MapObj(m3d::mdl_c *model, int sceneID); // 800B42B0  void SetupTextures_Item(m3d::mdl_c *model, int sceneID); // 800B43D0 +#endif + diff --git a/include/game.h b/include/game.h index 38e8dd6..3476eaa 100755 --- a/include/game.h +++ b/include/game.h @@ -1366,6 +1366,29 @@ public:  };
 +class dAc_Py_c : public dStageActor_c {
 +public:
 +	u8 data[0x1164 - 0x394];
 +	ActivePhysics bPhysics;
 +	ActivePhysics cPhysics;
 +	ActivePhysics dPhysics;
 +	ActivePhysics ePhysics;
 +	
 +	dAc_Py_c();
 +	
 +	int beforeCreate();
 +	int afterCreate(int);
 +	int beforeDelete();
 +	int afterDelete(int);
 +	int beforeExecute();
 +	int afterExecute(int);
 +	int beforeDraw();
 +	int afterDraw(int);
 +	
 +	~dAc_Py_c();
 +};
 +
 +
  /* TODO
  class dActorState_c : public dStageActor_c {
  public:
 diff --git a/kamek_ntsc.x b/kamek_ntsc.x index dab4502..4a7a35d 100644 --- a/kamek_ntsc.x +++ b/kamek_ntsc.x @@ -176,6 +176,7 @@ SECTIONS {  	StateID_DownMove_DiffEnd__15daEnBlockMain_c = 0x80352B74;  	__ct__5dEn_cFv = 0x80094E80; +	__dt__5dEn_cFv = 0x80095130;  	afterCreate__5dEn_cFi = 0x800951D0;  	afterExecute__5dEn_cFi = 0x80095480;  	kill__5dEn_cFv = 0x80097F70; @@ -185,6 +186,7 @@ SECTIONS {  	_vfCC__5dEn_cFP7Point2d = 0x800973F0;  	_vfD0__5dEn_cFP7Point2d = 0x800974F0;  	doStateChange__5dEn_cFP9StateBase = 0x800A7DF0; +	collisionCallback__5dEn_cFPQ213ActivePhysics4InfoPQ213ActivePhysics4Info = 0x80095950;  	preSpriteCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80095CE0;  	prePlayerCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80095D30;  	preYoshiCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80095F50; @@ -386,6 +388,10 @@ SECTIONS {  	instance__10dFlagMgr_c = 0x8042A078; +	addToList__13ActivePhysicsFv = 0x8008C330; +	initWithStruct__13ActivePhysicsFP8dActor_cPQ213ActivePhysics4Info = 0x8008C3E0; + +  	__ct__7PhysicsFv = 0x8007F7A0;  	setup__7PhysicsFP8dActor_cPQ27Physics4InfoUcUcP7Point2d = 0x8007FB10;  	addToList__7PhysicsFv = 0x8007F900; diff --git a/kamek_ntsc2.x b/kamek_ntsc2.x index 8307ebc..d59089a 100644 --- a/kamek_ntsc2.x +++ b/kamek_ntsc2.x @@ -176,6 +176,7 @@ SECTIONS {  	StateID_DownMove_DiffEnd__15daEnBlockMain_c = 0x80352B74;  	__ct__5dEn_cFv = 0x80094E80; +	__dt__5dEn_cFv = 0x80095130;  	afterCreate__5dEn_cFi = 0x800951D0;  	afterExecute__5dEn_cFi = 0x80095480;  	kill__5dEn_cFv = 0x80097F70; @@ -185,6 +186,7 @@ SECTIONS {  	_vfCC__5dEn_cFP7Point2d = 0x800973F0;  	_vfD0__5dEn_cFP7Point2d = 0x800974F0;  	doStateChange__5dEn_cFP9StateBase = 0x800A7DF0; +	collisionCallback__5dEn_cFPQ213ActivePhysics4InfoPQ213ActivePhysics4Info = 0x80095950;  	preSpriteCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80095CE0;  	prePlayerCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80095D30;  	preYoshiCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80095F50; @@ -386,6 +388,10 @@ SECTIONS {  	instance__10dFlagMgr_c = 0x8042A078; +	addToList__13ActivePhysicsFv = 0x8008C330; +	initWithStruct__13ActivePhysicsFP8dActor_cPQ213ActivePhysics4Info = 0x8008C3E0; + +  	__ct__7PhysicsFv = 0x8007F7A0;  	setup__7PhysicsFP8dActor_cPQ27Physics4InfoUcUcP7Point2d = 0x8007FB10;  	addToList__7PhysicsFv = 0x8007F900; diff --git a/kamek_pal.x b/kamek_pal.x index 75b50b9..b910118 100644 --- a/kamek_pal.x +++ b/kamek_pal.x @@ -176,6 +176,7 @@ SECTIONS {  	StateID_DownMove_DiffEnd__15daEnBlockMain_c = 0x80352E74;  	__ct__5dEn_cFv = 0x80094E80; +	__dt__5dEn_cFv = 0x80095130;  	afterCreate__5dEn_cFi = 0x800951D0;  	afterExecute__5dEn_cFi = 0x80095480;  	kill__5dEn_cFv = 0x80097F70; @@ -185,6 +186,7 @@ SECTIONS {  	_vfCC__5dEn_cFP7Point2d = 0x800973F0;  	_vfD0__5dEn_cFP7Point2d = 0x800974F0;  	doStateChange__5dEn_cFP9StateBase = 0x800A7DF0; +	collisionCallback__5dEn_cFPQ213ActivePhysics4InfoPQ213ActivePhysics4Info = 0x80095950;  	preSpriteCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80095CE0;  	prePlayerCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80095D30;  	preYoshiCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80095F50; @@ -386,6 +388,10 @@ SECTIONS {  	instance__10dFlagMgr_c = 0x8042A358; +	addToList__13ActivePhysicsFv = 0x8008C330; +	initWithStruct__13ActivePhysicsFP8dActor_cPQ213ActivePhysics4Info = 0x8008C3E0; + +  	__ct__7PhysicsFv = 0x8007F7A0;  	setup__7PhysicsFP8dActor_cPQ27Physics4InfoUcUcP7Point2d = 0x8007FB10;  	addToList__7PhysicsFv = 0x8007F900; diff --git a/kamek_pal2.x b/kamek_pal2.x index 8621496..87ce78f 100644 --- a/kamek_pal2.x +++ b/kamek_pal2.x @@ -176,6 +176,7 @@ SECTIONS {  	StateID_DownMove_DiffEnd__15daEnBlockMain_c = 0xDEADBEEF;  	__ct__5dEn_cFv = 0xDEADBEEF; +	__dt__5dEn_cFv = 0xDEADBEEF;  	afterCreate__5dEn_cFi = 0xDEADBEEF;  	afterExecute__5dEn_cFi = 0xDEADBEEF;  	kill__5dEn_cFv = 0xDEADBEEF; @@ -185,6 +186,7 @@ SECTIONS {  	_vfCC__5dEn_cFP7Point2d = 0xDEADBEEF;  	_vfD0__5dEn_cFP7Point2d = 0xDEADBEEF;  	doStateChange__5dEn_cFP9StateBase = 0xDEADBEEF; +	collisionCallback__5dEn_cFPQ213ActivePhysics4InfoPQ213ActivePhysics4Info = 0xDEADBEEF;  	preSpriteCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF;  	prePlayerCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF;  	preYoshiCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF; @@ -386,6 +388,10 @@ SECTIONS {  	instance__10dFlagMgr_c = 0xDEADBEEF; +	addToList__13ActivePhysicsFv = 0xDEADBEEF; +	initWithStruct__13ActivePhysicsFP8dActor_cPQ213ActivePhysics4Info = 0xDEADBEEF; + +  	__ct__7PhysicsFv = 0xDEADBEEF;  	setup__7PhysicsFP8dActor_cPQ27Physics4InfoUcUcP7Point2d = 0xDEADBEEF;  	addToList__7PhysicsFv = 0xDEADBEEF; @@ -3,23 +3,8 @@  source_files: [../src/mrsun.cpp]  hooks: -  - name: MrSun_Create +  - name: BuildEventBlock      type: add_func_pointer -    src_addr_pal: 0x80B0DFB8 -    target_func: 'MrSun_Create(MrSun *)' -     -  - name: MrSun_Execute -    type: add_func_pointer -    src_addr_pal: 0x80B0DFD0 -    target_func: 'MrSun_Execute(MrSun *)' - -  - name: MrSun_Draw -    type: patch -    addr_pal: 0x80B0DFDC -    data: '809D0810' - -  - name: MrSun_HeapDeallocated -    type: patch -    addr_pal: 0x80B0DFF8 -    data: '809D1F70' +    src_addr_pal: 0x80B0DFA0 +    target_func: 'daMrSun_c::build(void)' diff --git a/src/mrsun.cpp b/src/mrsun.cpp index b246131..668a789 100755 --- a/src/mrsun.cpp +++ b/src/mrsun.cpp @@ -1,24 +1,36 @@  #include <common.h> -#include <g3dhax.h>  #include <game.h> +#include <g3dhax.h> -class dMrSun_c : public dEn_c { +class daMrSun_c : public dEn_c {  	int onCreate();  	int onDelete();  	int onExecute();  	int onDraw();  	mHeapAllocator_c allocator; +	m3d::mdl_c model; -	static dMrSun_c *build(); +	static daMrSun_c *build();  }; +daMrSun_c *daMrSun_c::build() { +	void *buffer = AllocFromGameHeap1(sizeof(daMrSun_c)); +	return new(buffer) daMrSun_c; +} +  #define ACTIVATE	1  #define DEACTIVATE	0 -int dMrSun_c::onCreate() { +int daMrSun_c::onCreate() {  	OSReport("Creating the Mr.Sun Model"); +	allocator.link(-1, GameHeaps[0], 0, 0x20); + +	nw4r::g3d::ResFile rf(getResource("g3d/bubble.brres", "bubble")); +	model.setup(rf.GetResMdl("bubble"), &allocator, 0x224, 1, 0); +	SetupTextures_Enemy(&model, 0); +	allocator.unlink();  	OSReport("Setting Mr.Sun's Size to 4.0");  	this->scale = (Vec){4.0, 4.0, 4.0}; @@ -47,16 +59,17 @@ int dMrSun_c::onCreate() {  	return true;  } -int dMrSun_c::onDelete() { +int daMrSun_c::onDelete() {  	return true;  } -int dMrSun_c::onExecute() { +int daMrSun_c::onExecute() {  	OSReport("Oh Mr.Sun, Sun, Mr.Golden Sun");  	return true;  } -int dMrSun_c::onDraw() { +int daMrSun_c::onDraw() { +	model.scheduleForDrawing();  	return true;  } | 
