start great fairy item replacement (dins etc.)

This commit is contained in:
briaguya 2022-05-30 05:51:46 -04:00
commit 0970e80c60
5 changed files with 274 additions and 14 deletions

View file

@ -791,14 +791,253 @@ GetItemID Randomizer::GetItemFromActor(s16 actorId, s16 actorParams, s16 sceneNu
return GetItemFromGet(this->itemLocations[GetCheckFromActor(sceneNum, actorId, actorParams)], ogItemId);
}
ItemID Randomizer::GetItemIdFromGetItem(GetItemID getItemId) {
return GetItemFromGetItem(getItemId);
}
ItemID Randomizer::GetItemFromGetItem(GetItemID getItemId) {
ItemID Randomizer::GetItemidFromGetitemid(GetItemID getItemId) {
switch (getItemId) {
case GI_STICKS_1:
return ITEM_STICK;
case GI_BOMBS_1:
return ITEM_BOMB;
case GI_BOW:
return ITEM_BOW;
case GI_ARROW_FIRE:
return ITEM_ARROW_FIRE;
case GI_DINS_FIRE:
return ITEM_DINS_FIRE;
case GI_SLINGSHOT:
return ITEM_SLINGSHOT;
case GI_OCARINA_FAIRY:
return ITEM_OCARINA_FAIRY;
case GI_OCARINA_OOT:
return ITEM_OCARINA_TIME;
case GI_LONGSHOT:
return ITEM_BOMBCHU;
case GI_HOOKSHOT:
return ITEM_HOOKSHOT;
case GI_LETTER_ZELDA:
return ITEM_LONGSHOT;
case GI_ARROW_ICE:
return ITEM_ARROW_ICE;
case GI_FARORES_WIND:
return ITEM_FARORES_WIND;
case GI_BOOMERANG:
return ITEM_BOOMERANG;
case GI_LENS:
return ITEM_LENS;
case GI_BEAN:
return ITEM_BEAN;
case GI_HAMMER:
return ITEM_HAMMER;
case GI_ARROW_LIGHT:
return ITEM_ARROW_LIGHT;
case GI_NAYRUS_LOVE:
return ITEM_NAYRUS_LOVE;
case GI_BOTTLE:
return ITEM_BOTTLE;
case GI_POTION_RED:
return ITEM_POTION_RED;
case GI_POTION_GREEN:
return ITEM_POTION_GREEN;
case GI_POTION_BLUE:
return ITEM_POTION_BLUE;
case GI_FAIRY:
return ITEM_FAIRY;
case GI_FISH:
return ITEM_FISH;
case GI_MILK_BOTTLE:
return ITEM_MILK_BOTTLE;
case GI_LETTER_RUTO:
return ITEM_LETTER_RUTO;
case GI_BLUE_FIRE:
return ITEM_BLUE_FIRE;
case GI_BUGS:
return ITEM_BUG;
case GI_BIG_POE:
return ITEM_BIG_POE;
case GI_POE:
return ITEM_POE;
case GI_WEIRD_EGG:
return ITEM_WEIRD_EGG;
case GI_CHICKEN:
return ITEM_CHICKEN;
case GI_MASK_KEATON:
return ITEM_MASK_KEATON;
case GI_MASK_SKULL:
return ITEM_MASK_SKULL;
case GI_MASK_SPOOKY:
return ITEM_MASK_SPOOKY;
case GI_MASK_BUNNY:
return ITEM_MASK_BUNNY;
case GI_MASK_GORON:
return ITEM_MASK_GORON;
case GI_MASK_ZORA:
return ITEM_MASK_ZORA;
case GI_MASK_GERUDO:
return ITEM_MASK_GERUDO;
case GI_MASK_TRUTH:
return ITEM_MASK_TRUTH;
case GI_POCKET_EGG:
return ITEM_POCKET_EGG;
case GI_POCKET_CUCCO:
return ITEM_POCKET_CUCCO;
case GI_COJIRO:
return ITEM_COJIRO;
case GI_ODD_MUSHROOM:
return ITEM_ODD_MUSHROOM;
case GI_ODD_POTION:
return ITEM_ODD_POTION;
case GI_SAW:
return ITEM_SAW;
case GI_SWORD_BROKEN:
return ITEM_SWORD_BROKEN;
case GI_PRESCRIPTION:
return ITEM_PRESCRIPTION;
case GI_FROG:
return ITEM_FROG;
case GI_EYEDROPS:
return ITEM_EYEDROPS;
case GI_CLAIM_CHECK:
return ITEM_CLAIM_CHECK;
case GI_SWORD_KOKIRI:
return ITEM_SWORD_KOKIRI;
case GI_SWORD_BGS:
return ITEM_SWORD_BGS;
case GI_SHIELD_DEKU:
return ITEM_SHIELD_DEKU;
case GI_SHIELD_HYLIAN:
return ITEM_SHIELD_HYLIAN;
case GI_SHIELD_MIRROR:
return ITEM_SHIELD_MIRROR;
case GI_TUNIC_GORON:
return ITEM_TUNIC_GORON;
case GI_TUNIC_ZORA:
return ITEM_TUNIC_ZORA;
case GI_BOOTS_IRON:
return ITEM_BOOTS_IRON;
case GI_BOOTS_HOVER:
return ITEM_BOOTS_HOVER;
case GI_BULLET_BAG_30:
return ITEM_BULLET_BAG_30;
case GI_BULLET_BAG_40:
return ITEM_BULLET_BAG_40;
case GI_BULLET_BAG_50:
return ITEM_BULLET_BAG_50;
case GI_QUIVER_40:
return ITEM_QUIVER_40;
case GI_QUIVER_50:
return ITEM_QUIVER_50;
case GI_BOMB_BAG_20:
return ITEM_BOMB_BAG_20;
case GI_BOMB_BAG_30:
return ITEM_BOMB_BAG_30;
case GI_BOMB_BAG_40:
return ITEM_BOMB_BAG_40;
case GI_BRACELET:
return ITEM_BRACELET;
case GI_GAUNTLETS_SILVER:
return ITEM_GAUNTLETS_SILVER;
case GI_GAUNTLETS_GOLD:
return ITEM_GAUNTLETS_GOLD;
case GI_SCALE_SILVER:
return ITEM_SCALE_SILVER;
case GI_SCALE_GOLD:
return ITEM_SCALE_GOLDEN;
case GI_SWORD_KNIFE:
return ITEM_SWORD_KNIFE;
case GI_WALLET_ADULT:
return ITEM_WALLET_ADULT;
case GI_WALLET_GIANT:
return ITEM_WALLET_GIANT;
case GI_MEDALLION_FOREST:
return ITEM_MEDALLION_FOREST;
case GI_MEDALLION_FIRE:
return ITEM_MEDALLION_FIRE;
case GI_MEDALLION_WATER:
return ITEM_MEDALLION_WATER;
case GI_MEDALLION_SHADOW:
return ITEM_MEDALLION_SPIRIT;
case GI_MEDALLION_SPIRIT:
return ITEM_MEDALLION_SHADOW;
case GI_MEDALLION_LIGHT:
return ITEM_MEDALLION_LIGHT;
case GI_STONE_KOKIRI:
return ITEM_KOKIRI_EMERALD;
case GI_STONE_GORON:
return ITEM_GORON_RUBY;
case GI_STONE_ZORA:
return ITEM_ZORA_SAPPHIRE;
case GI_STONE_OF_AGONY:
return ITEM_STONE_OF_AGONY;
case GI_GERUDO_CARD:
return ITEM_GERUDO_CARD;
case GI_HEART_CONTAINER:
return ITEM_HEART_CONTAINER;
case GI_HEART_PIECE:
return ITEM_HEART_PIECE;
case GI_KEY_BOSS:
return ITEM_KEY_BOSS;
case GI_COMPASS:
return ITEM_COMPASS;
case GI_MAP:
return ITEM_DUNGEON_MAP;
case GI_KEY_SMALL:
return ITEM_KEY_SMALL;
case GI_MAGIC_SMALL:
return ITEM_MAGIC_SMALL;
case GI_MAGIC_LARGE:
return ITEM_MAGIC_LARGE;
case GI_MILK:
return ITEM_MILK;
case GI_HEART:
return ITEM_HEART;
case GI_RUPEE_GREEN:
return ITEM_RUPEE_GREEN;
case GI_RUPEE_BLUE:
return ITEM_RUPEE_BLUE;
case GI_RUPEE_RED:
return ITEM_RUPEE_RED;
case GI_RUPEE_PURPLE:
return ITEM_RUPEE_PURPLE;
case GI_RUPEE_GOLD:
return ITEM_RUPEE_GOLD;
case GI_STICKS_5:
return ITEM_STICKS_5;
case GI_STICKS_10:
return ITEM_STICKS_10;
case GI_NUTS_5:
return ITEM_NUTS_5;
case GI_NUTS_10:
return ITEM_NUTS_10;
case GI_BOMBS_5:
return ITEM_BOMBS_5;
case GI_BOMBS_10:
return ITEM_BOMBS_10;
case GI_BOMBS_20:
return ITEM_BOMBS_20;
case GI_BOMBS_30:
return ITEM_BOMBS_30;
case GI_ARROWS_SMALL:
return ITEM_ARROWS_SMALL;
case GI_ARROWS_MEDIUM:
return ITEM_ARROWS_MEDIUM;
case GI_ARROWS_LARGE:
return ITEM_ARROWS_LARGE;
case GI_SEEDS_30:
return ITEM_SEEDS_30;
case GI_BOMBCHUS_5:
return ITEM_BOMBCHUS_5;
case GI_BOMBCHUS_20:
return ITEM_BOMBCHUS_20;
case GI_STICK_UPGRADE_20:
return ITEM_STICK_UPGRADE_20;
case GI_STICK_UPGRADE_30:
return ITEM_STICK_UPGRADE_30;
case GI_NUT_UPGRADE_30:
return ITEM_NUT_UPGRADE_30;
case GI_NUT_UPGRADE_40:
return ITEM_NUT_UPGRADE_40;
case GI_NONE:
default:
return ITEM_NONE;
}
}
@ -1041,6 +1280,10 @@ GetItemID Randomizer::GetItemFromGet(RandomizerGet randoGet, GetItemID ogItemId)
}
}
GetItemID Randomizer::GetRandomizedItemIdFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogId) {
return GetItemFromGet(this->itemLocations[randomizerCheck], ogId);
}
RandomizerCheck Randomizer::GetCheckFromActor(s16 sceneNum, s16 actorId, s16 actorParams) {
if (!gSaveContext.n64ddFlag) {
return UNKNOWN_CHECK;

View file

@ -21,8 +21,8 @@ class Randomizer {
s16 GetItemModelFromId(s16 itemId);
void LoadItemLocations(const char* spoilerFileName);
void ParseItemLocations(const char* spoilerFileName);
ItemID GetItemIdFromGetItem(GetItemID getItemId);
ItemID GetItemFromGetItem(GetItemID getItemId);
ItemID GetItemidFromGetitemid(GetItemID getItemId);
GetItemID GetRandomizedItemIdFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogId);
GetItemID GetRandomizedItemId(GetItemID ogId, s16 actorId, s16 actorParams, s16 sceneNum);
};

View file

@ -1040,10 +1040,10 @@ extern "C" s32 GetRandomizedItemId(GetItemID ogId, s16 actorId, s16 actorParams,
return OTRGlobals::Instance->gRandomizer->GetRandomizedItemId(ogId, actorId, actorParams, sceneNum);
}
extern "C" ItemID GetItemIdFromGetItem(GetItemID getItemId) {
return OTRGlobals::Instance->gRandomizer->GetItemIdFromGetItem(getItemId);
extern "C" s32 GetRandomizedItemIdFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogId) {
return OTRGlobals::Instance->gRandomizer->GetRandomizedItemIdFromKnownCheck(randomizerCheck, ogId);
}
extern "C" ItemID GetItemFromGetItem(GetItemID getItemId) {
return OTRGlobals::Instance->gRandomizer->GetItemFromGetItem(getItemId);
extern "C" ItemID GetItemidFromGetitemid(GetItemID getItemId) {
return OTRGlobals::Instance->gRandomizer->GetItemidFromGetitemid(getItemId);
}

View file

@ -78,9 +78,9 @@ void LoadItemLocations(const char* spoilerFileName);
void ParseItemLocations(const char* spoilerfilename);
ItemID GetItemIdFromGetItem(GetItemID getItemId);
s16 GetItemModelFromId(s16 itemId);
ItemID GetItemFromGetItem(GetItemID getItemId);
ItemID GetItemidFromGetitemid(GetItemID getItemId);
s32 GetRandomizedItemId(GetItemID ogId, s16 actorId, s16 actorParams, s16 sceneNum);
s32 GetRandomizedItemIdFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogId);
#endif
#endif

View file

@ -208,6 +208,8 @@ void BgDyYoseizo_ChooseType(BgDyYoseizo* this, GlobalContext* globalCtx) {
if (globalCtx->sceneNum != SCENE_DAIYOUSEI_IZUMI) {
switch (this->fountainType) {
// todo ensure we're seting givingReward based on if the check has been checked,
// not based on if the spell is in inventory
case FAIRY_SPELL_FARORES_WIND:
if (!(gSaveContext.itemGetInf[1] & 0x100)) {
givingReward = true;
@ -226,6 +228,8 @@ void BgDyYoseizo_ChooseType(BgDyYoseizo* this, GlobalContext* globalCtx) {
}
} else {
switch (this->fountainType) {
// todo ensure we're setting givingReward based on if the check has been checked,
// not based on magic meter
case FAIRY_UPGRADE_MAGIC:
if (!gSaveContext.magicAcquired || BREG(2)) {
// "Spin Attack speed UP"
@ -764,7 +768,20 @@ void BgDyYoseizo_Give_Reward(BgDyYoseizo* this, GlobalContext* globalCtx) {
gSaveContext.healthAccumulator = 0x140;
Interface_ChangeAlpha(9);
gSaveContext.itemGetInf[1] |= sItemGetFlags[actionIndex];
Item_Give(globalCtx, sItemIds[actionIndex]);
if(gSaveContext.n64ddFlag) {
switch(sItemIds[actionIndex]) {
case ITEM_DINS_FIRE:
Item_Give(globalCtx, GetItemidFromGetitemid(GetRandomizedItemIdFromKnownCheck(OGC_GREAT_FAIRY_REWARD, GI_DINS_FIRE)));
break;
case ITEM_FARORES_WIND:
Item_Give(globalCtx, GetItemidFromGetitemid(GetRandomizedItemIdFromKnownCheck(ZF_GREAT_FAIRY_REWARD, GI_FARORES_WIND)));
break;
case ITEM_NAYRUS_LOVE:
Item_Give(globalCtx, GetItemidFromGetitemid(GetRandomizedItemIdFromKnownCheck(COLOSSUS_GREAT_FAIRY_REWARD, GI_NAYRUS_LOVE)));
}
} else {
Item_Give(globalCtx, sItemIds[actionIndex]);
}
}
} else {
this->item->actor.world.pos.x = player->actor.world.pos.x;