diff options
Diffstat (limited to '')
| -rw-r--r-- | include/g3dhax.h | 40 | ||||
| -rw-r--r-- | kamek_pal.x | 24 | ||||
| -rw-r--r-- | src/koopatlas/map.cpp | 4 | ||||
| -rw-r--r-- | src/koopatlas/shop.cpp | 48 | ||||
| -rw-r--r-- | src/koopatlas/shop.h | 4 | 
5 files changed, 116 insertions, 4 deletions
| diff --git a/include/g3dhax.h b/include/g3dhax.h index d358436..eb4ffd0 100644 --- a/include/g3dhax.h +++ b/include/g3dhax.h @@ -30,6 +30,7 @@ namespace nw4r {  		class ResAnmChr { public: void* data; ResAnmChr(void *p = NULL) { data = p; } };  		class ResAnmVis { public: void* data; ResAnmVis(void *p = NULL) { data = p; } }; +		class ResAnmClr { public: void* data; ResAnmClr(void *p = NULL) { data = p; } };  		class ResAnmTexPat { public: void* data; ResAnmTexPat(void *p = NULL) { data = p; } };  		class ResAnmTexSrt { public: void* data; ResAnmTexSrt(void *p = NULL) { data = p; } }; @@ -51,7 +52,7 @@ namespace nw4r {  				void * /*ResTex*/ GetResTex(u32 idx) const;  				ResAnmChr GetResAnmChr(const char *str) const;  				ResAnmVis GetResAnmVis(const char *str) const; -				void * /*ResAnmClr*/ GetResAnmClr(const char *str) const; +				ResAnmClr GetResAnmClr(const char *str) const;  				ResAnmTexPat GetResAnmTexPat(const char *str) const;  				ResAnmTexSrt GetResAnmTexSrt(const char *str) const;  				void * /*ResAnmScn*/ GetResAnmScn(const char *str) const; @@ -89,6 +90,13 @@ namespace nw4r {  				void * /*ResMdl*/ resMdl); +		void *__AnmObjClrRes__Construct( +				void * /*MEMAllocator*/ pHeap, +				u32 *pSize, +				void * /*ResAnmVis*/ resAnm, +				void * /*ResMdl*/ resMdl); + +  		void *__AnmObjTexPatRes__Construct(  				void * /*MEMAllocator*/ pHeap,  				u32 *pSize, @@ -315,6 +323,36 @@ namespace m3d {  			void bind(/*b*/mdl_c *model, nw4r::g3d::ResAnmVis anmRes, int unk);  	}; +	class anmClr_c : public fanm_c { +		public: +			class child_c : public fanm_c { +				~child_c(); +				int _vf0C(); +				// some methods missing +			}; + +			~anmClr_c(); +			int _vf0C(); +			void detach(); +			void process(); + +			bool setup(nw4r::g3d::ResMdl modelRes, nw4r::g3d::ResAnmClr anmRes, +					mAllocator_c *allocator, u32 *sizeOutPtr, int count); // count usually 1 or 2, sizeOutPtr usually 0 + +			void bind(/*b*/mdl_c *model, nw4r::g3d::ResAnmVis anmRes, int entryNumber, int _param4); // usually entryNumber is 0, param4 is 0 or 1 + + +			float getFrameForEntry(int number); +			void setFrameForEntry(float value, int number); +			float getUpdateRateForEntry(int number); +			void setUpdateRateForEntry(float value, int number); +			bool isEntryAnimationDone(int number); +			bool queryEntrySomething(float value, int number); +			void setEntryByte34(u8 value, int number); +			float getEntryField28(int number); + +	}; +  	class anmTexPat_c : public banm_c {  		public:  			class child_c : public fanm_c { diff --git a/kamek_pal.x b/kamek_pal.x index 1619ca6..f397994 100644 --- a/kamek_pal.x +++ b/kamek_pal.x @@ -1237,11 +1237,13 @@ SECTIONS {  	GetResMdl = 0x80239F70;  	GetResAnmChr = 0x8023A1F0;  	GetResAnmVis = 0x8023A260; +	GetResAnmClr = 0x8023A2D0;  	GetResAnmTexPat = 0x8023A340;  	GetResAnmTexSrt = 0x8023a3b0;  	GetResAnmChr__Q34nw4r3g3d7ResFileCFPCc = 0x8023a1f0;  	GetResAnmVis__Q34nw4r3g3d7ResFileCFPCc = 0x8023a260; +	GetResAnmClr__Q34nw4r3g3d7ResFileCFPCc = 0x8023A2D0;  	GetResAnmTexPat__Q34nw4r3g3d7ResFileCFPCc = 0x8023a340;  	GetResAnmTexSrt__Q34nw4r3g3d7ResFileCFPCc = 0x8023a3b0; @@ -1285,6 +1287,28 @@ SECTIONS {  	bind__Q23m3d8anmVis_cFPQ23m3d5mdl_cQ34nw4r3g3d9ResAnmVisi = 0x80167ea0;  	internalBind__Q23m3d8anmVis_cFv = 0x80167f90; +	/* m3d::anmClr_c */ +	__vt__Q23m3d8anmClr_c = 0x80329860; +	__dt__Q23m3d8anmClr_cFv = 0x80165FB0; +	vf0C__Q23m3d8anmClr_cFv = 0x801664E0; +	detach__Q23m3d8anmClrFv = 0x80166020; +	process__Q23m3d8anmClrFv = 0x80166310; + +	setup__Q23m3d8anmClrFQ34nw4r3g3d6ResMdlQ34nw4r3g3d9ResAnmClrP12mAllocator_cPUii = 0x80165D70; +	bind__Q23m3d8anmClrFPQ23m3d5mdl_cPQ34nw4r3g3d9ResAnmClrii = 0x80166110; + + +	getFrameForEntry__Q23m3d8anmClrFv = 0x80166420; +	setFrameForEntry__Q23m3d8anmClrFfi = 0x80166430; +	getUpdateRateForEntry__Q23m3d8anmClrFv = 0x80166440; +	setUpdateRateForEntry__Q23m3d8anmClrFfi = 0x80166450; +	isEntryAnimationDone__Q23m3d8anmClrFv = 0x80166460; +	queryEntrySomething__Q23m3d8anmClrFv = 0x80166470; +	setEntryByte34__Q23m3d8anmClrFUci = 0x80166480; +	getEntryField28__Q23m3d8anmClrFv = 0x801664A0; + + +	/* m3d::anmTexPat_c */  	__vt__Q23m3d11anmTexPat_c = 0x80329890;  	__dt__Q23m3d11anmTexPat_cFv = 0x80166bb0;  	detach__Q23m3d11anmTexPat_cFv = 0x80166c20; diff --git a/src/koopatlas/map.cpp b/src/koopatlas/map.cpp index 4d2bc1d..1c2de26 100644 --- a/src/koopatlas/map.cpp +++ b/src/koopatlas/map.cpp @@ -387,6 +387,7 @@ void dWMMap_c::renderer_c::renderDoodadLayer(dKPLayer_s *layer, int alpha) {  					else  						frame = anim->start + (delta * value); +					float scaleYMod;  					// and apply it!  					switch (anim->type) {  						case dKPDoodad_s::animation_s::X_POS: @@ -403,6 +404,9 @@ void dWMMap_c::renderer_c::renderDoodadLayer(dKPLayer_s *layer, int alpha) {  							break;  						case dKPDoodad_s::animation_s::Y_SCALE:  							effectiveHeight = (effectiveHeight * frame / 100.0); + +							scaleYMod = doodad->height - effectiveHeight; +							effectiveY += scaleYMod;  							break;  						case dKPDoodad_s::animation_s::OPACITY:  							// TODO diff --git a/src/koopatlas/shop.cpp b/src/koopatlas/shop.cpp index 04d7e54..ed64c8e 100644 --- a/src/koopatlas/shop.cpp +++ b/src/koopatlas/shop.cpp @@ -165,6 +165,8 @@ int dWMShop_c::onCreate() {  			layout.enableNonLoopAnim(i);  		} +		layout.drawOrder = 0x01; +  		layoutLoaded = true;  	} @@ -186,7 +188,7 @@ int dWMShop_c::onExecute() {  		if (!layout.isAnyAnimOn()) {  			if (nowPressed & WPAD_B) { -				MapSoundPlayer(SoundRelatedClass, SE_SYS_WINDOW_CLOSE, 1); +				MapSoundPlayer(SoundRelatedClass, SE_SYS_DIALOGUE_OUT_AUTO, 1);  				CloseUpShop();  			} else if (nowPressed & WPAD_DOWN) {  				if (currentItem == 6) { return true; } @@ -252,6 +254,48 @@ int dWMShop_c::onDraw() {  	return true;  } +void dWMShop_c::specialDraw1() { +	OSReport("Lakionnnne...."); +	if (!isHidden) { +		Vec pos = {layout.posX, layout.posY, 40000.0}; +		S16Vec rot = {0,0,0}; +		Vec scale = {1.0, 1.0, 1.0}; +		matrix.translation(pos.x, pos.y, pos.z); +		matrix.applyRotationYXZ(&rot.x, &rot.y, &rot.z); + +		shopkeep.setDrawMatrix(matrix); +		shopkeep.setScale(&scale); +		shopkeep.calcWorld(false); +		shopkeep.scheduleForDrawing(); +		shopkeep._vf1C(); + +		if(this->ska.isAnimationDone()) +			this->ska.setCurrentFrame(0.0); +	} +	return; +} + +void dWMShop_c::specialDraw2() { +	OSReport("Lakituuu...."); +	if (!isHidden) { +		Vec pos = {layout.posX, layout.posY, 40000.0}; +		S16Vec rot = {0,0,0}; +		Vec scale = {1.0, 1.0, 1.0}; +		matrix.translation(pos.x, pos.y, pos.z); +		matrix.applyRotationYXZ(&rot.x, &rot.y, &rot.z); + +		shopkeep.setDrawMatrix(matrix); +		shopkeep.setScale(&scale); +		shopkeep.calcWorld(false); +		shopkeep.scheduleForDrawing(); +		shopkeep._vf1C(); + +		if(this->ska.isAnimationDone()) +			this->ska.setCurrentFrame(0.0); +	} +	return; +} +  void dWMShop_c::changeItem(int last, int current) { @@ -295,7 +339,7 @@ void dWMShop_c::LoadShopForWorld(int world) {  		return; }  	// Handle showing it -	MapSoundPlayer(SoundRelatedClass, SE_SYS_WINDOW_OPEN, 1); +	MapSoundPlayer(SoundRelatedClass, SE_SYS_DIALOGUE_IN, 1);  	isHidden = false;  	layout.enableNonLoopAnim(18); diff --git a/src/koopatlas/shop.h b/src/koopatlas/shop.h index 64e4453..b4281b7 100644 --- a/src/koopatlas/shop.h +++ b/src/koopatlas/shop.h @@ -8,7 +8,7 @@ extern "C" void *MapSoundPlayer(void *SoundClass, int soundID, int unk);  class dShopItem; -class dWMShop_c : public dBase_c { +class dWMShop_c : public dActor_c {  	public:  		dWMShop_c(); @@ -16,6 +16,8 @@ class dWMShop_c : public dBase_c {  		int onDelete();  		int onExecute();  		int onDraw(); +		void specialDraw1(); +		void specialDraw2();  		bool layoutLoaded;  		m2d::EmbedLayout_c layout; | 
