mirror of
https://github.com/zeldaret/oot.git
synced 2025-07-13 11:24:40 +00:00
Merge branch 'master' into doc_pause_menu
This commit is contained in:
commit
f752add633
81 changed files with 1912 additions and 1689 deletions
|
@ -31,8 +31,8 @@ u32 gUpgradeMasks[UPG_MAX] = {
|
|||
0x00000E00, // UPG_SCALE
|
||||
0x00003000, // UPG_WALLET
|
||||
0x0001C000, // UPG_BULLET_BAG
|
||||
0x000E0000, // UPG_STICKS
|
||||
0x00700000, // UPG_NUTS
|
||||
0x000E0000, // UPG_DEKU_STICKS
|
||||
0x00700000, // UPG_DEKU_NUTS
|
||||
};
|
||||
u32 gUpgradeNegMasks[UPG_MAX] = {
|
||||
~0x00000007, // UPG_QUIVER
|
||||
|
@ -41,8 +41,8 @@ u32 gUpgradeNegMasks[UPG_MAX] = {
|
|||
~0x00000E00, // UPG_SCALE
|
||||
~0x00003000, // UPG_WALLET
|
||||
~0x0001C000, // UPG_BULLET_BAG
|
||||
~0x000E0000, // UPG_STICKS
|
||||
~0x00700000, // UPG_NUTS
|
||||
~0x000E0000, // UPG_DEKU_STICKS
|
||||
~0x00700000, // UPG_DEKU_NUTS
|
||||
};
|
||||
|
||||
u8 gEquipShifts[EQUIP_TYPE_MAX] = {
|
||||
|
@ -59,8 +59,8 @@ u8 gUpgradeShifts[UPG_MAX] = {
|
|||
9, // UPG_SCALE
|
||||
12, // UPG_WALLET
|
||||
14, // UPG_BULLET_BAG
|
||||
17, // UPG_STICKS
|
||||
20, // UPG_NUTS
|
||||
17, // UPG_DEKU_STICKS
|
||||
20, // UPG_DEKU_NUTS
|
||||
};
|
||||
|
||||
u16 gUpgradeCapacities[UPG_MAX][4] = {
|
||||
|
@ -70,8 +70,8 @@ u16 gUpgradeCapacities[UPG_MAX][4] = {
|
|||
{ 0, 0, 0, 0 }, // UPG_SCALE (unused)
|
||||
{ 99, 200, 500, 500 }, // UPG_WALLET
|
||||
{ 0, 30, 40, 50 }, // UPG_BULLET_BAG
|
||||
{ 0, 10, 20, 30 }, // UPG_STICKS
|
||||
{ 0, 20, 30, 40 }, // UPG_NUTS
|
||||
{ 0, 10, 20, 30 }, // UPG_DEKU_STICKS
|
||||
{ 0, 20, 30, 40 }, // UPG_DEKU_NUTS
|
||||
};
|
||||
|
||||
u32 gGsFlagsMasks[] = { 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000 };
|
||||
|
@ -212,62 +212,62 @@ void* gItemIcons[] = {
|
|||
|
||||
// Used to map item IDs to inventory slots
|
||||
u8 gItemSlots[] = {
|
||||
SLOT_STICK, // ITEM_STICK
|
||||
SLOT_NUT, // ITEM_NUT
|
||||
SLOT_BOMB, // ITEM_BOMB
|
||||
SLOT_BOW, // ITEM_BOW
|
||||
SLOT_ARROW_FIRE, // ITEM_ARROW_FIRE
|
||||
SLOT_DINS_FIRE, // ITEM_DINS_FIRE
|
||||
SLOT_SLINGSHOT, // ITEM_SLINGSHOT
|
||||
SLOT_OCARINA, // ITEM_OCARINA_FAIRY
|
||||
SLOT_OCARINA, // ITEM_OCARINA_TIME
|
||||
SLOT_BOMBCHU, // ITEM_BOMBCHU
|
||||
SLOT_HOOKSHOT, // ITEM_HOOKSHOT
|
||||
SLOT_HOOKSHOT, // ITEM_LONGSHOT
|
||||
SLOT_ARROW_ICE, // ITEM_ARROW_ICE
|
||||
SLOT_FARORES_WIND, // ITEM_FARORES_WIND
|
||||
SLOT_BOOMERANG, // ITEM_BOOMERANG
|
||||
SLOT_LENS, // ITEM_LENS
|
||||
SLOT_BEAN, // ITEM_BEAN
|
||||
SLOT_HAMMER, // ITEM_HAMMER
|
||||
SLOT_ARROW_LIGHT, // ITEM_ARROW_LIGHT
|
||||
SLOT_NAYRUS_LOVE, // ITEM_NAYRUS_LOVE
|
||||
SLOT_BOTTLE_1, // ITEM_BOTTLE
|
||||
SLOT_BOTTLE_1, // ITEM_POTION_RED
|
||||
SLOT_BOTTLE_1, // ITEM_POTION_GREEN
|
||||
SLOT_BOTTLE_1, // ITEM_POTION_BLUE
|
||||
SLOT_BOTTLE_1, // ITEM_FAIRY
|
||||
SLOT_BOTTLE_1, // ITEM_FISH
|
||||
SLOT_BOTTLE_1, // ITEM_MILK_BOTTLE
|
||||
SLOT_BOTTLE_1, // ITEM_LETTER_RUTO
|
||||
SLOT_BOTTLE_1, // ITEM_BLUE_FIRE
|
||||
SLOT_BOTTLE_1, // ITEM_BUG
|
||||
SLOT_BOTTLE_1, // ITEM_BIG_POE
|
||||
SLOT_BOTTLE_1, // ITEM_MILK_HALF
|
||||
SLOT_BOTTLE_1, // ITEM_POE
|
||||
SLOT_TRADE_CHILD, // ITEM_WEIRD_EGG
|
||||
SLOT_TRADE_CHILD, // ITEM_CHICKEN
|
||||
SLOT_TRADE_CHILD, // ITEM_LETTER_ZELDA
|
||||
SLOT_TRADE_CHILD, // ITEM_MASK_KEATON
|
||||
SLOT_TRADE_CHILD, // ITEM_MASK_SKULL
|
||||
SLOT_TRADE_CHILD, // ITEM_MASK_SPOOKY
|
||||
SLOT_TRADE_CHILD, // ITEM_MASK_BUNNY
|
||||
SLOT_TRADE_CHILD, // ITEM_MASK_GORON
|
||||
SLOT_TRADE_CHILD, // ITEM_MASK_ZORA
|
||||
SLOT_TRADE_CHILD, // ITEM_MASK_GERUDO
|
||||
SLOT_TRADE_CHILD, // ITEM_MASK_TRUTH
|
||||
SLOT_TRADE_CHILD, // ITEM_SOLD_OUT
|
||||
SLOT_TRADE_ADULT, // ITEM_POCKET_EGG
|
||||
SLOT_TRADE_ADULT, // ITEM_POCKET_CUCCO
|
||||
SLOT_TRADE_ADULT, // ITEM_COJIRO
|
||||
SLOT_TRADE_ADULT, // ITEM_ODD_MUSHROOM
|
||||
SLOT_TRADE_ADULT, // ITEM_ODD_POTION
|
||||
SLOT_TRADE_ADULT, // ITEM_SAW
|
||||
SLOT_TRADE_ADULT, // ITEM_SWORD_BROKEN
|
||||
SLOT_TRADE_ADULT, // ITEM_PRESCRIPTION
|
||||
SLOT_TRADE_ADULT, // ITEM_FROG
|
||||
SLOT_TRADE_ADULT, // ITEM_EYEDROPS
|
||||
SLOT_TRADE_ADULT, // ITEM_CLAIM_CHECK
|
||||
SLOT_DEKU_STICK, // ITEM_DEKU_STICK
|
||||
SLOT_DEKU_NUT, // ITEM_DEKU_NUT
|
||||
SLOT_BOMB, // ITEM_BOMB
|
||||
SLOT_BOW, // ITEM_BOW
|
||||
SLOT_ARROW_FIRE, // ITEM_ARROW_FIRE
|
||||
SLOT_DINS_FIRE, // ITEM_DINS_FIRE
|
||||
SLOT_SLINGSHOT, // ITEM_SLINGSHOT
|
||||
SLOT_OCARINA, // ITEM_OCARINA_FAIRY
|
||||
SLOT_OCARINA, // ITEM_OCARINA_OF_TIME
|
||||
SLOT_BOMBCHU, // ITEM_BOMBCHU
|
||||
SLOT_HOOKSHOT, // ITEM_HOOKSHOT
|
||||
SLOT_HOOKSHOT, // ITEM_LONGSHOT
|
||||
SLOT_ARROW_ICE, // ITEM_ARROW_ICE
|
||||
SLOT_FARORES_WIND, // ITEM_FARORES_WIND
|
||||
SLOT_BOOMERANG, // ITEM_BOOMERANG
|
||||
SLOT_LENS_OF_TRUTH, // ITEM_LENS_OF_TRUTH
|
||||
SLOT_MAGIC_BEAN, // ITEM_MAGIC_BEAN
|
||||
SLOT_HAMMER, // ITEM_HAMMER
|
||||
SLOT_ARROW_LIGHT, // ITEM_ARROW_LIGHT
|
||||
SLOT_NAYRUS_LOVE, // ITEM_NAYRUS_LOVE
|
||||
SLOT_BOTTLE_1, // ITEM_BOTTLE_EMPTY
|
||||
SLOT_BOTTLE_1, // ITEM_BOTTLE_POTION_RED
|
||||
SLOT_BOTTLE_1, // ITEM_BOTTLE_POTION_GREEN
|
||||
SLOT_BOTTLE_1, // ITEM_BOTTLE_POTION_BLUE
|
||||
SLOT_BOTTLE_1, // ITEM_BOTTLE_FAIRY
|
||||
SLOT_BOTTLE_1, // ITEM_BOTTLE_FISH
|
||||
SLOT_BOTTLE_1, // ITEM_BOTTLE_MILK_FULL
|
||||
SLOT_BOTTLE_1, // ITEM_BOTTLE_RUTOS_LETTER
|
||||
SLOT_BOTTLE_1, // ITEM_BOTTLE_BLUE_FIRE
|
||||
SLOT_BOTTLE_1, // ITEM_BOTTLE_BUG
|
||||
SLOT_BOTTLE_1, // ITEM_BOTTLE_BIG_POE
|
||||
SLOT_BOTTLE_1, // ITEM_BOTTLE_MILK_HALF
|
||||
SLOT_BOTTLE_1, // ITEM_BOTTLE_POE
|
||||
SLOT_TRADE_CHILD, // ITEM_WEIRD_EGG
|
||||
SLOT_TRADE_CHILD, // ITEM_CHICKEN
|
||||
SLOT_TRADE_CHILD, // ITEM_ZELDAS_LETTER
|
||||
SLOT_TRADE_CHILD, // ITEM_MASK_KEATON
|
||||
SLOT_TRADE_CHILD, // ITEM_MASK_SKULL
|
||||
SLOT_TRADE_CHILD, // ITEM_MASK_SPOOKY
|
||||
SLOT_TRADE_CHILD, // ITEM_MASK_BUNNY_HOOD
|
||||
SLOT_TRADE_CHILD, // ITEM_MASK_GORON
|
||||
SLOT_TRADE_CHILD, // ITEM_MASK_ZORA
|
||||
SLOT_TRADE_CHILD, // ITEM_MASK_GERUDO
|
||||
SLOT_TRADE_CHILD, // ITEM_MASK_TRUTH
|
||||
SLOT_TRADE_CHILD, // ITEM_SOLD_OUT
|
||||
SLOT_TRADE_ADULT, // ITEM_POCKET_EGG
|
||||
SLOT_TRADE_ADULT, // ITEM_POCKET_CUCCO
|
||||
SLOT_TRADE_ADULT, // ITEM_COJIRO
|
||||
SLOT_TRADE_ADULT, // ITEM_ODD_MUSHROOM
|
||||
SLOT_TRADE_ADULT, // ITEM_ODD_POTION
|
||||
SLOT_TRADE_ADULT, // ITEM_POACHERS_SAW
|
||||
SLOT_TRADE_ADULT, // ITEM_BROKEN_GORONS_SWORD
|
||||
SLOT_TRADE_ADULT, // ITEM_PRESCRIPTION
|
||||
SLOT_TRADE_ADULT, // ITEM_EYEBALL_FROG
|
||||
SLOT_TRADE_ADULT, // ITEM_EYE_DROPS
|
||||
SLOT_TRADE_ADULT, // ITEM_CLAIM_CHECK
|
||||
};
|
||||
|
||||
void Inventory_ChangeEquipment(s16 equipment, u16 value) {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
#include "ultra64.h"
|
||||
#include "global.h"
|
||||
|
||||
#define DBCAM_CONTROLLER_PORT 2
|
||||
|
@ -1507,15 +1506,15 @@ static s32 sAllocSize;
|
|||
|
||||
s32 DbCamera_GetFirstAvailableLetter(void) {
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(sLetters); i++) {
|
||||
switch (sLetters[i]) {
|
||||
case 'O':
|
||||
break;
|
||||
default:
|
||||
return 'A' + i;
|
||||
return MEMPAK_INDEX_TO_LETTER(i);
|
||||
}
|
||||
}
|
||||
|
||||
return '?';
|
||||
}
|
||||
|
||||
|
@ -1653,7 +1652,7 @@ s32 DbCamera_SaveCallback(char* c) {
|
|||
freeSize = Mempak_GetFreeBytes(DBCAM_CONTROLLER_PORT);
|
||||
|
||||
if ((u32)sAllocSize < (freeSize + ret)) {
|
||||
if (!Mempak_Alloc(DBCAM_CONTROLLER_PORT, c, sAllocSize)) {
|
||||
if (!Mempak_CreateFile(DBCAM_CONTROLLER_PORT, c, sAllocSize)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -1867,7 +1866,7 @@ s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) {
|
|||
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||
dbCamera->sub.demoCtrlToggleSwitch ^= 1;
|
||||
}
|
||||
D_8012CEE0[41][9] = sCurFileIdx + 'A';
|
||||
D_8012CEE0[41][9] = MEMPAK_INDEX_TO_LETTER(sCurFileIdx);
|
||||
func_8006376C(0xA, 7, 5, D_8012CEE0[41]);
|
||||
func_8006376C(0x10, 7, 5, D_8012CF60[dbCamera->sub.demoCtrlActionIdx]);
|
||||
func_8006376C(0x14, 7, 5, D_8012CF88[0]);
|
||||
|
@ -1891,7 +1890,7 @@ s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) {
|
|||
dbCamera->sub.demoCtrlMenu++;
|
||||
} else {
|
||||
dbCamera->sub.demoCtrlToggleSwitch ^= 1;
|
||||
D_8012CF84[9] = sCurFileIdx + 'A';
|
||||
D_8012CF84[9] = MEMPAK_INDEX_TO_LETTER(sCurFileIdx);
|
||||
func_8006376C(0xD, 7, 5, D_8012CF88[-1]); // todo: find something better
|
||||
func_8006376C(0x12, 7, 5, D_8012CF80);
|
||||
func_8006376C(0xD, 9, dbCamera->sub.demoCtrlToggleSwitch ? 1 : 6, "PRESS B BUTTON");
|
||||
|
@ -1909,7 +1908,7 @@ s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) {
|
|||
case DEMO_CTRL_MENU(ACTION_SAVE, MENU_CALLBACK):
|
||||
case DEMO_CTRL_MENU(ACTION_LOAD, MENU_CALLBACK):
|
||||
case DEMO_CTRL_MENU(ACTION_CLEAR, MENU_CALLBACK): {
|
||||
D_8012CEE0[41][9] = sCurFileIdx + 'A';
|
||||
D_8012CEE0[41][9] = MEMPAK_INDEX_TO_LETTER(sCurFileIdx);
|
||||
func_8006376C(0xC, 7, 5, D_8012CEE0[41]);
|
||||
func_8006376C(0x12, 7, 5, D_8012CF60[dbCamera->sub.demoCtrlActionIdx]);
|
||||
func_8006376C(0x16, 7, 5, D_8012CF9C[0]);
|
||||
|
@ -1927,7 +1926,7 @@ s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) {
|
|||
case DEMO_CTRL_MENU(ACTION_LOAD, MENU_SUCCESS):
|
||||
case DEMO_CTRL_MENU(ACTION_CLEAR, MENU_SUCCESS): {
|
||||
dbCamera->sub.demoCtrlToggleSwitch ^= 1;
|
||||
D_8012CEE0[41][9] = sCurFileIdx + 'A';
|
||||
D_8012CEE0[41][9] = MEMPAK_INDEX_TO_LETTER(sCurFileIdx);
|
||||
func_8006376C(0xD, 7, 5, D_8012CEE0[41]);
|
||||
func_8006376C(0x13, 7, 5, D_8012CF60[dbCamera->sub.demoCtrlMenu / 100]);
|
||||
func_8006376C(0x17, 7, 5, D_8012CFA4);
|
||||
|
@ -1950,7 +1949,7 @@ s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) {
|
|||
case DEMO_CTRL_MENU(ACTION_LOAD, MENU_ERROR):
|
||||
case DEMO_CTRL_MENU(ACTION_CLEAR, MENU_ERROR): {
|
||||
dbCamera->sub.demoCtrlToggleSwitch ^= 1;
|
||||
D_8012CEE0[41][9] = sCurFileIdx + 'A';
|
||||
D_8012CEE0[41][9] = MEMPAK_INDEX_TO_LETTER(sCurFileIdx);
|
||||
func_8006376C(0xD, 7, 5, D_8012CEE0[(dbCamera->sub.demoCtrlMenu / 100) + 32]);
|
||||
func_8006376C(0x11, 7, 5, D_8012CFAC);
|
||||
func_8006376C(0x17, 7, 5, D_8012CFA4);
|
||||
|
@ -1971,11 +1970,12 @@ s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) {
|
|||
|
||||
default: {
|
||||
if (Mempak_Init(DBCAM_CONTROLLER_PORT)) {
|
||||
sMempakFiles = Mempak_FindFile(DBCAM_CONTROLLER_PORT, 'A', 'E');
|
||||
sMempakFiles = Mempak_FindFiles(DBCAM_CONTROLLER_PORT, 'A', 'E');
|
||||
dbCamera->sub.demoCtrlMenu = DEMO_CTRL_MENU(ACTION_E, MENU_CALLBACK);
|
||||
DbCamera_CalcMempakAllocSize();
|
||||
if ((1 << sCurFileIdx) & sMempakFiles) {
|
||||
sMempakFilesize = Mempak_GetFileSize(DBCAM_CONTROLLER_PORT, sCurFileIdx + 'A');
|
||||
sMempakFilesize =
|
||||
Mempak_GetFileSize(DBCAM_CONTROLLER_PORT, MEMPAK_INDEX_TO_LETTER(sCurFileIdx));
|
||||
dbCamera->sub.demoCtrlActionIdx = ACTION_LOAD;
|
||||
} else {
|
||||
sMempakFilesize = 0;
|
||||
|
@ -1984,7 +1984,7 @@ s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) {
|
|||
block_1:
|
||||
idx2 = 1;
|
||||
for (i = 0; i < 5; i++) {
|
||||
sp74[i * 2 + 1] = (sMempakFiles & idx2) ? i + 'A' : '?';
|
||||
sp74[i * 2 + 1] = (sMempakFiles & idx2) ? MEMPAK_INDEX_TO_LETTER(i) : '?';
|
||||
sp74[i * 2 + 0] = '-';
|
||||
|
||||
idx2 <<= 1;
|
||||
|
@ -2002,7 +2002,8 @@ s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) {
|
|||
}
|
||||
|
||||
if ((1 << sCurFileIdx) & sMempakFiles) {
|
||||
sMempakFilesize = Mempak_GetFileSize(DBCAM_CONTROLLER_PORT, sCurFileIdx + 'A');
|
||||
sMempakFilesize =
|
||||
Mempak_GetFileSize(DBCAM_CONTROLLER_PORT, MEMPAK_INDEX_TO_LETTER(sCurFileIdx));
|
||||
dbCamera->sub.demoCtrlActionIdx = ACTION_LOAD;
|
||||
} else {
|
||||
sMempakFilesize = 0;
|
||||
|
@ -2019,7 +2020,8 @@ s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) {
|
|||
}
|
||||
|
||||
if ((1 << sCurFileIdx) & sMempakFiles) {
|
||||
sMempakFilesize = Mempak_GetFileSize(DBCAM_CONTROLLER_PORT, sCurFileIdx + 'A');
|
||||
sMempakFilesize =
|
||||
Mempak_GetFileSize(DBCAM_CONTROLLER_PORT, MEMPAK_INDEX_TO_LETTER(sCurFileIdx));
|
||||
dbCamera->sub.demoCtrlActionIdx = ACTION_LOAD;
|
||||
} else {
|
||||
sMempakFilesize = 0;
|
||||
|
|
|
@ -1,184 +1,271 @@
|
|||
/**
|
||||
* @file mempak.c
|
||||
*
|
||||
* This file implements an interface for a controller memory pak filesystem (pfs), with operations to create, delete,
|
||||
* read, write and check the size of files, as well as obtain a listing of which files currently exist.
|
||||
*
|
||||
* Each file is assigned an uppercase ASCII letter as an identifier, the game name for each is marked as
|
||||
* 'ZELDA DEMO TOOL', encoded according to the N64 Font Code described in section 26.3 of the N64 Programming Manual.
|
||||
*/
|
||||
#include "global.h"
|
||||
|
||||
#define MEMPAK_MAX_FILES 11
|
||||
|
||||
OSPfs sMempakPfsHandle;
|
||||
s32 sMempakFreeBytes;
|
||||
s32 sMempakFiles[10];
|
||||
s32 sMempakFiles[MEMPAK_MAX_FILES];
|
||||
|
||||
u16 sMempakCompanyCode = 1;
|
||||
u32 sMempakGameCode = 1;
|
||||
|
||||
// "ZELDA DEMO TOOL "
|
||||
u8 sMempakGameName[0x10] = { 0x33, 0x1E, 0x25, 0x1D, 0x1A, 0x0F, 0x1D, 0x1E,
|
||||
0x26, 0x28, 0x0F, 0x2D, 0x28, 0x28, 0x25, 0x0F };
|
||||
u8 sMempakExtName[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
// NCH is a heavily abbreviated "N64 font code CHaracter"
|
||||
// Conversion from A-Z to N64 Font Code
|
||||
#define NCH(c) ((c)-0x27)
|
||||
// Conversion from spaces to N64 Font Code
|
||||
#define NCH_SPC (0x0F)
|
||||
|
||||
s32 Mempak_Init(s32 controllerNb) {
|
||||
OSMesgQueue* mq;
|
||||
u8 sMempakGameName[PFS_FILE_NAME_LEN] = {
|
||||
NCH('Z'), NCH('E'), NCH('L'), NCH('D'), NCH('A'), NCH_SPC, NCH('D'), NCH('E'),
|
||||
NCH('M'), NCH('O'), NCH_SPC, NCH('T'), NCH('O'), NCH('O'), NCH('L'), NCH_SPC,
|
||||
};
|
||||
|
||||
u8 sMempakExtName[PFS_FILE_EXT_LEN] = { 0 };
|
||||
|
||||
/**
|
||||
* Initializes the memory pak filesystem for a memory pak in the controller plugged into the specified port. Subsequent
|
||||
* memory pak operations will use the same controller port.
|
||||
*
|
||||
* @return true if the operation completed successfully, false otherwise
|
||||
*/
|
||||
s32 Mempak_Init(s32 controllerNum) {
|
||||
OSMesgQueue* serialEventQueue;
|
||||
s32 pad;
|
||||
s32 ret = false;
|
||||
|
||||
mq = PadMgr_AcquireSerialEventQueue(&gPadMgr);
|
||||
serialEventQueue = PadMgr_AcquireSerialEventQueue(&gPadMgr);
|
||||
|
||||
if (!osPfsInitPak(mq, &sMempakPfsHandle, controllerNb)) {
|
||||
if (osPfsInitPak(serialEventQueue, &sMempakPfsHandle, controllerNum) == 0) {
|
||||
ret = true;
|
||||
}
|
||||
|
||||
osPfsFreeBlocks(&sMempakPfsHandle, &sMempakFreeBytes);
|
||||
PadMgr_ReleaseSerialEventQueue(&gPadMgr, mq);
|
||||
|
||||
PadMgr_ReleaseSerialEventQueue(&gPadMgr, serialEventQueue);
|
||||
return ret;
|
||||
}
|
||||
|
||||
s32 Mempak_GetFreeBytes(s32 controllerNb) {
|
||||
s32 Mempak_GetFreeBytes(s32 controllerNum) {
|
||||
return sMempakFreeBytes;
|
||||
}
|
||||
|
||||
s32 Mempak_FindFile(s32 controllerNb, char start, char end) {
|
||||
OSMesgQueue* mq;
|
||||
/**
|
||||
* Checks if the files identified by letters between `start` and `end` (inclusive) exist on the memory pak.
|
||||
*
|
||||
* This must be called before performing any individual file operations.
|
||||
*
|
||||
* @param controllerNum Unused, the controller used is that which was last passed to `Mempak_Init`
|
||||
* @param start Start file letter
|
||||
* @param end End file letter (inclusive)
|
||||
* @return a bitfield where set bits indicate that the file exists
|
||||
*/
|
||||
s32 Mempak_FindFiles(s32 controllerNum, char start, char end) {
|
||||
OSMesgQueue* serialEventQueue;
|
||||
s32 error;
|
||||
char idx;
|
||||
char letter;
|
||||
u32 bit = 1;
|
||||
s32 flag = 0;
|
||||
s32 bits = 0;
|
||||
|
||||
mq = PadMgr_AcquireSerialEventQueue(&gPadMgr);
|
||||
serialEventQueue = PadMgr_AcquireSerialEventQueue(&gPadMgr);
|
||||
|
||||
for (idx = start; idx <= end; idx++) {
|
||||
sMempakExtName[0] = idx - 0x27;
|
||||
for (letter = start; letter <= end; letter++) {
|
||||
sMempakExtName[0] = NCH(letter);
|
||||
|
||||
error = osPfsFindFile(&sMempakPfsHandle, sMempakCompanyCode, sMempakGameCode, sMempakGameName, sMempakExtName,
|
||||
&sMempakFiles[idx - 'A']);
|
||||
&sMempakFiles[MEMPAK_LETTER_TO_INDEX(letter)]);
|
||||
if (error == 0) {
|
||||
flag |= bit;
|
||||
bits |= bit;
|
||||
} else {
|
||||
sMempakFiles[idx - 'A'] = -1;
|
||||
sMempakFiles[MEMPAK_LETTER_TO_INDEX(letter)] = -1;
|
||||
}
|
||||
|
||||
bit <<= 1;
|
||||
osSyncPrintf("mempak: find '%c' (%d)\n", idx, error);
|
||||
osSyncPrintf("mempak: find '%c' (%d)\n", letter, error);
|
||||
}
|
||||
|
||||
PadMgr_ReleaseSerialEventQueue(&gPadMgr, mq);
|
||||
osSyncPrintf("mempak: find '%c' - '%c' %02x\n", start, end, flag);
|
||||
|
||||
return flag;
|
||||
PadMgr_ReleaseSerialEventQueue(&gPadMgr, serialEventQueue);
|
||||
osSyncPrintf("mempak: find '%c' - '%c' %02x\n", start, end, bits);
|
||||
return bits;
|
||||
}
|
||||
|
||||
s32 Mempak_Write(s32 controllerNb, char idx, void* buffer, s32 offset, s32 size) {
|
||||
OSMesgQueue* mq;
|
||||
/**
|
||||
* Writes data to the file identified with `letter`.
|
||||
*
|
||||
* @param controllerNum Unused, the controller used is that which was last passed to `Mempak_Init`
|
||||
* @param letter Memory pak file letter, in the range 'A' to ('A' + MEMPAK_MAX_FILES)
|
||||
* @param buffer Buffer containing data to write
|
||||
* @param offset Offset into the file to write to
|
||||
* @param size Size in bytes
|
||||
* @return true if the operation completed successfully, false otherwise
|
||||
*/
|
||||
s32 Mempak_Write(s32 controllerNum, char letter, void* buffer, s32 offset, s32 size) {
|
||||
OSMesgQueue* serialEventQueue;
|
||||
s32 error;
|
||||
s32 ret = false;
|
||||
s32 pad;
|
||||
|
||||
mq = PadMgr_AcquireSerialEventQueue(&gPadMgr);
|
||||
serialEventQueue = PadMgr_AcquireSerialEventQueue(&gPadMgr);
|
||||
|
||||
if (size < sMempakFreeBytes) {
|
||||
error = osPfsReadWriteFile(&sMempakPfsHandle, sMempakFiles[idx - 'A'], 1, offset, size, buffer);
|
||||
error = osPfsReadWriteFile(&sMempakPfsHandle, sMempakFiles[MEMPAK_LETTER_TO_INDEX(letter)], PFS_WRITE, offset,
|
||||
size, buffer);
|
||||
if (error == 0) {
|
||||
ret = true;
|
||||
}
|
||||
osSyncPrintf("mempak: write %d byte '%c' (%d)->%d\n", size, idx, sMempakFiles[idx - 'A'], error);
|
||||
osSyncPrintf("mempak: write %d byte '%c' (%d)->%d\n", size, letter,
|
||||
sMempakFiles[MEMPAK_LETTER_TO_INDEX(letter)], error);
|
||||
}
|
||||
PadMgr_ReleaseSerialEventQueue(&gPadMgr, mq);
|
||||
|
||||
PadMgr_ReleaseSerialEventQueue(&gPadMgr, serialEventQueue);
|
||||
return ret;
|
||||
}
|
||||
|
||||
s32 Mempak_Read(s32 controllerNb, char idx, void* buffer, s32 offset, s32 size) {
|
||||
OSMesgQueue* mq;
|
||||
/**
|
||||
* Reads data from the file identified with `letter`.
|
||||
*
|
||||
* @param controllerNum Unused, the controller used is that which was last passed to `Mempak_Init`
|
||||
* @param letter Memory pak file letter, in the range 'A' to ('A' + MEMPAK_MAX_FILES)
|
||||
* @param buffer Buffer to read data into
|
||||
* @param offset Offset into the file to read from
|
||||
* @param size Size in bytes
|
||||
* @return true if the operation completed successfully, false otherwise
|
||||
*/
|
||||
s32 Mempak_Read(s32 controllerNum, char letter, void* buffer, s32 offset, s32 size) {
|
||||
OSMesgQueue* serialEventQueue;
|
||||
s32 error;
|
||||
s32 ret = false;
|
||||
s32 pad;
|
||||
|
||||
mq = PadMgr_AcquireSerialEventQueue(&gPadMgr);
|
||||
serialEventQueue = PadMgr_AcquireSerialEventQueue(&gPadMgr);
|
||||
|
||||
if (size < sMempakFreeBytes) {
|
||||
error = osPfsReadWriteFile(&sMempakPfsHandle, sMempakFiles[idx - 'A'], 0, offset, size, buffer);
|
||||
error = osPfsReadWriteFile(&sMempakPfsHandle, sMempakFiles[MEMPAK_LETTER_TO_INDEX(letter)], PFS_READ, offset,
|
||||
size, buffer);
|
||||
if (error == 0) {
|
||||
ret = true;
|
||||
}
|
||||
osSyncPrintf("mempak: read %d byte '%c' (%d)<-%d\n", size, idx, sMempakFiles[idx - 'A'], error);
|
||||
osSyncPrintf("mempak: read %d byte '%c' (%d)<-%d\n", size, letter, sMempakFiles[MEMPAK_LETTER_TO_INDEX(letter)],
|
||||
error);
|
||||
}
|
||||
PadMgr_ReleaseSerialEventQueue(&gPadMgr, mq);
|
||||
PadMgr_ReleaseSerialEventQueue(&gPadMgr, serialEventQueue);
|
||||
return ret;
|
||||
}
|
||||
|
||||
s32 Mempak_Alloc(s32 controllerNb, char* idx, s32 size) {
|
||||
OSMesgQueue* mq;
|
||||
/**
|
||||
* Creates a new file on the memory pak.
|
||||
*
|
||||
* @param controllerNum Unused, the controller used is that which was last passed to `Mempak_Init`
|
||||
* @param letter Memory pak file letter, in the range 'A' to ('A' + MEMPAK_MAX_FILES).
|
||||
* If this points to a valid file letter the new file will be created using that letter, otherwise it will create
|
||||
* a file using the first free letter and return it through this argument. If no letters are free, the last letter
|
||||
* ('A' + MEMPAK_MAX_FILES - 1) is used.
|
||||
* @param size File size
|
||||
* @return true if the operation completed successfully, false otherwise
|
||||
*/
|
||||
s32 Mempak_CreateFile(s32 controllerNum, char* letter, s32 size) {
|
||||
OSMesgQueue* serialEventQueue;
|
||||
s32 error;
|
||||
s32 ret = 0;
|
||||
s32 ret = false;
|
||||
s32 i;
|
||||
s32 pad;
|
||||
|
||||
mq = PadMgr_AcquireSerialEventQueue(&gPadMgr);
|
||||
serialEventQueue = PadMgr_AcquireSerialEventQueue(&gPadMgr);
|
||||
|
||||
if (*letter >= MEMPAK_INDEX_TO_LETTER(0) && *letter < MEMPAK_INDEX_TO_LETTER(MEMPAK_MAX_FILES)) {
|
||||
// Create file with specific letter
|
||||
|
||||
sMempakExtName[0] = NCH(*letter);
|
||||
if (-1 == sMempakFiles[MEMPAK_LETTER_TO_INDEX(*letter)]) {
|
||||
// File does not already exist
|
||||
|
||||
if (*idx >= 'A' && *idx < 'L') {
|
||||
sMempakExtName[0] = *idx - 0x27;
|
||||
if (-1 == sMempakFiles[*idx - 'A']) {
|
||||
error = osPfsAllocateFile(&sMempakPfsHandle, sMempakCompanyCode, sMempakGameCode, sMempakGameName,
|
||||
sMempakExtName, size, &sMempakFiles[*idx - 'A']);
|
||||
sMempakExtName, size, &sMempakFiles[MEMPAK_LETTER_TO_INDEX(*letter)]);
|
||||
if (error == 0) {
|
||||
ret = 1;
|
||||
ret = true;
|
||||
}
|
||||
osSyncPrintf("mempak: alloc %d byte '%c' (%d)\n", size, *idx, error);
|
||||
osSyncPrintf("mempak: alloc %d byte '%c' (%d)\n", size, *letter, error);
|
||||
} else {
|
||||
sMempakExtName[0] = *idx - 0x27;
|
||||
// File already exists, delete then alloc
|
||||
|
||||
sMempakExtName[0] = NCH(*letter);
|
||||
if (osPfsDeleteFile(&sMempakPfsHandle, sMempakCompanyCode, sMempakGameCode, sMempakGameName,
|
||||
sMempakExtName) == 0) {
|
||||
ret = 1;
|
||||
ret = true;
|
||||
}
|
||||
error = osPfsAllocateFile(&sMempakPfsHandle, sMempakCompanyCode, sMempakGameCode, sMempakGameName,
|
||||
sMempakExtName, size, &sMempakFiles[*idx - 'A']);
|
||||
sMempakExtName, size, &sMempakFiles[MEMPAK_LETTER_TO_INDEX(*letter)]);
|
||||
if (error == 0) {
|
||||
ret |= 1;
|
||||
ret |= true;
|
||||
}
|
||||
osSyncPrintf("mempak: resize %d byte '%c' (%d)\n", size, *idx, error);
|
||||
osSyncPrintf("mempak: resize %d byte '%c' (%d)\n", size, *letter, error);
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < ARRAY_COUNT(sMempakFiles); i++) {
|
||||
// Find first free letter and create a file identified by it
|
||||
for (i = 0; i < MEMPAK_MAX_FILES - 1; i++) {
|
||||
if (sMempakFiles[i] == -1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
*letter = MEMPAK_INDEX_TO_LETTER(i);
|
||||
|
||||
*idx = i + 'A';
|
||||
sMempakExtName[0] = *idx - 0x27;
|
||||
sMempakExtName[0] = NCH(*letter);
|
||||
error = osPfsAllocateFile(&sMempakPfsHandle, sMempakCompanyCode, sMempakGameCode, sMempakGameName,
|
||||
sMempakExtName, size, &sMempakFiles[i]);
|
||||
osSyncPrintf("mempak: alloc %d byte '%c' (%d) with search\n", size, *idx, error);
|
||||
osSyncPrintf("mempak: alloc %d byte '%c' (%d) with search\n", size, *letter, error);
|
||||
if (error == 0) {
|
||||
ret = 1;
|
||||
ret = true;
|
||||
}
|
||||
}
|
||||
PadMgr_ReleaseSerialEventQueue(&gPadMgr, mq);
|
||||
|
||||
PadMgr_ReleaseSerialEventQueue(&gPadMgr, serialEventQueue);
|
||||
return ret;
|
||||
}
|
||||
|
||||
s32 Mempak_DeleteFile(s32 controllerNb, char idx) {
|
||||
OSMesgQueue* mq;
|
||||
/**
|
||||
* Deletes the file identified with `letter`.
|
||||
*
|
||||
* @param controllerNum Unused, the controller used is that which was last passed to `Mempak_Init`
|
||||
* @param letter Memory pak file letter, in the range 'A' to ('A' + MEMPAK_MAX_FILES)
|
||||
* @return true if the operation completed successfully, false otherwise
|
||||
*/
|
||||
s32 Mempak_DeleteFile(s32 controllerNum, char letter) {
|
||||
OSMesgQueue* serialEventQueue;
|
||||
s32 error;
|
||||
s32 ret = false;
|
||||
|
||||
mq = PadMgr_AcquireSerialEventQueue(&gPadMgr);
|
||||
serialEventQueue = PadMgr_AcquireSerialEventQueue(&gPadMgr);
|
||||
|
||||
sMempakExtName[0] = idx - 0x27;
|
||||
sMempakExtName[0] = NCH(letter);
|
||||
error = osPfsDeleteFile(&sMempakPfsHandle, sMempakCompanyCode, sMempakGameCode, sMempakGameName, sMempakExtName);
|
||||
if (error == 0) {
|
||||
ret = true;
|
||||
}
|
||||
osSyncPrintf("mempak: delete '%c' (%d)\n", idx, error);
|
||||
PadMgr_ReleaseSerialEventQueue(&gPadMgr, mq);
|
||||
osSyncPrintf("mempak: delete '%c' (%d)\n", letter, error);
|
||||
|
||||
PadMgr_ReleaseSerialEventQueue(&gPadMgr, serialEventQueue);
|
||||
return ret;
|
||||
}
|
||||
|
||||
s32 Mempak_GetFileSize(s32 controllerNb, char idx) {
|
||||
OSMesgQueue* mq = PadMgr_AcquireSerialEventQueue(&gPadMgr);
|
||||
/**
|
||||
* Gets the size of the file identified with `letter`.
|
||||
*
|
||||
* @param controllerNum Unused, the controller used is that which was last passed to `Mempak_Init`
|
||||
* @param letter Memory pak file letter, in the range 'A' to ('A' + MEMPAK_MAX_FILES)
|
||||
* @return the size of the file, or 0 if the operation failed for any reason
|
||||
*/
|
||||
s32 Mempak_GetFileSize(s32 controllerNum, char letter) {
|
||||
OSMesgQueue* serialEventQueue = PadMgr_AcquireSerialEventQueue(&gPadMgr);
|
||||
OSPfsState state;
|
||||
s32 error = osPfsFileState(&sMempakPfsHandle, sMempakFiles[idx - 'A'], &state);
|
||||
s32 error = osPfsFileState(&sMempakPfsHandle, sMempakFiles[MEMPAK_LETTER_TO_INDEX(letter)], &state);
|
||||
s32 pad;
|
||||
|
||||
PadMgr_ReleaseSerialEventQueue(&gPadMgr, mq);
|
||||
PadMgr_ReleaseSerialEventQueue(&gPadMgr, serialEventQueue);
|
||||
|
||||
if (error != 0) {
|
||||
return 0;
|
||||
|
|
|
@ -31,13 +31,13 @@
|
|||
#include "global.h"
|
||||
#include "terminal.h"
|
||||
|
||||
#define PADMGR_LOG(controllerNo, msg) \
|
||||
if (1) { \
|
||||
osSyncPrintf(VT_FGCOL(YELLOW)); \
|
||||
/* padmgr: Controller %d: %s */ \
|
||||
osSyncPrintf("padmgr: %dコン: %s\n", (controllerNo) + 1, (msg)); \
|
||||
osSyncPrintf(VT_RST); \
|
||||
} \
|
||||
#define PADMGR_LOG(controllerNum, msg) \
|
||||
if (1) { \
|
||||
osSyncPrintf(VT_FGCOL(YELLOW)); \
|
||||
/* padmgr: Controller %d: %s */ \
|
||||
osSyncPrintf("padmgr: %dコン: %s\n", (controllerNum) + 1, (msg)); \
|
||||
osSyncPrintf(VT_RST); \
|
||||
} \
|
||||
(void)0
|
||||
|
||||
#define LOG_SEVERITY_NOLOG 0
|
||||
|
|
|
@ -8,7 +8,7 @@ void Interface_Init(PlayState* play) {
|
|||
InterfaceContext* interfaceCtx = &play->interfaceCtx;
|
||||
u32 parameterSize;
|
||||
u16 doActionOffset;
|
||||
u8 temp;
|
||||
u8 timerId;
|
||||
|
||||
gSaveContext.sunsSongState = SUNSSONG_INACTIVE;
|
||||
gSaveContext.unk_13E8 = gSaveContext.unk_13EA = 0;
|
||||
|
@ -109,39 +109,42 @@ void Interface_Init(PlayState* play) {
|
|||
0x1000, "../z_construct.c", 219);
|
||||
}
|
||||
|
||||
osSyncPrintf("EVENT=%d\n", ((void)0, gSaveContext.timer1State));
|
||||
osSyncPrintf("EVENT=%d\n", ((void)0, gSaveContext.timerState));
|
||||
|
||||
if ((gSaveContext.timer1State == 4) || (gSaveContext.timer1State == 8) || (gSaveContext.timer2State == 4) ||
|
||||
(gSaveContext.timer2State == 10)) {
|
||||
if ((gSaveContext.timerState == TIMER_STATE_ENV_HAZARD_TICK) ||
|
||||
(gSaveContext.timerState == TIMER_STATE_DOWN_TICK) ||
|
||||
(gSaveContext.subTimerState == SUBTIMER_STATE_DOWN_TICK) ||
|
||||
(gSaveContext.subTimerState == SUBTIMER_STATE_UP_TICK)) {
|
||||
osSyncPrintf("restart_flag=%d\n", ((void)0, gSaveContext.respawnFlag));
|
||||
|
||||
if ((gSaveContext.respawnFlag == -1) || (gSaveContext.respawnFlag == 1)) {
|
||||
if (gSaveContext.timer1State == 4) {
|
||||
gSaveContext.timer1State = 1;
|
||||
gSaveContext.timerX[0] = 140;
|
||||
gSaveContext.timerY[0] = 80;
|
||||
if (gSaveContext.timerState == TIMER_STATE_ENV_HAZARD_TICK) {
|
||||
gSaveContext.timerState = TIMER_STATE_ENV_HAZARD_INIT;
|
||||
gSaveContext.timerX[TIMER_ID_MAIN] = 140;
|
||||
gSaveContext.timerY[TIMER_ID_MAIN] = 80;
|
||||
}
|
||||
}
|
||||
|
||||
if ((gSaveContext.timer1State == 4) || (gSaveContext.timer1State == 8)) {
|
||||
temp = 0;
|
||||
if ((gSaveContext.timerState == TIMER_STATE_ENV_HAZARD_TICK) ||
|
||||
(gSaveContext.timerState == TIMER_STATE_DOWN_TICK)) {
|
||||
timerId = TIMER_ID_MAIN;
|
||||
} else {
|
||||
temp = 1;
|
||||
timerId = TIMER_ID_SUB;
|
||||
}
|
||||
|
||||
gSaveContext.timerX[temp] = 26;
|
||||
gSaveContext.timerX[timerId] = 26;
|
||||
|
||||
if (gSaveContext.healthCapacity > 0xA0) {
|
||||
gSaveContext.timerY[temp] = 54;
|
||||
gSaveContext.timerY[timerId] = 54; // two rows of hearts
|
||||
} else {
|
||||
gSaveContext.timerY[temp] = 46;
|
||||
gSaveContext.timerY[timerId] = 46; // one row of hearts
|
||||
}
|
||||
}
|
||||
|
||||
if ((gSaveContext.timer1State >= 11) && (gSaveContext.timer1State < 16)) {
|
||||
gSaveContext.timer1State = 0;
|
||||
if ((gSaveContext.timerState >= TIMER_STATE_UP_INIT) && (gSaveContext.timerState <= TIMER_STATE_UP_FREEZE)) {
|
||||
gSaveContext.timerState = TIMER_STATE_OFF;
|
||||
// "Timer Stop!!!!!!!!!!!!!!!!!!!!!!"
|
||||
osSyncPrintf("タイマー停止!!!!!!!!!!!!!!!!!!!!! = %d\n", gSaveContext.timer1State);
|
||||
osSyncPrintf("タイマー停止!!!!!!!!!!!!!!!!!!!!! = %d\n", gSaveContext.timerState);
|
||||
}
|
||||
|
||||
osSyncPrintf("PARAMETER領域=%x\n", parameterSize + 0x5300); // "Parameter Area = %x"
|
||||
|
|
|
@ -39,7 +39,7 @@ u32 QuestHint_CheckCondition(QuestHintCmd* hintCmd) {
|
|||
|
||||
case (QUEST_HINT_CONDITION_DUNGEON_ITEM << 1):
|
||||
return ((hintCmd->byte0 & 1) == 1) ==
|
||||
(CHECK_DUNGEON_ITEM(hintCmd->byte1 - ITEM_KEY_BOSS, gSaveContext.mapIndex) != 0);
|
||||
(CHECK_DUNGEON_ITEM(hintCmd->byte1 - ITEM_DUNGEON_BOSS_KEY, gSaveContext.mapIndex) != 0);
|
||||
|
||||
case (QUEST_HINT_CONDITION_ITEM << 1):
|
||||
return ((hintCmd->byte0 & 1) == 1) == (hintCmd->byte3 == INV_CONTENT(hintCmd->byte1));
|
||||
|
|
|
@ -314,31 +314,31 @@ void EnItem00_Init(Actor* thisx, PlayState* play) {
|
|||
Item_Give(play, ITEM_BOW);
|
||||
break;
|
||||
case ITEM00_ARROWS_SMALL:
|
||||
Item_Give(play, ITEM_ARROWS_SMALL);
|
||||
Item_Give(play, ITEM_ARROWS_5);
|
||||
break;
|
||||
case ITEM00_ARROWS_MEDIUM:
|
||||
Item_Give(play, ITEM_ARROWS_MEDIUM);
|
||||
Item_Give(play, ITEM_ARROWS_10);
|
||||
break;
|
||||
case ITEM00_ARROWS_LARGE:
|
||||
Item_Give(play, ITEM_ARROWS_LARGE);
|
||||
Item_Give(play, ITEM_ARROWS_30);
|
||||
break;
|
||||
case ITEM00_MAGIC_LARGE:
|
||||
getItemId = GI_MAGIC_SMALL;
|
||||
getItemId = GI_MAGIC_JAR_SMALL;
|
||||
break;
|
||||
case ITEM00_MAGIC_SMALL:
|
||||
getItemId = GI_MAGIC_LARGE;
|
||||
getItemId = GI_MAGIC_JAR_LARGE;
|
||||
break;
|
||||
case ITEM00_SMALL_KEY:
|
||||
Item_Give(play, ITEM_KEY_SMALL);
|
||||
Item_Give(play, ITEM_SMALL_KEY);
|
||||
break;
|
||||
case ITEM00_SEEDS:
|
||||
getItemId = GI_SEEDS_5;
|
||||
getItemId = GI_DEKU_SEEDS_5;
|
||||
break;
|
||||
case ITEM00_NUTS:
|
||||
getItemId = GI_NUTS_5;
|
||||
getItemId = GI_DEKU_NUTS_5;
|
||||
break;
|
||||
case ITEM00_STICK:
|
||||
getItemId = GI_STICKS_1;
|
||||
getItemId = GI_DEKU_STICKS_1;
|
||||
break;
|
||||
case ITEM00_HEART_PIECE:
|
||||
case ITEM00_HEART_CONTAINER:
|
||||
|
@ -632,10 +632,10 @@ void EnItem00_Update(Actor* thisx, PlayState* play) {
|
|||
Item_Give(play, ITEM_RUPEE_GOLD);
|
||||
break;
|
||||
case ITEM00_STICK:
|
||||
getItemId = GI_STICKS_1;
|
||||
getItemId = GI_DEKU_STICKS_1;
|
||||
break;
|
||||
case ITEM00_NUTS:
|
||||
getItemId = GI_NUTS_5;
|
||||
getItemId = GI_DEKU_NUTS_5;
|
||||
break;
|
||||
case ITEM00_RECOVERY_HEART:
|
||||
Item_Give(play, ITEM_RECOVERY_HEART);
|
||||
|
@ -651,19 +651,19 @@ void EnItem00_Update(Actor* thisx, PlayState* play) {
|
|||
Item_Give(play, ITEM_BOW);
|
||||
break;
|
||||
case ITEM00_ARROWS_SMALL:
|
||||
Item_Give(play, ITEM_ARROWS_SMALL);
|
||||
Item_Give(play, ITEM_ARROWS_5);
|
||||
break;
|
||||
case ITEM00_ARROWS_MEDIUM:
|
||||
Item_Give(play, ITEM_ARROWS_MEDIUM);
|
||||
Item_Give(play, ITEM_ARROWS_10);
|
||||
break;
|
||||
case ITEM00_ARROWS_LARGE:
|
||||
Item_Give(play, ITEM_ARROWS_LARGE);
|
||||
Item_Give(play, ITEM_ARROWS_30);
|
||||
break;
|
||||
case ITEM00_SEEDS:
|
||||
getItemId = GI_SEEDS_5;
|
||||
getItemId = GI_DEKU_SEEDS_5;
|
||||
break;
|
||||
case ITEM00_SMALL_KEY:
|
||||
getItemId = GI_KEY_SMALL;
|
||||
getItemId = GI_SMALL_KEY;
|
||||
break;
|
||||
case ITEM00_HEART_PIECE:
|
||||
getItemId = GI_HEART_PIECE;
|
||||
|
@ -672,10 +672,10 @@ void EnItem00_Update(Actor* thisx, PlayState* play) {
|
|||
getItemId = GI_HEART_CONTAINER;
|
||||
break;
|
||||
case ITEM00_MAGIC_LARGE:
|
||||
getItemId = GI_MAGIC_LARGE;
|
||||
getItemId = GI_MAGIC_JAR_LARGE;
|
||||
break;
|
||||
case ITEM00_MAGIC_SMALL:
|
||||
getItemId = GI_MAGIC_SMALL;
|
||||
getItemId = GI_MAGIC_JAR_SMALL;
|
||||
break;
|
||||
case ITEM00_SHIELD_DEKU:
|
||||
getItemId = GI_SHIELD_DEKU;
|
||||
|
|
|
@ -28,9 +28,9 @@ void GameOver_Update(PlayState* play) {
|
|||
case GAMEOVER_DEATH_START:
|
||||
Message_CloseTextbox(play);
|
||||
|
||||
gSaveContext.timer1State = 0;
|
||||
gSaveContext.timer2State = 0;
|
||||
CLEAR_EVENTINF(EVENTINF_10);
|
||||
gSaveContext.timerState = TIMER_STATE_OFF;
|
||||
gSaveContext.subTimerState = SUBTIMER_STATE_OFF;
|
||||
CLEAR_EVENTINF(EVENTINF_MARATHON_ACTIVE);
|
||||
|
||||
// search inventory for spoiling items and revert if necessary
|
||||
for (i = 0; i < ARRAY_COUNT(gSpoilingItems); i++) {
|
||||
|
@ -50,8 +50,8 @@ void GameOver_Update(PlayState* play) {
|
|||
// restore "temporary B" to the B Button if not a sword item
|
||||
if (gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI &&
|
||||
gSaveContext.equips.buttonItems[0] != ITEM_SWORD_MASTER &&
|
||||
gSaveContext.equips.buttonItems[0] != ITEM_SWORD_BGS &&
|
||||
gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KNIFE) {
|
||||
gSaveContext.equips.buttonItems[0] != ITEM_SWORD_BIGGORON &&
|
||||
gSaveContext.equips.buttonItems[0] != ITEM_GIANTS_KNIFE) {
|
||||
|
||||
if (gSaveContext.buttonStatus[0] != BTN_ENABLED) {
|
||||
gSaveContext.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
|
||||
|
|
|
@ -1283,9 +1283,9 @@ void Message_Decode(PlayState* play) {
|
|||
osSyncPrintf("\nEVENTタイマー = ");
|
||||
digits[0] = digits[1] = digits[2] = 0;
|
||||
if (curChar == MESSAGE_RACE_TIME) {
|
||||
digits[3] = gSaveContext.timer1Value;
|
||||
digits[3] = gSaveContext.timerSeconds;
|
||||
} else {
|
||||
digits[3] = gSaveContext.timer2Value;
|
||||
digits[3] = gSaveContext.subTimerSeconds;
|
||||
}
|
||||
|
||||
while (digits[3] >= 60) {
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -3,11 +3,6 @@
|
|||
#include "assets/objects/object_link_boy/object_link_boy.h"
|
||||
#include "assets/objects/object_link_child/object_link_child.h"
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u8 flag;
|
||||
/* 0x02 */ u16 textId;
|
||||
} TextTriggerEntry; // size = 0x04
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ Gfx* dList;
|
||||
/* 0x04 */ Vec3f pos;
|
||||
|
@ -32,7 +27,7 @@ u8 sActionModelGroups[PLAYER_IA_MAX] = {
|
|||
PLAYER_MODELGROUP_SWORD, // PLAYER_IA_SWORD_MASTER
|
||||
PLAYER_MODELGROUP_SWORD, // PLAYER_IA_SWORD_KOKIRI
|
||||
PLAYER_MODELGROUP_BGS, // PLAYER_IA_SWORD_BGS
|
||||
PLAYER_MODELGROUP_10, // PLAYER_IA_STICK
|
||||
PLAYER_MODELGROUP_10, // PLAYER_IA_DEKU_STICK
|
||||
PLAYER_MODELGROUP_HAMMER, // PLAYER_IA_HAMMER
|
||||
PLAYER_MODELGROUP_BOW_SLINGSHOT, // PLAYER_IA_BOW
|
||||
PLAYER_MODELGROUP_BOW_SLINGSHOT, // PLAYER_IA_BOW_FIRE
|
||||
|
@ -53,33 +48,33 @@ u8 sActionModelGroups[PLAYER_IA_MAX] = {
|
|||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_FARORES_WIND
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_NAYRUS_LOVE
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_DINS_FIRE
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_NUT
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_DEKU_NUT
|
||||
PLAYER_MODELGROUP_OCARINA, // PLAYER_IA_OCARINA_FAIRY
|
||||
PLAYER_MODELGROUP_OOT, // PLAYER_IA_OCARINA_TIME
|
||||
PLAYER_MODELGROUP_OOT, // PLAYER_IA_OCARINA_OF_TIME
|
||||
PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE
|
||||
PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_FISH
|
||||
PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_FIRE
|
||||
PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_BUG
|
||||
PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_POE
|
||||
PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_BIG_POE
|
||||
PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_LETTER
|
||||
PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_RUTOS_LETTER
|
||||
PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_POTION_RED
|
||||
PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_POTION_BLUE
|
||||
PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_POTION_GREEN
|
||||
PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_MILK
|
||||
PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_MILK_FULL
|
||||
PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_MILK_HALF
|
||||
PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_FAIRY
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_LETTER_ZELDA
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_ZELDAS_LETTER
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_WEIRD_EGG
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_CHICKEN
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_BEAN
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MAGIC_BEAN
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_POCKET_EGG
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_POCKET_CUCCO
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_COJIRO
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_ODD_MUSHROOM
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_ODD_POTION
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_SAW
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_SWORD_BROKEN
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_POACHERS_SAW
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_BROKEN_GORONS_SWORD
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_PRESCRIPTION
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_FROG
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_EYEDROPS
|
||||
|
@ -87,19 +82,24 @@ u8 sActionModelGroups[PLAYER_IA_MAX] = {
|
|||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_KEATON
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_SKULL
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_SPOOKY
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_BUNNY
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_BUNNY_HOOD
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_GORON
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_ZORA
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_GERUDO
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_TRUTH
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_LENS
|
||||
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_LENS_OF_TRUTH
|
||||
};
|
||||
|
||||
TextTriggerEntry sTextTriggers[] = {
|
||||
{ 1, 0x3040 },
|
||||
{ 2, 0x401D },
|
||||
{ 0, 0x0000 },
|
||||
{ 2, 0x401D },
|
||||
typedef struct {
|
||||
/* 0x0 */ u8 flag;
|
||||
/* 0x2 */ u16 textId;
|
||||
} EnvHazardTextTriggerEntry; // size = 0x4
|
||||
|
||||
EnvHazardTextTriggerEntry sEnvHazardTextTriggers[] = {
|
||||
{ ENV_HAZARD_TEXT_TRIGGER_HOTROOM, 0x3040 }, // PLAYER_ENV_HAZARD_HOTROOM - 1
|
||||
{ ENV_HAZARD_TEXT_TRIGGER_UNDERWATER, 0x401D }, // PLAYER_ENV_HAZARD_UNDERWATER_FLOOR - 1
|
||||
{ 0, 0x0000 }, // PLAYER_ENV_HAZARD_SWIMMING - 1
|
||||
{ ENV_HAZARD_TEXT_TRIGGER_UNDERWATER, 0x401D }, // PLAYER_ENV_HAZARD_UNDERWATER_FREE - 1
|
||||
};
|
||||
|
||||
// Used to map model groups to model types for [animation, left hand, right hand, sheath, waist]
|
||||
|
@ -590,7 +590,7 @@ void Player_SetEquipmentData(PlayState* play, Player* this) {
|
|||
void Player_UpdateBottleHeld(PlayState* play, Player* this, s32 item, s32 itemAction) {
|
||||
Inventory_UpdateBottleItem(play, item, this->heldItemButton);
|
||||
|
||||
if (item != ITEM_BOTTLE) {
|
||||
if (item != ITEM_BOTTLE_EMPTY) {
|
||||
this->heldItemId = item;
|
||||
this->heldItemAction = itemAction;
|
||||
}
|
||||
|
@ -644,7 +644,7 @@ s32 Player_IsBurningStickInRange(PlayState* play, Vec3f* pos, f32 xzRange, f32 y
|
|||
Vec3f diff;
|
||||
s32 pad;
|
||||
|
||||
if ((this->heldItemAction == PLAYER_IA_STICK) && (this->unk_860 != 0)) {
|
||||
if ((this->heldItemAction == PLAYER_IA_DEKU_STICK) && (this->unk_860 != 0)) {
|
||||
Math_Vec3f_Diff(&this->meleeWeaponInfo[0].tip, pos, &diff);
|
||||
return ((SQ(diff.x) + SQ(diff.z)) <= SQ(xzRange)) && (0.0f <= diff.y) && (diff.y <= yRange);
|
||||
} else {
|
||||
|
@ -778,35 +778,37 @@ return_neg:
|
|||
return -1;
|
||||
}
|
||||
|
||||
s32 func_8008F2F8(PlayState* play) {
|
||||
s32 Player_GetEnvironmentalHazard(PlayState* play) {
|
||||
Player* this = GET_PLAYER(play);
|
||||
TextTriggerEntry* triggerEntry;
|
||||
s32 var;
|
||||
EnvHazardTextTriggerEntry* triggerEntry;
|
||||
s32 envHazard;
|
||||
|
||||
if (play->roomCtx.curRoom.behaviorType2 == ROOM_BEHAVIOR_TYPE2_3) { // Room is hot
|
||||
var = 0;
|
||||
} else if ((this->unk_840 > 80) &&
|
||||
((this->currentBoots == PLAYER_BOOTS_IRON) || (this->unk_840 >= 300))) { // Deep underwater
|
||||
var = ((this->currentBoots == PLAYER_BOOTS_IRON) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) ? 1 : 3;
|
||||
envHazard = PLAYER_ENV_HAZARD_HOTROOM - 1;
|
||||
} else if ((this->underwaterTimer > 80) &&
|
||||
((this->currentBoots == PLAYER_BOOTS_IRON) || (this->underwaterTimer >= 300))) {
|
||||
envHazard = ((this->currentBoots == PLAYER_BOOTS_IRON) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))
|
||||
? (PLAYER_ENV_HAZARD_UNDERWATER_FLOOR - 1)
|
||||
: (PLAYER_ENV_HAZARD_UNDERWATER_FREE - 1);
|
||||
} else if (this->stateFlags1 & PLAYER_STATE1_27) { // Swimming
|
||||
var = 2;
|
||||
envHazard = PLAYER_ENV_HAZARD_SWIMMING - 1;
|
||||
} else {
|
||||
return 0;
|
||||
return PLAYER_ENV_HAZARD_NONE;
|
||||
}
|
||||
|
||||
// Trigger general textboxes under certain conditions, like "It's so hot in here!"
|
||||
triggerEntry = &sTextTriggers[var];
|
||||
triggerEntry = &sEnvHazardTextTriggers[envHazard];
|
||||
if (!Player_InCsMode(play)) {
|
||||
if ((triggerEntry->flag != 0) && !(gSaveContext.textTriggerFlags & triggerEntry->flag) &&
|
||||
(((var == 0) && (this->currentTunic != PLAYER_TUNIC_GORON)) ||
|
||||
(((var == 1) || (var == 3)) && (this->currentBoots == PLAYER_BOOTS_IRON) &&
|
||||
(this->currentTunic != PLAYER_TUNIC_ZORA)))) {
|
||||
if ((triggerEntry->flag != 0) && !(gSaveContext.envHazardTextTriggerFlags & triggerEntry->flag) &&
|
||||
(((envHazard == (PLAYER_ENV_HAZARD_HOTROOM - 1)) && (this->currentTunic != PLAYER_TUNIC_GORON)) ||
|
||||
(((envHazard == (PLAYER_ENV_HAZARD_UNDERWATER_FLOOR - 1)) ||
|
||||
(envHazard == (PLAYER_ENV_HAZARD_UNDERWATER_FREE - 1))) &&
|
||||
(this->currentBoots == PLAYER_BOOTS_IRON) && (this->currentTunic != PLAYER_TUNIC_ZORA)))) {
|
||||
Message_StartTextbox(play, triggerEntry->textId, NULL);
|
||||
gSaveContext.textTriggerFlags |= triggerEntry->flag;
|
||||
gSaveContext.envHazardTextTriggerFlags |= triggerEntry->flag;
|
||||
}
|
||||
}
|
||||
|
||||
return var + 1;
|
||||
return envHazard + 1;
|
||||
}
|
||||
|
||||
u8 sEyeMouthIndices[][2] = {
|
||||
|
@ -1450,7 +1452,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve
|
|||
|
||||
Math_Vec3f_Copy(&this->leftHandPos, sCurBodyPartPos);
|
||||
|
||||
if (this->itemAction == PLAYER_IA_STICK) {
|
||||
if (this->itemAction == PLAYER_IA_DEKU_STICK) {
|
||||
Vec3f sp124[3];
|
||||
|
||||
OPEN_DISPS(play->state.gfxCtx, "../z_player_lib.c", 2633);
|
||||
|
|
|
@ -138,8 +138,8 @@ static ItemEquips sNewSaveEquips = {
|
|||
static Inventory sNewSaveInventory = {
|
||||
// items
|
||||
{
|
||||
ITEM_NONE, // SLOT_STICK
|
||||
ITEM_NONE, // SLOT_NUT
|
||||
ITEM_NONE, // SLOT_DEKU_STICK
|
||||
ITEM_NONE, // SLOT_DEKU_NUT
|
||||
ITEM_NONE, // SLOT_BOMB
|
||||
ITEM_NONE, // SLOT_BOW
|
||||
ITEM_NONE, // SLOT_ARROW_FIRE
|
||||
|
@ -151,8 +151,8 @@ static Inventory sNewSaveInventory = {
|
|||
ITEM_NONE, // SLOT_ARROW_ICE
|
||||
ITEM_NONE, // SLOT_FARORES_WIND
|
||||
ITEM_NONE, // SLOT_BOOMERANG
|
||||
ITEM_NONE, // SLOT_LENS
|
||||
ITEM_NONE, // SLOT_BEAN
|
||||
ITEM_NONE, // SLOT_LENS_OF_TRUTH
|
||||
ITEM_NONE, // SLOT_MAGIC_BEAN
|
||||
ITEM_NONE, // SLOT_HAMMER
|
||||
ITEM_NONE, // SLOT_ARROW_LIGHT
|
||||
ITEM_NONE, // SLOT_NAYRUS_LOVE
|
||||
|
@ -165,8 +165,8 @@ static Inventory sNewSaveInventory = {
|
|||
},
|
||||
// ammo
|
||||
{
|
||||
0, // SLOT_STICK
|
||||
0, // SLOT_NUT
|
||||
0, // SLOT_DEKU_STICK
|
||||
0, // SLOT_DEKU_NUT
|
||||
0, // SLOT_BOMB
|
||||
0, // SLOT_BOW
|
||||
0, // SLOT_ARROW_FIRE
|
||||
|
@ -178,8 +178,8 @@ static Inventory sNewSaveInventory = {
|
|||
0, // SLOT_ARROW_ICE
|
||||
0, // SLOT_FARORES_WIND
|
||||
0, // SLOT_BOOMERANG
|
||||
0, // SLOT_LENS
|
||||
0, // SLOT_BEAN
|
||||
0, // SLOT_LENS_OF_TRUTH
|
||||
0, // SLOT_MAGIC_BEAN
|
||||
0, // SLOT_HAMMER
|
||||
},
|
||||
// equipment
|
||||
|
@ -268,35 +268,35 @@ static ItemEquips sDebugSaveEquips = {
|
|||
static Inventory sDebugSaveInventory = {
|
||||
// items
|
||||
{
|
||||
ITEM_STICK, // SLOT_STICK
|
||||
ITEM_NUT, // SLOT_NUT
|
||||
ITEM_BOMB, // SLOT_BOMB
|
||||
ITEM_BOW, // SLOT_BOW
|
||||
ITEM_ARROW_FIRE, // SLOT_ARROW_FIRE
|
||||
ITEM_DINS_FIRE, // SLOT_DINS_FIRE
|
||||
ITEM_SLINGSHOT, // SLOT_SLINGSHOT
|
||||
ITEM_OCARINA_FAIRY, // SLOT_OCARINA
|
||||
ITEM_BOMBCHU, // SLOT_BOMBCHU
|
||||
ITEM_HOOKSHOT, // SLOT_HOOKSHOT
|
||||
ITEM_ARROW_ICE, // SLOT_ARROW_ICE
|
||||
ITEM_FARORES_WIND, // SLOT_FARORES_WIND
|
||||
ITEM_BOOMERANG, // SLOT_BOOMERANG
|
||||
ITEM_LENS, // SLOT_LENS
|
||||
ITEM_BEAN, // SLOT_BEAN
|
||||
ITEM_HAMMER, // SLOT_HAMMER
|
||||
ITEM_ARROW_LIGHT, // SLOT_ARROW_LIGHT
|
||||
ITEM_NAYRUS_LOVE, // SLOT_NAYRUS_LOVE
|
||||
ITEM_BOTTLE, // SLOT_BOTTLE_1
|
||||
ITEM_POTION_RED, // SLOT_BOTTLE_2
|
||||
ITEM_POTION_GREEN, // SLOT_BOTTLE_3
|
||||
ITEM_POTION_BLUE, // SLOT_BOTTLE_4
|
||||
ITEM_POCKET_EGG, // SLOT_TRADE_ADULT
|
||||
ITEM_WEIRD_EGG, // SLOT_TRADE_CHILD
|
||||
ITEM_DEKU_STICK, // SLOT_DEKU_STICK
|
||||
ITEM_DEKU_NUT, // SLOT_DEKU_NUT
|
||||
ITEM_BOMB, // SLOT_BOMB
|
||||
ITEM_BOW, // SLOT_BOW
|
||||
ITEM_ARROW_FIRE, // SLOT_ARROW_FIRE
|
||||
ITEM_DINS_FIRE, // SLOT_DINS_FIRE
|
||||
ITEM_SLINGSHOT, // SLOT_SLINGSHOT
|
||||
ITEM_OCARINA_FAIRY, // SLOT_OCARINA
|
||||
ITEM_BOMBCHU, // SLOT_BOMBCHU
|
||||
ITEM_HOOKSHOT, // SLOT_HOOKSHOT
|
||||
ITEM_ARROW_ICE, // SLOT_ARROW_ICE
|
||||
ITEM_FARORES_WIND, // SLOT_FARORES_WIND
|
||||
ITEM_BOOMERANG, // SLOT_BOOMERANG
|
||||
ITEM_LENS_OF_TRUTH, // SLOT_LENS_OF_TRUTH
|
||||
ITEM_MAGIC_BEAN, // SLOT_MAGIC_BEAN
|
||||
ITEM_HAMMER, // SLOT_HAMMER
|
||||
ITEM_ARROW_LIGHT, // SLOT_ARROW_LIGHT
|
||||
ITEM_NAYRUS_LOVE, // SLOT_NAYRUS_LOVE
|
||||
ITEM_BOTTLE_EMPTY, // SLOT_BOTTLE_1
|
||||
ITEM_BOTTLE_POTION_RED, // SLOT_BOTTLE_2
|
||||
ITEM_BOTTLE_POTION_GREEN, // SLOT_BOTTLE_3
|
||||
ITEM_BOTTLE_POTION_BLUE, // SLOT_BOTTLE_4
|
||||
ITEM_POCKET_EGG, // SLOT_TRADE_ADULT
|
||||
ITEM_WEIRD_EGG, // SLOT_TRADE_CHILD
|
||||
},
|
||||
// ammo
|
||||
{
|
||||
50, // SLOT_STICK
|
||||
50, // SLOT_NUT
|
||||
50, // SLOT_DEKU_STICK
|
||||
50, // SLOT_DEKU_NUT
|
||||
10, // SLOT_BOMB
|
||||
30, // SLOT_BOW
|
||||
1, // SLOT_ARROW_FIRE
|
||||
|
@ -308,8 +308,8 @@ static Inventory sDebugSaveInventory = {
|
|||
1, // SLOT_ARROW_ICE
|
||||
1, // SLOT_FARORES_WIND
|
||||
1, // SLOT_BOOMERANG
|
||||
1, // SLOT_LENS
|
||||
1, // SLOT_BEAN
|
||||
1, // SLOT_LENS_OF_TRUTH
|
||||
1, // SLOT_MAGIC_BEAN
|
||||
1 // SLOT_HAMMER
|
||||
},
|
||||
// equipment
|
||||
|
@ -534,10 +534,10 @@ void Sram_OpenSave(SramContext* sramCtx) {
|
|||
i = gSaveContext.eventChkInf[EVENTCHKINF_40_INDEX] & ~EVENTCHKINF_40_MASK;
|
||||
gSaveContext.eventChkInf[EVENTCHKINF_40_INDEX] = i;
|
||||
|
||||
INV_CONTENT(ITEM_LETTER_ZELDA) = ITEM_CHICKEN;
|
||||
INV_CONTENT(ITEM_ZELDAS_LETTER) = ITEM_CHICKEN;
|
||||
|
||||
for (j = 1; j < 4; j++) {
|
||||
if (gSaveContext.equips.buttonItems[j] == ITEM_LETTER_ZELDA) {
|
||||
if (gSaveContext.equips.buttonItems[j] == ITEM_ZELDAS_LETTER) {
|
||||
gSaveContext.equips.buttonItems[j] = ITEM_CHICKEN;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue