diff options
Diffstat (limited to 'src/koopatlas')
-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 { |