Merge pull request #17 from briaguya-ai/great-fairy-items

Great fairy items
This commit is contained in:
briaguya 2022-05-30 17:22:03 -04:00 committed by GitHub
commit 5787c4d2b9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 75 additions and 21 deletions

View file

@ -791,17 +791,6 @@ 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) {
switch (getItemId) {
case GI_MEDALLION_FIRE:
return ITEM_MEDALLION_FIRE;
}
}
GetItemID Randomizer::GetItemFromGet(RandomizerGet randoGet, GetItemID ogItemId) {
switch(randoGet) {
case UNKNOWN_GET:
@ -992,6 +981,26 @@ GetItemID Randomizer::GetItemFromGet(RandomizerGet randoGet, GetItemID ogItemId)
return GI_SEEDS_30;
case BOTTLE_WITH_BIG_POE:
return GI_BIG_POE;
case BOTTLE:
return GI_BOTTLE;
case BOTTLE_WITH_BLUE_FIRE:
return GI_BLUE_FIRE;
case BOTTLE_WITH_BLUE_POTION:
return GI_POTION_BLUE;
case BOTTLE_WITH_BUGS:
return GI_BUGS;
case BOTTLE_WITH_FAIRY:
return GI_FAIRY;
case BOTTLE_WITH_FISH:
return GI_FISH;
case BOTTLE_WITH_GREEN_POTION:
return GI_POTION_GREEN;
case BOTTLE_WITH_MILK:
return GI_MILK_BOTTLE;
case BOTTLE_WITH_POE:
return GI_POE;
case BOTTLE_WITH_RED_POTION:
return GI_POTION_RED;
case PIECE_OF_HEART_TREASURE_CHEST_GAME:
return GI_HEART_PIECE_WIN;
case DEKU_STICK_CAPACITY:
@ -1041,6 +1050,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;
@ -1590,6 +1603,26 @@ RandomizerCheck Randomizer::GetCheckFromActor(s16 sceneNum, s16 actorId, s16 act
case 262:
return ZF_ICEBERG_FREESTANDING_POH;
}
case 59:
// using fountainType as actorParams
switch(actorParams) {
case 1:
return DMT_GREAT_FAIRY_REWARD;
case 2:
return DMC_GREAT_FAIRY_REWARD;
case 3:
return OGC_GREAT_FAIRY_REWARD;
}
case 61:
// using fountainType as actorParams
switch(actorParams) {
case 1:
return ZF_GREAT_FAIRY_REWARD;
case 2:
return HC_GREAT_FAIRY_REWARD;
case 3:
return COLOSSUS_GREAT_FAIRY_REWARD;
}
}
return UNKNOWN_CHECK;

View file

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

View file

@ -1040,10 +1040,6 @@ 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" ItemID GetItemFromGetItem(GetItemID getItemId) {
return OTRGlobals::Instance->gRandomizer->GetItemFromGetItem(getItemId);
extern "C" s32 GetRandomizedItemIdFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogId) {
return OTRGlobals::Instance->gRandomizer->GetRandomizedItemIdFromKnownCheck(randomizerCheck, ogId);
}

View file

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

View file

@ -67,6 +67,21 @@ const ActorInit Bg_Dy_Yoseizo_InitVars = {
NULL,
};
u8 successGreatFairy;
void GivePlayerRandoRewardGreatFairy(BgDyYoseizo* this, GlobalContext* globalCtx) {
Player* player = GET_PLAYER(globalCtx);
GetItemID getItemId = GetRandomizedItemId(GI_NONE, this->actor.id, this->fountainType + 1, globalCtx->sceneNum);
if (successGreatFairy && !Player_InBlockingCsMode(globalCtx, GET_PLAYER(globalCtx))) {
Flags_SetTreasure(globalCtx, this->fountainType + 1);
successGreatFairy = 0;
Actor_Kill(&this->actor);
} else if (!successGreatFairy) {
successGreatFairy = func_8002F434(&this->actor, globalCtx, getItemId, 10000.0f, 100.0f);
}
}
void BgDyYoseizo_Init(Actor* thisx, GlobalContext* globalCtx2) {
GlobalContext* globalCtx = globalCtx2;
BgDyYoseizo* this = (BgDyYoseizo*)thisx;
@ -182,6 +197,18 @@ void BgDyYoseizo_Bob(BgDyYoseizo* this, GlobalContext* globalCtx) {
void BgDyYoseizo_CheckMagicAcquired(BgDyYoseizo* this, GlobalContext* globalCtx) {
if (Flags_GetSwitch(globalCtx, 0x38)) {
globalCtx->msgCtx.ocarinaMode = OCARINA_MODE_04;
if(gSaveContext.n64ddFlag) {
gSaveContext.healthAccumulator = 0x140;
Magic_Fill(globalCtx);
if(Flags_GetTreasure(globalCtx, this->fountainType + 1)) {
Actor_Kill(&this->actor);
} else {
GivePlayerRandoRewardGreatFairy(this, globalCtx);
}
return;
}
if (globalCtx->sceneNum == SCENE_DAIYOUSEI_IZUMI) {
if (!gSaveContext.magicAcquired && (this->fountainType != FAIRY_UPGRADE_MAGIC)) {
Actor_Kill(&this->actor);