diff options
Diffstat (limited to '')
| -rw-r--r-- | src/koopatlas/core.cpp | 42 | ||||
| -rw-r--r-- | src/koopatlas/core.h | 4 | ||||
| -rw-r--r-- | src/koopatlas/hud.cpp | 27 | ||||
| -rw-r--r-- | src/koopatlas/hud.h | 3 | ||||
| -rw-r--r-- | src/koopatlas/pathmanager.cpp | 1 | ||||
| -rw-r--r-- | src/koopatlas/shop.cpp | 70 | ||||
| -rw-r--r-- | src/koopatlas/shop.h | 4 | 
7 files changed, 89 insertions, 62 deletions
diff --git a/src/koopatlas/core.cpp b/src/koopatlas/core.cpp index e9ae989..f0a57af 100644 --- a/src/koopatlas/core.cpp +++ b/src/koopatlas/core.cpp @@ -109,14 +109,6 @@ dScKoopatlas_c::dScKoopatlas_c() : state(this) {  #define NPCHG_CCI(npc,idx) (((void**)(((u32)(npc))+0xA4))[(idx)])  #define NPCHG_2DPLAYER(npc,idx) (((void**)(((u32)(npc))+0x64C))[(idx)]) -#define STKI_SETUP_DONE(si) (*((bool*)(((u32)(si))+0x310))) -#define STKI_SHADOW(si) (*((void**)(((u32)(si))+0x310))) -#define STKI_2DPLAYER(si,idx) (((void**)(((u32)(si))+0x2E4))[(idx)]) -#define STKI_ITEM(si,idx) (((void**)(((u32)(si))+0x2F4))[(idx)]) -#define STKI_SHOW(si) (*((bool*)(((u32)(si))+0x8DD))) - -#define SIS_SETUP_DONE(sis) (*((bool*)(((u32)(sis))+0x260))) -  #define CCSB_ACTIVE(ccsb) (*((bool*)(((u32)(ccsb))+0x29C)))  #define CCSC_ACTIVE(ccsc) (*((bool*)(((u32)(ccsc))+0x2A1))) @@ -218,8 +210,8 @@ bool WMInit_SetupWait(void *ptr) {  	success &= NPCHG_SETUP_DONE(wm->numPeopleChange);  	success &= YESNO_SETUP_DONE(wm->yesNoWindow);  	success &= CONT_SETUP_DONE(wm->continueObj); -	success &= STKI_SETUP_DONE(wm->stockItem); -	success &= SIS_SETUP_DONE(wm->stockItemShadow); +	success &= wm->stockItem->layoutLoaded; +	success &= wm->stockItemShadow->layoutLoaded;  	success &= EASYP_SETUP_DONE(wm->easyPairing);  	return success; @@ -243,14 +235,14 @@ bool WMInit_SetupExtra(void *ptr) {  	// first up: player models for Stocked Items  	for (int i = 0; i < 4; i++) {  		void *obj = CreateChildObject(WM_2D_PLAYER, wm, i, 0, 0); -		STKI_2DPLAYER(wm->stockItem,i) = obj; +		wm->stockItem->player2d[i] = obj;  		NPCHG_2DPLAYER(wm->numPeopleChange,i) = obj;  	}  	// next: items for the Powerup screen -	for (int i = 0; i < 7; i++) { -		void *obj = CreateChildObject(WM_ITEM, wm, i, 0, 0); -		STKI_ITEM(wm->stockItem,i) = obj; +	for (int i = 0; i < 8; i++) { +		void *obj = CreateChildObject(WM_ITEM, wm, i==7?6:i, 0, 0); +		wm->stockItem->newItemPtr[i] = obj;  	}  	// need Player before we can set up paths @@ -398,10 +390,10 @@ int dScKoopatlas_c::onCreate() {  	this->continueObj = CreateParentedObject(CONTINUE, this, 0, 0);  	SpammyReport("stock item\n"); -	this->stockItem = CreateParentedObject(STOCK_ITEM, this, 0, 0); +	this->stockItem = (dStockItem_c*)CreateParentedObject(STOCK_ITEM, this, 0, 0);  	SpammyReport("stock item shadow\n"); -	this->stockItemShadow = CreateParentedObject(STOCK_ITEM_SHADOW, this, 0, 0); -	STKI_SHADOW(this->stockItem) = this->stockItemShadow; +	this->stockItemShadow = (dStockItemShadow_c*)CreateParentedObject(STOCK_ITEM_SHADOW, this, 0, 0); +	stockItem->shadow = stockItemShadow;  	SpammyReport("easy pairing\n");  	this->easyPairing = CreateParentedObject(EASY_PAIRING, this, 0, 0); @@ -516,11 +508,13 @@ void dScKoopatlas_c::executeState_Normal() {  	// Nothing related to the menu is going on  	if (nowPressed & WPAD_ONE) { -		STKI_SHOW(this->stockItem) = true; +		stockItem->show = true;  		state.setState(&StateID_PowerupsWait); +		hud->hideAll();  	} else if (nowPressed & WPAD_PLUS) {  		CSMENU_ACTIVE(this->csMenu) = true;  		state.setState(&StateID_CSMenu); +		hud->hideAll();  	} else if (nowPressed & WPAD_MINUS) {  		pathManager.unlockAllPaths(2);  	} else if (nowPressed & WPAD_A) { @@ -582,6 +576,7 @@ void dScKoopatlas_c::executeState_CSMenu() {  		} else {  			// Ok, change back to STATE_Normal +			hud->unhideAll();  			state.setState(&StateID_Normal);  		}  	} @@ -637,6 +632,7 @@ void dScKoopatlas_c::executeState_TitleConfirmHitWait() {  	if (!YESNO_OPENING(this->yesNoWindow)) {  		if (YESNO_CURRENT(this->yesNoWindow) == 1) {  			state.setState(&StateID_Normal); +			hud->unhideAll();  		} else {  			state.setState(&StateID_Limbo);  			StartTitleScreenStage(false, 0); @@ -680,6 +676,7 @@ void dScKoopatlas_c::executeState_PlayerChangeWait() {  			}  			state.setState(&StateID_Normal); +			hud->unhideAll();  		}  	} @@ -712,10 +709,11 @@ void dScKoopatlas_c::executeState_EasyPairingWait() {  // STATE_PowerupsWait : Wait for the user to exit the Powerups screen.  void dScKoopatlas_c::executeState_PowerupsWait() { -	if (!STKI_SHOW(this->stockItem)) { +	if (!stockItem->show) {  		player->modelHandler->mdlClass->setPowerup(Player_Powerup[0]);  		state.setState(&StateID_Normal); +		hud->unhideAll();  	}  } @@ -727,6 +725,7 @@ void dScKoopatlas_c::executeState_ShopWait() {  	if (!shop->visible) {  		state.setState(&StateID_Normal); +		hud->unhideAll();  	}  } @@ -738,6 +737,7 @@ void dScKoopatlas_c::executeState_CoinsWait() {  	if (!coins->visible) {  		state.setState(&StateID_Normal); +		hud->unhideAll();  	}  } @@ -793,6 +793,7 @@ void dScKoopatlas_c::executeState_SaveWindowClose() {  	if (!YESNO_VISIBLE(this->yesNoWindow)) {  		if (YESNO_CURRENT(this->yesNoWindow) == 1) {  			state.setState(&StateID_Normal); +			hud->unhideAll();  		} else {  			state.setState(&StateID_SaveDo);  			SaveGame(0, false); @@ -836,6 +837,7 @@ void dScKoopatlas_c::executeState_SaveEndCloseWait() {  	if (!YESNO_OPENING(this->yesNoWindow)) {  		state.setState(&StateID_Normal); +		hud->unhideAll();  	}  } @@ -891,6 +893,7 @@ void dScKoopatlas_c::executeState_QuickSaveWindowClose() {  	if (!YESNO_VISIBLE(this->yesNoWindow)) {  		if (YESNO_CURRENT(this->yesNoWindow) == 1) {  			state.setState(&StateID_Normal); +			hud->unhideAll();  		} else {  			state.setState(&StateID_QuickSaveDo);  			SaveGame(0, true); @@ -934,6 +937,7 @@ void dScKoopatlas_c::executeState_QuickSaveEndCloseWait() {  	if (!YESNO_OPENING(this->yesNoWindow)) {  		if (YESNO_CURRENT(this->yesNoWindow) == 1) {  			state.setState(&StateID_Normal); +			hud->unhideAll();  		} else {  			state.setState(&StateID_Limbo);  			StartTitleScreenStage(false, 0); diff --git a/src/koopatlas/core.h b/src/koopatlas/core.h index 93cc257..788ad62 100644 --- a/src/koopatlas/core.h +++ b/src/koopatlas/core.h @@ -86,8 +86,8 @@ class dScKoopatlas_c : public dScene_c {  		void *numPeopleChange;  		void *yesNoWindow;  		void *continueObj; -		void *stockItem; -		void *stockItemShadow; +		dStockItem_c *stockItem; +		dStockItemShadow_c *stockItemShadow;  		void *easyPairing; diff --git a/src/koopatlas/hud.cpp b/src/koopatlas/hud.cpp index 4d678c6..1032512 100644 --- a/src/koopatlas/hud.cpp +++ b/src/koopatlas/hud.cpp @@ -24,7 +24,9 @@ dWMHud_c::dWMHud_c() {  enum WMHudAnimation {  	SHOW_LIVES = 0,  	SHOW_HEADER, -	SHOW_FOOTER +	SHOW_FOOTER, +	HIDE_ALL, +	UNHIDE_ALL,  }; @@ -46,16 +48,23 @@ int dWMHud_c::onCreate() {  			layout.layout.rootPane->scale.y = 0.7711f;  		} -		static const char *brlanNames[2] = {"MapHUD_ShowMain.brlan", "MapHUD_ShowHeader.brlan"}; -		static const char *groupNames[3] = {"G_Lives", "G_Header", "G_Footer"}; +		static const char *brlanNames[] = { +			"MapHUD_ShowMain.brlan", "MapHUD_ShowHeader.brlan", +			"MapHUD_HideAll.brlan", "MapHUD_UnhideAll.brlan", +		}; +		static const char *groupNames[] = { +			"G_Lives", "G_Header", "G_Footer", +			"G_Hideables", "G_Hideables", +		}; -		layout.loadAnimations(brlanNames, 2); -		layout.loadGroups(groupNames, (int[3]){0, 1, 0}, 3); +		layout.loadAnimations(brlanNames, 4); +		layout.loadGroups(groupNames, (int[5]){0, 1, 0, 2, 3}, 5);  		layout.disableAllAnimations();  		layout.enableNonLoopAnim(SHOW_LIVES);  		layout.resetAnim(SHOW_FOOTER);  		layout.resetAnim(SHOW_HEADER); +		layout.resetAnim(HIDE_ALL);  		static const char *tbNames[2] = {"MenuButtonInfo", "ItemsButtonInfo"};  		layout.setLangStrings(tbNames, (int[2]){12, 15}, 4, 2); @@ -162,6 +171,14 @@ int dWMHud_c::onDraw() {  } +void dWMHud_c::hideAll() { +	layout.enableNonLoopAnim(HIDE_ALL); +} +void dWMHud_c::unhideAll() { +	layout.enableNonLoopAnim(UNHIDE_ALL); +} + +  void dWMHud_c::playShowAnim(int id) { diff --git a/src/koopatlas/hud.h b/src/koopatlas/hud.h index 32a09be..982b38a 100644 --- a/src/koopatlas/hud.h +++ b/src/koopatlas/hud.h @@ -27,6 +27,9 @@ class dWMHud_c : public dBase_c {  		void setupLives(); +		void hideAll(); +		void unhideAll(); +  	private:  		void playShowAnim(int id);  		void playHideAnim(int id); diff --git a/src/koopatlas/pathmanager.cpp b/src/koopatlas/pathmanager.cpp index 6cff759..7f4b754 100644 --- a/src/koopatlas/pathmanager.cpp +++ b/src/koopatlas/pathmanager.cpp @@ -861,6 +861,7 @@ void dWMPathManager_c::activatePoint() {  		if (l == 98) {  			dWMShop_c::instance->show(w); +			dWMHud_c::instance->hideAll();  			dScKoopatlas_c::instance->state.setState(&dScKoopatlas_c::instance->StateID_ShopWait);  			return;  		} diff --git a/src/koopatlas/shop.cpp b/src/koopatlas/shop.cpp index 025a7d9..63d23e2 100644 --- a/src/koopatlas/shop.cpp +++ b/src/koopatlas/shop.cpp @@ -17,7 +17,6 @@ void dWMShop_c::ShopModel_c::setupItem(float x, float y, ItemTypes type) {  		{ "I_star", 		"g3d/I_star.brres", 			"I_star", 				"wait2" },  		{ "I_hammer", 		"g3d/I_fireflower.brres",		"I_fireflower",			"wait2" },  		{ "I_kinoko_bundle","g3d/I_life_kinoko.brres", 		"I_life_kinoko", 		"wait2" }, -		{ "obj_coin", 		"g3d/obj_coin.brres", 			"obj_coin", 			"wait2" }  	};  	this->x = x; @@ -33,12 +32,7 @@ void dWMShop_c::ShopModel_c::setupItem(float x, float y, ItemTypes type) {  	nw4r::g3d::ResMdl mdlRes = res.GetResMdl(Produce[id][2]);  	model.setup(mdlRes, &allocator, 0x224, 1, 0); -	if (type == COINS) { -		SetupTextures_MapObj(&model, 1); -		this->y += 20.0f; -		scaleFactor = 2.7f; -	} else -		SetupTextures_Item(&model, 1); +	SetupTextures_Item(&model, 1);  	nw4r::g3d::ResAnmChr anmChr = res.GetResAnmChr(Produce[id][3]);  	animation.setup(mdlRes, anmChr, &allocator, 0); @@ -194,6 +188,11 @@ int dWMShop_c::onCreate() {  			name[8] = crap[i*2];  			name[9] = crap[i*2+1];  			BtnRight[i] = layout.findPictureByName(name); + +			strcpy(name, "BtnXX"); +			name[3] = crap[i*2]; +			name[4] = crap[i*2+1]; +			Buttons[i] = layout.findPaneByName(name);  		}  		leftCol.setTexMap(BtnLeft[0]->material->texMaps); @@ -206,6 +205,8 @@ int dWMShop_c::onCreate() {  			rightCol.applyAlso(BtnRight[i]->material->texMaps);  		} +		Buttons[5]->size.x = 252.0f; // don't feel like editing rlyt +  		layoutLoaded = true;  	} @@ -301,7 +302,9 @@ void dWMShop_c::executeState_ButtonActivateWait() {  	if (!layout.isAnyAnimOn())  		state.setState(&StateID_Wait);  } -void dWMShop_c::endState_ButtonActivateWait() { OSReport("Wait"); } +void dWMShop_c::endState_ButtonActivateWait() { +	UpdateSelectCursor(Buttons[0], 0, false); +}  // Wait  void dWMShop_c::beginState_Wait() { timer = 1; MapSoundPlayer(SoundRelatedClass, SE_OBJ_CLOUD_BLOCK_TO_JUGEM, 1); } @@ -352,6 +355,7 @@ void dWMShop_c::executeState_Wait() {  		layout.enableNonLoopAnim(DEACTIVATE_BUTTON+selected);  		layout.enableNonLoopAnim(ACTIVATE_BUTTON+newSelection); +		UpdateSelectCursor(Buttons[newSelection], 0, false);  		selected = newSelection;  		if (newSelection <= 3) @@ -368,6 +372,8 @@ void dWMShop_c::beginState_HideWait() {  	timer = 26;  	MapSoundPlayer(SoundRelatedClass, SE_OBJ_CS_KINOHOUSE_DISAPP, 1); + +	HideSelectCursor(SelectCursorPointer, 0);  }  void dWMShop_c::executeState_HideWait() {  	if (timer > 0) { @@ -394,7 +400,6 @@ void dWMShop_c::endState_HideWait() {  	// 6 = Starman		- 2  		// 7 = Hammer		- 3  	// 8 = 1-ups		- 2 -// 9 = Coins		- 1  //  // Format: 1coin, 1coin, 2coins, 3coins, 5coins[3] (Value 6-9), 8coins[5] (Value 10-15)  // @@ -403,37 +408,37 @@ void dWMShop_c::endState_HideWait() {  const dWMShop_c::ItemTypes dWMShop_c::Inventory[10][12] = {   	{ // Yoshi's Island -		COINS, MUSHROOM, FIRE_FLOWER, PROPELLER, +		MUSHROOM, FIRE_FLOWER, ICE_FLOWER, PROPELLER,  		FIRE_FLOWER, ICE_FLOWER, FIRE_FLOWER,  		MUSHROOM, MUSHROOM, ONE_UP, PROPELLER, PROPELLER  	},  	{ // Desert -		COINS, MUSHROOM, FIRE_FLOWER, PROPELLER, +		MUSHROOM, FIRE_FLOWER, ICE_FLOWER, PROPELLER,  		FIRE_FLOWER, STARMAN, FIRE_FLOWER,  		MUSHROOM, FIRE_FLOWER, FIRE_FLOWER, PROPELLER, PROPELLER  	},  	{ // Mountain -		COINS, MUSHROOM, MINI_SHROOM, PROPELLER, +		MUSHROOM, FIRE_FLOWER, MINI_SHROOM, PROPELLER,  		MUSHROOM, MINI_SHROOM, PROPELLER,  		MUSHROOM, MINI_SHROOM, PROPELLER, PROPELLER, HAMMER  	},  	{ // Japan -		COINS, MUSHROOM, ONE_UP, HAMMER, +		MUSHROOM, FIRE_FLOWER, ONE_UP, HAMMER,  		ONE_UP, ONE_UP, ONE_UP,  		PROPELLER, ICE_FLOWER, ONE_UP, FIRE_FLOWER, PROPELLER  	},  	{ // FreezeFlame -		COINS, MUSHROOM, ICE_FLOWER, PENGUIN, +		MUSHROOM, FIRE_FLOWER, ICE_FLOWER, PENGUIN,  		ICE_FLOWER, PENGUIN, ICE_FLOWER,  		ICE_FLOWER, PENGUIN, PENGUIN, PENGUIN, ICE_FLOWER  	},  	{ // Ghost -		COINS, MUSHROOM, STARMAN, PROPELLER, +		MUSHROOM, FIRE_FLOWER, STARMAN, PROPELLER,  		MINI_SHROOM, PROPELLER, MINI_SHROOM, -		PROPELLER, PROPELLER, COINS, PROPELLER, PROPELLER +		PROPELLER, PROPELLER, MUSHROOM, PROPELLER, PROPELLER  	},  	{ // Space -		COINS, MUSHROOM, STARMAN, HAMMER, +		MUSHROOM, STARMAN, ONE_UP, HAMMER,  		STARMAN, STARMAN, STARMAN,  		HAMMER, HAMMER, ONE_UP, HAMMER, HAMMER  	}, @@ -443,12 +448,12 @@ const dWMShop_c::ItemTypes dWMShop_c::Inventory[10][12] = {  		PROPELLER, HAMMER, PROPELLER, HAMMER, PROPELLER  	},  	{ // Unknown -		COINS, MUSHROOM, FIRE_FLOWER, PENGUIN, +		MUSHROOM, MUSHROOM, MUSHROOM, MUSHROOM,  		MUSHROOM, MUSHROOM, MUSHROOM,  		MUSHROOM, MUSHROOM, MUSHROOM, MUSHROOM, MUSHROOM  	},  	{ // Goldwood -		MUSHROOM, ONE_UP, FIRE_FLOWER, MINI_SHROOM, +		MUSHROOM, FIRE_FLOWER, ONE_UP, PENGUIN,  		FIRE_FLOWER, PROPELLER, FIRE_FLOWER,  		FIRE_FLOWER, FIRE_FLOWER, STARMAN, FIRE_FLOWER, FIRE_FLOWER  	} @@ -528,7 +533,7 @@ void dWMShop_c::loadInfo() {  void dWMShop_c::buyItem(int item) {  	static int itemDefs[6][3] = {  		// Cost, Start Index, Count -		{1, 0, 1}, {1, 1, 1}, {2, 2, 1}, {3, 3, 1}, +		{1, 0, 1}, {2, 1, 1}, {2, 2, 1}, {3, 3, 1},  		{5, 4, 3}, {8, 7, 5}  	}; @@ -542,7 +547,6 @@ void dWMShop_c::buyItem(int item) {  	MapSoundPlayer(SoundRelatedClass, SE_SYS_DECIDE, 1); -  	SaveFile *file = GetSaveFile();  	SaveBlock *block = file->GetBlock(file->header.current_file); @@ -558,32 +562,28 @@ void dWMShop_c::buyItem(int item) {  		appliedItems[(int)Inventory[shopKind][invStartIndex]]++;  	// TODO: Make this work with hammers -	for (int i = 0; i < 7; i++) { +	for (int i = 0; i < 8; i++) {  		block->powerups_available[i] += appliedItems[i];  		if (block->powerups_available[i] > 99)  			block->powerups_available[i] = 99; + +		dScKoopatlas_c::instance->stockItem->counts[i] = block->powerups_available[i];  	} -	// Apply coins and lives to everyone +	// Apply lives to everyone  	for (int i = 0; i < 4; i++) { -		block->player_coins[i] += (appliedItems[(int)COINS] * 50); - -		while (block->player_coins[i] >= 100) { -			block->player_coins[i] -= 100; -			block->player_lives[i]++; -		} - -		block->player_lives[i] += appliedItems[(int)ONE_UP]; -		if (block->player_lives[i] > 99) -			block->player_lives[i] = 99; +		Player_Lives[i] += appliedItems[(int)ONE_UP]; +		if (Player_Lives[i] > 99) +			Player_Lives[i] = 99;  	} +	if (appliedItems[(int)ONE_UP] > 0) +		MapSoundPlayer(SoundRelatedClass, SE_SYS_100COIN_ONE_UP, 1); +  	// load the coin count  	int scCount = getUnspentStarCoinCount();  	WriteNumberToTextBox(&scCount, CoinCount, false);  	WriteNumberToTextBox(&scCount, CoinCountShadow, false); - -	state.setState(&StateID_HideWait);  } diff --git a/src/koopatlas/shop.h b/src/koopatlas/shop.h index fb948a9..4a79861 100644 --- a/src/koopatlas/shop.h +++ b/src/koopatlas/shop.h @@ -44,7 +44,6 @@ class dWMShop_c : public dActor_c {  			STARMAN,  			HAMMER,  			ONE_UP, -			COINS,  			ITEM_TYPE_COUNT  		}; @@ -62,6 +61,9 @@ class dWMShop_c : public dActor_c {  		nw4r::lyt::Picture  			*BtnLeft[6], *BtnMid[6], *BtnRight[6]; +		nw4r::lyt::Pane +			*Buttons[6]; +  		dTexMapColouriser_c leftCol, midCol, rightCol;  		class ShopModel_c {  | 
