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);
|
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) {
|
GetItemID Randomizer::GetItemFromGet(RandomizerGet randoGet, GetItemID ogItemId) {
|
||||||
switch(randoGet) {
|
switch(randoGet) {
|
||||||
case UNKNOWN_GET:
|
case UNKNOWN_GET:
|
||||||
|
@ -992,6 +981,26 @@ GetItemID Randomizer::GetItemFromGet(RandomizerGet randoGet, GetItemID ogItemId)
|
||||||
return GI_SEEDS_30;
|
return GI_SEEDS_30;
|
||||||
case BOTTLE_WITH_BIG_POE:
|
case BOTTLE_WITH_BIG_POE:
|
||||||
return GI_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:
|
case PIECE_OF_HEART_TREASURE_CHEST_GAME:
|
||||||
return GI_HEART_PIECE_WIN;
|
return GI_HEART_PIECE_WIN;
|
||||||
case DEKU_STICK_CAPACITY:
|
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) {
|
RandomizerCheck Randomizer::GetCheckFromActor(s16 sceneNum, s16 actorId, s16 actorParams) {
|
||||||
if (!gSaveContext.n64ddFlag) {
|
if (!gSaveContext.n64ddFlag) {
|
||||||
return UNKNOWN_CHECK;
|
return UNKNOWN_CHECK;
|
||||||
|
@ -1590,6 +1603,26 @@ RandomizerCheck Randomizer::GetCheckFromActor(s16 sceneNum, s16 actorId, s16 act
|
||||||
case 262:
|
case 262:
|
||||||
return ZF_ICEBERG_FREESTANDING_POH;
|
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;
|
return UNKNOWN_CHECK;
|
||||||
|
|
|
@ -21,8 +21,7 @@ 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);
|
GetItemID GetRandomizedItemIdFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogId);
|
||||||
ItemID GetItemFromGetItem(GetItemID getItemId);
|
|
||||||
GetItemID GetRandomizedItemId(GetItemID ogId, s16 actorId, s16 actorParams, s16 sceneNum);
|
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);
|
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) {
|
|
||||||
return OTRGlobals::Instance->gRandomizer->GetItemFromGetItem(getItemId);
|
|
||||||
}
|
|
|
@ -78,9 +78,8 @@ 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);
|
|
||||||
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
|
|
@ -67,6 +67,21 @@ const ActorInit Bg_Dy_Yoseizo_InitVars = {
|
||||||
NULL,
|
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) {
|
void BgDyYoseizo_Init(Actor* thisx, GlobalContext* globalCtx2) {
|
||||||
GlobalContext* globalCtx = globalCtx2;
|
GlobalContext* globalCtx = globalCtx2;
|
||||||
BgDyYoseizo* this = (BgDyYoseizo*)thisx;
|
BgDyYoseizo* this = (BgDyYoseizo*)thisx;
|
||||||
|
@ -182,6 +197,18 @@ void BgDyYoseizo_Bob(BgDyYoseizo* this, GlobalContext* globalCtx) {
|
||||||
void BgDyYoseizo_CheckMagicAcquired(BgDyYoseizo* this, GlobalContext* globalCtx) {
|
void BgDyYoseizo_CheckMagicAcquired(BgDyYoseizo* this, GlobalContext* globalCtx) {
|
||||||
if (Flags_GetSwitch(globalCtx, 0x38)) {
|
if (Flags_GetSwitch(globalCtx, 0x38)) {
|
||||||
globalCtx->msgCtx.ocarinaMode = OCARINA_MODE_04;
|
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 (globalCtx->sceneNum == SCENE_DAIYOUSEI_IZUMI) {
|
||||||
if (!gSaveContext.magicAcquired && (this->fountainType != FAIRY_UPGRADE_MAGIC)) {
|
if (!gSaveContext.magicAcquired && (this->fountainType != FAIRY_UPGRADE_MAGIC)) {
|
||||||
Actor_Kill(&this->actor);
|
Actor_Kill(&this->actor);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue