diff --git a/Data/Sys/ApprovedInis.json b/Data/Sys/ApprovedInis.json index a73ed032f0..abcc1133b6 100644 --- a/Data/Sys/ApprovedInis.json +++ b/Data/Sys/ApprovedInis.json @@ -1,1046 +1 @@ -{ - "D43J01": { - "title": "ZELDA OCARINA MULTI PACK", - "CAB9CED2D904F12CCB21F5B1DE9B5433620C3E13": "loophack" - }, - "DPOJ8P": { - "title": "PHANTASY STAR ONLINE EPISODE I&II TRIAL EDITION", - "90BA66E25640A538FEFA6693715718139079FA7B": "Bypass Modem Detection" - }, - "G2BE5G": { - "title": "Black & Bruised", - "7FFF6BDD93713BEDFD23739C32B86153FA19AEA0": "Disable interlaced rendering" - }, - "G2BP7D": { - "title": "Black & Bruised", - "56E85D7285F10348E1E5354E379918D07E79EDA9": "Disable interlaced rendering" - }, - "G2VE08": { - "title": "Viewtiful Joe 2", - "3ED033396382424533A263A39687A0961EC994A6": "16:9 Widescreen" - }, - "G2VP08": { - "title": "Viewtiful Joe 2", - "EEBC3C5F04BB70AFCA1A4C3D638335CDC9142BA2": "16:9 Widescreen" - }, - "G3RP52": { - "title": "Shrek 2", - "7F6B7743F0DDD3704B15882330E490103AE24E36": "16:9 Widescreen", - "4C9A8572A35F1DB85BBB2F32ED34288A343F1FC0": "60fps" - }, - "G3YP52": { - "title": "Shrek SuperSlam (PAL)", - "FD61581C593EA34DD358AE33819FAB310F2CE961": "Force PAL60", - "3D102AFEE2F4945894E74BB702ED3ED2294C6FEC": "16:9 Widescreen" - }, - "G4AEE9": { - "title": "Harvest Moon: Magical Melody", - "8C2564CF47BB6A9B57D712C90E17F459B0BB6CCD": "16:9 Aspect Ratio Fix" - }, - "G4ME69": { - "title": "The Sims: Bustin Out GameCube", - "6FC6E5D91693FAABE25CC721F2121CB0B5CA9D12": "16:9 Widescreen" - }, - "G5SE7D": { - "title": "Spyro: A Hero's Tail", - "16119398BFE241A84151C046E0BC5BCF89D22049": "16:9 Widescreen", - "A5F2FB2B3BFF61F34F8AB1DD5A912A0FD8DFA720": "Remove Bloom" - }, - "G5SP7D": { - "title": "Spyro: A Hero's Tail", - "718AA8BD831961C33114852FDA75BB58F768F46A": "16:9 Widescreen" - }, - "G8ME01": { - "title": "Paper Mario", - "F6E8264CF14D0189219C1E2D20C4182F190F4B88": "16:9 Aspect Ratio Fix - Normal HUD", - "8C2FC3FC6F7766AA8E87425BF3BDD2E46E73DE71": "16:9 Aspect Ratio Fix - Centered HUD", - "8EA4C7B80ADE3E8FEC28EEFA3A046B6B04162E81": "16:9 Aspect Ratio Fix - Stretched HUD", - "AE3DBE2604CA0660165CA870C4B80E2B523C9475": "16:9 Aspect Ratio Fix - Centered HUD with letterboxing" - }, - "G8MJ01": { - "title": "Paper Mario", - "631CE99BDE3F1475303C00C67E3C130D4EB2547B": "16:9 Aspect Ratio Fix - Normal HUD", - "B3181CA1AAB11EAE9132184DA48D76E775AC0A24": "16:9 Aspect Ratio Fix - Centered HUD", - "81F7AD591F12A01DE82850457ECF147998D1238F": "16:9 Aspect Ratio Fix - Stretched HUD", - "904C0EEEF16D761F7BDF7099DEB384DD9AB26E00": "16:9 Aspect Ratio Fix - Centered HUD with letterboxing" - }, - "G8MP01": { - "title": "Paper Mario", - "FB26AA84B0CB787705E84E869B649307776A2839": "16:9 Aspect Ratio Fix - Normal HUD", - "75AF5D7FA49BE9C3C73EA1482B49CD9B36CE817E": "16:9 Aspect Ratio Fix - Centered HUD", - "C5F8A81520193418C07C7BC4881F02BE9C4DC9BC": "16:9 Aspect Ratio Fix - Stretched HUD", - "C2E5003E74551DF693A7CB814850CA51D77549EF": "16:9 Aspect Ratio Fix - Centered HUD with letterboxing" - }, - "G9SE8P": { - "title": "Sonic Heroes", - "CD043229AC47AC93D537B6A0725A2D0BB6FEF4E8": "16:9 Widescreen" - }, - "G9SJ8P": { - "title": "Sonic Heroes", - "C55EF90B542AA3973352A232629A828BC22A8509": "16:9 Widescreen" - }, - "G9SP8P": { - "title": "Sonic Heroes", - "9521774ADEE769CFCCE86F8170FE626387E73019": "16:9 Widescreen" - }, - "GAFE01": { - "title": "Animal Crossing", - "D24F6D9BE5D79D3C795C2844634A0214BB68B5DA": "16:9 Widescreen", - "F9A812FF62A20D5440CAB79DB6AFAE068457A10E": "Make Game Save Copyable (donny2112)" - }, - "GAL": { - "title": "Super Smash Bros Melee", - "DBDB50216B22CDFFF77BDD80261CD0FF75803D3B": "Trophy Viewer" - }, - "GALE01r0": { - "title": "Super Smash Bros. Melee", - "9DC8D90D986FAC175F45006AFF20CF00EDFBE053": "Normal C Stick Functionality in Singleplayer Modes", - "18B4159E77013EDFE499A33281B771C442970E3B": "Proper 16:9 Widescreen Support", - "DC2BCA7D99EBDE1DC7C68CA6AC7F543B93FD6A67": "Properly Display in 4:3" - }, - "GALE01r1": { - "title": "Super Smash Bros. Melee", - "F6030959C1CAC92F37287D556F18B3C5298FAD5B": "Normal C Stick Functionality in Singleplayer Modes" - }, - "GALE01r2": { - "title": "Super Smash Bros. Melee", - "CEDF18354CDCFC49398551C629E51B053331A55B": "Proper 16:9 Widescreen Support", - "6B92D95F0EEA165EA84FD753F74B0A9E2079C2D7": "PAL Stock Icons", - "BCD918A72368B2A30E797C76994E7539A1C0B5D9": "Normal C Stick Functionality in Singleplayer Modes [Zauron]", - "CFDEEA8AD2A99394BFFEA7211EF03394E7471FA9": "Disable Rumble", - "D32ED4CD685F3FF649F7E749E8C182C657013918": "Widescreen Support v1.2 [Dan Salvato]" - }, - "GALP01": { - "title": "Super Smash Bros. Melee", - "BFCBE098FE8679B9140A48EA1D8620D5A369697C": "Proper 16:9 Widescreen Support", - "5BA2933B8365E21553AA273B91954A4C722B1035": "Properly Display in 4:3", - "4817F202678559291F9F76B46DC7561A45D00B77": "Normal C Stick Functionality in Singleplayer Modes" - }, - "GAZE69": { - "title": "Harry Potter and the Prisoner of Azkaban", - "BC281053C5266B21FDDC6C8996A6021DEA03D459": "60FPS" - }, - "GBLE52": { - "title": "BLOODY ROAR(R): PRIMAL FURY", - "C0F3AB3BBC9B21F4BF25F44E48CF1CD36D2B3F45": "16:9 Widescreen" - }, - "GBLP52": { - "title": "BLOODY ROAR(R): PRIMAL FURY", - "797040CB097BFD369490A1BE29659929D76CE6F7": "16:9 Widescreen" - }, - "GBRJ18": { - "title": "BLOODY ROAR(R): PRIMAL FURY", - "B3C867AB34D90E2E9C5B799D800F4C191DE279FA": "16:9 Widescreen" - }, - "GBSE8P": { - "title": "BEACH SPIKERS", - "4148D453F61A5B81E53669335BC667E651865C76": "16:9 Widescreen" - }, - "GBSP8P": { - "title": "BEACH SPIKERS", - "6CB029AE768BA5B9995D5F12C1EBB37B3D1FE242": "16:9 Widescreen" - }, - "GC6E01": { - "title": "Pokémon Colosseum", - "2F64F98686E62B60E466E931A9EBCD19A750FF4E": "Allow Memory Card saving with Savestates", - "DE932CCAD1B5EB1FAA8D08733BD0D3940C78382A": "16:9 Widescreen" - }, - "GC6J01": { - "title": "ポケモンコロシアム", - "D8F327304A88FBC717BB1F775494C5F864B9E8D2": "Allow Memory Card saving with Savestates", - "5CB4934396ABD43F7147EA13521C952728933874": "16:9 Widescreen" - }, - "GC6P01": { - "title": "Pokémon Colosseum", - "EDEE0E28EEA1834868F2865336290FFBDFB9C6DA": "Allow Memory Card saving with Savestates", - "05C9016BF58A628A3FD7B16E1B9BB0769A14846F": "16:9 Widescreen [Ralf]" - }, - "GC8JA4": { - "title": "クラッシュ・バンディクー 爆走!ニトロカート", - "843297019804192AF1FC660BC85F4B10891D0BA3": "Fix C4 texture tiling (used for buttons and some character icons)" - }, - "GCBE7D": { - "title": "Crash Bandicoot: The Wrath of Cortex", - "478DA1D596D8513C343850719155813CB61A56DD": "16:9 Widescreen" - }, - "GCBP7D": { - "title": "Crash Bandicoot: The Wrath of Cortex", - "478DA1D596D8513C343850719155813CB61A56DD": "16:9 Widescreen", - "DF2C4DDF082C9E67919443C5ACC485AB2CF7F8D0": "60Hz" - }, - "GCCE01": { - "title": "FINAL FANTASY Crystal Chronicles", - "6C107FEC15C76201233CA2645EB5FAB4FF9751CE": "Fix buffer overrun bug (crash at Goblin Wall)", - "483BDB94615C690045C3759795AF13CE76552286": "Fix GBA connections", - "BA0066518E7EA8599A81F8496BD39DE20CC369D6": "16:9 Widescreen" - }, - "GCCJGC": { - "title": "FINAL FANTASY Crystal Chronicles", - "4C104D24329172F5D0F8649DE9423B931FE72CA3": "Fix GBA connections" - }, - "GCCP01": { - "title": "FINAL FANTASY Crystal Chronicles", - "2EAA60A8A115AD68A795109FB59E4A726D29016D": "Fix GBA connections", - "2580E7379633CF4DE13B9EC945DB17543477828A": "16:9 Widescreen" - }, - "GCN": { - "title": "Crash Nitro Kart", - "601FE183C9524ACCF068874DABD73921C86769CF": "Fix C4 texture tiling (used for buttons and some character icons)" - }, - "GCVEEB": { - "title": "Cubivore", - "ADA686C90189D1D7D23E23E525EFC96EFA104BB9": "16:9 Widescreen" - }, - "GD7E70": { - "title": "Dragon Ball Z: Budokai", - "95A17AFAAFD83E96CD1CC6242B8667F6A3DC8416": "Deinterlacing Fix" - }, - "GDREAF": { - "title": "Dead to Rights", - "F8EAE60FEB0CFB4477FDC4B9E136B63F68DFA63A": "Fix audio issues" - }, - "GDRP69": { - "title": "Dead to Rights", - "E23D98B2CE185C3993A40F2495D37E41B971BF91": "Fix audio issues" - }, - "GEDE01": { - "title": "Eternal Darkness", - "21068C3CE905FB0CFFAA7408A93154AF8A5295A2": "Fix startup hang" - }, - "GEDJ01": { - "title": "Eternal Darkness", - "7061F3CF11BF64D3BA7F32CCF2BAC42FF3614AB6": "Fix startup hang" - }, - "GEDP01": { - "title": "Eternal Darkness", - "6F1B00517CBA30BEB738EAA90E71221378CD570D": "Fix startup hang" - }, - "GEME7F": { - "title": "Egg Mania: Eggstreme Madness", - "CB04E00918C9C0F161715D21D046ED6620F7ADEF": "Force Progressive Scan" - }, - "GEMJ28": { - "title": "Egg Mania: Eggstreme Madness", - "CC2057185BB10DAD4A361412D024DFD586EE0130": "Force Progressive Scan" - }, - "GEZE8P": { - "title": "BillyHatcher", - "5CEBCFBEA4E444495D2FD6D8B6607DFB2349CC1B": "16:9 Widescreen [gamemasterplc]" - }, - "GF7E01": { - "title": "STARFOX ASSAULT", - "C59CCA3EF8A5E97B32EB64DB9AE80E652ED281C6": "16:9 Widescreen [gamemasterplc]" - }, - "GF7P01": { - "title": "STARFOX ASSAULT", - "1230053B5C347B62E432EFD6635433A183D18619": "16:9 Widescreen [gamemasterplc]" - }, - "GFQEA4": { - "title": "Frogger's Adventures: The Rescue", - "5CD9568CE58EF82EB371594667015C9B799454B9": "16:9 Widescreen" - }, - "GFZJ01": { - "title": "F-Zero GX", - "F659D22CB1DFF15C3915D7630D838EED8DB0BA48": "Make Save Copyable" - }, - "GFZP01": { - "title": "F-Zero GX", - "F659D22CB1DFF15C3915D7630D838EED8DB0BA48": "Make Save Copyable" - }, - "GGTE01": { - "title": "ChibiRobo!", - "EF128E7A9C22676834F558BA0F0F7FD8B9028727": "16:9 Widescreen [darkludx]", - "5232A937D1D813FF58DD71D716284ED6AB535689": "Simple 60FPS", - "D40344111D989EA009901F8B1C45B5AC8D39E6D2": "Experimental 60fps" - }, - "GGTJ01": { - "title": "ChibiRobo!", - "D62E777A2F019D7BD0AFFBCE876BD9AE408F1667": "Simple 60FPS", - "BEC2310911003AF9E4B984A4051E0F885B8CC825": "Experimental 60fps" - }, - "GGTP01": { - "title": "ChibiRobo!", - "FA9CD330ECDA01275DA88BD0803DE47757D16A4E": "16:9 Widescreen", - "43FAD0DDD130BE1E4C8C7603EF6CA7DAA0DF5EE9": "Simple 60FPS", - "EB1ACD613BB432A3391CFFF1F0145A6ACE66B210": "Experimental 60fps" - }, - "GGVD78": { - "title": "The SpongeBob SquarePants Movie", - "FE52240DF6D132C15A8324E8A477F2BF2250D208": "EFB Copy Fix", - "9D07DBB5EC2FAA47F2E4587FBD75FD6F3E7E91B0": "16:9 Widescreen" - }, - "GGVE78": { - "title": "The SpongeBob SquarePants Movie", - "5E38E10829D5F77243C95E9E41518BB3ADE24139": "EFB Copy Fix", - "86E561452235BF88D41884558EF34F54CE0FEB48": "16:9 Widescreen" - }, - "GGVP78": { - "title": "The SpongeBob SquarePants Movie", - "5E38E10829D5F77243C95E9E41518BB3ADE24139": "EFB Copy Fix", - "F9B2108D833084FA36A53E00F1647A9579F847D3": "16:9 Widescreen" - }, - "GGVX78": { - "title": "The SpongeBob SquarePants Movie", - "740F2D1C01DA39D1760D96B03974A48E6F74578D": "EFB Copy Fix" - }, - "GHAE08": { - "title": "Resident Evil 2", - "9799AFF8463EC86C9230E31E2627E141F0C129D3": "Fix audio issues" - }, - "GHAJ08": { - "title": "Biohazard 2", - "B45A8FC32D14567B8D6C95F303E00A72C0E1D344": "Fix audio issues" - }, - "GHAP08": { - "title": "Resident Evil 2", - "BC7F3CFC97593AA2055C370C175950DC478D2709": "Fix audio issues" - }, - "GHLE69": { - "title": "Harry Potter and the Sorcerer's Stone", - "742BFC79D8F0BA5D6215772B58F5A0EADD7BFAFF": "16:9 Widescreen" - }, - "GHQE7D": { - "title": "The Simpsons: Hit & Run", - "520E5F718D3BD1291C55021776091E0DE0FB4822": "16:9 Widescreen" - }, - "GHQP7D": { - "title": "The Simpsons: Hit & Run", - "AAE14CDC13A0C082A850DED85417100A8C8A0687": "16:9 Widescreen", - "884A33613AE8D916128E3FF39B3AA9F63DAADC58": "60Hz" - }, - "GHSE69": { - "title": "Harry Potter and the Chamber of Secrets", - "3538CDBD13FA939B7BA5F0F82253401AFDD1E2CD": "16:9 Widescreen" - }, - "GHSP69": { - "title": "Harry Potter and the Chamber of Secrets", - "409754E2EBB6F05DEE1AFC647E25B15D462638FF": "16:9 Widescreen" - }, - "GICD78": { - "title": "The Incredibles", - "3A94591A149AE88C150AB3320BBC909FE54BAEA5": "EFB Copy Fix" - }, - "GICE78": { - "title": "The Incredibles", - "5BF55685B8867A85EAA9C86571309B17BF7DED32": "EFB Copy Fix" - }, - "GICF78": { - "title": "The Incredibles", - "85AABAEB9A59C4F96D9330A3B884F6D757DA1683": "EFB Copy Fix" - }, - "GICH78": { - "title": "The Incredibles", - "3A94591A149AE88C150AB3320BBC909FE54BAEA5": "EFB Copy Fix" - }, - "GICJG9": { - "title": "The Incredibles", - "969134EA21A160EBDA91C0870266E7D1707FDC43": "EFB Copy Fix" - }, - "GICP78": { - "title": "The Incredibles", - "13B158CF41F5412BC637F50644193D43CC3DA49A": "EFB Copy Fix" - }, - "GIQE78": { - "title": "The Incredibles: Rise of the Underminer", - "E15AA1E30D26E5735D68AAADE436E7B7E4A33A35": "EFB Copy Fix" - }, - "GIQJ8P": { - "title": "The Incredibles: Rise of the Underminer", - "FFFCB76E98DDB06A7BBBC0AA73C869C87EB787D6": "EFB Copy Fix" - }, - "GIQX78": { - "title": "The Incredibles: Rise of the Underminer", - "485DA99FAB35646DAA2A138B0315361495ABE778": "EFB Copy Fix" - }, - "GIQY78": { - "title": "The Incredibles: Rise of the Underminer", - "485DA99FAB35646DAA2A138B0315361495ABE778": "EFB Copy Fix" - }, - "GK2": { - "title": "Spider-Man 2", - "6B4C59C2A2C5D71C7A38C8513A76E6467E307A26": "16:9 Widescreen [Vague Rant]" - }, - "GK2E52": { - "title": "Spider-Man 2", - "8F2397930A50C3C176188526EB9612578F9CBCE5": "60 FPS" - }, - "GK4": { - "title": "Baten Kaitos Origins", - "4652969A4DA869FD28F2CAA3869A38F5C2AAFEB1": "16:9 Widescreen" - }, - "GKB": { - "title": "Baten Kaitos Eternal Wings and the Lost Ocean", - "4652969A4DA869FD28F2CAA3869A38F5C2AAFEB1": "16:9 Widescreen Region-Free" - }, - "GKBPAF": { - "title": "Baten Kaitos Eternal Wings and the Lost Ocean", - "8E4E0ABA0E6D102A33206F34F4DEE63159B3CB4F": "60Hz" - }, - "GKDP01": { - "title": "Doshin the Giant", - "DF4657937DE730107B636C73E959277EB963D210": "16:9 Widescreen", - "6740D7B914CC897AF50798C0AB391965294FD1E1": "60Hz" - }, - "GKWJ18": { - "title": "DreamMix TV World Fighters", - "696570101FA040778EAD310377C484C846D87430": "16:9 Widescreen" - }, - "GKRPB2": { - "title": "Ribbit King", - "40D06A5C7A3D873ABC73DEDF573738C2E3E37FF0": "60Hz", - "69C01A4F91D991CF866237FED94A138308FC104F": "16:9 Widescreen" - }, - "GKYE01": { - "title": "Kirby Air Ride", - "6520EF1B7D88F00747B120A3A010458602ED989D": "16:9 Widescreen" - }, - "GKYJ01": { - "title": "Kirby Air Ride", - "47B8EF7D02831AA5C375C698797BF2D5475FEFF2": "16:9 Widescreen" - }, - "GKYP01": { - "title": "Kirby Air Ride", - "69413C75036D2975716066E6574461B981FF0124": "16:9 Widescreen" - }, - "GLEE08": { - "title": "Resident Evil 3: Nemesis", - "7355F358CAC6F418D37E4C23E64F7867D46E4FC9": "Fix audio issues" - }, - "GLEJ08": { - "title": "BioHazard 3: Last Escape", - "12B24A6D7389A2AC5AB75FC0BF8493E7661F2A73": "Fix audio issues" - }, - "GLEP08": { - "title": "Resident Evil 3: Nemesis", - "81BD39F5527552DE89E3B59BA86298900F0A3168": "Fix audio issues" - }, - "GLSD64": { - "title": "Gladius", - "5E2A73717BD66EF647846DD64C33BC80AD9B5227": "Fix freeze in opening cutscene" - }, - "GLSE64": { - "title": "Gladius", - "1CE78E7954415A44DF693C0BB879AA5A4FF059A3": "Fix freeze in opening cutscene" - }, - "GLSF64": { - "title": "Gladius", - "009B0C4AD80A9C28C987934D254C2C4AACC9A07A": "Fix freeze in opening cutscene" - }, - "GLSP64": { - "title": "Gladius", - "3D0894616C9A7FA5ED91C1D2F461BF14DF47ECEC": "Fix freeze in opening cutscene", - "8E7A544C10E7A5E2F0304A0D2586879627EF6586": "16:9 Widescreen", - "B67144E87B54246137142992A3BC83DC13BE68A7": "60Hz" - }, - "GM4E01": { - "title": "Mario Kart: Double Dash!!", - "78BE50F93E81A1972CA31ABC318949E366E82BD0": "16:9 Widescreen v2", - "87D1A6A3E29ADA03B0D29C2F1841C18E62DB0A15": "16:9 Menu Backgrounds Add-On" - }, - "GM4P01": { - "title": "Mario Kart: Double Dash!!", - "6D950B6EEFD6D304E1A424355B74A595D32BDF2F": "16:9 Widescreen v2", - "87D1A6A3E29ADA03B0D29C2F1841C18E62DB0A15": "16:9 Menu Backgrounds Add-On" - }, - "GMBE8P": { - "title": "Super Monkey Ball", - "D12DE9E3941BCE6EB50B8DA92140E09AFC0104C8": "16:9 Widescreen", - "0151A6683E1FBFD20096807C54A6952C4A4BAD40": "NA Stretched HUD" - }, - "GMBP8P": { - "title": "Super Monkey Ball", - "8A688981F33A2C53882EF08FCF20B88AD43EF417": "16:9 Widescreen" - }, - "GMOP70": { - "title": "Micro Machines", - "CE4D298616BD42E4D8F8936B325CD1FD7F5B956B": "16:9 Widescreen", - "0CD2CC787A5FF551901E41C85C8AAC02017ECB89": "60Hz" - }, - "GMPE01": { - "title": "Mario Party 4", - "D7249AC3C949FEB860CF4350C5B7B79AC16569F1": "QOL - Show Controller Port Number of Who Paused", - "E232B27564E9AA0C32DE163C9C056317A7B2B12E": "QOL - Allow Digital Presses for Map Screen", - "59607671BFC4717ACAF9807BB7EB0D9F982866D4": "QOL - Automatically Advance Text Boxes", - "CAEA37F3FEF89400513353EB85875F2A3AF4C03E": "QOL - Disable Advance on Results", - "F75FBBD838C5B84FF687962FBA9195B217DE132C": "QOL - Faster Boot Time", - "19F264DE7F07EAC9433CA4B591BEBA1EC976C9F1": "QOL - Increased Board Speed", - "C70391D4961A0E820DE40141C89341369A9F021B": "QOL - Increased Taunt Capabilities", - "F4E6913CF034E5778B9F9CA5FF448FF1B78B3333": "QOL - Instant Text Display", - "93621947019532F02C25937FD3EEEE21A788CB07": "QOL - Rumble Always Off", - "4F98592DB3DEE3857469A8D8605FAF4BD6F7C76D": "16:9 Widescreen" - }, - "GMPJ01": { - "title": "Mario Party 4", - "A795811F2F0C92D9DCABDE97D9E39B47B1DBCEFD": "16:9 Widescreen" - }, - "GMPP01": { - "title": "Mario Party 4", - "A795811F2F0C92D9DCABDE97D9E39B47B1DBCEFD": "16:9 Widescreen" - }, - "GMSE01": { - "title": "Super Mario Sunshine", - "BD718F961DBA5372B1D0257D454D535746C453A0": "Widescreen", - "2805B1A0DD53EB64877D375D10F667700955720F": "60FPS" - }, - "GMSJ01": { - "title": "Super Mario Sunshine", - "E8112A01040A06460E368F142C5D1FD0B4085D94": "16:9 Widescreen" - }, - "GMSJ01r0": { - "title": "Super Mario Sunshine", - "9894B5B6B5215844D48411021FF8EECFE851D79D": "60FPS" - }, - "GMSJ01r1": { - "title": "Super Mario Sunshine", - "2DB69DB7A3753D543CD85CA4C77B4EF0AED7486E": "60FPS" - }, - "GMSP01": { - "title": "Super Mario Sunshine", - "0B7B89BF0868393076EF5F9DBD689DD0EDBCB84C": "Widescreen", - "D07009B710B3BBC6B12E54ED6A7969D58197EDAF": "60FPS" - }, - "GNHE5d": { - "title": "NHL HITZ 2002", - "89393A24E2336841AA4CD0AD3BE1C9A66B89E9EF": "Nop Hack" - }, - "GOCE5D": { - "title": "RoadKill", - "E4D800B90F16A15D9252EED1B2A23AEAF5CD230A": "16:9 Widescreen" - }, - "GOME01": { - "title": "Mario Power Tennis", - "C33CBBF6F22195BF626104B4827200B3EE1CF30C": "16:9 Widescreen" - }, - "GOMP01": { - "title": "Mario Power Tennis", - "874784CCD4AC3DC9C69654E471C18AD0F5E4D9AE": "16:9 Widescreen" - }, - "GONE69": { - "title": "Medal of Honor: European Assault", - "6412A67E1C26E146A9526AFC9F0EE517B214069D": "Widescreen Hack Culling" - }, - "GP4J18": { - "title": "Hudson Selection Vol. 3: Bonk's Adventure", - "BF4D2D6AF66F285E81173B3B20D5369DB6FB351B": "16:9 Widescreen" - }, - "GP5E01": { - "title": "Mario Party 5", - "5BA3648D18346EDC97B23475D4748C637E6095A2": "QOL - Show Controller Port Number of Who Paused", - "41EF84663008668682BB75DC8B874E38669AE041": "QOL - Automatically Advance Text Boxes", - "6C36BEFE751131298BC8B39012892F6A6903CE60": "QOL - Disable Advance on Results", - "8E952E6E12639AC20F6F9FDD150C12F0C294DF43": "QOL - Faster Boot Time", - "4BD72B8ED75ED8EFB3329C104BAD114FDDB8AD2C": "QOL - Increased Board Speed", - "C5BA3C9D386D09DD6CB9242A12A0D041BEB93160": "QOL - Increased Capsule Throwing Speed", - "C360EBDDCB0237076052C983BD9719411CA67CDE": "QOL - Increased Taunt Capabilities", - "2CD4A06A3B9C18CC9EA2A2DEBD96E066CD1D700A": "QOL - Instant Text Display", - "5ED053787332DB5EEB8B963BA5DF197B58C6BB75": "16:9 Widescreen" - }, - "GP5J01": { - "title": "Mario Party 5", - "81E69B6BEE85E06805EC24E1CFEA9405BF459DF8": "16:9 Widescreen" - }, - "GP5P01": { - "title": "Mario Party 5", - "FD4FCCB97C06F0173A30D4CC9A99422B2C0ABA9B": "16:9 Widescreen" - }, - "GP6E01": { - "title": "Mario Party 6", - "E645DF70CE0266D174D917A817A7FBEEE974A9F0": "QOL - Auto Advance Text Boxes", - "B089A3C80D5DA86ABF6258F8BFB1DC78BB54A973": "QOL - Faster Boot Time", - "798E566B621F6A32BF23C588E76EAC0776E2A8A3": "QOL - Disable Advance on Results", - "501C52ACF117950888A66DB2BEDBDFD7D9B20235": "QOL - Increased Board Speed", - "845F439278DA8CBC225658FF4E2F82D707422BFB": "QOL - Increased Orb Throwing Speed", - "0AED27341A06186AD92D5725C0B9693CA8F85B7B": "QOL - Increased Taunt Capabilities", - "5AAC4E21927D4AEE7AC329CE793D4CDAEDDF7A3F": "QOL - Instant Text Display", - "DF5D2F068D76ABF2B1C294D413B9154B8C356929": "QOL - Show Controller Port Number of Who Paused", - "B502AF0887792E9B140516D14BA75F99772C17BE": "16:9 Widescreen" - }, - "GP6J01": { - "title": "Mario Party 6", - "88F50F8298F82E3E5C161277BD4A985CE893A9D0": "16:9 Widescreen" - }, - "GP6P01": { - "title": "Mario Party 6", - "DCCE59CA987624C753F0A86BEBA4287635901C93": "16:9 Widescreen", - "138A86D43B5830BFE1926F58C0A4FBE2971BB02D": "Remove Black Bars" - }, - "GP7E01": { - "title": "Mario Party 7", - "5E6F8C6C87D5944DB18A4E4F9A45F61EE87A4163": "QOL - Show Controller Port Number of Who Paused", - "82338AB5D82A7F398B4EB674CA4866DD1F4A1E65": "QOL - Auto Advance Text Boxes", - "D2F9CC0B9E52136E77187395FB7DA9B64B2C3B30": "QOL - Controller Options Always Acesssible", - "1939B5C575AE8FF6890BDDDD1B3FEA472D8CABA0": "QOL - Faster Boot Time", - "A644551162A61DE7997B2A84F5BFDEFFD3FC2FB5": "QOL - Disable Advance on Results", - "7E06A2EBCFECADB8074152B489984237A6FE9F21": "QOL - Increased Board Speed", - "6671BEE71920D6B845AE1257AFE3AB3B95CD6FBD": "QOL - Increased Orb Throwing Speed", - "9F60923F95FFE709CCD06966CD2DF743263934D1": "QOL - Increased Taunt Capabilities", - "48FA6002E42DA9BB83ABC980A32C60CE3B21C4FC": "QOL - Instant Text Display", - "87EBF72D90503EBC5CE9BC994795669E48A92A4A": "16:9 Widescreen" - }, - "GP7J01": { - "title": "Mario Party 7", - "A081F0729068D233E99DC00C64E36CA33C945640": "16:9 Widescreen" - }, - "GP7P01": { - "title": "Mario Party 7", - "75D6CDA4EA301A71F7701A0487544E79136850B9": "16:9 Widescreen", - "6D0D5B7CA58C38A3147F8ED981B5B21CC6C519CD": "60Hz" - }, - "GPIE01": { - "title": "Pikmin v1.1 NTSC", - "A25CDDB79991F090BD7F12840AD06F13BD5CCF95": "No Blur" - }, - "GPIE01r0": { - "title": "Pikmin v1.0 NTSC", - "2B58166A66644F984E64077A6245C94C79B51063": "16:9 Widescreen" - }, - "GPIE01r1": { - "title": "Pikmin v1.1 NTSC", - "9A1545AB4E2B9216B95AFFA83420D723512DA8C8": "16:9 Widescreen", - "3337C767EAA21D30C6CFEAE9985FFCABFC63E2E3": "60FPS", - "CBD15E9104929F0631713AE482475CB2B90E71F2": "Disable Pikmin optimizations" - }, - "GPIP01": { - "title": "Pikmin PAL", - "4ED79A548DBD7DBD35928A2F1138315FF103E260": "Turn off blur", - "5AE44D5B0E0D4C412B453B95CF5A41DBA4D685E6": "16:9 Widescreen", - "AE59FF751E167632AE283F38CC4B96BDF7B9B81F": "60Hz" - }, - "GPNE08": { - "title": "P.N.03", - "ED3D9BB08C5F1D21BC8D5C73155C00E3C25C466F": "16:9 Widescreen [Ralf, darkludx]" - }, - "GPNP08": { - "title": "P.N.03", - "469B18FE8219031D355557B836EF02B625040A4F": "16:9 Widescreen [Ralf]" - }, - "GPOE8P": { - "title": "PHANTASY STAR ONLINE EPISODE I&II", - "17EB6CFB408EF27D44C053A1336C3B87B6A05018": "Save Validation Code v1.2/Plus", - "304DB311F2107E88EBCE058535B266F9263AA8E2": "Make Save Copyable NTSC Port - PLUS/1.2", - "9F6259132453DCC0607EAB35DB182C76818F2F9F": "Save Validation Code v 1.0/v1.1", - "7A4B3E596BA4FDA8F3FCF984079B3F44CB2D6AB3": "Make Save Copyable NTSC Port - 1.0/1.1" - }, - "GPOE8Pr0": { - "title": "PHANTASY STAR ONLINE EPISODE I&II", - "99986BB1D4ABE45C429D48B01BFB578FEA69C14F": "16:9 Widescreen" - }, - "GPOE8Pr1": { - "title": "PHANTASY STAR ONLINE EPISODE I&II", - "5563671A6702785FFE106DAB7EF3F4FE6D9F705B": "16:9 Widescreen (Plus) [Ralf]" - }, - "GPOP8P": { - "title": "PHANTASY STAR ONLINE EPISODE I&II", - "40EC1590DB26C7C58D00E3065F1E404341EF0E73": "Game Save Valid", - "2F5FB98927DAFF141D1CCD1EACA8AF626397E284": "Game Save copyable", - "DF133C61C29D5CFA87A2A785C962C205F80E6D04": "16:9 Widescreen" - }, - "GPVE01": { - "title": "PIKMIN 2 NTSC", - "E5B51080CFD518FE584CF3B61A1099CD032479D6": "16:9 Widescreen", - "271C40F5FC113896717DB0EEFED42E788CA3AC81": "60 FPS" - }, - "GPVP01": { - "title": "PIKMIN 2 PAL", - "78F3C9A789827B063A6701987262276A66ABD82B": "16:9 Widescreen" - }, - "GQPE78": { - "title": "SpongeBob SquarePants: Battle for Bikini Bottom", - "880B114E9A308084CAB92C004A9EE067B371C310": "EFB Copy Fix" - }, - "GQPP78": { - "title": "SpongeBob SquarePants: Battle for Bikini Bottom", - "5D9A14954AE8D639C9B254F3BA73A70F284BBC8D": "EFB Copy Fix" - }, - "GQSDAF": { - "title": "TALES OF SYMPHONIA 1", - "CA82C44B2E8FC5C184E3FF935BC89661B7DB55D6": "16:9 Widescreen", - "952165FD78543EB6D2F5230F7570B0513773D332": "60Hz", - "DEB7DF358423F0EF30C9FD49F4F14590836D52A6": "No Blur" - }, - "GQSEAF": { - "title": "TALES OF SYMPHONIA 1", - "EF448CF1FA6A15EB2661EA5338703C13D52EF65B": "Remove Blur", - "48AFE1D32843C6B5AD4337A49F15FD447DF2A752": "16:9 Widescreen" - }, - "GQSFAF": { - "title": "TALES OF SYMPHONIA 1", - "76C30E1737CC5C3B5DE32532B5F9A5CD50B690F8": "16:9 Widescreen", - "986BAE5103CDE9286D2D34FD28FE2540D0759AAB": "No Blur" - }, - "GR2E52": { - "title": "Lost Kingdoms II", - "5F55CE7DA7E1E3261CF2FF88F34CDA63BA511003": "16:9 Widescreen" - }, - "GR2J52": { - "title": "Lost Kingdoms II", - "D3C6FA690BED07BFA65C2E1FCDE2FFA5AA0EEEE4": "16:9 Widescreen" - }, - "GR2P52": { - "title": "Lost Kingdoms II", - "D7BCADD4E76B5E3F7D9D463F55A2777528E37E94": "16:9 Widescreen" - }, - "GRNE52": { - "title": "LOST KINGDOMS", - "483D74C47AD1012606D591A226AB3144C7FB201C": "16:9 Widescreen" - }, - "GRNJ52": { - "title": "LOST KINGDOMS", - "949281B7221B20680B7BC29E4754B73A326EBE85": "16:9 Widescreen" - }, - "GRNP52": { - "title": "LOST KINGDOMS", - "11051B094FE5A8B2E73060BFF786C1588E36979A": "16:9 Widescreen" - }, - "GROE5Z": { - "title": "Road Trip: The Arcade Edition", - "FADBAB5EC280CF8ED4C9536A33F4184BA210C9B0": "16:9 Widescreen" - }, - "GRYE41": { - "title": "Rayman Arena", - "AF0A575EB6071EAC0D2EC3D2EA30A23EB05A4192": "Disable Culling to Fix Rise and Shrine Hang" - }, - "GSAE01r0": { - "title": "Star Fox Adventures", - "0D529180B9B28BB06E21EDBDBA61C17EEF0FFB7F": "viWidth 704 Aspect Ratio Fix" - }, - "GSAE01r1": { - "title": "Star Fox Adventures", - "CB15ED22625690A5DBE4607FE30160125421461D": "viWidth 704 Aspect Ratio Fix" - }, - "GSAP01": { - "title": "Star Fox Adventures", - "749EDA62B1B73354599929F1B50E992E111C5493": "viWidth 704 Aspect Ratio Fix" - }, - "GSNE8P": { - "title": "Sonic Adventure 2 Battle", - "D90F66C0D46D9BEF27C8E13BC8804DB1F382C8B1": "60Hz Aspect Ratio Fix", - "CFDF3FA5B48B347E49E8E521D7BE47FCC9A5CBF4": "16:9 Widescreen" - }, - "GSNJ8P": { - "title": "Sonic Adventure 2 Battle", - "98DF9D67DE77F66A4B09F25C5621805DEB40865B": "60Hz Aspect Ratio Fix" - }, - "GSNP8P": { - "title": "Sonic Adventure 2 Battle", - "D90F66C0D46D9BEF27C8E13BC8804DB1F382C8B1": "60Hz Aspect Ratio Fix" - }, - "GSO": { - "title": "Sonic Mega Collection (US)", - "0D60D0593F6DA28B1236381B22082506B9533F0E": "16:9 Widescreen Region Free" - }, - "GSPE69": { - "title": "The Simpsons: Road Rage", - "80E18A8963F4EFD3C03494C95934452FCB6E521B": "16:9 Widescreen" - }, - "GSPP69": { - "title": "The Simpsons: Road Rage", - "162E87E9F5511CD82216811055836C11B374C45B": "16:9 Widescreen", - "E5DF2DF34D2F0BDEE4205C891576511EC572C5DC": "60Hz" - }, - "GSWE64": { - "title": "Star Wars Rogue Squadron II: Rogue Leader", - "6480326CCA8FF64A4868EC6E9FDE9F38819A75A1": "16:9 Widescreen", - "85F65E4B627641862C1A6091D29A3BB0626B04C3": "Disable Dithering" - }, - "GTEE01": { - "title": "1080: Avalanche", - "6B57EBCB9CC0ACE2EDA0F13E3F1F55F3FABC3A26": "16:9 Widescreen" - }, - "GTEP01": { - "title": "1080: Avalanche", - "72785784363C46180AF8E388348FD77667E7D382": "16:9 Widescreen" - }, - "GTOJAF": { - "title": "TALES OF SYMPHONIA 1", - "53A2EDF113F2ED7E54A16AA0E73FDB2C44C79DE5": "Remove Blur" - }, - "GTZE41": { - "title": "Disney's Tarzan Untamed", - "ECCE87E0006475C73E7D936AA0150BD20166F9EF": "16:9 Widescreen" - }, - "GTZP41": { - "title": "Disney's Tarzan Untamed", - "62D8F159B93167171E0860D96C4BB32A5BF5648B": "16:9 Widescreen" - }, - "GU2D78": { - "title": "2 Games in 1: The Incredibles / Finding Nemo", - "CFF4C3F932B08732627572EDA1A0CD2D9C71AE0C": "EFB Copy Fix" - }, - "GU2F78": { - "title": "2 Games in 1: The Incredibles / Finding Nemo", - "CFF4C3F932B08732627572EDA1A0CD2D9C71AE0C": "EFB Copy Fix" - }, - "GU3D78": { - "title": "2 Games in 1: The SpongeBob SquarePants Movie / Tak 2: The Staff of Dreams", - "8A0E3114862ADFE421874211BD6F5220AA425BF5": "EFB Copy Fix" - }, - "GU3X78": { - "title": "2 Games in 1: The SpongeBob SquarePants Movie / Tak 2: The Staff of Dreams", - "E3303FDAE7ECA17A72EDC440C32D94648A6453A0": "EFB Copy Fix" - }, - "GU4Y78": { - "title": "2 Games in 1: Nickelodeon SpongeBob Schwammkopf: Der Film + Nickelodeon SpongeBob Schwammkopf: Schlacht um Bikini Bottom", - "D54767785E139A8BC8C4B75573FBD5A0B686D8E3": "EFB Copy Fix" - }, - "GUNE5Dr0": { - "title": "Gauntlet - Dark Legacy", - "C942EBCBE8A487C25E296EC1FAC2358DA1487DBD": "16:9 Widescreen", - "A441630EC5FF0EB74D2243A3092D22E69C6BEA02": "60Hz" - }, - "GUNE5Dr1": { - "title": "Gauntlet - Dark Legacy", - "39BD84CBE2AFACFEDEC5E9020D1A8B0D36DD53F9": "16:9 Widescreen", - "05779F1A3D0C43305D52A95447D612CB424942C0": "60Hz" - }, - "GUNP5D": { - "title": "Gauntlet - Dark Legacy", - "FE3BA1DAA1AF278A7839E27BF466B0BA0B390EC2": "16:9 Widescreen", - "3B20499A3F8D1D7CCA5B0015F2D80ECED25842A6": "50Hz" - }, - "GV4E69": { - "title": "MVP Baseball 2005", - "8679891FCAA250FCFF670B26E0CB9875900D17FD": "Fix 2D Rendering" - }, - "GVJE08": { - "title": "Viewtiful Joe", - "09EFDA75D876A675121C8344D8FDD09A70A1A846": "16:9 Widescreen" - }, - "GVJP08": { - "title": "Viewtiful Joe", - "93938F4C6112C91549F2B52E6259170F7501EC07": "16:9 Widescreen" - }, - "GVPE69": { - "title": "MVP Baseball 2004", - "3159CA79B0A890131763EA6CB163684BEE886E3F": "Fix 2D Rendering" - }, - "GVSE8P": { - "title": "Virtua Striker 2002", - "4CE9C491160A4B631142EE9CE802C694163F1CA3": "16:9 Widescreen" - }, - "GWRE01": { - "title": "WAVE RACE / BLUE STORM", - "AC42770B06662BE1DC863EC80F44B5E034C63664": "16:9 Widescreen" - }, - "GWRP01": { - "title": "WAVE RACE / BLUE STORM", - "9DDDFAB28C4BD35CF64050E1EF684DC042B1AFFA": "16:9 Widescreen" - }, - "GWWE01": { - "title": "WARIO WORLD", - "98B2E75D8E1CED4A964D3129A5DC10E30538CAA6": "16:9 Widescreen" - }, - "GWWJ01": { - "title": "WARIO WORLD", - "2DAD9A5E2A140F02CCBA727C4BE7C74BAC156778": "16:9 Widescreen" - }, - "GWWP01": { - "title": "WARIO WORLD", - "2DAD9A5E2A140F02CCBA727C4BE7C74BAC156778": "16:9 Widescreen" - }, - "GWZE01": { - "title": "Dance Dance Revolution: Mario Mix", - "9EFC191DE6D21A1681FE241AB2EE4A131259F317": "16:9 Widescreen" - }, - "GXCE01": { - "title": "Custom Robo", - "901A1E78A3A0124F55548507D3B3707125C64A8A": "16:9 Widescreen" - }, - "GXSE8P": { - "title": "Sonic Adventure DX", - "4214C74DFB8A74FC3AA4A643E869BC4D9A38EDA0": "Aspect Ratio Fix", - "F50BBA440184FC77A4DFFAA58FF2BB888E2E072F": "16:9 Widescreen" - }, - "GXSJ8P": { - "title": "Sonic Adventure DX", - "227909607984BBC3D36AAC7DB9DFE385F3363C49": "Aspect Ratio Fix" - }, - "GXXE01": { - "title": "Pokémon XD: Gale of Darkness", - "64FAA15062F0D0C319F904BBDE9C4489A25D6369": "Allow Memory Card saving with Savestates", - "2CA66DFAB3CC67D76AE06A378B1F0E9CBA5F3D68": "16:9 Widescreen" - }, - "GXXJ01": { - "title": "ポケモンXD 闇の旋風ダーク・ルギア", - "8293802260536FA2EF2EFDAB5266DE36BB88DE1B": "Allow Memory Card saving with Savestates" - }, - "GXXP01": { - "title": "Pokémon XD: Gale of Darkness", - "3CAFBC4AE6FC5CE9F53377F86AB5BD8F1BC8861A": "Allow Memory Card saving with Savestates", - "02716B2585BEE74F8FCDD97A78F6A0D3DC7F331B": "16:9 Widescreen" - }, - "GYFPA4": { - "title": "Yu-Gi-Oh! The Falsebound Kingdom", - "402ED10AC842041AB4B39AE8F2D81B2D7AEF9CB4": "60Hz" - }, - "GZ2E01": { - "title": "The Legend of Zelda: Twilight Princess [GC]", - "FCB673D46E716C7F63C618B8D8BF83AEE0B501F0": "Hyrule Field Speed Hack", - "E7521ED27BFC972628906CBE8D5403ED57253BB8": "16:9 Widescreen v2" - }, - "GZ2J01": { - "title": "The Legend of Zelda: Twilight Princess [GC]", - "FCB673D46E716C7F63C618B8D8BF83AEE0B501F0": "Hyrule Field Speed Hack", - "F985A0A58D8E2B23E8A557FAFF8D367AFFEADD07": "16:9 Widescreen" - }, - "GZ2P01": { - "title": "The Legend of Zelda: Twilight Princess [GC]", - "0F63623D4D984B7706F718F57C0ABDB6DBADCF8D": "Hyrule Field Speed Hack", - "CAC38B0D334B925A57AA3118D35932B8A185137E": "16:9 Widescreen v2" - }, - "GZ3E70": { - "title": "Dragon Ball Z 2", - "167F9E9A9B372CB3A01F308B46FF1403F8599C51": "16:9 Widescreen", - "2E163CB5FE724EB49B31CF607E5B9AFDA031DDD5": "Deinterlacing Fix" - }, - "GZDP70": { - "title": "Godzilla: Destroy All Monsters Melee", - "2E424E0BBAE6EF5D6A8FB4224EA1D0746BAC37D3": "16:9 Widescreen" - }, - "GZLE01": { - "title": "The Legend of Zelda The Wind Waker", - "78EA34CEF8E01701491C280F155F1C12EC9BF1A2": "Remove Distance Blur", - "9FA864EE7DD8CE7FF538EB4E0243F20137430BD8": "16:9 Widescreen" - }, - "GZLJ01": { - "title": "The Legend of Zelda The Wind Waker", - "E03B61989025CA33937E63A057E6E40A403811BC": "16:9 Widescreen" - }, - "GZLP01": { - "title": "The Legend of Zelda The Wind Waker", - "14BECBEA4DD281EBD0F7FE7DEE8020B6F2418ACD": "Remove Distance Blur", - "3EFFF6C52B5633A1729FAA6883D8579E77F7D057": "16:9 Widescreen" - }, - "GZPE70": { - "title": "Zapper: One Wicked Cricket", - "7142F2495507AC7136992128ED0FCA6BC72B61F4": "16:9 Widescreen" - }, - "GZPP70": { - "title": "Zapper: One Wicked Cricket", - "591FD6C9668C79FF1CE8558EBED2486A7A327F05": "16:9 Widescreen", - "A59B84DB5486521AEE1C23B6C741ECD35216E5AD": "60Hz" - }, - "GZSE70": { - "title": "Zoids: Battle Legends", - "8E86EAC7EA4F4D2854DD9020CD795630CA64C4EE": "16:9 Widescreen" - }, - "HAF": { - "title": "Forecast Channel", - "181195871F63B89B1CF09AFA4420CF89B9883108": "BufferPatch" - }, - "HAL": { - "title": "Region Select", - "AD12237401ABE9FE4A545AADB5C5AE10355E2076": "RSAPatch" - }, - "RGQE70": { - "title": "Ghostbusters", - "5F4CF8D4DA19A0FF74FF9EB925AC0236069BFD59": "crashfix" - }, - "RLEEFS": { - "title": "Ten Pin Alley 2", - "793642AC6862C2F3412035A9E3D7172CC4A1D5C7": "Fix crash on main menu" - }, - "RM8E01": { - "title": "Mario Party 8", - "BCC4279F8B28636AD773F01540E78DF40EAD6087": "QOL - Faster Boot Time", - "B65AF1819966CD3435D88801E8C79704E3A52DB5": "QOL - Increased Board Speed", - "66495D7CB532FAE778AFC22CF45D17D0FFDE5310": "QOL - Increased Taunt Capabilities", - "B4186DDC54F33F4D6A22188EF50CEB43FB205673": "QOL - Increased Text Display", - "9D90A9C66AE8AD91B201B40C4145D1323B701A77": "QOL - Invert IR Stick for GameCube Mod", - "330DD53AB993A99576564FEFD222D7BD211B878F": "QOL - Remove Explanations", - "25223F9EFAABF601CAC7810004F124E4056598B1": "Extra - Disable Music", - "E61344EB1542A78D497981C307B6549985C7A05A": "16:9 Widescreen" - }, - "RM8J01": { - "title": "Mario Party 8", - "A140BDCB8E1721CB6B4CD878E412113322258B57": "16:9 Widescreen" - }, - "RM8P01": { - "title": "Mario Party 8", - "F664C32AFD3D785FC6E04D8990A3FA1C72A18C5C": "16:9 Widescreen" - }, - "RMHE08": { - "title": "Monster Hunter Tri", - "CCF233DA57B3E75221870DE502955114B0D4E7FA": "Bloom OFF" - }, - "RMHJ08": { - "title": "Monster Hunter Tri", - "29D3625B7ED577587E56AA07CB0EB8C47C97E823": "Bloom OFF" - }, - "RMHP08": { - "title": "Monster Hunter Tri", - "1720C1173D4698167080DBFC4232F21757C4DA08": "Bloom OFF" - }, - "RO2P7N": { - "title": "OFF ROAD", - "EEE9C8DE4671C18DD7F81DD08D39B64C57600DEA": "Hangfix" - }, - "RPBE01": { - "title": "Pokemon Battle Revolution", - "775ABECA6073E02C5C68CF4D644194D966A418F5": "Fix black screen effects" - }, - "RPBJ01r0": { - "title": "Pokemon Battle Revolution", - "0EAB5D8DE827894AFEF97C10ACB67378E6983323": "Fix black screen effects" - }, - "RPBJ01r1": { - "title": "Pokemon Battle Revolution", - "4905E08643E9D00136F7EAF51978CF2F54D10D07": "Fix black screen effects" - }, - "RPBJ01r2": { - "title": "Pokemon Battle Revolution", - "4905E08643E9D00136F7EAF51978CF2F54D10D07": "Fix black screen effects" - }, - "RPBP01": { - "title": "Pokemon Battle Revolution", - "82AEB60F9A9083F93060531A970FFAABE0833A40": "Fix black screen effects" - }, - "RTH": { - "title": "Tony Hawk's Downhill Jam", - "812EE46AC967BFCD239335B10A664D71A93E8175": "Disable blur" - }, - "RX4E4Z": { - "title": "Casper's Scare School: Spooky Sports Day", - "9E4E0F1465A9A1E85349DBA3B1278AC215A97DBB": "Fix file reads (dcache bypass)" - }, - "RX4PMT": { - "title": "Casper's Scare School: Spooky Sports Day", - "EE85907C03F0295794821383B93F8D5B91D2697A": "Fix file reads (dcache bypass)" - }, - "RZDE01r0": { - "title": "The Legend of Zelda: Twilight Princess [Wii]", - "15EAD073414C9903D6CAE5229DCE582BD17A9162": "Hyrule Field Speed Hack" - }, - "RZDE01r2": { - "title": "The Legend of Zelda: Twilight Princess [Wii]", - "27395CC8BC2C51201D566657D31A471A850482FB": "Hyrule Field Speed Hack" - }, - "RZDJ01": { - "title": "The Legend of Zelda: Twilight Princess [Wii]", - "B3F7473F8C911A32F1D616491C9E78EBBD7A6309": "Hyrule Field Speed Hack" - }, - "RZDK01": { - "title": "The Legend of Zelda: Twilight Princess [Wii]", - "A280C0114B800D7DC056ECFB5E482229DA0B1550": "Hyrule Field Speed Hack" - }, - "RZDP01": { - "title": "The Legend of Zelda: Twilight Princess [Wii]", - "2A83ADFB760F9498841ED0ED68B0C0438232472C": "Hyrule Field Speed Hack" - }, - "SAOE78": { - "title": "Monster High: Ghoul Spirit", - "EA11FA4908FB20B61876ACD360EC7657A6D39FB2": "Fix crash on boot" - }, - "SAOEVZ": { - "title": "Monster High: Ghoul Spirit", - "AA55C214DE7545DE0E203CC39F06BF3D31451BE9": "Fix crash on boot" - }, - "SGLEA4": { - "title": "Gormiti: The Lords of Nature!", - "258378187ACF475A55EFEAF8A703681252E014C3": "Fix black screen" - }, - "SGLPA4": { - "title": "Gormiti: The Lords of Nature!", - "6F8CD59D897338CA90939149E1A62588620C6D88": "Fix black screen" - } -} +{"D43J01":{"loophack":"CAB9CED2D904F12CCB21F5B1DE9B5433620C3E13"},"DPOJ8P":{"Bypass Modem Detection":"90BA66E25640A538FEFA6693715718139079FA7B"},"G2BE5G":{"Disable interlaced rendering":"7FFF6BDD93713BEDFD23739C32B86153FA19AEA0"},"G2BP7D":{"Disable interlaced rendering":"56E85D7285F10348E1E5354E379918D07E79EDA9"},"G2VE08":{"16:9 Widescreen":"3ED033396382424533A263A39687A0961EC994A6"},"G2VP08":{"16:9 Widescreen":"EEBC3C5F04BB70AFCA1A4C3D638335CDC9142BA2"},"G3RP52":{"16:9 Widescreen":"7F6B7743F0DDD3704B15882330E490103AE24E36","60fps":"4C9A8572A35F1DB85BBB2F32ED34288A343F1FC0"},"G3YP52":{"16:9 Widescreen":"3D102AFEE2F4945894E74BB702ED3ED2294C6FEC","Force PAL60":"FD61581C593EA34DD358AE33819FAB310F2CE961"},"G4AEE9":{"16:9 Aspect Ratio Fix":"8C2564CF47BB6A9B57D712C90E17F459B0BB6CCD"},"G4ME69":{"16:9 Widescreen":"6FC6E5D91693FAABE25CC721F2121CB0B5CA9D12"},"G5SE7D":{"16:9 Widescreen":"16119398BFE241A84151C046E0BC5BCF89D22049","Remove Bloom":"A5F2FB2B3BFF61F34F8AB1DD5A912A0FD8DFA720"},"G5SP7D":{"16:9 Widescreen":"718AA8BD831961C33114852FDA75BB58F768F46A"},"G8ME01":{"16:9 Aspect Ratio Fix - Centered HUD":"8C2FC3FC6F7766AA8E87425BF3BDD2E46E73DE71","16:9 Aspect Ratio Fix - Centered HUD with letterboxing":"AE3DBE2604CA0660165CA870C4B80E2B523C9475","16:9 Aspect Ratio Fix - Normal HUD":"F6E8264CF14D0189219C1E2D20C4182F190F4B88","16:9 Aspect Ratio Fix - Stretched HUD":"8EA4C7B80ADE3E8FEC28EEFA3A046B6B04162E81"},"G8MJ01":{"16:9 Aspect Ratio Fix - Centered HUD":"B3181CA1AAB11EAE9132184DA48D76E775AC0A24","16:9 Aspect Ratio Fix - Centered HUD with letterboxing":"904C0EEEF16D761F7BDF7099DEB384DD9AB26E00","16:9 Aspect Ratio Fix - Normal HUD":"631CE99BDE3F1475303C00C67E3C130D4EB2547B","16:9 Aspect Ratio Fix - Stretched HUD":"81F7AD591F12A01DE82850457ECF147998D1238F"},"G8MP01":{"16:9 Aspect Ratio Fix - Centered HUD":"75AF5D7FA49BE9C3C73EA1482B49CD9B36CE817E","16:9 Aspect Ratio Fix - Centered HUD with letterboxing":"C2E5003E74551DF693A7CB814850CA51D77549EF","16:9 Aspect Ratio Fix - Normal HUD":"FB26AA84B0CB787705E84E869B649307776A2839","16:9 Aspect Ratio Fix - Stretched HUD":"C5F8A81520193418C07C7BC4881F02BE9C4DC9BC"},"G9SE8P":{"16:9 Widescreen":"CD043229AC47AC93D537B6A0725A2D0BB6FEF4E8"},"G9SJ8P":{"16:9 Widescreen":"C55EF90B542AA3973352A232629A828BC22A8509"},"G9SP8P":{"16:9 Widescreen":"9521774ADEE769CFCCE86F8170FE626387E73019"},"GAFE01":{"16:9 Widescreen":"D24F6D9BE5D79D3C795C2844634A0214BB68B5DA","Make Game Save Copyable (donny2112)":"F9A812FF62A20D5440CAB79DB6AFAE068457A10E"},"GAL":{"Trophy Viewer":"DBDB50216B22CDFFF77BDD80261CD0FF75803D3B"},"GALE01r0":{"Normal C Stick Functionality in Singleplayer Modes":"9DC8D90D986FAC175F45006AFF20CF00EDFBE053","Proper 16:9 Widescreen Support":"18B4159E77013EDFE499A33281B771C442970E3B","Properly Display in 4:3":"DC2BCA7D99EBDE1DC7C68CA6AC7F543B93FD6A67"},"GALE01r1":{"Normal C Stick Functionality in Singleplayer Modes":"F6030959C1CAC92F37287D556F18B3C5298FAD5B"},"GALE01r2":{"Disable Rumble":"CFDEEA8AD2A99394BFFEA7211EF03394E7471FA9","Normal C Stick Functionality in Singleplayer Modes":"BCD918A72368B2A30E797C76994E7539A1C0B5D9","PAL Stock Icons":"6B92D95F0EEA165EA84FD753F74B0A9E2079C2D7","Proper 16:9 Widescreen Support":"CEDF18354CDCFC49398551C629E51B053331A55B","Widescreen Support v1.2 [Dan Salvato]":"D32ED4CD685F3FF649F7E749E8C182C657013918"},"GALP01":{"Normal C Stick Functionality in Singleplayer Modes":"4817F202678559291F9F76B46DC7561A45D00B77","Proper 16:9 Widescreen Support":"BFCBE098FE8679B9140A48EA1D8620D5A369697C","Properly Display in 4:3":"5BA2933B8365E21553AA273B91954A4C722B1035"},"GAZE69":{"60FPS":"BC281053C5266B21FDDC6C8996A6021DEA03D459"},"GBLE52":{"16:9 Widescreen":"C0F3AB3BBC9B21F4BF25F44E48CF1CD36D2B3F45"},"GBLP52":{"16:9 Widescreen":"797040CB097BFD369490A1BE29659929D76CE6F7"},"GBRJ18":{"16:9 Widescreen":"B3C867AB34D90E2E9C5B799D800F4C191DE279FA"},"GBSE8P":{"16:9 Widescreen":"4148D453F61A5B81E53669335BC667E651865C76"},"GBSP8P":{"16:9 Widescreen":"6CB029AE768BA5B9995D5F12C1EBB37B3D1FE242"},"GC6E01":{"16:9 Widescreen":"DE932CCAD1B5EB1FAA8D08733BD0D3940C78382A","Allow Memory Card saving with Savestates":"2F64F98686E62B60E466E931A9EBCD19A750FF4E"},"GC6J01":{"16:9 Widescreen":"5CB4934396ABD43F7147EA13521C952728933874","Allow Memory Card saving with Savestates":"D8F327304A88FBC717BB1F775494C5F864B9E8D2"},"GC6P01":{"16:9 Widescreen [Ralf]":"05C9016BF58A628A3FD7B16E1B9BB0769A14846F","Allow Memory Card saving with Savestates":"EDEE0E28EEA1834868F2865336290FFBDFB9C6DA"},"GC8JA4":{"Fix C4 texture tiling (used for buttons and some character icons)":"843297019804192AF1FC660BC85F4B10891D0BA3"},"GCBE7D":{"16:9 Widescreen":"478DA1D596D8513C343850719155813CB61A56DD"},"GCBP7D":{"16:9 Widescreen":"478DA1D596D8513C343850719155813CB61A56DD","60Hz":"DF2C4DDF082C9E67919443C5ACC485AB2CF7F8D0"},"GCCE01":{"16:9 Widescreen":"BA0066518E7EA8599A81F8496BD39DE20CC369D6","Fix GBA connections":"483BDB94615C690045C3759795AF13CE76552286","Fix buffer overrun bug (crash at Goblin Wall)":"6C107FEC15C76201233CA2645EB5FAB4FF9751CE"},"GCCJGC":{"Fix GBA connections":"4C104D24329172F5D0F8649DE9423B931FE72CA3"},"GCCP01":{"16:9 Widescreen":"2580E7379633CF4DE13B9EC945DB17543477828A","Fix GBA connections":"2EAA60A8A115AD68A795109FB59E4A726D29016D"},"GCN":{"Fix C4 texture tiling (used for buttons and some character icons)":"601FE183C9524ACCF068874DABD73921C86769CF"},"GCVEEB":{"16:9 Widescreen":"ADA686C90189D1D7D23E23E525EFC96EFA104BB9"},"GD7E70":{"Deinterlacing Fix":"95A17AFAAFD83E96CD1CC6242B8667F6A3DC8416"},"GDREAF":{"Fix audio issues":"F8EAE60FEB0CFB4477FDC4B9E136B63F68DFA63A"},"GDRP69":{"Fix audio issues":"E23D98B2CE185C3993A40F2495D37E41B971BF91"},"GEDE01":{"Fix startup hang":"21068C3CE905FB0CFFAA7408A93154AF8A5295A2"},"GEDJ01":{"Fix startup hang":"7061F3CF11BF64D3BA7F32CCF2BAC42FF3614AB6"},"GEDP01":{"Fix startup hang":"6F1B00517CBA30BEB738EAA90E71221378CD570D"},"GEME7F":{"Force Progressive Scan":"CB04E00918C9C0F161715D21D046ED6620F7ADEF"},"GEMJ28":{"Force Progressive Scan":"CC2057185BB10DAD4A361412D024DFD586EE0130"},"GEZE8P":{"16:9 Widescreen [gamemasterplc]":"5CEBCFBEA4E444495D2FD6D8B6607DFB2349CC1B"},"GF7E01":{"16:9 Widescreen [gamemasterplc]":"C59CCA3EF8A5E97B32EB64DB9AE80E652ED281C6"},"GF7P01":{"16:9 Widescreen [gamemasterplc]":"1230053B5C347B62E432EFD6635433A183D18619"},"GFQEA4":{"16:9 Widescreen":"5CD9568CE58EF82EB371594667015C9B799454B9"},"GFZJ01":{"Make Save Copyable":"F659D22CB1DFF15C3915D7630D838EED8DB0BA48"},"GFZP01":{"Make Save Copyable":"F659D22CB1DFF15C3915D7630D838EED8DB0BA48"},"GGTE01":{"16:9 Widescreen [darkludx]":"EF128E7A9C22676834F558BA0F0F7FD8B9028727","Experimental 60fps":"D40344111D989EA009901F8B1C45B5AC8D39E6D2","Simple 60FPS":"5232A937D1D813FF58DD71D716284ED6AB535689"},"GGTJ01":{"Experimental 60fps":"BEC2310911003AF9E4B984A4051E0F885B8CC825","Simple 60FPS":"D62E777A2F019D7BD0AFFBCE876BD9AE408F1667"},"GGTP01":{"16:9 Widescreen":"FA9CD330ECDA01275DA88BD0803DE47757D16A4E","Experimental 60fps":"EB1ACD613BB432A3391CFFF1F0145A6ACE66B210","Simple 60FPS":"43FAD0DDD130BE1E4C8C7603EF6CA7DAA0DF5EE9"},"GGVD78":{"16:9 Widescreen":"9D07DBB5EC2FAA47F2E4587FBD75FD6F3E7E91B0","EFB Copy Fix":"FE52240DF6D132C15A8324E8A477F2BF2250D208"},"GGVE78":{"16:9 Widescreen":"86E561452235BF88D41884558EF34F54CE0FEB48","EFB Copy Fix":"5E38E10829D5F77243C95E9E41518BB3ADE24139"},"GGVP78":{"16:9 Widescreen":"F9B2108D833084FA36A53E00F1647A9579F847D3","EFB Copy Fix":"5E38E10829D5F77243C95E9E41518BB3ADE24139"},"GGVX78":{"EFB Copy Fix":"740F2D1C01DA39D1760D96B03974A48E6F74578D"},"GHAE08":{"Fix audio issues":"9799AFF8463EC86C9230E31E2627E141F0C129D3"},"GHAJ08":{"Fix audio issues":"B45A8FC32D14567B8D6C95F303E00A72C0E1D344"},"GHAP08":{"Fix audio issues":"BC7F3CFC97593AA2055C370C175950DC478D2709"},"GHLE69":{"16:9 Widescreen":"742BFC79D8F0BA5D6215772B58F5A0EADD7BFAFF"},"GHQE7D":{"16:9 Widescreen":"520E5F718D3BD1291C55021776091E0DE0FB4822"},"GHQP7D":{"16:9 Widescreen":"AAE14CDC13A0C082A850DED85417100A8C8A0687","60Hz":"884A33613AE8D916128E3FF39B3AA9F63DAADC58"},"GHSE69":{"16:9 Widescreen":"3538CDBD13FA939B7BA5F0F82253401AFDD1E2CD"},"GHSP69":{"16:9 Widescreen":"409754E2EBB6F05DEE1AFC647E25B15D462638FF"},"GICD78":{"EFB Copy Fix":"3A94591A149AE88C150AB3320BBC909FE54BAEA5"},"GICE78":{"EFB Copy Fix":"5BF55685B8867A85EAA9C86571309B17BF7DED32"},"GICF78":{"EFB Copy Fix":"85AABAEB9A59C4F96D9330A3B884F6D757DA1683"},"GICH78":{"EFB Copy Fix":"3A94591A149AE88C150AB3320BBC909FE54BAEA5"},"GICJG9":{"EFB Copy Fix":"969134EA21A160EBDA91C0870266E7D1707FDC43"},"GICP78":{"EFB Copy Fix":"13B158CF41F5412BC637F50644193D43CC3DA49A"},"GIQE78":{"EFB Copy Fix":"E15AA1E30D26E5735D68AAADE436E7B7E4A33A35"},"GIQJ8P":{"EFB Copy Fix":"FFFCB76E98DDB06A7BBBC0AA73C869C87EB787D6"},"GIQX78":{"EFB Copy Fix":"485DA99FAB35646DAA2A138B0315361495ABE778"},"GIQY78":{"EFB Copy Fix":"485DA99FAB35646DAA2A138B0315361495ABE778"},"GK2":{"16:9 Widescreen [Vague Rant]":"6B4C59C2A2C5D71C7A38C8513A76E6467E307A26"},"GK2E52":{"60 FPS":"8F2397930A50C3C176188526EB9612578F9CBCE5"},"GK4":{"16:9 Widescreen":"4652969A4DA869FD28F2CAA3869A38F5C2AAFEB1"},"GKB":{"16:9 Widescreen Region-Free":"4652969A4DA869FD28F2CAA3869A38F5C2AAFEB1"},"GKBPAF":{"60Hz":"8E4E0ABA0E6D102A33206F34F4DEE63159B3CB4F"},"GKDP01":{"16:9 Widescreen":"DF4657937DE730107B636C73E959277EB963D210","60Hz":"6740D7B914CC897AF50798C0AB391965294FD1E1"},"GKRPB2":{"16:9 Widescreen":"69C01A4F91D991CF866237FED94A138308FC104F","60Hz":"40D06A5C7A3D873ABC73DEDF573738C2E3E37FF0"},"GKWJ18":{"16:9 Widescreen":"696570101FA040778EAD310377C484C846D87430"},"GKYE01":{"16:9 Widescreen":"6520EF1B7D88F00747B120A3A010458602ED989D"},"GKYJ01":{"16:9 Widescreen":"47B8EF7D02831AA5C375C698797BF2D5475FEFF2"},"GKYP01":{"16:9 Widescreen":"69413C75036D2975716066E6574461B981FF0124"},"GLEE08":{"Fix audio issues":"7355F358CAC6F418D37E4C23E64F7867D46E4FC9"},"GLEJ08":{"Fix audio issues":"12B24A6D7389A2AC5AB75FC0BF8493E7661F2A73"},"GLEP08":{"Fix audio issues":"81BD39F5527552DE89E3B59BA86298900F0A3168"},"GLSD64":{"Fix freeze in opening cutscene":"5E2A73717BD66EF647846DD64C33BC80AD9B5227"},"GLSE64":{"Fix freeze in opening cutscene":"1CE78E7954415A44DF693C0BB879AA5A4FF059A3"},"GLSF64":{"Fix freeze in opening cutscene":"009B0C4AD80A9C28C987934D254C2C4AACC9A07A"},"GLSP64":{"16:9 Widescreen":"8E7A544C10E7A5E2F0304A0D2586879627EF6586","60Hz":"B67144E87B54246137142992A3BC83DC13BE68A7","Fix freeze in opening cutscene":"3D0894616C9A7FA5ED91C1D2F461BF14DF47ECEC"},"GM4E01":{"16:9 Menu Backgrounds Add-On":"87D1A6A3E29ADA03B0D29C2F1841C18E62DB0A15","16:9 Widescreen v2":"78BE50F93E81A1972CA31ABC318949E366E82BD0"},"GM4P01":{"16:9 Menu Backgrounds Add-On":"87D1A6A3E29ADA03B0D29C2F1841C18E62DB0A15","16:9 Widescreen v2":"6D950B6EEFD6D304E1A424355B74A595D32BDF2F"},"GMBE8P":{"16:9 Widescreen":"D12DE9E3941BCE6EB50B8DA92140E09AFC0104C8","NA Stretched HUD":"0151A6683E1FBFD20096807C54A6952C4A4BAD40"},"GMBP8P":{"16:9 Widescreen":"8A688981F33A2C53882EF08FCF20B88AD43EF417"},"GMOP70":{"16:9 Widescreen":"CE4D298616BD42E4D8F8936B325CD1FD7F5B956B","60Hz":"0CD2CC787A5FF551901E41C85C8AAC02017ECB89"},"GMPE01":{"16:9 Widescreen":"4F98592DB3DEE3857469A8D8605FAF4BD6F7C76D","QOL - Allow Digital Presses for Map Screen":"E232B27564E9AA0C32DE163C9C056317A7B2B12E","QOL - Automatically Advance Text Boxes":"59607671BFC4717ACAF9807BB7EB0D9F982866D4","QOL - Disable Advance on Results":"CAEA37F3FEF89400513353EB85875F2A3AF4C03E","QOL - Faster Boot Time":"F75FBBD838C5B84FF687962FBA9195B217DE132C","QOL - Increased Board Speed":"19F264DE7F07EAC9433CA4B591BEBA1EC976C9F1","QOL - Increased Taunt Capabilities":"C70391D4961A0E820DE40141C89341369A9F021B","QOL - Instant Text Display":"F4E6913CF034E5778B9F9CA5FF448FF1B78B3333","QOL - Rumble Always Off":"93621947019532F02C25937FD3EEEE21A788CB07","QOL - Show Controller Port Number of Who Paused":"D7249AC3C949FEB860CF4350C5B7B79AC16569F1"},"GMPJ01":{"16:9 Widescreen":"A795811F2F0C92D9DCABDE97D9E39B47B1DBCEFD"},"GMPP01":{"16:9 Widescreen":"A795811F2F0C92D9DCABDE97D9E39B47B1DBCEFD"},"GMSE01":{"60FPS":"2805B1A0DD53EB64877D375D10F667700955720F","Widescreen":"BD718F961DBA5372B1D0257D454D535746C453A0"},"GMSJ01":{"16:9 Widescreen":"E8112A01040A06460E368F142C5D1FD0B4085D94"},"GMSJ01r0":{"60FPS":"9894B5B6B5215844D48411021FF8EECFE851D79D"},"GMSJ01r1":{"60FPS":"2DB69DB7A3753D543CD85CA4C77B4EF0AED7486E"},"GMSP01":{"60FPS":"D07009B710B3BBC6B12E54ED6A7969D58197EDAF","Widescreen":"0B7B89BF0868393076EF5F9DBD689DD0EDBCB84C"},"GNHE5d":{"Nop Hack":"89393A24E2336841AA4CD0AD3BE1C9A66B89E9EF"},"GOCE5D":{"16:9 Widescreen":"E4D800B90F16A15D9252EED1B2A23AEAF5CD230A"},"GOME01":{"16:9 Widescreen":"C33CBBF6F22195BF626104B4827200B3EE1CF30C"},"GOMP01":{"16:9 Widescreen":"874784CCD4AC3DC9C69654E471C18AD0F5E4D9AE"},"GONE69":{"Widescreen Hack Culling":"6412A67E1C26E146A9526AFC9F0EE517B214069D"},"GP4J18":{"16:9 Widescreen":"BF4D2D6AF66F285E81173B3B20D5369DB6FB351B"},"GP5E01":{"16:9 Widescreen":"5ED053787332DB5EEB8B963BA5DF197B58C6BB75","QOL - Automatically Advance Text Boxes":"41EF84663008668682BB75DC8B874E38669AE041","QOL - Disable Advance on Results":"6C36BEFE751131298BC8B39012892F6A6903CE60","QOL - Faster Boot Time":"8E952E6E12639AC20F6F9FDD150C12F0C294DF43","QOL - Increased Board Speed":"4BD72B8ED75ED8EFB3329C104BAD114FDDB8AD2C","QOL - Increased Capsule Throwing Speed":"C5BA3C9D386D09DD6CB9242A12A0D041BEB93160","QOL - Increased Taunt Capabilities":"C360EBDDCB0237076052C983BD9719411CA67CDE","QOL - Instant Text Display":"2CD4A06A3B9C18CC9EA2A2DEBD96E066CD1D700A","QOL - Show Controller Port Number of Who Paused":"5BA3648D18346EDC97B23475D4748C637E6095A2"},"GP5J01":{"16:9 Widescreen":"81E69B6BEE85E06805EC24E1CFEA9405BF459DF8"},"GP5P01":{"16:9 Widescreen":"FD4FCCB97C06F0173A30D4CC9A99422B2C0ABA9B"},"GP6E01":{"16:9 Widescreen":"B502AF0887792E9B140516D14BA75F99772C17BE","QOL - Auto Advance Text Boxes":"E645DF70CE0266D174D917A817A7FBEEE974A9F0","QOL - Disable Advance on Results":"798E566B621F6A32BF23C588E76EAC0776E2A8A3","QOL - Faster Boot Time":"B089A3C80D5DA86ABF6258F8BFB1DC78BB54A973","QOL - Increased Board Speed":"501C52ACF117950888A66DB2BEDBDFD7D9B20235","QOL - Increased Orb Throwing Speed":"845F439278DA8CBC225658FF4E2F82D707422BFB","QOL - Increased Taunt Capabilities":"0AED27341A06186AD92D5725C0B9693CA8F85B7B","QOL - Instant Text Display":"5AAC4E21927D4AEE7AC329CE793D4CDAEDDF7A3F","QOL - Show Controller Port Number of Who Paused":"DF5D2F068D76ABF2B1C294D413B9154B8C356929"},"GP6J01":{"16:9 Widescreen":"88F50F8298F82E3E5C161277BD4A985CE893A9D0"},"GP6P01":{"16:9 Widescreen":"DCCE59CA987624C753F0A86BEBA4287635901C93","Remove Black Bars":"138A86D43B5830BFE1926F58C0A4FBE2971BB02D"},"GP7E01":{"16:9 Widescreen":"87EBF72D90503EBC5CE9BC994795669E48A92A4A","QOL - Auto Advance Text Boxes":"82338AB5D82A7F398B4EB674CA4866DD1F4A1E65","QOL - Controller Options Always Acesssible":"D2F9CC0B9E52136E77187395FB7DA9B64B2C3B30","QOL - Disable Advance on Results":"A644551162A61DE7997B2A84F5BFDEFFD3FC2FB5","QOL - Faster Boot Time":"1939B5C575AE8FF6890BDDDD1B3FEA472D8CABA0","QOL - Increased Board Speed":"7E06A2EBCFECADB8074152B489984237A6FE9F21","QOL - Increased Orb Throwing Speed":"6671BEE71920D6B845AE1257AFE3AB3B95CD6FBD","QOL - Increased Taunt Capabilities":"9F60923F95FFE709CCD06966CD2DF743263934D1","QOL - Instant Text Display":"48FA6002E42DA9BB83ABC980A32C60CE3B21C4FC","QOL - Show Controller Port Number of Who Paused":"5E6F8C6C87D5944DB18A4E4F9A45F61EE87A4163"},"GP7J01":{"16:9 Widescreen":"A081F0729068D233E99DC00C64E36CA33C945640"},"GP7P01":{"16:9 Widescreen":"75D6CDA4EA301A71F7701A0487544E79136850B9","60Hz":"6D0D5B7CA58C38A3147F8ED981B5B21CC6C519CD"},"GPIE01":{"No Blur":"A25CDDB79991F090BD7F12840AD06F13BD5CCF95"},"GPIE01r0":{"16:9 Widescreen":"2B58166A66644F984E64077A6245C94C79B51063"},"GPIE01r1":{"16:9 Widescreen":"9A1545AB4E2B9216B95AFFA83420D723512DA8C8","60FPS":"3337C767EAA21D30C6CFEAE9985FFCABFC63E2E3","Disable Pikmin optimizations":"CBD15E9104929F0631713AE482475CB2B90E71F2"},"GPIP01":{"16:9 Widescreen":"5AE44D5B0E0D4C412B453B95CF5A41DBA4D685E6","60Hz":"AE59FF751E167632AE283F38CC4B96BDF7B9B81F","Turn off blur":"4ED79A548DBD7DBD35928A2F1138315FF103E260"},"GPNE08":{"16:9 Widescreen [Ralf, darkludx]":"ED3D9BB08C5F1D21BC8D5C73155C00E3C25C466F"},"GPNP08":{"16:9 Widescreen [Ralf]":"469B18FE8219031D355557B836EF02B625040A4F"},"GPOE8P":{"Make Save Copyable NTSC Port - 1.0\/1.1":"7A4B3E596BA4FDA8F3FCF984079B3F44CB2D6AB3","Make Save Copyable NTSC Port - PLUS\/1.2":"304DB311F2107E88EBCE058535B266F9263AA8E2","Save Validation Code v 1.0\/v1.1":"9F6259132453DCC0607EAB35DB182C76818F2F9F","Save Validation Code v1.2\/Plus":"17EB6CFB408EF27D44C053A1336C3B87B6A05018"},"GPOE8Pr0":{"16:9 Widescreen":"99986BB1D4ABE45C429D48B01BFB578FEA69C14F"},"GPOE8Pr1":{"16:9 Widescreen (Plus) [Ralf]":"5563671A6702785FFE106DAB7EF3F4FE6D9F705B"},"GPOP8P":{"16:9 Widescreen":"DF133C61C29D5CFA87A2A785C962C205F80E6D04","Game Save Valid":"40EC1590DB26C7C58D00E3065F1E404341EF0E73","Game Save copyable":"2F5FB98927DAFF141D1CCD1EACA8AF626397E284"},"GPVE01":{"16:9 Widescreen":"E5B51080CFD518FE584CF3B61A1099CD032479D6","60 FPS":"271C40F5FC113896717DB0EEFED42E788CA3AC81"},"GPVP01":{"16:9 Widescreen":"78F3C9A789827B063A6701987262276A66ABD82B"},"GQPE78":{"EFB Copy Fix":"880B114E9A308084CAB92C004A9EE067B371C310"},"GQPP78":{"EFB Copy Fix":"5D9A14954AE8D639C9B254F3BA73A70F284BBC8D"},"GQSDAF":{"16:9 Widescreen":"CA82C44B2E8FC5C184E3FF935BC89661B7DB55D6","60Hz":"952165FD78543EB6D2F5230F7570B0513773D332","No Blur":"DEB7DF358423F0EF30C9FD49F4F14590836D52A6"},"GQSEAF":{"16:9 Widescreen":"48AFE1D32843C6B5AD4337A49F15FD447DF2A752","Remove Blur":"EF448CF1FA6A15EB2661EA5338703C13D52EF65B"},"GQSFAF":{"16:9 Widescreen":"76C30E1737CC5C3B5DE32532B5F9A5CD50B690F8","No Blur":"986BAE5103CDE9286D2D34FD28FE2540D0759AAB"},"GR2E52":{"16:9 Widescreen":"5F55CE7DA7E1E3261CF2FF88F34CDA63BA511003"},"GR2J52":{"16:9 Widescreen":"D3C6FA690BED07BFA65C2E1FCDE2FFA5AA0EEEE4"},"GR2P52":{"16:9 Widescreen":"D7BCADD4E76B5E3F7D9D463F55A2777528E37E94"},"GRNE52":{"16:9 Widescreen":"483D74C47AD1012606D591A226AB3144C7FB201C"},"GRNJ52":{"16:9 Widescreen":"949281B7221B20680B7BC29E4754B73A326EBE85"},"GRNP52":{"16:9 Widescreen":"11051B094FE5A8B2E73060BFF786C1588E36979A"},"GROE5Z":{"16:9 Widescreen":"FADBAB5EC280CF8ED4C9536A33F4184BA210C9B0"},"GRYE41":{"Disable Culling to Fix Rise and Shrine Hang":"AF0A575EB6071EAC0D2EC3D2EA30A23EB05A4192"},"GSAE01r0":{"viWidth 704 Aspect Ratio Fix":"0D529180B9B28BB06E21EDBDBA61C17EEF0FFB7F"},"GSAE01r1":{"viWidth 704 Aspect Ratio Fix":"CB15ED22625690A5DBE4607FE30160125421461D"},"GSAP01":{"viWidth 704 Aspect Ratio Fix":"749EDA62B1B73354599929F1B50E992E111C5493"},"GSNE8P":{"16:9 Widescreen":"CFDF3FA5B48B347E49E8E521D7BE47FCC9A5CBF4","60Hz Aspect Ratio Fix":"D90F66C0D46D9BEF27C8E13BC8804DB1F382C8B1"},"GSNJ8P":{"60Hz Aspect Ratio Fix":"98DF9D67DE77F66A4B09F25C5621805DEB40865B"},"GSNP8P":{"60Hz Aspect Ratio Fix":"D90F66C0D46D9BEF27C8E13BC8804DB1F382C8B1"},"GSO":{"16:9 Widescreen Region Free":"0D60D0593F6DA28B1236381B22082506B9533F0E"},"GSPE69":{"16:9 Widescreen":"80E18A8963F4EFD3C03494C95934452FCB6E521B"},"GSPP69":{"16:9 Widescreen":"162E87E9F5511CD82216811055836C11B374C45B","60Hz":"E5DF2DF34D2F0BDEE4205C891576511EC572C5DC"},"GSWE64":{"16:9 Widescreen":"6480326CCA8FF64A4868EC6E9FDE9F38819A75A1","Disable Dithering":"85F65E4B627641862C1A6091D29A3BB0626B04C3"},"GTEE01":{"16:9 Widescreen":"6B57EBCB9CC0ACE2EDA0F13E3F1F55F3FABC3A26"},"GTEP01":{"16:9 Widescreen":"72785784363C46180AF8E388348FD77667E7D382"},"GTOJAF":{"Remove Blur":"53A2EDF113F2ED7E54A16AA0E73FDB2C44C79DE5"},"GTZE41":{"16:9 Widescreen":"ECCE87E0006475C73E7D936AA0150BD20166F9EF"},"GTZP41":{"16:9 Widescreen":"62D8F159B93167171E0860D96C4BB32A5BF5648B"},"GU2D78":{"EFB Copy Fix":"CFF4C3F932B08732627572EDA1A0CD2D9C71AE0C"},"GU2F78":{"EFB Copy Fix":"CFF4C3F932B08732627572EDA1A0CD2D9C71AE0C"},"GU3D78":{"EFB Copy Fix":"8A0E3114862ADFE421874211BD6F5220AA425BF5"},"GU3X78":{"EFB Copy Fix":"E3303FDAE7ECA17A72EDC440C32D94648A6453A0"},"GU4Y78":{"EFB Copy Fix":"D54767785E139A8BC8C4B75573FBD5A0B686D8E3"},"GUNE5Dr0":{"16:9 Widescreen":"C942EBCBE8A487C25E296EC1FAC2358DA1487DBD","60Hz":"A441630EC5FF0EB74D2243A3092D22E69C6BEA02"},"GUNE5Dr1":{"16:9 Widescreen":"39BD84CBE2AFACFEDEC5E9020D1A8B0D36DD53F9","60Hz":"05779F1A3D0C43305D52A95447D612CB424942C0"},"GUNP5D":{"16:9 Widescreen":"FE3BA1DAA1AF278A7839E27BF466B0BA0B390EC2","50Hz":"3B20499A3F8D1D7CCA5B0015F2D80ECED25842A6"},"GV4E69":{"Fix 2D Rendering":"8679891FCAA250FCFF670B26E0CB9875900D17FD"},"GVJE08":{"16:9 Widescreen":"09EFDA75D876A675121C8344D8FDD09A70A1A846"},"GVJP08":{"16:9 Widescreen":"93938F4C6112C91549F2B52E6259170F7501EC07"},"GVPE69":{"Fix 2D Rendering":"3159CA79B0A890131763EA6CB163684BEE886E3F"},"GVSE8P":{"16:9 Widescreen":"4CE9C491160A4B631142EE9CE802C694163F1CA3"},"GWRE01":{"16:9 Widescreen":"AC42770B06662BE1DC863EC80F44B5E034C63664"},"GWRP01":{"16:9 Widescreen":"9DDDFAB28C4BD35CF64050E1EF684DC042B1AFFA"},"GWWE01":{"16:9 Widescreen":"98B2E75D8E1CED4A964D3129A5DC10E30538CAA6"},"GWWJ01":{"16:9 Widescreen":"2DAD9A5E2A140F02CCBA727C4BE7C74BAC156778"},"GWWP01":{"16:9 Widescreen":"2DAD9A5E2A140F02CCBA727C4BE7C74BAC156778"},"GWZE01":{"16:9 Widescreen":"9EFC191DE6D21A1681FE241AB2EE4A131259F317"},"GXCE01":{"16:9 Widescreen":"901A1E78A3A0124F55548507D3B3707125C64A8A"},"GXSE8P":{"16:9 Widescreen":"F50BBA440184FC77A4DFFAA58FF2BB888E2E072F","Aspect Ratio Fix":"4214C74DFB8A74FC3AA4A643E869BC4D9A38EDA0"},"GXSJ8P":{"Aspect Ratio Fix":"227909607984BBC3D36AAC7DB9DFE385F3363C49"},"GXXE01":{"16:9 Widescreen":"2CA66DFAB3CC67D76AE06A378B1F0E9CBA5F3D68","Allow Memory Card saving with Savestates":"64FAA15062F0D0C319F904BBDE9C4489A25D6369"},"GXXJ01":{"Allow Memory Card saving with Savestates":"8293802260536FA2EF2EFDAB5266DE36BB88DE1B"},"GXXP01":{"16:9 Widescreen":"02716B2585BEE74F8FCDD97A78F6A0D3DC7F331B","Allow Memory Card saving with Savestates":"3CAFBC4AE6FC5CE9F53377F86AB5BD8F1BC8861A"},"GYFPA4":{"60Hz":"402ED10AC842041AB4B39AE8F2D81B2D7AEF9CB4"},"GZ2E01":{"16:9 Widescreen v2":"E7521ED27BFC972628906CBE8D5403ED57253BB8","Hyrule Field Speed Hack":"FCB673D46E716C7F63C618B8D8BF83AEE0B501F0"},"GZ2J01":{"16:9 Widescreen":"F985A0A58D8E2B23E8A557FAFF8D367AFFEADD07","Hyrule Field Speed Hack":"FCB673D46E716C7F63C618B8D8BF83AEE0B501F0"},"GZ2P01":{"16:9 Widescreen v2":"CAC38B0D334B925A57AA3118D35932B8A185137E","Hyrule Field Speed Hack":"0F63623D4D984B7706F718F57C0ABDB6DBADCF8D"},"GZ3E70":{"16:9 Widescreen":"167F9E9A9B372CB3A01F308B46FF1403F8599C51","Deinterlacing Fix":"2E163CB5FE724EB49B31CF607E5B9AFDA031DDD5"},"GZDP70":{"16:9 Widescreen":"2E424E0BBAE6EF5D6A8FB4224EA1D0746BAC37D3"},"GZLE01":{"16:9 Widescreen":"9FA864EE7DD8CE7FF538EB4E0243F20137430BD8","Remove Distance Blur":"78EA34CEF8E01701491C280F155F1C12EC9BF1A2"},"GZLJ01":{"16:9 Widescreen":"E03B61989025CA33937E63A057E6E40A403811BC"},"GZLP01":{"16:9 Widescreen":"3EFFF6C52B5633A1729FAA6883D8579E77F7D057","Remove Distance Blur":"14BECBEA4DD281EBD0F7FE7DEE8020B6F2418ACD"},"GZPE70":{"16:9 Widescreen":"7142F2495507AC7136992128ED0FCA6BC72B61F4"},"GZPP70":{"16:9 Widescreen":"591FD6C9668C79FF1CE8558EBED2486A7A327F05","60Hz":"A59B84DB5486521AEE1C23B6C741ECD35216E5AD"},"GZSE70":{"16:9 Widescreen":"8E86EAC7EA4F4D2854DD9020CD795630CA64C4EE"},"HAF":{"BufferPatch":"181195871F63B89B1CF09AFA4420CF89B9883108"},"HAL":{"RSAPatch":"AD12237401ABE9FE4A545AADB5C5AE10355E2076"},"RGQE70":{"crashfix":"5F4CF8D4DA19A0FF74FF9EB925AC0236069BFD59"},"RLEEFS":{"Fix crash on main menu":"793642AC6862C2F3412035A9E3D7172CC4A1D5C7"},"RM8E01":{"16:9 Widescreen":"E61344EB1542A78D497981C307B6549985C7A05A","Extra - Disable Music":"25223F9EFAABF601CAC7810004F124E4056598B1","QOL - Faster Boot Time":"BCC4279F8B28636AD773F01540E78DF40EAD6087","QOL - Increased Board Speed":"B65AF1819966CD3435D88801E8C79704E3A52DB5","QOL - Increased Taunt Capabilities":"66495D7CB532FAE778AFC22CF45D17D0FFDE5310","QOL - Increased Text Display":"B4186DDC54F33F4D6A22188EF50CEB43FB205673","QOL - Invert IR Stick for GameCube Mod":"9D90A9C66AE8AD91B201B40C4145D1323B701A77","QOL - Remove Explanations":"330DD53AB993A99576564FEFD222D7BD211B878F"},"RM8J01":{"16:9 Widescreen":"A140BDCB8E1721CB6B4CD878E412113322258B57"},"RM8P01":{"16:9 Widescreen":"F664C32AFD3D785FC6E04D8990A3FA1C72A18C5C"},"RMHE08":{"Bloom OFF":"CCF233DA57B3E75221870DE502955114B0D4E7FA"},"RMHJ08":{"Bloom OFF":"29D3625B7ED577587E56AA07CB0EB8C47C97E823"},"RMHP08":{"Bloom OFF":"1720C1173D4698167080DBFC4232F21757C4DA08"},"RO2P7N":{"Hangfix":"EEE9C8DE4671C18DD7F81DD08D39B64C57600DEA"},"RPBE01":{"Fix black screen effects":"775ABECA6073E02C5C68CF4D644194D966A418F5"},"RPBJ01r0":{"Fix black screen effects":"0EAB5D8DE827894AFEF97C10ACB67378E6983323"},"RPBJ01r1":{"Fix black screen effects":"4905E08643E9D00136F7EAF51978CF2F54D10D07"},"RPBJ01r2":{"Fix black screen effects":"4905E08643E9D00136F7EAF51978CF2F54D10D07"},"RPBP01":{"Fix black screen effects":"82AEB60F9A9083F93060531A970FFAABE0833A40"},"RTH":{"Disable blur":"812EE46AC967BFCD239335B10A664D71A93E8175"},"RX4E4Z":{"Fix file reads (dcache bypass)":"9E4E0F1465A9A1E85349DBA3B1278AC215A97DBB"},"RX4PMT":{"Fix file reads (dcache bypass)":"EE85907C03F0295794821383B93F8D5B91D2697A"},"RZDE01r0":{"Hyrule Field Speed Hack":"15EAD073414C9903D6CAE5229DCE582BD17A9162"},"RZDE01r2":{"Hyrule Field Speed Hack":"27395CC8BC2C51201D566657D31A471A850482FB"},"RZDJ01":{"Hyrule Field Speed Hack":"B3F7473F8C911A32F1D616491C9E78EBBD7A6309"},"RZDK01":{"Hyrule Field Speed Hack":"A280C0114B800D7DC056ECFB5E482229DA0B1550"},"RZDP01":{"Hyrule Field Speed Hack":"2A83ADFB760F9498841ED0ED68B0C0438232472C"},"SAOE78":{"Fix crash on boot":"EA11FA4908FB20B61876ACD360EC7657A6D39FB2"},"SAOEVZ":{"Fix crash on boot":"AA55C214DE7545DE0E203CC39F06BF3D31451BE9"},"SGLEA4":{"Fix black screen":"258378187ACF475A55EFEAF8A703681252E014C3"},"SGLPA4":{"Fix black screen":"6F8CD59D897338CA90939149E1A62588620C6D88"}} \ No newline at end of file diff --git a/Source/Core/Core/AchievementManager.h b/Source/Core/Core/AchievementManager.h index a8639899d3..c3b82f2be4 100644 --- a/Source/Core/Core/AchievementManager.h +++ b/Source/Core/Core/AchievementManager.h @@ -90,8 +90,8 @@ public: static constexpr std::string_view BLUE = "#0B71C1"; static constexpr std::string_view APPROVED_LIST_FILENAME = "ApprovedInis.json"; static const inline Common::SHA1::Digest APPROVED_LIST_HASH = { - 0xE1, 0x29, 0xD1, 0x33, 0x4D, 0xF2, 0xF8, 0xA8, 0x4E, 0xCA, - 0xF6, 0x87, 0xE6, 0xEC, 0xEC, 0xB3, 0x18, 0x69, 0x34, 0x45}; + 0x6D, 0x91, 0xF5, 0xC1, 0xE2, 0x4C, 0xC3, 0x39, 0xF5, 0x7F, + 0xEC, 0xA9, 0x8C, 0xA9, 0xBD, 0x61, 0x28, 0x54, 0x11, 0x62}; struct LeaderboardEntry { diff --git a/Source/UnitTests/Core/PatchAllowlistTest.cpp b/Source/UnitTests/Core/PatchAllowlistTest.cpp index 2aae282216..c2b6be61e6 100644 --- a/Source/UnitTests/Core/PatchAllowlistTest.cpp +++ b/Source/UnitTests/Core/PatchAllowlistTest.cpp @@ -18,6 +18,7 @@ #include "Common/IOFile.h" #include "Common/IniFile.h" #include "Common/JsonUtil.h" +#include "Core/AchievementManager.h" #include "Core/ActionReplay.h" #include "Core/CheatCodes.h" #include "Core/GeckoCode.h" @@ -35,46 +36,23 @@ using AllowList = std::map; template void ReadVerified(const Common::IniFile& ini, const std::string& filename, const std::string& section, bool enabled, std::vector* codes); -void CheckHash(const std::string& game_id, GameHashes* game_hashes, const std::string& hash, - const std::string& patch_name); TEST(PatchAllowlist, VerifyHashes) { - // Load allowlist - static constexpr std::string_view APPROVED_LIST_FILENAME = "ApprovedInis.json"; - picojson::value json_tree; - std::string error; + // Iterate over GameSettings directory + picojson::object new_allowlist; std::string cur_directory = File::GetExeDirectory() #if defined(__APPLE__) + DIR_SEP "Tests" // FIXME: Ugly hack. #endif ; std::string sys_directory = cur_directory + DIR_SEP "Sys"; - const auto& list_filepath = fmt::format("{}{}{}", sys_directory, DIR_SEP, APPROVED_LIST_FILENAME); - ASSERT_TRUE(JsonFromFile(list_filepath, &json_tree, &error)) - << "Failed to open file at " << list_filepath; - // Parse allowlist - Map> - ASSERT_TRUE(json_tree.is()); - AllowList allow_list; - for (const auto& entry : json_tree.get()) - { - ASSERT_TRUE(entry.second.is()); - GameHashes& game_entry = allow_list[entry.first]; - for (const auto& line : entry.second.get()) - { - ASSERT_TRUE(line.second.is()); - if (line.first == "title") - game_entry.game_title = line.second.get(); - else - game_entry.hashes[line.first] = line.second.get(); - } - } - // Iterate over GameSettings directory auto directory = File::ScanDirectoryTree(fmt::format("{}{}GameSettings", sys_directory, DIR_SEP), false); for (const auto& file : directory.children) { // Load ini file + picojson::object approved; Common::IniFile ini_file; ini_file.Load(file.physicalName, true); std::string game_id = file.virtualName.substr(0, file.virtualName.find_first_of('.')); @@ -90,9 +68,6 @@ TEST(PatchAllowlist, VerifyHashes) &geckos); ReadVerified(ini_file, game_id, "AR_RetroAchievements_Verified", true, &action_replays); - // Get game section from allow list - auto game_itr = allow_list.find(game_id); - bool itr_end = (game_itr == allow_list.end()); // Iterate over approved patches for (const auto& patch : patches) { @@ -110,8 +85,7 @@ TEST(PatchAllowlist, VerifyHashes) context->Update(Common::BitCastToArray(entry.conditional)); } auto digest = context->Finish(); - CheckHash(game_id, itr_end ? nullptr : &game_itr->second, - Common::SHA1::DigestToString(digest), patch.name); + approved[patch.name] = picojson::value(Common::SHA1::DigestToString(digest)); } // Iterate over approved geckos for (const auto& code : geckos) @@ -127,8 +101,7 @@ TEST(PatchAllowlist, VerifyHashes) context->Update(Common::BitCastToArray(entry.data)); } auto digest = context->Finish(); - CheckHash(game_id, itr_end ? nullptr : &game_itr->second, - Common::SHA1::DigestToString(digest), code.name); + approved[code.name] = picojson::value(Common::SHA1::DigestToString(digest)); } // Iterate over approved AR codes for (const auto& code : action_replays) @@ -144,27 +117,43 @@ TEST(PatchAllowlist, VerifyHashes) context->Update(Common::BitCastToArray(entry.value)); } auto digest = context->Finish(); - CheckHash(game_id, itr_end ? nullptr : &game_itr->second, - Common::SHA1::DigestToString(digest), code.name); + approved[code.name] = picojson::value(Common::SHA1::DigestToString(digest)); } - // Report missing patches in map - if (itr_end) - continue; - for (auto& remaining_hashes : game_itr->second.hashes) - { - ADD_FAILURE() << "Hash in list not approved in ini." << std::endl - << "Game ID: " << game_id << ":" << game_itr->second.game_title << std::endl - << "Code: " << remaining_hashes.first << ":" << remaining_hashes.second; - } - // Remove section from map - allow_list.erase(game_itr); + // Add approved patches and codes to tree + if (!approved.empty()) + new_allowlist[game_id] = picojson::value(approved); } - // Report remaining sections in map - for (auto& remaining_games : allow_list) + + // Hash new allowlist + std::string new_allowlist_str = picojson::value(new_allowlist).serialize(); + auto context = Common::SHA1::CreateContext(); + context->Update(new_allowlist_str); + auto digest = context->Finish(); + if (digest != AchievementManager::APPROVED_LIST_HASH) { - ADD_FAILURE() << "Game in list has no ini file." << std::endl - << "Game ID: " << remaining_games.first << ":" - << remaining_games.second.game_title; + ADD_FAILURE() << "Approved list hash does not match the one in AchievementMananger." + << std::endl + << "Please update APPROVED_LIST_HASH to the following:" << std::endl + << Common::SHA1::DigestToString(digest); + } + // Compare with old allowlist + static constexpr std::string_view APPROVED_LIST_FILENAME = "ApprovedInis.json"; + std::string old_allowlist; + std::string error; + const auto& list_filepath = fmt::format("{}{}{}", sys_directory, DIR_SEP, APPROVED_LIST_FILENAME); + if (!File::ReadFileToString(list_filepath, old_allowlist) || old_allowlist != new_allowlist_str) + { + static constexpr std::string_view NEW_APPROVED_LIST_FILENAME = "New-ApprovedInis.json"; + const auto& new_list_filepath = + fmt::format("{}{}{}", sys_directory, DIR_SEP, NEW_APPROVED_LIST_FILENAME); + if (!JsonToFile(new_list_filepath, picojson::value(new_allowlist), false)) + { + ADD_FAILURE() << "Failed to write new approved list to " << list_filepath; + } + ADD_FAILURE() << "Approved list needs to be updated. Please run this test in your" << std::endl + << "local environment and copy" << std::endl + << new_list_filepath << std::endl + << "to Data/Sys/ApprovedInis.json to pass this test."; } } @@ -202,30 +191,3 @@ void ReadVerified(const Common::IniFile& ini, const std::string& filename, } } } - -void CheckHash(const std::string& game_id, GameHashes* game_hashes, const std::string& hash, - const std::string& patch_name) -{ - // Check patch in list - if (game_hashes == nullptr) - { - // Report: no patches in game found in list - ADD_FAILURE() << "Approved hash missing from list." << std::endl - << "Game ID: " << game_id << std::endl - << "Code: \"" << hash << "\": \"" << patch_name << "\""; - return; - } - auto hash_itr = game_hashes->hashes.find(hash); - if (hash_itr == game_hashes->hashes.end()) - { - // Report: patch not found in list - ADD_FAILURE() << "Approved hash missing from list." << std::endl - << "Game ID: " << game_id << ":" << game_hashes->game_title << std::endl - << "Code: \"" << hash << "\": \"" << patch_name << "\""; - } - else - { - // Remove patch from map if found - game_hashes->hashes.erase(hash_itr); - } -} diff --git a/Source/UnitTests/UnitTests.vcxproj b/Source/UnitTests/UnitTests.vcxproj index b5e5256915..6725c1cc23 100644 --- a/Source/UnitTests/UnitTests.vcxproj +++ b/Source/UnitTests/UnitTests.vcxproj @@ -104,6 +104,7 @@ +