Full Code of Voljega/ExoDOSConverter for AI

master 4ed4af4aad11 cached
48 files
2.1 MB
557.7k tokens
214 symbols
1 requests
Download .txt
Showing preview only (2,230K chars total). Download the full file or copy to clipboard to get everything.
Repository: Voljega/ExoDOSConverter
Branch: master
Commit: 4ed4af4aad11
Files: 48
Total size: 2.1 MB

Directory structure:
gitextract_7h18_87y/

├── .gitignore
├── ExoDOSConverter.sh
├── MyeXoDOS.sel
├── MyeXoWin.sel
├── README.md
├── TDLindexer.py
├── appleiigsconverter.py
├── build.bat
├── build.txt
├── c64converter.py
├── changelog.txt
├── commandhandler.py
├── conf/
│   └── conf-exo.conf
├── conf.py
├── confconverter.py
├── data/
│   ├── C64Dreams.csv
│   ├── P2K.template.txt
│   ├── dosbox-0.74-default.conf
│   ├── eXoAppleIIGS.csv
│   ├── eXoDOSv6.csv
│   ├── eXoScummVM.csv
│   ├── eXoWin3xv2.csv
│   ├── fixGenres-C64Dreams.csv
│   ├── fixGenres-eXoDOSv6.csv
│   ├── fixGenres-eXoWin3xv2.csv
│   ├── keyb2Joypad.csv
│   ├── padto.keys
│   ├── padto.keys-nojoy
│   └── padtokeys/
│       └── WackyWhe-eXoDOSv6.keys
├── dosboxconfv6.py
├── exoDOSConverter.sh
├── exoconverter.py
├── exogui.py
├── gamegenerator.py
├── genre_mapping.py
├── gui/
│   └── gui-en-exo.csv
├── keyb2joypad.py
├── lists.py
├── logger.py
├── main.py
├── mapping.py
├── metadatahandler.py
├── mister.py
├── requirements.txt
├── scummvmconverter.py
├── test/
│   └── test_genres.py
├── util.py
└── wckToolTips.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
**/__pycache__
**/cache
**/distro
*.bak
ExoDOSConverter.iml
**/.idea
**/venv
name_mapping.txt
*.IDX
*.idx

ExoDOSConverter.exe
main.spec
**/build



================================================
FILE: ExoDOSConverter.sh
================================================
python3 main.py


