Skip to content

Commit

Permalink
Merge pull request HarbourMasters#46 from MelonSpeedruns/testing-out-…
Browse files Browse the repository at this point in the history
…item-replacement

zelda fix + underwater ocarina + sun song spot
  • Loading branch information
briaguya-ai authored Jun 4, 2022
2 parents e243c18 + 53f687f commit 415256d
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 13 deletions.
18 changes: 16 additions & 2 deletions soh/src/code/z_play.c
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,17 @@ void Gameplay_Destroy(GameState* thisx) {
gGlobalCtx = NULL;
}

void GivePlayerRandoRewardSongOfTime(GlobalContext* globalCtx, RandomizerCheck check) {
Player* player = GET_PLAYER(globalCtx);

if (gSaveContext.entranceIndex == 0x050F && player != NULL && !Player_InBlockingCsMode(globalCtx, player) &&
!Flags_GetTreasure(globalCtx, 0x1F) && gSaveContext.nextTransition == 0xFF) {
GetItemID getItemId = GetRandomizedItemIdFromKnownCheck(check, GI_SONG_OF_TIME);
GiveItemWithoutActor(globalCtx, getItemId);
Flags_SetTreasure(globalCtx, 0x1F);
}
}

void GivePlayerRandoRewardSariaGift(GlobalContext* globalCtx, RandomizerCheck check) {
Player* player = GET_PLAYER(globalCtx);

Expand Down Expand Up @@ -436,7 +447,7 @@ void Gameplay_Update(GlobalContext* globalCtx) {

input = globalCtx->state.input;

if ((SREG(1) < 0) || (DREG(0) != 0)) {
if ((SREG(1) < 0) || (DREG(0) != 0)) {
SREG(1) = 0;
ZeldaArena_Display();
}
Expand Down Expand Up @@ -1057,7 +1068,10 @@ void Gameplay_Update(GlobalContext* globalCtx) {
Environment_Update(globalCtx, &globalCtx->envCtx, &globalCtx->lightCtx, &globalCtx->pauseCtx, &globalCtx->msgCtx,
&globalCtx->gameOverCtx, globalCtx->state.gfxCtx);

GivePlayerRandoRewardSariaGift(globalCtx, RC_LW_GIFT_FROM_SARIA);
if (gSaveContext.n64ddFlag) {
GivePlayerRandoRewardSariaGift(globalCtx, RC_LW_GIFT_FROM_SARIA);
GivePlayerRandoRewardSongOfTime(globalCtx, RC_SONG_FROM_OCARINA_OF_TIME);
}
}

void Gameplay_DrawOverlayElements(GlobalContext* globalCtx) {
Expand Down
24 changes: 20 additions & 4 deletions soh/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,7 @@ void func_80ABF708(EnOkarinaTag* this, GlobalContext* globalCtx) {
yawDiff = this->actor.yawTowardsPlayer - this->actor.world.rot.y;
this->unk_15A++;
if (!(this->actor.xzDistToPlayer > 120.0f)) {
if (CHECK_QUEST_ITEM(QUEST_SONG_SUN)) {
if (CHECK_QUEST_ITEM(QUEST_SONG_SUN) || gSaveContext.n64ddFlag) {
this->actor.textId = 0x5021;
}
yawDiffNew = ABS(yawDiff);
Expand All @@ -300,15 +300,31 @@ void func_80ABF708(EnOkarinaTag* this, GlobalContext* globalCtx) {
}
}

void GivePlayerRandoRewardSunSong(EnOkarinaTag* song, GlobalContext* globalCtx, RandomizerCheck check) {
if (song->actor.parent != NULL && song->actor.parent->id == GET_PLAYER(globalCtx)->actor.id &&
!Flags_GetTreasure(globalCtx, 0x1F)) {
Flags_SetTreasure(globalCtx, 0x1F);
} else if (!Flags_GetTreasure(globalCtx, 0x1F)) {
GetItemID getItemId = GetRandomizedItemIdFromKnownCheck(check, GI_LETTER_ZELDA);
func_8002F434(&song->actor, globalCtx, getItemId, 10000.0f, 100.0f);
}
}

void func_80ABF7CC(EnOkarinaTag* this, GlobalContext* globalCtx) {
// "Open sesame sesame!"
osSyncPrintf(VT_FGCOL(PURPLE) "☆☆☆☆☆ 開けゴマゴマゴマ! ☆☆☆☆☆ %d\n" VT_RST, Message_GetState(&globalCtx->msgCtx));

if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(globalCtx)) {
Message_CloseTextbox(globalCtx);
if (!CHECK_QUEST_ITEM(QUEST_SONG_SUN)) {
globalCtx->csCtx.segment = SEGMENTED_TO_VIRTUAL(&gSunSongGraveSunSongTeachCs);
gSaveContext.cutsceneTrigger = 1;
if (!gSaveContext.n64ddFlag) {
if (!CHECK_QUEST_ITEM(QUEST_SONG_SUN)) {
globalCtx->csCtx.segment = SEGMENTED_TO_VIRTUAL(&gSunSongGraveSunSongTeachCs);
gSaveContext.cutsceneTrigger = 1;
}
} else {
if (!Flags_GetTreasure(globalCtx, 0x1F)) {
GivePlayerRandoRewardSunSong(this, globalCtx, RC_SONG_FROM_ROYAL_FAMILYS_TOMB);
}
}
this->actionFunc = func_80ABF708;
}
Expand Down
5 changes: 2 additions & 3 deletions soh/src/overlays/actors/ovl_En_Zl4/z_en_zl4.c
Original file line number Diff line number Diff line change
Expand Up @@ -228,15 +228,14 @@ u16 EnZl4_GetText(GlobalContext* globalCtx, Actor* thisx) {
}

void GivePlayerRandoRewardZeldaChild(EnZl4* zelda, GlobalContext* globalCtx, RandomizerCheck check) {
GetItemID getItemId = GetRandomizedItemIdFromKnownCheck(check, GI_LETTER_ZELDA);

if (zelda->actor.parent != NULL && zelda->actor.parent->id == GET_PLAYER(globalCtx)->actor.id &&
!Flags_GetTreasure(globalCtx, 0x1E)) {
Flags_SetTreasure(globalCtx, 0x1E);
} else if (!Flags_GetTreasure(globalCtx, 0x1E) && Actor_TextboxIsClosing(&zelda->actor, globalCtx) &&
globalCtx->msgCtx.textId == 0x703C) {
GetItemID getItemId = GetRandomizedItemIdFromKnownCheck(check, GI_LETTER_ZELDA);
func_8002F434(&zelda->actor, globalCtx, getItemId, 10000.0f, 100.0f);
} else if (!Player_InBlockingCsMode(globalCtx, GET_PLAYER(globalCtx))) {
} else if (Flags_GetTreasure(globalCtx, 0x1E) && !Player_InBlockingCsMode(globalCtx, GET_PLAYER(globalCtx))) {
gSaveContext.unk_13EE = 0x32;
gSaveContext.eventChkInf[4] |= 1;
}
Expand Down
21 changes: 17 additions & 4 deletions soh/src/overlays/actors/ovl_Item_Ocarina/z_item_ocarina.c
Original file line number Diff line number Diff line change
Expand Up @@ -169,8 +169,16 @@ void ItemOcarina_DoNothing(ItemOcarina* this, GlobalContext* globalCtx) {

void ItemOcarina_StartSoTCutscene(ItemOcarina* this, GlobalContext* globalCtx) {
if (Actor_TextboxIsClosing(&this->actor, globalCtx)) {
globalCtx->csCtx.segment = SEGMENTED_TO_VIRTUAL(gHyruleFieldZeldaSongOfTimeCs);
gSaveContext.cutsceneTrigger = 1;
if (!gSaveContext.n64ddFlag) {
globalCtx->csCtx.segment = SEGMENTED_TO_VIRTUAL(gHyruleFieldZeldaSongOfTimeCs);
gSaveContext.cutsceneTrigger = 1;
} else {
globalCtx->sceneLoadFlag = 0x14;
globalCtx->fadeTransition = 3;
gSaveContext.nextTransition = 3;
globalCtx->nextEntranceIndex = 0x050F;
gSaveContext.nextCutsceneIndex = 0;
}
}
}

Expand All @@ -181,7 +189,11 @@ void ItemOcarina_WaitInWater(ItemOcarina* this, GlobalContext* globalCtx) {
this->actionFunc = ItemOcarina_StartSoTCutscene;
this->actor.draw = NULL;
} else {
func_8002F434(&this->actor, globalCtx, GI_OCARINA_OOT, 30.0f, 50.0f);
func_8002F434(&this->actor, globalCtx,
gSaveContext.n64ddFlag
? GetRandomizedItemIdFromKnownCheck(RC_HF_OCARINA_OF_TIME_ITEM, GI_OCARINA_OOT)
: GI_OCARINA_OOT,
30.0f, 50.0f);

if ((globalCtx->gameplayFrames & 13) == 0) {
EffectSsBubble_Spawn(globalCtx, &this->actor.world.pos, 0.0f, 0.0f, 10.0f, 0.13f);
Expand All @@ -200,5 +212,6 @@ void ItemOcarina_Draw(Actor* thisx, GlobalContext* globalCtx) {

func_8002EBCC(thisx, globalCtx, 0);
func_8002ED80(thisx, globalCtx, 0);
GetItem_Draw(globalCtx, GID_OCARINA_TIME);

GetItem_Draw(globalCtx, gSaveContext.n64ddFlag ? GetItemModelFromId(GetRandomizedItemIdFromKnownCheck(RC_HF_OCARINA_OF_TIME_ITEM, GI_OCARINA_OOT)) : GID_OCARINA_TIME);
}

0 comments on commit 415256d

Please sign in to comment.