diff --git a/tools/retrolaunch/cores.conf b/tools/retrolaunch/cores.conf new file mode 100644 index 0000000000..ac4f8f4257 --- /dev/null +++ b/tools/retrolaunch/cores.conf @@ -0,0 +1,15 @@ +# Core preferences, cores are ordered by preference. If a core doesn't exist ; +# or is marked as broken in launch.conf the next in line will be used. ; +"ps1" mednafen-psx pcsxr ; +"smd" genplus ; +"nes" fceu bnes nestopia quicknes ; +"gba" vba ; +"a26" stella ; +"snes" snes9x snes9x-next bsnes-compat bsnes-balanced bsnes-accuracy ; +"gbc" gambatte ; +"gb" gambatte ; +"gg" genplus ; +"nds" desmume ; +"pce" mednafen-pce-fast ; +"sms" genplus ; +"wswan" mednafen-wswan ; diff --git a/tools/retrolaunch/launch.conf b/tools/retrolaunch/launch.conf index 29f6fce918..6da705cf8a 100644 --- a/tools/retrolaunch/launch.conf +++ b/tools/retrolaunch/launch.conf @@ -1,249 +1,491 @@ -# PS1 Gamepad Games ; - -"ps1....Iru!*" mednafen-psx gamepad ; - # PS1 Dualanalog Games ; -"ps1.007 - Demain ne Meurt Jamais" mednafen-psx dualanalog ; -"ps1.007 - Le Monde Ne Suffit Pas" mednafen-psx dualanalog ; -"ps1.007 Racing*" mednafen-psx dualanalog ; -"ps1.007 - The World Is Not Enough*" mednafen-psx dualanalog ; -"ps1.007 - Tomorrow Never Dies*" mednafen-psx dualanalog ; -"ps1.40 Winks*" mednafen-psx dualanalog ; -"ps1.Ace Combat*" mednafen-psx dualanalog ; -"ps1.Aces of the Air*" mednafen-psx dualanalog ; -"ps1.Action Bass*" mednafen-psx dualanalog ; -"ps1.Action Man - Operation Extreme*" mednafen-psx dualanalog ; -"ps1.Advanced V.G. 2*" mednafen-psx dualanalog ; -"ps1.Aironauts*" mednafen-psx dualanalog ; -"ps1.Air Race Championship*" mednafen-psx dualanalog ; -"ps1.Akuji - The Heartless*" mednafen-psx dualanalog ; -"ps1.Alfred Chicken*" mednafen-psx dualanalog ; -"ps1.Alien la Resurrection*" mednafen-psx dualanalog ; -"ps1.Alien Resurrection*" mednafen-psx dualanalog ; -"ps1.Alone In The Dark - The New Nightmare*" mednafen-psx dualanalog ; -"ps1.Alundra 2*" mednafen-psx dualanalog ; -"ps1.Amazing Virtual Sea Monkeys*" mednafen-psx dualanalog ; -"ps1.Animorphs - Shattered Reality*" mednafen-psx dualanalog ; -"ps1.Ape Escape*" mednafen-psx dualanalog ; -"ps1.Apocalypse*" mednafen-psx dualanalog ; -"ps1.Aqua GT*" mednafen-psx dualanalog ; -"ps1.Armored Core - Master of Arena*" mednafen-psx dualanalog ; -"ps1.Armorines - Project Swarm*" mednafen-psx dualanalog ; -"ps1.Army Men 3D*" mednafen-psx dualanalog ; -"ps1.Army Men - Air Attack 2*" mednafen-psx dualanalog ; -"ps1.Army Men - Air Attack*" mednafen-psx dualanalog ; -"ps1.Army Men - Green Rouge*" mednafen-psx dualanalog ; -"ps1.Army Men - Sarge's Heroes 2*" mednafen-psx dualanalog ; -"ps1.Army Men - Sarge's Heroes*" mednafen-psx dualanalog ; -"ps1.Army Men - World War*" mednafen-psx dualanalog ; -"ps1.Assault Retribution*" mednafen-psx dualanalog ; -"ps1.Asterix - Mega Madness*" mednafen-psx dualanalog ; -"ps1.Asteroids*" mednafen-psx dualanalog ; -"ps1.Barbie Explorer" mednafen-psx dualanalog ; -"ps1.Barbie - Gotta Have Games" mednafen-psx dualanalog ; -"ps1.Batman Beyond - Return of the Joker" mednafen-psx dualanalog ; -"ps1.Batman & Robin" mednafen-psx dualanalog ; -"ps1.Beatmania" mednafen-psx dualanalog ; -"ps1.Beat Planet Music" mednafen-psx dualanalog ; -"ps1.Beyblade" mednafen-psx dualanalog ; -"ps1.Big Bass Fishing" mednafen-psx dualanalog ; -"ps1.BioHazard - Director's Cut - Dual Shock*" mednafen-psx dualanalog ; -"ps1.Bishi Bashi Special" mednafen-psx dualanalog ; -"ps1.Blade" mednafen-psx dualanalog ; -"ps1.Blasto!" mednafen-psx dualanalog ; -"ps1.Blast Radius" mednafen-psx dualanalog ; -"ps1.Block Kuzushi" mednafen-psx dualanalog ; -"ps1.Block Wars" mednafen-psx dualanalog ; -"ps1.Bloody Roar 2*" mednafen-psx dualanalog ; -"ps1.Bob the Builder - Can We Fix It" mednafen-psx dualanalog ; -"ps1.Boombots" mednafen-psx dualanalog ; -"ps1.Bratz" mednafen-psx dualanalog ; -"ps1.Brave Fencer Musashi*" mednafen-psx dualanalog ; -"ps1.Breakout" mednafen-psx dualanalog ; -"ps1.Buggy" mednafen-psx dualanalog ; -"ps1.Bugs Bunny - Lost in Time*" mednafen-psx dualanalog ; -"ps1.Bugs Bunny & Taz - Time Busters" mednafen-psx dualanalog ; -"ps1.C-12 - The Final Resistance" mednafen-psx dualanalog ; -"ps1.Captain Commando" mednafen-psx dualanalog ; -"ps1.Cardinal Syn*" mednafen-psx dualanalog ; -"ps1.Carmageddon*" mednafen-psx dualanalog ; -"ps1.Casper - Friends Around The World" mednafen-psx dualanalog ; -"ps1.Chaos Break" mednafen-psx dualanalog ; -"ps1.Chicken Run" mednafen-psx dualanalog ; -"ps1.Chippoke Ralph no Daibouken (Adventure of Little Ralph)" mednafen-psx dualanalog ; -"ps1.Chocobo Racing" mednafen-psx dualanalog ; -"ps1.Chrono Cross*" pcsxr dualanalog ; -"ps1.Colin Mc[rR]ae*" mednafen-psx dualanalog ; -"ps1.Colony Wars*" mednafen-psx dualanalog ; -"ps1.Cosmowarrior Rei" mednafen-psx dualanalog ; -"ps1.Cowboy Bebop" mednafen-psx dualanalog ; -"ps1.Crash Bandicoot 2*" mednafen-psx dualanalog ; -"ps1.Crash Bandicoot 3*" mednafen-psx dualanalog ; -"ps1.Crash Bandicoot Carnival - Crash Bash*" mednafen-psx dualanalog ; -"ps1.Crash Bash Demo" mednafen-psx dualanalog ; -"ps1.Crash Bash" mednafen-psx dualanalog ; -"ps1.Crash Bash" mednafen-psx dualanalog ; -"ps1.Crash Bash & Spyro - Year of the Dragon Demo" mednafen-psx dualanalog ; -"ps1.Crash Team Racing*" mednafen-psx dualanalog multitap ; -"ps1.Crisis Beat" mednafen-psx dualanalog ; -"ps1.Croc 2*" mednafen-psx dualanalog ; -"ps1.Croc - Legend of the Gobbos" mednafen-psx dualanalog ; -"ps1.C - The Contra Adventure" mednafen-psx dualanalog ; -"ps1.CT Special Forces" mednafen-psx dualanalog ; -"ps1.CyberTiger Golf" mednafen-psx dualanalog ; -"ps1.Fighting Force*" mednafen-psx dualanalog ; -"ps1.Future Cop*" mednafen-psx dualanalog ; +"ps1.007 - Demain ne Meurt Jamais" dualanalog ; +"ps1.007 - Le Monde Ne Suffit Pas" dualanalog ; +"ps1.007 Racing*" dualanalog ; +"ps1.007 - The World Is Not Enough*" dualanalog ; +"ps1.007 - Tomorrow Never Dies*" dualanalog ; +"ps1.102 Dalmations - Puppies To The Rescue" dualanalog ; +"ps1.40 Winks*" dualanalog ; +"ps1.Ace Combat*" dualanalog ; +"ps1.Aces of the Air*" dualanalog ; +"ps1.Action Bass*" dualanalog ; +"ps1.Action Man - Operation Extreme*" dualanalog ; +"ps1.Advanced V.G. 2*" dualanalog ; +"ps1.Adventure of Phix" dualanalog ; +"ps1.Aironauts*" dualanalog ; +"ps1.Air Race Championship*" dualanalog ; +"ps1.Akuji - The Heartless*" dualanalog ; +"ps1.Alfred Chicken*" dualanalog ; +"ps1.Alien la Resurrection*" dualanalog ; +"ps1.Alien Resurrection*" dualanalog ; +"ps1.Alone In The Dark - The New Nightmare*" dualanalog ; +"ps1.Alundra 2*" dualanalog ; +"ps1.Amazing Virtual Sea Monkeys*" dualanalog ; +"ps1.Animorphs - Shattered Reality*" dualanalog ; +"ps1.Ape Escape*" dualanalog ; +"ps1.Apocalypse*" dualanalog ; +"ps1.Aqua GT*" dualanalog ; +"ps1.Arcade Party Pack" dualanalog ; +"ps1.Armored Core - Master of Arena*" dualanalog ; +"ps1.Armorines - Project Swarm*" dualanalog ; +"ps1.Army Men 3D*" dualanalog ; +"ps1.Army Men - Air Attack 2*" dualanalog ; +"ps1.Army Men - Air Attack*" dualanalog ; +"ps1.Army Men - Green Rouge*" dualanalog ; +"ps1.Army Men - Sarge's Heroes 2*" dualanalog ; +"ps1.Army Men - Sarge's Heroes*" dualanalog ; +"ps1.Army Men - World War*" dualanalog ; +"ps1.Assault Retribution*" dualanalog ; +"ps1.Asterix - Mega Madness*" dualanalog ; +"ps1.Asteroids*" dualanalog ; +"ps1.Barbie Explorer" dualanalog ; +"ps1.Barbie - Gotta Have Games" dualanalog ; +"ps1.Batman Beyond - Return of the Joker" dualanalog ; +"ps1.Batman & Robin" dualanalog ; +"ps1.Battle Arena Toshinden 4" dualanalog ; +"ps1.Bear in the Big Blue House" dualanalog ; +"ps1.Beatmania" dualanalog ; +"ps1.Beat Planet Music" dualanalog ; +"ps1.Beyblade" dualanalog ; +"ps1.Big Bass Fishing" dualanalog ; +"ps1.BioHazard - Director's Cut - Dual Shock*" dualanalog ; +"ps1.Bishi Bashi Special" dualanalog ; +"ps1.Blade" dualanalog ; +"ps1.Blasto!" dualanalog ; +"ps1.Blast Radius" dualanalog ; +"ps1.Block Kuzushi" dualanalog ; +"ps1.Block Wars" dualanalog ; +"ps1.Bloody Roar 2*" dualanalog ; +"ps1.Bob the Builder - Can We Fix It" dualanalog ; +"ps1.Boombots" dualanalog ; +"ps1.Bratz" dualanalog ; +"ps1.Brave Fencer Musashi*" dualanalog ; +"ps1.Breakout" dualanalog ; +"ps1.Buggy" dualanalog ; +"ps1.Bugs Bunny - Lost in Time*" dualanalog ; +"ps1.Bugs Bunny & Taz - Time Busters" dualanalog ; +"ps1.C-12 - The Final Resistance" dualanalog ; +"ps1.Captain Commando" dualanalog ; +"ps1.Cardinal Syn*" dualanalog ; +"ps1.Carmageddon*" dualanalog ; +"ps1.Casper - Friends Around The World" dualanalog ; +"ps1.Chaos Break" dualanalog ; +"ps1.Chicken Run" dualanalog ; +"ps1.Chippoke Ralph no Daibouken (Adventure of Little Ralph)" dualanalog ; +"ps1.Chocobo Racing" dualanalog ; +"ps1.Chrono Cross*" dualanalog ; +"ps1.Colin Mc[rR]ae*" dualanalog ; +"ps1.Colony Wars*" dualanalog ; +"ps1.Cosmowarrior Rei" dualanalog ; +"ps1.Cowboy Bebop" dualanalog ; +"ps1.Crash Bandicoot 2*" dualanalog ; +"ps1.Crash Bandicoot 3*" dualanalog ; +"ps1.Crash Bandicoot Carnival - Crash Bash*" dualanalog ; +"ps1.Crash Bash Demo" dualanalog ; +"ps1.Crash Bash" dualanalog ; +"ps1.Crash Bash" dualanalog ; +"ps1.Crash Bash & Spyro - Year of the Dragon Demo" dualanalog ; +"ps1.Crash Team Racing*" dualanalog multitap ; +"ps1.Crisis Beat" dualanalog ; +"ps1.Croc 2*" dualanalog ; +"ps1.Croc - Legend of the Gobbos" dualanalog ; +"ps1.C - The Contra Adventure" dualanalog ; +"ps1.CT Special Forces" dualanalog ; +"ps1.CyberTiger Golf" dualanalog ; +"ps1.Danger Girl" dualanalog ; +"ps1.Darkstalkers 3*" dualanalog ; +"ps1.Darkstone - Evil Reigns" dualanalog ; +"ps1.Deep Freeze*" dualanalog ; +"ps1.Delta Force - Urban Warfar" dualanalog ; +"ps1.Demolition Racer" dualanalog ; +"ps1.Dexter's Laboratory - Mandark's Lab" dualanalog ; +"ps1.Dezaemon Kids!*" dualanalog ; +"ps1.Die Hard Trilogy 2*" dualanalog ; +"ps1.Digimon Rumble Arena" dualanalog ; +"ps1.Disney's 101 Dalmations*" dualanalog ; +"ps1.Disney's A Bug's Life*" dualanalog ; +"ps1.Disney's Aladdin la revanche de Nasira" dualanalog ; +"ps1.Disney's Aladdin - La Vendetta di Nasira" dualanalog ; +"ps1.Disney's Aladdin - Nasira's Revenge" dualanalog ; +"ps1.Disney's Buzz Lightyear of Star Command" dualanalog ; +"ps1.Disney's Peter Pan in Return to Neverland" dualanalog ; +"ps1.Disney's Tarzan*" dualanalog ; +"ps1.Disney's The Emperor's New Groove" dualanalog ; +"ps1.Disney's The Lion King II - Simba's Mighty Adventure" dualanalog ; +"ps1.Disney's Toy Story 2 - Buzz Lightyear to the Rescue*" dualanalog ; +"ps1.Dragon Valor*" dualanalog ; +"ps1.Dreams" dualanalog ; +"ps1.Driver 2*" dualanalog ; +"ps1.Duke Nukem - Land of the Babes" dualanalog ; +"ps1.Duke Nukem - Time to Kill" dualanalog ; +"ps1.Dukes of Hazzard*" dualanalog ; +"ps1.Eagle One - Harrier Attack" dualanalog ; +"ps1.Ehrgeiz" dualanalog ; +"ps1.Elemental Gearbolt" dualanalog ; +"ps1.ET - The Extra-Terrestrial - Interplanetary Mission" dualanalog ; +"ps1.Evil Dead - Hail to the King*" dualanalog ; +"ps1.Fatal Fury*" dualanalog ; +"ps1.Fear Effect*" dualanalog ; +"ps1.Fighting Force*" dualanalog ; +"ps1.Firebugs" dualanalog ; +"ps1.Fist of the North Star - Hokuto no Ken" dualanalog ; +"ps1.Flintstones Bedrock Bowling" dualanalog ; +"ps1.Forsaken*" dualanalog ; +"ps1.From TV Animation - One Piece - Oceans of Dreams" dualanalog ; +"ps1.From TV Animation - One Piece - Tobidase Kaizokudan!*" dualanalog ; +"ps1.Future Cop*" dualanalog ; +"ps1.Galaga - Destination Earth" dualanalog ; +"ps1.Galerians*" dualanalog ; +"ps1.Gauntlet Legends" dualanalog ; +"ps1.G Darius*" dualanalog ; +"ps1.Gex 3 - Deep Cover Gecko*" dualanalog ; +"ps1.Ghoul Panic" dualanalog ; +"ps1.Global Domination*" dualanalog ; +"ps1.G-Police*" dualanalog ; +"ps1.Gran Turismo*" dualanalog ; +"ps1.Grinch, The" dualanalog ; +"ps1.Groove Adventure Rave*" dualanalog ; +"ps1.Grudge Warriors" dualanalog ; +"ps1.Guardian of Darkness, The" dualanalog ; +"ps1.Guilty Gear*" dualanalog ; +"ps1.Guitar Freaks*" dualanalog ; +"ps1.Gunbare! The Game Paradise 2" dualanalog ; +"ps1.Gunfighter - The Legend of Jesse James" dualanalog ; +"ps1.Hakaioh - King of Crusher" dualanalog ; +"ps1.Harry Potter and The Chamber of Secrets" dualanalog ; +"ps1.Harry Potter and The Philosopher's Stone" dualanalog ; +"ps1.Harry Potter and The Sorcerer's Stone" dualanalog ; +"ps1.Hellboy - Asylum Seeker" dualanalog ; +"ps1.Hidden & Dangerous" dualanalog ; +"ps1.Hokuto no Ken - Seiki Matsukyu Seishi Densets" dualanalog ;u (Fist of the North Star) +"ps1.Hot Wheels - Extreme Racing" dualanalog ; +"ps1.Hugo*" dualanalog ; +"ps1.Hydro Thunder" dualanalog ; +"ps1.Infestation" dualanalog ; +"ps1.Inspector Gadget - Gadget's Crazy Maze" dualanalog ; +"ps1.Invasion From Beyond - B-Movie" dualanalog ; +"ps1.Iron Soldier 3" dualanalog ; +"ps1.Irritating Stick*" dualanalog ; +"ps1.IS - Internal Section" dualanalog ; +"ps1.Jackie Chan Stuntmaster" dualanalog ; +"ps1.Jersey Devil*" dualanalog ; +"ps1.Jet Moto 2" dualanalog ; +"ps1.Jet Moto 3*" dualanalog ; +"ps1.Jinx" dualanalog ; +"ps1.Kakuge-Yaro - Fighting Game Cre" dualanalog ;ator +"ps1.Kamen Rider*" dualanalog ; +"ps1.Kidou Keisatsu Patlabor - Game Edition (Mobile Police)" dualanalog ; +"ps1.Kitchen Panic" dualanalog ; +"ps1.KKND - Krossfire*" dualanalog ; +"ps1.Klaymen Gun-Hockey" dualanalog ; +"ps1.Korokoro Postnin" dualanalog ; +"ps1.Largo Winch - Commando Sar" dualanalog ; +"ps1.Lattice - 200 Ec7" dualanalog ; "ps1.Legacy of Kain - Soul Reaver*" pcsxr dualanalog ; -"ps1.Saru! Get You!*" mednafen-psx dualanalog ; -"ps1.Simple Characters 2000 Series #02 - Afro Inu - The Puzzle*" mednafen-psx dualanalog ; -"ps1.Soul Reaver - Legacy of Kain*" mednafen-psx dualanalog ; -"ps1.Spyro the Dragon*"" mednafen-psx dualanalog ; -"ps1.Spyro - Year of the Dragon*" mednafen-psx dualanalog ; -"ps1.Vagrant Story*" mednafen-psx dualanalog ; +"ps1.Legend of Mana" dualanalog ; +"ps1.Lego Island 2*" dualanalog ; +"ps1.Looney Toons Sheep Raider" dualanalog ; +"ps1.Lucifer Ring" dualanalog ; +"ps1.Lucky Luke*" dualanalog ; +"ps1.Marble Master" dualanalog ; +"ps1.Marvel Super Heroes" dualanalog ; +"ps1.Mary-Kate & Ashley - Magical Mystery Mall" dualanalog ; +"ps1.Mass Destruction" dualanalog ; +"ps1.MDK" dualanalog ; +"ps1.Medal of Honor*" dualanalog ; +"ps1.Medievil" dualanalog ; +"ps1.MegaMan Legends 2" dualanalog ; +"ps1.Men In Black*" dualanalog ; +"ps1.Metal Gear Solid*" dualanalog ; +"ps1.Micro Maniacs*" dualanalog ; +"ps1.Millennium Soldier - Expendable" dualanalog ; +"ps1.Miracle Space Race" dualanalog ; +"ps1.Misadventures of Tron Bonne, The" dualanalog ; +"ps1.Missile Command*" dualanalog ; +"ps1.Mission - Impossible" dualanalog ; +"ps1.Mission Impossible" dualanalog ; +"ps1.Monkey Hero*" dualanalog ; +"ps1.Moorhen 3 - Chicken Chase" dualanalog ; +"ps1.Mortal Kombat - Special Forces" dualanalog ; +"ps1.Mortal Kombat Special Forces" dualanalog ; +"ps1.Ms. Pac-Man Maze Madness Demo" dualanalog ; +"ps1.Ms. Pacman - Maze Madness" dualanalog ; +"ps1.MTV Celebrity Deathmatch" dualanalog ; +"ps1.Mummy, The" dualanalog ; +"ps1.Muppet Monster Adventure*" dualanalog ; +"ps1.N2O Nitrous Oxide" dualanalog ; +"ps1.NBA Hoopz" dualanalog ; +"ps1.NFL Blitz 2001" dualanalog ; +"ps1.NFL Blitz" dualanalog ; +"ps1.N-Gen - Next Generation Racing" dualanalog ; +"ps1.N-Gen Racing" dualanalog ; +"ps1.Night Raid" dualanalog ; +"ps1.Nijiiro Dodgeball" dualanalog ; +"ps1.Nijiiro Twinkle - Guruguru Daisakusen*" dualanalog ; +"ps1.O.D.T. Demo" dualanalog ; +"ps1.ODT - Escape or Die Trying*" dualanalog ; +"ps1.Omega Boost" dualanalog ; +"ps1.One" dualanalog ; +"ps1.Overblood 2*" dualanalog ; +"ps1.Over Blood" dualanalog ; +"ps1.Pac-Man World*" dualanalog ; +"ps1.Panzer Front*" dualanalog ; +"ps1.Parasite Eve*" dualanalog ; +"ps1.Pepsi-Man" dualanalog ; +"ps1.Peter Pan - Return to Neverland" dualanalog ; +"ps1.Phix no Daibouken - In The Magnetic World" dualanalog ; +"ps1.Planet of the Apes" dualanalog ; +"ps1.Point Blank 3*" dualanalog ; +"ps1.Powerpuff Girls - Chemical X-Traction" dualanalog ; +"ps1.Pro Pinball*" dualanalog ; +"ps1.Puchi Carat*" dualanalog ; +"ps1.Q-Bert" dualanalog ; +"ps1.Radikal Bikers" dualanalog ; +"ps1.Rageball" dualanalog ; +"ps1.Rampage Through Time" dualanalog ; +"ps1.Rascal Demo" dualanalog ; +"ps1.Rascal" dualanalog ; +"ps1.Raycrisis - Series Termination" dualanalog ; +"ps1.Rayman 2 - The Great Escape*" dualanalog ; +"ps1.Rayman Rush" dualanalog ; +"ps1.Razor Freestyle Scooter" dualanalog ; +"ps1.RC de Go*" dualanalog ; +"ps1.RC Helicopter*" dualanalog ; +"ps1.RC Revenge*" dualanalog ; +"ps1.Reboot*" dualanalog ; +"ps1.Rescue Shot*" dualanalog ; +"ps1.Resident Evil 2*" dualanalog ; +"ps1.Resident Evil 3*" dualanalog ; +"ps1.Resident Evil Survivor" dualanalog ; +"ps1.Re-Volt*" dualanalog ; +"ps1.Rising Zan*" dualanalog ; +"ps1.Road Rash 3D*" dualanalog ; +"ps1.Road Rash - Jailbreak" dualanalog ; +"ps1.Rogue Trip*" dualanalog ; +"ps1.Rollcage*" dualanalog ; +"ps1.Rosco McQueen*" dualanalog ; +"ps1.Rugrats*" dualanalog ; +"ps1.Runabout 2*" dualanalog ; +"ps1.Sabrina the Teenage Witch - A Twitch i" dualanalog ;n Time +"ps1.Saltwater Sportfishing" dualanalog ; +"ps1.Saru! Get You!*" dualanalog ; +"ps1.S.C.A.R.S." dualanalog ; +"ps1.Scooby-Doo and The Cyber Chase*" dualanalog ; +"ps1.SCUS-94647 "Disney's Treasure Planet" dualanalog ; +"ps1.Shadow Man*" dualanalog ; +"ps1.Shadow Master" dualanalog ; +"ps1.Shiritsu*" dualanalog ; +"ps1.Silent Bomber" dualanalog ; +"ps1.Silent Hill*" dualanalog ; +"ps1.Silhouette Mirage*" dualanalog ; +"ps1.Simple 1500 Series Vol.099 - The Kendo" dualanalog ; +"ps1.Simple Characters 2000 Series #02 - Afro Inu - The Puzzle*" dualanalog ; +"ps1.Simple Characters 2000 Series #08 - Gatchaman Shoot" dualanalog ; +"ps1.Simpsons Wrestling" dualanalog ; +"ps1.SLUS-01286 "Disney's The Little Mermaid II*" dualanalog ; +"ps1.Small Soldiers*" dualanalog ; +"ps1.Smurf Racer" dualanalog ; +"ps1.Snowboarding" dualanalog ; +"ps1.Sorcerer's Maze" dualanalog ; +"ps1.Soul of the Samurai" dualanalog ; +"ps1.Soul Reaver - Legacy of Kain*" dualanalog ; +"ps1.Space Battleship - Uchuu Senkan Yamato" dualanalog ; +"ps1.Space Debris*" dualanalog ; +"ps1.Spec Ops*" dualanalog ; +"ps1.Speedball 2100*" dualanalog ; +"ps1.Spiderman*" dualanalog ; +"ps1.Spin Jam" dualanalog ; +"ps1.Spyro the Dragon*"" dualanalog ; +"ps1.Spyro - Year of the Dragon*" dualanalog ; +"ps1.Starfighter Sanvein" dualanalog ; +"ps1.Star Ixiom" dualanalog ; +"ps1.Star Ocean - The Second Story*" dualanalog ; +"ps1.Star Trek - Invasion" dualanalog ; +"ps1.Star Wars*" dualanalog ; +"ps1.Steel Reign" dualanalog ; +"ps1.Street Sk8er*" dualanalog ; +"ps1.Syphon Filter*" dualanalog ; +"ps1.T'ai Fu*" dualanalog ; +"ps1.Tail Concerto*" dualanalog ; +"ps1.Tales of Destiny*" dualanalog ; +"ps1.Tales of Eternia*" dualanalog ; +"ps1.Tales of Phantasia*" dualanalog ; +"ps1.Team Buddies" dualanalog ; +"ps1.Technomage" dualanalog ; +"ps1.Tenchu 2*" dualanalog ; +"ps1.Terracon" dualanalog ; +"ps1.Test Drive 5" dualanalog ; +"ps1.Test Drive 6" dualanalog ; +"ps1.Threads of Fate" dualanalog ; +"ps1.Thunder Force V - Perfect System" dualanalog ; +"ps1.Time Crisis II - Project Titan*" dualanalog ; +"ps1.Time Crisis - Project Titan" dualanalog ; +"ps1.Tintin - Destination Adventure" dualanalog ; +"ps1.Tiny Bullets" dualanalog ; +"ps1.Tiny Toons Adventures*" dualanalog ; +"ps1.Tobal 2" dualanalog ; +"ps1.Tomba!*" dualanalog ; +"ps1.Tombi!*" dualanalog ; +"ps1.Tomb Raider*" dualanalog ; +"ps1.Tom Clancy's Rainbow Six*" dualanalog ; +"ps1.Treasures of the Deep*" dualanalog ; +"ps1.Twinbee RPG*" dualanalog ; +"ps1.Twisted Metal 3*" dualanalog ; +"ps1.Twisted Metal 4*" dualanalog ; +"ps1.Twisted Metal III Demo" dualanalog ; +"ps1.Twisted Metal - Small Brawl" dualanalog ; +"ps1.Tyco RC*" dualanalog ; +"ps1.Um Jammer Lammy*" dualanalog ; +"ps1.U.P.P." dualanalog ; +"ps1.Uprising X" dualanalog ; +"ps1.Urban Chaos*" dualanalog ; +"ps1.V2000" dualanalog ; +"ps1.Vagrant Story*" dualanalog ; +"ps1.Vampire Hunter D*" dualanalog ; +"ps1.Vanark - Astro Trooper" dualanalog ; +"ps1.VDisney's Atlantis*" dualanalog ; +"ps1.VDisney's Lilo & Stitch" dualanalog ; +"ps1.VDisney's Pooh's Party Game - In Search of the Treasure" dualanalog ; +"ps1.Vigilante 8*" dualanalog ; +"ps1.Viper" dualanalog ; +"ps1.War Games - Defcon 1" dualanalog ; +"ps1.Warriors of Might & Magic" dualanalog ; +"ps1.Wild 9" dualanalog ; +"ps1.Wing Over 2" dualanalog ; +"ps1.Winnie the Pooh - Tigger's Honey Hunt" dualanalog ; +"ps1.Wipeout 3*" dualanalog ; +"ps1.World's Scariest Police Chases" dualanalog ; +"ps1.Worms World Party" dualanalog ; +"ps1.Xena - Warrior Princess*" dualanalog ; +"ps1.X-Men - Mutant Academy*" dualanalog ; +"ps1.Zanac X Zanac" dualanalog ; +"ps1.Zoboomafoo" dualanalog ; -"ps1.Earthworm Jim 2" pcsxr ; -"ps1.Mickey's Wild Adventures" pcsxr ; +# Genesis\MD Multitap Games ; + +"smd.Gauntlet IV*" multitap ; +"smd.NBA Jam Tournament Edition*" multitap ; +"smd.General Chaos*" multitap ; +"smd.Mega Bomberman*" multitap ; +"smd.World Cup USA 94*" multitap ; +"smd.Lost Vikings, The*" multitap ; +"smd.Mutant League Hockey*" multitap ; # SNES BSNES Performance ; -"snes. - -"ps1.Earthworm Jim 2" pcsxr ; -"ps1.Mickey's Wild Adventures" pcsxr ; - -# SNES BSNES Performance ; -"snes.Psycho Dream*" bsnes-performance ; +"snes.Psycho Dream*" !snes9x-next ; # SNES Multitap Games ; -"snes.Bakukyuu Renpatsu!! Super B-Daman*" snes9x multitap ; -"snes.Bakutou Dochers - Bumps-jima wa Oosawagi*" snes9x multitap ; -"snes.Barkley Shut Up and Jam!*" snes9x multitap ; -"snes.Barkley Shut Up and Jam!*" snes9x multitap ; -"snes.Battle Cross*" snes9x multitap ; -"snes.Battle Jockey*" snes9x multitap ; -"snes.Bill Walsh College Football*" snes9x multitap ; -"snes.Capcom's Soccer Shootout*" snes9x multitap ; -"snes.College Slam*" snes9x multitap ; -"snes.Crystal Beans From Dungeon Explorer*" snes9x multitap ; -"snes.Dragon - The Bruce Lee Story*" snes9x multitap ; -"snes.Dream Basketball - Dunk and Hoop*" snes9x multitap ; -"snes.Dynamic Stadium*" snes9x multitap ; -"snes.ESPN National Hockey Night*" snes9x multitap ; -"snes.FIFA 98*" snes9x multitap ; -"snes.FIFA International Soccer*" snes9x multitap ; -"snes.FIFA Soccer 96*" snes9x multitap ; -"snes.FIFA Soccer 97*" snes9x multitap ; -"snes.Final Set*" snes9x multitap ; -"snes.Fire Striker*" snes9x multitap ; -"snes.From TV Animation Slam Dunk - SD Heat Up!!*" snes9x multitap ; -"snes.Go! Go! Dodge League*" snes9x multitap ; -"snes.Hammerlock Wrestling*" snes9x multitap ; -"snes.Hat Trick Hero 2*" snes9x multitap ; -"snes.Head-On Soccer*" snes9x multitap ; -"snes.Hebereke no Oishii Puzzle ha Irimasenka*" snes9x multitap ; -"snes.Human Grand Prix III - F1 Triple Battle*" snes9x multitap ; -"snes.Human Grand Prix IV - F1 Dream Battle*" snes9x multitap ; -"snes.Hungry Dinosaurs*" snes9x multitap ; -"snes.International Superstar Soccer Deluxe*" snes9x multitap ; -"snes.J.League Excite Stage '94*" snes9x multitap ; -"snes.J.League Excite Stage '95*" snes9x multitap ; -"snes.J.League Excite Stage '96*" snes9x multitap ; -"snes.J.League Super Soccer '95*" snes9x multitap ; -"snes.J.League Super Soccer*" snes9x multitap ; -"snes.JWP Joshi Pro Wrestling - Pure Wrestle Queens*" snes9x multitap ; -"snes.Jikkyou Power Pro Wrestling '96*" snes9x multitap ; -"snes.Jimmy Connors Pro Tennis Tour*" snes9x multitap ; -"snes.Kunio-kun no Dodge Ball dayo Zenin Shuugou!*" snes9x multitap ; -"snes.Looney Tunes Basketball*" snes9x multitap ; -"snes.Madden NFL '94*" snes9x multitap ; -"snes.Madden NFL '95*" snes9x multitap ; -"snes.Madden NFL '96*" snes9x multitap ; -"snes.Madden NFL '97*" snes9x multitap ; -"snes.Madden NFL '98*" snes9x multitap ; -"snes.Micro Machines 2 - Turbo Tournament*" snes9x multitap ; -"snes.Micro Machines*" snes9x multitap ; -"snes.Mizuki Shigeru no Youkai Hyakkiyakou*" snes9x multitap ; -"snes.Multi Play Volleyball*" snes9x multitap ; -"snes.NBA Give 'N Go*" snes9x multitap ; -"snes.NBA Hang Time*" snes9x multitap ; -"snes.NBA Jam - Tournament Edition*" snes9x multitap ; -"snes.NBA Jam*" snes9x multitap ; -"snes.NBA Live 95*" snes9x multitap ; -"snes.NBA Live 96*" snes9x multitap ; -"snes.NBA Live 97*" snes9x multitap ; -"snes.NBA Live 98*" snes9x multitap ; -"snes.NCAA Final Four Basketball*" snes9x multitap ; -"snes.NCAA Football*" snes9x multitap ; -"snes.NFL Quarterback Club 96*" snes9x multitap ; -"snes.NFL Quarterback Club*" snes9x multitap ; -"snes.NHL '94*" snes9x multitap ; -"snes.NHL '98*" snes9x multitap ; -"snes.NHL Pro Hockey '94*" snes9x multitap ; -"snes.Natsume Championship Wrestling*" snes9x multitap ; -"snes.Peace Keepers, The*" snes9x multitap ; -"snes.Pieces*" snes9x multitap ; -"snes.Rap Jam - Volume One*" snes9x multitap ; -"snes.Saturday Night Slam Masters*" snes9x multitap ; -"snes.Secret of Mana*" snes9x multitap ; -"snes.Shin Nippon Pro Wrestling '94 - Battlefield in Tokyo Dome*" snes9x multitap ; -"snes.Shin Nippon Pro Wrestling - Chou Senshi in Tokyo Dome*" snes9x multitap ; -"snes.Shin Nippon Pro Wrestling Kounin '95 - Tokyo Dome Battle 7*" snes9x multitap ; -"snes.Smash Tennis*" snes9x multitap ; -"snes.Sporting News, The - Power Baseball*" snes9x multitap ; -"snes.Sterling Sharpe End 2 End*" snes9x multitap ; -"snes.Street Hockey '95*" snes9x multitap ; -"snes.Street Racer*" snes9x multitap ; -"snes.Sugoi Hebereke*" snes9x multitap ; -"snes.Sugoro Quest++ Dicenics*" snes9x multitap ; -"snes.Super Bomberman - Panic Bomber W*" snes9x multitap ; -"snes.Super Bomberman 2*" snes9x multitap ; -"snes.Super Bomberman 3*" snes9x multitap ; -"snes.Super Bomberman 4*" snes9x multitap ; -"snes.Super Bomberman 5*" snes9x multitap ; -"snes.Super Bomberman*" snes9x multitap ; -"snes.Super Fire Pro Wrestling - Queen's Special*" snes9x multitap ; -"snes.Super Fire Pro Wrestling Special*" snes9x multitap ; -"snes.Super Fire Pro Wrestling X Premium*" snes9x multitap ; -"snes.Super Fire Pro Wrestling X*" snes9x multitap ; -"snes.Super Formation Soccer 94 - World Cup Final Data*" snes9x multitap ; -"snes.Super Formation Soccer 94*" snes9x multitap ; -"snes.Super Formation Soccer 95 della Serie A - UCC Xaqua*" snes9x multitap ; -"snes.Super Formation Soccer 95 della Serie A*" snes9x multitap ; -"snes.Super Formation Soccer 96*" snes9x multitap ; -"snes.Super Formation Soccer II*" snes9x multitap ; -"snes.Super Ice Hockey*" snes9x multitap ; -"snes.Super Kyousouba - Kaze no Sylphid*" snes9x multitap ; -"snes.Super Power League*" snes9x multitap ; -"snes.Super Tekkyuu Fight!*" snes9x multitap ; -"snes.Super Tetris 3*" snes9x multitap ; -"snes.Syndicate*" snes9x multitap ; -"snes.Tenryu Genichiro no Pro Wrestling Revolution*" snes9x multitap ; -"snes.Tiny Toon Adventures - Wild & Wacky Sports*" snes9x multitap ; -"snes.Top Gear 3000*" snes9x multitap ; -"snes.Turbo Toons*" snes9x multitap ; -"snes.Virtual Soccer*" snes9x multitap ; -"snes.Vs. Collection*" snes9x multitap ; -"snes.WWF Raw*" snes9x multitap ; -"snes.Yuujin no Furi Furi Girls*" snes9x multitap ; -"snes.Zero 4 Champ RR-Z*" snes9x multitap ; -"snes.Zero 4 Champ RR*" snes9x multitap ; - -# Defaults ; - -"gba.*" vba ; -"gbc.*" gambatte ; -"gb.*" gambatte ; -"gg.*" genplus ; -"nes.*" fceu ; -"pcecd.*" mednafen-pce-fast ; -"pce.*" mednafen-pce-fast ; -"ps1.*" mednafen-psx ; -"wswan.*" mednafen-wswan ; -"a26.*" stella ; -"scd.*" genplus ; -"sg1000.*" genplus ; -"smd.*" genplus ; -"sms.*" genplus ; -"snes.*" snes9x ; -"nds.*" desmume ; +"snes.Bakukyuu Renpatsu!! Super B-Daman*" multitap ; +"snes.Bakutou Dochers - Bumps-jima wa Oosawagi*" multitap ; +"snes.Barkley Shut Up and Jam!*" multitap ; +"snes.Barkley Shut Up and Jam!*" multitap ; +"snes.Battle Cross*" multitap ; +"snes.Battle Jockey*" multitap ; +"snes.Bill Walsh College Football*" multitap ; +"snes.Capcom's Soccer Shootout*" multitap ; +"snes.College Slam*" multitap ; +"snes.Crystal Beans From Dungeon Explorer*" multitap ; +"snes.Dragon - The Bruce Lee Story*" multitap ; +"snes.Dream Basketball - Dunk and Hoop*" multitap ; +"snes.Dynamic Stadium*" multitap ; +"snes.ESPN National Hockey Night*" multitap ; +"snes.FIFA 98*" multitap ; +"snes.FIFA International Soccer*" multitap ; +"snes.FIFA Soccer 96*" multitap ; +"snes.FIFA Soccer 97*" multitap ; +"snes.Final Set*" multitap ; +"snes.Fire Striker*" multitap ; +"snes.From TV Animation Slam Dunk - SD Heat Up!!*" multitap ; +"snes.Go! Go! Dodge League*" multitap ; +"snes.Hammerlock Wrestling*" multitap ; +"snes.Hat Trick Hero 2*" multitap ; +"snes.Head-On Soccer*" multitap ; +"snes.Hebereke no Oishii Puzzle ha Irimasenka*" multitap ; +"snes.Human Grand Prix III - F1 Triple Battle*" multitap ; +"snes.Human Grand Prix IV - F1 Dream Battle*" multitap ; +"snes.Hungry Dinosaurs*" multitap ; +"snes.International Superstar Soccer Deluxe*" multitap ; +"snes.J.League Excite Stage '94*" multitap ; +"snes.J.League Excite Stage '95*" multitap ; +"snes.J.League Excite Stage '96*" multitap ; +"snes.J.League Super Soccer '95*" multitap ; +"snes.J.League Super Soccer*" multitap ; +"snes.JWP Joshi Pro Wrestling - Pure Wrestle Queens*" multitap ; +"snes.Jikkyou Power Pro Wrestling '96*" multitap ; +"snes.Jimmy Connors Pro Tennis Tour*" multitap ; +"snes.Kunio-kun no Dodge Ball dayo Zenin Shuugou!*" multitap ; +"snes.Looney Tunes Basketball*" multitap ; +"snes.Madden NFL '94*" multitap ; +"snes.Madden NFL '95*" multitap ; +"snes.Madden NFL '96*" multitap ; +"snes.Madden NFL '97*" multitap ; +"snes.Madden NFL '98*" multitap ; +"snes.Micro Machines 2 - Turbo Tournament*" multitap ; +"snes.Micro Machines*" multitap ; +"snes.Mizuki Shigeru no Youkai Hyakkiyakou*" multitap ; +"snes.Multi Play Volleyball*" multitap ; +"snes.NBA Give 'N Go*" multitap ; +"snes.NBA Hang Time*" multitap ; +"snes.NBA Jam - Tournament Edition*" multitap ; +"snes.NBA Jam*" multitap ; +"snes.NBA Live 95*" multitap ; +"snes.NBA Live 96*" multitap ; +"snes.NBA Live 97*" multitap ; +"snes.NBA Live 98*" multitap ; +"snes.NCAA Final Four Basketball*" multitap ; +"snes.NCAA Football*" multitap ; +"snes.NFL Quarterback Club 96*" multitap ; +"snes.NFL Quarterback Club*" multitap ; +"snes.NHL '94*" multitap ; +"snes.NHL '98*" multitap ; +"snes.NHL Pro Hockey '94*" multitap ; +"snes.Natsume Championship Wrestling*" multitap ; +"snes.Peace Keepers, The*" multitap ; +"snes.Pieces*" multitap ; +"snes.Rap Jam - Volume One*" multitap ; +"snes.Saturday Night Slam Masters*" multitap ; +"snes.Secret of Mana*" multitap ; +"snes.Shin Nippon Pro Wrestling '94 - Battlefield in Tokyo Dome*" multitap ; +"snes.Shin Nippon Pro Wrestling - Chou Senshi in Tokyo Dome*" multitap ; +"snes.Shin Nippon Pro Wrestling Kounin '95 - Tokyo Dome Battle 7*" multitap ; +"snes.Smash Tennis*" multitap ; +"snes.Sporting News, The - Power Baseball*" multitap ; +"snes.Sterling Sharpe End 2 End*" multitap ; +"snes.Street Hockey '95*" multitap ; +"snes.Street Racer*" multitap ; +"snes.Sugoi Hebereke*" multitap ; +"snes.Sugoro Quest++ Dicenics*" multitap ; +"snes.Super Bomberman - Panic Bomber W*" multitap ; +"snes.Super Bomberman 2*" multitap ; +"snes.Super Bomberman 3*" multitap ; +"snes.Super Bomberman 4*" multitap ; +"snes.Super Bomberman 5*" multitap ; +"snes.Super Bomberman*" multitap ; +"snes.Super Fire Pro Wrestling - Queen's Special*" multitap ; +"snes.Super Fire Pro Wrestling Special*" multitap ; +"snes.Super Fire Pro Wrestling X Premium*" multitap ; +"snes.Super Fire Pro Wrestling X*" multitap ; +"snes.Super Formation Soccer 94 - World Cup Final Data*" multitap ; +"snes.Super Formation Soccer 94*" multitap ; +"snes.Super Formation Soccer 95 della Serie A - UCC Xaqua*" multitap ; +"snes.Super Formation Soccer 95 della Serie A*" multitap ; +"snes.Super Formation Soccer 96*" multitap ; +"snes.Super Formation Soccer II*" multitap ; +"snes.Super Ice Hockey*" multitap ; +"snes.Super Kyousouba - Kaze no Sylphid*" multitap ; +"snes.Super Power League*" multitap ; +"snes.Super Tekkyuu Fight!*" multitap ; +"snes.Super Tetris 3*" multitap ; +"snes.Syndicate*" multitap ; +"snes.Tenryu Genichiro no Pro Wrestling Revolution*" multitap ; +"snes.Tiny Toon Adventures - Wild & Wacky Sports*" multitap ; +"snes.Top Gear 3000*" multitap ; +"snes.Turbo Toons*" multitap ; +"snes.Virtual Soccer*" multitap ; +"snes.Vs. Collection*" multitap ; +"snes.WWF Raw*" multitap ; +"snes.Yuujin no Furi Furi Girls*" multitap ; +"snes.Zero 4 Champ RR-Z*" multitap ; +"snes.Zero 4 Champ RR*" multitap ; diff --git a/tools/retrolaunch/main.c b/tools/retrolaunch/main.c index b38ddfa992..87fc91ae1d 100644 --- a/tools/retrolaunch/main.c +++ b/tools/retrolaunch/main.c @@ -138,22 +138,22 @@ static int get_sha1(const char *path, char *result) } struct RunInfo { - char core[50]; + char broken_cores[PATH_MAX]; int multitap; int dualanalog; + char system[10]; }; -static int get_run_info(struct RunInfo *info, char *game_name) +static int read_launch_conf(struct RunInfo *info, const char *game_name) { int fd = open("./launch.conf", O_RDONLY); int rv; + int bci = 0; char token[MAX_TOKEN_LEN]; if (fd < 0) { return -errno; } - memset(info, 0, sizeof(struct RunInfo)); - while (1) { if ((rv = get_token(fd, token, MAX_TOKEN_LEN)) < 0) { goto clean; @@ -167,18 +167,9 @@ static int get_run_info(struct RunInfo *info, char *game_name) } LOG_DEBUG("Matched rule '%s'", token); - - if ((rv = get_token(fd, token, MAX_TOKEN_LEN)) < 0) { - goto clean; - } - break; } - strncpy(info->core, token, 50); - info->multitap = 0; - info->dualanalog = 0; - if ((rv = get_token(fd, token, MAX_TOKEN_LEN)) < 0) { goto clean; } @@ -188,6 +179,9 @@ static int get_run_info(struct RunInfo *info, char *game_name) info->multitap = 1; } else if (strcmp(token, "dualanalog") == 0) { info->dualanalog = 1; + } else if (token[0] == '!') { + strncpy(&info->broken_cores[bci], &token[1], PATH_MAX - bci); + bci += strnlen(&token[1], PATH_MAX) + 1; } if ((rv = get_token(fd, token, MAX_TOKEN_LEN)) < 0) { @@ -201,6 +195,25 @@ static int get_run_info(struct RunInfo *info, char *game_name) return rv; } +static int get_run_info(struct RunInfo *info, const char *game_name) { + memset(info, 0, sizeof(struct RunInfo)); + int i; + + for (i = 0; i < 9; i++) { + if (game_name[i] == '.') { + break; + } + info->system[i] = game_name[i]; + } + info->system[i] = '\0'; + info->multitap = 0; + info->dualanalog = 0; + + read_launch_conf(info, game_name); + return 0; +} + + const char *SUFFIX_MATCH[] = { ".a26", "a26", ".bin", "smd", @@ -268,15 +281,91 @@ static int detect_game(const char *path, char *game_name, size_t max_len) } } +static int select_core(char *core_path, size_t max_len, + const struct RunInfo *info) { + int fd = open("./cores.conf", O_RDONLY); + int rv; + int bci = 0; + char token[MAX_TOKEN_LEN]; + int broken = 0; + if (fd < 0) { + return -errno; + } + + LOG_INFO("Selecting core for system '%s'", info->system); + while (1) { + if ((rv = get_token(fd, token, MAX_TOKEN_LEN)) < 0) { + goto clean; + } + + if (rl_fnmatch(token, info->system, 0) != 0) { + if ((rv = find_token(fd, ";")) < 0) { + goto clean; + } + continue; + } + + LOG_INFO("Matched system '%s'", token); + + break; + } + + if ((rv = get_token(fd, token, MAX_TOKEN_LEN)) < 0) { + goto clean; + } + + while (strcmp(token, ";") != 0) { + broken = 0; + for (bci = 0; info->broken_cores[bci] != '\0'; + bci += strlen(&info->broken_cores[bci]) + 1) { + + LOG_DEBUG("%s, %s", &info->broken_cores[bci], token); + if (strcmp(&info->broken_cores[bci], token) == 0) { + broken = 1; + LOG_DEBUG("Not using core %s because it is " + "marked broken for this game", + &info->broken_cores[bci]); + break; + } + } + + if (!broken) { + goto success; + } + + if ((rv = get_token(fd, token, MAX_TOKEN_LEN)) < 0) { + goto clean; + } + + } + rv = -EINVAL; + goto clean; + +success: + snprintf(core_path, max_len, "./cores/libretro-%s.so", token); + rv = 0; +clean: + close(fd); + return rv; +} + #ifndef RARCH_CONSOLE static int run_retroarch(const char *path, const struct RunInfo *info) { char core_path[PATH_MAX]; - sprintf(core_path, "./cores/libretro-%s.so", info->core); + int i; + int rv; const char *retro_argv[30] = { "retroarch", "-L", core_path }; int argi = 3; + + if ((rv = select_core(core_path, PATH_MAX, info)) < 0) { + LOG_WARN("Could not find suitable core"); + return rv; + } + + LOG_INFO("Using core at '%s'", core_path); if (info->multitap) { retro_argv[argi] = "-4"; argi++; @@ -284,14 +373,12 @@ static int run_retroarch(const char *path, const struct RunInfo *info) } if (info->dualanalog) { - retro_argv[argi] = "-A"; - argi++; - retro_argv[argi] = "1"; - argi++; - retro_argv[argi] = "-A"; - argi++; - retro_argv[argi] = "2"; - argi++; + for (i = 0; i < 8; i++) { + retro_argv[argi] = "-A"; + argi++; + retro_argv[argi] = "1"; + argi++; + } LOG_INFO("Game supports the dualshock controller"); } @@ -305,6 +392,7 @@ static int run_retroarch(const char *path, const struct RunInfo *info) int main(int argc, char *argv[]) { if (argc < 2) { + printf("usage: retrolaunch \n"); return -1; } @@ -321,11 +409,10 @@ int main(int argc, char *argv[]) LOG_INFO("Game is `%s`", game_name); if ((rv = get_run_info(&info, game_name)) < 0) { - LOG_WARN("Could not find sutable core: %s", strerror(-rv)); + LOG_WARN("Could not detect run info: %s", strerror(-rv)); return -1; } - LOG_DEBUG("Usinge libretro core '%s'", info.core); LOG_INFO("Launching '%s'", path); rv = run_retroarch(path, &info);