icons archive generation (#1091)

* OK

* broken

* fixed

* misnomer

* fix names, add other versions

* fix stray object file and warnings

* .bin.o

* incorrect asset_deps

* cleanup

---------

Co-authored-by: HailSanta <Hail2Santa@gmail.com>
Co-authored-by: Ethan Roseman <ethteck@gmail.com>
This commit is contained in:
HailSanta 2023-07-22 13:20:37 -04:00 committed by GitHub
parent 53fac51608
commit 76386ce361
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
28 changed files with 848 additions and 2400 deletions

File diff suppressed because it is too large Load Diff

View File

@ -19,4 +19,11 @@ enum {
#define is_Loop ITEM_SCRIPT_OP_Loop,
#define is_RandomRestart(max, cutoff) ITEM_SCRIPT_OP_RandomRestart, max, cutoff,
#define STANDARD_ITEM_SCRIPT(icon) \
{ \
is_SetIcon(60, icon) \
is_Restart \
is_End \
}
#endif

View File

@ -99,7 +99,7 @@ extern s32 timeFreezeMode;
extern s32 D_8009A678;
extern u8 D_800779B0;
extern s32 D_8008EEC0[12]; // partner IDs
extern s32 PartnerIDFromMenuIndex[12]; // partner IDs
// Scripts
extern EvtScript EVS_NpcDefeat;

View File

@ -24,12 +24,21 @@ f32 D_802938A4 = 0.0f;
s16 D_802938A8 = 4;
EffectInstance* gDamageCountEffects[] = {
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
};
s32 gDamageCountTimers[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
};
Gfx D_80293970[] = {

View File

@ -2166,7 +2166,7 @@ s32 can_btl_state_update_switch_to_player(void) {
}
}
extern s32 D_8008EEF0[]; // TODO MOVE
extern s32 MenuIndexFromPartnerID[]; // TODO MOVE
s32 func_802A58D0(void) {
BattleStatus* battleStatus = &gBattleStatus;
@ -3460,7 +3460,7 @@ void btl_state_update_player_menu(void) {
case BTL_SUBSTATE_PLAYER_MENU_CHANGE_MEMBER_1:
entryIdx = 0;
for (i = 1; i < ARRAY_COUNT(playerData->partners); i++) {
s32 partnerId = D_8008EEC0[i];
s32 partnerId = PartnerIDFromMenuIndex[i];
if (playerData->partners[partnerId].enabled) {
prop = &gPartnerPopupProperties[partnerId];
popup->ptrIcon[entryIdx] = battle_menu_PartnerHudScripts[partnerId];
@ -3481,7 +3481,7 @@ void btl_state_update_player_menu(void) {
}
popup->popupType = POPUP_MENU_SWITCH_PARTNER;
popup->numEntries = entryIdx;
popup->initialPos = D_8008EEF0[playerData->currentPartner] - 1;
popup->initialPos = MenuIndexFromPartnerID[playerData->currentPartner] - 1;
popup->dipMode = 0;
popup->titleNumber = 0;
create_battle_popup_menu(popup);
@ -4050,8 +4050,8 @@ void btl_state_update_partner_menu(void) {
break;
case BTL_SUBSTATE_PARTNER_MENU_UNUSED_CHANGE_PARTNER_1:
popupIndex = 0;
for (i = 1; i < ARRAY_COUNT(D_8008EEC0); i++) {
s32 partnerId = D_8008EEC0[i];
for (i = 1; i < ARRAY_COUNT(PartnerIDFromMenuIndex); i++) {
s32 partnerId = PartnerIDFromMenuIndex[i];
if (playerData->partners[partnerId].enabled) {
popupProps = &gPartnerPopupProperties[partnerId];
popupMenu->ptrIcon[popupIndex] = battle_menu_PartnerHudScripts[partnerId];
@ -4072,7 +4072,7 @@ void btl_state_update_partner_menu(void) {
}
popupMenu->popupType = POPUP_MENU_SWITCH_PARTNER;
popupMenu->numEntries = popupIndex;
popupMenu->initialPos = D_8008EEF0[playerData->currentPartner] - 1;
popupMenu->initialPos = MenuIndexFromPartnerID[playerData->currentPartner] - 1;
popupMenu->dipMode = 0;
popupMenu->titleNumber = 0;
create_battle_popup_menu(popupMenu);
@ -4325,7 +4325,7 @@ void btl_state_update_partner_menu(void) {
case BTL_SUBSTATE_PARTNER_MENU_CHANGE_PARTNER_1:
popupIndex = 0;
for (i = 1; i < 12; i++) {
s32 partnerId = D_8008EEC0[i];
s32 partnerId = PartnerIDFromMenuIndex[i];
if (playerData->partners[partnerId].enabled) {
popupProps = &gPartnerPopupProperties[partnerId];
popupMenu->ptrIcon[popupIndex] = battle_menu_PartnerHudScripts[partnerId];
@ -4346,7 +4346,7 @@ void btl_state_update_partner_menu(void) {
}
popupMenu->popupType = POPUP_MENU_SWITCH_PARTNER;
popupMenu->numEntries = popupIndex;
popupMenu->initialPos = D_8008EEF0[playerData->currentPartner] - 1;
popupMenu->initialPos = MenuIndexFromPartnerID[playerData->currentPartner] - 1;
popupMenu->dipMode = 0;
popupMenu->titleNumber = 0;
create_battle_popup_menu(popupMenu);

View File

@ -170,23 +170,6 @@
#define MSG_PartnerMoveName_SpinyFlip3 MSG_PartnerMoveName_SpinyFlip
#endif
#define STANDARD_ITEM_SCRIPT(icon) \
{ \
is_SetIcon(60, icon) \
is_Restart \
is_End \
}
#define STANDARD_ITEM_HUD_SCRIPT(icon) \
{ \
hs_SetVisible \
hs_SetTileSize(HUD_ELEMENT_SIZE_32x32) \
hs_Loop \
hs_SetIcon(60, icon) \
hs_Restart \
hs_End \
}
HudScript HES_HandPointDownLoop = {
hs_SetVisible
hs_SetTileSize(HUD_ELEMENT_SIZE_24x24)
@ -322,9 +305,39 @@ s32 pad_after_item_hudscripts[] = {
#include "item_entity_scripts.inc.c"
s32 D_8008EEC0[] = { 0, 1, 2, 3, 4, 9, 6, 7, 8, 5, 10, 11 };
//TODO split for partner popup menu data?
s32 D_8008EEF0[] = { 0, 1, 2, 3, 4, 0, 6, 7, 8, 5, 0, 0 };
// "change partner" menu position -> partnerID
s32 PartnerIDFromMenuIndex[] = {
PARTNER_NONE,
PARTNER_GOOMBARIO,
PARTNER_KOOPER,
PARTNER_BOMBETTE,
PARTNER_PARAKARRY,
PARTNER_BOW,
PARTNER_WATT,
PARTNER_SUSHIE,
PARTNER_LAKILESTER,
PARTNER_GOOMPA,
PARTNER_GOOMBARIA,
PARTNER_TWINK
};
// partnerID -> "change partner" menu position
s32 MenuIndexFromPartnerID[] = {
[PARTNER_NONE] 0,
[PARTNER_GOOMBARIO] 1,
[PARTNER_KOOPER] 2,
[PARTNER_BOMBETTE] 3,
[PARTNER_PARAKARRY] 4,
[PARTNER_GOOMPA] 0,
[PARTNER_WATT] 6,
[PARTNER_SUSHIE] 7,
[PARTNER_LAKILESTER] 8,
[PARTNER_BOW] 5,
[PARTNER_GOOMBARIA] 0,
[PARTNER_TWINK] 0,
};
PartnerPopupProperties gPartnerPopupProperties[] = {
[PARTNER_NONE] {

View File

@ -23,7 +23,7 @@ BSS char D_8010CD14[0xA];
BSS s32 D_8010CD20;
BSS char D_8010CD24[0xC];
extern s32 D_8008EEF0[];
extern s32 MenuIndexFromPartnerID[];
void func_800E6860(void) {
PlayerStatus* playerStatus = &gPlayerStatus;
@ -128,8 +128,8 @@ s32 setup_partner_popup(PopupMenu* menu) {
s32 optionCount = 0;
s32 i;
for (i = 1; i < ARRAY_COUNT(D_8008EEC0); i++) {
s32 partnerID = D_8008EEC0[i];
for (i = 1; i < ARRAY_COUNT(PartnerIDFromMenuIndex); i++) {
s32 partnerID = PartnerIDFromMenuIndex[i];
if (playerData->partners[partnerID].enabled && partnerID != PARTNER_GOOMPA) {
PartnerPopupProperties* properties = &gPartnerPopupProperties[partnerID];
@ -251,7 +251,7 @@ block_17:
}
popup->numEntries = numEntries;
popup->popupType = POPUP_MENU_SWITCH_PARTNER;
popup->initialPos = D_8008EEF0[playerData->currentPartner] - 1;
popup->initialPos = MenuIndexFromPartnerID[playerData->currentPartner] - 1;
break;
}
return;

View File

@ -12,7 +12,7 @@
#if VERSION_IQUE
// TODO: remove if section is split in iQue release
extern Addr icon_present_ROM_START;
extern Addr icon_ROM_START;
#endif
#define MAX_ITEM_ENTITIES 256
@ -807,7 +807,7 @@ void item_entity_load(ItemEntity* item) {
entry->data = &gHudElementCacheBuffer[*gHudElementCacheSize];
ASSERT(*gHudElementCacheSize + size < 0x11000);
nuPiReadRom((s32)icon_present_ROM_START + raster, entry->data, size);
nuPiReadRom((s32)icon_ROM_START + raster, entry->data, size);
*gHudElementCacheSize += size;
if (!gGameStatusPtr->isBattle) {
*pos = i;
@ -840,7 +840,7 @@ void item_entity_load(ItemEntity* item) {
entry->id = palette;
entry->data = &gHudElementCacheBuffer[*gHudElementCacheSize];
ASSERT(*gHudElementCacheSize + 0x20 < 0x11000);
nuPiReadRom((s32)icon_present_ROM_START + palette, entry->data, 0x20);
nuPiReadRom((s32)icon_ROM_START + palette, entry->data, 0x20);
*gHudElementCacheSize += 0x20;
if (!gGameStatusPtr->isBattle) {
*pos = i;

View File

@ -5,7 +5,7 @@
#if VERSION_IQUE
// TODO: remove if section is split in iQue release
extern Addr icon_present_ROM_START;
extern Addr icon_ROM_START;
#endif
#define MAX_HUD_CACHE_ENTRIES 192
@ -198,7 +198,7 @@ void hud_element_load_script(HudElement* hudElement, HudScript* anim) {
capacity = gHudElementCacheCapacity / 2;
}
ASSERT(capacity > *gHudElementCacheSize + gHudElementSizes[preset].size);
nuPiReadRom((s32)icon_present_ROM_START + raster, entry->data, gHudElementSizes[preset].size);
nuPiReadRom((s32)icon_ROM_START + raster, entry->data, gHudElementSizes[preset].size);
*gHudElementCacheSize += gHudElementSizes[preset].size;
if (!gGameStatusPtr->isBattle) {
*pos = i;
@ -234,7 +234,7 @@ void hud_element_load_script(HudElement* hudElement, HudScript* anim) {
capacity = gHudElementCacheCapacity / 2;
}
ASSERT(capacity > *gHudElementCacheSize + 32);
nuPiReadRom((s32)icon_present_ROM_START + palette, entry->data, 32);
nuPiReadRom((s32)icon_ROM_START + palette, entry->data, 32);
*gHudElementCacheSize += 32;
if (!gGameStatusPtr->isBattle) {
*pos = i;

View File

@ -284,6 +284,16 @@ extern HudScript* wPartnerHudScripts[];
hs_End \
}
#define STANDARD_ITEM_HUD_SCRIPT(icon) \
{ \
hs_SetVisible \
hs_SetTileSize(HUD_ELEMENT_SIZE_32x32) \
hs_Loop \
hs_SetIcon(60, icon) \
hs_Restart \
hs_End \
}
void hud_element_load_script(HudElement* hudElement, HudScript* anim);
/// @param clamp 0 = repeat; 1 = clamp

View File

@ -1,4 +1,5 @@
#include "item_entity.h"
#include "icon_offsets.h"
ItemScript IES_Jump = {
is_SetIcon(255, key_Gift)
@ -87,7 +88,7 @@ ItemScript IES_Items = {
ItemScript IES_PleaseComeBack = STANDARD_ITEM_SCRIPT(battle_PleaseComeBack);
ItemScript IES_ITEM_139 = STANDARD_ITEM_SCRIPT(battle_139);
ItemScript IES_ITEM_139 = STANDARD_ITEM_SCRIPT(battle_item_139);
ItemScript IES_FrightJar = STANDARD_ITEM_SCRIPT(battle_FrightJar);
@ -97,9 +98,9 @@ ItemScript IES_RepelGel = STANDARD_ITEM_SCRIPT(battle_RepelGel);
ItemScript IES_InsecticideHerb = STANDARD_ITEM_SCRIPT(battle_InsecticideHerb);
ItemScript IES_ITEM_13E = STANDARD_ITEM_SCRIPT(battle_13E);
ItemScript IES_ITEM_13E = STANDARD_ITEM_SCRIPT(battle_item_13E);
ItemScript IES_ITEM_13F = STANDARD_ITEM_SCRIPT(battle_13F);
ItemScript IES_ITEM_13F = STANDARD_ITEM_SCRIPT(battle_item_13F);
ItemScript IES_GearBoots1 = STANDARD_ITEM_SCRIPT(key_gear_boots_1);
@ -271,11 +272,11 @@ ItemScript IES_Unused_08B = STANDARD_ITEM_SCRIPT(key_Postcard);
ItemScript IES_Unused_08C = STANDARD_ITEM_SCRIPT(key_EmptyBook);
ItemScript IES_Unused_08D = STANDARD_ITEM_SCRIPT(unused_08D);
ItemScript IES_Unused_08D = STANDARD_ITEM_SCRIPT(unused_item_08D);
ItemScript IES_Unused_08E = STANDARD_ITEM_SCRIPT(unused_08E);
ItemScript IES_Unused_08E = STANDARD_ITEM_SCRIPT(unused_item_08E);
ItemScript IES_Unused_08F = STANDARD_ITEM_SCRIPT(unused_08F);
ItemScript IES_Unused_08F = STANDARD_ITEM_SCRIPT(unused_item_08F);
ItemScript IES_SpinSmash = STANDARD_ITEM_SCRIPT(badge_SpinSmash);
@ -415,11 +416,11 @@ ItemScript IES_CloseCall = STANDARD_ITEM_SCRIPT(badge_CloseCall);
ItemScript IES_CrazyHeart = STANDARD_ITEM_SCRIPT(badge_CrazyHeart);
ItemScript IES_Unused_0D5 = STANDARD_ITEM_SCRIPT(unused_0D5);
ItemScript IES_Unused_0D5 = STANDARD_ITEM_SCRIPT(unused_item_0D5);
ItemScript IES_Unused_0D6 = STANDARD_ITEM_SCRIPT(unused_0D6);
ItemScript IES_Unused_0D6 = STANDARD_ITEM_SCRIPT(unused_item_0D6);
ItemScript IES_Unused_0D7 = STANDARD_ITEM_SCRIPT(unused_0D7);
ItemScript IES_Unused_0D7 = STANDARD_ITEM_SCRIPT(unused_item_0D7);
ItemScript IES_ShrinkSmash = STANDARD_ITEM_SCRIPT(badge_ShrinkSmash);
@ -435,7 +436,7 @@ ItemScript IES_HappyFlower = STANDARD_ITEM_SCRIPT(badge_HappyFlower);
ItemScript IES_HappyCoin = STANDARD_ITEM_SCRIPT(badge_HappyCoin);
ItemScript IES_Unused_0DF = STANDARD_ITEM_SCRIPT(unused_0DF);
ItemScript IES_Unused_0DF = STANDARD_ITEM_SCRIPT(unused_item_0DF);
ItemScript IES_DeepFocus = STANDARD_ITEM_SCRIPT(badge_DeepFocus);
@ -445,13 +446,13 @@ ItemScript IES_Kaiden = STANDARD_ITEM_SCRIPT(badge_Kaiden);
ItemScript IES_QuickChange = STANDARD_ITEM_SCRIPT(badge_QuickChange);
ItemScript IES_Unused_0E4 = STANDARD_ITEM_SCRIPT(unused_0E4);
ItemScript IES_Unused_0E4 = STANDARD_ITEM_SCRIPT(unused_item_0E4);
ItemScript IES_Unused_0E5 = STANDARD_ITEM_SCRIPT(unused_0E5);
ItemScript IES_Unused_0E5 = STANDARD_ITEM_SCRIPT(unused_item_0E5);
ItemScript IES_Unused_0E6 = STANDARD_ITEM_SCRIPT(unused_0E6);
ItemScript IES_Unused_0E6 = STANDARD_ITEM_SCRIPT(unused_item_0E6);
ItemScript IES_Unused_0E7 = STANDARD_ITEM_SCRIPT(unused_0E7);
ItemScript IES_Unused_0E7 = STANDARD_ITEM_SCRIPT(unused_item_0E7);
ItemScript IES_Peekaboo = STANDARD_ITEM_SCRIPT(badge_Peekaboo);
@ -467,23 +468,23 @@ ItemScript IES_AttackFXC = STANDARD_ITEM_SCRIPT(badge_AttackFXC);
ItemScript IES_AttackFXF = STANDARD_ITEM_SCRIPT(badge_AttackFXF);
ItemScript IES_Unused_0EF = STANDARD_ITEM_SCRIPT(unused_0EF);
ItemScript IES_Unused_0EF = STANDARD_ITEM_SCRIPT(unused_item_0EF);
ItemScript IES_HealthyHealthy = STANDARD_ITEM_SCRIPT(badge_HealthyHealthy);
ItemScript IES_Unused_0F1 = STANDARD_ITEM_SCRIPT(unused_0F1);
ItemScript IES_Unused_0F1 = STANDARD_ITEM_SCRIPT(unused_item_0F1);
ItemScript IES_Unused_0F2 = STANDARD_ITEM_SCRIPT(unused_0F2);
ItemScript IES_Unused_0F2 = STANDARD_ITEM_SCRIPT(unused_item_0F2);
ItemScript IES_Unused_0F3 = STANDARD_ITEM_SCRIPT(unused_0F3);
ItemScript IES_Unused_0F3 = STANDARD_ITEM_SCRIPT(unused_item_0F3);
ItemScript IES_Unused_0F4 = STANDARD_ITEM_SCRIPT(unused_0F4);
ItemScript IES_Unused_0F4 = STANDARD_ITEM_SCRIPT(unused_item_0F4);
ItemScript IES_Unused_0F5 = STANDARD_ITEM_SCRIPT(unused_0F5);
ItemScript IES_Unused_0F5 = STANDARD_ITEM_SCRIPT(unused_item_0F5);
ItemScript IES_Unused_0F6 = STANDARD_ITEM_SCRIPT(unused_0F6);
ItemScript IES_Unused_0F6 = STANDARD_ITEM_SCRIPT(unused_item_0F6);
ItemScript IES_Unused_0F7 = STANDARD_ITEM_SCRIPT(unused_0F7);
ItemScript IES_Unused_0F7 = STANDARD_ITEM_SCRIPT(unused_item_0F7);
ItemScript IES_Heart = {
is_SetIcon(10, anim_heart_0)
@ -643,15 +644,15 @@ ItemScript IES_YoshiCookie = STANDARD_ITEM_SCRIPT(food_YoshiCookie);
ItemScript IES_JellyShroom = STANDARD_ITEM_SCRIPT(food_JellyShroom);
ItemScript IES_Unused_02C = STANDARD_ITEM_SCRIPT(unused_02C);
ItemScript IES_Unused_02C = STANDARD_ITEM_SCRIPT(unused_item_02C);
ItemScript IES_Unused_02D = STANDARD_ITEM_SCRIPT(unused_02D);
ItemScript IES_Unused_02D = STANDARD_ITEM_SCRIPT(unused_item_02D);
ItemScript IES_Unused_02E = STANDARD_ITEM_SCRIPT(unused_02E);
ItemScript IES_Unused_02E = STANDARD_ITEM_SCRIPT(unused_item_02E);
ItemScript IES_Unused_02F = STANDARD_ITEM_SCRIPT(unused_02F);
ItemScript IES_Unused_02F = STANDARD_ITEM_SCRIPT(unused_item_02F);
ItemScript IES_Unused_030 = STANDARD_ITEM_SCRIPT(unused_030);
ItemScript IES_Unused_030 = STANDARD_ITEM_SCRIPT(unused_item_030);
ItemScript IES_FireFlower = STANDARD_ITEM_SCRIPT(battle_FireFlower);
@ -667,7 +668,7 @@ ItemScript IES_DustyHammer = STANDARD_ITEM_SCRIPT(battle_DustyHammer);
ItemScript IES_Pebble = STANDARD_ITEM_SCRIPT(battle_Pebble);
ItemScript IES_ITEM_127 = STANDARD_ITEM_SCRIPT(unused_127);
ItemScript IES_ITEM_127 = STANDARD_ITEM_SCRIPT(unused_item_127);
ItemScript IES_StoneCap = STANDARD_ITEM_SCRIPT(battle_StoneCap);
@ -679,11 +680,11 @@ ItemScript IES_Parasol = STANDARD_ITEM_SCRIPT(battle_Parasol);
ItemScript IES_MagicMirror = STANDARD_ITEM_SCRIPT(battle_MagicMirror);
ItemScript IES_ITEM_12D = STANDARD_ITEM_SCRIPT(unused_12D);
ItemScript IES_ITEM_12D = STANDARD_ITEM_SCRIPT(unused_item_12D);
ItemScript IES_ITEM_12E = STANDARD_ITEM_SCRIPT(unused_12E);
ItemScript IES_ITEM_12E = STANDARD_ITEM_SCRIPT(unused_item_12E);
ItemScript IES_ITEM_12F = STANDARD_ITEM_SCRIPT(unused_12F);
ItemScript IES_ITEM_12F = STANDARD_ITEM_SCRIPT(unused_item_12F);
ItemScript IES_Mushroom = STANDARD_ITEM_SCRIPT(food_Mushroom);
@ -763,7 +764,7 @@ ItemScript IES_BakingFlour = STANDARD_ITEM_SCRIPT(peach_BakingFlour);
ItemScript IES_BakingMilk = STANDARD_ITEM_SCRIPT(peach_BakingMilk);
ItemScript IES_ITEM_11F = STANDARD_ITEM_SCRIPT(unused_11F);
ItemScript IES_ITEM_11F = STANDARD_ITEM_SCRIPT(unused_item_11F);
ItemScript IES_SleepySheep = STANDARD_ITEM_SCRIPT(battle_SleepySheep);
@ -777,9 +778,9 @@ ItemScript IES_StopWatch = STANDARD_ITEM_SCRIPT(battle_StopWatch);
ItemScript IES_DizzyDial = STANDARD_ITEM_SCRIPT(battle_DizzyDial);
ItemScript IES_ITEM_136 = STANDARD_ITEM_SCRIPT(battle_136);
ItemScript IES_ITEM_136 = STANDARD_ITEM_SCRIPT(battle_item_136);
ItemScript IES_ITEM_137 = STANDARD_ITEM_SCRIPT(battle_137);
ItemScript IES_ITEM_137 = STANDARD_ITEM_SCRIPT(battle_item_137);
/* indexed by itemID */
s32* gItemEntityScripts[] = {

View File

@ -411,20 +411,20 @@ HudScript HES_Item_Unused_08B_disabled = STANDARD_ITEM_HUD_SCRIPT(key_Postcard_d
HudScript HES_Item_Unused_08C = STANDARD_ITEM_HUD_SCRIPT(key_EmptyBook);
HudScript HES_Item_Unused_08C_disabled = STANDARD_ITEM_HUD_SCRIPT(key_EmptyBook_disabled);
HudScript HES_Item_Unused_08D = STANDARD_ITEM_HUD_SCRIPT(unused_08D);
HudScript HES_Item_Unused_08D_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_08D_disabled);
HudScript HES_Item_Unused_08D = STANDARD_ITEM_HUD_SCRIPT(unused_item_08D);
HudScript HES_Item_Unused_08D_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_08D_disabled);
HudScript HES_Item_Unused_08E = STANDARD_ITEM_HUD_SCRIPT(unused_08E);
HudScript HES_Item_Unused_08E_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_08E_disabled);
HudScript HES_Item_Unused_08E = STANDARD_ITEM_HUD_SCRIPT(unused_item_08E);
HudScript HES_Item_Unused_08E_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_08E_disabled);
HudScript HES_Item_Unused_08F = STANDARD_ITEM_HUD_SCRIPT(unused_08F);
HudScript HES_Item_Unused_08F_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_08F_disabled);
HudScript HES_Item_Unused_08F = STANDARD_ITEM_HUD_SCRIPT(unused_item_08F);
HudScript HES_Item_Unused_08F_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_08F_disabled);
HudScript HES_Item_PleaseComeBack = STANDARD_ITEM_HUD_SCRIPT(battle_PleaseComeBack);
HudScript HES_Item_PleaseComeBack_disabled = STANDARD_ITEM_HUD_SCRIPT(battle_PleaseComeBack_disabled);
HudScript HES_Item_Unused_139 = STANDARD_ITEM_HUD_SCRIPT(battle_139);
HudScript HES_Item_Unused_139_disabled = STANDARD_ITEM_HUD_SCRIPT(battle_139_disabled);
HudScript HES_Item_Unused_139 = STANDARD_ITEM_HUD_SCRIPT(battle_item_139);
HudScript HES_Item_Unused_139_disabled = STANDARD_ITEM_HUD_SCRIPT(battle_item_139_disabled);
HudScript HES_Item_FrightJar = STANDARD_ITEM_HUD_SCRIPT(battle_FrightJar);
HudScript HES_Item_FrightJar_disabled = STANDARD_ITEM_HUD_SCRIPT(battle_FrightJar_disabled);
@ -438,11 +438,11 @@ HudScript HES_Item_RepelGel_disabled = STANDARD_ITEM_HUD_SCRIPT(battle_RepelGel_
HudScript HES_Item_InsecticideHerb = STANDARD_ITEM_HUD_SCRIPT(battle_InsecticideHerb);
HudScript HES_Item_InsecticideHerb_disabled = STANDARD_ITEM_HUD_SCRIPT(battle_InsecticideHerb_disabled);
HudScript HES_Item_Unused_13E = STANDARD_ITEM_HUD_SCRIPT(battle_13E);
HudScript HES_Item_Unused_13E_disabled = STANDARD_ITEM_HUD_SCRIPT(battle_13E_disabled);
HudScript HES_Item_Unused_13E = STANDARD_ITEM_HUD_SCRIPT(battle_item_13E);
HudScript HES_Item_Unused_13E_disabled = STANDARD_ITEM_HUD_SCRIPT(battle_item_13E_disabled);
HudScript HES_Item_Unused_13F = STANDARD_ITEM_HUD_SCRIPT(battle_13F);
HudScript HES_Item_Unused_13F_disabled = STANDARD_ITEM_HUD_SCRIPT(battle_13F_disabled);
HudScript HES_Item_Unused_13F = STANDARD_ITEM_HUD_SCRIPT(battle_item_13F);
HudScript HES_Item_Unused_13F_disabled = STANDARD_ITEM_HUD_SCRIPT(battle_item_13F_disabled);
HudScript HES_Item_SpicySoup = STANDARD_ITEM_HUD_SCRIPT(food_SpicySoup);
HudScript HES_Item_SpicySoup_disabled = STANDARD_ITEM_HUD_SCRIPT(food_SpicySoup_disabled);
@ -573,20 +573,20 @@ HudScript HES_Item_YoshiCookie_disabled = STANDARD_ITEM_HUD_SCRIPT(food_YoshiCoo
HudScript HES_Item_JellyShroom = STANDARD_ITEM_HUD_SCRIPT(food_JellyShroom);
HudScript HES_Item_JellyShroom_disabled = STANDARD_ITEM_HUD_SCRIPT(food_JellyShroom_disabled);
HudScript HES_Item_Unused_02C = STANDARD_ITEM_HUD_SCRIPT(unused_02C);
HudScript HES_Item_Unused_02C_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_02C_disabled);
HudScript HES_Item_Unused_02C = STANDARD_ITEM_HUD_SCRIPT(unused_item_02C);
HudScript HES_Item_Unused_02C_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_02C_disabled);
HudScript HES_Item_Unused_02D = STANDARD_ITEM_HUD_SCRIPT(unused_02D);
HudScript HES_Item_Unused_02D_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_02D_disabled);
HudScript HES_Item_Unused_02D = STANDARD_ITEM_HUD_SCRIPT(unused_item_02D);
HudScript HES_Item_Unused_02D_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_02D_disabled);
HudScript HES_Item_Unused_02E = STANDARD_ITEM_HUD_SCRIPT(unused_02E);
HudScript HES_Item_Unused_02E_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_02E_disabled);
HudScript HES_Item_Unused_02E = STANDARD_ITEM_HUD_SCRIPT(unused_item_02E);
HudScript HES_Item_Unused_02E_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_02E_disabled);
HudScript HES_Item_Unused_02F = STANDARD_ITEM_HUD_SCRIPT(unused_02F);
HudScript HES_Item_Unused_02F_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_02F_disabled);
HudScript HES_Item_Unused_02F = STANDARD_ITEM_HUD_SCRIPT(unused_item_02F);
HudScript HES_Item_Unused_02F_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_02F_disabled);
HudScript HES_Item_Unused_030 = STANDARD_ITEM_HUD_SCRIPT(unused_030);
HudScript HES_Item_Unused_030_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_030_disabled);
HudScript HES_Item_Unused_030 = STANDARD_ITEM_HUD_SCRIPT(unused_item_030);
HudScript HES_Item_Unused_030_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_030_disabled);
HudScript HES_Item_SpinSmash = STANDARD_ITEM_HUD_SCRIPT(badge_SpinSmash);
HudScript HES_Item_SpinSmash_disabled = STANDARD_ITEM_HUD_SCRIPT(badge_SpinSmash_disabled);
@ -795,14 +795,14 @@ HudScript HES_Item_CloseCall_disabled = STANDARD_ITEM_HUD_SCRIPT(badge_CloseCall
HudScript HES_Item_CrazyHeart = STANDARD_ITEM_HUD_SCRIPT(badge_CrazyHeart);
HudScript HES_Item_CrazyHeart_disabled = STANDARD_ITEM_HUD_SCRIPT(badge_CrazyHeart_disabled);
HudScript HES_Item_Unused_0D5 = STANDARD_ITEM_HUD_SCRIPT(unused_0D5);
HudScript HES_Item_Unused_0D5_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_0D5_disabled);
HudScript HES_Item_Unused_0D5 = STANDARD_ITEM_HUD_SCRIPT(unused_item_0D5);
HudScript HES_Item_Unused_0D5_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_0D5_disabled);
HudScript HES_Item_Unused_0D6 = STANDARD_ITEM_HUD_SCRIPT(unused_0D6);
HudScript HES_Item_Unused_0D6_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_0D6_disabled);
HudScript HES_Item_Unused_0D6 = STANDARD_ITEM_HUD_SCRIPT(unused_item_0D6);
HudScript HES_Item_Unused_0D6_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_0D6_disabled);
HudScript HES_Item_Unused_0D7 = STANDARD_ITEM_HUD_SCRIPT(unused_0D7);
HudScript HES_Item_Unused_0D7_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_0D7_disabled);
HudScript HES_Item_Unused_0D7 = STANDARD_ITEM_HUD_SCRIPT(unused_item_0D7);
HudScript HES_Item_Unused_0D7_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_0D7_disabled);
HudScript HES_Item_ShrinkSmash = STANDARD_ITEM_HUD_SCRIPT(badge_ShrinkSmash);
HudScript HES_Item_ShrinkSmash_disabled = STANDARD_ITEM_HUD_SCRIPT(badge_ShrinkSmash_disabled);
@ -825,8 +825,8 @@ HudScript HES_Item_HappyFlower_disabled = STANDARD_ITEM_HUD_SCRIPT(badge_HappyFl
HudScript HES_Item_Unused_0DE = STANDARD_ITEM_HUD_SCRIPT(badge_HappyCoin);
HudScript HES_Item_Unused_0DE_disabled = STANDARD_ITEM_HUD_SCRIPT(badge_HappyCoin_disabled);
HudScript HES_Item_Unused_0DF = STANDARD_ITEM_HUD_SCRIPT(unused_0DF);
HudScript HES_Item_Unused_0DF_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_0DF_disabled);
HudScript HES_Item_Unused_0DF = STANDARD_ITEM_HUD_SCRIPT(unused_item_0DF);
HudScript HES_Item_Unused_0DF_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_0DF_disabled);
HudScript HES_Item_DeepFocus = STANDARD_ITEM_HUD_SCRIPT(badge_DeepFocus);
HudScript HES_Item_DeepFocus_disabled = STANDARD_ITEM_HUD_SCRIPT(badge_DeepFocus_disabled);
@ -840,17 +840,17 @@ HudScript HES_Item_Kaiden_disabled = STANDARD_ITEM_HUD_SCRIPT(badge_Kaiden_disab
HudScript HES_Item_QuickChange = STANDARD_ITEM_HUD_SCRIPT(badge_QuickChange);
HudScript HES_Item_QuickChange_disabled = STANDARD_ITEM_HUD_SCRIPT(badge_QuickChange_disabled);
HudScript HES_Item_Unused_0E4 = STANDARD_ITEM_HUD_SCRIPT(unused_0E4);
HudScript HES_Item_Unused_0E4_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_0E4_disabled);
HudScript HES_Item_Unused_0E4 = STANDARD_ITEM_HUD_SCRIPT(unused_item_0E4);
HudScript HES_Item_Unused_0E4_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_0E4_disabled);
HudScript HES_Item_Unused_0E5 = STANDARD_ITEM_HUD_SCRIPT(unused_0E5);
HudScript HES_Item_Unused_0E5_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_0E5_disabled);
HudScript HES_Item_Unused_0E5 = STANDARD_ITEM_HUD_SCRIPT(unused_item_0E5);
HudScript HES_Item_Unused_0E5_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_0E5_disabled);
HudScript HES_Item_Unused_0E6 = STANDARD_ITEM_HUD_SCRIPT(unused_0E6);
HudScript HES_Item_Unused_0E6_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_0E6_disabled);
HudScript HES_Item_Unused_0E6 = STANDARD_ITEM_HUD_SCRIPT(unused_item_0E6);
HudScript HES_Item_Unused_0E6_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_0E6_disabled);
HudScript HES_Item_Unused_0E7 = STANDARD_ITEM_HUD_SCRIPT(unused_0E7);
HudScript HES_Item_Unused_0E7_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_0E7_disabled);
HudScript HES_Item_Unused_0E7 = STANDARD_ITEM_HUD_SCRIPT(unused_item_0E7);
HudScript HES_Item_Unused_0E7_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_0E7_disabled);
HudScript HES_Item_Peekaboo = STANDARD_ITEM_HUD_SCRIPT(badge_Peekaboo);
HudScript HES_Item_Peekaboo_disabled = STANDARD_ITEM_HUD_SCRIPT(badge_Peekaboo_disabled);
@ -873,32 +873,32 @@ HudScript HES_Item_AttackFXC_disabled = STANDARD_ITEM_HUD_SCRIPT(badge_AttackFXC
HudScript HES_Item_AttackFXF = STANDARD_ITEM_HUD_SCRIPT(badge_AttackFXF);
HudScript HES_Item_AttackFXF_disabled = STANDARD_ITEM_HUD_SCRIPT(badge_AttackFXF_disabled);
HudScript HES_Item_Unused_0EF = STANDARD_ITEM_HUD_SCRIPT(unused_0EF);
HudScript HES_Item_Unused_0EF_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_0EF_disabled);
HudScript HES_Item_Unused_0EF = STANDARD_ITEM_HUD_SCRIPT(unused_item_0EF);
HudScript HES_Item_Unused_0EF_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_0EF_disabled);
HudScript HES_Item_HealthyHealthy = STANDARD_ITEM_HUD_SCRIPT(badge_HealthyHealthy);
HudScript HES_Item_HealthyHealthy_disabled = STANDARD_ITEM_HUD_SCRIPT(badge_HealthyHealthy_disabled);
HudScript HES_Item_Unused_0F1 = STANDARD_ITEM_HUD_SCRIPT(unused_0F1);
HudScript HES_Item_Unused_0F1_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_0F1_disabled);
HudScript HES_Item_Unused_0F1 = STANDARD_ITEM_HUD_SCRIPT(unused_item_0F1);
HudScript HES_Item_Unused_0F1_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_0F1_disabled);
HudScript HES_Item_Unused_0F2 = STANDARD_ITEM_HUD_SCRIPT(unused_0F2);
HudScript HES_Item_Unused_0F2_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_0F2_disabled);
HudScript HES_Item_Unused_0F2 = STANDARD_ITEM_HUD_SCRIPT(unused_item_0F2);
HudScript HES_Item_Unused_0F2_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_0F2_disabled);
HudScript HES_Item_Unused_0F3 = STANDARD_ITEM_HUD_SCRIPT(unused_0F3);
HudScript HES_Item_Unused_0F3_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_0F3_disabled);
HudScript HES_Item_Unused_0F3 = STANDARD_ITEM_HUD_SCRIPT(unused_item_0F3);
HudScript HES_Item_Unused_0F3_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_0F3_disabled);
HudScript HES_Item_Unused_0F4 = STANDARD_ITEM_HUD_SCRIPT(unused_0F4);
HudScript HES_Item_Unused_0F4_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_0F4_disabled);
HudScript HES_Item_Unused_0F4 = STANDARD_ITEM_HUD_SCRIPT(unused_item_0F4);
HudScript HES_Item_Unused_0F4_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_0F4_disabled);
HudScript HES_Item_Unused_0F5 = STANDARD_ITEM_HUD_SCRIPT(unused_0F5);
HudScript HES_Item_Unused_0F5_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_0F5_disabled);
HudScript HES_Item_Unused_0F5 = STANDARD_ITEM_HUD_SCRIPT(unused_item_0F5);
HudScript HES_Item_Unused_0F5_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_0F5_disabled);
HudScript HES_Item_Unused_0F6 = STANDARD_ITEM_HUD_SCRIPT(unused_0F6);
HudScript HES_Item_Unused_0F6_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_0F6_disabled);
HudScript HES_Item_Unused_0F6 = STANDARD_ITEM_HUD_SCRIPT(unused_item_0F6);
HudScript HES_Item_Unused_0F6_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_0F6_disabled);
HudScript HES_Item_Unused_0F7 = STANDARD_ITEM_HUD_SCRIPT(unused_0F7);
HudScript HES_Item_Unused_0F7_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_0F7_disabled);
HudScript HES_Item_Unused_0F7 = STANDARD_ITEM_HUD_SCRIPT(unused_item_0F7);
HudScript HES_Item_Unused_0F7_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_0F7_disabled);
HudScript HES_Item_FireFlower = STANDARD_ITEM_HUD_SCRIPT(battle_FireFlower);
HudScript HES_Item_FireFlower_disabled = STANDARD_ITEM_HUD_SCRIPT(battle_FireFlower_disabled);
@ -921,8 +921,8 @@ HudScript HES_Item_DustyHammer_disabled = STANDARD_ITEM_HUD_SCRIPT(battle_DustyH
HudScript HES_Item_Pebble = STANDARD_ITEM_HUD_SCRIPT(battle_Pebble);
HudScript HES_Item_Pebble_disabled = STANDARD_ITEM_HUD_SCRIPT(battle_Pebble_disabled);
HudScript HES_Item_Unused_127 = STANDARD_ITEM_HUD_SCRIPT(unused_127);
HudScript HES_Item_Unused_127_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_127_disabled);
HudScript HES_Item_Unused_127 = STANDARD_ITEM_HUD_SCRIPT(unused_item_127);
HudScript HES_Item_Unused_127_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_127_disabled);
HudScript HES_Item_StoneCap = STANDARD_ITEM_HUD_SCRIPT(battle_StoneCap);
HudScript HES_Item_StoneCap_disabled = STANDARD_ITEM_HUD_SCRIPT(battle_StoneCap_disabled);
@ -939,14 +939,14 @@ HudScript HES_Item_Parasol_disabled = STANDARD_ITEM_HUD_SCRIPT(battle_Parasol_di
HudScript HES_Item_MagicMirror = STANDARD_ITEM_HUD_SCRIPT(battle_MagicMirror);
HudScript HES_Item_MagicMirror_disabled = STANDARD_ITEM_HUD_SCRIPT(battle_MagicMirror_disabled);
HudScript HES_Item_Unused_12D = STANDARD_ITEM_HUD_SCRIPT(unused_12D);
HudScript HES_Item_Unused_12D_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_12D_disabled);
HudScript HES_Item_Unused_12D = STANDARD_ITEM_HUD_SCRIPT(unused_item_12D);
HudScript HES_Item_Unused_12D_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_12D_disabled);
HudScript HES_Item_Unused_12E = STANDARD_ITEM_HUD_SCRIPT(unused_12E);
HudScript HES_Item_Unused_12E_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_12E_disabled);
HudScript HES_Item_Unused_12E = STANDARD_ITEM_HUD_SCRIPT(unused_item_12E);
HudScript HES_Item_Unused_12E_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_12E_disabled);
HudScript HES_Item_Unused_12F = STANDARD_ITEM_HUD_SCRIPT(unused_12F);
HudScript HES_Item_Unused_12F_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_12F_disabled);
HudScript HES_Item_Unused_12F = STANDARD_ITEM_HUD_SCRIPT(unused_item_12F);
HudScript HES_Item_Unused_12F_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_12F_disabled);
HudScript HES_Item_Mushroom = STANDARD_ITEM_HUD_SCRIPT(food_Mushroom);
HudScript HES_Item_Mushroom_disabled = STANDARD_ITEM_HUD_SCRIPT(food_Mushroom_disabled);
@ -1065,8 +1065,8 @@ HudScript HES_Item_BakingFlour_disabled = STANDARD_ITEM_HUD_SCRIPT(peach_BakingF
HudScript HES_Item_BakingMilk = STANDARD_ITEM_HUD_SCRIPT(peach_BakingMilk);
HudScript HES_Item_BakingMilk_disabled = STANDARD_ITEM_HUD_SCRIPT(peach_BakingMilk_disabled);
HudScript HES_Item_Unused_11F = STANDARD_ITEM_HUD_SCRIPT(unused_11F);
HudScript HES_Item_Unused_11F_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_11F_disabled);
HudScript HES_Item_Unused_11F = STANDARD_ITEM_HUD_SCRIPT(unused_item_11F);
HudScript HES_Item_Unused_11F_disabled = STANDARD_ITEM_HUD_SCRIPT(unused_item_11F_disabled);
HudScript HES_Item_SleepySheep = STANDARD_ITEM_HUD_SCRIPT(battle_SleepySheep);
HudScript HES_Item_SleepySheep_disabled = STANDARD_ITEM_HUD_SCRIPT(battle_SleepySheep_disabled);
@ -1086,8 +1086,8 @@ HudScript HES_Item_StopWatch_disabled = STANDARD_ITEM_HUD_SCRIPT(battle_StopWatc
HudScript HES_Item_DizzyDial = STANDARD_ITEM_HUD_SCRIPT(battle_DizzyDial);
HudScript HES_Item_DizzyDial_disabled = STANDARD_ITEM_HUD_SCRIPT(battle_DizzyDial_disabled);
HudScript HES_Item_Unused_136 = STANDARD_ITEM_HUD_SCRIPT(battle_136);
HudScript HES_Item_Unused_136_disabled = STANDARD_ITEM_HUD_SCRIPT(battle_136_disabled);
HudScript HES_Item_Unused_136 = STANDARD_ITEM_HUD_SCRIPT(battle_item_136);
HudScript HES_Item_Unused_136_disabled = STANDARD_ITEM_HUD_SCRIPT(battle_item_136_disabled);
HudScript HES_Item_Unused_137 = STANDARD_ITEM_HUD_SCRIPT(battle_137);
HudScript HES_Item_Unused_137_disabled = STANDARD_ITEM_HUD_SCRIPT(battle_137_disabled);
HudScript HES_Item_Unused_137 = STANDARD_ITEM_HUD_SCRIPT(battle_item_137);
HudScript HES_Item_Unused_137_disabled = STANDARD_ITEM_HUD_SCRIPT(battle_item_137_disabled);

View File

@ -1011,9 +1011,10 @@ void msg_copy_to_print_buffer(MessagePrintState* printer, s32 arg1, s32 arg2) {
offset = arg << 8 | argQ;
D_8015131C = D_80159B50;
dma_copy(icon_present_ROM_START + gItemIconRasterOffsets[offset], icon_present_ROM_START + gItemIconRasterOffsets[offset] + 0x200, a2);
romEnd = icon_present_ROM_START + gItemIconPaletteOffsets[offset] + 0x20;
dma_copy(icon_present_ROM_START + gItemIconPaletteOffsets[offset],
dma_copy(icon_ROM_START + gItemIconRasterOffsets[offset],
icon_ROM_START + gItemIconRasterOffsets[offset] + 0x200, a2);
romEnd = icon_ROM_START + gItemIconPaletteOffsets[offset] + 0x20;
dma_copy(icon_ROM_START + gItemIconPaletteOffsets[offset],
romEnd, D_8015C7E0);
printer->currentPrintDelay = printer->printDelayTime;
if (--arg1 <= 0) {

View File

@ -77,7 +77,7 @@ API_CALLABLE(N(CreateSticker)) {
IMG_PTR iconImg = heap_malloc(0x200);
PAL_PTR iconPal = heap_malloc(0x20);
s32 iconBase = (s32) icon_present_ROM_START;
s32 iconBase = (s32) icon_ROM_START;
s32 iconImgEnd = iconBase + 0x200;
s32 iconPalEnd = iconBase + 0x20;

View File

@ -92,7 +92,7 @@ API_CALLABLE(N(func_80245028_8058A8)) {
numEntries = 0;
for (i = 1; i < 12; i++) {
partnerID = D_8008EEC0[i];
partnerID = PartnerIDFromMenuIndex[i];
if (playerData->partners[partnerID].enabled && partnerID != PARTNER_GOOMPA) {
temp_s2 = &gPartnerPopupProperties[partnerID];
cond = func_80244F5C_8057DC(partnerID);

View File

@ -258,6 +258,11 @@ def write_ninja_rules(
command=f"$python {BUILD_TOOLS}/msg/parse_compile.py $in $out",
)
ninja.rule(
"icons",
command=f"$python {BUILD_TOOLS}/pm_icons.py $out $list_path $header_path $asset_stack",
)
ninja.rule(
"msg_combine",
description="msg_combine $out",
@ -360,6 +365,7 @@ class Configure:
"gfx",
"gfx_common",
"pm_map_data",
"pm_icons",
"pm_msg",
"pm_sprites",
"pm_charset",
@ -840,6 +846,25 @@ class Configure:
"msg_combine",
)
build(entry.object_path, [entry.object_path.with_suffix(".bin")], "bin")
elif seg.type == "pm_icons":
# make icons.bin
header_path = str(self.build_path() / "include" / "icon_offsets.h")
build(
entry.object_path.with_suffix(""),
entry.src_paths,
"icons",
variables={
"list_path": entry.src_paths[0],
"header_path": header_path,
"asset_stack": ",".join(self.asset_stack),
},
implicit_outputs=[header_path],
asset_deps=["icon"],
)
# make icons.bin.o
build(entry.object_path, [entry.object_path.with_suffix("")], "bin")
elif seg.type == "pm_map_data":
# flat list of (uncompressed path, compressed? path) pairs
bin_yay0s: List[Path] = []

107
tools/build/pm_icons.py Normal file
View File

@ -0,0 +1,107 @@
#!/usr/bin/env python3
import argparse
import re
from pathlib import Path
from typing import Dict, Tuple
from common import get_asset_path
import xml.etree.ElementTree as ET
from img.build import Converter
import png
def get_img_file(fmt_str, img_file: str):
def pack_color(r, g, b, a):
r = r >> 3
g = g >> 3
b = b >> 3
a = a >> 7
return (r << 11) | (g << 6) | (b << 1) | a
(out_img, out_w, out_h) = Converter(mode=fmt_str.lower(), infile=img_file).convert()
out_pal = bytearray()
if fmt_str == "CI4" or fmt_str == "CI8":
img = png.Reader(img_file)
img.preamble(True)
palette = img.palette(alpha="force")
for rgba in palette:
if rgba[3] not in (0, 0xFF):
self.warn("alpha mask mode but translucent pixels used")
color = pack_color(*rgba)
out_pal += color.to_bytes(2, byteorder="big")
return (out_img, out_pal, out_w, out_h)
def build(out_bin: Path, in_xml: Path, out_header: Path, asset_stack: Tuple[Path, ...]):
out_bytes = bytearray()
offsets: Dict[str, int] = {}
xml = ET.parse(in_xml)
IconList = xml.getroot()
for Icon in IconList.findall("Icon"):
type = Icon.attrib["type"]
file = Icon.attrib["name"]
if file is None:
raise Exception("Icon os missing attribute: 'name'")
if type is None:
raise Exception("Icon os missing attribute: 'type'")
name = re.sub("\\W","_",file)
if type == "solo" or type == "pair":
img_path = str(get_asset_path(Path(f"icon/{file}.png"), asset_stack))
(out_img, out_pal, out_w, out_h) = get_img_file("CI4", str(img_path))
offsets[name + "_raster"] = len(out_bytes)
out_bytes += out_img
offsets[name + "_palette"] = len(out_bytes)
out_bytes += out_pal
if type == "pair":
img_path = str(get_asset_path(Path(f"icon/{file}.disabled.png"), asset_stack))
(out_img, out_pal, out_w, out_h) = get_img_file("CI4", str(img_path))
offsets[name + "_disabled_raster"] = offsets[name + "_raster"]
offsets[name + "_disabled_palette"] = len(out_bytes)
out_bytes += out_pal
elif type == "rgba16":
img_path = str(get_asset_path(Path(f"icon/{file}.png"), asset_stack))
(out_img, out_pal, out_w, out_h) = get_img_file("RGBA16", str(img_path))
offsets[name + "_raster"] = len(out_bytes)
out_bytes += out_img
else:
raise Exception("Invalid icon format: " + type)
with open(out_bin, "wb") as f:
f.write(out_bytes)
with open(out_header, "w") as f:
f.write("#ifndef ICON_OFFSETS_H\n")
f.write("#define ICON_OFFSETS_H\n")
f.write(f"/* This file is auto-generated. Do not edit. */\n\n")
for name, offset in offsets.items():
f.write(f"#define ICON_{name} 0x{offset:X}\n")
f.write("\n#endif // ICON_OFFSETS_H\n")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Icon archive")
parser.add_argument("out_bin", type=Path, help="output binary file path")
parser.add_argument("list_path", type=Path, help="input xml file path")
parser.add_argument("header_path", type=Path, help="output header file to generate")
parser.add_argument("asset_stack", help="comma-separated asset stack")
args = parser.parse_args()
asset_stack = tuple(Path(d) for d in args.asset_stack.split(","))
build(args.out_bin, args.list_path, args.header_path, asset_stack)

393
tools/splat_ext/icon.yaml Normal file
View File

@ -0,0 +1,393 @@
# valid icon types are:
# single ci4 image followed by one palette
# pair ci4 image followed by two palettes; the second will be called .disabled
# rgba16 rgba image; used by one strange entry
- [solo, key/Gift, 32, 32]
- [solo, key/CakeDone, 32, 32]
- [solo, key/CakeBaked, 32, 32]
- [solo, key/CakePan, 32, 32]
- [solo, key/CakeBatter, 32, 32]
- [solo, key/CakeBowl, 32, 32]
- [solo, key/CakeMix, 32, 32]
- [solo, key/CakeIcing, 32, 32]
- [solo, key/CakeBerries, 32, 32]
- [solo, key/gear_boots_1, 32, 32]
- [solo, key/gear_boots_2, 32, 32]
- [solo, key/gear_boots_3, 32, 32]
- [solo, key/gear_hammer_1, 32, 32]
- [solo, key/gear_hammer_2, 32, 32]
- [solo, key/gear_hammer_3, 32, 32]
- [solo, key/gear_lucky_star, 32, 32]
- [solo, key/map, 32, 32]
- [pair, food/SpicySoup, 32, 32]
- [pair, food/ApplePie, 32, 32]
- [pair, food/HoneyUltra, 32, 32]
- [pair, food/MapleUltra, 32, 32]
- [pair, food/JellyUltra, 32, 32]
- [pair, food/Koopasta, 32, 32]
- [pair, food/FriedShroom, 32, 32]
- [pair, food/ShroomCake, 32, 32]
- [pair, food/ShroomSteak, 32, 32]
- [pair, food/HotShroom, 32, 32]
- [pair, food/SweetShroom, 32, 32]
- [pair, food/HealthyJuice, 32, 32]
- [pair, food/BlandMeal, 32, 32]
- [pair, food/YummyMeal, 32, 32]
- [pair, food/DeluxeFeast, 32, 32]
- [pair, food/SpecialShake, 32, 32]
- [pair, food/BigCookie, 32, 32]
- [pair, food/Cake, 32, 32]
- [pair, food/Mistake, 32, 32]
- [pair, food/KoopaTea, 32, 32]
- [pair, food/HoneySuper, 32, 32]
- [pair, food/MapleSuper, 32, 32]
- [pair, food/JellySuper, 32, 32]
- [pair, food/Spaghetti, 32, 32]
- [pair, food/EggMissile, 32, 32]
- [pair, food/FriedEgg, 32, 32]
- [pair, food/HoneyShroom, 32, 32]
- [pair, food/HoneyCandy, 32, 32]
- [pair, food/ElectroPop, 32, 32]
- [pair, food/FirePop, 32, 32]
- [pair, food/LimeCandy, 32, 32]
- [pair, food/CocoPop, 32, 32]
- [pair, food/LemonCandy, 32, 32]
- [pair, food/JellyPop, 32, 32]
- [pair, food/StrangeCake, 32, 32]
- [pair, food/KookyCookie, 32, 32]
- [pair, food/FrozenFries, 32, 32]
- [pair, food/PotatoSalad, 32, 32]
- [pair, food/NuttyCake, 32, 32]
- [pair, food/MapleShroom, 32, 32]
- [pair, food/BoiledEgg, 32, 32]
- [pair, food/YoshiCookie, 32, 32]
- [pair, food/JellyShroom, 32, 32]
- [pair, unused/item_02C, 32, 32]
- [pair, unused/item_02D, 32, 32]
- [pair, unused/item_02E, 32, 32]
- [pair, unused/item_02F, 32, 32]
- [pair, unused/item_030, 32, 32]
- [solo, key/key_koopa_fortress, 32, 32]
- [solo, key/key_ruins, 32, 32]
- [solo, key/key_tubba_castle, 32, 32]
- [solo, key/key_ice_palace, 32, 32]
- [solo, key/key_bowser_castle, 32, 32]
- [solo, key/dolly, 32, 32]
- [solo, key/kooper_shell, 32, 32]
- [solo, key/pulse_stone, 32, 32]
- [solo, key/artifact, 32, 32]
- [solo, key/vase, 32, 32]
- [solo, key/ruins_stone_pyramid, 32, 32]
- [solo, key/ruins_stone_star, 32, 32]
- [solo, key/ruins_stone_moon, 32, 32]
- [solo, key/forest_pass, 32, 32]
- [solo, key/boo_record_mask, 32, 32]
- [solo, key/boo_record, 32, 32]
- [solo, key/boo_weight, 32, 32]
- [solo, key/boo_portrait, 32, 32]
- [solo, key/mystic_key, 32, 32]
- [solo, key/key_storeroom, 32, 32]
- [solo, key/toybox_train, 32, 32]
- [solo, key/frying_pan, 32, 32]
- [solo, key/dictionary, 32, 32]
- [solo, key/mystery_note, 32, 32]
- [solo, key/suspicious_note, 32, 32]
- [solo, key/seed_1, 32, 32]
- [solo, key/seed_2, 32, 32]
- [solo, key/seed_3, 32, 32]
- [solo, key/seed_4, 32, 32]
- [solo, key/crystal_berry, 32, 32]
- [solo, key/water_stone, 32, 32]
- [solo, key/magic_bean, 32, 32]
- [solo, key/fertile_soil, 32, 32]
- [solo, key/miracle_water, 32, 32]
- [pair, key/ultra_stone, 32, 32]
- [solo, key/toad_doll, 32, 32]
- [solo, key/calculator, 32, 32]
- [solo, key/screwdriver, 32, 32]
- [solo, key/book_cook, 32, 32]
- [solo, key/jade_raven, 32, 32]
- [solo, key/snowman_bucket, 32, 32]
- [solo, key/snowman_scarf, 32, 32]
- [pair, key/key_red, 32, 32]
- [solo, key/key_blue, 32, 32]
- [solo, key/koot_package, 32, 32]
- [solo, key/koot_red_jar, 32, 32]
- [solo, key/book_melody, 32, 32]
- [solo, key/book_lyrics, 32, 32]
- [solo, key/mailbag, 32, 32]
- [solo, key/star_stone, 32, 32]
- [pair, peach/sneaky_parasol, 32, 32]
- [solo, key/key_peach, 32, 32]
- [solo, key/1DC210, 32, 32]
- [solo, key/1DC430, 32, 32]
- [solo, key/1DC650, 32, 32]
- [solo, key/1DC870, 32, 32]
- [solo, key/dojo_card_1, 32, 32]
- [solo, key/dojo_card_2, 32, 32]
- [pair, key/dojo_card_3, 32, 32]
- [solo, key/dojo_card_4, 32, 32]
- [solo, key/dojo_card_5, 32, 32]
- [solo, key/crystal_ball, 32, 32]
- [solo, key/card_gold, 32, 32]
- [solo, key/card_silver, 32, 32]
- [solo, key/koot_book, 32, 32]
- [solo, key/koot_the_tape, 32, 32]
- [pair, key/koot_autograph_luigi, 32, 32]
- [solo, key/koot_empty_wallet, 32, 32]
- [solo, key/koot_autograph_merluvlee, 32, 32]
- [solo, key/koot_shell, 32, 32]
- [solo, key/koot_photo, 32, 32]
- [solo, key/koot_glasses, 32, 32]
- [pair, key/Letter, 32, 32]
- [pair, key/LongLetter, 32, 32]
- [pair, key/TealLetter, 32, 32]
- [pair, key/Postcard, 32, 32]
- [pair, key/EmptyBook, 32, 32]
- [pair, unused/item_08D, 32, 32]
- [pair, unused/item_08E, 32, 32]
- [pair, unused/item_08F, 32, 32]
- [pair, battle/PleaseComeBack, 32, 32]
- [pair, battle/item_139, 32, 32]
- [pair, battle/FrightJar, 32, 32]
- [pair, battle/Mystery, 32, 32]
- [pair, battle/RepelGel, 32, 32]
- [pair, battle/InsecticideHerb, 32, 32]
- [pair, battle/item_13E, 32, 32]
- [pair, battle/item_13F, 32, 32]
- [pair, badge/SpinSmash, 32, 32]
- [pair, badge/Multibounce, 32, 32]
- [pair, badge/PowerPlus, 32, 32]
- [pair, badge/DodgeMaster, 32, 32]
- [pair, badge/PowerBounce, 32, 32]
- [pair, badge/SpikeShield, 32, 32]
- [pair, badge/FirstAttack, 32, 32]
- [pair, badge/HPPlus, 32, 32]
- [pair, badge/QuakeHammer, 32, 32]
- [pair, badge/DoubleDip, 32, 32]
- [pair, badge/PowerQuake, 32, 32]
- [pair, badge/MegaQuake, 32, 32]
- [pair, badge/SleepStomp, 32, 32]
- [pair, badge/SmashCharge, 32, 32]
- [pair, badge/SSmashChg, 32, 32]
- [pair, badge/AutoSmash, 32, 32]
- [pair, badge/FireShield, 32, 32]
- [pair, badge/JumpCharge, 32, 32]
- [pair, badge/SJumpChg, 32, 32]
- [pair, badge/AutoJump, 32, 32]
- [pair, badge/DDownPound, 32, 32]
- [pair, badge/AutoMultibounce, 32, 32]
- [pair, badge/DizzyStomp, 32, 32]
- [pair, badge/HammerThrow, 32, 32]
- [pair, badge/SmashCharge0, 32, 32]
- [pair, badge/PrettyLucky, 32, 32]
- [pair, badge/FeelingFine, 32, 32]
- [pair, badge/AttackFXA, 32, 32]
- [pair, badge/AllorNothing, 32, 32]
- [pair, badge/HPDrain, 32, 32]
- [pair, badge/JumpCharge0, 32, 32]
- [pair, badge/SlowGo, 32, 32]
- [pair, badge/FPPlus, 32, 32]
- [pair, badge/MegaRush, 32, 32]
- [pair, badge/IcePower, 32, 32]
- [pair, badge/DefendPlus, 32, 32]
- [pair, badge/PayOff, 32, 32]
- [pair, badge/MoneyMoney, 32, 32]
- [pair, badge/ChillOut, 32, 32]
- [pair, badge/HappyHeart, 32, 32]
- [pair, badge/ZapTap, 32, 32]
- [pair, badge/Berserker, 32, 32]
- [pair, badge/RightOn, 32, 32]
- [pair, badge/RunawayPay, 32, 32]
- [pair, badge/Refund, 32, 32]
- [pair, badge/FlowerSaver, 32, 32]
- [pair, badge/TripleDip, 32, 32]
- [pair, badge/FlowerFanatic, 32, 32]
- [pair, badge/PowerJump, 32, 32]
- [pair, badge/SuperJump, 32, 32]
- [pair, badge/MegaJump, 32, 32]
- [pair, badge/PowerSmash, 32, 32]
- [pair, badge/SuperSmash, 32, 32]
- [pair, badge/MegaSmash, 32, 32]
- [pair, badge/LuckyDay, 32, 32]
- [pair, badge/MegaHPDrain, 32, 32]
- [pair, badge/BumpAttack, 32, 32]
- [pair, badge/PUpDDown, 32, 32]
- [pair, badge/PDownDUp, 32, 32]
- [pair, badge/HeartFinder, 32, 32]
- [pair, badge/FlowerFinder, 32, 32]
- [pair, badge/DizzyAttack, 32, 32]
- [pair, badge/SpeedySpin, 32, 32]
- [pair, badge/SpinAttack, 32, 32]
- [pair, badge/ISpy, 32, 32]
- [pair, badge/PowerRush, 32, 32]
- [pair, badge/LastStand, 32, 32]
- [pair, badge/CloseCall, 32, 32]
- [pair, badge/CrazyHeart, 32, 32]
- [pair, unused/item_0D5, 32, 32]
- [pair, unused/item_0D6, 32, 32]
- [pair, unused/item_0D7, 32, 32]
- [pair, badge/ShrinkSmash, 32, 32]
- [pair, badge/ShrinkStomp, 32, 32]
- [pair, badge/DDownJump, 32, 32]
- [pair, badge/DamageDodge, 32, 32]
- [pair, badge/EarthquakeJump, 32, 32]
- [pair, badge/HappyFlower, 32, 32]
- [pair, badge/HappyCoin, 32, 32]
- [pair, unused/item_0DF, 32, 32]
- [pair, badge/DeepFocus, 32, 32]
- [pair, badge/SuperFocus, 32, 32]
- [pair, badge/Kaiden, 32, 32]
- [pair, badge/QuickChange, 32, 32]
- [pair, unused/item_0E4, 32, 32]
- [pair, unused/item_0E5, 32, 32]
- [pair, unused/item_0E6, 32, 32]
- [pair, unused/item_0E7, 32, 32]
- [pair, badge/Peekaboo, 32, 32]
- [pair, badge/GroupFocus, 32, 32]
- [pair, badge/AttackFXD, 32, 32]
- [pair, badge/AttackFXB, 32, 32]
- [pair, badge/AttackFXE, 32, 32]
- [pair, badge/AttackFXC, 32, 32]
- [pair, badge/AttackFXF, 32, 32]
- [pair, unused/item_0EF, 32, 32]
- [pair, badge/HealthyHealthy, 32, 32]
- [pair, unused/item_0F1, 32, 32]
- [pair, unused/item_0F2, 32, 32]
- [pair, unused/item_0F3, 32, 32]
- [pair, unused/item_0F4, 32, 32]
- [pair, unused/item_0F5, 32, 32]
- [pair, unused/item_0F6, 32, 32]
- [pair, unused/item_0F7, 32, 32]
- [pair, food/Mushroom, 32, 32]
- [pair, food/SuperShroom, 32, 32]
- [pair, food/UltraShroom, 32, 32]
- [pair, food/LifeShroom, 32, 32]
- [pair, food/DriedShroom, 32, 32]
- [pair, food/TastyTonic, 32, 32]
- [pair, food/SuperSoda, 32, 32]
- [pair, food/BlueBerry, 32, 32]
- [pair, food/RedBerry, 32, 32]
- [pair, food/YellowBerry, 32, 32]
- [pair, food/BubbleBerry, 32, 32]
- [pair, food/Goomnut, 32, 32]
- [pair, food/KoopaLeaf, 32, 32]
- [pair, food/DriedPasta, 32, 32]
- [pair, food/Lime, 32, 32]
- [pair, food/Lemon, 32, 32]
- [pair, food/DriedFruit, 32, 32]
- [pair, food/StrangeLeaf, 32, 32]
- [pair, food/CakeMix, 32, 32]
- [pair, food/Egg, 32, 32]
- [pair, food/Coconut, 32, 32]
- [pair, food/Melon, 32, 32]
- [pair, food/StinkyHerb, 32, 32]
- [pair, food/IcedPotato, 32, 32]
- [pair, food/HoneySyrup, 32, 32]
- [pair, food/MapleSyrup, 32, 32]
- [pair, food/JamminJelly, 32, 32]
- [pair, food/WhackasBump, 32, 32]
- [pair, food/Apple, 32, 32]
- [pair, peach/BakingSalt, 32, 32]
- [pair, peach/BakingSugar, 32, 32]
- [pair, peach/BakingEgg, 32, 32]
- [pair, peach/BakingCream, 32, 32]
- [pair, peach/BakingStrawberry, 32, 32]
- [pair, peach/BakingButter, 32, 32]
- [pair, peach/BakingCleanser, 32, 32]
- [pair, peach/BakingWater, 32, 32]
- [pair, peach/BakingFlour, 32, 32]
- [pair, peach/BakingMilk, 32, 32]
- [pair, unused/item_11F, 32, 32]
- [pair, battle/SleepySheep, 32, 32]
- [pair, battle/XBandage, 32, 32]
- [pair, battle/POWBlock, 32, 32]
- [pair, battle/HustleDrink, 32, 32]
- [pair, battle/StopWatch, 32, 32]
- [pair, battle/DizzyDial, 32, 32]
- [pair, battle/item_136, 32, 32]
- [pair, battle/item_137, 32, 32]
- [pair, battle/FireFlower, 32, 32]
- [pair, battle/SnowmanDoll, 32, 32]
- [pair, battle/ThunderRage, 32, 32]
- [pair, battle/ThunderBolt, 32, 32]
- [pair, battle/ShootingStar, 32, 32]
- [pair, battle/DustyHammer, 32, 32]
- [pair, battle/Pebble, 32, 32]
- [pair, unused/item_127, 32, 32]
- [pair, battle/StoneCap, 32, 32]
- [pair, battle/VoltShroom, 32, 32]
- [pair, battle/PowerStar, 32, 32]
- [pair, battle/Parasol, 32, 32]
- [pair, battle/MagicMirror, 32, 32]
- [pair, unused/item_12D, 32, 32]
- [pair, unused/item_12E, 32, 32]
- [pair, unused/item_12F, 32, 32]
- [solo, anim/hand_0, 24, 24]
- [solo, anim/hand_1, 24, 24]
- [solo, anim/hand_2, 24, 24]
- [solo, anim/hand_3, 24, 24]
- [solo, anim/hand_4, 24, 24]
- [solo, anim/hand_5, 24, 24]
- [solo, anim/hand_6, 24, 24]
- [solo, anim/hand_7, 24, 24]
- [solo, anim/hand_8, 24, 24]
- [solo, anim/hand_9, 24, 24]
- [solo, hud/heart, 24, 24]
- [solo, hud/coin, 24, 24]
- [solo, hud/heart_container, 24, 24]
- [solo, hud/star_point, 24, 24]
- [pair, Hammer1, 32, 32]
- [pair, Hammer2, 32, 32]
- [pair, Hammer3, 32, 32]
- [pair, Boots1, 32, 32]
- [pair, Boots2, 32, 32]
- [pair, Boots3, 32, 32]
- [pair, Items, 32, 32]
- [solo, anim/hp_0, 32, 32]
- [solo, anim/hp_1, 32, 32]
- [solo, anim/hp_2, 32, 32]
- [solo, anim/fp_0, 32, 32]
- [solo, anim/fp_1, 32, 32]
- [solo, anim/fp_2, 32, 32]
- [solo, anim/coin_0, 24, 24]
- [solo, anim/coin_1, 24, 24]
- [solo, anim/coin_2, 24, 24]
- [solo, anim/coin_3, 24, 24]
- [solo, anim/coin_4, 24, 24]
- [solo, anim/coin_5, 24, 24]
- [solo, anim/coin_6, 24, 24]
- [solo, anim/coin_7, 24, 24]
- [solo, anim/coin_8, 24, 24]
- [solo, anim/coin_9, 24, 24]
- [solo, anim/shimmer_0, 8, 8]
- [solo, anim/shimmer_1, 8, 8]
- [solo, anim/shimmer_2, 8, 8]
- [solo, anim/shimmer_3, 8, 8]
- [solo, anim/shimmer_4, 8, 8]
- [solo, anim/shimmer_5, 8, 8]
- [solo, anim/shimmer_6, 8, 8]
- [solo, anim/star_piece_0, 32, 32]
- [solo, anim/star_piece_1, 32, 32]
- [solo, anim/star_piece_2, 32, 32]
- [solo, anim/heart_0, 24, 24]
- [solo, anim/heart_1, 24, 24]
- [solo, anim/heart_piece, 24, 24]
- [solo, anim/sp_0, 24, 24]
- [solo, anim/sp_1, 24, 24]
- [solo, anim/sp_2, 24, 24]
- [solo, anim/sp_3, 24, 24]
- [solo, anim/sp_4, 24, 24]
- [solo, anim/sp_5, 24, 24]
- [solo, anim/sp_6, 24, 24]
- [solo, anim/sp_7, 24, 24]
- [rgba16, unk_1FC550, 24, 24]
- [solo, anim/sp_small_0, 8, 8]
- [solo, anim/sp_small_1, 8, 8]
- [solo, anim/sp_small_2, 8, 8]
- [solo, anim/sp_small_3, 8, 8]
- [solo, anim/sp_small_4, 8, 8]
- [solo, anim/sp_small_5, 8, 8]
- [solo, anim/sp_small_6, 8, 8]
- [solo, anim/sp_small_7, 8, 8]

123
tools/splat_ext/pm_icons.py Normal file
View File

@ -0,0 +1,123 @@
import os
import re
from pathlib import Path
from segtypes.n64.segment import N64Segment
import n64img.image
from util.color import unpack_color
from common import iter_in_groups
from util import options
import yaml as yaml_loader
import xml.etree.ElementTree as ET
script_dir = Path(os.path.dirname(os.path.realpath(__file__)))
def indent(elem, level=0):
i = "\n" + level*" "
if len(elem):
if not elem.text or not elem.text.strip():
elem.text = i + " "
if not elem.tail or not elem.tail.strip():
elem.tail = i
for elem in elem:
indent(elem, level+1)
if not elem.tail or not elem.tail.strip():
elem.tail = i
else:
if level and (not elem.tail or not elem.tail.strip()):
elem.tail = i
def pretty_print_xml(tree : ET.ElementTree, path : Path):
root = tree.getroot()
indent(root)
xml_str = ET.tostring(root, encoding="unicode")
xml_str = re.sub(" />", "/>", xml_str)
with open(path, "w") as f:
f.write(xml_str)
def parse_palette(data):
palette = []
for a, b in iter_in_groups(data, 2):
palette.append(unpack_color([a, b]))
return palette
class N64SegPm_icons(N64Segment):
def split(self, rom_bytes):
self.out_dir = options.opts.asset_path / "icon"
with open(script_dir / "icon.yaml") as f:
self.icons = yaml_loader.load(f.read(), Loader=yaml_loader.SafeLoader)
data = rom_bytes[self.rom_start: self.rom_end]
pos = 0
self.files = []
def write_img(name, img):
out_file = self.out_dir / (name + ".png")
os.makedirs(os.path.dirname(out_file), exist_ok=True)
img.write(out_file)
self.files.append(out_file)
IconList = ET.Element("Icons")
for (_, icon) in enumerate(self.icons):
# read yaml entry
fmt = icon[0]
name = icon[1]
w = int(icon[2])
h = int(icon[3])
if fmt == "solo" or fmt == "pair":
img_size = w * h // 2
img_bytes = data[pos : pos + img_size]
pos += img_size
pal_bytes = data[pos : pos + 32]
pos += 32
img = n64img.image.CI4(data=img_bytes, width=w, height=h)
img.palette = parse_palette(pal_bytes)
write_img(name, img)
if fmt == "pair":
pal_bytes = data[pos : pos + 32]
pos += 32
img.palette = parse_palette(pal_bytes)
write_img(name + ".disabled", img)
elif fmt == "rgba16":
img_size = w * h * 2
img_bytes = data[pos : pos + img_size]
pos += img_size
img = n64img.image.RGBA16(data=img_bytes, width=w, height=h)
write_img(name, img)
ET.SubElement(
IconList,
"Icon",
{
"type": f"{fmt}",
"name": f"{name}",
},
)
xml = ET.ElementTree(IconList)
pretty_print_xml(xml, self.out_dir / "Icons.xml")
def get_linker_entries(self):
from segtypes.linker_entry import LinkerEntry
return [
LinkerEntry(
self,
[options.opts.asset_path / "icon" / "Icons.xml"],
options.opts.asset_path / "icons.bin",
self.get_linker_section(),
)
]

View File

@ -738,8 +738,8 @@ glabel msg_copy_to_print_buffer
/* BA0C8 801231E8 26730001 */ addiu $s3, $s3, 0x1
/* BA0CC 801231EC 3C068016 */ lui $a2, %hi(D_80159B50)
/* BA0D0 801231F0 24C6BED0 */ addiu $a2, $a2, %lo(D_80159B50)
/* BA0D4 801231F4 3C110021 */ lui $s1, %hi(icon_present_ROM_START)
/* BA0D8 801231F8 26315390 */ addiu $s1, $s1, %lo(icon_present_ROM_START)
/* BA0D4 801231F4 3C110021 */ lui $s1, %hi(icon_ROM_START)
/* BA0D8 801231F8 26315390 */ addiu $s1, $s1, %lo(icon_ROM_START)
/* BA0DC 801231FC 3C018015 */ lui $at, %hi(D_8015131C)
/* BA0E0 80123200 AC26FAAC */ sw $a2, %lo(D_8015131C)($at)
/* BA0E4 80123204 00108200 */ sll $s0, $s0, 8

View File

@ -587,8 +587,7 @@ segments:
- [0x1b59a0, bin]
- [0x215390]
- [0x215390, bin]
- [0x215390, pm_icons, icon]
- name: logos
type: code

View File

@ -573,7 +573,6 @@ D_802F39D0 = 0x802f39d0;
charset_postcard_png = 0x00054fa8;
charset_postcard_pal + 5 = 0x00056e70;
D_80159B50 = 0x8015bed0;
icon_present_ROM_START = 0x00215390;
gOverrideFlags = 0x80099228;
D_801565A6 = 0x80158926;
gHudElementCacheTableRaster = 0x8014fa58;

View File

@ -1213,7 +1213,6 @@ ui_msg_background_png = 0x802ecd50;
create_standard_popup_menu = 0x800f3220;
hide_popup_menu = 0x800ef790;
decrement_status_bar_disabled = 0x800e7f10;
icon_present_ROM_START = 0x00215390;
MapTextureMemory = 0x8028E000;
D_8013A520 = 0x8013a520;
D_19F80 = 0x00019f80;

View File

@ -482,7 +482,7 @@ segments:
start: 0x1749F0
vram: 0x8023E000
- [0x1D4720, bin]
- [0x1D4720, pm_icons, icon]
- name: logos
type: bin
@ -3230,7 +3230,7 @@ segments:
type: pm_sprites
name: sprites
- [ 0x1C7F208, bin ]
- [0x1C7F208, bin ]
- start: 0x1D40000
type: bin

View File

@ -450,10 +450,8 @@ segments:
- [0x17A160, bin]
- [0x1DA1E0, ci4, icon/present, 32, 32]
- [0x1DA3E0, palette, icon/present]
- [0x1DA400, bin]
- [0x1DA1E0, pm_icons, icon]
- [0x20C080, bin]
- [0x227080, ci8, title/bg_1, 264, 162]
- [0x231790, palette, title/bg_1]

View File

@ -209,7 +209,7 @@ gItemTable = 0x80083C80;
gItemHudScripts = 0x80086A20;
gItemIconRasterOffsets = 0x8008A778;
gItemIconPaletteOffsets = 0x8008ACEC;
D_8008EEC0 = 0x8008B260;
PartnerIDFromMenuIndex = 0x8008B260;
gPartnerPopupProperties = 0x8008B2C0;
gMoveTable = 0x8008B400;
gAreas = 0x8008F890;

File diff suppressed because it is too large Load Diff

View File

@ -2362,8 +2362,8 @@ IES_ITEM_137 = 0x8008DDB4; // rom:0x691B4
gItemEntityScripts = 0x8008DDD4; // rom:0x691D4
gItemIconRasterOffsets = 0x8008E3D8; // rom:0x697D8
gItemIconPaletteOffsets = 0x8008E94C; // rom:0x69D4C
D_8008EEC0 = 0x8008EEC0; // rom:0x6A2C0
D_8008EEF0 = 0x8008EEF0; // rom:0x6A2F0
PartnerIDFromMenuIndex = 0x8008EEC0; // rom:0x6A2C0
MenuIndexFromPartnerID = 0x8008EEF0; // rom:0x6A2F0
gPartnerPopupProperties = 0x8008EF20; // rom:0x6A320
pad8 = 0x8008EFF0; // rom:0x6A3F0
gPartnerIconHudScripts = 0x8008EFF8; // rom:0x6A3F8