diff options
Diffstat (limited to 'src/koopatlas')
| -rw-r--r-- | src/koopatlas/core.cpp | 59 | ||||
| -rw-r--r-- | src/koopatlas/core.h | 9 | ||||
| -rw-r--r-- | src/koopatlas/starcoin.cpp | 432 | ||||
| -rw-r--r-- | src/koopatlas/starcoin.h | 55 | 
4 files changed, 143 insertions, 412 deletions
diff --git a/src/koopatlas/core.cpp b/src/koopatlas/core.cpp index 8584ee9..462b995 100644 --- a/src/koopatlas/core.cpp +++ b/src/koopatlas/core.cpp @@ -269,10 +269,10 @@ bool WMInit_SetupExtra(void *ptr) {  	// it is created in dScKoopatlas_c::onCreate  	SpammyReport("creating SHOP\n"); -	wm->shop = (dWMShop_c*)CreateParentedObject(WM_SHOP, wm, 0, 2); +	wm->shop = (dWMShop_c*)CreateParentedObject(WM_SHOP, wm, 0, 0);  	SpammyReport("creating Star Coin Menu\n"); -	wm->coins = (dWMStarCoin*)CreateParentedObject(WM_STARCOIN, wm, 0, 2); +	wm->coins = (dWMStarCoin_c*)CreateParentedObject(WM_STARCOIN, wm, 0, 0);  	SpammyReport("SetupExtra done\n"); @@ -333,6 +333,8 @@ DoStartLevel(GetGameMgr(), &sl);  int dScKoopatlas_c::onCreate() { +	OSReport("KP scene settings: %08x\n", settings); +  	SpammyReport("onCreate() called\n");  	SpammyReport("LoadMapScene()\n"); @@ -401,6 +403,8 @@ int dScKoopatlas_c::onCreate() {  	SaveBlock *save = GetSaveFile()->GetBlock(-1);  	currentMapID = save->current_world; +	somethingAboutSound(_8042A788); +  	return true;  } @@ -541,30 +545,31 @@ void dScKoopatlas_c::executeState_CSMenu() {  			switch (CSMENU_CURRENT(this->csMenu)) {  				case 0:  					// Star Coins -			   		if (pathManager.currentNode->type == dKPNode_s::LEVEL) { -			   			int w = pathManager.currentNode->levelNumber[0]; -						if (w == 9) { -				   			int l = pathManager.currentNode->levelNumber[1]; - -							if      ((l < 6)  || (l == 33) || (l == 34)) -								coins->LoadCoinsForWorld(9); -							else if ((l < 11) || (l == 35) || (l == 36)) -								coins->LoadCoinsForWorld(10); -							else if ((l < 16) || (l == 37) || (l == 38) || (l == 31) ) -								coins->LoadCoinsForWorld(11); -							else if ((l < 19) || (l == 39) || (l == 40)) -								coins->LoadCoinsForWorld(12); -							else -								coins->LoadCoinsForWorld(13); - -							state.setState(&StateID_CoinsWait); -						} -						else { -							coins->LoadCoinsForWorld(w-1); -							state.setState(&StateID_CoinsWait); -						} -					} -					else { MapSoundPlayer(SoundRelatedClass, SE_SYS_INVALID, 1); } +//			   		if (pathManager.currentNode->type == dKPNode_s::LEVEL) { +//			   			int w = pathManager.currentNode->levelNumber[0]; +//						if (w == 9) { +//				   			int l = pathManager.currentNode->levelNumber[1]; +// +//							if      ((l < 6)  || (l == 33) || (l == 34)) +//								coins->LoadCoinsForWorld(9); +//							else if ((l < 11) || (l == 35) || (l == 36)) +//								coins->LoadCoinsForWorld(10); +//							else if ((l < 16) || (l == 37) || (l == 38) || (l == 31) ) +//								coins->LoadCoinsForWorld(11); +//							else if ((l < 19) || (l == 39) || (l == 40)) +//								coins->LoadCoinsForWorld(12); +//							else +//								coins->LoadCoinsForWorld(13); +// +//							state.setState(&StateID_CoinsWait); +//						} +//						else { +//							coins->LoadCoinsForWorld(w-1); +//						} +//					} +//					else { MapSoundPlayer(SoundRelatedClass, SE_SYS_INVALID, 1); } +					coins->show(); +					state.setState(&StateID_CoinsWait);  					break;  				case 1: @@ -758,7 +763,7 @@ void dScKoopatlas_c::executeState_ShopWait() {  // STATE_StarCoin : Wait for the user to exit the Star Coin screen.  void dScKoopatlas_c::executeState_CoinsWait() { -	if (coins->isHidden) { +	if (!coins->visible) {  		state.setState(&StateID_Normal);  	} diff --git a/src/koopatlas/core.h b/src/koopatlas/core.h index 7e86d72..0f7c3a3 100644 --- a/src/koopatlas/core.h +++ b/src/koopatlas/core.h @@ -40,12 +40,8 @@ void NewerMapDrawFunc();  #define WM_STARCOIN WM_GHOST  class daWMPlayer_c; -class dWMHud_c;  class dWMMap_c; -class dWMShop_c; -class dWMStarCoin;  class dWorldCamera_c; -class dWMPathManager_c;  class dScKoopatlas_c : public dScene_c {  	public: @@ -104,7 +100,7 @@ class dScKoopatlas_c : public dScene_c {  		dWMHud_c *hud;  		dWMMap_c *map;  		dWMShop_c *shop; -		dWMStarCoin *coins; +		dWMStarCoin_c *coins;  		int currentMapID;  		const char *mapPath; @@ -128,5 +124,8 @@ class dScKoopatlas_c : public dScene_c {  		void showSaveWindow();  }; +extern void *_8042A788; +void somethingAboutSound(void *beef); +  #endif diff --git a/src/koopatlas/starcoin.cpp b/src/koopatlas/starcoin.cpp index 4366895..7b7db51 100644 --- a/src/koopatlas/starcoin.cpp +++ b/src/koopatlas/starcoin.cpp @@ -1,42 +1,34 @@  #include "koopatlas/starcoin.h"  #include <game.h> -/*****************************************************************************/ -// Starcoin Layout -// +dWMStarCoin_c *dWMStarCoin_c::instance = 0; - -dWMStarCoin *dWMStarCoin::instance = 0; - -dWMStarCoin *dWMStarCoin::build() { -	void *buffer = AllocFromGameHeap1(sizeof(dWMStarCoin)); -	dWMStarCoin *c = new(buffer) dWMStarCoin; +dWMStarCoin_c *dWMStarCoin_c::build() { +	void *buffer = AllocFromGameHeap1(sizeof(dWMStarCoin_c)); +	dWMStarCoin_c *c = new(buffer) dWMStarCoin_c;  	instance = c;  	return c;  } -dWMStarCoin::dWMStarCoin() { +dWMStarCoin_c::dWMStarCoin_c() {  	layoutLoaded = false; -	isHidden = true; +	visible = false;  } -int dWMStarCoin::onCreate() { +int dWMStarCoin_c::onCreate() {  	if (!layoutLoaded) { -		bool gotFile = layout.loadArc("coin.arc", false); +		bool gotFile = layout.loadArc("StarCoins.arc", false);  		if (!gotFile)  			return false; -		static const char *brlanNames[2] = {"coin_inWindow.brlan", "coin_outWindow.brlan"}; -		static const char *groupNames[2] = {"A00_Window", "A00_Window"}; - -		bool output = layout.build("coin.brlyt"); - -		// nw4r::lyt::Pane *red = layout.findPictureByName("red"); -		// red->alpha = 0; +		bool output = layout.build("StarCoins.brlyt"); -		if (!IsWideScreen()) { +		layout.layout.rootPane->trans.x = -112.0f; +		if (IsWideScreen()) { +			layout.layout.rootPane->scale.x = 0.735f; +		} else {  			layout.clippingEnabled = true;  			layout.clipX = 0;  			layout.clipY = 52; @@ -46,11 +38,54 @@ int dWMStarCoin::onCreate() {  			layout.layout.rootPane->scale.y = 0.7711f;  		} -		layout.loadAnimations(brlanNames, 2); -		layout.loadGroups(groupNames, (int[2]){0, 1}, 2); +		static const char *brlanNames[] = { +			"StarCoins_Show.brlan", +			"StarCoins_ShowSection.brlan", +			"StarCoins_HideSection.brlan", +			"StarCoins_ShowArrow.brlan", +			"StarCoins_HideArrow.brlan", +		}; +		static const char *groupNames[] = { +			"base", "section", "section", "leftArrow", "leftArrow", "rightArrow", "rightArrow" +		}; + +		layout.loadAnimations(brlanNames, 5); +		layout.loadGroups(groupNames, (int[7]){0, 1, 2, 3, 4, 3, 4}, 7);  		layout.disableAllAnimations(); -		layout.drawOrder = 0x01; +		layout.drawOrder = 1; + +		for (int col = 0; col < COLUMN_COUNT; col++) { +			for (int shine = 0; shine < SHINE_COUNT; shine++) { +				char name[8]; +				sprintf(name, "Shine%d%d", col, shine); +				Shine[col][shine] = layout.findPictureByName(name); +			} + +			for (int row = 0; row < ROW_COUNT; row++) { +				char lname[12]; +				sprintf(lname, "LevelName%d%d", col, row); +				LevelName[col][row] = layout.findTextBoxByName(lname); + +				char coname[16], cname[8]; +				for (int i = 0; i < 3; i++) { +					sprintf(coname, "CoinOutline%d%d%d", col, row, i); +					CoinOutline[col][row][i] = layout.findPictureByName(coname); + +					sprintf(cname, "Coin%d%d%d", col, row, i); +					Coin[col][row][i] = layout.findPictureByName(cname); +				} +			} +		} + +		static const char *tbNames[] = { +			"LeftTitle", "RightTitle", "TotalCoinCount", "UnspentCoinCount", +			"EarnedCoinCount", "EarnedCoinMax", "BtnWorldSelText", "BtnBackText", +		}; +		layout.getTextBoxes(tbNames, &LeftTitle, 8); + +		WriteBMGToTextBox(BtnBackText, GetBMG(), 3, 1, 0); +		WriteBMGToTextBox(BtnWorldSelText, GetBMG(), 4, 11, 0);  		layoutLoaded = true;  	} @@ -59,22 +94,27 @@ int dWMStarCoin::onCreate() {  } -int dWMStarCoin::onDelete() { +int dWMStarCoin_c::onDelete() {  	return layout.free();  } -int dWMStarCoin::onExecute() { -	layout.execAnimations(); -	layout.update(); +void dWMStarCoin_c::show() { +	visible = true; +	layout.enableNonLoopAnim(SHOW_ALL); +} + + +int dWMStarCoin_c::onExecute() { +	if (visible) { +		layout.execAnimations(); +		layout.update(); -	if (!isHidden) {  		int nowPressed = Remocon_GetPressed(GetActiveRemocon());  		if (!layout.isAnyAnimOn()) {  			if (nowPressed & WPAD_B) {  				MapSoundPlayer(SoundRelatedClass, SE_SYS_DIALOGUE_OUT_AUTO, 1); -				isHidden = true;   				layout.enableNonLoopAnim(1);   			}   		} @@ -83,338 +123,10 @@ int dWMStarCoin::onExecute() {  	return true;  } -int dWMStarCoin::onDraw() { -	if (isHidden) { -		if (layout.isAnimOn(1)) { layout.scheduleForDrawing(); } -	} - -	if (!isHidden) { +int dWMStarCoin_c::onDraw() { +	if (visible)  		layout.scheduleForDrawing(); -	}  	return true;  } -void dWMStarCoin::specialDraw1() { -	if (!isHidden) { -		Vec pos = {420.0f, 194.0f, -1000.0f}; -		S16Vec rot = {0,rotation,0}; -		Vec scale = {2.0f, 2.0f, 2.0f}; -		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(); - -		rotation += 0x100; -	} -	return; -} - - -void dWMStarCoin::LoadCoinsForWorld(int world) { -	if (!isHidden) { -		return; } - -	int levelArray[14][2][8] = { -		{ -			{1,2,3,4,15}, -			{5,6,7,8,25,38} -		}, - -		{ -			{1,2,3,4,15}, -			{5,6,7,8,9,10,25,38} -		}, - -		{ -			{1,2,3,4,15}, -			{5,6,7,25,38} -		}, - -		{ -			{1,2,3,4,15}, -			{5,6,7,8,25,38} -		}, - -		{ -			{1,2,3,4,5,15}, -			{6,7,8,9,10,25,38} -		}, - -		{ -			{1,2,3,4,15}, -			{5,6,7,8,9,25,38} -		}, - -		{ -			{1,2,3,4}, -			{5,15,6,7,8,9,25,38} -		}, - -		{ -			{1,2,3,15,4,25,5}, -			{6,7,16,8,9,10,26} -		}, - -		{ -			{1,2,3,4,5}, -			{6,7,8,9,10} -		}, - -		{ -			{1,2,3,4,5}, -			{} -		}, - -		{ -			{6,7,8,9,10}, -			{} -		}, - -		{ -			{11,12,13,14,15}, -			{} -		}, - -		{ -			{16,17,18}, -			{} -		}, - -		{ -			{19,22,23,24,25}, -			{} -		} -	}; - -	// Handle showing it -	MapSoundPlayer(SoundRelatedClass, SE_SYS_DIALOGUE_IN, 1); -	isHidden = false; -	layout.enableNonLoopAnim(0); - -	// Model creation	 -	allocator.link(-1, GameHeaps[0], 0, 0x20); - -	res.data = getResource("star_coin", "g3d/star_coin.brres"); -	nw4r::g3d::ResMdl mdl = res.GetResMdl("star_coinA"); -	shopkeep.setup(mdl, &allocator, 0x224, 1, 0); -	SetupTextures_MapObj(&shopkeep, 1); - -	allocator.unlink(); - - -	// Display Total Star Coin Count -	int myCoins = getStarCoinCount(); - -	char myCoinsStr [4]; -	sprintf(myCoinsStr, "%03d", myCoins); - -	setText(myCoinsStr, "T_overall_01"); - - -	// Display World Name -	setWorldName(world); - - -	// Display Per level coins -	int totalCoins = 0; -	int currentCoins = 0; - -	int i = 0; -	int j = 1; - -	SaveBlock *save = GetSaveFile()->GetBlock(-1); -	for (int l = 0; l < 2; l++) { -		for (int i = 0; i < 8; i++) { - -			int levelNum = levelArray[world][l][i]; - -			char levelPane[11]; -			sprintf(levelPane, "T_level_%02d", i+j); - -			if (levelArray[world][l][i]) { -				levelNum--; -				dLevelInfo_c *li = &dScKoopatlas_c::instance->levelInfo; -				dLevelInfo_c::entry_s *entry = li->searchBySlot(world, levelNum); - -				setText(li->getNameForLevel(entry), levelPane); -				totalCoins += 3; -			} -			else { -				setText(" ", levelPane); -			} - -			bool collect; -			u32 conds = save->GetLevelCondition(world, i+j); - -			collect = conds & COND_COIN1; -			setCoin(collect, 1, i+j); -			if (collect) { currentCoins++; } - -			collect = conds & COND_COIN2; -			setCoin(collect, 2, i+j); -			if (collect) { currentCoins++; } - -			collect = conds & COND_COIN3; -			setCoin(collect, 3, i+j); -			if (collect) { currentCoins++; } - -		} -		j += 8; -		i = 0; -	} - -	// Display per-world Count -	char tcStr [3]; -	sprintf(tcStr, "%02d", totalCoins); - -	setText(tcStr, "T_total_01"); - -	char ccStr [3]; -	sprintf(ccStr, "%02d", currentCoins); - -	setText(ccStr, "T_collected_01"); -} - - -void dWMStarCoin::setCoin(bool on, int coin, int slot) { - -	char coinOn[16]; -	char coinOff[16]; -	if (coin == 1) { -		sprintf(coinOn, "P_first_on_%02d", slot); -		sprintf(coinOff, "P_first_off_%02d", slot); -	} else if (coin == 2) { -		sprintf(coinOn, "P_second_on_%02d", slot); -		sprintf(coinOff, "P_second_off_%02d", slot); -	} else if (coin == 3) { -		sprintf(coinOn, "P_third_on_%02d", slot); -		sprintf(coinOff, "P_third_off_%02d", slot); -	} else { return; } - -	nw4r::lyt::Pane *picOn = layout.findPictureByName(coinOn); -	nw4r::lyt::Pane *picOff = layout.findPictureByName(coinOff); - -	if (on) { -		picOn->alpha = 0xFF; -		picOff->alpha = 0; -	} -	else { -		picOn->alpha = 0; -		picOff->alpha = 0xFF; -	} -} - -void dWMStarCoin::setText(const char *str, const char *name) { - -	int length = strlen(str); -	wchar_t newString[128]; - -	int i; -	for (i = 0; i < length && i < 128; i++) { -		newString[i] = str[i]; -	} -	newString[i] = 0; - -	int wlength = wcslen(newString); - -	nw4r::lyt::TextBox *box = layout.findTextBoxByName(name); - -	nw4r::ut::TextWriter tw; -	tw.font = box->font; -	tw.SetFontSize(box->fontSizeX, box->fontSizeY); -	tw.lineSpace = box->lineSpace; -	tw.charSpace = box->charSpace; -	if (box->tagProc != 0) -		tw.tagProcessor = box->tagProc; - -	float width = tw.CalcStringWidth(newString, wlength); -	SpammyReport("Text width: %f\n", width); - -	OSReport("Setting text: %s", newString); -	box->SetString(newString); -} - -void dWMStarCoin::setWorldName(int world) { - -	switch (world+1) { -		case 1:		 -			setText("Yoshi's Island", "T_lefttitle_01"); -			setText("Yoshi's Island", "T_righttitle_01"); -			break;	 - -		case 2: -			setText("Soggy Sewers", "T_lefttitle_01"); -			setText("Rubble Ruins", "T_righttitle_01"); -			break;	 - -		case 3:		 -			setText("Mushroom Peaks", "T_lefttitle_01"); -			setText("Mushroom Peaks", "T_righttitle_01"); -			break;	 - -		case 4:		 -			setText("Sakura Village", "T_lefttitle_01"); -			setText("Sakura Village", "T_righttitle_01"); -			break;	 - -		case 5:		 -			setText("FreezeFlame Valley", "T_lefttitle_01"); -			setText("FreezeFlame Volcano", "T_righttitle_01"); -			break;	 - -		case 6:		 -			setText("Pumpkin Boneyard", "T_lefttitle_01"); -			setText("Pumpkin Boneyard", "T_righttitle_01"); -			break;	 - -		case 7:		 -			setText("Sky Mountain", "T_lefttitle_01"); -			setText("Starry Skies", "T_righttitle_01"); -			break;	 - -		case 8:		 -			setText("Koopa Planet", "T_lefttitle_01"); -			setText("Koopa Core", "T_righttitle_01"); -			break;	 - -		case 9:		 -			setText("Bonus Land", "T_lefttitle_01"); -			setText("Bonus Land", "T_righttitle_01"); -			break;	 - -		case 10:		 -			setText("Goldwood Forest", "T_lefttitle_01"); -			setText(" ", "T_righttitle_01"); -			break; - -		case 11: -			setText("Mini-Mega Island", "T_lefttitle_01"); -			setText(" ", "T_righttitle_01"); -			break; - -		case 12: -			setText("Crystal Caves", "T_lefttitle_01"); -			setText(" ", "T_righttitle_01"); -			break; - -		case 13: -			setText("Bombard Cliffs", "T_lefttitle_01"); -			setText(" ", "T_righttitle_01"); -			break; - -		case 14: -			setText("Sky City", "T_lefttitle_01"); -			setText(" ", "T_righttitle_01"); -			break;	 - -		default: -			setText("Unknown World", "T_lefttitle_01"); -			setText("Unknown World", "T_righttitle_01"); -			break; -	} - -} diff --git a/src/koopatlas/starcoin.h b/src/koopatlas/starcoin.h index 844b1ef..c4e9cbf 100644 --- a/src/koopatlas/starcoin.h +++ b/src/koopatlas/starcoin.h @@ -3,37 +3,52 @@  #include "koopatlas/core.h" -class dWMStarCoin : public dActor_c { +class dWMStarCoin_c : public dActor_c {  	public: -		dWMStarCoin(); +		dWMStarCoin_c();  		int onCreate();  		int onDelete();  		int onExecute();  		int onDraw(); -		void specialDraw1(); - -		mHeapAllocator_c allocator; -		nw4r::g3d::ResFile res; -		m3d::mdl_c shopkeep; -		mMtx matrix;  		bool layoutLoaded;  		m2d::EmbedLayout_c layout; -		bool isHidden; -		s16 rotation; - -		void LoadCoinsForWorld(int world); -		void setCoin(bool On, int coin, int slot); -		void setText(const char *str, const char *name); -		void setWorldName(int world); - -		static dWMStarCoin *build(); -		static dWMStarCoin *instance; +		bool visible; +		void show(); + +		static dWMStarCoin_c *build(); +		static dWMStarCoin_c *instance; + +		enum Animation { +			SHOW_ALL = 0, +			SHOW_SECTION, +			HIDE_SECTION, +			SHOW_LEFT_ARROW, +			HIDE_LEFT_ARROW, +			SHOW_RIGHT_ARROW, +			HIDE_RIGHT_ARROW +		}; + +		enum _Constants { +			ROW_COUNT = 9, +			COLUMN_COUNT = 2, +			SHINE_COUNT = 5, +		}; + +		nw4r::lyt::Picture +			*Shine[COLUMN_COUNT][SHINE_COUNT], +			*CoinOutline[COLUMN_COUNT][ROW_COUNT][3], +			*Coin[COLUMN_COUNT][ROW_COUNT][3]; + +		nw4r::lyt::TextBox +			*LevelName[COLUMN_COUNT][ROW_COUNT], +			*LeftTitle, *RightTitle, +			*TotalCoinCount, *UnspentCoinCount, +			*EarnedCoinCount, *EarnedCoinMax, +			*BtnWorldSelText, *BtnBackText; -	private: -		bool isPointBarShown;  };  #endif  | 
