mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2024-11-26 11:22:17 -05:00
vb treasure chest game (#103)
This commit is contained in:
parent
bbbd2520b1
commit
f3273e7627
@ -575,8 +575,6 @@ void Flags_UnsetRandomizerInf(RandomizerInf flag);
|
|||||||
u16 func_80037C30(PlayState* play, s16 arg1);
|
u16 func_80037C30(PlayState* play, s16 arg1);
|
||||||
s32 func_80037D98(PlayState* play, Actor* actor, s16 arg2, s32* arg3);
|
s32 func_80037D98(PlayState* play, Actor* actor, s16 arg2, s32* arg3);
|
||||||
s32 func_80038290(PlayState* play, Actor* actor, Vec3s* arg2, Vec3s* arg3, Vec3f arg4);
|
s32 func_80038290(PlayState* play, Actor* actor, Vec3s* arg2, Vec3s* arg3, Vec3f arg4);
|
||||||
GetItemEntry GetChestGameRandoGetItem(s8 room, s16 ogDrawId, PlayState* play);
|
|
||||||
s16 GetChestGameRandoGiDrawId(s8 room, s16 ogDrawId, PlayState* play);
|
|
||||||
|
|
||||||
// ? func_80038600(?);
|
// ? func_80038600(?);
|
||||||
u16 DynaSSNodeList_GetNextNodeIdx(DynaSSNodeList*);
|
u16 DynaSSNodeList_GetNextNodeIdx(DynaSSNodeList*);
|
||||||
|
@ -254,6 +254,7 @@ typedef enum {
|
|||||||
|
|
||||||
/*** Give Items ***/
|
/*** Give Items ***/
|
||||||
|
|
||||||
|
// Opt: *EnBox
|
||||||
GI_VB_GIVE_ITEM_FROM_CHEST,
|
GI_VB_GIVE_ITEM_FROM_CHEST,
|
||||||
GI_VB_GIVE_ITEM_FROM_BLUE_WARP,
|
GI_VB_GIVE_ITEM_FROM_BLUE_WARP,
|
||||||
// Opt: *EnItem00
|
// Opt: *EnItem00
|
||||||
|
@ -904,11 +904,16 @@ void GenerateItemPool() {
|
|||||||
} else if (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK)) {
|
} else if (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK)) {
|
||||||
AddItemToMainPool(RG_TREASURE_GAME_SMALL_KEY); // 1 key which will behave as a pack of 6
|
AddItemToMainPool(RG_TREASURE_GAME_SMALL_KEY); // 1 key which will behave as a pack of 6
|
||||||
} else {
|
} else {
|
||||||
ctx->PlaceItemInLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_1, RG_TREASURE_GAME_SMALL_KEY, false, true);
|
ctx->PlaceItemInLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_1, RG_GREEN_RUPEE, false, true);
|
||||||
ctx->PlaceItemInLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_2, RG_TREASURE_GAME_SMALL_KEY, false, true);
|
ctx->PlaceItemInLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_2, RG_GREEN_RUPEE, false, true);
|
||||||
ctx->PlaceItemInLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_3, RG_TREASURE_GAME_SMALL_KEY, false, true);
|
ctx->PlaceItemInLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_3, RG_BLUE_RUPEE, false, true);
|
||||||
ctx->PlaceItemInLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_4, RG_TREASURE_GAME_SMALL_KEY, false, true);
|
ctx->PlaceItemInLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_4, RG_BLUE_RUPEE, false, true);
|
||||||
ctx->PlaceItemInLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_5, RG_TREASURE_GAME_SMALL_KEY, false, true);
|
ctx->PlaceItemInLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_5, RG_RED_RUPEE, false, true);
|
||||||
|
ctx->PlaceItemInLocation(RC_MARKET_TREASURE_CHEST_GAME_KEY_1, RG_TREASURE_GAME_SMALL_KEY, false, true);
|
||||||
|
ctx->PlaceItemInLocation(RC_MARKET_TREASURE_CHEST_GAME_KEY_2, RG_TREASURE_GAME_SMALL_KEY, false, true);
|
||||||
|
ctx->PlaceItemInLocation(RC_MARKET_TREASURE_CHEST_GAME_KEY_3, RG_TREASURE_GAME_SMALL_KEY, false, true);
|
||||||
|
ctx->PlaceItemInLocation(RC_MARKET_TREASURE_CHEST_GAME_KEY_4, RG_TREASURE_GAME_SMALL_KEY, false, true);
|
||||||
|
ctx->PlaceItemInLocation(RC_MARKET_TREASURE_CHEST_GAME_KEY_5, RG_TREASURE_GAME_SMALL_KEY, false, true);
|
||||||
};
|
};
|
||||||
|
|
||||||
if (ctx->GetOption(RSK_SHUFFLE_TOKENS).Is(RO_TOKENSANITY_OFF)) {
|
if (ctx->GetOption(RSK_SHUFFLE_TOKENS).Is(RO_TOKENSANITY_OFF)) {
|
||||||
|
@ -234,11 +234,11 @@ void AreaTable_Init_CastleTown() {
|
|||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_GREG_HINT, {[]{return true;}}),
|
LocationAccess(RC_GREG_HINT, {[]{return true;}}),
|
||||||
LocationAccess(RC_MARKET_TREASURE_CHEST_GAME_REWARD, {[]{return logic->ChildsWallet && ((logic->CanUse(RG_LENS_OF_TRUTH) && !randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)) || (randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 6)) || (randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)));}}),
|
LocationAccess(RC_MARKET_TREASURE_CHEST_GAME_REWARD, {[]{return logic->ChildsWallet && ((logic->CanUse(RG_LENS_OF_TRUTH) && !randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)) || (randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 6)) || (randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)));}}),
|
||||||
LocationAccess(RC_MARKET_TREASURE_CHEST_GAME_ITEM_1, {[]{return logic->ChildsWallet && ((randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)));}}),
|
LocationAccess(RC_MARKET_TREASURE_CHEST_GAME_KEY_1, {[]{return logic->ChildsWallet && ((randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)));}}),
|
||||||
LocationAccess(RC_MARKET_TREASURE_CHEST_GAME_ITEM_2, {[]{return logic->ChildsWallet && ((randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 2)) || (randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)));}}),
|
LocationAccess(RC_MARKET_TREASURE_CHEST_GAME_KEY_2, {[]{return logic->ChildsWallet && ((randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 2)) || (randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)));}}),
|
||||||
LocationAccess(RC_MARKET_TREASURE_CHEST_GAME_ITEM_3, {[]{return logic->ChildsWallet && ((randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 3)) || (randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)));}}),
|
LocationAccess(RC_MARKET_TREASURE_CHEST_GAME_KEY_3, {[]{return logic->ChildsWallet && ((randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 3)) || (randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)));}}),
|
||||||
LocationAccess(RC_MARKET_TREASURE_CHEST_GAME_ITEM_4, {[]{return logic->ChildsWallet && ((randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 4)) || (randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)));}}),
|
LocationAccess(RC_MARKET_TREASURE_CHEST_GAME_KEY_4, {[]{return logic->ChildsWallet && ((randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 4)) || (randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)));}}),
|
||||||
LocationAccess(RC_MARKET_TREASURE_CHEST_GAME_ITEM_5, {[]{return logic->ChildsWallet && ((randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 5)) || (randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)));}}),
|
LocationAccess(RC_MARKET_TREASURE_CHEST_GAME_KEY_5, {[]{return logic->ChildsWallet && ((randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 5)) || (randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)));}}),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_THE_MARKET, {[]{return true;}}),
|
Entrance(RR_THE_MARKET, {[]{return true;}}),
|
||||||
|
@ -26,6 +26,7 @@ extern "C" {
|
|||||||
#include "src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h"
|
#include "src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h"
|
||||||
#include "src/overlays/actors/ovl_En_Sth/z_en_sth.h"
|
#include "src/overlays/actors/ovl_En_Sth/z_en_sth.h"
|
||||||
#include "src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.h"
|
#include "src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.h"
|
||||||
|
#include "src/overlays/actors/ovl_En_Box/z_en_box.h"
|
||||||
#include "adult_trade_shuffle.h"
|
#include "adult_trade_shuffle.h"
|
||||||
extern SaveContext gSaveContext;
|
extern SaveContext gSaveContext;
|
||||||
extern PlayState* gPlayState;
|
extern PlayState* gPlayState;
|
||||||
@ -282,6 +283,12 @@ void ItemEtcetera_DrawRandomizedItem(ItemEtcetera* itemEtcetera, PlayState* play
|
|||||||
GetItemEntry_Draw(play, itemEtcetera->sohItemEntry);
|
GetItemEntry_Draw(play, itemEtcetera->sohItemEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ItemEtcetera_DrawRandomizedItemThroughLens(ItemEtcetera* itemEtcetera, PlayState* play) {
|
||||||
|
if (play->actorCtx.lensActive) {
|
||||||
|
ItemEtcetera_DrawRandomizedItem(itemEtcetera, play);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ItemEtcetera_func_80B858B4_Randomized(ItemEtcetera* itemEtcetera, PlayState* play) {
|
void ItemEtcetera_func_80B858B4_Randomized(ItemEtcetera* itemEtcetera, PlayState* play) {
|
||||||
if (itemEtcetera->actor.xzDistToPlayer < 30.0f &&
|
if (itemEtcetera->actor.xzDistToPlayer < 30.0f &&
|
||||||
fabsf(itemEtcetera->actor.yDistToPlayer) < 50.0f) {
|
fabsf(itemEtcetera->actor.yDistToPlayer) < 50.0f) {
|
||||||
@ -394,9 +401,50 @@ RandomizerCheck EnFr_RandomizerCheckFromSongIndex(u16 songIndex) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RandomizerSetChestGameRandomizerInf(RandomizerCheck rc) {
|
||||||
|
switch (rc) {
|
||||||
|
case RC_MARKET_TREASURE_CHEST_GAME_ITEM_1:
|
||||||
|
Flags_SetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_1);
|
||||||
|
break;
|
||||||
|
case RC_MARKET_TREASURE_CHEST_GAME_ITEM_2:
|
||||||
|
Flags_SetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_2);
|
||||||
|
break;
|
||||||
|
case RC_MARKET_TREASURE_CHEST_GAME_ITEM_3:
|
||||||
|
Flags_SetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_3);
|
||||||
|
break;
|
||||||
|
case RC_MARKET_TREASURE_CHEST_GAME_ITEM_4:
|
||||||
|
Flags_SetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_4);
|
||||||
|
break;
|
||||||
|
case RC_MARKET_TREASURE_CHEST_GAME_ITEM_5:
|
||||||
|
Flags_SetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_5);
|
||||||
|
break;
|
||||||
|
case RC_MARKET_TREASURE_CHEST_GAME_KEY_1:
|
||||||
|
Flags_SetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_1);
|
||||||
|
break;
|
||||||
|
case RC_MARKET_TREASURE_CHEST_GAME_KEY_2:
|
||||||
|
Flags_SetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_2);
|
||||||
|
break;
|
||||||
|
case RC_MARKET_TREASURE_CHEST_GAME_KEY_3:
|
||||||
|
Flags_SetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_3);
|
||||||
|
break;
|
||||||
|
case RC_MARKET_TREASURE_CHEST_GAME_KEY_4:
|
||||||
|
Flags_SetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_4);
|
||||||
|
break;
|
||||||
|
case RC_MARKET_TREASURE_CHEST_GAME_KEY_5:
|
||||||
|
Flags_SetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_5);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, void* optionalArg) {
|
void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, void* optionalArg) {
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case GI_VB_GIVE_ITEM_FROM_CHEST: {
|
case GI_VB_GIVE_ITEM_FROM_CHEST: {
|
||||||
|
EnBox* chest = static_cast<EnBox*>(optionalArg);
|
||||||
|
RandomizerCheck rc = OTRGlobals::Instance->gRandomizer->GetCheckFromActor(chest->dyna.actor.id, gPlayState->sceneNum, chest->dyna.actor.params);
|
||||||
|
|
||||||
|
// if this is a treasure chest game chest then set the appropriate rando inf
|
||||||
|
RandomizerSetChestGameRandomizerInf(rc);
|
||||||
|
|
||||||
Player* player = GET_PLAYER(gPlayState);
|
Player* player = GET_PLAYER(gPlayState);
|
||||||
player->av2.actionVar2 = 1;
|
player->av2.actionVar2 = 1;
|
||||||
player->getItemId = GI_NONE;
|
player->getItemId = GI_NONE;
|
||||||
@ -895,6 +943,32 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, void
|
|||||||
}
|
}
|
||||||
|
|
||||||
void RandomizerOnSceneInitHandler(int16_t sceneNum) {
|
void RandomizerOnSceneInitHandler(int16_t sceneNum) {
|
||||||
|
// Treasure Chest Game
|
||||||
|
// todo: for now we're just unsetting all of them, we will
|
||||||
|
// probably need to do something different when we implement shuffle
|
||||||
|
if (sceneNum == SCENE_TREASURE_BOX_SHOP) {
|
||||||
|
Flags_UnsetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_1);
|
||||||
|
Rando::Context::GetInstance()->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_1)->MarkAsNotObtained();
|
||||||
|
Flags_UnsetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_2);
|
||||||
|
Rando::Context::GetInstance()->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_2)->MarkAsNotObtained();
|
||||||
|
Flags_UnsetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_3);
|
||||||
|
Rando::Context::GetInstance()->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_3)->MarkAsNotObtained();
|
||||||
|
Flags_UnsetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_4);
|
||||||
|
Rando::Context::GetInstance()->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_4)->MarkAsNotObtained();
|
||||||
|
Flags_UnsetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_5);
|
||||||
|
Rando::Context::GetInstance()->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_5)->MarkAsNotObtained();
|
||||||
|
Flags_UnsetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_1);
|
||||||
|
Rando::Context::GetInstance()->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_KEY_1)->MarkAsNotObtained();
|
||||||
|
Flags_UnsetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_2);
|
||||||
|
Rando::Context::GetInstance()->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_KEY_2)->MarkAsNotObtained();
|
||||||
|
Flags_UnsetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_3);
|
||||||
|
Rando::Context::GetInstance()->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_KEY_3)->MarkAsNotObtained();
|
||||||
|
Flags_UnsetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_4);
|
||||||
|
Rando::Context::GetInstance()->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_KEY_4)->MarkAsNotObtained();
|
||||||
|
Flags_UnsetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_5);
|
||||||
|
Rando::Context::GetInstance()->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_KEY_5)->MarkAsNotObtained();
|
||||||
|
}
|
||||||
|
|
||||||
// LACs & Prelude checks
|
// LACs & Prelude checks
|
||||||
static uint32_t updateHook = 0;
|
static uint32_t updateHook = 0;
|
||||||
|
|
||||||
@ -1035,6 +1109,17 @@ void RandomizerOnActorInitHandler(void* actorRef) {
|
|||||||
itemEtcetera->futureActionFunc = (ItemEtceteraActionFunc)ItemEtcetera_UpdateRandomizedFireArrow;
|
itemEtcetera->futureActionFunc = (ItemEtceteraActionFunc)ItemEtcetera_UpdateRandomizedFireArrow;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case ITEM_ETC_RUPEE_GREEN_CHEST_GAME:
|
||||||
|
case ITEM_ETC_RUPEE_BLUE_CHEST_GAME:
|
||||||
|
case ITEM_ETC_RUPEE_RED_CHEST_GAME:
|
||||||
|
case ITEM_ETC_RUPEE_PURPLE_CHEST_GAME:
|
||||||
|
case ITEM_ETC_HEART_PIECE_CHEST_GAME:
|
||||||
|
case ITEM_ETC_KEY_SMALL_CHEST_GAME: {
|
||||||
|
if (rc != RC_UNKNOWN_CHECK) {
|
||||||
|
itemEtcetera->drawFunc = (ActorFunc)ItemEtcetera_DrawRandomizedItemThroughLens;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -207,6 +207,11 @@ std::vector<RandomizerCheck> Rando::StaticData::overworldLocations = {
|
|||||||
RC_MARKET_TREASURE_CHEST_GAME_ITEM_3,
|
RC_MARKET_TREASURE_CHEST_GAME_ITEM_3,
|
||||||
RC_MARKET_TREASURE_CHEST_GAME_ITEM_4,
|
RC_MARKET_TREASURE_CHEST_GAME_ITEM_4,
|
||||||
RC_MARKET_TREASURE_CHEST_GAME_ITEM_5,
|
RC_MARKET_TREASURE_CHEST_GAME_ITEM_5,
|
||||||
|
RC_MARKET_TREASURE_CHEST_GAME_KEY_1,
|
||||||
|
RC_MARKET_TREASURE_CHEST_GAME_KEY_2,
|
||||||
|
RC_MARKET_TREASURE_CHEST_GAME_KEY_3,
|
||||||
|
RC_MARKET_TREASURE_CHEST_GAME_KEY_4,
|
||||||
|
RC_MARKET_TREASURE_CHEST_GAME_KEY_5,
|
||||||
|
|
||||||
// Market Shops
|
// Market Shops
|
||||||
RC_MARKET_BOMBCHU_SHOP_ITEM_1,
|
RC_MARKET_BOMBCHU_SHOP_ITEM_1,
|
||||||
@ -674,11 +679,16 @@ void Rando::StaticData::InitLocationTable() { //
|
|||||||
locationTable[RC_MARKET_LOST_DOG] = Location::Base(RC_MARKET_LOST_DOG, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_MARKET, ACTOR_ID_MAX, SCENE_DOG_LADY_HOUSE, 0x00, 0x3E, "Lost Dog", "MK Lost Dog", RHT_MARKET_LOST_DOG, RG_PIECE_OF_HEART, {}, SpoilerCollectionCheck::InfTable(INFTABLE_191), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE, true);
|
locationTable[RC_MARKET_LOST_DOG] = Location::Base(RC_MARKET_LOST_DOG, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_MARKET, ACTOR_ID_MAX, SCENE_DOG_LADY_HOUSE, 0x00, 0x3E, "Lost Dog", "MK Lost Dog", RHT_MARKET_LOST_DOG, RG_PIECE_OF_HEART, {}, SpoilerCollectionCheck::InfTable(INFTABLE_191), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE, true);
|
||||||
locationTable[RC_MARKET_SHOOTING_GALLERY_REWARD] = Location::Base(RC_MARKET_SHOOTING_GALLERY_REWARD, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_MARKET, ACTOR_ID_MAX, SCENE_SHOOTING_GALLERY, 0x00, 0x60, "Shooting Gallery", "MK Shooting Gallery", RHT_MARKET_SHOOTING_GALLERY_REWARD, RG_PROGRESSIVE_SLINGSHOT, {}, SpoilerCollectionCheck::ItemGetInf(ITEMGETINF_0D), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE, true);
|
locationTable[RC_MARKET_SHOOTING_GALLERY_REWARD] = Location::Base(RC_MARKET_SHOOTING_GALLERY_REWARD, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_MARKET, ACTOR_ID_MAX, SCENE_SHOOTING_GALLERY, 0x00, 0x60, "Shooting Gallery", "MK Shooting Gallery", RHT_MARKET_SHOOTING_GALLERY_REWARD, RG_PROGRESSIVE_SLINGSHOT, {}, SpoilerCollectionCheck::ItemGetInf(ITEMGETINF_0D), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE, true);
|
||||||
locationTable[RC_MARKET_10_BIG_POES] = Location::Base(RC_MARKET_10_BIG_POES, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_MARKET, ACTOR_ID_MAX, SCENE_MARKET_GUARD_HOUSE, 0x00, 0x0F, "10 Big Poes", "MK 10 Big Poes", RHT_MARKET_10_BIG_POES, RG_EMPTY_BOTTLE, {}, SpoilerCollectionCheck::RandomizerInf(RAND_INF_10_BIG_POES), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE, true);
|
locationTable[RC_MARKET_10_BIG_POES] = Location::Base(RC_MARKET_10_BIG_POES, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_MARKET, ACTOR_ID_MAX, SCENE_MARKET_GUARD_HOUSE, 0x00, 0x0F, "10 Big Poes", "MK 10 Big Poes", RHT_MARKET_10_BIG_POES, RG_EMPTY_BOTTLE, {}, SpoilerCollectionCheck::RandomizerInf(RAND_INF_10_BIG_POES), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE, true);
|
||||||
locationTable[RC_MARKET_TREASURE_CHEST_GAME_ITEM_1] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_ITEM_1, RCQUEST_BOTH, RCTYPE_CHEST_GAME, RCAREA_MARKET, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, 0x01, "Chest Game First Room Chest", "MK Chest Game First Room Chest", RHT_MARKET_TREASURE_CHEST_GAME_ITEM_1, RG_TREASURE_GAME_SMALL_KEY, { Category::cChestMinigame }, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
locationTable[RC_MARKET_TREASURE_CHEST_GAME_ITEM_1] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_ITEM_1, RCQUEST_BOTH, RCTYPE_CHEST_GAME, RCAREA_MARKET, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, 0xFF, "Chest Game First Room Item", "MK Chest Game First Room Item", RHT_MARKET_TREASURE_CHEST_GAME_ITEM_1, RG_GREEN_RUPEE, { Category::cChestMinigame }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_1), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
||||||
locationTable[RC_MARKET_TREASURE_CHEST_GAME_ITEM_2] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_ITEM_2, RCQUEST_BOTH, RCTYPE_CHEST_GAME, RCAREA_MARKET, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, 0x03, "Chest Game Second Room Chest", "MK Chest Game Second Room Chest", RHT_MARKET_TREASURE_CHEST_GAME_ITEM_2, RG_TREASURE_GAME_SMALL_KEY, { Category::cChestMinigame }, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
locationTable[RC_MARKET_TREASURE_CHEST_GAME_ITEM_2] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_ITEM_2, RCQUEST_BOTH, RCTYPE_CHEST_GAME, RCAREA_MARKET, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, 0xFF, "Chest Game Second Room Item", "MK Chest Game Second Room Item", RHT_MARKET_TREASURE_CHEST_GAME_ITEM_2, RG_GREEN_RUPEE, { Category::cChestMinigame }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_2), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
||||||
locationTable[RC_MARKET_TREASURE_CHEST_GAME_ITEM_3] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_ITEM_3, RCQUEST_BOTH, RCTYPE_CHEST_GAME, RCAREA_MARKET, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, 0x05, "Chest Game Third Room Chest", "MK Chest Game Third Room Chest", RHT_MARKET_TREASURE_CHEST_GAME_ITEM_3, RG_TREASURE_GAME_SMALL_KEY, { Category::cChestMinigame }, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
locationTable[RC_MARKET_TREASURE_CHEST_GAME_ITEM_3] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_ITEM_3, RCQUEST_BOTH, RCTYPE_CHEST_GAME, RCAREA_MARKET, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, 0xFF, "Chest Game Third Room Item", "MK Chest Game Third Room Item", RHT_MARKET_TREASURE_CHEST_GAME_ITEM_3, RG_BLUE_RUPEE, { Category::cChestMinigame }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_3), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
||||||
locationTable[RC_MARKET_TREASURE_CHEST_GAME_ITEM_4] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_ITEM_4, RCQUEST_BOTH, RCTYPE_CHEST_GAME, RCAREA_MARKET, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, 0x07, "Chest Game Fourth Room Chest", "MK Chest Game Fourth Room Chest", RHT_MARKET_TREASURE_CHEST_GAME_ITEM_4, RG_TREASURE_GAME_SMALL_KEY, { Category::cChestMinigame }, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
locationTable[RC_MARKET_TREASURE_CHEST_GAME_ITEM_4] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_ITEM_4, RCQUEST_BOTH, RCTYPE_CHEST_GAME, RCAREA_MARKET, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, 0xFF, "Chest Game Fourth Room Item", "MK Chest Game Fourth Room Item", RHT_MARKET_TREASURE_CHEST_GAME_ITEM_4, RG_BLUE_RUPEE, { Category::cChestMinigame }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_4), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
||||||
locationTable[RC_MARKET_TREASURE_CHEST_GAME_ITEM_5] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_ITEM_5, RCQUEST_BOTH, RCTYPE_CHEST_GAME, RCAREA_MARKET, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, 0x09, "Chest Game Fifth Room Chest", "MK Chest Game Fifth Room Chest", RHT_MARKET_TREASURE_CHEST_GAME_ITEM_5, RG_TREASURE_GAME_SMALL_KEY, { Category::cChestMinigame }, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
locationTable[RC_MARKET_TREASURE_CHEST_GAME_ITEM_5] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_ITEM_5, RCQUEST_BOTH, RCTYPE_CHEST_GAME, RCAREA_MARKET, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, 0xFF, "Chest Game Fifth Room Item", "MK Chest Game Fifth Room Item", RHT_MARKET_TREASURE_CHEST_GAME_ITEM_5, RG_RED_RUPEE, { Category::cChestMinigame }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_5), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
||||||
|
locationTable[RC_MARKET_TREASURE_CHEST_GAME_KEY_1] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_KEY_1, RCQUEST_BOTH, RCTYPE_CHEST_GAME, RCAREA_MARKET, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, 0xFF, "Chest Game First Room Key", "MK Chest Game First Room Key", RHT_MARKET_TREASURE_CHEST_GAME_KEY_1, RG_TREASURE_GAME_SMALL_KEY, { Category::cChestMinigame }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_1), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
||||||
|
locationTable[RC_MARKET_TREASURE_CHEST_GAME_KEY_2] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_KEY_2, RCQUEST_BOTH, RCTYPE_CHEST_GAME, RCAREA_MARKET, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, 0xFF, "Chest Game Second Room Key", "MK Chest Game Second Room Key", RHT_MARKET_TREASURE_CHEST_GAME_KEY_2, RG_TREASURE_GAME_SMALL_KEY, { Category::cChestMinigame }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_2), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
||||||
|
locationTable[RC_MARKET_TREASURE_CHEST_GAME_KEY_3] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_KEY_3, RCQUEST_BOTH, RCTYPE_CHEST_GAME, RCAREA_MARKET, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, 0xFF, "Chest Game Third Room Key", "MK Chest Game Third Room Key", RHT_MARKET_TREASURE_CHEST_GAME_KEY_3, RG_TREASURE_GAME_SMALL_KEY, { Category::cChestMinigame }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_3), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
||||||
|
locationTable[RC_MARKET_TREASURE_CHEST_GAME_KEY_4] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_KEY_4, RCQUEST_BOTH, RCTYPE_CHEST_GAME, RCAREA_MARKET, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, 0xFF, "Chest Game Fourth Room Key", "MK Chest Game Fourth Room Key", RHT_MARKET_TREASURE_CHEST_GAME_KEY_4, RG_TREASURE_GAME_SMALL_KEY, { Category::cChestMinigame }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_4), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
||||||
|
locationTable[RC_MARKET_TREASURE_CHEST_GAME_KEY_5] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_KEY_5, RCQUEST_BOTH, RCTYPE_CHEST_GAME, RCAREA_MARKET, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, 0xFF, "Chest Game Fifth Room Key", "MK Chest Game Fifth Room Key", RHT_MARKET_TREASURE_CHEST_GAME_KEY_5, RG_TREASURE_GAME_SMALL_KEY, { Category::cChestMinigame }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_5), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
||||||
// Hyrule Castle
|
// Hyrule Castle
|
||||||
locationTable[RC_HC_MALON_EGG] = Location::Base(RC_HC_MALON_EGG, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_HYRULE_CASTLE, ACTOR_ID_MAX, SCENE_HYRULE_CASTLE, 0x00, 0x47, "Malon Egg", "HC Malon Egg", RHT_HC_MALON_EGG, RG_WEIRD_EGG, {}, SpoilerCollectionCheck::EventChkInf(0x12), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE, true);
|
locationTable[RC_HC_MALON_EGG] = Location::Base(RC_HC_MALON_EGG, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_HYRULE_CASTLE, ACTOR_ID_MAX, SCENE_HYRULE_CASTLE, 0x00, 0x47, "Malon Egg", "HC Malon Egg", RHT_HC_MALON_EGG, RG_WEIRD_EGG, {}, SpoilerCollectionCheck::EventChkInf(0x12), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE, true);
|
||||||
locationTable[RC_HC_ZELDAS_LETTER] = Location::Base(RC_HC_ZELDAS_LETTER, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_HYRULE_CASTLE, ACTOR_ID_MAX, SCENE_CASTLE_COURTYARD_ZELDA, 0x00, 0x0B, "Zeldas Letter", "HC Zeldas Letter", RHT_HC_ZELDAS_LETTER, RG_ZELDAS_LETTER, {}, SpoilerCollectionCheck::EventChkInf(0x40), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE, true);
|
locationTable[RC_HC_ZELDAS_LETTER] = Location::Base(RC_HC_ZELDAS_LETTER, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_HYRULE_CASTLE, ACTOR_ID_MAX, SCENE_CASTLE_COURTYARD_ZELDA, 0x00, 0x0B, "Zeldas Letter", "HC Zeldas Letter", RHT_HC_ZELDAS_LETTER, RG_ZELDAS_LETTER, {}, SpoilerCollectionCheck::EventChkInf(0x40), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE, true);
|
||||||
|
@ -1649,21 +1649,28 @@ Rando::Location* Randomizer::GetCheckObjectFromActor(s16 actorId, s16 sceneNum,
|
|||||||
RandomizerCheck specialRc = RC_UNKNOWN_CHECK;
|
RandomizerCheck specialRc = RC_UNKNOWN_CHECK;
|
||||||
// TODO: Migrate these special cases into table, or at least document why they are special
|
// TODO: Migrate these special cases into table, or at least document why they are special
|
||||||
switch(sceneNum) {
|
switch(sceneNum) {
|
||||||
case SCENE_TREASURE_BOX_SHOP:
|
case SCENE_TREASURE_BOX_SHOP: {
|
||||||
if(actorParams == 20170) specialRc = RC_MARKET_TREASURE_CHEST_GAME_REWARD;
|
if ((actorId == ACTOR_EN_BOX && actorParams == 20170) || (actorId == ACTOR_ITEM_ETCETERA && actorParams == 2572)) {
|
||||||
|
specialRc = RC_MARKET_TREASURE_CHEST_GAME_REWARD;
|
||||||
|
}
|
||||||
|
|
||||||
// RANDOTODO update logic to match 3ds rando when we implement keysanity
|
// todo: handle the itemetc part of this so drawing works when we implement shuffle
|
||||||
// keep keys og
|
if (actorId == ACTOR_EN_BOX) {
|
||||||
if ((actorParams & 0x60) == 0x20) break;
|
bool isAKey = (actorParams & 0x60) == 0x20;
|
||||||
|
if ((actorParams & 0xF) < 2) {
|
||||||
if (GetRandoSettingValue(RSK_SHUFFLE_CHEST_MINIGAME)) {
|
specialRc = isAKey ? RC_MARKET_TREASURE_CHEST_GAME_KEY_1 : RC_MARKET_TREASURE_CHEST_GAME_ITEM_1;
|
||||||
if((actorParams & 0xF) < 2) specialRc = RC_MARKET_TREASURE_CHEST_GAME_ITEM_1;
|
} else if ((actorParams & 0xF) < 4) {
|
||||||
if((actorParams & 0xF) < 4) specialRc = RC_MARKET_TREASURE_CHEST_GAME_ITEM_2;
|
specialRc = isAKey ? RC_MARKET_TREASURE_CHEST_GAME_KEY_2 : RC_MARKET_TREASURE_CHEST_GAME_ITEM_2;
|
||||||
if((actorParams & 0xF) < 6) specialRc = RC_MARKET_TREASURE_CHEST_GAME_ITEM_3;
|
} else if ((actorParams & 0xF) < 6) {
|
||||||
if((actorParams & 0xF) < 8) specialRc = RC_MARKET_TREASURE_CHEST_GAME_ITEM_4;
|
specialRc = isAKey ? RC_MARKET_TREASURE_CHEST_GAME_KEY_3 : RC_MARKET_TREASURE_CHEST_GAME_ITEM_3;
|
||||||
if((actorParams & 0xF) < 10) specialRc = RC_MARKET_TREASURE_CHEST_GAME_ITEM_5;
|
} else if ((actorParams & 0xF) < 8) {
|
||||||
|
specialRc = isAKey ? RC_MARKET_TREASURE_CHEST_GAME_KEY_4 : RC_MARKET_TREASURE_CHEST_GAME_ITEM_4;
|
||||||
|
} else if ((actorParams & 0xF) < 10) {
|
||||||
|
specialRc = isAKey ? RC_MARKET_TREASURE_CHEST_GAME_KEY_5 : RC_MARKET_TREASURE_CHEST_GAME_ITEM_5;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case SCENE_SACRED_FOREST_MEADOW:
|
case SCENE_SACRED_FOREST_MEADOW:
|
||||||
if (actorId == ACTOR_EN_SA) {
|
if (actorId == ACTOR_EN_SA) {
|
||||||
specialRc = RC_SONG_FROM_SARIA;
|
specialRc = RC_SONG_FROM_SARIA;
|
||||||
|
@ -733,6 +733,11 @@ typedef enum {
|
|||||||
RC_MARKET_TREASURE_CHEST_GAME_ITEM_3,
|
RC_MARKET_TREASURE_CHEST_GAME_ITEM_3,
|
||||||
RC_MARKET_TREASURE_CHEST_GAME_ITEM_4,
|
RC_MARKET_TREASURE_CHEST_GAME_ITEM_4,
|
||||||
RC_MARKET_TREASURE_CHEST_GAME_ITEM_5,
|
RC_MARKET_TREASURE_CHEST_GAME_ITEM_5,
|
||||||
|
RC_MARKET_TREASURE_CHEST_GAME_KEY_1,
|
||||||
|
RC_MARKET_TREASURE_CHEST_GAME_KEY_2,
|
||||||
|
RC_MARKET_TREASURE_CHEST_GAME_KEY_3,
|
||||||
|
RC_MARKET_TREASURE_CHEST_GAME_KEY_4,
|
||||||
|
RC_MARKET_TREASURE_CHEST_GAME_KEY_5,
|
||||||
RC_MARKET_GS_GUARD_HOUSE,
|
RC_MARKET_GS_GUARD_HOUSE,
|
||||||
RC_MARKET_BAZAAR_ITEM_1,
|
RC_MARKET_BAZAAR_ITEM_1,
|
||||||
RC_MARKET_BAZAAR_ITEM_2,
|
RC_MARKET_BAZAAR_ITEM_2,
|
||||||
@ -2332,6 +2337,11 @@ typedef enum {
|
|||||||
RHT_MARKET_TREASURE_CHEST_GAME_ITEM_3,
|
RHT_MARKET_TREASURE_CHEST_GAME_ITEM_3,
|
||||||
RHT_MARKET_TREASURE_CHEST_GAME_ITEM_4,
|
RHT_MARKET_TREASURE_CHEST_GAME_ITEM_4,
|
||||||
RHT_MARKET_TREASURE_CHEST_GAME_ITEM_5,
|
RHT_MARKET_TREASURE_CHEST_GAME_ITEM_5,
|
||||||
|
RHT_MARKET_TREASURE_CHEST_GAME_KEY_1,
|
||||||
|
RHT_MARKET_TREASURE_CHEST_GAME_KEY_2,
|
||||||
|
RHT_MARKET_TREASURE_CHEST_GAME_KEY_3,
|
||||||
|
RHT_MARKET_TREASURE_CHEST_GAME_KEY_4,
|
||||||
|
RHT_MARKET_TREASURE_CHEST_GAME_KEY_5,
|
||||||
RHT_MARKET_GS_GUARD_HOUSE,
|
RHT_MARKET_GS_GUARD_HOUSE,
|
||||||
RHT_MARKET_BAZAAR_ITEM_1,
|
RHT_MARKET_BAZAAR_ITEM_1,
|
||||||
RHT_MARKET_BAZAAR_ITEM_2,
|
RHT_MARKET_BAZAAR_ITEM_2,
|
||||||
|
@ -282,6 +282,17 @@ typedef enum {
|
|||||||
RAND_INF_COLOSSUS_GREAT_FAIRY_REWARD,
|
RAND_INF_COLOSSUS_GREAT_FAIRY_REWARD,
|
||||||
RAND_INF_OGC_GREAT_FAIRY_REWARD,
|
RAND_INF_OGC_GREAT_FAIRY_REWARD,
|
||||||
|
|
||||||
|
RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_1,
|
||||||
|
RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_2,
|
||||||
|
RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_3,
|
||||||
|
RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_4,
|
||||||
|
RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_5,
|
||||||
|
RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_1,
|
||||||
|
RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_2,
|
||||||
|
RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_3,
|
||||||
|
RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_4,
|
||||||
|
RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_5,
|
||||||
|
|
||||||
// If you add anything to this list, you need to update the size of randomizerInf in z64save.h to be ceil(RAND_INF_MAX / 16)
|
// If you add anything to this list, you need to update the size of randomizerInf in z64save.h to be ceil(RAND_INF_MAX / 16)
|
||||||
|
|
||||||
RAND_INF_MAX,
|
RAND_INF_MAX,
|
||||||
|
@ -6275,58 +6275,3 @@ s32 func_80038290(PlayState* play, Actor* actor, Vec3s* arg2, Vec3s* arg3, Vec3f
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
GetItemEntry GetChestGameRandoGetItem(s8 room, s16 ogDrawId, PlayState* play) {
|
|
||||||
if (Randomizer_GetSettingValue(RSK_SHUFFLE_CHEST_MINIGAME)) {
|
|
||||||
// RANDOTODO update this logic when we implement keysanity
|
|
||||||
// because 3drando replaces the keys not the rupees
|
|
||||||
if (ogDrawId == GID_RUPEE_GREEN ||
|
|
||||||
ogDrawId == GID_RUPEE_BLUE ||
|
|
||||||
ogDrawId == GID_RUPEE_RED)
|
|
||||||
{
|
|
||||||
switch(room) {
|
|
||||||
case 1:
|
|
||||||
if(!Flags_GetCollectible(play, 0x1B)) {
|
|
||||||
return Randomizer_GetItemFromKnownCheck(RC_MARKET_TREASURE_CHEST_GAME_ITEM_1, GI_RUPEE_GREEN);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
if(!Flags_GetCollectible(play, 0x1C)) {
|
|
||||||
return Randomizer_GetItemFromKnownCheck(RC_MARKET_TREASURE_CHEST_GAME_ITEM_2, GI_RUPEE_GREEN);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
if(!Flags_GetCollectible(play, 0x1D)) {
|
|
||||||
return Randomizer_GetItemFromKnownCheck(RC_MARKET_TREASURE_CHEST_GAME_ITEM_3, GI_RUPEE_BLUE);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
if(!Flags_GetCollectible(play, 0x1E)) {
|
|
||||||
return Randomizer_GetItemFromKnownCheck(RC_MARKET_TREASURE_CHEST_GAME_ITEM_4, GI_RUPEE_BLUE);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
if(!Flags_GetCollectible(play, 0x1F)) {
|
|
||||||
return Randomizer_GetItemFromKnownCheck(RC_MARKET_TREASURE_CHEST_GAME_ITEM_5, GI_RUPEE_RED);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(ogDrawId == GID_HEART_PIECE) {
|
|
||||||
return Randomizer_GetItemFromKnownCheck(RC_MARKET_TREASURE_CHEST_GAME_REWARD, GI_HEART_PIECE);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (GetItemEntry)GET_ITEM_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
s16 GetChestGameRandoGiDrawId(s8 room, s16 ogDrawId, PlayState* play) {
|
|
||||||
GetItemEntry randoGetItem = GetChestGameRandoGetItem(room, ogDrawId, play);
|
|
||||||
|
|
||||||
if (randoGetItem.itemId != ITEM_NONE) {
|
|
||||||
return randoGetItem.gid;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ogDrawId;
|
|
||||||
}
|
|
||||||
|
@ -20,7 +20,6 @@ void DoorAna_WaitClosed(DoorAna* this, PlayState* play);
|
|||||||
void DoorAna_WaitOpen(DoorAna* this, PlayState* play);
|
void DoorAna_WaitOpen(DoorAna* this, PlayState* play);
|
||||||
void DoorAna_GrabPlayer(DoorAna* this, PlayState* play);
|
void DoorAna_GrabPlayer(DoorAna* this, PlayState* play);
|
||||||
|
|
||||||
s16 GetChestGameRandoGiDrawId(s8 room, s16 ogDrawId, PlayState* play);
|
|
||||||
void Grotto_OverrideActorEntrance(Actor* thisx);
|
void Grotto_OverrideActorEntrance(Actor* thisx);
|
||||||
|
|
||||||
const ActorInit Door_Ana_InitVars = {
|
const ActorInit Door_Ana_InitVars = {
|
||||||
|
@ -229,7 +229,6 @@ void EnExItem_WaitForObject(EnExItem* this, PlayState* play) {
|
|||||||
this->scale = 0.5f;
|
this->scale = 0.5f;
|
||||||
this->unkFloat = 0.5f;
|
this->unkFloat = 0.5f;
|
||||||
this->actor.velocity.y = 10.0f;
|
this->actor.velocity.y = 10.0f;
|
||||||
if (!IS_RANDO || !Randomizer_GetSettingValue(RSK_SHUFFLE_CHEST_MINIGAME)) {
|
|
||||||
switch (this->type) {
|
switch (this->type) {
|
||||||
case EXITEM_GREEN_RUPEE_CHEST:
|
case EXITEM_GREEN_RUPEE_CHEST:
|
||||||
this->giDrawId = GID_RUPEE_GREEN;
|
this->giDrawId = GID_RUPEE_GREEN;
|
||||||
@ -244,11 +243,6 @@ void EnExItem_WaitForObject(EnExItem* this, PlayState* play) {
|
|||||||
this->giDrawId = GID_RUPEE_PURPLE;
|
this->giDrawId = GID_RUPEE_PURPLE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
if (play->sceneNum == SCENE_TREASURE_BOX_SHOP) {
|
|
||||||
this->giDrawId = GetChestGameRandoGiDrawId(play->roomCtx.curRoom.num, GID_RUPEE_GREEN, play);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this->actionFunc = EnExItem_ExitChest;
|
this->actionFunc = EnExItem_ExitChest;
|
||||||
break;
|
break;
|
||||||
case EXITEM_MAGIC_FIRE:
|
case EXITEM_MAGIC_FIRE:
|
||||||
|
@ -206,16 +206,6 @@ void ItemEtcetera_DrawThroughLens(Actor* thisx, PlayState* play) {
|
|||||||
if (play->actorCtx.lensActive) {
|
if (play->actorCtx.lensActive) {
|
||||||
func_8002EBCC(&this->actor, play, 0);
|
func_8002EBCC(&this->actor, play, 0);
|
||||||
func_8002ED80(&this->actor, play, 0);
|
func_8002ED80(&this->actor, play, 0);
|
||||||
|
|
||||||
if(IS_RANDO && play->sceneNum == SCENE_TREASURE_BOX_SHOP) {
|
|
||||||
GetItemEntry randoGetItem = GetChestGameRandoGetItem(this->actor.room, this->giDrawId, play);
|
|
||||||
EnItem00_CustomItemsParticles(&this->actor, play, randoGetItem);
|
|
||||||
if (randoGetItem.itemId != ITEM_NONE) {
|
|
||||||
GetItemEntry_Draw(play, randoGetItem);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
GetItem_Draw(play, this->giDrawId);
|
GetItem_Draw(play, this->giDrawId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6866,7 +6866,7 @@ s32 Player_ActionChange_2(Player* this, PlayState* play) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func_80836898(play, this, func_8083A434);
|
func_80836898(play, this, func_8083A434);
|
||||||
if (GameInteractor_Should(GI_VB_GIVE_ITEM_FROM_CHEST, true, &giEntry)) {
|
if (GameInteractor_Should(GI_VB_GIVE_ITEM_FROM_CHEST, true, chest)) {
|
||||||
this->stateFlags1 |= PLAYER_STATE1_GETTING_ITEM | PLAYER_STATE1_ITEM_OVER_HEAD | PLAYER_STATE1_IN_CUTSCENE;
|
this->stateFlags1 |= PLAYER_STATE1_GETTING_ITEM | PLAYER_STATE1_ITEM_OVER_HEAD | PLAYER_STATE1_IN_CUTSCENE;
|
||||||
func_8083AE40(this, giEntry.objectId);
|
func_8083AE40(this, giEntry.objectId);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user