diff --git a/Z3DR b/Z3DR index 4176170..5063201 160000 --- a/Z3DR +++ b/Z3DR @@ -1 +1 @@ -Subproject commit 4176170ec22763e0f6f9fae323ffbb4af49af004 +Subproject commit 50632016a9b600345ee3deacfa5bf6fe9c819a3c diff --git a/source/fill.cpp b/source/fill.cpp index e365ec0..2d7c4f0 100644 --- a/source/fill.cpp +++ b/source/fill.cpp @@ -497,7 +497,7 @@ static void AssumedFill(const std::vector& items, const std::vectorIsRepeatable()) && ItemTable(item).IsReusable() ){ //unsuccessfulPlacement = true; - // CitraPrint("Attemting to place repeatable item in non repeatable spot in AssumedFill"); + CitraPrint("Attemting to place repeatable item in non repeatable spot in AssumedFill"); PlacementLog_Msg("\n Attempted to place " + ItemTable(item).GetName().GetEnglish() + " at " + Location(selectedLocation)->GetName()); itemsToPlace.push_back(item); } @@ -650,16 +650,17 @@ static void RandomizeDungeonItems() { } -const std::array dungeonRewards = { - ODOLWAS_REMAINS, - GOHTS_REMAINS, - GYORGS_REMAINS, - TWINMOLDS_REMAINS, - //MAJORAS_MASK, -}; for (ItemKey item : dungeonRewards) { - CitraPrint("Rewards:\n"); - CitraPrint(ItemTable(item).GetName().GetEnglish() + "\n"); - } + const std::array dungeonRewards = { + ODOLWAS_REMAINS, + GOHTS_REMAINS, + GYORGS_REMAINS, + TWINMOLDS_REMAINS, + //MAJORAS_MASK, + }; + //for (ItemKey item : dungeonRewards) { + // CitraPrint("Rewards:\n"); + // CitraPrint(ItemTable(item).GetName().GetEnglish() + "\n"); + // } //CitraPrint("About to start attempting Reward Shuffle Any Dungeon"); if (ShuffleRewards.Is((u8)RewardShuffleSetting::REWARDSHUFFLE_ANY_DUNGEON)) { AddElementsToPool(anyDungeonItems, dungeonRewards); @@ -796,7 +797,7 @@ int Fill() { showItemProgress = true; - //Place dungeon rewards - always vanilla for now + //Place dungeon rewards RandomizeDungeonRewards(); //Place dungeon items restricted to their Own Dungeon @@ -814,7 +815,32 @@ int Fill() { AssumedFill(gfItems, gfLocations, true); } - + //Then if repeatable items on tokens is off -- fill token spots with nonrepeatable items + if (Tokensanity && !RepeatableItemsOnTokens){ + //Get all nonrepeatable items + std::vector remainingNonRepeatItemPool = FilterAndEraseFromPool(ItemPool, [](const ItemKey i) {return ItemTable(i).IsReusable() == false;}); + std::vector SwampSkullLocations = FilterFromPool(allLocations, [](const LocationKey loc) {return Location(loc)->IsCategory(Category::cSwampSkulltula);}); + //CitraPrint("Starting Assumed Fill on Swamp Locations"); + //fill skulltula spots with them + FastFill(remainingNonRepeatItemPool, SwampSkullLocations); + + std::vector OceanSkullLocations = FilterFromPool(allLocations, [](const LocationKey loc1) {return Location(loc1)->IsCategory(Category::cOceanSkulltula);}); + //CitraPrint("Starting Assumed Fill on Ocean Locations"); + FastFill(remainingNonRepeatItemPool, OceanSkullLocations); + + //CitraPrint("Adding RemainingNonRepeatItems back to main ItemPool"); + AddElementsToPool(ItemPool, remainingNonRepeatItemPool); + //Then Place Anju & Kafei Items in spots accessable on Day 1, this should prevent situations where you cant get an item in time for its use + std::vector day1Locations = FilterFromPool(allLocations, [](const LocationKey loc) {return Location(loc)->IsCategory(Category::cDayOne);}); + std::vector anjukafeiitems = FilterAndEraseFromPool(ItemPool, [](const ItemKey i) {return ItemTable(i).GetItemType() == ITEMTYPE_QUEST;}); + AssumedFill(anjukafeiitems, day1Locations,true); + + //get the rest of the repeatable items and fill them in -- may not be needed? + //std::vector remainingRepeatItems = FilterAndEraseFromPool(ItemPool, [](const ItemKey i) {return ItemTable(i).IsReusable();}); + //CitraPrint("Starting Fill of remaining Repeat Items"); + //AssumedFill(remainingRepeatItems, allLocations,true); + } + //Place Main Inventory First //So first get all items in the pool + DekuMask, std::vector mainadvancementItems = FilterAndEraseFromPool(ItemPool, [](const ItemKey i) {return ItemTable(i).IsAdvancement() && ItemTable(i).GetItemType() != ITEMTYPE_QUEST;});//(ItemTable(i).GetItemType() == ITEMTYPE_ITEM || ItemTable(i).GetItemType() == ITEMTYPE_MASK || ItemTable(i).GetItemType() == ITEMTYPE_TRADE || ItemTable(i).GetItemType() == ITEMTYPE_GFAIRY) @@ -826,6 +852,10 @@ int Fill() { std::vector anjukafeiitems = FilterAndEraseFromPool(ItemPool, [](const ItemKey i) {return ItemTable(i).GetItemType() == ITEMTYPE_QUEST;}); AssumedFill(anjukafeiitems, day1Locations,true); + std::vector repeatableItemLocations = FilterFromPool(allLocations, [](const LocationKey loc) {return Location(loc)->IsRepeatable();}); + std::vector remainingRepeatItemPool = FilterAndEraseFromPool(ItemPool, [](const ItemKey i) {return ItemTable(i).IsReusable();}); + AssumedFill(remainingRepeatItemPool, repeatableItemLocations, true); + //Then Place Deku Merchant Items /* if(ShuffleMerchants) { std::vector dekuTrades = FilterAndEraseFromPool(ItemPool, [](const ItemKey i) {return ItemTable(i).GetItemType() == ITEMTYPE_TRADE;}); @@ -849,25 +879,22 @@ int Fill() { } AssumedFill(songs, songLocations, true); }*/ - - - - - + //Then place Link's Pocket Item if it has to be an advancement item //Links Pocket is useless as there is no unobtainable check due to a certain time travel sword pedistal //Any check that occurs before MM3D world initialization like Ocarina/KokiriSword/Shield/SongofTime //Can just be handled by starting inventory //RandomizeLinksPocket(); - + + //Then place the rest of the advancement items + std::vector remainingAdvancementItems = FilterAndEraseFromPool(ItemPool, [](const ItemKey i) { return ItemTable(i).IsAdvancement();}); + AssumedFill(remainingAdvancementItems, allLocations, true); + //Place Tokens before junk std::vector tokens = FilterAndEraseFromPool(ItemPool, [](const ItemKey i) {return ItemTable(i).GetItemType() == ITEMTYPE_TOKEN; }); AssumedFill(tokens, allLocations, true); // CitraPrint("Starting AssumedFill..."); - //Then place the rest of the advancement items - std::vector remainingAdvancementItems = FilterAndEraseFromPool(ItemPool, [](const ItemKey i) { return ItemTable(i).IsAdvancement();}); - AssumedFill(remainingAdvancementItems, allLocations, true); // CitraPrint("AssumedFill was sucessful"); // CitraPrint("Starting Fast Fill..."); //Fast fill for the rest of the pool diff --git a/source/item_list.cpp b/source/item_list.cpp index 8432649..c553c44 100644 --- a/source/item_list.cpp +++ b/source/item_list.cpp @@ -14,8 +14,8 @@ void ItemTable_Init() { //repeatable denotes that an item in a vanilla playth itemTable[NONE] = Item(false, false, &noVariable, Text{"No Item", "Rien", "Sin Objeto" }, NONE, (u32)GetItemID::GI_NONE, ITEMTYPE_EVENT); itemTable[KOKIRI_SWORD] = Item(true , false, &KokiriSword, Text{"Kokiri Sword", "Épée Kokiri", "Espada Kokiri" }, KOKIRI_SWORD, (u32)GetItemID::GI_KOKIRI_SWORD, ITEMTYPE_ITEM ); itemTable[GREAT_FAIRYS_SWORD] = Item(true , false, &GreatFairySword, Text{"Great Fairy's Sword", "Grande Épée de Fees", "Espada de la Gran Hada"}, GREAT_FAIRYS_SWORD, (u32)GetItemID::GI_GREAT_FAIRY_SWORD, ITEMTYPE_GFAIRY ); - itemTable[HEROS_SHIELD] = Item(false, true, &HerosShield, Text{"Heros Shield", "Bouclier du Heros", "Escudo del Heroe"}, HEROS_SHIELD, (u32)GetItemID::GI_SHIELD_HERO, ITEMTYPE_ITEM ); - itemTable[DEKU_STICK] = Item(true , true, &DekuStick, Text{"Deku Stick", "Bâton Mojo", "palos deku" }, DEKU_STICK, (u32)GetItemID::GI_STICKS_1, ITEMTYPE_ITEM ); + itemTable[HEROS_SHIELD] = Item(false, false, &HerosShield, Text{"Heros Shield", "Bouclier du Heros", "Escudo del Heroe"}, HEROS_SHIELD, (u32)GetItemID::GI_SHIELD_HERO, ITEMTYPE_ITEM ); + itemTable[DEKU_STICK] = Item(true , false, &DekuStick, Text{"Deku Stick", "Bâton Mojo", "palos deku" }, DEKU_STICK, (u32)GetItemID::GI_STICKS_1, ITEMTYPE_ITEM ); itemTable[LAND_TITLE] = Item(true, true, &LandTitle, Text{"Land Title Deed", "Titre de propriete fonciere", "Escritura de propiedad de la Tierra" }, LAND_TITLE, (u32)GetItemID::GI_TOWN_TITLE_DEED, ITEMTYPE_TRADE ); itemTable[SWAMP_TITLE] = Item(true, true, &SwampTitle, Text{"Swamp Title Deed", "Titre de propriete des marais", "Escriture de propiedad del pantano" }, SWAMP_TITLE, (u32)GetItemID::GI_SWAMP_TITLE_DEED, ITEMTYPE_TRADE ); itemTable[MOUNTAIN_TITLE] = Item(true, true, &MountainTitle, Text{"Mountain Title Deed", "Titre de propriete de la montagne", "Escitura de propiedad de la montana" }, MOUNTAIN_TITLE, (u32)GetItemID::GI_MOUNTAIN_TITLE_DEED, ITEMTYPE_TRADE ); @@ -33,12 +33,12 @@ void ItemTable_Init() { //repeatable denotes that an item in a vanilla playth itemTable[ICE_ARROWS] = Item(true, false, &IceArrows, Text{"Ice Arrow", "Flèche de glace", "Flecha de hielo"}, ICE_ARROWS, (u32)GetItemID::GI_ICE_ARROW, ITEMTYPE_ITEM ); itemTable[LIGHT_ARROWS] = Item(true, false, &LightArrows, Text{"Light Arrow", "Flèche de lumière", "Flecha de luz"}, LIGHT_ARROWS, (u32)GetItemID::GI_LIGHT_ARROW, ITEMTYPE_ITEM ); itemTable[HOOKSHOT] = Item(true, false, &Hookshot, Text{"Hookshot", "Grappin", "Gancho" }, HOOKSHOT, (u32)GetItemID::GI_HOOKSHOT, ITEMTYPE_ITEM ); - itemTable[MAGIC_BEAN] = Item(true, true, &MagicBean, Text{"Magic Bean", "Haricot magique", "Habichuelas mágicas"}, MAGIC_BEAN, (u32)GetItemID::GI_MAGIC_BEAN, ITEMTYPE_ITEM ); - itemTable[MAGIC_BEAN_PACK] = Item(true, true, &MagicBeanPack, Text{"Magic Bean Pack", "Paquet de haricots magiques", "Lote de habichuelas mágicas"}, MAGIC_BEAN_PACK, (u32)GetItemID::GI_MAGIC_BEAN, ITEMTYPE_ITEM ); + itemTable[MAGIC_BEAN] = Item(true, false, &MagicBean, Text{"Magic Bean", "Haricot magique", "Habichuelas mágicas"}, MAGIC_BEAN, (u32)GetItemID::GI_MAGIC_BEAN, ITEMTYPE_ITEM ); + itemTable[MAGIC_BEAN_PACK] = Item(true, false, &MagicBeanPack, Text{"Magic Bean Pack", "Paquet de haricots magiques", "Lote de habichuelas mágicas"}, MAGIC_BEAN_PACK, (u32)GetItemID::GI_MAGIC_BEAN, ITEMTYPE_ITEM ); itemTable[DOUBLE_DEFENSE] = Item(true, false, &noVariable, Text{"Double Defense", "Double défence", "Doble poder defensivo"}, DOUBLE_DEFENSE, 0xB2, ITEMTYPE_GFAIRY ); itemTable[OCARINA_OF_TIME] = Item(true, false, &Ocarina, Text{"Ocarina of Time", "Ocarina du temps", "Ocarina del Tiempo"}, OCARINA_OF_TIME, (u32)GetItemID::GI_OCARINA_OF_TIME, ITEMTYPE_ITEM ); itemTable[PICTOGRAPH_BOX] = Item(true, false, &Pictobox, Text{"Pictograph Box", "Boite a Images", "Camara Pictografica"}, PICTOGRAPH_BOX, (u32)GetItemID::GI_PICTOGRAPH_BOX, ITEMTYPE_ITEM ); - itemTable[POWDER_KEG] = Item(true, true, &PowderKeg, Text{"Powder Keg", "Baril de Poudre", "Barril de Polovora"}, POWDER_KEG, (u32)GetItemID::GI_POWDER_KEG, ITEMTYPE_ITEM ); + itemTable[POWDER_KEG] = Item(true, false, &PowderKeg, Text{"Powder Keg", "Baril de Poudre", "Barril de Polovora"}, POWDER_KEG, (u32)GetItemID::GI_POWDER_KEG, ITEMTYPE_ITEM ); itemTable[KEATON_MASK] = Item(true, false, &KeatonMask, Text{"Keaton Mask", "Masque de Keaton", "Careta de Keaton"}, KEATON_MASK, (u32)GetItemID::GI_MASK_KEATON, ITEMTYPE_MASK ); itemTable[BUNNY_HOOD] = Item(true, false, &BunnyHood, Text{"Bunny Hood", "Masque du lapin", "Capucha de conejo"}, BUNNY_HOOD, (u32)GetItemID::GI_MASK_BUNNY_HOOD, ITEMTYPE_MASK ); itemTable[GORON_MASK] = Item(true, false, &GoronMask, Text{"Goron Mask", "Masque Goron", "Máscara Goron"}, GORON_MASK, (u32)GetItemID::GI_MASK_GORON, ITEMTYPE_MASK ); @@ -63,30 +63,30 @@ void ItemTable_Init() { //repeatable denotes that an item in a vanilla playth itemTable[GIANTS_MASK] = Item(true, false, &GiantsMask, Text{"Giant's Mask", "Masque de geant", "Máscara de gigante"}, GIANTS_MASK, (u32)GetItemID::GI_MASK_GIANTS, ITEMTYPE_MASK ); itemTable[FIERCE_DEITY_MASK] = Item(true, false, &FierceDeityMask, Text{"Fierce Deity Mask", "Masque Dietetique Fiere", "Máscara Fiere Deity"}, FIERCE_DEITY_MASK, (u32)GetItemID::GI_MASK_FIERCE_DEITY, ITEMTYPE_MASK ); itemTable[MASK_OF_TRUTH] = Item(true, false, &MaskOfTruth, Text{"Mask of Truth", "Masque de vérité", "Máscara de la Verdad"}, MASK_OF_TRUTH, (u32)GetItemID::GI_MASK_OF_TRUTH, ITEMTYPE_MASK ); - itemTable[FISHING_PASS] = Item(false, true, &noVariable, Text{"Fishing Pass", "Fishing Pass", "Fishing Pass"}, FISHING_PASS, 0xBA, ITEMTYPE_ITEM ); + itemTable[FISHING_PASS] = Item(false, false, &noVariable, Text{"Fishing Pass", "Fishing Pass", "Fishing Pass"}, FISHING_PASS, 0xBA, ITEMTYPE_ITEM ); // //Swamp Spider Tokens - itemTable[SWAMP_SKULLTULA_TOKEN] = Item(true, true, &SwampSkulltulaTokens, Text{"Swamp Skulltula Token", "Jeton de Skulltula dorée", "Símbolo de skulltula dorada" }, SWAMP_SKULLTULA_TOKEN, 0x44, ITEMTYPE_TOKEN); + itemTable[SWAMP_SKULLTULA_TOKEN] = Item(true, false, &SwampSkulltulaTokens, Text{"Swamp Skulltula Token", "Jeton de Skulltula dorée", "Símbolo de skulltula dorada" }, SWAMP_SKULLTULA_TOKEN, 0x44, ITEMTYPE_TOKEN); //Oceanside Spider Tokens - itemTable[OCEANSIDE_SKULLTULA_TOKEN] = Item(true, true, &OceanSkulltulaTokens, Text{"Oceanside Skulltula Token", "Jeton de Skulltula dorée", "Símbolo de skulltula dorada" }, OCEANSIDE_SKULLTULA_TOKEN, 0x6D, ITEMTYPE_TOKEN); + itemTable[OCEANSIDE_SKULLTULA_TOKEN] = Item(true, false, &OceanSkulltulaTokens, Text{"Oceanside Skulltula Token", "Jeton de Skulltula dorée", "Símbolo de skulltula dorada" }, OCEANSIDE_SKULLTULA_TOKEN, 0x6D, ITEMTYPE_TOKEN); //Stray Fairies// //Clock Town Fairies - itemTable[CT_STRAY_FAIRY] = Item(true, true, &ClockTownStrayFairy, Text{"Clock Town Stray Fairy", "Fee errante de la Bourg-Clocher", "Cuidad Reloj Hada Callejera"}, CT_STRAY_FAIRY, (u32)GetItemID::GI_NONE, ITEMTYPE_STRAYFAIRY); + itemTable[CT_STRAY_FAIRY] = Item(true, false, &ClockTownStrayFairy, Text{"Clock Town Stray Fairy", "Fee errante de la Bourg-Clocher", "Cuidad Reloj Hada Callejera"}, CT_STRAY_FAIRY, (u32)GetItemID::GI_NONE, ITEMTYPE_STRAYFAIRY); //Woodfall Stray Fairies - itemTable[WF_STRAY_FAIRY] = Item(true, true, &WoodfallStrayFairies, Text{"Woodfall Stray Fairy", "Fee errante de la Bois-Cascade", "Hada Callejera del Bosque Catarata" }, WF_STRAY_FAIRY, (u32)GetItemID::GI_NONE, ITEMTYPE_STRAYFAIRY); + itemTable[WF_STRAY_FAIRY] = Item(true, false, &WoodfallStrayFairies, Text{"Woodfall Stray Fairy", "Fee errante de la Bois-Cascade", "Hada Callejera del Bosque Catarata" }, WF_STRAY_FAIRY, (u32)GetItemID::GI_NONE, ITEMTYPE_STRAYFAIRY); //Snowhead Stray Fairies - itemTable[SH_STRAY_FAIRY] = Item(true, true, &SnowheadStrayFairies, Text{"Snowhead Stray Fairy", "Fee errante de la Pic des Neiges", "Hada Callejera del Pico Nevado" }, SH_STRAY_FAIRY, (u32)GetItemID::GI_NONE, ITEMTYPE_STRAYFAIRY); + itemTable[SH_STRAY_FAIRY] = Item(true, false, &SnowheadStrayFairies, Text{"Snowhead Stray Fairy", "Fee errante de la Pic des Neiges", "Hada Callejera del Pico Nevado" }, SH_STRAY_FAIRY, (u32)GetItemID::GI_NONE, ITEMTYPE_STRAYFAIRY); //Great Bay Stray Fairies - itemTable[GBT_STRAY_FAIRY] = Item(true, true, &GreatBayStrayFairies, Text{"Great Bay Stray Fairy", "Fee errante de la Grande Baie", "Gran Hada Callejera de la Bahia" }, GBT_STRAY_FAIRY, (u32)GetItemID::GI_NONE, ITEMTYPE_STRAYFAIRY); + itemTable[GBT_STRAY_FAIRY] = Item(true, false, &GreatBayStrayFairies, Text{"Great Bay Stray Fairy", "Fee errante de la Grande Baie", "Gran Hada Callejera de la Bahia" }, GBT_STRAY_FAIRY, (u32)GetItemID::GI_NONE, ITEMTYPE_STRAYFAIRY); //Stone Tower Stray Fairies - itemTable[ST_STRAY_FAIRY] = Item(true, true, &StoneTowerStrayFairies, Text{"Stone Tower Stray Fairy", "Fee errante de la Forteresse de Pierre", "Hada Callejera de la Torre Piedra" }, ST_STRAY_FAIRY, (u32)GetItemID::GI_NONE, ITEMTYPE_STRAYFAIRY); + itemTable[ST_STRAY_FAIRY] = Item(true, false, &StoneTowerStrayFairies, Text{"Stone Tower Stray Fairy", "Fee errante de la Forteresse de Pierre", "Hada Callejera de la Torre Piedra" }, ST_STRAY_FAIRY, (u32)GetItemID::GI_NONE, ITEMTYPE_STRAYFAIRY); //Bottles itemTable[EMPTY_BOTTLE1] = Item(true, false, &ArcheryBottle, Text{"Empty Bottle", "Flacon vide", "Botella vacía" }, EMPTY_BOTTLE1, (u32)GetItemID::GI_BOTTLE_EMPTY, ITEMTYPE_ITEM); @@ -101,17 +101,17 @@ void ItemTable_Init() { //repeatable denotes that an item in a vanilla playth itemTable[DEKU_PRINCESS] = Item(true, true, &DekuPrincess, Text{"Deku Princess", "Princesse Mojo", "Princesa Deku"}, DEKU_PRINCESS, (u32)GetItemID::GI_DEKU_PRINCESS_FAIRY, ITEMTYPE_ITEM); itemTable[BOTTLE_WITH_GREEN_POTION] = Item(false, false, &HasBottle, Text{"Bottle with Green Potion", "Flacon de potion verde", "Botella de poción verte"}, BOTTLE_WITH_GREEN_POTION, (u32)GetItemID::GI_POTION_GREEN, ITEMTYPE_ITEM); itemTable[BOTTLE_WITH_BLUE_POTION] = Item(false, false, &HasBottle, Text{"Bottle with Blue Potion", "Flacon de potion azul", "Botella de poción bleu"}, BOTTLE_WITH_BLUE_POTION, (u32)GetItemID::GI_POTION_BLUE, ITEMTYPE_ITEM); - itemTable[BOTTLE_WITH_FAIRY] = Item(false, true, &HasBottle, Text{"Bottle with Fairy", "Bottle with Fairy", "Bottle with Fairy",}, BOTTLE_WITH_FAIRY, (u32)GetItemID::GI_FAIRY, ITEMTYPE_ITEM); - itemTable[BOTTLE_WITH_BUGS] = Item(false, true, &HasBottle, Text{"Bottle with Bugs", "Bottle with Bugs", "Bottle with Bugs",}, BOTTLE_WITH_BUGS, (u32)GetItemID::GI_BOTTLE_BUG, ITEMTYPE_ITEM); - itemTable[BOTTLE_WITH_FISH] = Item(false, true, &HasBottle, Text{"Bottle with Fish", "Bottle with Fish", "Bottle with Fish"}, BOTTLE_WITH_FISH, (u32)GetItemID::GI_BOTTLE_FISH, ITEMTYPE_ITEM); - itemTable[BOTTLE_WITH_POE] = Item(false, true, &HasBottle, Text{"Bottle with Poe", "Bottle with Poe", "Bottle with Poe",}, BOTTLE_WITH_POE, (u32)GetItemID::GI_BOTTLE_POE_TEXT, ITEMTYPE_ITEM); - itemTable[BOTTLE_WITH_BIG_POE] = Item(false, true, &HasBottle, Text{"Bottle with Big Poe", "Bottle with Big Poe", "Bottle with Big Poe",}, BOTTLE_WITH_BIG_POE, (u32)GetItemID::GI_BOTTLE_BIG_POE, ITEMTYPE_ITEM); - itemTable[BOTTLE_WITH_SPRING_WATER] = Item(false, true, &HasBottle, Text{"Bottle with Spring Water", "Bottle with Spring Water", "Bottle with Spring Water",}, BOTTLE_WITH_SPRING_WATER, (u32)GetItemID::GI_BOTTLE_SPRING_WATER, ITEMTYPE_ITEM); - itemTable[BOTTLE_WITH_HOT_SPRING_WATER] = Item(false, true, &HasBottle, Text{"Bottle with Hot Spring Water", "Bottle with Hot Spring Water", "Bottle with Hot Spring Water",}, BOTTLE_WITH_HOT_SPRING_WATER, (u32)GetItemID::GI_BOTTLE_HOT_SPRING_WATER, ITEMTYPE_ITEM); + itemTable[BOTTLE_WITH_FAIRY] = Item(false, false, &HasBottle, Text{"Bottle with Fairy", "Bottle with Fairy", "Bottle with Fairy",}, BOTTLE_WITH_FAIRY, (u32)GetItemID::GI_FAIRY, ITEMTYPE_ITEM); + itemTable[BOTTLE_WITH_BUGS] = Item(false, false, &HasBottle, Text{"Bottle with Bugs", "Bottle with Bugs", "Bottle with Bugs",}, BOTTLE_WITH_BUGS, (u32)GetItemID::GI_BOTTLE_BUG, ITEMTYPE_ITEM); + itemTable[BOTTLE_WITH_FISH] = Item(false, false, &HasBottle, Text{"Bottle with Fish", "Bottle with Fish", "Bottle with Fish"}, BOTTLE_WITH_FISH, (u32)GetItemID::GI_BOTTLE_FISH, ITEMTYPE_ITEM); + itemTable[BOTTLE_WITH_POE] = Item(false, false, &HasBottle, Text{"Bottle with Poe", "Bottle with Poe", "Bottle with Poe",}, BOTTLE_WITH_POE, (u32)GetItemID::GI_BOTTLE_POE_TEXT, ITEMTYPE_ITEM); + itemTable[BOTTLE_WITH_BIG_POE] = Item(false, false, &HasBottle, Text{"Bottle with Big Poe", "Bottle with Big Poe", "Bottle with Big Poe",}, BOTTLE_WITH_BIG_POE, (u32)GetItemID::GI_BOTTLE_BIG_POE, ITEMTYPE_ITEM); + itemTable[BOTTLE_WITH_SPRING_WATER] = Item(false, false, &HasBottle, Text{"Bottle with Spring Water", "Bottle with Spring Water", "Bottle with Spring Water",}, BOTTLE_WITH_SPRING_WATER, (u32)GetItemID::GI_BOTTLE_SPRING_WATER, ITEMTYPE_ITEM); + itemTable[BOTTLE_WITH_HOT_SPRING_WATER] = Item(false, false, &HasBottle, Text{"Bottle with Hot Spring Water", "Bottle with Hot Spring Water", "Bottle with Hot Spring Water",}, BOTTLE_WITH_HOT_SPRING_WATER, (u32)GetItemID::GI_BOTTLE_HOT_SPRING_WATER, ITEMTYPE_ITEM); itemTable[BOTTLE_WITH_ZORA_EGG] = Item(false, true, &HasBottle, Text{"Bottle with Zora Egg", "Bottle with Zora Egg", "Bottle with Zora Egg",}, BOTTLE_WITH_ZORA_EGG, (u32)GetItemID::GI_BOTTLE_ZORA_EGG, ITEMTYPE_ITEM); - itemTable[BOTTLE_WITH_MUSHROOM] = Item(false, true, &HasBottle, Text{"Bottle with Mushroom", "Bottle with Mushroom", "Bottle with Mushroom",}, BOTTLE_WITH_MUSHROOM, (u32)GetItemID::GI_BOTTLE_MAGIC_MUSHROOM, ITEMTYPE_ITEM); + itemTable[BOTTLE_WITH_MUSHROOM] = Item(false, false, &HasBottle, Text{"Bottle with Mushroom", "Bottle with Mushroom", "Bottle with Mushroom",}, BOTTLE_WITH_MUSHROOM, (u32)GetItemID::GI_BOTTLE_MAGIC_MUSHROOM, ITEMTYPE_ITEM); itemTable[ZORA_EGG] = Item(false, true, &ZoraEgg, Text{"Zora Egg", "Oeuf de Zora", "Huevo de Zora"}, ZORA_EGG, (u32)GetItemID::GI_BOTTLE_ZORA_EGG, ITEMTYPE_ITEM); - itemTable[SEAHORSE] = Item(true, true, &Seahorse, Text{"Seahorse", "Hippocampe", "Caballo de mar"}, SEAHORSE, (u32)GetItemID::GI_BOTTLE_SEAHORSE, ITEMTYPE_ITEM); + itemTable[SEAHORSE] = Item(true, true, &Seahorse, Text{"Seahorse", "Hippocampe", "Caballo de mar"}, SEAHORSE, (u32)GetItemID::GI_BOTTLE_SEAHORSE, ITEMTYPE_ITEM); //Upgrades itemTable[RAZOR_SWORD] = Item(true, false, &RazorSword, Text{"Razor Sword", "Lame Rasoir", "Espada Afilada" }, RAZOR_SWORD, (u32)GetItemID::GI_RAZOR_SWORD, ITEMTYPE_ITEM ); @@ -180,50 +180,50 @@ void ItemTable_Init() { //repeatable denotes that an item in a vanilla playth //itemTable[PRE_CLOCK_TOWN_CHEST] = Item(false,0, &noVariable, Text{ "Deku Nuts (10)", "Noix Mojo (10)", "Nueces deku (10)" }, "Pre-Clock Town Chest", Region::BeneathClockTown, PRE_CLOCK_TOWN_CHEST, (u32)GetItemID::GI_NUTS_10, ItemCategory::DekuNuts, LocationCategory::GlitchesRequired); //Generic Items - itemTable[RECOVERY_HEART] = Item(false, true, &noVariable, Text{"Recovery Heart", "Cœur d'énergie", "Corazón"}, RECOVERY_HEART, (u32)GetItemID::GI_RECOVERY_HEART_SINGLE, ITEMTYPE_ITEM); - itemTable[GREEN_RUPEE] = Item(false, true, &noVariable, Text{"Green Rupee", "Rubis vert", "Rupia verde"}, GREEN_RUPEE, (u32)GetItemID::GI_RUPEE_GREEN, ITEMTYPE_ITEM); - itemTable[BLUE_RUPEE] = Item(false, true, &noVariable, Text{"Blue Rupee", "Rubis bleu", "Rupia azul"}, BLUE_RUPEE, (u32)GetItemID::GI_RUPEE_BLUE, ITEMTYPE_ITEM); - itemTable[RED_RUPEE] = Item(false, true, &noVariable, Text{"Red Rupee", "Rubis rouge", "Rupia roja"}, RED_RUPEE, (u32)GetItemID::GI_RUPEE_RED, ITEMTYPE_ITEM); - itemTable[PURPLE_RUPEE] = Item(false, true, &noVariable, Text{"Purple Rupee", "Rubis pourpre", "Rupia morada"}, PURPLE_RUPEE, (u32)GetItemID::GI_RUPEE_PURPLE, ITEMTYPE_ITEM); - itemTable[HUGE_RUPEE] = Item(false, true, &noVariable, Text{"Huge Rupee", "Énorme rubis", "Rupia gigante"}, HUGE_RUPEE, (u32)GetItemID::GI_RUPEE_GOLD, ITEMTYPE_ITEM); - itemTable[SILVER_RUPEE] = Item(false, true, &noVariable, Text{"Silver Rupee", "rubis d'argent", "Rupia de plata"}, SILVER_RUPEE, (u32)GetItemID::GI_RUPEE_SILVER, ITEMTYPE_ITEM); + itemTable[RECOVERY_HEART] = Item(false, false, &noVariable, Text{"Recovery Heart", "Cœur d'énergie", "Corazón"}, RECOVERY_HEART, (u32)GetItemID::GI_RECOVERY_HEART_SINGLE, ITEMTYPE_ITEM); + itemTable[GREEN_RUPEE] = Item(false, false, &noVariable, Text{"Green Rupee", "Rubis vert", "Rupia verde"}, GREEN_RUPEE, (u32)GetItemID::GI_RUPEE_GREEN, ITEMTYPE_ITEM); + itemTable[BLUE_RUPEE] = Item(false, false, &noVariable, Text{"Blue Rupee", "Rubis bleu", "Rupia azul"}, BLUE_RUPEE, (u32)GetItemID::GI_RUPEE_BLUE, ITEMTYPE_ITEM); + itemTable[RED_RUPEE] = Item(false, false, &noVariable, Text{"Red Rupee", "Rubis rouge", "Rupia roja"}, RED_RUPEE, (u32)GetItemID::GI_RUPEE_RED, ITEMTYPE_ITEM); + itemTable[PURPLE_RUPEE] = Item(false, false, &noVariable, Text{"Purple Rupee", "Rubis pourpre", "Rupia morada"}, PURPLE_RUPEE, (u32)GetItemID::GI_RUPEE_PURPLE, ITEMTYPE_ITEM); + itemTable[HUGE_RUPEE] = Item(false, false, &noVariable, Text{"Huge Rupee", "Énorme rubis", "Rupia gigante"}, HUGE_RUPEE, (u32)GetItemID::GI_RUPEE_GOLD, ITEMTYPE_ITEM); + itemTable[SILVER_RUPEE] = Item(false, false, &noVariable, Text{"Silver Rupee", "rubis d'argent", "Rupia de plata"}, SILVER_RUPEE, (u32)GetItemID::GI_RUPEE_SILVER, ITEMTYPE_ITEM); itemTable[PIECE_OF_HEART] = Item(true, false, &PiecesOfHeart, Text{"Piece of Heart", "Quart de cœur", "Pieza de corazón"}, PIECE_OF_HEART, (u32)GetItemID::GI_HEART_PIECE, ITEMTYPE_ITEM); itemTable[HEART_CONTAINER] = Item(true, false, &HeartContainers, Text{"Heart Container", "Réceptacle de cœur", "Contenedor de corazón"}, HEART_CONTAINER, (u32)GetItemID::GI_HEART_CONTAINER, ITEMTYPE_ITEM); - itemTable[ICE_TRAP] = Item(false, true, &noVariable, Text{"Ice Trap", "Piège de glace", "Trampa de hielo"}, ICE_TRAP, 0x12, ITEMTYPE_ITEM); - itemTable[MILK] = Item(false, true, &HasBottle, Text{"Milk", "Lait", "Leche Lon Lon"}, NONE, 0x92, ITEMTYPE_ITEM); + itemTable[ICE_TRAP] = Item(false, false, &noVariable, Text{"Ice Trap", "Piège de glace", "Trampa de hielo"}, ICE_TRAP, 0x12, ITEMTYPE_ITEM); + itemTable[MILK] = Item(false, false, &HasBottle, Text{"Milk", "Lait", "Leche Lon Lon"}, NONE, 0x92, ITEMTYPE_ITEM); //Refills - itemTable[BOMBS_5] = Item(false, true, &noVariable, Text{"Bombs (5)", "Bombes (5)", "Bombas (5)" }, BOMBS_5, (u32)GetItemID::GI_BOMBS_5, ITEMTYPE_REFILL); - itemTable[BOMBS_10] = Item(false, true, &noVariable, Text{"Bombs (10)", "Bombes (10)", "Bombas (10)" }, BOMBS_10, (u32)GetItemID::GI_BOMBS_10, ITEMTYPE_REFILL); - itemTable[BOMBS_20] = Item(false, true, &noVariable, Text{"Bombs (20)", "Bombes (20)", "Bombas (20)" }, BOMBS_20, (u32)GetItemID::GI_BOMBS_20, ITEMTYPE_REFILL); - itemTable[BOMBCHU_5] = Item(false, true, &noVariable, Text{"Bombchu (5)", "Bombchus (5)", "Bombchus (5)" }, BOMBCHU_5, (u32)GetItemID::GI_BOMBCHUS_5, ITEMTYPE_REFILL); - itemTable[BOMBCHU_10] = Item(false, true, &noVariable, Text{"Bombchu (10)", "Bombchus (10)", "Bombchus (10)" }, BOMBCHU_10, (u32)GetItemID::GI_BOMBCHUS_10, ITEMTYPE_REFILL); - itemTable[BOMBCHU_20] = Item(false, true, &noVariable, Text{"Bombchu (20)", "Bombchus (20)", "Bombchus (20)" }, BOMBCHU_20, (u32)GetItemID::GI_BOMBCHU_20, ITEMTYPE_REFILL); + itemTable[BOMBS_5] = Item(false, false, &noVariable, Text{"Bombs (5)", "Bombes (5)", "Bombas (5)" }, BOMBS_5, (u32)GetItemID::GI_BOMBS_5, ITEMTYPE_REFILL); + itemTable[BOMBS_10] = Item(false, false, &noVariable, Text{"Bombs (10)", "Bombes (10)", "Bombas (10)" }, BOMBS_10, (u32)GetItemID::GI_BOMBS_10, ITEMTYPE_REFILL); + itemTable[BOMBS_20] = Item(false, false, &noVariable, Text{"Bombs (20)", "Bombes (20)", "Bombas (20)" }, BOMBS_20, (u32)GetItemID::GI_BOMBS_20, ITEMTYPE_REFILL); + itemTable[BOMBCHU_5] = Item(false, false, &noVariable, Text{"Bombchu (5)", "Bombchus (5)", "Bombchus (5)" }, BOMBCHU_5, (u32)GetItemID::GI_BOMBCHUS_5, ITEMTYPE_REFILL); + itemTable[BOMBCHU_10] = Item(false, false, &noVariable, Text{"Bombchu (10)", "Bombchus (10)", "Bombchus (10)" }, BOMBCHU_10, (u32)GetItemID::GI_BOMBCHUS_10, ITEMTYPE_REFILL); + itemTable[BOMBCHU_20] = Item(false, false, &noVariable, Text{"Bombchu (20)", "Bombchus (20)", "Bombchus (20)" }, BOMBCHU_20, (u32)GetItemID::GI_BOMBCHU_20, ITEMTYPE_REFILL); //itemTable[BOMBCHU_DROP] = Item(Text{ "Bombchu Drop", "Bombchus", "Bombchus" }, ITEMTYPE_DROP, GI_BOMBCHUS_10, true, &BombchuDrop, NONE, true, ); - itemTable[ARROWS_10] = Item(false, true, &noVariable, Text{"Arrows (10)", "Flèches (10)", "Flechas (10)" }, ARROWS_10, 0x1E, ITEMTYPE_REFILL); - itemTable[ARROWS_30] = Item(false, true, &noVariable, Text{"Arrows (30)", "Flèches (30)", "Flechas (30)" }, ARROWS_30, 0x1F, ITEMTYPE_REFILL); - itemTable[ARROWS_40] = Item(false, true, &noVariable, Text{"Arrows (40)", "Flèches (40)", "Flechas (40)" }, ARROWS_40, 0x20, ITEMTYPE_REFILL); - itemTable[ARROWS_50] = Item(false, true, &noVariable, Text{"Arrows (50)", "Flèches (50)", "Flechas (50)" }, ARROWS_50, 0x21, ITEMTYPE_REFILL); - itemTable[DEKU_NUTS_5] = Item(false, true, &noVariable, Text{"Deku Nuts (5)", "Noix Mojo (5)", "Nueces deku (5)" }, DEKU_NUTS_5, (u32)GetItemID::GI_NUTS_5, ITEMTYPE_REFILL); - itemTable[DEKU_NUTS_10] = Item(false, true, &noVariable, Text{"Deku Nuts (10)", "Noix Mojo (10)", "Nueces deku (10)" }, DEKU_NUTS_10, (u32)GetItemID::GI_NUTS_10, ITEMTYPE_REFILL); - itemTable[DEKU_STICK_1] = Item(false, true, &noVariable, Text{"Deku Stick (1)", "Bâton Mojo (1)", "Palo deku (1)" }, DEKU_STICK_1, (u32)GetItemID::GI_STICKS_1, ITEMTYPE_REFILL); - itemTable[RED_POTION_REFILL] = Item(false, true, &noVariable, Text{"Red Potion Refill", "Potion rouge", "Recarga de poción roja" }, RED_POTION_REFILL, (u32)GetItemID::GI_POTION_RED, ITEMTYPE_REFILL); - itemTable[GREEN_POTION_REFILL] = Item(false, true, &noVariable, Text{"Green Potion Refill", "Potion verte", "Recarga de poción verde" }, GREEN_POTION_REFILL, (u32)GetItemID::GI_POTION_GREEN, ITEMTYPE_REFILL); - itemTable[BLUE_POTION_REFILL] = Item(false, true, &noVariable, Text{"Blue Potion Refill", "Potion bleue", "Recarga de poción azul" }, BLUE_POTION_REFILL, (u32)GetItemID::GI_POTION_BLUE, ITEMTYPE_REFILL); + itemTable[ARROWS_10] = Item(false, false, &noVariable, Text{"Arrows (10)", "Flèches (10)", "Flechas (10)" }, ARROWS_10, 0x1E, ITEMTYPE_REFILL); + itemTable[ARROWS_30] = Item(false, false, &noVariable, Text{"Arrows (30)", "Flèches (30)", "Flechas (30)" }, ARROWS_30, 0x1F, ITEMTYPE_REFILL); + itemTable[ARROWS_40] = Item(false, false, &noVariable, Text{"Arrows (40)", "Flèches (40)", "Flechas (40)" }, ARROWS_40, 0x20, ITEMTYPE_REFILL); + itemTable[ARROWS_50] = Item(false, false, &noVariable, Text{"Arrows (50)", "Flèches (50)", "Flechas (50)" }, ARROWS_50, 0x21, ITEMTYPE_REFILL); + itemTable[DEKU_NUTS_5] = Item(false, false, &noVariable, Text{"Deku Nuts (5)", "Noix Mojo (5)", "Nueces deku (5)" }, DEKU_NUTS_5, (u32)GetItemID::GI_NUTS_5, ITEMTYPE_REFILL); + itemTable[DEKU_NUTS_10] = Item(false, false, &noVariable, Text{"Deku Nuts (10)", "Noix Mojo (10)", "Nueces deku (10)" }, DEKU_NUTS_10, (u32)GetItemID::GI_NUTS_10, ITEMTYPE_REFILL); + itemTable[DEKU_STICK_1] = Item(false, false, &noVariable, Text{"Deku Stick (1)", "Bâton Mojo (1)", "Palo deku (1)" }, DEKU_STICK_1, (u32)GetItemID::GI_STICKS_1, ITEMTYPE_REFILL); + itemTable[RED_POTION_REFILL] = Item(false, false, &noVariable, Text{"Red Potion Refill", "Potion rouge", "Recarga de poción roja" }, RED_POTION_REFILL, (u32)GetItemID::GI_POTION_RED, ITEMTYPE_REFILL); + itemTable[GREEN_POTION_REFILL] = Item(false, false, &noVariable, Text{"Green Potion Refill", "Potion verte", "Recarga de poción verde" }, GREEN_POTION_REFILL, (u32)GetItemID::GI_POTION_GREEN, ITEMTYPE_REFILL); + itemTable[BLUE_POTION_REFILL] = Item(false, false, &noVariable, Text{"Blue Potion Refill", "Potion bleue", "Recarga de poción azul" }, BLUE_POTION_REFILL, (u32)GetItemID::GI_POTION_BLUE, ITEMTYPE_REFILL); //Shop Items Repeatable price - itemTable[BUY_ARROWS_10] = Item(false, true, &noVariable, Text{"Buy Arrows (10)", "Acheter: Flèches (10)", "Comprar flechas (10)"}, BUY_ARROWS_10, (u32)GetItemID::GI_ARROWS_MEDIUM, ITEMTYPE_SHOP); - itemTable[BUY_ARROWS_30] = Item(false, true, &noVariable, Text{"Buy Arrows (30)", "Acheter: Flèches (30)", "Comprar flechas (30)"}, BUY_ARROWS_30, (u32)GetItemID::GI_ARROWS_LARGE, ITEMTYPE_SHOP); - itemTable[BUY_DEKU_NUT_10] = Item(false, true, &noVariable, Text{"Buy Deku Nut (10)", "Acheter: Noix Mojo (10)", "Comprar Nueces deku (10)"}, BUY_DEKU_NUT_10, (u32)GetItemID::GI_NUTS_10, ITEMTYPE_SHOP); - itemTable[BUY_DEKU_STICK_1] = Item(false, true, &noVariable, Text{"Buy Deku Stick (1)", "Acheter: Bâton Mojo (1)", "Comprar palos deku (1)"}, BUY_DEKU_STICK_1, (u32)GetItemID::GI_STICKS_1, ITEMTYPE_SHOP); - itemTable[BUY_BOMBS_10] = Item(false, true, &noVariable, Text{"Buy Bombs (10)", "Acheter: Bombes (10)", "Comprar Bombas (10)"}, BUY_BOMBS_10, (u32)GetItemID::GI_BOMBS_10, ITEMTYPE_SHOP); - itemTable[BUY_RED_POTION] = Item(false, true, &noVariable, Text{"Buy Red Potion ", "Acheter: Potion rouge ", "Comprar poción roja "}, BUY_RED_POTION, (u32)GetItemID::GI_POTION_RED, ITEMTYPE_SHOP); - itemTable[BUY_GREEN_POTION] = Item(false, true, &noVariable, Text{"Buy Green Potion", "Acheter: Potion verte", "Comprar poción verde"}, BUY_GREEN_POTION, (u32)GetItemID::GI_POTION_GREEN, ITEMTYPE_SHOP); - itemTable[BUY_BLUE_POTION] = Item(false, true, &noVariable, Text{"Buy Blue Potion", "Acheter: Potion bleue", "Comprar poción azul"}, BUY_BLUE_POTION, (u32)GetItemID::GI_POTION_BLUE, ITEMTYPE_SHOP); - itemTable[BUY_HEROS_SHIELD] = Item(false, true, &noVariable, Text{"Buy Hero's Shield", "Acheter: Bouclier Hylien", "Comprar escudo hyliano"}, BUY_HEROS_SHIELD, (u32)GetItemID::GI_SHIELD_HERO, ITEMTYPE_SHOP); - itemTable[BUY_BOMBCHU_10] = Item(false, true, &noVariable, Text{"Buy Bombchu (10)", "Acheter: Bombchus (10)", "Comprar bombchus (10)"}, BUY_BOMBCHU_10, (u32)GetItemID::GI_BOMBCHUS_10, ITEMTYPE_SHOP); - itemTable[SOLD_OUT] = Item(false, true, &noVariable, Text{"Sold Out", "Vendu", "Vendido"}, SOLD_OUT, (u32)GetItemID::GI_NONE, ITEMTYPE_SHOP); - itemTable[BUY_FAIRYS_SPIRIT] = Item(false, true, &noVariable, Text{"Buy Fairy's Spirit", "Acheter: Fée", "Comprar hada"}, BUY_FAIRYS_SPIRIT, (u32)GetItemID::GI_FAIRY, ITEMTYPE_SHOP); - itemTable[BUY_MAGIC_BEAN] = Item(false, true, &noVariable, Text{"Buy Magic Bean", "Buy Magic Bean", "Buy Magic Bean"}, BUY_MAGIC_BEAN, (u32)GetItemID::GI_MAGIC_BEAN, ITEMTYPE_SHOP); + itemTable[BUY_ARROWS_10] = Item(false, false, &noVariable, Text{"Buy Arrows (10)", "Acheter: Flèches (10)", "Comprar flechas (10)"}, BUY_ARROWS_10, (u32)GetItemID::GI_ARROWS_MEDIUM, ITEMTYPE_SHOP); + itemTable[BUY_ARROWS_30] = Item(false, false, &noVariable, Text{"Buy Arrows (30)", "Acheter: Flèches (30)", "Comprar flechas (30)"}, BUY_ARROWS_30, (u32)GetItemID::GI_ARROWS_LARGE, ITEMTYPE_SHOP); + itemTable[BUY_DEKU_NUT_10] = Item(false, false, &noVariable, Text{"Buy Deku Nut (10)", "Acheter: Noix Mojo (10)", "Comprar Nueces deku (10)"}, BUY_DEKU_NUT_10, (u32)GetItemID::GI_NUTS_10, ITEMTYPE_SHOP); + itemTable[BUY_DEKU_STICK_1] = Item(false, false, &noVariable, Text{"Buy Deku Stick (1)", "Acheter: Bâton Mojo (1)", "Comprar palos deku (1)"}, BUY_DEKU_STICK_1, (u32)GetItemID::GI_STICKS_1, ITEMTYPE_SHOP); + itemTable[BUY_BOMBS_10] = Item(false, false, &noVariable, Text{"Buy Bombs (10)", "Acheter: Bombes (10)", "Comprar Bombas (10)"}, BUY_BOMBS_10, (u32)GetItemID::GI_BOMBS_10, ITEMTYPE_SHOP); + itemTable[BUY_RED_POTION] = Item(false, false, &noVariable, Text{"Buy Red Potion ", "Acheter: Potion rouge ", "Comprar poción roja "}, BUY_RED_POTION, (u32)GetItemID::GI_POTION_RED, ITEMTYPE_SHOP); + itemTable[BUY_GREEN_POTION] = Item(false, false, &noVariable, Text{"Buy Green Potion", "Acheter: Potion verte", "Comprar poción verde"}, BUY_GREEN_POTION, (u32)GetItemID::GI_POTION_GREEN, ITEMTYPE_SHOP); + itemTable[BUY_BLUE_POTION] = Item(false, false, &noVariable, Text{"Buy Blue Potion", "Acheter: Potion bleue", "Comprar poción azul"}, BUY_BLUE_POTION, (u32)GetItemID::GI_POTION_BLUE, ITEMTYPE_SHOP); + itemTable[BUY_HEROS_SHIELD] = Item(false, false, &noVariable, Text{"Buy Hero's Shield", "Acheter: Bouclier Hylien", "Comprar escudo hyliano"}, BUY_HEROS_SHIELD, (u32)GetItemID::GI_SHIELD_HERO, ITEMTYPE_SHOP); + itemTable[BUY_BOMBCHU_10] = Item(false, false, &noVariable, Text{"Buy Bombchu (10)", "Acheter: Bombchus (10)", "Comprar bombchus (10)"}, BUY_BOMBCHU_10, (u32)GetItemID::GI_BOMBCHUS_10, ITEMTYPE_SHOP); + itemTable[SOLD_OUT] = Item(false, false, &noVariable, Text{"Sold Out", "Vendu", "Vendido"}, SOLD_OUT, (u32)GetItemID::GI_NONE, ITEMTYPE_SHOP); + itemTable[BUY_FAIRYS_SPIRIT] = Item(false, false, &noVariable, Text{"Buy Fairy's Spirit", "Acheter: Fée", "Comprar hada"}, BUY_FAIRYS_SPIRIT, (u32)GetItemID::GI_FAIRY, ITEMTYPE_SHOP); + itemTable[BUY_MAGIC_BEAN] = Item(false, false, &noVariable, Text{"Buy Magic Bean", "Buy Magic Bean", "Buy Magic Bean"}, BUY_MAGIC_BEAN, (u32)GetItemID::GI_MAGIC_BEAN, ITEMTYPE_SHOP); //Progressive Items itemTable[PROGRESSIVE_SWORD] = Item(true, false, &ProgressiveSword, Text{"Progressive Sword", "Lame (prog.)", "Espada progresivo" }, PROGRESSIVE_SWORD, 0x4A, ITEMTYPE_ITEM); itemTable[PROGRESSIVE_BOMB_BAG] = Item(true, false, &ProgressiveBombBag, Text{"Progressive Bomb Bag", "Sac de bombes (prog.)", "Saco de bombas progresivo" }, PROGRESSIVE_BOMB_BAG, 0x46, ITEMTYPE_ITEM); diff --git a/source/item_pool.cpp b/source/item_pool.cpp index baf17e7..a9c4c75 100644 --- a/source/item_pool.cpp +++ b/source/item_pool.cpp @@ -1080,22 +1080,32 @@ void GenerateItemPool() { PlaceItemInLocation(THE_MOON_IRON_KNUCKLE_CHEST, BOMBCHU_10); } + //TOKENSANITY if(Tokensanity){ AddItemToMainPool(SWAMP_SKULLTULA_TOKEN, 30); AddItemToMainPool(OCEANSIDE_SKULLTULA_TOKEN, 30); - + std::vector SwampSkullLocations = FilterFromPool(allLocations, [](const LocationKey loc) {return Location(loc)->IsCategory(Category::cSwampSkulltula);}); + std::vector OceanSkullLocations = FilterFromPool(allLocations, [](const LocationKey loc1) {return Location(loc1)->IsCategory(Category::cOceanSkulltula);}); + //REPEATABLE ITEMS ON SKULLTOKENS if(RepeatableItemsOnTokens){ - std::vector SwampSkullLocations = FilterFromPool(allLocations, [](const LocationKey loc) {return Location(loc)->IsCategory(Category::cSwampSkulltula);}); - for (LocationKey loc : SwampSkullLocations) { + for (LocationKey loc : SwampSkullLocations) { Location(loc)->SetRepeatable(true); } - std::vector OceanSkullLocations = FilterFromPool(allLocations, [](const LocationKey loc1) {return Location(loc1)->IsCategory(Category::cOceanSkulltula);}); - for (LocationKey loc1 : OceanSkullLocations) { + for (LocationKey loc1 : OceanSkullLocations) { Location(loc1)->SetRepeatable(true); } } + else { + //DEFAULT REPEATABLE TO FALSE + for (LocationKey loc : SwampSkullLocations) { + Location(loc)->SetRepeatable(false); + } + for (LocationKey loc1 : OceanSkullLocations) { + Location(loc1)->SetRepeatable(false); + } + } } else { PlaceVanillaSkulltulaTokens();