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

View file

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

View file

@ -1007,6 +1007,12 @@ GetItemID Randomizer::GetItemFromGet(RandomizerGet randoGet, GetItemID ogItemId)
return GI_MEDALLION_SHADOW; return GI_MEDALLION_SHADOW;
case SPIRIT_MEDALLION: case SPIRIT_MEDALLION:
return GI_MEDALLION_SPIRIT; 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: default:
return ogItemId; return ogItemId;
} }
@ -1034,6 +1040,20 @@ RandomizerCheck Randomizer::GetCheckFromActor(s16 sceneNum, s16 actorId, s16 act
case 93: case 93:
return QUEEN_GOHMA; 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: case 40:
switch(actorParams) { switch(actorParams) {
case 22944: case 22944:

View file

@ -367,6 +367,12 @@ DrawItemTableEntry sDrawItemTable[] = {
{ GetItem_DrawOpa0, { gGiKokiriSwordDL } }, { GetItem_DrawOpa0, { gGiKokiriSwordDL } },
// gold skulltula token, OBJECT_ST // gold skulltula token, OBJECT_ST
{ GetItem_DrawSkullToken, { object_st_DL_004DB0, object_st_DL_004EB8 } }, { 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 (globalCtx->sceneNum == SCENE_DDAN_BOSS) {
if (!Flags_GetEventChkInf(0x25)) { if (!Flags_GetEventChkInf(0x25)) {
Flags_SetEventChkInf(0x25); Flags_SetEventChkInf(0x25);
Item_Give(globalCtx, ITEM_GORON_RUBY); if (gSaveContext.n64ddFlag) {
globalCtx->nextEntranceIndex = 0x13D; globalCtx->nextEntranceIndex = 0x47A;
gSaveContext.nextCutsceneIndex = 0xFFF1; gSaveContext.nextCutsceneIndex = 0;
} else {
Item_Give(globalCtx, ITEM_GORON_RUBY);
globalCtx->nextEntranceIndex = 0x13D;
gSaveContext.nextCutsceneIndex = 0xFFF1;
}
} else { } else {
globalCtx->nextEntranceIndex = 0x47A; globalCtx->nextEntranceIndex = 0x47A;
gSaveContext.nextCutsceneIndex = 0; gSaveContext.nextCutsceneIndex = 0;
@ -640,9 +645,16 @@ void DoorWarp1_RutoWarpOut(DoorWarp1* this, GlobalContext* globalCtx) {
if (this->warpTimer > sWarpTimerTarget && gSaveContext.nextCutsceneIndex == 0xFFEF) { if (this->warpTimer > sWarpTimerTarget && gSaveContext.nextCutsceneIndex == 0xFFEF) {
gSaveContext.eventChkInf[3] |= 0x80; gSaveContext.eventChkInf[3] |= 0x80;
Item_Give(globalCtx, ITEM_ZORA_SAPPHIRE);
globalCtx->nextEntranceIndex = 0x10E; if (gSaveContext.n64ddFlag) {
gSaveContext.nextCutsceneIndex = 0xFFF0; globalCtx->nextEntranceIndex = 0x10E;
gSaveContext.nextCutsceneIndex = 0;
} else {
Item_Give(globalCtx, ITEM_ZORA_SAPPHIRE);
globalCtx->nextEntranceIndex = 0x10E;
gSaveContext.nextCutsceneIndex = 0xFFF0;
}
globalCtx->sceneLoadFlag = 0x14; globalCtx->sceneLoadFlag = 0x14;
globalCtx->fadeTransition = 7; 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_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_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_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,
GET_ITEM_NONE, GET_ITEM_NONE,
}; };