================================================
FILE: MyeXoDOS.sel
================================================
Abuse (1995)
Alone in the Dark (1992)
Alone in the Dark 2 (1993)
Airball (1987)
Jack in the Dark (1993)
Aladino (1994)
Alcatraz (1992)
Alien Odyssey (1995)
Alien Rampage (1996)
Amo del Mundo, El (1990)
Amok (1996)
Nightmare on Elm Street, A (1989)
Ant Attack (1994)
Ant Attack PC (2000)
Anthill Volume 2 (1991)
Ant Man (1995)
Ar'Kritz the Intruder (1996)
Asterix - Caesar's Challenge (1995)
Bad Blood (1990)
Beetlejuice in - Skeletons in the Closet (1990)
Bert the Barbarian (2000)
Billy the Kid (1990)
Bioforge (1995)
Bio Menace (1993)
Biorobot's Base (1994)
Blackthorne (1994)
Bloodnet (1993)
Bodyworks Voyager - Mission in Anatomy (1994)
Brain Dead 13 (1995)
Bubble Dizzy (1993)
Calamari Cubes 2 (1998)
Calamari Cubes (1997)
Captain Bible in the Dome of Darkness (1994)
Catacomb II (1991)
Catacomb (1990)
Commander Blood (1994)
C-Dogs (2000)
Cefalus (1990)
Cell Block A (1999)
Chill Manor (1996)
City of Lost Children, The (1997)
Conan - The Cimmerian (1991)
Covert Action (1990)
Creature Shock (1994)
Crime Fighter (1993)
Crown (1991)
Cruel World (1993)
Crusader - No Regret (1996)
Crusader - No Remorse (1995)
Crystal Caves (1991)
Cyberbig (1989)
Cyberdogs (1994)
Cybergenic Ranger - Secret of the 7th Planet (1990)
Cyberia (1994)
Cyberia 2 - Resurrection (1995)
Cyberwar (1994)
Cyril Cyberpunk (1996)
Dangerous Dave in the Deserted Pirate's Hideout (1990)
Dangerous Dave in the Haunted Mansion (1991)
Dangerous Dave's Risky Rescue (1993)
Dave Goes Nutz (1993)
Day of the Viper (1989)
Deadline (1996)
Death by Dark Shadows (1994)
Demon Stalkers (1988)
Deus (1996)
Die Hard (1989)
Dimension Omega (1989)
Litil Divil (1993)
Dragon Lore - The Legend Begins (1994)
Dragon Lore II - The Heart of the Dragon Man (1996)
Drake Snake and the Secret Crypt (1994)
Drakkar (1989)
DREAMS to Reality (1997)
Duke Nukem - Episode 1 - Shrapnel City (1991)
Duke Nukem - Episode 2 - Mission - Moonbase (1991)
Duke Nukem - Episode 3 - Trapped in the Future (1991)
Duke Nukem II (1993)
Dune (1992)
Dylan Dog - Gli Uccisori (1992)
Ecstatica 2 (1996)
Ecstatica (1994)
Eden Blues (1987)
Ein Kmo Bamba (1996)
Electro Man (1992)
Enterprise (1989)
Entity (1994)
Eradicator (1996)
Escape from Monster-Castle (1993)
Fade to Black (1995)
Father World (1994)
Fengkuang Shuang Xiang Pao (1992)
Firewall - Man vs Machine (1996)
Flames of Freedom (1991)
Flynn Sprint (1996)
Fox Ranger 3 - Last Revelation (1997)
Framed (1995)
Frantis - Mission II (1993)
Galactic Empire (1990)
Galactix II - The Search for the Lost Orbs (1991)
Galleons (1993)
Gandalf (1997)
Gate of Destiny, The (1997)
Gateworld (1993)
Genocide 2 - Master of the Dark Communion (1995)
Ghostbusters II (1989)
Giddy 3 - The Retro Eggsperience (2000)
God of Thunder (1993)
Great Sage, The - Heaven's Equal (1995)
Hare Raising Havoc (1991)
Highlander - Last of the Macleods (1998)
Hong Gildong-jeon 2 (1995)
Inner Worlds (1996)
Insanity (1990)
In Search of Dr. Riptide (1994)
Isle of the Dead (1993)
Janosik (1994)
Jonny Quest - Curse of the Mayan Warriors (1993)
Karzel (1995)
Klass of '99 (1999)
Kristal, The (1989)
Espada Sagrada, La (1990)
Lars The Wanderer (1995)
Lawnmower Man, The (1993)
Little Big Adventure (1994)
Legend of the Silver Talisman (1996)
Legends (1996)
Loadstar - The Legend of Tully Bodine (1995)
Logan’s Fight (2001)
Lone Wolf - The Mirror of Death (1991)
Lost Dutchman Mine, The (1989)
Tres Mosqueteros, Los (1994)
Little Monk (1995)
Magic Carpet Plus (1995)
Magic Carpet 2 - The Netherworlds (1995)
Mayday Squad (1989)
Meridian Gravitas (1994)
Metal Mutant (1991)
Miami Vice (1989)
Mick (1994)
Midwinter (1990)
Mission (1987)
Monster Bash (1993)
Mister Gas (1989)
Mutant Earth (1997)
Mystic Towers (1994)
Napion 3D (1999)
NeoHunter (1996)
Night Shift (1990)
Night Trap (1994)
Nuclear Bowls (1990)
Onesimus - A Quest for Freedom (1992)
Paganitzu (1991)
Perfect Assassin (1997)
Perils of Treasure Mountain (2017)
Prince of Persia 2 - The Shadow and The Flame (1993)
Pirates! Gold (1993)
Prince of Evil (1993)
Queen - The Eye (1998)
Retro City Rampage - DX (2015)
Ripper (1996)
Robinson's Requiem (1994)
Robomaze III (1991)
RoboMaze II (1991)
Realms of the Haunting (1997)
Rusty (1993)
Saboteur 95 (1996)
S.C.Out (1992)
Scubaman's Quest (1994)
ScubaVenture The Search For Pirate's Treasure (1993)
Sea Legends (1996)
Stellar Explorer - The Drosi Encounter (1991)
Shadows of Cairn (1994)
ShadowCaster (1993)
Sign of the Sun (1997)
Silly Knight (2017)
Simpsons, The - Bart's House of Weirdness (1991)
Sinaria - Lost in Space (1994)
Skull (2000)
Skull Quest I - The Cyan Sarcophagus (1993)
Skull Quest II - The Vortex (1994)
Space Chase (1993)
Space Dude (1994)
Space Adventure (1988)
Marvel Comics Spider-Man - The Sinister Six (1996)
StarBlade (1990)
Star Bowls (1991)
StarFight III - Within the Darkness (1997)
StarFight IV - Legacy (1998)
StarFight V - Hell's Gate (1999)
Star Trek Deep Space 9 - Harbinger (1995)
Stroper (1988)
Super Fighter (1993)
Sword of Honour (1993)
Taking of Beverly Hills, The (1991)
TAO - Ren Jian Dao Zhi Shaonian Yan Chi Xia (1998)
Bugs Bunny Hare-Brained Adventure, The (1990)
Colony, The (1988)
Gold of the Aztecs, The (1990)
Punisher, The - Eternity Disk (1990)
Punisher, The (1990)
Time Commando (1996)
Time Gate - Knight's Chase (1995)
Time Runners (1994)
Titanic (1991)
Tomb Raider Gold (1998)
Top Hat Willy (2002)
Transball (2003)
Treasure Trap (1990)
Tush-Tush - HaGibor HaMistory (1997)
Twinsen's Odyssey (1997)
Town With No Name (1993)
Veil of Darkness (1993)
Viaje Al Centro De La Tierra (1989)
Vigilance on Talos V (1996)
Vinyl Goddess from Mars (1995)
Watman (2000)
Weird Dreams (1989)
Where Time Stood Still (1987)
X-Men (1989)
Zombieville (1997)
Zorro (1995)
11th Hour, The (1995)
120 Degrees Below Zero (2012)
221B Baker Street (1987)
3D Trek (1992)
3 Skulls of the Toltecs (1996)
7th Guest, The (1993)
Abadia del Crimen, La (1987)
Abadia del Crimen, La (2000)
Angel Devoid (1996)
Are You Afraid of the Dark - The Tale of Orpheo's Curse (1994)
Alien Incident (1996)
Aliens - A Comic Book Adventure (1995)
Alien Virus (1995)
Atlantis - The Lost Tales (1997)
Al Pond 1 - Al Lives Forever (2002)
Al Pond 2 - Island Quest (2007)
Al Pond on Holiday (2003)
Amazon - Guardians of Eden (1992)
Amazon Trail (1993)
Laura Bow 2 - The Dagger of Amon Ra (1992)
Angst - A Game of Urban Survival! (1992)
Animal (1997)
Armaeth - The Lost Kingdom (1993)
Asylum (1985)
Asylum (1991)
Lord Avalot (1994)
Azrael's Tear (1996)
Bargon Attack (1992)
Batman Returns (1993)
Beneath a Steel Sky (1994)
Berlin 1948 (1989)
Beverly Hillbillies, The (1993)
Blue Force (1993)
Big Red Adventure (1995)
Bill and Ted's Excellent Adventure (1990)
Blackstar - Agent of Justice (1995)
Blue Ice (1995)
Black Sect (1993)
Circle of Blood (1996)
Bureau 13 (1995)
Orion Burger (1996)
Callahan's Crosstime Saloon (1997)
Castle of Dr. Brain (1991)
Cavern of the Evil Wizard (2020)
Chewy - ESC from F5 (1997)
Circuit's Edge (1990)
MTV's Club Dead (1994)
Case of the Cautious Condor, The (1992)
Corruption (1988)
Cosmic Spacehead (1993)
Chronicles of the Sword (1996)
Countdown (1990)
Crack of Doom, The (1989)
Chronomaster (1995)
Dame Was Loaded, The (1996)
Dark Half, The (1992)
Dark Seed (1992)
Daughter of Serpents (1992)
Down in the Dumps (1996)
In the Dead of Night (1995)
Death Gate (1994)
Escape from Delirium (1996)
Demoniak (1990)
Detritus - The Daemon's Quest (1996)
Dig, The (1995)
Dinotopia (1995)
Discoveries of the Deep (1993)
Questmaster I - The Prism of Heheutotol (1989)
Day of the Tentacle (1993)
Adventures of Down Under Dan, The (1995)
Dragon History (1995)
Drascula - The Vampire Strikes Back (1996)
Dream Prisoner (1995)
Dreamweb CD (1994)
Dragonsphere (1994)
Discworld (1995)
Discworld 2 - Missing Presumed (1996)
Dylan Dog - Through the Looking Glass (1992)
Earthrise (1990)
Curse of Enchantia (1992)
Eric the Unready (1993)
Escape (1994)
Eternam (1992)
Evidence - The Last Report (1996)
Fable (1996)
Farm Nightmare, The (2007)
Fascination (1991)
An American Tail - Fievel Goes West (1993)
Fish (1988)
Flash Traffic - City of Angels (1994)
Fool's Errand, The (1987)
Flight of the Amazon Queen (1995)
Freddy Pharkas Frontier Pharmacist (1993)
Free DC (1991)
Full Throttle (1995)
Future Wars (1989)
Galleons of Glory (1990)
Gateway (1992)
Gateway 2 - Homeworld (1993)
Gene Machine, The (1996)
Gabriel Knight 1 - Sins of the Fathers (1993)
Gabriel Knight 2 - The Beast Within (1995)
Gnome Ranger (1987)
Gnome Ranger II - Ingrid's Back (1988)
Gobliiins 1 (1991)
Gobliins 2 (1992)
Goblins 3 (1993)
Golden Immortal (1991)
Gold Rush! (1988)
Grailquest (1989)
Guild of Theives (1987)
Hariboy's Quest (1996)
Harvester (1996)
Haunted Casino (1997)
Heavens Dawn (1995)
Hell - A Cyberpunk Thriller (1994)
Hibernated 1 - This Place Is Death (2018)
Heart of China (1991)
Homey D Clown (1993)
Hook (1992)
Hound of Shadow, The (1989)
Hugo 2 - Whodunit (1991)
Hugo 3 (1995)
Hugo's House of Horrors (1990)
Hurlements (1988)
Island of Dr. Brain (1992)
Igor - Objective Uikokahonia (1994)
I Have No Mouth and I Must Scream (1995)
Imperium Romanum (1996)
Inca (1992)
Inca II - Nations of Immortality (1993)
Inner Demons (1996)
Indiana Jones and the Fate of Atlantis (1992)
Indiana Jones and The Last Crusade (1989)
I Spy (2001)
I Spy II (2001)
Inherit the Earth - Quest for the Orb (1994)
Innocent Until Caught (1993)
Innocent Until Caught 2 - Presumed Guilty (1995)
James Clavell's Shogun (1988)
Jinxter (1988)
Jack Orlando (1997)
Jack the Ripper (1995)
Kingdom II - Shadoan (1996)
BAT 2 - The Koshan Conspiracy CD (1992)
KGB (1992)
KGB Conspiracy (1992)
Kingdom I - The Far Reaches (1995)
Kingdom O'Magic (1996)
Under a Killing Moon (1994)
King's Quest I - Quest for the Crown (1987)
King's Quest I - Quest for the Crown (2001)
King's Quest I - Quest for the Crown VGA (1990)
King's Quest II - Romancing the Throne (1987)
King's Quest II - Romancing the Stones (2002)
King's Quest III - To Heir is Human (1986)
King's Quest IV - The Perils of Rosella (1988)
King's Quest V - Absence Makes the Heart Go Yonder (1990)
King's Quest VI - Heir Today Gone Tomorrow (1992)
King's Quest VII - The Princeless Bride (1994)
Betrayal at Krondor (1993)
Kronolog - The Nazi Paradox (1993)
Legend of Kyrandia Book 1 (1992)
Legend of Kyrandia Book 2 - The Hand of Fate (1993)
Legend of Kyrandia Book 3 - Malcolm's Revenge (1994)
Labyrinth of Time (1993)
LA Crackdown (1988)
L.A. Law - The Computer Game (1992)
Last Half of Darkness (1989)
Last Half of Darkness II (1992)
Last Half of Darkness III (1993)
Laura Bow 1 - The Colonel's Bequest (1989)
Last Express, The (1997)
Lighthouse - The Dark Being (1996)
Les Manley in - Search for the King (1990)
Les Manley in - Lost in LA (1991)
Legend of Djel (1987)
Lords of Doom (1990)
Lone Eagle - Colombian Encounter (1994)
Conquests of the Longbow - The Legend of Robin Hood (1991)
Loom (1990)
Lost Eden (1995)
Lost in Time (1993)
Leisure Suit Larry 1 - Land of the Lounge Lizards (1987)
Leisure Suit Larry 1 - Land of the Lounge Lizards VGA (1991)
Leisure Suit Larry 2 - Goes looking for Love in Several Wrong Places (1988)
Leisure Suit Larry 3 - Passionate Patti in Pursuit of the Pulsating Pectorals (1989)
Leisure Suit Larry 5 - Passionate Patti Does a Little Undercover Work (1991)
Leisure Suit Larry 6 - Shape Up or Slip Out (1993)
Leisure Suit Larry 7 - Love for Sail (1996)
Magnetic Scrolls Collection, The (1991)
Manhole, The (1988)
Manhole, The - New and Enhanced (1992)
Maniac Mansion Enhanced (1988)
Martian Memorandum (1991)
Mission Critical (1995)
Mel Odius goes Six String Searchin' (1992)
Secret of Monkey Island, The (1990)
Monkey Island 2 - LeChuck's Revenge (1991)
Mission Impossible (1991)
Maupiti Island (1990)
Maniac Mansion (1987)
Monsoon (2005)
Monty on the Norm (2001)
Affaire Morlov, L' (1995)
Mean Streets (1989)
Murder Club (1991)
Murder! (1991)
Murder Makes Strange Deadfellows (1991)
MythMaster - A Vagabond's Adventure (1991)
Napalm Quest (1998)
NET Zone (1996)
Neuromancer (1988)
New Year's Mystery (2007)
Nippon Safes Inc (1992)
Night of the Hermit (2001)
Noctropolis (1994)
Normality (1996)
Trials of Odysseus Kent, The (2002)
Omnicron Conspiracy (1989)
Orion Conspiracy, The (1995)
Pandora Directive, The (1996)
Paranormal Investigation (2001)
Pepper's Adventures in Time (1993)
Permanent Daylight (2001)
Pirate Fry and Volcano Island (2001)
Phantasmagoria (1995)
Phantasmagoria 2 - A Puzzle of the Flesh (1996)
Prisoner of Ice (1995)
Plague of the Moon (1994)
Plague - Maze of the Mind (1996)
Plan 9 From Outer Space (1992)
Personal Nightmare (1989)
Portal (1986)
Postman Only Dies Once, The (2001)
Police Quest 1 - In Pursuit of the Death Angel (1987)
Police Quest 1 - In Pursuit of the Death Angel VGA (1990)
Police Quest 2 - The Vengeance (1988)
Police Quest 3 - The Kindred (1991)
Police Quest 4 - Open Season (1993)
Protostar - War on the Frontier (1993)
Psycho (1988)
Psycho Killer (1993)
Quest for Glory 412 - So You Thought You Were A Hero (2001)
Quest for Glory I - So You Want to be a Hero VGA (1992)
Quest for Glory II - Trial by Fire (1990)
Quest for Glory III - Wages of War (1992)
Quest for Glory IV - Shadows of Darkness (1993)
Queen's Footsteps, The (2020)
Quivering, The (1998)
Curse of Rabenstein, The (2020)
Rama (1996)
Rob Blanc I - Better Days of a Defender of the Universe (2000)
Rob Blanc II - Planet of the Pasteurised Pestilence (2000)
Rob Blanc III - The Temporal Terrorists (2000)
Rise of the Dragon (1990)
Dive - The Conquest Of Silver Eye (1996)
Repossessor, The (2001)
Rex Nebular and the Cosmic Gender Bender (1992)
Riddle of Master Lu, The (1995)
Rudyard Kipling's The Jungle Book (1995)
Romantic Blue (1994)
Blast off (2001)
Rooms of the Abyss (1992)
Return of the Phantom (1993)
Runaway (1994)
Ringworld - Revenge of the Patriarch (1992)
Return to Ringworld (1994)
Return to Zork (1993)
Sam and Max Hit the Road (1993)
Santa Fe Mysteries - The Elk Moon Murder (1996)
Santa Fe Mysteries - Sacred Ground (1997)
Savage Future (1999)
Spellcasting 101 - Sorcerers Get All the Girls (1990)
Spellcasting 201 - The Sorcerers Appliance (1991)
Spellcasting 301 - Spring Break (1992)
Scapeghost (1989)
Call of Cthulu - Shadow of the Comet (1993)
Scoop, The (1989)
Secret Mission (1996)
Sentient (1997)
Serguei's Destiny (2001)
Sherlock Holmes - Another Bow (1985)
Shadowforce (1994)
Shannara (1995)
Shard of Inovar (1987)
Sherlock Holmes - Consulting Detective Volume I (1991)
Sherlock Holmes - Consulting Detective Volume II (1992)
Sherlock Holmes - Consulting Detective Volume III (1993)
Sherlock Holmes - The Case of the Rose Tattoo (1996)
Sherlock Holmes - The Case of the Serrated Scalpel (1992)
Silverload (1995)
Simon the Sorcerer (1993)
Simon the Sorcerer II - The Lion, the Wizard and the Wardrobe (1995)
Snoopy (1990)
Sorcerer of Claymorgue Castle (1984)
Soltys (1995)
Sorceror's Appraisal, The (2002)
Soul Crystal (1992)
Soviet Union Strikes Again, The (2001)
SpaceKids (1996)
Spirit of Excalibur (1990)
Spud (1996)
Spycraft (1996)
Space Quest I - The Sarien Encounter (1986)
Space Quest I - The Sarien Encounter VGA (1991)
Space Quest II - Vohauls Revenge (1987)
Space Quest III - The Pirates of Pestulon (1989)
Space Quest IV - Roger Wilco and the Time Rippers (1991)
Space Quest V - The Next Mutation (1993)
Space Quest VI - Roger Wilco in the Spinal Frontier (1995)
Space Quest - The Lost Chapter (2001)
Sam Spade (1985)
Star Trek - 25th Anniversary (1992)
StarFight (1996)
Star Trek Borg (1996)
Star Trek - Judgement Rites CD (1993)
Star Trek The Next Generation - A Final Unity (1995)
Star Wars - Making Magic (1996)
Synnergist (1996)
Trust and Betrayal - The Legacy of Siboot (1987)
Abbey, The (1993)
TeenAgent (1995)
Tanis (2008)
Tequila and Boom Boom (1995)
Terran Envoy (1990)
Clue, The (1994)
Theme Park Mystery (1990)
Scroll, The (1995)
Time Paradox (1996)
Toonstruck (1995)
Torin's Passage (1995)
Trick or Treat (1994)
Touche - The Adventures of the Fifth Musketeer (1995)
Timequest (1991)
Transylvania (1986)
Transylvania 2 - The Crimson Crown (1986)
Transylvania 3 - Vanquish the Night (1990)
Treasure Hunter (1997)
Tonight The Shrieking Corpses Bleed (2004)
Bud Tucker in Double Trouble (1996)
Twins (1995)
Twins in Trouble (1994)
Udoiana Raunes (2000)
Udoiana Raunes 3 - In Search for Indiana Jones 4 (2003)
Universe (1994)
Once Upon a Forest (1995)
Versailles 1685 (1997)
Voodoo Girl - Queen of the Darned (2003)
Voyeur (1994)
Voyeur 2 (1996)
Where in America's Past is Carmen Sandiego (1991)
Waynes World (1993)
Where in Europe is Carmen Sandiego (1988)
Weird Island (1992)
Wonderland (1990)
Wolfsbane (1995)
Where in Space is Carmen Sandiego (1993)
Where in Time is Carmen Sandiego (1989)
Where in the USA is Carmen Sandiego Deluxe (1994)
Where in the World is Carmen Sandiego CD (1995)
Companions of Xanth (1993)
Xenomorph (1990)
Zak McKracken and the Alien Mindbenders Enhanced (1988)
Zork Nemesis (1996)
Zombi (1990)
Action Fighter (1994)
Bad Street Brawler (1987)
B-Clopd (2002)
Beats of Rage (2003)
Budo - The Art of Ninja Combat! (1993)
Case 316 (2000)
Cheon'gong Cheon'gi (1995)
Cyber Police (1996)
Darkside Story (1995)
Electronic Popple (1997)
Executioners (1992)
Federation Online (2001)
Fistfight (1995)
Franko - The Crazy Revenge (1996)
Blood Boiled High School (1998)
Rage of Tiger 2 - Blood, Money, and Tears (1994)
Interrupt (1995)
Jisaeneun Dal (1996)
Karate King (1991)
Kick Boxing Street (1992)
Last Hero in China (1995)
Last Man Alive, The (1997)
Little Fighter (1995)
Mechanic War (1995)
Mie (1989)
My Love (1996)
Night (1998)
Pee and Gity (1994)
Pee and Gity Special (1994)
Prawo krwi (1996)
Py and Gity 2 - The Industrial Age (1996)
Realms of Chaos (1995)
Rescate En El Golfo (1990)
Shadow Knights (1990)
Shakii the Wolf (1995)
Shuihuzhuan - Liangshan Yingxiong (1997)
Soul, The (1998)
Street Fighting Man (1989)
Sword Fight II (1994)
Terminator 2 - Judgment Day (1991)
Trooper, The (1996)
Trash It (1997)
Xi You Ji (1994)
Zyclunt (1995)
Abyss of Pandemonium (1998)
A.D Cop (1997)
Aftershock for Quake (1996)
Alien Cabal (1997)
Alien Trilogy (1996)
Angst - Rahz's Revenge (1996)
Backlash - A Turret Gunner Simulation (1995)
Blood Bath at Red Falls (1997)
Beyond Castle Wolfenstein (1985)
Beyond Wolfenstein 2 - Special Edition v3.0 (2001)
Biobombers (1994)
Blake Stone - Aliens of Gold (1993)
Blake Stone - Planet Strike (1994)
Blood (1997)
Bloodwings - Pumpkinhead's Revenge (1995)
Bon Bon Paradise (1997)
Bram Stoker's Dracula (1993)
Castle Wolfenstein (1984)
Catacomb 3-D (1992)
Chaos Control (1995)
Chasm - The Rift (1997)
Chemical Warfare (1997)
Chex Quest (1996)
Chex Quest 2 (1996)
Chex Quest 3 (1996)
Chub Gam 3D - Director's Cut (1998)
Colosso Secret (1997)
Corridor 8 - Galactic Wars (2005)
Corridor 7 - Alien Invasion (1994)
Crime Patrol (1994)
Cryptic Passage for Blood (1997)
Curse of the Catacombs (1993)
CyberMage - Darklight Awakening (1995)
CyClones (1994)
D!Zone 150 (1995)
D!Zone (1995)
D!Zone 2 (1995)
D!Zone 3 (1995)
Dark Hour (1996)
Defcon 5 (1995)
Demon Gate - 666 New Levels for Doom and Doom II (1995)
Depth Dwellers (1994)
Despair! (1995)
Despair 2 (1995)
Despair 3 (1995)
Desperabis (2000)
Descent - Levels of the World (1995)
DOOM (1993)
DOOM II (1994)
Dugsy (1992)
Duke!ZONE II (1997)
Duke Nukem 3D (1996)
Duke Nukem 3D - Atomic Edition (1996)
Duke 3D Mania (1997)
Duke Assault (1997)
Duke Caribbean - Life's A Beach (1997)
Duke it out in D.C. (1997)
Duke - Nuclear Winter (1997)
Duke Nukem's Penthouse Paradise (1997)
Duke It's Zero Hour (1997)
Drug Wars (1994)
Rock 'n Shaolin - Legend of the Seven Paladins 3D (1994)
Extreme Rise of the Triad (1995)
Far West (1991)
Final DOOM (1996)
Freaks (1993)
Ghost (1990)
Gunmetal (1998)
Guts 'n' Garters in DNA Danger (1997)
H!Zone (1996)
HacX (1997)
Hades (1996)
Hardline (1997)
Hell to Pay (1996)
Heretic (1994)
Heretic - Shadow of the Serpent Riders (1996)
Hexen - Beyond Heretic (1995)
Hexen - Deathkings of the Dark Citadel (1996)
Hexen II - Hammer of Thyrion (2013)
Hovertank (1991)
H.U.R.L. (1995)
In Extremis (1993)
In Pursuit of Greed (1995)
Island Peril (1995)
Isle of the Dead (1993)
Kaos (1998)
Ken's Labyrinth (1993)
Korean Dungeon Boy (1991)
Cosa Nostra, La (1994)
Lamers (1992)
Last Rites (1997)
Lethal Tender (1993)
Liquidator (1998)
Justicieros, Los (1996)
MadSpace (1997)
Malice for Quake (1997)
Mars 3D (1997)
Master Levels for DOOM II (1995)
Master Won Liu 3D (1996)
Megatron VGA (1993)
Meltdown (1995)
Microcosm (1994)
Montezuma's Return (1997)
NAM (1998)
Nerves of Steel (1995)
NetWars (1993)
Nihilist (1996)
Nitemare-3D (1994)
Operation Body Count (1994)
Outer Ridge (1995)
Perdition's Gate (1996)
Plunder and Pillage (2001)
Powerslave (1996)
Predator 2 (1990)
Prison Amok (1997)
Project - Weltuntergang (2002)
Pyrotechnica (1995)
Q!Zone (1996)
Quake (1996)
Quake - Episode 5 - Dimensions of the Past (2016)
Quake Level Master V (1997)
Quake Mission Pack No 1 Scourge of Armagon (1997)
Quake Mission Pack No 2 Dissolution of Eternity (1997)
Quiver (1997)
Radix - Beyond the Void (1995)
Rapid Assault (1995)
Rebel Moon (1995)
Redneck Deer Huntin' (1997)
Redneck Rampage (1997)
Redneck Rampage - Suckin' Grits on Route 66 (1998)
Redneck Rampage Rides Again (1998)
Rex Blade - The Apocalypse (1996)
Roller Coaster Rumbler (1990)
Rise of the Triad - The Hunt Begins (Deluxe Edition) (1995)
Rise of the Triad - Dark War (1994)
Secret Agent - The Escape (1996)
Shadow Warrior (1997)
Shaw's Nightmare (2013)
Shaw's Nightmare II (2016)
Shooting Gallery (1990)
Shrak for Quake (1997)
Sigil (2019)
Skaphander - Der Auftrag (1995)
SkyNET (1996)
Spear of Destiny (1992)
Soldier Boyz (1997)
Space Station Escape (1995)
Space Pirates (1994)
Spear End of Destiny (2004)
Spear Resurrection (2001)
Strife (1996)
Super Noah's Ark 3-D (1995)
Supreme Warrior (1996)
Star Wars - Dark Forces (1995)
System Shock (1994)
So You Wanna Be A Redneck (1998)
Time Circle (1995)
Terminator 2029, The - Deluxe CD Edition (1994)
Terminator, The - Future Shock (1995)
Terminator, The - Rampage (1993)
Terminal Terror (1994)
Terror of the Catacombs (1993)
Catacomb Abyss, The (1992)
Fortress of Dr. Radiaki, The (1994)
Hidden Below, The (1994)
Last Bounty Hunter, The (1994)
Lost Episodes of Doom, The (1995)
Suit, The (1996)
Terminator, The (1991)
Varginha Incident, The (1998)
Thor's Hammer (1995)
ThunderGun - The Cybwar Mission (1997)
Time Hunters (1995)
Total Meltdown (1996)
Transland (1996)
Tremor for Quake (1997)
Trench Warfare (2005)
Trigger (1989)
Troubled Tower (1994)
Twin Dragon (1998)
Ultimate DOOM, The (1995)
Veteran (1988)
Virtuoso (1994)
Wanton Destruction (2005)
Wetlands (1995)
Wild Life (1990)
Wing Nuts - Battle in the Sky (1997)
Witchaven II - Blood Vengeance (1996)
Witchaven (1995)
Wolfenstein 3D (1992)
Wolfendoom (2000)
World War II GI (1999)
Wrath of Earth (1995)
William Shatner's TekWar (1995)
Xmas Carnage (1994)
X-Men - The Ravages of Apocalypse (1997)
XS (1996)
Zone of Artificial Resources (1997)
Zephyr (1994)
Zone Raiders (1995)
3D Bomber (1998)
Archeodroid (1985)
Autocrash (1991)
Bank Buster (1990)
Biprolex + (1997)
Bird Brain (1984)
Blind People Simulator (1996)
Bolo (1995)
Bombs and Bugs (1998)
Breakline (1994)
Brix II (1988)
Brocha Gorda (1992)
BuBu (1995)
Bumping Warrior (1994)
Cannonade (1993)
SCI Capture the Flag (2007)
Claas - Der Erntespezialist (1996)
Cocinero (1990)
Continuum (1990)
Crow (1992)
Crash Barrier (1999)
Cybersphere Plus (1997)
Cylindrix (1996)
Double Agent (1998)
Dia Bolo (1997)
Pirate Island, The (1998)
Dodgem (1991)
Dropper (1991)
Electranoid (1995)
Fire Fighter (1995)
Future Classics (1990)
Gargoyle Medieval Pack (1995)
Genocide (1996)
God Jul! (1994)
Heroes (1998)
Hover (1988)
Hypercycles (1995)
Ice Man (1996)
Isometric Bomber (1999)
Jump 'n Bump (1998)
Katapult (1996)
Krypton Egg (1994)
Liero (1999)
L-MAN (1996)
Locman I (1991)
Lode Runner - The Legend Returns (1994)
Marble Cooking (1994)
Marshmallow Duel (1997)
Mega Blast (1995)
Meteor Mission (1995)
Mine Bombers (1996)
MoleZ (1997)
Moraff's Super Entrap (1992)
Mr. Boom (1999)
Nicolausi (1995)
Nitro! (1997)
Noctis (2001)
Nogginknockers (1993)
Nogginknockers 2 (1996)
Oil's Well (1990)
Operation - Airlift (1988)
Packamaze (1995)
Penguin Tower (1997)
Plasma Spheres II (1998)
Popcorn (1988)
Powball (1997)
Pump Fighters (1998)
Pune (1995)
Parawormer II (1998)
Pyromania (1997)
Ratillery (2016)
Rocket Chase (1997)
Rollin (1995)
Scorched Earth (1991)
SpaceKids (1996)
Spit Wad Willy (1993)
Splat! (1999)
StoneBreaker (1996)
System4 Mister Tengus Adventure (1991)
Chase on Tom Sawyer's Island, The (1988)
Geekwad, The - Games of the Galaxy (1993)
Thomas the Tank Engine and Friends - The Collection (1994)
Tank Wars (1990)
TopChallenge (1994)
Triplane Turmoil (1996)
Troika (1991)
Tronic (1996)
TwinBlok (1996)
Velcro Mind (1995)
V-Wing (1997)
Wacky Funsters! The Geekwad's Guide to Gaming (1992)
Window Wizard (1991)
Worms - Reinforcements (1995)
Xplosive (1995)
1st Person Pinball (1989)
Absolute Pinball (1996)
Cyberball (1998)
Eight Ball Deluxe (1993)
Epic Pinball - The Complete Collection (1995)
Extreme Pinball (1995)
Hyper 3-D Pinball (1995)
Judge Dredd Pinball (1998)
Living Ball (1995)
Night Mission Pinball (v3.0) (1988)
Pinball Arcade (1994)
Pinball Wizard 2000 (1995)
Pinball 4000 (1996)
Pinball 2000 (1995)
Pinball Prelude (1996)
Pinball World (1995)
Pinball Dreams (1992)
Pinball Dreams II (1994)
Pinball Fantasies (1992)
Pinball Illusions (1995)
Pinball Mania (1995)
Pinball Warriors (1997)
Pro Pinball - Big Race USA (1998)
Pro Pinball - Timeshock! (1997)
Pro Pinball - The Web (1995)
Psycho Pinball (1995)
Royal Flush (1994)
Silverball (1993)
Silverball 2 Plus (1994)
Solid State Pinball - Tristan (1991)
Starball (1995)
Star Trek Pinball (1998)
Time Hunters Pinball (1995)
Total Pinball 3D (1996)
Tsumera (1996)
Ultimate Pinball (1996)
+K (1996)
25 (1999)
Adventure of Tipi, The (1997)
Alien Carnage (1993)
Alley Cat (1984)
Apachacha (1993)
Armorik the Viking - The Eight Conquests (1988)
Astrocounter of Crescents (1996)
Avoid the Noid (1989)
Barbarian (1996)
Beez (2000)
Bible Adventures (1994)
Black Zone (1995)
Blinky 3 (1995)
Brave Bubble Dragon (1997)
Balduin - Run for Fun (1994)
Charlie Chaplin (1988)
Charlie II (2001)
Charlie the Duck (1996)
Charly the Clown (1996)
Commander Keen 1 - Marooned on Mars (1990)
Commander Keen 2 - The Earth Explodes (1990)
Commander Keen 3 - Keen Must Die! (1990)
Commander Keen 4 - Secret of the Oracle (1991)
Commander Keen 5 - The Armageddon Machine (1991)
Commander Keen 6 - Aliens Ate My Baby Sitter! (1991)
Commander Keen 7 - The Keys of Krodacia (2006)
Commander Keen 8 - Dead in the Desert (2009)
Commander Keen 9 - Battle of the Brains (2011)
Commander Keen - Keen Dreams (1993)
Clyde's Adventure (1992)
Clyde's Revenge (1995)
Cold Dreams (1995)
Cosmo's Cosmic Adventure - Forbidden Planet (1992)
Crazy Drake (1996)
Crazy Sue (1990)
Dan Burry (1995)
Dark Ages (1991)
Dinosaur Detective Agency (1994)
Death Tower (1993)
Devil Land (1994)
Dracula's Shadow (2002)
Dreamworld Adventure (1995)
Drilling Billy (1997)
Duchi and Bbukku (1997)
Eco-Kid - Amazonia Conection (1997)
Eco-Kid - Rescate en el Artico (1997)
Eco-Kid - La Senda de los Elefantes (1997)
Eddy's Adventure (1996)
Eddy and Co (1995)
Edna (1997)
ElfLand (1992)
Eol-ui Moheom (1995)
Eracha (1996)
Fray Luis (1998)
Frankenstein (1994)
HappyLand Adventures (2000)
Heroes .25 - The Tantalizing Trio (1994)
Heroes - The Sanguine Seven (1993)
Hunchback 96 (1997)
Hopang Man (1993)
Hopy-ONE (1996)
Impact (1996)
Jack Flash (1994)
Jazz Jackrabbit CD-ROM (1994)
Jazz Jackrabbit - Holiday Hare 1994 (1994)
Jazz Jackrabbit - Holiday Hare 1995 (1995)
Jazz Jackrabbit (1994)
Jetpack (1993)
Jill of the Jungle - Jill Goes Underground (1992)
Jill of the Jungle (1992)
Jill of the Jungle - Jill Saves the Prince (1992)
Joe Snow (1993)
Joe Snow 2 (1993)
Joe Snow III - Captured By Aliens (1993)
Joe Snow 4 (1993)
Jungle Jack (1995)
Kid (1996)
King's Valley 2 (1980)
King's Valley (1995)
King Kong 10 (1996)
Komebumb (1996)
Kong's Revenge (1991)
Labrynth of Zeux (1996)
Lala Prologue (2012)
Larax and Zaco (1996)
Last Knight in Camelot (1996)
Lost City of Atlantis, The (1995)
Leo the Lion (1997)
Little Willy (1994)
Lollypop (1994)
Luigi en Circusland (1994)
Luigi and Spaghetti (1992)
Lychnis (1994)
Incredible Adventure of Mad Mac, The (1994)
Mad Mac II (1995)
MagiDuck (2018)
Mario and Luigi (2001)
Marioup (1999)
Matterhorn Screamer! (1988)
Milo the Fuel Run (1997)
Milva (1993)
Mimi and The Mites (1995)
Mino's Adventure (1997)
Monmallineun Tarokbeom (1996)
Mr. Tomato (1997)
My Friend Koo (1995)
Mysterious Worlds (1992)
Necromantic (1996)
Oscar (1994)
Panic! (2002)
Peach's Dream (1999)
Peach the Lobster (1994)
Perfect Worlds (1995)
Pickle Wars (1994)
Pulsar Flux (2001)
Pocahontas (1995)
Popeye 2 (1992)
Prehistorik 2 (1993)
Prehistorik (1991)
Przygody Krzysia (1999)
Rallo Gump (1994)
Rayman Forever (1998)
RedCat 2 - De Ontvoering van Prinses Dana (1995)
RedCat (1994)
Reon's Adventure (1994)
Rolling Ronny (1991)
Saban's Iznogoud (1997)
Super Dog Story (1997)
Secret Agent (1992)
Sila's Quest (1997)
Sint Nicolaas (1998)
Skate Dragon (1990)
Skunny - Back to the Forest (1993)
Skunny - In The Wild West (1993)
Skunny - Save Our Pizzas! (1993)
Skunny - Special Edition (1995)
Smus (1993)
Sonic the Hedgehog (1999)
StixWorld (1998)
Super Angelo (2001)
Super Panic Monsters (1995)
Super Silverbrothers (1991)
Super Trio (1995)
Adventures Of Dianalee, The - In The Lost temple Of The Aztecs (1994)
Castle of Dr. Malvado, The (2001)
Last Knight, The (1997)
Pack Rat, The (1992)
Toffifee - Fantasy Forest (1996)
Tonko (1994)
Totsugeki! Mix (1994)
Toxic Bunny (1996)
Tiny Toon Adventures - The Great Beanstalk (1996)
Ugh! (1992)
Ulises (1989)
Vigilance on Talos V (1996)
We're Back! - A Dinosaur's Story (1993)
Wissoll Circus Trophy (1997)
Wrecked - A Psychedelic Adventure (1993)
Xargon (1993)
Yogho! Yogho! (1996)
1995Card+ (1994)
7 Colors (1991)
Acid Tetris (1998)
Aktie-bal (1994)
Alchemyst (1992)
Amado (1989)
Amoba (2011)
Apocalypse Abyss (1994)
Archon Ultra (1994)
Astatin (1992)
Authentic Taiwan Sixteen Mahjong (1994)
Averno (1989)
Baldies (1996)
Ball Game, The (1991)
Baroll (2001)
Battle Charge (1993)
Battle Chess 2 - Chinese Chess (1990)
Battle Chess 4000 (1992)
Battle Chess Enhanced (1992)
Beaubourg (1993)
Beetris (1989)
Berlin Wall (1993)
Best of ZZT (1992)
Bez Pegs (1994)
Black Hole (1993)
Bloxinies (2013)
Bloxinies II (2016)
Blue Balls (1991)
Bolix (1993)
Booly (1991)
Boovie (1998)
BrainStorm Pro (1994)
Brix 2 Deluxe (1992)
Bridge Champion with Omar Sharif (1993)
Bricks Deluxe Edition (1997)
Bricks Gold (1997)
British Square (1990)
Brix 2 Deluxe (1992)
Brix 3 - Superlogic (1994)
Brix 4 - Genius (1994)
Bump and Bomp (1996)
Captured by Pirates! (1992)
Catcher (1994)
Cavalcade O' Card Games (1993)
CGA Cave (2014)
Chain Reaction (1996)
Chess Housers (1990)
Chess Housers (1993)
Chess Wars - A Medieval Fantasy (1996)
Chain Reaction (1990)
Choo Choo Minder (1993)
Chess Simulator (1990)
Circlink (1989)
Clockwiser - Time is Running Out (1994)
Clone (1997)
Contraption Zack (1992)
Card Player's Paradise (1995)
Creative Contraptions (1985)
Creepers (1992)
Creepers Christmas (1992)
Crystal Maze, The (1994)
Cuber (1990)
Cubits (1988)
Cubulus (1991)
Curse of Ra (1990)
Cyberchess (1992)
Dames Simulator (1990)
Deathball Incarnate (1996)
Destetroyer (1991)
Deflector (1996)
Diggers (1994)
Diggers 2 - Extractors (1995)
Deluxe Chinese Checkers (1996)
Drak (1995)
Drop of Light (2002)
Ducks (1998)
Egyptian Solitaire (1994)
Exploding Atoms (1992)
Expo (1990)
Fence (1992)
FlipOut! (1997)
FlixMix (1993)
Game of Life, The (1992)
Gavrila (1995)
Get 5 (1998)
Get Lost! (1996)
Gravtris (1992)
Guardians (1991)
H2O (1996)
Hamsters (1994)
Hextris (1991)
Hexxagon 2 (1993)
Hieroglyph (1992)
Hong Kong Mahjong Pro (1992)
Humans 1 and 2 (1993)
Humans 3 - Evolution - Lost in Time (1995)
IceBox (1993)
Ice Kiss (1997)
Iko San (1997)
Kalah (1993)
KaleidoKubes (1989)
Kengi (1991)
Kubix (1995)
Labyrinth of Light (1994)
Laser Chess (1994)
Lava Cap (1992)
Lemmings 3D (1995)
3D Lemmings Winterland (1995)
Lettrix (1990)
Lexi-Cross (1991)
Lexter (1993)
Locomotion (1992)
Logical (1991)
Labyrinth of Light (1994)
Loopy (1994)
Lynq (1996)
Mirror Magic II (2001)
Manhole (1992)
Marble Master (1997)
Masque Solitaire Antics (1995)
Medieval Chess (1996)
Mega Maze (1994)
MegaMorph (1997)
Mental Blocks (1989)
Many Faces of Go, The (1991)
Mind-Roll (1988)
Mojing Da Maoxian (1995)
Move It II (1993)
National Lampoon's Chess Maniac 5 Billion and 1 (1993)
Nine (1994)
Notyet (1996)
Oilmania (1990)
One Step Beyond (1993)
Origamo (1994)
Osiris (1993)
Oxyd 2 (1995)
Oxyd magnum! Gold (1998)
Papu's Odyssey (1993)
Pirada I - The Fearless (1992)
Poker Relay (1990)
Princess Bubble (1998)
Pulse (1996)
Pushover (1992)
Puzz and Brain (1994)
Pyro II (1990)
Quadrax (1996)
Quatris II+ (1993)
Rasterscan (1988)
Redhook's Revenge (1993)
Reflector Chess (1997)
Rescue Rover (1991)
Rescue Rover 2 (1991)
Revelation (1992)
Rings of the Magi - Grand Master Edition (1995)
Robbo (1994)
Robot I-IV Collection (1990)
Robot Rascals (1987)
Ruckus Poker (1993)
Russian 6 Pak (1994)
Sadko (1993)
Saper (1993)
Sauro (1997)
SeoGyun (1993)
SeoGyun 95 (1995)
Settlers of Catan, The (1996)
Shards (1995)
Sherlock (1991)
Shortline (1992)
Sid and Al's Incredible Toons (1993)
Sin-Ganada (1994)
Sixx (1993)
Sky Cat (1991)
Sokoban 1994 (1994)
Solder Runner (1996)
Solitaire's Journey (1992)
Soul Magician (1992)
Space Plumber (1998)
Splitterwelten (1997)
Squarez Deluxe! (1993)
Stone Age (1992)
Super Tetris (1991)
Super GemZ (1992)
Swap (1992)
Switch (1995)
Syyrah - The Warp Hunter (1997)
Tactile (1989)
Tesserae (1993)
Tetriller (1990)
Tetripz (1998)
Th!nk Cross (1991)
Thai Chess (1994)
Theatre of War (1992)
Even More Incredible Machine, The (1993)
Power, The (1991)
Throwland (1994)
Tiles of the Dragon (1993)
Tilt (1992)
Time Race (1990)
Timewalk (1994)
Incredible Machine, The (1993)
Incredible Machine 2, The (1994)
Too Many Geckos! (1995)
Towers (1992)
TrianGO (1989)
Troddlers (1993)
Trubis (1992)
Tubes (1993)
Tubis (1993)
Turn It II (1991)
Turn It (1990)
Ugh! (1992)
Vampiric Tower (2000)
Vetka (1992)
Vira!!! (1995)
Virus Rage (1983)
Weebee Worlds (1994)
Xenoball (1995)
XFortress (1994)
X-mas Lamers (1992)
Xmas Lemmings (1991)
Xmas Lemmings 1992 (1992)
Zmeelov (1992)
Zyconix (1992)
2 Fast 4 You (1995)
Battlerace (1995)
Burnout Championship Drag Racing (Player's Choice) (1998)
Big Red Racing (1995)
Billabong Racers (2001)
Backroad Racers (1993)
Burnout Championship Drag Racing (1998)
Car and Driver (1992)
Carmageddon Max Pack (1998)
Carnage (1993)
Circuit Racer (1997)
Cyclemania (1994)
Dakar 4x4 (1987)
Days of Thunder (1990)
Deadly Racer (1994)
Death Rally (1996)
Deathtrack (1989)
F-Zero (2002)
F-1 (1991)
Fatal Fumes (1997)
Ford Simulator 5.0 (1994)
Formula Karts (1997)
Grand Prix 2 (1995)
GP Sprint (2000)
Grand Theft Auto (1997)
GT Racing 97 (1997)
Hi-Octane (1995)
High Octane (2003)
Hot Speed (1996)
Ignition (1997)
IndyCar Racing (1993)
IndyCar Racing II (1996)
International Moto X (1996)
Karting Grand Prix (1988)
Kosmonaut (1990)
Kart Racing (1996)
Last Action Hero (1994)
Locus (1995)
Mag-Racer (1997)
Manic Karts (1995)
Maximum Roadkill (1995)
MegaRace 2 (1996)
MegaRace (1993)
Moto Grand Prix (1990)
Micro Machines 2 - Turbo Tournament (1995)
Micro Machines (1994)
Motor Mash (1998)
Maximum Overdrive (2000)
NASCAR Racing (1994)
NASCAR Racing 2 (1996)
Nitro Racers (1997)
Overdrive (1995)
OverHeat (1997)
Overlord Maniac Car (1997)
PC Rally (1995)
Popo Car (1994)
Power F1 (1997)
Prost Grand Prix 1998 (1998)
Quarantine (1994)
Quarantine II - Road Warrior (1995)
Race Mania (1995)
Rally Championships (1994)
Rallye Racing 97 (1996)
Rally Sport (1996)
Race Car (1993)
Road Hog! (1995)
Rubicon Trail (1988)
Scorcher (1996)
Screamer (1995)
Screamer 2 (1996)
Screamer Rally (1997)
Skunny Kart (1993)
SkyRoads (1993)
SkyRoads Xmas Special (1994)
Slicks n Slide (1993)
SlipSpeed (2020)
Slipstream 5000 (1995)
Speed Demons (1997)
Speed Haste (1995)
Speed Racer in The Challenge of Racer X (1992)
SpeedRage (1996)
Stocker (1988)
Stunt Driver (1990)
Stunts (1990)
Supercars International (1996)
SuperKarts (1995)
Super Worms (2003)
Thunder Offshore (1997)
Thunder Truck Rally (1997)
Need for Speed, The - Special Edition (1996)
Touring Car Champions (1997)
Track Attack (1996)
Trucks (1997)
Test Drive (1987)
Test Drive II - The Collection (1990)
Test Drive III The Passion (1990)
Test Drive - Off-Road (1997)
Tube (1995)
Tunnels of Armageddon (1989)
Virtual Karts (1995)
Wacky Wheels (1994)
Whiplash (1995)
World Rally Fever - Born on the Road (1996)
World Wide Rally (1997)
Wreckin Crew (1998)
XCar Experimental Racing (1997)
2400 AD (1988)
Four Crystals of Trazere, The (1992)
Nine Lives of Secret Agent Katt, The (1991)
Aethra Chronicles, The - Volume One - Celystra's Bane (1994)
Albion (1995)
Aleshar - The World of Ice (1997)
Alien Logic (1994)
AllegroHack (2000)
Al-Qadim - The Genie's Curse (1994)
Amberstar (1992)
Amulets and Armor (1997)
Angband (1992)
Anvil of Dawn (1995)
Temple of Apshai Trilogy (1982)
Bard's Tale Construction Set, The (1991)
Bard's Lore II, The - The Dark Tower (1998)
Bard's Lore, The - The Warrior and The Dragon (1998)
Bard's Quest, The - Dungeons of the Unknown (1994)
Bard's Tale 1, The - Tales Of The Unknown (1987)
Bard's Tale 2, The - The Destiny Knight (1988)
Bard's Tale 3, The - Thief Of Fate (1990)
Elder Scrolls Legend, An - Battlespire (1997)
Blind Justice (1995)
Brany Skeldalu (1998)
Buck Rogers - Countdown to Doomsday (1990)
Buck Rogers - Matrix Cubed (1992)
Burntime (1993)
Captive (1992)
Ruins of Cawdor (1995)
Challenge of the Five Realms (1992)
City Beneath the Surface (1998)
Champions of Krynn (1990)
Cobra Mission (1992)
Chronicles of Galia - The Shadow of Evil (2010)
Chronicles of Galia - The First Mission (2007)
Crystals of Arborea (1990)
Curse of the Azure Bonds (1989)
Daemonsgate (1992)
Darklands (1992)
Descent to Undermountain (1998)
Don't Go Alone (1989)
Death Knights of Krynn (1991)
Doomdark's Revenge (1995)
Dragons of Flame (1989)
Dark Heart of Uukrul, The (1989)
Dark Queen of Krynn, The (1992)
Druid - Daemons of the Mind (1995)
Dark Sun - Shattered Lands (1993)
Dark Sun II - Wake of the Ravager (1994)
Dungeon Hack (1993)
Dungeon Master (1989)
Dungeon Master II - The Legend of Skullkeep (1994)
Dusk of the Gods (1991)
Eye of the Beholder (1991)
Eye of the Beholder II - The Legend of Darkmoon (1991)
Eye of the Beholder III - Assault on Myth Drannor (1993)
Elder Scrolls, The - Arena (1994)
Escape from Hell (1990)
Escape from Ragor (1994)
Escape from Ragor II - Megrim's Rache (1994)
Elder Scrolls, The - Daggerfall (1996)
EXP - The Excellent Potato (1996)
Fallout (1997)
Fates of Twinion (1993)
Fire King (1990)
Flame Storm (1995)
Forever Legend (1998)
Fountain of Dreams (1990)
Gateway to the Savage Frontier (1991)
Gunblaze (1994)
Hack (1984)
Hexx - Heresy of the Wizard (1994)
Hired Guns (1993)
Superhero League of Hoboken (1994)
Hong Gildong-jeon (1993)
Halls of the Dead - Faery Tale Adventure II (1997)
Infernal Tome, The (1994)
Ishar - Legend of the Fortress (1992)
Ishar 2 - Messengers of Doom (1993)
Ishar 3 - The Seven Gates of Infinity (1994)
Joyous Rebel (1996)
J.R.R. Tolkien's The Lord of the Rings Vol 1 (1990)
J.R.R. Tolkien's The Lord of the Rings Vol 2 (1991)
Knights of Xentar (1994)
Legacy of the Ancients (1989)
Legacy - Realm of Terror (1993)
Legends of Murder - Volume 1 Stonedale Castle (1989)
Legends of Murder - Volume 2 Grey Haven (1991)
Legends of Valour (1992)
Lands of Lore - Guardians of Destiny (1997)
Lands of Lore - The Throne of Chaos (1993)
Lords of Doom - Part One - The Black God (1996)
Lords of Midnight, The (1995)
Lords of Midnight (1995)
Madman (1995)
Mad Paradox (1994)
Magic Candle, The (1989)
Magic Candle 2, The - The Four and Forty (1991)
Magic Candle 3, The (1992)
Magus - 2nd edition (1993)
Mines of Titan (1988)
MegaTraveller 1 - The Zhodani Conspiracy (1990)
MegaTraveller 2 - Quest for the Ancients (1991)
Menzoberranzan (1994)
Might and Magic - Book 1 (1986)
Might and Magic 2 - Gates to Another World (1988)
Might and Magic 3 - Isles of Terra (1991)
Might and Magic 4 - Clouds of Xeen (1992)
Might and Magic 5 - Darkside of Xeen (1993)
Might and Magic 4+5 - World of Xeen (1994)
Might and Magic - Swords of Xeen (1995)
Moebius - The Orb of Celestial Harmony (1987)
Moonstone - A Hard Days Knight (1992)
Moria (1992)
Mysterious Song (2000)
Nemesis - The Wizardry Adventure (1996)
NetHack Plus (1994)
NetHack-- (1992)
NetHack (1987)
Neverwinter Nights (1991)
NetHack - Falcon's Eye (2001)
Nishiran (1995)
Dungeons of Noudar 3D (2018)
Obitus (1991)
Original Mulan, The (1998)
Planet's Edge - The Point of No Return (1991)
Pools of Darkness (1991)
Pool of Radiance (1988)
Princess Maker 2 (1993)
Prophecy - The Fall of Trinadon (1989)
Prophecy of the Shadow (1992)
Psionics (1993)
Quest - The Dungeon Escape (1996)
Realms of Arkania - Blade of Destiny (1992)
Realms of Arkania 2 - Star Trail (1994)
Realms of Arkania 3 - Shadows over Riva (1996)
Ravenloft - Stone Prophet (1995)
Ravenloft - Strahd's Possession (1994)
Red Crystal, The - The Seven Secrets of Life (1993)
Elder Scrolls Adventures, The - Redguard (1998)
Revolt of Dons Knights (1996)
Ring Cycle (1996)
Rogue Clone (1988)
Rogue (1983)
Rol Crusaders (1995)
Rome - Pathway to Power (1993)
Romance of the Forgotten Kingdom (1995)
Realm of the Paladin Deceptions Plague (1995)
Super Samtong (1994)
Scavengers of the Mutant World (1988)
Secret of the Silver Blades (1990)
Sentinel Worlds 1 - Future Magic (1988)
Seven Spirits of Ra, The (1987)
Seventh Sword of Mendor (1995)
Shadowlands (1993)
Shadow Sorcerer (1991)
Shadoworlds (1993)
Shadow of Yserbius (1993)
Shapeshifter (1992)
Shard of Spring (1986)
Silmar (1990)
SLASH (1996)
Solar Winds - Galaxy (1993)
Sorcerian (1990)
Space 1889 (1990)
Space Rogue (1989)
Spacewrecked - 14 Billion Light Years From Earth (1991)
Spelljammer - Pirates of Realmspace (1992)
Spirit of Adventure (1991)
Spiritual Warfare (1993)
SRogue (2010)
Stone Mist (1992)
Stone Mist 2 (1994)
Stonekeep (1995)
Tangled Tales (1989)
Times of Lore (1988)
Towers - Lord Baniff's Deceit (1994)
Tower of Souls (1995)
Treasures of the Savage Frontier (1992)
Trial by Magic (1995)
Summoning, The (1992)
Tunnels and Trolls - Crusaders of Khazan (1990)
Ultima 0 - Akalabeth (1980)
Ultima I - The First Age of Darkness (1986)
Ultima II - Revenge of the Enchantress (1983)
Ultima III - Exodus (1983)
Ultima IV - Quest of the Avatar (1985)
Ultima V - Warriors of Destiny (1988)
Ultima VI - The False Prophet (1990)
Ultima VII Part 1 - The Black Gate + Forge of Virtue (1992)
Ultima VII Part 2 - Serpent Isle + The Silver Seed (1993)
Ultima VIII - Pagan (1994)
Ultima Underworld - The Stygian Abyss (1992)
Ultima Underworld 2 - Labyrinth of Worlds (1993)
Ultizurk 2 - The Shadow Master (1993)
Ultizurk 3 - The Guildmaster's Quest (1995)
Ultizurk (1995)
Unlimited Adventures (1993)
Untima IX - Descension (2003)
Valhalla (1993)
Vengeance of Excalibur (1991)
Visions of Aftermath - The Boomtown (1988)
Warriors of Legend (1993)
WarWizard (1994)
Wasteland (1988)
WaxWorks (1992)
Whale's Voyage (1993)
Whale's Voyage II (1995)
Wibarm (1989)
Wizardry I - Proving Grounds of the Mad Overlord (1981)
Wizardry II - The Knight of Diamonds (1982)
Wizardry III - Legacy of Llylgamyn (1983)
Wizardry IV - The Return of Werdna (1986)
Wizardry V - Heart of the Maelstrom (1988)
Wizardry VI - Bane of the Cosmic Forge (1990)
Wizardry VII - Crusaders of the Dark Savant (1992)
Wizard's Crown (1985)
Wizard Wars (1988)
Worlds of Legend - Son of the Empire (1992)
World of Aden - Thunderscape (1995)
Wraith (1995)
Worlds of Ultima - The Savage Empire (1990)
Ultima Worlds of Adventure 2 - Martian Dreams (1991)
X-Men 2 - The Fall of the Mutants (1991)
Ys II Special (1997)
Ys - The Vanished Omens (1989)
Zakato - Maan (1995)
Zangband (1994)
Zeliard (1990)
ZZT's Revenge! (1992)
386 Spys (1989)
3D Baller (1996)
3DHero (1997)
3D Space Fighter (1998)
Fourth Generation, The (1996)
Abaron (1995)
Absolute Zero (1995)
Adentrator (1991)
Age of Dragon (1997)
Aces High - The True Air Duel Simulator (1996)
Airstrike (1995)
Air-Strike (1998)
Alien Terminator (1997)
ANIMAC (1991)
Annihilator Tank (1995)
Aquaphobia (1992)
Artman's Goplanes! (1997)
Arya Vaiv (1994)
Assault Rigs (1996)
Asteroid Impact (1998)
Assault Trooper (1997)
Astro Blaster (1988)
Axia (1998)
BAD - Blasting, Annihilation and Destruction (1997)
Baryon (1995)
Battle Chopper (1994)
Battle Fire (2000)
Bulsajo Duck (1998)
Bedlam 2 - Absolute Bedlam (1997)
Bedlam (1996)
Big Guns (2000)
Biodomes (1991)
Bionic Police (1991)
Bios (1990)
Blaster! (1998)
Blur Way (1995)
BMF (1997)
Boomerang (1991)
Box Ranger (1992)
Captain Fizz (1989)
Captain Kang (1995)
Chopper Duel (1993)
Clif Danger (1996)
Cobra Gunship (1997)
Colony 28 (1997)
Combatrobo Zakato (1994)
Commando Enhanced (1998)
Conqueror (1990)
Conquest 4000 (1995)
Crime Wave (1990)
Crystal Map (1997)
Cyberbykes - Shadow Racer VR (1995)
CyberRace (1993)
Cyber Marine (1999)
Cybotron (1989)
Dactylus (1997)
Dark Moon (1996)
Dark Rage (1997)
Dawgfight (1992)
Dawn Raider (1990)
Decimation (1994)
Deep Fortress (1996)
Deep Red (1996)
Defender of Freedom (1992)
Delta V (1994)
Delvion Star Interceptor (1995)
Desafio Final (1991)
Desert Raider (1991)
Destruction Zone (1992)
Devil's Death (1998)
DIF-1 Laser Tank (1991)
D.O.G - Fight For Your Life (1997)
Domo (1993)
DOOM 2D (1996)
Dragons Power, The (1994)
Drone (1997)
Dragon Tuka 3D (1996)
Universal Forces Eardis Second Edition (1997)
Enemy Lines (1997)
Enemy Star (1999)
Operation Vulture 4 - Escape From Station 7 (1996)
Expediente N 906 (1998)
Extreme Assault (1997)
Feedback (1995)
Final Impact (1998)
Final Orbit (1990)
Firewind (1996)
Firo and Klawd (1998)
Fly 2020 (1995)
Flying Tigers II (1994)
Flying Tigers (1994)
Full Metal Jacket 2 (1996)
Full Metal Jacket (1996)
Fox Ranger 2 (1993)
Fox Ranger (1992)
Future Dimension (1995)
Galactix (1992)
Gamma Wing (1991)
Ganja Farmer (1998)
Glook (1996)
GoGo!! Our Star (1994)
Guimo (1997)
GunHed (1994)
Hellfire Zone (1995)
Highway Hunter (1995)
Armageddon - Hondon Sog-Euro (1995)
Hunt in Space 2 (1994)
IAS (1994)
If It Moves, Shoot It! (1989)
Iljimae-jeon - Manpa Sikjeok-pyeon (1994)
Illusion Blaze (1994)
Interpose (1996)
Into the Sun - Projected Distruction (1995)
Island Hopper (1998)
Izmir (1995)
Jeep War (1991)
Jetstrike (1994)
Juno First (1984)
Katharsis (1997)
Kiloblaster (1992)
Kristor (1988)
Kuwait Assault (1991)
L.A. Blaster (1996)
Lada - The Ultimate Challenge (1996)
Historia Inolvidable, La (1991)
Machine Nation (1996)
Major Stryker (1993)
Mass Destruction (1997)
Mission Cobra 98 (1998)
MegaDestroyer Frantis (1991)
Mega Force 2 (1995)
MegaMaze (1994)
Mega Phoenix (1992)
Merlin (1995)
Metal Rage - Defender of the Earth (1996)
Mirage Thunder (1993)
Mission Mopreme 32K (1997)
Mono Space (1997)
Nebula Fighter (1997)
Nmongo Bongo (1991)
Obliterator (1996)
Olmang Jolmang Paradise (1995)
Operation Carnage (1996)
Operation Spacehog (2000)
Operation Vulture (1992)
Operation Vulture III - Cyber Chopper (1995)
OverKill (1992)
Oxide (1998)
Patrulla Espacial (2001)
Phase2 (1998)
Phylox (1992)
Pig Pooyan (1995)
Piranha (1996)
Plexu - The Time Travellers (1990)
Project Paradise (1997)
Prototype (1995)
Przekleta Ziemia (1998)
Punky Duck (1996)
Pyrotechnica (1995)
QAD - Quintessential Art of Destruction (1996)
Qi Xiao Quan (1990)
Quadnet (1998)
Raptor - Call of the Shadows (1994)
Ravage (1996)
Rebel Runner - Operation - Digital Code (1996)
Return of the Mutant Space Bats of Doom (1995)
Revenge of the Mutant Camels (1994)
Robot Hunter (1994)
Rodge Rock In Retroactive (1995)
Rooster (1995)
RS-2 (1990)
SAF - Secret Armored Force (1997)
Sand Storm - The Championship Version (1992)
Scorched Planet (1996)
SDI - Strategic Defense Initiative (1988)
Seek and Destroy (1996)
Shellshock (1996)
Shit Fighter (1997)
Shooting Langrisser 2 (1998)
Sibal Monkey Adventure 3 (1995)
SideLine (1996)
Sirwood (1990)
Skunny - Lost in Space (1993)
Skunny's Desert Raid (1993)
Sky Bombers (1994)
Sky and Rica (1995)
Slordax - The Unknown Enemy (1991)
Smashing Pumpkins into Small Piles of Putrid Debris (1993)
Silent Operation III - The Impossible Mission Under Water (1995)
Soviet (1990)
Spacecutter (1989)
Spacewar (1985)
Spectre VR (1993)
Spheroids (1993)
SPIN (1996)
SplayMaster (1996)
Spy Master (1994)
Sergeant Slotte Galaxy Janitor (1995)
Super Stardust (1996)
Stalker 1 - Path of Fire (1994)
Starcom (1997)
Starfire (1992)
Star Fortress (2004)
Stargoose Warrior (1989)
Stargunner (1996)
Star Hammer (1994)
StarMines II - Planet of the Mines (1992)
Stillhunt (1996)
S.T.O.R.M. (1996)
Stardust (1995)
Strike II (1991)
StrikePoint (1996)
Submarine Fury (1999)
Suburban Commando (1993)
SungSegi (1994)
Super Beemger (1994)
Super Cop (1994)
Supercyber (1993)
Surface Tension (1996)
SWAR! (2004)
Starwars 2 (1995)
SWIV 3D (1996)
Star Wars - Rebel Assault (1993)
Star Wars - Rebel Assault II - The Hidden Empire (1995)
Tailchaser (1997)
Taito's Super Space Invaders (1991)
Tank Commander (1995)
Battle Europe (1993)
Tempest 2000 (1996)
Terminal Velocity (1995)
TerraFire (1997)
Terroid (1996)
Day 4, The - Icarus (1994)
Day 5, The - Assault Dragon (1995)
Orion Project, The (1994)
Thera (2001)
Raven Project, The (1995)
Space Vegetable Corps, The (1992)
They Call Me... The Skul (1996)
Threat (1995)
Thunder Strike (1997)
Thunderstrike 2 (1995)
Thunderstrike (1990)
Time on Target (1995)
Tracer (1996)
Traffic Department 2192 (1994)
Trauma (1995)
Triclops Invasion (1986)
Air Troubles (1995)
True Blood - The Karthanian Ultimatum (1994)
Tunnel B1 (1996)
Tyrian (1995)
Tyrian 2000 (1999)
Universal Forces Eardis Second Edition (1997)
UFO Invasion (1997)
Ultimate Tapan Kaikki, The (1998)
Universal Warrior (1995)
U.R.B.A.N The Cyborg Project (1999)
U.S.H.F. - Beyond Armageddon (1995)
Ultra Violent Worlds (1998)
Vanguard Ace - Vertical Madness (1997)
VanSlug - X Mission (1995)
VGA Sharks (1990)
Virus (1988)
Manfred Von Krashenberns Flying Circus (1994)
Wingstar (1996)
World Quest (1993)
Xenopods (1991)
Xerix (1992)
Xerix 2 - The Caverns of Mars (1994)
Z-Blast (2013)
Zis the Adventure (1995)
Zone 66 (1993)
1942 The Pacific Air War (1994)
688 Attack Sub (1989)
A-10 Tank Killer (1989)
Ace of Aces (1987)
Aces of the Deep (1994)
Aces of the Pacific (1992)
Aces Over Europe (1993)
AEGIS Guardian of the Fleet (1994)
A.G.E. (1991)
AH-3 - ThunderStrike (1996)
Air Duel 80 Years of Dogfighting (1993)
Airline Simulator (1996)
Air Power Battle in the Skies (1995)
Air Warrior (1992)
Alpha Storm (1997)
Apache (1995)
Archimedean Dynasty (1996)
Armored Fist 2 (1997)
Armored Fist (1994)
ATAC - The Secret War Against Drugs (1992)
AV8B Harrier Assault (1992)
Batfish (1991)
Battlecruiser 3000AD (1996)
Black Knight Marine Strike Fighter (1995)
Borodino (1992)
Carriers at War 2 (1993)
Carriers at War (1992)
Complete Carriers at War (1996)
Chuck Yeager's Air Combat (1991)
Comanche 2 (1995)
Comanche 3 (1997)
Comanche CD (1994)
Combat Air Patrol (1995)
Take Back (1994)
CyberStrike (1994)
Darker (1995)
Darklight Conflict (1997)
Boot, Das - German U-Boat Simulation (1990)
Hexagon-Kartell, Das (1996)
Dawn Patrol (1994)
Dawn Patrol Head to Head (1995)
D-Day (1992)
D-Day - The Beginning of the End (1994)
Decision at Gettysburg (1988)
Deadly Skies (1995)
Descent Anniversary Edition (1996)
Descent II Vertigo Series (1996)
Dinopark Tycoon (1993)
Dolphin Boating Simulator (1988)
Dolphin Powerboating Simulator 3 (1994)
DragonStrike (1990)
Metaltech Earthsiege (1994)
EF2000 (Special Edition) (1996)
Elite Plus (1991)
Emergency Room (1995)
E.S.S Mega (1991)
Evasive Action (1993)
Eye of the Storm (1993)
F-22 Lightning II (1996)
F-15 Strike Eagle III (1992)
Falcon Gold (1994)
Fast Attack High Tech Submarine Warfare (1996)
Fighter Duel Special Edition (1996)
Fighter Wing (1995)
Firestorm - The Forest Fire Simulation Program (1995)
Fighter Command (1992)
Fleet Defender (1994)
Flight Light Plus (1996)
Flight Unlimited (1995)
Flying Corps Gold (1997)
War Eagles - Fokker (1989)
Frontier - First Encounters (1995)
Frontier - Elite 2 (1993)
Galactic Empire (1990)
Great Naval Battles Vol I - North Atlantic 1939-1943 (1992)
Great Naval Battles Vol II - Guadalcanal 1942-43 (1994)
Great Naval Battles Vol III - Fury in the Pacific 1941-1944 (1995)
Great Naval Battles Vol IV - Burning Steel 1939-1942 (1995)
Complete Great Naval Battles, The - The Final Fury (1996)
Gunship 2000 (CD-ROM Edition) (1993)
Heroes of the 357th (1992)
HIND The Russian Combat Helicopter Simulation (1996)
Hyperspeed (1991)
iF-16 Fighting Falcon (1996)
Inferno (1994)
Iron Assault (1995)
Jaws (1989)
Jane's Combat Simulations AH-64D Longbow (1996)
Jane's Combat Simulations Advanced Tactical Fighters (1996)
JetFighter II Operation Lighting Storm (1992)
JetFighter III Platinum (1999)
JetFighter Full Burn (1998)
JetFighter The Adventure (1988)
Jones in the Fast Lane (Enhanced CD-ROM) (1992)
Jutland (1993)
K-1 Tank (1994)
Killing Cloud (1991)
Life and Death 2 - The Brain (1990)
Leningrad (1997)
Lightspeed (1990)
Lion (1995)
Man of War (1997)
MechWarrior 2 (Limited Edition) (1996)
MechWarrior 2 Mercenaries (1996)
Megafortress (1991)
Merlin Challenge (1993)
Metaltech Battledrome (1994)
Metaltech Earthsiege (1994)
Microsoft Flight Simulator (v1.0) (1982)
Microsoft Flight Simulator (v2.0) (1984)
Microsoft Flight Simulator (v3.0) (1988)
Microsoft Flight Simulator (v4.0) (1989)
Microsoft Flight Simulator (v5.1) (1993)
Microsoft Space Simulator (1994)
MechWarrior (1989)
Navy Strike (1995)
Overlord (1994)
Pacific Islands (1992)
Pacific Strike (1994)
Pole Position (1996)
Precision Approach (1994)
Privateer 2 The Darkening (Special Edition) (1996)
Nomad (1993)
PT Boat Simulator (1994)
Rapcon - Military Air Traffic Control Simulator (1989)
Reach for the Skies (1993)
Renegade - Battle for Jacob's Star (1995)
Renegade II Return to Jacob Star (1996)
Retribution (1994)
Rostov (1997)
Sandwarriors (1996)
Seal Team (1993)
Secret Weapons of the Luftwaffe (CD-ROM) (1992)
Shattered Steel (1996)
Silent Hunter (1996)
Smolensk to Moscow (1999)
Starship Commander's Tactical Battle Simulator, The (1993)
Star Crusader (1994)
Starfighter 3000 (1996)
Star Quest I in the 27th Century (1995)
Star Rangers (1995)
Steel Thunder (1989)
Stellar 7 (1990)
Strike Force Harrier (1988)
Stormovik - SU-25 Soviet Attack Fighter (1990)
Storm in the West (1998)
Strike Commander (CD-ROM Edition) (1993)
Strike Base (1996)
Stunt Island (1992)
Su-27 Flanker (1996)
Subhunt (1997)
Subwar 2050 (CD-ROM) (1994)
Super-VGA Harrier (1993)
Star Wars TIE Fighter (Collector's CD-ROM) (1995)
Star Wars X-Wing (Collector's CD-ROM) (1994)
Task Force 1942 (1992)
Team Yankee (1990)
Terra Nova - Strike Force Centauri (1996)
TFX (1993)
Soaring Simulator, The (1998)
Train, The - Escape to Normandy (1988)
War College, The - Universal Military Simulator 3 (1995)
Top Gun Fire at Will (1996)
Tornado Operation Desert Storm (1994)
Ultrabots (1993)
U.S. Navy Fighters (Gold) (1995)
USS Ticonderoga Life and Death on the High Seas (1995)
USS John Young 2 (1992)
Veritech - Variable Flight Simulator (1994)
VGA Civil War Strategy (1992)
Virtual Squadron (1996)
Wargame Construction Set III Age of Rifles 1846-1905 (1996)
War in the Gulf (1993)
Wars of Napoleon Strategy Game (1997)
Wing Commander (1990)
Wing Commander II Deluxe Edition (1992)
Wing Commander III Heart of the Tiger (1994)
Wing Commander IV The Price of Freedom (1996)
Wing Commander Academy (1993)
Wing Commander Privateer (CD-ROM) (1994)
Werewolf vs. Comanche 2.0 (1995)
Wings of Glory (1995)
Wings of Thunder (1994)
Wolf (1994)
WolfPack Enhanced (1994)
WW2 Air Force Commander (1993)
World War 2 in Europe (1998)
Xenocide (1990)
XF5700 Mantis Experimental Fighter (1992)
3D Ball Blaster (1992)
3D CyberPuck (1995)
4-D Boxing (1991)
Action Soccer (1995)
Alien Olympics (1994)
Arnold Palmer Tournament Golf (1990)
Arcade Pool (1994)
Baoxiao Duobiqiu (1993)
BassDuel (1992)
BassTour (1992)
Battlesport (1997)
Big Game Fishing (1991)
Billiards (1993)
Boleivol Beach (1991)
Caveman Ugh-Lympics (1989)
Center Court Tennis (1991)
Championship Manager 97-98 (1997)
Circus Games (1989)
Circus Attractions (1989)
Compaq Grand Slam Cup (1992)
Cyber Pony (1999)
David Leadbetter's Greens (1991)
Davis Cup Complete Tennis (1996)
Daily Double Horse Racing (1988)
DDM Soccer '97 (1996)
Digital Downs (1994)
Drazen Petrovic Basket (1990)
Empire Soccer 94 (1994)
Epic Baseball (1995)
ESPN NBA Airborne 95 (1995)
Emilio Sanchez Vicario Grand Slam (1989)
Extreme Tennis (1999)
Football Limited (1994)
Front Page Sports Football Pro '96 Season (1995)
Football Glory (1995)
Funky Ball (1995)
Furcol (1997)
Fuzzy's World of Miniature Space Golf (1995)
Golf Pro 2000 Downunder (1997)
Grand Prix Tennis (1987)
Grave Yardage (1989)
Haebyeon-ui Baegu (1996)
International Hockey (1987)
International Rugby League (1996)
Jai Alai (1991)
Jammit (1994)
Jonah Lomu Rugby (1998)
Killerball (1991)
Kingpin - Arcade Sports Bowling (1995)
Kings of the Beach (1988)
Kick Off 3 (1994)
Vuelta Ciclista 2000, La (2000)
Lee Trevino's Fighting Golf (1988)
Links LS 1997 (1996)
Links 386 CD (1995)
Lakers versus Celtics and the NBA Playoffs (1989)
Michael Jordan in Flight (1993)
Mike Ditka Ultimate Football (1991)
Mountain Bike Racer (1990)
Mundial de Futbol (1990)
NCAA Championship Basketball (1996)
NCAA - Road to the Final Four (1991)
NCAA - Road to the Final Four 2 (1994)
NHL '94 (1993)
NHL 97 (1996)
Old Time Baseball (1995)
Olimpiadas 92 - Gimnasia Deportiva (1992)
Olimpiadas 92 - Atletismo (1992)
PC Basket 4.5 (1996)
PC Futbol 5.0 (1996)
PGA European Tour (1995)
PGA Tour 96 (1995)
Pokso Bowling (1995)
Picture Perfect Golf (1995)
Professional Underground League of Pain (1997)
Professional Tennis Simulator (1990)
Quarterback Attack (1996)
QuarterPole (1993)
Reach out for Gold (1993)
Roland Garros 97 (1997)
Rollerblade Racer (1992)
Rugby World Cup 95 (1995)
Sensible Golf (1994)
Serve and Volley (1988)
Sierra Championship Boxing (1985)
Simulador de Boxeo (1990)
Super League Pro Rugby (1996)
Superleague Soccer (1989)
Soccer Superstars (1996)
Solid Ice (1996)
SuperSki (1988)
SuperSki II (1992)
SuperSki III (1994)
SuperSki Pro (1994)
Street Football (1988)
Striker '95 (1995)
Striker '96 (1996)
Super Action Ball (1995)
Tee Time (1995)
Tennis Elbow (1997)
Caveman Volleyball (1996)
Total Knockout Boxing (1995)
Total Control Football (1996)
Tour 91 (1991)
Triple Play 97 (1996)
Ultimate Football '95 (1995)
Unnecessary Roughness '95 (1994)
Unnecessary Roughness '96 (1995)
Unnecessary Roughness (1993)
Virtual Tennis (1996)
Virtual Pool (1995)
Virtual Snooker (1996)
VR Soccer '96 (1995)
Wayne Gretzky Hockey (1989)
Wayne Gretzky Hockey 2 (1991)
Wayne Gretzky Hockey 3 (1992)
Wayne Gretzky and the NHLPA All-Stars (1995)
Wembley Rugby League (1996)
World Cricket (1994)
World Hockey '95 (1995)
Wilson ProStaff Golf (1993)
1830 Railroads and Robber Barons (1995)
1869 (1992)
5th Fleet, The (1994)
A-Train (1992)
Ancient Art of War (1984)
Across the Rhine (1995)
Advanced Civilization (1995)
Advanced Strategic Command (1998)
Afterlife (1996)
Aimpoint (1996)
Air Bucks (1992)
Air Force Commander (1992)
Airline (1991)
Airlines (1994)
Alien Legacy (1994)
Ambush at Sorinor (1993)
Armada (1989)
Armada 2525 (1991)
Armored Moon - The Next Eden (1998)
ARSENAL Taste the Power (1998)
Ascendancy (1995)
Ashes of Empire (1993)
Balance of the Planet (1990)
Buzz Aldrin's Race into Space (1993)
Baron - The Real Estate Simulation (1983)
Battle Bugs (1994)
BattleTech - The Crescent Hawk's Revenge (1990)
BattleTech - The Crescent Hawk's Inception (1988)
Battleship Bismarck (1987)
Betrayal (1990)
Birthright - The Gorgon's Alliance (1996)
Big Business (1990)
Biing! Sex, Intrigue and Scalpels (1995)
Battle Isle (1991)
Battle Isle 2 (1993)
Blitzkrieg - Battle At The Ardennes (1990)
Blood Bowl (1995)
Blood and Magic (1996)
Breach 3 (1995)
Canton - An Atlas Pathfinder Adventure (1994)
Caesar (1992)
Caesar 2 (1995)
Capitalism (1995)
Capitalism Plus (1996)
Castles (1991)
Castles 2 - Siege and Conquest (1992)
Castles - The Northern Campaign (1991)
Cavewars (1996)
Celtic Tales - Balor of the Evil Eye (1995)
Centurion - Defender of Rome (1990)
Central Intelligence (1994)
C.E.O. (1995)
Champion of the Raj (1991)
Citizens - Backwater Affairs! (1996)
Civil War Battleset (1990)
Civil War, The (1995)
Clash of Steel - World War 2 - Europe 1939-45 (1993)
Clonk (1994)
Clonk 2 - Debakel (1994)
Clonk 3 - Radikal (1996)
Clonk APE (1995)
Club and Country (1995)
Coaster (1993)
Command and Conquer (1995)
Command and Conquer - Red Alert (1997)
Command Adventures - Starship (1995)
Command HQ (1990)
Conflict - Europe (1989)
Conflict - Korea the First Year 1950-1951 (1992)
Conflict (1990)
Conflict - Middle East (1991)
Conflict in Vietnam (1986)
Conquest Earth - First Encounter (1997)
Conquest of Japan (1992)
Conquered Kingdoms (1992)
Conquest of the New World Deluxe (1997)
Conqueror AD 1086 (1995)
Counter Action (1997)
Crazy Cows (1998)
Creation (1997)
Crisis in the Kremlin (1992)
Crusade (1995)
CRW - Metal Jacket (1995)
Custer's Last Command (1995)
Cyber Empires (1992)
CyberJudas (1994)
Dark Legions (1994)
Dark Universe (1995)
Darwin's Arena (1991)
Darwin's Island (1992)
Day of the Pharaoh (1989)
D-Day - America Invades (1995)
Defend the Alamo (1994)
Detroit (1993)
Dime City (1995)
Discovery - In the Steps of Columbus (1992)
Dominus (1994)
D.R.A.G.O.N. Force (1989)
Dragon Lord (1990)
Dschump! (1993)
Dune 2 - The Building of a Dynasty (1992)
Dune III (1995)
Dungeon Keeper (1997)
Earth 2140 (1997)
Edward Grabowski's The Blue and The Gray (1993)
El-Fish (1993)
Empire Deluxe (1993)
Empire 2 - The Art of War (1995)
End of the World, The (1997)
Epidemic! (1983)
Everest - The Iceman's Apprentice (1996)
Exploration (1994)
F1 Manager (1996)
F1 Manager Professional (1997)
Fallen Heroes (1996)
Fall Weiss 1939 (1998)
Fantasy Empires (1993)
Fantasy General (1996)
Fields of Glory (1993)
Floor 13 (1992)
Fragile Allegiance (1997)
Freedom - Rebels in the Darkness (1988)
Front Lines (1994)
Frontline (1990)
Fort Apache (1991)
Full Metal Planet (1990)
Gender Wars (1996)
Genewars (1996)
Global Conquest (1992)
Global Domination (1993)
Global Effect (1992)
Gloriana (1996)
Gnome Alone (1992)
Gold of the Americas - The Conquest of the New World (1989)
Good to Firm (1994)
Green (1992)
Hammer of the Gods (1994)
Hannibal (1992)
Heirs to the Throne (1992)
Heroes of Might and Magic (1995)
Heroes of Might and Magic II (Deluxe Edition) (1998)
Hexsider (1990)
High Command - Europe 1939-45 (1992)
Historyline 1914-1918 (1992)
Hostile Takeover 2 (1992)
High Seas Trader (1995)
Imperium Galactica (1997)
Imperium (1990)
Inordinate Desire (1995)
Into the Void (1997)
Iron Seed (1994)
Jagged Alliance (1994)
Jagged Alliance - Deadly Games (1996)
Janggun (1996)
J.R.R. Tolkien's Riders of Rohan (1991)
Jurassic War (1997)
Ka-50 Hokum (1995)
Kaiser Deluxe (1995)
King's Bounty 2 (1993)
Kingdom at War (1992)
King's Bounty (1990)
Kingdoms of Germany (1994)
KKND - Krush, Kill 'N' Destroy (1997)
Klondike Moon (1997)
Last Laibers (1996)
Empereur, L' (1991)
Line in the Sand, A (1992)
Lords of the Realm (1994)
Lords of the Realm II (1998)
Lunar Commander 2 (1995)
Lunar Command (1993)
Machiavelli the Prince (1995)
Mad News (1994)
Mad TV (1991)
Mad TV 2 (1996)
Maelstrom (1992)
Marco Polo (1995)
Master of Magic (1994)
Master of Orion (1993)
Master of Orion II - Battle at Antares (1996)
MAX - Mechanzied Assault and Exploration (1996)
Medieval Lords - Soldier Kings of Europe (1991)
Medieval Warriors (1991)
Merchant Colony (1991)
Merchant Prince (1993)
Millennia - Altered Destinies (1995)
Modem Wars (1988)
Mortal Coil - Adrenalin Intelligence (1995)
Motor City (1994)
Mutant Penguins (1996)
Nectaris (1995)
Nuclear War (1989)
Objection! (1992)
Ocean Trader (1995)
Offensive (1996)
Ogre (1986)
Oil Barons (1992)
On the Ball - World Cup Edition (1993)
Operation Combat II - By Land, Sea, and Air (1993)
Operation Combat (1990)
Operation Crusader (1994)
Orda - Severnyi Veter (1999)
Oregon Trail Deluxe, The (1992)
On the Ball (1993)
Overlord (1990)
Panic Soldier (1997)
PaybackTime 2 (1997)
PC-Bakterien! (1993)
Perfect General II (1994)
Perfect General, The (1991)
Pizza Tycoon (1994)
Planet X3 (2018)
Polanie (1996)
Populous (1989)
Populous II - Trials of the Olympian Gods (1993)
Ports of Call (1989)
Power Dolls (1994)
PowerMonger (1992)
Power Struggle (1988)
Police Quest SWAT (1995)
Prince (1989)
Race (1996)
Rags to Riches The Financial Market Simulation (1993)
Ramses (1994)
Realms (1991)
Red Ghost (1995)
Remember Tomorrow (1998)
Renegade Legion - Interceptor (1990)
Reunion (1994)
Revolution '76 (1989)
Rings of Medusa (1990)
Return of Medusa, The (1991)
Rules of Engagement (1991)
Rules of Engagement 2 (1993)
Sabre Team (1994)
Scenario - Theatre of War (1992)
Sea Rogue (1992)
Second Front - Germany Turns East (1990)
Serf City - Life is Feudal (1994)
Settlers II, The (Gold Edition) (1997)
Seven Cities of Gold (Commemorative Edition) (1993)
Shadow President (1993)
Siege (1992)
SimAnt - The Electronic Ant Colony (1991)
SimCity 2000 - CD Collection (1994)
SimCity Classic (1994)
SimCity Enhanced CD-ROM (1993)
SimEarth - The Living Planet (1990)
SimFarm (1993)
SimHealth (1994)
SimIsle - Missions in the Rainforest (1995)
SimLife (1992)
SimRefinery (1992)
Sid Meier's Civilization (1991)
Sid Meier's Colonization (1994)
Sid Meier's Railroad Tycoon Deluxe (1993)
Solidarnosc (1991)
Sorcerer Lord (1988)
Space Conquest - A Galactic Odyssey (1990)
Space Conflict (1993)
Space Hulk (1993)
Special Forces (1992)
Speculator (1993)
SpellCraft - Aspects of Valor (1992)
Spellcross (1997)
Spoils of War (1991)
SPWW2 (1999)
SSN-21 Seawolf (1994)
Star Command - Revolution (1997)
Star Control (1990)
Star Control II (1992)
Star Control 3 (1996)
Star General (1996)
Star Legions (1992)
Starlord (1993)
Star Reach (1994)
Steel Panthers (1995)
Steel Panthers II - Modern Battles (1996)
Steel Panthers III - Brigade Command (1939-1999) (1997)
Storm Master (1992)
Strike Squad (1993)
Star Lords (2001)
Stronghold (1993)
Star Trek (1981)
Subtrade - Return to Irata (1992)
Survival (1995)
Sword of the Samurai (1989)
Syndicate Plus (1994)
Syndicate Wars (1996)
Taso (1998)
Civil War, The - Master Players Edition (1996)
Tegel's Mercenaries (1992)
Terra Inc (1997)
Theatre of Death (1994)
Big Three, The (1989)
Global Dilemma, The - Guns or Butter (1990)
Horde, The (1994)
Lost Tribe, The (1995)
Theme Hospital (1997)
Theme Park (1994)
Patrician, The (1992)
Third Reich (1996)
Titans of Steel (1998)
Tom Landry Strategy Football Deluxe Edition (1993)
To Serve and to Protect (1994)
Total Control (1996)
Traders - The Intergalactic Trading Game (1992)
Transarctica (1993)
Transport Tycoon Deluxe (1995)
Twilight - 2000 (1991)
Ultimate Domain (1994)
Ultimate NFL Coaches Club Football (1994)
Ultimate Mission (1996)
Uncharted Waters (1990)
Uncharted Waters 2 - New Horizons (1995)
Unnatural Selection (1993)
Utopia - The Creation of a Nation (1991)
Vikings - Fields of Conquest - Kingdoms of England II (1993)
V for Victory - Commemorative Collection (1995)
Walls of Rome (1993)
Wargame Construction Set (1986)
Wargame Construction Set II - TANKS! (1994)
Warcraft II - Tides of Darkness (1995)
WarCraft - Orcs and Humans (1994)
War Diary (1997)
War Inc. (1997)
Warlords (1990)
Warlords II Deluxe (1995)
War of the Lance (1990)
War Planets - Age of Chaos (1997)
Waterworld (1997)
World Empire (1993)
When Two Worlds War (1993)
Wild West World (1992)
Wing Commander Armada (1994)
Wooden Ships and Iron Men (1996)
Stalingrad (1994)
X-COM - Apocalypse (1997)
X-COM - Terror from the Deep (1995)
X-COM - UFO Defense (1994)
Yitian Fengbao (1998)
Z (1996)
Q!Zone (1996)
Battle of the Eras (1995)
Battle Wrath (1997)
Battling Butlers (1996)
Battle of the Martial Arts (1994)
Big Bumps (2001)
Blood on the Floor (1997)
Brudal Baddle (1994)
Body Slam All-Star Wrestling (1995)
Budokan The Martial Spirit (1989)
Bushido (1983)
Sabor (1991)
Invincible Fighter (1994)
Creep Clash (1994)
Eye of Typhoon, The (1996)
Fighter (1993)
Fight'N'Jokes (1997)
Fighting Dragon (1996)
Fighter - Taklamakan Samak-pyeon (1997)
FX Fighter (1995)
Gladiator (1992)
Great Fighter, The (1993)
Jinyong Fighter (1995)
Kakoong (1997)
Low Blow (1990)
Metal and Lace - The Battle of the Robo Babes (1993)
Mutant DNA (1996)
One Must Fall 2097 (1994)
Overkill (1996)
Popeye 3 - WrestleCrazy (1995)
Pray for Death (1996)
Resurrection - Rise 2 (1996)
Real Fighter (1995)
Salchicha Mortal (1995)
Sango Fighter 2 (1995)
Sango Fighter (1993)
Savage Warriors (1995)
Street Count 2 Plus (1994)
Shaolin Campus Kings (1997)
Stormy World - The Three Kingdoms (1995)
Sumo Wrestling (1999)
Super Apocalypse Warriors (1997)
Super Kid (1997)
Theatre of Pain (1997)
Time Slaughter (1996)
Time Warriors (1997)
Tongue of the Fatman (1989)
Tough Guy (1994)
Unlimited Warriors (1996)
Violent Fighter (1992)
Violent Myth (1994)
Violent Vengeance - The Universe Hero (1995)
Xenophage - Alien BloodSport (1995)

================================================
FILE: MyeXoWin.sel
================================================
After Dark 3.2 (1995)
Vampire (1996)
Bermuda Syndrome (1996)
Burn -Cycle (1995)
Dagger's Rage (1995)
D-Generation (1994)
Freddi Fish and Luther's Water Worries (1996)
Fox Hunt (1996)
Hell Cab (1993)
Huygen's Disclosure (1996)
Ice and Fire (1995)
Indiana Jones and his Desktop Adventures (1996)
Iron Helix (1993)
Jack's Attic (1997)
Johnny Mnemonic (1995)
Maabus (1995)
Pirates - Captain's Quest (1997)
Quantum Gate (1993)
Savage - The Ultimate Quest for Survival (1996)
SkyBorg - Into the Vortex (1995)
Zombie Castle (1995)
9 - The Last Resort (1996)
Ace Ventura (1996)
Alice - Interactive Museum (1994)
Mission - Caduceus (1997)
Area D (1997)
Residents, The - Bad Day on the Midway (1995)
Bad Mojo (1996)
Between Earth And The End Of Time (1996)
Beyond the Wall of Stars (1992)
Beyond Time (1997)
Blown Away (1994)
Backpacker - The Lost Florence Gold Mine (1997)
Buichi Terasawa's Takeru - Letter of the Law (1996)
Chaos - A Fantasy Adventure Game (1996)
Cinema Volta (1994)
Congo - The Movie - Descent into Zinj (1995)
Connections (1995)
Cosmology of Kyoto (1995)
Critical Path (1993)
Dare to Dream Part One - In a Darkened Room (1993)
Dare to Dream 2 (1993)
Dare to Dream 3 (1993)
Deja Vu I and II - The Casebooks of Ace Harding (1992)
Devo Presents - Adventures of the Smart Patrol (1996)
Phantastische Reise nach Terra-Gon, Die (1997)
Dracula in London (1993)
Dark Seed II (1995)
Day The World Broke, The (1998)
Dust - A Tale of the Wired West (1995)
Eastern Mind - The Lost Souls of Tong Nou (1995)
EcoQuest 2 - Lost Secret of the Rainforest (1993)
Entombed (1994)
Evocation 2 - The Dream (1994)
Evocation Oltre il Sogno (1995)
Fall of the House of Usher, The (1994)
Fate of the Starlords (1994)
Who's Fat Lou (1996)
Foul Play - Mystery at Awkward Manor (1998)
Four-Sight (1995)
Frankenstein - Through the Eyes of the Monster (1995)
Residents, The - Freak Show (1994)
Gadget - Invention, Travel and Adventure (1995)
Gahan Wilson's The Ultimate Haunted House (1994)
Gord@k (1997)
Grackon's Curse (1995)
Hard Evidence - The Marilyn Monroe Files (1995)
In the 1st Degree (1995)
Isis (1994)
Journeyman Project, The (1993)
Journeyman Project 2, The - Buried in Time (1995)
Journeyman Project, The - Turbo! (1994)
Jan Pienkowski Haunted House (1995)
Jungle Book (1996)
Karma - Curse of the 12 Caves (1995)
Koala Lumpur - Journey to the Edge (1997)
L-Zone (1993)
Louis Cat Orze - The Mystery Of The Queen's Necklace (1995)
Majestic Part 1 - Alien Encounter (1995)
Milo (1996)
Mirage (1995)
Mission 9 (1995)
Monty Python and the Quest for the Holy Grail (1996)
Mummy - Tomb of the Pharaoh (1996)
Myst (1993)
Noir - A Shadowy Thriller (1996)
Panic in the Park (1995)
Pilgrim - Faith as a Weapon (1998)
Plot Of The Cyberheads (1995)
Philip Marlowe Private Eye (1996)
Pyst (1997)
Queensryche's Promised Land (1996)
Rave Shuttle - The Cosmic Challenge (1997)
Ray Bradbury's The Martian Chronicles Adventure Game (1996)
Residents, The - Gingerbread Man (1994)
Robot City (1995)
Scrutiny In The Great Round (1995)
Secrets of the Luxor (1996)
SFPD Homicide - Case File - The Body in the Bay (1995)
Shadowgate (1993)
Shine (1996)
Shivers (1995)
Shivers Two - Harvest of Souls (1997)
Sinkha - The 3D Multimedia Novel (1994)
Soft Kill (1993)
Spaceship Warlock (1994)
SPQR - The Empire's Darkest Hour (1997)
Star Warped (1997)
Star Trek - Klingon (1996)
Super Spy (1996)
Terror T.R.A.X. - Track of the Vampire (1995)
Bizarre Adventures of Woodruff and the Schnibble, The (1995)
Cassandra Galleries, The (1997)
C.H.A.O.S. Continuum, The (1994)
Crystal Skull, The (1996)
Daedalus Encounter, The (1995)
Dark Eye, The (1995)
Improv Presents, The - Don't Quit Your Day Job (1996)
Magic Death, The - Virtual Murder 2 (1993)
Manhole, The - CD-ROM Masterpiece Edition (1994)
Mystery at Greveholm, The (1997)
Palace of Deceit, The - The Dragon's Plight (1992)
Psychotron, The (1994)
Vortex, The - Quantum Gate II (1994)
Timelapse (1996)
Titanic - Adventure Out of Time (1996)
Titanic - A Mysterious Undersea Adventure (1998)
Total Distortion (1995)
Treasure Quest (1996)
Umbra Conspiracy, The (1995)
Uninvited (1993)
Urban Runner (1996)
VooDoo Kid (1997)
Virtual Nightclub - A Game About Time (1997)
Weird - Truth is Stranger than Fiction (1997)
Welcome to the Future (1995)
WinAdv (1992)
Who Killed Brett Penance - The Environmental Surfer (1994)
Who Killed Sam Rupert - Virtual Murder 1 (1993)
Who Killed Taylor French - The Case of the Undressed Reporter (1994)
Yellow Brick Road (1996)
Zeddas - Servant of Sheol (1995)
Skull Cracker (1996)
Star Merc (1997)
Suit, The (1996)
Arcade America (1996)
Breakout 3000 (1999)
Catz - Your Computer Petz (1996)
Creatures (1997)
Diamonds 3D (1996)
Dogz - Your Computer Pet (1995)
Duck City (1996)
Glider 4.0 for Windows (1994)
Grossology (1997)
JezzBall (1992)
Jumanji (1997)
Monty Python's Complete Waste of Time (1994)
Oddballz (1996)
SimTunes (1996)
Stay Tooned! (1996)
Take Your Best Shot (1995)
X-Fools, The - The Spoof is out There (1997)
Wallace and Gromit Fun Pack (1996)
You Don't Know Jack (1995)
You Don't Know Jack - Volume 2 (1996)
You Don't Know Jack - Volume 3 (1997)
You Don't Know Jack Movies (1996)
You Don't Know Jack Sports (1996)
You Don't Know Jack - Television (1997)
You Don't Know Jack XL (X-Tra Large)(1996)
3-D Ultra Pinball (1995)
3-D Ultra Pinball - Creep Night (1996)
3-D Ultra Pinball - The Lost Continent (1997)
Crystal Caliburn (1994)
Full Tilt! 2 Pinball (1996)
Full Tilt! Pinball (1996)
Loony Labyrinth (1995)
Pinball Builder - A Construction Kit for Windows (1996)
Take a Break! Pinball (1993)
Pharoah's Curse (1998)
Atomic Chill (1996)
Bug! (1996)
Power Rangers Zeo Versus The Machine Empire (1996)
Sonic KNP Collection (1999)
Pagemaster, The (1994)
We are Angels (1997)
Zombie Wars (1996)
Amazon Skulls (1993)
Off the Tracks (1998)
Anyone for Cards (1994)
Atmosfear - The Third Dimension (1995)
Brainiacs (1995)
BreakThru! (1994)
Chip's Challenge (1991)
ClockWerx (1995)
Cribbage Master (1992)
Dr. Drago's Madcap Chase (1995)
MicroProse Entertainment Pack Vol #1 - Dr Floyd's Desktop Toys (1993)
Econ's Arena (1994)
Endorfun (1995)
FreeCell Plus (1996)
Gearheads (1996)
Hero Defiant (1998)
Hodj 'n' Podj (1995)
Hoyle Bridge (1996)
Hoyle Battling Ships And War (1998)
Hoyle Childrens Collection (1996)
Hoyle Poker (1997)
Hoyle Solitaire (1996)
Icebreaker (1996)
Jewels II - The Ultimate Challenge (1998)
Jewels of the Oracle (1995)
Kyodai (1997)
Labyrinth of Crete (1995)
Lights Out 3D (1996)
Living Puzzles - Triazzle (1995)
Lunacy for Windows (1995)
Marble Drop (1997)
Masque Solitaire Antics (1994)
Merlin's Apprentice (1995)
Mines (1990)
Minesweeper (1992)
Microsoft Entertainment Pack for Windows (1990)
Microsoft Entertainment Pack 2 (1991)
Microsoft Entertainment Pack 3 (1991)
Microsoft Entertainment Pack 4 (1992)
Microsoft Solitaire (1990)
Nanotank (1993)
Nelda Nockbladder's Anatomy Lesson (1997)
Pajama Sam's SockWorks (1997)
Smart Games Challenge #1 (1996)
Smart Games Puzzle Challenge 2 (1997)
Smart Games Puzzle Challenge 3 (1998)
Smart Games Stratajams (1997)
Smart Games Word Puzzles #1 (1996)
Shanghai II - Dragon's Eye (1994)
Shanghai - Great Moments (1995)
Skat 3000 (1999)
Solitaire Deluxe (1996)
Solitaire's Journey (1992)
Strategy Heads (1997)
Symantec Game Pack (1991)
Taipei (1990)
Terrace (1994)
Tetris Gold (1993)
'Jongg CD!, The (1997)
THiNK-X (1996)
Incredible Toon Machine, The (1994)
Ultimate Yahtzee (1996)
Virtual Chess (1995)
Al Unser, Jr. Arcade Racing (1995)
Betrayal in Antara (1997)
Blades of Exile (1999)
Castle of the Winds (1993)
Exile - Escape from the Pit (1995)
Exile II - Crystal Souls (1996)
Exile III - Ruined World (1996)
Mordor - The Depths of Dejenol (1995)
Wizardry Gold (1996)
World of Aden - Entomorph - Plague of the Darkfall (1995)
AI v2 (1998)
Babylon 5 - Shadow Wars (1997)
Fury3 (1995)
Jump Raven (1994)
Lunicus (1994)
Operation - Inner Space (1994)
Quatra Command (1994)
Triple Threat - An Arcade Adventure (1995)
1942 - The Pacific Air War Gold (1994)
Achtung Spitfire (1997)
Age of Sail (1996)
Air Havoc Controller (1994)
American Civil War - From Sumter to Appomattox (1996)
Battleground 2 - Gettysburg (1996)
Battleground 3 - Waterloo (1996)
Battleground 4 - Shiloh (1996)
Battleground 5 - Antietam (1996)
Battleground 6 - Napoleon in Russia (1997)
Battleground 7 - Bull Run (1997)
Battleground 8 - Prelude to Waterloo (1997)
Battleground - Ardennes (1995)
EarthSiege 2 (1996)
Flight Commander 2 (1994)
Harpoon Classic (1995)
Silent Thunder - A-10 Tank Killer II (1996)
Last Dynasty, The (1995)
Tower (1995)
Tracon for Windows (1993)
Wings - Saigon to Persian Gulf (1998)
WinTrek (1992)
WinTrek 2.0 (1992)
3-D Ultra Minigolf (1997)
AFL Finals Fever (1996)
Backyard Baseball (1997)
Backyard Soccer (1998)
Fisherman's Delight (1996)
Front Page Sports - Trophy Bass 2 (1996)
Front Page Sports - Trophy Bass 2 - Northern Lakes (1997)
Front Page Sports - Trophy Rivers (1997)
Greg Norman Ultimate Challenge Golf (1996)
Microsoft Golf (1992)
Microsoft Golf 2.0 (1995)
Office Darts 301 (1994)
Pool Champion (1995)
SkiFree (1991)
Sportsman's Paradise (1998)
Disney's Timon and Pumbaa's Jungle Games (1995)
Trophy Bass (1995)
Trophy Bass 2 Deluxe (1998)
Twisted Mini Golf (1995)
Allied General (1995)
Battle Isle 2220 - Shadow of the Emperor (1996)
Capitalist Pig (1992)
Sid Meier's Civilization II - The Collector's Edition (1996)
Sid Meier's Civilization (1993)
Sid Meier's CivNet (1995)
Deadlock - Planetary Conquest (1996)
Drain Storm (1997)
Enemy Nations (1996)
Fields of Battle (1995)
Gazillionaire Deluxe (1997)
Grand Prix Manager (1995)
Grand Prix Manager 2 (1996)
Grant - Lee - Sherman - Civil War 2 - Generals (1997)
High Command (1992)
History of the World (1997)
Holiday Island (1996)
It's a Funny Old Game (1996)
Legions (1994)
Guignols de l'Info, Les - Le Cauchemar de PPD (1996)
Guignols De L'Info, Les...Le Jeu ! (1995)
Millennium Auction (1994)
Metal Marines (1994)
Metal Marines Master Edition (1995)
Oregon Trail II (1995)
Oregon Trail II - 25th Anniversary Limited Edition (1996)
Oregon Trail, The (1993)
Outpost (1994)
Over the Reich (1996)
Powerhouse (1995)
Power - The Game (1995)
Power Politics (1992)
Profitania (1998)
Proliferation (1995)
P.T.O. - Pacific Theater of Operations II (1996)
Reelect JFK (1994)
Computer Edition of Risk, The - The World Conquest Game (1991)
Robert E Lee - Civil War General (1996)
RoboSport (1991)
Romance of the Three Kingdoms IV - Wall of Fire (1996)
SimAnt - The Electronic Ant Colony (1991)
SimCity 2000 - CD Collection (1993)
SimCity (1992)
SimEarth - The Living Planet (1990)
SimFarm (1996)
SimLife (1992)
SimPark (1996)
SimTower - The Vertical Empire (1995)
SimTown (1995)
Slay (1995)
Solitaire Twin Pack (1995)
Space Bucks (1996)
Spaceward Ho! (1992)
Stars! (1996)
Big One, The (1994)
Chessmaster 4000 Turbo, The (1993)
Rise and Rule of Ancient Empires, The (1996)
This Means War! (1996)
Total Mayhem (1996)
Victory Or Defeat (1995)
Vikings - The Strategy of Ultimate Conquest (1996)
Warhammer - Shadow of the Horned Rat (1996)
Warpath (1994)
World Empire II (1992)
World Empire IV (1996)
World Empire III (1994)
Zapitalism (1996)
Battle Beast (1995)
CatFight - The Ultimate Female Fighting Game (1996)
Expect No Mercy (1995)

================================================
FILE: README.md
================================================
[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/donate?hosted_button_id=LEAH843NKNG72)

# ExoConverter

A custom converter of launchbox-based retrogaming collections  : 
 - C64 Dreams 
 - eXoDOS v6
 - eXoDOS v6 lite
 - eXoWin3x v2   
 - eXo Apple IIGS    
 - eXo ScummVM (atrociously broken conversion at the moment, I need some testers knowing ScummVM well)

to several EmulationStation and/or Linux based distributions format:
 - Recalbox
 - Batocera
 - Retrobat
 - Retropie
 - Emuelec  
 - OpenDingux (both SimpleMenu / Esoteric flavours) with mapping for RG350
 - MiSTer

## The Tool

The aim of this tool is to convert any selection of games of the supported collection to emulationstation / basic dosbox (or lr-dosbox-pure) for linux format, so that in can be used on Retropie on any other like minded distribution.
As the project evolved it now covers different collections, distributions and/or formats. 

The conversion should cover the following :
 - conversion of the game to a correct format, including dosbox.cfg and dosbox.bat
 - scrapping of the game metadata, including front boxart, metada and manual
 - when possible, custom or generic controller configuration

Your collections will remain untouched by the conversion, as all relevant files are copied in the output folder during the process.

The tool is now fully compatible with Windows and Linux, Mac OS should work although some graphic issues may be present
It should be used on a separate computer, not on the system you are targetting.

## State of development

Fully supported (but not always tested) distributions are Batocera, Recalbox, Retropie, Emuelec, Retrobat, MiSTeR and OpenDingux.

MiSTer compatibility is still beeing worked on at the moment but is already at a pretty advanced stage, espeically for DOS games.


## ExoDOS & ExoWin3x

[Retro-Exo](https://www.retro-exo.com)

eXoDOS and eXoWin3x collections are collections of DOS and Windows 3.1 games and in my opinion the best ones as it includes full, correct configuration for all games.  
It is based on Launchbox and Windows only though

eXoDOS: full support for v6 version, both full and lite, v5 support has been dropped  
eXoWin3x: full support for v2

If you use eXoDOS Lite version, games you wish to convert will be downloaded on the fly if needed, using direct download from The Eye or download through torrent (much slower)

The conversion now works fine with dosbox-pure, although it doesn't generate zipped games and it might be wise to disable auto mapping.
In the libretro version this can be done by simply changing the focus mode by clicking Scroll Lock on you keyboard (or inside retroarch menu)

Before using this tool, don't forget to install the collections (eXoDOS full and lite V6 versions, or eXoWin3x v2) with their respective `setup.bat`

They should be installed separately and not combined/merged, or the tool will not work.

### dosbox-pure zip compatibility

To use dosbox-pure-zip you might need to activate this parameter in retroarch: `Core Options / Emulation / Loading of dosbox.conf` to enable the reading of dosbox.conf configuration from inside game zips.

At the moment, game using the mount dosbox command are not compatible with dosbox-pure, they will in a next release of dosbox-pure, [see this issue](https://github.com/schellingb/dosbox-pure/issues/528)


## C64 Dreams

[C64 Dreams](https://forums.launchbox-app.com/topic/49324-c64-dreams-massive-curated-c64-collection/)

C64 Dreams is a carefully crafted collection of C64 Games, based on Launchbox and Windows only too.

C64 Dreams: support for v0.60 (custom mapping files not supported yet)

Support is prelimilary, but it's fully functional

Mostly missing is the conversion of keyboard to joystick mapping files (which I hope to implement later)

UI is not fully adapted yet, most extra parameters will do nothing foe this collection generation 

## Anti-virus false positives

Some antiviruses (like Windows Defender) might detect the released exe version as false postive.  
This is due to the exe python packager `pyInstaller` and it's safe to exclude the tool from virus detection 

### Linux/MacOS installation and execution :
- eXoDOSConverter requires that python3 is installed (it's developed on 3.8)
- first install Tkinter for python3 if needed : `sudo apt-get install python3-tk`
- you might need to install pillow : `pip install pillow`
- directly download sources or clone the repo with :
 ```
 sudo apt install git # optional, only if git is not installed
 git clone https://github.com/Voljega/ExoDOSConverter
 ```
- give execution rights to `ExoDOSConverter.sh` :
```
cd ExoDOSConverter            # change to ExoDOSConverter directory
chmod u+x ExoDOSConverter.sh  # give execution perms (already done in git-cloned version)
```
- If you didn't install the collection beforehand on Windows or with wine by executing `setup.bat`, you'll need to do that or  alternatively:
>Unzip `./Content/XODOSMetadata.zip` to the home dir of the collection, this should create `./Images` and `./xml` folder

>Unzip `./Content/!DOSmetadata.zip` to the home dir of the collection, this should create a `./eXo/eXoDOS/!dos folder`

- launch with `./ExoDOSConverter.sh` or `./ExoDOSConverter`

### Windows installation and execution :

Either use the latest [release](https://github.com/Voljega/ExoDOSConverter/releases) or you can build your own version using one of these two options :
- @flynnsbit [tutorial video](https://www.youtube.com/watch?v=wW2yhrw9Jp0&lc=UgzkMKahMRjhABX4FhN4AaABAg)
- read the `build.txt` to build your own version or even simplier, execute `build.bat`

Before using the tool, install the collection by executing `setup.bat`

## Expert mode

see [wiki page](https://github.com/Voljega/ExoDOSConverter/wiki/Expert-mode)

### MiSTeR

see [wiki page](https://github.com/Voljega/ExoDOSConverter/wiki/MiSTeR-AO486-support)

## RG350

see [wiki page](https://github.com/Voljega/ExoDOSConverter/wiki/RG350-support)

## Known issues

A few games in both collections have some conversion issues with this tool.  
For eXoDOS v6 issues (not updated for v6), see [wiki page](https://github.com/Voljega/ExoDOSConverter/wiki/Known-issues:-eXoDOS-v5)  
For eXoWin3x v2 issues, see [wiki page](https://github.com/Voljega/ExoDOSConverter/wiki/Known-issues:-eXoWin3x-v2)  
For C64 Dreams v0.60 issues, see [wiki page](https://github.com/Voljega/ExoDOSConverter/wiki/Known-Issues:-C64-Dreams)  
  
  
### Licences, shoutouts

eXoConverter uses python code from [MobyGamer's Total DOS Launcher](https://github.com/MobyGamer/total-dos-launcher)

[![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/donate?hosted_button_id=LEAH843NKNG72)


================================================
FILE: TDLindexer.py
================================================
"""
The TDL indexer discovers all of the files in/under the provided source
directory and builds a list of all of the filenames.  It then uses this
list to perform the following:
- Derive DOS-friendly filenames from the discovered files
- Copy the discovered files to the destination directory provided, using the DOS-friendly filenames as the destination filenames
- Build indexes that allow the DOS TDL to work faster.

For more information on the index file formats this tool generates, consult
index_formats.txt.

This is my very first Python project.  All mockery and jeers can be
directed to trixter@oldskool.org, although it would be more helpful
to the project if you could fix my novice coding and make this program better.

"""
import sys
import os
import shutil
import struct
import hashlib
import re
from zipfile import ZipFile


def scantree_files(path):
    # Recursively yield DirEntry objects for given directory
    for entry in os.scandir(path):
        if entry.is_dir(follow_symlinks=False):
            yield from scantree_files(entry.path)
        else:
            yield entry


# Cleans filenames for safer matching
def clean_name(name):
    # Replace any number of spaces with _
    name = re.sub(r'\s+', '_', name)
    # Allow letters, numbers, and meaningful punctuation
    return re.sub(r'[^a-zA-Z0-9_!$]', '', name)


def index(outputDir, scriptDir, fullnameToGameDir, isDebug, preExtractGames, logger):
    sourceDir = os.path.join(outputDir, 'games')
    destDir = os.path.join(outputDir, 'tdlprocessed')
    gamesDataTempDir = os.path.join(outputDir, 'games-data')
    distroDir = os.path.join(scriptDir, 'data', 'mister', 'distro')
    filesIDX = distroDir + '/FILES.IDX'
    titlesIDX = distroDir + '/TITLES.IDX'
    filesDir = destDir + '/files/'

    if not os.path.exists(distroDir):
        with ZipFile(os.path.join(scriptDir, 'data', 'mister', 'distro.zip'), 'r') as zipFile:
            # Extract distro (compressed to preserve file handlings)
            logger.log("  unzipping distro.zip")
            zipFile.extractall(path=os.path.join(scriptDir, 'data', 'mister'))

    sourceFiles = []  # Source filenames with full paths and extensions (sorted)
    baseFiles = []  # Source filenames with extensions (no paths)
    titles = []  # Source filenames without paths or extensions
    DOSnames = []  # titles() converted to 8.3-friendly DOS names

    foundfiles = list(scantree_files(sourceDir))

    if isDebug:
        logger.log("  Indexing %i files" % len(foundfiles))

    if len(foundfiles) > 32767:
        logger.log("  Fatal: Current design of DOS TDL does not support more than 32767 files.", logger.ERROR)
        return

    if len(foundfiles) > 16383:
        logger.log('  Warning: This many files may cause the DOS TDL to operate slower than normal\n'
                   '  due to the titles index not being able to be cached in memory.  TDL will still\n'
                   '  run, but might require a very fast I/O device for acceptable speed.', logger.WARNING)

    # Sort discovered files by their filename, case insensitive.  Additional
    # sort criteria may be added in the future, but I lack the skills to do so,
    # someone please help me!  Ideally I would like add an option to sort
    # on something that can be regex'd, like (1983) or [Adventure].

    sfoundfiles = sorted(foundfiles, key=lambda dirent: dirent.name.lower())

    for entry in sfoundfiles:
        sourceFiles.append(entry.path)
        fname = entry.name
        baseFiles.append(fname)
        tmptitle = fname.rsplit(sep='.', maxsplit=1)[0]
        tmptitle = tmptitle.encode('ascii', 'backslashreplace').decode()
        titles.append(tmptitle)

    # if isDebug:
    #     logger.log("  First 5 files found were:")
    #     logger.log(baseFiles[0:5] + "\n")
    #     logger.log("  First 5 titles found were:")
    #     logger.log(titles[0:5] + "\n")
    #     # logger.log ("Last 5 files found were:")
    #     # logger.log(baseFiles[-5:],"\n")
    #     # logger.log ("Last 5 titles found were:")
    #     # logger.log(titles[-5:],"\n")

    logger.log("  Converting to DOS-friendly 8.3 filenames")
    dosNameToLongname = dict()
    for idx, longname in enumerate(baseFiles):
        base_name = longname.replace('.zip', '')
        if base_name.startswith('('):
            # For 'custom' files starting with -, we just remove all the bits of the filename that aren't
            # valid DOS chars. We assume there won't be any conflicts here.
            cleaned_name = '(' + re.sub(r'[^a-zA-Z0-9]', '', base_name).upper()
            if len(cleaned_name) > 8:
                cleaned_name = cleaned_name[0:8]
            DOSnames.append(f"{cleaned_name}.ZIP")
            dosNameToLongname[f"{cleaned_name}.ZIP"] = longname
        else:
            if base_name not in fullnameToGameDir:
                logger.log("    Unknown game %s no corresponding shortname found" % longname, logger.ERROR)
            else:
                dname = fullnameToGameDir[base_name].upper()
                DOSnames.append(f"{dname}.ZIP")
                dosNameToLongname[f"{dname}.ZIP"] = longname

        # DOSnames.append(dname)
        # dosNameToLongname[dname] = longname

    # if isDebug:
    #     logger.log("  first 5 DOS-friendly filenames are:")
    #     logger.log("  " + DOSnames[0:5] + "\n")
    #     logger.log("  Last 5 DOS-friendly filenames are:")
    #     logger.log(" " + DOSnames[-5:] + "\n")

    # refer to index_formats.txt for info on what is being generated for all the index files, and why
    logger.log("  Generating files index...")
    f = open(filesIDX, 'wb')
    f.write(struct.pack('<H', len(DOSnames)))
    for idx, fname in enumerate(DOSnames):
        f.write(struct.pack('<H', idx))
        f.write(str.encode(fname[0:12].ljust(12, "\x00")))
    f.close()

    # Need to generate this index:
    """
    Title Index format (from index_formats.txt):
    
            numEntries:     16-bit word of how many titles we have available
    REPEAT  (This structure repeats numEntries times)
            titleOfs:       32-bit word of offset where each variable-length
                            record starts
    END
    REPEAT  (This structure repeats numEntries times)
            titleID:        16-bit word
            titleHash:      16 bytes of the MD5 hash of the title string
        titleLen:	1 byte of length of title string
        titleStr:	titleLen characters of title string
    END
    """
    # This index generation method is fugly -- avert thine eyes
    # There is likely a very elegant way to do this using tuples or something
    # but this is my first python program so I'll figure it out later

    logger.log("  Generating titles index...")
    f = open(titlesIDX, 'wb')
    f.write(struct.pack('<H', len(titles)))
    # build list of offsets
    toffsets = []
    curofs = 2 + (len(titles) * 4)  # real starting offset is past the offset structure itself
    for tlen in titles:
        toffsets.append(curofs)
        curofs = curofs + (2 + 16 + 1 + len(tlen))
    # dump offsets to index file
    for tmpofs in toffsets:
        f.write(struct.pack('<L', tmpofs))
    for idx, name in enumerate(titles):
        # write titleID
        f.write(struct.pack('<H', idx))
        # write titleHash
        thash = hashlib.md5(name.encode()).digest()
        f.write(thash)
        # write titleLen
        f.write(struct.pack('B', len(name)))
        # write title itself
        f.write(name.encode())
    f.close()

    # Create mapping table so the user can weed things out and try again.
    # For example, it would be a good idea to not put any "porn" or "adult"
    # games on a system at a show/convention or out on the museum floor.

    f = open("name_mapping.txt", 'w', newline='\r\n')
    for idx, shortn in enumerate(DOSnames):
        f.write(shortn + ' ;' + titles[idx] + '\n')
    f.close()

    """
    Copy everything over to the destination.
    Also copy the TDL itself, the index files, tools needed, etc.
    """
    if os.path.exists(filesDir):
        logger.log(
            '  Output directory %s already exists.\nPlease specify a non-existent directory for the destination.' % destDir)
        sys.exit(1)
    logger.log("  Copying games zip from " + sourceDir + " to " + destDir + ", this might take a while...")
    shutil.copytree(distroDir, destDir)
    if not os.path.exists(filesDir):
        os.makedirs(filesDir)

    # Copy source:longfilenames to destination:shortfilenames
    for i in range(len(DOSnames)):
        if isDebug:
            logger.log("    " + DOSnames[i])
        shutil.copy(sourceFiles[i], filesDir + DOSnames[i])

    logger.log("  All games indexed")

    # Create sub games dir
    os.mkdir(os.path.join(destDir, 'games'))

    # Handle pre extract case
    if preExtractGames:
        # Move content of games/game.pc dir to destDir/games
        for dosZipName in dosNameToLongname:
            if dosZipName not in ['(MANUALL.ZIP', '(UTILITI.ZIP']:
                longCleanName = dosNameToLongname[dosZipName]
                gameDataDir = os.path.join(gamesDataTempDir, os.path.splitext(longCleanName)[0])
                if os.path.exists(gameDataDir):
                    # preExtractFolder = os.path.join(destDir, 'games', os.path.splitext(dosZipName)[0])
                    shutil.move(gameDataDir, os.path.join(destDir, 'games', os.path.splitext(dosZipName)[0]))
                else:
                    logger.log('  Pre-extracted game data no found for %s / %s'
                               % (dosZipName, dosNameToLongname[dosZipName]), logger.ERROR)
            else:
                os.mkdir(os.path.join(destDir, 'games', os.path.splitext(dosZipName)[0]))
                with ZipFile(os.path.join(destDir, 'files', dosZipName), 'r') as zipFile:
                    zipFile.extractall(path=os.path.join(destDir, 'games', os.path.splitext(dosZipName)[0]))

        # delete game-data
        shutil.rmtree(gamesDataTempDir)


================================================
FILE: appleiigsconverter.py
================================================
import os
import shutil
import util
import sys
import traceback
from metadatahandler import MetadataHandler
from zipfile import ZipFile


# noinspection PyBroadException,PyTypeChecker
class AppleIIGSConverter:

    def __init__(self, games, cache, scriptDir, collectionVersion, collectionDir, outputDir, conversionType, useLongFolderNames,
                 useGenreSubFolders, conversionConf, fullnameToGameDir, postProcess, logger):
        self.games = games
        self.cache = cache
        self.scriptDir = scriptDir
        self.collectionVersion = collectionVersion
        self.exoCollectionDir = collectionDir
        self.logger = logger
        self.collectionGamesDir = util.getCollectionGamesDir(collectionDir, collectionVersion)
        self.collectionGamesConfDir = util.getCollectionGamesConfDir(collectionDir, collectionVersion)
        self.outputDir = outputDir
        self.conversionType = conversionType
        self.useLongFolderNames = useLongFolderNames
        self.useGenreSubFolders = useGenreSubFolders
        self.conversionConf = conversionConf
        self.metadataHandler = MetadataHandler(scriptDir, collectionDir, collectionVersion, self.cache, self.logger)
        self.fullnameToGameDir = fullnameToGameDir
        self.postProcess = postProcess

    # Loops on all games to convert them
    def convertGames(self):
        # Pre-checks
        if len(self.games) == 0:
            self.postProcess()
            return
        if self.conversionType == util.mister and os.path.exists(os.path.join(self.outputDir, 'TDL_VHD')):
            self.logger.log(
                "\nFound a previous MiSTeR conversion in output folder, please move or delete it before processing with a new one\n",
                self.logger.ERROR)
            self.postProcess()
            return

        self.logger.log("Loading metadatas...")
        self.metadataHandler.parseXmlMetadata()
        if not os.path.exists(os.path.join(self.outputDir, 'downloaded_images')):
            os.mkdir(os.path.join(self.outputDir, 'downloaded_images'))
        if not os.path.exists(os.path.join(self.outputDir, 'manuals')):
            os.mkdir(os.path.join(self.outputDir, 'manuals'))

        self.logger.log('\n')

        gamelist = self.metadataHandler.initXml(self.outputDir)

        count = 1
        total = len(self.games)
        errors = dict()

        for game in self.games:
            try:
                self.__convertGame__(game, gamelist, total, count)
            except:
                self.logger.log('  Error %s while converting game %s\n\n' % (sys.exc_info()[0], game),
                                self.logger.ERROR)
                excInfo = traceback.format_exc()
                errors[game] = excInfo

            count = count + 1

        self.metadataHandler.writeXml(self.outputDir, gamelist)

        # self.logger.log('\n<--------- Post-conversion --------->')
        # self.__postConversion__()

        self.logger.log('\n<--------- Finished Process --------->\n')

        if len(errors.keys()) > 0:
            self.logger.log('\n<--------- Errors rundown --------->', self.logger.ERROR)
            self.logger.log('%i errors were found during process' % len(errors.keys()), self.logger.ERROR)
            self.logger.log('See error log in your outputDir for more info\n', self.logger.ERROR)
            logFile = open(os.path.join(self.outputDir, 'error_log.txt'), 'w')
            for key in list(errors.keys()):
                logFile.write("Found error when processing %s" % key + " :\n")
                logFile.write(errors.get(key))
                logFile.write("\n")
            logFile.close()
        elif os.path.exists(os.path.join(self.outputDir, 'error_log.txt')):
            # Delete log from previous runs
            os.remove(os.path.join(self.outputDir, 'error_log.txt'))

        self.postProcess()

    # Full conversion for a given game
    def __convertGame__(self, game, gamelist, totalSize, count):
        gameMetadata = self.metadataHandler.metadatas.get(game.lower())
        genre = self.metadataHandler.buildGenre(gameMetadata, self.metadataHandler.fixGenres)
        self.logger.log(">>> %i/%i >>> %s: starting conversion" % (count, totalSize, game))
        [outputGameFile, hiddenOutputGameFiles] = self.__copyGameDataToOutputDir__(game, genre)
        self.metadataHandler.processGame(game, gamelist, genre, self.outputDir, self.useLongFolderNames,
                                         self.useGenreSubFolders, self.conversionType, self.collectionVersion, False, outputGameFile, None)

        for hiddenOutputGameFiles in hiddenOutputGameFiles:
            self.metadataHandler.writeHiddenGamelistEntry(gamelist, hiddenOutputGameFiles, genre, self.useGenreSubFolders)

        self.logger.log("")

    # Copy game data from collection to output dir
    def __copyGameDataToOutputDir__(self, game, genre):
        outputDir = self.getLocalGameOutputDir(genre)
        if not os.path.exists(outputDir):
            os.makedirs(outputDir)

        bats = [os.path.splitext(filename)[0] for filename in
                os.listdir(os.path.join(self.collectionGamesConfDir, game)) if
                os.path.splitext(filename)[-1].lower() == '.bat' and not os.path.splitext(filename)[
                                                                             0].lower() == 'install'
                and not os.path.splitext(filename)[0].lower() == 'exception']
        gameZip = bats[0] + '.zip'
        # Unzip game
        if gameZip is not None:
            gameZipPath = os.path.join(
                os.path.join(util.getCollectionGamesDir(self.exoCollectionDir, self.collectionVersion)), gameZip)

            # ensure gameZip not 0 bytes, this will trigger a download if it is.
            try:
                if not os.path.getsize(gameZipPath):
                    self.logger.log("  <WARNING>" + gameZipPath + " is 0 bytes. Removing.", self.logger.WARNING)
                    os.remove(gameZipPath)
            except OSError as error:
                pass

            with ZipFile(gameZipPath, 'r') as zipFile:
                # Extract all the contents of zip file in current directory
                self.logger.log("  unzipping " + gameZipPath)
                zipFile.extractall(path=outputDir)

        else:
            self.logger.log(
                "  ERROR while trying to find zip file for " + os.path.join(self.collectionGamesConfDir, game),
                self.logger.ERROR)
        self.logger.log("  unzipped")

        # TODO handle config.txt file and/or the one in util/configs.zip

        extractedGamePath = os.path.join(outputDir, game)
        extractedGameFiles = [file for file in os.listdir(extractedGamePath) if os.path.splitext(file)[-1] in ['.po', '.2mg', '.hdv']]

        if len(extractedGameFiles) == 1:
            gamefile = game + os.path.splitext(extractedGameFiles[0])[-1]
            shutil.move(os.path.join(extractedGamePath, extractedGameFiles[0]), os.path.join(outputDir, gamefile))
            shutil.rmtree(extractedGamePath)
            return [gamefile, []]
        else:
            self.logger.log('  <WARNING> several game files found while converting game %s\n\n' % game, self.logger.WARNING)
            maingamefile = None
            othergamefiles = []
            for extractedGameFile in extractedGameFiles:
                gamefile = game + '(' + ''.join(os.path.splitext(extractedGameFile)[:-1]) + ')' + os.path.splitext(extractedGameFile)[-1]
                shutil.move(os.path.join(extractedGamePath, extractedGameFile), os.path.join(outputDir, gamefile))
                if 'Game' in extractedGameFile:
                    maingamefile = gamefile
                else:
                    othergamefiles.append(gamefile)
            shutil.rmtree(extractedGamePath)
            if maingamefile is not None:
                return [maingamefile, othergamefiles]
            else:
                return [othergamefiles[0], othergamefiles[1:]]

    # Returns local parent output dir of the generated game
    def getLocalGameOutputDir(self, genre):
        return os.path.join(self.outputDir, genre) if self.useGenreSubFolders else self.outputDir


================================================
FILE: build.bat
================================================
@echo off
set /p "version=Version number: "
echo .
echo Clean build directory content
rd /s /q .\build
if exist .\build rd /s /q .\build
if not exist .\build mkdir .\build
cd build
echo Copy build files
copy ..\*.py .
copy ..\*.ico .
echo .
echo .
echo Build with pyinstaller
echo .
pyinstaller --icon=exodosicon.ico --clean -F main.py
echo .
echo Pyinstaller has ended its work
echo .
echo Clean build directory
del *.py
move *.ico .\dist
del *.spec
rd /s /q .\build
if exist .\build rd /s /q .\build
echo Moving conf files
if not exist .\dist\data mkdir .\dist\data
copy ..\data\*.* .\dist\data
if not exist .\dist\data\mister mkdir .\dist\data\mister
copy ..\data\mister\*.* .\dist\data\mister
if not exist .\dist\data\padtokeys mkdir .\dist\data\padtokeys
copy ..\data\padtokeys\*.* .\dist\data\padtokeys
if not exist .\dist\conf mkdir .\dist\conf
copy ..\conf\*.conf .\dist\conf
if not exist .\dist\GUI mkdir .\dist\GUI
copy ..\GUI\*.* .\dist\GUI
copy ..\*.md .\dist
copy ..\changelog.txt .\dist
echo .
echo Rename exec and dir
ren .\dist\main.exe eXoConverter-%version%.exe
ren .\dist eXoConverter-%version%
cd ..
echo Finished building version %version%

================================================
FILE: build.txt
================================================
If you want to build your own executable on Windows, it's pretty straightforward :
- Install your Python 3.8 or 3.9 environment
- Launch python prompt
- Install pyinstaller with this command : `pip install pyinstaller`
- Depending on your environment you might need to install `pip install image`, `pip install pillow`, and `pip install requests`
- Get latest commits through git (git pull)
- Now you can EITHER launch build.bat (simple way) or do the following :
- Copy all `.py` files and the `exodosicon.ico` file in a work directory
- Go into the work directory and type : `pyinstaller --icon=exodosicon.ico --clean -F main.py`
- Your exe will be generated into a `dist` subDirectory
- Just copy README.md, exodosicon.ico, build.txt and conf, data and GUI directories alongside the main exe and you're good to go
- Delete cache and data/mister/distro subfolder in your dist dir if it exists


================================================
FILE: c64converter.py
================================================
import os
import shutil
import util
import sys
import traceback
from metadatahandler import MetadataHandler


# noinspection PyBroadException,PyTypeChecker
class C64Converter:

    def __init__(self, games, cache, scriptDir, collectionVersion, collectionDir, outputDir, conversionType, useLongFolderNames,
                 useGenreSubFolders, conversionConf, fullnameToGameDir, postProcess, logger):
        self.games = games
        self.cache = cache
        self.scriptDir = scriptDir
        self.collectionVersion = collectionVersion
        self.exoCollectionDir = collectionDir
        self.logger = logger
        self.collectionGamesDir = util.getCollectionGamesDir(collectionDir, collectionVersion)
        self.collectionGamesConfDir = util.getCollectionGamesConfDir(collectionDir, collectionVersion)
        self.outputDir = outputDir
        self.conversionType = conversionType
        self.useLongFolderNames = useLongFolderNames
        self.useGenreSubFolders = useGenreSubFolders
        self.conversionConf = conversionConf
        self.metadataHandler = MetadataHandler(scriptDir, collectionDir, collectionVersion, self.cache, self.logger)
        self.fullnameToGameDir = fullnameToGameDir
        self.postProcess = postProcess

    # Loops on all games to convert them
    def convertGames(self):
        # Pre-checks
        if len(self.games) == 0:
            self.postProcess()
            return
        if self.conversionType == util.mister and os.path.exists(os.path.join(self.outputDir, 'TDL_VHD')):
            self.logger.log(
                "\nFound a previous MiSTeR conversion in output folder, please move or delete it before processing with a new one\n",
                self.logger.ERROR)
            self.postProcess()
            return

        self.logger.log("Loading metadatas...")
        self.metadataHandler.parseXmlMetadata()
        if not os.path.exists(os.path.join(self.outputDir, 'downloaded_images')):
            os.mkdir(os.path.join(self.outputDir, 'downloaded_images'))
        if not os.path.exists(os.path.join(self.outputDir, 'manuals')):
            os.mkdir(os.path.join(self.outputDir, 'manuals'))

        self.logger.log('\n')

        gamelist = self.metadataHandler.initXml(self.outputDir)

        count = 1
        total = len(self.games)
        errors = dict()

        for game in self.games:
            try:
                self.__convertGame__(game, gamelist, total, count)
            except:
                self.logger.log('  Error %s while converting game %s\n\n' % (sys.exc_info()[0], game),
                                self.logger.ERROR)
                excInfo = traceback.format_exc()
                errors[game] = excInfo

            count = count + 1

        self.metadataHandler.writeXml(self.outputDir, gamelist)

        # self.logger.log('\n<--------- Post-conversion --------->')
        # self.__postConversion__()

        self.logger.log('\n<--------- Finished Process --------->\n')

        if len(errors.keys()) > 0:
            self.logger.log('\n<--------- Errors rundown --------->', self.logger.ERROR)
            self.logger.log('%i errors were found during process' % len(errors.keys()), self.logger.ERROR)
            self.logger.log('See error log in your outputDir for more info\n', self.logger.ERROR)
            logFile = open(os.path.join(self.outputDir, 'error_log.txt'), 'w')
            for key in list(errors.keys()):
                logFile.write("Found error when processing %s" % key + " :\n")
                logFile.write(errors.get(key))
                logFile.write("\n")
            logFile.close()
        elif os.path.exists(os.path.join(self.outputDir, 'error_log.txt')):
            # Delete log from previous runs
            os.remove(os.path.join(self.outputDir, 'error_log.txt'))

        self.postProcess()

    # Full conversion for a given game
    def __convertGame__(self, game, gamelist, totalSize, count):
        if game == 'H.E.R.O':
            gameMetadata = self.metadataHandler.metadatas.get('h.e.r.o.')
        else:
            gameMetadata = self.metadataHandler.metadatas.get(game.lower())
        genre = self.metadataHandler.buildGenre(gameMetadata, self.metadataHandler.fixGenres)
        self.logger.log(">>> %i/%i >>> %s: starting conversion" % (count, totalSize, game))
        [outputGameFile, hiddenOutputGameFiles] = self.__copyGameDataToOutputDir__(game, genre)
        manualFile = self.__copyManual(game)

        self.metadataHandler.processGame(game, gamelist, genre, self.outputDir, self.useLongFolderNames,
                                         self.useGenreSubFolders, self.conversionType, self.collectionVersion, False, outputGameFile, manualFile)

        for hiddenOutputGameFiles in hiddenOutputGameFiles:
            self.metadataHandler.writeHiddenGamelistEntry(gamelist, hiddenOutputGameFiles, genre, self.useGenreSubFolders)

        self.logger.log("")

    def __copyManual(self, game):
        outputDir = os.path.join(self.outputDir, 'manuals')
        gamePath = os.path.join(self.collectionGamesDir, game)
        manualFile = game + ' Manual.cbz'
        manualPath = os.path.join(gamePath, manualFile)
        if os.path.exists(manualPath):
            self.logger.log('  Copy manual %s' % manualFile, self.logger.INFO)
            shutil.copy2(manualPath, os.path.join(outputDir, manualFile))
            return manualFile
        return None

    # Copy game data from collection to output dir
    def __copyGameDataToOutputDir__(self, game, genre):
        outputDir = self.getLocalGameOutputDir(genre)
        collectionGamePath = os.path.join(self.collectionGamesDir, game)
        collectionGameFiles = [file for file in os.listdir(collectionGamePath) if os.path.splitext(file)[-1] in ['.crt', '.d64', '.D64', '.d81', '.m3u', '.t64', '.g64', 'tcrt']]

        if not os.path.exists(outputDir):
            os.makedirs(outputDir)

        if len(collectionGameFiles) == 0:
            compilationConversion = self.handleCompilationDisk(game, outputDir, collectionGamePath)
            if compilationConversion is not None:
                return compilationConversion
            else:
                self.logger.log('  <WARNING> no game file found while converting game %s\n\n' % game, self.logger.WARNING)
                self.logger.log('            (most likely a commercial homebrew)\n\n', self.logger.WARNING)
                return [game + '.notfound', []]
        elif len(collectionGameFiles) > 1:
            m3uGameFiles = list(filter(lambda f: os.path.splitext(f)[-1] == '.m3u', collectionGameFiles))
            if len(m3uGameFiles) == 1:
                return self.handleM3U(game, outputDir, collectionGamePath, m3uGameFiles[0])
            else:
                return self.handleMultiDisksWithoutM3U(game, outputDir, collectionGamePath, collectionGameFiles)

        return self.handleSingleDisk(game, outputDir, collectionGamePath, collectionGameFiles[0])

    def handleCompilationDisk(self, game, outputDir, collectionGamePath):
        if os.path.exists(os.path.join(collectionGamePath, game + '.cmd')):
            self.logger.log('  compilation conversion')
            cmdFile = open(os.path.join(collectionGamePath, game + '.cmd'))
            for line in cmdFile.readlines():
                compilationGameFilePath = os.path.join(collectionGamePath, line.replace('"', ''))
                compilationGameFile = compilationGameFilePath.split('\\')[-1]
                outputGameFile = game + os.path.splitext(compilationGameFile)[-1]
                if os.path.exists(compilationGameFilePath):
                    self.logger.log('  Copy %s to %s\n\n' % (compilationGameFile, outputGameFile), self.logger.INFO)
                    shutil.copy2(os.path.join(collectionGamePath, compilationGameFilePath),
                                 os.path.join(outputDir, outputGameFile))
                    return [outputGameFile, []]
            cmdFile.close()
        return None

    def handleM3U(self, game, outputDir, collectionGamePath, m3uFile):
        self.logger.log('  m3u conversion')
        m3uGameFilePath = os.path.join(collectionGamePath, m3uFile)
        m3uGameFile = open(m3uGameFilePath, 'r', encoding='utf-8')
        disks = list(map(lambda d: d.rstrip(' \n\r'), m3uGameFile.readlines()))
        m3uGameFile.close()
        return self.createM3u(collectionGamePath, outputDir, game, disks)

    def handleMultiDisksWithoutM3U(self, game, outputDir, collectionGamePath, collectionGameFiles):
        self.logger.log('  multi disks without m3u conversion')
        # TODO most likely special launch, see cmd in Advanced Dungeons & Dragons - Champions of Krynn
        maingame = 'Game.crt'
        if maingame in collectionGameFiles:
            collectionGameFiles.remove(maingame)
            collectionGameFiles = [maingame] + collectionGameFiles
        return self.createM3u(collectionGamePath, outputDir, game, collectionGameFiles)

    def handleSingleDisk(self, game, outputDir, collectionGamePath, gameFile):
        cmds = [cmd for cmd in os.listdir(collectionGamePath) if os.path.splitext(cmd)[-1] == '.cmd']
        if len(cmds) > 0:
            return self.handleSingleDiskWithCmd(game, outputDir, collectionGamePath, gameFile, cmds)
        else:
            return self.handleSingleDiskWithoutCmd(game, outputDir, collectionGamePath, gameFile)

    def handleSingleDiskWithCmd(self, game, outputDir, collectionGamePath, gameFile, cmds):
        # TODO actually we should use cmd and not m3u for compatibility, however doe not work at the moment on Batocera
        if len(cmds) > 1:
            self.logger.log('  <ERROR> more than one cmd found\n\n', self.logger.ERROR)
        cmd = os.path.join(collectionGamePath, cmds[0])
        cmdFile = open(cmd, 'r', encoding='utf-8')
        lines = list(filter(lambda line: line.strip() != '', list(map(lambda l: l.replace('"','').rstrip(' \n\r'), cmdFile.readlines()))))
        cmdFile.close()
        if len(lines) > 1:
            self.logger.log('  <ERROR> more than one line found in cmd\n\n', self.logger.ERROR)
        cmdline = lines[0].split(':')
        if cmdline[0] != gameFile or len(cmdline) != 2:
            if len(cmdline) == 1:
                return self.handleSingleDiskWithoutCmd(game, outputDir, collectionGamePath, gameFile)
            else:
                self.logger.log('  <ERROR> more than one or no parameter found in cmd\n\n', self.logger.ERROR)
        self.logger.log('  single disk conversion with cmd\n\n')
        m3uOutputGameFilePath = os.path.join(outputDir, game + '.m3u')
        m3uOutputGameFile = open(os.path.join(outputDir, game + '.m3u'), 'w', encoding='utf-8')
        self.logger.log('  Create %s with launch parameter: %s\n\n' % (m3uOutputGameFilePath, cmdline[1]), self.logger.INFO)
        outputGameFile = game + os.path.splitext(gameFile)[-1]
        m3uOutputGameFile.write(outputGameFile + ':' + cmdline[1] + '\n')
        m3uOutputGameFile.close()
        self.logger.log('  copy %s to %s\n\n' % (gameFile, outputGameFile), self.logger.INFO)
        shutil.copy2(os.path.join(collectionGamePath, str(gameFile)), os.path.join(outputDir, outputGameFile))
        return [game + '.m3u', [outputGameFile]]

    def handleSingleDiskWithoutCmd(self, game, outputDir, collectionGamePath, gameFile):
        self.logger.log('  single disk conversion without cmd\n\n')
        outputGameFile = game + os.path.splitext(gameFile)[-1]
        self.logger.log('  copy %s to %s\n\n' % (gameFile, outputGameFile), self.logger.INFO)
        shutil.copy2(os.path.join(collectionGamePath, str(gameFile)), os.path.join(outputDir, outputGameFile))
        return [outputGameFile, []]

    def createM3u(self, collectionGamePath, outputDir, game, disks):
        m3uOutputGameFilePath = os.path.join(outputDir, game + '.m3u')
        m3uOutputGameFile = open(os.path.join(outputDir, game + '.m3u'), 'w', encoding='utf-8')
        self.logger.log('  Create %s\n\n' % m3uOutputGameFilePath, self.logger.INFO)
        hiddenGameFiles = []
        for rawdisk in disks:
            diskandparameter = rawdisk.split(':')
            [disk, parameter] = [diskandparameter[0], None] if len(diskandparameter) == 1 else [diskandparameter[0], diskandparameter[1]]
            outputGameFile = game + ' (' + '.'.join(os.path.splitext(disk)[:-1]) + ')' + os.path.splitext(disk)[-1]
            self.logger.log('  Copy %s to %s\n\n' % (disk, outputGameFile), self.logger.INFO)
            shutil.copy2(os.path.join(collectionGamePath, str(disk)), os.path.join(outputDir, outputGameFile))
            if parameter is None:
                m3uOutputGameFile.write(outputGameFile + '\n')
            else:
                m3uOutputGameFile.write(outputGameFile + ':' + parameter + '\n')
            hiddenGameFiles.append(outputGameFile)
        m3uOutputGameFile.close()
        return [game + '.m3u', hiddenGameFiles]

    # Returns local parent output dir of the generated game
    def getLocalGameOutputDir(self, genre):
        return os.path.join(self.outputDir, genre) if self.useGenreSubFolders else self.outputDir

    # specific convertion type treatments after converting all games
    # def __postConversion__(self):
    #     # Cleaning for some conversions


================================================
FILE: changelog.txt
================================================
0.9.5-beta
- C64 dreams support (without custom controller mapping for now)
- small mapping fixes for eXoDOS

0.9-4-beta
- eXoDOS v6 compatibility, backward compatibility with eXoWin3.x 2 should still work
- fixes for some games : Screamer, Blake Stone I & II, Action Soccer, CyberMage, Call of Cthulhu - Shadow of the Comet, Discworld, Earthworm Jim 2, MDK, Lords of the Realms II, Orion Burger, Red Baron, KKND, Z, Sam & Max

0.9.3-beta
- some bugs fixed for emuELEC and MiSTeR generation
- use torrents for Lite version when theEye is down (windows only)
- allow proper long names (i.e. The $100,000 Pyramid (1988).pc) for game directories instead of short ones (i.e. $100000P.pc) (Batocera/Retrobat only)

0.9.2-beta
 - updates and enhancements for MiSTeR
 - clean and simplify genre mapping logic (thanks @Newsdee)
 - full rework of mapping
 - use keyb2joypad project mapping when available (only for Batocera at the moment, will add other distributions on demand)
 - Fix EmuELEC generation (https://github.com/Voljega/ExoDOSConverter/issues/77)

0.9.1-beta
 - major fixes for eXoWin3x conversion
 - preliminary work for pad2key support on Batocera

0.9-beta
 - Add full support for eXoWin3x for most generation types (but not MiSTeR or maybe it needs to be tested, most likely doesn't work)
 - Add support for eXoDOS updates (done through Launchbox or the update.bat script)
 - Automatic detection of which collection is used
 - Better fixed game shortnames for MiSTeR using names from eXoDOS
 - Full rework of the image cache systems to be more stable, more quick, and system agnostic
 - Lots of fixes

0.8-beta
 - add support for Lite version and download-on-demand through direct download (see README)

0.7.2-beta
 - Fixes and enhancements for MiSTeR
 - UI enhancements

0.7.1-beta
 - Fix major bugs of v4 to v5 transition

0.7-beta
 - Update for eXoDOS v6, v4 is not supported anymore
 - Further integrate MiSTeR compatibility
 - EmuELEC compatibility
 - More configuration options for generation
 - Load / Save of customs game selections
 - Better P2k for Recalbox

0.6-beta
 - Full compatibility with Linux (see README.md on to use it on Linux as this release is Windows only)
 - Full debug of the conversion of the whole collection (this doesn't mean that everything will work, just that is properly converted without errors)
 - Added support for Recalbox p2k format
 - Added support for Retrobat
 - Added preliminary support for MiSTeR, works but buggy at the moment. Documentation will come later

0.5-beta (Windows only)
 - fix resizing issue for openDingux flavors
 - add default mapping for RG350 for openDingux flavors (see README.md)

0.4-beta (Windows only)
 - add full retropie compatibility
 - add full opendingux compatibility minus resizing of boxart which had to be deactivated

0.3-beta (Windows only)
 - lots of fixes
 - full support for Recalbox and Batocera
 - added several configuration parameters

0.2-beta (Windows only)
A few notes/limitations worthy of your attention :
    when launching the program or modifying the path to the collection, sometimes it can take a long time (up to 30-45s) to display the full windows with the list of games, this a thread issue which I haven't had time nor wits to solve properly yet.
    Some rare times it can even display an empty list, close the program and relaunch it again
    mount and imgmount are followed by pause command to allow easy debugging and see that the mountings are done correctly. in the future, it will be only added in debug mode
    the mount command requires an absolute path to the file to work fine, and for now it's translated with an absolute path for batocera, if needed you will neeed to modify the absolute path in the dosbox.bat file

0.1-beta (Windows only)
 - First beta release of this tool.
 - Conversion of DOS games from ExoDOS v4 collection to EmulationStation based format for use on retropie/batocera/recalbox/etc... distributions


================================================
FILE: commandhandler.py
================================================
import os
import shutil
import stat
import util
import ntpath


# Converts dosbox commands to desired format and paths, at the moment Batocera/ Recalbox linux flavor
class CommandHandler:

    def __init__(self, gGator):
        self.outputDir = gGator.outputDir
        self.logger = gGator.logger
        self.gGator = gGator

    # Rename a filename to a dos compatible 8 char name
    @staticmethod
    def __dosRename__(path, originalFile, fileName, fileExt, cdCount):
        fileName = fileName.replace(" ", "").replace("[", "").replace("]", "")
        if len(fileName) > 8:
            if cdCount is None:
                fileName = fileName[0:7]
            else:
                fileName = fileName[0:5] + str(cdCount)
        # TESTCASE : Ripper (1996) / ripper shouldn't enter here
        if os.path.exists(os.path.join(path, fileName + fileExt)) and (
                fileName + fileExt) != originalFile.lower() and cdCount is None:
            fileName = fileName[0:6] + "1"
        # Double rename file to avoid trouble with case on Windows
        source = os.path.join(path, originalFile)
        targetTemp = os.path.join(path, fileName + "1" + fileExt)
        target = os.path.join(path, fileName + fileExt)
        os.rename(util.localOSPath(source), util.localOSPath(targetTemp))
        os.rename(util.localOSPath(targetTemp), util.localOSPath(target))
        return fileName

    # Checks if a command line should be kept or not
    @staticmethod
    def useLine(line, cLines):
        for cL in cLines:
            if line.strip().lower().startswith(cL):
                return False
        return True

    # Parses command lines path parts
    @staticmethod
    def __pathListInCommandLine__(line, startTokens, endTokens):
        command = line.split(" ")
        startIndex = -1
        endIndex = -1
        count = 0
        for param in command:
            if param.lower() in startTokens and startIndex == -1:
                letter = param.lower()
                startIndex = count
            elif param.lower() in endTokens and endIndex == -1:
                endIndex = count
            count = count + 1

        if endIndex == -1:
            endIndex = len(command)

        return command[startIndex + 1:endIndex], command, startIndex, endIndex, letter

    def reducePathExoPart(self, path, gameInternalBatFile=False):
        #        self.logger.log("    PATH CONVERT: %s" %path)
        exoToken = util.getCollectionGamesDirToken(self.gGator.collectionVersion).lower()
        path = path.lstrip(' ').rstrip('\n\r')
        if path.lower().startswith(".\\" + exoToken) or path.lower().startswith("\\" + exoToken) \
                or path.lower().startswith(exoToken):
            pathList = path.split('\\')
            if pathList[0] == '.':
                pathList = pathList[1:]
            if len(pathList) > 1 and pathList[0].lower() == exoToken:
                if not gameInternalBatFile:
                    path = ".\\" + "\\".join(pathList[1:])
                else:
                    path = ".\\" + "\\".join(pathList[2:])
        #        self.logger.log("    TO: %s" %path)
        return path

    # Removes eXo collection games folder parts from exo collection paths
    def reducePath(self, path, gameInternalBatFile=False):
        path = self.reducePathExoPart(path, gameInternalBatFile)

        if self.gGator.isWin3x():  # all games are win3x now though ;)
            # Find first game sub path and replace it
            gameSubPathIndex = path.lower().find('\\'+self.gGator.game.lower() + '\\')
            if gameSubPathIndex != -1:
                gameSubPathLength = len('\\'+self.gGator.game)
                path = path[:gameSubPathIndex] + path[gameSubPathIndex + gameSubPathLength:]
            else:
                gameSubPathIndex = path.lower().find('\\' + self.gGator.game.lower())
                if gameSubPathIndex != -1 and self.gGator.game != 'Carmaged':
                    gameSubPathLength = len('\\' + self.gGator.game)
                    path = path[:gameSubPathIndex] + path[gameSubPathIndex + gameSubPathLength:]

        return path

    # Converts imgmount command line
    def handleImgmount(self, line, gameInternalBatFile=False):
        startTokens = ['a', 'b', 'c', 'd', 'e', 'f','g', 'h', 'i', 'j', 'k', 'y', '0','2']
        endTokens = ['-t', '-size']
        paths, command, startIndex, endIndex, letter = self.__pathListInCommandLine__(line, startTokens, endTokens)

        prString = ""
        if len(paths) == 1:
            path = self.reducePath(paths[0].replace('"', ""), gameInternalBatFile)
            self.logger.log("    clean single imgmount")
            path = self.__cleanCDname__(path.rstrip('\n'), None, gameInternalBatFile)
            prString = prString + " " + path
        else:
            # See if path contains ""
            redoPath = " ".join(paths)
            countChar = redoPath.count('"')
            if countChar == 2:
                # Single path with space
                # TESTCASE: Take Back / CSS
                path = self.reducePath(redoPath.replace('"', ""), gameInternalBatFile)
                self.logger.log("    clean single imgmount")
                path = self.__cleanCDname__(path, None, gameInternalBatFile)
                prString = prString + " " + path
            else:
                # several paths (multi cds)
                self.logger.logList("    multi imgmount", paths)
                # analyze paths to see if there are spaces in it  
                # TESTCASE: Star Trek Borg / STBorg
                spaceInPaths = False
                for path in paths:
                    if path.startswith('"') and not path.endswith('"'):
                        spaceInPaths = True
                        break
                if spaceInPaths:
                    reshapedPaths = []
                    fixedPath = ''
                    for path in paths:
                        if path.startswith('"') and not path.endswith('"'):
                            fixedPath = path
                        elif not path.startswith('"') and path.endswith('"'):
                            fixedPath = fixedPath + " " + path
                            reshapedPaths.append(fixedPath)
                            fixedPath = ""
                        else:
                            fixedPath = fixedPath + " " + path
                    paths = reshapedPaths

                cdCount = 1
                for path in paths:
                    path = self.reducePath(path.replace('"', ""), gameInternalBatFile)
                    path = self.__cleanCDname__(path, cdCount, gameInternalBatFile)
                    prString = prString + " " + '"' + path + '"'
                    cdCount = cdCount + 1

        fullString = " ".join(command[0:startIndex + 1]) + prString + " " + " ".join(command[endIndex:])
        self.logger.log("    imgmount path: " + line.rstrip('\n\r ') + " --> " + fullString.rstrip('\n\r '))
        return fullString.rstrip(' '), letter

    # Converts mount command line
    def handleBoot(self, line):
        bootPath = line.replace('boot ', '').replace('BOOT ', '').rstrip(' \n\r')
        if bootPath != '-l c' and bootPath != '-l c>null':
            # reduce except for boot -l c
            paths = bootPath.split(' ')
            cleanedPath = []
            if paths[0].startswith('"') and (
                    paths[-1].lower().endswith('.ima"') or paths[-1].lower().endswith('.img"')):
                # TEST CASE : Grand Prix Tennis 87 (GPTen87)
                paths = [" ".join(paths)]
                path = paths[0].replace('"', '')
                path = self.reducePath(path)
                imgPath = os.path.dirname(util.localOSPath(path))
                imgFullLocalPath = os.path.join(self.gGator.getLocalGameOutputDir(), util.localOSPath(imgPath))
                imgFile = ntpath.basename(util.localOSPath(path))
                oldImgFilename = os.path.splitext(imgFile)[0]
                imgFileExt = os.path.splitext(imgFile)[-1]
                newImgFilename = self.__dosRename__(imgFullLocalPath, imgFile, oldImgFilename, imgFileExt, None)
                self.logger.log("      renamed %s to %s" % (imgFile, newImgFilename + imgFileExt))
                path = '"' + imgPath + '\\' + newImgFilename + imgFileExt + '"'
                cleanedPath.append(path)
            else:
                for path in paths:
                    if path not in ['-l', 'a', 'a:']:
                        path = self.reducePath(path.replace('"', ""))
                        # Verify path
                        postfix = path.find('-l')
                        chkPath = path[:postfix].rstrip(' ') if postfix != -1 else path
                        if not os.path.exists(
                                os.path.join(self.gGator.getLocalGameOutputDir(), util.localOSPath(chkPath))):
                            if not os.path.exists(
                                    os.path.join(self.gGator.getLocalGameDataOutputDir(),
                                                 util.localOSPath(chkPath))):
                                self.logger.log("      <ERROR> path %s doesn't exist"
                                                % os.path.join(self.gGator.getLocalGameOutputDir(),
                                                               util.localOSPath(chkPath)),
                                                self.logger.ERROR)
                    cleanedPath.append(path)

            bootPath = " ".join(cleanedPath)

        fullString = "boot " + bootPath.replace('/', '\\') + "\n"
        self.logger.log("    boot path: " + line.rstrip('\n\r ') + " --> " + fullString.rstrip('\n\r '))
        return fullString

    # Converts mount command line
    def handleMount(self, line):
        startTokens = ['a', 'b', 'd', 'e', 'f', 'g','h', 'i', 'j', 'k', 't']
        endTokens = ['-t']
        paths, command, startIndex, endIndex, letter = self.__pathListInCommandLine__(line, startTokens, endTokens)

        prString = ""
        if len(paths) == 1:
            # TESTCASE: Sidewalk (1987) / Sidewalk
            path = self.reducePath(paths[0].replace('"', ""))

            if not os.path.exists(os.path.join(self.gGator.getLocalGameOutputDir(), util.localOSPath(path))):
                self.logger.log("    <ERROR> path %s doesn't exist"
                                % os.path.join(os.path.join(self.gGator.getLocalGameOutputDir(), util.localOSPath(path))),
                                self.logger.ERROR)
            prString = prString + " " + path
        else:
            # See if path contains ""
            redoPath = " ".join(paths)
            countChar = redoPath.count('"')
            if countChar == 2:
                path = self.reducePath(paths[0].replace('"', ""))

                if not os.path.exists(os.path.join(self.gGator.getLocalGameOutputDir(), util.localOSPath(path))):
                    self.logger.log("    <ERROR> path %s doesn't exist"
                                    % os.path.join(os.path.join(self.gGator.getLocalGameOutputDir(), util.localOSPath(path))),
                                    self.logger.ERROR)
                prString = prString + " " + path
            else:
                self.logger.log("    <ERROR> MULTIPATH/MULTISPACE", self.logger.ERROR)
                self.logger.logList("    paths", paths)
                for path in paths:
                    path = self.reducePath(path.replace('"', ""))

                    if not os.path.exists(os.path.join(self.gGator.getLocalGameOutputDir(), util.localOSPath(path))):
                        self.logger.log("    <ERROR> path %s doesn't exist"
                                        % os.path.join(os.path.join(self.gGator.getLocalGameOutputDir(), util.localOSPath(path))),
                                        self.logger.ERROR)
                    prString = prString + " " + path

        # Mount command needs to be absolute linux path
        if prString.strip().startswith('.'):
            prString = prString.strip()[1:]
        gameString = "/" + self.gGator.genre + "/" + self.gGator.gameDir if self.gGator.useGenreSubFolders else "/" + self.gGator.gameDir
        prString = util.getRomsFolderPrefix(self.gGator.conversionType,
                                            self.gGator.conversionConf) + gameString + prString.strip()
        prString = ' "' + prString.replace("\\", "/") + '"'
        # Needs windows absolute path for retrobat
        if self.gGator.conversionType == util.retrobat:
            prString = prString.replace("/", "\\")

        fullString = " ".join(command[0:startIndex + 1]) + prString + " " + " ".join(command[endIndex:])
        self.logger.log("    mount path: " + line.rstrip('\n\r ') + " --> " + fullString.rstrip('\n\r '))
        return fullString, letter

    # Cleans cd names to a dos compatible 8 char name
    def __cleanCDname__(self, path, cdCount=None, gameInternalBatFile=False):
        cdFileFullPath = os.path.join(self.gGator.getLocalGameOutputDir(), path) \
            if not gameInternalBatFile else os.path.join(self.gGator.getLocalGameDataOutputDir(), path)
        if os.path.exists(util.localOSPath(cdFileFullPath)):
            if os.path.isdir(util.localOSPath(cdFileFullPath)):
                return path
            else:
                pathList = path.split('\\')
                cdFile = pathList[-1]
                oldCdFilename = os.path.splitext(cdFile)[0].lower()
                cdFileExt = os.path.splitext(cdFile)[-1].lower()

                # Root path of CDs
                cdsPath = "\\".join(cdFileFullPath.split('\\')[:-1])

                # Rename file to dos compatible name                
                cdFilename = self.__dosRename__(cdsPath, cdFile, oldCdFilename, cdFileExt, cdCount)
                self.logger.log("      renamed %s to %s" % (cdFile, cdFilename + cdFileExt))

                if cdFileExt == ".cue":
                    self.__cleanCue__(cdsPath, cdFilename, cdCount)

                # Clean remaining ccd and sub file which might have the same name as the cue file
                otherCdFiles = [file for file in os.listdir(util.localOSPath(cdsPath)) if
                                os.path.splitext(file)[0].lower() == oldCdFilename and os.path.splitext(file)[
                                    -1].lower() in ['.ccd', '.sub']]
                for otherCdFile in otherCdFiles:
                    otherCdFileExt = os.path.splitext(otherCdFile)[-1].lower()
                    otherCdFilename = self.__dosRename__(cdsPath, otherCdFile, cdFilename, otherCdFileExt, cdCount)
                    self.logger.log("      renamed %s to %s" % (otherCdFile, otherCdFilename + otherCdFileExt))

                cleanedPath = "\\".join(pathList[:-1]) + "\\" + cdFilename + cdFileExt
                #                self.logger.log("    modify dosbox.bat : %s -> %s" %(path,cleanedPath))
                return cleanedPath
        else:
            if not os.path.exists(os.path.join(self.gGator.getLocalGameDataOutputDir(), util.localOSPath(path))):
                self.logger.log("      <ERROR> path %s doesn't exist" % util.localOSPath(cdFileFullPath),
                                self.logger.ERROR)
            return path

    # Cleans cue files content to dos compatible 8 char name
    def __cleanCue__(self, path, fileName, cdCount):
        oldFile = open(os.path.join(util.localOSPath(path), fileName + ".cue"), 'r')
        newFile = open(os.path.join(util.localOSPath(path), fileName + "-fix.cue"), 'w')
        modifiedFirstLine = False
        for line in oldFile.readlines():
            if line.startswith("FILE"):
                if not modifiedFirstLine:  # Handle first line: img, iso, bin, etc
                    params = line.split('"')
                    isobin = os.path.splitext(params[1].lower())
                    fixedIsoBinName = self.__dosRename__(path, params[1], isobin[0], isobin[1], cdCount)
                    self.logger.log("      renamed %s to %s" % (params[1], fixedIsoBinName + isobin[1]))
                    # TESTCASE: Pinball Arcade (1994) / PBArc94:
                    params[1] = fixedIsoBinName + isobin[-1]
                    line = '"'.join(params)
                    self.logger.log("      convert cue content -> " + line.rstrip('\n\r '))
                    # Only do it for the first Line
                    modifiedFirstLine = True
                else:  # Move music files in subfolders to cd folder
                    params = line.split('"')
                    if '\\' in params[1]:
                        musicParams = params[1].split('\\')  # Assume there are only two music file path components
                        shutil.move(os.path.join(util.localOSPath(path), musicParams[0], musicParams[1]),
                                    os.path.join(util.localOSPath(path), musicParams[1]))
                        self.logger.log("      move music %s from %s to . -> " % (musicParams[1], musicParams[0]))
                        params[1] = musicParams[1]
                        line = '"'.join(params)
                        self.logger.log("      convert cue content -> " + line.rstrip('\n\r '))

            newFile.write(line)
        oldFile.close()
        newFile.close()
        # Remove readonly attribute if present before deleting
        os.chmod(os.path.join(util.localOSPath(path), fileName + ".cue"), stat.S_IWRITE)
        os.remove(os.path.join(util.localOSPath(path), fileName + ".cue"))
        os.rename(os.path.join(util.localOSPath(path), fileName + "-fix.cue"),
                  os.path.join(util.localOSPath(path), fileName + ".cue"))


================================================
FILE: conf/conf-exo.conf
================================================
# Path where your set will be created (exodos collection will be left untouched)
outputDir = H:\ExoDOSConverted
# Path to your eXo collection
collectionDir = H:\eXo\eXoWin3x
#  Path to your custom selection file
selectionPath = F:\+roms\DOS-eXoWorks\MyeXoDOS-mount.sel
# Choose your conversion type
conversionType = Batocera
#  Settings for the Converter (DOS/Win3x only)
#  Basic Settings for Dosbox
#  Expert Settings for Dosbox
# Your collection version (automatically set)
collectionVersion = eXoWin3x v2
# Check to use genre subfolders for converted games
genreSubFolders = 1
# Use controls mapping
mapper = padto.keys
# Use keyb2joypad mappings
useKeyb2Joypad = 1
# Map controler analog sticks
mapSticks = 0
# Allow long Folder Names ["Long Game Name (YEAR).pc" not "LongGame.pc"] (Batocera/RetroBat Only)
# Will not Rename Existing Folders!
longGameFolder = 1
# Activate direct download on demand (only for eXoDOS)
downloadOnDemand = 1
# Pre-Extract Games (MiSTeR and DOS Native only)
preExtractGames = 1
# ReZip games for dosbox pure (Batocera, Recalbox and Retrobat only)
dosboxPureZip = 1
#  in debug mode, pause instruction will be added and [autoexec] part left commented in dosbox.cfg
debugMode = 1
# Allows overriding of generated configuration
expertMode = 0
#  Mount command prefix
mountPrefix = ./
# DOSBox fullresolution parameter
fullresolutionCfg = desktop
# DOSBox renderer parameter
rendererCfg = auto
# DOSBox output parameter
outputCfg = texture
# DOSBox vsync parameter (costly if activated)
vsyncCfg = 0


================================================
FILE: conf.py
================================================

def cleanString(string):
    return string.rstrip('\n\r ').lstrip()


def loadConf(confFile):
    conf = dict()
    
    file = open(confFile,'r',encoding="utf-8")
    for line in file.readlines():
        if not line.startswith('#'):
            confLine = line.split("=")
            if len(confLine) == 2:
                conf[cleanString(confLine[0])] = cleanString(confLine[1])
    
    file.close()        
    return conf


================================================
FILE: confconverter.py
================================================
import os
from commandhandler import CommandHandler
import util
import dosboxconfv6
import chardet
import lists
import shutil


# Converts dosbox.conf to dosbox.cfg and dosbox.bat, at the moment Batocera/ Recalbox linux flavor
class ConfConverter:

    def __init__(self, gGator):
        self.logger = gGator.logger
        self.conversionConf = gGator.conversionConf
        self.commandHandler = CommandHandler(gGator)
        self.scriptDir = gGator.scriptDir
        # self.outputDir = gGator.outputDir
        # self.useGenreSubFolders = gGator.useGenreSubFolders
        # self.conversionType = gGator.conversionType
        # self.conversionConf = gGator.conversionConf
        # self.collectionVersion = gGator.collectionVersion
        # self.commandHandler = CommandHandler(gGator)

    # Handle Parameter in ExpertMod
    def __getExpertParam__(self, parameter, defaultValue):
        if self.conversionConf['useExpertMode']:
            return self.conversionConf[parameter]
        else:
            return defaultValue

    # Converts exo collection v6 dosbox.conf to dosbox.cfg and dosbox.bat
    def processV6(self, gGator, defaultDosboxConf, optionsDosboxConfPath):
        exoDosboxConfPath = os.path.join(gGator.getLocalGameDataOutputDir(), "dosbox.conf")  # original game conf
        # stack on top of default conf
        fullDosboxConf = dosboxconfv6.loadDosboxConf(exoDosboxConfPath, defaultDosboxConf)
        if gGator.conversionType == util.retrobat:  # keep options.conf on windows
            fullDosboxConf = dosboxconfv6.loadDosboxConf(optionsDosboxConfPath, fullDosboxConf)
        self.setUserParameters(fullDosboxConf, gGator)
        dosboxCfgPath = os.path.join(gGator.getLocalGameOutputDir(), "dosbox.cfg")
        dosboxconfv6.writeDosboxConf(dosboxCfgPath, fullDosboxConf)
        retroDosboxCfg = open(dosboxCfgPath, 'a')  # retroarch dosbox.cfg
        retroDosboxBat = open(os.path.join(gGator.getLocalGameOutputDir(), "dosbox.bat"), 'w')  # retroarch dosbox.bat

        exoDosboxConf = open(exoDosboxConfPath, 'r')
        count = 0
        lines = exoDosboxConf.readlines()
        for cmdline in lines:
            if cmdline.startswith("[autoexec]"):
                retroDosboxCfg.write(cmdline)
                self.__createDosboxBat__(lines[count + 1:], retroDosboxBat, retroDosboxCfg, gGator)
                break

            count = count + 1

        exoDosboxConf.close()
        os.remove(os.path.join(gGator.getLocalGameDataOutputDir(), "dosbox.conf"))
        retroDosboxCfg.close()
        retroDosboxBat.close()

    def setUserParameters(self, dosboxConf, gGator):
        dosboxConf['[sdl]']['fullscreen'] = 'true'
        if gGator.conversionType != util.retrobat:
            dosboxConf['[sdl]']['fullresolution'] = self.__getExpertParam__("fullresolutionCfg", "desktop")
            dosboxConf['[sdl]']['output'] = self.__getExpertParam__("outputCfg", "texture")
        dosboxConf['[sdl]']['renderer'] = self.__getExpertParam__("rendererCfg", "auto")
        dosboxConf['[sdl]']['vsync'] = 'true' if gGator.conversionConf['vsyncCfg'] else 'false'
        if 'mapper' in self.conversionConf and self.conversionConf['mapper'] == 'mapper.map':
            dosboxConf['[sdl]']['mapperfile'] = 'mapper.map'
        dosboxConf['[render]']['aspect'] = 'true'
        dosboxConf['[joystick]']['buttonwrap'] = 'false'
        dosboxConf['[gus]']['ultradir'] = 'C:\\ULTRASND'

    # Converts exo collection dosbox.conf to dosbox.cfg and dosbox.bat
    def processV5(self, gGator):
        self.logger.log("  create dosbox.bat")
        exoDosboxConf = open(os.path.join(gGator.getLocalGameDataOutputDir(), "dosbox.conf"), 'r')  # original
        retroDosboxCfg = open(os.path.join(gGator.getLocalGameOutputDir(), "dosbox.cfg"), 'w')  # retroarch dosbox.cfg
        retroDosboxBat = open(os.path.join(gGator.getLocalGameOutputDir(), "dosbox.bat"), 'w')  # retroarch dosbox.bat

        count = 0
        lines = exoDosboxConf.readlines()
        for cmdline in lines:
            if cmdline.startswith("fullscreen"):
                retroDosboxCfg.write("fullscreen=true\n")
            elif cmdline.startswith("fullresolution"):
                if gGator.conversionType == util.retrobat:
                    retroDosboxCfg.write(cmdline)
                else:
                    retroDosboxCfg.write("fullresolution=" + self.__getExpertParam__("fullresolutionCfg", "desktop") + "\n")
            elif cmdline.startswith("output"):
                if gGator.conversionType == util.retrobat:
                    retroDosboxCfg.write(cmdline)
                else:
                    retroDosboxCfg.write("output=" + self.__getExpertParam__("outputCfg", "texture") + "\n")
                retroDosboxCfg.write("renderer=" + self.__getExpertParam__("rendererCfg", "auto") + "\n")
                if gGator.conversionConf['vsyncCfg']:
                    retroDosboxCfg.write("vsync=true\n")
                else:
                    retroDosboxCfg.write("vsync=false\n")

            # Always write these
            elif cmdline.startswith("aspect"):
                retroDosboxCfg.write("aspect=true\n")
            elif cmdline.startswith("buttonwrap"):
                retroDosboxCfg.write("buttonwrap=false\n")
            elif cmdline.startswith("mapperfile") and 'mapper' in self.conversionConf and self.conversionConf['mapper'] == 'mapper.map':
                retroDosboxCfg.write("mapperfile=mapper.map\n")
            elif cmdline.startswith("ultradir"):
                retroDosboxCfg.write(r"ultradir=C:\ULTRASND")
                retroDosboxCfg.write("\n")
            elif cmdline.startswith("[autoexec]"):
                retroDosboxCfg.write(cmdline)
                self.__createDosboxBat__(lines[count + 1:], retroDosboxBat, retroDosboxCfg, gGator)
                break
            else:
                retroDosboxCfg.write(cmdline)

            count = count + 1

        exoDosboxConf.close()
        os.remove(os.path.join(gGator.getLocalGameDataOutputDir(), "dosbox.conf"))
        retroDosboxCfg.close()
        retroDosboxBat.close()

    # Creates dosbox.bat from dosbox.conf [autoexec] part
    def __createDosboxBat__(self, cmdlines, retroDosboxBat, retroDosboxCfg, gGator):
        # if needed, set ULTRADIR folder used by dosbox as driver (uses ULTRASND folder un games files)
        if not gGator.isWin3x() and os.path.exists(os.path.join(gGator.getLocalGameDataOutputDir(), 'ULTRASND')):
            self.logger.log("    add ULTRADIR for ULTRASND driver")
            retroDosboxBat.write("set ULTRADIR=C:\\%s\\ULTRASND\n" % gGator.game)

        whereWeAt = [gGator.getLocalGameOutputDir()]  # Identify where we at in generated set
        for cmdline in cmdlines:
            # keep conf in dosbox.cfg but comment it
            if self.conversionConf['useDebugMode']:
                retroDosboxCfg.write("# " + cmdline)
            self.__convertLine__(cmdline, retroDosboxBat, gGator, whereWeAt)

    # Convert command line to dosbox.bat
    def __convertLine__(self, cmdline, retroDosboxBat, gGator, whereWeAt):
        cutLines = ["cd ..", "cls", "mount c", "#", "exit", "echo off", "echo on"]
        # always remove @
        cmdline = cmdline.lstrip('@ ')
        if self.commandHandler.useLine(cmdline, cutLines):
            if cmdline.lower().startswith("c:"):
                retroDosboxBat.write(cmdline)
                if not gGator.isWin3x():
                    # First add move into game subdir
                    retroDosboxBat.write("cd %s\n" % gGator.game)
                    whereWeAt.append(gGator.game)
            # remove cd to gamedir as it is already done, but keep others cd
            elif cmdline.lower().startswith("cd "):
                path = self.commandHandler.reducePathExoPart(cmdline.lstrip(' ').rstrip('\n\r ').split(" ")[-1].rstrip('\n\r '))
                if path.lower() == gGator.game.lower() and not os.path.exists(
                        os.path.join(gGator.getLocalGameDataOutputDir(), path)):
                    self.logger.log("    cd command: '%s' -> path is game name and no existing subpath, removed"
                                    % cmdline.rstrip('\n\r '))
                else:
                    self.logger.log("    cd command: '%s' -> kept" % cmdline.rstrip('\n\r '))
                    retroDosboxBat.write(cmdline)
                    whereWeAt.append(path)
            elif cmdline.lower().startswith("imgmount "):
                fixedCommand, letter = self.commandHandler.handleImgmount(cmdline.rstrip('\n\r '))
                retroDosboxBat.write('imgmount -u ' + letter + '\n')  # prevents dosbox-pure automount
                retroDosboxBat.write(fixedCommand)
                if self.conversionConf['useDebugMode']:
                    retroDosboxBat.write("\npause\n")
                else:
                    retroDosboxBat.write("\n")
            elif cmdline.lower().startswith("mount "):
                fixedCommand, letter = self.commandHandler.handleMount(cmdline.rstrip('\n\r '))
                retroDosboxBat.write('imgmount -u ' + letter + '\n')  # prevents dosbox-pure automount
                retroDosboxBat.write(fixedCommand)
                if self.conversionConf['useDebugMode']:
                    retroDosboxBat.write("\npause\n")
                else:
                    retroDosboxBat.write("\n")
            elif cmdline.lower().startswith("boot "):
                retroDosboxBat.write(self.commandHandler.handleBoot(cmdline.rstrip('\n\r ')))
            elif cmdline.lower().rstrip(' \n\r') == 'call run' or cmdline.lower().rstrip(' \n\r') == 'call run.bat':
                self.logger.log("    <WARNING> game uses call run.bat", self.logger.WARNING)
                if gGator.game in lists.gamesWithRunBatHandling:
                    self.__handleRunBat__(gGator)
                self.__handlePotentialSubFile__(cmdline, gGator, [], whereWeAt)
                retroDosboxBat.write(cmdline)
            else:
                self.__handlePotentialSubFile__(cmdline, gGator, [], whereWeAt)
                retroDosboxBat.write(cmdline)

    # Handle potential sub files and problems in it
    def __handlePotentialSubFile__(self, subPath, gGator, handledSubFiles,whereWeAt):
        # Ignore charset unwritable by python
        if gGator.game in ['747400', 'Frightma', 'FreakOut', 'ghenkhan', 'Spheroid', 'TORNADO']:
            return

        subPath = subPath.lstrip('@ ').lower().replace('call ','') if subPath.lstrip('@ ').lower().startswith("call ") else subPath
        subBat = os.path.join(os.path.join(*whereWeAt), subPath.rstrip(' \n\r') + '.bat')

        if os.path.exists(subBat) and not os.path.isdir(subBat) and subBat.lower() not in handledSubFiles:
            shutil.copy2(os.path.join(self.scriptDir, 'data', 'JCHOICE.EXE'), os.path.dirname(subBat))
            # Handle old DOS file with cp437 encoding (falsely detected as TIS-620, EUC-KR)
            subBatRaw = open(subBat, 'rb')
            rawdata = subBatRaw.read()
            result = chardet.detect(rawdata)
            encodingDic = {'TIS-620': 'cp437', 'EUC-KR': 'cp437', 'CP949': 'cp949'}
            # TODO Survey this fix is ok ...
            encoding = result['encoding'] if result['encoding'] not in encodingDic else encodingDic[result['encoding']]
            subBatRaw.close()
            # TODO is encoding is None use 'cp1252' ?
            self.logger.log('    Handle Bat File (enc:%s->%s) %s' % (result['encoding'],encoding, subBat), self.logger.WARNING)
            handledSubFiles.append(subBat.lower())
            subBatFile = open(subBat, 'r', encoding=encoding)
            subBatFileClone = open(subBat + '1', 'w', newline='\r\n', encoding=encoding)
            for cmdline in subBatFile.readlines():
                # always remove @
                cmdline = cmdline.lstrip('@ ')
                if cmdline.lower().rstrip(' \n\r') == 'c:' and gGator.conversionType == util.mister:
                    self.logger.log('      Remove c: for MiSTeR', self.logger.WARNING)
                else:
                    if 'c:\\' in cmdline.lower():
                        if gGator.conversionType == util.mister:
                            # TODO might need win3x fix
                            cmdline = cmdline.replace('c:', 'E:\\GAMES\\' + gGator.game).replace('C:', 'E:\\GAMES\\' + gGator.game)
                        else:
                            if not gGator.isWin3x():
                                cmdline = cmdline.replace('c:','c:\\'+gGator.game).replace('C:','C:\\'+gGator.game)
                    elif cmdline.lower().startswith('choice '):
                        cmdline = cmdline.replace('choice ', 'jchoice ').replace('CHOICE ', 'JCHOICE ')
                    else:
                        self.__handlePotentialSubFile__(cmdline, gGator, handledSubFiles, whereWeAt)
                    subBatFileClone.write(cmdline)
            subBatFileClone.close()
            subBatFile.close()
            # Delete runbat and rename runbat clone to runbat
            os.remove(subBat)
            os.rename(subBat + '1', subBat)

    # Treat run.bat command inside game directory
    def __handleRunBat__(self, gGator):
        runBat = os.path.join(gGator.getLocalGameDataOutputDir(), 'run.bat')
        if os.path.exists(runBat):
            runFile = open(runBat, 'r')
            runFileClone = open(runBat + '1', 'w', newline='\r\n')
            # Clone run.bat and only modify imgmount lines
            # Add some hardcoded lines which are impossible to handle
            handled = {
                'imgmount d ".\\eXoDOS\\comconra\\cd\\Command & Conquer - Red Alert (USA) (Soviet Disc) (Rerelease) (19991021).cue" ".\\eXoDOS\\comconra\\cd\\Command & Conquer - Red Alert (USA) (Allied Disc) (Rerelease) (19991021).cue" ".\\eXoDOS\\comconra\\cd\\Red Alert Counterstrike CD3.cue" ".\\eXoDOS\\comconra\\cd\\Red Alert Aftermath CD4.cue" -t cdrom':
                'imgmount d ".\\cd\\comma2.cue" ".\\cd\\comma1.cue" ".\\cd\\redal3.cue" ".\\eXoDOS\\comconra\\cd\\redal4.cue" -t cdrom',
                'imgmount d ".\\eXoDOS\\comconra\\cd\\Red Alert Aftermath CD4.cue" ".\\eXoDOS\\comconra\\cd\\Command & Conquer - Red Alert (USA) (Allied Disc) (Rerelease) (19991021).cue" ".\\eXoDOS\\comconra\\cd\\Command & Conquer - Red Alert (USA) (Soviet Disc) (Rerelease) (19991021).cue" ".\\eXoDOS\\comconra\\cd\\Red Alert Counterstrike CD3.cue" -t cdrom':
                'imgmount d ".\\cd\\redal4.cue" ".\\cd\\comma1.cue" ".\\cd\\comma2.cue" ".\\cd\\redal3.cue" -t cdrom',
                'imgmount d ".\\eXoDOS\\comconra\\cd\\Red Alert Counterstrike CD3.cue" ".\\eXoDOS\\comconra\\cd\\Command & Conquer - Red Alert (USA) (Allied Disc) (Rerelease) (19991021).cue" ".\\eXoDOS\\comconra\\cd\\Command & Conquer - Red Alert (USA) (Soviet Disc) (Rerelease) (19991021).cue" ".\\eXoDOS\\comconra\\cd\\Red Alert Aftermath CD4.cue" -t cdrom':
                'imgmount d ".\\cd\\redal3.cue" ".\\cd\\comma1.cue" ".\\cd\\comma2.cue" ".\\cd\\redal4.cue" -t cdrom',
                'imgmount d ".\\eXoDOS\\comconra\\cd\\Red Alert Aftermath CD4.cue" -t cdrom': 'imgmount d ".\\cd\\redal4.cue" -t cdrom',
                'imgmount -u d\n': '\n',
                'imgmount d ".\\eXoDOS\\Blood\\cd\\bloodcd1.cue" -t cdrom': 'imgmount d ".\\cd\\BLOODCD1.cue" -t cdrom',
                'imgmount d ".\\eXoDOS\\comcon\\cd\\Command & Conquer CD-2.iso" ".\\eXoDOS\\comcon\\cd\\Command & Conquer CD-1.iso" ".\\eXoDOS\\comcon\\cd\\Covert Operations.cue" -t cdrom':
                'imgmount d ".\\cd\\comma2.cue" ".\\cd\\comma1.cue" ".\\cd\\cover3.cue" -t cdrom',
                'imgmount d ".\\eXoDOS\\comcon\\cd\\Covert Operations.cue" ".\\eXoDOS\\comcon\\cd\\Command & Conquer CD-2.iso" ".\\eXoDOS\\comcon\\cd\\Command & Conquer CD-1.iso" -t cdrom':
                    'imgmount d ".\\cd\\cover3.cue" ".\\cd\\comma2.cue" ".\\cd\\comma1.cue" -t cdrom',
            }
            for cmdline in runFile.readlines():
                # always remove @
                cmdline = cmdline.lstrip('@ ')
                if cmdline.lower().startswith("imgmount "):
                    cmdline = cmdline.rstrip(' \n\r')
                    if cmdline not in handled:
                        fixedCommand, letter = self.commandHandler.handleImgmount(cmdline, True)
                        runFileClone.write('imgmount -u ' + letter + '\n')  # prevents dosbox-pure automount
                        handled[cmdline] = fixedCommand
                    runFileClone.write(handled[cmdline])
                    if self.conversionConf['useDebugMode']:
                        runFileClone.write("\npause\n")
                    else:
                        runFileClone.write("\n")
                else:
                    runFileClone.write(cmdline)
            runFileClone.close()
            runFile.close()
            # Delete runbat and rename runbat clone to runbat
            os.remove(os.path.join(gGator.getLocalGameDataOutputDir(), 'run.bat'))
            os.rename(os.path.join(gGator.getLocalGameDataOutputDir(), 'run.bat1'), os.path.join(gGator.getLocalGameDataOutputDir(), 'run.bat'))
        else:
            self.logger.log('      <ERROR> run.bat not found', self.logger.ERROR)


================================================
FILE: data/C64Dreams.csv
================================================
10th Frame;10th Frame
180;180
1917;1917
1942;1942
1nvader;1nvader
2000 Kung-Fu Maniacs;2000 Kung-Fu Maniacs
221B Baker Street;221B Baker Street
2438 The Return;2438 The Return
3-D Pinball - Pinball Power;3-D Pinball - Pinball Power
3-D Skramble;3-D Skramble
360 Arm;360 Arm
3D Time Trek;3D Time Trek
4M Arena;4M Arena
4th & Inches;4th & Inches
4x4 Off-Road Racing;4x4 Off-Road Racing
5th Gear;5th Gear
720 Degrees;720 Degrees
747 Flight Simulator;747 Flight Simulator
8bit-Slicks;8bit-Slicks
Aaargh!;Aaargh!
Aardvark;Aardvark
Abyssonaut;Abyssonaut
Accolade Comics;Accolade Comics
ACE;ACE
ACE 2;ACE 2
ACE 2088;ACE 2088
Ace of Aces;Ace of Aces
Acid Rain;Acid Rain
Acid Runner;Acid Runner
Acro Jet;Acro Jet
Across the Galaxy;Across the Galaxy
Action Biker;Action Biker
Action Force;Action Force
Actionauts;Actionauts
Addams Family, The;Addams Family, The
Addicta Ball;Addicta Ball
Advanced Dungeons & Dragons - Champions of Krynn;Advanced Dungeons & Dragons - Champions of Krynn
Advanced Dungeons & Dragons - Curse of the Azure Bonds;Advanced Dungeons & Dragons - Curse of the Azure Bonds
Advanced Dungeons & Dragons - Death Knights of Krynn;Advanced Dungeons & Dragons - Death Knights of Krynn
Advanced Dungeons & Dragons - Dragons of Flame;Advanced Dungeons & Dragons - Dragons of Flame
Advanced Dungeons & Dragons - DragonStrike;Advanced Dungeons & Dragons - DragonStrike
Advanced Dungeons & Dragons - Heroes of the Lance;Advanced Dungeons & Dragons - Heroes of the Lance
Advanced Dungeons & Dragons - Pool of Radiance;Advanced Dungeons & Dragons - Pool of Radiance
Advanced Dungeons & Dragons - Secret of the Silver Blades;Advanced Dungeons & Dragons - Secret of the Silver Blades
Advanced Tactical Fighter;Advanced Tactical Fighter
Adventureland;Adventureland
Adventures of Alain, The;Adventures of Alain, The
Adventures of Basildon Bond, The;Adventures of Basildon Bond, The
Adventures of Jim Slim in Dragonland, The;Adventures of Jim Slim in Dragonland, The
Adventures of Tronic;Adventures of Tronic
After Burner (Activision);After Burner (Activision)
After Burner (Mindscape);After Burner (Mindscape)
After The War;After The War
Age of Heroes, The;Age of Heroes, The
Agent Orange;Agent Orange
Agent USA;Agent USA
Aghamix;Aghamix
Aidon - The Apocalypse;Aidon - The Apocalypse
Aigina's Prophecy;Aigina's Prophecy
Air Command;Air Command
Air Rescue;Air Rescue
Airborne Ranger;Airborne Ranger
Airwolf;Airwolf
Airwolf II;Airwolf II
Akalabeth - World of Doom;Akalabeth - World of Doom
Alcazar - The Forgotten Fortress;Alcazar - The Forgotten Fortress
Alcon;Alcon
Alea Jacta;Alea Jacta
Algol;Algol
Aliants - The Desperate Battle For Earth;Aliants - The Desperate Battle For Earth
Alice in Wonderland;Alice in Wonderland
Alien (Argus Press Software);Alien (Argus Press Software)
Alien (CP Verlag);Alien (CP Verlag)
Alien 3;Alien 3
Alien 8;Alien 8
Alien Bleed;Alien Bleed
Alien Infiltration;Alien Infiltration
Alien Infiltration II;Alien Infiltration II
Alien Infiltration III;Alien Infiltration III
Alien Infiltration IV;Alien Infiltration IV
Alien Kill;Alien Kill
Alien Kill II;Alien Kill II
Alien Research Centre 2;Alien Research Centre 2
Alien Storm;Alien Storm
Alien Syndrome;Alien Syndrome
Alien Task Force;Alien Task Force
Alien Task Force II;Alien Task Force II
Alienator;Alienator
Aliens - The Computer Game;Aliens - The Computer Game
Aliens - The Computer Game (Electric Dreams);Aliens - The Computer Game (Electric Dreams)
Alienworld;Alienworld
All New Family Feud;All New Family Feud
Alleykat;Alleykat
Alloyrun;Alloyrun
Almazz;Almazz
Alter Ego (RetroSouls);Alter Ego (RetroSouls)
Alter Ego - Female Version;Alter Ego - Female Version
Alter Ego - Male Version;Alter Ego - Male Version
Altered Beast;Altered Beast
Alternate Reality - The City;Alternate Reality - The City
Alternate Reality II - The Dungeon;Alternate Reality II - The Dungeon
Alternative World Games;Alternative World Games
Amaurote;Amaurote
Amaurote Isometric;Amaurote Isometric
Amazing Spider-Man, The;Amazing Spider-Man, The
Amazon (Commodore Disc);Amazon (Commodore Disc)
Amazon (Telarium);Amazon (Telarium)
Amazon Tales;Amazon Tales
Amazon Warrior;Amazon Warrior
Amulet, The;Amulet, The
Ancipital;Ancipital
Android Control;Android Control
Andy Capp;Andy Capp
Angel of the Hell;Angel of the Hell
Another Day Another Zombie;Another Day Another Zombie
Another World;Another World
Ant Attack;Ant Attack
Antarta;Antarta
Antics;Antics
APB - All Points Bulletin;APB - All Points Bulletin
Apeshit;Apeshit
Apollo 18;Apollo 18
Apoxoly;Apoxoly
Apple Cider Spider;Apple Cider Spider
Aqua Racer;Aqua Racer
Aquanaut;Aquanaut
Aquaplane;Aquaplane
Arac;Arac
Arachnophobia;Arachnophobia
Araknifoe;Araknifoe
Arc of Yesod, The;Arc of Yesod, The
Arcana;Arcana
Archer;Archer
Archer 2;Archer 2
Archipelago;Archipelago
Archon;Archon
Archon II;Archon II
Arctic Shipwreck;Arctic Shipwreck
Arcticfox;Arcticfox
Argos DX;Argos DX
Argus;Argus
Arhena the Amazon - Special Edition;Arhena the Amazon - Special Edition
Ark Pandora;Ark Pandora
Arkanoid;Arkanoid
Arkanoid - Revenge Of Doh;Arkanoid - Revenge Of Doh
Armalyte;Armalyte
Army Moves;Army Moves
Arnie;Arnie
Arnie 2;Arnie 2
Around the World in 80 Days;Around the World in 80 Days
Art from China;Art from China
Artax;Artax
Artillery '90;Artillery '90
Artillery Duel;Artillery Duel
Artillery Duel Deluxe;Artillery Duel Deluxe
Artura;Artura
Assault Machine;Assault Machine
Assembloids;Assembloids
Asterix and the Magic Cauldron;Asterix and the Magic Cauldron
Astex 64;Astex 64
Astonishing Adventures of Mr. Weems and the She Vampires, The;Astonishing Adventures of Mr. Weems and the She Vampires, The
Astro Chase;Astro Chase
Astro Marine Corps;Astro Marine Corps
Astro Pilot;Astro Pilot
Astrolab;Astrolab
Asylum;Asylum
Atic Atac;Atic Atac
Atom Ant;Atom Ant
Atom Heart;Atom Heart
Atomic Robo Kid;Atomic Robo Kid
Atomino;Atomino
Attack of the Mutant Camels;Attack of the Mutant Camels
ATV Simulator;ATV Simulator
Augie Doggie and Doggie Daddy;Augie Doggie and Doggie Daddy
Aurora;Aurora
Aurum;Aurum
Aussie Games;Aussie Games
Australopiticus Robustus;Australopiticus Robustus
Authentic Tetris, The;Authentic Tetris, The
Autoduel;Autoduel
Avenger;Avenger
Aviator Arcade II;Aviator Arcade II
Avoid;Avoid
Avoid the Noid;Avoid the Noid
Awakening;Awakening
Axis Assassin;Axis Assassin
Aztec Challenge;Aztec Challenge
Aztec Tomb Adventure;Aztec Tomb Adventure
B-Ball;B-Ball
B.C. II - Grog's Revenge;B.C. II - Grog's Revenge
B.C.'s Quest for Tires;B.C.'s Quest for Tires
Baal;Baal
Baby Blues;Baby Blues
Baby Jack II;Baby Jack II
Baby of Can Guru, The;Baby of Can Guru, The
Babylon's Ark;Babylon's Ark
Back To Reality;Back To Reality
Back To The Future;Back To The Future
Back To The Future II;Back To The Future II
Back To The Future Part III;Back To The Future Part III
Bad Blood;Bad Blood
Bad Cat;Bad Cat
Badlands;Badlands
Bagitman;Bagitman
Bagman Comes Back;Bagman Comes Back
Bagman Strikes Back;Bagman Strikes Back
Balakon Raider;Balakon Raider
Ball & Chain;Ball & Chain
Ball Blasta;Ball Blasta
Ball Crazy;Ball Crazy
Ball Game, The;Ball Game, The
Ballblazer;Ballblazer
Ballfever;Ballfever
Ballistix;Ballistix
Balloon Flight;Balloon Flight
Ballyhoo;Ballyhoo
Bandits;Bandits
Bangers & Mash;Bangers & Mash
Bangkok Knights;Bangkok Knights
Bank Run;Bank Run
Baphomet;Baphomet
Barakon;Barakon
Barbarian;Barbarian
Barbarian - The Ultimate Warrior;Barbarian - The Ultimate Warrior
Barbarian II;Barbarian II
Barbie;Barbie
Bard's Tale II, The;Bard's Tale II, The
Bard's Tale III, The;Bard's Tale III, The
Bard's Tale, The;Bard's Tale, The
Barney;Barney
Barry McGuigan World Championship Boxing;Barry McGuigan World Championship Boxing
Basil The Great Mouse Detective;Basil The Great Mouse Detective
Basket Manager, The;Basket Manager, The
Basket Master;Basket Master
BAT;BAT
Batalyx;Batalyx
Batman;Batman
Batman - The Caped Crusader;Batman - The Caped Crusader
Battle Chess;Battle Chess
Battle Command;Battle Command
Battle Droidz;Battle Droidz
Battle for Midway;Battle for Midway
Battle for Normandy;Battle for Normandy
Battle Kingdom;Battle Kingdom
Battle of Britain;Battle of Britain
Battle of the Planets;Battle of the Planets
Battle of Yavin, The;Battle of Yavin, The
Battle Ships;Battle Ships
Battle Throne;Battle Throne
Battle Through Time;Battle Through Time
Battle Valley;Battle Valley
Battlefield;Battlefield
Battlefield Earth;Battlefield Earth
Battletech - The Crescent Hawk's Inception;Battletech - The Crescent Hawk's Inception
Battletrance;Battletrance
Battlezone;Battlezone
Battlot;Battlot
Bazair;Bazair
Bazooka Bill;Bazooka Bill
Bburago Rally;Bburago Rally
Beach Bar;Beach Bar
Beach-Head;Beach-Head
Beach-Head II - The Dictator Strikes Back;Beach-Head II - The Dictator Strikes Back
Beamrider;Beamrider
Bear Essentials, The;Bear Essentials, The
Beatle Quest;Beatle Quest
Beatnik Bert;Beatnik Bert
Bedlam;Bedlam
Beer Belly Burt's Brew Biz;Beer Belly Burt's Brew Biz
Bellringer;Bellringer
Bellringer II;Bellringer II
Bellringer III;Bellringer III
Below the Root;Below the Root
Beneath Folly;Beneath Folly
Beneath the Tenement;Beneath the Tenement
Bergbert der Racher;Bergbert der Racher
Bergbert III - The Blue Knight;Bergbert III - The Blue Knight
Berks Four;Berks Four
Berzerk;Berzerk
Berzerk Redux;Berzerk Redux
Betrayal;Betrayal
Better Dead Than Alien!;Better Dead Than Alien!
Beverly Hills Cop;Beverly Hills Cop
Beyond Castle Wolfenstein;Beyond Castle Wolfenstein
Beyond Dark Castle;Beyond Dark Castle
Beyond Night Run;Beyond Night Run
Beyond the Forbidden Forest;Beyond the Forbidden Forest
Beyond the Ice Palace;Beyond the Ice Palace
Biff;Biff
Big Ben;Big Ben
Big Deal, The;Big Deal, The
Big Game Fishing;Big Game Fishing
Big K.O., The;Big K.O., The
Big Mac;Big Mac
Big Nose's American Adventure;Big Nose's American Adventure
Big Sleaze, The;Big Sleaze, The
Big Trouble In Little China;Big Trouble In Little China
Bigfoot;Bigfoot
Biggles;Biggles
Bigtop Barney;Bigtop Barney
BinTris;BinTris
Bio War;Bio War
Bio War II;Bio War II
Bionic Commando;Bionic Commando
Bionic Granny;Bionic Granny
Bionic Granny Returns;Bionic Granny Returns
Bionic Ninja;Bionic Ninja
Birdie Bird;Birdie Bird
Birds, The;Birds, The
Black Gold;Black Gold
Black Hawk;Black Hawk
Black Hole;Black Hole
Black Holes;Black Holes
Black Hornet;Black Hornet
Black It!;Black It!
Black Knight (Interdisc);Black Knight (Interdisc)
Black Knight (TimSoft);Black Knight (TimSoft)
Black Lamp;Black Lamp
Black Magic;Black Magic
Black Panther;Black Panther
Black Pearl, The;Black Pearl, The
Black Tiger;Black Tiger
Blackwyche;Blackwyche
Blade of Blackpoole, The;Blade of Blackpoole, The
Blade Runner;Blade Runner
Blades of Steel;Blades of Steel
Blagger;Blagger
Blagger Goes to Hollywood;Blagger Goes to Hollywood
Blasteroids;Blasteroids
Blastopia;Blastopia
Blastopia DX;Blastopia DX
Blazing Thunder;Blazing Thunder
Blinky's Scary School;Blinky's Scary School
Blipblaster;Blipblaster
Blitz 3000;Blitz 3000
Blizzard! Part I - Commando Libya;Blizzard! Part I - Commando Libya
Block Out;Block Out
Blockade Runner;Blockade Runner
Blok Copy;Blok Copy
Blood 'n Guts;Blood 'n Guts
Blood Brothers;Blood Brothers
Blood Money;Blood Money
Blood Valley;Blood Valley
Bloodwheels;Bloodwheels
Bloodwych;Bloodwych
Blue Baron;Blue Baron
Blue Encounter, The;Blue Encounter, The
Blue Max;Blue Max
Blue Max 2001;Blue Max 2001
Blue Thunder;Blue Thunder
Blueprint;Blueprint
Blues Brothers;Blues Brothers
BMX Freestyle;BMX Freestyle
BMX Kidz;BMX Kidz
BMX Simulator;BMX Simulator
BMX Simulator II;BMX Simulator II
Bob Nixie and the Castle of Illusion;Bob Nixie and the Castle of Illusion
Bob Winner;Bob Winner
Bobby Bearing;Bobby Bearing
Bobby Bounce Back;Bobby Bounce Back
Bobix;Bobix
Bod Squad, The;Bod Squad, The
Body Slam;Body Slam
BOFH - Servers Under Siege;BOFH - Servers Under Siege
Boggit, The;Boggit, The
Bomb Chase - 2009 Special Edition;Bomb Chase - 2009 Special Edition
Bomb Fusion;Bomb Fusion
Bomb Jack;Bomb Jack
Bomb Jack II;Bomb Jack II
Bomb Uzal;Bomb Uzal
Bomberman C64;Bomberman C64
Bombo;Bombo
Bonanza Bros;Bonanza Bros
Bone Cruncher;Bone Cruncher
Bongo;Bongo
Book of the Dead;Book of the Dead
Boom (567 KByte);Boom (567 KByte)
Boom (Brainstorm Amazing Software);Boom (Brainstorm Amazing Software)
Bootskell;Bootskell
Booty;Booty
Bop'n Rumble;Bop'n Rumble
Bop'n Wrestle;Bop'n Wrestle
Border Blast 2;Border Blast 2
Border Blast 3;Border Blast 3
Border War;Border War
Bored of the Rings;Bored of the Rings
Borrowed Time;Borrowed Time
Bosconian 87;Bosconian 87
Bottles Killer;Bottles Killer
Boulder Dash;Boulder Dash
Boulder Dash II;Boulder Dash II
Boulder Dash III;Boulder Dash III
Bounce;Bounce
Bouncer;Bouncer
Bounces;Bounces
Bouncing Heads;Bouncing Heads
Bouncy Balls;Bouncy Balls
Bounder;Bounder
Bounty Bob Strikes Back!;Bounty Bob Strikes Back!
Bounty Hunter (River Software);Bounty Hunter (River Software)
Bounty Hunter II;Bounty Hunter II
Bowman;Bowman
Boxer, The;Boxer, The
Boxes;Boxes
Boxing Champion;Boxing Champion
Boxworld;Boxworld
BoxyMoxy;BoxyMoxy
Bozo's Night Out;Bozo's Night Out
Bozuma - Mystery of the Mummy;Bozuma - Mystery of the Mummy
Brainstorm;Brainstorm
Brainway;Brainway
BraveStarr;BraveStarr
Break Street;Break Street
Breakdance;Breakdance
Breakers;Breakers
Breakthru;Breakthru
Brektwon - The Curse of the Keys;Brektwon - The Curse of the Keys
Brew, The;Brew, The
Brian Bloodaxe;Brian Bloodaxe
Brian Jacks Superstar Challenge;Brian Jacks Superstar Challenge
Bride of Frankenstein;Bride of Frankenstein
Briley Witch Chronicles;Briley Witch Chronicles
Brimstone - The Dream of Gawain;Brimstone - The Dream of Gawain
Bristles;Bristles
Bronx Medal;Bronx Medal
Brothers in Arms;Brothers in Arms
Brothers of the Bow;Brothers of the Bow
Brubaker;Brubaker
Bruce Lee;Bruce Lee
Bruce Lee - Return of Fury;Bruce Lee - Return of Fury
Bruce Lee II;Bruce Lee II
Bubble Bobble;Bubble Bobble
Bubble Bobble II;Bubble Bobble II
Bubble Dizzy;Bubble Dizzy
Bubble Ghost;Bubble Ghost
Bubbler;Bubbler
Buck Rogers - Countdown to Doomsday;Buck Rogers - Countdown to Doomsday
Buck Rogers - Planet of Zoom;Buck Rogers - Planet of Zoom
Bucket Wars;Bucket Wars
Buddy Bubble;Buddy Bubble
Budokan - The Martial Spirit;Budokan - The Martial Spirit
Buffalo Bill's Wild West Show;Buffalo Bill's Wild West Show
Buffalo Roundup;Buffalo Roundup
Bug Hunt;Bug Hunt
Bugbomber;Bugbomber
Buggy Boy;Buggy Boy
BugOut 2019;BugOut 2019
Bugs Bunny - Private Eye;Bugs Bunny - Private Eye
Bugs Inc;Bugs Inc
Bugsy;Bugsy
Bulbo and the Lizard King;Bulbo and the Lizard King
Bulge, The;Bulge, The
Bulldog;Bulldog
Bullet;Bullet
Bump Set Spike;Bump Set Spike
BurgerTime;BurgerTime
Burnin' Rubber;Burnin' Rubber
Bushido - The Way of the Warrior;Bushido - The Way of the Warrior
Butcher Hill;Butcher Hill
By Fair Means... or Foul!;By Fair Means... or Foul!
C'Notte D'Knight;C'Notte D'Knight
C-2048;C-2048
C5 Clive;C5 Clive
C64 Rescue;C64 Rescue
C64 Snail Maze;C64 Snail Maze
C64anabalt;C64anabalt
C64Maze;C64Maze
Cabal;Cabal
Cad-Cam Warrior;Cad-Cam Warrior
California Driver;California Driver
California Games;California Games
California Goldrush;California Goldrush
California Pro Golf;California Pro Golf
California Raisins and the Cereal Factory, The;California Raisins and the Cereal Factory, The
Call Me Psycho;Call Me Psycho
Call of Cthulhu, The;Call of Cthulhu, The
Calvin;Calvin
Camel Trophy;Camel Trophy
Camelot;Camelot
Camelot Warriors;Camelot Warriors
Camels in Space;Camels in Space
Canals of Mars, The;Canals of Mars, The
Cannon Craze;Cannon Craze
Cannon Fodder;Cannon Fodder
Captain America in The Doom Tube of Dr. Megalomann;Captain America in The Doom Tube of Dr. Megalomann
Captain Blood;Captain Blood
Captain Cloudberry;Captain Cloudberry
Captain Dynamo;Captain Dynamo
Captain Fizz;Captain Fizz
Captain Kidd;Captain Kidd
Captain Power and the Soldiers of the Future;Captain Power and the Soldiers of the Future
Captain Stark;Captain Stark
Captive, The;Captive, The
Captured;Captured
Card Land;Card Land
Card Sharks;Card Sharks
Caren and the Tangled Tentacles;Caren and the Tangled Tentacles
Cargo;Cargo
Cargo (Loadstar);Cargo (Loadstar)
Carnage;Carnage
Carrier Command;Carrier Command
Carry on Laughing;Carry on Laughing
Cash 'n' Grab;Cash 'n' Grab
Cashman;Cashman
Casino Simulator;Casino Simulator
Castle (LK Avalon);Castle (LK Avalon)
Castle (Protocol Productions);Castle (Protocol Productions)
Castle Blackstar;Castle Blackstar
Castle Dracula;Castle Dracula
Castle Dungeon;Castle Dungeon
Castle Master;Castle Master
Castle Master II - The Crypt;Castle Master II - The Crypt
Castle of Jasoom;Castle of Jasoom
Castle of Kraizar, The;Castle of Kraizar, The
Castle of Life;Castle of Life
Castle of Madness, The;Castle of Madness, The
Castle of Terror;Castle of Terror
Castle Shadowgate;Castle Shadowgate
Castle Wolfenstein;Castle Wolfenstein
Castle, The;Castle, The
Castles of Doctor Creep, The;Castles of Doctor Creep, The
Castlevania;Castlevania
Catacombs;Catacombs
Catacombs of Cherubim, The;Catacombs of Cherubim, The
Catacombs of Gold;Catacombs of Gold
Catalypse;Catalypse
Catch A Thief;Catch A Thief
Catch II;Catch II
Cauldron;Cauldron
Cauldron II;Cauldron II
Causes of Chaos, The;Causes of Chaos, The
Cave Climber;Cave Climber
Cave Fighter;Cave Fighter
Cave of Time, The;Cave of Time, The
Cave-Quest;Cave-Quest
Cavelon;Cavelon
Caveman;Caveman
Caveman Ugh-lympics;Caveman Ugh-lympics
Cavemania;Cavemania
Caverns of Eriban, The;Caverns of Eriban, The
Caverns of Khafka;Caverns of Khafka
Caverns of Sillahc;Caverns of Sillahc
Caverns of Xydrahpur;Caverns of Xydrahpur
Caves of Oberon, The;Caves of Oberon, The
Caves, The;Caves, The
Celler, The;Celler, The
Celluloid;Celluloid
Centauri Alliance;Centauri Alliance
Centipede;Centipede
Centric;Centric
Centron;Centron
Centurions Power X Treme;Centurions Power X Treme
Chain Reaction;Chain Reaction
Challenge of the Gobots;Challenge of the Gobots
Challenger;Challenger
Chambers of Shaolin;Chambers of Shaolin
Chameleon;Chameleon
Chamonix Challenge;Chamonix Challenge
Champ, The;Champ, The
Championship 3D Snooker;Championship 3D Snooker
Championship Baseball;Championship Baseball
Championship Jet Ski Simulator;Championship Jet Ski Simulator
Championship of Europe;Championship of Europe
Championship Sprint;Championship Sprint
Championship Wrestling;Championship Wrestling
Chance in Hell, A;Chance in Hell, A
Chaos;Chaos
Chaos Road;Chaos Road
Chase HQ;Chase HQ
Chase HQ II - Special Criminal Investigation;Chase HQ II - Special Criminal Investigation
Chase on Tom Sawyer's Island, The;Chase on Tom Sawyer's Island, The
Cheap Skate;Cheap Skate
Cheeky Twins;Cheeky Twins
Cheeky Twins II;Cheeky Twins II
Cheeseburger;Cheeseburger
Chef Quest;Chef Quest
Cherry Dash;Cherry Dash
Chess Chiller;Chess Chiller
Chessmaster 2100;Chessmaster 2100
Chester Field;Chester Field
Chicago 30's;Chicago 30's
Chickin Chase;Chickin Chase
Chiller;Chiller
Chilly Willy;Chilly Willy
Chimera;Chimera
China Miner;China Miner
Chip's Challenge;Chip's Challenge
Cholo;Cholo
Chomp!;Chomp!
Choplifter;Choplifter
Chopper;Chopper
Chopper Command;Chopper Command
Chopper Commander;Chopper Commander
Chopper Hunt;Chopper Hunt
Chrome Brothers, The;Chrome Brothers, The
Chubby Chester;Chubby Chester
Chubby Gristle;Chubby Gristle
Chuck Rock;Chuck Rock
Chuckie Egg;Chuckie Egg
Chuckie Egg II;Chuckie Egg II
Chute Pursuit;Chute Pursuit
Ciphoid 9;Ciphoid 9
Circuit (CP Verlag);Circuit (CP Verlag)
Circus Attractions;Circus Attractions
Circus Charlie;Circus Charlie
Circus Circus;Circus Circus
Circus Games;Circus Games
Cisco Heat;Cisco Heat
Citadel;Citadel
Citadel of Chaos, The;Citadel of Chaos, The
Citadel of Corruption;Citadel of Corruption
City Fighter;City Fighter
City Survivor;City Survivor
Cityattak!;Cityattak!
CJ in the USA;CJ in the USA
CJ's Elephant Antics;CJ's Elephant Antics
Clean Up Time;Clean Up Time
Cleanup Service;Cleanup Service
Cleo the Dog;Cleo the Dog
Clever & Smart;Clever & Smart
Cliff Hanger;Cliff Hanger
Clik Clak;Clik Clak
Climber!;Climber!
Cloud King;Cloud King
Cloud Kingdoms;Cloud Kingdoms
Cloud Strike;Cloud Strike
Club House Sports;Club House Sports
Clue - Master Detective;Clue - Master Detective
Clystron;Clystron
Co & Co;Co & Co
Co-Axis;Co-Axis
Coalminer;Coalminer
Cobra;Cobra
Cobra Force;Cobra Force
Cobra Mission;Cobra Mission
Cobra Mission 2;Cobra Mission 2
Code Hunter;Code Hunter
Codename Desert Storm;Codename Desert Storm
Codename-Mat II;Codename-Mat II
Codeword Arguseye in Secret Mission;Codeword Arguseye in Secret Mission
Cohen's Towers;Cohen's Towers
Coin Quest;Coin Quest
Colee;Colee
Collapse;Collapse
Colonial Trader;Colonial Trader
Colony;Colony
Colora;Colora
Colorado Smith and the Lost Pyramid;Colorado Smith and the Lost Pyramid
Colossal Cave Adventure;Colossal Cave Adventure
Colossus Chess 4;Colossus Chess 4
Colour of Magic, The;Colour of Magic, The
Coltfire;Coltfire
Combat Course;Combat Course
Combat Crazy;Combat Crazy
Combat Leader;Combat Leader
Combat Lynx;Combat Lynx
Combat School;Combat School
Combat Zone;Combat Zone
Combots;Combots
Comet;Comet
Comet Game, The;Comet Game, The
Comic Bakery;Comic Bakery
Commando;Commando
Commando Arcade SE;Commando Arcade SE
Complex;Complex
Computer Squares;Computer Squares
Con-Quest;Con-Quest
Conan;Conan
Conflict in Vietnam;Conflict in Vietnam
Confuzion;Confuzion
Congo Bongo;Congo Bongo
Congo Bongo (Disk Version);Congo Bongo (Disk Version)
Connection;Connection
Connection Gravity;Connection Gravity
Continental Circus;Continental Circus
Contura;Contura
Convoy Raider;Convoy Raider
Cookie;Cookie
Cool Croc Twins;Cool Croc Twins
Cool World;Cool World
Cops;Cops
Cops 'N' Robbers;Cops 'N' Robbers
Cops Fight Back;Cops Fight Back
Cops III;Cops III
Cops IV;Cops IV
CORE;CORE
Corom;Corom
Corruption;Corruption
Corx - Rebel Racers;Corx - Rebel Racers
Cosmic Ark;Cosmic Ark
Cosmic Causeway - Trailblazer II;Cosmic Causeway - Trailblazer II
Cosmic Cavern;Cosmic Cavern
Cosmic Combat;Cosmic Combat
Cosmic Combat DX;Cosmic Combat DX
Cosmic Cruiser;Cosmic Cruiser
Cosmic Hero;Cosmic Hero
Cosmic Meals;Cosmic Meals
Cosmic Pirate;Cosmic Pirate
Cosmic Tunnels;Cosmic Tunnels
Cosmonut;Cosmonut
Cosmox;Cosmox
Count Duckula;Count Duckula
Count Duckula II;Count Duckula II
Countdown to Meltdown;Countdown to Meltdown
Counter Force;Counter Force
Cowboy Duel - Live Your Dream!;Cowboy Duel - Live Your Dream!
Cowboy Kidz;Cowboy Kidz
Crack Down;Crack Down
Crack of Doom, The;Crack of Doom, The
Cracker in Space II;Cracker in Space II
Crackpots;Crackpots
Crazy Car;Crazy Car
Crazy Cars;Crazy Cars
Crazy Cars II;Crazy Cars II
Crazy Cars III;Crazy Cars III
Crazy Comets;Crazy Comets
Crazy Jogger;Crazy Jogger
Crazy Paving;Crazy Paving
Crazy Sue;Crazy Sue
Creatures;Creatures
Creatures II - Torture Trouble;Creatures II - Torture Trouble
Cred Breaks Out;Cred Breaks Out
Crillion;Crillion
Crime and Punishment;Crime and Punishment
Crime Time;Crime Time
Crisis Mountain;Crisis Mountain
Critical Mass;Critical Mass
Critters;Critters
Cross'n Circle;Cross'n Circle
Crossbow;Crossbow
Crossfire (Atlantis Software);Crossfire (Atlantis Software)
Crossroads;Crossroads
Crossroads II;Crossroads II
Crown;Crown
Crown of Eternal Night, The;Crown of Eternal Night, The
Crusade in Europe;Crusade in Europe
Crush;Crush
Crush, Crumble & Chomp;Crush, Crumble & Chomp
Crypt of Fear;Crypt of Fear
Crypt of the Pharaoh;Crypt of the Pharaoh
Crystal Castles;Crystal Castles
Crystal Fever;Crystal Fever
Crystal Frog;Crystal Frog
Crystal Kingdom Dizzy;Crystal Kingdom Dizzy
Crystals of Carus, The;Crystals of Carus, The
Curse of Babylon;Curse of Babylon
Curse of Ra, The;Curse of Ra, The
Curse of Rabenstein, The;Curse of Rabenstein, The
Curse of Rabenstein, The - 40th Anniversary Edition;Curse of Rabenstein, The - 40th Anniversary Edition
Curse of Sherwood, The;Curse of Sherwood, The
Curse, The;Curse, The
Cursed be the City;Cursed be the City
Custer;Custer
Cut-In;Cut-In
Cyball;Cyball
Cyber Kid;Cyber Kid
Cyber Kid II;Cyber Kid II
Cyber World;Cyber World
Cyberball;Cyberball
Cyberblocks;Cyberblocks
Cyberdyne Warrior;Cyberdyne Warrior
Cybernoid;Cybernoid
Cybernoid II - The Revenge;Cybernoid II - The Revenge
Cyberwing;Cyberwing
Cybex;Cybex
Cybo-Cop;Cybo-Cop
Cyborg;Cyborg
Cyborg 2900;Cyborg 2900
Cyborg Hunter 2025;Cyborg Hunter 2025
Cycle Knight;Cycle Knight
Cycles, The;Cycles, The
Cylu;Cylu
Cyrus;Cyrus
D.I.S.C. - Damned Into Space-Craft;D.I.S.C. - Damned Into Space-Craft
Daedalus;Daedalus
Daffy Duck;Daffy Duck
Dalek Attack;Dalek Attack
Daley Thompson's Decathlon;Daley Thompson's Decathlon
Daley Thompson's Olympic Challenge;Daley Thompson's Olympic Challenge
Daley Thompson's Supertest;Daley Thompson's Supertest
Dallas Quest, The;Dallas Quest, The
Dam Busters, The;Dam Busters, The
Dan Cooper;Dan Cooper
Dan Dare - Pilot of the Future;Dan Dare - Pilot of the Future
Dan Dare II - Mekon's Revenge;Dan Dare II - Mekon's Revenge
Dan Dare III - The Escape;Dan Dare III - The Escape
Dance of the Vampires;Dance of the Vampires
Dandy;Dandy
Danger Drive;Danger Drive
Danger Freak;Danger Freak
Danger Mouse in Double Trouble;Danger Mouse in Double Trouble
Dante's Department Store;Dante's Department Store
Dante's Inferno;Dante's Inferno
Dark Castle;Dark Castle
Dark Catacombs;Dark Catacombs
Dark Caves;Dark Caves
Dark Empire;Dark Empire
Dark Force Redux;Dark Force Redux
Dark Fusion;Dark Fusion
Dark Lord;Dark Lord
Dark Side;Dark Side
Dark Sky Over Paradise, A;Dark Sky Over Paradise, A
Dark Star;Dark Star
Dark Tower, The;Dark Tower, The
Darkhold;Darkhold
Darkhorn;Darkhorn
Darkipede;Darkipede
Darkland;Darkland
Darkland - The Lost Realm;Darkland - The Lost Realm
Darkman;Darkman
Darkness;Darkness
Darksword, The;Darksword, The
Dartz;Dartz
Dave Speed and the Mutants;Dave Speed and the Mutants
David's Midnight Magic;David's Midnight Magic
Davy - King of the Wild Frontier;Davy - King of the Wild Frontier
Dawn Beyond UB-11 - Motorhead II;Dawn Beyond UB-11 - Motorhead II
Dawn Patrol;Dawn Patrol
Dawn Treader;Dawn Treader
Deactivators;Deactivators
Dead or Alive;Dead or Alive
Dead Zone;Dead Zone
Deadline (Infocom);Deadline (Infocom)
Deadline (Visualize Software);Deadline (Visualize Software)
Deadly Evil;Deadly Evil
Deadly Messengers;Deadly Messengers
Deadly Thunder;Deadly Thunder
Deadringer;Deadringer
Deadzone;Deadzone
Death Battle 2200;Death Battle 2200
Death Bringer;Death Bringer
Death or Glory;Death or Glory
Death Rattle;Death Rattle
Death Saw Challenge;Death Saw Challenge
Death Wake;Death Wake
Death Weapon;Death Weapon
Death Wish III;Death Wish III
Deathscape;Deathscape
Decathlon;Decathlon
Deceptor;Deceptor
Decision in the Desert;Decision in the Desert
Declem;Declem
Decton;Decton
Dedale;Dedale
Deep Star;Deep Star
Deep, The;Deep, The
Defcom;Defcom
Defender;Defender
Defender of the Crown;Defender of the Crown
Defenders of the Earth;Defenders of the Earth
Deflectors;Deflectors
Deflektor;Deflektor
Deja Vu;Deja Vu
Deliverance (The Power House);Deliverance (The Power House)
Deliverance - Stormlord II;Deliverance - Stormlord II
Delta;Delta
Delta Fighter;Delta Fighter
Delta Man;Delta Man
Delve - The Goblin's Grotto;Delve - The Goblin's Grotto
Demigod;Demigod
Demon Attack;Demon Attack
Demon Blues;Demon Blues
Demon Stalkers;Demon Stalkers
Demon Star II;Demon Star II
Demon's Kiss;Demon's Kiss
Demon's Winter;Demon's Winter
Demons of Dex;Demons of Dex
Demons of Topaz;Demons of Topaz
Denarius;Denarius
Deneb;Deneb
Denga;Denga
Denniffia;Denniffia
Desert Fox;Desert Fox
Desert Hawk;Desert Hawk
Desert Trader;Desert Trader
Desolator;Desolator
Destroyer;Destroyer
Destroyer Escort;Destroyer Escort
Destruct;Destruct
Detective Game, The;Detective Game, The
Deus Ex Machina;Deus Ex Machina
Devil's Gallery;Devil's Gallery
Devil's Wheel;Devil's Wheel
Devon Aire in the Hidden Diamond Caper;Devon Aire in the Hidden Diamond Caper
Di-Art - Moebius II;Di-Art - Moebius II
Diamond Mine;Diamond Mine
Dice Skater;Dice Skater
Dicing With Death;Dicing With Death
Dick Tracy;Dick Tracy
Dicky's Diamonds;Dicky's Diamonds
Didrik The Diver;Didrik The Diver
Die Hard;Die Hard
Die Hard 2 - Die Harder;Die Hard 2 - Die Harder
Die! Alien Slime;Die! Alien Slime
Dig Dug;Dig Dug
Digger;Digger
Digiloi;Digiloi
Digital Tangram;Digital Tangram
Dino Eggs;Dino Eggs
Dino Wars;Dino Wars
Dinorace 64;Dinorace 64
Dioroid;Dioroid
Dip Diver;Dip Diver
Discovery;Discovery
Dizzy;Dizzy
Dizzy - Down the Rapids;Dizzy - Down the Rapids
Dizzy - Prince of the Yolkfolk;Dizzy - Prince of the Yolkfolk
DJ Puff's Volcanic Capers;DJ Puff's Volcanic Capers
Django;Django
DNA Warrior;DNA Warrior
Doc Cosmos;Doc Cosmos
Doc the Destroyer;Doc the Destroyer
Doctor Doom's Revenge;Doctor Doom's Revenge
Doctor Who and the Mines of Terror;Doctor Who and the Mines of Terror
Dodgeball II;Dodgeball II
Dodgy Geezers;Dodgy Geezers
Dodo's Deep Doo-Doo;Dodo's Deep Doo-Doo
Dog;Dog
Dogboy, The;Dogboy, The
Dogfight 2187;Dogfight 2187
Domain;Domain
Dominator;Dominator
Dominion;Dominion
Donald Duck's Playground;Donald Duck's Playground
Donald The Hero;Donald The Hero
Donald's Alphabet Chase;Donald's Alphabet Chase
Donald's Snow Fight;Donald's Snow Fight
Donkey Kong (Atari);Donkey Kong (Atari)
Donkey Kong (Ocean);Donkey Kong (Ocean)
Donkey Kong (Oxyron);Donkey Kong (Oxyron)
Donkey Kong Junior;Donkey Kong Junior
Doomdark's Revenge;Doomdark's Revenge
Doriath;Doriath
Double Dare (Alternative Software);Double Dare (Alternative Software)
Double Dare (GameTek);Double Dare (GameTek)
Double Digger;Double Digger
Double Dragon (Melbourne House);Double Dragon (Melbourne House)
Double Dragon (Ocean);Double Dragon (Ocean)
Double Dragon 2;Double Dragon 2
Double Dragon 3;Double Dragon 3
Double Dribble;Double Dribble
Double Lizard;Double Lizard
Doughboy;Doughboy
Down at the Trolls;Down at the Trolls
Down, Down, Down;Down, Down, Down
Downhill Challenge;Downhill Challenge
Dr. Jekyll and Mr. Hyde;Dr. Jekyll and Mr. Hyde
Dr. Mad vs. the Topsy Turvy Moon Men of Mars;Dr. Mad vs. the Topsy Turvy Moon Men of Mars
Draconus;Draconus
Dracula;Dracula
Dracula's Castle;Dracula's Castle
Drag Race Eliminator;Drag Race Eliminator
Dragon;Dragon
Dragon Breed;Dragon Breed
Dragon Hunter;Dragon Hunter
Dragon Ninja;Dragon Ninja
Dragon Skulle;Dragon Skulle
Dragon Spirit;Dragon Spirit
Dragon Wars;Dragon Wars
Dragon's Kingdom;Dragon's Kingdom
Dragon's Lair;Dragon's Lair
Dragon's Lair Part II - Escape From Singe's Castle;Dragon's Lair Part II - Escape From Singe's Castle
Dragonfire;Dragonfire
DragonHawk;DragonHawk
Dragonriders of Pern;Dragonriders of Pern
Dragons Cave;Dragons Cave
Dragonsden;Dragonsden
Dragonworld;Dragonworld
Drak;Drak
Dream Team Basketball;Dream Team Basketball
Dream Warrior;Dream Warrior
Dreamcars;Dreamcars
Drelbs;Drelbs
Driller;Driller
Drip;Drip
Droid;Droid
Droid Dreams;Droid Dreams
Droid Rumble;Droid Rumble
Droids;Droids
Drol;Drol
Dropzone;Dropzone
Druid;Druid
Druid 2;Druid 2
Drunken Chopsticks;Drunken Chopsticks
Duck Hunt;Duck Hunt
Duck Tales;Duck Tales
Ducks Ahoy!;Ducks Ahoy!
Duel, The;Duel, The
Dungeon Blaster;Dungeon Blaster
Dungeon Crawl;Dungeon Crawl
Dungeon Explorer;Dungeon Explorer
Dungeon of Rott;Dungeon of Rott
Dungeon Trials;Dungeon Trials
Dungeons of Ba;Dungeons of Ba
Dungeons of Doom;Dungeons of Doom
Dunjon Battler;Dunjon Battler
Dunwich Horror, The;Dunwich Horror, The
Dunzhin;Dunzhin
Dustin';Dustin'
Dylan Dog;Dylan Dog
Dylan Dog - The Full Moon Nights;Dylan Dog - The Full Moon Nights
Dynamite Dan;Dynamite Dan
Dynamite Dux;Dynamite Dux
Dynamix;Dynamix
Dynamoid;Dynamoid
Dynasty Wars;Dynasty Wars
Dystopia;Dystopia
Dyter-07;Dyter-07
E-Motion;E-Motion
E-SWAT;E-SWAT
Eagle Empire;Eagle Empire
Eagles;Eagles
Earl the Tomb Robber;Earl the Tomb Robber
Earth Orbit Stations;Earth Orbit Stations
Echelon;Echelon
Echo Hawk;Echo Hawk
Edd the Duck;Edd the Duck
Eddie Kidd Jump Challenge;Eddie Kidd Jump Challenge
Edge Grinder;Edge Grinder
Eggland;Eggland
Eggman;Eggman
Eidolon, The;Eidolon, The
Eight Feet Under;Eight Feet Under
Election;Election
Electric Warrior;Electric Warrior
Electro World;Electro World
Elektraglide;Elektraglide
Elektrix;Elektrix
Elevator Action;Elevator Action
Elevator Eric;Elevator Eric
Elf Caper;Elf Caper
Elidon;Elidon
Eliminator;Eliminator
Elite;Elite
Elite Squad;Elite Squad
Ellak's Tomb;Ellak's Tomb
Elsoliado;Elsoliado
Elven Warrior;Elven Warrior
Elvira - Mistress of the Dark;Elvira - Mistress of the Dark
Elvira - The Arcade Game;Elvira - The Arcade Game
Elvira II;Elvira II
Emerald Isle;Emerald Isle
Emerald Miner;Emerald Miner
Emlyn Hughes International Soccer;Emlyn Hughes International Soccer
Empire;Empire
Empire of Karn;Empire of Karn
Empire Strikes Back, The;Empire Strikes Back, The
Enchanter;Enchanter
Encounter;Encounter
Endless;Endless
Endless Forms Most Beautiful;Endless Forms Most Beautiful
Enduro Racer;Enduro Racer
Energy Manager;Energy Manager
Energy Warrior;Energy Warrior
Enforcer - Fullmetal Megablaster;Enforcer - Fullmetal Megablaster
Enforcer, The;Enforcer, The
Enigma;Enigma
Enigma Force;Enigma Force
Entity;Entity
Entombed;Entombed
Enzyme;Enzyme
Eon;Eon
Epsilon IV;Epsilon IV
Equinox;Equinox
Erebus;Erebus
Escape (S+S Soft);Escape (S+S Soft)
Escape (Timsoft);Escape (Timsoft)
Escape from Arth;Escape from Arth
Escape from Doomworld;Escape from Doomworld
Escape from New York;Escape from New York
Escape from Paradise;Escape from Paradise
Escape from SEUCK;Escape from SEUCK
Escape from Stank;Escape from Stank
Escape from the Dark Prison;Escape from the Dark Prison
Escape from the Killer Robots!;Escape from the Killer Robots!
Escape from the Planet of the Robot Monsters;Escape from the Planet of the Robot Monsters
Escape from the Shire;Escape from the Shire
Escape MCP;Escape MCP
Escape New York;Escape New York
Escape or Bust;Escape or Bust
Escape Route;Escape Route
Escape to Murky Woods;Escape to Murky Woods
Eskimo Games;Eskimo Games
Espionage;Espionage
Essex;Essex
Estra;Estra
Eszkimo;Eszkimo
Eternal;Eternal
Eternal Dagger, The;Eternal Dagger, The
Eureka!;Eureka!
Euro City Cops;Euro City Cops
Every Second Counts;Every Second Counts
Everyday Tale of a Seeker of Gold;Everyday Tale of a Seeker of Gold
Everyone's a Wally;Everyone's a Wally
Evil Crown;Evil Crown
Evil Dead, The;Evil Dead, The
Evil Dungeon;Evil Dungeon
Evil Garden;Evil Garden
Evil Prince, The;Evil Prince, The
Evil Wizard II;Evil Wizard II
Evolution;Evolution
Ewe Woz 'Ere;Ewe Woz 'Ere
Examination, The;Examination, The
Exceleron;Exceleron
Exile;Exile
Exodus;Exodus
Exolon;Exolon
Exorcist (Magic Bytes);Exorcist (Magic Bytes)
Exorcist (Mr. Micro);Exorcist (Mr. Micro)
Expedition Amazon;Expedition Amazon
Experience;Experience
Experiment Traxter 7;Experiment Traxter 7
Exploding Fish;Exploding Fish
Exploding Fist+;Exploding Fist+
Exploding Wall;Exploding Wall
Explorer;Explorer
Express Raider;Express Raider
Exterminator;Exterminator
Extreme;Extreme
Extricator;Extricator
Eye of Horus;Eye of Horus
Eye of the Beholder;Eye of the Beholder
Eye of the Gods;Eye of the Gods
F-14 Tomcat;F-14 Tomcat
F-15 Strike Eagle;F-15 Strike Eagle
F-16 Combat Pilot;F-16 Combat Pilot
F-18 Hornet;F-18 Hornet
F-Clash 64;F-Clash 64
F1 GP Circuits;F1 GP Circuits
F1 Tornado;F1 Tornado
FA Cup Football;FA Cup Football
Fabuland;Fabuland
Face Ache;Face Ache
Face Off!;Face Off!
Facemaker;Facemaker
Faerie;Faerie
Faery Tale Adventure, The;Faery Tale Adventure, The
Fahrenheit 451;Fahrenheit 451
Fairlight;Fairlight
Fairy Well;Fairy Well
Falcon - The Renegade Lord;Falcon - The Renegade Lord
Falcon Patrol;Falcon Patrol
Falcon Patrol II;Falcon Patrol II
Falklands 82;Falklands 82
Fall;Fall
Fallen;Fallen
Fallen Angel;Fallen Angel
Falling;Falling
Family Feud;Family Feud
Famous Five, The;Famous Five, The
Fantasy World Dizzy;Fantasy World Dizzy
Farstar;Farstar
Fast;Fast
Fast Break;Fast Break
Fast Eddie;Fast Eddie
Fast Food!;Fast Food!
Fast Future;Fast Future
Fast Tracks;Fast Tracks
Father Christmas;Father Christmas
Fearless Fred and the Factory of Doom;Fearless Fred and the Factory of Doom
Federation;Federation
Fellowship of the Ring, The;Fellowship of the Ring, The
Fernandez Must Die;Fernandez Must Die
Ferrari Formula One;Ferrari Formula One
Ferris' Christmas Caper;Ferris' Christmas Caper
Fetris;Fetris
Feud;Feud
Fickle;Fickle
Field of Fire;Field of Fire
Fiendish Freddy's Big Top O' Fun;Fiendish Freddy's Big Top O' Fun
Fifteen 3D;Fifteen 3D
Fifth Quadrant, The;Fifth Quadrant, The
Fight for Thurn;Fight for Thurn
Fight Night;Fight Night
Fighter Bomber;Fighter Bomber
Fighter Pilot;Fighter Pilot
Fighting Soccer;Fighting Soccer
Fighting Warrior;Fighting Warrior
Final Blow;Final Blow
Final Encounter, The;Final Encounter, The
Final Fight;Final Fight
Final Programme, The;Final Programme, The
Final Tennis;Final Tennis
Finders Keepers;Finders Keepers
Fire and Forget II;Fire and Forget II
Fire Ant;Fire Ant
Fire Breath;Fire Breath
Fire Bug;Fire Bug
Fire Eagle;Fire Eagle
Fir
Download .txt
gitextract_7h18_87y/

├── .gitignore
├── ExoDOSConverter.sh
├── MyeXoDOS.sel
├── MyeXoWin.sel
├── README.md
├── TDLindexer.py
├── appleiigsconverter.py
├── build.bat
├── build.txt
├── c64converter.py
├── changelog.txt
├── commandhandler.py
├── conf/
│   └── conf-exo.conf
├── conf.py
├── confconverter.py
├── data/
│   ├── C64Dreams.csv
│   ├── P2K.template.txt
│   ├── dosbox-0.74-default.conf
│   ├── eXoAppleIIGS.csv
│   ├── eXoDOSv6.csv
│   ├── eXoScummVM.csv
│   ├── eXoWin3xv2.csv
│   ├── fixGenres-C64Dreams.csv
│   ├── fixGenres-eXoDOSv6.csv
│   ├── fixGenres-eXoWin3xv2.csv
│   ├── keyb2Joypad.csv
│   ├── padto.keys
│   ├── padto.keys-nojoy
│   └── padtokeys/
│       └── WackyWhe-eXoDOSv6.keys
├── dosboxconfv6.py
├── exoDOSConverter.sh
├── exoconverter.py
├── exogui.py
├── gamegenerator.py
├── genre_mapping.py
├── gui/
│   └── gui-en-exo.csv
├── keyb2joypad.py
├── lists.py
├── logger.py
├── main.py
├── mapping.py
├── metadatahandler.py
├── mister.py
├── requirements.txt
├── scummvmconverter.py
├── test/
│   └── test_genres.py
├── util.py
└── wckToolTips.py
Download .txt
SYMBOL INDEX (214 symbols across 20 files)

FILE: TDLindexer.py
  function scantree_files (line 26) | def scantree_files(path):
  function clean_name (line 36) | def clean_name(name):
  function index (line 43) | def index(outputDir, scriptDir, fullnameToGameDir, isDebug, preExtractGa...

FILE: appleiigsconverter.py
  class AppleIIGSConverter (line 11) | class AppleIIGSConverter:
    method __init__ (line 13) | def __init__(self, games, cache, scriptDir, collectionVersion, collect...
    method convertGames (line 33) | def convertGames(self):
    method __convertGame__ (line 95) | def __convertGame__(self, game, gamelist, totalSize, count):
    method __copyGameDataToOutputDir__ (line 109) | def __copyGameDataToOutputDir__(self, game, genre):
    method getLocalGameOutputDir (line 172) | def getLocalGameOutputDir(self, genre):

FILE: c64converter.py
  class C64Converter (line 10) | class C64Converter:
    method __init__ (line 12) | def __init__(self, games, cache, scriptDir, collectionVersion, collect...
    method convertGames (line 32) | def convertGames(self):
    method __convertGame__ (line 94) | def __convertGame__(self, game, gamelist, totalSize, count):
    method __copyManual (line 112) | def __copyManual(self, game):
    method __copyGameDataToOutputDir__ (line 124) | def __copyGameDataToOutputDir__(self, game, genre):
    method handleCompilationDisk (line 149) | def handleCompilationDisk(self, game, outputDir, collectionGamePath):
    method handleM3U (line 165) | def handleM3U(self, game, outputDir, collectionGamePath, m3uFile):
    method handleMultiDisksWithoutM3U (line 173) | def handleMultiDisksWithoutM3U(self, game, outputDir, collectionGamePa...
    method handleSingleDisk (line 182) | def handleSingleDisk(self, game, outputDir, collectionGamePath, gameFi...
    method handleSingleDiskWithCmd (line 189) | def handleSingleDiskWithCmd(self, game, outputDir, collectionGamePath,...
    method handleSingleDiskWithoutCmd (line 216) | def handleSingleDiskWithoutCmd(self, game, outputDir, collectionGamePa...
    method createM3u (line 223) | def createM3u(self, collectionGamePath, outputDir, game, disks):
    method getLocalGameOutputDir (line 243) | def getLocalGameOutputDir(self, genre):

FILE: commandhandler.py
  class CommandHandler (line 9) | class CommandHandler:
    method __init__ (line 11) | def __init__(self, gGator):
    method __dosRename__ (line 18) | def __dosRename__(path, originalFile, fileName, fileExt, cdCount):
    method useLine (line 39) | def useLine(line, cLines):
    method __pathListInCommandLine__ (line 47) | def __pathListInCommandLine__(line, startTokens, endTokens):
    method reducePathExoPart (line 65) | def reducePathExoPart(self, path, gameInternalBatFile=False):
    method reducePath (line 83) | def reducePath(self, path, gameInternalBatFile=False):
    method handleImgmount (line 101) | def handleImgmount(self, line, gameInternalBatFile=False):
    method handleBoot (line 159) | def handleBoot(self, line):
    method handleMount (line 205) | def handleMount(self, line):
    method __cleanCDname__ (line 260) | def __cleanCDname__(self, path, cdCount=None, gameInternalBatFile=False):
    method __cleanCue__ (line 301) | def __cleanCue__(self, path, fileName, cdCount):

FILE: conf.py
  function cleanString (line 2) | def cleanString(string):
  function loadConf (line 6) | def loadConf(confFile):

FILE: confconverter.py
  class ConfConverter (line 11) | class ConfConverter:
    method __init__ (line 13) | def __init__(self, gGator):
    method __getExpertParam__ (line 26) | def __getExpertParam__(self, parameter, defaultValue):
    method processV6 (line 33) | def processV6(self, gGator, defaultDosboxConf, optionsDosboxConfPath):
    method setUserParameters (line 61) | def setUserParameters(self, dosboxConf, gGator):
    method processV5 (line 75) | def processV5(self, gGator):
    method __createDosboxBat__ (line 127) | def __createDosboxBat__(self, cmdlines, retroDosboxBat, retroDosboxCfg...
    method __convertLine__ (line 141) | def __convertLine__(self, cmdline, retroDosboxBat, gGator, whereWeAt):
    method __handlePotentialSubFile__ (line 192) | def __handlePotentialSubFile__(self, subPath, gGator, handledSubFiles,...
    method __handleRunBat__ (line 240) | def __handleRunBat__(self, gGator):

FILE: dosboxconfv6.py
  function loadDosboxConf (line 7) | def loadDosboxConf(dosboxFile, dosboxConf):
  function writeDosboxConf (line 33) | def writeDosboxConf(path, dosboxConf):

FILE: exoconverter.py
  class ExoConverter (line 15) | class ExoConverter:
    method __init__ (line 17) | def __init__(self, games, cache, scriptDir, collectionVersion, collect...
    method convertGames (line 40) | def convertGames(self):
    method __convertGame__ (line 102) | def __convertGame__(self, game, gamelist, totalSize, count):
    method __copyGameDataToOutputDir__ (line 127) | def __copyGameDataToOutputDir__(self, gGator):
    method __unzipGame__ (line 194) | def __unzipGame__(self, gameZipPath, gGator):
    method __postConversion__ (line 207) | def __postConversion__(self):

FILE: exogui.py
  class ExoGUI (line 22) | class ExoGUI:
    method __init__ (line 25) | def __init__(self, scriptDir, logger, title):
    method draw (line 112) | def draw(self):
    method __setFontSize__ (line 118) | def __setFontSize__(self, value):
    method __drawMainframe__ (line 128) | def __drawMainframe__(self):
    method __openFileExplorer__ (line 139) | def __openFileExplorer__(self, openDir, var, fileType):
    method __drawPathsFrame__ (line 158) | def __drawPathsFrame__(self):
    method __changeConversionType__ (line 192) | def __changeConversionType__(self, event):
    method __drawConfigurationFrame__ (line 196) | def __drawConfigurationFrame__(self):
    method __drawGenericConfigurationFrame__ (line 203) | def __drawGenericConfigurationFrame__(self):
    method __drawBasicConfigurationFrame__ (line 309) | def __drawBasicConfigurationFrame__(self):
    method __drawExpertConfigurationFrame__ (line 376) | def __drawExpertConfigurationFrame__(self):
    method __checkExpertMode__ (line 443) | def __checkExpertMode__(self):
    method __handleCollectionFolder__ (line 454) | def __handleCollectionFolder__(self, *args):
    method __filterGamesList__ (line 484) | def __filterGamesList__(self, *args):
    method __drawSelectionFrame__ (line 492) | def __drawSelectionFrame__(self):
    method __saveCustom__ (line 624) | def __saveCustom__(self):
    method __loadCustom__ (line 641) | def __loadCustom__(self):
    method __clickLeft__ (line 663) | def __clickLeft__(self):
    method __selectAll__ (line 673) | def __selectAll__(self):
    method __unselectAll__ (line 686) | def __unselectAll__(self):
    method __clickRight__ (line 692) | def __clickRight__(self):
    method __drawButtonsFrame__ (line 705) | def __drawButtonsFrame__(self):
    method __clickSave__ (line 726) | def __clickSave__(self):
    method __saveConfFile__ (line 733) | def __saveConfFile__(self):
    method __saveConfInMem__ (line 761) | def __saveConfInMem__(self):
    method __clickVerify__ (line 779) | def __clickVerify__(self):
    method __clickProceed__ (line 791) | def __clickProceed__(self):
    method __setComponentState__ (line 856) | def __setComponentState__(component, state):
    method __handleComponentsState__ (line 861) | def __handleComponentsState__(self, clickedProcess):
    method postProcess (line 913) | def postProcess(self):
    method __drawConsole__ (line 918) | def __drawConsole__(self):
    method __updateConsoleFromQueue__ (line 934) | def __updateConsoleFromQueue__(self):
    method __writeToConsole__ (line 942) | def __writeToConsole__(self, msg):

FILE: gamegenerator.py
  class GameGenerator (line 12) | class GameGenerator:
    method __init__ (line 14) | def __init__(self, game, gameDir, genre, outputDir, collectionVersion,...
    method isWin3x (line 37) | def isWin3x(self):
    method getLocalParentOutputDir (line 45) | def getLocalParentOutputDir(self):
    method getLocalGameOutputDir (line 49) | def getLocalGameOutputDir(self):
    method getLocalGameDataOutputDir (line 53) | def getLocalGameDataOutputDir(self):
    method getEmulationGameOutputDir (line 58) | def getEmulationGameOutputDir(self):
    method convertGame (line 68) | def convertGame(self):
    method __copyGameFiles__ (line 79) | def __copyGameFiles__(self):
    method __specificFixes (line 125) | def __specificFixes(self):
    method __postConversion__ (line 141) | def __postConversion__(self):
    method __postConversionForEmuelec__ (line 156) | def __postConversionForEmuelec__(self):
    method __postConversionForRecalbox__ (line 203) | def __postConversionForRecalbox__(self):
    method __postConversionForBatocera__ (line 216) | def __postConversionForBatocera__(self):
    method __postConversionDosboxPureZip (line 224) | def __postConversionDosboxPureZip(self):
    method __postConversionForMister__ (line 268) | def __postConversionForMister__(self):
    method __postConversionForOpenDingux__ (line 343) | def __postConversionForOpenDingux__(self):
    method __postConversionForRetropie__ (line 377) | def __postConversionForRetropie__(self):

FILE: genre_mapping.py
  class Genre (line 4) | class Genre(Enum):
  function mapGenres (line 102) | def mapGenres(input_genres):

FILE: keyb2joypad.py
  class Keyb2Joypad (line 21) | class Keyb2Joypad:
    method __init__ (line 23) | def __init__(self, scriptDir, logger):
    method load (line 28) | def load(self):
    method get (line 66) | def get(conf, columns, value):
    method getValues (line 70) | def getValues(conf, columns, values):
    method extractCtrlButtonConf (line 74) | def extractCtrlButtonConf(buttonCellValues, conf, button):
    method emptyList (line 79) | def emptyList(values):

FILE: logger.py
  class Logger (line 5) | class Logger:
    method __init__ (line 10) | def __init__(self):
    method printDict (line 14) | def printDict(self, dictList, level=INFO):
    method logList (line 19) | def logList(self, desc, msgList, level=INFO):
    method log (line 24) | def log(self, msg, level=INFO, replaceLine=False):
    method logProcess (line 33) | def logProcess(self, process):

FILE: mapping.py
  class Mapping (line 33) | class Mapping:
    method __init__ (line 35) | def __init__(self, gamesConf, game, fullname, localGameOutputDir, conv...
    method __initGameMapping__ (line 45) | def __initGameMapping__(self):
    method __convertK2JToGeneric__ (line 61) | def __convertK2JToGeneric__(keymapping):
    method mapForBatocera (line 71) | def mapForBatocera(self):

FILE: metadatahandler.py
  class MetadataHandler (line 18) | class MetadataHandler:
    method __init__ (line 20) | def __init__(self, scriptDir, exoCollectionDir, collectionVersion, cac...
    method __getNode__ (line 32) | def __getNode__(i, e):
    method initXml (line 38) | def initXml(outputDir):
    method writeXml (line 49) | def writeXml(outputDir, gamelist):
    method parseXmlMetadata (line 56) | def parseXmlMetadata(self):
    method __handleMetadata__ (line 94) | def __handleMetadata__(self, game):
    method processGame (line 106) | def processGame(self, game, gamelist, genre, outputDir, useLongFolderN...
    method __cleanXmlString__ (line 121) | def __cleanXmlString__(s):
    method writeHiddenGamelistEntry (line 125) | def writeHiddenGamelistEntry(self, gamelist, game, genre, useGenreSubF...
    method __writeGamelistEntry__ (line 136) | def __writeGamelistEntry__(self, gamelist, metadata, game, genre, useL...
    method loadFixGenre (line 186) | def loadFixGenre(scriptDir, collectionVersion):
    method buildGenre (line 200) | def buildGenre(dosGame, fixGenres):

FILE: mister.py
  function removeUnusedCds (line 13) | def removeUnusedCds(game, localGameDataOutputDir, logger):
  function batsAndMounts (line 35) | def batsAndMounts(gGator):
  function handleRunBat (line 73) | def handleRunBat(gGator):
  function convertSoundConfig (line 112) | def convertSoundConfig(line):
  function convertImgMount (line 124) | def convertImgMount(line, gGator):
  function convertMount (line 129) | def convertMount(line, gGator):
  function convertBoot (line 134) | def convertBoot(line, gGator):
  function handlesFileType (line 139) | def handlesFileType(line, pathPos, gGator):
  function locateMountedFiles (line 172) | def locateMountedFiles(path, gGator):
  function convertCD (line 190) | def convertCD(localPath, gGator, letter='d'):
  function convertFloppy (line 231) | def convertFloppy(localPath, gGator, letter):
  function convertBootDisk (line 250) | def convertBootDisk(localPath, gGator):
  function convertMountedFolder (line 271) | def convertMountedFolder(letter, localPath, gGator):
  function createSetupBat (line 280) | def createSetupBat(gGator):
  function createEditBat (line 338) | def createEditBat(gGator):
  function text2png (line 345) | def text2png(scriptDir, text, cover, generatedImgpath):

FILE: scummvmconverter.py
  class ScummVMConverter (line 11) | class ScummVMConverter:
    method __init__ (line 13) | def __init__(self, games, cache, scriptDir, collectionVersion, collect...
    method convertGames (line 33) | def convertGames(self):
    method __convertGame__ (line 95) | def __convertGame__(self, game, gamelist, totalSize, count):
    method __copyGameDataToOutputDir__ (line 108) | def __copyGameDataToOutputDir__(self, game, genre):
    method generatescummvmfiles (line 165) | def generatescummvmfiles(self, game, gamefolder, outputdir):
    method getLocalGameOutputDir (line 214) | def getLocalGameOutputDir(self, genre):

FILE: test/test_genres.py
  function buildGenre_old (line 15) | def buildGenre_old(dosGame):

FILE: util.py
  function getMapperValues (line 55) | def getMapperValues(conversionType):
  function isWin3x (line 66) | def isWin3x(collectionVersion):
  function getCollectionRootDirToken (line 70) | def getCollectionRootDirToken(collection):
  function getCollectionGamesDirToken (line 74) | def getCollectionGamesDirToken(collection):
  function getCollectionMetadataDir (line 78) | def getCollectionMetadataDir(collectionDir):
  function getCollectionGamesDir (line 85) | def getCollectionGamesDir(collectionDir, collection):
  function getCollectionGamesConfDir (line 89) | def getCollectionGamesConfDir(collectionDir, collection):
  function getCollectionUpdateDir (line 94) | def getCollectionUpdateDir(collectionDir, collection):
  function getCollectionMetadataID (line 98) | def getCollectionMetadataID(collection):
  function getCollectionPicID (line 102) | def getCollectionPicID(collection):
  function getKeySetString (line 106) | def getKeySetString(string, setKey):
  function getConfFilename (line 110) | def getConfFilename(setKey):
  function getConfBakFilename (line 114) | def getConfBakFilename(setKey):
  function getGuiStringsFilename (line 118) | def getGuiStringsFilename(setKey):
  function lines_that_contain (line 122) | def lines_that_contain(string, fp):
  function callProcess (line 126) | def callProcess(subProcessArgs,logger):
  function installAria2cWindows (line 133) | def installAria2cWindows(exoCollectionDir, logger):
  function installAria2cLinux (line 146) | def installAria2cLinux(exoCollectionDir, logger):
  function installAria2cMac (line 150) | def installAria2cMac(exoCollectionDir, logger):
  function installAria2c (line 154) | def installAria2c(exoCollectionDir, logger):
  function downloadTorrent (line 163) | def downloadTorrent(gameZip, gameZipPath, exoCollectionDir, logger):
  function downloadZip (line 237) | def downloadZip(gameZip, gameZipPath, logger):
  function loadUIStrings (line 273) | def loadUIStrings(scriptDir, guiStringsFile):
  function localOSPath (line 287) | def localOSPath(path):
  function resize (line 295) | def resize(imgPath):
  function getCleanGameID (line 305) | def getCleanGameID(metadata, ext):
  function getRomsFolderPrefix (line 315) | def getRomsFolderPrefix(conversionType, conversionConf):
  function isCollectionPath (line 333) | def isCollectionPath(collectionPath, collection):
  function validCollectionPath (line 341) | def validCollectionPath(collectionPath):
  function fullnameToGameDir (line 357) | def fullnameToGameDir(collectionDir, scriptDir, collectionVersion, logger):
  function buildCollectionCSV (line 372) | def buildCollectionCSV(scriptDir, gamesConfDir, collectionVersion, logger):
  function findPics (line 395) | def findPics(name, cache):
  function cleanPicName (line 405) | def cleanPicName(picName):
  function findPic (line 410) | def findPic(gameName, cache, ext):
  function buildPicCache (line 435) | def buildPicCache(imageFolder, picCache, logger):
  function loadPicCache (line 456) | def loadPicCache(picCache, imageFolder, logger):
  function buildCache (line 467) | def buildCache(scriptDir, collectionDir, collection, logger):
  function checkMultipleofSameGame (line 501) | def checkMultipleofSameGame(useGenreSubFolders, metadata, genre, game, g...
  function moveFolderifExist (line 522) | def moveFolderifExist(useGenreSubFolders, metadata, genre, game, gameDir...

FILE: wckToolTips.py
  class ToolTipManager (line 18) | class ToolTipManager:
    method __init__ (line 23) | def __init__(self):
    method getcontroller (line 26) | def getcontroller(self, widget):
    method register (line 45) | def register(self, widget, text):
    method unregister (line 51) | def unregister(self, widget):
    method enter (line 58) | def enter(self, event):
    method display (line 74) | def display(self, widget):
    method leave (line 87) | def leave(self, event):
  function register (line 108) | def register(widget, text):
  function unregister (line 116) | def unregister(widget):
Condensed preview — 48 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,262K chars).
[
  {
    "path": ".gitignore",
    "chars": 147,
    "preview": "**/__pycache__\n**/cache\n**/distro\n*.bak\nExoDOSConverter.iml\n**/.idea\n**/venv\nname_mapping.txt\n*.IDX\n*.idx\n\nExoDOSConvert"
  },
  {
    "path": "ExoDOSConverter.sh",
    "chars": 16,
    "preview": "python3 main.py\n"
  },
  {
    "path": "MyeXoDOS.sel",
    "chars": 68810,
    "preview": "Abuse (1995)\nAlone in the Dark (1992)\nAlone in the Dark 2 (1993)\nAirball (1987)\nJack in the Dark (1993)\nAladino (1994)\nA"
  },
  {
    "path": "MyeXoWin.sel",
    "chars": 11199,
    "preview": "After Dark 3.2 (1995)\nVampire (1996)\nBermuda Syndrome (1996)\nBurn -Cycle (1995)\nDagger's Rage (1995)\nD-Generation (1994)"
  },
  {
    "path": "README.md",
    "chars": 6911,
    "preview": "[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/donate?hosted_button_id=LEAH843"
  },
  {
    "path": "TDLindexer.py",
    "chars": 10008,
    "preview": "\"\"\"\nThe TDL indexer discovers all of the files in/under the provided source\ndirectory and builds a list of all of the fi"
  },
  {
    "path": "appleiigsconverter.py",
    "chars": 8223,
    "preview": "import os\nimport shutil\nimport util\nimport sys\nimport traceback\nfrom metadatahandler import MetadataHandler\nfrom zipfile"
  },
  {
    "path": "build.bat",
    "chars": 1160,
    "preview": "@echo off\nset /p \"version=Version number: \"\necho .\necho Clean build directory content\nrd /s /q .\\build\nif exist .\\build "
  },
  {
    "path": "build.txt",
    "chars": 895,
    "preview": "If you want to build your own executable on Windows, it's pretty straightforward :\n- Install your Python 3.8 or 3.9 envi"
  },
  {
    "path": "c64converter.py",
    "chars": 13291,
    "preview": "import os\nimport shutil\nimport util\nimport sys\nimport traceback\nfrom metadatahandler import MetadataHandler\n\n\n# noinspec"
  },
  {
    "path": "changelog.txt",
    "chars": 3946,
    "preview": "0.9.5-beta\n- C64 dreams support (without custom controller mapping for now)\n- small mapping fixes for eXoDOS\n\n0.9-4-beta"
  },
  {
    "path": "commandhandler.py",
    "chars": 17738,
    "preview": "import os\nimport shutil\nimport stat\nimport util\nimport ntpath\n\n\n# Converts dosbox commands to desired format and paths, "
  },
  {
    "path": "conf/conf-exo.conf",
    "chars": 1530,
    "preview": "# Path where your set will be created (exodos collection will be left untouched)\noutputDir = H:\\ExoDOSConverted\n# Path t"
  },
  {
    "path": "conf.py",
    "chars": 430,
    "preview": "\ndef cleanString(string):\n    return string.rstrip('\\n\\r ').lstrip()\n\n\ndef loadConf(confFile):\n    conf = dict()\n    \n  "
  },
  {
    "path": "confconverter.py",
    "chars": 17286,
    "preview": "import os\nfrom commandhandler import CommandHandler\nimport util\nimport dosboxconfv6\nimport chardet\nimport lists\nimport s"
  },
  {
    "path": "data/C64Dreams.csv",
    "chars": 107770,
    "preview": "10th Frame;10th Frame\n180;180\n1917;1917\n1942;1942\n1nvader;1nvader\n2000 Kung-Fu Maniacs;2000 Kung-Fu Maniacs\n221B Baker S"
  },
  {
    "path": "data/P2K.template.txt",
    "chars": 2004,
    "preview": "# Recalbox's Pad-to-Keyboard configuration\n#{GameID}\n#DOS\n\n# DPad and LeftJoystick - Player 1\n0:up = up\n0:down = down\n0:"
  },
  {
    "path": "data/dosbox-0.74-default.conf",
    "chars": 10730,
    "preview": "# This is the configurationfile for DOSBox 0.74. (Please use the latest version of DOSBox)\n# Lines starting with a # are"
  },
  {
    "path": "data/eXoAppleIIGS.csv",
    "chars": 21620,
    "preview": "3D-Triss (1993);3D-Triss (1993)\n4th and Inches (1988);4th and Inches (1988)\nA-maze-ing (1988);A-maze-ing (1988)\nAaargh! "
  },
  {
    "path": "data/eXoDOSv6.csv",
    "chars": 254695,
    "preview": "$100,000 Pyramid (1988);$100000P\nHigh Stakes by Dick Francis (1986);$takes\n+K (1996);+K\n007 - Licence to Kill (1989);007"
  },
  {
    "path": "data/eXoScummVM.csv",
    "chars": 31356,
    "preview": "3 Skulls of the Toltecs (CD DOS);3 Skulls of the Toltecs (CD DOS)\n7th Guest, The (Multi-Platform);7th Guest, The (Multi-"
  },
  {
    "path": "data/eXoWin3xv2.csv",
    "chars": 44584,
    "preview": "101 Dalmatians - Escape From DeVil Manor (1997);101Dalma\n1942 - The Pacific Air War Gold (1994);1942-The\n20,000 Leagues "
  },
  {
    "path": "data/fixGenres-C64Dreams.csv",
    "chars": 82,
    "preview": "Pinball;Macadam Bumper\nPinball;Soccer Pinball\nPinball;3-D Pinball - Pinball Power\n"
  },
  {
    "path": "data/fixGenres-eXoDOSv6.csv",
    "chars": 61059,
    "preview": "Action-Adventure;Abuse\nAction-Adventure;adark1\nAction-Adventure;adark2\nAction-Adventure;adark3\nAction-Adventure;airball\n"
  },
  {
    "path": "data/fixGenres-eXoWin3xv2.csv",
    "chars": 61059,
    "preview": "Action-Adventure;Abuse\nAction-Adventure;adark1\nAction-Adventure;adark2\nAction-Adventure;adark3\nAction-Adventure;airball\n"
  },
  {
    "path": "data/keyb2Joypad.csv",
    "chars": 1266598,
    "preview": "eXoID$Game$Subgenre$Documentation Found$Players$Joystick Support$Config Changes$Redefine Keys$Freetype$Pre menu$Start$Me"
  },
  {
    "path": "data/padto.keys",
    "chars": 3419,
    "preview": "{\n    \"actions_player1\": [\n        {\n            \"trigger\": \"joystick2\",\n            \"type\": \"mouse\"\n            \"descri"
  },
  {
    "path": "data/padto.keys-nojoy",
    "chars": 2678,
    "preview": "{\n    \"actions_player1\": [\n        {\n            \"trigger\": \"l2\",\n            \"type\": \"key\",\n            \"target\": \"KEY_"
  },
  {
    "path": "data/padtokeys/WackyWhe-eXoDOSv6.keys",
    "chars": 2946,
    "preview": "{\n    \"actions_player1\": [\n        {\n            \"trigger\": \"l2\",\n            \"type\": \"key\",\n            \"target\": \"KEY_"
  },
  {
    "path": "dosboxconfv6.py",
    "chars": 1423,
    "preview": "import copy\n\ncategoryOrder = ['[sdl]', '[dosbox]', '[render]', '[cpu]', '[mixer]', '[midi]', '[sblaster]', '[gus]', '[sp"
  },
  {
    "path": "exoDOSConverter.sh",
    "chars": 16,
    "preview": "python3 main.py\n"
  },
  {
    "path": "exoconverter.py",
    "chars": 16540,
    "preview": "import os\nimport shutil\nimport sys\nimport traceback\nfrom metadatahandler import MetadataHandler\nfrom keyb2joypad import "
  },
  {
    "path": "exogui.py",
    "chars": 55642,
    "preview": "import tkinter as Tk\nfrom tkinter import ttk, messagebox, filedialog\nfrom operator import attrgetter\nimport tkinter.font"
  },
  {
    "path": "gamegenerator.py",
    "chars": 24233,
    "preview": "import os\nimport util\nimport shutil\nimport ntpath\nimport mister\nfrom zipfile import ZipFile\nfrom confconverter import Co"
  },
  {
    "path": "genre_mapping.py",
    "chars": 5671,
    "preview": "from enum import Enum\n\n\nclass Genre(Enum):\n    # the target genres we want to map to\n    UNKNOWN = \"Unknown\"\n    MISC = "
  },
  {
    "path": "gui/gui-en-exo.csv",
    "chars": 2635,
    "preview": "id;label;help\noutputDir;Output directory;Path where your set will be created (exodos collection will be left untouched)\n"
  },
  {
    "path": "keyb2joypad.py",
    "chars": 4358,
    "preview": "import os\n\n\nkeyTranslations = {'Button 1': 'b', 'Button 2': 'a', 'Button 3': 'y', 'Button 4': 'x', 'Button 5': 'pageup',"
  },
  {
    "path": "lists.py",
    "chars": 238,
    "preview": "gamesWithRunBatHandling = [\n    'bisle2',\n    'Blood',\n    'Carmaged',\n    'comcon',\n    'comconra',\n    'CrypticP',\n   "
  },
  {
    "path": "logger.py",
    "chars": 1842,
    "preview": "import queue\nimport re\n\n\nclass Logger:\n    ERROR = 'ERROR'\n    WARNING = 'WARNING'\n    INFO = 'INFO'\n\n    def __init__(s"
  },
  {
    "path": "main.py",
    "chars": 357,
    "preview": "import os.path\nimport sys\nfrom exogui import ExoGUI\nfrom logger import Logger\n\n\nif __name__ == \"__main__\":\n    scriptDir"
  },
  {
    "path": "mapping.py",
    "chars": 7222,
    "preview": "import os\nimport shutil\n\ndefaultKeys = {'l2': {'type': 'kp', 'description': '1', \"key\": \"1\"},\n               'r2': {'typ"
  },
  {
    "path": "metadatahandler.py",
    "chars": 11305,
    "preview": "import collections\nimport os\nimport platform\nimport util\nimport shutil\nimport sys\nimport xml.etree.ElementTree as etree\n"
  },
  {
    "path": "mister.py",
    "chars": 17712,
    "preview": "import os\nimport util\nimport shutil\nimport ntpath\nimport platform\nimport lists\nfrom PIL import ImageFont\nfrom PIL import"
  },
  {
    "path": "requirements.txt",
    "chars": 127,
    "preview": "certifi==2021.10.8\nchardet==4.0.0\ncharset-normalizer==2.0.12\nidna==3.3\nPillow==9.0.1\nrequests==2.27.1\ntk==0.1.0\nurllib3="
  },
  {
    "path": "scummvmconverter.py",
    "chars": 9803,
    "preview": "import os\nimport shutil\nimport util\nimport sys\nimport traceback\nfrom metadatahandler import MetadataHandler\nfrom zipfile"
  },
  {
    "path": "test/test_genres.py",
    "chars": 3894,
    "preview": "# Tester file for genre metadata mapping\n\nimport pandas as pd\nfrom logger import Logger\nfrom metadatahandler import Meta"
  },
  {
    "path": "util.py",
    "chars": 23749,
    "preview": "import errno\nimport subprocess\nimport os.path\nimport platform\nimport collections\nimport shutil\nfrom PIL import Image\nimp"
  },
  {
    "path": "wckToolTips.py",
    "chars": 3792,
    "preview": "#\n# WCKLIB\n# $Id$\n#\n# tooltips for arbitrary Tkinter widgets\n#\n# written by Fredrik Lundh, June 1997.  changed to use a "
  }
]

About this extraction

This page contains the full source code of the Voljega/ExoDOSConverter GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 48 files (2.1 MB), approximately 557.7k tokens, and a symbol index with 214 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!