summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/koopatlas/core.cpp42
-rw-r--r--src/koopatlas/core.h4
-rw-r--r--src/koopatlas/hud.cpp27
-rw-r--r--src/koopatlas/hud.h3
-rw-r--r--src/koopatlas/pathmanager.cpp1
-rw-r--r--src/koopatlas/shop.cpp70
-rw-r--r--src/koopatlas/shop.h4
-rw-r--r--src/poweruphax.S373
-rw-r--r--src/poweruphax.cpp78
9 files changed, 540 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 {
diff --git a/src/poweruphax.S b/src/poweruphax.S
index ef957e2..16800e6 100644
--- a/src/poweruphax.S
+++ b/src/poweruphax.S
@@ -1044,3 +1044,376 @@ StrongboxGiveBattleItem:
.data
IndexItemsForStockItem:
.byte 0,1,2,4,5,6,3,7
+
+
+SLGWindow: .string "A00_Window"
+SLGBtn0: .string "B00_itemButton"
+SLGBtn1: .string "B01_itemButton"
+SLGBtn2: .string "B02_itemButton"
+SLGBtn3: .string "B03_itemButton"
+SLGBtn4: .string "B04_itemButton"
+SLGBtn5: .string "B05_itemButton"
+SLGBtn6: .string "B06_itemButton"
+SLGBtn7: .string "HammerGroup"
+SLButtonBase00: .string "P_buttonBase_00"
+SLButtonBase01: .string "P_buttonBase_01"
+SLButtonBase02: .string "P_buttonBase_02"
+SLButtonBase03: .string "P_buttonBase_03"
+SLButtonBase04: .string "P_buttonBase_04"
+SLButtonBase05: .string "P_buttonBase_05"
+SLButtonBase06: .string "P_buttonBase_06"
+SLButtonBase07: .string "P_buttonBase_07"
+SLIcon0: .string "P_iconKinoko_00"
+SLIcon1: .string "P_iconFlower_00"
+SLIcon2: .string "P_iconPro_00"
+SLIcon3: .string "P_iconIce_00"
+SLIcon4: .string "P_iconPen_00"
+SLIcon5: .string "P_mameKinoko_00"
+SLIcon6: .string "P_iconStar_00"
+SLIcon7: .string "P_iconHammer_00"
+SLIconPane0: .string "N_iconKinoko_00"
+SLIconPane1: .string "N_iconFlower_00"
+SLIconPane2: .string "N_iconPro_00"
+SLIconPane3: .string "N_iconIce_00"
+SLIconPane4: .string "N_iconPen_00"
+SLIconPane5: .string "N_mameKinoko_00"
+SLIconPane6: .string "N_iconStar_00"
+SLIconPane7: .string "N_iconHammer_00"
+.align 4
+SILayoutGroupNames:
+.long SLGWindow
+.long SLGBtn0,SLGBtn1,SLGBtn2,SLGBtn6,SLGBtn4,SLGBtn5,SLGBtn3
+.long SLGBtn0,SLGBtn1,SLGBtn2,SLGBtn6,SLGBtn4,SLGBtn5,SLGBtn3
+.long SLGBtn0,SLGBtn1,SLGBtn2,SLGBtn6,SLGBtn4,SLGBtn5,SLGBtn3
+.long SLGBtn0,SLGBtn1,SLGBtn2,SLGBtn6,SLGBtn4,SLGBtn5,SLGBtn3
+.long SLGWindow
+.long SLGBtn7,SLGBtn7,SLGBtn7
+SILayoutGroupIDs:
+.long 0
+.long 1,1,1,1,1,1,1
+.long 2,2,2,2,2,2,2
+.long 3,3,3,3,3,3,3
+.long 4,4,4,4,4,4,4
+.long 5
+.long 1,3,4
+
+SILayoutButtonBases:
+.long SLButtonBase00,SLButtonBase01,SLButtonBase02,SLButtonBase06
+.long SLButtonBase04,SLButtonBase05,SLButtonBase03,SLButtonBase07
+SILayoutIconPictures:
+.long SLIcon0,SLIcon1,SLIcon2,SLIcon3
+.long SLIcon4,SLIcon5,SLIcon6,SLIcon7
+SILayoutIconPanes:
+.long SLIconPane0,SLIconPane1,SLIconPane2,SLIconPane3
+.long SLIconPane4,SLIconPane5,SLIconPane6,SLIconPane7
+
+.text
+.global SILayoutGroupParams
+SILayoutGroupParams:
+ lis r4, SILayoutGroupNames@h
+ ori r4, r4, SILayoutGroupNames@l
+ lis r5, SILayoutGroupIDs@h
+ ori r5, r5, SILayoutGroupIDs@l
+ li r6, 0x21
+ blr
+
+# - 0x920 : Button Bases
+# - 0x940 : Icon Panes
+# - 0x960 : Icon Pictures
+.extern getPanes__Q23m2d13EmbedLayout_cCFPPCcPPQ34nw4r3lyt4Panei
+.extern getPictures__Q23m2d13EmbedLayout_cCFPPCcPPQ34nw4r3lyt7Picturei
+.extern ContinueFromSILayoutExtraStuffs
+.global SILayoutExtraStuffs
+SILayoutExtraStuffs:
+ addi r3, r30, 0x74
+ lis r4, SILayoutButtonBases@h
+ ori r4, r4, SILayoutButtonBases@l
+ addi r5, r30, 0x920
+ li r6, 8
+ bl getPictures__Q23m2d13EmbedLayout_cCFPPCcPPQ34nw4r3lyt7Picturei
+
+ addi r3, r30, 0x74
+ lis r4, SILayoutIconPanes@h
+ ori r4, r4, SILayoutIconPanes@l
+ addi r5, r30, 0x940
+ li r6, 8
+ bl getPanes__Q23m2d13EmbedLayout_cCFPPCcPPQ34nw4r3lyt4Panei
+
+ addi r3, r30, 0x74
+ lis r4, SILayoutIconPictures@h
+ ori r4, r4, SILayoutIconPictures@l
+ addi r5, r30, 0x960
+ li r6, 8
+ bl getPictures__Q23m2d13EmbedLayout_cCFPPCcPPQ34nw4r3lyt7Picturei
+
+ li r3, 1
+ b ContinueFromSILayoutExtraStuffs
+
+.global HideItemsByDefault
+.extern ContinueFromHideItemsByDefault
+HideItemsByDefault:
+ li r3, 8
+ mtctr r3
+ mr r4, r31
+meNext:
+ lwz r9, 0x960(r4)
+ lbz r5, 0xBB(r9)
+ rlwinm r5, r5, 0,24,30
+ stb r5, 0xBB(r9)
+ addi r4, r4, 4
+ bdnz meNext
+
+ li r8, 0
+ li r7, 1
+ li r6, 4
+ li r5, 0xE
+ li r0, 0xF
+ li r3, 1
+ b ContinueFromHideItemsByDefault
+
+.global AddHammerPowerupFinalValue
+AddHammerPowerupFinalValue:
+ li r24, 0
+ lis r22, OutputPowerupsByItemID@h
+ ori r22, r22, OutputPowerupsByItemID@l
+ blr
+
+.data
+OutputPowerupsByItemID:
+.long 1, 2, 4, 6, 5, 3, -1, 7
+
+.text
+.global FixStockItemEffectPlayer
+FixStockItemEffectPlayer:
+ lwz r0, 0x8A0(r30)
+ slwi r0, r0, 2
+ add r5, r30, r0
+ lwz r28, 0x940(r5)
+ blr
+
+.global FixStockItemEffectPlayer2
+FixStockItemEffectPlayer2:
+ lwz r0, 0x8A0(r30)
+ stw r0, 0x8D0(r30)
+ blr
+
+.global FixMoreSIEffectRelatedCrap
+FixMoreSIEffectRelatedCrap:
+ lwz r0, 0x8D0(r31)
+ slwi r0, r0, 2
+ add r3, r31, r0
+ lwz r29, 0x940(r3)
+ blr
+
+
+.global AddHammerSuitAddSound
+.extern MakeSFISound
+.extern ContinueFromSIAddSound
+AddHammerSuitAddSound:
+ cmpwi r0, 7
+ beq _MakeSFISound
+ b ContinueFromSIAddSound
+ _MakeSFISound:
+ b MakeSFISound
+
+.extern resetAnim__Q23m2d13EmbedLayout_cFib
+.extern ContinueFromResetHammerAnimOnOpen
+.global ResetHammerAnimOnOpen
+ResetHammerAnimOnOpen:
+ addi r3, r28, 0x74
+ li r4, 0x1E
+ li r5, 0
+ bl resetAnim__Q23m2d13EmbedLayout_cFib
+ addi r3, r28, 0x74
+ b ContinueFromResetHammerAnimOnOpen
+
+.extern ChosenStartChoice
+.global PickHammerAsPossibleStartChoice
+PickHammerAsPossibleStartChoice:
+ lwz r0, 0x918(r30)
+ li r3, 6
+ cmpwi r0, 0
+ beq notGoodEnough
+ stw r3, 0x8A0(r30)
+ b ChosenStartChoice
+notGoodEnough:
+ lwz r0, 0x91C(r30)
+ li r3, 7
+ cmpwi r0, 0
+ b _ChosenStartChoice
+ stw r3, 0x8A0(r30)
+ _ChosenStartChoice:
+ b ChosenStartChoice
+
+
+.global ChooseOldButtonOffAnim
+ChooseOldButtonOffAnim:
+ cmpwi r4, 7
+ beq useHammerOffAnim
+ addi r4, r4, 0x16
+ blr
+useHammerOffAnim:
+ li r4, 0x20
+ blr
+
+.global ChooseOldButtonOffAnim2
+ChooseOldButtonOffAnim2:
+ cmpwi r3, 7
+ beq useHammerOffAnim2
+ addi r0, r3, 0x16
+ blr
+useHammerOffAnim2:
+ li r0, 0x20
+ blr
+
+.global ChooseButtonOnAnim
+ChooseButtonOnAnim:
+ cmpwi r4, 7
+ beq useHammerOnAnim
+ addi r4, r4, 1
+ blr
+useHammerOnAnim:
+ li r4, 0x1E
+ blr
+
+.global DoSISelectCursor
+.extern UpdateSelectCursor
+DoSISelectCursor:
+ slwi r0, r0, 2
+ add r3, r3, r0
+ lwz r3, 0x920(r3)
+ b UpdateSelectCursor
+
+
+.global ChooseHitButtonAnim
+ChooseHitButtonAnim:
+ cmpwi r4, 7
+ beq useHammerHitAnim
+ addi r4, r4, 0xF
+ blr
+useHammerHitAnim:
+ li r4, 0x1F
+ blr
+
+
+
+.global UpdateCalcPowerupResult
+.extern ContinueFromCalcPowerupResult
+UpdateCalcPowerupResult:
+ cmpwi r3, 7
+ bne cprIsDone
+ li r6, 7
+ stb r0, 0xF(r1)
+cprIsDone:
+ b ContinueFromCalcPowerupResult
+
+
+
+
+.global SISLayoutExtraStuffs
+.extern ContinueFromSISLayoutExtraStuffs
+.extern findTextBoxByName__Q23m2d17EmbedLayoutBase_cCFPCc
+.extern findPictureByName__Q23m2d17EmbedLayoutBase_cCFPCc
+SISLayoutExtraStuffs:
+ addi r3, r30, 0x70
+ lis r4, whatever_s@h
+ ori r4, r4, whatever_s@l
+ bl findTextBoxByName__Q23m2d17EmbedLayoutBase_cCFPCc
+ stw r3, 0x288(r30)
+
+ addi r3, r30, 0x70
+ lis r4, fuck_brlyts@h
+ ori r4, r4, fuck_brlyts@l
+ bl findTextBoxByName__Q23m2d17EmbedLayoutBase_cCFPCc
+ stw r3, 0x284(r30)
+
+ addi r3, r30, 0x70
+ lis r4, im_tired_of_this@h
+ ori r4, r4, im_tired_of_this@l
+ bl findPictureByName__Q23m2d17EmbedLayoutBase_cCFPCc
+ stw r3, 0x28C(r30)
+
+ li r3, 1
+ b ContinueFromSISLayoutExtraStuffs
+
+.data
+whatever_s: .string "whatever"
+fuck_brlyts: .string "fuck_brlyts"
+im_tired_of_this: .string "im_tired_of_this"
+
+.text
+.global UpdateSIS
+.extern ContinueFromUpdateSIS
+.extern WriteNumberToTextBox__FPiPCiPQ34nw4r3lyt7TextBoxb
+UpdateSIS:
+ cmpwi r0, 0
+ beq DontUpdateSIS
+ subi r25, r25, 0x1C
+
+ # replicate this shit
+ lwz r0, 0x280(r25)
+ cmpwi r0, 0
+ lwz r3, 0x28C(r25)
+ lbz r0, 0xBB(r3)
+ beq theresNone
+
+ li r4, 1
+ rlwinm r0, r0, 0,24,30
+ b changedBase
+theresNone:
+ li r4, 0
+ ori r0, r0, 1
+changedBase:
+ stb r0, 0xBB(r3)
+ slwi r29, r4, 2
+ addi r5, r1, 0x14
+ lwzx r27, r26, r29
+ li r4, 0
+ stw r27, 0x14(r1)
+ lwz r3, 0x284(r25)
+ lwz r12, 0(r3)
+ lwz r12, 0x28(r12)
+ mtctr r12
+ bctrl
+
+ lwzx r29, r28, r29
+ addi r5, r1, 0x10
+ stw r29, 0x10(r1)
+ li r4, 2
+ lwz r3, 0x284(r25)
+ lwz r12, 0(r3)
+ lwz r12, 0x28(r12)
+ mtctr r12
+ bctrl
+
+ addi r5, r1, 0x14
+ li r4, 0
+ lwz r3, 0x288(r25)
+ lwz r12, 0(r3)
+ lwz r12, 0x28(r12)
+ mtctr r12
+ bctrl
+
+ addi r5, r1, 0x10
+ li r4, 2
+ lwz r3, 0x288(r25)
+ lwz r12, 0(r3)
+ lwz r12, 0x28(r12)
+ mtctr r12
+ bctrl
+
+ lwz r5, 0x284(r25)
+ addi r3, r25, 0x280
+ lis r4, ptrToTwo@h
+ ori r4, r4, ptrToTwo@l
+ li r6, 1
+ bl WriteNumberToTextBox__FPiPCiPQ34nw4r3lyt7TextBoxb
+
+DontUpdateSIS:
+ addi r11, r1, 0x40
+ b ContinueFromUpdateSIS
+
+.data
+.align 4
+ptrToTwo: .long 2
+
diff --git a/src/poweruphax.cpp b/src/poweruphax.cpp
index e1dbb87..5140843 100644
--- a/src/poweruphax.cpp
+++ b/src/poweruphax.cpp
@@ -97,3 +97,81 @@ void dHammerSuitRenderer_c::draw() {
shell.scheduleForDrawing();
}
+
+
+
+
+
+
+
+// NEW VERSION
+void CrapUpPositions(Vec *out, const Vec *in);
+
+void dStockItem_c::setScalesOfSomeThings() {
+ nw4r::lyt::Pane *ppos = N_forUse_PPos[playerCount];
+
+ int howManyPlayers = 0;
+ for (int i = 0; i < 4; i++) {
+ if (isPlayerActive[i]) {
+ int picID = getIconPictureIDforPlayer(i);
+ int charID = Player_ID[i];
+
+ if (picID != 24) {
+ nw4r::lyt::Picture *pic = P_icon[picID];
+
+ Vec in, out;
+
+ in.x = pic->effectiveMtx[0][3];
+ in.y = pic->effectiveMtx[1][3];
+ in.z = pic->effectiveMtx[2][3];
+
+ CrapUpPositions(&out, &in);
+
+ u8 *wmp = (u8*)player2d[charID];
+ *((float*)(wmp+0xAC)) = out.x;
+ *((float*)(wmp+0xB0)) = out.y;
+ *((float*)(wmp+0xB4)) = out.z;
+ *((float*)(wmp+0x220)) = 0.89999998f;
+ *((float*)(wmp+0x224)) = 0.89999998f;
+ *((float*)(wmp+0x228)) = 0.89999998f;
+ *((float*)(wmp+0x25C)) = 26.0f;
+ }
+ howManyPlayers++;
+ }
+ }
+
+
+ for (int i = 0; i < 8; i++) {
+ u8 *item = (u8*)newItemPtr[i];
+
+ nw4r::lyt::Pane *icon = newIconPanes[i];
+
+ Vec in, out;
+ in.x = icon->effectiveMtx[0][3];
+ in.y = icon->effectiveMtx[1][3];
+ in.z = icon->effectiveMtx[2][3];
+
+ CrapUpPositions(&out, &in);
+
+ *((float*)(item+0xAC)) = out.x;
+ *((float*)(item+0xB0)) = out.y;
+ *((float*)(item+0xB4)) = out.z;
+ *((float*)(item+0x1F4)) = P_buttonBase[i]->scale.x;
+ *((float*)(item+0x1F8)) = P_buttonBase[i]->scale.y;
+ *((float*)(item+0x1FC)) = 1.0f;
+ }
+
+
+ nw4r::lyt::Pane *shdRoot = shadow->rootPane;
+ shdRoot->trans.x = N_stockItem->effectiveMtx[0][3];
+ shdRoot->trans.y = N_stockItem->effectiveMtx[1][3];
+ shdRoot->trans.z = N_stockItem->effectiveMtx[2][3];
+ shdRoot->scale.x = N_stockItem_01->effectiveMtx[0][0];
+ shdRoot->scale.y = N_stockItem_01->effectiveMtx[1][1];
+
+ for (int i = 0; i < 7; i++)
+ shadow->buttonBases[i]->scale = newButtonBase[i]->scale;
+ shadow->hammerButtonBase->scale = newButtonBase[7]->scale;
+}
+
+