diff --git a/Files/Games/Majora's Mask/Languages/de.ppf b/Files/Games/Majora's Mask/Languages/de.ppf index 4018acf3..04b7c147 100644 Binary files a/Files/Games/Majora's Mask/Languages/de.ppf and b/Files/Games/Majora's Mask/Languages/de.ppf differ diff --git a/Files/Games/Majora's Mask/Languages/es.ppf b/Files/Games/Majora's Mask/Languages/es.ppf index 7fe09a81..65fc6f0d 100644 Binary files a/Files/Games/Majora's Mask/Languages/es.ppf and b/Files/Games/Majora's Mask/Languages/es.ppf differ diff --git a/Files/Games/Majora's Mask/Languages/fr.ppf b/Files/Games/Majora's Mask/Languages/fr.ppf index 20497199..f0065eba 100644 Binary files a/Files/Games/Majora's Mask/Languages/fr.ppf and b/Files/Games/Majora's Mask/Languages/fr.ppf differ diff --git a/Files/Games/Majora's Mask/Music.json b/Files/Games/Majora's Mask/Music.json new file mode 100644 index 00000000..502e11ba --- /dev/null +++ b/Files/Games/Majora's Mask/Music.json @@ -0,0 +1,285 @@ +[ { + "title" : "Termina Field", + "id" : "02", + "force" : 1 +}, { + "title" : "Forest Chase", + "id" : "03" +}, { + "title" : "Majora's Theme", + "id" : "04" +}, { + "title" : "The Clock Tower", + "id" : "05" +}, { + "title" : "Stone Tower Temple", + "id" : "06" +}, { + "title" : "Stone Tower Temple Inverted", + "id" : "07" +}, { + "title" : "Missed Event 1", + "id" : "08", + "event" : 1 +}, { + "title" : "Title", + "id" : "09" +}, { + "title" : "Mask Salesman", + "id" : "0A" +}, { + "title" : "Song of Healing", + "id" : "0B" +}, { + "title" : "Southern Swamp", + "id" : "0C" +}, { + "title" : "Ghost Attack", + "id" : "0D" +}, { + "title" : "Mini Game", + "id" : "0E" +}, { + "title" : "Sharp's Curse", + "id" : "0F" +}, { + "title" : "Great Bay Coast", + "id" : "10" +}, { + "title" : "Ikana Valley", + "id" : "11" +}, { + "title" : "Court of the Deku King", + "id" : "12" +}, { + "title" : "Mountain Village", + "id" : "13" +}, { + "title" : "Pirates' Fortress", + "id" : "14" +}, { + "title" : "Clock Town Day 1", + "id" : "15" +}, { + "title" : "Clock Town Day 2", + "id" : "16" +}, { + "title" : "Clock Town Day 3", + "id" : "17" +}, { + "title" : "File Select", + "id" : "18" +}, { + "title" : "Event Clear", + "id" : "19", + "event" : 1 +}, { + "title" : "Battle", + "id" : "1A" +}, { + "title" : "Boss Battle", + "id" : "1B" +}, { + "title" : "Woodfall Temple", + "id" : "1C" +}, { + "title" : "Forest Ambush", + "id" : "1E" +}, { + "title" : "House", + "id" : "1F" +}, { + "title" : "Game Over", + "id" : "20", + "event" : 1 +}, { + "title" : "Boss Clear", + "id" : "21", + "event" : 1 +}, { + "title" : "Item Catch", + "id" : "22", + "event" : 1 +}, { + "title" : "Complete a Heart Piece", + "id" : "24", + "event" : 1 +}, { + "title" : "Playing Minigame", + "id" : "25" +}, { + "title" : "Goron Race", + "id" : "26" +}, { + "title" : "Music Box House", + "id" : "27" +}, { + "title" : "Fairy's Fountain", + "id" : "28" +}, { + "title" : "Zelda's Lullaby", + "id" : "29" +}, { + "title" : "Rosa Sister' Dance", + "id" : "2A", + "event" : 1 +}, { + "title" : "Open Chest", + "id" : "2B", + "event" : 1 +}, { + "title" : "Marine Research Laboratory", + "id" : "2C" +}, { + "title" : "The Four Giants", + "id" : "2D" +}, { + "title" : "Guru-Guru's Song", + "id" : "2E", + "event" : 1 +}, { + "title" : "Romani Ranch", + "id" : "2F" +}, { + "title" : "Goron Village", + "id" : "30" +}, { + "title" : "Mayor Dotour", + "id" : "31" +}, { + "title" : "Zora Hall", + "id" : "36" +}, { + "title" : "A New Mask", + "id" : "37", + "event" : 1 +}, { + "title" : "Mini Boss", + "id" : "38" +}, { + "title" : "Small Item Catch", + "id" : "39", + "event" : 1 +}, { + "title" : "Astral Observatory", + "id" : "3A" +}, { + "title" : "Clock Town Cavern", + "id" : "3B" +}, { + "title" : "Milk Bar Latte", + "id" : "3C" +}, { + "title" : "Meet Zelda (OoT)", + "id" : "3D" +}, { + "title" : "Woods of Mystery", + "id" : "3E" +}, { + "title" : "Goron Race Goal", + "id" : "3F", + "event" : 1 +}, { + "title" : "Gorman Race", + "id" : "40" +}, { + "title" : "Race Finish", + "id" : "41", + "event" : 1 +}, { + "title" : "Gorman Bros.", + "id" : "42" +}, { + "title" : "Kotake's Potion Shop", + "id" : "43" +}, { + "title" : "Store", + "id" : "44" +}, { + "title" : "Gaebora's Theme", + "id" : "45" +}, { + "title" : "Target Practice", + "id" : "46" +}, { + "title" : "Sword Training", + "id" : "50" +}, { + "title" : "Final Hours", + "id" : "57" +}, { + "title" : "Mikau's Tale", + "id" : "58" +}, { + "title" : "Don Gero's Song", + "id" : "5A" +}, { + "title" : "Last Dungeon", + "id" : "60" +}, { + "title" : "Snowhead Temple", + "id" : "65" +}, { + "title" : "Great Bay Temple", + "id" : "66" +}, { + "title" : "Majora's Wrath", + "id" : "69" +}, { + "title" : "Majora's Incarnation", + "id" : "6A" +}, { + "title" : "Majora's Mask Battle", + "id" : "6B" +}, { + "title" : "Ikana Castle", + "id" : "6F" +}, { + "title" : "Calling the Four Giants", + "id" : "70" +}, { + "title" : "Kamaro's Dance", + "id" : "71", + "event" : 1 +}, { + "title" : "Cremia's Carriage", + "id" : "72" +}, { + "title" : "Keaton", + "id" : "73" +}, { + "title" : "The End/Credits I", + "id" : "74", + "event" : 1 +}, { + "title" : "Title Screen", + "id" : "76" +}, { + "title" : "Surfacing of Woodfall", + "id" : "77", + "event" : 1 +}, { + "title" : "Woodfall Clear", + "id" : "78", + "event" : 1 +}, { + "title" : "Snowhead Clear", + "id" : "79", + "event" : 1 +}, { + "title" : "To the Moon", + "id" : "7B" +}, { + "title" : "Goodbye Giant", + "id" : "7C" +}, { + "title" : "Tatl and Tael", + "id" : "7D" +}, { + "title" : "Moon's Destruction", + "id" : "7E" +}, { + "title" : "The End/Credits II", + "id" : "7F", + "event" : 1 +} ] \ No newline at end of file diff --git a/Files/Games/Majora's Mask/Textures/HUD/mm_button_full.bin b/Files/Games/Majora's Mask/Textures/HUD/mm_button_full.bin new file mode 100644 index 00000000..f618ffc1 Binary files /dev/null and b/Files/Games/Majora's Mask/Textures/HUD/mm_button_full.bin differ diff --git a/Files/Games/Majora's Mask/Textures/HUD/mm_button_small.bin b/Files/Games/Majora's Mask/Textures/HUD/mm_button_small.bin new file mode 100644 index 00000000..2e220925 Binary files /dev/null and b/Files/Games/Majora's Mask/Textures/HUD/mm_button_small.bin differ diff --git a/Files/Games/Majora's Mask/Textures/HUD/oot_button_full.bin b/Files/Games/Majora's Mask/Textures/HUD/oot_button_full.bin new file mode 100644 index 00000000..0366b5e0 Binary files /dev/null and b/Files/Games/Majora's Mask/Textures/HUD/oot_button_full.bin differ diff --git a/Files/Games/Majora's Mask/Textures/HUD/oot_button_small.bin b/Files/Games/Majora's Mask/Textures/HUD/oot_button_small.bin new file mode 100644 index 00000000..5dd40bdc Binary files /dev/null and b/Files/Games/Majora's Mask/Textures/HUD/oot_button_small.bin differ diff --git a/Files/Games/Ocarina of Time/Binaries/do_action_static.bin b/Files/Games/Ocarina of Time/Binaries/do_action_static.bin new file mode 100644 index 00000000..7282995e Binary files /dev/null and b/Files/Games/Ocarina of Time/Binaries/do_action_static.bin differ diff --git a/Files/Games/Ocarina of Time/Decompressed/eyes_mm.ppf b/Files/Games/Ocarina of Time/Decompressed/eyes_mm.ppf new file mode 100644 index 00000000..37684cf2 Binary files /dev/null and b/Files/Games/Ocarina of Time/Decompressed/eyes_mm.ppf differ diff --git a/Files/Games/Ocarina of Time/Decompressed/widescreen.ppf b/Files/Games/Ocarina of Time/Decompressed/widescreen.ppf index 49eb9833..b672829f 100644 Binary files a/Files/Games/Ocarina of Time/Decompressed/widescreen.ppf and b/Files/Games/Ocarina of Time/Decompressed/widescreen.ppf differ diff --git a/Files/Games/Ocarina of Time/Editor/Table Vanilla.tbl b/Files/Games/Ocarina of Time/Editor/Table Vanilla.tbl new file mode 100644 index 00000000..589fbb6a Binary files /dev/null and b/Files/Games/Ocarina of Time/Editor/Table Vanilla.tbl differ diff --git a/Files/Games/Ocarina of Time/Editor/vanilla - kopia.bin b/Files/Games/Ocarina of Time/Editor/vanilla - kopia.bin new file mode 100644 index 00000000..e2f64c05 Binary files /dev/null and b/Files/Games/Ocarina of Time/Editor/vanilla - kopia.bin differ diff --git a/Files/Games/Ocarina of Time/Editor/vanilla.bin b/Files/Games/Ocarina of Time/Editor/vanilla.bin new file mode 100644 index 00000000..0c5c8075 Binary files /dev/null and b/Files/Games/Ocarina of Time/Editor/vanilla.bin differ diff --git a/Files/Games/Ocarina of Time/Music.json b/Files/Games/Ocarina of Time/Music.json new file mode 100644 index 00000000..06e53003 --- /dev/null +++ b/Files/Games/Ocarina of Time/Music.json @@ -0,0 +1,241 @@ +[ { + "title" : "Hyrule Field", + "id" : ["02", "03", "04", "05", "06", "07", "08", "09", "0A", "0B", "0C", "0D", "0E", "0F", "10", "11", "12", "13", "14", "15", "16", "17"] +}, { + "title" : "Dodongo's Cavern", + "id" : "18" +}, { + "title" : "Kakariko Village (Adult)", + "id" : "19" +}, { + "title" : "Battle", + "id" : "1A" +}, { + "title" : "Boss Battle", + "id" : "1B" +}, { + "title" : "Inside the Deku Tree", + "id" : "1C" +}, { + "title" : "Market", + "id" : "1D" +}, { + "title" : "Title Theme", + "id" : "1E" +}, { + "title" : "House", + "id" : "1F" +}, { + "title" : "Game Over", + "id" : "20", + "event" : 1 +}, { + "title" : "Boss Clear", + "id" : "21", + "event" : 1 +}, { + "title" : "Obtain Item", + "id" : "22", + "event" : 1 +}, { + "title" : "Enter Ganondorf", + "id" : "23" +}, { + "title" : "Obtain Heart Container", + "id" : "24", + "event" : 1 +}, { + "title" : "Inside Jabu-Jabu's Belly", + "id" : "26" +}, { + "title" : "Kakariko Village (Child)", + "id" : "27" +}, { + "title" : "Great Fairy's Fountain", + "id" : "28" +}, { + "title" : "Zelda's Theme", + "id" : "29" +}, { + "title" : "Fire Temple", + "id" : "2A" +}, { + "title" : "Open Treasure Chest", + "id" : "2B", + "event" : 1 +}, { + "title" : "Forest Temple", + "id" : "2C" +}, { + "title" : "Hyrule Castle Courtyard", + "id" : "2D" +}, { + "title" : "Ganondorf's Theme", + "id" : "2E" +}, { + "title" : "Lon Lon Ranch", + "id" : "2F" +}, { + "title" : "Goron City", + "id" : "30" +}, { + "title" : "Hyrule Field Morning Theme", + "id" : "31" +}, { + "title" : "Spiritual Stone Get", + "id" : "32", + "event" : 1 +}, { + "title" : "Mini-Boss Battle", + "id" : "38" +}, { + "title" : "Obtain Small Item", + "id" : "39", + "event" : 1 +}, { + "title" : "Temple of Time", + "id" : "3A" +}, { + "title" : "Escape from Lon Lon Ranch", + "id" : "3B", + "event" : 1 +}, { + "title" : "Kokiri Forest", + "id" : "3C" +}, { + "title" : "Obtain Fairy Ocarina", + "id" : "3D", + "event" : 1 +}, { + "title" : "Lost Woods", + "id" : "3E" +}, { + "title" : "Spirit Temple", + "id" : "3F" +}, { + "title" : "Horse Race", + "id" : "40" +}, { + "title" : "Horse Race Goal", + "id" : "41", + "event" : 1 +}, { + "title" : "Ingo's Theme", + "id" : "42" +}, { + "title" : "Obtain Medallion", + "id" : "43", + "event" : 1 +}, { + "title" : "Fairy Flying", + "id" : "4A" +}, { + "title" : "Deku Tree", + "id" : "4B" +}, { + "title" : "Windmill Hut", + "id" : "4C" +}, { + "title" : "Legend of Hyrule", + "id" : "4D" +}, { + "title" : "Shooting Gallery", + "id" : "4E" +}, { + "title" : "Sheik's Theme", + "id" : "4F" +}, { + "title" : "Zora's Domain", + "id" : "50" +}, { + "title" : "Enter Zelda", + "id" : "51" +}, { + "title" : "Goodbye to Zelda", + "id" : "52" +}, { + "title" : "Master Sword", + "id" : "53", + "event" : 1 +}, { + "title" : "Ganon", + "id" : "54" +}, { + "title" : "Shop", + "id" : "55" +}, { + "title" : "Chamber of the Sages", + "id" : "56" +}, { + "title" : "File Select", + "id" : "57", + "force" : 1 +}, { + "title" : "Ice Cavern", + "id" : "58" +}, { + "title" : "Open Door of Temple of Time", + "id" : "59", + "event" : 1 +}, { + "title" : "Kaepora Gaebora's Theme", + "id" : "5A" +}, { + "title" : "Shadow Temple", + "id" : "5B" +}, { + "title" : "Water Temple", + "id" : "5C" +}, { + "title" : "Ganon's Castle Bridge", + "id" : "5D" +}, { + "title" : "Ocarina of Time", + "id" : "5E" +}, { + "title" : "Gerudo Valley", + "id" : "5F" +}, { + "title" : "Potion Shop", + "id" : "60" +}, { + "title" : "Kotake & Koume's Theme", + "id" : "61" +}, { + "title" : "Escape from Ganon's Castle", + "id" : "62" +}, { + "title" : "Ganon's Castle Under Ground", + "id" : "63" +}, { + "title" : "Ganondorf Battle", + "id" : "64" +}, { + "title" : "Ganon Battle", + "id" : "65" +}, { + "title" : "Seal of Six Sages", + "id" : "66" +}, { + "title" : "End Credits I", + "id" : "67", + "event" : 1 +}, { + "title" : "End Credits II", + "id" : "68", + "event" : 1 +}, { + "title" : "End Credits III", + "id" : "69", + "event" : 1 +}, { + "title" : "End Credits IV", + "id" : "6A", + "event" : 1 +}, { + "title" : "King Dodongo & Volvagia Boss Battle", + "id" : "6B" +}, { + "title" : "Mini-Game", + "id" : "6C" +} ] \ No newline at end of file diff --git a/Files/Games/Ocarina of Time/Textures/Gerudo Symbols/gerudo_membership_card.bin b/Files/Games/Ocarina of Time/Textures/Gerudo Symbols/gerudo_membership_card.bin new file mode 100644 index 00000000..d5a0ab29 --- /dev/null +++ b/Files/Games/Ocarina of Time/Textures/Gerudo Symbols/gerudo_membership_card.bin @@ -0,0 +1 @@ +ª¥¬¥¬ª¹´«°´±²²´´·¼¾Á´Ÿ¢§¬¯´¬¯±¥ª“¢ª¢¢°¯¬«¬««¬­ª¨­¹¬¬“˜“˜ŽˆŽŸ¥˜š•‹ˆš§¯¤£¤©¦¦¦¦—“—”ƒ†owyƒ|~|‹ˆˆ“§¬ª§¬¬ª§Ÿ¤¦š¦š˜¢¥Ÿ˜†“Ÿ¢š¢¢˜Ÿ¢¢Ÿ˜••šŸ˜–—šœ™Ÿ­¶´±¯•šª¯¬¬¢˜š¥¥±ª¥¢¢Ÿ“š££¤©°¶µ¬ª˜˜¥¬¬¢ªª¬š§ŸŸ§Ÿ“Ÿ$"Šœ““éÿ犈GzƒŽ¬§˜Ÿ§¥•ª§¥¢˜EfF‹<,Ÿ-ŠYvŸ4n+ƒˆ““Ÿ¯´ŸªˆƒtrE>R+²>ÿ=J¶.=„ EYš••Ÿ˜ˆ†±±ª¥´G:ˆo\õ}ÿc¿nW¦F9¬¶¯Ÿ¥¯¯¬±ÃÁÍÆÁ¾ÈÆ´´¾³½ÿÿÿÿÿÏ´¯˜¢ªª¢ª¹Á¹Æ•“š•ˆ‹“¦ÿÿΦ³ÿÿÿª–Áøÿ¤Ž‹“†ƒŽ“‹š¯±±§•“—ñåìÿÏ’§è¼¶êÿïè󟪥¢ª¥¢¬¶¯¯¯¢•ª­£§¦°ÿÓ©¥¤Øÿ°µ²­¥ª¶¯¬¹¹´¶¯´±¬Ÿ˜¢¤ÕÿãºÀÿùçìÿË´ïóɬ§±¶´Ã¾´´““Žˆ|o~‚Úÿÿ¡¬ÿÿÿÿÿϾú󕘚¥šŸŽ‹Ž§¯Ÿ˜š˜¥¯¯ÃŸùô»¯Îÿ󚘢™š˜˜†““šš§¯±¯§§§¬´õÄÏòë­¥³£²ÿôÏÖô¬¢§š“Ÿš¯¬§¥Ž“ššÚÿÿÿ±¢ùÿà©Åÿÿÿß´ª±ª¯¬ª§±¥˜¢¥šˆŽ‹z’Ÿˆ‘ÎÿæòÕ”žŠŠ‚˜šŸ§ª§ÍÁ¼¼¥9\,YjUºCiW¹4wxUˆ>XŸªª¶¼¼Ðù¶±‚+;e%"À}P}1WP…qU‡}<Ž¥¬¯¶¯ÁÁÁ¹¶´¯!eMvy]”À}cÌS8¡48²U6z¶¾¹Á±¹¶¹¼Á¹¶···Ëȹ¹¼ßëñ°š´·³¶±²“•¥Ÿ¯¯¯“Ž˜‹ˆŽ|jn|~yŠ‘”˜‘Ž —Ž’‹ˆˆ“•y|~wrw4)u:eQJ‹eCŒGXaZGŽ“““|~±´´¶±È¶]::0&Y78h=#y$}˜ª¯´±¯˜šŸ••iw[ŠDz_šuq^‰ˆr¹h]±Á¬¯§§š•‹Žš••“‘™ŸŸ£ž›˜˜“Ÿ¥§¢˜¥§¢¥Ÿ˜•Ž•Ÿ“ˆ††~|r}nqdlŒ‘¯¼¹±¬¬¬¬¬±ª§Ÿ†‹ˆ~||r|‡—ˆŽ“•““•ŸŸš•ƒˆˆ‹~Žy|š¥ª±§¯¯±ª©uxxyuppy~ƒƒ†||ˆŽ‹•“Ž \ No newline at end of file diff --git a/Files/Games/Ocarina of Time/Textures/HUD/mm_button_full.bin b/Files/Games/Ocarina of Time/Textures/HUD/mm_button_full.bin new file mode 100644 index 00000000..f618ffc1 Binary files /dev/null and b/Files/Games/Ocarina of Time/Textures/HUD/mm_button_full.bin differ diff --git a/Files/Games/Ocarina of Time/Textures/HUD/mm_button_small.bin b/Files/Games/Ocarina of Time/Textures/HUD/mm_button_small.bin new file mode 100644 index 00000000..2e220925 Binary files /dev/null and b/Files/Games/Ocarina of Time/Textures/HUD/mm_button_small.bin differ diff --git a/Files/Games/Ocarina of Time/Textures/HUD/oot_button_full.bin b/Files/Games/Ocarina of Time/Textures/HUD/oot_button_full.bin new file mode 100644 index 00000000..0366b5e0 Binary files /dev/null and b/Files/Games/Ocarina of Time/Textures/HUD/oot_button_full.bin differ diff --git a/Files/Games/Ocarina of Time/Textures/HUD/oot_button_small.bin b/Files/Games/Ocarina of Time/Textures/HUD/oot_button_small.bin new file mode 100644 index 00000000..5dd40bdc Binary files /dev/null and b/Files/Games/Ocarina of Time/Textures/HUD/oot_button_small.bin differ diff --git a/Files/Scripts/Common.psm1 b/Files/Scripts/Common.psm1 index 08e5f7cf..729c0750 100644 --- a/Files/Scripts/Common.psm1 +++ b/Files/Scripts/Common.psm1 @@ -139,7 +139,7 @@ function ChangeRevList() { #============================================================================================================================================================================================== function ChangePatchPanel() { - + # Return is no GameType or game file is set if (!(IsSet $GameType)) { return } @@ -205,7 +205,7 @@ function SetMainScreenSize() { $VC.Panel.Visible = $IsWiiVC # Set Input Paths Sizes - $InputPaths.GamePanel.Location = $InputPaths.InjectPanel.Location = $InputPaths.PatchPanel.Location = DPISize (New-Object System.Drawing.Size(10, 50)) + $InputPaths.GamePanel.Location = $InputPaths.InjectPanel.Location = $InputPaths.PatchPanel.Location = DPISize (New-Object System.Drawing.Size(10, 70)) if ($IsWiiVC) { $InputPaths.InjectPanel.Top = $InputPaths.GamePanel.Bottom + (DPISize 15) $InputPaths.PatchPanel.Top = $InputPaths.InjectPanel.Bottom + (DPISize 15) @@ -228,21 +228,20 @@ function SetMainScreenSize() { $VC.Panel.Location = New-Object System.Drawing.Size((DPISize 10), ($Patches.Panel.Bottom + (DPISize 5))) } else { $VC.Panel.Location = New-Object System.Drawing.Size((DPISize 10), ($CustomHeader.Panel.Bottom + (DPISize 5))) } - $MiscPanel.Location = New-Object System.Drawing.Size((DPISize 10), ($VC.Panel.Bottom + (DPISize 5))) + $StatusPanel.Location = New-Object System.Drawing.Size((DPISize 10), ($VC.Panel.Bottom + (DPISize 5))) } else { if ( ($GameConsole.rom_title -eq 0) -and ($GameConsole.rom_gameID -eq 0) ) { if ($GameType.patches) { $Patches.Panel.Location = New-Object System.Drawing.Size((DPISize 10), ($CurrentGame.Panel.Bottom + (DPISize 5))) } - else { $MiscPanel.Location = New-Object System.Drawing.Size((DPISize 10), ($CurrentGame.Panel.Bottom + (DPISize 5))) } + else { $StatusPanel.Location = New-Object System.Drawing.Size((DPISize 10), ($CurrentGame.Panel.Bottom + (DPISize 5))) } } else { if ($GameType.patches) { $Patches.Panel.Location = New-Object System.Drawing.Size((DPISize 10), ($CustomHeader.Panel.Bottom + (DPISize 5))) } - else { $MiscPanel.Location = New-Object System.Drawing.Size((DPISize 10), ($CustomHeader.Panel.Bottom + (DPISize 5))) } + else { $StatusPanel.Location = New-Object System.Drawing.Size((DPISize 10), ($CustomHeader.Panel.Bottom + (DPISize 5))) } } - if ($GameType.patches) { $MiscPanel.Location = New-Object System.Drawing.Size((DPISize 10), ($Patches.Panel.Bottom + (DPISize 5))) } + if ($GameType.patches) { $StatusPanel.Location = New-Object System.Drawing.Size((DPISize 10), ($Patches.Panel.Bottom + (DPISize 5))) } } - $StatusPanel.Location = New-Object System.Drawing.Size((DPISize 10), ($MiscPanel.Bottom + (DPISize 5))) $MainDialog.Height = $StatusPanel.Bottom + (DPISize 50) } @@ -288,7 +287,9 @@ function ChangeGameMode() { # JSON Files if (IsSet $GameType.patches) { $Files.json.patches = SetJSONFile $GameFiles.patches } else { $Files.json.patches = $null } if (TestFile ($GameFiles.languages + "\Languages.json")) { $Files.json.languages = SetJSONFile ($GameFiles.languages + "\Languages.json") } else { $Files.json.languages = $null } - if (TestFile ($GameFiles.models + "\Models.json")) { $Files.json.models = SetJSONFile ($GameFiles.models + "\Models.json") } else { $Files.json.models = $null } + if (TestFile ($GameFiles.models + "\Models.json")) { $Files.json.models = SetJSONFile ($GameFiles.models + "\Models.json") } else { $Files.json.models = $null } + if (TestFile ($GameFiles.base + "\Music.json")) { $Files.json.music = SetJSONFile ($GameFiles.base + "\Music.json") } else { $Files.json.music = $null } + if ( (TestFile $GameFiles.controls) -and $IsWiiVC) { $Files.json.controls = SetJSONFile $GameFiles.controls CreateVCRemapDialog # Create VC remap settings @@ -308,7 +309,6 @@ function ChangeGameMode() { else { AddTextFileToTextbox -TextBox $Credits.Sections[1] -File $Files.Text.credits -MainCredits } } - $CreditsGameLabel.Text = "Current Game: " + $GameType.mode $Patches.Panel.Visible = $GameType.patches SetModeLabel @@ -363,7 +363,6 @@ function ChangePatch() { if ( (TestFile $GameFiles.script) -and $GamePatch.options -eq 1) { Import-Module -Name $GameFiles.script -Global LoadAdditionalOptions - if (Get-Command "AdjustGUI" -errorAction SilentlyContinue) { iex "AdjustGUI" } } break } @@ -422,7 +421,7 @@ function SetModeLabel() { $CurrentModeLabel.Text = "Current Mode : " + $GameType.mode if ($IsWiiVC) { $CurrentModeLabel.Text += " (Wii VC)" } else { $CurrentModeLabel.Text += " (" + $GameConsole.Mode + ")" } - $CurrentModeLabel.Location = New-Object System.Drawing.Size(([Math]::Floor($MainDialog.Width / 2) - [Math]::Floor($CurrentModeLabel.Width / 2)), 10) + $CurrentModeLabel.Location = New-Object System.Drawing.Size(([Math]::Floor($MainDialog.Width / 2) - [Math]::Floor($CurrentModeLabel.Width / 2)), 50) } @@ -436,7 +435,7 @@ function EnablePatchButtons([boolean]$Enable) { else { UpdateStatusLabel "Select your ROM or Wii VC WAD file to continue." } # Enable patcher buttons - $Patches.Panel.Enabled = $CustomHeader.Panel.Enabled = $VC.ExtractROMButton.Enabled = $Enable + $Patches.Button.Enabled = $CustomHeader.Panel.Enabled = $VC.ExtractROMButton.Enabled = $Enable } @@ -620,8 +619,8 @@ function IsIndex([object]$Elem, [int16]$Index=1, [string]$Text, [switch]$Active, if (IsSet $Text) { $Text = $Text.replace(" (default)", "") - if ($Elem.indexOf($Text)) { return !$Not } - if (!$Elem.indexOf($Text)) { return $Not } + if ($Elem.Text -eq $Text) { return !$Not } + if ($Elem.Text -ne $Text) { return $Not } } if ($Elem.SelectedIndex -eq ($Index-1)) { return !$Not } @@ -875,7 +874,7 @@ function EnableGUI([boolean]$Enable) { $InputPaths.GamePanel.Enabled = $InputPaths.InjectPanel.Enabled = $InputPaths.PatchPanel.Enabled = $Enable $CurrentGame.Panel.Enabled = $CustomHeader.Panel.Enabled = $Enable - $Patches.Panel.Enabled = $MiscPanel.Enabled = $VC.Panel.Enabled = $Enable + $Patches.Panel.Enabled = $VC.Panel.Enabled = $Enable SetModernVisualStyle $GeneralSettings.ModernStyle.Checked } @@ -1125,42 +1124,6 @@ function IsRestrictedFolder([string]$Path) { -#================================================================================================================================================================================================================================================================== -function StartJobLoop([string]$Name, [string]$Program = '', [switch]$Silent=$False) { - - if (!$Silent) { Write-Host ('--- Job Loop Started (' + $Program + ')') } - - RunJobLoop -Name $Name -Silent:$Silent - - Stop-Job -Name $Name - Remove-Job -Name $Name - - if (!$Silent) { Write-Host "--- Job Loop Ended" } - -} - - - -#================================================================================================================================================================================================================================================================== -function RunJobLoop([string]$Name, [switch]$Silent=$False) { - - $JobStatus = (Get-Job -Name $Name).State - - while ($JobStatus -ne 'Completed') { - Start-Sleep -m $DialogUpdateRateMS - $JobStatus = (Get-Job -Name $Name).State - - if (!$Silent) { Write-Host "<< Job Loop Iteration >>" } - - $JobFeedback = (Receive-Job -Name $Name) - - [Windows.Forms.Application]::DoEvents() - } - -} - - - #============================================================================================================================================================================================== function GetCommand([string]$Command) { return (Get-Command $Command -errorAction SilentlyContinue) } @@ -1229,7 +1192,4 @@ Export-ModuleMember -Function SetModernVisualStyle Export-ModuleMember -Function SetLogging Export-ModuleMember -Function SetBitmap Export-ModuleMember -Function IsRestrictedFolder -Export-ModuleMember -Function GetCommand - -Export-ModuleMember -Function StartJobLoop -Export-ModuleMember -Function RunJobLoop \ No newline at end of file +Export-ModuleMember -Function GetCommand \ No newline at end of file diff --git a/Files/Scripts/Dialogs.psm1 b/Files/Scripts/Dialogs.psm1 index 8ef01ec7..ee7c3864 100644 --- a/Files/Scripts/Dialogs.psm1 +++ b/Files/Scripts/Dialogs.psm1 @@ -71,53 +71,26 @@ function CreateCreditsDialog() { # Create Dialog if ($DisableHighDPIMode) { $width = 730 } else { $width = 700 } - $global:CreditsDialog = CreateDialog -Width (DPISize $width) -Height (DPISize 550) -Icon $Files.icon.credits + $global:CreditsDialog = CreateDialog -Width (DPISize $width) -Height (DPISize 500) -Icon $Files.icon.credits $CloseButton = CreateButton -X ($CreditsDialog.Width / 2 - (DPISize 40)) -Y ($CreditsDialog.Height - (DPISize 90)) -Width (DPISize 80) -Height (DPISize 35) -Text "Close" -AddTo $CreditsDialog $CloseButton.Add_Click({ $CreditsDialog.Hide() }) - # Create the current game label - $global:CreditsGameLabel = CreateLabel -X (DPISize 40) -Y (DPISize 50) -Width (DPISize 200) -Height (DPISize 15) -Font $Fonts.SmallBold -AddTo $CreditsDialog - # Create Switch subpanel buttons $global:Credits = @{} - $Credits.Buttons = @() - $Credits.Buttons += CreateButton -X (DPISize 40) -Y (DPISize 70) -Width (DPISize 120) -Height (DPISize 30) -ForeColor "White" -BackColor "Gray" -Text "Info" -Tag $Credits.Buttons.length -Info "Check the info for this game" -AddTo $CreditsDialog - $Credits.Buttons += CreateButton -X ($Credits.Buttons[0].Right) -Y $Credits.Buttons[0].Top -Width $Credits.Buttons[0].Width -Height $Credits.Buttons[0].Height -ForeColor "White" -BackColor "Gray" -Text "Credits" -Tag $Credits.Buttons.length -Info "Check the credits for this game" -AddTo $CreditsDialog - $Credits.Buttons += CreateButton -X ($Credits.Buttons[1].Right) -Y $Credits.Buttons[0].Top -Width $Credits.Buttons[0].Width -Height $Credits.Buttons[0].Height -ForeColor "White" -BackColor "Gray" -Text "GameID's" -Tag $Credits.Buttons.length -Info "Open the list with official and patched GameID's" -AddTo $CreditsDialog - $Credits.Buttons += CreateButton -X ($Credits.Buttons[2].Right) -Y $Credits.Buttons[0].Top -Width $Credits.Buttons[0].Width -Height $Credits.Buttons[0].Height -ForeColor "White" -BackColor "Gray" -Text "Misc" -Tag $Credits.Buttons.length -Info "General credits and info in general" -AddTo $CreditsDialog - $Credits.Buttons += CreateButton -X ($Credits.Buttons[3].Right) -Y $Credits.Buttons[0].Top -Width $Credits.Buttons[0].Width -Height $Credits.Buttons[0].Height -ForeColor "White" -BackColor "Gray" -Text "Checksum" -Tag $Credits.Buttons.length -Info "General credits and info in general" -AddTo $CreditsDialog - + # Create the version number and script name label $InfoLabel = CreateLabel -X ($CreditsDialog.Width / 2 - $String.Width - (DPISize 100)) -Y (DPISize 10) -Width (DPISize 200) -Height (DPISize 15) -Font $Fonts.SmallBold -Text ($ScriptName + " " + $Version + " (" + $VersionDate + ")") -AddTo $CreditsDialog # Create Text Box $Credits.Sections = @() - $Credits.Sections += CreateTextBox -X (DPISize 40) -Y ($Credits.Buttons[0].Bottom + (DPISize 10)) -Width ($CreditsDialog.Width - (DPISize 100)) -Height ($CloseButton.Top - (DPISize 120)) -ReadOnly -Multiline -AddTo $CreditsDialog -Tag "Info" -TextFileFont + $Credits.Sections += CreateTextBox -X (DPISize 40) -Y (DPISize 30) -Width ($CreditsDialog.Width - (DPISize 100)) -Height ($CloseButton.Top - (DPISize 40)) -ReadOnly -Multiline -AddTo $CreditsDialog -Tag "Info" -TextFileFont $Credits.Sections += CreateTextBox -X $Credits.Sections[0].Left -Y $Credits.Sections[0].Top -Width $Credits.Sections[0].Width -Height $Credits.Sections[0].Height -ReadOnly -Multiline -AddTo $CreditsDialog -Tag "Credits" -TextFileFont $Credits.Sections += CreateTextBox -X $Credits.Sections[0].Left -Y $Credits.Sections[0].Top -Width $Credits.Sections[0].Width -Height $Credits.Sections[0].Height -ReadOnly -Multiline -AddTo $CreditsDialog -Tag "GameID's" -TextFileFont AddTextFileToTextbox -TextBox $Credits.Sections[2] -File $Files.text.gameID $Credits.Sections += CreatePanel -X $Credits.Sections[0].Left -Y $Credits.Sections[0].Top -Width $Credits.Sections[0].Width -Height $Credits.Sections[0].Height -AddTo $CreditsDialog -Tag "Misc" $Credits.Sections += CreatePanel -X $Credits.Sections[0].Left -Y $Credits.Sections[0].Top -Width $Credits.Sections[0].Width -Height $Credits.Sections[0].Height -AddTo $CreditsDialog -Tag "Checksum" - # Initialize Button Events - foreach ($i in 0..($Credits.Buttons.length-1)) { - $Credits.Buttons[$i].Add_Click({ - foreach ($item in $Credits.Buttons) { $item.BackColor = "Gray" } - foreach ($item in $Credits.Sections) { $item.Visible = $item.Tag -eq $this.Text } - $this.BackColor = "DarkGray" - $Settings["Core"]["LastTab"] = $this.Tag - }) - if ($i -gt 0) { $Credits.Sections[$i].Visible = $False } - } - - # Set last tab - if (IsSet -Elem $Settings["Core"]["LastTab"]) { - $Credits.Buttons[$Settings["Core"]["LastTab"]].BackColor = "DarkGray" - foreach ($item in $Credits.Sections) { $item.Visible = $item.Tag -eq $Credits.Buttons[$Settings["Core"]["LastTab"]].Text } - } - else { $Credits.Buttons[0].BackColor = "DarkGray" } - # Support $SupportLabel = CreateLabel -X (DPISize 10) -Y (DPISize 10) -Width (DPISize 200) -Height (DPISize 15) -Font $Fonts.SmallBold -Text ("--- Support or visit me at ---") -AddTo $Credits.Sections[3] @@ -198,7 +171,7 @@ function CreateCreditsDialog() { $VerificationInfo.SupportText = CreateLabel -X (DPISize 10) -Y ($VerificationInfo.RevField.Bottom + (DPISize 10)) -Width (DPISize 120) -Height (DPISize 15) -Font $Fonts.SmallBold -Text "Supported ROM:" -AddTo $Credits.Sections[4] $VerificationInfo.SupportField = CreateTextBox -X $VerificationInfo.SupportText.Right -Y ($VerificationInfo.SupportText.Top - (DPISize 3)) -Width ($Credits.Sections[4].Width - $VerificationInfo.SupportText.Width - (DPISize 100)) -Height (DPISize 50) -Text "No ROM Selected" -AddTo $Credits.Sections[4] $VerificationInfo.SupportField.ReadOnly = $True - + } @@ -207,7 +180,7 @@ function CreateCreditsDialog() { function CreateSettingsDialog() { # Create Dialog - $global:SettingsDialog = CreateDialog -Width (DPISize 560) -Height (DPISize 700) -Icon $Files.icon.settings + $global:SettingsDialog = CreateDialog -Width (DPISize 560) -Height (DPISize 610) -Icon $Files.icon.settings $CloseButton = CreateButton -X ($SettingsDialog.Width / 2 - (DPISize 40)) -Y ($SettingsDialog.Height - (DPISize 90)) -Width (DPISize 80) -Height (DPISize 35) -Text "Close" -AddTo $SettingsDialog $CloseButton.Add_Click({ $SettingsDialog.Hide() }) @@ -232,10 +205,8 @@ function CreateSettingsDialog() { $GeneralSettings.IgnoreChecksum = CreateSettingsCheckbox -Name "IgnoreChecksum" -Column 1 -Row 1 -Text "Ignore Input Checksum" -IsDebug -Info "Do not check the checksum of a ROM or WAD and patch it regardless`nDowngrade is no longer forced anymore if the checksum is different than the supported revision`nThis option also skips the maximum ROM size verification`n`nDO NOT REPORT ANY BUGS IF THIS OPTION IS ENABLED!" $GeneralSettings.KeepLogo = CreateSettingsCheckbox -Name "KeepLogo" -Column 2 -Row 1 -Text "Keep Logo" -IsDebug -Info "Keep the vanilla title logo instead of the Master Quest title logo if Master Quest is being patched in" $GeneralSettings.ForceExtract = CreateSettingsCheckbox -Name "ForceExtract" -Column 3 -Row 1 -Text "Force Extract" -IsDebug -Info "Always extract game data required for patching even if it was already extracted on a previous run" - $Info = "Changes how the widescreen option behaves for Ocarina of Time and Majora's Mask in Native (N64) Mode`n`n--- Ocarina of Time ---`nApply an experimental widescreen patch instead`n`n--- Majora's Mask ---`nOnly apply the 16:9 textures`nUse GLideN64 " + '"adjust to fit"' + " option for 16:9 widescreen" - $GeneralSettings.ChangeWidescreen = CreateSettingsCheckbox -Name "ChangeWidescreen" -Column 1 -Row 2 -Text "Change Widescreen" -IsDebug -Info $Info - $GeneralSettings.LiteGUI = CreateSettingsCheckbox -Name "LiteGUI" -Column 2 -Row 2 -Text "Lite Options GUI" -IsDebug -Info "Only display and allow options which are highly compatible, such as with the Randomizer for Ocarina of Time and Majora's Mask" - $GeneralSettings.ForceOptions = CreateSettingsCheckbox -Name "ForceOptions" -Column 3 -Row 2 -Text "Force Show Options" -IsDebug -Info ("Always show the " + '"Additional Options"' + " checkbox if it can be supported`n`nDO NOT REPORT ANY BUGS IF THIS OPTION IS ENABLED!") + $GeneralSettings.LiteGUI = CreateSettingsCheckbox -Name "LiteGUI" -Column 1 -Row 2 -Text "Lite Options GUI" -IsDebug -Info "Only display and allow options which are highly compatible, such as with the Randomizer for Ocarina of Time and Majora's Mask" + $GeneralSettings.ForceOptions = CreateSettingsCheckbox -Name "ForceOptions" -Column 2 -Row 2 -Text "Force Show Options" -IsDebug -Info ("Always show the " + '"Additional Options"' + " checkbox if it can be supported`n`nDO NOT REPORT ANY BUGS IF THIS OPTION IS ENABLED!") # Debug Settings $GeneralSettings.Box = CreateReduxGroup -Y ($GeneralSettings.Box.Bottom + (DPISize 10)) -IsGame $False -Height 3 -AddTo $SettingsDialog -Text "Debug Settings" @@ -268,25 +239,11 @@ function CreateSettingsDialog() { $GeneralSettings.Presets += CreateSettingsRadioField -Name "Preset" -SaveAs 5 -Max 6 -NameTextbox "Preset.Label5" -Column 2 -Row 2 -Text "Preset 5" -Info "" $GeneralSettings.Presets += CreateSettingsRadioField -Name "Preset" -SaveAs 6 -Max 6 -NameTextbox "Preset.Label6" -Column 3 -Row 2 -Text "Preset 6" -Info "" - # Reset buttons - $GeneralSettings.Box = CreateReduxGroup -Y ($GeneralSettings.Box.Bottom + (DPISize 10)) -IsGame $False -Height 2 -AddTo $SettingsDialog -Text "Reset" - $GeneralSettings.ResetButton = CreateReduxButton -Column 1 -Width 150 -Height 50 -AddTo $GeneralSettings.Box -Text "Reset All Settings" -Info ("Resets all settings stored in the " + $ScriptName) - $GeneralSettings.ResetGameButton = CreateReduxButton -Column 2 -Width 150 -Height 50 -AddTo $GeneralSettings.Box -Text "Reset Current Game" -Info ("Resets all settings for the current game mode " + $GameType.mode) - $GeneralSettings.CleanupButton = CreateReduxButton -Column 3 -Width 150 -Height 50 -AddTo $GeneralSettings.Box -Text "Cleanup Files" -Info "Remove all temporary and extracted files`nThis process is automaticially done after patching a game" - - - $GeneralSettings.DoubleClick.Add_CheckStateChanged( { TogglePowerShellOpenWithClicks $this.Checked } ) $GeneralSettings.ModernStyle.Add_CheckStateChanged( { SetModernVisualStyle $this.checked } ) $GeneralSettings.ForceOptions.Add_CheckStateChanged( { DisablePatches } ) $GeneralSettings.EnableSounds.Add_CheckStateChanged( { LoadSoundEffects $this.checked } ) $GeneralSettings.Logging.Add_CheckStateChanged( { SetLogging $this.checked } ) - $GeneralSettings.ResetButton.Add_Click( { ResetTool } ) - $GeneralSettings.ResetGameButton.Add_Click( { ResetGame } ) - $GeneralSettings.CleanupButton.Add_Click( { CleanupFiles } ) - - - # Local Temp Folder $GeneralSettings.LocalTempFolder.Add_CheckStateChanged( { @@ -294,11 +251,6 @@ function CreateSettingsDialog() { SetTempFileParameters } ) - # Change Widescreen - $GeneralSettings.ChangeWidescreen.Add_CheckStateChanged( { - if (Get-Command ("AdjustGUI" + $FunctionTitle) -errorAction SilentlyContinue) { iex "AdjustGUI" } - } ) - # Console $GeneralSettings.Console.Enabled = $ExternalScript $GeneralSettings.Console.Add_CheckStateChanged( { ShowPowerShellConsole $this.Checked } ) @@ -498,4 +450,8 @@ Export-ModuleMember -Function CreateReduxDialog Export-ModuleMember -Function CreateCreditsDialog Export-ModuleMember -Function CreateSettingsDialog Export-ModuleMember -Function CreateErrorDialog -Export-ModuleMember -Function CreateLanguageContent \ No newline at end of file +Export-ModuleMember -Function CreateLanguageContent + +Export-ModuleMember -Function ResetTool +Export-ModuleMember -Function ResetGame +Export-ModuleMember -Function CleanupFiles \ No newline at end of file diff --git a/Files/Scripts/Files.psm1 b/Files/Scripts/Files.psm1 index c883d74b..f29cec3b 100644 --- a/Files/Scripts/Files.psm1 +++ b/Files/Scripts/Files.psm1 @@ -63,6 +63,7 @@ function SetFileParameters() { $Files.oot.master_quest = CheckPatchExtension ($Paths.Games + "\Ocarina of Time\Decompressed\master_quest") $Files.oot.mm_pause_screen = CheckPatchExtension ($Paths.Games + "\Ocarina of Time\Decompressed\mm_pause_screen") $Files.oot.harder_child_bosses = CheckPatchExtension ($Paths.Games + "\Ocarina of Time\Decompressed\harder_child_bosses") + $Files.oot.eyes_mm = CheckPatchExtension ($Paths.Games + "\Ocarina of Time\Decompressed\eyes_mm") $Files.oot.feminine_animations = CheckPatchExtension ($Paths.Games + "\Ocarina of Time\Decompressed\feminine_animations") $Files.oot.hide_equipment = CheckPatchExtension ($Paths.Games + "\Ocarina of Time\Decompressed\hide_equipment") @@ -71,6 +72,10 @@ function SetFileParameters() { $Files.oot.title_master_quest = $Paths.Games + "\Ocarina of Time\Textures\Logo\mq_logo.bin" $Files.oot.hud_mm_heart = $Paths.Games + "\Ocarina of Time\Textures\HUD\mm_heart.bin" $Files.oot.hud_mm_button = $Paths.Games + "\Ocarina of Time\Textures\HUD\mm_button.bin" + $Files.oot.hud_mm_button_full = $Paths.Games + "\Ocarina of Time\Textures\HUD\mm_button_full.bin" + $Files.oot.hud_mm_button_small = $Paths.Games + "\Ocarina of Time\Textures\HUD\mm_button_small.bin" + $Files.oot.hud_oot_button_full = $Paths.Games + "\Ocarina of Time\Textures\HUD\oot_button_full.bin" + $Files.oot.hud_oot_button_small = $Paths.Games + "\Ocarina of Time\Textures\HUD\oot_button_small.bin" $Files.oot.hud_mm_key_rupee = $Paths.Games + "\Ocarina of Time\Textures\HUD\mm_key_rupee.bin" $Files.oot.hud_tatl = $Paths.Games + "\Ocarina of Time\Textures\HUD\tatl.bin" $Files.oot.hud_tael = $Paths.Games + "\Ocarina of Time\Textures\HUD\tael.bin" @@ -106,18 +111,19 @@ function SetFileParameters() { $Files.oot.gerudo3 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\forest_temple_room_11_block.bin" $Files.oot.gerudo4 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\forest_temple_room_11_hole.bin" $Files.oot.gerudo5 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\ganondorf_cape.bin" - $Files.oot.gerudo6 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\gerudo_training_ground_door.bin" - $Files.oot.gerudo7 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\gerudo_training_ground_room_5.bin" - $Files.oot.gerudo8 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\gerudo_valley.bin" - $Files.oot.gerudo9 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\golden_gauntlets_pillar.bin" - $Files.oot.gerudo14 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\pushing_block.bin" - $Files.oot.gerudo15 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\rusted_floor_switch.bin" - $Files.oot.gerudo16 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\shadow_temple_room_0.bin" - $Files.oot.gerudo17 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\silver_gauntlets_block.bin" - $Files.oot.gerudo18 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\spirit_temple_boss.bin" - $Files.oot.gerudo19 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\spirit_temple_room_0_elevator.bin" - $Files.oot.gerudo20 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\spirit_temple_room_0_pillars.bin" - $Files.oot.gerudo21 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\spirit_temple_room_10.bin" + $Files.oot.gerudo6 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\gerudo_membership_card.bin" + $Files.oot.gerudo7 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\gerudo_training_ground_door.bin" + $Files.oot.gerudo8 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\gerudo_training_ground_room_5.bin" + $Files.oot.gerudo9 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\gerudo_valley.bin" + $Files.oot.gerudo10 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\golden_gauntlets_pillar.bin" + $Files.oot.gerudo11 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\pushing_block.bin" + $Files.oot.gerudo12 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\rusted_floor_switch.bin" + $Files.oot.gerudo13 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\shadow_temple_room_0.bin" + $Files.oot.gerudo14 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\silver_gauntlets_block.bin" + $Files.oot.gerudo15 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\spirit_temple_boss.bin" + $Files.oot.gerudo16 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\spirit_temple_room_0_elevator.bin" + $Files.oot.gerudo17 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\spirit_temple_room_0_pillars.bin" + $Files.oot.gerudo18 = $Paths.Games + "\Ocarina of Time\Textures\Gerudo Symbols\spirit_temple_room_10.bin" @@ -135,7 +141,12 @@ function SetFileParameters() { $Files.mm.mq_remix = CheckPatchExtension ($Paths.Games + "\Majora's Mask\Decompressed\master_quest_remix") $Files.mm.hud_navi = $Paths.Games + "\Majora's Mask\Textures\HUD\navi.bin" + + $Files.mm.hud_mm_button_full = $Paths.Games + "\Majora's Mask\Textures\HUD\mm_button_full.bin" + $Files.mm.hud_mm_button_small = $Paths.Games + "\Majora's Mask\Textures\HUD\mm_button_small.bin" $Files.mm.hud_oot_button = $Paths.Games + "\Majora's Mask\Textures\HUD\oot_button.bin" + $Files.mm.hud_oot_button_full = $Paths.Games + "\Majora's Mask\Textures\HUD\oot_button_full.bin" + $Files.mm.hud_oot_button_small = $Paths.Games + "\Majora's Mask\Textures\HUD\oot_button_small.bin" $Files.mm.hud_oot_heart = $Paths.Games + "\Majora's Mask\Textures\HUD\oot_heart.bin" $Files.mm.hud_tael = $Paths.Games + "\Majora's Mask\Textures\HUD\tael.bin" $Files.mm.hud_tatl = $Paths.Games + "\Majora's Mask\Textures\HUD\tatl.bin" diff --git a/Files/Scripts/Forms.psm1 b/Files/Scripts/Forms.psm1 index 9b68182a..85e700a4 100644 --- a/Files/Scripts/Forms.psm1 +++ b/Files/Scripts/Forms.psm1 @@ -273,6 +273,37 @@ function CreateSlider([uint16]$X=0, [uint16]$Y=0, [uint16]$Width=0, [uint16]$Hei +#============================================================================================================================================================================================== +function CreateListBox([uint16]$X=0, [uint16]$Y=0, [uint16]$Width=0, [uint16]$Height=0, [string[]]$Items, [string]$Name, [string]$Tag, [string]$Info, [switch]$IsGame, [object]$AddTo=$Last.Group, [object]$Link) { + + $listBox = CreateForm -X $X -Y $Y -Width $Width -Height $Height -Name $Name -Tag $Tag -IsGame $IsGame -Form (New-Object System.Windows.Forms.Listbox) -AddTo $AddTo + $listBox.SelectionMode = 'MultiSimple' + + foreach ($item in $items) { + $listBox.Items.Add($Item) + #$listBox.SetSelected($listBox.Items.count-1, $True) + } + + if (IsSet $listBox.Name) { + if ($IsGame) { + if ($GameSettings[$listBox.Section][$listBox.Name] -ne "" -and $GameSettings[$listBox.Section][$listBox.Name] -ne $null) { + $load = $GameSettings[$listBox.Section][$listBox.Name].ToCharArray() + foreach ($i in 0..($listBox.items.count-1)) { if ($load[$i] -eq "1") { $listBox.SetSelected($i, 1) } } + } + + $listBox.Add_SelectedIndexChanged({ + $save = "" + foreach ($i in 0..($this.items.count-1)) { if ($this.getSelected($i) -eq $True) { $save += "1" } else { $save += "0" } } + $GameSettings[$this.Section][$this.Name] = $save + }) + } + } + + return $listBox + +} + + #============================================================================================================================================================================================== function CreateLabel([uint16]$X=0, [uint16]$Y=0, [uint16]$Width=0, [uint16]$Height=0, [string]$Name, [string]$Tag, [string]$Text="", [System.Drawing.Font]$Font=$Fonts.Small, [string]$Info="", [object]$AddTo=$Last.Group) { @@ -356,12 +387,12 @@ function CreateTabButtons([string[]]$Tabs, [object]$AddTo=$Redux.Panel) { #============================================================================================================================================================================================== -function CreateReduxPanel([single]$Row=0, [single]$Columns, [single]$Rows=1, [string]$Name, [string]$Tag, [object]$AddTo=$Last.Group) { +function CreateReduxPanel([single]$X=$Last.Group.Left, [single]$Row=0, [single]$Columns, [single]$Rows=1, [string]$Name, [string]$Tag, [object]$AddTo=$Last.Group) { $Last.Max = 0 if (IsSet $Columns -Min 0) { $Width = (DPISize 150) * $Columns } else { $Width = $AddTo.Width - (DPISize 20) } - return CreatePanel -X $AddTo.Left -Y ($Row * (DPISize 30) + (DPISize 20)) -Width $Width -Height ((DPISize 26.5) * $Rows) -Name $Name -Tag $Tag -AddTo $AddTo + return CreatePanel -X $X -Y ($Row * (DPISize 30) + (DPISize 20)) -Width $Width -Height ((DPISize 26.5) * $Rows) -Name $Name -Tag $Tag -AddTo $AddTo } @@ -600,7 +631,7 @@ function CreateReduxComboBox([single]$Column=$Last.Column, [single]$Row=$Last.Ro #============================================================================================================================================================================================== -function CreateReduxSlider([single]$Column=$Last.Column, [single]$Row=$Last.Row, $Default, $Min, $Max, $Freq, $Small, $Large, [string]$Text, [string]$Info, [string]$Warning, [string]$Credits, [string]$Name, [object]$Link, [string]$Tag, [object]$AddTo=$Last.Group) { +function CreateReduxSlider([single]$Column=$Last.Column, [single]$Row=$Last.Row, $Default, $Min, $Max, $Freq, $Small, $Large, [string]$Text, [string]$Info, [string]$Warning, [string]$Credits, [string]$Name, [string]$Tag, [object]$AddTo=$Last.Group) { if ($Default.GetType().Name -eq "String") { $Default = GetDecimal $Default } if ($Min.GetType().Name -eq "String") { $Min = GetDecimal $Min } @@ -627,6 +658,16 @@ function CreateReduxSlider([single]$Column=$Last.Column, [single]$Row=$Last.Row, +#============================================================================================================================================================================================== +function CreateReduxListBox([single]$Column=$Last.Column, [single]$Row=$Last.Row, [string[]]$Items, $Default=$null, [string]$Text, [string]$Info, [string]$Warning, [string]$Credits, [string]$Name, [object]$Link, [string]$Tag, [object]$AddTo=$Last.Group) { + + $listBox = CreateListBox -X (($Column-1) * (DPISize 165) + (DPISize 15)) -Y ($Row * (DPISize 45) - (DPISize 25)) -Width (DPISize 300) -Height (DPISize 175) -Items $Items -Default $Default -Info $Info -IsGame $True -Name $Name -Tag $Tag -AddTo $AddTo + return $listBox + +} + + + #============================================================================================================================================================================================== function CreateReduxColoredLabel([System.Windows.Forms.Button]$Link, [System.Drawing.Color]$Color, [string]$Name, [string]$Tag, [object]$AddTo=$Last.Group) { @@ -651,6 +692,7 @@ Export-ModuleMember -Function CreateButton Export-ModuleMember -Function CreateCheckBox Export-ModuleMember -Function CreateComboBox Export-ModuleMember -Function CreateSlider +Export-ModuleMember -Function CreateListBox Export-ModuleMember -Function CreateTabButton Export-ModuleMember -Function CreateTabButtons @@ -663,4 +705,5 @@ Export-ModuleMember -Function CreateReduxRadioButton Export-ModuleMember -Function CreateReduxCheckBox Export-ModuleMember -Function CreateReduxComboBox Export-ModuleMember -Function CreateReduxSlider +Export-ModuleMember -Function CreateReduxListBox Export-ModuleMember -Function CreateReduxColoredLabel \ No newline at end of file diff --git a/Files/Scripts/Main.psm1 b/Files/Scripts/Main.psm1 index 9d9410fa..0378c920 100644 --- a/Files/Scripts/Main.psm1 +++ b/Files/Scripts/Main.psm1 @@ -13,12 +13,47 @@ function CreateMainDialog() { $MainDialog.Add_Shown({ $MainDialog.Activate() }) $MainDialog.Icon = $Files.icon.main + # Menu bar + $menuBarMain = New-Object System.Windows.Forms.MenuStrip; $MainDialog.Controls.Add($menuBarMain) + + $menuBarFile = New-Object System.Windows.Forms.ToolStripMenuItem; $menuBarFile.Text = "File"; $menuBarMain.Items.Add($menuBarFile) + $menuBarEdit = New-Object System.Windows.Forms.ToolStripMenuItem; $menuBarEdit.Text = "Edit"; $menuBarMain.Items.Add($menuBarEdit) + $menuBarHelp = New-Object System.Windows.Forms.ToolStripMenuItem; $menuBarHelp.Text = "Help"; $menuBarMain.Items.Add($menuBarHelp) + + $menuBarChecksum = New-Object System.Windows.Forms.ToolStripButton; $menuBarChecksum.Text = "Checksum"; $menuBarFile.DropDownItems.Add($menuBarChecksum) + $menuBarExit = New-Object System.Windows.Forms.ToolStripButton; $menuBarExit.Text = "Exit"; $menuBarFile.DropDownItems.Add($menuBarExit) + + $menuBarSettings = New-Object System.Windows.Forms.ToolStripButton; $menuBarSettings.Text = "Settings"; $menuBarEdit.DropDownItems.Add($menuBarSettings) + $menuBarResetAll = New-Object System.Windows.Forms.ToolStripButton; $menuBarResetAll.Text = "Reset All Settings"; $menuBarEdit.DropDownItems.Add($menuBarResetAll) + $menuBarResetGame = New-Object System.Windows.Forms.ToolStripButton; $menuBarResetGame.Text = "Reset Current Game"; $menuBarEdit.DropDownItems.Add($menuBarResetGame) + $menuBarCleanup = New-Object System.Windows.Forms.ToolStripButton; $menuBarCleanup.Text = "Cleanup Files"; $menuBarEdit.DropDownItems.Add($menuBarCleanup) + + $menuBarInfo = New-Object System.Windows.Forms.ToolStripButton; $menuBarInfo.Text = "Info"; $menuBarHelp.DropDownItems.Add($menuBarInfo) + $menuBarLinks = New-Object System.Windows.Forms.ToolStripButton; $menuBarLinks.Text = "Links"; $menuBarHelp.DropDownItems.Add($menuBarLinks) + $menuBarCredits = New-Object System.Windows.Forms.ToolStripButton; $menuBarCredits.Text = "Credits"; $menuBarHelp.DropDownItems.Add($menuBarCredits) + $menuBarGameID = New-Object System.Windows.Forms.ToolStripButton; $menuBarGameID.Text = "GameID"; $menuBarHelp.DropDownItems.Add($menuBarGameID) + + $menuBarChecksum.Add_Click( { foreach ($item in $Credits.Sections) { $item.Visible = $False }; $Credits.Sections[4].Visible = $True; $CreditsDialog.ShowDialog() } ) + $menuBarExit.Add_Click( { $MainDialog.Close() } ) + + $menuBarSettings.Add_Click( { $SettingsDialog.ShowDialog() } ) + $menuBarResetAll.Add_Click( { ResetTool } ) + $menuBarResetGame.Add_Click( { ResetGame } ) + $menuBarCleanup.Add_Click( { CleanupFiles } ) + + $menuBarInfo.Add_Click( { foreach ($item in $Credits.Sections) { $item.Visible = $False }; $Credits.Sections[0].Visible = $True; $CreditsDialog.ShowDialog() } ) + $menuBarLinks.Add_Click( { foreach ($item in $Credits.Sections) { $item.Visible = $False }; $Credits.Sections[3].Visible = $True; $CreditsDialog.ShowDialog() } ) + $menuBarCredits.Add_Click( { foreach ($item in $Credits.Sections) { $item.Visible = $False }; $Credits.Sections[1].Visible = $True; $CreditsDialog.ShowDialog() } ) + $menuBarGameID.Add_Click( { foreach ($item in $Credits.Sections) { $item.Visible = $False }; $Credits.Sections[2].Visible = $True; $CreditsDialog.ShowDialog() } ) + + + # Create a label to show current mode. $global:CurrentModeLabel = CreateLabel -Font $Fonts.Medium -AddTo $MainDialog $CurrentModeLabel.AutoSize = $True # Create a label to show current version. - $VersionLabel = CreateLabel -X (DPISize 15) -Y (DPISize 10) -Width (DPISize 120) -Height (DPISize 30) -Text ($Version + "`n(" + $VersionDate + ")") -Font $Fonts.SmallBold -AddTo $MainDialog + $VersionLabel = CreateLabel -X (DPISize 15) -Y (DPISize 30) -Width (DPISize 120) -Height (DPISize 30) -Text ($Version + "`n(" + $VersionDate + ")") -Font $Fonts.SmallBold -AddTo $MainDialog # Create Arrays for groups $global:InputPaths = @{}; $global:Patches = @{}; $global:CurrentGame = @{}; $global:VC = @{}; $global:CustomHeader = @{} @@ -58,7 +93,7 @@ function CreateMainDialog() { $InputPaths.GameTextBox.Text = "Select your ROM or Wii VC WAD file..." $InputPaths.InjectTextBox.Text = "Select your ROM for injection..." $InputPaths.PatchTextBox.Text = "Select your custom patch file..." - $global:GameIsSelected = $Patches.Panel.Enabled = $CustomHeader.Panel.Enabled = $InputPaths.ClearGameButton.Enabled = $InputPaths.ApplyInjectButton.Enabled = $InputPaths.ApplyPatchButton.Enabled = $InputPaths.PatchPanel.Visible = $False + $global:GameIsSelected = $Patches.Button.Enabled = $CustomHeader.Panel.Enabled = $InputPaths.ClearGameButton.Enabled = $InputPaths.ApplyInjectButton.Enabled = $InputPaths.ApplyPatchButton.Enabled = $InputPaths.PatchPanel.Visible = $False if ($IsWiiVC) { SetWiiVCMode $False ChangeGamesList @@ -207,7 +242,6 @@ function CreateMainDialog() { # Create a panel to contain everything for patches. $Patches.Panel = CreatePanel -Width (DPISize 590) -Height (DPISize 90) - $Patches.Panel.Enabled = $False # Create a groupbox to show the patching buttons. $Patches.Group = CreateGroupBox -Width $Patches.Panel.Width -Height $Patches.Panel.Height @@ -215,8 +249,9 @@ function CreateMainDialog() { # Create patch button $Patches.Button = CreateButton -X (DPISize 10) -Y (DPISize 45) -Width (DPISize 200) -Height (DPISize 35) -Text "Patch Selected Option" $Patches.Button.Add_Click( { MainFunction -Command $GamePatch.command -PatchedFileName $GamePatch.output } ) + $Patches.Button.Enabled = $False - # Create patch button + # Create editor button $Patches.Editor = CreateButton -X ($Patches.Button.right + (DPISize 5)) -Y $Patches.Button.top -Width (DPISize 95) -Height (DPISize 35) -Text "Open Editor" -Info "Open the text editor for adjusting the dialogue of the game" $Patches.Editor.Add_Click( { if ($global:Editor -eq $null) { CreateEditorDialog -Width 900 -Height 800 } @@ -301,33 +336,9 @@ function CreateMainDialog() { - ############## - # Misc Panel # - ############## - - # Create a panel to contain everything for other. - $global:MiscPanel = CreatePanel -Width (DPISize 590) -Height (DPISize 75) - - # Create a groupbox to show the misc buttons. - $global:MiscGroup = CreateGroupBox -Width ($MiscPanel.Width) -Height ($MiscPanel.Height) -Text "Other Buttons" - - # Create a button to show information about the patches. - $CreditsButton = CreateButton -X (DPISize 10) -Y (DPISize 25) -Width (DPISize 180) -Height (DPISize 35) -Text "Info / Credits" -Info ("Open the list with credits and info of all of patches involved and those who helped with the " + $ScriptName) - $CreditsButton.Add_Click({ $CreditsDialog.ShowDialog() | Out-Null }) - - # Create a button to show the global settings panel - $SettingsButton = CreateButton -X ($CreditsButton.Right + (DPISize 10)) -Y ($CreditsButton.Top) -Width ($CreditsButton.Width) -Height ($CreditsButton.Height) -Text "Settings" -Info "Open the global settings panel" - $SettingsButton.Add_Click({ $SettingsDialog.ShowDialog() | Out-Null }) - - # Create a button to close the dialog. - $global:ExitButton = CreateButton -X ($SettingsButton.Right + (DPISize 10)) -Y ($CreditsButton.Top) -Width ($CreditsButton.Width) -Height ($CreditsButton.Height) -Text "Exit" -Info ("Save all settings and close the " + $ScriptName) - $ExitButton.Add_Click({ $MainDialog.Close() }) - - - - ############## - # Misc Panel # - ############## + ################ + # Status Panel # + ################ $global:StatusPanel = CreatePanel -Width (DPISize 625) -Height (DPISize 30) $global:StatusGroup = CreateGroupBox -Width (DPISize 590) -Height (DPISize 30) @@ -350,7 +361,6 @@ function InitializeEvents() { $Settings["Core"][$this.Name] = $this.SelectedIndex if ($this.Text -ne $GameType.title -or $GameType.console -like "*All*") { ChangeGameMode - ChangeRevList SetVCPanel SetMainScreenSize } diff --git a/Files/Scripts/Options/Majora's Mask.psm1 b/Files/Scripts/Options/Majora's Mask.psm1 index 9c65da0f..c2e8ad14 100644 --- a/Files/Scripts/Options/Majora's Mask.psm1 +++ b/Files/Scripts/Options/Majora's Mask.psm1 @@ -2,10 +2,9 @@ function PatchOptions() { # ENHANCED 16:9 WIDESCREEN # - if (IsWidescreen) { ApplyPatch -Patch "Decompressed\widescreen.ppf" } - if ( (IsWidescreen) -or (IsWidescreen -Patched) ) { RemoveFile $Files.dmaTable } - if (IsWidescreen) { Add-Content $Files.dmaTable "0 1 2 3 4 5 6 7 -8 -9 15 16 17 18 19 20 -21 22 -24 25 26 27 28 29 30 -652 1127 -1540 -1541 -1542 -1543 -1544 -1545 -1546 -1547 -1548 -1549 -1550 -1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567" } - if (IsWidescreen -Patched) { Add-Content $Files.dmaTable "0 1 2 3 4 5 6 7 -8 -9 15 16 17 18 19 20 -21 22 -24 25 26 27 28 29 30 -652 1127 -1540 -1541 -1542 -1543 1544 1545 1546 1547 1548 1549 1550 -1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567" } + if ( (IsChecked $Redux.Graphics.Widescreen) -and !$Patches.Redux.Checked) { ApplyPatch -Patch "Decompressed\widescreen.ppf"; RemoveFile $Files.dmaTable } + if ( (IsChecked $Redux.Graphics.Widescreen) -and !$Patches.Redux.Checked) { Add-Content $Files.dmaTable "0 1 2 3 4 5 6 7 -8 -9 15 16 17 18 19 20 -21 22 -24 25 26 27 28 29 30 -652 1127 -1540 -1541 -1542 -1543 -1544 -1545 -1546 -1547 -1548 -1549 -1550 -1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567" } + if ( (IsChecked $Redux.Graphics.Widescreen) -and $Patches.Redux.Checked) { Add-Content $Files.dmaTable "0 1 2 3 4 5 6 7 -8 -9 15 16 17 18 19 20 -21 22 -24 25 26 27 28 29 30 -652 1127 -1540 -1541 -1542 -1543 1544 1545 1546 1547 1548 1549 1550 -1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567" } @@ -96,14 +95,13 @@ function ByteOptions() { if (IsChecked $Redux.Other.GohtCutscene) { ChangeBytes -Offset "F6DE89" -Values "8D 00 02 10 00 00 0A" } if (IsChecked $Redux.Other.MushroomBottle) { ChangeBytes -Offset "CD7C48" -Values "1E 6B" } if (IsChecked $Redux.Other.FairyFountain) { ChangeBytes -Offset "B9133E" -Values "01 0F" } - if (IsChecked $Redux.Other.HideCredits) { PatchBytes -Offset "B3B000" -Patch "Message\credits.bin" } if (IsChecked $Redux.Other.DebugItemSelect) { ExportAndPatch -Path "debug_item_select" -Offset "CA6370" -Length "1E0" } # GRAPHICS # - if (IsChecked $Redux.Graphics.Widescreen) { + if (IsChecked $Redux.Graphics.WidescreenAlt) { if ($IsWiiVC) { # 16:9 Widescreen ChangeBytes -Offset "BD5D74" -Values "3C 07 3F E3" ChangeBytes -Offset "CA58F5" -Values "6C 53 6C 84 9E B7 53 6C" -Interval 2 @@ -131,29 +129,29 @@ function ByteOptions() { # ChangeBytes -Offset "C55F14" -Values "" # B, C-Left, C-Down, C-Right Buttons } - if ($IsWiiVC -or $Settings.Debug.ChangeWidescreen -eq $True) { # 16:9 Textures - PatchBytes -Offset "A9A000" -Length "12C00" -Texture -Patch "Widescreen\carnival_of_time.bin" - PatchBytes -Offset "AACC00" -Length "12C00" -Texture -Patch "Widescreen\four_giants.bin" - PatchBytes -Offset "C74DD0" -Length "800" -Texture -Patch "Widescreen\lens_of_truth.bin" - } + PatchBytes -Offset "A9A000" -Length "12C00" -Texture -Patch "Widescreen\carnival_of_time.bin" + PatchBytes -Offset "AACC00" -Length "12C00" -Texture -Patch "Widescreen\four_giants.bin" + PatchBytes -Offset "C74DD0" -Length "800" -Texture -Patch "Widescreen\lens_of_truth.bin" } if (IsChecked $Redux.Graphics.ExtendedDraw) { ChangeBytes -Offset "B50874" -Values "00 00 00 00" } if (IsChecked $Redux.Graphics.BlackBars) { ChangeBytes -Offset "BF72A4" -Values "00 00 00 00" } if (IsChecked $Redux.Graphics.PixelatedStars) { ChangeBytes -Offset "B943FC" -Values "10 00" } - if (IsChecked $Redux.Graphics.MotionBlur) { ChangeBytes -Offset "BFB9A0" -Values "03 E0 00 08 00 00 00 00 00" } - if (IsChecked $Redux.Graphics.FlashbackOverlay) { ChangeBytes -Offset "BFEB8C" -Values "24 0F 00 00" } + if ( (IsChecked $Redux.Graphics.MotionBlur) -or (IsChecked $Redux.Graphics.Widescreen) ) { ChangeBytes -Offset "BFB9A0" -Values "03 E0 00 08 00 00 00 00 00" } + if ( (IsChecked $Redux.Graphics.FlashbackOverlay) -or (IsChecked $Redux.Graphics.Widescreen) ) { ChangeBytes -Offset "BFEB8C" -Values "24 0F 00 00" } # INTERFACE # - if (IsChecked $Redux.UI.HudTextures) { - PatchBytes -Offset "1EBDF60" -Texture -Patch "HUD\oot_button.bin" - PatchBytes -Offset "1EBD100" -Texture -Patch "HUD\oot_heart.bin" - } + if (IsChecked $Redux.UI.HudTextures) { PatchBytes -Offset "1EBD100" -Texture -Patch "HUD\oot_heart.bin" } + if ( (IsChecked $Redux.UI.HudTextures -Not) -and (IsIndex -Elem $Redux.UI.ButtonSize -Text "Small")) { PatchBytes -Offset "1EBDF60" -Texture -Patch "HUD\mm_button_small.bin" } + if ( (IsChecked $Redux.UI.HudTextures -Not) -and (IsIndex -Elem $Redux.UI.ButtonSize -Text "Full Size")) { PatchBytes -Offset "1EBDF60" -Texture -Patch "HUD\mm_button_full.bin" } + if ( (IsChecked $Redux.UI.HudTextures) -and (IsIndex -Elem $Redux.UI.ButtonSize -Text "Small")) { PatchBytes -Offset "1EBDF60" -Texture -Patch "HUD\oot_button_small.bin" } + if ( (IsChecked $Redux.UI.HudTextures) -and (IsIndex -Elem $Redux.UI.ButtonSize -Text "Normal")) { PatchBytes -Offset "1EBDF60" -Texture -Patch "HUD\oot_button.bin" } + if ( (IsChecked $Redux.UI.HudTextures) -and (IsIndex -Elem $Redux.UI.ButtonSize -Text "Full Size")) { PatchBytes -Offset "1EBDF60" -Texture -Patch "HUD\oot_button_full.bin" } - if (IsChecked $Redux.UI.ButtonPositions) { + <#if (IsChecked $Redux.UI.ButtonPositions) { ChangeBytes -Offset "BAF2E3" -Values "04" -Subtract # A Button - X position (BE -> BA, -04) ChangeBytes -Offset "BAF393" -Values "04" -Subtract # A Text - X position (BE -> BA, -04) @@ -162,11 +160,10 @@ function ByteOptions() { ChangeBytes -Offset "C55F15" -Values "07" -Subtract # B Button - X position (A7 -> A0, -07) ChangeBytes -Offset "C55F05" -Values "07 00 07" -Subtract # B Text - X position (9B -> 94, -07) - } + }#> if (IsChecked $Redux.UI.CenterTatlPrompt) { - if ( (IsWidescreen) -or (IsWidescreen -Patched) ) { - + if (IsChecked $Redux.Graphics.Widescreen) { foreach ($i in 0..($GamePatch.Languages.Length-1)) { if (IsChecked $Redux.Language[$i]) { if ($Redux.Language[$i].label -eq "English" -and (IsChecked $Redux.Script.RenameTatl) ) { $Taya = $True } @@ -222,19 +219,14 @@ function ByteOptions() { ChangeBytes -Offset "BA6028" -Values "00 00 00 00"; ChangeBytes -Offset "BA6520" -Values "00 00 00 00"; ChangeBytes -Offset "BB788C" -Values "00 00 00 00" } - if (IsChecked $Redux.Hide.AreaTitle) { # Disable Area Title Cards - ChangeBytes -Offset "B80A64" -Values "10 00 01 9E"; ChangeBytes -Offset "B842C0" -Values "10 00 00 04" - } - if (IsChecked $Redux.Hide.Clock) { # Clock - ChangeBytes -Offset "BAFD5C" -Values "00 00 00 00"; ChangeBytes -Offset "BAFC48" -Values "00 00 00 00"; ChangeBytes -Offset "BAFDA8" -Values "00 00 00 00"; ChangeBytes -Offset "BAFD00" -Values "00 00 00 00" - ChangeBytes -Offset "BAFD98" -Values "00 00 00 00"; ChangeBytes -Offset "C5606D" -Values "00" + ChangeBytes -Offset "BAFD5C" -Values "00 00 00 00"; ChangeBytes -Offset "BAFC48" -Values "00 00 00 00"; ChangeBytes -Offset "BAFDA8" -Values "00 00 00 00" + ChangeBytes -Offset "BAFD00" -Values "00 00 00 00"; ChangeBytes -Offset "BAFD98" -Values "00 00 00 00"; ChangeBytes -Offset "C5606D" -Values "00" } - if (IsChecked $Redux.Hide.CountdownTimer) { - ChangeBytes -Offset "BB169A" -Values "01 FF" # Disable Countdown timer background - ChangeBytes -Offset "C56180" -Values "01 FF 01 FF 01 FF 01 FF 01 FF 01 FF 01 FF 01 FF" # Disable Countdown timer - } + if (IsChecked $Redux.Hide.CountdownTimer) { ChangeBytes -Offset "BB169A" -Values "01 FF"; ChangeBytes -Offset "C56180" -Values "01 FF 01 FF 01 FF 01 FF 01 FF 01 FF 01 FF 01 FF" } # Disable Countdown timer background / Disable Countdown timer + if (IsChecked $Redux.Hide.AreaTitle) { ChangeBytes -Offset "B80A64" -Values "10 00 01 9E"; ChangeBytes -Offset "B842C0" -Values "10 00 00 04" } # Disable Area Title Cards + if (IsChecked $Redux.Hide.Credits) { PatchBytes -Offset "B3B000" -Patch "Message\credits.bin" } @@ -258,9 +250,19 @@ function ByteOptions() { if (TestFile ($GameFiles.binaries + "\" + $file)) { PatchBytes -Offset "1BA2E0" -Patch ($file) } - # FILE SELECT # - if (IsText -Elem $Redux.FileSelect.Music -Compare "File Select" -Not) { ChangeBytes -Offset "C8E2AB" -Values (GetMMMusicID -Music $Redux.FileSelect.Music.Text) } + # MUSIC # + + MuteMusic -SequenceTable "C77B80" -Sequence "46AF0" -Length 127 + + if (IsText -Elem $Redux.Music.FileSelect -Compare "File Select" -Not) { + foreach ($track in $Files.json.music) { + if ($Redux.Music.FileSelect.Text -eq $track.title) { + ChangeBytes -Offset "C8E2AB" -Values $track.id + break + } + } + } @@ -634,7 +636,7 @@ function ByteReduxOptions() { # D-PAD # - if ( (IsChecked $Redux.DPad.Hide) -or (IsChecked $Redux.DPad.LayoutLeft) -or (IsChecked $Redux.DPad.LayoutRight) -or (IsWidescreen -Patched) ) { + if ( (IsChecked $Redux.DPad.Hide) -or (IsChecked $Redux.DPad.LayoutLeft) -or (IsChecked $Redux.DPad.LayoutRight) -or ( (IsChecked $Redux.Graphics.Widescreen) -and $Patches.Redux.Checked) ) { $Array = @() $Array += GetMMItemID -Item $Redux.DPad.Up.Text $Array += GetMMItemID -Item $Redux.DPad.Right.Text @@ -843,13 +845,14 @@ function ByteLanguageOptions() { function CreateOptions() { if ($Settings.Debug.LiteGUI -eq $False) { - CreateOptionsDialog -Width 1060 -Height 560 -Tabs @("Main", "Audiovisual", "Difficulty", "Colors", "Equipment", "Speedup") + CreateOptionsDialog -Width 1060 -Height 530 -Tabs @("Main", "Graphics", "Audio", "Difficulty", "Colors", "Equipment", "Speedup") } else { - CreateOptionsDialog -Width 1060 -Height 450 -Tabs @("Main", "Audiovisual", "Difficulty", "Speedup") + CreateOptionsDialog -Width 1060 -Height 450 -Tabs @("Main", "Graphics", "Audio", "Difficulty", "Speedup") } - if (!$IsWiiVC) { $Redux.Graphics.Widescreen.Add_CheckStateChanged({ AdjustGUI }) } + $Redux.Graphics.Widescreen.Add_CheckStateChanged( { AdjustGUI } ) + $Redux.Graphics.WidescreenAlt.Add_CheckStateChanged( { AdjustGUI } ) } @@ -858,16 +861,19 @@ function CreateOptions() { #============================================================================================================================================================================================== function AdjustGUI() { - if ($IsWiiVC -or $Settings.Debug.LiteGUI -eq $True) { return } + EnableElem $Redux.Graphics.Widescreen -Active (!$Redux.Graphics.WidescreenAlt.Checked -and !$ISwiiVC) + EnableElem $Redux.Graphics.WidescreenAlt -Active (!$Redux.Graphics.Widescreen.Checked) - EnableElem -Elem @($Redux.Colors.Magic, $Redux.Colors.BaseMagic, $Redux.Colors.InfiniteMagic) -Active (!(IsWidescreen -Patched)) - EnableElem -Elem @($Redux.DPad.Disable, $Redux.DPad.Hide, $Redux.DPad.LayoutLeft, $Redux.DPad.LayoutRight) -Active (!(IsWidescreen -Patched)) + if ($Redux.Graphics.Widescreen.Enabled -eq $False -and $Redux.Graphics.WidescreenAlt.Enabled -eq $False) { EnableElem $Redux.Graphics.WidescreenAlt -Active $True } + if (!$Redux.Graphics.Widescreen.Enabled) { $Redux.Graphics.Widescreen.Checked = $False } + if (!$Redux.Graphics.WidescreenAlt.Enabled) { $Redux.Graphics.WidescreenAlt.Checked = $False } + + EnableElem -Elem @($Redux.Colors.Magic, $Redux.Colors.BaseMagic, $Redux.Colors.InfiniteMagic) -Active (!( (IsChecked $Redux.Graphics.Widescreen) -and $Patches.Redux.Checked)) + EnableElem -Elem @($Redux.DPad.Disable, $Redux.DPad.Hide, $Redux.DPad.LayoutLeft, $Redux.DPad.LayoutRight) -Active (!( (IsChecked $Redux.Graphics.Widescreen) -and $Patches.Redux.Checked)) + EnableElem -Elem @($Redux.Graphics.MotionBlur, $Redux.Graphics.FlashbackOverlay) -Active (!(IsChecked $Redux.Graphics.Widescreen)) - if (IsWidescreen -Patched) { - EnableElem -Elem @($Redux.DPad.Up, $Redux.DPad.Left, $Redux.DPad.Right, $Redux.DPad.Down) -Active $True - $Redux.Graphics.MotionBlur.Checked = $Redux.Graphics.FlashbackOverlay.Checked = $True - } - elseif ($Redux.Dpad.Disable.Checked) { EnableElem -Elem @($Redux.DPad.Up, $Redux.DPad.Left, $Redux.DPad.Right, $Redux.DPad.Down) -Active $False } + if ( (IsChecked $Redux.Graphics.Widescreen) -and $Patches.Redux.Checked) { EnableElem -Elem @($Redux.DPad.Up, $Redux.DPad.Left, $Redux.DPad.Right, $Redux.DPad.Down) -Active $True } + elseif ($Redux.Dpad.Disable.Checked) { EnableElem -Elem @($Redux.DPad.Up, $Redux.DPad.Left, $Redux.DPad.Right, $Redux.DPad.Down) -Active $False } } @@ -878,6 +884,7 @@ function AdjustGUI() { function CreateTabMain() { # GAMEPLAY # + CreateReduxGroup -Tag "Gameplay" -Text "Gameplay" CreateReduxCheckBox -Name "ZoraPhysics" -Text "Zora Physics" -Info "Change the Zora physics when using the boomerang`nZora Link will take a step forward instead of staying on his spot" -Credits "ShadowOne333" CreateReduxCheckBox -Name "DistantZTargeting" -Text "Distant Z-Targeting" -Info "Allow to use Z-Targeting on enemies, objects and NPC's from any distance" -Credits "Admentus" @@ -885,7 +892,10 @@ function CreateTabMain() { CreateReduxCheckBox -Name "FrontflipAttack" -Text "Frontflip Jump Attack" -Info "Restores the Frontflip Jump Attack animation from the Beta" -Credits "SoulofDeity" CreateReduxCheckBox -Name "FrontflipJump" -Text "Force Frontflip Jump" -Info "Link will always use the frontflip animation when jumping" -Credits "SoulofDeity" + + # RESTORE # + CreateReduxGroup -Tag "Restore" -Text "Restore / Correct" CreateReduxCheckBox -Name "RupeeColors" -Text "Correct Rupee Colors" -Info "Corrects the colors for the Purple (50) and Golden (200) Rupees" -Credits "GhostlyDark" CreateReduxCheckBox -Name "CowNoseRing" -Text "Restore Cow Nose Ring" -Info "Restore the rings in the noses for Cows as seen in the Japanese release" -Credits "ShadowOne333" @@ -896,7 +906,10 @@ function CreateTabMain() { CreateReduxCheckBox -Name "PieceOfHeartSound" -Text "4th Piece of Heart Sound" -Info "Restore the sound effect when collecting the fourth Piece of Heart that grants Link a new Heart Container" -Credits "ShadowOne333" CreateReduxCheckBox -Name "MoveBomberKid" -Text "Move Bomber Kid" -Info "Moves the Bomber at the top of the Stock Pot Inn to be behind the bell like in the original Japanese ROM" -Credits "ShadowOne333" + + # OTHER # + CreateReduxGroup -Tag "Other" -Text "Other" CreateReduxCheckBox -Name "PictoboxDelayFix" -Text "Pictograph Box Delay Fix" -Info "Photos are taken instantly with the Pictograph Box by removing the Anti-Aliasing" -Checked -Credits "Ported from Rando" CreateReduxCheckBox -Name "GohtCutscene" -Text "Fix Goht Cutscene" -Info "Fix Goht's awakening cutscene so that Link no longer gets run over" -Credits "ShadowOne333" @@ -904,9 +917,6 @@ function CreateTabMain() { CreateReduxCheckBox -Name "SouthernSwamp" -Text "Fix Southern Swamp" -Info "Fix a misplaced door after Woodfall has been cleared and you return to the Potion Shop`nThe door is slightly pushed forward after Odolwa has been defeated" -Credits "ShadowOne333" CreateReduxCheckBox -Name "FairyFountain" -Text "Fix Fairy Fountain" -Info "Fix the Ikana Canyon Fairy Fountain area not displaying the correct color" -Credits "Dybbles (fix) & ShadowOne333 (patch)" CreateReduxCheckBox -Name "AlwaysBestEnding" -Text "Always Best Ending" -Info "The credits sequence always includes the best ending, regardless of actual ingame progression" -Credits "Marcelo20XX" - if ($Settings.Debug.LiteGUI -eq $False) { - CreateReduxCheckBox -Name "HideCredits" -Text "Hide Credits" -Info "Do not show the credits text during the credits sequence" -Credits "Admentus" - } CreateReduxCheckBox -Name "DebugMapSelect" -Text "Debug Map Select" -Info "Translates the Debug Map Select menu into English" -Credits "GhostlyDark" CreateReduxCheckBox -Name "DebugItemSelect" -Text "Debug Item Select" -Info "Translates the Debug Inventory Select menu into English" -Credits "GhostlyDark" @@ -918,6 +928,7 @@ function CreateTabMain() { function CreateTabRedux() { # D-PAD ICONS LAYOUT # + CreateReduxGroup -Tag "DPad" -Text "D-Pad Layout" -Height 6 -Columns 4 CreateReduxPanel -Columns 0.8 -Rows 4.1 CreateReduxRadioButton -Name "Disable" -SaveTo "Layout" -Column 1 -Row 1 -Text "Disable" -Info "Completely disable the D-Pad" -Credits "Ported from Redux" @@ -931,7 +942,10 @@ function CreateTabRedux() { CreateReduxComboBox -Name "Down" -Column 2.8 -Row 6 -Length 160 -Items $Items -Default "Ocarina of Time" -Info "Set the quick slot item for the D-Pad Down button" -Credits "Ported from Redux" $Redux.DPad.Reset = CreateReduxButton -Column 1 -Row 5 -Height 30 -Text "Reset Layout" -Info "Reset the layout for the D-Pad" + + # D-Pad Buttons Customization - Image # + $PictureBox = New-Object Windows.Forms.PictureBox $PictureBox.Location = New-object System.Drawing.Size( ($Redux.DPad.Left.Right + 30), $Redux.DPad.Up.Bottom) SetBitmap -Path ($Paths.Main + "\D-Pad.png") -Box $PictureBox @@ -943,12 +957,17 @@ function CreateTabRedux() { $Redux.DPad.Disable.Add_CheckedChanged({ EnableElem -Elem @($Redux.DPad.Up, $Redux.DPad.Left, $Redux.DPad.Right, $Redux.DPad.Down, $Redux.DPad.Reset) -Active (!$Redux.DPad.Disable.Checked) }) $Redux.DPad.Reset.Add_Click({ $Redux.DPad.Up.SelectedIndex = 2; $Redux.DPad.Left.SelectedIndex = 3; $Redux.DPad.Right.SelectedIndex = 4; $Redux.DPad.Down.SelectedIndex = 1 }) + + # GAMEPLAY # + CreateReduxGroup -Tag "Gameplay" -Text "Gameplay" CreateReduxCheckBox -Name "FasterBlockPushing" -Checked -Text "Faster Block Pushing" -Info "All blocks are pushed faster" -Credits "Ported from Redux" - # CreateReduxCheckBox -Name "EasierMinigames" -Text "Easier Minigames" -Info "Certain minigames are made easier and faster`n- Dampe's Digging Game always has two Ghost Flames on the ground and one up the ladder`n- The Gold Dog always wins the Doggy Racetrack race if you have the Mask of Truth`n- Only one fish has to be feeded in the Marine Research Lab" -Credits "Ported from Rando" - + + + # BUTTON COLORS # + CreateButtonColorOptions -Default 2 } @@ -960,12 +979,18 @@ function CreateTabLanguage() { CreateLanguageContent - # ENGLISH TEXT OPTIONS # + + + # ENGLISH TEXT OPTIONS # + $Redux.Box.Text = CreateReduxGroup -Tag "Text" -Text "English Text Options" CreateReduxCheckBox -Name "Restore" -Text "Restore Text" -Info "Restores and fixes the following:`n- Restore the area titles cards for those that do not have any`n- Sound effects that do not play during dialogue`n- Grammar and typo fixes" -Credits "Redux" CreateReduxCheckBox -Name "OcarinaIcons" -Text "Ocarina Icons (WIP)" -Info "Restore the Ocarina Icons with their text when transformed like in the N64 Beta or 3DS version (Work-In-Progress)`nRequires the Restore Text option" -Credits "ShadowOne333" - # OTHER TEXT OPTIONS # + + + # OTHER TEXT OPTIONS # + $Redux.Box.Text = CreateReduxGroup -Tag "Script" -Text "Other Text Options" CreateReduxCheckBox -Name "RenameTatl" -Text "Rename Tatl" -Info "Rename Tatl to Taya (English) or Taya to Tatl (German, French or Spanish)" -Credits "Admentus & GhostlyDark" CreateReduxCheckBox -Name "Comma" -Text "Better Comma" -Info "Make the comma not look as awful" -Credits "ShadowOne333" @@ -992,25 +1017,19 @@ function UnlockLanguageContent() { #============================================================================================================================================================================================== -function CreateTabAudiovisual() { +function CreateTabGraphics() { # GRAPHICS # - CreateReduxGroup -Tag "Graphics" -Text "Graphics" + CreateReduxGroup -Tag "Graphics" -Text "Graphics" - if ($IsWiiVC) { - $Info = "Native 16:9 Widescreen Display support with backgrounds and textures adjusted for widescreen" - $Credits = "`nAspect Ratio Fix by Admentus`n16:9 backgrounds by GhostlyDark & ShadowOne333" - } - else { - $Info = "Advanced native 16:9 Widescreen Display support with backgrounds and textures adjusted for widescreen" - $Info += "`n`n--- KNOWN ISSUES ---`n" - $Info += "- Notebook screen stretched" - $Info += "`n`n--- CHANGE WIDESCREEN ---`n" - $Info += "Adjust the backgrounds and textures to fit in with 16:9 Widescreen`nUse GLideN64 " + '"adjust to fit"' + " option for 16:9 widescreen" - $Credits = "`nAspect Ratio Fix by Admentus`n16:9 backgrounds by GhostlyDark & ShadowOne333`nWidescreen Patch by gamemasterplc and corrected by GhostlyDark" - } - - CreateReduxCheckBox -Name "Widescreen" -Text "16:9 Widescreen" -Info $Info -Credits $Credits + $Info = "Patch the game to be in true 16:9 widescreen with the HUD pushed to the edges." + $Info += "`n`nKnown Issues:" + $Info += "`n- Notebook screen stretched" + $Info += "`n- Text corruption if combined with Redux during and after cutscenes with blur/sepia effect (disabled by default)" + $Info += "`n- D-Pad icons causing issues if combined with Redux (force hidden)" + + CreateReduxCheckBox -Name "Widescreen" -Text "16:9 Widescreen" -Info $Info -Credits "Granny Story images by Nerrel, Widescreen Patch by gamemasterplc, enhanced and ported by GhostlyDark" + CreateReduxCheckBox -Name "WidescreenAlt" -Text "16:9 Widescreen (Alt)" -Info "Apply 16:9 Widescreen adjusted backgrounds and textures (as well as 16:9 Widescreen for the Wii VC)" -Credits "Aspect Ratio Fix by Admentus`n16:9 backgrounds by GhostlyDark & ShadowOne333" CreateReduxCheckBox -Name "BlackBars" -Text "No Black Bars" -Info "Removes the black bars shown on the top and bottom of the screen during Z-targeting and cutscenes" -Credits "Admentus" CreateReduxCheckBox -Name "ExtendedDraw" -Text "Extended Draw Distance" -Info "Increases the game's draw distance for objects`nDoes not work on all objects" -Credits "Admentus" CreateReduxCheckBox -Name "ImprovedLinkModel" -Text "Improved Link Model" -Info "Improves the model used for Hylian Link`nCustom tunic colors are not supported with this option" -Credits "Skilarbabcock (www.youtube.com/user/skilarbabcock) & Nerrel" @@ -1024,15 +1043,18 @@ function CreateTabAudiovisual() { CreateReduxCheckBox -Name "MotionBlur" -Text "Disable Motion Blur" -Info ("Completely Disable the use of motion blur in-game" + $info) -Credits "GhostlyDark" CreateReduxCheckBox -Name "FlashbackOverlay" -Text "Disable Flashback Overlay" -Info ("Disables the overlay shown during Princess Zelda flashback scene" + $info) -Credits "GhostlyDark" + + # INTERFACE # CreateReduxGroup -Tag "UI" -Text "Interface" CreateReduxCheckBox -Name "HudTextures" -Text "OoT HUD Textures" -Info "Replaces the HUD textures with those from Ocarina of Time" -Credits "Ported by GhostlyDark" - # CreateReduxCheckBox -Name "ButtonPositions" -Text "OoT Button Positions" -Info "Positions the A and B buttons like in Ocarina of Time" -Credits "Ported by GhostlyDark" CreateReduxCheckBox -Name "CenterTatlPrompt" -Text "Center Tatl Prompt" -Info 'Centers the "Tatl" prompt shown in the C-Up button' -Credits "Ported by GhostlyDark" CreateReduxCheckBox -Name "GCScheme" -Text "GC Scheme" -Info "Replace the textures to match the GameCube's scheme" -Credits "Admentus & GhostlyDark" + CreateReduxComboBox -Name "ButtonSize" -Column 5 -Text "HUD Size" -Items @("Small", "Normal", "Full Size") -Default "Normal" -Info "Set the size of the A, B, C and Start buttons" -Credits "Admentus & GhostlyDark" + - # HIDE # + # HIDE HUD # CreateReduxGroup -Tag "Hide" -Text "Hide HUD" CreateReduxCheckBox -Name "AButton" -Text "Hide A Button" -Info "Hide the A Button" -Credits "Marcelo20XX" CreateReduxCheckBox -Name "BButton" -Text "Hide B Button" -Info "Hide the B Button" -Credits "Marcelo20XX" @@ -1042,13 +1064,24 @@ function CreateTabAudiovisual() { CreateReduxCheckBox -Name "AreaTitle" -Text "Hide Area Title Card" -Info "Hide the area title that displays when entering a new area" -Credits "Marcelo20XX" CreateReduxCheckBox -Name "Clock" -Text "Hide Clock" -Info "Hide the Clock display" -Credits "Marcelo20XX" CreateReduxCheckBox -Name "CountdownTimer" -Text "Hide Countdown Timer" -Info "Hide the countdown timer that displays during the final hours before the Moon will hit Termina" -Credits "Marcelo20XX" + + if ($Settings.Debug.LiteGUI -eq $True) { return } + + CreateReduxCheckBox -Name "Credits" -Text "Hide Credits" -Info "Do not show the credits text during the credits sequence" -Credits "Admentus" + +} + + - if ($Settings.Debug.LiteGUI -ne $True) { +#============================================================================================================================================================================================== +function CreateTabAudio() { + + # SOUNDS / VOICES / SFX SOUND EFFECTS # - # SOUNDS / VOICES / SFX SOUND EFFECTS - CreateReduxGroup -Tag "Sounds" -Text "Sounds / VOICES / SFX Sound Effects" -Height 3 + CreateReduxGroup -Tag "Sounds" -Text "Sounds / Voices / SFX Sound Effects" -Height 3 CreateReduxComboBox -Name "LowHP" -Column 5 -Row 1 -Text "Low HP SFX" -Items @("Default", "Disabled", "Soft Beep") -Info "Set the sound effect for the low HP beeping" -Credits "Ported from Rando" CreateReduxCheckBox -Name "DisableSFXEffect" -Column 5 -Row 2 -Text "Disable SFX Effects" -Info "Remove the SFX Sound Effects for collecting rupees and solving puzzles" -Credits "Marcelo20XX" + $SFX = @("Ocarina", "Deku Pipes", "Goron Drums", "Zora Guitar", "Female Voice", "Bell", "Cathedral Bell", "Piano", "Soft Harp", "Harp", "Accordion", "Bass Guitar", "Flute", "Whistling Flute", "Gong", "Elder Goron Drums", "Choir", "Arguing", "Tatl", "Giants Singing", "Ikana King", "Frog Croak", "Beaver", "Eagle Seagull", "Dodongo") CreateReduxComboBox -Name "InstrumentHylian" -Column 1 -Row 1 -Text "Instrument (Hylian)" -Default 1 -Shift 30 -Length 200 -Items $SFX -Info "Replace the sound used for playing the Ocarina of Time in Hylian Form" -Credits "Ported from Rando" @@ -1059,14 +1092,27 @@ function CreateTabAudiovisual() { CreateReduxComboBox -Name "ChildVoices" -Column 1 -Row 3 -Text "Child Voice" -Shift 30 -Length 200 -Items @("Original") -FilePath ($GameFiles.binaries + "\Voices Child") -Default "Original" -Info "Replace the voice used for the Child Link Model" -Credits "`nOcarina of Time: Phantom Natsu" CreateReduxComboBox -Name "FierceDeityVoices" -Column 3 -Row 3 -Text "Fierce Deity Voice" -Shift 30 -Length 200 -Items @("Original") -FilePath ($GameFiles.binaries + "\Voices Fierce Deity") -Default "Original" -Info "Replace the voice used for the Fierce Deity Link Model" -Credits "`nOcarina of Time: Phantom Natsu" - } - # FILE SELECT # - CreateReduxGroup -Tag "FileSelect" -Text "File Select" - $Music = @("None", "File Select", "Clock Town Day 1", "Clock Town Day 2", "Clock Town Day 3", "Clock Town Cavern", "Astral Observatory", "Milk Bar Latte", "Shop", "House", "Final Hours", "The Four Giants", "Song of Healing", "Southern Swamp", "Woods of Mystery", "Court of the Deku King", "Mountain Village", "Goron Village", - "Great Bay Coast", "Zora Hall", "Pirate's Fortress", "Ikana Valley", "Music Box House", "Ikana Castle", "Romani Ranch" , "Woodfall Temple", "Snowhead Temple", "Great Bay Temple", "Stone Tower Temple", "Stone Tower Temple Inverted", "Battle", "Mini-Boss Battle", "Boss Battle", "Majora's Mask Battle", - "Majora's Incarnation Battle", "Majora's Wrath Battle", "Bass Practice", "Drums Practice", "Piano Practice", "The End/Credits I", "The End/Credits II") - CreateReduxComboBox -Name "Music" -Column 1 -Text "Music" -Shift 30 -Length 200 -Default 2 -Items $Music -Info "Set the skybox music theme for the File Select menu" -Credits "Admentus" + + # MUSIC # + + $tracks = @() + foreach ($track in $Files.json.music) { $tracks += $track.title } + + CreateReduxGroup -Tag "Music" -Text "Mute Music Tracks" -Columns 1.97 -Height 6 + CreateReduxListBox -Name "SelectMuteTracks" -Items $tracks + + CreateReduxGroup -Tag "Music" -Text "Music" + CreateReduxComboBox -Name "FileSelect"-Text "File Select" -Default "File Select" -Shift 30 -Length 200 -Items $tracks -Info "Set the skybox music theme for the File Select menu" -Credits "Admentus" + + CreateReduxPanel -X 25 -Row 1 + CreateReduxRadioButton -Name "EnableAll" -Column 1 -Max 4 -SaveTo "Mute" -Checked -Text "Enable All Music" -Info "Keep the music as it is" -Credits "Admentus" + CreateReduxRadioButton -Name "MuteSelected" -Column 2 -Max 4 -SaveTo "Mute" -Text "Mute Selected Music" -Info "Mute the selected music from the list in the game" -Credits "Admentus" + CreateReduxRadioButton -Name "MuteAreaOnly" -Column 3 -Max 4 -SaveTo "Mute" -Text "Mute Area Music Only" -Info "Mute only the area music in the game" -Credits "Admentus" + CreateReduxRadioButton -Name "MuteAll" -Column 4 -Max 4 -SaveTo "Mute" -Text "Mute All Music" -Info "Mute all the music in the game" -Credits "Admentus" + + EnableForm -Form $Redux.Music.SelectMuteTracks -Enable $Redux.Music.MuteSelected.Checked + $Redux.Music.MuteSelected.Add_CheckedChanged({ EnableForm -Form $Redux.Music.SelectMuteTracks -Enable $this.Checked }) } @@ -1076,6 +1122,7 @@ function CreateTabAudiovisual() { function CreateTabDifficulty() { # HERO MODE # + CreateReduxGroup -Tag "Hero" -Text "Hero Mode" CreateReduxComboBox -Name "Damage" -Column 1 -Row 1 -Shift 10 -Text "Damage" -Items @("1x Damage", "2x Damage", "4x Damage", "8x Damage", "OHKO Mode") -Info "Set the amount of damage you receive`nOHKO Mode = You die in one hit" -Credits "Admentus" CreateReduxComboBox -Name "Recovery" -Column 3 -Row 1 -Shift 10 -Text "Recovery" -Items @("1x Recovery", "1/2x Recovery", "1/4x Recovery", "0x Recovery") -Info "Set the amount health you recovery from Recovery Hearts" -Credits "Admentus" @@ -1095,7 +1142,10 @@ function CreateTabDifficulty() { CreateReduxCheckBox -Name "PalaceRoute" -Column 2 -Row 4 -Text "Restore Palace Route" -Info "Restore the route to the Bean Seller within the Deku Palace as seen in the Japanese release" -Credits "ShadowOne" CreateReduxCheckBox -Name "DeathIsMoonCrash" -Column 3 -Row 4 -Text "Death is Moon Crash" -Info "If you die, the moon will crash`nThere are no continues anymore" -Credits "Ported from Rando" + + # EASY MODE # + CreateReduxGroup -Tag "EasyMode" -Text "Easy Mode" CreateReduxCheckbox -Name "NoBlueBubbleRespawn" -Text "No Blue Bubble Respawn" -Info "Removes the respawn of the Blue Bubble monsters (until you re-enter the room)" -Credits "Garo-Mastah" @@ -1107,6 +1157,7 @@ function CreateTabDifficulty() { function CreateTabColors() { # TUNIC COLORS # + CreateReduxGroup -Tag "Colors" -Text "Tunic Colors" -Columns 5 $Colors = @("Kokiri Green", "Goron Red", "Zora Blue", "Black", "White", "Azure Blue", "Vivid Cyan", "Light Red", "Fuchsia", "Purple", "Majora Purple", "Twitch Purple", "Persian Rose", "Dirty Yellow", "Blush Pink", "Hot Pink", "Rose Pink", "Orange", "Gray", "Gold", "Silver", "Beige", "Teal", "Blood Red", "Blood Orange", "Royal Blue", "Sonic Blue", "NES Green", "Dark Green", "Lumen", "Randomized", "Custom") CreateReduxComboBox -Name "KokiriTunic" -Column 1 -Text "Kokiri Tunic Color" -Length 230 -Shift 70 -Items $Colors -Info ("Select a color scheme for the Kokiri Tunic`n" + '"Randomized" fully randomizes the colors each time the patcher is opened') -Credits "Ported from Rando" @@ -1121,13 +1172,17 @@ function CreateTabColors() { $Redux.Graphics.ImprovedLinkModel.Add_CheckedChanged({ EnableElem -Elem @($Redux.Colors.KokiriTunic, $Redux.Colors.KokiriTunicButton) -Active (!$this.checked) }) EnableElem -Elem @($Redux.Colors.KokiriTunic, $Redux.Colors.KokiriTunicButton) -Active (!$Redux.Graphics.ImprovedLinkModel.Checked) + + # MISC COLORS # + CreateReduxGroup -Tag "Colors" -Text "Misc Colors" CreateReduxCheckBox -Name "RedIce" -Text "Red Ice" -Info "Recolors the ice blocks which can be unfrozen from blue to red" -Credits "Garo-Mastah" # FORM COLORS # + CreateReduxGroup -Tag "Colors" -Text "Mask Form Colors" CreateReduxComboBox -Name "DekuLink" -Column 1 -Text "Deku Link Color" -Length 170 -Shift 30 -Items @("Green") -FilePath ($GameFiles.Textures + "\Color - Deku Link") -Info "Select a color scheme for Deku Link" -Credits "Admentus, ShadowOne333 & Garo-Mastah" CreateReduxComboBox -Name "GoronLink" -Column 3 -Text "Goron Link Color" -Length 170 -Shift 30 -Items @("Green") -FilePath ($GameFiles.Textures + "\Color - Goron Link") -Info "Select a color scheme for Goron Link" -Credits "Admentus, ShadowOne333 & Garo-Mastah" @@ -1148,16 +1203,19 @@ function CreateTabColors() { # SPIN ATTACK COLORS # + CreateSpinAttackColorOptions # FAIRY COLORS # + CreateFairyColorOptions # HUD COLORS # + CreateReduxGroup -Tag "Colors" -Text "HUD Colors" -IsRedux -Height 2 CreateReduxComboBox -Name "Hearts" -Column 1 -Text "Hearts Colors" -Length 185 -Shift 35 -Items @("Red", "Green", "Blue", "Yellow", "Randomized", "Custom") -Info ("Select a preset for the hearts colors`n" + '"Randomized" fully randomizes the colors each time the patcher is opened') CreateReduxComboBox -Name "Magic" -Column 3 -Text "Magic Colors" -Length 185 -Shift 35 -Items @("Green", "Red", "Blue", "Purple", "Pink", "Yellow", "White", "Randomized", "Custom") -Info ("Select a preset for the magic colors`n" + '"Randomized" fully randomizes the colors each time the patcher is opened') @@ -1222,17 +1280,24 @@ function CreateTabColors() { function CreateTabEquipment() { # CAPACITY SELECTION # + CreateReduxGroup -Tag "Capacity" -Text "Capacity Selection" -Columns 3 CreateReduxCheckBox -Name "EnableAmmo" -Text "Change Ammo Capacity" -Info "Enable changing the capacity values for ammo" CreateReduxCheckBox -Name "EnableWallet" -Text "Change Wallet Capacity" -Info "Enable changing the capacity values for the wallets" + + # GAMEPLAY # + CreateReduxGroup -Tag "Gameplay" -Text "Gameplay" - CreateReduxCheckBox -Name "UnsheathSword" -Text "Unsheath Sword" -Info "The sword is unsheathed first before immediately swinging it" -Credits "Admentus" - CreateReduxCheckBox -Name "SwordBeamAttack" -Text "Sword Beam Attack" -Info "Charging the Spin Attack will launch a Sword Beam Attack instead`nYou can still execute the Quick Spin Attack" -Credits "Admentus (ROM hack) & CloudModding (GameShark)" - CreateReduxCheckBox -Name "FixEponaSword" -Text "Fix Epona Sword" -Info "Change Epona's B button behaviour to prevent you from losing your sword if you don't have the Hero's Bow" -Credits "Ported from Rando" + CreateReduxCheckBox -Name "UnsheathSword" -Text "Unsheath Sword" -Info "The sword is unsheathed first before immediately swinging it" -Credits "Admentus" + CreateReduxCheckBox -Name "SwordBeamAttack" -Text "Sword Beam Attack" -Info "Replaces the Spin Attack with the Sword Beam Attack`nYou can still perform the Quick Spin Attack" -Credits "Admentus (ROM hack) & CloudModding (GameShark)" + CreateReduxCheckBox -Name "FixEponaSword" -Text "Fix Epona Sword" -Info "Change Epona's B button behaviour to prevent you from losing your sword if you don't have the Hero's Bow" -Credits "Ported from Rando" + + # HITBOX # + CreateReduxGroup -Tag "Equipment" -Text "Sliders" -Height 2.7 CreateReduxSlider -Name "KokiriSword" -Column 1 -Row 1 -Default 3000 -Min 512 -Max 8192 -Freq 512 -Small 256 -Large 512 -Text "Kokiri Sword" -Info "Set the length of the hitbox of the Kokiri Sword" -Credits "Aria Hiroshi 64" CreateReduxSlider -Name "RazorSword" -Column 3 -Row 1 -Default 3000 -Min 512 -Max 8192 -Freq 512 -Small 256 -Large 512 -Text "Razor Sword" -Info "Set the length of the hitbox of the Razor Sword" -Credits "Aria Hiroshi 64" @@ -1240,7 +1305,10 @@ function CreateTabEquipment() { CreateReduxSlider -Name "GreatFairysSword" -Column 1 -Row 2 -Default 5500 -Min 512 -Max 8192 -Freq 512 -Small 256 -Large 512 -Text "Great Fairy's Sword" -Info "Set the length of the hitbox of the Great Fairy's Sword Knife" -Credits "Aria Hiroshi 64" CreateReduxSlider -Name "BlastMask" -Column 3 -Row 2 -Default 310 -Min 1 -Max 1024 -Freq 64 -Small 32 -Large 64 -Text "Blast Mask" -Info "Set the cooldown duration of the Blast Mask" -Credits "Ported from Rando" + + # AMMO # + $Redux.Box.Ammo = CreateReduxGroup -Tag "Capacity" -Text "Ammo Capacity Selection" CreateReduxTextBox -Name "Quiver1" -Text "Quiver (1)" -Value 30 -Info "Set the capacity for the Quiver (Base)" -Credits "GhostlyDark" CreateReduxTextBox -Name "Quiver2" -Text "Quiver (2)" -Value 40 -Info "Set the capacity for the Quiver (Upgrade 1)" -Credits "GhostlyDark" @@ -1251,14 +1319,20 @@ function CreateTabEquipment() { CreateReduxTextBox -Name "DekuSticks1" -Text "Deku Sticks (1)" -Value 10 -Info "Set the capacity for the Deku Sticks (Base)" -Credits "GhostlyDark" CreateReduxTextBox -Name "DekuNuts1" -Text "Deku Nuts (1)" -Value 20 -Info "Set the capacity for the Deku Nuts (Base)" -Credits "GhostlyDark" + + # WALLET # + $Redux.Box.Wallet = CreateReduxGroup -Tag "Capacity" -Text "Wallet Capacity Selection" CreateReduxTextBox -Name "Wallet1" -Length 3 -Text "Wallet (1)" -Value 99 -Info "Set the capacity for the Wallet (Base)" -Credits "GhostlyDark" CreateReduxTextBox -Name "Wallet2" -Length 3 -Text "Wallet (2)" -Value 200 -Info "Set the capacity for the Wallet (Upgrade 1)" -Credits "GhostlyDark" CreateReduxTextBox -Name "Wallet3" -Length 3 -Text "Wallet (3)" -Value 500 -Info "Set the capacity for the Wallet (Upgrade 2)" -Credits "GhostlyDark" CreateReduxTextBox -Name "Wallet4" -Length 3 -Text "Wallet (4)" -Value 500 -Info "Set the capacity for the Wallet (Upgrade 3)" -Credits "GhostlyDark" -Warning "This wallet is not obtained through regular gameplay" + + # EQUIPMENT # + CreateReduxGroup -Tag "Gameplay" -Text "Equipment" CreateReduxCheckBox -Name "RazorSword" -Text "Permanent Razor Sword" -Info "The Razor Sword won't get destroyed after 100 hits`nYou can also keep the Razor Sword when traveling back in time" -Credits "darklord92" @@ -1286,17 +1360,24 @@ function CreateTabEquipment() { function CreateTabSpeedup() { # SKIP # + CreateReduxGroup -Tag "Skip" -Text "Skip" CreateReduxCheckBox -Name "BossCutscenes" -Text "Skip Boss Cutscenes" -Info "Skip the cutscenes that play during bosses and mini-bosses" -Credits "Ported from Rando" CreateReduxCheckBox -Name "TatlInterrupts" -Text "Skip Tatl Interrupts" -Info "Skip the cutscenes that are triggered by Tatl" -Credits "Ported from Rando" + + # SPEEDUP # + CreateReduxGroup -Tag "Speedup" -Text "Speedup" CreateReduxCheckBox -Name "LabFish" -Text "Faster Lab Fish" -Info "Only one fish has to be feeded in the Marine Research Lab" -Credits "Ported from Rando" CreateReduxCheckBox -Name "Dampe" -Text "Good Dampé RNG" -Info "Dampe's Digging Game always has two Ghost Flames on the ground and one up the ladder" -Credits "Ported from Rando" CreateReduxCheckBox -Name "DogRace" -Text "Good Dog Race RNG" -Info "The Gold Dog always wins the Doggy Racetrack race if you have the Mask of Truth" -Credits "Ported from Rando" + + # WALLET # + CreateReduxGroup -Tag "Speedup" -Text "Bank Deposit Rewards" CreateReduxTextBox -Name "Bank1" -Length 4 -Text "First Reward" -Value 200 -Info "Set the amount of Rupees required to deposit for the first reward" -Credits "Ported from Rando" CreateReduxTextBox -Name "Bank2" -Length 4 -Text "Second Reward" -Value 1000 -Info "Set the amount of Rupees required to deposit for the second reward" -Credits "Ported from Rando" diff --git a/Files/Scripts/Options/Ocarina of Time.psm1 b/Files/Scripts/Options/Ocarina of Time.psm1 index f672d2cf..35d8f77a 100644 --- a/Files/Scripts/Options/Ocarina of Time.psm1 +++ b/Files/Scripts/Options/Ocarina of Time.psm1 @@ -2,8 +2,8 @@ function PatchOptions() { # ENHANCED 16:9 WIDESCREEN # - if (IsWidescreen -Experimental) { ApplyPatch -Patch "Decompressed\widescreen.ppf" } - + if (IsChecked $Redux.Graphics.Widescreen) { ApplyPatch -Patch "Decompressed\widescreen.ppf" } + # MODELS # @@ -15,8 +15,10 @@ function PatchOptions() { elseif (IsChecked $Redux.Graphics.ListAdultFemaleModels) { $file = "\Adult Female\" + $Redux.Graphics.AdultFemaleModels.Text.replace(" (default)", "") + ".ppf" } if (TestFile ($GameFiles.models + $file)) { ApplyPatch -Patch ("Models" + $file) } - if (IsChecked $Redux.Graphics.FeminineAnimations) { ApplyPatch -Patch "Decompressed\feminine_animations.ppf" } - if (IsChecked $Redux.Graphics.HideEquipment) { ApplyPatch -Patch "Decompressed\hide_equipment.ppf" } + if (IsChecked $Redux.Animations.Feminine) { ApplyPatch -Patch "Decompressed\feminine_animations.ppf" } + if (IsChecked $Redux.Graphics.HideEquipment) { ApplyPatch -Patch "Decompressed\hide_equipment.ppf" } + + if (IsChecked $Redux.Graphics.EyesMM) { ApplyPatch -Patch "Decompressed\eyes_mm.ppf" } @@ -78,12 +80,6 @@ function ByteOptions() { if (IsChecked $Redux.Gameplay.ManualJump) { ChangeBytes -Offset "BD78C0" -Values "04 C1"; ChangeBytes -Offset "BD78E3" -Values "01" } if (IsChecked $Redux.Gameplay.NoKillFlash) { ChangeBytes -Offset "B11C33" -Values "00" } - <#if (IsChecked $Redux.Gameplay.SwordBeamAttack) { - ChangeBytes -Offset "D280" -Values "03 47 E0 00 03 47 FA B0 03 47 E0 00"; ChangeBytes -Offset "B5EF7E" -Values "9B 70"; ChangeBytes -Offset "BEFBF0" -Values "0C" - ChangeBytes -Offset "B5EF70" -Values "03 47 E0 00 03 47 FA B0"; ChangeBytes -Offset "B5EF86" -Values "09 20"; ChangeBytes -Offset "BEFBF4" -Values "0C" - ChangeBytes -Offset "F17F00" -Values "00"; ChangeBytes -Offset "F17F04" -Values "00"; PatchBytes -Offset "347E000" -Patch "Sword Beam Attack.bin" - }#> - # RESTORE # @@ -128,13 +124,13 @@ function ByteOptions() { if (IsChecked $Redux.Other.RemoveNaviPrompts) { ChangeBytes -Offset "DF8B84" -Values "00 00 00 00" } if (IsChecked $Redux.Other.DefaultZTargeting) { ChangeBytes -Offset "B71E6D" -Values "01" } if (IsChecked $Redux.Other.InstantClaimCheck) { ChangeBytes -Offset "ED4470" -Values "00 00 00 00"; ChangeBytes -Offset "ED4498" -Values "00 00 00 00" } - if (IsChecked $Redux.Other.HideCredits) { PatchBytes -Offset "966000" -Patch "Message\credits.bin" } if (IsChecked $Redux.Other.DebugItemSelect) { ExportAndPatch -Path "debug_item_select" -Offset "BCBF64" -Length "C8" } + # GRAPHICS # - if ( (IsChecked $Redux.Graphics.Widescreen) -and ($IsWiiVC -or !(IsWidescreen -Experimental) ) ) { + if (IsChecked $Redux.Graphics.WidescreenAlt) { # 16:9 Widescreen if ($IsWiiVC ) { ChangeBytes -Offset "B08038" -Values "3C 07 3F E3" } @@ -177,125 +173,23 @@ function ByteOptions() { PatchBytes -Offset "F21810" -Length "1000" -Texture -Patch "Widescreen\lens_of_truth.bin" } - if ( (IsIndex -Elem $Redux.UI.BlackBars -Index 2) -or (IsIndex -Elem $Redux.UI.BlackBars -Index 4) ) { - ChangeBytes -Offset "B0F680" -Values "00 00 00 00" - } - if ( (IsIndex -Elem $Redux.UI.BlackBars -Index 3) -or (IsIndex -Elem $Redux.UI.BlackBars -Index 4) ) { - ChangeBytes -Offset "B0F5A4" -Values "00 00 00 00" - ChangeBytes -Offset "B0F5D4" -Values "00 00 00 00" - ChangeBytes -Offset "B0F5E4" -Values "00 00 00 00" - ChangeBytes -Offset "B0F688" -Values "00 00 00 00" - } - - if (IsChecked $Redux.Graphics.ExtendedDraw) { ChangeBytes -Offset "ABECDE" -Values "3E 80"; ChangeBytes -Offset "ABED0A" -Values "3E 80" } - # if (IsChecked $Redux.Graphics.ExtendedDraw) { ChangeBytes -Offset "A9A970" -Values "00 01" } + if (IsChecked $Redux.Graphics.ExtendedDraw) { ChangeBytes -Offset "A9A970" -Values "00 01" } if (IsChecked $Redux.Graphics.ForceHiresModel) { ChangeBytes -Offset "BE608B" -Values "00" } # INTERFACE # - if (IsChecked $Redux.UI.HudTextures) { - PatchBytes -Offset "1A3CA00" -Texture -Patch "HUD\mm_button.bin" - PatchBytes -Offset "1A3C100" -Texture -Patch "HUD\mm_heart.bin" - PatchBytes -Offset "1A3DE00" -Texture -Patch "HUD\mm_key_rupee.bin" - } - if (IsChecked $Redux.UI.ButtonPositions) { ChangeBytes -Offset "B57F03" -Values "04" -Add # A Button / Text - X position (BA -> BE, +04) ChangeBytes -Offset "B586A7" -Values "0E" -Add # A Button / Text - Y position (09 -> 17, +0E) ChangeBytes -Offset "B57EEF" -Values "07" -Add # B Button - X position (A0 -> A7, +07) ChangeBytes -Offset "B589EB" -Values "07" -Add # B Text - X position (94 -> 9B, +07) - - <# X POSITION - B57F02 # A Button - X Position (00 BA) - GS: 801C7947 - B57F02 # A Button Text - X Position (00 BA) - GS: 801C794D - - B57EEE # B Button Icon - Y Position (00 A0) - GS: 801C76C9 - B57EEE # B Button - X Position (00 A0) - GS: 801C76B1 - B57EFE # B Button Ammo - X Position (00 A2) - GS: 801C7E25 - B589EA # B Button Text - X Position (00 94) - GS: - - B584EF # Start Button - X Position (00 84) - GS: 801C76AD - B58492 # Start Button Japanese - X Position (00 7A) - GS: 801C7693 - B5849E # Start Button English - X Position (00 78) - GS: 801C7695 - - B582DE # C-Up Button Navi Text - X Position (00 F7) - GS: 801C73D5 - B584C2 # C-Up Button - X Position (00 FE) - GS: 801C76A1 - - B58506 # C-Left Button - X Position (00 E3) - GS: 801C76B3 - B5857B # C-Left Button Icon - X Position (00 E3) - GS: 801C76CB - B58DC6 # C-Down Button Ammo - X Position (00 E4) - GS: 801C7E27 - - B58512 # C-Down Button - X Position (00 F9) - GS: 801C76B5 - B5858A # C-Down Button Icon - X Position (00 F9) - GS: 801C76CD - B58C42 # C-Down Button Ammo - X Position (00 FA) - GS: 801C7E29 - - B5851E # C-Right Button - X Position (01 0F) - GS: 811C76B6 - B58596 # C-Right Button Icon - X Position (01 0F) - GS: 811C76CE - B58DE2 # C-Right Button Ammo - X Position (01 10) - GS: 811C7E2A - #> - - <# Y POSITION - B586A6 # A Button - Y Position (00 09) - GS: 801C7945 - B586A6 # A Button Text - Y Position (00 09) - GS: 801C794B - - B5852A # B Button Icon - Y Position (00 11) - GS: 801C76D1 - B585A2 # B Button - Y Position (00 11) - GS: 801C76B9 - B58C52 # B Button Ammo - Y Position (00 23) - GS: 801C7E2D - ?????? # B Button Text - Y Position (?? ??) - GS: - - B584FA # Start Button - Y Position (00 11) - GS: 801C76AF - B58476 # Start Button Japanese - Y Position (00 15) - GS: 801C768F - B5802B # Start Button English - Y Position (00 14) - GS: 801C7691 - - B5802A # C-Up Button Navi Text - Y Position (00 14) - GS: 801C73D7 - B58046 # C-Up Button - Y Position (00 10) - GS: 801C76A3 - - B54D36 # C-Left Button - Y Position (00 12) - GS: 801C76BB - B54D36 # C-Left Button Icon - Y Position (00 12) - GS: 801C76D3 - B58C52 # C-Left Button Ammo - Y Position (00 23) - GS: 801C7E2F - - B58536 # C-Down Button - Y Position (00 22) - GS: 801C76BD - B585AE # C-Down Button Icon - Y Position (00 22) - GS: 801C76D5 - B58DFE # C-Down Button Ammo - Y Position (00 33) - GS: 801C7E31 - - B54D36 # C-Right Button - Y Position (00 12) - GS: 801C76BF - B54D36 # C-Right Button Icon - Y Position (00 12) - GS: 801C76D7 - B58C52 # C-Right Button Ammo - Y Position (00 23) - GS: 801C7E33 - #> - - <# SCALE - B586B2 # A Button - Scale (FE 84) - GS: 811C7948 - B5804E # A Button Icon - X Scale (00 30) - GS: 801C794F - B58046 # A Button Icon - Y Scale (00 10) - GS: 801C795D - - B5854A # B Button - Scale (02 3F) - GS: 801C76C0 - B585C2 # B Button Icon - Scale (02 26) - GS: 801C76D8 - - ?????? # Start Button - Scale (?? ??) - GS: - B5803E # Start Button Text - Scale (00 64) - GS: 801C7689 - - ?????? # C-Up Button - Scale (?? ??) - GS: - - B58556 # C-Left Button - Scale (02 6C) - GS: 801C76C2 - B585CE # C-Left Button Icon - Scale (02 A8) - GS: 801C76DA - - B5856A # C-Down Button - Scale (02 6C) - GS: 801C76C4 - B585E2 # C-Down Button Icon - Scale (02 A8) - GS: 801C76DC - - B58556 # C-Right Button - Scale (02 6C) - GS: 801C76C6 - B585CE # C-Right Button Icon - Scale (02 A8) - GS: 801C76DE - #> } - if (IsChecked $Redux.UI.CenterNaviPrompt) { - if (IsWidescreen -Experimental) { ChangeBytes -Offset "B582DF" -Values "5E" } - else { ChangeBytes -Offset "B582DF" -Values "F6" } - } + if (IsChecked $Redux.UI.CenterNaviPrompt) { ChangeBytes -Offset "B582DF" -Values "5E" } - if (IsChecked $Redux.UI.GCScheme) { - # Z to L textures + if (IsChecked $Redux.UI.GCScheme) { # Z to L textures PatchBytes -Offset "844540" -Texture -Patch "GameCube\l_pause_screen_button.bin" PatchBytes -Offset "92C200" -Texture -Patch "GameCube\l_text_icon.bin" if (TestFile ($GameFiles.textures + "\GameCube\l_targeting_" + $LanguagePatch.code + ".bin")) { @@ -305,27 +199,104 @@ function ByteOptions() { } } - <# if (IsValue -Elem $Redux.UI.Scale -Not) { - $scale = $Redux.UI.Scale * (GetDecimal "FE84") - $scale = (Get16Bit $scale) -split '' - ChangeBytes -Offset "B586B2" -Values $scale + if (IsChecked $Redux.UI.HudTextures) { PatchBytes -Offset "1A3C100" -Texture -Patch "HUD\mm_heart.bin"; PatchBytes -Offset "1A3DE00" -Texture -Patch "HUD\mm_key_rupee.bin" } + if ( (IsChecked $Redux.UI.HudTextures -Not) -and (IsIndex -Elem $Redux.UI.ButtonSize -Text "Small")) { PatchBytes -Offset "1A3CA00" -Texture -Patch "HUD\oot_button_small.bin" } + if ( (IsChecked $Redux.UI.HudTextures -Not) -and (IsIndex -Elem $Redux.UI.ButtonSize -Text "Full Size")) { PatchBytes -Offset "1A3CA00" -Texture -Patch "HUD\oot_button_full.bin" } + if ( (IsChecked $Redux.UI.HudTextures) -and (IsIndex -Elem $Redux.UI.ButtonSize -Text "Small")) { PatchBytes -Offset "1A3CA00" -Texture -Patch "HUD\mm_button_small.bin" } + if ( (IsChecked $Redux.UI.HudTextures) -and (IsIndex -Elem $Redux.UI.ButtonSize -Text "Normal")) { PatchBytes -Offset "1A3CA00" -Texture -Patch "HUD\mm_button.bin" } + if ( (IsChecked $Redux.UI.HudTextures) -and (IsIndex -Elem $Redux.UI.ButtonSize -Text "Full Size")) { PatchBytes -Offset "1A3CA00" -Texture -Patch "HUD\mm_button_full.bin" } + + if ( (IsIndex -Elem $Redux.UI.BlackBars -Index 2) -or (IsIndex -Elem $Redux.UI.BlackBars -Index 4) ) { ChangeBytes -Offset "B0F680" -Values "00 00 00 00" } + if ( (IsIndex -Elem $Redux.UI.BlackBars -Index 3) -or (IsIndex -Elem $Redux.UI.BlackBars -Index 4) ) { + ChangeBytes -Offset "B0F5A4" -Values "00 00 00 00" + ChangeBytes -Offset "B0F5D4" -Values "00 00 00 00" + ChangeBytes -Offset "B0F5E4" -Values "00 00 00 00" + ChangeBytes -Offset "B0F688" -Values "00 00 00 00" + } + + + + # HIDE HUD # + + if (IsChecked $Redux.Hide.AButton) { + ChangeBytes -Offset "B586B0" -Values "00 00 00 00" # A Button (scale) + ChangeBytes -Offset "AE7D0E" -Values "03 10" # A Button - Text (DMA) + ChangeBytes -Offset "7540" -Values "03 10 00 00 03 10 57 00 03 10 00 00" + + # ChangeBytes -Offset "B57F00" -Values "24 03 01 BA" # A Button (X pos) + # ChangeBytes -Offset "B586A4" -Values "24 19 01 09" # A Button (Y pos) + # ChangeBytes -Offset "B5804C" -Values "24 0C 00 00" # A Button - Text (X scale) / Text Box Cursor (X pos) + # ChangeBytes -Offset "B58044" -Values "24 0A 00 00" # A Button - Text (Y scale) / C-Up Navi Text (Y pos) + } + + if (IsChecked $Redux.Hide.BButton) { ChangeBytes -Offset "B57EEC" -Values "24 02 03 A0"; ChangeBytes -Offset "B57EFC" -Values "24 0A 03 A2"; ChangeBytes -Offset "B589D4" -Values "24 0F 03 97"; ChangeBytes -Offset "B589E8" -Values "24 19 03 94" } # B Button -> Icon / Ammo / Japanese / English + if (IsChecked $Redux.Hide.StartButton) { ChangeBytes -Offset "B584EC" -Values "24 19 03 84"; ChangeBytes -Offset "B58490" -Values "24 18 03 7A"; ChangeBytes -Offset "B5849C" -Values "24 0E 03 78" } # Start Button -> Button / Japanese / English + if (IsChecked $Redux.Hide.CupButton) { ChangeBytes -Offset "B584C0" -Values "24 19 03 FE"; ChangeBytes -Offset "B582DC" -Values "24 0E 03 F7" } # C-Up Button -> Button / Navi Text + if (IsChecked $Redux.Hide.CLeftButton) { ChangeBytes -Offset "B58504" -Values "24 19 03 E3"; ChangeBytes -Offset "B5857C" -Values "24 19 03 E3"; ChangeBytes -Offset "B58DC4" -Values "24 0E 03 E4" } # C-Left Button -> Button / Icon / Ammo + if (IsChecked $Redux.Hide.CDownButton) { ChangeBytes -Offset "B58510" -Values "24 0F 03 F9"; ChangeBytes -Offset "B58588" -Values "24 0F 03 F9"; ChangeBytes -Offset "B58C40" -Values "24 06 02 FA" } # C-Down Button -> Button / Icon / Ammo + if (IsChecked $Redux.Hide.CRightButton) { ChangeBytes -Offset "B5851C" -Values "24 19 03 0F"; ChangeBytes -Offset "B58594" -Values "24 19 03 0F"; ChangeBytes -Offset "B58DE0" -Values "24 19 03 10" } # C-Right Button -> Button / Icon / Ammo + if (IsChecked $Redux.Hide.AreaTitle) { ChangeBytes -Offset "BE2B10" -Values "24 07 03 A0" } # Area Titles + if (IsChecked $Redux.Hide.DungeonTitle) { ChangeBytes -Offset "AC8828" -Values "24 07 03 A0" } # Dungeon Titles + if (IsChecked $Redux.Hide.Carrots) { ChangeBytes -Offset "B58348" -Values "24 0F 03 6E" } # Epona Carrots + if (IsChecked $Redux.Hide.Hearts) { ChangeBytes -Offset "ADADEC" -Values "10 00" } # Disable Hearts Render + + if (IsChecked $Redux.Hide.Magic) { + ChangeBytes -Offset "B587C0" -Values "24 0F 03 1A"; ChangeBytes -Offset "B587A0" -Values "24 0E 01 22"; ChangeBytes -Offset "B587B4" -Values "24 19 01 2A" # Magic Meter / Magic Bar - Small (Y pos) / Magic Bar - Large (Y pos) + # ChangeBytes -Offset "B58024" -Values "24 11 03 12" # Magic Bar (X pos) & C-Left / C-Right (Y pos) + # $Values = @() # Magic Bar + # for ($i=0; $i -lt 576; $i++) { $Values += 0 } + # ChangeBytes -Offset "1A3F8C0" -Values $Values + } + + if (IsChecked $Redux.Hide.Rupees) { + ChangeBytes -Offset "AEB7B0" -Values "24 0C 03 1A" # Rupees - Icon + # ChangeBytes -Offset "AEBA48" -Values "24 12 03 2A" # Rupees - Text (X pos) + ChangeBytes -Offset "AEBC48" -Values "24 0D 01 CE" # Rupees - Text (Y pos) + } + + if (IsChecked $Redux.Hide.DungeonKeys) { + ChangeBytes -Offset "AEB8AC" -Values "24 0F 03 1A" # Key - Icon + # ChangeBytes -Offset "AEB998" -Values "24 12 03 2A" # Key - Text (X pos) + ChangeBytes -Offset "AEBA00" -Values "24 19 01 BE" # Key - Text (Y pos) + } + + if (IsChecked $Redux.Hide.Icons) { + ChangeBytes -Offset "B58CFC" -Values "24 0F 00 00" # Clock - Digits (scale) + $Values = @(); for ($i=0; $i -lt 256; $i++) { $Values += 0 }; ChangeBytes -Offset "1A3E000" -Values $Values # Clock - Icon + $Values = @(); for ($i=0; $i -lt 768; $i++) { $Values += 0 }; ChangeBytes -Offset "1A3E600" -Values $Values # Score Counter - Icon + } + + <#if (IsChecked $Redux.Hide.Minimaps) { + $Values = @(); for ($i=0; $i -lt 20; $i++) { $Values += 3 }; ChangeBytes -Offset "B6C814" -Values $values -Interval 2 # Minimaps + $Values = @(); for ($i=0; $i -lt 20; $i++) { $Values += 8 }; ChangeBytes -Offset "B6C878" -Values $values -Interval 8 # Arrows + $Values = @(); for ($i=0; $i -lt 24; $i++) { $Values += 3 }; ChangeBytes -Offset "B6C9FA" -Values $values -Interval 2 # Dungeon Icons + ChangeBytes -Offset "58AF0" -Values "03" # Dungeon Map + ChangeBytes -Offset "B6C87A" -Values "03" # Dungeon Icon - Bottom of the Well + ChangeBytes -Offset "B6CA00" -Values "03" # Dungeon Icon - Inside the Deku Tree + ChangeBytes -Offset "B6CA02" -Values "03" # Dungeon Icon - Forest Temple + ChangeBytes -Offset "B6CA04" -Values "03" # Dungeon Icon - + ChangeBytes -Offset "B6CA08" -Values "03" # Dungeon Icon - Inside Jabu-Jabu's Belly + ChangeBytes -Offset "B6CA0E" -Values "03" # Dungeon Icon - Spirit Temple + ChangeBytes -Offset "B6CA16" -Values "03" # Dungeon Icon - Dodongo's Cavern + ChangeBytes -Offset "B6CA18" -Values "03" # Dungeon Icon - Fire Temple + ChangeBytes -Offset "B6CA1E" -Values "03" # Dungeon Icon - Ganon's Castle + ChangeBytes -Offset "B6CA20" -Values "03" # Dungeon Icon - Shadow Temple + ChangeBytes -Offset "B6CA22" -Values "03" # Dungeon Icon - Water Temple + ChangeBytes -Offset "B6CA26" -Values "03" # Dungeon Icon - ? + }#> - $scale = $Redux.UI.Scale * (Get16Bit "00A0") - $scale = (Get16Bit $scale) -split '' - ChangeBytes -Offset "B57EEE" -Values $scale + if (IsChecked $Redux.Hide.Credits) { PatchBytes -Offset "966000" -Patch "Message\credits.bin" } - $scale = $Redux.UI.Scale * (Get16Bit "026C") - $scale = (Get16Bit $scale) -split '' - ChangeBytes -Offset "B5856A" -Values $scale - $scale = $Redux.UI.Scale * (Get16Bit "026C") - $scale = (Get16Bit $scale) -split '' - ChangeBytes -Offset "B58556" -Values $scale - } #> + + # MENU # + + if (IsIndex -Elem $Redux.Menu.Skybox -Index 4 -Not) { ChangeBytes -Offset "B67722" -Values $Redux.FileSelect.Skybox.SelectedIndex } # SOUNDS / VOICES # + if (IsChecked $Redux.Restore.FireTemple) { $offset = "1EF340" } else { $offset = "1DFC00" } $file = "Voices Child\" + $Redux.Sounds.ChildVoices.Text.replace(" (default)", "") + ".bin" if (TestFile ($GameFiles.binaries + "\" + $file)) { PatchBytes -Offset $offset -Patch ($file) } @@ -334,9 +305,7 @@ function ByteOptions() { $file = "Voices Adult\" + $Redux.Sounds.AdultVoices.Text.replace(" (default)", "") + ".bin" if (TestFile ($GameFiles.binaries + "\" + $file)) { PatchBytes -Offset $offset -Patch ($file) } - if (IsIndex -Elem $Redux.Sounds.Instrument -Not) { - ChangeBytes -Offset "B53C7B" -Values ($Redux.Sounds.Instrument.SelectedIndex+1); ChangeBytes -Offset "B4BF6F" -Values ($Redux.Sounds.Instrument.SelectedIndex+1) - } + if (IsIndex -Elem $Redux.Sounds.Instrument -Not) { ChangeBytes -Offset "B53C7B" -Values ($Redux.Sounds.Instrument.SelectedIndex+1); ChangeBytes -Offset "B4BF6F" -Values ($Redux.Sounds.Instrument.SelectedIndex+1) } @@ -379,14 +348,22 @@ function ByteOptions() { if (IsIndex -Elem $Redux.SFX.ZTarget -Not) { ChangeBytes -Offset "AE7EC6" -Values (GetSFXID $Redux.SFX.ZTarget.Text) } if (IsIndex -Elem $Redux.SFX.LowHP -Not) { ChangeBytes -Offset "ADBA1A" -Values (GetSFXID $Redux.SFX.LowHP.Text) } - if (IsIndex -Elem $Redux.SFX.HoverBoots -Not) { ChangeBytes -Offset "BDBD8A" -Values (GetSFXID $Redux.SFX.HoverBoots.Text) } + if (IsIndex -Elem $Redux.SFX.HoverBoots -Not) { ChangeBytes -Offset "BDBD8A" -Values (GetSFXID $Redux.SFX.HoverBoots.Text) } + + # MUSIC # - # FILE SELECT + MuteMusic -SequenceTable "B89AE0" -Sequence "29DE0" -Length 108 - if (IsText -Elem $Redux.FileSelect.Music -Compare "File Select" -Not) { ChangeBytes -Offset "BAFEE3" -Values (GetOoTMusicID -Music $Redux.FileSelect.Music.Text) } - if (IsIndex -Elem $Redux.FileSelect.Skybox -Index 4 -Not) { ChangeBytes -Offset "B67722" -Values $Redux.FileSelect.Skybox.SelectedIndex } + if (IsText -Elem $Redux.Music.FileSelect -Compare "File Select" -Not) { + foreach ($track in $Files.json.music) { + if ($Redux.Music.FileSelect.Text -eq $track.title) { + ChangeBytes -Offset "BAFEE3" -Values $track.id + break + } + } + } @@ -938,6 +915,7 @@ function ByteOptions() { if (IsChecked $Redux.Restore.GerudoTextures) { PatchBytes -Offset "E68CE8" -Texture -Patch "Gerudo Symbols\ganondorf_cape.bin" + PatchBytes -Offset "15B1000" -Texture -Patch "Gerudo Symbols\gerudo_membership_card.bin" # Blocks / Switches PatchBytes -Offset "F70350" -Texture -Patch "Gerudo Symbols\pushing_block.bin" @@ -1266,13 +1244,14 @@ function ByteLanguageOptions() { function CreateOptions() { if ($Settings.Debug.LiteGUI -eq $False) { - CreateOptionsDialog -Width 1060 -Height 655 -Tabs @("Main", "Audiovisual", "Difficulty", "Colors", "Equipment", "Animations") + CreateOptionsDialog -Width 1060 -Height 655 -Tabs @("Main", "Graphics", "Audio", "Difficulty", "Colors", "Equipment", "Animations") } else { - CreateOptionsDialog -Width 1060 -Height 450 -Tabs @("Main", "Audiovisual", "Difficulty") + CreateOptionsDialog -Width 1060 -Height 450 -Tabs @("Main", "Graphics", "Audio", "Difficulty") } - if (!$IsWiiVC) { $Redux.Graphics.Widescreen.Add_CheckStateChanged({ AdjustGUI }) } + $Redux.Graphics.Widescreen.Add_CheckStateChanged( { AdjustGUI } ) + $Redux.Graphics.WidescreenAlt.Add_CheckStateChanged( { AdjustGUI } ) } @@ -1281,9 +1260,12 @@ function CreateOptions() { #============================================================================================================================================================================================== function AdjustGUI() { - if ($IsWiiVC) { return } + EnableElem $Redux.Graphics.Widescreen -Active (!$Redux.Graphics.WidescreenAlt.Checked -and !$Patches.Redux.Checked -and !$ISwiiVC) + EnableElem ($Redux.Graphics.WidescreenAlt) -Active (!$Redux.Graphics.Widescreen.Checked) - EnableElem @($Redux.UI.ButtonPositions) -Active (!(IsWidescreen -Experimental)) + if ($Redux.Graphics.Widescreen.Enabled -eq $False -and $Redux.Graphics.WidescreenAlt.Enabled -eq $False) { EnableElem $Redux.Graphics.WidescreenAlt -Active $True } + if (!$Redux.Graphics.Widescreen.Enabled) { $Redux.Graphics.Widescreen.Checked = $False } + if (!$Redux.Graphics.WidescreenAlt.Enabled) { $Redux.Graphics.WidescreenAlt.Checked = $False } } @@ -1293,6 +1275,7 @@ function AdjustGUI() { function CreateTabMain() { # GAMEPLAY # + CreateReduxGroup -Tag "Gameplay" -Text "Gameplay" if ($Settings.Debug.LiteGUI -eq $False) { CreateReduxCheckBox -Name "FasterBlockPushing" -Checked -Text "Faster Block Pushing" -Info "All blocks are pushed faster" -Credits "GhostlyDark (Ported from Redux)" @@ -1305,7 +1288,10 @@ function CreateTabMain() { CreateReduxCheckBox -Name "ManualJump" -Text "Manual Jump" -Info "Press Z + A to do a Manual Jump instead of a Jump Attack`nPress B mid-air after jumping to do a Jump Attack" -Credits "Admentus (ROM hack) & CloudModding (GameShark)" CreateReduxCheckBox -Name "NoKillFlash" -Text "No Kill Flash" -Info "Disable the flash effect when killing certain enemies such as the Guay or Skullwalltula" -Credits "Chez Cousteau" + + # RESTORE # + CreateReduxGroup -Tag "Restore" -Text "Restore / Correct / Censor" CreateReduxCheckBox -Name "RupeeColors" -Text "Correct Rupee Colors" -Info "Corrects the colors for the Purple (50) and Golden (200) Rupees" -Credits "GhostlyDark" CreateReduxCheckBox -Name "CowNoseRing" -Text "Restore Cow Nose Ring" -Info "Restore the rings in the noses for Cows as seen in the Japanese release" -Credits "ShadowOne333" @@ -1316,16 +1302,18 @@ function CreateTabMain() { } CreateReduxCheckBox -Name "Blood" -Text "Censor Blood" -Info "Censor the green blood for Ganondorf and Ganon as used in the Rev 2 ROM" -Credits "ShadowOne333" + + # OTHER # + CreateReduxGroup -Tag "Other" -Text "Other" CreateReduxCheckBox -Name "SubscreenDelayFix" -Text "Pause Screen Delay Fix" -Checked -Info "Removes the delay when opening the Pause Screen by removing the anti-aliasing" -Credits "zel" if ($Settings.Debug.LiteGUI -eq $False) { CreateReduxCheckBox -Name "PoacherSawFix" -Text "Poacher's Saw Fix" -Checked -Info "Obtaining the Poacher's Saw no longer prevents Link from obtaining the second Deku Nut upgrade" -Credits "Ported from Rando" CreateReduxCheckBox -Name "VisibleGerudoTent" -Text "Visible Gerudo Tent" -Info "Make the tent in the Gerudo Valley during the Child era visible`nThe tent was always accessible, just invisible" -Credits "Chez Cousteau" - CreateReduxCheckBox -Name "RemoveNaviPrompts" -Text "Remove Navi Prompts" -Info "Navi will no longer interupt your during the first dungeon with mandatory textboxes" -Credits "Ported from Redux" + CreateReduxCheckBox -Name "RemoveNaviPrompts" -Text "Remove Navi Prompts" -Info "Navi will no longer interrupt you with text boxes in the first dungeon" -Credits "Ported from Redux" CreateReduxCheckBox -Name "DefaultZTargeting" -Text "Default Hold Z-Targeting" -Info "Change the Default Z-Targeting option to Hold instead of Switch" -Credits "Ported from Redux" CreateReduxCheckBox -Name "InstantClaimCheck" -Text "Instant Claim Check" -Info "Remove the check for waiting until the Biggoron Sword can be claimed through the Claim Check" -Credits "Ported from Rando" - CreateReduxCheckBox -Name "HideCredits" -Text "Hide Credits" -Info "Do not show the credits text during the credits sequence" -Credits "Admentus" } CreateReduxCheckBox -Name "DebugMapSelect" -Text "Debug Map Select" -Info "Enable the Map Select menu like in the Debug ROM`nThe File Select menu now opens the Map Select menu instead`nA separate debug save file is used" -Credits "Jared Johnson (translated by Zelda Edit)" CreateReduxCheckBox -Name "DebugItemSelect" -Text "Debug Item Select" -Info "Translates the Debug Inventory Select menu into English" -Credits "GhostlyDark" @@ -1337,15 +1325,24 @@ function CreateTabMain() { #============================================================================================================================================================================================== function CreateTabRedux() { + + # INTERFACE # + CreateReduxGroup -Tag "UI" -Text "Interface Icons" CreateReduxCheckBox -Name "ShowFileSelectIcons" -Checked -Text "Show File Select Icons" -Info "Show icons on the File Select screen to display your save file progress" -Credits "ShadowOne333" CreateReduxCheckBox -Name "DPadLayoutShow" -Checked -Text "Show D-Pad Icon" -Info "Show the D-Pad icons ingame that display item shortcuts" -Credits "Ported from Redux" + # BUTTON COLORS # + + CreateButtonColorOptions + + # HUD COLORS # + CreateReduxGroup -Tag "Colors" -Text "HUD Colors" CreateReduxCheckBox -Name "GreenTextCursor" -Text "Green Text Cursor" -Info "Change the color for the text cursor from blue to green" -Credits "Ported from Redux" @@ -1358,14 +1355,20 @@ function CreateTabLanguage() { CreateLanguageContent + + # TEXT SPEED # + CreateReduxGroup -Tag "Text" -Text "Text Speed" CreateReduxPanel CreateReduxRadioButton -Name "Speed1x" -Max 3 -SaveTo "Speed" -Checked -Text "1x Text Speed" -Info "Leave the dialogue text speed at normal" CreateReduxRadioButton -Name "Speed2x" -Max 3 -SaveTo "Speed" -Text "2x Text Speed" -Info "Set the dialogue text speed to be twice as fast" -Credits "Ported from Redux" CreateReduxRadioButton -Name "Speed3x" -Max 3 -SaveTo "Speed" -Text "3x Text Speed" -Info "Set the dialogue text speed to be three times as fast" -Credits "Ported from Redux" + + # ENGLISH TEXT # + $Redux.Box.Dialogue = CreateReduxGroup -Tag "Text" -Text "English Dialogue" CreateReduxPanel CreateReduxRadioButton -Name "Vanilla" -Max 4 -SaveTo "Dialogue" -Text "Vanilla Text" -Info "Keep the text as it is" @@ -1373,6 +1376,8 @@ function CreateTabLanguage() { CreateReduxRadioButton -Name "Restore" -Max 4 -SaveTo "Dialogue" -Text "Restore Text" -Info ("Restores the text used from the GC revision and applies grammar and typo fixes`nAlso corrects some icons in the text`n" + 'Includes the changes from "Redux Text" as well') -Credits "Redux" CreateReduxRadioButton -Name "FemalePronouns" -Max 4 -SaveTo "Dialogue" -Text "Female Pronouns" -Info "Refer to Link as a female character" -Credits "Admentus & Mil`n(includes Restore Text by ShadowOne)" + + $Redux.Box.Text = CreateReduxGroup -Tag "Text" -Text "Other English Options" CreateReduxCheckBox -Name "KeatonMaskFix" -Text "Keaton Mask Fix" -Info 'Fixes the grammartical typo for the "Keaton Mask"' -Credits "Redux" CreateReduxCheckBox -Name "PauseScreen" -Text "MM Pause Screen" -Info "Replaces the Pause Screen textures to be styled like Majora's Mask" -Credits "Garo-Mastah & CM" @@ -1414,34 +1419,29 @@ function UnlockLanguageContent() { #============================================================================================================================================================================================== -function CreateTabAudiovisual() { +function CreateTabGraphics() { # GRAPHICS # + CreateReduxGroup -Tag "Graphics" -Text "Graphics" -Columns 4 - if ($WiiVC) { - $Info = "Native 16:9 Widescreen Display support with backgrounds and textures adjusted for widescreen" - $Credits = "`nAspect Ratio Fix by Admentus`n16:9 backgrounds by GhostlyDark, ShadowOne333 & CYB3RTRON" - } - else { - $Info = "Adjust the backgrounds and textures to fit in with 16:9 Widescreen`nUse GLideN64 " + '"adjust to fit"' + " option for 16:9 widescreen" - $Info += "`n`n--- CHANGE WIDESCREEN ---`n" - $Info += "Advanced native 16:9 Widescreen Display" - $Info += "`n`n--- KNOWN ISSUES ---`n" - $Info += "- Certain HUD elements are not centered" - - $Credits = "`nAspect Ratio Fix by Admentus`n16:9 backgrounds by GhostlyDark, ShadowOne333 & CYB3RTRON`nWidescreen Patch by gamemasterplc and corrected by GhostlyDark" - } + $Info = "Patch the game to be in true 16:9 widescreen with the HUD pushed to the edges." + $Info += "`n`nKnown Issues:" + $Info += "`n- Backgrounds are 4:3 and centered showing collisions at the sides." + $Info += "`n- Not compatible with Redux." + + CreateReduxCheckBox -Name "Widescreen" -Text "16:9 Widescreen" -Info $Info -Credits "Widescreen Patch by gamemasterplc, enhanced and ported by GhostlyDark" + CreateReduxCheckBox -Name "WidescreenAlt" -Text "16:9 Widescreen (Alt)" -Info "Apply 16:9 Widescreen adjusted backgrounds and textures (as well as 16:9 Widescreen for the Wii VC)" -Credits "Aspect Ratio Fix by Admentus`n16:9 backgrounds by GhostlyDark, ShadowOne333 & CYB3RTRON" + CreateReduxCheckBox -Name "ExtendedDraw" -Text "Extended Draw Distance" -Info "Increases the game's draw distance for objects`nDoes not work on all objects" -Credits "Admentus" + CreateReduxCheckBox -Name "ForceHiresModel" -Text "Force Hires Link Model" -Info "Always use Link's High Resolution Model when Link is too far away" -Credits "GhostlyDark" + CreateReduxCheckBox -Name "EyesMM" -Text "Majora's Mask Eyes" -Info "Replace the eyes for Vanilla Child Link with those from Majora's Mask" -Credits "GhostlyDark" -Column 4 -Row 2 + CreateReduxCheckBox -Name "HideEquipment" -Text "Hide Equipment" -Info "Hide the equipment when it is sheathed" -Credits "XModxGodX" -Column 4 -Row 3 - CreateReduxCheckBox -Name "Widescreen" -Text "16:9 Widescreen" -Info $Info -Credits $Credits - CreateReduxCheckBox -Name "ExtendedDraw" -Text "Extended Draw Distance" -Info "Increases the game's draw distance for objects`nDoes not work on all objects" -Credits "Admentus" - CreateReduxCheckBox -Name "ForceHiresModel" -Text "Force Hires Link Model" -Info "Always use Link's High Resolution Model when Link is too far away" -Credits "GhostlyDark" - CreateReduxCheckBox -Name "FeminineAnimations" -Text "Feminine Animations" -Info "Use feminine animations for Link`nThis applies to both models`nIt works best with the Aria model" -Credits "GhostlyDark (ported) & AriaHiro64 (model)" -Column 4 -Row 2 - CreateReduxCheckBox -Name "HideEquipment" -Text "Hide Equipment" -Info "Hide the equipment when it is sheathed" -Credits "XModxGodX" -Column 4 -Row 3 # MODELS # + CreateReduxPanel -Columns 2 -Rows 1 -Row 1 CreateReduxRadioButton -Name "ListChildMaleModels" -Max 2 -SaveTo "ChildModels" -Column 1 -Row 1 -Text "Male Child Models" -Checked -Info "List all male child model replacements to play as" CreateReduxRadioButton -Name "ListChildFemaleModels" -Max 2 -SaveTo "ChildModels" -Column 2 -Row 1 -Text "Female Child Models" -Info "List all female child model replacements to play as" @@ -1458,9 +1458,14 @@ function CreateTabAudiovisual() { $Models = LoadModelsList -Category "Adult Female" CreateReduxComboBox -Name "AdultFemaleModels" -Column 2.9 -Row 3 -Items $Models -Default "Hatsune Miku - Link" -Info "Replace the adult model used for Link`nOptions include custom Female models" + EnableForm -Form $Redux.Graphics.EyesMM -Enable ($Redux.Graphics.ChildMaleModels.SelectedIndex -eq 0 -and $Redux.Graphics.ListChildMaleModels.Checked) + $Redux.Graphics.ChildMaleModels.Add_SelectedIndexChanged( { EnableForm -Form $Redux.Graphics.EyesMM -Enable ($Redux.Graphics.ChildMaleModels.SelectedIndex -eq 0 -and $Redux.Graphics.ListChildMaleModels.Checked) } ) + $Redux.Graphics.ListChildMaleModels.Add_CheckedChanged( { EnableForm -Form $Redux.Graphics.EyesMM -Enable ($Redux.Graphics.ChildMaleModels.SelectedIndex -eq 0 -and $Redux.Graphics.ListChildMaleModels.Checked) } ) + # MODELS PREVIEW # + CreateReduxGroup -Tag "Graphics" -Text "Model Previews" $Last.Group.Height = (DPISize 192) @@ -1482,30 +1487,70 @@ function CreateTabAudiovisual() { # INTERFACE # - CreateReduxGroup -Tag "UI" -Text "Interface" # -Height 2.5 + + CreateReduxGroup -Tag "UI" -Text "Interface" $Last.Group.Width = $Redux.Groups[$Redux.Groups.Length-3].Width $Last.Group.Top = $Redux.Groups[$Redux.Groups.Length-3].Bottom + 5 CreateReduxCheckBox -Name "HudTextures" -Text "MM HUD Textures" -Info "Replaces the HUD textures with those from Majora's Mask" -Credits "Ported by GhostlyDark" CreateReduxCheckBox -Name "ButtonPositions" -Text "MM Button Positions" -Info "Positions the A and B buttons like in Majora's Mask" -Credits "Ported by GhostlyDark" CreateReduxCheckBox -Name "CenterNaviPrompt" -Text "Center Navi Prompt" -Info 'Centers the "Navi" prompt shown in the C-Up button' -Credits "Ported by GhostlyDark" CreateReduxCheckBox -Name "GCScheme" -Text "GC Scheme" -Info "Replace and change the textures, dialogue and text colors to match the GameCube's scheme" -Credits "Admentus, GhostlyDark & ShadowOne333" -Warning "Dialogue changes are only available for the English language" - CreateReduxComboBox -Name "BlackBars" -Column 1 -Row 2 -Text "Black Bars" -Items @("Default", "Hide (Z-Targeting)", "Hide (Cutscenes)", "Hide (Always)") -Info "Removes the black bars shown on the top and bottom of the screen during Z-targeting and cutscenes" -Credits "Admentus" - # CreateReduxSlider -Name "Scale" -Column 3 -Row 1.8 -Default 100 -Min 1 -Max 100 -Freq 20 -Small 10 -Large 20 -Text "Scale" -Info "Set the scale of the HUD buttons" -Credits "Admentus" + CreateReduxComboBox -Name "ButtonSize" -Column 1 -Row 2 -Text "HUD Size" -Items @("Small", "Normal", "Full Size") -Default "Normal" -Info "Set the size of the A, B, C and Start buttons" -Credits "Admentus & GhostlyDark" + CreateReduxComboBox -Name "BlackBars" -Column 3 -Row 2 -Text "Black Bars" -Items @("Enabled", "Disabled for Z-Targeting", "Disabled for Cutscenes", "Always Disabled") -Info "Removes the black bars shown on the top and bottom of the screen during Z-targeting and cutscenes" -Credits "Admentus" + + + + # HIDE HUD # + + CreateReduxGroup -Tag "Hide" -Text "Hide HUD" + CreateReduxCheckBox -Name "AButton" -Text "Hide A Button" -Info "Hide the A Button" -Credits "Admentus" + CreateReduxCheckBox -Name "BButton" -Text "Hide B Button" -Info "Hide the B Button" -Credits "Admentus" + CreateReduxCheckBox -Name "StartButton" -Text "Hide Start Button" -Info "Hide the Start Button" -Credits "Admentus" + CreateReduxCheckBox -Name "CUpButton" -Text "Hide C-Up Button" -Info "Hide the C-Up Button" -Credits "Admentus" + CreateReduxCheckBox -Name "CLeftButton" -Text "Hide C-Left Button" -Info "Hide the C-Left Button" -Credits "Admentus" + CreateReduxCheckBox -Name "CDownButton" -Text "Hide C-Down Button" -Info "Hide the C-Down Button" -Credits "Admentus" + CreateReduxCheckBox -Name "CRightButton" -Text "Hide C-Right Button" -Info "Hide the C-Right Button" -Credits "Admentus" + CreateReduxCheckBox -Name "Hearts" -Text "Hide Hearts" -Info "Hide the Hearts display" -Credits "Admentus" + CreateReduxCheckBox -Name "Magic" -Text "Hide Magic" -Info "Hide the Magic display" -Credits "Admentus" + CreateReduxCheckBox -Name "Rupees" -Text "Hide Rupees" -Info "Hide the the Rupees display" -Credits "Admentus" + CreateReduxCheckBox -Name "DungeonKeys" -Text "Hide Keys" -Info "Hide the Keys display shown in several dungeons and areas" -Credits "Admentus" + CreateReduxCheckBox -Name "Carrots" -Text "Hide Epona Carrots" -Info "Hide the Epona Carrots display" -Credits "Admentus" + CreateReduxCheckBox -Name "AreaTitle" -Text "Hide Area Title Card" -Info "Hide the area title that displays when entering a new area" -Credits "Admentus" + CreateReduxCheckBox -Name "DungeonTitle" -Text "Hide Dungeon Title Card" -Info "Hide the dungeon title that displays when entering a dungeon" -Credits "Admentus" + CreateReduxCheckBox -Name "Icons" -Text "Hide Icons" -Info "Hide the Clock and Score Counter icons display" -Credits "Admentus" + # CreateReduxCheckBox -Name "Minimaps" -Text "Hide Minimaps" -Info "Hide the Minimap that displays in the overworld and dungeons" -Credits "Admentus" + if ($Settings.Debug.LiteGUI -ne $True) { + CreateReduxCheckBox -Name "Credits" -Text "Hide Credits" -Info "Hide the credits text during the credits sequence" -Credits "Admentus" + } + + # MENU # + + CreateReduxGroup -Tag "Menu" -Text "Menu" + CreateReduxComboBox -Name "Skybox" -Text "Skybox" -Default 4 -Items @("Dawn", "Day", "Dusk", "Night", "Darkness (Dawn)", "Darkness (Day)", "Darkness (Dusk)", "Darkness (Night)") -Info "Set the skybox theme for the File Select menu" -Credits "Admentus" + + +} + + + +#============================================================================================================================================================================================== +function CreateTabAudio() { + # SOUNDS / VOICES # + CreateReduxGroup -Tag "Sounds" -Text "Sounds / Voices" CreateReduxComboBox -Name "ChildVoices" -Column 1 -Text "Child Voice" -Items @("Original") -FilePath ($GameFiles.binaries + "\Voices Child") -Default "Original" -Info "Replace the voice used for the Child Link Model" -Credits "`nMajora's Mask: Korey Cryderman (ported) & GhostlyDark (corrected)`nMelee Zelda: Thiago Alcântara 6 & theluigidude2007 (edits)`nAmara: Amara (ripping) & theluigidude2007 (edits)" CreateReduxComboBox -Name "AdultVoices" -Column 3 -Text "Adult Voice" -Items @("Original") -FilePath ($GameFiles.binaries + "\Voices Adult") -Default "Original" -Info "Replace the voice used for the Adult Link Model" -Credits "`nMajora's Mask: Korey Cryderman (ported) & GhostlyDark (corrected)`nMelee Zelda: Thiago Alcântara 6 & theluigidude2007 (edits)`nAmara: Amara (ripping) & theluigidude2007`nPeach: theluigidude2007" - if ($Settings.Debug.LiteGUI -eq $False) { - CreateReduxComboBox -Name "Instrument" -Column 5 -Text "Instrument" -Items @("Ocarina", "Female", "Voice", "Whistle Harp", "Grind-Organ", "Flute") -Info "Replace the sound used for playing the Ocarina of Time" -Credits "Ported from Rando" - } - + + if ($Settings.Debug.LiteGUI -eq $True) { return } + CreateReduxComboBox -Name "Instrument" -Column 5 -Text "Instrument" -Items @("Ocarina", "Female", "Voice", "Whistle Harp", "Grind-Organ", "Flute") -Info "Replace the sound used for playing the Ocarina of Time" -Credits "Ported from Rando" - if ($Settings.Debug.LiteGUI -ne $True) { # SFX SOUND EFFECTS # + CreateReduxGroup -Tag "SFX" -Text "SFX Sound Effects" $SFX = @("Default", "Disabled", "Soft Beep", "Bark", "Bomb Bounce", "Bongo Bongo Low", "Bow Twang", "Business Scrub", "Carrot Refill", "Cluck", "Great Fairy", "Drawbridge Set", "Guay", "Horse Trot", "HP Recover", "Iron Boots", "Moo", "Mweep!", 'Navi "Hey!"', "Navi Random", "Notification", "Pot Shattering", "Ribbit", "Rupee (Silver)", "Switch", "Sword Bonk", "Tambourine", "Timer", "Zelda Gasp (Adult)") CreateReduxComboBox -Name "LowHP" -Column 1 -Row 1 -Text "Low HP" -Items $SFX -Info "Set the sound effect for the low HP beeping" -Credits "Ported from Rando" @@ -1522,16 +1567,27 @@ function CreateTabAudiovisual() { CreateReduxComboBox -Name "FileCursor" -Column 1 -Row 3 -Text "File Cursor" -Items $SFX -Info "Replace the sound used when moving the cursor in the File Select menu" -Credits "Ported from Rando" CreateReduxComboBox -Name "FileSelect" -Column 3 -Row 3 -Text "File Select" -Items $SFX -Info "Replace the sound used when selecting something in the File Select menu" -Credits "Ported from Rando" - } - # FILE SELECT # - CreateReduxGroup -Tag "FileSelect" -Text "File Select" - $Music = @("None", "File Select", "Hyrule Field", "Market", "Kakariko Village (Child)", "Kakariko Village (Adult)", "Windmill Hut", "Hyrule Castle Courtyard", "Lon Lon Ranch", "Kokiri Forest", "Lost Woods", "Goron City", "Zora's Domain", "Gerudo Valley", "Chamber of the Sages", "Shop", "House", "Potion Shop", - "Inside the Deku Tree", "Dodongo's Cavern", "Inside Jabu-Jabu's Belly", "Forest Temple", "Fire Temple", "Water Temple", "Ice Cavern", "Shadow Temple", "Spirit Temple", "Ganon's Castle Under Ground", - "Battle", "Mini-Boss Battle", "Boss Battle", "Boss Battle 2", "Ganondorf Battle", "Ganon Battle", "End Credits I", "End Credits II", "End Credits III", "End Credits IV") - CreateReduxComboBox -Name "Music" -Column 1 -Text "Music" -Default 2 -Items $Music -Info "Set the skybox music theme for the File Select menu" -Credits "Admentus" - CreateReduxComboBox -Name "Skybox" -Column 3 -Text "Skybox" -Default 4 -Items @("Dawn", "Day", "Dusk", "Night", "Darkness (Dawn)", "Darkness (Day)", "Darkness (Dusk)", "Darkness (Night)") -Info "Set the skybox theme for the File Select menu" -Credits "Admentus" + + # MUSIC # + + $tracks = @() + foreach ($track in $Files.json.music) { $tracks += $track.title } + + CreateReduxGroup -Tag "Music" -Text "Mute Music Tracks" -Columns 1.97 -Height 6 + CreateReduxListBox -Name "SelectMuteTracks" -Items $tracks + + CreateReduxGroup -Tag "Music" -Text "Music" + CreateReduxComboBox -Name "FileSelect" -Text "File Select" -Default "File Select" -Length 220 -Items $tracks -Info "Set the skybox music theme for the File Select menu" -Credits "Admentus" + CreateReduxPanel -X 25 -Row 1 + CreateReduxRadioButton -Name "EnableAll" -Column 1 -Max 4 -SaveTo "Mute" -Checked -Text "Enable All Music" -Info "Keep the music as it is" -Credits "Admentus" + CreateReduxRadioButton -Name "MuteSelected" -Column 2 -Max 4 -SaveTo "Mute" -Text "Mute Selected Music" -Info "Mute the selected music from the list in the game" -Credits "Admentus" + CreateReduxRadioButton -Name "MuteAreaOnly" -Column 3 -Max 4 -SaveTo "Mute" -Text "Mute Area Music Only" -Info "Mute only the area music in the game" -Credits "Admentus" + CreateReduxRadioButton -Name "MuteAll" -Column 4 -Max 4 -SaveTo "Mute" -Text "Mute All Music" -Info "Mute all the music in the game" -Credits "Admentus" + + EnableForm -Form $Redux.Music.SelectMuteTracks -Enable $Redux.Music.MuteSelected.Checked + $Redux.Music.MuteSelected.Add_CheckedChanged({ EnableForm -Form $Redux.Music.SelectMuteTracks -Enable $this.Checked }) } @@ -1541,6 +1597,7 @@ function CreateTabAudiovisual() { function CreateTabDifficulty() { # HERO MODE # + CreateReduxGroup -Tag "Hero" -Text "Hero Mode" CreateReduxComboBox -Name "Damage" -Column 1 -Row 1 -Shift 10 -Text "Damage" -Items @("1x Damage", "2x Damage", "4x Damage", "8x Damage", "OHKO Mode") -Info "Set the amount of damage you receive`nOHKO Mode = You die in one hit" -Credits "Admentus" CreateReduxComboBox -Name "Recovery" -Column 3 -Row 1 -Shift 10 -Text "Recovery" -Items @("1x Recovery", "1/2x Recovery", "1/4x Recovery", "0x Recovery") -Info "Set the amount health you recovery from Recovery Hearts`nRecovery Heart drops are removed if set to 0x" -Credits "Admentus & Rando (No Heart Drops)" @@ -1556,6 +1613,8 @@ function CreateTabDifficulty() { if ($Settings.Debug.LiteGUI -eq $True) { return } + + # MASTER QUEST # CreateReduxGroup -Tag "MQ" -Text "Master Quest" CreateReduxPanel @@ -1563,7 +1622,10 @@ function CreateTabDifficulty() { CreateReduxRadioButton -Name "Select" -Max 3 -SaveTo "Dungeons" -Text "Select" -Info "Select which dungeons you want from Master Quest" -Credits "ShadowOne333" CreateReduxRadioButton -Name "Randomize" -Max 3 -SaveTo "Dungeons" -Text "Randomize" -Info "Randomize the amount of Master Quest dungeons" -Credits "ShadowOne333" + + # MASTER QUEST DUNGEONS # + $Redux.Box.SelectMQ = CreateReduxGroup -Tag "MQ" -Text "Select - Master Quest Dungeons" CreateReduxCheckBox -Name "InsideTheDekuTree" -Text "Inside the Deku Tree" -Checked -Info "Patch Inside the Deku Tree to Master Quest" -Credits "ShadowOne333" CreateReduxCheckBox -Name "DodongosCavern" -Text "Dodongo's Cavern" -Checked -Info "Patch Dodongo's Cavern to Master Quest" -Credits "ShadowOne333" @@ -1578,7 +1640,10 @@ function CreateTabDifficulty() { CreateReduxCheckBox -Name "GerudoTrainingGround" -Text "Gerudo Training Ground" -Checked -Info "Patch Gerudo Training Ground to Master Quest" -Credits "ShadowOne333" CreateReduxCheckBox -Name "InsideGanonsCastle" -Text "Inside Ganon's Castle" -Checked -Info "Patch Inside Ganon's Castle to Master Quest" -Credits "ShadowOne333" + + # RANDOMIZE MASTER QUEST DUNGEONS # + $Redux.Box.RandomizeMQ = CreateReduxGroup -Tag "MQ" -Text "Randomize - Master Quest Dungeons" $Items = @("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12") CreateReduxComboBox -Name "Minimum" -Column 1 -Shift 10 -Text "Minimum" -Default 1 -Items $Items @@ -1592,6 +1657,8 @@ function CreateTabDifficulty() { }) if ($Redux.MQ.Maximum.SelectedIndex -lt $Redux.MQ.Minimum.SelectedIndex) { $Redux.MQ.Maximum.SelectedIndex = $Redux.MQ.Minimum.SelectedIndex } + + EnableForm -Form $Redux.Box.SelectMQ -Enable $Redux.MQ.Select.Checked $Redux.MQ.Select.Add_CheckedChanged({ EnableForm -Form $Redux.Box.SelectMQ -Enable $Redux.MQ.Select.Checked }) EnableForm -Form $Redux.Box.RandomizeMQ -Enable $Redux.MQ.Randomize.Checked @@ -1605,6 +1672,7 @@ function CreateTabDifficulty() { function CreateTabColors() { # EQUIPMENT COLORS # + CreateReduxGroup -Tag "Colors" -Text "Equipment Colors" $Redux.Colors.Equipment = @() $Items = @("Kokiri Green", "Goron Red", "Zora Blue"); $PostItems = @("Randomized", "Custom"); $Files = ($GameFiles.Textures + "\Tunic"); $Randomize = '"Randomized" fully randomizes the colors each time the patcher is opened' @@ -1657,16 +1725,27 @@ function CreateTabColors() { $Redux.Colors.Equipment[5].Add_SelectedIndexChanged({ SetMirrorShieldFrameColorsPreset -ComboBox $Redux.Colors.Equipment[5] -Dialog $Redux.Colors.SetEquipment[5] -Label $Redux.Colors.EquipmentLabels[5] }) SetMirrorShieldFrameColorsPreset -ComboBox $Redux.Colors.Equipment[5] -Dialog $Redux.Colors.SetEquipment[5] -Label $Redux.Colors.EquipmentLabels[5] + + # SPIN ATTACK COLORS # + CreateSpinAttackColorOptions + + # SWORD TRAIL COLORS # + CreateSwordTrailColorOptions + + # FAIRY COLORS # + CreateFairyColorOptions CreateReduxCheckBox -Name "BetaNavi" -Text "Beta Navi Colors" -Info "Use the Beta colors for Navi" -Column 1 -Row 2 + + $Redux.Colors.BetaNavi.Add_CheckedChanged({ EnableElem -Elem $Redux.Colors.Fairy -Active (!$this.checked) }) EnableElem -Elem $Redux.Colors.Fairy -Active (!$Redux.Colors.BetaNavi.Checked) @@ -1678,11 +1757,15 @@ function CreateTabColors() { function CreateTabEquipment() { # CAPACITY SELECTION # + CreateReduxGroup -Tag "Capacity" -Text "Capacity Selection" -Columns 2 CreateReduxCheckBox -Name "EnableAmmo" -Text "Change Ammo Capacity" -Info "Enable changing the capacity values for ammo" CreateReduxCheckBox -Name "EnableWallet" -Text "Change Wallet Capacity" -Info "Enable changing the capacity values for the wallets" + + # EQUIPMENT # + CreateReduxGroup -Tag "Equipment" -Text "Equipment Adjustments" CreateReduxCheckBox -Name "UnsheathSword" -Text "Unsheath Sword" -Column 1 -Info "The sword is unsheathed first before immediately swinging it" -Credits "Admentus" CreateReduxCheckBox -Name "IronShield" -Text "Iron Shield" -Column 2 -Info "Replace the Deku Shield with the Iron Shield, which will not burn up anymore" -Warning "Some custom models do not support the new textures, but will still keep the fireproof shield" -Credits "Admentus (ported), ZombieBrainySnack (textures) & Three Pendants (Debug fireproof ROM patch)" @@ -1693,7 +1776,9 @@ function CreateTabEquipment() { CreateReduxComboBox -Name "MirrorShield" -Text "Mirror Shield" -Column 5 -Items @("Mirror Shield") -FilePath ($GameFiles.Textures + "\Mirror Shield") -Ext @("icon", "bin") -Info "Select an alternative for the appearence of the Mirror Shield" -Credits "Admentus & GhostlyDark (injects)" + # HITBOX # + CreateReduxGroup -Tag "Hitbox" -Text "Weapon Hitboxes" -Height 2.7 CreateReduxSlider -Name "KokiriSword" -Column 1 -Row 1 -Default 3000 -Min 512 -Max 8192 -Freq 512 -Small 256 -Large 512 -Text "Kokiri Sword" -Info "Set the length of the hitbox of the Kokiri Sword" -Credits "Aria Hiroshi 64" CreateReduxSlider -Name "MasterSword" -Column 3 -Row 1 -Default 4000 -Min 512 -Max 8192 -Freq 512 -Small 256 -Large 512 -Text "Master Sword" -Info "Set the length of the hitbox of the Master Sword" -Credits "Aria Hiroshi 64" @@ -1701,7 +1786,10 @@ function CreateTabEquipment() { CreateReduxSlider -Name "BrokenGiantsKnife" -Column 1 -Row 2 -Default 1500 -Min 512 -Max 8192 -Freq 512 -Small 256 -Large 512 -Text "Broken Knife" -Info "Set the length of the hitbox of the Broken Giant's Knife" -Credits "Aria Hiroshi 64" CreateReduxSlider -Name "MegatonHammer" -Column 3 -Row 2 -Default 2500 -Min 512 -Max 8192 -Freq 512 -Small 256 -Large 512 -Text "Megaton Hammer" -Info "Set the length of the hitbox of the Megaton Hammer" -Credits "Aria Hiroshi 64" + + # AMMO # + $Redux.Box.Ammo = CreateReduxGroup -Tag "Capacity" -Text "Ammo Capacity Selection" CreateReduxTextBox -Name "Quiver1" -Text "Quiver (1)" -Value 30 -Info "Set the capacity for the Quiver (Base)" -Credits "GhostlyDark" CreateReduxTextBox -Name "Quiver2" -Text "Quiver (2)" -Value 40 -Info "Set the capacity for the Quiver (Upgrade 1)" -Credits "GhostlyDark" @@ -1719,14 +1807,20 @@ function CreateTabEquipment() { CreateReduxTextBox -Name "DekuNuts2" -Text "Deku Nuts (2)" -Value 30 -Info "Set the capacity for the Deku Nuts (Upgrade 1)" -Credits "GhostlyDark" CreateReduxTextBox -Name "DekuNuts3" -Text "Deku Nuts (3)" -Value 40 -Info "Set the capacity for the Deku Nuts (Upgrade 2)" -Credits "GhostlyDark" + + # WALLET # + $Redux.Box.Wallet = CreateReduxGroup -Tag "Capacity" -Text "Wallet Capacity Selection" CreateReduxTextBox -Name "Wallet1" -Length 4 -Text "Wallet (1)" -Value 99 -Info "Set the capacity for the Wallet (Base)" -Credits "GhostlyDark" CreateReduxTextBox -Name "Wallet2" -Length 4 -Text "Wallet (2)" -Value 200 -Info "Set the capacity for the Wallet (Upgrade 1)" -Credits "GhostlyDark" CreateReduxTextBox -Name "Wallet3" -Length 4 -Text "Wallet (3)" -Value 500 -Info "Set the capacity for the Wallet (Upgrade 2)" -Credits "GhostlyDark" CreateReduxTextBox -Name "Wallet4" -Length 4 -Text "Wallet (4)" -Value 500 -Info "Set the capacity for the Wallet (Upgrade 3)" -Credits "GhostlyDark" -Warning "This wallet is not obtained through regular gameplay" + + # UNLOCK CHILD RESTRICTIONS # + CreateReduxGroup -Tag "Unlock" -Text "Unlock Child Restrictions" CreateReduxCheckBox -Name "Tunics" -Text "Unlock Tunics" -Info "Child Link is able to use the Goron Tunic and Zora Tunic`nSince you might want to walk around in style as well when you are young`nThe dialogue script will be adjusted to reflect this (only for English)" -Credits "GhostlyDark" CreateReduxCheckBox -Name "MasterSword" -Text "Unlock Master Sword" -Info "Child Link is able to use the Master Sword`nThe Master Sword does twice as much damage as the Kokiri Sword" -Credits "GhostlyDark" @@ -1735,7 +1829,10 @@ function CreateTabEquipment() { CreateReduxCheckBox -Name "Boots" -Text "Unlock Boots" -Info "Child Link is able to use the Iron Boots and Hover Boots" -Credits "GhostlyDark" -Warning "The Iron and Hover Boots appears as the Kokiri Boots" CreateReduxCheckBox -Name "MegatonHammer" -Text "Unlock Hammer" -Info "Child Link is able to use the Megaton Hammer" -Credits "GhostlyDark" -Warning "The Megaton Hammer appears as invisible" + + # UNLOCK ADULT RESTRICTIONS # + CreateReduxGroup -Tag "Unlock" -Text "Unlock Adult Restrictions" CreateReduxCheckBox -Name "KokiriSword" -Text "Unlock Kokiri Sword" -Info "Adult Link is able to use the Kokiri Sword`nThe Kokiri Sword does half as much damage as the Master Sword" -Credits "GhostlyDark" CreateReduxCheckBox -Name "DekuShield" -Text "Unlock Deku Shield" -Info "Adult Link is able to use the Deku Shield" -Credits "GhostlyDark" -Warning "The Deku Shield appears as invisible but can still be burned up by fire" @@ -1766,6 +1863,7 @@ function CreateTabEquipment() { function CreateTabAnimations() { # SKIP CUTSCENES # + CreateReduxGroup -Tag "Skip" -Text "Skip Cutscenes" CreateReduxCheckBox -Name "OpeningCutscene" -Text "Opening Cutscene" -Info "Skip the introduction cutscene, so you can start playing immediately" -Credits "Ported from Better OoT" CreateReduxCheckBox -Name "AllMedallions" -Text "All Medallions" -Info "Cutscene for all medallions never triggers when leaving Shadow or Spirit Temple" -Credits "Ported from Better OoT" @@ -1781,7 +1879,10 @@ function CreateTabAnimations() { CreateReduxCheckBox -Name "GanonTower" -Text "Ganon's Tower" -Info "Skip the collapse of Ganon's Tower" -Credits "Ported from Rando" CreateReduxCheckBox -Name "DekuSeedBag" -Text "Deku Seed Bag" -Info "Skip the sequence after obtaining the Deku Seed Bag upgrade in the Lost Woods" -Credits "Ported from Rando" + # SPEEDUP CUTSCENES # + + CreateReduxGroup -Tag "Speedup" -Text "Speedup Cutscenes" CreateReduxCheckBox -Name "OpeningChests" -Text "Opening Chests" -Info "Make all chest opening animations fast by kicking them open" -Credits "Ported from Better OoT" CreateReduxCheckBox -Name "KingZora" -Text "King Zora" -Info "King Zora moves quickly" -Credits "Ported from Better OoT" @@ -1794,12 +1895,19 @@ function CreateTabAnimations() { CreateReduxCheckBox -Name "FairyOcarina" -Text "Fairy Ocarina" -Info "Speedup the sequence where Link obtains the Fairy Ocarina" -Credits "Ported from Rando" CreateReduxCheckBox -Name "GanonTrials" -Text "Ganon's Trials" -Info "Skip the completion sequence of the Ganon's Castle trials" -Credits "Ported from Rando" + + # Restore CUTSCENES # + CreateReduxGroup -Tag "Restore" -Text "Restore Cutscenes" CreateReduxCheckBox -Name "OpeningCutscene" -Text "Opening Cutscene" -Info "Restore the beta introduction cutscene" -Link $Redux.Skip.OpeningCutscene -Credits "Admentus (ROM hack) & CloudModding (GameShark)" + + # ANIMATIONS # + CreateReduxGroup -Tag "Animation" -Text "Link Animations" + CreateReduxCheckBox -Name "Feminine" -Text "Feminine Animations" -Info "Use feminine animations for Link`nThis applies to both models`nIt works best with the Aria model" -Credits "GhostlyDark (ported) & AriaHiro64 (model)" $weapons = "`n`nAffected weapons:`n- Giant's Knife`n- Giant's Knife (Broken)`n- Biggoron Sword`n- Deku Stick`n- Megaton Hammer" CreateReduxCheckBox -Name "WeaponIdle" -Text "2-handed Weapon Idle" -Info ("Restore the beta animation when idly holding a two-handed weapon" + $weapons) -Credits "Admentus" CreateReduxCheckBox -Name "WeaponCrouch" -Text "2-handed Weapon Crouch" -Info ("Restore the beta animation when crouching with a two-handed weapon" + $weapons) -Credits "Admentus" diff --git a/Files/Scripts/Patch.psm1 b/Files/Scripts/Patch.psm1 index 2a0dff01..f44179f3 100644 --- a/Files/Scripts/Patch.psm1 +++ b/Files/Scripts/Patch.psm1 @@ -292,7 +292,7 @@ function WriteDebug([string]$Command, [string[]]$Header, [string]$PatchedFileNam WriteToConsole ("Switch Decompressor: " + $GeneralSettings.AltDecompress.Checked) WriteToConsole "--- End Misc Settings Info ---" - if (!$Patches.Downgrade.Checked) { return } + if (!$Patches.Options.Checked) { return } WriteToConsole WriteToConsole @@ -301,17 +301,17 @@ function WriteDebug([string]$Command, [string[]]$Header, [string]$PatchedFileNam foreach ($item in $Redux.Groups) { foreach ($form in $item.controls) { - if ($form.GetType() -eq [System.Windows.Forms.CheckBox]) { if (IsChecked $form) { WriteToConsole ($item.text + ". " + $form.name) } } - elseif ($form.GetType() -eq [System.Windows.Forms.RadioButton]) { if ( (IsDefault $form -Not $form.checked) -and (IsChecked $form) ) { WriteToConsole ($item.text + ". " + $form.name) } } - elseif ($form.GetType() -eq [System.Windows.Forms.ComboBox]) { if (IsDefault $form -Not $form.selectedIndex) { WriteToConsole ($item.text + ". " + $form.name + " -> " + $form.text) } } - elseif ($form.GetType() -eq [System.Windows.Forms.TrackBar]) { if (IsDefault $form -Not $form.value) { WriteToConsole ($item.text + ". " + $form.name + " -> " + $form.value) } } + if ($form.GetType() -eq [System.Windows.Forms.CheckBox] -and $form.enabled) { if (IsChecked $form) { WriteToConsole ($item.text + ". " + $form.name) } } + elseif ($form.GetType() -eq [System.Windows.Forms.RadioButton] -and $form.enabled) { if ( (IsDefault $form -Not $form.checked) -and (IsChecked $form) ) { WriteToConsole ($item.text + ". " + $form.name) } } + elseif ($form.GetType() -eq [System.Windows.Forms.ComboBox] -and $form.enabled) { if (IsDefault $form -Not $form.selectedIndex) { WriteToConsole ($item.text + ". " + $form.name + " -> " + $form.text) } } + elseif ($form.GetType() -eq [System.Windows.Forms.TrackBar] -and $form.enabled) { if (IsDefault $form -Not $form.value) { WriteToConsole ($item.text + ". " + $form.name + " -> " + $form.value) } } elseif ($form.GetType() -eq [System.Windows.Forms.Panel]) { foreach ($subform in $form.controls) { - if ($subform.GetType() -eq [System.Windows.Forms.CheckBox]) { if (IsChecked $subform) { WriteToConsole ($item.text + ". " + $subform.name) } } - elseif ($subform.GetType() -eq [System.Windows.Forms.RadioButton]) { if ( (IsDefault $subform -Not $subform.checked) -and (IsChecked $subform) ) { WriteToConsole ($item.text + ". " + $subform.name) } } - elseif ($subform.GetType() -eq [System.Windows.Forms.ComboBox]) { if (IsDefault $subform -Not $subform.selectedIndex) { WriteToConsole ($item.text + ". " + $subform.name + " -> " + $subform.text) } } - elseif ($subform.GetType() -eq [System.Windows.Forms.TrackBar]) { if (IsDefault $subform -Not $subform.value) { WriteToConsole ($item.text + ". " + $subform.name + " -> " + $subform.value) } } + if ($subform.GetType() -eq [System.Windows.Forms.CheckBox] -and $form.enabled) { if (IsChecked $subform) { WriteToConsole ($item.text + ". " + $subform.name) } } + elseif ($subform.GetType() -eq [System.Windows.Forms.RadioButton] -and $form.enabled) { if ( (IsDefault $subform -Not $subform.checked) -and (IsChecked $subform) ) { WriteToConsole ($item.text + ". " + $subform.name) } } + elseif ($subform.GetType() -eq [System.Windows.Forms.ComboBox] -and $form.enabled) { if (IsDefault $subform -Not $subform.selectedIndex) { WriteToConsole ($item.text + ". " + $subform.name + " -> " + $subform.text) } } + elseif ($subform.GetType() -eq [System.Windows.Forms.TrackBar] -and $form.enabled) { if (IsDefault $subform -Not $subform.value) { WriteToConsole ($item.text + ". " + $subform.name + " -> " + $subform.value) } } } } } @@ -859,10 +859,8 @@ function PatchRedux([boolean]$Decompress) { UpdateStatusLabel ("Patching " + $GameType.mode + " REDUX...") # Redux patch - if ($Patches.Options.Checked -and (IsWidescreen -Patched) ) { - if (IsSet -Elem $GamePatch.redux.file_widescreen) { ApplyPatch -File $GetROM.decomp -Patch $GamePatch.redux.file_widescreen } - } - elseif (IsSet -Elem $GamePatch.redux.file) { ApplyPatch -File $GetROM.decomp -Patch $GamePatch.redux.file } + if ( (IsChecked $Redux.Graphics.Widescreen) -and (IsSet -Elem $GamePatch.redux.file_widescreen) ) { ApplyPatch -File $GetROM.decomp -Patch $GamePatch.redux.file_widescreen } + elseif (IsSet -Elem $GamePatch.redux.file) { ApplyPatch -File $GetROM.decomp -Patch $GamePatch.redux.file } } } @@ -968,23 +966,6 @@ function IsHiROM([uint32]$Offset) { -#============================================================================================================================================================================================== -function IsWidescreen([switch]$Patched, [switch]$Experimental) { - - if (IsChecked $Redux.Graphics.Widescreen -Not) { return $False } - if ($IsWiiVC) { return $False } - if ($Patched -and !(IsSet -Elem $GamePatch.redux.file_widescreen) ) { return $False } - if ($Settings.Debug.LiteGUI -eq $True) { return $False } - - if (!$Patched -and !$Experimental) { return ( !$Patches.Redux.Checked -and $Settings.Debug.ChangeWidescreen -eq $False) } - elseif ( $Patched -and !$Experimental) { return ( $Patches.Redux.Checked -and $Settings.Debug.ChangeWidescreen -eq $False) } - elseif (!$Patched -and $Experimental) { return ( !$Patches.Redux.Checked -and $Settings.Debug.ChangeWidescreen -eq $True) } - elseif ( $Patched -and $Experimental) { return ( $Patches.Redux.Checked -and $Settings.Debug.ChangeWidescreen -eq $True) } - -} - - - #============================================================================================================================================================================================== function IsReduxOnly() { @@ -1015,5 +996,4 @@ function GetROMVersion() { Export-ModuleMember -Function MainFunction Export-ModuleMember -Function ApplyPatch -Export-ModuleMember -Function Cleanup -Export-ModuleMember -Function IsWidescreen \ No newline at end of file +Export-ModuleMember -Function Cleanup \ No newline at end of file diff --git a/Files/Scripts/Zelda 64.psm1 b/Files/Scripts/Zelda 64.psm1 index 2edbddbc..50a266ef 100644 --- a/Files/Scripts/Zelda 64.psm1 +++ b/Files/Scripts/Zelda 64.psm1 @@ -44,112 +44,6 @@ function GetSFXID([string]$SFX) { -#============================================================================================================================================================================================== -function GetOoTMusicID([string]$Music) { - - $Music = $Music.replace(' (default)', "") - if ($Music -eq "None" -or $Music -eq "Disabled") { return "00" } - elseif ($Music -eq "Hyrule Field") { return "02" } elseif ($Music -eq "Hyrule Field - Initial") { return "03" } elseif ($Music -eq "Hyrule Field - 1") { return "04" } - elseif ($Music -eq "Hyrule Field - 2") { return "05" } elseif ($Music -eq "Hyrule Field - 3") { return "06" } elseif ($Music -eq "Hyrule Field - 4") { return "07" } - elseif ($Music -eq "Hyrule Field - 5") { return "08" } elseif ($Music -eq "Hyrule Field - 6") { return "09" } elseif ($Music -eq "Hyrule Field - 7") { return "0A" } - elseif ($Music -eq "Hyrule Field - 8") { return "0B" } elseif ($Music -eq "Hyrule Field - 9") { return "0C" } elseif ($Music -eq "Hyrule Field - 10") { return "0D" } - elseif ($Music -eq "Hyrule Field - 11") { return "0E" } elseif ($Music -eq "Hyrule Field - Enemy") { return "0F" } elseif ($Music -eq "Hyrule Field - Enemy 1") { return "10" } - elseif ($Music -eq "Hyrule Field - Enemy 2") { return "11" } elseif ($Music -eq "Hyrule Field - Enemy 3") { return "12" } elseif ($Music -eq "Hyrule Field - Enemy 4") { return "13" } - elseif ($Music -eq "Hyrule Field - Standing 1") { return "14" } elseif ($Music -eq "Hyrule Field - Standing 2") { return "15" } elseif ($Music -eq "Hyrule Field - Standing 3") { return "16" } - elseif ($Music -eq "Hyrule Field - Standing 4") { return "17" } elseif ($Music -eq "Dodongo's Cavern") { return "18" } elseif ($Music -eq "Kakariko Village (Adult)") { return "19" } - elseif ($Music -eq "Battle") { return "1A" } elseif ($Music -eq "Boss Battle") { return "1B" } elseif ($Music -eq "Inside the Deku Tree") { return "1C" } - elseif ($Music -eq "Market") { return "1D" } elseif ($Music -eq "Title Theme") { return "1E" } elseif ($Music -eq "House") { return "1F" } - elseif ($Music -eq "Game Over") { return "20" } elseif ($Music -eq "Boss Clear") { return "21" } elseif ($Music -eq "Obtain Item") { return "22" } - elseif ($Music -eq "Enter Ganondorf") { return "23" } elseif ($Music -eq "Obtain Heart Container") { return "24" } elseif ($Music -eq "Prelude of Light") { return "25" } - elseif ($Music -eq "Inside Jabu-Jabu's Belly") { return "26" } elseif ($Music -eq "Kakariko Village (Child)") { return "27" } elseif ($Music -eq "Great Fairy's Fountain") { return "28" } - elseif ($Music -eq "Zelda's Theme") { return "29" } elseif ($Music -eq "Fire Temple") { return "2A" } elseif ($Music -eq "Open Treasure Chest") { return "2B" } - elseif ($Music -eq "Forest Temple") { return "2C" } elseif ($Music -eq "Hyrule Castle Courtyard") { return "2D" } elseif ($Music -eq "Ganondorf's Theme") { return "2E" } - elseif ($Music -eq "Lon Lon Ranch") { return "2F" } elseif ($Music -eq "Goron City") { return "30" } elseif ($Music -eq "Hyrule Field Morning Theme") { return "31" } - elseif ($Music -eq "Spiritual Stone Get") { return "32" } elseif ($Music -eq "Bolero of Fire") { return "33" } elseif ($Music -eq "Minuet of Woods") { return "34" } - elseif ($Music -eq "Serenade of Water") { return "35" } elseif ($Music -eq "Requiem of Spirit") { return "36" } elseif ($Music -eq "Nocturne of Shadow") { return "37" } - elseif ($Music -eq "Mini-Boss Battle") { return "38" } elseif ($Music -eq "Obtain Small Item") { return "39" } elseif ($Music -eq "Temple of Time") { return "3A" } - elseif ($Music -eq "Escape from Lon Lon Ranch") { return "3B" } elseif ($Music -eq "Kokiri Forest") { return "3C" } elseif ($Music -eq "Obtain Fairy Ocarina") { return "3D" } - elseif ($Music -eq "Lost Woods") { return "3E" } elseif ($Music -eq "Spirit Temple") { return "3F" } elseif ($Music -eq "Horse Race") { return "40" } - elseif ($Music -eq "Horse Race Goal") { return "41" } elseif ($Music -eq "Ingo's Theme") { return "42" } elseif ($Music -eq "Obtain Medallion") { return "43" } - elseif ($Music -eq "Ocarina Saria's Song") { return "44" } elseif ($Music -eq "Ocarina Epona's Song") { return "45" } elseif ($Music -eq "Ocarina Zelda's Lullaby") { return "46" } - elseif ($Music -eq "Ocarina Sun's Song") { return "47" } elseif ($Music -eq "Ocarina Song of Time") { return "48" } elseif ($Music -eq "Ocarina Song of Storms") { return "49" } - elseif ($Music -eq "Fairy Flying") { return "4A" } elseif ($Music -eq "Deku Tree") { return "4B" } elseif ($Music -eq "Windmill Hut") { return "4C" } - elseif ($Music -eq "Legend of Hyrule") { return "4D" } elseif ($Music -eq "Shooting Gallery") { return "4E" } elseif ($Music -eq "Sheik's Theme") { return "4F" } - elseif ($Music -eq "Zora's Domain") { return "50" } elseif ($Music -eq "Enter Zelda") { return "51" } elseif ($Music -eq "Goodbye to Zelda") { return "52" } - elseif ($Music -eq "Master Sword") { return "53" } elseif ($Music -eq "Ganon Intro") { return "54" } elseif ($Music -eq "Shop") { return "55" } - elseif ($Music -eq "Chamber of the Sages") { return "56" } elseif ($Music -eq "File Select") { return "57" } elseif ($Music -eq "Ice Cavern") { return "58" } - elseif ($Music -eq "Open Door of Temple of Time") { return "59" } elseif ($Music -eq "Kaepora Gaebora's Theme") { return "5A" } elseif ($Music -eq "Shadow Temple") { return "5B" } - elseif ($Music -eq "Water Temple") { return "5C" } elseif ($Music -eq "Ganon's Castle Bridge") { return "5D" } elseif ($Music -eq "Ocarina of Time") { return "5E" } - elseif ($Music -eq "Gerudo Valley") { return "5F" } elseif ($Music -eq "Potion Shop") { return "60" } elseif ($Music -eq "Kotake & Koume's Theme") { return "61" } - elseif ($Music -eq "Escape from Ganon's Castle") { return "62" } elseif ($Music -eq "Ganon's Castle Under Ground") { return "63" } elseif ($Music -eq "Ganondorf Battle") { return "64" } - elseif ($Music -eq "Ganon Battle") { return "65" } elseif ($Music -eq " Seal of Six Sages") { return "66" } elseif ($Music -eq "End Credits I") { return "67" } - elseif ($Music -eq "End Credits II") { return "68" } elseif ($Music -eq "End Credits III") { return "69" } elseif ($Music -eq "End Credits IV") { return "6A" } - elseif ($Music -eq "Boss Battle 2") { return "6B" } elseif ($Music -eq "Mini Game") { return "6C" } - else { - WriteToConsole ("Could not find music ID for: " + $Music) - return -1 - } - -} - - - -#============================================================================================================================================================================================== -function GetMMMusicID([string]$Music) { - - $Music = $Music.replace(' (default)', "") - if ($Music -eq "None" -or $Music -eq "Disabled") { return "00" } - elseif ($Music -eq "Termina Field") { return "02" } elseif ($Music -eq "Forest Theme") { return "03" } elseif ($Music -eq "Majora's Theme") { return "04" } - elseif ($Music -eq "The Clock Tower") { return "05" } elseif ($Music -eq "Stone Tower Temple") { return "06" } elseif ($Music -eq "Stone Tower Temple Inverted") { return "07" } - elseif ($Music -eq "Missed Event 1") { return "08" } elseif ($Music -eq "Title") { return "09" } elseif ($Music -eq "Mask Salesman") { return "0A" } - elseif ($Music -eq "Song of Healing") { return "0B" } elseif ($Music -eq "Southern Swamp") { return "0C" } elseif ($Music -eq "Ghost Attack") { return "0D" } - elseif ($Music -eq "Mini Game") { return "0E" } elseif ($Music -eq "Sharp's Curse") { return "0F" } elseif ($Music -eq "Great Bay Coast") { return "10" } - elseif ($Music -eq "Ikana Valley") { return "11" } elseif ($Music -eq "Court of the Deku King") { return "12" } elseif ($Music -eq "Mountain Village") { return "13" } - elseif ($Music -eq "Pirates' Fortress") { return "14" } elseif ($Music -eq "Clock Town Day 1") { return "15" } elseif ($Music -eq "Clock Town Day 2") { return "16" } - elseif ($Music -eq "Clock Town Day 3") { return "17" } elseif ($Music -eq "File Select") { return "18" } elseif ($Music -eq "Event Clear") { return "19" } - elseif ($Music -eq "Battle") { return "1A" } elseif ($Music -eq "Boss Battle") { return "1B" } elseif ($Music -eq "Woodfall Temple") { return "1C" } - elseif ($Music -eq "Clock Town Day 1") { return "1D" } elseif ($Music -eq "Forest Ambush") { return "1E" } elseif ($Music -eq "House") { return "1F" } - elseif ($Music -eq "Game Over") { return "20" } elseif ($Music -eq "Boss Clear") { return "21" } elseif ($Music -eq "Item Catch") { return "22" } - elseif ($Music -eq "Clock Town Day 2") { return "23" } elseif ($Music -eq "Complete a Heart Piece") { return "24" } elseif ($Music -eq "Playing Minigame") { return "25" } - elseif ($Music -eq "Goron Race") { return "26" } elseif ($Music -eq "Music Box House") { return "27" } elseif ($Music -eq "Fairy's Fountain") { return "28" } - elseif ($Music -eq "Zelda's Lullaby") { return "29" } elseif ($Music -eq "Rosa Sisters' Dance") { return "2A" } elseif ($Music -eq "Open Chest") { return "2B" } - elseif ($Music -eq "Marine Research Laboratory") { return "2C" } elseif ($Music -eq "The Four Giants") { return "2D" } elseif ($Music -eq "Guru-Guru's Song") { return "2E" } - elseif ($Music -eq "Romani Ranch") { return "2F" } elseif ($Music -eq "Goron Village") { return "30" } elseif ($Music -eq "Mayor Dotour") { return "31" } - elseif ($Music -eq "Ocarina Epona's Song") { return "32" } elseif ($Music -eq "Ocarina Sun's Song") { return "33" } elseif ($Music -eq "Ocarina Song of Time") { return "34" } - elseif ($Music -eq "Ocarina Song of Storms") { return "35" } elseif ($Music -eq "Zora Hall") { return "36" } elseif ($Music -eq "A New Mask") { return "37" } - elseif ($Music -eq "Mini-Boss Battle") { return "38" } elseif ($Music -eq "Small Item Catch") { return "39" } elseif ($Music -eq "Astral Observatory") { return "3A" } - elseif ($Music -eq "Clock Town Cavern") { return "3B" } elseif ($Music -eq "Milk Bar Latte") { return "3C" } elseif ($Music -eq "Meet Zelda (OoT)") { return "3D" } - elseif ($Music -eq "Woods of Mystery") { return "3E" } elseif ($Music -eq "Goron Race Goal") { return "3F" } elseif ($Music -eq "Gorman Race") { return "40" } - elseif ($Music -eq "Race Finish") { return "41" } elseif ($Music -eq "Gorman Bros.") { return "42" } elseif ($Music -eq "Kotake's Potion Shop") { return "43" } - elseif ($Music -eq "Shop") { return "44" } elseif ($Music -eq "Gaebora's Theme") { return "45" } elseif ($Music -eq "Target Practice") { return "46" } - elseif ($Music -eq "Ocarina Song of Soaring") { return "47" } elseif ($Music -eq "Ocarina Song of Healing") { return "48" } elseif ($Music -eq "Inverted Song of Time") { return "49" } - elseif ($Music -eq "Song of Double Time") { return "4A" } elseif ($Music -eq "Sonata of Awakening") { return "4B" } elseif ($Music -eq "Goron Lullaby") { return "4C" } - elseif ($Music -eq "New Wave Bossa Nova") { return "4D" } elseif ($Music -eq "Elegy of Emptiness") { return "4E" } elseif ($Music -eq "Oath to Order") { return "4F" } - elseif ($Music -eq "Sword Training") { return "50" } elseif ($Music -eq "Ocarina Goron Lullaby Intro") { return "51" } elseif ($Music -eq "New Song") { return "52" } - elseif ($Music -eq "Bremen March") { return "53" } elseif ($Music -eq "Ballad of the Wind Fish") { return "54" } elseif ($Music -eq "Song of Soaring") { return "55" } - elseif ($Music -eq "Milk Bar Latte") { return "56" } elseif ($Music -eq "Final Hours") { return "57" } elseif ($Music -eq "Mikau's Tale") { return "58" } - elseif ($Music -eq "Mikau's Tale (Fin)") { return "59" } elseif ($Music -eq "Don Gero's Song") { return "5A" } elseif ($Music -eq "Ocarina Sonata of Awakening") { return "5B" } - elseif ($Music -eq "Ocarina Goron Lullaby") { return "5C" } elseif ($Music -eq "Ocarina New Wave Bossa Nova") { return "5D" } elseif ($Music -eq "Ocarina Elegy of Emptiness") { return "5E" } - elseif ($Music -eq "Ocarina Oath to Order") { return "5F" } elseif ($Music -eq "The Moon") { return "60" } elseif ($Music -eq "Bass and Guitar Session (Half)") { return "61" } - elseif ($Music -eq "Bass and Guitar Session") { return "62" } elseif ($Music -eq "Piano Solo") { return "63" } elseif ($Music -eq "The Indigo-Go's Rehearsal") { return "64" } - elseif ($Music -eq "Snowhead Temple") { return "65" } elseif ($Music -eq "Great Bay Temple") { return "66" } elseif ($Music -eq "New Wave Bosa Nova (Guitar)") { return "67" } - elseif ($Music -eq "New Wave Bosa Nova (Singing)") { return "68" } elseif ($Music -eq "Majora's Wrath Battle") { return "69" } elseif ($Music -eq "Majora's Incarnation Battle") { return "6A" } - elseif ($Music -eq "Majora's Mask Battle") { return "6B" } elseif ($Music -eq "Bass Practice") { return "6C" } elseif ($Music -eq "Drums Practice") { return "6D" } - elseif ($Music -eq "Piano Practice") { return "6E" } elseif ($Music -eq "Ikana Castle") { return "6F" } elseif ($Music -eq "Calling the Four Giants") { return "70" } - elseif ($Music -eq "Kamaro's Dance") { return "71" } elseif ($Music -eq "Cremia's Carriage") { return "72" } elseif ($Music -eq "Keaton") { return "73" } - elseif ($Music -eq "The End/Credits I") { return "74" } elseif ($Music -eq "Forest Ambush") { return "75" } elseif ($Music -eq "Title Screen") { return "76" } - elseif ($Music -eq "Surfacing of Woodfall") { return "77" } elseif ($Music -eq "Woodfall Clear") { return "78" } elseif ($Music -eq "Snowhead Clear") { return "79" } - elseif ($Music -eq "To the Moon") { return "7B" } elseif ($Music -eq "Goodbye Giants") { return "7C" } - elseif ($Music -eq "Tatl and Tael") { return "7D" } elseif ($Music -eq "Moon's Destruction") { return "7E" } elseif ($Music -eq "The End/Credits II") { return "7F" } - else { - WriteToConsole ("Could not find music ID for: " + $Music) - return -1 - } - -} - - - #============================================================================================================================================================================================== function GetMMItemID([string]$Item) { @@ -203,6 +97,53 @@ function GetMMInstrumentID([string]$SFX) { +#============================================================================================================================================================================================== +function MuteMusic([string]$SequenceTable, [string]$Sequence, [byte]$Length) { + + if ( (IsChecked $Redux.Music.MuteSelected -Not) -and (IsChecked $Redux.Music.MuteAreaOnly -Not) -and (IsChecked $Redux.Music.MuteAll -Not) ) { return } + + $include = $force = @() + foreach ($i in 0..($Files.json.music.Count-1)) { + if (IsChecked $Redux.Music.MuteSelected) { if ($Redux.Music.SelectMuteTracks.GetSelected($i)) { foreach ($id in $Files.json.music[$i].id) { $include += (GetDecimal $id) } } } + elseif (IsChecked $Redux.Music.MuteAreaOnly) { if ($Files.json.music[$i].event -ne 1) { foreach ($id in $Files.json.music[$i].id) { $include += (GetDecimal $id) } } } + elseif (IsChecked $Redux.Music.MuteAll) { foreach ($id in $Files.json.music[$i].id) { $include += (GetDecimal $id) } } + #if ($Files.json.music[$i].force -eq 1) { $force += (GetDecimal $Files.json.music[$i].id) } + } + + $tableStart = GetDecimal $SequenceTable + for ($i=1; $i -le $Length; $i++) { if ($include -contains $i) { ChangeBytes -Offset (Get24Bit ($tableStart + $i * 16) ) -Values "00 00 00 00 00 00 00 00 00 00" } } + # MuteMusicTracks -SequenceTable $SequenceTable -Sequence $Sequence -Length $Length -Include $include -Force $force + +} + + + +#============================================================================================================================================================================================== +<#function MuteMusicTracks([byte]$Start=0, [string]$SequenceTable, [string]$Sequence, [byte]$Length, [byte[]]$Include, [byte[]]$Force) { + + $tableStart = GetDecimal $SequenceTable + $sequenceStart = GetDecimal $Sequence + $end = (GetDecimal $SequenceTable) + 16 * $Length + + for ($i=$Start; $i -le $Length; $i++) { + if ($Include -contains $i) { + $tableIndex = (Get8Bit $ByteArrayGame[$tableStart+($i*16)+0]) + (Get8Bit $ByteArrayGame[$tableStart+($i*16)+1]) + (Get8Bit $ByteArrayGame[$tableStart+($i*16)+2]) + (Get8Bit $ByteArrayGame[$tableStart+($i*16)+3]) + $sequenceIndex = Get24Bit ( (GetDecimal $sequence) + (GetDecimal $tableIndex) ) + $stop = Get24Bit ( (GetDecimal $SequenceIndex) + 80 ) + $songType = (GetDecimal $sequenceIndex) + 1 + + if ($ByteArrayGame[$songType] -eq 32) { + $volume = SearchBytes -Start $sequenceIndex -End $stop -Values "DB" + if ($volume -ne -1) { ChangeBytes -Offset (Get24Bit ( (GetDecimal $volume) + 1 ) ) -Values "00" } + } + if ($Force -contains $i) { ChangeBytes -Offset (Get24Bit ($tableStart + $i * 16) ) -Values "00 00 00 00 00 00 00 00 00 00" } + } + } + +}#> + + + #============================================================================================================================================================================================== function ChangeStringIntoDigits([string]$File, [string]$Search, [string]$Value, [switch]$Triple) { @@ -796,6 +737,7 @@ Export-ModuleMember -Function GetMMMusicID Export-ModuleMember -Function GetMMItemID Export-ModuleMember -Function GetMMInstrumentID +Export-ModuleMember -Function MuteMusic Export-ModuleMember -Function ChangeStringIntoDigits Export-ModuleMember -Function ChangeModelsSelection diff --git a/Info/Changelog.txt b/Info/Changelog.txt index 96037b96..40e941bf 100644 --- a/Info/Changelog.txt +++ b/Info/Changelog.txt @@ -1,3 +1,23 @@ +v14.3.0 +- Added "No HUD" option for OoT +- Added "Button Size" options for OoT and MM +- Added "Mute Music" options for OoT and MM +- Added invidual list to mute music per track for OoT and MM +- Added support for adding option-ready List Boxes +- Added support for dynamically reading in music tracks from JSON +- Added menu bar support for the patcher (replaces several window buttons) +- Removed "Change Widescreen" option in settings (alternative WS option is now an extra checkbox in the OoT and MM graphics panel) +- Changed "Audiovisual" tab into "Graphics" and "Audio" tabs for OoT and MM +- Changed phrasing for the "Black Bars" option for OoT +- Changed locked state of GUI when no ROM is selected +- Fixed console log not properly printing out selected options for patching +- Fixed double loading the GUI +- Fixed "Extended Draw" option for OoT? Again? +- Fixed Stray Fairies dialogue for German, Spanish and French languages for Majora's Mask (by GhostlyDark) +- Fixed crash with OoT WS patch (by GhostlyDark) +- Fixed several typos +- Fixed missed Gerudo Membership Card censored texture + v14.2.2 - Fixed Credits and Bazaar crash issues with German & French in OoT diff --git a/Info/ReadMe.txt b/Info/ReadMe.txt new file mode 100644 index 00000000..e0b4cbf2 --- /dev/null +++ b/Info/ReadMe.txt @@ -0,0 +1,247 @@ +Patcher64+ Tool +Join our Discord and feel free to contact us there. +List of credits are accessible within the Patcher64+ Tool. + +--- Support or visit me --- +Discord: https://discord.gg/P22GGzz +GitHub: https://github.com/Admentus64 +Patreon: https://www.patreon.com/Admentus +PayPal: https://www.paypal.com/paypalme/Admentus/ + +--- Setup --- +If you are using Windows 10, skip to step 5. +For those using Windows 7 or 8.1, please following the instructions below: +1) Click here: https://mega.nz/folder/Z2Rk1ZLK#mcOTLlJH6B3IxLIeJYUmDg +2) Download the PowerShell .msi installer and the WMT 5.1 package for your coressponding OS. If you are a 32-bit user, go into the 32-bit folder before downloading any files. +3) Install WMT 5.1 first. You'll have to reboot your system. +4) Install PowerShell 7. +5) You should now be able to launch the .ps1 file doing a right click -> Run with PowerShell. + +--- Zelda 64 Options Documentation & Sources --- +- https://github.com/ShadowOne333/Zelda64-Redux-Documentation (General) +- https://docs.google.com/spreadsheets/d/1Ihccm8noxsfHZfN1E3Gkccov1F27WXXxl-rxOuManUk (Female Pronouns Script) +- www.youtube.com/user/skilarbabcock (Model Replacements) +- www.youtube.com/c/malonrose (Model Replacements) +- www.youtube.com/channel/UC3071imQKR5cEIobsFHLW9Q (voices / patches) + +--- Original Redux Sources --- +- https://github.com/MarocZan/Ocarina-of-Time-REDUX (www.romhacking.net/hacks/5138) +- https://github.com/MarocZan/Majora-s-Mask-REDUX (www.romhacking.net/hacks/5122) +- www.romhacking.net/hacks/4963 +- www.romhacking.net/hacks/2594 +- www.romhacking.net/hacks/5440 +- www.romhacking.net/forum/index.php?topic=29403.0 + +--- WARNING --- +If you're upgrading from a previous version and are using the Files\Settings folder from the previous version, you may encounter some issues. +Removing or deleting all files from that folder and restarting fixes the issue. + +Reports have been going around that the compiled .exe file for the Patcher64+ Tool is considered dangerous and a virus. +I can absolutely assure you that the code present in the .exe is the exact same code found in the source code files included with each release. +Nothing more is added, and nothing less is removed. +The .exe is generated by using PS2EXE. If you do not trust the .exe file, you can stick to using the .ps1 file instead. +As said, it uses the exact same source code, so you won't be missing any features. + + + +=============== +=== GENERAL === +=============== + +Patches ROM or Virtual Console WAD files with patches. +The Patcher64+ Tool can switch to either Wii VC or Native mode. +Wii VC mode handles VC WAD titles while Native mode handles ROM files directly. +Native mode skips most of the code used in Wii VC mode, which results in a faster patching. +Supported ROM files can be found in .NES, .SFC, .SFM, .N64, .Z64 and .V64 +The Patcher64+ Tool only supports the N64, NES and SNES consoles currently. + +Keep in mind that: + +a) Patching Majora's Mask, Super Smash Bros., Paper Mario requires their respective modes and not Free Mode, since both VC WAD titles have applied specific compression to their ROM and Boot DOL. + +b) Free Mode and Inject ROM will not work with ROMs not meant for their console mode for the Wii's Virtual Console + +c) NES titles requires the console mode to be set to NES mode due to their ROM file being stored differently + + + +=============== +=== OPTIONS === +=============== + +Options included: +- Change between Native Mode (uses regular ROM files) or Wii VC mode (uses .WAD files) +- Change between Consoles +- Change Game Mode for a different set of included patches +- Patch a ROM or Wii VC WAD file with one of the included patches in their respective game mode +- Patch a ROM or Wii VC WAD file with a custom BPS/IPS/Xdelta/VCDiff/PPF3 patch file + +Wii VC Mode exclusive options incude: +- Inject a custom ROM into a Wii VC WAD +- Only patch the Wii VC WAD with the chosen selected modifications +- Extract the ROM contained within the Wii VC WAD only + +The following games have included patches: +- The Legend of Zelda: Ocarina of Time (OoT) +- The Legend of Zelda: Majora's Mask (MM) +- Super Mario 64 (SM64) +- Paper Mario (PP) +- Super Smash Bros. (Smash) +- Mario Kart 64 (MK64) +- The Legend of Zelda: A Link to the Past (ALttP) +- Super Mario World (SMW) +- Super Metroid (SM) +- The Legend of Zelda (TLoZ) +- Zelda II: The Adventure of Link (TAoL) + + + +=============== +=== PATCHES === +=============== + +The following patches are included: +- GZ Practice ROM (OoT) +- The Legend of Zelda: The Missing Link (OoT) +- The Legend of Zelda: Dawn & Dusk (OoT) +- The Legend of Zelda: Master of Time (OoT) +- The Fate of the Bombiwa (OoT) +- The Legend of Zelda: Nimpize Adventure (OoT) +- Ocarina of Time Puzzling (OoT) +- KZ Practice ROM (MM) +- KZ Practice ROM Lite (MM) +- Majora's Mask: Masked Quest (MM) +- Majora's Mask: Master Quest (MM) +- SM64: Single-Screen / SM64: Split-Screen Multiplayer (SM64) +- SM64: Star Road / SM64: Star Road Single-Screen Multiplayer (SM64) +- SM64: Arguably Better Edition (SM64) +- SM64: Last Impact (SM64) +- Super Mario 64 Land (SM64) +- Super Mario Odyssey 64 (SM64) +- SM64: Ocarina of Time (SM64) +- Paper Mario: Hard Mode (PP) +- Paper Mario: Hard Mode+ (PP) +- Paper Mario: Insane Mode (PP) +- Super Smash Bros. Remix (Smash) +- CPUs use human items including shells (MK64) +- Parallel Worlds / Parallel Remodel (ALttP) +- Super Kaizo World 1/2/3 (SMW) + + + +============= +=== EXTRA === +============= + +The following games have support for Redux: +- The Legend of Zelda: Ocarina of Time (OoT) +- The Legend of Zelda: Majora's Mask (MM) +- The Legend of Zelda: A Link to the Past (ALttP) +- Super Metroid (SM) +- The Legend of Zelda (TLoZ) +- Zelda II: The Adventure of Link (TAoL) + +The Redux patch for The Legend of Zelda: A Link to the Past is shown as a patch option instead and thus always forced. + +The following games have support for Additional Options: +- The Legend of Zelda: Ocarina of Time (OoT) +- The Legend of Zelda: Majora's Mask (MM) +- Super Mario 64 (SM64) +- The Legend of Zelda: A Link to the Past (ALttP) +- Super Metroid (SM) +- The Legend of Zelda (TLoZ) +- Zelda II: The Adventure of Link (TAoL) + +Some other patches for Super Mario 64 also support Additional Options. + +Ocarina of Time and Majora's Mask also have support for language selection. + +Supported languages for Ocarina of Time include: +- English +- Japanese +- Spanish +- Polish +- Russian +- Chinese + +Supported languages for Majora's Mask include: +- English +- Polish +- Russian + +Redux patches aim to enhance the base experience of the game, such improved game mechanics and some other quality of life changes +For example having items on dedicated buttons (D-Pad) for Ocarina of Time and Majora's Mask. +Options offers smaller individual changes that can be applied individually from each other, such as Widescreen support. + + + +==================== +=== INSTRUCTIONS === +==================== + +- To run this patcher, right click and select "Run with PowerShell". + +- Select the current console and game in the "Current Game Mode" tab. Select "Free Game Selection" to freely inject a ROM or freely patch it with a patch file for any Wii VC WAD file you have. + +- Drag and Drop your WAD file or select it with the [...] button. + +- Select checkboxes in the "Virtual Console - Patch Options" tab to apply specific patches to your Wii VC WAD game. Certain patch buttons will force specific checkboxes from the "Virtual Console - Patch Options" tab + +- Apply and customize Redux, Additional Options of Language if it is present for the current selected game and patch. + +- The Game/Channel Title and GameID can be overwritten be checking the checkbox. If unchecked, the Game/Channel Title and GameID will follow default values as determined by the game patch buttons. + +- The "Patch VC Emulator Only" options will only apply the chosen fixes from the "Virtual Console - Patch Options" tab. Custom Channel Title and GameID is also supported with this button. + +- A custom ROM injection requires a ROM (.NES, .SFC, .SFM, .Z64, .N64 or .V64) to be set, either by Drag and Drop it or by selecting it with the [...] button. + +- Free patching requires a patch file (.BPS, .IPS, .Xdelta, .VCDiff or .PPF3) to be set, either by Drag and Drop it or by selecting it with the [...] button. + +- Press one of the game patch buttons for included premade patches. Alternatively press the Inject ROM button or Patch BPS button. Then wait for the patcher tool to finish. + +- The patched ROM or WAD file is created in the same path as the original and the original is preserved. + + + +================================== +=== PATCH OPTIONS DESCRIPTIONS === +================================== + +--- Checkboxes --- +- Enable Redux Include the Redux patch into the selected patch. This checkbox is only shown if it is supported. +- Enable Options Allow for the customization of the ROM. This checkbox is only shown if it is supported. +- Downgrade Downgrade a ROM to the first revision, but only works with No-Intro US ROMs. This checkbox is only shown if it is supported. + +--- Buttons --- +- Select Options Additional Options in general can be fully customized in here. +- Patch Selected Option Run the patching process. + +--- Select Options --- +- Main Contains several options in general to customize. +- Audiovisual Contains graphics, music and sound related options to customize. +- Difficulty Contains difficulty-related options to customize. +- Colors Contains options in where HUD elements and ingame objects can be customized with different color schemes. +- Equipment Contains options to change the behaviour of equipable or usable items, such as ammunition. +- Cutscenes Contains cutscene- and skip-related options to customize, often to speed-up the flow of the game. +- Redux Additional Options that are require the Redux patch can be customized in here. +- Language Different languages can be customized in here, as well as specific options that are language-dependant. + + + +===================================== +=== VC PATCH OPTIONS DESCRIPTIONS === +===================================== + +--- Checkboxes --- +- Remove All T64 Remove all injected custom textures by the Virtual Console in the .T64 format. +- Remove Filter Remove the dark filter injected by the Virtual Console to display the original N64 gamma. +- Expand Memory Expand the available RAM memory, but invalidates existing AR/Gecko codes. +- Remap D-Pad Remap the D-Pad to their four D-Pad button directions instead of toggling the minimap. +- Remap L Button Remap L to it's actual L button (ex. for showing the interface in SM64). +- Remap C-Down Remap C-Down to toggle the minimap button. +- Remap Z Button Remap Z, ZL and ZR to toggle the minimap. +- Leave D-Pad Up Keep D-Pad for toggling the minimap. + +--- Buttons --- +- Patch VC Emulator Only Only apply the VC Patch Options to the ROM, and nothing else. +- Extract ROM Only Only extract the ROM from the WAD, and nothing else. Appears in the same folder as the WAD itself. diff --git a/Patcher64+ Tool.ps1 b/Patcher64+ Tool.ps1 index 8f77edab..4bd9dea1 100644 --- a/Patcher64+ Tool.ps1 +++ b/Patcher64+ Tool.ps1 @@ -17,6 +17,7 @@ if ( (Get-ExecutionPolicy) -eq "Restricted") { Add-Type -AssemblyName 'System.Windows.Forms' Add-Type -AssemblyName 'System.Drawing' [Windows.Forms.Application]::EnableVisualStyles() +#Write-Host $((Get-PSCallStack)[1]).Command @@ -24,8 +25,8 @@ Add-Type -AssemblyName 'System.Drawing' # Setup global variables $global:ScriptName = "Patcher64+ Tool" -$global:VersionDate = "2021-07-25" -$global:Version = "v14.2.2" +$global:VersionDate = "2021-08-20" +$global:Version = "v14.3.0" $global:SystemDate = Get-Date -Format yyyy-MM-dd-HH-mm-ss $global:CommandType = $MyInvocation.MyCommand.CommandType.ToString() @@ -106,8 +107,9 @@ function CheckScripts() { if (!(Test-Path -PathType Leaf -LiteralPath ($Paths.Scripts + "\MQ.psm1"))) { $FatalError = $True; $string += "{0}" + $Paths.Scripts + "\MQ.psm1" } if (!(Test-Path -PathType Leaf -LiteralPath ($Paths.Scripts + "\Patch.psm1"))) { $FatalError = $True; $string += "{0}" + $Paths.Scripts + "\Patch.psm1" } if (!(Test-Path -PathType Leaf -LiteralPath ($Paths.Scripts + "\Settings.psm1"))) { $FatalError = $True; $string += "{0}" + $Paths.Scripts + "\Settings.psm1" } + if (!(Test-Path -PathType Leaf -LiteralPath ($Paths.Scripts + "\VC.psm1"))) { $FatalError = $True; $string += "{0}" + $Paths.Scripts + "\VC.psm1" } if (!(Test-Path -PathType Leaf -LiteralPath ($Paths.Scripts + "\Zelda 64.psm1"))) { $FatalError = $True; $string += "{0}" + $Paths.Scripts + "\Zelda 64.psm1" } - + if (!$FatalError) { return } $Dialog = New-Object System.Windows.Forms.Form @@ -262,13 +264,6 @@ if (!$FatalError) { InitializeEvents } -#Write-Host (GetMessage -ID "000A") -#$output = GetMessage -ID "000A" -HexOutput -#Write-Host $output -#Write-Host (GetMessageOffset -ID "000A") -#SetMessage -ID "000A" -Old "Biggoron's Sword" -New "Biggoron's Blade" -ASCII - - # Show the dialog to the user if (!$FatalError) { $MainDialog.ShowDialog() | Out-Null }