diff --git a/Z3DR b/Z3DR index f6f4ed0..195c065 160000 --- a/Z3DR +++ b/Z3DR @@ -1 +1 @@ -Subproject commit f6f4ed0572882c92dc8fd79a7f6f65c335571eeb +Subproject commit 195c065acd12bde357916b49929245e105017b1a diff --git a/source/hint_list.cpp b/source/hint_list.cpp index 6d1a894..05ea802 100644 --- a/source/hint_list.cpp +++ b/source/hint_list.cpp @@ -440,6 +440,12 @@ void HintTable_Init() { }, //clear Text{"a progressive magic power", "une amélioration d'énergie magique", "un poder mágico progresivo"} ); + hintTable[PROGRESSIVE_LULLABY] = HintText::Item({ + //obscure + Text{"a progressive lullaby", "une berceuse progressive", "una canción de cuna progresiva"} + }, //clear + Text{"a progressive lullaby", "une berceuse progressive", "una canción de cuna progresiva"} + ); //PROGRESSIVE_BOMBCHUS //BOTTLE ITEMS hintTable[EMPTY_BOTTLE] = HintText::Item({ diff --git a/source/include/keys.hpp b/source/include/keys.hpp index 3ed8eab..c815635 100644 --- a/source/include/keys.hpp +++ b/source/include/keys.hpp @@ -79,6 +79,7 @@ typedef enum { PROGRESSIVE_WALLET, PROGRESSIVE_MAGIC_METER, PROGRESSIVE_BOMBCHUS, + PROGRESSIVE_LULLABY, //Keys just used for Logic RAZOR_SWORD, diff --git a/source/include/logic.hpp b/source/include/logic.hpp index 4169175..aede534 100644 --- a/source/include/logic.hpp +++ b/source/include/logic.hpp @@ -139,6 +139,7 @@ namespace Logic { extern u8 ProgressiveWallet; extern u8 ProgressiveBombBag; extern u8 ProgressiveSword; + extern u8 ProgressiveLullaby; //Keys extern u8 WoodfallTempleKeys; extern u8 SnowheadTempleKeys; diff --git a/source/item_list.cpp b/source/item_list.cpp index c3b09c8..9f689ee 100644 --- a/source/item_list.cpp +++ b/source/item_list.cpp @@ -230,6 +230,7 @@ void ItemTable_Init() { //repeatable denotes that an item in a vanilla playth itemTable[PROGRESSIVE_BOW] = Item(true, false, &ProgressiveBow, Text{"Progressive Bow", "Arc (prog.)", "Arco progresivo", }, PROGRESSIVE_BOW, 0x47, ITEMTYPE_ITEM); itemTable[PROGRESSIVE_WALLET] = Item(true, false, &ProgressiveWallet, Text{"Progressive Wallet", "Bourse (prog.)", "Bolsa de rupias progresiva", }, PROGRESSIVE_WALLET, 0x48, ITEMTYPE_ITEM); itemTable[PROGRESSIVE_MAGIC_METER] = Item(true, false, &ProgressiveMagic, Text{"Progressive Magic Meter", "Jauge de magie (prog)", "Poder mágico progresivo", "", "Capacité de magie (prog.)", "" }, PROGRESSIVE_MAGIC_METER, 0x49, ITEMTYPE_GFAIRY); + itemTable[PROGRESSIVE_LULLABY] = Item(true, false, &ProgressiveLullaby, Text{"Progressive Lullaby", "Berceuse (prog.)", "Canción de cuna progresiva", "", "Berceuse (prog.)", "" }, PROGRESSIVE_LULLABY, 0x45, ITEMTYPE_SONG); itemTable[MAJORAS_MASK] = Item(true, false, &noVariable, Text{"Majora's Mask", "Masque de Majora", "Máscara de Majora", }, MAJORAS_MASK, (u32)GetItemID::GI_ERROR_NOTHING_40, ITEMTYPE_EVENT); itemTable[HINT] = Item(true, true, &noVariable, Text{"Hint", "Indice", "Pista", }, HINT, (u32)GetItemID::GI_ERROR_NOTHING_40, ITEMTYPE_EVENT); diff --git a/source/item_location.cpp b/source/item_location.cpp index be4c7a4..6530801 100644 --- a/source/item_location.cpp +++ b/source/item_location.cpp @@ -58,7 +58,7 @@ void LocationTable_Init() { locationTable[GORON_VILLAGE_LENS_OF_TRUTH_CHEST] = ItemLocation::Chest (0x07, 0x01, true, "GV Lens of Truth Chest", GORON_VILLAGE_LENS_OF_TRUTH_CHEST, LENS_OF_TRUTH, {Category::cGoronVillage, Category::cChest, Category::cDayOne, Category::cMainInventory, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); locationTable[GORON_VILLAGE_SCRUB_TRADE] = ItemLocation::Base (0x4D, 0x99, true, "GV Deku Scrub Merchant Trade", GORON_VILLAGE_SCRUB_TRADE, MOUNTAIN_TITLE, {Category::cGoronVillage, Category::cDekuScrub, Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); locationTable[GORON_VILLAGE_LEDGE] = ItemLocation::Collectable(0x4D, 0x00, false, "GV Piece of Heart", GORON_VILLAGE_LEDGE, PIECE_OF_HEART, {Category::cGoronVillage, Category::cVanillaHeartPiece, Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); - locationTable[GORON_VILLAGE_GORON_LULLABY] = ItemLocation::Base (0x32, 0x4D, false, "GV Goron Lullaby", GORON_VILLAGE_GORON_LULLABY, GORONS_LULLABY, {Category::cGoronVillage, Category::cSong, Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); + locationTable[GORON_VILLAGE_GORON_LULLABY] = ItemLocation::Base (0x32, 0x4D, false, "GV Goron Lullaby", GORON_VILLAGE_GORON_LULLABY, PROGRESSIVE_LULLABY, {Category::cGoronVillage, Category::cSong, Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); locationTable[LENS_CAVE_RED_RUPEE] = ItemLocation::Chest (0x07, 0x03, true, "GV Lens Cave Invisible Chest", LENS_CAVE_RED_RUPEE, RED_RUPEE, {Category::cGoronVillage, Category::cChest ,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); locationTable[LENS_CAVE_PURPLE_RUPEE] = ItemLocation::Chest (0x07, 0x06, true, "GV Lens Cave Rock Chest", LENS_CAVE_PURPLE_RUPEE, PURPLE_RUPEE, {Category::cGoronVillage, Category::cChest ,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); locationTable[GORON_VILLAGE_POWDER_KEG_CHALLENGE_SPRING] = ItemLocation::Base (0x48, 0x34, false, "GV Powder Keg Challenge (Spring)", GORON_VILLAGE_POWDER_KEG_CHALLENGE_SPRING, POWDER_KEG, {Category::cGoronVillage, Category::cDayOne, Category::cAlternateCheck, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); @@ -227,7 +227,7 @@ void LocationTable_Init() { locationTable[TWIN_ISLANDS_GORON_RACETRACK_GROTTO_CHEST] = ItemLocation::Chest (0x07, 0x19, true, "TI Goron Racetrack Grotto", TWIN_ISLANDS_GORON_RACETRACK_GROTTO_CHEST, BOMBCHU_5, {Category::cTwinIslands, Category::cGrotto,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_TWIN_ISLANDS ); locationTable[TWIN_ISLANDS_UNDERWATER_RAMP_CHEST] = ItemLocation::Chest (0x5E, 0x06, true, "TI Underwater Ramp Chest", TWIN_ISLANDS_UNDERWATER_RAMP_CHEST, PIECE_OF_HEART, {Category::cTwinIslands, Category::cVanillaHeartPiece, Category::cChest, Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_TWIN_ISLANDS ); locationTable[TWIN_ISLANDS_CAVE_CHEST] = ItemLocation::Chest (0x5E, 0x00, true, "TI Cave Chest", TWIN_ISLANDS_CAVE_CHEST, RED_RUPEE, {Category::cTwinIslands,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_TWIN_ISLANDS ); - locationTable[TWIN_ISLANDS_LULLABY_INTRO] = ItemLocation::Base (0x5D, 0x74, false, "TI Lullaby Intro", TWIN_ISLANDS_LULLABY_INTRO, LULLABY_INTRO, {Category::cTwinIslands, Category::cSong, Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_TWIN_ISLANDS ); + locationTable[TWIN_ISLANDS_LULLABY_INTRO] = ItemLocation::Base (0x5D, 0x74, false, "TI Lullaby Intro", TWIN_ISLANDS_LULLABY_INTRO, PROGRESSIVE_LULLABY, {Category::cTwinIslands, Category::cSong, Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_TWIN_ISLANDS ); //W Clock Town locationTable[W_CLOCK_TOWN_BOMB_BAG_BUY] = ItemLocation::Base (0x0D, 0x1B, false, "WCT Bomb Bag Purchase", W_CLOCK_TOWN_BOMB_BAG_BUY, PROGRESSIVE_BOMB_BAG, {Category::cWestClockTown,Category::cDayOne, Category::cShop, Category::cMainInventory, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); locationTable[W_CLOCK_TOWN_BIG_BOMB_BAG_BUY] = ItemLocation::Base (0x0D, 0x1C, false, "WCT Big Bomb Bag Purchase", W_CLOCK_TOWN_BIG_BOMB_BAG_BUY, PROGRESSIVE_BOMB_BAG, {Category::cWestClockTown,Category::cDayTwo, Category::cShop, Category::cMainInventory, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); diff --git a/source/item_pool.cpp b/source/item_pool.cpp index ea17bc5..92b550e 100644 --- a/source/item_pool.cpp +++ b/source/item_pool.cpp @@ -266,8 +266,10 @@ const std::array songList = { SONG_OF_HEALING, //SONG_OF_SOARING, SONATA_OF_AWAKENING, - LULLABY_INTRO, - GORONS_LULLABY, + //LULLABY_INTRO, + //GORONS_LULLABY, + PROGRESSIVE_LULLABY, + PROGRESSIVE_LULLABY, NEW_WAVE_BOSSA_NOVA, ELEGY_OF_EMPTINESS, OATH_TO_ORDER @@ -276,8 +278,8 @@ const std::array songList = { static void PlaceVanillaSongs() { PlaceItemInLocation(HMS_SONG_OF_HEALING, SONG_OF_HEALING); PlaceItemInLocation(DEKU_PALACE_IMPRISONED_MONKEY, SONATA_OF_AWAKENING); - PlaceItemInLocation(TWIN_ISLANDS_LULLABY_INTRO, LULLABY_INTRO); - PlaceItemInLocation(GORON_VILLAGE_GORON_LULLABY, GORONS_LULLABY); + PlaceItemInLocation(TWIN_ISLANDS_LULLABY_INTRO, PROGRESSIVE_LULLABY); + PlaceItemInLocation(GORON_VILLAGE_GORON_LULLABY, PROGRESSIVE_LULLABY); PlaceItemInLocation(ROMANI_RANCH_ROMANIS_GAME, EPONAS_SONG); PlaceItemInLocation(GBC_BABY_ZORAS, NEW_WAVE_BOSSA_NOVA); PlaceItemInLocation(IKANA_CASTLE_IKANA_KING, ELEGY_OF_EMPTINESS); diff --git a/source/location_access.cpp b/source/location_access.cpp index 9609513..7c5b4ea 100644 --- a/source/location_access.cpp +++ b/source/location_access.cpp @@ -793,7 +793,7 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(TERMINA_FIELD_GOSSIP_STONES, {[] {return (GoronMask && CanPlay(GoronsLullaby)) || + LocationAccess(TERMINA_FIELD_GOSSIP_STONES, {[] {return (GoronMask && (ProgressiveLullaby >= 2)) || (DekuMask && CanPlay(SonataOfAwakening)) || (ZoraMask && CanPlay(NewWaveBossaNova));}}), LocationAccess(TF_FOUR_STONE_GROTTO_1, {[] {return true;}}), @@ -1267,11 +1267,11 @@ void AreaTable_Init() { areaTable[GORON_VILLAGE_INTERIOR] = Area("Goron Village Interior", "Goron Village Interior", GORON_VILLAGE, { //Events EventAccess(&SpokeToBabyGoron, {[]{return true;}}), - EventAccess(&RockSirloin, {[]{return GoronMask && MagicMeter && (CanUse(FIRE_ARROWS) || (CanPlay(LullabyIntro) && HasFireSourceWithTorch));}}), + EventAccess(&RockSirloin, {[]{return GoronMask && MagicMeter && (CanUse(FIRE_ARROWS) || ((ProgressiveLullaby >= 1) && HasFireSourceWithTorch));}}), }, { //Locations - LocationAccess(GORON_VILLAGE_GORON_LULLABY, {[]{return GoronMask && CanPlay(LullabyIntro);}}), + LocationAccess(GORON_VILLAGE_GORON_LULLABY, {[]{return GoronMask && (ProgressiveLullaby >= 1);}}), }, { //Exits @@ -1334,8 +1334,8 @@ void AreaTable_Init() { }, { //Exits - Entrance(SNOWHEAD_TEMPLE_ENTRANCE, {[]{return GoronMask && MagicMeter && CanPlay(GoronsLullaby);}}), - Entrance(SNOWHEAD_FAIRY_FOUNTAIN, {[]{return GoronMask && MagicMeter && CanPlay(GoronsLullaby);}}), + Entrance(SNOWHEAD_TEMPLE_ENTRANCE, {[]{return GoronMask && MagicMeter && (ProgressiveLullaby >= 2);}}), + Entrance(SNOWHEAD_FAIRY_FOUNTAIN, {[]{return GoronMask && MagicMeter && (ProgressiveLullaby >= 2);}}), Entrance(ROAD_TO_SNOWHEAD, {[]{return true;}}), }); diff --git a/source/logic.cpp b/source/logic.cpp index f51fcb0..413726e 100644 --- a/source/logic.cpp +++ b/source/logic.cpp @@ -142,6 +142,7 @@ namespace Logic { u8 ProgressiveWallet = 0; u8 ProgressiveBombBag = 0; u8 ProgressiveSword = 0; + u8 ProgressiveLullaby = 0; //Keys u8 WoodfallTempleKeys = 0; u8 SnowheadTempleKeys = 0; @@ -697,6 +698,7 @@ namespace Logic { ProgressiveWallet = 0; ProgressiveBombBag = 0; ProgressiveSword = 0; + ProgressiveLullaby = 0; //Keys WoodfallTempleKeys = 0; SnowheadTempleKeys = 0; diff --git a/source/starting_inventory.cpp b/source/starting_inventory.cpp index 575f306..a663728 100644 --- a/source/starting_inventory.cpp +++ b/source/starting_inventory.cpp @@ -84,7 +84,7 @@ void GenerateStartingInventory() { //AddItemToInventory(SONG_OF_TIME, StartingSongOfTime.Value()); AddItemToInventory(SONG_OF_STORMS, StartingSongOfStorms.Value()); AddItemToInventory(SONATA_OF_AWAKENING, StartingSonataOfAwakening.Value()); - AddItemToInventory(GORONS_LULLABY, StartingGoronsLullaby.Value()); + AddItemToInventory(PROGRESSIVE_LULLABY, StartingGoronsLullaby.Value()); AddItemToInventory(NEW_WAVE_BOSSA_NOVA, StartingNewWaveBossaNova.Value()); AddItemToInventory(ELEGY_OF_EMPTINESS, StartingElegyOfEmptiness.Value()); AddItemToInventory(SONG_OF_HEALING, StartingSongOfHealing.Value());