Add support for a ton more ap options
This commit is contained in:
@@ -468,27 +468,27 @@ void Context::ParseArchipelagoOptions(const std::map<std::string, int>& slot_dat
|
||||
|
||||
nlohmann::json slotData = ArchipelagoClient::GetInstance().GetSlotData();
|
||||
mOptions[RSK_LOGIC_RULES].Set(RO_LOGIC_NO_LOGIC);
|
||||
mOptions[RSK_FOREST].Set(RO_CLOSED_FOREST_OFF);
|
||||
mOptions[RSK_KAK_GATE].Set(RO_KAK_GATE_OPEN);
|
||||
mOptions[RSK_DOOR_OF_TIME].Set(RO_DOOROFTIME_OPEN);
|
||||
mOptions[RSK_ZORAS_FOUNTAIN].Set(RO_ZF_CLOSED);
|
||||
mOptions[RSK_SLEEPING_WATERFALL].Set(RO_WATERFALL_CLOSED);
|
||||
mOptions[RSK_FOREST].Set(slotData["closed_forest"]);
|
||||
mOptions[RSK_KAK_GATE].Set(slotData["kakariko_gate"]);
|
||||
mOptions[RSK_DOOR_OF_TIME].Set(slotData["door_of_time"]);
|
||||
mOptions[RSK_ZORAS_FOUNTAIN].Set(slotData["zoras_fountain"]);
|
||||
mOptions[RSK_SLEEPING_WATERFALL].Set(slotData["sleeping_waterfall"]);
|
||||
mOptions[RSK_STARTING_AGE].Set(RO_AGE_CHILD);
|
||||
mOptions[RSK_SELECTED_STARTING_AGE].Set(0);
|
||||
mOptions[RSK_GERUDO_FORTRESS].Set(RO_GF_CARPENTERS_NORMAL);
|
||||
mOptions[RSK_RAINBOW_BRIDGE].Set(RO_BRIDGE_GREG);
|
||||
mOptions[RSK_RAINBOW_BRIDGE_STONE_COUNT].Set(0);
|
||||
mOptions[RSK_RAINBOW_BRIDGE_MEDALLION_COUNT].Set(0);
|
||||
mOptions[RSK_RAINBOW_BRIDGE_REWARD_COUNT].Set(0);
|
||||
mOptions[RSK_RAINBOW_BRIDGE_DUNGEON_COUNT].Set(0);
|
||||
mOptions[RSK_RAINBOW_BRIDGE_TOKEN_COUNT].Set(0);
|
||||
mOptions[RSK_GERUDO_FORTRESS].Set(slotData["fortress_carpenters"]);
|
||||
mOptions[RSK_RAINBOW_BRIDGE].Set(slotData["rainbow_bridge"]);
|
||||
mOptions[RSK_RAINBOW_BRIDGE_STONE_COUNT].Set(slotData["rainbow_bridge_stones_required"]);
|
||||
mOptions[RSK_RAINBOW_BRIDGE_MEDALLION_COUNT].Set(slotData["rainbow_bridge_medallions_required"]);
|
||||
mOptions[RSK_RAINBOW_BRIDGE_REWARD_COUNT].Set(slotData["rainbow_bridge_dungeon_rewards_required"]);
|
||||
mOptions[RSK_RAINBOW_BRIDGE_DUNGEON_COUNT].Set(slotData["rainbow_bridge_dungeons_required"]);
|
||||
mOptions[RSK_RAINBOW_BRIDGE_TOKEN_COUNT].Set(slotData["rainbow_bridge_skull_tokens_required"]);
|
||||
mOptions[RSK_BRIDGE_OPTIONS].Set(0);
|
||||
mOptions[RSK_GANONS_TRIALS].Set(RO_GANONS_TRIALS_SKIP);
|
||||
mOptions[RSK_TRIAL_COUNT].Set(0);
|
||||
mOptions[RSK_GANONS_TRIALS].Set(RO_GANONS_TRIALS_SET_NUMBER);
|
||||
mOptions[RSK_TRIAL_COUNT].Set(slotData["ganons_trials_required"]);
|
||||
mOptions[RSK_STARTING_OCARINA].Set(RO_GENERIC_NO);
|
||||
mOptions[RSK_SHUFFLE_OCARINA].Set(RO_GENERIC_YES);
|
||||
mOptions[RSK_SHUFFLE_OCARINA_BUTTONS].Set(RO_GENERIC_NO);
|
||||
mOptions[RSK_SHUFFLE_SWIM].Set(RO_GENERIC_NO);
|
||||
mOptions[RSK_SHUFFLE_OCARINA_BUTTONS].Set(slotData["shuffle_ocarina_buttons"]);
|
||||
mOptions[RSK_SHUFFLE_SWIM].Set(slotData["shuffle_swim"]);
|
||||
mOptions[RSK_STARTING_DEKU_SHIELD].Set(RO_GENERIC_NO);
|
||||
mOptions[RSK_STARTING_KOKIRI_SWORD].Set(RO_GENERIC_NO);
|
||||
mOptions[RSK_STARTING_MASTER_SWORD].Set(RO_GENERIC_NO);
|
||||
@@ -505,12 +505,14 @@ void Context::ParseArchipelagoOptions(const std::map<std::string, int>& slot_dat
|
||||
mOptions[RSK_STARTING_NOCTURNE_OF_SHADOW].Set(RO_GENERIC_NO);
|
||||
mOptions[RSK_STARTING_PRELUDE_OF_LIGHT].Set(RO_GENERIC_NO);
|
||||
mOptions[RSK_SHUFFLE_KOKIRI_SWORD].Set(RO_GENERIC_YES);
|
||||
mOptions[RSK_SHUFFLE_MASTER_SWORD].Set(RO_GENERIC_NO);
|
||||
mOptions[RSK_SHUFFLE_CHILD_WALLET].Set(RO_GENERIC_NO);
|
||||
mOptions[RSK_SHUFFLE_MASTER_SWORD].Set(slotData["shuffle_master_sword"]);
|
||||
mOptions[RSK_SHUFFLE_CHILD_WALLET].Set(slotData["shuffle_childs_wallet"]);
|
||||
mOptions[RSK_INCLUDE_TYCOON_WALLET].Set(RO_GENERIC_YES);
|
||||
if (slotData["shuffle_dungeon_rewards"] == 0) {
|
||||
mOptions[RSK_SHUFFLE_DUNGEON_REWARDS].Set(RO_DUNGEON_REWARDS_VANILLA);
|
||||
} else if (slotData["shuffle_dungeon_rewards"] == 1) {
|
||||
mOptions[RSK_SHUFFLE_DUNGEON_REWARDS].Set(RO_DUNGEON_REWARDS_END_OF_DUNGEON);
|
||||
} else if (slotData["shuffle_dungeon_rewards"] == 2) {
|
||||
mOptions[RSK_SHUFFLE_DUNGEON_REWARDS].Set(RO_DUNGEON_REWARDS_ANYWHERE);
|
||||
}
|
||||
mOptions[RSK_SHUFFLE_SONGS].Set(RO_SONG_SHUFFLE_ANYWHERE);
|
||||
@@ -544,11 +546,11 @@ void Context::ParseArchipelagoOptions(const std::map<std::string, int>& slot_dat
|
||||
mOptions[RSK_SCRUBS_PRICES_AFFORDABLE].Set(0);
|
||||
mOptions[RSK_SHUFFLE_BEEHIVES].Set(slotData["shuffle_beehives"]);
|
||||
mOptions[RSK_SHUFFLE_COWS].Set(slotData["shuffle_cows"]);
|
||||
mOptions[RSK_SHUFFLE_WEIRD_EGG].Set(RO_GENERIC_NO);
|
||||
mOptions[RSK_SHUFFLE_WEIRD_EGG].Set(slotData["shuffle_weird_egg"]);
|
||||
mOptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD].Set(RO_GENERIC_YES);
|
||||
mOptions[RSK_SHUFFLE_POTS].Set(slotData["shuffle_pots"]);
|
||||
mOptions[RSK_SHUFFLE_CRATES].Set(slotData["shuffle_crates"]);
|
||||
mOptions[RSK_SHUFFLE_FROG_SONG_RUPEES].Set(slotData["shuffle_frogs"]);
|
||||
mOptions[RSK_SHUFFLE_FROG_SONG_RUPEES].Set(slotData["shuffle_frog_song_rupees"]);
|
||||
mOptions[RSK_ITEM_POOL].Set(0);
|
||||
mOptions[RSK_ICE_TRAPS].Set(0);
|
||||
mOptions[RSK_GOSSIP_STONE_HINTS].Set(RO_GOSSIP_STONES_NONE);
|
||||
@@ -579,32 +581,43 @@ void Context::ParseArchipelagoOptions(const std::map<std::string, int>& slot_dat
|
||||
mOptions[RSK_FISHING_POLE_HINT].Set(RO_GENERIC_NO);
|
||||
mOptions[RSK_HINT_CLARITY].Set(0);
|
||||
mOptions[RSK_HINT_DISTRIBUTION].Set(0);
|
||||
mOptions[RSK_SHUFFLE_MAPANDCOMPASS].Set(RO_DUNGEON_ITEM_LOC_ANYWHERE);
|
||||
if (slotData["maps_and_compasses"] == 0) {
|
||||
mOptions[RSK_SHUFFLE_MAPANDCOMPASS].Set(RO_DUNGEON_ITEM_LOC_STARTWITH);
|
||||
} else if (slotData["maps_and_compasses"] == 1) {
|
||||
mOptions[RSK_SHUFFLE_MAPANDCOMPASS].Set(RO_DUNGEON_ITEM_LOC_ANYWHERE);
|
||||
}
|
||||
mOptions[RSK_KEYSANITY].Set(RO_DUNGEON_ITEM_LOC_ANYWHERE);
|
||||
mOptions[RSK_GERUDO_KEYS].Set(RO_GERUDO_KEYS_ANYWHERE);
|
||||
mOptions[RSK_BOSS_KEYSANITY].Set(RO_DUNGEON_ITEM_LOC_ANYWHERE);
|
||||
if (slotData["gcbk_setting"] == 1) {
|
||||
if (slotData["ganons_castle_boss_key"] == 0) {
|
||||
mOptions[RSK_GANONS_BOSS_KEY].Set(RO_GANON_BOSS_KEY_VANILLA);
|
||||
} else if (slotData["ganons_castle_boss_key"] == 1) {
|
||||
mOptions[RSK_GANONS_BOSS_KEY].Set(RO_GANON_BOSS_KEY_ANYWHERE);
|
||||
} else if (slotData["gcbk_setting"] == 0) {
|
||||
} else if (slotData["ganons_castle_boss_key"] == 2) {
|
||||
mOptions[RSK_GANONS_BOSS_KEY].Set(RO_GANON_BOSS_KEY_LACS_VANILLA);
|
||||
} else if (slotData["ganons_castle_boss_key"] == 3) {
|
||||
mOptions[RSK_GANONS_BOSS_KEY].Set(RO_GANON_BOSS_KEY_LACS_STONES);
|
||||
} else if (slotData["ganons_castle_boss_key"] == 4) {
|
||||
mOptions[RSK_GANONS_BOSS_KEY].Set(RO_GANON_BOSS_KEY_LACS_MEDALLIONS);
|
||||
} else if (slotData["ganons_castle_boss_key"] == 5) {
|
||||
mOptions[RSK_GANONS_BOSS_KEY].Set(RO_GANON_BOSS_KEY_LACS_REWARDS);
|
||||
} else if (slotData["ganons_castle_boss_key"] == 6) {
|
||||
mOptions[RSK_GANONS_BOSS_KEY].Set(RO_GANON_BOSS_KEY_LACS_DUNGEONS);
|
||||
} else if (slotData["ganons_castle_boss_key"] == 7) {
|
||||
mOptions[RSK_GANONS_BOSS_KEY].Set(RO_GANON_BOSS_KEY_LACS_TOKENS);
|
||||
}
|
||||
mOptions[RSK_SKIP_CHILD_STEALTH].Set(RO_GENERIC_YES);
|
||||
mOptions[RSK_SKIP_CHILD_ZELDA].Set(RO_GENERIC_YES);
|
||||
mOptions[RSK_SKIP_CHILD_ZELDA].Set(slotData["skip_child_zelda"]);
|
||||
mOptions[RSK_STARTING_STICKS].Set(RO_GENERIC_NO);
|
||||
mOptions[RSK_STARTING_NUTS].Set(RO_GENERIC_NO);
|
||||
mOptions[RSK_FULL_WALLETS].Set(RO_GENERIC_YES);
|
||||
mOptions[RSK_FULL_WALLETS].Set(slotData["full_wallets"]);
|
||||
mOptions[RSK_SHUFFLE_CHEST_MINIGAME].Set(RO_GENERIC_NO);
|
||||
mOptions[RSK_BIG_POE_COUNT].Set(1);
|
||||
mOptions[RSK_SKIP_EPONA_RACE].Set(RO_GENERIC_YES);
|
||||
mOptions[RSK_COMPLETE_MASK_QUEST].Set(RO_GENERIC_YES);
|
||||
mOptions[RSK_SKIP_SCARECROWS_SONG].Set(RO_GENERIC_YES);
|
||||
mOptions[RSK_BIG_POE_COUNT].Set(slotData["big_poe_target_count"]);
|
||||
mOptions[RSK_SKIP_EPONA_RACE].Set(slotData["skip_epona_race"]);
|
||||
mOptions[RSK_COMPLETE_MASK_QUEST].Set(slotData["complete_mask_quest"]);
|
||||
mOptions[RSK_SKIP_SCARECROWS_SONG].Set(slotData["skip_scarecrows_song"]);
|
||||
mOptions[RSK_SKULLS_SUNS_SONG].Set(0);
|
||||
mOptions[RSK_SHUFFLE_ADULT_TRADE].Set(slotData["shuffle_trade_items"]);
|
||||
if (slotData["shuffle_merchants"] == 1) {
|
||||
mOptions[RSK_SHUFFLE_MERCHANTS].Set(RO_SHUFFLE_MERCHANTS_ALL);
|
||||
} else {
|
||||
mOptions[RSK_SHUFFLE_MERCHANTS].Set(RO_SHUFFLE_MERCHANTS_OFF);
|
||||
}
|
||||
mOptions[RSK_SHUFFLE_ADULT_TRADE].Set(slotData["shuffle_adult_trade_items"]);
|
||||
mOptions[RSK_SHUFFLE_MERCHANTS].Set(slotData["shuffle_merchants"]);
|
||||
mOptions[RSK_MERCHANT_PRICES].Set(0);
|
||||
mOptions[RSK_MERCHANT_PRICES_FIXED_PRICE].Set(0);
|
||||
mOptions[RSK_MERCHANT_PRICES_RANGE_1].Set(0);
|
||||
@@ -615,10 +628,10 @@ void Context::ParseArchipelagoOptions(const std::map<std::string, int>& slot_dat
|
||||
mOptions[RSK_MERCHANT_PRICES_GIANT_WALLET_WEIGHT].Set(0);
|
||||
mOptions[RSK_MERCHANT_PRICES_TYCOON_WALLET_WEIGHT].Set(0);
|
||||
mOptions[RSK_MERCHANT_PRICES_AFFORDABLE].Set(0);
|
||||
mOptions[RSK_BLUE_FIRE_ARROWS].Set(RO_GENERIC_YES);
|
||||
mOptions[RSK_SUNLIGHT_ARROWS].Set(RO_GENERIC_YES);
|
||||
mOptions[RSK_ENABLE_BOMBCHU_DROPS].Set(RO_GENERIC_YES);
|
||||
mOptions[RSK_BOMBCHU_BAG].Set(RO_GENERIC_YES);
|
||||
mOptions[RSK_BLUE_FIRE_ARROWS].Set(slotData["blue_fire_arrows"]);
|
||||
mOptions[RSK_SUNLIGHT_ARROWS].Set(slotData["sunlight_arrows"]);
|
||||
mOptions[RSK_ENABLE_BOMBCHU_DROPS].Set(slotData["bombchu_drops"]);
|
||||
mOptions[RSK_BOMBCHU_BAG].Set(slotData["bombchu_bag"]);
|
||||
mOptions[RSK_LINKS_POCKET].Set(RO_LINKS_POCKET_ANYTHING);
|
||||
mOptions[RSK_MQ_DUNGEON_RANDOM].Set(0);
|
||||
mOptions[RSK_MQ_DUNGEON_COUNT].Set(0);
|
||||
@@ -635,14 +648,18 @@ void Context::ParseArchipelagoOptions(const std::map<std::string, int>& slot_dat
|
||||
mOptions[RSK_MQ_ICE_CAVERN].Set(0);
|
||||
mOptions[RSK_MQ_GTG].Set(0);
|
||||
mOptions[RSK_MQ_GANONS_CASTLE].Set(0);
|
||||
mOptions[RSK_LACS_STONE_COUNT].Set(0);
|
||||
mOptions[RSK_LACS_MEDALLION_COUNT].Set(0);
|
||||
mOptions[RSK_LACS_REWARD_COUNT].Set(slotData["gcbk_rewards_required"]);
|
||||
mOptions[RSK_LACS_DUNGEON_COUNT].Set(0);
|
||||
mOptions[RSK_LACS_TOKEN_COUNT].Set(0);
|
||||
mOptions[RSK_LACS_STONE_COUNT].Set(slotData["ganons_castle_boss_key_stones_required"]);
|
||||
mOptions[RSK_LACS_MEDALLION_COUNT].Set(slotData["ganons_castle_boss_key_medallions_required"]);
|
||||
mOptions[RSK_LACS_REWARD_COUNT].Set(slotData["ganons_castle_boss_key_dungeon_rewards_required"]);
|
||||
mOptions[RSK_LACS_DUNGEON_COUNT].Set(slotData["ganons_castle_boss_key_dungeons_required"]);
|
||||
mOptions[RSK_LACS_TOKEN_COUNT].Set(slotData["ganons_castle_boss_key_skull_tokens_required"]);
|
||||
mOptions[RSK_LACS_OPTIONS].Set(0);
|
||||
mOptions[RSK_KEYRINGS].Set(0);
|
||||
mOptions[RSK_KEYRINGS_RANDOM_COUNT].Set(0);
|
||||
if (slotData["key_rings"] == 0) {
|
||||
mOptions[RSK_KEYRINGS].Set(RO_KEYRINGS_OFF);
|
||||
} else if (slotData["key_rings"] == 1) {
|
||||
mOptions[RSK_KEYRINGS].Set(RO_KEYRINGS_COUNT);
|
||||
}
|
||||
mOptions[RSK_KEYRINGS_RANDOM_COUNT].Set(9);
|
||||
mOptions[RSK_KEYRINGS_GERUDO_FORTRESS].Set(0);
|
||||
mOptions[RSK_KEYRINGS_FOREST_TEMPLE].Set(0);
|
||||
mOptions[RSK_KEYRINGS_FIRE_TEMPLE].Set(0);
|
||||
@@ -673,10 +690,16 @@ void Context::ParseArchipelagoOptions(const std::map<std::string, int>& slot_dat
|
||||
mOptions[RSK_ALL_LOCATIONS_REACHABLE].Set(0);
|
||||
mOptions[RSK_SHUFFLE_BOSS_ENTRANCES].Set(0);
|
||||
mOptions[RSK_SHUFFLE_100_GS_REWARD].Set(RO_GENERIC_NO);
|
||||
mOptions[RSK_TRIFORCE_HUNT].Set(RO_GENERIC_NO);
|
||||
mOptions[RSK_TRIFORCE_HUNT_PIECES_TOTAL].Set(0);
|
||||
mOptions[RSK_TRIFORCE_HUNT_PIECES_REQUIRED].Set(0);
|
||||
mOptions[RSK_SHUFFLE_BOSS_SOULS].Set(RO_GENERIC_NO);
|
||||
mOptions[RSK_TRIFORCE_HUNT].Set(slotData["triforce_hunt"]);
|
||||
uint16_t triforcePiecesRequired = slotData["triforce_hunt_required_pieces"];
|
||||
uint16_t triforcePiecesExtraPercentage = slotData["triforce_hunt_extra_pieces_percentage"];
|
||||
uint16_t triforcePiecesTotal = floor(triforcePiecesRequired * (1 + (triforcePiecesExtraPercentage / 100)));
|
||||
if (triforcePiecesTotal > 100) {
|
||||
triforcePiecesTotal = 100;
|
||||
}
|
||||
mOptions[RSK_TRIFORCE_HUNT_PIECES_TOTAL].Set(triforcePiecesTotal);
|
||||
mOptions[RSK_TRIFORCE_HUNT_PIECES_REQUIRED].Set(triforcePiecesRequired);
|
||||
mOptions[RSK_SHUFFLE_BOSS_SOULS].Set(slotData["shuffle_boss_souls"]);
|
||||
if (slotData["shuffle_fish"] == 0) {
|
||||
mOptions[RSK_FISHSANITY].Set(RO_FISHSANITY_OFF);
|
||||
} else if (slotData["shuffle_fish"] == 1) {
|
||||
@@ -687,15 +710,15 @@ void Context::ParseArchipelagoOptions(const std::map<std::string, int>& slot_dat
|
||||
mOptions[RSK_FISHSANITY].Set(RO_FISHSANITY_BOTH);
|
||||
}
|
||||
mOptions[RSK_FISHSANITY_POND_COUNT].Set(15);
|
||||
mOptions[RSK_FISHSANITY_AGE_SPLIT].Set(15);
|
||||
mOptions[RSK_SHUFFLE_FISHING_POLE].Set(RO_GENERIC_NO);
|
||||
mOptions[RSK_INFINITE_UPGRADES].Set(RO_INF_UPGRADES_OFF);
|
||||
mOptions[RSK_SKELETON_KEY].Set(RO_GENERIC_NO);
|
||||
mOptions[RSK_SHUFFLE_DEKU_STICK_BAG].Set(RO_GENERIC_NO);
|
||||
mOptions[RSK_SHUFFLE_DEKU_NUT_BAG].Set(RO_GENERIC_NO);
|
||||
mOptions[RSK_SHUFFLE_FREESTANDING].Set(slotData["shuffle_freestanding"]);
|
||||
mOptions[RSK_FISHSANITY_AGE_SPLIT].Set(1);
|
||||
mOptions[RSK_SHUFFLE_FISHING_POLE].Set(slotData["shuffle_fishing_pole"]);
|
||||
mOptions[RSK_INFINITE_UPGRADES].Set(slotData["infinite_upgrades"]);
|
||||
mOptions[RSK_SKELETON_KEY].Set(slotData["skeleton_key"]);
|
||||
mOptions[RSK_SHUFFLE_DEKU_STICK_BAG].Set(slotData["shuffle_deku_stick_bag"]);
|
||||
mOptions[RSK_SHUFFLE_DEKU_NUT_BAG].Set(slotData["shuffle_deku_nut_bag"]);
|
||||
mOptions[RSK_SHUFFLE_FREESTANDING].Set(slotData["shuffle_freestanding_items"]);
|
||||
mOptions[RSK_SHUFFLE_FAIRIES].Set(slotData["shuffle_fairies"]);
|
||||
mOptions[RSK_LOCK_OVERWORLD_DOORS].Set(RO_GENERIC_NO);
|
||||
mOptions[RSK_LOCK_OVERWORLD_DOORS].Set(slotData["lock_overworld_doors"]);
|
||||
mOptions[RSK_SHUFFLE_GRASS].Set(slotData["shuffle_grass"]);
|
||||
}
|
||||
|
||||
@@ -732,6 +755,11 @@ void Context::ParseArchipelagoItemsLocations(const std::vector<ArchipelagoClient
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
itemLocationTable[RC_ZR_MAGIC_BEAN_SALESMAN].SetCustomPrice(60);
|
||||
itemLocationTable[RC_KAK_GRANNYS_SHOP].SetCustomPrice(100);
|
||||
itemLocationTable[RC_WASTELAND_BOMBCHU_SALESMAN].SetCustomPrice(200);
|
||||
itemLocationTable[RC_GC_MEDIGORON].SetCustomPrice(200);
|
||||
}
|
||||
|
||||
void Context::WriteHintJson(nlohmann::ordered_json& spoilerFileJson) {
|
||||
|
||||
Reference in New Issue
Block a user