chests are working again

This commit is contained in:
MelonSpeedruns 2022-05-29 21:01:09 -04:00
commit 974fa03aa4
6 changed files with 54 additions and 7 deletions

View file

@ -386,6 +386,9 @@ typedef enum {
/* 0x81 */ GI_MEDALLION_WATER,
/* 0x82 */ GI_MEDALLION_SHADOW,
/* 0x83 */ GI_MEDALLION_SPIRIT,
/* 0x81 */ GI_STONE_KOKIRI,
/* 0x82 */ GI_STONE_GORON,
/* 0x83 */ GI_STONE_ZORA,
/* 0x84 */ GI_MAX
} GetItemID;
@ -507,6 +510,9 @@ typedef enum {
/* 0x72 */ GID_BULLET_BAG_50,
/* 0x73 */ GID_SWORD_KOKIRI,
/* 0x74 */ GID_SKULL_TOKEN_2,
/* 0x74 */ GID_KOKIRI_EMERALD,
/* 0x74 */ GID_GORON_RUBY,
/* 0x74 */ GID_ZORA_SAPPHIRE,
/* 0x75 */ GID_MAX
} GetItemDrawID;

View file

@ -481,7 +481,7 @@ typedef struct Player {
/* 0x042D */ s8 doorDirection;
/* 0x042E */ s16 doorTimer;
/* 0x0430 */ Actor* doorActor;
/* 0x0434 */ u8 getItemId;
/* 0x0434 */ s16 getItemId;
/* 0x0436 */ u16 getItemDirection;
/* 0x0438 */ Actor* interactRangeActor;
/* 0x043C */ s8 mountSide;

View file

@ -1007,6 +1007,12 @@ GetItemID Randomizer::GetItemFromGet(RandomizerGet randoGet, GetItemID ogItemId)
return GI_MEDALLION_SHADOW;
case SPIRIT_MEDALLION:
return GI_MEDALLION_SPIRIT;
case KOKIRI_EMERALD:
return GI_STONE_KOKIRI;
case GORON_RUBY:
return GI_STONE_GORON;
case ZORA_SAPPHIRE:
return GI_STONE_ZORA;
default:
return ogItemId;
}
@ -1034,6 +1040,20 @@ RandomizerCheck Randomizer::GetCheckFromActor(s16 sceneNum, s16 actorId, s16 act
case 93:
return QUEEN_GOHMA;
}
case 18:
switch (actorId) {
case 95:
return DODONGOS_CAVERN_KING_DODONGO_HEART;
case 93:
return KING_DODONGO;
}
case 19:
switch (actorId) {
case 95:
return JABU_JABUS_BELLY_BARINADE_HEART;
case 93:
return BARINADE;
}
case 40:
switch(actorParams) {
case 22944:

View file

@ -367,6 +367,12 @@ DrawItemTableEntry sDrawItemTable[] = {
{ GetItem_DrawOpa0, { gGiKokiriSwordDL } },
// gold skulltula token, OBJECT_ST
{ GetItem_DrawSkullToken, { object_st_DL_004DB0, object_st_DL_004EB8 } },
{ GetItem_DrawOpa0Xlu1, { gGiKokiriEmeraldGemDL, gGiKokiriEmeraldSettingDL } },
// fire medallion, OBJECT_GI_MEDAL
{ GetItem_DrawOpa0Xlu1, { gGiGoronRubySettingDL, gGiGoronRubyGemDL } },
// water medallion, OBJECT_GI_MEDAL
{ GetItem_DrawOpa0Xlu1, { gGiZoraSapphireSettingDL, gGiZoraSapphireGemDL, } },
};
/**

View file

@ -530,9 +530,14 @@ void DoorWarp1_ChildWarpOut(DoorWarp1* this, GlobalContext* globalCtx) {
if (globalCtx->sceneNum == SCENE_DDAN_BOSS) {
if (!Flags_GetEventChkInf(0x25)) {
Flags_SetEventChkInf(0x25);
if (gSaveContext.n64ddFlag) {
globalCtx->nextEntranceIndex = 0x47A;
gSaveContext.nextCutsceneIndex = 0;
} else {
Item_Give(globalCtx, ITEM_GORON_RUBY);
globalCtx->nextEntranceIndex = 0x13D;
gSaveContext.nextCutsceneIndex = 0xFFF1;
}
} else {
globalCtx->nextEntranceIndex = 0x47A;
gSaveContext.nextCutsceneIndex = 0;
@ -640,9 +645,16 @@ void DoorWarp1_RutoWarpOut(DoorWarp1* this, GlobalContext* globalCtx) {
if (this->warpTimer > sWarpTimerTarget && gSaveContext.nextCutsceneIndex == 0xFFEF) {
gSaveContext.eventChkInf[3] |= 0x80;
if (gSaveContext.n64ddFlag) {
globalCtx->nextEntranceIndex = 0x10E;
gSaveContext.nextCutsceneIndex = 0;
} else {
Item_Give(globalCtx, ITEM_ZORA_SAPPHIRE);
globalCtx->nextEntranceIndex = 0x10E;
gSaveContext.nextCutsceneIndex = 0xFFF0;
}
globalCtx->sceneLoadFlag = 0x14;
globalCtx->fadeTransition = 7;
}

View file

@ -627,6 +627,9 @@ static GetItemEntry sGetItemTable[] = {
GET_ITEM(ITEM_MEDALLION_WATER, OBJECT_GI_MEDAL, GID_MEDALLION_WATER, 0x3D, 0x80, CHEST_ANIM_LONG),
GET_ITEM(ITEM_MEDALLION_SHADOW, OBJECT_GI_MEDAL, GID_MEDALLION_SHADOW, 0x41, 0x80, CHEST_ANIM_LONG),
GET_ITEM(ITEM_MEDALLION_SPIRIT, OBJECT_GI_MEDAL, GID_MEDALLION_SPIRIT, 0x3F, 0x80, CHEST_ANIM_LONG),
GET_ITEM(ITEM_KOKIRI_EMERALD, OBJECT_GI_COIN, GID_NCOIN_GREEN, 0x80, 0x80, CHEST_ANIM_LONG),
GET_ITEM(ITEM_GORON_RUBY, OBJECT_GI_COIN, GID_NCOIN_RED, 0x81, 0x80, CHEST_ANIM_LONG),
GET_ITEM(ITEM_ZORA_SAPPHIRE, OBJECT_GI_COIN, GID_NCOIN_BLUE, 0x82, 0x80, CHEST_ANIM_LONG),
GET_ITEM_NONE,
GET_ITEM_NONE,
};