mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-23 06:35:33 -07:00
start great fairy item replacement (dins etc.)
This commit is contained in:
parent
218c2257da
commit
0970e80c60
5 changed files with 274 additions and 14 deletions
|
@ -791,14 +791,253 @@ GetItemID Randomizer::GetItemFromActor(s16 actorId, s16 actorParams, s16 sceneNu
|
||||||
return GetItemFromGet(this->itemLocations[GetCheckFromActor(sceneNum, actorId, actorParams)], ogItemId);
|
return GetItemFromGet(this->itemLocations[GetCheckFromActor(sceneNum, actorId, actorParams)], ogItemId);
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemID Randomizer::GetItemIdFromGetItem(GetItemID getItemId) {
|
ItemID Randomizer::GetItemidFromGetitemid(GetItemID getItemId) {
|
||||||
return GetItemFromGetItem(getItemId);
|
|
||||||
}
|
|
||||||
|
|
||||||
ItemID Randomizer::GetItemFromGetItem(GetItemID getItemId) {
|
|
||||||
switch (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:
|
case GI_MEDALLION_FIRE:
|
||||||
return ITEM_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) {
|
RandomizerCheck Randomizer::GetCheckFromActor(s16 sceneNum, s16 actorId, s16 actorParams) {
|
||||||
if (!gSaveContext.n64ddFlag) {
|
if (!gSaveContext.n64ddFlag) {
|
||||||
return UNKNOWN_CHECK;
|
return UNKNOWN_CHECK;
|
||||||
|
|
|
@ -21,8 +21,8 @@ class Randomizer {
|
||||||
s16 GetItemModelFromId(s16 itemId);
|
s16 GetItemModelFromId(s16 itemId);
|
||||||
void LoadItemLocations(const char* spoilerFileName);
|
void LoadItemLocations(const char* spoilerFileName);
|
||||||
void ParseItemLocations(const char* spoilerFileName);
|
void ParseItemLocations(const char* spoilerFileName);
|
||||||
ItemID GetItemIdFromGetItem(GetItemID getItemId);
|
ItemID GetItemidFromGetitemid(GetItemID getItemId);
|
||||||
ItemID GetItemFromGetItem(GetItemID getItemId);
|
GetItemID GetRandomizedItemIdFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogId);
|
||||||
GetItemID GetRandomizedItemId(GetItemID ogId, s16 actorId, s16 actorParams, s16 sceneNum);
|
GetItemID GetRandomizedItemId(GetItemID ogId, s16 actorId, s16 actorParams, s16 sceneNum);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1040,10 +1040,10 @@ extern "C" s32 GetRandomizedItemId(GetItemID ogId, s16 actorId, s16 actorParams,
|
||||||
return OTRGlobals::Instance->gRandomizer->GetRandomizedItemId(ogId, actorId, actorParams, sceneNum);
|
return OTRGlobals::Instance->gRandomizer->GetRandomizedItemId(ogId, actorId, actorParams, sceneNum);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" ItemID GetItemIdFromGetItem(GetItemID getItemId) {
|
extern "C" s32 GetRandomizedItemIdFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogId) {
|
||||||
return OTRGlobals::Instance->gRandomizer->GetItemIdFromGetItem(getItemId);
|
return OTRGlobals::Instance->gRandomizer->GetRandomizedItemIdFromKnownCheck(randomizerCheck, ogId);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" ItemID GetItemFromGetItem(GetItemID getItemId) {
|
extern "C" ItemID GetItemidFromGetitemid(GetItemID getItemId) {
|
||||||
return OTRGlobals::Instance->gRandomizer->GetItemFromGetItem(getItemId);
|
return OTRGlobals::Instance->gRandomizer->GetItemidFromGetitemid(getItemId);
|
||||||
}
|
}
|
|
@ -78,9 +78,9 @@ void LoadItemLocations(const char* spoilerFileName);
|
||||||
void ParseItemLocations(const char* spoilerfilename);
|
void ParseItemLocations(const char* spoilerfilename);
|
||||||
ItemID GetItemIdFromGetItem(GetItemID getItemId);
|
ItemID GetItemIdFromGetItem(GetItemID getItemId);
|
||||||
s16 GetItemModelFromId(s16 itemId);
|
s16 GetItemModelFromId(s16 itemId);
|
||||||
ItemID GetItemFromGetItem(GetItemID getItemId);
|
ItemID GetItemidFromGetitemid(GetItemID getItemId);
|
||||||
s32 GetRandomizedItemId(GetItemID ogId, s16 actorId, s16 actorParams, s16 sceneNum);
|
s32 GetRandomizedItemId(GetItemID ogId, s16 actorId, s16 actorParams, s16 sceneNum);
|
||||||
|
s32 GetRandomizedItemIdFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogId);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -208,6 +208,8 @@ void BgDyYoseizo_ChooseType(BgDyYoseizo* this, GlobalContext* globalCtx) {
|
||||||
|
|
||||||
if (globalCtx->sceneNum != SCENE_DAIYOUSEI_IZUMI) {
|
if (globalCtx->sceneNum != SCENE_DAIYOUSEI_IZUMI) {
|
||||||
switch (this->fountainType) {
|
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:
|
case FAIRY_SPELL_FARORES_WIND:
|
||||||
if (!(gSaveContext.itemGetInf[1] & 0x100)) {
|
if (!(gSaveContext.itemGetInf[1] & 0x100)) {
|
||||||
givingReward = true;
|
givingReward = true;
|
||||||
|
@ -226,6 +228,8 @@ void BgDyYoseizo_ChooseType(BgDyYoseizo* this, GlobalContext* globalCtx) {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch (this->fountainType) {
|
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:
|
case FAIRY_UPGRADE_MAGIC:
|
||||||
if (!gSaveContext.magicAcquired || BREG(2)) {
|
if (!gSaveContext.magicAcquired || BREG(2)) {
|
||||||
// "Spin Attack speed UP"
|
// "Spin Attack speed UP"
|
||||||
|
@ -764,7 +768,20 @@ void BgDyYoseizo_Give_Reward(BgDyYoseizo* this, GlobalContext* globalCtx) {
|
||||||
gSaveContext.healthAccumulator = 0x140;
|
gSaveContext.healthAccumulator = 0x140;
|
||||||
Interface_ChangeAlpha(9);
|
Interface_ChangeAlpha(9);
|
||||||
gSaveContext.itemGetInf[1] |= sItemGetFlags[actionIndex];
|
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 {
|
} else {
|
||||||
this->item->actor.world.pos.x = player->actor.world.pos.x;
|
this->item->actor.world.pos.x = player->actor.world.pos.x;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue