mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-22 22:33:43 -07:00
Merge pull request #17 from briaguya-ai/great-fairy-items
Great fairy items
This commit is contained in:
commit
5787c4d2b9
5 changed files with 75 additions and 21 deletions
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
|
||||
|
|
|
@ -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" 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);
|
||||
}
|
|
@ -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
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue