Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include "soh/Enhancements/game-interactor/GameInteractor.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/ShipInit.hpp"
#include "soh/Enhancements/randomizer/context.h"

extern "C" {
#include "z64save.h"
Expand All @@ -17,9 +18,12 @@ void RegisterSkipLostWoodsBridge() {
COND_VB_SHOULD(VB_PLAY_TRANSITION_CS, CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO), {
if ((gSaveContext.entranceIndex == ENTR_LOST_WOODS_BRIDGE_EAST_EXIT) &&
!Flags_GetEventChkInf(EVENTCHKINF_SPOKE_TO_SARIA_ON_BRIDGE)) {
Flags_SetEventChkInf(EVENTCHKINF_SPOKE_TO_SARIA_ON_BRIDGE);
if (GameInteractor_Should(VB_GIVE_ITEM_FAIRY_OCARINA, true)) {
Item_Give(gPlayState, ITEM_OCARINA_FAIRY);
if (!IS_RANDO || !Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_NPC_SOULS).Get() ||
Flags_GetRandomizerInf(RAND_INF_SARIA_SOUL)) {
Flags_SetEventChkInf(EVENTCHKINF_SPOKE_TO_SARIA_ON_BRIDGE);
if (GameInteractor_Should(VB_GIVE_ITEM_FAIRY_OCARINA, true)) {
Item_Give(gPlayState, ITEM_OCARINA_FAIRY);
}
}
*should = false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,16 @@ typedef enum {
// - None
VB_BE_ELIGIBLE_FOR_NOCTURNE_OF_SHADOW,

// #### `result`
// ```c
// CHECK_QUEST_ITEM(QUEST_KOKIRI_EMERALD) && CHECK_QUEST_ITEM(QUEST_GORON_RUBY) &&
// CHECK_QUEST_ITEM(QUEST_ZORA_SAPPHIRE) && !Flags_GetEventChkInf(EVENTCHKINF_ZELDA_FLED_HYRULE_CASTLE) &&
// LINK_IS_CHILD
// ```
// #### `args`
// - None
VB_BE_ELIGIBLE_FOR_OCARINA_OF_TIME,

// #### `result`
// ```c
// !Flags_GetEventChkInf(EVENTCHKINF_LEARNED_PRELUDE_OF_LIGHT) &&
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2028,6 +2028,55 @@ void StaticData::HintTable_Init_Item() {
CustomMessage("an evil soul", /*german*/"eine böse Seele", /*french*/"une âme maléfique"),
CustomMessage("some powerful essence", /*german*/"etwas mächtige Essenz", /*french*/"une essence incroyablement puissante")});

hintTextTable[RHT_ANJU_SOUL] = HintText(CustomMessage("Anju's Soul", /*german*/"!!!", /*french*/"l'Âme d'Anju"));
hintTextTable[RHT_TALON_SOUL] = HintText(CustomMessage("Talon's Soul", /*german*/"!!!", /*french*/"l'Âme de Talon"));
hintTextTable[RHT_GROG_SOUL] = HintText(CustomMessage("Grog's Soul", /*german*/"!!!", /*french*/"l'Âme de Grog"));
hintTextTable[RHT_GRANNY_SOUL] = HintText(CustomMessage("Granny's Soul", /*german*/"!!!", /*french*/"l'Âme de la Sorcière de Cocorico"));
hintTextTable[RHT_FADO_SOUL] = HintText(CustomMessage("Fado's Soul", /*german*/"!!!", /*french*/"l'Âme de Fado"));
hintTextTable[RHT_LINK_SOUL] = HintText(CustomMessage("Darunia's Son's Soul", /*german*/"!!!", /*french*/"l'Âme du Fils de Darunia"));
hintTextTable[RHT_BIGGORON_SOUL] = HintText(CustomMessage("Biggoron's Soul", /*german*/"!!!", /*french*/"l'Âme de Biggoron"));
hintTextTable[RHT_HOT_RODDER_SOUL] = HintText(CustomMessage("Hot Rodder's Soul", /*german*/"!!!", /*french*/"l'Âme du Goron qui roule"));
hintTextTable[RHT_MEDIGORON_SOUL] = HintText(CustomMessage("Medigoron's Soul", /*german*/"!!!", /*french*/"l'Âme de Medigoron"));
hintTextTable[RHT_CARPENTER_BOSS_SOUL] = HintText(CustomMessage("Carpenter Boss's Soul", /*german*/"!!!", /*french*/"l'Âme du Chef des ouvriers"));
hintTextTable[RHT_ICHIRO_SOUL] = HintText(CustomMessage("Ichiro's Soul", /*german*/"!!!", /*french*/"l'Âme d'Ichiro"));
hintTextTable[RHT_SABOORO_SOUL] = HintText(CustomMessage("Sabooro's Soul", /*german*/"!!!", /*french*/"l'Âme de Saboru"));
hintTextTable[RHT_JIRO_SOUL] = HintText(CustomMessage("Jiro's Soul", /*german*/"!!!", /*french*/"l'Âme de Jiro"));
hintTextTable[RHT_SHIRO_SOUL] = HintText(CustomMessage("Shiro's Soul", /*german*/"!!!", /*french*/"l'Âme de Shiro"));
hintTextTable[RHT_HW_GATEKEEPER_SOUL] = HintText(CustomMessage("Haunted Wasteland Gate Operator's Soul", /*german*/"!!!", /*french*/"l'Âme de la portière du Désert Hanté"));
hintTextTable[RHT_GTG_GATEKEEPER_SOUL] = HintText(CustomMessage("Training Ground Gate Operator's Soul", /*german*/"!!!", /*french*/"l'Âme de la portière du Gymnase Gerudo"));
hintTextTable[RHT_ARCHER_SOUL] = HintText(CustomMessage("Horseback Archer's Soul", /*german*/"!!!", /*french*/"l'Âme de l'Archère montée"));
hintTextTable[RHT_GREAT_FAIRY_SOUL] = HintText(CustomMessage("Great Fairy's Soul", /*german*/"!!!", /*french*/"l'Âme des Grandes Fées"));
hintTextTable[RHT_POE_COLLECTOR_SOUL] = HintText(CustomMessage("Poe Collector's Soul", /*german*/"!!!", /*french*/"l'Âme du Collectionneur d'Âmes"));
hintTextTable[RHT_DAMPE_SOUL] = HintText(CustomMessage("Dampe's Soul", /*german*/"!!!", /*french*/"l'Âme d'Igor"));
hintTextTable[RHT_WINDMILL_MAN_SOUL] = HintText(CustomMessage("Windmill Man's Soul", /*german*/"!!!", /*french*/"l'Âme de l'Homme du Moulin"));
hintTextTable[RHT_MAN_ON_ROOF_SOUL] = HintText(CustomMessage("Man on Roof's Soul", /*german*/"!!!", /*french*/"l'Âme de l'Homme sur le toit"));
hintTextTable[RHT_KAKARIKO_GATEKEEPER_SOUL] = HintText(CustomMessage("Kakariko Gatekeeper's Soul", /*german*/"!!!", /*french*/"l'Âme du Garde de Cocorico"));
hintTextTable[RHT_MALON_SOUL] = HintText(CustomMessage("Malon's Soul", /*german*/"!!!", /*french*/"l'Âme de Malon"));
hintTextTable[RHT_BEGGAR_SOUL] = HintText(CustomMessage("Beggar's Soul", /*german*/"!!!", /*french*/"l'Âme du Mendiant"));
hintTextTable[RHT_DOG_LADY_SOUL] = HintText(CustomMessage("Dog Lady's Soul", /*german*/"!!!", /*french*/"l'Âme de la Maîtresse de Kiki"));
hintTextTable[RHT_ARMS_DEALER_SOUL] = HintText(CustomMessage("Arms Dealer's Soul", /*german*/"!!!", /*french*/"l'Âme du Marchand d'Armes"));
hintTextTable[RHT_BEAN_SALESMAN_SOUL] = HintText(CustomMessage("Bean Salesman's Soul", /*german*/"!!!", /*french*/"l'Âme du Vendeur de Haricots Magiques"));
hintTextTable[RHT_SHOOTING_SOUL] = HintText(CustomMessage("Shooter's Soul", /*german*/"!!!", /*french*/"l'Âme du Gérant du Jeu d'Adresse"));
hintTextTable[RHT_KOKIRI_SHOPKEEPER_SOUL] = HintText(CustomMessage("Kokiri Shopkeeper's Soul", /*german*/"!!!", /*french*/"l'Âme du Gérant du Magasin Kokiri"));
hintTextTable[RHT_POTION_SHOPKEEPER_SOUL] = HintText(CustomMessage("Potion Shopkeeper's Soul", /*german*/"!!!", /*french*/"l'Âme du Gérant du Magasin de Potion"));
hintTextTable[RHT_BAZAAR_SHOPKEEPER_SOUL] = HintText(CustomMessage("Bazaar Shopkeeper's Soul", /*german*/"!!!", /*french*/"l'Âme du Gérant du Bazar"));
hintTextTable[RHT_GORON_SHOPKEEPER_SOUL] = HintText(CustomMessage("Goron Shopkeeper's Soul", /*german*/"!!!", /*french*/"l'Âme du Gérant du Magasin Goron"));
hintTextTable[RHT_ZORA_SHOPKEEPER_SOUL] = HintText(CustomMessage("Zora Shopkeeper's Soul", /*german*/"!!!", /*french*/"l'Âme du Gérant du Magasin Zora"));
hintTextTable[RHT_BOMBCHU_SHOPKEEPER_SOUL] = HintText(CustomMessage("Bombchu Shopkeeper's Soul", /*german*/"!!!", /*french*/"l'Âme du Gérant du Magasin de Missiles"));
hintTextTable[RHT_MASK_SALESMAN_SOUL] = HintText(CustomMessage("Mask Salesman's Soul", /*german*/"!!!", /*french*/"l'Âme du Gérant de la Foire-Aux-Masques"));
hintTextTable[RHT_TREASURE_MAN_SOUL] = HintText(CustomMessage("Treasure Man's Soul", /*german*/"!!!", /*french*/"l'Âme du Gérant de la Chasse aux Trésors"));
hintTextTable[RHT_BOMBCHU_LADY_SOUL] = HintText(CustomMessage("Bombchu Lady's Soul", /*german*/"!!!", /*french*/"l'Âme de la Gérante du Bowling Teigneux"));
hintTextTable[RHT_DIVING_SOUL] = HintText(CustomMessage("Diver's Soul", /*german*/"!!!", /*french*/"l'Âme du Plongeur"));
hintTextTable[RHT_SCIENTIST_SOUL] = HintText(CustomMessage("Scientist's Soul", /*german*/"!!!", /*french*/"l'Âme du Scientifique"));
hintTextTable[RHT_KAEPORA_SOUL] = HintText(CustomMessage("Kaepora's Soul", /*german*/"!!!", /*french*/"l'Âme de Kaepora Gaebora"));
hintTextTable[RHT_RAURU_SOUL] = HintText(CustomMessage("Rauru's Soul", /*german*/"!!!", /*french*/"l'Âme de Rauru"));
hintTextTable[RHT_SARIA_SOUL] = HintText(CustomMessage("Saria's Soul", /*german*/"!!!", /*french*/"l'Âme de Saria"));
hintTextTable[RHT_DARUNIA_SOUL] = HintText(CustomMessage("Darunia's Soul", /*german*/"!!!", /*french*/"l'Âme Darunia"));
hintTextTable[RHT_RUTO_SOUL] = HintText(CustomMessage("Ruto's Soul", /*german*/"!!!", /*french*/"l'Âme de Ruto"));
hintTextTable[RHT_NABOORU_SOUL] = HintText(CustomMessage("Nabooru's Soul", /*german*/"!!!", /*french*/"l'Âme de Naboru"));
hintTextTable[RHT_IMPA_SOUL] = HintText(CustomMessage("Impa's Soul", /*german*/"!!!", /*french*/"l'Âme d'Impa"));
hintTextTable[RHT_ZELDA_SOUL] = HintText(CustomMessage("Zelda's Soul", /*german*/"!!!", /*french*/"l'Âme de Zelda"));

hintTextTable[RHT_OCARINA_A_BUTTON] = HintText(CustomMessage("an Ocarina A Button", /*german*/"die A-Taste der Okarina", /*french*/"la Touche A de l'Ocarina"),
// /*spanish*/un botón A de Ocarina
{
Expand Down
28 changes: 11 additions & 17 deletions soh/soh/Enhancements/randomizer/3drando/item_pool.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -753,29 +753,23 @@ void GenerateItemPool() {
}

if (ctx->GetOption(RSK_SHUFFLE_BOSS_SOULS)) {
AddItemToMainPool(RG_GOHMA_SOUL);
AddItemToMainPool(RG_KING_DODONGO_SOUL);
AddItemToMainPool(RG_BARINADE_SOUL);
AddItemToMainPool(RG_PHANTOM_GANON_SOUL);
AddItemToMainPool(RG_VOLVAGIA_SOUL);
AddItemToMainPool(RG_MORPHA_SOUL);
AddItemToMainPool(RG_BONGO_BONGO_SOUL);
AddItemToMainPool(RG_TWINROVA_SOUL);

ctx->possibleIceTrapModels.push_back(RG_GOHMA_SOUL);
ctx->possibleIceTrapModels.push_back(RG_KING_DODONGO_SOUL);
ctx->possibleIceTrapModels.push_back(RG_BARINADE_SOUL);
ctx->possibleIceTrapModels.push_back(RG_PHANTOM_GANON_SOUL);
ctx->possibleIceTrapModels.push_back(RG_VOLVAGIA_SOUL);
ctx->possibleIceTrapModels.push_back(RG_MORPHA_SOUL);
ctx->possibleIceTrapModels.push_back(RG_BONGO_BONGO_SOUL);
ctx->possibleIceTrapModels.push_back(RG_TWINROVA_SOUL);
for (int rg = RG_GOHMA_SOUL; rg <= RG_TWINROVA_SOUL; rg++) {
AddItemToMainPool((RandomizerGet)rg);
ctx->possibleIceTrapModels.push_back((RandomizerGet)rg);
}

if (ctx->GetOption(RSK_SHUFFLE_BOSS_SOULS).Is(RO_BOSS_SOULS_ON_PLUS_GANON)) {
AddItemToMainPool(RG_GANON_SOUL);
ctx->possibleIceTrapModels.push_back(RG_GANON_SOUL);
}
}

if (ctx->GetOption(RSK_SHUFFLE_NPC_SOULS)) {
for (int rg = RG_ANJU_SOUL; rg <= RG_ZELDA_SOUL; rg++) {
AddItemToMainPool((RandomizerGet)rg);
}
}

if (ctx->GetOption(RSK_SHUFFLE_CHILD_WALLET)) {
AddItemToMainPool(RG_PROGRESSIVE_WALLET);
}
Expand Down
7 changes: 6 additions & 1 deletion soh/soh/Enhancements/randomizer/draw.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -963,11 +963,16 @@ extern "C" void Randomizer_DrawBossSoul(PlayState* play, GetItemEntry* getItemEn
Matrix_ReplaceRotation(&play->billboardMtxF);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
G_MTX_MODELVIEW | G_MTX_LOAD);
gDPSetGrayscaleColor(POLY_XLU_DISP++, flameColors[slot][0], flameColors[slot][1], flameColors[slot][2], 255);
if (slot >= 0 && slot < 9) {
gDPSetGrayscaleColor(POLY_XLU_DISP++, flameColors[slot][0], flameColors[slot][1], flameColors[slot][2], 255);
} else {
gDPSetGrayscaleColor(POLY_XLU_DISP++, 255, 255, 255, 255);
}
gSPGrayscale(POLY_XLU_DISP++, true);
gSPDisplayList(POLY_XLU_DISP++, (Gfx*)gGiBlueFireFlameDL);
gSPGrayscale(POLY_XLU_DISP++, false);
Matrix_Pop();

CLOSE_DISPS(play->state.gfxCtx);

// Draw the generic boss soul model
Expand Down
Loading